global_settings ) { $this->global_settings = MainWP_Uptime_Monitoring_Handle::get_global_monitoring_settings(); } $this->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'; } /** * Set the column names. * * @param mixed $item MainWP site table 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: mainwp_monitoring_sitestable_item * * Filters the Monitoring Sites table column items. Allows user to create new column item. * * @param array $item Array containing child site data. * * @since 4.1 */ $item = apply_filters( 'mainwp_monitoring_sitestable_item', $item, $item ); switch ( $column_name ) { case 'status': case 'favicon': case 'site': case 'login': case 'url': case 'status_code': case 'last_check': case 'site_health': case 'preview': case 'last24_status': 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() { return array( 'site' => array( 'site', false ), 'url' => array( 'url', false ), 'status_code' => array( 'status_code', false ), 'last_check' => array( 'last_check', false ), 'site_health' => array( 'site_health', false ), 'client_name' => array( 'client_name', false ), 'type' => array( 'type', false ), 'interval' => array( 'interval', false ), ); } /** * Get default columns. * * @return array Array of default column names. */ public function get_default_columns() { $columns = array( 'cb' => '', 'status' => esc_html__( 'Status', 'mainwp' ), 'site' => esc_html__( 'Monitor', 'mainwp' ), 'type' => esc_html__( 'Monitor Type', 'mainwp' ), 'interval' => esc_html__( 'Check Frequency', 'mainwp' ), 'status_code' => esc_html__( 'Status code', 'mainwp' ), 'site_health' => esc_html__( 'Site Health', 'mainwp' ), 'last24_status' => esc_html__( 'Last 24h Status', 'mainwp' ), 'last_check' => esc_html__( 'Last Check', 'mainwp' ), ); if ( $this->site_health_disabled ) { unset( $columns['site_health'] ); } return $columns; } /** * Method get_columns() * * Combine all columns. * * @param bool $sub_rows sub rows. * * @return array $columns Array of column names. */ public function get_columns( $sub_rows = false ) { $columns = $this->get_default_columns( $sub_rows ); if ( ! $sub_rows ) { /** * Filter: mainwp_monitoring_sitestable_getcolumns * * Filters the Monitoring Sites table columns. Allows user to create a new column. * * @param array $columns Array containing table columns. * * @since 4.1 */ $columns = apply_filters( 'mainwp_monitoring_sitestable_getcolumns', $columns, $columns ); } $columns['site_actions'] = ''; 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 Array of 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', ); $defines[] = array( 'targets' => 'manage-url-column', 'className' => 'mainwp-url-cell', ); $defines[] = array( 'targets' => array( 'manage-login-column', 'manage-last_check-column', 'manage-last24_status-column', 'manage-status_code-column', 'manage-site_actions-column', 'extra-column', 'manage-client_name-column' ), 'className' => 'collapsing', ); $defines[] = array( 'targets' => array( 'manage-status_code-column' ), 'className' => 'center aligned collapsing', ); $defines[] = array( 'targets' => 'manage-site_actions-column', 'className' => 'parent-site-actions-column', ); $defines[] = array( 'targets' => array( 'manage-last24_status-column' ), 'className' => 'dt-right', ); $defines[] = array( 'targets' => array( 'manage-type-column' ), 'className' => 'collapsing', ); $defines[] = array( 'targets' => array( 'manage-interval-column' ), 'className' => 'collapsing', ); $defines[] = array( 'targets' => array( 'manage-status-column' ), 'className' => 'collapsing center aligned', ); 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 Return actions through the mainwp_monitoringsites_bulk_actions filter. */ public function get_bulk_actions() { $actions = array( 'checknow' => esc_html__( 'Check Now', 'mainwp' ), 'sync' => esc_html__( 'Sync Data', 'mainwp' ), ); /** * Filter: mainwp_monitoringsites_bulk_actions * * Filters bulk actions on the Monitoring Sites page. Allows user to hook in new actions or remove default ones. * * @since 4.1 */ return apply_filters( 'mainwp_monitoringsites_bulk_actions', $actions ); } /** * Render manage sites table top. * * @uses \MainWP\Dashboard\MainWP_DB_Common::get_groups_for_manage_sites() */ public function render_manage_sites_table_top() { $items_bulk = $this->get_bulk_actions(); // phpcs:disable WordPress.Security.NonceVerification,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_client = isset( $_REQUEST['client'] ) ? sanitize_text_field( wp_unslash( $_REQUEST['client'] ) ) : ''; // phpcs:enable if ( empty( $selected_status ) && empty( $selected_group ) && empty( $selected_client ) ) { $selected_status = get_option( 'mainwp_monitoringsites_filter_status' ); $selected_group = get_option( 'mainwp_monitoringsites_filter_group' ); $selected_client = get_option( 'mainwp_monitoringsites_filter_client' ); } ?>
get_table_orders( $_REQUEST ); $req_orderby = $order_values['orderby']; $req_order = $order_values['order']; } if ( isset( $req_orderby ) ) { if ( 'site' === $req_orderby ) { $orderby = 'wp.name ' . ( 'asc' === $req_order ? 'asc' : 'desc' ); } elseif ( 'url' === $req_orderby ) { $orderby = 'wp.url ' . ( 'asc' === $req_order ? 'asc' : 'desc' ); } elseif ( 'status' === $req_orderby ) { $orderby = 'CASE true WHEN (offline_check_result = 1) THEN 1 WHEN (offline_check_result <> 1) THEN 2 END ' . ( 'asc' === $req_order ? 'asc' : 'desc' ); } elseif ( 'status_code' === $req_orderby ) { $orderby = 'wp.http_response_code ' . ( 'asc' === $req_order ? 'asc' : 'desc' ); } elseif ( 'last_check' === $req_orderby ) { $orderby = 'wp.offline_checks_last ' . ( '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 ( 'type' === $req_orderby ) { $orderby = ' mo.type ' . ( 'asc' === $req_order ? 'asc' : 'desc' ); } elseif ( 'interval' === $req_orderby ) { $orderby = ' mo.interval ' . ( 'asc' === $req_order ? 'asc' : 'desc' ); } } } 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; } $search = isset( $_REQUEST['search']['value'] ) ? sanitize_text_field( wp_unslash( $_REQUEST['search']['value'] ) ) : ''; $get_saved_state = empty( $search ) && ! isset( $_REQUEST['g'] ) && ! isset( $_REQUEST['status'] ) && ! isset( $_REQUEST['client'] ); $get_all = ( '' === $search ) && ( isset( $_REQUEST['status'] ) && 'all' === $_REQUEST['status'] ) && ( isset( $_REQUEST['g'] ) && -1 === (int) $_REQUEST['g'] ) && empty( $_REQUEST['client'] ) ? true : false; $group_ids = false; $client_ids = false; $site_status = ''; if ( ! isset( $_REQUEST['status'] ) ) { if ( $get_saved_state ) { $site_status = get_option( 'mainwp_monitoringsites_filter_status' ); } else { MainWP_Utility::update_option( 'mainwp_monitoringsites_filter_status', '' ); } } else { $site_status = sanitize_text_field( wp_unslash( $_REQUEST['status'] ) ); MainWP_Utility::update_option( 'mainwp_monitoringsites_filter_status', $site_status ); } if ( $get_all ) { MainWP_Utility::update_user_option( 'mainwp_monitoringsites_filter_group', '' ); MainWP_Utility::update_user_option( 'mainwp_monitoringsites_filter_client', '' ); } if ( ! $get_all ) { if ( ! isset( $_REQUEST['g'] ) ) { if ( $get_saved_state ) { $group_ids = get_option( 'mainwp_monitoringsites_filter_group' ); } else { MainWP_Utility::update_option( 'mainwp_monitoringsites_filter_group', '' ); } } else { MainWP_Utility::update_option( 'mainwp_monitoringsites_filter_group', sanitize_text_field( wp_unslash( $_REQUEST['g'] ) ) ); $group_ids = sanitize_text_field( wp_unslash( $_REQUEST['g'] ) ); // may be multi groups. } if ( ! isset( $_REQUEST['client'] ) ) { if ( $get_saved_state ) { $client_ids = get_user_option( 'mainwp_monitoringsites_filter_client' ); } else { MainWP_Utility::update_user_option( 'mainwp_monitoringsites_filter_client', '' ); } } else { MainWP_Utility::update_user_option( 'mainwp_monitoringsites_filter_client', sanitize_text_field( wp_unslash( $_REQUEST['client'] ) ) ); $client_ids = sanitize_text_field( wp_unslash( $_REQUEST['client'] ) ); // may be multi groups. } } // phpcs:enable $where = null; if ( '' !== $site_status && 'all' !== $site_status ) { if ( 'online' === $site_status ) { $where .= ' wp.offline_check_result = 1'; } elseif ( 'undefined' === $site_status ) { $where .= ' wp.http_response_code = ""'; } elseif ( 'offline' === $site_status ) { $where .= ' wp.offline_check_result <> "" AND wp.offline_check_result <> 1'; // 1 - online, -1 offline. } } $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, ); $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' ); if ( $clients ) { foreach ( $clients as $client ) { if ( in_array( $client->client_id, $client_ids ) ) { $qry_client_ids[] = $client->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; } } $params['view'] = 'monitor_view'; $total_params['view'] = 'monitor_view'; $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 ); } $extra_view = apply_filters( 'mainwp_monitoring_sitestable_prepare_extra_view', array( 'favi_icon', 'health_site_status' ) ); $extra_view = array_unique( $extra_view ); $params['extra_view'] = $extra_view; $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: mainwp_monitoring_sitestable_prepared_items * * Fires before the Monitoring 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 4.1 */ do_action( 'mainwp_monitoring_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 ) { $sites_per_page = get_option( 'mainwp_default_monitoring_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 ) ); ?>


