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
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
|
<?php
namespace Elementor\Modules\Promotions;
use Elementor\Api; use Elementor\Controls_Manager; use Elementor\Core\Admin\Menu\Admin_Menu_Manager; use Elementor\Core\Base\Module as Base_Module; use Elementor\Modules\Promotions\AdminMenuItems\Custom_Code_Promotion_Item; use Elementor\Modules\Promotions\AdminMenuItems\Custom_Fonts_Promotion_Item; use Elementor\Modules\Promotions\AdminMenuItems\Custom_Icons_Promotion_Item; use Elementor\Modules\Promotions\AdminMenuItems\Form_Submissions_Promotion_Item; use Elementor\Modules\Promotions\AdminMenuItems\Go_Pro_Promotion_Item; use Elementor\Modules\Promotions\AdminMenuItems\Popups_Promotion_Item; use Elementor\Widgets_Manager; use Elementor\Utils; use Elementor\Includes\EditorAssetsAPI;
if ( ! defined( 'ABSPATH' ) ) { exit; // Exit if accessed directly }
class Module extends Base_Module {
const ADMIN_MENU_PRIORITY = 100;
const ADMIN_MENU_PROMOTIONS_PRIORITY = 120;
public static function is_active() { return ! Utils::has_pro(); }
public function get_name() { return 'promotions'; }
public function __construct() { parent::__construct();
add_action( 'admin_init', function () { $this->handle_external_redirects(); } );
add_action( 'elementor/admin/menu/register', function ( Admin_Menu_Manager $admin_menu ) { $this->register_menu_items( $admin_menu ); }, static::ADMIN_MENU_PRIORITY );
add_action( 'elementor/admin/menu/register', function ( Admin_Menu_Manager $admin_menu ) { $this->register_promotion_menu_item( $admin_menu ); }, static::ADMIN_MENU_PROMOTIONS_PRIORITY );
add_action( 'elementor/widgets/register', function( Widgets_Manager $manager ) { foreach ( Api::get_promotion_widgets() as $widget_data ) { $manager->register( new Widgets\Pro_Widget_Promotion( [], [ 'widget_name' => $widget_data['name'], 'widget_title' => $widget_data['title'], ] ) ); } } );
if ( Utils::has_pro() ) { return; }
add_action( 'elementor/controls/register', function ( Controls_Manager $controls_manager ) { $controls_manager->register( new Controls\Promotion_Control() ); } );
add_action( 'elementor/editor/before_enqueue_scripts', [ $this, 'enqueue_react_data' ] ); }
private function handle_external_redirects() { if ( empty( $_GET['page'] ) ) { return; }
if ( 'go_elementor_pro' === $_GET['page'] ) { wp_redirect( Go_Pro_Promotion_Item::get_url() ); die; } }
private function register_menu_items( Admin_Menu_Manager $admin_menu ) { $admin_menu->register( 'e-form-submissions', new Form_Submissions_Promotion_Item() ); $admin_menu->register( 'elementor_custom_fonts', new Custom_Fonts_Promotion_Item() ); $admin_menu->register( 'elementor_custom_icons', new Custom_Icons_Promotion_Item() ); $admin_menu->register( 'elementor_custom_code', new Custom_Code_Promotion_Item() ); $admin_menu->register( 'popup_templates', new Popups_Promotion_Item() ); }
private function register_promotion_menu_item( Admin_Menu_Manager $admin_menu ) { $admin_menu->register( 'go_elementor_pro', new Go_Pro_Promotion_Item() ); }
public function enqueue_react_data(): void { if ( ! current_user_can( 'manage_options' ) ) { return; }
$min_suffix = Utils::is_script_debug() ? '' : '.min';
wp_enqueue_script( 'e-react-promotions', ELEMENTOR_ASSETS_URL . 'js/e-react-promotions' . $min_suffix . '.js', [ 'react', 'react-dom', 'backbone-marionette', ], ELEMENTOR_VERSION, true );
wp_set_script_translations( 'e-react-promotions', 'elementor' );
wp_localize_script( 'e-react-promotions', 'elementorPromotionsData', $this->get_app_js_config() ); }
private function get_app_js_config(): array { $editor_assets_api = new EditorAssetsAPI( $this->get_api_config() ); $promotion_data = new PromotionData( $editor_assets_api );
return $promotion_data->get_promotion_data(); }
private function get_api_config(): array { return [ EditorAssetsAPI::ASSETS_DATA_URL => 'https://assets.elementor.com/free-to-pro-upsell/v1/free-to-pro-upsell.json', EditorAssetsAPI::ASSETS_DATA_TRANSIENT_KEY => '_elementor_free_to_pro_upsell', EditorAssetsAPI::ASSETS_DATA_KEY => 'free-to-pro-upsell', ]; } }
|