PluginProbe
MainWP Dashboard: Self-hosted WordPress Management for Agencies / 6.2.1
MainWP Dashboard: Self-hosted WordPress Management for Agencies v6.2.1
6.2.3 6.2.2 6.2.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 All 156 releases
← All changes | class/class-mainwp-hooks.php +1927 -1696 5.0.3.2 → 6.2.1 View file →
@@ -6,8 +6,13 @@
6 6 */
7 7
8 8 namespace MainWP\Dashboard;
9 9
10 +// Exit if accessed directly.
11 +if ( ! defined( 'ABSPATH' ) ) {
12 + exit;
13 +}
14 +
10 15 // phpcs:disable Generic.Metrics.CyclomaticComplexity -- complexity.
11 16
12 17 /**
13 18 * Class MainWP_Hooks
@@ -13,1888 +18,2114 @@
13 18 * Class MainWP_Hooks
14 19 *
15 20 * @package MainWP\Dashboard
16 21 */
17 -class MainWP_Hooks {
22 +class MainWP_Hooks { // phpcs:ignore Generic.Classes.OpeningBraceSameLine.ContentAfterBrace -- NOSONAR.
23 + /**
24 + * MainWP_Hooks constructor.
25 + *
26 + * Initialize MainWP_Hooks actions/filters upon creation of the object.
27 + *
28 + * @deprecated 4.0.7. Hook deprecation - Please use filter `mainwp_get_error_message` instead of `mainwp_getErrorMessage`.
29 + *
30 + * @uses \MainWP\Dashboard\MainWP_System_Utility::get_class_name()
31 + * @uses \MainWP\Dashboard\MainWP_UI::get_class_name()
32 + * @uses \MainWP\Dashboard\MainWP_Extensions_Handler::get_class_name()
33 + * @uses \MainWP\Dashboard\MainWP_Install_Bulk::get_class_name()
34 + */
35 + public function __construct() {
36 + add_filter( 'mainwp_getspecificdir', array( MainWP_System_Utility::get_class_name(), 'get_mainwp_specific_dir' ), 10, 1 );
37 + add_filter( 'mainwp_getmainwpdir', array( &$this, 'hook_get_mainwp_dir' ), 10, 3 );
38 + add_filter( 'mainwp_is_multi_user', array( &$this, 'is_multi_user' ) );
39 + add_filter( 'mainwp_qq2fileuploader', array( &$this, 'filter_qq2_file_uploader' ), 10, 2 );
40 + add_action( 'mainwp_select_sites_box', array( &$this, 'hook_select_sites_box' ), 10, 12 );
41 + add_action( 'mainwp_add_categories_box', array( &$this, 'hook_add_categories_box' ), 10, 1 );
42 + add_action( 'mainwp_prepareinstallplugintheme', array( MainWP_Install_Bulk::get_class_name(), 'prepare_install' ) );
43 + add_action( 'mainwp_performinstallplugintheme', array( MainWP_Install_Bulk::get_class_name(), 'perform_install' ) );
44 + add_filter( 'mainwp_getwpfilesystem', array( MainWP_System_Utility::get_class_name(), 'get_wp_file_system' ) );
45 + add_filter( 'mainwp_getspecificurl', array( MainWP_System_Utility::get_class_name(), 'get_mainwp_specific_url' ), 10, 1 );
46 + add_filter( 'mainwp_getdownloadurl', array( MainWP_System_Utility::get_class_name(), 'get_download_url' ), 10, 2 );
47 + add_action( 'mainwp_renderHeader', array( MainWP_UI::get_class_name(), 'render_header' ), 10, 2 );
48 + add_action( 'mainwp_renderFooter', array( MainWP_UI::get_class_name(), 'render_footer' ), 10, 0 );
18 49
19 - /**
20 - * MainWP_Hooks constructor.
21 - *
22 - * Initialize MainWP_Hooks actions/filters upon creation of the object.
23 - *
24 - * @deprecated 4.0.7. Hook deprecation - Please use filter `mainwp_get_error_message` instead of `mainwp_getErrorMessage`.
25 - *
26 - * @uses \MainWP\Dashboard\MainWP_System_Utility::get_class_name()
27 - * @uses \MainWP\Dashboard\MainWP_UI::get_class_name()
28 - * @uses \MainWP\Dashboard\MainWP_Extensions_Handler::get_class_name()
29 - * @uses \MainWP\Dashboard\MainWP_Install_Bulk::get_class_name()
30 - */
31 - public function __construct() {
32 - add_filter( 'mainwp_getspecificdir', array( MainWP_System_Utility::get_class_name(), 'get_mainwp_specific_dir' ), 10, 1 );
33 - add_filter( 'mainwp_getmainwpdir', array( &$this, 'hook_get_mainwp_dir' ), 10, 3 );
34 - add_filter( 'mainwp_is_multi_user', array( &$this, 'is_multi_user' ) );
35 - add_filter( 'mainwp_qq2fileuploader', array( &$this, 'filter_qq2_file_uploader' ), 10, 2 );
36 - add_action( 'mainwp_select_sites_box', array( &$this, 'hook_select_sites_box' ), 10, 12 );
37 - add_action( 'mainwp_add_categories_box', array( &$this, 'hook_add_categories_box' ), 10, 1 );
38 - add_action( 'mainwp_prepareinstallplugintheme', array( MainWP_Install_Bulk::get_class_name(), 'prepare_install' ) );
39 - add_action( 'mainwp_performinstallplugintheme', array( MainWP_Install_Bulk::get_class_name(), 'perform_install' ) );
40 - add_filter( 'mainwp_getwpfilesystem', array( MainWP_System_Utility::get_class_name(), 'get_wp_file_system' ) );
41 - add_filter( 'mainwp_getspecificurl', array( MainWP_System_Utility::get_class_name(), 'get_mainwp_specific_url' ), 10, 1 );
42 - add_filter( 'mainwp_getdownloadurl', array( MainWP_System_Utility::get_class_name(), 'get_download_url' ), 10, 2 );
43 - add_action( 'mainwp_renderHeader', array( MainWP_UI::get_class_name(), 'render_header' ), 10, 2 );
44 - add_action( 'mainwp_renderFooter', array( MainWP_UI::get_class_name(), 'render_footer' ), 10, 0 );
50 + add_action( 'mainwp_notify_user', array( &$this, 'hook_notify_user' ), 10, 3 );
51 + add_filter( 'mainwp_is_mainwp_page', array( MainWP_System::class, 'is_mainwp_pages' ) );
45 52
46 - add_action( 'mainwp_notify_user', array( &$this, 'hook_notify_user' ), 10, 3 );
47 - add_filter( 'mainwp_is_mainwp_page', array( MainWP_System::class, 'is_mainwp_pages' ) );
53 + /**
54 + * The actions has been deprecated.
55 + *
56 + * @deprecated 4.3 Please use actions: mainwp_action_activeplugin, mainwp_action_deactiveplugin ....
57 + */
58 + add_action( 'mainwp_activePlugin', array( &$this, 'active_plugin' ), 10, 0 );
59 + add_action( 'mainwp_deactivePlugin', array( &$this, 'deactive_plugin' ), 10, 0 );
60 + add_action( 'mainwp_upgradePluginTheme', array( &$this, 'upgrade_plugin_theme' ), 10, 0 );
61 + add_action( 'mainwp_deletePlugin', array( &$this, 'delete_plugin' ), 10, 0 );
62 + add_action( 'mainwp_deleteTheme', array( &$this, 'delete_theme' ), 10, 0 );
63 + // End.
48 64
49 - /**
50 - * The actions has been deprecated.
51 - *
52 - * @deprecated 4.3 Please use actions: mainwp_action_activeplugin, mainwp_action_deactiveplugin ....
53 - */
54 - add_action( 'mainwp_activePlugin', array( &$this, 'active_plugin' ), 10, 0 );
55 - add_action( 'mainwp_deactivePlugin', array( &$this, 'deactive_plugin' ), 10, 0 );
56 - add_action( 'mainwp_upgradePluginTheme', array( &$this, 'upgrade_plugin_theme' ), 10, 0 );
57 - add_action( 'mainwp_deletePlugin', array( &$this, 'delete_plugin' ), 10, 0 );
58 - add_action( 'mainwp_deleteTheme', array( &$this, 'delete_theme' ), 10, 0 );
59 - // End.
65 + /**
66 + * Plugins/themes/core actions.
67 + *
68 + * @since 4.3
69 + */
70 + add_action( 'mainwp_action_activeplugin', array( &$this, 'active_plugin' ), 10, 0 );
71 + add_action( 'mainwp_action_deactiveplugin', array( &$this, 'deactive_plugin' ), 10, 0 );
72 + add_action( 'mainwp_action_upgradeplugintheme', array( &$this, 'upgrade_plugin_theme' ), 10, 0 );
73 + add_action( 'mainwp_action_deleteplugin', array( &$this, 'delete_plugin' ), 10, 0 );
74 + add_action( 'mainwp_action_deletetheme', array( &$this, 'delete_theme' ), 10, 0 );
75 + add_action( 'mainwp_upgrade_wp', array( &$this, 'upgrade_wp' ), 10, 0 );
76 + // End.
60 77
61 - /**
62 - * Plugins/themes/core actions.
63 - *
64 - * @since 4.3
65 - */
66 - add_action( 'mainwp_action_activeplugin', array( &$this, 'active_plugin' ), 10, 0 );
67 - add_action( 'mainwp_action_deactiveplugin', array( &$this, 'deactive_plugin' ), 10, 0 );
68 - add_action( 'mainwp_action_upgradeplugintheme', array( &$this, 'upgrade_plugin_theme' ), 10, 0 );
69 - add_action( 'mainwp_action_deleteplugin', array( &$this, 'delete_plugin' ), 10, 0 );
70 - add_action( 'mainwp_action_deletetheme', array( &$this, 'delete_theme' ), 10, 0 );
71 - add_action( 'mainwp_upgrade_wp', array( &$this, 'upgrade_wp' ), 10, 0 );
72 - // End.
78 + add_filter( 'mainwp_get_user_extension', array( &$this, 'hook_get_user_extension' ), 10, 2 );
79 + add_filter( 'mainwp_update_user_extension', array( &$this, 'update_user_extension' ), 10, 3 );
80 + add_filter( 'mainwp_getwebsitesbyurl', array( &$this, 'get_websites_by_url' ) );
81 + add_filter( 'mainwp_getWebsitesByUrl', array( &$this, 'get_websites_by_url' ) );
82 + add_action( 'mainwp_manage_posts_get_edit', array( &$this, 'hook_posts_get_edit' ), 10, 2 );
83 + add_action( 'mainwp_manage_posts_bulk_posting', array( &$this, 'hook_posts_bulk_posting' ), 10, 2 );
73 84
74 - add_filter( 'mainwp_get_user_extension', array( &$this, 'hook_get_user_extension' ), 10, 2 );
75 - add_filter( 'mainwp_update_user_extension', array( &$this, 'update_user_extension' ), 10, 3 );
76 - add_filter( 'mainwp_getwebsitesbyurl', array( &$this, 'get_websites_by_url' ) );
77 - add_filter( 'mainwp_getWebsitesByUrl', array( &$this, 'get_websites_by_url' ) );
78 - add_action( 'mainwp_manage_posts_get_edit', array( &$this, 'hook_posts_get_edit' ), 10, 2 );
79 - add_action( 'mainwp_manage_posts_bulk_posting', array( &$this, 'hook_posts_bulk_posting' ), 10, 2 );
85 + /**
86 + * The mainwp_getErrorMessage filter has been deprecated.
87 + *
88 + * @deprecated 4.0.7. Please use filter mainwp_get_error_message.
89 + */
90 + add_filter( 'mainwp_getErrorMessage', array( &$this, 'get_error_message' ), 10, 2 );
91 + add_filter( 'mainwp_get_error_message', array( &$this, 'get_error_message' ), 10, 2 );
80 92
81 - /**
82 - * The mainwp_getErrorMessage filter has been deprecated.
83 - *
84 - * @deprecated 4.0.7. Please use filter mainwp_get_error_message.
85 - */
86 - add_filter( 'mainwp_getErrorMessage', array( &$this, 'get_error_message' ), 10, 2 );
87 - add_filter( 'mainwp_get_error_message', array( &$this, 'get_error_message' ), 10, 2 );
93 + add_filter( 'mainwp_getwebsitesbygroupids', array( &$this, 'hook_get_websites_by_group_ids' ), 10, 2 );
88 94
89 - add_filter( 'mainwp_getwebsitesbygroupids', array( &$this, 'hook_get_websites_by_group_ids' ), 10, 2 );
95 + add_filter( 'mainwp_cache_getcontext', array( &$this, 'cache_getcontext' ) );
96 + add_action( 'mainwp_cache_echo_body', array( &$this, 'cache_echo_body' ) );
97 + add_action( 'mainwp_cache_init', array( &$this, 'cache_init' ) );
98 + add_action( 'mainwp_cache_add_context', array( &$this, 'cache_add_context' ), 10, 2 );
99 + add_action( 'mainwp_cache_add_body', array( &$this, 'cache_add_body' ), 10, 2 );
90 100
91 - add_filter( 'mainwp_cache_getcontext', array( &$this, 'cache_getcontext' ) );
92 - add_action( 'mainwp_cache_echo_body', array( &$this, 'cache_echo_body' ) );
93 - add_action( 'mainwp_cache_init', array( &$this, 'cache_init' ) );
94 - add_action( 'mainwp_cache_add_context', array( &$this, 'cache_add_context' ), 10, 2 );
95 - add_action( 'mainwp_cache_add_body', array( &$this, 'cache_add_body' ), 10, 2 );
101 + add_filter( 'mainwp_get_metaboxes_post', array( &$this, 'get_metaboxes_post' ), 10, 0 );
102 + add_filter( 'mainwp_getnotificationemail', array( &$this, 'hook_notification_email' ), 10, 1 );
103 + add_filter( 'mainwp_getformatemail', array( &$this, 'get_formated_email' ), 10, 3 );
104 + add_filter( 'mainwp-extension-available-check', array( MainWP_Extensions_Handler::get_class_name(), 'is_extension_available' ) );
105 + add_filter( 'mainwp_extension_is_activated', array( &$this, 'is_extension_activated' ), 10, 2 );
106 + add_filter( 'mainwp_extension_is_pro_member', array( &$this, 'is_pro_member' ), 10, 1 );
96 107
97 - add_filter( 'mainwp_get_metaboxes_post', array( &$this, 'get_metaboxes_post' ), 10, 0 );
98 - add_filter( 'mainwp_getnotificationemail', array( &$this, 'hook_notification_email' ), 10, 1 );
99 - add_filter( 'mainwp_getformatemail', array( &$this, 'get_formated_email' ), 10, 3 );
100 - add_filter( 'mainwp-extension-available-check', array( MainWP_Extensions_Handler::get_class_name(), 'is_extension_available' ) );
101 - add_filter( 'mainwp_extension_is_activated', array( &$this, 'is_extension_activated' ), 10, 2 );
102 - add_filter( 'mainwp_extension_is_pro_member', array( &$this, 'is_pro_member' ), 10, 1 );
108 + /**
109 + * Handle get avaiable add-ons.
110 + *
111 + * @since 6.0
112 + */
113 + add_filter(
114 + 'mainwp_get_avaiable_add_ons',
115 + function () {
116 + return MainWP_Extensions_View::get_available_extensions( 'all' );
117 + },
118 + 10,
119 + 1
120 + );
103 121
104 - /**
105 - * Logging debug actions.
106 - */
107 - add_action( 'mainwp_log_debug', array( &$this, 'mainwp_log_debug' ), 10, 1 );
108 - add_action( 'mainwp_log_info', array( &$this, 'mainwp_log_info' ), 10, 1 );
109 - add_action( 'mainwp_log_warning', array( &$this, 'mainwp_log_warning' ), 10, 1 );
110 - add_action( 'mainwp_log_action', array( &$this, 'mainwp_log_action' ), 10, 4 );
111 - add_action( 'mainwp_log_execution_time', array( &$this, 'mainwp_log_execution_time' ), 10, 1 );
112 - // END.
122 + /**
123 + * Logging debug actions.
124 + */
125 + add_action( 'mainwp_log_debug', array( &$this, 'mainwp_log_debug' ), 10, 1 );
126 + add_action( 'mainwp_log_info', array( &$this, 'mainwp_log_info' ), 10, 1 );
127 + add_action( 'mainwp_log_warning', array( &$this, 'mainwp_log_warning' ), 10, 1 );
128 + add_action( 'mainwp_log_action', array( &$this, 'mainwp_log_action' ), 10, 4 );
129 + add_action( 'mainwp_log_execution_time', array( &$this, 'mainwp_log_execution_time' ), 10, 1 );
130 + // END.
113 131
114 - add_filter( 'mainwp_getactivateextensionnotice', array( &$this, 'get_activate_extension_notice' ), 10, 1 );
115 - add_action( 'mainwp_enqueue_meta_boxes_scripts', array( &$this, 'enqueue_meta_boxes_scripts' ), 10, 1 );
116 - add_filter( 'mainwp_addsite', array( &$this, 'mainwp_add_site' ), 10, 1 );
117 - add_filter( 'mainwp_deletesite', array( &$this, 'hook_delete_site' ), 10, 1 );
118 - add_filter( 'mainwp_clonesite', array( &$this, 'filter_clone_site' ), 10, 6 );
119 - add_filter( 'mainwp_delete_clonesite', array( &$this, 'filter_delete_clone_site' ), 10, 4 );
120 - add_filter( 'mainwp_editsite', array( &$this, 'mainwp_edit_site' ), 10, 1 );
121 - add_action( 'mainwp_add_sub_leftmenu', array( &$this, 'hook_add_sub_left_menu' ), 10, 6 );
122 - add_filter( 'mainwp_getwebsiteoptions', array( &$this, 'hook_get_site_options' ), 10, 3 );
123 - add_filter( 'mainwp_updatewebsiteoptions', array( &$this, 'hook_update_site_options' ), 10, 4 );
132 + add_filter( 'mainwp_getactivateextensionnotice', array( &$this, 'get_activate_extension_notice' ), 10, 1 );
133 + add_action( 'mainwp_enqueue_meta_boxes_scripts', array( &$this, 'enqueue_meta_boxes_scripts' ), 10, 1 );
134 + add_filter( 'mainwp_addsite', array( &$this, 'hook_add_site' ), 10, 1 );
135 + add_filter( 'mainwp_deletesite', array( &$this, 'hook_delete_site' ), 10, 1 );
136 + add_filter( 'mainwp_clonesite', array( &$this, 'filter_clone_site' ), 10, 6 );
137 + add_filter( 'mainwp_delete_clonesite', array( &$this, 'filter_delete_clone_site' ), 10, 4 );
138 + add_filter( 'mainwp_editsite', array( &$this, 'mainwp_edit_site' ), 10, 1 );
139 + add_action( 'mainwp_add_sub_leftmenu', array( &$this, 'hook_add_sub_left_menu' ), 10, 6 );
140 + add_filter( 'mainwp_getwebsiteoptions', array( &$this, 'hook_get_site_options' ), 10, 3 );
141 + add_filter( 'mainwp_updatewebsiteoptions', array( &$this, 'hook_update_site_options' ), 10, 4 );
142 + add_filter( 'mainwp_deletewebsiteoptions', array( &$this, 'hook_delete_site_options' ), 10, 2 );
124 143
125 - add_filter( 'mainwp_getwebsitesbyuserid', array( &$this, 'hook_get_websites_by_user_id' ), 10, 5 );
126 - add_filter( 'mainwp_getwebsite_by_id', array( &$this, 'hook_get_website_by_id' ), 10, 4 );
144 + add_filter( 'mainwp_getwebsitesbyuserid', array( &$this, 'hook_get_websites_by_user_id' ), 10, 5 );
145 + add_filter( 'mainwp_getwebsite_by_id', array( &$this, 'hook_get_website_by_id' ), 10, 4 );
127 146
128 - add_filter( 'mainwp_addgroup', array( MainWP_Extensions_Handler::get_class_name(), 'hook_add_group' ), 10, 3 );
129 - add_filter( 'mainwp_getallposts', array( &$this, 'hook_get_all_posts' ), 10, 2 );
130 - add_filter( 'mainwp_check_current_user_can', array( &$this, 'hook_current_user_can' ), 10, 3 );
131 - add_filter( 'mainwp_escape_response_data', array( &$this, 'hook_escape_response' ), 10, 3 );
132 - add_filter( 'mainwp_escape_content', array( &$this, 'hook_escape_content' ), 10, 3 );
147 + add_filter( 'mainwp_addgroup', array( MainWP_Extensions_Handler::get_class_name(), 'hook_add_group' ), 10, 3 );
148 + add_filter( 'mainwp_getallposts', array( &$this, 'hook_get_all_posts' ), 10, 2 );
149 + add_filter( 'mainwp_check_current_user_can', array( &$this, 'hook_current_user_can' ), 10, 3 );
150 + add_filter( 'mainwp_escape_response_data', array( &$this, 'hook_escape_response' ), 10, 3 );
151 + add_filter( 'mainwp_escape_content', array( &$this, 'hook_escape_content' ), 10, 3 );
133 152
134 - add_filter( 'mainwp_db_query', array( &$this, 'hook_db_query' ), 10, 2 );
135 - add_filter( 'mainwp_db_fetch_object', array( &$this, 'db_fetch_object' ), 10, 2 );
136 - add_filter( 'mainwp_db_fetch_array', array( &$this, 'db_fetch_array' ), 10, 2 );
137 - add_action( 'mainwp_db_data_seek', array( &$this, 'hook_db_data_seek' ), 10, 2 );
138 - add_filter( 'mainwp_db_free_result', array( &$this, 'db_free_result' ), 10, 2 );
139 - add_filter( 'mainwp_db_num_rows', array( &$this, 'db_num_rows' ), 10, 2 );
140 - add_filter( 'mainwp_db_get_websites_for_current_user', array( &$this, 'db_get_websites_for_current_user' ), 10, 2 );
153 + add_filter( 'mainwp_db_query', array( &$this, 'hook_db_query' ), 10, 2 );
154 + add_filter( 'mainwp_db_fetch_object', array( &$this, 'db_fetch_object' ), 10, 2 );
155 + add_filter( 'mainwp_db_fetch_array', array( &$this, 'db_fetch_array' ), 10, 2 );
156 + add_action( 'mainwp_db_data_seek', array( &$this, 'hook_db_data_seek' ), 10, 2 );
157 + add_filter( 'mainwp_db_free_result', array( &$this, 'db_free_result' ), 10, 2 );
158 + add_filter( 'mainwp_db_num_rows', array( &$this, 'db_num_rows' ), 10, 2 );
159 + add_filter( 'mainwp_db_get_websites_for_current_user', array( &$this, 'db_get_websites_for_current_user' ), 10, 2 );
160 + add_filter( 'mainwp_db_get_sql_websites_for_current_user', array( &$this, 'hook_get_sql_websites_by_params' ), 10, 2 );
141 161
142 - // Sync website.
143 - add_filter( 'mainwp_sync_website', array( &$this, 'hook_sync_website' ), 10, 3 );
162 + // Sync website.
163 + add_filter( 'mainwp_sync_website', array( &$this, 'hook_sync_website' ), 10, 3 );
144 164
145 - add_action( 'mainwp_secure_request', array( &$this, 'hook_secure_request' ), 10, 2 );
146 - add_filter( 'mainwp_check_security_request', array( &$this, 'hook_check_security_request' ), 10, 3 );
147 - add_filter( 'mainwp_notification_get_settings', array( &$this, 'get_notification_settings' ), 10, 2 );
165 + add_action( 'mainwp_secure_request', array( &$this, 'hook_secure_request' ), 10, 2 );
166 + add_filter( 'mainwp_check_security_request', array( &$this, 'hook_check_security_request' ), 10, 3 );
167 + add_filter( 'mainwp_notification_get_settings', array( &$this, 'get_notification_settings' ), 10, 2 );
148 168
149 - add_filter( 'mainwp_send_wp_mail', array( &$this, 'hook_send_wp_mail' ), 10, 5 );
150 - add_filter( 'mainwp_notification_get_template_content', array( &$this, 'hook_get_template_html' ), 10, 3 );
151 - add_filter( 'mainwp_sitestable_getcolumns', array( $this, 'hook_atarim_default_sitestable_column' ), 10, 1 );
152 - add_filter( 'mainwp_sitestable_item', array( $this, 'hook_atarim_manage_sites_default_item' ), 10, 1 );
153 - add_filter( 'mainwp_monitoring_sitestable_getcolumns', array( $this, 'hook_atarim_default_sitestable_column' ), 10, 1 );
154 - add_filter( 'mainwp_monitoring_sitestable_item', array( $this, 'hook_atarim_manage_sites_default_item' ), 10, 1 );
155 - add_filter( 'mainwp_clients_get_website_client_tokens', array( &$this, 'hook_get_website_client_tokens' ), 10, 2 );
156 - add_filter( 'mainwp_secure_get_download_sig', array( &$this, 'hook_get_download_sig' ), 10, 2 );
157 - add_action( 'mainwp_secure_download', array( &$this, 'hook_secure_download' ), 10, 3 );
158 - add_action( 'mainwp_ajax_add_action', array( &$this, 'hook_ajax_add_action' ), 10, 2 );
159 - add_filter( 'mainwp_get_plugin_icon', array( &$this, 'hook_get_plugin_icon' ), 10, 2 );
160 - add_filter( 'mainwp_get_theme_icon', array( &$this, 'hook_get_theme_icon' ), 10, 2 );
161 - add_filter( 'mainwp_get_dir_slug', array( &$this, 'hook_get_dir_slug' ), 10, 2 );
162 - add_action( 'mainwp_do_widget_boxes', array( &$this, 'hook_do_widget_boxes' ), 10, 3 );
163 - add_action( 'mainwp_add_widget_box', array( &$this, 'hook_add_widget_box' ), 10, 6 );
164 - add_action( 'mainwp_render_modal_upload_icon', array( &$this, 'hook_render_modal_upload_icon' ), 10, 2 );
165 - add_action( 'mainwp_render_plugin_details_modal', array( &$this, 'hook_render_plugin_details_modal' ), 10, 2 );
166 - add_action( 'mainwp_render_updates', array( &$this, 'hook_render_updates' ), 10, 2 );
167 - add_filter( 'mainwp_get_wp_client_by', array( &$this, 'hook_get_wp_client_by' ), 10, 4 );
169 + add_filter( 'mainwp_send_wp_mail', array( &$this, 'hook_send_wp_mail' ), 10, 5 );
170 + add_filter( 'mainwp_notification_get_template_content', array( &$this, 'hook_get_template_html' ), 10, 3 );
171 + add_filter( 'mainwp_sitestable_getcolumns', array( $this, 'hook_atarim_default_sitestable_column' ), 10, 1 );
172 + add_filter( 'mainwp_sitestable_item', array( $this, 'hook_atarim_manage_sites_default_item' ), 10, 1 );
173 + add_filter( 'mainwp_monitoring_sitestable_getcolumns', array( $this, 'hook_atarim_default_sitestable_column' ), 10, 1 );
174 + add_filter( 'mainwp_monitoring_sitestable_item', array( $this, 'hook_atarim_manage_sites_default_item' ), 10, 1 );
175 + add_filter( 'mainwp_clients_get_website_client_tokens', array( &$this, 'hook_get_website_client_tokens' ), 10, 2 );
176 + add_filter( 'mainwp_secure_get_download_sig', array( &$this, 'hook_get_download_sig' ), 10, 2 );
177 + add_action( 'mainwp_secure_download', array( &$this, 'hook_secure_download' ), 10, 3 );
178 + add_action( 'mainwp_ajax_add_action', array( &$this, 'hook_ajax_add_action' ), 10, 2 );
179 + add_filter( 'mainwp_get_plugin_icon', array( &$this, 'hook_get_plugin_icon' ), 10, 2 );
180 + add_filter( 'mainwp_get_theme_icon', array( &$this, 'hook_get_theme_icon' ), 10, 2 );
181 + add_filter( 'mainwp_get_dir_slug', array( &$this, 'hook_get_dir_slug' ), 10, 2 );
182 + add_action( 'mainwp_do_widget_boxes', array( &$this, 'hook_do_widget_boxes' ), 10, 3 );
183 + add_action( 'mainwp_add_widget_box', array( &$this, 'hook_add_widget_box' ), 10, 6 );
184 + add_action( 'mainwp_render_modal_upload_icon', array( &$this, 'hook_render_modal_upload_icon' ), 10, 2 );
185 + add_action( 'mainwp_render_plugin_details_modal', array( &$this, 'hook_render_plugin_details_modal' ), 10, 2 );
186 + add_action( 'mainwp_render_updates', array( &$this, 'hook_render_updates' ), 10, 2 );
187 + add_filter( 'mainwp_get_wp_client_by', array( &$this, 'hook_get_wp_client_by' ), 10, 4 );
168 188
169 - /**
170 - * Filter: mainwp_get_tokens_values
171 - *
172 - * Get tokens values for reports.
173 - *
174 - * @since 4.3.
175 - */
176 - add_filter( 'mainwp_get_reports_group_values_website', array( MainWP_Reports_Helper::get_instance(), 'hook_get_reports_group_values' ), 10, 6 );
189 + // Batch-preload uptime data to avoid per-row queries.
190 + add_filter( 'mainwp_sitestable_prepared_items', array( &$this, 'hook_uptime_preload_data' ), 10, 4 );
177 191
178 - /**
179 - * MainWP API hooks.
180 - *
181 - * @since 4.5.
182 - */
183 - add_filter( 'mainwp_extension_get_activation_info', array( &$this, 'hook_get_activation_info' ), 10, 2 );
184 - add_filter( 'mainwp_get_api_url', array( &$this, 'hook_get_api_url' ), 10, 1 );
185 - add_filter( 'mainwp_hook_run_dashboard_action', array( &$this, 'hook_run_dashboard_action' ), 10, 2 );
192 + // Intercept column rendering.
193 + add_filter( 'mainwp_sitestable_display_row_columns', array( &$this, 'hook_uptime_intercept_column' ), 10, 4 );
186 194
187 - /**
188 - * Key encrypt hooks.
189 - *
190 - * @since 4.5.
191 - */
192 - add_filter( 'mainwp_get_key_value', array( &$this, 'hook_get_key_value' ), 10, 3 );
193 - add_filter( 'mainwp_update_key_value', array( &$this, 'hook_update_key_value' ), 10, 4 );
194 - add_action( 'mainwp_delete_key_value', array( &$this, 'hook_delete_key_value' ), 10, 1 );
195 + /**
196 + * Filter: mainwp_get_tokens_values
197 + *
198 + * Get tokens values for reports.
199 + *
200 + * @since 4.3.
201 + */
202 + add_filter( 'mainwp_get_reports_group_values_website', array( MainWP_Reports_Helper::get_instance(), 'hook_get_reports_group_values' ), 10, 6 );
195 203
196 - add_filter( 'mainwp_encrypt_key_value', array( &$this, 'hook_encrypt_key_value' ), 10, 4 );
197 - add_filter( 'mainwp_decrypt_key_value', array( &$this, 'hook_decrypt_key_value' ), 10, 3 );
198 - add_action( 'mainwp_delete_key_file', array( &$this, 'hook_delete_key_file' ), 10, 1 );
199 - add_filter( 'mainwp_verify_ping_nonce', array( MainWP_Utility::class, 'hook_verify_ping_nonce' ), 10, 3 );
200 - add_action( 'mainwp_fetch_url_authed', array( MainWP_Actions_Handler::instance(), 'hook_mainwp_fetch_url_authed' ), 10, 5 );
204 + /**
205 + * MainWP API hooks.
206 + *
207 + * @since 4.5.
208 + */
209 + add_filter( 'mainwp_extension_get_activation_info', array( &$this, 'hook_get_activation_info' ), 10, 2 );
210 + add_filter( 'mainwp_get_api_url', array( &$this, 'hook_get_api_url' ), 10, 1 );
211 + add_filter( 'mainwp_hook_run_dashboard_action', array( &$this, 'hook_run_dashboard_action' ), 10, 2 );
201 212
202 - add_filter( 'mainwp_get_lookup_items', array( &$this, 'hook_get_lookup_items' ), 10, 4 );
203 - add_filter( 'mainwp_insert_lookup_item', array( &$this, 'hook_insert_lookup_item' ), 10, 5 );
204 - add_filter( 'mainwp_delete_lookup_items', array( &$this, 'hook_delete_lookup_items' ), 10, 3 );
205 - }
213 + /**
214 + * Key encrypt hooks.
215 + *
216 + * @since 4.5.
217 + */
218 + add_filter( 'mainwp_get_key_value', array( &$this, 'hook_get_key_value' ), 10, 3 );
219 + add_filter( 'mainwp_update_key_value', array( &$this, 'hook_update_key_value' ), 10, 4 );
220 + add_action( 'mainwp_delete_key_value', array( &$this, 'hook_delete_key_value' ), 10, 1 );
206 221
207 - /**
208 - * Method mainwp_log_debug()
209 - *
210 - * MainWP debug log.
211 - *
212 - * @param string $text Debug text.
213 - *
214 - * @uses \MainWP\Dashboard\MainWP_Logger::debug()
215 - */
216 - public function mainwp_log_debug( $text ) {
217 - MainWP_Logger::instance()->debug( $text );
218 - }
222 + add_filter( 'mainwp_encrypt_key_value', array( &$this, 'hook_encrypt_key_value' ), 10, 4 );
223 + add_filter( 'mainwp_decrypt_key_value', array( &$this, 'hook_decrypt_key_value' ), 10, 3 );
224 + add_action( 'mainwp_delete_key_file', array( &$this, 'hook_delete_key_file' ), 10, 1 );
225 + add_filter( 'mainwp_delete_key_file_result', array( &$this, 'hook_delete_key_file_result' ), 10, 2 );
226 + add_filter( 'mainwp_verify_ping_nonce', array( MainWP_Utility::class, 'hook_verify_ping_nonce' ), 10, 3 );
227 + add_action( 'mainwp_fetch_url_authed', array( MainWP_Actions_Handler::instance(), 'hook_mainwp_fetch_url_authed' ), 10, 5 );
219 228
220 - /**
221 - * Method mainwp_log_info()
222 - *
223 - * MainWP log info.
224 - *
225 - * @param string $text Info Text.
226 - *
227 - * @uses \MainWP\Dashboard\MainWP_Logger::info()
228 - */
229 - public function mainwp_log_info( $text ) {
230 - MainWP_Logger::instance()->info( $text );
231 - }
229 + add_filter( 'mainwp_get_lookup_items', array( &$this, 'hook_get_lookup_items' ), 10, 4 );
230 + add_filter( 'mainwp_insert_lookup_item', array( &$this, 'hook_insert_lookup_item' ), 10, 5 );
231 + add_filter( 'mainwp_delete_lookup_items', array( &$this, 'hook_delete_lookup_items' ), 10, 3 );
232 + add_filter( 'mainwp_get_indicator', array( &$this, 'hook_get_indicator' ), 10, 4 );
233 + add_filter( 'mainwp_get_time_elapsed_string', array( &$this, 'hook_get_time_elapsed_string' ), 10, 2 );
232 234
233 - /**
234 - * Method mainwp_log_warning()
235 - *
236 - * MainWP log warning.
237 - *
238 - * @param string $text Warning text.
239 - *
240 - * @uses \MainWP\Dashboard\MainWP_Logger::warning()
241 - */
242 - public function mainwp_log_warning( $text ) {
243 - MainWP_Logger::instance()->warning( $text );
244 - }
235 + add_action( 'mainwp_general_process_update', array( MainWP_DB::instance(), 'update_regular_process' ), 10, 1 );
236 + add_action( 'mainwp_general_process_delete', array( MainWP_DB::instance(), 'delete_regular_process' ), 10, 4 );
237 + add_filter( 'mainwp_general_process_get_process_by', array( &$this, 'hook_get_regular_process_by' ), 10, 4 );
245 238
246 - /**
247 - * Method mainwp_log_action()
248 - *
249 - * MainWP log action.
250 - *
251 - * @param string $text Debug text.
252 - * @param int $priority priority: -1 disabled, 0 - log, 1 - warning, 2 - info, 3 - debug.
253 - * @param int $log_color Set color: 0 - LOG, 1 - WARNING, 2 - INFO, 3- DEBUG.
254 - * @param bool $forced forced logging.
255 - *
256 - * @uses \MainWP\Dashboard\MainWP_Logger::debug()
257 - */
258 - public function mainwp_log_action( $text, $priority = 0, $log_color = 0, $forced = false ) {
259 - if ( ! empty( $priority ) ) {
260 - MainWP_Logger::instance()->log_action( $text, $priority, $log_color, $forced );
261 - }
262 - }
239 + add_filter( 'mainwp_get_primary_backup_method', array( $this, 'hook_get_primary_backup_method' ), 10, 2 );
240 + }
263 241
264 - /**
265 - * Method mainwp_log_execution_time()
266 - *
267 - * MainWP log execution time.
268 - *
269 - * @param string $text Debug text.
270 - *
271 - * @uses \MainWP\Dashboard\MainWP_Logger::debug()
272 - */
273 - public function mainwp_log_execution_time( $text = '' ) {
274 - MainWP_Logger::instance()->log_execution_time( $text );
275 - }
242 + /**
243 + * Method get_instance().
244 + */
245 + public static function get_instance() {
246 + return new self();
247 + }
276 248
277 - /**
278 - * Method enqueue_meta_boxes_scripts()
279 - *
280 - * Enqueue Scripts for all Meta boxes.
281 - *
282 - * @uses \MainWP\Dashboard\MainWP_System::enqueue_postbox_scripts()
283 - */
284 - public function enqueue_meta_boxes_scripts() {
285 - MainWP_System::enqueue_postbox_scripts();
286 - }
249 + /**
250 + * Method mainwp_log_debug()
251 + *
252 + * MainWP debug log.
253 + *
254 + * @param string $text Debug text.
255 + *
256 + * @uses \MainWP\Dashboard\MainWP_Logger::debug()
257 + */
258 + public function mainwp_log_debug( $text ) {
259 + MainWP_Logger::instance()->debug( $text );
260 + }
287 261
288 - /**
289 - * Method mainwp_add_site()
290 - *
291 - * Hook to add Child Site.
292 - *
293 - * @param array $params site data fields: url, name, wpadmin, unique_id, groupids, ssl_verify, ssl_version,
294 - * http_user, http_pass, websiteid - if edit site.
295 - *
296 - * @return array $ret data fields: response, siteid.
297 - *
298 - * @throws \Exception Exception message.
299 - *
300 - * @since 3.2.2
301 - *
302 - * @uses \MainWP\Dashboard\MainWP_Manage_Sites_View::update_wp_site()
303 - * @uses \MainWP\Dashboard\MainWP_Manage_Sites_View::add_wp_site()
304 - * @uses \MainWP\Dashboard\MainWP_Utility::ctype_digit()
305 - */
306 - public function mainwp_add_site( $params ) {
307 - $ret = array();
262 + /**
263 + * Method mainwp_log_info()
264 + *
265 + * MainWP log info.
266 + *
267 + * @param string $text Info Text.
268 + *
269 + * @uses \MainWP\Dashboard\MainWP_Logger::info()
270 + */
271 + public function mainwp_log_info( $text ) {
272 + MainWP_Logger::instance()->info( $text );
273 + }
308 274
309 - if ( is_array( $params ) ) {
310 - if ( isset( $params['websiteid'] ) && MainWP_Utility::ctype_digit( $params['websiteid'] ) ) {
311 - $ret['siteid'] = MainWP_Manage_Sites_View::update_wp_site( $params );
312 - return $ret;
313 - } elseif ( isset( $params['url'] ) && isset( $params['wpadmin'] ) ) {
314 - $website = MainWP_DB::instance()->get_websites_by_url( $params['url'] );
315 - list( $message, $error, $site_id ) = MainWP_Manage_Sites_View::add_wp_site( $website, $params );
275 + /**
276 + * Method mainwp_log_warning()
277 + *
278 + * MainWP log warning.
279 + *
280 + * @param string $text Warning text.
281 + *
282 + * @uses \MainWP\Dashboard\MainWP_Logger::warning()
283 + */
284 + public function mainwp_log_warning( $text ) {
285 + MainWP_Logger::instance()->warning( $text );
286 + }
316 287
317 - if ( '' !== $error ) {
318 - return array( 'error' => $error );
319 - }
320 - $ret['response'] = $message;
321 - $ret['siteid'] = $site_id;
322 - }
323 - }
288 + /**
289 + * Method mainwp_log_action()
290 + *
291 + * MainWP log action.
292 + *
293 + * @param string $text Debug text.
294 + * @param int $priority priority: -1 disabled, 0 - log, 1 - warning, 2 - info, 3 - debug.
295 + * @param int $log_color Set color: 0 - LOG, 1 - WARNING, 2 - INFO, 3- DEBUG.
296 + * @param bool $forced forced logging.
297 + *
298 + * @uses \MainWP\Dashboard\MainWP_Logger::debug()
299 + */
300 + public function mainwp_log_action( $text, $priority = 0, $log_color = 0, $forced = false ) {
301 + if ( ! empty( $priority ) ) {
302 + MainWP_Logger::instance()->log_action( $text, $priority, $log_color, $forced );
303 + }
304 + }
324 305
325 - return $ret;
326 - }
306 + /**
307 + * Method mainwp_log_execution_time()
308 + *
309 + * MainWP log execution time.
310 + *
311 + * @param string $text Debug text.
312 + *
313 + * @uses \MainWP\Dashboard\MainWP_Logger::debug()
314 + */
315 + public function mainwp_log_execution_time( $text = '' ) {
316 + MainWP_Logger::instance()->log_execution_time( $text );
317 + }
327 318
328 - /**
329 - * Method is_pro_member()
330 - *
331 - * Check for inactive MainWP Extensions.
332 - *
333 - * @param mixed $input Input value.
334 - *
335 - * @return bool Activation notice.
336 - */
337 - public static function is_pro_member( $input = false ) {
338 - $info = get_option( 'mainwp_extensions_plan_info' );
339 - if ( ! empty( $info ) ) {
340 - $info = json_decode( $info, true );
341 - if ( is_array( $info ) && isset( $info['plan_purchased'] ) && isset( $info['plan_status'] ) ) {
342 - if ( 'active' === $info['plan_status'] && in_array( $info['plan_purchased'], array( 'monthly', 'yearly', 'lifetime' ) ) ) {
343 - return true;
344 - }
345 - }
346 - }
347 - return $input;
348 - }
319 + /**
320 + * Method enqueue_meta_boxes_scripts()
321 + *
322 + * Enqueue Scripts for all Meta boxes.
323 + *
324 + * @uses \MainWP\Dashboard\MainWP_System::enqueue_postbox_scripts()
325 + */
326 + public function enqueue_meta_boxes_scripts() {
327 + MainWP_System::enqueue_postbox_scripts();
328 + }
349 329
330 + /**
331 + * Method hook_add_site()
332 + *
333 + * Hook to add Child Site.
334 + *
335 + * @param array $params site data fields: url, name, wpadmin, unique_id, groupids, ssl_verify, ssl_version,
336 + * http_user, http_pass, websiteid - if edit site.
337 + *
338 + * @return array $ret data fields: response, siteid.
339 + *
340 + * @throws \MainWP_Exception Exception message.
341 + *
342 + * @since 3.2.2
343 + *
344 + * @uses \MainWP\Dashboard\MainWP_Manage_Sites_View::update_wp_site()
345 + * @uses \MainWP\Dashboard\MainWP_Manage_Sites_View::add_wp_site()
346 + * @uses \MainWP\Dashboard\MainWP_Utility::ctype_digit()
347 + */
348 + public function hook_add_site( $params ) {
349 + $ret = array();
350 350
351 - /**
352 - * Method hook_delete_site()
353 - *
354 - * Hook to delete Child Site.
355 - *
356 - * @param bool $site_id Child site ID.
357 - *
358 - * @return bool|array Return false if empty and return array error - Site not found | result - SUCCESS.
359 - *
360 - * @uses \MainWP\Dashboard\MainWP_System_Utility::get_wp_file_system()
361 - * @uses \MainWP\Dashboard\MainWP_System_Utility::get_icons_dir()
362 - */
363 - public function hook_delete_site( $site_id = false ) {
351 + if ( is_array( $params ) ) {
352 + if ( isset( $params['websiteid'] ) && MainWP_Utility::ctype_digit( $params['websiteid'] ) ) {
353 + $ret['siteid'] = MainWP_Manage_Sites_View::update_wp_site( $params );
354 + return $ret;
355 + } elseif ( isset( $params['url'] ) && isset( $params['wpadmin'] ) ) {
356 + $website = MainWP_DB::instance()->get_websites_by_url( $params['url'] );
357 + list( $message, $error, $site_id ) = MainWP_Manage_Sites_View::add_wp_site( $website, $params );
364 358
365 - if ( empty( $site_id ) ) {
366 - return false;
367 - }
359 + if ( '' !== $error ) {
360 + return array( 'error' => $error );
361 + }
362 + $ret['response'] = $message;
363 + $ret['siteid'] = $site_id;
364 + }
365 + }
368 366
369 - $sql = MainWP_DB::instance()->get_sql_website_by_id( $site_id );
370 - $websites = MainWP_DB::instance()->query( $sql );
371 - $site = MainWP_DB::fetch_object( $websites );
367 + return $ret;
368 + }
372 369
373 - if ( empty( $site ) ) {
374 - return array( 'error' => esc_html__( 'Not found the website', 'mainwp' ) );
375 - }
376 - $hasWPFileSystem = MainWP_System_Utility::get_wp_file_system();
370 + /**
371 + * Method is_pro_member()
372 + *
373 + * Check for inactive MainWP Extensions.
374 + *
375 + * @param mixed $input Input value.
376 + *
377 + * @return bool Activation notice.
378 + */
379 + public static function is_pro_member( $input = false ) {
380 + $info = get_option( 'mainwp_extensions_plan_info' );
381 + if ( ! empty( $info ) ) {
382 + $info = json_decode( $info, true );
383 + if ( is_array( $info ) && isset( $info['plan_purchased'] ) && isset( $info['plan_status'] ) && 'active' === $info['plan_status'] && in_array( $info['plan_purchased'], array( 'monthly', 'yearly', 'lifetime' ) ) ) {
384 + return true;
385 + }
386 + }
387 + return $input;
388 + }
377 389
378 - /**
379 - * WordPress files system object.
380 - *
381 - * @global object
382 - */
383 - global $wp_filesystem;
384 390
385 - if ( $hasWPFileSystem ) {
386 - $favi = MainWP_DB::instance()->get_website_option( $site, 'favi_icon', '' );
387 - if ( ! empty( $favi ) && ( false !== strpos( $favi, 'favi-' . $site->id . '-' ) ) ) {
388 - $dirs = MainWP_System_Utility::get_icons_dir();
389 - if ( $wp_filesystem->exists( $dirs[0] . $favi ) ) {
390 - $wp_filesystem->delete( $dirs[0] . $favi );
391 - }
392 - }
393 - }
391 + /**
392 + * Method hook_delete_site()
393 + *
394 + * Hook to delete Child Site.
395 + *
396 + * @param bool $site_id Child site ID.
397 + *
398 + * @return bool|array Return false if empty and return array error - Site not found | result - SUCCESS.
399 + *
400 + * @uses \MainWP\Dashboard\MainWP_System_Utility::get_wp_file_system()
401 + * @uses \MainWP\Dashboard\MainWP_System_Utility::get_icons_dir()
402 + */
403 + public function hook_delete_site( $site_id = false ) {
394 404
395 - MainWP_DB::instance()->remove_website( $site->id );
405 + if ( empty( $site_id ) ) {
406 + return false;
407 + }
396 408
397 - /** This action is documented in pages\page-mainwp-manage-sites-handler.php */
398 - do_action( 'mainwp_delete_site', $site );
399 - return array( 'result' => 'SUCCESS' );
400 - }
409 + $sql = MainWP_DB::instance()->get_sql_website_by_id( $site_id );
410 + $websites = MainWP_DB::instance()->query( $sql );
411 + $site = MainWP_DB::fetch_object( $websites );
401 412
402 - /**
403 - * Method filter_clone_site()
404 - *
405 - * Hook to clone site.
406 - *
407 - * @since 3.4.4
408 - * @param mixed $pluginFile Plugin file.
409 - * @param mixed $key Key.
410 - * @param mixed $websiteid Child site ID.
411 - * @param mixed $cloneid Clone site ID.
412 - * @param mixed $clone_url Clone site URL.
413 - * @param bool $force_update Force the update, true|false, Default: false.
414 - *
415 - * @return array Site array to clone.
416 - *
417 - * @uses \MainWP\Dashboard\MainWP_Extensions_Handler::hook_clone_site()
418 - */
419 - public function filter_clone_site( $pluginFile, $key, $websiteid, $cloneid, $clone_url, $force_update = false ) {
420 - return MainWP_Extensions_Handler::hook_clone_site( $pluginFile, $key, $websiteid, $cloneid, $clone_url, $force_update );
421 - }
413 + if ( empty( $site ) ) {
414 + return array( 'error' => esc_html__( 'Not found the website', 'mainwp' ) );
415 + }
416 + $hasWPFileSystem = MainWP_System_Utility::get_wp_file_system();
422 417
423 - /**
424 - * Method filter_delete_clone_site()
425 - *
426 - * Hook to delete cloaned Child Site.
427 - *
428 - * @param mixed $pluginFile Plugin file.
429 - * @param mixed $key Key.
430 - * @param string $clone_url Clone site URL.
431 - * @param bool $clone_site_id Clone site ID.
432 - *
433 - * @return array Site array to delete.
434 - *
435 - * @uses \MainWP\Dashboard\MainWP_Extensions_Handler::hook_delete_clone_site()
436 - */
437 - public function filter_delete_clone_site( $pluginFile, $key, $clone_url = '', $clone_site_id = false ) {
438 - return MainWP_Extensions_Handler::hook_delete_clone_site( $pluginFile, $key, $clone_url, $clone_site_id );
439 - }
418 + /**
419 + * WordPress files system object.
420 + *
421 + * @global object
422 + */
423 + global $wp_filesystem;
440 424
441 - /**
442 - * Method mainwp_edit_site()
443 - *
444 - * Hook to edit Child Site.
445 - *
446 - * @param array $params site data fields: websiteid, name, wpadmin, unique_id.
447 - *
448 - * @return array $ret Child site ID.
449 - *
450 - * @throws \Exception Exception message.
451 - *
452 - * @since 3.2.2
453 - *
454 - * @uses \MainWP\Dashboard\MainWP_Manage_Sites_View::update_wp_site()
455 - * @uses \MainWP\Dashboard\MainWP_Utility::ctype_digit()
456 - */
457 - public function mainwp_edit_site( $params ) {
458 - $ret = array();
459 - if ( is_array( $params ) ) {
460 - if ( isset( $params['websiteid'] ) && MainWP_Utility::ctype_digit( $params['websiteid'] ) ) {
461 - $ret['siteid'] = MainWP_Manage_Sites_View::update_wp_site( $params );
462 - return $ret;
463 - }
464 - }
465 - return $ret;
466 - }
425 + if ( $hasWPFileSystem ) {
426 + $favi = MainWP_DB::instance()->get_website_option( $site, 'favi_icon', '' );
427 + if ( ! empty( $favi ) && ( false !== strpos( $favi, 'favi-' . $site->id . '-' ) ) ) {
428 + $dirs = MainWP_System_Utility::get_icons_dir();
429 + if ( $wp_filesystem->exists( $dirs[0] . $favi ) ) {
430 + $wp_filesystem->delete( $dirs[0] . $favi );
431 + }
432 + }
433 + }
467 434
468 - /**
469 - * Method hook_add_sub_left_menu()
470 - *
471 - * Hook to add MainWP Left Menu item.
472 - *
473 - * @param string $title Menu title.
474 - * @param string $slug Menu slug.
475 - * @param string $href Menu link.
476 - * @param integer $level Menu level.
477 - * @param string $parent_key Parent menu.
478 - *
479 - * @uses \MainWP\Dashboard\MainWP_Menu::add_left_menu()
480 - */
481 - public function hook_add_sub_left_menu( $title, $slug, $href, $level = 1, $parent_key = 'mainwp_tab' ) {
482 - $item = array(
483 - 'title' => $title,
484 - 'parent_key' => $parent_key,
485 - 'slug' => $slug,
486 - 'href' => $href,
487 - );
488 - MainWP_Menu::add_left_menu( $item, $level );
489 - }
435 + MainWP_DB::instance()->remove_website( $site->id );
490 436
491 - /**
492 - * Method is_extension_activated()
493 - *
494 - * Check for inactive MainWP Extensions.
495 - *
496 - * @param mixed $input Input value.
497 - * @param mixed $slug MainWP Extension to check.
498 - *
499 - * @return bool Activation notice.
500 - */
501 - public function is_extension_activated( $input, $slug ) {
502 - return MainWP_Extensions_Handler::is_extension_activated( $slug );
503 - }
437 + /** This action is documented in pages\page-mainwp-manage-sites-handler.php */
438 + do_action( 'mainwp_delete_site', $site );
439 + return array( 'result' => 'SUCCESS' );
440 + }
504 441
442 + /**
443 + * Method filter_clone_site()
444 + *
445 + * Hook to clone site.
446 + *
447 + * @since 3.4.4
448 + * @param mixed $pluginFile Plugin file.
449 + * @param mixed $key Key.
450 + * @param mixed $websiteid Child site ID.
451 + * @param mixed $cloneid Clone site ID.
452 + * @param mixed $clone_url Clone site URL.
453 + * @param bool $force_update Force the update, true|false, Default: false.
454 + *
455 + * @return array Site array to clone.
456 + *
457 + * @uses \MainWP\Dashboard\MainWP_Extensions_Handler::hook_clone_site()
458 + */
459 + public function filter_clone_site( $pluginFile, $key, $websiteid, $cloneid, $clone_url, $force_update = false ) {
460 + return MainWP_Extensions_Handler::hook_clone_site( $pluginFile, $key, $websiteid, $cloneid, $clone_url, $force_update );
461 + }
505 462
506 - /**
507 - * Method get_activate_extension_notice()
508 - *
509 - * Check for inactive MainWP Extensions &
510 - * return an activation warning message.
511 - *
512 - * @param mixed $pluginFile MainWP Extension to check.
513 - *
514 - * @return string Activation notice.
515 - *
516 - * @uses \MainWP\Dashboard\MainWP_Extensions_Handler::is_extension_activated()
517 - */
518 - public function get_activate_extension_notice( $pluginFile ) {
519 - $active = MainWP_Extensions_Handler::is_extension_activated( $pluginFile );
520 - if ( $active ) {
521 - return false;
522 - }
463 + /**
464 + * Method filter_delete_clone_site()
465 + *
466 + * Hook to delete cloaned Child Site.
467 + *
468 + * @param mixed $pluginFile Plugin file.
469 + * @param mixed $key Key.
470 + * @param string $clone_url Clone site URL.
471 + * @param bool $clone_site_id Clone site ID.
472 + *
473 + * @return array Site array to delete.
474 + *
475 + * @uses \MainWP\Dashboard\MainWP_Extensions_Handler::hook_delete_clone_site()
476 + */
477 + public function filter_delete_clone_site( $pluginFile, $key, $clone_url = '', $clone_site_id = false ) {
478 + return MainWP_Extensions_Handler::hook_delete_clone_site( $pluginFile, $key, $clone_url, $clone_site_id );
479 + }
523 480
524 - $activate_notices = get_user_option( 'mainwp_hide_activate_notices' );
525 - if ( is_array( $activate_notices ) ) {
526 - $slug = basename( $pluginFile, '.php' );
527 - if ( isset( $activate_notices[ $slug ] ) ) {
528 - return false;
529 - }
530 - }
481 + /**
482 + * Method mainwp_edit_site()
483 + *
484 + * Hook to edit Child Site.
485 + *
486 + * @param array $params site data fields: websiteid, name, wpadmin, unique_id.
487 + *
488 + * @return array $ret Child site ID.
489 + *
490 + * @throws \MainWP_Exception Exception message.
491 + *
492 + * @since 3.2.2
493 + *
494 + * @uses \MainWP\Dashboard\MainWP_Manage_Sites_View::update_wp_site()
495 + * @uses \MainWP\Dashboard\MainWP_Utility::ctype_digit()
496 + */
497 + public function mainwp_edit_site( $params ) {
498 + $ret = array();
499 + if ( is_array( $params ) && isset( $params['websiteid'] ) && MainWP_Utility::ctype_digit( $params['websiteid'] ) ) {
500 + $ret['siteid'] = MainWP_Manage_Sites_View::update_wp_site( $params );
501 + return $ret;
502 + }
503 + return $ret;
504 + }
531 505
532 - return sprintf( esc_html__( 'You have a MainWP extension that does not have an active API entered. This means you will not receive updates or support. Please visit the %1$sExtensions%2$s page and enter your API key.', 'mainwp' ), '<a href="admin.php?page=Extensions">', '</a>' );
533 - }
506 + /**
507 + * Method hook_add_sub_left_menu()
508 + *
509 + * Hook to add MainWP Left Menu item.
510 + *
511 + * @param string $title Menu title.
512 + * @param string $slug Menu slug.
513 + * @param string $href Menu link.
514 + * @param integer $level Menu level.
515 + * @param string $parent_key Parent menu.
516 + *
517 + * @uses \MainWP\Dashboard\MainWP_Menu::add_left_menu()
518 + */
519 + public function hook_add_sub_left_menu( $title, $slug, $href, $level = 1, $parent_key = 'mainwp_tab' ) {
520 + $item = array(
521 + 'title' => $title,
522 + 'parent_key' => $parent_key,
523 + 'slug' => $slug,
524 + 'href' => $href,
525 + );
526 + MainWP_Menu::add_left_menu( $item, $level );
527 + }
534 528
535 - /**
536 - * Method cache_getcontext()
537 - *
538 - * Get cached search context for given page.
539 - *
540 - * @param string $page Current MainWP Page.
541 - *
542 - * @return array Cached Search Array.
543 - */
544 - public function cache_getcontext( $page ) {
545 - return MainWP_Cache::get_cached_context( $page );
546 - }
529 + /**
530 + * Method is_extension_activated()
531 + *
532 + * Check for inactive MainWP Extensions.
533 + *
534 + * @param mixed $input Input value.
535 + * @param mixed $slug MainWP Extension to check.
536 + *
537 + * @return bool Activation notice.
538 + */
539 + public function is_extension_activated( $input, $slug ) {
540 + unset( $input );
541 + return MainWP_Extensions_Handler::is_extension_activated( $slug );
542 + }
547 543
548 - /**
549 - * Method cache_echo_body()
550 - *
551 - * Echo Cached Search Body.
552 - *
553 - * @param string $page Current MainWP Page.
554 - */
555 - public function cache_echo_body( $page ) {
556 - MainWP_Cache::echo_body( $page );
557 - }
558 544
559 - /**
560 - * Method cache_init()
561 - *
562 - * Initiate search session variables for the current page.
563 - *
564 - * @param string $page Current MainWP Page.
565 - */
566 - public function cache_init( $page ) {
567 - MainWP_Cache::init_cache( $page );
568 - }
545 + /**
546 + * Method get_activate_extension_notice()
547 + *
548 + * Check for inactive MainWP Extensions &
549 + * return an activation warning message.
550 + *
551 + * @param mixed $pluginFile MainWP Extension to check.
552 + *
553 + * @return string Activation notice.
554 + *
555 + * @uses \MainWP\Dashboard\MainWP_Extensions_Handler::is_extension_activated()
556 + */
557 + public function get_activate_extension_notice( $pluginFile ) {
558 + $active = MainWP_Extensions_Handler::is_extension_activated( $pluginFile );
559 + if ( $active ) {
560 + return false;
561 + }
569 562
570 - /**
571 - * Method cache_add_context()
572 - *
573 - * Hook to add time & Search Context session variable.
574 - *
575 - * @param string $page Current MainWP Page.
576 - * @param mixed $context Time of search.
577 - */
578 - public function cache_add_context( $page, $context ) {
579 - MainWP_Cache::add_context( $page, $context );
580 - }
563 + $activate_notices = get_user_option( 'mainwp_hide_activate_notices' );
564 + if ( is_array( $activate_notices ) ) {
565 + $slug = basename( $pluginFile, '.php' );
566 + if ( isset( $activate_notices[ $slug ] ) ) {
567 + return false;
568 + }
569 + }
570 + // translators: 1: Opening anchor tag, 2: Closing anchor tag.
571 + return sprintf( esc_html__( 'You have a MainWP extension that does not have an active API entered. This means you will not receive updates or support. Please visit the %1$sExtensions%2$s page and enter your API key.', 'mainwp' ), '<a href="admin.php?page=Extensions">', '</a>' );
572 + }
581 573
582 - /**
583 - * Method cache_add_body()
584 - *
585 - * Hook to add Search Body Session variable.
586 - *
587 - * @param string $page Current MainWP Page.
588 - * @param mixed $body Search body.
589 - */
590 - public function cache_add_body( $page, $body ) {
591 - MainWP_Cache::add_body( $page, $body );
592 - }
574 + /**
575 + * Method cache_getcontext()
576 + *
577 + * Get cached search context for given page.
578 + *
579 + * @param string $page Current MainWP Page.
580 + *
581 + * @return array Cached Search Array.
582 + */
583 + public function cache_getcontext( $page ) {
584 + return MainWP_Cache::get_cached_context( $page );
585 + }
593 586
594 - /**
595 - * Method hook_select_sites_box()
596 - *
597 - * Hook to select sites box.
598 - *
599 - * @param string $title Input title.
600 - * @param string $type Input type, radio.
601 - * @param bool $show_group Whether or not to show group, Default: true.
602 - * @param bool $show_select_all Whether to show select all.
603 - * @param string $class_style Default = ''.
604 - * @param string $style Default = ''.
605 - * @param array $selected_websites Selected Child Sites.
606 - * @param array $selected_groups Selected Groups.
607 - * @param bool $show_client Show Clients.
608 - * @param array $selected_clients Selected Clients.
609 - * @param mixed $post_id post ID.
610 - * @param bool $show_create_tag Show create tag button.
611 - */
612 - public function hook_select_sites_box( $title = '', $type = 'checkbox', $show_group = true, $show_select_all = true, $class_style = '', $style = '', $selected_websites = array(), $selected_groups = array(), $show_client = false, $selected_clients = array(), $post_id = false, $show_create_tag = true ) {
613 - $sel_params = array(
614 - 'type' => $type,
615 - 'show_group' => $show_group,
616 - 'show_select_all' => $show_select_all,
617 - 'class' => $class_style,
618 - 'style' => $style,
619 - 'selected_sites' => $selected_websites,
620 - 'selected_groups' => $selected_groups,
621 - 'show_client' => $show_client,
622 - 'selected_clients' => $selected_clients,
623 - 'post_id' => $post_id,
624 - 'show_create_tag' => $show_create_tag,
625 - );
626 - MainWP_UI_Select_Sites::select_sites_box( $sel_params );
627 - }
587 + /**
588 + * Method cache_echo_body()
589 + *
590 + * Echo Cached Search Body.
591 + *
592 + * @param string $page Current MainWP Page.
593 + */
594 + public function cache_echo_body( $page ) {
595 + MainWP_Cache::echo_body( $page );
596 + }
628 597
629 - /**
630 - * Method hook_add_categories_box()
631 - *
632 - * General categories box.
633 - *
634 - * @param int $post_id Post ID.
635 - */
636 - public function hook_add_categories_box( $post_id = false ) {
637 - MainWP_System::instance()->metaboxes->add_categories( $post_id );
638 - }
598 + /**
599 + * Method cache_init()
600 + *
601 + * Initiate search session variables for the current page.
602 + *
603 + * @param string $page Current MainWP Page.
604 + */
605 + public function cache_init( $page ) {
606 + MainWP_Cache::init_cache( $page );
607 + }
639 608
640 - /**
641 - * Method hook_notify_user()
642 - *
643 - * Hook to send user a notification.
644 - *
645 - * @param int $userId User ID.
646 - * @param string $subject Email Subject.
647 - * @param string $content Email Content.
648 - *
649 - * @uses \MainWP\Dashboard\MainWP_Notification::send_notify_user()
650 - */
651 - public function hook_notify_user( $userId, $subject, $content ) {
652 - MainWP_Notification::send_notify_user( $userId, $subject, $content );
653 - }
609 + /**
610 + * Method cache_add_context()
611 + *
612 + * Hook to add time & Search Context session variable.
613 + *
614 + * @param string $page Current MainWP Page.
615 + * @param mixed $context Time of search.
616 + */
617 + public function cache_add_context( $page, $context ) {
618 + MainWP_Cache::add_context( $page, $context );
619 + }
654 620
655 - /**
656 - * Method get_error_message()
657 - *
658 - * Hook to get error message.
659 - *
660 - * @param object $msg Error message.
661 - * @param object $extra HTTP error message.
662 - *
663 - * @return string Error message.
664 - *
665 - * @uses \MainWP\Dashboard\MainWP_Error_Helper::get_error_message()
666 - */
667 - public function get_error_message( $msg, $extra ) {
668 - return MainWP_Error_Helper::get_error_message( new MainWP_Exception( $msg, $extra ) );
669 - }
621 + /**
622 + * Method cache_add_body()
623 + *
624 + * Hook to add Search Body Session variable.
625 + *
626 + * @param string $page Current MainWP Page.
627 + * @param mixed $body Search body.
628 + */
629 + public function cache_add_body( $page, $body ) {
630 + MainWP_Cache::add_body( $page, $body );
631 + }
670 632
671 - /**
672 - * Method hook_get_user_extension()
673 - *
674 - * Hook to get user extension.
675 - *
676 - * @return object $row User extension.
677 - */
678 - public function hook_get_user_extension() {
679 - return MainWP_DB_Common::instance()->get_user_extension();
680 - }
633 + /**
634 + * Method hook_select_sites_box()
635 + *
636 + * Hook to select sites box.
637 + *
638 + * @param string $title Input title.
639 + * @param string $type Input type, radio.
640 + * @param bool $show_group Whether or not to show group, Default: true.
641 + * @param bool $show_select_all Whether to show select all.
642 + * @param string $class_style Default = ''.
643 + * @param string $style Default = ''.
644 + * @param array $selected_websites Selected Child Sites.
645 + * @param array $selected_groups Selected Groups.
646 + * @param bool $show_client Show Clients.
647 + * @param array $selected_clients Selected Clients.
648 + * @param mixed $post_id post ID.
649 + * @param bool $show_create_tag Show create tag button.
650 + */
651 + public function hook_select_sites_box( $title = '', $type = 'checkbox', $show_group = true, $show_select_all = true, $class_style = '', $style = '', $selected_websites = array(), $selected_groups = array(), $show_client = false, $selected_clients = array(), $post_id = false, $show_create_tag = true ) { //phpcs:ignore -- NOSONAR - compatible.
652 + unset( $title );
653 + $sel_params = array(
654 + 'type' => $type,
655 + 'show_group' => $show_group,
656 + 'show_select_all' => $show_select_all,
657 + 'class' => $class_style,
658 + 'style' => $style,
659 + 'selected_sites' => $selected_websites,
660 + 'selected_groups' => $selected_groups,
661 + 'show_client' => $show_client,
662 + 'selected_clients' => $selected_clients,
663 + 'post_id' => $post_id,
664 + 'show_create_tag' => $show_create_tag,
665 + );
666 + MainWP_UI_Select_Sites::select_sites_box( $sel_params );
667 + }
681 668
682 - /**
683 - * Method update_user_extension()
684 - *
685 - * Hook to update user extension.
686 - *
687 - * @param bool $input_value input filter value.
688 - * @param string $option_name option name.
689 - * @param mixed $option_value option value.
690 - *
691 - * @return bool true.
692 - */
693 - public function update_user_extension( $input_value, $option_name, $option_value ) {
694 - $userExtension = MainWP_DB_Common::instance()->get_user_extension();
695 - $userExtension->{$option_name} = wp_json_encode( $option_value );
696 - MainWP_DB_Common::instance()->update_user_extension( $userExtension );
697 - return true;
698 - }
669 + /**
670 + * Method hook_add_categories_box()
671 + *
672 + * General categories box.
673 + *
674 + * @param int $post_id Post ID.
675 + */
676 + public function hook_add_categories_box( $post_id = false ) {
677 + MainWP_System::instance()->metaboxes->add_categories( $post_id );
678 + }
699 679
700 - /**
701 - * Method hook_get_site_options()
702 - *
703 - * Hook to get Child site options.
704 - *
705 - * @param mixed $boolean Boolean check.
706 - * @param object $website Child site object.
707 - * @param string|array $options Option table name.
708 - *
709 - * @return string|null Database query result (as string), or null on failure
710 - */
711 - public function hook_get_site_options( $boolean, $website, $options = '' ) {
680 + /**
681 + * Method hook_notify_user()
682 + *
683 + * Hook to send user a notification.
684 + *
685 + * @param int $userId User ID.
686 + * @param string $subject Email Subject.
687 + * @param string $content Email Content.
688 + *
689 + * @uses \MainWP\Dashboard\MainWP_Notification::send_notify_user()
690 + */
691 + public function hook_notify_user( $userId, $subject, $content ) {
692 + MainWP_Notification::send_notify_user( $userId, $subject, $content );
693 + }
712 694
713 - if ( empty( $options ) ) {
714 - return $boolean;
715 - }
695 + /**
696 + * Method get_error_message()
697 + *
698 + * Hook to get error message.
699 + *
700 + * @param object $msg Error message.
701 + * @param object $extra HTTP error message.
702 + *
703 + * @return string Error message.
704 + *
705 + * @uses \MainWP\Dashboard\MainWP_Error_Helper::get_error_message()
706 + */
707 + public function get_error_message( $msg, $extra ) {
708 + return MainWP_Error_Helper::get_error_message( new MainWP_Exception( $msg, $extra ) );
709 + }
716 710
717 - if ( is_string( $options ) ) {
718 - return MainWP_DB::instance()->get_website_option( $website, $options );
719 - } elseif ( is_array( $options ) ) {
720 - return MainWP_DB::instance()->get_website_options_array( $website, $options );
721 - }
722 - return $boolean;
723 - }
711 + /**
712 + * Method hook_get_user_extension()
713 + *
714 + * Hook to get user extension.
715 + *
716 + * @return object $row User extension.
717 + */
718 + public function hook_get_user_extension() {
719 + return MainWP_DB_Common::instance()->get_user_extension();
720 + }
724 721
725 - /**
726 - * Method hook_update_site_options()
727 - *
728 - * Hook to get Child site options.
729 - *
730 - * @param mixed $boolean Boolean check.
731 - * @param object $website Child site object.
732 - * @param string $option Option name.
733 - * @param string $value Option value.
734 - *
735 - * @return string|null Database query result (as string), or null on failure
736 - */
737 - public function hook_update_site_options( $boolean, $website, $option, $value ) {
738 - if ( is_numeric( $website ) ) {
739 - $obj = new \stdClass();
740 - $obj->id = intval( $website );
741 - $website = $obj;
742 - } elseif ( ! is_object( $website ) || ! property_exists( $website, 'id' ) ) {
743 - return false;
744 - }
745 - return MainWP_DB::instance()->update_website_option( $website, $option, $value );
746 - }
722 + /**
723 + * Method update_user_extension()
724 + *
725 + * Hook to update user extension.
726 + *
727 + * @param bool $input_value input filter value.
728 + * @param string $option_name option name.
729 + * @param mixed $option_value option value.
730 + *
731 + * @return bool true.
732 + */
733 + public function update_user_extension( $input_value, $option_name, $option_value ) {
734 + unset( $input_value );
735 + $userExtension = MainWP_DB_Common::instance()->get_user_extension();
736 + $userExtension->{$option_name} = wp_json_encode( $option_value );
737 + MainWP_DB_Common::instance()->update_user_extension( $userExtension );
738 + return true;
739 + }
747 740
748 - /**
749 - * Get sites by user ID.
750 - *
751 - * @param mixed $boolean Boolean check.
752 - * @param int $userid User ID.
753 - * @param bool $selectgroups Selected groups.
754 - * @param null $search_site Site search field value.
755 - * @param string $orderBy Order list by. Default: URL.
756 - *
757 - * @return object|null Database query results or null on failure.
758 - */
759 - public function hook_get_websites_by_user_id( $boolean, $userid, $selectgroups = false, $search_site = null, $orderBy = 'wp.url' ) {
760 - return MainWP_DB::instance()->get_websites_by_user_id( $userid, $selectgroups, $search_site, $orderBy );
761 - }
741 + /**
742 + * Method hook_get_site_options()
743 + *
744 + * Hook to get Child site options.
745 + *
746 + * @param mixed $boolean Boolean check.
747 + * @param object $website Child site object.
748 + * @param string|array $options Option table name.
749 + *
750 + * @return string|null Database query result (as string), or null on failure
751 + */
752 + public function hook_get_site_options( $boolean, $website, $options = '' ) {
762 753
763 - /**
764 - * Get sites by website ID.
765 - *
766 - * @param mixed $boolean Boolean check.
767 - * @param int $website_id User ID.
768 - * @param bool $selectGroups Select groups.
769 - * @param array $extra_view get extra option fields.
770 - *
771 - * @return object|null Database query results or null on failure.
772 - */
773 - public function hook_get_website_by_id( $boolean, $website_id, $selectGroups = false, $extra_view = array() ) {
754 + if ( empty( $options ) ) {
755 + return $boolean;
756 + }
774 757
775 - if ( empty( $website_id ) ) {
776 - return false;
777 - }
758 + if ( is_string( $options ) ) {
759 + return MainWP_DB::instance()->get_website_option( $website, $options );
760 + } elseif ( is_array( $options ) ) {
761 + return MainWP_DB::instance()->get_website_options_array( $website, $options );
762 + }
763 + return $boolean;
764 + }
778 765
779 - $website = MainWP_DB::instance()->get_website_by_id( $website_id, $selectGroups, $extra_view );
766 + /**
767 + * Method hook_update_site_options()
768 + *
769 + * Hook to get Child site options.
770 + *
771 + * @param mixed $boolean Boolean check.
772 + * @param object $website Child site object.
773 + * @param string $option Option name.
774 + * @param string $value Option value.
775 + *
776 + * @return string|null Database query result (as string), or null on failure
777 + */
778 + public function hook_update_site_options( $boolean, $website, $option, $value ) {
779 + unset( $boolean );
780 780
781 - if ( ! empty( $website ) && property_exists( $website, 'privkey' ) ) {
782 - unset( $website->privkey );
783 - }
781 + if ( is_numeric( $website ) ) {
782 + $obj = new \stdClass();
783 + $obj->id = intval( $website );
784 + $website = $obj;
785 + } elseif ( ! is_object( $website ) || ! property_exists( $website, 'id' ) ) {
786 + return false;
787 + }
788 + return MainWP_DB::instance()->update_website_option( $website, $option, $value );
789 + }
784 790
785 - return $website;
786 - }
787 791
792 + /**
793 + * Method hook_delete_site_options()
794 + *
795 + * Hook to remove Child site options.
796 + *
797 + * @since 5.4
798 + * @param object $website Child site object.
799 + * @param string $options Option name.
800 + *
801 + * @return string|null Database query result (as string), or null on failure
802 + */
803 + public function hook_delete_site_options( $website, $options ) {
804 + if ( is_numeric( $website ) ) {
805 + $obj = new \stdClass();
806 + $obj->id = intval( $website );
807 + $website = $obj;
808 + } elseif ( ! is_object( $website ) || ! property_exists( $website, 'id' ) ) {
809 + return false;
810 + }
788 811
789 - /**
790 - * Method get_websites_by_url()
791 - *
792 - * Hook to get Child Site by URL.
793 - *
794 - * @param string $url Child Site URL.
795 - *
796 - * @return array|object|null Database query results.
797 - */
798 - public function get_websites_by_url( $url ) {
799 - return MainWP_DB::instance()->get_websites_by_url( $url );
800 - }
812 + return MainWP_DB::instance()->remove_website_option( $website, $options );
813 + }
801 814
802 - /**
803 - * Method hook_get_all_posts()
804 - * Hook to get posts from sites.
805 - *
806 - * @param object $sites Child Sites object.
807 - * @param array $post_data with values: keyword, dtsstart, dtsstop, status, maxRecords, post_type.
808 - *
809 - * @return \stdClass $output All posts data array.
810 - *
811 - * @since 3.4.4
812 - *
813 - * @uses \MainWP\Dashboard\MainWP_Post::get_class_name()
814 - * @uses \MainWP\Dashboard\MainWP_Utility::ctype_digit()
815 - * @uses \MainWP\Dashboard\MainWP_Utility::map_site()
816 - */
817 - public function hook_get_all_posts( $sites, $post_data = array() ) {
818 815
819 - $dbwebsites = array();
816 + /**
817 + * Get sites by user ID.
818 + *
819 + * @param mixed $boolean Boolean check.
820 + * @param int $userid User ID.
821 + * @param bool $selectgroups Selected groups.
822 + * @param null $search_site Site search field value.
823 + * @param string $orderBy Order list by. Default: URL.
824 + *
825 + * @return object|null Database query results or null on failure.
826 + */
827 + public function hook_get_websites_by_user_id( $boolean, $userid, $selectgroups = false, $search_site = null, $orderBy = 'wp.url' ) {
828 + unset( $boolean );
829 + return MainWP_DB::instance()->get_websites_by_user_id( $userid, $selectgroups, $search_site, $orderBy );
830 + }
820 831
821 - $data = MainWP_System_Utility::get_default_map_site_fields();
822 - $data[] = 'verify_certificate';
832 + /**
833 + * Get sites by website ID.
834 + *
835 + * @param mixed $boolean Boolean check.
836 + * @param int $website_id User ID.
837 + * @param bool $selectGroups Select groups.
838 + * @param array $extra_view get extra option fields.
839 + *
840 + * @return object|null Database query results or null on failure.
841 + */
842 + public function hook_get_website_by_id( $boolean, $website_id, $selectGroups = false, $extra_view = array() ) {
843 + unset( $boolean );
844 + if ( empty( $website_id ) ) {
845 + return false;
846 + }
823 847
824 - if ( '' !== $sites ) {
825 - foreach ( $sites as $k => $v ) {
826 - if ( MainWP_Utility::ctype_digit( $v ) ) {
827 - $website = MainWP_DB::instance()->get_website_by_id( $v );
828 - if ( empty( $website->sync_errors ) && ! MainWP_System_Utility::is_suspended_site( $website ) ) {
829 - $dbwebsites[ $website->id ] = MainWP_Utility::map_site( $website, $data );
830 - }
831 - }
832 - }
833 - }
848 + $website = MainWP_DB::instance()->get_website_by_id( $website_id, $selectGroups, $extra_view );
834 849
835 - $default_data = array(
836 - 'post_type' => 'post',
837 - 'status' => 'publish',
838 - 'maxRecords' => 10,
839 - );
850 + if ( ! empty( $website ) && property_exists( $website, 'privkey' ) ) {
851 + unset( $website->privkey );
852 + }
840 853
841 - $post_data = array_merge( $default_data, $post_data );
854 + return $website;
855 + }
842 856
843 - $output = new \stdClass();
844 - $output->results = array();
845 - if ( $dbwebsites ) {
846 - MainWP_Connect::fetch_urls_authed(
847 - $dbwebsites,
848 - 'get_all_posts',
849 - $post_data,
850 - array(
851 - MainWP_Post::get_class_name(),
852 - 'hook_posts_search_handler',
853 - ),
854 - $output
855 - );
856 - }
857 - return $output;
858 - }
859 857
860 - /**
861 - * Method mainwp_current_user_have_right()
862 - *
863 - * Check permission level by hook mainwp_currentusercan of Team Control extension
864 - *
865 - * @param mixed $input Return value holder.
866 - * @param string $can_type group or type of capabilities.
867 - * @param string $which Which function to perform.
868 - *
869 - * @return bool $input Return true if the user can and false if they can not.
870 - */
871 - public function hook_current_user_can( $input, $can_type, $which ) {
858 + /**
859 + * Method get_websites_by_url()
860 + *
861 + * Hook to get Child Site by URL.
862 + *
863 + * @param string $url Child Site URL.
864 + *
865 + * @return array|object|null Database query results.
866 + */
867 + public function get_websites_by_url( $url ) {
868 + return MainWP_DB::instance()->get_websites_by_url( $url );
869 + }
872 870
873 - if ( function_exists( 'mainwp_current_user_have_right' ) ) {
874 - return mainwp_current_user_have_right( $can_type, $which );
875 - }
871 + /**
872 + * Method hook_get_all_posts()
873 + * Hook to get posts from sites.
874 + *
875 + * @param object|array $sites Child Sites object.
876 + * @param array $post_data with values: keyword, dtsstart, dtsstop, status, maxRecords, post_type.
877 + *
878 + * @return \stdClass $output All posts data array.
879 + *
880 + * @since 3.4.4
881 + *
882 + * @uses \MainWP\Dashboard\MainWP_Post::get_class_name()
883 + * @uses \MainWP\Dashboard\MainWP_Utility::ctype_digit()
884 + * @uses \MainWP\Dashboard\MainWP_Utility::map_site()
885 + */
886 + public function hook_get_all_posts( $sites, $post_data = array() ) { // phpcs:ignore -- NOSONAR - complex.
876 887
877 - return $input;
878 - }
888 + $dbwebsites = array();
879 889
880 - /**
881 - * Method hook_escape_response()
882 - *
883 - * To escape response data.
884 - *
885 - * @param mixed $response response data.
886 - * @param bool $fields fields of response data - option.
887 - * @param array $more_allowed input allowed tags - option.
888 - *
889 - * @return mixed $response valid response data.
890 - * @throws \Exception Exception message.
891 - *
892 - * @uses \MainWP\Dashboard\MainWP_Utility::esc_content()
893 - * @uses \MainWP\Dashboard\MainWP_Utility::esc_mixed_content()
894 - */
895 - public function hook_escape_response( $response, $fields = false, $more_allowed = array() ) {
890 + $data = MainWP_System_Utility::get_default_map_site_fields();
891 + $data[] = 'verify_certificate';
896 892
897 - if ( false === $fields || is_string( $response ) ) {
898 - return MainWP_Utility::esc_content( $response );
899 - }
893 + if ( '' !== $sites ) {
894 + foreach ( $sites as $site ) {
895 + // Keep accepting the legacy list of scalar site IDs as well
896 + // as the mapped website objects used by REST v2.
897 + if ( is_object( $site ) ) {
898 + $site_id = isset( $site->id ) ? $site->id : '';
899 + } elseif ( is_array( $site ) ) {
900 + $site_id = isset( $site['id'] ) ? $site['id'] : '';
901 + } else {
902 + $site_id = $site;
903 + }
900 904
901 - if ( ! is_array( $fields ) ) {
902 - return $response;
903 - }
905 + if ( MainWP_Utility::ctype_digit( $site_id ) ) {
906 + $website = MainWP_DB::instance()->get_website_by_id( $site_id );
907 + if ( empty( $website->sync_errors ) && ! MainWP_System_Utility::is_suspended_site( $website ) ) {
908 + $dbwebsites[ $website->id ] = MainWP_Utility::map_site( $website, $data );
909 + }
910 + }
911 + }
912 + }
904 913
905 - if ( ! in_array( 'error', $fields ) ) {
906 - $fields[] = 'error'; // to sure to valid 'error' field, if that existed.
907 - }
914 + $default_data = array(
915 + 'post_type' => 'post',
916 + 'status' => 'publish',
917 + 'maxRecords' => 10,
918 + );
908 919
909 - if ( ! in_array( 'message', $fields ) ) {
910 - $fields[] = 'message'; // to sure to valid 'message' field, if that existed.
911 - }
920 + $post_data = array_merge( $default_data, $post_data );
912 921
913 - $depth = 10;
922 + $output = new \stdClass();
923 + $output->results = array();
924 + if ( $dbwebsites ) {
925 + MainWP_Connect::fetch_urls_authed(
926 + $dbwebsites,
927 + 'get_all_posts',
928 + $post_data,
929 + array(
930 + MainWP_Post::get_class_name(),
931 + 'hook_posts_search_handler',
932 + ),
933 + $output
934 + );
935 + }
936 + return $output;
937 + }
914 938
915 - foreach ( $fields as $field ) {
916 - if ( isset( $response[ $field ] ) ) {
917 - $response[ $field ] = MainWP_Utility::esc_mixed_content( $response[ $field ], $depth, $more_allowed );
918 - }
919 - }
920 - return $response;
921 - }
939 + /**
940 + * Method \mainwp_current_user_can()
941 + *
942 + * Check permission level by hook mainwp_currentusercan of Team Control extension
943 + *
944 + * @param mixed $input Return value holder.
945 + * @param string $can_type group or type of capabilities.
946 + * @param string $which Which function to perform.
947 + *
948 + * @return bool $input Return true if the user can and false if they can not.
949 + */
950 + public function hook_current_user_can( $input, $can_type, $which ) {
922 951
923 - /**
924 - * Method hook_escape_content()
925 - *
926 - * To escape content.
927 - *
928 - * @param mixed $content response data.
929 - * @param string $type content type for escape.
930 - * @param array $more_allowed input allowed tags - option.
931 - *
932 - * @return mixed $response valid response data.
933 - * @throws \Exception Exception message.
934 - *
935 - * @uses \MainWP\Dashboard\MainWP_Utility::esc_content()
936 - */
937 - public function hook_escape_content( $content, $type = 'note', $more_allowed = array() ) {
938 - return MainWP_Utility::esc_content( $content, $type, $more_allowed );
939 - }
952 + if ( function_exists( '\mainwp_current_user_can' ) ) {
953 + return \mainwp_current_user_can( $can_type, $which );
954 + }
940 955
956 + return $input;
957 + }
941 958
942 - /**
943 - * Method db_free_result()
944 - *
945 - * To escape response data.
946 - *
947 - * @param mixed $input_value input value.
948 - * @param mixed $result result data.
949 - *
950 - * @return bool true.
951 - */
952 - public function db_free_result( $input_value, $result ) {
953 - MainWP_DB::free_result( $result );
954 - return true;
955 - }
959 + /**
960 + * Method hook_escape_response()
961 + *
962 + * To escape response data.
963 + *
964 + * @param mixed $response response data.
965 + * @param bool $fields fields of response data - option.
966 + * @param array $more_allowed input allowed tags - option.
967 + *
968 + * @return mixed $response valid response data.
969 + * @throws \MainWP_Exception Exception message.
970 + *
971 + * @uses \MainWP\Dashboard\MainWP_Utility::esc_content()
972 + * @uses \MainWP\Dashboard\MainWP_Utility::esc_mixed_content()
973 + */
974 + public function hook_escape_response( $response, $fields = false, $more_allowed = array() ) {
956 975
957 - /**
958 - * Method db_num_rows()
959 - *
960 - * To escape response data.
961 - *
962 - * @param mixed $input_value input value.
963 - * @param mixed $result result data.
964 - *
965 - * @return bool true.
966 - */
967 - public function db_num_rows( $input_value, $result ) {
968 - return MainWP_DB::num_rows( $result );
969 - }
976 + if ( false === $fields || is_string( $response ) ) {
977 + return MainWP_Utility::esc_content( $response );
978 + }
970 979
980 + if ( ! is_array( $fields ) ) {
981 + return $response;
982 + }
971 983
972 - /**
973 - * Method db_get_websites_for_current_user()
974 - *
975 - * To escape response data.
976 - *
977 - * @param mixed $input_value input value.
978 - * @param array $params params data.
979 - *
980 - * @return mixed websites.
981 - */
982 - public function db_get_websites_for_current_user( $input_value = false, $params = array() ) {
983 - if ( ! is_array( $params ) ) {
984 - $params = array();
985 - }
984 + if ( ! in_array( 'error', $fields ) ) {
985 + $fields[] = 'error'; // to sure to valid 'error' field, if that existed.
986 + }
986 987
987 - $orderBy = isset( $params['orderby'] ) ? MainWP_DB::instance()->escape( $params['orderby'] ) : 'wp.url';
988 - $extra_view = isset( $params['extra_view'] ) ? $params['extra_view'] : array( 'favi_icon' );
988 + if ( ! in_array( 'message', $fields ) ) {
989 + $fields[] = 'message'; // to sure to valid 'message' field, if that existed.
990 + }
989 991
990 - if ( ! is_array( $extra_view ) ) {
991 - $extra_view = array( 'favi_icon' );
992 - }
993 - return MainWP_DB::instance()->query( MainWP_DB::instance()->get_sql_websites_for_current_user( false, null, $orderBy, false, false, null, false, $extra_view ) );
994 - }
992 + $depth = 10;
995 993
994 + foreach ( $fields as $field ) {
995 + if ( isset( $response[ $field ] ) ) {
996 + $response[ $field ] = MainWP_Utility::esc_mixed_content( $response[ $field ], $depth, $more_allowed );
997 + }
998 + }
999 + return $response;
1000 + }
996 1001
997 - /**
998 - * Method hook_sync_website()
999 - *
1000 - * To escape response data.
1001 - *
1002 - * @param mixed $input_value input value.
1003 - * @param int $website_id Website ID.
1004 - * @param bool $fire_end_session to run the ending session or not.
1005 - *
1006 - * @return mixed websites.
1007 - */
1008 - public function hook_sync_website( $input_value, $website_id, $fire_end_session = true ) {
1009 - if ( empty( $website_id ) ) {
1010 - return $input_value;
1011 - }
1012 - $website = MainWP_DB::instance()->get_website_by_id( $website_id );
1013 - if ( empty( $website ) ) {
1014 - return $input_value;
1015 - }
1016 - return MainWP_Sync::sync_website( $website, $fire_end_session );
1017 - }
1002 + /**
1003 + * Method hook_escape_content()
1004 + *
1005 + * To escape content.
1006 + *
1007 + * @param mixed $content response data.
1008 + * @param string $type content type for escape.
1009 + * @param array $more_allowed input allowed tags - option.
1010 + *
1011 + * @return mixed $response valid response data.
1012 + * @throws \MainWP_Exception Exception message.
1013 + *
1014 + * @uses \MainWP\Dashboard\MainWP_Utility::esc_content()
1015 + */
1016 + public function hook_escape_content( $content, $type = 'note', $more_allowed = array() ) {
1017 + return MainWP_Utility::esc_content( $content, $type, $more_allowed );
1018 + }
1018 1019
1019 1020
1020 - /**
1021 - * Method hook_db_data_seek()
1022 - *
1023 - * To escape response data.
1024 - *
1025 - * @param mixed $result result data.
1026 - * @param int $offset offset of data.
1027 - */
1028 - public function hook_db_data_seek( $result, $offset = 0 ) {
1029 - MainWP_DB::data_seek( $result, $offset );
1030 - }
1021 + /**
1022 + * Method db_free_result()
1023 + *
1024 + * To escape response data.
1025 + *
1026 + * @param mixed $input_value input value.
1027 + * @param mixed $result result data.
1028 + *
1029 + * @return bool true.
1030 + */
1031 + public function db_free_result( $input_value, $result ) {
1032 + unset( $input_value );
1033 + MainWP_DB::free_result( $result );
1034 + return true;
1035 + }
1031 1036
1037 + /**
1038 + * Method db_num_rows()
1039 + *
1040 + * To escape response data.
1041 + *
1042 + * @param mixed $input_value input value.
1043 + * @param mixed $result result data.
1044 + *
1045 + * @return bool true.
1046 + */
1047 + public function db_num_rows( $input_value, $result ) {
1048 + unset( $input_value );
1049 + return MainWP_DB::num_rows( $result );
1050 + }
1032 1051
1033 - /**
1034 - * Method hook_db_query()
1035 - *
1036 - * To query db.
1037 - *
1038 - * @param mixed $input_value filter input value.
1039 - * @param string $sql result data.
1040 - *
1041 - * @return bool true.
1042 - */
1043 - public function hook_db_query( $input_value, $sql ) {
1044 - return MainWP_DB::instance()->query( $sql );
1045 - }
1046 1052
1047 - /**
1048 - * Method db_fetch_object()
1049 - *
1050 - * To escape response data.
1051 - *
1052 - * @param mixed $input_value input value.
1053 - * @param mixed $result result data.
1054 - *
1055 - * @return bool true.
1056 - */
1057 - public function db_fetch_object( $input_value, $result ) {
1058 - return MainWP_DB::fetch_object( $result );
1059 - }
1053 + /**
1054 + * Method db_get_websites_for_current_user()
1055 + *
1056 + * @param mixed $input_value input value.
1057 + * @param array $params params data.
1058 + *
1059 + * @return mixed websites.
1060 + */
1061 + public function db_get_websites_for_current_user( $input_value = false, $params = array() ) {
1062 + unset( $input_value );
1063 + if ( ! is_array( $params ) ) {
1064 + $params = array();
1065 + }
1060 1066
1067 + $orderBy = isset( $params['orderby'] ) ? MainWP_DB::instance()->escape( $params['orderby'] ) : 'wp.url';
1068 + $extra_view = isset( $params['extra_view'] ) ? $params['extra_view'] : array( 'favi_icon' );
1061 1069
1062 - /**
1063 - * Method db_fetch_array()
1064 - *
1065 - * To escape response data.
1066 - *
1067 - * @param mixed $input_value input value.
1068 - * @param mixed $result result data.
1069 - *
1070 - * @return bool true.
1071 - */
1072 - public function db_fetch_array( $input_value, $result ) {
1073 - return MainWP_DB::fetch_array( $result );
1074 - }
1070 + if ( ! is_array( $extra_view ) ) {
1071 + $extra_view = array( 'favi_icon' );
1072 + }
1075 1073
1074 + // Prevent conflicts in wp_options query conditions.
1075 + // If use_join_wp_options is not enabled,
1076 + // force the use of a compatible subquery approach to ensure the query remains correct.
1077 + if ( is_array( $params ) && empty( $params['use_join_wp_options'] ) ) {
1078 + $params['use_compatible_subquery'] = 1;
1079 + }
1076 1080
1077 - /**
1078 - * Get notification email settings.
1079 - *
1080 - * @param string $settings hook settings input value.
1081 - * @param string $type Notification type.
1082 - *
1083 - * @return array $gen_email_settings email settings.
1084 - */
1085 - public function get_notification_settings( $settings, $type ) {
1086 - $gen_email_settings = MainWP_Notification_Settings::get_general_email_settings( $type );
1087 - return $gen_email_settings;
1088 - }
1081 + return MainWP_DB::instance()->query( MainWP_DB::instance()->get_sql_websites_for_current_user( false, null, $orderBy, false, false, null, false, $extra_view, 'no', $params ) );
1082 + }
1089 1083
1090 - /**
1091 - * Hook send_wp_mail().
1092 - *
1093 - * Send email via wp_mail().
1094 - *
1095 - * @param string $input hook input value.
1096 - * @param string $email send to email.
1097 - * @param string $subject email content.
1098 - * @param bool $formated_content email content.
1099 - * @param string $content_type Text format.
1100 - */
1101 - public function hook_send_wp_mail( $input, $email, $subject, $formated_content, $content_type = '' ) {
1102 - return MainWP_Notification::send_wp_mail(
1103 - $email,
1104 - $subject,
1105 - $formated_content,
1106 - $content_type
1107 - );
1108 - }
1084 + /**
1085 + * Method hook_get_sql_websites_by_params()
1086 + *
1087 + * @param mixed $in_val input value.
1088 + * @param array $params params data.
1089 + *
1090 + * @return mixed websites.
1091 + */
1092 + public function hook_get_sql_websites_by_params( $in_val = false, $params = array() ) {
1093 + unset( $in_val );
1094 + if ( ! is_array( $params ) ) {
1095 + $params = array();
1096 + }
1109 1097
1110 - /**
1111 - * Hook get template HTML content.
1112 - *
1113 - * @param string $input hooks input value.
1114 - * @param string $template_name Template name.
1115 - * @param array $args Arguments. (default: array).
1116 - *
1117 - * @return string
1118 - */
1119 - public function hook_get_template_html( $input, $template_name, $args = array() ) {
1120 - $mail_content = MainWP_Notification_Template::instance()->get_template_html(
1121 - $template_name,
1122 - $args
1123 - );
1124 - return $mail_content;
1125 - }
1098 + // Prevent conflicts in wp_options query conditions.
1099 + // If use_join_wp_options is not enabled,
1100 + // force the use of a compatible subquery approach to ensure the query remains correct.
1101 + if ( is_array( $params ) && empty( $params['use_join_wp_options'] ) ) {
1102 + $params['use_compatible_subquery'] = 1;
1103 + }
1126 1104
1127 - /**
1128 - * Method hook_secure_request()
1129 - *
1130 - * Security check to request parameter
1131 - *
1132 - * @param string $action Action to perform.
1133 - * @param string $query_arg Query argument.
1134 - *
1135 - * @uses \MainWP\Dashboard\MainWP_Post_Handler::secure_request()
1136 - */
1137 - public function hook_secure_request( $action = '', $query_arg = 'security' ) {
1138 - MainWP_Post_Handler::instance()->secure_request( $action, $query_arg );
1139 - }
1105 + return MainWP_DB::instance()->get_sql_websites_for_current_user_by_params( $params );
1106 + }
1140 1107
1141 - /**
1142 - * Method hook_check_security_request()
1143 - *
1144 - * Security check to request parameter
1145 - *
1146 - * @param bool $input_value Input value.
1147 - * @param string $action Action to perform.
1148 - * @param string $query_arg Query argument.
1149 - */
1150 - public function hook_check_security_request( $input_value, $action = '', $query_arg = '' ) {
1151 - if ( empty( $query_arg ) ) {
1152 - //phpcs:ignore Squiz.PHP.CommentedOutCode.Found
1153 - // to do, $query_arg = 'security'.
1154 - $query_arg = $action; // to check wp_verify_nonce - sanitize_key( $_REQUEST[ $query_arg ] ) - $action.
1155 - }
1156 - return MainWP_Post_Handler::instance()->check_security( $action, $query_arg, false );
1157 - }
1158 1108
1159 - /**
1160 - * Method hook_get_mainwp_dir()
1161 - *
1162 - * Hook to get MainWP Directory.
1163 - *
1164 - * @param bool $input_value False.
1165 - * @param null $dir WP files system diectories.
1166 - * @param bool $direct_access Return true if Direct access file system. Default: false.
1167 - *
1168 - * @return array $newdir, $url.
1169 - *
1170 - * @uses \MainWP\Dashboard\MainWP_System_Utility::get_mainwp_dir()
1171 - */
1172 - public function hook_get_mainwp_dir( $input_value = false, $dir = null, $direct_access = false ) {
1173 - return MainWP_System_Utility::get_mainwp_dir( $dir, $direct_access );
1174 - }
1109 + /**
1110 + * Method hook_sync_website()
1111 + *
1112 + * To escape response data.
1113 + *
1114 + * @param mixed $input_value input value.
1115 + * @param int $website_id Website ID.
1116 + * @param bool $fire_end_session to run the ending session or not.
1117 + *
1118 + * @return mixed websites.
1119 + */
1120 + public function hook_sync_website( $input_value, $website_id, $fire_end_session = true ) {
1121 + if ( empty( $website_id ) ) {
1122 + return $input_value;
1123 + }
1124 + $website = MainWP_DB::instance()->get_website_by_id( $website_id );
1125 + if ( empty( $website ) ) {
1126 + return $input_value;
1127 + }
1128 + return MainWP_Sync::sync_website( $website, $fire_end_session );
1129 + }
1175 1130
1176 1131
1177 - /**
1178 - * Method is_multi_user()
1179 - *
1180 - * Hook to check if multi user.
1181 - *
1182 - * @return bool true|false.
1183 - *
1184 - * @uses \MainWP\Dashboard\MainWP_System::is_multi_user()
1185 - */
1186 - public function is_multi_user() {
1187 - return MainWP_System::instance()->is_multi_user();
1188 - }
1132 + /**
1133 + * Method hook_db_data_seek()
1134 + *
1135 + * To escape response data.
1136 + *
1137 + * @param mixed $result result data.
1138 + * @param int $offset offset of data.
1139 + */
1140 + public function hook_db_data_seek( $result, $offset = 0 ) {
1141 + MainWP_DB::data_seek( $result, $offset );
1142 + }
1189 1143
1190 - /**
1191 - * Method filter_qq2_file_uploader()
1192 - *
1193 - * Hook to create new MainWP_QQ2_File_Uploader() class.
1194 - *
1195 - * @param mixed $allowedExtensions Allowed files extentions.
1196 - * @param mixed $sizeLimit Maximum file size allowed to be uploaded.
1197 - *
1198 - * @return MainWP_QQ2_File_Uploader Return instance of MainWP_QQ2_File_Uploader
1199 - *
1200 - * @uses \MainWP\Dashboard\MainWP_QQ2_File_Uploader
1201 - */
1202 - public function filter_qq2_file_uploader( $allowedExtensions, $sizeLimit ) {
1203 - return new MainWP_QQ2_File_Uploader( $allowedExtensions, $sizeLimit );
1204 - }
1205 1144
1206 - /**
1207 - * Method get_metaboxes_post()
1208 - *
1209 - * Hook to get meta boxes.
1210 - *
1211 - * @return string|bool Return error or true.
1212 - *
1213 - * @uses \MainWP\Dashboard\MainWP_System::$metaboxes
1214 - */
1215 - public function get_metaboxes_post() {
1216 - return MainWP_System::instance()->metaboxes;
1217 - }
1145 + /**
1146 + * Method hook_db_query()
1147 + *
1148 + * To query db.
1149 + *
1150 + * @param mixed $input_value filter input value.
1151 + * @param string $sql result data.
1152 + *
1153 + * @return bool true.
1154 + */
1155 + public function hook_db_query( $input_value, $sql ) {
1156 + unset( $input_value );
1157 + return MainWP_DB::instance()->query( $sql );
1158 + }
1218 1159
1219 - /**
1220 - * Method hook_notification_email()
1221 - *
1222 - * Hook to get notification email.
1223 - *
1224 - * @return string Return email.
1225 - */
1226 - public function hook_notification_email() {
1227 - return MainWP_Notification_Settings::get_general_email();
1228 - }
1160 + /**
1161 + * Method db_fetch_object()
1162 + *
1163 + * To escape response data.
1164 + *
1165 + * @param mixed $input_value input value.
1166 + * @param mixed $result result data.
1167 + *
1168 + * @return bool true.
1169 + */
1170 + public function db_fetch_object( $input_value, $result ) {
1171 + unset( $input_value );
1172 + return MainWP_DB::fetch_object( $result );
1173 + }
1229 1174
1230 - /**
1231 - * Method get_formated_email()
1232 - *
1233 - * Hook to format email.
1234 - *
1235 - * @param mixed $body Email body.
1236 - * @param mixed $email Email address.
1237 - * @param string $title Email title.
1238 - *
1239 - * @return string|bool Return error or true.
1240 - *
1241 - * @uses \MainWP\Dashboard\MainWP_Format::format_email()
1242 - */
1243 - public function get_formated_email( $body, $email, $title = '' ) {
1244 - return MainWP_Format::format_email( $email, $body, $title );
1245 - }
1246 1175
1247 - /**
1248 - * Method active_plugin()
1249 - *
1250 - * Hook to activate plugins.
1251 - *
1252 - * @uses \MainWP\Dashboard\MainWP_Plugins_Handler::activate_plugins()
1253 - */
1254 - public function active_plugin() {
1255 - MainWP_Plugins_Handler::activate_plugins();
1256 - die();
1257 - }
1176 + /**
1177 + * Method db_fetch_array()
1178 + *
1179 + * To escape response data.
1180 + *
1181 + * @param mixed $input_value input value.
1182 + * @param mixed $result result data.
1183 + *
1184 + * @return bool true.
1185 + */
1186 + public function db_fetch_array( $input_value, $result ) {
1187 + unset( $input_value );
1188 + return MainWP_DB::fetch_array( $result );
1189 + }
1258 1190
1259 - /**
1260 - * Method deactive_plugin()
1261 - *
1262 - * Hook to deactivate plugins.
1263 - *
1264 - * @uses \MainWP\Dashboard\MainWP_Plugins_Handler::deactivate_plugins()
1265 - */
1266 - public function deactive_plugin() {
1267 - MainWP_Plugins_Handler::deactivate_plugins();
1268 - die();
1269 - }
1270 1191
1271 - /**
1272 - * Method delete_plugin()
1273 - *
1274 - * Hook to delete plugins.
1275 - *
1276 - * @uses \MainWP\Dashboard\MainWP_Plugins_Handler::delete_plugins()
1277 - */
1278 - public function delete_plugin() {
1279 - MainWP_Plugins_Handler::delete_plugins();
1280 - die();
1281 - }
1192 + /**
1193 + * Get notification email settings.
1194 + *
1195 + * @param string $settings hook settings input value.
1196 + * @param string $type Notification type.
1197 + *
1198 + * @return array $gen_email_settings email settings.
1199 + */
1200 + public function get_notification_settings( $settings, $type ) {
1201 + unset( $settings );
1202 + return MainWP_Notification_Settings::get_general_email_settings( $type );
1203 + }
1282 1204
1283 - /**
1284 - * Method delete_theme()
1285 - *
1286 - * Hook to delete theme()
1287 - *
1288 - * @uses \MainWP\Dashboard\MainWP_Themes_Handler::delete_themes()
1289 - */
1290 - public function delete_theme() {
1291 - MainWP_Themes_Handler::delete_themes();
1292 - die();
1293 - }
1205 + /**
1206 + * Hook send_wp_mail().
1207 + *
1208 + * Send email via wp_mail().
1209 + *
1210 + * @param string $input hook input value.
1211 + * @param string $email send to email.
1212 + * @param string $subject email content.
1213 + * @param bool $formated_content email content.
1214 + * @param string $content_type Text format.
1215 + */
1216 + public function hook_send_wp_mail( $input, $email, $subject, $formated_content, $content_type = '' ) {
1217 + unset( $input );
1218 + return MainWP_Notification::send_wp_mail(
1219 + $email,
1220 + $subject,
1221 + $formated_content,
1222 + $content_type
1223 + );
1224 + }
1294 1225
1295 - /**
1296 - * Method upgrade_wp()
1297 - *
1298 - * Hook to upgrade WP.
1299 - */
1300 - public function upgrade_wp() {
1226 + /**
1227 + * Hook get template HTML content.
1228 + *
1229 + * @param string $input hooks input value.
1230 + * @param string $template_name Template name.
1231 + * @param array $args Arguments. (default: array).
1232 + *
1233 + * @return string
1234 + */
1235 + public function hook_get_template_html( $input, $template_name, $args = array() ) {
1236 + unset( $input );
1237 + return MainWP_Notification_Template::instance()->get_template_html(
1238 + $template_name,
1239 + $args
1240 + );
1241 + }
1301 1242
1302 - if ( ! mainwp_current_user_have_right( 'dashboard', 'update_wordpress' ) ) {
1303 - die( wp_json_encode( array( 'error' => mainwp_do_not_have_permissions( esc_html__( 'update WordPress', 'mainwp' ), $echo = false ) ) ) );
1304 - }
1243 + /**
1244 + * Method hook_secure_request()
1245 + *
1246 + * Security check to request parameter
1247 + *
1248 + * @param string $action Action to perform.
1249 + * @param string $query_arg Query argument.
1250 + *
1251 + * @uses \MainWP\Dashboard\MainWP_Post_Handler::secure_request()
1252 + */
1253 + public function hook_secure_request( $action = '', $query_arg = 'security' ) {
1254 + MainWP_Post_Handler::instance()->secure_request( $action, $query_arg );
1255 + }
1305 1256
1306 - try {
1307 - $id = isset( $_POST['id'] ) ? intval( $_POST['id'] ) : false; // phpcs:ignore WordPress.Security.NonceVerification,WordPress.Security.ValidatedSanitizedInput.InputNotSanitized
1308 - die( wp_json_encode( array( 'result' => MainWP_Updates_Handler::upgrade_site( $id ) ) ) ); // ok.
1309 - } catch ( MainWP_Exception $e ) {
1310 - die(
1311 - wp_json_encode(
1312 - array(
1313 - 'error' => array(
1314 - 'message' => $e->getMessage(),
1315 - 'extra' => $e->get_message_extra(),
1316 - ),
1317 - )
1318 - )
1319 - );
1320 - }
1257 + /**
1258 + * Method hook_check_security_request()
1259 + *
1260 + * Security check to request parameter
1261 + *
1262 + * @param bool $input_value Input value.
1263 + * @param string $action Action to perform.
1264 + * @param string $query_arg Query argument.
1265 + */
1266 + public function hook_check_security_request( $input_value, $action = '', $query_arg = '' ) {
1267 + unset( $input_value );
1268 + if ( empty( $query_arg ) ) {
1269 + //phpcs:ignore Squiz.PHP.CommentedOutCode.Found
1270 + // to do, $query_arg = 'security'.
1271 + $query_arg = $action; // to check wp_verify_nonce - sanitize_key( $_REQUEST[ $query_arg ] ) - $action.
1272 + }
1273 + return MainWP_Post_Handler::instance()->check_security( $action, $query_arg, false );
1274 + }
1321 1275
1322 - die();
1323 - }
1276 + /**
1277 + * Method hook_get_mainwp_dir()
1278 + *
1279 + * Hook to get MainWP Directory.
1280 + *
1281 + * @param bool $input_value False.
1282 + * @param null $dir WP files system diectories.
1283 + * @param bool $direct_access Return true if Direct access file system. Default: false.
1284 + *
1285 + * @return array $newdir, $url.
1286 + *
1287 + * @uses \MainWP\Dashboard\MainWP_System_Utility::get_mainwp_dir()
1288 + */
1289 + public function hook_get_mainwp_dir( $input_value = false, $dir = null, $direct_access = false ) {
1290 + unset( $input_value );
1291 + return MainWP_System_Utility::get_mainwp_dir( $dir, $direct_access );
1292 + }
1324 1293
1325 - /**
1326 - * Method upgrade_plugin_theme()
1327 - *
1328 - * Hook to update theme.
1329 - *
1330 - * @uses \MainWP\Dashboard\MainWP_Error_Helper::get_error_message()
1331 - * @uses \MainWP\Dashboard\MainWP_System_Utility::can_edit_website()
1332 - * @uses \MainWP\Dashboard\MainWP_Utility::ctype_digit()
1333 - */
1334 - public function upgrade_plugin_theme() {
1335 - try {
1336 - // phpcs:disable WordPress.Security.NonceVerification,WordPress.Security.ValidatedSanitizedInput.InputNotSanitized
1337 - $websiteId = isset( $_POST['websiteId'] ) ? intval( $_POST['websiteId'] ) : null;
1338 - $type = isset( $_POST['type'] ) ? sanitize_text_field( wp_unslash( $_POST['type'] ) ) : null;
1339 - $slugs = isset( $_POST['slugs'] ) && is_array( $_POST['slugs'] ) ? wp_unslash( $_POST['slugs'] ) : array();
1340 - $error = '';
1341 - $erCode = '';
1342 - // phpcs:enable
1343 1294
1344 - if ( 'plugin' === $type && ! mainwp_current_user_have_right( 'dashboard', 'update_plugins' ) ) {
1345 - $error = mainwp_do_not_have_permissions( esc_html__( 'update plugins', 'mainwp' ), false );
1346 - } elseif ( 'theme' === $type && ! mainwp_current_user_have_right( 'dashboard', 'update_themes' ) ) {
1347 - $error = mainwp_do_not_have_permissions( esc_html__( 'update themes', 'mainwp' ), false );
1348 - }
1295 + /**
1296 + * Method is_multi_user()
1297 + *
1298 + * Hook to check if multi user.
1299 + *
1300 + * @return bool true|false.
1301 + *
1302 + * @uses \MainWP\Dashboard\MainWP_System::is_multi_user()
1303 + */
1304 + public function is_multi_user() {
1305 + return MainWP_System::instance()->is_multi_user();
1306 + }
1349 1307
1350 - $website = MainWP_DB::instance()->get_website_by_id( $websiteId );
1308 + /**
1309 + * Method filter_qq2_file_uploader()
1310 + *
1311 + * Hook to create new MainWP_QQ2_File_Uploader() class.
1312 + *
1313 + * @param mixed $allowedExtensions Allowed files extentions.
1314 + * @param mixed $sizeLimit Maximum file size allowed to be uploaded.
1315 + *
1316 + * @return MainWP_QQ2_File_Uploader Return instance of MainWP_QQ2_File_Uploader
1317 + *
1318 + * @uses \MainWP\Dashboard\MainWP_QQ2_File_Uploader
1319 + */
1320 + public function filter_qq2_file_uploader( $allowedExtensions, $sizeLimit ) {
1321 + return new MainWP_QQ2_File_Uploader( $allowedExtensions, $sizeLimit );
1322 + }
1351 1323
1352 - if ( MainWP_System_Utility::is_suspended_site( $website ) ) {
1353 - $error = esc_html__( 'Suspended site.', 'mainwp' );
1354 - $erCode = 'SUSPENDED_SITE';
1355 - }
1324 + /**
1325 + * Method get_metaboxes_post()
1326 + *
1327 + * Hook to get meta boxes.
1328 + *
1329 + * @return string|bool Return error or true.
1330 + *
1331 + * @uses \MainWP\Dashboard\MainWP_System::$metaboxes
1332 + */
1333 + public function get_metaboxes_post() {
1334 + return MainWP_System::instance()->metaboxes;
1335 + }
1356 1336
1357 - if ( ! empty( $error ) ) {
1358 - wp_send_json(
1359 - array(
1360 - 'error' => $error,
1361 - 'errorCode' => $erCode,
1362 - )
1363 - );
1364 - }
1337 + /**
1338 + * Method hook_notification_email()
1339 + *
1340 + * Hook to get notification email.
1341 + *
1342 + * @return string Return email.
1343 + */
1344 + public function hook_notification_email() {
1345 + return MainWP_Notification_Settings::get_general_email();
1346 + }
1365 1347
1366 - if ( MainWP_Utility::ctype_digit( $websiteId ) ) {
1367 - if ( MainWP_System_Utility::can_edit_website( $website ) ) {
1368 - /**
1369 - * Action: mainwp_before_plugin_theme_translation_update
1370 - *
1371 - * Fires before plugin/theme/translation update actions.
1372 - *
1373 - * @since 4.1
1374 - */
1375 - do_action( 'mainwp_before_plugin_theme_translation_update', $type, implode( ',', $slugs ), $website );
1348 + /**
1349 + * Method get_formated_email()
1350 + *
1351 + * Hook to format email.
1352 + *
1353 + * @param mixed $body Email body.
1354 + * @param mixed $email Email address.
1355 + * @param string $title Email title.
1356 + *
1357 + * @return string|bool Return error or true.
1358 + *
1359 + * @uses \MainWP\Dashboard\MainWP_Format::format_email()
1360 + */
1361 + public function get_formated_email( $body, $email, $title = '' ) {
1362 + return MainWP_Format::format_email( $email, $body, $title );
1363 + }
1376 1364
1377 - $information = MainWP_Connect::fetch_url_authed(
1378 - $website,
1379 - 'upgradeplugintheme',
1380 - array(
1381 - 'type' => $type,
1382 - 'list' => urldecode( implode( ',', $slugs ) ),
1383 - )
1384 - );
1365 + /**
1366 + * Method active_plugin()
1367 + *
1368 + * Hook to activate plugins.
1369 + *
1370 + * @uses \MainWP\Dashboard\MainWP_Plugins_Handler::activate_plugins()
1371 + */
1372 + public function active_plugin() {
1373 + MainWP_Plugins_Handler::activate_plugins();
1374 + die();
1375 + }
1385 1376
1386 - /**
1387 - * Action: mainwp_after_plugin_theme_translation_update
1388 - *
1389 - * Fires before plugin/theme/translation update actions.
1390 - *
1391 - * @since 4.1
1392 - */
1393 - do_action( 'mainwp_after_plugin_theme_translation_update', $information, $type, implode( ',', $slugs ), $website );
1377 + /**
1378 + * Method deactive_plugin()
1379 + *
1380 + * Hook to deactivate plugins.
1381 + *
1382 + * @uses \MainWP\Dashboard\MainWP_Plugins_Handler::deactivate_plugins()
1383 + */
1384 + public function deactive_plugin() {
1385 + MainWP_Plugins_Handler::deactivate_plugins();
1386 + die();
1387 + }
1394 1388
1395 - if ( isset( $information['sync'] ) ) {
1396 - unset( $information['sync'] );
1397 - }
1389 + /**
1390 + * Method delete_plugin()
1391 + *
1392 + * Hook to delete plugins.
1393 + *
1394 + * @uses \MainWP\Dashboard\MainWP_Plugins_Handler::delete_plugins()
1395 + */
1396 + public function delete_plugin() {
1397 + MainWP_Plugins_Handler::delete_plugins();
1398 + die();
1399 + }
1398 1400
1399 - wp_send_json( $information );
1400 - }
1401 - }
1402 - } catch ( MainWP_Exception $e ) {
1403 - die( wp_json_encode( array( 'error' => MainWP_Error_Helper::get_error_message( $e ) ) ) );
1404 - }
1401 + /**
1402 + * Method delete_theme()
1403 + *
1404 + * Hook to delete theme()
1405 + *
1406 + * @uses \MainWP\Dashboard\MainWP_Themes_Handler::delete_themes()
1407 + */
1408 + public function delete_theme() {
1409 + MainWP_Themes_Handler::delete_themes();
1410 + die();
1411 + }
1405 1412
1406 - die();
1407 - }
1413 + /**
1414 + * Method upgrade_wp()
1415 + *
1416 + * Hook to upgrade WP.
1417 + */
1418 + public function upgrade_wp() {
1408 1419
1409 - /**
1410 - * Method hook_get_websites_by_group_ids()
1411 - *
1412 - * Hook to get Child Sites by group ID.
1413 - *
1414 - * @param mixed $ids Group IDs.
1415 - * @param null $userId Current user ID.
1416 - *
1417 - * @return (object|null) Database query result for get Child Sites by group ID or null on failure.
1418 - */
1419 - public function hook_get_websites_by_group_ids( $ids, $userId = null ) {
1420 - return MainWP_DB::instance()->get_websites_by_group_ids( $ids, $userId );
1421 - }
1420 + if ( ! \mainwp_current_user_can( 'dashboard', 'update_wordpress' ) ) {
1421 + die( wp_json_encode( array( 'error' => \mainwp_do_not_have_permissions( esc_html__( 'update WordPress', 'mainwp' ), false ) ) ) );
1422 + }
1422 1423
1423 - /**
1424 - * Method hook_posts_get_edit()
1425 - *
1426 - * Get and create post to edit.
1427 - *
1428 - * @uses \MainWP\Dashboard\MainWP_Post_Page_Handler::get_post()
1429 - */
1430 - public function hook_posts_get_edit() {
1431 - MainWP_Post_Page_Handler::get_post();
1432 - die();
1433 - }
1424 + try {
1425 + $id = isset( $_POST['id'] ) ? intval( $_POST['id'] ) : false; // phpcs:ignore WordPress.Security.NonceVerification,WordPress.Security.ValidatedSanitizedInput.InputNotSanitized
1426 + die( wp_json_encode( array( 'result' => MainWP_Updates_Handler::upgrade_site( $id ) ) ) ); // ok.
1427 + } catch ( MainWP_Exception $e ) {
1428 + die(
1429 + wp_json_encode(
1430 + array(
1431 + 'error' => array(
1432 + 'message' => $e->getMessage(),
1433 + 'extra' => $e->get_message_extra(),
1434 + ),
1435 + )
1436 + )
1437 + );
1438 + }
1434 1439
1435 - /**
1436 - * Method hook_posts_bulk_posting()
1437 - *
1438 - * Post Bulk posting.
1439 - *
1440 - * @uses \MainWP\Dashboard\MainWP_Post_Page_Handler::get_post()
1441 - */
1442 - public function hook_posts_bulk_posting() {
1443 - // phpcs:disable WordPress.Security.NonceVerification,WordPress.Security.ValidatedSanitizedInput.InputNotSanitized
1444 - $post_id = isset( $_POST['post_id'] ) && ! empty( $_POST['post_id'] ) ? intval( wp_unslash( $_POST['post_id'] ) ) : false;
1445 - if ( $post_id ) {
1446 - MainWP_Post_Page_Handler::posting_posts( $post_id, 'ajax_posting' );
1447 - }
1448 - // phpcs:enable
1449 - die();
1450 - }
1440 + die();
1441 + }
1451 1442
1452 - /**
1453 - * Method hook_atarim_default_sitestable_column()
1454 - *
1455 - * @param mixed $columns columns data.
1456 - *
1457 - * Hook Atarim default column.
1458 - */
1459 - public function hook_atarim_default_sitestable_column( $columns ) {
1460 - if ( ! is_plugin_active( 'mainwp-atarim-extension/mainwp-atarim-extension.php' ) ) {
1461 - $columns['atarim_tasks'] = esc_html__( 'Atarim', 'mainwp-atarim-extension' );
1462 - }
1463 - return $columns;
1464 - }
1443 + /**
1444 + * Method upgrade_plugin_theme()
1445 + *
1446 + * Hook to update theme.
1447 + *
1448 + * @uses \MainWP\Dashboard\MainWP_Error_Helper::get_error_message()
1449 + * @uses \MainWP\Dashboard\MainWP_System_Utility::can_edit_website()
1450 + * @uses \MainWP\Dashboard\MainWP_Utility::ctype_digit()
1451 + */
1452 + public function upgrade_plugin_theme() { // phpcs:ignore -- NOSONAR - complex.
1453 + try {
1454 + // phpcs:disable WordPress.Security.NonceVerification,WordPress.Security.ValidatedSanitizedInput.InputNotSanitized
1455 + $websiteId = isset( $_POST['websiteId'] ) ? intval( $_POST['websiteId'] ) : null;
1456 + $type = isset( $_POST['type'] ) ? sanitize_text_field( wp_unslash( $_POST['type'] ) ) : null;
1457 + $slugs = isset( $_POST['slugs'] ) && is_array( $_POST['slugs'] ) ? wp_unslash( $_POST['slugs'] ) : array();
1458 + $error = '';
1459 + $erCode = '';
1460 + // phpcs:enable
1465 1461
1466 - /**
1467 - * Method hook_atarim_manage_sites_default_item()
1468 - *
1469 - * @param mixed $item item row data.
1470 - *
1471 - * Hook Atarim manage sites default item.
1472 - */
1473 - public function hook_atarim_manage_sites_default_item( $item ) {
1474 - if ( ! is_plugin_active( 'mainwp-atarim-extension/mainwp-atarim-extension.php' ) ) {
1475 - if ( is_array( $item ) && isset( $item['url'] ) ) {
1476 - $collaborate_link = 'https://app.atarim.io/fetching/?_from=mainwp&url=' . $item['url'];
1477 - $item['atarim_tasks'] = '<a href="' . $collaborate_link . '" target="_balnk" data-tooltip="Collaborate on this website." data-inverted="" data-position="left center"><span class="ui blue icon label"><i class="comments icon"></i></span></a>';
1478 - }
1479 - }
1480 - return $item;
1481 - }
1462 + if ( 'plugin' === $type && ! \mainwp_current_user_can( 'dashboard', 'update_plugins' ) ) {
1463 + $error = \mainwp_do_not_have_permissions( esc_html__( 'update plugins', 'mainwp' ), false );
1464 + } elseif ( 'theme' === $type && ! \mainwp_current_user_can( 'dashboard', 'update_themes' ) ) {
1465 + $error = \mainwp_do_not_have_permissions( esc_html__( 'update themes', 'mainwp' ), false );
1466 + }
1482 1467
1483 - /**
1484 - * Method hook_get_website_client_tokens()
1485 - *
1486 - * Hook get client tokens.
1487 - *
1488 - * @param mixed $input_value input filter value.
1489 - * @param int $websiteid Website ID.
1490 - *
1491 - * @return mixed $result Result of tokens.
1492 - */
1493 - public function hook_get_website_client_tokens( $input_value, $websiteid = false ) {
1494 - $client_tokens = MainWP_Client_Handler::instance()->get_website_client_tokens_data( $websiteid );
1468 + $website = MainWP_DB::instance()->get_website_by_id( $websiteId );
1495 1469
1496 - if ( false === $client_tokens ) {
1497 - return $input_value;
1498 - }
1470 + if ( MainWP_System_Utility::is_suspended_site( $website ) ) {
1471 + $error = esc_html__( 'Suspended site.', 'mainwp' );
1472 + $erCode = 'SUSPENDED_SITE';
1473 + }
1499 1474
1500 - return $client_tokens;
1501 - }
1475 + if ( ! empty( $error ) ) {
1476 + wp_send_json(
1477 + array(
1478 + 'error' => $error,
1479 + 'errorCode' => $erCode,
1480 + )
1481 + );
1482 + }
1502 1483
1503 - /**
1504 - * Method hook_get_download_sig()
1505 - *
1506 - * Hook get download sig.
1507 - *
1508 - * @param string $input_value Input value.
1509 - * @param string $fullfile Full file path.
1510 - *
1511 - * @return string
1512 - */
1513 - public function hook_get_download_sig( $input_value, $fullfile ) {
1514 - return MainWP_System_Utility::get_download_sig( $fullfile );
1515 - }
1484 + if ( MainWP_Utility::ctype_digit( $websiteId ) && MainWP_System_Utility::can_edit_website( $website ) ) {
1485 + /**
1486 + * Action: mainwp_before_plugin_theme_translation_update
1487 + *
1488 + * Fires before plugin/theme/translation update actions.
1489 + *
1490 + * @since 4.1
1491 + */
1492 + do_action( 'mainwp_before_plugin_theme_translation_update', $type, implode( ',', $slugs ), $website );
1516 1493
1517 - /**
1518 - * Method hook_download_valid_sig().
1519 - *
1520 - * Hook get download sig.
1521 - *
1522 - * @param string $false_value false value.
1523 - * @param string $fullfile Full file path.
1524 - * @param string $sig sig value.
1525 - */
1526 - public function hook_secure_download( $false_value, $fullfile, $sig ) {
1527 - unset( $false_value );
1528 - return MainWP_System_Utility::valid_download_sig( $fullfile, $sig );
1529 - }
1494 + $information = MainWP_Connect::fetch_url_authed(
1495 + $website,
1496 + 'upgradeplugintheme',
1497 + array(
1498 + 'type' => $type,
1499 + 'list' => urldecode( implode( ',', $slugs ) ),
1500 + )
1501 + );
1530 1502
1531 - /**
1532 - * Method hook_ajax_add_action().
1533 - *
1534 - * Hook add ajax action.
1535 - *
1536 - * @param string $action action name.
1537 - * @param string $callback callback function.
1538 - * @param int $priority priority action.
1539 - * @param int $accepted number args.
1540 - */
1541 - public function hook_ajax_add_action( $action, $callback, $priority = 10, $accepted = 2 ) {
1542 - MainWP_Post_Handler::instance()->add_action( $action, $callback, $priority, $accepted );
1543 - }
1503 + /**
1504 + * Action: mainwp_after_plugin_theme_translation_update
1505 + *
1506 + * Fires before plugin/theme/translation update actions.
1507 + *
1508 + * @since 4.1
1509 + */
1510 + do_action( 'mainwp_after_plugin_theme_translation_update', $information, $type, implode( ',', $slugs ), $website );
1511 + wp_send_json( $information );
1512 + }
1513 + } catch ( MainWP_Exception $e ) {
1514 + die( wp_json_encode( array( 'error' => MainWP_Error_Helper::get_error_message( $e ) ) ) );
1515 + }
1544 1516
1545 - /**
1546 - * Method hook_get_plugin_icon().
1547 - *
1548 - * Hook get plugin icon.
1549 - *
1550 - * @param mixed $icon input icon.
1551 - * @param string $slug Plugin slug.
1552 - */
1553 - public function hook_get_plugin_icon( $icon, $slug ) {
1554 - return MainWP_System_Utility::get_plugin_icon( $slug );
1555 - }
1517 + die();
1518 + }
1556 1519
1557 - /**
1558 - * Method hook_get_theme_icon().
1559 - *
1560 - * Hook get theme icon.
1561 - *
1562 - * @param mixed $icon input icon.
1563 - * @param string $slug Theme slug.
1564 - */
1565 - public function hook_get_theme_icon( $icon, $slug ) {
1566 - return MainWP_System_Utility::get_theme_icon( $slug );
1567 - }
1568 - /**
1569 - * Method hook_get_dir_slug().
1570 - *
1571 - * Hook get dir slug of plugin/theme.
1572 - *
1573 - * @param mixed $input input value.
1574 - * @param string $slug Plugin/Theme slug.
1575 - */
1576 - public function hook_get_dir_slug( $input, $slug ) {
1577 - return MainWP_Utility::get_dir_slug( $slug );
1578 - }
1520 + /**
1521 + * Method hook_get_websites_by_group_ids()
1522 + *
1523 + * Hook to get Child Sites by group ID.
1524 + *
1525 + * @param mixed $ids Group IDs.
1526 + * @param null $userId Current user ID.
1527 + *
1528 + * @return (object|null) Database query result for get Child Sites by group ID or null on failure.
1529 + */
1530 + public function hook_get_websites_by_group_ids( $ids, $userId = null ) {
1531 + return MainWP_DB::instance()->get_websites_by_group_ids( $ids, $userId );
1532 + }
1579 1533
1580 - /**
1581 - * Method hook_do_widget_boxes()
1582 - *
1583 - * Customize WordPress do_meta_boxes() function.
1584 - *
1585 - * @param mixed $screen_id Current page ID.
1586 - * @param string|null $context right|null. If 3 columns then = 'middle'.
1587 - * @param string $input_obj Empty string.
1588 - *
1589 - * @return void Renders widget container box.
1590 - */
1591 - public function hook_do_widget_boxes( $screen_id, $context = null, $input_obj = '' ) {
1592 - MainWP_UI::do_widget_boxes( $screen_id, $context, $input_obj );
1593 - }
1534 + /**
1535 + * Method hook_posts_get_edit()
1536 + *
1537 + * Get and create post to edit.
1538 + *
1539 + * @uses \MainWP\Dashboard\MainWP_Post_Page_Handler::get_post()
1540 + */
1541 + public function hook_posts_get_edit() {
1542 + MainWP_Post_Page_Handler::get_post();
1543 + die();
1544 + }
1594 1545
1546 + /**
1547 + * Method hook_posts_bulk_posting()
1548 + *
1549 + * Post Bulk posting.
1550 + *
1551 + * @uses \MainWP\Dashboard\MainWP_Post_Page_Handler::get_post()
1552 + */
1553 + public function hook_posts_bulk_posting() {
1554 + // phpcs:disable WordPress.Security.NonceVerification,WordPress.Security.ValidatedSanitizedInput.InputNotSanitized
1555 + $post_id = isset( $_POST['post_id'] ) && ! empty( $_POST['post_id'] ) ? intval( wp_unslash( $_POST['post_id'] ) ) : false;
1556 + if ( $post_id ) {
1557 + MainWP_Post_Page_Handler::posting_posts( $post_id, 'ajax_posting' );
1558 + }
1559 + // phpcs:enable
1560 + die();
1561 + }
1595 1562
1596 - /**
1597 - * Method hook_add_widget_box()
1598 - *
1599 - * Hook add MainWP meta box.
1600 - *
1601 - * @param mixed $id Widget ID parameter.
1602 - * @param mixed $callback Callback function.
1603 - * @param null $screen Current page.
1604 - * @param string|null $layout widget's layout .
1605 - *
1606 - * @return void Sets Global $mainwp_widget_boxes[ $page ][ $context ][ $priority ][ $id ].
1607 - */
1608 - public function hook_add_widget_box( $id, $callback, $screen = null, $layout = null ) {
1609 - if ( ! is_array( $layout ) ) {
1610 - $layout = array();
1611 - }
1612 - MainWP_UI::add_widget_box( $id, $callback, $screen, $layout );
1613 - }
1563 + /**
1564 + * Method hook_atarim_default_sitestable_column()
1565 + *
1566 + * @param mixed $columns columns data.
1567 + *
1568 + * Hook Atarim default column.
1569 + */
1570 + public function hook_atarim_default_sitestable_column( $columns ) {
1571 + if ( ! is_plugin_active( 'mainwp-atarim-extension/mainwp-atarim-extension.php' ) ) {
1572 + $columns['atarim_tasks'] = esc_html__( 'Atarim', 'mainwp' );
1573 + }
1574 + return $columns;
1575 + }
1614 1576
1615 - /**
1616 - * Method hook_render_modal_upload_icon()
1617 - *
1618 - * Render modal window for upload plugins & themes icon.
1619 - */
1620 - public function hook_render_modal_upload_icon() {
1621 - MainWP_UI::render_modal_upload_icon();
1622 - }
1577 + /**
1578 + * Method hook_atarim_manage_sites_default_item()
1579 + *
1580 + * @param mixed $item item row data.
1581 + *
1582 + * Hook Atarim manage sites default item.
1583 + */
1584 + public function hook_atarim_manage_sites_default_item( $item ) {
1585 + if ( ! is_plugin_active( 'mainwp-atarim-extension/mainwp-atarim-extension.php' ) && is_array( $item ) && isset( $item['url'] ) ) {
1586 + $collaborate_link = 'https://app.atarim.io/fetching/?_from=mainwp&url=' . $item['url'];
1587 + $icon_link = MAINWP_PLUGIN_URL . 'assets/images/atarim-icon.png';
1588 + $item['atarim_tasks'] = '<a href="' . $collaborate_link . '" target="_balnk" class="ui mini grey basic button" data-tooltip="Collaborate on this website." data-inverted="" data-position="left center"><img src="' . $icon_link . '" style="width:12px"> ' . __( 'Collaborate', 'mainwp' ) . '</a>';
1589 + }
1590 + return $item;
1591 + }
1623 1592
1624 - /**
1625 - * Method hook_render_plugin_details_modal()
1626 - *
1627 - * Render modal window plugin details.
1628 - */
1629 - public function hook_render_plugin_details_modal() {
1630 - MainWP_Updates::render_plugin_details_modal();
1631 - }
1593 + /**
1594 + * Method hook_get_website_client_tokens()
1595 + *
1596 + * Hook get client tokens.
1597 + *
1598 + * @param mixed $input_value input filter value.
1599 + * @param int $websiteid Website ID.
1600 + *
1601 + * @return mixed $result Result of tokens.
1602 + */
1603 + public function hook_get_website_client_tokens( $input_value, $websiteid = false ) {
1604 + $client_tokens = MainWP_Client_Handler::instance()->get_website_client_tokens_data( $websiteid );
1632 1605
1633 - /**
1634 - * Method hook_render_updates()
1635 - *
1636 - * Render modal window updates details.
1637 - */
1638 - public function hook_render_updates() {
1639 - MainWP_Updates::render();
1640 - }
1606 + if ( false === $client_tokens ) {
1607 + return $input_value;
1608 + }
1641 1609
1642 - /**
1643 - * Method hook_get_wp_client_by()
1644 - *
1645 - * Handle get wp client by.
1646 - *
1647 - * @param string $by by.
1648 - * @param mixed $value by value.
1649 - * @param mixed $obj Format data.
1650 - * @param bool $params Others params.
1651 - *
1652 - * @return mixed $result results.
1653 - */
1654 - public function hook_get_wp_client_by( $by = 'client_id', $value = null, $obj = OBJECT, $params = array() ) {
1655 - return MainWP_DB_Client::instance()->get_wp_client_by( $by, $value, $obj, $params );
1656 - }
1610 + return $client_tokens;
1611 + }
1657 1612
1658 - /**
1659 - * Method hook_get_activation_info()
1660 - *
1661 - * Get extension activation info.
1662 - *
1663 - * @param bool $boolean Input bool value.
1664 - * @param string $ext_slug extension api slug.
1665 - */
1666 - public function hook_get_activation_info( $boolean, $ext_slug ) {
1667 - $data = MainWP_Api_Manager::instance()->get_activation_info( $ext_slug );
1613 + /**
1614 + * Method hook_get_download_sig()
1615 + *
1616 + * Hook get download sig.
1617 + *
1618 + * @param string $input_value Input value.
1619 + * @param string $fullfile Full file path.
1620 + *
1621 + * @return string
1622 + */
1623 + public function hook_get_download_sig( $input_value, $fullfile ) {
1624 + unset( $input_value );
1625 + return MainWP_System_Utility::get_download_sig( $fullfile );
1626 + }
1668 1627
1669 - $info = array();
1628 + /**
1629 + * Method hook_download_valid_sig().
1630 + *
1631 + * Hook get download sig.
1632 + *
1633 + * @param string $false_value false value.
1634 + * @param string $fullfile Full file path.
1635 + * @param string $sig sig value.
1636 + */
1637 + public function hook_secure_download( $false_value, $fullfile, $sig ) {
1638 + unset( $false_value );
1639 + return MainWP_System_Utility::valid_download_sig( $fullfile, $sig );
1640 + }
1670 1641
1671 - if ( is_array( $data ) && ! empty( $data['api_key'] ) ) {
1672 - $info['api_key'] = $data['api_key'];
1673 - $info['product_id'] = isset( $data['product_id'] ) ? $data['product_id'] : '';
1674 - $info['instance'] = isset( $data['instance_id'] ) ? $data['instance_id'] : '';
1675 - $info['software_version'] = isset( $data['software_version'] ) ? $data['software_version'] : '';
1676 - $info['object'] = MainWP_Api_Manager::instance()->get_domain();
1677 - if ( isset( $data['product_item_id'] ) ) {
1678 - $info['product_item_id'] = $data['product_item_id'];
1679 - }
1680 - } else {
1681 - $info['activated_key'] = 'Deactivated';
1682 - }
1642 + /**
1643 + * Method hook_ajax_add_action().
1644 + *
1645 + * Hook add ajax action.
1646 + *
1647 + * @param string $action action name.
1648 + * @param string $callback callback function.
1649 + * @param int $priority priority action.
1650 + * @param int $accepted number args.
1651 + */
1652 + public function hook_ajax_add_action( $action, $callback, $priority = 10, $accepted = 2 ) {
1653 + MainWP_Post_Handler::instance()->add_action( $action, $callback, $priority, $accepted );
1654 + }
1683 1655
1684 - return $info;
1685 - }
1656 + /**
1657 + * Method hook_get_plugin_icon().
1658 + *
1659 + * Hook get plugin icon.
1660 + *
1661 + * @param mixed $icon input icon.
1662 + * @param string $slug Plugin slug.
1663 + */
1664 + public function hook_get_plugin_icon( $icon, $slug ) {
1665 + unset( $icon );
1666 + return MainWP_System_Utility::get_plugin_icon( $slug );
1667 + }
1686 1668
1687 - /**
1688 - * Method hook_get_api_url()
1689 - *
1690 - * Get MainWP API Url.
1691 - */
1692 - public function hook_get_api_url() {
1693 - return MainWP_Api_Manager::instance()->get_upgrade_url();
1694 - }
1669 + /**
1670 + * Method hook_get_theme_icon().
1671 + *
1672 + * Hook get theme icon.
1673 + *
1674 + * @param mixed $icon input icon.
1675 + * @param string $slug Theme slug.
1676 + */
1677 + public function hook_get_theme_icon( $icon, $slug ) {
1678 + unset( $icon );
1679 + return MainWP_System_Utility::get_theme_icon( $slug );
1680 + }
1681 + /**
1682 + * Method hook_get_dir_slug().
1683 + *
1684 + * Hook get dir slug of plugin/theme.
1685 + *
1686 + * @param mixed $input input value.
1687 + * @param string $slug Plugin/Theme slug.
1688 + */
1689 + public function hook_get_dir_slug( $input, $slug ) {
1690 + unset( $input );
1691 + return MainWP_Utility::get_dir_slug( $slug );
1692 + }
1695 1693
1696 - /**
1697 - * Method hook_run_dashboard_action().
1698 - *
1699 - * Handle run dashboard action.
1700 - *
1701 - * @param bool $boolean Input bool value.
1702 - * @param string $action The action to run.
1703 - * @param bool $out_die The function die or return.
1704 - *
1705 - * @return mixed $return result.
1706 - */
1707 - public function hook_run_dashboard_action( $boolean, $action, $out_die = false ) {
1694 + /**
1695 + * Method hook_do_widget_boxes()
1696 + *
1697 + * Customize WordPress do_meta_boxes() function.
1698 + *
1699 + * @param mixed $screen_id Current page ID.
1700 + * @param string|null $context right|null. If 3 columns then = 'middle'.
1701 + * @param string $input_obj Empty string.
1702 + *
1703 + * @return void Renders widget container box.
1704 + */
1705 + public function hook_do_widget_boxes( $screen_id, $context = null, $input_obj = '' ) {
1706 + MainWP_UI::do_widget_boxes( $screen_id, $context, $input_obj );
1707 + }
1708 1708
1709 - if ( ! isset( $action ) ) {
1710 - return false;
1711 - }
1712 1709
1713 - if ( 'master_api_key_check' === $action ) {
1714 - $return = $this->hook_master_api_key_check();
1715 - } else {
1716 - return false;
1717 - }
1710 + /**
1711 + * Method hook_add_widget_box()
1712 + *
1713 + * Hook add MainWP meta box.
1714 + *
1715 + * @param mixed $id Widget ID parameter.
1716 + * @param mixed $callback Callback function.
1717 + * @param null $screen Current page.
1718 + * @param string|null $layout widget's layout .
1719 + *
1720 + * @return void Sets Global $mainwp_widget_boxes[ $page ][ $context ][ $priority ][ $id ].
1721 + */
1722 + public function hook_add_widget_box( $id, $callback, $screen = null, $layout = null ) {
1723 + if ( ! is_array( $layout ) ) {
1724 + $layout = array();
1725 + }
1726 + MainWP_UI::add_widget_box( $id, $callback, $screen, $layout );
1727 + }
1718 1728
1719 - if ( $out_die ) {
1720 - wp_send_json( $return );
1721 - }
1729 + /**
1730 + * Method hook_render_modal_upload_icon()
1731 + *
1732 + * Render modal window for upload plugins & themes icon.
1733 + */
1734 + public function hook_render_modal_upload_icon() {
1735 + MainWP_UI::render_modal_upload_icon();
1736 + }
1722 1737
1723 - return $return;
1724 - }
1738 + /**
1739 + * Method hook_render_plugin_details_modal()
1740 + *
1741 + * Render modal window plugin details.
1742 + */
1743 + public function hook_render_plugin_details_modal() {
1744 + MainWP_Updates::render_plugin_details_modal();
1745 + }
1725 1746
1747 + /**
1748 + * Method hook_render_updates()
1749 + *
1750 + * Render modal window updates details.
1751 + */
1752 + public function hook_render_updates() {
1753 + MainWP_Updates::render();
1754 + }
1726 1755
1756 + /**
1757 + * Method hook_get_wp_client_by()
1758 + *
1759 + * Handle get wp client by.
1760 + *
1761 + * @param string $by by.
1762 + * @param mixed $value by value.
1763 + * @param mixed $obj Format data.
1764 + * @param bool $params Others params.
1765 + *
1766 + * @return mixed $result results.
1767 + */
1768 + public function hook_get_wp_client_by( $by = 'client_id', $value = null, $obj = OBJECT, $params = array() ) {
1769 + return MainWP_DB_Client::instance()->get_wp_client_by( $by, $value, $obj, $params );
1770 + }
1727 1771
1728 - /**
1729 - * Method hook_master_api_key_check().
1730 - *
1731 - * Handle to valid MainWP API key.
1732 - *
1733 - * @return array $return Data.
1734 - */
1735 - public function hook_master_api_key_check() {
1736 - $api_key = MainWP_Api_Manager_Key::instance()->get_decrypt_master_api_key();
1737 - $return = array();
1738 - $error = '';
1739 - if ( ! empty( $api_key ) ) {
1740 - $result = array();
1741 - try {
1742 - $test = MainWP_Api_Manager::instance()->verify_mainwp_api( $api_key );
1743 - $result = json_decode( $test, true );
1744 - if ( is_array( $result ) ) {
1745 - if ( isset( $result['success'] ) && $result['success'] ) {
1746 - $return['success'] = true;
1747 - } elseif ( isset( $result['error'] ) ) {
1748 - $error = $result['error'];
1749 - }
1750 - }
1751 - } catch ( \Exception $e ) {
1752 - $error = $e->getMessage();
1753 - }
1754 - } else {
1755 - $error = esc_html__( 'MainWP API key are required.', 'mainwp' );
1756 - }
1772 + /**
1773 + * Method hook_uptime_preload_data().
1774 + *
1775 + * @param array $websites Websites array.
1776 + *
1777 + * @return void
1778 + */
1779 + public function hook_uptime_preload_data( $websites ) {
1780 + MainWP_Monitoring_Handler::preload_uptime_data( $websites );
1781 + }
1757 1782
1758 - if ( ! empty( $error ) ) {
1759 - $return['error'] = $error;
1760 - }
1783 + /**
1784 + * Method hook_uptime_intercept_column()
1785 + *
1786 + * Intercept column display in the sites table.
1787 + *
1788 + * @param string $content Column content.
1789 + * @param string $column_name Column name.
1790 + * @param array $website Website data.
1791 + *
1792 + * @return string $content Modified column content.
1793 + */
1794 + public function hook_uptime_intercept_column( $content, $column_name, $website ) {
1795 + // Implementation for intercepting column display.
1796 + return MainWP_Monitoring_Handler::intercept_column( $content, $column_name, $website );
1797 + }
1761 1798
1762 - if ( ! isset( $return['success'] ) ) {
1763 - $return['success'] = false;
1764 - }
1799 + /**
1800 + * Method hook_get_activation_info()
1801 + *
1802 + * Get extension activation info.
1803 + *
1804 + * @param bool $boolean Input bool value.
1805 + * @param string $ext_slug extension api slug.
1806 + */
1807 + public function hook_get_activation_info( $boolean, $ext_slug ) {
1808 + unset( $boolean );
1809 + $data = MainWP_Api_Manager::instance()->get_activation_info( $ext_slug );
1765 1810
1766 - return $return;
1767 - }
1811 + $info = array();
1768 1812
1769 - /**
1770 - * Method hook_get_key_value().
1771 - *
1772 - * Handle get key value.
1773 - *
1774 - * @param bool $input_value Boolean value, it should always be FALSE.
1775 - * @param string $name Key option name.
1776 - * @param mixed $default_value default value.
1777 - *
1778 - * @return array $return Decrypted Key value.
1779 - */
1780 - public function hook_get_key_value( $input_value, $name, $default_value = false ) {
1781 - return MainWP_Keys_Manager::instance()->get_keys_value( $name, $default_value );
1782 - }
1813 + if ( is_array( $data ) && ! empty( $data['api_key'] ) ) {
1814 + $info['api_key'] = $data['api_key'];
1815 + $info['product_id'] = isset( $data['product_id'] ) ? $data['product_id'] : '';
1816 + $info['instance'] = isset( $data['instance_id'] ) ? $data['instance_id'] : '';
1817 + $info['software_version'] = isset( $data['software_version'] ) ? $data['software_version'] : '';
1818 + $info['object'] = MainWP_Api_Manager::instance()->get_domain();
1819 + if ( isset( $data['product_item_id'] ) ) {
1820 + $info['product_item_id'] = $data['product_item_id'];
1821 + }
1822 + } else {
1823 + $info['activated_key'] = 'Deactivated';
1824 + }
1783 1825
1784 - /**
1785 - * Method hook_update_key_value().
1786 - *
1787 - * Handle update key value.
1788 - *
1789 - * @param bool $input_value Boolean value, it should always be FALSE.
1790 - * @param string $name Key option name.
1791 - * @param mixed $value Key value.
1792 - * @param string $prefix prefix of key file name.
1793 - *
1794 - * @return array $return Decrypted Key value.
1795 - */
1796 - public function hook_update_key_value( $input_value, $name, $value = false, $prefix = 'ext_' ) {
1797 - return MainWP_Keys_Manager::instance()->update_key_value( $name, $value, $prefix );
1798 - }
1826 + return $info;
1827 + }
1799 1828
1829 + /**
1830 + * Method hook_get_api_url()
1831 + *
1832 + * Get MainWP API Url.
1833 + */
1834 + public function hook_get_api_url() {
1835 + return MainWP_Api_Manager::instance()->get_upgrade_url();
1836 + }
1800 1837
1801 - /**
1802 - * Method hook_delete_key_value().
1803 - *
1804 - * Handle delete key value.
1805 - *
1806 - * @param string $name Key option name.
1807 - *
1808 - * @return mixed Return Result.
1809 - */
1810 - public function hook_delete_key_value( $name ) {
1811 - return MainWP_Keys_Manager::instance()->update_key_value( $name, false ); // false: to delete.
1812 - }
1838 + /**
1839 + * Method hook_run_dashboard_action().
1840 + *
1841 + * Handle run dashboard action.
1842 + *
1843 + * @param bool $boolean Input bool value.
1844 + * @param string $action The action to run.
1845 + * @param bool $out_die The function die or return.
1846 + *
1847 + * @return mixed $return result.
1848 + */
1849 + public function hook_run_dashboard_action( $boolean, $action, $out_die = false ) {
1850 + unset( $boolean );
1851 + if ( ! isset( $action ) ) {
1852 + return false;
1853 + }
1813 1854
1814 - /**
1815 - * Method hook_encrypt_key_value().
1816 - *
1817 - * Handle get key value.
1818 - *
1819 - * @param bool $input_value Boolean value, it should always be FALSE.
1820 - * @param array $data Encrypted data.
1821 - * @param mixed $prefix prefix value.
1822 - * @param mixed $key_file Key file value.
1823 - *
1824 - * @return array $return Decrypted Key value.
1825 - */
1826 - public function hook_encrypt_key_value( $input_value, $data, $prefix = 'ext_', $key_file = false ) {
1827 - return MainWP_Keys_Manager::instance()->encrypt_keys_data( $data, $prefix, $key_file );
1828 - }
1855 + if ( 'master_api_key_check' === $action ) {
1856 + $return = $this->hook_master_api_key_check();
1857 + } else {
1858 + return false;
1859 + }
1829 1860
1830 - /**
1831 - * Method hook_decrypt_key_value().
1832 - *
1833 - * Handle get key value.
1834 - *
1835 - * @param bool $input_value Boolean value, it should always be FALSE.
1836 - * @param array $encrypted_data Encrypted data.
1837 - * @param mixed $default_value default value.
1838 - *
1839 - * @return array $return Decrypted Key value.
1840 - */
1841 - public function hook_decrypt_key_value( $input_value, $encrypted_data, $default_value = false ) {
1842 - return MainWP_Keys_Manager::instance()->decrypt_keys_data( $encrypted_data, $default_value );
1843 - }
1861 + if ( $out_die ) {
1862 + wp_send_json( $return );
1863 + }
1844 1864
1865 + return $return;
1866 + }
1845 1867
1846 - /**
1847 - * Method hook_delete_key_file().
1848 - *
1849 - * Handle delete key value.
1850 - *
1851 - * @param string $key_file Key file name.
1852 - *
1853 - * @return array $return Decrypted Key value.
1854 - */
1855 - public function hook_delete_key_file( $key_file ) {
1856 - return MainWP_Keys_Manager::instance()->delete_key_file( $key_file );
1857 - }
1858 1868
1859 - /**
1860 - * Method hook_get_lookup_items().
1861 - *
1862 - * @param bool $false_val false value.
1863 - * @param string $item_name item name.
1864 - * @param int $item_id item id.
1865 - * @param string $obj_name object name.
1866 - *
1867 - * @return array Lookup items.
1868 - */
1869 - public function hook_get_lookup_items( $false_val, $item_name, $item_id, $obj_name ) {
1870 - return MainWP_DB::instance()->get_lookup_items( $item_name, $item_id, $obj_name );
1871 - }
1872 1869
1873 - /**
1874 - * Method hook_insert_lookup_item().
1875 - *
1876 - * @param bool $false_val false value.
1877 - * @param string $item_name item name.
1878 - * @param int $item_id item id.
1879 - * @param string $obj_name object name.
1880 - * @param int $obj_id object id.
1881 - *
1882 - * @return array Lookup items.
1883 - */
1884 - public function hook_insert_lookup_item( $false_val, $item_name, $item_id, $obj_name, $obj_id ) {
1885 - return MainWP_DB::instance()->insert_lookup_item( $item_name, $item_id, $obj_name, $obj_id );
1886 - }
1870 + /**
1871 + * Method hook_master_api_key_check().
1872 + *
1873 + * Handle to valid MainWP API key.
1874 + *
1875 + * @return array $return Data.
1876 + */
1877 + public function hook_master_api_key_check() {
1878 + $api_key = MainWP_Api_Manager_Key::instance()->get_decrypt_master_api_key();
1879 + $return = array();
1880 + $error = '';
1881 + if ( ! empty( $api_key ) ) {
1882 + $result = array();
1883 + try {
1884 + $test = MainWP_Api_Manager::instance()->verify_mainwp_api( $api_key );
1885 + $result = json_decode( $test, true );
1886 + if ( is_array( $result ) ) {
1887 + if ( isset( $result['success'] ) && $result['success'] ) {
1888 + $return['success'] = true;
1889 + } elseif ( isset( $result['error'] ) ) {
1890 + $error = $result['error'];
1891 + }
1892 + }
1893 + } catch ( \Exception $e ) {
1894 + $error = $e->getMessage();
1895 + }
1896 + } else {
1897 + $error = esc_html__( 'MainWP API key are required.', 'mainwp' );
1898 + }
1887 1899
1888 - /**
1889 - * Method hook_delete_lookup_items().
1890 - *
1891 - * @param bool $false_val false value.
1892 - * @param string $by Delete by.
1893 - * @param array $params params.
1894 - *
1895 - * @return mixed results.
1896 - */
1897 - public function hook_delete_lookup_items( $false_val, $by = 'lookup_id', $params = array() ) {
1898 - return MainWP_DB::instance()->delete_lookup_items( $by, $params );
1899 - }
1900 + if ( ! empty( $error ) ) {
1901 + $return['error'] = $error;
1902 + }
1903 +
1904 + if ( ! isset( $return['success'] ) ) {
1905 + $return['success'] = false;
1906 + }
1907 +
1908 + return $return;
1909 + }
1910 +
1911 + /**
1912 + * Method hook_get_key_value().
1913 + *
1914 + * Handle get key value.
1915 + *
1916 + * @param bool $input_value Boolean value, it should always be FALSE.
1917 + * @param string $name Key option name.
1918 + * @param mixed $default_value default value.
1919 + *
1920 + * @return array $return Decrypted Key value.
1921 + */
1922 + public function hook_get_key_value( $input_value, $name, $default_value = false ) {
1923 + unset( $input_value );
1924 + return MainWP_Keys_Manager::instance()->get_keys_value( $name, $default_value );
1925 + }
1926 +
1927 + /**
1928 + * Method hook_update_key_value().
1929 + *
1930 + * Handle update key value.
1931 + *
1932 + * @param bool $input_value Boolean value, it should always be FALSE.
1933 + * @param string $name Key option name.
1934 + * @param mixed $value Key value.
1935 + * @param string $prefix prefix of key file name.
1936 + *
1937 + * @return array $return Decrypted Key value.
1938 + */
1939 + public function hook_update_key_value( $input_value, $name, $value = false, $prefix = 'ext_' ) {
1940 + unset( $input_value );
1941 + return MainWP_Keys_Manager::instance()->update_key_value( $name, $value, $prefix );
1942 + }
1943 +
1944 +
1945 + /**
1946 + * Method hook_delete_key_value().
1947 + *
1948 + * Handle delete key value.
1949 + *
1950 + * @param string $name Key option name.
1951 + *
1952 + * @return mixed Return Result.
1953 + */
1954 + public function hook_delete_key_value( $name ) {
1955 + return MainWP_Keys_Manager::instance()->update_key_value( $name, false ); // false: to delete.
1956 + }
1957 +
1958 + /**
1959 + * Method hook_encrypt_key_value().
1960 + *
1961 + * Handle get key value.
1962 + *
1963 + * @param bool $input_value Boolean value, it should always be FALSE.
1964 + * @param array $data Encrypted data.
1965 + * @param mixed $prefix prefix value.
1966 + * @param mixed $key_file Key file value.
1967 + *
1968 + * @return array $return Decrypted Key value.
1969 + */
1970 + public function hook_encrypt_key_value( $input_value, $data, $prefix = 'ext_', $key_file = false ) {
1971 + unset( $input_value );
1972 + return MainWP_Keys_Manager::instance()->encrypt_keys_data( $data, $prefix, $key_file );
1973 + }
1974 +
1975 + /**
1976 + * Method hook_decrypt_key_value().
1977 + *
1978 + * Handle get key value.
1979 + *
1980 + * @param bool $input_value Boolean value, it should always be FALSE.
1981 + * @param array $encrypted_data Encrypted data.
1982 + * @param mixed $default_value default value.
1983 + *
1984 + * @return array $return Decrypted Key value.
1985 + */
1986 + public function hook_decrypt_key_value( $input_value, $encrypted_data, $default_value = false ) {
1987 + unset( $input_value );
1988 + return MainWP_Keys_Manager::instance()->decrypt_keys_data( $encrypted_data, $default_value );
1989 + }
1990 +
1991 +
1992 + /**
1993 + * Method hook_delete_key_file().
1994 + *
1995 + * Handle delete key value.
1996 + *
1997 + * @param string $key_file Key file name.
1998 + *
1999 + * @return array $return Decrypted Key value.
2000 + */
2001 + public function hook_delete_key_file( $key_file ) {
2002 + return MainWP_Keys_Manager::instance()->delete_key_file( $key_file );
2003 + }
2004 +
2005 + /**
2006 + * Delete one exact key file and return only read-verified truth.
2007 + *
2008 + * @param mixed $input_value Filter-chain initial value.
2009 + * @param string $key_file Key file name.
2010 + *
2011 + * @return bool Whether exact absence was proved.
2012 + */
2013 + public function hook_delete_key_file_result( $input_value, $key_file ) {
2014 + unset( $input_value );
2015 + return MainWP_Keys_Manager::instance()->delete_key_file_with_result( $key_file );
2016 + }
2017 +
2018 + /**
2019 + * Method hook_get_lookup_items().
2020 + *
2021 + * @param bool $false_val false value.
2022 + * @param string $item_name item name.
2023 + * @param int $item_id item id.
2024 + * @param string $obj_name object name.
2025 + *
2026 + * @return array Lookup items.
2027 + */
2028 + public function hook_get_lookup_items( $false_val, $item_name, $item_id, $obj_name ) {
2029 + unset( $false_val );
2030 + return MainWP_DB::instance()->get_lookup_items( $item_name, $item_id, $obj_name );
2031 + }
2032 +
2033 + /**
2034 + * Method hook_insert_lookup_item().
2035 + *
2036 + * @param bool $false_val false value.
2037 + * @param string $item_name item name.
2038 + * @param int $item_id item id.
2039 + * @param string $obj_name object name.
2040 + * @param int $obj_id object id.
2041 + *
2042 + * @return array Lookup items.
2043 + */
2044 + public function hook_insert_lookup_item( $false_val, $item_name, $item_id, $obj_name, $obj_id ) {
2045 + unset( $false_val );
2046 + return MainWP_DB::instance()->insert_lookup_item( $item_name, $item_id, $obj_name, $obj_id );
2047 + }
2048 +
2049 + /**
2050 + * Method hook_delete_lookup_items().
2051 + *
2052 + * @param bool $false_val false value.
2053 + * @param string $by Delete by.
2054 + * @param array $params params.
2055 + *
2056 + * @return mixed results.
2057 + */
2058 + public function hook_delete_lookup_items( $false_val, $by = 'lookup_id', $params = array() ) {
2059 + unset( $false_val );
2060 + return MainWP_DB::instance()->delete_lookup_items( $by, $params );
2061 + }
2062 +
2063 + /**
2064 + * Method hook_get_indicator().
2065 + *
2066 + * @param bool $def_value default input value.
2067 + * @param bool $indi_type Indicator type.
2068 + * @param bool $wrapper_cls field wrapper class.
2069 + * @param bool $visible Current indicator status.
2070 + *
2071 + * @return mixed indicator results.
2072 + */
2073 + public function hook_get_indicator( $def_value, $indi_type = 'field', $wrapper_cls = '', $visible = true ) {
2074 + unset( $def_value );
2075 + return MainWP_Settings_Indicator::get_indicator( $indi_type, $wrapper_cls, $visible );
2076 + }
2077 +
2078 + /**
2079 + * Method hook_get_time_elapsed_string().
2080 + *
2081 + * Returns date in time ago format
2082 + *
2083 + * @param mixed $ptime Date stamp.
2084 + * @return string $string Time elapsed string.
2085 + */
2086 + public function hook_get_time_elapsed_string( $ptime = 0 ) {
2087 + return MainWP_Utility::time_elapsed_string( $ptime );
2088 + }
2089 +
2090 + /**
2091 + * Method hook_get_regular_process_by().
2092 + *
2093 + * @param mixed $input_value Input value.
2094 + * @param int $item_id Item id.
2095 + * @param int $pro_type Process type.
2096 + * @param int $pro_slug Process slug.
2097 + *
2098 + * @return mixed
2099 + */
2100 + public function hook_get_regular_process_by( $input_value, $item_id, $pro_type, $pro_slug ) {
2101 + unset( $input_value );
2102 + return MainWP_DB::instance()->get_regular_process_by_item_id_type_slug( $item_id, $pro_type, $pro_slug );
2103 + }
2104 +
2105 + /**
2106 + * Method hook_get_primary_backup_method.
2107 + *
2108 + * @param mixed $inpval Hook input value.
2109 + * @param int|false $siteid Optional Site ID; false for global method.
2110 + *
2111 + * @since 6.0.10.
2112 + *
2113 + * @return string Global or site primary backup method.
2114 + */
2115 + public function hook_get_primary_backup_method( $inpval, $siteid = false ) {
2116 + unset( $inpval );
2117 + $primaryBackup = get_option( 'mainwp_primaryBackup' );
2118 + if ( false !== $siteid ) {
2119 + $website = MainWP_DB::instance()->get_website_by_id( $siteid );
2120 + if ( is_object( $website ) && property_exists( $website, 'primary_backup_method' ) ) {
2121 + if ( '' === $website->primary_backup_method || 'global' === $website->primary_backup_method ) {
2122 + $backup_method = $primaryBackup;
2123 + } else {
2124 + $backup_method = $website->primary_backup_method;
2125 + }
2126 + return $backup_method;
2127 + }
2128 + }
2129 + return $primaryBackup;
2130 + }
1900 2131 }