PATH:
home
/
lab2454c
/
argowells.com
/
wp-content
/
plugins
/
elementor
/
modules
/
components
<?php namespace Elementor\Modules\Components; use Elementor\Core\Utils\Collection; use Elementor\Modules\AtomicWidgets\Utils\Utils; use Elementor\Plugin; if ( ! defined( 'ABSPATH' ) ) { exit; } class Non_Atomic_Widget_Validator { const ERROR_CODE = 'non_atomic_element_in_component'; const WIDGET_EL_TYPE = 'widget'; public static function make(): Non_Atomic_Widget_Validator { return new self(); } public function validate( array $elements ): array { $non_atomic_elements = $this->find_non_atomic_elements( $elements ); if ( ! empty( $non_atomic_elements ) ) { return $this->build_error_response( $non_atomic_elements ); } return [ 'success' => true, 'messages' => [], ]; } public function validate_items( Collection $items ): array { foreach ( $items->all() as $item ) { $elements = $item['elements'] ?? []; $result = $this->validate( $elements ); if ( ! $result['success'] ) { return $result; } } return [ 'success' => true, 'messages' => [], ]; } private function find_non_atomic_elements( array $elements ): array { $non_atomic = []; foreach ( $elements as $element ) { $el_type = $element['elType'] ?? null; $widget_type = $element['widgetType'] ?? null; $element_type = $this->get_element_type( $el_type, $widget_type ); if ( $element_type && ! $this->is_element_atomic( $el_type, $widget_type ) ) { $non_atomic[] = $element_type; } if ( ! empty( $element['elements'] ) ) { $nested_non_atomic = $this->find_non_atomic_elements( $element['elements'] ); $non_atomic = array_merge( $non_atomic, $nested_non_atomic ); } } return array_unique( $non_atomic ); } private function get_element_type( ?string $el_type, ?string $widget_type ): ?string { return $widget_type ?? $el_type; } private function is_element_atomic( ?string $el_type, ?string $widget_type ): bool { if ( ! $el_type ) { return false; } $element_instance = Plugin::$instance->elements_manager->get_element( $el_type, $widget_type ); if ( ! $element_instance ) { return false; } return Utils::is_atomic( $element_instance ); } private function build_error_response( array $non_atomic_elements ): array { $message = sprintf( // translators: %s: Comma-separated list of non-atomic element types. esc_html__( 'Component contains non-supported elements: %s. Only atomic elements are allowed inside components.', 'elementor' ), implode( ', ', $non_atomic_elements ) ); return [ 'success' => false, 'code' => self::ERROR_CODE, 'messages' => [ $message ], 'non_atomic_elements' => $non_atomic_elements, ]; } }
[+]
widgets
[+]
..
[+]
utils
[+]
transformers
[-] components-rest-api.php
[edit]
[-] circular-dependency-validator.php
[edit]
[-] save-components-validator.php
[edit]
[-] module.php
[edit]
[+]
overridable-props
[-] non-atomic-widget-validator.php
[edit]
[+]
prop-types
[-] document-lock-manager.php
[edit]
[-] overridable-schema-extender.php
[edit]
[+]
styles
[-] component-lock-manager.php
[edit]
[+]
documents
[-] components-repository.php
[edit]