balmet.com

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs

elementor-dev-notice.php (3976B)


      1 <?php
      2 namespace Elementor\Core\Admin\Notices;
      3 
      4 use Elementor\User;
      5 use Elementor\Plugin;
      6 use Elementor\Core\Experiments\Manager as Experiments_Manager;
      7 
      8 if ( ! defined( 'ABSPATH' ) ) {
      9 	exit; // Exit if accessed directly.
     10 }
     11 
     12 class Elementor_Dev_Notice extends Base_Notice {
     13 	/**
     14 	 * Notice ID.
     15 	 */
     16 	const ID = 'elementor_dev_promote';
     17 
     18 	/**
     19 	 * Plugin slug to install.
     20 	 */
     21 	const PLUGIN_SLUG = 'elementor-beta';
     22 
     23 	/**
     24 	 * Plugin name.
     25 	 */
     26 	const PLUGIN_NAME = 'elementor-beta/elementor-beta.php';
     27 
     28 	/**
     29 	 * Holds the plugins names.
     30 	 *
     31 	 * @var array
     32 	 */
     33 	private $plugins = [];
     34 
     35 	/**
     36 	 * If one of those plugin is installed it will show the notice.
     37 	 *
     38 	 * @var string[]
     39 	 */
     40 	private $promotion_plugins = [
     41 		'woocommerce-beta-tester/woocommerce-beta-tester.php',
     42 		'wp-jquery-update-test/wp-jquery-update-test.php',
     43 		'wordpress-beta-tester/wp-beta-tester.php',
     44 		'gutenberg/gutenberg.php',
     45 	];
     46 
     47 	/**
     48 	 * If one of those options is enabled it will show the notice.
     49 	 *
     50 	 * @var string[]
     51 	 */
     52 	private $promotion_options = [
     53 		'elementor_beta',
     54 	];
     55 
     56 	/**
     57 	 * @inheritDoc
     58 	 */
     59 	public function should_print() {
     60 		return current_user_can( 'install_plugins' ) &&
     61 			! User::is_user_notice_viewed( static::ID ) &&
     62 			! $this->is_elementor_dev_installed() &&
     63 			! $this->is_install_screen() &&
     64 			(
     65 				$this->has_at_least_one_active_experiment() ||
     66 				$this->is_promotion_plugins_installed() ||
     67 				$this->is_promotion_options_enabled()
     68 			);
     69 	}
     70 
     71 	/**
     72 	 * @inheritDoc
     73 	 */
     74 	public function get_config() {
     75 		return [
     76 			'id' => static::ID,
     77 			'title' => esc_html__( 'Elementor Developer Edition', 'elementor' ),
     78 			'description' => __(
     79 				'Get a sneak peek at our in progress development versions, and help us improve Elementor to perfection. Developer Edition releases contain experimental functionality for testing purposes.',
     80 				'elementor'
     81 			),
     82 			'button' => [
     83 				'text' => esc_html__( 'Install & Activate', 'elementor' ),
     84 				'url' => wp_nonce_url(
     85 					self_admin_url( 'update.php?action=install-plugin&plugin=' . static::PLUGIN_SLUG ),
     86 					'install-plugin_' . static::PLUGIN_SLUG
     87 				),
     88 				'type' => 'cta',
     89 			],
     90 		];
     91 	}
     92 
     93 	/**
     94 	 * Return all the plugins names.
     95 	 *
     96 	 * This method is protected so it can be mocked in tests.
     97 	 *
     98 	 * @return array
     99 	 */
    100 	protected function get_plugins() {
    101 		if ( ! $this->plugins ) {
    102 			$this->plugins = array_keys( get_plugins() );
    103 		}
    104 
    105 		return $this->plugins;
    106 	}
    107 
    108 	/**
    109 	 * Checks if elementor dev is installed
    110 	 *
    111 	 * @return bool
    112 	 */
    113 	private function is_elementor_dev_installed() {
    114 		return in_array( static::PLUGIN_NAME, $this->get_plugins(), true );
    115 	}
    116 
    117 	/**
    118 	 * Checks if the admin screen is install screen.
    119 	 *
    120 	 * @return bool
    121 	 */
    122 	private function is_install_screen() {
    123 		$screen = get_current_screen();
    124 
    125 		if ( ! $screen ) {
    126 			return false;
    127 		}
    128 
    129 		return 'update' === $screen->id;
    130 	}
    131 
    132 	/**
    133 	 * Checks if is one of the promotion plugins is installed
    134 	 *
    135 	 * @return bool
    136 	 */
    137 	private function is_promotion_plugins_installed() {
    138 		return array_reduce( $this->promotion_plugins, function ( $should_show_notice, $plugin_name ) {
    139 			if ( $should_show_notice ) {
    140 				return true;
    141 			}
    142 
    143 			return in_array( $plugin_name, $this->get_plugins(), true );
    144 		}, false );
    145 	}
    146 
    147 	/**
    148 	 * Checks if is one of the promotion options is enable.
    149 	 *
    150 	 * @return bool
    151 	 */
    152 	private function is_promotion_options_enabled() {
    153 		return array_reduce( $this->promotion_options, function ( $should_show_notice, $option ) {
    154 			if ( $should_show_notice ) {
    155 				return true;
    156 			}
    157 
    158 			return 'yes' === get_option( $option, 'no' );
    159 		}, false );
    160 	}
    161 
    162 	/**
    163 	 * Checks if as at least one active experiment (The state must be "active" and not default-active).
    164 	 *
    165 	 * @return bool
    166 	 */
    167 	private function has_at_least_one_active_experiment() {
    168 		foreach ( Plugin::$instance->experiments->get_features() as $feature_name => $feature ) {
    169 			if ( Experiments_Manager::STATE_ACTIVE === $feature['state'] ) {
    170 				return true;
    171 			}
    172 		}
    173 
    174 		return false;
    175 	}
    176 }