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 / Frontend / Filter.php
advanced-access-manager / Application / Frontend Last commit date
phtml 7 years ago Authorization.php 7 years ago Filter.php 7 years ago Manager.php 7 years ago
Filter.php
211 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 // TODO: figure out how to remove these two hooks and inject "visibility"
43 // object instead
44 //filter navigation pages & taxonomies
45 add_filter('wp_get_nav_menu_items', array($this, 'getNavigationMenu'), 999);
46 // filter navigation pages & taxonomies
47 add_filter('get_pages', array($this, 'filterPages'), 999);
48
49 //widget filters
50 add_filter('sidebars_widgets', array($this, 'filterWidgets'), 999);
51
52 //get control over commenting stuff
53 add_filter('comments_open', array($this, 'commentOpen'), 10, 2);
54 }
55
56 /**
57 * Main frontend access control hook
58 *
59 * @return void
60 *
61 * @access public
62 * @global WP_Post $post
63 */
64 public function wp() {
65 global $wp_query;
66
67 if ($wp_query->is_404) { // Handle 404 redirect
68 $type = AAM_Core_Config::get('frontend.404redirect.type', 'default');
69 do_action('aam-access-rejected-action', 'frontend', array(
70 'hook' => 'aam_404',
71 'uri' => AAM_Core_Request::server('REQUEST_URI')
72 ));
73
74 if ($type !== 'default') {
75 AAM_Core_API::redirect(
76 AAM_Core_Config::get("frontend.404redirect.{$type}")
77 );
78 }
79 } elseif ($wp_query->is_single || $wp_query->is_page
80 || $wp_query->is_posts_page || $wp_query->is_home) {
81 $post = AAM_Core_API::getCurrentPost();
82
83 if ($post) {
84 AAM_Frontend_Authorization::getInstance()->chechReadAuth($post);
85 }
86 }
87 }
88
89 /**
90 * Theme redirect
91 *
92 * Super important function that cover the 404 redirect that triggered by theme
93 * when page is not found. This covers the scenario when page is restricted from
94 * listing and read.
95 *
96 * @global type $wp_query
97 *
98 * @param type $template
99 *
100 * @return string
101 *
102 * @access public
103 */
104 public function themeRedirect($template) {
105 $post = AAM_Core_API::getCurrentPost();
106
107 if ($post) {
108 AAM_Frontend_Authorization::getInstance()->chechReadAuth($post);
109 }
110
111 return $template;
112 }
113
114 /**
115 * Filter Navigation menu
116 *
117 * @param array $pages
118 *
119 * @return array
120 *
121 * @access public
122 */
123 public function getNavigationMenu($pages) {
124 if (is_array($pages)) {
125 foreach ($pages as $i => $page) {
126 if (in_array($page->type, array('post_type', 'custom'), true)) {
127 $object = AAM::getUser()->getObject('post', $page->object_id);
128 if (!$object->allowed('frontend.list')) {
129 unset($pages[$i]);
130 }
131 }
132 }
133 }
134
135 return $pages;
136 }
137
138 /**
139 * Filter posts from the list
140 *
141 * @param array $pages
142 *
143 * @return array
144 *
145 * @access public
146 */
147 public function filterPages($pages) {
148 $current = AAM_Core_API::getCurrentPost();
149
150 if (is_array($pages)) {
151 $area = AAM_Core_Api_Area::get();
152
153 foreach ($pages as $i => $post) {
154 if ($current && ($current->ID === $post->ID)) { continue; }
155
156 // TODO: refactor this to AAM API standalone
157 $object = AAM::getUser()->getObject('post', $post->ID);
158 if (!$object->allowed($area. '.list')) {
159 unset($pages[$i]);
160 }
161 }
162
163 $pages = array_values($pages);
164 }
165
166 return $pages;
167 }
168
169 /**
170 * Filter frontend widgets
171 *
172 * @param array $widgets
173 *
174 * @return array
175 *
176 * @access public
177 */
178 public function filterWidgets($widgets) {
179 return AAM::getUser()->getObject('metabox')->filterFrontend($widgets);
180 }
181
182 /**
183 * Control frontend commenting feature
184 *
185 * @param boolean $open
186 * @param int $post_id
187 *
188 * @return boolean
189 *
190 * @access public
191 */
192 public function commentOpen($open, $post_id) {
193 $object = AAM::getUser()->getObject('post', $post_id);
194
195 return ($object->has('frontend.comment') ? false : $open);
196 }
197
198 /**
199 * Register backend filters and actions
200 *
201 * @return void
202 *
203 * @access public
204 */
205 public static function register() {
206 if (is_null(self::$_instance)) {
207 self::$_instance = new self;
208 }
209 }
210
211 }