PluginProbe ʕ •ᴥ•ʔ
Advanced Access Manager – Access Governance for WordPress / 5.3.5
Advanced Access Manager – Access Governance for WordPress v5.3.5
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 / Frontend / Filter.php
advanced-access-manager / Application / Frontend Last commit date
phtml 8 years ago Authorization.php 8 years ago Filter.php 8 years ago Manager.php 8 years ago
Filter.php
220 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 * AAM frontend filter
12 *
13 * @package AAM
14 * @author Vasyl Martyniuk <vasyl@vasyltech.com>
15 */
16 class AAM_Frontend_Filter {
17
18 /**
19 * Instance of itself
20 *
21 * @var AAM_Frontend_Filter
22 *
23 * @access private
24 */
25 private static $_instance = null;
26
27 /**
28 * Constructor
29 *
30 * @return void
31 *
32 * @access protected
33 */
34 protected function __construct() {
35 //bootstrap authorization layer
36 AAM_Frontend_Authorization::bootstrap();
37
38 //manage access to frontend posts & pages
39 add_action('wp', array($this, 'wp'), 999);
40 add_action('404_template', array($this, 'themeRedirect'), 999);
41
42 //important to keep this option optional for optimization reasons
43 if (AAM_Core_Config::get('core.settings.checkPostVisibility', true)) {
44 // TODO: figure out how to remove these two hooks and inject "visibility"
45 // object instead
46 //filter navigation pages & taxonomies
47 add_filter('wp_get_nav_menu_items', array($this, 'getNavigationMenu'), 999);
48 // filter navigation pages & taxonomies
49 add_filter('get_pages', array($this, 'filterPages'), 999);
50 }
51
52 //widget filters
53 add_filter('sidebars_widgets', array($this, 'filterWidgets'), 999);
54
55 //get control over commenting stuff
56 add_filter('comments_open', array($this, 'commentOpen'), 10, 2);
57 }
58
59 /**
60 * Main frontend access control hook
61 *
62 * @return void
63 *
64 * @access public
65 * @global WP_Post $post
66 */
67 public function wp() {
68 global $wp_query;
69
70 if ($wp_query->is_404) { // Handle 404 redirect
71 $type = AAM_Core_Config::get('frontend.404redirect.type', 'default');
72 do_action('aam-access-rejected-action', 'frontend', array(
73 'hook' => 'aam_404',
74 'uri' => AAM_Core_Request::server('REQUEST_URI')
75 ));
76
77 if ($type != 'default') {
78 AAM_Core_API::redirect(
79 AAM_Core_Config::get("frontend.404redirect.{$type}")
80 );
81 }
82 } elseif ($wp_query->is_single || $wp_query->is_page
83 || $wp_query->is_posts_page || $wp_query->is_home) {
84 $post = AAM_Core_API::getCurrentPost();
85
86 if ($post) {
87 AAM_Frontend_Authorization::getInstance()->chechReadAuth($post);
88 }
89 }
90 }
91
92 /**
93 * Theme redirect
94 *
95 * Super important function that cover the 404 redirect that triggered by theme
96 * when page is not found. This covers the scenario when page is restricted from
97 * listing and read.
98 *
99 * @global type $wp_query
100 *
101 * @param type $template
102 *
103 * @return string
104 *
105 * @access public
106 */
107 public function themeRedirect($template) {
108 $post = AAM_Core_API::getCurrentPost();
109
110 if ($post) {
111 AAM_Frontend_Authorization::getInstance()->chechReadAuth($post);
112 }
113
114 return $template;
115 }
116
117 /**
118 * Filter Navigation menu
119 *
120 * @param array $pages
121 *
122 * @return array
123 *
124 * @access public
125 */
126 public function getNavigationMenu($pages) {
127 if (is_array($pages)) {
128 foreach ($pages as $i => $page) {
129 if (in_array($page->type, array('post_type', 'custom'))) {
130 $object = AAM::getUser()->getObject('post', $page->object_id);
131 $others = $object->get('frontend.list_others');
132 $list = $object->get('frontend.list');
133
134 if (($others && ($object->post_author != get_current_user_id())) || $list) {
135 unset($pages[$i]);
136 }
137 }
138 }
139 }
140
141 return $pages;
142 }
143
144 /**
145 * Filter posts from the list
146 *
147 * @param array $pages
148 *
149 * @return array
150 *
151 * @access public
152 */
153 public function filterPages($pages) {
154 $current = AAM_Core_API::getCurrentPost();
155
156 if (is_array($pages)) {
157 $area = AAM_Core_Api_Area::get();
158
159 foreach ($pages as $i => $post) {
160 if ($current && ($current->ID == $post->ID)) { continue; }
161
162 // TODO: refactor this to AAM API standalone
163 $object = AAM::getUser()->getObject('post', $post->ID);
164 $list = $object->get($area. '.list');
165 $others = $object->get($area. '.list_others');
166
167 if ($list || ($others && ($post->post_author != get_current_user_id()))) {
168 unset($pages[$i]);
169 }
170 }
171
172 $pages = array_values($pages);
173 }
174
175 return $pages;
176 }
177
178 /**
179 * Filter frontend widgets
180 *
181 * @param array $widgets
182 *
183 * @return array
184 *
185 * @access public
186 */
187 public function filterWidgets($widgets) {
188 return AAM::getUser()->getObject('metabox')->filterFrontend($widgets);
189 }
190
191 /**
192 * Control frontend commenting feature
193 *
194 * @param boolean $open
195 * @param int $post_id
196 *
197 * @return boolean
198 *
199 * @access public
200 */
201 public function commentOpen($open, $post_id) {
202 $object = AAM::getUser()->getObject('post', $post_id);
203
204 return ($object->has('frontend.comment') ? false : $open);
205 }
206
207 /**
208 * Register backend filters and actions
209 *
210 * @return void
211 *
212 * @access public
213 */
214 public static function register() {
215 if (is_null(self::$_instance)) {
216 self::$_instance = new self;
217 }
218 }
219
220 }