[
MAINHACK
]
Mail Test
BC
Config Scan
HOME
Create...
New File
New Folder
Viewing / Editing File: module.php
<?php namespace Elementor\Modules\Components; use Elementor\Core\Base\Module as BaseModule; use Elementor\Core\Experiments\Manager as Experiments_Manager; use Elementor\Modules\AtomicWidgets\Module as AtomicWidgetsModule; use Elementor\Plugin; use Elementor\Modules\AtomicWidgets\PropsResolver\Transformers_Registry; use Elementor\Modules\Components\Styles\Component_Styles; use Elementor\Modules\Components\Documents\Component as Component_Document; use Elementor\Modules\Components\Component_Lock_Manager; use Elementor\Modules\Components\PropTypes\Component_Instance_Prop_Type; use Elementor\Modules\Components\Transformers\Component_Instance_Transformer; use Elementor\Modules\Components\PropTypes\Overridable_Prop_Type; use Elementor\Modules\Components\Transformers\Overridable_Transformer; use Elementor\Core\Base\Document; use Elementor\Modules\Components\PropTypes\Override_Prop_Type; use Elementor\Modules\Components\Transformers\Override_Transformer; if ( ! defined( 'ABSPATH' ) ) { exit; // Exit if accessed directly. } class Module extends BaseModule { const EXPERIMENT_NAME = 'e_components'; const PACKAGES = [ 'editor-components' ]; public function get_name() { return 'components'; } public function __construct() { parent::__construct(); if ( ! $this->is_experiment_active() ) { return; } $this->register_component_post_type(); add_filter( 'elementor/editor/v2/packages', fn ( $packages ) => $this->add_packages( $packages ) ); add_filter( 'elementor/atomic-widgets/props-schema', fn ( $schema ) => $this->modify_props_schema( $schema ) ); add_action( 'elementor/documents/register', fn ( $documents_manager ) => $this->register_document_type( $documents_manager ) ); add_action( 'elementor/document/before_save', fn( Document $document, array $data ) => $this->validate_circular_dependencies( $document, $data ), 10, 2 ); add_action( 'elementor/document/after_save', fn( Document $document, array $data ) => $this->set_component_overridable_props( $document, $data ), 10, 2 ); add_filter( 'elementor/global_classes/additional_post_types', fn( $post_types ) => array_merge( $post_types, [ Component_Document::TYPE ] ) ); add_action( 'elementor/atomic-widgets/settings/transformers/register', fn ( $transformers ) => $this->register_settings_transformers( $transformers ) ); add_action( 'elementor/document/after_migrate', fn( Document $document, array $data ) => $this->after_component_migrate( $document, $data ), 10, 2 ); ( Component_Lock_Manager::get_instance()->register_hooks() ); ( new Component_Styles() )->register_hooks(); ( new Components_REST_API() )->register_hooks(); } public function is_experiment_active() { return Plugin::$instance->experiments->is_feature_active( self::EXPERIMENT_NAME ) && Plugin::$instance->experiments->is_feature_active( AtomicWidgetsModule::EXPERIMENT_NAME ); } public static function get_experimental_data() { return [ 'name' => self::EXPERIMENT_NAME, 'title' => esc_html__( 'Components', 'elementor' ), 'description' => esc_html__( 'Enable components.', 'elementor' ), 'hidden' => true, 'default' => Experiments_Manager::STATE_ACTIVE, 'release_status' => Experiments_Manager::RELEASE_STATUS_BETA, ]; } public function get_widgets() { return [ 'Component_Instance', ]; } private function add_packages( $packages ) { return array_merge( $packages, self::PACKAGES ); } private function modify_props_schema( array $schema ) { return Overridable_Schema_Extender::make()->get_extended_schema( $schema ); } private function register_component_post_type() { register_post_type( Component_Document::TYPE, [ 'label' => Component_Document::get_title(), 'labels' => Component_Document::get_labels(), 'public' => false, 'supports' => Component_Document::get_supported_features(), ] ); } private function register_document_type( $documents_manager ) { $documents_manager->register_document_type( Component_Document::TYPE, Component_Document::get_class_full_name() ); } private function validate_circular_dependencies( Document $document, array $data ) { if ( ! $document instanceof Component_Document ) { return; } if ( ! isset( $data['elements'] ) ) { return; } $component_id = $document->get_main_id(); $elements = $data['elements']; $result = Circular_Dependency_Validator::make()->validate( $component_id, $elements ); if ( ! $result['success'] ) { throw new \Exception( esc_html__( "Can't add this component - components that contain each other can't be nested.", 'elementor' ) ); } } private function set_component_overridable_props( Document $document, array $data ) { if ( ! isset( $data['settings'] ) ) { return; } if ( ( ! $document instanceof Component_Document ) || ( ! isset( $data['settings']['overridable_props'] ) ) ) { return; } if ( ! Components_Access_Controller::can_edit() ) { throw new \Exception( esc_html__( 'You do not have permission to edit component source.', 'elementor' ) ); } /* @var Component_Document $document */ $result = $document->update_overridable_props( $data['settings']['overridable_props'] ); if ( ! $result->is_valid() ) { throw new \Exception( esc_html( 'Settings validation failed for component overridable props: ' . $result->errors()->to_string() ) ); } } private function register_settings_transformers( Transformers_Registry $transformers ) { $transformers->register( Component_Instance_Prop_Type::get_key(), new Component_Instance_Transformer() ); $transformers->register( Overridable_Prop_Type::get_key(), new Overridable_Transformer() ); $transformers->register( Override_Prop_Type::get_key(), new Override_Transformer() ); } private function after_component_migrate( Document $document, array $data ) { if ( ! $document instanceof Component_Document ) { return; } $document->align_overridable_props_with_elements(); } }
Save Changes
Cancel / Back
Close ×
Server Info
Hostname: webm021.cluster127.gra.hosting.ovh.net
Server IP: 10.127.20.21
PHP Version: 8.4.22
Server Software: Apache
System: Linux webm021.cluster127.gra.hosting.ovh.net 5.15.206-ovh-vps-grsec-zfs-classid #1 SMP Fri May 15 02:41:25 UTC 2026 x86_64
HDD Total: 14.32 GB
HDD Free: 8.45 GB
Domains on IP: N/A (Requires external lookup)
System Features
Safe Mode:
Off
disable_functions:
Exists
allow_url_fopen:
On
allow_url_include:
Off
magic_quotes_gpc:
Off
register_globals:
Off
open_basedir:
None
cURL:
Enabled
ZipArchive:
Enabled
MySQLi:
Enabled
PDO:
Enabled
wget:
Yes
curl (cmd):
Yes
perl:
Yes
python:
Yes
gcc:
No
pkexec:
No
git:
Yes
User Info
Username: vcomplcotr
User ID (UID): 38697
Group ID (GID): 100
Script Owner UID: 38697
Current Dir Owner: 38697