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$tag>"; // 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;
?>