/var/www/hkosl.com/aga/wp-content/plugins/siteorigin-panels/inc/widget-shortcode.php


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
<?php

class SiteOrigin_Panels_Widget_Shortcode {

    static 
$text_widgets = array(
        
'SiteOrigin_Widget_Editor_Widget',
        
'SiteOrigin_Panels_Widgets_Layout',
        
'WP_Widget_Black_Studio_TinyMCE',
        
'WP_Widget_Text',
    );

    static function 
init() {
        
add_shortcode'siteorigin_widget''SiteOrigin_Panels_Widget_Shortcode::shortcode' );
    }

    static function 
add_filters() {
        
add_filter'siteorigin_panels_the_widget_html''SiteOrigin_Panels_Widget_Shortcode::widget_html'10);
    }

    static function 
remove_filters(){
        
remove_filter'siteorigin_panels_the_widget_html''SiteOrigin_Panels_Widget_Shortcode::widget_html' );
    }

    
/**
     * This shortcode just displays a widget based on the given arguments
     *
     * @param $attr
     * @param $content
     *
     * @return string
     */
    
static function shortcode$attr$content ){
        
$attr shortcode_atts( array(
            
'class' => false,
            
'id' => '',
        ), 
$attr'siteorigin_widget' );
        
        
$attr'class' ] = html_entity_decode$attr'class' ] );
        
$attr'class' ] = apply_filters'siteorigin_panels_widget_class'$attr'class' ] );
        
        
$the_widget = ! empty( $attr'class' ] ) ? SiteOrigin_Panels::get_widget_instance$attr['class'] ) : null;
        if( ! empty( 
$the_widget ) ) {

            
$data self::decode_data$content );

            
$widget_args = ! empty( $data'args' ] ) ? $data'args' ] : array();
            
$widget_instance = ! empty( $data'instance' ] ) ? $data'instance' ] : array();

            
$widget_args wp_parse_args( array(
                
'before_widget' => '',
                
'after_widget' => '',
                
'before_title' => '<h3 class="widget-title">',
                
'after_title' => '</h3>',
            ), 
$widget_args );

            
ob_start();
            
$the_widget->widget$widget_args$widget_instance );
            return 
ob_get_clean();
        }
    }

    
/**
     * Get the shortcode for a specific widget
     *
     * @param $widget
     * @param $args
     * @param $instance
     *
     * @return string
     */
    
static function get_shortcode$widget$args$instance ){
        unset( 
$instance'panels_info' ] );

        
$data = array(
            
'instance' => $instance,
            
'args' => $args,
        );

        
// This allows other plugins to implement their own shortcode. For example, to work when Page Builder isn't active
        
$shortcode_name apply_filters'siteorigin_panels_cache_shortcode''siteorigin_widget'$widget$instance$args );

        
$shortcode '[' $shortcode_name ' ';
        
$shortcode .= 'class="' htmlentitiespreg_replace'/\\\\+/''\\\\\\\\'get_class$widget ) ) ) . '"]';
        
$shortcode .= self::encode_data$data ) ;
        
$shortcode .= '[/' $shortcode_name ']';
        
        return 
$shortcode;
    }

    
/**
     * A filter to replace widgets with
     */
    
static function widget_html$html$widget$args$instance ){
        if(
            empty( 
$GLOBALS'SITEORIGIN_PANELS_POST_CONTENT_RENDER' ] ) ||
            
// Don't try create HTML if there already is some
            
! empty( $html ) ||
            ! 
is_object$widget ) ||
            
// Skip for known text based widgets
            
in_arrayget_class$widget ), self::$text_widgets )
        ) {
            return 
$html;
        }

        return 
self::get_shortcode$widget$args$instance );
    }

    static function 
encode_data$data ){
        return 
'<input type="hidden" value="' htmlentitiesjson_encode$data ), ENT_QUOTES ) . '" />';
    }

    static function 
decode_data$string ){
        
preg_match'/value="([^"]*)"/'trim$string ), $matches );
        if( ! empty( 
$matches[1] ) ) {
            
$data json_decodehtml_entity_decode$matches[1], ENT_QUOTES ), true );
            return 
$data;
        }
        else {
            return array();
        }
    }
}