File: /home/mahdetej/www/wp-content/plugins/Melli-shild/melli-shield.php
<?php
/**
* Plugin Name: ملی شیلد | Melli Shield
* Plugin URI: https://melli.site
* Description: مسدودسازی درخواستهای خارجی، حفظ حریم خصوصی و بهبود عملکرد در حالت ملی و آفلاین.
* Version: 2.3.1
* Requires at least: 5.6
* Requires PHP: 7.4
* Author: Melli.site
* Author URI: https://melli.site
* License: GPL v2 or later
* License URI: https://www.gnu.org/licenses/gpl-2.0.html
* Text Domain: melli-shield
* Domain Path: /languages
*/
if ( ! defined( 'ABSPATH' ) ) {
exit;
}
define( 'MELLI_SHIELD_VERSION', '2.3.1' );
define( 'MELLI_SHIELD_PLUGIN_DIR', plugin_dir_path( __FILE__ ) );
define( 'MELLI_SHIELD_PLUGIN_URL', plugin_dir_url( __FILE__ ) );
define( 'MELLI_SHIELD_PLUGIN_BASENAME', plugin_basename( __FILE__ ) );
define( 'MELLI_SHIELD_PLUGIN_FILE', __FILE__ );
$melli_shield_debug_from_wp_config = defined( 'MELLI_SHIELD_DEBUG' );
if ( ! $melli_shield_debug_from_wp_config ) {
define( 'MELLI_SHIELD_DEBUG', false );
}
require_once MELLI_SHIELD_PLUGIN_DIR . 'includes/class-melli-shield-config.php';
require_once MELLI_SHIELD_PLUGIN_DIR . 'includes/class-melli-shield-debug.php';
Melli_Shield_Debug::init_bootstrap( $melli_shield_debug_from_wp_config );
Melli_Shield_Debug::register_hooks();
add_action( 'plugins_loaded', array( 'Melli_Shield_Debug', 'boot' ), 1 );
global $melli_shield_protected_handles;
$melli_shield_protected_handles = Melli_Shield_Config::protected_handles();
require_once MELLI_SHIELD_PLUGIN_DIR . 'includes/class-melli-shield-migrator.php';
Melli_Shield_Migrator::boot();
require_once MELLI_SHIELD_PLUGIN_DIR . 'includes/class-melli-shield-loader.php';
require_once MELLI_SHIELD_PLUGIN_DIR . 'includes/class-melli-shield-activator.php';
require_once MELLI_SHIELD_PLUGIN_DIR . 'includes/class-melli-shield-deactivator.php';
require_once MELLI_SHIELD_PLUGIN_DIR . 'includes/class-melli-shield-i18n.php';
require_once MELLI_SHIELD_PLUGIN_DIR . 'includes/class-melli-shield-utils.php';
require_once MELLI_SHIELD_PLUGIN_DIR . 'admin/class-melli-shield-admin-ui.php';
require_once MELLI_SHIELD_PLUGIN_DIR . 'admin/class-melli-shield-admin.php';
require_once MELLI_SHIELD_PLUGIN_DIR . 'admin/class-melli-shield-settings.php';
require_once MELLI_SHIELD_PLUGIN_DIR . 'core/class-melli-shield-probe-ajax.php';
require_once MELLI_SHIELD_PLUGIN_DIR . 'core/class-melli-shield-blocker.php';
require_once MELLI_SHIELD_PLUGIN_DIR . 'core/class-melli-shield-logger.php';
require_once MELLI_SHIELD_PLUGIN_DIR . 'core/class-melli-shield-whitelist.php';
require_once MELLI_SHIELD_PLUGIN_DIR . 'core/class-melli-shield-scanner.php';
require_once MELLI_SHIELD_PLUGIN_DIR . 'core/class-melli-shield-scanner-ajax.php';
require_once MELLI_SHIELD_PLUGIN_DIR . 'core/class-melli-shield-performance.php';
require_once MELLI_SHIELD_PLUGIN_DIR . 'core/class-melli-shield-performance-ajax.php';
require_once MELLI_SHIELD_PLUGIN_DIR . 'core/class-melli-shield-output-buffer.php';
require_once MELLI_SHIELD_PLUGIN_DIR . 'core/class-melli-shield-compatibility.php';
require_once MELLI_SHIELD_PLUGIN_DIR . 'core/modes/class-melli-shield-mode-normal.php';
require_once MELLI_SHIELD_PLUGIN_DIR . 'core/modes/class-melli-shield-mode-national.php';
require_once MELLI_SHIELD_PLUGIN_DIR . 'core/modes/class-melli-shield-mode-offline.php';
require_once MELLI_SHIELD_PLUGIN_DIR . 'core/blockers/class-melli-shield-block-fonts.php';
require_once MELLI_SHIELD_PLUGIN_DIR . 'core/blockers/class-melli-shield-block-cdn.php';
require_once MELLI_SHIELD_PLUGIN_DIR . 'core/blockers/class-melli-shield-block-analytics.php';
require_once MELLI_SHIELD_PLUGIN_DIR . 'core/blockers/class-melli-shield-block-updates.php';
require_once MELLI_SHIELD_PLUGIN_DIR . 'core/blockers/class-melli-shield-block-gravatar.php';
require_once MELLI_SHIELD_PLUGIN_DIR . 'core/blockers/class-melli-shield-block-embeds.php';
require_once MELLI_SHIELD_PLUGIN_DIR . 'core/blockers/class-melli-shield-block-recaptcha.php';
require_once MELLI_SHIELD_PLUGIN_DIR . 'core/blockers/class-melli-shield-block-heartbeat.php';
require_once MELLI_SHIELD_PLUGIN_DIR . 'core/blockers/class-melli-shield-block-email.php';
register_activation_hook( __FILE__, array( 'Melli_Shield_Activator', 'activate' ) );
register_deactivation_hook( __FILE__, array( 'Melli_Shield_Deactivator', 'deactivate' ) );
add_filter( 'plugin_action_links_' . MELLI_SHIELD_PLUGIN_BASENAME, function ( $links ) {
$url = esc_url( Melli_Shield_Config::admin_url() );
array_unshift( $links, '<a href="' . $url . '">' . esc_html__( 'تنظیمات', 'melli-shield' ) . '</a>' );
return $links;
} );
add_action( 'admin_notices', function () {
if ( get_transient( Melli_Shield_Config::ACTIVATION_TRANSIENT ) ) {
delete_transient( Melli_Shield_Config::ACTIVATION_TRANSIENT );
echo '<div class="notice notice-success is-dismissible"><p>';
echo '<strong>' . esc_html__( 'ملی شیلد فعال شد!', 'melli-shield' ) . '</strong> ';
echo esc_html__( 'حالت سپر خود را تنظیم کنید.', 'melli-shield' ) . ' ';
echo '<a href="' . esc_url( Melli_Shield_Config::admin_url() ) . '" class="button button-primary">';
echo esc_html__( 'رفتن به داشبورد', 'melli-shield' );
echo '</a></p></div>';
}
} );
final class Melli_Shield_Plugin {
private static $instance = null;
private $loader;
public static function instance() {
if ( is_null( self::$instance ) ) {
self::$instance = new self();
}
return self::$instance;
}
private function __construct() {
$this->loader = new Melli_Shield_Loader();
$this->load_textdomain();
$this->register_ajax_hooks();
$this->register_admin_hooks();
$this->register_core_hooks();
$this->register_cron();
Melli_Shield_Utils::ensure_tables();
$this->loader->run();
}
private function load_textdomain() {
$i18n = new Melli_Shield_I18n();
$this->loader->add_action( 'plugins_loaded', $i18n, 'load_textdomain' );
}
private function register_ajax_hooks() {
Melli_Shield_Scanner_Ajax::instance()->register();
Melli_Shield_Performance_Ajax::instance()->register();
Melli_Shield_Probe_Ajax::instance()->register();
}
private function register_admin_hooks() {
$admin = new Melli_Shield_Admin();
if ( ! is_admin() ) {
$this->loader->add_action( 'admin_bar_menu', $admin, 'admin_bar_status', 100 );
$this->loader->add_action( 'wp_enqueue_scripts', $admin, 'enqueue_frontend_perf' );
return;
}
$this->loader->add_action( 'admin_menu', $admin, 'add_menu_pages' );
$this->loader->add_action( 'admin_enqueue_scripts', $admin, 'enqueue_assets' );
$this->loader->add_action( 'admin_bar_menu', $admin, 'admin_bar_status', 100 );
$settings = new Melli_Shield_Settings();
$this->loader->add_action( 'admin_init', $settings, 'register_settings' );
}
private function register_core_hooks() {
$blocker = new Melli_Shield_Blocker();
$this->loader->add_action( 'init', $blocker, 'init' );
$output = new Melli_Shield_Output_Buffer();
$output->register();
if ( is_admin() ) {
$compat = new Melli_Shield_Compatibility();
$compat->register();
}
}
private function register_cron() {
if ( ! wp_next_scheduled( Melli_Shield_Config::CRON_CLEANUP ) ) {
wp_schedule_event( time(), 'daily', Melli_Shield_Config::CRON_CLEANUP );
}
add_action( Melli_Shield_Config::CRON_CLEANUP, function () {
$logger = new Melli_Shield_Logger();
$logger->cleanup();
} );
}
}
function melli_shield() {
return Melli_Shield_Plugin::instance();
}
melli_shield();