Revision 843
- Date:
- 2022/11/01 13:57:31
- Files:
Legend:
- Added
- Removed
- Modified
-
utf8/core/comps/contenido/ajax/document_move.html
15 15 <%init> 16 16 17 17 my %result; 18 warn Dumper(\%ARGS); 18 19 19 if ( $id && $id =~ /^\d+$/ && $s && $s =~ /^\d+$/ && $move && $move =~ /^(up|down|first|last|before|after)$/ && (!$aid || $aid && $aid =~ /^\d+$/) ) { 20 my $section = $keeper->get_section_by_id( $s ); 21 if ( ref $section ) { 22 if ( $section->_sorted ) { 23 if ( $section->dmove( $id, $move, $aid ) ) { 24 my $position = $section->_get_document_pos( $id ); 25 warn Dumper( $position ); 26 if ( ref $position && exists $position->{index} ) { 27 if ( exists $position->{before} ) { 28 $result{before} = $position->{before}; 29 $result{success} = 1; 30 } 31 if ( exists $position->{after} ) { 32 $result{after} = $position->{after}; 33 $result{success} = 1; 34 } 35 if ( exists $position->{first} ) { 36 $result{first} = 1; 37 $result{success} = 1; 38 } 39 if ( exists $position->{last} ) { 40 $result{last} = 1; 41 $result{success} = 1; 42 } 43 unless ( exists $result{success} ) { 20 if ( $id && $s && $s =~ /^\d+$/ && $move && $move =~ /^(up|down|first|last|before|after)$/ && (!$aid || $aid && $aid =~ /^\d+$/) ) { 21 my $check_id = 1; 22 my @ids; 23 if ( ref $id eq 'ARRAY' ) { 24 foreach my $data ( @$id ) { 25 if ( $data =~ /^\d+$/ ) { 26 push @ids, $data; 27 } else { 28 $check_id = 0; 29 last; 30 } 31 } 32 } elsif ( $id =~ /^[\d,]+$/ ) { 33 @ids = split(/,/, $id); 34 } else { 35 $check_id = 0; 36 } 37 if ( $check_id ) { 38 my $section = $keeper->get_section_by_id( $s ); 39 if ( ref $section ) { 40 if ( $section->_sorted ) { 41 if ( $section->dmove( \@ids, $move, $aid ) ) { 42 my $position = $section->_get_document_pos( $ids[0] ); 43 warn Dumper( $position ); 44 if ( ref $position && exists $position->{index} ) { 45 if ( exists $position->{before} ) { 46 $result{before} = $position->{before}; 47 $result{success} = 1; 48 } 49 if ( exists $position->{after} ) { 50 $result{after} = $position->{after}; 51 $result{success} = 1; 52 } 53 if ( exists $position->{first} ) { 54 $result{first} = 1; 55 $result{success} = 1; 56 } 57 if ( exists $position->{last} ) { 58 $result{last} = 1; 59 $result{success} = 1; 60 } 61 unless ( exists $result{success} ) { 62 $result{error} = Encode::decode('utf-8', 'Ошибка индексации. Для разбора полетов обратитесь к разработчикам'); 63 } 64 } else { 44 65 $result{error} = Encode::decode('utf-8', 'Ошибка индексации. Для разбора полетов обратитесь к разработчикам'); 45 66 } 46 67 } else { 47 $result{error} = Encode::decode('utf-8', 'Ошибка индексации. Для разбора полетов обратитесь к разработчикам'); 68 $result{error} = Encode::decode('utf-8', 'Ошибка перемещения. Для разбора полетов обратитесь к разработчикам'); 48 69 } 49 70 } else { 50 $result{error} = Encode::decode('utf-8', 'Ошибка перемещения. Для разбора полетов обратитесь к разработчикам'); 71 $result{error} = Encode::decode('utf-8', 'В данной секции отключен режим ручной сортировки'); 51 72 } 52 73 } else { 53 $result{error} = Encode::decode('utf-8', 'В данной секции отключен режим ручной сортировки'); 74 $result{error} = Encode::decode('utf-8', 'Секция не найдена'); 54 75 } 55 76 } else { 56 $result{error} = Encode::decode('utf-8', 'Секция не найдена'); 77 $result{error} = Encode::decode('utf-8', 'Переданы неверные параметры'); 57 78 } 58 79 } else { 59 80 $result{error} = Encode::decode('utf-8', 'Переданы неверные параметры'); -
utf8/core/comps/contenido/components/section_browse.msn
240 240 if ( sourceID == targetID ) { 241 241 return; 242 242 } 243 var checkedIds = []; 244 $('tr.data-row').each(function(index){ 245 $checkInput = $(this).find('.common-check'); 246 if ( $(this).data('id') == sourceID ) { 247 checkedIds.push($(this).data('id')); 248 $checkInput.prop('checked', true); 249 } else if ( $checkInput.prop('checked') ) { 250 checkedIds.push($(this).data('id')); 251 } 252 }); 253 if ( sourceID != checkedIds[0] ) { 254 $source = $('#row-' + checkedIds[0]); 255 } 243 256 $.ajax({ 244 257 'url' : '/contenido/ajax/document_move.html', 245 'data' : { 's' : <% ref $section ? $section->id : 0 %>, 'id' : sourceID, 'move' : 'after', 'aid' : targetID }, 258 'data' : { 's' : <% ref $section ? $section->id : 0 %>, 'id' : checkedIds.join(','), 'move' : 'after', 'aid' : targetID }, 246 259 'dataType' : 'json', 247 260 'success' : function( data ){ 248 261 if ( data.error ) { 249 262 alert( data.error ); 250 263 } else if ( data.after ) { 251 $source.detach().insertAfter($target); 264 checkedIds.forEach(function(rowID, index, ids) { 265 $source = $('#row-' + rowID); 266 $source.detach().insertAfter($target); 267 $source.find('.common-check').attr('checked', false); 268 $target = $source; 269 }); 252 270 console.log('Moved after ' + data.after); 253 271 } 254 272 } -
utf8/core/lib/Contenido/Section.pm
356 356 do { $log->warning("Вызов метода ->dmove() без указания идентификатора секции"); return undef } 357 357 unless (exists($self->{id}) && ($self->{id} > 0)); 358 358 359 my @doc_ids = ref $doc_id eq 'ARRAY' ? @$doc_id : ($doc_id); 360 return undef unless @doc_ids; 361 my %doc_ids = map { $_ => 1 } @doc_ids; 359 362 $direction = lc($direction); 360 363 unless ( $direction eq 'up' || $direction eq 'down' || $direction eq 'first' || $direction eq 'last' || $direction eq 'before' || $direction eq 'after' ) { 361 364 $log->warning("Направление перемещения документа задано неверно"); return undef … … 371 374 my $order = $self->_get_document_order; 372 375 my @new_order; 373 376 if ( $direction eq 'first' ) { 374 push @new_order, $doc_id; 377 push @new_order, @doc_ids; 375 378 } 376 379 for ( my $i = 0; $i < scalar @$order; $i++ ) { 377 if ( ($direction eq 'first' || $direction eq 'last' || $direction eq 'after' || $direction eq 'before') && $order->[$i] == $doc_id ) { 380 if ( ($direction eq 'first' || $direction eq 'last' || $direction eq 'after' || $direction eq 'before') && exists $doc_ids{$order->[$i]} ) { 378 381 next; 379 } elsif ( $direction eq 'up' && $order->[$i] == $doc_id ) { 382 } elsif ( $direction eq 'up' && $order->[$i] == $doc_ids[0] ) { 380 383 if ( $i ) { 381 384 my $id = pop @new_order; 382 push @new_order, ($doc_id, $id); 385 push @new_order, (@doc_ids, $id); 383 386 } else { 384 push @new_order, $doc_id; 387 push @new_order, @doc_ids; 385 388 } 386 } elsif ( $direction eq 'down' && $order->[$i] == $doc_id ) { 389 } elsif ( $direction eq 'down' && $order->[$i] == $doc_ids[-1] ) { 387 390 if ( $i < scalar(@$order) - 1 ) { 388 push @new_order, ($order->[++$i], $doc_id); 391 push @new_order, ($order->[++$i], @doc_ids); 389 392 } else { 390 push @new_order, $doc_id; 393 push @new_order, @doc_ids; 391 394 } 392 395 } elsif ( $direction eq 'before' && $order->[$i] == $anchor ) { 393 push @new_order, ($doc_id, $order->[$i]); 396 push @new_order, (@doc_ids, $order->[$i]); 394 397 $anchor_flag = 0; 395 398 } elsif ( $direction eq 'after' && $order->[$i] == $anchor ) { 396 push @new_order, ($order->[$i], $doc_id); 399 push @new_order, ($order->[$i], @doc_ids); 397 400 $anchor_flag = 0; 398 } else { 401 } elsif ( !exists $doc_ids{$order->[$i]} ) { 399 402 push @new_order, $order->[$i]; 400 403 } 401 404 } … … 403 406 $log->warning("Неверный вызов функции dmove для направления '$direction'. Не найден якорь [$anchor]"); return undef; 404 407 } 405 408 if ( $direction eq 'last' ) { 406 push @new_order, $doc_id; 409 push @new_order, @doc_ids; 407 410 } 408 411 409 412 $self->{_sorted_order} = join ',', @new_order;