PluginProbe ʕ •ᴥ•ʔ
Paid Membership Plugin, Ecommerce, User Registration Form, Login Form, User Profile & Restrict Content – ProfilePress / 3.2.2
Paid Membership Plugin, Ecommerce, User Registration Form, Login Form, User Profile & Restrict Content – ProfilePress v3.2.2
4.16.19 4.16.18 4.16.17 4.16.16 trunk 1.0 1.0.1 1.0.2 1.1 1.1.1 1.1.2 1.1.3 1.1.4 1.1.5 1.1.5a 1.1.6 1.1.7 1.2 1.2.1 1.2.2 1.2.3 1.2.4 1.2.5 1.2.6 1.3 1.3.1 1.3.2 1.3.3 1.3.4 1.3.5 1.3.6 1.4 1.4.1 1.4.2 1.5 1.5.1 1.5.2 1.5.3 1.5.4 1.5.5 1.5.6 1.5.7 1.5.8 1.6 1.6.1 1.6.2 1.6.3 1.6.4 1.6.5 1.6.6 1.6.7 1.6.8 1.7 1.7.1 1.7.2 1.8 1.8.1 1.8.10 1.8.2 1.8.3 1.8.4 1.8.5 1.8.6 1.8.7 1.8.8 1.8.9 1.9 1.9.1 1.9.10 1.9.11 1.9.12 1.9.13 1.9.2 1.9.3 1.9.4 1.9.5 1.9.6 1.9.7 1.9.8 1.9.9 2.1.9 2.2.10 2.2.11 2.2.12 2.2.13 2.2.14 2.2.15 2.2.16 2.2.2 2.2.5 2.2.6 2.2.7 2.2.8 2.2.9 3.0 3.1 3.1.1 3.1.10 3.1.11 3.1.12 3.1.13 3.1.14 3.1.15 3.1.16 3.1.17 3.1.18 3.1.19 3.1.2 3.1.3 3.1.4 3.1.5 3.1.6 3.1.7 3.1.8 3.1.9 3.2.0 3.2.1 3.2.10 3.2.11 3.2.12 3.2.13 3.2.14 3.2.15 3.2.16 3.2.2 3.2.3 3.2.4 3.2.5 3.2.6 3.2.7 3.2.8 3.2.9 4.0.0 4.0.1 4.0.2 4.0.3 4.1.0 4.1.1 4.1.2 4.1.3 4.1.4 4.10.0 4.10.1 4.10.2 4.10.3 4.11.0 4.12.0 4.13.0 4.13.1 4.13.2 4.13.3 4.13.4 4.14.0 4.14.1 4.14.2 4.14.3 4.14.4 4.15.0 4.15.1 4.15.10 4.15.11 4.15.12 4.15.13 4.15.14 4.15.15 4.15.16 4.15.17 4.15.18 4.15.19 4.15.2 4.15.20 4.15.20.1 4.15.21 4.15.22 4.15.23 4.15.24 4.15.25 4.15.3 4.15.4 4.15.5 4.15.6 4.15.7 4.15.8 4.15.9 4.16.0 4.16.1 4.16.10 4.16.11 4.16.12 4.16.13 4.16.14 4.16.15 4.16.2 4.16.3 4.16.4 4.16.5 4.16.6 4.16.7 4.16.8 4.16.9 4.2.0 4.3.0 4.3.1 4.3.2 4.4.0 4.4.1 4.5.0 4.5.1 4.5.2 4.5.3 4.5.4 4.5.5 4.6.0 4.7.0 4.8.0 4.9.0
wp-user-avatar / src / ContentProtection / ContentConditions.php
wp-user-avatar / src / ContentProtection Last commit date
Frontend 4 years ago views 4 years ago ConditionCallbacks.php 5 years ago ContentConditions.php 5 years ago Init.php 5 years ago SettingsPage.php 4 years ago WPListTable.php 5 years ago index.php 5 years ago
ContentConditions.php
491 lines
1 <?php
2
3 namespace ProfilePress\Core\ContentProtection;
4
5 class ContentConditions
6 {
7 /**
8 * @var array
9 */
10 public $conditions;
11
12 /**
13 * @param array $conditions
14 */
15 public function add_conditions($conditions = [])
16 {
17 foreach ($conditions as $key => $condition) {
18 if (empty($condition['id']) && ! is_numeric($key)) {
19 $condition['id'] = $key;
20 }
21
22 $this->add_condition($condition);
23 }
24 }
25
26 /**
27 * @param array $condition
28 */
29 public function add_condition($condition = [])
30 {
31 if ( ! empty($condition['id']) && ! isset ($this->conditions[$condition['id']])) {
32 $condition = wp_parse_args($condition, array(
33 'id' => '',
34 'callback' => null,
35 'group' => '',
36 'title' => ''
37 ));
38
39 $this->conditions[$condition['id']] = $condition;
40 }
41
42 return;
43 }
44
45 /**
46 * @return array
47 */
48 public function get_conditions()
49 {
50 static $conditions;
51
52 if ( ! isset($conditions)) {
53
54 if ( ! isset($this->conditions)) {
55 $this->register_conditions();
56 }
57
58 $conditions = $this->conditions;
59 }
60
61 return $conditions;
62 }
63
64 /**
65 * @return array
66 */
67 public function get_conditions_by_group()
68 {
69 static $groups;
70
71 if ( ! isset($groups)) {
72
73 $groups = [];
74
75 foreach ($this->get_conditions() as $condition) {
76 $groups[$condition['group']][$condition['id']] = $condition;
77 }
78 }
79
80 return $groups;
81 }
82
83 /**
84 * @return array
85 */
86 public function conditions_dropdown_list()
87 {
88 $groups = [];
89
90 $conditions_by_group = $this->get_conditions_by_group();
91
92 foreach ($conditions_by_group as $group => $_conditions) {
93
94 $conditions = [];
95
96 foreach ($_conditions as $id => $condition) {
97 $conditions[$id] = $condition['title'];
98 }
99
100 $groups[$group] = $conditions;
101 }
102
103 return $groups;
104 }
105
106 public function rule_row($facetListId, $facetId, $savedRule = [])
107 {
108 $name_attr = sprintf('ppress_cc_data[content][%s][%s][condition]', esc_attr($facetListId), esc_attr($facetId));
109 ?>
110 <div class="facet" data-facet="<?= esc_attr($facetId) ?>">
111 <i class="badge or"><?= esc_html__('or', 'wp-user-avatar') ?></i>
112 <div class="col">
113 <select class="ppress-content-condition-rule-name" class="ppcr-condition-rule-name" name="<?= $name_attr; ?>">
114 <option value=""><?php _e('Select a condition', 'wp-user-avatar'); ?></option>
115 <?php foreach ($this->get_conditions_by_group() as $group => $conditions) : ?>
116 <optgroup label="<?= $group; ?>">
117 <?php foreach ($conditions as $id => $condition) : ?>
118 <option value="<?php echo $id; ?>" <?php selected(@$savedRule['condition'], $id); ?>>
119 <?php echo $condition['title'] ?>
120 </option>
121 <?php endforeach ?>
122 </optgroup>
123 <?php endforeach ?>
124 </select>
125 </div>
126 <div class="col">
127 <div class="ppress-cr-rule-values">
128 <?php if (is_array($savedRule) && ! empty($savedRule)) : ?>
129 <?php if ( ! empty($savedRule['condition'])) : ?>
130 <?= $this->rule_value_field(@$savedRule['condition'], $facetListId, $facetId, @$savedRule['value']); ?>
131 <?php endif; ?>
132 <?php endif; ?>
133 </div>
134 </div>
135 <div class="actions">
136 <a href="javascript:void(0)" class="remove removeFacet">
137 <span class="icon-circle-minus dashicons dashicons-minus"></span>
138 </a>
139 </div>
140 </div>
141 <?php
142 }
143
144 public function unlinked_and_rule_badge()
145 {
146 echo '<p class="and"><em>' . esc_html__('AND', 'wp-user-avatar') . '</em></p>';
147 }
148
149 public function linked_and_rule_badge()
150 {
151 echo '<p class="and"><a href="javascript:void(0);" class="addCondition">+ ' . esc_html__('AND', 'wp-user-avatar') . '</a></p>';
152 }
153
154 public function rules_group_row($facetListId = '', $facetId = '', $facets = [], $unlink_and = false)
155 {
156 ?>
157 <div>
158 <section class="condAction" data-facet-list="<?= esc_attr($facetListId) ?>">
159
160 <div class="facetList">
161
162 <?php if (is_array($facets) && ! empty($facets)) : ?>
163 <?php foreach ($facets as $facetId => $savedRule) : ?>
164 <?php $this->rule_row($facetListId, $facetId, $savedRule); ?>
165 <?php endforeach; ?>
166 <?php endif; ?>
167
168 <?php if ( ! is_array($facets) || empty($facets)) : ?>
169 <?php $this->rule_row($facetListId, $facetId); ?>
170 <?php endif; ?>
171
172 </div>
173 <div class="add-or">
174 <a href="javascript:void(0)" class="add addFacet">+ <?= esc_html__('OR', 'wp-user-avatar') ?></a>
175 </div>
176 </section>
177
178 <?php if ($unlink_and === true) : ?>
179 <?php $this->unlinked_and_rule_badge(); ?>
180 <?php endif; ?>
181
182 <?php if ($unlink_and === false) : ?>
183 <?php $this->linked_and_rule_badge(); ?>
184 <?php endif; ?>
185 </div>
186 <?php
187 }
188
189 /**
190 * @param null $condition
191 *
192 * @return mixed|null
193 *
194 */
195 public function get_condition($condition = null)
196 {
197 $conditions = $this->get_conditions();
198
199 return isset($conditions[$condition]) ? $conditions[$condition] : null;
200 }
201
202 /**
203 * @return array
204 */
205 public function generate_post_type_conditions()
206 {
207 $conditions = [];
208 $post_types = get_post_types(array('public' => true), 'objects');
209 unset($post_types['attachment']);
210
211 foreach ($post_types as $name => $post_type) {
212
213 if ($post_type->has_archive) {
214 $conditions[$name . '_index'] = array(
215 'group' => $post_type->labels->name,
216 'title' => sprintf(esc_html__('%s Archive Page', 'wp-user-avatar'), $post_type->labels->name),
217 'callback' => array('\\ProfilePress\Core\ContentProtection\ConditionCallbacks', 'post_type'),
218 );
219 }
220
221 $conditions[$name . '_all'] = array(
222 'group' => $post_type->labels->name,
223 'title' => sprintf(esc_html__('All %s', 'wp-user-avatar'), $post_type->labels->name),
224 'callback' => array('\\ProfilePress\Core\ContentProtection\ConditionCallbacks', 'post_type'),
225 );
226
227 $conditions[$name . '_selected'] = array(
228 'group' => $post_type->labels->name,
229 'overview_title' => $post_type->labels->name,
230 'title' => sprintf(esc_html__('Selected %s', 'wp-user-avatar'), $post_type->labels->name),
231 'field' => array(
232 'placeholder' => sprintf(esc_html__('Select %s', 'wp-user-avatar'), strtolower($post_type->labels->name)),
233 'type' => 'postselect',
234 'post_type' => $name
235 ),
236 'callback' => array('\\ProfilePress\Core\ContentProtection\ConditionCallbacks', 'post_type'),
237 );
238
239 if (is_post_type_hierarchical($name)) {
240 $conditions[$name . '_children'] = array(
241 'group' => $post_type->labels->name,
242 'overview_title' => sprintf(esc_html__('Child %s of', 'wp-user-avatar'), $post_type->labels->name),
243 'title' => sprintf(esc_html__('Child of Selected %s', 'wp-user-avatar'), $post_type->labels->name),
244 'field' => array(
245 'placeholder' => sprintf(esc_html__('Select %s', 'wp-user-avatar'), strtolower($post_type->labels->name)),
246 'type' => 'postselect',
247 'post_type' => $name
248 ),
249 'callback' => array('\\ProfilePress\Core\ContentProtection\ConditionCallbacks', 'post_type'),
250 );
251
252 $conditions[$name . '_ancestors'] = array(
253 'group' => $post_type->labels->name,
254 'overview_title' => sprintf(esc_html__('Parent %s of', 'wp-user-avatar'), $post_type->labels->name),
255 'title' => sprintf(esc_html__('Parent of Selected %s', 'wp-user-avatar'), $post_type->labels->name),
256 'field' => array(
257 'placeholder' => sprintf(esc_html__('Select %s', 'wp-user-avatar'), strtolower($post_type->labels->singular_name)),
258 'type' => 'postselect',
259 'post_type' => $name
260 ),
261 'callback' => array('\\ProfilePress\Core\ContentProtection\ConditionCallbacks', 'post_type'),
262 );
263 }
264
265 $templates = wp_get_theme()->get_page_templates();
266
267 if ($name == 'page' && ! empty($templates)) {
268 $conditions[$name . '_template'] = array(
269 'group' => $post_type->labels->name,
270 'overview_title' => esc_html__('Template', 'wp-user-avatar'),
271 'title' => sprintf(esc_html__('%s with Template', 'wp-user-avatar'), $post_type->labels->name),
272 'field' => array(
273 'type' => 'select',
274 'placeholder' => esc_html__('Select Template', 'wp-user-avatar'),
275 'multiple' => true,
276 'options' => array_merge(array('default' => __('Default', 'wp-user-avatar')), $templates),
277 ),
278 'callback' => array('\\ProfilePress\Core\ContentProtection\ConditionCallbacks', 'post_type'),
279 );
280 }
281
282 if ($name == 'page') {
283 $conditions['is_front_page'] = array(
284 'group' => $post_type->labels->name,
285 'title' => __('Home or Front Page', 'wp-user-avatar'),
286 'callback' => 'is_front_page',
287 );
288
289 $conditions['is_home'] = array(
290 'group' => $post_type->labels->name,
291 'title' => __('Blog or Posts Page', 'wp-user-avatar'),
292 'callback' => 'is_home',
293 );
294
295 $conditions['is_search'] = array(
296 'group' => $post_type->labels->name,
297 'title' => __('Search Result Page', 'wp-user-avatar'),
298 'callback' => 'is_search',
299 );
300
301 $conditions['is_404'] = array(
302 'group' => $post_type->labels->name,
303 'title' => __('404 Error Page', 'wp-user-avatar'),
304 'callback' => 'is_404',
305 );
306 }
307
308 $conditions = array_merge($conditions, $this->generate_post_type_tax_conditions($name));
309 }
310
311 return $conditions;
312 }
313
314 /**
315 * @param $name
316 *
317 * @return array
318 */
319 public function generate_post_type_tax_conditions($name)
320 {
321 $post_type = get_post_type_object($name);
322 $taxonomies = get_object_taxonomies($name, 'object');
323 $conditions = [];
324 foreach ($taxonomies as $tax_name => $taxonomy) {
325
326 $conditions[$name . '_w_' . $tax_name] = array(
327 'group' => $post_type->labels->name,
328 'overview_title' => $taxonomy->labels->name,
329 'title' => sprintf(esc_html__('%1$s with %2$s', 'wp-user-avatar'), $post_type->labels->name, $taxonomy->labels->name),
330 'field' => array(
331 'placeholder' => sprintf(esc_html__('Select %s', 'wp-user-avatar'), strtolower($taxonomy->labels->name)),
332 'type' => 'taxonomyselect',
333 'taxonomy' => $tax_name,
334 'post_type' => $name
335 ),
336 'callback' => array('\\ProfilePress\Core\ContentProtection\ConditionCallbacks', 'post_type_tax'),
337 );
338 }
339
340 return $conditions;
341 }
342
343 /**
344 * @return array
345 */
346 public function generate_taxonomy_conditions()
347 {
348 $conditions = [];
349 $taxonomies = get_taxonomies(['public' => true], 'objects');
350
351 foreach ($taxonomies as $tax_name => $taxonomy) {
352
353 $group = sprintf(esc_html__('%s (%s)', 'wp-user-avatar'), $taxonomy->labels->name, $taxonomy->name);
354
355 $conditions['tax_' . $tax_name . '_all'] = array(
356 'group' => $group,
357 'title' => sprintf(esc_html__('All %s Archive Pages', 'wp-user-avatar'), $taxonomy->labels->name),
358 'overview_title' => sprintf(esc_html__('%s Archive', 'wp-user-avatar'), $taxonomy->labels->name),
359 'callback' => array('\\ProfilePress\Core\ContentProtection\ConditionCallbacks', 'taxonomy'),
360 );
361
362 $conditions['tax_' . $tax_name . '_selected'] = array(
363 'group' => $group,
364 'overview_title' => sprintf(esc_html__('%s Archive', 'wp-user-avatar'), $taxonomy->labels->name),
365 'title' => sprintf(esc_html__('Selected %s Archive Pages', 'wp-user-avatar'), $taxonomy->labels->name),
366 'field' => array(
367 'placeholder' => sprintf(esc_html__('Select %s', 'wp-user-avatar'), strtolower($taxonomy->labels->name)),
368 'type' => 'taxonomyselect',
369 'taxonomy' => $tax_name
370 ),
371 'callback' => array('\\ProfilePress\Core\ContentProtection\ConditionCallbacks', 'taxonomy'),
372 );
373
374 }
375
376 return $conditions;
377 }
378
379 /**
380 * @return mixed|void
381 */
382 public function register_conditions()
383 {
384 $conditions = array_merge($this->generate_post_type_conditions(), $this->generate_taxonomy_conditions());
385
386 $conditions = apply_filters('ppress_cr_registered_conditions', $conditions);
387
388 $this->add_conditions($conditions);
389 }
390
391 public function select_field($name_attr, $args = [])
392 {
393 $args = wp_parse_args($args, ['selected' => [], 'options' => [], 'multiple' => true]);
394
395 if ($args['multiple']) {
396 printf('<select class="ppress-cr-select2" name="%s" multiple>', $name_attr);
397 } else {
398 printf('<select name="%s">', $name_attr);
399 }
400
401 if ( ! empty($args['options'])) {
402
403 foreach ($args['options'] as $id => $label) {
404 if (true === $args['multiple']) {
405 $selected = in_array($id, $args['selected']) ? ' selected="selected"' : '';
406 } else {
407 $selected = selected($args['selected'], $id, false);
408 }
409
410 printf('<option value="%s"%s>%s</option>', $id, $selected, $label);
411 }
412 }
413
414 echo '</select>';
415 }
416
417 public function postselect_field($name_attr, $savedValue = [])
418 {
419 $options = [];
420
421 if (is_array($savedValue)) {
422 $options = array_reduce($savedValue, function ($carry, $post_id) {
423 $carry[$post_id] = get_the_title($post_id);
424
425 return $carry;
426 }, []);
427 }
428
429 $this->select_field($name_attr, ['selected' => $savedValue, 'options' => $options]);
430 }
431
432 public function taxonomyselect_field($name_attr, $savedValue)
433 {
434 $options = [];
435
436 if (is_array($savedValue)) {
437 $options = array_reduce($savedValue, function ($carry, $term_id) {
438 $carry[$term_id] = get_term($term_id)->name;
439
440 return $carry;
441 }, []);
442 }
443
444 $this->select_field($name_attr, ['selected' => $savedValue, 'options' => $options]);
445 }
446
447 public function rule_value_field($condition_id, $facetListId, $facetId, $savedValue = [])
448 {
449 $condition_field_settings = ppress_var($this->get_condition($condition_id), 'field');
450
451 $field_type = ppress_var($condition_field_settings, 'type');
452
453 if ( ! empty($field_type)) {
454
455 $method = $field_type . '_field';
456
457 if (method_exists($this, $method)) {
458
459 ob_start();
460
461 $name_attr = sprintf('ppress_cc_data[content][%s][%s][value][]', $facetListId, $facetId);
462
463 if ($method == 'select_field') {
464 $args['options'] = ppress_var($condition_field_settings, 'options');
465 $args['selected'] = $savedValue;
466
467 $this->$method($name_attr, $args);
468
469 } else {
470 $this->$method($name_attr, $savedValue);
471 }
472
473 return ob_get_clean();
474 }
475 }
476
477 return false;
478 }
479
480 public static function get_instance()
481 {
482 static $instance = null;
483
484 if (is_null($instance)) {
485 $instance = new self();
486 }
487
488 return $instance;
489 }
490 }
491