Advanced Access Manager - Version 3.1

Version Description

  • Integrated User Switch with AAM
  • Fixed bugs reported by WP Error Fix
  • Removed intro message
  • Improved AAM speed
  • Updated AAM Utilities extension
  • Updated AAM Plus Package extension
  • Added new AAM Skeleton Extension for developers
Download this release

Release Info

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

Code changes from version 3.0 to 3.1

Files changed (51) hide show
  1. Application/Backend/Capability.php +47 -9
  2. Application/Backend/Extension.php +17 -3
  3. Application/Backend/Filter.php +12 -11
  4. Application/Backend/Localization.php +9 -0
  5. Application/Backend/Manager.php +65 -9
  6. Application/Backend/Menu.php +24 -2
  7. Application/Backend/Metabox.php +22 -0
  8. Application/Backend/Post.php +48 -18
  9. Application/Backend/ProductList.php +80 -0
  10. Application/Backend/User.php +11 -1
  11. Application/Backend/View.php +31 -18
  12. Application/Backend/view/extension.phtml +98 -133
  13. Application/Backend/view/index.phtml +251 -264
  14. Application/Backend/view/main-panel.phtml +20 -17
  15. Application/Backend/view/object/capability.phtml +51 -48
  16. Application/Backend/view/object/menu.phtml +62 -49
  17. Application/Backend/view/object/metabox.phtml +60 -49
  18. Application/Backend/view/object/post.phtml +193 -132
  19. Application/Backend/view/partial/post-type.phtml +9 -6
  20. Application/Backend/view/partial/term-type.phtml +9 -6
  21. Application/Core/API.php +24 -3
  22. Application/Core/Object.php +52 -1
  23. Application/Core/Object/Menu.php +8 -0
  24. Application/Core/Object/Metabox.php +9 -0
  25. Application/Core/Object/Post.php +58 -23
  26. Application/Core/Repository.php +60 -19
  27. Application/Core/Server.php +4 -5
  28. Application/Core/Subject.php +35 -9
  29. Application/Core/Subject/Role.php +27 -28
  30. Application/Core/Subject/User.php +25 -2
  31. Application/Core/Subject/Visitor.php +3 -15
  32. Application/Frontend/Manager.php +21 -17
  33. Lang/{en_US.mo → advanced-access-manager-en_US.mo} +0 -0
  34. Lang/{en_US.po → advanced-access-manager-en_US.po} +373 -256
  35. Lang/advanced-access-manager.pot +372 -255
  36. aam.php +25 -21
  37. media/css/aam.css +106 -57
  38. media/css/datatables.min.css +10 -3
  39. media/font/fontello.eot +0 -0
  40. media/font/fontello.svg +3 -0
  41. media/font/fontello.ttf +0 -0
  42. media/font/fontello.woff +0 -0
  43. media/js/aam-hook.js +1 -1
  44. media/js/aam-ui.js +293 -130
  45. media/js/aam.js +51 -49
  46. readme.txt +78 -2
  47. screenshot-1.png +0 -0
  48. screenshot-2.png +0 -0
  49. screenshot-3.png +0 -0
  50. screenshot-4.png +0 -0
  51. screenshot-5.png +0 -0
Application/Backend/Capability.php CHANGED
@@ -75,20 +75,57 @@ class AAM_Backend_Capability {
75
  if ($subject instanceof AAM_Core_Subject_Role) {
76
  $response['data'] = $this->retrieveAllCaps();
77
  } else {
78
- $role_list = $subject->roles;
79
- $role = AAM_Core_API::getRoles()->get_role(array_shift($role_list));
80
- foreach (array_keys($role->capabilities) as $cap) {
81
  $response['data'][] = array(
82
  $cap,
83
  $this->getGroup($cap),
84
  AAM_Backend_Helper::getHumanText($cap),
85
- ($subject->hasCapability($cap) ? 'checked' : 'unchecked')
86
  );
87
  }
88
  }
89
 
90
  return json_encode($response);
91
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
92
 
93
  /**
94
  *
@@ -98,16 +135,17 @@ class AAM_Backend_Capability {
98
  $caps = $response = array();
99
 
100
  foreach (AAM_Core_API::getRoles()->role_objects as $role) {
101
- $caps = array_merge($caps, $role->capabilities);
 
 
102
  }
103
 
104
- $subject = AAM_Backend_View::getSubject();
105
  foreach (array_keys($caps) as $cap) {
106
  $response[] = array(
107
  $cap,
108
  $this->getGroup($cap),
109
  AAM_Backend_Helper::getHumanText($cap),
110
- ($subject->hasCapability($cap) ? 'checked' : 'unchecked')
111
  );
112
  }
113
 
@@ -125,7 +163,7 @@ class AAM_Backend_Capability {
125
  return apply_filters('aam-capability-groups-filter', array(
126
  __('System', AAM_KEY),
127
  __('Posts & Pages', AAM_KEY),
128
- __('Backend Interface', AAM_KEY),
129
  __('Miscellaneous', AAM_KEY)
130
  ));
131
  }
@@ -166,7 +204,7 @@ class AAM_Backend_Capability {
166
  } elseif (in_array($capability, $this->_groups['post'])) {
167
  $response = __('Posts & Pages', AAM_KEY);
168
  } elseif (in_array($capability, $this->_groups['backend'])) {
169
- $response = __('Backend Interface', AAM_KEY);
170
  } else {
171
  $response = __('Miscellaneous', AAM_KEY);
172
  }
75
  if ($subject instanceof AAM_Core_Subject_Role) {
76
  $response['data'] = $this->retrieveAllCaps();
77
  } else {
78
+ foreach ($this->getCapabilityList($subject) as $cap) {
 
 
79
  $response['data'][] = array(
80
  $cap,
81
  $this->getGroup($cap),
82
  AAM_Backend_Helper::getHumanText($cap),
83
+ $this->prepareActionList($cap)
84
  );
85
  }
86
  }
87
 
88
  return json_encode($response);
89
  }
90
+
91
+ /**
92
+ *
93
+ * @param AAM_Core_Subject_User $subject
94
+ * @return type
95
+ */
96
+ protected function getCapabilityList(AAM_Core_Subject_User $subject) {
97
+ $list = array();
98
+
99
+ //IMPORTANT! Cause it is possible that user is not assigned to any role
100
+ $roles = $subject->roles;
101
+
102
+ if (is_array($roles)) {
103
+ foreach($roles as $slug) {
104
+ $role = AAM_Core_API::getRoles()->get_role($slug);
105
+ if ($role) {
106
+ $list = array_keys($role->capabilities);
107
+ break;
108
+ }
109
+ }
110
+ }
111
+ return $list;
112
+ }
113
+
114
+ /**
115
+ *
116
+ * @param type $cap
117
+ * @return type
118
+ */
119
+ protected function prepareActionList($cap) {
120
+ $subject = AAM_Backend_View::getSubject();
121
+ $actions = array();
122
+
123
+ $actions[] = ($subject->hasCapability($cap) ? 'checked' : 'unchecked');
124
+
125
+ return implode(
126
+ ',', apply_filters('aam-cap-row-actions-filter', $actions, $subject)
127
+ );
128
+ }
129
 
130
  /**
131
  *
135
  $caps = $response = array();
136
 
137
  foreach (AAM_Core_API::getRoles()->role_objects as $role) {
138
+ if (is_array($role->capabilities)) {
139
+ $caps = array_merge($caps, $role->capabilities);
140
+ }
141
  }
142
 
 
143
  foreach (array_keys($caps) as $cap) {
144
  $response[] = array(
145
  $cap,
146
  $this->getGroup($cap),
147
  AAM_Backend_Helper::getHumanText($cap),
148
+ $this->prepareActionList($cap)
149
  );
150
  }
151
 
163
  return apply_filters('aam-capability-groups-filter', array(
164
  __('System', AAM_KEY),
165
  __('Posts & Pages', AAM_KEY),
166
+ __('Backend', AAM_KEY),
167
  __('Miscellaneous', AAM_KEY)
168
  ));
169
  }
204
  } elseif (in_array($capability, $this->_groups['post'])) {
205
  $response = __('Posts & Pages', AAM_KEY);
206
  } elseif (in_array($capability, $this->_groups['backend'])) {
207
+ $response = __('Backend', AAM_KEY);
208
  } else {
209
  $response = __('Miscellaneous', AAM_KEY);
210
  }
Application/Backend/Extension.php CHANGED
@@ -31,6 +31,17 @@ class AAM_Backend_Extension {
31
  return $content;
32
  }
33
 
 
 
 
 
 
 
 
 
 
 
 
34
  /**
35
  * Install an extension
36
  *
@@ -147,7 +158,7 @@ class AAM_Backend_Extension {
147
  'uid' => 'extension',
148
  'position' => 999,
149
  'title' => __('Extensions', AAM_KEY),
150
- 'notification' => self::getUpdatesCount(),
151
  'subjects' => array(
152
  'AAM_Core_Subject_Role',
153
  'AAM_Core_Subject_User',
@@ -161,11 +172,14 @@ class AAM_Backend_Extension {
161
  *
162
  * @return int
163
  */
164
- protected static function getUpdatesCount() {
165
- $list = AAM_Core_API::getOption('aam-extension-list', array());
166
  $repo = AAM_Core_Repository::getInstance();
167
  $count = 0;
168
 
 
 
 
169
  foreach($list as $extension) {
170
  $status = $repo->extensionStatus($extension->title);
171
  if ($status == AAM_Core_Repository::STATUS_UPDATE) {
31
  return $content;
32
  }
33
 
34
+ /**
35
+ * Get Product List
36
+ *
37
+ * @return array
38
+ *
39
+ * @access protected
40
+ */
41
+ protected function getProductList() {
42
+ return require(dirname(__FILE__) . '/ProductList.php');
43
+ }
44
+
45
  /**
46
  * Install an extension
47
  *
158
  'uid' => 'extension',
159
  'position' => 999,
160
  'title' => __('Extensions', AAM_KEY),
161
+ 'notification' => self::getNotification(),
162
  'subjects' => array(
163
  'AAM_Core_Subject_Role',
164
  'AAM_Core_Subject_User',
172
  *
173
  * @return int
174
  */
175
+ protected static function getNotification() {
176
+ $list = AAM_Core_API::getOption('aam-extension-repository', array());
177
  $repo = AAM_Core_Repository::getInstance();
178
  $count = 0;
179
 
180
+ //WP Error Fix bug report
181
+ $list = (is_array($list) ? $list : array());
182
+
183
  foreach($list as $extension) {
184
  $status = $repo->extensionStatus($extension->title);
185
  if ($status == AAM_Core_Repository::STATUS_UPDATE) {
Application/Backend/Filter.php CHANGED
@@ -121,15 +121,12 @@ class AAM_Backend_Filter {
121
  unset($actions['inline hide-if-no-js']);
122
  }
123
  }
124
- //filter trash menu
125
- if ($object->has('backend.trash')) {
126
- if (isset($actions['trash'])) {
127
- unset($actions['trash']);
128
- }
129
- }
130
 
131
  //filter delete menu
132
  if ($object->has('backend.delete')) {
 
 
 
133
  if (isset($actions['delete'])) {
134
  unset($actions['delete']);
135
  }
@@ -235,11 +232,15 @@ class AAM_Backend_Filter {
235
  */
236
  public function thePosts($posts) {
237
  $filtered = array();
238
-
239
- foreach ($posts as $post) {
240
- $object = AAM::getUser()->getObject('post', $post->ID);
241
- if (!$object->has('backend.list')) {
242
- $filtered[] = $post;
 
 
 
 
243
  }
244
  }
245
 
121
  unset($actions['inline hide-if-no-js']);
122
  }
123
  }
 
 
 
 
 
 
124
 
125
  //filter delete menu
126
  if ($object->has('backend.delete')) {
127
+ if (isset($actions['trash'])) {
128
+ unset($actions['trash']);
129
+ }
130
  if (isset($actions['delete'])) {
131
  unset($actions['delete']);
132
  }
232
  */
233
  public function thePosts($posts) {
234
  $filtered = array();
235
+
236
+ if (AAM::isAAM()) { //skip post filtering if this is AAM page
237
+ $filtered = $posts;
238
+ } else {
239
+ foreach ($posts as $post) {
240
+ $object = AAM::getUser()->getObject('post', $post->ID);
241
+ if (!$object->has('backend.list')) {
242
+ $filtered[] = $post;
243
+ }
244
  }
245
  }
246
 
Application/Backend/Localization.php CHANGED
@@ -40,6 +40,15 @@ return array(
40
  'Anonymous' => __('Anonymous', AAM_KEY),
41
  'Current user' => __('Current user', AAM_KEY),
42
  'Current role' => __('Current role', AAM_KEY),
 
 
 
 
 
 
 
 
 
43
  'Javascript error detected during the page load. AAM may not function properly.' => __('Javascript error detected during the page load. AAM may not function properly.', AAM_KEY),
44
  'Failed to grand capability - WordPress policy' => __('Failed to grand capability - WordPress policy', AAM_KEY),
45
  );
40
  'Anonymous' => __('Anonymous', AAM_KEY),
41
  'Current user' => __('Current user', AAM_KEY),
42
  'Current role' => __('Current role', AAM_KEY),
43
+ 'Manage Access' => __('Manage Access', AAM_KEY),
44
+ 'Edit' => __('Edit', AAM_KEY),
45
+ 'Manage Role' => __('Manage Role', AAM_KEY),
46
+ 'Edit Role Name' => __('Edit Role Name', AAM_KEY),
47
+ 'Delete Role' => __('Delete Role', AAM_KEY),
48
+ 'Manage User' => __('Manage User', AAM_KEY),
49
+ 'Edit User' => __('Edit User', AAM_KEY),
50
+ 'Lock User' => __('Lock User', AAM_KEY),
51
+ 'Unlock User' => __('Unlock User', AAM_KEY),
52
  'Javascript error detected during the page load. AAM may not function properly.' => __('Javascript error detected during the page load. AAM may not function properly.', AAM_KEY),
53
  'Failed to grand capability - WordPress policy' => __('Failed to grand capability - WordPress policy', AAM_KEY),
54
  );
Application/Backend/Manager.php CHANGED
@@ -43,7 +43,7 @@ class AAM_Backend_Manager {
43
  //manager AAM Ajax Requests
44
  add_action('wp_ajax_aam', array($this, 'ajax'));
45
  //manager AAM Features Content rendering
46
- add_action('admin_action_aam-content', array($this, 'renderContent'));
47
  //manager user search and authentication control
48
  add_filter('user_search_columns', array($this, 'searchColumns'));
49
  //manage access action to the user list
@@ -51,9 +51,14 @@ class AAM_Backend_Manager {
51
 
52
  //check extension version
53
  $this->checkExtensionList();
 
 
 
54
 
55
  //register backend hooks and filters
56
- AAM_Backend_Filter::register();
 
 
57
  }
58
 
59
  /**
@@ -69,7 +74,7 @@ class AAM_Backend_Manager {
69
  public function enqueueScript() {
70
  if (AAM::isAAM()) {
71
  echo "<script type=\"text/javascript\">\n";
72
- echo file_get_contents(AAM_MEDIA . '/js/aam-hook.js');
73
  echo "</script>\n";
74
  }
75
  }
@@ -78,9 +83,12 @@ class AAM_Backend_Manager {
78
  *
79
  */
80
  protected function checkExtensionList() {
81
- $list = AAM_Core_API::getOption('aam-extension-list', array());
82
  $repo = AAM_Core_Repository::getInstance();
83
 
 
 
 
84
  foreach($list as $extension) {
85
  $status = $repo->extensionStatus($extension->title);
86
  if ($status == AAM_Core_Repository::STATUS_UPDATE) {
@@ -92,6 +100,53 @@ class AAM_Backend_Manager {
92
  );
93
  }
94
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
95
  }
96
 
97
  /**
@@ -122,10 +177,12 @@ class AAM_Backend_Manager {
122
  * @access public
123
  */
124
  public function userActions($actions, $user) {
125
- $url = admin_url('admin.php?page=aam&user=' . $user->ID);
126
-
127
- $actions['aam'] = '<a href="' . $url . '">';
128
- $actions['aam'] .= __('Manage Access', AAM_KEY) . '</a>';
 
 
129
 
130
  return $actions;
131
  }
@@ -175,7 +232,6 @@ class AAM_Backend_Manager {
175
  'name'=> $subject->name,
176
  'blog' => get_current_blog_id()
177
  ),
178
- 'welcome' => AAM_Core_API::getOption('aam-welcome', 1),
179
  'translation' => require (dirname(__FILE__) . '/Localization.php')
180
  ));
181
  }
43
  //manager AAM Ajax Requests
44
  add_action('wp_ajax_aam', array($this, 'ajax'));
45
  //manager AAM Features Content rendering
46
+ add_action('admin_action_aamc', array($this, 'renderContent'));
47
  //manager user search and authentication control
48
  add_filter('user_search_columns', array($this, 'searchColumns'));
49
  //manage access action to the user list
51
 
52
  //check extension version
53
  $this->checkExtensionList();
54
+
55
+ //check cache status
56
+ $this->checkCacheStatus();
57
 
58
  //register backend hooks and filters
59
+ if (apply_filters('aam-utility-property', 'backend-access-control', true)) {
60
+ AAM_Backend_Filter::register();
61
+ }
62
  }
63
 
64
  /**
74
  public function enqueueScript() {
75
  if (AAM::isAAM()) {
76
  echo "<script type=\"text/javascript\">\n";
77
+ echo file_get_contents(AAM_BASE . '/media/js/aam-hook.js');
78
  echo "</script>\n";
79
  }
80
  }
83
  *
84
  */
85
  protected function checkExtensionList() {
86
+ $list = AAM_Core_API::getOption('aam-extension-repository', array());
87
  $repo = AAM_Core_Repository::getInstance();
88
 
89
+ //WP Error Fix bug report
90
+ $list = (is_array($list) ? $list : array());
91
+
92
  foreach($list as $extension) {
93
  $status = $repo->extensionStatus($extension->title);
94
  if ($status == AAM_Core_Repository::STATUS_UPDATE) {
100
  );
101
  }
102
  }
103
+
104
+ //TODO - Remove in Feb 2016
105
+ $this->checkRedundantExtensions();
106
+ }
107
+
108
+ /**
109
+ * @todo Remove in Feb 2016
110
+ */
111
+ protected function checkRedundantExtensions() {
112
+ $basedir = AAM_Core_Repository::getInstance()->getBasedir();
113
+
114
+ //iterate through each active extension and load it
115
+ if (file_exists($basedir)) {
116
+ foreach (scandir($basedir) as $extension) {
117
+ if (!in_array($extension, array('.', '..'))) {
118
+ if (!preg_match('/^[a-z]{1}[a-z\-]+$/', $extension)) {
119
+ AAM_Core_Console::add(
120
+ sprintf(
121
+ AAM_Backend_Helper::preparePhrase('Please manually remove [%s] and re-install the extension if necessary', 'b'),
122
+ $basedir . '/' . $extension
123
+ )
124
+ );
125
+ }
126
+ }
127
+ }
128
+ }
129
+ }
130
+
131
+ /**
132
+ * Check caching status
133
+ *
134
+ * If caching is off, show notification about it
135
+ *
136
+ * @return void
137
+ *
138
+ * @access protected
139
+ */
140
+ protected function checkCacheStatus() {
141
+ if (apply_filters('aam-cache-status-filter', false) === false) {
142
+ $message = __(
143
+ 'AAM caching is off. To speed-up the website turn it on.', AAM_KEY
144
+ );
145
+ $message .= '&nbsp;<a href="#cache-info-modal" data-toggle="modal">';
146
+ $message .= __('Read more.', AAM_KEY) . '</a>';
147
+
148
+ AAM_Core_Console::add($message);
149
+ }
150
  }
151
 
152
  /**
177
  * @access public
178
  */
179
  public function userActions($actions, $user) {
180
+ if (current_user_can('edit_user', $user->ID)) {
181
+ $url = admin_url('admin.php?page=aam&user=' . $user->ID);
182
+
183
+ $actions['aam'] = '<a href="' . $url . '">';
184
+ $actions['aam'] .= __('AAM', AAM_KEY) . '</a>';
185
+ }
186
 
187
  return $actions;
188
  }
232
  'name'=> $subject->name,
233
  'blog' => get_current_blog_id()
234
  ),
 
235
  'translation' => require (dirname(__FILE__) . '/Localization.php')
236
  ));
237
  }
