PluginProbe
Elementor Website Builder – more than just a page builder / 3.19.2
Elementor Website Builder – more than just a page builder v3.19.2
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 4.1.0-beta2 4.1.0-dev2 4.0.8 4.1.0-beta1 4.1.0-dev1 4.0.7 All 451 releases
← All changes | includes/managers/widgets.php +26 -118 4.0.83.19.2 View file →
@@ -2,17 +2,11 @@
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 8 use Elementor\Modules\NestedAccordion\Widgets\Nested_Accordion;
14 -use Elementor\Modules\NestedElements\Module as NestedElementsModule;
15 9 use Elementor\Modules\NestedTabs\Widgets\NestedTabs;
16 10
17 11 if ( ! defined( 'ABSPATH' ) ) {
18 12 exit; // Exit if accessed directly.
@@ -48,40 +42,26 @@
48 42 * @since 3.15.0
49 43 * @access private
50 44 *
51 45 * @var Widget_Base[]
52 - *
53 - * @return array
54 46 */
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 - ],
47 + private $_promoted_widgets = [
48 + 'nested-elements' => NestedTabs::class,
49 + 'nested-accordion' => Nested_Accordion::class,
68 50 ];
69 51
70 52 /**
71 53 * Init widgets.
72 54 *
73 - * Initialize Elementor widgets manager. Include all the widgets files
55 + * Initialize Elementor widgets manager. Include all the the widgets files
74 56 * and register each Elementor and WordPress widget.
75 57 *
76 58 * @since 2.0.0
77 59 * @access private
78 - */
60 + */
79 61 private function init_widgets() {
80 62 $build_widgets_filename = [
81 - 'common-base',
82 63 'common',
83 - 'common-optimized',
84 64 'inner-section',
85 65 'heading',
86 66 'image',
87 67 'text-editor',
@@ -115,10 +95,8 @@
115 95 ];
116 96
117 97 $this->_widget_types = [];
118 98
119 - $this->register_promoted_widgets();
120 -
121 99 foreach ( $build_widgets_filename as $widget_filename ) {
122 100 include ELEMENTOR_PATH . 'includes/widgets/' . $widget_filename . '.php';
123 101
124 102 $class_name = str_replace( '-', '_', $widget_filename );
@@ -127,8 +105,10 @@
127 105
128 106 $this->register( new $class_name() );
129 107 }
130 108
109 + $this->register_promoted_widgets();
110 +
131 111 $this->register_wp_widgets();
132 112
133 113 /**
134 114 * After widgets registered.
@@ -168,9 +148,9 @@
168 148 * plugin authors can filter the black list.
169 149 *
170 150 * @since 2.0.0
171 151 * @access private
172 - */
152 + */
173 153 private function register_wp_widgets() {
174 154 global $wp_widget_factory;
175 155
176 156 // Allow themes/plugins to filter out their widgets.
@@ -209,9 +189,9 @@
209 189 * Require Elementor widget base class.
210 190 *
211 191 * @since 2.0.0
212 192 * @access private
213 - */
193 + */
214 194 private function require_files() {
215 195 require ELEMENTOR_PATH . 'includes/base/widget-base.php';
216 196 }
217 197
@@ -237,9 +217,9 @@
237 217 *
238 218 * @param Widget_Base $widget Elementor widget.
239 219 *
240 220 * @return true True if the widget was registered.
241 - */
221 + */
242 222 public function register_widget_type( Widget_Base $widget ) {
243 223 Plugin::$instance->modules_manager->get_modules( 'dev-tools' )->deprecation->deprecated_function(
244 224 __METHOD__,
245 225 '3.5.0',
@@ -290,10 +270,14 @@
290 270 * @return void
291 271 */
292 272 private function register_promoted_widgets() {
293 273
294 - foreach ( $this->promoted_widgets as $experiment_name => $classes ) {
295 - $this->register_promoted_active_widgets( $experiment_name, $classes );
274 + foreach ( $this->_promoted_widgets as $module_name => $class_name ) {
275 +
276 + if ( Plugin::$instance->experiments->is_feature_active( $module_name ) ) {
277 + $instance = new $class_name();
278 + $this->_widget_types[ $instance->get_name() ] = $instance;
279 + }
296 280 }
297 281 }
298 282
299 283 /**
@@ -307,9 +291,9 @@
307 291 *
308 292 * @param string $name Widget name.
309 293 *
310 294 * @return true True if the widget was unregistered, False otherwise.
311 - */
295 + */
312 296 public function unregister_widget_type( $name ) {
313 297 Plugin::$instance->modules_manager->get_modules( 'dev-tools' )->deprecation->deprecated_function(
314 298 __METHOD__,
315 299 '3.5.0',
@@ -351,9 +335,9 @@
351 335 *
352 336 * @param string $widget_name Optional. Widget name. Default is null.
353 337 *
354 338 * @return Widget_Base|Widget_Base[]|null Registered widget types.
355 - */
339 + */
356 340 public function get_widget_types( $widget_name = null ) {
357 341 if ( is_null( $this->_widget_types ) ) {
358 342 $this->init_widgets();
359 343 }
@@ -373,9 +357,9 @@
373 357 * @since 1.0.0
374 358 * @access public
375 359 *
376 360 * @return array Registered widget types with each widget config.
377 - */
361 + */
378 362 public function get_widget_types_config() {
379 363 $config = [];
380 364
381 365 foreach ( $this->get_widget_types() as $widget_key => $widget ) {
@@ -385,9 +369,9 @@
385 369 return $config;
386 370 }
387 371
388 372 /**
389 - * @throws \Exception If current user don't have permissions to edit the post.
373 + * @throws \Exception
390 374 */
391 375 public function ajax_get_widget_types_controls_config( array $data ) {
392 376 Plugin::$instance->documents->check_permissions( $data['editor_post_id'] );
393 377
@@ -493,9 +477,9 @@
493 477 *
494 478 * @param array $request Ajax request.
495 479 *
496 480 * @return bool|string Rendered widget form.
497 - * @throws \Exception If current user don't have permissions to edit the post.
481 + * @throws \Exception
498 482 */
499 483 public function ajax_get_wp_widget_form( $request ) {
500 484 Plugin::$instance->documents->check_permissions( $request['editor_post_id'] );
501 485
@@ -533,9 +517,9 @@
533 517 * template, for all the registered widget types.
534 518 *
535 519 * @since 1.0.0
536 520 * @access public
537 - */
521 + */
538 522 public function render_widgets_content() {
539 523 foreach ( $this->get_widget_types() as $widget ) {
540 524 $widget->print_template();
541 525 }
@@ -550,9 +534,9 @@
550 534 * @since 1.3.0
551 535 * @access public
552 536 *
553 537 * @return array Registered widget types with settings keys for each widget.
554 - */
538 + */
555 539 public function get_widgets_frontend_settings_keys() {
556 540 $keys = [];
557 541
558 542 foreach ( $this->get_widget_types() as $widget_type_name => $widget_type ) {
@@ -566,63 +550,8 @@
566 550 return $keys;
567 551 }
568 552
569 553 /**
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 554 * Enqueue widgets scripts.
626 555 *
627 556 * Enqueue all the scripts defined as a dependency for each widget.
628 557 *
@@ -627,9 +556,9 @@
627 556 * Enqueue all the scripts defined as a dependency for each widget.
628 557 *
629 558 * @since 1.3.0
630 559 * @access public
631 - */
560 + */
632 561 public function enqueue_widgets_scripts() {
633 562 foreach ( $this->get_widget_types() as $widget ) {
634 563 $widget->enqueue_scripts();
635 564 }
@@ -634,14 +563,8 @@
634 563 $widget->enqueue_scripts();
635 564 }
636 565 }
637 566
638 - public function register_frontend_handlers() {
639 - foreach ( $this->get_widget_types() as $widget ) {
640 - $widget->register_frontend_handlers();
641 - }
642 - }
643 -
644 567 /**
645 568 * Enqueue widgets styles
646 569 *
647 570 * Enqueue all the styles defined as a dependency for each widget
@@ -716,9 +639,9 @@
716 639 * Initializing Elementor widgets manager.
717 640 *
718 641 * @since 1.0.0
719 642 * @access public
720 - */
643 + */
721 644 public function __construct() {
722 645 $this->require_files();
723 646
724 647 add_action( 'elementor/ajax/register_actions', [ $this, 'register_ajax_actions' ] );
@@ -741,21 +664,6 @@
741 664
742 665 $ajax_manager->register_ajax_action( 'get_widgets_default_value_translations', function ( array $data ) {
743 666 return $this->ajax_get_widgets_default_value_translations( $data );
744 667 } );
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 668 }
761 669 }