File: /www/wwwroot/fni.gov.mz/wp-content/themes/Newspaper/includes/wp_booster/td_block_widget.php
<?php
/**
* Class td_block_widget - used to create widgets from our blocks.
* AUTOLOAD STATUS: cannot be autoloaded because WordPress needs to know at all times what widgets are registered
*/
class td_block_widget extends WP_Widget {
var $td_block_id = 0; // this is changed by td_block_widget class constructor
private $map_array;
private $map_param_default_array;
/**
* overwrite the default WordPress constructor
* @param string $td_block_id
*/
function __construct( $td_block_id = '' ) {
// $this->td_block_id on old theme versions is set by inherited classes. The check and the default value ('') are for old code that registers widgets using the old method.
if ( ! empty( $td_block_id ) ) {
$this->td_block_id = $td_block_id;
}
// read our map_array
$this->map_array = td_api_block::get_by_id( $this->td_block_id );
$widget_ops = array('classname' => 'td_pb_widget', 'description' => '[tagDiv] ' . $this->map_array['name']);
/**
* overwrite the widget settings, we emulate the WordPress settings. Before WP 4.3 we called the old php4 constructor again :(
* @see \WP_Widget::__construct
*/
$id_base = $this->map_array['base'] . '_widget';
$name = '[tagDiv] ' . $this->map_array['name'];
$widget_options = $widget_ops;
$control_options = array();
$this->id_base = strtolower($id_base);
$this->name = $name;
$this->option_name = 'widget_' . $this->id_base;
$this->widget_options = wp_parse_args( $widget_options, array('classname' => $this->option_name) );
$this->control_options = wp_parse_args( $control_options, array('id_base' => $this->id_base) );
// build the default values?
$this->map_param_default_array = $this->build_param_default_values();
}
/**
* build the default values array
* @return array
*/
private function build_param_default_values() {
$buffy_array = array();
if (!empty($this->map_array['params'])) {
foreach ($this->map_array['params'] as $param) {
if ($param['type'] == 'dropdown') {
$buffy_array[$param['param_name']] = '';
} else {
$buffy_array[$param['param_name']] = $param['value'];
}
}
}
return $buffy_array;
}
function _render_block_param($instance, $param, $show = false) {
ob_start();
switch ($param['type']) {
case 'textarea_html':
//print_r($param);
?>
<p>
<label for="<?php echo $this->get_field_id($param['param_name']); ?>"><?php echo $param['heading']; ?></label>
<textarea class="widefat" name="<?php echo $this->get_field_name($param['param_name']); ?>" id="<?php echo $this->get_field_id($param['param_name']); ?>" cols="30" rows="10"><?php echo esc_textarea($instance[$param['param_name']]); ?></textarea>
<div class="td-wpa-info">
<?php echo $param['description']; ?>
</div>
</p>
<?php
break;
case 'textfield':
// we have to change custom_title to custom-title to have "-title" at the end. That's what
// WordPress uses to put the title of the widget on post @see widgets.js
// suggested at: http://forum.tagdiv.com/topic/please-add-block-title-to-backend-widget-title/#post-58087
if ($param['param_name'] == 'custom_title') {
$field_id = $this->get_field_id('custom-title');
} else {
$field_id = $this->get_field_id($param['param_name']);
}
?>
<p>
<label for="<?php echo $this->get_field_id($param['param_name']); ?>"><?php echo $param['heading']; ?></label>
<input class="widefat" id="<?php echo $field_id; ?>"
name="<?php echo $this->get_field_name($param['param_name']); ?>" type="text"
value="<?php echo $instance[$param['param_name']]; ?>" />
<div class="td-wpa-info">
<?php echo $param['description']; ?>
</div>
</p>
<?php
break;
case 'dropdown':
?>
<p>
<label for="<?php echo $this->get_field_id($param['param_name']); ?>"><?php echo $param['heading']; ?></label>
<select name="<?php echo $this->get_field_name($param['param_name']); ?>" id="<?php echo $this->get_field_id($param['param_name']); ?>" class="widefat">
<?php
foreach ($param['value'] as $param_name => $param_value) {
?>
<option value="<?php echo $param_value; ?>"<?php selected($instance[$param['param_name']], $param_value); ?>><?php echo $param_name; ?></option>
<?php
}
?>
</select>
<div class="td-wpa-info">
<?php echo $param['description']; ?>
</div>
</p>
<?php
break;
case 'colorpicker':
$empty_color_fix = '#';
if (!empty($instance[$param['param_name']])) {
$empty_color_fix = $instance[$param['param_name']];
}
$widget_color_picker_id = td_global::td_generate_unique_id();
?>
<p>
<label for="<?php echo $this->get_field_id($param['param_name']); ?>"><?php echo $param['heading']; ?></label>
<input data-td-w-color="<?php echo $widget_color_picker_id?>" class="widefat td-color-picker-field" id="<?php echo $this->get_field_id($param['param_name']); ?>"
name="<?php echo $this->get_field_name($param['param_name']); ?>" type="text"
value="<?php echo $empty_color_fix; ?>" />
<div id="<?php echo $widget_color_picker_id?>" class="td-color-picker-widget" rel="<?php echo $this->get_field_id($param['param_name']); ?>"></div>
</p>
<div class="td-wpa-info">
<?php echo $param['description']; ?>
</div>
<script>
//td_widget_attach_color_picker();
</script>
<?php
break;
case 'attach_image':
$backgroundImage = get_template_directory_uri() . '/includes/wp_booster/wp-admin/images/no_img.png';
$hideRemoveButton = 'td-hidden-button';
if ( ! empty( $instance[$param['param_name']] ) ) {
$backgroundImage = wp_get_attachment_url($instance[$param['param_name']]);
$hideRemoveButton = '';
}
?>
<div class="td-widget-attach-image-wrap">
<label for="<?php echo $this->get_field_id($param['param_name']); ?>"><?php echo $param['heading']; ?></label>
<div class="td-widget-attach-image" style="background-image: url('<?php echo $backgroundImage ?>')"></div>
<input type="hidden" name="<?php echo $this->get_field_name($param['param_name']); ?>" value="<?php echo $instance[$param['param_name']]; ?>" />
<div class="td-widget-remove-image <?php echo $hideRemoveButton ?>">Remove</div>
<div class="td-wpa-info">
<?php echo $param['description']; ?>
</div>
</div>
<?php
break;
}
$buffer = ob_get_clean();
if ($show === true) {
echo $buffer;
} else {
return $buffer;
}
}
function form($instance) {
$instance = wp_parse_args((array) $instance, $this->map_param_default_array);
//print_r($instance);
if (!empty($this->map_array['params'])) {
$defaultTab = 'General';
// step 1 - make the tabs
$allGroupNames = array();
foreach ($this->map_array['params'] as $param) {
$current_tab_name = $defaultTab;
if (!empty($param['group'])) {
$current_tab_name = $param['group'];
}
$allGroupNames[] = $current_tab_name;
}
$allGroupNames = array_unique($allGroupNames);
$newGroupNames = array();
foreach ($allGroupNames as $groupName) {
$newValue = array(
'mapped_name' => $groupName,
);
switch ($groupName) {
case 'Design options':
if ( td_util::tdc_is_installed()) {
$newValue['show_name'] = 'Css';
} else {
unset($newValue);
}
break;
case 'Pagination':
$newValue['show_name'] = 'Extra';
break;
case 'Ajax filter':
$newValue['show_name'] = 'Ajax';
break;
default:
$newValue['show_name'] = $groupName;
}
if (isset($newValue)) {
$newGroupNames[] = $newValue;
}
}
$buffer = '<div class="tdc-tabs-wrapper">';
$buffer .= '<div class="tdc-tabs">';
$class_tab_active = 'tdc-tab-active';
foreach ($newGroupNames as $groupName) {
$buffer .= '<a href="#" data-tab-id="tdc-tab-' . strtolower($groupName['show_name']) . '" class="' . $class_tab_active . '">' . $groupName['show_name'] . '</a>';
$class_tab_active = '';
}
$buffer .= '</div>';
$buffer .= '<div class="tdc-tab-content-wrap">';
$class_tab_content_visible = 'tdc-tab-content-visible';
foreach ($newGroupNames as $groupName) {
if ($groupName['show_name'] === 'Css') {
$tdc_css_value = '';
if (isset($instance['tdc_css'])) {
$tdc_css_value = $instance['tdc_css'];
}
$data_tdc_css = ' data-tdc_css="' . $tdc_css_value .'"';
$class_tab_design = 'tdc-tab-design';
} else {
$data_tdc_css = '';
$class_tab_design = '';
}
$buffer .= '<div class="tdc-tab-content tdc-tab-widget tdc-tab-' . strtolower($groupName['show_name']) . ' ' . $class_tab_content_visible . ' ' . $class_tab_design . '"' . $data_tdc_css . '>';
$class_tab_content_visible = '';
$block_template_id = $instance['block_template_id'];
if (empty($block_template_id)) {
// global block template id
$block_template_id = td_options::get('tds_global_block_template', 'td_block_template_1');
}
if ($groupName['show_name'] === 'General') {
$customTitleParam = null;
$customUrlParam = null;
$blockTemplateIdParam = null;
$block_template_map_array = td_api_block_template::get_by_id($block_template_id);
$tdTypeParams = array();
foreach ($this->map_array['params'] as $param) {
if ((isset($param['group']) && $groupName['show_name'] !== $defaultTab && $groupName['mapped_name'] === $param['group']) ||
(!isset($param['group']) && $groupName['show_name'] === $defaultTab)){
if ($param['param_name'] === 'custom_title') {
$customTitleParam = $param;
continue;
} else if ($param['param_name'] === 'custom_url') {
$customUrlParam = $param;
continue;
} else if ($param['param_name'] === 'block_template_id') {
$blockTemplateIdParam = $param;
continue;
} else {
$tdTypeParams[] = $param;
}
}
}
// Render 'custom_title', 'custom_url' and 'block_template_id' params (IN THIS ORDER)
if (!is_null($customTitleParam)) {
$buffer .= $this->_render_block_param($instance, $customTitleParam);
}
if (!is_null($customUrlParam)) {
$buffer .= $this->_render_block_param($instance, $customUrlParam);
}
if (!is_null($blockTemplateIdParam)) {
$buffer .= $this->_render_block_param($instance, $blockTemplateIdParam);
}
foreach ($block_template_map_array['params'] as $block_template_param) {
$buffer .= $this->_render_block_param($instance, $block_template_param);
}
foreach ($tdTypeParams as $param) {
if (!isset($param['td_type'])) {
$buffer .= $this->_render_block_param( $instance, $param );
}
}
} else {
foreach ($this->map_array['params'] as $param) {
if ((isset($param['group']) && $groupName['show_name'] !== $defaultTab && $groupName['mapped_name'] === $param['group']) ||
(!isset($param['group']) && $groupName['show_name'] === $defaultTab)){
$buffer .= $this->_render_block_param($instance, $param);
}
}
}
$buffer .= '</div>';
}
$buffer .= '</div>';
$buffer .= '</div>';
echo $buffer;
}
}
/**
* Update the settings of the widget
* @param array $new_instance
* @param array $old_instance
* @return array
*/
function update($new_instance, $old_instance) {
$instance = $old_instance;
foreach ($this->map_param_default_array as $param_name => $param_value) {
// we must check for isset, because otherwise we will end up with NULL if a field type is not declare above
// like the problem we had with the css att/field
if (isset($new_instance[$param_name])) {
$instance[$param_name] = $new_instance[$param_name];
}
}
return $instance;
}
/**
* render the widget
* @param array $args
* @param array $instance
*/
function widget($args, $instance) {
/**
* add the td_block_widget class to the block via the short code atts, we can add td_block_widget multiple times because array_unique in @see td_block::get_block_classes
*/
if (!empty($instance['class'])) {
$instance['class'] = $instance['class'] . ' td_block_widget';
} else {
$instance['class'] = 'td_block_widget';
}
if (!empty($instance['content'])) {
//render the instance - but also send the content parameter to the shortcode
echo td_global_blocks::get_instance($this->td_block_id)->render($instance, $instance['content']);
} else {
//render the instance without the content parameter
echo td_global_blocks::get_instance($this->td_block_id)->render($instance);
}
}
}