WordPress.org

Plugin Directory

Changeset 376481


Ignore:
Timestamp:
04/24/11 06:58:04 (3 years ago)
Author:
madeinthayaland
Message:

Fixing "Call to a member function on a non-object".

Location:
wp-btbuckets/trunk
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • wp-btbuckets/trunk/includes/admin.class.php

    r258834 r376481  
    11<?php 
    2 if (!class_exists('WPBTBucketsAdmin')) { 
    3  
    4   class WPBTBucketsAdmin { 
    5  
    6     // objects 
    7     var $p = null; 
    8  
    9     function WPBTBucketsAdmin($plugin) { 
    10       $this->p = $plugin; 
    11  
    12       // activation hook 
    13       register_activation_hook(dirname(dirname(__FILE__)).'/'.$this->p->name_dashed.'.php', array($this, 'activate')); 
    14  
    15       // register admin hooks 
    16       add_action('admin_init', array($this, 'request_handler')); 
    17       add_action('admin_init', array($this, 'register_scripts')); 
    18       add_action('admin_init', array($this, 'register_styles')); 
    19       add_action('admin_print_scripts', array($this, 'enqueue_widget_scripts')); 
    20       add_action('admin_print_styles', array($this, 'enqueue_widget_styles')); 
    21       add_action('admin_head', array($this, 'check_for_btb_update')); 
    22       add_action('admin_head', array($this, 'check_empty_api_key')); 
    23       add_action('admin_head', array($this->p->c, 'a_check_version')); 
    24       add_action('admin_menu', array($this, 'menu')); 
    25       add_action('wp_ajax_'.$this->p->name, array($this, 'ajax_request_handler')); 
    26  
    27       // widgets 
    28       if ($this->p->o['enable_smart_widgets']) { 
    29          add_action('sidebar_admin_setup', array($this, 'attach_widget_context_controls')); 
    30         // Save widget context settings, when in admin area 
    31         add_filter('sidebars_widgets', array($this, 'filter_widgets'), 50); 
    32       } 
    33     } 
    34      
    35     function default_options() { 
    36       return array( 
    37         'version' => $this->p->version, 
    38         'show_link' => true, 
    39         'debug' => false, 
    40         'enable_smart_widgets' => true, 
    41         'btb_last_updated' => 0, 
    42         'btb_refresh_interval' => 3600, 
    43         'buckets' => array(), 
    44         'deprecated' => array(), 
    45         'widget_config' => array(), 
    46         'widget_modes' => array( 
    47           'start_visible' => 'Visible by Default', 
    48           'start_hidden' => 'Hidden by Default' 
    49         ) 
    50       ); 
    51     } 
    52  
    53     function activate() { 
    54       $this->p->c->a_check_version(); 
    55     } 
    56  
    57     function register_scripts() { 
    58       wp_register_script($this->p->name.'_jquery_livequery', 
    59         $this->p->c->get_plugin_url().'js/jquery.livequery.js', array('jquery')); 
    60       wp_register_script($this->p->name.'_widgets_onload', 
    61         $this->p->c->get_plugin_url().'js/widgets-onload.js', array('jquery')); 
    62     } 
    63  
    64     function enqueue_scripts() { 
    65       wp_enqueue_script($this->p->name.'_jquery_livequery'); 
    66     } 
    67      
    68     function enqueue_widget_scripts() { 
    69       if (strstr($_SERVER['SCRIPT_NAME'], 'widgets.php')) 
    70         wp_enqueue_script($this->p->name.'_widgets_onload', array($this->p->name.'_jquery_livequery')); 
    71     } 
    72  
    73     function register_styles() { 
    74       $this->p->c->a_register_styles(); 
    75       wp_register_style($this->p->name.'_style_admin_widgets', 
    76         $this->p->c->get_plugin_url().'css/style-admin-widgets.css'); 
    77     } 
    78  
    79     function enqueue_styles() { 
    80       $this->p->c->a_enqueue_styles(); 
    81     } 
    82  
    83     function enqueue_widget_styles() { 
    84       if (strstr($_SERVER['SCRIPT_NAME'], 'widgets.php')) 
    85         wp_enqueue_style($this->p->name.'_style_admin_widgets'); 
    86     } 
    87  
    88     function ajax_request_handler() { 
    89       check_ajax_referer($this->p->name); 
    90       if (isset($_POST['wpbtb_action'])) { 
    91         if (strtolower($_POST['wpbtb_action']) == 'show_advanced_options') { 
    92           $this->ajax_enable_advanced_options(true); 
    93         } elseif (strtolower($_POST['wpbtb_action']) == 'hide_advanced_options') { 
    94           $this->ajax_enable_advanced_options(false); 
     2class WPBTBucketsAdmin { 
     3 
     4  // objects 
     5  var $p = null; 
     6 
     7  function WPBTBucketsAdmin($plugin) { 
     8    $this->p = $plugin; 
     9 
     10    // activation hook 
     11    register_activation_hook(dirname(dirname(__FILE__)).'/'.$this->p->name_dashed.'.php', array($this, 'activate')); 
     12 
     13    // register admin hooks 
     14    add_action('admin_init', array($this, 'request_handler')); 
     15    add_action('admin_init', array($this, 'register_scripts')); 
     16    add_action('admin_init', array($this, 'register_styles')); 
     17    add_action('admin_print_scripts', array($this, 'enqueue_widget_scripts')); 
     18    add_action('admin_print_styles', array($this, 'enqueue_widget_styles')); 
     19    add_action('admin_head', array($this, 'check_for_btb_update')); 
     20    add_action('admin_head', array($this, 'check_empty_api_key')); 
     21    add_action('admin_head', array($this->p->c, 'a_check_version')); 
     22    add_action('admin_menu', array($this, 'menu')); 
     23    add_action('wp_ajax_'.$this->p->name, array($this, 'ajax_request_handler')); 
     24 
     25    // widgets 
     26    if ($this->p->o['enable_smart_widgets']) { 
     27       add_action('sidebar_admin_setup', array($this, 'attach_widget_context_controls')); 
     28      // Save widget context settings, when in admin area 
     29      add_filter('sidebars_widgets', array($this, 'filter_widgets'), 50); 
     30    } 
     31  } 
     32   
     33  function default_options() { 
     34    return array( 
     35      'version' => $this->p->version, 
     36      'show_link' => true, 
     37      'debug' => false, 
     38      'enable_smart_widgets' => true, 
     39      'btb_last_updated' => 0, 
     40      'btb_refresh_interval' => 3600, 
     41      'buckets' => array(), 
     42      'deprecated' => array(), 
     43      'widget_config' => array(), 
     44      'widget_modes' => array( 
     45        'start_visible' => 'Visible by Default', 
     46        'start_hidden' => 'Hidden by Default' 
     47      ) 
     48    ); 
     49  } 
     50 
     51  function activate() { 
     52    $this->p->c->a_check_version(); 
     53  } 
     54 
     55  function register_scripts() { 
     56    wp_register_script($this->p->name.'_jquery_livequery', 
     57      $this->p->c->get_plugin_url().'js/jquery.livequery.js', array('jquery')); 
     58    wp_register_script($this->p->name.'_widgets_onload', 
     59      $this->p->c->get_plugin_url().'js/widgets-onload.js', array('jquery')); 
     60  } 
     61 
     62  function enqueue_scripts() { 
     63    wp_enqueue_script($this->p->name.'_jquery_livequery'); 
     64  } 
     65   
     66  function enqueue_widget_scripts() { 
     67    if (strstr($_SERVER['SCRIPT_NAME'], 'widgets.php')) 
     68      wp_enqueue_script($this->p->name.'_widgets_onload', array($this->p->name.'_jquery_livequery')); 
     69  } 
     70 
     71  function register_styles() { 
     72    $this->p->c->a_register_styles(); 
     73    wp_register_style($this->p->name.'_style_admin_widgets', 
     74      $this->p->c->get_plugin_url().'css/style-admin-widgets.css'); 
     75  } 
     76 
     77  function enqueue_styles() { 
     78    $this->p->c->a_enqueue_styles(); 
     79  } 
     80 
     81  function enqueue_widget_styles() { 
     82    if (strstr($_SERVER['SCRIPT_NAME'], 'widgets.php')) 
     83      wp_enqueue_style($this->p->name.'_style_admin_widgets'); 
     84  } 
     85 
     86  function ajax_request_handler() { 
     87    check_ajax_referer($this->p->name); 
     88    if (isset($_POST['wpbtb_action'])) { 
     89      if (strtolower($_POST['wpbtb_action']) == 'show_advanced_options') { 
     90        $this->ajax_enable_advanced_options(true); 
     91      } elseif (strtolower($_POST['wpbtb_action']) == 'hide_advanced_options') { 
     92        $this->ajax_enable_advanced_options(false); 
     93      } else { 
     94        echo 'Invalid wpbtb_action.'; 
     95      } 
     96      exit(); 
     97    } 
     98  } 
     99 
     100  function request_handler() { 
     101    if (isset($_POST['wpbtb_options_general_submit'])) { 
     102      check_admin_referer($this->p->name); 
     103      $this->update_options_general(); 
     104    } elseif (isset($_POST['wpbtb_options_refresh_btb'])) { 
     105      check_admin_referer($this->p->name); 
     106      $this->update_btb_data($_POST['wpbtb_options_general']['api_key'], true); 
     107    } elseif (isset($_POST['wpbtb_options_upgrade'])) { 
     108      check_admin_referer($this->p->name); 
     109      $this->p->c->a_upgrade_options(); 
     110    } elseif (isset($_POST['wpbtb_options_reset'])) { 
     111      check_admin_referer($this->p->name); 
     112      $this->p->c->a_reset_options(); 
     113      $this->p->o = get_option($this->p->name); 
     114    } elseif (isset($_POST['wpbtb_options_import'])) { 
     115      check_admin_referer($this->p->name); 
     116      $this->p->c->a_import_options('wpbtb_options_import_file'); 
     117      $this->p->o = get_option($this->p->name); 
     118    } elseif (isset($_POST['wpbtb_options_export'])) { 
     119      $this->p->c->a_export_options($this->p->name_dashed.'-options'); 
     120    } 
     121  } 
     122 
     123  function ajax_enable_advanced_options($enable) { 
     124    if ($enable == true){ 
     125      $this->p->o['show_advanced_options'] = true; 
     126    } else { 
     127      $this->p->o['show_advanced_options'] = false; 
     128    } 
     129    update_option($this->p->name, $this->p->o); 
     130  } 
     131 
     132  function update_options_general() { 
     133    if (!current_user_can('manage_options')) 
     134      die(__('You cannot edit the BTBuckets options.', $this->p->name)); 
     135 
     136    $new_options = $_POST['wpbtb_options_general']; 
     137 
     138    // first check API key and generate BTBuckets tag, and update buckets list if necessary 
     139    if (!strlen($new_options['api_key'])) { 
     140      add_action('admin_notices', array($this->p->c, 'a_notify_invalid_api_key')); 
     141    } elseif ($this->p->o['api_key'] != $new_options['api_key']) { 
     142      $this->update_btb_data($new_options['api_key'], true); 
     143    } 
     144 
     145    if ($new_options['enable_smart_widgets']) 
     146      $this->p->o['enable_smart_widgets'] = true; 
     147    else 
     148      $this->p->o['enable_smart_widgets'] = false; 
     149     
     150    if ($new_options['show_link']) 
     151      $this->p->o['show_link'] = true; 
     152    else 
     153      $this->p->o['show_link'] = false; 
     154     
     155    // update other options 
     156    foreach ($new_options as $k => $v) { 
     157      if (!in_array($k, array('enable', 'show_link', 'api_key'))) { 
     158        $this->p->o[$k] = $v; 
     159      } 
     160    } 
     161     
     162    update_option($this->p->name, $this->p->o); 
     163  } 
     164   
     165  function update_btb_data($api_key, $notify=false) { 
     166    // check API key, generate BTBuckets tag, and update buckets list 
     167    if (!strlen($api_key)) { 
     168      if ($notify) 
     169        add_action('admin_notices', array($this->p->c, 'a_notify_invalid_api_key')); 
     170    } else { 
     171      $this->p->o['api_key'] = $api_key; 
     172 
     173      // get tag 
     174      $json_obj = $this->p->call_btb('generate_tag'); 
     175      if ($json_obj->tag_code) { 
     176        //$tag_code = preg_replace('/\$BTB={s:(\w*?)};/', '$BTB={s:\1,ref:thaya};', ($json_obj->tag_code)); 
     177        $tag_code = ($json_obj->tag_code); 
     178        $this->p->o['tag'] = $tag_code; 
     179        if ($notify) 
     180          $this->p->c->a_notify(__('BTBuckets tag updated', $this->p->name), false); 
     181      } else { 
     182        if ($notify) 
     183          $this->p->c->a_notify(__('Error updating BTBuckets tag', $this->p->name), true); 
     184      } 
     185       
     186      // update buckets list 
     187      $json_obj = $this->p->call_btb('get_all_buckets'); 
     188      if ($json_obj->buckets) { 
     189        $new_buckets = array(); 
     190        foreach ($json_obj->buckets as $k => $bucket) { 
     191          $bucket_config = array(); 
     192          foreach ($bucket as $field_name => $value) { 
     193            $bucket_config[$field_name] = $value; 
     194          } 
     195          if (isset($this->p->o[$bucket_config['friendly_name']]['show'])) { 
     196            $bucket_config['show'] = $this->p->o[$bucket_config['friendly_name']]['show']; 
     197          } else { 
     198            $bucket_config['show'] = true;               
     199          } 
     200          if (count($bucket_config)) { 
     201            $new_buckets[$bucket_config['friendly_name']] = $bucket_config; 
     202          } 
     203        } 
     204        if (count($new_buckets)) { 
     205          $this->p->o['buckets'] = $new_buckets; 
     206          if ($notify) 
     207            $this->p->c->a_notify(__('Buckets updated', $this->p->name), false); 
    95208        } else { 
    96           echo 'Invalid wpbtb_action.'; 
     209          if ($notify) 
     210            $this->p->c->a_notify(__('Failed to update Buckets', $this->p->name), false);             
    97211        } 
    98         exit(); 
    99       } 
    100     } 
    101    
    102     function request_handler() { 
    103       if (isset($_POST['wpbtb_options_general_submit'])) { 
    104         check_admin_referer($this->p->name); 
    105         $this->update_options_general(); 
    106       } elseif (isset($_POST['wpbtb_options_refresh_btb'])) { 
    107         check_admin_referer($this->p->name); 
    108         $this->update_btb_data($_POST['wpbtb_options_general']['api_key'], true); 
    109       } elseif (isset($_POST['wpbtb_options_upgrade'])) { 
    110         check_admin_referer($this->p->name); 
    111         $this->p->c->a_upgrade_options(); 
    112       } elseif (isset($_POST['wpbtb_options_reset'])) { 
    113         check_admin_referer($this->p->name); 
    114         $this->p->c->a_reset_options(); 
    115         $this->p->o = get_option($this->p->name); 
    116       } elseif (isset($_POST['wpbtb_options_import'])) { 
    117         check_admin_referer($this->p->name); 
    118         $this->p->c->a_import_options('wpbtb_options_import_file'); 
    119         $this->p->o = get_option($this->p->name); 
    120       } elseif (isset($_POST['wpbtb_options_export'])) { 
    121         $this->p->c->a_export_options($this->p->name_dashed.'-options'); 
    122       } 
    123     } 
    124  
    125     function ajax_enable_advanced_options($enable) { 
    126       if ($enable == true){ 
    127         $this->p->o['show_advanced_options'] = true; 
    128212      } else { 
    129         $this->p->o['show_advanced_options'] = false; 
    130       } 
    131       update_option($this->p->name, $this->p->o); 
    132     } 
    133    
    134     function update_options_general() { 
    135       if (!current_user_can('manage_options')) 
    136         die(__('You cannot edit the BTBuckets options.', $this->p->name)); 
    137  
    138       $new_options = $_POST['wpbtb_options_general']; 
    139  
    140       // first check API key and generate BTBuckets tag, and update buckets list if necessary 
    141       if (!strlen($new_options['api_key'])) { 
    142         add_action('admin_notices', array($this->p->c, 'a_notify_invalid_api_key')); 
    143       } elseif ($this->p->o['api_key'] != $new_options['api_key']) { 
    144         $this->update_btb_data($new_options['api_key'], true); 
    145       } 
    146  
    147       if ($new_options['enable_smart_widgets']) 
    148         $this->p->o['enable_smart_widgets'] = true; 
    149       else 
    150         $this->p->o['enable_smart_widgets'] = false; 
     213        if ($notify) 
     214          $this->p->c->a_notify(__('Error retrieving buckets', $this->p->name), true); 
     215      } 
    151216       
    152       if ($new_options['show_link']) 
    153         $this->p->o['show_link'] = true; 
    154       else 
    155         $this->p->o['show_link'] = false; 
    156        
    157       // update other options 
    158       foreach ($new_options as $k => $v) { 
    159         if (!in_array($k, array('enable', 'show_link', 'api_key'))) { 
    160           $this->p->o[$k] = $v; 
    161         } 
    162       } 
     217      $this->p->o['btb_last_updated'] = time(); 
    163218       
    164219      update_option($this->p->name, $this->p->o); 
    165     } 
    166      
    167     function update_btb_data($api_key, $notify=false) { 
    168       // check API key, generate BTBuckets tag, and update buckets list 
    169       if (!strlen($api_key)) { 
    170         if ($notify) 
    171           add_action('admin_notices', array($this->p->c, 'a_notify_invalid_api_key')); 
    172       } else { 
    173         $this->p->o['api_key'] = $api_key; 
    174  
    175         // get tag 
    176         $json_obj = $this->p->call_btb('generate_tag'); 
    177         if ($json_obj->tag_code) { 
    178           //$tag_code = preg_replace('/\$BTB={s:(\w*?)};/', '$BTB={s:\1,ref:thaya};', ($json_obj->tag_code)); 
    179           $tag_code = ($json_obj->tag_code); 
    180           $this->p->o['tag'] = $tag_code; 
    181           if ($notify) 
    182             $this->p->c->a_notify(__('BTBuckets tag updated', $this->p->name), false); 
    183         } else { 
    184           if ($notify) 
    185             $this->p->c->a_notify(__('Error updating BTBuckets tag', $this->p->name), true); 
    186         } 
    187          
    188         // update buckets list 
    189         $json_obj = $this->p->call_btb('get_all_buckets'); 
    190         if ($json_obj->buckets) { 
    191           $new_buckets = array(); 
    192           foreach ($json_obj->buckets as $k => $bucket) { 
    193             $bucket_config = array(); 
    194             foreach ($bucket as $field_name => $value) { 
    195               $bucket_config[$field_name] = $value; 
    196             } 
    197             if (isset($this->p->o[$bucket_config['friendly_name']]['show'])) { 
    198               $bucket_config['show'] = $this->p->o[$bucket_config['friendly_name']]['show']; 
    199             } else { 
    200               $bucket_config['show'] = true;               
    201             } 
    202             if (count($bucket_config)) { 
    203               $new_buckets[$bucket_config['friendly_name']] = $bucket_config; 
    204             } 
    205           } 
    206           if (count($new_buckets)) { 
    207             $this->p->o['buckets'] = $new_buckets; 
    208             if ($notify) 
    209               $this->p->c->a_notify(__('Buckets updated', $this->p->name), false); 
    210           } else { 
    211             if ($notify) 
    212               $this->p->c->a_notify(__('Failed to update Buckets', $this->p->name), false);             
    213           } 
    214         } else { 
    215           if ($notify) 
    216             $this->p->c->a_notify(__('Error retrieving buckets', $this->p->name), true); 
    217         } 
    218          
    219         $this->p->o['btb_last_updated'] = time(); 
    220          
    221         update_option($this->p->name, $this->p->o); 
    222       }       
    223     } 
    224  
    225     function check_for_btb_update() { 
    226       // update zone info if it's time 
    227       if ((time() - $this->p->o['btb_last_updated']) > $this->p->o['btb_refresh_interval']) { 
    228         $this->update_btb_data($this->p->o['api_key'], false); 
    229       } 
    230     } 
    231      
    232     function check_empty_api_key() { 
    233       if (!strlen($this->p->o['api_key'])) { 
    234         $this->p->c->a_notify(sprintf(__('Please enter your BTBuckets API Key on the WP BTBuckets %soptions page%s.'), '<a href="options-general.php?page=wp_btbuckets">', '</a>', false)); 
    235       } 
    236     } 
    237  
    238     function menu() { 
    239       $options_page = add_options_page($this->p->name_proper, $this->p->name_proper, 'manage_options', $this->p->name, array($this, 'page')); 
    240       // only load these scripts on this plugin's options page 
    241       add_action('admin_print_scripts-'.$options_page, array($this, 'enqueue_scripts')); 
    242       // need style on all pages 
    243       add_action('admin_print_styles', array($this, 'enqueue_styles')); 
    244       // only check on settings pages 
    245       add_action('admin_head-'.$options_page, array($this->p->c, 'a_check_orphan_options')); 
    246     } 
    247  
    248     function page() { 
    249       require_once($this->p->path.'views/admin/header.php'); 
    250  
    251       if(isset($_GET['wpbtb-page'])) { 
    252         if($_GET['wpbtb-page'] == 'generic') { 
    253           require_once($this->p->path.'views/admin/generic.php'); 
    254         } 
    255         elseif($_GET['wpbtb-page'] == 'import-export') { 
    256           require_once($this->p->path.'views/admin/import-export.php'); 
    257         } else { 
    258           require_once($this->p->path.'views/admin/generic.php'); 
    259         } 
     220    }       
     221  } 
     222 
     223  function check_for_btb_update() { 
     224    // update zone info if it's time 
     225    if ((time() - $this->p->o['btb_last_updated']) > $this->p->o['btb_refresh_interval']) { 
     226      $this->update_btb_data($this->p->o['api_key'], false); 
     227    } 
     228  } 
     229   
     230  function check_empty_api_key() { 
     231    if (!strlen($this->p->o['api_key'])) { 
     232      $this->p->c->a_notify(sprintf(__('Please enter your BTBuckets API Key on the WP BTBuckets %soptions page%s.'), '<a href="options-general.php?page=wp_btbuckets">', '</a>', false)); 
     233    } 
     234  } 
     235 
     236  function menu() { 
     237    $options_page = add_options_page($this->p->name_proper, $this->p->name_proper, 'manage_options', $this->p->name, array($this, 'page')); 
     238    // only load these scripts on this plugin's options page 
     239    add_action('admin_print_scripts-'.$options_page, array($this, 'enqueue_scripts')); 
     240    // need style on all pages 
     241    add_action('admin_print_styles', array($this, 'enqueue_styles')); 
     242    // only check on settings pages 
     243    add_action('admin_head-'.$options_page, array($this->p->c, 'a_check_orphan_options')); 
     244  } 
     245 
     246  function page() { 
     247    require_once($this->p->path.'views/admin/header.php'); 
     248 
     249    if(isset($_GET['wpbtb-page'])) { 
     250      if($_GET['wpbtb-page'] == 'generic') { 
     251        require_once($this->p->path.'views/admin/generic.php'); 
     252      } 
     253      elseif($_GET['wpbtb-page'] == 'import-export') { 
     254        require_once($this->p->path.'views/admin/import-export.php'); 
    260255      } else { 
    261256        require_once($this->p->path.'views/admin/generic.php'); 
    262257      } 
    263  
    264       require_once($this->p->path.'views/admin/sidebar.php');   
    265       require_once($this->p->path.'views/admin/footer.php'); 
    266     } // function page() 
    267      
    268     function attach_widget_context_controls() { 
    269       global $wp_registered_widget_controls, $wp_registered_widgets; 
    270        
    271       // Don't show custom config when adding (there's a bug) 
    272       if (!isset($_POST['add_new'])) { 
    273         foreach ($wp_registered_widgets as $widget_id => $widget_data) { 
    274           // Pass widget id as param, so that we can later call the original callback function 
    275           $wp_registered_widget_controls[$widget_id]['params'][]['widget_id'] = $widget_id; 
    276           // Store the original callback functions and replace them with Widget Context 
    277           $wp_registered_widget_controls[$widget_id]['callback_original_wpbtb'] = $wp_registered_widget_controls[$widget_id]['callback']; 
    278           $wp_registered_widget_controls[$widget_id]['callback'] = array($this, 'replace_widget_control_callback'); 
     258    } else { 
     259      require_once($this->p->path.'views/admin/generic.php'); 
     260    } 
     261 
     262    require_once($this->p->path.'views/admin/sidebar.php');   
     263    require_once($this->p->path.'views/admin/footer.php'); 
     264  } // function page() 
     265   
     266  function attach_widget_context_controls() { 
     267    global $wp_registered_widget_controls, $wp_registered_widgets; 
     268     
     269    // Don't show custom config when adding (there's a bug) 
     270    if (!isset($_POST['add_new'])) { 
     271      foreach ($wp_registered_widgets as $widget_id => $widget_data) { 
     272        // Pass widget id as param, so that we can later call the original callback function 
     273        $wp_registered_widget_controls[$widget_id]['params'][]['widget_id'] = $widget_id; 
     274        // Store the original callback functions and replace them with Widget Context 
     275        $wp_registered_widget_controls[$widget_id]['callback_original_wpbtb'] = $wp_registered_widget_controls[$widget_id]['callback']; 
     276        $wp_registered_widget_controls[$widget_id]['callback'] = array($this, 'replace_widget_control_callback'); 
     277      } 
     278    } 
     279  } 
     280   
     281  function replace_widget_control_callback() { 
     282    global $wp_registered_widget_controls; 
     283     
     284    $all_params = func_get_args(); 
     285 
     286    //if (isset($all_params['number']) && $all_params['number'] == '-1') { 
     287    //  // do not show when initilizing multi-instance widget 
     288    //  // since we don't have the proper widget_id yet 
     289 
     290    //  // Display the original callback 
     291    //  if (isset($original_callback) && is_callable($original_callback)) { 
     292    //    call_user_func_array($original_callback, $all_params); 
     293    //  } else { 
     294    //    print '<!-- WP BTBuckets [controls]: could not call the original callback function -->'; 
     295    //  } 
     296    //} 
     297     
     298    if (is_array($all_params[1])) 
     299      $widget_id = $all_params[1]['widget_id']; 
     300    else 
     301      $widget_id = $all_params[0]['widget_id']; 
     302                 
     303    $original_callback = $wp_registered_widget_controls[$widget_id]['callback_original_wpbtb']; 
     304                 
     305    // Display the original callback 
     306    if (isset($original_callback) && is_callable($original_callback)) { 
     307      call_user_func_array($original_callback, $all_params); 
     308    } else { 
     309      print '<!-- WP BTBuckets [controls]: could not call the original callback function -->'; 
     310    } 
     311     
     312    $this->display_widget_context($original_callback, $widget_id); 
     313  } 
     314   
     315  function display_widget_context($args = array(), $wid = null) { 
     316    require($this->p->path.'views/admin/widget-options.php'); 
     317  } 
     318 
     319  function filter_widgets($sidebars_widgets) { 
     320    foreach ($sidebars_widgets as $sidebar_id => $widgets) { 
     321      // Don't configure inactive widgets 
     322      if ($sidebar_id != 'wp_inactive_widgets' && !empty($widgets)) { 
     323        foreach ($widgets as $widget_no => $widget_id) { 
     324          // initialize widget_config for this widget_id if it's doesn't exist yet 
     325          if (!isset($this->p->o['widget_config'][$widget_id]) || !count($this->p->o['widget_config'][$widget_id])) { 
     326            $this->p->o['widget_config'][$widget_id] = array(); 
     327            $this->p->o['widget_config'][$widget_id]['widget_mode'] = 'start_visible'; 
     328            $this->p->o['widget_config'][$widget_id]['to_hide'] = array(); 
     329            $this->p->o['widget_config'][$widget_id]['to_show'] = array(); 
     330          } 
    279331        } 
    280332      } 
    281333    } 
    282      
    283     function replace_widget_control_callback() { 
    284       global $wp_registered_widget_controls; 
    285        
    286       $all_params = func_get_args(); 
    287  
    288       //if (isset($all_params['number']) && $all_params['number'] == '-1') { 
    289       //  // do not show when initilizing multi-instance widget 
    290       //  // since we don't have the proper widget_id yet 
    291  
    292       //  // Display the original callback 
    293       //  if (isset($original_callback) && is_callable($original_callback)) { 
    294       //    call_user_func_array($original_callback, $all_params); 
    295       //  } else { 
    296       //    print '<!-- WP BTBuckets [controls]: could not call the original callback function -->'; 
    297       //  } 
    298       //} 
    299        
    300       if (is_array($all_params[1])) 
    301         $widget_id = $all_params[1]['widget_id']; 
    302       else 
    303         $widget_id = $all_params[0]['widget_id']; 
    304                    
    305       $original_callback = $wp_registered_widget_controls[$widget_id]['callback_original_wpbtb']; 
    306                    
    307       // Display the original callback 
    308       if (isset($original_callback) && is_callable($original_callback)) { 
    309         call_user_func_array($original_callback, $all_params); 
    310       } else { 
    311         print '<!-- WP BTBuckets [controls]: could not call the original callback function -->'; 
    312       } 
    313        
    314       $this->display_widget_context($original_callback, $widget_id); 
    315     } 
    316      
    317     function display_widget_context($args = array(), $wid = null) { 
    318       require($this->p->path.'views/admin/widget-options.php'); 
    319     } 
    320  
    321     function filter_widgets($sidebars_widgets) { 
    322       foreach ($sidebars_widgets as $sidebar_id => $widgets) { 
    323         // Don't configure inactive widgets 
    324         if ($sidebar_id != 'wp_inactive_widgets' && !empty($widgets)) { 
    325           foreach ($widgets as $widget_no => $widget_id) { 
    326             // initialize widget_config for this widget_id if it's doesn't exist yet 
    327             if (!isset($this->p->o['widget_config'][$widget_id]) || !count($this->p->o['widget_config'][$widget_id])) { 
    328               $this->p->o['widget_config'][$widget_id] = array(); 
    329               $this->p->o['widget_config'][$widget_id]['widget_mode'] = 'start_visible'; 
    330               $this->p->o['widget_config'][$widget_id]['to_hide'] = array(); 
    331               $this->p->o['widget_config'][$widget_id]['to_show'] = array(); 
    332             } 
    333           } 
    334         } 
    335       } 
    336  
    337       update_option($this->p->name, $this->p->o); 
    338        
    339       if (isset($_POST['wpbtb_widget_config']) && !empty($_POST['wpbtb_widget_config'])) { 
    340         $this->save_widget_context(); 
    341         unset($_POST['wpbtb_widget_config']); 
    342       } 
    343        
    344       return $sidebars_widgets; 
    345     } 
    346      
    347     function save_widget_context() { 
    348       // Delete 
    349       if (isset($_POST['delete_widget']) && $_POST['delete_widget']) { 
    350         $del_id = $_POST['widget-id']; 
    351         unset($this->p->o['widget_config'][$del_id]); 
    352       } else { 
    353         $new_settings = $_POST['wpbtb_widget_config']['widget_config']; 
    354  
    355         foreach($new_settings as $widget_id => $widget_settings) { 
    356           // Add/Update 
    357           if (isset($_POST['widget-links'])) { 
    358             // links widget is special 
    359             // save as "links-*" 
    360             $this->p->o['widget_config'][$widget_id] = $widget_settings; 
    361             foreach ($_POST['widget-links'] as $links_widget_num => $links_widget_data) { 
    362               if (strlen($links_widget_data['category'])) { 
    363                 // save as "linkcat-*" for category specified in links widget 
    364                 $this->p->o['widget_config']['linkcat-'.$links_widget_data['category']] = $widget_settings; 
     334 
     335    update_option($this->p->name, $this->p->o); 
     336     
     337    if (isset($_POST['wpbtb_widget_config']) && !empty($_POST['wpbtb_widget_config'])) { 
     338      $this->save_widget_context(); 
     339      unset($_POST['wpbtb_widget_config']); 
     340    } 
     341     
     342    return $sidebars_widgets; 
     343  } 
     344   
     345  function save_widget_context() { 
     346    // Delete 
     347    if (isset($_POST['delete_widget']) && $_POST['delete_widget']) { 
     348      $del_id = $_POST['widget-id']; 
     349      unset($this->p->o['widget_config'][$del_id]); 
     350    } else { 
     351      $new_settings = $_POST['wpbtb_widget_config']['widget_config']; 
     352 
     353      foreach($new_settings as $widget_id => $widget_settings) { 
     354        // Add/Update 
     355        if (isset($_POST['widget-links'])) { 
     356          // links widget is special 
     357          // save as "links-*" 
     358          $this->p->o['widget_config'][$widget_id] = $widget_settings; 
     359          foreach ($_POST['widget-links'] as $links_widget_num => $links_widget_data) { 
     360            if (strlen($links_widget_data['category'])) { 
     361              // save as "linkcat-*" for category specified in links widget 
     362              $this->p->o['widget_config']['linkcat-'.$links_widget_data['category']] = $widget_settings; 
     363              // save lookup in original "links-*" 
     364              $this->p->o['widget_config'][$widget_id]['lookup'][] = 'linkcat-'.$links_widget_data['category']; 
     365            } else { 
     366              // save as "linkcat-*" for all categories if "All Links" is selected in links widget 
     367              $args = array('offset' => 0, 'hide_empty' => 0); 
     368              $categories = get_terms('link_category', $args); 
     369              foreach ($categories as $category) { 
     370                $this->p->o['widget_config']['linkcat-'.$category->term_id] = $widget_settings; 
    365371                // save lookup in original "links-*" 
    366                 $this->p->o['widget_config'][$widget_id]['lookup'][] = 'linkcat-'.$links_widget_data['category']; 
    367               } else { 
    368                 // save as "linkcat-*" for all categories if "All Links" is selected in links widget 
    369                 $args = array('offset' => 0, 'hide_empty' => 0); 
    370                 $categories = get_terms('link_category', $args); 
    371                 foreach ($categories as $category) { 
    372                   $this->p->o['widget_config']['linkcat-'.$category->term_id] = $widget_settings; 
    373                   // save lookup in original "links-*" 
    374                   $this->p->o['widget_config'][$widget_id]['lookup'][] = 'linkcat-'.$category->term_id; 
    375                 } 
     372                $this->p->o['widget_config'][$widget_id]['lookup'][] = 'linkcat-'.$category->term_id; 
    376373              } 
    377374            } 
    378           } else { 
    379             $this->p->o['widget_config'][$widget_id] = $widget_settings; 
    380           } 
     375          } 
     376        } else { 
     377          $this->p->o['widget_config'][$widget_id] = $widget_settings; 
    381378        } 
    382379      } 
    383  
    384       update_option($this->p->name, $this->p->o); 
    385        
    386       return; 
    387     } 
    388  
    389   } // class WPBTBucketsAdmin 
    390  
    391 } // if !class_exists 
     380    } 
     381 
     382    update_option($this->p->name, $this->p->o); 
     383     
     384    return; 
     385  } 
     386 
     387} // class WPBTBucketsAdmin 
    392388?> 
  • wp-btbuckets/trunk/includes/common.class.php

    r258834 r376481  
    11<?php 
    2 if (!class_exists('WPBTBucketsCommon')) { 
    3  
    4   class WPBTBucketsCommon { 
    5  
    6     var $p = null; 
    7  
    8     function WPBTBucketsCommon($plugin) { 
    9       $this->p = $plugin; 
    10     } 
    11  
    12     // admin methods 
    13    
    14     function a_check_version() { 
    15       // check WP version 
    16       global $wp_version; 
    17       if (!empty($wp_version) && version_compare($wp_version, $this->p->required_wp_version, "<") 
    18       ) { 
    19         add_action('admin_notices', array($this, 'a_notify_version')); 
     2class WPBTBucketsCommon { 
     3 
     4  var $p = null; 
     5 
     6  function WPBTBucketsCommon($plugin) { 
     7    $this->p = $plugin; 
     8  } 
     9 
     10  // admin methods 
     11 
     12  function a_check_version() { 
     13    // check WP version 
     14    global $wp_version; 
     15    if (!empty($wp_version) && version_compare($wp_version, $this->p->required_wp_version, "<") 
     16    ) { 
     17      add_action('admin_notices', array($this, 'a_notify_version')); 
     18    } 
     19 
     20    // check options and create/upgrade if necessary 
     21    if (!$this->p->o) { 
     22      $this->p->o = $this->p->a->default_options(); 
     23      update_option($this->p->name, $this->p->o); 
     24    } elseif($this->p->o && array_key_exists('version', $this->p->o) && version_compare($this->p->o['version'], $this->p->version, "<")) { 
     25      $this->a_upgrade_options(); 
     26    } else { 
     27      $this->a_check_orphan_options(); 
     28    } 
     29  } 
     30 
     31  function a_check_dir_writable($dir, $notify_cb) { 
     32    if (is_writable($dir)) { 
     33      return true; 
     34    } 
     35    else { 
     36      // error and return false 
     37      add_action('admin_notices', $notify_cb); 
     38      return false; 
     39    } 
     40  } 
     41 
     42  function a_check_orphan_options() { 
     43    $options = get_option($this->p->name); 
     44    if (!$options) { 
     45      add_action('admin_notices', array($this , 'a_notify_orphan_options')); 
     46      $this->a_upgrade_options(); 
     47      return true; 
     48    } else { 
     49      $default_options = $this->p->a->default_options(); 
     50      foreach( $default_options as $key => $value ) { 
     51        if ( !array_key_exists($key, $options) ) { 
     52          add_action('admin_notices', array($this , 'a_notify_orphan_options')); 
     53          $this->a_upgrade_options(); 
     54          return true; 
     55        } 
    2056      } 
    21  
    22       // check options and create/upgrade if necessary 
    23       if (!$this->p->o) { 
    24         $this->p->o = $this->p->a->default_options(); 
    25         update_option($this->p->name, $this->p->o); 
    26       } elseif($this->p->o && array_key_exists('version', $this->p->o) && version_compare($this->p->o['version'], $this->p->version, "<")) { 
    27         $this->a_upgrade_options(); 
    28       } else { 
    29         $this->a_check_orphan_options(); 
    30       } 
    31     } 
    32  
    33     function a_check_dir_writable($dir, $notify_cb) { 
    34       if (is_writable($dir)) { 
    35         return true; 
    36       } 
    37       else { 
    38         // error and return false 
    39         add_action('admin_notices', $notify_cb); 
    40         return false; 
    41       } 
    42     } 
    43  
    44     function a_check_orphan_options() { 
     57    } 
     58    return false; 
     59  } 
     60 
     61  function a_notify($message, $error=false) { 
     62    if ( !$error ) { 
     63      echo '<div class="updated fade"><p>'.$message.'</p></div>'; 
     64    } 
     65    else { 
     66      echo '<div class="error"><p>'.$message.'</p></div>'; 
     67    } 
     68  } 
     69 
     70  function a_notify_version() { 
     71    global $wp_version; 
     72    $this->a_notify( 
     73      sprintf(__('You are using WordPress version %s.', $this->p->name), $wp_version).' '. 
     74      sprintf(__('%s recommends that you use WordPress %s or newer.', $this->p->name), 
     75        $this->p->name_proper, 
     76        $this->p->required_wp_version).' '. 
     77      sprintf(__('%sPlease update!%s', $this->p->name), 
     78        '<a href="http://codex.wordpress.org/Upgrading_WordPress">', '</a>'), 
     79      true); 
     80  } 
     81 
     82  function a_notify_updated() { 
     83    $this->a_notify( 
     84      sprintf(__('%s options has been updated.', $this->p->name), 
     85        $this->p->name_proper)); 
     86  } 
     87 
     88  function a_notify_upgrade() { 
     89    $this->a_notify( 
     90      sprintf(__('%s options has been upgraded.', $this->p->name), 
     91        $this->p->name_proper)); 
     92  } 
     93 
     94  function a_notify_orphan_options() { 
     95    $this->a_notify( 
     96      sprintf('%s', 
     97        __('Some option settings were missing (possibly from plugin upgrade).', $this->name))); 
     98  } 
     99 
     100  function a_notify_reset() { 
     101    $this->a_notify( 
     102      sprintf(__('%s options has been reset.', $this->p->name), 
     103        $this->p->name_proper)); 
     104  } 
     105 
     106  function a_notify_cache_cleared() { 
     107    $this->a_notify( 
     108      sprintf(__('%s cache has been cleared.', $this->p->name), 
     109        $this->p->name_proper)); 
     110  } 
     111 
     112  function a_notify_imported() { 
     113    $this->a_notify( 
     114      sprintf(__('%s options imported.', $this->p->name), 
     115        $this->p->name_proper)); 
     116  } 
     117 
     118  function a_notify_import_failed() { 
     119    $this->a_notify( 
     120      sprintf(__('%s options import failed!', $this->p->name), 
     121        $this->p->name_proper), true); 
     122  } 
     123 
     124  function a_notify_import_failed_missing() { 
     125    $this->a_notify( 
     126      sprintf(__('Did not receive any file to be imported. %s options import failed!', $this->p->name), 
     127        $this->p->name_proper), true); 
     128  } 
     129 
     130  function a_notify_import_failed_syntax() { 
     131    $this->a_notify( 
     132      sprintf(__('Found syntax errors in file being imported. %s options import failed!', $this->p->name), 
     133        $this->p->name_proper), true); 
     134  } 
     135 
     136  function a_notify_invalid_api_key() { 
     137    $this->a_notify(__('Please enter a valid API key!', $this->p->name), true); 
     138  } 
     139 
     140 
     141  function a_upgrade_options() { 
     142    if (method_exists($this->p, 'a_upgrade_options')) { 
     143      // run plugin's upgrade options function if it exists 
     144      $this->p->a_upgrade_options(); 
     145    } elseif (method_exists($this->p->a, 'upgrade_options')) { 
     146      // another flavor of upgrade options function 
     147      $this->p->a->upgrade_options(); 
     148    } else { 
     149      // else run generic upgrade options function 
    45150      $options = get_option($this->p->name); 
    46       if (!$options) { 
    47         add_action('admin_notices', array($this , 'a_notify_orphan_options')); 
    48         $this->a_upgrade_options(); 
    49         return true; 
     151      if ( !$options ) { 
     152        add_option($this->p->name, $this->p->o); 
    50153      } else { 
    51154        $default_options = $this->p->a->default_options(); 
    52         foreach( $default_options as $key => $value ) { 
    53           if ( !array_key_exists($key, $options) ) { 
    54             add_action('admin_notices', array($this , 'a_notify_orphan_options')); 
    55             $this->a_upgrade_options(); 
    56             return true; 
     155 
     156        // upgrade regular options 
     157        foreach($default_options as $option_name => $option_value) { 
     158          if(!isset($options[$option_name])) { 
     159            $options[$option_name] = $option_value; 
    57160          } 
    58161        } 
     162        $options['version'] = $this->p->version; 
     163        // get rid of deprecated options if any 
     164        foreach($default_options['deprecated'] as $option_name) { 
     165          if(isset($options[$option_name])) { 
     166            unset($options[$option_name]); 
     167          } 
     168        } 
     169        update_option($this->p->name, $options); 
    59170      } 
    60       return false; 
    61     } 
    62  
    63     function a_notify($message, $error=false) { 
    64       if ( !$error ) { 
    65         echo '<div class="updated fade"><p>'.$message.'</p></div>'; 
    66       } 
    67       else { 
    68         echo '<div class="error"><p>'.$message.'</p></div>'; 
    69       } 
    70     } 
    71    
    72     function a_notify_version() { 
    73       global $wp_version; 
    74       $this->a_notify( 
    75         sprintf(__('You are using WordPress version %s.', $this->p->name), $wp_version).' '. 
    76         sprintf(__('%s recommends that you use WordPress %s or newer.', $this->p->name), 
    77           $this->p->name_proper, 
    78           $this->p->required_wp_version).' '. 
    79         sprintf(__('%sPlease update!%s', $this->p->name), 
    80           '<a href="http://codex.wordpress.org/Upgrading_WordPress">', '</a>'), 
    81         true); 
    82     } 
    83    
    84     function a_notify_updated() { 
    85       $this->a_notify( 
    86         sprintf(__('%s options has been updated.', $this->p->name), 
    87           $this->p->name_proper)); 
    88     } 
    89    
    90     function a_notify_upgrade() { 
    91       $this->a_notify( 
    92         sprintf(__('%s options has been upgraded.', $this->p->name), 
    93           $this->p->name_proper)); 
    94     } 
    95  
    96     function a_notify_orphan_options() { 
    97       $this->a_notify( 
    98         sprintf('%s', 
    99           __('Some option settings were missing (possibly from plugin upgrade).', $this->name))); 
    100     } 
    101    
    102     function a_notify_reset() { 
    103       $this->a_notify( 
    104         sprintf(__('%s options has been reset.', $this->p->name), 
    105           $this->p->name_proper)); 
    106     } 
    107    
    108     function a_notify_cache_cleared() { 
    109       $this->a_notify( 
    110         sprintf(__('%s cache has been cleared.', $this->p->name), 
    111           $this->p->name_proper)); 
    112     } 
    113    
    114     function a_notify_imported() { 
    115       $this->a_notify( 
    116         sprintf(__('%s options imported.', $this->p->name), 
    117           $this->p->name_proper)); 
    118     } 
    119    
    120     function a_notify_import_failed() { 
    121       $this->a_notify( 
    122         sprintf(__('%s options import failed!', $this->p->name), 
    123           $this->p->name_proper), true); 
    124     } 
    125    
    126     function a_notify_import_failed_missing() { 
    127       $this->a_notify( 
    128         sprintf(__('Did not receive any file to be imported. %s options import failed!', $this->p->name), 
    129           $this->p->name_proper), true); 
    130     } 
    131    
    132     function a_notify_import_failed_syntax() { 
    133       $this->a_notify( 
    134         sprintf(__('Found syntax errors in file being imported. %s options import failed!', $this->p->name), 
    135           $this->p->name_proper), true); 
    136     } 
    137  
    138     function a_notify_invalid_api_key() { 
    139       $this->a_notify(__('Please enter a valid API key!', $this->p->name), true); 
    140     } 
    141    
    142    
    143     function a_upgrade_options() { 
    144       if (method_exists($this->p, 'a_upgrade_options')) { 
    145         // run plugin's upgrade options function if it exists 
    146         $this->p->a_upgrade_options(); 
    147       } elseif (method_exists($this->p->a, 'upgrade_options')) { 
    148         // another flavor of upgrade options function 
    149         $this->p->a->upgrade_options(); 
    150       } else { 
    151         // else run generic upgrade options function 
    152         $options = get_option($this->p->name); 
    153         if ( !$options ) { 
    154           add_option($this->p->name, $this->p->o); 
     171    } 
     172    add_action('admin_notices', array($this, 'a_notify_upgrade')); 
     173  } 
     174 
     175  function a_reset_options() { 
     176    $options = get_option($this->p->name); 
     177    if ( !$options ) { 
     178      add_option($this->p->name, $this->p->a->default_options()); 
     179    } 
     180    else { 
     181      update_option($this->p->name, $this->p->a->default_options()); 
     182    } 
     183    add_action('admin_notices', array($this, 'a_notify_reset')); 
     184  } 
     185 
     186  function valid_syntax($code) { 
     187    return @eval('return true;'.$code); 
     188  } 
     189 
     190  function a_import_options($file_var) { 
     191    if (isset($_FILES[$file_var]) && !empty($_FILES[$file_var]['name'])) { 
     192      $imported_options = join('', file($_FILES[$file_var]['tmp_name'])); 
     193      $code = '$imported_options = '.$imported_options.';'; 
     194      if ($this->valid_syntax($code)) { 
     195        if (eval($code) === null) { 
     196          update_option($this->p->name, $imported_options); 
     197          add_action('admin_notices', array($this, 'a_notify_imported')); 
    155198        } else { 
    156           $default_options = $this->p->a->default_options(); 
    157    
    158           // upgrade regular options 
    159           foreach($default_options as $option_name => $option_value) { 
    160             if(!isset($options[$option_name])) { 
    161               $options[$option_name] = $option_value; 
    162             } 
    163           } 
    164           $options['version'] = $this->p->version; 
    165           // get rid of deprecated options if any 
    166           foreach($default_options['deprecated'] as $option_name) { 
    167             if(isset($options[$option_name])) { 
    168               unset($options[$option_name]); 
    169             } 
    170           } 
    171           update_option($this->p->name, $options); 
    172         } 
    173       } 
    174       add_action('admin_notices', array($this, 'a_notify_upgrade')); 
    175     } 
    176  
    177     function a_reset_options() { 
    178       $options = get_option($this->p->name); 
    179       if ( !$options ) { 
    180         add_option($this->p->name, $this->p->a->default_options()); 
    181       } 
    182       else { 
    183         update_option($this->p->name, $this->p->a->default_options()); 
    184       } 
    185       add_action('admin_notices', array($this, 'a_notify_reset')); 
    186     } 
    187  
    188     function valid_syntax($code) { 
    189       return @eval('return true;'.$code); 
    190     } 
    191    
    192     function a_import_options($file_var) { 
    193       if (isset($_FILES[$file_var]) && !empty($_FILES[$file_var]['name'])) { 
    194         $imported_options = join('', file($_FILES[$file_var]['tmp_name'])); 
    195         $code = '$imported_options = '.$imported_options.';'; 
    196         if ($this->valid_syntax($code)) { 
    197           if (eval($code) === null) { 
    198             update_option($this->p->name, $imported_options); 
    199             add_action('admin_notices', array($this, 'a_notify_imported')); 
    200           } else { 
    201             add_action('admin_notices', array($this, 'a_notify_import_failed')); 
    202           } 
    203         } else { 
    204           add_action('admin_notices', array($this, 'a_notify_import_failed_syntax')); 
     199          add_action('admin_notices', array($this, 'a_notify_import_failed')); 
    205200        } 
    206201      } else { 
    207         add_action('admin_notices', array($this, 'a_notify_import_failed_missing')); 
     202        add_action('admin_notices', array($this, 'a_notify_import_failed_syntax')); 
    208203      } 
    209     } 
     204    } else { 
     205      add_action('admin_notices', array($this, 'a_notify_import_failed_missing')); 
     206    } 
     207  } 
     208 
     209  function a_export_options($file_name) { 
     210    $content = var_export($this->p->o, true); 
     211    header('Cache-Control: public'); 
     212    header('Content-Description: File Transfer'); 
     213    header('Content-disposition: attachment; filename='.$file_name.'.txt'); 
     214    header('Content-Type: text/plain'); 
     215    header('Content-Transfer-Encoding: binary'); 
     216    header('Content-Length: '. mb_strlen($content, 'latin1')); 
     217    echo $content; 
     218    exit(); 
     219  } 
     220 
     221  function a_register_scripts() { 
     222    wp_register_script($this->p->name.'_easy_slider', 
     223      $this->get_plugin_url().'js/easySlider1.5.js', array('jquery')); 
     224  }  
     225     
     226  function a_enqueue_scripts() { 
     227    wp_enqueue_script($this->p->name.'_easy_slider'); 
     228  }  
    210229   
    211     function a_export_options($file_name) { 
    212       $content = var_export($this->p->o, true); 
    213       header('Cache-Control: public'); 
    214       header('Content-Description: File Transfer'); 
    215       header('Content-disposition: attachment; filename='.$file_name.'.txt'); 
    216       header('Content-Type: text/plain'); 
    217       header('Content-Transfer-Encoding: binary'); 
    218       header('Content-Length: '. mb_strlen($content, 'latin1')); 
    219       echo $content; 
    220       exit(); 
    221     } 
    222  
    223     function a_register_scripts() { 
    224       wp_register_script($this->p->name.'_easy_slider', 
    225         $this->get_plugin_url().'js/easySlider1.5.js', array('jquery')); 
    226     }  
     230  function a_register_styles() { 
     231    if (file_exists($this->get_plugin_dir().'css/style-admin.css')) { 
     232      wp_register_style($this->p->name.'_style_admin', 
     233        $this->get_plugin_url().'css/style-admin.css'); 
     234    } 
     235  } 
     236 
     237  function a_enqueue_styles() { 
     238    wp_enqueue_style($this->p->name.'_style_admin'); 
     239  } 
     240 
     241  function a_clear_cache() { 
     242    $cache_location = $this->get_plugin_dir().'cache/'; 
     243 
     244    if(!$dh = @opendir($cache_location)) 
     245    { 
     246      return; 
     247    } 
     248    while (false !== ($obj = readdir($dh))) 
     249    { 
     250      if($obj == '.' || $obj == '..') 
     251      { 
     252        continue; 
     253      } 
     254      @unlink(trailingslashit($cache_location) . $obj); 
     255    } 
     256    closedir($dh); 
     257 
     258    $this->a_clear_super_cache(); 
     259  } 
     260 
     261  function a_clear_super_cache() { 
     262    if ( function_exists('prune_super_cache') ) { 
     263      prune_super_cache(WP_CONTENT_DIR.'/cache/', true ); 
     264    } 
     265  } 
     266 
     267  // other methods 
     268 
     269  // Localization support 
     270  function load_text_domain() { 
     271    // get current language 
     272    $locale = get_locale(); 
     273 
     274    if(!empty($locale)) { 
     275      // locate translation file 
     276      $mofile = $this->get_plugin_dir().'lang/'.str_replace('_', '-', $this->p->name).'-'.$locale.'.mo'; 
     277      // load translation 
     278      if(@file_exists($mofile) && is_readable($mofile)) load_textdomain($this->p->name, $mofile); 
     279    } 
     280  } 
     281 
     282  function get_plugin_dir() { 
     283    $path = trailingslashit(trailingslashit(WP_PLUGIN_DIR).plugin_basename(dirname(__FILE__))); 
     284    $path = preg_replace('/(.*\/plugins\/[^\/]+?\/).+\//', '\1', $path); 
     285    return $path; 
     286  } 
     287 
     288  function get_plugin_url() { 
     289    $url = trailingslashit(trailingslashit(WP_PLUGIN_URL).plugin_basename(dirname(__FILE__))); 
     290    $url = preg_replace('/(\/plugins\/[^\/]+?\/).+\//', '\1', $url); 
     291    return $url; 
     292  } 
     293 
     294  function get_current_page_url() { 
     295    $isHTTPS = (isset($_SERVER["HTTPS"]) && $_SERVER["HTTPS"] == "on"); 
     296    $port = (isset($_SERVER["SERVER_PORT"]) && ((!$isHTTPS && $_SERVER["SERVER_PORT"] != "80") || ($isHTTPS && $_SERVER["SERVER_PORT"] != "443"))); 
     297    $port = ($port) ? ':'.$_SERVER["SERVER_PORT"] : ''; 
     298    $url = ($isHTTPS ? 'https://' : 'http://').$_SERVER["SERVER_NAME"].$port.$_SERVER["REQUEST_URI"]; 
     299    return $url; 
     300  } 
     301 
     302  function make_checkbox($option, $default=false, $attrs=array()) { 
     303    $attrs_str = ' '; 
     304    foreach ($attrs as $name => $val) { 
     305      $attrs_str .= $name.'="'.$val.'" '; 
     306    } 
     307 
     308    if ((!isset($option) && $default) || $option) { 
     309      $checked = 'checked="checked"'; 
     310    } else { 
     311      $checked = ''; 
     312    } 
     313 
     314    return '<input type="checkbox" '.$attrs_str.$checked.' />'; 
     315  } 
     316 
     317  function make_radio($option, $name, $value, $default=false, $label=null) { 
     318    if ((!isset($option) && $default) || ($option == $value)) { 
     319      $checked = 'checked="checked"'; 
     320      $classname = $this->p->name_dashed.'-active'; 
     321    } else { 
     322      $checked = ''; 
     323      $classname = $this->p->name_dashed.'-inactive';  
     324    } 
     325     
     326    $out = '<label class="'.$classname.' label-'.$value.'"><input type="radio" name="'.$name.'" value="'.$value.'" '.$checked.' /> '.$label.'</label>'; 
     327 
     328    return $out; 
     329  } 
     330   
     331  function make_textfield($option, $name, $classname=null, $default=null, $label_before=null, $label_after=null, $advanced=false, $advanced_visible=false) { 
     332    if (empty($option)) 
     333      $value = $default; 
     334    else 
     335      $value = $option; 
     336 
     337    if ($advanced) { 
     338      $classname = 'advanced-option '.$classname; 
     339      if (!$advanced_visible) 
     340        $advanced_style = 'style="display:none"'; 
     341      else 
     342        $advanced_style = 'style="display:inline"'; 
     343    } 
    227344       
    228     function a_enqueue_scripts() { 
    229       wp_enqueue_script($this->p->name.'_easy_slider'); 
    230     }  
    231      
    232     function a_register_styles() { 
    233       if (file_exists($this->get_plugin_dir().'css/style-admin.css')) { 
    234         wp_register_style($this->p->name.'_style_admin', 
    235           $this->get_plugin_url().'css/style-admin.css'); 
    236       } 
    237     } 
    238  
    239     function a_enqueue_styles() { 
    240       wp_enqueue_style($this->p->name.'_style_admin'); 
    241     } 
    242  
    243     function a_clear_cache() { 
    244       $cache_location = $this->get_plugin_dir().'cache/'; 
    245  
    246       if(!$dh = @opendir($cache_location)) 
    247       { 
    248         return; 
    249       } 
    250       while (false !== ($obj = readdir($dh))) 
    251       { 
    252         if($obj == '.' || $obj == '..') 
    253         { 
    254           continue; 
    255         } 
    256         @unlink(trailingslashit($cache_location) . $obj); 
    257       } 
    258       closedir($dh); 
    259  
    260       $this->a_clear_super_cache(); 
    261     } 
    262  
    263     function a_clear_super_cache() { 
    264       if ( function_exists('prune_super_cache') ) { 
    265         prune_super_cache(WP_CONTENT_DIR.'/cache/', true ); 
    266       } 
    267     } 
     345    return '<label class="'.$classname.'-textfield" '.$advanced_style.'>'.$label_before.' '.'<input type="text" name="'.$name.'" value="'.$value.'" /> '.$label_after.'</label>'; 
     346  } 
    268347   
    269     // other methods 
    270    
    271     // Localization support 
    272     function load_text_domain() { 
    273       // get current language 
    274       $locale = get_locale(); 
    275    
    276       if(!empty($locale)) { 
    277         // locate translation file 
    278         $mofile = $this->get_plugin_dir().'lang/'.str_replace('_', '-', $this->p->name).'-'.$locale.'.mo'; 
    279         // load translation 
    280         if(@file_exists($mofile) && is_readable($mofile)) load_textdomain($this->p->name, $mofile); 
    281       } 
    282     } 
    283    
    284     function get_plugin_dir() { 
    285       $path = trailingslashit(trailingslashit(WP_PLUGIN_DIR).plugin_basename(dirname(__FILE__))); 
    286       $path = preg_replace('/(.*\/plugins\/[^\/]+?\/).+\//', '\1', $path); 
    287       return $path; 
    288     } 
    289    
    290     function get_plugin_url() { 
    291       $url = trailingslashit(trailingslashit(WP_PLUGIN_URL).plugin_basename(dirname(__FILE__))); 
    292       $url = preg_replace('/(\/plugins\/[^\/]+?\/).+\//', '\1', $url); 
    293       return $url; 
    294     } 
    295  
    296     function get_current_page_url() { 
    297       $isHTTPS = (isset($_SERVER["HTTPS"]) && $_SERVER["HTTPS"] == "on"); 
    298       $port = (isset($_SERVER["SERVER_PORT"]) && ((!$isHTTPS && $_SERVER["SERVER_PORT"] != "80") || ($isHTTPS && $_SERVER["SERVER_PORT"] != "443"))); 
    299       $port = ($port) ? ':'.$_SERVER["SERVER_PORT"] : ''; 
    300       $url = ($isHTTPS ? 'https://' : 'http://').$_SERVER["SERVER_NAME"].$port.$_SERVER["REQUEST_URI"]; 
    301       return $url; 
    302     } 
    303  
    304     function make_checkbox($option, $default=false, $attrs=array()) { 
    305       $attrs_str = ' '; 
    306       foreach ($attrs as $name => $val) { 
    307         $attrs_str .= $name.'="'.$val.'" '; 
    308       } 
    309  
    310       if ((!isset($option) && $default) || $option) { 
    311         $checked = 'checked="checked"'; 
    312       } else { 
    313         $checked = ''; 
    314       } 
    315  
    316       return '<input type="checkbox" '.$attrs_str.$checked.' />'; 
    317     } 
    318  
    319     function make_radio($option, $name, $value, $default=false, $label=null) { 
    320       if ((!isset($option) && $default) || ($option == $value)) { 
    321         $checked = 'checked="checked"'; 
    322         $classname = $this->p->name_dashed.'-active'; 
    323       } else { 
    324         $checked = ''; 
    325         $classname = $this->p->name_dashed.'-inactive';  
    326       } 
    327        
    328       $out = '<label class="'.$classname.' label-'.$value.'"><input type="radio" name="'.$name.'" value="'.$value.'" '.$checked.' /> '.$label.'</label>'; 
    329  
    330       return $out; 
    331     } 
    332      
    333     function make_textfield($option, $name, $classname=null, $default=null, $label_before=null, $label_after=null, $advanced=false, $advanced_visible=false) { 
    334       if (empty($option)) 
    335         $value = $default; 
    336       else 
    337         $value = $option; 
    338  
    339       if ($advanced) { 
    340         $classname = 'advanced-option '.$classname; 
    341         if (!$advanced_visible) 
    342           $advanced_style = 'style="display:none"'; 
    343         else 
    344           $advanced_style = 'style="display:inline"'; 
    345       } 
    346          
    347       return '<label class="'.$classname.'-textfield" '.$advanced_style.'>'.$label_before.' '.'<input type="text" name="'.$name.'" value="'.$value.'" /> '.$label_after.'</label>'; 
    348     } 
    349      
    350     function make_select($option, $value, $default=null, $attrs=array()) { 
    351       $attrs_str = ' '; 
    352       foreach ($attrs as $name => $val) { 
    353         $attrs_str .= $name.'="'.$val.'" '; 
    354       } 
    355       if (!strlen($value)) 
    356         $value = $default; 
    357       $out = '<select'.$attrs_str.'>'; 
    358       foreach ($option as $sid => $svalue) { 
    359         if ($value == $sid) { 
    360                     $selected = 'selected="selected"'; 
    361                 } else { 
    362                     $selected = ''; 
    363                 } 
    364         $out .= '<option value="' . $sid . '" ' . $selected . '>' . $svalue . '</option>'; 
    365       } 
    366       $out .= '</select>'; 
    367  
    368         return $out; 
    369     } 
    370  
     348  function make_select($option, $value, $default=null, $attrs=array()) { 
     349    $attrs_str = ' '; 
     350    foreach ($attrs as $name => $val) { 
     351      $attrs_str .= $name.'="'.$val.'" '; 
     352    } 
     353    if (!strlen($value)) 
     354      $value = $default; 
     355    $out = '<select'.$attrs_str.'>'; 
     356    foreach ($option as $sid => $svalue) { 
     357      if ($value == $sid) { 
     358                                      $selected = 'selected="selected"'; 
     359                              } else { 
     360                                      $selected = ''; 
     361                              } 
     362      $out .= '<option value="' . $sid . '" ' . $selected . '>' . $svalue . '</option>'; 
     363    } 
     364    $out .= '</select>'; 
     365 
     366              return $out; 
    371367  } 
    372368 
  • wp-btbuckets/trunk/includes/wp-btbuckets.class.php

    r258834 r376481  
    11<?php 
    2 if (!class_exists('WPBTBuckets')) { 
     2class WPBTBuckets { 
    33 
    4   class WPBTBuckets { 
     4  // settings 
     5  var $homepage = 'http://omninoggin.com/wordpress-plugins/wp-btbuckets-wordpress-plugin/'; 
     6  var $author_homepage = 'http://omninoggin.com/'; 
     7  var $name = 'wp_btbuckets'; 
     8  var $name_dashed = 'wp-btbuckets'; 
     9  var $name_proper = 'WP BTBuckets'; 
     10  var $version = '1.1'; 
     11  var $required_wp_version = '2.9'; 
     12  var $btb_api = 'https://btbuckets.com/services/%s/uk/%s/thaya'; 
    513 
    6     // settings 
    7     var $homepage = 'http://omninoggin.com/wordpress-plugins/wp-btbuckets-wordpress-plugin/'; 
    8     var $author_homepage = 'http://omninoggin.com/'; 
    9     var $name = 'wp_btbuckets'; 
    10     var $name_dashed = 'wp-btbuckets'; 
    11     var $name_proper = 'WP BTBuckets'; 
    12     var $version = '0.1'; 
    13     var $required_wp_version = '2.9'; 
    14     var $btb_api = 'https://btbuckets.com/services/%s/uk/%s/thaya'; 
     14  // variables 
     15  var $o = null; // options 
     16  var $path = null; // plugin page 
    1517 
    16     // variables 
    17     var $o = null; // options 
    18     var $path = null; // plugin page 
     18  // objects 
     19  var $a = null; // admin 
     20  var $c = null; // common 
    1921 
    20     // objects 
    21     var $a = null; // admin 
    22     var $c = null; // common 
     22  function WPBTBuckets() { 
     23    // initialize common functions 
     24    require_once(dirname(__FILE__).'/common.class.php'); 
     25    $this->c = new WPBTBucketsCommon($this); 
     26     
     27    // initialize vaiables 
     28    $this->o = get_option($this->name); 
     29    $this->path = trailingslashit($this->c->get_plugin_dir()); 
    2330 
    24     function WPBTBuckets() { 
    25       // initialize common functions 
    26       require_once(dirname(__FILE__).'/common.class.php'); 
    27       $this->c = new WPBTBucketsCommon($this); 
     31    // load translation 
     32    $this->c->load_text_domain(); 
     33 
     34    // admin mode or public mode? 
     35    if (is_admin()) { 
     36      // create admin object 
     37      require_once(dirname(__FILE__).'/admin.class.php'); 
     38      $this->a = new WPBTBucketsAdmin($this); 
     39    } else { 
     40      // if no options then don't do anything in public 
     41      if ($this->o) { 
     42        // queue up other hooks after all plugins are loaded (per dependencies if any) 
     43        add_action('plugins_loaded', array($this, 'execute')); 
     44      } 
     45    } 
     46  } 
     47 
     48  function execute() { 
     49    // public hooks 
     50 
     51    // track BTBuckets regardless 
     52    add_action('wp_head', array($this, 'insert_tag'), 20); 
     53    add_action('wp_footer', array($this, 'advertise')); 
     54 
     55    if ($this->o['enable_smart_widgets'] && count($this->o['widget_config'])) { 
     56      add_action('init', array($this, 'register_styles')); 
     57      add_action('init', array($this, 'register_scripts')); 
     58      add_action('wp_print_styles', array($this, 'enqueue_styles')); 
     59      add_action('wp_print_scripts', array($this, 'enqueue_scripts')); 
     60      add_action('wp_head', array($this, 'replace_widget_output_callback')); 
     61      add_action('wp_footer', array($this, 'show_and_hide_widgets')); 
     62    } 
     63  } 
     64 
     65  function register_styles() { 
     66    wp_register_style($this->name.'_style', 
     67      $this->c->get_plugin_url().'css/style.css'); 
     68  } 
     69 
     70  function enqueue_styles() { 
     71    wp_enqueue_style($this->name.'_style'); 
     72  } 
     73 
     74  function register_scripts() {} 
     75 
     76  function enqueue_scripts() {} 
     77 
     78  function insert_tag() { 
     79    if ($this->o['tag'] && strlen($this->o['tag'])) { 
     80      printf("<!-- BTBuckets tag-->%s<!-- BTBuckets tag end -->\n", $this->o['tag']); 
     81    } 
     82  } 
     83 
     84  function replace_widget_output_callback() { 
     85    global $wp_registered_widgets; 
     86 
     87    foreach ($wp_registered_widgets as $widget_id => $widget_data) { 
     88      // Save the original widget id 
     89      $wp_registered_widgets[$widget_id]['params'][]['widget_id'] = $widget_id; 
     90      // Store original widget callbacks 
     91      $wp_registered_widgets[$widget_id]['callback_original_wpbtb'] = $wp_registered_widgets[$widget_id]['callback']; 
     92      $wp_registered_widgets[$widget_id]['callback'] = array($this, 'replace_widget_output'); 
     93    } 
     94  } 
     95   
     96  function replace_widget_output() { 
     97    global $wp_registered_widgets; 
     98 
     99    $all_params = func_get_args(); 
     100 
     101    if (is_array($all_params[2])) 
     102      $widget_id = $all_params[2]['widget_id']; 
     103    else 
     104      $widget_id = $all_params[1]['widget_id']; 
     105 
     106    $widget_callback = $wp_registered_widgets[$widget_id]['callback_original_wpbtb']; 
     107 
     108    if (is_callable($widget_callback)) { 
     109      $this->current_widget_id = $widget_id; 
     110      ob_start(array($this, 'prepare_widget')); 
     111      call_user_func_array($widget_callback, $all_params); 
     112      ob_end_flush(); 
     113      $this->current_widget_id = null; 
     114      return true; 
     115    } elseif (!is_callable($widget_callback)) { 
     116      print '<!-- widget context: could not call the original callback function -->'; 
     117      return false; 
     118    } else { 
     119      return false; 
     120    } 
     121  } 
     122   
     123  function prepare_widget($buffer) { 
     124    $widget_id = $this->current_widget_id; 
     125     
     126    if ($this->p->o['debug']) 
     127      $buffer .= $widget_id.'<br/>'; 
    28128       
    29       // initialize vaiables 
    30       $this->o = get_option($this->name); 
    31       $this->path = trailingslashit($this->c->get_plugin_dir()); 
     129    if ($this->o['widget_config'][$widget_id]['widget_mode'] == 'start_hidden') { 
     130      // add style="display:none" to widget block if it starts as hidden 
     131      if (isset($this->o['widget_config'][$widget_id]['lookup'])) { 
     132        // links widget 
     133        $id = implode('|', $this->o['widget_config'][$widget_id]['lookup']); 
     134      } else { 
     135        $id = $widget_id; 
     136      } 
     137      $buffer = preg_replace('/( id=["\']('.$id.')["\'] )/', '$1style="display:none" ', $buffer, 1); 
     138    } 
    32139 
    33       // load translation 
    34       $this->c->load_text_domain(); 
    35  
    36       // admin mode or public mode? 
    37       if (is_admin()) { 
    38         // create admin object 
    39         require_once(dirname(__FILE__).'/admin.class.php'); 
    40         $this->a = new WPBTBucketsAdmin($this); 
    41       } else { 
    42         // if no options then don't do anything in public 
    43         if ($this->o) { 
    44           // queue up other hooks after all plugins are loaded (per dependencies if any) 
    45           add_action('plugins_loaded', array($this, 'execute')); 
     140    return $buffer; 
     141  } 
     142   
     143  function show_and_hide_widgets() { 
     144    $show_list = array(); 
     145    $hide_list = array(); 
     146    foreach ($this->o['buckets'] as $bucket_name => $bucket_config) { 
     147      $show_list[$bucket_name] = array(); 
     148      $hide_list[$bucket_name] = array(); 
     149    } 
     150     
     151    foreach ($this->o['widget_config'] as $w_id => $w_config) { 
     152      if ($w_config) { 
     153        if ($w_config['widget_mode'] == 'start_hidden' && isset($w_config['to_show'])) { 
     154          foreach ($w_config['to_show'] as $bucket => $show) 
     155            if ($show) $show_list[$bucket][] = $w_id; 
     156        } elseif (isset($w_config['to_hide'])) { 
     157          foreach ($w_config['to_hide'] as $bucket => $hide) 
     158            if ($hide) $hide_list[$bucket][] = $w_id; 
    46159        } 
    47160      } 
    48161    } 
     162    require_once($this->path.'views/public/onload.php'); 
     163  } 
     164   
     165  function advertise() { 
     166    if ($this->o['show_link']) { 
     167      printf("<p align='center'><small>Page Optimized by <a href='$this->homepage' title='$this->name_proper WordPress Plugin' style='text-decoration:none;'>$this->name_proper</a> <a href='$this->author_homepage' title='WordPress Plugin' style='text-decoration:none;'>WordPress Plugin</a></small></p>"); 
     168    } 
     169  } 
     170   
     171  function call_btb($method) { 
     172    if (isset($this->o['api_key']) && strlen($method)) { 
     173      $api_url = sprintf($this->btb_api, $method, $this->o['api_key']); 
     174      $buffer = @file_get_contents($api_url); 
     175      $json_obj = @json_decode(substr($buffer, 3)); 
     176      return $json_obj; 
     177    } 
     178  } 
    49179 
    50     function execute() { 
    51       // public hooks 
    52  
    53       // track BTBuckets regardless 
    54       add_action('wp_head', array($this, 'insert_tag'), 20); 
    55       add_action('wp_footer', array($this, 'advertise')); 
    56  
    57       if ($this->o['enable_smart_widgets'] && count($this->o['widget_config'])) { 
    58         add_action('init', array($this, 'register_styles')); 
    59         add_action('init', array($this, 'register_scripts')); 
    60         add_action('wp_print_styles', array($this, 'enqueue_styles')); 
    61         add_action('wp_print_scripts', array($this, 'enqueue_scripts')); 
    62         add_action('wp_head', array($this, 'replace_widget_output_callback')); 
    63         add_action('wp_footer', array($this, 'show_and_hide_widgets')); 
    64       } 
    65     } 
    66    
    67     function register_styles() { 
    68       wp_register_style($this->name.'_style', 
    69         $this->c->get_plugin_url().'css/style.css'); 
    70     } 
    71  
    72     function enqueue_styles() { 
    73       wp_enqueue_style($this->name.'_style'); 
    74     } 
    75  
    76     function register_scripts() {} 
    77  
    78     function enqueue_scripts() {} 
    79  
    80     function insert_tag() { 
    81       if ($this->o['tag'] && strlen($this->o['tag'])) { 
    82         printf("<!-- BTBuckets tag-->%s<!-- BTBuckets tag end -->\n", $this->o['tag']); 
    83       } 
    84     } 
    85  
    86     function replace_widget_output_callback() { 
    87       global $wp_registered_widgets; 
    88  
    89       foreach ($wp_registered_widgets as $widget_id => $widget_data) { 
    90         // Save the original widget id 
    91         $wp_registered_widgets[$widget_id]['params'][]['widget_id'] = $widget_id; 
    92         // Store original widget callbacks 
    93         $wp_registered_widgets[$widget_id]['callback_original_wpbtb'] = $wp_registered_widgets[$widget_id]['callback']; 
    94         $wp_registered_widgets[$widget_id]['callback'] = array($this, 'replace_widget_output'); 
    95       } 
    96     } 
    97      
    98     function replace_widget_output() { 
    99       global $wp_registered_widgets; 
    100  
    101       $all_params = func_get_args(); 
    102  
    103       if (is_array($all_params[2])) 
    104         $widget_id = $all_params[2]['widget_id']; 
    105       else 
    106         $widget_id = $all_params[1]['widget_id']; 
    107  
    108       $widget_callback = $wp_registered_widgets[$widget_id]['callback_original_wpbtb']; 
    109  
    110       if (is_callable($widget_callback)) { 
    111         $this->current_widget_id = $widget_id; 
    112         ob_start(array($this, 'prepare_widget')); 
    113         call_user_func_array($widget_callback, $all_params); 
    114         ob_end_flush(); 
    115         $this->current_widget_id = null; 
    116         return true; 
    117       } elseif (!is_callable($widget_callback)) { 
    118         print '<!-- widget context: could not call the original callback function -->'; 
    119         return false; 
    120       } else { 
    121         return false; 
    122       } 
    123     } 
    124      
    125     function prepare_widget($buffer) { 
    126       $widget_id = $this->current_widget_id; 
    127        
    128       if ($this->p->o['debug']) 
    129         $buffer .= $widget_id.'<br/>'; 
    130          
    131       if ($this->o['widget_config'][$widget_id]['widget_mode'] == 'start_hidden') { 
    132         // add style="display:none" to widget block if it starts as hidden 
    133         if (isset($this->o['widget_config'][$widget_id]['lookup'])) { 
    134           // links widget 
    135           $id = implode('|', $this->o['widget_config'][$widget_id]['lookup']); 
    136         } else { 
    137           $id = $widget_id; 
    138         } 
    139         $buffer = preg_replace('/( id=["\']('.$id.')["\'] )/', '$1style="display:none" ', $buffer, 1); 
    140       } 
    141  
    142       return $buffer; 
    143     } 
    144      
    145     function show_and_hide_widgets() { 
    146       $show_list = array(); 
    147       $hide_list = array(); 
    148       foreach ($this->o['buckets'] as $bucket_name => $bucket_config) { 
    149         $show_list[$bucket_name] = array(); 
    150         $hide_list[$bucket_name] = array(); 
    151       } 
    152        
    153       foreach ($this->o['widget_config'] as $w_id => $w_config) { 
    154         if ($w_config) { 
    155           if ($w_config['widget_mode'] == 'start_hidden' && isset($w_config['to_show'])) { 
    156             foreach ($w_config['to_show'] as $bucket => $show) 
    157               if ($show) $show_list[$bucket][] = $w_id; 
    158           } elseif (isset($w_config['to_hide'])) { 
    159             foreach ($w_config['to_hide'] as $bucket => $hide) 
    160               if ($hide) $hide_list[$bucket][] = $w_id; 
    161           } 
    162         } 
    163       } 
    164       require_once($this->path.'views/public/onload.php'); 
    165     } 
    166      
    167     function advertise() { 
    168       if ($this->o['show_link']) { 
    169         printf("<p align='center'><small>Page Optimized by <a href='$this->homepage' title='$this->name_proper WordPress Plugin' style='text-decoration:none;'>$this->name_proper</a> <a href='$this->author_homepage' title='WordPress Plugin' style='text-decoration:none;'>WordPress Plugin</a></small></p>"); 
    170       } 
    171     } 
    172      
    173     function call_btb($method) { 
    174       if (isset($this->o['api_key']) && strlen($method)) { 
    175         $api_url = sprintf($this->btb_api, $method, $this->o['api_key']); 
    176         $buffer = @file_get_contents($api_url); 
    177         $json_obj = @json_decode(substr($buffer, 3)); 
    178         return $json_obj; 
    179       } 
    180     } 
    181  
    182   } // class WPBTBuckets 
    183  
    184 } // if !class_exists 
     180} // class WPBTBuckets 
    185181?> 
  • wp-btbuckets/trunk/readme.txt

    r260568 r376481  
    44Donate link: http://omninoggin.com/donate/ 
    55Requires at least: 2.9 
    6 Tested up to: 3.0 
    7 Stable Tag: 0.1 
     6Tested up to: 3.1.1 
     7Stable Tag: 1.1 
    88 
    99Integrates BTBuckets behavioral targeting into your WordPress installation. 
     
    4646== Changelog == 
    4747 
     48= 1.1 = 
     49* Fixing "Call to a member function on a non-object" errors caused by a combination of APC, high load, and code structure. 
     50 
    4851= 1.0 = 
    4952* Initial release 
  • wp-btbuckets/trunk/wp-btbuckets.php

    r260568 r376481  
    44Plugin URI: http://omninoggin.com/wordpress-plugins/wp-btbuckets-wordpress-plugin/ 
    55Description: Integrates <a href="http://btbuckets.com/site/signup#utm_source=developer&utm_medium=plugin&utm_campaign=wordpress_thaya">BTBuckets</a> behavioral targeting into your WordPress installation 
    6 Version: 0.1 
     6Version: 1.1 
    77Author: Thaya Kareeson 
    88Author URI: http://omninoggin.com/ 
Note: See TracChangeset for help on using the changeset viewer.