PluginProbe
Timetics – Appointment Booking Calendar & Scheduling / 1.0.54
Timetics – Appointment Booking Calendar & Scheduling v1.0.54
1.0.61 1.0.60 1.0.59 1.0.58 1.0.57 1.0.56 trunk 1.0.0 1.0.1 1.0.10 1.0.11 1.0.12 1.0.13 1.0.14 1.0.15 1.0.16 1.0.17 1.0.18 1.0.19 1.0.2 1.0.20 1.0.21 1.0.22 1.0.23 1.0.24 All 62 releases
timetics / timetics.php

timetics.php in Timetics – Appointment Booking Calendar & Scheduling 1.0.54, at timetics.php

361 lines 10.1 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 /**
4 * Plugin Name: Timetics - Appointment Booking Calendar & Scheduling System
5 * Plugin URI: https://arraytics.com/timetics/
6 * Description: Schedule, Appointment and Seat Booking plugin.
7 * Version: 1.0.54
8 * Requires at least: 5.2
9 * Requires PHP: 7.3
10 * Author: Arraytics
11 * Author URI: https://arraytics.com/
12 * License: GPL v2 or later
13 * License URI: https://www.gnu.org/licenses/gpl-2.0.html
14 * Text Domain: timetics
15 * Domain Path: /languages
16
17 * Timetics is free software: you can redistribute it and/or modify
18 * it under the terms of the GNU General Public License as published by
19 * the Free Software Foundation, either version 2 of the License, or
20 * any later version.
21
22 * Timetics Essential is distributed in the hope that it will be useful,
23 * but WITHOUT ANY WARRANTY; without even the implied warranty of
24 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
25 * GNU General Public License for more details.
26
27 * You should have received a copy of the GNU General Public License
28 * along with Timetics. If not, see <http://www.gnu.org/licenses/>.
29 *
30 * @package Timetics
31 * @category Core
32 * @author Arraytics
33 * @version 1.0.10
34 */
35
36 // Exit if accessed directly.
37 defined( 'ABSPATH' ) || exit;
38
39 /**
40 * The Main Plugin Requirements Checker
41 *
42 * @since 1.0.0
43 */
44 final class Timetics {
45
46 /**
47 * Static Property To Hold Singleton Instance
48 *
49 * @var Timetics The Timetics Requirement Checker Instance
50 */
51 private static $instance;
52
53 /**
54 * Plugin Current Production Version
55 *
56 * @return string
57 */
58 public static function get_version() {
59 return '1.0.54';
60 }
61
62 /**
63 * Requirements Array
64 *
65 * @since 1.0.0
66 * @var array
67 */
68 private $requirements = array(
69 'php' => array(
70 'name' => 'PHP',
71 'minimum' => '7.3',
72 'exists' => true,
73 'met' => false,
74 'checked' => false,
75 'current' => false,
76 ),
77 'wp' => array(
78 'name' => 'WordPress',
79 'minimum' => '5.2',
80 'exists' => true,
81 'checked' => false,
82 'met' => false,
83 'current' => false,
84 ),
85 );
86
87 /**
88 * Singleton Instance
89 *
90 * @return Timetics
91 */
92 public static function get_instance() {
93 if ( null === self::$instance ) {
94 self::$instance = new self();
95 }
96
97 return self::$instance;
98 }
99
100 /**
101 * Setup Plugin Requirements
102 *
103 * @since 1.0.0
104 */
105 private function __construct() {
106 // Always load translation.
107 add_action( 'init', array( $this, 'load_text_domain' ) );
108
109 // Initialize plugin functionalities or quit.
110 $this->requirements_met() ? $this->initialize_modules() : $this->quit();
111 }
112
113 /**
114 * Load Localization Files
115 *
116 * @since 1.0
117 * @return void
118 */
119 public function load_text_domain() {
120 $locale = apply_filters( 'timetics_plugin_locale', get_user_locale(), 'timetics' );
121
122 unload_textdomain( 'timetics' );
123 load_textdomain( 'timetics', WP_LANG_DIR . '/timetics/timetics-' . $locale . '.mo' );
124 }
125
126 /**
127 * Initialize Plugin Modules
128 *
129 * @since 1.0.0
130 * @return void
131 */
132 private function initialize_modules() {
133 require_once dirname( __FILE__ ) . '/autoloader.php';
134 require_once dirname( __FILE__ ) . '/core/settings/settings.php';
135
136 require_once dirname( __FILE__ ) . '/utils/global-helper.php';
137
138 // block for showing banner.
139 require_once plugin_dir_path( __FILE__ ) . '/utils/notice/notice.php';
140 require_once plugin_dir_path( __FILE__ ) . '/utils/banner/banner.php';
141 require_once plugin_dir_path( __FILE__ ) . '/utils/pro-awareness/pro-awareness.php';
142
143 // Include the bootstrap file if not loaded.
144 if ( ! class_exists( 'Timetics\Bootstrap' ) ) {
145 require_once self::get_plugin_dir() . 'bootstrap.php';
146 }
147
148 // init notice class.
149 \Oxaim\Libs\Notice::init();
150
151 // init pro menu class.
152 \Wpmet\Libs\Pro_Awareness::init();
153
154 // Initialize the bootstraper if exists.
155 if ( class_exists( 'Timetics\Bootstrap' ) ) {
156
157 // Initialize all modules through plugins_loaded.
158 add_action( 'plugins_loaded', array( $this, 'init' ) );
159
160 register_activation_hook( self::get_plugin_file(), array( $this, 'activate' ) );
161 register_deactivation_hook( self::get_plugin_file(), array( $this, 'deactivate' ) );
162 }
163 }
164
165 /**
166 * Check If All Requirements Are Fulfilled
167 *
168 * @return boolean
169 */
170 private function requirements_met() {
171 $this->prepare_requirement_versions();
172
173 $passed = true;
174 $to_meet = wp_list_pluck( $this->requirements, 'met' );
175
176 foreach ( $to_meet as $met ) {
177 if ( empty( $met ) ) {
178 $passed = false;
179 continue;
180 }
181 }
182
183 return $passed;
184 }
185
186 /**
187 * Requirement Version Prepare
188 *
189 * @since 1.0.0
190 *
191 * @return void
192 */
193 private function prepare_requirement_versions() {
194 foreach ( $this->requirements as $dependency => $config ) {
195 switch ( $dependency ) {
196 case 'php':
197 $version = phpversion();
198 break;
199 case 'wp':
200 $version = get_bloginfo( 'version' );
201 break;
202 default:
203 $version = false;
204 }
205
206 if ( ! empty( $version ) ) {
207 $this->requirements[$dependency]['current'] = $version;
208 $this->requirements[$dependency]['checked'] = true;
209 $this->requirements[$dependency]['met'] = version_compare( $version, $config['minimum'], '>=' );
210 }
211 }
212 }
213
214 /**
215 * Initialize everything
216 *
217 * @since 1.0.0
218 *
219 * @return void
220 */
221 public function init() {
222 Timetics\Bootstrap::instantiate( self::get_plugin_file() );
223
224 // Add autoload from composer for integrating uninstallation form
225 if (file_exists(plugin_dir_path( __FILE__ ) . '/vendor/autoload.php')) {
226 require_once plugin_dir_path( __FILE__ ) . '/vendor/autoload.php';
227 }
228
229 if (class_exists('UninstallerForm\UninstallerForm') && is_callable(['\UninstallerForm\UninstallerForm', 'init'])) {
230
231 $reflection = new ReflectionMethod('\UninstallerForm\UninstallerForm', 'init');
232
233 // Maximum number of parameters allowed
234 $totalParams = $reflection->getNumberOfParameters();
235
236 if($totalParams === 6) {
237 add_filter( 'rest_request_before_callbacks', function( $response, $handler, $request ) {
238 if ( $request->get_route() === '/timetics/v1/feedback' ) {
239 $params = $request->get_json_params();
240
241 if ( empty( $params['email'] ) ) {
242 $params['email'] = get_option( 'admin_email' );
243 $request->set_body( wp_json_encode( $params ) );
244 }
245 }
246 return $response;
247 }, 10, 3 );
248
249 \UninstallerForm\UninstallerForm::init(
250 'Timetics', // Plugin name
251 'timetics', // Plugin Slug
252 __FILE__,
253 'timetics', // Text Domain Name
254 'timetics-feedback-modal', // plugins-admin-script-handler
255 'https://arraytics.com/?fluentcrm=1&route=contact&hash=13cce8a6-c038-4997-91e7-4a2326cc1124'
256 );
257 } else {
258 add_filter( 'rest_request_before_callbacks', function( $response, $handler, $request ) {
259 if ( $request->get_route() === '/timetics/v1/feedback' ) {
260 $params = $request->get_json_params();
261
262 if ( empty( $params['email'] ) ) {
263 $params['email'] = get_option( 'admin_email' );
264 $request->set_body( wp_json_encode( $params ) );
265 }
266 }
267 return $response;
268 }, 10, 3 );
269
270 \UninstallerForm\UninstallerForm::init(
271 'Timetics', // Plugin name
272 'timetics', // Plugin Slug
273 __FILE__,
274 'timetics', // Text Domain Name
275 'timetics-feedback-modal'
276 );
277 }
278 }
279 }
280
281 /**
282 * Called Only Once While Activation
283 *
284 * @return void
285 */
286 public function activate() {
287 // Insert new role.
288 Timetics\Base\Role::instance()->init();
289
290 // Update default settings.
291 timetics_update_default_settings();
292
293 // Register cron
294 timetics_register_cron();
295
296 // Create new woocommerce product category for timetics meeting
297 timetics_add_woocommerce_product_cat();
298
299 // Update option for onboard settings.
300 $timetics_onboard_setup = get_option( 'timetics_onboard_setup' );
301
302 $timetics_demo_data = get_option( 'timetics_demo_data' );
303
304 if ( ! $timetics_demo_data ) {
305 $dummy_data_generator = new Timetics\Core\DummyData\Dummy_Data_Generator();
306 $dummy_data_generator->generate();
307 update_option( 'timetics_demo_data', true );
308 }
309
310 if ( ! $timetics_onboard_setup ) {
311 update_option( 'timetics_onboard_settings', true );
312 }
313 }
314
315 /**
316 * Called Only Once While Deactivation
317 *
318 * @return void
319 */
320 public function deactivate() {
321 }
322
323 /**
324 * Quit Plugin Execution
325 *
326 * @return void
327 */
328 private function quit() {
329 add_action( 'admin_head', array( $this, 'show_plugin_requirements_not_met_notice' ) );
330 }
331
332 /**
333 * Show Error Notice For Missing Requirements
334 *
335 * @return void
336 */
337 public function show_plugin_requirements_not_met_notice() {
338 printf( '<div>Minimum requirements for Timetics are not met. Please update requirements to continue.</div>' );
339 }
340
341 /**
342 * Plugin Main File
343 *
344 * @return string
345 */
346 public static function get_plugin_file() {
347 return __FILE__;
348 }
349
350 /**
351 * Plugin Base Directory Path
352 *
353 * @return string
354 */
355 public static function get_plugin_dir() {
356 return trailingslashit( plugin_dir_path( self::get_plugin_file() ) );
357 }
358 }
359
360 Timetics::get_instance();
361