1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
|
<?php
/** * This widget give you the full Page Builder interface inside a widget. Fully nestable. * * Class SiteOrigin_Panels_Widgets_Builder */ class SiteOrigin_Panels_Widgets_Layout extends WP_Widget { function __construct() { parent::__construct( 'siteorigin-panels-builder', // TRANSLATORS: This is the name of a widget __( 'Layout Builder', 'siteorigin-panels' ), array( 'description' => __( 'A complete SiteOrigin Page Builder layout as a widget.', 'siteorigin-panels' ), 'panels_title' => false, ), array( ) ); } function widget($args, $instance) { if( empty($instance['panels_data']) ) return; if( is_string( $instance['panels_data'] ) ) { $instance['panels_data'] = json_decode( $instance['panels_data'], true ); } if(empty($instance['panels_data']['widgets'])) return; if( ! empty( $instance['panels_data']['widgets'] ) ) { foreach( $instance['panels_data']['widgets'] as & $widget ) { $widget['panels_info']['class'] = str_replace( '\', '\\', $widget['panels_info']['class'] ); } } if( empty( $instance['builder_id'] ) ) $instance['builder_id'] = uniqid(); echo $args['before_widget']; $is_content_render = ! empty( $GLOBALS['SITEORIGIN_PANELS_POST_CONTENT_RENDER'] ) && siteorigin_panels_setting( 'copy-styles' ); $is_preview_render = ! empty( $GLOBALS['SITEORIGIN_PANELS_PREVIEW_RENDER'] );
echo SiteOrigin_Panels::renderer()->render( 'w'.$instance['builder_id'], true, $instance['panels_data'], $layout_data, $is_content_render || $is_preview_render ); echo $args['after_widget']; } function update($new, $old) { $new['builder_id'] = uniqid(); if( is_string($new['panels_data']) && ! empty( $new['panels_data'] ) ) { // This is still in a string format, so we'll convert it to an array for sanitization $new['panels_data'] = json_decode( $new['panels_data'], true ); } if ( ! empty( $new['panels_data'] ) ) { if ( ! empty( $new['panels_data']['widgets'] ) ) { $new['panels_data']['widgets'] = SiteOrigin_Panels_Admin::single()->process_raw_widgets( $new['panels_data']['widgets'], ! empty( $old['panels_data']['widgets'] ) ? $old['panels_data']['widgets'] : false ); foreach( $new['panels_data']['widgets'] as & $widget ) { $widget['panels_info']['class'] = str_replace( '\\', '\', $widget['panels_info']['class'] ); } } $new['panels_data'] = SiteOrigin_Panels_Styles_Admin::single()->sanitize_all( $new['panels_data'] ); } return $new; } function form( $instance ){ if ( ! is_admin() ) { ?> <p> <?php _e( 'This widget can currently only be used in the WordPress admin interface.', 'siteorigin-panels' ) ?> </p> <?php return; } $instance = wp_parse_args($instance, array( 'panels_data' => '', 'builder_id' => uniqid(), ) ); $form_id = uniqid(); if( ! empty( $instance['panels_data']['widgets'] ) ) { foreach( $instance['panels_data']['widgets'] as & $widget ) { $widget['panels_info']['class'] = str_replace( '\', '\\', $widget['panels_info']['class'] ); } } if( ! is_string( $instance['panels_data'] ) ) { $instance['panels_data'] = json_encode( $instance['panels_data'] ); } ?> <div class="siteorigin-page-builder-widget" id="siteorigin-page-builder-widget-<?php echo esc_attr( $form_id ) ?>" data-builder-id="<?php echo esc_attr( $form_id ) ?>" data-type="layout_widget"> <p> <button class="button-secondary siteorigin-panels-display-builder" ><?php _e('Open Builder', 'siteorigin-panels') ?></button> </p> <input type="hidden" data-panels-filter="json_parse" value="" class="panels-data" name="<?php echo $this->get_field_name('panels_data') ?>" id="<?php echo $this->get_field_id('panels_data') ?>" /> <script type="text/javascript"> ( function( panelsData ){ // Create the panels_data input document.getElementById('<?php echo $this->get_field_id('panels_data') ?>').value = JSON.stringify( panelsData ); } )( <?php echo $instance['panels_data']; ?> ); </script> <input type="hidden" value="<?php echo esc_attr( $instance['builder_id'] ) ?>" name="<?php echo $this->get_field_name('builder_id') ?>" /> </div> <script type="text/javascript"> if( typeof jQuery.fn.soPanelsSetupBuilderWidget != 'undefined' && ( ! jQuery('body').hasClass('wp-customizer') || jQuery( "#siteorigin-page-builder-widget-<?php echo esc_attr( $form_id ) ?>").closest( '.panel-dialog' ).length ) ) { jQuery( "#siteorigin-page-builder-widget-<?php echo esc_attr( $form_id ) ?>").soPanelsSetupBuilderWidget(); } </script> <?php } }
|