site_health_disabled = get_option( 'mainwp_disableSitesHealthMonitoring', 1 ) ? true : false; // disabled by default. } /** * Get the default primary column name. * * @return string Child Site name. */ protected function get_default_primary_column_name() { return 'site_combo'; } /** * Method column_backup() * * Backup Column. * * @param mixed $item List of backups. * * @return mixed $backupnow_lnk. * * @uses \MainWP\Dashboard\MainWP_Backup_Handler::is_archive() * @uses \MainWP\Dashboard\MainWP_DB::instance()::get_website_option() * @uses \MainWP\Dashboard\MainWP_System_Utility::get_mainwp_specific_dir() * @uses \MainWP\Dashboard\MainWP_System_Utility::get_wp_file_system() * @uses \MainWP\Dashboard\MainWP_Utility::format_timestamp() * @uses \MainWP\Dashboard\MainWP_Utility::get_timestamp() */ public function column_backup( $item ) { // phpcs:ignore -- NOSONAR - complex. if ( null === $this->primary_backup ) { $this->primary_backup = MainWP_System_Utility::get_primary_backup(); } $backup_method = empty( $item['primary_backup_method'] ) || 'global' === $item['primary_backup_method'] ? $this->primary_backup : $item['primary_backup_method']; $lastBackup = MainWP_DB::instance()->get_website_option( $item, 'primary_lasttime_backup' ); /** * Filter: mainwp_managesites_getbackuplink * * Filters the link for the last backup item. * * @param int $item['id'] Child site ID. * @param string $lastBackup Last backup timestamp for the child site. * * @since Unknown */ $backupnow_lnk = apply_filters( 'mainwp_managesites_getbackuplink', '', $item['id'], $lastBackup, $backup_method ); if ( ! empty( $backupnow_lnk ) ) { return $backupnow_lnk; } $dir = MainWP_System_Utility::get_mainwp_specific_dir( $item['id'] ); $lastbackup = 0; $hasWPFileSystem = MainWP_System_Utility::get_wp_file_system(); /** * WordPress files system object. * * @global object */ global $wp_filesystem; if ( $hasWPFileSystem && $wp_filesystem->exists( $dir ) ) { $dh = opendir( $dir ); if ( $dh ) { while ( false !== ( $file = readdir( $dh ) ) ) { if ( '.' !== $file && '..' !== $file ) { $theFile = $dir . $file; if ( MainWP_Backup_Handler::is_archive( $file ) && ! MainWP_Backup_Handler::is_sql_archive( $file ) && $wp_filesystem->mtime( $theFile ) > $lastbackup ) { $lastbackup = $wp_filesystem->mtime( $theFile ); } } } closedir( $dh ); } } $output = ''; if ( 0 < $lastbackup ) { $output = MainWP_Utility::format_timestamp( MainWP_Utility::get_timestamp( $lastbackup ) ) . '
'; } else { $output = '
Never

