PluginProbe ʕ •ᴥ•ʔ
Advanced Access Manager – Access Governance for WordPress / 5.2
Advanced Access Manager – Access Governance for WordPress v5.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 / Shortcode / Strategy / Content.php
advanced-access-manager / Application / Shortcode / Strategy Last commit date
Content.php 8 years ago Interface.php 8 years ago Login.php 8 years ago LoginRedirect.php 8 years ago
Content.php
187 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 $user = array(AAM::getUser()->ID, AAM::getUser()->roles[0]);
61 } else {
62 $user = array('visitor');
63 }
64
65 $show = $this->getAccess('show');
66 $limit = $this->getAccess('limit');
67 $hide = $this->getAccess('hide');
68 $msg = $this->getMessage();
69
70 if (!empty($this->args['callback'])) {
71 $content = call_user_func($this->args['callback'], $this);
72 } else {
73 $content = $this->content;
74
75 //#1. Check if content is restricted for current user
76 if (in_array('all', $hide) || $this->check($user, $hide)) {
77 $content = '';
78 }
79
80 //#2. Check if content is limited for current user
81 if (in_array('all', $limit) || $this->check($user, $limit)) {
82 $content = do_shortcode($msg);
83 }
84
85 //#3. Check if content is allosed for current user
86 if ($this->check($user, $show)) {
87 $content = $this->content;
88 }
89 }
90
91 return $content;
92 }
93
94 /**
95 *
96 * @param type $user
97 * @param type $conditions
98 * @return type
99 */
100 protected function check($user, $conditions) {
101 $match = false;
102 $auth = get_current_user_id();
103
104 foreach($conditions as $condition) {
105 if (($condition == 'authenticated') && $auth) {
106 $match = true;
107 } else if (preg_match('/^[\d\.*\-]+$/', $condition)) {
108 $match = $this->checkIP(
109 $condition, AAM_Core_Request::server('REMOTE_ADDR')
110 );
111 } else {
112 $match = in_array($condition, $user);
113 }
114
115 if ($match) {
116 break;
117 }
118 }
119
120 return $match;
121 }
122
123 /**
124 *
125 * @param type $ip
126 * @param type $userIp
127 * @return boolean
128 */
129 protected function checkIP($ip, $userIp) {
130 $match = true;
131
132 $ipSplit = preg_split('/[\.:]/', $ip);
133 $uipSplit = preg_split('/[\.:]/', $userIp);
134
135 foreach($ipSplit as $i => $group) {
136 if (strpos($group, '-') !== false) { //range
137 list($start, $end) = explode('-', $group);
138 if ($uipSplit[$i] < $start || $uipSplit[$i] > $end) {
139 $match = false;
140 break;
141 }
142 } elseif ($group !== '*') {
143 if ($group != $uipSplit[$i]) {
144 $match = false;
145 break;
146 }
147 }
148 }
149
150 return $match;
151 }
152
153 /**
154 *
155 * @return type
156 */
157 public function getAccess($type) {
158 $access = (isset($this->args[$type]) ? $this->args[$type] : null);
159
160 return array_map('trim', explode(',', $access));
161 }
162
163 /**
164 *
165 * @return type
166 */
167 public function getMessage() {
168 return isset($this->args['message']) ? $this->args['message'] : null;
169 }
170
171 /**
172 *
173 * @return type
174 */
175 public function getArgs() {
176 return $this->args;
177 }
178
179 /**
180 *
181 * @return type
182 */
183 public function getContent() {
184 return $this->content;
185 }
186
187 }