PluginProbe ʕ •ᴥ•ʔ
Premium Addons for Elementor – Powerful Elementor Templates & Widgets / 4.8.9
Premium Addons for Elementor – Powerful Elementor Templates & Widgets v4.8.9
4.11.84 4.11.83 4.11.82 4.11.80 4.11.81 4.11.79 4.11.78 4.11.77 4.11.76 4.11.75 3.20.5 4.11.69 3.20.6 4.11.7 3.20.7 4.11.70 3.20.8 4.11.71 3.20.9 4.11.72 3.21.1 4.11.73 3.21.2 4.11.74 3.21.3 4.11.8 3.21.4 4.11.9 3.21.5 4.2.0 3.21.6 4.2.1 3.3.0 4.2.2 3.3.1 4.2.3 3.3.2 4.2.4 3.3.3 4.2.5 3.3.4 4.2.6 3.3.5 4.2.7 3.3.6 4.2.8 3.3.7 4.2.9 3.3.8 4.3.0 3.3.9 4.3.1 3.4.0 4.3.2 3.4.1 4.3.3 3.4.2 4.3.4 3.4.3 4.3.5 3.4.4 4.3.6 3.4.5 4.3.7 3.4.6 4.3.8 3.4.7 4.3.9 3.4.8 4.4.0 3.4.9 4.4.1 3.5.0 4.4.2 3.5.1 4.4.3 3.5.2 4.4.4 3.5.3 4.4.5 3.5.4 4.4.6 3.5.5 4.4.7 3.5.6 4.4.8 3.5.7 4.4.9 3.5.8 4.5.0 3.5.9 4.5.1 3.6.0 4.5.2 3.6.1 4.5.3 3.6.2 4.5.4 3.6.3 4.5.5 3.6.4 4.5.6 3.6.5 4.5.7 3.6.6 4.5.8 3.6.7 4.5.9 3.6.8 4.6.0 3.6.9 4.6.1 3.7.0 4.7.0 3.7.1 4.7.1 3.7.2 4.7.2 3.7.3 4.7.3 3.7.4 4.7.4 3.7.5 4.7.5 3.7.6 4.7.6 3.7.7 4.7.7 3.7.8 4.7.8 3.7.9 4.7.9 3.8.0 4.8.0 3.8.1 4.8.1 3.8.2 4.8.10 3.8.3 4.8.11 3.8.4 4.8.2 3.8.5 4.8.3 3.8.6 4.8.4 3.8.7 4.8.5 3.8.8 4.8.6 3.8.9 4.8.7 3.9.0 4.8.8 3.9.1 4.8.9 3.9.2 4.9.0 3.9.3 4.9.0-beta1 3.9.4 4.9.0-beta2 3.9.5 4.9.1 3.9.6 4.9.10 3.9.7 4.9.11 3.9.8 4.9.12 3.9.9 4.9.13 4.0.1 4.9.14 4.0.3 4.9.15 4.0.4 4.9.16 4.0.5 4.9.17 4.0.6 4.9.18 4.0.7 4.9.19 4.0.8 4.9.2 4.0.9 4.9.20 4.1.0 4.9.21 4.1.1 4.9.22 4.1.2 4.9.23 4.1.3 4.9.24 trunk 4.1.4 4.9.25 1.0 4.1.5 4.9.26 1.01 4.1.6 4.9.27 1.02 4.1.7 4.9.28 1.03 4.1.8 4.9.29 1.04 4.1.9 4.9.3 1.05 4.10.0 4.9.30 1.06 4.10.1 4.9.31 1.07 4.10.10 4.9.32 1.08 4.10.11 4.9.33 1.09 4.10.12 4.9.34 2.0 4.10.13 4.9.35 2.0.1 4.10.14 4.9.36 2.0.2 4.10.15 4.9.37 2.0.3 4.10.16 4.9.38 2.0.4 4.10.17 4.9.39 2.0.5 4.10.18 4.9.4 2.0.6 4.10.19 4.9.40 2.0.7 4.10.2 4.9.41 2.0.8 4.10.20 4.9.42 2.0.9 4.10.21 4.9.43 2.1.0 4.10.22 4.9.45 2.1.1 4.10.23 4.9.46 2.1.2 4.10.24 4.9.47 2.1.3 4.10.25 4.9.48 2.1.4 4.10.26 4.9.49 2.1.5 4.10.27 4.9.5 2.1.5-beta1 4.10.28 4.9.50 2.1.6 4.10.29 4.9.51 2.1.7 4.10.3 4.9.52 2.1.8 4.10.30 4.9.53 2.1.9 4.10.31 4.9.54 2.2.0 4.10.32 4.9.55 2.2.1 4.10.33 4.9.56 2.2.2 4.10.34 4.9.57 2.2.3 4.10.35 4.9.6 2.2.4 4.10.36 4.9.7 2.2.5 4.10.37 4.9.8 2.2.6 4.10.38 4.9.9 2.2.7 4.10.39 2.2.8 4.10.4 2.2.9 4.10.40 2.3.0 4.10.41 2.3.1 4.10.42 2.3.2 4.10.43 2.3.3 4.10.44 2.3.4 4.10.45 2.3.5 4.10.46 2.3.6 4.10.47 2.3.7 4.10.48 2.3.8 4.10.49 2.3.9 4.10.5 2.4.0 4.10.50 2.4.1 4.10.51 2.5.0 4.10.52 2.5.1 4.10.53 2.5.2 4.10.54 2.5.3 4.10.55 2.5.4 4.10.56 2.5.5 4.10.57 2.5.6 4.10.58 2.5.7 4.10.59 2.5.8 4.10.6 2.5.9 4.10.60 2.6.0 4.10.61 2.6.1 4.10.62 2.6.2 4.10.63 2.6.3 4.10.64 2.6.4 4.10.65 2.6.5 4.10.66 2.6.6 4.10.67 2.6.7 4.10.68 2.6.8 4.10.69 2.6.9 4.10.7 2.7.0 4.10.70 2.7.1 4.10.71 2.7.2 4.10.72 2.7.3 4.10.73 2.7.4 4.10.74 2.7.5 4.10.75 2.7.6 4.10.76 2.7.7 4.10.77 2.7.8 4.10.78 2.7.9 4.10.79 2.8.0 4.10.8 2.8.1 4.10.80 2.8.2 4.10.81 2.8.3 4.10.82 2.8.4 4.10.83 2.8.5 4.10.84 2.8.6 4.10.85 2.8.7 4.10.86 2.8.8 4.10.87 2.8.9 4.10.88 2.9.0 4.10.89 2.9.1 4.10.9 2.9.2 4.10.90 2.9.3 4.11.0 2.9.4 4.11.1 2.9.5 4.11.10 2.9.6 4.11.11 2.9.7 4.11.12 2.9.8 4.11.13 2.9.9 4.11.14 3.0.0 4.11.15 3.0.1 4.11.16 3.0.2 4.11.17 3.0.3 4.11.18 3.0.4 4.11.19 3.0.5 4.11.2 3.0.6 4.11.20 3.0.7 4.11.21 3.0.8 4.11.22 3.0.9 4.11.23 3.1.0 4.11.24 3.1.1 4.11.25 3.1.2 4.11.26 3.1.3 4.11.27 3.1.4 4.11.28 3.1.5 4.11.29 3.1.6 4.11.3 3.1.7 4.11.30 3.1.8 4.11.31 3.1.9 4.11.32 3.10.0 4.11.33 3.10.1 4.11.34 3.10.2 4.11.35 3.10.3 4.11.36 3.10.4 4.11.37 3.10.5 4.11.38 3.10.6 4.11.39 3.10.7 4.11.4 3.10.8 4.11.40 3.10.9 4.11.41 3.11.0 4.11.42 3.11.1 4.11.43 3.11.2 4.11.44 3.11.3 4.11.45 3.11.4 4.11.46 3.11.5 4.11.47 3.11.6 4.11.48 3.11.7 4.11.49 3.11.8 4.11.5 3.11.9 4.11.50 3.12.0 4.11.51 3.12.1 4.11.52 3.12.2 4.11.53 3.12.3 4.11.54 3.2.0 4.11.55 3.2.1 4.11.56 3.2.2 4.11.57 3.2.3 4.11.58 3.2.4 4.11.59 3.2.5 4.11.6 3.2.6 4.11.60 3.2.7 4.11.61 3.2.8 4.11.62 3.2.9 4.11.63 3.20.0 4.11.64 3.20.1 4.11.65 3.20.2 4.11.66 3.20.3 4.11.67 3.20.4 4.11.68
premium-addons-for-elementor / includes / pa-display-conditions / pa-controls-handler.php
premium-addons-for-elementor / includes / pa-display-conditions Last commit date
conditions 4 years ago pa-controls-handler.php 4 years ago
pa-controls-handler.php
353 lines
1 <?php
2 /**
3 * PA Display Conditions::Control-Handler.
4 * Handles controls used in PA Display Conditions Addon.
5 */
6
7 namespace PremiumAddons\Includes;
8
9 use Elementor\Controls_Manager;
10 use Elementor\Repeater;
11
12 if ( ! defined( 'ABSPATH' ) ) {
13 exit; // Exit if accessed directly.
14 }
15
16 /**
17 * Class PA_Controls_Handler
18 *
19 * @since 4.7.0
20 */
21 class PA_Controls_Handler {
22
23 /**
24 * Contains Conditions Classes.
25 *
26 * @access public
27 * @var array condition classes
28 */
29 public static $conditions_classes = array();
30
31 /**
32 * Contains Conditions Keys.
33 *
34 * @access public
35 * @var array condition keys
36 */
37 public static $conditions_keys = array();
38
39 /**
40 * Holds all the conditions.
41 * Contains Conditions.
42 *
43 * @access public
44 * @var array condition.
45 */
46 public static $conditions = array();
47
48 /**
49 * Holds all the conditions.
50 *
51 * @since 4.7.0
52 * @access protected
53 * @var array condition results holder.
54 */
55 protected $conditions_results_holder = array();
56
57 /**
58 * Class Constructor.
59 */
60 public function __construct() {
61
62 $this->init_conditions();
63 $this->init_conditions_classes();
64
65 $is_edit_mode = \Elementor\Plugin::$instance->editor->is_edit_mode();
66
67 // Trigger should_rendr filters only on the frontend.
68 if ( ! $is_edit_mode ) {
69 $this->init_actions();
70 }
71
72 }
73
74 /**
75 * Initialize condition classes.
76 *
77 * @access public
78 * @since 4.7.0
79 */
80 public function init_conditions() {
81
82 static::$conditions = array(
83 'system' => array(
84 'label' => __( 'System', 'premium-addons-for-elementor' ),
85 'options' => array(
86 'browser' => __( 'Browser', 'premium-addons-for-elementor' ),
87 'device' => __( 'Device', 'premium-addons-for-elementor' ),
88 'operating_system' => __( 'Operating System', 'premium-addons-for-elementor' ),
89 ),
90 ),
91
92 'time' => array(
93 'label' => __( 'Date & Time', 'premium-addons-for-elementor' ),
94 'options' => array(
95 'day' => __( 'Day', 'premium-addons-for-elementor' ),
96 'date' => __( 'Date', 'premium-addons-for-elementor' ),
97 'date_range' => __( 'Date Range', 'premium-addons-for-elementor' ),
98 'time_range' => __( 'Time Range', 'premium-addons-for-elementor' ),
99 ),
100 ),
101
102 'userdata' => array(
103 'label' => __( 'User', 'premium-addons-for-elementor' ),
104 'options' => array(
105 'ip_location' => __( 'Location', 'premium-addons-for-elementor' ),
106 'login_status' => __( 'Login Status', 'premium-addons-for-elementor' ),
107 'user_role' => __( 'Role', 'premium-addons-for-elementor' ),
108 ),
109 ),
110
111 'other' => array(
112 'label' => __( 'Other', 'premium-addons-for-elementor' ),
113 'options' => array(
114 'lang' => __( 'Site Language', 'premium-addons-for-elementor' ),
115 ),
116 ),
117
118 'postdata' => array(
119 'label' => __( 'Post/Page', 'premium-addons-for-elementor' ),
120 'options' => array(
121 'post' => __( 'Post', 'premium-addons-for-elementor' ),
122 'post_type' => __( 'Post Type', 'premium-addons-for-elementor' ),
123 'page' => __( 'Page', 'premium-addons-for-elementor' ),
124 ),
125 ),
126
127 'urlparams' => array(
128 'label' => __( 'URL (PRO)', 'premium-addons-for-elementor' ),
129 'options' => array(
130 'url_referer' => __( 'URL Parameters', 'premium-addons-for-elementor' ),
131 ),
132 ),
133
134 );
135
136 }
137
138 /**
139 * Initialize condition classes.
140 *
141 * @access public
142 * @since 4.7.0
143 */
144 public function init_conditions_classes() {
145
146 self::$conditions_keys = apply_filters(
147 'pa_display_conditions_keys',
148 array(
149 'browser',
150 'device',
151 'day',
152 'date',
153 'date_range',
154 'time_range',
155 'ip_location',
156 'lang',
157 'login_status',
158 'post',
159 'post_type',
160 'page',
161 'operating_system',
162 'user_role',
163 )
164 );
165
166 include_once PREMIUM_ADDONS_PATH . 'includes/pa-display-conditions/conditions/condition.php';
167
168 foreach ( self::$conditions_keys as $condition_key ) {
169
170 $file_name = str_replace( '_', '-', strtolower( $condition_key ) );
171
172 if ( file_exists( PREMIUM_ADDONS_PATH . 'includes/pa-display-conditions/conditions/' . $file_name . '.php' ) ) {
173 include_once PREMIUM_ADDONS_PATH . 'includes/pa-display-conditions/conditions/' . $file_name . '.php';
174 }
175
176 $class_name = str_replace( '-', ' ', $condition_key );
177 $class_name = str_replace( ' ', '', ucwords( $class_name ) );
178 $class_name = __NAMESPACE__ . '\PA_Display_Conditions\Conditions\\' . $class_name;
179
180 if ( class_exists( $class_name ) ) {
181 static::$conditions_classes[ $condition_key ] = new $class_name();
182 }
183 }
184 }
185
186 /**
187 * Set render function to action filter.
188 *
189 * @access public
190 * @since 4.7.0
191 */
192 public function init_actions() {
193
194 add_filter( 'elementor/frontend/widget/should_render', array( $this, 'should_render' ), 10, 2 );
195 add_filter( 'elementor/frontend/column/should_render', array( $this, 'should_render' ), 10, 2 );
196 add_filter( 'elementor/frontend/section/should_render', array( $this, 'should_render' ), 10, 2 );
197
198 add_filter( 'elementor/frontend/container/should_render', array( $this, 'should_render' ), 10, 2 );
199 }
200
201 /**
202 * Adds repeater source controls
203 *
204 * @since 4.7.0
205 * @access public
206 *
207 * @param object $repeater Elementor Repeater Object.
208 */
209 public function add_repeater_source_controls( $repeater ) {
210
211 $additional_ids = array( 'pa_condition_acf_text', 'pa_condition_acf_boolean', 'pa_condition_acf_choice', 'pa_condition_woo_orders', 'pa_condition_woo_category', 'pa_condition_woo_total_price', 'pa_condition_time_range' );
212
213 foreach ( static::$conditions_classes as $condition_class_name => $condition_obj ) {
214
215 $control_id = 'pa_condition_' . $condition_class_name;
216
217 if ( in_array( $control_id, $additional_ids, true ) ) {
218 $repeater->add_control(
219 'pa_condition_val' . $condition_class_name,
220 $condition_obj->add_value_control()
221 );
222 }
223 }
224 }
225
226 /**
227 * Adds repeater compare controls
228 *
229 * @since 4.7.0
230 * @access public
231 *
232 * @param object $repeater Elementor Repeater Object.
233 */
234 public function add_repeater_compare_controls( $repeater ) {
235
236 foreach ( static::$conditions_classes as $condition_class_name => $condition_obj ) {
237
238 $control_id = 'pa_condition_' . $condition_class_name;
239
240 $repeater->add_control(
241 $control_id,
242 $condition_obj->get_control_options()
243 );
244
245 }
246 }
247
248 /**
249 * Determines whether the element content should be rendered.
250 *
251 * @param bool $should_render should render.
252 * @param object $element Elementor Repeater Object.
253 *
254 * @since 4.7.0
255 * @access public
256 */
257 public function should_render( $should_render, $element ) {
258
259 $settings = $element->get_settings();
260
261 if ( 'yes' === $settings['pa_display_conditions_switcher'] ) {
262
263 $element_id = $element->get_id();
264 $conditions_list = $settings['pa_condition_repeater'];
265 $action = $settings['pa_display_action'];
266
267 $this->store_condition_results( $settings, $element_id, $conditions_list );
268
269 return $this->check_visiblity( $element_id, $settings['pa_display_when'], $action );
270
271 }
272
273 return $should_render;
274
275 }
276
277 /**
278 * Store conditions results
279 *
280 * @since 4.7.0
281 * @access protected
282 *
283 * @param array $settings elements settings.
284 * @param string $element_id elements id.
285 * @param array $lists conditions.
286 */
287 protected function store_condition_results( $settings, $element_id, $lists = array() ) {
288
289 if ( ! $lists ) {
290 return;
291 }
292
293 foreach ( $lists as $key => $list ) {
294
295 if ( ! in_array( $list['pa_condition_key'], self::$conditions_keys, true ) ) {
296 continue;
297 }
298
299 $class = static::$conditions_classes[ $list['pa_condition_key'] ];
300 $operator = $list['pa_condition_operator'];
301 $item_key = 'pa_condition_' . $list['pa_condition_key'];
302 $value = isset( $list[ $item_key ] ) ? $list[ $item_key ] : '';
303
304 $compare_val = isset( $list[ 'pa_condition_val' . $list['pa_condition_key'] ] ) ? esc_html( $list[ 'pa_condition_val' . $list['pa_condition_key'] ] ) : '';
305
306 $id = $item_key . '_' . $list['_id'];
307 $time_zone = in_array( $list['pa_condition_key'], array( 'date_range', 'time_range', 'date', 'day' ), true ) ? $list['pa_condition_timezone'] : false;
308
309 $check = '' !== $value ? $class->compare_value( $settings, $operator, $value, $compare_val, $time_zone ) : true;
310
311 $this->conditions_results_holder[ $element_id ][ $id ] = $check;
312 }
313 }
314
315 /**
316 * Check Element Visibility
317 *
318 * @since 4.7.0
319 * @access public
320 *
321 * @param string $element_id element id.
322 * @param string $relation condition relation.
323 * @param string $action action to make if the conditions are met.
324 *
325 * @return bool
326 */
327 public function check_visiblity( $element_id, $relation, $action ) {
328 $result = true;
329
330 if ( ! array_key_exists( $element_id, $this->conditions_results_holder ) ) {
331 return;
332 }
333
334 if ( 'all' === $relation ) {
335
336 $result = in_array( false, $this->conditions_results_holder[ $element_id ], true ) ? false : true;
337 } else {
338
339 $result = in_array( true, $this->conditions_results_holder[ $element_id ], true ) ? true : false;
340 }
341
342 if ( ( 'show' === $action && $result ) || ( 'hide' === $action && false === $result ) ) {
343 $should_render = true;
344 } elseif ( ( 'show' === $action && false === $result ) || ( 'hide' === $action && $result ) ) {
345
346 $should_render = false;
347 }
348
349 return $should_render;
350 }
351
352 }
353