PluginProbe ʕ •ᴥ•ʔ
VikAppointments Services Booking Calendar / trunk
VikAppointments Services Booking Calendar vtrunk
1.2.21 1.2.20 trunk 1.2.17 1.2.18 1.2.19
vikappointments / libraries / adapter / module / factory.php
vikappointments / libraries / adapter / module Last commit date
factory.php 2 years ago helper.php 2 years ago widget.php 3 months ago
factory.php
111 lines
1 <?php
2 /**
3 * @package VikWP - Libraries
4 * @subpackage adapter.module
5 * @author E4J s.r.l.
6 * @copyright Copyright (C) 2023 E4J s.r.l. All Rights Reserved.
7 * @license http://www.gnu.org/licenses/gpl-2.0.html GNU/GPL
8 * @link https://vikwp.com
9 */
10
11 // No direct access
12 defined('ABSPATH') or die('No script kiddies please!');
13
14 /**
15 * Factory class to handle the internal modules.
16 *
17 * @since 10.0
18 */
19 class JModuleFactory
20 {
21 /**
22 * An array containing the list of registered modules.
23 *
24 * @var array
25 */
26 protected static $registered = array();
27
28 /**
29 * Loads all the modules contained in the specified path.
30 *
31 * @param string $path The modules path.
32 *
33 * @return boolean True on success, otherwise false.
34 *
35 * @uses loadModule()
36 */
37 public static function load($path)
38 {
39 // get all the modules (folders)
40 $folders = glob($path . DIRECTORY_SEPARATOR . '*', GLOB_ONLYDIR);
41
42 // do not proceed if the folder is empty
43 if (!count($folders))
44 {
45 return false;
46 }
47
48 $loaded = false;
49
50 // iterate the folders
51 foreach ($folders as $folder)
52 {
53 // load the module and update (on success only) the result
54 $loaded = self::loadModule($folder) || $loaded;
55 }
56
57 return $loaded;
58 }
59
60 /**
61 * Loads the module contained in the given path.
62 * The folder must contain at least 2 files:
63 * - widget.php to extend the module functions.
64 * - [mod_name].php to render the module layout.
65 *
66 * @param string $path The module path.
67 *
68 * @return boolean True if loaded, otherwise false.
69 */
70 public static function loadModule($path)
71 {
72 // make sure the module hasn't been yet registered
73 if (isset(static::$registered[$path]))
74 {
75 return static::$registered[$path];
76 }
77
78 // before all, flag the module as not loaded
79 static::$registered[$path] = 0;
80
81 // check if the widget file exists
82 $widget = $path . DIRECTORY_SEPARATOR . 'widget.php';
83
84 if (!is_file($widget))
85 {
86 return false;
87 }
88
89 include $widget;
90
91 // build widget classname
92 $classname = basename($path);
93 $classname = str_replace('_', ' ', $classname);
94 $classname = preg_replace("/\s+/", '', ucwords($classname)) . '_Widget';
95
96 // make sure the widget handler exists
97 if (!class_exists($classname))
98 {
99 return false;
100 }
101
102 // register the widget in WP pool
103 register_widget($classname);
104
105 // mark the module as loaded
106 static::$registered[$path] = 1;
107
108 return true;
109 }
110 }
111