Version Description
- Added AAM Content Teaser extension
- Added LIMIT option to Posts & Pages access forms to support Teaser feature
- Bug fixing
- Improved UI
- Added ability to show/hide admin bar with show_admin_bar capability
Download this release
Release Info
Developer | vasyl_m |
Plugin | Advanced Access Manager |
Version | 3.7.5 |
Comparing to | |
See all releases |
Code changes from version 3.7.1 to 3.7.5
- Application/Backend/Feature/Metabox.php +10 -0
- Application/Backend/Feature/ProductList.php +14 -4
- Application/Backend/Feature/Redirect.php +11 -7
- Application/Backend/Feature/Teaser.php +112 -0
- Application/Backend/Feature/Utility.php +1 -1
- Application/Backend/View.php +1 -0
- Application/Backend/phtml/object/post.phtml +15 -3
- Application/Backend/phtml/object/redirect.phtml +1 -1
- Application/Backend/phtml/object/teaser.phtml +34 -0
- Application/Backend/phtml/partial/teaser.phtml +6 -0
- Application/Core/API.php +1 -1
- Application/Frontend/Manager.php +58 -0
- aam.php +1 -1
- media/css/aam.css +14 -0
- media/js/aam-ui.js +72 -11
- readme.txt +15 -211
Application/Backend/Feature/Metabox.php
CHANGED
@@ -173,6 +173,8 @@ class AAM_Backend_Feature_Metabox extends AAM_Backend_Feature_Abstract {
|
|
173 |
* @return type
|
174 |
*/
|
175 |
public function getMetaboxList() {
|
|
|
|
|
176 |
$cache = AAM_Core_API::getOption('aam_metabox_cache', array());
|
177 |
$subject = AAM_Backend_View::getSubject();
|
178 |
|
@@ -187,6 +189,14 @@ class AAM_Backend_Feature_Metabox extends AAM_Backend_Feature_Abstract {
|
|
187 |
$response = $cache;
|
188 |
}
|
189 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
190 |
return $response;
|
191 |
}
|
192 |
|
173 |
* @return type
|
174 |
*/
|
175 |
public function getMetaboxList() {
|
176 |
+
global $wp_post_types;
|
177 |
+
|
178 |
$cache = AAM_Core_API::getOption('aam_metabox_cache', array());
|
179 |
$subject = AAM_Backend_View::getSubject();
|
180 |
|
189 |
$response = $cache;
|
190 |
}
|
191 |
|
192 |
+
//filter non-existing metaboxes
|
193 |
+
foreach(array_keys($response) as $id) {
|
194 |
+
if (!in_array($id, array('dashboard', 'widgets'))
|
195 |
+
&& empty($wp_post_types[$id])) {
|
196 |
+
unset($response[$id]);
|
197 |
+
}
|
198 |
+
}
|
199 |
+
|
200 |
return $response;
|
201 |
}
|
202 |
|
Application/Backend/Feature/ProductList.php
CHANGED
@@ -29,6 +29,17 @@ return array(
|
|
29 |
'status' => AAM_Core_Repository::getInstance()->extensionStatus('AAM Redirect'),
|
30 |
'version' => AAM_Core_Repository::getInstance()->getExtensionVersion('AAM Redirect')
|
31 |
),
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
32 |
array(
|
33 |
'title' => 'AAM Role Hierarchy',
|
34 |
'id' => 'AAM Role Hierarchy',
|
@@ -54,10 +65,9 @@ return array(
|
|
54 |
'title' => 'AAM Complete Package',
|
55 |
'id' => 'AAM Complete Package',
|
56 |
'type' => 'commercial',
|
57 |
-
'price' => '$
|
58 |
-
'
|
59 |
-
'
|
60 |
-
'storeURL' => 'https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=AJ6JMQ4CGSS9E',
|
61 |
'status' => AAM_Core_Repository::getInstance()->extensionStatus('AAM Complete Package'),
|
62 |
'version' => AAM_Core_Repository::getInstance()->getExtensionVersion('AAM Complete Package')
|
63 |
),
|
29 |
'status' => AAM_Core_Repository::getInstance()->extensionStatus('AAM Redirect'),
|
30 |
'version' => AAM_Core_Repository::getInstance()->getExtensionVersion('AAM Redirect')
|
31 |
),
|
32 |
+
array(
|
33 |
+
'title' => 'AAM Content Teaser',
|
34 |
+
'id' => 'AAM Content Teaser',
|
35 |
+
'type' => 'commercial',
|
36 |
+
'price' => '$10 <small>USD</small>',
|
37 |
+
'new' => true,
|
38 |
+
'description' => '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',
|
65 |
'title' => 'AAM Complete Package',
|
66 |
'id' => 'AAM Complete Package',
|
67 |
'type' => 'commercial',
|
68 |
+
'price' => '$70 <small>USD</small>',
|
69 |
+
'description' => 'Get list of all available premium extensions in one package and <strong>save $10 USD</strong>.',
|
70 |
+
'storeURL' => 'https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=THJWEJR3URR8L',
|
|
|
71 |
'status' => AAM_Core_Repository::getInstance()->extensionStatus('AAM Complete Package'),
|
72 |
'version' => AAM_Core_Repository::getInstance()->getExtensionVersion('AAM Complete Package')
|
73 |
),
|
Application/Backend/Feature/Redirect.php
CHANGED
@@ -20,7 +20,7 @@ class AAM_Backend_Feature_Redirect extends AAM_Backend_Feature_Abstract {
|
|
20 |
*/
|
21 |
public function save() {
|
22 |
$param = AAM_Core_Request::post('param');
|
23 |
-
$value =
|
24 |
$subject = AAM_Backend_View::getSubject();
|
25 |
|
26 |
if ($this->isAdministrator()) {
|
@@ -59,12 +59,16 @@ class AAM_Backend_Feature_Redirect extends AAM_Backend_Feature_Abstract {
|
|
59 |
* @return type
|
60 |
*/
|
61 |
public function getOption($option, $default = null) {
|
62 |
-
|
63 |
-
|
64 |
-
|
65 |
-
$
|
66 |
-
|
67 |
-
|
|
|
|
|
|
|
|
|
68 |
}
|
69 |
|
70 |
/**
|
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->isAdministrator()) {
|
59 |
* @return type
|
60 |
*/
|
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
|
68 |
+
);
|
69 |
+
}
|
70 |
+
|
71 |
+
return $value;
|
72 |
}
|
73 |
|
74 |
/**
|
Application/Backend/Feature/Teaser.php
ADDED
@@ -0,0 +1,112 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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 |
+
* Content teaser manager
|
12 |
+
*
|
13 |
+
* @package AAM
|
14 |
+
* @author Vasyl Martyniuk <vasyl@vasyltech.com>
|
15 |
+
*/
|
16 |
+
class AAM_Backend_Feature_Teaser 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->isAdministrator()) {
|
27 |
+
AAM_Core_Config::set($param, $value);
|
28 |
+
} else {
|
29 |
+
do_action('aam-action-teaser-save', $subject, $param, $value);
|
30 |
+
}
|
31 |
+
|
32 |
+
return json_encode(array('status' => 'success'));
|
33 |
+
}
|
34 |
+
|
35 |
+
/**
|
36 |
+
*
|
37 |
+
* @return type
|
38 |
+
*/
|
39 |
+
public function reset() {
|
40 |
+
do_action('aam-action-teaser-reset', AAM_Backend_View::getSubject());
|
41 |
+
|
42 |
+
return json_encode(array('status' => 'success'));
|
43 |
+
}
|
44 |
+
|
45 |
+
/**
|
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 |
+
/**
|
57 |
+
*
|
58 |
+
* @param type $option
|
59 |
+
* @return type
|
60 |
+
*/
|
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
|
68 |
+
);
|
69 |
+
}
|
70 |
+
|
71 |
+
return $value;
|
72 |
+
}
|
73 |
+
|
74 |
+
/**
|
75 |
+
* @inheritdoc
|
76 |
+
*/
|
77 |
+
public static function getAccessOption() {
|
78 |
+
return 'feature.teaser.capability';
|
79 |
+
}
|
80 |
+
|
81 |
+
/**
|
82 |
+
* @inheritdoc
|
83 |
+
*/
|
84 |
+
public static function getTemplate() {
|
85 |
+
return 'object/teaser.phtml';
|
86 |
+
}
|
87 |
+
|
88 |
+
/**
|
89 |
+
* Register Contact/Hire feature
|
90 |
+
*
|
91 |
+
* @return void
|
92 |
+
*
|
93 |
+
* @access public
|
94 |
+
*/
|
95 |
+
public static function register() {
|
96 |
+
$cap = AAM_Core_Config::get(self::getAccessOption(), 'administrator');
|
97 |
+
|
98 |
+
AAM_Backend_Feature::registerFeature((object) array(
|
99 |
+
'uid' => 'teaser',
|
100 |
+
'position' => 40,
|
101 |
+
'title' => __('Content Teaser', 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 |
+
));
|
110 |
+
}
|
111 |
+
|
112 |
+
}
|
Application/Backend/Feature/Utility.php
CHANGED
@@ -91,7 +91,7 @@ class AAM_Backend_Feature_Utility extends AAM_Backend_Feature_Abstract {
|
|
91 |
|
92 |
AAM_Backend_Feature::registerFeature((object) array(
|
93 |
'uid' => 'utilities',
|
94 |
-
'position' =>
|
95 |
'title' => __('Utilities', AAM_KEY),
|
96 |
'capability' => $cap,
|
97 |
'subjects' => array(
|
91 |
|
92 |
AAM_Backend_Feature::registerFeature((object) array(
|
93 |
'uid' => 'utilities',
|
94 |
+
'position' => 100,
|
95 |
'title' => __('Utilities', AAM_KEY),
|
96 |
'capability' => $cap,
|
97 |
'subjects' => array(
|
Application/Backend/View.php
CHANGED
@@ -56,6 +56,7 @@ class AAM_Backend_View {
|
|
56 |
AAM_Backend_Feature_Capability::register();
|
57 |
AAM_Backend_Feature_Post::register();
|
58 |
AAM_Backend_Feature_Redirect::register();
|
|
|
59 |
AAM_Backend_Feature_Extension::register();
|
60 |
AAM_Backend_Feature_Utility::register();
|
61 |
AAM_Backend_Feature_Contact::register();
|
56 |
AAM_Backend_Feature_Capability::register();
|
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();
|
Application/Backend/phtml/object/post.phtml
CHANGED
@@ -9,7 +9,7 @@
|
|
9 |
</div>
|
10 |
</div>
|
11 |
<?php } ?>
|
12 |
-
|
13 |
<?php $current = $this->getCurrentPost(); ?>
|
14 |
|
15 |
<div class="aam-post-breadcrumb">
|
@@ -31,7 +31,7 @@
|
|
31 |
<span><?php echo __('Settings inherited from', AAM_KEY); ?> <strong id="post-parent"></strong></span>
|
32 |
<span></span>
|
33 |
</div>
|
34 |
-
|
35 |
<?php if (!is_null($current)) { ?>
|
36 |
<input type="hidden" id="load-post" value="<?php echo $current->ID; ?>" />
|
37 |
<?php } ?>
|
@@ -91,6 +91,17 @@
|
|
91 |
</div>
|
92 |
</td>
|
93 |
</tr>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
94 |
<tr>
|
95 |
<td>
|
96 |
<strong class="aam-block aam-highlight text-uppercase"><?php echo __('Comment', AAM_KEY); ?></strong>
|
@@ -150,4 +161,5 @@
|
|
150 |
</div>
|
151 |
</div>
|
152 |
</div>
|
153 |
-
<?php
|
|
9 |
</div>
|
10 |
</div>
|
11 |
<?php } ?>
|
12 |
+
|
13 |
<?php $current = $this->getCurrentPost(); ?>
|
14 |
|
15 |
<div class="aam-post-breadcrumb">
|
31 |
<span><?php echo __('Settings inherited from', AAM_KEY); ?> <strong id="post-parent"></strong></span>
|
32 |
<span></span>
|
33 |
</div>
|
34 |
+
|
35 |
<?php if (!is_null($current)) { ?>
|
36 |
<input type="hidden" id="load-post" value="<?php echo $current->ID; ?>" />
|
37 |
<?php } ?>
|
91 |
</div>
|
92 |
</td>
|
93 |
</tr>
|
94 |
+
<tr>
|
95 |
+
<td>
|
96 |
+
<strong class="aam-block aam-highlight text-uppercase"><?php echo __('LIMIT', AAM_KEY); ?></strong>
|
97 |
+
<p class="aam-hint" data-dynamic-post-label="If checked, show defined in Content Teaser tab teaser message while reading %s instead of its content."></p>
|
98 |
+
</td>
|
99 |
+
<td>
|
100 |
+
<div class="aam-row-actions">
|
101 |
+
<i class="aam-row-action text-muted icon-check-empty" data-property="frontend.limit"></i>
|
102 |
+
</div>
|
103 |
+
</td>
|
104 |
+
</tr>
|
105 |
<tr>
|
106 |
<td>
|
107 |
<strong class="aam-block aam-highlight text-uppercase"><?php echo __('Comment', AAM_KEY); ?></strong>
|
161 |
</div>
|
162 |
</div>
|
163 |
</div>
|
164 |
+
<?php
|
165 |
+
}
|
Application/Backend/phtml/object/redirect.phtml
CHANGED
@@ -45,7 +45,7 @@
|
|
45 |
|
46 |
<div class="form-group aam-redirect-action frontend-redirect" id="frontend-message-action" style="display: <?php echo ($frontendType == 'message' ? 'block' : 'none'); ?>;">
|
47 |
<label for="frontend-message"><?php echo __('Customized Message', AAM_KEY); ?></label>
|
48 |
-
<textarea class="form-control" name="frontend.redirect.message" rows="3" placeholder="<?php echo __('Enter message...', AAM_KEY); ?>"><?php echo $this->getOption('frontend.redirect.message'); ?></textarea>
|
49 |
</div>
|
50 |
|
51 |
<div class="form-group aam-redirect-action frontend-redirect" id="frontend-page-action" style="display: <?php echo ($frontendType == 'page' ? 'block' : 'none'); ?>;">
|
45 |
|
46 |
<div class="form-group aam-redirect-action frontend-redirect" id="frontend-message-action" style="display: <?php echo ($frontendType == 'message' ? 'block' : 'none'); ?>;">
|
47 |
<label for="frontend-message"><?php echo __('Customized Message', AAM_KEY); ?></label>
|
48 |
+
<textarea class="form-control" name="frontend.redirect.message" rows="3" placeholder="<?php echo __('Enter message...', AAM_KEY); ?>"><?php echo stripslashes($this->getOption('frontend.redirect.message')); ?></textarea>
|
49 |
</div>
|
50 |
|
51 |
<div class="form-group aam-redirect-action frontend-redirect" id="frontend-page-action" style="display: <?php echo ($frontendType == 'page' ? 'block' : 'none'); ?>;">
|
Application/Backend/phtml/object/teaser.phtml
ADDED
@@ -0,0 +1,34 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php if (defined('AAM_KEY')) { ?>
|
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>
|
9 |
+
</div>
|
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>
|
17 |
+
<textarea class="form-control" name="frontend.teaser.message" rows="3" placeholder="<?php echo __('Enter teaser message...', AAM_KEY); ?>"><?php echo stripslashes($this->getOption('frontend.teaser.message')); ?></textarea>
|
18 |
+
</div>
|
19 |
+
<div class="checkbox">
|
20 |
+
<label>
|
21 |
+
<input type="checkbox" name="frontend.teaser.excerpt" value="1" <?php echo intval($this->getOption('frontend.teaser.excerpt')) ? 'checked' : ''; ?> />
|
22 |
+
<?php echo __('Add excerpt before teaser message', AAM_KEY); ?>
|
23 |
+
</label>
|
24 |
+
</div>
|
25 |
+
</div>
|
26 |
+
<?php } else { ?>
|
27 |
+
<p class="aam-notification">
|
28 |
+
<?php echo 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>
|
32 |
+
</div>
|
33 |
+
</div>
|
34 |
+
<?php }
|
Application/Backend/phtml/partial/teaser.phtml
ADDED
@@ -0,0 +1,6 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
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 }
|
Application/Core/API.php
CHANGED
@@ -257,7 +257,7 @@ final class AAM_Core_API {
|
|
257 |
);
|
258 |
}
|
259 |
|
260 |
-
return $message;
|
261 |
}
|
262 |
|
263 |
/**
|
257 |
);
|
258 |
}
|
259 |
|
260 |
+
return stripslashes($message);
|
261 |
}
|
262 |
|
263 |
/**
|
Application/Frontend/Manager.php
CHANGED
@@ -47,6 +47,10 @@ class AAM_Frontend_Manager {
|
|
47 |
add_filter('wp_authenticate_user', array($this, 'authenticate'), 1, 2);
|
48 |
//add post filter for LIST restriction
|
49 |
add_filter('the_posts', array($this, 'thePosts'), 999, 2);
|
|
|
|
|
|
|
|
|
50 |
}
|
51 |
}
|
52 |
|
@@ -201,6 +205,25 @@ class AAM_Frontend_Manager {
|
|
201 |
|
202 |
return $open;
|
203 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
204 |
|
205 |
/**
|
206 |
* Control User Block flag
|
@@ -256,6 +279,41 @@ class AAM_Frontend_Manager {
|
|
256 |
return $filtered;
|
257 |
}
|
258 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
259 |
/**
|
260 |
* Check if user is post author
|
261 |
*
|
47 |
add_filter('wp_authenticate_user', array($this, 'authenticate'), 1, 2);
|
48 |
//add post filter for LIST restriction
|
49 |
add_filter('the_posts', array($this, 'thePosts'), 999, 2);
|
50 |
+
//filter post content
|
51 |
+
add_filter('the_content', array($this, 'theContent'), 999);
|
52 |
+
//admin bar
|
53 |
+
$this->checkAdminBar();
|
54 |
}
|
55 |
}
|
56 |
|
205 |
|
206 |
return $open;
|
207 |
}
|
208 |
+
|
209 |
+
/**
|
210 |
+
* Check admin bar
|
211 |
+
*
|
212 |
+
* Make sure that current user can see admin bar
|
213 |
+
*
|
214 |
+
* @return void
|
215 |
+
*
|
216 |
+
* @access public
|
217 |
+
*/
|
218 |
+
public function checkAdminBar() {
|
219 |
+
$caps = AAM_Core_API::getAllCapabilities();
|
220 |
+
|
221 |
+
if (isset($caps['show_admin_bar'])) {
|
222 |
+
if (!AAM::getUser()->hasCapability('show_admin_bar')) {
|
223 |
+
show_admin_bar(false);
|
224 |
+
}
|
225 |
+
}
|
226 |
+
}
|
227 |
|
228 |
/**
|
229 |
* Control User Block flag
|
279 |
return $filtered;
|
280 |
}
|
281 |
|
282 |
+
/**
|
283 |
+
*
|
284 |
+
* @global WP_Post $post
|
285 |
+
* @param type $content
|
286 |
+
*
|
287 |
+
* @return string
|
288 |
+
*
|
289 |
+
* @access public
|
290 |
+
*/
|
291 |
+
public function theContent($content) {
|
292 |
+
global $post;
|
293 |
+
|
294 |
+
$object = AAM::getUser()->getObject('post', $post->ID);
|
295 |
+
|
296 |
+
if ($object->has('frontend.limit')) {
|
297 |
+
$message = apply_filters(
|
298 |
+
'aam-filter-teaser-option',
|
299 |
+
AAM_Core_Config::get("frontend.teaser.message"),
|
300 |
+
"frontend.teaser.message",
|
301 |
+
AAM::getUser()
|
302 |
+
);
|
303 |
+
$excerpt = apply_filters(
|
304 |
+
'aam-filter-teaser-option',
|
305 |
+
AAM_Core_Config::get("frontend.teaser.excerpt"),
|
306 |
+
"frontend.teaser.excerpt",
|
307 |
+
AAM::getUser()
|
308 |
+
);
|
309 |
+
|
310 |
+
$content = (intval($excerpt) ? $post->post_excerpt : '');
|
311 |
+
$content .= stripslashes($message);
|
312 |
+
}
|
313 |
+
|
314 |
+
return $content;
|
315 |
+
}
|
316 |
+
|
317 |
/**
|
318 |
* Check if user is post author
|
319 |
*
|
aam.php
CHANGED
@@ -3,7 +3,7 @@
|
|
3 |
/**
|
4 |
Plugin Name: Advanced Access Manager
|
5 |
Description: Manage User and Role Access to WordPress Backend and Frontend.
|
6 |
-
Version: 3.7.
|
7 |
Author: Vasyl Martyniuk <vasyl@vasyltech.com>
|
8 |
Author URI: https://www.vasyltech.com
|
9 |
|
3 |
/**
|
4 |
Plugin Name: Advanced Access Manager
|
5 |
Description: Manage User and Role Access to WordPress Backend and Frontend.
|
6 |
+
Version: 3.7.5
|
7 |
Author: Vasyl Martyniuk <vasyl@vasyltech.com>
|
8 |
Author URI: https://www.vasyltech.com
|
9 |
|
media/css/aam.css
CHANGED
@@ -913,4 +913,18 @@ input[type=radio]:checked + label:before {
|
|
913 |
display: inline !important;
|
914 |
float: none !important;
|
915 |
width: auto !important;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
916 |
}
|
913 |
display: inline !important;
|
914 |
float: none !important;
|
915 |
width: auto !important;
|
916 |
+
}
|
917 |
+
|
918 |
+
/* Custom admin theme */
|
919 |
+
.postbox a.btn {
|
920 |
+
color: #FFFFFF !important;
|
921 |
+
}
|
922 |
+
.panel-heading a {
|
923 |
+
color: #333333 !important;
|
924 |
+
}
|
925 |
+
|
926 |
+
/* Slate pro admin */
|
927 |
+
.postbox {
|
928 |
+
padding: 0 !important;
|
929 |
+
border: 1px solid #e5e5e5 !important;
|
930 |
}
|
media/js/aam-ui.js
CHANGED
@@ -93,7 +93,6 @@
|
|
93 |
}).html('<i class="icon-plus"></i> ' + aam.__('Create'))
|
94 |
.bind('click', function (event) {
|
95 |
event.preventDefault();
|
96 |
-
|
97 |
$('#add-role-modal').modal('show');
|
98 |
});
|
99 |
|
@@ -497,21 +496,24 @@
|
|
497 |
switch (action) {
|
498 |
case 'manage':
|
499 |
$(container).append($('<i/>', {
|
500 |
-
'class': 'aam-row-action icon-cog text-info'
|
501 |
}).bind('click', function () {
|
502 |
-
|
503 |
-
|
|
|
|
|
504 |
'<strong>' + data[2] + '</strong>'
|
505 |
-
|
506 |
-
|
507 |
-
|
508 |
-
|
509 |
-
|
510 |
-
|
|
|
511 |
}).attr({
|
512 |
'data-toggle': "tooltip",
|
513 |
'title': aam.__('Manage User')
|
514 |
-
}));
|
515 |
break;
|
516 |
|
517 |
case 'no-manage':
|
@@ -607,6 +609,8 @@
|
|
607 |
$('tbody tr', '#user-list').each(function () {
|
608 |
if ($('strong', $(this)).length) {
|
609 |
var highlight = $('strong', $(this));
|
|
|
|
|
610 |
highlight.replaceWith('<span>' + highlight.text() + '</span>');
|
611 |
}
|
612 |
});
|
@@ -1623,6 +1627,63 @@
|
|
1623 |
|
1624 |
})(jQuery);
|
1625 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1626 |
/**
|
1627 |
* Extensions Interface
|
1628 |
*
|
93 |
}).html('<i class="icon-plus"></i> ' + aam.__('Create'))
|
94 |
.bind('click', function (event) {
|
95 |
event.preventDefault();
|
|
|
96 |
$('#add-role-modal').modal('show');
|
97 |
});
|
98 |
|
496 |
switch (action) {
|
497 |
case 'manage':
|
498 |
$(container).append($('<i/>', {
|
499 |
+
'class': 'aam-row-action icon-cog ' + (isCurrent(data[0]) ? 'text-muted': 'text-info')
|
500 |
}).bind('click', function () {
|
501 |
+
if (!$(this).prop('disabled')) {
|
502 |
+
$(this).prop('disabled', true);
|
503 |
+
aam.setSubject('user', data[0], data[2]);
|
504 |
+
$('td:eq(0) span', row).replaceWith(
|
505 |
'<strong>' + data[2] + '</strong>'
|
506 |
+
);
|
507 |
+
$('i.icon-cog', container).attr('class', 'aam-row-action icon-spin4 animate-spin');
|
508 |
+
aam.fetchContent();
|
509 |
+
$('i.icon-spin4', container).attr('class', 'aam-row-action icon-cog text-muted');
|
510 |
+
//make sure that there is no way user add's new capability
|
511 |
+
$('#add-capability').hide();
|
512 |
+
}
|
513 |
}).attr({
|
514 |
'data-toggle': "tooltip",
|
515 |
'title': aam.__('Manage User')
|
516 |
+
})).prop('disabled', (isCurrent(data[0]) ? true: false));
|
517 |
break;
|
518 |
|
519 |
case 'no-manage':
|
609 |
$('tbody tr', '#user-list').each(function () {
|
610 |
if ($('strong', $(this)).length) {
|
611 |
var highlight = $('strong', $(this));
|
612 |
+
$('.icon-cog', $(this)).toggleClass('text-muted text-info');
|
613 |
+
$('.icon-cog', $(this)).prop('disabled', false);
|
614 |
highlight.replaceWith('<span>' + highlight.text() + '</span>');
|
615 |
}
|
616 |
});
|
1627 |
|
1628 |
})(jQuery);
|
1629 |
|
1630 |
+
/**
|
1631 |
+
* Teaser Interface
|
1632 |
+
*
|
1633 |
+
* @param {jQuery} $
|
1634 |
+
*
|
1635 |
+
* @returns {void}
|
1636 |
+
*/
|
1637 |
+
(function ($) {
|
1638 |
+
|
1639 |
+
/**
|
1640 |
+
*
|
1641 |
+
* @param {type} param
|
1642 |
+
* @param {type} value
|
1643 |
+
* @returns {undefined}
|
1644 |
+
*/
|
1645 |
+
function save(param, value) {
|
1646 |
+
$.ajax(aamLocal.ajaxurl, {
|
1647 |
+
type: 'POST',
|
1648 |
+
dataType: 'json',
|
1649 |
+
data: {
|
1650 |
+
action: 'aam',
|
1651 |
+
sub_action: 'Teaser.save',
|
1652 |
+
_ajax_nonce: aamLocal.nonce,
|
1653 |
+
subject: aam.getSubject().type,
|
1654 |
+
subjectId: aam.getSubject().id,
|
1655 |
+
param: param,
|
1656 |
+
value: value
|
1657 |
+
},
|
1658 |
+
error: function () {
|
1659 |
+
aam.notification('danger', aam.__('Application error'));
|
1660 |
+
}
|
1661 |
+
});
|
1662 |
+
}
|
1663 |
+
/**
|
1664 |
+
*
|
1665 |
+
* @returns {undefined}
|
1666 |
+
*/
|
1667 |
+
function initialize() {
|
1668 |
+
var container = '#teaser-content';
|
1669 |
+
|
1670 |
+
$('input, textarea', container).each(function () {
|
1671 |
+
$(this).bind('change', function () {
|
1672 |
+
if ($(this).is('input[type="checkbox"]')) {
|
1673 |
+
var val = $(this).prop('checked') ? $(this).val() : 0;
|
1674 |
+
} else {
|
1675 |
+
val = $.trim($(this).val());
|
1676 |
+
}
|
1677 |
+
//save redirect type
|
1678 |
+
save($(this).attr('name'), val);
|
1679 |
+
});
|
1680 |
+
});
|
1681 |
+
}
|
1682 |
+
|
1683 |
+
aam.addHook('init', initialize);
|
1684 |
+
|
1685 |
+
})(jQuery);
|
1686 |
+
|
1687 |
/**
|
1688 |
* Extensions Interface
|
1689 |
*
|
readme.txt
CHANGED
@@ -2,8 +2,8 @@
|
|
2 |
Contributors: vasyltech
|
3 |
Tags: access, role, user, visitor, capability, page, post, permission, security, redirect
|
4 |
Requires at least: 3.8
|
5 |
-
Tested up to: 4.
|
6 |
-
Stable tag: 3.7.
|
7 |
|
8 |
One of the best tools in WordPress repository to manage access to your posts,
|
9 |
pages, categories and backend area for users, roles and visitors.
|
@@ -12,14 +12,18 @@ pages, categories and backend area for users, roles and visitors.
|
|
12 |
|
13 |
> Advanced Access Manager (aka AAM) is probably the only plugin that allows you to
|
14 |
> control access to your posts, pages or backend area on user, visitor and role
|
15 |
-
> levels.
|
16 |
|
17 |
AAM is well documented so even unexperienced WordPress user can easily understand
|
18 |
how to use it in the most efficient way.
|
19 |
|
|
|
|
|
|
|
20 |
AAM the main objectives are:
|
21 |
|
22 |
-
*
|
|
|
23 |
* Filter backend metaboxes and widgets as well as frontend widgets;
|
24 |
* Control access to backend menu;
|
25 |
* Manage redirect when access is denied to any restricted resource;
|
@@ -60,6 +64,13 @@ out more about the Advanced Access Manager.
|
|
60 |
|
61 |
== Changelog ==
|
62 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
63 |
= 3.7.1 =
|
64 |
* Added AAM Role Hierarchy extension
|
65 |
* Fixed bug with 404 page for frontend
|
@@ -414,213 +425,6 @@ out more about the Advanced Access Manager.
|
|
414 |
* Over 3 dozen of bug fixed and improvement during 3 alpha & beta versions
|
415 |
* Improved Update mechanism
|
416 |
|
417 |
-
= 1.9.1 =
|
418 |
-
* Fixed bug with empty event list
|
419 |
-
* Fixed bug with direct attachment access
|
420 |
-
* Reverted back the default UI design
|
421 |
-
* Last release of 1.x AAM Branch
|
422 |
-
|
423 |
-
= 1.9 =
|
424 |
-
* AAM 2.0 alpha 1 Announcement
|
425 |
-
|
426 |
-
= 1.8.5 =
|
427 |
-
* Added Event Manager
|
428 |
-
* Added ConfigPress parameter "aam.encoding"
|
429 |
-
|
430 |
-
= 1.8 =
|
431 |
-
* Fixed user caching issue
|
432 |
-
* Fixed issue with encoding
|
433 |
-
* Clear output buffer to avoid from third party plugins issues
|
434 |
-
* Notification about new release 2.0
|
435 |
-
|
436 |
-
= 1.7.5 =
|
437 |
-
* Accordion Fix
|
438 |
-
|
439 |
-
= 1.7.3 =
|
440 |
-
* Fixed reported issue #8894 to PHPSnapshot
|
441 |
-
* Added Media File access control
|
442 |
-
* Extended ConfigPress Tutorial
|
443 |
-
|
444 |
-
= 1.7.2 =
|
445 |
-
* Fixed CSS issues
|
446 |
-
|
447 |
-
= 1.7.1 =
|
448 |
-
* Fixed issue with cache removal query
|
449 |
-
* Silenced Upgrade for release 1.7 and higher
|
450 |
-
* Removed Capabilities description
|
451 |
-
* Added .POT file for multi-language support
|
452 |
-
* Silenced issue in updateRestriction function
|
453 |
-
* Silenced the issue with phpQuery and taxonomy rendering
|
454 |
-
|
455 |
-
= 1.7 =
|
456 |
-
* Removed Zend Caching mechanism
|
457 |
-
* Silenced the issue with array_merge in API model
|
458 |
-
* Removed the ConfigPress reference
|
459 |
-
* Created ConfigPress PDF Tutorial
|
460 |
-
* Moved SOAP wsdl to local directory
|
461 |
-
|
462 |
-
|
463 |
-
= 1.6.9.1 =
|
464 |
-
* Changed the way AHM displays
|
465 |
-
|
466 |
-
= 1.6.9 =
|
467 |
-
* Encoding issue fixed
|
468 |
-
* Removed AWM Group page
|
469 |
-
* Removed .htaccess file
|
470 |
-
* Fixed bug with Super Admin losing capabilities
|
471 |
-
|
472 |
-
= 1.6.8.3 =
|
473 |
-
* Implemented native WordPress jQuery UI include to avoid version issues
|
474 |
-
|
475 |
-
= 1.6.8.2 =
|
476 |
-
* Fixed JS issue with dialog destroy
|
477 |
-
|
478 |
-
= 1.6.8.1 =
|
479 |
-
* Fixed Javascript issue
|
480 |
-
* Fixed issue with comment feature
|
481 |
-
|
482 |
-
= 1.6.8 =
|
483 |
-
* Extended ConfigPress
|
484 |
-
* New view
|
485 |
-
* Updated ConfigPress Reference Guide
|
486 |
-
|
487 |
-
= 1.6.7.5 =
|
488 |
-
* Implemented alternative way of Premium Upgrade
|
489 |
-
* Extended ConfigPress
|
490 |
-
|
491 |
-
= 1.6.7 =
|
492 |
-
* New design
|
493 |
-
|
494 |
-
= 1.6.6 =
|
495 |
-
* Bug fixing
|
496 |
-
* Maintenance work
|
497 |
-
* Added Multisite importing feature
|
498 |
-
|
499 |
-
= 1.6.5.2 =
|
500 |
-
* Updated jQuery UI lib to 1.8.20
|
501 |
-
* Minimized JavaScript
|
502 |
-
* Implemented Web Service for AWM Group page
|
503 |
-
* Implemented Web Service for Premium Version
|
504 |
-
* Fixed bug with User Restrictions
|
505 |
-
* Fixed bug with Edit Permalink
|
506 |
-
* Fixed bug with Upgrade Hook
|
507 |
-
* Reorganized Label Module (Preparing for Russian and Polish transactions)
|
508 |
-
|
509 |
-
= 1.6.5.1 (Beta) =
|
510 |
-
* Bug fixing
|
511 |
-
* Removed custom error handler
|
512 |
-
|
513 |
-
= 1.6.5 =
|
514 |
-
* Turn off error reporting by default
|
515 |
-
* More advanced Post/Taxonomy access control
|
516 |
-
* Added Refresh feature for Post/Taxonomy Tree
|
517 |
-
* Added Custom Capability Edit Permalink
|
518 |
-
* Filtering Post's Quick Menu
|
519 |
-
* Refactored JavaScript
|
520 |
-
|
521 |
-
= 1.6.3 =
|
522 |
-
* Added more advanced possibility to manage comments
|
523 |
-
* Change Capabilities view
|
524 |
-
* Added additional checking for plugin's reliability
|
525 |
-
|
526 |
-
= 1.6.2 =
|
527 |
-
* Few GUI changes
|
528 |
-
* Added ConfigPress reference guide
|
529 |
-
* Introduced Extended version
|
530 |
-
* Fixed bug with UI menu ordering
|
531 |
-
* Fixed bug with ConfigPress caching
|
532 |
-
* Fixed bugs in filtermetabox class
|
533 |
-
* Fixed bug with confirmation message in Multisite Setup
|
534 |
-
|
535 |
-
= 1.6.1.3 =
|
536 |
-
* Fixed issue with menu
|
537 |
-
|
538 |
-
= 1.6.1.2 =
|
539 |
-
* Resolved issue with chmod
|
540 |
-
* Fixed issue with clearing config.ini during upgrade
|
541 |
-
|
542 |
-
= 1.6.1.1 =
|
543 |
-
* Fixed 2 bugs reported by jimaek
|
544 |
-
|
545 |
-
= 1.6.1 =
|
546 |
-
* Silenced few warnings in Access Control Class
|
547 |
-
* Extended description to Manually Metabox Init feature
|
548 |
-
* Added possibility to filter Frontend Widgets
|
549 |
-
* Refactored the Option Page manager
|
550 |
-
* Added About page
|
551 |
-
|
552 |
-
= 1.6 =
|
553 |
-
* Fixed bug for post__not_in
|
554 |
-
* Fixed bug with Admin Panel filtering
|
555 |
-
* Added Restore Default button
|
556 |
-
* Added Social and Support links
|
557 |
-
* Modified Error Handling feature
|
558 |
-
* Modified Config Press Handling
|
559 |
-
|
560 |
-
= 1.5.8 =
|
561 |
-
* Fixed bug with categories
|
562 |
-
* Addedd delete_capabilities parameter to Config Press
|
563 |
-
|
564 |
-
= 1.5.7 =
|
565 |
-
* Bug fixing
|
566 |
-
* Introduced error handling
|
567 |
-
* Added internal .htaccess
|
568 |
-
|
569 |
-
= 1.5.6 =
|
570 |
-
* Introduced _Visitor User Role
|
571 |
-
* Fixed few core bugs
|
572 |
-
* Implemented caching system
|
573 |
-
* Improved API
|
574 |
-
|
575 |
-
= 1.5.5 =
|
576 |
-
* Performed code refactoring
|
577 |
-
* Added Access Config
|
578 |
-
* Added User Managing feature
|
579 |
-
* Fixed bugs related to WP 3.3.x releases
|
580 |
-
|
581 |
-
= 1.4.3 =
|
582 |
-
* Emergency bug fixing
|
583 |
-
|
584 |
-
= 1.4.2 =
|
585 |
-
* Fixed cURL bug
|
586 |
-
|
587 |
-
= 1.4.1 =
|
588 |
-
* Fixed some bugs with checking algorithm
|
589 |
-
* Maintained the code
|
590 |
-
|
591 |
-
= 1.4 =
|
592 |
-
* Added Multi-Site Support
|
593 |
-
* Added Multi-Language Support
|
594 |
-
* Improved checking algorithm
|
595 |
-
* Improved Super Admin functionality
|
596 |
-
|
597 |
-
= 1.3.1 =
|
598 |
-
* Improved Super Admin functionality
|
599 |
-
* Optimized main class
|
600 |
-
* Improved Checking algorithm
|
601 |
-
* Added ability to change User Role's Label
|
602 |
-
* Added ability to Exclude Pages from Navigation
|
603 |
-
* Added ability to spread Post/Category Restriction Options to all User Roles
|
604 |
-
* Sorted List of Capabilities Alphabetically
|
605 |
-
|
606 |
-
= 1.3 =
|
607 |
-
* Change some interface button to WordPress default
|
608 |
-
* Deleted General Info metabox
|
609 |
-
* Improved check Access algorithm for compatibility with non standard links
|
610 |
-
* Split restriction on Front-end and Back-end
|
611 |
-
* Added Page Menu Filtering
|
612 |
-
* Added Admin Top Menu Filtering
|
613 |
-
* Added Import/Export Configuration functionality
|
614 |
-
|
615 |
-
= 1.2.1 =
|
616 |
-
* Fixed issue with propAttr jQuery IU incompatibility
|
617 |
-
* Added filters for checkAccess and compareMenu results
|
618 |
-
|
619 |
-
= 1.2 =
|
620 |
-
* Fixed some notice messages reported by llucax
|
621 |
-
* Added ability to sort Admin Menu
|
622 |
-
* Added ability to filter Posts, Categories and Pages
|
623 |
-
|
624 |
= 1.0 =
|
625 |
* Fixed issue with comment editing
|
626 |
* Implemented JavaScript error catching
|
2 |
Contributors: vasyltech
|
3 |
Tags: access, role, user, visitor, capability, page, post, permission, security, redirect
|
4 |
Requires at least: 3.8
|
5 |
+
Tested up to: 4.6
|
6 |
+
Stable tag: 3.7.5
|
7 |
|
8 |
One of the best tools in WordPress repository to manage access to your posts,
|
9 |
pages, categories and backend area for users, roles and visitors.
|
12 |
|
13 |
> Advanced Access Manager (aka AAM) is probably the only plugin that allows you to
|
14 |
> control access to your posts, pages or backend area on user, visitor and role
|
15 |
+
> levels.
|
16 |
|
17 |
AAM is well documented so even unexperienced WordPress user can easily understand
|
18 |
how to use it in the most efficient way.
|
19 |
|
20 |
+
Notice! Some of the features are limited with the basic version and you may
|
21 |
+
consider to get recommended premium extension.
|
22 |
+
|
23 |
AAM the main objectives are:
|
24 |
|
25 |
+
* Manage access to your posts, pages, custom post types and categories;
|
26 |
+
* Manage access to post's and page's content by displaying teaser message;
|
27 |
* Filter backend metaboxes and widgets as well as frontend widgets;
|
28 |
* Control access to backend menu;
|
29 |
* Manage redirect when access is denied to any restricted resource;
|
64 |
|
65 |
== Changelog ==
|
66 |
|
67 |
+
= 3.7.5 =
|
68 |
+
* Added AAM Content Teaser extension
|
69 |
+
* Added LIMIT option to Posts & Pages access forms to support Teaser feature
|
70 |
+
* Bug fixing
|
71 |
+
* Improved UI
|
72 |
+
* Added ability to show/hide admin bar with show_admin_bar capability
|
73 |
+
|
74 |
= 3.7.1 =
|
75 |
* Added AAM Role Hierarchy extension
|
76 |
* Fixed bug with 404 page for frontend
|
425 |
* Over 3 dozen of bug fixed and improvement during 3 alpha & beta versions
|
426 |
* Improved Update mechanism
|
427 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
428 |
= 1.0 =
|
429 |
* Fixed issue with comment editing
|
430 |
* Implemented JavaScript error catching
|