', ' ' ); // NOSONAR - noopener - open safe. ?>
print_column_headers( $optimize, true ); ?> display_rows_or_placeholder(); ?> print_column_headers( $optimize, false ); ?>
get_websites_count( null, true ); $table_features = array( 'searching' => 'true', 'paging' => 'true', 'pagingType' => 'full_numbers', 'info' => 'true', 'colReorder' => '{columns:":not(.check-column):not(:last-child)"}', 'stateSave' => 'true', 'stateDuration' => '0', 'order' => '[]', 'scrollX' => 'true', 'responsive' => 'true', ); /** * Filter: mainwp_monitoring_table_features * * Filter the Monitoring table features. * * @since 4.1 */ $table_features = apply_filters( 'mainwp_monitoring_table_features', $table_features ); ?> get_column_info( $sub_rows ); if ( ! empty( $columns['cb'] ) ) { if ( $sub_rows ) { $columns['cb'] = '
'; } else { $columns['cb'] = '
'; } } $def_columns = $this->get_default_columns( $sub_rows ); $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 no-sort collapsing dt-orderable-none'; } if ( 'status' === $column_key ) { $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. * * @param bool $sub_rows sub rows. * @return mixed */ protected function get_column_info( $sub_rows = false ) { 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( $sub_rows ); $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; } /** * Single row. * * @param mixed $monitor_subpage Object containing the site info. * * @uses \MainWP\Dashboard\MainWP_Utility::sanitize_file_name() */ public function single_row( $monitor_subpage ) { $classes = $this->get_groups_classes( $monitor_subpage ); $classes = trim( $classes ); $classes = ' class="child-site mainwp-child-site-' . intval( $monitor_subpage['wpid'] ) . ' ' . esc_html( $classes ) . '"'; $check_url = empty( $monitor_subpage['issub'] ) ? $monitor_subpage['url'] : $monitor_subpage['url'] . $monitor_subpage['suburl']; echo ''; //phpcs:ignore -- NOSONAR - safe. $this->single_row_columns( $monitor_subpage ); echo ''; } /** * Columns for a single row. * * @param object $website Object containing the site info. * @param array $good_health Deprecated. * * @uses \MainWP\Dashboard\MainWP_Connect::get_favico_url() * @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. unset( $good_health ); // compatible params, unuse. $monitor_subpage = $website; list( $columns ) = $this->get_column_info(); $glo_active = 0; if ( isset( $this->global_settings['active'] ) ) { $glo_active = 1 === (int) $this->global_settings['active'] ? 1 : 0; } $last24_time = MainWP_Uptime_Monitoring_Handle::get_hourly_key_by_timestamp( time() - DAY_IN_SECONDS ); $uptime_status = MainWP_DB_Uptime_Monitoring::instance()->get_uptime_monitor_stat_hourly_by( $monitor_subpage['monitor_id'], 'last24', $last24_time ); $disabled = ( ! $glo_active && ( -1 === (int) $monitor_subpage['active'] ) ) || 0 === (int) $monitor_subpage['active'] ? true : false; foreach ( $columns as $column_name => $column_display_name ) { $classes = "collapsing center aligned $column_name column-$column_name"; $attributes = "class='$classes'"; ?>
render_uptime_status( $monitor_subpage['last_status'], false, $disabled ); ?> column_site( $monitor_subpage ); ?> column_last_check( $monitor_subpage, true ); } ?> global_settings, 'useglobal', 'http' ); $this->column_type( $mo_type ); } ?> global_settings, -1, 60 ); echo ' ' . ( -1 === (int) $mo_interval ? esc_html__( 'Use global setting', 'mainwp' ) : intval( $mo_interval ) . esc_html__( ' minutes', 'mainwp' ) ); } ?> render_last24_uptime_status( $uptime_status, $last24_time ); } ?> "; // phpcs:ignore WordPress.Security.EscapeOutput echo $this->column_default( $monitor_subpage, $column_name ); // phpcs:ignore WordPress.Security.EscapeOutput echo ''; // phpcs:ignore WordPress.Security.EscapeOutput } } } /** * Get table rows. * * Optimize for shared hosting or big networks. * * @return array Table rows HTML. * * @uses \MainWP\Dashboard\MainWP_Connect::get_favico_url() * @uses \MainWP\Dashboard\MainWP_Utility::get_http_codes() * @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(); $child_rows = array(); if ( $this->items ) { $glo_active = 0; if ( isset( $this->global_settings['active'] ) ) { $glo_active = 1 === (int) $this->global_settings['active'] ? 1 : 0; } foreach ( $this->items as $website ) { $rw_classes = 'child-site mainwp-child-site-' . intval( $website['id'] ) . ' '; $health_status = ! empty( $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']; $good_health = false; if ( 80 <= $hval && empty( $critical ) ) { $good_health = true; } if ( $good_health ) { $h_color = 'green'; $h_text = esc_html__( 'Good', 'mainwp' ); } else { $h_color = 'orange'; $h_text = esc_html__( 'Should be improved', 'mainwp' ); } $check_url = ! $website['issub'] ? $website['url'] : $website['url'] . $website['suburl']; $info_item = array( 'rowClass' => esc_html( $rw_classes ), 'siteID' => $website['id'], 'siteUrl' => $website['url'], 'syncError' => ( '' !== $website['sync_errors'] ? true : false ), 'monitorID' => $website['monitor_id'], 'niceurl' => MainWP_Utility::get_nice_url( $check_url ), 'urlpage' => $check_url, ); $columns = $this->get_columns(); $cols_data = array(); $last24_time = MainWP_Uptime_Monitoring_Handle::get_hourly_key_by_timestamp( time() - DAY_IN_SECONDS ); $uptime_status = MainWP_DB_Uptime_Monitoring::instance()->get_uptime_monitor_stat_hourly_by( $website['monitor_id'], 'last24', $last24_time ); $disabled = ( ! $glo_active && ( -1 === (int) $website['active'] ) ) || 0 === (int) $website['active'] ? true : false; foreach ( $columns as $column_name => $column_display_name ) { ob_start(); ?>
render_uptime_status( false, $website['offline_check_result'], $disabled ); ?> column_site( $website ); elseif ( 'type' === $column_name ) : if ( ! $disabled ) { $mo_type = MainWP_Uptime_Monitoring_Connect::get_apply_setting( 'type', $website['type'], $this->global_settings, 'useglobal', 'http' ); $this->column_type( $mo_type ); } ?> global_settings, -1, 60 ); echo ' ' . ( -1 === (int) $mo_interval ? esc_html__( 'Use global setting', 'mainwp' ) : intval( $mo_interval ) . esc_html__( ' minutes', 'mainwp' ) ); } ?> render_last24_uptime_status( $uptime_status, $last24_time ); } ?> column_last_check( $website ); } ?> column_default( $website, $column_name ); // phpcs:ignore WordPress.Security.EscapeOutput ?> get_monitor_sub_pages( array( 'wpid' => $website['id'] ) ); $child_rows[] = ! empty( $sub_pages ) ? $this->get_monitors_table_child_rows( $website['id'], $sub_pages ) : ''; } } return array( 'data' => $all_rows, 'recordsTotal' => $this->total_items, 'recordsFiltered' => $this->total_items, 'rowsInfo' => $info_rows, 'childRows' => $child_rows, ); } /** * Method column_site. * * @param mixed $website website. * * @return void */ public function column_site( $website ) { ?>