Application/Backend/Menu.php CHANGED
@@ -30,6 +30,18 @@ class AAM_Backend_Menu {
30
 
31
  return $content;
32
  }
 
 
 
 
 
 
 
 
 
 
 
 
33
 
34
  /**
35
  * Get subject's menu
@@ -131,9 +143,9 @@ class AAM_Backend_Menu {
131
  *
132
  * @return boolean
133
  *
134
- * @access public
135
  */
136
- public function hasRestrictedAll($menu) {
137
  $object = AAM_Backend_View::getSubject()->getObject('menu');
138
  $response = $object->has($menu['id']);
139
 
@@ -146,6 +158,16 @@ class AAM_Backend_Menu {
146
 
147
  return $response;
148
  }
 
 
 
 
 
 
 
 
 
 
149
 
150
  /**
151
  * Register Menu feature
30
 
31
  return $content;
32
  }
33
+
34
+ /**
35
+ *
36
+ * @return type
37
+ */
38
+ public function reset() {
39
+ $object = AAM_Backend_View::getSubject()->getObject('menu');
40
+
41
+ return json_encode(array(
42
+ 'status' => ($object->reset() ? 'success' : 'failure')
43
+ ));
44
+ }
45
 
46
  /**
47
  * Get subject's menu
143
  *
144
  * @return boolean
145
  *
146
+ * @access protected
147
  */
148
+ protected function hasRestrictedAll($menu) {
149
  $object = AAM_Backend_View::getSubject()->getObject('menu');
150
  $response = $object->has($menu['id']);
151
 
158
 
159
  return $response;
160
  }
161
+
162
+ /**
163
+ *
164
+ * @return type
165
+ */
166
+ protected function isOverwritten() {
167
+ $object = AAM_Backend_View::getSubject()->getObject('menu');
168
+
169
+ return $object->isOverwritten();
170
+ }
171
 
172
  /**
173
  * Register Menu feature
Application/Backend/Metabox.php CHANGED
@@ -33,6 +33,18 @@ class AAM_Backend_Metabox {
33
  return $content;
34
  }
35
 
 
 
 
 
 
 
 
 
 
 
 
 
36
  /**
37
  *
38
  * @global type $wp_post_types
@@ -180,6 +192,16 @@ class AAM_Backend_Metabox {
180
 
181
  return $response;
182
  }
 
 
 
 
 
 
 
 
 
 
183
 
184
  /**
185
  * Register metabox feature
33
  return $content;
34
  }
35
 
36
+ /**
37
+ *
38
+ * @return type
39
+ */
40
+ public function reset() {
41
+ $object = AAM_Backend_View::getSubject()->getObject('metabox');
42
+
43
+ return json_encode(array(
44
+ 'status' => ($object->reset() ? 'success' : 'failure')
45
+ ));
46
+ }
47
+
48
  /**
49
  *
50
  * @global type $wp_post_types
192
 
193
  return $response;
194
  }
195
+
196
+ /**
197
+ *
198
+ * @return type
199
+ */
200
+ protected function isOverwritten() {
201
+ $object = AAM_Backend_View::getSubject()->getObject('metabox');
202
+
203
+ return $object->isOverwritten();
204
+ }
205
 
206
  /**
207
  * Register metabox feature
Application/Backend/Post.php CHANGED
@@ -66,12 +66,10 @@ class AAM_Backend_Post {
66
  $breadcrub = $this->renderPostBreadcrumb();
67
  }
68
 
69
- return json_encode(
70
- array(
71
  'status' => 'success',
72
  'breadcrumb' => ($breadcrub ? $breadcrub : __('Base Level', AAM_KEY))
73
- )
74
- );
75
  }
76
 
77
  /**
@@ -83,9 +81,8 @@ class AAM_Backend_Post {
83
  */
84
  protected function renderTermBreadcrumb() {
85
  list($term, $taxonomy) = explode('|', AAM_Core_Request::post('id'));
86
- $ancestors = array_reverse(
87
- get_ancestors($term, $taxonomy, 'taxonomy')
88
- );
89
  $breadcrumb = array();
90
  foreach ($ancestors as $id) {
91
  $breadcrumb[] = get_term($id, $taxonomy)->name;
@@ -234,21 +231,26 @@ class AAM_Backend_Post {
234
  * @access public
235
  */
236
  public function getAccess() {
237
- $type = AAM_Core_Request::post('type');
238
- $id = AAM_Core_Request::post('id');
239
 
240
  $object = AAM_Backend_View::getSubject()->getObject($type, $id);
241
 
242
- //prepare the response object - for base version only Post object
243
- if ($object instanceof AAM_Core_Object_Post) {
244
- $response = $object->getOption();
 
 
 
 
245
  } else {
246
- $response = array();
247
  }
248
 
249
- return json_encode(
250
- apply_filters('aam-get-post-access-filter', $response, $object)
251
- );
 
252
  }
253
 
254
  /**
@@ -260,13 +262,16 @@ class AAM_Backend_Post {
260
  */
261
  public function save() {
262
  if ($this->checkLimit()) {
263
- $object = AAM_Core_Request::post('object');
264
- $objectId = AAM_Core_Request::post('objectId', 0);
265
 
266
  $param = AAM_Core_Request::post('param');
267
  $value = filter_var(
268
  AAM_Core_Request::post('value'), FILTER_VALIDATE_BOOLEAN
269
  );
 
 
 
270
 
271
  $result = AAM_Backend_View::getSubject()->save(
272
  $param, $value, $object, $objectId
@@ -281,6 +286,31 @@ class AAM_Backend_Post {
281
  'error' => (empty($error) ? '' : $error)
282
  ));
283
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
284
 
285
  /**
286
  *
66
  $breadcrub = $this->renderPostBreadcrumb();
67
  }
68
 
69
+ return json_encode(array(
 
70
  'status' => 'success',
71
  'breadcrumb' => ($breadcrub ? $breadcrub : __('Base Level', AAM_KEY))
72
+ ));
 
73
  }
74
 
75
  /**
81
  */
82
  protected function renderTermBreadcrumb() {
83
  list($term, $taxonomy) = explode('|', AAM_Core_Request::post('id'));
84
+ $ancestors = array_reverse(get_ancestors($term, $taxonomy, 'taxonomy'));
85
+
 
86
  $breadcrumb = array();
87
  foreach ($ancestors as $id) {
88
  $breadcrumb[] = get_term($id, $taxonomy)->name;
231
  * @access public
232
  */
233
  public function getAccess() {
234
+ $type = trim(AAM_Core_Request::post('type'));
235
+ $id = intval(AAM_Core_Request::post('id'));
236
 
237
  $object = AAM_Backend_View::getSubject()->getObject($type, $id);
238
 
239
+ //prepare the response object
240
+ if ($object instanceof AAM_Core_Object) {
241
+ $access = $object->getOption();
242
+ $metadata = array(
243
+ 'inherited' => $object->getInherited(),
244
+ 'overwritten' => $object->isOverwritten()
245
+ );
246
  } else {
247
+ $access = $metadata = array();
248
  }
249
 
250
+ return json_encode(array(
251
+ 'access' => $access,
252
+ 'meta' => $metadata
253
+ ));
254
  }
255
 
256
  /**
262
  */
263
  public function save() {
264
  if ($this->checkLimit()) {
265
+ $object = trim(AAM_Core_Request::post('object'));
266
+ $objectId = intval(AAM_Core_Request::post('objectId', 0));
267
 
268
  $param = AAM_Core_Request::post('param');
269
  $value = filter_var(
270
  AAM_Core_Request::post('value'), FILTER_VALIDATE_BOOLEAN
271
  );
272
+
273
+ //clear cache
274
+ do_action('aam-clear-cache-action', AAM_Backend_View::getSubject());
275
 
276
  $result = AAM_Backend_View::getSubject()->save(
277
  $param, $value, $object, $objectId
286
  'error' => (empty($error) ? '' : $error)
287
  ));
288
  }
289
+
290
+ /**
291
+ * Reset the object settings
292
+ *
293
+ * @return string
294
+ *
295
+ * @access public
296
+ */
297
+ public function reset() {
298
+ $type = trim(AAM_Core_Request::post('type'));
299
+ $id = intval(AAM_Core_Request::post('id', 0));
300
+
301
+ $object = AAM_Backend_View::getSubject()->getObject($type, $id);
302
+ if ($object instanceof AAM_Core_Object) {
303
+ $result = $object->reset();
304
+ //clear cache
305
+ do_action('aam-clear-cache-action', AAM_Backend_View::getSubject());
306
+ } else {
307
+ $result = false;
308
+ }
309
+
310
+ return json_encode(
311
+ array('status' => ($result ? 'success' : 'failure'))
312
+ );
313
+ }
314
 
315
  /**
316
  *
Application/Backend/ProductList.php ADDED
@@ -0,0 +1,80 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * ======================================================================
5
+ * LICENSE: This file is subject to the terms and conditions defined in *
6
+ * file 'license.txt', which is part of this source code package. *
7
+ * ======================================================================
8
+ */
9
+
10
+ return array(
11
+ array(
12
+ 'title' => 'AAM Plus Package',
13
+ 'id' => 'AAM Plus Package',
14
+ 'type' => 'commercial',
15
+ 'cost' => '$30',
16
+ 'currency' => 'USD',
17
+ 'description' => __('Unlock limitations related to Posts and Pages feature. Extend basic AAM functionality with Page Categories and ability to manage access to your comments (AAM Plus Package adds new capabilities to the default list of WordPress capabilities like Edit Comments, Delete Comments, Spam Comments etc.)', AAM_KEY),
18
+ 'storeURL' => 'https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=FGAHULDEFZV4U',
19
+ 'status' => AAM_Core_Repository::getInstance()->extensionStatus('AAM Plus Package')
20
+ ),
21
+ array(
22
+ 'title' => 'AAM Role Filter',
23
+ 'id' => 'AAM Role Filter',
24
+ 'type' => 'commercial',
25
+ 'cost' => '$5',
26
+ 'currency' => 'USD',
27
+ 'description' => __('Extension for more advanced user and role administration. Based on user\'s highest level capability, filter list of roles with higher level. Also prevent from editing, promoting or deleting higher level users.', AAM_KEY),
28
+ 'storeURL' => 'https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=G9V4BT3T8WJSN',
29
+ 'status' => AAM_Core_Repository::getInstance()->extensionStatus('AAM Role Filter')
30
+ ),
31
+ array(
32
+ 'title' => 'AAM Dev License',
33
+ 'id' => 'AAM Development License',
34
+ 'type' => 'commercial',
35
+ 'cost' => '$150',
36
+ 'currency' => 'USD',
37
+ 'description' => __('Development license gives you an ability to download all the available extensions and use them to up to 5 life domains.', AAM_KEY),
38
+ 'storeURL' => 'https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=ZX9RCWU6BTE52',
39
+ 'status' => AAM_Core_Repository::getInstance()->extensionStatus('AAM Development License')
40
+ ),
41
+ array(
42
+ 'title' => 'AAM Utilities',
43
+ 'id' => 'AAM Utilities',
44
+ 'type' => 'GNU',
45
+ 'license' => 'AAMUTILITIES',
46
+ 'description' => __('Various useful tools for AAM like caching or clear all settings.', AAM_KEY),
47
+ 'status' => AAM_Core_Repository::getInstance()->extensionStatus('AAM Utilities')
48
+ ),
49
+ array(
50
+ 'title' => 'AAM Multisite',
51
+ 'id' => 'AAM Multisite',
52
+ 'type' => 'GNU',
53
+ 'license' => 'AAMMULTISITE',
54
+ 'description' => __('Convenient way to navigate between different sites in the Network Admin Panel. This extension adds additional widget to the AAM page that allows to switch between different sites.', AAM_KEY),
55
+ 'status' => AAM_Core_Repository::getInstance()->extensionStatus('AAM Multisite')
56
+ ),
57
+ array(
58
+ 'title' => 'AAM Post Filter',
59
+ 'id' => 'AAM Post Filter',
60
+ 'type' => 'GNU',
61
+ 'license' => 'AAMPOSTFILTER',
62
+ 'description' => AAM_Backend_Helper::preparePhrase('[WARNING!] Please use with caution. This is a supportive exension for the post access option [List]. It adds additional post filtering to fix the issue with large amount of post. [Turned on caching] is strongly recommended.', 'strong', 'strong', 'strong'),
63
+ 'status' => AAM_Core_Repository::getInstance()->extensionStatus('AAM Post Filter')
64
+ ),
65
+ array(
66
+ 'title' => 'AAM Skeleton Extension',
67
+ 'id' => 'AAM Skeleton Extension',
68
+ 'type' => 'GNU',
69
+ 'license' => 'SKELETONEXT',
70
+ 'description' => __('Skeleton for custom AAM extension. Please find all necessary documentation inside the source code.', AAM_KEY),
71
+ 'status' => AAM_Core_Repository::getInstance()->extensionStatus('AAM Skeleton Extension')
72
+ ),
73
+ array(
74
+ 'title' => 'User Switching',
75
+ 'id' => 'User Switching',
76
+ 'type' => 'plugin',
77
+ 'description' => __('Instant switching between user accounts in WordPress. ', AAM_KEY),
78
+ 'status' => AAM_Core_Repository::getInstance()->pluginStatus('User Switching')
79
+ )
80
+ );
Application/Backend/User.php CHANGED
@@ -89,11 +89,21 @@ class AAM_Backend_User {
89
  $actions = array('manage');
90
 
91
  $prefix = ($user->ID == get_current_user_id() ? 'no-' : '');
 
92
  $actions[] = $prefix . ($user->user_status ? 'unlock' : 'lock');
93
-
94
  $actions[] = 'edit';
95
  }
96
 
 
 
 
 
 
 
 
 
 
 
97
  return $actions;
98
  }
99
 
89
  $actions = array('manage');
90
 
91
  $prefix = ($user->ID == get_current_user_id() ? 'no-' : '');
92
+
93
  $actions[] = $prefix . ($user->user_status ? 'unlock' : 'lock');
 
94
  $actions[] = 'edit';
95
  }
96
 
97
+ if (class_exists('user_switching')) {
98
+ $url = user_switching::maybe_switch_url($user);
99
+
100
+ if (!in_array('edit', $actions) || empty($url)) {
101
+ $actions[] = 'no-switch';
102
+ } else {
103
+ $actions[] = 'switch|' . $url;
104
+ }
105
+ }
106
+
107
  return $actions;
108
  }
109
 
Application/Backend/View.php CHANGED
@@ -86,29 +86,26 @@ class AAM_Backend_View {
86
  public function processAjax() {
87
  $response = null;
88
 
89
- $act = explode('.', AAM_Core_Request::request('sub_action'));
 
90
 
91
- if (count($act) == 1 && method_exists($this, $act[0])) {
92
- $response = call_user_func(array($this, $act[0]));
93
- } else {
94
- $classname = 'AAM_Backend_' . $act[0];
95
  if (class_exists($classname)) {
96
- $object = new $classname();
97
- if (method_exists($object, $act[1])) {
98
- $response = call_user_func(array($object, $act[1]));
99
  }
100
  }
101
  }
102
 
103
- if (is_null($response)) {
104
- $response = apply_filters(
105
- 'aam-ajax-action', $response, $this->getSubject(), $act[0], $act[1]
106
- );
107
- }
108
-
109
- return $response;
110
  }
111
-
112
  /**
113
  * Render the Main Control Area
114
  *
@@ -149,8 +146,8 @@ class AAM_Backend_View {
149
  * @access public
150
  */
151
  public function save() {
152
- $object = AAM_Core_Request::post('object');
153
- $objectId = AAM_Core_Request::post('objectId', 0);
154
 
155
  $param = AAM_Core_Request::post('param');
156
  $value = filter_var(
@@ -171,6 +168,22 @@ class AAM_Backend_View {
171
  'status' => AAM_Core_API::updateOption('aam-welcome', 0)
172
  ));
173
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
174
 
175
  /**
176
  * Get Subject
86
  public function processAjax() {
87
  $response = null;
88
 
89
+ $action = AAM_Core_Request::request('sub_action');
90
+ $parts = explode('.', $action);
91
 
92
+ if (method_exists($this, $parts[0])) {
93
+ $response = call_user_func(array($this, $parts[0]));
94
+ } elseif (count($parts) == 2) { //cover the Model.method pattern
95
+ $classname = 'AAM_Backend_' . $parts[0];
96
  if (class_exists($classname)) {
97
+ $object = new $classname;
98
+ if (method_exists($object, $parts[1])) {
99
+ $response = call_user_func(array($object, $parts[1]));
100
  }
101
  }
102
  }
103
 
104
+ return apply_filters(
105
+ 'aam-ajax-filter', $response, $this->getSubject(), $action
106
+ );
 
 
 
 
107
  }
108
+
109
  /**
110
  * Render the Main Control Area
111
  *
146
  * @access public
147
  */
148
  public function save() {
149
+ $object = trim(AAM_Core_Request::post('object'));
150
+ $objectId = intval(AAM_Core_Request::post('objectId', 0));
151
 
152
  $param = AAM_Core_Request::post('param');
153
  $value = filter_var(
168
  'status' => AAM_Core_API::updateOption('aam-welcome', 0)
169
  ));
170
  }
171
+
172
+ /**
173
+ *
174
+ * @return type
175
+ */
176
+ public function getErrorFixStatus() {
177
+ $plugin = AAM_Core_Repository::getInstance()->pluginStatus('WP Error Fix');
178
+
179
+ if ($plugin['status'] == 'install') {
180
+ $response = array('status' => 'show', 'url' => $plugin['url']);
181
+ } else {
182
+ $response = array('status' => 'hide');
183
+ }
184
+
185
+ return json_encode($response);
186
+ }
187
 
188
  /**
189
  * Get Subject
Application/Backend/view/extension.phtml CHANGED
@@ -1,151 +1,116 @@
1
- <div class="aam-feature" id="extension-content">
2
- <div class="row">
3
- <div class="col-xs-12">
4
- <p class="aam-info">
5
- <?php echo AAM_Backend_Helper::preparePhrase('One license is limited to one domain only but it can be used for unlimited number of test or development environments where URL is either [localhost] or starts with [dev.], [staging.] or [test.]', 'i', 'i', 'i', 'i'); ?>
6
- </p>
7
- </div>
8
- </div>
9
-
10
- <label for="extension-key"><?php echo __('Install Extension', AAM_KEY); ?> <a href="#install-extension-modal" data-toggle="modal"><i class="icon-help-circled"></i></a></label>
11
- <div class="row">
12
- <div class="col-xs-8">
13
- <div class="form-group">
14
- <input type="text" class="form-control" id="extension-key" placeholder="<?php echo __('License Key', AAM_KEY); ?>" />
15
  </div>
16
  </div>
17
- <div class="col-xs-4">
18
- <button class="btn btn-primary btn-block" id="install-extension"><i class="icon-download-cloud"></i> <?php echo __('Install', AAM_KEY); ?></button>
 
 
 
 
 
 
 
 
 
19
  </div>
20
- </div>
21
 
22
- <table class="table table-striped table-bordered aam-margin-top-xs" id="extension-list">
23
- <thead>
24
- <tr>
25
- <th width="80%"><?php echo __('Extension', AAM_KEY); ?></th>
26
- <th><?php echo __('Action', AAM_KEY); ?></th>
27
- </tr>
28
- </thead>
29
- <tbody>
30
- <?php $dev = AAM_Core_Repository::getInstance()->extensionStatus('AAM Development License'); ?>
31
- <?php if ($dev !== AAM_Core_Repository::STATUS_INSTALLED) { ?>
32
  <tr>
33
- <td>
34
- <strong>AAM Development License - $150 <small>USD</small></strong>
35
- <p class="text-justify">
36
- <?php echo __('Development license gives you an ability to download all the available extensions and use them to up to 5 life domains.', AAM_KEY); ?>
37
- </p>
38
- </td>
39
- <td>
40
- <?php if ($dev == AAM_Core_Repository::STATUS_UPDATE) { ?>
41
- <a href="#" class="btn btn-warning btn-block aam-update-extension" data-product="AAM Development License"><i class="icon-arrows-cw"></i> <?php echo __('Update', AAM_KEY); ?></a>
42
- <?php } else { ?>
43
- <a href="https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=ZX9RCWU6BTE52" target="_blank" class="btn btn-success btn-block"><i class="icon-basket"></i> <?php echo __('Purchase', AAM_KEY); ?></a>
44
- <?php } ?>
45
- </td>
46
- </tr>
47
- <?php } ?>
48
- <?php $plusPackage = AAM_Core_Repository::getInstance()->extensionStatus('AAM Plus Package'); ?>
49
- <?php if ($plusPackage !== AAM_Core_Repository::STATUS_INSTALLED) { ?>
50
- <tr>
51
- <td>
52
- <strong>AAM Plus Package - $30 <small>USD</small></strong>
53
- <p class="text-justify">
54
- <?php echo __('Unlock limitations related to Posts and Pages feature. Extend basic AAM functionality with Page Categories and ability to manage access to your comments (AAM Plus Package adds new capabilities to the default list of WordPress capabilities like Edit Comments, Delete Comments, Spam Comments etc.).', AAM_KEY); ?>
55
- </p>
56
- </td>
57
- <td>
58
- <?php if ($plusPackage == AAM_Core_Repository::STATUS_UPDATE) { ?>
59
- <a href="#" class="btn btn-warning btn-block aam-update-extension" data-product="AAM Plus Package"><i class="icon-arrows-cw"></i> <?php echo __('Update', AAM_KEY); ?></a>
60
- <?php } else { ?>
61
- <a href="https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=FGAHULDEFZV4U" target="_blank" class="btn btn-success btn-block"><i class="icon-basket"></i> <?php echo __('Purchase', AAM_KEY); ?></a>
62
- <?php } ?>
63
- </td>
64
  </tr>
65
- <?php } ?>
66
- <?php $utilities = AAM_Core_Repository::getInstance()->extensionStatus('AAM Utilities'); ?>
67
- <?php if ($utilities !== AAM_Core_Repository::STATUS_INSTALLED) { ?>
68
- <tr>
69
- <td>
70
- <strong>AAM Utilities - <span class="text-success">Free</span></strong>
71
- <p class="text-justify">
72
- <?php echo __('Various useful tools for AAM like caching or clear all settings.', AAM_KEY); ?>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
73
  </p>
74
  </td>
75
- <td>
76
- <?php if ($utilities == AAM_Core_Repository::STATUS_UPDATE) { ?>
77
- <a href="#" class="btn btn-warning btn-block aam-update-extension" data-product="AAM Utilities"><i class="icon-arrows-cw"></i> <?php echo __('Update', AAM_KEY); ?></a>
78
- <?php } else { ?>
79
- <a href="#" class="btn btn-success btn-block aam-download-extension" data-license="AAMUTILITIES"><i class="icon-download-cloud"></i> <?php echo __('Download', AAM_KEY); ?></a>
80
- <?php } ?>
81
- </td>
82
  </tr>
83
- <?php } ?>
84
- <?php $multisite = AAM_Core_Repository::getInstance()->extensionStatus('AAM Multisite'); ?>
85
- <?php if ($multisite !== AAM_Core_Repository::STATUS_INSTALLED) { ?>
86
- <tr>
87
- <td>
88
- <strong>AAM Multisite - <span class="text-success">Free</span></strong>
89
- <p class="text-justify">
90
- <?php echo __('Convenient way to navigate between different sites in the Network Admin Panel. This extension adds additional widget to the AAM page that allows to switch between different sites.', AAM_KEY); ?>
 
 
 
 
 
91
  </p>
92
- </td>
93
- <td>
94
- <?php if ($multisite == AAM_Core_Repository::STATUS_UPDATE) { ?>
95
- <a href="#" class="btn btn-warning btn-block aam-update-extension" data-product="AAM Multisite"><i class="icon-arrows-cw"></i> <?php echo __('Update', AAM_KEY); ?></a>
96
- <?php } else { ?>
97
- <a href="#" class="btn btn-success btn-block aam-download-extension" data-license="AAMMULTISITE"><i class="icon-download-cloud"></i> <?php echo __('Download', AAM_KEY); ?></a>
98
- <?php } ?>
99
- </td>
100
- </tr>
101
- <?php } ?>
102
- <tr id="extension-list-empty" class="hidden">
103
- <td colspan="2">
104
- <p class="aam-notification-message text-center">
105
- <?php echo __('All extensions are installed and up to date.', AAM_KEY); ?>
106
- </p>
107
- </td>
108
- </tr>
109
- </tbody>
110
- </table>
111
 
112
- <div class="modal fade" id="extension-notification-modal" tabindex="-1" role="dialog">
113
- <div class="modal-dialog" role="document">
114
- <div class="modal-content">
115
- <div class="modal-header">
116
- <button type="button" class="close" data-dismiss="modal" aria-label="<?php echo __('Close', AAM_KEY); ?>"><span aria-hidden="true">&times;</span></button>
117
- <h4 class="modal-title"><?php echo __('Notification', AAM_KEY); ?></h4>
118
- </div>
119
- <div class="modal-body">
120
- <p class="text-center aam-notification-message">
121
- <strong><span id="installation-error"></span></strong>. <?php echo sprintf(__('Click "Download" button below for a manual installation. Simply unzip the archive to wp-content%s directory.', AAM_KEY), AAM_Core_Repository::RELPATH); ?>
122
- </p>
123
- </div>
124
- <div class="modal-footer">
125
- <button type="button" class="btn btn-success" id="download-extension"><?php echo __('Download', AAM_KEY); ?></button>
126
- <button type="button" class="btn btn-default" data-dismiss="modal"><?php echo __('Cancel', AAM_KEY); ?></button>
127
  </div>
128
  </div>
129
  </div>
130
- </div>
131
-
132
- <div class="modal fade" id="install-extension-modal" tabindex="-1" role="dialog">
133
- <div class="modal-dialog" role="document">
134
- <div class="modal-content">
135
- <div class="modal-header">
136
- <button type="button" class="close" data-dismiss="modal" aria-label="<?php echo __('Close', AAM_KEY); ?>"><span aria-hidden="true">&times;</span></button>
137
- <h4 class="modal-title"><?php echo __('Install Extension Info', AAM_KEY); ?></h4>
138
- </div>
139
- <div class="modal-body">
140
- <p class="text-justify aam-notification-message">
141
- <?php echo __('In order to install premium extension, please use PayPal transaction ID number that you recieved after the payment was completed successfully (it might take up to 2 hours for PayPal to send you the email). If you already purchased an extension for the older AAM version, use the license key but please remember that it is limited only to one life domain.', AAM_KEY); ?>
142
- </p>
143
- </div>
144
- <div class="modal-footer">
145
- <button type="button" class="btn btn-default" data-dismiss="modal"><?php echo __('Close', AAM_KEY); ?></button>
146
  </div>
147
  </div>
148
  </div>
149
  </div>
150
-
151
- </div>
1
+ <?php if (defined('AAM_KEY')) { ?>
2
+ <div class="aam-feature" id="extension-content">
3
+ <div class="row">
4
+ <div class="col-xs-12">
5
+ <p class="aam-info">
6
+ <?php echo AAM_Backend_Helper::preparePhrase('One license is limited to one domain only but it can be used for unlimited number of test or development environments where URL is either [localhost] or starts with [dev.], [staging.] or [test.]', 'i', 'i', 'i', 'i'); ?><br/>
7
+ </p>
 
 
 
 
 
 
 
8
  </div>
9
  </div>
10
+
11
+ <label for="extension-key"><?php echo __('Install Extension', AAM_KEY); ?> <a href="#install-extension-modal" data-toggle="modal"><i class="icon-help-circled"></i></a></label>
12
+ <div class="row">
13
+ <div class="col-xs-8">
14
+ <div class="form-group">
15
+ <input type="text" class="form-control" id="extension-key" placeholder="<?php echo __('License Key', AAM_KEY); ?>" />
16
+ </div>
17
+ </div>
18
+ <div class="col-xs-4">
19
+ <button class="btn btn-primary btn-block" id="install-extension"><i class="icon-download-cloud"></i> <?php echo __('Install', AAM_KEY); ?></button>
20
+ </div>
21
  </div>
 
22
 
23
+ <table class="table table-striped table-bordered aam-margin-top-xs" id="extension-list">
24
+ <thead>
 
 
 
 
 
 
 
 
25
  <tr>
26
+ <th width="80%"><?php echo __('Extension', AAM_KEY); ?></th>
27
+ <th><?php echo __('Action', AAM_KEY); ?></th>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
28
  </tr>
29
+ </thead>
30
+ <tbody>
31
+ <?php foreach ($this->getProductList() as $product) { ?>
32
+ <tr>
33
+ <td>
34
+ <h4><?php echo $product['title'], ' - ' . ($product['type'] == 'commercial' ? $product['cost'] . ' <small>' . $product['currency'] . '</small>' : '<span class="text-success">' . __('Free', AAM_KEY) . '</span>'); ?></h4>
35
+ <p class="text-justify">
36
+ <?php echo $product['description']; ?>
37
+ </p>
38
+ </td>
39
+ <td>
40
+ <?php if ($product['status'] == AAM_Core_Repository::STATUS_INSTALLED) { ?>
41
+ <span class="aam-extension-installed"><i class="icon-check"></i> <?php echo __('Installed', AAM_KEY); ?></span>
42
+ <?php } elseif ($product['status'] == AAM_Core_Repository::STATUS_UPDATE) { ?>
43
+ <a href="#" class="btn btn-warning btn-block aam-update-extension" data-product="<?php echo $product['id']; ?>"><i class="icon-arrows-cw"></i> <?php echo __('Update', AAM_KEY); ?></a>
44
+ <?php } elseif ($product['type'] == 'commercial') { ?>
45
+ <a href="<?php echo $product['storeURL']; ?>" target="_blank" class="btn btn-success btn-block"><i class="icon-basket"></i> <?php echo __('Purchase', AAM_KEY); ?></a>
46
+ <?php } elseif ($product['type'] == 'plugin') { ?>
47
+ <?php if ($product['status']['status'] == 'install') { ?>
48
+ <a href="<?php echo $product['status']['url']; ?>" class="btn btn-success btn-block"><i class="icon-plus"></i> <?php echo __('Install', AAM_KEY); ?></a>
49
+ <?php } else { ?>
50
+ <span class="aam-extension-installed"><i class="icon-check"></i> <?php echo __('Installed', AAM_KEY); ?></span>
51
+ <?php } ?>
52
+ <?php } else { ?>
53
+ <a href="#" class="btn btn-success btn-block aam-download-extension" data-license="<?php echo $product['license']; ?>"><i class="icon-download-cloud"></i> <?php echo __('Download', AAM_KEY); ?></a>
54
+ <?php } ?>
55
+ </td>
56
+ </tr>
57
+ <?php } ?>
58
+
59
+ <tr id="extension-list-empty" class="hidden">
60
+ <td colspan="2">
61
+ <p class="aam-notification-message text-center">
62
+ <?php echo __('All extensions are installed and up to date.', AAM_KEY); ?>
63
  </p>
64
  </td>
 
 
 
 
 
 
 
65
  </tr>
66
+ </tbody>
67
+ </table>
68
+
69
+ <div class="modal fade" id="extension-notification-modal" tabindex="-1" role="dialog">
70
+ <div class="modal-dialog" role="document">
71
+ <div class="modal-content">
72
+ <div class="modal-header">
73
+ <button type="button" class="close" data-dismiss="modal" aria-label="<?php echo __('Close', AAM_KEY); ?>"><span aria-hidden="true">&times;</span></button>
74
+ <h4 class="modal-title"><?php echo __('Notification', AAM_KEY); ?></h4>
75
+ </div>
76
+ <div class="modal-body">
77
+ <p class="text-center aam-notification">
78
+ <strong><span id="installation-error"></span>.</strong> <?php echo __('Extension requires manual installation. Please follow few simple steps below.', AAM_KEY); ?>
79
  </p>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
80
 
81
+ <ul class="aam-outer-top-xs aam-numeric-list">
82
+ <li><?php echo AAM_Backend_Helper::preparePhrase('Click [Download] button below and save the zip archive on your computer', 'b'); ?>;</li>
83
+ <li><?php echo AAM_Backend_Helper::preparePhrase('Connect to your website via FTP and navigate to [wp-content] folder', 'b'); ?>;</li>
84
+ <li><?php echo AAM_Backend_Helper::preparePhrase('Create [aam/extension] folder inside [wp-content] and make sure it is writable by your server', 'b', 'b'); ?>;</li>
85
+ <li><?php echo AAM_Backend_Helper::preparePhrase('Unzip downloaded archive and transfer the folder inside the [wp-content/aam/extension] folder', 'b'); ?>.</li>
86
+ </ul>
87
+ </div>
88
+ <div class="modal-footer">
89
+ <button type="button" class="btn btn-success" id="download-extension"><?php echo __('Download', AAM_KEY); ?></button>
90
+ <button type="button" class="btn btn-default" data-dismiss="modal"><?php echo __('Cancel', AAM_KEY); ?></button>
91
+ </div>
 
 
 
 
92
  </div>
93
  </div>
94
  </div>
95
+
96
+ <div class="modal fade" id="install-extension-modal" tabindex="-1" role="dialog">
97
+ <div class="modal-dialog" role="document">
98
+ <div class="modal-content">
99
+ <div class="modal-header">
100
+ <button type="button" class="close" data-dismiss="modal" aria-label="<?php echo __('Close', AAM_KEY); ?>"><span aria-hidden="true">&times;</span></button>
101
+ <h4 class="modal-title"><?php echo __('Install Extension Info', AAM_KEY); ?></h4>
102
+ </div>
103
+ <div class="modal-body aam-info-modal">
104
+ <p>
105
+ <?php echo __('In order to install the extension, please use license number that you recieved after the payment was completed successfully (it might take up to 2 hours for PayPal to send you the email). If you already purchased an extension for the older AAM version, use the license key but please remember that it is limited only to one life domain.', AAM_KEY); ?>
106
+ </p>
107
+ </div>
108
+ <div class="modal-footer">
109
+ <button type="button" class="btn btn-default" data-dismiss="modal"><?php echo __('Close', AAM_KEY); ?></button>
110
+ </div>
111
  </div>
112
  </div>
113
  </div>
114
  </div>
115
+ <?php
116
+ }
Application/Backend/view/index.phtml CHANGED
@@ -1,319 +1,306 @@
1
- <div class="wrap">
2
- <div class="row aam-no-margin aam-notification-container<?php echo (AAM_Core_Console::hasIssues() ? '' : ' hidden') ?>">
3
- <div class="col-xs-12">
4
- <div class="row aam-notification">
5
- <div class="col-xs-4 col-md-2 aam-notification-icon">
6
- <i class="icon-attention-circled"></i>
 
 
 
 
 
 
 
 
 
7
  </div>
8
- <div class="col-xs-8 col-md-10 aam-notification-content">
9
- <ul class="aam-error-list">
10
- <?php foreach (AAM_Core_Console::getWarnings() as $message) { ?>
11
- <li><?php echo $message; ?></li>
12
- <?php } ?>
13
- </ul>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
14
  </div>
15
  </div>
16
  </div>
17
- </div>
18
-
19
- <div class="row">
20
- <div class="col-xs-12 col-md-8">
21
- <h1 class="aam-current-subject"></h1>
22
  </div>
23
- </div>
24
-
25
- <div class="row">
26
- <div class="col-xs-12 col-md-8">
27
- <div class="metabox-holder">
28
- <div class="postbox">
29
- <h3 class="hndle">
30
- <span><?php echo __('Access Manager', AAM_KEY); ?></span>
31
- <span class="aam-help-menu" data-target="#access-manager-inside"><i class="icon-help-circled"></i></span>
32
- </h3>
33
- <div class="inside" id="access-manager-inside">
34
- <div class="aam-postbox-inside" id="aam-content"></div>
35
- <div class="aam-help-context" >
36
- <p class="aam-info aam-hint">
37
- <strong><?php echo __('Note from the author', AAM_KEY); ?></strong><br/>
38
- <?php echo __('Appreciate your interest in Advanced Access Manager (aka AAM). With a strong knowledge and experience in WordPress, AAM becomes a very powerful tool to manage access to your frontend and backend.', AAM_KEY); ?><br/>
39
- <span class="aam-highlight"><?php echo __('Please notice!', AAM_KEY); ?></span> <?php echo AAM_Backend_Helper::preparePhrase('Power comes with responsibility. Make sure that you have enough knowledge in WordPress Roles and Capabilities because AAM is very closely tight to WordPress core. It is also very important [to have backup of your database before you start working with AAM] (there is no need to backup your files, AAM does not modify any physical files on your server and never did).', 'b'); ?><br/>
40
- <?php echo __('AAM was thoroughly tested on the fresh installation of WordPress and in the latest versions of Chrome, Safari, IE and Firefox. If you have any issues, please make sure that there is no conflict with other plugins on your WordPress installation.', AAM_KEY); ?><br/>
41
- <?php echo __('Please find below the short description of each feature that AAM offers.', AAM_KEY); ?>
42
- </p>
43
 
44
- <p class="text-justify">
45
- <strong><?php echo __('Backend Menu', AAM_KEY); ?></strong><br/>
46
- <?php echo __('Filter the admin menu. Please notice that it only filters the menu but does not restrict a direct access to the filtered menus. In order to completely restrict access to the menu, make sure that your role or user does not have capability that is assigned by WordPress core to that menu (the capability name is right next to the menu name).', AAM_KEY); ?>
47
- </p>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
48
 
49
- <p class="text-justify">
50
- <strong><?php echo __('Metaboxes &amp; Widgets', AAM_KEY); ?></strong><br/>
51
- <?php echo __('Filter backend metaboxes and frontend widgets. If the list of metaboxes and widgets is empty, click the “Refresh” button. This will reinitialize the list. It is a possibility that this feature will not work on servers that fails to execute WordPress remote request function “wp_remote_request”.', AAM_KEY); ?>
52
- </p>
53
 
54
- <p class="text-justify">
55
- <strong><?php echo __('Capabilities', AAM_KEY); ?></strong><br/>
56
- <?php echo __('This is probably the most important and powerful feature that manages list of capabilities for roles and users. Please make sure that you are familiar with WordPress Roles and Capabilities before using this feature. Do not try to un-check any capability for the Administrator role because your might lose access to your backend. While creating a new capability, AAM takes the capability name without any additional processing or normalization; which means that if you created new capability Manage Boats”, internally it retains the same exact name.', AAM_KEY); ?>
57
- </p>
58
 
59
- <p class="text-justify">
60
- <strong><?php echo __('Posts &amp; Pages', AAM_KEY); ?></strong><br/>
61
- <?php echo __('Manage access to your posts, pages and custom post types.', AAM_KEY); ?> <span class="aam-highlight"><?php echo __('Please notice!', AAM_KEY); ?></span> <?php echo __('This feature has limitations without AAM Plus Package extension.', AAM_KEY); ?>
62
- </p>
63
 
64
- <p class="text-justify">
65
- <strong><?php echo __('Extensions', AAM_KEY); ?></strong><br/>
66
- <?php echo sprintf(__('Extend AAM functionality with variety of extensions that can be either downloaded for free or purchased. All payment transactions are handled securely through PayPal and the PayPal Transaction ID is used to obtain the purchased extension (you can find Transaction ID in the email that PayPal send you after the purchase). Most of the time the extension is available for download almost immediately but it might take up to 2 hours for PayPal to notify our server about your payment. You are allowed to get the full refund within 30 days after the purchase, if extension did not meet your expectation. Please submit the %srefund form%s and we will issue a refund within next 3 business days.', AAM_KEY), '<a href="http://vasyltech.com/advanced-access-manager" target="_blank">', '</a>'); ?>
67
- </p>
68
-
69
- <div class="aam-info aam-social">
70
- <a href="http://vasyltech.com" target="_blank"><i class="icon-home"></i></a>
71
- <a href="http://twitter.com/vasyltech" target="_blank"><i class="icon-twitter"></i></a>
72
- <a href="https://github.com/VasylTech/advanced-access-manager" target="_blank"><i class="icon-github"></i></a>
 
 
 
 
 
 
73
  </div>
74
  </div>
75
  </div>
76
  </div>
77
  </div>
78
- </div>
79
 
80
- <div class="col-xs-12 col-md-4">
81
- <div class="metabox-holder">
82
- <?php do_action('aam-sidebar-ui-action', 'top'); ?>
83
 
84
- <div class="postbox">
85
- <h3 class="hndle">
86
- <span><?php echo __('User/Role Manager', AAM_KEY); ?></span>
87
- <span class="aam-help-menu" data-target="#user-role-manager-inside"><i class="icon-help-circled"></i></span>
88
- </h3>
89
- <div class="inside" id="user-role-manager-inside">
90
- <div class="aam-postbox-inside">
91
- <ul class="nav nav-tabs" role="tablist">
92
- <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>
93
- <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>
94
- <?php if (current_user_can('edit_users')) { ?>
95
- <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>
96
- <?php } ?>
97
- </ul>
98
- <div class="tab-content">
99
- <div role="tabpanel" class="tab-pane active" id="roles">
100
- <table id="role-list" class="table table-striped table-bordered">
101
- <thead>
102
- <tr>
103
- <th>ID</th>
104
- <th>Users</th>
105
- <th width="70%"><?php echo __('Role', AAM_KEY); ?></th>
106
- <th><?php echo __('Action', AAM_KEY); ?></th>
107
- </tr>
108
- </thead>
109
- <tbody></tbody>
110
- </table>
111
 
112
- <div class="modal fade" id="add-role-modal" tabindex="-1" role="dialog">
113
- <div class="modal-dialog modal-sm" role="document">
114
- <div class="modal-content">
115
- <div class="modal-header">
116
- <button type="button" class="close" data-dismiss="modal" aria-label="<?php echo __('Close', AAM_KEY); ?>"><span aria-hidden="true">&times;</span></button>
117
- <h4 class="modal-title"><?php echo __('Add New Role', AAM_KEY); ?></h4>
118
- </div>
119
- <div class="modal-body">
120
- <div class="form-group">
121
- <label for="new-role-name"><?php echo __('Role Name', AAM_KEY); ?><span class="aam-asterix">*</span></label>
122
- <input type="text" class="form-control" id="new-role-name" placeholder="<?php echo __('Enter Role Name', AAM_KEY); ?>" />
123
  </div>
124
- <div class="form-group">
125
- <label for="inherit-role-list"><?php echo __('Inherit Capabilities', AAM_KEY); ?></label>
126
- <select class="form-control" id="inherit-role-list">
127
- <option value=""><?php echo __('Select Role', AAM_KEY); ?></option>
128
- </select>
 
 
 
 
 
 
 
 
 
 
129
  </div>
130
- </div>
131
- <div class="modal-footer">
132
- <button type="button" class="btn btn-success" id="add-role-btn"><?php echo __('Add Role', AAM_KEY); ?></button>
133
- <button type="button" class="btn btn-default" data-dismiss="modal"><?php echo __('Close', AAM_KEY); ?></button>
134
  </div>
135
  </div>
136
  </div>
137
- </div>
138
 
139
- <div class="modal fade" id="edit-role-modal" tabindex="-1" role="dialog">
140
- <div class="modal-dialog modal-sm" role="document">
141
- <div class="modal-content">
142
- <div class="modal-header">
143
- <button type="button" class="close" data-dismiss="modal" aria-label="<?php echo __('Close', AAM_KEY); ?>"><span aria-hidden="true">&times;</span></button>
144
- <h4 class="modal-title"><?php echo __('Edit Role', AAM_KEY); ?></h4>
145
- </div>
146
- <div class="modal-body">
147
- <div class="form-group">
148
- <label for="new-role-name"><?php echo __('Role Name', AAM_KEY); ?></label>
149
- <input type="text" class="form-control" id="edit-role-name" placeholder="<?php echo __('Enter Role Name', AAM_KEY); ?>" />
 
 
 
 
 
150
  </div>
151
- </div>
152
- <div class="modal-footer">
153
- <button type="button" class="btn btn-success" id="edit-role-btn"><?php echo __('Update Role', AAM_KEY); ?></button>
154
- <button type="button" class="btn btn-default" data-dismiss="modal"><?php echo __('Close', AAM_KEY); ?></button>
155
  </div>
156
  </div>
157
  </div>
158
- </div>
159
 
160
- <div class="modal fade" id="delete-role-modal" tabindex="-1" role="dialog">
161
- <div class="modal-dialog modal-sm" role="document">
162
- <div class="modal-content">
163
- <div class="modal-header">
164
- <button type="button" class="close" data-dismiss="modal" aria-label="<?php echo __('Close', AAM_KEY); ?>"><span aria-hidden="true">&times;</span></button>
165
- <h4 class="modal-title"><?php echo __('Delete Role', AAM_KEY); ?></h4>
166
- </div>
167
- <div class="modal-body">
168
- <p class="text-center aam-confirm-message" data-message="<?php echo __('Are you sure that you want to delete %s role?', AAM_KEY); ?>"></p>
169
- </div>
170
- <div class="modal-footer">
171
- <button type="button" class="btn btn-danger" id="delete-role-btn"><?php echo __('Delete Role', AAM_KEY); ?></button>
172
- <button type="button" class="btn btn-default" data-dismiss="modal"><?php echo __('Close', AAM_KEY); ?></button>
 
173
  </div>
174
  </div>
175
  </div>
176
- </div>
177
 
178
- <div class="modal fade" id="role-notification-modal" tabindex="-1" role="dialog">
179
- <div class="modal-dialog" role="document">
180
- <div class="modal-content">
181
- <div class="modal-header">
182
- <button type="button" class="close" data-dismiss="modal" aria-label="<?php echo __('Close', AAM_KEY); ?>"><span aria-hidden="true">&times;</span></button>
183
- <h4 class="modal-title"><?php echo __('Notification', AAM_KEY); ?></h4>
184
- </div>
185
- <div class="modal-body">
186
- <p class="text-center aam-notification-message"><?php echo __('You are not allowed to delete this role because either you do not have a capability to "Delete Users" or there is at least one user assigned to it.', AAM_KEY); ?></p>
187
- </div>
188
- <div class="modal-footer">
189
- <button type="button" class="btn btn-default" data-dismiss="modal"><?php echo __('OK', AAM_KEY); ?></button>
 
190
  </div>
191
  </div>
192
  </div>
193
- </div>
194
 
195
- </div>
196
- <div role="tabpanel" class="tab-pane" id="users">
197
- <table id="user-list" class="table table-striped table-bordered">
198
- <thead>
199
- <tr>
200
- <th>ID</th>
201
- <th>Roles</th>
202
- <th width="70%"><?php echo __('Username', AAM_KEY); ?></th>
203
- <th><?php echo __('Action', AAM_KEY); ?></th>
204
- </tr>
205
- </thead>
206
- <tbody></tbody>
207
- </table>
208
 
209
- <div class="modal fade" id="user-notification-modal" tabindex="-1" role="dialog">
210
- <div class="modal-dialog modal-sm" role="document">
211
- <div class="modal-content">
212
- <div class="modal-header">
213
- <button type="button" class="close" data-dismiss="modal" aria-label="<?php echo __('Close', AAM_KEY); ?>"><span aria-hidden="true">&times;</span></button>
214
- <h4 class="modal-title"><?php echo __('Notification', AAM_KEY); ?></h4>
215
- </div>
216
- <div class="modal-body">
217
- <p class="text-center aam-notification-message"><?php echo __('You are not allowed to perform this action.', AAM_KEY); ?></p>
218
- </div>
219
- <div class="modal-footer">
220
- <button type="button" class="btn btn-default" data-dismiss="modal"><?php echo __('OK', AAM_KEY); ?></button>
 
221
  </div>
222
  </div>
223
  </div>
224
- </div>
225
 
226
- </div>
227
- <?php if (current_user_can('edit_users')) { ?>
228
- <div role="tabpanel" class="tab-pane" id="visitor">
229
- <div class="visitor-message">
230
- <span><?php echo __('Manage access to your website for visitors (any user that is not authenticated)', AAM_KEY); ?>.</span>
231
- <button class="btn btn-primary btn-block" id="manage-visitor"><i class="icon-cog"></i> <?php echo __('Manage Visitor', AAM_KEY); ?></button>
232
  </div>
 
 
 
 
 
 
 
 
233
  </div>
234
- <?php } ?>
235
  </div>
236
- </div>
237
- <div class="aam-help-context">
238
- <p class="aam-info aam-hint">
239
- <?php echo AAM_Backend_Helper::preparePhrase('Manage access for your users, roles and visitors. Please be careful with Administrator role as well as your admin user. [Database backup is strongly recommended]', 'b'); ?>
240
- </p>
241
 
242
- <p class="text-justify">
243
- <strong><?php echo __('Role Manager', AAM_KEY); ?></strong><br/>
244
- <?php echo __('With role manager you can manage access for any defined role, edit role\'s name, create new role or even delete existing (but only when there is no users assigned to it). You are not allowed to delete Administrator role.', AAM_KEY); ?>
245
- </p>
246
 
247
- <p class="text-justify">
248
- <strong><?php echo __('User Manager', AAM_KEY); ?></strong><br/>
249
- <?php echo __('Manage access for any user. As a bonus feature, you can block user. It means that user will be not able to login to your website anymore. Create or edit user actions link to the native WordPress create/edit user interface.', AAM_KEY); ?>
250
- </p>
251
 
252
- <p class="text-justify">
253
- <strong><?php echo __('Visitor Manager', AAM_KEY); ?></strong><br/>
254
- <?php echo __('Visitor is any user that is not authenticated to your website. Considering the fact that visitors do not have any access to backend, any features that ara backend related are disabled.', AAM_KEY); ?>
255
- </p>
256
-
257
- <div class="aam-info aam-social">
258
- <a href="http://vasyltech.com" target="_blank"><i class="icon-home"></i></a>
259
- <a href="http://twitter.com/vasyltech" target="_blank"><i class="icon-twitter"></i></a>
260
- <a href="https://github.com/VasylTech/advanced-access-manager" target="_blank"><i class="icon-github"></i></a>
 
261
  </div>
262
  </div>
263
  </div>
264
- </div>
265
- <?php do_action('aam-sidebar-ui-action', 'bottom'); ?>
266
- </div>
267
- </div>
268
- </div>
269
- </div>
270
-
271
- <div class="aam-welcome-message">
272
- <div class="row aam-no-margin aam-notification-container hidden">
273
- <div class="col-xs-12">
274
- <div class="row aam-notification">
275
- <div class="col-xs-4 col-md-2 aam-notification-icon">
276
- <i class="icon-attention-circled"></i>
277
- </div>
278
- <div class="col-xs-8 col-md-10 aam-notification-content">
279
- <ul class="aam-error-list"></ul>
280
  </div>
281
  </div>
282
  </div>
283
  </div>
284
-
285
- <h1><?php echo AAM_Backend_Helper::preparePhrase('Welcome to [Advanced Access Manager] [(aka AAM)]', 'strong', 'small'); ?></h1>
286
-
287
- <p class="aam-info aam-margin-top-xs">
288
- <?php echo sprintf(__('Follow us on twitter %s for the latest Advanced Access Manager news.', AAM_KEY), '<strong><a href="https://twitter.com/vasyltech/" target="_blank">@vasyltech</a></strong>'); ?>
289
- </p>
290
-
291
- <h2 class="aam-margin-top-xs"><?php echo __('What\'s New', AAM_KEY); ?></h2>
292
- <ul>
293
- <li><?php echo __('Brand new and much more intuitive user interface.', AAM_KEY); ?></li>
294
- <li><?php echo __('Fully responsive design so you can manage access to website even on your smart phone.', AAM_KEY); ?></li>
295
- <li><?php echo __('Better, more reliable and faster core functionality.', AAM_KEY); ?></li>
296
- <li><?php echo __('Completely new extension handler. In case of any file system failure, you can download an extension for manual installation.', AAM_KEY); ?></li>
297
- <li><?php echo __('Added "Manage Access" action to the list of user.', AAM_KEY); ?></li>
298
- </ul>
299
-
300
- <h2 class="aam-highlight aam-margin-top-xs"><?php echo __('Please be aware of the latest changes!', AAM_KEY); ?></h2>
301
- <ul>
302
- <li><?php echo __('"Save" button has been removed. Any changes that you perform are saved automatically.', AAM_KEY); ?></li>
303
- <li><?php echo sprintf('With the first release of AAM version 3, not all extensions from AAM version 2 available for download. More extensions are coming soon. Follow us on twitter %s for the latest news.', '<strong><a href="https://twitter.com/vasyltech/" target="_blank">@vasyltech</a></strong>'); ?></li>
304
- <li><?php echo __('License key for an extension is valid for one life domain only. All the licenses that were purchased before are still valid but limited to one domain with AAM version 3 (with AAM version 2 it is still unlimited until April 2016).', AAM_KEY); ?></li>
305
- <li><?php echo __('Development License is valid for 5 domains with AAM version 3 but is still unlimited with version 2 (only until April 2016).', AAM_KEY); ?></li>
306
- <li><?php echo __('Posts &amp; Pages settings from AAM version 2 are not compatible with AAM version 3.', AAM_KEY); ?></li>
307
- <li><?php echo __('You are not allowed to delete or lock an "Administrator" role.', AAM_KEY); ?></li>
308
- <li><?php echo __('There is no longer a "Super Admin" role.', AAM_KEY); ?></li>
309
- <li><?php echo __('You are not longer allowed to delete any user or group or users (but you still can do it within native WordPress interface).', AAM_KEY); ?></li>
310
- <li><?php echo __('You are not allowed to delete any capability (even the one that you created manually).', AAM_KEY); ?></li>
311
- </ul>
312
-
313
- <h3>Rollback to AAM version 2</h3>
314
- <p><?php echo sprintf(__('You can rolleback to the earlier version of AAM by simply downloading any previous version on %sthis page%s. After download, replace the wp-content/plugins/advanced-access-manager directory with the archive\'s content.'), '<a href="https://wordpress.org/plugins/advanced-access-manager/developers/" target="_blank">', '</a>'); ?></p>
315
-
316
- <p class="aam-margin-top-xs text-center">
317
- <a href="#" class="btn btn-lg btn-primary" id="confirm-welcome"><i class="icon-check"></i> <?php echo __('Ok, got it', AAM_KEY); ?></a>
318
- </p>
319
- </div>
1
+ <?php if (defined('AAM_KEY')) { ?>
2
+ <div class="wrap">
3
+ <div class="row aam-no-margin aam-notification-container<?php echo (AAM_Core_Console::hasIssues() ? '' : ' hidden') ?>">
4
+ <div class="col-xs-12">
5
+ <div class="row aam-notification">
6
+ <div class="col-xs-4 col-md-2 aam-notification-icon">
7
+ <i class="icon-attention-circled"></i>
8
+ </div>
9
+ <div class="col-xs-8 col-md-10 aam-notification-content">
10
+ <ul class="aam-error-list">
11
+ <?php foreach (AAM_Core_Console::getWarnings() as $message) { ?>
12
+ <li><?php echo $message; ?></li>
13
+ <?php } ?>
14
+ </ul>
15
+ </div>
16
  </div>
17
+ </div>
18
+ </div>
19
+
20
+ <div class="modal fade" id="cache-info-modal" tabindex="-1" role="dialog">
21
+ <div class="modal-dialog" role="document">
22
+ <div class="modal-content">
23
+ <div class="modal-header">
24
+ <button type="button" class="close" data-dismiss="modal" aria-label="<?php echo __('Close', AAM_KEY); ?>"><span aria-hidden="true">&times;</span></button>
25
+ <h4 class="modal-title"><?php echo __('Cache Information', AAM_KEY); ?></h4>
26
+ </div>
27
+ <div class="modal-body">
28
+ <p class="aam-info"><?php echo __('AAM main objective is to control access to your frontend and backend resources. In some cases your website may get slower because AAM performs additional checks. That is why it is important to have AAM caching turned on. Please follow few simple steps below to turn on the caching mechanism.', AAM_KEY); ?></p>
29
+ <ul class="aam-numeric-list">
30
+ <li><?php echo AAM_Backend_Helper::preparePhrase('Go to [Extensions] tab and click [Download] button for [AAM Utilities]', 'b', 'b', 'i'); ?>;</li>
31
+ <li><?php echo AAM_Backend_Helper::preparePhrase('After [AAM Utilities] installed successfully, go to [Utilities] tab and enable [Caching].', 'i', 'b', 'b'); ?></ol>
32
+ </ul>
33
+ </div>
34
+ <div class="modal-footer">
35
+ <button type="button" class="btn btn-default" data-dismiss="modal"><?php echo __('OK', AAM_KEY); ?></button>
36
+ </div>
37
  </div>
38
  </div>
39
  </div>
40
+
41
+ <div class="row">
42
+ <div class="col-xs-12 col-md-8">
43
+ <h1 class="aam-current-subject"></h1>
44
+ </div>
45
  </div>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
46
 
47
+ <div class="row">
48
+ <div class="col-xs-12 col-md-8">
49
+ <div class="metabox-holder">
50
+ <div class="postbox">
51
+ <h3 class="hndle">
52
+ <span><?php echo __('Access Manager', AAM_KEY); ?></span>
53
+ <span class="aam-help-menu" data-target="#access-manager-inside"><i class="icon-help-circled"></i></span>
54
+ </h3>
55
+ <div class="inside" id="access-manager-inside">
56
+ <div class="aam-postbox-inside" id="aam-content"></div>
57
+ <div class="aam-help-context" >
58
+ <p class="aam-info aam-hint">
59
+ <strong><?php echo __('Note from the author', AAM_KEY); ?></strong><br/>
60
+ <?php echo __('Appreciate your interest in Advanced Access Manager (aka AAM). With a strong knowledge and experience in WordPress, AAM becomes a very powerful tool to manage access to your frontend and backend.', AAM_KEY); ?><br/>
61
+ <span class="aam-highlight"><?php echo __('Please notice!', AAM_KEY); ?></span> <?php echo AAM_Backend_Helper::preparePhrase('Power comes with responsibility. Make sure that you have enough knowledge in WordPress Roles and Capabilities because AAM is very closely tight to WordPress core. It is also very important [to have backup of your database before you start working with AAM] (there is no need to backup your files, AAM does not modify any physical files on your server and never did).', 'b'); ?><br/>
62
+ <?php echo __('AAM was thoroughly tested on the fresh installation of WordPress and in the latest versions of Chrome, Safari, IE and Firefox. If you have any issues, please make sure that there is no conflict with other plugins on your WordPress installation.', AAM_KEY); ?><br/>
63
+ <?php echo __('Please find below the short description of each feature that AAM offers.', AAM_KEY); ?>
64
+ </p>
65
 
66
+ <p class="text-justify">
67
+ <strong><?php echo __('Backend Menu', AAM_KEY); ?></strong><br/>
68
+ <?php echo __('Filter the admin menu. Please notice that it only filters the menu but does not restrict a direct access to the filtered menus. In order to completely restrict access to the menu, make sure that your role or user does not have capability that is assigned by WordPress core to that menu (the capability name is right next to the menu name).', AAM_KEY); ?>
69
+ </p>
70
 
71
+ <p class="text-justify">
72
+ <strong><?php echo __('Metaboxes &amp; Widgets', AAM_KEY); ?></strong><br/>
73
+ <?php echo __('Filter backend metaboxes and frontend widgets. If the list of metaboxes and widgets is empty, click the “Refresh” button. This will reinitialize the list. It is a possibility that this feature will not work on servers that fails to execute WordPress remote request functionwp_remote_request”.', AAM_KEY); ?>
74
+ </p>
75
 
76
+ <p class="text-justify">
77
+ <strong><?php echo __('Capabilities', AAM_KEY); ?></strong><br/>
78
+ <?php echo __('This is probably the most important and powerful feature that manages list of capabilities for roles and users. Please make sure that you are familiar with WordPress Roles and Capabilities before using this feature. Do not try to un-check any capability for the Administrator role because your might lose access to your backend. While creating a new capability, AAM takes the capability name without any additional processing or normalization; which means that if you created new capability “Manage Boats”, internally it retains the same exact name.', AAM_KEY); ?>
79
+ </p>
80
 
81
+ <p class="text-justify">
82
+ <strong><?php echo __('Posts &amp; Pages', AAM_KEY); ?></strong><br/>
83
+ <?php echo __('Manage access to your posts, pages and custom post types.', AAM_KEY); ?> <span class="aam-highlight"><?php echo __('Please notice!', AAM_KEY); ?></span> <?php echo __('This feature has limitations without AAM Plus Package extension.', AAM_KEY); ?>
84
+ </p>
85
+
86
+ <p class="text-justify">
87
+ <strong><?php echo __('Extensions', AAM_KEY); ?></strong><br/>
88
+ <?php echo sprintf(__('Extend AAM functionality with variety of extensions that can be either downloaded for free or purchased. All payment transactions are handled securely through PayPal and the PayPal Transaction ID is used to obtain the purchased extension (you can find Transaction ID in the email that PayPal send you after the purchase). Most of the time the extension is available for download almost immediately but it might take up to 2 hours for PayPal to notify our server about your payment. You are allowed to get the full refund within 30 days after the purchase, if extension did not meet your expectation. Please submit the %srefund form%s and we will issue a refund within next 3 business days.', AAM_KEY), '<a href="http://vasyltech.com/advanced-access-manager" target="_blank">', '</a>'); ?>
89
+ </p>
90
+
91
+ <div class="aam-info aam-social">
92
+ <a href="http://vasyltech.com" target="_blank"><i class="icon-home"></i></a>
93
+ <a href="http://twitter.com/vasyltech" target="_blank"><i class="icon-twitter"></i></a>
94
+ <a href="https://github.com/VasylTech/advanced-access-manager" target="_blank"><i class="icon-github"></i></a>
95
+ </div>
96
  </div>
97
  </div>
98
  </div>
99
  </div>
100
  </div>
 
101
 
102
+ <div class="col-xs-12 col-md-4">
103
+ <div class="metabox-holder">
104
+ <?php do_action('aam-sidebar-ui-action', 'top'); ?>
105
 
106
+ <div class="postbox">
107
+ <h3 class="hndle">
108
+ <span><?php echo __('User/Role Manager', AAM_KEY); ?></span>
109
+ <span class="aam-help-menu" data-target="#user-role-manager-inside"><i class="icon-help-circled"></i></span>
110
+ </h3>
111
+ <div class="inside" id="user-role-manager-inside">
112
+ <div class="aam-postbox-inside">
113
+ <ul class="nav nav-tabs" role="tablist">
114
+ <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>
115
+ <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>
116
+ <?php if (current_user_can('edit_users')) { ?>
117
+ <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>
118
+ <?php } ?>
119
+ </ul>
120
+ <div class="tab-content">
121
+ <div role="tabpanel" class="tab-pane active" id="roles">
122
+ <table id="role-list" class="table table-striped table-bordered">
123
+ <thead>
124
+ <tr>
125
+ <th>ID</th>
126
+ <th>Users</th>
127
+ <th width="70%"><?php echo __('Role', AAM_KEY); ?></th>
128
+ <th><?php echo __('Action', AAM_KEY); ?></th>
129
+ </tr>
130
+ </thead>
131
+ <tbody></tbody>
132
+ </table>
133
 
134
+ <div class="modal fade" id="add-role-modal" tabindex="-1" role="dialog">
135
+ <div class="modal-dialog modal-sm" role="document">
136
+ <div class="modal-content">
137
+ <div class="modal-header">
138
+ <button type="button" class="close" data-dismiss="modal" aria-label="<?php echo __('Close', AAM_KEY); ?>"><span aria-hidden="true">&times;</span></button>
139
+ <h4 class="modal-title"><?php echo __('Add New Role', AAM_KEY); ?></h4>
 
 
 
 
 
140
  </div>
141
+ <div class="modal-body">
142
+ <div class="form-group">
143
+ <label for="new-role-name"><?php echo __('Role Name', AAM_KEY); ?><span class="aam-asterix">*</span></label>
144
+ <input type="text" class="form-control" id="new-role-name" placeholder="<?php echo __('Enter Role Name', AAM_KEY); ?>" />
145
+ </div>
146
+ <div class="form-group">
147
+ <label for="inherit-role-list"><?php echo __('Inherit Capabilities', AAM_KEY); ?></label>
148
+ <select class="form-control" id="inherit-role-list">
149
+ <option value=""><?php echo __('Select Role', AAM_KEY); ?></option>
150
+ </select>
151
+ </div>
152
+ </div>
153
+ <div class="modal-footer">
154
+ <button type="button" class="btn btn-success" id="add-role-btn"><?php echo __('Add Role', AAM_KEY); ?></button>
155
+ <button type="button" class="btn btn-default" data-dismiss="modal"><?php echo __('Close', AAM_KEY); ?></button>
156
  </div>
 
 
 
 
157
  </div>
158
  </div>
159
  </div>
 
160
 
161
+ <div class="modal fade" id="edit-role-modal" tabindex="-1" role="dialog">
162
+ <div class="modal-dialog modal-sm" role="document">
163
+ <div class="modal-content">
164
+ <div class="modal-header">
165
+ <button type="button" class="close" data-dismiss="modal" aria-label="<?php echo __('Close', AAM_KEY); ?>"><span aria-hidden="true">&times;</span></button>
166
+ <h4 class="modal-title"><?php echo __('Edit Role', AAM_KEY); ?></h4>
167
+ </div>
168
+ <div class="modal-body">
169
+ <div class="form-group">
170
+ <label for="new-role-name"><?php echo __('Role Name', AAM_KEY); ?></label>
171
+ <input type="text" class="form-control" id="edit-role-name" placeholder="<?php echo __('Enter Role Name', AAM_KEY); ?>" />
172
+ </div>
173
+ </div>
174
+ <div class="modal-footer">
175
+ <button type="button" class="btn btn-success" id="edit-role-btn"><?php echo __('Update Role', AAM_KEY); ?></button>
176
+ <button type="button" class="btn btn-default" data-dismiss="modal"><?php echo __('Close', AAM_KEY); ?></button>
177
  </div>
 
 
 
 
178
  </div>
179
  </div>
180
  </div>
 
181
 
182
+ <div class="modal fade" id="delete-role-modal" tabindex="-1" role="dialog">
183
+ <div class="modal-dialog modal-sm" role="document">
184
+ <div class="modal-content">
185
+ <div class="modal-header">
186
+ <button type="button" class="close" data-dismiss="modal" aria-label="<?php echo __('Close', AAM_KEY); ?>"><span aria-hidden="true">&times;</span></button>
187
+ <h4 class="modal-title"><?php echo __('Delete Role', AAM_KEY); ?></h4>
188
+ </div>
189
+ <div class="modal-body">
190
+ <p class="text-center aam-confirm-message" data-message="<?php echo __('Are you sure that you want to delete %s role?', AAM_KEY); ?>"></p>
191
+ </div>
192
+ <div class="modal-footer">
193
+ <button type="button" class="btn btn-danger" id="delete-role-btn"><?php echo __('Delete Role', AAM_KEY); ?></button>
194
+ <button type="button" class="btn btn-default" data-dismiss="modal"><?php echo __('Close', AAM_KEY); ?></button>
195
+ </div>
196
  </div>
197
  </div>
198
  </div>
 
199
 
200
+ <div class="modal fade" id="role-notification-modal" tabindex="-1" role="dialog">
201
+ <div class="modal-dialog" role="document">
202
+ <div class="modal-content">
203
+ <div class="modal-header">
204
+ <button type="button" class="close" data-dismiss="modal" aria-label="<?php echo __('Close', AAM_KEY); ?>"><span aria-hidden="true">&times;</span></button>
205
+ <h4 class="modal-title"><?php echo __('Notification', AAM_KEY); ?></h4>
206
+ </div>
207
+ <div class="modal-body">
208
+ <p class="text-center aam-notification-message"><?php echo __('You are not allowed to delete this role because either you do not have a capability to "Delete Users" or there is at least one user assigned to it.', AAM_KEY); ?></p>
209
+ </div>
210
+ <div class="modal-footer">
211
+ <button type="button" class="btn btn-default" data-dismiss="modal"><?php echo __('OK', AAM_KEY); ?></button>
212
+ </div>
213
  </div>
214
  </div>
215
  </div>
 
216
 
217
+ </div>
218
+ <div role="tabpanel" class="tab-pane" id="users">
219
+ <table id="user-list" class="table table-striped table-bordered">
220
+ <thead>
221
+ <tr>
222
+ <th>ID</th>
223
+ <th>Roles</th>
224
+ <th width="65%"><?php echo __('Username', AAM_KEY); ?></th>
225
+ <th><?php echo __('Action', AAM_KEY); ?></th>
226
+ </tr>
227
+ </thead>
228
+ <tbody></tbody>
229
+ </table>
230
 
231
+ <div class="modal fade" id="user-notification-modal" tabindex="-1" role="dialog">
232
+ <div class="modal-dialog modal-sm" role="document">
233
+ <div class="modal-content">
234
+ <div class="modal-header">
235
+ <button type="button" class="close" data-dismiss="modal" aria-label="<?php echo __('Close', AAM_KEY); ?>"><span aria-hidden="true">&times;</span></button>
236
+ <h4 class="modal-title"><?php echo __('Notification', AAM_KEY); ?></h4>
237
+ </div>
238
+ <div class="modal-body">
239
+ <p class="text-center aam-notification-message"><?php echo __('You are not allowed to perform this action.', AAM_KEY); ?></p>
240
+ </div>
241
+ <div class="modal-footer">
242
+ <button type="button" class="btn btn-default" data-dismiss="modal"><?php echo __('OK', AAM_KEY); ?></button>
243
+ </div>
244
  </div>
245
  </div>
246
  </div>
 
247
 
 
 
 
 
 
 
248
  </div>
249
+ <?php if (current_user_can('edit_users')) { ?>
250
+ <div role="tabpanel" class="tab-pane" id="visitor">
251
+ <div class="visitor-message">
252
+ <span><?php echo __('Manage access to your website for visitors (any user that is not authenticated)', AAM_KEY); ?>.</span>
253
+ <button class="btn btn-primary btn-block" id="manage-visitor"><i class="icon-cog"></i> <?php echo __('Manage Visitor', AAM_KEY); ?></button>
254
+ </div>
255
+ </div>
256
+ <?php } ?>
257
  </div>
 
258
  </div>
259
+ <div class="aam-help-context">
260
+ <p class="aam-info aam-hint">
261
+ <?php echo AAM_Backend_Helper::preparePhrase('Manage access for your users, roles and visitors. Please be careful with Administrator role as well as your admin user. [Database backup is strongly recommended]', 'b'); ?>
262
+ </p>
 
263
 
264
+ <p class="text-justify">
265
+ <strong><?php echo __('Role Manager', AAM_KEY); ?></strong><br/>
266
+ <?php echo __('With role manager you can manage access for any defined role, edit role\'s name, create new role or even delete existing (but only when there is no users assigned to it). You are not allowed to delete Administrator role.', AAM_KEY); ?>
267
+ </p>
268
 
269
+ <p class="text-justify">
270
+ <strong><?php echo __('User Manager', AAM_KEY); ?></strong><br/>
271
+ <?php echo __('Manage access for any user. As a bonus feature, you can block user. It means that user will be not able to login to your website anymore. Create or edit user actions link to the native WordPress create/edit user interface.', AAM_KEY); ?>
272
+ </p>
273
 
274
+ <p class="text-justify">
275
+ <strong><?php echo __('Visitor Manager', AAM_KEY); ?></strong><br/>
276
+ <?php echo __('Visitor is any user that is not authenticated to your website. Considering the fact that visitors do not have any access to backend, any features that ara backend related are disabled.', AAM_KEY); ?>
277
+ </p>
278
+
279
+ <div class="aam-info aam-social">
280
+ <a href="http://vasyltech.com" target="_blank"><i class="icon-home"></i></a>
281
+ <a href="http://twitter.com/vasyltech" target="_blank"><i class="icon-twitter"></i></a>
282
+ <a href="https://github.com/VasylTech/advanced-access-manager" target="_blank"><i class="icon-github"></i></a>
283
+ </div>
284
  </div>
285
  </div>
286
  </div>
287
+ <?php do_action('aam-sidebar-ui-action', 'bottom'); ?>
288
+
289
+ <!-- Error Fix Promotion: begin -->
290
+ <div class="postbox hidden" id="errorfix-promotion">
291
+ <h3 class="hndle">
292
+ <span>Website Error Fix</span>
293
+ <a href="http://phperrorfix.com" target="_blank" class="aam-help-menu"><i class="icon-help-circled"></i></a>
294
+ </h3>
295
+ <div class="inside">
296
+ <p class="aam-info">Keep your website error free with our patent pending <b>WP Error Fix</b>.</p>
297
+ <a href="#" class="btn btn-warning btn-lg btn-block" id="errorfix-install-btn">Install WP Error Fix</a>
298
+ </div>
299
+ </div>
300
+ <!-- Error Fix Promotion: end -->
 
 
301
  </div>
302
  </div>
303
  </div>
304
  </div>
305
+ <?php
306
+ }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
Application/Backend/view/main-panel.phtml CHANGED
@@ -1,21 +1,24 @@
1
- <div class="row">
2
- <div class="col-xs-12 col-md-4">
3
- <ul class="list-group" id="feature-list">
 
 
 
 
 
 
 
 
 
 
 
 
4
  <?php
5
- foreach (AAM_Backend_Feature::retriveList() as $i => $feature) {
6
- echo '<li class="list-group-item" data-feature="' . $feature->uid . '">';
7
- echo $feature->title;
8
- echo (empty($feature->notification) ? '' : ' <span class="badge">' . $feature->notification . '</span>');
9
- echo '</li>';
10
  }
11
  ?>
12
- </ul>
13
  </div>
14
- <div class="col-xs-12 col-md-8">
15
- <?php
16
- foreach (AAM_Backend_Feature::retriveList() as $feature) {
17
- echo $feature->view->getContent();
18
- }
19
- ?>
20
- </div>
21
- </div>
1
+ <?php if (defined('AAM_KEY')) { ?>
2
+ <div class="row">
3
+ <div class="col-xs-12 col-md-4">
4
+ <ul class="list-group" id="feature-list">
5
+ <?php
6
+ foreach (AAM_Backend_Feature::retriveList() as $i => $feature) {
7
+ echo '<li class="list-group-item" data-feature="' . $feature->uid . '">';
8
+ echo $feature->title;
9
+ echo (empty($feature->notification) ? '' : ' <span class="badge">' . $feature->notification . '</span>');
10
+ echo '</li>';
11
+ }
12
+ ?>
13
+ </ul>
14
+ </div>
15
+ <div class="col-xs-12 col-md-8">
16
  <?php
17
+ foreach (AAM_Backend_Feature::retriveList() as $feature) {
18
+ echo $feature->view->getContent();
 
 
 
19
  }
20
  ?>
21
+ </div>
22
  </div>
23
+ <?php
24
+ }
 
 
 
 
 
 
Application/Backend/view/object/capability.phtml CHANGED
@@ -1,57 +1,60 @@
1
- <div class="aam-feature" id="capability-content">
2
- <div class="row hidden" id="user-capability-note">
3
- <div class="col-xs-12">
4
- <p class="aam-info">
5
- <?php echo AAM_Backend_Helper::preparePhrase(__('[Please notice!] You are not allowed to assign or create a new capability that does not belong to user\'s role. Consider creating a new role with desired list of capabilities and then assign that role to user.', AAM_KEY), 'strong'); ?>
6
- </p>
 
 
7
  </div>
8
- </div>
9
- <div class="aam-feature-top-actions text-right">
10
- <div class="btn-group">
11
- <a href="#" class="btn btn-xs btn-primary dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false" id="capability-filter">
12
- <i class="icon-filter"></i> <?php echo __('Filter', AAM_KEY); ?> <span class="caret"></span>
13
- </a>
14
- <ul class="dropdown-menu" id="capability-groups">
15
- <?php foreach ($this->getGroupList() as $group) { ?>
16
- <li><a href="#"><?php echo $group; ?></a></li>
17
- <?php } ?>
18
- <li role="separator" class="divider"></li>
19
- <li><a href="#" data-clear="true"><?php echo __('All Capabilities', AAM_KEY); ?></a></li>
20
- </ul>
 
21
  </div>
22
- <a href="#" class="btn btn-xs btn-primary" id="add-capability"><i class="icon-plus"></i> <?php echo __('Create', AAM_KEY); ?></a>
23
- </div>
24
 
25
-