PluginProbe
CSS & JavaScript Toolbox / 12.0.7
CSS & JavaScript Toolbox v12.0.7
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
css-javascript-toolbox / css-js-toolbox.php

css-js-toolbox.php in CSS & JavaScript Toolbox 12.0.7, at css-js-toolbox.php

418 lines 9.8 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 /*
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: 12.0.7
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:
12
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.
14
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.
16 */
17
18 // Disallow direct access.
19 defined( 'ABSPATH' ) or die( 'Access denied' );
20
21
22 /** * */
23 define( 'CJTOOLBOX_PLUGIN_BASE', basename( dirname( __FILE__ ) ) . '/' . basename( __FILE__ ) );
24
25 /** * */
26 define( 'CJTOOLBOX_PLUGIN_FILE', __FILE__ );
27
28 /** CJT Name */
29 define( 'CJTOOLBOX_NAME', plugin_basename( dirname( __FILE__ ) ) );
30
31 /** CJT Text Domain used for localize texts */
32 define( 'CJTOOLBOX_TEXT_DOMAIN', CJTOOLBOX_NAME );
33
34 /** */
35 define( 'CJTOOLBOX_LANGUAGES', CJTOOLBOX_NAME . '/locals/languages/' );
36
37 /** CJT Absoulte path */
38 define( 'CJTOOLBOX_PATH', dirname( __FILE__ ) );
39
40 /** Dont use!! @deprecated */
41 define( 'CJTOOLBOX_INCLUDE_PATH', CJTOOLBOX_PATH . '/framework' );
42
43 /** Access Points path */
44 define( 'CJTOOLBOX_ACCESS_POINTS', CJTOOLBOX_PATH . '/access.points' );
45
46 /** Frmaework path */
47 define('CJTOOLBOX_FRAMEWORK', CJTOOLBOX_INCLUDE_PATH); // Alias to include path!
48
49 // Class Autoload Added @since 6.2.
50 require 'autoload.inc.php';
51
52 // Import dependencies
53 require_once CJTOOLBOX_FRAMEWORK . '/php/includes.class.php';
54 require_once CJTOOLBOX_FRAMEWORK . '/events/definition.class.php';
55 require_once CJTOOLBOX_FRAMEWORK . '/events/events.class.php';
56 require_once CJTOOLBOX_FRAMEWORK . '/events/wordpress.class.php';
57 require_once CJTOOLBOX_FRAMEWORK . '/events/hookable.interface.php';
58 require_once CJTOOLBOX_FRAMEWORK . '/events/hookable.class.php';
59
60 // Initialize events engine/system!
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';
64
65 /**
66 * CJT Plugin interface.
67 *
68 * The CJT Plugin is maximum deferred.
69 * All functionality here is just to detect if the request should be processed!
70 *
71 * The main class is located css-js-toolbox.class.php cssJSToolbox class
72 * The plugin is fully developed using Model-View-Controller design pattern.
73 *
74 * access.points directory has all the entry points that processed by the Plugin.
75 *
76 * @package CJT
77 * @author Ahmed Said
78 * @version 6
79 */
80 class CJTPlugin extends CJTHookableClass
81 {
82
83 /**
84 *
85 */
86 const DB_VERSION = '1.7';
87
88 /**
89 * Minimum PHP version required to run the plugin.
90 *
91 * @var string
92 */
93 CONST ENV_PHP_MIN_VERSION = '7.4';
94
95 /**
96 *
97 */
98 const FW_Version = '5.0';
99
100 /**
101 *
102 */
103 const VERSION = '12.0.7';
104
105 /**
106 *
107 */
108 const DB_VERSION_OPTION_NAME = 'cjtoolbox_db_version';
109
110 /**
111 *
112 */
113 const PLUGIN_REQUEST_ID = 'cjtoolbox';
114
115 /**
116 * put your comment there...
117 *
118 * @var mixed
119 */
120 protected $accessPoints;
121
122 /**
123 * put your comment there...
124 *
125 * @var mixed
126 */
127 protected $extensions;
128
129 /**
130 * put your comment there...
131 *
132 * @var mixed
133 */
134 protected $installed;
135
136 /**
137 * put your comment there...
138 *
139 * @var CJTPlugin
140 */
141 protected static $instance;
142
143 /**
144 * put your comment there...
145 *
146 * @var mixed
147 */
148 protected $mainAC;
149
150 /**
151 * put your comment there...
152 *
153 * @var mixed
154 */
155 protected $onloaddbversion = array( 'parameters' => array( 'dbVersion' ) );
156
157 /**
158 * put your comment there...
159 *
160 * @var mixed
161 */
162 protected $onimportcontroller = array( 'parameters' => array( 'file' ) );
163
164 /**
165 * put your comment there...
166 *
167 * @var mixed
168 */
169 protected $onimportmodel = array( 'parameters' => array( 'file' ) );
170
171 /**
172 * put your comment there...
173 *
174 * @var mixed
175 */
176 protected $onload = array( 'parameters' => array( 'instance' ) );
177
178 /**
179 * put your comment there...
180 *
181 */
182 protected function __construct()
183 {
184 // Hookable!
185 parent::__construct();
186
187 // Allow access points to utilize from CJTPlugin functionality
188 // even if the call is recursive inside getInstance/construct methods!!!
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
195 // Load plugin and all installed extensions!.
196 $this->load();
197 $this->loadExtensions();
198
199 // Run MAIN access point!
200 $this->main();
201 }
202
203 /**
204 * put your comment there...
205 *
206 */
207 public function & extensions()
208 {
209 return $this->extensions;
210 }
211
212 /**
213 * put your comment there...
214 *
215 */
216 public function getAccessPoint( $name )
217 {
218 return $this->accessPoints[ $name ];
219 }
220
221 /**
222 * put your comment there...
223 *
224 */
225 public static function getInstance()
226 {
227
228 if ( ! self::$instance )
229 {
230 self::$instance = new CJTPlugin();
231 }
232
233 return self::$instance;
234 }
235
236 /**
237 * Check the PHP version and register an admin notice when it is too old.
238 *
239 * @return bool TRUE when the environment can run the plugin.
240 */
241 public static function isCompatibleEnvironment()
242 {
243
244 if ( version_compare( PHP_VERSION, self::ENV_PHP_MIN_VERSION, '<' ) )
245 {
246 add_action( 'admin_notices', 'cjtIncompatiblePHPNotice' );
247
248 return false;
249 }
250
251 return true;
252 }
253 /**
254 * put your comment there...
255 *
256 */
257 public function isInstalled()
258 {
259 return $this->installed;
260 }
261
262 /**
263 * put your comment there...
264 *
265 */
266 public function listen()
267 {
268 // For now we've only admin access points! Future versions might has something changed!
269 if ( is_admin() )
270 {
271
272 // Import access points core classes.
273 require_once 'framework/access-points/page.class.php';
274 require_once 'framework/access-points/directory-spider.class.php';
275
276 // Get access points!
277 $accessPoints = CJTAccessPointsDirectorySpider::getInstance( 'CJT', CJTOOLBOX_ACCESS_POINTS );
278
279 // For every access point create instance and LISTEN to the request!
280 foreach ( $accessPoints as $name => $info )
281 {
282 /**
283 * @var CJTAccessPoint
284 */
285 $this->accessPoints[ $name ] = $point = $accessPoints->point()->listen();
286
287 // We need to do some work with there is a connected access point.
288 $point->onconnected = array( & $this, 'onconnected' );
289
290 }
291
292 }
293
294 return $this;
295 }
296
297 /**
298 * put your comment there...
299 *
300 */
301 protected function load()
302 {
303 // Bootstrap the Plugin!
304 cssJSToolbox::getInstance();
305
306 // Load MVC framework core!
307 require_once $this->onimportmodel( CJTOOLBOX_MVC_FRAMEWOK . '/model.inc.php' );
308 require_once $this->onimportcontroller( CJTOOLBOX_MVC_FRAMEWOK . '/controller.inc.php' );
309
310 return $this;
311 }
312
313 /**
314 * put your comment there...
315 *
316 */
317 protected function loadExtensions()
318 {
319 // Load extensions lib!
320 require_once 'framework/extensions/extensions.class.php';
321
322 $this->extensions = new CJTExtensions();
323 $this->extensions->load();
324
325 return $this;
326 }
327
328 /**
329 * Run MAIN access point!
330 *
331 * @return $this
332 */
333 protected function main()
334 {
335 // Fire laod event
336 $this->onload( $this );
337
338 // Access point base class is a dependency!
339 require_once 'framework/access-points/access-point.class.php';
340
341 // Run Main Acces Point!
342 include_once 'access.points/main.accesspoint.php';
343
344 $this->mainAC = new CJTMainAccessPoint();
345 $this->mainAC->listen();
346 }
347
348 /**
349 * Called When any In-Listen-State (ILS) Access point is
350 * connected (called by Wordpress hooking system).
351 *
352 * @return boolean TRUE.
353 */
354 public function onconnected( $observer, $state )
355 {
356 // Always connect the access point!
357 return $state;
358 }
359
360 }// End Class
361
362 /**
363 * Admin notice shown when the site runs an unsupported PHP version.
364 */
365 function cjtIncompatiblePHPNotice()
366 { ?>
367 <div class="notice notice-error">
368 <p><strong>CJT</strong>: CSS &amp; JavaScript Toolbox needs PHP version <?php echo esc_html( CJTPlugin::ENV_PHP_MIN_VERSION ); ?> or greater to operate properly. Please ask your hosting provider to update the PHP version.<br>
369 Current PHP Version: <strong><?php echo esc_html( phpversion() ); ?></strong>
370 </p>
371 </div>
372 <?php }
373
374 // Dont run if environment (e.g PHP version) is incomaptible
375 if ( ! CJTPlugin::isCompatibleEnvironment() )
376 {
377 return;
378 }
379
380 // Initialize events!
381 CJTPlugin::define( 'CJTPlugin', array( 'hookType' => CJTWordpressEvents::HOOK_FILTER ) );
382
383 // Let's Go!
384 CJTPlugin::getInstance();
385
386 add_action( 'upgrader_process_complete', 'upgradeCheck',10, 2 );
387
388 function upgradeCheck( $upgrader_object, $options ) {
389 // Bulk plugin updates are the only case we care about. Bail early on
390 // everything else so we never touch the DB on unrelated upgrades.
391 if ( ! isset( $options['action'], $options['type'] ) ) {
392 return;
393 }
394
395 if ( $options['action'] !== 'update' || $options['type'] !== 'plugin' ) {
396 return;
397 }
398
399 if ( empty( $options['plugins'] ) || ! is_array( $options['plugins'] ) ) {
400 return;
401 }
402
403 if ( ! in_array( plugin_basename( __FILE__ ), $options['plugins'], true ) ) {
404 return;
405 }
406
407 // Only ever record this once.
408 if ( ! empty( get_option( '__existing_cjt_user' ) ) ) {
409 return;
410 }
411
412 global $wpdb;
413 $table_name = $wpdb->base_prefix . 'cjtoolbox_blocks';
414 $query = $wpdb->prepare( 'SHOW TABLES LIKE %s', $wpdb->esc_like( $table_name ) );
415
416 update_option( '__existing_cjt_user', $wpdb->get_var( $query ) === $table_name ? 'true' : 'false' );
417 }
418