/** * setup widget feature * @call HW_AWC call from method HW_AWC/_hw_awc_in_widget_form * @param WP_Widget $widget */ public static function setup_features_widgets(WP_Widget $widget) { static $active_features_widgets; if (empty($active_features_widgets)) { $active_features_widgets = hw_get_setting(array(self::SETTINGS_GROUP, 'active_features_widgets'), array()); } foreach ($active_features_widgets as $item) { if (isset($item['active']) && strtolower($item['active']) == 'on' && $item['widget'] == $widget->id_base) { HW_AWC_WidgetFeatures::register_widget_feature($widget, $item['feature']); //_print($widget->id_base); //break; //please do not break because one widget has more than one feature } } }
/** * load option grid posts * @param WP_Widget $t: widget object * @param array $instance: widget data */ function do_widget_feature($t, $instance = array()) { $this->widget_instance = $instance; //maybe update widget instance //$wf_name = $this->get_widget_feature_name(''); //list registered sidebars $sidebars = hwawc_get_active_sidebars_select(); $sidebar_skins = HW_AWC_Sidebar_Settings::available_widget_skins(true); //sidebar skins //saved widget configs by specifying group $widgetconfig_groups = AWC_WidgetFeature_saveconfig::get_widgets_settings_select(' WHERE _group="' . self::WIDGET_CONFIG_GROUP . '"'); //HW_UI_Component::build_select_tag($sidebars, '', ''); echo '<div class="form-wf-shortcode-params" id="' . $this->get_field_id('wfshortcode_container') . '"><fieldset><legend>Tạo shortcode widget</legend>'; echo '<input type="hidden" class="widget_class" name="' . $this->get_field_name('widget_class') . '" id="' . $this->get_field_id('widget_class') . '" value="' . get_class($t) . '"/>'; echo '<input type="hidden" class="widget_instance" name="' . $this->get_field_name('widget_instance') . '" id=" ' . $this->get_field_id('widget_instance') . ' " value="' . base64_encode(serialize($instance)) . '"/>'; //apply widget to sidebar echo '<p><label for="' . $this->get_field_id('sidebar') . '">Chọn Sidebar</label><br/>'; echo '<select class="hw-select sidebar" name="' . $this->get_field_name('sidebar') . '" id="' . $this->get_field_id('sidebar') . '">'; foreach ($sidebars as $id => $name) { $selected = selected($this->get_field_value('sidebar'), $id, false); printf('<option value="%s" %s>%s</option>', $id, $selected, $name); } echo '</select></p>'; //choose sidebar skin echo '<p><label for="' . $this->get_field_id('sidebar_skin') . '">Chọn giao diện Sidebar</label><br/>'; echo HW_UI_Component::build_select_tag($sidebar_skins, null, array('name' => $this->get_field_name('sidebar_skin'), 'id' => $this->get_field_id('sidebar_skin'), 'class' => 'sidebar_skin')); echo '</select></p>'; //widget config group echo '<p><label for="' . $this->get_field_id('config_group') . '">Chọn widget config</label><br/>'; echo '<select class="config_group" name=" ' . $this->get_field_name('config_group') . ' " id="' . $this->get_field_id('config_group') . '">'; foreach ($widgetconfig_groups as $id => $text) { $selected = selected($this->get_field_value('config_group'), $id, false); printf('<option value="%s" %s>%s</option>', $id, $selected, $text); } echo '</select>'; echo '<a href="javascript:void(0)" onclick="__awc_feature_shortcode_params.refresh_saved_widgetsconfig(this,\'' . $this->get_field_id('config_group') . '\')">Refresh</a>'; //you also should be active saveconfig feature if (!HW_AWC_WidgetFeatures::check_widget_feature($t, 'saveconfig')) { echo '<div>Bạn cũng cần kích hoạt feature "<a href="' . admin_url('options-general.php?page=' . HW_HOANGWEB_Settings::HW_SETTINGS_PAGE) . '" target="_blank">saveconfig</a>" cho widget này.</div>'; } echo '</p>'; echo '<a href="javascript:void(0)" onclick="__awc_feature_shortcode_params.generate_shortcode(this,jQuery(\'#' . $this->get_field_id('wfshortcode_container') . '\'))" class="button">Tạo shortcode</a>'; echo '<div></div>'; echo '<p><em>Hướng dẫn</em>: Sử dụng tính năng "Lưu cài đặt" ở tại widget này để lưu cấu hình của widget (chọn nhóm "Shortcode Widget")</p>'; echo '</fieldset></div>'; }
/** * register widget fields feature * @param $widget: widget instance * @param $feature: give feature name by hoangweb */ public static function register_widget_feature($widget, $feature) { if (!isset(self::$widgets_fields[$feature])) { self::$widgets_fields[$feature] = array(); } $register_features = HW_AWC_WidgetFeatures::get_all_features(); //get all register features //load widget feature from enternal $class = self::get_feature_class_byName($feature); //'AWC_WidgetFeature_' . $feature; if (class_exists($class)) { $class = new $class($widget, array()); $class->feature_name = $feature; //widget feature identifier $class->feature_url = HW_AWC_WidgetFeatures_URL . '/' . $feature; $class->feature_path = HW_AWC_WidgetFeatures_PATH . '/' . $feature; $class->option('feature_alias', $register_features[$feature]); //set static options $class->_static_option('feature_name', $class->feature_name); $class->_static_option('feature_url', $class->feature_url); $class->_static_option('feature_path', $class->feature_path); $class->feature_loaded(); //add widget feature to manager HW_Widget_Features_Setting::add_widget_feature($feature, $class); self::_setup_actions($class); } //prevent to duplicate widgets in one feature ($widget->id_base) self::$widgets_fields[$feature][$widget->id_base . '-' . $widget->number] = array('widget' => $widget, 'class' => $class); }
/** * add module tab menu * @param $module * @param $menu */ public static function add_feature_tab_submenu_page($feature, $menu) { //valid if (!HW_AWC_WidgetFeatures::get_features_data($feature)) { return; } //module not found if (!isset(self::$menus[$feature]['features_tab_menus'])) { self::$menus[$feature]['features_tab_menus'] = array(); } if (!isset(self::$menus[$feature]['features_tab_menus'][$feature])) { self::$menus[$feature]['features_tab_menus'][$feature] = $menu; } }
/** * custom widget callback */ public function _hw_custom_widget_callback_function() { global $wp_registered_widgets; $original_callback_params = func_get_args(); $widget_id = $original_callback_params[0]['widget_id']; $widget_obj = $wp_registered_widgets[$widget_id]; $original_callback = $widget_obj['original_callback']; $wp_registered_widgets[$widget_id]['callback'] = $original_callback; //widget object $widget = $widget_obj['original_callback'][0]; $widget_opt = get_option($widget_obj['original_callback'][0]->option_name); $widget_num = $widget_obj['params'][0]['number']; $instance = $widget_opt[$widget_num]; //get current widget instance $widget_id_base = $wp_registered_widgets[$widget_id]['callback'][0]->id_base; //do widget features #$features = array('fixed_widget'); /*$feature = HW_AWC::get_widget_feature($widget, 'fancybox'); if($feature && HW_AWC::check_widget_feature($widget, 'fancybox') && $feature->is_active($instance) ) { if(method_exists($feature, 'do_widget_feature_frontend')) { $feature->do_widget_feature_frontend($widget, $instance); } }*/ $all_features = HW_AWC_WidgetFeatures::get_all_features(); $widgets_fields = HW_AWC_WidgetFeatures::get_features_data(); foreach ($all_features as $name => $text) { if (isset($widgets_fields[$name]) && is_array($widgets_fields[$name])) { foreach ($widgets_fields[$name] as $widg) { if ($widget == $widg['widget'] || $widg['widget']->id_base == $widget->id_base && $widg['widget']->number == $widget->number) { $feature = $widg['class']; $active = true; if (method_exists($feature, 'is_active')) { //check active widget feature $active = $feature->is_active($instance); } if ($active && method_exists($feature, 'do_widget_feature_frontend')) { $feature->do_widget_feature_frontend($widget, $instance); } } } } } if (is_callable($original_callback)) { ob_start(); call_user_func_array($original_callback, $original_callback_params); $widget_output = ob_get_clean(); echo apply_filters('hw_widget_output', $widget_output, $widget_id_base, $widget_id); } }
/** * @hook hw_sidebars_widgets * @param $sidebars */ public static function _sidebars_widgets($sidebars) { if (is_admin()) { return $sidebars; } global $wp_registered_widgets; foreach ($sidebars as $s => $sidebar) { if ($s == 'wp_inactive_widgets' || strpos($s, 'orphaned_widgets') === 0 || empty($sidebar)) { continue; } foreach ($sidebar as $w => $widget) { // $widget is the id of the widget if (!isset($wp_registered_widgets[$widget])) { continue; } if (isset(self::$checked[$widget])) { $show = self::$checked[$widget]; } else { $widget_info = HW_AWC::get_widget_data($widget); $opts = $wp_registered_widgets[$widget]; $widget_obj = isset($widget_info['widget']) ? $widget_info['widget'] : null; $id_base = isset($widget_info['id_base']) ? $widget_info['id_base'] : ''; #$id_base = is_array( $opts['callback'] ) ? $opts['callback'][0]->id_base : $opts['callback']; if (!$id_base) { continue; } $feature = HW_AWC::get_widget_feature($widget, self::_static_option('feature_name')); # if (!$feature || HW_AWC_WidgetFeatures::check_widget_feature($widget, self::_static_option('feature_name') && !$feature->is_active())) { continue; } #$instance = get_option( 'widget_' . $id_base ); $instance = $widget_info['instance']; if (!$instance || !is_array($instance)) { continue; } //from 'display widgets' plugin if (isset($instance['_multiwidget']) && $instance['_multiwidget']) { $number = $opts['params'][0]['number']; if (!isset($instance[$number])) { continue; } $instance = $instance[$number]; unset($number); } unset($opts); $show = self::show_widget($feature, $instance); self::$checked[$widget] = $show ? true : false; } if (!$show) { unset($sidebars[$s][$w]); #$this->hide_list[] = "['$s'][$w]"; } unset($widget); } unset($sidebar); } return $sidebars; }