| @@ -1,912 +1,335 @@ | ||
| 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/css-javascript-toolbox-free | |
| 5 | +Description: CJT Plugin for WordPress to easily add custom CSS and JavaScript to individual pages | |
| 6 | +Version: 7.2 | |
| 7 | +Author: Wipeout Media | |
| 8 | +Author URI: http://css-javascript-toolbox.com | |
| 9 | +License: | |
| 9 | 10 | |
| 10 | - Copyright (c) 2011, Wipeout Media. | |
| 11 | +Copyright (c) 2011, Wipeout Media. | |
| 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. | |
| 11 | 16 | |
| 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. | |
| 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 | 21 | |
| 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. | |
| 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 | +*/ | |
| 21 | 26 | |
| 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 | - */ | |
| 27 | +// Disallow direct access. | |
| 28 | +defined('ABSPATH') or die("Access denied"); | |
| 26 | 29 | |
| 30 | +/** * */ | |
| 31 | +define('CJTOOLBOX_PLUGIN_BASE', basename(dirname(__FILE__)) . '/' . basename(__FILE__)); | |
| 27 | 32 | |
| 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(); | |
| 33 | -} | |
| 33 | +/** * */ | |
| 34 | +define('CJTOOLBOX_PLUGIN_FILE', __FILE__); | |
| 34 | 35 | |
| 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__) ) . '/' ); | |
| 36 | +/** CJT Name */ | |
| 37 | +define('CJTOOLBOX_NAME', plugin_basename(dirname(__FILE__))); | |
| 38 | 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; | |
| 39 | +/** CJT Text Domain used for localize texts */ | |
| 40 | +define('CJTOOLBOX_TEXT_DOMAIN', CJTOOLBOX_NAME); | |
| 45 | 41 | |
| 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 | - } | |
| 42 | +/** */ | |
| 43 | +define('CJTOOLBOX_LANGUAGES', CJTOOLBOX_NAME . '/locals/languages/'); | |
| 57 | 44 | |
| 58 | - function __destruct() { | |
| 59 | - // Nothing to do now... | |
| 60 | - } | |
| 45 | +/** CJT Absoulte path */ | |
| 46 | +define('CJTOOLBOX_PATH', dirname(__FILE__)); | |
| 61 | 47 | |
| 62 | - // Save new settings | |
| 63 | - function saveSettings() { | |
| 64 | - update_option($this->settings_name, $this->settings); | |
| 65 | - } | |
| 48 | +/** Dont use!! @deprecated */ | |
| 49 | +define('CJTOOLBOX_INCLUDE_PATH', CJTOOLBOX_PATH . '/framework'); | |
| 66 | 50 | |
| 67 | - // Get back all saved settings | |
| 68 | - function getSettings() { | |
| 69 | - $this->settings = get_option($this->settings_name); | |
| 70 | - } | |
| 51 | +/** Access Points path */ | |
| 52 | +define('CJTOOLBOX_ACCESS_POINTS', CJTOOLBOX_PATH . '/access.points'); | |
| 71 | 53 | |
| 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 | - } | |
| 54 | +/** Frmaework path */ | |
| 55 | +define('CJTOOLBOX_FRAMEWORK', CJTOOLBOX_INCLUDE_PATH); // Alias to include path! | |
| 80 | 56 | |
| 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 | - } | |
| 57 | +// Class Autoload Added @since 6.2. | |
| 58 | +require 'autoload.inc.php'; | |
| 100 | 59 | |
| 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 | - } | |
| 60 | +// Import dependencies | |
| 61 | +require_once CJTOOLBOX_FRAMEWORK . '/php/includes.class.php'; | |
| 62 | +require_once CJTOOLBOX_FRAMEWORK . '/events/definition.class.php'; | |
| 63 | +require_once CJTOOLBOX_FRAMEWORK . '/events/events.class.php'; | |
| 64 | +require_once CJTOOLBOX_FRAMEWORK . '/events/wordpress.class.php'; | |
| 65 | +require_once CJTOOLBOX_FRAMEWORK . '/events/hookable.interface.php'; | |
| 66 | +require_once CJTOOLBOX_FRAMEWORK . '/events/hookable.class.php'; | |
| 117 | 67 | |
| 118 | - $this->getData(); | |
| 68 | +// Initialize events engine/system! | |
| 69 | +CJTWordpressEvents::__init(array('hookType' => CJTWordpressEvents::HOOK_ACTION)); | |
| 70 | +CJTWordpressEvents::$paths['subjects']['core'] = CJTOOLBOX_FRAMEWORK . '/events/subjects'; | |
| 71 | +CJTWordpressEvents::$paths['observers']['core'] = CJTOOLBOX_FRAMEWORK . '/events/observers'; | |
| 119 | 72 | |
| 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 | |
| 282 | -} | |
| 283 | - | |
| 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 | - | |
| 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 | -} | |
| 311 | - | |
| 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!'); | |
| 317 | - | |
| 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 | -} | |
| 323 | - | |
| 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 | -}); | |
| 349 | - | |
| 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; } | |
| 362 | - | |
| 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 | - }); | |
| 388 | - | |
| 389 | -</script> | |
| 390 | -<?php | |
| 391 | - } | |
| 392 | - | |
| 393 | - // Display the admin page for all options | |
| 394 | - function admin_display() { | |
| 395 | - $this->getData(); | |
| 396 | - $count = count($this->cjdata); | |
| 397 | - | |
| 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*/ | |
| 408 | - | |
| 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 | - } | |
| 413 | - | |
| 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>'; | |
| 416 | - | |
| 417 | - switch ($_GET['page']){ | |
| 418 | - case 'cjtoolbox': | |
| 419 | - default: | |
| 420 | - echo '<h2>CSS & JavaScript Toolbox</h2>'; | |
| 421 | - $this->cjtoolbox_manage(); | |
| 422 | - break; | |
| 423 | - } | |
| 424 | - | |
| 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>"; | |
| 73 | +/** | |
| 74 | +* CJT Plugin interface. | |
| 75 | +* | |
| 76 | +* The CJT Plugin is maximum deferred. | |
| 77 | +* All functionality here is just to detect if the request should be processed! | |
| 78 | +* | |
| 79 | +* The main class is located css-js-toolbox.class.php cssJSToolbox class | |
| 80 | +* The plugin is fully developed using Model-View-Controller design pattern. | |
| 81 | +* | |
| 82 | +* access.points directory has all the entry points that processed by the Plugin. | |
| 83 | +* | |
| 84 | +* @package CJT | |
| 85 | +* @author Ahmed Said | |
| 86 | +* @version 6 | |
| 442 | 87 | */ |
| 443 | - ?> | |
| 88 | +class CJTPlugin extends CJTHookableClass { | |
| 444 | 89 | |
| 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> | |
| 90 | + /** | |
| 91 | + * | |
| 92 | + */ | |
| 93 | + const DB_VERSION = '1.6'; | |
| 94 | + | |
| 95 | + /** | |
| 96 | + * | |
| 97 | + */ | |
| 98 | + const Edition = 'free'; | |
| 99 | + | |
| 100 | + /** | |
| 101 | + * | |
| 102 | + */ | |
| 103 | + const FW_Version = '3.0'; | |
| 104 | + | |
| 105 | + /** | |
| 106 | + * | |
| 107 | + */ | |
| 108 | + const VERSION = '7.2-CE' ; | |
| 109 | + | |
| 110 | + /** | |
| 111 | + * | |
| 112 | + */ | |
| 113 | + const DB_VERSION_OPTION_NAME = 'cjtoolbox_db_version'; | |
| 463 | 114 | |
| 115 | + /** | |
| 116 | + * | |
| 117 | + */ | |
| 118 | + const PLUGIN_REQUEST_ID = 'cjtoolbox'; | |
| 119 | + | |
| 120 | + /** | |
| 121 | + * put your comment there... | |
| 122 | + * | |
| 123 | + * @var mixed | |
| 124 | + */ | |
| 125 | + protected $accessPoints; | |
| 126 | + | |
| 127 | + /** | |
| 128 | + * put your comment there... | |
| 129 | + * | |
| 130 | + * @var mixed | |
| 131 | + */ | |
| 132 | + protected $extensions; | |
| 133 | + | |
| 134 | + /** | |
| 135 | + * put your comment there... | |
| 136 | + * | |
| 137 | + * @var mixed | |
| 138 | + */ | |
| 139 | + protected $installed; | |
| 140 | + | |
| 141 | + /** | |
| 142 | + * put your comment there... | |
| 143 | + * | |
| 144 | + * @var CJTPlugin | |
| 145 | + */ | |
| 146 | + protected static $instance; | |
| 147 | + | |
| 148 | + /** | |
| 149 | + * put your comment there... | |
| 150 | + * | |
| 151 | + * @var mixed | |
| 152 | + */ | |
| 153 | + protected $mainAC; | |
| 154 | + | |
| 155 | + /** | |
| 156 | + * put your comment there... | |
| 157 | + * | |
| 158 | + * @var mixed | |
| 159 | + */ | |
| 160 | + protected $onloaddbversion = array('parameters' => array('dbVersion')); | |
| 161 | + | |
| 162 | + /** | |
| 163 | + * put your comment there... | |
| 164 | + * | |
| 165 | + * @var mixed | |
| 166 | + */ | |
| 167 | + protected $onimportbasefile = array('parameters' => array('file')); | |
| 168 | + | |
| 169 | + /** | |
| 170 | + * put your comment there... | |
| 171 | + * | |
| 172 | + * @var mixed | |
| 173 | + */ | |
| 174 | + protected $onimportcontroller = array('parameters' => array('file')); | |
| 175 | + | |
| 176 | + /** | |
| 177 | + * put your comment there... | |
| 178 | + * | |
| 179 | + * @var mixed | |
| 180 | + */ | |
| 181 | + protected $onimportmodel = array('parameters' => array('file')); | |
| 182 | + | |
| 183 | + /** | |
| 184 | + * put your comment there... | |
| 185 | + * | |
| 186 | + * @var mixed | |
| 187 | + */ | |
| 188 | + protected $onload = array('parameters' => array('instance')); | |
| 464 | 189 | |
| 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 | |
| 190 | + /** | |
| 191 | + * put your comment there... | |
| 192 | + * | |
| 193 | + */ | |
| 194 | + protected function __construct() { | |
| 195 | + // Hookable! | |
| 196 | + parent::__construct(); | |
| 197 | + // Allow access points to utilize from CJTPlugin functionality | |
| 198 | + // even if the call is recursive inside getInstance/construct methods!!! | |
| 199 | + self::$instance = $this; | |
| 200 | + // Read vars! | |
| 201 | + $dbVersion = $this->onloaddbversion(get_option(self::DB_VERSION_OPTION_NAME)); | |
| 202 | + $this->installed = (($dbVersion) == self::DB_VERSION); | |
| 203 | + // Load plugin and all installed extensions!. | |
| 204 | + $this->load(); | |
| 205 | + $this->loadExtensions(); | |
| 206 | + // Run MAIN access point! | |
| 207 | + $this->main(); | |
| 501 | 208 | } |
| 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 | |
| 209 | + | |
| 210 | + /** | |
| 211 | + * put your comment there... | |
| 212 | + * | |
| 213 | + */ | |
| 214 | + public function & extensions() { | |
| 215 | + return $this->extensions; | |
| 539 | 216 | } |
| 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 | 217 | |
| 576 | -</div> | |
| 577 | - <?php | |
| 218 | + /** | |
| 219 | + * put your comment there... | |
| 220 | + * | |
| 221 | + */ | |
| 222 | + public function getAccessPoint($name) { | |
| 223 | + return $this->accessPoints[$name]; | |
| 578 | 224 | } |
| 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 | 225 | |
| 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; | |
| 226 | + /** | |
| 227 | + * put your comment there... | |
| 228 | + * | |
| 229 | + */ | |
| 230 | + public static function getInstance() { | |
| 231 | + if (!self::$instance) { | |
| 232 | + self::$instance = new CJTPlugin(); | |
| 634 | 233 | } |
| 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; | |
| 234 | + return self::$instance; | |
| 648 | 235 | } |
| 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'])); | |
| 236 | + | |
| 237 | + /** | |
| 238 | + * put your comment there... | |
| 239 | + * | |
| 240 | + */ | |
| 241 | + public function isInstalled() { | |
| 242 | + return $this->installed; | |
| 665 | 243 | } |
| 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 | - } | |
| 244 | + | |
| 245 | + /** | |
| 246 | + * put your comment there... | |
| 247 | + * | |
| 248 | + */ | |
| 249 | + public function listen() { | |
| 250 | + // For now we've only admin access points! Future versions might has something changed! | |
| 251 | + if (is_admin()) { | |
| 252 | + // Import access points core classes. | |
| 253 | + require_once 'framework/access-points/page.class.php'; | |
| 254 | + require_once 'framework/access-points/directory-spider.class.php'; | |
| 255 | + // Get access points! | |
| 256 | + $accessPoints = CJTAccessPointsDirectorySpider::getInstance('CJT', CJTOOLBOX_ACCESS_POINTS); | |
| 257 | + // For every access point create instance and LISTEN to the request! | |
| 258 | + foreach ($accessPoints as $name => $info) { | |
| 259 | + /** | |
| 260 | + * @var CJTAccessPoint | |
| 261 | + */ | |
| 262 | + $this->accessPoints[$name] = $point = $accessPoints->point()->listen(); | |
| 263 | + // We need to do some work with there is a connected access point. | |
| 264 | + $point->onconnected = array(&$this, 'onconnected'); | |
| 710 | 265 | } |
| 711 | - $this->cjdata = $cjdata; | |
| 712 | - $this->saveData(); | |
| 713 | - return 1; die('1'); | |
| 714 | 266 | } |
| 715 | - return 0; // Something wrong! | |
| 716 | - die(); // this is required to return a proper result | |
| 267 | + // Chaining! | |
| 268 | + return $this; | |
| 717 | 269 | } |
| 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'); | |
| 270 | + | |
| 271 | + /** | |
| 272 | + * put your comment there... | |
| 273 | + * | |
| 274 | + */ | |
| 275 | + protected function load() { | |
| 276 | + // Bootstrap the Plugin! | |
| 277 | + require_once $this->onimportbasefile('css-js-toolbox.class.php'); | |
| 278 | + cssJSToolbox::getInstance(); | |
| 279 | + // Load MVC framework core! | |
| 280 | + require_once $this->onimportmodel(CJTOOLBOX_MVC_FRAMEWOK . '/model.inc.php'); | |
| 281 | + require_once $this->onimportcontroller(CJTOOLBOX_MVC_FRAMEWOK . '/controller.inc.php'); | |
| 282 | + // Chaining! | |
| 283 | + return $this; | |
| 727 | 284 | } |
| 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); | |
| 285 | + | |
| 286 | + /** | |
| 287 | + * put your comment there... | |
| 288 | + * | |
| 289 | + */ | |
| 290 | + protected function loadExtensions() { | |
| 291 | + // Load extensions lib! | |
| 292 | + require_once 'framework/extensions/extensions.class.php'; | |
| 293 | + $this->extensions = new CJTExtensions(); | |
| 294 | + // Load all extensions! | |
| 295 | + $this->extensions->load(); | |
| 296 | + // Chaining! | |
| 297 | + return $this; | |
| 737 | 298 | } |
| 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(); | |
| 299 | + | |
| 300 | + /** | |
| 301 | + * Run MAIN access point! | |
| 302 | + * | |
| 303 | + * @return $this | |
| 304 | + */ | |
| 305 | + protected function main() { | |
| 306 | + // Fire laod event | |
| 307 | + $this->onload($this); | |
| 308 | + // Access point base class is a dependency! | |
| 309 | + require_once 'framework/access-points/access-point.class.php'; | |
| 310 | + // Run Main Acces Point! | |
| 311 | + include_once 'access.points/main.accesspoint.php'; | |
| 312 | + $this->mainAC = new CJTMainAccessPoint(); | |
| 313 | + $this->mainAC->listen(); | |
| 763 | 314 | } |
| 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 | - } | |
| 315 | + | |
| 316 | + /** | |
| 317 | + * Called When any In-Listen-State (ILS) Access point is | |
| 318 | + * connected (called by Wordpress hooking system). | |
| 319 | + * | |
| 320 | + * @return boolean TRUE. | |
| 321 | + */ | |
| 322 | + public function onconnected($observer, $state) { | |
| 323 | + // In all cases that we'll process the request load the localization file. | |
| 324 | + load_plugin_textdomain(CJTOOLBOX_TEXT_DOMAIN, false, CJTOOLBOX_LANGUAGES); | |
| 325 | + // Always connet the access point! | |
| 326 | + return $state; | |
| 777 | 327 | } |
| 328 | + | |
| 329 | +}// End Class | |
| 778 | 330 | |
| 779 | - function add_cjdata($type, $title, $code) { | |
| 780 | - global $wpdb; | |
| 331 | +// Initialize events! | |
| 332 | +CJTPlugin::define('CJTPlugin', array('hookType' => CJTWordpressEvents::HOOK_FILTER)); | |
| 781 | 333 | |
| 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 | -} | |
| 334 | +// Let's Go! | |
| 335 | +CJTPlugin::getInstance(); | |