Advanced Access Manager - Version 3.9.5

Version Description

  • General bug fixing and improvements
  • Added ability to setup access settings to all Users, Roles and Visitors
  • Added Login Redirect feature
Download this release

Release Info

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

Code changes from version 3.9.3 to 3.9.5

Files changed (44) hide show
  1. Application/Backend/Feature/Contact.php +2 -1
  2. Application/Backend/Feature/Extension.php +4 -4
  3. Application/Backend/Feature/LoginRedirect.php +109 -0
  4. Application/Backend/Feature/Menu.php +8 -3
  5. Application/Backend/Feature/Metabox.php +2 -1
  6. Application/Backend/Feature/Post.php +2 -1
  7. Application/Backend/Feature/Redirect.php +7 -9
  8. Application/Backend/Feature/Teaser.php +6 -8
  9. Application/Backend/Feature/Utility.php +1 -3
  10. Application/Backend/Manager.php +17 -4
  11. Application/Backend/View.php +1 -0
  12. Application/Backend/View/ProductList.php +14 -3
  13. Application/Backend/phtml/index.phtml +16 -4
  14. Application/Backend/phtml/object/login-redirect.phtml +65 -0
  15. Application/Backend/phtml/object/menu.phtml +2 -2
  16. Application/Backend/phtml/object/metabox.phtml +1 -1
  17. Application/Backend/phtml/object/post.phtml +88 -86
  18. Application/Backend/phtml/object/redirect.phtml +8 -8
  19. Application/Backend/phtml/object/teaser.phtml +3 -3
  20. Application/Backend/phtml/partial/login-redirect.phtml +5 -0
  21. Application/Backend/phtml/partial/redirect.phtml +1 -1
  22. Application/Backend/phtml/partial/teaser.phtml +1 -2
  23. Application/Core/API.php +8 -8
  24. Application/Core/Object/Post.php +4 -2
  25. Application/Core/Subject.php +6 -16
  26. Application/Core/Subject/Default.php +67 -0
  27. Application/Core/Subject/Role.php +5 -8
  28. Application/Core/Subject/User.php +0 -7
  29. Application/Core/Subject/Visitor.php +0 -19
  30. Application/Frontend/Manager.php +25 -3
  31. aam.php +3 -3
  32. media/css/aam.css +73 -70
  33. media/css/datatables.min.css +3 -3
  34. media/font/fontello.eot +0 -0
  35. media/font/fontello.svg +63 -61
  36. media/font/fontello.ttf +0 -0
  37. media/font/fontello.woff +0 -0
  38. media/font/fontello.woff2 +0 -0
  39. media/js/aam-ui.js +97 -13
  40. media/js/bootstrap.min.js +0 -7
  41. media/js/download.min.js +0 -2
  42. media/js/toggle.min.js +0 -9
  43. media/js/{datatables.min.js → vendor.js} +19 -0
  44. readme.txt +21 -14
Application/Backend/Feature/Contact.php CHANGED
@@ -47,7 +47,8 @@ class AAM_Backend_Feature_Contact extends AAM_Backend_Feature_Abstract {
47
  'subjects' => array(
48
  'AAM_Core_Subject_Role',
49
  'AAM_Core_Subject_User',
50
- 'AAM_Core_Subject_Visitor'
 
51
  ),
52
  'view' => __CLASS__
53
  ));
47
  'subjects' => array(
48
  'AAM_Core_Subject_Role',
49
  'AAM_Core_Subject_User',
50
+ 'AAM_Core_Subject_Visitor',
51
+ 'AAM_Core_Subject_Default'
52
  ),
53
  'view' => __CLASS__
54
  ));
Application/Backend/Feature/Extension.php CHANGED
@@ -46,7 +46,9 @@ class AAM_Backend_Feature_Extension extends AAM_Backend_Feature_Abstract {
46
  $filtered = array();
47
  foreach($products as $product) {
48
  if ($product['type'] == $filter) {
49
- $product['license'] = $this->retrieveLicense($product['id']);
 
 
50
  $filtered[] = $product;
51
  }
52
  }
@@ -206,9 +208,7 @@ class AAM_Backend_Feature_Extension extends AAM_Backend_Feature_Abstract {
206
  'capability' => $cap,
207
  'notification' => self::getNotification(),
208
  'subjects' => array(
209
- 'AAM_Core_Subject_Role',
210
- 'AAM_Core_Subject_User',
211
- 'AAM_Core_Subject_Visitor'
212
  ),
213
  'view' => __CLASS__
214
  ));
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
  }
208
  'capability' => $cap,
209
  'notification' => self::getNotification(),
210
  'subjects' => array(
211
+ 'AAM_Core_Subject_Role'
 
 
212
  ),
213
  'view' => __CLASS__
214
  ));