' . esc_html( $mo_type_text ) . ''; } /** * Method column_last_check * * @param mixed $monitor monitor. * @param bool $sub_page sub page. * * @return void */ public function column_last_check( $monitor, $sub_page = false ) { if ( $sub_page ) { $last_time = $monitor['lasttime_check']; } else { $last_time = $monitor['offline_checks_last']; } if ( ! empty( $last_time ) ) { echo '' . esc_html( MainWP_Utility::time_elapsed_string( $last_time ) ) . ''; } else { echo esc_html__( 'Not checked yet.', 'mainwp' ); } } /** * Renders uptime status. * * @param int $uptime_status uptime status. * @param int $compatible_offline uptime status. * @param bool $mo_disabled Disabled monitor or not. * * @return void */ public function render_uptime_status( $uptime_status = false, $compatible_offline = false, $mo_disabled = false ) { if ( $mo_disabled ) { echo ''; return; } if ( false !== $compatible_offline ) { $uptime_status = 99; // pendding. if ( -1 === (int) $compatible_offline ) { $uptime_status = 0; // to compatible value 'offline_check_result' with 'last_status'. } elseif ( 1 === (int) $compatible_offline ) { $uptime_status = 1; } } if ( 1 === (int) $uptime_status ) { echo ''; } elseif ( 0 === (int) $uptime_status ) { echo ''; } else { echo ''; } } /** * Render last24 uptime status. * * @param array $data data. * @param int $last24_starttime last24 start time. * @return void */ public function render_last24_uptime_status( $data, $last24_starttime ) { //phpcs:ignore -- NOSONAR - complexity. if ( empty( $data ) || ! is_array( $data ) ) { $data = array(); } $uptime_data = array(); foreach ( $data as $value ) { $uptime_data[ $value['timestamp'] ] = $value; } $hourly_key = MainWP_Uptime_Monitoring_Handle::get_hourly_key_by_timestamp( $last24_starttime ); $empty = array( 'up' => 0, 'down' => 0, 'ping_avg' => 0, 'ping_min' => 0, 'ping_max' => 0, ); $total_up = 0; $total_down = 0; for ( $i = 0; $i < 24; $i++ ) { if ( isset( $uptime_data[ $hourly_key ] ) ) { $up_stats = $uptime_data[ $hourly_key ]; $color = $up_stats['up'] ? 'green' : 'red'; $text = $up_stats['up'] ? __( 'Up', 'mainwp' ) : __( 'Down', 'mainwp' ); } else { $up_stats = $empty; $color = 'gray'; $text = __( 'Pending', 'mainwp' ); } $total_up += (int) $up_stats['up']; $total_down += (int) $up_stats['down']; $local_time = MainWP_Utility::get_timestamp( $hourly_key ); $time_from = MainWP_Utility::format_timestamp( $local_time ) . ' ' . MainWP_Utility::format_time( $local_time + HOUR_IN_SECONDS ); ?> ' . esc_html__( 'Pending', 'mainwp' ) . ''; } else { echo '
' . ( $total_up ? esc_html__( 'Up', 'mainwp' ) . ' ' . (int) ( $total_up * 100 / ( $total_up + $total_down ) ) . ' %' : esc_html__( 'Down', 'mainwp' ) ) . ''; } } /** * Get monitors table child rows. * * @param int $site_id the site id. * @param array $sub_pages sub page. * @return string format html content. */ public function get_monitors_table_child_rows( $site_id, $sub_pages ) { ob_start(); ?> print_column_headers( false, true, true, $site_id ); ?> single_row( $mo_page ); endforeach; ?>