Advanced Access Manager - Version 5.8.3

Version Description

  • Fixed the bug with multi-lingual support
  • Fixed the bug with LIMIT option that escaped quotes in the message
  • Fixed the bug with managing access to Access Policies
  • Added support for aam_edit_policy, aam_read_policy, aam_delete_policy, aam_delete_policies, aam_edit_policies, aam_edit_other_policies, aam_publish_policies capabilities
  • Refactored Default Category functionality (moved it to Plus Package extension)
  • Added support for the nav_menu_meta_box_object hook to filter posts on Menu Builder page
  • Extend Access Policy with more features
Download this release

Release Info

Developer vasyltech
Plugin Icon 128x128 Advanced Access Manager
Version 5.8.3
Comparing to
See all releases

Code changes from version 5.8.2 to 5.8.3

Application/Backend/Feature/Main/Capability.php CHANGED
@@ -55,7 +55,8 @@ class AAM_Backend_Feature_Main_Capability extends AAM_Backend_Feature_Abstract {
55
  'aam_manage_default', 'aam_manage_visitors', 'aam_manage_roles', 'aam_manage_users',
56
  'aam_edit_roles', 'aam_delete_roles', 'aam_toggle_users', 'aam_switch_users',
57
  'aam_manage_configpress', 'aam_manage_api_routes', 'aam_manage_uri', 'aam_manage_policy',
58
- 'aam_view_help_btn'
 
59
  )
60
  );
61
 
@@ -154,7 +155,7 @@ class AAM_Backend_Feature_Main_Capability extends AAM_Backend_Feature_Abstract {
154
 
155
  $toggle = ($subject->hasCapability($cap) ? 'checked' : 'unchecked');
156
 
157
- if (AAM::api()->isAllowed("Capability:{$cap}:AAM:toggle") === false) {
158
  $toggle = 'no-' . $toggle;
159
  }
160
 
@@ -192,7 +193,7 @@ class AAM_Backend_Feature_Main_Capability extends AAM_Backend_Feature_Abstract {
192
  }
193
 
194
  // Access & Security policy has higher priority
195
- if (AAM::api()->isAllowed("Capability:{$cap}:AAM:update") === false) {
196
  $allowed = false;
197
  }
198
 
@@ -213,66 +214,23 @@ class AAM_Backend_Feature_Main_Capability extends AAM_Backend_Feature_Abstract {
213
  }
214
 
215
  // Access & Security policy has higher priority
216
- if (AAM::api()->isAllowed("Capability:{$cap}:AAM:delete") === false) {
217
  $allowed = false;
218
  }
219
 
220
  return $allowed;
221
  }
222
 
223
- /**
224
- * Get list of user roles
225
- *
226
- * @param array $roles
227
- *
228
- * @return array
229
- *
230
- * @access protected
231
- */
232
- protected function getUserRoles($roles) {
233
- $response = array();
234
-
235
- $names = AAM_Core_API::getRoles()->get_names();
236
-
237
- if (is_array($roles)) {
238
- foreach($roles as $role) {
239
- if (is_array($names) && array_key_exists($role, $names)) {
240
- $response[] = translate_user_role($names[$role]);
241
- }
242
- }
243
- }
244
-
245
- return $response;
246
- }
247
-
248
  /**
249
  *
250
  * @return type
251
  */
252
  protected function retrieveAllCaps() {
253
  $response = array();
 
254
 
255
- $subject = AAM_Backend_Subject::getInstance()->get();
256
- $subject->initialize(true);
257
-
258
- // Load also capabilities defined in policy
259
- $stms = AAM_Core_Policy_Manager::getInstance()->find(
260
- "/^Capability:/i", $subject
261
- );
262
-
263
- $policyCaps = array();
264
-
265
- foreach($stms as $key => $stm) {
266
- $chunks = explode(':', $key);
267
- if (count($chunks) === 2) {
268
- $policyCaps[$chunks[1]] = ($stm['Effect'] === 'allow' ? 1 : 0);
269
- }
270
- }
271
-
272
- $caps = array_merge(AAM_Core_API::getAllCapabilities(), $policyCaps);
273
-
274
- foreach (array_keys($caps) as $cap) {
275
- if (AAM::api()->isAllowed("Capability:{$cap}:AAM:list") !== false) {
276
  $response[] = array(
277
  $cap,
278
  $this->getGroup($cap),
55
  'aam_manage_default', 'aam_manage_visitors', 'aam_manage_roles', 'aam_manage_users',
56
  'aam_edit_roles', 'aam_delete_roles', 'aam_toggle_users', 'aam_switch_users',
57
  'aam_manage_configpress', 'aam_manage_api_routes', 'aam_manage_uri', 'aam_manage_policy',
58
+ 'aam_view_help_btn', 'aam_edit_policy', 'aam_read_policy', 'aam_delete_policy',
59
+ 'aam_delete_policies', 'aam_edit_policies', 'aam_edit_other_policies', 'aam_publish_policies'
60
  )
61
  );
62
 
155
 
156
  $toggle = ($subject->hasCapability($cap) ? 'checked' : 'unchecked');
157
 
158
+ if (AAM::api()->getPolicyManager()->isAllowed("Capability:{$cap}:AAM:toggle") === false) {
159
  $toggle = 'no-' . $toggle;
160
  }
161
 
193
  }
194
 
195
  // Access & Security policy has higher priority
196
+ if (AAM::api()->getPolicyManager()->isAllowed("Capability:{$cap}:AAM:update") === false) {
197
  $allowed = false;
198
  }
199
 
214
  }
215
 
216
  // Access & Security policy has higher priority
217
+ if (AAM::api()->getPolicyManager()->isAllowed("Capability:{$cap}:AAM:delete") === false) {
218
  $allowed = false;
219
  }
220
 
221
  return $allowed;
222
  }
223
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
224
  /**
225
  *
226
  * @return type
227
  */
