File: /home/mahdetej/public_html/wp-content/plugins/Melli-shild/admin/views/page-dashboard.php
<?php
if ( ! defined( 'ABSPATH' ) ) {
exit;
}
$mode = Melli_Shield_Utils::get_mode();
$settings = Melli_Shield_Utils::get_settings();
$ui = Melli_Shield_Admin_UI::instance();
if (
isset( $_POST['melli_shield_switch_mode'] ) &&
isset( $_POST['_wpnonce'] ) &&
wp_verify_nonce( sanitize_text_field( wp_unslash( $_POST['_wpnonce'] ) ), 'melli_shield_switch_mode' )
) {
$new_mode = sanitize_text_field( wp_unslash( $_POST['melli_shield_switch_mode'] ) );
Melli_Shield_Utils::set_mode( $new_mode );
wp_safe_redirect(
Melli_Shield_Config::admin_url(
Melli_Shield_Config::PAGE_DASHBOARD,
array(
'msh_notice' => 'ok',
'msh_msg' => __( 'حالت بهروزرسانی شد.', 'melli-shield' ),
)
)
);
exit;
}
$stats = Melli_Shield_Utils::get_dashboard_stats();
$last_scan = get_option( Melli_Shield_Config::OPTION_LAST_SCAN, '' );
$recent_log = Melli_Shield_Utils::get_recent_log( 10 );
$top_domains = Melli_Shield_Utils::get_top_blocked_domains( 8, $stats['retention_days'] );
$period_from = Melli_Shield_Utils::log_filter_date( (int) $stats['retention_days'] );
$exceptions = (int) $stats['whitelist_count'] + (int) $stats['service_count'];
$all_today = $stats['blocked_today'] > 0 && $stats['blocked_today'] === $stats['blocked_period'];
$log_period_url = Melli_Shield_Utils::log_admin_url(
array(
'log_date_from' => $period_from,
'log_status' => 1,
)
);
$scanner_url = Melli_Shield_Config::admin_url( Melli_Shield_Config::PAGE_SCANNER );
$whitelist_url = Melli_Shield_Config::admin_url( Melli_Shield_Config::PAGE_WHITELIST );
$log_url = Melli_Shield_Config::admin_url( Melli_Shield_Config::PAGE_LOG );
$mode_cards = array(
'normal' => array(
'label' => __( 'عادی', 'melli-shield' ),
'desc' => __( 'همه درخواستها مجاز — بدون فیلتر', 'melli-shield' ),
'class' => 'msh-mode-card--normal',
),
'national' => array(
'label' => __( 'ملی', 'melli-shield' ),
'desc' => __( 'فقط دامنههای ایرانی مجاز', 'melli-shield' ),
'class' => 'msh-mode-card--national',
),
'offline' => array(
'label' => __( 'آفلاین', 'melli-shield' ),
'desc' => __( 'همه خارجیها مسدود — با استثناهای لیست سفید و سرویس', 'melli-shield' ),
'class' => 'msh-mode-card--offline',
),
);
$blocker_labels = array(
'block_fonts' => __( 'فونت خارجی', 'melli-shield' ),
'block_cdn' => __( 'CDN', 'melli-shield' ),
'block_analytics' => __( 'آنالیتیک', 'melli-shield' ),
'block_updates' => __( 'آپدیت WP', 'melli-shield' ),
'block_gravatar' => __( 'Gravatar', 'melli-shield' ),
'block_embeds' => __( 'Embed', 'melli-shield' ),
'block_recaptcha' => __( 'reCAPTCHA', 'melli-shield' ),
'block_heartbeat' => __( 'Heartbeat', 'melli-shield' ),
'block_email' => __( 'ایمیل', 'melli-shield' ),
'allow_messenger' => __( 'پیامرسان', 'melli-shield' ),
);
?>
<div class="wrap">
<?php $ui->header( Melli_Shield_Config::PAGE_DASHBOARD ); ?>
<?php $ui->page_title( __( 'داشبورد', 'melli-shield' ), __( 'خلاصه وضعیت سپر', 'melli-shield' ), __( 'وضعیت سایت', 'melli-shield' ) ); ?>
<?php if ( ! $stats['blocking_active'] ) : ?>
<p class="msh-inline-notice msh-inline-notice--idle"><?php esc_html_e( 'سپر خاموش — اتصال خارجی فیلتر نمیشود.', 'melli-shield' ); ?></p>
<?php elseif ( ! $stats['log_enabled'] ) : ?>
<p class="msh-inline-notice msh-inline-notice--warn">
<?php esc_html_e( 'ثبت گزارش خاموش است.', 'melli-shield' ); ?>
<a href="<?php echo esc_url( Melli_Shield_Config::admin_url( Melli_Shield_Config::PAGE_SETTINGS ) ); ?>"><?php esc_html_e( 'تنظیمات', 'melli-shield' ); ?></a>
</p>
<?php endif; ?>
<div class="ms-kpi-row ms-rise" role="list">
<?php
$featured_num = ( $stats['blocking_active'] && $stats['log_enabled'] )
? number_format_i18n( $stats['blocked_period'] )
: '—';
$featured_tag = __( 'خاموش', 'melli-shield' );
$featured_tag_class = 'ms-kpi__tag--muted';
if ( $stats['blocking_active'] && $stats['log_enabled'] ) {
$featured_tag = $all_today ? __( 'امروز', 'melli-shield' ) : __( 'فعال', 'melli-shield' );
$featured_tag_class = '';
} elseif ( $stats['blocking_active'] ) {
$featured_tag = __( 'گزارش خاموش', 'melli-shield' );
}
?>
<a href="<?php echo esc_url( $log_period_url ); ?>" class="ms-kpi ms-kpi--featured" role="listitem">
<span class="ms-kpi__accent" aria-hidden="true"></span>
<span class="ms-kpi__num ms-kpi__num--featured"><?php echo esc_html( $featured_num ); ?></span>
<span class="ms-kpi__label">
<?php
printf(
/* translators: %d: retention days */
esc_html__( 'مسدودسازی · %d روز', 'melli-shield' ),
(int) $stats['retention_days']
);
?>
</span>
<span class="ms-kpi__tag <?php echo esc_attr( $featured_tag_class ); ?>"><?php echo esc_html( $featured_tag ); ?></span>
</a>
<a href="<?php echo esc_url( $log_period_url ); ?>" class="ms-kpi" role="listitem">
<span class="ms-kpi__num"><?php echo esc_html( number_format_i18n( $stats['unique_domains'] ) ); ?></span>
<span class="ms-kpi__label"><?php esc_html_e( 'سایت خارجی', 'melli-shield' ); ?></span>
</a>
<a href="<?php echo esc_url( $scanner_url ); ?>" class="ms-kpi" role="listitem">
<span class="ms-kpi__num"><?php echo esc_html( number_format_i18n( $stats['scan_total'] ) ); ?></span>
<span class="ms-kpi__label"><?php esc_html_e( 'یافته اسکن', 'melli-shield' ); ?></span>
</a>
<a href="<?php echo esc_url( $whitelist_url ); ?>" class="ms-kpi" role="listitem">
<span class="ms-kpi__num"><?php echo esc_html( number_format_i18n( $exceptions ) ); ?></span>
<span class="ms-kpi__label"><?php esc_html_e( 'لیست مجاز', 'melli-shield' ); ?></span>
</a>
</div>
<?php if ( $stats['blocking_active'] && $stats['log_enabled'] && $stats['last_block_ago'] ) : ?>
<p class="msh-stats-footnote ms-rise">
<?php
echo wp_kses(
sprintf(
/* translators: 1: relative time, 2: log page URL */
__( 'آخرین فعالیت: %1$s · <a href="%2$s">گزارش</a>', 'melli-shield' ),
esc_html( $stats['last_block_ago'] ),
esc_url( $log_url )
),
array( 'a' => array( 'href' => true ) )
);
?>
</p>
<?php endif; ?>
<div class="msh-card ms-card ms-rise ms-rise--delay">
<h2 class="msh-card__title"><?php esc_html_e( 'حالت سپر', 'melli-shield' ); ?></h2>
<div class="msh-mode-cards">
<?php foreach ( $mode_cards as $key => $card ) : ?>
<div class="msh-mode-card <?php echo esc_attr( $card['class'] ); ?> <?php echo $mode === $key ? 'is-active' : ''; ?>">
<span class="msh-mode-card__dot"></span>
<div class="msh-mode-card__label"><?php echo esc_html( $card['label'] ); ?></div>
<div class="msh-mode-card__desc"><?php echo esc_html( $card['desc'] ); ?></div>
<?php if ( $mode !== $key ) : ?>
<form method="post" class="msh-mode-switch-form">
<?php wp_nonce_field( 'melli_shield_switch_mode' ); ?>
<button type="submit" name="melli_shield_switch_mode" value="<?php echo esc_attr( $key ); ?>" class="msh-btn msh-btn--sm msh-btn--ghost">
<?php esc_html_e( 'فعالسازی', 'melli-shield' ); ?>
</button>
</form>
<?php else : ?>
<span class="msh-badge msh-badge--ok"><?php esc_html_e( 'فعال', 'melli-shield' ); ?></span>
<?php endif; ?>
</div>
<?php endforeach; ?>
</div>
</div>
<div class="msh-grid-2">
<div class="msh-card">
<h2 class="msh-card__title"><?php esc_html_e( 'سلامت سپر', 'melli-shield' ); ?></h2>
<ul class="msh-list">
<li><?php echo Melli_Shield_Utils::is_blocking_active() ? '✓ ' . esc_html__( 'فیلتر شبکه فعال است', 'melli-shield' ) : '○ ' . esc_html__( 'حالت عادی — فیلتر غیرفعال', 'melli-shield' ); ?></li>
<li><?php echo esc_html( Melli_Shield_Utils::get_mode_label() ); ?> — <?php esc_html_e( 'حالت فعلی', 'melli-shield' ); ?></li>
<?php if ( $last_scan ) : ?>
<li><?php printf( esc_html__( 'آخرین اسکن: %s', 'melli-shield' ), esc_html( $last_scan ) ); ?></li>
<?php endif; ?>
</ul>
<div class="msh-btn-row msh-mt-md">
<a href="<?php echo esc_url( $scanner_url ); ?>" class="msh-btn msh-btn--sm"><?php esc_html_e( 'اجرای اسکنر', 'melli-shield' ); ?></a>
<a href="<?php echo esc_url( Melli_Shield_Config::admin_url( Melli_Shield_Config::PAGE_SETTINGS ) ); ?>" class="msh-btn msh-btn--sm msh-btn--ghost"><?php esc_html_e( 'تنظیمات', 'melli-shield' ); ?></a>
</div>
</div>
<div class="msh-card">
<h2 class="msh-card__title"><?php esc_html_e( 'بلاکرهای فعال', 'melli-shield' ); ?></h2>
<div class="msh-blocker-pills">
<?php foreach ( $blocker_labels as $key => $label ) :
$on = Melli_Shield_Utils::get_setting( $key, 0 );
?>
<span class="msh-blocker-pill <?php echo $on ? 'is-on' : ''; ?>"><?php echo esc_html( $label ); ?></span>
<?php endforeach; ?>
</div>
</div>
</div>
<div class="msh-card">
<h2 class="msh-card__title"><?php esc_html_e( 'آزمایش URL', 'melli-shield' ); ?></h2>
<div class="msh-probe">
<input type="url" id="msh-probe-url" class="msh-input msh-input--inline" placeholder="https://example.com/api" />
<button type="button" id="msh-probe-btn" class="msh-btn"><?php esc_html_e( 'بررسی URL', 'melli-shield' ); ?></button>
</div>
<div id="msh-probe-result" class="msh-probe__result"></div>
</div>
<div class="msh-grid-2">
<div class="msh-card">
<h2 class="msh-card__title"><?php esc_html_e( 'آخرین مسدودسازیها', 'melli-shield' ); ?></h2>
<?php if ( $recent_log ) : ?>
<div class="msh-table-wrap">
<table class="msh-table">
<thead><tr><th><?php esc_html_e( 'سایت', 'melli-shield' ); ?></th><th><?php esc_html_e( 'نوع', 'melli-shield' ); ?></th><th><?php esc_html_e( 'زمان', 'melli-shield' ); ?></th></tr></thead>
<tbody>
<?php foreach ( $recent_log as $row ) : ?>
<tr>
<td><code><?php echo esc_html( $row->domain ); ?></code></td>
<td><?php echo esc_html( Melli_Shield_Utils::get_log_source_label( $row->source ) ); ?></td>
<td class="msh-text-xs" title="<?php echo esc_attr( $row->created_at ); ?>"><?php echo esc_html( Melli_Shield_Utils::format_log_time( $row->created_at ) ); ?></td>
</tr>
<?php endforeach; ?>
</tbody>
</table>
</div>
<p class="msh-card__footer-link">
<a href="<?php echo esc_url( $log_url ); ?>"><?php esc_html_e( 'گزارش کامل', 'melli-shield' ); ?></a>
</p>
<?php else : ?>
<p class="msh-empty">
<?php
echo $stats['blocking_active']
? esc_html__( 'هنوز چیزی مسدود نشده.', 'melli-shield' )
: esc_html__( 'سپر خاموش است.', 'melli-shield' );
?>
</p>
<?php endif; ?>
</div>
<div class="msh-card">
<h2 class="msh-card__title">
<?php
printf(
/* translators: %d: number of days */
esc_html__( 'پرتکرار (%d روز)', 'melli-shield' ),
(int) $stats['retention_days']
);
?>
</h2>
<?php if ( $top_domains ) : ?>
<div class="msh-table-wrap">
<table class="msh-table">
<thead><tr><th><?php esc_html_e( 'سایت', 'melli-shield' ); ?></th><th><?php esc_html_e( 'دفعات', 'melli-shield' ); ?></th></tr></thead>
<tbody>
<?php foreach ( $top_domains as $row ) : ?>
<tr>
<td><code><?php echo esc_html( $row->domain ); ?></code></td>
<td><?php echo esc_html( number_format_i18n( $row->hits ) ); ?></td>
</tr>
<?php endforeach; ?>
</tbody>
</table>
</div>
<?php else : ?>
<p class="msh-empty"><?php esc_html_e( 'دادهای نیست.', 'melli-shield' ); ?></p>
<?php endif; ?>
</div>
</div>
<?php $ui->footer(); ?>
</div>