PluginProbe ʕ •ᴥ•ʔ
Smart Custom 404 Error Page / trunk
Smart Custom 404 Error Page vtrunk
trunk 11.4.6 11.4.7 11.4.8
404page / inc / ppf / ppf-plugin.php
404page / inc / ppf Last commit date
assets 1 year ago loader.php 1 year ago ppf-admin.php 1 year ago ppf-class.php 1 year ago ppf-plugin-addon.php 1 year ago ppf-plugin.php 1 year ago ppf-settings.php 1 year ago ppf-subclass.php 1 year ago
ppf-plugin.php
545 lines
1 <?php
2
3 /**
4 * Plugin Base Class
5 *
6 * Peter's Plugins Foundation 09
7 *
8 * @package PPF09
9 * @author Peter Raschendorfer
10 * @license GPL2+
11 */
12
13 if ( ! defined( 'ABSPATH' ) ) {
14 exit; // Exit if accessed directly
15 }
16
17 if ( !class_exists( 'PPF09_Plugin' ) ) {
18
19 abstract class PPF09_Plugin extends PPF09_Class {
20
21 /**
22 * Instances
23 *
24 * since PPF02 this is an array to allow multiple classes based on the same Plugin Foundation
25 *
26 * @since PPF02
27 * @var singleton
28 * @access protected
29 */
30 protected static $_instances = array();
31
32
33 /**
34 * Plugin Name
35 *
36 * @since PPF01
37 * @var string
38 * @access protected
39 * was private prior to PPF04
40 */
41 protected $plugin_name;
42
43
44 /**
45 * Plugin Short Name (for Display)
46 *
47 * @since PPF01
48 * @var string
49 * @access protected
50 * was private prior to PPF04
51 */
52 protected $plugin_shortname;
53
54
55 /**
56 * Plugin File
57 *
58 * @since PPF01
59 * @var string
60 * @access protected
61 * was private prior to PPF04
62 */
63 protected $plugin_file;
64
65
66 /**
67 * Plugin Base Dir
68 *
69 * @since PPF01
70 * @var string
71 * @access protected
72 * was private prior to PPF04
73 */
74 protected $plugin_dir;
75
76
77 /**
78 * Plugin Slug
79 *
80 * @since PPF01
81 * @var string
82 * @access protected
83 * was private prior to PPF04
84 */
85 protected $plugin_slug;
86
87
88 /**
89 * Plugin Version
90 *
91 * @since PPF01
92 * @var int
93 * @access protected
94 * was private prior to PPF04
95 */
96 protected $plugin_version;
97
98
99 /**
100 * name of plugin data in databse (meta_key)
101 *
102 * @since PPF01
103 * @var string
104 * @access protected
105 * was private prior to PPF04
106 */
107 protected $_data_key;
108
109
110 /**
111 * stored data
112 *
113 * @since PPF01
114 * @var array
115 * @access protected
116 * was private prior to PPF04
117 */
118 protected $_data;
119
120
121 /**
122 * Settings Class ( if the plugin uses settings )
123 *
124 * @since PPF01
125 * @var object
126 * @access protected
127 * was private prior to PPF04
128 */
129 protected $settings;
130
131
132 /**
133 * Init the Class
134 *
135 * @since PPF01
136 * @see getInstance
137 * @access public - must be public due to an error in PHP 7.1 - fixed in PHP 7.2
138 */
139 public function __construct( $settings ) {
140
141 $this->plugin_file = $settings['file'];
142 $this->plugin_slug = $settings['slug'];
143 $this->plugin_name = $settings['name'];
144 $this->plugin_shortname = $settings['shortname'];
145 $this->plugin_version = $settings['version'];
146
147 $this->plugin_dir = dirname( $settings['file'] );
148
149 $this->_data_key = str_replace( '-', '_', $settings['slug'] ) . '_data';
150 $this->data_load();
151
152 $this->plugin_install_update();
153
154 $this->plugin_init();
155 }
156
157
158
159 /**
160 * plugin init
161 *
162 * force to be defined
163 *
164 * @since PPF01
165 */
166 abstract public function plugin_init();
167
168
169 /**
170 * Prevent Cloning
171 *
172 * @since PPF01
173 */
174 final protected function __clone() {}
175
176
177 /**
178 * Get the Instance
179 *
180 * @since PPF01
181 * @param array $settings {
182 * @type string $file Plugin Main File Path and Name
183 * @type string $slug Plugin Slug
184 * @type string $name Plugin Name
185 * @type string $version Plugin Verion
186 * }
187 * @return singleton
188 */
189 final public static function getInstance( $settings ) {
190
191 $calledClass = get_called_class();
192
193 if ( !isset( self::$_instances[$calledClass] ) )
194 {
195 self::$_instances[$calledClass] = new $calledClass( $settings );
196 }
197
198 return self::$_instances[$calledClass];
199 }
200
201
202 /**
203 * get plugin file
204 *
205 * @since PPF01
206 * @access public
207 * @return string
208 */
209 public function get_plugin_file() {
210
211 return $this->plugin_file;
212
213 }
214
215
216 /**
217 * get plugin slug
218 *
219 * @since PPF01
220 * @access public
221 * @return string
222 */
223 public function get_plugin_slug() {
224
225 return $this->plugin_slug;
226
227 }
228
229
230 /**
231 * get plugin name
232 *
233 * @since PPF01
234 * @access public
235 * @return string
236 */
237 public function get_plugin_name() {
238
239 return $this->plugin_name;
240
241 }
242
243
244 /**
245 * get plugin shortname
246 *
247 * @since PPF01
248 * @access public
249 * @return string
250 */
251 public function get_plugin_shortname() {
252
253 return $this->plugin_shortname;
254
255 }
256
257
258 /**
259 * get plugin version
260 *
261 * @since PPF01
262 * @access public
263 * @return string
264 */
265 public function get_plugin_version() {
266
267 return $this->plugin_version;
268
269 }
270
271
272 /**
273 * get url for asset file
274 *
275 * @since PPF01
276 * @access public
277 * @param string $dir sub-directory of assets dir (js, css)
278 * @param string $file filename
279 * @return string
280 */
281 public function get_asset_url( $dir, $file ) {
282
283 return plugins_url( 'assets/' . $dir . '/' . $file, $this->get_plugin_file() );
284
285 }
286
287
288 /**
289 * get path for asset file
290 *
291 * @since PPF01
292 * @access public
293 * @param string $dir sub-directory of assets dir (js, css)
294 * @param string $file filename
295 * @return string
296 */
297 public function get_asset_path( $dir, $file ) {
298
299 return plugin_dir_path( $this->get_plugin_file() ) . 'assets/' . $dir . '/' . $file;
300
301 }
302
303
304 /**
305 * add a sub class
306 *
307 * @since PPF01
308 * @access private
309 * @param string $class name of the class
310 * @param string $file class file without extension php (must bei located in inc dir)
311 * @param object $_core the core class
312 * @param object $_settings the settings class (optional)
313 * @return class
314 */
315 private function add_sub_class( $class, $file, $_core, $_settings = false ) {
316
317 require_once plugin_dir_path( $this->get_plugin_file() ) . 'inc/' . $file . '.php';
318 return new $class( $_core, $_settings);
319
320 }
321
322
323 /**
324 * add a sub class as well in frontend as in backend
325 *
326 * @since PPF01
327 * @access public
328 * @uses add_sub_class()
329 * @return class
330 */
331 public function add_sub_class_always( $class, $file, $_core, $_settings = false ) {
332
333 return $this->add_sub_class( $class, $file, $_core, $_settings );
334
335 }
336
337
338 /**
339 * add a sub class only in frontend
340 *
341 * @since PPF01
342 * @access public
343 * @uses add_sub_class()
344 * @return class or false
345 */
346 public function add_sub_class_frontend( $class, $file, $_core, $_settings = false ) {
347
348 if ( ! is_admin() ) {
349
350 return $this->add_sub_class( $class, $file, $_core, $_settings );
351
352 }
353
354 return false;
355
356 }
357
358
359 /**
360 * add a sub class only in backend
361 *
362 * @since PPF01
363 * @access public
364 * @uses add_sub_class()
365 * @return class or false
366 */
367 public function add_sub_class_backend( $class, $file, $_core, $_settings = false ) {
368
369 if ( is_admin() ) {
370
371 return $this->add_sub_class( $class, $file, $_core, $_settings );
372
373 }
374
375 return false;
376
377 }
378
379
380 /**
381 * add the settings class ( if the plugin uses settings )
382 *
383 * @since PPF01
384 * @access public
385 * @param string $class name of the class
386 * @param string $file class file without extension php (must bei located in inc dir)
387 * @param object $_core the core class
388 * @param object $defaults the settings defaults
389 */
390 public function add_settings_class( $class, $file, $_core, $defaults ) {
391
392 require_once plugin_dir_path( $this->get_plugin_file() ) . 'inc/' . $file . '.php';
393 $this->settings = new $class( $_core, $defaults );
394
395 }
396
397
398 /**
399 * get settings class
400 *
401 * @since PPF01
402 * @access public
403 * @return object
404 */
405 public function settings() {
406
407 return $this->settings;
408
409 }
410
411
412 /**
413 * do plugin install or update
414 *
415 * @since PPF01
416 * @access protected (since PPF04, was private before)
417 */
418 protected function plugin_install_update() {
419
420 $version = $this->data_get( 'current_version' );
421
422 if ( false === $version || version_compare( $version, $this->get_plugin_version(), '<' ) ) {
423
424 if ( false === $version ) {
425
426 // the plugin was not installed before (or the plugin foundation was not used before...)
427
428 $this->do_plugin_install();
429
430 } else {
431
432 // do updates if needed
433 $this->do_plugin_update( $version, $this->get_plugin_version() );
434
435 }
436
437 $this->data_set( 'current_version', $this->get_plugin_version() );
438 $this->data_save();
439
440 }
441
442 }
443
444
445 /**
446 * plugin install
447 *
448 * to be overwritten
449 *
450 * @since PPF01
451 * @access public
452 */
453 public function do_plugin_install() {}
454
455
456 /**
457 * plugin update
458 *
459 * to be overwritten
460 *
461 * @since PPF01
462 * @access public
463 */
464 public function do_plugin_update( $stored_version, $actual_version ) {}
465
466
467 /**
468 * load plugin data from database
469 *
470 * @since PPF01
471 * @access public
472 */
473 public function data_load() {
474
475 $this->_data = get_option( $this->_data_key, array() );
476
477
478 }
479
480 /**
481 * get a data value
482 *
483 * @since PPF01
484 * @param string $key data key
485 * @access public
486 */
487 public function data_get( $key ) {
488
489 if ( is_array( $this->_data ) && array_key_exists( $key, $this->_data ) ) {
490
491 return $this->_data[$key];
492
493 } else {
494
495 return false;
496
497 }
498
499 }
500
501
502 /**
503 * set a data value
504 *
505 * @since PPF01
506 * @param string $key data key
507 * @param string $value new value
508 * @access public
509 */
510 public function data_set( $key, $value ) {
511
512 return $this->_data[$key] = $value;
513
514 }
515
516
517 /**
518 * save data to database
519 *
520 * @since PPF01
521 * @access public
522 */
523 public function data_save() {
524
525 update_option( $this->_data_key, $this->_data );
526
527 }
528
529
530 /**
531 * remove all data from database
532 *
533 * @since PPF01
534 * @access public
535 */
536 public function data_remove() {
537
538 delete_option( $this->_data_key );
539
540 }
541
542
543 }
544
545 }