228
  protected function retrieveAllCaps() {
229
  $response = array();
230
+ $manager = AAM::api()->getPolicyManager();
231
 
232
+ foreach (array_keys(AAM_Core_API::getAllCapabilities()) as $cap) {
233
+ if ($manager->isAllowed("Capability:{$cap}:AAM:list") !== false) {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
234
  $response[] = array(
235
  $cap,
236
  $this->getGroup($cap),
Application/Backend/Feature/Main/Post.php CHANGED
@@ -517,7 +517,7 @@ class AAM_Backend_Feature_Main_Post extends AAM_Backend_Feature_Abstract {
517
  $id = AAM_Core_Request::post('objectId', null);
518
 
519
  $param = AAM_Core_Request::post('param');
520
- $value = AAM_Core_Request::post('value');
521
 
522
  //clear cache
523
  AAM_Core_API::clearCache();
517
  $id = AAM_Core_Request::post('objectId', null);
518
 
519
  $param = AAM_Core_Request::post('param');
520
+ $value = filter_input(INPUT_POST, 'value');
521
 
522
  //clear cache
523
  AAM_Core_API::clearCache();
Application/Backend/Filter.php CHANGED
@@ -50,10 +50,6 @@ class AAM_Backend_Filter {
50
  add_filter('page_row_actions', array($this, 'postRowActions'), 10, 2);
51
  add_filter('post_row_actions', array($this, 'postRowActions'), 10, 2);
52
 
53
- //default category filder
54
- // TODO - THIS HAS TO GO TO THE PLUS PACKAGE EXTENSION
55
- add_filter('pre_option_default_category', array($this, 'filterDefaultCategory'));
56
-
57
  add_action('pre_post_update', array($this, 'prePostUpdate'), 10, 2);
58
 
59
  //user/role filters
@@ -165,31 +161,6 @@ class AAM_Backend_Filter {
165
  return $actions;
166
  }
167
 
168
- /**
169
- * Override default category if defined
170
- *
171
- * @param type $category
172
- *
173
- * @return int
174
- *
175
- * @access public
176
- * @staticvar type $default
177
- */
178
- public function filterDefaultCategory($category) {
179
- //check if user category is defined
180
- $id = get_current_user_id();
181
- $default = AAM_Core_Config::get('feature.post.defaultTerm.user.' . $id , null);
182
- $roles = AAM::getUser()->roles;
183
-
184
- if (is_null($default) && count($roles)) {
185
- $default = AAM_Core_Config::get(
186
- 'feature.post.defaultTerm.role.' . array_shift($roles), false
187
- );
188
- }
189
-
190
- return ($default ? $default : $category);
191
- }
192
-
193
  /**
194
  * Post update hook
195
  *
50
  add_filter('page_row_actions', array($this, 'postRowActions'), 10, 2);
51
  add_filter('post_row_actions', array($this, 'postRowActions'), 10, 2);
52
 
 
 
 
 
53
  add_action('pre_post_update', array($this, 'prePostUpdate'), 10, 2);
54
 
55
  //user/role filters
161
  return $actions;
162
  }
163
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
164
  /**
165
  * Post update hook
166
  *
Application/Backend/Manager.php CHANGED
@@ -96,6 +96,10 @@ class AAM_Backend_Manager {
96
  //manager WordPress metaboxes
97
  add_action("in_admin_header", array($this, 'initMetaboxes'), 999);
98
 
 
 
 
 
99
  if (AAM_Core_Config::get('ui.settings.renderAccessActionLink', true)) {
100
  //extend post inline actions
101
  add_filter('page_row_actions', array($this, 'postRowActions'), 10, 2);
@@ -143,6 +147,17 @@ class AAM_Backend_Manager {
143
  }
144
  }
145
 
 
 
 
 
 
 
 
 
 
 
 
146
  /**
147
  *
148
  * @param boolean $result
96
  //manager WordPress metaboxes
97
  add_action("in_admin_header", array($this, 'initMetaboxes'), 999);
98
 
99
+ // manage Navigation Menu page to support
100
+ // https://forum.aamplugin.com/d/61-restrict-role-from-updating-or-deleting-specific-navigation-menus
101
+ add_filter('nav_menu_meta_box_object', array($this, 'manageNavMenuMetabox'));
102
+
103
  if (AAM_Core_Config::get('ui.settings.renderAccessActionLink', true)) {
104
  //extend post inline actions
105
  add_filter('page_row_actions', array($this, 'postRowActions'), 10, 2);
147
  }
148
  }
149
 
150
+ /**
151
+ *
152
+ * @param type $postType
153
+ * @return type
154
+ */
155
+ public function manageNavMenuMetabox($postType) {
156
+ $postType->_default_query['suppress_filters'] = false;
157
+
158
+ return $postType;
159
+ }
160
+
161
  /**
162
  *
163
  * @param boolean $result
Application/Backend/Subject.php CHANGED
@@ -71,9 +71,7 @@ class AAM_Backend_Subject {
71
 
72
  if (class_exists($classname)) {
73
  $subject = new $classname(stripslashes($id));
74
-
75
- // Load access policy
76
- $subject->getObject('policy');
77
 
78
  $this->setSubject($subject);
79
  }
71
 
72
  if (class_exists($classname)) {
73
  $subject = new $classname(stripslashes($id));
74
+ $subject->initialize();
 
 
75
 
76
  $this->setSubject($subject);
77
  }
Application/Core/API.php CHANGED
@@ -240,12 +240,10 @@ final class AAM_Core_API {
240
  * @static
241
  */
242
  public static function capabilityExists($cap) {
243
- $caps = self::getAllCapabilities();
244
-
245
  $exists = array_key_exists($cap, $caps) ? true : false;
246
- $policy = (AAM::api()->isAllowed("Capability:{$cap}") !== null);
247
 
248
- return (is_string($cap) && ($exists || $policy));
249
  }
250
 
251
  /**
240
  * @static
241
  */
242
  public static function capabilityExists($cap) {
243
+ $caps = self::getAllCapabilities();
 
244
  $exists = array_key_exists($cap, $caps) ? true : false;
 
245
 
246
+ return (is_string($cap) && $exists);
247
  }
248
 
249
  /**
Application/Core/Compatibility.php CHANGED
@@ -16,6 +16,35 @@
16
  */
17
  class AAM_Core_Compatibility {
18
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
19
  /**
20
  *
21
  */
@@ -35,27 +64,6 @@ class AAM_Core_Compatibility {
35
  return $key;
36
  }
37
 
38
- /**
39
- *
40
- * @param type $list
41
- * @return type
42
- * @since v5.7.3
43
- *
44
- * @todo Remove Jan 2020
45
- */
46
- public static function preparePolicyList($list) {
47
- if (!is_null($list)) {
48
- if (empty($list['Statements'])) {
49
- $list = array(
50
- 'Statements' => $list,
51
- 'Features' => array()
52
- );
53
- }
54
- }
55
-
56
- return $list;
57
- }
58
-
59
  /**
60
  * Converting metabox options from 2 dimensional to 1
61
  *
16
  */
17
  class AAM_Core_Compatibility {
18
 
19
+ /**
20
+ * Convert config to the Policy Config
21
+ *
22
+ * @param string $option
23
+ * @param mixed $value
24
+ *
25
+ * @return mixed
26
+ *
27
+ * @access public
28
+ * @static
29
+ * @since v5.9
30
+ */
31
+ public static function convertConfig($option, $value) {
32
+ if (strpos($option, '.defaultTerm.') !== false && empty($value)) {
33
+ $param = AAM_Core_Policy_Factory::get()->getParam(
34
+ 'post:default:category'
35
+ );
36
+ if (!empty($param)) {
37
+ if (!is_numeric($param)) {
38
+ $term = get_term_by('slug', $param, 'category');
39
+ $param = (is_wp_error($term) || empty($term) ? null : $term->term_id);
40
+ }
41
+ }
42
+ $value = (is_null($param) ? $value : $param);
43
+ }
44
+
45
+ return $value;
46
+ }
47
+
48
  /**
49
  *
50
  */
64
  return $key;
65
  }
66
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
67
  /**
68
  * Converting metabox options from 2 dimensional to 1
69
  *
Application/Core/Gateway.php CHANGED
@@ -29,6 +29,22 @@ final class AAM_Core_Gateway {
29
  */
30
  protected function __construct() {}
31
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
32
  /**
33
  * Get AAM configuration option
34
  *
@@ -40,7 +56,9 @@ final class AAM_Core_Gateway {
40
  * @access public
41
  */
42
  public function getConfig($option, $default = null) {
43
- return AAM_Core_Config::get($option, $default);
 
 
44
  }
45
 
46
  /**
@@ -57,6 +75,7 @@ final class AAM_Core_Gateway {
57
  public function getUser($id = null) {
58
  if (!empty($id)) {
59
  $user = new AAM_Core_Subject_User($id);
 
60
  } elseif (get_current_user_id()) {
61
  $user = AAM::getUser();
62
  } else {
@@ -91,41 +110,6 @@ final class AAM_Core_Gateway {
91
  AAM_Core_API::reject(AAM_Core_Api_Area::get(), $params);
92
  }
93
 
94
- /**
95
- * Check if current user has access to specified resource
96
- *
97
- * Apply all access/security policies and identify if user has access to specified
98
- * resource.
99
- *
100
- * @param string $resource
101
- * @param string $action
102
- *
103
- * @return mixed Boolean true|false if explicit access is defined or null if no
104
- * exact match found
105
- */
106
- public function isAllowed($resource, $action = null) {
107
- $policy = AAM::api()->getUser()->getObject('policy');
108
-
109
- return $policy->isAllowed($resource, $action);
110
- }
111
-
112
- /**
113
- * Check if feature is enabled
114
- *
115
- * @param string $feature
116
- * @param string $plugin
117
- *
118
- * @return boolean|null
119
- *
120
- * @access public
121
- * @since v5.7.3
122
- */
123
- public function isEnabled($feature, $plugin = 'advanced-access-manager') {
124
- $policy = AAM::api()->getUser()->getObject('policy');
125
-
126
- return $policy->isEnabled($feature, $plugin);
127
- }
128
-
129
  /**
130
  * Get policy manager
131
  *
@@ -133,8 +117,10 @@ final class AAM_Core_Gateway {
133
  *
134
  * @access public
135
  */
136
- public function getPolicyManager() {
137
- return AAM_Core_Policy_Manager::getInstance();
 
 
138
  }
139
 
140
  /**
@@ -191,6 +177,17 @@ final class AAM_Core_Gateway {
191
  exit; // Halt the execution
192
  }
193
 
 
 
 
 
 
 
 
 
 
 
 
194
  /**
195
  * Check if capability exists
196
  *
29
  */
30
  protected function __construct() {}
31
 
32
+ /**
33
+ * Prevent from fatals
34
+ *
35
+ * @param string $name
36
+ * @param array $arguments
37
+ *
38
+ * @return void
39
+ *
40
+ * @access public
41
+ */
42
+ public function __call($name, $arguments) {
43
+ trigger_error(
44
+ esc_js(__("The method {$name} is not defined in the AAM API", AAM_KEY))
45
+ );
46
+ }
47
+
48
  /**
49
  * Get AAM configuration option
50
  *
56
  * @access public
57
  */
58
  public function getConfig($option, $default = null) {
59
+ $value = AAM_Core_Config::get($option, $default);
60
+
61
+ return AAM_Core_Compatibility::convertConfig($option, $value);
62
  }
63
 
64
  /**
75
  public function getUser($id = null) {
76
  if (!empty($id)) {
77
  $user = new AAM_Core_Subject_User($id);
78
+ $user->initialize();
79
  } elseif (get_current_user_id()) {
80
  $user = AAM::getUser();
81
  } else {
110
  AAM_Core_API::reject(AAM_Core_Api_Area::get(), $params);
111
  }
112
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
113
  /**
114
  * Get policy manager
115
  *
117
  *
118
  * @access public
119
  */
120
+ public function getPolicyManager(AAM_Core_Subject $subject = null) {
121
+ return AAM_Core_Policy_Factory::get(
122
+ (is_null($subject) ? $this->getUser() : $subject)
123
+ );
124
  }
125
 
126
  /**
177
  exit; // Halt the execution
178
  }
179
 
180
+ /**
181
+ * Get current post
182
+ *
183
+ * @return WP_Post
184
+ *
185
+ * @access public
186
+ */
187
+ public function getCurrentPost() {
188
+ return AAM_Core_API::getCurrentPost();
189
+ }
190
+
191
  /**
192
  * Check if capability exists
193
  *
Application/Core/JwtAuth.php CHANGED
@@ -116,7 +116,7 @@ class AAM_Core_JwtAuth {
116
  );
117
  }
118
  } else {
119
- $response->data = $result['error'];
120
  $response->status = 403;
121
  }
122
 
@@ -144,7 +144,7 @@ class AAM_Core_JwtAuth {
144
  $response->status = 200;
145
  $response->data = array(
146
  'status' => 'valid',
147
- 'token_expires' => date('m/d/Y H:i:s O', $claims->exp)
148
  );
149
  } catch (Exception $ex) {
150
  $response->data['reason'] = $ex->getMessage();
116
  );
117
  }
118
  } else {
119
+ $response->data = $result['reason'];
120
  $response->status = 403;
121
  }
122
 
144
  $response->status = 200;
145
  $response->data = array(
146
  'status' => 'valid',
147
+ 'token_expires' => $claims->exp
148
  );
149
  } catch (Exception $ex) {
150
  $response->data['reason'] = $ex->getMessage();
Application/Core/Object.php CHANGED
@@ -74,9 +74,7 @@ abstract class AAM_Core_Object {
74
  *
75
  * @access public
76
  */
77
- public function initialize() {
78
-
79
- }
80
 
81
  /**
82
  * Set current subject
74
  *
75
  * @access public
76
  */
77
+ public function initialize() {}
 
 
78
 
79
  /**
80
  * Set current subject
Application/Core/Object/Cache.php CHANGED
@@ -125,23 +125,4 @@ class AAM_Core_Object_Cache extends AAM_Core_Object {
125
  return $this->getSubject()->deleteOption('cache');
126
  }
127
 
128
- /**
129
- * Read object from parent subject
130
- *
131
- * @return mixed
132
- *
133
- * @access public
134
- */
135
- public function inheritFromParent(){
136
- $subject = $this->getParent();
137
-
138
- if (is_a($subject, 'AAM_Core_Subject')){
139
- $option = $subject->getObject('cache')->getOption();
140
- } else {
141
- $option = array();
142
- }
143
-
144
- return $option;
145
- }
146
-
147
  }
125
  return $this->getSubject()->deleteOption('cache');
126
  }
127
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
128
  }
Application/Core/Object/Capability.php CHANGED
@@ -30,9 +30,7 @@ class AAM_Core_Object_Capability extends AAM_Core_Object {
30
  $caps = $this->getSubject()->getCapabilities();
31
 
32
  // Load Capabilities from the policy
33
- $stms = AAM_Core_Policy_Manager::getInstance()->find(
34
- "/^Capability:/i", $subject
35
- );
36
 
37
  foreach($stms as $key => $stm) {
38
  $chunks = explode(':', $key);
30
  $caps = $this->getSubject()->getCapabilities();
31
 
32
  // Load Capabilities from the policy
33
+ $stms = AAM_Core_Policy_Factory::get($subject)->find("/^Capability:/i");
 
 
34
 
35
  foreach($stms as $key => $stm) {
36
  $chunks = explode(':', $key);
Application/Core/Object/Menu.php CHANGED
@@ -35,9 +35,7 @@ class AAM_Core_Object_Menu extends AAM_Core_Object {
35
 
36
  // Load settings from Access & Security Policy
37
  if (empty($option)) {
38
- $stms = AAM_Core_Policy_Manager::getInstance()->find(
39
- "/^BackendMenu:/i", $subject
40
- );
41
 
42
  foreach($stms as $key => $stm) {
43
  $chunks = explode(':', $key);
35
 
36
  // Load settings from Access & Security Policy
37
  if (empty($option)) {
38
+ $stms = AAM_Core_Policy_Factory::get($subject)->find("/^BackendMenu:/i");
 
 
39
 
40
  foreach($stms as $key => $stm) {
41
  $chunks = explode(':', $key);
Application/Core/Object/Metabox.php CHANGED
@@ -37,9 +37,7 @@ class AAM_Core_Object_Metabox extends AAM_Core_Object {
37
 
38
  // Load settings from Access & Security Policy
39
  if (empty($option)) {
40
- $stms = AAM_Core_Policy_Manager::getInstance()->find(
41
- "/^(Metabox|Widget):/i", $subject
42
- );
43
 
44
  foreach($stms as $key => $stm) {
45
  $chunks = explode(':', $key);
37
 
38
  // Load settings from Access & Security Policy
39
  if (empty($option)) {
40
+ $stms = AAM_Core_Policy_Factory::get($subject)->find("/^(Metabox|Widget):/i");
 
 
41
 
42
  foreach($stms as $key => $stm) {
43
  $chunks = explode(':', $key);
Application/Core/Object/Policy.php CHANGED
@@ -15,30 +15,6 @@
15
  */
16
  class AAM_Core_Object_Policy extends AAM_Core_Object {
17
 
18
- /**
19
- * Resource tree
20
- *
21
- * Shared resource tree across all the policy instances
22
- *
23
- * @var array
24
- *
25
- * @access protected
26
- * @static
27
- */
28
- protected static $resources = array();
29
-
30
- /**
31
- * Feature tree
32
- *
33
- * Shared features tree across all the policy instances
34
- *
35
- * @var array
36
- *
37
- * @access protected
38
- * @static
39
- */
40
- protected static $features = array();
41
-
42
  /**
43
  * Constructor
44
  *
@@ -65,7 +41,8 @@ class AAM_Core_Object_Policy extends AAM_Core_Object {
65
  $subject = $this->getSubject();
66
  $parent = $subject->inheritFromParent('policy');
67
 
68
- if(empty($parent)) {
 
69
  $parent = array();
70
  }
71
 
@@ -81,241 +58,6 @@ class AAM_Core_Object_Policy extends AAM_Core_Object {
81
  }
82
 
83
  $this->setOption($parent);
84
-
85
- // Load statements for policies
86
- $subjectId = $subject->getUID();
87
- $subjectId .= ($subject->getId() ? ".{$subject->getId()}" : '');
88
-
89
- $this->load($subjectId, $option);
90
- }
91
-
92
- /**
93
- * Load all defined policies for specified subject
94
- *
95
- * @param string $subjectId
96
- * @param array $policies
97
- *
98
- * @return void
99
- *
100
- * @access public
101
- */
102
- public function load($subjectId, $policies) {
103
- $resources = array();
104
- $features = array();
105
- $list = $this->parsePolicy($subjectId, $policies);
106
-
107
- // Evaluate all Statements first
108
- foreach($list['Statements'] as $statement) {
109
- if (isset($statement['Resource']) && $this->applicable($statement)) {
110
- $this->evaluateStatement($statement, $resources);
111
- }
112
- }
113
- self::$resources[$subjectId] = $resources;
114
-
115
- // Evaluate all Features then
116
- foreach($list['Features'] as $feature) {
117
- if ($this->applicable($feature)) {
118
- $this->evaluateFeature($feature, $features);
119
- }
120
- }
121
-
122
- self::$features[$subjectId] = $features;
123
- }
124
-
125
- /**
126
- *
127
- * @return type
128
- */
129
- protected function parsePolicy($subjectId, $policies) {
130
- $cache = AAM::api()->getUser()->getObject('cache');
131
- $list = AAM_Core_Compatibility::preparePolicyList(
132
- $cache->get('policy', $subjectId, null)
133
- );
134
-
135
- if (is_null($list)) {
136
- $list = array(
137
- 'Statements' => array(),
138
- 'Features' => array()
139
- );
140
-
141
- foreach($policies as $id => $effect) {
142
- $policy = get_post($id);
143
-
144
- if (is_a($policy, 'WP_Post')) {
145
- $obj = json_decode($policy->post_content, true);
146
- if (json_last_error() === JSON_ERROR_NONE) {
147
- $list['Statements'] = array_merge(
148
- $list['Statements'], $this->extractStatements($obj, empty($effect))
149
- );
150
- $list['Features'] = array_merge(
151
- $list['Features'], $this->extractFeatures($obj, empty($effect))
152
- );
153
- }
154
- }
155
- }
156
- $cache->add('policy', $subjectId, $list);
157
- }
158
-
159
- return $list;
160
- }
161
-
162
- /**
163
- *
164
- * @param type $policy
165
- * @return type
166
- */
167
- protected function extractStatements($policy, $unset = false) {
168
- $statements = array();
169
-
170
- if (isset($policy['Statement'])) {
171
- if (is_array($policy['Statement'])) {
172
- $statements = $policy['Statement'];
173
- } else {
174
- $statements = array($policy['Statement']);
175
- }
176
- }
177
-
178
- // normalize each statement
179
- foreach(array('Action', 'Condition') as $prop) {
180
- foreach($statements as $i => $statement) {
181
- if (isset($statement[$prop])) {
182
- $statements[$i][$prop] = (array) $statement[$prop];
183
- }
184
- }
185
- }
186
-
187
- if ($unset === true) {
188
- foreach($statements as &$statement) {
189
- $statement['Unset'] = true;
190
- }
191
- }
192
-
193
- return $statements;
194
- }
195
-
196
- /**
197
- * Extract list of policy features
198
- *
199
- * @param array $policy
200
- *
201
- * @return array
202
- *
203
- * @access protected
204
- * @since v5.7.3
205
- */
206
- protected function extractFeatures($policy, $unset = false) {
207
- $features = array();
208
-
209
- if (isset($policy['Feature'])) {
210
- if (is_array($policy['Feature'])) {
211
- $features = $policy['Feature'];
212
- } else {
213
- $features = array($policy['Feature']);
214
- }
215
- }
216
-
217
- if ($unset === true) {
218
- foreach($features as &$feature) {
219
- $feature['Unset'] = true;
220
- }
221
- }
222
-
223
- return $features;
224
- }
225
-
226
- /**
227
- *
228
- * @param type $statement
229
- * @param type $resources
230
- */
231
- protected function evaluateStatement($statement, &$resources) {
232
- $actions = (array)(!empty($statement['Action']) ? $statement['Action'] : '');
233
-
234
- foreach((array)$statement['Resource'] as $resource) {
235
- foreach($actions as $action) {
236
- $id = strtolower($resource . (!empty($action) ? ":{$action}" : ''));
237
-
238
- // Add new statement
239
- if (!isset($resources[$id])) {
240
- $resources[$id] = $statement;
241
- // Merge statement unless the first one is marked as Enforced
242
- } elseif (empty($resources[$id]['Enforce'])) {
243
- $resources[$id] = $this->mergeStatements(
244
- $resources[$id], $statement
245
- );
246
- }
247
-
248
- $this->normalizeResource($resources, $id);
249
- }
250
- }
251
- }
252
-
253
- /**
254
- *
255
- * @param type $feature
256
- * @param type $features
257
- */
258
- protected function evaluateFeature($feature, &$features) {
259
- $id = strtolower("{$feature['Plugin']}:{$feature['Feature']}");
260
-
261
- // Add new statement
262
- if (!isset($features[$id])) {
263
- $features[$id] = $feature;
264
- // Override feature unless the first one is marked as Enforced
265
- } elseif (empty($features[$id]['Enforce'])) {
266
- $features[$id] = $feature;
267
- }
268
- }
269
-
270
- /**
271
- *
272
- * @param type $resources
273
- * @param type $id
274
- */
275
- protected function normalizeResource(&$resources, $id) {
276
- // cleanup fields
277
- foreach(array('Resource', 'Action', 'Condition') as $field) {
278
- if (isset($resources[$id][$field])) {
279
- unset($resources[$id][$field]);
280
- }
281
- }
282
- }
283
-
284
- /**
285
- *
286
- * @param type $statement
287
- * @return boolean
288
- */
289
- protected function applicable($statement) {
290
- $result = true;
291
-
292
- if (!empty($statement['Condition']) && !is_scalar($statement['Condition'])) {
293
- $result = AAM_Core_Policy_Condition::getInstance()->evaluate(
294
- $statement['Condition']
295
- );
296
- }
297
-
298
- return $result;
299
- }
300
-
301
- /**
302
- *
303
- * @param type $left
304
- * @param type $right
305
- * @return type
306
- */
307
- protected function mergeStatements($left, $right) {
308
- if (isset($right['Resource'])) {
309
- unset($right['Resource']);
310
- }
311
-
312
- $merged = array_merge($left, $right);
313
-
314
- if (!isset($merged['Effect'])) {
315
- $merged['Effect'] = 'deny';
316
- }
317
-
318
- return $merged;
319
  }
320
 
321
  /**
@@ -344,43 +86,6 @@ class AAM_Core_Object_Policy extends AAM_Core_Object {
344
  return !empty($option[$id]);
345
  }
346
 
347
- /**
348
- *
349
- * @param type $resource
350
- * @return type
351
- */
352
- public function isAllowed($resource, $action = null) {
353
- $allowed = null;
354
-
355
- $id = strtolower($resource . (!empty($action) ? ":{$action}" : ''));
356
- $res = $this->getResources();
357
-
358
- if (isset($res[$id])) {
359
- $allowed = ($res[$id]['Effect'] === 'allow');
360
- }
361
-
362
- return $allowed;
363
- }
364
-
365
- /**
366
- *
367
- * @param type $feature
368
- * @param type $plugin
369
- * @return type
370
- */
371
- public function isEnabled($feature, $plugin) {
372
- $enabled = null;
373
-
374
- $id = strtolower("{$plugin}:{$feature}");
375
- $res = $this->getFeatures();
376
-
377
- if (isset($res[$id])) {
378
- $enabled = in_array($res[$id]['Effect'], array('allow', 'enable'), true);
379
- }
380
-
381
- return $enabled;
382
- }
383
-
384
  /**
385
  *
386
  * @param type $id
@@ -406,63 +111,4 @@ class AAM_Core_Object_Policy extends AAM_Core_Object {
406
  return AAM::api()->mergeSettings($external, $this->getOption(), 'policy');
407
  }
408
 
409
- /**
410
- *
411
- * @return type
412
- */
413
- public function getResources(AAM_Core_Subject $subject = null) {
414
- return $this->getList(self::$resources, $subject);
415
- }
416
-
417
- /**
418
- *
419
- * @return type
420
- */
421
- public function getFeatures(AAM_Core_Subject $subject = null) {
422
- return $this->getList(self::$features, $subject);
423
- }
424
-
425
- /**
426
- * Get list from source
427
- *
428
- * @param array $source
429
- * @param AAM_Core_Subject $subject
430
- *
431
- * @return array
432
- *
433
- * @access protected
434
- * @since v5.8.2
435
- */
436
- protected function getList(&$source, AAM_Core_Subject $subject = null) {
437
- $response = array();
438
-
439
- if (is_null($subject)) {
440
- if (!isset($source['__combined'])) {
441
- foreach($source as $resources) {
442
- foreach ($resources as $id => $props) {
443
- if (!empty($props['Unset'])) {
444
- if (isset($response[$id])) { // Clear the entire chain
445
- unset($response[$id]);
446
- }
447
- } else {
448
- $response[$id] = $props;
449
- }
450
- }
451
- }
452
- $source['__combined'] = $response;
453
- } else {
454
- $response = $source['__combined'];
455
- }
456
- } else {
457
- $subjectId = $subject->getUID();
458
- $subjectId .= ($subject->getId() ? ".{$subject->getId()}" : '');
459
-
460
- if (isset($source[$subjectId])) {
461
- $response = $source[$subjectId];
462
- }
463
- }
464
-
465
- return $response;
466
- }
467
-
468
  }
15
  */
16
  class AAM_Core_Object_Policy extends AAM_Core_Object {
17
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
18
  /**
19
  * Constructor
20
  *
41
  $subject = $this->getSubject();
42
  $parent = $subject->inheritFromParent('policy');
43
 
44
+ // Prevent from any kind of surprises
45
+ if(empty($parent) || !is_array($parent)) {
46
  $parent = array();
47
  }
48
 
58
  }
59
 
60
  $this->setOption($parent);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
61
  }
62
 
63
  /**
86
  return !empty($option[$id]);
87
  }
88
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
89
  /**
90
  *
91
  * @param type $id
111
  return AAM::api()->mergeSettings($external, $this->getOption(), 'policy');
112
  }
113
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
114
  }
Application/Core/Object/Post.php CHANGED
@@ -95,9 +95,9 @@ class AAM_Core_Object_Post extends AAM_Core_Object {
95
 
96
  // Read settings from access policy
97
  if (empty($option)) {
98
- $stms = AAM_Core_Policy_Manager::getInstance()->find(
99
- "/^post:{$post->post_type}:({$post->post_name}|{$post->ID}):/",
100
- $subject
101
  );
102
  $option = array();
103
 
95
 
96
  // Read settings from access policy
97
  if (empty($option)) {
98
+ $stms = AAM_Core_Policy_Factory::get($subject)->find(
99
+ "/^post:{$post->post_type}:({$post->post_name}|{$post->ID}):/",
100
+ array('post' => $post)
101
  );
102
  $option = array();
103
 
Application/Core/Object/Route.php CHANGED
@@ -37,9 +37,7 @@ class AAM_Core_Object_Route extends AAM_Core_Object {
37
 
38
  // Load settings from Access & Security Policy
39
  if (empty($option)) {
40
- $stms = AAM_Core_Policy_Manager::getInstance()->find(
41
- "/^Route:/i", $subject
42
- );
43
 
44
  foreach($stms as $key => $stm) {
45
  $chunks = explode(':', $key);
37
 
38
  // Load settings from Access & Security Policy
39
  if (empty($option)) {
40
+ $stms = AAM_Core_Policy_Factory::get($subject)->find("/^Route:/i");
 
 
41
 
42
  foreach($stms as $key => $stm) {
43
  $chunks = explode(':', $key);
Application/Core/Object/Toolbar.php CHANGED
@@ -35,9 +35,7 @@ class AAM_Core_Object_Toolbar extends AAM_Core_Object {
35
 
36
  // Load settings from Access & Security Policy
37
  if (empty($option)) {
38
- $stms = AAM_Core_Policy_Manager::getInstance()->find(
39
- "/^Toolbar:/i", $subject
40
- );
41
 
42
  foreach($stms as $key => $stm) {
43
  $chunks = explode(':', $key);
35
 
36
  // Load settings from Access & Security Policy
37
  if (empty($option)) {
38
+ $stms = AAM_Core_Policy_Factory::get($subject)->find("/^Toolbar:/i");
 
 
39
 
40
  foreach($stms as $key => $stm) {
41
  $chunks = explode(':', $key);
Application/Core/Object/Uri.php CHANGED
@@ -34,9 +34,7 @@ class AAM_Core_Object_Uri extends AAM_Core_Object {
34
  }
35
 
36
  if (empty($option)) {
37
- $stms = AAM_Core_Policy_Manager::getInstance()->find(
38
- "/^URI:/i", $subject
39
- );
40
 
41
  foreach($stms as $key => $stm) {
42
  $chunks = explode(':', $key);
34
  }
35
 
36
  if (empty($option)) {
37
+ $stms = AAM_Core_Policy_Factory::get($subject)->find("/^URI:/i");
 
 
38
 
39
  foreach($stms as $key => $stm) {
40
  $chunks = explode(':', $key);
Application/Core/Object/Visibility.php CHANGED
@@ -59,9 +59,8 @@ class AAM_Core_Object_Visibility extends AAM_Core_Object {
59
 
60
  // Read all the settings from the Access & Security Policies
61
  $area = AAM_Core_Api_Area::get();
62
- $stms = AAM_Core_Policy_Manager::getInstance()->find(
63
- "/^post:(.*):(list|listtoothers)$/",
64
- $subject
65
  );
66
 
67
  foreach($stms as $key => $stm) {
59
 
60
  // Read all the settings from the Access & Security Policies
61
  $area = AAM_Core_Api_Area::get();
62
+ $stms = AAM_Core_Policy_Factory::get($subject)->find(
63
+ "/^post:(.*):(list|listtoothers)$/"
 
64
  );
65
 
66
  foreach($stms as $key => $stm) {
Application/Core/Policy/Condition.php CHANGED
@@ -61,13 +61,14 @@ final class AAM_Core_Policy_Condition {
61
  /**
62
  * Evaluate the group of conditions based on type
63
  *
64
- * @param array $conditions
 
65
  *
66
  * @return boolean
67
  *
68
  * @access public
69
  */
70
- public function evaluate($conditions) {
71
  $result = true;
72
 
73
  foreach($conditions as $type => $conditions) {
@@ -75,7 +76,7 @@ final class AAM_Core_Policy_Condition {
75
 
76
  if (isset($this->map[$type])) {
77
  $callback = array($this, $this->map[$type]);
78
- $result = $result && call_user_func($callback, $conditions);
79
  } else {
80
  $result = false;
81
  }
@@ -88,15 +89,16 @@ final class AAM_Core_Policy_Condition {
88
  * Evaluate group of BETWEEN conditions
89
  *
90
  * @param array $conditions
 
91
  *
92
  * @return boolean
93
  *
94
  * @access protected
95
  */
96
- protected function evaluateBetweenConditions($conditions) {
97
  $result = false;
98
 
99
- foreach($this->prepareConditions($conditions) as $left => $right) {
100
  foreach((array)$right as $subset) {
101
  $min = (is_array($subset) ? array_shift($subset) : $subset);
102
  $max = (is_array($subset) ? end($subset) : $subset);
@@ -114,15 +116,16 @@ final class AAM_Core_Policy_Condition {
114
  * The values have to be identical
115
  *
116
  * @param array $conditions
 
117
  *
118
  * @return boolean
119
  *
120
  * @access protected
121
  */
122
- protected function evaluateEqualsConditions($conditions) {
123
  $result = false;
124
 
125
- foreach($this->prepareConditions($conditions) as $left => $right) {
126
  $result = $result || ($left === $right);
127
  }
128
 
@@ -133,28 +136,30 @@ final class AAM_Core_Policy_Condition {
133
  * Evaluate group of NOT EQUALs conditions
134
  *
135
  * @param array $conditions
 
136
  *
137
  * @return boolean
138
  *
139
  * @access protected
140
  */
141
- protected function evaluateNotEqualsConditions($conditions) {
142
- return !$this->evaluateEqualsConditions($conditions);
143
  }
144
 
145
  /**
146
  * Evaluate group of GREATER THEN conditions
147
  *
148
  * @param array $conditions
 
149
  *
150
  * @return boolean
151
  *
152
  * @access protected
153
  */
154
- protected function evaluateGreaterConditions($conditions) {
155
  $result = false;
156
 
157
- foreach($this->prepareConditions($conditions) as $left => $right) {
158
  $result = $result || ($left > $right);
159
  }
160
 
@@ -165,15 +170,16 @@ final class AAM_Core_Policy_Condition {
165
  * Evaluate group of LESS THEN conditions
166
  *
167
  * @param array $conditions
 
168
  *
169
  * @return boolean
170
  *
171
  * @access protected
172
  */
173
- protected function evaluateLessConditions($conditions) {
174
  $result = false;
175
 
176
- foreach($this->prepareConditions($conditions) as $left => $right) {
177
  $result = $result || ($left < $right);
178
  }
179
 
@@ -184,15 +190,16 @@ final class AAM_Core_Policy_Condition {
184
  * Evaluate group of GREATER OR EQUALS THEN conditions
185
  *
186
  * @param array $conditions
 
187
  *
188
  * @return boolean
189
  *
190
  * @access protected
191
  */
192
- protected function evaluateGreaterOrEqualsConditions($conditions) {
193
  $result = false;
194
 
195
- foreach($this->prepareConditions($conditions) as $left => $right) {
196
  $result = $result || ($left >= $right);
197
  }
198
 
@@ -203,15 +210,16 @@ final class AAM_Core_Policy_Condition {
203
  * Evaluate group of LESS OR EQUALS THEN conditions
204
  *
205
  * @param array $conditions
 
206
  *
207
  * @return boolean
208
  *
209
  * @access protected
210
  */
211
- protected function evaluateLessOrEqualsConditions($conditions) {
212
  $result = false;
213
 
214
- foreach($this->prepareConditions($conditions) as $left => $right) {
215
  $result = $result || ($left <= $right);
216
  }
217
 
@@ -222,15 +230,16 @@ final class AAM_Core_Policy_Condition {
222
  * Evaluate group of IN conditions
223
  *
224
  * @param array $conditions
 
225
  *
226
  * @return boolean
227
  *
228
  * @access protected
229
  */
230
- protected function evaluateInConditions($conditions) {
231
  $result = false;
232
 
233
- foreach($this->prepareConditions($conditions) as $left => $right) {
234
  $result = $result || in_array($left, (array) $right, true);
235
  }
236
 
@@ -241,28 +250,30 @@ final class AAM_Core_Policy_Condition {
241
  * Evaluate group of NOT IN conditions
242
  *
243
  * @param array $conditions
 
244
  *
245
  * @return boolean
246
  *
247
  * @access protected
248
  */
249
- protected function evaluateNotInConditions($conditions) {
250
- return !$this->evaluateInConditions($conditions);
251
  }
252
 
253
  /**
254
  * Evaluate group of LIKE conditions
255
  *
256
  * @param array $conditions
 
257
  *
258
  * @return boolean
259
  *
260
  * @access protected
261
  */
262
- protected function evaluateLikeConditions($conditions) {
263
  $result = false;
264
 
265
- foreach($this->prepareConditions($conditions) as $left => $right) {
266
  foreach((array)$right as $el) {
267
  $sub = str_replace('\*', '.*', preg_quote($el));
268
  $result = $result || preg_match('@^' . $sub . '$@', $left);
@@ -276,28 +287,30 @@ final class AAM_Core_Policy_Condition {
276
  * Evaluate group of NOT LIKE conditions
277
  *
278
  * @param array $conditions
 
279
  *
280
  * @return boolean
281
  *
282
  * @access protected
283
  */
284
- protected function evaluateNotLikeConditions($conditions) {
285
- return !$this->evaluateLikeConditions($conditions);
286
  }
287
 
288
  /**
289
  * Evaluate group of REGEX conditions
290
  *
291
  * @param array $conditions
 
292
  *
293
  * @return boolean
294
  *
295
  * @access protected
296
  */
297
- protected function evaluateRegexConditions($conditions) {
298
  $result = false;
299
 
300
- foreach($this->prepareConditions($conditions) as $left => $right) {
301
  $result = $result || preg_match($right, $left);
302
  }
303
 
@@ -308,18 +321,19 @@ final class AAM_Core_Policy_Condition {
308
  * Prepare conditions by replacing all defined tokens
309
  *
310
  * @param array $conditions
 
311
  *
312
  * @return array
313
  *
314
  * @access protected
315
  */
316
- protected function prepareConditions($conditions) {
317
  $result = array();
318
 
319
  if (is_array($conditions)) {
320
  foreach($conditions as $left => $right) {
321
- $left = $this->parseExpression($left);
322
- $right = $this->parseExpression($right);
323
 
324
  if ($left !== false) { // Do not include any failed conditions
325
  $result[$left] = $right;
@@ -333,16 +347,17 @@ final class AAM_Core_Policy_Condition {
333
  /**
334
  * Parse condition and try to replace all defined tokens
335
  *
336
- * @param mixed $exp Part of the condition (either left or right)
 
337
  *
338
  * @return mixed Prepared part of the condition or false on failure
339
  *
340
  * @access protected
341
  */
342
- protected function parseExpression($exp) {
343
  if (is_scalar($exp)) {
344
  if (preg_match_all('/(\$\{[^}]+\})/', $exp, $match)) {
345
- $exp = AAM_Core_Policy_Token::evaluate($exp, $match[1]);
346
  }
347
  // If there is type scaling, perform it too
348
  if (preg_match('/^\(\*(string|ip|int|boolean|bool)\)(.*)/i', $exp, $scale)) {
@@ -352,7 +367,7 @@ final class AAM_Core_Policy_Condition {
352
  }
353
  } elseif (is_array($exp) || is_object($exp)) {
354
  foreach($exp as &$value) {
355
- $value = $this->parseExpression($value);
356
  }
357
  } else {
358
  $exp = false;
61
  /**
62
  * Evaluate the group of conditions based on type
63
  *
64
+ * @param array $conditions List of conditions
65
+ * @param array $args Since 5.9 - Inline args for evaluation
66
  *
67
  * @return boolean
68
  *
69
  * @access public
70
  */
71
+ public function evaluate($conditions, $args = array()) {
72
  $result = true;
73
 
74
  foreach($conditions as $type => $conditions) {
76
 
77
  if (isset($this->map[$type])) {
78
  $callback = array($this, $this->map[$type]);
79
+ $result = $result && call_user_func($callback, $conditions, $args);
80
  } else {
81
  $result = false;
82
  }
89
  * Evaluate group of BETWEEN conditions
90
  *
91
  * @param array $conditions
92
+ * @param array $args
93
  *
94
  * @return boolean
95
  *
96
  * @access protected
97
  */
98
+ protected function evaluateBetweenConditions($conditions, $args) {
99
  $result = false;
100
 
101
+ foreach($this->prepareConditions($conditions, $args) as $left => $right) {
102
  foreach((array)$right as $subset) {
103
  $min = (is_array($subset) ? array_shift($subset) : $subset);
104
  $max = (is_array($subset) ? end($subset) : $subset);
116
  * The values have to be identical
117
  *
118
  * @param array $conditions
119
+ * @param array $args
120
  *
121
  * @return boolean
122
  *
123
  * @access protected
124
  */
125
+ protected function evaluateEqualsConditions($conditions, $args) {
126
  $result = false;
127
 
128
+ foreach($this->prepareConditions($conditions, $args) as $left => $right) {
129
  $result = $result || ($left === $right);
130
  }
131
 
136
  * Evaluate group of NOT EQUALs conditions
137
  *
138
  * @param array $conditions
139
+ * @param array $args
140
  *
141
  * @return boolean
142
  *
143
  * @access protected
144
  */
145
+ protected function evaluateNotEqualsConditions($conditions, $args) {
146
+ return !$this->evaluateEqualsConditions($conditions, $args);
147
  }
148
 
149
  /**
150
  * Evaluate group of GREATER THEN conditions
151
  *
152
  * @param array $conditions
153
+ * @param array $args
154
  *
155
  * @return boolean
156
  *
157
  * @access protected
158
  */
159
+ protected function evaluateGreaterConditions($conditions, $args) {
160
  $result = false;
161
 
162
+ foreach($this->prepareConditions($conditions, $args) as $left => $right) {
163
  $result = $result || ($left > $right);
164
  }
165
 
170
  * Evaluate group of LESS THEN conditions
171
  *
172
  * @param array $conditions
173
+ * @param array $args
174
  *
175
  * @return boolean
176
  *
177
  * @access protected
178
  */
179
+ protected function evaluateLessConditions($conditions, $args) {
180
  $result = false;
181
 
182
+ foreach($this->prepareConditions($conditions, $args) as $left => $right) {
183
  $result = $result || ($left < $right);
184
  }
185
 
190
  * Evaluate group of GREATER OR EQUALS THEN conditions
191
  *
192
  * @param array $conditions
193
+ * @param array $args
194
  *
195
  * @return boolean
196
  *
197
  * @access protected
198
  */
199
+ protected function evaluateGreaterOrEqualsConditions($conditions, $args) {
200
  $result = false;
201
 
202
+ foreach($this->prepareConditions($conditions, $args) as $left => $right) {
203
  $result = $result || ($left >= $right);
204
  }
205
 
210
  * Evaluate group of LESS OR EQUALS THEN conditions
211
  *
212
  * @param array $conditions
213
+ * @param array $args
214
  *
215
  * @return boolean
216
  *
217
  * @access protected
218
  */
219
+ protected function evaluateLessOrEqualsConditions($conditions, $args) {
220
  $result = false;
221
 
222
+ foreach($this->prepareConditions($conditions, $args) as $left => $right) {
223
  $result = $result || ($left <= $right);
224
  }
225
 
230
  * Evaluate group of IN conditions
231
  *
232
  * @param array $conditions
233
+ * @param array $args
234
  *
235
  * @return boolean
236
  *
237
  * @access protected
238
  */
239
+ protected function evaluateInConditions($conditions, $args) {
240
  $result = false;
241
 
242
+ foreach($this->prepareConditions($conditions, $args) as $left => $right) {
243
  $result = $result || in_array($left, (array) $right, true);
244
  }
245
 
250
  * Evaluate group of NOT IN conditions
251
  *
252
  * @param array $conditions
253
+ * @param array $args
254
  *
255
  * @return boolean
256
  *
257
  * @access protected
258
  */
259
+ protected function evaluateNotInConditions($conditions, $args) {
260
+ return !$this->evaluateInConditions($conditions, $args);
261
  }
262
 
263
  /**
264
  * Evaluate group of LIKE conditions
265
  *
266
  * @param array $conditions
267
+ * @param array $args
268
  *
269
  * @return boolean
270
  *
271
  * @access protected
272
  */
273
+ protected function evaluateLikeConditions($conditions, $args) {
274
  $result = false;
275
 
276
+ foreach($this->prepareConditions($conditions, $args) as $left => $right) {
277
  foreach((array)$right as $el) {
278
  $sub = str_replace('\*', '.*', preg_quote($el));
279
  $result = $result || preg_match('@^' . $sub . '$@', $left);
287
  * Evaluate group of NOT LIKE conditions
288
  *
289
  * @param array $conditions
290
+ * @param array $args
291
  *
292
  * @return boolean
293
  *
294
  * @access protected
295
  */
296
+ protected function evaluateNotLikeConditions($conditions, $args) {
297
+ return !$this->evaluateLikeConditions($conditions, $args);
298
  }
299
 
300
  /**
301
  * Evaluate group of REGEX conditions
302
  *
303
  * @param array $conditions
304
+ * @param array $args
305
  *
306
  * @return boolean
307
  *
308
  * @access protected
309
  */
310
+ protected function evaluateRegexConditions($conditions, $args) {
311
  $result = false;
312
 
313
+ foreach($this->prepareConditions($conditions, $args) as $left => $right) {
314
  $result = $result || preg_match($right, $left);
315
  }
316
 
321
  * Prepare conditions by replacing all defined tokens
322
  *
323
  * @param array $conditions
324
+ * @param array $args
325
  *
326
  * @return array
327
  *
328
  * @access protected
329
  */
330
+ protected function prepareConditions($conditions, $args) {
331
  $result = array();
332
 
333
  if (is_array($conditions)) {
334
  foreach($conditions as $left => $right) {
335
+ $left = $this->parseExpression($left, $args);
336
+ $right = $this->parseExpression($right, $args);
337
 
338
  if ($left !== false) { // Do not include any failed conditions
339
  $result[$left] = $right;
347
  /**
348
  * Parse condition and try to replace all defined tokens
349
  *
350
+ * @param mixed $exp Part of the condition (either left or right)
351
+ * @param array $args Inline arguments
352
  *
353
  * @return mixed Prepared part of the condition or false on failure
354
  *
355
  * @access protected
356
  */
357
+ protected function parseExpression($exp, $args) {
358
  if (is_scalar($exp)) {
359
  if (preg_match_all('/(\$\{[^}]+\})/', $exp, $match)) {
360
+ $exp = AAM_Core_Policy_Token::evaluate($exp, $match[1], $args);
361
  }
362
  // If there is type scaling, perform it too
363
  if (preg_match('/^\(\*(string|ip|int|boolean|bool)\)(.*)/i', $exp, $scale)) {
367
  }
368
  } elseif (is_array($exp) || is_object($exp)) {
369
  foreach($exp as &$value) {
370
+ $value = $this->parseExpression($value, $args);
371
  }
372
  } else {
373
  $exp = false;
Application/Core/Policy/Factory.php ADDED
@@ -0,0 +1,54 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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 core policy manager factory
12
+ *
13
+ * @package AAM
14
+ * @author Vasyl Martyniuk <vasyl@vasyltech.com>
15
+ * @since AAM v5.7.2
16
+ */
17
+ final class AAM_Core_Policy_Factory {
18
+
19
+ /**
20
+ * Collection of instances
21
+ *
22
+ * @var array
23
+ *
24
+ * @access private
25
+ * @static
26
+ */
27
+ private static $_instances = array();
28
+
29
+ /**
30
+ * Get single instance of itself
31
+ *
32
+ * @param AAM_Core_Subject $subject
33
+ *
34
+ * @return AAM_Core_Policy_Manager
35
+ *
36
+ * @access public
37
+ * @static
38
+ */
39
+ public static function get(AAM_Core_Subject $subject = null) {
40
+ if (is_null($subject)) {
41
+ $subject = AAM::getUser();
42
+ }
43
+
44
+ $id = $subject->getId();
45
+ $sid = $subject->getUID() . (empty($id) ? '' : '_' . $id);
46
+
47
+ if (!isset(self::$_instances[$sid])) {
48
+ self::$_instances[$sid] = new AAM_Core_Policy_Manager($subject);
49
+ }
50
+
51
+ return self::$_instances[$sid];
52
+ }
53
+
54
+ }
Application/Core/Policy/Manager.php CHANGED
@@ -17,23 +17,31 @@
17
  final class AAM_Core_Policy_Manager {
18
 
19
  /**
20
- * Single instance of itself
21
  *
22
- * @var AAM_Core_Policy_Manager
23
  *
24
- * @access private
25
- * @static
26
  */
27
- private static $_instance = null;
28
 
29
  /**
30
- * Policy core object
31
  *
32
- * @var AAM_Core_Object_Policy
33
  *
34
  * @access protected
35
  */
36
- protected $policyObject;
 
 
 
 
 
 
 
 
 
37
 
38
  /**
39
  * Constructor
@@ -42,32 +50,47 @@ final class AAM_Core_Policy_Manager {
42
  *
43
  * @return void
44
  */
45
- protected function __construct() {
46
- $this->policyObject = AAM::getUser()->getObject('policy');
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
47
  }
48
 
49
  /**
50
  * Find all the matching policies
51
  *
52
- * @param string $s RegEx
53
- * @param AAM_Core_Subject $subject Subject to search for
54
  *
55
  * @return array
56
  *
57
  * @access public
58
  */
59
- public function find($s, AAM_Core_Subject $subject = null) {
60
  $statements = array();
 
61
 
62
- // Get list of policies
63
- if (is_null($subject)) {
64
- $policies = $this->policyObject;
65
- } else {
66
- $policies = $subject->getObject('policy');
67
- }
68
-
69
- foreach($policies->getResources($subject) as $key => $stm) {
70
- if (preg_match($s, $key)) {
71
  $statements[strtolower($key)] = $stm;
72
  }
73
  }
@@ -76,30 +99,201 @@ final class AAM_Core_Policy_Manager {
76
  }
77
 
78
  /**
79
- * Get single instance of itself
 
 
 
 
 
80
  *
81
- * @return AAM_Core_Policy_Manager
82
  *
83
  * @access public
84
- * @static
85
  */
86
- public static function getInstance() {
87
- if (is_null(self::$_instance)) {
88
- self::$_instance = new self();
 
 
 
 
 
 
 
 
 
89
  }
90
 
91
- return self::$_instance;
92
  }
93
 
94
  /**
95
- * Load the policy manager
96
  *
97
- * @return void
 
 
 
98
  *
99
  * @access public
100
- * @static
101
  */
102
- public static function bootstrap() {
103
- self::getInstance();
 
 
 
 
 
 
 
 
 
 
 
104
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
105
  }
17
  final class AAM_Core_Policy_Manager {
18
 
19
  /**
20
+ * Policy core object
21
  *
22
+ * @var AAM_Core_Object_Policy
23
  *
24
+ * @access protected
 
25
  */
26
+ protected $policyObject;
27
 
28
  /**
29
+ * Current subject
30
  *
31
+ * @var AAM_Core_Subject
32
  *
33
  * @access protected
34
  */
35
+ protected $subject;
36
+
37
+ /**
38
+ * Parsed policy tree
39
+ *
40
+ * @var array
41
+ *
42
+ * @access protected
43
+ */
44
+ protected $tree = null;
45
 
46
  /**
47
  * Constructor
50
  *
51
  * @return void
52
  */
53
+ public function __construct(AAM_Core_Subject $subject) {
54
+ $this->policyObject = $subject->getObject('policy');
55
+ $this->subject = $subject;
56
+ }
57
+
58
+ /**
59
+ * Call policy object public methods
60
+ *
61
+ * @param string $name
62
+ * @param array $args
63
+ *
64
+ * @return mixed
65
+ *
66
+ * @access public
67
+ */
68
+ public function __call($name, $args) {
69
+ $result = null;
70
+
71
+ if (method_exists($this->policyObject, $name)) {
72
+ $result = call_user_func_array(array($this->policyObject, $name), $args);
73
+ }
74
+
75
+ return $result;
76
  }
77
 
78
  /**
79
  * Find all the matching policies
80
  *
81
+ * @param string $s RegEx
82
+ * @param array $args Inline arguments
83
  *
84
  * @return array
85
  *
86
  * @access public
87
  */
88
+ public function find($s, $args = array()) {
89
  $statements = array();
90
+ $tree = $this->preparePolicyTree();
91
 
92
+ foreach($tree['Statement'] as $key => $stm) {
93
+ if (preg_match($s, $key) && $this->isApplicable($stm, $args)) {
 
 
 
 
 
 
 
94
  $statements[strtolower($key)] = $stm;
95
  }
96
  }
99
  }
100
 
101
  /**
102
+ * Check if specified action is allowed for resource
103
+ *
104
+ * This method is working with "Statement" array.
105
+ *
106
+ * @param string $resource Resource name
107
+ * @param array $args Args that will be injected during condition evaluation
108
  *
109
+ * @return boolean|null
110
  *
111
  * @access public
 
112
  */
113
+ public function isAllowed($resource, $args = array()) {
114
+ $allowed = null;
115
+ $tree = $this->preparePolicyTree();
116
+ $id = strtolower($resource);
117
+
118
+ if (isset($tree['Statement'][$id])) {
119
+ $stm = $tree['Statement'][$id];
120
+
121
+ if ($this->isApplicable($stm, $args)) {
122
+ $effect = strtolower($stm['Effect']);
123
+ $allowed = ($effect === 'allow');
124
+ }
125
  }
126
 
127
+ return $allowed;
128
  }
129
 
130
  /**
131
+ * Get Policy Param
132
  *
133
+ * @param string $name
134
+ * @param array $args
135
+ *
136
+ * @return mixed
137
  *
138
  * @access public
 
139
  */
140
+ public function getParam($name, $args = array()) {
141
+ $value = null;
142
+ $id = strtolower($name);
143
+
144
+ if (isset($this->tree['Param'][$id])) {
145
+ $param = $this->tree['Param'][$id];
146
+
147
+ if ($this->isApplicable($param, $args)) {
148
+ $value = $param['Value'];
149
+ }
150
+ }
151
+
152
+ return $value;
153
  }
154
+
155
+ /**
156
+ * Check if policy block is applicable
157
+ *
158
+ * @param array $block
159
+ * @param array $args
160
+ *
161
+ * @return boolean
162
+ *
163
+ * @access protected
164
+ */
165
+ protected function isApplicable($block, $args) {
166
+ $result = true;
167
+
168
+ if (!empty($block['Condition']) && !is_scalar($block['Condition'])) {
169
+ $result = AAM_Core_Policy_Condition::getInstance()->evaluate(
170
+ $block['Condition'], $args
171
+ );
172
+ }
173
+
174
+ return $result;
175
+ }
176
+
177
+ /**
178
+ * Prepare policy tree
179
+ *
180
+ * This is the lazy load for the policy tree. If tree has not been initialized,
181
+ * trigger the process of parsing and merging statements and settings.
182
+ *
183
+ * @return array
184
+ *
185
+ * @access protected
186
+ */
187
+ protected function preparePolicyTree() {
188
+ if (is_null($this->tree)) {
189
+ $cache = $this->subject->getObject('cache')->get('policyTree');
190
+
191
+ if (empty($cache)) {
192
+ $this->tree = array(
193
+ 'Statement' => array(),
194
+ 'Param' => array()
195
+ );
196
+
197
+ foreach($this->policyObject->getOption() as $id => $effect) {
198
+ if (!empty($effect)) { // Load policy only if it is attached
199
+ $this->extendTree(
200
+ $this->tree, $this->parsePolicy(get_post($id))
201
+ );
202
+ }
203
+ }
204
+
205
+ $this->subject->getObject('cache')->add('policyTree', 0, $this->tree);
206
+ } else {
207
+ $this->tree = $cache;
208
+ }
209
+ }
210
+
211
+ return $this->tree;
212
+ }
213
+
214
+ /**
215
+ * Parse policy post and extract Statements and Params
216
+ *
217
+ * @param WP_Post $policy
218
+ *
219
+ * @return array
220
+ *
221
+ * @access protected
222
+ */
223
+ protected function parsePolicy($policy) {
224
+ $tree = array('Statement' => array(), 'Param' => array());
225
+ // Only parse if policy is valid WP post and is published (active)
226
+ if (is_a($policy, 'WP_Post') && ($policy->post_status === 'publish')) {
227
+ $val = json_decode($policy->post_content, true);
228
+
229
+ // Do not load the policy if any errors
230
+ if (json_last_error() === JSON_ERROR_NONE) {
231
+ $tree = array(
232
+ 'Statement' => isset($val['Statement']) ? (array) $val['Statement'] : array(),
233
+ 'Param' => isset($val['Param']) ? (array) $val['Param'] : array(),
234
+ );
235
+ }
236
+ }
237
+
238
+ return $tree;
239
+ }
240
+
241
+ /**
242
+ * Extend tree with additional statements and params
243
+ *
244
+ * @param array &$tree
245
+ * @param array $addition
246
+ *
247
+ * @return array
248
+ *
249
+ * @access protected
250
+ */
251
+ protected function extendTree(&$tree, $addition) {
252
+ // Step #1. If there are any statements, let's index them by resource:action
253
+ // and insert into the list of statements
254
+ foreach($addition['Statement'] as $stm) {
255
+ $ress = (isset($stm['Resource']) ? (array) $stm['Resource'] : array());
256
+ $acts = (isset($stm['Action']) ? (array) $stm['Action'] : array(''));
257
+
258
+ foreach($ress as $res) {
259
+ foreach($acts as $act) {
260
+ $id = strtolower($res . (!empty($act) ? ":{$act}" : ''));
261
+
262
+ if (!isset($tree['Statement'][$id]) || empty($tree['Statement'][$id]['Enforce'])) {
263
+ $tree['Statement'][$id] = $this->removeKeys($stm, array('Resource', 'Action'));
264
+ }
265
+ }
266
+ }
267
+ }
268
+
269
+ // Step #2. If there are any params, let's index them and insert into the list
270
+ foreach($addition['Param'] as $param) {
271
+ $id = (isset($param['Key']) ? $param['Key'] : '__none');
272
+
273
+ if (!isset($tree['Param'][$id]) || empty($tree['Param'][$id]['Enforce'])) {
274
+ $tree['Param'][$id] = $this->removeKeys($param, array('Key'));
275
+ }
276
+ }
277
+ }
278
+
279
+ /**
280
+ * Remove unnecessary keys from array
281
+ *
282
+ * @param array $arr
283
+ * @param array $keys
284
+ *
285
+ * @return array
286
+ *
287
+ * @access private
288
+ */
289
+ private function removeKeys($arr, $keys) {
290
+ foreach($keys as $key) {
291
+ if (isset($arr[$key])) {
292
+ unset($arr[$key]);
293
+ }
294
+ }
295
+
296
+ return $arr;
297
+ }
298
+
299
  }
Application/Core/Policy/Token.php CHANGED
@@ -25,11 +25,13 @@ final class AAM_Core_Policy_Token {
25
  * @static
26
  */
27
  protected static $map = array(
28
- 'USER' => 'AAM_Core_Policy_Token::getUserValue',
29
- 'DATETIME' => 'AAM_Core_Policy_Token::getDateTimeValue',
30
- 'GET' => 'AAM_Core_Request::get',
31
- 'POST' => 'AAM_Core_Request::post',
32
- 'COOKIE' => 'AAM_Core_Request::cookie'
 
 
33
  );
34
 
35
  /**
@@ -43,11 +45,14 @@ final class AAM_Core_Policy_Token {
43
  * @access public
44
  * @static
45
  */
46
- public static function evaluate($part, array $tokens) {
47
  foreach($tokens as $token) {
48
  $part = str_replace(
49
  $token,
50
- self::getValue(preg_replace('/^\$\{([^}]+)\}$/', '${1}', $token)),
 
 
 
51
  $part
52
  );
53
  }
@@ -59,20 +64,20 @@ final class AAM_Core_Policy_Token {
59
  * Get token value
60
  *
61
  * @param string $token
62
- * @param mixed $value
63
  *
64
  * @return mixed
65
  *
66
  * @access protected
67
  * @static
68
  */
69
- protected static function getValue($token, $value = null) {
70
  $parts = explode('.', $token);
71
 
72
  if (isset(self::$map[$parts[0]])) {
73
- $value = call_user_func(self::$map[$parts[0]], $parts[1], $value);
74
  } elseif ($parts[0] === 'CALLBACK' && is_callable($parts[1])) {
75
- $value = call_user_func($parts[1], $value);
76
  }
77
 
78
  return $value;
@@ -109,6 +114,21 @@ final class AAM_Core_Policy_Token {
109
  return $value;
110
  }
111
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
112
  /**
113
  * Get current datetime value
114
  *
25
  * @static
26
  */
27
  protected static $map = array(
28
+ 'USER' => 'AAM_Core_Policy_Token::getUserValue',
29
+ 'DATETIME' => 'AAM_Core_Policy_Token::getDateTimeValue',
30
+ 'GET' => 'AAM_Core_Request::get',
31
+ 'POST' => 'AAM_Core_Request::post',
32
+ 'COOKIE' => 'AAM_Core_Request::cookie',
33
+ 'SERVER' => 'AAM_Core_Request::server',
34
+ 'ARGS' => 'AAM_Core_Policy_Token::getArgValue'
35
  );
36
 
37
  /**
45
  * @access public
46
  * @static
47
  */
48
+ public static function evaluate($part, array $tokens, array $args = array()) {
49
  foreach($tokens as $token) {
50
  $part = str_replace(
51
  $token,
52
+ self::getValue(
53
+ preg_replace('/^\$\{([^}]+)\}$/', '${1}', $token),
54
+ $args
55
+ ),
56
  $part
57
  );
58
  }
64
  * Get token value
65
  *
66
  * @param string $token
67
+ * @param array $args
68
  *
69
  * @return mixed
70
  *
71
  * @access protected
72
  * @static
73
  */
74
+ protected static function getValue($token, $args) {
75
  $parts = explode('.', $token);
76
 
77
  if (isset(self::$map[$parts[0]])) {
78
+ $value = call_user_func(self::$map[$parts[0]], $parts[1], $args);
79
  } elseif ($parts[0] === 'CALLBACK' && is_callable($parts[1])) {
80
+ $value = call_user_func($parts[1], $args);
81
  }
82
 
83
  return $value;
114
  return $value;
115
  }
116
 
117
+ /**
118
+ * Get inline argument
119
+ *
120
+ * @param string $prop
121
+ * @param array $args
122
+ *
123
+ * @return mixed
124
+ *
125
+ * @access protected
126
+ * @static
127
+ */
128
+ protected static function getArgValue($prop, $args) {
129
+ return (isset($args[$prop]) ? $args[$prop] : null);
130
+ }
131
+
132
  /**
133
  * Get current datetime value
134
  *
Application/Core/Subject/Role.php CHANGED
@@ -141,10 +141,10 @@ class AAM_Core_Subject_Role extends AAM_Core_Subject {
141
  $has = $this->getSubject()->has_cap($cap);
142
 
143
  // Override by policy if is set
144
- $stm = AAM::api()->getPolicyManager()->find("/^Capability:{$cap}$/i", $this);
145
- if (!empty($stm)) {
146
- $val = end($stm);
147
- $has = ($val['Effect'] === 'allow' ? 1 : 0);
148
  }
149
 
150
  return $has;
141
  $has = $this->getSubject()->has_cap($cap);
142
 
143
  // Override by policy if is set
144
+ $manager = AAM::api()->getPolicyManager($this);
145
+
146
+ if ($manager->isAllowed("Capability:{$cap}") === false) {
147
+ $has = false;
148
  }
149
 
150
  return $has;
Application/Core/Subject/User.php CHANGED
@@ -30,26 +30,40 @@ class AAM_Core_Subject_User extends AAM_Core_Subject {
30
  const AAM_CAPKEY = 'aam_capability';
31
 
32
  /**
33
- *
34
- * @var type
 
 
 
35
  */
36
  protected $aamCaps = array();
37
 
38
  /**
39
- *
40
- * @var type
 
 
 
41
  */
42
  protected $parent = null;
43
 
44
  /**
45
- *
46
- * @var type
 
 
 
47
  */
48
  protected $maxLevel = null;
49
 
50
  /**
 
51
  *
52
- * @param type $id
 
 
 
 
53
  */
54
  public function __construct($id = '') {
55
  parent::__construct($id);
@@ -62,6 +76,55 @@ class AAM_Core_Subject_User extends AAM_Core_Subject {
62
  }
63
  }
64
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
65
  /**
66
  *
67
  */
@@ -223,65 +286,6 @@ class AAM_Core_Subject_User extends AAM_Core_Subject {
223
  return $subject;
224
  }
225
 
226
- /**
227
- *
228
- */
229
- public function initialize($isolated = false) {
230
- $subject = $this->getSubject();
231
-
232
- // Retrieve all capabilities set in Access Policy
233
- // Load Capabilities from the policy
234
- $stms = AAM_Core_Policy_Manager::getInstance()->find(
235
- "/^Capability:/i", ($isolated ? $this : null)
236
- );
237
-
238
- $policyCaps = array();
239
-
240
- foreach($stms as $key => $stm) {
241
- $chunks = explode(':', $key);
242
- if (count($chunks) === 2) {
243
- $policyCaps[$chunks[1]] = ($stm['Effect'] === 'allow' ? 1 : 0);
244
- }
245
- }
246
-
247
- // Load Roles from the policy
248
- $stms = AAM_Core_Policy_Manager::getInstance()->find(
249
- "/^Role:/i", ($isolated ? $this : null)
250
- );
251
-
252
- $roles = (array) $subject->roles;
253
-
254
- $allRoles = AAM_Core_API::getRoles();
255
- $roleCaps = array();
256
-
257
- foreach($stms as $key => $stm) {
258
- $chunks = explode(':', $key);
259
-
260
- if ($stm['Effect'] === 'allow') {
261
- if (!in_array($chunks[1], $roles, true)) {
262
- if ($allRoles->is_role($chunks[1])) {
263
- $roleCaps = array_merge($roleCaps, $allRoles->get_role($chunks[1])->capabilities);
264
- $roleCaps[] = $chunks[1];
265
- }
266
- $roles[] = $chunks[1];
267
- }
268
- } elseif (in_array($chunks[1], $roles, true)) {
269
- // Make sure that we delete all instanses of the role
270
- foreach($roles as $i => $role){
271
- if ($role === $chunks[1]) {
272
- unset($roles[$i]);
273
- }
274
- }
275
- }
276
- }
277
-
278
- $subject->roles = $roles;
279
-
280
- //reset the user capabilities
281
- $subject->allcaps = array_merge($subject->allcaps, $roleCaps, $policyCaps, $this->aamCaps);
282
- $subject->caps = array_merge($subject->caps, $roleCaps, $policyCaps, $this->aamCaps);
283
- }
284
-
285
  /**
286
  * Get user capabilities
287
  *
30
  const AAM_CAPKEY = 'aam_capability';
31
 
32
  /**
33
+ * List of all user specific capabilities
34
+ *
35
+ * @var array
36
+ *
37
+ * @access protected
38
  */
39
  protected $aamCaps = array();
40
 
41
  /**
42
+ * Parent subject
43
+ *
44
+ * @var AAM_Core_Subject
45
+ *
46
+ * @access protected
47
  */
48
  protected $parent = null;
49
 
50
  /**
51
+ * Max user level
52
+ *
53
+ * @var int
54
+ *
55
+ * @access protected
56
  */
57
  protected $maxLevel = null;
58
 
59
  /**
60
+ * Constructor
61
  *
62
+ * @param int $id
63
+ *
64
+ * @return void
65
+ *
66
+ * @access public
67
  */
68
  public function __construct($id = '') {
69
  parent::__construct($id);
76
  }
77
  }
78
 
79
+ /**
80
+ *
81
+ */
82
+ public function initialize() {
83
+ $subject = $this->getSubject();
84
+ $manager = AAM_Core_Policy_Factory::get($this);
85
+
86
+ // Retrieve all capabilities set in Access Policy
87
+ // Load Capabilities from the policy
88
+ $policyCaps = array();
89
+
90
+ foreach($manager->find("/^Capability:[\w]+/i") as $key => $stm) {
91
+ $chunks = explode(':', $key);
92
+ $policyCaps[$chunks[1]] = ($stm['Effect'] === 'allow' ? 1 : 0);
93
+ }
94
+
95
+ // Load Roles from the policy
96
+ $roles = (array) $subject->roles;
97
+ $allRoles = AAM_Core_API::getRoles();
98
+ $roleCaps = array();
99
+
100
+ foreach($manager->find("/^Role:/i") as $key => $stm) {
101
+ $chunks = explode(':', $key);
102
+
103
+ if ($stm['Effect'] === 'allow') {
104
+ if (!in_array($chunks[1], $roles, true)) {
105
+ if ($allRoles->is_role($chunks[1])) {
106
+ $roleCaps = array_merge($roleCaps, $allRoles->get_role($chunks[1])->capabilities);
107
+ $roleCaps[] = $chunks[1];
108
+ }
109
+ $roles[] = $chunks[1];
110
+ }
111
+ } elseif (in_array($chunks[1], $roles, true)) {
112
+ // Make sure that we delete all instanses of the role
113
+ foreach($roles as $i => $role){
114
+ if ($role === $chunks[1]) {
115
+ unset($roles[$i]);
116
+ }
117
+ }
118
+ }
119
+ }
120
+
121
+ $subject->roles = $roles;
122
+
123
+ //reset the user capabilities
124
+ $subject->allcaps = array_merge($subject->allcaps, $roleCaps, $policyCaps, $this->aamCaps);
125
+ $subject->caps = array_merge($subject->caps, $roleCaps, $policyCaps, $this->aamCaps);
126
+ }
127
+
128
  /**
129
  *
130
  */
286
  return $subject;
287
  }
288
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
289
  /**
290
  * Get user capabilities
291
  *
Application/Extension/List.php CHANGED
@@ -22,7 +22,7 @@ class AAM_Extension_List {
22
  'description' => 'Get the complete list of all premium AAM extensions in one package and all future premium extensions already included for now additional cost.',
23
  'url' => 'https://aamplugin.com/complete-package',
24
  'version' => (defined('AAM_COMPLETE_PACKAGE') ? constant('AAM_COMPLETE_PACKAGE') : null),
25
- 'latest' => '3.8.12'
26
  ),
27
  'AAM_PLUS_PACKAGE' => array(
28
  'title' => 'Plus Package',
@@ -31,7 +31,7 @@ class AAM_Extension_List {
31
  'description' => 'Manage access to your WordPress website posts, pages, media, custom post types, categories and hierarchical taxonomies for any role, individual user, visitors or even define default access for everybody; and do this separately for frontend, backend or API levels. As the bonus, define more granular access to how comments can be managed on the backend by other users.',
32
  'url' => 'https://aamplugin.com/extension/plus-package',
33
  'version' => (defined('AAM_PLUS_PACKAGE') ? constant('AAM_PLUS_PACKAGE') : null),
34
- 'latest' => '3.9'
35
  ),
36
  'AAM_IP_CHECK' => array(
37
  'title' => 'IP Check',
22
  'description' => 'Get the complete list of all premium AAM extensions in one package and all future premium extensions already included for now additional cost.',
23
  'url' => 'https://aamplugin.com/complete-package',
24
  'version' => (defined('AAM_COMPLETE_PACKAGE') ? constant('AAM_COMPLETE_PACKAGE') : null),
25
+ 'latest' => '3.8.14'
26
  ),
27
  'AAM_PLUS_PACKAGE' => array(
28
  'title' => 'Plus Package',
31
  'description' => 'Manage access to your WordPress website posts, pages, media, custom post types, categories and hierarchical taxonomies for any role, individual user, visitors or even define default access for everybody; and do this separately for frontend, backend or API levels. As the bonus, define more granular access to how comments can be managed on the backend by other users.',
32
  'url' => 'https://aamplugin.com/extension/plus-package',
33
  'version' => (defined('AAM_PLUS_PACKAGE') ? constant('AAM_PLUS_PACKAGE') : null),
34
+ 'latest' => '3.9.2'
35
  ),
36
  'AAM_IP_CHECK' => array(
37
  'title' => 'IP Check',
Application/Shared/Manager.php CHANGED
@@ -139,13 +139,13 @@ class AAM_Shared_Manager {
139
  'supports' => array('title', 'excerpt', 'revisions'),
140
  'delete_with_user' => false,
141
  'capabilities' => array(
142
- 'edit_post' => 'aam_manage_policy',
143
- 'read_post' => 'aam_manage_policy',
144
- 'delete_post' => 'aam_manage_policy',
145
- 'delete_posts' => 'aam_manage_policy',
146
- 'edit_posts' => 'aam_manage_policy',
147
- 'edit_others_posts' => 'aam_manage_policy',
148
- 'publish_posts' => 'aam_manage_policy',
149
  )
150
  ));
151
  }
@@ -450,20 +450,24 @@ class AAM_Shared_Manager {
450
 
451
  case 'edit_post':
452
  case 'edit_page':
 
453
  $caps = $this->authorizePostEdit($caps, $args[0]);
454
  break;
455
 
456
  case 'delete_post':
457
  case 'delete_page':
 
458
  $caps = $this->authorizePostDelete($caps, $args[0]);
459
  break;
460
 
461
  case 'read_post':
462
  case 'read_page':
 
463
  $caps = $this->authorizePostRead($caps, $args[0]);
464
  break;
465
 
466
  case 'publish_post':
 
467
  $caps = $this->authorizePublishPost($caps, $args[0]);
468
  break;
469
 
@@ -472,6 +476,7 @@ class AAM_Shared_Manager {
472
  break;
473
 
474
  case 'publish_posts':
 
475
  // There is a bug in WP core that instead of checking if user has
476
  // ability to publish_post, it checks for edit_post
477
  if (is_a($post, 'WP_Post')) {
@@ -518,7 +523,7 @@ class AAM_Shared_Manager {
518
  * @return type
519
  */
520
  protected function checkPluginsAction($action, $caps, $cap) {
521
- $allow = AAM::api()->isAllowed("Plugin:WP:{$action}");
522
 
523
  if ($allow !== null) {
524
  $caps[] = $allow ? $cap : 'do_not_allow';
@@ -539,7 +544,7 @@ class AAM_Shared_Manager {
539
  $parts = explode('/', $plugin);
540
  $slug = (!empty($parts[0]) ? $parts[0] : null);
541
 
542
- $allow = AAM::api()->isAllowed("Plugin:{$slug}:WP:{$action}");
543
  if ($allow !== null) {
544
  $caps[] = $allow ? $cap : 'do_not_allow';
545
  }
139
  'supports' => array('title', 'excerpt', 'revisions'),
140
  'delete_with_user' => false,
141
  'capabilities' => array(
142
+ 'edit_post' => 'aam_edit_policy',
143
+ 'read_post' => 'aam_read_policy',
144
+ 'delete_post' => 'aam_delete_policy',
145
+ 'delete_posts' => 'aam_delete_policies',
146
+ 'edit_posts' => 'aam_edit_policies',
147
+ 'edit_others_posts' => 'aam_edit_other_policies',
148
+ 'publish_posts' => 'aam_publish_policies',
149
  )
150
  ));
151
  }
450
 
451
  case 'edit_post':
452
  case 'edit_page':
453
+ case 'aam_edit_policy':
454
  $caps = $this->authorizePostEdit($caps, $args[0]);
455
  break;
456
 
457
  case 'delete_post':
458
  case 'delete_page':
459
+ case 'aam_delete_policy':
460
  $caps = $this->authorizePostDelete($caps, $args[0]);
461
  break;
462
 
463
  case 'read_post':
464
  case 'read_page':
465
+ case 'aam_read_policy':
466
  $caps = $this->authorizePostRead($caps, $args[0]);
467
  break;
468
 
469
  case 'publish_post':
470
+ case 'aam_publish_policy':
471
  $caps = $this->authorizePublishPost($caps, $args[0]);
472
  break;
473
 
476
  break;
477
 
478
  case 'publish_posts':
479
+ case 'aam_publish_policies':
480
  // There is a bug in WP core that instead of checking if user has
481
  // ability to publish_post, it checks for edit_post
482
  if (is_a($post, 'WP_Post')) {
523
  * @return type
524
  */
525
  protected function checkPluginsAction($action, $caps, $cap) {
526
+ $allow = AAM::api()->getPolicyManager()->isAllowed("Plugin:WP:{$action}");
527
 
528
  if ($allow !== null) {
529
  $caps[] = $allow ? $cap : 'do_not_allow';
544
  $parts = explode('/', $plugin);
545
  $slug = (!empty($parts[0]) ? $parts[0] : null);
546
 
547
+ $allow = AAM::api()->getPolicyManager()->isAllowed("Plugin:{$slug}:WP:{$action}");
548
  if ($allow !== null) {
549
  $caps[] = $allow ? $cap : 'do_not_allow';
550
  }
Lang/advanced-access-manager-en_US.mo CHANGED
Binary file
Lang/advanced-access-manager-en_US.po CHANGED
@@ -1,7 +1,7 @@
1
  msgid ""
2
  msgstr ""
3
  "Project-Id-Version: Advanced Access Manager\n"
4
- "POT-Creation-Date: 2018-09-08 21:17-0400\n"
5
  "PO-Revision-Date: \n"
6
  "Last-Translator: \n"
7
  "Language-Team: AAMPlugin <support@aamplugin.com>\n"
@@ -9,72 +9,71 @@ msgstr ""
9
  "MIME-Version: 1.0\n"
10
  "Content-Type: text/plain; charset=UTF-8\n"
11
  "Content-Transfer-Encoding: 8bit\n"
12
- "X-Generator: Poedit 2.1.1\n"
13
  "Plural-Forms: nplurals=2; plural=(n != 1);\n"
14
  "X-Poedit-SourceCharset: UTF-8\n"
15
  "X-Poedit-KeywordsList: __;preparePhrase\n"
16
  "X-Poedit-Basepath: ..\n"
17
  "X-Poedit-SearchPath-0: .\n"
18
 
19
- #: Application/Api/Manager.php:134
20
  msgid "Access denied"
21
  msgstr ""
22
 
23
- #: Application/Backend/Feature/Extension/Manager.php:70
24
- msgid "You may try to install extension manually."
25
  msgstr ""
26
 
27
- #: Application/Backend/Feature/Extension/Manager.php:81
28
- msgid "Download failure. Please try again or contact us."
29
- msgstr ""
30
-
31
- #: Application/Backend/Feature/Extension/Manager.php:119
32
- msgid "Enter license key to update extension."
33
  msgstr ""
34
 
35
  #: Application/Backend/Feature/Main/404Redirect.php:53
36
  msgid "404 Redirect"
37
  msgstr ""
38
 
39
- #: Application/Backend/Feature/Main/Capability.php:98
 
 
 
 
40
  msgid "Capability already exists"
41
  msgstr ""
42
 
43
- #: Application/Backend/Feature/Main/Capability.php:127
44
- msgid "Can not remove the capability"
45
  msgstr ""
46
 
47
- #: Application/Backend/Feature/Main/Capability.php:216
48
- #: Application/Backend/Feature/Main/Capability.php:257
49
  msgid "System"
50
  msgstr ""
51
 
52
- #: Application/Backend/Feature/Main/Capability.php:217
53
- #: Application/Backend/Feature/Main/Capability.php:259
54
  msgid "Posts & Pages"
55
  msgstr ""
56
 
57
- #: Application/Backend/Feature/Main/Capability.php:218
58
- #: Application/Backend/Feature/Main/Capability.php:261
59
  msgid "Backend"
60
  msgstr ""
61
 
62
- #: Application/Backend/Feature/Main/Capability.php:219
63
- #: Application/Backend/Feature/Main/Capability.php:263
64
  msgid "AAM Interface"
65
  msgstr ""
66
 
67
- #: Application/Backend/Feature/Main/Capability.php:220
68
- #: Application/Backend/Feature/Main/Capability.php:265
69
  msgid "Miscellaneous"
70
  msgstr ""
71
 
72
- #: Application/Backend/Feature/Main/Capability.php:297
73
  msgid "Capabilities"
74
  msgstr ""
75
 
76
  #: Application/Backend/Feature/Main/GetStarted.php:36
77
- #: Application/Backend/phtml/main/get-started.phtml:11
78
  msgid "Get Started"
79
  msgstr ""
80
 
@@ -86,7 +85,7 @@ msgstr ""
86
  msgid "Logout Redirect"
87
  msgstr ""
88
 
89
- #: Application/Backend/Feature/Main/Menu.php:197
90
  msgid "Backend Menu"
91
  msgstr ""
92
 
@@ -94,25 +93,39 @@ msgstr ""
94
  msgid "Metaboxes & Widgets"
95
  msgstr ""
96
 
97
- #: Application/Backend/Feature/Main/Post.php:445
 
 
 
 
 
 
 
 
 
 
 
 
 
98
  #: Application/Backend/phtml/main/404redirect.phtml:36
99
  #: Application/Backend/phtml/main/login-redirect.phtml:43
100
  #: Application/Backend/phtml/main/logout-redirect.phtml:43
101
  #: Application/Backend/phtml/main/redirect.phtml:67
102
  #: Application/Backend/phtml/main/redirect.phtml:119
 
103
  #: Application/Backend/phtml/partial/post-advanced-settings.phtml:89
104
  msgid "Existing Page"
105
  msgstr ""
106
 
107
- #: Application/Backend/Feature/Main/Post.php:447
108
  msgid "Valid URL"
109
  msgstr ""
110
 
111
- #: Application/Backend/Feature/Main/Post.php:449
112
  msgid "Custom Callback"
113
  msgstr ""
114
 
115
- #: Application/Backend/Feature/Main/Post.php:603
116
  msgid "Posts & Terms"
117
  msgstr ""
118
 
@@ -128,6 +141,10 @@ msgstr ""
128
  msgid "Admin Toolbar"
129
  msgstr ""
130
 
 
 
 
 
131
  #: Application/Backend/Feature/Settings/ConfigPress.php:53
132
  msgid "ConfigPress"
133
  msgstr ""
@@ -281,10 +298,23 @@ msgid ""
281
  msgstr ""
282
 
283
  #: Application/Backend/Feature/Settings/Core.php:87
284
- msgid "Support AAM Extensions"
285
  msgstr ""
286
 
287
  #: Application/Backend/Feature/Settings/Core.php:88
 
 
 
 
 
 
 
 
 
 
 
 
 
288
  msgid ""
289
  "AAM comes with the limited list of premium and free extensions that "
290
  "significantly enhance AAM behavior. You can disable support for AAM "
@@ -293,18 +323,18 @@ msgid ""
293
  "able to install new extensions."
294
  msgstr ""
295
 
296
- #: Application/Backend/Feature/Settings/Core.php:92
297
  msgid "AAM Cron Job"
298
  msgstr ""
299
 
300
- #: Application/Backend/Feature/Settings/Core.php:93
301
  msgid ""
302
  "AAM cron job executes periodically (typically once a day) to check for "
303
  "available updates for already installed extensions. Cron job is not executed "
304
  "if there are no installed extensions."
305
  msgstr ""
306
 
307
- #: Application/Backend/Feature/Settings/Core.php:112
308
  msgid "Core Settings"
309
  msgstr ""
310
 
@@ -352,87 +382,93 @@ msgstr ""
352
  msgid "Security Settings"
353
  msgstr ""
354
 
355
- #: Application/Backend/Feature/Settings/Tools.php:86
356
- msgid "Tools"
357
- msgstr ""
358
-
359
- #: Application/Backend/Feature/Subject/User.php:63
360
  msgid "Operation is not permitted"
361
  msgstr ""
362
 
363
- #: Application/Backend/Feature/Subject/User.php:78
364
  msgid "You cannot set expiration to yourself"
365
  msgstr ""
366
 
367
- #: Application/Backend/Manager.php:381
368
  msgid "Access Manager"
369
  msgstr ""
370
 
371
- #: Application/Backend/Manager.php:499 Application/Backend/Manager.php:517
372
- #: Application/Backend/Manager.php:540
 
 
 
 
 
 
 
 
373
  msgid "Access"
374
  msgstr ""
375
 
376
- #: Application/Backend/Manager.php:691 Application/Backend/Manager.php:714
377
- #: Application/Core/API.php:326
378
  msgid "Access Denied"
379
  msgstr ""
380
 
381
- #: Application/Backend/View/Localization.php:26 media/js/aam.js:1588
382
  msgid "Search Capability"
383
  msgstr ""
384
 
385
- #: Application/Backend/View/Localization.php:27 media/js/aam.js:1589
386
  msgid "_TOTAL_ capability(s)"
387
  msgstr ""
388
 
389
- #: Application/Backend/View/Localization.php:28 media/js/aam.js:380
390
- #: media/js/aam.js:441 media/js/aam.js:919 media/js/aam.js:1691
391
- #: media/js/aam.js:1735 media/js/aam.js:2307
 
392
  msgid "Saving..."
393
  msgstr ""
394
 
395
- #: Application/Backend/View/Localization.php:29 media/js/aam.js:1699
396
  msgid "Failed to add new capability"
397
  msgstr ""
398
 
399
- #: Application/Backend/View/Localization.php:30 media/js/aam.js:46
400
- #: media/js/aam.js:400 media/js/aam.js:453 media/js/aam.js:490
401
- #: media/js/aam.js:619 media/js/aam.js:929 media/js/aam.js:962
402
- #: media/js/aam.js:1252 media/js/aam.js:1395 media/js/aam.js:1459
403
- #: media/js/aam.js:1704 media/js/aam.js:1748 media/js/aam.js:1787
404
- #: media/js/aam.js:1870 media/js/aam.js:2015 media/js/aam.js:2634
405
- #: media/js/aam.js:2720 media/js/aam.js:2864 media/js/aam.js:2893
406
- #: media/js/aam.js:3040 media/js/aam.js:3310 media/js/aam.js:3707
407
- #: media/js/aam.js:3737
 
408
  msgid "Application error"
409
  msgstr ""
410
 
411
- #: Application/Backend/View/Localization.php:31 media/js/aam.js:1707
412
  msgid "Add Capability"
413
  msgstr ""
414
 
415
- #: Application/Backend/View/Localization.php:32 media/js/aam.js:1138
416
- #: media/js/aam.js:1287 Application/Backend/phtml/main/menu.phtml:71
417
- #: Application/Backend/phtml/main/toolbar.phtml:65
418
  msgid "Show Menu"
419
  msgstr ""
420
 
421
- #: Application/Backend/View/Localization.php:33 media/js/aam.js:1148
422
- #: media/js/aam.js:1297 Application/Backend/phtml/main/menu.phtml:75
423
- #: Application/Backend/phtml/main/toolbar.phtml:69
424
  msgid "Restrict Menu"
425
  msgstr ""
426
 
427
- #: Application/Backend/View/Localization.php:34 media/js/aam.js:1453
428
  msgid "Failed to retrieve mataboxes"
429
  msgstr ""
430
 
431
- #: Application/Backend/View/Localization.php:35 media/js/aam.js:2059
432
  msgid "Search"
433
  msgstr ""
434
 
435
- #: Application/Backend/View/Localization.php:36 media/js/aam.js:2060
436
  msgid "_TOTAL_ object(s)"
437
  msgstr ""
438
 
@@ -440,53 +476,53 @@ msgstr ""
440
  msgid "Failed"
441
  msgstr ""
442
 
443
- #: Application/Backend/View/Localization.php:38 media/js/aam.js:99
444
- #: media/js/aam.js:559
445
  msgid "Loading..."
446
  msgstr ""
447
 
448
- #: Application/Backend/View/Localization.php:39 media/js/aam.js:104
449
  msgid "No Role"
450
  msgstr ""
451
 
452
- #: Application/Backend/View/Localization.php:40 media/js/aam.js:162
453
  msgid "Search Role"
454
  msgstr ""
455
 
456
- #: Application/Backend/View/Localization.php:41 media/js/aam.js:163
457
  msgid "_TOTAL_ role(s)"
458
  msgstr ""
459
 
460
- #: Application/Backend/View/Localization.php:42
461
- #: Application/Backend/phtml/index.phtml:232
462
  #: Application/Backend/phtml/main/capability.phtml:26
463
  #: Application/Backend/phtml/main/capability.phtml:64
464
  msgid "Create"
465
  msgstr ""
466
 
467
- #: Application/Backend/View/Localization.php:43 media/js/aam.js:200
468
- #: Application/Backend/phtml/index.phtml:186
469
- #: Application/Backend/phtml/index.phtml:368
470
  msgid "Users"
471
  msgstr ""
472
 
473
- #: Application/Backend/View/Localization.php:44 media/js/aam.js:395
474
  msgid "Failed to add new role"
475
  msgstr ""
476
 
477
- #: Application/Backend/View/Localization.php:45 media/js/aam.js:403
478
  msgid "Add Role"
479
  msgstr ""
480
 
481
- #: Application/Backend/View/Localization.php:46 media/js/aam.js:448
482
  msgid "Failed to update role"
483
  msgstr ""
484
 
485
  #: Application/Backend/View/Localization.php:47
486
- #: Application/Backend/View/PostOptionList.php:157 media/js/aam.js:457
487
- #: Application/Backend/phtml/extensions.phtml:51
488
- #: Application/Backend/phtml/extensions.phtml:78
489
- #: Application/Backend/phtml/index.phtml:258
490
  #: Application/Backend/phtml/main/capability.phtml:86
491
  #: Application/Backend/phtml/partial/post-advanced-settings.phtml:37
492
  #: Application/Backend/phtml/partial/post-advanced-settings.phtml:58
@@ -495,41 +531,41 @@ msgstr ""
495
  msgid "Update"
496
  msgstr ""
497
 
498
- #: Application/Backend/View/Localization.php:48 media/js/aam.js:480
499
- #: media/js/aam.js:1774
500
  msgid "Deleting..."
501
  msgstr ""
502
 
503
- #: Application/Backend/View/Localization.php:49 media/js/aam.js:486
504
  msgid "Failed to delete role"
505
  msgstr ""
506
 
507
  #: Application/Backend/View/Localization.php:50
508
- #: Application/Backend/View/Localization.php:62 media/js/aam.js:305
509
- #: media/js/aam.js:494 Application/Backend/phtml/index.phtml:270
510
  msgid "Delete Role"
511
  msgstr ""
512
 
513
- #: Application/Backend/View/Localization.php:51 media/js/aam.js:615
514
  msgid "Failed to block user"
515
  msgstr ""
516
 
517
- #: Application/Backend/View/Localization.php:52 media/js/aam.js:651
518
  msgid "Search User"
519
  msgstr ""
520
 
521
- #: Application/Backend/View/Localization.php:53 media/js/aam.js:652
522
  msgid "_TOTAL_ user(s)"
523
  msgstr ""
524
 
525
- #: Application/Backend/View/Localization.php:54 media/js/aam.js:714
526
- #: Application/Backend/phtml/index.phtml:203
527
- #: Application/Backend/phtml/metabox/metabox-content.phtml:46
528
  msgid "Role"
529
  msgstr ""
530
 
531
  #: Application/Backend/View/Localization.php:55
532
- #: Application/Core/Subject/Visitor.php:79 media/js/aam.js:1007
533
  msgid "Anonymous"
534
  msgstr ""
535
 
@@ -541,38 +577,39 @@ msgstr ""
541
  msgid "Current role"
542
  msgstr ""
543
 
544
- #: Application/Backend/View/Localization.php:58 media/js/aam.js:2191
545
  msgid "Manage Access"
546
  msgstr ""
547
 
548
  #: Application/Backend/View/Localization.php:59
549
- #: Application/Backend/View/PostOptionList.php:95 media/js/aam.js:2203
550
  msgid "Edit"
551
  msgstr ""
552
 
553
- #: Application/Backend/View/Localization.php:60 media/js/aam.js:246
554
  msgid "Manage Role"
555
  msgstr ""
556
 
557
- #: Application/Backend/View/Localization.php:61 media/js/aam.js:268
558
  msgid "Edit Role"
559
  msgstr ""
560
 
561
- #: Application/Backend/View/Localization.php:63 media/js/aam.js:753
 
562
  msgid "Manage User"
563
  msgstr ""
564
 
565
- #: Application/Backend/View/Localization.php:64 media/js/aam.js:802
566
  msgid "Edit User"
567
  msgstr ""
568
 
569
- #: Application/Backend/View/Localization.php:65 media/js/aam.js:610
570
- #: media/js/aam.js:611 media/js/aam.js:815
571
  msgid "Lock User"
572
  msgstr ""
573
 
574
- #: Application/Backend/View/Localization.php:66 media/js/aam.js:604
575
- #: media/js/aam.js:605 media/js/aam.js:828
576
  msgid "Unlock User"
577
  msgstr ""
578
 
@@ -741,9 +778,10 @@ msgid ""
741
  msgstr ""
742
 
743
  #: Application/Backend/View/PostOptionList.php:100
744
- #: Application/Backend/View/PostOptionList.php:162
745
- #: Application/Backend/phtml/index.phtml:276
746
  #: Application/Backend/phtml/main/capability.phtml:104
 
747
  msgid "Delete"
748
  msgstr ""
749
 
@@ -823,57 +861,130 @@ msgstr ""
823
  msgid "Howdy, %username%"
824
  msgstr ""
825
 
826
- #: Application/Core/Importer.php:62
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
827
  msgid "Version of exported settings do not match current AAM version"
828
  msgstr ""
829
 
830
- #: Application/Core/JwtAuth.php:56
831
  msgid "Valid username."
832
  msgstr ""
833
 
834
- #: Application/Core/JwtAuth.php:60
835
  msgid "Valid password."
836
  msgstr ""
837
 
838
- #: Application/Core/JwtAuth.php:150
839
- msgid "JWT Authentication is enabled but secret key is not defined"
840
  msgstr ""
841
 
842
- #: Application/Core/JwtAuth.php:205
843
- #, php-format
844
- msgid "Invalid value %s for property %s"
845
  msgstr ""
846
 
847
- #: Application/Core/Login.php:175
848
  msgid "Access denied. Please login to get access."
849
  msgstr ""
850
 
851
- #: Application/Core/Subject/Default.php:78 media/js/aam.js:1046
 
 
 
 
 
 
 
 
852
  msgid "All Users, Roles and Visitor"
853
  msgstr ""
854
 
855
- #: Application/Extension/Repository.php:129
856
  #, php-format
857
- msgid ""
858
- "The [%s] file is missing. Update extension to the latest version. %sRead "
859
- "more.%s"
860
  msgstr ""
861
 
862
- #: Application/Extension/Repository.php:365
 
 
 
 
 
863
  #, php-format
864
  msgid "Failed to create %s"
865
  msgstr ""
866
 
867
- #: Application/Extension/Repository.php:369
868
  #, php-format
869
  msgid "Directory %s is not writable"
870
  msgstr ""
871
 
872
- #: Application/Shared/Manager.php:349
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
873
  msgid "RESTful API is disabled"
874
  msgstr ""
875
 
876
- #: Application/Shared/Manager.php:457
877
  msgid "[No teaser message provided]"
878
  msgstr ""
879
 
@@ -881,179 +992,263 @@ msgstr ""
881
  msgid "No valid strategy found for the given context"
882
  msgstr ""
883
 
884
- #: aam.php:213
 
 
 
 
885
  msgid "PHP 5.3.0 or higher is required."
886
  msgstr ""
887
 
888
- #: aam.php:215
889
  msgid "WP 4.0 or higher is required."
890
  msgstr ""
891
 
892
- #: media/js/aam.js:179
 
 
 
 
 
 
 
 
 
 
893
  msgid "Create New Role"
894
  msgstr ""
895
 
896
- #: media/js/aam.js:284
897
  msgid "Clone Role"
898
  msgstr ""
899
 
900
- #: media/js/aam.js:564 Application/Backend/phtml/index.phtml:325
901
  #: Application/Backend/phtml/partial/role-inheritance.phtml:5
902
  msgid "Select Role"
903
  msgstr ""
904
 
905
- #: media/js/aam.js:667
 
 
 
 
 
 
 
 
906
  msgid "Create New User"
907
  msgstr ""
908
 
909
- #: media/js/aam.js:676
910
  msgid "Loading roles..."
911
  msgstr ""
912
 
913
- #: media/js/aam.js:693
914
  msgid "Filter By Role"
915
  msgstr ""
916
 
917
- #: media/js/aam.js:787
918
- msgid "User Expiration"
919
- msgstr ""
920
-
921
- #: media/js/aam.js:841
922
  msgid "Switch To User"
923
  msgstr ""
924
 
925
- #: media/js/aam.js:933 Application/Backend/phtml/index.phtml:331
 
 
926
  #: Application/Backend/phtml/partial/post-advanced-settings.phtml:16
927
  msgid "Save"
928
  msgstr ""
929
 
930
- #: media/js/aam.js:952
931
  msgid "Reseting..."
932
  msgstr ""
933
 
934
- #: media/js/aam.js:966 Application/Backend/phtml/index.phtml:330
935
  msgid "Reset"
936
  msgstr ""
937
 
938
- #: media/js/aam.js:1103 media/js/aam.js:1226 media/js/aam.js:3097
939
- #: media/js/aam.js:3145 media/js/aam.js:3179 media/js/aam.js:3212
940
- #: media/js/aam.js:3267
941
- msgid "Application Error"
942
  msgstr ""
943
 
944
- #: media/js/aam.js:1172 Application/Backend/phtml/main/menu.phtml:57
945
- #: Application/Backend/phtml/main/toolbar.phtml:55
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
946
  msgid "Uncheck to allow"
947
  msgstr ""
948
 
949
- #: media/js/aam.js:1174 Application/Backend/phtml/main/menu.phtml:57
950
- #: Application/Backend/phtml/main/toolbar.phtml:55
951
  msgid "Check to restrict"
952
  msgstr ""
953
 
954
- #: media/js/aam.js:1347 media/js/aam.js:1503
955
- #: Application/Backend/phtml/main/metabox.phtml:65
956
  msgid "Uncheck to show"
957
  msgstr ""
958
 
959
- #: media/js/aam.js:1349 media/js/aam.js:1505
960
- #: Application/Backend/phtml/main/metabox.phtml:65
961
  msgid "Check to hide"
962
  msgstr ""
963
 
964
- #: media/js/aam.js:1475
965
  msgid "Processing"
966
  msgstr ""
967
 
968
- #: media/js/aam.js:1478 Application/Backend/phtml/main/metabox.phtml:101
969
  msgid "Initialize"
970
  msgstr ""
971
 
972
- #: media/js/aam.js:1551
973
  msgid "WordPress core does not allow to grant this capability"
974
  msgstr ""
975
 
976
- #: media/js/aam.js:1591 media/js/aam.js:2772
977
  msgid "Nothing to show"
978
  msgstr ""
979
 
980
- #: media/js/aam.js:1743
981
- msgid "Failed to update capability"
982
- msgstr ""
983
-
984
- #: media/js/aam.js:1751 Application/Backend/phtml/main/capability.phtml:76
985
  msgid "Update Capability"
986
  msgstr ""
987
 
988
- #: media/js/aam.js:1782
989
- msgid "Failed to delete capability"
990
- msgstr ""
991
-
992
- #: media/js/aam.js:1790 Application/Backend/phtml/main/capability.phtml:98
993
  msgid "Delete Capability"
994
  msgstr ""
995
 
996
- #: media/js/aam.js:2094
997
  msgid "Settings Customized"
998
  msgstr ""
999
 
1000
- #: media/js/aam.js:2128 media/js/aam.js:2131 media/js/aam.js:2144
1001
- #: media/js/aam.js:2147
1002
  msgid "Parent:"
1003
  msgstr ""
1004
 
1005
- #: media/js/aam.js:2134 media/js/aam.js:2150
1006
- #: Application/Backend/phtml/main/metabox.phtml:63
 
 
1007
  msgid "ID:"
1008
  msgstr ""
1009
 
1010
- #: media/js/aam.js:2177
1011
  msgid "Drill-Down"
1012
  msgstr ""
1013
 
1014
- #: media/js/aam.js:2250 media/js/aam.js:3731
1015
  msgid "Resetting..."
1016
  msgstr ""
1017
 
1018
- #: media/js/aam.js:2768
1019
  msgid "Search Route"
1020
  msgstr ""
1021
 
1022
- #: media/js/aam.js:2769
1023
  msgid "_TOTAL_ route(s)"
1024
  msgstr ""
1025
 
1026
- #: media/js/aam.js:2771
1027
  msgid "No API enpoints found. You might have APIs disabled."
1028
  msgstr ""
1029
 
1030
- #: media/js/aam.js:2886
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1031
  msgid "Extension status was updated successfully"
1032
  msgstr ""
1033
 
1034
- #: media/js/aam.js:3033
1035
  msgid "The issue has been resolved"
1036
  msgstr ""
1037
 
1038
- #: media/js/aam.js:3132 media/js/aam.js:3166 media/js/aam.js:3200
1039
- #: media/js/aam.js:3253
 
 
 
1040
  msgid "Wait..."
1041
  msgstr ""
1042
 
1043
- #: media/js/aam.js:3138
1044
  msgid "All settings has been cleared successfully"
1045
  msgstr ""
1046
 
1047
- #: media/js/aam.js:3149 media/js/aam.js:3183
1048
- #: Application/Backend/phtml/settings/tools.phtml:66
1049
  msgid "Clear"
1050
  msgstr ""
1051
 
1052
- #: media/js/aam.js:3172
1053
  msgid "The cache has been cleared successfully"
1054
  msgstr ""
1055
 
1056
- #: media/js/vendor.js:564
1057
  msgid ": "
1058
  msgstr ""
1059
 
@@ -1087,7 +1282,7 @@ msgid "Premium"
1087
  msgstr ""
1088
 
1089
  #: Application/Backend/phtml/extensions.phtml:29
1090
- #: Application/Backend/phtml/extensions.phtml:69
1091
  msgid "Free"
1092
  msgstr ""
1093
 
@@ -1095,56 +1290,64 @@ msgstr ""
1095
  msgid "Check for Updates"
1096
  msgstr ""
1097
 
1098
- #: Application/Backend/phtml/extensions.phtml:49
1099
- #: Application/Backend/phtml/extensions.phtml:76
 
 
 
 
1100
  msgid "Deactivate"
1101
  msgstr ""
1102
 
1103
- #: Application/Backend/phtml/extensions.phtml:49
1104
- #: Application/Backend/phtml/extensions.phtml:76
1105
  msgid "extension is active"
1106
  msgstr ""
1107
 
1108
- #: Application/Backend/phtml/extensions.phtml:53
1109
- #: Application/Backend/phtml/extensions.phtml:80
 
 
 
 
1110
  msgid "Activate"
1111
  msgstr ""
1112
 
1113
- #: Application/Backend/phtml/extensions.phtml:53
1114
- #: Application/Backend/phtml/extensions.phtml:80
1115
  msgid "extension is inactive"
1116
  msgstr ""
1117
 
1118
- #: Application/Backend/phtml/extensions.phtml:55
1119
- #: Application/Backend/phtml/index.phtml:152
1120
  msgid "Read More"
1121
  msgstr ""
1122
 
1123
- #: Application/Backend/phtml/extensions.phtml:82
1124
- #: Application/Backend/phtml/extensions.phtml:117
1125
- msgid "Download"
1126
- msgstr ""
1127
-
1128
- #: Application/Backend/phtml/extensions.phtml:97
1129
- #: Application/Backend/phtml/extensions.phtml:128
1130
- #: Application/Backend/phtml/extensions.phtml:139
1131
- #: Application/Backend/phtml/index.phtml:216
1132
- #: Application/Backend/phtml/index.phtml:233
1133
- #: Application/Backend/phtml/index.phtml:243
1134
- #: Application/Backend/phtml/index.phtml:259
1135
- #: Application/Backend/phtml/index.phtml:269
1136
- #: Application/Backend/phtml/index.phtml:277
1137
- #: Application/Backend/phtml/index.phtml:304
1138
- #: Application/Backend/phtml/index.phtml:332
1139
  #: Application/Backend/phtml/main/capability.phtml:54
1140
  #: Application/Backend/phtml/main/capability.phtml:65
1141
  #: Application/Backend/phtml/main/capability.phtml:75
1142
  #: Application/Backend/phtml/main/capability.phtml:87
1143
  #: Application/Backend/phtml/main/capability.phtml:97
1144
  #: Application/Backend/phtml/main/capability.phtml:105
1145
- #: Application/Backend/phtml/main/menu.phtml:100
1146
- #: Application/Backend/phtml/main/metabox.phtml:88
1147
- #: Application/Backend/phtml/main/metabox.phtml:102
 
 
 
 
1148
  #: Application/Backend/phtml/partial/post-advanced-settings.phtml:6
1149
  #: Application/Backend/phtml/partial/post-advanced-settings.phtml:17
1150
  #: Application/Backend/phtml/partial/post-advanced-settings.phtml:27
@@ -1157,56 +1360,55 @@ msgstr ""
1157
  #: Application/Backend/phtml/partial/post-advanced-settings.phtml:136
1158
  #: Application/Backend/phtml/partial/post-advanced-settings.phtml:146
1159
  #: Application/Backend/phtml/partial/post-advanced-settings.phtml:158
1160
- #: Application/Backend/phtml/settings/tools.phtml:59
1161
  msgid "Close"
1162
  msgstr ""
1163
 
1164
- #: Application/Backend/phtml/extensions.phtml:98
1165
  msgid "Notification"
1166
  msgstr ""
1167
 
1168
- #: Application/Backend/phtml/extensions.phtml:102
1169
  msgid ""
1170
  "Extension requires manual installation. Please follow few simple steps below."
1171
  msgstr ""
1172
 
1173
- #: Application/Backend/phtml/extensions.phtml:106
1174
  msgid "Click [Download] button below and save the zip archive on your computer"
1175
  msgstr ""
1176
 
1177
- #: Application/Backend/phtml/extensions.phtml:107
1178
  msgid "Connect to your website via FTP and navigate to [wp-content] folder"
1179
  msgstr ""
1180
 
1181
- #: Application/Backend/phtml/extensions.phtml:108
1182
  msgid ""
1183
  "Create [aam/extension] folder inside [wp-content] and make sure it is "
1184
  "writable by your server"
1185
  msgstr ""
1186
 
1187
- #: Application/Backend/phtml/extensions.phtml:109
1188
  msgid ""
1189
  "Unzip downloaded archive and upload the folder inside the [wp-content/aam/"
1190
  "extension] folder"
1191
  msgstr ""
1192
 
1193
- #: Application/Backend/phtml/extensions.phtml:113
1194
  msgid ""
1195
  "[PLEASE NOTE!] Your browser may not support the latest HTML5 attribures and "
1196
  "if downloaded file is not .ZIP archive, simply rename the file by adding ."
1197
  "zip extension."
1198
  msgstr ""
1199
 
1200
- #: Application/Backend/phtml/extensions.phtml:118
1201
- #: Application/Backend/phtml/settings/tools.phtml:67
1202
  msgid "Cancel"
1203
  msgstr ""
1204
 
1205
- #: Application/Backend/phtml/extensions.phtml:129
1206
  msgid "Install Extension"
1207
  msgstr ""
1208
 
1209
- #: Application/Backend/phtml/extensions.phtml:133
1210
  msgid ""
1211
  "Insert license key that you recieved after the payment (find the email "
1212
  "example below). It might take up to 2 hours to process the payment. Please "
@@ -1230,22 +1432,38 @@ msgstr ""
1230
  msgid "Notifications"
1231
  msgstr ""
1232
 
1233
- #: Application/Backend/phtml/index.phtml:79
1234
- msgid "Warning"
1235
  msgstr ""
1236
 
1237
  #: Application/Backend/phtml/index.phtml:84
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1238
  #, php-format
1239
  msgid ""
1240
  "All AAM extension should be located in [%s] directory however it either does "
1241
  "not exist or is not writable."
1242
  msgstr ""
1243
 
1244
- #: Application/Backend/phtml/index.phtml:86
1245
  msgid "Click To Fix The Issue"
1246
  msgstr ""
1247
 
1248
- #: Application/Backend/phtml/index.phtml:97
1249
  #, php-format
1250
  msgid ""
1251
  "Failed to create a [%s] directory for AAM extension. To create it manually, "
@@ -1254,176 +1472,213 @@ msgid ""
1254
  "file is located)."
1255
  msgstr ""
1256
 
1257
- #: Application/Backend/phtml/index.phtml:102
1258
  msgid "Ok"
1259
  msgstr ""
1260
 
1261
- #: Application/Backend/phtml/index.phtml:114
1262
  msgid "Premium Licenses"
1263
  msgstr ""
1264
 
1265
- #: Application/Backend/phtml/index.phtml:131
1266
  msgid "Manage License"
1267
  msgstr ""
1268
 
1269
- #: Application/Backend/phtml/index.phtml:133
1270
  msgid "Upgrade License"
1271
  msgstr ""
1272
 
1273
- #: Application/Backend/phtml/index.phtml:151
1274
  msgid ""
1275
  "The [Development Package] allows you to get all premium extensions for "
1276
  "[unlimited number of websites]."
1277
  msgstr ""
1278
 
1279
- #: Application/Backend/phtml/index.phtml:162
1280
  msgid "AAM Multisite"
1281
  msgstr ""
1282
 
1283
- #: Application/Backend/phtml/index.phtml:165
1284
  msgid ""
1285
  "Install free [AAM Multisite extension] in order to manage all your sites "
1286
  "from the Network Admin."
1287
  msgstr ""
1288
 
1289
- #: Application/Backend/phtml/index.phtml:176
1290
  msgid "Users/Roles Manager"
1291
  msgstr ""
1292
 
1293
- #: Application/Backend/phtml/index.phtml:183
1294
- #: Application/Backend/phtml/index.phtml:363
1295
  msgid "Roles"
1296
  msgstr ""
1297
 
1298
- #: Application/Backend/phtml/index.phtml:189
1299
- #: Application/Backend/phtml/index.phtml:373
1300
  msgid "Visitor"
1301
  msgstr ""
1302
 
1303
- #: Application/Backend/phtml/index.phtml:192
1304
- #: Application/Backend/phtml/index.phtml:378
1305
  msgid "Default"
1306
  msgstr ""
1307
 
1308
- #: Application/Backend/phtml/index.phtml:204
1309
- #: Application/Backend/phtml/index.phtml:292
 
1310
  msgid "Action"
1311
  msgstr ""
1312
 
1313
- #: Application/Backend/phtml/index.phtml:217
1314
  msgid "Create Role"
1315
  msgstr ""
1316
 
1317
- #: Application/Backend/phtml/index.phtml:221
1318
- #: Application/Backend/phtml/index.phtml:248
1319
  msgid "Role Name"
1320
  msgstr ""
1321
 
1322
- #: Application/Backend/phtml/index.phtml:222
1323
- #: Application/Backend/phtml/index.phtml:249
1324
  msgid "Enter Role Name"
1325
  msgstr ""
1326
 
1327
- #: Application/Backend/phtml/index.phtml:225
1328
- #: Application/Backend/phtml/index.phtml:252
1329
  msgid "Role Expiration"
1330
  msgstr ""
1331
 
1332
- #: Application/Backend/phtml/index.phtml:226
1333
- #: Application/Backend/phtml/index.phtml:253
1334
  msgid "Enter Expiration Rule"
1335
  msgstr ""
1336
 
1337
- #: Application/Backend/phtml/index.phtml:244
1338
  msgid "Update Role"
1339
  msgstr ""
1340
 
1341
- #: Application/Backend/phtml/index.phtml:273
1342
  #, php-format
1343
  msgid "Are you sure that you want to delete the %s role?"
1344
  msgstr ""
1345
 
1346
- #: Application/Backend/phtml/index.phtml:291
1347
- #: Application/Backend/phtml/metabox/metabox-content.phtml:62
1348
  msgid "Username"
1349
  msgstr ""
1350
 
1351
- #: Application/Backend/phtml/index.phtml:305
1352
- msgid "Manage User Expiration"
 
 
1353
  msgstr ""
1354
 
1355
- #: Application/Backend/phtml/index.phtml:314
1356
  msgid "Action After Expiration"
1357
  msgstr ""
1358
 
1359
- #: Application/Backend/phtml/index.phtml:316
1360
  msgid "Select Action"
1361
  msgstr ""
1362
 
1363
- #: Application/Backend/phtml/index.phtml:317
 
 
 
 
1364
  msgid "Delete Account"
1365
  msgstr ""
1366
 
1367
- #: Application/Backend/phtml/index.phtml:318
1368
  msgid "Lock Account"
1369
  msgstr ""
1370
 
1371
- #: Application/Backend/phtml/index.phtml:319
1372
  msgid "Change User Role"
1373
  msgstr ""
1374
 
1375
- #: Application/Backend/phtml/index.phtml:323
1376
  msgid "Change To Role"
1377
  msgstr ""
1378
 
1379
- #: Application/Backend/phtml/index.phtml:342
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1380
  msgid ""
1381
  "Manage access to your website for visitors (any user that is not "
1382
  "authenticated)"
1383
  msgstr ""
1384
 
1385
- #: Application/Backend/phtml/index.phtml:343
1386
- #: Application/Backend/phtml/metabox/metabox-content.phtml:75
1387
  msgid "Manage Visitors"
1388
  msgstr ""
1389
 
1390
- #: Application/Backend/phtml/index.phtml:350
1391
  msgid ""
1392
  "Manage default access to your website resources for all users, roles and "
1393
  "visitor. This includes Administrator role and your user"
1394
  msgstr ""
1395
 
1396
- #: Application/Backend/phtml/index.phtml:351
1397
- #: Application/Backend/phtml/metabox/metabox-content.phtml:84
1398
  msgid "Manage Default Access"
1399
  msgstr ""
1400
 
1401
- #: Application/Backend/phtml/index.phtml:359
1402
  msgid ""
1403
  "Manage access for your users, roles and visitors. Be careful with "
1404
  "[Administrator] role as well as your admin user. [Database backup is "
1405
  "strongly recommended]."
1406
  msgstr ""
1407
 
1408
- #: Application/Backend/phtml/index.phtml:364
1409
  msgid ""
1410
  "With Roles tab you can manage access for any defined role, edit role's name, "
1411
  "create new role or even delete existing (but only when there is no users "
1412
  "assigned to it). You are not allowed to delete Administrator role."
1413
  msgstr ""
1414
 
1415
- #: Application/Backend/phtml/index.phtml:369
1416
  msgid ""
1417
  "Manage access for any user. As a bonus feature, you can block user. It means "
1418
  "that user will be not able to login to your website anymore."
1419
  msgstr ""
1420
 
1421
- #: Application/Backend/phtml/index.phtml:374
1422
  msgid ""
1423
  "Visitor can be considered any user that is not authenticated to your website."
1424
  msgstr ""
1425
 
1426
- #: Application/Backend/phtml/index.phtml:379
1427
  msgid ""
1428
  "Manage default access settings to your website resources for all users, "
1429
  "roles and visitors."
@@ -1445,6 +1700,7 @@ msgstr ""
1445
  #: Application/Backend/phtml/main/login-redirect.phtml:31
1446
  #: Application/Backend/phtml/main/logout-redirect.phtml:31
1447
  #: Application/Backend/phtml/main/redirect.phtml:50
 
1448
  #: Application/Backend/phtml/partial/post-advanced-settings.phtml:77
1449
  msgid "Redirected to existing page [(select from the drop-down)]"
1450
  msgstr ""
@@ -1452,6 +1708,7 @@ msgstr ""
1452
  #: Application/Backend/phtml/main/404redirect.phtml:28
1453
  #: Application/Backend/phtml/main/redirect.phtml:54
1454
  #: Application/Backend/phtml/main/redirect.phtml:106
 
1455
  msgid "Redirected to the URL [(enter valid URL starting from http or https)]"
1456
  msgstr ""
1457
 
@@ -1460,6 +1717,7 @@ msgstr ""
1460
  #: Application/Backend/phtml/main/logout-redirect.phtml:39
1461
  #: Application/Backend/phtml/main/redirect.phtml:58
1462
  #: Application/Backend/phtml/main/redirect.phtml:110
 
1463
  #: Application/Backend/phtml/partial/post-advanced-settings.phtml:85
1464
  #, php-format
1465
  msgid "Trigger PHP callback function [(valid %sPHP callback%s is required)]"
@@ -1470,6 +1728,7 @@ msgstr ""
1470
  #: Application/Backend/phtml/main/logout-redirect.phtml:52
1471
  #: Application/Backend/phtml/main/redirect.phtml:76
1472
  #: Application/Backend/phtml/main/redirect.phtml:128
 
1473
  #: Application/Backend/phtml/partial/post-advanced-settings.phtml:96
1474
  msgid "-- Select Page --"
1475
  msgstr ""
@@ -1488,6 +1747,7 @@ msgstr ""
1488
  #: Application/Backend/phtml/main/logout-redirect.phtml:63
1489
  #: Application/Backend/phtml/main/redirect.phtml:87
1490
  #: Application/Backend/phtml/main/redirect.phtml:139
 
1491
  #: Application/Backend/phtml/partial/post-advanced-settings.phtml:107
1492
  msgid "PHP Callback Function"
1493
  msgstr ""
@@ -1520,10 +1780,12 @@ msgstr ""
1520
  #: Application/Backend/phtml/main/capability.phtml:33
1521
  #: Application/Backend/phtml/main/menu.phtml:14
1522
  #: Application/Backend/phtml/main/metabox.phtml:20
 
1523
  #: Application/Backend/phtml/main/post.phtml:36
1524
- #: Application/Backend/phtml/main/route.phtml:18
1525
- #: Application/Backend/phtml/main/toolbar.phtml:19
1526
- #: Application/Backend/phtml/metabox/metabox-content.phtml:101
 
1527
  msgid "Reset To Default"
1528
  msgstr ""
1529
 
@@ -1538,7 +1800,9 @@ msgid "Capability"
1538
  msgstr ""
1539
 
1540
  #: Application/Backend/phtml/main/capability.phtml:44
 
1541
  #: Application/Backend/phtml/main/post.phtml:52
 
1542
  msgid "Actions"
1543
  msgstr ""
1544
 
@@ -1602,9 +1866,7 @@ msgid ""
1602
  msgstr ""
1603
 
1604
  #: Application/Backend/phtml/main/get-started.phtml:12
1605
- msgid ""
1606
- "To remove the \"Get Started\" tab you may go to Settings Area and disable "
1607
- "\"Get Started Feature\" option."
1608
  msgstr ""
1609
 
1610
  #: Application/Backend/phtml/main/login-redirect.phtml:7
@@ -1653,31 +1915,37 @@ msgstr ""
1653
  #: Application/Backend/phtml/main/menu.phtml:13
1654
  #: Application/Backend/phtml/main/metabox.phtml:19
1655
  #: Application/Backend/phtml/main/post.phtml:35
1656
- #: Application/Backend/phtml/main/toolbar.phtml:18
1657
- #: Application/Backend/phtml/metabox/metabox-content.phtml:100
 
1658
  msgid "Settings are customized"
1659
  msgstr ""
1660
 
1661
- #: Application/Backend/phtml/main/menu.phtml:50
1662
- #: Application/Backend/phtml/main/menu.phtml:55
 
 
 
 
 
1663
  msgid "Cap:"
1664
  msgstr ""
1665
 
1666
- #: Application/Backend/phtml/main/menu.phtml:89
1667
  msgid ""
1668
  "Current user does not have enough capabilities to access any available "
1669
  "dashboard page."
1670
  msgstr ""
1671
 
1672
- #: Application/Backend/phtml/main/menu.phtml:101
1673
  msgid "Dashboard Lockdown"
1674
  msgstr ""
1675
 
1676
- #: Application/Backend/phtml/main/menu.phtml:105
1677
  msgid "You cannot restrict access to Dashboard home page."
1678
  msgstr ""
1679
 
1680
- #: Application/Backend/phtml/main/menu.phtml:106
1681
  #, php-format
1682
  msgid ""
1683
  "The [Home] is the default page every user is redirected after login. To "
@@ -1685,7 +1953,7 @@ msgid ""
1685
  "WordPress backend%s article."
1686
  msgstr ""
1687
 
1688
- #: Application/Backend/phtml/main/menu.phtml:110
1689
  msgid "OK"
1690
  msgstr ""
1691
 
@@ -1697,7 +1965,6 @@ msgid ""
1697
  msgstr ""
1698
 
1699
  #: Application/Backend/phtml/main/metabox.phtml:12
1700
- #: Application/Backend/phtml/main/toolbar.phtml:12
1701
  msgid "Refresh"
1702
  msgstr ""
1703
 
@@ -1713,19 +1980,15 @@ msgstr ""
1713
  msgid "Frontend Widgets [(including Appearance->Widgets)]"
1714
  msgstr ""
1715
 
1716
- #: Application/Backend/phtml/main/metabox.phtml:63
1717
- msgid "Screen:"
1718
- msgstr ""
1719
-
1720
- #: Application/Backend/phtml/main/metabox.phtml:78
1721
  msgid "The list is not initialized. Click Refresh button above."
1722
  msgstr ""
1723
 
1724
- #: Application/Backend/phtml/main/metabox.phtml:89
1725
  msgid "Initialize URL"
1726
  msgstr ""
1727
 
1728
- #: Application/Backend/phtml/main/metabox.phtml:93
1729
  msgid ""
1730
  "Some metaboxes are \"conditional\" and appear on the Edit screen when "
1731
  "certain conditions are met. For example metabox \"Comments\" appears only "
@@ -1734,14 +1997,36 @@ msgid ""
1734
  "appears."
1735
  msgstr ""
1736
 
1737
- #: Application/Backend/phtml/main/metabox.phtml:96
1738
  msgid "Backend page URL"
1739
  msgstr ""
1740
 
1741
- #: Application/Backend/phtml/main/metabox.phtml:97
1742
  msgid "Insert valid URL"
1743
  msgstr ""
1744
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1745
  #: Application/Backend/phtml/main/post.phtml:7
1746
  #, php-format
1747
  msgid ""
@@ -1807,10 +2092,12 @@ msgstr ""
1807
 
1808
  #: Application/Backend/phtml/main/redirect.phtml:40
1809
  #: Application/Backend/phtml/main/redirect.phtml:98
 
1810
  msgid "Show customized message [(plain text or HTML)]"
1811
  msgstr ""
1812
 
1813
  #: Application/Backend/phtml/main/redirect.phtml:45
 
1814
  msgid ""
1815
  "Redirect to the login page [(after login, user will be redirected back to "
1816
  "the restricted page)]"
@@ -1818,11 +2105,13 @@ msgstr ""
1818
 
1819
  #: Application/Backend/phtml/main/redirect.phtml:62
1820
  #: Application/Backend/phtml/main/redirect.phtml:114
 
1821
  msgid "Customized Message"
1822
  msgstr ""
1823
 
1824
  #: Application/Backend/phtml/main/redirect.phtml:63
1825
  #: Application/Backend/phtml/main/redirect.phtml:115
 
1826
  msgid "Enter message..."
1827
  msgstr ""
1828
 
@@ -1838,22 +2127,15 @@ msgid ""
1838
  "available in AAM."
1839
  msgstr ""
1840
 
1841
- #: Application/Backend/phtml/main/route.phtml:9
1842
- msgid ""
1843
- "[Please note!] It is the initial version of this feature. It can be "
1844
- "significantly enhanced with a lot of useful functionality. Your feedback and "
1845
- "suggestions are highly appreciated!"
1846
- msgstr ""
1847
-
1848
- #: Application/Backend/phtml/main/route.phtml:17
1849
  msgid "Routes are customized"
1850
  msgstr ""
1851
 
1852
- #: Application/Backend/phtml/main/route.phtml:28
1853
  msgid "Route"
1854
  msgstr ""
1855
 
1856
- #: Application/Backend/phtml/main/route.phtml:29
1857
  msgid "Deny"
1858
  msgstr ""
1859
 
@@ -1865,28 +2147,100 @@ msgid ""
1865
  "or utilize the great power of roles and capabilities."
1866
  msgstr ""
1867
 
1868
- #: Application/Backend/phtml/main/toolbar.phtml:82
 
 
 
 
1869
  msgid ""
1870
  "The list of top admin bar items is not initialized. Click \"Refresh\" button "
1871
  "above."
1872
  msgstr ""
1873
 
1874
- #: Application/Backend/phtml/metabox/metabox-content.phtml:74
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1875
  #, php-format
1876
  msgid "Manage access to %s for visitors (any user that is not authenticated)"
1877
  msgstr ""
1878
 
1879
- #: Application/Backend/phtml/metabox/metabox-content.phtml:82
 
 
 
 
 
 
1880
  #, php-format
1881
  msgid ""
1882
  "Manage default access to %s for all users, roles and visitor. This includes "
1883
  "Administrator role and yourself"
1884
  msgstr ""
1885
 
1886
- #: Application/Backend/phtml/metabox/metabox-content.phtml:87
 
 
 
 
 
 
1887
  msgid "This feature is allowed only with [AAM Plus Package] extension."
1888
  msgstr ""
1889
 
 
 
 
 
 
 
 
 
 
 
 
1890
  #: Application/Backend/phtml/partial/login-redirect.phtml:3
1891
  msgid ""
1892
  "Setup [default] redirect after user logged in successfully for all your "
@@ -1898,17 +2252,17 @@ msgstr ""
1898
  msgid "Frontend Access Settings"
1899
  msgstr ""
1900
 
1901
- #: Application/Backend/phtml/partial/post-access-form.phtml:26
1902
- #: Application/Backend/phtml/partial/post-access-form.phtml:62
1903
- #: Application/Backend/phtml/partial/post-access-form.phtml:100
1904
  msgid "change"
1905
  msgstr ""
1906
 
1907
- #: Application/Backend/phtml/partial/post-access-form.phtml:49
1908
  msgid "Backend Access Settings"
1909
  msgstr ""
1910
 
1911
- #: Application/Backend/phtml/partial/post-access-form.phtml:85
1912
  msgid "API Access Settings"
1913
  msgstr ""
1914
 
@@ -1997,49 +2351,6 @@ msgid ""
1997
  "belong to %s. Consider to purchase [AAM Plus Package] extension."
1998
  msgstr ""
1999
 
2000
- #: Application/Backend/phtml/settings/tools.phtml:8
2001
- msgid "Export AAM Settings"
2002
- msgstr ""
2003
-
2004
- #: Application/Backend/phtml/settings/tools.phtml:10
2005
- #, php-format
2006
- msgid ""
2007
- "Export selected AAM settings to the file. For more information about this "
2008
- "feature check %sHow to export and import AAM settings%s article."
2009
- msgstr ""
2010
-
2011
- #: Application/Backend/phtml/settings/tools.phtml:19
2012
- msgid "Import AAM Settings"
2013
- msgstr ""
2014
-
2015
- #: Application/Backend/phtml/settings/tools.phtml:21
2016
- msgid "Import AAM settings from the file."
2017
- msgstr ""
2018
-
2019
- #: Application/Backend/phtml/settings/tools.phtml:31
2020
- msgid "Clear Cache"
2021
- msgstr ""
2022
-
2023
- #: Application/Backend/phtml/settings/tools.phtml:33
2024
- msgid "Clear all AAM cache."
2025
- msgstr ""
2026
-
2027
- #: Application/Backend/phtml/settings/tools.phtml:42
2028
- msgid "Clear All Settings"
2029
- msgstr ""
2030
-
2031
- #: Application/Backend/phtml/settings/tools.phtml:44
2032
- msgid "Remove all the settings related to AAM from the database."
2033
- msgstr ""
2034
-
2035
- #: Application/Backend/phtml/settings/tools.phtml:60
2036
- msgid "Clear all settings"
2037
- msgstr ""
2038
-
2039
- #: Application/Backend/phtml/settings/tools.phtml:63
2040
- msgid "All AAM settings will be removed."
2041
- msgstr ""
2042
-
2043
  #: Application/Backend/phtml/widget/login-backend.phtml:3
2044
  msgid "Login Title"
2045
  msgstr ""
1
  msgid ""
2
  msgstr ""
3
  "Project-Id-Version: Advanced Access Manager\n"
4
+ "POT-Creation-Date: 2019-02-07 06:56-0500\n"
5
  "PO-Revision-Date: \n"
6
  "Last-Translator: \n"
7
  "Language-Team: AAMPlugin <support@aamplugin.com>\n"
9
  "MIME-Version: 1.0\n"
10
  "Content-Type: text/plain; charset=UTF-8\n"
11
  "Content-Transfer-Encoding: 8bit\n"
12
+ "X-Generator: Poedit 2.2.1\n"
13
  "Plural-Forms: nplurals=2; plural=(n != 1);\n"
14
  "X-Poedit-SourceCharset: UTF-8\n"
15
  "X-Poedit-KeywordsList: __;preparePhrase\n"
16
  "X-Poedit-Basepath: ..\n"
17
  "X-Poedit-SearchPath-0: .\n"
18
 
19
+ #: Application/Api/Manager.php:129
20
  msgid "Access denied"
21
  msgstr ""
22
 
23
+ #: Application/Backend/Feature/Extension/Manager.php:75
24
+ msgid "Download failure. Try again or contact us."
25
  msgstr ""
26
 
27
+ #: Application/Backend/Feature/Extension/Manager.php:113
28
+ msgid "No valid license key was found."
 
 
 
 
29
  msgstr ""
30
 
31
  #: Application/Backend/Feature/Main/404Redirect.php:53
32
  msgid "404 Redirect"
33
  msgstr ""
34
 
35
+ #: Application/Backend/Feature/Main/Capability.php:88
36
+ msgid "Permission denied to update this capability"
37
+ msgstr ""
38
+
39
+ #: Application/Backend/Feature/Main/Capability.php:105
40
  msgid "Capability already exists"
41
  msgstr ""
42
 
43
+ #: Application/Backend/Feature/Main/Capability.php:128
44
+ msgid "Permission denied to delete this capability"
45
  msgstr ""
46
 
47
+ #: Application/Backend/Feature/Main/Capability.php:298
48
+ #: Application/Backend/Feature/Main/Capability.php:339
49
  msgid "System"
50
  msgstr ""
51
 
52
+ #: Application/Backend/Feature/Main/Capability.php:299
53
+ #: Application/Backend/Feature/Main/Capability.php:341
54
  msgid "Posts & Pages"
55
  msgstr ""
56
 
57
+ #: Application/Backend/Feature/Main/Capability.php:300
58
+ #: Application/Backend/Feature/Main/Capability.php:343
59
  msgid "Backend"
60
  msgstr ""
61
 
62
+ #: Application/Backend/Feature/Main/Capability.php:301
63
+ #: Application/Backend/Feature/Main/Capability.php:345
64
  msgid "AAM Interface"
65
  msgstr ""
66
 
67
+ #: Application/Backend/Feature/Main/Capability.php:302
68
+ #: Application/Backend/Feature/Main/Capability.php:347
69
  msgid "Miscellaneous"
70
  msgstr ""
71
 
72
+ #: Application/Backend/Feature/Main/Capability.php:379
73
  msgid "Capabilities"
74
  msgstr ""
75
 
76
  #: Application/Backend/Feature/Main/GetStarted.php:36
 
77
  msgid "Get Started"
78
  msgstr ""
79
 
85
  msgid "Logout Redirect"
86
  msgstr ""
87
 
88
+ #: Application/Backend/Feature/Main/Menu.php:207
89
  msgid "Backend Menu"
90
  msgstr ""
91
 
93
  msgid "Metaboxes & Widgets"
94
  msgstr ""
95
 
96
+ #: Application/Backend/Feature/Main/Policy.php:59
97
+ msgid "Failed to fetch policy. Please try again."
98
+ msgstr ""
99
+
100
+ #: Application/Backend/Feature/Main/Policy.php:171
101
+ msgid "(no title)"
102
+ msgstr ""
103
+
104
+ #: Application/Backend/Feature/Main/Policy.php:210
105
+ #: Application/Shared/Manager.php:127
106
+ msgid "Access Policies"
107
+ msgstr ""
108
+
109
+ #: Application/Backend/Feature/Main/Post.php:487
110
  #: Application/Backend/phtml/main/404redirect.phtml:36
111
  #: Application/Backend/phtml/main/login-redirect.phtml:43
112
  #: Application/Backend/phtml/main/logout-redirect.phtml:43
113
  #: Application/Backend/phtml/main/redirect.phtml:67
114
  #: Application/Backend/phtml/main/redirect.phtml:119
115
+ #: Application/Backend/phtml/main/uri.phtml:74
116
  #: Application/Backend/phtml/partial/post-advanced-settings.phtml:89
117
  msgid "Existing Page"
118
  msgstr ""
119
 
120
+ #: Application/Backend/Feature/Main/Post.php:489
121
  msgid "Valid URL"
122
  msgstr ""
123
 
124
+ #: Application/Backend/Feature/Main/Post.php:491
125
  msgid "Custom Callback"
126
  msgstr ""
127
 
128
+ #: Application/Backend/Feature/Main/Post.php:645
129
  msgid "Posts & Terms"
130
  msgstr ""
131
 
141
  msgid "Admin Toolbar"
142
  msgstr ""
143
 
144
+ #: Application/Backend/Feature/Main/Uri.php:130
145
+ msgid "URI Access"
146
+ msgstr ""
147
+
148
  #: Application/Backend/Feature/Settings/ConfigPress.php:53
149
  msgid "ConfigPress"
150
  msgstr ""
298
  msgstr ""
299
 
300
  #: Application/Backend/Feature/Settings/Core.php:87
301
+ msgid "Multiple Roles Support"
302
  msgstr ""
303
 
304
  #: Application/Backend/Feature/Settings/Core.php:88
305
+ #, php-format
306
+ msgid ""
307
+ "Enable support for multiple roles per use. The final access settings or "
308
+ "general settings will be computed based on the mergin preferences. For more "
309
+ "information check %sWordPress access control for users with multiple roles%s "
310
+ "article."
311
+ msgstr ""
312
+
313
+ #: Application/Backend/Feature/Settings/Core.php:92
314
+ msgid "Support AAM Extensions"
315
+ msgstr ""
316
+
317
+ #: Application/Backend/Feature/Settings/Core.php:93
318
  msgid ""
319
  "AAM comes with the limited list of premium and free extensions that "
320
  "significantly enhance AAM behavior. You can disable support for AAM "
323
  "able to install new extensions."
324
  msgstr ""
325
 
326
+ #: Application/Backend/Feature/Settings/Core.php:97
327
  msgid "AAM Cron Job"
328
  msgstr ""
329
 
330
+ #: Application/Backend/Feature/Settings/Core.php:98
331
  msgid ""
332
  "AAM cron job executes periodically (typically once a day) to check for "
333
  "available updates for already installed extensions. Cron job is not executed "
334
  "if there are no installed extensions."
335
  msgstr ""
336
 
337
+ #: Application/Backend/Feature/Settings/Core.php:117
338
  msgid "Core Settings"
339
  msgstr ""
340
 
382
  msgid "Security Settings"
383
  msgstr ""
384
 
385
+ #: Application/Backend/Feature/Subject/User.php:64
 
 
 
 
386
  msgid "Operation is not permitted"
387
  msgstr ""
388
 
389
+ #: Application/Backend/Feature/Subject/User.php:79
390
  msgid "You cannot set expiration to yourself"
391
  msgstr ""
392
 
393
+ #: Application/Backend/Manager.php:558
394
  msgid "Access Manager"
395
  msgstr ""
396
 
397
+ #: Application/Backend/Manager.php:577
398
+ msgid "Policy Document"
399
+ msgstr ""
400
+
401
+ #: Application/Backend/Manager.php:585
402
+ msgid "Policy Principals"
403
+ msgstr ""
404
+
405
+ #: Application/Backend/Manager.php:727 Application/Backend/Manager.php:745
406
+ #: Application/Backend/Manager.php:769
407
  msgid "Access"
408
  msgstr ""
409
 
410
+ #: Application/Backend/Manager.php:977 Application/Backend/Manager.php:1000
411
+ #: Application/Core/API.php:331 Application/Core/Gateway.php:201
412
  msgid "Access Denied"
413
  msgstr ""
414
 
415
+ #: Application/Backend/View/Localization.php:26 media/js/aam-5.8.js:2048
416
  msgid "Search Capability"
417
  msgstr ""
418
 
419
+ #: Application/Backend/View/Localization.php:27 media/js/aam-5.8.js:2049
420
  msgid "_TOTAL_ capability(s)"
421
  msgstr ""
422
 
423
+ #: Application/Backend/View/Localization.php:28 media/js/aam-5.8.js:504
424
+ #: media/js/aam-5.8.js:565 media/js/aam-5.8.js:1135 media/js/aam-5.8.js:2175
425
+ #: media/js/aam-5.8.js:2219 media/js/aam-5.8.js:2806 media/js/aam-5.8.js:3384
426
+ #: media/js/aam-5.8.js:3842
427
  msgid "Saving..."
428
  msgstr ""
429
 
430
+ #: Application/Backend/View/Localization.php:29 media/js/aam-5.8.js:2183
431
  msgid "Failed to add new capability"
432
  msgstr ""
433
 
434
+ #: Application/Backend/View/Localization.php:30 media/js/aam-5.8.js:46
435
+ #: media/js/aam-5.8.js:523 media/js/aam-5.8.js:577 media/js/aam-5.8.js:614
436
+ #: media/js/aam-5.8.js:741 media/js/aam-5.8.js:779 media/js/aam-5.8.js:1145
437
+ #: media/js/aam-5.8.js:1178 media/js/aam-5.8.js:1396 media/js/aam-5.8.js:1853
438
+ #: media/js/aam-5.8.js:1917 media/js/aam-5.8.js:2188 media/js/aam-5.8.js:2231
439
+ #: media/js/aam-5.8.js:2270 media/js/aam-5.8.js:2356 media/js/aam-5.8.js:2525
440
+ #: media/js/aam-5.8.js:3135 media/js/aam-5.8.js:3226 media/js/aam-5.8.js:3397
441
+ #: media/js/aam-5.8.js:3433 media/js/aam-5.8.js:3594 media/js/aam-5.8.js:3636
442
+ #: media/js/aam-5.8.js:3786 media/js/aam-5.8.js:4013 media/js/aam-5.8.js:4452
443
+ #: media/js/aam-5.8.js:4487
444
  msgid "Application error"
445
  msgstr ""
446
 
447
+ #: Application/Backend/View/Localization.php:31 media/js/aam-5.8.js:2191
448
  msgid "Add Capability"
449
  msgstr ""
450
 
451
+ #: Application/Backend/View/Localization.php:32 media/js/aam-5.8.js:1639
452
+ #: media/js/aam-5.8.js:1766 Application/Backend/phtml/main/menu.phtml:84
453
+ #: Application/Backend/phtml/main/toolbar.phtml:69
454
  msgid "Show Menu"
455
  msgstr ""
456
 
457
+ #: Application/Backend/View/Localization.php:33 media/js/aam-5.8.js:1649
458
+ #: media/js/aam-5.8.js:1776 Application/Backend/phtml/main/menu.phtml:88
459
+ #: Application/Backend/phtml/main/toolbar.phtml:73
460
  msgid "Restrict Menu"
461
  msgstr ""
462
 
463
+ #: Application/Backend/View/Localization.php:34 media/js/aam-5.8.js:1911
464
  msgid "Failed to retrieve mataboxes"
465
  msgstr ""
466
 
467
+ #: Application/Backend/View/Localization.php:35 media/js/aam-5.8.js:2569
468
  msgid "Search"
469
  msgstr ""
470
 
471
+ #: Application/Backend/View/Localization.php:36 media/js/aam-5.8.js:2570
472
  msgid "_TOTAL_ object(s)"
473
  msgstr ""
474
 
476
  msgid "Failed"
477
  msgstr ""
478
 
479
+ #: Application/Backend/View/Localization.php:38 media/js/aam-5.8.js:156
480
+ #: media/js/aam-5.8.js:681
481
  msgid "Loading..."
482
  msgstr ""
483
 
484
+ #: Application/Backend/View/Localization.php:39 media/js/aam-5.8.js:161
485
  msgid "No Role"
486
  msgstr ""
487
 
488
+ #: Application/Backend/View/Localization.php:40 media/js/aam-5.8.js:224
489
  msgid "Search Role"
490
  msgstr ""
491
 
492
+ #: Application/Backend/View/Localization.php:41 media/js/aam-5.8.js:225
493
  msgid "_TOTAL_ role(s)"
494
  msgstr ""
495
 
496
+ #: Application/Backend/View/Localization.php:42 media/js/aam-5.8.js:1489
497
+ #: media/js/aam-5.8.js:3475 Application/Backend/phtml/index.phtml:270
498
  #: Application/Backend/phtml/main/capability.phtml:26
499
  #: Application/Backend/phtml/main/capability.phtml:64
500
  msgid "Create"
501
  msgstr ""
502
 
503
+ #: Application/Backend/View/Localization.php:43 media/js/aam-5.8.js:264
504
+ #: Application/Backend/phtml/index.phtml:223
505
+ #: Application/Backend/phtml/index.phtml:440
506
  msgid "Users"
507
  msgstr ""
508
 
509
+ #: Application/Backend/View/Localization.php:44
510
  msgid "Failed to add new role"
511
  msgstr ""
512
 
513
+ #: Application/Backend/View/Localization.php:45 media/js/aam-5.8.js:527
514
  msgid "Add Role"
515
  msgstr ""
516
 
517
+ #: Application/Backend/View/Localization.php:46 media/js/aam-5.8.js:572
518
  msgid "Failed to update role"
519
  msgstr ""
520
 
521
  #: Application/Backend/View/Localization.php:47
522
+ #: Application/Backend/View/PostOptionList.php:157 media/js/aam-5.8.js:581
523
+ #: Application/Backend/phtml/extensions.phtml:55
524
+ #: Application/Backend/phtml/extensions.phtml:82
525
+ #: Application/Backend/phtml/index.phtml:296
526
  #: Application/Backend/phtml/main/capability.phtml:86
527
  #: Application/Backend/phtml/partial/post-advanced-settings.phtml:37
528
  #: Application/Backend/phtml/partial/post-advanced-settings.phtml:58
531
  msgid "Update"
532
  msgstr ""
533
 
534
+ #: Application/Backend/View/Localization.php:48 media/js/aam-5.8.js:604
535
+ #: media/js/aam-5.8.js:2258 media/js/aam-5.8.js:3423
536
  msgid "Deleting..."
537
  msgstr ""
538
 
539
+ #: Application/Backend/View/Localization.php:49 media/js/aam-5.8.js:610
540
  msgid "Failed to delete role"
541
  msgstr ""
542
 
543
  #: Application/Backend/View/Localization.php:50
544
+ #: Application/Backend/View/Localization.php:62 media/js/aam-5.8.js:385
545
+ #: media/js/aam-5.8.js:618 Application/Backend/phtml/index.phtml:308
546
  msgid "Delete Role"
547
  msgstr ""
548
 
549
+ #: Application/Backend/View/Localization.php:51 media/js/aam-5.8.js:737
550
  msgid "Failed to block user"
551
  msgstr ""
552
 
553
+ #: Application/Backend/View/Localization.php:52 media/js/aam-5.8.js:816
554
  msgid "Search User"
555
  msgstr ""
556
 
557
+ #: Application/Backend/View/Localization.php:53 media/js/aam-5.8.js:817
558
  msgid "_TOTAL_ user(s)"
559
  msgstr ""
560
 
561
+ #: Application/Backend/View/Localization.php:54 media/js/aam-5.8.js:880
562
+ #: Application/Backend/phtml/index.phtml:241
563
+ #: Application/Backend/phtml/metabox/metabox-content.phtml:48
564
  msgid "Role"
565
  msgstr ""
566
 
567
  #: Application/Backend/View/Localization.php:55
568
+ #: Application/Core/Subject/Visitor.php:79 media/js/aam-5.8.js:1221
569
  msgid "Anonymous"
570
  msgstr ""
571
 
577
  msgid "Current role"
578
  msgstr ""
579
 
580
+ #: Application/Backend/View/Localization.php:58 media/js/aam-5.8.js:2701
581
  msgid "Manage Access"
582
  msgstr ""
583
 
584
  #: Application/Backend/View/Localization.php:59
585
+ #: Application/Backend/View/PostOptionList.php:95 media/js/aam-5.8.js:2713
586
  msgid "Edit"
587
  msgstr ""
588
 
589
+ #: Application/Backend/View/Localization.php:60 media/js/aam-5.8.js:310
590
  msgid "Manage Role"
591
  msgstr ""
592
 
593
+ #: Application/Backend/View/Localization.php:61 media/js/aam-5.8.js:332
594
  msgid "Edit Role"
595
  msgstr ""
596
 
597
+ #: Application/Backend/View/Localization.php:63 media/js/aam-5.8.js:919
598
+ #: Application/Backend/phtml/index.phtml:343
599
  msgid "Manage User"
600
  msgstr ""
601
 
602
+ #: Application/Backend/View/Localization.php:64 media/js/aam-5.8.js:960
603
  msgid "Edit User"
604
  msgstr ""
605
 
606
+ #: Application/Backend/View/Localization.php:65 media/js/aam-5.8.js:732
607
+ #: media/js/aam-5.8.js:733 media/js/aam-5.8.js:981
608
  msgid "Lock User"
609
  msgstr ""
610
 
611
+ #: Application/Backend/View/Localization.php:66 media/js/aam-5.8.js:726
612
+ #: media/js/aam-5.8.js:727 media/js/aam-5.8.js:994
613
  msgid "Unlock User"
614
  msgstr ""
615
 
778
  msgstr ""
779
 
780
  #: Application/Backend/View/PostOptionList.php:100
781
+ #: Application/Backend/View/PostOptionList.php:162 media/js/aam-5.8.js:3437
782
+ #: Application/Backend/phtml/index.phtml:314
783
  #: Application/Backend/phtml/main/capability.phtml:104
784
+ #: Application/Backend/phtml/main/uri.phtml:119
785
  msgid "Delete"
786
  msgstr ""
787
 
861
  msgid "Howdy, %username%"
862
  msgstr ""
863
 
864
+ #: Application/Core/Importer.php:113
865
+ msgid "Import AAM Settings"
866
+ msgstr ""
867
+
868
+ #: Application/Core/Importer.php:126
869
+ msgid ""
870
+ "Howdy! Upload your AAM JSON file and we&#8217;ll import the access settings "
871
+ "into this site."
872
+ msgstr ""
873
+
874
+ #: Application/Core/Importer.php:127
875
+ msgid ""
876
+ "Choose a JSON (.json) file to upload, then click Upload file and import."
877
+ msgstr ""
878
+
879
+ #: Application/Core/Importer.php:141 Application/Core/Importer.php:145
880
+ #: Application/Core/Importer.php:179
881
+ msgid "Sorry, there has been an error."
882
+ msgstr ""
883
+
884
+ #: Application/Core/Importer.php:146
885
+ #, php-format
886
+ msgid ""
887
+ "The export file could not be found at <code>%s</code>. It is likely that "
888
+ "this was caused by a permissions problem."
889
+ msgstr ""
890
+
891
+ #: Application/Core/Importer.php:180
892
+ msgid "The file does not exist, please try again."
893
+ msgstr ""
894
+
895
+ #: Application/Core/Importer.php:188
896
+ msgid "Sorry, there has been an error. File content is invalid"
897
+ msgstr ""
898
+
899
+ #: Application/Core/Importer.php:202
900
+ msgid "All done."
901
+ msgstr ""
902
+
903
+ #: Application/Core/Importer.php:202
904
+ msgid "Have fun!"
905
+ msgstr ""
906
+
907
+ #: Application/Core/Importer.php:227
908
  msgid "Version of exported settings do not match current AAM version"
909
  msgstr ""
910
 
911
+ #: Application/Core/JwtAuth.php:57
912
  msgid "Valid username."
913
  msgstr ""
914
 
915
+ #: Application/Core/JwtAuth.php:61
916
  msgid "Valid password."
917
  msgstr ""
918
 
919
+ #: Application/Core/JwtAuth.php:73
920
+ msgid "JWT token."
921
  msgstr ""
922
 
923
+ #: Application/Core/JwtAuth.php:221
924
+ msgid "JWT Authentication is enabled but secret key is not defined"
 
925
  msgstr ""
926
 
927
+ #: Application/Core/Login.php:179
928
  msgid "Access denied. Please login to get access."
929
  msgstr ""
930
 
931
+ #: Application/Core/Policy/Validator.php:94
932
+ msgid "The policy is not valid JSON object"
933
+ msgstr ""
934
+
935
+ #: Application/Core/Policy/Validator.php:111
936
+ msgid "The policy document is empty"
937
+ msgstr ""
938
+
939
+ #: Application/Core/Subject/Default.php:78 media/js/aam-5.8.js:1294
940
  msgid "All Users, Roles and Visitor"
941
  msgstr ""
942
 
943
+ #: Application/Extension/Repository.php:149
944
  #, php-format
945
+ msgid "[%s] was not loaded. Update AAM plugin to the latest version."
 
 
946
  msgstr ""
947
 
948
+ #: Application/Extension/Repository.php:159
949
+ #, php-format
950
+ msgid "The [%s] does not appear to be a valid AAM extension. %sRead more.%s"
951
+ msgstr ""
952
+
953
+ #: Application/Extension/Repository.php:385
954
  #, php-format
955
  msgid "Failed to create %s"
956
  msgstr ""
957
 
958
+ #: Application/Extension/Repository.php:389
959
  #, php-format
960
  msgid "Directory %s is not writable"
961
  msgstr ""
962
 
963
+ #: Application/Shared/Manager.php:125
964
+ msgid "Access Policy"
965
+ msgstr ""
966
+
967
+ #: Application/Shared/Manager.php:128 media/js/aam-5.8.js:1546
968
+ msgid "Edit Policy"
969
+ msgstr ""
970
+
971
+ #: Application/Shared/Manager.php:129
972
+ msgid "Add New Policy"
973
+ msgstr ""
974
+
975
+ #: Application/Shared/Manager.php:130
976
+ msgid "New Policy"
977
+ msgstr ""
978
+
979
+ #: Application/Shared/Manager.php:132
980
+ msgid "Access and security policy"
981
+ msgstr ""
982
+
983
+ #: Application/Shared/Manager.php:418
984
  msgid "RESTful API is disabled"
985
  msgstr ""
986
 
987
+ #: Application/Shared/Manager.php:609
988
  msgid "[No teaser message provided]"
989
  msgstr ""
990
 
992
  msgid "No valid strategy found for the given context"
993
  msgstr ""
994
 
995
+ #: Application/Shortcode/Strategy/LoginRedirect.php:64
996
+ msgid "Login to continue"
997
+ msgstr ""
998
+
999
+ #: aam.php:216
1000
  msgid "PHP 5.3.0 or higher is required."
1001
  msgstr ""
1002
 
1003
+ #: aam.php:218
1004
  msgid "WP 4.0 or higher is required."
1005
  msgstr ""
1006
 
1007
+ #: media/js/aam-5.8.js:96 media/js/aam-5.8.js:1266 media/js/aam-5.8.js:1338
1008
+ msgid "Failed to apply policy changes"
1009
+ msgstr ""
1010
+
1011
+ #: media/js/aam-5.8.js:107 media/js/aam-5.8.js:1602 media/js/aam-5.8.js:1729
1012
+ #: media/js/aam-5.8.js:3850 media/js/aam-5.8.js:3895 media/js/aam-5.8.js:3945
1013
+ #: media/js/aam-5.8.js:3979
1014
+ msgid "Application Error"
1015
+ msgstr ""
1016
+
1017
+ #: media/js/aam-5.8.js:241
1018
  msgid "Create New Role"
1019
  msgstr ""
1020
 
1021
+ #: media/js/aam-5.8.js:356
1022
  msgid "Clone Role"
1023
  msgstr ""
1024
 
1025
+ #: media/js/aam-5.8.js:686 Application/Backend/phtml/index.phtml:372
1026
  #: Application/Backend/phtml/partial/role-inheritance.phtml:5
1027
  msgid "Select Role"
1028
  msgstr ""
1029
 
1030
+ #: media/js/aam-5.8.js:764
1031
+ msgid "Generating token..."
1032
+ msgstr ""
1033
+
1034
+ #: media/js/aam-5.8.js:774
1035
+ msgid "Failed to generate JWT token"
1036
+ msgstr ""
1037
+
1038
+ #: media/js/aam-5.8.js:832
1039
  msgid "Create New User"
1040
  msgstr ""
1041
 
1042
+ #: media/js/aam-5.8.js:841
1043
  msgid "Loading roles..."
1044
  msgstr ""
1045
 
1046
+ #: media/js/aam-5.8.js:858
1047
  msgid "Filter By Role"
1048
  msgstr ""
1049
 
1050
+ #: media/js/aam-5.8.js:1007
 
 
 
 
1051
  msgid "Switch To User"
1052
  msgstr ""
1053
 
1054
+ #: media/js/aam-5.8.js:1149 media/js/aam-5.8.js:3402
1055
+ #: Application/Backend/phtml/index.phtml:403
1056
+ #: Application/Backend/phtml/main/uri.phtml:97
1057
  #: Application/Backend/phtml/partial/post-advanced-settings.phtml:16
1058
  msgid "Save"
1059
  msgstr ""
1060
 
1061
+ #: media/js/aam-5.8.js:1168
1062
  msgid "Reseting..."
1063
  msgstr ""
1064
 
1065
+ #: media/js/aam-5.8.js:1182 Application/Backend/phtml/index.phtml:402
1066
  msgid "Reset"
1067
  msgstr ""
1068
 
1069
+ #: media/js/aam-5.8.js:1247 media/js/aam-5.8.js:1319
1070
+ msgid "Processing..."
 
 
1071
  msgstr ""
1072
 
1073
+ #: media/js/aam-5.8.js:1258 media/js/aam-5.8.js:1271
1074
+ #: Application/Backend/phtml/metabox/metabox-content.phtml:86
1075
+ msgid "Detach Policy From Visitors"
1076
+ msgstr ""
1077
+
1078
+ #: media/js/aam-5.8.js:1260 media/js/aam-5.8.js:1269
1079
+ #: Application/Backend/phtml/metabox/metabox-content.phtml:88
1080
+ msgid "Attach Policy To Visitors"
1081
+ msgstr ""
1082
+
1083
+ #: media/js/aam-5.8.js:1330 media/js/aam-5.8.js:1343
1084
+ #: Application/Backend/phtml/metabox/metabox-content.phtml:111
1085
+ msgid "Detach Policy From Everybody"
1086
+ msgstr ""
1087
+
1088
+ #: media/js/aam-5.8.js:1332 media/js/aam-5.8.js:1341
1089
+ #: Application/Backend/phtml/metabox/metabox-content.phtml:113
1090
+ msgid "Attach Policy To Everybody"
1091
+ msgstr ""
1092
+
1093
+ #: media/js/aam-5.8.js:1443
1094
+ msgid "Downloading"
1095
+ msgstr ""
1096
+
1097
+ #: media/js/aam-5.8.js:1447 Application/Backend/phtml/extensions.phtml:86
1098
+ #: Application/Backend/phtml/extensions.phtml:121
1099
+ msgid "Download"
1100
+ msgstr ""
1101
+
1102
+ #: media/js/aam-5.8.js:1478
1103
+ msgid "Search Policy"
1104
+ msgstr ""
1105
+
1106
+ #: media/js/aam-5.8.js:1479
1107
+ msgid "_TOTAL_ Policies"
1108
+ msgstr ""
1109
+
1110
+ #: media/js/aam-5.8.js:1521
1111
+ msgid "Apply Policy"
1112
+ msgstr ""
1113
+
1114
+ #: media/js/aam-5.8.js:1535
1115
+ msgid "Revoke Policy"
1116
+ msgstr ""
1117
+
1118
+ #: media/js/aam-5.8.js:1673 Application/Backend/phtml/main/menu.phtml:70
1119
+ #: Application/Backend/phtml/main/toolbar.phtml:59
1120
  msgid "Uncheck to allow"
1121
  msgstr ""
1122
 
1123
+ #: media/js/aam-5.8.js:1675 Application/Backend/phtml/main/menu.phtml:70
1124
+ #: Application/Backend/phtml/main/toolbar.phtml:59
1125
  msgid "Check to restrict"
1126
  msgstr ""
1127
 
1128
+ #: media/js/aam-5.8.js:1805 media/js/aam-5.8.js:1961
1129
+ #: Application/Backend/phtml/main/metabox.phtml:68
1130
  msgid "Uncheck to show"
1131
  msgstr ""
1132
 
1133
+ #: media/js/aam-5.8.js:1807 media/js/aam-5.8.js:1963
1134
+ #: Application/Backend/phtml/main/metabox.phtml:68
1135
  msgid "Check to hide"
1136
  msgstr ""
1137
 
1138
+ #: media/js/aam-5.8.js:1933
1139
  msgid "Processing"
1140
  msgstr ""
1141
 
1142
+ #: media/js/aam-5.8.js:1936 Application/Backend/phtml/main/metabox.phtml:104
1143
  msgid "Initialize"
1144
  msgstr ""
1145
 
1146
+ #: media/js/aam-5.8.js:2010
1147
  msgid "WordPress core does not allow to grant this capability"
1148
  msgstr ""
1149
 
1150
+ #: media/js/aam-5.8.js:2051 media/js/aam-5.8.js:3280
1151
  msgid "Nothing to show"
1152
  msgstr ""
1153
 
1154
+ #: media/js/aam-5.8.js:2235 Application/Backend/phtml/main/capability.phtml:76
 
 
 
 
1155
  msgid "Update Capability"
1156
  msgstr ""
1157
 
1158
+ #: media/js/aam-5.8.js:2274 Application/Backend/phtml/main/capability.phtml:98
 
 
 
 
1159
  msgid "Delete Capability"
1160
  msgstr ""
1161
 
1162
+ #: media/js/aam-5.8.js:2604
1163
  msgid "Settings Customized"
1164
  msgstr ""
1165
 
1166
+ #: media/js/aam-5.8.js:2638 media/js/aam-5.8.js:2641 media/js/aam-5.8.js:2654
1167
+ #: media/js/aam-5.8.js:2657
1168
  msgid "Parent:"
1169
  msgstr ""
1170
 
1171
+ #: media/js/aam-5.8.js:2644 media/js/aam-5.8.js:2660
1172
+ #: Application/Backend/phtml/main/menu.phtml:67
1173
+ #: Application/Backend/phtml/main/metabox.phtml:65
1174
+ #: Application/Backend/phtml/main/toolbar.phtml:56
1175
  msgid "ID:"
1176
  msgstr ""
1177
 
1178
+ #: media/js/aam-5.8.js:2687
1179
  msgid "Drill-Down"
1180
  msgstr ""
1181
 
1182
+ #: media/js/aam-5.8.js:2766 media/js/aam-5.8.js:4480
1183
  msgid "Resetting..."
1184
  msgstr ""
1185
 
1186
+ #: media/js/aam-5.8.js:3276
1187
  msgid "Search Route"
1188
  msgstr ""
1189
 
1190
+ #: media/js/aam-5.8.js:3277
1191
  msgid "_TOTAL_ route(s)"
1192
  msgstr ""
1193
 
1194
+ #: media/js/aam-5.8.js:3279
1195
  msgid "No API enpoints found. You might have APIs disabled."
1196
  msgstr ""
1197
 
1198
+ #: media/js/aam-5.8.js:3391
1199
+ msgid "Failed to save URI rule"
1200
+ msgstr ""
1201
+
1202
+ #: media/js/aam-5.8.js:3429
1203
+ msgid "Failed to delete URI rule"
1204
+ msgstr ""
1205
+
1206
+ #: media/js/aam-5.8.js:3464
1207
+ msgid "Search URI"
1208
+ msgstr ""
1209
+
1210
+ #: media/js/aam-5.8.js:3465
1211
+ msgid "_TOTAL_ URI(s)"
1212
+ msgstr ""
1213
+
1214
+ #: media/js/aam-5.8.js:3505
1215
+ msgid "Edit Rule"
1216
+ msgstr ""
1217
+
1218
+ #: media/js/aam-5.8.js:3517
1219
+ msgid "Delete Rule"
1220
+ msgstr ""
1221
+
1222
+ #: media/js/aam-5.8.js:3626
1223
  msgid "Extension status was updated successfully"
1224
  msgstr ""
1225
 
1226
+ #: media/js/aam-5.8.js:3779
1227
  msgid "The issue has been resolved"
1228
  msgstr ""
1229
 
1230
+ #: media/js/aam-5.8.js:3853 Application/Backend/phtml/main/get-started.phtml:13
1231
+ msgid "OK, got it"
1232
+ msgstr ""
1233
+
1234
+ #: media/js/aam-5.8.js:3932 media/js/aam-5.8.js:3966
1235
  msgid "Wait..."
1236
  msgstr ""
1237
 
1238
+ #: media/js/aam-5.8.js:3938
1239
  msgid "All settings has been cleared successfully"
1240
  msgstr ""
1241
 
1242
+ #: media/js/aam-5.8.js:3949 media/js/aam-5.8.js:3983
1243
+ #: Application/Backend/phtml/index.phtml:101
1244
  msgid "Clear"
1245
  msgstr ""
1246
 
1247
+ #: media/js/aam-5.8.js:3972
1248
  msgid "The cache has been cleared successfully"
1249
  msgstr ""
1250
 
1251
+ #: media/js/vendor.js:600
1252
  msgid ": "
1253
  msgstr ""
1254
 
1282
  msgstr ""
1283
 
1284
  #: Application/Backend/phtml/extensions.phtml:29
1285
+ #: Application/Backend/phtml/extensions.phtml:73
1286
  msgid "Free"
1287
  msgstr ""
1288
 
1290
  msgid "Check for Updates"
1291
  msgstr ""
1292
 
1293
+ #: Application/Backend/phtml/extensions.phtml:50
1294
+ msgid "Installed"
1295
+ msgstr ""
1296
+
1297
+ #: Application/Backend/phtml/extensions.phtml:52
1298
+ #: Application/Backend/phtml/extensions.phtml:80
1299
  msgid "Deactivate"
1300
  msgstr ""
1301
 
1302
+ #: Application/Backend/phtml/extensions.phtml:52
1303
+ #: Application/Backend/phtml/extensions.phtml:80
1304
  msgid "extension is active"
1305
  msgstr ""
1306
 
1307
+ #: Application/Backend/phtml/extensions.phtml:55
1308
+ msgid "license is missing"
1309
+ msgstr ""
1310
+
1311
+ #: Application/Backend/phtml/extensions.phtml:57
1312
+ #: Application/Backend/phtml/extensions.phtml:84
1313
  msgid "Activate"
1314
  msgstr ""
1315
 
1316
+ #: Application/Backend/phtml/extensions.phtml:57
1317
+ #: Application/Backend/phtml/extensions.phtml:84
1318
  msgid "extension is inactive"
1319
  msgstr ""
1320
 
1321
+ #: Application/Backend/phtml/extensions.phtml:59
1322
+ #: Application/Backend/phtml/index.phtml:188
1323
  msgid "Read More"
1324
  msgstr ""
1325
 
1326
+ #: Application/Backend/phtml/extensions.phtml:101
1327
+ #: Application/Backend/phtml/extensions.phtml:132
1328
+ #: Application/Backend/phtml/extensions.phtml:143
1329
+ #: Application/Backend/phtml/index.phtml:94
1330
+ #: Application/Backend/phtml/index.phtml:254
1331
+ #: Application/Backend/phtml/index.phtml:271
1332
+ #: Application/Backend/phtml/index.phtml:281
1333
+ #: Application/Backend/phtml/index.phtml:297
1334
+ #: Application/Backend/phtml/index.phtml:307
1335
+ #: Application/Backend/phtml/index.phtml:315
1336
+ #: Application/Backend/phtml/index.phtml:342
1337
+ #: Application/Backend/phtml/index.phtml:404
 
 
 
 
1338
  #: Application/Backend/phtml/main/capability.phtml:54
1339
  #: Application/Backend/phtml/main/capability.phtml:65
1340
  #: Application/Backend/phtml/main/capability.phtml:75
1341
  #: Application/Backend/phtml/main/capability.phtml:87
1342
  #: Application/Backend/phtml/main/capability.phtml:97
1343
  #: Application/Backend/phtml/main/capability.phtml:105
1344
+ #: Application/Backend/phtml/main/menu.phtml:113
1345
+ #: Application/Backend/phtml/main/metabox.phtml:91
1346
+ #: Application/Backend/phtml/main/metabox.phtml:105
1347
+ #: Application/Backend/phtml/main/uri.phtml:26
1348
+ #: Application/Backend/phtml/main/uri.phtml:98
1349
+ #: Application/Backend/phtml/main/uri.phtml:108
1350
+ #: Application/Backend/phtml/main/uri.phtml:120
1351
  #: Application/Backend/phtml/partial/post-advanced-settings.phtml:6
1352
  #: Application/Backend/phtml/partial/post-advanced-settings.phtml:17
1353
  #: Application/Backend/phtml/partial/post-advanced-settings.phtml:27
1360
  #: Application/Backend/phtml/partial/post-advanced-settings.phtml:136
1361
  #: Application/Backend/phtml/partial/post-advanced-settings.phtml:146
1362
  #: Application/Backend/phtml/partial/post-advanced-settings.phtml:158
 
1363
  msgid "Close"
1364
  msgstr ""
1365
 
1366
+ #: Application/Backend/phtml/extensions.phtml:102
1367
  msgid "Notification"
1368
  msgstr ""
1369
 
1370
+ #: Application/Backend/phtml/extensions.phtml:106
1371
  msgid ""
1372
  "Extension requires manual installation. Please follow few simple steps below."
1373
  msgstr ""
1374
 
1375
+ #: Application/Backend/phtml/extensions.phtml:110
1376
  msgid "Click [Download] button below and save the zip archive on your computer"
1377
  msgstr ""
1378
 
1379
+ #: Application/Backend/phtml/extensions.phtml:111
1380
  msgid "Connect to your website via FTP and navigate to [wp-content] folder"
1381
  msgstr ""
1382
 
1383
+ #: Application/Backend/phtml/extensions.phtml:112
1384
  msgid ""
1385
  "Create [aam/extension] folder inside [wp-content] and make sure it is "
1386
  "writable by your server"
1387
  msgstr ""
1388
 
1389
+ #: Application/Backend/phtml/extensions.phtml:113
1390
  msgid ""
1391
  "Unzip downloaded archive and upload the folder inside the [wp-content/aam/"
1392
  "extension] folder"
1393
  msgstr ""
1394
 
1395
+ #: Application/Backend/phtml/extensions.phtml:117
1396
  msgid ""
1397
  "[PLEASE NOTE!] Your browser may not support the latest HTML5 attribures and "
1398
  "if downloaded file is not .ZIP archive, simply rename the file by adding ."
1399
  "zip extension."
1400
  msgstr ""
1401
 
1402
+ #: Application/Backend/phtml/extensions.phtml:122
1403
+ #: Application/Backend/phtml/index.phtml:102
1404
  msgid "Cancel"
1405
  msgstr ""
1406
 
1407
+ #: Application/Backend/phtml/extensions.phtml:133
1408
  msgid "Install Extension"
1409
  msgstr ""
1410
 
1411
+ #: Application/Backend/phtml/extensions.phtml:137
1412
  msgid ""
1413
  "Insert license key that you recieved after the payment (find the email "
1414
  "example below). It might take up to 2 hours to process the payment. Please "
1432
  msgid "Notifications"
1433
  msgstr ""
1434
 
1435
+ #: Application/Backend/phtml/index.phtml:81
1436
+ msgid "Clear AAM Cache"
1437
  msgstr ""
1438
 
1439
  #: Application/Backend/phtml/index.phtml:84
1440
+ msgid "Reset AAM Settings"
1441
+ msgstr ""
1442
+
1443
+ #: Application/Backend/phtml/index.phtml:95
1444
+ msgid "Clear all settings"
1445
+ msgstr ""
1446
+
1447
+ #: Application/Backend/phtml/index.phtml:98
1448
+ msgid "All AAM settings will be removed."
1449
+ msgstr ""
1450
+
1451
+ #: Application/Backend/phtml/index.phtml:114
1452
+ msgid "Warning"
1453
+ msgstr ""
1454
+
1455
+ #: Application/Backend/phtml/index.phtml:119
1456
  #, php-format
1457
  msgid ""
1458
  "All AAM extension should be located in [%s] directory however it either does "
1459
  "not exist or is not writable."
1460
  msgstr ""
1461
 
1462
+ #: Application/Backend/phtml/index.phtml:121
1463
  msgid "Click To Fix The Issue"
1464
  msgstr ""
1465
 
1466
+ #: Application/Backend/phtml/index.phtml:133
1467
  #, php-format
1468
  msgid ""
1469
  "Failed to create a [%s] directory for AAM extension. To create it manually, "
1472
  "file is located)."
1473
  msgstr ""
1474
 
1475
+ #: Application/Backend/phtml/index.phtml:138
1476
  msgid "Ok"
1477
  msgstr ""
1478
 
1479
+ #: Application/Backend/phtml/index.phtml:150
1480
  msgid "Premium Licenses"
1481
  msgstr ""
1482
 
1483
+ #: Application/Backend/phtml/index.phtml:167
1484
  msgid "Manage License"
1485
  msgstr ""
1486
 
1487
+ #: Application/Backend/phtml/index.phtml:169
1488
  msgid "Upgrade License"
1489
  msgstr ""
1490
 
1491
+ #: Application/Backend/phtml/index.phtml:187
1492
  msgid ""
1493
  "The [Development Package] allows you to get all premium extensions for "
1494
  "[unlimited number of websites]."
1495
  msgstr ""
1496
 
1497
+ #: Application/Backend/phtml/index.phtml:198
1498
  msgid "AAM Multisite"
1499
  msgstr ""
1500
 
1501
+ #: Application/Backend/phtml/index.phtml:201
1502
  msgid ""
1503
  "Install free [AAM Multisite extension] in order to manage all your sites "
1504
  "from the Network Admin."
1505
  msgstr ""
1506
 
1507
+ #: Application/Backend/phtml/index.phtml:212
1508
  msgid "Users/Roles Manager"
1509
  msgstr ""
1510
 
1511
+ #: Application/Backend/phtml/index.phtml:220
1512
+ #: Application/Backend/phtml/index.phtml:435
1513
  msgid "Roles"
1514
  msgstr ""
1515
 
1516
+ #: Application/Backend/phtml/index.phtml:226
1517
+ #: Application/Backend/phtml/index.phtml:445
1518
  msgid "Visitor"
1519
  msgstr ""
1520
 
1521
+ #: Application/Backend/phtml/index.phtml:229
1522
+ #: Application/Backend/phtml/index.phtml:450
1523
  msgid "Default"
1524
  msgstr ""
1525
 
1526
+ #: Application/Backend/phtml/index.phtml:242
1527
+ #: Application/Backend/phtml/index.phtml:330
1528
+ #: Application/Backend/phtml/main/uri.phtml:134
1529
  msgid "Action"
1530
  msgstr ""
1531
 
1532
+ #: Application/Backend/phtml/index.phtml:255
1533
  msgid "Create Role"
1534
  msgstr ""
1535
 
1536
+ #: Application/Backend/phtml/index.phtml:259
1537
+ #: Application/Backend/phtml/index.phtml:286
1538
  msgid "Role Name"
1539
  msgstr ""
1540
 
1541
+ #: Application/Backend/phtml/index.phtml:260
1542
+ #: Application/Backend/phtml/index.phtml:287
1543
  msgid "Enter Role Name"
1544
  msgstr ""
1545
 
1546
+ #: Application/Backend/phtml/index.phtml:263
1547
+ #: Application/Backend/phtml/index.phtml:290
1548
  msgid "Role Expiration"
1549
  msgstr ""
1550
 
1551
+ #: Application/Backend/phtml/index.phtml:264
1552
+ #: Application/Backend/phtml/index.phtml:291
1553
  msgid "Enter Expiration Rule"
1554
  msgstr ""
1555
 
1556
+ #: Application/Backend/phtml/index.phtml:282
1557
  msgid "Update Role"
1558
  msgstr ""
1559
 
1560
+ #: Application/Backend/phtml/index.phtml:311
1561
  #, php-format
1562
  msgid "Are you sure that you want to delete the %s role?"
1563
  msgstr ""
1564
 
1565
+ #: Application/Backend/phtml/index.phtml:329
1566
+ #: Application/Backend/phtml/metabox/metabox-content.phtml:64
1567
  msgid "Username"
1568
  msgstr ""
1569
 
1570
+ #: Application/Backend/phtml/index.phtml:354
1571
+ msgid ""
1572
+ "Define for how long user can access the website and what action needs to be "
1573
+ "taken after access expires."
1574
  msgstr ""
1575
 
1576
+ #: Application/Backend/phtml/index.phtml:360
1577
  msgid "Action After Expiration"
1578
  msgstr ""
1579
 
1580
+ #: Application/Backend/phtml/index.phtml:362
1581
  msgid "Select Action"
1582
  msgstr ""
1583
 
1584
+ #: Application/Backend/phtml/index.phtml:363
1585
+ msgid "Logout User"
1586
+ msgstr ""
1587
+
1588
+ #: Application/Backend/phtml/index.phtml:364
1589
  msgid "Delete Account"
1590
  msgstr ""
1591
 
1592
+ #: Application/Backend/phtml/index.phtml:365
1593
  msgid "Lock Account"
1594
  msgstr ""
1595
 
1596
+ #: Application/Backend/phtml/index.phtml:366
1597
  msgid "Change User Role"
1598
  msgstr ""
1599
 
1600
+ #: Application/Backend/phtml/index.phtml:370
1601
  msgid "Change To Role"
1602
  msgstr ""
1603
 
1604
+ #: Application/Backend/phtml/index.phtml:378
1605
+ #, php-format
1606
+ msgid ""
1607
+ "User JWT token to authentication user without a need for entering username/"
1608
+ "password. To learn more about JWT authentication, please refer to %sHow to "
1609
+ "authenticate WordPress user with JWT token%s article."
1610
+ msgstr ""
1611
+
1612
+ #: Application/Backend/phtml/index.phtml:380
1613
+ msgid "JWT Token (for any API calls)"
1614
+ msgstr ""
1615
+
1616
+ #: Application/Backend/phtml/index.phtml:387
1617
+ msgid "User Login URL (with JWT token)"
1618
+ msgstr ""
1619
+
1620
+ #: Application/Backend/phtml/index.phtml:389
1621
+ msgid ""
1622
+ "With this URL user will be automatically logged in until the time defined on "
1623
+ "the \"Temporary Access\" tab."
1624
+ msgstr ""
1625
+
1626
+ #: Application/Backend/phtml/index.phtml:394
1627
+ msgid "To manage user profile, click on the button below."
1628
+ msgstr ""
1629
+
1630
+ #: Application/Backend/phtml/index.phtml:396
1631
+ msgid "Edit User Profile"
1632
+ msgstr ""
1633
+
1634
+ #: Application/Backend/phtml/index.phtml:414
1635
  msgid ""
1636
  "Manage access to your website for visitors (any user that is not "
1637
  "authenticated)"
1638
  msgstr ""
1639
 
1640
+ #: Application/Backend/phtml/index.phtml:415
1641
+ #: Application/Backend/phtml/metabox/metabox-content.phtml:78
1642
  msgid "Manage Visitors"
1643
  msgstr ""
1644
 
1645
+ #: Application/Backend/phtml/index.phtml:422
1646
  msgid ""
1647
  "Manage default access to your website resources for all users, roles and "
1648
  "visitor. This includes Administrator role and your user"
1649
  msgstr ""
1650
 
1651
+ #: Application/Backend/phtml/index.phtml:423
1652
+ #: Application/Backend/phtml/metabox/metabox-content.phtml:104
1653
  msgid "Manage Default Access"
1654
  msgstr ""
1655
 
1656
+ #: Application/Backend/phtml/index.phtml:431
1657
  msgid ""
1658
  "Manage access for your users, roles and visitors. Be careful with "
1659
  "[Administrator] role as well as your admin user. [Database backup is "
1660
  "strongly recommended]."
1661
  msgstr ""
1662
 
1663
+ #: Application/Backend/phtml/index.phtml:436
1664
  msgid ""
1665
  "With Roles tab you can manage access for any defined role, edit role's name, "
1666
  "create new role or even delete existing (but only when there is no users "
1667
  "assigned to it). You are not allowed to delete Administrator role."
1668
  msgstr ""
1669
 
1670
+ #: Application/Backend/phtml/index.phtml:441
1671
  msgid ""
1672
  "Manage access for any user. As a bonus feature, you can block user. It means "
1673
  "that user will be not able to login to your website anymore."
1674
  msgstr ""
1675
 
1676
+ #: Application/Backend/phtml/index.phtml:446
1677
  msgid ""
1678
  "Visitor can be considered any user that is not authenticated to your website."
1679
  msgstr ""
1680
 
1681
+ #: Application/Backend/phtml/index.phtml:451
1682
  msgid ""
1683
  "Manage default access settings to your website resources for all users, "
1684
  "roles and visitors."
1700
  #: Application/Backend/phtml/main/login-redirect.phtml:31
1701
  #: Application/Backend/phtml/main/logout-redirect.phtml:31
1702
  #: Application/Backend/phtml/main/redirect.phtml:50
1703
+ #: Application/Backend/phtml/main/uri.phtml:57
1704
  #: Application/Backend/phtml/partial/post-advanced-settings.phtml:77
1705
  msgid "Redirected to existing page [(select from the drop-down)]"
1706
  msgstr ""
1708
  #: Application/Backend/phtml/main/404redirect.phtml:28
1709
  #: Application/Backend/phtml/main/redirect.phtml:54
1710
  #: Application/Backend/phtml/main/redirect.phtml:106
1711
+ #: Application/Backend/phtml/main/uri.phtml:61
1712
  msgid "Redirected to the URL [(enter valid URL starting from http or https)]"
1713
  msgstr ""
1714
 
1717
  #: Application/Backend/phtml/main/logout-redirect.phtml:39
1718
  #: Application/Backend/phtml/main/redirect.phtml:58
1719
  #: Application/Backend/phtml/main/redirect.phtml:110
1720
+ #: Application/Backend/phtml/main/uri.phtml:65
1721
  #: Application/Backend/phtml/partial/post-advanced-settings.phtml:85
1722
  #, php-format
1723
  msgid "Trigger PHP callback function [(valid %sPHP callback%s is required)]"
1728
  #: Application/Backend/phtml/main/logout-redirect.phtml:52
1729
  #: Application/Backend/phtml/main/redirect.phtml:76
1730
  #: Application/Backend/phtml/main/redirect.phtml:128
1731
+ #: Application/Backend/phtml/main/uri.phtml:81
1732
  #: Application/Backend/phtml/partial/post-advanced-settings.phtml:96
1733
  msgid "-- Select Page --"
1734
  msgstr ""
1747
  #: Application/Backend/phtml/main/logout-redirect.phtml:63
1748
  #: Application/Backend/phtml/main/redirect.phtml:87
1749
  #: Application/Backend/phtml/main/redirect.phtml:139
1750
+ #: Application/Backend/phtml/main/uri.phtml:92
1751
  #: Application/Backend/phtml/partial/post-advanced-settings.phtml:107
1752
  msgid "PHP Callback Function"
1753
  msgstr ""
1780
  #: Application/Backend/phtml/main/capability.phtml:33
1781
  #: Application/Backend/phtml/main/menu.phtml:14
1782
  #: Application/Backend/phtml/main/metabox.phtml:20
1783
+ #: Application/Backend/phtml/main/policy.phtml:16
1784
  #: Application/Backend/phtml/main/post.phtml:36
1785
+ #: Application/Backend/phtml/main/route.phtml:17
1786
+ #: Application/Backend/phtml/main/toolbar.phtml:15
1787
+ #: Application/Backend/phtml/main/uri.phtml:17
1788
+ #: Application/Backend/phtml/metabox/metabox-content.phtml:133
1789
  msgid "Reset To Default"
1790
  msgstr ""
1791
 
1800
  msgstr ""
1801
 
1802
  #: Application/Backend/phtml/main/capability.phtml:44
1803
+ #: Application/Backend/phtml/main/policy.phtml:28
1804
  #: Application/Backend/phtml/main/post.phtml:52
1805
+ #: Application/Backend/phtml/main/uri.phtml:135
1806
  msgid "Actions"
1807
  msgstr ""
1808
 
1866
  msgstr ""
1867
 
1868
  #: Application/Backend/phtml/main/get-started.phtml:12
1869
+ msgid "Go To \"Get Started\" Page"
 
 
1870
  msgstr ""
1871
 
1872
  #: Application/Backend/phtml/main/login-redirect.phtml:7
1915
  #: Application/Backend/phtml/main/menu.phtml:13
1916
  #: Application/Backend/phtml/main/metabox.phtml:19
1917
  #: Application/Backend/phtml/main/post.phtml:35
1918
+ #: Application/Backend/phtml/main/toolbar.phtml:14
1919
+ #: Application/Backend/phtml/main/uri.phtml:16
1920
+ #: Application/Backend/phtml/metabox/metabox-content.phtml:132
1921
  msgid "Settings are customized"
1922
  msgstr ""
1923
 
1924
+ #: Application/Backend/phtml/main/menu.phtml:47
1925
+ #: Application/Backend/phtml/main/toolbar.phtml:44
1926
+ msgid "Menu ID:"
1927
+ msgstr ""
1928
+
1929
+ #: Application/Backend/phtml/main/menu.phtml:59
1930
+ #: Application/Backend/phtml/main/menu.phtml:66
1931
  msgid "Cap:"
1932
  msgstr ""
1933
 
1934
+ #: Application/Backend/phtml/main/menu.phtml:102
1935
  msgid ""
1936
  "Current user does not have enough capabilities to access any available "
1937
  "dashboard page."
1938
  msgstr ""
1939
 
1940
+ #: Application/Backend/phtml/main/menu.phtml:114
1941
  msgid "Dashboard Lockdown"
1942
  msgstr ""
1943
 
1944
+ #: Application/Backend/phtml/main/menu.phtml:118
1945
  msgid "You cannot restrict access to Dashboard home page."
1946
  msgstr ""
1947
 
1948
+ #: Application/Backend/phtml/main/menu.phtml:119
1949
  #, php-format
1950
  msgid ""
1951
  "The [Home] is the default page every user is redirected after login. To "
1953
  "WordPress backend%s article."
1954
  msgstr ""
1955
 
1956
+ #: Application/Backend/phtml/main/menu.phtml:123
1957
  msgid "OK"
1958
  msgstr ""
1959
 
1965
  msgstr ""
1966
 
1967
  #: Application/Backend/phtml/main/metabox.phtml:12
 
1968
  msgid "Refresh"
1969
  msgstr ""
1970
 
1980
  msgid "Frontend Widgets [(including Appearance->Widgets)]"
1981
  msgstr ""
1982
 
1983
+ #: Application/Backend/phtml/main/metabox.phtml:81
 
 
 
 
1984
  msgid "The list is not initialized. Click Refresh button above."
1985
  msgstr ""
1986
 
1987
+ #: Application/Backend/phtml/main/metabox.phtml:92
1988
  msgid "Initialize URL"
1989
  msgstr ""
1990
 
1991
+ #: Application/Backend/phtml/main/metabox.phtml:96
1992
  msgid ""
1993
  "Some metaboxes are \"conditional\" and appear on the Edit screen when "
1994
  "certain conditions are met. For example metabox \"Comments\" appears only "
1997
  "appears."
1998
  msgstr ""
1999
 
2000
+ #: Application/Backend/phtml/main/metabox.phtml:99
2001
  msgid "Backend page URL"
2002
  msgstr ""
2003
 
2004
+ #: Application/Backend/phtml/main/metabox.phtml:100
2005
  msgid "Insert valid URL"
2006
  msgstr ""
2007
 
2008
+ #: Application/Backend/phtml/main/policy.phtml:7
2009
+ #, php-format
2010
+ msgid ""
2011
+ "Manage access and security policies for [%s]. For more information check "
2012
+ "%sAccess &amp; Security Policy%s page."
2013
+ msgstr ""
2014
+
2015
+ #: Application/Backend/phtml/main/policy.phtml:15
2016
+ msgid "Policies are customized"
2017
+ msgstr ""
2018
+
2019
+ #: Application/Backend/phtml/main/policy.phtml:27
2020
+ msgid "Policy"
2021
+ msgstr ""
2022
+
2023
+ #: Application/Backend/phtml/main/policy.phtml:40
2024
+ #, php-format
2025
+ msgid ""
2026
+ "%s[AAM Plus Package]%s extension is required in order to apply Access &amp; "
2027
+ "Security Policies to everybody all together."
2028
+ msgstr ""
2029
+
2030
  #: Application/Backend/phtml/main/post.phtml:7
2031
  #, php-format
2032
  msgid ""
2092
 
2093
  #: Application/Backend/phtml/main/redirect.phtml:40
2094
  #: Application/Backend/phtml/main/redirect.phtml:98
2095
+ #: Application/Backend/phtml/main/uri.phtml:47
2096
  msgid "Show customized message [(plain text or HTML)]"
2097
  msgstr ""
2098
 
2099
  #: Application/Backend/phtml/main/redirect.phtml:45
2100
+ #: Application/Backend/phtml/main/uri.phtml:52
2101
  msgid ""
2102
  "Redirect to the login page [(after login, user will be redirected back to "
2103
  "the restricted page)]"
2105
 
2106
  #: Application/Backend/phtml/main/redirect.phtml:62
2107
  #: Application/Backend/phtml/main/redirect.phtml:114
2108
+ #: Application/Backend/phtml/main/uri.phtml:69
2109
  msgid "Customized Message"
2110
  msgstr ""
2111
 
2112
  #: Application/Backend/phtml/main/redirect.phtml:63
2113
  #: Application/Backend/phtml/main/redirect.phtml:115
2114
+ #: Application/Backend/phtml/main/uri.phtml:70
2115
  msgid "Enter message..."
2116
  msgstr ""
2117
 
2127
  "available in AAM."
2128
  msgstr ""
2129
 
2130
+ #: Application/Backend/phtml/main/route.phtml:16
 
 
 
 
 
 
 
2131
  msgid "Routes are customized"
2132
  msgstr ""
2133
 
2134
+ #: Application/Backend/phtml/main/route.phtml:27
2135
  msgid "Route"
2136
  msgstr ""
2137
 
2138
+ #: Application/Backend/phtml/main/route.phtml:28
2139
  msgid "Deny"
2140
  msgstr ""
2141
 
2147
  "or utilize the great power of roles and capabilities."
2148
  msgstr ""
2149
 
2150
+ #: Application/Backend/phtml/main/toolbar.phtml:55
2151
+ msgid "URI:"
2152
+ msgstr ""
2153
+
2154
+ #: Application/Backend/phtml/main/toolbar.phtml:86
2155
  msgid ""
2156
  "The list of top admin bar items is not initialized. Click \"Refresh\" button "
2157
  "above."
2158
  msgstr ""
2159
 
2160
+ #: Application/Backend/phtml/main/uri.phtml:8
2161
+ #, php-format
2162
+ msgid ""
2163
+ "Manage access to the website URL(s) for the [%s]. However, note! All entered "
2164
+ "URLs have to belong to this particular website and processed by the "
2165
+ "WordPress core. For more information check %sHow to restrict access to any "
2166
+ "WordPress website URL%s."
2167
+ msgstr ""
2168
+
2169
+ #: Application/Backend/phtml/main/uri.phtml:27
2170
+ msgid "URI Access Rule"
2171
+ msgstr ""
2172
+
2173
+ #: Application/Backend/phtml/main/uri.phtml:31
2174
+ msgid "Enter URL [(wildcard * is available with Plus Package extension)]"
2175
+ msgstr ""
2176
+
2177
+ #: Application/Backend/phtml/main/uri.phtml:35
2178
+ msgid "How to redirect user when match?"
2179
+ msgstr ""
2180
+
2181
+ #: Application/Backend/phtml/main/uri.phtml:39
2182
+ msgid "Allow Access"
2183
+ msgstr ""
2184
+
2185
+ #: Application/Backend/phtml/main/uri.phtml:43
2186
+ msgid "Deny Access [(show \"Access Denied\" message)]"
2187
+ msgstr ""
2188
+
2189
+ #: Application/Backend/phtml/main/uri.phtml:87
2190
+ msgid "The Valid Redirect URL"
2191
+ msgstr ""
2192
+
2193
+ #: Application/Backend/phtml/main/uri.phtml:109
2194
+ msgid "Delete URI Rule"
2195
+ msgstr ""
2196
+
2197
+ #: Application/Backend/phtml/main/uri.phtml:132
2198
+ msgid "URI"
2199
+ msgstr ""
2200
+
2201
+ #: Application/Backend/phtml/main/uri.phtml:133
2202
+ msgid "Type"
2203
+ msgstr ""
2204
+
2205
+ #: Application/Backend/phtml/metabox/metabox-content.phtml:77
2206
  #, php-format
2207
  msgid "Manage access to %s for visitors (any user that is not authenticated)"
2208
  msgstr ""
2209
 
2210
+ #: Application/Backend/phtml/metabox/metabox-content.phtml:80
2211
+ msgid ""
2212
+ "Attach current access &amp; security policy to visitors (any user that is "
2213
+ "not authenticated)"
2214
+ msgstr ""
2215
+
2216
+ #: Application/Backend/phtml/metabox/metabox-content.phtml:98
2217
  #, php-format
2218
  msgid ""
2219
  "Manage default access to %s for all users, roles and visitor. This includes "
2220
  "Administrator role and yourself"
2221
  msgstr ""
2222
 
2223
+ #: Application/Backend/phtml/metabox/metabox-content.phtml:100
2224
+ msgid ""
2225
+ "Attach current access &amp; security policy to all users, roles and "
2226
+ "visitors. This includes Administrator role and yourself"
2227
+ msgstr ""
2228
+
2229
+ #: Application/Backend/phtml/metabox/metabox-content.phtml:118
2230
  msgid "This feature is allowed only with [AAM Plus Package] extension."
2231
  msgstr ""
2232
 
2233
+ #: Application/Backend/phtml/metabox/policy-metabox.phtml:389
2234
+ #, php-format
2235
+ msgid ""
2236
+ "To learn more about Access &amp; Security policy document, please check "
2237
+ "[%sAccess &amp; Security Policy%s] page."
2238
+ msgstr ""
2239
+
2240
+ #: Application/Backend/phtml/metabox/policy-metabox.phtml:418
2241
+ msgid "Syntax Error"
2242
+ msgstr ""
2243
+
2244
  #: Application/Backend/phtml/partial/login-redirect.phtml:3
2245
  msgid ""
2246
  "Setup [default] redirect after user logged in successfully for all your "
2252
  msgid "Frontend Access Settings"
2253
  msgstr ""
2254
 
2255
+ #: Application/Backend/phtml/partial/post-access-form.phtml:29
2256
+ #: Application/Backend/phtml/partial/post-access-form.phtml:69
2257
+ #: Application/Backend/phtml/partial/post-access-form.phtml:109
2258
  msgid "change"
2259
  msgstr ""
2260
 
2261
+ #: Application/Backend/phtml/partial/post-access-form.phtml:53
2262
  msgid "Backend Access Settings"
2263
  msgstr ""
2264
 
2265
+ #: Application/Backend/phtml/partial/post-access-form.phtml:93
2266
  msgid "API Access Settings"
2267
  msgstr ""
2268
 
2351
  "belong to %s. Consider to purchase [AAM Plus Package] extension."
2352
  msgstr ""
2353
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2354
  #: Application/Backend/phtml/widget/login-backend.phtml:3
2355
  msgid "Login Title"
2356
  msgstr ""
aam.php CHANGED
@@ -3,7 +3,7 @@
3
  /**
4
  Plugin Name: Advanced Access Manager
5
  Description: All you need to manage access to your WordPress website
6
- Version: 5.8.2
7
  Author: Vasyl Martyniuk <vasyl@vasyltech.com>
8
  Author URI: https://vasyltech.com
9
 
@@ -133,9 +133,6 @@ class AAM {
133
  AAM_Extension_Repository::getInstance()->load();
134
  }
135
 
136
- // Load Access/Security Policies
137
- AAM_Core_Policy_Manager::bootstrap();
138
-
139
  //load WP Core hooks
140
  AAM_Shared_Manager::bootstrap();
141
  }
@@ -175,7 +172,7 @@ class AAM {
175
  // Logout user if he/she is blocked
176
  self::$_instance->getUser()->validateUserStatus();
177
 
178
- load_plugin_textdomain(AAM_KEY);
179
  }
180
 
181
  return self::$_instance;
3
  /**
4
  Plugin Name: Advanced Access Manager
5
  Description: All you need to manage access to your WordPress website
6
+ Version: 5.8.3
7
  Author: Vasyl Martyniuk <vasyl@vasyltech.com>
8
  Author URI: https://vasyltech.com
9
 
133
  AAM_Extension_Repository::getInstance()->load();
134
  }
135
 
 
 
 
136
  //load WP Core hooks
137
  AAM_Shared_Manager::bootstrap();
138
  }
172
  // Logout user if he/she is blocked
173
  self::$_instance->getUser()->validateUserStatus();
174
 
175
+ load_plugin_textdomain(AAM_KEY, false, 'advanced-access-manager/Lang');
176
  }
177
 
178
  return self::$_instance;
media/font/fontello.eot CHANGED
Binary file
media/font/fontello.svg CHANGED
@@ -1,7 +1,7 @@
1
  <?xml version="1.0" standalone="no"?>
2
  <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
3
  <svg xmlns="http://www.w3.org/2000/svg">
4
- <metadata>Copyright (C) 2018 by original authors @ fontello.com</metadata>
5
  <defs>
6
  <font id="fontello" horiz-adv-x="1000" >
7
  <font-face font-family="fontello" font-weight="400" font-stretch="normal" units-per-em="1000" ascent="850" descent="-150" />
@@ -58,6 +58,8 @@
58
 
59
  <glyph glyph-name="help-circled" unicode="&#xe819;" d="M500 82v107q0 8-5 13t-13 5h-107q-8 0-13-5t-5-13v-107q0-8 5-13t13-5h107q8 0 13 5t5 13z m143 375q0 49-31 91t-77 65-95 23q-136 0-207-119-9-14 4-24l74-55q4-4 10-4 9 0 14 7 30 38 48 51 19 14 48 14 27 0 48-15t21-33q0-21-11-34t-38-25q-35-16-65-48t-29-70v-20q0-8 5-13t13-5h107q8 0 13 5t5 13q0 10 12 27t30 28q18 10 28 16t25 19 25 27 16 34 7 45z m214-107q0-117-57-215t-156-156-215-58-216 58-155 156-58 215 58 215 155 156 216 58 215-58 156-156 57-215z" horiz-adv-x="857.1" />
60
 
 
 
61
  <glyph glyph-name="users" unicode="&#xe81b;" d="M331 350q-90-3-148-71h-75q-45 0-77 22t-31 66q0 197 69 197 4 0 25-11t54-24 66-12q38 0 75 13-3-21-3-37 0-78 45-143z m598-356q0-66-41-105t-108-39h-488q-68 0-108 39t-41 105q0 30 2 58t8 61 14 61 24 54 35 45 48 30 62 11q6 0 24-12t41-26 59-27 76-12 75 12 60 27 41 26 23 12q35 0 63-11t47-30 35-45 24-54 15-61 8-61 2-58z m-572 713q0-59-42-101t-101-42-101 42-42 101 42 101 101 42 101-42 42-101z m393-214q0-89-63-152t-151-62-152 62-63 152 63 151 152 63 151-63 63-151z m321-126q0-43-31-66t-77-22h-75q-57 68-147 71 45 65 45 143 0 16-3 37 37-13 74-13 33 0 67 12t54 24 24 11q69 0 69-197z m-71 340q0-59-42-101t-101-42-101 42-42 101 42 101 101 42 101-42 42-101z" horiz-adv-x="1071.4" />
62
 
63
  <glyph glyph-name="user-plus" unicode="&#xe820;" d="M393 350q-89 0-152 63t-62 151 62 152 152 63 151-63 63-152-63-151-151-63z m536-71h196q7 0 13-6t5-12v-107q0-8-5-13t-13-5h-196v-197q0-7-6-12t-12-6h-107q-8 0-13 6t-5 12v197h-197q-7 0-12 5t-6 13v107q0 7 6 12t12 6h197v196q0 7 5 13t13 5h107q7 0 12-5t6-13v-196z m-411-125q0-29 21-51t50-21h143v-133q-38-28-95-28h-488q-67 0-108 39t-41 106q0 30 2 58t8 61 15 60 24 55 34 45 48 30 62 11q11 0 22-10 44-34 86-51t92-17 92 17 86 51q11 10 22 10 73 0 121-54h-125q-29 0-50-21t-21-50v-107z" horiz-adv-x="1142.9" />
1
  <?xml version="1.0" standalone="no"?>
2
  <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
3
  <svg xmlns="http://www.w3.org/2000/svg">
4
+ <metadata>Copyright (C) 2019 by original authors @ fontello.com</metadata>
5
  <defs>
6
  <font id="fontello" horiz-adv-x="1000" >
7
  <font-face font-family="fontello" font-weight="400" font-stretch="normal" units-per-em="1000" ascent="850" descent="-150" />
58
 
59
  <glyph glyph-name="help-circled" unicode="&#xe819;" d="M500 82v107q0 8-5 13t-13 5h-107q-8 0-13-5t-5-13v-107q0-8 5-13t13-5h107q8 0 13 5t5 13z m143 375q0 49-31 91t-77 65-95 23q-136 0-207-119-9-14 4-24l74-55q4-4 10-4 9 0 14 7 30 38 48 51 19 14 48 14 27 0 48-15t21-33q0-21-11-34t-38-25q-35-16-65-48t-29-70v-20q0-8 5-13t13-5h107q8 0 13 5t5 13q0 10 12 27t30 28q18 10 28 16t25 19 25 27 16 34 7 45z m214-107q0-117-57-215t-156-156-215-58-216 58-155 156-58 215 58 215 155 156 216 58 215-58 156-156 57-215z" horiz-adv-x="857.1" />
60
 
61
+ <glyph glyph-name="pin" unicode="&#xe81a;" d="M268 368v250q0 8-5 13t-13 5-13-5-5-13v-250q0-8 5-13t13-5 13 5 5 13z m375-197q0-14-11-25t-25-10h-239l-29-270q-1-7-6-11t-11-5h-1q-15 0-17 15l-43 271h-225q-15 0-25 10t-11 25q0 69 44 124t99 55v286q-29 0-50 21t-22 50 22 50 50 22h357q29 0 50-22t21-50-21-50-50-21v-286q55 0 99-55t44-124z" horiz-adv-x="642.9" />
62
+
63
  <glyph glyph-name="users" unicode="&#xe81b;" d="M331 350q-90-3-148-71h-75q-45 0-77 22t-31 66q0 197 69 197 4 0 25-11t54-24 66-12q38 0 75 13-3-21-3-37 0-78 45-143z m598-356q0-66-41-105t-108-39h-488q-68 0-108 39t-41 105q0 30 2 58t8 61 14 61 24 54 35 45 48 30 62 11q6 0 24-12t41-26 59-27 76-12 75 12 60 27 41 26 23 12q35 0 63-11t47-30 35-45 24-54 15-61 8-61 2-58z m-572 713q0-59-42-101t-101-42-101 42-42 101 42 101 101 42 101-42 42-101z m393-214q0-89-63-152t-151-62-152 62-63 152 63 151 152 63 151-63 63-151z m321-126q0-43-31-66t-77-22h-75q-57 68-147 71 45 65 45 143 0 16-3 37 37-13 74-13 33 0 67 12t54 24 24 11q69 0 69-197z m-71 340q0-59-42-101t-101-42-101 42-42 101 42 101 101 42 101-42 42-101z" horiz-adv-x="1071.4" />
64
 
65
  <glyph glyph-name="user-plus" unicode="&#xe820;" d="M393 350q-89 0-152 63t-62 151 62 152 152 63 151-63 63-152-63-151-151-63z m536-71h196q7 0 13-6t5-12v-107q0-8-5-13t-13-5h-196v-197q0-7-6-12t-12-6h-107q-8 0-13 6t-5 12v197h-197q-7 0-12 5t-6 13v107q0 7 6 12t12 6h197v196q0 7 5 13t13 5h107q7 0 12-5t6-13v-196z m-411-125q0-29 21-51t50-21h143v-133q-38-28-95-28h-488q-67 0-108 39t-41 106q0 30 2 58t8 61 15 60 24 55 34 45 48 30 62 11q11 0 22-10 44-34 86-51t92-17 92 17 86 51q11 10 22 10 73 0 121-54h-125q-29 0-50-21t-21-50v-107z" horiz-adv-x="1142.9" />
media/font/fontello.ttf CHANGED
Binary file
media/font/fontello.woff CHANGED
Binary file
media/font/fontello.woff2 CHANGED
Binary file
readme.txt CHANGED
@@ -3,7 +3,7 @@ Contributors: vasyltech
3
  Tags: access control, membership, backend menu, user role, restricted content, security, jwt
4
  Requires at least: 4.0
5
  Tested up to: 5.0.3
6
- Stable tag: 5.8.2
7
 
8
  All you need to manage access to you WordPress websites on frontend, backend and API levels for any role, user or visitors.
9
 
@@ -79,6 +79,15 @@ https://www.youtube.com/watch?v=mj5Xa_Wc16Y
79
 
80
  == Changelog ==
81
 
 
 
 
 
 
 
 
 
 
82
  = 5.8.2 =
83
  * Fixed numerous bugs with access control for media
84
  * Added support for change_own_password capability
3
  Tags: access control, membership, backend menu, user role, restricted content, security, jwt
4
  Requires at least: 4.0
5
  Tested up to: 5.0.3
6
+ Stable tag: 5.8.3
7
 
8
  All you need to manage access to you WordPress websites on frontend, backend and API levels for any role, user or visitors.
9
 
79
 
80
  == Changelog ==
81
 
82
+ = 5.8.3 =
83
+ * Fixed the bug with multi-lingual support
84
+ * Fixed the bug with LIMIT option that escaped quotes in the message
85
+ * Fixed the bug with managing access to Access Policies
86
+ * Added support for aam_edit_policy, aam_read_policy, aam_delete_policy, aam_delete_policies, aam_edit_policies, aam_edit_other_policies, aam_publish_policies capabilities
87
+ * Refactored Default Category functionality (moved it to Plus Package extension)
88
+ * Added support for the nav_menu_meta_box_object hook to filter posts on Menu Builder page
89
+ * Extend Access Policy with more features
90
+
91
  = 5.8.2 =
92
  * Fixed numerous bugs with access control for media
93
  * Added support for change_own_password capability