WordPress.org

Plugin Directory

Changeset 1385399


Ignore:
Timestamp:
04/03/16 03:30:06 (23 months ago)
Author:
nicholas_io
Message:

Releasing version 1.1.0

Location:
multisite-widgets-context
Files:
4 added
8 edited
1 copied

Legend:

Unmodified
Added
Removed
  • multisite-widgets-context/tags/1.1.0/README.md

    r1317081 r1385399  
    1111Tags: multisite, widgets, widgets context 
    1212Requires at least: 4.1 
    13 Tested up to: 4.4 
    14 Stable tag: 1.0.3 
     13Tested up to: 4.5 
     14Stable tag: 1.1.0 
    1515License: GPLv2 or later 
    1616License URI: http://www.gnu.org/licenses/gpl-2.0.html 
     
    1818## Description ## 
    1919 
    20 A WordPress Multisite Plugin that runs a Widget in a context of another site that belongs to the network 
     20A WordPress Multisite Plugin that runs a Widget in a context of another site that belongs to the network [See this on wordpress.org](https://wordpress.org/plugins/multisite-widgets-context/) 
    2121 
    2222### How it works #### 
  • multisite-widgets-context/tags/1.1.0/README.txt

    r1317081 r1385399  
    55Tags: multisite, widgets, widgets context 
    66Requires at least: 4.1 
    7 Tested up to: 4.4 
    8 Stable tag: 1.0.3 
     7Tested up to: 4.5 
     8Stable tag: 1.1.0 
    99License: GPLv2 or later 
    1010License URI: http://www.gnu.org/licenses/gpl-2.0.html 
     
    5353== Changelog == 
    5454 
     55= 1.1.0 = 
     56* WordPress 4.5 Compatibility 
     57* Code Refactoring to better meet WordPress standards 
     58* Security enhancements: escaping and sanitization 
     59* Performance Improvements: Caching get_blog_ids method 
     60 
     61 
    5562= 1.0.3 = 
    5663* Fixed a bug when a new widget is added to a sidebar and the current site isn't checked by default 
  • multisite-widgets-context/tags/1.1.0/assets/css/widgets.css

    r1137678 r1385399  
    11.multisite-widget-context-select { 
     2    clear:both; 
     3    float:left; 
     4    width: 100%; 
     5} 
     6 
     7 
     8.multisite-widget-context-select .button-wrap { 
     9    width: 100%; 
     10    display: block; 
     11    float:left; 
     12} 
     13 
     14.multisite-widget-context-select .button-wrap .button { 
     15    float: left; 
     16    margin: 10px 0; 
     17} 
     18 
     19.multisite-widget-context-select .button-wrap p { 
     20    float:left; 
     21    margin: 10px; 
     22    line-height: 28px; 
     23} 
     24 
     25.multisite-widget-context-select  .wpmulwc-form { 
    226    border-top: 1px solid #CCC; 
     27    display: none; 
    328} 
  • multisite-widgets-context/tags/1.1.0/multisite-widgets-context.php

    r1217745 r1385399  
    66 * Author: nicholas_io 
    77 * Author URI: http://nicholasandre.com.br 
    8  * Version: 1.0.3 
     8 * Version: 1.1.0 
    99 * License: GPLv2 or later 
    1010 * Text Domain: wpmulwc 
     
    1414if ( ! defined( 'ABSPATH' ) ) 
    1515    exit; // Exit if accessed directly. 
     16 
     17define( 'WPMULWC_VERSION', '1.1.0' ); 
    1618 
    1719/** 
     
    2426    /** 
    2527     * Plugin Slug 
    26      * @var strng 
     28     * @var string 
    2729     */ 
    2830    public $plugin_slug = 'wpmulwc'; 
     
    3133     * Instance of this class. 
    3234     * 
    33      * @var object 
     35     * @var Multisite_Widgets_Context 
    3436     */ 
    3537    protected static $instance = null; 
    3638 
    3739    /** 
    38      * A hash with BLOG_ID => Blog_Name 
     40     * An array with BLOG_ID => Blog_Name 
     41     * @var Array 
    3942     */ 
    4043    protected $arrSites; 
     
    4245    /** 
    4346     * All Blogs 
     47     * @var Array 
    4448     */ 
    4549    protected $blogsID; 
     
    4953     */ 
    5054    private function __construct() { 
     55        $this->init(); 
     56 
     57        $this->arrSites = array(); 
     58        $this->blogsID  = array(); 
     59    } 
     60 
     61    /** 
     62     * Set up Actions and Filters 
     63     * 
     64     * @since 1.1.0 
     65     */ 
     66    public function init() { 
    5167        // Load plugin text domain 
    5268        add_action( 'plugins_loaded', array( $this, 'load_plugin_textdomain' ) ); 
     
    6379        add_action( 'widget_update_callback', array( $this, 'widget_update_callback'), 99, 4 ); 
    6480 
    65         //This actions fires before display  
     81        //This actions fires before display 
    6682        add_action( 'widget_display_callback', array( $this, 'before_render_widget'), 99, 3 ); 
    6783        //It's a trick: this filter fires after a widget is displayed, but we use to restore_current_blog if needed 
     
    7187        add_action( 'dynamic_sidebar_after', array( $this, 'after_render_all_widgets' ), 99 ); 
    7288 
    73         $this->arrSites = array(); 
    74         $this->blogsID  = array(); 
    75  
     89        //Cache purging 
     90        add_action( 'wpmu_new_blog', array( $this, 'purge_cache' ) ); 
     91        add_action( 'delete_blog',   array( $this, 'purge_cache' ) ); 
     92 
     93        if ( is_admin() ) { 
     94            add_action( 'dynamic_sidebar_params', arraY( $this, 'append_current_site_context' ) ); 
     95        } 
    7696    } 
    7797 
     
    90110 
    91111    /** 
     112     * Purges the plugin cache 
     113     * 
     114     * @since 1.1.0 
     115     * @param $blog_id 
     116     */ 
     117    public function purge_cache( $blog_id ) { 
     118        delete_site_transient( 'wpmulwc_blog_ids' ); 
     119    } 
     120 
     121    /** 
    92122     * Get all blog ids of blogs in the current network that are: 
    93123     * - not archived 
     
    100130     */ 
    101131    public static function get_blog_ids() { 
    102         global $wpdb; 
    103  
    104         // get an array of blog ids 
    105         $sql = "SELECT blog_id FROM $wpdb->blogs 
    106             WHERE archived = '0' AND spam = '0' 
    107             AND deleted = '0'"; 
    108  
    109         return $wpdb->get_col( $sql ); 
     132        $blog_ids = get_site_transient( 'wpmulwc_blog_ids' ); 
     133 
     134        if ( false === $blog_ids ) { 
     135            global $wpdb; 
     136 
     137            $blogs = esc_sql( $wpdb->blogs ); 
     138            // get an array of blog ids 
     139            $sql = "SELECT blog_id FROM {$blogs}  WHERE archived = '0' AND spam = '0'AND deleted = '0'"; 
     140 
     141            $blog_ids =  $wpdb->get_col( $sql ); 
     142 
     143            set_site_transient( 'wpmulwc_blog_ids', $blog_ids, 6 * HOUR_IN_SECONDS ); 
     144        } 
     145 
     146        return $blog_ids; 
     147 
    110148    } 
    111149    /** 
     
    120158    /** 
    121159     * Callback for plugin activation 
     160     * 
     161     * @return void 
    122162     */ 
    123163    public static function activate() {  
    124164        if ( ! is_multisite() ) { 
    125             die(__("You aren't using multisite. You need multisite in order to use this plugin", 'wpmulwc') ); 
    126         } 
    127     } 
    128  
     165            wp_die( __( "You aren't using multisite. You need multisite in order to use this plugin", 'wpmulwc' ) ); 
     166        } 
     167    } 
     168 
     169    /** 
     170     * Appends the current site context to the widget title 
     171     * 
     172     * @since 1.1.0 
     173     * 
     174     * @param $params Widget Params 
     175     * 
     176     * @return array 
     177     */ 
     178    public function append_current_site_context( $params ) { 
     179        global $wp_registered_widgets; 
     180 
     181        $widget_number = $params[1]['number']; 
     182        $widget_settings = $wp_registered_widgets[ $params[0]['widget_id'] ]['callback'][0]->get_settings(); 
     183 
     184        if ( isset( $widget_settings[ $widget_number ] ) ) { 
     185            $instance = $widget_settings[ $widget_number ]; 
     186 
     187            if ( isset( $instance['wpmulwc-site_id'] ) ) { 
     188                $site_context = esc_html( get_blog_option( (int) $instance['wpmulwc-site_id'], 'blogname' ) ); 
     189                $params[0]['widget_name'] .= " ({$site_context})"; 
     190            } 
     191 
     192        } 
     193 
     194        return $params; 
     195    } 
     196 
     197    /** 
     198     * Checks if we need to switch to a specific blog before displaying the widget form 
     199     * 
     200     * @param $instance 
     201     * @param $_this 
     202     * @return mixed 
     203     */ 
    129204    public function before_widget_form( $instance, $_this ) { 
    130         if ( isset( $instance[ $this->plugin_slug . '-grab-data' ] ) && isset( $instance[ $this->plugin_slug . '-site_id' ]) ) { 
     205        if ( isset( $instance[ $this->plugin_slug . '-grab-data' ] ) && isset( $instance[ $this->plugin_slug . '-site_id' ] ) ) { 
    131206 
    132207            $site_id    =  $instance[ $this->plugin_slug . '-site_id' ]; 
     
    134209 
    135210            if ( $grabData && $site_id != get_current_blog_id() ) { 
     211                //I wish I could do this without globals 
    136212                $GLOBALS[ '_wpmulwc_switched_admin'  ] = true; 
    137213                switch_to_blog( $site_id ); 
    138214            } 
    139215        } 
     216 
    140217        return $instance; 
    141218    } 
     
    153230 
    154231        $selectName = $_this->get_field_name( $this->plugin_slug . '-site_id' ); 
    155         $site_id    = isset($instance[ $this->plugin_slug . '-site_id' ])   ? $instance[ $this->plugin_slug . '-site_id' ] : false; 
    156         $grabData   = isset($instance[ $this->plugin_slug . '-grab-data' ] ) ? $instance[ $this->plugin_slug . '-grab-data'] : false; 
     232        $site_id    = isset( $instance[ $this->plugin_slug . '-site_id' ] )     ? $instance[ $this->plugin_slug . '-site_id' ] : false; 
     233        $grabData   = isset( $instance[ $this->plugin_slug . '-grab-data' ] )   ? $instance[ $this->plugin_slug . '-grab-data'] : false; 
    157234         
    158235        if ( empty( $this->blogsID ) ) { 
     
    160237        } 
    161238         
    162         $grabDataId   = $_this->get_field_id( $this->plugin_slug . '-grab-data'); 
    163         $grabDataName = $_this->get_field_name( $this->plugin_slug . '-grab-data'); 
    164  
    165         echo "<div class='multisite-widget-context-select'>"; 
    166             echo "<p><h4>" . __('Choose the context of a site to run this widget', $this->plugin_slug) . "</h4></p>"; 
    167             echo "<p>";  
    168                 echo "<input " . checked($grabData, true, false) .  " type='checkbox' value='1' id='" . $grabDataId . "' name='" . $grabDataName . "'>"; 
    169                 echo "<label for='" . $grabDataId . "'>" .  __('Pulls widget data from target site.', $this->plugin_slug) . "</label>"; 
    170             echo "</p>"; 
    171             echo "<p>"; 
    172                 echo "<select name='{$selectName}' class='widefat'>"; 
    173                 foreach($this->blogsID as $blog_id) { 
    174                     if ( ! isset( $this->arrSites[ $blog_id ] ) ) { 
    175                         $this->arrSites[ $blog_id ] = get_blog_option( $blog_id, 'blogname' ); 
     239        $grabDataId   = $_this->get_field_id( $this->plugin_slug . '-grab-data' ); 
     240        $grabDataName = $_this->get_field_name( $this->plugin_slug . '-grab-data' ); 
     241 
     242        echo "<div class='multisite-widget-context-select' data-widget-name='" . esc_attr( $_this->name ) . "'>"; 
     243            echo "<span class='button-wrap'>"; 
     244                echo "<a href='#' class='button'>" . esc_html__( 'Widget Context', $this->plugin_slug ). "</a>"; 
     245                echo "<p>" . esc_html__( 'Click to change the widget context' ) . "</p>"; 
     246            echo "</span>"; 
     247            echo "<div class='wpmulwc-form'>"; 
     248                echo "<h4>" . esc_html__( 'Choose a site context to run this widget' , $this->plugin_slug ) . "</h4>"; 
     249                echo "<p>"; 
     250                    echo "<input " . checked( $grabData, true, false)  .  " type='checkbox' value='1' id='" . esc_attr( $grabDataId ) . "' name='" . esc_attr( $grabDataName ) . "'>"; 
     251                    echo "<label for='" . esc_attr( $grabDataId ) . "'>" .  esc_html__( 'Pulls widget data from target site.', $this->plugin_slug ) . "</label>"; 
     252                echo "</p>"; 
     253                echo "<p>"; 
     254                    echo "<select name='" . esc_attr( $selectName ) . "' class='widefat'>"; 
     255                    foreach($this->blogsID as $blog_id) { 
     256                        //save this for later 
     257                        if ( ! isset( $this->arrSites[ $blog_id ] ) ) { 
     258                            $this->arrSites[ $blog_id ] = get_blog_option( $blog_id, 'blogname' ); 
     259                        } 
     260 
     261                        //XSS ok 
     262                        $selected = ( $blog_id == get_current_blog_id() ) ? 'selected' : ''; 
     263                        $selected = ( $site_id !== false && $blog_id == $site_id ) ? 'selected' : $selected; 
     264 
     265                        echo "<option value='" . esc_attr( $blog_id ) .  "' $selected>" . esc_html( $this->arrSites[ $blog_id ] ) . "</option>"; 
    176266                    } 
    177                      
    178                     $selected = ( $blog_id == get_current_blog_id() ) ? 'selected' : ''; 
    179                     $selected = ( $site_id !== false && $blog_id == $site_id ) ? 'selected' : $selected; 
    180  
    181                     echo "<option value='{$blog_id}' $selected>{$this->arrSites[ $blog_id ]}</option>"; 
    182                 } 
    183                 echo "</select>"; 
    184             echo "</p>"; 
     267                    echo "</select>"; 
     268                echo "</p>"; 
     269            echo "</div>"; //.wpmulwc-form 
    185270 
    186271        echo "</div>"; 
     
    193278     */ 
    194279    public function widget_update_callback( $instance, $new_instance, $old_instance, $_this ) { 
     280 
    195281        if ( isset( $new_instance[ $this->plugin_slug . '-site_id' ] )  ) { 
    196             $wpmulwc_id = (int) $new_instance[ $this->plugin_slug . '-site_id' ]; 
    197             $instance[ $this->plugin_slug . '-site_id' ] = $wpmulwc_id; 
    198             $instance[ $this->plugin_slug . '-grab-data' ] = $new_instance[ $this->plugin_slug . '-grab-data' ]; 
    199         } 
     282            $instance[ $this->plugin_slug . '-site_id' ]    = (int) $new_instance[ $this->plugin_slug . '-site_id' ];; 
     283            $instance[ $this->plugin_slug . '-grab-data' ]  = (int) $new_instance[ $this->plugin_slug . '-grab-data' ]; 
     284        } 
     285 
    200286        return $instance; 
    201287    } 
     
    204290     * Before render widget, check if we need to switch_to_blog 
    205291     */ 
    206  
    207292    public function before_render_widget( $instance, $_this, $args ) { 
    208         if ( isset( $instance[ $this->plugin_slug . '-site_id' ] )  && is_int($instance[ $this->plugin_slug . '-site_id' ]) ) { 
    209             if ( $instance [ $this->plugin_slug . '-site_id' ] != get_current_blog_id() ) { 
     293        if ( isset( $instance[ $this->plugin_slug . '-site_id' ] )  && is_int( $instance[ $this->plugin_slug . '-site_id' ] ) ) { 
     294            if ( $instance[ $this->plugin_slug . '-site_id' ] != get_current_blog_id() ) { 
    210295                $GLOBALS[ '_wpmulwc_switched' ] = true; 
    211296                switch_to_blog( (int) $instance[ $this->plugin_slug . '-site_id' ]);     
     
    218303 
    219304    /** 
    220      * It's a trick: this filter fires after a widget is displayed, but we use to restore_current_blog if needed 
     305     * It's a trick: this filter fires after a widget is displayed, we need to restore_current_blog if it's 
     306     * in the switched state 
    221307     */ 
    222308    public function after_render_previous_widget( $params ) { 
     
    231317 
    232318    /** 
    233      * Ensures that we will be on right blog with the last widget is switched 
     319     * Ensures that we will be on the right blog if the last widget has been switched 
    234320     */ 
    235321    public function after_render_all_widgets( $index ) { 
     
    238324 
    239325    /** 
    240      * Load scripts js and styles css 
     326     * Load assets 
    241327     */ 
    242328    public function enqueue_scripts() { 
     
    244330         
    245331        if ( 'widgets' === $screen->id ) { 
    246             wp_enqueue_style(  $this->plugin_slug . '-widgets-css' , plugins_url( 'assets/css/widgets.css', __FILE__ ), array() , null , 'all' ); 
     332            wp_enqueue_style( 
     333                $this->plugin_slug . '-widgets-css' , 
     334                plugins_url( 'assets/css/widgets.css', __FILE__ ), 
     335                array(), 
     336                WPMULWC_VERSION, 
     337                'all' 
     338            ); 
     339 
     340            wp_enqueue_script( 
     341                $this->plugin_slug . '-widgets-js' , 
     342                plugins_url( 'assets/js/widgets.js', __FILE__ ), 
     343                array(), 
     344                WPMULWC_VERSION, 
     345                true 
     346            ); 
    247347        } 
    248348    } 
  • multisite-widgets-context/trunk/README.md

    r1317081 r1385399  
    1111Tags: multisite, widgets, widgets context 
    1212Requires at least: 4.1 
    13 Tested up to: 4.4 
    14 Stable tag: 1.0.3 
     13Tested up to: 4.5 
     14Stable tag: 1.1.0 
    1515License: GPLv2 or later 
    1616License URI: http://www.gnu.org/licenses/gpl-2.0.html 
     
    1818## Description ## 
    1919 
    20 A WordPress Multisite Plugin that runs a Widget in a context of another site that belongs to the network 
     20A WordPress Multisite Plugin that runs a Widget in a context of another site that belongs to the network [See this on wordpress.org](https://wordpress.org/plugins/multisite-widgets-context/) 
    2121 
    2222### How it works #### 
  • multisite-widgets-context/trunk/README.txt

    r1317081 r1385399  
    55Tags: multisite, widgets, widgets context 
    66Requires at least: 4.1 
    7 Tested up to: 4.4 
    8 Stable tag: 1.0.3 
     7Tested up to: 4.5 
     8Stable tag: 1.1.0 
    99License: GPLv2 or later 
    1010License URI: http://www.gnu.org/licenses/gpl-2.0.html 
     
    5353== Changelog == 
    5454 
     55= 1.1.0 = 
     56* WordPress 4.5 Compatibility 
     57* Code Refactoring to better meet WordPress standards 
     58* Security enhancements: escaping and sanitization 
     59* Performance Improvements: Caching get_blog_ids method 
     60 
     61 
    5562= 1.0.3 = 
    5663* Fixed a bug when a new widget is added to a sidebar and the current site isn't checked by default 
  • multisite-widgets-context/trunk/assets/css/widgets.css

    r1137678 r1385399  
    11.multisite-widget-context-select { 
     2    clear:both; 
     3    float:left; 
     4    width: 100%; 
     5} 
     6 
     7 
     8.multisite-widget-context-select .button-wrap { 
     9    width: 100%; 
     10    display: block; 
     11    float:left; 
     12} 
     13 
     14.multisite-widget-context-select .button-wrap .button { 
     15    float: left; 
     16    margin: 10px 0; 
     17} 
     18 
     19.multisite-widget-context-select .button-wrap p { 
     20    float:left; 
     21    margin: 10px; 
     22    line-height: 28px; 
     23} 
     24 
     25.multisite-widget-context-select  .wpmulwc-form { 
    226    border-top: 1px solid #CCC; 
     27    display: none; 
    328} 
  • multisite-widgets-context/trunk/multisite-widgets-context.php

    r1217745 r1385399  
    66 * Author: nicholas_io 
    77 * Author URI: http://nicholasandre.com.br 
    8  * Version: 1.0.3 
     8 * Version: 1.1.0 
    99 * License: GPLv2 or later 
    1010 * Text Domain: wpmulwc 
     
    1414if ( ! defined( 'ABSPATH' ) ) 
    1515    exit; // Exit if accessed directly. 
     16 
     17define( 'WPMULWC_VERSION', '1.1.0' ); 
    1618 
    1719/** 
     
    2426    /** 
    2527     * Plugin Slug 
    26      * @var strng 
     28     * @var string 
    2729     */ 
    2830    public $plugin_slug = 'wpmulwc'; 
     
    3133     * Instance of this class. 
    3234     * 
    33      * @var object 
     35     * @var Multisite_Widgets_Context 
    3436     */ 
    3537    protected static $instance = null; 
    3638 
    3739    /** 
    38      * A hash with BLOG_ID => Blog_Name 
     40     * An array with BLOG_ID => Blog_Name 
     41     * @var Array 
    3942     */ 
    4043    protected $arrSites; 
     
    4245    /** 
    4346     * All Blogs 
     47     * @var Array 
    4448     */ 
    4549    protected $blogsID; 
     
    4953     */ 
    5054    private function __construct() { 
     55        $this->init(); 
     56 
     57        $this->arrSites = array(); 
     58        $this->blogsID  = array(); 
     59    } 
     60 
     61    /** 
     62     * Set up Actions and Filters 
     63     * 
     64     * @since 1.1.0 
     65     */ 
     66    public function init() { 
    5167        // Load plugin text domain 
    5268        add_action( 'plugins_loaded', array( $this, 'load_plugin_textdomain' ) ); 
     
    6379        add_action( 'widget_update_callback', array( $this, 'widget_update_callback'), 99, 4 ); 
    6480 
    65         //This actions fires before display  
     81        //This actions fires before display 
    6682        add_action( 'widget_display_callback', array( $this, 'before_render_widget'), 99, 3 ); 
    6783        //It's a trick: this filter fires after a widget is displayed, but we use to restore_current_blog if needed 
     
    7187        add_action( 'dynamic_sidebar_after', array( $this, 'after_render_all_widgets' ), 99 ); 
    7288 
    73         $this->arrSites = array(); 
    74         $this->blogsID  = array(); 
    75  
     89        //Cache purging 
     90        add_action( 'wpmu_new_blog', array( $this, 'purge_cache' ) ); 
     91        add_action( 'delete_blog',   array( $this, 'purge_cache' ) ); 
     92 
     93        if ( is_admin() ) { 
     94            add_action( 'dynamic_sidebar_params', arraY( $this, 'append_current_site_context' ) ); 
     95        } 
    7696    } 
    7797 
     
    90110 
    91111    /** 
     112     * Purges the plugin cache 
     113     * 
     114     * @since 1.1.0 
     115     * @param $blog_id 
     116     */ 
     117    public function purge_cache( $blog_id ) { 
     118        delete_site_transient( 'wpmulwc_blog_ids' ); 
     119    } 
     120 
     121    /** 
    92122     * Get all blog ids of blogs in the current network that are: 
    93123     * - not archived 
     
    100130     */ 
    101131    public static function get_blog_ids() { 
    102         global $wpdb; 
    103  
    104         // get an array of blog ids 
    105         $sql = "SELECT blog_id FROM $wpdb->blogs 
    106             WHERE archived = '0' AND spam = '0' 
    107             AND deleted = '0'"; 
    108  
    109         return $wpdb->get_col( $sql ); 
     132        $blog_ids = get_site_transient( 'wpmulwc_blog_ids' ); 
     133 
     134        if ( false === $blog_ids ) { 
     135            global $wpdb; 
     136 
     137            $blogs = esc_sql( $wpdb->blogs ); 
     138            // get an array of blog ids 
     139            $sql = "SELECT blog_id FROM {$blogs}  WHERE archived = '0' AND spam = '0'AND deleted = '0'"; 
     140 
     141            $blog_ids =  $wpdb->get_col( $sql ); 
     142 
     143            set_site_transient( 'wpmulwc_blog_ids', $blog_ids, 6 * HOUR_IN_SECONDS ); 
     144        } 
     145 
     146        return $blog_ids; 
     147 
    110148    } 
    111149    /** 
     
    120158    /** 
    121159     * Callback for plugin activation 
     160     * 
     161     * @return void 
    122162     */ 
    123163    public static function activate() {  
    124164        if ( ! is_multisite() ) { 
    125             die(__("You aren't using multisite. You need multisite in order to use this plugin", 'wpmulwc') ); 
    126         } 
    127     } 
    128  
     165            wp_die( __( "You aren't using multisite. You need multisite in order to use this plugin", 'wpmulwc' ) ); 
     166        } 
     167    } 
     168 
     169    /** 
     170     * Appends the current site context to the widget title 
     171     * 
     172     * @since 1.1.0 
     173     * 
     174     * @param $params Widget Params 
     175     * 
     176     * @return array 
     177     */ 
     178    public function append_current_site_context( $params ) { 
     179        global $wp_registered_widgets; 
     180 
     181        $widget_number = $params[1]['number']; 
     182        $widget_settings = $wp_registered_widgets[ $params[0]['widget_id'] ]['callback'][0]->get_settings(); 
     183 
     184        if ( isset( $widget_settings[ $widget_number ] ) ) { 
     185            $instance = $widget_settings[ $widget_number ]; 
     186 
     187            if ( isset( $instance['wpmulwc-site_id'] ) ) { 
     188                $site_context = esc_html( get_blog_option( (int) $instance['wpmulwc-site_id'], 'blogname' ) ); 
     189                $params[0]['widget_name'] .= " ({$site_context})"; 
     190            } 
     191 
     192        } 
     193 
     194        return $params; 
     195    } 
     196 
     197    /** 
     198     * Checks if we need to switch to a specific blog before displaying the widget form 
     199     * 
     200     * @param $instance 
     201     * @param $_this 
     202     * @return mixed 
     203     */ 
    129204    public function before_widget_form( $instance, $_this ) { 
    130         if ( isset( $instance[ $this->plugin_slug . '-grab-data' ] ) && isset( $instance[ $this->plugin_slug . '-site_id' ]) ) { 
     205        if ( isset( $instance[ $this->plugin_slug . '-grab-data' ] ) && isset( $instance[ $this->plugin_slug . '-site_id' ] ) ) { 
    131206 
    132207            $site_id    =  $instance[ $this->plugin_slug . '-site_id' ]; 
     
    134209 
    135210            if ( $grabData && $site_id != get_current_blog_id() ) { 
     211                //I wish I could do this without globals 
    136212                $GLOBALS[ '_wpmulwc_switched_admin'  ] = true; 
    137213                switch_to_blog( $site_id ); 
    138214            } 
    139215        } 
     216 
    140217        return $instance; 
    141218    } 
     
    153230 
    154231        $selectName = $_this->get_field_name( $this->plugin_slug . '-site_id' ); 
    155         $site_id    = isset($instance[ $this->plugin_slug . '-site_id' ])   ? $instance[ $this->plugin_slug . '-site_id' ] : false; 
    156         $grabData   = isset($instance[ $this->plugin_slug . '-grab-data' ] ) ? $instance[ $this->plugin_slug . '-grab-data'] : false; 
     232        $site_id    = isset( $instance[ $this->plugin_slug . '-site_id' ] )     ? $instance[ $this->plugin_slug . '-site_id' ] : false; 
     233        $grabData   = isset( $instance[ $this->plugin_slug . '-grab-data' ] )   ? $instance[ $this->plugin_slug . '-grab-data'] : false; 
    157234         
    158235        if ( empty( $this->blogsID ) ) { 
     
    160237        } 
    161238         
    162         $grabDataId   = $_this->get_field_id( $this->plugin_slug . '-grab-data'); 
    163         $grabDataName = $_this->get_field_name( $this->plugin_slug . '-grab-data'); 
    164  
    165         echo "<div class='multisite-widget-context-select'>"; 
    166             echo "<p><h4>" . __('Choose the context of a site to run this widget', $this->plugin_slug) . "</h4></p>"; 
    167             echo "<p>";  
    168                 echo "<input " . checked($grabData, true, false) .  " type='checkbox' value='1' id='" . $grabDataId . "' name='" . $grabDataName . "'>"; 
    169                 echo "<label for='" . $grabDataId . "'>" .  __('Pulls widget data from target site.', $this->plugin_slug) . "</label>"; 
    170             echo "</p>"; 
    171             echo "<p>"; 
    172                 echo "<select name='{$selectName}' class='widefat'>"; 
    173                 foreach($this->blogsID as $blog_id) { 
    174                     if ( ! isset( $this->arrSites[ $blog_id ] ) ) { 
    175                         $this->arrSites[ $blog_id ] = get_blog_option( $blog_id, 'blogname' ); 
     239        $grabDataId   = $_this->get_field_id( $this->plugin_slug . '-grab-data' ); 
     240        $grabDataName = $_this->get_field_name( $this->plugin_slug . '-grab-data' ); 
     241 
     242        echo "<div class='multisite-widget-context-select' data-widget-name='" . esc_attr( $_this->name ) . "'>"; 
     243            echo "<span class='button-wrap'>"; 
     244                echo "<a href='#' class='button'>" . esc_html__( 'Widget Context', $this->plugin_slug ). "</a>"; 
     245                echo "<p>" . esc_html__( 'Click to change the widget context' ) . "</p>"; 
     246            echo "</span>"; 
     247            echo "<div class='wpmulwc-form'>"; 
     248                echo "<h4>" . esc_html__( 'Choose a site context to run this widget' , $this->plugin_slug ) . "</h4>"; 
     249                echo "<p>"; 
     250                    echo "<input " . checked( $grabData, true, false)  .  " type='checkbox' value='1' id='" . esc_attr( $grabDataId ) . "' name='" . esc_attr( $grabDataName ) . "'>"; 
     251                    echo "<label for='" . esc_attr( $grabDataId ) . "'>" .  esc_html__( 'Pulls widget data from target site.', $this->plugin_slug ) . "</label>"; 
     252                echo "</p>"; 
     253                echo "<p>"; 
     254                    echo "<select name='" . esc_attr( $selectName ) . "' class='widefat'>"; 
     255                    foreach($this->blogsID as $blog_id) { 
     256                        //save this for later 
     257                        if ( ! isset( $this->arrSites[ $blog_id ] ) ) { 
     258                            $this->arrSites[ $blog_id ] = get_blog_option( $blog_id, 'blogname' ); 
     259                        } 
     260 
     261                        //XSS ok 
     262                        $selected = ( $blog_id == get_current_blog_id() ) ? 'selected' : ''; 
     263                        $selected = ( $site_id !== false && $blog_id == $site_id ) ? 'selected' : $selected; 
     264 
     265                        echo "<option value='" . esc_attr( $blog_id ) .  "' $selected>" . esc_html( $this->arrSites[ $blog_id ] ) . "</option>"; 
    176266                    } 
    177                      
    178                     $selected = ( $blog_id == get_current_blog_id() ) ? 'selected' : ''; 
    179                     $selected = ( $site_id !== false && $blog_id == $site_id ) ? 'selected' : $selected; 
    180  
    181                     echo "<option value='{$blog_id}' $selected>{$this->arrSites[ $blog_id ]}</option>"; 
    182                 } 
    183                 echo "</select>"; 
    184             echo "</p>"; 
     267                    echo "</select>"; 
     268                echo "</p>"; 
     269            echo "</div>"; //.wpmulwc-form 
    185270 
    186271        echo "</div>"; 
     
    193278     */ 
    194279    public function widget_update_callback( $instance, $new_instance, $old_instance, $_this ) { 
     280 
    195281        if ( isset( $new_instance[ $this->plugin_slug . '-site_id' ] )  ) { 
    196             $wpmulwc_id = (int) $new_instance[ $this->plugin_slug . '-site_id' ]; 
    197             $instance[ $this->plugin_slug . '-site_id' ] = $wpmulwc_id; 
    198             $instance[ $this->plugin_slug . '-grab-data' ] = $new_instance[ $this->plugin_slug . '-grab-data' ]; 
    199         } 
     282            $instance[ $this->plugin_slug . '-site_id' ]    = (int) $new_instance[ $this->plugin_slug . '-site_id' ];; 
     283            $instance[ $this->plugin_slug . '-grab-data' ]  = (int) $new_instance[ $this->plugin_slug . '-grab-data' ]; 
     284        } 
     285 
    200286        return $instance; 
    201287    } 
     
    204290     * Before render widget, check if we need to switch_to_blog 
    205291     */ 
    206  
    207292    public function before_render_widget( $instance, $_this, $args ) { 
    208         if ( isset( $instance[ $this->plugin_slug . '-site_id' ] )  && is_int($instance[ $this->plugin_slug . '-site_id' ]) ) { 
    209             if ( $instance [ $this->plugin_slug . '-site_id' ] != get_current_blog_id() ) { 
     293        if ( isset( $instance[ $this->plugin_slug . '-site_id' ] )  && is_int( $instance[ $this->plugin_slug . '-site_id' ] ) ) { 
     294            if ( $instance[ $this->plugin_slug . '-site_id' ] != get_current_blog_id() ) { 
    210295                $GLOBALS[ '_wpmulwc_switched' ] = true; 
    211296                switch_to_blog( (int) $instance[ $this->plugin_slug . '-site_id' ]);     
     
    218303 
    219304    /** 
    220      * It's a trick: this filter fires after a widget is displayed, but we use to restore_current_blog if needed 
     305     * It's a trick: this filter fires after a widget is displayed, we need to restore_current_blog if it's 
     306     * in the switched state 
    221307     */ 
    222308    public function after_render_previous_widget( $params ) { 
     
    231317 
    232318    /** 
    233      * Ensures that we will be on right blog with the last widget is switched 
     319     * Ensures that we will be on the right blog if the last widget has been switched 
    234320     */ 
    235321    public function after_render_all_widgets( $index ) { 
     
    238324 
    239325    /** 
    240      * Load scripts js and styles css 
     326     * Load assets 
    241327     */ 
    242328    public function enqueue_scripts() { 
     
    244330         
    245331        if ( 'widgets' === $screen->id ) { 
    246             wp_enqueue_style(  $this->plugin_slug . '-widgets-css' , plugins_url( 'assets/css/widgets.css', __FILE__ ), array() , null , 'all' ); 
     332            wp_enqueue_style( 
     333                $this->plugin_slug . '-widgets-css' , 
     334                plugins_url( 'assets/css/widgets.css', __FILE__ ), 
     335                array(), 
     336                WPMULWC_VERSION, 
     337                'all' 
     338            ); 
     339 
     340            wp_enqueue_script( 
     341                $this->plugin_slug . '-widgets-js' , 
     342                plugins_url( 'assets/js/widgets.js', __FILE__ ), 
     343                array(), 
     344                WPMULWC_VERSION, 
     345                true 
     346            ); 
    247347        } 
    248348    } 
Note: See TracChangeset for help on using the changeset viewer.