Files
User A0264400 a766acdc90 first commit
2026-04-01 23:20:16 +03:00

373 lines
14 KiB
PHP
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?php
/**
* Clearfy core class
*
* @author Webcraftic <wordpress.webraftic@gmail.com>
* @copyright (c) 19.02.2018, Webcraftic
* @version 1.0
*/
// Exit if accessed directly
if ( ! defined( 'ABSPATH' ) ) {
exit;
}
class WCL_Plugin extends Wbcr_Factory480_Plugin {
/**
* @see self::app()
* @var Wbcr_Factory480_Plugin
*/
private static $app;
/**
* Конструктор
*
* Применяет конструктор родительского класса и записывает экземпляр текущего класса в свойство $app.
* Подробнее о свойстве $app см. self::app()
*
* @param string $plugin_path
* @param array $data
*
* @throws Exception
*/
public function __construct( $plugin_path, $data ) {
self::$app = $this;
parent::__construct( $plugin_path, $data );
require_once( WCL_PLUGIN_DIR . '/includes/helpers.php' );
require_once( WCL_PLUGIN_DIR . '/includes/classes/class.licensing.php' );
if ( is_admin() ) {
if ( is_plugin_active( 'wp-rocket/wp-rocket.php' ) ) {
require_once( WCL_PLUGIN_DIR . '/includes/classes/3rd-party/boot.php' );
}
require_once( WCL_PLUGIN_DIR . '/admin/includes/classes/class.option.php' );
require_once( WCL_PLUGIN_DIR . '/admin/includes/classes/class.group.php' );
require_once( WCL_PLUGIN_DIR . '/admin/activation.php' );
if ( defined( 'DOING_AJAX' ) && DOING_AJAX ) {
require( WCL_PLUGIN_DIR . '/admin/ajax/configurate.php' );
require( WCL_PLUGIN_DIR . '/admin/ajax/google-page-speed.php' );
require( WCL_PLUGIN_DIR . '/admin/ajax/import-settings.php' );
}
require_once( WCL_PLUGIN_DIR . '/admin/includes/compatibility.php' );
require_once( WCL_PLUGIN_DIR . '/admin/boot.php' );
$this->register_activator();
}
$this->global_scripts();
add_action( 'plugins_loaded', [ $this, 'plugins_loaded' ] );
// Wordpress 6.7 fix
add_action( 'init', function () {
if ( is_admin() ) {
$this->register_pages();
}
} );
}
/**
* Статический метод для быстрого доступа к интерфейсу плагина.
*
* Позволяет разработчику глобально получить доступ к экземпляру класса плагина в любом месте
* плагина, но при этом разработчик не может вносить изменения в основной класс плагина.
*
* Используется для получения настроек плагина, информации о плагине, для доступа к вспомогательным
* классам.
*
* @return \Wbcr_Factory480_Plugin|\WCL_Plugin
*/
public static function app() {
return self::$app;
}
/**
* Метод проверяет активацию премиум плагина и наличие действующего лицензионнного ключа
*
* @return bool
*/
public function is_premium() {
if ( $this->premium->is_active() && $this->premium->is_activate() && $this->premium->is_install_package() ) {
return true;
} else {
return false;
}
}
/**
* Выполняет php сценарии, когда все Wordpress плагины будут загружены
*
* @throws \Exception
* @since 1.0.0
* @author Alexander Kovalev <alex.kovalevv@gmail.com>
*/
public function plugins_loaded() {
if ( is_admin() ) {
require_once( WCL_PLUGIN_DIR . '/admin/pages/class-page.php' );
}
require_once( WCL_PLUGIN_DIR . '/includes/classes/class.configurate-advanced.php' );
new WCL_ConfigAdvanced( $this );
}
/**
* Исключаем загрузку отключенных компонентов плагина
*
* @return array
* @since 1.6.0
* @author Alexander Kovalev <alex.kovalevv@gmail.com>
*/
public function get_load_plugin_components() {
$load_components = parent::get_load_plugin_components();
$deactivate_components = $this->getPopulateOption( 'deactive_preinstall_components', [] );
if ( ! empty( $deactivate_components ) ) {
foreach ( (array) $load_components as $component_ID => $component ) {
if ( in_array( $component_ID, $deactivate_components ) ) {
unset( $load_components[ $component_ID ] );
}
}
}
if ( is_plugin_active( 'gonzales/gonzales.php' ) ) {
unset( $load_components['assets_manager'] );
}
// Выполнить код до загрузки и инициализации компонентов
// ----------------------------------------------------------
/*if ( $this->premium->is_install_package() ) {
$package = $this->premium->get_package_data();
if ( version_compare( $package['version'], "1.4.3", "<" ) ) {
unset( $load_components['cache'] );
}
}*/
// Всегда отключем комонент кеша, для совместимости с премиум плагином.
// С версии Clearfy 2.1.0 мы сделали кеширующий компонент бесплатным и
// перенесли в этот плагин. Поэтому, чтобы не было конфликтом между старым
// и новым компонетом кеша, мы отключаем старый компонент всегда.
unset( $load_components['cache'] );
// Выполнить код до загрузки и инициализации компонентов
// ----------------------------------------------------------
if ( is_plugin_active( 'wp-rocket/wp-rocket.php' ) ) {
$this->deactivateComponent( 'clearfy_cache' );
require_once( WCL_PLUGIN_DIR . '/includes/classes/3rd-party/class-base.php' );
require_once( WCL_PLUGIN_DIR . '/includes/classes/3rd-party/plugins/class-wp-rocket.php' );
$wp_rocket_no_conflict = new \Clearfy\ThirdParty\Wp_Rocket();
$wp_rocket_no_conflict->disable_clearfy_options();
}
//-----------------------------------------------------------
return $load_components;
}
/**
* Регистрируем активатор плагина
*
* @author Alexander Kovalev <alex.kovalevv@gmail.com>
* @since 1.0.0
*/
protected function register_activator() {
include_once( WCL_PLUGIN_DIR . '/admin/activation.php' );
$this->registerActivation( 'WCL_Activation' );
}
/**
* Регистрирует классы страниц в плагине
*
* Мы указываем плагину, где найти файлы страниц и какое имя у их класса. Чтобы плагин
* выполнил подключение классов страниц. После регистрации, страницы будут доступные по url
* и в меню боковой панели администратора. Регистрируемые страницы будут связаны с текущим плагином
* все операции выполняемые внутри классов страниц, имеют отношение только текущему плагину.
*
* @throws \Exception
* @author Alexander Kovalev <alex.kovalevv@gmail.com>
*/
private function register_pages() {
try {
$this->registerPage( 'WCL_Setup', WCL_PLUGIN_DIR . '/admin/pages/setup/class-pages-setup.php' );
$this->registerPage( 'WCL_QuickStartPage', WCL_PLUGIN_DIR . '/admin/pages/class-pages-quick-start.php' );
$this->registerPage( 'WCL_AdvancedPage', WCL_PLUGIN_DIR . '/admin/pages/class-pages-advanced.php' );
$this->registerPage( 'WCL_PerformancePage', WCL_PLUGIN_DIR . '/admin/pages/class-pages-performance.php' );
//$this->registerPage('WCL_PerformanceGooglePage', WCL_PLUGIN_DIR . '/admin/pages/class-pages-performance-google.php');
$this->registerPage( 'WCL_ComponentsPage', WCL_PLUGIN_DIR . '/admin/pages/class-pages-components.php' );
$this->registerPage( 'WCL_SeoPage', WCL_PLUGIN_DIR . '/admin/pages/class-pages-seo.php' );
$this->registerPage( 'WCL_DoublePagesPage', WCL_PLUGIN_DIR . '/admin/pages/class-pages-seo-double-pages.php' );
$this->registerPage( 'WCL_DefencePage', WCL_PLUGIN_DIR . '/admin/pages/class-pages-defence.php' );
if ( ! defined( 'WTITAN_PLUGIN_ACTIVE' ) ) {
$this->registerPage( 'WCL_TitanSecurityPage', WCL_PLUGIN_DIR . '/admin/pages/class-pages-defence-titan.php' );
}
if ( defined( 'WRIO_PLUGIN_ACTIVE' ) && ! wrio_is_clearfy_license_activate() ) {
$this->registerPage( 'WCL_ComponentsLicensePage', WCL_PLUGIN_DIR . '/admin/pages/class-pages-components-license.php' );
}
if ( ! WCL_Plugin::app()->getPopulateOption( 'whitelabel_hide_license_page' ) ) {
// $this->registerPage( 'WCL_LicensePage', WCL_PLUGIN_DIR . '/admin/pages/class-pages-license.php' );
}
if ( $this->isActivateComponent( 'widget_tools' ) ) {
$this->registerPage( 'WCL_WidgetsPage', WCL_PLUGIN_DIR . '/admin/pages/class-pages-widgets.php' );
}
$this->registerPage( 'WCL_ClearfySettingsPage', WCL_PLUGIN_DIR . '/admin/pages/class-pages-clearfy-settings.php' );
if ( ! defined( 'WIO_PLUGIN_ACTIVE' ) ) {
$this->registerPage( 'WCL_ImageOptimizationPage', WCL_PLUGIN_DIR . '/admin/pages/class-pages-image-optimization.php' );
}
if ( ! defined( 'WHLP_PLUGIN_ACTIVE' ) ) {
$this->registerPage( 'WCL_HideLoginPage', WCL_PLUGIN_DIR . '/admin/pages/class-pages-hide-login-page.php' );
}
} catch ( Exception $e ) {
throw new Exception( $e->getMessage() );
}
}
/**
* Выполняет глобальные php сценарии
*
* @author Alexander Kovalev <alex.kovalevv@gmail.com>
* @since 1.0.0
*/
private function global_scripts() {
require_once( WCL_PLUGIN_DIR . '/includes/boot.php' );
require_once( WCL_PLUGIN_DIR . '/includes/classes/class.configurate-performance.php' );
require_once( WCL_PLUGIN_DIR . '/includes/classes/class.configurate-google-performance.php' );
require_once( WCL_PLUGIN_DIR . '/includes/classes/class.configurate-privacy.php' );
require_once( WCL_PLUGIN_DIR . '/includes/classes/class.configurate-security.php' );
require_once( WCL_PLUGIN_DIR . '/includes/classes/class.configurate-seo.php' );
new WCL_ConfigPerformance( $this );
new WCL_ConfigGooglePerformance( $this );
new WCL_ConfigPrivacy( $this );
new WCL_ConfigSecurity( $this );
new WCL_ConfigSeo( $this );
}
/**
* @return bool
*/
public function currentUserCan() {
$permission = $this->isNetworkActive() ? 'manage_network' : 'manage_options';
return current_user_can( $permission );
}
/**
* @param string $component_name
*
* @return bool
*/
public function is_activate_component( $component_name ) {
if ( ! is_string( $component_name ) ) {
return false;
}
$deactivate_components = $this->getPopulateOption( 'deactive_preinstall_components', [] );
if ( ! is_array( $deactivate_components ) ) {
// Всегда отключем комонент кеша, для совместимости с премиум плагином.
// С версии Clearfy 2.1.0 мы сделали кеширующий компонент бесплатным и
// перенесли в этот плагин. Поэтому, чтобы не было конфликтом между старым
// и новым компонетом кеша, мы отключаем старый компонент всегда.
$deactivate_components = [ 'cache' ];
} else {
// Всегда отключем комонент кеша, для совместимости с премиум плагином.
// С версии Clearfy 2.1.0 мы сделали кеширующий компонент бесплатным и
// перенесли в этот плагин. Поэтому, чтобы не было конфликтом между старым
// и новым компонетом кеша, мы отключаем старый компонент всегда.
$deactivate_components[] = 'cache';
}
if ( $deactivate_components && in_array( $component_name, $deactivate_components ) ) {
return false;
}
return true;
}
/**
* @param string $component_name
*
* @return bool
*/
public function isActivateComponent( $component_name ) {
return $this->is_activate_component( $component_name );
}
/**
* @param string $component_name
*
* @return bool
*/
public function deactivateComponent( $component_name ) {
if ( ! $this->is_activate_component( $component_name ) ) {
return true;
}
do_action( 'wbcr_clearfy_pre_deactivate_component', $component_name );
$this->deactivate_component( $component_name );
do_action( 'wbcr_clearfy_deactivated_component', $component_name );
return true;
}
/**
* @param string $component_name
*
* @return bool
*/
public function activateComponent( $component_name ) {
if ( $this->is_activate_component( $component_name ) ) {
return true;
}
do_action( 'wbcr_clearfy_pre_activate_component', $component_name );
return $this->activate_component( $component_name );
}
/**
* Allows you to get a button to install the plugin component
*
* @param $component_type
* @param $slug
* param $premium
*
* @return \WBCR\Factory_480\Components\Install_Button
*/
public function getInstallComponentsButton( $component_type, $slug ) {
return $this->get_install_component_button( $component_type, $slug );
}
/**
* Allows you to get a button to delete the plugin component
*
* @param $component_type
* @param $slug
*
* @return \WBCR\Factory_480\Components\Delete_Button
*/
public function getDeleteComponentsButton( $component_type, $slug ) {
return $this->get_delete_component_button( $component_type, $slug );
}
}