PluginProbe
MainWP Dashboard: Self-hosted WordPress Management for Agencies / 5.1.1
MainWP Dashboard: Self-hosted WordPress Management for Agencies v5.1.1
6.2 6.1.8 6.1.7 6.1.6 6.1.5 6.1.4 6.1.3 6.1.2 6.1.1 6.1 6.0.12 6.0.11 4.6.0.1 5.0 5.0.1 5.0.2 5.0.3 5.0.3.1 5.0.3.2 5.1 5.1.1 5.2 5.2.1 5.2.2 5.3 All 153 releases
mainwp / class / class-mainwp-system-handler.php

class-mainwp-system-handler.php in MainWP Dashboard: Self-hosted WordPress Management for Agencies 5.1.1, at class/class-mainwp-system-handler.php

1,060 lines 46.6 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 /**
3 * System Handler
4 *
5 * @package MainWP/Dashboard
6 */
7
8 namespace MainWP\Dashboard;
9
10 /**
11 * Class MainWP_System_Handler
12 *
13 * @package MainWP\Dashboard
14 */
15 class MainWP_System_Handler { // phpcs:ignore Generic.Classes.OpeningBraceSameLine.ContentAfterBrace -- NOSONAR.
16
17 // phpcs:disable WordPress.WP.AlternativeFunctions -- use system functions
18
19 /**
20 * Private static variable to hold the single instance of the class.
21 *
22 * @static
23 *
24 * @var mixed Default null
25 */
26 private static $instance = null;
27
28 /**
29 * Private variable to hold the upgrade version info.
30 *
31 * @var null Version info.
32 */
33 private $upgradeVersionInfo = null;
34
35 /**
36 * Method instance()
37 *
38 * Create public static instance.
39 *
40 * @static
41 * @return MainWP_System
42 */
43 public static function instance() {
44 if ( null === static::$instance ) {
45 static::$instance = new self();
46 }
47
48 return static::$instance;
49 }
50
51 /**
52 * MainWP_System_Handler constructor.
53 *
54 * Run each time the class is called.
55 *
56 * @uses \MainWP\Dashboard\MainWP_Extensions_Handler::get_class_name()
57 */
58 public function __construct() {
59 add_filter( 'mainwp-extension-enabled-check', array( MainWP_Extensions_Handler::get_class_name(), 'is_extension_enabled' ) ); // @deprecated Use 'mainwp_extension_enabled_check' instead.
60 add_filter( 'mainwp_extension_enabled_check', array( MainWP_Extensions_Handler::get_class_name(), 'is_extension_enabled' ) );
61
62 /**
63 * This hook allows you to get a list of sites via the 'mainwp-getsites' filter.
64 *
65 * @link http://codex.mainwp.com/#mainwp-getsites
66 *
67 * @see \MainWP_Extensions::hook_get_sites
68 */
69 add_filter( 'mainwp-getsites', array( MainWP_Extensions_Handler::get_class_name(), 'hook_get_sites' ), 10, 5 ); // @deprecated Use 'mainwp_getsites' instead.
70 add_filter( 'mainwp-getdbsites', array( MainWP_Extensions_Handler::get_class_name(), 'hook_get_db_sites' ), 10, 5 ); // @deprecated Use 'mainwp_getdbsites' instead.
71
72 add_filter( 'mainwp_getsites', array( MainWP_Extensions_Handler::get_class_name(), 'hook_get_sites' ), 10, 5 );
73 add_filter( 'mainwp_getdbsites', array( MainWP_Extensions_Handler::get_class_name(), 'hook_get_db_sites' ), 10, 5 );
74 add_filter( 'mainwp_get_db_websites', array( MainWP_Extensions_Handler::get_class_name(), 'hook_get_db_websites' ), 10, 5 );
75
76 /**
77 * This hook allows you to get a information about groups via the 'mainwp-getgroups' filter.
78 *
79 * @link http://codex.mainwp.com/#mainwp-getgroups
80 *
81 * @see \MainWP_Extensions::hook_get_groups
82 */
83 add_filter( 'mainwp-getgroups', array( MainWP_Extensions_Handler::get_class_name(), 'hook_get_groups' ), 10, 4 ); // @deprecated Use 'mainwp_getgroups' instead.
84 add_filter( 'mainwp_getgroups', array( MainWP_Extensions_Handler::get_class_name(), 'hook_get_groups' ), 10, 4 );
85 add_action( 'mainwp_fetchurlsauthed', array( &$this, 'filter_fetch_urls_authed' ), 10, 7 );
86 add_filter( 'mainwp_fetchurlauthed', array( &$this, 'filter_fetch_url_authed' ), 10, 6 );
87 add_filter( 'mainwp_getsqlwebsites_for_current_user', array( static::class, 'hook_get_sql_websites_for_current_user' ), 10, 4 );
88 add_filter( 'mainwp_fetchurlverifyaction', array( &$this, 'hook_fetch_url_verify_action' ), 10, 4 );
89
90 add_filter(
91 'mainwp_getdashboardsites',
92 array(
93 MainWP_Extensions_Handler::get_class_name(),
94 'hook_get_dashboard_sites',
95 ),
96 10,
97 7
98 );
99
100 // @deprecated Use 'mainwp_manager_getextensions' instead.
101 add_filter(
102 'mainwp-manager-getextensions',
103 array(
104 MainWP_Extensions_Handler::get_class_name(),
105 'hook_get_all_extensions',
106 )
107 );
108
109 add_filter(
110 'mainwp_manager_getextensions',
111 array(
112 MainWP_Extensions_Handler::get_class_name(),
113 'hook_get_all_extensions',
114 )
115 );
116
117 add_action( 'admin_init', array( &$this, 'admin_init' ) );
118
119 if ( false !== get_option( 'mainwp_upgradeVersionInfo' ) && '' !== get_option( 'mainwp_upgradeVersionInfo' ) ) {
120 $this->upgradeVersionInfo = get_option( 'mainwp_upgradeVersionInfo' );
121 if ( ! is_object( $this->upgradeVersionInfo ) ) {
122 $this->upgradeVersionInfo = new \stdClass();
123 }
124 }
125 }
126
127 /**
128 * Method filter_fetch_urls_authed()
129 *
130 * Filter fetch authorized urls.
131 *
132 * @param mixed $pluginFile MainWP extention.
133 * @param string $key MainWP Licence Key.
134 * @param object $dbwebsites Child Sites.
135 * @param string $what Function to perform.
136 * @param array $params Function paramerters.
137 * @param mixed $handle Function handle.
138 * @param mixed $output Function output.
139 *
140 * @return mixed MainWP_Extensions_Handler::hook_fetch_urls_authed() Hook fetch authorized URLs.
141 *
142 * @uses \MainWP\Dashboard\MainWP_Extensions_Handler::hook_fetch_urls_authed()
143 */
144 public function filter_fetch_urls_authed( $pluginFile, $key, $dbwebsites, $what, $params, $handle, $output ) {
145 return MainWP_Extensions_Handler::hook_fetch_urls_authed( $pluginFile, $key, $dbwebsites, $what, $params, $handle, $output );
146 }
147
148 /**
149 * Method filter_fetch_url_authed()
150 *
151 * Filter fetch Authorized URL.
152 *
153 * @param mixed $pluginFile MainWP extention.
154 * @param string $key MainWP licence key.
155 * @param int $websiteId Website ID.
156 * @param string $what Function to perform.
157 * @param array $params Function paramerters.
158 * @param null $raw_response Raw response.
159 *
160 * @return mixed MainWP_Extensions_Handler::hook_fetch_url_authed() Hook fetch authorized URL.
161 *
162 * @uses \MainWP\Dashboard\MainWP_Extensions_Handler::hook_fetch_url_authed()
163 */
164 public function filter_fetch_url_authed( $pluginFile, $key, $websiteId, $what, $params, $raw_response = null ) {
165 return MainWP_Extensions_Handler::hook_fetch_url_authed( $pluginFile, $key, $websiteId, $what, $params, $raw_response );
166 }
167
168 /**
169 * Method hook_fetch_url_verify_action()
170 *
171 * Filter fetch Authorized URL.
172 *
173 * @param mixed $pluginFile MainWP extention.
174 * @param string $childKey Extension child key.
175 * @param int $websiteId Website ID.
176 * @param array $params Function paramerters.
177 *
178 * @return mixed MainWP_Extensions_Handler::hook_fetch_url_authed() Hook fetch authorized URL.
179 */
180 public function hook_fetch_url_verify_action( $pluginFile, $childKey, $websiteId, $params ) {
181 if ( ! is_array( $params ) || ! isset( $params['actionnonce'] ) ) {
182 return false;
183 }
184 $what = 'verify_action';
185 return MainWP_Extensions_Handler::hook_fetch_url_authed( $pluginFile, $childKey, $websiteId, $what, $params );
186 }
187
188 /**
189 * Method apply_filter()
190 *
191 * Apply filter
192 *
193 * @param string $filter The filter.
194 * @param array $value Input value.
195 *
196 * @return array $output Output array.
197 *
198 * @uses \MainWP\Dashboard\MainWP_Extensions_Handler::hook_verify()
199 */
200 public function apply_filters( $filter, $value = array() ) {
201
202 if ( 'mainwp-getmetaboxes' === $filter ) {
203 $output = apply_filters_deprecated( 'mainwp-getmetaboxes', array( $value ), '4.0.7.2', 'mainwp_getmetaboxes' ); // @deprecated Use 'mainwp_getmetaboxes' instead. NOSONAR - not IP.
204 } else {
205 $output = apply_filters( $filter, $value );
206 }
207
208 if ( ! is_array( $output ) ) {
209 return array();
210 }
211 return $output;
212 }
213
214 /**
215 * Method admin_init()
216 *
217 * Do nothing if current user is not an Admin.
218 */
219 public function admin_init() { // phpcs:ignore -- NOSONAR - complex function.
220 if ( ! MainWP_System_Utility::is_admin() ) {
221 return;
222 }
223
224 global $pagenow;
225
226 if ( 'plugins.php' === $pagenow && isset( $_GET['do'] ) && 'checkUpgrade' === $_GET['do'] && ( ( time() - $this->upgradeVersionInfo->updated ) > 30 ) ) { // phpcs:ignore WordPress.Security.NonceVerification,WordPress.Security.ValidatedSanitizedInput.InputNotSanitized
227 $this->check_upgrade();
228 delete_site_transient( 'update_plugins' ); // to forced refresh 'update_plugins' transient.
229 wp_safe_redirect( admin_url( 'plugins.php' ) );
230 exit;
231 }
232 }
233
234
235
236 /**
237 * Method hook_get_sql_websites_for_current_user()
238 *
239 * Get sql websites for current user.
240 *
241 * @param mixed $input_value First input filter value.
242 * @param string $pluginFile Extension plugin file to verify.
243 * @param string $key The child-key.
244 * @param mixed $params Input params data.
245 *
246 * @return string sql.
247 */
248 public static function hook_get_sql_websites_for_current_user( $input_value, $pluginFile, $key, $params ) {
249 unset( $input_value );
250 if ( ! MainWP_Extensions_Handler::hook_verify( $pluginFile, $key ) ) {
251 return false;
252 }
253 return MainWP_DB::instance()->get_sql_wp_for_current_user( $params );
254 }
255 /**
256 * Method handle_manage_sites_screen_settings()
257 *
258 * Handle manage sites screen settings
259 */
260 public function handle_manage_sites_screen_settings() { // phpcs:ignore -- NOSONAR - required to achieve desired results, pull request solutions appreciated.
261 if ( isset( $_POST['wp_nonce'] ) && wp_verify_nonce( sanitize_key( $_POST['wp_nonce'] ), 'ManageSitesScrOptions' ) ) {
262 $show_cols = array();
263 foreach ( array_map( 'sanitize_text_field', wp_unslash( $_POST ) ) as $key => $val ) {
264 if ( false !== strpos( $key, 'mainwp_show_column_' ) ) {
265 $col = str_replace( 'mainwp_show_column_', '', $key );
266 $show_cols[ $col ] = 1;
267 }
268 }
269 if ( isset( $_POST['show_columns_name'] ) ) {
270 foreach ( array_map( 'sanitize_text_field', wp_unslash( $_POST['show_columns_name'] ) ) as $col ) {
271 if ( ! isset( $show_cols[ $col ] ) ) {
272 $show_cols[ $col ] = 0; // uncheck, hide columns.
273 }
274 }
275 }
276 MainWP_Utility::update_option( 'mainwp_use_favicon', 1 );
277 MainWP_Utility::update_option( 'mainwp_optimize', ( ! isset( $_POST['mainwp_optimize'] ) ? 0 : 1 ) );
278 $user = wp_get_current_user();
279 if ( $user ) {
280 $val = ( isset( $_POST['mainwp_sitesviewmode'] ) ? sanitize_text_field( wp_unslash( $_POST['mainwp_sitesviewmode'] ) ) : 'grid' );
281 if ( 'grid' !== $val && 'table' !== $val ) {
282 $val = 'grid';
283 }
284 update_user_option( $user->ID, 'mainwp_sitesviewmode', $val, true );
285 update_user_option( $user->ID, 'mainwp_settings_show_manage_sites_columns', $show_cols, true );
286 update_option( 'mainwp_default_sites_per_page', ( isset( $_POST['mainwp_default_sites_per_page'] ) ? intval( $_POST['mainwp_default_sites_per_page'] ) : 25 ) );
287 }
288 } elseif ( isset( $_POST['wp_nonce'] ) && wp_verify_nonce( sanitize_key( $_POST['wp_nonce'] ), 'SreenshotsSitesScrOptions' ) ) {
289 $user = wp_get_current_user();
290 if ( $user ) {
291 $val = ( isset( $_POST['mainwp_sitesviewmode'] ) ? sanitize_text_field( wp_unslash( $_POST['mainwp_sitesviewmode'] ) ) : 'grid' );
292 if ( 'grid' !== $val && 'table' !== $val ) {
293 $val = 'grid';
294 }
295 update_user_option( $user->ID, 'mainwp_sitesviewmode', $val, true );
296 }
297 }
298 }
299
300 /**
301 * Method handle_monitoring_sites_screen_settings()
302 *
303 * Handle monitoring sites screen settings
304 */
305 public function handle_monitoring_sites_screen_settings() { // phpcs:ignore -- NOSONAR - complex.
306 if ( isset( $_POST['wp_nonce'] ) && wp_verify_nonce( sanitize_key( $_POST['wp_nonce'] ), 'MonitoringSitesScrOptions' ) ) {
307 $show_cols = array();
308 foreach ( array_map( 'sanitize_text_field', wp_unslash( $_POST ) ) as $key => $val ) {
309 if ( false !== strpos( $key, 'mainwp_show_column_' ) ) {
310 $col = str_replace( 'mainwp_show_column_', '', $key );
311 $show_cols[ $col ] = 1;
312 }
313 }
314 if ( isset( $_POST['show_columns_name'] ) ) {
315 foreach ( array_map( 'sanitize_text_field', wp_unslash( $_POST['show_columns_name'] ) ) as $col ) {
316 if ( ! isset( $show_cols[ $col ] ) ) {
317 $show_cols[ $col ] = 0; // uncheck, hide columns.
318 }
319 }
320 }
321
322 $user = wp_get_current_user();
323 if ( $user ) {
324 update_user_option( $user->ID, 'mainwp_settings_show_monitoring_sites_columns', $show_cols, true );
325 update_option( 'mainwp_default_monitoring_sites_per_page', ( isset( $_POST['mainwp_default_monitoring_sites_per_page'] ) ? intval( $_POST['mainwp_default_monitoring_sites_per_page'] ) : 25 ) );
326 }
327
328 update_option( 'mainwp_disableSitesChecking', ( ! isset( $_POST['mainwp_disableSitesChecking'] ) ? 1 : 0 ) );
329
330 $val = isset( $_POST['mainwp_frequency_sitesChecking'] ) ? intval( $_POST['mainwp_frequency_sitesChecking'] ) : 1440;
331 update_option( 'mainwp_frequencySitesChecking', $val );
332
333 update_option( 'mainwp_disableSitesHealthMonitoring', ( ! isset( $_POST['mainwp_disable_sitesHealthMonitoring'] ) ? 1 : 0 ) );
334
335 $val = isset( $_POST['mainwp_site_healthThreshold'] ) ? intval( $_POST['mainwp_site_healthThreshold'] ) : 80;
336 update_option( 'mainwp_sitehealthThreshold', $val );
337 }
338 }
339
340 /**
341 * Method handle_clients_screen_settings()
342 *
343 * Handle manage clients screen settings
344 */
345 public function handle_clients_screen_settings() { // phpcs:ignore -- NOSONAR - complex.
346 if ( isset( $_POST['wp_nonce'] ) && wp_verify_nonce( sanitize_key( $_POST['wp_nonce'] ), 'ManageClientsScrOptions' ) ) {
347 $show_cols = array();
348 foreach ( array_map( 'sanitize_text_field', wp_unslash( $_POST ) ) as $key => $val ) {
349 if ( false !== strpos( $key, 'mainwp_show_column_' ) ) {
350 $col = str_replace( 'mainwp_show_column_', '', $key );
351 $show_cols[ $col ] = 1;
352 }
353 }
354 if ( isset( $_POST['show_columns_name'] ) ) {
355 foreach ( array_map( 'sanitize_text_field', wp_unslash( $_POST['show_columns_name'] ) ) as $col ) {
356 if ( ! isset( $show_cols[ $col ] ) ) {
357 $show_cols[ $col ] = 0; // uncheck, hide columns.
358 }
359 }
360 }
361
362 $user = wp_get_current_user();
363 if ( $user ) {
364 update_user_option( $user->ID, 'mainwp_settings_show_manage_clients_columns', $show_cols, true );
365 update_option( 'mainwp_default_manage_clients_per_page', ( isset( $_POST['mainwp_default_manage_clients_per_page'] ) ? intval( $_POST['mainwp_default_manage_clients_per_page'] ) : 25 ) );
366 }
367 }
368 }
369
370 /**
371 * Method handle_clients_screen_settings()
372 *
373 * Handle manage clients screen settings
374 */
375 public function handle_updates_screen_settings() {
376 if ( isset( $_POST['wp_nonce'] ) && wp_verify_nonce( sanitize_key( $_POST['wp_nonce'] ), 'UpdatesScrOptions' ) ) {
377 $val = ( ! isset( $_POST['mainwp_pluginAutomaticDailyUpdate'] ) ? 0 : intval( $_POST['mainwp_pluginAutomaticDailyUpdate'] ) );
378 MainWP_Utility::update_option( 'mainwp_pluginAutomaticDailyUpdate', $val );
379 $val = ( ! isset( $_POST['mainwp_themeAutomaticDailyUpdate'] ) ? 0 : intval( $_POST['mainwp_themeAutomaticDailyUpdate'] ) );
380 MainWP_Utility::update_option( 'mainwp_themeAutomaticDailyUpdate', $val );
381 $val = ( ! isset( $_POST['mainwp_automaticDailyUpdate'] ) ? 0 : intval( $_POST['mainwp_automaticDailyUpdate'] ) );
382 MainWP_Utility::update_option( 'mainwp_automaticDailyUpdate', $val );
383 $val = ( isset( $_POST['mainwp_delay_autoupdate'] ) ? intval( $_POST['mainwp_delay_autoupdate'] ) : 1 );
384 MainWP_Utility::update_option( 'mainwp_delay_autoupdate', $val );
385 $val = ( ! isset( $_POST['mainwp_show_language_updates'] ) ? 0 : 1 );
386 MainWP_Utility::update_option( 'mainwp_show_language_updates', $val );
387 $val = ( ! isset( $_POST['mainwp_disable_update_confirmations'] ) ? 0 : intval( $_POST['mainwp_disable_update_confirmations'] ) );
388 MainWP_Utility::update_option( 'mainwp_disable_update_confirmations', $val );
389 }
390 }
391
392
393 /**
394 * Method handle_mainwp_tools_settings()
395 *
396 * Handle mainwp tools settings.
397 *
398 * @uses \MainWP\Dashboard\MainWP_Twitter::clear_all_twitter_messages()
399 * @uses \MainWP\Dashboard\MainWP_Utility::update_option()
400 */
401 public function handle_mainwp_tools_settings() { // phpcs:ignore -- NOSONAR -Current complexity is the only way to achieve desired results, pull request solutions appreciated.
402
403 $user = wp_get_current_user();
404
405 $update_selected_mainwp_themes = false;
406
407 if ( isset( $_GET['page'] ) && 'MainWPTools' === $_GET['page'] && isset( $_POST['wp_nonce'] ) && wp_verify_nonce( sanitize_key( $_POST['wp_nonce'] ), 'MainWPTools' ) ) {
408 if ( isset( $_POST['mainwp_restore_info_messages'] ) && ! empty( $_POST['mainwp_restore_info_messages'] ) ) {
409 delete_user_option( $user->ID, 'mainwp_notice_saved_status' );
410 }
411 $enabled_tours = ! isset( $_POST['mainwp-guided-tours-option'] ) ? 0 : 1;
412 MainWP_Utility::update_option( 'mainwp_enable_guided_tours', $enabled_tours );
413
414 if ( isset( $_POST['mainwp_settings_custom_theme'] ) ) {
415 $update_selected_mainwp_themes = true;
416 }
417 }
418
419 if ( isset( $_POST['wp_scr_options_nonce'] ) && wp_verify_nonce( sanitize_key( $_POST['wp_scr_options_nonce'] ), 'MainWPSelectThemes' ) ) {
420 $update_selected_mainwp_themes = true;
421 }
422
423 if ( $update_selected_mainwp_themes && isset( $_POST['mainwp_settings_custom_theme'] ) ) {
424 $custom_theme = sanitize_text_field( wp_unslash( $_POST['mainwp_settings_custom_theme'] ) );
425 update_user_option( $user->ID, 'mainwp_selected_theme', $custom_theme );
426 }
427
428 $update_screen_options = false;
429 if ( isset( $_POST['wp_nonce'] ) && ( wp_verify_nonce( sanitize_key( $_POST['wp_nonce'] ), 'Settings' ) || wp_verify_nonce( sanitize_key( $_POST['wp_nonce'] ), 'MainWPScrOptions' ) ) ) {
430 $update_screen_options = true;
431 }
432
433 if ( $update_screen_options ) {
434 $show_wids = array();
435 if ( isset( $_POST['mainwp_show_widgets'] ) && is_array( $_POST['mainwp_show_widgets'] ) ) {
436 $selected_wids = array_map( 'sanitize_text_field', wp_unslash( $_POST['mainwp_show_widgets'] ) );
437 foreach ( $selected_wids as $name ) {
438 $show_wids[ $name ] = 1;
439 }
440 }
441
442 if ( isset( $_POST['mainwp_widgets_name'] ) && is_array( $_POST['mainwp_widgets_name'] ) ) {
443 $name_wids = array_map( 'sanitize_text_field', wp_unslash( $_POST['mainwp_widgets_name'] ) );
444 foreach ( $name_wids as $name ) {
445 if ( ! isset( $show_wids[ $name ] ) ) {
446 $show_wids[ $name ] = 0;
447 }
448 }
449 }
450
451 $show_cols = array();
452 if ( isset( $_POST['mainwp_show_columns'] ) && is_array( $_POST['mainwp_show_columns'] ) ) {
453 $selected_cols = array_map( 'sanitize_text_field', wp_unslash( $_POST['mainwp_show_columns'] ) );
454 foreach ( $selected_cols as $name ) {
455 $show_cols[ $name ] = 1;
456 }
457 }
458
459 if ( isset( $_POST['mainwp_columns_name'] ) && is_array( $_POST['mainwp_columns_name'] ) ) {
460 $name_cols = array_map( 'sanitize_text_field', wp_unslash( $_POST['mainwp_columns_name'] ) );
461 foreach ( $name_cols as $name ) {
462 if ( ! isset( $show_cols[ $name ] ) ) {
463 $show_cols[ $name ] = 0;
464 }
465 }
466 }
467
468 $val = ( isset( $_POST['mainwp_sidebarPosition'] ) ? intval( $_POST['mainwp_sidebarPosition'] ) : 1 );
469 if ( $user ) {
470 update_user_option( $user->ID, 'mainwp_settings_show_widgets', $show_wids, true );
471 update_user_option( $user->ID, 'mainwp_sidebarPosition', $val, true );
472
473 if ( isset( $_POST['mainwp_manageposts_show_columns_settings'] ) ) {
474 update_user_option( $user->ID, 'mainwp_manageposts_show_columns', $show_cols, true );
475 }
476
477 if ( isset( $_POST['mainwp_managepages_show_columns_settings'] ) ) {
478 update_user_option( $user->ID, 'mainwp_managepages_show_columns', $show_cols, true );
479 }
480
481 if ( isset( $_POST['mainwp_manageusers_show_columns_settings'] ) ) {
482 update_user_option( $user->ID, 'mainwp_manageusers_show_columns', $show_cols, true );
483 }
484 }
485
486 MainWP_Utility::update_option( 'mainwp_hide_update_everything', ( ! isset( $_POST['hide_update_everything'] ) ? 0 : 1 ) );
487
488 if ( isset( $_POST['reset_overview_settings'] ) && ! empty( $_POST['reset_overview_settings'] ) && isset( $_POST['reset_overview_which_settings'] ) && 'overview_settings' === $_POST['reset_overview_which_settings'] ) {
489 update_user_option( $user->ID, 'mainwp_widgets_sorted_toplevel_page_mainwp_tab', false, true );
490 update_user_option( $user->ID, 'mainwp_widgets_sorted_mainwp_page_managesites', false, true );
491 }
492 }
493
494 $update_clients_screen_options = false;
495 if ( isset( $_POST['wp_scr_options_nonce'] ) && wp_verify_nonce( sanitize_key( $_POST['wp_scr_options_nonce'] ), 'MainWPClientsScrOptions' ) ) {
496 $update_clients_screen_options = true;
497 }
498 if ( $update_clients_screen_options ) {
499
500 $show_wids = array();
501 if ( isset( $_POST['mainwp_show_widgets'] ) && is_array( $_POST['mainwp_show_widgets'] ) ) {
502 $selected_wids = array_map( 'sanitize_text_field', wp_unslash( $_POST['mainwp_show_widgets'] ) );
503 foreach ( $selected_wids as $name ) {
504 $show_wids[ $name ] = 1;
505 }
506 }
507
508 if ( isset( $_POST['mainwp_widgets_name'] ) && is_array( $_POST['mainwp_widgets_name'] ) ) {
509 $name_wids = array_map( 'sanitize_text_field', wp_unslash( $_POST['mainwp_widgets_name'] ) );
510 foreach ( $name_wids as $name ) {
511 if ( ! isset( $show_wids[ $name ] ) ) {
512 $show_wids[ $name ] = 0;
513 }
514 }
515 }
516
517 if ( $user ) {
518 update_user_option( $user->ID, 'mainwp_clients_show_widgets', $show_wids, true );
519 }
520
521 if ( isset( $_POST['reset_client_overview_settings'] ) && ! empty( $_POST['reset_client_overview_settings'] ) ) {
522 update_user_option( $user->ID, 'mainwp_widgets_sorted_mainwp_page_manageclients', false, true );
523 }
524 }
525 }
526
527 /**
528 * Method handle_settings_post()
529 *
530 * Handle saving settings page.
531 *
532 * @uses \MainWP\Dashboard\MainWP_Backup_Handler::handle_settings_post()
533 * @uses \MainWP\Dashboard\MainWP_DB_Common::get_user_extension()
534 * @uses \MainWP\Dashboard\MainWP_DB_Common::update_user_extension()
535 * @uses \MainWP\Dashboard\MainWP_Monitoring_Handler::handle_settings_post()
536 * @uses \MainWP\Dashboard\MainWP_Settings::handle_settings_post()
537 */
538 public function handle_settings_post() { // phpcs:ignore -- NOSONAR - complex method.
539
540 if ( isset( $_GET['page'] ) && ( isset( $_POST['wp_nonce'] ) || isset( $_POST['wp_scr_options_nonce'] ) ) ) {
541 $this->include_pluggable();
542 $this->handle_mainwp_tools_settings();
543 $this->handle_manage_sites_screen_settings();
544 $this->handle_monitoring_sites_screen_settings();
545 $this->handle_clients_screen_settings();
546 $this->handle_updates_screen_settings();
547 }
548
549 if ( isset( $_POST['select_mainwp_options_siteview'] ) ) {
550 $this->include_pluggable();
551 if ( check_admin_referer( 'mainwp-admin-nonce' ) ) {
552 $userExtension = MainWP_DB_Common::instance()->get_user_extension();
553 $userExtension->site_view = ( empty( $_POST['select_mainwp_options_siteview'] ) ? MAINWP_VIEW_PER_PLUGIN_THEME : intval( $_POST['select_mainwp_options_siteview'] ) );
554 MainWP_DB_Common::instance()->update_user_extension( $userExtension );
555 }
556 }
557
558 if ( isset( $_POST['select_mainwp_options_plugintheme_view'] ) ) {
559 $this->include_pluggable();
560 if ( check_admin_referer( 'mainwp-admin-nonce' ) ) {
561 $view_per = ( empty( $_POST['select_mainwp_options_plugintheme_view'] ) ? MAINWP_VIEW_PER_PLUGIN_THEME : intval( $_POST['select_mainwp_options_plugintheme_view'] ) );
562 $which = isset( $_POST['whichview'] ) ? sanitize_text_field( wp_unslash( $_POST['whichview'] ) ) : '';
563 if ( 'plugin' === $which ) {
564 MainWP_Utility::update_user_option( 'mainwp_manage_plugin_view', $view_per );
565 } else {
566 MainWP_Utility::update_user_option( 'mainwp_manage_theme_view', $view_per );
567 }
568 }
569 }
570
571 if ( isset( $_POST['submit'] ) && isset( $_POST['wp_nonce'] ) ) {
572 $this->include_pluggable();
573 if ( wp_verify_nonce( sanitize_key( $_POST['wp_nonce'] ), 'Settings' ) ) {
574 $updated = MainWP_Settings::handle_settings_post();
575 $updated |= MainWP_Backup_Handler::handle_settings_post();
576 $updated |= MainWP_Monitoring_Handler::handle_settings_post();
577 $msg = '';
578 if ( $updated ) {
579 $msg = '&message=saved';
580 }
581 wp_safe_redirect( admin_url( 'admin.php?page=Settings' . $msg ) );
582 exit();
583 }
584 }
585
586 if ( isset( $_POST['mainwp_sidebar_position'] ) && isset( $_POST['wp_nonce'] ) && wp_verify_nonce( sanitize_key( $_POST['wp_nonce'] ), 'onchange_sidebarposition' ) ) {
587 $val = isset( $_POST['mainwp_sidebar_position'] ) && ! empty( $_POST['mainwp_sidebar_position'] ) ? 1 : 0;
588 $user = wp_get_current_user();
589 if ( $user ) {
590 update_user_option( $user->ID, 'mainwp_sidebarPosition', $val, true );
591 }
592 return true;
593 }
594
595 if ( isset( $_GET['viewmode'] ) && isset( $_GET['modenonce'] ) ) {
596 $viewmode = sanitize_text_field( wp_unslash( $_GET['viewmode'] ) );
597 $nonce = sanitize_key( $_GET['modenonce'] );
598 if ( ( 'table' === $viewmode || 'grid' === $viewmode ) && wp_verify_nonce( sanitize_key( $nonce ), 'viewmode' ) ) {
599 $user = wp_get_current_user();
600 if ( $user ) {
601 update_user_option( $user->ID, 'mainwp_sitesviewmode', $viewmode, true );
602 wp_safe_redirect( admin_url( 'admin.php?page=managesites' ) );
603 exit;
604 }
605 }
606 }
607 }
608
609 /**
610 * Method include_pluggable()
611 *
612 * Include pluggable functions.
613 */
614 public function include_pluggable() {
615 // may causing of conflict with Post S m t p plugin.
616 if ( ! function_exists( 'wp_create_nonce' ) ) {
617 include_once ABSPATH . WPINC . '/pluggable.php'; // NOSONAR - WP compatible.
618 }
619 }
620
621 /**
622 * Method plugins_api_extension_info()
623 *
624 * Get MainWP Extension api information.
625 *
626 * @param mixed $input_value Return value.
627 * @param mixed $action Action being performed.
628 * @param mixed $arg Action arguments. Should be the plugin slug.
629 *
630 * @return mixed $info|$input_value
631 *
632 * @uses \MainWP\Dashboard\MainWP_API_Handler::get_update_information()
633 * @uses \MainWP\Dashboard\MainWP_Extensions_View::get_available_extensions()
634 * @uses \MainWP\Dashboard\MainWP_System::get_plugin_slug()
635 * @uses \MainWP\Dashboard\MainWP_Extensions_Handler::get_slugs()
636 */
637 public function plugins_api_extension_info( $input_value, $action, $arg ) { // phpcs:ignore -- NOSONAR - complex.
638 if ( 'plugin_information' !== $action ) {
639 return $input_value;
640 }
641
642 if ( is_array( $arg ) ) {
643 $arg = (object) $arg;
644 }
645
646 if ( ! isset( $arg->slug ) || ( '' === $arg->slug ) ) {
647 return $input_value;
648 }
649
650 if ( dirname( MainWP_System::instance()->get_plugin_slug() ) === $arg->slug ) {
651 return $input_value;
652 }
653
654 $result = MainWP_Extensions_Handler::get_slugs();
655 $am_slugs = $result['am_slugs'];
656
657 if ( '' !== $am_slugs ) {
658 $am_slugs = explode( ',', $am_slugs );
659 if ( false !== strpos( $arg->slug, '/' ) ) { // to fix.
660 $dir_slug = dirname( $arg->slug );
661 } else {
662 $dir_slug = $arg->slug;
663 }
664 if ( in_array( $dir_slug, $am_slugs ) ) {
665 $info = MainWP_API_Handler::get_update_information( $dir_slug );
666 if ( is_object( $info ) && property_exists( $info, 'sections' ) ) {
667 if ( ! is_array( $info->sections ) || ! isset( $info->sections['changelog'] ) || empty( $info->sections['changelog'] ) ) {
668 $exts_data = MainWP_Extensions_View::get_available_extensions();
669 if ( isset( $exts_data[ $arg->slug ] ) ) {
670 $ext_info = $exts_data[ $arg->slug ];
671 $changelog_link = rtrim( $ext_info['changelog_url'], '/' );
672 $info->sections['changelog'] = '<a href="' . $changelog_link . '" target="_blank">' . $changelog_link . '</a>';
673 }
674 }
675 return $info;
676 }
677 return $info;
678 }
679 }
680
681 return $input_value;
682 }
683
684 /**
685 * Method plugins_api_wp_plugins_api_result()
686 *
687 * Hook after get plugins api information.
688 *
689 * @param mixed $res api information value.
690 * @param mixed $action Action being performed.
691 * @param mixed $arg Action arguments. Should be the plugin slug.
692 *
693 * @return mixed $res
694 */
695 public function plugins_api_wp_plugins_api_result( $res, $action, $arg ) { // phpcs:ignore -- NOSONAR - complex.
696
697 if ( 'plugin_information' !== $action ) {
698 return $res;
699 }
700
701 if ( is_object( $res ) && property_exists( $res, 'slug' ) && property_exists( $res, 'sections' ) ) {
702 return $res;
703 }
704
705 if ( ! isset( $_GET['wpplugin'] ) || ! is_numeric( $_GET['wpplugin'] ) || empty( $_GET['wpplugin'] ) ) { // phpcs:ignore WordPress.Security.NonceVerification,WordPress.Security.ValidatedSanitizedInput.InputNotSanitized
706 return $res;
707 }
708
709 if ( is_array( $arg ) ) {
710 $arg = (object) $arg;
711 }
712
713 if ( ! isset( $arg->slug ) || ( '' === $arg->slug ) ) {
714 return $res;
715 }
716
717 $site_id = intval( $_GET['wpplugin'] ); // phpcs:ignore WordPress.Security.NonceVerification,WordPress.Security.ValidatedSanitizedInput.InputNotSanitized
718
719 if ( $site_id ) {
720 $website = MainWP_DB::instance()->get_website_by_id( $site_id );
721 if ( $website && ! empty( $website->plugin_upgrades ) ) {
722 $plugin_upgrades = json_decode( $website->plugin_upgrades, true );
723
724 if ( is_array( $plugin_upgrades ) ) {
725 $found_update = false;
726 $empty_sections = false;
727 foreach ( $plugin_upgrades as $plugin_slug => $info ) {
728 if ( false !== strpos( $plugin_slug, $arg->slug ) && isset( $info['update'] ) ) {
729 $found_update = true;
730 if ( isset( $info['update']['slug'] ) && $arg->slug === $info['update']['slug'] && isset( $info['update']['new_version'] ) && ! empty( $info['update']['new_version'] ) && isset( $info['update']['sections'] ) && ! empty( $info['update']['sections'] ) ) {
731 $info_update = (object) $info['update'];
732 $info_update->external = false;
733 return $info_update;
734 }
735 $empty_sections = true;
736 break;
737 }
738 }
739
740 if ( $found_update && $empty_sections ) {
741 try {
742 $info = MainWP_Connect::fetch_url_authed(
743 $website,
744 'plugin_action',
745 array(
746 'action' => 'changelog_info', // try to get changelog from the child site.
747 'slug' => $arg->slug,
748 )
749 );
750 if ( is_array( $info ) && isset( $info['update'] ) && ! empty( $info['update']['sections'] ) ) {
751 $info_update = (object) $info['update'];
752 $info_update->external = true;
753 return $info_update;
754 }
755 } catch ( \Exception $e ) {
756 // error happen.
757 }
758 }
759 }
760 }
761 }
762
763 return $res;
764 }
765
766 /**
767 * Method check_update_custom()
768 *
769 * Check MainWP Extensions for updates.
770 *
771 * @param object $transient Transient information.
772 *
773 * @return object $transient Transient information.
774 *
775 * @uses \MainWP\Dashboard\MainWP_API_Handler::get_upgrade_information()
776 * @uses \MainWP\Dashboard\MainWP_Extensions_Handler::get_indexed_extensions_infor()
777 * @uses \MainWP\Dashboard\MainWP_Extensions_Handler::get_extension_slug()
778 * @uses \MainWP\Dashboard\MainWP_Utility::update_option()
779 */
780 public function check_update_custom( $transient ) { // phpcs:ignore -- NOSONAR -Current complexity is the only way to achieve desired results, pull request solutions appreciated.
781 if ( isset( $_POST['action'] ) && ( ( 'update-plugin' === $_POST['action'] ) || ( 'update-selected' === $_POST['action'] ) ) && is_object( $transient ) && property_exists( $transient, 'response' ) ) { // phpcs:ignore WordPress.Security.NonceVerification,WordPress.Security.ValidatedSanitizedInput.InputNotSanitized
782 $extensions = MainWP_Extensions_Handler::get_indexed_extensions_infor( array( 'activated' => true ) );
783 if ( defined( 'DOING_AJAX' ) && isset( $_POST['plugin'] ) && 'update-plugin' === $_POST['action'] ) { // phpcs:ignore WordPress.Security.NonceVerification,WordPress.Security.ValidatedSanitizedInput.InputNotSanitized
784
785 if ( empty( $transient->response ) ) {
786 $transient->response = array();
787 }
788
789 $plugin_slug = sanitize_text_field( wp_unslash( $_POST['plugin'] ) ); // phpcs:ignore WordPress.Security.NonceVerification,WordPress.Security.ValidatedSanitizedInput.InputNotSanitized
790 if ( isset( $extensions[ $plugin_slug ] ) ) {
791
792 if ( ! isset( $transient->response[ $plugin_slug ] ) || ! is_object( $transient->response[ $plugin_slug ] ) || ! property_exists( $transient->response[ $plugin_slug ], 'new_version' ) ) {
793 return $transient;
794 }
795
796 if ( isset( $transient->response[ $plugin_slug ] ) && version_compare( $transient->response[ $plugin_slug ]->new_version, $extensions[ $plugin_slug ]['version'], '=' ) ) {
797 return $transient;
798 }
799
800 $api_slug = dirname( $plugin_slug );
801 $rslt = MainWP_API_Handler::get_upgrade_information( $api_slug );
802
803 if ( ! empty( $rslt ) && is_object( $rslt ) && property_exists( $rslt, 'new_version' ) && ! empty( $rslt->new_version ) && version_compare( $rslt->new_version, $extensions[ $plugin_slug ]['version'], '>' ) ) {
804 $transient->response[ $plugin_slug ] = static::map_rslt_obj( $rslt );
805 }
806
807 return $transient;
808 }
809 } elseif ( 'update-selected' === $_POST['action'] && isset( $_POST['checked'] ) && is_array( $_POST['checked'] ) ) { // phpcs:ignore WordPress.Security.NonceVerification,WordPress.Security.ValidatedSanitizedInput.InputNotSanitized
810
811 if ( empty( $transient->response ) ) {
812 $transient->response = array();
813 }
814
815 $updated = false;
816 foreach ( wp_unslash( $_POST['checked'] ) as $plugin_slug ) { // phpcs:ignore WordPress.Security.NonceVerification,WordPress.Security.ValidatedSanitizedInput.InputNotSanitized
817 if ( isset( $extensions[ $plugin_slug ] ) ) {
818
819 if ( ! isset( $transient->response[ $plugin_slug ] ) ) {
820 $transient->response[ $plugin_slug ] = new \stdClass();
821 }
822
823 if ( isset( $transient->response[ $plugin_slug ] ) && version_compare( $transient->response[ $plugin_slug ]->new_version, $extensions[ $plugin_slug ]['version'], '=' ) ) {
824 continue;
825 }
826 $api_slug = dirname( $plugin_slug );
827 $rslt = MainWP_API_Handler::get_upgrade_information( $api_slug );
828 if ( ! empty( $rslt ) && is_object( $rslt ) && property_exists( $rslt, 'new_version' ) && ! empty( $rslt->new_version ) && version_compare( $rslt->new_version, $extensions[ $plugin_slug ]['version'], '>' ) ) {
829 $this->upgradeVersionInfo->result[ $api_slug ] = $rslt;
830 $transient->response[ $plugin_slug ] = static::map_rslt_obj( $rslt );
831 $updated = true;
832 }
833 }
834 }
835 if ( $updated ) {
836 MainWP_Utility::update_option( 'mainwp_upgradeVersionInfo', $this->upgradeVersionInfo );
837 }
838
839 return $transient;
840 }
841 }
842
843 if ( empty( $transient->checked ) ) {
844 return $transient;
845 }
846
847 if ( ! empty( $this->upgradeVersionInfo ) && property_exists( $this->upgradeVersionInfo, 'result' ) && is_array( $this->upgradeVersionInfo->result ) ) {
848 foreach ( $this->upgradeVersionInfo->result as $rslt ) {
849 if ( ! isset( $rslt->slug ) ) {
850 continue;
851 }
852
853 $plugin_slug = MainWP_Extensions_Handler::get_extension_slug( $rslt->slug );
854 if ( isset( $transient->checked[ $plugin_slug ] ) && property_exists( $rslt, 'new_version' ) && ! empty( $rslt->new_version ) && version_compare( $rslt->new_version, $transient->checked[ $plugin_slug ], '>' ) ) {
855 $transient->response[ $plugin_slug ] = static::map_rslt_obj( $rslt );
856 }
857 }
858 }
859
860 return $transient;
861 }
862
863
864 /**
865 * Method map_rslt_obj()
866 *
867 * Map resulting object.
868 *
869 * @param object $result Resulting information.
870 *
871 * @return object $obj Mapped resulting object.
872 */
873 public static function map_rslt_obj( $result ) {
874 $obj = new \stdClass();
875 $obj->slug = $result->slug;
876 $obj->new_version = $result->new_version;
877 $obj->url = 'https://mainwp.com/';
878 $obj->package = $result->package;
879
880 return $obj;
881 }
882
883 /**
884 * Method check_upgrade()
885 *
886 * Check if Extension has an update.
887 *
888 * @uses \MainWP\Dashboard\MainWP_API_Handler::check_exts_upgrade()
889 * @uses \MainWP\Dashboard\MainWP_Utility::update_option()
890 */
891 private function check_upgrade() {
892 $result = MainWP_API_Handler::check_exts_upgrade();
893 if ( null === $this->upgradeVersionInfo ) {
894 $this->upgradeVersionInfo = new \stdClass();
895 }
896 $this->upgradeVersionInfo->updated = time();
897 if ( ! empty( $result ) ) {
898 $this->upgradeVersionInfo->result = $result;
899 }
900 MainWP_Utility::update_option( 'mainwp_upgradeVersionInfo', $this->upgradeVersionInfo );
901 }
902
903 /**
904 * Method pre_check_update_custom()
905 *
906 * Pre-check for extension updates.
907 *
908 * @param object $transient Transient information.
909 *
910 * @return object $transient Transient information.
911 *
912 * @uses \MainWP\Dashboard\MainWP_Extensions_Handler::get_indexed_extensions_infor()
913 * @uses \MainWP\Dashboard\MainWP_Extensions_Handler::get_extension_slug()
914 */
915 public function pre_check_update_custom( $transient ) {
916 if ( ! isset( $transient->checked ) ) {
917 return $transient;
918 }
919
920 if ( ( null === $this->upgradeVersionInfo ) || ! property_exists( $this->upgradeVersionInfo, 'updated' ) || ( ( time() - $this->upgradeVersionInfo->updated ) > 60 ) ) {
921 $this->check_upgrade();
922 }
923
924 if ( empty( $transient->response ) ) {
925 $transient->response = array();
926 }
927
928 if ( ! empty( $this->upgradeVersionInfo ) && property_exists( $this->upgradeVersionInfo, 'result' ) && is_array( $this->upgradeVersionInfo->result ) ) {
929 $extensions = MainWP_Extensions_Handler::get_indexed_extensions_infor( array( 'activated' => true ) );
930 foreach ( $this->upgradeVersionInfo->result as $rslt ) {
931 $plugin_slug = MainWP_Extensions_Handler::get_extension_slug( $rslt->slug );
932 if ( isset( $extensions[ $plugin_slug ] ) && property_exists( $rslt, 'new_version' ) && ! empty( $rslt->new_version ) && version_compare( $rslt->new_version, $extensions[ $plugin_slug ]['version'], '>' ) ) {
933 $transient->response[ $plugin_slug ] = static::map_rslt_obj( $rslt );
934 }
935 }
936 }
937
938 return $transient;
939 }
940
941 /**
942 * Method upload_file()
943 *
944 * Upload a file.
945 *
946 * @param mixed $file File to upload.
947 *
948 * @return void
949 *
950 * @uses \MainWP\Dashboard\MainWP_Utility::ends_with()
951 */
952 public function upload_file( $file ) {
953 header( 'Content-Description: File Transfer' );
954 $dwl_fname = basename( $file );
955 if ( 'tar.gz' === $dwl_fname || '.tar.gz' === $dwl_fname ) {
956 $dwl_fname = 'noname.tar.gz'; // to fix name of zip file.
957 }
958 header( 'Content-Type: application/octet-stream' );
959 header( 'Content-Disposition: attachment; filename="' . $dwl_fname . '"' );
960 header( 'Expires: 0' );
961 header( 'Cache-Control: must-revalidate' );
962 header( 'Pragma: public' );
963 header( 'Content-Length: ' . filesize( $file ) );
964 while ( ob_get_level() ) {
965 ob_end_clean();
966 }
967 $this->readfile_chunked( $file );
968 exit();
969 }
970
971 /**
972 * Method readfile_chunked()
973 *
974 * Read Chunked File.
975 *
976 * @param mixed $filename Name of file.
977 *
978 * @return mixed echo $buffer|false|$handle.
979 */
980 public function readfile_chunked( $filename ) {
981 $chunksize = 1024;
982 $handle = fopen( $filename, 'rb' );
983 if ( false === $handle ) {
984 return false;
985 }
986
987 while ( ! feof( $handle ) ) {
988 $buffer = fread( $handle, $chunksize );
989 echo $buffer; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
990 if ( ob_get_length() ) {
991 ob_flush();
992 flush();
993 }
994 $buffer = null;
995 }
996
997 return fclose( $handle );
998 }
999
1000 /**
1001 * Method activate_redirection()
1002 *
1003 * Redirect after activating MainWP Extension.
1004 *
1005 * @param mixed $location Location to redirect to.
1006 *
1007 * @return $location Admin URL + the page to redirect to.
1008 */
1009 public function activate_redirect( $location ) {
1010 unset( $location );
1011 return admin_url( 'admin.php?page=Extensions' );
1012 }
1013
1014 /**
1015 * Method activate_extension()
1016 *
1017 * Activate MainWP Extension.
1018 *
1019 * @param mixed $ext_key Extension API Key.
1020 * @param array $info Extension Info.
1021 *
1022 * @uses \MainWP\Dashboard\MainWP_Api_Manager::set_activation_info()
1023 * @uses \MainWP\Dashboard\MainWP_Api_Manager_Password_Management::generate_password()
1024 */
1025 public function activate_extension( $ext_key, $info = array() ) {
1026
1027 add_filter( 'wp_redirect', array( $this, 'activate_redirect' ) );
1028
1029 if ( is_array( $info ) && isset( $info['product_id'] ) && isset( $info['software_version'] ) ) {
1030 $act_info = array(
1031 'product_id' => $info['product_id'],
1032 'software_version' => $info['software_version'],
1033 'activated_key' => 'Deactivated',
1034 'instance_id' => MainWP_Api_Manager_Password_Management::generate_password( 12, false ),
1035 );
1036 MainWP_Api_Manager::instance()->set_activation_info( $ext_key, $act_info );
1037 }
1038 }
1039
1040 /**
1041 * Method deactivate_extension()
1042 *
1043 * Deactivate MaiNWP Extension.
1044 *
1045 * @param mixed $ext_key Exnension API Key.
1046 * @param bool $dashboard_only Deactive API Key on dashboard only.
1047 *
1048 * @uses \MainWP\Dashboard\MainWP_Api_Manager::set_activation_info()
1049 */
1050 public function deactivate_extension( $ext_key, $dashboard_only = false ) {
1051 // try to deactivate license.
1052 if ( ! $dashboard_only ) {
1053 $mainwp_api_key = MainWP_Api_Manager_Key::instance()->get_decrypt_master_api_key();
1054 MainWP_Api_Manager::instance()->license_key_deactivation( $ext_key, $mainwp_api_key );
1055 }
1056
1057 MainWP_Api_Manager::instance()->remove_activation_info( $ext_key );
1058 }
1059 }
1060