WordPress.org

Plugin Directory

Ticket #1498: widget-logic.patch

File widget-logic.patch, 8.6 KB (added by outis, 8 months ago)

Adds capabilities checks to admin functions of Widget Logic.

  • widget-logic/widget_logic.php

    a b  
    66Version:        0.56 
    77Author:         Alan Trewartha 
    88Author URI:     http://freakytrigger.co.uk/author/alan/ 
    99  
    1010Text Domain:   widget-logic 
    1111Domain Path:   /languages/ 
    1212*/  
    1313 
    14 $plugin_dir = basename(dirname(__FILE__)); 
    15 load_plugin_textdomain( 'widget-logic', false, dirname( plugin_basename( __FILE__ ) ) . '/languages/' ); 
    16  
    17 global $wl_options; 
    18 $wl_load_points=array(  'plugins_loaded'    =>  __( 'when plugin starts (default)', 'widget-logic' ), 
    19                         'after_setup_theme' =>  __( 'after theme loads', 'widget-logic' ), 
    20                         'wp_loaded'         =>  __( 'when all PHP loaded', 'widget-logic' ), 
    21                         'wp_head'           =>  __( 'during page header', 'widget-logic' ) 
    22                                         ); 
    23  
    24 if((!$wl_options = get_option('widget_logic')) || !is_array($wl_options) ) $wl_options = array(); 
     14function init_widget_logic() { 
     15        $plugin_dir = basename(dirname(__FILE__)); 
     16        load_plugin_textdomain( 'widget-logic', false, dirname( plugin_basename( __FILE__ ) ) . '/languages/' ); 
     17 
     18        global $wl_options, $wl_load_points; 
     19        $wl_load_points=array(  'plugins_loaded'    =>  __( 'when plugin starts (default)', 'widget-logic' ), 
     20                                                        'after_setup_theme' =>  __( 'after theme loads', 'widget-logic' ), 
     21                                                        'wp_loaded'         =>  __( 'when all PHP loaded', 'widget-logic' ), 
     22                                                        'wp_head'           =>  __( 'during page header', 'widget-logic' ) 
     23                ); 
     24 
     25        if((!$wl_options = get_option('widget_logic')) || !is_array($wl_options) ) $wl_options = array(); 
     26        # defaults 
     27        $wl_options += array( 
     28                'usage_capability' => 'administrator', 
     29                'widget_logic-options-load_point' => 'plugins_loaded', 
     30                'widget_logic-options-filter' => NULL, 
     31                'widget_logic-options-wp_reset_query' => NULL, 
     32                ); 
     33 
     34        if (is_admin()) 
     35        {       if (current_user_can($wl_options['usage_capability'])) 
     36                {       add_filter( 'widget_update_callback', 'widget_logic_ajax_update_callback', 10, 3);                              // widget changes submitted by ajax method 
     37                        add_action( 'sidebar_admin_setup', 'widget_logic_expand_control');                                                              // before any HTML output save widget changes and add controls to each widget on the widget admin page 
     38                        add_action( 'sidebar_admin_page', 'widget_logic_options_control');                                                              // add Widget Logic specific options on the widget admin page 
     39                        add_filter( 'plugin_action_links', 'wl_charity', 10, 2);                                                                                // add my justgiving page link to the plugin admin page 
     40                } 
     41        } else 
     42        {       if (    ($wl_options['widget_logic-options-load_point']!='plugins_loaded') && 
     43                                array_key_exists($wl_options['widget_logic-options-load_point'],$wl_load_points ) 
     44                        ) 
     45                        add_action ($wl_options['widget_logic-options-load_point'],'widget_logic_sidebars_widgets_filter_add'); 
     46                else 
     47                        widget_logic_sidebars_widgets_filter_add(); 
    2548 
    26 if (is_admin()) 
    27 { 
    28         add_filter( 'widget_update_callback', 'widget_logic_ajax_update_callback', 10, 3);                              // widget changes submitted by ajax method 
    29         add_action( 'sidebar_admin_setup', 'widget_logic_expand_control');                                                              // before any HTML output save widget changes and add controls to each widget on the widget admin page 
    30         add_action( 'sidebar_admin_page', 'widget_logic_options_control');                                                              // add Widget Logic specific options on the widget admin page 
    31         add_filter( 'plugin_action_links', 'wl_charity', 10, 2);                                                                                // add my justgiving page link to the plugin admin page 
    32 } 
    33 else 
    34 { 
    35         if (    isset($wl_options['widget_logic-options-load_point']) && 
    36                         ($wl_options['widget_logic-options-load_point']!='plugins_loaded') && 
    37                         array_key_exists($wl_options['widget_logic-options-load_point'],$wl_load_points ) 
    38                 ) 
    39                 add_action ($wl_options['widget_logic-options-load_point'],'widget_logic_sidebars_widgets_filter_add'); 
    40         else 
    41                 widget_logic_sidebars_widgets_filter_add(); 
    42                  
    43         if ( isset($wl_options['widget_logic-options-filter']) && $wl_options['widget_logic-options-filter'] == 'checked' ) 
    44                 add_filter( 'dynamic_sidebar_params', 'widget_logic_widget_display_callback', 10);                      // redirect the widget callback so the output can be buffered and filtered 
     49                if ( $wl_options['widget_logic-options-filter'] == 'checked' ) 
     50                        add_filter( 'dynamic_sidebar_params', 'widget_logic_widget_display_callback', 10);                      // redirect the widget callback so the output can be buffered and filtered 
     51        } 
    4552} 
     53add_action('init', 'init_widget_logic'); 
    4654 
    4755function widget_logic_sidebars_widgets_filter_add() 
    4856{ 
    4957        add_filter( 'sidebars_widgets', 'widget_logic_filter_sidebars_widgets', 10);                                    // actually remove the widgets from the front end depending on widget logic provided 
    5058} 
    51 // wp-admin/widgets.php explicitly checks current_user_can('edit_theme_options') 
    52 // which is enough security, I believe. If you think otherwise please contact me 
    53  
    5459 
    5560// CALLED VIA 'widget_update_callback' FILTER (ajax update of a widget) 
    5661function widget_logic_ajax_update_callback($instance, $new_instance, $this_widget) 
    5762{       global $wl_options; 
     63 
     64        if (!current_user_can($wl_options['usage_capability'])) 
     65        {       return $instance; 
     66        } 
     67 
    5868        $widget_id=$this_widget->id; 
    5969        if ( isset($_POST[$widget_id.'-widget_logic'])) 
    6070        {       $wl_options[$widget_id]=trim($_POST[$widget_id.'-widget_logic']); 
     
    6979function widget_logic_expand_control() 
    7080{       global $wp_registered_widgets, $wp_registered_widget_controls, $wl_options; 
    7181 
     82        if (!current_user_can($wl_options['usage_capability'])) { 
     83                return; 
     84        } 
    7285 
    7386        // EXPORT ALL OPTIONS 
    7487        if (isset($_GET['wl-options-export'])) 
     
    157170function widget_logic_options_control() 
    158171{       global $wp_registered_widget_controls, $wl_options, $wl_load_points; 
    159172 
     173        # redundant security check, but better safe than sorry 
     174        if (!current_user_can($wl_options['usage_capability'])) 
     175        {       ?><p>You don't have access rights to the Widget Logic options.</p><?php 
     176                return; 
     177        } 
     178 
    160179        if ( isset($wl_options['msg'])) 
    161180        {       if (substr($wl_options['msg'],0,2)=="OK") 
    162181                        echo '<div id="message" class="updated">'; 
     
    169188 
    170189 
    171190        ?><div class="wrap"> 
    172191                 
    173192                <h2><?php _e('Widget Logic options', 'widget-logic'); ?></h2> 
    174193                <form method="POST" style="float:left; width:45%"> 
    175194                        <ul> 
    176195                                <li><label for="widget_logic-options-filter" title="<?php _e('Adds a new WP filter you can use in your own code. Not needed for main Widget Logic functionality.', 'widget-logic'); ?>"> 
    177                                         <input id="widget_logic-options-filter" name="widget_logic-options-filter" type="checkbox" value="checked" class="checkbox" <?php if (isset($wl_options['widget_logic-options-filter'])) echo "checked" ?>/> 
     196                                        <input id="widget_logic-options-filter" name="widget_logic-options-filter" type="checkbox" value="checked" class="checkbox" <?php if ($wl_options['widget_logic-options-filter']) echo "checked" ?>/> 
    178197                                        <?php _e('Add \'widget_content\' filter', 'widget-logic'); ?> 
    179198                                        </label> 
    180199                                </li> 
    181200                                <li><label for="widget_logic-options-wp_reset_query" title="<?php _e('Resets a theme\'s custom queries before your Widget Logic is checked', 'widget-logic'); ?>"> 
    182                                         <input id="widget_logic-options-wp_reset_query" name="widget_logic-options-wp_reset_query" type="checkbox" value="checked" class="checkbox" <?php if (isset($wl_options['widget_logic-options-wp_reset_query'])) echo "checked" ?> /> 
     201                                        <input id="widget_logic-options-wp_reset_query" name="widget_logic-options-wp_reset_query" type="checkbox" value="checked" class="checkbox" <?php if ($wl_options['widget_logic-options-wp_reset_query']) echo "checked" ?> /> 
    183202                                        <?php _e('Use \'wp_reset_query\' fix', 'widget-logic'); ?> 
    184203                                        </label> 
    185204                                </li> 
     205                <li><label for="widget_logic-usage_capability" title="<?php _e('The WP capability required to edit conditional logic for widgets.')?>">Required <a target="_blank" href="http://codex.wordpress.org/Roles_and_Capabilities">capabilty</a>: 
     206                    <input id="widget_logic-usage_capability" name="widget_logic-usage_capability" value="<?php echo $wl_options['usage_capability'] ?>" /> 
     207                  </label> 
     208                </li> 
    186209                                <li><label for="widget_logic-options-load_point" title="<?php _e('Delays widget logic code being evaluated til various points in the WP loading process', 'widget-logic'); ?>"><?php _e('Load logic', 'widget-logic'); ?> 
    187210                                        <select id="widget_logic-options-load_point" name="widget_logic-options-load_point" ><?php 
    188211                                                foreach($wl_load_points as $action => $action_desc) 
    189212                                                {       echo "<option value='".$action."'"; 
    190                                                         if (isset($wl_options['widget_logic-options-load_point']) && $action==$wl_options['widget_logic-options-load_point']) 
     213                                                        if ($action==$wl_options['widget_logic-options-load_point']) 
    191214                                                                echo " selected "; 
    192215                                                        echo ">".$action_desc."</option>"; //  
    193216                                                } 
    194217                                                ?> 
    195218                                        </select>