PluginProbe
VikBooking Hotel Booking Engine & PMS / 1.8.16
VikBooking Hotel Booking Engine & PMS v1.8.16
1.8.16 1.8.15 1.8.14 1.8.13 1.8.12 1.8.11 1.8.10 1.8.9 1.8.6 1.8.7 1.8.8 trunk 1.6.0 1.6.1 1.6.2 1.6.3 1.6.4 1.6.5 1.6.6 1.6.7 1.6.8 1.6.9 1.7.0 1.7.1 1.7.2 All 37 releases
← All changes | admin/helpers/src/factory.php +311 -108 1.6.7 → 1.8.16 View file →
@@ -15,127 +15,330 @@
15 15
16 16 /**
17 17 * Factory application class.
18 18 *
19 - * @since 1.5
19 + * @since 1.15 (J) - 1.5 (WP)
20 20 */
21 21 final class VBOFactory
22 22 {
23 - /**
24 - * Application configuration handler.
25 - *
26 - * @var VBOConfigRegistry
27 - */
28 - private static $config;
23 + /**
24 + * Application configuration handler.
25 + *
26 + * @var VBOConfigRegistry
27 + */
28 + private static $config;
29 29
30 - /**
31 - * Application platform handler.
32 - *
33 - * @var VBOPlatformInterface
34 - */
35 - private static $platform;
30 + /**
31 + * Application platform handler.
32 + *
33 + * @var VBOPlatformInterface
34 + */
35 + private static $platform;
36 36
37 - /**
38 - * Cron jobs factory instance.
39 - *
40 - * @var VBOCronFactory
41 - */
42 - private static $cronFactory;
37 + /**
38 + * Cron jobs factory instance.
39 + *
40 + * @var VBOCronFactory
41 + */
42 + private static $cronFactory;
43 43
44 - /**
45 - * Class constructor.
46 - * @private This object cannot be instantiated.
47 - */
48 - private function __construct()
49 - {
50 - // never called
51 - }
44 + /**
45 + * Notification Center handler instance.
46 + *
47 + * @var VBONotificationCenter
48 + */
49 + private static $notificationCenter;
52 50
53 - /**
54 - * Class cloner.
55 - * @private This object cannot be cloned.
56 - */
57 - private function __clone()
58 - {
59 - // never called
60 - }
51 + /**
52 + * Crontab simulator instance.
53 + *
54 + * @var VBOCrontabSimulator
55 + */
56 + private static $crontabSimulator;
61 57
62 - /**
63 - * Returns the current configuration object.
64 - *
65 - * @return VBOConfigRegistry
66 - */
67 - public static function getConfig()
68 - {
69 - // check if config class is already instantiated
70 - if (is_null(static::$config))
71 - {
72 - // cache instantiation
73 - static::$config = new VBOConfigRegistryDatabase([
74 - 'db' => JFactory::getDbo(),
75 - ]);
76 - }
58 + /**
59 + * Task Manager instance.
60 + *
61 + * @var VBOTaskManager
62 + */
63 + private static $taskManager;
77 64
78 - return static::$config;
79 - }
65 + /**
66 + * Class constructor.
67 + * @private This object cannot be instantiated.
68 + */
69 + private function __construct()
70 + {
71 + // never called
72 + }
80 73
81 - /**
82 - * Returns the current platform handler.
83 - *
84 - * @return VBOPlatformInterface
85 - */
86 - public static function getPlatform()
87 - {
88 - // check if platform class is already instantiated
89 - if (is_null(static::$platform))
90 - {
91 - if (VBOPlatformDetection::isWordPress())
92 - {
93 - // running WordPress platform
94 - static::$platform = new VBOPlatformOrgWordpress();
95 - }
96 - else
97 - {
98 - // running Joomla platform
99 - static::$platform = new VBOPlatformOrgJoomla();
100 - }
101 - }
74 + /**
75 + * Class cloner.
76 + * @private This object cannot be cloned.
77 + */
78 + private function __clone()
79 + {
80 + // never called
81 + }
102 82
103 - return static::$platform;
104 - }
83 + /**
84 + * Returns the current configuration object.
85 + *
86 + * @return VBOConfigRegistry
87 + */
88 + public static function getConfig()
89 + {
90 + // check if config class is already instantiated
91 + if (is_null(static::$config))
92 + {
93 + // cache instantiation
94 + static::$config = new VBOConfigRegistryDatabase([
95 + 'db' => JFactory::getDbo(),
96 + ]);
97 + }
105 98
106 - /**
107 - * Returns the current cron factory.
108 - *
109 - * @return VBOCronFactory
110 - *
111 - * @since 1.5.10
112 - */
113 - public static function getCronFactory()
114 - {
115 - // check if cron factory class is already instantiated
116 - if (is_null(static::$cronFactory))
117 - {
118 - // create cron factory class and register the default folder
119 - static::$cronFactory = new VBOCronFactory;
120 - static::$cronFactory->setIncludePaths(VBO_ADMIN_PATH . DIRECTORY_SEPARATOR . 'cronjobs');
99 + return static::$config;
100 + }
121 101
122 - /**
123 - * Trigger hook to allow third-party plugin to register custom folders in which
124 - * VikBooking should look for the creation of new cron job instances.
125 - *
126 - * In example:
127 - * $factory->addIncludePath($path);
128 - * $factory->addIncludePaths([$path1, $path2, ...]);
129 - *
130 - * @param VBOCronFactory $factory The cron jobs factory.
131 - *
132 - * @return void
133 - *
134 - * @since 1.5.10
135 - */
136 - VBOFactory::getPlatform()->getDispatcher()->trigger('onCreateCronJobsFactoryVikBooking', [static::$cronFactory]);
137 - }
102 + /**
103 + * Returns the current platform handler.
104 + *
105 + * @return VBOPlatformInterface
106 + */
107 + public static function getPlatform()
108 + {
109 + // check if platform class is already instantiated
110 + if (is_null(static::$platform))
111 + {
112 + if (VBOPlatformDetection::isWordPress())
113 + {
114 + // running WordPress platform
115 + static::$platform = new VBOPlatformOrgWordpress();
116 + }
117 + else
118 + {
119 + // running Joomla platform
120 + static::$platform = new VBOPlatformOrgJoomla();
121 + }
122 + }
138 123
139 - return static::$cronFactory;
140 - }
124 + return static::$platform;
125 + }
126 +
127 + /**
128 + * Returns the current cron factory.
129 + *
130 + * @return VBOCronFactory
131 + *
132 + * @since 1.15.10 (J) - 1.5.10 (WP)
133 + */
134 + public static function getCronFactory()
135 + {
136 + // check if cron factory class is already instantiated
137 + if (is_null(static::$cronFactory))
138 + {
139 + // create cron factory class and register the default folder
140 + static::$cronFactory = new VBOCronFactory;
141 + static::$cronFactory->setIncludePaths(VBO_ADMIN_PATH . DIRECTORY_SEPARATOR . 'cronjobs');
142 +
143 + /**
144 + * Trigger hook to allow third-party plugin to register custom folders in which
145 + * VikBooking should look for the creation of new cron job instances.
146 + *
147 + * In example:
148 + * $factory->addIncludePath($path);
149 + * $factory->addIncludePaths([$path1, $path2, ...]);
150 + *
151 + * @param VBOCronFactory $factory The cron jobs factory.
152 + *
153 + * @return void
154 + *
155 + * @since 1.15.10 (J) - 1.5.10 (WP)
156 + */
157 + VBOFactory::getPlatform()->getDispatcher()->trigger('onCreateCronJobsFactoryVikBooking', [static::$cronFactory]);
158 + }
159 +
160 + return static::$cronFactory;
161 + }
162 +
163 + /**
164 + * Returns the current notification center instance.
165 + *
166 + * @return VBONotificationCenter
167 + *
168 + * @since 1.16.8 (J) - 1.6.8 (WP)
169 + */
170 + public static function getNotificationCenter()
171 + {
172 + // check if the notification center class is already instantiated
173 + if (is_null(static::$notificationCenter))
174 + {
175 + // create Notification Center class
176 + static::$notificationCenter = new VBONotificationCenter;
177 + }
178 +
179 + return static::$notificationCenter;
180 + }
181 +
182 + /**
183 + * Returns the current crontab simulator.
184 + *
185 + * @return VBOCrontabSimulator
186 + *
187 + * @since 1.17 (J) - 1.7 (WP)
188 + */
189 + public static function getCrontabSimulator()
190 + {
191 + // check if cron factory class is already instantiated
192 + if (is_null(static::$crontabSimulator)) {
193 + // set up the preferred semaphore instance
194 + $semaphore = new VBOCrontabSemaphoreConfig;
195 +
196 + // set up the preferred logger instance
197 + $logger = new VBOCrontabLoggerFile;
198 +
199 + // instantiate simulator
200 + static::$crontabSimulator = new VBOCrontabSimulator($semaphore, $logger);
201 +
202 + if (VBOPlatformDetection::isJoomla()) {
203 + /**
204 + * Watch the automatic payments scheduled, if any.
205 + * Should run every 5 minutes.
206 + */
207 + static::$crontabSimulator->schedule(new VBOCrontabRunnerAware('pay_schedules_watcher', 5 * 60, function(VBOCrontabLogger $logger) {
208 + VBOModelPayschedules::getInstance()->watch();
209 + }));
210 +
211 + /**
212 + * Run performances cleaner.
213 + * Should run every week.
214 + */
215 + static::$crontabSimulator->schedule(new VBOCrontabRunnerAware('performance_cleaner', 60 * 60 * 24 * 7, function(VBOCrontabLogger $logger) {
216 + // performance cleaning check
217 + VBOPerformanceCleaner::runCheck();
218 + // clean up expired passcodes from smart locks
219 + VBOFactory::getDoorAccessControl()->cleanExpiredPasscodes();
220 + }));
221 +
222 + /**
223 + * Run the door-access-control framework.
224 + * Should run every hour.
225 + */
226 + static::$crontabSimulator->schedule(new VBOCrontabRunnerAware('door_access_control', 60 * 60, function(VBOCrontabLogger $logger) {
227 + // watch if any booking is approaching the check-in date
228 + VBOFactory::getDoorAccessControl()->handleUpcomingArrivals();
229 + // watch if passcodes get used for the first time
230 + VBOFactory::getDoorAccessControl()->watchFirstAccess();
231 + }));
232 +
233 + /**
234 + * Run database optimization.
235 + * Should run every hour.
236 + */
237 + static::$crontabSimulator->schedule(new VBOCrontabRunnerAware('db_optimization', 60 * 60, function(VBOCrontabLogger $logger) {
238 + VBOPerformanceCleaner::optimizeDatabase();
239 + }));
240 + }
241 +
242 + if (class_exists('VCMCrontabProvider')) {
243 + // in case VikChannelManager is installed, schedule the native background tasks
244 + (new VCMCrontabProvider)->provide(static::$crontabSimulator);
245 + }
246 +
247 + /**
248 + * Trigger hook to allow third-party plugins to register custom background tasks.
249 + *
250 + * The following example explains how to schedule a task that runs every hour.
251 + *
252 + * ```
253 + * $crontab->schedule(new VBOCrontabRunnerAware('unique_id', 60 * 60, function($logger) {
254 + * // do stuff
255 + * }));
256 + * ```
257 + *
258 + * @param VBOCrontabSimulator $crontab The crontab simulator instance.
259 + *
260 + * @return void
261 + *
262 + * @since 1.17 (J) - 1.7 (WP)
263 + */
264 + VBOFactory::getPlatform()->getDispatcher()->trigger('onSetupCrontabSimulator', [static::$crontabSimulator]);
265 +
266 + // do not run in case we are doing an AJAX request
267 + if (!strcasecmp(JFactory::getApplication()->input->server->get('HTTP_X_REQUESTED_WITH', ''), 'xmlhttprequest')) {
268 + static::$crontabSimulator->stop();
269 + }
270 + }
271 +
272 + return static::$crontabSimulator;
273 + }
274 +
275 + /**
276 + * Returns the current task manager instance.
277 + *
278 + * @return VBOTaskManager
279 + *
280 + * @since 1.18.0 (J) - 1.8.0 (WP)
281 + */
282 + public static function getTaskManager()
283 + {
284 + // check if the object is already instantiated
285 + if (is_null(static::$taskManager))
286 + {
287 + // create object instance
288 + static::$taskManager = new VBOTaskManager;
289 + }
290 +
291 + return static::$taskManager;
292 + }
293 +
294 + /**
295 + * Returns a new chat mediator instance.
296 + *
297 + * @return VBOChatMediator
298 + *
299 + * @since 1.18 (J) - 1.8 (WP)
300 + */
301 + public static function getChatMediator()
302 + {
303 + return new VBOChatMediator(new VBOChatStorageDatabase);
304 + }
305 +
306 + /**
307 + * Returns a new help wizard instance.
308 + *
309 + * @return VBOHelpWizard
310 + *
311 + * @since 1.18.2 (J) - 1.8.2 (WP)
312 + */
313 + public static function getHelpWizard()
314 + {
315 + $helpWizard = new VBOHelpWizard([
316 + 'delay' => 0,
317 + ]);
318 +
319 + // get VikBooking configuration status
320 + $metrics = VikBookingHelper::getFirstSetupMetrics();
321 +
322 + // do not spam the user with wizard hints until the first configuration is complete
323 + if (empty($metrics['totprices']) || empty($metrics['totrooms']) || empty($metrics['totdailyfares'])) {
324 + return $helpWizard;
325 + }
326 +
327 + // attach the folder where the instructions should be stored
328 + $helpWizard->addIncludePath(VBO_ADMIN_PATH . '/helpers/src/help/wizard/drivers/');
329 +
330 + return $helpWizard;
331 + }
332 +
333 + /**
334 + * Returns the Door Access Control instance.
335 + *
336 + * @return VBODooraccessFactory
337 + *
338 + * @since 1.18.4 (J) - 1.8.4 (WP)
339 + */
340 + public static function getDoorAccessControl()
341 + {
342 + return VBODooraccessFactory::getInstance();
343 + }
141 344 }