PluginProbe ʕ •ᴥ•ʔ
Advanced Access Manager – Access Governance for WordPress / 5.3
Advanced Access Manager – Access Governance for WordPress v5.3
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
182 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('check-post-visibility', true)) {
44 //filter navigation pages & taxonomies
45 add_filter('wp_get_nav_menu_items', array($this, 'getNavigationMenu'), 999);
46 }
47
48 //widget filters
49 add_filter('sidebars_widgets', array($this, 'filterWidgets'), 999);
50
51 //get control over commenting stuff
52 add_filter('comments_open', array($this, 'commentOpen'), 10, 2);
53 }
54
55 /**
56 * Main frontend access control hook
57 *
58 * @return void
59 *
60 * @access public
61 * @global WP_Post $post
62 */
63 public function wp() {
64 global $wp_query;
65
66 if ($wp_query->is_404) { // Handle 404 redirect
67 $type = AAM_Core_Config::get('frontend.404redirect.type', 'default');
68 do_action('aam-rejected-action', 'frontend', array(
69 'hook' => 'aam_404',
70 'uri' => AAM_Core_Request::server('REQUEST_URI')
71 ));
72
73 if ($type != 'default') {
74 AAM_Core_API::redirect(
75 AAM_Core_Config::get("frontend.404redirect.{$type}")
76 );
77 }
78 } elseif ($wp_query->is_single || $wp_query->is_page
79 || $wp_query->is_posts_page || $wp_query->is_home) {
80 $post = AAM_Core_API::getCurrentPost();
81
82 if ($post) {
83 AAM_Frontend_Authorization::getInstance()->chechReadAuth($post);
84 }
85 }
86 }
87
88 /**
89 * Theme redirect
90 *
91 * Super important function that cover the 404 redirect that triggered by theme
92 * when page is not found. This covers the scenario when page is restricted from
93 * listing and read.
94 *
95 * @global type $wp_query
96 *
97 * @param type $template
98 *
99 * @return string
100 *
101 * @access public
102 */
103 public function themeRedirect($template) {
104 $post = AAM_Core_API::getCurrentPost();
105
106 if ($post) {
107 AAM_Frontend_Authorization::getInstance()->chechReadAuth($post);
108 }
109
110 return $template;
111 }
112
113 /**
114 * Filter Navigation menu
115 *
116 * @param array $pages
117 *
118 * @return array
119 *
120 * @access public
121 */
122 public function getNavigationMenu($pages) {
123 if (is_array($pages)) {
124 foreach ($pages as $i => $page) {
125 if (in_array($page->type, array('post_type', 'custom'))) {
126 $object = AAM::getUser()->getObject('post', $page->object_id);
127 $hidden = $object->get('frontend.hidden');
128 $list = $object->get('frontend.list');
129
130 if ($hidden || $list) {
131 unset($pages[$i]);
132 }
133 }
134 }
135 }
136
137 return $pages;
138 }
139
140 /**
141 * Filter frontend widgets
142 *
143 * @param array $widgets
144 *
145 * @return array
146 *
147 * @access public
148 */
149 public function filterWidgets($widgets) {
150 return AAM::getUser()->getObject('metabox')->filterFrontend($widgets);
151 }
152
153 /**
154 * Control frontend commenting feature
155 *
156 * @param boolean $open
157 * @param int $post_id
158 *
159 * @return boolean
160 *
161 * @access public
162 */
163 public function commentOpen($open, $post_id) {
164 $object = AAM::getUser()->getObject('post', $post_id);
165
166 return ($object->has('frontend.comment') ? false : $open);
167 }
168
169 /**
170 * Register backend filters and actions
171 *
172 * @return void
173 *
174 * @access public
175 */
176 public static function register() {
177 if (is_null(self::$_instance)) {
178 self::$_instance = new self;
179 }
180 }
181
182 }