PluginProbe ʕ •ᴥ•ʔ
Superb Addons: Blocks, Patterns, Pre-built Pages, Sliders, Popups, Free Forms, Animations & More / 3.6.1
Superb Addons: Blocks, Patterns, Pre-built Pages, Sliders, Popups, Free Forms, Animations & More v3.6.1
4.0.6 4.0.5 4.0.4 4.0.3 4.0.2 4.0.1 4.0.0 trunk 1.0.0 2.0.0 2.0.1 2.0.2 2.0.3 3.0 3.0.1 3.0.2 3.0.5 3.0.6 3.0.7 3.0.8 3.0.9 3.1.0 3.1.2 3.1.3 3.2.0 3.2.1 3.2.2 3.2.4 3.2.5 3.2.7 3.2.8 3.2.9 3.3.0 3.3.1 3.3.2 3.4.0 3.4.1 3.4.2 3.4.5 3.4.6 3.5.0 3.5.1 3.5.2 3.5.3 3.5.4 3.5.6 3.5.7 3.5.8 3.5.9 3.6.0 3.6.1 3.6.2 3.7.0 3.7.1
superb-blocks / src / elementor / controllers / class-elementor-controller.php
superb-blocks / src / elementor / controllers Last commit date
class-elementor-controller.php 11 months ago
class-elementor-controller.php
170 lines
1 <?php
2
3 namespace SuperbAddons\Elementor\Controllers;
4
5 defined('ABSPATH') || exit();
6
7 use SuperbAddons\Data\Controllers\RestController;
8 use SuperbAddons\Library\Controllers\LibraryController;
9 use SuperbAddons\Library\Controllers\LibraryRequestController;
10 use SuperbAddons\Elementor\Utils\ElementorSourceExtension;
11 use Exception;
12 use SuperbAddons\Admin\Utils\AdminLinkSource;
13 use SuperbAddons\Admin\Utils\AdminLinkUtil;
14
15 class ElementorController
16 {
17 const MINIMUM_ELEMENTOR_VERSION = '3.0';
18 const MINIMUM_PHP_VERSION = '5.6';
19
20 const IMPORT_COMPLETION_ACTION = 'superbaddons_elementorimport_completed_';
21
22 public function __construct()
23 {
24 if (!self::is_compatible()) {
25 return;
26 }
27
28 add_action('elementor/editor/before_enqueue_scripts', array($this, 'elementor_editor_scripts'));
29 add_action('elementor/editor/footer', array($this, 'elementor_editor_footer_scripts'));
30 add_action('elementor/editor/after_enqueue_styles', array($this, 'elementor_editor_enqueue_styles'));
31 add_action('elementor/preview/enqueue_styles', array($this, 'elementor_preview_enqueue_styles'));
32 }
33
34 public static function is_compatible()
35 {
36 // Check if Elementor installed and activated
37 if (!did_action('elementor/loaded')) {
38 return false;
39 }
40
41 // Check for required Elementor version
42 if (!defined("ELEMENTOR_VERSION") || version_compare(ELEMENTOR_VERSION, self::MINIMUM_ELEMENTOR_VERSION, '<')) {
43 return false;
44 }
45
46 // Check for required PHP version
47 if (version_compare(PHP_VERSION, self::MINIMUM_PHP_VERSION, '<')) {
48 return false;
49 }
50
51 return true;
52 }
53
54 public static function GetElementorLibraryMenuItems()
55 {
56 return array(
57 array(
58 "id" => "sections",
59 "premium_url" => AdminLinkUtil::GetLink(AdminLinkSource::LIBRARY_ITEM),
60 "title" => esc_html__('Sections', "superb-blocks"),
61 "routes" => array(
62 "list" => LibraryRequestController::ELEMENTOR_LIST_ROUTE,
63 "insert" => LibraryRequestController::ELEMENTOR_INSERT_ROUTE
64 ),
65 "hidden" => true
66 )
67 );
68 }
69
70 public function elementor_editor_scripts()
71 {
72 wp_enqueue_script('superb-elementor-layout-library', SUPERBADDONS_ASSETS_PATH . '/js/elementor/layout-library.js', array('jquery', 'wp-element'), SUPERBADDONS_VERSION, true);
73 wp_localize_script('superb-elementor-layout-library', 'superblayoutlibrary_g', array(
74 "title" => esc_html__('Add Superb Template', "superb-blocks"),
75 "logoUrl" => esc_url(SUPERBADDONS_ASSETS_PATH . '/img/icon-superb.svg'),
76 "style_placeholder" => esc_html__('All themes', "superb-blocks"),
77 "category_placeholder" => esc_html__('All categories', "superb-blocks"),
78 "snacks" => array(
79 "insert_error" => esc_html__('Something went wrong while attempting to insert this element. Please try again or contact support if the problem persists.', "superb-blocks"),
80 "list_error" => esc_html__('Something went wrong while attempting to list elements. Please try again or contact support if the problem persists.', "superb-blocks")
81 ),
82 "menu_items" => self::GetElementorLibraryMenuItems(),
83 "rest" => array(
84 "base" => \get_rest_url(),
85 "namespace" => RestController::NAMESPACE,
86 "nonce" => wp_create_nonce("wp_rest")
87 )
88 ));
89 }
90
91 public function elementor_editor_footer_scripts()
92 {
93 LibraryController::InsertTemplatesWithWrapper();
94 }
95
96 public function elementor_editor_enqueue_styles()
97 {
98 wp_enqueue_style(
99 'superb-addons-elements',
100 SUPERBADDONS_ASSETS_PATH . '/css/framework.min.css',
101 array(),
102 SUPERBADDONS_VERSION
103 );
104 wp_enqueue_style(
105 'superb-elementor-editor-layout-library',
106 SUPERBADDONS_ASSETS_PATH . '/css/layout-library-editor.min.css',
107 array(),
108 SUPERBADDONS_VERSION
109 );
110 wp_enqueue_style(
111 'superbaddons-js-snackbar',
112 SUPERBADDONS_ASSETS_PATH . '/lib/js-snackbar.min.css',
113 array(),
114 SUPERBADDONS_VERSION
115 );
116 wp_enqueue_style(
117 'superb-addons-font-manrope',
118 SUPERBADDONS_ASSETS_PATH . '/fonts/manrope/manrope.css',
119 array(),
120 SUPERBADDONS_VERSION
121 );
122 }
123
124 public function elementor_preview_enqueue_styles()
125 {
126 wp_enqueue_style(
127 'superb-elementor-layout-library',
128 SUPERBADDONS_ASSETS_PATH . '/css/layout-library-preview.min.css',
129 array(),
130 SUPERBADDONS_VERSION
131 );
132 }
133
134 public static function ElementorDataImportAction($data)
135 {
136 $dynamic_action = time();
137 self::MaybeHandleBadFunctions($dynamic_action);
138 $source = new ElementorSourceExtension();
139 $source->HandleImport($data['content']);
140 try {
141 do_action(self::IMPORT_COMPLETION_ACTION . $dynamic_action);
142 return $data;
143 } catch (Exception $ex) {
144 LogController::HandleException($ex);
145 //Completion action failed
146 //Catch exception to ensure content response
147 return $data;
148 }
149 }
150
151 private static function MaybeHandleBadFunctions($action_affix = "")
152 {
153 // This option from Royal Addons (royal-elementor-addons), when enabled, creates and uploads multiple identical placeholder images in the user's media library on every insert unless disabled.
154 // They even disable it and re-enable it themselves during their own insert function.
155 if (class_exists("WprAddons\\Plugin")) {
156 $wpr_args = array(
157 'wpr-parallax-background' => get_option('wpr-parallax-background'),
158 'wpr-parallax-multi-layer' => get_option('wpr-parallax-multi-layer')
159 );
160 update_option('wpr-parallax-background', '');
161 update_option('wpr-parallax-multi-layer', '');
162
163 add_action(self::IMPORT_COMPLETION_ACTION . $action_affix, function () use ($wpr_args) {
164 update_option('wpr-parallax-background', $wpr_args['wpr-parallax-background']);
165 update_option('wpr-parallax-multi-layer', $wpr_args['wpr-parallax-multi-layer']);
166 });
167 }
168 }
169 }
170