| @@ -1,912 +1,350 @@ | ||
| 1 | 1 | <?php |
| 2 | 2 | /* |
| 3 | - Plugin Name: CSS & JavaScript Toolbox | |
| 4 | - Plugin URI: http://wipeoutmedia.com/whats-new/css-javascript-toolbox/ | |
| 5 | - Description: WordPress plugin to easily add custom CSS and JavaScript to individual pages | |
| 6 | - Version: 0.3 | |
| 7 | - Author: Wipeout Media | |
| 8 | - Author URI: http://wipeoutmedia.com/whats-new/css-javascript-toolbox/ | |
| 3 | +Plugin Name: CSS & JavaScript Toolbox | |
| 4 | +Plugin URI: http://css-javascript-toolbox.com/ | |
| 5 | +Description: CJT Plugin for WordPress to easily add custom CSS and JavaScript to individual pages | |
| 6 | +Version: 8.2 | |
| 7 | +Author: Wipeout Media | |
| 8 | +Author URI: http://css-javascript-toolbox.com | |
| 9 | +License: | |
| 9 | 10 | |
| 10 | - Copyright (c) 2011, Wipeout Media. | |
| 11 | +The Software is package as a WordPress¨ plugin. The PHP code associated with the Software is licensed under the GPL version 2.0 license (as found at http://www.gnu.org/licenses/gpl-2.0.txt GNU/GPLv2 or "GPLv2"). You may redistribute, repackage, and modify the PHP code as you see fit and as consistent with GPLv2. | |
| 11 | 12 | |
| 12 | - This program is free software; you can redistribute it and/or | |
| 13 | - modify it under the terms of the GNU General Public License | |
| 14 | - as published by the Free Software Foundation; either version 2 | |
| 15 | - of the License, or (at your option) any later version. | |
| 13 | +The remaining portions of the Software ("Proprietary Portion"), which includes all images, cascading style sheets, and JavaScript are NOT licensed under GPLv2 and are considered proprietary to Licensor and are solely licensed under the remaining terms of this Agreement. The Proprietary Portion may not be redistributed, repackaged, or otherwise modified. | |
| 14 | +*/ | |
| 16 | 15 | |
| 17 | - This program is distributed in the hope that it will be useful, | |
| 18 | - but WITHOUT ANY WARRANTY; without even the implied warranty of | |
| 19 | - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
| 20 | - GNU General Public License for more details. | |
| 16 | +// Disallow direct access. | |
| 17 | +defined('ABSPATH') or die("Access denied"); | |
| 21 | 18 | |
| 22 | - You should have received a copy of the GNU General Public License | |
| 23 | - along with this program; if not, write to the Free Software | |
| 24 | - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. | |
| 25 | - */ | |
| 19 | +define('CJTOOLBOX_PHP_VERSION_MIN', '5.3'); | |
| 26 | 20 | |
| 21 | +register_activation_hook( __FILE__, 'css_js_toolbox_activate' ); | |
| 27 | 22 | |
| 28 | -//avoid direct calls to this file where wp core files not present | |
| 29 | -if (!function_exists ('add_action')) { | |
| 30 | - header('Status: 403 Forbidden'); | |
| 31 | - header('HTTP/1.1 403 Forbidden'); | |
| 32 | - exit(); | |
| 23 | +function css_js_toolbox_activate( $wp = '3.1', $php = CJTOOLBOX_PHP_VERSION_MIN ) | |
| 24 | +{ | |
| 25 | + global $wp_version; | |
| 26 | + if ( version_compare( PHP_VERSION, $php, '<' ) ) | |
| 27 | + $flag = 'PHP'; | |
| 28 | + elseif | |
| 29 | + ( version_compare( $wp_version, $wp, '<' ) ) | |
| 30 | + $flag = 'WordPress'; | |
| 31 | + else | |
| 32 | + return; | |
| 33 | + $version = 'PHP' == $flag ? $php : $wp; | |
| 34 | + deactivate_plugins( basename( __FILE__ ) ); | |
| 35 | + wp_die('<p>The <strong>CSS & JavaScript Toolbox</strong> plugin requires '.$flag.' version '.$version.' or greater. Please contact support of your hosting to upgrade PHP.</p>','Plugin Activation Error', array( 'response'=>200, 'back_link'=>TRUE ) ); | |
| 33 | 36 | } |
| 34 | 37 | |
| 35 | -define('CJTOOLBOX_VERSION', '0.2'); | |
| 36 | -define('CJTOOLBOX_PATH', plugin_basename( dirname(__FILE__) )); | |
| 37 | -define('CJTOOLBOX_URL', WP_PLUGIN_URL . '/' . plugin_basename( dirname(__FILE__) ) . '/' ); | |
| 38 | - | |
| 39 | -if( !class_exists('cssJSToolbox') ) { | |
| 40 | -class cssJSToolbox { | |
| 41 | - var $settings = array(); | |
| 42 | - var $settings_name; | |
| 43 | - var $cjdata = array(); | |
| 44 | - var $cjdata_name; | |
| 45 | - | |
| 46 | - function __construct() { | |
| 47 | - | |
| 48 | - $this->settings_name = 'cjtoolbox_settings'; | |
| 49 | - $this->cjdata_name = 'cjtoolbox_data'; | |
| 50 | - | |
| 51 | - // Load saved settings | |
| 52 | - $this->getSettings(); | |
| 53 | - | |
| 54 | - // Start this plugin once all other plugins are fully loaded | |
| 55 | - add_action( 'plugins_loaded', array(&$this, 'start_plugin') ); | |
| 56 | - } | |
| 57 | - | |
| 58 | - function __destruct() { | |
| 59 | - // Nothing to do now... | |
| 60 | - } | |
| 61 | - | |
| 62 | - // Save new settings | |
| 63 | - function saveSettings() { | |
| 64 | - update_option($this->settings_name, $this->settings); | |
| 65 | - } | |
| 66 | - | |
| 67 | - // Get back all saved settings | |
| 68 | - function getSettings() { | |
| 69 | - $this->settings = get_option($this->settings_name); | |
| 70 | - } | |
| 71 | - | |
| 72 | - // Save/Get data | |
| 73 | - function saveData() { | |
| 74 | - $this->cjdata = array_values($this->cjdata); | |
| 75 | - update_option($this->cjdata_name, $this->cjdata); | |
| 76 | - } | |
| 77 | - function getData() { | |
| 78 | - $this->cjdata = get_option($this->cjdata_name); | |
| 79 | - } | |
| 80 | - | |
| 81 | - function start_plugin() { | |
| 82 | - if (is_admin() ) { | |
| 83 | - // Load for admin panel | |
| 84 | - add_action('admin_menu', array(&$this, 'add_plugin_menu')); | |
| 85 | - //register the callback been used if options of page been submitted and needs to be processed | |
| 86 | - add_action('admin_post_save_cjtoolbox', array(&$this, 'on_save_changes')); | |
| 87 | - // register ajax save function | |
| 88 | - add_action('wp_ajax_cjtoolbox_save', array(&$this, 'ajax_save_changes')); | |
| 89 | - add_action('wp_ajax_cjtoolbox_save_newcode', array(&$this, 'ajax_save_newcode')); | |
| 90 | - add_action('wp_ajax_cjtoolbox_form', array(&$this, 'ajax_show_form')); | |
| 91 | - add_action('wp_ajax_cjtoolbox_get_code', array(&$this, 'ajax_get_code')); | |
| 92 | - add_action('wp_ajax_cjtoolbox_delete_code', array(&$this, 'ajax_delete_code')); | |
| 93 | - add_action('wp_ajax_cjtoolbox_add_block', array(&$this, 'ajax_add_block')); | |
| 94 | - // Create the tables and sample data | |
| 95 | - } else { | |
| 96 | - // Add the script and style files to footer | |
| 97 | - add_action('wp_head', array(&$this, 'cjtoolbox_insertcode')); | |
| 98 | - } | |
| 99 | - } | |
| 100 | - | |
| 101 | - function cjtoolbox_insertcode() { | |
| 102 | - global $post; | |
| 103 | - // Home page displays a page. | |
| 104 | - $check_for = ''; | |
| 105 | - if(is_home()) { // The blog page. It will be either same as front page or will be a page. | |
| 106 | - $check_for = 'allposts'; | |
| 107 | - } | |
| 108 | - if(is_front_page()) { | |
| 109 | - $check_for = 'frontpage'; | |
| 110 | - } | |
| 111 | - if(is_page()) { | |
| 112 | - $check_for = $post->ID; | |
| 113 | - } | |
| 114 | - if(is_single()) { | |
| 115 | - $check_for = 'allposts'; | |
| 116 | - } | |
| 117 | - | |
| 118 | - $this->getData(); | |
| 119 | - | |
| 120 | - $data = $this->cjdata; | |
| 121 | - foreach($data as $key => $value) { | |
| 122 | - $page_list = $data[$key]['page']; | |
| 123 | - if(is_array($page_list)) { | |
| 124 | - if(is_page() && in_array('allpages', $page_list)) { | |
| 125 | - echo stripslashes($data[$key]['code']); | |
| 126 | - continue; | |
| 127 | - } else if(in_array($check_for, $page_list)) { | |
| 128 | - echo stripslashes($data[$key]['code']); | |
| 129 | - continue; | |
| 130 | - } | |
| 131 | - } | |
| 132 | - if(is_category()) { | |
| 133 | - $this_category = get_query_var('cat'); | |
| 134 | - $category_list = $data[$key]['category']; | |
| 135 | - if(is_array($category_list)) { | |
| 136 | - if(in_array($this_category, $category_list)) { | |
| 137 | - echo stripslashes($data[$key]['code']); | |
| 138 | - continue; | |
| 139 | - } | |
| 140 | - } | |
| 141 | - } | |
| 142 | - | |
| 143 | - $pageURL = 'http'; | |
| 144 | - if ($_SERVER["HTTPS"] == "on") {$pageURL .= "s";} | |
| 145 | - $pageURL .= "://"; | |
| 146 | - if ($_SERVER["SERVER_PORT"] != "80") { | |
| 147 | - $pageURL .= $_SERVER["SERVER_NAME"].":".$_SERVER["SERVER_PORT"].$_SERVER["REQUEST_URI"]; | |
| 148 | - } else { | |
| 149 | - $pageURL .= $_SERVER["SERVER_NAME"].$_SERVER["REQUEST_URI"]; | |
| 150 | - } | |
| 151 | - $links = stripslashes($data[$key]['links']); | |
| 152 | - $link_list = explode("\n", $links); | |
| 153 | - if(in_array($pageURL, $link_list)) { | |
| 154 | - echo stripslashes($data[$key]['code']); | |
| 155 | - continue; | |
| 156 | - } | |
| 157 | - } | |
| 158 | - } | |
| 159 | - | |
| 160 | - // To add sub page & meta boxes | |
| 161 | - function add_plugin_menu() { | |
| 162 | - $this->hook_manage = add_options_page('CSS & JavaScript Toolbox' ,'CSS & JavaScript Toolbox', '10', 'cjtoolbox', array(&$this, 'admin_display')); | |
| 163 | - // register callback gets call prior your own page gets rendered | |
| 164 | - add_action('load-'.$this->hook_manage, array(&$this, 'admin_load_page')); | |
| 165 | - | |
| 166 | - // register callback to show styles needed for the admin page | |
| 167 | - add_action( 'admin_print_styles-' . $this->hook_manage, array(&$this, 'admin_print_styles') ); | |
| 168 | - // Load scripts for admin panel working | |
| 169 | - add_action('admin_print_scripts-' . $this->hook_manage, array(&$this, 'admin_print_scripts')); | |
| 170 | - } | |
| 171 | - | |
| 172 | - //will be executed if wordpress core detects this page has to be rendered | |
| 173 | - function admin_load_page() { | |
| 174 | - //ensure, that the needed javascripts been loaded to allow drag/drop, expand/collapse and hide/show of boxes | |
| 175 | - wp_enqueue_script('common'); | |
| 176 | - wp_enqueue_script('wp-lists'); | |
| 177 | - wp_enqueue_script('postbox'); | |
| 178 | - wp_enqueue_script('thickbox'); | |
| 179 | - wp_enqueue_script('jquery-ui-tabs'); | |
| 180 | - | |
| 181 | - //add several metaboxes now, all metaboxes registered during load page can be switched off/on at "Screen Options" automatically, nothing special to do therefore | |
| 182 | - // add_meta_box('cjtoolbox-contentbox-1', 'CSS & JavaScript Block 1', array(&$this, 'on_contentbox_1_content'), $this->hook_manage, 'normal', 'core'); | |
| 183 | - } | |
| 184 | - | |
| 185 | - // Apply our stylesheet | |
| 186 | - function admin_print_styles() { | |
| 187 | - wp_enqueue_style('thickbox'); | |
| 188 | - wp_enqueue_style( 'cjtoolbox', CJTOOLBOX_URL . 'media/admin.css', '', CJTOOLBOX_VERSION, 'all' ); | |
| 189 | - } | |
| 190 | - | |
| 191 | - // Add javascripts | |
| 192 | - function admin_print_scripts() { | |
| 193 | - wp_enqueue_style('jquery'); | |
| 194 | - wp_print_scripts('jquery'); | |
| 195 | -?> | |
| 196 | -<script type="text/javascript" > | |
| 197 | -jQuery(document).ready(function($) { | |
| 198 | - jQuery('form#cjtoolbox_form').submit(function() { | |
| 199 | - var data = jQuery(this).serialize(); | |
| 200 | - jQuery('#cj-ajax-load').fadeIn(); | |
| 201 | - jQuery.post(ajaxurl, data, function(response) { | |
| 202 | - var success = jQuery('#cj-popup-save'); | |
| 203 | - var loading = jQuery('#cj-ajax-load'); | |
| 204 | - loading.fadeOut(); | |
| 205 | - success.fadeIn(); | |
| 206 | - window.setTimeout(function(){ | |
| 207 | - success.fadeOut(); | |
| 208 | - }, 3000); | |
| 209 | - }); | |
| 210 | - return false; | |
| 211 | - }); | |
| 212 | - | |
| 213 | - //Update Message popup | |
| 214 | - jQuery.fn.center = function () { | |
| 215 | - this.animate({"top":( jQuery(window).height() - this.height() - 200 ) / 2+jQuery(window).scrollTop() + "px"}, 50); | |
| 216 | - this.animate({"left":( jQuery(window).width() - this.width() - 200 ) / 2 + "px"}, 50); | |
| 217 | - return this; | |
| 218 | - } | |
| 219 | - | |
| 220 | - // Update loading | |
| 221 | - jQuery.fn.loadingcenter = function () { | |
| 222 | - this.animate({"top":( jQuery(window).height() - this.height() - 60 ) / 2 + jQuery(window).scrollTop() + "px"}, 50); | |
| 223 | - this.animate({"left":( jQuery(window).width() - this.width() - 60 ) / 2 + "px"}, 50); | |
| 224 | - return this; | |
| 225 | - } | |
| 226 | - | |
| 227 | - | |
| 228 | - jQuery('#cj-popup-save').center(); | |
| 229 | - jQuery('#cj-popup-reset').center(); | |
| 230 | - jQuery('#cj-ajax-load img').loadingcenter(); | |
| 231 | - jQuery(window).scroll(function() { | |
| 232 | - jQuery('#cj-popup-save').center(); | |
| 233 | - jQuery('#cj-popup-reset').center(); | |
| 234 | - jQuery('#cj-ajax-load img').loadingcenter(); | |
| 235 | - }); | |
| 236 | - | |
| 237 | - jQuery('#cjtoolbox-addblock').click(function(e) { | |
| 238 | - var count = jQuery('#cjblock-count').val(); | |
| 239 | - var security = jQuery('#cjsecurity').val(); | |
| 240 | - var data = { | |
| 241 | - action : 'cjtoolbox_add_block', | |
| 242 | - count : count, | |
| 243 | - security : security, | |
| 244 | - }; | |
| 245 | - jQuery('#cj-ajax-load').fadeIn(); | |
| 246 | - jQuery.post(ajaxurl, data, function(response) { | |
| 247 | - var loading = jQuery('#cj-ajax-load'); | |
| 248 | - loading.fadeOut(); | |
| 249 | - if(response == '' || response == 0) { | |
| 250 | - alert('Oops, unable to add CSS & JavaScript Block! Please try again!!!'); | |
| 251 | - } else { | |
| 252 | - jQuery('#normal-sortables').append(response); | |
| 253 | - jQuery(".meta-box-sortables").sortable('refresh'); | |
| 254 | - jQuery('#cjblock-count').val(parseInt(jQuery('#cjblock-count').val()) + 1); | |
| 255 | - } | |
| 256 | - }); | |
| 257 | - return false; // For link to behave inactive | |
| 258 | - }); | |
| 259 | - | |
| 260 | -}); | |
| 261 | - | |
| 262 | -function insert_code(type, id) { | |
| 263 | - var cid = jQuery('#cjtoolbox-'+type+'-'+id+ ' option:selected').val(); | |
| 264 | - var security = jQuery('#cjsecurity').val(); | |
| 265 | - var data = { | |
| 266 | - action : 'cjtoolbox_get_code', | |
| 267 | - type : type, | |
| 268 | - id : cid, | |
| 269 | - security : security, | |
| 270 | - }; | |
| 271 | - jQuery('#cj-ajax-load').fadeIn(); | |
| 272 | - jQuery.post(ajaxurl, data, function(response) { | |
| 273 | - var loading = jQuery('#cj-ajax-load'); | |
| 274 | - loading.fadeOut(); | |
| 275 | - if(response == '' || response == 0) { | |
| 276 | - alert('Oops, unable to fetch selected '+type+' template! Please try again!!!'); | |
| 277 | - } else { | |
| 278 | - jQuery('#cjcode-'+id).insertAtCaret(response); | |
| 279 | - } | |
| 280 | - }); | |
| 281 | - return false; // For link to behave inactive | |
| 38 | +if ( version_compare( PHP_VERSION, CJTOOLBOX_PHP_VERSION_MIN, '<' ) ) | |
| 39 | +{ | |
| 40 | + add_action( 'admin_notices', create_function( '', "echo '<div class=\"error\"><p>".sprintf(__('CSS & JavaScript Toolbox plugin requires PHP %s to function properly. Please contact support your hosting to upgrade PHP', 'css-js-toolbox'), CJTOOLBOX_PHP_VERSION_MIN) . "</p></div>';" ) ); | |
| 41 | + return; | |
| 282 | 42 | } |
| 283 | 43 | |
| 284 | -function delete_code(type, id) { | |
| 285 | - var sure = confirm('Are you sure? Selected template will be deleted permanently!!!'); | |
| 286 | - if(!sure) return false; | |
| 287 | 44 | |
| 288 | - var cid = jQuery('#cjtoolbox-'+type+'-'+id+ ' option:selected').val(); | |
| 289 | - var security = jQuery('#cjsecurity').val(); | |
| 290 | - var data = { | |
| 291 | - action : 'cjtoolbox_delete_code', | |
| 292 | - type : type, | |
| 293 | - id : cid, | |
| 294 | - security : security, | |
| 295 | - }; | |
| 296 | - jQuery('#cj-ajax-load').fadeIn(); | |
| 297 | - jQuery.post(ajaxurl, data, function(response) { | |
| 298 | - var loading = jQuery('#cj-ajax-load'); | |
| 299 | - loading.fadeOut(); | |
| 300 | - if(response == '' || response == 0) { | |
| 301 | - alert('Oops, unable to delete selected '+type+' template! Please try again!!!'); | |
| 302 | - } else { | |
| 303 | - alert('Selected '+type+' template deleted successfully!'); | |
| 304 | - jQuery('.cjtoolbox-'+type).each(function() { | |
| 305 | - jQuery(this).find('option[value='+cid+ ']').remove(); | |
| 306 | - }); | |
| 307 | - } | |
| 308 | - }); | |
| 309 | - return false; // For link to behave inactive | |
| 310 | -} | |
| 45 | +/** * */ | |
| 46 | +define('CJTOOLBOX_PLUGIN_BASE', basename(dirname(__FILE__)) . '/' . basename(__FILE__)); | |
| 311 | 47 | |
| 312 | -function delete_block(id) { | |
| 313 | - var sure = confirm('Are you sure?'); | |
| 314 | - if(sure) { | |
| 315 | - jQuery('#cjtoolbox-'+id).remove(); | |
| 316 | - alert('Please make sure to click "Save All Changes" to delete the block permanently!'); | |
| 48 | +/** * */ | |
| 49 | +define('CJTOOLBOX_PLUGIN_FILE', __FILE__); | |
| 317 | 50 | |
| 318 | - // Reduce total block count by 1 NOTE: Not used now. | |
| 319 | - // jQuery('#cjblock-count').val(parseInt(jQuery('#cjblock-count').val()) - 1); | |
| 320 | - } | |
| 321 | - return false; // For link to behave inactive | |
| 322 | -} | |
| 51 | +/** CJT Name */ | |
| 52 | +define('CJTOOLBOX_NAME', plugin_basename(dirname(__FILE__))); | |
| 323 | 53 | |
| 324 | -jQuery.fn.extend({ | |
| 325 | - insertAtCaret: function(myValue){ | |
| 326 | - return this.each(function(i) { | |
| 327 | - if (document.selection) { | |
| 328 | - this.focus(); | |
| 329 | - sel = document.selection.createRange(); | |
| 330 | - sel.text = myValue; | |
| 331 | - this.focus(); | |
| 332 | - } | |
| 333 | - else if (this.selectionStart || this.selectionStart == '0') { | |
| 334 | - var startPos = this.selectionStart; | |
| 335 | - var endPos = this.selectionEnd; | |
| 336 | - var scrollTop = this.scrollTop; | |
| 337 | - this.value = this.value.substring(0, startPos)+myValue+this.value.substring(endPos,this.value.length); | |
| 338 | - this.focus(); | |
| 339 | - this.selectionStart = startPos + myValue.length; | |
| 340 | - this.selectionEnd = startPos + myValue.length; | |
| 341 | - this.scrollTop = scrollTop; | |
| 342 | - } else { | |
| 343 | - this.value += myValue; | |
| 344 | - this.focus(); | |
| 345 | - } | |
| 346 | - }) | |
| 347 | - } | |
| 348 | -}); | |
| 54 | +/** CJT Text Domain used for localize texts */ | |
| 55 | +define('CJTOOLBOX_TEXT_DOMAIN', CJTOOLBOX_NAME); | |
| 349 | 56 | |
| 350 | -</script> | |
| 351 | -<script type="text/javascript"> | |
| 352 | - jQuery(document).ready(function($) { | |
| 353 | - $('#cjtoolbox_newcode').live('submit', | |
| 354 | - function (event) { | |
| 355 | - event.preventDefault(); | |
| 356 | - var title = $('#cjtoolbox_newcode #new_title').val(); | |
| 357 | - var code = $('#cjtoolbox_newcode #new_code').val(); | |
| 358 | - var type = $('#cjtoolbox_newcode #new_type').val(); | |
| 359 | - var security = $('#cjtoolbox_newcode #new_security').val(); | |
| 360 | - if(title == '') { alert('Please enter title for code!'); return false; } | |
| 361 | - if(code == '') { alert('Please enter code to save!'); return false; } | |
| 57 | +/** */ | |
| 58 | +define('CJTOOLBOX_LANGUAGES', CJTOOLBOX_NAME . '/locals/languages/'); | |
| 362 | 59 | |
| 363 | - var data = { | |
| 364 | - action : 'cjtoolbox_save_newcode', | |
| 365 | - type : type, | |
| 366 | - title : title, | |
| 367 | - code : code, | |
| 368 | - security : security, | |
| 369 | - }; | |
| 370 | - jQuery('#cjtoolbox_popup .ajax-loading-img').fadeIn(); | |
| 371 | - jQuery.post(ajaxurl, data, function(response) { | |
| 372 | - var loading = jQuery('#cjtoolbox_popup .ajax-loading-img'); | |
| 373 | - var lastid = parseInt(response); | |
| 374 | - loading.fadeOut(); | |
| 375 | - if(lastid > 0) { | |
| 376 | - alert('New code saved successfully!!!'); | |
| 377 | - jQuery('.cjtoolbox-'+type).each(function() { | |
| 378 | - jQuery(this).append( '<option value="'+lastid+'">'+title+'</option>' ); | |
| 379 | - }); | |
| 380 | - } else { | |
| 381 | - alert('ISSUE: '+response); | |
| 382 | - } | |
| 383 | - tb_remove(); | |
| 384 | - }); | |
| 385 | - return false; | |
| 386 | - }); | |
| 387 | - }); | |
| 60 | +/** CJT Absoulte path */ | |
| 61 | +define('CJTOOLBOX_PATH', dirname(__FILE__)); | |
| 388 | 62 | |
| 389 | -</script> | |
| 390 | -<?php | |
| 391 | - } | |
| 63 | +/** Dont use!! @deprecated */ | |
| 64 | +define('CJTOOLBOX_INCLUDE_PATH', CJTOOLBOX_PATH . '/framework'); | |
| 392 | 65 | |
| 393 | - // Display the admin page for all options | |
| 394 | - function admin_display() { | |
| 395 | - $this->getData(); | |
| 396 | - $count = count($this->cjdata); | |
| 66 | +/** Access Points path */ | |
| 67 | +define('CJTOOLBOX_ACCESS_POINTS', CJTOOLBOX_PATH . '/access.points'); | |
| 397 | 68 | |
| 398 | - /** RESET the metabox order to normal, we dont want to retain the order now. Just boxes with data are sufficient.*/ | |
| 399 | - $page = $this->hook_manage; | |
| 400 | - $neworder = array(); | |
| 401 | - for($i = 1; $i <= $count; $i++) { | |
| 402 | - $neworder[] = 'cjtoolbox-' . $i; | |
| 403 | - } | |
| 404 | - $order['normal'] = implode(',', $neworder); | |
| 405 | - $user = wp_get_current_user(); | |
| 406 | - update_user_option($user->ID, "meta-box-order_$page", $order, true); | |
| 407 | - /*Block END*/ | |
| 69 | +/** Frmaework path */ | |
| 70 | +define('CJTOOLBOX_FRAMEWORK', CJTOOLBOX_INCLUDE_PATH); // Alias to include path! | |
| 408 | 71 | |
| 409 | - if($count <= 0) $count = 1; // Atleast have one block by default. | |
| 410 | - for($i = 1; $i <= $count; $i++) { | |
| 411 | - add_meta_box('cjtoolbox-'.$i, 'CSS & JavaScript Block #'.$i, array(&$this, 'cjtoolbox_unit'), $this->hook_manage, 'normal', 'core', $i - 1); | |
| 412 | - } | |
| 72 | +// Class Autoload Added @since 6.2. | |
| 73 | +require 'autoload.inc.php'; | |
| 413 | 74 | |
| 414 | - echo '<div id="cjtoolbox-admin" class="wrap">'; | |
| 415 | - echo '<div id="custom-icon" style="background: transparent url(\''. CJTOOLBOX_URL . '/media/CSS_JS_Toolbox_Icon.png\') no-repeat;" class="icon32"><br /></div>'; | |
| 75 | +// Import dependencies | |
| 76 | +require_once CJTOOLBOX_FRAMEWORK . '/php/includes.class.php'; | |
| 77 | +require_once CJTOOLBOX_FRAMEWORK . '/events/definition.class.php'; | |
| 78 | +require_once CJTOOLBOX_FRAMEWORK . '/events/events.class.php'; | |
| 79 | +require_once CJTOOLBOX_FRAMEWORK . '/events/wordpress.class.php'; | |
| 80 | +require_once CJTOOLBOX_FRAMEWORK . '/events/hookable.interface.php'; | |
| 81 | +require_once CJTOOLBOX_FRAMEWORK . '/events/hookable.class.php'; | |
| 416 | 82 | |
| 417 | - switch ($_GET['page']){ | |
| 418 | - case 'cjtoolbox': | |
| 419 | - default: | |
| 420 | - echo '<h2>CSS & JavaScript Toolbox</h2>'; | |
| 421 | - $this->cjtoolbox_manage(); | |
| 422 | - break; | |
| 423 | - } | |
| 83 | +// Initialize events engine/system! | |
| 84 | +CJTWordpressEvents::__init(array('hookType' => CJTWordpressEvents::HOOK_ACTION)); | |
| 85 | +CJTWordpressEvents::$paths['subjects']['core'] = CJTOOLBOX_FRAMEWORK . '/events/subjects'; | |
| 86 | +CJTWordpressEvents::$paths['observers']['core'] = CJTOOLBOX_FRAMEWORK . '/events/observers'; | |
| 424 | 87 | |
| 425 | - echo '</div>'; | |
| 426 | - } | |
| 427 | - | |
| 428 | - | |
| 429 | - // Display the admin page to manage custom css and javscripts | |
| 430 | - function cjtoolbox_manage() { | |
| 431 | - $this->getData(); | |
| 432 | - $count = count($this->cjdata); | |
| 433 | - | |
| 434 | -/* | |
| 435 | -print_r($this->cjdata); | |
| 436 | - | |
| 437 | -echo "<pre>"; | |
| 438 | -$page = $this->hook_manage; | |
| 439 | -$sorted = get_user_option( "meta-box-order_$page" ); | |
| 440 | -print_r($sorted); | |
| 441 | -echo "</pre>"; | |
| 88 | +/** | |
| 89 | +* CJT Plugin interface. | |
| 90 | +* | |
| 91 | +* The CJT Plugin is maximum deferred. | |
| 92 | +* All functionality here is just to detect if the request should be processed! | |
| 93 | +* | |
| 94 | +* The main class is located css-js-toolbox.class.php cssJSToolbox class | |
| 95 | +* The plugin is fully developed using Model-View-Controller design pattern. | |
| 96 | +* | |
| 97 | +* access.points directory has all the entry points that processed by the Plugin. | |
| 98 | +* | |
| 99 | +* @package CJT | |
| 100 | +* @author Ahmed Said | |
| 101 | +* @version 6 | |
| 442 | 102 | */ |
| 443 | - ?> | |
| 103 | +class CJTPlugin extends CJTHookableClass { | |
| 444 | 104 | |
| 445 | - <div id="cjtoolbox_donate"> | |
| 446 | - Like this plugin? Please support our work | |
| 447 | - <form action="https://www.paypal.com/cgi-bin/webscr" method="post"> | |
| 448 | - <input type="hidden" name="cmd" value="_s-xclick"> | |
| 449 | - <input type="hidden" name="hosted_button_id" value="VMXTA3838F6A8"> | |
| 450 | - <input type="image" src="<?php echo CJTOOLBOX_URL;?>/media/Donate_Button.png" border="0" name="submit" alt="Donate!"> | |
| 451 | - <img alt="" border="0" src="https://www.paypalobjects.com/en_AU/i/scr/pixel.gif" width="1" height="1"> | |
| 452 | - </form> | |
| 453 | - </div> | |
| 454 | - <div class="cj-save-popup" id="cj-popup-save"> | |
| 455 | - <div id="cj-save-save">Options Updated</div> | |
| 456 | - </div> | |
| 457 | - <div class="cj-save-popup" id="cj-popup-reset"> | |
| 458 | - <div id="cj-save-reset">Options Reset</div> | |
| 459 | - </div> | |
| 460 | - <div id="cj-ajax-load"> | |
| 461 | - <img src="<?php echo CJTOOLBOX_URL; ?>/media/ajax-loader.gif" class="ajax-loading-img ajax-loading-img-bottom" alt="Working..." /> | |
| 462 | - </div> | |
| 105 | + /** | |
| 106 | + * | |
| 107 | + */ | |
| 108 | + const DB_VERSION = '1.6'; | |
| 109 | + | |
| 110 | + /** | |
| 111 | + * | |
| 112 | + */ | |
| 113 | + const FW_Version = '4.0'; | |
| 114 | + | |
| 115 | + /** | |
| 116 | + * | |
| 117 | + */ | |
| 118 | + const VERSION = '8.2' ; | |
| 119 | + | |
| 120 | + /** | |
| 121 | + * | |
| 122 | + */ | |
| 123 | + const DB_VERSION_OPTION_NAME = 'cjtoolbox_db_version'; | |
| 463 | 124 | |
| 125 | + /** | |
| 126 | + * | |
| 127 | + */ | |
| 128 | + const PLUGIN_REQUEST_ID = 'cjtoolbox'; | |
| 129 | + | |
| 130 | + /** | |
| 131 | + * put your comment there... | |
| 132 | + * | |
| 133 | + * @var mixed | |
| 134 | + */ | |
| 135 | + protected $accessPoints; | |
| 136 | + | |
| 137 | + /** | |
| 138 | + * put your comment there... | |
| 139 | + * | |
| 140 | + * @var mixed | |
| 141 | + */ | |
| 142 | + protected $extensions; | |
| 143 | + | |
| 144 | + /** | |
| 145 | + * put your comment there... | |
| 146 | + * | |
| 147 | + * @var mixed | |
| 148 | + */ | |
| 149 | + protected $installed; | |
| 150 | + | |
| 151 | + /** | |
| 152 | + * put your comment there... | |
| 153 | + * | |
| 154 | + * @var CJTPlugin | |
| 155 | + */ | |
| 156 | + protected static $instance; | |
| 157 | + | |
| 158 | + /** | |
| 159 | + * put your comment there... | |
| 160 | + * | |
| 161 | + * @var mixed | |
| 162 | + */ | |
| 163 | + protected $mainAC; | |
| 164 | + | |
| 165 | + /** | |
| 166 | + * put your comment there... | |
| 167 | + * | |
| 168 | + * @var mixed | |
| 169 | + */ | |
| 170 | + protected $onloaddbversion = array('parameters' => array('dbVersion')); | |
| 171 | + | |
| 172 | + /** | |
| 173 | + * put your comment there... | |
| 174 | + * | |
| 175 | + * @var mixed | |
| 176 | + */ | |
| 177 | + protected $onimportbasefile = array('parameters' => array('file')); | |
| 178 | + | |
| 179 | + /** | |
| 180 | + * put your comment there... | |
| 181 | + * | |
| 182 | + * @var mixed | |
| 183 | + */ | |
| 184 | + protected $onimportcontroller = array('parameters' => array('file')); | |
| 185 | + | |
| 186 | + /** | |
| 187 | + * put your comment there... | |
| 188 | + * | |
| 189 | + * @var mixed | |
| 190 | + */ | |
| 191 | + protected $onimportmodel = array('parameters' => array('file')); | |
| 192 | + | |
| 193 | + /** | |
| 194 | + * put your comment there... | |
| 195 | + * | |
| 196 | + * @var mixed | |
| 197 | + */ | |
| 198 | + protected $onload = array('parameters' => array('instance')); | |
| 464 | 199 | |
| 465 | - <form id="cjtoolbox_form" action="admin-post.php" method="post"> | |
| 466 | - <?php wp_nonce_field('cjtoolbox'); ?> | |
| 467 | - <?php wp_nonce_field('closedpostboxes', 'closedpostboxesnonce', false ); ?> | |
| 468 | - <?php wp_nonce_field('meta-box-order', 'meta-box-order-nonce', false ); ?> | |
| 469 | - <input type="hidden" name="action" value="cjtoolbox_save" /> | |
| 470 | - <input type="hidden" id="cjsecurity" name="security" value="<?php echo wp_create_nonce('cjtoolbox-admin');?>" /> | |
| 471 | - <input type="hidden" id="cjblock-count" name="count" value="<?php echo $count; ?>" /> | |
| 472 | - <div id="poststuff" class="metabox-holder"> | |
| 473 | - <div id="post-body"> | |
| 474 | - <?php do_meta_boxes($this->hook_manage, 'normal', $this->cjdata); ?> | |
| 475 | - </div> | |
| 476 | - <br class="clear"/> | |
| 477 | - <div id="save_bar"> | |
| 478 | - <a class="button-secondary" id="cjtoolbox-addblock">Add New CSS/JS Block</a> | |
| 479 | - <input type="submit" value="Save All Changes" class="button-primary" name="save" /> | |
| 480 | - </div> | |
| 481 | - </div> | |
| 482 | - </form> | |
| 483 | - | |
| 484 | - <div id="cjtoolbox-tips"> | |
| 485 | - <ul> | |
| 486 | - <li>Note: CSS & JavaScript Blocks with EMPTY code will not be saved!</li> | |
| 487 | - <li><b>Warning!</b> Please make sure to validate added CSS & JavaScript codes, the plugin doesn't do that for you!</li> | |
| 488 | - </ul> | |
| 489 | - </div> | |
| 490 | - <script type="text/javascript"> | |
| 491 | - //<![CDATA[ | |
| 492 | - jQuery(document).ready( function($) { | |
| 493 | - // close postboxes that should be closed | |
| 494 | - $('.if-js-closed').removeClass('if-js-closed').addClass('closed'); | |
| 495 | - // postboxes setup | |
| 496 | - postboxes.add_postbox_toggles('<?php echo $this->hook_manage; ?>'); | |
| 497 | - }); | |
| 498 | - //]]> | |
| 499 | - </script> | |
| 500 | - <?php | |
| 200 | + /** | |
| 201 | + * put your comment there... | |
| 202 | + * | |
| 203 | + */ | |
| 204 | + protected function __construct() { | |
| 205 | + // Hookable! | |
| 206 | + parent::__construct(); | |
| 207 | + // Allow access points to utilize from CJTPlugin functionality | |
| 208 | + // even if the call is recursive inside getInstance/construct methods!!! | |
| 209 | + self::$instance = $this; | |
| 210 | + // Read vars! | |
| 211 | + $dbVersion = $this->onloaddbversion(get_option(self::DB_VERSION_OPTION_NAME)); | |
| 212 | + $this->installed = (($dbVersion) == self::DB_VERSION); | |
| 213 | + // Load plugin and all installed extensions!. | |
| 214 | + $this->load(); | |
| 215 | + $this->loadExtensions(); | |
| 216 | + // Run MAIN access point! | |
| 217 | + $this->main(); | |
| 501 | 218 | } |
| 502 | - | |
| 503 | - | |
| 504 | - function cjtoolbox_unit($data = '', $arg = '') { | |
| 505 | - $boxid = -1; // Because block 1 might have some content... | |
| 506 | - if($arg != '') { | |
| 507 | - $boxid = $arg['args']; | |
| 508 | - } | |
| 509 | - $this->getData(); | |
| 510 | - | |
| 511 | - ?> | |
| 512 | - | |
| 513 | -<div class="cjpageblock"> | |
| 514 | - <?php $this->show_page_list($boxid, $this->cjdata[$boxid]['page'], $this->cjdata[$boxid]['category']); ?> | |
| 515 | - <div style="clear:both;"></div> | |
| 516 | -</div> | |
| 517 | -<div class="cjcontainer"> | |
| 518 | -<div class="cjcodeblock"> | |
| 519 | - <div class="cssblock"> | |
| 520 | - <p class="cjtitle">CSS Template <?php $this->show_dropdown_box('css', $boxid);?></p> | |
| 521 | - <p class="cjbutton"><a class="insert_code" title="Insert selected CSS Template" href="#" onclick="return insert_code('css', '<?php echo $boxid;?>');">Insert Code</a> <a class="delete_code" title="Delete selected CSS Template" href="#" onclick="return delete_code('css', '<?php echo $boxid;?>');">Delete Code</a> <a class="add_code thickbox" href="<?php echo get_option('siteurl'); ?>/wp-admin/admin-ajax.php?action=cjtoolbox_form&type=css&width=500&height=350" title="Add New CSS Code Template">New</a></p> | |
| 522 | - </div> | |
| 523 | - <div class="jsblock"> | |
| 524 | - <p class="cjtitle">JS Template <?php $this->show_dropdown_box('js', $boxid);?></p> | |
| 525 | - <p class="cjbutton"><a class="insert_code" title="Insert selected JavaScript Template" href="#" onclick="return insert_code('js', '<?php echo $boxid;?>');">Insert Code</a> <a class="delete_code" title="Delete selected JavaScript Template" href="#" onclick="return delete_code('js', '<?php echo $boxid;?>');">Delete Code</a> <a class="add_code thickbox" href="<?php echo get_option('siteurl'); ?>/wp-admin/admin-ajax.php?action=cjtoolbox_form&type=js&width=500&height=350" title="Add New JavaScript Code Template">New</a></p> | |
| 526 | - </div> | |
| 527 | - <div class="datablock"> | |
| 528 | - <textarea cols="100" rows="12" name="cjtoolbox[<?php echo $boxid;?>][code]" id="cjcode-<?php echo $boxid;?>"><?php echo stripslashes($this->cjdata[$boxid]['code']);?></textarea> | |
| 529 | - </div> | |
| 530 | -</div> | |
| 531 | -</div> | |
| 532 | -<div class="deleteblock"> | |
| 533 | - <p class="cjexample">Click for <a target="_blank" href="http://wipeoutmedia.com/wordpress-plugins/css-javascript-toolbox/" title="Click for Hints & Tips"><strong>Hints & Tips</strong></a></p> | |
| 534 | - <a class="button-secondary" href="#" onclick="return delete_block('<?php echo ($boxid + 1);?>');">Delete This Block</a> | |
| 535 | - <div style="clear:both;"></div> | |
| 536 | -</div> | |
| 537 | - | |
| 538 | - <?php | |
| 219 | + | |
| 220 | + /** | |
| 221 | + * put your comment there... | |
| 222 | + * | |
| 223 | + */ | |
| 224 | + public function & extensions() { | |
| 225 | + return $this->extensions; | |
| 539 | 226 | } |
| 540 | - | |
| 541 | - | |
| 542 | - function show_page_list($boxid, $pages, $categories) { | |
| 543 | - ?> | |
| 544 | -<script type="text/javascript"> | |
| 545 | - jQuery(function() { | |
| 546 | - jQuery( "#tabs-<?php echo $boxid;?>" ).tabs(); | |
| 547 | - }); | |
| 548 | -</script> | |
| 549 | -<div id="tabs-<?php echo $boxid;?>"> | |
| 550 | - <ul> | |
| 551 | - <li><a href="#tabs-<?php echo $boxid;?>-1">Pages</a></li> | |
| 552 | - <li><a href="#tabs-<?php echo $boxid;?>-2">Categories</a></li> | |
| 553 | - <li><a href="#tabs-<?php echo $boxid;?>-3">URL List</a></li> | |
| 554 | - </ul> | |
| 555 | - | |
| 556 | - <div id="tabs-<?php echo $boxid;?>-1"> | |
| 557 | - <p>Add this CSS/JS code to ?</p> | |
| 558 | - <ul class="pagelist"> | |
| 559 | - <li><label><input type="checkbox" name="cjtoolbox[<?php echo $boxid;?>][page][]" value="frontpage" <?php echo (is_array($pages) && in_array('frontpage', $pages)) ? 'checked="checked"' : ''; ?> /> Front Page</label> <a class="l_ext" target="_blank" href="<?php bloginfo('url');?>"></a></li> | |
| 560 | - <li><label><input type="checkbox" name="cjtoolbox[<?php echo $boxid;?>][page][]" value="allposts" <?php echo (is_array($pages) && in_array('allposts', $pages)) ? 'checked="checked"' : ''; ?> /> All Posts</label></li> | |
| 561 | - <li><label><input type="checkbox" name="cjtoolbox[<?php echo $boxid;?>][page][]" value="allpages" <?php echo (is_array($pages) && in_array('allpages', $pages)) ? 'checked="checked"' : ''; ?> /> All Pages</label></li> | |
| 562 | - <?php $this->show_pages_with_checkbox($boxid, $pages); ?> | |
| 563 | - </ul> | |
| 564 | - </div> | |
| 565 | - <div id="tabs-<?php echo $boxid;?>-2"> | |
| 566 | - <p>Add this CSS/JS code to category page?</p> | |
| 567 | - <ul class="pagelist"> | |
| 568 | - <?php $this->show_taxonomy_with_checkbox($boxid, $categories); ?> | |
| 569 | - </ul> | |
| 570 | - </div> | |
| 571 | - <div id="tabs-<?php echo $boxid;?>-3" class="linklist"> | |
| 572 | - <p>Add one URL per line (include http://)</p> | |
| 573 | - <textarea cols="31" rows="9" name="cjtoolbox[<?php echo $boxid;?>][links]" id="cjcode-links-<?php echo $boxid;?>"><?php echo stripslashes($this->cjdata[$boxid]['links']);?></textarea> | |
| 574 | - </div> | |
| 575 | 227 | |
| 576 | -</div> | |
| 577 | - <?php | |
| 228 | + /** | |
| 229 | + * put your comment there... | |
| 230 | + * | |
| 231 | + */ | |
| 232 | + public function getAccessPoint($name) { | |
| 233 | + return $this->accessPoints[$name]; | |
| 578 | 234 | } |
| 579 | - | |
| 580 | - | |
| 581 | - // Copied from nav menu feature of WordPress | |
| 582 | - function show_taxonomy_with_checkbox($boxid, $taxonomy_selected) { | |
| 583 | - $taxonomy_name = 'category'; | |
| 584 | - $args = array( | |
| 585 | - 'child_of' => 0, | |
| 586 | - 'exclude' => '', | |
| 587 | - 'hide_empty' => false, | |
| 588 | - 'hierarchical' => 1, | |
| 589 | - 'include' => '', | |
| 590 | - 'include_last_update_time' => false, | |
| 591 | - 'number' => 9999, | |
| 592 | - 'order' => 'ASC', | |
| 593 | - 'orderby' => 'name', | |
| 594 | - 'pad_counts' => false, | |
| 595 | - ); | |
| 596 | - | |
| 597 | - $terms = get_terms( $taxonomy_name, $args ); | |
| 598 | - | |
| 599 | - if ( ! $terms || is_wp_error($terms) ) { | |
| 600 | - // No items | |
| 601 | - return; | |
| 602 | - } | |
| 603 | - | |
| 604 | - $db_fields = false; | |
| 605 | - if ( is_taxonomy_hierarchical( $taxonomy_name ) ) { | |
| 606 | - $db_fields = array( 'parent' => 'parent', 'id' => 'term_id' ); | |
| 607 | - } | |
| 608 | 235 | |
| 609 | - $walker = new cj_Walker_Nav_Menu_Checklist( $db_fields, $boxid, 'category', $taxonomy_selected ); | |
| 610 | - $args['walker'] = $walker; | |
| 611 | - | |
| 612 | - echo walk_nav_menu_tree( array_map('wp_setup_nav_menu_item', $terms), 0, (object) $args ); | |
| 613 | - } | |
| 614 | - | |
| 615 | - function show_pages_with_checkbox($boxid, $pages_selected) { | |
| 616 | - | |
| 617 | - $post_type_name = 'page'; | |
| 618 | - $args = array( | |
| 619 | - 'order' => 'ASC', | |
| 620 | - 'orderby' => 'title', | |
| 621 | - 'posts_per_page' => 9999, | |
| 622 | - 'post_type' => $post_type_name, | |
| 623 | - 'suppress_filters' => true, | |
| 624 | - 'update_post_term_cache' => false, | |
| 625 | - 'update_post_meta_cache' => false | |
| 626 | - ); | |
| 627 | - | |
| 628 | - // @todo transient caching of these results with proper invalidation on updating of a post of this type | |
| 629 | - $get_posts = new WP_Query; | |
| 630 | - $posts = $get_posts->query( $args ); | |
| 631 | - if ( ! $get_posts->post_count ) { | |
| 632 | - // No items | |
| 633 | - return; | |
| 236 | + /** | |
| 237 | + * put your comment there... | |
| 238 | + * | |
| 239 | + */ | |
| 240 | + public static function getInstance() { | |
| 241 | + if (!self::$instance) { | |
| 242 | + self::$instance = new CJTPlugin(); | |
| 634 | 243 | } |
| 635 | - | |
| 636 | - $db_fields = false; | |
| 637 | - if ( is_post_type_hierarchical( $post_type_name ) ) { | |
| 638 | - $db_fields = array( 'parent' => 'post_parent', 'id' => 'ID' ); | |
| 639 | - } | |
| 640 | - | |
| 641 | - $walker = new cj_Walker_Nav_Menu_Checklist( $db_fields, $boxid, 'page', $pages_selected ); | |
| 642 | - $post_type_object = get_post_type_object($post_type_name); | |
| 643 | - | |
| 644 | - $args['walker'] = $walker; | |
| 645 | - | |
| 646 | - $checkbox_items = walk_nav_menu_tree( array_map('wp_setup_nav_menu_item', $posts), 0, (object) $args ); | |
| 647 | - echo $checkbox_items; | |
| 244 | + return self::$instance; | |
| 648 | 245 | } |
| 649 | - | |
| 650 | - //executed if the post arrives initiated by pressing the submit button of form | |
| 651 | - function on_save_changes() { | |
| 652 | - //user permission check | |
| 653 | - if ( !current_user_can('manage_options') ) | |
| 654 | - wp_die( __('Cheatin’ uh?') ); | |
| 655 | - //cross check the given referer | |
| 656 | - check_admin_referer('cjtoolbox'); | |
| 657 | - | |
| 658 | - // TODO: This is not coded now because we use AJAX. Should be coded to make the plugin work even if javascript is disabled. | |
| 659 | - //process here your on $_POST validation and / or option saving | |
| 660 | - //print_r($_POST); | |
| 661 | - //die(); | |
| 662 | - | |
| 663 | - //lets redirect the post request into get request (you may add additional params at the url, if you need to show save results | |
| 664 | - wp_redirect(add_query_arg( array('updated' => 'true'), $_POST['_wp_http_referer'])); | |
| 246 | + | |
| 247 | + /** | |
| 248 | + * put your comment there... | |
| 249 | + * | |
| 250 | + */ | |
| 251 | + public function isInstalled() { | |
| 252 | + return $this->installed; | |
| 665 | 253 | } |
| 666 | - | |
| 667 | - | |
| 668 | - function ajax_add_block() { | |
| 669 | - check_ajax_referer('cjtoolbox-admin', 'security'); | |
| 670 | - $count = (int) $_POST['count']; | |
| 671 | - if($count == 0) $count = 1; | |
| 672 | - $args = array(); | |
| 673 | - $args['args'] = $count; | |
| 674 | -?> | |
| 675 | -<div id="cjtoolbox-<?php echo $count+1; ?>" class="postbox"> | |
| 676 | - <div class="handlediv" title="Click to toggle"><br /></div><h3 class='hndle'><span>CSS & JavaScript Block #<?php echo $count+1; ?></span></h3> | |
| 677 | - <div class="inside"> | |
| 678 | - <?php $this->cjtoolbox_unit('', $args); ?> | |
| 679 | - </div> | |
| 680 | -</div> | |
| 681 | -<?php | |
| 682 | - die(); | |
| 683 | - } | |
| 684 | - | |
| 685 | - function ajax_save_newcode() { | |
| 686 | - check_ajax_referer('cjtoolbox-popup', 'security'); | |
| 687 | - | |
| 688 | - // Add new row to cjdata table | |
| 689 | - $type = $_POST['type']; | |
| 690 | - $title = $_POST['title']; | |
| 691 | - $code = $_POST['code']; | |
| 692 | - $response = $this->add_cjdata($type, $title, $code); | |
| 693 | - if($response != false) { | |
| 694 | - die($response); | |
| 695 | - } | |
| 696 | - die('Oops, unable to save '.$type.' code template! Please try again!!!'); | |
| 697 | - } | |
| 698 | - | |
| 699 | - | |
| 700 | - function ajax_save_changes() { | |
| 701 | - | |
| 702 | - check_ajax_referer('cjtoolbox-admin', 'security'); | |
| 703 | - if($_POST['action'] == 'cjtoolbox_save') { | |
| 704 | - // Save data and return 1 on success | |
| 705 | - $cjdata = $_POST['cjtoolbox']; | |
| 706 | - foreach($cjdata as $key => $value) { | |
| 707 | - if($value['code'] == '') { | |
| 708 | - unset($cjdata[$key]); | |
| 709 | - } | |
| 254 | + | |
| 255 | + /** | |
| 256 | + * put your comment there... | |
| 257 | + * | |
| 258 | + */ | |
| 259 | + public function listen() { | |
| 260 | + // For now we've only admin access points! Future versions might has something changed! | |
| 261 | + if (is_admin()) { | |
| 262 | + // Import access points core classes. | |
| 263 | + require_once 'framework/access-points/page.class.php'; | |
| 264 | + require_once 'framework/access-points/directory-spider.class.php'; | |
| 265 | + // Get access points! | |
| 266 | + $accessPoints = CJTAccessPointsDirectorySpider::getInstance('CJT', CJTOOLBOX_ACCESS_POINTS); | |
| 267 | + // For every access point create instance and LISTEN to the request! | |
| 268 | + foreach ($accessPoints as $name => $info) { | |
| 269 | + /** | |
| 270 | + * @var CJTAccessPoint | |
| 271 | + */ | |
| 272 | + $this->accessPoints[$name] = $point = $accessPoints->point()->listen(); | |
| 273 | + // We need to do some work with there is a connected access point. | |
| 274 | + $point->onconnected = array(&$this, 'onconnected'); | |
| 710 | 275 | } |
| 711 | - $this->cjdata = $cjdata; | |
| 712 | - $this->saveData(); | |
| 713 | - return 1; die('1'); | |
| 714 | 276 | } |
| 715 | - return 0; // Something wrong! | |
| 716 | - die(); // this is required to return a proper result | |
| 277 | + // Chaining! | |
| 278 | + return $this; | |
| 717 | 279 | } |
| 718 | - | |
| 719 | - function ajax_delete_code() { | |
| 720 | - check_ajax_referer('cjtoolbox-admin', 'security'); | |
| 721 | - $type = $_POST['type']; | |
| 722 | - $id = (int) $_POST['id']; | |
| 723 | - if($id <=0 || ($type != 'js' && $type != 'css')) return 'Invalid Request: Unable to process the request!'; | |
| 724 | - | |
| 725 | - $this->delete_cjdata($type, $id); | |
| 726 | - die('1'); | |
| 280 | + | |
| 281 | + /** | |
| 282 | + * put your comment there... | |
| 283 | + * | |
| 284 | + */ | |
| 285 | + protected function load() { | |
| 286 | + // Bootstrap the Plugin! | |
| 287 | + require_once $this->onimportbasefile('css-js-toolbox.class.php'); | |
| 288 | + cssJSToolbox::getInstance(); | |
| 289 | + // Load MVC framework core! | |
| 290 | + require_once $this->onimportmodel(CJTOOLBOX_MVC_FRAMEWOK . '/model.inc.php'); | |
| 291 | + require_once $this->onimportcontroller(CJTOOLBOX_MVC_FRAMEWOK . '/controller.inc.php'); | |
| 292 | + // Chaining! | |
| 293 | + return $this; | |
| 727 | 294 | } |
| 728 | - | |
| 729 | - function ajax_get_code() { | |
| 730 | - check_ajax_referer('cjtoolbox-admin', 'security'); | |
| 731 | - $type = $_POST['type']; | |
| 732 | - $id = (int) $_POST['id']; | |
| 733 | - if($id <=0 || ($type != 'js' && $type != 'css')) return 'Invalid Request: Unable to process the request!'; | |
| 734 | - | |
| 735 | - $code = $this->get_cjdata($type, $id); | |
| 736 | - die($code); | |
| 295 | + | |
| 296 | + /** | |
| 297 | + * put your comment there... | |
| 298 | + * | |
| 299 | + */ | |
| 300 | + protected function loadExtensions() { | |
| 301 | + // Load extensions lib! | |
| 302 | + require_once 'framework/extensions/extensions.class.php'; | |
| 303 | + $this->extensions = new CJTExtensions(); | |
| 304 | + // Load all extensions! | |
| 305 | + $this->extensions->load(); | |
| 306 | + // Chaining! | |
| 307 | + return $this; | |
| 737 | 308 | } |
| 738 | - | |
| 739 | - function ajax_show_form() { | |
| 740 | - $type = ''; | |
| 741 | - switch($_GET['type']) { | |
| 742 | - case 'js': | |
| 743 | - $type = 'js'; | |
| 744 | - break; | |
| 745 | - case 'css': | |
| 746 | - default: | |
| 747 | - $type = 'css'; | |
| 748 | - break; | |
| 749 | - } | |
| 750 | - ?> | |
| 751 | - <div id="cjtoolbox_popup"> | |
| 752 | - <form id="cjtoolbox_newcode" action="admin-post.php" method="post"> | |
| 753 | - <input id="new_type" type="hidden" name="new_type" value="<?php echo $type;?>" /> | |
| 754 | - <input id="new_security" type="hidden" name="security" value="<?php echo wp_create_nonce('cjtoolbox-popup');?>" /> | |
| 755 | - <p><label>Title <input type="text" id="new_title" name="new_title" value="" size="59" /></label></p> | |
| 756 | - <p><label>Code <textarea cols="57" id="new_code"rows="9" name="new_code"></textarea></label></p> | |
| 757 | - <input type="submit" name="submit" value="Save Code Template" /> | |
| 758 | - <img style="display:none;" src="<?php echo CJTOOLBOX_URL; ?>/media/loading-bottom.gif" class="ajax-loading-img ajax-loading-img-bottom" alt="Working..." /> | |
| 759 | - </form> | |
| 760 | - </div> | |
| 761 | - <?php | |
| 762 | - die(); | |
| 309 | + | |
| 310 | + /** | |
| 311 | + * Run MAIN access point! | |
| 312 | + * | |
| 313 | + * @return $this | |
| 314 | + */ | |
| 315 | + protected function main() { | |
| 316 | + // Fire laod event | |
| 317 | + $this->onload($this); | |
| 318 | + // Access point base class is a dependency! | |
| 319 | + require_once 'framework/access-points/access-point.class.php'; | |
| 320 | + // Run Main Acces Point! | |
| 321 | + include_once 'access.points/main.accesspoint.php'; | |
| 322 | + $this->mainAC = new CJTMainAccessPoint(); | |
| 323 | + $this->mainAC->listen(); | |
| 763 | 324 | } |
| 764 | - | |
| 765 | - function show_dropdown_box($type, $boxid) { | |
| 766 | - global $wpdb; | |
| 767 | - | |
| 768 | - $query = $wpdb->prepare("SELECT id, title FROM {$wpdb->prefix}cjtoolbox_cjdata WHERE type = '{$type}'"); | |
| 769 | - $list = $wpdb->get_results($query); | |
| 770 | - if(count($list)) { | |
| 771 | - echo '<select id="cjtoolbox-'.$type.'-'.$boxid.'" class="cjtoolbox-'.$type.'">'; | |
| 772 | - foreach($list as $def) { | |
| 773 | - echo '<option value="' . $def->id . '">'. $def->title . '</option>'; | |
| 774 | - } | |
| 775 | - echo '</select>'; | |
| 776 | - } | |
| 325 | + | |
| 326 | + /** | |
| 327 | + * Called When any In-Listen-State (ILS) Access point is | |
| 328 | + * connected (called by Wordpress hooking system). | |
| 329 | + * | |
| 330 | + * @return boolean TRUE. | |
| 331 | + */ | |
| 332 | + public function onconnected($observer, $state) | |
| 333 | + { | |
| 334 | + // In all cases that we'll process the request load the localization file. | |
| 335 | + load_plugin_textdomain(CJTOOLBOX_TEXT_DOMAIN, false, CJTOOLBOX_LANGUAGES); | |
| 336 | + | |
| 337 | + do_action( CJTPluggableHelper::ACTION_CJT_TEXT_DOMAIN_LOADED ); | |
| 338 | + | |
| 339 | + // Always connet the access point! | |
| 340 | + return $state; | |
| 341 | + | |
| 777 | 342 | } |
| 343 | + | |
| 344 | +}// End Class | |
| 778 | 345 | |
| 779 | - function add_cjdata($type, $title, $code) { | |
| 780 | - global $wpdb; | |
| 346 | +// Initialize events! | |
| 347 | +CJTPlugin::define('CJTPlugin', array('hookType' => CJTWordpressEvents::HOOK_FILTER)); | |
| 781 | 348 | |
| 782 | - if($type == '' || $title == '' || $code == '') return false; | |
| 783 | - $query = $wpdb->prepare("INSERT INTO {$wpdb->prefix}cjtoolbox_cjdata (type,title,code) VALUES ('%s', '%s', '%s')", $type, $title, $code); | |
| 784 | - $wpdb->query($query); | |
| 785 | - // Get inserted id | |
| 786 | - $lastid = $wpdb->get_var("SELECT id FROM {$wpdb->prefix}cjtoolbox_cjdata ORDER BY id DESC LIMIT 0,1"); | |
| 787 | - return $lastid; | |
| 788 | - } | |
| 789 | - | |
| 790 | - function delete_cjdata($type, $id) { | |
| 791 | - global $wpdb; | |
| 792 | - if($type == '' || $id <= 0) return false; | |
| 793 | - $query = $wpdb->prepare("DELETE FROM {$wpdb->prefix}cjtoolbox_cjdata WHERE type = '%s' AND id = '%d' LIMIT 1", $type, $id); | |
| 794 | - $wpdb->query($query); | |
| 795 | - return true; | |
| 796 | - } | |
| 797 | - | |
| 798 | - function get_cjdata($type, $id) { | |
| 799 | - global $wpdb; | |
| 800 | - | |
| 801 | - if($type == '' || $id <= 0) return false; | |
| 802 | - $query = $wpdb->prepare("SELECT code FROM {$wpdb->prefix}cjtoolbox_cjdata WHERE type = '%s' AND id = '%d' LIMIT 1", $type, $id); | |
| 803 | - $code = $wpdb->get_var($query); | |
| 804 | - return $code; | |
| 805 | - } | |
| 806 | - | |
| 807 | - function activate_plugin() { | |
| 808 | - global $wpdb; | |
| 809 | - $database_version = CJTOOLBOX_VERSION; | |
| 810 | - $installed_db = get_option('cjtoolbox_db_version'); | |
| 811 | - if($database_version != $installed_db) { | |
| 812 | - require_once(ABSPATH . 'wp-admin/includes/upgrade.php'); | |
| 813 | - // Create the table structure | |
| 814 | - $sql = "CREATE TABLE `{$wpdb->prefix}cjtoolbox_cjdata` ( | |
| 815 | - `id` INT(11) UNSIGNED NOT NULL AUTO_INCREMENT , | |
| 816 | - `type` VARCHAR( 15 ) NOT NULL , | |
| 817 | - `title` TINYTEXT NOT NULL , | |
| 818 | - `code` MEDIUMTEXT NOT NULL , | |
| 819 | - PRIMARY KEY ( `id` , `type` ) | |
| 820 | - )"; | |
| 821 | - dbDelta($sql); | |
| 822 | - update_option( "cjtoolbox_db_version", $database_version ); | |
| 823 | - | |
| 824 | - // Add sample code | |
| 825 | - $count = $wpdb->get_var("SELECT count(*) FROM {$wpdb->prefix}cjtoolbox_cjdata WHERE type='css'"); | |
| 826 | - if($count == 0) { | |
| 827 | - $wpdb->query("INSERT INTO {$wpdb->prefix}cjtoolbox_cjdata (type,title,code) VALUES ('css','Inline CSS Declaration','<style type=\"text/css\">\n\n</style>')"); | |
| 828 | - $wpdb->query("INSERT INTO {$wpdb->prefix}cjtoolbox_cjdata (type,title,code) VALUES ('css','External Stylesheet','<link rel=\"stylesheet\" type=\"text/css\" href=\"\"/>')"); | |
| 829 | - } | |
| 830 | - | |
| 831 | - $count = $wpdb->get_var("SELECT count(*) FROM {$wpdb->prefix}cjtoolbox_cjdata WHERE type='js'"); | |
| 832 | - if($count == 0) { | |
| 833 | - $wpdb->query("INSERT INTO {$wpdb->prefix}cjtoolbox_cjdata (type,title,code) VALUES ('js','Inline JavaScript Declaration','<script type=\"text/javascript\">\n\n</script>')"); | |
| 834 | - $wpdb->query("INSERT INTO {$wpdb->prefix}cjtoolbox_cjdata (type,title,code) VALUES ('js','External JavaScript','<script type=\"text/javascript\" src=\"\"></script>')"); | |
| 835 | - } | |
| 836 | - } | |
| 837 | - } | |
| 838 | -}// END Class | |
| 839 | - | |
| 840 | -// Let's start the plugin | |
| 841 | -global $cssJSToolbox; | |
| 842 | -$cssJSToolbox = new cssJSToolbox(); | |
| 843 | - | |
| 844 | -// Activation | |
| 845 | -register_activation_hook(__FILE__, array(&$cssJSToolbox, "activate_plugin")); | |
| 846 | -} | |
| 847 | - | |
| 848 | -/** Following code copied from WordPress core */ | |
| 849 | -/** | |
| 850 | - * Create HTML list of nav menu input items. | |
| 851 | - * | |
| 852 | - * @package WordPress | |
| 853 | - * @since 3.0.0 | |
| 854 | - * @uses Walker_Nav_Menu | |
| 855 | - */ | |
| 856 | -class cj_Walker_Nav_Menu_Checklist extends Walker_Nav_Menu { | |
| 857 | - function __construct( $fields = false, $boxid = 0, $type = 'page', $selected = array() ) { | |
| 858 | - if ( $fields ) { | |
| 859 | - $this->db_fields = $fields; | |
| 860 | - } | |
| 861 | - $this->boxid = $boxid; | |
| 862 | - $this->selected = $selected; | |
| 863 | - $this->type = $type; | |
| 864 | - } | |
| 865 | - | |
| 866 | - function start_lvl( &$output, $depth ) { | |
| 867 | - $indent = str_repeat( "\t", $depth ); | |
| 868 | - $output .= "\n$indent<ul class='children'>\n"; | |
| 869 | - } | |
| 870 | - | |
| 871 | - function end_lvl( &$output, $depth ) { | |
| 872 | - $indent = str_repeat( "\t", $depth ); | |
| 873 | - $output .= "\n$indent</ul>"; | |
| 874 | - } | |
| 875 | - | |
| 876 | - /** | |
| 877 | - * @see Walker::start_el() | |
| 878 | - * @since 3.0.0 | |
| 879 | - * | |
| 880 | - * @param string $output Passed by reference. Used to append additional content. | |
| 881 | - * @param object $item Menu item data object. | |
| 882 | - * @param int $depth Depth of menu item. Used for padding. | |
| 883 | - * @param object $args | |
| 884 | - */ | |
| 885 | - function start_el(&$output, $item, $depth, $args) { | |
| 886 | - | |
| 887 | - $possible_object_id = $item->object_id; | |
| 888 | - | |
| 889 | - $indent = ( $depth ) ? str_repeat( "\t", $depth ) : ''; | |
| 890 | - | |
| 891 | - $output .= $indent . '<li>'; | |
| 892 | - $output .= '<label>'; | |
| 893 | - $output .= '<input type="checkbox" '; | |
| 894 | - if ( ! empty( $item->_add_to_top ) ) { | |
| 895 | - $output .= ' add-to-top'; | |
| 896 | - } | |
| 897 | - $output .= ' name="cjtoolbox['.$this->boxid.']['.$this->type.'][]" value="'. esc_attr( $item->object_id ) .'" '; | |
| 898 | - if(is_array($this->selected)) { | |
| 899 | - $output .= in_array($item->object_id, $this->selected) ? 'checked="checked"' : ''; | |
| 900 | - } | |
| 901 | - $output .= '/> '; | |
| 902 | - $output .= empty( $item->label ) ? esc_html( $item->title ) : esc_html( $item->label ); | |
| 903 | - $permalink = ''; | |
| 904 | - if($this->type == 'category') { | |
| 905 | - $permalink = get_category_link($item->object_id); | |
| 906 | - } else { | |
| 907 | - $permalink = get_permalink($item->object_id); | |
| 908 | - } | |
| 909 | - $output .= '</label> <a class="l_ext" target="_blank" href="'. $permalink .'"></a>'; | |
| 910 | - | |
| 911 | - } | |
| 912 | -} | |
| 349 | +// Let's Go! | |
| 350 | +CJTPlugin::getInstance(); | |