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

class-mainwp-hooks.php in MainWP Dashboard: Self-hosted WordPress Management for Agencies 5.0.3, at class/class-mainwp-hooks.php

1,901 lines 58.1 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 /**
3 * MainWP Hooks
4 *
5 * @package MainWP/Dashboard
6 */
7
8 namespace MainWP\Dashboard;
9
10 // phpcs:disable Generic.Metrics.CyclomaticComplexity -- complexity.
11
12 /**
13 * Class MainWP_Hooks
14 *
15 * @package MainWP\Dashboard
16 */
17 class MainWP_Hooks {
18
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 );
45
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' ) );
48
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.
60
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.
73
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 );
80
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 );
88
89 add_filter( 'mainwp_getwebsitesbygroupids', array( &$this, 'hook_get_websites_by_group_ids' ), 10, 2 );
90
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 );
96
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 );
103
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.
113
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 );
124
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 );
127
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 );
133
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 );
141
142 // Sync website.
143 add_filter( 'mainwp_sync_website', array( &$this, 'hook_sync_website' ), 10, 3 );
144
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 );
148
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 );
168
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 );
177
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 );
186
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 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 );
201
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 }
206
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 }
219
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 }
232
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 }
245
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 }
263
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 }
276
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 }
287
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();
308
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 );
316
317 if ( '' !== $error ) {
318 return array( 'error' => $error );
319 }
320 $ret['response'] = $message;
321 $ret['siteid'] = $site_id;
322 }
323 }
324
325 return $ret;
326 }
327
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 }
349
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 ) {
364
365 if ( empty( $site_id ) ) {
366 return false;
367 }
368
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 );
372
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();
377
378 /**
379 * WordPress files system object.
380 *
381 * @global object
382 */
383 global $wp_filesystem;
384
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 }
394
395 MainWP_DB::instance()->remove_website( $site->id );
396
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 }
401
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 }
422
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 }
440
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 }
467
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 }
490
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 }
504
505
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 }
523
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 }
531
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 }
534
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 }
547
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
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 }
569
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 }
581
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 }
593
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 }
628
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 }
639
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 }
654
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 }
670
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 }
681
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 }
699
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 = '' ) {
712
713 if ( empty( $options ) ) {
714 return $boolean;
715 }
716
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 }
724
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 }
747
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 }
762
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() ) {
774
775 if ( empty( $website_id ) ) {
776 return false;
777 }
778
779 $website = MainWP_DB::instance()->get_website_by_id( $website_id, $selectGroups, $extra_view );
780
781 if ( ! empty( $website ) && property_exists( $website, 'privkey' ) ) {
782 unset( $website->privkey );
783 }
784
785 return $website;
786 }
787
788
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 }
801
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
819 $dbwebsites = array();
820
821 $data = MainWP_System_Utility::get_default_map_site_fields();
822 $data[] = 'verify_certificate';
823
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 }
834
835 $default_data = array(
836 'post_type' => 'post',
837 'status' => 'publish',
838 'maxRecords' => 10,
839 );
840
841 $post_data = array_merge( $default_data, $post_data );
842
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
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 ) {
872
873 if ( function_exists( 'mainwp_current_user_have_right' ) ) {
874 return mainwp_current_user_have_right( $can_type, $which );
875 }
876
877 return $input;
878 }
879
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() ) {
896
897 if ( false === $fields || is_string( $response ) ) {
898 return MainWP_Utility::esc_content( $response );
899 }
900
901 if ( ! is_array( $fields ) ) {
902 return $response;
903 }
904
905 if ( ! in_array( 'error', $fields ) ) {
906 $fields[] = 'error'; // to sure to valid 'error' field, if that existed.
907 }
908
909 if ( ! in_array( 'message', $fields ) ) {
910 $fields[] = 'message'; // to sure to valid 'message' field, if that existed.
911 }
912
913 $depth = 10;
914
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 }
922
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 }
940
941
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 }
956
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 }
970
971
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 }
986
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' );
989
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 }
995
996
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 }
1018
1019
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 }
1031
1032
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
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 }
1060
1061
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 }
1075
1076
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 }
1089
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 }
1109
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 }
1126
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 }
1140
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
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 }
1175
1176
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 }
1189
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
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 }
1218
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 }
1229
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
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 }
1258
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
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 }
1282
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 }
1294
1295 /**
1296 * Method upgrade_wp()
1297 *
1298 * Hook to upgrade WP.
1299 */
1300 public function upgrade_wp() {
1301
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 }
1305
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 }
1321
1322 die();
1323 }
1324
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
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 }
1349
1350 $website = MainWP_DB::instance()->get_website_by_id( $websiteId );
1351
1352 if ( MainWP_System_Utility::is_suspended_site( $website ) ) {
1353 $error = esc_html__( 'Suspended site.', 'mainwp' );
1354 $erCode = 'SUSPENDED_SITE';
1355 }
1356
1357 if ( ! empty( $error ) ) {
1358 wp_send_json(
1359 array(
1360 'error' => $error,
1361 'errorCode' => $erCode,
1362 )
1363 );
1364 }
1365
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 );
1376
1377 $information = MainWP_Connect::fetch_url_authed(
1378 $website,
1379 'upgradeplugintheme',
1380 array(
1381 'type' => $type,
1382 'list' => urldecode( implode( ',', $slugs ) ),
1383 )
1384 );
1385
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 );
1394
1395 if ( isset( $information['sync'] ) ) {
1396 unset( $information['sync'] );
1397 }
1398
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 }
1405
1406 die();
1407 }
1408
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 }
1422
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 }
1434
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 }
1451
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 }
1465
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 }
1482
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 );
1495
1496 if ( false === $client_tokens ) {
1497 return $input_value;
1498 }
1499
1500 return $client_tokens;
1501 }
1502
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 }
1516
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 }
1530
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 }
1544
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 }
1556
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 }
1579
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 }
1594
1595
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 }
1614
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 }
1623
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 }
1632
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 }
1641
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 }
1657
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 );
1668
1669 $info = array();
1670
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 }
1683
1684 return $info;
1685 }
1686
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 }
1695
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 ) {
1708
1709 if ( ! isset( $action ) ) {
1710 return false;
1711 }
1712
1713 if ( 'master_api_key_check' === $action ) {
1714 $return = $this->hook_master_api_key_check();
1715 } else {
1716 return false;
1717 }
1718
1719 if ( $out_die ) {
1720 wp_send_json( $return );
1721 }
1722
1723 return $return;
1724 }
1725
1726
1727
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 }
1757
1758 if ( ! empty( $error ) ) {
1759 $return['error'] = $error;
1760 }
1761
1762 if ( ! isset( $return['success'] ) ) {
1763 $return['success'] = false;
1764 }
1765
1766 return $return;
1767 }
1768
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 }
1783
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 }
1799
1800
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 }
1813
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 }
1829
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 }
1844
1845
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
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
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 }
1887
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 }
1901