PluginProbe
Timetics – Appointment Booking Calendar & Scheduling / 1.0.17
Timetics – Appointment Booking Calendar & Scheduling v1.0.17
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.17, at timetics.php

298 lines 7.7 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.17
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.17';
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( 'plugins_loaded', 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
226 /**
227 * Called Only Once While Activation
228 *
229 * @return void
230 */
231 public function activate() {
232 // Insert new role.
233 Timetics\Base\Role::instance()->init();
234
235 // Update default settings.
236 timetics_update_default_settings();
237
238 // Register cron
239 timetics_register_cron();
240
241 // Create new woocommerce product category for timetics meeting
242 timetics_add_woocommerce_product_cat();
243
244 // Update option for onboard settings.
245 $timetics_onboard_setup = get_option( 'timetics_onboard_setup' );
246
247 if ( ! $timetics_onboard_setup ) {
248 update_option( 'timetics_onboard_settings', true );
249 }
250 }
251
252 /**
253 * Called Only Once While Deactivation
254 *
255 * @return void
256 */
257 public function deactivate() {
258 }
259
260 /**
261 * Quit Plugin Execution
262 *
263 * @return void
264 */
265 private function quit() {
266 add_action( 'admin_head', array( $this, 'show_plugin_requirements_not_met_notice' ) );
267 }
268
269 /**
270 * Show Error Notice For Missing Requirements
271 *
272 * @return void
273 */
274 public function show_plugin_requirements_not_met_notice() {
275 printf( '<div>Minimum requirements for Timetics are not met. Please update requirements to continue.</div>' );
276 }
277
278 /**
279 * Plugin Main File
280 *
281 * @return string
282 */
283 public static function get_plugin_file() {
284 return __FILE__;
285 }
286
287 /**
288 * Plugin Base Directory Path
289 *
290 * @return string
291 */
292 public static function get_plugin_dir() {
293 return trailingslashit( plugin_dir_path( self::get_plugin_file() ) );
294 }
295 }
296
297 Timetics::get_instance();
298