PluginProbe ʕ •ᴥ•ʔ
Superb Addons: Blocks, Patterns, Pre-built Pages, Sliders, Popups, Free Forms, Animations & More / 3.7.1
Superb Addons: Blocks, Patterns, Pre-built Pages, Sliders, Popups, Free Forms, Animations & More v3.7.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 5 months ago
class-elementor-controller.php
174 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 // constant contains plugin prefix
142 // phpcs:ignore WordPress.NamingConventions.PrefixAllGlobals.DynamicHooknameFound
143 do_action(self::IMPORT_COMPLETION_ACTION . $dynamic_action);
144 return $data;
145 } catch (Exception $ex) {
146 LogController::HandleException($ex);
147 //Completion action failed
148 //Catch exception to ensure content response
149 return $data;
150 }
151 }
152
153 private static function MaybeHandleBadFunctions($action_affix = "")
154 {
155 // 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.
156 // They even disable it and re-enable it themselves during their own insert function.
157 if (class_exists("WprAddons\\Plugin")) {
158 $wpr_args = array(
159 'wpr-parallax-background' => get_option('wpr-parallax-background'),
160 'wpr-parallax-multi-layer' => get_option('wpr-parallax-multi-layer')
161 );
162 update_option('wpr-parallax-background', '');
163 update_option('wpr-parallax-multi-layer', '');
164
165 // constant contains plugin prefix
166 // phpcs:ignore WordPress.NamingConventions.PrefixAllGlobals.DynamicHooknameFound
167 add_action(self::IMPORT_COMPLETION_ACTION . $action_affix, function () use ($wpr_args) {
168 update_option('wpr-parallax-background', $wpr_args['wpr-parallax-background']);
169 update_option('wpr-parallax-multi-layer', $wpr_args['wpr-parallax-multi-layer']);
170 });
171 }
172 }
173 }
174