PluginProbe
Timetics – Appointment Booking Calendar & Scheduling / 1.0.46
Timetics – Appointment Booking Calendar & Scheduling v1.0.46
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.46, at timetics.php

362 lines 10.2 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
5 * Plugin URI: https://arraytics.com/timetics/
6 * Description: Schedule, Appointment and Seat Booking plugin.
7 * Version: 1.0.46
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.46';
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( 'plugin_locale', get_user_locale(), 'timetics' );
121
122 unload_textdomain( 'timetics' );
123 load_textdomain( 'timetics', WP_LANG_DIR . '/timetics/timetics-' . $locale . '.mo' );
124 load_plugin_textdomain( 'timetics', false, self::get_plugin_dir() . 'languages/' );
125 }
126
127 /**
128 * Initialize Plugin Modules
129 *
130 * @since 1.0.0
131 * @return void
132 */
133 private function initialize_modules() {
134 require_once dirname( __FILE__ ) . '/autoloader.php';
135 require_once dirname( __FILE__ ) . '/core/settings/settings.php';
136
137 require_once dirname( __FILE__ ) . '/utils/global-helper.php';
138
139 // block for showing banner.
140 require_once plugin_dir_path( __FILE__ ) . '/utils/notice/notice.php';
141 require_once plugin_dir_path( __FILE__ ) . '/utils/banner/banner.php';
142 require_once plugin_dir_path( __FILE__ ) . '/utils/pro-awareness/pro-awareness.php';
143
144 // Include the bootstrap file if not loaded.
145 if ( ! class_exists( 'Timetics\Bootstrap' ) ) {
146 require_once self::get_plugin_dir() . 'bootstrap.php';
147 }
148
149 // init notice class.
150 \Oxaim\Libs\Notice::init();
151
152 // init pro menu class.
153 \Wpmet\Libs\Pro_Awareness::init();
154
155 // Initialize the bootstraper if exists.
156 if ( class_exists( 'Timetics\Bootstrap' ) ) {
157
158 // Initialize all modules through plugins_loaded.
159 add_action( 'plugins_loaded', array( $this, 'init' ) );
160
161 register_activation_hook( self::get_plugin_file(), array( $this, 'activate' ) );
162 register_deactivation_hook( self::get_plugin_file(), array( $this, 'deactivate' ) );
163 }
164 }
165
166 /**
167 * Check If All Requirements Are Fulfilled
168 *
169 * @return boolean
170 */
171 private function requirements_met() {
172 $this->prepare_requirement_versions();
173
174 $passed = true;
175 $to_meet = wp_list_pluck( $this->requirements, 'met' );
176
177 foreach ( $to_meet as $met ) {
178 if ( empty( $met ) ) {
179 $passed = false;
180 continue;
181 }
182 }
183
184 return $passed;
185 }
186
187 /**
188 * Requirement Version Prepare
189 *
190 * @since 1.0.0
191 *
192 * @return void
193 */
194 private function prepare_requirement_versions() {
195 foreach ( $this->requirements as $dependency => $config ) {
196 switch ( $dependency ) {
197 case 'php':
198 $version = phpversion();
199 break;
200 case 'wp':
201 $version = get_bloginfo( 'version' );
202 break;
203 default:
204 $version = false;
205 }
206
207 if ( ! empty( $version ) ) {
208 $this->requirements[$dependency]['current'] = $version;
209 $this->requirements[$dependency]['checked'] = true;
210 $this->requirements[$dependency]['met'] = version_compare( $version, $config['minimum'], '>=' );
211 }
212 }
213 }
214
215 /**
216 * Initialize everything
217 *
218 * @since 1.0.0
219 *
220 * @return void
221 */
222 public function init() {
223 Timetics\Bootstrap::instantiate( self::get_plugin_file() );
224
225 // Add autoload from composer for integrating uninstallation form
226 if (file_exists(plugin_dir_path( __FILE__ ) . '/vendor/autoload.php')) {
227 require_once plugin_dir_path( __FILE__ ) . '/vendor/autoload.php';
228 }
229
230 if (class_exists('UninstallerForm\UninstallerForm') && is_callable(['\UninstallerForm\UninstallerForm', 'init'])) {
231
232 $reflection = new ReflectionMethod('\UninstallerForm\UninstallerForm', 'init');
233
234 // Maximum number of parameters allowed
235 $totalParams = $reflection->getNumberOfParameters();
236
237 if($totalParams === 6) {
238 add_filter( 'rest_request_before_callbacks', function( $response, $handler, $request ) {
239 if ( $request->get_route() === '/timetics/v1/feedback' ) {
240 $params = $request->get_json_params();
241
242 if ( empty( $params['email'] ) ) {
243 $params['email'] = get_option( 'admin_email' );
244 $request->set_body( wp_json_encode( $params ) );
245 }
246 }
247 return $response;
248 }, 10, 3 );
249
250 \UninstallerForm\UninstallerForm::init(
251 'Timetics', // Plugin name
252 'timetics', // Plugin Slug
253 __FILE__,
254 'timetics', // Text Domain Name
255 'timetics-feedback-modal', // plugins-admin-script-handler
256 'https://arraytics.com/?fluentcrm=1&route=contact&hash=13cce8a6-c038-4997-91e7-4a2326cc1124'
257 );
258 } else {
259 add_filter( 'rest_request_before_callbacks', function( $response, $handler, $request ) {
260 if ( $request->get_route() === '/timetics/v1/feedback' ) {
261 $params = $request->get_json_params();
262
263 if ( empty( $params['email'] ) ) {
264 $params['email'] = get_option( 'admin_email' );
265 $request->set_body( wp_json_encode( $params ) );
266 }
267 }
268 return $response;
269 }, 10, 3 );
270
271 \UninstallerForm\UninstallerForm::init(
272 'Timetics', // Plugin name
273 'timetics', // Plugin Slug
274 __FILE__,
275 'timetics', // Text Domain Name
276 'timetics-feedback-modal'
277 );
278 }
279 }
280 }
281
282 /**
283 * Called Only Once While Activation
284 *
285 * @return void
286 */
287 public function activate() {
288 // Insert new role.
289 Timetics\Base\Role::instance()->init();
290
291 // Update default settings.
292 timetics_update_default_settings();
293
294 // Register cron
295 timetics_register_cron();
296
297 // Create new woocommerce product category for timetics meeting
298 timetics_add_woocommerce_product_cat();
299
300 // Update option for onboard settings.
301 $timetics_onboard_setup = get_option( 'timetics_onboard_setup' );
302
303 $timetics_demo_data = get_option( 'timetics_demo_data' );
304
305 if ( ! $timetics_demo_data ) {
306 $dummy_data_generator = new Timetics\Core\DummyData\Dummy_Data_Generator();
307 $dummy_data_generator->generate();
308 update_option( 'timetics_demo_data', true );
309 }
310
311 if ( ! $timetics_onboard_setup ) {
312 update_option( 'timetics_onboard_settings', true );
313 }
314 }
315
316 /**
317 * Called Only Once While Deactivation
318 *
319 * @return void
320 */
321 public function deactivate() {
322 }
323
324 /**
325 * Quit Plugin Execution
326 *
327 * @return void
328 */
329 private function quit() {
330 add_action( 'admin_head', array( $this, 'show_plugin_requirements_not_met_notice' ) );
331 }
332
333 /**
334 * Show Error Notice For Missing Requirements
335 *
336 * @return void
337 */
338 public function show_plugin_requirements_not_met_notice() {
339 printf( '<div>Minimum requirements for Timetics are not met. Please update requirements to continue.</div>' );
340 }
341
342 /**
343 * Plugin Main File
344 *
345 * @return string
346 */
347 public static function get_plugin_file() {
348 return __FILE__;
349 }
350
351 /**
352 * Plugin Base Directory Path
353 *
354 * @return string
355 */
356 public static function get_plugin_dir() {
357 return trailingslashit( plugin_dir_path( self::get_plugin_file() ) );
358 }
359 }
360
361 Timetics::get_instance();
362