'; } return $output; } /** * Method column_site_preview() * * Site preview column. * * @param mixed $item List of backups. * * @return mixed preview content. */ public function column_site_preview( $item ) { return ''; } /** * Set the column names. * * @param mixed $item MainWP Sitetable Item. * @param string $column_name Column name to use. * * @return string Column Name. */ public function column_default( $item, $column_name ) { // phpcs:ignore -- NOSONAR - complex function. Current complexity is the only way to achieve desired results, pull request solutions appreciated. /** * Filter is being replaced with mainwp_sitestable_item * * @deprecated */ $item = apply_filters_deprecated( 'mainwp-sitestable-item', array( $item, $item ), '4.0.7.2', 'mainwp_sitestable_item' ); // NOSONAR - not IP. /** * Filter: mainwp_sitestable_item * * Filters the Manage Sites table column items. Allows user to create new column item. * * @param array $item Array containing child site data. * * @since Unknown */ $item = apply_filters( 'mainwp_sitestable_item', $item, $column_name ); switch ( $column_name ) { case 'status': case 'favicon': case 'site_combo': case 'site': case 'login': case 'url': case 'tags': case 'update': case 'wpcore_update': case 'plugin_update': case 'theme_update': case 'backup': case 'security': case 'uptime': case 'last_sync': case 'last_post': case 'site_health': case 'status_code': case 'notes': case 'phpversion': case 'language': case 'index': case 'site_actions': return ''; default: return isset( $item[ $column_name ] ) ? $item[ $column_name ] : ''; } } /** * Get sortable columns. * * @return array $sortable_columns Array of sortable column names. */ public function get_sortable_columns() { $sortable_columns = array( 'site_combo' => array( 'site_combo', false ), 'site' => array( 'site', false ), 'url' => array( 'url', false ), 'tags' => array( 'tags', false ), 'client_name' => array( 'client_name', false ), 'security' => array( 'security', false ), 'last_sync' => array( 'last_sync', false ), 'last_post' => array( 'last_post', false ), 'site_health' => array( 'site_health', false ), 'status_code' => array( 'status_code', false ), 'notes' => array( 'notes', false ), 'phpversion' => array( 'phpversion', false ), 'update' => array( 'update', false ), 'added_datetime' => array( 'added_datetime', false ), 'backup' => array( 'backup', false ), ); if ( ! MainWP_Uptime_Monitoring_Edit::is_enable_global_monitoring() ) { unset( $sortable_columns['status_code'] ); } // disable this hook for sortable columns. // $sortable_columns = apply_filters( 'mainwp_sitestable_sortable_columns', $sortable_columns ); //. return $sortable_columns; } /** * Default Manage Sites table columns. * * Returns the array of default columns for the Manage Sites table. * * @return array Array of default columns names. */ public function get_default_columns() { $columns = array( 'cb' => '', 'status' => '', 'favicon' => '', 'site_combo' => esc_html__( 'Site', 'mainwp' ), 'site' => esc_html__( 'Site Title', 'mainwp' ), 'login' => '', 'url' => esc_html__( 'URL', 'mainwp' ), 'tags' => esc_html__( 'Tags', 'mainwp' ), 'update' => esc_html__( 'Updates', 'mainwp' ), 'wpcore_update' => '', // phpcs:ignore -- Prevent modify WP icon. 'plugin_update' => '', 'theme_update' => '', 'client_name' => esc_html__( 'Client', 'mainwp' ), 'security' => esc_html__( 'Security', 'mainwp' ), 'language' => esc_html__( 'Language', 'mainwp' ), 'index' => esc_html__( 'Indexable', 'mainwp' ), 'uptime' => esc_html__( 'Uptime', 'mainwp' ), 'last_sync' => esc_html__( 'Last Sync', 'mainwp' ), 'backup' => esc_html__( 'Backups', 'mainwp' ), 'phpversion' => esc_html__( 'PHP', 'mainwp' ), 'last_post' => esc_html__( 'Last Post', 'mainwp' ), 'site_health' => esc_html__( 'Health', 'mainwp' ), 'status_code' => esc_html__( 'HTTP Status', 'mainwp' ), 'added_datetime' => esc_html__( 'Connected', 'mainwp' ), 'site_preview' => '', 'notes' => esc_html__( 'Notes', 'mainwp' ), ); if ( ! MainWP_Uptime_Monitoring_Edit::is_enable_global_monitoring() ) { unset( $columns['status_code'] ); unset( $columns['uptime'] ); } if ( ! \mainwp_current_user_can( 'dashboard', 'manage_clients' ) ) { unset( $columns['client_name'] ); } if ( $this->site_health_disabled ) { unset( $columns['site_health'] ); } return $columns; } /** * Method get_columns() * * Combine all columns. * * @return array $columns Array of column names. */ public function get_columns() { $columns = $this->get_default_columns(); /** * Filter is being replaced with mainwp_sitestable_getcolumns * * @deprecated */ $columns = apply_filters_deprecated( 'mainwp-sitestable-getcolumns', array( $columns, $columns ), '4.0.7.2', 'mainwp_sitestable_getcolumns' ); // NOSONAR - not IP. /** * Filter: mainwp_sitestable_getcolumns * * Filters the Manage Sites table columns. Allows user to create a new column. * * @param array $columns Array containing table columns. * * @since Unknown */ $columns = apply_filters( 'mainwp_sitestable_getcolumns', $columns, $columns ); $columns['site_actions'] = ''; $disable_backup = false; $primaryBackup = get_option( 'mainwp_primaryBackup' ); $primary_methods = array(); $primary_methods = apply_filters_deprecated( 'mainwp-getprimarybackup-methods', array( $primary_methods ), '4.0.7.2', 'mainwp_getprimarybackup_methods' ); // NOSONAR - not IP. /** This filter is documented in ../pages/page-mainwp-server-information-handler.php */ $primaryBackupMethods = apply_filters( 'mainwp_getprimarybackup_methods', $primary_methods ); if ( empty( $primaryBackup ) ) { if ( ! get_option( 'mainwp_enableLegacyBackupFeature' ) ) { $disable_backup = true; } } elseif ( ! is_array( $primaryBackupMethods ) || empty( $primaryBackupMethods ) ) { $disable_backup = true; } if ( $disable_backup && isset( $columns['backup'] ) ) { unset( $columns['backup'] ); } return $columns; } /** * Instantiate Columns. * * @return array $init_cols */ public function get_columns_init() { $cols = $this->get_columns(); $init_cols = array(); foreach ( $cols as $key => $val ) { $init_cols[] = array( 'data' => esc_html( $key ) ); } return $init_cols; } /** * Get column defines. * * @return array $defines */ public function get_columns_defines() { $defines = array(); $defines[] = array( 'targets' => 'no-sort', 'orderable' => false, ); $defines[] = array( 'targets' => 'manage-cb-column', 'className' => 'check-column collapsing', ); $defines[] = array( 'targets' => 'manage-site-column', 'className' => 'column-site-bulk mainwp-site-cell collapsing', ); $defines[] = array( 'targets' => 'manage-url-column', 'className' => 'mainwp-url-cell collapsing', ); $defines[] = array( 'targets' => array( 'manage-last_sync-column', 'manage-last_post-column', 'manage-site_actions-column', 'extra-column' ), 'className' => 'collapsing', ); $defines[] = array( 'targets' => array( 'manage-status_code-column' ), 'className' => 'left aligned collapsing', ); $defines[] = array( 'targets' => array( 'manage-client_name-column' ), 'className' => 'left aligned', ); $defines[] = array( 'targets' => array( 'manage-security-column' ), 'className' => 'center aligned collapsing', ); $defines[] = array( 'targets' => array( 'manage-login-column', 'manage-wpcore_update-column', 'manage-plugin_update-column', 'manage-theme_update-column', 'manage-backup-column' ), 'className' => 'center aligned collapsing', ); $defines[] = array( 'targets' => 'manage-update-column', 'className' => 'cented aligned collapsing', ); $defines[] = array( 'targets' => 'manage-favicon-column', 'className' => 'collapsing', ); $defines[] = array( 'targets' => 'manage-atarim_tasks-column', 'className' => 'center aligned collapsing', ); $defines[] = array( 'targets' => array( 'manage-notes-column' ), 'className' => 'center aligned collapsing', ); $defines[] = array( 'targets' => array( 'manage-site_preview-column' ), 'className' => 'center aligned collapsing', ); $defines[] = array( 'targets' => array( 'manage-site_health-column' ), 'className' => 'center aligned collapsing', ); $defines[] = array( 'targets' => array( 'manage-phpversion-column', 'manage-status-column' ), 'className' => 'collapsing', ); $defines[] = array( 'targets' => array( 'manage-uptime-column' ), 'className' => 'right aligned collapsing', ); $defines[] = array( 'targets' => array( 'manage-language-column' ), 'className' => 'center aligned collapsing', ); $defines[] = array( 'targets' => array( 'manage-index-column' ), 'className' => 'center aligned collapsing', ); $defines[] = array( 'targets' => array( 'manage-site_actions-column' ), 'className' => 'collapsing not-selectable', ); return $defines; } /** * Method generate_tabletop() * * Run the render_manage_sites_table_top menthod. */ public function generate_tabletop() { $this->render_manage_sites_table_top(); } /** * Create Bulk Actions Drop Down. * * @return array $actions Available bulk actions. */ public function get_bulk_actions() { $actions = array( 'sync' => esc_html__( 'Sync Data', 'mainwp' ), 'reconnect' => esc_html__( 'Reconnect', 'mainwp' ), 'suspend' => esc_html__( 'Suspend', 'mainwp' ), 'unsuspend' => esc_html__( 'Unsuspend', 'mainwp' ), 'refresh_favico' => esc_html__( 'Reload Favicon', 'mainwp' ), 'delete' => esc_html__( 'Remove', 'mainwp' ), 'open_wpadmin' => esc_html__( 'Go to WP Admin', 'mainwp' ), 'open_frontpage' => esc_html__( 'Go to Site', 'mainwp' ), 'update_plugins' => esc_html__( 'Update Plugins', 'mainwp' ), 'update_themes' => esc_html__( 'Update Themes', 'mainwp' ), 'update_wpcore' => esc_html__( 'Update WordPress', 'mainwp' ), 'update_translations' => esc_html__( 'Update Translations', 'mainwp' ), 'update_everything' => esc_html__( 'Update Everything', 'mainwp' ), 'check_abandoned_plugin' => esc_html__( 'Check Abandoned Plugins', 'mainwp' ), 'check_abandoned_theme' => esc_html__( 'Check Abandoned Phemes', 'mainwp' ), ); /** * Filter: mainwp_managesites_bulk_actions * * Filters bulk actions on the Manage Sites page. Allows user to hook in new actions or remove default ones. * * @since Unknown */ return apply_filters( 'mainwp_managesites_bulk_actions', $actions ); } /** * Render Manage Sites Table Top. * * @uses \MainWP\Dashboard\MainWP_DB_Common::instance()::get_groups_for_manage_sites() */ public function render_manage_sites_table_top() { // phpcs:ignore -- NOSONAR - complexity. $items_bulk = $this->get_bulk_actions(); $filters_row_style = 'display:none'; // phpcs:disable WordPress.Security.NonceVerification,Missing,Missing,Missing,Missing,Missing,WordPress.Security.ValidatedSanitizedInput.InputNotSanitized $selected_status = isset( $_REQUEST['status'] ) ? sanitize_text_field( wp_unslash( $_REQUEST['status'] ) ) : ''; $selected_group = isset( $_REQUEST['g'] ) ? sanitize_text_field( wp_unslash( $_REQUEST['g'] ) ) : ''; $selected_group_logic = isset( $_REQUEST['group_logic'] ) ? sanitize_text_field( wp_unslash( $_REQUEST['group_logic'] ) ) : ''; $selected_client = isset( $_REQUEST['client'] ) ? sanitize_text_field( wp_unslash( $_REQUEST['client'] ) ) : ''; $is_not = isset( $_REQUEST['isnot'] ) && ( 'yes' === $_REQUEST['isnot'] ) ? true : false; $selected_one_time_siteids = isset( $_REQUEST['selected_sites'] ) ? sanitize_text_field( wp_unslash( $_REQUEST['selected_sites'] ) ) : ''; $reset_filter = isset( $_REQUEST['reset'] ) && ( 'yes' === $_REQUEST['reset'] ) ? true : false; // phpcs:enable WordPress.Security.NonceVerification,Missing,Missing,Missing,Missing,Missing,WordPress.Security.ValidatedSanitizedInput.InputNotSanitized if ( ! empty( $selected_one_time_siteids ) ) { MainWP_Utility::update_user_option( 'mainwp_managesites_filter_onetime_selected_siteids', $selected_one_time_siteids ); } if ( ! $reset_filter && empty( $selected_status ) && empty( $selected_group ) && empty( $selected_client ) && empty( $selected_one_time_siteids ) && '' === $selected_group_logic ) { $selected_status = get_user_option( 'mainwp_managesites_filter_status' ); $selected_group = get_user_option( 'mainwp_managesites_filter_group' ); $selected_client = get_user_option( 'mainwp_managesites_filter_client' ); $is_not = get_user_option( 'mainwp_managesites_filter_is_not' ); $selected_group_logic = get_user_option( 'mainwp_managesites_filter_group_logic' ); } $selected_group_logic = ( 'and' === $selected_group_logic ) ? 'and' : 'or'; $default_filter = true; if ( ! empty( $is_not ) || ( ! empty( $selected_status ) && 'all' !== $selected_status ) || ! empty( $selected_group ) || ! empty( $selected_client ) || 'and' === $selected_group_logic ) { $filters_row_style = 'display:flex'; $default_filter = false; } ?>
render_filters_segment(); ?>
', ' ' ); // NOSONAR - noopener - open safe. ?>
items ); } /** * Prepare the items to be listed. * * @param bool $optimize true|false Whether or not to optimize. * * @uses \MainWP\Dashboard\MainWP_DB_Common::instance()::get_user_extension() * @uses \MainWP\Dashboard\MainWP_DB::instance()::query() * @uses \MainWP\Dashboard\MainWP_DB::instance()::get_sql_search_websites_for_current_user() * @uses \MainWP\Dashboard\MainWP_DB::fetch_object() * @uses \MainWP\Dashboard\MainWP_DB::data_seek() * @uses \MainWP\Dashboard\MainWP_DB::num_rows() * @uses \MainWP\Dashboard\MainWP_DB::free_result() * @uses \MainWP\Dashboard\MainWP_Utility::update_option() */ public function prepare_items( $optimize = true ) { // phpcs:ignore -- NOSONAR -Current complexity is the only way to achieve desired results, pull request solutions appreciated. if ( null === $this->userExtension ) { $this->userExtension = MainWP_DB_Common::instance()->get_user_extension(); } $orderby = 'wp.name'; $req_orderby = null; $req_order = null; $extra_view = apply_filters( 'mainwp_sitestable_prepare_extra_view', array( 'favi_icon', 'health_site_status' ) ); $extra_view = array_unique( $extra_view ); if ( $optimize ) { // phpcs:disable WordPress.Security.NonceVerification,Missing,Missing,Missing,Missing,Missing,WordPress.Security.ValidatedSanitizedInput.InputNotSanitized if ( isset( $_REQUEST['order'] ) ) { $order_values = MainWP_Utility::instance()->get_table_orders( $_REQUEST ); $req_orderby = $order_values['orderby']; $req_order = $order_values['order']; } // phpcs:enable if ( isset( $req_orderby ) ) { if ( 'site' === $req_orderby ) { $orderby = 'wp.name ' . ( 'asc' === $req_order ? 'asc' : 'desc' ); } elseif ( 'site_combo' === $req_orderby ) { $orderby = 'wp.name ' . ( 'asc' === $req_order ? 'asc' : 'desc' ); } elseif ( 'url' === $req_orderby ) { $orderby = 'wp.url ' . ( 'asc' === $req_order ? 'asc' : 'desc' ); } elseif ( 'tags' === $req_orderby ) { $orderby = 'GROUP_CONCAT(gr.name ORDER BY gr.name SEPARATOR ",") ' . ( 'asc' === $req_order ? 'asc' : 'desc' ); } elseif ( 'update' === $req_orderby ) { $orderby = 'CASE true WHEN (offline_check_result = -1) THEN 2 WHEN (wp_sync.sync_errors IS NOT NULL) AND (wp_sync.sync_errors <> "") THEN 3 ELSE 4 + (CASE wp_upgrades WHEN "[]" THEN 0 ELSE 1 END) + (CASE plugin_upgrades WHEN "[]" THEN 0 ELSE LENGTH(plugin_upgrades) - LENGTH(REPLACE(plugin_upgrades, "\"Name\":", "\"Name\"")) END) + (CASE theme_upgrades WHEN "[]" THEN 0 ELSE LENGTH(theme_upgrades) - LENGTH(REPLACE(theme_upgrades, "\"Name\":", "\"Name\"")) END) END ' . ( 'asc' === $req_order ? 'asc' : 'desc' ); } elseif ( 'phpversion' === $req_orderby ) { $orderby = ' INET_ATON( SUBSTRING_INDEX( CONCAT( SUBSTRING_INDEX(wp_optionview.phpversion, "-", 1), ".0.0.0.0" ), ".", 4) ) ' . ( 'asc' === $req_order ? 'asc' : 'desc' ); } elseif ( 'status' === $req_orderby ) { $orderby = 'CASE true WHEN (offline_check_result = -1) THEN 2 WHEN (wp_sync.sync_errors IS NOT NULL) AND (wp_sync.sync_errors <> "") THEN 3 ELSE 4 + (CASE plugin_upgrades WHEN "[]" THEN 0 ELSE LENGTH(plugin_upgrades) - LENGTH(REPLACE(plugin_upgrades, "\"Name\":", "\"Name\"")) END) + (CASE theme_upgrades WHEN "[]" THEN 0 ELSE LENGTH(theme_upgrades) - LENGTH(REPLACE(theme_upgrades, "\"Name\":", "\"Name\"")) END) + (CASE wp_upgrades WHEN "[]" THEN 0 ELSE 1 END) END ' . ( 'asc' === $req_order ? 'asc' : 'desc' ); } elseif ( 'last_post' === $req_orderby ) { $orderby = 'wp_sync.last_post_gmt ' . ( 'asc' === $req_order ? 'asc' : 'desc' ); } elseif ( 'status_code' === $req_orderby ) { $orderby = 'wp.http_response_code ' . ( 'asc' === $req_order ? 'asc' : 'desc' ); } elseif ( 'added_datetime' === $req_orderby ) { $orderby = 'wp_optionview.added_timestamp ' . ( 'asc' === $req_order ? 'asc' : 'desc' ); } elseif ( 'site_health' === $req_orderby ) { $orderby = 'wp_sync.health_value ' . ( 'asc' === $req_order ? 'asc' : 'desc' ); } elseif ( 'client_name' === $req_orderby ) { $orderby = 'client_name ' . ( 'asc' === $req_order ? 'asc' : 'desc' ); } elseif ( 'last_sync' === $req_orderby ) { $orderby = 'wp_sync.dtsSync ' . ( 'asc' === $req_order ? 'asc' : 'desc' ); } elseif ( 'security' === $req_orderby ) { $orderby = 'wp.securityIssues ' . ( 'asc' === $req_order ? 'asc' : 'desc' ); } elseif ( 'backup' === $req_orderby ) { $orderby = 'wp_optionview.primary_lasttime_backup ' . ( 'asc' === $req_order ? 'asc' : 'desc' ); if ( ! in_array( 'primary_lasttime_backup', $extra_view ) ) { $extra_view[] = 'primary_lasttime_backup'; } } } } // phpcs:disable WordPress.Security.NonceVerification,Missing,Missing,Missing,Missing,Missing,WordPress.Security.ValidatedSanitizedInput.InputNotSanitized if ( ! $optimize ) { $perPage = 9999; $start = 0; } else { $perPage = isset( $_REQUEST['length'] ) ? intval( $_REQUEST['length'] ) : 25; if ( -1 === (int) $perPage ) { $perPage = 9999; } $start = isset( $_REQUEST['start'] ) ? intval( $_REQUEST['start'] ) : 0; } $reset_filter = isset( $_REQUEST['reset'] ) && ( 'yes' === $_REQUEST['reset'] ) ? true : false; $search = isset( $_REQUEST['search']['value'] ) ? sanitize_text_field( wp_unslash( $_REQUEST['search']['value'] ) ) : ''; $request_group_logic = isset( $_REQUEST['group_logic'] ) ? sanitize_text_field( wp_unslash( $_REQUEST['group_logic'] ) ) : ''; $request_group_logic = in_array( $request_group_logic, array('and', 'or') ) ? $request_group_logic : ''; $get_saved_state = empty( $search ) && ! isset( $_REQUEST['g'] ) && ! isset( $_REQUEST['status'] ) && ! isset( $_REQUEST['client'] ) && 'and' !== $request_group_logic; $get_all = ( '' === $search ) && ( isset( $_REQUEST['status'] ) && 'all' === $_REQUEST['status'] ) && empty( $_REQUEST['g'] ) && empty( $_REQUEST['client'] ) && 'and' !== $request_group_logic ? true : false; $is_not = ( isset( $_REQUEST['isnot'] ) && 'yes' === $_REQUEST['isnot'] ) ? true : false; if ( $reset_filter ) { $get_all = false; $get_saved_state = false; } $selected_one_time_siteids = get_user_option( 'mainwp_managesites_filter_onetime_selected_siteids' ); if ( ! empty( $selected_one_time_siteids ) ) { $userid = get_current_user_id(); if ( ! empty( $userid ) ) { delete_user_option( $userid, 'mainwp_managesites_filter_onetime_selected_siteids' ); $get_all = true; } else { $selected_one_time_siteids = ''; } } $group_ids = false; $client_ids = false; $site_status = ''; $group_logic = 'or'; if ( ! isset( $_REQUEST['status'] ) ) { if ( $get_saved_state ) { $site_status = get_user_option( 'mainwp_managesites_filter_status' ); } else { MainWP_Utility::update_user_option( 'mainwp_managesites_filter_status', '' ); } } else { MainWP_Utility::update_user_option( 'mainwp_managesites_filter_status', sanitize_text_field( wp_unslash( $_REQUEST['status'] ) ) ); MainWP_Utility::update_user_option( 'mainwp_managesites_filter_is_not', $is_not ); $site_status = sanitize_text_field( wp_unslash( $_REQUEST['status'] ) ); } if ( $get_all && ! $selected_one_time_siteids ) { MainWP_Utility::update_user_option( 'mainwp_managesites_filter_group', '' ); MainWP_Utility::update_user_option( 'mainwp_managesites_filter_client', '' ); MainWP_Utility::update_user_option( 'mainwp_managesites_filter_group_logic', 'or' ); } if ( ! $get_all ) { if ( ! isset( $_REQUEST['g'] ) ) { if ( $get_saved_state ) { $group_ids = get_user_option( 'mainwp_managesites_filter_group' ); } else { MainWP_Utility::update_user_option( 'mainwp_managesites_filter_group', '' ); } } else { MainWP_Utility::update_user_option( 'mainwp_managesites_filter_group', sanitize_text_field( wp_unslash( $_REQUEST['g'] ) ) ); $group_ids = sanitize_text_field( wp_unslash( $_REQUEST['g'] ) ); // may be multi groups. } if ( '' === $request_group_logic ) { if ( $get_saved_state ) { $group_logic = get_user_option( 'mainwp_managesites_filter_group_logic' ); } else { MainWP_Utility::update_user_option( 'mainwp_managesites_filter_group_logic', 'or' ); } } else { $group_logic = ( 'and' === $request_group_logic ) ? 'and' : 'or'; MainWP_Utility::update_user_option( 'mainwp_managesites_filter_group_logic', $group_logic ); } if ( ! isset( $_REQUEST['client'] ) ) { if ( $get_saved_state ) { $client_ids = get_user_option( 'mainwp_managesites_filter_client' ); } else { MainWP_Utility::update_user_option( 'mainwp_managesites_filter_client', '' ); } } else { MainWP_Utility::update_user_option( 'mainwp_managesites_filter_client', sanitize_text_field( wp_unslash( $_REQUEST['client'] ) ) ); $client_ids = sanitize_text_field( wp_unslash( $_REQUEST['client'] ) ); // may be multi groups. } } $group_logic = ( 'and' === $group_logic ) ? 'and' : 'or'; // phpcs:enable $where = null; if ( '' !== $site_status && 'all' !== $site_status ) { if ( 'connected' === $site_status ) { $where = 'wp_sync.sync_errors = ""'; if ( $is_not ) { $where = 'wp_sync.sync_errors != ""'; } } elseif ( 'disconnected' === $site_status ) { $where = 'wp_sync.sync_errors != ""'; if ( $is_not ) { $where = 'wp_sync.sync_errors = ""'; } } elseif ( 'update' === $site_status ) { $available_update_ids = MainWP_Common_Functions::instance()->get_available_update_siteids(); if ( empty( $available_update_ids ) ) { $where = 'wp.id = -1'; // so get empty results. if ( $is_not ) { $where = 'wp.id != -1'; // so query with all sites. } } else { $where = 'wp.id IN (' . implode( ',', $available_update_ids ) . ') '; if ( $is_not ) { $where = 'wp.id NOT IN (' . implode( ',', $available_update_ids ) . ') '; } } } elseif ( 'sitehealthnotgood' === $site_status ) { $where = ' wp_sync.health_status = 1 '; if ( $is_not ) { $where = 'wp_sync.health_status = 0'; } } elseif ( 'phpver7' === $site_status ) { $where = MainWP_DB_Common::instance()->get_sql_version_compare( 'wp_optionview.phpversion', '<', '7.0.0.0' ); // NOSONAR - no IP. if ( $is_not ) { $where = MainWP_DB_Common::instance()->get_sql_version_compare( 'wp_optionview.phpversion', '>=', '7.0.0.0' ); // NOSONAR - no IP. } } elseif ( 'phpver8' === $site_status ) { $where = MainWP_DB_Common::instance()->get_sql_version_compare( 'wp_optionview.phpversion', '<', '8.0.0.0' ); // NOSONAR - no IP. if ( $is_not ) { $where = MainWP_DB_Common::instance()->get_sql_version_compare( 'wp_optionview.phpversion', '>=', '8.0.0.0' ); // NOSONAR - no IP. } } elseif ( 'suspended' === $site_status ) { $where = 'wp.suspended = 1'; // query for suspended sites. if ( $is_not ) { $where = 'wp.suspended = 0'; // query for not suspended sites. } } } $total_params = array( 'count_only' => true ); if ( $get_all ) { $params = array( 'selectgroups' => true, 'orderby' => $orderby, 'offset' => $start, 'rowcount' => $perPage, ); } else { $total_params['search'] = $search; $params = array( 'selectgroups' => true, 'orderby' => $orderby, 'offset' => $start, 'rowcount' => $perPage, 'search' => $search, ); $total_params['isnot'] = $is_not; $params['isnot'] = $is_not; $qry_group_ids = array(); if ( ! empty( $group_ids ) ) { $group_ids = explode( ',', $group_ids ); // convert to array. // to fix query deleted groups. $groups = MainWP_DB_Common::instance()->get_groups_for_manage_sites(); foreach ( $groups as $gr ) { if ( in_array( $gr->id, $group_ids ) ) { $qry_group_ids[] = $gr->id; } } // to fix. if ( in_array( 'nogroups', $group_ids ) ) { $qry_group_ids[] = 'nogroups'; } } if ( ! empty( $qry_group_ids ) ) { $total_params['group_id'] = $qry_group_ids; $params['group_id'] = $qry_group_ids; } $qry_client_ids = array(); if ( ! empty( $client_ids ) ) { $client_ids = explode( ',', $client_ids ); // convert to array. // to fix query deleted client. $clients = MainWP_DB_Client::instance()->get_wp_client_by( 'all' ); foreach ( $clients as $cl ) { if ( in_array( $cl->client_id, $client_ids ) ) { $qry_client_ids[] = $cl->client_id; } } // to fix. if ( in_array( 'noclients', $client_ids ) ) { $qry_client_ids[] = 'noclients'; } } if ( ! empty( $qry_client_ids ) ) { $total_params['client_id'] = $qry_client_ids; $params['client_id'] = $qry_client_ids; } if ( ! empty( $where ) ) { $total_params['extra_where'] = $where; $params['extra_where'] = $where; } } $total_params['group_logic'] = $group_logic; $params['group_logic'] = $group_logic; if ( empty( $selected_one_time_siteids ) ) { $selected_one_time_siteids = isset( $_REQUEST['selected_sites'] ) ? sanitize_text_field( wp_unslash( $_REQUEST['selected_sites'] ) ) : ''; //phpcs:ignore WordPress.Security.NonceVerification.Recommended } if ( ! empty( $selected_one_time_siteids ) ) { $selected_siteids = explode( ',', $selected_one_time_siteids ); $selected_siteids = MainWP_Utility::array_numeric_filter( $selected_siteids ); if ( ! empty( $selected_siteids ) ) { $params['selected_sites'] = $selected_siteids; } } $total_websites = MainWP_DB::instance()->query( MainWP_DB::instance()->get_sql_search_websites_for_current_user( $total_params ) ); $totalRecords = ( $total_websites ? MainWP_DB::num_rows( $total_websites ) : 0 ); if ( $total_websites ) { MainWP_DB::free_result( $total_websites ); } $params['extra_view'] = $extra_view; $params['view'] = 'manage_site'; $params['dev_log_query'] = 0; $websites = MainWP_DB::instance()->query( MainWP_DB::instance()->get_sql_search_websites_for_current_user( $params ) ); $site_ids = array(); while ( $websites && ( $site = MainWP_DB::fetch_object( $websites ) ) ) { $site_ids[] = $site->id; } /** * Action is being replaced with mainwp_sitestable_prepared_items * * @deprecated */ do_action_deprecated( 'mainwp-sitestable-prepared-items', array( $websites, $site_ids ), '4.0.7.2', 'mainwp_sitestable_prepared_items' ); // NOSONAR - not IP. /** * Action: mainwp_sitestable_prepared_items * * Fires before the Sites table itemes are prepared. * * @param object $websites Object containing child sites data. * @param array $site_ids Array containing IDs of all child sites. * * @since Unknown */ do_action( 'mainwp_sitestable_prepared_items', $websites, $site_ids ); MainWP_DB::data_seek( $websites, 0 ); $this->items = $websites; $this->total_items = $totalRecords; } /** * Display the table. * * @param bool $optimize true|false Whether or not to optimize. */ public function display( $optimize = true ) { // phpcs:ignore Generic.Classes.OpeningBraceSameLine.ContentAfterBrace -- NOSONAR - complexity. $sites_per_page = get_option( 'mainwp_default_sites_per_page', 25 ); $sites_per_page = intval( $sites_per_page ); $pages_length = array( 25 => '25', 10 => '10', 50 => '50', 100 => '100', 300 => '300', ); $pages_length = $pages_length + array( $sites_per_page => $sites_per_page ); ksort( $pages_length ); if ( isset( $pages_length[-1] ) ) { unset( $pages_length[-1] ); } $pagelength_val = implode( ',', array_keys( $pages_length ) ); $pagelength_title = implode( ',', array_values( $pages_length ) ); /** * Action: mainwp_before_manage_sites_table * * Fires before the Manage Sites table. * * @since 4.1 */ do_action( 'mainwp_before_manage_sites_table' ); ?>
' ); ?>
print_column_headers( $optimize, true ); ?>display_rows_or_placeholder(); ?>
get_websites_count( null, true ); ?> 'true', 'paging' => 'true', 'pagingType' => 'full_numbers', 'info' => 'true', 'colReorder' => ' {columns:":not(.check-column):not(.manage-site_actions-column)"} ', 'stateSave' => 'true', 'stateDuration' => '0', 'order' => '[]', 'scrollX' => 'true', 'responsive' => 'true', 'fixedColumns' => '', ); /** * Filter: mainwp_sites_table_features * * Filter the Monitoring table features. * * @since 4.1 */ $table_features = apply_filters( 'mainwp_sites_table_features', $table_features ); ?> has_items() ) { $this->display_rows(); } } /** * Get the column count. * * @return int Column Count. */ public function get_column_count() { list ( $columns ) = $this->get_column_info(); return count( $columns ); } /** * Echo the column headers. * * @param bool $optimize true|false Whether or not to optimise. * @param bool $top true|false. */ public function print_column_headers( $optimize, $top = true ) { // phpcs:ignore -- NOSONAR - complex. list( $columns, $sortable ) = $this->get_column_info(); if ( ! empty( $columns['cb'] ) ) { $columns['cb'] = '
'; } $def_columns = $this->get_default_columns(); $def_columns['site_actions'] = ''; foreach ( $columns as $column_key => $column_display_name ) { $class = array( 'manage-' . $column_key . '-column' ); $attr = ''; if ( ! isset( $def_columns[ $column_key ] ) ) { $class[] = 'extra-column'; if ( $optimize ) { $attr = 'cell-cls="' . esc_html( "collapsing $column_key column-$column_key" ) . '"'; } } if ( 'cb' === $column_key ) { $class[] = 'check-column'; $class[] = 'collapsing'; } if ( ! isset( $sortable[ $column_key ] ) ) { $class[] = 'no-sort'; } $tag = 'th'; $id = "id='$column_key'"; if ( ! empty( $class ) ) { $class = "class='" . join( ' ', $class ) . "'"; } echo "<$tag $id $class $attr>$column_display_name"; // phpcs:ignore WordPress.Security.EscapeOutput } } /** * Get column info. */ protected function get_column_info() { if ( isset( $this->column_headers ) && is_array( $this->column_headers ) ) { $column_headers = array( array(), array(), array(), $this->get_default_primary_column_name() ); foreach ( $this->column_headers as $key => $value ) { $column_headers[ $key ] = $value; } return $column_headers; } $columns = $this->get_columns(); $sortable_columns = $this->get_sortable_columns(); $_sortable = $sortable_columns; $sortable = array(); foreach ( $_sortable as $id => $data ) { if ( empty( $data ) ) { continue; } $data = (array) $data; if ( ! isset( $data[1] ) ) { $data[1] = false; } $sortable[ $id ] = $data; } $primary = $this->get_default_primary_column_name(); $this->column_headers = array( $columns, $sortable, $primary ); return $this->column_headers; } /** * Clear Items. * * @uses \MainWP\Dashboard\MainWP_DB::is_result() * @uses \MainWP\Dashboard\MainWP_DB::free_result() */ public function clear_items() { if ( MainWP_DB::is_result( $this->items ) ) { MainWP_DB::free_result( $this->items ); } } /** * Get table rows. * * Optimize for shared hosting or big networks. * * @return array Rows html. * * @uses \MainWP\Dashboard\MainWP_Connect::get_favico_url() * @uses \MainWP\Dashboard\MainWP_DB::instance()::get_website_options_array() * @uses \MainWP\Dashboard\MainWP_Utility::get_http_codes() * @uses \MainWP\Dashboard\MainWP_Utility::sanitize_file_name() * @uses \MainWP\Dashboard\MainWP_Utility::get_site_health() * @uses \MainWP\Dashboard\MainWP_Utility::esc_content() * @uses \MainWP\Dashboard\MainWP_Utility::format_timestamp() * @uses \MainWP\Dashboard\MainWP_Utility::get_timestamp() */ public function ajax_get_datatable_rows() { // phpcs:ignore -- NOSONAR - complex function. Current complexity is the only way to achieve desired results, pull request solutions appreciated. $all_rows = array(); $info_rows = array(); $use_favi = get_option( 'mainwp_use_favicon', 1 ); $http_error_codes = MainWP_Utility::get_http_codes(); $userExtension = MainWP_DB_Common::instance()->get_user_extension(); $decodedIgnoredCores = ! empty( $userExtension->ignored_wp_upgrades ) ? json_decode( $userExtension->ignored_wp_upgrades, true ) : array(); if ( ! is_array( $decodedIgnoredCores ) ) { $decodedIgnoredCores = array(); } $last24_time = MainWP_Uptime_Monitoring_Handle::get_hourly_key_by_timestamp( time() - DAY_IN_SECONDS ); if ( $this->items ) { foreach ( $this->items as $website ) { $rw_classes = $this->get_groups_classes( $website ); $hasSyncErrors = ( '' !== $website['sync_errors'] ); $suspendedSite = ( '0' !== $website['suspended'] ); $rw_classes = trim( $rw_classes ); $rw_classes = 'child-site mainwp-child-site-' . intval( $website['id'] ) . ' ' . ( $hasSyncErrors ? 'error' : '' ) . ' ' . ( $suspendedSite ? 'suspended' : '' ) . ' ' . $rw_classes; $info_item = array( 'rowClass' => esc_html( $rw_classes ), 'siteID' => $website['id'], 'siteUrl' => $website['url'], 'syncError' => ( '' !== $website['sync_errors'] ? true : false ), ); $total_wp_upgrades = 0; $total_plugin_upgrades = 0; $total_theme_upgrades = 0; $total_ignored_updates = 0; $site_options = MainWP_DB::instance()->get_website_options_array( $website, array( 'wp_upgrades', 'ignored_wp_upgrades', 'premium_upgrades', 'primary_lasttime_backup' ) ); $wp_upgrades = isset( $site_options['wp_upgrades'] ) ? json_decode( $site_options['wp_upgrades'], true ) : array(); $ignored_core_upgrades = isset( $site_options['ignored_wp_upgrades'] ) ? json_decode( $site_options['ignored_wp_upgrades'], true ) : array(); if ( $website['is_ignoreCoreUpdates'] || MainWP_Common_Functions::instance()->is_ignored_updates( $wp_upgrades, $ignored_core_upgrades, 'core', $total_ignored_updates ) || MainWP_Common_Functions::instance()->is_ignored_updates( $wp_upgrades, $decodedIgnoredCores, 'core', $total_ignored_updates ) ) { $wp_upgrades = array(); } if ( is_array( $wp_upgrades ) && ! empty( $wp_upgrades ) ) { ++$total_wp_upgrades; } $plugin_upgrades = json_decode( $website['plugin_upgrades'], true ); if ( $website['is_ignorePluginUpdates'] ) { $plugin_upgrades = array(); } $theme_upgrades = json_decode( $website['theme_upgrades'], true ); if ( $website['is_ignoreThemeUpdates'] ) { $theme_upgrades = array(); } $decodedPremiumUpgrades = isset( $site_options['premium_upgrades'] ) ? json_decode( $site_options['premium_upgrades'], true ) : array(); if ( is_array( $decodedPremiumUpgrades ) ) { foreach ( $decodedPremiumUpgrades as $crrSlug => $premiumUpgrade ) { $premiumUpgrade['premium'] = true; if ( 'plugin' === $premiumUpgrade['type'] ) { if ( ! is_array( $plugin_upgrades ) ) { $plugin_upgrades = array(); } if ( ! $website['is_ignorePluginUpdates'] ) { $plugin_upgrades[ $crrSlug ] = $premiumUpgrade; } } elseif ( 'theme' === $premiumUpgrade['type'] ) { if ( ! is_array( $theme_upgrades ) ) { $theme_upgrades = array(); } if ( ! $website['is_ignoreThemeUpdates'] ) { $theme_upgrades[ $crrSlug ] = $premiumUpgrade; } } } } if ( is_array( $plugin_upgrades ) ) { $ignored_plugins = json_decode( $website['ignored_plugins'], true ); if ( is_array( $ignored_plugins ) ) { $plugin_upgrades = MainWP_Common_Functions::instance()->get_not_ignored_updates_themesplugins( $plugin_upgrades, $ignored_plugins, $total_ignored_updates ); } $ignored_plugins = json_decode( $this->userExtension->ignored_plugins, true ); if ( is_array( $ignored_plugins ) ) { $plugin_upgrades = MainWP_Common_Functions::instance()->get_not_ignored_updates_themesplugins( $plugin_upgrades, $ignored_plugins, $total_ignored_updates ); } $total_plugin_upgrades += count( $plugin_upgrades ); } if ( is_array( $theme_upgrades ) ) { $ignored_themes = json_decode( $website['ignored_themes'], true ); if ( is_array( $ignored_themes ) ) { $theme_upgrades = MainWP_Common_Functions::instance()->get_not_ignored_updates_themesplugins( $theme_upgrades, $ignored_themes, $total_ignored_updates ); } $ignored_themes = json_decode( $this->userExtension->ignored_themes, true ); if ( is_array( $ignored_themes ) ) { $theme_upgrades = MainWP_Common_Functions::instance()->get_not_ignored_updates_themesplugins( $theme_upgrades, $ignored_themes, $total_ignored_updates ); } $total_theme_upgrades += count( $theme_upgrades ); } $total_updates = $total_wp_upgrades + $total_plugin_upgrades + $total_theme_upgrades; $health_status = isset( $website['health_site_status'] ) ? json_decode( $website['health_site_status'], true ) : array(); $hstatus = MainWP_Utility::get_site_health( $health_status ); $hval = $hstatus['val']; $critical = $hstatus['critical']; if ( 80 <= $hval && empty( $critical ) ) { $site_health = ''; // phpcs:ignore WordPress.PHP.DiscouragedPHPFunctions -- base64_encode used for http encoding compatible. } else { $site_health = ''; // phpcs:ignore WordPress.PHP.DiscouragedPHPFunctions -- base64_encode used for http encoding compatible. } $note = html_entity_decode( $website['note'] ); $esc_note = MainWP_Utility::esc_content( $note ); $strip_note = wp_strip_all_tags( $esc_note ); $columns = $this->get_columns(); $cols_data = array(); $website = apply_filters( 'mainwp_sitestable_website', $website, $this->userExtension ); $site_icon = ''; if ( $use_favi ) { $siteObj = (object) $website; $favi_url = MainWP_Connect::get_favico_url( $siteObj ); $site_icon = MainWP_Manage_Sites::get_instance()->get_site_icon_display( $website['cust_site_icon_info'], $favi_url ); } $client_image = ''; if ( $website['client_id'] > 0 ) { $client = MainWP_DB_Client::instance()->get_wp_client_by( 'client_id', $website['client_id'], true ); $client_image = MainWP_Client_Handler::get_client_avatar( $client ); } else { $client_image = ''; } $website_info = MainWP_DB::instance()->get_website_option( $website, 'site_info' ); $website_info = ! empty( $website_info ) ? json_decode( $website_info, true ) : array(); foreach ( $columns as $column_name => $column_display_name ) { $column_content = apply_filters( 'mainwp_sitestable_display_row_columns', false, $column_name, $website ); if ( false !== $column_content ) { $cols_data[ $column_name ] = $column_content; continue; } ob_start(); ?>
get_uptime_monitor_stat_hourly_by( $website['monitor_id'], 'last24', $last24_time ); MainWP_Monitoring_Sites_List_Table::instance()->render_last24_uptime_status( $uptime_status, $last24_time ); ?> ' . MainWP_Utility::time_elapsed_string( $website['dtsSync'] ) . '' : ''; // phpcs:ignore WordPress.Security.EscapeOutput ?> ' . MainWP_Utility::time_elapsed_string( $website['last_post_gmt'] ) . '' : ''; // phpcs:ignore WordPress.Security.EscapeOutput ?> site_health_disabled && 'site_health' === $column_name ) { ?>
' . esc_html( $http_error_codes[ $code ] ) . '
'; } ?> ' . esc_html( substr( $website['phpversion'], 0, 6 ) ) : ''; ?> ' . MainWP_Utility::time_elapsed_string( $website['added_timestamp'] ) . '' : ''; // phpcs:ignore WordPress.Security.EscapeOutput ?> column_default( $website, $column_name ); // phpcs:ignore WordPress.Security.EscapeOutput } $cols_data[ $column_name ] = ob_get_clean(); } $all_rows[] = $cols_data; $info_rows[] = $info_item; } } return array( 'data' => $all_rows, 'recordsTotal' => $this->total_items, 'recordsFiltered' => $this->total_items, 'rowsInfo' => $info_rows, ); } /** * Get groups classes row. * * @param array $item Array containing child site data. * @return mixed Single Row Classes Item. */ public function get_groups_classes( $item ) { $rw_classes = ''; if ( isset( $item['wpgroupids'] ) && ! empty( $item['wpgroupids'] ) ) { $group_class = $item['wpgroupids']; $group_class = explode( ',', $group_class ); if ( is_array( $group_class ) ) { foreach ( $group_class as $_class ) { $_class = trim( $_class ); $_class = 'group-' . MainWP_Utility::sanitize_file_name( $_class ); $rw_classes .= ' ' . strtolower( $_class ); } } else { $_class = MainWP_Utility::sanitize_file_name( $group_class ); $rw_classes .= ' group-' . strtolower( $_class ); } } return $rw_classes; } /** * Fetch single row item. * * @return mixed Single Row Item. * * @uses \MainWP\Dashboard\MainWP_DB::is_result() * @uses \MainWP\Dashboard\MainWP_DB::fetch_array() */ public function display_rows() { if ( MainWP_DB::is_result( $this->items ) ) { while ( $this->items && ( $item = MainWP_DB::fetch_array( $this->items ) ) ) { $this->single_row( $item ); } } } /** * Single Row. * * @param mixed $website Child Site. * * @uses \MainWP\Dashboard\MainWP_Utility::sanitize_file_name() */ public function single_row( $website ) { $classes = $this->get_groups_classes( $website ); $hasSyncErrors = ( '' !== $website['sync_errors'] ); $suspendedSite = ( '0' !== $website['suspended'] ); $classes = trim( $classes ); $classes = ' class="child-site mainwp-child-site-' . intval( $website['id'] ) . ' ' . ( $hasSyncErrors ? 'error' : '' ) . ' ' . ( $suspendedSite ? 'suspended' : '' ) . ' ' . $classes . '"'; echo ''; $this->single_row_columns( $website ); echo ''; } /** * Columns for a single row. * * @param mixed $website Child Site. * @param bool $good_health Good site health info. * * @uses \MainWP\Dashboard\MainWP_Connect::get_favico_url() * @uses \MainWP\Dashboard\MainWP_DB::instance()::get_website_options_array() * @uses \MainWP\Dashboard\MainWP_Utility::get_site_health() * @uses \MainWP\Dashboard\MainWP_Utility::esc_content() * @uses \MainWP\Dashboard\MainWP_Utility::get_http_codes() * @uses \MainWP\Dashboard\MainWP_Utility::format_timestamp() * @uses \MainWP\Dashboard\MainWP_Utility::get_timestamp() */ protected function single_row_columns( $website, $good_health = false ) { // phpcs:ignore -- NOSONAR - complex function. Current complexity is the only way to achieve desired results, pull request solutions appreciated. $total_wp_upgrades = 0; $total_plugin_upgrades = 0; $total_theme_upgrades = 0; $total_ignored_updates = 0; $userExtension = MainWP_DB_Common::instance()->get_user_extension(); $decodedIgnoredCores = ! empty( $userExtension->ignored_wp_upgrades ) ? json_decode( $userExtension->ignored_wp_upgrades, true ) : array(); if ( ! is_array( $decodedIgnoredCores ) ) { $decodedIgnoredCores = array(); } $site_options = MainWP_DB::instance()->get_website_options_array( $website, array( 'wp_upgrades', 'ignored_wp_upgrades', 'premium_upgrades', 'primary_lasttime_backup' ) ); $wp_upgrades = isset( $site_options['wp_upgrades'] ) ? json_decode( $site_options['wp_upgrades'], true ) : array(); $ignored_core_upgrades = isset( $site_options['ignored_wp_upgrades'] ) ? json_decode( $site_options['ignored_wp_upgrades'], true ) : array(); if ( $website['is_ignoreCoreUpdates'] || MainWP_Common_Functions::instance()->is_ignored_updates( $wp_upgrades, $ignored_core_upgrades, 'core', $total_ignored_updates ) || MainWP_Common_Functions::instance()->is_ignored_updates( $wp_upgrades, $decodedIgnoredCores, 'core', $total_ignored_updates ) ) { $wp_upgrades = array(); } if ( is_array( $wp_upgrades ) && ! empty( $wp_upgrades ) ) { ++$total_wp_upgrades; } $plugin_upgrades = json_decode( $website['plugin_upgrades'], true ); if ( $website['is_ignorePluginUpdates'] ) { $plugin_upgrades = array(); } $theme_upgrades = json_decode( $website['theme_upgrades'], true ); if ( $website['is_ignoreThemeUpdates'] ) { $theme_upgrades = array(); } $decodedPremiumUpgrades = isset( $site_options['premium_upgrades'] ) ? json_decode( $site_options['premium_upgrades'], true ) : array(); if ( is_array( $decodedPremiumUpgrades ) ) { foreach ( $decodedPremiumUpgrades as $crrSlug => $premiumUpgrade ) { $premiumUpgrade['premium'] = true; if ( 'plugin' === $premiumUpgrade['type'] ) { if ( ! is_array( $plugin_upgrades ) ) { $plugin_upgrades = array(); } if ( ! $website['is_ignorePluginUpdates'] ) { $plugin_upgrades[ $crrSlug ] = $premiumUpgrade; } } elseif ( 'theme' === $premiumUpgrade['type'] ) { if ( ! is_array( $theme_upgrades ) ) { $theme_upgrades = array(); } if ( ! $website['is_ignoreThemeUpdates'] ) { $theme_upgrades[ $crrSlug ] = $premiumUpgrade; } } } } if ( is_array( $plugin_upgrades ) ) { $ignored_plugins = json_decode( $website['ignored_plugins'], true ); if ( is_array( $ignored_plugins ) ) { $plugin_upgrades = MainWP_Common_Functions::instance()->get_not_ignored_updates_themesplugins( $plugin_upgrades, $ignored_plugins, $total_ignored_updates ); } $ignored_plugins = json_decode( $this->userExtension->ignored_plugins, true ); if ( is_array( $ignored_plugins ) ) { $plugin_upgrades = MainWP_Common_Functions::instance()->get_not_ignored_updates_themesplugins( $plugin_upgrades, $ignored_plugins, $total_ignored_updates ); } $total_plugin_upgrades += count( $plugin_upgrades ); } if ( is_array( $theme_upgrades ) ) { $ignored_themes = json_decode( $website['ignored_themes'], true ); if ( is_array( $ignored_themes ) ) { $theme_upgrades = MainWP_Common_Functions::instance()->get_not_ignored_updates_themesplugins( $theme_upgrades, $ignored_themes, $total_ignored_updates ); } $ignored_themes = json_decode( $this->userExtension->ignored_themes, true ); if ( is_array( $ignored_themes ) ) { $theme_upgrades = MainWP_Common_Functions::instance()->get_not_ignored_updates_themesplugins( $theme_upgrades, $ignored_themes, $total_ignored_updates ); } $total_theme_upgrades += count( $theme_upgrades ); } $total_updates = $total_wp_upgrades + $total_plugin_upgrades + $total_theme_upgrades; if ( 5 < $total_updates ) { $a_color = 'red'; } elseif ( 0 < $total_updates && 5 >= $total_updates ) { $a_color = 'yellow'; } else { $a_color = 'green'; } if ( 5 < $total_wp_upgrades ) { $w_color = 'red'; } elseif ( 0 < $total_wp_upgrades && 5 >= $total_wp_upgrades ) { $w_color = 'yellow'; } else { $w_color = 'green'; } if ( 5 < $total_plugin_upgrades ) { $p_color = 'red'; } elseif ( 0 < $total_plugin_upgrades && 5 >= $total_plugin_upgrades ) { $p_color = 'yellow'; } else { $p_color = 'green'; } if ( 5 < $total_theme_upgrades ) { $t_color = 'red'; } elseif ( 0 < $total_theme_upgrades && 5 >= $total_theme_upgrades ) { $t_color = 'yellow'; } else { $t_color = 'green'; } $hasSyncErrors = ( '' !== $website['sync_errors'] ); $suspendedSite = ( '0' !== $website['suspended'] ); if ( $hasSyncErrors ) { $a_color = ''; $w_color = ''; $p_color = ''; $t_color = ''; } $health_status = isset( $website['health_site_status'] ) ? json_decode( $website['health_site_status'], true ) : array(); $hstatus = MainWP_Utility::get_site_health( $health_status ); $hval = $hstatus['val']; $critical = $hstatus['critical']; if ( 80 <= $hval && empty( $critical ) ) { $h_color = 'green'; $h_text = esc_html__( 'Good', 'mainwp' ); } else { $h_color = 'orange'; $h_text = esc_html__( 'Should be improved', 'mainwp' ); } if ( $hasSyncErrors ) { $h_color = ''; $h_color = ''; } $note = html_entity_decode( $website['note'] ); $esc_note = MainWP_Utility::esc_content( $note ); $strip_note = wp_strip_all_tags( $esc_note ); list( $columns ) = $this->get_column_info(); $use_favi = get_option( 'mainwp_use_favicon', 1 ); $http_error_codes = MainWP_Utility::get_http_codes(); $website = apply_filters( 'mainwp_sitestable_website', $website, $this->userExtension ); $imgfavi = ''; if ( $use_favi ) { $siteObj = (object) $website; $favi_url = MainWP_Connect::get_favico_url( $siteObj ); if ( ! empty( $favi_url ) ) { $imgfavi = ''; } else { $imgfavi = ' '; // phpcs:ignore -- Prevent modify WP icon. } } foreach ( $columns as $column_name => $column_display_name ) { $classes = "collapsing center aligned $column_name column-$column_name"; $attributes = "class='$classes'"; $rendered_custom_column = apply_filters( 'mainwp_sitestable_render_column', false, $column_name, $website, $classes ); if ( $rendered_custom_column ) { continue; } ?>
' : ''; ?> "; // phpcs:ignore WordPress.Security.EscapeOutput echo call_user_func( array( $this, 'column_' . $column_name ), $website ); // phpcs:ignore WordPress.Security.EscapeOutput echo ''; } else { echo ""; // phpcs:ignore WordPress.Security.EscapeOutput echo $this->column_default( $website, $column_name ); // phpcs:ignore WordPress.Security.EscapeOutput echo ''; } } } }