PluginProbe
CSS & JavaScript Toolbox / 12.0.4
CSS & JavaScript Toolbox v12.0.4
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 +222 -123 6.012.0.4 View file →
@@ -1,59 +1,55 @@
1 1 <?php
2 2 /*
3 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: 6.0
7 -Author: Wipeout Media
8 -Author URI: http://css-javascript-toolbox.com/
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: 12.0.4
7 +Author: Wipeout Media
8 +Author URI: https://css-javascript-toolbox.com
9 +Text Domain: css-javascript-toolbox
10 +Domain Path: /locals/languages/
11 +License:
9 12
10 -Copyright (c) 2011, Wipeout Media.
11 -This program is free software; you can redistribute it and/or
12 -modify it under the terms of the GNU General Public License
13 -as published by the Free Software Foundation; either version 2
14 -of the License, or (at your option) any later version.
13 +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.
15 14
16 -This program is distributed in the hope that it will be useful,
17 -but WITHOUT ANY WARRANTY; without even the implied warranty of
18 -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
19 -GNU General Public License for more details.
20 -
21 -You should have received a copy of the GNU General Public License
22 -along with this program; if not, write to the Free Software
23 -Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
15 +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.
24 16 */
25 17
26 18 // Disallow direct access.
27 -defined('ABSPATH') or die("Access denied");
19 +defined( 'ABSPATH' ) or die( 'Access denied' );
28 20
21 +
29 22 /** * */
30 -define('CJTOOLBOX_PLUGIN_BASE', basename(dirname(__FILE__)) . '/' . basename(__FILE__));
23 +define( 'CJTOOLBOX_PLUGIN_BASE', basename( dirname( __FILE__ ) ) . '/' . basename( __FILE__ ) );
31 24
32 25 /** * */
33 -define('CJTOOLBOX_PLUGIN_FILE', __FILE__);
26 +define( 'CJTOOLBOX_PLUGIN_FILE', __FILE__ );
34 27
35 28 /** CJT Name */
36 -define('CJTOOLBOX_NAME', plugin_basename(dirname(__FILE__)));
29 +define( 'CJTOOLBOX_NAME', plugin_basename( dirname( __FILE__ ) ) );
37 30
38 31 /** CJT Text Domain used for localize texts */
39 -define('CJTOOLBOX_TEXT_DOMAIN', CJTOOLBOX_NAME);
32 +define( 'CJTOOLBOX_TEXT_DOMAIN', CJTOOLBOX_NAME );
40 33
41 34 /** */
42 -define('CJTOOLBOX_LANGUAGES', CJTOOLBOX_NAME . '/locals/languages/');
35 +define( 'CJTOOLBOX_LANGUAGES', CJTOOLBOX_NAME . '/locals/languages/' );
43 36
44 37 /** CJT Absoulte path */
45 -define('CJTOOLBOX_PATH', dirname(__FILE__));
38 +define( 'CJTOOLBOX_PATH', dirname( __FILE__ ) );
46 39
47 40 /** Dont use!! @deprecated */
48 -define('CJTOOLBOX_INCLUDE_PATH', CJTOOLBOX_PATH . '/framework');
41 +define( 'CJTOOLBOX_INCLUDE_PATH', CJTOOLBOX_PATH . '/framework' );
49 42
50 43 /** Access Points path */
51 -define('CJTOOLBOX_ACCESS_POINTS', CJTOOLBOX_PATH . '/access.points');
44 +define( 'CJTOOLBOX_ACCESS_POINTS', CJTOOLBOX_PATH . '/access.points' );
52 45
53 46 /** Frmaework path */
54 47 define('CJTOOLBOX_FRAMEWORK', CJTOOLBOX_INCLUDE_PATH); // Alias to include path!
55 48
49 +// Class Autoload Added @since 6.2.
50 +require 'autoload.inc.php';
51 +
56 52 // Import dependencies
57 53 require_once CJTOOLBOX_FRAMEWORK . '/php/includes.class.php';
58 54 require_once CJTOOLBOX_FRAMEWORK . '/events/definition.class.php';
59 55 require_once CJTOOLBOX_FRAMEWORK . '/events/events.class.php';
@@ -61,252 +57,355 @@
61 57 require_once CJTOOLBOX_FRAMEWORK . '/events/hookable.interface.php';
62 58 require_once CJTOOLBOX_FRAMEWORK . '/events/hookable.class.php';
63 59
64 60 // Initialize events engine/system!
65 -CJTWordpressEvents::__init(array('hookType' => CJTWordpressEvents::HOOK_ACTION));
66 -CJTWordpressEvents::$paths['subjects']['core'] = CJTOOLBOX_FRAMEWORK . '/events/subjects';
67 -CJTWordpressEvents::$paths['observers']['core'] = CJTOOLBOX_FRAMEWORK . '/events/observers';
61 +CJTWordpressEvents::_init( array( 'hookType' => CJTWordpressEvents::HOOK_ACTION ) );
62 +CJTWordpressEvents::$paths[ 'subjects' ][ 'core' ] = CJTOOLBOX_FRAMEWORK . '/events/subjects';
63 +CJTWordpressEvents::$paths[ 'observers' ][ 'core' ] = CJTOOLBOX_FRAMEWORK . '/events/observers';
68 64
69 65 /**
70 66 * CJT Plugin interface.
71 -*
67 +*
72 68 * The CJT Plugin is maximum deferred.
73 69 * All functionality here is just to detect if the request should be processed!
74 -*
70 +*
75 71 * The main class is located css-js-toolbox.class.php cssJSToolbox class
76 72 * The plugin is fully developed using Model-View-Controller design pattern.
77 -*
73 +*
78 74 * access.points directory has all the entry points that processed by the Plugin.
79 -*
75 +*
80 76 * @package CJT
81 77 * @author Ahmed Said
82 78 * @version 6
83 79 */
84 -class CJTPlugin extends CJTHookableClass {
80 +class CJTPlugin extends CJTHookableClass
81 +{
85 82
86 83 /**
87 - *
84 + *
88 85 */
89 - const DB_VERSION = '1.0-CE';
90 -
86 + const DB_VERSION = '1.7';
87 +
88 + /**
89 + * put your comment there...
90 + *
91 + * @var mixed
92 + */
93 + CONST ENV_PHP_MIN_VERSION = '5.3';
94 +
91 95 /**
92 - *
96 + *
93 97 */
94 - const VERSION = '6.0 CE' ;
95 -
98 + const FW_Version = '5.0';
99 +
96 100 /**
97 - *
101 + *
98 102 */
103 + const VERSION = '12.0.4';
104 +
105 + /**
106 + *
107 + */
99 108 const DB_VERSION_OPTION_NAME = 'cjtoolbox_db_version';
100 109
101 110 /**
102 - *
111 + *
103 112 */
104 113 const PLUGIN_REQUEST_ID = 'cjtoolbox';
105 -
114 +
106 115 /**
107 116 * put your comment there...
108 - *
117 + *
109 118 * @var mixed
110 119 */
111 120 protected $accessPoints;
112 -
121 +
113 122 /**
114 123 * put your comment there...
115 - *
124 + *
116 125 * @var mixed
117 126 */
118 127 protected $extensions;
119 -
128 +
120 129 /**
121 130 * put your comment there...
122 - *
131 + *
123 132 * @var mixed
124 133 */
125 134 protected $installed;
126 -
135 +
127 136 /**
128 137 * put your comment there...
129 - *
138 + *
130 139 * @var CJTPlugin
131 140 */
132 141 protected static $instance;
133 -
142 +
134 143 /**
135 144 * put your comment there...
136 - *
145 + *
137 146 * @var mixed
138 147 */
139 148 protected $mainAC;
140 -
149 +
141 150 /**
142 151 * put your comment there...
143 - *
152 + *
144 153 * @var mixed
145 154 */
146 - protected $onloaddbversion = array('parameters' => array('dbVersion'));
147 -
155 + protected $onloaddbversion = array( 'parameters' => array( 'dbVersion' ) );
156 +
148 157 /**
149 158 * put your comment there...
150 - *
159 + *
151 160 * @var mixed
152 161 */
153 - protected $onimportbasefile = array('parameters' => array('file'));
154 -
162 + protected $onimportcontroller = array( 'parameters' => array( 'file' ) );
163 +
155 164 /**
156 165 * put your comment there...
157 - *
166 + *
158 167 * @var mixed
159 168 */
160 - protected $onimportcontroller = array('parameters' => array('file'));
161 -
169 + protected $onimportmodel = array( 'parameters' => array( 'file' ) );
170 +
162 171 /**
163 172 * put your comment there...
164 - *
173 + *
165 174 * @var mixed
166 175 */
167 - protected $onimportmodel = array('parameters' => array('file'));
168 -
176 + protected $onload = array( 'parameters' => array( 'instance' ) );
177 +
169 178 /**
170 179 * put your comment there...
171 - *
180 + *
172 181 */
173 - protected function __construct() {
182 + protected function __construct()
183 + {
174 184 // Hookable!
175 185 parent::__construct();
186 +
176 187 // Allow access points to utilize from CJTPlugin functionality
177 188 // even if the call is recursive inside getInstance/construct methods!!!
178 - self::$instance = $this;
179 - // Read vars!
180 - $dbVersion = $this->onloaddbversion(get_option(self::DB_VERSION_OPTION_NAME));
181 - $this->installed = (($dbVersion) == self::DB_VERSION);
189 + self::$instance = $this;
190 +
191 + // Installation version
192 + $dbVersion = $this->onloaddbversion( get_option( self::DB_VERSION_OPTION_NAME ) );
193 + $this->installed = ( ( $dbVersion ) == self::DB_VERSION );
194 +
182 195 // Load plugin and all installed extensions!.
183 196 $this->load();
184 197 $this->loadExtensions();
198 +
185 199 // Run MAIN access point!
186 200 $this->main();
187 201 }
188 -
202 +
189 203 /**
190 204 * put your comment there...
191 - *
205 + *
192 206 */
193 - public function extensions() {
194 - return $this->extensions;
207 + public function & extensions()
208 + {
209 + return $this->extensions;
195 210 }
196 -
211 +
197 212 /**
198 213 * put your comment there...
199 - *
214 + *
200 215 */
201 - public function getAccessPoint($name) {
202 - return $this->accessPoints[$name];
216 + public function getAccessPoint( $name )
217 + {
218 + return $this->accessPoints[ $name ];
203 219 }
204 -
220 +
205 221 /**
206 222 * put your comment there...
207 - *
223 + *
208 224 */
209 - public static function getInstance() {
210 - if (!self::$instance) {
225 + public static function getInstance()
226 + {
227 +
228 + if ( ! self::$instance )
229 + {
211 230 self::$instance = new CJTPlugin();
212 231 }
232 +
213 233 return self::$instance;
214 234 }
215 -
235 +
236 + /**
237 + * put your comment there...
238 + *
239 + */
240 + public static function isCompatibleEnvironment()
241 + {
242 +
243 + if ( version_compare( PHP_VERSION, self::ENV_PHP_MIN_VERSION, '<' ) )
244 + {
245 +
246 + $importHTMLFileCode = 'require "includes" . DIRECTORY_SEPARATOR . "html" . DIRECTORY_SEPARATOR . "incompatible_environment_message.html.php";';
247 +
248 + add_action( 'admin_notices', create_function( '', $importHTMLFileCode ) );
249 +
250 + return false;
251 + }
252 +
253 + return true;
254 + }
216 255 /**
217 256 * put your comment there...
218 - *
257 + *
219 258 */
220 - public function isInstalled() {
221 - return $this->installed;
259 + public function isInstalled()
260 + {
261 + return $this->installed;
222 262 }
223 -
263 +
224 264 /**
225 265 * put your comment there...
226 - *
266 + *
227 267 */
228 - public function listen() {
268 + public function listen()
269 + {
229 270 // For now we've only admin access points! Future versions might has something changed!
230 - if (is_admin()) {
271 + if ( is_admin() )
272 + {
273 +
231 274 // Import access points core classes.
232 275 require_once 'framework/access-points/page.class.php';
233 276 require_once 'framework/access-points/directory-spider.class.php';
277 +
234 278 // Get access points!
235 - $accessPoints = CJTAccessPointsDirectorySpider::getInstance('CJT', CJTOOLBOX_ACCESS_POINTS);
279 + $accessPoints = CJTAccessPointsDirectorySpider::getInstance( 'CJT', CJTOOLBOX_ACCESS_POINTS );
280 +
236 281 // For every access point create instance and LISTEN to the request!
237 - foreach ($accessPoints as $name => $info) {
282 + foreach ( $accessPoints as $name => $info )
283 + {
238 284 /**
239 285 * @var CJTAccessPoint
240 286 */
241 - $this->accessPoints[$name] = $point = $accessPoints->point()->listen();
287 + $this->accessPoints[ $name ] = $point = $accessPoints->point()->listen();
288 +
242 289 // We need to do some work with there is a connected access point.
243 - $point->onconnected = array(&$this, 'onconnected');
290 + $point->onconnected = array( & $this, 'onconnected' );
291 +
244 292 }
293 +
245 294 }
246 - // Chaining!
295 +
247 296 return $this;
248 297 }
249 -
298 +
250 299 /**
251 300 * put your comment there...
252 - *
301 + *
253 302 */
254 - protected function load() {
303 + protected function load()
304 + {
255 305 // Bootstrap the Plugin!
256 - require_once $this->onimportbasefile('css-js-toolbox.class.php');
257 306 cssJSToolbox::getInstance();
307 +
258 308 // Load MVC framework core!
259 - require_once $this->onimportmodel(CJTOOLBOX_MVC_FRAMEWOK . '/model.inc.php');
260 - require_once $this->onimportcontroller(CJTOOLBOX_MVC_FRAMEWOK . '/controller.inc.php');
261 - // Chaining!
309 + require_once $this->onimportmodel( CJTOOLBOX_MVC_FRAMEWOK . '/model.inc.php' );
310 + require_once $this->onimportcontroller( CJTOOLBOX_MVC_FRAMEWOK . '/controller.inc.php' );
311 +
262 312 return $this;
263 313 }
264 -
314 +
265 315 /**
266 316 * put your comment there...
267 - *
317 + *
268 318 */
269 - protected function loadExtensions() {
319 + protected function loadExtensions()
320 + {
270 321 // Load extensions lib!
271 322 require_once 'framework/extensions/extensions.class.php';
323 +
272 324 $this->extensions = new CJTExtensions();
273 - // Load all extensions!
274 325 $this->extensions->load();
275 - // Chaining!
326 +
276 327 return $this;
277 328 }
278 -
329 +
279 330 /**
280 331 * Run MAIN access point!
281 - *
332 + *
282 333 * @return $this
283 334 */
284 - protected function main() {
335 + protected function main()
336 + {
337 + // Fire laod event
338 + $this->onload( $this );
339 +
285 340 // Access point base class is a dependency!
286 341 require_once 'framework/access-points/access-point.class.php';
342 +
287 343 // Run Main Acces Point!
288 - require_once 'access.points/main.accesspoint.php';
344 + include_once 'access.points/main.accesspoint.php';
345 +
289 346 $this->mainAC = new CJTMainAccessPoint();
290 347 $this->mainAC->listen();
291 348 }
292 -
349 +
293 350 /**
294 - * Called When any In-Listen-State (ILS) Access point is
351 + * Called When any In-Listen-State (ILS) Access point is
295 352 * connected (called by Wordpress hooking system).
296 - *
353 + *
297 354 * @return boolean TRUE.
298 355 */
299 - public function onconnected($observer, $state) {
300 - // In all cases that we'll process the request load the localization file.
301 - load_plugin_textdomain(CJTOOLBOX_TEXT_DOMAIN, false, CJTOOLBOX_LANGUAGES);
302 - // Always connet the access point!
356 + public function onconnected( $observer, $state )
357 + {
358 + // Always connect the access point!
303 359 return $state;
304 360 }
305 -
361 +
306 362 }// End Class
307 363
364 +// Dont run if environment (e.g PHP version) is incomaptible
365 +if ( ! CJTPlugin::isCompatibleEnvironment() )
366 +{
367 + return;
368 +}
369 +
308 370 // Initialize events!
309 -CJTPlugin::define('CJTPlugin', array('hookType' => CJTWordpressEvents::HOOK_FILTER));
371 +CJTPlugin::define( 'CJTPlugin', array( 'hookType' => CJTWordpressEvents::HOOK_FILTER ) );
310 372
311 373 // Let's Go!
312 -CJTPlugin::getInstance();
374 +function deprecatedPHPCheck()
375 +{ ?>
376 + <div class="notice notice-error">
377 + <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>
378 + Current PHP Version: <strong><?php echo phpversion(); ?></strong>
379 + </p>
380 + </div>
381 +<?php }
382 +
383 +if ( version_compare( phpversion(), 7, '>=' ) ) {
384 + CJTPlugin::getInstance();
385 +} else {
386 + add_action( 'admin_notices', 'deprecatedPHPCheck' );
387 +}
388 +
389 +add_action( 'upgrader_process_complete', 'upgradeCheck',10, 2 );
390 +
391 +function upgradeCheck( $upgrader_object, $options ) {
392 + $CJTPluginPath = plugin_basename( __FILE__ );
393 +
394 + global $wpdb;
395 + $table_name = $wpdb->base_prefix.'cjtoolbox_blocks';
396 + $query = $wpdb->prepare( 'SHOW TABLES LIKE %s', $wpdb->esc_like( $table_name ) );
397 + $preCheck = get_option( '__existing_cjt_user' );
398 +
399 + if ( $options['action'] == 'update' && $options['type'] == 'plugin' ) {
400 + foreach( $options['plugins'] as $each_plugin ) {
401 + if ( $each_plugin == $CJTPluginPath ) {
402 + $preCheck = get_option( '__existing_cjt_user' );
403 +
404 + // Only create it once.
405 + if ( empty( $preCheck ) ) {
406 + update_option( '__existing_cjt_user', $wpdb->get_var( $query ) === $table_name ? 'true' : 'false' );
407 + }
408 + }
409 + }
410 + }
411 +}