PluginProbe
Elementor Website Builder – more than just a page builder / 3.14.0-beta4
Elementor Website Builder – more than just a page builder v3.14.0-beta4
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 +34 -168 4.3.3 → 3.14.0-beta4 View file →
@@ -2,15 +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 8 use Elementor\Modules\NestedAccordion\Widgets\Nested_Accordion;
14 9 use Elementor\Modules\NestedTabs\Widgets\NestedTabs;
15 10
16 11 if ( ! defined( 'ABSPATH' ) ) {
@@ -47,40 +42,26 @@
47 42 * @since 3.15.0
48 43 * @access private
49 44 *
50 45 * @var Widget_Base[]
51 - *
52 - * @return array
53 46 */
54 - private array $promoted_widgets = [
55 - 'container' => [
56 - NestedTabs::class,
57 - Nested_Accordion::class,
58 - ],
59 - 'atomic_widgets' => [
60 - Atomic_Heading::class,
61 - Atomic_Image::class,
62 - Atomic_Paragraph::class,
63 - Atomic_Button::class,
64 - Atomic_Svg::class,
65 - Atomic_Divider::class,
66 - ],
47 + private $_promoted_widgets = [
48 + 'nested-elements' => NestedTabs::class,
49 + 'nested-accordion' => Nested_Accordion::class,
67 50 ];
68 51
69 52 /**
70 53 * Init widgets.
71 54 *
72 - * Initialize Elementor widgets manager. Include all the widgets files
55 + * Initialize Elementor widgets manager. Include all the the widgets files
73 56 * and register each Elementor and WordPress widget.
74 57 *
75 58 * @since 2.0.0
76 59 * @access private
77 - */
60 + */
78 61 private function init_widgets() {
79 62 $build_widgets_filename = [
80 - 'common-base',
81 63 'common',
82 - 'common-optimized',
83 64 'inner-section',
84 65 'heading',
85 66 'image',
86 67 'text-editor',
@@ -109,15 +90,12 @@
109 90 'html',
110 91 'menu-anchor',
111 92 'sidebar',
112 93 'read-more',
113 - 'rating',
114 94 ];
115 95
116 96 $this->_widget_types = [];
117 97
118 - $this->register_promoted_widgets();
119 -
120 98 foreach ( $build_widgets_filename as $widget_filename ) {
121 99 include ELEMENTOR_PATH . 'includes/widgets/' . $widget_filename . '.php';
122 100
123 101 $class_name = str_replace( '-', '_', $widget_filename );
@@ -126,8 +104,10 @@
126 104
127 105 $this->register( new $class_name() );
128 106 }
129 107
108 + $this->register_promoted_widgets();
109 +
130 110 $this->register_wp_widgets();
131 111
132 112 /**
133 113 * After widgets registered.
@@ -167,9 +147,9 @@
167 147 * plugin authors can filter the black list.
168 148 *
169 149 * @since 2.0.0
170 150 * @access private
171 - */
151 + */
172 152 private function register_wp_widgets() {
173 153 global $wp_widget_factory;
174 154
175 155 // Allow themes/plugins to filter out their widgets.
@@ -208,9 +188,9 @@
208 188 * Require Elementor widget base class.
209 189 *
210 190 * @since 2.0.0
211 191 * @access private
212 - */
192 + */
213 193 private function require_files() {
214 194 require ELEMENTOR_PATH . 'includes/base/widget-base.php';
215 195 }
216 196
@@ -231,19 +211,19 @@
231 211 * Add a new widget type to the list of registered widget types.
232 212 *
233 213 * @since 1.0.0
234 214 * @access public
235 - * @deprecated 3.5.0 Use `register()` method instead.
215 + * @deprecated 3.5.0 Use `$this->register()` instead.
236 216 *
237 217 * @param Widget_Base $widget Elementor widget.
238 218 *
239 219 * @return true True if the widget was registered.
240 - */
220 + */
241 221 public function register_widget_type( Widget_Base $widget ) {
242 222 Plugin::$instance->modules_manager->get_modules( 'dev-tools' )->deprecation->deprecated_function(
243 223 __METHOD__,
244 224 '3.5.0',
245 - 'register()'
225 + 'register'
246 226 );
247 227
248 228 return $this->register( $widget );
249 229 }
@@ -252,11 +232,12 @@
252 232 * Register a new widget type.
253 233 *
254 234 * @param \Elementor\Widget_Base $widget_instance Elementor Widget.
255 235 *
256 - * @return bool True if the widget was registered.
236 + * @return true True if the widget was registered.
257 237 * @since 3.5.0
258 238 * @access public
239 + *
259 240 */
260 241 public function register( Widget_Base $widget_instance ) {
261 242 if ( is_null( $this->_widget_types ) ) {
262 243 $this->init_widgets();
@@ -261,38 +242,28 @@
261 242 if ( is_null( $this->_widget_types ) ) {
262 243 $this->init_widgets();
263 244 }
264 245
265 - /**
266 - * Should widget be registered.
267 - *
268 - * @since 3.18.0
269 - *
270 - * @param bool $should_register Should widget be registered. Default is `true`.
271 - * @param \Elementor\Widget_Base $widget_instance Widget instance.
272 - */
273 - $should_register = apply_filters( 'elementor/widgets/is_widget_enabled', true, $widget_instance );
274 -
275 - if ( ! $should_register ) {
276 - return false;
277 - }
278 -
279 246 $this->_widget_types[ $widget_instance->get_name() ] = $widget_instance;
280 247
281 248 return true;
282 249 }
283 250
284 - /** Register promoted widgets
251 + /** register promoted widgets
285 252 *
286 253 * Since we cannot allow widgets to place themselves is a specific
287 - * location on our widgets panel we need to use a hard coded solution for this.
254 + * location on our widgets panel we need to use an hard coded solution fort his
288 255 *
289 256 * @return void
290 257 */
291 258 private function register_promoted_widgets() {
292 259
293 - foreach ( $this->promoted_widgets as $experiment_name => $classes ) {
294 - $this->register_promoted_active_widgets( $experiment_name, $classes );
260 + foreach ( $this->_promoted_widgets as $module_name => $class_name ) {
261 +
262 + if ( Plugin::$instance->experiments->is_feature_active( $module_name ) ) {
263 + $instance = new $class_name();
264 + $this->_widget_types[ $instance->get_name() ] = $instance;
265 + }
295 266 }
296 267 }
297 268
298 269 /**
@@ -301,19 +272,19 @@
301 272 * Removes widget type from the list of registered widget types.
302 273 *
303 274 * @since 1.0.0
304 275 * @access public
305 - * @deprecated 3.5.0 Use `unregister()` method instead.
276 + * @deprecated 3.5.0 Use `$this->unregister()` instead.
306 277 *
307 278 * @param string $name Widget name.
308 279 *
309 280 * @return true True if the widget was unregistered, False otherwise.
310 - */
281 + */
311 282 public function unregister_widget_type( $name ) {
312 283 Plugin::$instance->modules_manager->get_modules( 'dev-tools' )->deprecation->deprecated_function(
313 284 __METHOD__,
314 285 '3.5.0',
315 - 'unregister()'
286 + 'unregister'
316 287 );
317 288
318 289 return $this->unregister( $name );
319 290 }
@@ -350,9 +321,9 @@
350 321 *
351 322 * @param string $widget_name Optional. Widget name. Default is null.
352 323 *
353 324 * @return Widget_Base|Widget_Base[]|null Registered widget types.
354 - */
325 + */
355 326 public function get_widget_types( $widget_name = null ) {
356 327 if ( is_null( $this->_widget_types ) ) {
357 328 $this->init_widgets();
358 329 }
@@ -372,9 +343,9 @@
372 343 * @since 1.0.0
373 344 * @access public
374 345 *
375 346 * @return array Registered widget types with each widget config.
376 - */
347 + */
377 348 public function get_widget_types_config() {
378 349 $config = [];
379 350
380 351 foreach ( $this->get_widget_types() as $widget_key => $widget ) {
@@ -384,9 +355,9 @@
384 355 return $config;
385 356 }
386 357
387 358 /**
388 - * @throws \Exception If current user don't have permissions to edit the post.
359 + * @throws \Exception
389 360 */
390 361 public function ajax_get_widget_types_controls_config( array $data ) {
391 362 Plugin::$instance->documents->check_permissions( $data['editor_post_id'] );
392 363
@@ -407,35 +378,8 @@
407 378
408 379 return $config;
409 380 }
410 381
411 - /**
412 - * @throws \Exception If current user don't have permissions to edit the post.
413 - */
414 - public function ajax_refresh_widgets_config( array $data ) {
415 - Plugin::$instance->documents->check_permissions( $data['editor_post_id'] );
416 -
417 - wp_raise_memory_limit( 'admin' );
418 -
419 - $widgets = [];
420 -
421 - foreach ( $this->get_widget_types() as $widget_key => $widget ) {
422 - $widget_config = $widget->get_config();
423 -
424 - // get_config() omits controls when the stack isn't initialized yet (see Widget_Base::get_initial_config).
425 - // During an AJAX refresh the instances are fresh, so we force-initialize and merge them explicitly.
426 - $widget_config['controls'] = $widget->get_stack( false )['controls'];
427 - $widget_config['tabs_controls'] = $widget->get_tabs_controls();
428 -
429 - $widgets[ $widget_key ] = $widget_config;
430 - }
431 -
432 - return [
433 - 'widgets' => $widgets,
434 - 'categories' => Plugin::$instance->elements_manager->get_categories(),
435 - ];
436 - }
437 -
438 382 public function ajax_get_widgets_default_value_translations( array $data = [] ) {
439 383 $locale = empty( $data['locale'] )
440 384 ? get_locale()
441 385 : $data['locale'];
@@ -519,9 +463,9 @@
519 463 *
520 464 * @param array $request Ajax request.
521 465 *
522 466 * @return bool|string Rendered widget form.
523 - * @throws \Exception If current user don't have permissions to edit the post.
467 + * @throws \Exception
524 468 */
525 469 public function ajax_get_wp_widget_form( $request ) {
526 470 Plugin::$instance->documents->check_permissions( $request['editor_post_id'] );
527 471
@@ -559,9 +503,9 @@
559 503 * template, for all the registered widget types.
560 504 *
561 505 * @since 1.0.0
562 506 * @access public
563 - */
507 + */
564 508 public function render_widgets_content() {
565 509 foreach ( $this->get_widget_types() as $widget ) {
566 510 $widget->print_template();
567 511 }
@@ -576,9 +520,9 @@
576 520 * @since 1.3.0
577 521 * @access public
578 522 *
579 523 * @return array Registered widget types with settings keys for each widget.
580 - */
524 + */
581 525 public function get_widgets_frontend_settings_keys() {
582 526 $keys = [];
583 527
584 528 foreach ( $this->get_widget_types() as $widget_type_name => $widget_type ) {
@@ -592,63 +536,8 @@
592 536 return $keys;
593 537 }
594 538
595 539 /**
596 - * Widgets with styles.
597 - *
598 - * This method returns the list of all the widgets in the `/includes/`
599 - * folder that have styles.
600 - *
601 - * @since 3.24.0
602 - * @access public
603 - *
604 - * @return array The names of the widgets that have styles.
605 - */
606 - public function widgets_with_styles(): array {
607 - return [
608 - 'counter',
609 - 'divider',
610 - 'google_maps',
611 - 'heading',
612 - 'image',
613 - 'image-carousel',
614 - 'menu-anchor',
615 - 'rating',
616 - 'social-icons',
617 - 'spacer',
618 - 'testimonial',
619 - 'text-editor',
620 - 'video',
621 - ];
622 - }
623 -
624 - /**
625 - * Widgets with responsive styles.
626 - *
627 - * This method returns the list of all the widgets in the `/includes/`
628 - * folder that have responsive styles.
629 - *
630 - * @since 3.24.0
631 - * @access public
632 - *
633 - * @return array The names of the widgets that have responsive styles.
634 - */
635 - public function widgets_with_responsive_styles(): array {
636 - return [
637 - 'accordion',
638 - 'alert',
639 - 'icon-box',
640 - 'icon-list',
641 - 'image-box',
642 - 'image-gallery',
643 - 'progress',
644 - 'star-rating',
645 - 'tabs',
646 - 'toggle',
647 - ];
648 - }
649 -
650 - /**
651 540 * Enqueue widgets scripts.
652 541 *
653 542 * Enqueue all the scripts defined as a dependency for each widget.
654 543 *
@@ -653,9 +542,9 @@
653 542 * Enqueue all the scripts defined as a dependency for each widget.
654 543 *
655 544 * @since 1.3.0
656 545 * @access public
657 - */
546 + */
658 547 public function enqueue_widgets_scripts() {
659 548 foreach ( $this->get_widget_types() as $widget ) {
660 549 $widget->enqueue_scripts();
661 550 }
@@ -660,14 +549,8 @@
660 549 $widget->enqueue_scripts();
661 550 }
662 551 }
663 552
664 - public function register_frontend_handlers() {
665 - foreach ( $this->get_widget_types() as $widget ) {
666 - $widget->register_frontend_handlers();
667 - }
668 - }
669 -
670 553 /**
671 554 * Enqueue widgets styles
672 555 *
673 556 * Enqueue all the styles defined as a dependency for each widget
@@ -742,9 +625,9 @@
742 625 * Initializing Elementor widgets manager.
743 626 *
744 627 * @since 1.0.0
745 628 * @access public
746 - */
629 + */
747 630 public function __construct() {
748 631 $this->require_files();
749 632
750 633 add_action( 'elementor/ajax/register_actions', [ $this, 'register_ajax_actions' ] );
@@ -764,26 +647,9 @@
764 647 $ajax_manager->register_ajax_action( 'render_widget', [ $this, 'ajax_render_widget' ] );
765 648 $ajax_manager->register_ajax_action( 'editor_get_wp_widget_form', [ $this, 'ajax_get_wp_widget_form' ] );
766 649 $ajax_manager->register_ajax_action( 'get_widgets_config', [ $this, 'ajax_get_widget_types_controls_config' ] );
767 650
768 - $ajax_manager->register_ajax_action( 'refresh_widgets_config', [ $this, 'ajax_refresh_widgets_config' ] );
769 -
770 651 $ajax_manager->register_ajax_action( 'get_widgets_default_value_translations', function ( array $data ) {
771 652 return $this->ajax_get_widgets_default_value_translations( $data );
772 653 } );
773 - }
774 -
775 - /**
776 - * @param string $experiment_name
777 - * @param array $classes
778 - * @return void
779 - */
780 - public function register_promoted_active_widgets( string $experiment_name, array $classes ): void {
781 - if ( ! Plugin::$instance->experiments->is_feature_active( $experiment_name ) || empty( $classes ) ) {
782 - return;
783 - }
784 -
785 - foreach ( $classes as $class_name ) {
786 - $this->register( new $class_name() );
787 - }
788 654 }
789 655 }