PluginProbe
Elementor Website Builder – more than just a page builder / 3.29.1
Elementor Website Builder – more than just a page builder v3.29.1
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
elementor / core / experiments / wp-cli.php

wp-cli.php in Elementor Website Builder – more than just a page builder 3.29.1, at core/experiments/wp-cli.php

195 lines 5.4 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 namespace Elementor\Core\Experiments;
3
4 use Elementor\Core\Experiments\Manager as Experiments_Manager;
5 use Elementor\Plugin;
6
7 if ( ! defined( 'ABSPATH' ) ) {
8 exit; // Exit if accessed directly.
9 }
10
11 class Wp_Cli extends \WP_CLI_Command {
12
13 /**
14 * Activate an Experiment
15 *
16 * ## EXAMPLES
17 *
18 * 1. wp elementor experiments activate container
19 * - This will activate the Container experiment.
20 *
21 * @param array $args
22 * @param array|null $assoc_args - Arguments from WP CLI command.
23 */
24 public function activate( $args, $assoc_args ) {
25 if ( empty( $args[0] ) ) {
26 \WP_CLI::error( 'Please specify an experiment.' );
27 }
28
29 $is_network = $this->is_network( $assoc_args );
30
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;
35
36 if ( $is_network ) {
37 $success .= " for site {$site}";
38 $error .= " for site {$site}";
39 }
40
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 }
45
46 if ( $is_network ) {
47 $this->foreach_sites( $this->update_experiment_state, $experiments, Experiments_Manager::STATE_ACTIVE, $is_network, $success, $error );
48 } else {
49 $this->update_experiment_state( $experiments, Experiments_Manager::STATE_ACTIVE, $is_network, $success, $error );
50 }
51 }
52
53 /**
54 * Deactivate an Experiment
55 *
56 * ## EXAMPLES
57 *
58 * 1. wp elementor experiments deactivate container
59 * - This will deactivate the Container experiment.
60 *
61 * @param array $args
62 * @param array|null $assoc_args - Arguments from WP CLI command.
63 */
64 public function deactivate( $args, $assoc_args ) {
65 if ( empty( $args[0] ) ) {
66 \WP_CLI::error( 'Please specify an experiment.' );
67 }
68
69 $is_network = $this->is_network( $assoc_args );
70
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;
75
76 $experiments_manager = Plugin::instance()->experiments;
77 if ( ! $this->check_experiments_exist( $experiments_manager, $experiments ) ) {
78 \WP_CLI::error( 'Experiments do not exist' );
79 }
80
81 if ( $is_network ) {
82 $this->foreach_sites( $this->update_experiment_state, $experiments, Experiments_Manager::STATE_INACTIVE, $is_network, $success, $error );
83 } else {
84 $this->update_experiment_state( $experiments, Experiments_Manager::STATE_INACTIVE, $is_network, $success, $error );
85 }
86 }
87
88 /**
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 * Determine if the current website is a multisite.
111 *
112 * @param array|null $assoc_args - Arguments from WP CLI command.
113 *
114 * @return bool
115 */
116 private function is_network( $assoc_args ) {
117 return ! empty( $assoc_args['network'] ) && is_multisite();
118 }
119
120 /**
121 * Iterate over network sites and execute a callback.
122 *
123 * @param callable $callback - Callback to execute. Gets the site name & id as parameters.
124 *
125 * @return void
126 */
127 private function foreach_sites( callable $callback, $experiments, $state, $is_network, $success, $error ) {
128 $blog_ids = get_sites( [
129 'fields' => 'ids',
130 'number' => 0,
131 ] );
132
133 foreach ( $blog_ids as $blog_id ) {
134 switch_to_blog( $blog_id );
135
136 $callback( get_option( 'home' ), $experiments, $state, $is_network, $success, $error );
137
138 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 }
193 }
194 }
195