PluginProbe ʕ •ᴥ•ʔ
Advanced Access Manager – Access Governance for WordPress / 5.8.2
Advanced Access Manager – Access Governance for WordPress v5.8.2
6.8.4 6.8.5 6.9.0 6.9.1 6.9.10 6.9.11 6.9.12 6.9.13 6.9.14 6.9.15 6.9.16 6.9.17 6.9.18 6.9.19 6.9.2 6.9.20 6.9.21 6.9.22 6.9.23 6.9.24 6.9.25 6.9.26 6.9.27 6.9.28 6.9.29 6.9.3 6.9.30 6.9.31 6.9.32 6.9.33 6.9.34 6.9.35 6.9.36 6.9.37 6.9.38 6.9.39 6.9.4 6.9.41 6.9.42 6.9.43 6.9.44 6.9.45 6.9.46 6.9.47 6.9.48 6.9.49 6.9.5 6.9.51 6.9.6 6.9.7 6.9.8 6.9.9 7.0.0 7.0.0-alpha.6 7.0.0-alpha.7 7.0.0-beta.1 7.0.0-rc1 7.0.0-rc2 7.0.0-rc3 7.0.1 7.0.10 7.0.11 7.0.2 7.0.3 7.0.4 7.0.5 7.0.6 7.0.7 7.0.8 7.0.9 7.1.0 7.1.1 trunk 3.0 4.0 4.0.1 4.1 4.2 4.3 4.4 4.4.1 4.5 4.6 4.6.1 4.6.2 4.7 4.7.1 4.7.2 4.7.5 4.7.6 4.8 4.8.1 4.9 4.9.1 4.9.2 4.9.3 4.9.4 4.9.5 4.9.5.1 4.9.5.2 5.0 5.0.1 5.0.2 5.0.3 5.0.4 5.0.5 5.0.6 5.0.7 5.0.8 5.1 5.1.1 5.10 5.11 5.2 5.2.1 5.2.5 5.2.6 5.2.7 5.3 5.3.1 5.3.2 5.3.3 5.3.4 5.3.5 5.4 5.4.1 5.4.2 5.4.3 5.4.3.1 5.4.3.2 5.5 5.5.1 5.5.2 5.6 5.6.1 5.6.1.1 5.7 5.7.1 5.7.2 5.7.3 5.8 5.8.1 5.8.2 5.8.3 5.9 5.9.1 5.9.1.1 5.9.2 5.9.2.1 5.9.3 5.9.4 5.9.5 5.9.6 5.9.6.1 5.9.6.2 5.9.6.3 5.9.7 5.9.7.1 5.9.7.2 5.9.7.3 5.9.8 5.9.8.1 5.9.9 5.9.9.1 6.0.0 6.0.1 6.0.2 6.0.3 6.0.4 6.0.5 6.1.0 6.1.1 6.2.0 6.2.1 6.2.2 6.3.0 6.3.1 6.3.2 6.3.3 6.4.0 6.4.1 6.4.2 6.4.3 6.5.0 6.5.1 6.5.2 6.5.3 6.5.4 6.6.0 6.6.1 6.6.2 6.6.3 6.6.4 6.7.0 6.7.1 6.7.2 6.7.3 6.7.4 6.7.5 6.7.6 6.7.7 6.7.8 6.7.9 6.8.0 6.8.1 6.8.2 6.8.3
advanced-access-manager / Application / Core / Object / Visibility.php
advanced-access-manager / Application / Core / Object Last commit date
Cache.php 7 years ago Capability.php 7 years ago LoginRedirect.php 7 years ago LogoutRedirect.php 7 years ago Menu.php 7 years ago Metabox.php 7 years ago Policy.php 7 years ago Post.php 7 years ago Redirect.php 7 years ago Route.php 7 years ago Toolbar.php 7 years ago Uri.php 7 years ago Visibility.php 7 years ago
Visibility.php
175 lines
1 <?php
2
3 /**
4 * ======================================================================
5 * LICENSE: This file is subject to the terms and conditions defined in *
6 * file 'license.txt', which is part of this source code package. *
7 * ======================================================================
8 */
9
10 /**
11 * Post visibility object
12 *
13 * @package AAM
14 * @author Vasyl Martyniuk <vasyl@vasyltech.com>
15 */
16 class AAM_Core_Object_Visibility extends AAM_Core_Object {
17
18 /**
19 * Constructor
20 *
21 * @param AAM_Core_Subject $subject
22 *
23 * @return void
24 *
25 * @access public
26 */
27 public function __construct(AAM_Core_Subject $subject) {
28 parent::__construct($subject);
29
30 $this->initialize();
31 }
32
33 /**
34 *
35 * @global type $wpdb
36 */
37 public function initialize() {
38 global $wpdb;
39
40 $subject = $this->getSubject();
41
42 // Read cache first
43 $option = $subject->getObject('cache')->get('visibility', 0);
44
45 if ($option === false) { //if false, then the cache is empty but exists
46 $option = array();
47 } elseif (empty($option)) {
48 $query = "SELECT pm.`post_id`, pm.`meta_value`, p.`post_type` ";
49 $query .= "FROM {$wpdb->postmeta} AS pm ";
50 $query .= "LEFT JOIN {$wpdb->posts} AS p ON (pm.`post_id` = p.ID) ";
51 $query .= "WHERE pm.`meta_key` = %s";
52
53 if ($wpdb->query($wpdb->prepare($query, $this->getOptionName('post')))) {
54 foreach($wpdb->last_result as $row) {
55 $settings = maybe_unserialize($row->meta_value);
56 $this->pushOptions('post', $row->post_id . '|' . $row->post_type, $settings);
57 }
58 }
59
60 // Read all the settings from the Access & Security Policies
61 $area = AAM_Core_Api_Area::get();
62 $stms = AAM_Core_Policy_Manager::getInstance()->find(
63 "/^post:(.*):(list|listtoothers)$/",
64 $subject
65 );
66
67 foreach($stms as $key => $stm) {
68 $chunks = explode(':', $key);
69
70 $action = ($chunks[3] === 'listtoothers' ? 'list_others' : 'list');
71
72 if (is_numeric($chunks[2])) {
73 $postId = $chunks[2];
74 } else {
75 $post = get_page_by_path(
76 $chunks[2], OBJECT, $chunks[1]
77 );
78 $postId = (is_a($post, 'WP_Post') ? $post->ID : 0);
79 }
80
81 $this->pushOptions(
82 'post',
83 "{$postId}|{$chunks[1]}",
84 array(
85 "{$area}.{$action}" => ($stm['Effect'] === 'deny' ? 1 : 0)
86 )
87 );
88 }
89
90 do_action('aam-visibility-initialize-action', $this);
91
92 // inherit settings from parent
93 $option = $subject->inheritFromParent('visibility', 0);
94 if (!empty($option)) {
95 $option = array_replace_recursive($option, $this->getOption());
96 } else {
97 $option = $this->getOption();
98 }
99
100 if (in_array($subject::UID, array('user', 'visitor'), true)) {
101 $subject->getObject('cache')->add(
102 'visibility', 0, empty($option) ? false : $option
103 );
104 }
105 }
106
107 $this->setOption($option);
108 }
109
110 /**
111 *
112 * @param type $object
113 * @param type $id
114 * @param type $options
115 * @return type
116 */
117 public function pushOptions($object, $id, $options) {
118 $filtered = array();
119 $listOptions = apply_filters(
120 'aam-post-list-options-filter',
121 array('frontend.list', 'backend.list', 'api.list')
122 );
123
124 foreach($options as $key => $value) {
125 if (in_array($key, $listOptions, true)) {
126 $filtered[$key] = $value;
127 }
128 }
129
130 if (empty($filtered)) {
131 $filtered = array_combine(
132 $listOptions,
133 array_fill(0, count($listOptions), 0)
134 );
135 }
136
137 $option = $this->getOption();
138 if (!isset($option[$object][$id])) {
139 $option[$object][$id] = $filtered;
140 }
141 $this->setOption($option);
142
143 return $filtered;
144 }
145
146 /**
147 *
148 * @param type $object
149 * @param type $id
150 * @return type
151 */
152 public function has($object, $id = null) {
153 $option = $this->getOption();
154
155 return (is_null($id) ? isset($option[$object]) : isset($option[$object][$id]));
156 }
157
158 /**
159 * Generate option name
160 *
161 * @return string
162 *
163 * @access protected
164 */
165 protected function getOptionName($object) {
166 $subject = $this->getSubject();
167
168 //prepare option name
169 $meta_key = 'aam-' . $object . '-access-' . $subject->getUID();
170 $meta_key .= ($subject->getId() ? $subject->getId() : '');
171
172 return $meta_key;
173 }
174
175 }