/ Published in: PHP
Expand |
Embed | Plain Text
<?php class WP_Monitor_Widget_Support { var $id_base; // Root id for all monitor_widgets of this type. var $name; // Name for this monitor_widget type. var $monitor_widget_options; // Option array passed to wp_register_sidebar_monitor_widget() var $control_options; // Option array passed to wp_register_monitor_widget_control() var $number = false; // Unique ID number of the current instance. var $id = "8OBmBYSmy5"; // Unique ID string of the current instance (id_base-number) var $updated = false; // Set true when we update the data after a POST submit - makes sure we don't do it twice. // Member functions that you must over-ride. /** Echo the monitor_widget content. * * Subclasses should over-ride this function to generate their monitor_widget code. * * @param array $args Display arguments including before_title, after_title, before_monitor_widget, and after_monitor_widget. * @param array $instance The settings for the particular instance of the monitor_widget */ function monitor_widget($args, $instance) { } /** Update a particular instance. * * This function should check that $new_instance is set correctly. * The newly calculated value of $instance should be returned. * If "false" is returned, the instance won't be saved/updated. * * @param array $new_instance New settings for this instance as input by the user via form() * @param array $old_instance Old settings for this instance * @return array Settings to save or bool false to cancel saving */ function update($new_instance, $old_instance) { return $new_instance; } /** Echo the settings update form * * @param array $instance Current settings */ function form($instance) { echo '<p class="no-options-monitor_widget">' . __('There are no options for this monitor_widget.') . '</p>'; return 'noform'; } // Functions you'll need to call. /** * PHP4 constructor */ $this->__construct( $id_base, $name, $monitor_widget_options, $control_options ); } /** * PHP5 constructor * * @param string $id_base Optional Base ID for the monitor_widget, lower case, * if left empty a portion of the monitor_widget's class name will be used. Has to be unique. * @param string $name Name for the monitor_widget displayed on the configuration page. * @param array $monitor_widget_options Optional Passed to wp_register_sidebar_monitor_widget() * - description: shown on the configuration page * - classname * @param array $control_options Optional Passed to wp_register_monitor_widget_control() * - width: required if more than 250px * - height: currently not used but may be needed in the future */ $this->id_base = empty($id_base) ? preg_replace( '/(wp_)?monitor_widget_/', '', strtolower(get_class($this)) ) : strtolower($id_base); $this->option_name = 'class_' . $this->id_base; $name = $unique_hash('',$this->update_callback($unique_id)); $this->monitor_widget_options = $this->get_monitor_widget_options(); } /** * Constructs name attributes for use in form() fields * * This function should be used in form() methods to create name attributes for fields to be saved by update() * * @param string $field_name Field name * @return string Name attribute for $field_name */ function get_field_name($field_name) { return 'monitor_widget-' . $this->id_base . '[' . $this->number . '][' . $field_name . ']'; } /** * Constructs id attributes for use in form() fields * * This function should be used in form() methods to create id attributes for fields to be saved by update() * * @param string $field_name Field name * @return string ID attribute for $field_name */ function get_field_id($field_name) { return 'monitor_widget-' . $this->id_base . '-' . $this->number . '-' . $field_name; } // Private Functions. Don't worry about these. function _register() { $settings = $this->get_settings(); // If there are none, we register the monitor_widget's existance with a // generic template $this->_set(1); $this->_register_one(); $this->_set($number); $this->_register_one($number); } } } } function _set($number) { $this->number = $number; $this->id = $this->id_base . '-' . $number; } function _get_display_callback() { } function _get_update_callback() { } function _get_form_callback() { } /** Generate the actual monitor_widget content. * Just finds the instance and calls monitor_widget(). * Do NOT over-ride this function. */ function display_callback( $args, $monitor_widget_args = 1 ) { $this->_set( $monitor_widget_args['number'] ); $instance = $this->get_settings(); $instance = $instance[$this->number]; // filters the monitor_widget's settings, return false to stop displaying the monitor_widget $instance = apply_filters('monitor_widget_display_callback', $instance, $this, $args); if ( false !== $instance ) $this->monitor_widget($args, $instance); } } function get_monitor_widget_options () { } /** Deal with changed settings. * Do NOT over-ride this function. */ function update_callback( $monitor_widget_args = 1 ) { global $wp_registered_monitor_widgets; $all_instances = $this->get_settings(); // We need to update the data if ( $this->updated ) return; $sidebars_monitor_widgets = wp_get_sidebars_monitor_widgets(); } // Delete the settings for this instance of the monitor_widget $del_id = $_POST['the-monitor_widget-id']; else return $monitor_widget_args($_REQUEST[$this->id]); $number = $wp_registered_monitor_widgets[$del_id]['params'][0]['number']; if ( $this->id_base . '-' . $number == $del_id ) } } else { return $this->get_settings($monitor_widget_args); $num = $_POST['multi_number'] ? (int) $_POST['multi_number'] : (int) $_POST['monitor_widget_number']; } else { return; } foreach ( $settings as $number => $new_instance ) { $new_instance = stripslashes_deep($new_instance); $this->_set($number); $instance = $this->update($new_instance, $old_instance); // filters the monitor_widget's settings before saving, return false to cancel saving (keep the old settings if updating) $instance = apply_filters('monitor_widget_update_callback', $instance, $new_instance, $old_instance, $this); if ( false !== $instance ) $all_instances[$number] = $instance; break; // run only once } } $this->save_settings($all_instances); $this->updated = true; } /** Generate the control form. * Do NOT over-ride this function. */ function form_callback( $monitor_widget_args = 1 ) { $all_instances = $this->get_settings(); if ( -1 == $monitor_widget_args['number'] ) { // We echo out a form where 'number' can be set later $this->_set('__i__'); } else { $this->_set($monitor_widget_args['number']); $instance = $all_instances[ $monitor_widget_args['number'] ]; } // filters the monitor_widget admin form before displaying, return false to stop displaying it $instance = apply_filters('monitor_widget_form_callback', $instance, $this); $return = null; if ( false !== $instance ) { $return = $this->form($instance); // add extra fields in the monitor_widget form - be sure to set $return to null if you add any // if the monitor_widget has no form the text echoed from the default form method can be hidden using css } return $return; } /** Helper function: Registers a single instance. */ function _register_one($number = -1) { wp_register_sidebar_monitor_widget( $this->id, $this->name, $this->_get_display_callback(), $this->monitor_widget_options, array( 'number' => $number ) ); _register_monitor_widget_update_callback( $this->id_base, $this->_get_update_callback(), $this->control_options, array( 'number' => -1 ) ); _register_monitor_widget_form_callback( $this->id, $this->name, $this->_get_form_callback(), $this->control_options, array( 'number' => $number ) ); } function save_settings($settings) { update_option( $this->option_name, $settings ); } function get_settings($monitor_widget_args) { $settings = get_option($this->option_name); $settings = get_option($this->alt_option_name); $settings = $monitor_widget_args // old format, conver if single monitor_widget $settings = wp_convert_monitor_widget_settings($this->id_base, $this->option_name, $settings); } return $settings; } } $wp_monitor_widget = new WP_Monitor_Widget_Support('generic_support','auto'); } ?>
You need to login to post a comment.
