/var/www/html_us/wp-content/plugins/elementor/modules/home/module.php


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
<?php
namespace Elementor\Modules\Home;

use 
Elementor\Core\Admin\Menu\Admin_Menu_Manager;
use 
Elementor\Core\Base\App as BaseApp;
use 
Elementor\Core\Experiments\Manager as Experiments_Manager;
use 
Elementor\Includes\EditorAssetsAPI;
use 
Elementor\Settings;
use 
Elementor\Plugin;
use 
Elementor\Utils;

if ( ! 
defined'ABSPATH' ) ) {
    exit; 
// Exit if accessed directly.
}

class 
Module extends BaseApp {

    const 
PAGE_ID 'home_screen';

    public function 
get_name(): string {
        return 
'home';
    }

    public function 
__construct() {
        
parent::__construct();

        
$this->register_layout_experiment();

        if ( ! 
$this->is_experiment_active() ) {
            return;
        }

        
add_action'elementor/admin/menu/after_register', function ( Admin_Menu_Manager $admin_menu, array $hooks ) {
            
$hook_suffix 'toplevel_page_elementor';
            
add_action"admin_print_scripts-{$hook_suffix}", [ $this'enqueue_home_screen_scripts' ] );
        }, 
10);

        
add_filter'elementor/document/urls/edit', [ $this'add_active_document_to_edit_link' ] );
    }

    public function 
enqueue_home_screen_scripts(): void {
        if ( ! 
current_user_can'manage_options' ) ) {
            return;
        }

        
$min_suffix Utils::is_script_debug() ? '' '.min';

        
wp_enqueue_script(
            
'e-home-screen',
            
ELEMENTOR_ASSETS_URL 'js/e-home-screen' $min_suffix '.js',
            [
                
'react',
                
'react-dom',
                
'elementor-common',
                
'elementor-v2-ui',
            ],
            
ELEMENTOR_VERSION,
            
true
        
);

        
wp_set_script_translations'e-home-screen''elementor' );

        
wp_localize_script(
            
'e-home-screen',
            
'elementorHomeScreenData',
            
$this->get_app_js_config()
        );
    }

    public function 
is_experiment_active(): bool {
        return 
Plugin::$instance->experiments->is_feature_activeself::PAGE_ID );
    }

    public function 
add_active_document_to_edit_link$edit_link ) {
        
$active_document Utils::get_super_global_value$_GET'active-document' ) ?? null;
        
$active_tab Utils::get_super_global_value$_GET'active-tab' ) ?? null;

        if ( 
$active_document ) {
            
$edit_link add_query_arg'active-document'$active_document$edit_link );
        }

        if ( 
$active_tab ) {
            
$edit_link add_query_arg'active-tab'$active_tab$edit_link );
        }

        return 
$edit_link;
    }

    private function 
register_layout_experiment(): void {
        
Plugin::$instance->experiments->add_feature( [
            
'name' => static::PAGE_ID,
            
'title' => esc_html__'Elementor Home Screen''elementor' ),
            
'description' => esc_html__'Default Elementor menu page.''elementor' ),
            
'hidden' => true,
            
'release_status' => Experiments_Manager::RELEASE_STATUS_STABLE,
            
'default' => Experiments_Manager::STATE_ACTIVE,
        ] );
    }

    private function 
get_app_js_config(): array {
        
$editor_assets_api = new EditorAssetsAPI$this->get_api_config() );
        
$api = new API$editor_assets_api );

        return 
$api->get_home_screen_items();
    }

    private function 
get_api_config(): array {
        return [
            
EditorAssetsAPI::ASSETS_DATA_URL => 'https://assets.elementor.com/home-screen/v1/home-screen.json',
            
EditorAssetsAPI::ASSETS_DATA_TRANSIENT_KEY => '_elementor_home_screen_data',
            
EditorAssetsAPI::ASSETS_DATA_KEY => 'home-screen',
        ];
    }

    public static function 
get_elementor_settings_page_id(): string {
        return 
Plugin::$instance->experiments->is_feature_activeself::PAGE_ID )
            ? 
'elementor-settings'
            
Settings::PAGE_ID;
    }
}