File: /var/www/vfconf/wp-content/plugins/siteorigin-panels/inc/widgets/layout.php
<?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 {
public 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(
)
);
}
public 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'] );
$widget['panels_info']['builder'] = true;
}
}
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'];
}
public 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;
}
public function form( $instance ) {
if ( ! is_admin() && ! defined( 'REST_REQUEST' ) ) {
?>
<p>
<?php esc_html_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'] = wp_json_encode( $instance['panels_data'] );
}
$builder_supports = apply_filters( 'siteorigin_panels_layout_builder_supports', array(), $instance['panels_data'] );
// Prep panels_data for output.
$panels_data = wp_check_invalid_utf8( $instance['panels_data'] );
$panels_data = _wp_specialchars( $panels_data, ENT_QUOTES, null, true );
$panels_data = apply_filters( 'attribute_escape', $panels_data, $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"
data-builder-supports="<?php echo esc_attr( wp_json_encode( $builder_supports ) ); ?>"
>
<p>
<button class="button-secondary siteorigin-panels-display-builder" ><?php esc_html_e( 'Open Builder', 'siteorigin-panels' ); ?></button>
</p>
<input
type="hidden"
data-panels-filter="json_parse"
class="panels-data"
value="<?php echo $panels_data; ?>"
name="<?php echo esc_attr( $this->get_field_name( 'panels_data' ) ); ?>"
id="<?php echo esc_attr( $this->get_field_id( 'panels_data' ) ); ?>"
/>
<input type="hidden" value="<?php echo esc_attr( $instance['builder_id'] ); ?>" name="<?php echo esc_attr( $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
}
}