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 / Shortcode / Strategy / Content.php
advanced-access-manager / application / Shortcode / Strategy Last commit date
Content.php 6 years ago Interface.php 6 years ago Login.php 6 years ago LoginRedirect.php 6 years ago
Content.php
194 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 shortcode strategy for content
12 *
13 * Shortcode strategy to manage access to the parts of post's content
14 *
15 * @package AAM
16 * @author Vasyl Martyniuk <vasyl@vasyltech.com>
17 */
18 class AAM_Shortcode_Strategy_Content implements AAM_Shortcode_Strategy_Interface {
19
20 /**
21 *
22 * @var type
23 */
24 protected $args;
25
26 /**
27 *
28 * @var type
29 */
30 protected $content;
31
32 /**
33 * Initialize shortcode decorator
34 *
35 * Expecting attributes in $args are:
36 * "hide" => comma-separated list of role and user IDs to hide content
37 * "show" => comma-separated list of role and user IDs to show content
38 * "limit" => comma-separated list of role and user IDs to limit content
39 * "message" => message to show if "limit" is defined
40 * "callback" => callback function that returns message if "limit" is defined
41 *
42 * @param type $args
43 * @param type $content
44 */
45 public function __construct($args, $content) {
46 $this->args = $args;
47 $this->content = do_shortcode($content);
48 }
49
50 /**
51 * Process short-code
52 *
53 * @return string
54 *
55 * @access public
56 */
57 public function run() {
58 //prepare user
59 if (get_current_user_id()) {
60 $roles = array_merge(AAM::getUser()->roles);
61
62 if (AAM::api()->getConfig('core.settings.multiSubject', false)) {
63 $parts = array_merge(array((string)AAM::getUser()->ID), $roles);
64 } else {
65 $parts = array((string)AAM::getUser()->ID, array_shift($roles));
66 }
67 } else {
68 $parts = array('visitor');
69 }
70
71 $show = $this->getAccess('show');
72 $limit = $this->getAccess('limit');
73 $hide = $this->getAccess('hide');
74 $msg = $this->getMessage();
75
76 if (!empty($this->args['callback'])) {
77 $content = call_user_func($this->args['callback'], $this);
78 } else {
79 $content = $this->content;
80
81 //#1. Check if content is restricted for current user
82 if (in_array('all', $hide, true) || $this->check($parts, $hide)) {
83 $content = '';
84 }
85
86 //#2. Check if content is limited for current user
87 if (in_array('all', $limit, true) || $this->check($parts, $limit)) {
88 $content = do_shortcode($msg);
89 }
90
91 //#3. Check if content is allowed for current user
92 if ($this->check($parts, $show)) {
93 $content = $this->content;
94 }
95 }
96
97 return $content;
98 }
99
100 /**
101 *
102 * @param array $user
103 * @param array $conditions
104 *
105 * @return type
106 */
107 protected function check($user, $conditions) {
108 $match = false;
109 $auth = get_current_user_id();
110
111 foreach($conditions as $condition) {
112 if (($condition === 'authenticated') && $auth) {
113 $match = true;
114 } else if (preg_match('/^[\d*-]+\.[\d*-]+[\d\.*-]*[\d\.*-]*$/', $condition)) {
115 $match = $this->checkIP(
116 $condition, AAM_Core_Request::server('REMOTE_ADDR')
117 );
118 } else {
119 $match = in_array($condition, $user, true);
120 }
121
122 if ($match) {
123 break;
124 }
125 }
126
127 return $match;
128 }
129
130 /**
131 *
132 * @param type $ip
133 * @param type $userIp
134 * @return boolean
135 */
136 protected function checkIP($ip, $userIp) {
137 $match = true;
138
139 $ipSplit = preg_split('/[\.:]/', $ip);
140 $uipSplit = preg_split('/[\.:]/', $userIp);
141
142 foreach($ipSplit as $i => $group) {
143 if (strpos($group, '-') !== false) { //range
144 list($start, $end) = explode('-', $group);
145 if ($uipSplit[$i] < $start || $uipSplit[$i] > $end) {
146 $match = false;
147 break;
148 }
149 } elseif ($group !== '*') {
150 if ($group !== $uipSplit[$i]) {
151 $match = false;
152 break;
153 }
154 }
155 }
156
157 return $match;
158 }
159
160 /**
161 *
162 * @return array
163 */
164 public function getAccess($type) {
165 $access = (isset($this->args[$type]) ? $this->args[$type] : null);
166
167 return array_map('trim', explode(',', $access));
168 }
169
170 /**
171 *
172 * @return type
173 */
174 public function getMessage() {
175 return isset($this->args['message']) ? $this->args['message'] : null;
176 }
177
178 /**
179 *
180 * @return type
181 */
182 public function getArgs() {
183 return $this->args;
184 }
185
186 /**
187 *
188 * @return type
189 */
190 public function getContent() {
191 return $this->content;
192 }
193
194 }