PluginProbe
Elementor Website Builder – more than just a page builder / 3.13.0-beta1
Elementor Website Builder – more than just a page builder v3.13.0-beta1
4.3.4 4.3.3 4.3.2 4.3.1 4.3.0 4.3.0-beta3 4.3.0-beta2 4.3.0-beta1 4.2.4 4.2.3 4.2.2 4.2.1 4.2.0 4.1.5 4.2.0-beta2 4.2.0-dev2 4.2.0-beta1 4.1.4 4.1.3 4.1.2 4.1.1 4.1.0 4.1.0-beta3 4.1.0-dev3 4.0.9 All 457 releases
← All changes | includes/managers/widgets.php +31 -161 4.0.9 → 3.13.0-beta1 View file →
@@ -2,17 +2,10 @@
2 2 namespace Elementor;
3 3
4 4 use Elementor\Core\Common\Modules\Ajax\Module as Ajax;
5 5 use Elementor\Core\Utils\Collection;
6 +use Elementor\Core\Utils\Exceptions;
6 7 use Elementor\Core\Utils\Force_Locale;
7 -use Elementor\Modules\AtomicWidgets\Elements\Atomic_Button\Atomic_Button;
8 -use Elementor\Modules\AtomicWidgets\Elements\Atomic_Divider\Atomic_Divider;
9 -use Elementor\Modules\AtomicWidgets\Elements\Atomic_Heading\Atomic_Heading;
10 -use Elementor\Modules\AtomicWidgets\Elements\Atomic_Image\Atomic_Image;
11 -use Elementor\Modules\AtomicWidgets\Elements\Atomic_Paragraph\Atomic_Paragraph;
12 -use Elementor\Modules\AtomicWidgets\Elements\Atomic_Svg\Atomic_Svg;
13 -use Elementor\Modules\NestedAccordion\Widgets\Nested_Accordion;
14 -use Elementor\Modules\NestedElements\Module as NestedElementsModule;
15 8 use Elementor\Modules\NestedTabs\Widgets\NestedTabs;
16 9
17 10 if ( ! defined( 'ABSPATH' ) ) {
18 11 exit; // Exit if accessed directly.
@@ -40,48 +33,19 @@
40 33 */
41 34 private $_widget_types = null;
42 35
43 36 /**
44 - * Promoted widget types.
45 - *
46 - * Holds the list of all the Promoted widget types.
47 - *
48 - * @since 3.15.0
49 - * @access private
50 - *
51 - * @var Widget_Base[]
52 - *
53 - * @return array
54 - */
55 - private array $promoted_widgets = [
56 - NestedElementsModule::EXPERIMENT_NAME => [
57 - NestedTabs::class,
58 - Nested_Accordion::class,
59 - ],
60 - 'atomic_widgets' => [
61 - Atomic_Heading::class,
62 - Atomic_Image::class,
63 - Atomic_Paragraph::class,
64 - Atomic_Button::class,
65 - Atomic_Svg::class,
66 - Atomic_Divider::class,
67 - ],
68 - ];
69 -
70 - /**
71 37 * Init widgets.
72 38 *
73 - * Initialize Elementor widgets manager. Include all the widgets files
39 + * Initialize Elementor widgets manager. Include all the the widgets files
74 40 * and register each Elementor and WordPress widget.
75 41 *
76 42 * @since 2.0.0
77 43 * @access private
78 - */
44 + */
79 45 private function init_widgets() {
80 46 $build_widgets_filename = [
81 - 'common-base',
82 47 'common',
83 - 'common-optimized',
84 48 'inner-section',
85 49 'heading',
86 50 'image',
87 51 'text-editor',
@@ -110,15 +74,12 @@
110 74 'html',
111 75 'menu-anchor',
112 76 'sidebar',
113 77 'read-more',
114 - 'rating',
115 78 ];
116 79
117 80 $this->_widget_types = [];
118 81
119 - $this->register_promoted_widgets();
120 -
121 82 foreach ( $build_widgets_filename as $widget_filename ) {
122 83 include ELEMENTOR_PATH . 'includes/widgets/' . $widget_filename . '.php';
123 84
124 85 $class_name = str_replace( '-', '_', $widget_filename );
@@ -127,8 +88,10 @@
127 88
128 89 $this->register( new $class_name() );
129 90 }
130 91
92 + $this->register_promoted_widgets();
93 +
131 94 $this->register_wp_widgets();
132 95
133 96 /**
134 97 * After widgets registered.
@@ -168,9 +131,9 @@
168 131 * plugin authors can filter the black list.
169 132 *
170 133 * @since 2.0.0
171 134 * @access private
172 - */
135 + */
173 136 private function register_wp_widgets() {
174 137 global $wp_widget_factory;
175 138
176 139 // Allow themes/plugins to filter out their widgets.
@@ -209,9 +172,9 @@
209 172 * Require Elementor widget base class.
210 173 *
211 174 * @since 2.0.0
212 175 * @access private
213 - */
176 + */
214 177 private function require_files() {
215 178 require ELEMENTOR_PATH . 'includes/base/widget-base.php';
216 179 }
217 180
@@ -232,19 +195,19 @@
232 195 * Add a new widget type to the list of registered widget types.
233 196 *
234 197 * @since 1.0.0
235 198 * @access public
236 - * @deprecated 3.5.0 Use `register()` method instead.
199 + * @deprecated 3.5.0 Use `$this->register()` instead.
237 200 *
238 201 * @param Widget_Base $widget Elementor widget.
239 202 *
240 203 * @return true True if the widget was registered.
241 - */
204 + */
242 205 public function register_widget_type( Widget_Base $widget ) {
243 206 Plugin::$instance->modules_manager->get_modules( 'dev-tools' )->deprecation->deprecated_function(
244 207 __METHOD__,
245 208 '3.5.0',
246 - 'register()'
209 + 'register'
247 210 );
248 211
249 212 return $this->register( $widget );
250 213 }
@@ -253,11 +216,12 @@
253 216 * Register a new widget type.
254 217 *
255 218 * @param \Elementor\Widget_Base $widget_instance Elementor Widget.
256 219 *
257 - * @return bool True if the widget was registered.
220 + * @return true True if the widget was registered.
258 221 * @since 3.5.0
259 222 * @access public
223 + *
260 224 */
261 225 public function register( Widget_Base $widget_instance ) {
262 226 if ( is_null( $this->_widget_types ) ) {
263 227 $this->init_widgets();
@@ -262,38 +226,24 @@
262 226 if ( is_null( $this->_widget_types ) ) {
263 227 $this->init_widgets();
264 228 }
265 229
266 - /**
267 - * Should widget be registered.
268 - *
269 - * @since 3.18.0
270 - *
271 - * @param bool $should_register Should widget be registered. Default is `true`.
272 - * @param \Elementor\Widget_Base $widget_instance Widget instance.
273 - */
274 - $should_register = apply_filters( 'elementor/widgets/is_widget_enabled', true, $widget_instance );
275 -
276 - if ( ! $should_register ) {
277 - return false;
278 - }
279 -
280 230 $this->_widget_types[ $widget_instance->get_name() ] = $widget_instance;
281 231
282 232 return true;
283 233 }
284 234
285 - /** Register promoted widgets
235 + /** register promoted widgets
286 236 *
287 237 * Since we cannot allow widgets to place themselves is a specific
288 - * location on our widgets panel we need to use a hard coded solution for this.
238 + * location on our widgets panel we need to use an hard coded solution fort his
289 239 *
290 240 * @return void
291 241 */
292 242 private function register_promoted_widgets() {
293 -
294 - foreach ( $this->promoted_widgets as $experiment_name => $classes ) {
295 - $this->register_promoted_active_widgets( $experiment_name, $classes );
243 + if ( Plugin::$instance->experiments->is_feature_active( 'nested-elements' ) ) {
244 + $nested_tabs = new NestedTabs();
245 + $this->_widget_types = [ $nested_tabs->get_name() => $nested_tabs ] + $this->_widget_types;
296 246 }
297 247 }
298 248
299 249 /**
@@ -302,19 +252,19 @@
302 252 * Removes widget type from the list of registered widget types.
303 253 *
304 254 * @since 1.0.0
305 255 * @access public
306 - * @deprecated 3.5.0 Use `unregister()` method instead.
256 + * @deprecated 3.5.0 Use `$this->unregister()` instead.
307 257 *
308 258 * @param string $name Widget name.
309 259 *
310 260 * @return true True if the widget was unregistered, False otherwise.
311 - */
261 + */
312 262 public function unregister_widget_type( $name ) {
313 263 Plugin::$instance->modules_manager->get_modules( 'dev-tools' )->deprecation->deprecated_function(
314 264 __METHOD__,
315 265 '3.5.0',
316 - 'unregister()'
266 + 'unregister'
317 267 );
318 268
319 269 return $this->unregister( $name );
320 270 }
@@ -351,9 +301,9 @@
351 301 *
352 302 * @param string $widget_name Optional. Widget name. Default is null.
353 303 *
354 304 * @return Widget_Base|Widget_Base[]|null Registered widget types.
355 - */
305 + */
356 306 public function get_widget_types( $widget_name = null ) {
357 307 if ( is_null( $this->_widget_types ) ) {
358 308 $this->init_widgets();
359 309 }
@@ -373,9 +323,9 @@
373 323 * @since 1.0.0
374 324 * @access public
375 325 *
376 326 * @return array Registered widget types with each widget config.
377 - */
327 + */
378 328 public function get_widget_types_config() {
379 329 $config = [];
380 330
381 331 foreach ( $this->get_widget_types() as $widget_key => $widget ) {
@@ -384,14 +334,9 @@
384 334
385 335 return $config;
386 336 }
387 337
388 - /**
389 - * @throws \Exception If current user don't have permissions to edit the post.
390 - */
391 338 public function ajax_get_widget_types_controls_config( array $data ) {
392 - Plugin::$instance->documents->check_permissions( $data['editor_post_id'] );
393 -
394 339 wp_raise_memory_limit( 'admin' );
395 340
396 341 $config = [];
397 342
@@ -455,10 +400,14 @@
455 400 * @type string $render The rendered HTML.
456 401 * }
457 402 */
458 403 public function ajax_render_widget( $request ) {
459 - $document = Plugin::$instance->documents->get_with_permissions( $request['editor_post_id'] );
404 + $document = Plugin::$instance->documents->get( $request['editor_post_id'] );
460 405
406 + if ( ! $document->is_editable_by_current_user() ) {
407 + throw new \Exception( 'Access denied.', Exceptions::FORBIDDEN );
408 + }
409 +
461 410 // Override the global $post for the render.
462 411 query_posts(
463 412 [
464 413 'p' => $request['editor_post_id'],
@@ -493,13 +442,10 @@
493 442 *
494 443 * @param array $request Ajax request.
495 444 *
496 445 * @return bool|string Rendered widget form.
497 - * @throws \Exception If current user don't have permissions to edit the post.
498 446 */
499 447 public function ajax_get_wp_widget_form( $request ) {
500 - Plugin::$instance->documents->check_permissions( $request['editor_post_id'] );
501 -
502 448 if ( empty( $request['widget_type'] ) ) {
503 449 return false;
504 450 }
505 451
@@ -533,9 +479,9 @@
533 479 * template, for all the registered widget types.
534 480 *
535 481 * @since 1.0.0
536 482 * @access public
537 - */
483 + */
538 484 public function render_widgets_content() {
539 485 foreach ( $this->get_widget_types() as $widget ) {
540 486 $widget->print_template();
541 487 }
@@ -550,9 +496,9 @@
550 496 * @since 1.3.0
551 497 * @access public
552 498 *
553 499 * @return array Registered widget types with settings keys for each widget.
554 - */
500 + */
555 501 public function get_widgets_frontend_settings_keys() {
556 502 $keys = [];
557 503
558 504 foreach ( $this->get_widget_types() as $widget_type_name => $widget_type ) {
@@ -566,63 +512,8 @@
566 512 return $keys;
567 513 }
568 514
569 515 /**
570 - * Widgets with styles.
571 - *
572 - * This method returns the list of all the widgets in the `/includes/`
573 - * folder that have styles.
574 - *
575 - * @since 3.24.0
576 - * @access public
577 - *
578 - * @return array The names of the widgets that have styles.
579 - */
580 - public function widgets_with_styles(): array {
581 - return [
582 - 'counter',
583 - 'divider',
584 - 'google_maps',
585 - 'heading',
586 - 'image',
587 - 'image-carousel',
588 - 'menu-anchor',
589 - 'rating',
590 - 'social-icons',
591 - 'spacer',
592 - 'testimonial',
593 - 'text-editor',
594 - 'video',
595 - ];
596 - }
597 -
598 - /**
599 - * Widgets with responsive styles.
600 - *
601 - * This method returns the list of all the widgets in the `/includes/`
602 - * folder that have responsive styles.
603 - *
604 - * @since 3.24.0
605 - * @access public
606 - *
607 - * @return array The names of the widgets that have responsive styles.
608 - */
609 - public function widgets_with_responsive_styles(): array {
610 - return [
611 - 'accordion',
612 - 'alert',
613 - 'icon-box',
614 - 'icon-list',
615 - 'image-box',
616 - 'image-gallery',
617 - 'progress',
618 - 'star-rating',
619 - 'tabs',
620 - 'toggle',
621 - ];
622 - }
623 -
624 - /**
625 516 * Enqueue widgets scripts.
626 517 *
627 518 * Enqueue all the scripts defined as a dependency for each widget.
628 519 *
@@ -627,9 +518,9 @@
627 518 * Enqueue all the scripts defined as a dependency for each widget.
628 519 *
629 520 * @since 1.3.0
630 521 * @access public
631 - */
522 + */
632 523 public function enqueue_widgets_scripts() {
633 524 foreach ( $this->get_widget_types() as $widget ) {
634 525 $widget->enqueue_scripts();
635 526 }
@@ -634,14 +525,8 @@
634 525 $widget->enqueue_scripts();
635 526 }
636 527 }
637 528
638 - public function register_frontend_handlers() {
639 - foreach ( $this->get_widget_types() as $widget ) {
640 - $widget->register_frontend_handlers();
641 - }
642 - }
643 -
644 529 /**
645 530 * Enqueue widgets styles
646 531 *
647 532 * Enqueue all the styles defined as a dependency for each widget
@@ -716,9 +601,9 @@
716 601 * Initializing Elementor widgets manager.
717 602 *
718 603 * @since 1.0.0
719 604 * @access public
720 - */
605 + */
721 606 public function __construct() {
722 607 $this->require_files();
723 608
724 609 add_action( 'elementor/ajax/register_actions', [ $this, 'register_ajax_actions' ] );
@@ -741,21 +626,6 @@
741 626
742 627 $ajax_manager->register_ajax_action( 'get_widgets_default_value_translations', function ( array $data ) {
743 628 return $this->ajax_get_widgets_default_value_translations( $data );
744 629 } );
745 - }
746 -
747 - /**
748 - * @param string $experiment_name
749 - * @param array $classes
750 - * @return void
751 - */
752 - public function register_promoted_active_widgets( string $experiment_name, array $classes ): void {
753 - if ( ! Plugin::$instance->experiments->is_feature_active( $experiment_name ) || empty( $classes ) ) {
754 - return;
755 - }
756 -
757 - foreach ( $classes as $class_name ) {
758 - $this->register( new $class_name() );
759 - }
760 630 }
761 631 }