PluginProbe
Booking Calendar / 11.8
Booking Calendar v11.8
11.8.1 11.8 11.7 11.6.1 11.6 11.5 11.4.3 11.4.2 11.4.1 11.4 11.3 11.2.1 11.2 11.1 11.0 10.15.7 10.15.6 10.1.3 10.10 10.10.1 10.10.2 10.11 10.11.2 10.11.3 10.11.4 All 201 releases
booking / core / any / activation.php

activation.php in Booking Calendar 11.8, at core/any/activation.php

334 lines 11.6 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 /**
3 * @version 1.0
4 * @package Booking Calendar
5 * @category Installation
6 * @author wpdevelop
7 *
8 * @web-site https://wpbookingcalendar.com/
9 * @email info@wpbookingcalendar.com
10 *
11 * @modified 2015-04-09, 2016-03-17
12 */
13
14 if ( ! defined( 'ABSPATH' ) ) exit; // Exit if accessed directly
15
16
17 /**
18 * Activation | Deactivation Class
19 */
20 abstract class WPBC_Install {
21
22 /**
23 * Init option
24 *
25 * @var array
26 */
27 private $init_option;
28
29 /**
30 * Constructor
31 */
32 public function __construct() {
33
34 $default_init_option_names = array(
35 'option-version_num' => 'booking_version_num',
36 'option-is_delete_if_deactive' => 'booking_is_delete_if_deactive',
37 'option-activation_process' => 'booking_activation_process',
38 'transient-wpbc_activation_redirect' => '_booking_activation_redirect',
39 'message-delete_data' => '<strong>Warning!</strong> All plugin data will be deleted when plugin had deactivated.<br />' . sprintf( 'If you want to save your plugin data, please uncheck the %s"Delete plugin data"%s at the', '<strong>', '</strong>' ),
40 'link_settings' => '<a href="">Settings</a>',
41 'link_whats_new' => '<a href="">Whats New</a>',
42 );
43
44 $init_option = $this->get_init_option_names();
45
46 $this->init_option = wp_parse_args( $init_option, $default_init_option_names );
47
48 // WordPress > Plugins > "Activate" link.
49 register_activation_hook( WPBC_FILE, array( $this, 'wpbc_activate_initial' ) );
50
51 // WordPress > Plugins > "Deactivate" link.
52 register_deactivation_hook( WPBC_FILE, array( $this, 'wpbc_deactivate' ) );
53
54 // Upgrade during bulk upgrade of plugins.
55 add_filter( 'upgrader_post_install', array( $this, 'wpbc_install_in_bulk_upgrade' ), 10, 2 );
56
57 // Settings link at the plugin page.
58 add_filter( 'plugin_action_links', array( $this, 'plugin_links' ), 10, 2 );
59 // Warning message in plugin info.
60 add_filter( 'plugin_row_meta', array( $this, 'plugin_row_meta' ), 10, 4 );
61
62 // TODO: 2025-06-06 - required to be commented, if we use the Pro version as separate plugin.
63 $this->check_if_need_to_update(); // Check upgrade, if was no activation process
64 }
65
66
67 /**
68 * Must be overloaded in child CLASS
69 *
70 * * Important! for correct loading of trasnaltions later, we must do not use here loacale of plugin. So here will be untranslated strings!!!
71 *
72 * Exmaple:
73 * return array(
74 'option-version_num' => 'booking_version_num'
75 , 'option-is_delete_if_deactive' => 'booking_is_delete_if_deactive'
76 , 'option-activation_process' => 'booking_activation_process'
77 , 'transient-wpbc_activation_redirect' => '_booking_activation_redirect'
78 , 'message-delete_data' => '<strong>Warning !!!</strong> ' . 'All plugin data will be deleted when plugin had deactivated.' . '<br />'
79 . sprintf( 'If you want to save your plugin data, please uncheck the %s"Delete plugin data"%s at the settings page.', '<strong>', '</strong>')
80 , 'link_settings' => '<a href="">Settings</a>'
81 , 'link_whats_new' => '<a href="">Whats New</a>'
82 );
83 */
84 abstract function get_init_option_names();
85
86
87 /**
88 * Must be overloaded in child CLASS
89 * Exmaple:
90 *
91 return false
92 */
93 abstract function is_update_from_lower_to_high_version();
94
95
96 // -----------------------------------------------------------------------------------------------------------------
97 // <editor-fold defaultstate="collapsed" desc=" Update info of plugin at the plugins section ">
98
99 /** Update info of plugin at the plugins section */
100 function plugin_row_meta( $plugin_meta, $plugin_file, $plugin_data, $context ) {
101
102 $this_plugin = plugin_basename( WPBC_FILE );
103
104 if ($plugin_file == $this_plugin ) {
105
106 $is_delete_if_deactive = get_bk_option( $this->init_option['option-is_delete_if_deactive'] ); // check
107
108 if ($is_delete_if_deactive == 'On') { ?>
109 <div class="plugin-update-tr">
110 <div class="update-message notice inline notice-error" style="line-height: 2.2em;border-left: 3px solid #cc1818;margin-left: 0;color: #cc1818;background: #fff6f4;"><?php
111 // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
112 echo $this->init_option['message-delete_data']; ?></div>
113 </div>
114 <?php
115 }
116
117 $version = wpbc_get_plugin_version_title();
118
119 if ( 'Free' !== $version ) {
120 $plugin_meta[0] .= ' | ' . __( 'Version type', 'booking' ) . ': <strong>Free + ' . ucfirst( $version ) . '</strong>';
121 } else {
122 $plugin_meta[0] .= ' | ' . __( 'Version type', 'booking' ) . ': <strong>' . ucfirst( $version ) . '</strong>';
123 }
124
125 /*
126 [$plugin_meta] => Array
127 (
128 [0] => Version 2.8.35
129 [1] => By wpdevelop
130 [2] => Visit plugin site
131 )
132
133 [$plugin_file] => booking/WPBC.php
134 [$plugin_data] => Array
135 (
136 [Name] => Booking Calendar
137 [PluginURI] => https://wpbookingcalendar.com/demo/
138 [Version] => 2.8.35
139 [Description] => Online booking and availability checking service for your site.
140 [Author] => wpdevelop
141 [AuthorURI] => https://wpbookingcalendar.com/
142 [TextDomain] =>
143 [DomainPath] =>
144 [Network] =>
145 [Title] => Booking Calendar
146 [AuthorName] => wpdevelop
147 )
148
149 [$context] => all
150 /**/
151
152 // Echo plugin description here
153 return $plugin_meta;
154
155 } else
156 return $plugin_meta;
157 }
158
159
160 // Adds Settings link to plugins settings
161 function plugin_links($links, $file) {
162
163 $this_plugin = plugin_basename( WPBC_FILE );
164
165 if ( $file == $this_plugin ) {
166
167
168 array_unshift( $links, $this->init_option['link_settings'] );
169
170 //array_unshift( $links, $this->init_option['link_whats_new'] );
171 array_unshift( $links, $this->init_option['link_faq'] );
172
173
174 $links = array_merge( $links, array(
175 '<a class="wpbc_plugins_links__start_tour" title="' . esc_attr( sprintf( __('We\'ll guide you through the steps to set up WP Booking Calendar on your site.','booking'), '<strong>WP Booking Calendar</strong>' ) ) . '" href="'
176 . esc_url( wpbc_get_settings_url() . '&wpbc_setup_wizard=reset&_wpnonce=' . wp_create_nonce( 'wpbc_settings_url_nonce' ) )
177 //. esc_url( admin_url( add_query_arg( array( 'page' => 'wpbc-about' ), 'index.php' ) ) )
178 . '">' . esc_attr__( 'Start Setup Wizard', 'booking' ) . '</a>'
179 )
180 );
181
182
183 if ( ! class_exists( 'wpdev_bk_personal' ) ) {
184 if ( wpbc_is_updated_paid_to_free() ) {
185 array_unshift(
186 $links,
187 '<a style="font-weight:600;" class="wpbc_plugins_links__start_tour" title="' . esc_attr( __( 'Request Update', 'booking' ) ) . '" href="' . esc_url( 'https://wpbookingcalendar.com/request-update/' ) . '">' . esc_attr__( 'Request Pro Version', 'booking' ) . '</a>'
188 );
189 } else {
190 array_unshift( $links, $this->init_option['link_up'] );
191 }
192 } else {
193 if ( ! class_exists( 'wpdev_bk_multiuser' ) ) {
194 array_unshift( $links, $this->init_option['link_upgrade'] );
195 }
196 }
197
198 }
199 return $links;
200 }
201
202 // </editor-fold>
203
204
205 // -----------------------------------------------------------------------------------------------------------------
206
207 /**
208 * Check about ability to upgrade, if was no activation process
209 *
210 * @return void
211 */
212 private function check_if_need_to_update() {
213
214 if ( is_admin() ) {
215
216 $wpbc_version_num = get_option( $this->init_option['option-version_num'] );
217
218 if ( false === $wpbc_version_num ) {
219 $wpbc_version_num = '0';
220 }
221
222 $is_make_activation = false;
223
224 if ( version_compare( WP_BK_VERSION_NUM, $wpbc_version_num ) > 0 ) {
225
226 $is_make_activation = true;
227
228 } else {
229
230 // Check if we was update from free to paid or from lower to higher versions, and do not make normal activation. In this case we need to make update.
231 // TODO: 2025-11-23 - Commented, if we use the Pro version as separate plugin.
232 // $is_make_activation = $this->is_update_from_lower_to_high_version();
233
234 }
235
236 // Add hook for initial activation.
237 if ( $is_make_activation ) {
238 // add_action( 'plugins_loaded', array( $this, 'wpbc_activate_initial' ), 1030 );
239 add_action( 'init', array( $this, 'wpbc_activate_initial' ), 1030 );
240 }
241 }
242 }
243
244
245 /**
246 * Upgrade during bulk upgrade of plugins
247 *
248 * @param type $return_val
249 * @param type $hook_extra
250 *
251 * @return type
252 */
253 public function wpbc_install_in_bulk_upgrade( $return_val, $hook_extra ) {
254
255 if ( is_wp_error( $return_val ) ) {
256 return $return_val;
257 }
258
259 if ( isset( $hook_extra ) ) {
260 if ( isset( $hook_extra['plugin'] ) ) {
261 $file_name = basename( WPBC_FILE );
262 $pos = strpos( $hook_extra['plugin'], trim( $file_name ) );
263 if ( false !== $pos ) {
264 $this->wpbc_activate();
265 }
266 }
267 }
268
269 return $return_val;
270 }
271
272
273 /**
274 * User clicked on "Activate" link at Plugins Menu.
275 *
276 * @return type
277 */
278 public function wpbc_activate_initial() {
279
280 // Activate the plugin.
281 $this->wpbc_activate();
282
283 // Bail if this demo or activating from network, or bulk.
284 if ( is_network_admin() || isset( $_GET['activate-multi'] ) || wpbc_is_this_demo() ) { // phpcs:ignore WordPress.Security.NonceVerification.Recommended, WordPress.Security.NonceVerification.Missing
285 return;
286 }
287
288 // Add the transient to redirect - Showing Welcome screen.
289 set_transient( $this->init_option['transient-wpbc_activation_redirect'], true, 30 );
290 }
291
292 // -----------------------------------------------------------------------------------------------------------------
293
294 /**
295 * Run Activate
296 */
297 public function wpbc_activate() {
298
299 WPBC_Action_Scheduler_Compatibility::raise_memory_limit();
300 WPBC_Action_Scheduler_Compatibility::raise_time_limit( 300 );
301
302 update_bk_option( $this->init_option['option-activation_process'], 'On' );
303
304 make_bk_action( 'wpbc_activation' ); // S T A R T.
305
306 update_bk_option( $this->init_option['option-version_num'], WP_BK_VERSION_NUM );
307
308 update_bk_option( $this->init_option['option-activation_process'], 'Off' );
309 }
310
311
312 /**
313 * Run Deactivate
314 */
315 public function wpbc_deactivate() {
316 wpbc_set_plugin_deactivation_state( true );
317
318 WPBC_Action_Scheduler_Compatibility::raise_memory_limit();
319 WPBC_Action_Scheduler_Compatibility::raise_time_limit( 300 );
320
321 $is_delete_if_deactive = get_bk_option( $this->init_option['option-is_delete_if_deactive'] ); // check.
322
323 if ( 'On' === $is_delete_if_deactive ) {
324
325 make_bk_action( 'wpbc_deactivation' ); // F I N I S H.
326
327 delete_bk_option( $this->init_option['option-version_num'] );
328
329 delete_bk_option( $this->init_option['option-activation_process'] );
330 }
331 }
332
333 }
334