PluginProbe
CSS & JavaScript Toolbox / 11.9
CSS & JavaScript Toolbox v11.9
trunk 0.3 0.8 10 10.1 11 11.2 11.3 11.4 11.5 11.6 11.7 11.8 11.9 11.9.1 12 12.0 12.0.1 12.0.3 12.0.4 12.0.5 12.0.6 12.0.7 6.0 6.0.11 All 60 releases
← All changes | css-js-toolbox.php +319 -814 0.311.9 View file →
@@ -1,912 +1,417 @@
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: https://css-javascript-toolbox.com/
5 +Description: Easily add CSS, JavaScript, HTML and PHP code to unique CJT code blocks and assign them anywhere on your website.
6 +Version: 11.9
7 +Author: Wipeout Media
8 +Stable tag: 11.9
9 +Author URI: https://css-javascript-toolbox.com
10 +License:
9 11
10 - Copyright (c) 2011, Wipeout Media.
12 +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 13
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.
14 +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.
15 +*/
16 16
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.
17 +// Disallow direct access.
18 +defined( 'ABSPATH' ) or die( 'Access denied' );
21 19
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 - */
26 20
21 +/** * */
22 +define( 'CJTOOLBOX_PLUGIN_BASE', basename( dirname( __FILE__ ) ) . '/' . basename( __FILE__ ) );
27 23
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 -}
24 +/** * */
25 +define( 'CJTOOLBOX_PLUGIN_FILE', __FILE__ );
34 26
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__) ) . '/' );
27 +/** CJT Name */
28 +define( 'CJTOOLBOX_NAME', plugin_basename( dirname( __FILE__ ) ) );
38 29
39 -if( !class_exists('cssJSToolbox') ) {
40 -class cssJSToolbox {
41 - var $settings = array();
42 - var $settings_name;
43 - var $cjdata = array();
44 - var $cjdata_name;
30 +/** CJT Text Domain used for localize texts */
31 +define( 'CJTOOLBOX_TEXT_DOMAIN', CJTOOLBOX_NAME );
45 32
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 - }
33 +/** */
34 +define( 'CJTOOLBOX_LANGUAGES', CJTOOLBOX_NAME . '/locals/languages/' );
57 35
58 - function __destruct() {
59 - // Nothing to do now...
60 - }
36 +/** CJT Absoulte path */
37 +define( 'CJTOOLBOX_PATH', dirname( __FILE__ ) );
61 38
62 - // Save new settings
63 - function saveSettings() {
64 - update_option($this->settings_name, $this->settings);
65 - }
39 +/** Dont use!! @deprecated */
40 +define( 'CJTOOLBOX_INCLUDE_PATH', CJTOOLBOX_PATH . '/framework' );
66 41
67 - // Get back all saved settings
68 - function getSettings() {
69 - $this->settings = get_option($this->settings_name);
70 - }
42 +/** Access Points path */
43 +define( 'CJTOOLBOX_ACCESS_POINTS', CJTOOLBOX_PATH . '/access.points' );
71 44
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 - }
45 +/** Frmaework path */
46 +define('CJTOOLBOX_FRAMEWORK', CJTOOLBOX_INCLUDE_PATH); // Alias to include path!
80 47
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 - }
48 +// Class Autoload Added @since 6.2.
49 +require 'autoload.inc.php';
100 50
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 - }
51 +// Import dependencies
52 +require_once CJTOOLBOX_FRAMEWORK . '/php/includes.class.php';
53 +require_once CJTOOLBOX_FRAMEWORK . '/events/definition.class.php';
54 +require_once CJTOOLBOX_FRAMEWORK . '/events/events.class.php';
55 +require_once CJTOOLBOX_FRAMEWORK . '/events/wordpress.class.php';
56 +require_once CJTOOLBOX_FRAMEWORK . '/events/hookable.interface.php';
57 +require_once CJTOOLBOX_FRAMEWORK . '/events/hookable.class.php';
117 58
118 - $this->getData();
59 +// Initialize events engine/system!
60 +CJTWordpressEvents::_init( array( 'hookType' => CJTWordpressEvents::HOOK_ACTION ) );
61 +CJTWordpressEvents::$paths[ 'subjects' ][ 'core' ] = CJTOOLBOX_FRAMEWORK . '/events/subjects';
62 +CJTWordpressEvents::$paths[ 'observers' ][ 'core' ] = CJTOOLBOX_FRAMEWORK . '/events/observers';
119 63
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 - }
64 +/**
65 +* CJT Plugin interface.
66 +*
67 +* The CJT Plugin is maximum deferred.
68 +* All functionality here is just to detect if the request should be processed!
69 +*
70 +* The main class is located css-js-toolbox.class.php cssJSToolbox class
71 +* The plugin is fully developed using Model-View-Controller design pattern.
72 +*
73 +* access.points directory has all the entry points that processed by the Plugin.
74 +*
75 +* @package CJT
76 +* @author Ahmed Said
77 +* @version 6
78 +*/
79 +class CJTPlugin extends CJTHookableClass
80 +{
142 81
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 - }
82 + /**
83 + *
84 + */
85 + const DB_VERSION = '1.7';
159 86
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'));
87 + /**
88 + * put your comment there...
89 + *
90 + * @var mixed
91 + */
92 + CONST ENV_PHP_MIN_VERSION = '5.3';
165 93
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 - }
94 + /**
95 + *
96 + */
97 + const FW_Version = '5.0';
171 98
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');
99 + /**
100 + *
101 + */
102 + const VERSION = '11';
180 103
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 - }
104 + /**
105 + *
106 + */
107 + const DB_VERSION_OPTION_NAME = 'cjtoolbox_db_version';
184 108
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 - }
109 + /**
110 + *
111 + */
112 + const PLUGIN_REQUEST_ID = 'cjtoolbox';
190 113
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 - });
114 + /**
115 + * put your comment there...
116 + *
117 + * @var mixed
118 + */
119 + protected $accessPoints;
212 120
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 - }
121 + /**
122 + * put your comment there...
123 + *
124 + * @var mixed
125 + */
126 + protected $extensions;
219 127
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 - }
128 + /**
129 + * put your comment there...
130 + *
131 + * @var mixed
132 + */
133 + protected $installed;
226 134
135 + /**
136 + * put your comment there...
137 + *
138 + * @var CJTPlugin
139 + */
140 + protected static $instance;
227 141
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 - });
142 + /**
143 + * put your comment there...
144 + *
145 + * @var mixed
146 + */
147 + protected $mainAC;
236 148
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 - });
149 + /**
150 + * put your comment there...
151 + *
152 + * @var mixed
153 + */
154 + protected $onloaddbversion = array( 'parameters' => array( 'dbVersion' ) );
259 155
260 -});
156 + /**
157 + * put your comment there...
158 + *
159 + * @var mixed
160 + */
161 + protected $onimportcontroller = array( 'parameters' => array( 'file' ) );
261 162
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 -}
163 + /**
164 + * put your comment there...
165 + *
166 + * @var mixed
167 + */
168 + protected $onimportmodel = array( 'parameters' => array( 'file' ) );
283 169
284 -function delete_code(type, id) {
285 - var sure = confirm('Are you sure? Selected template will be deleted permanently!!!');
286 - if(!sure) return false;
170 + /**
171 + * put your comment there...
172 + *
173 + * @var mixed
174 + */
175 + protected $onload = array( 'parameters' => array( 'instance' ) );
287 176
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 -}
177 + /**
178 + * put your comment there...
179 + *
180 + */
181 + protected function __construct()
182 + {
183 + // Hookable!
184 + parent::__construct();
311 185
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!');
186 + // Allow access points to utilize from CJTPlugin functionality
187 + // even if the call is recursive inside getInstance/construct methods!!!
188 + self::$instance = $this;
317 189
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 -}
190 + // Installation version
191 + $dbVersion = $this->onloaddbversion( get_option( self::DB_VERSION_OPTION_NAME ) );
192 + $this->installed = ( ( $dbVersion ) == self::DB_VERSION );
323 193
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 -});
194 + // Load plugin and all installed extensions!.
195 + $this->load();
196 + $this->loadExtensions();
349 197
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
198 + // Run MAIN access point!
199 + $this->main();
391 200 }
392 201
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>';
202 + /**
203 + * put your comment there...
204 + *
205 + */
206 + public function & extensions()
207 + {
208 + return $this->extensions;
426 209 }
427 210
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>";
442 -*/
443 - ?>
444 -
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>
463 -
464 -
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 &amp; JavaScript Blocks with EMPTY code will not be saved!</li>
487 - <li><b>Warning!</b> Please make sure to validate added CSS &amp; 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
211 + /**
212 + * put your comment there...
213 + *
214 + */
215 + public function getAccessPoint( $name )
216 + {
217 + return $this->accessPoints[ $name ];
501 218 }
502 219
220 + /**
221 + * put your comment there...
222 + *
223 + */
224 + public static function getInstance()
225 + {
503 226
504 - function cjtoolbox_unit($data = '', $arg = '') {
505 - $boxid = -1; // Because block 1 might have some content...
506 - if($arg != '') {
507 - $boxid = $arg['args'];
227 + if ( ! self::$instance )
228 + {
229 + self::$instance = new CJTPlugin();
508 230 }
509 - $this->getData();
510 231
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 &amp; Tips"><strong>Hints &amp; 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
232 + return self::$instance;
539 233 }
540 234
235 + /**
236 + * put your comment there...
237 + *
238 + */
239 + public static function isCompatibleEnvironment()
240 + {
541 241
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>
242 + if ( version_compare( PHP_VERSION, self::ENV_PHP_MIN_VERSION, '<' ) )
243 + {
555 244
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 -
576 -</div>
577 - <?php
578 - }
245 + $importHTMLFileCode = 'require "includes" . DIRECTORY_SEPARATOR . "html" . DIRECTORY_SEPARATOR . "incompatible_environment_message.html.php";';
579 246
247 + add_action( 'admin_notices', create_function( '', $importHTMLFileCode ) );
580 248
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 - );
249 + return false;
250 + }
596 251
597 - $terms = get_terms( $taxonomy_name, $args );
252 + return true;
253 + }
254 + /**
255 + * put your comment there...
256 + *
257 + */
258 + public function isInstalled()
259 + {
260 + return $this->installed;
261 + }
598 262
599 - if ( ! $terms || is_wp_error($terms) ) {
600 - // No items
601 - return;
602 - }
263 + /**
264 + * put your comment there...
265 + *
266 + */
267 + public function listen()
268 + {
269 + // For now we've only admin access points! Future versions might has something changed!
270 + if ( is_admin() )
271 + {
603 272
604 - $db_fields = false;
605 - if ( is_taxonomy_hierarchical( $taxonomy_name ) ) {
606 - $db_fields = array( 'parent' => 'parent', 'id' => 'term_id' );
607 - }
608 -
609 - $walker = new cj_Walker_Nav_Menu_Checklist( $db_fields, $boxid, 'category', $taxonomy_selected );
610 - $args['walker'] = $walker;
273 + // Import access points core classes.
274 + require_once 'framework/access-points/page.class.php';
275 + require_once 'framework/access-points/directory-spider.class.php';
611 276
612 - echo walk_nav_menu_tree( array_map('wp_setup_nav_menu_item', $terms), 0, (object) $args );
613 - }
277 + // Get access points!
278 + $accessPoints = CJTAccessPointsDirectorySpider::getInstance( 'CJT', CJTOOLBOX_ACCESS_POINTS );
614 279
615 - function show_pages_with_checkbox($boxid, $pages_selected) {
280 + // For every access point create instance and LISTEN to the request!
281 + foreach ( $accessPoints as $name => $info )
282 + {
283 + /**
284 + * @var CJTAccessPoint
285 + */
286 + $this->accessPoints[ $name ] = $point = $accessPoints->point()->listen();
616 287
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 - );
288 + // We need to do some work with there is a connected access point.
289 + $point->onconnected = array( & $this, 'onconnected' );
627 290
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;
634 - }
291 + }
635 292
636 - $db_fields = false;
637 - if ( is_post_type_hierarchical( $post_type_name ) ) {
638 - $db_fields = array( 'parent' => 'post_parent', 'id' => 'ID' );
639 293 }
640 294
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;
295 + return $this;
648 296 }
649 297
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&#8217; uh?') );
655 - //cross check the given referer
656 - check_admin_referer('cjtoolbox');
298 + /**
299 + * put your comment there...
300 + *
301 + */
302 + protected function load()
303 + {
304 + // Bootstrap the Plugin!
305 + cssJSToolbox::getInstance();
657 306
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();
307 + // Load MVC framework core!
308 + require_once $this->onimportmodel( CJTOOLBOX_MVC_FRAMEWOK . '/model.inc.php' );
309 + require_once $this->onimportcontroller( CJTOOLBOX_MVC_FRAMEWOK . '/controller.inc.php' );
662 310
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']));
311 + return $this;
665 312 }
666 313
314 + /**
315 + * put your comment there...
316 + *
317 + */
318 + protected function loadExtensions()
319 + {
320 + // Load extensions lib!
321 + require_once 'framework/extensions/extensions.class.php';
667 322
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 - }
323 + $this->extensions = new CJTExtensions();
324 + $this->extensions->load();
684 325
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!!!');
326 + return $this;
697 327 }
698 328
329 + /**
330 + * Run MAIN access point!
331 + *
332 + * @return $this
333 + */
334 + protected function main()
335 + {
336 + // Fire laod event
337 + $this->onload( $this );
699 338
700 - function ajax_save_changes() {
339 + // Access point base class is a dependency!
340 + require_once 'framework/access-points/access-point.class.php';
701 341
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 - }
710 - }
711 - $this->cjdata = $cjdata;
712 - $this->saveData();
713 - return 1; die('1');
714 - }
715 - return 0; // Something wrong!
716 - die(); // this is required to return a proper result
717 - }
342 + // Run Main Acces Point!
343 + include_once 'access.points/main.accesspoint.php';
718 344
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');
345 + $this->mainAC = new CJTMainAccessPoint();
346 + $this->mainAC->listen();
727 347 }
728 348
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!';
349 + /**
350 + * Called When any In-Listen-State (ILS) Access point is
351 + * connected (called by Wordpress hooking system).
352 + *
353 + * @return boolean TRUE.
354 + */
355 + public function onconnected( $observer, $state )
356 + {
734 357
735 - $code = $this->get_cjdata($type, $id);
736 - die($code);
737 - }
358 + // In all cases that we'll process the request load the localization file.
359 + load_plugin_textdomain( CJTOOLBOX_TEXT_DOMAIN, false, CJTOOLBOX_LANGUAGES );
738 360
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();
763 - }
361 + do_action( CJTPluggableHelper::ACTION_CJT_TEXT_DOMAIN_LOADED );
764 362
765 - function show_dropdown_box($type, $boxid) {
766 - global $wpdb;
363 + // Always connet the access point!
364 + return $state;
767 365
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 - }
777 366 }
778 367
779 - function add_cjdata($type, $title, $code) {
780 - global $wpdb;
368 +}// End Class
781 369
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 - }
370 +// Dont run if environment (e.g PHP version) is incomaptible
371 +if ( ! CJTPlugin::isCompatibleEnvironment() )
372 +{
373 + return;
374 +}
789 375
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 - }
376 +// Initialize events!
377 +CJTPlugin::define( 'CJTPlugin', array( 'hookType' => CJTWordpressEvents::HOOK_FILTER ) );
797 378
798 - function get_cjdata($type, $id) {
799 - global $wpdb;
379 +// Let's Go!
380 +function deprecatedPHPCheck()
381 +{ ?>
382 + <div class="notice notice-error">
383 + <p><strong>CJT</strong>: CSS & JavaScript Toolbox need PHP version 7.3 or greater to operate properly. Please ask your hosting provider to update the PHP version.<br>
384 + Current PHP Version: <strong><?php echo phpversion(); ?></strong>
385 + </p>
386 + </div>
387 +<?php }
800 388
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"));
389 +if ( version_compare( phpversion(), 7, '>=' ) ) {
390 + CJTPlugin::getInstance();
391 +} else {
392 + add_action( 'admin_notices', 'deprecatedPHPCheck' );
846 393 }
847 394
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 - }
395 +add_action( 'upgrader_process_complete', 'upgradeCheck',10, 2 );
865 396
866 - function start_lvl( &$output, $depth ) {
867 - $indent = str_repeat( "\t", $depth );
868 - $output .= "\n$indent<ul class='children'>\n";
869 - }
397 +function upgradeCheck( $upgrader_object, $options ) {
398 + $CJTPluginPath = plugin_basename( __FILE__ );
870 399
871 - function end_lvl( &$output, $depth ) {
872 - $indent = str_repeat( "\t", $depth );
873 - $output .= "\n$indent</ul>";
874 - }
400 + global $wpdb;
401 + $table_name = $wpdb->base_prefix.'cjtoolbox_blocks';
402 + $query = $wpdb->prepare( 'SHOW TABLES LIKE %s', $wpdb->esc_like( $table_name ) );
403 + $preCheck = get_option( '__existing_cjt_user' );
875 404
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) {
405 + if ( $options['action'] == 'update' && $options['type'] == 'plugin' ) {
406 + foreach( $options['plugins'] as $each_plugin ) {
407 + if ( $each_plugin == $CJTPluginPath ) {
408 + $preCheck = get_option( '__existing_cjt_user' );
886 409
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';
410 + // Only create it once.
411 + if ( empty( $preCheck ) ) {
412 + update_option( '__existing_cjt_user', $wpdb->get_var( $query ) === $table_name ? 'true' : 'false' );
413 + }
414 + }
896 415 }
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 416 }
912 417 }