PluginProbe ʕ •ᴥ•ʔ
Premium Addons for Elementor – Powerful Elementor Templates & Widgets / 4.9.40
Premium Addons for Elementor – Powerful Elementor Templates & Widgets v4.9.40
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 3 years ago lang-locale.php 3 years ago mobile-detector.php 3 years ago pa-controls-handler.php 3 years ago
pa-controls-handler.php
377 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 'return_visitor' => __( 'Returning Visitor', 'premium-addons-for-elementor' ),
109 ),
110 ),
111
112 'other' => array(
113 'label' => __( 'Other', 'premium-addons-for-elementor' ),
114 'options' => array(
115 'lang' => __( 'Site Language', 'premium-addons-for-elementor' ),
116 ),
117 ),
118
119 'postdata' => array(
120 'label' => __( 'Post/Page', 'premium-addons-for-elementor' ),
121 'options' => array(
122 'post' => __( 'Post', 'premium-addons-for-elementor' ),
123 'post_type' => __( 'Post Type', 'premium-addons-for-elementor' ),
124 'page' => __( 'Page', 'premium-addons-for-elementor' ),
125 'static_page' => __( 'Website Static Pages', 'premium-addons-for-elementor' ),
126 ),
127 ),
128
129 'urlparams' => array(
130 'label' => __( 'URL (PRO)', 'premium-addons-for-elementor' ),
131 'options' => array(
132 'url_string' => __( 'String in URL', 'premium-addons-for-elementor' ),
133 'url_referer' => __( 'URL Parameters', 'premium-addons-for-elementor' ),
134 ),
135 ),
136
137 'misc' => array(
138 'label' => __( 'Misc (PRO)', 'premium-addons-for-elementor' ),
139 'options' => array(
140 'shortcode' => __( 'Shortcode', 'premium-addons-for-elementor' ),
141 ),
142 ),
143
144 );
145
146 }
147
148 /**
149 * Initialize condition classes.
150 *
151 * @access public
152 * @since 4.7.0
153 */
154 public function init_conditions_classes() {
155
156 self::$conditions_keys = apply_filters(
157 'pa_display_conditions_keys',
158 array(
159 'browser',
160 'device',
161 'day',
162 'date',
163 'date_range',
164 'time_range',
165 'ip_location',
166 'lang',
167 'login_status',
168 'return_visitor',
169 'post',
170 'post_type',
171 'page',
172 'static_page',
173 'operating_system',
174 'user_role',
175 )
176 );
177
178 include_once PREMIUM_ADDONS_PATH . 'includes/pa-display-conditions/conditions/condition.php';
179
180 foreach ( self::$conditions_keys as $condition_key ) {
181
182 $file_name = str_replace( '_', '-', strtolower( $condition_key ) );
183
184 if ( file_exists( PREMIUM_ADDONS_PATH . 'includes/pa-display-conditions/conditions/' . $file_name . '.php' ) ) {
185 include_once PREMIUM_ADDONS_PATH . 'includes/pa-display-conditions/conditions/' . $file_name . '.php';
186 }
187
188 $class_name = str_replace( '-', ' ', $condition_key );
189 $class_name = str_replace( ' ', '', ucwords( $class_name ) );
190 $class_name = __NAMESPACE__ . '\PA_Display_Conditions\Conditions\\' . $class_name;
191
192 if ( class_exists( $class_name ) ) {
193 static::$conditions_classes[ $condition_key ] = new $class_name();
194 }
195 }
196 }
197
198 /**
199 * Set render function to action filter.
200 *
201 * @access public
202 * @since 4.7.0
203 */
204 public function init_actions() {
205
206 add_filter( 'elementor/frontend/widget/should_render', array( $this, 'should_render' ), 10, 2 );
207 add_filter( 'elementor/frontend/column/should_render', array( $this, 'should_render' ), 10, 2 );
208 add_filter( 'elementor/frontend/section/should_render', array( $this, 'should_render' ), 10, 2 );
209
210 add_filter( 'elementor/frontend/container/should_render', array( $this, 'should_render' ), 10, 2 );
211 }
212
213 /**
214 * Adds repeater source controls
215 *
216 * @since 4.7.0
217 * @access public
218 *
219 * @param object $repeater Elementor Repeater Object.
220 */
221 public function add_repeater_source_controls( $repeater ) {
222
223 $additional_ids = array( 'pa_condition_shortcode', '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' );
224
225 foreach ( static::$conditions_classes as $condition_class_name => $condition_obj ) {
226
227 $control_id = 'pa_condition_' . $condition_class_name;
228
229 if ( in_array( $control_id, $additional_ids, true ) ) {
230 $repeater->add_control(
231 'pa_condition_val' . $condition_class_name,
232 $condition_obj->add_value_control()
233 );
234 }
235 }
236 }
237
238 /**
239 * Adds repeater compare controls
240 *
241 * @since 4.7.0
242 * @access public
243 *
244 * @param object $repeater Elementor Repeater Object.
245 */
246 public function add_repeater_compare_controls( $repeater ) {
247
248 foreach ( static::$conditions_classes as $condition_class_name => $condition_obj ) {
249
250 $control_id = 'pa_condition_' . $condition_class_name;
251
252 $repeater->add_control(
253 $control_id,
254 $condition_obj->get_control_options()
255 );
256
257 }
258 }
259
260 /**
261 * Determines whether the element content should be rendered.
262 *
263 * @param bool $should_render should render.
264 * @param object $element Elementor Repeater Object.
265 *
266 * @since 4.7.0
267 * @access public
268 */
269 public function should_render( $should_render, $element ) {
270
271 $settings = $element->get_settings();
272
273 if ( 'yes' === $settings['pa_display_conditions_switcher'] ) {
274
275 $element_id = $element->get_id();
276 $conditions_list = $settings['pa_condition_repeater'];
277 $action = $settings['pa_display_action'];
278
279 $this->store_condition_results( $settings, $element_id, $conditions_list );
280
281 return $this->check_visiblity( $element_id, $settings['pa_display_when'], $action );
282
283 }
284
285 return $should_render;
286
287 }
288
289 /**
290 * Store conditions results
291 *
292 * @since 4.7.0
293 * @access protected
294 *
295 * @param array $settings elements settings.
296 * @param string $element_id elements id.
297 * @param array $lists conditions.
298 */
299 protected function store_condition_results( $settings, $element_id, $lists = array() ) {
300
301 if ( ! $lists ) {
302 return;
303 }
304
305 foreach ( $lists as $key => $list ) {
306
307 if ( ! in_array( $list['pa_condition_key'], self::$conditions_keys, true ) ) {
308 continue;
309 }
310
311 $class = static::$conditions_classes[ $list['pa_condition_key'] ];
312 $operator = $list['pa_condition_operator'];
313 $item_key = 'pa_condition_' . $list['pa_condition_key'];
314 $value = isset( $list[ $item_key ] ) ? $list[ $item_key ] : '';
315
316 $compare_val = isset( $list[ 'pa_condition_val' . $list['pa_condition_key'] ] ) ? $list[ 'pa_condition_val' . $list['pa_condition_key'] ] : '';
317
318 if ( 'shortcode' !== $list['pa_condition_key'] ) {
319 $compare_val = esc_html( $compare_val );
320 }
321
322 $id = $item_key . '_' . $list['_id'];
323 $time_zone = in_array( $list['pa_condition_key'], array( 'date_range', 'time_range', 'date', 'day' ), true ) ? $list['pa_condition_timezone'] : false;
324
325 if ( 'ip_location' !== $list['pa_condition_key'] ) {
326 $check = ( 'acf_text' === $list['pa_condition_key'] || '' !== $value ) ? $class->compare_value( $settings, $operator, $value, $compare_val, $time_zone ) : true;
327 } else {
328
329 $detect_method = $list['pa_condition_loc_method'];
330
331 $check = $class->compare_location( $settings, $operator, $value, $compare_val, $time_zone, $detect_method );
332
333 }
334
335 $this->conditions_results_holder[ $element_id ][ $id ] = $check;
336 }
337 }
338
339 /**
340 * Check Element Visibility
341 *
342 * @since 4.7.0
343 * @access public
344 *
345 * @param string $element_id element id.
346 * @param string $relation condition relation.
347 * @param string $action action to make if the conditions are met.
348 *
349 * @return bool
350 */
351 public function check_visiblity( $element_id, $relation, $action ) {
352 $result = true;
353
354 if ( ! array_key_exists( $element_id, $this->conditions_results_holder ) ) {
355 return;
356 }
357
358 if ( 'all' === $relation ) {
359
360 $result = in_array( false, $this->conditions_results_holder[ $element_id ], true ) ? false : true;
361 } else {
362
363 $result = in_array( true, $this->conditions_results_holder[ $element_id ], true ) ? true : false;
364 }
365
366 if ( ( 'show' === $action && $result ) || ( 'hide' === $action && false === $result ) ) {
367 $should_render = true;
368 } elseif ( ( 'show' === $action && false === $result ) || ( 'hide' === $action && $result ) ) {
369
370 $should_render = false;
371 }
372
373 return $should_render;
374 }
375
376 }
377