Repository URL to install this package:
|
Version:
3.7.1 ▾
|
<?php
Class CT_Widget extends CT_Component {
function __construct( $options ) {
// run initialization
$this->init( $options );
// remove component button
remove_action("ct_toolbar_fundamentals_list", array( $this, "component_button" ) );
// Add shortcodes
add_shortcode( $this->options['tag'], array( $this, 'add_shortcode' ) );
// add toolbar
add_action("ct_toolbar_widgets_folder", array( $this, "widgets_list") );
// add specific options
add_action("ct_toolbar_component_settings", array( $this, "widget_settings") );
// render builder preview
add_filter( 'template_include', array( $this, 'widget_single_template'), 100 );
add_filter("oxygen_elements_without_presets", array($this, "oxygen_elements_without_presets_callback"));
}
/**
* Add a [ct_widget] shortcode to WordPress
*
* @since 0.2.3
*/
function add_shortcode( $atts, $content = null, $name = null ) {
if ( ! $this->validate_shortcode( $atts, $content, $name ) ) {
return '';
}
$options = $this->set_options( $atts );
$atts = json_decode($atts['ct_options'], true);
$instance = isset($atts['original']['instance']) ? (isset($atts['original']['paramsBase64'])?$this->ct_decode_widget_shortcode_params($atts['original']['instance']):$atts['original']['instance']) : array();
ob_start();
if ( ! isset( $GLOBALS['wp_widget_factory']->widgets[$atts['original']['class_name']] ) ) {
echo "<div><b>Error!</b><br/> No '".$atts['original']['class_name']."' widget registered in this installation.<br/><br/></div>";
return ob_get_clean();
}
$instance = $GLOBALS['wp_widget_factory']->widgets[$atts['original']['class_name']]->update($instance, array());
?><div id="<?php echo esc_attr($options['selector']); ?>" class="<?php echo esc_attr($options['classes']); ?>" <?php do_action("oxygen_vsb_component_attr", $options, $this->options['tag']); ?>><?php the_widget( $atts['original']['class_name'], $instance); ?></div><?php
return ob_get_clean();
}
/**
* Decode widget options
*
* @since 1.2
*/
function ct_decode_widget_shortcode_params($array_value) {
return array_map(function($value) {
if ( is_array($value) ) {
return $this->ct_decode_widget_shortcode_params($value);
}
elseif ( is_bool($value) ) {
return $value;
}
else {
return base64_decode($value);
}
}, $array_value );
}
/**
* Output settings
*
* @since 0.2.3
*/
function widget_settings() { ?>
<div class="oxygen-widget-settings-wrapper"
ng-if="isActiveName('<?php echo $this->options['tag']; ?>')">
<div class="oxygen-widget-settings">
<div id="ct-dialog-widget-content" class="ct-dialog-widget-content">
<!-- AJAX loaded content here -->
</div>
</div>
</div>
<div class="oxygen-widget-settings-bottom"
ng-if="isActiveName('<?php echo $this->options['tag']; ?>')">
<div class="oxygen-widget-settings-apply-button" title="<?php _e("Apply widget options","oxygen"); ?>"
ng-click="iframeScope.applyWidgetInstance()">
<?php _e("Apply", "oxygen"); ?>
</div>
<?php
/**
* To add buttons (or other elements) to widget bottom row
* @since 2.0
*/
do_action("oxygen_widget_settings_apply_after");
?>
</div>
<?php }
/**
* Display all widgets
*
* @since 0.2.3
*/
function widgets_list() {
if (oxygen_hide_element_button($this->options['tag'])) {
return;
}
foreach ( $GLOBALS['wp_widget_factory']->widgets as $class => $widget ) { ?>
<div class="oxygen-add-section-element" title="<?php echo $widget->widget_options['description']; ?>"
data-searchid="widget_<?php echo strtolower( preg_replace('/\s+/', '_', sanitize_text_field( $widget->name ) ) ) ?>"
ng-click="iframeScope.addWidget('<?php echo $class; ?>','<?php echo $widget->id_base; ?>', '<?php echo addslashes(html_entity_decode($widget->name, ENT_QUOTES) ); ?>')">
<img src='<?php echo CT_FW_URI; ?>/toolbar/UI/oxygen-icons/add-icons/widgets.svg' />
<img src='<?php echo CT_FW_URI; ?>/toolbar/UI/oxygen-icons/add-icons/widgets-active.svg' />
<?php echo $widget->name; ?>
</div>
<?php }
}
/**
* This function hijacks the template to return special template that renders the code results
* for the ct_code_block element to load the content into the builder for preview.
*
* @since 0.4.0
* @author gagan goraya
*/
function widget_single_template( $template ) {
$new_template = '';
if(isset($_REQUEST['action']) && stripslashes($_REQUEST['action']) == 'ct_render_widget') {
$nonce = $_REQUEST['nonce'];
$post_id = $_REQUEST['post_id'];
// check nonce
if ( ! wp_verify_nonce( $nonce, 'oxygen-nonce-' . $post_id ) ) {
// This nonce is not valid.
die( 'Security check' );
}
if ( file_exists(dirname(dirname( __FILE__)) . '/layouts/' . 'widget.php') ) {
$new_template = dirname(dirname( __FILE__)) . '/layouts/' . 'widget.php';
}
}
if ( '' != $new_template ) {
return $new_template ;
}
return $template;
}
}
// Create inctance
global $oxygen_vsb_components;
$oxygen_vsb_components['widget'] = new CT_Widget( array(
'name' => 'Widget',
'tag' => 'ct_widget',
'params' => array(
array(
"type" => "textfield",
"param_name" => "class_name",
"hidden" => true,
"css" => false,
),
array(
"type" => "textfield",
"param_name" => "id_base",
"hidden" => true,
"css" => false,
),
array(
"type" => "textfield",
"param_name" => "instance",
"hidden" => true,
"css" => false,
),
array(
"type" => "checkbox",
"heading" => __("Don't render in Oxygen","oxygen"),
"param_name" => "dont_render",
"value" => "false",
"true_value" => "true",
"false_value" => "false",
"css" => false
),
array(
"type" => "measurebox",
"heading" => __("Placeholder Width"),
"param_name" => "placeholder-width",
"value" => "",
"condition" => "dont_render=true",
"css" => false
),
array(
"type" => "measurebox",
"heading" => __("Placeholder Height"),
"param_name" => "placeholder-height",
"value" => "",
"condition" => "dont_render=true",
"css" => false
),
),
'advanced' => array(
"positioning" => array(
"values" => array (
'width' => '100',
'width-unit' => '%',
)
),
"other" => array(
"values" => array (
'placeholder-width-unit' => 'px',
'placeholder-height-unit' => 'px',
)
),
'allow_shortcodes' => true,
),
'not_css_params' => array(
'pretty_name',
)
)
);