'array', 'sanitize_callback' => 'mcpss_sanitize_settings', 'default' => mcpss_defaults(), ) ); } /** * Sanitize. * * @param mixed $in Input. * @return array */ function mcpss_sanitize_settings( $in ) { $in = is_array( $in ) ? $in : array(); $align = isset( $in['alignment'] ) ? sanitize_key( $in['alignment'] ) : 'center'; return array( 'slug' => mcpss_parse_slug( isset( $in['slug'] ) ? wp_unslash( $in['slug'] ) : '' ), 'monitor' => mcpss_parse_monitor( isset( $in['monitor'] ) ? wp_unslash( $in['monitor'] ) : '' ), 'footer' => empty( $in['footer'] ) ? 0 : 1, 'alignment' => in_array( $align, array( 'left', 'center', 'right' ), true ) ? $align : 'center', ); } /** * Local admin CSS/JS, only on this settings page. * * @param string $hook Hook. */ function mcpss_admin_assets( $hook ) { if ( 'settings_page_mcpserverstatus' !== $hook ) { return; } wp_enqueue_style( 'mcpss-admin', MCPSS_URL . 'admin/admin.css', array( 'dashicons' ), MCPSS_VERSION ); wp_enqueue_script( 'mcpss-admin', MCPSS_URL . 'admin/admin.js', array(), MCPSS_VERSION, true ); wp_localize_script( 'mcpss-admin', 'mcpssAdmin', array( 'confirmDisconnect' => __( 'Disconnect this site from MCPServerStatus? Your monitors stay in your account.', 'mcp-server-status' ), 'copied' => __( 'Copied!', 'mcp-server-status' ), 'copy' => __( 'Copy', 'mcp-server-status' ), ) ); } /** * Tabs. * * @return array */ function mcpss_tabs() { return array( 'overview' => __( 'Overview', 'mcp-server-status' ), 'badge' => __( 'Badge', 'mcp-server-status' ), 'account' => __( 'Account', 'mcp-server-status' ), ); } /** * Normalize a status value. * * @param string $status Raw. * @return string up|degraded|down|unknown */ function mcpss_status_key( $status ) { return in_array( $status, array( 'up', 'degraded', 'down' ), true ) ? $status : 'unknown'; } /** * Format an ISO timestamp as site date + time. * * @param string $iso ISO date. * @return string */ function mcpss_format_datetime( $iso ) { $ts = $iso ? strtotime( $iso ) : false; return $ts ? wp_date( get_option( 'date_format' ) . ' ' . get_option( 'time_format' ), $ts ) : ''; } /** * Render page. */ function mcpss_render_settings() { if ( ! current_user_can( 'manage_options' ) ) { return; } $s = mcpss_get_settings(); $connected = mcpss_is_connected(); $data = null; $error = ''; if ( $connected ) { $data = mcpss_get_monitors(); if ( is_wp_error( $data ) ) { $error = $data->get_error_message(); $connected = mcpss_is_connected(); // A 401 forgets the token. $data = array( 'plan' => array(), 'account' => null, 'monitors' => array(), ); } } $current = null; if ( $data ) { foreach ( $data['monitors'] as $m ) { if ( $m['publicId'] === $s['monitor'] ) { $current = $m; } } } $tabs = mcpss_tabs(); // phpcs:ignore WordPress.Security.NonceVerification.Recommended -- display only. $tab = isset( $_GET['tab'] ) ? sanitize_key( wp_unslash( $_GET['tab'] ) ) : 'overview'; if ( ! isset( $tabs[ $tab ] ) ) { $tab = 'overview'; } ?>

', esc_attr( $key ), $key === $tab ? '' : ' hidden' ); call_user_func( 'mcpss_render_tab_' . $key, $s, $connected, $data, $current ); echo ''; } ?>
' . esc_html( $label ) . ''; } /** * Connect hero card. */ function mcpss_render_connect_hero() { ?>

' . esc_html__( 'Badge monitor', 'mcp-server-status' ) . '

' . esc_html__( 'No monitor selected', 'mcp-server-status' ) . '

' . esc_html__( 'Choose one of your monitors below with "Use for badge".', 'mcp-server-status' ) . '

'; } // Read-only view selection (GET); capability is checked in mcpss_render_settings(). // phpcs:disable WordPress.Security.NonceVerification.Recommended $detail_id = isset( $_GET['mcpss_detail'] ) ? mcpss_parse_monitor( sanitize_text_field( wp_unslash( $_GET['mcpss_detail'] ) ) ) : ''; $range = isset( $_GET['mcpss_range'] ) ? sanitize_key( wp_unslash( $_GET['mcpss_range'] ) ) : '7d'; // phpcs:enable $detail = $current; foreach ( $data['monitors'] as $m ) { if ( '' !== $detail_id && $m['publicId'] === $detail_id ) { $detail = $m; } } if ( null === $detail && ! empty( $data['monitors'] ) ) { $detail = $data['monitors'][0]; } if ( null !== $detail ) { mcpss_render_history_panel( $detail, $range ); } ?>

__( 'Left', 'mcp-server-status' ), 'center' => __( 'Center', 'mcp-server-status' ), 'right' => __( 'Right', 'mcp-server-status' ) ) as $k => $label ) : ?>

>

0 ? min( 100, (int) round( $used / $limit * 100 ) ) : 0; ?>