Application/Backend/Feature/LoginRedirect.php ADDED
@@ -0,0 +1,109 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
12
+ *
13
+ * @package AAM
14
+ * @author Vasyl Martyniuk <vasyl@vasyltech.com>
15
+ */
16
+ class AAM_Backend_Feature_LoginRedirect extends AAM_Backend_Feature_Abstract {
17
+
18
+ /**
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
+ }
34
+
35
+ /**
36
+ *
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
+ }
44
+
45
+ /**
46
+ *
47
+ * @return type
48
+ */
49
+ public function isDefault() {
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
+ /**
72
+ * @inheritdoc
73
+ */
74
+ public static function getAccessOption() {
75
+ return 'feature.login-redirect.capability';
76
+ }
77
+
78
+ /**
79
+ * @inheritdoc
80
+ */
81
+ public static function getTemplate() {
82
+ return 'object/login-redirect.phtml';
83
+ }
84
+
85
+ /**
86
+ * Register Contact/Hire feature
87
+ *
88
+ * @return void
89
+ *
90
+ * @access public
91
+ */
92
+ public static function register() {
93
+ $cap = AAM_Core_Config::get(self::getAccessOption(), 'administrator');
94
+
95
+ AAM_Backend_Feature::registerFeature((object) array(
96
+ 'uid' => 'login_redirect',
97
+ 'position' => 40,
98
+ 'title' => __('Login Redirect', AAM_KEY),
99
+ 'capability' => $cap,
100
+ 'subjects' => array(
101
+ 'AAM_Core_Subject_Role',
102
+ 'AAM_Core_Subject_User',
103
+ 'AAM_Core_Subject_Default'
104
+ ),
105
+ 'view' => __CLASS__
106
+ ));
107
+ }
108
+
109
+ }
Application/Backend/Feature/Menu.php CHANGED
@@ -33,7 +33,7 @@ class AAM_Backend_Feature_Menu extends AAM_Backend_Feature_Abstract {
33
  /**
34
  * Get subject's menu
35
  *
36
- * Based on the list of capabilitis that current subject has, prepare
37
  * complete menu list and return it.
38
  *
39
  * @return array
@@ -104,7 +104,8 @@ class AAM_Backend_Feature_Menu extends AAM_Backend_Feature_Abstract {
104
 
105
  if (isset($submenu[$menu])) {
106
  foreach ($submenu[$menu] as $item) {
107
- if ($subject->hasCapability($item[1])) {
 
108
  $response[] = array(
109
  'id' => $item[2],
110
  'name' => $this->filterMenuName($item[0]),
@@ -188,7 +189,11 @@ class AAM_Backend_Feature_Menu extends AAM_Backend_Feature_Abstract {
188
  'position' => 5,
189
  'title' => __('Backend Menu', AAM_KEY),
190
  'capability' => $cap,
191
- 'subjects' => array('AAM_Core_Subject_Role', 'AAM_Core_Subject_User'),
 
 
 
 
192
  'view' => __CLASS__
193
  ));
194
  }
33
  /**
34
  * Get subject's menu
35
  *
36
+ * Based on the list of capabilities that current subject has, prepare
37
  * complete menu list and return it.
38
  *
39
  * @return array
104
 
105
  if (isset($submenu[$menu])) {
106
  foreach ($submenu[$menu] as $item) {
107
+ if ($subject->hasCapability($item[1])
108
+ || is_a($subject, 'AAM_Core_Subject_Default')) {
109
  $response[] = array(
110
  'id' => $item[2],
111
  'name' => $this->filterMenuName($item[0]),
189
  'position' => 5,
190
  'title' => __('Backend Menu', AAM_KEY),
191
  'capability' => $cap,
192
+ 'subjects' => array(
193
+ 'AAM_Core_Subject_Role',
194
+ 'AAM_Core_Subject_User',
195
+ 'AAM_Core_Subject_Default'
196
+ ),
197
  'view' => __CLASS__
198
  ));
199
  }
Application/Backend/Feature/Metabox.php CHANGED
@@ -241,7 +241,8 @@ class AAM_Backend_Feature_Metabox extends AAM_Backend_Feature_Abstract {
241
  'subjects' => array(
242
  'AAM_Core_Subject_Role',
243
  'AAM_Core_Subject_User',
244
- 'AAM_Core_Subject_Visitor'
 
245
  ),
246
  'view' => __CLASS__
247
  ));
241
  'subjects' => array(
242
  'AAM_Core_Subject_Role',
243
  'AAM_Core_Subject_User',
244
+ 'AAM_Core_Subject_Visitor',
245
+ 'AAM_Core_Subject_Default'
246
  ),
247
  'view' => __CLASS__
248
  ));
Application/Backend/Feature/Post.php CHANGED
@@ -381,7 +381,8 @@ class AAM_Backend_Feature_Post extends AAM_Backend_Feature_Abstract {
381
  'subjects' => array(
382
  'AAM_Core_Subject_Role',
383
  'AAM_Core_Subject_User',
384
- 'AAM_Core_Subject_Visitor'
 
385
  ),
386
  'view' => __CLASS__
387
  ));
381
  'subjects' => array(
382
  'AAM_Core_Subject_Role',
383
  'AAM_Core_Subject_User',
384
+ 'AAM_Core_Subject_Visitor',
385
+ 'AAM_Core_Subject_Default'
386
  ),
387
  'view' => __CLASS__
388
  ));
Application/Backend/Feature/Redirect.php CHANGED
@@ -23,7 +23,7 @@ class AAM_Backend_Feature_Redirect extends AAM_Backend_Feature_Abstract {
23
  $value = AAM_Core_Request::post('value');
24
  $subject = AAM_Backend_View::getSubject();
25
 
26
- if ($this->isAdministrator()) {
27
  AAM_Core_Config::set($param, $value);
28
  } else {
29
  do_action('aam-action-redirect-save', $subject, $param, $value);
@@ -46,11 +46,8 @@ class AAM_Backend_Feature_Redirect extends AAM_Backend_Feature_Abstract {
46
  *
47
  * @return type
48
  */
49
- public function isAdministrator() {
50
- $subject = AAM_Backend_View::getSubject();
51
- $adminId = AAM_Core_Config::get('core.admin.id', 'administrator');
52
-
53
- return ($subject->getUID() == 'role' && $subject->getId() == $adminId);
54
  }
55
 
56
  /**
@@ -61,7 +58,7 @@ class AAM_Backend_Feature_Redirect extends AAM_Backend_Feature_Abstract {
61
  public function getOption($option, $default = null) {
62
  $value = AAM_Core_Config::get($option, $default);
63
 
64
- if (!$this->isAdministrator()) {
65
  $subject = AAM_Backend_View::getSubject();
66
  $value = apply_filters(
67
  'aam-filter-redirect-option', $value, $option, $subject
@@ -98,12 +95,13 @@ class AAM_Backend_Feature_Redirect extends AAM_Backend_Feature_Abstract {
98
  AAM_Backend_Feature::registerFeature((object) array(
99
  'uid' => 'redirect',
100
  'position' => 30,
101
- 'title' => __('Redirect', AAM_KEY),
102
  'capability' => $cap,
103
  'subjects' => array(
104
  'AAM_Core_Subject_Role',
105
  'AAM_Core_Subject_User',
106
- 'AAM_Core_Subject_Visitor'
 
107
  ),
108
  'view' => __CLASS__
109
  ));
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);
46
  *
47
  * @return type
48
  */
49
+ public function isDefault() {
50
+ return AAM_Backend_View::getSubject()->getUID() == 'default';
 
 
 
51
  }
52
 
53
  /**
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
95
  AAM_Backend_Feature::registerFeature((object) array(
96
  'uid' => 'redirect',
97
  'position' => 30,
98
+ 'title' => __('Access Denied Redirect', AAM_KEY),
99
  'capability' => $cap,
100
  'subjects' => array(
101
  'AAM_Core_Subject_Role',
102
  'AAM_Core_Subject_User',
103
+ 'AAM_Core_Subject_Visitor',
104
+ 'AAM_Core_Subject_Default'
105
  ),
106
  'view' => __CLASS__
107
  ));
Application/Backend/Feature/Teaser.php CHANGED
@@ -23,7 +23,7 @@ class AAM_Backend_Feature_Teaser extends AAM_Backend_Feature_Abstract {
23
  $value = AAM_Core_Request::post('value');
24
  $subject = AAM_Backend_View::getSubject();
25
 
26
- if ($this->isAdministrator()) {
27
  AAM_Core_Config::set($param, $value);
28
  } else {
29
  do_action('aam-action-teaser-save', $subject, $param, $value);
@@ -46,11 +46,8 @@ class AAM_Backend_Feature_Teaser extends AAM_Backend_Feature_Abstract {
46
  *
47
  * @return type
48
  */
49
- public function isAdministrator() {
50
- $subject = AAM_Backend_View::getSubject();
51
- $adminId = AAM_Core_Config::get('core.admin.id', 'administrator');
52
-
53
- return ($subject->getUID() == 'role' && $subject->getId() == $adminId);
54
  }
55
 
56
  /**
@@ -61,7 +58,7 @@ class AAM_Backend_Feature_Teaser extends AAM_Backend_Feature_Abstract {
61
  public function getOption($option, $default = null) {
62
  $value = AAM_Core_Config::get($option, $default);
63
 
64
- if (!$this->isAdministrator()) {
65
  $subject = AAM_Backend_View::getSubject();
66
  $value = apply_filters(
67
  'aam-filter-teaser-option', $value, $option, $subject
@@ -103,7 +100,8 @@ class AAM_Backend_Feature_Teaser extends AAM_Backend_Feature_Abstract {
103
  'subjects' => array(
104
  'AAM_Core_Subject_Role',
105
  'AAM_Core_Subject_User',
106
- 'AAM_Core_Subject_Visitor'
 
107
  ),
108
  'view' => __CLASS__
109
  ));
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);
46
  *
47
  * @return type
48
  */
49
+ public function isDefault() {
50
+ return (AAM_Backend_View::getSubject()->getUID() == 'default');
 
 
 
51
  }
52
 
53
  /**
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
100
  'subjects' => array(
101
  'AAM_Core_Subject_Role',
102
  'AAM_Core_Subject_User',
103
+ 'AAM_Core_Subject_Visitor',
104
+ 'AAM_Core_Subject_Default'
105
  ),
106
  'view' => __CLASS__
107
  ));
Application/Backend/Feature/Utility.php CHANGED
@@ -91,9 +91,7 @@ class AAM_Backend_Feature_Utility extends AAM_Backend_Feature_Abstract {
91
  'title' => __('Utilities', AAM_KEY),
92
  'capability' => $cap,
93
  'subjects' => array(
94
- 'AAM_Core_Subject_Role',
95
- 'AAM_Core_Subject_User',
96
- 'AAM_Core_Subject_Visitor'
97
  ),
98
  'view' => __CLASS__
99
  ));
91
  'title' => __('Utilities', AAM_KEY),
92
  'capability' => $cap,
93
  'subjects' => array(
94
+ 'AAM_Core_Subject_Role'
 
 
95
  ),
96
  'view' => __CLASS__
97
  ));
Application/Backend/Manager.php CHANGED
@@ -32,6 +32,9 @@ class AAM_Backend_Manager {
32
  * @access protected
33
  */
34
  protected function __construct() {
 
 
 
35
  //check if user switch is required
36
  $this->checkUserSwitch();
37
 
@@ -87,6 +90,19 @@ class AAM_Backend_Manager {
87
  AAM_Backend_View_CodePinch::bootstrap();
88
  }
89
 
 
 
 
 
 
 
 
 
 
 
 
 
 
90
  /**
91
  *
92
  */
@@ -307,10 +323,7 @@ class AAM_Backend_Manager {
307
  */
308
  public function printJavascript() {
309
  if (AAM::isAAM()) {
310
- wp_enqueue_script('aam-bt', AAM_MEDIA . '/js/bootstrap.min.js');
311
- wp_enqueue_script('aam-dt', AAM_MEDIA . '/js/datatables.min.js');
312
- wp_enqueue_script('aam-dwn', AAM_MEDIA . '/js/download.min.js');
313
- wp_enqueue_script('aam-utl-tg', AAM_MEDIA . '/js/toggle.min.js');
314
  wp_enqueue_script('aam-main', AAM_MEDIA . '/js/aam.js');
315
 
316
  //add plugin localization
32
  * @access protected
33
  */
34
  protected function __construct() {
35
+ //check if user is allowed to see backend
36
+ $this->checkUserAccess();
37
+
38
  //check if user switch is required
39
  $this->checkUserSwitch();
40
 
90
  AAM_Backend_View_CodePinch::bootstrap();
91
  }
92
 
93
+ /**
94
+ *
95
+ */
96
+ protected function checkUserAccess() {
97
+ $all = AAM_Core_API::getAllCapabilities();
98
+
99
+ if (isset($all['access_dashboard']) && get_current_user_id()) {
100
+ if (empty(AAM::getUser()->allcaps['access_dashboard'])) {
101
+ AAM_Core_API::reject('backend');
102
+ }
103
+ }
104
+ }
105
+
106
  /**
107
  *
108
  */
323
  */
324
  public function printJavascript() {
325
  if (AAM::isAAM()) {
326
+ wp_enqueue_script('aam-vendor', AAM_MEDIA . '/js/vendor.js');
 
 
 
327
  wp_enqueue_script('aam-main', AAM_MEDIA . '/js/aam.js');
328
 
329
  //add plugin localization
Application/Backend/View.php CHANGED
@@ -57,6 +57,7 @@ class AAM_Backend_View {
57
  AAM_Backend_Feature_Post::register();
58
  AAM_Backend_Feature_Redirect::register();
59
  AAM_Backend_Feature_Teaser::register();
 
60
  AAM_Backend_Feature_Extension::register();
61
  AAM_Backend_Feature_Utility::register();
62
  AAM_Backend_Feature_Contact::register();
57
  AAM_Backend_Feature_Post::register();
58
  AAM_Backend_Feature_Redirect::register();
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();
Application/Backend/View/ProductList.php CHANGED
@@ -22,9 +22,9 @@ return array(
22
  'title' => 'AAM Redirect',
23
  'id' => 'AAM Redirect',
24
  'type' => 'commercial',
25
- 'price' => '$20 <small>USD</small>',
26
  'new' => true,
27
- 'description' => 'Define custom 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')
@@ -35,11 +35,22 @@ return array(
35
  'type' => 'commercial',
36
  'price' => '$10 <small>USD</small>',
37
  'new' => true,
38
- 'description' => 'Define custom teaser message for each 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 Role Hierarchy',
45
  'id' => 'AAM Role Hierarchy',
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')
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',
Application/Backend/phtml/index.phtml CHANGED
@@ -84,6 +84,7 @@
84
  <li role="presentation" class="active"><a href="#roles" aria-controls="roles" role="tab" data-toggle="tab"><i class="icon-users"></i> <?php echo __('Roles', AAM_KEY); ?></a></li>
85
  <li role="presentation"><a href="#users" aria-controls="users" role="tab" data-toggle="tab"><i class="icon-user"></i> <?php echo __('Users', AAM_KEY); ?></a></li>
86
  <li role="presentation"><a href="#visitor" aria-controls="visitor" role="tab" data-toggle="tab"><i class="icon-user-secret"></i> <?php echo __('Visitor', AAM_KEY); ?></a></li>
 
87
  </ul>
88
  <div class="tab-content">
89
  <div role="tabpanel" class="tab-pane active" id="roles">
@@ -152,7 +153,7 @@
152
  <h4 class="modal-title"><?php echo __('Delete Role', AAM_KEY); ?></h4>
153
  </div>
154
  <div class="modal-body">
155
- <p class="text-center aam-confirm-message" data-message="<?php echo __('Are you sure that you want to delete %s role?', AAM_KEY); ?>"></p>
156
  </div>
157
  <div class="modal-footer">
158
  <button type="button" class="btn btn-danger" id="delete-role-btn"><?php echo __('Delete', AAM_KEY); ?></button>
@@ -182,6 +183,12 @@
182
  <button class="btn btn-primary btn-block" id="manage-visitor"><i class="icon-cog"></i> <?php echo __('Manage Visitors', AAM_KEY); ?></button>
183
  </div>
184
  </div>
 
 
 
 
 
 
185
  </div>
186
  </div>
187
  <div class="aam-help-context">
@@ -203,6 +210,11 @@
203
  <strong><i class="icon-user-secret"></i> <?php echo __('Visitor', AAM_KEY); ?></strong><br/>
204
  <?php echo __('Visitor can be considered any user that is not authenticated to your website.', AAM_KEY); ?>
205
  </p>
 
 
 
 
 
206
  </div>
207
  </div>
208
  </div>
@@ -214,9 +226,9 @@
214
  <div class="postbox">
215
  <div class="inside text-center">
216
  <div class="inner-sm">
217
- <p class="text-muted text-larger"><?php echo __('Fix all website errors with WP Error Fix', AAM_KEY); ?></p>
218
- <a href="<?php echo AAM_Backend_View_CodePinch::getUrl(AAM_CODEPINCH_AFFILIATE_CODE); ?>" class="btn btn-lg btn-codepinch" target="_blank">
219
- <img src="http://codepinch.io/frontend/img/codepinch-icon.svg" /> Install Plugin
220
  </a>
221
  </div>
222
  </div>
84
  <li role="presentation" class="active"><a href="#roles" aria-controls="roles" role="tab" data-toggle="tab"><i class="icon-users"></i> <?php echo __('Roles', AAM_KEY); ?></a></li>
85
  <li role="presentation"><a href="#users" aria-controls="users" role="tab" data-toggle="tab"><i class="icon-user"></i> <?php echo __('Users', AAM_KEY); ?></a></li>
86
  <li role="presentation"><a href="#visitor" aria-controls="visitor" role="tab" data-toggle="tab"><i class="icon-user-secret"></i> <?php echo __('Visitor', AAM_KEY); ?></a></li>
87
+ <li role="presentation"><a href="#default" aria-controls="default" role="tab" data-toggle="tab" class="text-danger"><i class="icon-asterisk"></i> <?php echo __('Default', AAM_KEY); ?></a></li>
88
  </ul>
89
  <div class="tab-content">
90
  <div role="tabpanel" class="tab-pane active" id="roles">
153
  <h4 class="modal-title"><?php echo __('Delete Role', AAM_KEY); ?></h4>
154
  </div>
155
  <div class="modal-body">
156
+ <p class="text-center aam-confirm-message alert alert-danger" data-message="<?php echo __('Are you sure that you want to delete the %s role?', AAM_KEY); ?>"></p>
157
  </div>
158
  <div class="modal-footer">
159
  <button type="button" class="btn btn-danger" id="delete-role-btn"><?php echo __('Delete', AAM_KEY); ?></button>
183
  <button class="btn btn-primary btn-block" id="manage-visitor"><i class="icon-cog"></i> <?php echo __('Manage Visitors', AAM_KEY); ?></button>
184
  </div>
185
  </div>
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>
193
  </div>
194
  <div class="aam-help-context">
210
  <strong><i class="icon-user-secret"></i> <?php echo __('Visitor', AAM_KEY); ?></strong><br/>
211
  <?php echo __('Visitor can be considered any user that is not authenticated to your website.', AAM_KEY); ?>
212
  </p>
213
+
214
+ <p class="text-justify">
215
+ <strong><i class="icon-asterisk"></i> <?php echo __('Default', AAM_KEY); ?></strong><br/>
216
+ <?php echo __('Manage default access settings to your website resources for all users, roles and visitors.', AAM_KEY); ?>
217
+ </p>
218
  </div>
219
  </div>
220
  </div>
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>
Application/Backend/phtml/object/login-redirect.phtml ADDED
@@ -0,0 +1,65 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php if (defined('AAM_KEY')) { ?>
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 }
Application/Backend/phtml/object/menu.phtml CHANGED
@@ -3,7 +3,7 @@
3
  <div class="row">
4
  <div class="col-xs-12">
5
  <p class="aam-info">
6
- <?php echo sprintf(__('For more information about Backend Menu feature check %sManage Access To Backend Menu%s article.', AAM_KEY),'<a href="https://vasyltech.com/blog/manage-access-to-wordpress-backend-menu" target="_blank">', '</a>'); ?>
7
  </p>
8
  </div>
9
  </div>
@@ -12,7 +12,7 @@
12
  <div class="row">
13
  <div class="col-xs-12">
14
  <div class="aam-overwrite">
15
- <span><i class="icon-attention-circled"></i> <?php echo __('Settings are overwritten', AAM_KEY); ?></span>
16
  <span><a href="#" id="menu-reset" class="btn btn-xs btn-danger"><?php echo __('Reset To Default', AAM_KEY); ?></a>
17
  </div>
18
  </div>
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>
12
  <div class="row">
13
  <div class="col-xs-12">
14
  <div class="aam-overwrite">
15
+ <span><i class="icon-check"></i> <?php echo __('Settings are customized', AAM_KEY); ?></span>
16
  <span><a href="#" id="menu-reset" class="btn btn-xs btn-danger"><?php echo __('Reset To Default', AAM_KEY); ?></a>
17
  </div>
18
  </div>
Application/Backend/phtml/object/metabox.phtml CHANGED
@@ -9,7 +9,7 @@
9
  <div class="row">
10
  <div class="col-xs-12">
11
  <div class="aam-overwrite">
12
- <span><i class="icon-attention-circled"></i> <?php echo __('Settings are overwritten', AAM_KEY); ?></span>
13
  <span><a href="#" id="metabox-reset" class="btn btn-xs btn-danger"><?php echo __('Reset To Default', AAM_KEY); ?></a>
14
  </div>
15
  </div>
9
  <div class="row">
10
  <div class="col-xs-12">
11
  <div class="aam-overwrite">
12
+ <span><i class="icon-check"></i> <?php echo __('Settings are customized', AAM_KEY); ?></span>
13
  <span><a href="#" id="metabox-reset" class="btn btn-xs btn-danger"><?php echo __('Reset To Default', AAM_KEY); ?></a>
14
  </div>
15
  </div>
Application/Backend/phtml/object/post.phtml CHANGED
@@ -4,7 +4,7 @@
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. 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>
@@ -18,104 +18,106 @@
18
  </div>
19
  <?php } ?>
20
 
21
- <?php $current = $this->getCurrentPost(); ?>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
22
 
23
- <div class="aam-post-breadcrumb">
24
- <a href="#" data-level="root"><i class="icon-home"></i> <?php echo __('Root', AAM_KEY); ?></a>
25
  <?php if (!is_null($current)) { ?>
26
- <span>
27
- <i class="icon-angle-double-right"></i>
28
- <?php echo $current->post_title; ?>
29
- </span>
30
  <?php } ?>
31
- </div>
32
 
33
- <div class="aam-overwrite hidden" id="post-overwritten">
34
- <span><i class="icon-attention-circled"></i> <?php echo __('Settings are overwritten', AAM_KEY); ?></span>
35
- <span><a href="#" id="post-reset" class="btn btn-xs btn-danger"><?php echo __('Reset To Default', AAM_KEY); ?></a></span>
36
- </div>
 
 
 
 
 
 
 
 
 
37
 
38
- <?php if (!is_null($current)) { ?>
39
- <input type="hidden" id="load-post" value="<?php echo $current->ID; ?>" />
40
- <?php } ?>
 
41
 
42
- <div class="aam-container">
43
- <table id="post-list" class="table table-striped table-bordered">
44
- <thead>
45
- <tr>
46
- <th>ID</th>
47
- <th>Link</th>
48
- <th width="5%">&nbsp;</th>
49
- <th width="75%"><?php echo __('Title', AAM_KEY); ?></th>
50
- <th><?php echo __('Actions', AAM_KEY); ?></th>
51
- </tr>
52
- </thead>
53
- <tbody></tbody>
54
- </table>
55
 
56
- <div class="aam-slide-form" data-type="type">
57
- <?php echo apply_filters('aam-post-type-ui-filter', AAM_Backend_View::getInstance()->loadPartial('post-type.phtml')); ?>
58
- <a href="#" class="btn btn-xs btn-primary post-back">&Lt; <?php echo __('Go Back', AAM_KEY); ?></a>
59
- </div>
 
 
 
 
60
 
61
- <div class="aam-slide-form" data-type="term">
62
- <?php echo apply_filters('aam-term-type-ui-filter', AAM_Backend_View::getInstance()->loadPartial('term-type.phtml')); ?>
63
- <a href="#" class="btn btn-xs btn-primary post-back">&Lt; <?php echo __('Go Back', AAM_KEY); ?></a>
64
- </div>
 
 
 
 
 
 
 
 
 
65
 
66
- <div class="aam-slide-form" data-type="post">
67
- <table class="table table-striped table-bordered">
68
- <tbody>
69
- <tr>
70
- <td colspan="2" class="aam-table-group">
71
- <i class="icon-doc-text-inv"></i> <strong><?php echo __('Frontend', AAM_KEY); ?></strong>
72
- </td>
73
- </tr>
74
 
75
- <?php foreach($this->getAccessOptionList('frontend') as $option => $data) { ?>
76
- <tr>
77
- <td width="90%">
78
- <strong class="aam-block aam-highlight text-uppercase"><?php echo $data['title']; ?></strong>
79
- <p class="aam-hint" data-dynamic-post-label="<?php echo $data['descr']; ?>"></p>
80
- </td>
81
- <td>
82
- <div class="aam-row-actions">
83
- <i class="aam-row-action text-muted icon-check-empty" data-property="frontend.<?php echo $option; ?>"></i>
84
- </div>
85
- </td>
86
- </tr>
87
- <?php } ?>
88
-
89
- <?php do_action('aam-post-access-option-action', 'post', 'frontend'); ?>
90
 
91
- <tr class="aam-backend-post-access">
92
- <td colspan="2" class="aam-table-group">
93
- <i class="icon-doc-text-inv"></i> <strong><?php echo __('Backend', AAM_KEY); ?></strong>
94
- </td>
95
- </tr>
 
 
 
 
 
 
 
 
96
 
97
- <?php foreach($this->getAccessOptionList('backend') as $option => $data) { ?>
98
- <tr class="aam-backend-post-access">
99
- <td width="90%">
100
- <strong class="aam-block aam-highlight text-uppercase"><?php echo $data['title']; ?></strong>
101
- <p class="aam-hint" data-dynamic-post-label="<?php echo $data['descr']; ?>"></p>
102
- </td>
103
- <td>
104
- <div class="aam-row-actions">
105
- <i class="aam-row-action text-muted icon-check-empty" data-property="backend.<?php echo $option; ?>"></i>
106
- </div>
107
- </td>
108
- </tr>
109
- <?php } ?>
110
-
111
- <?php do_action('aam-post-access-option-action', 'post', 'backend'); ?>
112
-
113
- </tbody>
114
- </table>
115
-
116
- <a href="#" class="btn btn-xs btn-primary post-back">&Lt; <?php echo __('Go Back', AAM_KEY); ?></a>
117
  </div>
118
- </div>
119
  </div>
120
  <?php
121
  }
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>
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">
44
+ <table id="post-list" class="table table-striped table-bordered">
45
+ <thead>
46
+ <tr>
47
+ <th>ID</th>
48
+ <th>Link</th>
49
+ <th width="5%">&nbsp;</th>
50
+ <th width="75%"><?php echo __('Title', AAM_KEY); ?></th>
51
+ <th><?php echo __('Actions', AAM_KEY); ?></th>
52
+ </tr>
53
+ </thead>
54
+ <tbody></tbody>
55
+ </table>
56
 
57
+ <div class="aam-slide-form" data-type="type">
58
+ <?php echo apply_filters('aam-post-type-ui-filter', AAM_Backend_View::getInstance()->loadPartial('post-type.phtml')); ?>
59
+ <a href="#" class="btn btn-xs btn-primary post-back">&Lt; <?php echo __('Go Back', AAM_KEY); ?></a>
60
+ </div>
61
 
62
+ <div class="aam-slide-form" data-type="term">
63
+ <?php echo apply_filters('aam-term-type-ui-filter', AAM_Backend_View::getInstance()->loadPartial('term-type.phtml')); ?>
64
+ <a href="#" class="btn btn-xs btn-primary post-back">&Lt; <?php echo __('Go Back', AAM_KEY); ?></a>
65
+ </div>
 
 
 
 
 
 
 
 
 
66
 
67
+ <div class="aam-slide-form" data-type="post">
68
+ <table class="table table-striped table-bordered">
69
+ <tbody>
70
+ <tr>
71
+ <td colspan="2" class="aam-table-group">
72
+ <i class="icon-doc-text-inv"></i> <strong><?php echo __('Frontend', AAM_KEY); ?></strong>
73
+ </td>
74
+ </tr>
75
 
76
+ <?php foreach($this->getAccessOptionList('frontend') as $option => $data) { ?>
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>
83
+ <div class="aam-row-actions">
84
+ <i class="aam-row-action text-muted icon-check-empty" data-property="frontend.<?php echo $option; ?>"></i>
85
+ </div>
86
+ </td>
87
+ </tr>
88
+ <?php } ?>
89
 
90
+ <?php do_action('aam-post-access-option-action', 'post', 'frontend'); ?>
 
 
 
 
 
 
 
91
 
92
+ <tr class="aam-backend-post-access">
93
+ <td colspan="2" class="aam-table-group">
94
+ <i class="icon-doc-text-inv"></i> <strong><?php echo __('Backend', AAM_KEY); ?></strong>
95
+ </td>
96
+ </tr>
 
 
 
 
 
 
 
 
 
 
97
 
98
+ <?php foreach($this->getAccessOptionList('backend') as $option => $data) { ?>
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>
105
+ <div class="aam-row-actions">
106
+ <i class="aam-row-action text-muted icon-check-empty" data-property="backend.<?php echo $option; ?>"></i>
107
+ </div>
108
+ </td>
109
+ </tr>
110
+ <?php } ?>
111
 
112
+ <?php do_action('aam-post-access-option-action', 'post', 'backend'); ?>
113
+
114
+ </tbody>
115
+ </table>
116
+
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
  }
Application/Backend/phtml/object/redirect.phtml CHANGED
@@ -2,7 +2,7 @@
2
  <div class="aam-feature" id="redirect-content">
3
  <div class="row">
4
  <div class="col-xs-12">
5
- <?php if ($this->isAdministrator() || defined('AAM_REDIRECT')) { ?>
6
  <?php echo apply_filters('aam-redirect-ui-filter', AAM_Backend_View::getInstance()->loadPartial('redirect.phtml')); ?>
7
  <?php } ?>
8
  </div>
@@ -10,7 +10,7 @@
10
 
11
  <div class="row">
12
  <div class="col-xs-12">
13
- <?php if ($this->isAdministrator() || 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>
@@ -36,7 +36,7 @@
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 custom URL [(valid URL is required)]', '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' : ''); ?> />
@@ -57,14 +57,14 @@
57
  'echo' => 1,
58
  'name' => 'frontend.redirect.page',
59
  'id' => 'frontend-page', // string
60
- 'class' => 'forn-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 __('Custom 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
 
@@ -84,7 +84,7 @@
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 custom URL [(valid URL is required)]', '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' : ''); ?> />
@@ -97,7 +97,7 @@
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 __('Custom 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'); ?>;">
@@ -109,7 +109,7 @@
109
  </div>
110
  <?php } else { ?>
111
  <p class="aam-notification">
112
- <?php echo sprintf(AAM_Backend_View_Helper::preparePhrase('In order to setup customized redirect for any user or role, consider to purchase [AAM Redirect] extension. Otherwise switch back to [%s] role to setup [default] access to all users and roles.', 'b', 'b', 'b'), translate_user_role('Administrator')); ?>
113
  </p>
114
  <?php } ?>
115
  </div>
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>
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>
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' : ''); ?> />
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
 
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' : ''); ?> />
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'); ?>;">
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>
Application/Backend/phtml/object/teaser.phtml CHANGED
@@ -2,7 +2,7 @@
2
  <div class="aam-feature" id="teaser-content">
3
  <div class="row">
4
  <div class="col-xs-12">
5
- <?php if ($this->isAdministrator() || defined('AAM_CONTENT_TEASER')) { ?>
6
  <?php echo apply_filters('aam-teaser-ui-filter', AAM_Backend_View::getInstance()->loadPartial('teaser.phtml')); ?>
7
  <?php } ?>
8
  </div>
@@ -10,7 +10,7 @@
10
 
11
  <div class="row">
12
  <div class="col-xs-12">
13
- <?php if ($this->isAdministrator() || defined('AAM_CONTENT_TEASER')) { ?>
14
  <div>
15
  <div class="form-group">
16
  <label><?php echo __('Teaser Message', AAM_KEY); ?></label>
@@ -25,7 +25,7 @@
25
  </div>
26
  <?php } else { ?>
27
  <p class="aam-notification">
28
- <?php echo sprintf(AAM_Backend_View_Helper::preparePhrase('In order to setup customized teaser message for any user or role, consider to purchase [AAM Teaser] extension. Otherwise switch back to [%s] role to setup [default] teaser message for all users and roles.', 'b', 'b', 'b'), translate_user_role('Administrator')); ?>
29
  </p>
30
  <?php } ?>
31
  </div>
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>
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>
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>
Application/Backend/phtml/partial/login-redirect.phtml ADDED
@@ -0,0 +1,5 @@
 
 
 
 
 
1
+ <?php if (defined('AAM_KEY')) { ?>
2
+ <p class="aam-info">
3
+ <?php echo AAM_Backend_View_Helper::preparePhrase('Setup [default] redirect after user logged in successfully for all your users and roles. With [AAM Login Redirect] extension you can customize login redirect for any user or role.', 'strong', 'strong'); ?>
4
+ </p>
5
+ <?php }
Application/Backend/phtml/partial/redirect.phtml CHANGED
@@ -1,5 +1,5 @@
1
  <?php if (defined('AAM_KEY')) { ?>
2
  <p class="aam-info">
3
- <?php echo AAM_Backend_View_Helper::preparePhrase('Setup [default] AAM behavior when access is denied to restricted resources (like posts, categories, menus etc) for both frontend and backend.', 'strong'); ?>
4
  </p>
5
  <?php }
1
  <?php if (defined('AAM_KEY')) { ?>
2
  <p class="aam-info">
3
+ <?php echo AAM_Backend_View_Helper::preparePhrase('Setup [default] redirect for all users, roles and visitors when access is denied for any restricted resources on your website.', 'strong'); ?>
4
  </p>
5
  <?php }
Application/Backend/phtml/partial/teaser.phtml CHANGED
@@ -1,6 +1,5 @@
1
  <?php if (defined('AAM_KEY')) { ?>
2
  <p class="aam-info">
3
- <?php echo AAM_Backend_View_Helper::preparePhrase('Setup [default] teaser message when frontend access is limited to read post, page or custom post type.', 'strong'); ?>
4
- <a href="http://vasyltech.com/blog/aam-content-teaser" target="_blank">Read more.</a>
5
  </p>
6
  <?php }
1
  <?php if (defined('AAM_KEY')) { ?>
2
  <p class="aam-info">
3
+ <?php echo AAM_Backend_View_Helper::preparePhrase('Setup [default] teaser message for all users, roles and visitors when access is limited to read posts or pages.', 'strong'); ?>
 
4
  </p>
5
  <?php }
Application/Core/API.php CHANGED
@@ -220,17 +220,17 @@ final class AAM_Core_API {
220
 
221
  /**
222
  *
223
- * @param type $redirect
224
  * @param type $area
225
  * @param type $args
226
  */
227
- protected static function redirect($redirect, $area , $args) {
228
- if (filter_var($redirect, FILTER_VALIDATE_URL)) {
229
- wp_redirect($redirect);
230
- } elseif (preg_match('/^[\d]+$/', $redirect)) {
231
- wp_redirect(get_post_permalink($redirect));
232
- } elseif (is_callable($redirect)) {
233
- call_user_func($redirect, $args);
234
  } elseif (!empty($args['callback']) && is_callable($args['callback'])) {
235
  $message = self::getDenyMessage($area);
236
  call_user_func($args['callback'], $message, '', array());
220
 
221
  /**
222
  *
223
+ * @param type $location
224
  * @param type $area
225
  * @param type $args
226
  */
227
+ public static function redirect($location, $area = null, $args = null) {
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'])) {
235
  $message = self::getDenyMessage($area);
236
  call_user_func($args['callback'], $message, '', array());
Application/Core/Object/Post.php CHANGED
@@ -76,7 +76,7 @@ class AAM_Core_Object_Post extends AAM_Core_Object {
76
 
77
  //read cache first
78
  $option = AAM_Core_Cache::get($chname);
79
-
80
  if ($option === false) { //if false, then the cache is empty but exist
81
  $option = array();
82
  } else {
@@ -85,7 +85,7 @@ class AAM_Core_Object_Post extends AAM_Core_Object {
85
  $option = get_post_meta($this->getPost()->ID, $opname, true);
86
  $this->setOverwritten(!empty($option));
87
  }
88
-
89
  //try to inherit from terms or default settings - AAM Plus Package or any
90
  //other extension that use this filter
91
  if (empty($option)) {
@@ -129,6 +129,8 @@ class AAM_Core_Object_Post extends AAM_Core_Object {
129
  * @access public
130
  */
131
  public function reset() {
 
 
132
  return delete_post_meta($this->getPost()->ID, $this->getOptionName());
133
  }
134
 
76
 
77
  //read cache first
78
  $option = AAM_Core_Cache::get($chname);
79
+
80
  if ($option === false) { //if false, then the cache is empty but exist
81
  $option = array();
82
  } else {
85
  $option = get_post_meta($this->getPost()->ID, $opname, true);
86
  $this->setOverwritten(!empty($option));
87
  }
88
+
89
  //try to inherit from terms or default settings - AAM Plus Package or any
90
  //other extension that use this filter
91
  if (empty($option)) {
129
  * @access public
130
  */
131
  public function reset() {
132
+ AAM_Core_Cache::clear();
133
+
134
  return delete_post_meta($this->getPost()->ID, $this->getOptionName());
135
  }
136
 
Application/Core/Subject.php CHANGED
@@ -243,7 +243,9 @@ abstract class AAM_Core_Subject {
243
  *
244
  * @access public
245
  */
246
- abstract public function getCapabilities();
 
 
247
 
248
  /**
249
  * Retrieve subject based on used class
@@ -252,7 +254,9 @@ abstract class AAM_Core_Subject {
252
  *
253
  * @access protected
254
  */
255
- abstract protected function retrieveSubject();
 
 
256
 
257
  /**
258
  *
@@ -292,18 +296,4 @@ abstract class AAM_Core_Subject {
292
  return null;
293
  }
294
 
295
- /**
296
- * Check if subject has parent
297
- *
298
- * Return true if current subject has parent subject. Applicable only for User
299
- * only were Role is a parent subject to it.
300
- *
301
- * @return boolean
302
- *
303
- * @access public
304
- */
305
- public function hasParent() {
306
- return false;
307
- }
308
-
309
  }
243
  *
244
  * @access public
245
  */
246
+ public function getCapabilities() {
247
+ return array();
248
+ }
249
 
250
  /**
251
  * Retrieve subject based on used class
254
  *
255
  * @access protected
256
  */
257
+ protected function retrieveSubject() {
258
+ return null;
259
+ }
260
 
261
  /**
262
  *
296
  return null;
297
  }
298
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
299
  }
Application/Core/Subject/Default.php ADDED
@@ -0,0 +1,67 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
+ * Default subject
12
+ *
13
+ * @package AAM
14
+ * @author Vasyl Martyniuk <vasyl@vasyltech.com>
15
+ */
16
+ class AAM_Core_Subject_Default extends AAM_Core_Subject {
17
+
18
+ /**
19
+ * Subject UID: DEFAULT
20
+ */
21
+ const UID = 'default';
22
+
23
+ /**
24
+ *
25
+ * @param type $value
26
+ * @param type $object
27
+ * @param type $object_id
28
+ * @return type
29
+ */
30
+ public function updateOption($value, $object, $object_id = 0) {
31
+ return AAM_Core_API::updateOption(
32
+ $this->getOptionName($object, $object_id), $value
33
+ );
34
+ }
35
+
36
+ /**
37
+ *
38
+ * @param type $object
39
+ * @param type $object_id
40
+ * @param type $default
41
+ * @return type
42
+ */
43
+ public function readOption($object, $object_id = 0, $default = null) {
44
+ return AAM_Core_API::getOption(
45
+ $this->getOptionName($object, $object_id), $default
46
+ );
47
+ }
48
+
49
+ /**
50
+ *
51
+ * @param type $object
52
+ * @param type $id
53
+ * @return string
54
+ */
55
+ public function getOptionName($object, $id) {
56
+ return "aam_{$object}" . ($id ? "_{$id}_" : '_') . self::UID;
57
+ }
58
+
59
+ /**
60
+ *
61
+ * @return type
62
+ */
63
+ public function getUID() {
64
+ return self::UID;
65
+ }
66
+
67
+ }
Application/Core/Subject/Role.php CHANGED
@@ -179,14 +179,11 @@ class AAM_Core_Subject_Role extends AAM_Core_Subject {
179
  * @inheritdoc
180
  */
181
  public function getParent() {
182
- return apply_filters('aam-parent-role-filter', null, $this);
 
 
 
 
183
  }
184
 
185
- /**
186
- * @inheritdoc
187
- */
188
- public function hasParent() {
189
- return ($this->getParent() ? true : false);
190
- }
191
-
192
  }
179
  * @inheritdoc
180
  */
181
  public function getParent() {
182
+ return apply_filters(
183
+ 'aam-parent-role-filter',
184
+ new AAM_Core_Subject_Default,
185
+ $this
186
+ );
187
  }
188
 
 
 
 
 
 
 
 
189
  }
Application/Core/Subject/User.php CHANGED
@@ -250,13 +250,6 @@ class AAM_Core_Subject_User extends AAM_Core_Subject {
250
  return "aam_{$object}" . ($id ? "_{$id}" : '');
251
  }
252
 
253
- /**
254
- * @inheritdoc
255
- */
256
- public function hasParent() {
257
- return true;
258
- }
259
-
260
  /**
261
  * Get Subject UID
262
  *
250
  return "aam_{$object}" . ($id ? "_{$id}" : '');
251
  }
252
 
 
 
 
 
 
 
 
253
  /**
254
  * Get Subject UID
255
  *
Application/Core/Subject/Visitor.php CHANGED
@@ -20,25 +20,6 @@ class AAM_Core_Subject_Visitor extends AAM_Core_Subject {
20
  */
21
  const UID = 'visitor';
22
 
23
- /**
24
- * Retrieve Visitor Subject
25
- *
26
- * @return null|AAM_Core_Subject
27
- *
28
- * @access protected
29
- */
30
- protected function retrieveSubject() {
31
- return null;
32
- }
33
-
34
- /**
35
- *
36
- * @return type
37
- */
38
- public function getCapabilities() {
39
- return array();
40
- }
41
-
42
  /**
43
  *
44
  * @param type $value
20
  */
21
  const UID = 'visitor';
22
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
23
  /**
24
  *
25
  * @param type $value
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'), 10, 2);
43
 
44
  //control WordPress frontend
45
  add_action('wp', array($this, 'wp'), 999);
@@ -70,9 +70,31 @@ class AAM_Frontend_Manager {
70
  * @param type $login
71
  * @param type $user
72
  */
73
- public function login($login, $user = null) {
 
 
74
  if (is_a($user, 'WP_User')) {
75
- AAM_Core_API::deleteOption('aam-user-switch-' . $user->ID);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
76
  }
77
  }
78
 
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);
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
 
aam.php CHANGED
@@ -2,8 +2,8 @@
2
 
3
  /**
4
  Plugin Name: Advanced Access Manager
5
- Description: Manage User and Role Access to WordPress Backend and Frontend.
6
- Version: 3.9.3
7
  Author: Vasyl Martyniuk <vasyl@vasyltech.com>
8
  Author URI: https://www.vasyltech.com
9
 
@@ -53,7 +53,7 @@ class AAM {
53
  } else {
54
  $this->setUser(new AAM_Core_Subject_Visitor(''));
55
  }
56
-
57
  //load AAM core config
58
  AAM_Core_Config::bootstrap();
59
  }
2
 
3
  /**
4
  Plugin Name: Advanced Access Manager
5
+ Description: Manage website access for any user, role or visitors
6
+ Version: 3.9.5
7
  Author: Vasyl Martyniuk <vasyl@vasyltech.com>
8
  Author URI: https://www.vasyltech.com
9
 
53
  } else {
54
  $this->setUser(new AAM_Core_Subject_Visitor(''));
55
  }
56
+
57
  //load AAM core config
58
  AAM_Core_Config::bootstrap();
59
  }
media/css/aam.css CHANGED
@@ -62,72 +62,74 @@
62
  /* text-shadow: 1px 1px 1px rgba(127, 127, 127, 0.3); */
63
  }
64
 
65
- .icon-spin4:before { content: '\e800' !important; } /* '' */
66
- .icon-user-secret:before { content: '\e801' !important; } /* '' */
67
- .icon-folder:before { content: '\e802' !important; } /* '' */
68
- .icon-stop:before { content: '\e803' !important; } /* '' */
69
- .icon-left-dir:before { content: '\e804' !important; } /* '' */
70
- .icon-dollar:before { content: '\e805' !important; } /* '' */
71
- .icon-mail-alt:before { content: '\e806' !important; } /* '' */
72
- .icon-download-cloud:before { content: '\e807' !important; } /* '' */
73
- .icon-eye-off:before { content: '\e808' !important; } /* '' */
74
- .icon-attention-circled:before { content: '\e809' !important; } /* '' */
75
- .icon-cog-alt:before { content: '\e80a' !important; } /* '' */
76
- .icon-link-1:before { content: '\e80b' !important; } /* '' */
77
- .icon-user-secret-1:before { content: '\e80c' !important; } /* '' */
78
- .icon-unlink:before { content: '\e80d' !important; } /* '' */
79
- .icon-sort-down:before { content: '\e80e' !important; } /* '' */
80
- .icon-pencil:before { content: '\e80f' !important; } /* '' */
81
- .icon-arrows-cw:before { content: '\e810' !important; } /* '' */
82
- .icon-sort-up:before { content: '\e811' !important; } /* '' */
83
- .icon-sort:before { content: '\e812' !important; } /* '' */
84
- .icon-lock-open-alt:before { content: '\e813' !important; } /* '' */
85
- .icon-plus:before { content: '\e814' !important; } /* '' */
86
- .icon-filter:before { content: '\e815' !important; } /* '' */
87
- .icon-check:before { content: '\e816' !important; } /* '' */
88
- .icon-help-circled:before { content: '\e817' !important; } /* '' */
89
- .icon-file-code:before { content: '\e818' !important; } /* '' */
90
- .icon-users:before { content: '\e819' !important; } /* '' */
91
- .icon-box-1:before { content: '\e81a' !important; } /* '' */
92
- .icon-folder-1:before { content: '\e81b' !important; } /* '' */
93
- .icon-eye-1:before { content: '\e81c' !important; } /* '' */
94
- .icon-upload-cloud:before { content: '\e81d' !important; } /* '' */
95
- .icon-user-plus:before { content: '\e81e' !important; } /* '' */
96
- .icon-gauge:before { content: '\e81f' !important; } /* '' */
97
- .icon-box:before { content: '\e820' !important; } /* 'î  ' */
98
- .icon-plus-circled:before { content: '\e821' !important; } /* 'î ¡' */
99
- .icon-link:before { content: '\e822' !important; } /* 'î ¢' */
100
- .icon-wrench:before { content: '\e823' !important; } /* 'î £' */
101
- .icon-eye:before { content: '\e824' !important; } /* 'î ¤' */
102
- .icon-medkit:before { content: '\e825' !important; } /* 'î ¥' */
103
- .icon-basket:before { content: '\e826' !important; } /* 'î ¦' */
104
- .icon-check-empty:before { content: '\e827' !important; } /* 'î §' */
105
- .icon-doc-text-inv:before { content: '\e828' !important; } /* 'î ¨' */
106
- .icon-home:before { content: '\e829' !important; } /* 'î ©' */
107
- .icon-angle-double-right:before { content: '\e82a' !important; } /* 'î ª' */
108
- .icon-facebook:before { content: '\e82b' !important; } /* 'î «' */
109
- .icon-star:before { content: '\e82c' !important; } /* 'î ¬' */
110
- .icon-list:before { content: '\e82d' !important; } /* 'î ­' */
111
- .icon-up-dir:before { content: '\e82e' !important; } /* 'î ®' */
112
- .icon-dot-circled:before { content: '\e82f' !important; } /* 'î ¯' */
113
- .icon-code:before { content: '\e830' !important; } /* 'î °' */
114
- .icon-bug:before { content: '\e831' !important; } /* 'î ±' */
115
- .icon-heartbeat:before { content: '\e832' !important; } /* 'î ²' */
116
- .icon-connectdevelop:before { content: '\e833' !important; } /* 'î ³' */
117
- .icon-trash-empty:before { content: '\e834' !important; } /* 'î ´' */
118
- .icon-download-cloud-1:before { content: '\e835' !important; } /* 'î µ' */
119
- .icon-github:before { content: '\e836' !important; } /* 'î ' */
120
- .icon-cog:before { content: '\e837' !important; } /* 'î ·' */
121
- .icon-lock:before { content: '\e838' !important; } /* 'î ¸' */
122
- .icon-twitter:before { content: '\e839' !important; } /* 'î ¹' */
123
- .icon-certificate:before { content: '\e83a' !important; } /* 'î º' */
124
- .icon-user:before { content: '\e83b' !important; } /* 'î »' */
125
- .icon-level-down:before { content: '\e83c' !important; } /* 'î ¼' */
126
- .icon-exchange:before { content: '\f0ec' !important; } /* '' */
127
- .icon-circle:before { content: '\f111' !important; } /* '' */
128
- .icon-thumbs-up-alt:before { content: '\f164' !important; } /* '' */
129
- .icon-circle-thin:before { content: '\f1db' !important; } /* '' */
130
- .icon-clone:before { content: '\f24d' !important; } /* '' */
 
 
131
 
132
  .animate-spin {
133
  -moz-animation: spin 2s infinite linear;
@@ -272,6 +274,7 @@ a:focus, a:active {
272
 
273
  .nav-tabs > li > a {
274
  outline: none;
 
275
  }
276
 
277
  .nav-tabs > li.active > a, .nav-tabs > li.active > a:focus, .nav-tabs > li.active > a:hover {
@@ -457,12 +460,12 @@ input[type=checkbox] + label:before {
457
  font-family: 'fontello';
458
  display: inline-block;
459
  font-size: 1.2em;
460
- content: "\e827"; /* unchecked icon */
461
  }
462
 
463
  input[type=checkbox]:checked + label:before {
464
  font-size: 1.2em;
465
- content: "\e816"; /* checked icon */
466
  }
467
 
468
  input[type=checkbox].aam-checkbox-danger:checked + label:before {
@@ -486,13 +489,13 @@ input[type=radio] + label:before {
486
  font-family: 'fontello';
487
  display: inline-block;
488
  font-size: 1.2em;
489
- content: "\f1db"; /* unchecked icon */
490
  margin-right: 10px;
491
  }
492
 
493
  input[type=radio]:checked + label:before {
494
  font-size: 1.2em;
495
- content: "\f111"; /* checked icon */
496
  margin-right: 10px;
497
  }
498
 
62
  /* text-shadow: 1px 1px 1px rgba(127, 127, 127, 0.3); */
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;
274
 
275
  .nav-tabs > li > a {
276
  outline: none;
277
+ font-size: 0.9em;
278
  }
279
 
280
  .nav-tabs > li.active > a, .nav-tabs > li.active > a:focus, .nav-tabs > li.active > a:hover {
460
  font-family: 'fontello';
461
  display: inline-block;
462
  font-size: 1.2em;
463
+ content: "\E828"; /* unchecked icon */
464
  }
465
 
466
  input[type=checkbox]:checked + label:before {
467
  font-size: 1.2em;
468
+ content: "\E817"; /* checked icon */
469
  }
470
 
471
  input[type=checkbox].aam-checkbox-danger:checked + label:before {
489
  font-family: 'fontello';
490
  display: inline-block;
491
  font-size: 1.2em;
492
+ content: "\F1DB"; /* unchecked icon */
493
  margin-right: 10px;
494
  }
495
 
496
  input[type=radio]:checked + label:before {
497
  font-size: 1.2em;
498
+ content: "\F111"; /* checked icon */
499
  margin-right: 10px;
500
  }
501
 
media/css/datatables.min.css CHANGED
@@ -81,16 +81,16 @@ table.dataTable thead .sorting:after,table.dataTable thead .sorting_asc:after,ta
81
  }
82
  table.dataTable thead .sorting:after {
83
  font-family: "fontello";
84
- content: "\e812";
85
  opacity: 0.2;
86
  }
87
  table.dataTable thead .sorting_asc:after {
88
  font-family: "fontello";
89
- content: "\e80e";
90
  }
91
  table.dataTable thead .sorting_desc:after {
92
  font-family: "fontello";
93
- content: "\e811";
94
  }
95
  table.dataTable thead .sorting_asc_disabled:after,table.dataTable thead .sorting_desc_disabled:after {
96
  color: #eee;
81
  }
82
  table.dataTable thead .sorting:after {
83
  font-family: "fontello";
84
+ content: "\E813";
85
  opacity: 0.2;
86
  }
87
  table.dataTable thead .sorting_asc:after {
88
  font-family: "fontello";
89
+ content: "\E80F";
90
  }
91
  table.dataTable thead .sorting_desc:after {
92
  font-family: "fontello";
93
+ content: "\E812";
94
  }
95
  table.dataTable thead .sorting_asc_disabled:after,table.dataTable thead .sorting_desc_disabled:after {
96
  color: #eee;
media/font/fontello.eot CHANGED
Binary file
media/font/fontello.svg CHANGED
@@ -6,127 +6,129 @@
6
  <font id="fontello" horiz-adv-x="1000" >
7
  <font-face font-family="fontello" font-weight="400" font-stretch="normal" units-per-em="1000" ascent="850" descent="-150" />
8
  <missing-glyph horiz-adv-x="1000" />
9
- <glyph glyph-name="spin4" unicode="&#xe800;" d="M498 850c-114 0-228-39-320-116l0 0c173 140 428 130 588-31 134-134 164-332 89-495-10-29-5-50 12-68 21-20 61-23 84 0 3 3 12 15 15 24 71 180 33 393-112 539-99 98-228 147-356 147z m-409-274c-14 0-29-5-39-16-3-3-13-15-15-24-71-180-34-393 112-539 185-185 479-195 676-31l0 0c-173-140-428-130-589 31-134 134-163 333-89 495 11 29 6 50-12 68-11 11-27 17-44 16z" horiz-adv-x="1001" />
10
 
11
- <glyph glyph-name="user-secret" unicode="&#xe801;" d="M321-7l54 250-54 71-71 36z m143 0l72 357-72-36-53-71z m90 564q-1 2-3 3-5 4-53 4-39 0-93-10-4-1-12-1t-12 1q-54 10-93 10-48 0-54-4-1-1-2-3 1-11 2-16 2-1 5-3t4-6q1-2 4-11t4-12 4-9 5-10 5-8 7-7 7-6 10-4 12-2 13-1q20 0 33 7t18 16 8 20 7 16 10 7h6q6 0 10-7t6-16 9-20 18-16 33-7q7 0 13 1t12 2 9 4 8 6 7 7 5 8 5 10 4 9 4 12 4 11q1 4 4 6t4 3q2 5 3 16z m232-491q0-68-41-106t-108-39h-488q-67 0-108 39t-41 106q0 34 3 66t10 70 21 69 36 58 52 41l-51 123h120q-12 36-12 71 0 7 1 18-109 23-109 54 0 32 118 55 9 35 28 75t40 63q18 21 42 21 17 0 47-17t47-18 47 18 47 17q24 0 42-21 20-23 39-63t29-75q117-23 117-55 0-31-108-54 4-45-11-89h119l-45-126q35-18 60-54t36-80 16-84 5-83z" horiz-adv-x="857.1" />
12
 
13
- <glyph glyph-name="folder" unicode="&#xe802;" d="M929 511v-393q0-51-37-88t-88-37h-679q-51 0-88 37t-37 88v536q0 51 37 88t88 37h179q51 0 88-37t37-88v-18h375q51 0 88-37t37-88z" horiz-adv-x="928.6" />
14
 
15
- <glyph glyph-name="stop" unicode="&#xe803;" d="M857 743v-786q0-14-10-25t-26-11h-785q-15 0-25 11t-11 25v786q0 14 11 25t25 11h785q15 0 26-11t10-25z" horiz-adv-x="857.1" />
16
 
17
- <glyph glyph-name="left-dir" unicode="&#xe804;" d="M357 600v-500q0-14-10-25t-26-11-25 11l-250 250q-10 11-10 25t10 25l250 250q11 11 25 11t26-11 10-25z" horiz-adv-x="357.1" />
18
 
19
- <glyph glyph-name="dollar" unicode="&#xe805;" d="M546 189q0-86-56-147t-144-77v-97q0-8-5-13t-13-5h-75q-7 0-13 5t-5 13v97q-37 5-71 18t-57 25-41 26-26 21-10 10q-9 12-1 23l58 76q3 5 12 6 9 1 14-5l1-1q63-55 135-70 21-4 42-4 45 0 79 24t35 68q0 16-9 30t-18 23-33 21-37 18-45 18q-21 9-34 14t-34 15-35 17-32 20-29 24-25 27-20 32-11 37-5 44q0 77 55 135t142 75v100q0 7 5 13t13 5h75q8 0 13-5t5-13v-98q32-4 62-13t48-19 36-21 21-16 9-8q9-10 3-21l-46-81q-4-9-12-9-8-2-16 4-1 1-8 6t-21 15-33 18-42 15-47 6q-53 0-87-24t-33-62q0-14 4-27t17-23 22-18 31-18 34-15 39-15q30-11 45-18t43-19 42-24 34-28 30-35 18-43 7-52z" horiz-adv-x="571.4" />
20
 
21
- <glyph glyph-name="mail-alt" unicode="&#xe806;" d="M1000 454v-443q0-37-26-63t-63-27h-822q-36 0-63 27t-26 63v443q25-28 56-49 202-137 278-192 32-24 51-37t53-27 61-13h2q28 0 61 13t53 27 51 37q95 68 278 192 32 22 56 49z m0 164q0-44-27-84t-68-69q-210-146-262-181-5-4-23-17t-30-22-29-18-33-15-27-5h-2q-12 0-27 5t-33 15-29 18-30 22-23 17q-51 35-147 101t-114 80q-35 23-65 64t-31 77q0 43 23 72t66 29h822q36 0 62-26t27-63z" horiz-adv-x="1000" />
22
 
23
- <glyph glyph-name="download-cloud" unicode="&#xe807;" d="M714 332q0 8-5 13t-13 5h-125v196q0 8-5 13t-12 5h-108q-7 0-12-5t-5-13v-196h-125q-8 0-13-5t-5-13q0-8 5-13l196-196q5-5 13-5t13 5l196 196q5 6 5 13z m357-125q0-89-62-151t-152-63h-607q-103 0-177 73t-73 177q0 72 39 134t105 92q-1 17-1 24 0 118 84 202t202 84q87 0 159-49t105-129q40 35 93 35 59 0 101-42t42-101q0-43-23-77 72-17 119-76t46-133z" horiz-adv-x="1071.4" />
24
 
25
- <glyph glyph-name="eye-off" unicode="&#xe808;" d="M310 105l43 79q-48 35-76 88t-27 114q0 67 34 125-128-65-213-197 94-144 239-209z m217 424q0 11-8 19t-19 7q-70 0-120-50t-50-119q0-12 8-19t19-8 19 8 8 19q0 48 34 82t82 34q11 0 19 8t8 19z m202 106q0-4 0-5-59-105-176-316t-176-316l-28-50q-5-9-15-9-7 0-75 39-9 6-9 16 0 7 25 49-80 36-147 96t-117 137q-11 17-11 38t11 39q86 131 212 207t277 76q50 0 100-10l31 54q5 9 15 9 3 0 10-3t18-9 18-10 18-10 10-7q9-5 9-15z m21-249q0-78-44-142t-117-92l157 281q4-26 4-47z m250-72q0-19-11-38-22-36-61-81-84-96-194-149t-234-53l41 74q119 10 219 76t169 171q-65 100-158 164l35 63q53-36 102-86t81-102q11-19 11-39z" horiz-adv-x="1000" />
26
 
27
- <glyph glyph-name="attention-circled" unicode="&#xe809;" d="M429 779q116 0 215-58t156-156 57-215-57-215-156-156-215-58-216 58-155 156-58 215 58 215 155 156 216 58z m71-696v106q0 8-5 13t-12 5h-107q-8 0-13-5t-6-13v-106q0-8 6-13t13-6h107q7 0 12 6t5 13z m-1 192l10 346q0 7-6 10-5 5-13 5h-123q-8 0-13-5-6-3-6-10l10-346q0-6 5-10t14-4h103q8 0 13 4t6 10z" horiz-adv-x="857.1" />
28
 
29
- <glyph glyph-name="cog-alt" unicode="&#xe80a;" d="M500 350q0 59-42 101t-101 42-101-42-42-101 42-101 101-42 101 42 42 101z m429-286q0 29-22 51t-50 21-50-21-21-51q0-29 21-50t50-21 51 21 21 50z m0 572q0 29-22 50t-50 21-50-21-21-50q0-30 21-51t50-21 51 21 21 51z m-215-235v-103q0-6-4-11t-9-6l-86-14q-6-19-18-42 19-27 50-64 4-6 4-11 0-7-4-11-13-17-46-50t-44-33q-6 0-11 4l-64 50q-21-11-43-17-6-60-13-87-4-13-17-13h-104q-6 0-11 4t-5 10l-13 85q-19 6-42 18l-66-50q-4-4-11-4-6 0-12 4-80 75-80 90 0 5 4 10 5 8 23 30t26 34q-13 24-20 46l-85 13q-5 1-9 5t-4 11v103q0 6 4 11t9 6l86 14q7 19 18 42-19 27-50 64-4 6-4 11 0 7 4 11 12 17 46 50t44 33q6 0 12-4l64-50q19 10 43 18 6 60 13 86 3 13 16 13h104q6 0 11-4t6-10l13-85q19-6 41-17l66 49q5 4 11 4 7 0 12-4 81-75 81-90 0-5-4-10-7-9-24-30t-25-34q13-27 19-46l85-12q5-2 9-6t4-11z m357-298v-78q0-9-83-17-6-15-16-29 28-63 28-77 0-2-2-4-68-40-69-40-5 0-26 27t-29 37q-11-1-17-1t-17 1q-7-11-29-37t-25-27q-1 0-69 40-3 2-3 4 0 14 29 77-10 14-17 29-83 8-83 17v78q0 9 83 18 7 16 17 29-29 63-29 77 0 2 3 4 2 1 19 11t33 19 17 9q4 0 25-26t29-38q12 1 17 1t17-1q28 40 51 63l4 1q2 0 69-39 2-2 2-4 0-14-28-77 9-13 16-29 83-9 83-18z m0 572v-78q0-9-83-18-6-15-16-29 28-63 28-77 0-2-2-4-68-39-69-39-5 0-26 26t-29 38q-11-1-17-1t-17 1q-7-12-29-38t-25-26q-1 0-69 39-3 2-3 4 0 14 29 77-10 14-17 29-83 9-83 18v78q0 9 83 17 7 16 17 29-29 63-29 77 0 2 3 4 2 1 19 11t33 19 17 9q4 0 25-26t29-38q12 2 17 2t17-2q28 40 51 63l4 1q2 0 69-39 2-2 2-4 0-14-28-77 9-13 16-29 83-8 83-17z" horiz-adv-x="1071.4" />
30
 
31
- <glyph glyph-name="link-1" unicode="&#xe80b;" d="M812 171q0 23-15 38l-116 116q-16 16-38 16-24 0-40-18 1-1 10-10t12-12 9-11 7-14 2-15q0-23-16-38t-38-16q-8 0-15 2t-14 7-11 9-12 12-10 10q-19-17-19-40 0-23 16-38l115-116q15-15 38-15 22 0 38 15l82 81q15 16 15 37z m-392 394q0 22-15 38l-115 115q-16 16-38 16-22 0-38-15l-82-82q-16-15-16-37 0-22 16-38l116-116q15-15 38-15 23 0 40 17-2 2-11 11t-12 12-8 10-7 14-2 16q0 22 15 38t38 15q9 0 16-2t14-7 10-8 12-12 11-11q18 17 18 41z m500-394q0-67-48-113l-82-81q-46-47-113-47-68 0-114 48l-115 115q-46 47-46 114 0 68 49 116l-49 49q-48-49-116-49-67 0-114 47l-116 116q-47 47-47 114t47 113l82 82q47 46 114 46 67 0 114-47l114-116q47-46 47-113 0-69-49-117l49-49q48 49 116 49 67 0 114-47l116-116q47-47 47-114z" horiz-adv-x="928.6" />
32
 
33
- <glyph glyph-name="user-secret-1" unicode="&#xe80c;" d="M321-7l54 250-54 71-71 36z m143 0l72 357-72-36-53-71z m90 563q-2 3-3 4-5 4-53 4-39 0-93-10-4-2-12-2t-12 2q-54 10-93 10-48 0-54-4-1-1-2-4 1-10 2-15 2-1 5-3t4-6q1-2 4-12t4-11 4-10 5-9 5-8 7-7 7-6 10-4 12-2 13-1q20 0 33 6t18 17 8 19 7 17 10 7h6q6 0 10-7t6-17 9-19 18-17 33-6q7 0 13 1t12 2 9 4 8 6 7 7 5 8 5 9 4 10 4 11 4 12q1 4 4 6t4 3q1 5 3 15z m232-490q0-68-41-106t-108-39h-488q-67 0-108 39t-41 106q0 34 3 66t10 70 21 69 36 58 52 41l-51 123h120q-12 36-12 71 0 7 1 18-109 22-109 54 0 32 118 55 9 35 28 75t40 63q18 21 42 21 17 0 47-17t47-18 47 18 47 17q24 0 42-21 20-23 39-63t29-75q117-23 117-55 0-32-108-54 4-45-11-89h119l-45-126q35-18 60-54t36-80 16-84 5-83z" horiz-adv-x="857.1" />
34
 
35
- <glyph glyph-name="unlink" unicode="&#xe80d;" d="M245 141l-143-143q-5-5-13-5-6 0-13 5-5 5-5 13t5 13l143 142q6 5 13 5t13-5q5-5 5-12t-5-13z m94-23v-179q0-8-5-13t-13-5-12 5-5 13v179q0 8 5 13t12 5 13-5 5-13z m-125 125q0-8-5-13t-13-5h-178q-8 0-13 5t-5 13 5 13 13 5h178q8 0 13-5t5-13z m706-72q0-67-48-113l-82-81q-46-47-113-47-68 0-114 48l-186 187q-12 11-24 31l134 10 152-153q15-15 38-15t38 15l82 81q15 16 15 37 0 23-15 38l-153 154 10 133q20-12 31-23l188-188q47-48 47-114z m-345 404l-133-10-152 153q-16 16-38 16-22 0-38-15l-82-82q-16-15-16-37 0-22 16-38l153-153-10-134q-20 12-32 24l-187 187q-47 48-47 114 0 67 47 113l82 82q47 46 114 46 67 0 114-47l186-187q12-12 23-32z m354-46q0-8-5-13t-13-5h-179q-8 0-13 5t-5 13 5 12 13 5h179q8 0 13-5t5-12z m-304 303v-178q0-8-5-13t-13-5-13 5-5 13v178q0 8 5 13t13 5 13-5 5-13z m227-84l-143-143q-6-5-13-5t-12 5q-5 6-5 13t5 13l142 142q6 5 13 5t13-5q5-5 5-12t-5-13z" horiz-adv-x="928.6" />
36
 
37
- <glyph glyph-name="sort-down" unicode="&#xe80e;" d="M571 243q0-15-10-25l-250-250q-11-11-25-11t-25 11l-250 250q-11 10-11 25t11 25 25 11h500q14 0 25-11t10-25z" horiz-adv-x="571.4" />
38
 
39
- <glyph glyph-name="pencil" unicode="&#xe80f;" d="M203-7l50 51-131 131-51-51v-60h72v-71h60z m291 518q0 12-12 12-5 0-9-4l-303-302q-4-4-4-10 0-12 13-12 5 0 9 4l303 302q3 4 3 10z m-30 107l232-232-464-465h-232v233z m381-54q0-29-20-50l-93-93-232 233 93 92q20 21 50 21 29 0 51-21l131-131q20-22 20-51z" horiz-adv-x="857.1" />
40
 
41
- <glyph glyph-name="arrows-cw" unicode="&#xe810;" d="M843 261q0-3 0-4-36-150-150-243t-267-93q-81 0-157 31t-136 88l-72-72q-11-11-25-11t-25 11-11 25v250q0 14 11 25t25 11h250q14 0 25-11t10-25-10-25l-77-77q40-37 90-57t105-20q74 0 139 37t104 99q6 10 29 66 5 13 17 13h107q8 0 13-6t5-12z m14 446v-250q0-14-10-25t-26-11h-250q-14 0-25 11t-10 25 10 25l77 77q-82 77-194 77-75 0-140-37t-104-99q-6-10-29-66-5-13-17-13h-111q-7 0-13 6t-5 12v4q36 150 151 243t268 93q81 0 158-31t137-88l72 72q11 11 25 11t26-11 10-25z" horiz-adv-x="857.1" />
42
 
43
- <glyph glyph-name="sort-up" unicode="&#xe811;" d="M571 457q0-14-10-25t-25-11h-500q-15 0-25 11t-11 25 11 25l250 250q10 11 25 11t25-11l250-250q10-10 10-25z" horiz-adv-x="571.4" />
44
 
45
- <glyph glyph-name="sort" unicode="&#xe812;" d="M571 243q0-15-10-25l-250-250q-11-11-25-11t-25 11l-250 250q-11 10-11 25t11 25 25 11h500q14 0 25-11t10-25z m0 214q0-14-10-25t-25-11h-500q-15 0-25 11t-11 25 11 25l250 250q10 11 25 11t25-11l250-250q10-10 10-25z" horiz-adv-x="571.4" />
46
 
47
- <glyph glyph-name="lock-open-alt" unicode="&#xe813;" d="M589 421q23 0 38-15t16-38v-322q0-22-16-37t-38-16h-535q-23 0-38 16t-16 37v322q0 22 16 38t38 15h17v179q0 103 74 177t176 73 177-73 73-177q0-15-10-25t-25-11h-36q-14 0-25 11t-11 25q0 59-42 101t-101 42-101-42-41-101v-179h410z" horiz-adv-x="642.9" />
48
 
49
- <glyph glyph-name="plus" unicode="&#xe814;" d="M786 439v-107q0-22-16-38t-38-15h-232v-233q0-22-16-37t-38-16h-107q-22 0-38 16t-15 37v233h-232q-23 0-38 15t-16 38v107q0 23 16 38t38 16h232v232q0 22 15 38t38 16h107q23 0 38-16t16-38v-232h232q22 0 38-16t16-38z" horiz-adv-x="785.7" />
50
 
51
- <glyph glyph-name="filter" unicode="&#xe815;" d="M783 685q9-23-8-39l-275-275v-414q0-23-22-33-7-3-14-3-15 0-25 11l-143 143q-10 10-10 25v271l-275 275q-18 16-8 39 9 22 33 22h714q23 0 33-22z" horiz-adv-x="785.7" />
52
 
53
- <glyph glyph-name="check" unicode="&#xe816;" d="M786 331v-177q0-67-47-114t-114-47h-464q-67 0-114 47t-47 114v464q0 66 47 113t114 48h464q35 0 65-14 9-4 10-13 2-10-5-16l-27-28q-6-5-13-5-2 0-5 1-13 3-25 3h-464q-37 0-63-26t-27-63v-464q0-37 27-63t63-27h464q37 0 63 27t26 63v141q0 8 5 13l36 35q6 6 13 6 3 0 7-2 11-4 11-16z m129 273l-455-454q-13-14-31-14t-32 14l-240 240q-14 13-14 31t14 32l61 62q14 13 32 13t32-13l147-147 361 361q13 13 31 13t32-13l62-61q13-14 13-32t-13-32z" horiz-adv-x="928.6" />
54
 
55
- <glyph glyph-name="help-circled" unicode="&#xe817;" d="M500 82v107q0 8-5 13t-13 5h-107q-8 0-13-5t-5-13v-107q0-8 5-13t13-5h107q8 0 13 5t5 13z m143 375q0 49-31 91t-77 65-95 23q-136 0-207-119-9-14 4-24l74-55q4-4 10-4 9 0 14 7 30 38 48 51 19 14 48 14 27 0 48-15t21-33q0-21-11-34t-38-25q-35-16-65-48t-29-70v-20q0-8 5-13t13-5h107q8 0 13 5t5 13q0 10 12 27t30 28q18 10 28 16t25 19 25 27 16 34 7 45z m214-107q0-117-57-215t-156-156-215-58-216 58-155 156-58 215 58 215 155 156 216 58 215-58 156-156 57-215z" horiz-adv-x="857.1" />
56
 
57
- <glyph glyph-name="file-code" unicode="&#xe818;" d="M819 638q16-16 27-42t11-50v-642q0-23-15-38t-38-16h-750q-23 0-38 16t-16 38v892q0 23 16 38t38 16h500q22 0 49-11t42-27z m-248 136v-210h210q-5 16-12 23l-175 175q-6 7-23 12z m215-853v572h-232q-23 0-38 15t-16 38v233h-429v-858h715z m-518 500q4 7 12 7t13-3l28-21q7-5 7-12t-3-14l-102-135 102-136q4-6 3-13t-7-12l-28-21q-6-4-13-4t-12 7l-126 168q-8 11 0 21z m447-168q8-10 0-21l-126-168q-4-6-11-7t-14 4l-28 21q-6 5-7 12t3 13l102 136-102 135q-4 7-3 14t7 12l28 21q6 4 14 3t11-7z m-346-257q-7 1-11 7t-3 14l77 464q1 7 7 11t14 3l35-5q7-2 11-8t3-13l-77-464q-1-7-7-11t-13-3z" horiz-adv-x="857.1" />
58
 
59
- <glyph glyph-name="users" unicode="&#xe819;" d="M331 350q-90-3-148-71h-75q-45 0-77 22t-31 66q0 197 69 197 4 0 25-11t54-24 66-12q38 0 75 13-3-21-3-37 0-78 45-143z m598-356q0-66-41-105t-108-39h-488q-68 0-108 39t-41 105q0 30 2 58t8 61 14 61 24 54 35 45 48 30 62 11q6 0 24-12t41-26 59-27 76-12 75 12 60 27 41 26 23 12q35 0 63-11t47-30 35-45 24-54 15-61 8-61 2-58z m-572 713q0-59-42-101t-101-42-101 42-42 101 42 101 101 42 101-42 42-101z m393-214q0-89-63-152t-151-62-152 62-63 152 63 151 152 63 151-63 63-151z m321-126q0-43-31-66t-77-22h-75q-57 68-147 71 45 65 45 143 0 16-3 37 37-13 74-13 33 0 67 12t54 24 24 11q69 0 69-197z m-71 340q0-59-42-101t-101-42-101 42-42 101 42 101 101 42 101-42 42-101z" horiz-adv-x="1071.4" />
60
 
61
- <glyph glyph-name="box-1" unicode="&#xe81a;" d="M607 386q0 14-10 25t-26 10h-142q-15 0-26-10t-10-25 10-25 26-11h142q15 0 26 11t10 25z m322 107v-536q0-14-11-25t-25-11h-786q-14 0-25 11t-11 25v536q0 14 11 25t25 11h786q14 0 25-11t11-25z m35 250v-143q0-15-10-25t-25-11h-858q-14 0-25 11t-10 25v143q0 14 10 25t25 11h858q14 0 25-11t10-25z" horiz-adv-x="1000" />
62
 
63
- <glyph glyph-name="folder-1" unicode="&#xe81b;" d="M929 511v-393q0-51-37-88t-88-37h-679q-51 0-88 37t-37 88v536q0 51 37 88t88 37h179q51 0 88-37t37-88v-18h375q51 0 88-37t37-88z" horiz-adv-x="928.6" />
64
 
65
- <glyph glyph-name="eye-1" unicode="&#xe81c;" d="M929 314q-85 132-213 197 34-58 34-125 0-104-73-177t-177-73-177 73-73 177q0 67 34 125-128-65-213-197 75-114 187-182t242-68 242 68 187 182z m-402 215q0 11-8 19t-19 7q-70 0-120-50t-50-119q0-12 8-19t19-8 19 8 8 19q0 48 34 82t82 34q11 0 19 8t8 19z m473-215q0-19-11-38-78-129-210-206t-279-77-279 77-210 206q-11 19-11 38t11 39q78 128 210 205t279 78 279-78 210-205q11-20 11-39z" horiz-adv-x="1000" />
66
 
67
- <glyph glyph-name="upload-cloud" unicode="&#xe81d;" d="M714 368q0 8-5 13l-196 196q-5 5-13 5t-13-5l-196-196q-5-6-5-13 0-8 5-13t13-5h125v-196q0-8 5-13t12-5h108q7 0 12 5t5 13v196h125q8 0 13 5t5 13z m357-161q0-89-62-151t-152-63h-607q-103 0-177 73t-73 177q0 72 39 134t105 92q-1 17-1 24 0 118 84 202t202 84q87 0 159-49t105-129q40 35 93 35 59 0 101-42t42-101q0-43-23-77 72-17 119-76t46-133z" horiz-adv-x="1071.4" />
68
 
69
- <glyph glyph-name="user-plus" unicode="&#xe81e;" d="M393 350q-89 0-152 63t-62 151 62 152 152 63 151-63 63-152-63-151-151-63z m536-71h196q7 0 13-6t5-12v-107q0-8-5-13t-13-5h-196v-197q0-7-6-12t-12-6h-107q-8 0-13 6t-5 12v197h-197q-7 0-12 5t-6 13v107q0 7 6 12t12 6h197v196q0 7 5 13t13 5h107q7 0 12-5t6-13v-196z m-411-125q0-29 21-51t50-21h143v-133q-38-28-95-28h-488q-67 0-108 39t-41 106q0 30 2 58t8 61 15 60 24 55 34 45 48 30 62 11q11 0 22-10 44-34 86-51t92-17 92 17 86 51q11 10 22 10 73 0 121-54h-125q-29 0-50-21t-21-50v-107z" horiz-adv-x="1142.9" />
70
 
71
- <glyph glyph-name="gauge" unicode="&#xe81f;" d="M214 207q0 30-21 51t-50 21-51-21-21-51 21-50 51-21 50 21 21 50z m107 250q0 30-20 51t-51 21-50-21-21-51 21-50 50-21 51 21 20 50z m239-268l57 213q3 14-5 27t-21 16-27-3-17-22l-56-213q-33-3-60-25t-35-55q-11-43 11-81t66-50 81 11 50 66q9 33-4 65t-40 51z m369 18q0 30-21 51t-51 21-50-21-21-51 21-50 50-21 51 21 21 50z m-358 357q0 30-20 51t-51 21-50-21-21-51 21-50 50-21 51 21 20 50z m250-107q0 30-20 51t-51 21-50-21-21-51 21-50 50-21 51 21 20 50z m179-250q0-145-79-269-10-17-30-17h-782q-20 0-30 17-79 123-79 269 0 102 40 194t106 160 160 107 194 39 194-39 160-107 106-160 40-194z" horiz-adv-x="1000" />
72
 
73
- <glyph glyph-name="box" unicode="&#xe820;" d="M607 386q0 14-10 25t-26 10h-142q-15 0-26-10t-10-25 10-25 26-11h142q15 0 26 11t10 25z m322 107v-536q0-14-11-25t-25-11h-786q-14 0-25 11t-11 25v536q0 14 11 25t25 11h786q14 0 25-11t11-25z m35 250v-143q0-15-10-25t-25-11h-858q-14 0-25 11t-10 25v143q0 14 10 25t25 11h858q14 0 25-11t10-25z" horiz-adv-x="1000" />
74
 
75
- <glyph glyph-name="plus-circled" unicode="&#xe821;" d="M679 314v72q0 14-11 25t-25 10h-143v143q0 15-11 25t-25 11h-71q-15 0-25-11t-11-25v-143h-143q-14 0-25-10t-10-25v-72q0-14 10-25t25-10h143v-143q0-15 11-25t25-11h71q15 0 25 11t11 25v143h143q14 0 25 10t11 25z m178 36q0-117-57-215t-156-156-215-58-216 58-155 156-58 215 58 215 155 156 216 58 215-58 156-156 57-215z" horiz-adv-x="857.1" />
76
 
77
- <glyph glyph-name="link" unicode="&#xe822;" d="M813 171q0 23-16 38l-116 116q-16 16-38 16-24 0-40-18 1-1 10-10t12-12 9-11 7-14 2-15q0-23-16-38t-38-16q-8 0-15 2t-14 7-11 9-12 12-10 10q-19-17-19-40 0-23 16-38l115-116q15-15 38-15 22 0 38 15l82 81q16 16 16 37z m-393 394q0 22-15 38l-115 115q-16 16-38 16-22 0-38-15l-82-82q-16-15-16-37 0-22 16-38l116-116q15-15 38-15 23 0 40 17-2 2-11 11t-12 12-8 10-7 14-2 16q0 22 15 38t38 15q9 0 16-2t14-7 11-8 12-12 10-11q18 17 18 41z m500-394q0-66-48-113l-82-81q-46-47-113-47-68 0-114 48l-115 115q-46 47-46 114 0 68 49 116l-49 49q-48-49-116-49-67 0-114 47l-116 116q-47 47-47 114t47 113l82 82q47 46 114 46 67 0 114-47l115-116q46-46 46-113 0-69-49-117l49-49q48 49 116 49 67 0 114-47l116-116q47-47 47-114z" horiz-adv-x="928.6" />
78
 
79
- <glyph glyph-name="wrench" unicode="&#xe823;" d="M214 29q0 14-10 25t-25 10-26-10-10-25 10-26 26-10 25 10 10 26z m360 234l-381-381q-21-20-50-20-29 0-51 20l-59 61q-21 20-21 50 0 29 21 51l380 380q22-55 64-97t97-64z m353 243q0-22-12-59-27-75-92-122t-144-46q-104 0-177 73t-73 177 73 176 177 74q32 0 67-10t60-26q9-6 9-15t-9-16l-163-94v-125l108-60q2 2 44 27t75 45 40 20q8 0 13-5t4-14z" horiz-adv-x="928.6" />
80
 
81
- <glyph glyph-name="eye" unicode="&#xe824;" d="M929 314q-85 132-213 197 34-58 34-125 0-104-73-177t-177-73-177 73-73 177q0 67 34 125-128-65-213-197 75-114 187-182t242-68 242 68 187 182z m-402 215q0 11-8 19t-19 7q-70 0-120-50t-50-119q0-11 8-19t19-8 19 8 8 19q0 48 34 82t82 34q11 0 19 8t8 19z m473-215q0-19-11-38-78-129-210-206t-279-77-279 77-210 206q-11 19-11 38t11 39q78 128 210 205t279 78 279-78 210-205q11-20 11-39z" horiz-adv-x="1000" />
82
 
83
- <glyph glyph-name="medkit" unicode="&#xe825;" d="M714 225v107q0 8-5 13t-13 5h-125v125q0 8-5 13t-12 5h-108q-7 0-12-5t-5-13v-125h-125q-8 0-13-5t-5-13v-107q0-8 5-13t13-5h125v-125q0-8 5-13t12-5h108q7 0 12 5t5 13v125h125q8 0 13 5t5 13z m-357 411h286v71h-286v-71z m-214 0v-715h-18q-51 0-88 37t-37 88v465q0 51 37 88t88 37h18z m661 0v-715h-608v715h90v89q0 22 15 38t38 16h322q22 0 38-16t15-38v-89h90z m196-125v-465q0-51-37-88t-88-37h-18v715h18q51 0 88-37t37-88z" horiz-adv-x="1000" />
84
 
85
- <glyph glyph-name="basket" unicode="&#xe826;" d="M357-7q0-29-21-50t-50-22-50 22-22 50 22 50 50 21 50-21 21-50z m500 0q0-29-21-50t-50-22-51 22-21 50 21 50 51 21 50-21 21-50z m72 607v-286q0-13-10-23t-22-12l-583-68q7-34 7-40 0-8-13-35h513q15 0 26-11t10-25-10-25-26-11h-571q-14 0-25 11t-11 25q0 6 5 18t9 20 12 22 8 16l-98 460h-114q-15 0-25 10t-11 25 11 26 25 10h143q9 0 16-3t10-9 8-14 4-14 3-17 3-14h670q14 0 25-11t11-25z" horiz-adv-x="928.6" />
86
 
87
- <glyph glyph-name="check-empty" unicode="&#xe827;" d="M625 707h-464q-37 0-63-26t-27-63v-464q0-37 27-63t63-27h464q37 0 63 27t26 63v464q0 37-26 63t-63 26z m161-89v-464q0-67-47-114t-114-47h-464q-67 0-114 47t-47 114v464q0 66 47 113t114 48h464q66 0 114-48t47-113z" horiz-adv-x="785.7" />
88
 
89
- <glyph glyph-name="doc-text-inv" unicode="&#xe828;" d="M819 584q8-7 16-20h-264v264q13-8 21-16z m-265-91h303v-589q0-23-15-38t-38-16h-750q-23 0-38 16t-16 38v892q0 23 16 38t38 16h446v-304q0-22 16-38t38-15z m89-411v36q0 8-5 13t-13 5h-393q-8 0-13-5t-5-13v-36q0-8 5-13t13-5h393q8 0 13 5t5 13z m0 143v36q0 7-5 12t-13 5h-393q-8 0-13-5t-5-12v-36q0-8 5-13t13-5h393q8 0 13 5t5 13z m0 143v35q0 8-5 13t-13 5h-393q-8 0-13-5t-5-13v-35q0-8 5-13t13-5h393q8 0 13 5t5 13z" horiz-adv-x="857.1" />
90
 
91
- <glyph glyph-name="home" unicode="&#xe829;" d="M786 296v-267q0-15-11-26t-25-10h-214v214h-143v-214h-214q-15 0-25 10t-11 26v267q0 1 0 2t0 2l321 264 321-264q1-1 1-4z m124 39l-34-41q-5-5-12-6h-2q-7 0-12 3l-386 322-386-322q-7-4-13-4-7 2-12 7l-35 41q-4 5-3 13t6 12l401 334q18 15 42 15t43-15l136-114v109q0 8 5 13t13 5h107q8 0 13-5t5-13v-227l122-102q5-5 6-12t-4-13z" horiz-adv-x="928.6" />
92
 
93
- <glyph glyph-name="angle-double-right" unicode="&#xe82a;" d="M332 314q0-7-6-13l-260-260q-5-5-12-5t-13 5l-28 28q-6 6-6 13t6 13l219 219-219 220q-6 5-6 12t6 13l28 28q5 6 13 6t12-6l260-260q6-5 6-13z m214 0q0-7-5-13l-260-260q-6-5-13-5t-13 5l-28 28q-5 6-5 13t5 13l219 219-219 220q-5 5-5 12t5 13l28 28q6 6 13 6t13-6l260-260q5-5 5-13z" horiz-adv-x="571.4" />
94
 
95
- <glyph glyph-name="facebook" unicode="&#xe82b;" d="M535 843v-147h-87q-48 0-65-20t-17-60v-106h164l-22-165h-142v-424h-171v424h-142v165h142v122q0 104 58 161t155 57q82 0 127-7z" horiz-adv-x="571.4" />
96
 
97
- <glyph glyph-name="star" unicode="&#xe82c;" d="M929 489q0-12-15-27l-203-197 48-279q1-4 1-12 0-11-6-19t-17-9q-10 0-22 7l-251 132-250-132q-13-7-23-7-11 0-17 9t-6 19q0 4 1 12l48 279-203 197q-14 15-14 27 0 21 31 26l280 40 126 254q11 23 27 23t28-23l125-254 280-40q32-5 32-26z" horiz-adv-x="928.6" />
98
 
99
- <glyph glyph-name="list" unicode="&#xe82d;" d="M143 118v-107q0-7-5-13t-13-5h-107q-7 0-13 5t-5 13v107q0 7 5 12t13 6h107q7 0 13-6t5-12z m0 214v-107q0-7-5-13t-13-5h-107q-7 0-13 5t-5 13v107q0 7 5 13t13 5h107q7 0 13-5t5-13z m0 214v-107q0-7-5-12t-13-6h-107q-7 0-13 6t-5 12v107q0 8 5 13t13 5h107q7 0 13-5t5-13z m857-428v-107q0-7-5-13t-13-5h-750q-7 0-12 5t-6 13v107q0 7 6 12t12 6h750q7 0 13-6t5-12z m-857 643v-107q0-8-5-13t-13-5h-107q-7 0-13 5t-5 13v107q0 7 5 12t13 6h107q7 0 13-6t5-12z m857-429v-107q0-7-5-13t-13-5h-750q-7 0-12 5t-6 13v107q0 7 6 13t12 5h750q7 0 13-5t5-13z m0 214v-107q0-7-5-12t-13-6h-750q-7 0-12 6t-6 12v107q0 8 6 13t12 5h750q7 0 13-5t5-13z m0 215v-107q0-8-5-13t-13-5h-750q-7 0-12 5t-6 13v107q0 7 6 12t12 6h750q7 0 13-6t5-12z" horiz-adv-x="1000" />
100
 
101
- <glyph glyph-name="up-dir" unicode="&#xe82e;" d="M571 171q0-14-10-25t-25-10h-500q-15 0-25 10t-11 25 11 26l250 250q10 10 25 10t25-10l250-250q10-11 10-26z" horiz-adv-x="571.4" />
102
 
103
- <glyph glyph-name="dot-circled" unicode="&#xe82f;" d="M571 350q0-59-41-101t-101-42-101 42-42 101 42 101 101 42 101-42 41-101z m-142 304q-83 0-153-41t-110-111-41-152 41-152 110-111 153-41 152 41 110 111 41 152-41 152-110 111-152 41z m428-304q0-117-57-215t-156-156-215-58-216 58-155 156-58 215 58 215 155 156 216 58 215-58 156-156 57-215z" horiz-adv-x="857.1" />
104
 
105
- <glyph glyph-name="code" unicode="&#xe830;" d="M344 69l-28-28q-5-5-12-5t-13 5l-260 260q-6 6-6 13t6 13l260 260q5 6 13 6t12-6l28-28q6-5 6-13t-6-12l-219-220 219-219q6-6 6-13t-6-13z m330 596l-208-721q-2-7-9-11t-13-1l-34 9q-8 3-11 9t-2 14l208 720q3 8 9 11t13 2l35-10q7-2 11-9t1-13z m367-364l-260-260q-6-5-13-5t-13 5l-28 28q-5 6-5 13t5 13l219 219-219 220q-5 5-5 12t5 13l28 28q6 6 13 6t13-6l260-260q5-5 5-13t-5-13z" horiz-adv-x="1071.4" />
106
 
107
- <glyph glyph-name="bug" unicode="&#xe831;" d="M911 314q0-14-11-25t-25-10h-125q0-96-37-162l116-117q10-11 10-25t-10-25q-10-11-25-11t-26 11l-110 110q-3-3-8-7t-24-16-36-21-46-16-54-7v500h-71v-500q-29 0-57 7t-49 19-36 22-25 18l-8 8-102-116q-11-12-27-12-13 0-24 9-11 10-11 25t8 26l113 127q-32 63-32 153h-125q-15 0-25 10t-11 25 11 25 25 11h125v164l-97 97q-11 10-11 25t11 25 25 10 25-10l97-97h471l96 97q11 10 25 10t26-10 10-25-10-25l-97-97v-164h125q15 0 25-11t11-25z m-268 322h-357q0 74 52 126t126 52 127-52 52-126z" horiz-adv-x="928.6" />
108
 
109
- <glyph glyph-name="heartbeat" unicode="&#xe832;" d="M714 279h170q-2-4-5-6t-5-4l-2-3-347-335q-10-10-25-10t-25 10l-348 336q-3 2-11 12h205q13 0 22 7t13 19l39 157 106-372q3-11 13-18t22-8q11 0 21 8t13 18l81 271 31-63q11-19 32-19z m286 238q0-80-57-167h-206l-62 123q-5 10-15 15t-20 5q-25-3-31-26l-72-240-110 383q-3 11-13 18t-22 8-21-8-13-19l-64-259h-236q-58 87-58 167 0 123 71 192t196 70q34 0 70-12t67-33 54-38 42-38q20 20 42 38t54 38 67 33 70 12q125 0 196-70t71-192z" horiz-adv-x="1000" />
110
 
111
- <glyph glyph-name="connectdevelop" unicode="&#xe833;" d="M1143 351q0-12-7-21t-19-11l-114-198q1-5 1-10 0-12-7-20t-18-11l-107-188q1-5 1-9 0-13-9-22t-22-10q-14 0-23 10h-224q-9-11-24-11t-24 11h-222q-10-11-24-11-13 0-23 9t-9 23q0 4 2 11l-107 187q-12 2-19 11t-7 20q0 5 2 10l-115 198q-11 3-18 12t-7 20q0 11 8 20t18 11l111 192q0 0 0 1t0 2q0 20 19 29l116 202q-2 6-2 10 0 14 10 23t22 9q14 0 24-12h221q9 12 24 12t24-12h223q10 12 24 12 13 0 22-9t10-23q0-3-2-10l115-200q13 0 22-9t9-22q0-7-4-15l104-181q11-2 18-11t7-19z m-550-446h217l-191 197h-79l-191-197h201q10 9 21 9t22-9z m-530 453q0-2 0-7 0-6-1-9l116-201q1 0 3 0t3-2l2-1 105 111v194l-104 108q-7-5-16-6z m487 437h-216l106-111 309 111h-156q-9-9-22-9t-21 9z m393-676q0 3 2 6l-35 38-10-44h43z m-60 0l13 59-141 148-165-171 35-36h258z m-49-205l9 15 36 173h-238l186-191q4 2 7 3z m-511-9h2l191 197h-208v-187l2-3q8-3 13-7z m-15 214h224l36 37-172 179-88-93v-123z m-108 0h91v105l-93-98q2-5 2-7z m0 460q0 0 0-1t0-1q0-9-4-16l95-99v150z m108 39v-173l85-88 166 175-124 132z m2 170l-2-4v-148l114 42-106 112q-3-1-6-2z m497 7h-8l-347-125 119-125z m-236-274l-166-176 174-178 165 171z m-187-174l-76 78v-158z m195-204l-23-24h47z m188 195l133-140 73 348-1 3-1 0z m192 223q-5 7-5 16v1l-120 210q-3 1-8 3l-243-259 173-182z m-668 69v124l-91-157z m0-528h-91l91-158v158z m606 0l-27-127 73 127h-46z m68 39l115 202q-1 5-1 7 0 1 2 9l-96 166-72-342 43-46q3 2 9 4z" horiz-adv-x="1142.9" />
112
 
113
- <glyph glyph-name="trash-empty" unicode="&#xe834;" d="M286 439v-321q0-8-5-13t-13-5h-36q-8 0-13 5t-5 13v321q0 8 5 13t13 5h36q8 0 13-5t5-13z m143 0v-321q0-8-5-13t-13-5h-36q-8 0-13 5t-5 13v321q0 8 5 13t13 5h36q8 0 13-5t5-13z m142 0v-321q0-8-5-13t-12-5h-36q-8 0-13 5t-5 13v321q0 8 5 13t13 5h36q7 0 12-5t5-13z m72-404v529h-500v-529q0-12 4-22t8-15 6-5h464q2 0 6 5t8 15 4 22z m-375 601h250l-27 65q-4 5-9 6h-177q-6-1-10-6z m518-18v-36q0-8-5-13t-13-5h-54v-529q0-46-26-80t-63-34h-464q-37 0-63 33t-27 79v531h-53q-8 0-13 5t-5 13v36q0 8 5 13t13 5h172l39 93q9 21 31 35t44 15h178q22 0 44-15t30-35l39-93h173q8 0 13-5t5-13z" horiz-adv-x="785.7" />
114
 
115
- <glyph glyph-name="download-cloud-1" unicode="&#xe835;" d="M714 332q0 8-5 13t-13 5h-125v196q0 8-5 13t-12 5h-108q-7 0-12-5t-5-13v-196h-125q-8 0-13-5t-5-13q0-8 5-13l196-196q5-5 13-5t13 5l196 196q5 6 5 13z m357-125q0-89-62-151t-152-63h-607q-103 0-177 73t-73 177q0 72 39 134t105 92q-1 17-1 24 0 118 84 202t202 84q87 0 159-49t105-129q40 35 93 35 59 0 101-42t42-101q0-43-23-77 72-17 119-76t46-133z" horiz-adv-x="1071.4" />
116
 
117
- <glyph glyph-name="github" unicode="&#xe836;" d="M357 171q0-22-7-45t-24-43-40-19-41 19-24 43-7 45 7 46 24 43 41 19 40-19 24-43 7-46z m357 0q0-22-7-45t-24-43-40-19-41 19-24 43-7 45 7 46 24 43 41 19 40-19 24-43 7-46z m90 0q0 67-39 114t-104 47q-23 0-109-12-40-6-88-6t-87 6q-85 12-109 12-66 0-104-47t-39-114q0-49 18-85t45-58 68-33 78-17 83-4h94q46 0 83 4t78 17 69 33 45 58 18 85z m125 99q0-116-34-185-22-43-59-74t-79-48-95-27-96-12-93-3q-43 0-79 2t-82 7-85 17-77 28-67 46-48 64q-35 69-35 185 0 132 76 221-15 45-15 94 0 65 28 122 61 0 106-22t106-69q82 20 172 20 83 0 156-18 59 46 105 67t105 22q29-57 29-122 0-48-15-93 76-90 76-222z" horiz-adv-x="928.6" />
118
 
119
- <glyph glyph-name="cog" unicode="&#xe837;" d="M571 350q0 59-41 101t-101 42-101-42-42-101 42-101 101-42 101 42 41 101z m286 61v-124q0-7-4-13t-11-7l-104-16q-10-30-21-51 19-27 59-77 6-6 6-13t-5-13q-15-21-55-61t-53-39q-7 0-14 5l-77 60q-25-13-51-21-9-76-16-104-4-16-20-16h-124q-8 0-14 5t-6 12l-16 103q-27 9-50 21l-79-60q-6-5-14-5-8 0-14 6-70 64-92 94-4 5-4 13 0 6 5 12 8 12 28 37t30 40q-15 28-23 55l-102 15q-7 1-11 7t-5 13v124q0 7 5 13t10 7l104 16q8 25 22 51-23 32-60 77-6 7-6 14 0 5 5 12 15 20 55 60t53 40q7 0 15-5l77-60q24 13 50 21 9 76 17 104 3 15 20 15h124q7 0 13-4t7-12l15-103q28-9 50-21l80 60q5 5 13 5 7 0 14-5 72-67 92-95 4-5 4-13 0-6-4-12-9-12-29-38t-30-39q14-28 23-55l102-15q7-1 12-7t4-13z" horiz-adv-x="857.1" />
120
 
121
- <glyph glyph-name="lock" unicode="&#xe838;" d="M179 421h285v108q0 59-42 101t-101 41-101-41-41-101v-108z m464-53v-322q0-22-16-37t-38-16h-535q-23 0-38 16t-16 37v322q0 22 16 38t38 15h17v108q0 102 74 176t176 74 177-74 73-176v-108h18q23 0 38-15t16-38z" horiz-adv-x="642.9" />
122
 
123
- <glyph glyph-name="twitter" unicode="&#xe839;" d="M904 622q-37-54-90-93 0-8 0-23 0-73-21-145t-64-139-103-117-144-82-181-30q-151 0-276 81 19-3 43-3 126 0 224 77-59 2-105 36t-64 89q19-2 34-2 24 0 48 6-63 13-104 62t-41 115v2q38-21 82-23-37 25-59 64t-22 86q0 49 25 91 68-83 164-133t208-55q-5 21-5 41 0 75 53 127t127 53q79 0 132-57 61 12 114 44-20-64-79-100 52 6 104 28z" horiz-adv-x="928.6" />
124
 
125
- <glyph glyph-name="certificate" unicode="&#xe83a;" d="M768 350l77-75q17-16 11-39-7-23-29-29l-105-27 30-103q6-23-11-39-16-18-39-11l-104 30-27-105q-5-23-28-30-7-1-11-1-17 0-28 13l-75 77-76-77q-15-17-39-12-23 7-28 30l-27 105-104-30q-23-7-39 11-17 16-10 39l29 103-105 27q-22 6-29 29-6 23 11 39l77 75-77 75q-17 16-11 39 7 23 29 29l105 27-29 103q-7 23 10 39 16 18 39 11l104-29 27 104q5 23 28 29 23 7 39-11l76-77 75 77q16 17 39 11 23-6 28-29l27-104 104 29q23 7 39-11 17-16 11-