HEX
Server: LiteSpeed
System: Linux emerald.serverdnsnetwork.com 5.14.0-611.5.1.el9_7.x86_64 #1 SMP PREEMPT_DYNAMIC Tue Nov 11 08:09:09 EST 2025 x86_64
User: mahdetej (1135)
PHP: 8.1.34
Disabled: show_source, system, shell_exec, passthru, exec, popen, proc_open
Upload Files
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>