PluginProbe ʕ •ᴥ•ʔ
Advanced Access Manager – Access Governance for WordPress / 5.11
Advanced Access Manager – Access Governance for WordPress v5.11
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 6 years ago Capability.php 6 years ago LoginRedirect.php 6 years ago LogoutRedirect.php 6 years ago Menu.php 6 years ago Metabox.php 6 years ago Policy.php 6 years ago Post.php 6 years ago Redirect.php 6 years ago Route.php 6 years ago Toolbar.php 6 years ago Uri.php 6 years ago Visibility.php 6 years ago
Visibility.php
169 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 $query = "SELECT pm.`post_id`, pm.`meta_value`, p.`post_type` ";
43 $query .= "FROM {$wpdb->postmeta} AS pm ";
44 $query .= "LEFT JOIN {$wpdb->posts} AS p ON (pm.`post_id` = p.ID) ";
45 $query .= "WHERE pm.`meta_key` = %s";
46
47 if ($wpdb->query($wpdb->prepare($query, $this->getOptionName('post')))) {
48 foreach($wpdb->last_result as $row) {
49 $settings = maybe_unserialize($row->meta_value);
50 $this->pushOptions('post', $row->post_id . '|' . $row->post_type, $settings);
51 }
52 }
53
54 // Read all the settings from the Access & Security Policies
55 $area = AAM_Core_Api_Area::get();
56 $stms = AAM_Core_Policy_Factory::get($subject)->find("/^post:(.*):list$/");
57
58 foreach($stms as $key => $stm) {
59 $chunks = explode(':', $key);
60
61 if (is_numeric($chunks[2])) {
62 $postId = $chunks[2];
63 } else {
64 $post = get_page_by_path(
65 $chunks[2], OBJECT, $chunks[1]
66 );
67 $postId = (is_a($post, 'WP_Post') ? $post->ID : 0);
68 }
69
70 // Cover the case when unknown slug is used
71 if (!empty($postId)) {
72 $this->pushOptions(
73 'post',
74 "{$postId}|{$chunks[1]}",
75 array(
76 "{$area}.list" => ($stm['Effect'] === 'deny' ? 1 : 0)
77 )
78 );
79 }
80 }
81
82 do_action('aam-visibility-initialize-action', $this);
83
84 // inherit settings from parent
85 $option = $subject->inheritFromParent('visibility', 0);
86 if (!empty($option)) {
87 $option = array_replace_recursive($option, $this->getOption());
88 } else {
89 $option = $this->getOption();
90 }
91
92 $this->setOption($option);
93 }
94
95 /**
96 *
97 * @param type $object
98 * @param type $id
99 * @param type $options
100 * @return type
101 */
102 public function pushOptions($object, $id, $options) {
103 $filtered = array();
104 $listOptions = apply_filters(
105 'aam-post-list-options-filter',
106 array('frontend.list', 'backend.list', 'api.list')
107 );
108
109 foreach($options as $key => $value) {
110 if (in_array($key, $listOptions, true)) {
111 $filtered[$key] = $value;
112 }
113 }
114
115 if (empty($filtered)) {
116 $filtered = array_combine(
117 $listOptions,
118 array_fill(0, count($listOptions), 0)
119 );
120 }
121
122 $option = $this->getOption();
123 if (!isset($option[$object][$id])) {
124 $option[$object][$id] = $filtered;
125 }
126 $this->setOption($option);
127
128 return $filtered;
129 }
130
131 /**
132 *
133 * @param type $object
134 * @param type $id
135 * @return type
136 */
137 public function has($object, $id = null) {
138 $option = $this->getOption();
139
140 return (is_null($id) ? isset($option[$object]) : isset($option[$object][$id]));
141 }
142
143 /**
144 * Generate option name
145 *
146 * @return string
147 *
148 * @access protected
149 */
150 protected function getOptionName($object) {
151 $subject = $this->getSubject();
152
153 //prepare option name
154 $meta_key = 'aam-' . $object . '-access-' . $subject->getUID();
155 $meta_key .= ($subject->getId() ? $subject->getId() : '');
156
157 return $meta_key;
158 }
159
160 /**
161 *
162 * @param type $external
163 * @return type
164 */
165 public function mergeOption($external) {
166 return AAM::api()->mergeSettings($external, $this->getOption(), 'post');
167 }
168
169 }