PluginProbe
MainWP Dashboard: Self-hosted WordPress Management for Agencies / 5.2.2
MainWP Dashboard: Self-hosted WordPress Management for Agencies v5.2.2
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.2.2, at class/class-mainwp-hooks.php

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