| 1 |
<?php |
| 2 |
|
| 3 |
namespace Elementor\Modules\GlobalClasses\Utils; |
| 4 |
|
| 5 |
use Elementor\Modules\AtomicWidgets\Elements\Base\Atomic_Element_Base; |
| 6 |
use Elementor\Modules\AtomicWidgets\Elements\Base\Atomic_Widget_Base; |
| 7 |
use Elementor\Modules\AtomicWidgets\Utils\Utils as Atomic_Utils; |
| 8 |
use Elementor\Modules\AtomicWidgets\PropTypeMigrations\Schema_Resolver; |
| 9 |
use Elementor\Plugin; |
| 10 |
|
| 11 |
class Atomic_Elements_Utils { |
| 12 |
|
| 13 |
public static function is_classes_prop( $prop ) { |
| 14 |
// phpcs:ignore |
| 15 |
return 'plain' === $prop::$KIND && 'classes' === $prop->get_key(); |
| 16 |
} |
| 17 |
|
| 18 |
public static function collect_class_ids_from_element_data( array $element_data ): array { |
| 19 |
$element_type = self::get_element_type( $element_data ); |
| 20 |
$element_instance = self::get_element_instance( $element_type ); |
| 21 |
|
| 22 |
if ( ! Atomic_Utils::is_atomic( $element_instance ) ) { |
| 23 |
return []; |
| 24 |
} |
| 25 |
|
| 26 |
$schema = Schema_Resolver::get_widget_schema( $element_type ); |
| 27 |
$settings = $element_data['settings'] ?? []; |
| 28 |
$class_ids = []; |
| 29 |
|
| 30 |
foreach ( $schema as $settings_key => $prop ) { |
| 31 |
if ( ! self::is_classes_prop( $prop ) ) { |
| 32 |
continue; |
| 33 |
} |
| 34 |
|
| 35 |
$values = $settings[ $settings_key ]['value'] ?? []; |
| 36 |
|
| 37 |
if ( ! is_array( $values ) ) { |
| 38 |
continue; |
| 39 |
} |
| 40 |
|
| 41 |
foreach ( $values as $class_id ) { |
| 42 |
if ( is_string( $class_id ) && '' !== $class_id ) { |
| 43 |
$class_ids[] = $class_id; |
| 44 |
} |
| 45 |
} |
| 46 |
} |
| 47 |
|
| 48 |
return $class_ids; |
| 49 |
} |
| 50 |
|
| 51 |
public static function get_element_type( $element ) { |
| 52 |
return 'widget' === $element['elType'] ? $element['widgetType'] : $element['elType']; |
| 53 |
} |
| 54 |
|
| 55 |
public static function get_element_instance( $element_type ) { |
| 56 |
$widget = Plugin::instance()->widgets_manager->get_widget_types( $element_type ); |
| 57 |
$element = Plugin::instance()->elements_manager->get_element_types( $element_type ); |
| 58 |
|
| 59 |
return $widget ?? $element; |
| 60 |
} |
| 61 |
|
| 62 |
public static function is_atomic_element( $element_instance ) { |
| 63 |
if ( ! $element_instance ) { |
| 64 |
return false; |
| 65 |
} |
| 66 |
|
| 67 |
return ( |
| 68 |
$element_instance instanceof Atomic_Element_Base || |
| 69 |
$element_instance instanceof Atomic_Widget_Base |
| 70 |
); |
| 71 |
} |
| 72 |
} |
| 73 |
|