PluginProbe
Elementor Website Builder – more than just a page builder / 4.1.0-beta1
Elementor Website Builder – more than just a page builder v4.1.0-beta1
4.3.3 4.3.2 4.3.1 4.3.0 4.3.0-beta3 4.3.0-beta2 4.3.0-beta1 4.2.4 4.2.3 4.2.2 4.2.1 4.2.0 4.1.5 4.2.0-beta2 4.2.0-dev2 4.2.0-beta1 4.1.4 4.1.3 4.1.2 4.1.1 4.1.0 4.1.0-beta3 4.1.0-dev3 4.0.9 4.1.0-beta2 All 456 releases
← All changes | modules/global-classes/global-classes-rest-api.php +55 -10 4.3.3 → 4.1.0-beta1 View file →
@@ -19,8 +19,10 @@
19 19 const API_BASE_USAGE = self::API_BASE . '/usage';
20 20 const API_BASE_POST = self::API_BASE . '/post';
21 21 const API_BASE_STYLES = self::API_BASE . '/styles';
22 22 const MAX_ITEMS = 1000;
23 + const LABEL_PREFIX = 'DUP_';
24 + const MAX_LABEL_LENGTH = 50;
23 25 private ?Global_Classes_Repository $repository = null;
24 26 private ?Global_Classes_Relations $relations = null;
25 27 private ?Kit $kit = null;
26 28
@@ -255,9 +257,9 @@
255 257
256 258 $repository = $this->get_repository()->set_preview( $is_preview );
257 259 $global_order = array_keys( $repository->all_labels() );
258 260 $filtered_order = array_values( array_intersect( $global_order, $document_class_ids ) );
259 - $items = $repository->get_by_ids( $filtered_order );
261 + $items = $repository->get_by_ids( $document_class_ids );
260 262
261 263 $result = [];
262 264
263 265 foreach ( $document_class_ids as $id ) {
@@ -283,9 +285,9 @@
283 285
284 286 $repository = $this->get_repository()->set_preview( $is_preview );
285 287 $global_order = array_keys( $repository->all_labels() );
286 288 $filtered_order = array_values( array_intersect( $global_order, $requested_ids ) );
287 - $items = $repository->get_by_ids( $filtered_order );
289 + $items = $repository->get_by_ids( $requested_ids );
288 290
289 291 $result = [];
290 292
291 293 foreach ( $requested_ids as $id ) {
@@ -362,15 +364,8 @@
362 364 }
363 365
364 366 $final_item_ids = array_keys( $this->merge_touched_with_existing_labels( $all_label_by_id, $touched_items, $deleted_ids ) );
365 367
366 - $final_item_ids_set = array_flip( $final_item_ids );
367 - $order_set = array_flip( $order );
368 -
369 - $order = array_values( array_filter( $order, fn( $id ) => isset( $final_item_ids_set[ $id ] ) ) );
370 - $missing_from_order = array_values( array_filter( $final_item_ids, fn( $id ) => ! isset( $order_set[ $id ] ) ) );
371 - $order = array_merge( $order, $missing_from_order );
372 -
373 368 $order_result = $parser->parse_order( $order, $final_item_ids );
374 369
375 370 if ( ! $order_result->is_valid() ) {
376 371 return Error_Builder::make( 'invalid_order' )
@@ -458,9 +453,9 @@
458 453 foreach ( $duplicate_labels as $duplicate_label ) {
459 454 $item_id = $duplicate_label['item_id'];
460 455 $original_label = $duplicate_label['label'];
461 456
462 - $modified_label = Global_Classes_Labels::generate_unique_label( $original_label, $existing_labels );
457 + $modified_label = $this->generate_unique_label( $original_label, $existing_labels );
463 458
464 459 $modified_labels[ $item_id ] = [
465 460 'original' => $original_label,
466 461 'modified' => $modified_label,
@@ -467,6 +462,56 @@
467 462 ];
468 463 }
469 464
470 465 return $modified_labels;
466 + }
467 +
468 +
469 + private function generate_unique_label( $original_label, $existing_labels ) {
470 + $prefix = self::LABEL_PREFIX;
471 + $max_length = self::MAX_LABEL_LENGTH;
472 +
473 + $has_prefix = strpos( $original_label, $prefix ) === 0;
474 +
475 + if ( $has_prefix ) {
476 + $base_label = substr( $original_label, strlen( $prefix ) );
477 +
478 + $counter = 1;
479 + $new_label = $prefix . $base_label . $counter;
480 +
481 + while ( in_array( $new_label, $existing_labels, true ) ) {
482 + ++$counter;
483 + $new_label = $prefix . $base_label . $counter;
484 + }
485 +
486 + if ( strlen( $new_label ) > $max_length ) {
487 + $available_length = $max_length - strlen( $prefix . $counter );
488 + $base_label = substr( $base_label, 0, $available_length );
489 + $new_label = $prefix . $base_label . $counter;
490 + }
491 + } else {
492 + $new_label = $prefix . $original_label;
493 +
494 + if ( strlen( $new_label ) > $max_length ) {
495 + $available_length = $max_length - strlen( $prefix );
496 + $new_label = $prefix . substr( $original_label, 0, $available_length );
497 + }
498 +
499 + $counter = 1;
500 + $base_label = substr( $original_label, 0, $available_length ?? strlen( $original_label ) );
501 +
502 + while ( in_array( $new_label, $existing_labels, true ) ) {
503 + $new_label = $prefix . $base_label . $counter;
504 +
505 + if ( strlen( $new_label ) > $max_length ) {
506 + $available_length = $max_length - strlen( $prefix . $counter );
507 + $base_label = substr( $original_label, 0, $available_length );
508 + $new_label = $prefix . $base_label . $counter;
509 + }
510 +
511 + ++$counter;
512 + }
513 + }
514 +
515 + return $new_label;
471 516 }
472 517 }