Advanced Access Manager - Version 4.0

Version Description

  • Added link Access to category list
  • Added shortcode [aam] to manage access to the post's content
  • Moved AAM Redirect extension to the basic AAM package
  • Moved AAM Login Redirect extension to the basic AAM package
  • Moved AAM Content Teaser extension to the basic AAM package
  • Set single password for any post or posts in any category or post type
  • Added two protection mechanism from login brute force attacks
  • Added double authentication mechanism
  • Few minor core bug fixings
  • Improved multisite support
  • Improved caching mechanism
Download this release

Release Info

Developer vasyl_m
Plugin Icon 128x128 Advanced Access Manager
Version 4.0
Comparing to
See all releases

Code changes from version 3.9.5.1 to 4.0

Files changed (59) hide show
  1. Application/Backend/Feature/Extension.php +40 -96
  2. Application/Backend/Feature/LoginRedirect.php +23 -18
  3. Application/Backend/Feature/Post.php +17 -11
  4. Application/Backend/Feature/Redirect.php +23 -18
  5. Application/Backend/Feature/Role.php +5 -1
  6. Application/Backend/Feature/Security.php +83 -0
  7. Application/Backend/Feature/Teaser.php +23 -18
  8. Application/Backend/Feature/Utility.php +25 -12
  9. Application/Backend/Filter.php +23 -10
  10. Application/Backend/Manager.php +37 -39
  11. Application/Backend/View.php +2 -1
  12. Application/Backend/View/CodePinch.php +16 -17
  13. Application/Backend/View/PostOptionList.php +5 -0
  14. Application/Backend/View/ProductList.php +0 -117
  15. Application/Backend/View/SecurityOptionList.php +26 -0
  16. Application/Backend/View/UtilityOptionList.php +41 -0
  17. Application/Backend/phtml/contact.phtml +1 -1
  18. Application/Backend/phtml/extension.phtml +10 -33
  19. Application/Backend/phtml/index.phtml +28 -25
  20. Application/Backend/phtml/main-panel.phtml +1 -0
  21. Application/Backend/phtml/object/login-redirect.phtml +54 -50
  22. Application/Backend/phtml/object/menu.phtml +0 -8
  23. Application/Backend/phtml/object/metabox.phtml +1 -1
  24. Application/Backend/phtml/object/post.phtml +33 -18
  25. Application/Backend/phtml/object/redirect.phtml +97 -93
  26. Application/Backend/phtml/object/teaser.phtml +23 -19
  27. Application/Backend/phtml/security.phtml +40 -0
  28. Application/Backend/phtml/utility.phtml +16 -65
  29. Application/Core/API.php +32 -23
  30. Application/Core/Cache.php +13 -6
  31. Application/Core/Compatibility.php +124 -0
  32. Application/Core/Config.php +29 -3
  33. Application/Core/Object/LoginRedirect.php +106 -0
  34. Application/Core/Object/Post.php +33 -5
  35. Application/Core/Object/Redirect.php +127 -0
  36. Application/Core/Object/Teaser.php +124 -0
  37. Application/Core/Repository.php +0 -321
  38. Application/Core/Subject.php +3 -3
  39. Application/Core/Subject/Default.php +19 -1
  40. Application/Core/Subject/Role.php +1 -1
  41. Application/Core/Subject/User.php +1 -8
  42. Application/Core/Subject/Visitor.php +8 -0
  43. Application/Extension/Compatibility.php +78 -0
  44. Application/Extension/List.php +78 -0
  45. Application/Extension/Repository.php +295 -0
  46. Application/{Core → Extension}/Server.php +21 -13
  47. Application/Frontend/Manager.php +203 -60
  48. Application/Shortcode/Factory.php +58 -0
  49. Application/Shortcode/Strategy/Content.php +125 -0
  50. Application/Shortcode/Strategy/Interface.php +31 -0
  51. Application/Shortcode/Strategy/Login.php +81 -0
  52. Lang/advanced-access-manager-en_US.mo +0 -0
  53. Lang/advanced-access-manager-en_US.po +481 -276
  54. Lang/advanced-access-manager.pot +479 -274
  55. aam.php +4 -7
  56. media/css/aam.css +115 -100
  57. media/js/aam-ui.js +224 -32
  58. media/js/vendor.js +1 -11
  59. readme.txt +54 -28
Application/Backend/Feature/Extension.php CHANGED
@@ -29,33 +29,6 @@ class AAM_Backend_Feature_Extension extends AAM_Backend_Feature_Abstract {
29
  return 'extension.phtml';
30
  }
31
 
32
- /**
33
- * Get Product List
34
- *
35
- * @return array
36
- *
37
- * @access protected
38
- */
39
- protected function getProductList($filter) {
40
- static $products = null;
41
-
42
- if (is_null($products)) {
43
- $products = require(dirname(__FILE__) . '/../View/ProductList.php');
44
- }
45
-
46
- $filtered = array();
47
- foreach($products as $product) {
48
- if ($product['type'] == $filter) {
49
- if (!isset($product['license'])) {
50
- $product['license'] = $this->retrieveLicense($product['id']);
51
- }
52
- $filtered[] = $product;
53
- }
54
- }
55
-
56
- return $filtered;
57
- }
58
-
59
  /**
60
  * Install an extension
61
  *
@@ -66,11 +39,11 @@ class AAM_Backend_Feature_Extension extends AAM_Backend_Feature_Abstract {
66
  * @access public
67
  */
68
  public function install($storedLicense = null) {
69
- $repo = AAM_Core_Repository::getInstance();
70
  $license = AAM_Core_Request::post('license', $storedLicense);
71
 
72
  //download the extension from the server first
73
- $package = AAM_Core_Server::download($license);
74
 
75
  if (is_wp_error($package)) {
76
  $response = array(
@@ -78,14 +51,14 @@ class AAM_Backend_Feature_Extension extends AAM_Backend_Feature_Abstract {
78
  );
79
  }elseif ($error = $repo->checkDirectory()) {
80
  $response = $this->installFailureResponse($error, $package);
81
- $this->storeLicense($package->title, $license);
82
  } elseif (empty($package->content)) { //any unpredictable scenario
83
  $response = array(
84
  'status' => 'failure',
85
- 'error' => 'Failed to download the extension. Try again or contact us.'
86
  );
87
  } else { //otherwise install the extension
88
- $result = $repo->addExtension(base64_decode($package->content));
89
  if (is_wp_error($result)) {
90
  $response = $this->installFailureResponse(
91
  $result->get_error_message(), $package
@@ -93,7 +66,7 @@ class AAM_Backend_Feature_Extension extends AAM_Backend_Feature_Abstract {
93
  } else {
94
  $response = array('status' => 'success');
95
  }
96
- $this->storeLicense($package->title, $license);
97
  }
98
 
99
  return json_encode($response);
@@ -108,10 +81,10 @@ class AAM_Backend_Feature_Extension extends AAM_Backend_Feature_Abstract {
108
  */
109
  public function update() {
110
  $extension = AAM_Core_Request::post('extension');
 
111
 
112
- $list = AAM_Core_API::getOption('aam-extension-license', array());
113
- if (isset($list[$extension])) {
114
- $response = $this->install($list[$extension]);
115
  } else {
116
  $response = json_encode(array(
117
  'status' => 'failure',
@@ -127,15 +100,23 @@ class AAM_Backend_Feature_Extension extends AAM_Backend_Feature_Abstract {
127
  * @return type
128
  */
129
  public function check() {
130
- //grab the server extension list
131
- $response = AAM_Core_Server::check();
132
- if (!empty($response)) {
133
- AAM_Core_API::updateOption('aam-extension-repository', $response);
134
- }
135
 
136
  return json_encode(array('status' => 'success'));
137
  }
138
 
 
 
 
 
 
 
 
 
 
 
 
 
139
  /**
140
  * Install extension failure response
141
  *
@@ -158,39 +139,6 @@ class AAM_Backend_Feature_Extension extends AAM_Backend_Feature_Abstract {
158
  );
159
  }
160
 
161
- /**
162
- * Store the license key
163
- *
164
- * This is important to have just for the update extension purposes
165
- *
166
- * @param string $title
167
- * @param string $license
168
- *
169
- * @return void
170
- *
171
- * @access protected
172
- */
173
- protected function storeLicense($title, $license) {
174
- //retrieve the installed list of extensions
175
- $list = AAM_Core_API::getOption('aam-extension-license', array());
176
- $list[$title] = $license;
177
-
178
- //update the extension list
179
- AAM_Core_API::updateOption('aam-extension-license', $list);
180
- }
181
-
182
- /**
183
- *
184
- * @param type $title
185
- * @return type
186
- */
187
- protected function retrieveLicense($title) {
188
- //retrieve the installed list of extensions
189
- $list = AAM_Core_API::getOption('aam-extension-license', array());
190
-
191
- return (isset($list[$title]) ? $list[$title] : null);
192
- }
193
-
194
  /**
195
  * Register Extension feature
196
  *
@@ -199,19 +147,21 @@ class AAM_Backend_Feature_Extension extends AAM_Backend_Feature_Abstract {
199
  * @access public
200
  */
201
  public static function register() {
202
- $cap = AAM_Core_Config::get(self::getAccessOption(), 'administrator');
203
-
204
- AAM_Backend_Feature::registerFeature((object) array(
205
- 'uid' => 'extension',
206
- 'position' => 999,
207
- 'title' => __('Extensions', AAM_KEY),
208
- 'capability' => $cap,
209
- 'notification' => self::getNotification(),
210
- 'subjects' => array(
211
- 'AAM_Core_Subject_Role'
212
- ),
213
- 'view' => __CLASS__
214
- ));
 
 
215
  }
216
 
217
  /**
@@ -219,21 +169,15 @@ class AAM_Backend_Feature_Extension extends AAM_Backend_Feature_Abstract {
219
  * @return int
220
  */
221
  protected static function getNotification() {
222
- $list = AAM_Core_API::getOption('aam-extension-repository', array());
223
- $repo = AAM_Core_Repository::getInstance();
224
  $count = 0;
225
 
226
- //WP Error Fix bug report
227
- $list = (is_array($list) ? $list : array());
228
-
229
- foreach($list as $extension) {
230
- $status = $repo->extensionStatus($extension->title);
231
- if ($status == AAM_Core_Repository::STATUS_UPDATE) {
232
  $count++;
233
  }
234
  }
235
 
236
- return ($count ? $count : 'NEW');
237
  }
238
 
239
  }
29
  return 'extension.phtml';
30
  }
31
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
32
  /**
33
  * Install an extension
34
  *
39
  * @access public
40
  */
41
  public function install($storedLicense = null) {
42
+ $repo = AAM_Extension_Repository::getInstance();
43
  $license = AAM_Core_Request::post('license', $storedLicense);
44
 
45
  //download the extension from the server first
46
+ $package = AAM_Extension_Server::download($license);
47
 
48
  if (is_wp_error($package)) {
49
  $response = array(
51
  );
52
  }elseif ($error = $repo->checkDirectory()) {
53
  $response = $this->installFailureResponse($error, $package);
54
+ $repo->storeLicense($package, $license);
55
  } elseif (empty($package->content)) { //any unpredictable scenario
56
  $response = array(
57
  'status' => 'failure',
58
+ 'error' => 'Download failure. Please try again or contact us.'
59
  );
60
  } else { //otherwise install the extension
61
+ $result = $repo->add(base64_decode($package->content));
62
  if (is_wp_error($result)) {
63
  $response = $this->installFailureResponse(
64
  $result->get_error_message(), $package
66
  } else {
67
  $response = array('status' => 'success');
68
  }
69
+ $repo->storeLicense($package, $license);
70
  }
71
 
72
  return json_encode($response);
81
  */
82
  public function update() {
83
  $extension = AAM_Core_Request::post('extension');
84
+ $list = AAM_Core_Compatibility::getExtensionList();
85
 
86
+ if (!empty($list[$extension]['license'])) {
87
+ $response = $this->install($list[$extension]['license']);
 
88
  } else {
89
  $response = json_encode(array(
90
  'status' => 'failure',
100
  * @return type
101
  */
102
  public function check() {
103
+ AAM_Extension_Repository::getInstance()->check();
 
 
 
 
104
 
105
  return json_encode(array('status' => 'success'));
106
  }
107
 
108
+ public function getList($type) {
109
+ $response = array();
110
+
111
+ foreach(AAM_Extension_Repository::getInstance()->getList() as $item) {
112
+ if ($item['type'] == $type) {
113
+ $response[] = $item;
114
+ }
115
+ }
116
+
117
+ return $response;
118
+ }
119
+
120
  /**
121
  * Install extension failure response
122
  *
139
  );
140
  }
141
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
142
  /**
143
  * Register Extension feature
144
  *
147
  * @access public
148
  */
149
  public static function register() {
150
+ if (is_main_site()) {
151
+ $cap = AAM_Core_Config::get(self::getAccessOption(), 'administrator');
152
+
153
+ AAM_Backend_Feature::registerFeature((object) array(
154
+ 'uid' => 'extension',
155
+ 'position' => 999,
156
+ 'title' => __('Extensions', AAM_KEY),
157
+ 'capability' => $cap,
158
+ 'notification' => self::getNotification(),
159
+ 'subjects' => array(
160
+ 'AAM_Core_Subject_Role'
161
+ ),
162
+ 'view' => __CLASS__
163
+ ));
164
+ }
165
  }
166
 
167
  /**
169
  * @return int
170
  */
171
  protected static function getNotification() {
 
 
172
  $count = 0;
173
 
174
+ foreach(AAM_Extension_Repository::getInstance()->getList() as $extension) {
175
+ if ($extension['status'] == AAM_Extension_Repository::STATUS_UPDATE) {
 
 
 
 
176
  $count++;
177
  }
178
  }
179
 
180
+ return ($count ? $count : '');
181
  }
182
 
183
  }
Application/Backend/Feature/LoginRedirect.php CHANGED
@@ -19,15 +19,10 @@ class AAM_Backend_Feature_LoginRedirect extends AAM_Backend_Feature_Abstract {
19
  *
20
  */
21
  public function save() {
22
- $param = AAM_Core_Request::post('param');
23
- $value = AAM_Core_Request::post('value');
24
- $subject = AAM_Backend_View::getSubject();
25
 
26
- if ($this->isDefault()) {
27
- AAM_Core_Config::set($param, $value);
28
- } else {
29
- do_action('aam-login-redirect-save-action', $subject, $param, $value);
30
- }
31
 
32
  return json_encode(array('status' => 'success'));
33
  }
@@ -37,7 +32,8 @@ class AAM_Backend_Feature_LoginRedirect extends AAM_Backend_Feature_Abstract {
37
  * @return type
38
  */
39
  public function reset() {
40
- do_action('aam-login-redirect-reset-action', AAM_Backend_View::getSubject());
 
41
 
42
  return json_encode(array('status' => 'success'));
43
  }
@@ -50,22 +46,31 @@ class AAM_Backend_Feature_LoginRedirect extends AAM_Backend_Feature_Abstract {
50
  return (AAM_Backend_View::getSubject()->getUID() == 'default');
51
  }
52
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
53
  /**
54
  *
55
  * @param type $option
56
  * @return type
57
  */
58
  public function getOption($option, $default = null) {
59
- $value = AAM_Core_Config::get($option, $default);
60
-
61
- if (!$this->isDefault()) {
62
- $subject = AAM_Backend_View::getSubject();
63
- $value = apply_filters(
64
- 'aam-login-redirect-option-filter', $value, $option, $subject
65
- );
66
- }
67
 
68
- return $value;
69
  }
70
 
71
  /**
19
  *
20
  */
21
  public function save() {
22
+ $param = AAM_Core_Request::post('param');
23
+ $value = AAM_Core_Request::post('value');
 
24
 
25
+ AAM_Backend_View::getSubject()->getObject('loginRedirect')->save($param, $value);
 
 
 
 
26
 
27
  return json_encode(array('status' => 'success'));
28
  }
32
  * @return type
33
  */
34
  public function reset() {
35
+ $subject = AAM_Backend_View::getSubject();
36
+ $subject->getObject('loginRedirect')->reset();
37
 
38
  return json_encode(array('status' => 'success'));
39
  }
46
  return (AAM_Backend_View::getSubject()->getUID() == 'default');
47
  }
48
 
49
+ /**
50
+ * Check inheritance status
51
+ *
52
+ * Check if redirect settings are overwritten
53
+ *
54
+ * @return boolean
55
+ *
56
+ * @access protected
57
+ */
58
+ protected function isOverwritten() {
59
+ $object = AAM_Backend_View::getSubject()->getObject('loginRedirect');
60
+
61
+ return $object->isOverwritten();
62
+ }
63
+
64
  /**
65
  *
66
  * @param type $option
67
  * @return type
68
  */
69
  public function getOption($option, $default = null) {
70
+ $object = AAM_Backend_View::getSubject()->getObject('loginRedirect');
71
+ $value = $object->get($option);
 
 
 
 
 
 
72
 
73
+ return (!is_null($value) ? $value : $default);
74
  }
75
 
76
  /**
Application/Backend/Feature/Post.php CHANGED
@@ -55,7 +55,7 @@ class AAM_Backend_Feature_Post extends AAM_Backend_Feature_Abstract {
55
  null,
56
  'type',
57
  $type->labels->name,
58
- 'drilldown,manage'
59
  );
60
  }
61
 
@@ -115,7 +115,7 @@ class AAM_Backend_Feature_Post extends AAM_Backend_Feature_Abstract {
115
  get_edit_post_link($record->ID, 'link'),
116
  'post',
117
  $record->post_title,
118
- 'manage,edit'
119
  );
120
  } else { //term
121
  $response['data'][] = array(
@@ -123,7 +123,7 @@ class AAM_Backend_Feature_Post extends AAM_Backend_Feature_Abstract {
123
  get_edit_term_link($record->term_id, $record->taxonomy),
124
  'term',
125
  $record->name,
126
- 'manage,edit'
127
  );
128
  }
129
  }
@@ -255,9 +255,7 @@ class AAM_Backend_Feature_Post extends AAM_Backend_Feature_Abstract {
255
  $id = AAM_Core_Request::post('objectId', null);
256
 
257
  $param = AAM_Core_Request::post('param');
258
- $value = filter_var(
259
- AAM_Core_Request::post('value'), FILTER_VALIDATE_BOOLEAN
260
- );
261
 
262
  //clear cache
263
  AAM_Core_Cache::clear();
@@ -353,14 +351,22 @@ class AAM_Backend_Feature_Post extends AAM_Backend_Feature_Abstract {
353
  *
354
  * @return type
355
  */
356
- public function getCurrentPost() {
357
- $id = intval(AAM_Core_Request::post('oid'));
 
 
 
358
 
359
- if ($id) {
360
- $post = get_post($id);
 
 
 
 
 
361
  }
362
 
363
- return (isset($post) ? $post : null);
364
  }
365
 
366
  /**
55
  null,
56
  'type',
57
  $type->labels->name,
58
+ apply_filters('aam-type-row-actions-filter', 'drilldown,manage', $type)
59
  );
60
  }
61
 
115
  get_edit_post_link($record->ID, 'link'),
116
  'post',
117
  $record->post_title,
118
+ apply_filters('aam-post-row-actions-filter', 'manage,edit', $record)
119
  );
120
  } else { //term
121
  $response['data'][] = array(
123
  get_edit_term_link($record->term_id, $record->taxonomy),
124
  'term',
125
  $record->name,
126
+ apply_filters('aam-term-row-actions-filter', 'manage,edit', $record)
127
  );
128
  }
129
  }
255
  $id = AAM_Core_Request::post('objectId', null);
256
 
257
  $param = AAM_Core_Request::post('param');
258
+ $value = AAM_Core_Request::post('value');
 
 
259
 
260
  //clear cache
261
  AAM_Core_Cache::clear();
351
  *
352
  * @return type
353
  */
354
+ public function getCurrentObject() {
355
+ $object = (object) array(
356
+ 'id' => urldecode(AAM_Core_Request::post('oid')),
357
+ 'type' => AAM_Core_Request::post('otype')
358
+ );
359
 
360
+ if ($object->id) {
361
+ if (strpos($object->id, '|') !== false) { //term
362
+ $part = explode('|', $object->id);
363
+ $object->term = get_term($part[0], $part[1]);
364
+ } else {
365
+ $object->post = get_post($object->id);
366
+ }
367
  }
368
 
369
+ return $object;
370
  }
371
 
372
  /**
Application/Backend/Feature/Redirect.php CHANGED
@@ -19,15 +19,10 @@ class AAM_Backend_Feature_Redirect extends AAM_Backend_Feature_Abstract {
19
  *
20
  */
21
  public function save() {
22
- $param = AAM_Core_Request::post('param');
23
- $value = AAM_Core_Request::post('value');
24
- $subject = AAM_Backend_View::getSubject();
25
 
26
- if ($this->isDefault()) {
27
- AAM_Core_Config::set($param, $value);
28
- } else {
29
- do_action('aam-action-redirect-save', $subject, $param, $value);
30
- }
31
 
32
  return json_encode(array('status' => 'success'));
33
  }
@@ -37,7 +32,8 @@ class AAM_Backend_Feature_Redirect extends AAM_Backend_Feature_Abstract {
37
  * @return type
38
  */
39
  public function reset() {
40
- do_action('aam-action-redirect-reset', AAM_Backend_View::getSubject());
 
41
 
42
  return json_encode(array('status' => 'success'));
43
  }
@@ -50,22 +46,31 @@ class AAM_Backend_Feature_Redirect extends AAM_Backend_Feature_Abstract {
50
  return AAM_Backend_View::getSubject()->getUID() == 'default';
51
  }
52
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
53
  /**
54
  *
55
  * @param type $option
56
  * @return type
57
  */
58
  public function getOption($option, $default = null) {
59
- $value = AAM_Core_Config::get($option, $default);
60
-
61
- if (!$this->isDefault()) {
62
- $subject = AAM_Backend_View::getSubject();
63
- $value = apply_filters(
64
- 'aam-filter-redirect-option', $value, $option, $subject
65
- );
66
- }
67
 
68
- return $value;
69
  }
70
 
71
  /**
19
  *
20
  */
21
  public function save() {
22
+ $param = AAM_Core_Request::post('param');
23
+ $value = AAM_Core_Request::post('value');
 
24
 
25
+ AAM_Backend_View::getSubject()->getObject('redirect')->save($param, $value);
 
 
 
 
26
 
27
  return json_encode(array('status' => 'success'));
28
  }
32
  * @return type
33
  */
34
  public function reset() {
35
+ $subject = AAM_Backend_View::getSubject();
36
+ $subject->getObject('redirect')->reset();
37
 
38
  return json_encode(array('status' => 'success'));
39
  }
46
  return AAM_Backend_View::getSubject()->getUID() == 'default';
47
  }
48
 
49
+ /**
50
+ * Check inheritance status
51
+ *
52
+ * Check if redirect settings are overwritten
53
+ *
54
+ * @return boolean
55
+ *
56
+ * @access protected
57
+ */
58
+ protected function isOverwritten() {
59
+ $object = AAM_Backend_View::getSubject()->getObject('redirect');
60
+
61
+ return $object->isOverwritten();
62
+ }
63
+
64
  /**
65
  *
66
  * @param type $option
67
  * @return type
68
  */
69
  public function getOption($option, $default = null) {
70
+ $object = AAM_Backend_View::getSubject()->getObject('redirect');
71
+ $value = $object->get($option);
 
 
 
 
 
 
72
 
73
+ return (!is_null($value) ? $value : $default);
74
  }
75
 
76
  /**
Application/Backend/Feature/Role.php CHANGED
@@ -61,7 +61,11 @@ class AAM_Backend_Feature_Role {
61
  $id,
62
  $uc,
63
  translate_user_role($data['name']),
64
- 'manage,edit,clone' . ($uc || !$allow ? '' : ',delete'),
 
 
 
 
65
  AAM_Core_API::maxLevel($data['capabilities'])
66
  );
67
  }
61
  $id,
62
  $uc,
63
  translate_user_role($data['name']),
64
+ apply_filters(
65
+ 'aam-role-row-actions-filter',
66
+ 'manage,edit,clone' . ($uc || !$allow ? '' : ',delete'),
67
+ $data
68
+ ),
69
  AAM_Core_API::maxLevel($data['capabilities'])
70
  );
71
  }
Application/Backend/Feature/Security.php ADDED
@@ -0,0 +1,83 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
+ * Backend security manager
12
+ *
13
+ * @package AAM
14
+ * @author Vasyl Martyniuk <vasyl@vasyltech.com>
15
+ */
16
+ class AAM_Backend_Feature_Security extends AAM_Backend_Feature_Abstract {
17
+
18
+ /**
19
+ * @inheritdoc
20
+ */
21
+ public static function getAccessOption() {
22
+ return 'feature.security.capability';
23
+ }
24
+
25
+ /**
26
+ * @inheritdoc
27
+ */
28
+ public static function getTemplate() {
29
+ return 'security.phtml';
30
+ }
31
+
32
+ /**
33
+ * Save AAM utility options
34
+ *
35
+ * @return string
36
+ *
37
+ * @access public
38
+ */
39
+ public function save() {
40
+ $param = AAM_Core_Request::post('param');
41
+ $value = stripslashes(AAM_Core_Request::post('value'));
42
+
43
+ AAM_Core_Config::set($param, $value);
44
+
45
+ return json_encode(array('status' => 'success'));
46
+ }
47
+
48
+ /**
49
+ *
50
+ * @return type
51
+ */
52
+ public function getOptionList() {
53
+ $filename = dirname(__FILE__) . '/../View/SecurityOptionList.php';
54
+ $options = include $filename;
55
+
56
+ return apply_filters('aam-security-option-list-filter', $options);
57
+ }
58
+
59
+ /**
60
+ * Register Contact/Hire feature
61
+ *
62
+ * @return void
63
+ *
64
+ * @access public
65
+ */
66
+ public static function register() {
67
+ if (is_main_site()) {
68
+ $cap = AAM_Core_Config::get(self::getAccessOption(), 'administrator');
69
+
70
+ AAM_Backend_Feature::registerFeature((object) array(
71
+ 'uid' => 'security',
72
+ 'position' => 90,
73
+ 'title' => __('Security', AAM_KEY),
74
+ 'capability' => $cap,
75
+ 'subjects' => array(
76
+ 'AAM_Core_Subject_Role'
77
+ ),
78
+ 'view' => __CLASS__
79
+ ));
80
+ }
81
+ }
82
+
83
+ }
Application/Backend/Feature/Teaser.php CHANGED
@@ -19,15 +19,10 @@ class AAM_Backend_Feature_Teaser extends AAM_Backend_Feature_Abstract {
19
  *
20
  */
21
  public function save() {
22
- $param = AAM_Core_Request::post('param');
23
- $value = AAM_Core_Request::post('value');
24
- $subject = AAM_Backend_View::getSubject();
25
 
26
- if ($this->isDefault()) {
27
- AAM_Core_Config::set($param, $value);
28
- } else {
29
- do_action('aam-action-teaser-save', $subject, $param, $value);
30
- }
31
 
32
  return json_encode(array('status' => 'success'));
33
  }
@@ -37,7 +32,8 @@ class AAM_Backend_Feature_Teaser extends AAM_Backend_Feature_Abstract {
37
  * @return type
38
  */
39
  public function reset() {
40
- do_action('aam-action-teaser-reset', AAM_Backend_View::getSubject());
 
41
 
42
  return json_encode(array('status' => 'success'));
43
  }
@@ -50,22 +46,31 @@ class AAM_Backend_Feature_Teaser extends AAM_Backend_Feature_Abstract {
50
  return (AAM_Backend_View::getSubject()->getUID() == 'default');
51
  }
52
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
53
  /**
54
  *
55
  * @param type $option
56
  * @return type
57
  */
58
  public function getOption($option, $default = null) {
59
- $value = AAM_Core_Config::get($option, $default);
60
-
61
- if (!$this->isDefault()) {
62
- $subject = AAM_Backend_View::getSubject();
63
- $value = apply_filters(
64
- 'aam-filter-teaser-option', $value, $option, $subject
65
- );
66
- }
67
 
68
- return $value;
69
  }
70
 
71
  /**
19
  *
20
  */
21
  public function save() {
22
+ $param = AAM_Core_Request::post('param');
23
+ $value = AAM_Core_Request::post('value');
 
24
 
25
+ AAM_Backend_View::getSubject()->getObject('teaser')->save($param, $value);
 
 
 
 
26
 
27
  return json_encode(array('status' => 'success'));
28
  }
32
  * @return type
33
  */
34
  public function reset() {
35
+ $subject = AAM_Backend_View::getSubject();
36
+ $subject->getObject('teaser')->reset();
37
 
38
  return json_encode(array('status' => 'success'));
39
  }
46
  return (AAM_Backend_View::getSubject()->getUID() == 'default');
47
  }
48
 
49
+ /**
50
+ * Check inheritance status
51
+ *
52
+ * Check if teaser settings are overwritten
53
+ *
54
+ * @return boolean
55
+ *
56
+ * @access protected
57
+ */
58
+ protected function isOverwritten() {
59
+ $object = AAM_Backend_View::getSubject()->getObject('teaser');
60
+
61
+ return $object->isOverwritten();
62
+ }
63
+
64
  /**
65
  *
66
  * @param type $option
67
  * @return type
68
  */
69
  public function getOption($option, $default = null) {
70
+ $object = AAM_Backend_View::getSubject()->getObject('teaser');
71
+ $value = $object->get($option);
 
 
 
 
 
 
72
 
73
+ return (!is_null($value) ? $value : $default);
74
  }
75
 
76
  /**
Application/Backend/Feature/Utility.php CHANGED
@@ -29,6 +29,17 @@ class AAM_Backend_Feature_Utility extends AAM_Backend_Feature_Abstract {
29
  return 'utility.phtml';
30
  }
31
 
 
 
 
 
 
 
 
 
 
 
 
32
  /**
33
  * Save AAM utility options
34
  *
@@ -83,18 +94,20 @@ class AAM_Backend_Feature_Utility extends AAM_Backend_Feature_Abstract {
83
  * @access public
84
  */
85
  public static function register() {
86
- $cap = AAM_Core_Config::get(self::getAccessOption(), 'administrator');
87
-
88
- AAM_Backend_Feature::registerFeature((object) array(
89
- 'uid' => 'utilities',
90
- 'position' => 100,
91
- 'title' => __('Utilities', AAM_KEY),
92
- 'capability' => $cap,
93
- 'subjects' => array(
94
- 'AAM_Core_Subject_Role'
95
- ),
96
- 'view' => __CLASS__
97
- ));
 
 
98
  }
99
 
100
  }
29
  return 'utility.phtml';
30
  }
31
 
32
+ /**
33
+ *
34
+ * @return type
35
+ */
36
+ public function getUtilityOptionList() {
37
+ $filename = dirname(__FILE__) . '/../View/UtilityOptionList.php';
38
+ $options = include $filename;
39
+
40
+ return apply_filters('aam-utility-option-list-filter', $options);
41
+ }
42
+
43
  /**
44
  * Save AAM utility options
45
  *
94
  * @access public
95
  */
96
  public static function register() {
97
+ if (is_main_site()) {
98
+ $cap = AAM_Core_Config::get(self::getAccessOption(), 'administrator');
99
+
100
+ AAM_Backend_Feature::registerFeature((object) array(
101
+ 'uid' => 'utilities',
102
+ 'position' => 100,
103
+ 'title' => __('Utilities', AAM_KEY),
104
+ 'capability' => $cap,
105
+ 'subjects' => array(
106
+ 'AAM_Core_Subject_Role'
107
+ ),
108
+ 'view' => __CLASS__
109
+ ));
110
+ }
111
  }
112
 
113
  }
Application/Backend/Filter.php CHANGED
@@ -55,9 +55,11 @@ class AAM_Backend_Filter {
55
  add_filter('wp_die_handler', array($this, 'backendDie'));
56
 
57
  //add post filter for LIST restriction
58
- add_filter('the_posts', array($this, 'thePosts'), 999, 2);
59
- if (AAM_Core_Config::get('large-post-number', false)) {
60
- add_action('pre_get_posts', array($this, 'preparePostQuery'));
 
 
61
  }
62
 
63
  //some additional filter for user capabilities
@@ -302,10 +304,19 @@ class AAM_Backend_Filter {
302
  if ($this->skip === false) {
303
  $filtered = array();
304
 
305
- foreach ($this->fetchPosts($query) as $id) {
306
- if (AAM::getUser()->getObject('post', $id)->has('backend.list')) {
307
- $filtered[] = $id;
 
 
 
 
 
 
 
 
308
  }
 
309
  }
310
 
311
  if (isset($query->query_vars['post__not_in'])) {
@@ -370,10 +381,12 @@ class AAM_Backend_Filter {
370
  switch($args[0]) {
371
  case 'edit_post':
372
  $object = AAM::getUser()->getObject('post', $args[2]);
373
- $edit = $object->has('backend.edit');
374
- $others = $object->has('backend.edit_others');
375
- if ($edit || ($others && !$this->isAuthor($object->getPost()))) {
376
- $allCaps = $this->restrictPostActions($allCaps, $metaCaps);
 
 
377
  }
378
  break;
379
 
55
  add_filter('wp_die_handler', array($this, 'backendDie'));
56
 
57
  //add post filter for LIST restriction
58
+ if (!AAM::isAAM()) {
59
+ add_filter('the_posts', array($this, 'thePosts'), 999, 2);
60
+ if (AAM_Core_Config::get('large-post-number', false)) {
61
+ add_action('pre_get_posts', array($this, 'preparePostQuery'));
62
+ }
63
  }
64
 
65
  //some additional filter for user capabilities
304
  if ($this->skip === false) {
305
  $filtered = array();
306
 
307
+ if (AAM_Core_Cache::has('post__not_in')) {
308
+ $filtered = AAM_Core_Cache::get('post__not_in');
309
+ } else {
310
+ foreach ($this->fetchPosts($query) as $id) {
311
+ $object = AAM::getUser()->getObject('post', $id);
312
+ $list = $object->has('backend.list');
313
+ $others = $object->has('backend.list_others');
314
+
315
+ if ($list || ($others && !$this->isAuthor($object->getPost()))) {
316
+ $filtered[] = $id;
317
+ }
318
  }
319
+ AAM_Core_Cache::set(AAM::getUser(), 'post__not_in', $filtered);
320
  }
321
 
322
  if (isset($query->query_vars['post__not_in'])) {
381
  switch($args[0]) {
382
  case 'edit_post':
383
  $object = AAM::getUser()->getObject('post', $args[2]);
384
+ if ($object->getPost()->post_status != 'auto-draft') {
385
+ $edit = $object->has('backend.edit');
386
+ $others = $object->has('backend.edit_others');
387
+ if ($edit || ($others && !$this->isAuthor($object->getPost()))) {
388
+ $allCaps = $this->restrictPostActions($allCaps, $metaCaps);
389
+ }
390
  }
391
  break;
392
 
Application/Backend/Manager.php CHANGED
@@ -70,14 +70,19 @@ class AAM_Backend_Manager {
70
  add_action('profile_update', 'AAM_Core_Cache::clear');
71
 
72
  //term & post CRUD hooks
73
- add_action('delete_term', 'AAM_Core_Cache::clear');
74
- add_action('edited_term', 'AAM_Core_Cache::clear');
75
- add_action('save_post', 'AAM_Core_Cache::clear');
 
 
76
 
77
  //extend post inline actions
78
  add_filter('page_row_actions', array($this, 'postRowActions'), 10, 2);
79
  add_filter('post_row_actions', array($this, 'postRowActions'), 10, 2);
80
 
 
 
 
81
  //check extension version
82
  $this->checkExtensionList();
83
 
@@ -129,52 +134,25 @@ class AAM_Backend_Manager {
129
  *
130
  */
131
  protected function checkExtensionList() {
132
- $list = AAM_Core_Repository::getInstance()->getExtensionList();
133
 
134
- foreach($list as $extension) {
135
- if ($extension->status == AAM_Core_Repository::STATUS_UPDATE) {
136
  AAM_Core_Console::add(
137
  sprintf(
138
  __('Extension %s has new update available for download.'),
139
- $extension->title
140
  )
141
  );
142
- }
143
- if (!empty($extension->violation) && ($extension->status != AAM_Core_Repository::STATUS_DOWNLOAD)) {
144
  AAM_Core_Console::add(
145
  sprintf(
146
- __('Extension %s is not licensed for this website and will be removed automatically at any time. Insert correct license on the Extensions tab or contact us immediately.'),
147
- $extension->title
148
  )
149
  );
150
  }
151
  }
152
-
153
- //TODO - Remove in Dec 2016
154
- $this->checkRedundantExtensions();
155
- }
156
-
157
- /**
158
- * @todo Remove in Feb 2016
159
- */
160
- protected function checkRedundantExtensions() {
161
- $basedir = AAM_Core_Repository::getInstance()->getBasedir();
162
-
163
- //iterate through each active extension and load it
164
- if (file_exists($basedir)) {
165
- foreach (scandir($basedir) as $extension) {
166
- if (!in_array($extension, array('.', '..'))) {
167
- if (!preg_match('/^[a-z]{1}[a-z\-]+$/', $extension)) {
168
- AAM_Core_Console::add(
169
- sprintf(
170
- AAM_Backend_View_Helper::preparePhrase('Please manually remove [%s] and re-install the extension if necessary', 'b'),
171
- $basedir . '/' . $extension
172
- )
173
- );
174
- }
175
- }
176
- }
177
- }
178
  }
179
 
180
  /**
@@ -280,7 +258,27 @@ class AAM_Backend_Manager {
280
  $cap = AAM_Core_Config::get('page.capability', 'administrator');
281
 
282
  if (AAM::getUser()->hasCapability($cap)) {
283
- $url = admin_url('admin.php?page=aam&oid=' . $post->ID . '#post');
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
284
 
285
  $actions['aam'] = '<a href="' . $url . '" target="_blank">';
286
  $actions['aam'] .= __('Access', AAM_KEY) . '</a>';
@@ -486,7 +484,7 @@ class AAM_Backend_Manager {
486
 
487
  //clean buffer to make sure that nothing messing around with system
488
  while (@ob_end_clean()){}
489
-
490
  //process ajax request
491
  $cap = AAM_Core_Config::get('page.capability', 'administrator');
492
 
70
  add_action('profile_update', 'AAM_Core_Cache::clear');
71
 
72
  //term & post CRUD hooks
73
+ if (AAM_Core_Config::get('cache-auto-clear', true)) {
74
+ add_action('delete_term', 'AAM_Core_Cache::clear');
75
+ add_action('edited_term', 'AAM_Core_Cache::clear');
76
+ add_action('save_post', 'AAM_Core_Cache::clear');
77
+ }
78
 
79
  //extend post inline actions
80
  add_filter('page_row_actions', array($this, 'postRowActions'), 10, 2);
81
  add_filter('post_row_actions', array($this, 'postRowActions'), 10, 2);
82
 
83
+ //extend term inline actions
84
+ add_filter('tag_row_actions', array($this, 'tagRowActions'), 10, 2);
85
+
86
  //check extension version
87
  $this->checkExtensionList();
88
 
134
  *
135
  */
136
  protected function checkExtensionList() {
137
+ $list = AAM_Extension_Repository::getInstance()->getList();
138
 
139
+ foreach($list as $item) {
140
+ if ($item['status'] == AAM_Extension_Repository::STATUS_UPDATE) {
141
  AAM_Core_Console::add(
142
  sprintf(
143
  __('Extension %s has new update available for download.'),
144
+ $item['title']
145
  )
146
  );
147
+ }elseif ($item['status'] == AAM_Extension_Repository::STATUS_INACTIVE) {
 
148
  AAM_Core_Console::add(
149
  sprintf(
150
+ __('License violation for %s extension. Enter valid license on the Extensions tab or contact us immediately.'),
151
+ $item['title']
152
  )
153
  );
154
  }
155
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
156
  }
157
 
158
  /**
258
  $cap = AAM_Core_Config::get('page.capability', 'administrator');
259
 
260
  if (AAM::getUser()->hasCapability($cap)) {
261
+ $url = admin_url('admin.php?page=aam&oid=' . $post->ID . '&otype=post#post');
262
+
263
+ $actions['aam'] = '<a href="' . $url . '" target="_blank">';
264
+ $actions['aam'] .= __('Access', AAM_KEY) . '</a>';
265
+ }
266
+
267
+ return $actions;
268
+ }
269
+
270
+ /**
271
+ *
272
+ * @param type $actions
273
+ * @param type $term
274
+ * @return string
275
+ */
276
+ public function tagRowActions($actions, $term) {
277
+ $cap = AAM_Core_Config::get('page.capability', 'administrator');
278
+
279
+ if (AAM::getUser()->hasCapability($cap)) {
280
+ $oid = $term->term_id . '|' . $term->taxonomy;
281
+ $url = admin_url('admin.php?page=aam&oid=' . $oid . '&otype=term#post');
282
 
283
  $actions['aam'] = '<a href="' . $url . '" target="_blank">';
284
  $actions['aam'] .= __('Access', AAM_KEY) . '</a>';
484
 
485
  //clean buffer to make sure that nothing messing around with system
486
  while (@ob_end_clean()){}
487
+
488
  //process ajax request
489
  $cap = AAM_Core_Config::get('page.capability', 'administrator');
490
 
Application/Backend/View.php CHANGED
@@ -59,6 +59,7 @@ class AAM_Backend_View {
59
  AAM_Backend_Feature_Teaser::register();
60
  AAM_Backend_Feature_LoginRedirect::register();
61
  AAM_Backend_Feature_Extension::register();
 
62
  AAM_Backend_Feature_Utility::register();
63
  AAM_Backend_Feature_Contact::register();
64
 
@@ -198,7 +199,7 @@ class AAM_Backend_View {
198
  $user = new WP_User(AAM_Core_Request::post('user'));
199
  $max = AAM_Core_API::maxLevel(wp_get_current_user()->allcaps);
200
 
201
- if ($max > AAM_Core_API::maxLevel($user->allcaps)) {
202
  AAM_Core_API::updateOption(
203
  'aam-user-switch-' . $user->ID, get_current_user_id()
204
  );
59
  AAM_Backend_Feature_Teaser::register();
60
  AAM_Backend_Feature_LoginRedirect::register();
61
  AAM_Backend_Feature_Extension::register();
62
+ AAM_Backend_Feature_Security::register();
63
  AAM_Backend_Feature_Utility::register();
64
  AAM_Backend_Feature_Contact::register();
65
 
199
  $user = new WP_User(AAM_Core_Request::post('user'));
200
  $max = AAM_Core_API::maxLevel(wp_get_current_user()->allcaps);
201
 
202
+ if ($max >= AAM_Core_API::maxLevel($user->allcaps)) {
203
  AAM_Core_API::updateOption(
204
  'aam-user-switch-' . $user->ID, get_current_user_id()
205
  );
Application/Backend/View/CodePinch.php CHANGED
@@ -24,11 +24,6 @@
24
  */
25
  class AAM_Backend_View_CodePinch {
26
 
27
- /**
28
- * Plugin's slug
29
- */
30
- const SLUG = 'WP Error Fix';
31
-
32
  /**
33
  * Single instance of itself
34
  *
@@ -119,10 +114,7 @@ class AAM_Backend_View_CodePinch {
119
  * @static
120
  */
121
  public static function isInstalled() {
122
- return in_array(
123
- self::getStatus(),
124
- array('latest_installed', 'update_available')
125
- );
126
  }
127
 
128
  /**
@@ -133,17 +125,24 @@ class AAM_Backend_View_CodePinch {
133
  * @access protected
134
  * @static
135
  */
136
- protected static function getStatus() {
137
  static $status = null;
138
 
139
  if (is_null($status)) {
140
- require_once( ABSPATH . 'wp-admin/includes/plugin-install.php' );
141
-
142
- $args = array('slug' => self::SLUG);
143
- $plugin = plugins_api('plugin_information', $args);
144
- $result = install_plugin_install_status($plugin);
145
-
146
- $status = empty($result) ? 'failed' : $result['status'];
 
 
 
 
 
 
 
147
  }
148
 
149
  return $status;
24
  */
25
  class AAM_Backend_View_CodePinch {
26
 
 
 
 
 
 
27
  /**
28
  * Single instance of itself
29
  *
114
  * @static
115
  */
116
  public static function isInstalled() {
117
+ return self::find();
 
 
 
118
  }
119
 
120
  /**
125
  * @access protected
126
  * @static
127
  */
128
+ protected static function find() {
129
  static $status = null;
130
 
131
  if (is_null($status)) {
132
+ $status = false;
133
+
134
+ if (file_exists(ABSPATH . 'wp-admin/includes/plugin.php')) {
135
+ require_once ABSPATH . 'wp-admin/includes/plugin.php';
136
+ }
137
+
138
+ if (function_exists('get_plugin_data')) {
139
+ foreach(get_plugins() as $plugin) {
140
+ if ($plugin['Name'] == 'CodePinch') {
141
+ $status = true;
142
+ break;
143
+ }
144
+ }
145
+ }
146
  }
147
 
148
  return $status;
Application/Backend/View/PostOptionList.php CHANGED
@@ -32,6 +32,11 @@ return array(
32
  'comment' => array(
33
  'title' => __('Comment', AAM_KEY),
34
  'descr' => __('Restrict access to comment on %s if commenting feature is enabled.', AAM_KEY)
 
 
 
 
 
35
  )
36
  ),
37
  'backend' => array(
32
  'comment' => array(
33
  'title' => __('Comment', AAM_KEY),
34
  'descr' => __('Restrict access to comment on %s if commenting feature is enabled.', AAM_KEY)
35
+ ),
36
+ 'protected' => array(
37
+ 'title' => __('Password Protected', AAM_KEY),
38
+ 'sub' => '<small>' . sprintf(__('Password: %s', AAM_KEY), '<b data-preview="frontend.password" id="post-password"></b>' ) . ' <a href="#" class="change-password" data-ref="frontend.password" data-preview-id="post-password">' . __('change', AAM_KEY) . '</a></small>',
39
+ 'descr' => __('Add a password protection for the %s.', AAM_KEY)
40
  )
41
  ),
42
  'backend' => array(
Application/Backend/View/ProductList.php DELETED
@@ -1,117 +0,0 @@
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
- return array(
11
- array(
12
- 'title' => '<span class="aam-highlight">AAM Plus Package</span>',
13
- 'id' => 'AAM Plus Package',
14
- 'type' => 'commercial',
15
- 'price' => '$30 <small>USD</small>',
16
- 'description' => 'Our best selling extension that allows you to manage access to unlimited number of posts, pages or custom post types and define default access to ALL posts, pages, custom post types, categories or custom taxonomies. <a href="https://vasyltech.com/blog/manage-access-to-posts-and-pages" target="_blank">Read more.</a>',
17
- 'storeURL' => 'https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=FGAHULDEFZV4U',
18
- 'status' => AAM_Core_Repository::getInstance()->extensionStatus('AAM Plus Package'),
19
- 'version' => AAM_Core_Repository::getInstance()->getExtensionVersion('AAM Plus Package')
20
- ),
21
- array(
22
- 'title' => 'AAM Redirect',
23
- 'id' => 'AAM Redirect',
24
- 'type' => 'commercial',
25
- 'price' => '$10 <small>USD</small>',
26
- 'new' => true,
27
- 'description' => 'Setup customized redirect or "Access Denied" message for each role, individual user or visitors. <a href="http://vasyltech.com/blog/aam-redirect-extension" target="_blank">Read more.</a>',
28
- 'storeURL' => 'https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=QAM3P45X6PKUU',
29
- 'status' => AAM_Core_Repository::getInstance()->extensionStatus('AAM Redirect'),
30
- 'version' => AAM_Core_Repository::getInstance()->getExtensionVersion('AAM Redirect')
31
- ),
32
- array(
33
- 'title' => 'AAM Content Teaser',
34
- 'id' => 'AAM Content Teaser',
35
- 'type' => 'commercial',
36
- 'price' => '$10 <small>USD</small>',
37
- 'new' => true,
38
- 'description' => 'Setup customized teaser message for any user role, individual user or visitors. <a href="http://vasyltech.com/blog/aam-content-teaser" target="_blank">Read more.</a>',
39
- 'storeURL' => 'https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=3NG4CZX3WEH7L',
40
- 'status' => AAM_Core_Repository::getInstance()->extensionStatus('AAM Content Teaser'),
41
- 'version' => AAM_Core_Repository::getInstance()->getExtensionVersion('AAM Content Teaser')
42
- ),
43
- array(
44
- 'title' => 'AAM Login Redirect',
45
- 'id' => 'AAM Login Redirect',
46
- 'type' => 'commercial',
47
- 'price' => '$10 <small>USD</small>',
48
- 'new' => true,
49
- 'description' => 'Setup customized login redirect for any user or user role. <a href="http://vasyltech.com/blog/aam-login-redirect" target="_blank">Read more.</a>',
50
- 'storeURL' => 'https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=PQCF4AEK856TG',
51
- 'status' => AAM_Core_Repository::getInstance()->extensionStatus('AAM Login Redirect'),
52
- 'version' => AAM_Core_Repository::getInstance()->getExtensionVersion('AAM Login Redirect')
53
- ),
54
- array(
55
- 'title' => 'AAM Role Hierarchy',
56
- 'id' => 'AAM Role Hierarchy',
57
- 'type' => 'commercial',
58
- 'price' => '$15 <small>USD</small>',
59
- 'new' => true,
60
- 'description' => 'Create complex role hierarchy and automatically inherit access settings from parent roles. <a href="https://vasyltech.com/blog/aam-role-hierarchy" target="_blank">Read more.</a>',
61
- 'storeURL' => 'https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=K8DMZ66SAW8VG',
62
- 'status' => AAM_Core_Repository::getInstance()->extensionStatus('AAM Role Hierarchy'),
63
- 'version' => AAM_Core_Repository::getInstance()->getExtensionVersion('AAM Role Hierarchy')
64
- ),
65
- array(
66
- 'title' => 'AAM Role Filter',
67
- 'id' => 'AAM Role Filter',
68
- 'type' => 'commercial',
69
- 'price' => '$5 <small>USD</small>',
70
- 'description' => 'More advanced user and role administration. Based on user capabilities level, filter list of roles that user can manage. Also prevent from editing, promoting or deleting higher level users.',
71
- 'storeURL' => 'https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=G9V4BT3T8WJSN',
72
- 'status' => AAM_Core_Repository::getInstance()->extensionStatus('AAM Role Filter'),
73
- 'version' => AAM_Core_Repository::getInstance()->getExtensionVersion('AAM Role Filter')
74
- ),
75
- array(
76
- 'title' => 'AAM Complete Package',
77
- 'id' => 'AAM Complete Package',
78
- 'type' => 'commercial',
79
- 'price' => '$70 <small>USD</small>',
80
- 'description' => 'Get list of all available premium extensions in one package and <strong>save $10 USD</strong>.',
81
- 'storeURL' => 'https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=THJWEJR3URR8L',
82
- 'status' => AAM_Core_Repository::getInstance()->extensionStatus('AAM Complete Package'),
83
- 'version' => AAM_Core_Repository::getInstance()->getExtensionVersion('AAM Complete Package')
84
- ),
85
- array(
86
- 'title' => 'AAM Multisite',
87
- 'id' => 'AAM Multisite',
88
- 'type' => 'GNU',
89
- 'license' => 'AAMMULTISITE',
90
- 'description' => 'Convenient way to navigate between different sites in the Network Admin Panel.',
91
- 'status' => AAM_Core_Repository::getInstance()->extensionStatus('AAM Multisite'),
92
- 'version' => AAM_Core_Repository::getInstance()->getExtensionVersion('AAM Multisite')
93
- ),
94
- array(
95
- 'title' => 'AAM ConfigPress',
96
- 'id' => 'AAM ConfigPress',
97
- 'type' => 'GNU',
98
- 'license' => 'AAMCONFIGPRESS',
99
- 'description' => 'Extension to manage AAM core functionality with advanced configuration settings.',
100
- 'status' => AAM_Core_Repository::getInstance()->extensionStatus('AAM ConfigPress'),
101
- 'version' => AAM_Core_Repository::getInstance()->getExtensionVersion('AAM ConfigPress')
102
- ),
103
- array(
104
- 'title' => 'CodePinch',
105
- 'id' => 'WP Error Fix',
106
- 'type' => 'plugin',
107
- 'description' => '<span class="aam-highlight">Highly recommended!</span> Patent-pending technology that provides solutions to PHP errors within hours, preventing costly maintenance time and keeping your WordPress site error. <a href="http://codepinch.io" target="_blank">Read more.</a>',
108
- 'status' => AAM_Core_Repository::getInstance()->pluginStatus('WP Error Fix')
109
- ),
110
- array(
111
- 'title' => 'ConfigPress',
112
- 'id' => 'ConfigPress',
113
- 'type' => 'plugin',
114
- 'description' => 'Development tool with an easy way to manage all your website custom settings. <a href="https://vasyltech.com/config-press" target="_blank">Read more.</a>',
115
- 'status' => AAM_Core_Repository::getInstance()->pluginStatus('ConfigPress')
116
- )
117
- );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
Application/Backend/View/SecurityOptionList.php ADDED
@@ -0,0 +1,26 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
+ return array(
11
+ 'login-timeout' => array(
12
+ 'title' => __('Login Timeout', AAM_KEY),
13
+ 'descr' => sprintf(__('Delay the login process for %s second to significantly reduce the chance for brute force or dictionary attack.', AAM_KEY), AAM_Core_Config::get('security.login.timeout', 1)),
14
+ 'value' => AAM_Core_Config::get('login-timeout', false)
15
+ ),
16
+ 'login-ip-track' => array(
17
+ 'title' => __('Track IP Address', AAM_KEY),
18
+ 'descr' => __('Track the IP address for the last successful user login and trigger double authentication via email when the same username/password combination is used to login from a different IP address.', AAM_KEY),
19
+ 'value' => AAM_Core_Config::get('login-ip-track', false),
20
+ ),
21
+ 'brute-force-lockout' => array(
22
+ 'title' => __('Brute Force Lockout', AAM_KEY),
23
+ 'descr' => sprintf(__('Automatically reject login attempts if number of unsuccessful login attempts is more than %s over the period of %s.', AAM_KEY), AAM_Core_Config::get('security.login.attempts', 20), AAM_Core_Config::get('security.login.period', '2 minutes')),
24
+ 'value' => AAM_Core_Config::get('brute-force-lockout', false),
25
+ )
26
+ );
Application/Backend/View/UtilityOptionList.php ADDED
@@ -0,0 +1,41 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
+ return array(
11
+ 'manage-capability' => array(
12
+ 'title' => __('Edit/Delete Capabilities', AAM_KEY),
13
+ 'descr' => AAM_Backend_View_Helper::preparePhrase('[Please note!] For experienced users only. Allow to edit or delete capabilities', 'b'),
14
+ 'value' => AAM_Core_Config::get('manage-capability', false)
15
+ ),
16
+ 'backend-access-control' => array(
17
+ 'title' => __('Backend Access Control', AAM_KEY),
18
+ 'descr' => __('Allow AAM to manage access to backend resources like backend menu, categories or posts.', AAM_KEY),
19
+ 'value' => AAM_Core_Config::get('backend-access-control', true),
20
+ ),
21
+ 'frontend-access-control' => array(
22
+ 'title' => __('Frontend Access Control', AAM_KEY),
23
+ 'descr' => __('Allow AAM to manage access to frontend resources like pages, categories or posts.', AAM_KEY),
24
+ 'value' => AAM_Core_Config::get('frontend-access-control', true),
25
+ ),
26
+ 'media-access-control' => array(
27
+ 'title' => __('Media Files Access Control', AAM_KEY),
28
+ 'descr' => AAM_Backend_View_Helper::preparePhrase('Allow AAM to manage a physically access to all media files located in the [uploads] folder.', 'strong'),
29
+ 'value' => AAM_Core_Config::get('media-access-control', false),
30
+ ),
31
+ 'cache-auto-clear' => array(
32
+ 'title' => __('Clear cache automatically', AAM_KEY),
33
+ 'descr' => __('Clear AAM cache automatically during post saving or when any category is updated or deleted', AAM_KEY),
34
+ 'value' => AAM_Core_Config::get('cache-auto-clear', true),
35
+ ),
36
+ 'large-post-number' => array(
37
+ 'title' => __('Enhance post filtering', AAM_KEY),
38
+ 'descr' => AAM_Backend_View_Helper::preparePhrase('[Warning!] This may significantly reduce your website load with large amount of posts and categories until AAM caches results. Modify database query to exclude posts that have LIST or LIST TO OTHERS options checked.', 'b'),
39
+ 'value' => AAM_Core_Config::get('large-post-number', false),
40
+ )
41
+ );
Application/Backend/phtml/contact.phtml CHANGED
@@ -13,7 +13,7 @@
13
  <li>Be patient. It might take up to 3 business days for us to response.</li>
14
  </ol>
15
  <h3 class="aam-info text-center">
16
- e-mail: <a href="mailto:vasyl@vasyltech.com" class="aam-highlight">vasyl@vasyltech.com</a>
17
  </h3>
18
  </div>
19
  </div>
13
  <li>Be patient. It might take up to 3 business days for us to response.</li>
14
  </ol>
15
  <h3 class="aam-info text-center">
16
+ e-mail: <a href="mailto:support@aamplugin.com" class="aam-highlight">support@aamplugin.com</a>
17
  </h3>
18
  </div>
19
  </div>
Application/Backend/phtml/extension.phtml CHANGED
@@ -20,15 +20,13 @@
20
  </div>
21
  </div>
22
 
23
- <?php $commercial = $this->getProductList('commercial'); ?>
24
- <?php $free = $this->getProductList('GNU'); ?>
25
- <?php $plugins = $this->getProductList('plugin'); ?>
26
 
27
  <div>
28
  <ul class="nav nav-tabs" role="tablist">
29
  <?php if(count($commercial)) { ?><li role="presentation" class="active"><a href="#premium-extensions" aria-controls="premium-extensions" role="tab" data-toggle="tab"><i class='icon-basket'></i> <?php echo __('Premium', AAM_KEY); ?></a></li><?php } ?>
30
  <?php if(count($free)) { ?><li role="presentation" <?php echo (!count($commercial) ? 'class="active"' : ''); ?>><a href="#free-extensions" aria-controls="free-extensions" role="tab" data-toggle="tab"><i class='icon-download-cloud'></i> <?php echo __('Free', AAM_KEY); ?></a></li><?php } ?>
31
- <?php if(count($plugins)) { ?><li role="presentation" <?php echo (!count($commercial) && !count($free) ? 'class="active"' : ''); ?>><a href="#useful-plugins" aria-controls="help-plugins" role="tab" data-toggle="tab"><i class='icon-thumbs-up-alt'></i> <?php echo __('Useful Plugins', AAM_KEY); ?></a></li><?php } ?>
32
  <li style="float:right;"><a href="#" id="update-check" data-toggle="tooltip" title="<?php echo __('Check For Updates', AAM_KEY); ?>"><small><i class="icon-arrows-cw"></i> <?php echo __('Check', AAM_KEY); ?></small></a></li>
33
  </ul>
34
 
@@ -40,17 +38,19 @@
40
  <?php foreach ($commercial as $product) { ?>
41
  <tr>
42
  <td>
43
- <span class='aam-setting-title'><?php echo $product['title'], (!empty($product['new']) ? ' <span class="badge">NEW</span> ' : ''), (!empty($product['version']) ? ' <small class="text-muted">v' . $product['version'] . '</small>' : ''), ' - ' . ($product['price']); ?></span>
44
  <?php if (!empty($product['license'])) { ?><small class="aam-license-key"><b>License Key:</b> <?php echo $product['license']; ?></small><?php } ?>
45
  <p class="aam-extension-description">
46
  <?php echo $product['description']; ?>
47
  </p>
48
  </td>
49
  <td>
50
- <?php if ($product['status'] == AAM_Core_Repository::STATUS_INSTALLED) { ?>
51
  <span class="aam-extension-installed"><i class="icon-check"></i> <?php echo __('Installed', AAM_KEY); ?></span>
52
- <?php } elseif ($product['status'] == AAM_Core_Repository::STATUS_UPDATE) { ?>
53
  <a href="#" class="btn btn-sm btn-warning btn-block aam-update-extension" data-product="<?php echo $product['id']; ?>"><i class="icon-arrows-cw"></i> <?php echo __('Update', AAM_KEY); ?></a>
 
 
54
  <?php } else { ?>
55
  <a href="<?php echo $product['storeURL']; ?>" target="_blank" class="btn btn-sm btn-success btn-block"><i class="icon-basket"></i> <?php echo __('Purchase', AAM_KEY); ?></a>
56
  <?php } ?>
@@ -72,9 +72,9 @@
72
  </p>
73
  </td>
74
  <td>
75
- <?php if ($product['status'] == AAM_Core_Repository::STATUS_INSTALLED) { ?>
76
  <span class="aam-extension-installed"><i class="icon-check"></i> <?php echo __('Installed', AAM_KEY); ?></span>
77
- <?php } elseif ($product['status'] == AAM_Core_Repository::STATUS_UPDATE) { ?>
78
  <a href="#" class="btn btn-sm btn-warning btn-block aam-update-extension" data-product="<?php echo $product['id']; ?>"><i class="icon-arrows-cw"></i> <?php echo __('Update', AAM_KEY); ?></a>
79
  <?php } else { ?>
80
  <a href="#" class="btn btn-sm btn-success btn-block aam-download-extension" data-license="<?php echo $product['license']; ?>"><i class="icon-download-cloud"></i> <?php echo __('Download', AAM_KEY); ?></a>
@@ -85,29 +85,6 @@
85
  </tbody>
86
  </table>
87
  </div>
88
- <div role="tabpanel" class="tab-pane" id="useful-plugins">
89
- <table class="table table-striped table-bordered">
90
- <tbody>
91
- <?php foreach ($plugins as $product) { ?>
92
- <tr>
93
- <td>
94
- <span class='aam-setting-title'><?php echo $product['title'], ' - ' . ('<span class="text-success">' . __('Free', AAM_KEY) . '</span>'); ?></span>
95
- <p class="aam-extension-description">
96
- <?php echo $product['description']; ?>
97
- </p>
98
- </td>
99
- <td>
100
- <?php if ($product['status']['status'] == 'install') { ?>
101
- <a href="<?php echo $product['status']['url']; ?>" class="btn btn-sm btn-success btn-block"><i class="icon-plus"></i> <?php echo __('Install', AAM_KEY); ?></a>
102
- <?php } else { ?>
103
- <span class="aam-extension-installed"><i class="icon-check"></i> <?php echo __('Installed', AAM_KEY); ?></span>
104
- <?php } ?>
105
- </td>
106
- </tr>
107
- <?php } ?>
108
- </tbody>
109
- </table>
110
- </div>
111
  </div>
112
  </div>
113
 
@@ -149,7 +126,7 @@
149
  <p>
150
  <?php echo __('Insert license key that you recieved after the payment (find the email example below). It might take up to 2 hours to process the payment. Please remember that license key is limited only to one life domain.', AAM_KEY); ?>
151
  <br /> <br />
152
- <img src="https://vasyltech.com/media/img/email-confirmation.jpg" class="img-responsive" />
153
  </p>
154
  </div>
155
  <div class="modal-footer">
20
  </div>
21
  </div>
22
 
23
+ <?php $commercial = $this->getList('commercial'); ?>
24
+ <?php $free = $this->getList('GNU'); ?>
 
25
 
26
  <div>
27
  <ul class="nav nav-tabs" role="tablist">
28
  <?php if(count($commercial)) { ?><li role="presentation" class="active"><a href="#premium-extensions" aria-controls="premium-extensions" role="tab" data-toggle="tab"><i class='icon-basket'></i> <?php echo __('Premium', AAM_KEY); ?></a></li><?php } ?>
29
  <?php if(count($free)) { ?><li role="presentation" <?php echo (!count($commercial) ? 'class="active"' : ''); ?>><a href="#free-extensions" aria-controls="free-extensions" role="tab" data-toggle="tab"><i class='icon-download-cloud'></i> <?php echo __('Free', AAM_KEY); ?></a></li><?php } ?>
 
30
  <li style="float:right;"><a href="#" id="update-check" data-toggle="tooltip" title="<?php echo __('Check For Updates', AAM_KEY); ?>"><small><i class="icon-arrows-cw"></i> <?php echo __('Check', AAM_KEY); ?></small></a></li>
31
  </ul>
32
 
38
  <?php foreach ($commercial as $product) { ?>
39
  <tr>
40
  <td>
41
+ <span class='aam-setting-title'><?php echo $product['title'], (!empty($product['new']) ? ' <span class="badge">NEW</span> ' : ''), (!empty($product['version']) ? ' <small class="text-muted">v' . $product['version'] . '</small>' : ''), ' - ' . ($product['price'] . ' <small>' . $product['currency'] . '</small>'); ?></span>
42
  <?php if (!empty($product['license'])) { ?><small class="aam-license-key"><b>License Key:</b> <?php echo $product['license']; ?></small><?php } ?>
43
  <p class="aam-extension-description">
44
  <?php echo $product['description']; ?>
45
  </p>
46
  </td>
47
  <td>
48
+ <?php if ($product['status'] == AAM_Extension_Repository::STATUS_INSTALLED) { ?>
49
  <span class="aam-extension-installed"><i class="icon-check"></i> <?php echo __('Installed', AAM_KEY); ?></span>
50
+ <?php } elseif ($product['status'] == AAM_Extension_Repository::STATUS_UPDATE) { ?>
51
  <a href="#" class="btn btn-sm btn-warning btn-block aam-update-extension" data-product="<?php echo $product['id']; ?>"><i class="icon-arrows-cw"></i> <?php echo __('Update', AAM_KEY); ?></a>
52
+ <?php } elseif ($product['status'] == AAM_Extension_Repository::STATUS_INACTIVE) { ?>
53
+ <span class="aam-extension-inactive"><i class="icon-stop"></i> <?php echo __('Inactive', AAM_KEY); ?></span>
54
  <?php } else { ?>
55
  <a href="<?php echo $product['storeURL']; ?>" target="_blank" class="btn btn-sm btn-success btn-block"><i class="icon-basket"></i> <?php echo __('Purchase', AAM_KEY); ?></a>
56
  <?php } ?>
72
  </p>
73
  </td>
74
  <td>
75
+ <?php if ($product['status'] == AAM_Extension_Repository::STATUS_INSTALLED) { ?>
76
  <span class="aam-extension-installed"><i class="icon-check"></i> <?php echo __('Installed', AAM_KEY); ?></span>
77
+ <?php } elseif ($product['status'] == AAM_Extension_Repository::STATUS_UPDATE) { ?>
78
  <a href="#" class="btn btn-sm btn-warning btn-block aam-update-extension" data-product="<?php echo $product['id']; ?>"><i class="icon-arrows-cw"></i> <?php echo __('Update', AAM_KEY); ?></a>
79
  <?php } else { ?>
80
  <a href="#" class="btn btn-sm btn-success btn-block aam-download-extension" data-license="<?php echo $product['license']; ?>"><i class="icon-download-cloud"></i> <?php echo __('Download', AAM_KEY); ?></a>
85
  </tbody>
86
  </table>
87
  </div>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
88
  </div>
89
  </div>
90
 
126
  <p>
127
  <?php echo __('Insert license key that you recieved after the payment (find the email example below). It might take up to 2 hours to process the payment. Please remember that license key is limited only to one life domain.', AAM_KEY); ?>
128
  <br /> <br />
129
+ <img src="https://aamplugin.com/media/img/email-confirmation.jpg" class="img-responsive" />
130
  </p>
131
  </div>
132
  <div class="modal-footer">
Application/Backend/phtml/index.phtml CHANGED
@@ -19,16 +19,9 @@
19
  <div class="aam-help-context" >
20
  <div class="text-justify aam-large-padding">
21
  <p class="text-larger"><?php echo __('Appreciate your interest in Advanced Access Manager (aka AAM). With strong knowledge and experience in WordPress, AAM becomes a very powerful tool to manage access to your frontend and backend.', AAM_KEY); ?></p>
22
- <p class="text-larger"><span class="aam-highlight"><?php echo __('Please notice!', AAM_KEY); ?></span> <?php echo AAM_Backend_View_Helper::preparePhrase('Power comes with responsibility. Make sure that you have enough knowledge in WordPress Roles & Capabilities because AAM is very closely intergrated with WordPress core. It is also very important [to have backup of your database before you start working with AAM] (there is no need to backup your files, AAM does not modify any physical files on your server and never did).', 'b'); ?></p>
23
  <p class="text-larger"><?php echo __('AAM was thoroughly tested on the fresh installation of WordPress and in the latest versions of Chrome, Safari, IE and Firefox. If you have any issues, the most typical case is the conflict with other plugins or themes.', AAM_KEY); ?></p>
24
- <p class="text-larger"><?php echo sprintf(__('Also check our %sIntroduction to AAM%s so you know where to start.', AAM_KEY), '<a href="https://vasyltech.com/blog/introduction-to-aam" target="_blank">', '</a>'); ?></p>
25
- </div>
26
-
27
- <div class="aam-info aam-social">
28
- <a target="_blank" href="https://vasyltech.com/advanced-access-manager"><i class="icon-home"></i></a>
29
- <a target="_blank" href="https://twitter.com/vasyltech"><i class="icon-twitter"></i></a>
30
- <a target="_blank" href="https://www.facebook.com/vasyltech"><i class="icon-facebook"></i></a>
31
- <a target="_blank" href="https://wordpress.org/support/view/plugin-reviews/advanced-access-manager"><i class="icon-star"></i></a>
32
  </div>
33
  </div>
34
  </div>
@@ -55,6 +48,31 @@
55
  </div>
56
  </div>
57
  <?php } ?>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
58
 
59
  <?php if (is_network_admin() && !defined('AAM_MULTISITE')) { ?>
60
  <div class="metabox-holder">
@@ -186,7 +204,7 @@
186
  <div role="tabpanel" class="tab-pane" id="default">
187
  <div class="visitor-message">
188
  <span class="aam-bordered"><?php echo __('Manage default access to your website resources for all users, roles and visitor. This includes Administrator role and your user', AAM_KEY); ?>.</span>
189
- <button class="btn btn-danger btn-block" id="manage-default"><i class="icon-cog"></i> <?php echo __('Manage Default', AAM_KEY); ?></button>
190
  </div>
191
  </div>
192
  </div>
@@ -220,21 +238,6 @@
220
  </div>
221
  <?php do_action('aam-sidebar-ui-action', 'bottom'); ?>
222
  </div>
223
-
224
- <?php if (AAM_Backend_View_CodePinch::isInstalled() === false) { ?>
225
- <div class="metabox-holder">
226
- <div class="postbox">
227
- <div class="inside text-center">
228
- <div class="inner-sm">
229
- <p class="text-muted text-larger"><?php echo __('Improve your website security and track all PHP errors for free.', AAM_KEY); ?></p>
230
- <a href="<?php echo AAM_Backend_View_CodePinch::getUrl(AAM_CODEPINCH_AFFILIATE_CODE); ?>" class="btn btn-lg btn-success" target="_blank">
231
- <img src="http://codepinch.io/frontend/img/codepinch-icon.svg" /> Install CodePinch
232
- </a>
233
- </div>
234
- </div>
235
- </div>
236
- </div>
237
- <?php } ?>
238
  </div>
239
  </div>
240
  </div>
19
  <div class="aam-help-context" >
20
  <div class="text-justify aam-large-padding">
21
  <p class="text-larger"><?php echo __('Appreciate your interest in Advanced Access Manager (aka AAM). With strong knowledge and experience in WordPress, AAM becomes a very powerful tool to manage access to your frontend and backend.', AAM_KEY); ?></p>
22
+ <p class="text-larger"><span class="aam-highlight"><?php echo __('Please note!', AAM_KEY); ?></span> <?php echo AAM_Backend_View_Helper::preparePhrase('Power comes with responsibility. Make sure you have enough knowledge in WordPress Roles & Capabilities because AAM is very closely intergrated with WordPress core. It is also very important [to have backup of your database before you start working with AAM] (there is no need to backup your files, AAM does not modify any physical files on your server and never did).', 'b'); ?></p>
23
  <p class="text-larger"><?php echo __('AAM was thoroughly tested on the fresh installation of WordPress and in the latest versions of Chrome, Safari, IE and Firefox. If you have any issues, the most typical case is the conflict with other plugins or themes.', AAM_KEY); ?></p>
24
+ <p class="text-larger"><?php echo sprintf(__('Refer to our %sHelp%s section when there is any question.', AAM_KEY), '<a href="https://aamplugin.com/help" target="_blank">', '</a>'); ?></p>
 
 
 
 
 
 
 
25
  </div>
26
  </div>
27
  </div>
48
  </div>
49
  </div>
50
  <?php } ?>
51
+
52
+ <div class="metabox-holder">
53
+ <div class="postbox">
54
+ <div class="inside">
55
+ <div class="aam-social">
56
+ <a href="https://aamplugin.com/help" title="Help" target="_blank">
57
+ <i class="icon-help-circled"></i>
58
+ <span>Help</span>
59
+ </a>
60
+ <a target="_blank" href="https://twitter.com/aamplugin">
61
+ <i class="icon-twitter"></i>
62
+ <span>Twitter</span>
63
+ </a>
64
+ <a target="_blank" href="https://aamplugin.com">
65
+ <i class="icon-home"></i>
66
+ <span>Website</span>
67
+ </a>
68
+ <a target="_blank" href="mailto:support@aamplugin.com">
69
+ <i class="icon-mail-alt"></i>
70
+ <span>Email</span>
71
+ </a>
72
+ </div>
73
+ </div>
74
+ </div>
75
+ </div>
76
 
77
  <?php if (is_network_admin() && !defined('AAM_MULTISITE')) { ?>
78
  <div class="metabox-holder">
204
  <div role="tabpanel" class="tab-pane" id="default">
205
  <div class="visitor-message">
206
  <span class="aam-bordered"><?php echo __('Manage default access to your website resources for all users, roles and visitor. This includes Administrator role and your user', AAM_KEY); ?>.</span>
207
+ <button class="btn btn-danger btn-block" id="manage-default"><i class="icon-cog"></i> <?php echo __('Manage Default Access', AAM_KEY); ?></button>
208
  </div>
209
  </div>
210
  </div>
238
  </div>
239
  <?php do_action('aam-sidebar-ui-action', 'bottom'); ?>
240
  </div>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
241
  </div>
242
  </div>
243
  </div>
Application/Backend/phtml/main-panel.phtml CHANGED
@@ -17,6 +17,7 @@
17
  foreach (AAM_Backend_Feature::retriveList() as $feature) {
18
  echo $feature->view->getContent();
19
  }
 
20
  ?>
21
  </div>
22
  </div>
17
  foreach (AAM_Backend_Feature::retriveList() as $feature) {
18
  echo $feature->view->getContent();
19
  }
20
+ do_action('aam-content-action');
21
  ?>
22
  </div>
23
  </div>
Application/Backend/phtml/object/login-redirect.phtml CHANGED
@@ -2,64 +2,68 @@
2
  <div class="aam-feature" id="login_redirect-content">
3
  <div class="row">
4
  <div class="col-xs-12">
5
- <?php if ($this->isDefault() || defined('AAM_LOGIN_REDIRECT')) { ?>
6
- <?php echo apply_filters('aam-login-redirect-ui-filter', AAM_Backend_View::getInstance()->loadPartial('login-redirect.phtml')); ?>
 
 
 
 
 
 
7
  <?php } ?>
 
 
 
 
8
  </div>
9
  </div>
10
 
11
- <?php if ($this->isDefault() || defined('AAM_LOGIN_REDIRECT')) { ?>
12
- <div class="row">
13
- <div class="col-xs-12">
14
- <?php $type = $this->getOption('login.redirect.type', 'default'); ?>
15
 
16
- <div class="radio">
17
- <input type="radio" name="login.redirect.type" id="login-redirect-default" data-action="#default-redirect-action" value="default"<?php echo ($type == 'default' ? ' checked' : ''); ?> />
18
- <label for="login-redirect-default"><?php echo AAM_Backend_View_Helper::preparePhrase('WordPress default behavior'); ?></label>
19
- </div>
20
- <div class="radio">
21
- <input type="radio" name="login.redirect.type" id="login-redirect-page" data-action="#page-redirect-action" value="page"<?php echo ($type == 'page' ? ' checked' : ''); ?> />
22
- <label for="login-redirect-page"><?php echo AAM_Backend_View_Helper::preparePhrase('Redirected to existing page [(select from the drop-down)]', 'small'); ?></label>
23
- </div>
24
- <div class="radio">
25
- <input type="radio" name="login.redirect.type" id="login-redirect-url" data-action="#url-redirect-action" value="url"<?php echo ($type == 'url' ? ' checked' : ''); ?> />
26
- <label for="login-redirect-url"><?php echo AAM_Backend_View_Helper::preparePhrase('Redirected to the URL [(enter full URL starting from http or https)]', 'small'); ?></label>
27
- </div>
28
- <div class="radio">
29
- <input type="radio" name="login.redirect.type" id="login-redirect-callback" data-action="#callback-redirect-action" value="callback"<?php echo ($type == 'callback' ? ' checked' : ''); ?> />
30
- <label for="login-redirect-callback"><?php echo sprintf(AAM_Backend_View_Helper::preparePhrase('Trigger PHP callback function [(valid %sPHP callback%s is required)]', 'small'), '<a href="http://php.net/manual/en/language.types.callable.php" target="_blank">', '</a>'); ?></label>
31
- </div>
32
 
33
- <div class="form-group login-redirect-action" id="page-redirect-action" style="display: <?php echo ($type == 'page' ? 'block' : 'none'); ?>;">
34
- <label><?php echo __('Existing Page', AAM_KEY); ?></label>
35
- <?php
36
- wp_dropdown_pages(array(
37
- 'depth' => 99,
38
- 'selected' => $this->getOption('login.redirect.page'),
39
- 'echo' => 1,
40
- 'name' => 'login.redirect.page',
41
- 'id' => 'page-redirect', // string
42
- 'class' => 'form-control', // string
43
- 'show_option_none' => __('-- Select Page --', AAM_KEY) // string
44
- ));
45
- ?>
46
- </div>
47
 
48
- <div class="form-group login-redirect-action" id="url-redirect-action" style="display: <?php echo ($type == 'url' ? 'block' : 'none'); ?>;">
49
- <label><?php echo __('The URL', AAM_KEY); ?></label>
50
- <input type="text" class="form-control" name="login.redirect.url" placeholder="http://" value="<?php echo $this->getOption('login.redirect.url'); ?>" />
51
- </div>
52
 
53
- <div class="form-group login-redirect-action" id="callback-redirect-action" style="display: <?php echo ($type == 'callback' ? 'block' : 'none'); ?>;">
54
- <label><?php echo __('PHP Callback Function', AAM_KEY); ?></label>
55
- <input type="text" class="form-control" placeholder="Enter valid callback" name="login.redirect.callback" value="<?php echo $this->getOption('login.redirect.callback'); ?>" />
56
- </div>
57
- </div>
58
  </div>
59
- <?php } else { ?>
60
- <p class="aam-notification">
61
- <?php echo AAM_Backend_View_Helper::preparePhrase('You are allowed to setup only the [default] login redirect for all users and roles. With [AAM Login Redirect] extension you can customize the redirect for any user, role.', 'b', 'b'); ?>
62
- </p>
63
- <?php } ?>
64
  </div>
65
  <?php }
2
  <div class="aam-feature" id="login_redirect-content">
3
  <div class="row">
4
  <div class="col-xs-12">
5
+ <?php if ($this->isDefault()) { ?>
6
+ <p class="aam-info">
7
+ <?php echo AAM_Backend_View_Helper::preparePhrase('Setup [default] login redirect for all users, roles when the authentication completed successfully.', 'strong'); ?>
8
+ </p>
9
+ <?php } else { ?>
10
+ <p class="aam-info">
11
+ <?php echo sprintf(AAM_Backend_View_Helper::preparePhrase('Setup customized login redirect for the [%s] when the authentication completed successfully.', 'strong'), AAM_Backend_View::getSubject()->getUID()); ?>
12
+ </p>
13
  <?php } ?>
14
+ <div class="aam-overwrite" id="aam-login-redirect-overwrite" style="display: <?php echo ($this->isOverwritten() ? 'block' : 'none'); ?>">
15
+ <span><i class="icon-check"></i> Settings are customized</span>
16
+ <span><a href="#" id="login-redirect-reset" class="btn btn-xs btn-primary">Reset To Default</a></span>
17
+ </div>
18
  </div>
19
  </div>
20
 
21
+ <div class="row">
22
+ <div class="col-xs-12">
23
+ <?php $type = $this->getOption('login.redirect.type', 'default'); ?>
 
24
 
25
+ <div class="radio">
26
+ <input type="radio" name="login.redirect.type" id="login-redirect-default" data-action="#default-redirect-action" value="default"<?php echo ($type == 'default' ? ' checked' : ''); ?> />
27
+ <label for="login-redirect-default"><?php echo __('WordPress default behavior', AAM_KEY); ?></label>
28
+ </div>
29
+ <div class="radio">
30
+ <input type="radio" name="login.redirect.type" id="login-redirect-page" data-action="#page-redirect-action" value="page"<?php echo ($type == 'page' ? ' checked' : ''); ?> />
31
+ <label for="login-redirect-page"><?php echo AAM_Backend_View_Helper::preparePhrase('Redirected to existing page [(select from the drop-down)]', 'small'); ?></label>
32
+ </div>
33
+ <div class="radio">
34
+ <input type="radio" name="login.redirect.type" id="login-redirect-url" data-action="#url-redirect-action" value="url"<?php echo ($type == 'url' ? ' checked' : ''); ?> />
35
+ <label for="login-redirect-url"><?php echo AAM_Backend_View_Helper::preparePhrase('Redirected to the URL [(enter full URL starting from http or https)]', 'small'); ?></label>
36
+ </div>
37
+ <div class="radio">
38
+ <input type="radio" name="login.redirect.type" id="login-redirect-callback" data-action="#callback-redirect-action" value="callback"<?php echo ($type == 'callback' ? ' checked' : ''); ?> />
39
+ <label for="login-redirect-callback"><?php echo sprintf(AAM_Backend_View_Helper::preparePhrase('Trigger PHP callback function [(valid %sPHP callback%s is required)]', 'small'), '<a href="http://php.net/manual/en/language.types.callable.php" target="_blank">', '</a>'); ?></label>
40
+ </div>
41
 
42
+ <div class="form-group login-redirect-action" id="page-redirect-action" style="display: <?php echo ($type == 'page' ? 'block' : 'none'); ?>;">
43
+ <label><?php echo __('Existing Page', AAM_KEY); ?></label>
44
+ <?php
45
+ wp_dropdown_pages(array(
46
+ 'depth' => 99,
47
+ 'selected' => $this->getOption('login.redirect.page'),
48
+ 'echo' => 1,
49
+ 'name' => 'login.redirect.page',
50
+ 'id' => 'page-redirect', // string
51
+ 'class' => 'form-control', // string
52
+ 'show_option_none' => __('-- Select Page --', AAM_KEY) // string
53
+ ));
54
+ ?>
55
+ </div>
56
 
57
+ <div class="form-group login-redirect-action" id="url-redirect-action" style="display: <?php echo ($type == 'url' ? 'block' : 'none'); ?>;">
58
+ <label><?php echo __('The URL', AAM_KEY); ?></label>
59
+ <input type="text" class="form-control" name="login.redirect.url" placeholder="http://" value="<?php echo $this->getOption('login.redirect.url'); ?>" />
60
+ </div>
61
 
62
+ <div class="form-group login-redirect-action" id="callback-redirect-action" style="display: <?php echo ($type == 'callback' ? 'block' : 'none'); ?>;">
63
+ <label><?php echo __('PHP Callback Function', AAM_KEY); ?></label>
64
+ <input type="text" class="form-control" placeholder="Enter valid callback" name="login.redirect.callback" value="<?php echo $this->getOption('login.redirect.callback'); ?>" />
65
+ </div>
 
66
  </div>
67
+ </div>
 
 
 
 
68
  </div>
69
  <?php }
Application/Backend/phtml/object/menu.phtml CHANGED
@@ -1,13 +1,5 @@
1
  <?php if (defined('AAM_KEY')) { ?>
2
  <div class="aam-feature" id="admin_menu-content">
3
- <div class="row">
4
- <div class="col-xs-12">
5
- <p class="aam-info">
6
- <?php echo sprintf(__('Learn how to manage access to the backend menu from %sthis article%s', AAM_KEY),'<a href="https://vasyltech.com/blog/manage-access-to-wordpress-backend-menu" target="_blank">', '</a>'); ?>
7
- </p>
8
- </div>
9
- </div>
10
-
11
  <?php if ($this->isOverwritten()) { ?>
12
  <div class="row">
13
  <div class="col-xs-12">
1
  <?php if (defined('AAM_KEY')) { ?>
2
  <div class="aam-feature" id="admin_menu-content">
 
 
 
 
 
 
 
 
3
  <?php if ($this->isOverwritten()) { ?>
4
  <div class="row">
5
  <div class="col-xs-12">
Application/Backend/phtml/object/metabox.phtml CHANGED
@@ -68,7 +68,7 @@
68
  <?php } else { ?>
69
  <div class="row">
70
  <div class="col-xs-12 text-center">
71
- <p class="aam-notification-message"><?php echo __('The list of metaboxes and widgets is not initialized. Click Refresh button above.'); ?></p>
72
  </div>
73
  </div>
74
  <?php } ?>
68
  <?php } else { ?>
69
  <div class="row">
70
  <div class="col-xs-12 text-center">
71
+ <p class="aam-notification-message"><?php echo __('The list is not initialized. Click Refresh button above.'); ?></p>
72
  </div>
73
  </div>
74
  <?php } ?>
Application/Backend/phtml/object/post.phtml CHANGED
@@ -4,40 +4,33 @@
4
  <div class="row">
5
  <div class="col-xs-12">
6
  <p class="aam-notification">
7
- <?php echo sprintf(AAM_Backend_View_Helper::preparePhrase('You are allowed to manage access up to 10 posts, pages or custom post types but only on role, user or visitor levels. Consider to purchase [AAM Plus Package] extension to unlock this limitation. For more information about post access control check %sthis article%s.', 'b'), '<a href="https://vasyltech.com/blog/manage-access-to-posts-and-pages" target="_blank">', '</a>'); ?>
8
- </p>
9
- </div>
10
- </div>
11
- <?php } else { ?>
12
- <div class="row">
13
- <div class="col-xs-12">
14
- <p class="aam-info">
15
- <?php echo sprintf(__('Learn more about post & pages access control from %sthis article%s.'), '<a href="https://vasyltech.com/blog/manage-access-to-posts-and-pages" target="_blank">', '</a>'); ?>
16
  </p>
17
  </div>
18
  </div>
19
  <?php } ?>
20
 
21
  <?php if (defined('AAM_PLUS_PACKAGE') || AAM_Backend_View::getSubject()->getUID() != 'default') { ?>
22
- <?php $current = $this->getCurrentPost(); ?>
23
 
24
  <div class="aam-post-breadcrumb">
25
  <a href="#" data-level="root"><i class="icon-home"></i> <?php echo __('Root', AAM_KEY); ?></a>
26
- <?php if (!is_null($current)) { ?>
27
  <span>
28
  <i class="icon-angle-double-right"></i>
29
- <?php echo $current->post_title; ?>
30
  </span>
31
  <?php } ?>
32
  </div>
33
 
34
  <div class="aam-overwrite hidden" id="post-overwritten">
35
  <span><i class="icon-check"></i> <?php echo __('Settings are customized', AAM_KEY); ?></span>
36
- <span><a href="#" id="post-reset" class="btn btn-xs btn-danger"><?php echo __('Reset To Default', AAM_KEY); ?></a></span>
37
  </div>
38
 
39
- <?php if (!is_null($current)) { ?>
40
- <input type="hidden" id="load-post" value="<?php echo $current->ID; ?>" />
 
41
  <?php } ?>
42
 
43
  <div class="aam-container">
@@ -77,6 +70,7 @@
77
  <tr>
78
  <td width="90%">
79
  <strong class="aam-block aam-highlight text-uppercase"><?php echo $data['title']; ?></strong>
 
80
  <p class="aam-hint" data-dynamic-post-label="<?php echo $data['descr']; ?>"></p>
81
  </td>
82
  <td>
@@ -99,6 +93,7 @@
99
  <tr class="aam-backend-post-access">
100
  <td width="90%">
101
  <strong class="aam-block aam-highlight text-uppercase"><?php echo $data['title']; ?></strong>
 
102
  <p class="aam-hint" data-dynamic-post-label="<?php echo $data['descr']; ?>"></p>
103
  </td>
104
  <td>
@@ -117,7 +112,27 @@
117
  <a href="#" class="btn btn-xs btn-primary post-back">&Lt; <?php echo __('Go Back', AAM_KEY); ?></a>
118
  </div>
119
  </div>
120
- <?php } ?>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
121
  </div>
122
- <?php
123
- }
4
  <div class="row">
5
  <div class="col-xs-12">
6
  <p class="aam-notification">
7
+ <?php echo sprintf(AAM_Backend_View_Helper::preparePhrase('You are allowed to manage access up to 10 posts, pages or custom post types but only on role, user or visitor levels. Consider to purchase [AAM Plus Package] extension to unlock this limitation. For more information about post access control check %sthis article%s.', 'b'), '<a href="https://aamplugin.com/help/how-to-manage-wordpress-post-and-category-access" target="_blank">', '</a>'); ?>
 
 
 
 
 
 
 
 
8
  </p>
9
  </div>
10
  </div>
11
  <?php } ?>
12
 
13
  <?php if (defined('AAM_PLUS_PACKAGE') || AAM_Backend_View::getSubject()->getUID() != 'default') { ?>
14
+ <?php $current = $this->getCurrentObject(); ?>
15
 
16
  <div class="aam-post-breadcrumb">
17
  <a href="#" data-level="root"><i class="icon-home"></i> <?php echo __('Root', AAM_KEY); ?></a>
18
+ <?php if ($current->id) { ?>
19
  <span>
20
  <i class="icon-angle-double-right"></i>
21
+ <?php echo ($current->type == 'post' ? $current->post->post_title : $current->term->name); ?>
22
  </span>
23
  <?php } ?>
24
  </div>
25
 
26
  <div class="aam-overwrite hidden" id="post-overwritten">
27
  <span><i class="icon-check"></i> <?php echo __('Settings are customized', AAM_KEY); ?></span>
28
+ <span><a href="#" id="post-reset" class="btn btn-xs btn-primary"><?php echo __('Reset To Default', AAM_KEY); ?></a></span>
29
  </div>
30
 
31
+ <?php if ($current->id) { ?>
32
+ <input type="hidden" id="load-post-object" value="<?php echo ($current->type == 'post' ? $current->post->ID : $current->term->term_id); ?>" />
33
+ <input type="hidden" id="load-post-object-type" value="<?php echo $current->type; ?>" />
34
  <?php } ?>
35
 
36
  <div class="aam-container">
70
  <tr>
71
  <td width="90%">
72
  <strong class="aam-block aam-highlight text-uppercase"><?php echo $data['title']; ?></strong>
73
+ <?php if (!empty($data['sub'])) { echo $data['sub']; } ?>
74
  <p class="aam-hint" data-dynamic-post-label="<?php echo $data['descr']; ?>"></p>
75
  </td>
76
  <td>
93
  <tr class="aam-backend-post-access">
94
  <td width="90%">
95
  <strong class="aam-block aam-highlight text-uppercase"><?php echo $data['title']; ?></strong>
96
+ <?php if (!empty($data['sub'])) { echo $data['sub']; } ?>
97
  <p class="aam-hint" data-dynamic-post-label="<?php echo $data['descr']; ?>"></p>
98
  </td>
99
  <td>
112
  <a href="#" class="btn btn-xs btn-primary post-back">&Lt; <?php echo __('Go Back', AAM_KEY); ?></a>
113
  </div>
114
  </div>
115
+ <?php } ?>
116
+
117
+ <div class="modal fade" id="password-modal" tabindex="-1" role="dialog">
118
+ <div class="modal-dialog modal-sm" role="document">
119
+ <div class="modal-content">
120
+ <div class="modal-header">
121
+ <button type="button" class="close" data-dismiss="modal" aria-label="<?php echo __('Close', AAM_KEY); ?>"><span aria-hidden="true">&times;</span></button>
122
+ <h4 class="modal-title"><?php echo __('Change Password', AAM_KEY); ?></h4>
123
+ </div>
124
+ <div class="modal-body">
125
+ <div class="form-group">
126
+ <label for="new-role-name"><?php echo __('Password', AAM_KEY); ?></label>
127
+ <input type="text" class="form-control" id="password-value" placeholder="<?php echo __('Enter Password', AAM_KEY); ?>" />
128
+ </div>
129
+ </div>
130
+ <div class="modal-footer">
131
+ <button type="button" class="btn btn-success" id="change-password-btn"><?php echo __('Change', AAM_KEY); ?></button>
132
+ <button type="button" class="btn btn-default" data-dismiss="modal"><?php echo __('Close', AAM_KEY); ?></button>
133
+ </div>
134
+ </div>
135
+ </div>
136
+ </div>
137
  </div>
138
+ <?php }
 
Application/Backend/phtml/object/redirect.phtml CHANGED
@@ -2,116 +2,120 @@
2
  <div class="aam-feature" id="redirect-content">
3
  <div class="row">
4
  <div class="col-xs-12">
5
- <?php if ($this->isDefault() || defined('AAM_REDIRECT')) { ?>
6
- <?php echo apply_filters('aam-redirect-ui-filter', AAM_Backend_View::getInstance()->loadPartial('redirect.phtml')); ?>
 
 
 
 
 
 
7
  <?php } ?>
 
 
 
 
8
  </div>
9
  </div>
10
 
11
  <div class="row">
12
  <div class="col-xs-12">
13
- <?php if ($this->isDefault() || defined('AAM_REDIRECT')) { ?>
14
- <div>
15
- <ul class="nav nav-tabs" role="tablist">
16
- <li role="presentation" class="active"><a href="#frontend-redirect" aria-controls="frontend-redirect" role="tab" data-toggle="tab"><i class="icon-home"></i> <?php echo __('Frontend Redirect', AAM_KEY); ?></a></li>
17
- <li role="presentation"><a href="#backend-redirect" aria-controls="backend-redirect" role="tab" data-toggle="tab"><i class="icon-circle"></i> <?php echo __('Backend Redirect', AAM_KEY); ?></a></li>
18
- </ul>
19
 
20
- <?php $frontendType = $this->getOption('frontend.redirect.type', 'default'); ?>
21
- <?php $backendType = $this->getOption('backend.redirect.type', 'default'); ?>
22
 
23
- <div class="tab-content">
24
- <div role="tabpanel" class="tab-pane active" id="frontend-redirect">
25
- <div class="radio">
26
- <input type="radio" name="frontend.redirect.type" id="frontend-redirect-default" value="default" data-action="none" data-group="frontend-redirect"<?php echo ($frontendType == 'default' ? ' checked' : ''); ?> />
27
- <label for="frontend-redirect-default"><?php echo AAM_Backend_View_Helper::preparePhrase('Default [("Access Denied" message)]', 'small'); ?></label>
28
- </div>
29
- <div class="radio">
30
- <input type="radio" name="frontend.redirect.type" id="frontend-redirect-message" data-action="#frontend-message-action" value="message" data-group="frontend-redirect"<?php echo ($frontendType == 'message' ? ' checked' : ''); ?> />
31
- <label for="frontend-redirect-message"><?php echo AAM_Backend_View_Helper::preparePhrase('Show customized message [(plain text or HTML)]', 'small'); ?></label>
32
- </div>
33
- <div class="radio">
34
- <input type="radio" name="frontend.redirect.type" id="frontend-redirect-page" data-action="#frontend-page-action" value="page" data-group="frontend-redirect"<?php echo ($frontendType == 'page' ? ' checked' : ''); ?> />
35
- <label for="frontend-redirect-page"><?php echo AAM_Backend_View_Helper::preparePhrase('Redirected to existing page [(select from the drop-down)]', 'small'); ?></label>
36
- </div>
37
- <div class="radio">
38
- <input type="radio" name="frontend.redirect.type" id="frontend-redirect-url" data-action="#frontend-url-action" value="url" data-group="frontend-redirect"<?php echo ($frontendType == 'url' ? ' checked' : ''); ?> />
39
- <label for="frontend-redirect-url"><?php echo AAM_Backend_View_Helper::preparePhrase('Redirected to the URL [(enter valid URL starting from http or https)]', 'small'); ?></label>
40
- </div>
41
- <div class="radio">
42
- <input type="radio" name="frontend.redirect.type" id="frontend-redirect-callback" data-action="#frontend-callback-action" value="callback" data-group="frontend-redirect"<?php echo ($frontendType == 'callback' ? ' checked' : ''); ?> />
43
- <label for="frontend-redirect-callback"><?php echo sprintf(AAM_Backend_View_Helper::preparePhrase('Trigger PHP callback function [(valid %sPHP callback%s is required)]', 'small'), '<a href="http://php.net/manual/en/language.types.callable.php" target="_blank">', '</a>'); ?></label>
44
- </div>
45
 
46
- <div class="form-group aam-redirect-action frontend-redirect" id="frontend-message-action" style="display: <?php echo ($frontendType == 'message' ? 'block' : 'none'); ?>;">
47
- <label for="frontend-message"><?php echo __('Customized Message', AAM_KEY); ?></label>
48
- <textarea class="form-control" name="frontend.redirect.message" rows="3" placeholder="<?php echo __('Enter message...', AAM_KEY); ?>"><?php echo stripslashes($this->getOption('frontend.redirect.message')); ?></textarea>
49
- </div>
50
 
51
- <div class="form-group aam-redirect-action frontend-redirect" id="frontend-page-action" style="display: <?php echo ($frontendType == 'page' ? 'block' : 'none'); ?>;">
52
- <label for="frontend-page"><?php echo __('Existing Page', AAM_KEY); ?></label>
53
- <?php
54
- wp_dropdown_pages(array(
55
- 'depth' => 99,
56
- 'selected' => $this->getOption('frontend.redirect.page'),
57
- 'echo' => 1,
58
- 'name' => 'frontend.redirect.page',
59
- 'id' => 'frontend-page', // string
60
- 'class' => 'form-control', // string
61
- 'show_option_none' => __('-- Select Page --', AAM_KEY) // string
62
- ));
63
- ?>
64
- </div>
65
 
66
- <div class="form-group aam-redirect-action frontend-redirect" id="frontend-url-action" style="display: <?php echo ($frontendType == 'url' ? 'block' : 'none'); ?>;">
67
- <label for="frontend-url"><?php echo __('The URL', AAM_KEY); ?></label>
68
- <input type="text" class="form-control" name="frontend.redirect.url" placeholder="http://" value="<?php echo $this->getOption('frontend.redirect.url'); ?>" />
69
- </div>
70
 
71
- <div class="form-group aam-redirect-action frontend-redirect" id="frontend-callback-action" style="display: <?php echo ($frontendType == 'callback' ? 'block' : 'none'); ?>;">
72
- <label for="frontend-url"><?php echo __('PHP Callback Function', AAM_KEY); ?></label>
73
- <input type="text" class="form-control" placeholder="Enter valid callback" name="frontend.redirect.callback" value="<?php echo $this->getOption('frontend.redirect.callback'); ?>" />
74
- </div>
75
- </div>
76
- <div role="tabpanel" class="tab-pane" id="backend-redirect">
77
- <div class="radio">
78
- <input type="radio" name="backend.redirect.type" id="backend-redirect-default" data-action="none" value="default" data-group="backend-redirect"<?php echo ($backendType == 'default' ? ' checked' : ''); ?> />
79
- <label for="backend-redirect-default"><?php echo AAM_Backend_View_Helper::preparePhrase('Default [("Access Denied" message)]', 'small'); ?></label>
80
- </div>
81
- <div class="radio">
82
- <input type="radio" name="backend.redirect.type" id="backend-redirect-message" data-action="#backend-message" value="message" data-group="backend-redirect"<?php echo ($backendType == 'message' ? ' checked' : ''); ?> />
83
- <label for="backend-redirect-message"><?php echo AAM_Backend_View_Helper::preparePhrase('Show customized message [(plain text or HTML)]', 'small'); ?></label>
84
- </div>
85
- <div class="radio">
86
- <input type="radio" name="backend.redirect.type" id="backend-redirect-url" data-action="#backend-url" value="url" data-group="backend-redirect"<?php echo ($backendType == 'url' ? ' checked' : ''); ?> />
87
- <label for="backend-redirect-url"><?php echo AAM_Backend_View_Helper::preparePhrase('Redirected to the URL [(enter valid URL starting from http or https)]', 'small'); ?></label>
88
- </div>
89
- <div class="radio">
90
- <input type="radio" name="backend.redirect.type" id="backend-redirect-callback" data-action="#backend-callback-action" value="callback" data-group="backend-redirect"<?php echo ($backendType == 'callback' ? ' checked' : ''); ?> />
91
- <label for="backend-redirect-callback"><?php echo sprintf(AAM_Backend_View_Helper::preparePhrase('Trigger PHP callback function [(valid %sPHP callback%s is required)]', 'small'), '<a href="http://php.net/manual/en/language.types.callable.php" target="_blank">', '</a>'); ?></label>
92
- </div>
93
 
94
- <div class="form-group aam-redirect-action backend-redirect" id="backend-message" style="display: <?php echo ($backendType == 'message' ? 'block' : 'none'); ?>;">
95
- <label for="backend-message"><?php echo __('Customized Message', AAM_KEY); ?></label>
96
- <textarea class="form-control" rows="3" placeholder="<?php echo __('Enter message...', AAM_KEY); ?>" name="backend.redirect.message"><?php echo $this->getOption('backend.redirect.message'); ?></textarea>
97
- </div>
98
 
99
- <div class="form-group aam-redirect-action backend-redirect" id="backend-url" style="display: <?php echo ($backendType == 'url' ? 'block' : 'none'); ?>;">
100
- <label for="backend-url"><?php echo __('The URL', AAM_KEY); ?></label>
101
- <input type="text" class="form-control" placeholder="http://" name="backend.redirect.url" value="<?php echo $this->getOption('backend.redirect.url'); ?>" />
102
- </div>
103
- <div class="form-group aam-redirect-action backend-redirect" id="backend-callback-action" style="display: <?php echo ($backendType == 'callback' ? 'block' : 'none'); ?>;">
104
- <label for="frontend-url"><?php echo __('PHP Callback Function', AAM_KEY); ?></label>
105
- <input type="text" class="form-control" placeholder="Enter valid callback" name="backend.redirect.callback" value="<?php echo $this->getOption('backend.redirect.callback'); ?>" />
106
- </div>
107
  </div>
108
  </div>
109
  </div>
110
- <?php } else { ?>
111
- <p class="aam-notification">
112
- <?php echo AAM_Backend_View_Helper::preparePhrase('You are allowed to setup only the [default] access denied redirect for all users, roles and visitor. With [AAM Redirect] extension you can customize redirect for any user, role or visitors.', 'b', 'b'); ?>
113
- </p>
114
- <?php } ?>
115
  </div>
116
  </div>
117
  </div>
2
  <div class="aam-feature" id="redirect-content">
3
  <div class="row">
4
  <div class="col-xs-12">
5
+ <?php if ($this->isDefault()) { ?>
6
+ <p class="aam-info">
7
+ <?php echo AAM_Backend_View_Helper::preparePhrase('Setup [default] redirect for all users, roles and visitors when access is denied to any restricted resources on your website.', 'strong'); ?>
8
+ </p>
9
+ <?php } else { ?>
10
+ <p class="aam-info">
11
+ <?php echo sprintf(AAM_Backend_View_Helper::preparePhrase('Setup customized redirect for the [%s] when access is denied to the restricted resources like posts, categories, menus, etc.', 'strong'), AAM_Backend_View::getSubject()->getUID()); ?>
12
+ </p>
13
  <?php } ?>
14
+ <div class="aam-overwrite" id="aam-redirect-overwrite" style="display: <?php echo ($this->isOverwritten() ? 'block' : 'none'); ?>">
15
+ <span><i class="icon-check"></i> Settings are customized</span>
16
+ <span><a href="#" id="redirect-reset" class="btn btn-xs btn-primary">Reset To Default</a></span>
17
+ </div>
18
  </div>
19
  </div>
20
 
21
  <div class="row">
22
  <div class="col-xs-12">
23
+ <div>
24
+ <ul class="nav nav-tabs" role="tablist">
25
+ <li role="presentation" class="active"><a href="#frontend-redirect" aria-controls="frontend-redirect" role="tab" data-toggle="tab"><i class="icon-home"></i> <?php echo __('Frontend Redirect', AAM_KEY); ?></a></li>
26
+ <li role="presentation"><a href="#backend-redirect" aria-controls="backend-redirect" role="tab" data-toggle="tab"><i class="icon-circle"></i> <?php echo __('Backend Redirect', AAM_KEY); ?></a></li>
27
+ </ul>
 
28
 
29
+ <?php $frontendType = $this->getOption('frontend.redirect.type', 'default'); ?>
30
+ <?php $backendType = $this->getOption('backend.redirect.type', 'default'); ?>
31
 
32
+ <div class="tab-content">
33
+ <div role="tabpanel" class="tab-pane active" id="frontend-redirect">
34
+ <div class="radio">
35
+ <input type="radio" name="frontend.redirect.type" id="frontend-redirect-default" value="default" data-action="none" data-group="frontend-redirect"<?php echo ($frontendType == 'default' ? ' checked' : ''); ?> />
36
+ <label for="frontend-redirect-default"><?php echo AAM_Backend_View_Helper::preparePhrase('Default [("Access Denied" message)]', 'small'); ?></label>
37
+ </div>
38
+ <div class="radio">
39
+ <input type="radio" name="frontend.redirect.type" id="frontend-redirect-message" data-action="#frontend-message-action" value="message" data-group="frontend-redirect"<?php echo ($frontendType == 'message' ? ' checked' : ''); ?> />
40
+ <label for="frontend-redirect-message"><?php echo AAM_Backend_View_Helper::preparePhrase('Show customized message [(plain text or HTML)]', 'small'); ?></label>
41
+ </div>
42
+ <div class="radio">
43
+ <input type="radio" name="frontend.redirect.type" id="frontend-redirect-page" data-action="#frontend-page-action" value="page" data-group="frontend-redirect"<?php echo ($frontendType == 'page' ? ' checked' : ''); ?> />
44
+ <label for="frontend-redirect-page"><?php echo AAM_Backend_View_Helper::preparePhrase('Redirected to existing page [(select from the drop-down)]', 'small'); ?></label>
45
+ </div>
46
+ <div class="radio">
47
+ <input type="radio" name="frontend.redirect.type" id="frontend-redirect-url" data-action="#frontend-url-action" value="url" data-group="frontend-redirect"<?php echo ($frontendType == 'url' ? ' checked' : ''); ?> />
48
+ <label for="frontend-redirect-url"><?php echo AAM_Backend_View_Helper::preparePhrase('Redirected to the URL [(enter valid URL starting from http or https)]', 'small'); ?></label>
49
+ </div>
50
+ <div class="radio">
51
+ <input type="radio" name="frontend.redirect.type" id="frontend-redirect-callback" data-action="#frontend-callback-action" value="callback" data-group="frontend-redirect"<?php echo ($frontendType == 'callback' ? ' checked' : ''); ?> />
52
+ <label for="frontend-redirect-callback"><?php echo sprintf(AAM_Backend_View_Helper::preparePhrase('Trigger PHP callback function [(valid %sPHP callback%s is required)]', 'small'), '<a href="http://php.net/manual/en/language.types.callable.php" target="_blank">', '</a>'); ?></label>
53
+ </div>
54
 
55
+ <div class="form-group aam-redirect-action frontend-redirect" id="frontend-message-action" style="display: <?php echo ($frontendType == 'message' ? 'block' : 'none'); ?>;">
56
+ <label for="frontend-message"><?php echo __('Customized Message', AAM_KEY); ?></label>
57
+ <textarea class="form-control" name="frontend.redirect.message" rows="3" placeholder="<?php echo __('Enter message...', AAM_KEY); ?>"><?php echo stripslashes($this->getOption('frontend.redirect.message')); ?></textarea>
58
+ </div>
59
 
60
+ <div class="form-group aam-redirect-action frontend-redirect" id="frontend-page-action" style="display: <?php echo ($frontendType == 'page' ? 'block' : 'none'); ?>;">
61
+ <label for="frontend-page"><?php echo __('Existing Page', AAM_KEY); ?></label>
62
+ <?php
63
+ wp_dropdown_pages(array(
64
+ 'depth' => 99,
65
+ 'selected' => $this->getOption('frontend.redirect.page'),
66
+ 'echo' => 1,
67
+ 'name' => 'frontend.redirect.page',
68
+ 'id' => 'frontend-page', // string
69
+ 'class' => 'form-control', // string
70
+ 'show_option_none' => __('-- Select Page --', AAM_KEY) // string
71
+ ));
72
+ ?>
73
+ </div>
74
 
75
+ <div class="form-group aam-redirect-action frontend-redirect" id="frontend-url-action" style="display: <?php echo ($frontendType == 'url' ? 'block' : 'none'); ?>;">
76
+ <label for="frontend-url"><?php echo __('The URL', AAM_KEY); ?></label>
77
+ <input type="text" class="form-control" name="frontend.redirect.url" placeholder="http://" value="<?php echo $this->getOption('frontend.redirect.url'); ?>" />
78
+ </div>
79
 
80
+ <div class="form-group aam-redirect-action frontend-redirect" id="frontend-callback-action" style="display: <?php echo ($frontendType == 'callback' ? 'block' : 'none'); ?>;">
81
+ <label for="frontend-url"><?php echo __('PHP Callback Function', AAM_KEY); ?></label>
82
+ <input type="text" class="form-control" placeholder="Enter valid callback" name="frontend.redirect.callback" value="<?php echo $this->getOption('frontend.redirect.callback'); ?>" />
83
+ </div>
84
+ </div>
85
+ <div role="tabpanel" class="tab-pane" id="backend-redirect">
86
+ <div class="radio">
87
+ <input type="radio" name="backend.redirect.type" id="backend-redirect-default" data-action="none" value="default" data-group="backend-redirect"<?php echo ($backendType == 'default' ? ' checked' : ''); ?> />
88
+ <label for="backend-redirect-default"><?php echo AAM_Backend_View_Helper::preparePhrase('Default [("Access Denied" message)]', 'small'); ?></label>
89
+ </div>
90
+ <div class="radio">
91
+ <input type="radio" name="backend.redirect.type" id="backend-redirect-message" data-action="#backend-message" value="message" data-group="backend-redirect"<?php echo ($backendType == 'message' ? ' checked' : ''); ?> />
92
+ <label for="backend-redirect-message"><?php echo AAM_Backend_View_Helper::preparePhrase('Show customized message [(plain text or HTML)]', 'small'); ?></label>
93
+ </div>
94
+ <div class="radio">
95
+ <input type="radio" name="backend.redirect.type" id="backend-redirect-url" data-action="#backend-url" value="url" data-group="backend-redirect"<?php echo ($backendType == 'url' ? ' checked' : ''); ?> />
96
+ <label for="backend-redirect-url"><?php echo AAM_Backend_View_Helper::preparePhrase('Redirected to the URL [(enter valid URL starting from http or https)]', 'small'); ?></label>
97
+ </div>
98
+ <div class="radio">
99
+ <input type="radio" name="backend.redirect.type" id="backend-redirect-callback" data-action="#backend-callback-action" value="callback" data-group="backend-redirect"<?php echo ($backendType == 'callback' ? ' checked' : ''); ?> />
100
+ <label for="backend-redirect-callback"><?php echo sprintf(AAM_Backend_View_Helper::preparePhrase('Trigger PHP callback function [(valid %sPHP callback%s is required)]', 'small'), '<a href="http://php.net/manual/en/language.types.callable.php" target="_blank">', '</a>'); ?></label>
101
+ </div>
102
 
103
+ <div class="form-group aam-redirect-action backend-redirect" id="backend-message" style="display: <?php echo ($backendType == 'message' ? 'block' : 'none'); ?>;">
104
+ <label for="backend-message"><?php echo __('Customized Message', AAM_KEY); ?></label>
105
+ <textarea class="form-control" rows="3" placeholder="<?php echo __('Enter message...', AAM_KEY); ?>" name="backend.redirect.message"><?php echo $this->getOption('backend.redirect.message'); ?></textarea>
106
+ </div>
107
 
108
+ <div class="form-group aam-redirect-action backend-redirect" id="backend-url" style="display: <?php echo ($backendType == 'url' ? 'block' : 'none'); ?>;">
109
+ <label for="backend-url"><?php echo __('The URL', AAM_KEY); ?></label>
110
+ <input type="text" class="form-control" placeholder="http://" name="backend.redirect.url" value="<?php echo $this->getOption('backend.redirect.url'); ?>" />
111
+ </div>
112
+ <div class="form-group aam-redirect-action backend-redirect" id="backend-callback-action" style="display: <?php echo ($backendType == 'callback' ? 'block' : 'none'); ?>;">
113
+ <label for="frontend-url"><?php echo __('PHP Callback Function', AAM_KEY); ?></label>
114
+ <input type="text" class="form-control" placeholder="Enter valid callback" name="backend.redirect.callback" value="<?php echo $this->getOption('backend.redirect.callback'); ?>" />
 
115
  </div>
116
  </div>
117
  </div>
118
+ </div>
 
 
 
 
119
  </div>
120
  </div>
121
  </div>
Application/Backend/phtml/object/teaser.phtml CHANGED
@@ -2,32 +2,36 @@
2
  <div class="aam-feature" id="teaser-content">
3
  <div class="row">
4
  <div class="col-xs-12">
5
- <?php if ($this->isDefault() || defined('AAM_CONTENT_TEASER')) { ?>
6
- <?php echo apply_filters('aam-teaser-ui-filter', AAM_Backend_View::getInstance()->loadPartial('teaser.phtml')); ?>
 
 
 
 
 
 
7
  <?php } ?>
 
 
 
 
8
  </div>
9
  </div>
10
 
11
  <div class="row">
12
  <div class="col-xs-12">
13
- <?php if ($this->isDefault() || defined('AAM_CONTENT_TEASER')) { ?>
14
- <div>
15
- <div class="form-group">
16
- <label><?php echo __('Teaser Message', AAM_KEY); ?></label>
17
- <textarea class="form-control" name="frontend.teaser.message" rows="3" placeholder="<?php echo __('Enter teaser message...', AAM_KEY); ?>"><?php echo stripslashes($this->getOption('frontend.teaser.message')); ?></textarea>
18
- </div>
19
- <div class="checkbox">
20
- <label>
21
- <input type="checkbox" name="frontend.teaser.excerpt" value="1" <?php echo intval($this->getOption('frontend.teaser.excerpt')) ? 'checked' : ''; ?> />
22
- <?php echo __('Add excerpt before teaser message', AAM_KEY); ?>
23
- </label>
24
- </div>
25
  </div>
26
- <?php } else { ?>
27
- <p class="aam-notification">
28
- <?php echo AAM_Backend_View_Helper::preparePhrase('You are allowed to setup only the [default] teaser message for all users, roles and visitor. With [AAM Teaser] extension you can customize the teaser message for any user, role or visitors.', 'b', 'b'); ?>
29
- </p>
30
- <?php } ?>
 
 
31
  </div>
32
  </div>
33
  </div>
2
  <div class="aam-feature" id="teaser-content">
3
  <div class="row">
4
  <div class="col-xs-12">
5
+ <?php if ($this->isDefault()) { ?>
6
+ <p class="aam-info">
7
+ <?php echo AAM_Backend_View_Helper::preparePhrase('Setup [default] teaser message for all users, roles and visitors when access is limited to any post on your website.', 'strong'); ?>
8
+ </p>
9
+ <?php } else { ?>
10
+ <p class="aam-info">
11
+ <?php echo sprintf(AAM_Backend_View_Helper::preparePhrase('Setup customized teaser message for the [%s] when access is limited to post on your website.', 'strong'), AAM_Backend_View::getSubject()->getUID()); ?>
12
+ </p>
13
  <?php } ?>
14
+ <div class="aam-overwrite" id="aam-teaser-overwrite" style="display: <?php echo ($this->isOverwritten() ? 'block' : 'none'); ?>">
15
+ <span><i class="icon-check"></i> Settings are customized</span>
16
+ <span><a href="#" id="teaser-reset" class="btn btn-xs btn-primary">Reset To Default</a></span>
17
+ </div>
18
  </div>
19
  </div>
20
 
21
  <div class="row">
22
  <div class="col-xs-12">
23
+ <div>
24
+ <div class="form-group">
25
+ <label><?php echo __('Teaser Message', AAM_KEY); ?></label>
26
+ <textarea class="form-control" name="frontend.teaser.message" rows="3" placeholder="<?php echo __('Enter teaser message...', AAM_KEY); ?>"><?php echo stripslashes($this->getOption('frontend.teaser.message')); ?></textarea>
 
 
 
 
 
 
 
 
27
  </div>
28
+ <div class="checkbox">
29
+ <label>
30
+ <input type="checkbox" name="frontend.teaser.excerpt" value="1" <?php echo intval($this->getOption('frontend.teaser.excerpt')) ? 'checked' : ''; ?> />
31
+ <?php echo __('Add excerpt before teaser message', AAM_KEY); ?>
32
+ </label>
33
+ </div>
34
+ </div>
35
  </div>
36
  </div>
37
  </div>
Application/Backend/phtml/security.phtml ADDED
@@ -0,0 +1,40 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php if (defined('AAM_KEY')) { ?>
2
+ <div class="aam-feature" id="security-content">
3
+ <table class="table table-striped table-bordered">
4
+ <tbody>
5
+ <?php do_action('aam-pre-security-content-action'); ?>
6
+
7
+ <?php foreach($this->getOptionList() as $id => $option) { ?>
8
+ <tr>
9
+ <td>
10
+ <span class='aam-setting-title'><?php echo $option['title']; ?></span>
11
+ <p class="aam-setting-description">
12
+ <?php echo $option['descr']; ?>
13
+ </p>
14
+ </td>
15
+ <td class="text-center">
16
+ <input type="checkbox" name="<?php echo $id; ?>" id="security-<?php echo $id; ?>" <?php echo ($option['value'] ? 'checked' : ''); ?> /> <label for="security-<?php echo $id; ?>"></label>
17
+ </td>
18
+ </tr>
19
+ <?php } ?>
20
+
21
+ <?php do_action('aam-post-security-content-action'); ?>
22
+ </tbody>
23
+ </table>
24
+
25
+ <?php if (AAM_Backend_View_CodePinch::isInstalled() === false) { ?>
26
+ <div class="metabox-holder">
27
+ <div class="postbox">
28
+ <div class="inside text-center">
29
+ <div class="inner-sm">
30
+ <p class="text-muted text-larger"><?php echo __('Improve your website security and keep your website error free with CodePinch.', AAM_KEY); ?></p>
31
+ <a href="<?php echo AAM_Backend_View_CodePinch::getUrl(AAM_CODEPINCH_AFFILIATE_CODE); ?>" class="btn btn-lg btn-success" target="_blank">
32
+ Install Free Plugin
33
+ </a>
34
+ </div>
35
+ </div>
36
+ </div>
37
+ </div>
38
+ <?php } ?>
39
+ </div>
40
+ <?php }
Application/Backend/phtml/utility.phtml CHANGED
@@ -1,73 +1,24 @@
1
  <?php if (defined('AAM_KEY')) { ?>
2
  <div class="aam-feature" id="utilities-content">
3
- <div class="row">
4
- <div class="col-xs-12">
5
- <p class="aam-info">
6
- <?php echo sprintf(__('To learn more about AAM Utilities check %sAAM Utilities%s article.', AAM_KEY), '<a href="https://vasyltech.com/blog/aam-utilities" target="_blank">', '</a>'); ?><br/>
7
- </p>
8
- </div>
9
- </div>
10
-
11
  <table class="table table-striped table-bordered">
12
  <tbody>
13
  <?php do_action('aam-pre-utilities-setting'); ?>
14
- <tr>
15
- <td>
16
- <span class='aam-setting-title'><?php echo __('Edit/Delete Capabilities', AAM_KEY); ?></span>
17
- <p class="aam-setting-description">
18
- <?php echo AAM_Backend_View_Helper::preparePhrase('[Please note!] This feature should be used only by experienced users. Toggle an ability to edit or delete capabilities.', 'strong'); ?>
19
- </p>
20
- </td>
21
- <td>
22
- <input data-toggle="toggle" data-on="<?php echo __('Enabled', AAM_KEY); ?>" data-off="<?php echo __('Disabled', AAM_KEY); ?>" type="checkbox" name="manage-capability" <?php echo (AAM_Core_Config::get('manage-capability', false) ? 'checked' : ''); ?> />
23
- </td>
24
- </tr>
25
- <tr>
26
- <td>
27
- <span class='aam-setting-title'><?php echo __('Backend Access Control', AAM_KEY); ?></span>
28
- <p class="aam-setting-description">
29
- <?php echo __('Use AAM to control access to posts, pages, categories, menus and metaboxes etc. Disable this setting to stop AAM from controling access for backend.', AAM_KEY); ?>
30
- </p>
31
- </td>
32
- <td>
33
- <input data-toggle="toggle" data-on="<?php echo __('Enabled', AAM_KEY); ?>" data-off="<?php echo __('Disabled', AAM_KEY); ?>" type="checkbox" name="backend-access-control" <?php echo (AAM_Core_Config::get('backend-access-control', true) ? 'checked' : ''); ?> />
34
- </td>
35
- </tr>
36
- <tr>
37
- <td>
38
- <span class='aam-setting-title'><?php echo __('Frontend Access Control', AAM_KEY); ?></span>
39
- <p class="aam-setting-description">
40
- <?php echo __('Use AAM to control access to posts, pages, categories, menus and widgets. Disable this setting to stop AAM from controling access for frontend.', AAM_KEY); ?>
41
- </p>
42
- </td>
43
- <td>
44
- <input data-toggle="toggle" data-on="<?php echo __('Enabled', AAM_KEY); ?>" data-off="<?php echo __('Disabled', AAM_KEY); ?>" type="checkbox" name="frontend-access-control" <?php echo (AAM_Core_Config::get('frontend-access-control', true) ? 'checked' : ''); ?> />
45
- </td>
46
- </tr>
47
- <tr>
48
- <td>
49
- <span class='aam-setting-title'><?php echo __('Media Files Access Control', AAM_KEY); ?></span>
50
- <p class="aam-setting-description">
51
- <?php echo sprintf(AAM_Backend_View_Helper::preparePhrase('When enabled, AAM will physically control access to all media files located in [uploads] folder. For more information check %sthis tutorial%s.', 'strong'), '<a href="https://vasyltech.com/blog/wordpress-media-access-control" target="_blank">', '</a>'); ?>
52
- </p>
53
- </td>
54
- <td>
55
- <input data-toggle="toggle" data-on="<?php echo __('Enabled', AAM_KEY); ?>" data-off="<?php echo __('Disabled', AAM_KEY); ?>" type="checkbox" name="media-access-control" <?php echo (AAM_Core_Config::get('media-access-control', false) ? 'checked' : ''); ?> />
56
- </td>
57
- </tr>
58
- <tr>
59
- <td>
60
- <span class='aam-setting-title'><?php echo __('Large Post Number Support', AAM_KEY); ?></span>
61
- <p class="aam-setting-description">
62
- <?php echo AAM_Backend_View_Helper::preparePhrase('[Use cautiously!] With large amount of posts, a native WordPress pagination does not take in consideration AAM access settings. Enable this option if you restrict posts from LISTing on frontend or backend.', 'strong'); ?>
63
- </p>
64
- </td>
65
- <td>
66
- <input data-toggle="toggle" data-on="<?php echo __('Enabled', AAM_KEY); ?>" data-off="<?php echo __('Disabled', AAM_KEY); ?>" type="checkbox" name="large-post-number" <?php echo (AAM_Core_Config::get('large-post-number', false) ? 'checked' : ''); ?> />
67
- </td>
68
- </tr>
69
 
70
- <?php do_action('aam-utilities-setting'); ?>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
71
 
72
  <tr><td colspan="2"></td></tr>
73
  <tr>
@@ -78,7 +29,7 @@
78
  </p>
79
  </td>
80
  <td>
81
- <a href="#clear-settings-modal" data-toggle="modal" class="btn btn-danger btn-block">Clear Settings</a>
82
  </td>
83
  </tr>
84
  </tbody>
1
  <?php if (defined('AAM_KEY')) { ?>
2
  <div class="aam-feature" id="utilities-content">
 
 
 
 
 
 
 
 
3
  <table class="table table-striped table-bordered">
4
  <tbody>
5
  <?php do_action('aam-pre-utilities-setting'); ?>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
6
 
7
+ <?php foreach($this->getUtilityOptionList() as $id => $option) { ?>
8
+ <tr>
9
+ <td>
10
+ <span class='aam-setting-title'><?php echo $option['title']; ?></span>
11
+ <p class="aam-setting-description">
12
+ <?php echo $option['descr']; ?>
13
+ </p>
14
+ </td>
15
+ <td class="text-center">
16
+ <input type="checkbox" name="<?php echo $id; ?>" id="utility-<?php echo $id; ?>" <?php echo ($option['value'] ? 'checked' : ''); ?> /> <label for="utility-<?php echo $id; ?>"></label>
17
+ </td>
18
+ </tr>
19
+ <?php } ?>
20
+
21
+ <?php do_action('aam-post-utilities-setting'); ?>
22
 
23
  <tr><td colspan="2"></td></tr>
24
  <tr>
29
  </p>
30
  </td>
31
  <td>
32
+ <a href="#clear-settings-modal" data-toggle="modal" class="btn btn-danger btn-block">OK</a>
33
  </td>
34
  </tr>
35
  </tbody>
Application/Core/API.php CHANGED
@@ -16,7 +16,7 @@
16
  final class AAM_Core_API {
17
 
18
  /**
19
- * Get current blog's option
20
  *
21
  * @param string $option
22
  * @param mixed $default
@@ -29,7 +29,13 @@ final class AAM_Core_API {
29
  */
30
  public static function getOption($option, $default = FALSE, $blog_id = null) {
31
  if (is_multisite()) {
32
- $blog = (is_null($blog_id) ? get_current_blog_id() : $blog_id);
 
 
 
 
 
 
33
  $response = get_blog_option($blog, $option, $default);
34
  } else {
35
  $response = get_option($option, $default);
@@ -39,7 +45,7 @@ final class AAM_Core_API {
39
  }
40
 
41
  /**
42
- * Update Blog Option
43
  *
44
  * @param string $option
45
  * @param mixed $data
@@ -52,7 +58,13 @@ final class AAM_Core_API {
52
  */
53
  public static function updateOption($option, $data, $blog_id = null) {
54
  if (is_multisite()) {
55
- $blog = (is_null($blog_id) ? get_current_blog_id() : $blog_id);
 
 
 
 
 
 
56
  $response = update_blog_option($blog, $option, $data);
57
  } else {
58
  $response = update_option($option, $data);
@@ -62,7 +74,7 @@ final class AAM_Core_API {
62
  }
63
 
64
  /**
65
- * Delete Blog Option
66
  *
67
  * @param string $option
68
  * @param int $blog_id
@@ -74,7 +86,13 @@ final class AAM_Core_API {
74
  */
75
  public static function deleteOption($option, $blog_id = null) {
76
  if (is_multisite()) {
77
- $blog = (is_null($blog_id) ? get_current_blog_id() : $blog_id);
 
 
 
 
 
 
78
  $response = delete_blog_option($blog, $option);
79
  } else {
80
  $response = delete_option($option);
@@ -114,7 +132,7 @@ final class AAM_Core_API {
114
  'method' => 'POST',
115
  'body' => $params,
116
  'cookies' => $requestCookies,
117
- 'timeout' => 5
118
  ));
119
  }
120
 
@@ -123,7 +141,7 @@ final class AAM_Core_API {
123
  *
124
  * @global WP_Roles $wp_roles
125
  *
126
- * @return \WP_Roles
127
  */
128
  public static function getRoles() {
129
  global $wp_roles;
@@ -183,7 +201,7 @@ final class AAM_Core_API {
183
 
184
  return $caps;
185
  }
186
-
187
  /**
188
  * Reject the request
189
  *
@@ -197,21 +215,12 @@ final class AAM_Core_API {
197
  * @access public
198
  */
199
  public static function reject($area = 'frontend', $args = array()) {
200
- $type = apply_filters(
201
- 'aam-filter-redirect-option',
202
- AAM_Core_Config::get("{$area}.redirect.type"),
203
- "{$area}.redirect.type",
204
- AAM::getUser()
205
- );
206
 
207
  if (!empty($type)) {
208
- $redirect = apply_filters(
209
- 'aam-filter-redirect-option',
210
- AAM_Core_Config::get("{$area}.redirect.{$type}"),
211
- "{$area}.redirect.{$type}",
212
- AAM::getUser()
213
- );
214
- } else {
215
  $redirect = AAM_Core_Config::get("{$area}.access.deny.redirect");
216
  }
217
 
@@ -228,7 +237,7 @@ final class AAM_Core_API {
228
  if (filter_var($location, FILTER_VALIDATE_URL)) {
229
  wp_redirect($location);
230
  } elseif (preg_match('/^[\d]+$/', $location)) {
231
- wp_redirect(get_post_permalink($location));
232
  } elseif (is_callable($location)) {
233
  call_user_func($location, $args);
234
  } elseif (!empty($args['callback']) && is_callable($args['callback'])) {
16
  final class AAM_Core_API {
17
 
18
  /**
19
+ * Get option
20
  *
21
  * @param string $option
22
  * @param mixed $default
29
  */
30
  public static function getOption($option, $default = FALSE, $blog_id = null) {
31
  if (is_multisite()) {
32
+ if (is_null($blog_id)) {
33
+ $blog = get_current_blog_id();
34
+ } elseif ($blog_id == 'site') {
35
+ $blog = (defined('SITE_ID_CURRENT_SITE') ? SITE_ID_CURRENT_SITE : 1);
36
+ } else {
37
+ $blog = $blog_id;
38
+ }
39
  $response = get_blog_option($blog, $option, $default);
40
  } else {
41
  $response = get_option($option, $default);
45
  }
46
 
47
  /**
48
+ * Update option
49
  *
50
  * @param string $option
51
  * @param mixed $data
58
  */
59
  public static function updateOption($option, $data, $blog_id = null) {
60
  if (is_multisite()) {
61
+ if (is_null($blog_id)) {
62
+ $blog = get_current_blog_id();
63
+ } elseif ($blog_id == 'site') {
64
+ $blog = (defined('SITE_ID_CURRENT_SITE') ? SITE_ID_CURRENT_SITE : 1);
65
+ } else {
66
+ $blog = $blog_id;
67
+ }
68
  $response = update_blog_option($blog, $option, $data);
69
  } else {
70
  $response = update_option($option, $data);
74
  }
75
 
76
  /**
77
+ * Delete option
78
  *
79
  * @param string $option
80
  * @param int $blog_id
86
  */
87
  public static function deleteOption($option, $blog_id = null) {
88
  if (is_multisite()) {
89
+ if (is_null($blog_id)) {
90
+ $blog = get_current_blog_id();
91
+ } elseif ($blog_id == 'site') {
92
+ $blog = (defined('SITE_ID_CURRENT_SITE') ? SITE_ID_CURRENT_SITE : 1);
93
+ } else {
94
+ $blog = $blog_id;
95
+ }
96
  $response = delete_blog_option($blog, $option);
97
  } else {
98
  $response = delete_option($option);
132
  'method' => 'POST',
133
  'body' => $params,
134
  'cookies' => $requestCookies,
135
+ 'timeout' => 10
136
  ));
137
  }
138
 
141
  *
142
  * @global WP_Roles $wp_roles
143
  *
144
+ * @return WP_Roles
145
  */
146
  public static function getRoles() {
147
  global $wp_roles;
201
 
202
  return $caps;
203
  }
204
+
205
  /**
206
  * Reject the request
207
  *
215
  * @access public
216
  */
217
  public static function reject($area = 'frontend', $args = array()) {
218
+ $object = AAM::getUser()->getObject('redirect');
219
+ $type = $object->get("{$area}.redirect.type");
 
 
 
 
220
 
221
  if (!empty($type)) {
222
+ $redirect = $object->get("{$area}.redirect.{$type}");
223
+ } else { //ConfigPress setup
 
 
 
 
 
224
  $redirect = AAM_Core_Config::get("{$area}.access.deny.redirect");
225
  }
226
 
237
  if (filter_var($location, FILTER_VALIDATE_URL)) {
238
  wp_redirect($location);
239
  } elseif (preg_match('/^[\d]+$/', $location)) {
240
+ wp_safe_redirect(get_post_permalink($location));
241
  } elseif (is_callable($location)) {
242
  call_user_func($location, $args);
243
  } elseif (!empty($args['callback']) && is_callable($args['callback'])) {
Application/Core/Cache.php CHANGED
@@ -54,7 +54,7 @@ class AAM_Core_Cache {
54
  /**
55
  * Set cache option
56
  *
57
- * @param AAM_Core_Subject $subject
58
  * @param string $option
59
  * @param mixed $data
60
  *
@@ -63,14 +63,21 @@ class AAM_Core_Cache {
63
  * @access public
64
  */
65
  public static function set($subject, $option, $data) {
66
- if ($subject instanceof AAM_Core_Subject_User) { //cache only for actual user
67
- if (!isset(self::$cache[$option]) || self::$cache[$option] != $data) {
68
- self::$cache[$option] = $data;
69
- self::$updated = true;
70
- }
71
  }
72
  }
73
 
 
 
 
 
 
 
 
 
 
74
  /**
75
  * Clear cache
76
  *
54
  /**
55
  * Set cache option
56
  *
57
+ * @param string $subject
58
  * @param string $option
59
  * @param mixed $data
60
  *
63
  * @access public
64
  */
65
  public static function set($subject, $option, $data) {
66
+ if (!isset(self::$cache[$option]) || (self::$cache[$option] != $data)) {
67
+ self::$cache[$option] = $data;
68
+ self::$updated = true;
 
 
69
  }
70
  }
71
 
72
+ /**
73
+ *
74
+ * @param type $option
75
+ * @return type
76
+ */
77
+ public static function has($option) {
78
+ return (isset(self::$cache[$option]));
79
+ }
80
+
81
  /**
82
  * Clear cache
83
  *
Application/Core/Compatibility.php ADDED
@@ -0,0 +1,124 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
+ * Core compatibility with older versions
12
+ *
13
+ * @package AAM
14
+ * @author Vasyl Martyniuk <vasyl@vasyltech.com>
15
+ * @todo Remove Feb 2018
16
+ */
17
+ class AAM_Core_Compatibility {
18
+
19
+ /**
20
+ *
21
+ */
22
+ public static function initExtensions() {
23
+ //block deprecated extensions from loading
24
+ define('AAM_UTILITIES', '99');
25
+ define('AAM_POST_FILTER', '99');
26
+ define('AAM_REDIRECT', '99');
27
+ define('AAM_CONTENT_TEASER', '99');
28
+ define('AAM_LOGIN_REDIRECT', '99');
29
+ //TODO - Remove this in Jul 2018
30
+
31
+ //caching filter & action
32
+ add_filter(
33
+ 'aam-read-cache-filter', 'AAM_Core_Compatibility::readCache', 10, 3
34
+ );
35
+
36
+ //utilities option
37
+ add_filter('aam-utility-property', 'AAM_Core_Config::get', 10, 2);
38
+ }
39
+
40
+ /**
41
+ *
42
+ * @param type $value
43
+ * @param type $option
44
+ * @param type $subject
45
+ * @return type
46
+ */
47
+ public static function readCache($value, $option, $subject) {
48
+ return AAM_Core_Cache::get($option);
49
+ }
50
+
51
+ /**
52
+ *
53
+ * @return type
54
+ */
55
+ public static function getExtensionList() {
56
+ $extensions = AAM_Core_API::getOption('aam-extensions', array(), 'site');
57
+
58
+ if (empty($extensions)) {
59
+ $extensions = AAM_Core_API::getOption('aam-extension-license', array(), 'site');
60
+ if (!empty($extensions)) {
61
+ $converted = array();
62
+
63
+ foreach($extensions as $title => $license) {
64
+ $id = strtoupper(str_replace(' ', '_', $title));
65
+ if (defined($id)) { //include only installed
66
+ $converted[$id] = array(
67
+ 'license' => $license,
68
+ 'status' => AAM_Extension_Repository::STATUS_INSTALLED
69
+ );
70
+ }
71
+ }
72
+
73
+ AAM_Core_API::updateOption('aam-extensions', $converted);
74
+ AAM_Core_API::deleteOption('aam-extension-license');
75
+ }
76
+ }
77
+
78
+ return $extensions;
79
+ }
80
+
81
+ /**
82
+ *
83
+ * @return type
84
+ */
85
+ public static function getConfig() {
86
+ $config = AAM_Core_API::getOption('aam-utilities', array());
87
+
88
+ foreach(array_keys($config) as $option) {
89
+ if (strpos($option, 'frontend.redirect') !== false) {
90
+ self::convertConfigOption('redirect', $config, $option);
91
+ } elseif (strpos($option, 'backend.redirect') !== false) {
92
+ self::convertConfigOption('redirect', $config, $option);
93
+ } elseif (strpos($option, 'login.redirect') !== false) {
94
+ self::convertConfigOption('loginRedirect', $config, $option);
95
+ } elseif (strpos($option, 'frontend.teaser') !== false) {
96
+ self::convertConfigOption('teaser', $config, $option);
97
+ }
98
+ }
99
+
100
+ return $config;
101
+ }
102
+
103
+ /**
104
+ *
105
+ * @staticvar type $subject
106
+ * @param type $oid
107
+ * @param type &$config
108
+ * @param type $option
109
+ *
110
+ * @todo Legacy remove Jul 2018
111
+ */
112
+ protected static function convertConfigOption($oid, &$config, $option) {
113
+ static $subject = null;
114
+
115
+ if (is_null($subject)) {
116
+ $subject = new AAM_Core_Subject_Default;
117
+ }
118
+
119
+ $subject->getObject($oid)->save($option, $config[$option]);
120
+ unset($config[$option]);
121
+ AAM_Core_API::updateOption('aam-utilities', $config);
122
+ }
123
+
124
+ }
Application/Core/Config.php CHANGED
@@ -21,7 +21,7 @@ class AAM_Core_Config {
21
  * aam-utilities slug is used because AAM Utilities with v3.4 became a core
22
  * feature instead of independent extension.
23
  */
24
- const CONFIG_OPTION = 'aam-utilities';
25
 
26
  /**
27
  * Core config
@@ -40,7 +40,11 @@ class AAM_Core_Config {
40
  * @access public
41
  */
42
  public static function bootstrap() {
43
- self::$config = AAM_Core_API::getOption(self::CONFIG_OPTION, array());
 
 
 
 
44
  }
45
 
46
  /**
@@ -76,7 +80,29 @@ class AAM_Core_Config {
76
  self::$config[$option] = $value;
77
 
78
  //save config to database
79
- return AAM_Core_API::updateOption(self::CONFIG_OPTION, self::$config);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
80
  }
81
 
82
  /**
21
  * aam-utilities slug is used because AAM Utilities with v3.4 became a core
22
  * feature instead of independent extension.
23
  */
24
+ const OPTION = 'aam-utilities';
25
 
26
  /**
27
  * Core config
40
  * @access public
41
  */
42
  public static function bootstrap() {
43
+ if (is_multisite()) {
44
+ self::$config = AAM_Core_API::getOption(self::OPTION, array(), 'site');
45
+ } else {
46
+ self::$config = AAM_Core_Compatibility::getConfig();
47
+ }
48
  }
49
 
50
  /**
80
  self::$config[$option] = $value;
81
 
82
  //save config to database
83
+ if (is_multisite()) {
84
+ $result = AAM_Core_API::updateOption(self::OPTION, self::$config, 'site');
85
+ } else {
86
+ $result = AAM_Core_API::updateOption(self::OPTION, self::$config);
87
+ }
88
+
89
+
90
+ return $result;
91
+ }
92
+
93
+ /**
94
+ *
95
+ * @param type $option
96
+ */
97
+ public static function delete($option) {
98
+ if (isset(self::$config[$option])) {
99
+ unset(self::$config[$option]);
100
+ if (is_multisite()) {
101
+ AAM_Core_API::updateOption(self::OPTION, self::$config, 'site');
102
+ } else {
103
+ AAM_Core_API::updateOption(self::OPTION, self::$config);
104
+ }
105
+ }
106
  }
107
 
108
  /**
Application/Core/Object/LoginRedirect.php ADDED
@@ -0,0 +1,106 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
+ * Login redirect object
12
+ *
13
+ * @package AAM
14
+ * @author Vasyl Martyniuk <vasyl@vasyltech.com>
15
+ */
16
+ class AAM_Core_Object_LoginRedirect extends AAM_Core_Object {
17
+
18
+ /**
19
+ * Constructor
20
+ *
21
+ * @param AAM_Core_Subject $subject
22
+ *
23
+ * @return void
24
+ *
25
+ * @access public
26
+ */
27
+ public function __construct(AAM_Core_Subject $subject) {
28
+ parent::__construct($subject);
29
+
30
+ $this->read();
31
+ }
32
+
33
+ /**
34
+ *
35
+ * @return void
36
+ *
37
+ * @access public
38
+ */
39
+ public function read() {
40
+ $option = $this->getSubject()->readOption('loginredirect');
41
+
42
+ //inherit from default Administrator role
43
+ if (empty($option)) {
44
+ //inherit from parent subject
45
+ $option = $this->getSubject()->inheritFromParent('loginredirect');
46
+ } elseif (method_exists($this, 'setOverwritten')) { //TODO - Support legacy
47
+ $this->setOverwritten(true);
48
+ }
49
+
50
+ $this->setOption($option);
51
+ }
52
+
53
+ /**
54
+ * Save options
55
+ *
56
+ * @param string $property
57
+ * @param boolean $value
58
+ *
59
+ * @return boolean
60
+ *
61
+ * @access public
62
+ */
63
+ public function save($property, $value) {
64
+ $option = $this->getOption();
65
+ $option[$property] = $value;
66
+
67
+ return $this->getSubject()->updateOption($option, 'loginredirect');
68
+ }
69
+
70
+ /**
71
+ *
72
+ * @return type
73
+ */
74
+ public function reset() {
75
+ return $this->getSubject()->deleteOption('loginredirect');
76
+ }
77
+
78
+ /**
79
+ *
80
+ * @param string $param
81
+ *
82
+ * @return boolean
83
+ *
84
+ * @access public
85
+ */
86
+ public function has($param) {
87
+ $option = $this->getOption();
88
+
89
+ return !empty($option[$param]);
90
+ }
91
+
92
+ /**
93
+ *
94
+ * @param string $param
95
+ *
96
+ * @return boolean
97
+ *
98
+ * @access public
99
+ */
100
+ public function get($param) {
101
+ $option = $this->getOption();
102
+
103
+ return !empty($option[$param]) ? $option[$param] : null;
104
+ }
105
+
106
+ }
Application/Core/Object/Post.php CHANGED
@@ -23,6 +23,8 @@ class AAM_Core_Object_Post extends AAM_Core_Object {
23
  * @access private
24
  */
25
  private $_post;
 
 
26
 
27
  /**
28
  * Constructor
@@ -38,7 +40,7 @@ class AAM_Core_Object_Post extends AAM_Core_Object {
38
  parent::__construct($subject);
39
 
40
  //make sure that we are dealing with WP_Post object
41
- if ($post instanceof WP_Post) {
42
  $this->setPost($post);
43
  } elseif (intval($post)) {
44
  $this->setPost(get_post($post));
@@ -96,14 +98,18 @@ class AAM_Core_Object_Post extends AAM_Core_Object {
96
  if (empty($option)) {
97
  $option = $subject->inheritFromParent('post', $this->getPost()->ID);
98
  }
 
 
 
 
99
  }
100
 
101
  $this->setOption($option);
102
-
103
  //if result is empty, simply cache the false to speed-up
104
  AAM_Core_Cache::set($subject, $chname, (empty($option) ? false : $option));
105
  }
106
-
107
  /**
108
  * Save options
109
  *
@@ -116,9 +122,15 @@ class AAM_Core_Object_Post extends AAM_Core_Object {
116
 
117
  $option[$property] = $checked;
118
 
119
- return update_post_meta(
120
  $this->getPost()->ID, $this->getOptionName(), $option
121
  );
 
 
 
 
 
 
122
  }
123
 
124
  /**
@@ -169,7 +181,7 @@ class AAM_Core_Object_Post extends AAM_Core_Object {
169
  }
170
 
171
  /**
172
- * Check if action is resricted
173
  *
174
  * @param string $area
175
  * @param string $action
@@ -184,6 +196,22 @@ class AAM_Core_Object_Post extends AAM_Core_Object {
184
  return (isset($option[$action]) && $option[$action]);
185
  }
186
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
187
  /**
188
  * Get Post
189
  *
23
  * @access private
24
  */
25
  private $_post;
26
+
27
+ private $_default = null;
28
 
29
  /**
30
  * Constructor
40
  parent::__construct($subject);
41
 
42
  //make sure that we are dealing with WP_Post object
43
+ if (is_a($post, 'WP_Post')) {
44
  $this->setPost($post);
45
  } elseif (intval($post)) {
46
  $this->setPost(get_post($post));
98
  if (empty($option)) {
99
  $option = $subject->inheritFromParent('post', $this->getPost()->ID);
100
  }
101
+
102
+ if (empty($option)) {
103
+ $option = $subject->inheritFromDefault('post', $this->getPost()->ID);
104
+ }
105
  }
106
 
107
  $this->setOption($option);
108
+
109
  //if result is empty, simply cache the false to speed-up
110
  AAM_Core_Cache::set($subject, $chname, (empty($option) ? false : $option));
111
  }
112
+
113
  /**
114
  * Save options
115
  *
122
 
123
  $option[$property] = $checked;
124
 
125
+ $result = update_post_meta(
126
  $this->getPost()->ID, $this->getOptionName(), $option
127
  );
128
+
129
+ if ($result) {
130
+ $this->setOption($option);
131
+ }
132
+
133
+ return $result;
134
  }
135
 
136
  /**
181
  }
182
 
183
  /**
184
+ * Check if option is set
185
  *
186
  * @param string $area
187
  * @param string $action
196
  return (isset($option[$action]) && $option[$action]);
197
  }
198
 
199
+ /**
200
+ * Get option
201
+ *
202
+ * @param string $area
203
+ * @param string $action
204
+ *
205
+ * @return boolean
206
+ *
207
+ * @access public
208
+ */
209
+ public function get($action) {
210
+ $option = $this->getOption();
211
+
212
+ return (isset($option[$action]) ? $option[$action] : null);
213
+ }
214
+
215
  /**
216
  * Get Post
217
  *
Application/Core/Object/Redirect.php ADDED
@@ -0,0 +1,127 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
+ * Access denied redirect object
12
+ *
13
+ * @package AAM
14
+ * @author Vasyl Martyniuk <vasyl@vasyltech.com>
15
+ */
16
+ class AAM_Core_Object_Redirect extends AAM_Core_Object {
17
+
18
+ /**
19
+ * Constructor
20
+ *
21
+ * @param AAM_Core_Subject $subject
22
+ *
23
+ * @return void
24
+ *
25
+ * @access public
26
+ */
27
+ public function __construct(AAM_Core_Subject $subject) {
28
+ parent::__construct($subject);
29
+
30
+ $this->read();
31
+ }
32
+
33
+ /**
34
+ *
35
+ * @return void
36
+ *
37
+ * @access public
38
+ */
39
+ public function read() {
40
+ $option = $this->getSubject()->readOption('redirect');
41
+
42
+ //inherit from default Administrator role
43
+ if (empty($option)) {
44
+ //inherit from parent subject
45
+ $option = $this->getSubject()->inheritFromParent('redirect');
46
+
47
+ if (empty($option)) {
48
+ $option = array();
49
+ $this->readByArea('frontend', $option);
50
+ $this->readByArea('backend', $option);
51
+ }
52
+ } elseif (method_exists($this, 'setOverwritten')) { //TODO - Support legacy
53
+ $this->setOverwritten(true);
54
+ }
55
+
56
+ $this->setOption($option);
57
+ }
58
+
59
+ /**
60
+ *
61
+ * @param type $area
62
+ * @param type $option
63
+ */
64
+ protected function readByArea($area, &$option) {
65
+ $type = AAM_Core_Config::get("{$area}.redirect.type");
66
+ if ($type) {
67
+ $option["{$area}.redirect.type"] = $type;
68
+ $option["{$area}.redirect.{$type}"] = AAM_Core_Config::get(
69
+ "{$area}.redirect.{$type}"
70
+ );
71
+ }
72
+ }
73
+
74
+ /**
75
+ * Save options
76
+ *
77
+ * @param string $property
78
+ * @param boolean $value
79
+ *
80
+ * @return boolean
81
+ *
82
+ * @access public
83
+ */
84
+ public function save($property, $value) {
85
+ $option = $this->getOption();
86
+ $option[$property] = $value;
87
+
88
+ return $this->getSubject()->updateOption($option, 'redirect');
89
+ }
90
+
91
+ /**
92
+ *
93
+ * @return type
94
+ */
95
+ public function reset() {
96
+ return $this->getSubject()->deleteOption('redirect');
97
+ }
98
+
99
+ /**
100
+ *
101
+ * @param string $param
102
+ *
103
+ * @return boolean
104
+ *
105
+ * @access public
106
+ */
107
+ public function has($param) {
108
+ $option = $this->getOption();
109
+
110
+ return !empty($option[$param]);
111
+ }
112
+
113
+ /**
114
+ *
115
+ * @param string $param
116
+ *
117
+ * @return boolean
118
+ *
119
+ * @access public
120
+ */
121
+ public function get($param) {
122
+ $option = $this->getOption();
123
+
124
+ return !empty($option[$param]) ? $option[$param] : null;
125
+ }
126
+
127
+ }
Application/Core/Object/Teaser.php ADDED
@@ -0,0 +1,124 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
+ * Teaser object
12
+ *
13
+ * @package AAM
14
+ * @author Vasyl Martyniuk <vasyl@vasyltech.com>
15
+ */
16
+ class AAM_Core_Object_Teaser extends AAM_Core_Object {
17
+
18
+ /**
19
+ * Constructor
20
+ *
21
+ * @param AAM_Core_Subject $subject
22
+ *
23
+ * @return void
24
+ *
25
+ * @access public
26
+ */
27
+ public function __construct(AAM_Core_Subject $subject) {
28
+ parent::__construct($subject);
29
+
30
+ $this->read();
31
+ }
32
+
33
+ /**
34
+ *
35
+ * @return void
36
+ *
37
+ * @access public
38
+ */
39
+ public function read() {
40
+ $option = $this->getSubject()->readOption('teaser');
41
+
42
+ //inherit from default Administrator role
43
+ if (empty($option)) {
44
+ //inherit from parent subject
45
+ $option = $this->getSubject()->inheritFromParent('teaser');
46
+ if (empty($option)) {
47
+ $option = array();
48
+ $this->readByArea('frontend', $option);
49
+ }
50
+ } elseif (method_exists($this, 'setOverwritten')) { //TODO - Support legacy
51
+ $this->setOverwritten(true);
52
+ }
53
+
54
+ $this->setOption($option);
55
+ }
56
+
57
+ /**
58
+ *
59
+ * @param type $area
60
+ * @param type $option
61
+ */
62
+ protected function readByArea($area, &$option) {
63
+ $message = AAM_Core_Config::get("{$area}.teaser.message");
64
+ $excerpt = AAM_Core_Config::get("{$area}.teaser.excerpt");
65
+ if ($message || $excerpt) {
66
+ $option["{$area}.teaser.message"] = $message;
67
+ $option["{$area}.teaser.excerpt"] = $excerpt;
68
+ }
69
+ }
70
+
71
+ /**
72
+ * Save options
73
+ *
74
+ * @param string $property
75
+ * @param boolean $value
76
+ *
77
+ * @return boolean
78
+ *
79
+ * @access public
80
+ */
81
+ public function save($property, $value) {
82
+ $option = $this->getOption();
83
+ $option[$property] = $value;
84
+
85
+ return $this->getSubject()->updateOption($option, 'teaser');
86
+ }
87
+
88
+ /**
89
+ *
90
+ * @return type
91
+ */
92
+ public function reset() {
93
+ return $this->getSubject()->deleteOption('teaser');
94
+ }
95
+
96
+ /**
97
+ *
98
+ * @param string $param
99
+ *
100
+ * @return boolean
101
+ *
102
+ * @access public
103
+ */
104
+ public function has($param) {
105
+ $option = $this->getOption();
106
+
107
+ return isset($option[$param]);
108
+ }
109
+
110
+ /**
111
+ *
112
+ * @param string $param
113
+ *
114
+ * @return boolean
115
+ *
116
+ * @access public
117
+ */
118
+ public function get($param) {
119
+ $option = $this->getOption();
120
+
121
+ return !empty($option[$param]) ? $option[$param] : null;
122
+ }
123
+
124
+ }
Application/Core/Repository.php DELETED
@@ -1,321 +0,0 @@
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
- * Extension Repository
12
- *
13
- * @package AAM
14
- * @author Vasyl Martyniuk <vasyl@vasyltech.com>
15
- */
16
- class AAM_Core_Repository {
17
-
18
- /**
19
- * Extension status: installed
20
- *
21
- * Extension has been installed and is up to date
22
- */
23
- const STATUS_INSTALLED = 'installed';
24
-
25
- /**
26
- * Extension status: download
27
- *
28
- * Extension is not installed and either needs to be purchased or
29
- * downloaded for free.
30
- */
31
- const STATUS_DOWNLOAD = 'download';
32
-
33
- /**
34
- * Extension status: update
35
- *
36
- * New version of the extension has been detected.
37
- */
38
- const STATUS_UPDATE = 'update';
39
-
40
- /**
41
- * Single instance of itself
42
- *
43
- * @var AAM_Core_Repository
44
- *
45
- * @access private
46
- * @static
47
- */
48
- private static $_instance = null;
49
-
50
- /**
51
- * Extension cache
52
- *
53
- * @var array
54
- *
55
- * @access protected
56
- */
57
- protected $cache = array();
58
-
59
- /**
60
- * Consturctor
61
- *
62
- * @return void
63
- *
64
- * @access protected
65
- */
66
- protected function __construct() {}
67
-
68
- /**
69
- * Get single instance of itself
70
- *
71
- * @param AAM $parent
72
- *
73
- * @return AAM_Core_Repository
74
- *
75
- * @access public
76
- * @static
77
- */
78
- public static function getInstance() {
79
- if (is_null(self::$_instance)) {
80
- self::$_instance = new self;
81
- }
82
-
83
- return self::$_instance;
84
- }
85
-
86
- /**
87
- * Load active extensions
88
- *
89
- * @return void
90
- *
91
- * @access public
92
- */
93
- public function load($dir = null) {
94
- $basedir = (is_null($dir) ? $this->getBasedir() : $dir);
95
-
96
- //since release 3.4 Utilities are intergreated into core as Settings
97
- $this->integrateUtility();
98
-
99
- if (file_exists($basedir)) {
100
- //iterate through each active extension and load it
101
- foreach (scandir($basedir) as $extension) {
102
- if (!in_array($extension, array('.', '..'))) {
103
- $this->bootstrapExtension($basedir . '/' . $extension);
104
- }
105
- }
106
- //Very important hook for cases when there is extensions dependancy.
107
- //For example AAM Plus Package depends on AAM Utitlities properties
108
- do_action('aam-post-extensions-load');
109
- }
110
- }
111
-
112
- /**
113
- *
114
- */
115
- protected function integrateUtility() {
116
- //block AAM Utilities and Post Filter Extension from load
117
- define('AAM_UTILITIES', '99');
118
- define('AAM_POST_FILTER', '99');
119
- //TODO - Remove this in Jul 2017
120
-
121
- //caching filter & action
122
- add_filter('aam-read-cache-filter', array($this, 'readCache'), 10, 3);
123
-
124
- //utilities option
125
- add_filter('aam-utility-property', 'AAM_Core_Config::get', 10, 2);
126
- }
127
-
128
- /**
129
- *
130
- * @param type $value
131
- * @param type $option
132
- * @param type $subject
133
- * @return type
134
- */
135
- public function readCache($value, $option, $subject) {
136
- return AAM_Core_Cache::get($option);
137
- }
138
-
139
- /**
140
- * Bootstrap the Extension
141
- *
142
- * In case of any errors, the output can be found in console
143
- *
144
- * @param string $path
145
- *
146
- * @return void
147
- * @access protected
148
- */
149
- protected function bootstrapExtension($path) {
150
- $bootstrap = "{$path}/bootstrap.php";
151
-
152
- if (file_exists($bootstrap)) { //bootstrap the extension
153
- require($bootstrap);
154
- }
155
- }
156
-
157
- /**
158
- * Add new extension
159
- *
160
- * @param blob $content
161
- *
162
- * @return boolean|WP_Error
163
- * @access public
164
- * @global type $wp_filesystem
165
- */
166
- public function addExtension($content) {
167
- $filepath = $this->getBasedir() . '/' . uniqid('aam_');
168
-
169
- $response = file_put_contents($filepath, $content);
170
- if (!is_wp_error($response)) { //unzip the archive
171
- WP_Filesystem(false, false, true); //init filesystem
172
- $response = unzip_file($filepath, $this->getBasedir());
173
- if (!is_wp_error($response)) {
174
- $response = true;
175
- }
176
- @unlink($filepath); //remove the working archive
177
- }
178
-
179
- return $response;
180
- }
181
-
182
- /**
183
- * Check extension status
184
- *
185
- * The list of extensions is comming from the external server. This list is
186
- * updated daily by the registered cron-job.
187
- * Each extension is following by next naming convension and stardard - the
188
- * title of an extension contains only latin letters and spaces and name is
189
- * no longer than 50 characters. As a standard, each extension defines the
190
- * global contant that indicates an extension version. The name of the
191
- * contants derives from the extension title by transforming all letters to
192
- * upper case and replacing the white spaces with underscore "_"
193
- * (e.g AAM Plus Package defines the contant AAM_PLUS_PACKAGE).
194
- *
195
- * @param string $id
196
- *
197
- * @return string
198
- *
199
- * @access public
200
- */
201
- public function extensionStatus($id) {
202
- static $cache = null;
203
-
204
- $status = self::STATUS_INSTALLED;
205
- $const = str_replace(' ', '_', strtoupper($id));
206
-
207
- if (is_null($cache)) {
208
- $cache = $this->getExtensionList();
209
- }
210
-
211
- if (!defined($const)) { //extension does not exist
212
- $status = self::STATUS_DOWNLOAD;
213
- } elseif (!empty($cache[$id])) {
214
- //Check if user has the latest extension. Also ignore if there is no
215
- //license stored for this extension
216
- $version = version_compare(constant($const), $cache[$id]->version);
217
- if ($version == -1 && !empty($cache[$id]->license)) {
218
- $status = self::STATUS_UPDATE;
219
- }
220
- }
221
-
222
- return $status;
223
- }
224
-
225
- /**
226
- *
227
- * @param type $title
228
- * @return type
229
- */
230
- public function getExtensionVersion($title) {
231
- $const = str_replace(' ', '_', strtoupper($title));
232
-
233
- return (defined($const) ? constant($const) : '');
234
- }
235
-
236
- /**
237
- *
238
- * @param type $slug
239
- *
240
- * @return type
241
- */
242
- public function pluginStatus($slug) {
243
- require_once( ABSPATH . 'wp-admin/includes/plugin-install.php' );
244
-
245
- $plugin = plugins_api('plugin_information', array('slug' => $slug));
246
-
247
- return install_plugin_install_status( $plugin);
248
- }
249
-
250
- /**
251
- *
252
- * @return type
253
- */
254
- public function getExtensionList() {
255
- if (empty($this->cache)) {
256
- $list = AAM_Core_API::getOption('aam-extension-repository', array());
257
- $licenses = AAM_Core_API::getOption('aam-extension-license', array());
258
-
259
- //WP Error Fix bug report
260
- $list = (is_array($list) ? $list : array());
261
-
262
- $this->cache = array();
263
- foreach ($list as $row) {
264
- $this->cache[$row->title] = $row;
265
- if (isset($licenses[$row->title])) {
266
- $this->cache[$row->title]->license = $licenses[$row->title];
267
- }
268
- $this->cache[$row->title]->status = $this->extensionStatus($row->title);
269
- }
270
- }
271
-
272
- return $this->cache;
273
- }
274
-
275
- /**
276
- *
277
- * @param type $title
278
- * @return type
279
- */
280
- public function hasViolation($title) {
281
- $list = $this->getExtensionList();
282
-
283
- return (!empty($list[$title]->violation));
284
- }
285
-
286
- /**
287
- * Check extension directory
288
- *
289
- * @return boolean|sstring
290
- *
291
- * @access public
292
- *
293
- * @global type $wp_filesystem
294
- */
295
- public function checkDirectory() {
296
- $error = false;
297
-
298
- //create a directory if does not exist
299
- $basedir = $this->getBasedir();
300
- if (!file_exists($basedir)) {
301
- if (!@mkdir($basedir, fileperms(ABSPATH) & 0777 | 0755, true)) {
302
- $error = sprintf(__('Failed to create %s', AAM_KEY), $basedir);
303
- }
304
- } elseif (!is_writable($basedir)) {
305
- $error = sprintf(
306
- __('Directory %s is not writable', AAM_KEY), $basedir
307
- );
308
- }
309
-
310
- return $error;
311
- }
312
-
313
- /**
314
- *
315
- * @return type
316
- */
317
- public function getBasedir() {
318
- return AAM_Core_Config::get('extentionDir', AAM_EXTENSION_BASE);
319
- }
320
-
321
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
Application/Core/Subject.php CHANGED
@@ -38,7 +38,7 @@ abstract class AAM_Core_Subject {
38
  private $_subject;
39
 
40
  /**
41
- * List of Objects to be access controled for current subject
42
  *
43
  * All access control objects like Admin Menu, Metaboxes, Posts etc
44
  *
@@ -78,7 +78,7 @@ abstract class AAM_Core_Subject {
78
  $subject = $this->getSubject();
79
 
80
  //make sure that method is callable
81
- if ($subject instanceof AAM_Core_Subject && method_exists($subject, $name)) {
82
  $response = call_user_func_array(array($subject, $name), $args);
83
  } else {
84
  $response = null;
@@ -284,7 +284,7 @@ abstract class AAM_Core_Subject {
284
  }
285
 
286
  /**
287
- * Retrive parent subject
288
  *
289
  * If there is no parent subject, return null
290
  *
38
  private $_subject;
39
 
40
  /**
41
+ * List of Objects to be access controlled for current subject
42
  *
43
  * All access control objects like Admin Menu, Metaboxes, Posts etc
44
  *
78
  $subject = $this->getSubject();
79
 
80
  //make sure that method is callable
81
+ if (method_exists($subject, $name)) {
82
  $response = call_user_func_array(array($subject, $name), $args);
83
  } else {
84
  $response = null;
284
  }
285
 
286
  /**
287
+ * Retrieve parent subject
288
  *
289
  * If there is no parent subject, return null
290
  *
Application/Core/Subject/Default.php CHANGED
@@ -19,7 +19,13 @@ class AAM_Core_Subject_Default extends AAM_Core_Subject {
19
  * Subject UID: DEFAULT
20
  */
21
  const UID = 'default';
22
-
 
 
 
 
 
 
23
  /**
24
  *
25
  * @param type $value
@@ -63,5 +69,17 @@ class AAM_Core_Subject_Default extends AAM_Core_Subject {
63
  public function getUID() {
64
  return self::UID;
65
  }
 
 
 
 
 
 
 
 
 
 
 
 
66
 
67
  }
19
  * Subject UID: DEFAULT
20
  */
21
  const UID = 'default';
22
+
23
+ /**
24
+ *
25
+ * @var type
26
+ */
27
+ protected static $instance = null;
28
+
29
  /**
30
  *
31
  * @param type $value
69
  public function getUID() {
70
  return self::UID;
71
  }
72
+
73
+ /**
74
+ *
75
+ * @return type
76
+ */
77
+ public static function getInstance() {
78
+ if (is_null(self::$instance)) {
79
+ self::$instance = new self;
80
+ }
81
+
82
+ return self::$instance;
83
+ }
84
 
85
  }
Application/Core/Subject/Role.php CHANGED
@@ -181,7 +181,7 @@ class AAM_Core_Subject_Role extends AAM_Core_Subject {
181
  public function getParent() {
182
  return apply_filters(
183
  'aam-parent-role-filter',
184
- new AAM_Core_Subject_Default,
185
  $this
186
  );
187
  }
181
  public function getParent() {
182
  return apply_filters(
183
  'aam-parent-role-filter',
184
+ AAM_Core_Subject_Default::getInstance(),
185
  $this
186
  );
187
  }
Application/Core/Subject/User.php CHANGED
@@ -66,14 +66,7 @@ class AAM_Core_Subject_User extends AAM_Core_Subject {
66
  * @access protected
67
  */
68
  protected function retrieveSubject() {
69
- global $current_user;
70
-
71
- $user = $current_user;
72
- if (is_a($user, 'WP_User') && ($user->ID == $this->getId())) {
73
- $subject = $user;
74
- } else {
75
- $subject = new WP_User($this->getId());
76
- }
77
 
78
  //retrieve aam capabilities if are not retrieved yet
79
  $caps = get_user_option(self::AAM_CAPKEY, $this->getId());
66
  * @access protected
67
  */
68
  protected function retrieveSubject() {
69
+ $subject = new WP_User($this->getId());
 
 
 
 
 
 
 
70
 
71
  //retrieve aam capabilities if are not retrieved yet
72
  $caps = get_user_option(self::AAM_CAPKEY, $this->getId());
Application/Core/Subject/Visitor.php CHANGED
@@ -62,5 +62,13 @@ class AAM_Core_Subject_Visitor extends AAM_Core_Subject {
62
  public function getUID() {
63
  return self::UID;
64
  }
 
 
 
 
 
 
 
 
65
 
66
  }
62
  public function getUID() {
63
  return self::UID;
64
  }
65
+
66
+ /**
67
+ *
68
+ * @return type
69
+ */
70
+ public function getParent() {
71
+ return AAM_Core_Subject_Default::getInstance();
72
+ }
73
 
74
  }
Application/Extension/Compatibility.php ADDED
@@ -0,0 +1,78 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
+ * Extension compatibility with older versions
12
+ *
13
+ * @package AAM
14
+ * @author Vasyl Martyniuk <vasyl@vasyltech.com>
15
+ * @todo Remove Feb 2018
16
+ */
17
+ class AAM_Extension_Compatibility {
18
+
19
+ /**
20
+ *
21
+ */
22
+ public static function init() {
23
+ //block deprecated extensions from loading
24
+ define('AAM_UTILITIES', '99');
25
+ define('AAM_POST_FILTER', '99');
26
+ define('AAM_REDIRECT', '99');
27
+ define('AAM_CONTENT_TEASER', '99');
28
+ define('AAM_LOGIN_REDIRECT', '99');
29
+ //TODO - Remove this in Jul 2018
30
+
31
+ //caching filter & action
32
+ add_filter(
33
+ 'aam-read-cache-filter', 'AAM_Extension_Compatibility::readCache', 10, 3
34
+ );
35
+
36
+ //utilities option
37
+ add_filter('aam-utility-property', 'AAM_Core_Config::get', 10, 2);
38
+ }
39
+
40
+ /**
41
+ *
42
+ * @param type $value
43
+ * @param type $option
44
+ * @param type $subject
45
+ * @return type
46
+ */
47
+ public static function readCache($value, $option, $subject) {
48
+ return AAM_Core_Cache::get($option);
49
+ }
50
+
51
+ /**
52
+ *
53
+ * @return type
54
+ */
55
+ public static function getExtensionList() {
56
+ $extensions = AAM_Core_API::getOption('aam-extensions', array());
57
+
58
+ if (empty($extensions)) {
59
+ $extensions = AAM_Core_API::getOption('aam-extension-license', array());
60
+ if (!empty($extensions)) {
61
+ $converted = array();
62
+
63
+ foreach($extensions as $title => $license) {
64
+ $converted[strtoupper(str_replace(' ', '_', $title))] = array(
65
+ 'license' => $license,
66
+ 'status' => AAM_Extension_Repository::STATUS_INSTALLED
67
+ );
68
+ }
69
+
70
+ AAM_Core_API::updateOption('aam-extensions', $converted);
71
+ AAM_Core_API::deleteOption('aam-extension-license');
72
+ }
73
+ }
74
+
75
+ return $extensions;
76
+ }
77
+
78
+ }
Application/Extension/List.php ADDED
@@ -0,0 +1,78 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
+ return array(
11
+ array(
12
+ 'title' => 'AAM Plus Package',
13
+ 'id' => 'AAM_PLUS_PACKAGE',
14
+ 'type' => 'commercial',
15
+ 'price' => '$30',
16
+ 'currency' => 'USD',
17
+ 'description' => 'Our best selling extension that allows you to manage access to unlimited number of posts, pages or custom post types and define default access to ALL posts, pages, custom post types, categories or custom taxonomies. <a href="https://aamplugin.com/help/aam-plus-package-extension" target="_blank">Read more.</a>',
18
+ 'storeURL' => 'https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=FGAHULDEFZV4U',
19
+ 'version' => (defined('AAM_PLUS_PACKAGE') ? constant('AAM_PLUS_PACKAGE') : null)
20
+ ),
21
+ array(
22
+ 'title' => 'AAM Role Hierarchy',
23
+ 'id' => 'AAM_ROLE_HIERARCHY',
24
+ 'type' => 'commercial',
25
+ 'price' => '$15',
26
+ 'currency' => 'USD',
27
+ 'description' => 'Create complex role hierarchy and automatically inherit access settings from parent roles. <a href="https://aamplugin.com/help/aam-role-hierarchy-extension" target="_blank">Read more.</a>',
28
+ 'storeURL' => 'https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=K8DMZ66SAW8VG',
29
+ 'version' => (defined('AAM_ROLE_HIERARCHY') ? constant('AAM_ROLE_HIERARCHY') : null)
30
+ ),
31
+ array(
32
+ 'title' => 'AAM Role Filter',
33
+ 'id' => 'AAM_ROLE_FILTER',
34
+ 'type' => 'commercial',
35
+ 'price' => '$5',
36
+ 'currency' => 'USD',
37
+ 'description' => 'Based on user levels, restrict access to manage list of roles and users that have higher user level. <a href="https://aamplugin.com/help/aam-role-filter-extension" target="_blank">Read more.</a>',
38
+ 'storeURL' => 'https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=G9V4BT3T8WJSN',
39
+ 'version' => (defined('AAM_ROLE_FILTER') ? constant('AAM_ROLE_FILTER') : null)
40
+ ),
41
+ array(
42
+ 'title' => 'AAM Payment',
43
+ 'id' => 'AAM_PAYMENT',
44
+ 'type' => 'commercial',
45
+ 'price' => '$20',
46
+ "new" => true,
47
+ 'currency' => 'USD',
48
+ 'description' => 'Start selling access to your posts, categories or user levels. <a href="https://aamplugin.com/help/aam-payment-extension" target="_blank">Read more.</a>',
49
+ 'storeURL' => 'https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=FF3VE7B3YC3K6',
50
+ 'version' => (defined('AAM_PAYMENT') ? constant('AAM_PAYMENT') : null)
51
+ ),
52
+ array(
53
+ 'title' => 'AAM Complete Package',
54
+ 'id' => 'AAM_COMPLETE_PACKAGE',
55
+ 'type' => 'commercial',
56
+ 'price' => '$70',
57
+ 'currency' => 'USD',
58
+ 'description' => 'Get list of all available premium extensions in one package. Any additional premium extensions in the future will be included in this package.',
59
+ 'storeURL' => 'https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=THJWEJR3URR8L',
60
+ 'version' => (defined('AAM_COMPLETE_PACKAGE') ? constant('AAM_COMPLETE_PACKAGE') : null)
61
+ ),
62
+ array(
63
+ 'title' => 'AAM Multisite',
64
+ 'id' => 'AAM_MULTISITE',
65
+ 'type' => 'GNU',
66
+ 'license' => 'AAMMULTISITE',
67
+ 'description' => 'Convenient way to navigate between different sites in the Network Admin Panel.',
68
+ 'version' => (defined('AAM_MULTISITE') ? constant('AAM_MULTISITE') : null)
69
+ ),
70
+ array(
71
+ 'title' => 'AAM ConfigPress',
72
+ 'id' => 'AAM_CONFIGPRESS',
73
+ 'type' => 'GNU',
74
+ 'license' => 'AAMCONFIGPRESS',
75
+ 'description' => 'Extension to manage AAM core functionality with advanced configuration settings.',
76
+ 'version' => (defined('AAM_CONFIGPRESS') ? constant('AAM_CONFIGPRESS') : null)
77
+ )
78
+ );
Application/Extension/Repository.php ADDED
@@ -0,0 +1,295 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
+ * Extension Repository
12
+ *
13
+ * @package AAM
14
+ * @author Vasyl Martyniuk <vasyl@vasyltech.com>
15
+ */
16
+ class AAM_Extension_Repository {
17
+
18
+ /**
19
+ * Extension status: installed
20
+ *
21
+ * Extension has been installed and is up to date
22
+ */
23
+ const STATUS_INSTALLED = 'installed';
24
+
25
+ /**
26
+ * License violation
27
+ *
28
+ * Extension is inactive
29
+ */
30
+ const STATUS_INACTIVE = 'inactive';
31
+
32
+ /**
33
+ * Extension status: download
34
+ *
35
+ * Extension is not installed and either needs to be purchased or
36
+ * downloaded for free.
37
+ */
38
+ const STATUS_DOWNLOAD = 'download';
39
+
40
+ /**
41
+ * Extension status: update
42
+ *
43
+ * New version of the extension has been detected.
44
+ */
45
+ const STATUS_UPDATE = 'update';
46
+
47
+ /**
48
+ * Single instance of itself
49
+ *
50
+ * @var AAM_Extension_Repository
51
+ *
52
+ * @access private
53
+ * @static
54
+ */
55
+ private static $_instance = null;
56
+
57
+ /**
58
+ * Extension list
59
+ *
60
+ * @var array
61
+ *
62
+ * @access protected
63
+ */
64
+ protected $list = array();
65
+
66
+ /**
67
+ * Constructor
68
+ *
69
+ * @return void
70
+ *
71
+ * @access protected
72
+ */
73
+ protected function __construct() {}
74
+
75
+ /**
76
+ * Get single instance of itself
77
+ *
78
+ * @param AAM $parent
79
+ *
80
+ * @return AAM_Extension_Repository
81
+ *
82
+ * @access public
83
+ * @static
84
+ */
85
+ public static function getInstance() {
86
+ if (is_null(self::$_instance)) {
87
+ self::$_instance = new self;
88
+ }
89
+
90
+ return self::$_instance;
91
+ }
92
+
93
+ /**
94
+ * Load active extensions
95
+ *
96
+ * @return void
97
+ *
98
+ * @access public
99
+ */
100
+ public function load($dir = null) {
101
+ $basedir = (is_null($dir) ? $this->getBasedir() : $dir);
102
+
103
+ //since release 3.4 some extensions get intergreated into core
104
+ AAM_Core_Compatibility::initExtensions();
105
+
106
+ if (file_exists($basedir)) {
107
+ //iterate through each active extension and load it
108
+ foreach (scandir($basedir) as $extension) {
109
+ if (!in_array($extension, array('.', '..'))) {
110
+ $this->bootstrapExtension($basedir . '/' . $extension);
111
+ }
112
+ }
113
+ //Very important hook for cases when there is extensions dependancy.
114
+ //For example AAM Plus Package depends on AAM Utitlities properties
115
+ do_action('aam-post-extensions-load');
116
+ }
117
+ }
118
+
119
+ /**
120
+ * Bootstrap the Extension
121
+ *
122
+ * In case of any errors, the output can be found in console
123
+ *
124
+ * @param string $path
125
+ *
126
+ * @return void
127
+ * @access protected
128
+ */
129
+ protected function bootstrapExtension($path) {
130
+ $bootstrap = "{$path}/bootstrap.php";
131
+
132
+ if (file_exists($bootstrap)) { //bootstrap the extension
133
+ require($bootstrap);
134
+ }
135
+ }
136
+
137
+ /**
138
+ * Check extension list
139
+ *
140
+ */
141
+ public function check() {
142
+ $list = AAM_Core_Compatibility::getExtensionList();
143
+
144
+ foreach(AAM_Extension_Server::check() as $id => $item) {
145
+ if ($item->violation === true) {
146
+ $list[$id]['status'] = self::STATUS_INACTIVE;
147
+ } elseif (version_compare(constant($id), $item->version) === -1) {
148
+ $list[$id]['status'] = self::STATUS_UPDATE;
149
+ } else {
150
+ $list[$id]['status'] = self::STATUS_INSTALLED;
151
+ }
152
+ }
153
+
154
+ AAM_Core_API::updateOption('aam-extensions', $list);
155
+ }
156
+
157
+ /**
158
+ * Store the license key
159
+ *
160
+ * This is important to have just for the update extension purposes
161
+ *
162
+ * @param stdClass $package
163
+ * @param string $license
164
+ *
165
+ * @return void
166
+ *
167
+ * @access public
168
+ */
169
+ public function storeLicense($package, $license) {
170
+ //retrieve the installed list of extensions
171
+ $list = AAM_Core_Compatibility::getExtensionList();
172
+
173
+ $list[$package->id] = array(
174
+ 'license' => $license,
175
+ 'status' => self::STATUS_INSTALLED,
176
+ );
177
+
178
+ //update the extension list
179
+ AAM_Core_API::updateOption('aam-extensions', $list);
180
+ }
181
+
182
+
183
+ /**
184
+ * Add new extension
185
+ *
186
+ * @param blob $zip
187
+ *
188
+ * @return boolean
189
+ * @access public
190
+ */
191
+ public function add($zip) {
192
+ $filepath = $this->getBasedir() . '/' . uniqid('aam_');
193
+ $result = false;
194
+
195
+ if (file_put_contents($filepath, $zip)) { //unzip the archive
196
+ WP_Filesystem(false, false, true); //init filesystem
197
+ $result = unzip_file($filepath, $this->getBasedir());
198
+ if (!is_wp_error($result)) {
199
+ $result = true;
200
+ }
201
+ @unlink($filepath); //remove the working archive
202
+ }
203
+
204
+ return $result;
205
+ }
206
+
207
+ /**
208
+ * Get extension version
209
+ *
210
+ * @param string $id
211
+ *
212
+ * @return string|null
213
+ *
214
+ * @access public
215
+ */
216
+ public function getVersion($id) {
217
+ return (defined($id) ? constant($id) : null);
218
+ }
219
+
220
+ /**
221
+ * Get extension list
222
+ *
223
+ * @return array
224
+ *
225
+ * @access public
226
+ */
227
+ public function getList() {
228
+ if (empty($this->list)) {
229
+ $list = require dirname(__FILE__) . '/List.php';
230
+ $index = AAM_Core_Compatibility::getExtensionList();
231
+
232
+ foreach ($list as &$item) {
233
+ $id = $item['id'];
234
+
235
+ if (isset($index[$id])) {
236
+ $item['status'] = $index[$id]['status'];
237
+ } elseif (defined($id)) {
238
+ $item['status'] = self::STATUS_INSTALLED;
239
+ } else {
240
+ $item['status'] = self::STATUS_DOWNLOAD;
241
+ }
242
+
243
+ if (empty($item['license'])) {
244
+ if (!empty($index[$id]['license'])) {
245
+ $item['license'] = $index[$id]['license'];
246
+ } else {
247
+ $item['license'] = 0;
248
+ }
249
+ }
250
+ }
251
+
252
+ $this->list = $list;
253
+ }
254
+
255
+ return $this->list;
256
+ }
257
+
258
+ /**
259
+ * Check extension directory
260
+ *
261
+ * @return boolean|sstring
262
+ *
263
+ * @access public
264
+ *
265
+ * @global type $wp_filesystem
266
+ */
267
+ public function checkDirectory() {
268
+ $error = false;
269
+ $basedir = $this->getBasedir();
270
+
271
+ if (!file_exists($basedir)) {
272
+ if (!@mkdir($basedir, fileperms(ABSPATH) & 0777 | 0755, true)) {
273
+ $error = sprintf(__('Failed to create %s', AAM_KEY), $basedir);
274
+ }
275
+ } elseif (!is_writable($basedir)) {
276
+ $error = sprintf(
277
+ __('Directory %s is not writable', AAM_KEY), $basedir
278
+ );
279
+ }
280
+
281
+ return $error;
282
+ }
283
+
284
+ /**
285
+ * Get base directory
286
+ *
287
+ * @return string
288
+ *
289
+ * @access public
290
+ */
291
+ public function getBasedir() {
292
+ return AAM_Core_Config::get('extention.directory', AAM_EXTENSION_BASE);
293
+ }
294
+
295
+ }
Application/{Core → Extension}/Server.php RENAMED
@@ -15,12 +15,12 @@
15
  * @package AAM
16
  * @author Vasyl Martyniuk <vasyl@vasyltech.com>
17
  */
18
- final class AAM_Core_Server {
19
 
20
  /**
21
  * Server endpoint
22
  */
23
- const SERVER_URL = 'http://rest.vasyltech.com/v1';
24
 
25
  /**
26
  * Fetch the extension list
@@ -32,16 +32,19 @@ final class AAM_Core_Server {
32
  * @access public
33
  */
34
  public static function check() {
35
- $domain = parse_url(site_url(), PHP_URL_HOST);
36
 
37
  //prepare check params
38
- $params = array('domain' => $domain, 'extensions' => array());
 
 
 
 
39
 
40
  //add list of all premium installed extensions
41
- foreach(AAM_Core_Repository::getInstance()->getExtensionList() as $ext) {
42
- if ($ext->status !== AAM_Core_Repository::STATUS_DOWNLOAD
43
- && ($ext->price !== 'Free')) {
44
- $params['extensions'][$ext->title] = (isset($ext->license) ? $ext->license : null);
45
  }
46
  }
47
 
@@ -50,8 +53,8 @@ final class AAM_Core_Server {
50
 
51
  if (!is_wp_error($response)) {
52
  //WP Error Fix bug report
53
- if ($response->error !== true && !empty($response->products)) {
54
- $result = $response->products;
55
  }
56
  }
57
 
@@ -68,11 +71,11 @@ final class AAM_Core_Server {
68
  * @access public
69
  */
70
  public static function download($license) {
71
- $host = parse_url(site_url(), PHP_URL_HOST);
72
 
73
  $response = self::send(
74
  self::SERVER_URL . '/download',
75
- array('license' => $license, 'domain' => $host)
76
  );
77
 
78
  if (!is_wp_error($response)) {
@@ -98,10 +101,15 @@ final class AAM_Core_Server {
98
  * @access protected
99
  */
100
  protected static function send($request, $params) {
 
 
 
101
  $response = AAM_Core_API::cURL($request, false, $params);
102
-
103
  if (!is_wp_error($response)) {
104
  $response = json_decode($response['body']);
 
 
 
105
  }
106
 
107
  return $response;
15
  * @package AAM
16
  * @author Vasyl Martyniuk <vasyl@vasyltech.com>
17
  */
18
+ final class AAM_Extension_Server {
19
 
20
  /**
21
  * Server endpoint
22
  */
23
+ const SERVER_URL = 'https://aamplugin.com/api/v1';
24
 
25
  /**
26
  * Fetch the extension list
32
  * @access public
33
  */
34
  public static function check() {
35
+ $domain = parse_url(site_url(), PHP_URL_HOST);
36
 
37
  //prepare check params
38
+ $params = array(
39
+ 'domain' => $domain,
40
+ 'version' => AAM_Core_API::version(),
41
+ 'extensions' => array()
42
+ );
43
 
44
  //add list of all premium installed extensions
45
+ foreach(AAM_Extension_Repository::getInstance()->getList() as $item) {
46
+ if ($item['status'] !== AAM_Extension_Repository::STATUS_DOWNLOAD) {
47
+ $params['extensions'][$item['title']] = $item['license'];
 
48
  }
49
  }
50
 
53
 
54
  if (!is_wp_error($response)) {
55
  //WP Error Fix bug report
56
+ if ($response->error !== true && !empty($response->extensions)) {
57
+ $result = $response->extensions;
58
  }
59
  }
60
 
71
  * @access public
72
  */
73
  public static function download($license) {
74
+ $domain = parse_url(site_url(), PHP_URL_HOST);
75
 
76
  $response = self::send(
77
  self::SERVER_URL . '/download',
78
+ array('license' => $license, 'domain' => $domain)
79
  );
80
 
81
  if (!is_wp_error($response)) {
101
  * @access protected
102
  */
103
  protected static function send($request, $params) {
104
+ //add AAM UID
105
+ $params['uid'] = AAM_Core_API::getOption('aam-uid', null, 'site');
106
+
107
  $response = AAM_Core_API::cURL($request, false, $params);
 
108
  if (!is_wp_error($response)) {
109
  $response = json_decode($response['body']);
110
+ if (empty($params['uid']) && isset($response->uid)) {
111
+ AAM_Core_API::updateOption('aam-uid', $response->uid, 'site');
112
+ }
113
  }
114
 
115
  return $response;
Application/Frontend/Manager.php CHANGED
@@ -39,7 +39,7 @@ class AAM_Frontend_Manager {
39
  public function __construct() {
40
  if (AAM_Core_Config::get('frontend-access-control', true)) {
41
  //login hook
42
- add_action('wp_login', array($this, 'login'), 999);
43
 
44
  //control WordPress frontend
45
  add_action('wp', array($this, 'wp'), 999);
@@ -58,11 +58,41 @@ class AAM_Frontend_Manager {
58
  if (AAM_Core_Config::get('large-post-number', false)) {
59
  add_action('pre_get_posts', array($this, 'preparePostQuery'));
60
  }
 
 
 
 
61
  //filter post content
62
  add_filter('the_content', array($this, 'theContent'), 999);
 
 
 
 
63
  //admin bar
64
  $this->checkAdminBar();
65
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
66
  }
67
 
68
  /**
@@ -70,32 +100,161 @@ class AAM_Frontend_Manager {
70
  * @param type $login
71
  * @param type $user
72
  */
73
- public function login() {
74
- $user = wp_get_current_user();
75
-
76
  if (is_a($user, 'WP_User')) {
 
 
77
  AAM_Core_API::deleteOption('aam-user-switch-' . $user->ID);
78
 
79
  $subject = new AAM_Core_Subject_User($user->ID);
 
80
 
81
  //if Login redirect is defined
82
- $type = apply_filters(
83
- 'aam-login-redirect-option-filter',
84
- AAM_Core_Config::get('login.redirect.type', 'default'),
85
- 'login.redirect.type',
86
- $subject
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
87
  );
 
 
 
 
 
 
 
88
 
89
- if ($type !== 'default') {
90
- $redirect = apply_filters(
91
- 'aam-login-redirect-option-filter',
92
- AAM_Core_Config::get("login.redirect.{$type}"),
93
- "login.redirect.{$type}",
94
- $subject
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
95
  );
96
- AAM_Core_API::redirect($redirect);
97
  }
98
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
99
  }
100
 
101
  /**
@@ -108,7 +267,6 @@ class AAM_Frontend_Manager {
108
  */
109
  public function wp() {
110
  $post = $this->getCurrentPost();
111
-
112
  if (is_a($post, 'WP_Post')) {
113
  $this->checkPostReadAccess($post);
114
  }
@@ -306,31 +464,6 @@ class AAM_Frontend_Manager {
306
  }
307
  }
308
 
309
- /**
310
- * Control User Block flag
311
- *
312
- * @param WP_Error $user
313
- *
314
- * @return WP_Error|WP_User
315
- *
316
- * @access public
317
- */
318
- public function authenticate($user) {
319
- if ($user->user_status == 1) {
320
- $user = new WP_Error();
321
-
322
- $message = '[ERROR]: User is locked. Please contact your website ';
323
- $message .= 'administrator.';
324
-
325
- $user->add(
326
- 'authentication_failed',
327
- AAM_Backend_View_Helper::preparePhrase($message, 'strong')
328
- );
329
- }
330
-
331
- return $user;
332
- }
333
-
334
  /**
335
  *
336
  * @param type $query
@@ -339,12 +472,20 @@ class AAM_Frontend_Manager {
339
  if ($this->skip === false) {
340
  $filtered = array();
341
 
342
- foreach ($this->fetchPosts($query) as $id) {
343
- if (AAM::getUser()->getObject('post', $id)->has('frontend.list')) {
344
- $filtered[] = $id;
 
 
 
 
 
 
 
 
345
  }
 
346
  }
347
-
348
  if (isset($query->query_vars['post__not_in'])) {
349
  $query->query_vars['post__not_in'] = array_merge(
350
  $query->query_vars['post__not_in'], $filtered
@@ -396,21 +537,11 @@ class AAM_Frontend_Manager {
396
 
397
  if (is_a($post, 'WP_Post')) {
398
  $object = AAM::getUser()->getObject('post', $post->ID);
399
-
400
  if ($object->has('frontend.limit')) {
401
- $message = apply_filters(
402
- 'aam-filter-teaser-option',
403
- AAM_Core_Config::get("frontend.teaser.message"),
404
- "frontend.teaser.message",
405
- AAM::getUser()
406
- );
407
- $excerpt = apply_filters(
408
- 'aam-filter-teaser-option',
409
- AAM_Core_Config::get("frontend.teaser.excerpt"),
410
- "frontend.teaser.excerpt",
411
- AAM::getUser()
412
- );
413
-
414
  $html = (intval($excerpt) ? $post->post_excerpt : '');
415
  $html .= stripslashes($message);
416
  $content = do_shortcode($html);
@@ -420,6 +551,18 @@ class AAM_Frontend_Manager {
420
  return $content;
421
  }
422
 
 
 
 
 
 
 
 
 
 
 
 
 
423
  /**
424
  * Check if user is post author
425
  *
39
  public function __construct() {
40
  if (AAM_Core_Config::get('frontend-access-control', true)) {
41
  //login hook
42
+ add_action('wp_login', array($this, 'login'), 10, 2);
43
 
44
  //control WordPress frontend
45
  add_action('wp', array($this, 'wp'), 999);
58
  if (AAM_Core_Config::get('large-post-number', false)) {
59
  add_action('pre_get_posts', array($this, 'preparePostQuery'));
60
  }
61
+
62
+ //password protected filter
63
+ add_filter('post_password_required', array($this, 'isProtected'), 10, 2);
64
+
65
  //filter post content
66
  add_filter('the_content', array($this, 'theContent'), 999);
67
+
68
+ //manage AAM shortcode
69
+ add_shortcode('aam', array($this, 'processShortcode'));
70
+
71
  //admin bar
72
  $this->checkAdminBar();
73
  }
74
+
75
+ if (AAM_Core_Request::get('action') == 'aam-auth') {
76
+ $this->doubleAuthentication();
77
+ }
78
+
79
+ //security controls
80
+ add_action('login_form_login', array($this, 'loginSubmit'), 1);
81
+ }
82
+
83
+ /**
84
+ *
85
+ */
86
+ public function loginSubmit() {
87
+ //Login Timeout
88
+ if (AAM_Core_Config::get('login-timeout', false)) {
89
+ @sleep(intval(AAM_Core_Config::get('security.login.timeout', 1)));
90
+ }
91
+
92
+ //Brute Force Lockout
93
+ if (AAM_Core_Config::get('brute-force-lockout', false)) {
94
+ $this->updateLoginCounter(1);
95
+ }
96
  }
97
 
98
  /**
100
  * @param type $login
101
  * @param type $user
102
  */
103
+ public function login($username, $user) {
 
 
104
  if (is_a($user, 'WP_User')) {
105
+ $this->updateLoginCounter(-1);
106
+
107
  AAM_Core_API::deleteOption('aam-user-switch-' . $user->ID);
108
 
109
  $subject = new AAM_Core_Subject_User($user->ID);
110
+ $object = $subject->getObject('loginRedirect');
111
 
112
  //if Login redirect is defined
113
+ $type = $object->get('login.redirect.type');
114
+ $redirect = AAM_Core_Request::request('redirect_to');
115
+
116
+ if (empty($redirect) &&!empty($type) && $type !== 'default') {
117
+ $redirect = $object->get("login.redirect.{$type}");
118
+ AAM_Core_API::redirect($redirect);
119
+ }
120
+ }
121
+ }
122
+
123
+ /**
124
+ *
125
+ * @param type $increment
126
+ */
127
+ protected function updateLoginCounter($increment) {
128
+ $attempts = get_transient('aam-login-attemtps');
129
+
130
+ if ($attempts !== false) {
131
+ $timeout = get_option('_transient_timeout_aam-login-attemtps') - time();
132
+ $attempts = intval($attempts) + $increment;
133
+ } else {
134
+ $attempts = 1;
135
+ $timeout = strtotime(
136
+ '+' . AAM_Core_Config::get('security.login.period', '2 minutes')
137
+ ) - time();
138
+ }
139
+
140
+ if ($attempts >= AAM_Core_Config::get('security.login.attempts', 20)) {
141
+ wp_safe_redirect(site_url('index.php'));
142
+ exit;
143
+ } else {
144
+ set_transient('aam-login-attemtps', $attempts, $timeout);
145
+ }
146
+ }
147
+
148
+ /**
149
+ * Control User Block flag
150
+ *
151
+ * @param WP_Error $user
152
+ *
153
+ * @return WP_Error|WP_User
154
+ *
155
+ * @access public
156
+ */
157
+ public function authenticate($user) {
158
+ if ($user->user_status == 1) {
159
+ $user = new WP_Error();
160
+
161
+ $message = '[ERROR]: User is locked. Please contact your website ';
162
+ $message .= 'administrator.';
163
+
164
+ $user->add(
165
+ 'authentication_failed',
166
+ AAM_Backend_View_Helper::preparePhrase($message, 'strong')
167
  );
168
+ } elseif (AAM_Core_Config::get('login-ip-track', false)) {
169
+ $baseIp = get_user_meta($user->ID, 'aam-login-ip', true);
170
+ $ip = AAM_Core_Request::server('REMOTE_ADDR');
171
+
172
+ if (empty($baseIp)) {
173
+ update_user_meta($user->ID, 'aam-login-ip', $ip);
174
+ }
175
 
176
+ if (!empty($baseIp) && ($baseIp != $ip)) {
177
+ $key = get_password_reset_key($user);
178
+ update_user_meta($user->ID, 'aam-login-key', $key);
179
+
180
+ if ( is_multisite() ) {
181
+ $blogname = get_network()->site_name;
182
+ } else {
183
+ $blogname = wp_specialchars_decode(get_option('blogname'), ENT_QUOTES);
184
+ }
185
+
186
+ $title = sprintf( __('[%s] Double Authentication'), $blogname );
187
+
188
+ $message = sprintf(__('Someone was trying to login from the different IP address %s:'), $ip) . "\r\n\r\n";
189
+ $message .= sprintf(__('Website: %s'), network_home_url( '/' )) . "\r\n";
190
+ $message .= sprintf(__('Username: %s'), $user->user_login) . "\r\n\r\n";
191
+ $message .= __('Visit the following address to authorize the login:') . "\r\n\r\n";
192
+ $message .= '<' . network_site_url("index.php?action=aam-auth&key={$key}&login={$user->user_login}") . ">\r\n";
193
+
194
+ wp_mail($user->user_email, $title, $message);
195
+
196
+ $user = new WP_Error();
197
+
198
+ $message = '[ERROR]: Double authentication is required. ';
199
+ $message .= 'Please check your email or enter username and ';
200
+ $message .= 'password again to resend the email.';
201
+
202
+ $user->add(
203
+ 'authentication_failed',
204
+ AAM_Backend_View_Helper::preparePhrase($message, 'strong')
205
  );
 
206
  }
207
  }
208
+
209
+ return $user;
210
+ }
211
+
212
+ /**
213
+ *
214
+ */
215
+ protected function doubleAuthentication() {
216
+ $login = AAM_Core_Request::get('login');
217
+ $key = AAM_Core_Request::get('key');
218
+ $user = get_user_by('login', $login);
219
+
220
+ if (is_a($user, 'WP_User')) {
221
+ $stored = get_user_meta($user->ID, 'aam-login-key', true);
222
+
223
+ if ($stored == $key) {
224
+ update_user_meta($user->ID, 'aam-login-ip', AAM_Core_Request::server('REMOTE_ADDR'));
225
+ delete_user_meta($user->ID, 'aam-login-key');
226
+ wp_safe_redirect(site_url('wp-login.php'));
227
+ exit;
228
+ }
229
+ }
230
+
231
+ wp_safe_redirect(site_url('index.php'));
232
+ exit;
233
+ }
234
+
235
+ /**
236
+ *
237
+ * @param type $response
238
+ * @param WP_Post $post
239
+ * @return type
240
+ */
241
+ public function isProtected($response, $post) {
242
+ $object = AAM::getUser()->getObject('post', $post->ID);
243
+
244
+ if ($object->has('frontend.protected')) {
245
+ $hasher = new PasswordHash( 8, true );
246
+ $hash = wp_unslash(AAM_Core_Request::cookie('wp-postpass_' . COOKIEHASH));
247
+
248
+ if (empty($hash)) {
249
+ $response = true;
250
+ } else {
251
+ $response = !$hasher->CheckPassword(
252
+ $object->get('frontend.password'), $hash
253
+ );
254
+ }
255
+ }
256
+
257
+ return $response;
258
  }
259
 
260
  /**
267
  */
268
  public function wp() {
269
  $post = $this->getCurrentPost();
 
270
  if (is_a($post, 'WP_Post')) {
271
  $this->checkPostReadAccess($post);
272
  }
464
  }
465
  }
466
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
467
  /**
468
  *
469
  * @param type $query
472
  if ($this->skip === false) {
473
  $filtered = array();
474
 
475
+ if (AAM_Core_Cache::has('post__not_in')) {
476
+ $filtered = AAM_Core_Cache::get('post__not_in');
477
+ } else {
478
+ foreach ($this->fetchPosts($query) as $id) {
479
+ $object = AAM::getUser()->getObject('post', $id);
480
+ $list = $object->has('frontend.list');
481
+ $others = $object->has('frontend.list_others');
482
+
483
+ if ($list || ($others && !$this->isAuthor($object->getPost()))) {
484
+ $filtered[] = $id;
485
+ }
486
  }
487
+ AAM_Core_Cache::set(AAM::getUser(), 'post__not_in', $filtered);
488
  }
 
489
  if (isset($query->query_vars['post__not_in'])) {
490
  $query->query_vars['post__not_in'] = array_merge(
491
  $query->query_vars['post__not_in'], $filtered
537
 
538
  if (is_a($post, 'WP_Post')) {
539
  $object = AAM::getUser()->getObject('post', $post->ID);
 
540
  if ($object->has('frontend.limit')) {
541
+ $teaser = AAM::getUser()->getObject('teaser');
542
+ $message = $teaser->get('frontend.teaser.message');
543
+ $excerpt = $teaser->get('frontend.teaser.excerpt');
544
+
 
 
 
 
 
 
 
 
 
545
  $html = (intval($excerpt) ? $post->post_excerpt : '');
546
  $html .= stripslashes($message);
547
  $content = do_shortcode($html);
551
  return $content;
552
  }
553
 
554
+ /**
555
+ *
556
+ * @param type $args
557
+ * @param type $content
558
+ * @return type
559
+ */
560
+ public function processShortcode($args, $content) {
561
+ $shortcode = new AAM_Shortcode_Factory($args, $content);
562
+
563
+ return $shortcode->process();
564
+ }
565
+
566
  /**
567
  * Check if user is post author
568
  *
Application/Shortcode/Factory.php ADDED
@@ -0,0 +1,58 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * ======================================================================
5
+ * LICENSE: This file is subject to the terms and conditions defined in *
6
+ * file 'license.txt', which is part of this source code package. *
7
+ * ======================================================================
8
+ */
9
+
10
+ /**
11
+ * AAM Shortcode
12
+ *
13
+ * @package AAM
14
+ * @author Vasyl Martyniuk <vasyl@vasyltech.com>
15
+ */
16
+ class AAM_Shortcode_Factory {
17
+
18
+ /**
19
+ *
20
+ * @var type
21
+ */
22
+ protected $strategy = null;
23
+
24
+ /**
25
+ * Initialize shortcode factory
26
+ *
27
+ * @param type $args
28
+ * @param type $content
29
+ */
30
+ public function __construct($args, $content) {
31
+ $context = !empty($args['context']) ? $args['context'] : null;
32
+
33
+ $classname = 'AAM_Shortcode_Strategy_' . ucfirst($context);
34
+
35
+ if (class_exists($classname)) {
36
+ $this->strategy = new $classname($args, $content);
37
+ } else {
38
+ $this->strategy = apply_filters(
39
+ 'aam-shortcode-context-filter', null, $args, $content
40
+ );
41
+ }
42
+ }
43
+
44
+ /**
45
+ *
46
+ * @return string
47
+ */
48
+ public function process() {
49
+ if (is_a($this->strategy, 'AAM_Shortcode_Strategy_Interface')) {
50
+ $content = $this->strategy->run();
51
+ } else {
52
+ $content = __('No valid strategy found for the given context', AAM_KEY);
53
+ }
54
+
55
+ return $content;
56
+ }
57
+
58
+ }
Application/Shortcode/Strategy/Content.php ADDED
@@ -0,0 +1,125 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * ======================================================================
5
+ * LICENSE: This file is subject to the terms and conditions defined in *
6
+ * file 'license.txt', which is part of this source code package. *
7
+ * ======================================================================
8
+ */
9
+
10
+ /**
11
+ * AAM shortcode strategy for content
12
+ *
13
+ * Shortcode strategy to manage access to the parts of post's content
14
+ *
15
+ * @package AAM
16
+ * @author Vasyl Martyniuk <vasyl@vasyltech.com>
17
+ */
18
+ class AAM_Shortcode_Strategy_Content implements AAM_Shortcode_Strategy_Interface {
19
+
20
+ /**
21
+ *
22
+ * @var type
23
+ */
24
+ protected $args;
25
+
26
+ /**
27
+ *
28
+ * @var type
29
+ */
30
+ protected $content;
31
+
32
+ /**
33
+ * Initialize shortcode decorator
34
+ *
35
+ * Expecting attributes in $args are:
36
+ * "hide" => comma-separated list of role and user IDs to hide content
37
+ * "show" => comma-separated list of role and user IDs to show content
38
+ * "limit" => comma-separated list of role and user IDs to limit content
39
+ * "message" => message to show if "limit" is defined
40
+ * "callback" => callback function that returns message if "limit" is defined
41
+ *
42
+ * @param type $args
43
+ * @param type $content
44
+ */
45
+ public function __construct($args, $content) {
46
+ $this->args = $args;
47
+ $this->content = $content;
48
+ }
49
+
50
+ /**
51
+ * Process shortcode
52
+ *
53
+ */
54
+ public function run() {
55
+ //prepare user
56
+ if (get_current_user_id()) {
57
+ $user = array(AAM::getUser()->ID, AAM::getUser()->roles[0]);
58
+ } else {
59
+ $user = array('visitor');
60
+ }
61
+
62
+ $show = $this->getAccess('show');
63
+ $limit = $this->getAccess('limit');
64
+ $hide = $this->getAccess('hide');
65
+ $msg = $this->getMessage();
66
+
67
+ if (!empty($this->args['callback'])) {
68
+ $content = call_user_func($this->args['callback'], $this);
69
+ } else {
70
+ $content = $this->content;
71
+
72
+ //#1. Check if content is restricted for current user
73
+ if (in_array('all', $hide) || count(array_intersect($user, $hide))) {
74
+ $content = '';
75
+ }
76
+
77
+ //#2. Check if content is limited for current user
78
+ if (in_array('all', $limit) || count(array_intersect($user, $limit))) {
79
+ $content = do_shortcode($msg);
80
+ }
81
+
82
+ //#3. Check if content is allosed for current user
83
+ if (count(array_intersect($user, $show))) {
84
+ $content = $this->content;
85
+ }
86
+ }
87
+
88
+ return $content;
89
+ }
90
+
91
+ /**
92
+ *
93
+ * @return type
94
+ */
95
+ public function getAccess($type) {
96
+ $access = (isset($this->args[$type]) ? $this->args[$type] : null);
97
+
98
+ return array_map('trim', explode(',', $access));
99
+ }
100
+
101
+ /**
102
+ *
103
+ * @return type
104
+ */
105
+ public function getMessage() {
106
+ return isset($this->args['message']) ? $this->args['message'] : null;
107
+ }
108
+
109
+ /**
110
+ *
111
+ * @return type
112
+ */
113
+ public function getArgs() {
114
+ return $this->args;
115
+ }
116
+
117
+ /**
118
+ *
119
+ * @return type
120
+ */
121
+ public function getContent() {
122
+ return $this->content;
123
+ }
124
+
125
+ }
Application/Shortcode/Strategy/Interface.php ADDED
@@ -0,0 +1,31 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * ======================================================================
5
+ * LICENSE: This file is subject to the terms and conditions defined in *
6
+ * file 'license.txt', which is part of this source code package. *
7
+ * ======================================================================
8
+ */
9
+
10
+ /**
11
+ * AAM shortcode strategy interface
12
+ *
13
+ * @package AAM
14
+ * @author Vasyl Martyniuk <vasyl@vasyltech.com>
15
+ */
16
+ interface AAM_Shortcode_Strategy_Interface {
17
+
18
+ /**
19
+ * Initialize shortcode strategy
20
+ *
21
+ * @param type $args
22
+ * @param type $content
23
+ */
24
+ public function __construct($args, $content);
25
+
26
+ /**
27
+ * Process strategy
28
+ */
29
+ public function run();
30
+
31
+ }
Application/Shortcode/Strategy/Login.php ADDED
@@ -0,0 +1,81 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * ======================================================================
5
+ * LICENSE: This file is subject to the terms and conditions defined in *
6
+ * file 'license.txt', which is part of this source code package. *
7
+ * ======================================================================
8
+ */
9
+
10
+ /**
11
+ * AAM shortcode strategy for login button
12
+ *
13
+ * @package AAM
14
+ * @author Vasyl Martyniuk <vasyl@vasyltech.com>
15
+ */
16
+ class AAM_Shortcode_Strategy_Login implements AAM_Shortcode_Strategy_Interface {
17
+
18
+ /**
19
+ *
20
+ * @var type
21
+ */
22
+ protected $args;
23
+
24
+ /**
25
+ *
26
+ * @var type
27
+ */
28
+ protected $content;
29
+
30
+ /**
31
+ * Initialize shortcode decorator
32
+ *
33
+ * Expecting attributes in $args are:
34
+ * "class" => CSS class for login button
35
+ * "label" => Login button label
36
+ * "callback" => callback function that returns the login button
37
+ *
38
+ * @param type $args
39
+ * @param type $content
40
+ */
41
+ public function __construct($args, $content) {
42
+ $this->args = $args;
43
+ $this->content = $content;
44
+ }
45
+
46
+ /**
47
+ * Process shortcode
48
+ *
49
+ */
50
+ public function run() {
51
+ $redirect = AAM_Core_Request::server('REQUEST_URI');
52
+ $class = (isset($this->args['class']) ? $this->args['class'] : '');
53
+ $label = (isset($this->args['label']) ? $this->args['label'] : 'Login');
54
+
55
+ if (isset($this->args['callback'])) {
56
+ $button = call_user_func($this->args['callback'], $this);
57
+ } else {
58
+ $button = '<a href="' . wp_login_url($redirect) . '" ';
59
+ $button .= 'class="' . $class . '">' . $label . '</a>';
60
+ }
61
+
62
+ return $button;
63
+ }
64
+
65
+ /**
66
+ *
67
+ * @return type
68
+ */
69
+ public function getArgs() {
70
+ return $this->args;
71
+ }
72
+
73
+ /**
74
+ *
75
+ * @return type
76
+ */
77
+ public function getContent() {
78
+ return $this->content;
79
+ }
80
+
81
+ }
Lang/advanced-access-manager-en_US.mo CHANGED
Binary file
Lang/advanced-access-manager-en_US.po CHANGED
@@ -1,19 +1,19 @@
1
  msgid ""
2
  msgstr ""
3
  "Project-Id-Version: AAM\n"
4
- "POT-Creation-Date: 2016-10-14 14:07-0400\n"
5
  "PO-Revision-Date: \n"
 
6
  "Language-Team: WP AAM <vasyl@vasyltech.com>\n"
 
7
  "MIME-Version: 1.0\n"
8
  "Content-Type: text/plain; charset=UTF-8\n"
9
  "Content-Transfer-Encoding: 8bit\n"
10
- "X-Generator: Poedit 1.8.9\n"
11
  "Plural-Forms: nplurals=2; plural=(n != 1);\n"
12
  "X-Poedit-SourceCharset: UTF-8\n"
13
  "X-Poedit-KeywordsList: __\n"
14
  "X-Poedit-Basepath: ..\n"
15
- "Last-Translator: \n"
16
- "Language: en_US\n"
17
  "X-Poedit-SearchPath-0: .\n"
18
 
19
  #: media/js/aam-ui.js:44 Application/Backend/View/Localization.php:23
@@ -33,17 +33,17 @@ msgstr ""
33
  msgid "_TOTAL_ role(s)"
34
  msgstr ""
35
 
36
- #: media/js/aam-ui.js:98 media/js/aam-ui.js:543
37
  #: Application/Backend/View/Localization.php:27
38
- #: Application/Backend/phtml/index.phtml:118
39
  #: Application/Backend/phtml/object/capability.phtml:27
40
  #: Application/Backend/phtml/object/capability.phtml:57
41
  msgid "Create"
42
  msgstr ""
43
 
44
  #: media/js/aam-ui.js:118 Application/Backend/View/Localization.php:28
45
- #: Application/Backend/phtml/index.phtml:85
46
- #: Application/Backend/phtml/index.phtml:198
47
  msgid "Users"
48
  msgstr ""
49
 
@@ -59,196 +59,201 @@ msgstr ""
59
  msgid "Clone Role"
60
  msgstr ""
61
 
62
- #: media/js/aam-ui.js:198 media/js/aam-ui.js:383
63
  #: Application/Backend/View/Localization.php:35
64
  #: Application/Backend/View/Localization.php:47
65
- #: Application/Backend/phtml/index.phtml:152
66
  msgid "Delete Role"
67
  msgstr ""
68
 
69
- #: media/js/aam-ui.js:275 media/js/aam-ui.js:330 media/js/aam-ui.js:1121
70
- #: media/js/aam-ui.js:1167 Application/Backend/View/Localization.php:13
71
  msgid "Saving..."
72
  msgstr ""
73
 
74
- #: media/js/aam-ui.js:290 Application/Backend/View/Localization.php:29
75
  msgid "Failed to add new role"
76
  msgstr ""
77
 
78
- #: media/js/aam-ui.js:295 media/js/aam-ui.js:342 media/js/aam-ui.js:379
79
- #: media/js/aam-ui.js:473 media/js/aam-ui.js:505 media/js/aam-ui.js:834
80
- #: media/js/aam-ui.js:871 media/js/aam-ui.js:907 media/js/aam-ui.js:1134
81
- #: media/js/aam-ui.js:1180 media/js/aam-ui.js:1221 media/js/aam-ui.js:1360
82
- #: media/js/aam-ui.js:1407 media/js/aam-ui.js:1650 media/js/aam-ui.js:1715
83
- #: media/js/aam-ui.js:1781 media/js/aam-ui.js:1877 media/js/aam.js:207
84
- #: Application/Backend/View/Localization.php:15
85
  msgid "Application error"
86
  msgstr ""
87
 
88
- #: media/js/aam-ui.js:298 Application/Backend/View/Localization.php:30
89
  msgid "Add Role"
90
  msgstr ""
91
 
92
- #: media/js/aam-ui.js:337 Application/Backend/View/Localization.php:31
93
  msgid "Failed to update role"
94
  msgstr ""
95
 
96
- #: media/js/aam-ui.js:346 Application/Backend/View/Localization.php:32
97
- #: Application/Backend/phtml/extension.phtml:52
98
- #: Application/Backend/phtml/extension.phtml:77
99
- #: Application/Backend/phtml/index.phtml:140
100
  #: Application/Backend/phtml/object/capability.phtml:79
101
  msgid "Update"
102
  msgstr ""
103
 
104
- #: media/js/aam-ui.js:369 media/js/aam-ui.js:1208
105
  #: Application/Backend/View/Localization.php:33
106
  msgid "Deleting..."
107
  msgstr ""
108
 
109
- #: media/js/aam-ui.js:375 Application/Backend/View/Localization.php:34
110
  msgid "Failed to delete role"
111
  msgstr ""
112
 
113
- #: media/js/aam-ui.js:458 media/js/aam-ui.js:459 media/js/aam-ui.js:623
114
  #: Application/Backend/View/Localization.php:51
115
  msgid "Unlock User"
116
  msgstr ""
117
 
118
- #: media/js/aam-ui.js:464 media/js/aam-ui.js:465 media/js/aam-ui.js:612
119
  #: Application/Backend/View/Localization.php:50
120
  msgid "Lock User"
121
  msgstr ""
122
 
123
- #: media/js/aam-ui.js:469 Application/Backend/View/Localization.php:36
124
  msgid "Failed to block user"
125
  msgstr ""
126
 
127
- #: media/js/aam-ui.js:535 Application/Backend/View/Localization.php:37
128
  msgid "Search User"
129
  msgstr ""
130
 
131
- #: media/js/aam-ui.js:536 Application/Backend/View/Localization.php:38
132
  msgid "_TOTAL_ user(s)"
133
  msgstr ""
134
 
135
- #: media/js/aam-ui.js:560 Application/Backend/View/Localization.php:39
136
- #: Application/Backend/phtml/index.phtml:95
137
  msgid "Role"
138
  msgstr ""
139
 
140
- #: media/js/aam-ui.js:588 Application/Backend/View/Localization.php:48
141
  msgid "Manage User"
142
  msgstr ""
143
 
144
- #: media/js/aam-ui.js:601 Application/Backend/View/Localization.php:49
145
  msgid "Edit User"
146
  msgstr ""
147
 
148
- #: media/js/aam-ui.js:634
149
  msgid "Switch To User"
150
  msgstr ""
151
 
152
- #: media/js/aam-ui.js:690 Application/Backend/View/Localization.php:40
153
  msgid "Anonymous"
154
  msgstr ""
155
 
156
- #: media/js/aam-ui.js:739 Application/Backend/View/Localization.php:17
157
- #: Application/Backend/phtml/object/menu.phtml:57
 
 
 
 
158
  msgid "Show Menu"
159
  msgstr ""
160
 
161
- #: media/js/aam-ui.js:754 Application/Backend/View/Localization.php:18
162
- #: Application/Backend/phtml/object/menu.phtml:61
163
  msgid "Restrict Menu"
164
  msgstr ""
165
 
166
- #: media/js/aam-ui.js:866 Application/Backend/View/Localization.php:19
167
  msgid "Failed to retrieve mataboxes"
168
  msgstr ""
169
 
170
- #: media/js/aam-ui.js:894
171
  msgid "Processing"
172
  msgstr ""
173
 
174
- #: media/js/aam-ui.js:902
175
  msgid "Failed to initialize URL"
176
  msgstr ""
177
 
178
- #: media/js/aam-ui.js:910 Application/Backend/phtml/object/metabox.phtml:93
179
  msgid "Initialize"
180
  msgstr ""
181
 
182
- #: media/js/aam-ui.js:984 Application/Backend/View/Localization.php:52
183
  msgid "Failed to grand capability - WordPress policy"
184
  msgstr ""
185
 
186
- #: media/js/aam-ui.js:1019 Application/Backend/View/Localization.php:11
187
  msgid "Search Capability"
188
  msgstr ""
189
 
190
- #: media/js/aam-ui.js:1020 Application/Backend/View/Localization.php:12
191
  msgid "_TOTAL_ capability(s)"
192
  msgstr ""
193
 
194
- #: media/js/aam-ui.js:1022
195
  msgid "Nothing to show"
196
  msgstr ""
197
 
198
- #: media/js/aam-ui.js:1129 Application/Backend/View/Localization.php:14
199
  msgid "Failed to add new capability"
200
  msgstr ""
201
 
202
- #: media/js/aam-ui.js:1137 Application/Backend/View/Localization.php:16
203
  msgid "Add Capability"
204
  msgstr ""
205
 
206
- #: media/js/aam-ui.js:1175
207
  msgid "Failed to update capability"
208
  msgstr ""
209
 
210
- #: media/js/aam-ui.js:1183 Application/Backend/phtml/object/capability.phtml:69
211
  msgid "Update Capability"
212
  msgstr ""
213
 
214
- #: media/js/aam-ui.js:1216
215
  msgid "Failed to delete capability"
216
  msgstr ""
217
 
218
- #: media/js/aam-ui.js:1224 Application/Backend/phtml/object/capability.phtml:91
219
  msgid "Delete Capability"
220
  msgstr ""
221
 
222
- #: media/js/aam-ui.js:1446 Application/Backend/View/Localization.php:20
223
  msgid "Search"
224
  msgstr ""
225
 
226
- #: media/js/aam-ui.js:1447 Application/Backend/View/Localization.php:21
227
  msgid "_TOTAL_ object(s)"
228
  msgstr ""
229
 
230
- #: media/js/aam-ui.js:1511
231
  msgid "Drill-Down"
232
  msgstr ""
233
 
234
- #: media/js/aam-ui.js:1529 Application/Backend/View/Localization.php:43
235
  #: Application/Backend/phtml/metabox.phtml:7
236
  msgid "Manage Access"
237
  msgstr ""
238
 
239
- #: media/js/aam-ui.js:1541 Application/Backend/View/Localization.php:44
240
- #: Application/Backend/phtml/object/post.phtml:140
241
  msgid "Edit"
242
  msgstr ""
243
 
244
- #: media/js/aam-ui.js:1919 media/js/aam-ui.js:1956
 
245
  msgid "Application Error"
246
  msgstr ""
247
 
248
- #: Application/Backend/Feature/Abstract.php:29
249
  #: Application/Backend/Feature/Role.php:29
250
- #: Application/Backend/Feature/User.php:29 Application/Backend/Manager.php:452
251
- #: Application/Backend/Manager.php:477 Application/Core/API.php:256
252
  msgid "Access Denied"
253
  msgstr ""
254
 
@@ -260,29 +265,29 @@ msgstr ""
260
  msgid "Can not remove the capability"
261
  msgstr ""
262
 
263
- #: Application/Backend/Feature/Capability.php:252
264
- #: Application/Backend/Feature/Capability.php:291
265
  msgid "System"
266
  msgstr ""
267
 
268
- #: Application/Backend/Feature/Capability.php:253
269
- #: Application/Backend/Feature/Capability.php:293
270
- #: Application/Backend/Feature/Post.php:363
271
  msgid "Posts & Pages"
272
  msgstr ""
273
 
274
- #: Application/Backend/Feature/Capability.php:254
275
- #: Application/Backend/Feature/Capability.php:295
276
- #: Application/Backend/phtml/object/post.phtml:123
277
  msgid "Backend"
278
  msgstr ""
279
 
280
- #: Application/Backend/Feature/Capability.php:255
281
- #: Application/Backend/Feature/Capability.php:297
282
  msgid "Miscellaneous"
283
  msgstr ""
284
 
285
- #: Application/Backend/Feature/Capability.php:318
286
  msgid "Capabilities"
287
  msgstr ""
288
 
@@ -290,15 +295,19 @@ msgstr ""
290
  msgid "Contact Us"
291
  msgstr ""
292
 
293
- #: Application/Backend/Feature/Extension.php:110
294
  msgid "License key is missing."
295
  msgstr ""
296
 
297
- #: Application/Backend/Feature/Extension.php:187
298
  msgid "Extensions"
299
  msgstr ""
300
 
301
- #: Application/Backend/Feature/Menu.php:189
 
 
 
 
302
  msgid "Backend Menu"
303
  msgstr ""
304
 
@@ -306,32 +315,49 @@ msgstr ""
306
  msgid "Metaboxes & Widgets"
307
  msgstr ""
308
 
309
- #: Application/Backend/Feature/Post.php:268
310
  msgid "You reached your limitation."
311
  msgstr ""
312
 
313
- #: Application/Backend/Feature/Redirect.php:101
314
- msgid "Redirect"
 
 
 
 
315
  msgstr ""
316
 
317
- #: Application/Backend/Feature/Teaser.php:101
 
 
 
 
 
318
  msgid "Content Teaser"
319
  msgstr ""
320
 
321
- #: Application/Backend/Feature/Utility.php:91
322
  msgid "Utilities"
323
  msgstr ""
324
 
325
- #: Application/Backend/Manager.php:124
326
  #, php-format
327
  msgid "Extension %s has new update available for download."
328
  msgstr ""
329
 
 
 
 
 
 
 
 
330
  #: Application/Backend/Manager.php:194
331
  msgid "Access Manager"
332
  msgstr ""
333
 
334
- #: Application/Backend/Manager.php:264 Application/Backend/Manager.php:289
 
335
  msgid "Access"
336
  msgstr ""
337
 
@@ -347,21 +373,247 @@ msgstr ""
347
  msgid "Current role"
348
  msgstr ""
349
 
350
- #: Application/Core/Repository.php:290
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
351
  #, php-format
352
  msgid "Failed to create %s"
353
  msgstr ""
354
 
355
- #: Application/Core/Repository.php:294
356
  #, php-format
357
  msgid "Directory %s is not writable"
358
  msgstr ""
359
 
360
- #: aam.php:166
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
361
  msgid "PHP 5.2 or higher is required."
362
  msgstr ""
363
 
364
- #: aam.php:168
365
  msgid "WP 3.8 or higher is required."
366
  msgstr ""
367
 
@@ -383,56 +635,50 @@ msgstr ""
383
  msgid "Submit"
384
  msgstr ""
385
 
386
- #: Application/Backend/phtml/extension.phtml:29
387
  msgid "Premium"
388
  msgstr ""
389
 
390
- #: Application/Backend/phtml/extension.phtml:30
391
- #: Application/Backend/phtml/extension.phtml:68
392
- #: Application/Backend/phtml/extension.phtml:93
393
  msgid "Free"
394
  msgstr ""
395
 
396
- #: Application/Backend/phtml/extension.phtml:31
397
- msgid "Useful Plugins"
398
- msgstr ""
399
-
400
- #: Application/Backend/phtml/extension.phtml:32
401
  msgid "Check For Updates"
402
  msgstr ""
403
 
404
- #: Application/Backend/phtml/extension.phtml:32
405
  msgid "Check"
406
  msgstr ""
407
 
408
- #: Application/Backend/phtml/extension.phtml:50
409
- #: Application/Backend/phtml/extension.phtml:75
410
- #: Application/Backend/phtml/extension.phtml:102
411
  msgid "Installed"
412
  msgstr ""
413
 
414
- #: Application/Backend/phtml/extension.phtml:54
415
- msgid "Purchase"
416
  msgstr ""
417
 
418
- #: Application/Backend/phtml/extension.phtml:79
419
- #: Application/Backend/phtml/extension.phtml:133
420
- msgid "Download"
421
  msgstr ""
422
 
423
- #: Application/Backend/phtml/extension.phtml:100
424
- msgid "Install"
 
425
  msgstr ""
426
 
427
- #: Application/Backend/phtml/extension.phtml:117
428
- #: Application/Backend/phtml/extension.phtml:144
429
- #: Application/Backend/phtml/extension.phtml:155
430
- #: Application/Backend/phtml/index.phtml:107
431
- #: Application/Backend/phtml/index.phtml:119
432
- #: Application/Backend/phtml/index.phtml:129
433
- #: Application/Backend/phtml/index.phtml:141
434
- #: Application/Backend/phtml/index.phtml:151
435
- #: Application/Backend/phtml/index.phtml:159
436
  #: Application/Backend/phtml/object/capability.phtml:47
437
  #: Application/Backend/phtml/object/capability.phtml:58
438
  #: Application/Backend/phtml/object/capability.phtml:68
@@ -441,29 +687,31 @@ msgstr ""
441
  #: Application/Backend/phtml/object/capability.phtml:98
442
  #: Application/Backend/phtml/object/metabox.phtml:80
443
  #: Application/Backend/phtml/object/metabox.phtml:94
444
- #: Application/Backend/phtml/utility.phtml:91
 
 
445
  msgid "Close"
446
  msgstr ""
447
 
448
- #: Application/Backend/phtml/extension.phtml:118
449
  msgid "Notification"
450
  msgstr ""
451
 
452
- #: Application/Backend/phtml/extension.phtml:122
453
  msgid ""
454
  "Extension requires manual installation. Please follow few simple steps below."
455
  msgstr ""
456
 
457
- #: Application/Backend/phtml/extension.phtml:134
458
- #: Application/Backend/phtml/utility.phtml:99
459
  msgid "Cancel"
460
  msgstr ""
461
 
462
- #: Application/Backend/phtml/extension.phtml:145
463
  msgid "Install Extension"
464
  msgstr ""
465
 
466
- #: Application/Backend/phtml/extension.phtml:149
467
  msgid ""
468
  "Insert license key that you recieved after the payment (find the email "
469
  "example below). It might take up to 2 hours to process the payment. Please "
@@ -482,7 +730,7 @@ msgid ""
482
  msgstr ""
483
 
484
  #: Application/Backend/phtml/index.phtml:22
485
- msgid "Please notice!"
486
  msgstr ""
487
 
488
  #: Application/Backend/phtml/index.phtml:23
@@ -494,101 +742,116 @@ msgstr ""
494
 
495
  #: Application/Backend/phtml/index.phtml:24
496
  #, php-format
497
- msgid "Also check our %sIntroduction to AAM%s so you know where to start."
498
  msgstr ""
499
 
500
- #: Application/Backend/phtml/index.phtml:44
501
  msgid "Notifications"
502
  msgstr ""
503
 
504
- #: Application/Backend/phtml/index.phtml:63
505
  msgid "AAM Multisite"
506
  msgstr ""
507
 
508
- #: Application/Backend/phtml/index.phtml:67
509
  msgid "Install AAM Multisite"
510
  msgstr ""
511
 
512
- #: Application/Backend/phtml/index.phtml:78
513
  msgid "Users/Roles Panel"
514
  msgstr ""
515
 
516
- #: Application/Backend/phtml/index.phtml:84
517
- #: Application/Backend/phtml/index.phtml:193
518
  msgid "Roles"
519
  msgstr ""
520
 
521
- #: Application/Backend/phtml/index.phtml:86
522
- #: Application/Backend/phtml/index.phtml:203
523
  msgid "Visitor"
524
  msgstr ""
525
 
526
- #: Application/Backend/phtml/index.phtml:96
527
- #: Application/Backend/phtml/index.phtml:172
 
 
 
 
 
528
  msgid "Action"
529
  msgstr ""
530
 
531
- #: Application/Backend/phtml/index.phtml:108
532
  msgid "Create Role"
533
  msgstr ""
534
 
535
- #: Application/Backend/phtml/index.phtml:112
536
- #: Application/Backend/phtml/index.phtml:134
537
  msgid "Role Name"
538
  msgstr ""
539
 
540
- #: Application/Backend/phtml/index.phtml:113
541
- #: Application/Backend/phtml/index.phtml:135
542
  msgid "Enter Role Name"
543
  msgstr ""
544
 
545
- #: Application/Backend/phtml/index.phtml:130
546
  msgid "Update Role"
547
  msgstr ""
548
 
549
- #: Application/Backend/phtml/index.phtml:155
550
  #, php-format
551
- msgid "Are you sure that you want to delete %s role?"
552
- msgstr ""
553
-
554
- #: Application/Backend/phtml/index.phtml:158
555
- #: Application/Backend/phtml/object/capability.phtml:97
556
- #: Application/Backend/phtml/object/post.phtml:151
557
- msgid "Delete"
558
  msgstr ""
559
 
560
- #: Application/Backend/phtml/index.phtml:171
561
  msgid "Username"
562
  msgstr ""
563
 
564
- #: Application/Backend/phtml/index.phtml:181
565
  msgid ""
566
  "Manage access to your website for visitors (any user that is not "
567
  "authenticated)"
568
  msgstr ""
569
 
570
- #: Application/Backend/phtml/index.phtml:182
571
  msgid "Manage Visitors"
572
  msgstr ""
573
 
574
- #: Application/Backend/phtml/index.phtml:194
 
 
 
 
 
 
 
 
 
 
575
  msgid ""
576
  "With Roles tab you can manage access for any defined role, edit role's name, "
577
  "create new role or even delete existing (but only when there is no users "
578
  "assigned to it). You are not allowed to delete Administrator role."
579
  msgstr ""
580
 
581
- #: Application/Backend/phtml/index.phtml:199
582
  msgid ""
583
  "Manage access for any user. As a bonus feature, you can block user. It means "
584
  "that user will be not able to login to your website anymore."
585
  msgstr ""
586
 
587
- #: Application/Backend/phtml/index.phtml:204
588
  msgid ""
589
  "Visitor can be considered any user that is not authenticated to your website."
590
  msgstr ""
591
 
 
 
 
 
 
 
592
  #: Application/Backend/phtml/object/capability.phtml:16
593
  msgid "Filter"
594
  msgstr ""
@@ -608,7 +871,7 @@ msgid "Capability"
608
  msgstr ""
609
 
610
  #: Application/Backend/phtml/object/capability.phtml:37
611
- #: Application/Backend/phtml/object/post.phtml:50
612
  msgid "Actions"
613
  msgstr ""
614
 
@@ -626,22 +889,37 @@ msgstr ""
626
  msgid "Are you sure that you want to delete %s capability for all roles?"
627
  msgstr ""
628
 
629
- #: Application/Backend/phtml/object/menu.phtml:6
630
- #, php-format
631
- msgid ""
632
- "For more information about Backend Menu feature check %sManage Access To "
633
- "Backend Menu%s article."
 
 
 
 
 
 
 
 
 
634
  msgstr ""
635
 
636
- #: Application/Backend/phtml/object/menu.phtml:15
 
 
 
 
 
 
637
  #: Application/Backend/phtml/object/metabox.phtml:12
638
- #: Application/Backend/phtml/object/post.phtml:34
639
- msgid "Settings are overwritten"
640
  msgstr ""
641
 
642
- #: Application/Backend/phtml/object/menu.phtml:16
643
  #: Application/Backend/phtml/object/metabox.phtml:13
644
- #: Application/Backend/phtml/object/post.phtml:35
645
  msgid "Reset To Default"
646
  msgstr ""
647
 
@@ -662,9 +940,7 @@ msgid "Frontend Widgets"
662
  msgstr ""
663
 
664
  #: Application/Backend/phtml/object/metabox.phtml:71
665
- msgid ""
666
- "The list of metaboxes and widgets is not initialized. Click Refresh button "
667
- "above."
668
  msgstr ""
669
 
670
  #: Application/Backend/phtml/object/metabox.phtml:81
@@ -688,91 +964,67 @@ msgstr ""
688
  msgid "Insert valid URL"
689
  msgstr ""
690
 
691
- #: Application/Backend/phtml/object/post.phtml:15
692
- #, php-format
693
- msgid "Learn more about post & pages access control from %sthis article%s."
694
- msgstr ""
695
-
696
- #: Application/Backend/phtml/object/post.phtml:24
697
  msgid "Root"
698
  msgstr ""
699
 
700
- #: Application/Backend/phtml/object/post.phtml:49
701
  msgid "Title"
702
  msgstr ""
703
 
704
- #: Application/Backend/phtml/object/post.phtml:58
705
- #: Application/Backend/phtml/object/post.phtml:63
706
- #: Application/Backend/phtml/object/post.phtml:164
707
  msgid "Go Back"
708
  msgstr ""
709
 
710
- #: Application/Backend/phtml/object/post.phtml:71
711
  msgid "Frontend"
712
  msgstr ""
713
 
714
- #: Application/Backend/phtml/object/post.phtml:77
715
- #: Application/Backend/phtml/object/post.phtml:129
716
- msgid "List"
717
  msgstr ""
718
 
719
- #: Application/Backend/phtml/object/post.phtml:88
720
- msgid "Read"
721
  msgstr ""
722
 
723
- #: Application/Backend/phtml/object/post.phtml:99
724
- msgid "LIMIT"
725
  msgstr ""
726
 
727
- #: Application/Backend/phtml/object/post.phtml:110
728
- msgid "Comment"
729
  msgstr ""
730
 
731
- #: Application/Backend/phtml/object/redirect.phtml:16
732
  msgid "Frontend Redirect"
733
  msgstr ""
734
 
735
- #: Application/Backend/phtml/object/redirect.phtml:17
736
  msgid "Backend Redirect"
737
  msgstr ""
738
 
739
- #: Application/Backend/phtml/object/redirect.phtml:47
740
- #: Application/Backend/phtml/object/redirect.phtml:95
741
  msgid "Customized Message"
742
  msgstr ""
743
 
744
- #: Application/Backend/phtml/object/redirect.phtml:48
745
- #: Application/Backend/phtml/object/redirect.phtml:96
746
  msgid "Enter message..."
747
  msgstr ""
748
 
749
- #: Application/Backend/phtml/object/redirect.phtml:52
750
- msgid "Existing Page"
751
- msgstr ""
752
-
753
- #: Application/Backend/phtml/object/redirect.phtml:61
754
- msgid "-- Select Page --"
755
- msgstr ""
756
-
757
- #: Application/Backend/phtml/object/redirect.phtml:67
758
- #: Application/Backend/phtml/object/redirect.phtml:100
759
- msgid "Custom URL"
760
- msgstr ""
761
-
762
- #: Application/Backend/phtml/object/redirect.phtml:72
763
- #: Application/Backend/phtml/object/redirect.phtml:104
764
- msgid "PHP Callback Function"
765
- msgstr ""
766
-
767
- #: Application/Backend/phtml/object/teaser.phtml:16
768
  msgid "Teaser Message"
769
  msgstr ""
770
 
771
- #: Application/Backend/phtml/object/teaser.phtml:17
772
  msgid "Enter teaser message..."
773
  msgstr ""
774
 
775
- #: Application/Backend/phtml/object/teaser.phtml:22
776
  msgid "Add excerpt before teaser message"
777
  msgstr ""
778
 
@@ -780,76 +1032,29 @@ msgstr ""
780
  msgid "Inherit Capabilities From"
781
  msgstr ""
782
 
783
- #: Application/Backend/phtml/utility.phtml:6
784
- #, php-format
785
- msgid "To learn more about AAM Utilities check %sAAM Utilities%s article."
786
- msgstr ""
787
-
788
- #: Application/Backend/phtml/utility.phtml:16
789
- msgid "Edit/Delete Capabilities"
790
- msgstr ""
791
-
792
- #: Application/Backend/phtml/utility.phtml:22
793
- #: Application/Backend/phtml/utility.phtml:33
794
- #: Application/Backend/phtml/utility.phtml:44
795
- #: Application/Backend/phtml/utility.phtml:55
796
- #: Application/Backend/phtml/utility.phtml:66
797
- msgid "Enabled"
798
- msgstr ""
799
-
800
- #: Application/Backend/phtml/utility.phtml:22
801
- #: Application/Backend/phtml/utility.phtml:33
802
- #: Application/Backend/phtml/utility.phtml:44
803
- #: Application/Backend/phtml/utility.phtml:55
804
- #: Application/Backend/phtml/utility.phtml:66
805
- msgid "Disabled"
806
- msgstr ""
807
-
808
- #: Application/Backend/phtml/utility.phtml:27
809
- msgid "Backend Access Control"
810
- msgstr ""
811
-
812
- #: Application/Backend/phtml/utility.phtml:29
813
- msgid ""
814
- "Use AAM to control access to posts, pages, categories, menus and metaboxes "
815
- "etc. Disable this setting to stop AAM from controling access for backend."
816
- msgstr ""
817
-
818
- #: Application/Backend/phtml/utility.phtml:38
819
- msgid "Frontend Access Control"
820
- msgstr ""
821
-
822
- #: Application/Backend/phtml/utility.phtml:40
823
  msgid ""
824
- "Use AAM to control access to posts, pages, categories, menus and widgets. "
825
- "Disable this setting to stop AAM from controling access for frontend."
826
  msgstr ""
827
 
828
- #: Application/Backend/phtml/utility.phtml:49
829
- msgid "Media Files Access Control"
830
- msgstr ""
831
-
832
- #: Application/Backend/phtml/utility.phtml:60
833
- msgid "Large Post Number Support"
834
- msgstr ""
835
-
836
- #: Application/Backend/phtml/utility.phtml:75
837
  msgid "Clear All Settings"
838
  msgstr ""
839
 
840
- #: Application/Backend/phtml/utility.phtml:77
841
  msgid ""
842
  "Remove all the settings related to AAM (including all extension licenses)."
843
  msgstr ""
844
 
845
- #: Application/Backend/phtml/utility.phtml:92
846
  msgid "Clear all settings"
847
  msgstr ""
848
 
849
- #: Application/Backend/phtml/utility.phtml:95
850
  msgid "All AAM settings will be removed."
851
  msgstr ""
852
 
853
- #: Application/Backend/phtml/utility.phtml:98
854
  msgid "Clear"
855
  msgstr ""
1
  msgid ""
2
  msgstr ""
3
  "Project-Id-Version: AAM\n"
4
+ "POT-Creation-Date: 2017-02-04 14:44-0500\n"
5
  "PO-Revision-Date: \n"
6
+ "Last-Translator: \n"
7
  "Language-Team: WP AAM <vasyl@vasyltech.com>\n"
8
+ "Language: en_US\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 1.8.11\n"
13
  "Plural-Forms: nplurals=2; plural=(n != 1);\n"
14
  "X-Poedit-SourceCharset: UTF-8\n"
15
  "X-Poedit-KeywordsList: __\n"
16
  "X-Poedit-Basepath: ..\n"
 
 
17
  "X-Poedit-SearchPath-0: .\n"
18
 
19
  #: media/js/aam-ui.js:44 Application/Backend/View/Localization.php:23
33
  msgid "_TOTAL_ role(s)"
34
  msgstr ""
35
 
36
+ #: media/js/aam-ui.js:98 media/js/aam-ui.js:540
37
  #: Application/Backend/View/Localization.php:27
38
+ #: Application/Backend/phtml/index.phtml:137
39
  #: Application/Backend/phtml/object/capability.phtml:27
40
  #: Application/Backend/phtml/object/capability.phtml:57
41
  msgid "Create"
42
  msgstr ""
43
 
44
  #: media/js/aam-ui.js:118 Application/Backend/View/Localization.php:28
45
+ #: Application/Backend/phtml/index.phtml:103
46
+ #: Application/Backend/phtml/index.phtml:223
47
  msgid "Users"
48
  msgstr ""
49
 
59
  msgid "Clone Role"
60
  msgstr ""
61
 
62
+ #: media/js/aam-ui.js:198 media/js/aam-ui.js:380
63
  #: Application/Backend/View/Localization.php:35
64
  #: Application/Backend/View/Localization.php:47
65
+ #: Application/Backend/phtml/index.phtml:171
66
  msgid "Delete Role"
67
  msgstr ""
68
 
69
+ #: media/js/aam-ui.js:272 media/js/aam-ui.js:327 media/js/aam-ui.js:1132
70
+ #: media/js/aam-ui.js:1178 Application/Backend/View/Localization.php:13
71
  msgid "Saving..."
72
  msgstr ""
73
 
74
+ #: media/js/aam-ui.js:287 Application/Backend/View/Localization.php:29
75
  msgid "Failed to add new role"
76
  msgstr ""
77
 
78
+ #: media/js/aam-ui.js:292 media/js/aam-ui.js:339 media/js/aam-ui.js:376
79
+ #: media/js/aam-ui.js:470 media/js/aam-ui.js:502 media/js/aam-ui.js:845
80
+ #: media/js/aam-ui.js:882 media/js/aam-ui.js:918 media/js/aam-ui.js:1145
81
+ #: media/js/aam-ui.js:1191 media/js/aam-ui.js:1232 media/js/aam-ui.js:1393
82
+ #: media/js/aam-ui.js:1441 media/js/aam-ui.js:1731 media/js/aam-ui.js:1826
83
+ #: media/js/aam-ui.js:1920 media/js/aam-ui.js:2009 media/js/aam-ui.js:2105
84
+ #: media/js/aam.js:207 Application/Backend/View/Localization.php:15
85
  msgid "Application error"
86
  msgstr ""
87
 
88
+ #: media/js/aam-ui.js:295 Application/Backend/View/Localization.php:30
89
  msgid "Add Role"
90
  msgstr ""
91
 
92
+ #: media/js/aam-ui.js:334 Application/Backend/View/Localization.php:31
93
  msgid "Failed to update role"
94
  msgstr ""
95
 
96
+ #: media/js/aam-ui.js:343 Application/Backend/View/Localization.php:32
97
+ #: Application/Backend/phtml/extension.phtml:51
98
+ #: Application/Backend/phtml/extension.phtml:78
99
+ #: Application/Backend/phtml/index.phtml:159
100
  #: Application/Backend/phtml/object/capability.phtml:79
101
  msgid "Update"
102
  msgstr ""
103
 
104
+ #: media/js/aam-ui.js:366 media/js/aam-ui.js:1219
105
  #: Application/Backend/View/Localization.php:33
106
  msgid "Deleting..."
107
  msgstr ""
108
 
109
+ #: media/js/aam-ui.js:372 Application/Backend/View/Localization.php:34
110
  msgid "Failed to delete role"
111
  msgstr ""
112
 
113
+ #: media/js/aam-ui.js:455 media/js/aam-ui.js:456 media/js/aam-ui.js:620
114
  #: Application/Backend/View/Localization.php:51
115
  msgid "Unlock User"
116
  msgstr ""
117
 
118
+ #: media/js/aam-ui.js:461 media/js/aam-ui.js:462 media/js/aam-ui.js:609
119
  #: Application/Backend/View/Localization.php:50
120
  msgid "Lock User"
121
  msgstr ""
122
 
123
+ #: media/js/aam-ui.js:466 Application/Backend/View/Localization.php:36
124
  msgid "Failed to block user"
125
  msgstr ""
126
 
127
+ #: media/js/aam-ui.js:532 Application/Backend/View/Localization.php:37
128
  msgid "Search User"
129
  msgstr ""
130
 
131
+ #: media/js/aam-ui.js:533 Application/Backend/View/Localization.php:38
132
  msgid "_TOTAL_ user(s)"
133
  msgstr ""
134
 
135
+ #: media/js/aam-ui.js:557 Application/Backend/View/Localization.php:39
136
+ #: Application/Backend/phtml/index.phtml:114
137
  msgid "Role"
138
  msgstr ""
139
 
140
+ #: media/js/aam-ui.js:585 Application/Backend/View/Localization.php:48
141
  msgid "Manage User"
142
  msgstr ""
143
 
144
+ #: media/js/aam-ui.js:598 Application/Backend/View/Localization.php:49
145
  msgid "Edit User"
146
  msgstr ""
147
 
148
+ #: media/js/aam-ui.js:631
149
  msgid "Switch To User"
150
  msgstr ""
151
 
152
+ #: media/js/aam-ui.js:683 Application/Backend/View/Localization.php:40
153
  msgid "Anonymous"
154
  msgstr ""
155
 
156
+ #: media/js/aam-ui.js:706
157
+ msgid "All Users, Roles and Visitor"
158
+ msgstr ""
159
+
160
+ #: media/js/aam-ui.js:750 Application/Backend/View/Localization.php:17
161
+ #: Application/Backend/phtml/object/menu.phtml:49
162
  msgid "Show Menu"
163
  msgstr ""
164
 
165
+ #: media/js/aam-ui.js:765 Application/Backend/View/Localization.php:18
166
+ #: Application/Backend/phtml/object/menu.phtml:53
167
  msgid "Restrict Menu"
168
  msgstr ""
169
 
170
+ #: media/js/aam-ui.js:877 Application/Backend/View/Localization.php:19
171
  msgid "Failed to retrieve mataboxes"
172
  msgstr ""
173
 
174
+ #: media/js/aam-ui.js:905
175
  msgid "Processing"
176
  msgstr ""
177
 
178
+ #: media/js/aam-ui.js:913
179
  msgid "Failed to initialize URL"
180
  msgstr ""
181
 
182
+ #: media/js/aam-ui.js:921 Application/Backend/phtml/object/metabox.phtml:93
183
  msgid "Initialize"
184
  msgstr ""
185
 
186
+ #: media/js/aam-ui.js:995 Application/Backend/View/Localization.php:52
187
  msgid "Failed to grand capability - WordPress policy"
188
  msgstr ""
189
 
190
+ #: media/js/aam-ui.js:1030 Application/Backend/View/Localization.php:11
191
  msgid "Search Capability"
192
  msgstr ""
193
 
194
+ #: media/js/aam-ui.js:1031 Application/Backend/View/Localization.php:12
195
  msgid "_TOTAL_ capability(s)"
196
  msgstr ""
197
 
198
+ #: media/js/aam-ui.js:1033
199
  msgid "Nothing to show"
200
  msgstr ""
201
 
202
+ #: media/js/aam-ui.js:1140 Application/Backend/View/Localization.php:14
203
  msgid "Failed to add new capability"
204
  msgstr ""
205
 
206
+ #: media/js/aam-ui.js:1148 Application/Backend/View/Localization.php:16
207
  msgid "Add Capability"
208
  msgstr ""
209
 
210
+ #: media/js/aam-ui.js:1186
211
  msgid "Failed to update capability"
212
  msgstr ""
213
 
214
+ #: media/js/aam-ui.js:1194 Application/Backend/phtml/object/capability.phtml:69
215
  msgid "Update Capability"
216
  msgstr ""
217
 
218
+ #: media/js/aam-ui.js:1227
219
  msgid "Failed to delete capability"
220
  msgstr ""
221
 
222
+ #: media/js/aam-ui.js:1235 Application/Backend/phtml/object/capability.phtml:91
223
  msgid "Delete Capability"
224
  msgstr ""
225
 
226
+ #: media/js/aam-ui.js:1480 Application/Backend/View/Localization.php:20
227
  msgid "Search"
228
  msgstr ""
229
 
230
+ #: media/js/aam-ui.js:1481 Application/Backend/View/Localization.php:21
231
  msgid "_TOTAL_ object(s)"
232
  msgstr ""
233
 
234
+ #: media/js/aam-ui.js:1547
235
  msgid "Drill-Down"
236
  msgstr ""
237
 
238
+ #: media/js/aam-ui.js:1565 Application/Backend/View/Localization.php:43
239
  #: Application/Backend/phtml/metabox.phtml:7
240
  msgid "Manage Access"
241
  msgstr ""
242
 
243
+ #: media/js/aam-ui.js:1577 Application/Backend/View/Localization.php:44
244
+ #: Application/Backend/View/PostOptionList.php:52
245
  msgid "Edit"
246
  msgstr ""
247
 
248
+ #: media/js/aam-ui.js:1781 media/js/aam-ui.js:1876 media/js/aam-ui.js:1962
249
+ #: media/js/aam-ui.js:2147 media/js/aam-ui.js:2181 media/js/aam-ui.js:2219
250
  msgid "Application Error"
251
  msgstr ""
252
 
253
+ #: Application/Backend/Feature/Abstract.php:30
254
  #: Application/Backend/Feature/Role.php:29
255
+ #: Application/Backend/Feature/User.php:29 Application/Backend/Manager.php:469
256
+ #: Application/Backend/Manager.php:494 Application/Core/API.php:267
257
  msgid "Access Denied"
258
  msgstr ""
259
 
265
  msgid "Can not remove the capability"
266
  msgstr ""
267
 
268
+ #: Application/Backend/Feature/Capability.php:254
269
+ #: Application/Backend/Feature/Capability.php:293
270
  msgid "System"
271
  msgstr ""
272
 
273
+ #: Application/Backend/Feature/Capability.php:255
274
+ #: Application/Backend/Feature/Capability.php:295
275
+ #: Application/Backend/Feature/Post.php:385
276
  msgid "Posts & Pages"
277
  msgstr ""
278
 
279
+ #: Application/Backend/Feature/Capability.php:256
280
+ #: Application/Backend/Feature/Capability.php:297
281
+ #: Application/Backend/phtml/object/post.phtml:88
282
  msgid "Backend"
283
  msgstr ""
284
 
285
+ #: Application/Backend/Feature/Capability.php:257
286
+ #: Application/Backend/Feature/Capability.php:299
287
  msgid "Miscellaneous"
288
  msgstr ""
289
 
290
+ #: Application/Backend/Feature/Capability.php:320
291
  msgid "Capabilities"
292
  msgstr ""
293
 
295
  msgid "Contact Us"
296
  msgstr ""
297
 
298
+ #: Application/Backend/Feature/Extension.php:91
299
  msgid "License key is missing."
300
  msgstr ""
301
 
302
+ #: Application/Backend/Feature/Extension.php:156
303
  msgid "Extensions"
304
  msgstr ""
305
 
306
+ #: Application/Backend/Feature/LoginRedirect.php:103
307
+ msgid "Login Redirect"
308
+ msgstr ""
309
+
310
+ #: Application/Backend/Feature/Menu.php:190
311
  msgid "Backend Menu"
312
  msgstr ""
313
 
315
  msgid "Metaboxes & Widgets"
316
  msgstr ""
317
 
318
+ #: Application/Backend/Feature/Post.php:266
319
  msgid "You reached your limitation."
320
  msgstr ""
321
 
322
+ #: Application/Backend/Feature/Redirect.php:103
323
+ msgid "Access Denied Redirect"
324
+ msgstr ""
325
+
326
+ #: Application/Backend/Feature/Security.php:73
327
+ msgid "Security"
328
  msgstr ""
329
 
330
+ #: Application/Backend/Feature/Shortcode.php:45
331
+ #: Application/Backend/phtml/shortcode.phtml:6
332
+ msgid "Shortcodes"
333
+ msgstr ""
334
+
335
+ #: Application/Backend/Feature/Teaser.php:103
336
  msgid "Content Teaser"
337
  msgstr ""
338
 
339
+ #: Application/Backend/Feature/Utility.php:103
340
  msgid "Utilities"
341
  msgstr ""
342
 
343
+ #: Application/Backend/Manager.php:143
344
  #, php-format
345
  msgid "Extension %s has new update available for download."
346
  msgstr ""
347
 
348
+ #: Application/Backend/Manager.php:150
349
+ #, php-format
350
+ msgid ""
351
+ "License violation for %s extension. Enter valid license on the Extensions "
352
+ "tab or contact us immediately."
353
+ msgstr ""
354
+
355
  #: Application/Backend/Manager.php:194
356
  msgid "Access Manager"
357
  msgstr ""
358
 
359
+ #: Application/Backend/Manager.php:264 Application/Backend/Manager.php:284
360
+ #: Application/Backend/Manager.php:309
361
  msgid "Access"
362
  msgstr ""
363
 
373
  msgid "Current role"
374
  msgstr ""
375
 
376
+ #: Application/Backend/View/PostOptionList.php:13
377
+ #: Application/Backend/View/PostOptionList.php:44
378
+ msgid "List"
379
+ msgstr ""
380
+
381
+ #: Application/Backend/View/PostOptionList.php:14
382
+ #: Application/Backend/View/PostOptionList.php:45
383
+ #, php-format
384
+ msgid "Hide %s."
385
+ msgstr ""
386
+
387
+ #: Application/Backend/View/PostOptionList.php:17
388
+ #: Application/Backend/View/PostOptionList.php:48
389
+ msgid "List To Others"
390
+ msgstr ""
391
+
392
+ #: Application/Backend/View/PostOptionList.php:18
393
+ #: Application/Backend/View/PostOptionList.php:49
394
+ #, php-format
395
+ msgid "Hide %s for all except author."
396
+ msgstr ""
397
+
398
+ #: Application/Backend/View/PostOptionList.php:21
399
+ msgid "Read"
400
+ msgstr ""
401
+
402
+ #: Application/Backend/View/PostOptionList.php:22
403
+ #, php-format
404
+ msgid "Restrict access to read %s."
405
+ msgstr ""
406
+
407
+ #: Application/Backend/View/PostOptionList.php:25
408
+ msgid "Read By Others"
409
+ msgstr ""
410
+
411
+ #: Application/Backend/View/PostOptionList.php:26
412
+ msgid "Restrict access to read for all except author."
413
+ msgstr ""
414
+
415
+ #: Application/Backend/View/PostOptionList.php:29
416
+ msgid "Limit"
417
+ msgstr ""
418
+
419
+ #: Application/Backend/View/PostOptionList.php:30
420
+ #, php-format
421
+ msgid ""
422
+ "If checked, show defined in the Content Teaser tab teaser message instead of "
423
+ "%s content."
424
+ msgstr ""
425
+
426
+ #: Application/Backend/View/PostOptionList.php:33
427
+ msgid "Comment"
428
+ msgstr ""
429
+
430
+ #: Application/Backend/View/PostOptionList.php:34
431
+ #, php-format
432
+ msgid "Restrict access to comment on %s if commenting feature is enabled."
433
+ msgstr ""
434
+
435
+ #: Application/Backend/View/PostOptionList.php:37
436
+ msgid "Password Protected"
437
+ msgstr ""
438
+
439
+ #: Application/Backend/View/PostOptionList.php:38
440
+ #, php-format
441
+ msgid "Password: %s"
442
+ msgstr ""
443
+
444
+ #: Application/Backend/View/PostOptionList.php:38
445
+ msgid "change"
446
+ msgstr ""
447
+
448
+ #: Application/Backend/View/PostOptionList.php:39
449
+ #, php-format
450
+ msgid "Add a password protection for the %s."
451
+ msgstr ""
452
+
453
+ #: Application/Backend/View/PostOptionList.php:53
454
+ #, php-format
455
+ msgid "Restrict access to edit %s."
456
+ msgstr ""
457
+
458
+ #: Application/Backend/View/PostOptionList.php:56
459
+ msgid "Edit By Others"
460
+ msgstr ""
461
+
462
+ #: Application/Backend/View/PostOptionList.php:57
463
+ #, php-format
464
+ msgid "Restrict access to edit %s for all except author."
465
+ msgstr ""
466
+
467
+ #: Application/Backend/View/PostOptionList.php:60
468
+ #: Application/Backend/phtml/index.phtml:177
469
+ #: Application/Backend/phtml/object/capability.phtml:97
470
+ msgid "Delete"
471
+ msgstr ""
472
+
473
+ #: Application/Backend/View/PostOptionList.php:61
474
+ #, php-format
475
+ msgid "Restrict access to trash or permanently delete %s."
476
+ msgstr ""
477
+
478
+ #: Application/Backend/View/PostOptionList.php:64
479
+ msgid "Delete By Others"
480
+ msgstr ""
481
+
482
+ #: Application/Backend/View/PostOptionList.php:65
483
+ #, php-format
484
+ msgid ""
485
+ "Restrict access to trash or permanently delete %s for all except author."
486
+ msgstr ""
487
+
488
+ #: Application/Backend/View/PostOptionList.php:68
489
+ msgid "Publish"
490
+ msgstr ""
491
+
492
+ #: Application/Backend/View/PostOptionList.php:69
493
+ #, php-format
494
+ msgid ""
495
+ "Restrict access to publish %s. Quick Edit inline action is also removed."
496
+ msgstr ""
497
+
498
+ #: Application/Backend/View/PostOptionList.php:72
499
+ msgid "Publish By Others"
500
+ msgstr ""
501
+
502
+ #: Application/Backend/View/PostOptionList.php:73
503
+ #, php-format
504
+ msgid ""
505
+ "Restrict access to publish %s for all except author. Quick Edit inline "
506
+ "action is also removed."
507
+ msgstr ""
508
+
509
+ #: Application/Backend/View/SecurityOptionList.php:12
510
+ msgid "Login Timeout"
511
+ msgstr ""
512
+
513
+ #: Application/Backend/View/SecurityOptionList.php:13
514
+ #, php-format
515
+ msgid ""
516
+ "Delay the login process for %s second to significantly reduce the chance for "
517
+ "brute force or dictionary attack."
518
+ msgstr ""
519
+
520
+ #: Application/Backend/View/SecurityOptionList.php:17
521
+ msgid "Track IP Address"
522
+ msgstr ""
523
+
524
+ #: Application/Backend/View/SecurityOptionList.php:18
525
+ msgid ""
526
+ "Track the IP address for the last successful user login and trigger double "
527
+ "authentication via email when the same username/password combination is used "
528
+ "to login from a different IP address."
529
+ msgstr ""
530
+
531
+ #: Application/Backend/View/SecurityOptionList.php:22
532
+ msgid "Brute Force Lockout"
533
+ msgstr ""
534
+
535
+ #: Application/Backend/View/SecurityOptionList.php:23
536
+ #, php-format
537
+ msgid ""
538
+ "Automatically reject login attempts if number of unsuccessful login attempts "
539
+ "is more than %s over the period of %s."
540
+ msgstr ""
541
+
542
+ #: Application/Backend/View/UtilityOptionList.php:12
543
+ msgid "Edit/Delete Capabilities"
544
+ msgstr ""
545
+
546
+ #: Application/Backend/View/UtilityOptionList.php:17
547
+ msgid "Backend Access Control"
548
+ msgstr ""
549
+
550
+ #: Application/Backend/View/UtilityOptionList.php:18
551
+ msgid ""
552
+ "Allow AAM to manage access to backend resources like backend menu, "
553
+ "categories or posts."
554
+ msgstr ""
555
+
556
+ #: Application/Backend/View/UtilityOptionList.php:22
557
+ msgid "Frontend Access Control"
558
+ msgstr ""
559
+
560
+ #: Application/Backend/View/UtilityOptionList.php:23
561
+ msgid ""
562
+ "Allow AAM to manage access to frontend resources like pages, categories or "
563
+ "posts."
564
+ msgstr ""
565
+
566
+ #: Application/Backend/View/UtilityOptionList.php:27
567
+ msgid "Media Files Access Control"
568
+ msgstr ""
569
+
570
+ #: Application/Backend/View/UtilityOptionList.php:32
571
+ msgid "Clear cache automatically"
572
+ msgstr ""
573
+
574
+ #: Application/Core/Repository.php:302 Application/Extension/Repository.php:273
575
  #, php-format
576
  msgid "Failed to create %s"
577
  msgstr ""
578
 
579
+ #: Application/Core/Repository.php:306 Application/Extension/Repository.php:277
580
  #, php-format
581
  msgid "Directory %s is not writable"
582
  msgstr ""
583
 
584
+ #: Application/Frontend/Manager.php:184
585
+ #, php-format
586
+ msgid "[%s] Double Authentication"
587
+ msgstr ""
588
+
589
+ #: Application/Frontend/Manager.php:186
590
+ #, php-format
591
+ msgid "Someone was trying to login from the different IP address %s:"
592
+ msgstr ""
593
+
594
+ #: Application/Frontend/Manager.php:187
595
+ #, php-format
596
+ msgid "Website: %s"
597
+ msgstr ""
598
+
599
+ #: Application/Frontend/Manager.php:188
600
+ #, php-format
601
+ msgid "Username: %s"
602
+ msgstr ""
603
+
604
+ #: Application/Frontend/Manager.php:189
605
+ msgid "Visit the following address to authorize the login:"
606
+ msgstr ""
607
+
608
+ #: Application/Shortcode/Factory.php:52
609
+ msgid "No valid strategy found for the given context"
610
+ msgstr ""
611
+
612
+ #: aam.php:163
613
  msgid "PHP 5.2 or higher is required."
614
  msgstr ""
615
 
616
+ #: aam.php:165
617
  msgid "WP 3.8 or higher is required."
618
  msgstr ""
619
 
635
  msgid "Submit"
636
  msgstr ""
637
 
638
+ #: Application/Backend/phtml/extension.phtml:28
639
  msgid "Premium"
640
  msgstr ""
641
 
642
+ #: Application/Backend/phtml/extension.phtml:29
643
+ #: Application/Backend/phtml/extension.phtml:69
 
644
  msgid "Free"
645
  msgstr ""
646
 
647
+ #: Application/Backend/phtml/extension.phtml:30
 
 
 
 
648
  msgid "Check For Updates"
649
  msgstr ""
650
 
651
+ #: Application/Backend/phtml/extension.phtml:30
652
  msgid "Check"
653
  msgstr ""
654
 
655
+ #: Application/Backend/phtml/extension.phtml:49
656
+ #: Application/Backend/phtml/extension.phtml:76
 
657
  msgid "Installed"
658
  msgstr ""
659
 
660
+ #: Application/Backend/phtml/extension.phtml:53
661
+ msgid "Inactive"
662
  msgstr ""
663
 
664
+ #: Application/Backend/phtml/extension.phtml:55
665
+ msgid "Purchase"
 
666
  msgstr ""
667
 
668
+ #: Application/Backend/phtml/extension.phtml:80
669
+ #: Application/Backend/phtml/extension.phtml:111
670
+ msgid "Download"
671
  msgstr ""
672
 
673
+ #: Application/Backend/phtml/extension.phtml:95
674
+ #: Application/Backend/phtml/extension.phtml:122
675
+ #: Application/Backend/phtml/extension.phtml:133
676
+ #: Application/Backend/phtml/index.phtml:126
677
+ #: Application/Backend/phtml/index.phtml:138
678
+ #: Application/Backend/phtml/index.phtml:148
679
+ #: Application/Backend/phtml/index.phtml:160
680
+ #: Application/Backend/phtml/index.phtml:170
681
+ #: Application/Backend/phtml/index.phtml:178
682
  #: Application/Backend/phtml/object/capability.phtml:47
683
  #: Application/Backend/phtml/object/capability.phtml:58
684
  #: Application/Backend/phtml/object/capability.phtml:68
687
  #: Application/Backend/phtml/object/capability.phtml:98
688
  #: Application/Backend/phtml/object/metabox.phtml:80
689
  #: Application/Backend/phtml/object/metabox.phtml:94
690
+ #: Application/Backend/phtml/object/post.phtml:121
691
+ #: Application/Backend/phtml/object/post.phtml:132
692
+ #: Application/Backend/phtml/utility.phtml:42
693
  msgid "Close"
694
  msgstr ""
695
 
696
+ #: Application/Backend/phtml/extension.phtml:96
697
  msgid "Notification"
698
  msgstr ""
699
 
700
+ #: Application/Backend/phtml/extension.phtml:100
701
  msgid ""
702
  "Extension requires manual installation. Please follow few simple steps below."
703
  msgstr ""
704
 
705
+ #: Application/Backend/phtml/extension.phtml:112
706
+ #: Application/Backend/phtml/utility.phtml:50
707
  msgid "Cancel"
708
  msgstr ""
709
 
710
+ #: Application/Backend/phtml/extension.phtml:123
711
  msgid "Install Extension"
712
  msgstr ""
713
 
714
+ #: Application/Backend/phtml/extension.phtml:127
715
  msgid ""
716
  "Insert license key that you recieved after the payment (find the email "
717
  "example below). It might take up to 2 hours to process the payment. Please "
730
  msgstr ""
731
 
732
  #: Application/Backend/phtml/index.phtml:22
733
+ msgid "Please note!"
734
  msgstr ""
735
 
736
  #: Application/Backend/phtml/index.phtml:23
742
 
743
  #: Application/Backend/phtml/index.phtml:24
744
  #, php-format
745
+ msgid "Refer to our %sHelp%s section when there is any question."
746
  msgstr ""
747
 
748
+ #: Application/Backend/phtml/index.phtml:37
749
  msgid "Notifications"
750
  msgstr ""
751
 
752
+ #: Application/Backend/phtml/index.phtml:81
753
  msgid "AAM Multisite"
754
  msgstr ""
755
 
756
+ #: Application/Backend/phtml/index.phtml:85
757
  msgid "Install AAM Multisite"
758
  msgstr ""
759
 
760
+ #: Application/Backend/phtml/index.phtml:96
761
  msgid "Users/Roles Panel"
762
  msgstr ""
763
 
764
+ #: Application/Backend/phtml/index.phtml:102
765
+ #: Application/Backend/phtml/index.phtml:218
766
  msgid "Roles"
767
  msgstr ""
768
 
769
+ #: Application/Backend/phtml/index.phtml:104
770
+ #: Application/Backend/phtml/index.phtml:228
771
  msgid "Visitor"
772
  msgstr ""
773
 
774
+ #: Application/Backend/phtml/index.phtml:105
775
+ #: Application/Backend/phtml/index.phtml:233
776
+ msgid "Default"
777
+ msgstr ""
778
+
779
+ #: Application/Backend/phtml/index.phtml:115
780
+ #: Application/Backend/phtml/index.phtml:191
781
  msgid "Action"
782
  msgstr ""
783
 
784
+ #: Application/Backend/phtml/index.phtml:127
785
  msgid "Create Role"
786
  msgstr ""
787
 
788
+ #: Application/Backend/phtml/index.phtml:131
789
+ #: Application/Backend/phtml/index.phtml:153
790
  msgid "Role Name"
791
  msgstr ""
792
 
793
+ #: Application/Backend/phtml/index.phtml:132
794
+ #: Application/Backend/phtml/index.phtml:154
795
  msgid "Enter Role Name"
796
  msgstr ""
797
 
798
+ #: Application/Backend/phtml/index.phtml:149
799
  msgid "Update Role"
800
  msgstr ""
801
 
802
+ #: Application/Backend/phtml/index.phtml:174
803
  #, php-format
804
+ msgid "Are you sure that you want to delete the %s role?"
 
 
 
 
 
 
805
  msgstr ""
806
 
807
+ #: Application/Backend/phtml/index.phtml:190
808
  msgid "Username"
809
  msgstr ""
810
 
811
+ #: Application/Backend/phtml/index.phtml:200
812
  msgid ""
813
  "Manage access to your website for visitors (any user that is not "
814
  "authenticated)"
815
  msgstr ""
816
 
817
+ #: Application/Backend/phtml/index.phtml:201
818
  msgid "Manage Visitors"
819
  msgstr ""
820
 
821
+ #: Application/Backend/phtml/index.phtml:206
822
+ msgid ""
823
+ "Manage default access to your website resources for all users, roles and "
824
+ "visitor. This includes Administrator role and your user"
825
+ msgstr ""
826
+
827
+ #: Application/Backend/phtml/index.phtml:207
828
+ msgid "Manage Default Access"
829
+ msgstr ""
830
+
831
+ #: Application/Backend/phtml/index.phtml:219
832
  msgid ""
833
  "With Roles tab you can manage access for any defined role, edit role's name, "
834
  "create new role or even delete existing (but only when there is no users "
835
  "assigned to it). You are not allowed to delete Administrator role."
836
  msgstr ""
837
 
838
+ #: Application/Backend/phtml/index.phtml:224
839
  msgid ""
840
  "Manage access for any user. As a bonus feature, you can block user. It means "
841
  "that user will be not able to login to your website anymore."
842
  msgstr ""
843
 
844
+ #: Application/Backend/phtml/index.phtml:229
845
  msgid ""
846
  "Visitor can be considered any user that is not authenticated to your website."
847
  msgstr ""
848
 
849
+ #: Application/Backend/phtml/index.phtml:234
850
+ msgid ""
851
+ "Manage default access settings to your website resources for all users, "
852
+ "roles and visitors."
853
+ msgstr ""
854
+
855
  #: Application/Backend/phtml/object/capability.phtml:16
856
  msgid "Filter"
857
  msgstr ""
871
  msgstr ""
872
 
873
  #: Application/Backend/phtml/object/capability.phtml:37
874
+ #: Application/Backend/phtml/object/post.phtml:44
875
  msgid "Actions"
876
  msgstr ""
877
 
889
  msgid "Are you sure that you want to delete %s capability for all roles?"
890
  msgstr ""
891
 
892
+ #: Application/Backend/phtml/object/login-redirect.phtml:43
893
+ #: Application/Backend/phtml/object/redirect.phtml:61
894
+ msgid "Existing Page"
895
+ msgstr ""
896
+
897
+ #: Application/Backend/phtml/object/login-redirect.phtml:52
898
+ #: Application/Backend/phtml/object/redirect.phtml:70
899
+ msgid "-- Select Page --"
900
+ msgstr ""
901
+
902
+ #: Application/Backend/phtml/object/login-redirect.phtml:58
903
+ #: Application/Backend/phtml/object/redirect.phtml:76
904
+ #: Application/Backend/phtml/object/redirect.phtml:109
905
+ msgid "The URL"
906
  msgstr ""
907
 
908
+ #: Application/Backend/phtml/object/login-redirect.phtml:63
909
+ #: Application/Backend/phtml/object/redirect.phtml:81
910
+ #: Application/Backend/phtml/object/redirect.phtml:113
911
+ msgid "PHP Callback Function"
912
+ msgstr ""
913
+
914
+ #: Application/Backend/phtml/object/menu.phtml:7
915
  #: Application/Backend/phtml/object/metabox.phtml:12
916
+ #: Application/Backend/phtml/object/post.phtml:27
917
+ msgid "Settings are customized"
918
  msgstr ""
919
 
920
+ #: Application/Backend/phtml/object/menu.phtml:8
921
  #: Application/Backend/phtml/object/metabox.phtml:13
922
+ #: Application/Backend/phtml/object/post.phtml:28
923
  msgid "Reset To Default"
924
  msgstr ""
925
 
940
  msgstr ""
941
 
942
  #: Application/Backend/phtml/object/metabox.phtml:71
943
+ msgid "The list is not initialized. Click Refresh button above."
 
 
944
  msgstr ""
945
 
946
  #: Application/Backend/phtml/object/metabox.phtml:81
964
  msgid "Insert valid URL"
965
  msgstr ""
966
 
967
+ #: Application/Backend/phtml/object/post.phtml:17
 
 
 
 
 
968
  msgid "Root"
969
  msgstr ""
970
 
971
+ #: Application/Backend/phtml/object/post.phtml:43
972
  msgid "Title"
973
  msgstr ""
974
 
975
+ #: Application/Backend/phtml/object/post.phtml:52
976
+ #: Application/Backend/phtml/object/post.phtml:57
977
+ #: Application/Backend/phtml/object/post.phtml:112
978
  msgid "Go Back"
979
  msgstr ""
980
 
981
+ #: Application/Backend/phtml/object/post.phtml:65
982
  msgid "Frontend"
983
  msgstr ""
984
 
985
+ #: Application/Backend/phtml/object/post.phtml:122
986
+ msgid "Change Password"
 
987
  msgstr ""
988
 
989
+ #: Application/Backend/phtml/object/post.phtml:126
990
+ msgid "Password"
991
  msgstr ""
992
 
993
+ #: Application/Backend/phtml/object/post.phtml:127
994
+ msgid "Enter Password"
995
  msgstr ""
996
 
997
+ #: Application/Backend/phtml/object/post.phtml:131
998
+ msgid "Change"
999
  msgstr ""
1000
 
1001
+ #: Application/Backend/phtml/object/redirect.phtml:25
1002
  msgid "Frontend Redirect"
1003
  msgstr ""
1004
 
1005
+ #: Application/Backend/phtml/object/redirect.phtml:26
1006
  msgid "Backend Redirect"
1007
  msgstr ""
1008
 
1009
+ #: Application/Backend/phtml/object/redirect.phtml:56
1010
+ #: Application/Backend/phtml/object/redirect.phtml:104
1011
  msgid "Customized Message"
1012
  msgstr ""
1013
 
1014
+ #: Application/Backend/phtml/object/redirect.phtml:57
1015
+ #: Application/Backend/phtml/object/redirect.phtml:105
1016
  msgid "Enter message..."
1017
  msgstr ""
1018
 
1019
+ #: Application/Backend/phtml/object/teaser.phtml:25
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1020
  msgid "Teaser Message"
1021
  msgstr ""
1022
 
1023
+ #: Application/Backend/phtml/object/teaser.phtml:26
1024
  msgid "Enter teaser message..."
1025
  msgstr ""
1026
 
1027
+ #: Application/Backend/phtml/object/teaser.phtml:31
1028
  msgid "Add excerpt before teaser message"
1029
  msgstr ""
1030
 
1032
  msgid "Inherit Capabilities From"
1033
  msgstr ""
1034
 
1035
+ #: Application/Backend/phtml/security.phtml:30
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1036
  msgid ""
1037
+ "Improve your website security and keep your website error free with "
1038
+ "CodePinch."
1039
  msgstr ""
1040
 
1041
+ #: Application/Backend/phtml/utility.phtml:26
 
 
 
 
 
 
 
 
1042
  msgid "Clear All Settings"
1043
  msgstr ""
1044
 
1045
+ #: Application/Backend/phtml/utility.phtml:28
1046
  msgid ""
1047
  "Remove all the settings related to AAM (including all extension licenses)."
1048
  msgstr ""
1049
 
1050
+ #: Application/Backend/phtml/utility.phtml:43
1051
  msgid "Clear all settings"
1052
  msgstr ""
1053
 
1054
+ #: Application/Backend/phtml/utility.phtml:46
1055
  msgid "All AAM settings will be removed."
1056
  msgstr ""
1057
 
1058
+ #: Application/Backend/phtml/utility.phtml:49
1059
  msgid "Clear"
1060
  msgstr ""
Lang/advanced-access-manager.pot CHANGED
@@ -2,7 +2,7 @@
2
  msgid ""
3
  msgstr ""
4
  "Project-Id-Version: AAM\n"
5
- "POT-Creation-Date: 2016-10-14 14:07-0400\n"
6
  "PO-Revision-Date: \n"
7
  "Last-Translator: WPAAM <support@wpaam.com>\n"
8
  "Language-Team: WP AAM <vasyl@vasyltech.com>\n"
@@ -10,7 +10,7 @@ msgstr ""
10
  "MIME-Version: 1.0\n"
11
  "Content-Type: text/plain; charset=UTF-8\n"
12
  "Content-Transfer-Encoding: 8bit\n"
13
- "X-Generator: Poedit 1.8.9\n"
14
  "Plural-Forms: nplurals=2; plural=(n != 1);\n"
15
  "X-Poedit-SourceCharset: UTF-8\n"
16
  "X-Poedit-KeywordsList: __\n"
@@ -34,17 +34,17 @@ msgstr ""
34
  msgid "_TOTAL_ role(s)"
35
  msgstr ""
36
 
37
- #: media/js/aam-ui.js:98 media/js/aam-ui.js:543
38
  #: Application/Backend/View/Localization.php:27
39
- #: Application/Backend/phtml/index.phtml:118
40
  #: Application/Backend/phtml/object/capability.phtml:27
41
  #: Application/Backend/phtml/object/capability.phtml:57
42
  msgid "Create"
43
  msgstr ""
44
 
45
  #: media/js/aam-ui.js:118 Application/Backend/View/Localization.php:28
46
- #: Application/Backend/phtml/index.phtml:85
47
- #: Application/Backend/phtml/index.phtml:198
48
  msgid "Users"
49
  msgstr ""
50
 
@@ -60,196 +60,201 @@ msgstr ""
60
  msgid "Clone Role"
61
  msgstr ""
62
 
63
- #: media/js/aam-ui.js:198 media/js/aam-ui.js:383
64
  #: Application/Backend/View/Localization.php:35
65
  #: Application/Backend/View/Localization.php:47
66
- #: Application/Backend/phtml/index.phtml:152
67
  msgid "Delete Role"
68
  msgstr ""
69
 
70
- #: media/js/aam-ui.js:275 media/js/aam-ui.js:330 media/js/aam-ui.js:1121
71
- #: media/js/aam-ui.js:1167 Application/Backend/View/Localization.php:13
72
  msgid "Saving..."
73
  msgstr ""
74
 
75
- #: media/js/aam-ui.js:290 Application/Backend/View/Localization.php:29
76
  msgid "Failed to add new role"
77
  msgstr ""
78
 
79
- #: media/js/aam-ui.js:295 media/js/aam-ui.js:342 media/js/aam-ui.js:379
80
- #: media/js/aam-ui.js:473 media/js/aam-ui.js:505 media/js/aam-ui.js:834
81
- #: media/js/aam-ui.js:871 media/js/aam-ui.js:907 media/js/aam-ui.js:1134
82
- #: media/js/aam-ui.js:1180 media/js/aam-ui.js:1221 media/js/aam-ui.js:1360
83
- #: media/js/aam-ui.js:1407 media/js/aam-ui.js:1650 media/js/aam-ui.js:1715
84
- #: media/js/aam-ui.js:1781 media/js/aam-ui.js:1877 media/js/aam.js:207
85
- #: Application/Backend/View/Localization.php:15
86
  msgid "Application error"
87
  msgstr ""
88
 
89
- #: media/js/aam-ui.js:298 Application/Backend/View/Localization.php:30
90
  msgid "Add Role"
91
  msgstr ""
92
 
93
- #: media/js/aam-ui.js:337 Application/Backend/View/Localization.php:31
94
  msgid "Failed to update role"
95
  msgstr ""
96
 
97
- #: media/js/aam-ui.js:346 Application/Backend/View/Localization.php:32
98
- #: Application/Backend/phtml/extension.phtml:52
99
- #: Application/Backend/phtml/extension.phtml:77
100
- #: Application/Backend/phtml/index.phtml:140
101
  #: Application/Backend/phtml/object/capability.phtml:79
102
  msgid "Update"
103
  msgstr ""
104
 
105
- #: media/js/aam-ui.js:369 media/js/aam-ui.js:1208
106
  #: Application/Backend/View/Localization.php:33
107
  msgid "Deleting..."
108
  msgstr ""
109
 
110
- #: media/js/aam-ui.js:375 Application/Backend/View/Localization.php:34
111
  msgid "Failed to delete role"
112
  msgstr ""
113
 
114
- #: media/js/aam-ui.js:458 media/js/aam-ui.js:459 media/js/aam-ui.js:623
115
  #: Application/Backend/View/Localization.php:51
116
  msgid "Unlock User"
117
  msgstr ""
118
 
119
- #: media/js/aam-ui.js:464 media/js/aam-ui.js:465 media/js/aam-ui.js:612
120
  #: Application/Backend/View/Localization.php:50
121
  msgid "Lock User"
122
  msgstr ""
123
 
124
- #: media/js/aam-ui.js:469 Application/Backend/View/Localization.php:36
125
  msgid "Failed to block user"
126
  msgstr ""
127
 
128
- #: media/js/aam-ui.js:535 Application/Backend/View/Localization.php:37
129
  msgid "Search User"
130
  msgstr ""
131
 
132
- #: media/js/aam-ui.js:536 Application/Backend/View/Localization.php:38
133
  msgid "_TOTAL_ user(s)"
134
  msgstr ""
135
 
136
- #: media/js/aam-ui.js:560 Application/Backend/View/Localization.php:39
137
- #: Application/Backend/phtml/index.phtml:95
138
  msgid "Role"
139
  msgstr ""
140
 
141
- #: media/js/aam-ui.js:588 Application/Backend/View/Localization.php:48
142
  msgid "Manage User"
143
  msgstr ""
144
 
145
- #: media/js/aam-ui.js:601 Application/Backend/View/Localization.php:49
146
  msgid "Edit User"
147
  msgstr ""
148
 
149
- #: media/js/aam-ui.js:634
150
  msgid "Switch To User"
151
  msgstr ""
152
 
153
- #: media/js/aam-ui.js:690 Application/Backend/View/Localization.php:40
154
  msgid "Anonymous"
155
  msgstr ""
156
 
157
- #: media/js/aam-ui.js:739 Application/Backend/View/Localization.php:17
158
- #: Application/Backend/phtml/object/menu.phtml:57
 
 
 
 
159
  msgid "Show Menu"
160
  msgstr ""
161
 
162
- #: media/js/aam-ui.js:754 Application/Backend/View/Localization.php:18
163
- #: Application/Backend/phtml/object/menu.phtml:61
164
  msgid "Restrict Menu"
165
  msgstr ""
166
 
167
- #: media/js/aam-ui.js:866 Application/Backend/View/Localization.php:19
168
  msgid "Failed to retrieve mataboxes"
169
  msgstr ""
170
 
171
- #: media/js/aam-ui.js:894
172
  msgid "Processing"
173
  msgstr ""
174
 
175
- #: media/js/aam-ui.js:902
176
  msgid "Failed to initialize URL"
177
  msgstr ""
178
 
179
- #: media/js/aam-ui.js:910 Application/Backend/phtml/object/metabox.phtml:93
180
  msgid "Initialize"
181
  msgstr ""
182
 
183
- #: media/js/aam-ui.js:984 Application/Backend/View/Localization.php:52
184
  msgid "Failed to grand capability - WordPress policy"
185
  msgstr ""
186
 
187
- #: media/js/aam-ui.js:1019 Application/Backend/View/Localization.php:11
188
  msgid "Search Capability"
189
  msgstr ""
190
 
191
- #: media/js/aam-ui.js:1020 Application/Backend/View/Localization.php:12
192
  msgid "_TOTAL_ capability(s)"
193
  msgstr ""
194
 
195
- #: media/js/aam-ui.js:1022
196
  msgid "Nothing to show"
197
  msgstr ""
198
 
199
- #: media/js/aam-ui.js:1129 Application/Backend/View/Localization.php:14
200
  msgid "Failed to add new capability"
201
  msgstr ""
202
 
203
- #: media/js/aam-ui.js:1137 Application/Backend/View/Localization.php:16
204
  msgid "Add Capability"
205
  msgstr ""
206
 
207
- #: media/js/aam-ui.js:1175
208
  msgid "Failed to update capability"
209
  msgstr ""
210
 
211
- #: media/js/aam-ui.js:1183 Application/Backend/phtml/object/capability.phtml:69
212
  msgid "Update Capability"
213
  msgstr ""
214
 
215
- #: media/js/aam-ui.js:1216
216
  msgid "Failed to delete capability"
217
  msgstr ""
218
 
219
- #: media/js/aam-ui.js:1224 Application/Backend/phtml/object/capability.phtml:91
220
  msgid "Delete Capability"
221
  msgstr ""
222
 
223
- #: media/js/aam-ui.js:1446 Application/Backend/View/Localization.php:20
224
  msgid "Search"
225
  msgstr ""
226
 
227
- #: media/js/aam-ui.js:1447 Application/Backend/View/Localization.php:21
228
  msgid "_TOTAL_ object(s)"
229
  msgstr ""
230
 
231
- #: media/js/aam-ui.js:1511
232
  msgid "Drill-Down"
233
  msgstr ""
234
 
235
- #: media/js/aam-ui.js:1529 Application/Backend/View/Localization.php:43
236
  #: Application/Backend/phtml/metabox.phtml:7
237
  msgid "Manage Access"
238
  msgstr ""
239
 
240
- #: media/js/aam-ui.js:1541 Application/Backend/View/Localization.php:44
241
- #: Application/Backend/phtml/object/post.phtml:140
242
  msgid "Edit"
243
  msgstr ""
244
 
245
- #: media/js/aam-ui.js:1919 media/js/aam-ui.js:1956
 
246
  msgid "Application Error"
247
  msgstr ""
248
 
249
- #: Application/Backend/Feature/Abstract.php:29
250
  #: Application/Backend/Feature/Role.php:29
251
- #: Application/Backend/Feature/User.php:29 Application/Backend/Manager.php:452
252
- #: Application/Backend/Manager.php:477 Application/Core/API.php:256
253
  msgid "Access Denied"
254
  msgstr ""
255
 
@@ -261,29 +266,29 @@ msgstr ""
261
  msgid "Can not remove the capability"
262
  msgstr ""
263
 
264
- #: Application/Backend/Feature/Capability.php:252
265
- #: Application/Backend/Feature/Capability.php:291
266
  msgid "System"
267
  msgstr ""
268
 
269
- #: Application/Backend/Feature/Capability.php:253
270
- #: Application/Backend/Feature/Capability.php:293
271
- #: Application/Backend/Feature/Post.php:363
272
  msgid "Posts & Pages"
273
  msgstr ""
274
 
275
- #: Application/Backend/Feature/Capability.php:254
276
- #: Application/Backend/Feature/Capability.php:295
277
- #: Application/Backend/phtml/object/post.phtml:123
278
  msgid "Backend"
279
  msgstr ""
280
 
281
- #: Application/Backend/Feature/Capability.php:255
282
- #: Application/Backend/Feature/Capability.php:297
283
  msgid "Miscellaneous"
284
  msgstr ""
285
 
286
- #: Application/Backend/Feature/Capability.php:318
287
  msgid "Capabilities"
288
  msgstr ""
289
 
@@ -291,15 +296,19 @@ msgstr ""
291
  msgid "Contact Us"
292
  msgstr ""
293
 
294
- #: Application/Backend/Feature/Extension.php:110
295
  msgid "License key is missing."
296
  msgstr ""
297
 
298
- #: Application/Backend/Feature/Extension.php:187
299
  msgid "Extensions"
300
  msgstr ""
301
 
302
- #: Application/Backend/Feature/Menu.php:189
 
 
 
 
303
  msgid "Backend Menu"
304
  msgstr ""
305
 
@@ -307,32 +316,49 @@ msgstr ""
307
  msgid "Metaboxes & Widgets"
308
  msgstr ""
309
 
310
- #: Application/Backend/Feature/Post.php:268
311
  msgid "You reached your limitation."
312
  msgstr ""
313
 
314
- #: Application/Backend/Feature/Redirect.php:101
315
- msgid "Redirect"
 
 
 
 
316
  msgstr ""
317
 
318
- #: Application/Backend/Feature/Teaser.php:101
 
 
 
 
 
319
  msgid "Content Teaser"
320
  msgstr ""
321
 
322
- #: Application/Backend/Feature/Utility.php:91
323
  msgid "Utilities"
324
  msgstr ""
325
 
326
- #: Application/Backend/Manager.php:124
327
  #, php-format
328
  msgid "Extension %s has new update available for download."
329
  msgstr ""
330
 
 
 
 
 
 
 
 
331
  #: Application/Backend/Manager.php:194
332
  msgid "Access Manager"
333
  msgstr ""
334
 
335
- #: Application/Backend/Manager.php:264 Application/Backend/Manager.php:289
 
336
  msgid "Access"
337
  msgstr ""
338
 
@@ -348,21 +374,247 @@ msgstr ""
348
  msgid "Current role"
349
  msgstr ""
350
 
351
- #: Application/Core/Repository.php:290
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
352
  #, php-format
353
  msgid "Failed to create %s"
354
  msgstr ""
355
 
356
- #: Application/Core/Repository.php:294
357
  #, php-format
358
  msgid "Directory %s is not writable"
359
  msgstr ""
360
 
361
- #: aam.php:166
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
362
  msgid "PHP 5.2 or higher is required."
363
  msgstr ""
364
 
365
- #: aam.php:168
366
  msgid "WP 3.8 or higher is required."
367
  msgstr ""
368
 
@@ -384,56 +636,50 @@ msgstr ""
384
  msgid "Submit"
385
  msgstr ""
386
 
387
- #: Application/Backend/phtml/extension.phtml:29
388
  msgid "Premium"
389
  msgstr ""
390
 
391
- #: Application/Backend/phtml/extension.phtml:30
392
- #: Application/Backend/phtml/extension.phtml:68
393
- #: Application/Backend/phtml/extension.phtml:93
394
  msgid "Free"
395
  msgstr ""
396
 
397
- #: Application/Backend/phtml/extension.phtml:31
398
- msgid "Useful Plugins"
399
- msgstr ""
400
-
401
- #: Application/Backend/phtml/extension.phtml:32
402
  msgid "Check For Updates"
403
  msgstr ""
404
 
405
- #: Application/Backend/phtml/extension.phtml:32
406
  msgid "Check"
407
  msgstr ""
408
 
409
- #: Application/Backend/phtml/extension.phtml:50
410
- #: Application/Backend/phtml/extension.phtml:75
411
- #: Application/Backend/phtml/extension.phtml:102
412
  msgid "Installed"
413
  msgstr ""
414
 
415
- #: Application/Backend/phtml/extension.phtml:54
416
- msgid "Purchase"
417
  msgstr ""
418
 
419
- #: Application/Backend/phtml/extension.phtml:79
420
- #: Application/Backend/phtml/extension.phtml:133
421
- msgid "Download"
422
  msgstr ""
423
 
424
- #: Application/Backend/phtml/extension.phtml:100
425
- msgid "Install"
 
426
  msgstr ""
427
 
428
- #: Application/Backend/phtml/extension.phtml:117
429
- #: Application/Backend/phtml/extension.phtml:144
430
- #: Application/Backend/phtml/extension.phtml:155
431
- #: Application/Backend/phtml/index.phtml:107
432
- #: Application/Backend/phtml/index.phtml:119
433
- #: Application/Backend/phtml/index.phtml:129
434
- #: Application/Backend/phtml/index.phtml:141
435
- #: Application/Backend/phtml/index.phtml:151
436
- #: Application/Backend/phtml/index.phtml:159
437
  #: Application/Backend/phtml/object/capability.phtml:47
438
  #: Application/Backend/phtml/object/capability.phtml:58
439
  #: Application/Backend/phtml/object/capability.phtml:68
@@ -442,29 +688,31 @@ msgstr ""
442
  #: Application/Backend/phtml/object/capability.phtml:98
443
  #: Application/Backend/phtml/object/metabox.phtml:80
444
  #: Application/Backend/phtml/object/metabox.phtml:94
445
- #: Application/Backend/phtml/utility.phtml:91
 
 
446
  msgid "Close"
447
  msgstr ""
448
 
449
- #: Application/Backend/phtml/extension.phtml:118
450
  msgid "Notification"
451
  msgstr ""
452
 
453
- #: Application/Backend/phtml/extension.phtml:122
454
  msgid ""
455
  "Extension requires manual installation. Please follow few simple steps below."
456
  msgstr ""
457
 
458
- #: Application/Backend/phtml/extension.phtml:134
459
- #: Application/Backend/phtml/utility.phtml:99
460
  msgid "Cancel"
461
  msgstr ""
462
 
463
- #: Application/Backend/phtml/extension.phtml:145
464
  msgid "Install Extension"
465
  msgstr ""
466
 
467
- #: Application/Backend/phtml/extension.phtml:149
468
  msgid ""
469
  "Insert license key that you recieved after the payment (find the email "
470
  "example below). It might take up to 2 hours to process the payment. Please "
@@ -483,7 +731,7 @@ msgid ""
483
  msgstr ""
484
 
485
  #: Application/Backend/phtml/index.phtml:22
486
- msgid "Please notice!"
487
  msgstr ""
488
 
489
  #: Application/Backend/phtml/index.phtml:23
@@ -495,101 +743,116 @@ msgstr ""
495
 
496
  #: Application/Backend/phtml/index.phtml:24
497
  #, php-format
498
- msgid "Also check our %sIntroduction to AAM%s so you know where to start."
499
  msgstr ""
500
 
501
- #: Application/Backend/phtml/index.phtml:44
502
  msgid "Notifications"
503
  msgstr ""
504
 
505
- #: Application/Backend/phtml/index.phtml:63
506
  msgid "AAM Multisite"
507
  msgstr ""
508
 
509
- #: Application/Backend/phtml/index.phtml:67
510
  msgid "Install AAM Multisite"
511
  msgstr ""
512
 
513
- #: Application/Backend/phtml/index.phtml:78
514
  msgid "Users/Roles Panel"
515
  msgstr ""
516
 
517
- #: Application/Backend/phtml/index.phtml:84
518
- #: Application/Backend/phtml/index.phtml:193
519
  msgid "Roles"
520
  msgstr ""
521
 
522
- #: Application/Backend/phtml/index.phtml:86
523
- #: Application/Backend/phtml/index.phtml:203
524
  msgid "Visitor"
525
  msgstr ""
526
 
527
- #: Application/Backend/phtml/index.phtml:96
528
- #: Application/Backend/phtml/index.phtml:172
 
 
 
 
 
529
  msgid "Action"
530
  msgstr ""
531
 
532
- #: Application/Backend/phtml/index.phtml:108
533
  msgid "Create Role"
534
  msgstr ""
535
 
536
- #: Application/Backend/phtml/index.phtml:112
537
- #: Application/Backend/phtml/index.phtml:134
538
  msgid "Role Name"
539
  msgstr ""
540
 
541
- #: Application/Backend/phtml/index.phtml:113
542
- #: Application/Backend/phtml/index.phtml:135
543
  msgid "Enter Role Name"
544
  msgstr ""
545
 
546
- #: Application/Backend/phtml/index.phtml:130
547
  msgid "Update Role"
548
  msgstr ""
549
 
550
- #: Application/Backend/phtml/index.phtml:155
551
  #, php-format
552
- msgid "Are you sure that you want to delete %s role?"
553
- msgstr ""
554
-
555
- #: Application/Backend/phtml/index.phtml:158
556
- #: Application/Backend/phtml/object/capability.phtml:97
557
- #: Application/Backend/phtml/object/post.phtml:151
558
- msgid "Delete"
559
  msgstr ""
560
 
561
- #: Application/Backend/phtml/index.phtml:171
562
  msgid "Username"
563
  msgstr ""
564
 
565
- #: Application/Backend/phtml/index.phtml:181
566
  msgid ""
567
  "Manage access to your website for visitors (any user that is not "
568
  "authenticated)"
569
  msgstr ""
570
 
571
- #: Application/Backend/phtml/index.phtml:182
572
  msgid "Manage Visitors"
573
  msgstr ""
574
 
575
- #: Application/Backend/phtml/index.phtml:194
 
 
 
 
 
 
 
 
 
 
576
  msgid ""
577
  "With Roles tab you can manage access for any defined role, edit role's name, "
578
  "create new role or even delete existing (but only when there is no users "
579
  "assigned to it). You are not allowed to delete Administrator role."
580
  msgstr ""
581
 
582
- #: Application/Backend/phtml/index.phtml:199
583
  msgid ""
584
  "Manage access for any user. As a bonus feature, you can block user. It means "
585
  "that user will be not able to login to your website anymore."
586
  msgstr ""
587
 
588
- #: Application/Backend/phtml/index.phtml:204
589
  msgid ""
590
  "Visitor can be considered any user that is not authenticated to your website."
591
  msgstr ""
592
 
 
 
 
 
 
 
593
  #: Application/Backend/phtml/object/capability.phtml:16
594
  msgid "Filter"
595
  msgstr ""
@@ -609,7 +872,7 @@ msgid "Capability"
609
  msgstr ""
610
 
611
  #: Application/Backend/phtml/object/capability.phtml:37
612
- #: Application/Backend/phtml/object/post.phtml:50
613
  msgid "Actions"
614
  msgstr ""
615
 
@@ -627,22 +890,37 @@ msgstr ""
627
  msgid "Are you sure that you want to delete %s capability for all roles?"
628
  msgstr ""
629
 
630
- #: Application/Backend/phtml/object/menu.phtml:6
631
- #, php-format
632
- msgid ""
633
- "For more information about Backend Menu feature check %sManage Access To "
634
- "Backend Menu%s article."
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
635
  msgstr ""
636
 
637
- #: Application/Backend/phtml/object/menu.phtml:15
638
  #: Application/Backend/phtml/object/metabox.phtml:12
639
- #: Application/Backend/phtml/object/post.phtml:34
640
- msgid "Settings are overwritten"
641
  msgstr ""
642
 
643
- #: Application/Backend/phtml/object/menu.phtml:16
644
  #: Application/Backend/phtml/object/metabox.phtml:13
645
- #: Application/Backend/phtml/object/post.phtml:35
646
  msgid "Reset To Default"
647
  msgstr ""
648
 
@@ -663,9 +941,7 @@ msgid "Frontend Widgets"
663
  msgstr ""
664
 
665
  #: Application/Backend/phtml/object/metabox.phtml:71
666
- msgid ""
667
- "The list of metaboxes and widgets is not initialized. Click Refresh button "
668
- "above."
669
  msgstr ""
670
 
671
  #: Application/Backend/phtml/object/metabox.phtml:81
@@ -689,91 +965,67 @@ msgstr ""
689
  msgid "Insert valid URL"
690
  msgstr ""
691
 
692
- #: Application/Backend/phtml/object/post.phtml:15
693
- #, php-format
694
- msgid "Learn more about post & pages access control from %sthis article%s."
695
- msgstr ""
696
-
697
- #: Application/Backend/phtml/object/post.phtml:24
698
  msgid "Root"
699
  msgstr ""
700
 
701
- #: Application/Backend/phtml/object/post.phtml:49
702
  msgid "Title"
703
  msgstr ""
704
 
705
- #: Application/Backend/phtml/object/post.phtml:58
706
- #: Application/Backend/phtml/object/post.phtml:63
707
- #: Application/Backend/phtml/object/post.phtml:164
708
  msgid "Go Back"
709
  msgstr ""
710
 
711
- #: Application/Backend/phtml/object/post.phtml:71
712
  msgid "Frontend"
713
  msgstr ""
714
 
715
- #: Application/Backend/phtml/object/post.phtml:77
716
- #: Application/Backend/phtml/object/post.phtml:129
717
- msgid "List"
718
  msgstr ""
719
 
720
- #: Application/Backend/phtml/object/post.phtml:88
721
- msgid "Read"
722
  msgstr ""
723
 
724
- #: Application/Backend/phtml/object/post.phtml:99
725
- msgid "LIMIT"
726
  msgstr ""
727
 
728
- #: Application/Backend/phtml/object/post.phtml:110
729
- msgid "Comment"
730
  msgstr ""
731
 
732
- #: Application/Backend/phtml/object/redirect.phtml:16
733
  msgid "Frontend Redirect"
734
  msgstr ""
735
 
736
- #: Application/Backend/phtml/object/redirect.phtml:17
737
  msgid "Backend Redirect"
738
  msgstr ""
739
 
740
- #: Application/Backend/phtml/object/redirect.phtml:47
741
- #: Application/Backend/phtml/object/redirect.phtml:95
742
  msgid "Customized Message"
743
  msgstr ""
744
 
745
- #: Application/Backend/phtml/object/redirect.phtml:48
746
- #: Application/Backend/phtml/object/redirect.phtml:96
747
  msgid "Enter message..."
748
  msgstr ""
749
 
750
- #: Application/Backend/phtml/object/redirect.phtml:52
751
- msgid "Existing Page"
752
- msgstr ""
753
-
754
- #: Application/Backend/phtml/object/redirect.phtml:61
755
- msgid "-- Select Page --"
756
- msgstr ""
757
-
758
- #: Application/Backend/phtml/object/redirect.phtml:67
759
- #: Application/Backend/phtml/object/redirect.phtml:100
760
- msgid "Custom URL"
761
- msgstr ""
762
-
763
- #: Application/Backend/phtml/object/redirect.phtml:72
764
- #: Application/Backend/phtml/object/redirect.phtml:104
765
- msgid "PHP Callback Function"
766
- msgstr ""
767
-
768
- #: Application/Backend/phtml/object/teaser.phtml:16
769
  msgid "Teaser Message"
770
  msgstr ""
771
 
772
- #: Application/Backend/phtml/object/teaser.phtml:17
773
  msgid "Enter teaser message..."
774
  msgstr ""
775
 
776
- #: Application/Backend/phtml/object/teaser.phtml:22
777
  msgid "Add excerpt before teaser message"
778
  msgstr ""
779
 
@@ -781,76 +1033,29 @@ msgstr ""
781
  msgid "Inherit Capabilities From"
782
  msgstr ""
783
 
784
- #: Application/Backend/phtml/utility.phtml:6
785
- #, php-format
786
- msgid "To learn more about AAM Utilities check %sAAM Utilities%s article."
787
- msgstr ""
788
-
789
- #: Application/Backend/phtml/utility.phtml:16
790
- msgid "Edit/Delete Capabilities"
791
- msgstr ""
792
-
793
- #: Application/Backend/phtml/utility.phtml:22
794
- #: Application/Backend/phtml/utility.phtml:33
795
- #: Application/Backend/phtml/utility.phtml:44
796
- #: Application/Backend/phtml/utility.phtml:55
797
- #: Application/Backend/phtml/utility.phtml:66
798
- msgid "Enabled"
799
- msgstr ""
800
-
801
- #: Application/Backend/phtml/utility.phtml:22
802
- #: Application/Backend/phtml/utility.phtml:33
803
- #: Application/Backend/phtml/utility.phtml:44
804
- #: Application/Backend/phtml/utility.phtml:55
805
- #: Application/Backend/phtml/utility.phtml:66
806
- msgid "Disabled"
807
- msgstr ""
808
-
809
- #: Application/Backend/phtml/utility.phtml:27
810
- msgid "Backend Access Control"
811
- msgstr ""
812
-
813
- #: Application/Backend/phtml/utility.phtml:29
814
- msgid ""
815
- "Use AAM to control access to posts, pages, categories, menus and metaboxes "
816
- "etc. Disable this setting to stop AAM from controling access for backend."
817
- msgstr ""
818
-
819
- #: Application/Backend/phtml/utility.phtml:38
820
- msgid "Frontend Access Control"
821
- msgstr ""
822
-
823
- #: Application/Backend/phtml/utility.phtml:40
824
  msgid ""
825
- "Use AAM to control access to posts, pages, categories, menus and widgets. "
826
- "Disable this setting to stop AAM from controling access for frontend."
827
  msgstr ""
828
 
829
- #: Application/Backend/phtml/utility.phtml:49
830
- msgid "Media Files Access Control"
831
- msgstr ""
832
-
833
- #: Application/Backend/phtml/utility.phtml:60
834
- msgid "Large Post Number Support"
835
- msgstr ""
836
-
837
- #: Application/Backend/phtml/utility.phtml:75
838
  msgid "Clear All Settings"
839
  msgstr ""
840
 
841
- #: Application/Backend/phtml/utility.phtml:77
842
  msgid ""
843
  "Remove all the settings related to AAM (including all extension licenses)."
844
  msgstr ""
845
 
846
- #: Application/Backend/phtml/utility.phtml:92
847
  msgid "Clear all settings"
848
  msgstr ""
849
 
850
- #: Application/Backend/phtml/utility.phtml:95
851
  msgid "All AAM settings will be removed."
852
  msgstr ""
853
 
854
- #: Application/Backend/phtml/utility.phtml:98
855
  msgid "Clear"
856
  msgstr ""
2
  msgid ""
3
  msgstr ""
4
  "Project-Id-Version: AAM\n"
5
+ "POT-Creation-Date: 2017-02-04 14:44-0500\n"
6
  "PO-Revision-Date: \n"
7
  "Last-Translator: WPAAM <support@wpaam.com>\n"
8
  "Language-Team: WP AAM <vasyl@vasyltech.com>\n"
10
  "MIME-Version: 1.0\n"
11
  "Content-Type: text/plain; charset=UTF-8\n"
12
  "Content-Transfer-Encoding: 8bit\n"
13
+ "X-Generator: Poedit 1.8.11\n"
14
  "Plural-Forms: nplurals=2; plural=(n != 1);\n"
15
  "X-Poedit-SourceCharset: UTF-8\n"
16
  "X-Poedit-KeywordsList: __\n"
34
  msgid "_TOTAL_ role(s)"
35
  msgstr ""
36
 
37
+ #: media/js/aam-ui.js:98 media/js/aam-ui.js:540
38
  #: Application/Backend/View/Localization.php:27
39
+ #: Application/Backend/phtml/index.phtml:137
40
  #: Application/Backend/phtml/object/capability.phtml:27
41
  #: Application/Backend/phtml/object/capability.phtml:57
42
  msgid "Create"
43
  msgstr ""
44
 
45
  #: media/js/aam-ui.js:118 Application/Backend/View/Localization.php:28
46
+ #: Application/Backend/phtml/index.phtml:103
47
+ #: Application/Backend/phtml/index.phtml:223
48
  msgid "Users"
49
  msgstr ""
50
 
60
  msgid "Clone Role"
61
  msgstr ""
62
 
63
+ #: media/js/aam-ui.js:198 media/js/aam-ui.js:380
64
  #: Application/Backend/View/Localization.php:35
65
  #: Application/Backend/View/Localization.php:47
66
+ #: Application/Backend/phtml/index.phtml:171
67
  msgid "Delete Role"
68
  msgstr ""
69
 
70
+ #: media/js/aam-ui.js:272 media/js/aam-ui.js:327 media/js/aam-ui.js:1132
71
+ #: media/js/aam-ui.js:1178 Application/Backend/View/Localization.php:13
72
  msgid "Saving..."
73
  msgstr ""
74
 
75
+ #: media/js/aam-ui.js:287 Application/Backend/View/Localization.php:29
76
  msgid "Failed to add new role"
77
  msgstr ""
78
 
79
+ #: media/js/aam-ui.js:292 media/js/aam-ui.js:339 media/js/aam-ui.js:376
80
+ #: media/js/aam-ui.js:470 media/js/aam-ui.js:502 media/js/aam-ui.js:845
81
+ #: media/js/aam-ui.js:882 media/js/aam-ui.js:918 media/js/aam-ui.js:1145
82
+ #: media/js/aam-ui.js:1191 media/js/aam-ui.js:1232 media/js/aam-ui.js:1393
83
+ #: media/js/aam-ui.js:1441 media/js/aam-ui.js:1731 media/js/aam-ui.js:1826
84
+ #: media/js/aam-ui.js:1920 media/js/aam-ui.js:2009 media/js/aam-ui.js:2105
85
+ #: media/js/aam.js:207 Application/Backend/View/Localization.php:15
86
  msgid "Application error"
87
  msgstr ""
88
 
89
+ #: media/js/aam-ui.js:295 Application/Backend/View/Localization.php:30
90
  msgid "Add Role"
91
  msgstr ""
92
 
93
+ #: media/js/aam-ui.js:334 Application/Backend/View/Localization.php:31
94
  msgid "Failed to update role"
95
  msgstr ""
96
 
97
+ #: media/js/aam-ui.js:343 Application/Backend/View/Localization.php:32
98
+ #: Application/Backend/phtml/extension.phtml:51
99
+ #: Application/Backend/phtml/extension.phtml:78
100
+ #: Application/Backend/phtml/index.phtml:159
101
  #: Application/Backend/phtml/object/capability.phtml:79
102
  msgid "Update"
103
  msgstr ""
104
 
105
+ #: media/js/aam-ui.js:366 media/js/aam-ui.js:1219
106
  #: Application/Backend/View/Localization.php:33
107
  msgid "Deleting..."
108
  msgstr ""
109
 
110
+ #: media/js/aam-ui.js:372 Application/Backend/View/Localization.php:34
111
  msgid "Failed to delete role"
112
  msgstr ""
113
 
114
+ #: media/js/aam-ui.js:455 media/js/aam-ui.js:456 media/js/aam-ui.js:620
115
  #: Application/Backend/View/Localization.php:51
116
  msgid "Unlock User"
117
  msgstr ""
118
 
119
+ #: media/js/aam-ui.js:461 media/js/aam-ui.js:462 media/js/aam-ui.js:609
120
  #: Application/Backend/View/Localization.php:50
121
  msgid "Lock User"
122
  msgstr ""
123
 
124
+ #: media/js/aam-ui.js:466 Application/Backend/View/Localization.php:36
125
  msgid "Failed to block user"
126
  msgstr ""
127
 
128
+ #: media/js/aam-ui.js:532 Application/Backend/View/Localization.php:37
129
  msgid "Search User"
130
  msgstr ""
131
 
132
+ #: media/js/aam-ui.js:533 Application/Backend/View/Localization.php:38
133
  msgid "_TOTAL_ user(s)"
134
  msgstr ""
135
 
136
+ #: media/js/aam-ui.js:557 Application/Backend/View/Localization.php:39
137
+ #: Application/Backend/phtml/index.phtml:114
138
  msgid "Role"
139
  msgstr ""
140
 
141
+ #: media/js/aam-ui.js:585 Application/Backend/View/Localization.php:48
142
  msgid "Manage User"
143
  msgstr ""
144
 
145
+ #: media/js/aam-ui.js:598 Application/Backend/View/Localization.php:49
146
  msgid "Edit User"
147
  msgstr ""
148
 
149
+ #: media/js/aam-ui.js:631
150
  msgid "Switch To User"
151
  msgstr ""
152
 
153
+ #: media/js/aam-ui.js:683 Application/Backend/View/Localization.php:40
154
  msgid "Anonymous"
155
  msgstr ""
156
 
157
+ #: media/js/aam-ui.js:706
158
+ msgid "All Users, Roles and Visitor"
159
+ msgstr ""
160
+
161
+ #: media/js/aam-ui.js:750 Application/Backend/View/Localization.php:17
162
+ #: Application/Backend/phtml/object/menu.phtml:49
163
  msgid "Show Menu"
164
  msgstr ""
165
 
166
+ #: media/js/aam-ui.js:765 Application/Backend/View/Localization.php:18
167
+ #: Application/Backend/phtml/object/menu.phtml:53
168
  msgid "Restrict Menu"
169
  msgstr ""
170
 
171
+ #: media/js/aam-ui.js:877 Application/Backend/View/Localization.php:19
172
  msgid "Failed to retrieve mataboxes"
173
  msgstr ""
174
 
175
+ #: media/js/aam-ui.js:905
176
  msgid "Processing"
177
  msgstr ""
178
 
179
+ #: media/js/aam-ui.js:913
180
  msgid "Failed to initialize URL"
181
  msgstr ""
182
 
183
+ #: media/js/aam-ui.js:921 Application/Backend/phtml/object/metabox.phtml:93
184
  msgid "Initialize"
185
  msgstr ""
186
 
187
+ #: media/js/aam-ui.js:995 Application/Backend/View/Localization.php:52
188
  msgid "Failed to grand capability - WordPress policy"
189
  msgstr ""
190
 
191
+ #: media/js/aam-ui.js:1030 Application/Backend/View/Localization.php:11
192
  msgid "Search Capability"
193
  msgstr ""
194
 
195
+ #: media/js/aam-ui.js:1031 Application/Backend/View/Localization.php:12
196
  msgid "_TOTAL_ capability(s)"
197
  msgstr ""
198
 
199
+ #: media/js/aam-ui.js:1033
200
  msgid "Nothing to show"
201
  msgstr ""
202
 
203
+ #: media/js/aam-ui.js:1140 Application/Backend/View/Localization.php:14
204
  msgid "Failed to add new capability"
205
  msgstr ""
206
 
207
+ #: media/js/aam-ui.js:1148 Application/Backend/View/Localization.php:16
208
  msgid "Add Capability"
209
  msgstr ""
210
 
211
+ #: media/js/aam-ui.js:1186
212
  msgid "Failed to update capability"
213
  msgstr ""
214
 
215
+ #: media/js/aam-ui.js:1194 Application/Backend/phtml/object/capability.phtml:69
216
  msgid "Update Capability"
217
  msgstr ""
218
 
219
+ #: media/js/aam-ui.js:1227
220
  msgid "Failed to delete capability"
221
  msgstr ""
222
 
223
+ #: media/js/aam-ui.js:1235 Application/Backend/phtml/object/capability.phtml:91
224
  msgid "Delete Capability"
225
  msgstr ""
226
 
227
+ #: media/js/aam-ui.js:1480 Application/Backend/View/Localization.php:20
228
  msgid "Search"
229
  msgstr ""
230
 
231
+ #: media/js/aam-ui.js:1481 Application/Backend/View/Localization.php:21
232
  msgid "_TOTAL_ object(s)"
233
  msgstr ""
234
 
235
+ #: media/js/aam-ui.js:1547
236
  msgid "Drill-Down"
237
  msgstr ""
238
 
239
+ #: media/js/aam-ui.js:1565 Application/Backend/View/Localization.php:43
240
  #: Application/Backend/phtml/metabox.phtml:7
241
  msgid "Manage Access"
242
  msgstr ""
243
 
244
+ #: media/js/aam-ui.js:1577 Application/Backend/View/Localization.php:44
245
+ #: Application/Backend/View/PostOptionList.php:52
246
  msgid "Edit"
247
  msgstr ""
248
 
249
+ #: media/js/aam-ui.js:1781 media/js/aam-ui.js:1876 media/js/aam-ui.js:1962
250
+ #: media/js/aam-ui.js:2147 media/js/aam-ui.js:2181 media/js/aam-ui.js:2219
251
  msgid "Application Error"
252
  msgstr ""
253
 
254
+ #: Application/Backend/Feature/Abstract.php:30
255
  #: Application/Backend/Feature/Role.php:29
256
+ #: Application/Backend/Feature/User.php:29 Application/Backend/Manager.php:469
257
+ #: Application/Backend/Manager.php:494 Application/Core/API.php:267
258
  msgid "Access Denied"
259
  msgstr ""
260
 
266
  msgid "Can not remove the capability"
267
  msgstr ""
268
 
269
+ #: Application/Backend/Feature/Capability.php:254
270
+ #: Application/Backend/Feature/Capability.php:293
271
  msgid "System"
272
  msgstr ""
273
 
274
+ #: Application/Backend/Feature/Capability.php:255
275
+ #: Application/Backend/Feature/Capability.php:295
276
+ #: Application/Backend/Feature/Post.php:385
277
  msgid "Posts & Pages"
278
  msgstr ""
279
 
280
+ #: Application/Backend/Feature/Capability.php:256
281
+ #: Application/Backend/Feature/Capability.php:297
282
+ #: Application/Backend/phtml/object/post.phtml:88
283
  msgid "Backend"
284
  msgstr ""
285
 
286
+ #: Application/Backend/Feature/Capability.php:257
287
+ #: Application/Backend/Feature/Capability.php:299
288
  msgid "Miscellaneous"
289
  msgstr ""
290
 
291
+ #: Application/Backend/Feature/Capability.php:320
292
  msgid "Capabilities"
293
  msgstr ""
294
 
296
  msgid "Contact Us"
297
  msgstr ""
298
 
299
+ #: Application/Backend/Feature/Extension.php:91
300
  msgid "License key is missing."
301
  msgstr ""
302
 
303
+ #: Application/Backend/Feature/Extension.php:156
304
  msgid "Extensions"
305
  msgstr ""
306
 
307
+ #: Application/Backend/Feature/LoginRedirect.php:103
308
+ msgid "Login Redirect"
309
+ msgstr ""
310
+
311
+ #: Application/Backend/Feature/Menu.php:190
312
  msgid "Backend Menu"
313
  msgstr ""
314
 
316
  msgid "Metaboxes & Widgets"
317
  msgstr ""
318
 
319
+ #: Application/Backend/Feature/Post.php:266
320
  msgid "You reached your limitation."
321
  msgstr ""
322
 
323
+ #: Application/Backend/Feature/Redirect.php:103
324
+ msgid "Access Denied Redirect"
325
+ msgstr ""
326
+
327
+ #: Application/Backend/Feature/Security.php:73
328
+ msgid "Security"
329
  msgstr ""
330
 
331
+ #: Application/Backend/Feature/Shortcode.php:45
332
+ #: Application/Backend/phtml/shortcode.phtml:6
333
+ msgid "Shortcodes"
334
+ msgstr ""
335
+
336
+ #: Application/Backend/Feature/Teaser.php:103
337
  msgid "Content Teaser"
338
  msgstr ""
339
 
340
+ #: Application/Backend/Feature/Utility.php:103
341
  msgid "Utilities"
342
  msgstr ""
343
 
344
+ #: Application/Backend/Manager.php:143
345
  #, php-format
346
  msgid "Extension %s has new update available for download."
347
  msgstr ""
348
 
349
+ #: Application/Backend/Manager.php:150
350
+ #, php-format
351
+ msgid ""
352
+ "License violation for %s extension. Enter valid license on the Extensions "
353
+ "tab or contact us immediately."
354
+ msgstr ""
355
+
356
  #: Application/Backend/Manager.php:194
357
  msgid "Access Manager"
358
  msgstr ""
359
 
360
+ #: Application/Backend/Manager.php:264 Application/Backend/Manager.php:284
361
+ #: Application/Backend/Manager.php:309
362
  msgid "Access"
363
  msgstr ""
364
 
374
  msgid "Current role"
375
  msgstr ""
376
 
377
+ #: Application/Backend/View/PostOptionList.php:13
378
+ #: Application/Backend/View/PostOptionList.php:44
379
+ msgid "List"
380
+ msgstr ""
381
+
382
+ #: Application/Backend/View/PostOptionList.php:14
383
+ #: Application/Backend/View/PostOptionList.php:45
384
+ #, php-format
385
+ msgid "Hide %s."
386
+ msgstr ""
387
+
388
+ #: Application/Backend/View/PostOptionList.php:17
389
+ #: Application/Backend/View/PostOptionList.php:48
390
+ msgid "List To Others"
391
+ msgstr ""
392
+
393
+ #: Application/Backend/View/PostOptionList.php:18
394
+ #: Application/Backend/View/PostOptionList.php:49
395
+ #, php-format
396
+ msgid "Hide %s for all except author."
397
+ msgstr ""
398
+
399
+ #: Application/Backend/View/PostOptionList.php:21
400
+ msgid "Read"
401
+ msgstr ""
402
+
403
+ #: Application/Backend/View/PostOptionList.php:22
404
+ #, php-format
405
+ msgid "Restrict access to read %s."
406
+ msgstr ""
407
+
408
+ #: Application/Backend/View/PostOptionList.php:25
409
+ msgid "Read By Others"
410
+ msgstr ""
411
+
412
+ #: Application/Backend/View/PostOptionList.php:26
413
+ msgid "Restrict access to read for all except author."
414
+ msgstr ""
415
+
416
+ #: Application/Backend/View/PostOptionList.php:29
417
+ msgid "Limit"
418
+ msgstr ""
419
+
420
+ #: Application/Backend/View/PostOptionList.php:30
421
+ #, php-format
422
+ msgid ""
423
+ "If checked, show defined in the Content Teaser tab teaser message instead of "
424
+ "%s content."
425
+ msgstr ""
426
+
427
+ #: Application/Backend/View/PostOptionList.php:33
428
+ msgid "Comment"
429
+ msgstr ""
430
+
431
+ #: Application/Backend/View/PostOptionList.php:34
432
+ #, php-format
433
+ msgid "Restrict access to comment on %s if commenting feature is enabled."
434
+ msgstr ""
435
+
436
+ #: Application/Backend/View/PostOptionList.php:37
437
+ msgid "Password Protected"
438
+ msgstr ""
439
+
440
+ #: Application/Backend/View/PostOptionList.php:38
441
+ #, php-format
442
+ msgid "Password: %s"
443
+ msgstr ""
444
+
445
+ #: Application/Backend/View/PostOptionList.php:38
446
+ msgid "change"
447
+ msgstr ""
448
+
449
+ #: Application/Backend/View/PostOptionList.php:39
450
+ #, php-format
451
+ msgid "Add a password protection for the %s."
452
+ msgstr ""
453
+
454
+ #: Application/Backend/View/PostOptionList.php:53
455
+ #, php-format
456
+ msgid "Restrict access to edit %s."
457
+ msgstr ""
458
+
459
+ #: Application/Backend/View/PostOptionList.php:56
460
+ msgid "Edit By Others"
461
+ msgstr ""
462
+
463
+ #: Application/Backend/View/PostOptionList.php:57
464
+ #, php-format
465
+ msgid "Restrict access to edit %s for all except author."
466
+ msgstr ""
467
+
468
+ #: Application/Backend/View/PostOptionList.php:60
469
+ #: Application/Backend/phtml/index.phtml:177
470
+ #: Application/Backend/phtml/object/capability.phtml:97
471
+ msgid "Delete"
472
+ msgstr ""
473
+
474
+ #: Application/Backend/View/PostOptionList.php:61
475
+ #, php-format
476
+ msgid "Restrict access to trash or permanently delete %s."
477
+ msgstr ""
478
+
479
+ #: Application/Backend/View/PostOptionList.php:64
480
+ msgid "Delete By Others"
481
+ msgstr ""
482
+
483
+ #: Application/Backend/View/PostOptionList.php:65
484
+ #, php-format
485
+ msgid ""
486
+ "Restrict access to trash or permanently delete %s for all except author."
487
+ msgstr ""
488
+
489
+ #: Application/Backend/View/PostOptionList.php:68
490
+ msgid "Publish"
491
+ msgstr ""
492
+
493
+ #: Application/Backend/View/PostOptionList.php:69
494
+ #, php-format
495
+ msgid ""
496
+ "Restrict access to publish %s. Quick Edit inline action is also removed."
497
+ msgstr ""
498
+
499
+ #: Application/Backend/View/PostOptionList.php:72
500
+ msgid "Publish By Others"
501
+ msgstr ""
502
+
503
+ #: Application/Backend/View/PostOptionList.php:73
504
+ #, php-format
505
+ msgid ""
506
+ "Restrict access to publish %s for all except author. Quick Edit inline "
507
+ "action is also removed."
508
+ msgstr ""
509
+
510
+ #: Application/Backend/View/SecurityOptionList.php:12
511
+ msgid "Login Timeout"
512
+ msgstr ""
513
+
514
+ #: Application/Backend/View/SecurityOptionList.php:13
515
+ #, php-format
516
+ msgid ""
517
+ "Delay the login process for %s second to significantly reduce the chance for "
518
+ "brute force or dictionary attack."
519
+ msgstr ""
520
+
521
+ #: Application/Backend/View/SecurityOptionList.php:17
522
+ msgid "Track IP Address"
523
+ msgstr ""
524
+
525
+ #: Application/Backend/View/SecurityOptionList.php:18
526
+ msgid ""
527
+ "Track the IP address for the last successful user login and trigger double "
528
+ "authentication via email when the same username/password combination is used "
529
+ "to login from a different IP address."
530
+ msgstr ""
531
+
532
+ #: Application/Backend/View/SecurityOptionList.php:22
533
+ msgid "Brute Force Lockout"
534
+ msgstr ""
535
+
536
+ #: Application/Backend/View/SecurityOptionList.php:23
537
+ #, php-format
538
+ msgid ""
539
+ "Automatically reject login attempts if number of unsuccessful login attempts "
540
+ "is more than %s over the period of %s."
541
+ msgstr ""
542
+
543
+ #: Application/Backend/View/UtilityOptionList.php:12
544
+ msgid "Edit/Delete Capabilities"
545
+ msgstr ""
546
+
547
+ #: Application/Backend/View/UtilityOptionList.php:17
548
+ msgid "Backend Access Control"
549
+ msgstr ""
550
+
551
+ #: Application/Backend/View/UtilityOptionList.php:18
552
+ msgid ""
553
+ "Allow AAM to manage access to backend resources like backend menu, "
554
+ "categories or posts."
555
+ msgstr ""
556
+
557
+ #: Application/Backend/View/UtilityOptionList.php:22
558
+ msgid "Frontend Access Control"
559
+ msgstr ""
560
+
561
+ #: Application/Backend/View/UtilityOptionList.php:23
562
+ msgid ""
563
+ "Allow AAM to manage access to frontend resources like pages, categories or "
564
+ "posts."
565
+ msgstr ""
566
+
567
+ #: Application/Backend/View/UtilityOptionList.php:27
568
+ msgid "Media Files Access Control"
569
+ msgstr ""
570
+
571
+ #: Application/Backend/View/UtilityOptionList.php:32
572
+ msgid "Clear cache automatically"
573
+ msgstr ""
574
+
575
+ #: Application/Core/Repository.php:302 Application/Extension/Repository.php:273
576
  #, php-format
577
  msgid "Failed to create %s"
578
  msgstr ""
579
 
580
+ #: Application/Core/Repository.php:306 Application/Extension/Repository.php:277
581
  #, php-format
582
  msgid "Directory %s is not writable"
583
  msgstr ""
584
 
585
+ #: Application/Frontend/Manager.php:184
586
+ #, php-format
587
+ msgid "[%s] Double Authentication"
588
+ msgstr ""
589
+
590
+ #: Application/Frontend/Manager.php:186
591
+ #, php-format
592
+ msgid "Someone was trying to login from the different IP address %s:"
593
+ msgstr ""
594
+
595
+ #: Application/Frontend/Manager.php:187
596
+ #, php-format
597
+ msgid "Website: %s"
598
+ msgstr ""
599
+
600
+ #: Application/Frontend/Manager.php:188
601
+ #, php-format
602
+ msgid "Username: %s"
603
+ msgstr ""
604
+
605
+ #: Application/Frontend/Manager.php:189
606
+ msgid "Visit the following address to authorize the login:"
607
+ msgstr ""
608
+
609
+ #: Application/Shortcode/Factory.php:52
610
+ msgid "No valid strategy found for the given context"
611
+ msgstr ""
612
+
613
+ #: aam.php:163
614
  msgid "PHP 5.2 or higher is required."
615
  msgstr ""
616
 
617
+ #: aam.php:165
618
  msgid "WP 3.8 or higher is required."
619
  msgstr ""
620
 
636
  msgid "Submit"
637
  msgstr ""
638
 
639
+ #: Application/Backend/phtml/extension.phtml:28
640
  msgid "Premium"
641
  msgstr ""
642
 
643
+ #: Application/Backend/phtml/extension.phtml:29
644
+ #: Application/Backend/phtml/extension.phtml:69
 
645
  msgid "Free"
646
  msgstr ""
647
 
648
+ #: Application/Backend/phtml/extension.phtml:30
 
 
 
 
649
  msgid "Check For Updates"
650
  msgstr ""
651
 
652
+ #: Application/Backend/phtml/extension.phtml:30
653
  msgid "Check"
654
  msgstr ""
655
 
656
+ #: Application/Backend/phtml/extension.phtml:49
657
+ #: Application/Backend/phtml/extension.phtml:76
 
658
  msgid "Installed"
659
  msgstr ""
660
 
661
+ #: Application/Backend/phtml/extension.phtml:53
662
+ msgid "Inactive"
663
  msgstr ""
664
 
665
+ #: Application/Backend/phtml/extension.phtml:55
666
+ msgid "Purchase"
 
667
  msgstr ""
668
 
669
+ #: Application/Backend/phtml/extension.phtml:80
670
+ #: Application/Backend/phtml/extension.phtml:111
671
+ msgid "Download"
672
  msgstr ""
673
 
674
+ #: Application/Backend/phtml/extension.phtml:95
675
+ #: Application/Backend/phtml/extension.phtml:122
676
+ #: Application/Backend/phtml/extension.phtml:133
677
+ #: Application/Backend/phtml/index.phtml:126
678
+ #: Application/Backend/phtml/index.phtml:138
679
+ #: Application/Backend/phtml/index.phtml:148
680
+ #: Application/Backend/phtml/index.phtml:160
681
+ #: Application/Backend/phtml/index.phtml:170
682
+ #: Application/Backend/phtml/index.phtml:178
683
  #: Application/Backend/phtml/object/capability.phtml:47
684
  #: Application/Backend/phtml/object/capability.phtml:58
685
  #: Application/Backend/phtml/object/capability.phtml:68
688
  #: Application/Backend/phtml/object/capability.phtml:98
689
  #: Application/Backend/phtml/object/metabox.phtml:80
690
  #: Application/Backend/phtml/object/metabox.phtml:94
691
+ #: Application/Backend/phtml/object/post.phtml:121
692
+ #: Application/Backend/phtml/object/post.phtml:132
693
+ #: Application/Backend/phtml/utility.phtml:42
694
  msgid "Close"
695
  msgstr ""
696
 
697
+ #: Application/Backend/phtml/extension.phtml:96
698
  msgid "Notification"
699
  msgstr ""
700
 
701
+ #: Application/Backend/phtml/extension.phtml:100
702
  msgid ""
703
  "Extension requires manual installation. Please follow few simple steps below."
704
  msgstr ""
705
 
706
+ #: Application/Backend/phtml/extension.phtml:112
707
+ #: Application/Backend/phtml/utility.phtml:50
708
  msgid "Cancel"
709
  msgstr ""
710
 
711
+ #: Application/Backend/phtml/extension.phtml:123
712
  msgid "Install Extension"
713
  msgstr ""
714
 
715
+ #: Application/Backend/phtml/extension.phtml:127
716
  msgid ""
717
  "Insert license key that you recieved after the payment (find the email "
718
  "example below). It might take up to 2 hours to process the payment. Please "
731
  msgstr ""
732
 
733
  #: Application/Backend/phtml/index.phtml:22
734
+ msgid "Please note!"
735
  msgstr ""
736
 
737
  #: Application/Backend/phtml/index.phtml:23
743
 
744
  #: Application/Backend/phtml/index.phtml:24
745
  #, php-format
746
+ msgid "Refer to our %sHelp%s section when there is any question."
747
  msgstr ""
748
 
749
+ #: Application/Backend/phtml/index.phtml:37
750
  msgid "Notifications"
751
  msgstr ""
752
 
753
+ #: Application/Backend/phtml/index.phtml:81
754
  msgid "AAM Multisite"
755
  msgstr ""
756
 
757
+ #: Application/Backend/phtml/index.phtml:85
758
  msgid "Install AAM Multisite"
759
  msgstr ""
760
 
761
+ #: Application/Backend/phtml/index.phtml:96
762
  msgid "Users/Roles Panel"
763
  msgstr ""
764
 
765
+ #: Application/Backend/phtml/index.phtml:102
766
+ #: Application/Backend/phtml/index.phtml:218
767
  msgid "Roles"
768
  msgstr ""
769
 
770
+ #: Application/Backend/phtml/index.phtml:104
771
+ #: Application/Backend/phtml/index.phtml:228
772
  msgid "Visitor"
773
  msgstr ""
774
 
775
+ #: Application/Backend/phtml/index.phtml:105
776
+ #: Application/Backend/phtml/index.phtml:233
777
+ msgid "Default"
778
+ msgstr ""
779
+
780
+ #: Application/Backend/phtml/index.phtml:115
781
+ #: Application/Backend/phtml/index.phtml:191
782
  msgid "Action"
783
  msgstr ""
784
 
785
+ #: Application/Backend/phtml/index.phtml:127
786
  msgid "Create Role"
787
  msgstr ""
788
 
789
+ #: Application/Backend/phtml/index.phtml:131
790
+ #: Application/Backend/phtml/index.phtml:153
791
  msgid "Role Name"
792
  msgstr ""
793
 
794
+ #: Application/Backend/phtml/index.phtml:132
795
+ #: Application/Backend/phtml/index.phtml:154
796
  msgid "Enter Role Name"
797
  msgstr ""
798
 
799
+ #: Application/Backend/phtml/index.phtml:149
800
  msgid "Update Role"
801
  msgstr ""
802
 
803
+ #: Application/Backend/phtml/index.phtml:174
804
  #, php-format
805
+ msgid "Are you sure that you want to delete the %s role?"
 
 
 
 
 
 
806
  msgstr ""
807
 
808
+ #: Application/Backend/phtml/index.phtml:190
809
  msgid "Username"
810
  msgstr ""
811
 
812
+ #: Application/Backend/phtml/index.phtml:200
813
  msgid ""
814
  "Manage access to your website for visitors (any user that is not "
815
  "authenticated)"
816
  msgstr ""
817
 
818
+ #: Application/Backend/phtml/index.phtml:201
819
  msgid "Manage Visitors"
820
  msgstr ""
821
 
822
+ #: Application/Backend/phtml/index.phtml:206
823
+ msgid ""
824
+ "Manage default access to your website resources for all users, roles and "
825
+ "visitor. This includes Administrator role and your user"
826
+ msgstr ""
827
+
828
+ #: Application/Backend/phtml/index.phtml:207
829
+ msgid "Manage Default Access"
830
+ msgstr ""
831
+
832
+ #: Application/Backend/phtml/index.phtml:219
833
  msgid ""
834
  "With Roles tab you can manage access for any defined role, edit role's name, "
835
  "create new role or even delete existing (but only when there is no users "
836
  "assigned to it). You are not allowed to delete Administrator role."
837
  msgstr ""
838
 
839
+ #: Application/Backend/phtml/index.phtml:224
840
  msgid ""
841
  "Manage access for any user. As a bonus feature, you can block user. It means "
842
  "that user will be not able to login to your website anymore."
843
  msgstr ""
844
 
845
+ #: Application/Backend/phtml/index.phtml:229
846
  msgid ""
847
  "Visitor can be considered any user that is not authenticated to your website."
848
  msgstr ""
849
 
850
+ #: Application/Backend/phtml/index.phtml:234
851
+ msgid ""
852
+ "Manage default access settings to your website resources for all users, "
853
+ "roles and visitors."
854
+ msgstr ""
855
+
856
  #: Application/Backend/phtml/object/capability.phtml:16
857
  msgid "Filter"
858
  msgstr ""
872
  msgstr ""
873
 
874
  #: Application/Backend/phtml/object/capability.phtml:37
875
+ #: Application/Backend/phtml/object/post.phtml:44
876
  msgid "Actions"
877
  msgstr ""
878
 
890
  msgid "Are you sure that you want to delete %s capability for all roles?"
891
  msgstr ""
892
 
893
+ #: Application/Backend/phtml/object/login-redirect.phtml:43
894
+ #: Application/Backend/phtml/object/redirect.phtml:61
895
+ msgid "Existing Page"
896
+ msgstr ""
897
+
898
+ #: Application/Backend/phtml/object/login-redirect.phtml:52
899
+ #: Application/Backend/phtml/object/redirect.phtml:70
900
+ msgid "-- Select Page --"
901
+ msgstr ""
902
+
903
+ #: Application/Backend/phtml/object/login-redirect.phtml:58
904
+ #: Application/Backend/phtml/object/redirect.phtml:76
905
+ #: Application/Backend/phtml/object/redirect.phtml:109
906
+ msgid "The URL"
907
+ msgstr ""
908
+
909
+ #: Application/Backend/phtml/object/login-redirect.phtml:63
910
+ #: Application/Backend/phtml/object/redirect.phtml:81
911
+ #: Application/Backend/phtml/object/redirect.phtml:113
912
+ msgid "PHP Callback Function"
913
  msgstr ""
914
 
915
+ #: Application/Backend/phtml/object/menu.phtml:7
916
  #: Application/Backend/phtml/object/metabox.phtml:12
917
+ #: Application/Backend/phtml/object/post.phtml:27
918
+ msgid "Settings are customized"
919
  msgstr ""
920
 
921
+ #: Application/Backend/phtml/object/menu.phtml:8
922
  #: Application/Backend/phtml/object/metabox.phtml:13
923
+ #: Application/Backend/phtml/object/post.phtml:28
924
  msgid "Reset To Default"
925
  msgstr ""
926
 
941
  msgstr ""
942
 
943
  #: Application/Backend/phtml/object/metabox.phtml:71
944
+ msgid "The list is not initialized. Click Refresh button above."
 
 
945
  msgstr ""
946
 
947
  #: Application/Backend/phtml/object/metabox.phtml:81
965
  msgid "Insert valid URL"
966
  msgstr ""
967
 
968
+ #: Application/Backend/phtml/object/post.phtml:17
 
 
 
 
 
969
  msgid "Root"
970
  msgstr ""
971
 
972
+ #: Application/Backend/phtml/object/post.phtml:43
973
  msgid "Title"
974
  msgstr ""
975
 
976
+ #: Application/Backend/phtml/object/post.phtml:52
977
+ #: Application/Backend/phtml/object/post.phtml:57
978
+ #: Application/Backend/phtml/object/post.phtml:112
979
  msgid "Go Back"
980
  msgstr ""
981
 
982
+ #: Application/Backend/phtml/object/post.phtml:65
983
  msgid "Frontend"
984
  msgstr ""
985
 
986
+ #: Application/Backend/phtml/object/post.phtml:122
987
+ msgid "Change Password"
 
988
  msgstr ""
989
 
990
+ #: Application/Backend/phtml/object/post.phtml:126
991
+ msgid "Password"
992
  msgstr ""
993
 
994
+ #: Application/Backend/phtml/object/post.phtml:127
995
+ msgid "Enter Password"
996
  msgstr ""
997
 
998
+ #: Application/Backend/phtml/object/post.phtml:131
999
+ msgid "Change"
1000
  msgstr ""
1001
 
1002
+ #: Application/Backend/phtml/object/redirect.phtml:25
1003
  msgid "Frontend Redirect"
1004
  msgstr ""
1005
 
1006
+ #: Application/Backend/phtml/object/redirect.phtml:26
1007
  msgid "Backend Redirect"
1008
  msgstr ""
1009
 
1010
+ #: Application/Backend/phtml/object/redirect.phtml:56
1011
+ #: Application/Backend/phtml/object/redirect.phtml:104
1012
  msgid "Customized Message"
1013
  msgstr ""
1014
 
1015
+ #: Application/Backend/phtml/object/redirect.phtml:57
1016
+ #: Application/Backend/phtml/object/redirect.phtml:105
1017
  msgid "Enter message..."
1018
  msgstr ""
1019
 
1020
+ #: Application/Backend/phtml/object/teaser.phtml:25
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1021
  msgid "Teaser Message"
1022
  msgstr ""
1023
 
1024
+ #: Application/Backend/phtml/object/teaser.phtml:26
1025
  msgid "Enter teaser message..."
1026
  msgstr ""
1027
 
1028
+ #: Application/Backend/phtml/object/teaser.phtml:31
1029
  msgid "Add excerpt before teaser message"
1030
  msgstr ""
1031
 
1033
  msgid "Inherit Capabilities From"
1034
  msgstr ""
1035
 
1036
+ #: Application/Backend/phtml/security.phtml:30
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1037
  msgid ""
1038
+ "Improve your website security and keep your website error free with "
1039
+ "CodePinch."
1040
  msgstr ""
1041
 
1042
+ #: Application/Backend/phtml/utility.phtml:26
 
 
 
 
 
 
 
 
1043
  msgid "Clear All Settings"
1044
  msgstr ""
1045
 
1046
+ #: Application/Backend/phtml/utility.phtml:28
1047
  msgid ""
1048
  "Remove all the settings related to AAM (including all extension licenses)."
1049
  msgstr ""
1050
 
1051
+ #: Application/Backend/phtml/utility.phtml:43
1052
  msgid "Clear all settings"
1053
  msgstr ""
1054
 
1055
+ #: Application/Backend/phtml/utility.phtml:46
1056
  msgid "All AAM settings will be removed."
1057
  msgstr ""
1058
 
1059
+ #: Application/Backend/phtml/utility.phtml:49
1060
  msgid "Clear"
1061
  msgstr ""
aam.php CHANGED
@@ -3,7 +3,7 @@
3
  /**
4
  Plugin Name: Advanced Access Manager
5
  Description: Manage website access for any user, role or visitors
6
- Version: 3.9.5.1
7
  Author: Vasyl Martyniuk <vasyl@vasyltech.com>
8
  Author URI: https://www.vasyltech.com
9
 
@@ -118,7 +118,7 @@ class AAM {
118
 
119
  //load all installed extension
120
  //TODO - Remove in Aug 2017
121
- AAM_Core_Repository::getInstance()->load();
122
 
123
  //bootstrap the correct interface
124
  if (is_admin()) {
@@ -145,10 +145,7 @@ class AAM {
145
  */
146
  public static function cron() {
147
  //grab the server extension list
148
- $response = AAM_Core_Server::check();
149
- if (!empty($response)) {
150
- AAM_Core_API::updateOption('aam-extension-repository', $response);
151
- }
152
  }
153
 
154
  /**
@@ -177,7 +174,7 @@ class AAM {
177
  }
178
 
179
  /**
180
- * Uninstall hook
181
  *
182
  * Remove all leftovers from AAM execution
183
  *
3
  /**
4
  Plugin Name: Advanced Access Manager
5
  Description: Manage website access for any user, role or visitors
6
+ Version: 4.0
7
  Author: Vasyl Martyniuk <vasyl@vasyltech.com>
8
  Author URI: https://www.vasyltech.com
9
 
118
 
119
  //load all installed extension
120
  //TODO - Remove in Aug 2017
121
+ AAM_Extension_Repository::getInstance()->load();
122
 
123
  //bootstrap the correct interface
124
  if (is_admin()) {
145
  */
146
  public static function cron() {
147
  //grab the server extension list
148
+ AAM_Extension_Repository::getInstance()->check();
 
 
 
149
  }
150
 
151
  /**
174
  }
175
 
176
  /**
177
+ * De-install hook
178
  *
179
  * Remove all leftovers from AAM execution
180
  *
media/css/aam.css CHANGED
@@ -63,73 +63,73 @@
63
  }
64
 
65
 
66
- .icon-asterisk:before { content: '\e800'; } /* '' */
67
- .icon-spin4:before { content: '\e801'; } /* '' */
68
- .icon-user-secret:before { content: '\e802'; } /* '' */
69
- .icon-folder:before { content: '\e803'; } /* '' */
70
- .icon-stop:before { content: '\e804'; } /* '' */
71
- .icon-left-dir:before { content: '\e805'; } /* '' */
72
- .icon-dollar:before { content: '\e806'; } /* '' */
73
- .icon-mail-alt:before { content: '\e807'; } /* '' */
74
- .icon-download-cloud:before { content: '\e808'; } /* '' */
75
- .icon-eye-off:before { content: '\e809'; } /* '' */
76
- .icon-attention-circled:before { content: '\e80a'; } /* '' */
77
- .icon-cog-alt:before { content: '\e80b'; } /* '' */
78
- .icon-link-1:before { content: '\e80c'; } /* '' */
79
- .icon-user-secret-1:before { content: '\e80d'; } /* '' */
80
- .icon-unlink:before { content: '\e80e'; } /* '' */
81
- .icon-sort-down:before { content: '\e80f'; } /* '' */
82
- .icon-pencil:before { content: '\e810'; } /* '' */
83
- .icon-arrows-cw:before { content: '\e811'; } /* '' */
84
- .icon-sort-up:before { content: '\e812'; } /* '' */
85
- .icon-sort:before { content: '\e813'; } /* '' */
86
- .icon-lock-open-alt:before { content: '\e814'; } /* '' */
87
- .icon-plus:before { content: '\e815'; } /* '' */
88
- .icon-filter:before { content: '\e816'; } /* '' */
89
- .icon-check:before { content: '\e817'; } /* '' */
90
- .icon-help-circled:before { content: '\e818'; } /* '' */
91
- .icon-file-code:before { content: '\e819'; } /* '' */
92
- .icon-users:before { content: '\e81a'; } /* '' */
93
- .icon-box-1:before { content: '\e81b'; } /* '' */
94
- .icon-folder-1:before { content: '\e81c'; } /* '' */
95
- .icon-eye-1:before { content: '\e81d'; } /* '' */
96
- .icon-upload-cloud:before { content: '\e81e'; } /* '' */
97
- .icon-user-plus:before { content: '\e81f'; } /* '' */
98
- .icon-gauge:before { content: '\e820'; } /* 'î  ' */
99
- .icon-box:before { content: '\e821'; } /* 'î ¡' */
100
- .icon-plus-circled:before { content: '\e822'; } /* 'î ¢' */
101
- .icon-link:before { content: '\e823'; } /* 'î £' */
102
- .icon-wrench:before { content: '\e824'; } /* 'î ¤' */
103
- .icon-eye:before { content: '\e825'; } /* 'î ¥' */
104
- .icon-medkit:before { content: '\e826'; } /* 'î ¦' */
105
- .icon-basket:before { content: '\e827'; } /* 'î §' */
106
- .icon-check-empty:before { content: '\e828'; } /* 'î ¨' */
107
- .icon-doc-text-inv:before { content: '\e829'; } /* 'î ©' */
108
- .icon-home:before { content: '\e82a'; } /* 'î ª' */
109
- .icon-angle-double-right:before { content: '\e82b'; } /* 'î «' */
110
- .icon-facebook:before { content: '\e82c'; } /* 'î ¬' */
111
- .icon-star:before { content: '\e82d'; } /* 'î ­' */
112
- .icon-list:before { content: '\e82e'; } /* 'î ®' */
113
- .icon-up-dir:before { content: '\e82f'; } /* 'î ¯' */
114
- .icon-dot-circled:before { content: '\e830'; } /* 'î °' */
115
- .icon-code:before { content: '\e831'; } /* 'î ±' */
116
- .icon-bug:before { content: '\e832'; } /* 'î ²' */
117
- .icon-heartbeat:before { content: '\e833'; } /* 'î ³' */
118
- .icon-connectdevelop:before { content: '\e834'; } /* 'î ´' */
119
- .icon-trash-empty:before { content: '\e835'; } /* 'î µ' */
120
- .icon-download-cloud-1:before { content: '\e836'; } /* 'î ¶' */
121
- .icon-github:before { content: '\e837'; } /* 'î ·' */
122
- .icon-cog:before { content: '\e838'; } /* 'î ¸' */
123
- .icon-lock:before { content: '\e839'; } /* 'î ¹' */
124
- .icon-twitter:before { content: '\e83a'; } /* 'î º' */
125
- .icon-certificate:before { content: '\e83b'; } /* 'î »' */
126
- .icon-user:before { content: '\e83c'; } /* 'î ¼' */
127
- .icon-level-down:before { content: '\e83d'; } /* 'î ½' */
128
- .icon-exchange:before { content: '\f0ec'; } /* '' */
129
- .icon-circle:before { content: '\f111'; } /* '' */
130
- .icon-thumbs-up-alt:before { content: '\f164'; } /* '' */
131
- .icon-circle-thin:before { content: '\f1db'; } /* '' */
132
- .icon-clone:before { content: '\f24d'; } /* '' */
133
 
134
  .animate-spin {
135
  -moz-animation: spin 2s infinite linear;
@@ -398,6 +398,17 @@ a.btn:focus, a.btn:active {
398
  margin-bottom: 0;
399
  }
400
 
 
 
 
 
 
 
 
 
 
 
 
401
  /** DATATABLES **/
402
  .dataTables_info {
403
  float: left;
@@ -575,7 +586,7 @@ input[type=radio]:checked + label:before {
575
  }
576
 
577
  .aam-overwrite {
578
- padding: 5px 5px 5px 15px;
579
  background-color: #f0ad4e;
580
  color: #FFFFFF;
581
  font-weight: 700;
@@ -602,8 +613,9 @@ input[type=radio]:checked + label:before {
602
  }
603
 
604
  .aam-overwrite .btn {
605
- margin-top: -3px;
606
  border: 0;
 
607
  }
608
 
609
  .row.aam-bordered {
@@ -721,6 +733,10 @@ input[type=radio]:checked + label:before {
721
  font-style: normal;
722
  }
723
 
 
 
 
 
724
  .text-larger {
725
  font-size: 1.2em;
726
  }
@@ -751,6 +767,22 @@ input[type=radio]:checked + label:before {
751
  width: 100%;
752
  }
753
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
754
  .aam-help-menu {
755
  float: right;
756
  font-size: 1.4em;
@@ -877,13 +909,26 @@ input[type=radio]:checked + label:before {
877
  }
878
 
879
  .aam-social {
880
- font-size: 1.4em;
881
  text-align: center;
 
 
882
  }
883
 
884
  .aam-social a {
885
  text-decoration: none;
886
  margin: 0 10px;
 
 
 
 
 
 
 
 
 
 
 
887
  }
888
 
889
  .aam-error-list {
@@ -965,36 +1010,6 @@ input[type=radio]:checked + label:before {
965
  color: #777777;
966
  }
967
 
968
- /*! ========================================================================
969
- * Bootstrap Toggle: bootstrap-toggle.css v2.2.0
970
- * http://www.bootstraptoggle.com
971
- * ========================================================================
972
- * Copyright 2014 Min Hur, The New York Times Company
973
- * Licensed under MIT
974
- * ======================================================================== */
975
- .checkbox label .toggle,.checkbox-inline .toggle{margin-left:-20px;margin-right:5px}
976
- .toggle{position:relative;overflow:hidden}
977
- .toggle input[type=checkbox]{display:none}
978
- .toggle-group{position:absolute;width:200%;top:0;bottom:0;left:0;transition:left .35s;-webkit-transition:left .35s;-moz-user-select:none;-webkit-user-select:none}
979
- .toggle.off .toggle-group{left:-100%}
980
- .toggle-on{position:absolute;top:0;bottom:0;left:0;right:50%;margin:0;border:0;border-radius:0}
981
- .toggle-off{position:absolute;top:0;bottom:0;left:50%;right:0;margin:0;border:0;border-radius:0}
982
- .toggle-handle{position:relative;margin:0 auto;padding-top:0;padding-bottom:0;height:100%;width:0;border-width:0 1px}
983
- .toggle.btn{min-width:59px;min-height:34px}
984
- .toggle-on.btn{padding-right:24px}
985
- .toggle-off.btn{padding-left:24px}
986
- .toggle.btn-lg{min-width:79px;min-height:45px}
987
- .toggle-on.btn-lg{padding-right:31px}
988
- .toggle-off.btn-lg{padding-left:31px}
989
- .toggle-handle.btn-lg{width:40px}
990
- .toggle.btn-sm{min-width:50px;min-height:30px}
991
- .toggle-on.btn-sm{padding-right:20px}
992
- .toggle-off.btn-sm{padding-left:20px}
993
- .toggle.btn-xs{min-width:35px;min-height:22px}
994
- .toggle-on.btn-xs{padding-right:12px}
995
- .toggle-off.btn-xs{padding-left:12px}
996
-
997
-
998
  /* COVER KNOWN CSS ISSUES CASED BY OTHER PLUGINS OR THEMES */
999
 
1000
  /* Bridge theme */
63
  }
64
 
65
 
66
+ .icon-asterisk:before { content: '\e800' !important; } /* '' */
67
+ .icon-spin4:before { content: '\e801' !important; } /* '' */
68
+ .icon-user-secret:before { content: '\e802' !important; } /* '' */
69
+ .icon-folder:before { content: '\e803' !important; } /* '' */
70
+ .icon-stop:before { content: '\e804' !important; } /* '' */
71
+ .icon-left-dir:before { content: '\e805' !important; } /* '' */
72
+ .icon-dollar:before { content: '\e806' !important; } /* '' */
73
+ .icon-mail-alt:before { content: '\e807' !important; } /* '' */
74
+ .icon-download-cloud:before { content: '\e808' !important; } /* '' */
75
+ .icon-eye-off:before { content: '\e809' !important; } /* '' */
76
+ .icon-attention-circled:before { content: '\e80a' !important; } /* '' */
77
+ .icon-cog-alt:before { content: '\e80b' !important; } /* '' */
78
+ .icon-link-1:before { content: '\e80c' !important; } /* '' */
79
+ .icon-user-secret-1:before { content: '\e80d' !important; } /* '' */
80
+ .icon-unlink:before { content: '\e80e' !important; } /* '' */
81
+ .icon-sort-down:before { content: '\e80f' !important; } /* '' */
82
+ .icon-pencil:before { content: '\e810' !important; } /* '' */
83
+ .icon-arrows-cw:before { content: '\e811' !important; } /* '' */
84
+ .icon-sort-up:before { content: '\e812' !important; } /* '' */
85
+ .icon-sort:before { content: '\e813' !important; } /* '' */
86
+ .icon-lock-open-alt:before { content: '\e814' !important; } /* '' */
87
+ .icon-plus:before { content: '\e815' !important; } /* '' */
88
+ .icon-filter:before { content: '\e816' !important; } /* '' */
89
+ .icon-check:before { content: '\e817' !important; } /* '' */
90
+ .icon-help-circled:before { content: '\e818' !important; } /* '' */
91
+ .icon-file-code:before { content: '\e819' !important; } /* '' */
92
+ .icon-users:before { content: '\e81a' !important; } /* '' */
93
+ .icon-box-1:before { content: '\e81b' !important; } /* '' */
94
+ .icon-folder-1:before { content: '\e81c' !important; } /* '' */
95
+ .icon-eye-1:before { content: '\e81d' !important; } /* '' */
96
+ .icon-upload-cloud:before { content: '\e81e' !important; } /* '' */
97
+ .icon-user-plus:before { content: '\e81f' !important; } /* '' */
98
+ .icon-gauge:before { content: '\e820' !important; } /* 'î  ' */
99
+ .icon-box:before { content: '\e821' !important; } /* 'î ¡' */
100
+ .icon-plus-circled:before { content: '\e822' !important; } /* 'î ¢' */
101
+ .icon-link:before { content: '\e823' !important; } /* 'î £' */
102
+ .icon-wrench:before { content: '\e824' !important; } /* 'î ¤' */
103
+ .icon-eye:before { content: '\e825' !important; } /* 'î ¥' */
104
+ .icon-medkit:before { content: '\e826' !important; } /* 'î ¦' */
105
+ .icon-basket:before { content: '\e827' !important; } /* 'î §' */
106
+ .icon-check-empty:before { content: '\e828' !important; } /* 'î ¨' */
107
+ .icon-doc-text-inv:before { content: '\e829' !important; } /* 'î ©' */
108
+ .icon-home:before { content: '\e82a' !important; } /* 'î ª' */
109
+ .icon-angle-double-right:before { content: '\e82b' !important; } /* 'î «' */
110
+ .icon-facebook:before { content: '\e82c' !important; } /* 'î ¬' */
111
+ .icon-star:before { content: '\e82d' !important; } /* 'î ­' */
112
+ .icon-list:before { content: '\e82e' !important; } /* 'î ®' */
113
+ .icon-up-dir:before { content: '\e82f' !important; } /* 'î ¯' */
114
+ .icon-dot-circled:before { content: '\e830' !important; } /* 'î °' */
115
+ .icon-code:before { content: '\e831' !important; } /* 'î ±' */
116
+ .icon-bug:before { content: '\e832' !important; } /* 'î ²' */
117
+ .icon-heartbeat:before { content: '\e833' !important; } /* 'î ³' */
118
+ .icon-connectdevelop:before { content: '\e834' !important; } /* 'î ´' */
119
+ .icon-trash-empty:before { content: '\e835' !important; } /* 'î µ' */
120
+ .icon-download-cloud-1:before { content: '\e836' !important; } /* 'î ¶' */
121
+ .icon-github:before { content: '\e837' !important; } /* 'î ·' */
122
+ .icon-cog:before { content: '\e838' !important; } /* 'î ¸' */
123
+ .icon-lock:before { content: '\e839' !important; } /* 'î ¹' */
124
+ .icon-twitter:before { content: '\e83a' !important; } /* 'î º' */
125
+ .icon-certificate:before { content: '\e83b' !important; } /* 'î »' */
126
+ .icon-user:before { content: '\e83c' !important; } /* 'î ¼' */
127
+ .icon-level-down:before { content: '\e83d' !important; } /* 'î ½' */
128
+ .icon-exchange:before { content: '\f0ec' !important; } /* '' */
129
+ .icon-circle:before { content: '\f111' !important; } /* '' */
130
+ .icon-thumbs-up-alt:before { content: '\f164' !important; } /* '' */
131
+ .icon-circle-thin:before { content: '\f1db' !important; } /* '' */
132
+ .icon-clone:before { content: '\f24d' !important; } /* '' */
133
 
134
  .animate-spin {
135
  -moz-animation: spin 2s infinite linear;
398
  margin-bottom: 0;
399
  }
400
 
401
+ .aam-shortcode {
402
+ margin-top: 20px;
403
+ border: 1px solid #EEEEEE;
404
+ padding: 10px;
405
+ }
406
+
407
+ .aam-shortcode p {
408
+ font-weight: 500;
409
+ margin-bottom: 0;
410
+ }
411
+
412
  /** DATATABLES **/
413
  .dataTables_info {
414
  float: left;
586
  }
587
 
588
  .aam-overwrite {
589
+ padding: 5px 0px 5px 15px;
590
  background-color: #f0ad4e;
591
  color: #FFFFFF;
592
  font-weight: 700;
613
  }
614
 
615
  .aam-overwrite .btn {
616
+ margin-top: -5px;
617
  border: 0;
618
+ padding: 5px 10px;
619
  }
620
 
621
  .row.aam-bordered {
733
  font-style: normal;
734
  }
735
 
736
+ .aam-row-subtitle b {
737
+ color: #777777;
738
+ }
739
+
740
  .text-larger {
741
  font-size: 1.2em;
742
  }
767
  width: 100%;
768
  }
769
 
770
+ .aam-extension-inactive {
771
+ border: 1px solid transparent;
772
+ display: inline-block;
773
+ font-size: 12px;
774
+ font-weight: 400;
775
+ line-height: 1.42857;
776
+ margin-bottom: 0;
777
+ padding: 6px 12px;
778
+ text-align: center;
779
+ vertical-align: middle;
780
+ white-space: nowrap;
781
+ background-color: #D9534F;
782
+ color: #FFFFFF;
783
+ width: 100%;
784
+ }
785
+
786
  .aam-help-menu {
787
  float: right;
788
  font-size: 1.4em;
909
  }
910
 
911
  .aam-social {
912
+ font-size: 3em;
913
  text-align: center;
914
+ width: 100%;
915
+ display: table;
916
  }
917
 
918
  .aam-social a {
919
  text-decoration: none;
920
  margin: 0 10px;
921
+ display: table-cell;
922
+ }
923
+
924
+ .aam-social span {
925
+ font-size: 0.25em;
926
+ color: #333333;
927
+ display: block;
928
+ letter-spacing: 1px;
929
+ font-weight: 700;
930
+ text-transform: uppercase;
931
+ text-align: center;
932
  }
933
 
934
  .aam-error-list {
1010
  color: #777777;
1011
  }
1012
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1013
  /* COVER KNOWN CSS ISSUES CASED BY OTHER PLUGINS OR THEMES */
1014
 
1015
  /* Bridge theme */
media/js/aam-ui.js CHANGED
@@ -114,8 +114,8 @@
114
 
115
  //add subtitle
116
  $('td:eq(0)', row).append(
117
- $('<i/>', {'class': 'aam-row-subtitle'}).text(
118
- aam.__('Users') + ': ' + parseInt(data[1])
119
  )
120
  );
121
 
@@ -199,15 +199,12 @@
199
  }));
200
  break;
201
 
202
- case 'no-delete':
203
- $(container).append($('<i/>', {
204
- 'class': 'aam-row-action icon-trash-empty text-muted'
205
- }).bind('click', function () {
206
- $('#role-notification-modal').modal('show');
207
- }));
208
- break;
209
-
210
  default:
 
 
 
 
 
211
  break;
212
  }
213
  });
@@ -1287,11 +1284,15 @@
1287
  * @param {type} object
1288
  * @param {type} id
1289
  * @param {type} btn
 
1290
  * @returns {undefined}
1291
  */
1292
  function loadAccessForm(object, id, btn, callback) {
1293
  //reset the form first
1294
  var container = $('.aam-slide-form[data-type="' + object + '"]');
 
 
 
1295
 
1296
  $('.aam-row-action', container).each(function () {
1297
  $(this).attr({
@@ -1309,7 +1310,7 @@
1309
  $(this).attr('class', 'aam-row-action icon-spin4 animate-spin');
1310
  var response = save(
1311
  $(this).data('property'),
1312
- checked,
1313
  object,
1314
  id
1315
  );
@@ -1346,22 +1347,34 @@
1346
  success: function (response) {
1347
  //iterate through each property
1348
  for (var property in response.access) {
1349
- var checked = (response.access[property] ? 'text-danger icon-check' : 'text-muted icon-check-empty');
1350
-
1351
- $('[data-property="' + property + '"]', container).attr({
1352
- 'class': 'aam-row-action ' + checked
1353
- });
1354
-
1355
- //check metadata and show message if necessary
1356
- if (response.meta.overwritten === true) {
1357
- $('#post-overwritten').removeClass('hidden');
1358
- //add some specific attributes to reset button
1359
- $('#post-reset').attr({
1360
- 'data-type': object,
1361
- 'data-id': id
1362
  });
 
 
 
 
1363
  }
1364
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1365
 
1366
  $('#post-list_wrapper').addClass('aam-hidden');
1367
  container.addClass('active');
@@ -1566,6 +1579,11 @@
1566
  break;
1567
 
1568
  default:
 
 
 
 
 
1569
  break;
1570
  }
1571
  });
@@ -1628,9 +1646,48 @@
1628
  });
1629
 
1630
  //load referenced post
1631
- if ($('#load-post').val()) {
1632
- loadAccessForm('post', $('#load-post').val());
 
 
 
1633
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1634
  }
1635
 
1636
  aam.addHook('init', initialize);
@@ -1665,6 +1722,11 @@
1665
  param: param,
1666
  value: value
1667
  },
 
 
 
 
 
1668
  error: function () {
1669
  aam.notification('danger', aam.__('Application error'));
1670
  }
@@ -1697,6 +1759,30 @@
1697
  save($(this).attr('name'), $(this).val());
1698
  });
1699
  });
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1700
  }
1701
 
1702
  aam.addHook('init', initialize);
@@ -1731,6 +1817,11 @@
1731
  param: param,
1732
  value: value
1733
  },
 
 
 
 
 
1734
  error: function () {
1735
  aam.notification('danger', aam.__('Application error'));
1736
  }
@@ -1763,6 +1854,29 @@
1763
  save($(this).attr('name'), $(this).val());
1764
  });
1765
  });
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1766
  }
1767
 
1768
  aam.addHook('init', initialize);
@@ -1797,6 +1911,11 @@
1797
  param: param,
1798
  value: value
1799
  },
 
 
 
 
 
1800
  error: function () {
1801
  aam.notification('danger', aam.__('Application error'));
1802
  }
@@ -1821,6 +1940,29 @@
1821
  save($(this).attr('name'), val);
1822
  });
1823
  });
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1824
  }
1825
 
1826
  aam.addHook('init', initialize);
@@ -2012,10 +2154,7 @@
2012
  * @returns {undefined}
2013
  */
2014
  function initialize() {
2015
- $('input[data-toggle="toggle"]', '#utilities-content').bootstrapToggle({
2016
- size: 'normal',
2017
- width: '100%'
2018
- }).bind('change', function () {
2019
  save($(this).attr('name'), ($(this).prop('checked') ? 1 : 0));
2020
  });
2021
 
@@ -2049,6 +2188,57 @@
2049
 
2050
  })(jQuery);
2051
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2052
 
2053
  /**
2054
  * Main Panel Interface
@@ -2086,7 +2276,8 @@
2086
  */
2087
  aam.fetchContent = function () {
2088
  //referred object ID like post, page or any custom post type
2089
- var object = window.location.search.match(/&oid\=([^&]*)/);
 
2090
 
2091
  $.ajax(aamLocal.url.site, {
2092
  type: 'POST',
@@ -2097,7 +2288,8 @@
2097
  _ajax_nonce: aamLocal.nonce,
2098
  subject: this.getSubject().type,
2099
  subjectId: this.getSubject().id,
2100
- oid: object ? object[1] : null
 
2101
  },
2102
  beforeSend: function () {
2103
  var loader = $('<div/>', {'class': 'aam-loading'}).html(
114
 
115
  //add subtitle
116
  $('td:eq(0)', row).append(
117
+ $('<i/>', {'class': 'aam-row-subtitle'}).html(
118
+ aam.__('Users') + ': <b>' + parseInt(data[1]) + '</b>; ID: <b>' + data[0] + '</b>'
119
  )
120
  );
121
 
199
  }));
200
  break;
201
 
 
 
 
 
 
 
 
 
202
  default:
203
+ aam.triggerHook('role-action', {
204
+ container: container,
205
+ action : action,
206
+ data : data
207
+ });
208
  break;
209
  }
210
  });
1284
  * @param {type} object
1285
  * @param {type} id
1286
  * @param {type} btn
1287
+ * @param {type} callback
1288
  * @returns {undefined}
1289
  */
1290
  function loadAccessForm(object, id, btn, callback) {
1291
  //reset the form first
1292
  var container = $('.aam-slide-form[data-type="' + object + '"]');
1293
+
1294
+ //reset data preview elements
1295
+ $('[data-preview]', container).text('');
1296
 
1297
  $('.aam-row-action', container).each(function () {
1298
  $(this).attr({
1310
  $(this).attr('class', 'aam-row-action icon-spin4 animate-spin');
1311
  var response = save(
1312
  $(this).data('property'),
1313
+ checked ? 1 : 0,
1314
  object,
1315
  id
1316
  );
1347
  success: function (response) {
1348
  //iterate through each property
1349
  for (var property in response.access) {
1350
+ var checked = (response.access[property] ? 'text-danger icon-check' : 'text-muted icon-check-empty');
1351
+ var checkbox = $('[data-property="' + property + '"]', container);
1352
+
1353
+ if (checkbox.length) {
1354
+ checkbox.attr({
1355
+ 'class': 'aam-row-action ' + checked
 
 
 
 
 
 
 
1356
  });
1357
+ } else {
1358
+ $('[data-preview="' + property + '"]', container).text(
1359
+ response.access[property]
1360
+ );
1361
  }
1362
  }
1363
+
1364
+ //check metadata and show message if necessary
1365
+ if (response.meta.overwritten === true) {
1366
+ $('#post-overwritten').removeClass('hidden');
1367
+ //add some specific attributes to reset button
1368
+ $('#post-reset').attr({
1369
+ 'data-type': object,
1370
+ 'data-id': id
1371
+ });
1372
+ }
1373
+
1374
+ $('#change-password-btn').attr({
1375
+ 'data-type': object,
1376
+ 'data-id': id
1377
+ });
1378
 
1379
  $('#post-list_wrapper').addClass('aam-hidden');
1380
  container.addClass('active');
1579
  break;
1580
 
1581
  default:
1582
+ aam.triggerHook('post-action', {
1583
+ container: container,
1584
+ action : action,
1585
+ data : data
1586
+ });
1587
  break;
1588
  }
1589
  });
1646
  });
1647
 
1648
  //load referenced post
1649
+ if ($('#load-post-object').val()) {
1650
+ loadAccessForm(
1651
+ $('#load-post-object-type').val(),
1652
+ $('#load-post-object').val()
1653
+ );
1654
  }
1655
+
1656
+ $('.change-password').each(function() {
1657
+ $(this).bind('click', function() {
1658
+ var password = $('#' + $(this).attr('data-preview-id')).text();
1659
+
1660
+ if (password !== 'none') {
1661
+ $('#post-password').val(password);
1662
+ } else {
1663
+ $('#post-password').val('');
1664
+ }
1665
+
1666
+ $('#change-password-btn').attr({
1667
+ 'data-ref': $(this).attr('data-ref'),
1668
+ 'data-preview-id': $(this).attr('data-preview-id')
1669
+ });
1670
+
1671
+ $('#password-modal').modal('show');
1672
+ });
1673
+ });
1674
+
1675
+ $('#change-password-btn').bind('click', function() {
1676
+ var password = $('#password-value').val();
1677
+ var response = save(
1678
+ $(this).attr('data-ref'),
1679
+ password,
1680
+ $(this).attr('data-type'),
1681
+ $(this).attr('data-id')
1682
+ );
1683
+
1684
+ if (response.status === 'success') {
1685
+ $('#' + $(this).attr('data-preview-id')).html(
1686
+ password ? password : '<i>none</i>'
1687
+ );
1688
+ }
1689
+ $('#password-modal').modal('hide');
1690
+ });
1691
  }
1692
 
1693
  aam.addHook('init', initialize);
1722
  param: param,
1723
  value: value
1724
  },
1725
+ success: function(response) {
1726
+ if (response.status === 'success') {
1727
+ $('#aam-redirect-overwrite').show();
1728
+ }
1729
+ },
1730
  error: function () {
1731
  aam.notification('danger', aam.__('Application error'));
1732
  }
1759
  save($(this).attr('name'), $(this).val());
1760
  });
1761
  });
1762
+
1763
+ $('#redirect-reset').bind('click', function () {
1764
+ $.ajax(aamLocal.ajaxurl, {
1765
+ type: 'POST',
1766
+ dataType: 'json',
1767
+ async: false,
1768
+ data: {
1769
+ action: 'aam',
1770
+ sub_action: 'Redirect.reset',
1771
+ _ajax_nonce: aamLocal.nonce,
1772
+ subject: aam.getSubject().type,
1773
+ subjectId: aam.getSubject().id
1774
+ },
1775
+ success: function (response) {
1776
+ if (response.status === 'success') {
1777
+ aam.fetchContent();
1778
+ }
1779
+ },
1780
+ error: function () {
1781
+ aam.notification('danger', aam.__('Application Error'));
1782
+ }
1783
+ });
1784
+ });
1785
+
1786
  }
1787
 
1788
  aam.addHook('init', initialize);
1817
  param: param,
1818
  value: value
1819
  },
1820
+ success: function(response) {
1821
+ if (response.status === 'success') {
1822
+ $('#aam-login-redirect-overwrite').show();
1823
+ }
1824
+ },
1825
  error: function () {
1826
  aam.notification('danger', aam.__('Application error'));
1827
  }
1854
  save($(this).attr('name'), $(this).val());
1855
  });
1856
  });
1857
+
1858
+ $('#login-redirect-reset').bind('click', function () {
1859
+ $.ajax(aamLocal.ajaxurl, {
1860
+ type: 'POST',
1861
+ dataType: 'json',
1862
+ async: false,
1863
+ data: {
1864
+ action: 'aam',
1865
+ sub_action: 'LoginRedirect.reset',
1866
+ _ajax_nonce: aamLocal.nonce,
1867
+ subject: aam.getSubject().type,
1868
+ subjectId: aam.getSubject().id
1869
+ },
1870
+ success: function (response) {
1871
+ if (response.status === 'success') {
1872
+ aam.fetchContent();
1873
+ }
1874
+ },
1875
+ error: function () {
1876
+ aam.notification('danger', aam.__('Application Error'));
1877
+ }
1878
+ });
1879
+ });
1880
  }
1881
 
1882
  aam.addHook('init', initialize);
1911
  param: param,
1912
  value: value
1913
  },
1914
+ success: function(response) {
1915
+ if (response.status === 'success') {
1916
+ $('#aam-teaser-overwrite').show();
1917
+ }
1918
+ },
1919
  error: function () {
1920
  aam.notification('danger', aam.__('Application error'));
1921
  }
1940
  save($(this).attr('name'), val);
1941
  });
1942
  });
1943
+
1944
+ $('#teaser-reset').bind('click', function () {
1945
+ $.ajax(aamLocal.ajaxurl, {
1946
+ type: 'POST',
1947
+ dataType: 'json',
1948
+ async: false,
1949
+ data: {
1950
+ action: 'aam',
1951
+ sub_action: 'Teaser.reset',
1952
+ _ajax_nonce: aamLocal.nonce,
1953
+ subject: aam.getSubject().type,
1954
+ subjectId: aam.getSubject().id
1955
+ },
1956
+ success: function (response) {
1957
+ if (response.status === 'success') {
1958
+ aam.fetchContent();
1959
+ }
1960
+ },
1961
+ error: function () {
1962
+ aam.notification('danger', aam.__('Application Error'));
1963
+ }
1964
+ });
1965
+ });
1966
  }
1967
 
1968
  aam.addHook('init', initialize);
2154
  * @returns {undefined}
2155
  */
2156
  function initialize() {
2157
+ $('input[type="checkbox"]', '#utilities-content').bind('change', function () {
 
 
 
2158
  save($(this).attr('name'), ($(this).prop('checked') ? 1 : 0));
2159
  });
2160
 
2188
 
2189
  })(jQuery);
2190
 
2191
+ /**
2192
+ * Security Interface
2193
+ *
2194
+ * @param {type} $
2195
+ *
2196
+ * @returns {undefined}
2197
+ */
2198
+ (function ($) {
2199
+
2200
+ /**
2201
+ *
2202
+ * @param {type} param
2203
+ * @param {type} value
2204
+ * @returns {undefined}
2205
+ */
2206
+ function save(param, value) {
2207
+ $.ajax(aamLocal.ajaxurl, {
2208
+ type: 'POST',
2209
+ dataType: 'json',
2210
+ async: false,
2211
+ data: {
2212
+ action: 'aam',
2213
+ sub_action: 'Security.save',
2214
+ _ajax_nonce: aamLocal.nonce,
2215
+ param: param,
2216
+ value: value
2217
+ },
2218
+ error: function () {
2219
+ aam.notification('danger', aam.__('Application Error'));
2220
+ }
2221
+ });
2222
+ }
2223
+
2224
+ /**
2225
+ *
2226
+ * @returns {undefined}
2227
+ */
2228
+ function initialize() {
2229
+ $('input[type="checkbox"]', '#security-content').bind('change', function () {
2230
+ save($(this).attr('name'), ($(this).prop('checked') ? 1 : 0));
2231
+ });
2232
+
2233
+ $('input[type="text"]', '#security-content').bind('change', function() {
2234
+ save($(this).attr('name'), $(this).val());
2235
+ });
2236
+ }
2237
+
2238
+ aam.addHook('init', initialize);
2239
+
2240
+ })(jQuery);
2241
+
2242
 
2243
  /**
2244
  * Main Panel Interface
2276
  */
2277
  aam.fetchContent = function () {
2278
  //referred object ID like post, page or any custom post type
2279
+ var object = window.location.search.match(/&oid\=([^&]*)/);
2280
+ var type = window.location.search.match(/&otype\=([^&]*)/);
2281
 
2282
  $.ajax(aamLocal.url.site, {
2283
  type: 'POST',
2288
  _ajax_nonce: aamLocal.nonce,
2289
  subject: this.getSubject().type,
2290
  subjectId: this.getSubject().id,
2291
+ oid: object ? object[1] : null,
2292
+ otype: type ? type[1] : null
2293
  },
2294
  beforeSend: function () {
2295
  var loader = $('<div/>', {'class': 'aam-loading'}).html(
media/js/vendor.js CHANGED
@@ -216,14 +216,4 @@ h.version="1.0.7";e.fn.dataTable.Responsive=h;e.fn.DataTable.Responsive=h;e(p).o
216
  o(jQuery,jQuery.fn.dataTable)})(window,document);
217
 
218
  //download.js v3.1, by dandavis; 2008-2015. [CCBY2] see http://danml.com/download.html for tests/usage
219
- (function(f,a){"function"==typeof define&&define.amd?define([],a):"object"==typeof exports?module.exports=a():f.download=a()})(this,function(){return function(f,a,b){function n(l){var a=l.split(/[:;,]/);l=a[1];var a=("base64"==a[2]?atob:decodeURIComponent)(a.pop()),c=a.length,b=0,d=new Uint8Array(c);for(b;b<c;++b)d[b]=a.charCodeAt(b);return new g([d],{type:l})}function k(a,b){if("download"in d)return d.href=a,d.setAttribute("download",m),d.innerHTML="downloading...",h.body.appendChild(d),setTimeout(function(){d.click(),h.body.removeChild(d),!0===b&&setTimeout(function(){e.URL.revokeObjectURL(d.href)},250)},66),!0;if("undefined"!=typeof safari)return a="data:"+a.replace(/^data:([\w\/\-\+]+)/,"application/octet-stream"),!window.open(a)&&confirm("Displaying New Document\n\nUse Save As... to download, then click back to return to this page.")&&(location.href=a),!0;var c=h.createElement("iframe");h.body.appendChild(c),b||(a="data:"+a.replace(/^data:([\w\/\-\+]+)/,"application/octet-stream")),c.src=a,setTimeout(function(){h.body.removeChild(c)},333)}var e=window;b=b||"application/octet-stream";var c=f,h=document,d=h.createElement("a");f=function(a){return String(a)};var g=e.Blob||e.MozBlob||e.WebKitBlob||f,g=g.call?g.bind(e):Blob,m=a||"download";"true"===String(this)&&(c=[c,b],b=c[0],c=c[1]);if(String(c).match(/^data\:[\w+\-]+\/[\w+\-]+[,;]/))return navigator.msSaveBlob?navigator.msSaveBlob(n(c),m):k(c);a=c instanceof g?c:new g([c],{type:b});if(navigator.msSaveBlob)return navigator.msSaveBlob(a,m);if(e.URL)k(e.URL.createObjectURL(a),!0);else{if("string"==typeof a||a.constructor===f)try{return k("data:"+b+";base64,"+e.btoa(a))}catch(p){return k("data:"+b+","+encodeURIComponent(a))}b=new FileReader,b.onload=function(a){k(this.result)},b.readAsDataURL(a)}return!0}});
220
-
221
- /*! ========================================================================
222
- * Bootstrap Toggle: bootstrap-toggle.js v2.2.0
223
- * http://www.bootstraptoggle.com
224
- * ========================================================================
225
- * Copyright 2014 Min Hur, The New York Times Company
226
- * Licensed under MIT
227
- * ======================================================================== */
228
- +function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.toggle"),f="object"==typeof b&&b;e||d.data("bs.toggle",e=new c(this,f)),"string"==typeof b&&e[b]&&e[b]()})}var c=function(b,c){this.$element=a(b),this.options=a.extend({},this.defaults(),c),this.render()};c.VERSION="2.2.0",c.DEFAULTS={on:"On",off:"Off",onstyle:"primary",offstyle:"default",size:"normal",style:"",width:null,height:null},c.prototype.defaults=function(){return{on:this.$element.attr("data-on")||c.DEFAULTS.on,off:this.$element.attr("data-off")||c.DEFAULTS.off,onstyle:this.$element.attr("data-onstyle")||c.DEFAULTS.onstyle,offstyle:this.$element.attr("data-offstyle")||c.DEFAULTS.offstyle,size:this.$element.attr("data-size")||c.DEFAULTS.size,style:this.$element.attr("data-style")||c.DEFAULTS.style,width:this.$element.attr("data-width")||c.DEFAULTS.width,height:this.$element.attr("data-height")||c.DEFAULTS.height}},c.prototype.render=function(){this._onstyle="btn-"+this.options.onstyle,this._offstyle="btn-"+this.options.offstyle;var b="large"===this.options.size?"btn-lg":"small"===this.options.size?"btn-sm":"mini"===this.options.size?"btn-xs":"",c=a('<label class="btn">').html(this.options.on).addClass(this._onstyle+" "+b),d=a('<label class="btn">').html(this.options.off).addClass(this._offstyle+" "+b+" active"),e=a('<span class="toggle-handle btn btn-default">').addClass(b),f=a('<div class="toggle-group">').append(c,d,e),g=a('<div class="toggle btn" data-toggle="toggle">').addClass(this.$element.prop("checked")?this._onstyle:this._offstyle+" off").addClass(b).addClass(this.options.style);this.$element.wrap(g),a.extend(this,{$toggle:this.$element.parent(),$toggleOn:c,$toggleOff:d,$toggleGroup:f}),this.$toggle.append(f);var h=this.options.width||Math.max(c.outerWidth(),d.outerWidth())+e.outerWidth()/2,i=this.options.height||Math.max(c.outerHeight(),d.outerHeight());c.addClass("toggle-on"),d.addClass("toggle-off"),this.$toggle.css({width:h,height:i}),this.options.height&&(c.css("line-height",c.height()+"px"),d.css("line-height",d.height()+"px")),this.update(!0),this.trigger(!0)},c.prototype.toggle=function(){this.$element.prop("checked")?this.off():this.on()},c.prototype.on=function(a){return this.$element.prop("disabled")?!1:(this.$toggle.removeClass(this._offstyle+" off").addClass(this._onstyle),this.$element.prop("checked",!0),void(a||this.trigger()))},c.prototype.off=function(a){return this.$element.prop("disabled")?!1:(this.$toggle.removeClass(this._onstyle).addClass(this._offstyle+" off"),this.$element.prop("checked",!1),void(a||this.trigger()))},c.prototype.enable=function(){this.$toggle.removeAttr("disabled"),this.$element.prop("disabled",!1)},c.prototype.disable=function(){this.$toggle.attr("disabled","disabled"),this.$element.prop("disabled",!0)},c.prototype.update=function(a){this.$element.prop("disabled")?this.disable():this.enable(),this.$element.prop("checked")?this.on(a):this.off(a)},c.prototype.trigger=function(b){this.$element.off("change.bs.toggle"),b||this.$element.change(),this.$element.on("change.bs.toggle",a.proxy(function(){this.update()},this))},c.prototype.destroy=function(){this.$element.off("change.bs.toggle"),this.$toggleGroup.remove(),this.$element.removeData("bs.toggle"),this.$element.unwrap()};var d=a.fn.bootstrapToggle;a.fn.bootstrapToggle=b,a.fn.bootstrapToggle.Constructor=c,a.fn.toggle.noConflict=function(){return a.fn.bootstrapToggle=d,this},a(function(){a("input[type=checkbox][data-toggle^=toggle]").bootstrapToggle()}),a(document).on("click.bs.toggle","div[data-toggle^=toggle]",function(b){var c=a(this).find("input[type=checkbox]");c.bootstrapToggle("toggle"),b.preventDefault()})}(jQuery);
229
- //# sourceMappingURL=bootstrap-toggle.min.js.map
216
  o(jQuery,jQuery.fn.dataTable)})(window,document);
217
 
218
  //download.js v3.1, by dandavis; 2008-2015. [CCBY2] see http://danml.com/download.html for tests/usage
219
+ (function(f,a){"function"==typeof define&&define.amd?define([],a):"object"==typeof exports?module.exports=a():f.download=a()})(this,function(){return function(f,a,b){function n(l){var a=l.split(/[:;,]/);l=a[1];var a=("base64"==a[2]?atob:decodeURIComponent)(a.pop()),c=a.length,b=0,d=new Uint8Array(c);for(b;b<c;++b)d[b]=a.charCodeAt(b);return new g([d],{type:l})}function k(a,b){if("download"in d)return d.href=a,d.setAttribute("download",m),d.innerHTML="downloading...",h.body.appendChild(d),setTimeout(function(){d.click(),h.body.removeChild(d),!0===b&&setTimeout(function(){e.URL.revokeObjectURL(d.href)},250)},66),!0;if("undefined"!=typeof safari)return a="data:"+a.replace(/^data:([\w\/\-\+]+)/,"application/octet-stream"),!window.open(a)&&confirm("Displaying New Document\n\nUse Save As... to download, then click back to return to this page.")&&(location.href=a),!0;var c=h.createElement("iframe");h.body.appendChild(c),b||(a="data:"+a.replace(/^data:([\w\/\-\+]+)/,"application/octet-stream")),c.src=a,setTimeout(function(){h.body.removeChild(c)},333)}var e=window;b=b||"application/octet-stream";var c=f,h=document,d=h.createElement("a");f=function(a){return String(a)};var g=e.Blob||e.MozBlob||e.WebKitBlob||f,g=g.call?g.bind(e):Blob,m=a||"download";"true"===String(this)&&(c=[c,b],b=c[0],c=c[1]);if(String(c).match(/^data\:[\w+\-]+\/[\w+\-]+[,;]/))return navigator.msSaveBlob?navigator.msSaveBlob(n(c),m):k(c);a=c instanceof g?c:new g([c],{type:b});if(navigator.msSaveBlob)return navigator.msSaveBlob(a,m);if(e.URL)k(e.URL.createObjectURL(a),!0);else{if("string"==typeof a||a.constructor===f)try{return k("data:"+b+";base64,"+e.btoa(a))}catch(p){return k("data:"+b+","+encodeURIComponent(a))}b=new FileReader,b.onload=function(a){k(this.result)},b.readAsDataURL(a)}return!0}});
 
 
 
 
 
 
 
 
 
 
readme.txt CHANGED
@@ -1,40 +1,66 @@
1
  === Advanced Access Manager ===
2
  Contributors: vasyltech
3
- Tags: access, role, user, visitor, capability, page, post, permission, security, redirect, access
4
  Requires at least: 3.8
5
- Tested up to: 4.7
6
- Stable tag: 3.9.5.1
7
 
8
- Set of tools to manage access to your website resources like posts, pages or menus for
9
- any user, role or visitors.
10
 
11
  == Description ==
12
 
13
- > Advanced Access Manager (aka AAM) is probably the only plugin that allows you to
14
- > manage access to a website in the backend and frontend for any user, role or
15
- > visitors.
16
- > AAM 4.0 development version is available for download [here](https://downloads.wordpress.org/plugin/advanced-access-manager.zip).
17
 
18
- AAM is well documented so even inexperienced WordPress user can easily understand
19
- how to use it in the most efficient way.
20
 
21
- Please note! Some of the features are limited with the basic version and if
22
- necessary, consider to get recommended free or premium extension.
 
23
 
24
- Below is the list of some of the most used features:
 
25
 
26
- * Create, edit or delete Roles;
27
- * Create, edit or delete Capabilities;
28
- * Manage access to the Backend Menu;
29
- * Manage access to Widgets & Metaboxes;
30
- * Manage access to Posts, Pages, Custom Post Types or Categories;
31
- * Limit access the a post's content with Teaser Message;
32
- * Manage Access Denied Redirect for any restricted website resource;
33
- * Manage Login Redirect after user authenticated successfully;
34
- * And many more...
35
 
36
- > AAM is very flexible and customizable plugin that is used by a lot of developers
37
- > around the world to create secure and powerful WordPress solutions.
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
38
 
39
  `//Get AAM_Core_Subject. This object allows you to work with access control
40
  //for current logged-in user or visitor
@@ -48,8 +74,7 @@ $user->getObject('post', 10)->has('frontend.read');
48
  //If true then access denied to this menu
49
  $user->getObject('menu')->has('upload.php');`
50
 
51
- Check our [website page](https://vasyltech.com/advanced-access-manager) to find
52
- out more about the Advanced Access Manager.
53
 
54
  == Installation ==
55
 
@@ -74,10 +99,11 @@ out more about the Advanced Access Manager.
74
  * Moved AAM Login Redirect extension to the basic AAM package
75
  * Moved AAM Content Teaser extension to the basic AAM package
76
  * Set single password for any post or posts in any category or post type
77
- * Added two protection mechanism from login brute force attackes
78
  * Added double authentication mechanism
79
  * Few minor core bug fixings
80
  * Improved multisite support
 
81
 
82
  = 3.9.5.1 =
83
  * Fixed bug with login redirect
1
  === Advanced Access Manager ===
2
  Contributors: vasyltech
3
+ Tags: access, role, user, visitor, capability, page, post, permission, security, login redirect, brute force attack, double authentication, widget, membership
4
  Requires at least: 3.8
5
+ Tested up to: 4.7.2
6
+ Stable tag: 4.0
7
 
8
+ Manage your website access and security for any user, role or visitors.
 
9
 
10
  == Description ==
11
 
12
+ > Advanced Access Manager (aka AAM) is the WordPress plugin with all necessary
13
+ > set of tools to manage access to your website frontend and backend for any
14
+ > user, role or visitors.
 
15
 
16
+ https://www.youtube.com/watch?v=yiOhjaacNJc
 
17
 
18
+ Please note! Some features are limited or not included in the basic plugin installation.
19
+ Upon activation refer to the Extensions tab to learn more about free and
20
+ premium extensions that are available for download.
21
 
22
+ = Manage Backend Menu =
23
+ Manage access to the backend menu for any user or group or users (roles).
24
 
25
+ = Manage Metaboxes and Widgets =
26
+ Filter list of metaboxes and widgets on both frontend and backend for any user,
27
+ group of users or visitors.
 
 
 
 
 
 
28
 
29
+ = Manage Capabilities =
30
+ Create, edit or delete capabilities for any role or even user.
31
+
32
+ = Manage Posts & Pages =
33
+ Manage access to any post, page or custom post type. With premium AAM Plus Package extension
34
+ also manage access to categories, custom hierarchical taxonomies or setup the default
35
+ access to all posts and categories. Refer to [How to manage WordPress post and category access](https://aamplugin.com/help/how-to-manage-wordpress-post-and-category-access)
36
+ to learn more about this feature.
37
+
38
+ = Manage Redirects =
39
+ Define custom access denied or login redirects for any user or group of users. Redirect
40
+ user to any existing page, URL or specify your own PHP callback function to handle it.
41
+
42
+ = Content Teaser =
43
+ Create your own content teaser for any limited post, page or custom post type.
44
+
45
+ = Content Filter =
46
+ Filter or replace blocks of your content with [aam] shortcodes. For more information about this
47
+ feature refer to the [How to filter WordPress post content](https://aamplugin.com/help/how-to-filter-wordpress-post-content) article
48
+
49
+ = Payments API =
50
+ Start selling access to your website content or even user levels with premium AAM Payment extension. For
51
+ more information refer to the [AAM Payment extension](https://aamplugin.com/help/aam-payment-extension)
52
+
53
+ = Security =
54
+ Protect your website from brute force and dictionary attacks or activate double authentication
55
+ when user credentials are used from unexpected location.
56
+
57
+ = Manage Roles =
58
+ Create, edit, clone, delete any role. With AAM Role Hierarchy extension define complex
59
+ role hierarchy tree.
60
+
61
+ = Single point API =
62
+ Easy to use programmatic interface that is used to develop your own custom
63
+ functionality.
64
 
65
  `//Get AAM_Core_Subject. This object allows you to work with access control
66
  //for current logged-in user or visitor
74
  //If true then access denied to this menu
75
  $user->getObject('menu')->has('upload.php');`
76
 
77
+ Check our [help page](https://aamplugin.com/help) to find out more about AAM.
 
78
 
79
  == Installation ==
80
 
99
  * Moved AAM Login Redirect extension to the basic AAM package
100
  * Moved AAM Content Teaser extension to the basic AAM package
101
  * Set single password for any post or posts in any category or post type
102
+ * Added two protection mechanism from login brute force attacks
103
  * Added double authentication mechanism
104
  * Few minor core bug fixings
105
  * Improved multisite support
106
+ * Improved caching mechanism
107
 
108
  = 3.9.5.1 =
109
  * Fixed bug with login redirect