PluginProbe
Elementor Website Builder – more than just a page builder / 3.7.4
Elementor Website Builder – more than just a page builder v3.7.4
4.3.0-beta2 4.3.0-beta1 4.2.4 4.2.3 4.2.2 4.2.1 4.2.0 4.1.5 4.2.0-beta2 4.2.0-dev2 4.2.0-beta1 4.1.4 4.1.3 4.1.2 4.1.1 4.1.0 4.1.0-beta3 4.1.0-dev3 4.0.9 4.1.0-beta2 4.1.0-dev2 4.0.8 4.1.0-beta1 4.1.0-dev1 4.0.7 All 451 releases
← All changes | core/experiments/wp-cli.php +49 -103 4.2.03.7.4 View file →
@@ -1,5 +1,6 @@
1 1 <?php
2 +
2 3 namespace Elementor\Core\Experiments;
3 4
4 5 use Elementor\Core\Experiments\Manager as Experiments_Manager;
5 6 use Elementor\Plugin;
@@ -4,9 +5,9 @@
4 5 use Elementor\Core\Experiments\Manager as Experiments_Manager;
5 6 use Elementor\Plugin;
6 7
7 8 if ( ! defined( 'ABSPATH' ) ) {
8 - exit; // Exit if accessed directly.
9 + exit; // Exit if accessed directly
9 10 }
10 11
11 12 class Wp_Cli extends \WP_CLI_Command {
12 13
@@ -17,9 +18,9 @@
17 18 *
18 19 * 1. wp elementor experiments activate container
19 20 * - This will activate the Container experiment.
20 21 *
21 - * @param array $args
22 + * @param array $args
22 23 * @param array|null $assoc_args - Arguments from WP CLI command.
23 24 */
24 25 public function activate( $args, $assoc_args ) {
25 26 if ( empty( $args[0] ) ) {
@@ -27,27 +28,34 @@
27 28 }
28 29
29 30 $is_network = $this->is_network( $assoc_args );
30 31
31 - $experiments = $this->parse_experiments( $args[0] );
32 - $plural = $this->get_plural( $experiments );
33 - $success = 'Experiment' . $plural . ' activated successfully';
34 - $error = 'Cannot activate experiment' . $plural;
32 + // Activate experiment callback.
33 + $activate = function ( $site = '', $id = null ) use ( $args, $is_network ) {
34 + $success = 'Experiment activated successfully';
35 + $error = 'Cannot activate experiment';
35 36
36 - if ( $is_network ) {
37 - $success .= " for site {$site}";
38 - $error .= " for site {$site}";
39 - }
37 + if ( $is_network ) {
38 + $success .= " for site {$site}";
39 + $error .= " for site {$site}";
40 + }
40 41
41 - $experiments_manager = Plugin::instance()->experiments;
42 - if ( ! $this->check_experiments_exist( $experiments_manager, $experiments ) ) {
43 - \WP_CLI::error( 'Experiments do not exist' . $args[0] );
44 - }
42 + $experiments_manager = Plugin::instance()->experiments;
43 + $option = $experiments_manager->get_feature_option_key( $args[0] );
45 44
45 + update_option( $option, Experiments_Manager::STATE_ACTIVE );
46 +
47 + try {
48 + \WP_CLI::success( $success );
49 + } catch ( \Exception $e ) {
50 + \WP_CLI::error( $error );
51 + }
52 + };
53 +
46 54 if ( $is_network ) {
47 - $this->foreach_sites( $this->update_experiment_state, $experiments, Experiments_Manager::STATE_ACTIVE, $is_network, $success, $error );
55 + $this->foreach_sites( $activate );
48 56 } else {
49 - $this->update_experiment_state( $experiments, Experiments_Manager::STATE_ACTIVE, $is_network, $success, $error );
57 + $activate();
50 58 }
51 59 }
52 60
53 61 /**
@@ -57,9 +65,9 @@
57 65 *
58 66 * 1. wp elementor experiments deactivate container
59 67 * - This will deactivate the Container experiment.
60 68 *
61 - * @param array $args
69 + * @param array $args
62 70 * @param array|null $assoc_args - Arguments from WP CLI command.
63 71 */
64 72 public function deactivate( $args, $assoc_args ) {
65 73 if ( empty( $args[0] ) ) {
@@ -67,47 +75,38 @@
67 75 }
68 76
69 77 $is_network = $this->is_network( $assoc_args );
70 78
71 - $experiments = $this->parse_experiments( $args[0] );
72 - $plural = $this->get_plural( $experiments );
73 - $success = 'Experiment' . $plural . ' deactivated successfully';
74 - $error = 'Cannot deactivate experiment' . $plural;
79 + // Activate experiment callback.
80 + $activate = function ( $site = '' ) use ( $args, $is_network ) {
81 + $success = 'Experiment deactivated successfully';
82 + $error = 'Cannot deactivate experiment';
75 83
76 - $experiments_manager = Plugin::instance()->experiments;
77 - if ( ! $this->check_experiments_exist( $experiments_manager, $experiments ) ) {
78 - \WP_CLI::error( 'Experiments do not exist' );
79 - }
84 + if ( $is_network ) {
85 + $success .= " for site {$site}";
86 + $error .= " for site {$site}";
87 + }
80 88
89 + $experiments_manager = Plugin::instance()->experiments;
90 + $option = $experiments_manager->get_feature_option_key( $args[0] );
91 +
92 + update_option( $option, Experiments_Manager::STATE_INACTIVE );
93 +
94 + try {
95 + \WP_CLI::success( $success );
96 + } catch ( \Exception $e ) {
97 + \WP_CLI::error( $error );
98 + }
99 + };
100 +
81 101 if ( $is_network ) {
82 - $this->foreach_sites( $this->update_experiment_state, $experiments, Experiments_Manager::STATE_INACTIVE, $is_network, $success, $error );
102 + $this->foreach_sites( $activate );
83 103 } else {
84 - $this->update_experiment_state( $experiments, Experiments_Manager::STATE_INACTIVE, $is_network, $success, $error );
104 + $activate();
85 105 }
86 106 }
87 107
88 108 /**
89 - * Experiment Status
90 - *
91 - * ## EXAMPLES
92 - *
93 - * 1. wp elementor experiments status container
94 - * - This will return the status of Container experiment. (active/inactive)
95 - *
96 - * @param array $args
97 - */
98 - public function status( $args ) {
99 - if ( empty( $args[0] ) ) {
100 - \WP_CLI::error( 'Please specify an experiment.' );
101 - }
102 -
103 - $experiments_manager = Plugin::$instance->experiments;
104 - $experiments_status = $experiments_manager->is_feature_active( $args[0] ) ? 'active' : 'inactive';
105 -
106 - \WP_CLI::line( $experiments_status );
107 - }
108 -
109 - /**
110 109 * Determine if the current website is a multisite.
111 110 *
112 111 * @param array|null $assoc_args - Arguments from WP CLI command.
113 112 *
@@ -123,9 +122,9 @@
123 122 * @param callable $callback - Callback to execute. Gets the site name & id as parameters.
124 123 *
125 124 * @return void
126 125 */
127 - private function foreach_sites( callable $callback, $experiments, $state, $is_network, $success, $error ) {
126 + private function foreach_sites( callable $callback ) {
128 127 $blog_ids = get_sites( [
129 128 'fields' => 'ids',
130 129 'number' => 0,
131 130 ] );
@@ -132,63 +131,10 @@
132 131
133 132 foreach ( $blog_ids as $blog_id ) {
134 133 switch_to_blog( $blog_id );
135 134
136 - $callback( get_option( 'home' ), $experiments, $state, $is_network, $success, $error );
135 + $callback( get_option( 'home' ), $blog_id );
137 136
138 137 restore_current_blog();
139 - }
140 - }
141 -
142 - /**
143 - * @param string $experiments_str comma delimited string of experiments.
144 - *
145 - * @return array array of experiments
146 - */
147 - private function parse_experiments( $experiments_str ) {
148 - return explode( ',', $experiments_str );
149 - }
150 -
151 - /**
152 - * @param array $experiments experiments.
153 - *
154 - * @return string plural
155 - */
156 - private function get_plural( $experiments ) {
157 - return count( $experiments ) > 0 ? 's' : '';
158 - }
159 -
160 - /**
161 - * @param Experiments_Manager $experiments_manager manager.
162 - * @param array $experiments experiments.
163 - *
164 - * @return bool true when all experiments exist, otherwise false
165 - */
166 - private function check_experiments_exist( $experiments_manager, $experiments ) {
167 - foreach ( $experiments as $experiment ) {
168 - $feature = $experiments_manager->get_features( $experiment );
169 - if ( ! $feature ) {
170 - return false;
171 - }
172 - }
173 - return true;
174 - }
175 -
176 - private function update_experiment_state( $experiments, $state, $is_network, $success_message, $error_message, $site_id = '' ) {
177 - if ( $is_network ) {
178 - $success_message .= " for site {$site}";
179 - $error_message .= " for site {$site}";
180 - }
181 -
182 - $experiments_manager = Plugin::instance()->experiments;
183 - foreach ( $experiments as $experiment ) {
184 - $option = $experiments_manager->get_feature_option_key( $experiment );
185 - update_option( $option, $state );
186 - }
187 -
188 - try {
189 - \WP_CLI::success( $success_message );
190 - } catch ( \Exception $e ) {
191 - \WP_CLI::error( $error_message );
192 138 }
193 139 }
194 140 }