Файловый менеджер - Редактировать - /var/www/xthruster/html/wp-content/uploads/flags/announcements.tar
Назад
classes/announcement.php 0000644 00000002362 14721647665 0011431 0 ustar 00 <?php namespace Elementor\Modules\Announcements\Classes; if ( ! defined( 'ABSPATH' ) ) { exit; // Exit if accessed directly. } class Announcement { /** * @var array */ protected $raw_data; /** * @var array */ protected $triggers; public function __construct( array $data ) { $this->raw_data = $data; $this->set_triggers(); } /** * @return array */ protected function get_triggers(): array { return $this->triggers; } protected function set_triggers() { $triggers = $this->raw_data['triggers'] ?? []; foreach ( $triggers as $trigger ) { $this->triggers[] = Utils::get_trigger_object( $trigger ); } } /** * is_active * @return bool */ public function is_active(): bool { $triggers = $this->get_triggers(); if ( empty( $triggers ) ) { return true; } foreach ( $triggers as $trigger ) { if ( ! $trigger->is_active() ) { return false; } } return true; } public function after_triggered() { foreach ( $this->get_triggers() as $trigger ) { if ( $trigger->is_active() ) { $trigger->after_triggered(); } } } /** * @return array */ public function get_prepared_data(): array { $raw_data = $this->raw_data; unset( $raw_data['triggers'] ); return $raw_data; } } classes/trigger-base.php 0000644 00000000672 14721647665 0011314 0 ustar 00 <?php namespace Elementor\Modules\Announcements\Classes; if ( ! defined( 'ABSPATH' ) ) { exit; // Exit if accessed directly. } abstract class Trigger_Base { /** * @var string */ protected $name = 'trigger-base'; /** * @return string */ public function get_name(): string { return $this->name; } /** * @return bool */ public function is_active(): bool { return true; } public function after_triggered() { } } classes/utils.php 0000644 00000001436 14721647665 0010100 0 ustar 00 <?php namespace Elementor\Modules\Announcements\Classes; use Elementor\Modules\Announcements\Triggers\{ IsFlexContainerInactive, AiStarted }; if ( ! defined( 'ABSPATH' ) ) { exit; // Exit if accessed directly. } class Utils { /** * get_trigger_object * * @param $trigger * * @return IsFlexContainerInactive|false */ public static function get_trigger_object( $trigger ) { $object_trigger = apply_filters( 'elementor/announcements/trigger_object', false, $trigger ); if ( false !== $object_trigger ) { return $object_trigger; } //@TODO - replace with trigger manager switch ( $trigger['action'] ) { case 'isFlexContainerInactive': return new IsFlexContainerInactive(); case 'aiStarted': return new AiStarted(); default: return false; } } } triggers/is-flex-container-inactive.php 0000644 00000002241 14721647665 0014253 0 ustar 00 <?php namespace Elementor\Modules\Announcements\Triggers; use Elementor\Modules\Announcements\Classes\Trigger_Base; use Elementor\Plugin; if ( ! defined( 'ABSPATH' ) ) { exit; // Exit if accessed directly. } class IsFlexContainerInactive extends Trigger_Base { const USER_META_KEY = 'announcements_user_counter'; /** * @var string */ protected $name = 'is-flex-container-inactive'; /** * @return int */ protected function get_view_count(): int { $user_counter = $this->get_user_announcement_count(); return ! empty( $user_counter ) ? (int) $user_counter : 0; } public function after_triggered() { $new_counter = $this->get_view_count() + 1; update_user_meta( get_current_user_id(), self::USER_META_KEY, $new_counter ); } /** * @return bool */ public function is_active(): bool { $is_feature_active = Plugin::$instance->experiments->is_feature_active( 'container' ); $counter = $this->get_user_announcement_count(); return ! $is_feature_active && (int) $counter < 1; } /** * @return string */ private function get_user_announcement_count(): string { return get_user_meta( get_current_user_id(), self::USER_META_KEY, true ); } } triggers/ai-started.php 0000644 00000001152 14721647665 0011161 0 ustar 00 <?php namespace Elementor\Modules\Announcements\Triggers; use Elementor\Modules\Announcements\Classes\Trigger_Base; use Elementor\User; if ( ! defined( 'ABSPATH' ) ) { exit; // Exit if accessed directly. } class AiStarted extends Trigger_Base { /** * @var string */ protected $name = 'ai-get-started-announcement'; public function after_triggered() { User::set_introduction_viewed( [ 'introductionKey' => $this->name ] ); } /** * @return bool */ public function is_active(): bool { return ! User::get_introduction_meta( 'ai_get_started' ) && ! User::get_introduction_meta( $this->name ); } } module.php 0000644 00000010057 14721647665 0006567 0 ustar 00 <?php namespace Elementor\Modules\Announcements; use Elementor\Core\Base\App as BaseApp; use Elementor\Modules\Ai\Preferences; use Elementor\Modules\Announcements\Classes\Announcement; use Elementor\Settings as ElementorSettings; if ( ! defined( 'ABSPATH' ) ) { exit; // Exit if accessed directly. } class Module extends BaseApp { /** * @return bool */ public static function is_active(): bool { return is_admin(); } /** * @return string */ public function get_name(): string { return 'announcements'; } /** * Render wrapper for the app to load. */ private function render_app_wrapper() { ?> <div id="e-announcements-root"></div> <?php } /** * Enqueue app scripts. */ private function enqueue_scripts() { wp_enqueue_script( 'announcements-app', $this->get_js_assets_url( 'announcements-app' ), [ 'wp-i18n', ], ELEMENTOR_VERSION, true ); wp_set_script_translations( 'announcements-app', 'elementor' ); $this->print_config( 'announcements-app' ); } /** * Get initialization settings to use in frontend. * * @return array[] */ protected function get_init_settings(): array { $active_announcements = $this->get_active_announcements(); $additional_settings = []; foreach ( $active_announcements as $announcement ) { $additional_settings[] = $announcement->get_prepared_data(); //@TODO - replace with ajax request from the front after actually triggered $announcement->after_triggered(); } return [ 'announcements' => $additional_settings, ]; } /** * Enqueue the module styles. */ public function enqueue_styles() { wp_enqueue_style( 'announcements-app', $this->get_css_assets_url( 'modules/announcements/announcements' ), [], ELEMENTOR_VERSION ); } /** * Retrieve all announcement in raw format ( array ). * * @return array[] */ private function get_raw_announcements(): array { $raw_announcements = []; if ( Preferences::is_ai_enabled( get_current_user_id() ) ) { $raw_announcements[] = $this->get_ai_announcement_data(); } // DO NOT USE THIS FILTER return apply_filters( 'elementor/announcements/raw_announcements', $raw_announcements ); } private function get_ai_announcement_data(): array { return [ 'title' => __( 'Discover your new superpowers ', 'elementor' ), 'description' => __( '<p>With AI for text, code, image generation and editing, you can bring your vision to life faster than ever. Start your free trial now - <b>no credit card required!</b></p>', 'elementor' ), 'media' => [ 'type' => 'image', 'src' => ELEMENTOR_ASSETS_URL . 'images/announcement.png?' . ELEMENTOR_VERSION, ], 'cta' => [ [ 'label' => __( 'Let\'s do it', 'elementor' ), 'variant' => 'primary', 'target' => '_top', 'url' => '#welcome-ai', ], [ 'label' => __( 'Skip', 'elementor' ), 'variant' => 'secondary', ], ], 'triggers' => [ [ 'action' => 'aiStarted', ], ], ]; } /** * Retrieve all announcement objects. * * @return array */ private function get_announcements(): array { $announcements = []; foreach ( $this->get_raw_announcements() as $announcement_data ) { $announcements[] = new Announcement( $announcement_data ); } return $announcements; } /** * Retrieve all active announcement objects. * * @return array */ private function get_active_announcements(): array { $active_announcements = []; foreach ( $this->get_announcements() as $announcement ) { if ( $announcement->is_active() ) { $active_announcements[] = $announcement; } } return $active_announcements; } public function __construct() { parent::__construct(); add_action( 'elementor/init', [ $this, 'on_elementor_init' ] ); } public function on_elementor_init() { if ( empty( $this->get_active_announcements() ) ) { return; } add_action( 'elementor/editor/footer', function () { $this->render_app_wrapper(); } ); add_action( 'elementor/editor/after_enqueue_scripts', function () { $this->enqueue_scripts(); $this->enqueue_styles(); } ); } }
| ver. 1.4 |
Github
|
.
| PHP 7.4.3-4ubuntu2.24 | Генерация страницы: 0 |
proxy
|
phpinfo
|
Настройка