PluginProbe
Timetics – Appointment Booking Calendar & Scheduling / 1.0.39
Timetics – Appointment Booking Calendar & Scheduling v1.0.39
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.39, at timetics.php

322 lines 8.8 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.39
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.39';
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 \UninstallerForm\UninstallerForm::init(
232 'Timetics', // Plugin name
233 'timetics', // Plugin Slug
234 __FILE__,
235 'timetics', // Text Domain Name
236 'timetics-feedback-modal', // plugins-admin-script-handler
237 'https://arraytics.com/?fluentcrm=1&route=contact&hash=13cce8a6-c038-4997-91e7-4a2326cc1124'
238 );
239 }
240 }
241
242 /**
243 * Called Only Once While Activation
244 *
245 * @return void
246 */
247 public function activate() {
248 // Insert new role.
249 Timetics\Base\Role::instance()->init();
250
251 // Update default settings.
252 timetics_update_default_settings();
253
254 // Register cron
255 timetics_register_cron();
256
257 // Create new woocommerce product category for timetics meeting
258 timetics_add_woocommerce_product_cat();
259
260 // Update option for onboard settings.
261 $timetics_onboard_setup = get_option( 'timetics_onboard_setup' );
262
263 $timetics_demo_data = get_option( 'timetics_demo_data' );
264
265 if ( ! $timetics_demo_data ) {
266 $dummy_data_generator = new Timetics\Core\DummyData\Dummy_Data_Generator();
267 $dummy_data_generator->generate();
268 update_option( 'timetics_demo_data', true );
269 }
270
271 if ( ! $timetics_onboard_setup ) {
272 update_option( 'timetics_onboard_settings', true );
273 }
274 }
275
276 /**
277 * Called Only Once While Deactivation
278 *
279 * @return void
280 */
281 public function deactivate() {
282 }
283
284 /**
285 * Quit Plugin Execution
286 *
287 * @return void
288 */
289 private function quit() {
290 add_action( 'admin_head', array( $this, 'show_plugin_requirements_not_met_notice' ) );
291 }
292
293 /**
294 * Show Error Notice For Missing Requirements
295 *
296 * @return void
297 */
298 public function show_plugin_requirements_not_met_notice() {
299 printf( '<div>Minimum requirements for Timetics are not met. Please update requirements to continue.</div>' );
300 }
301
302 /**
303 * Plugin Main File
304 *
305 * @return string
306 */
307 public static function get_plugin_file() {
308 return __FILE__;
309 }
310
311 /**
312 * Plugin Base Directory Path
313 *
314 * @return string
315 */
316 public static function get_plugin_dir() {
317 return trailingslashit( plugin_dir_path( self::get_plugin_file() ) );
318 }
319 }
320
321 Timetics::get_instance();
322