Advanced Access Manager - Version 3.0

Version Description

  • Brand new and much more intuitive user interface
  • Fully responsive design
  • Better, more reliable and faster core functionality
  • Completely new extension handler
  • Added "Manage Access" action to the list of user
  • Tested against WP 3.8 and PHP 5.2.17 versions
Download this release

Release Info

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

Code changes from version 2.9.3 to 3.0

Files changed (273) hide show
  1. Application/Backend/Capability.php +198 -0
  2. Application/Backend/Extension.php +179 -0
  3. Application/Backend/Feature.php +139 -0
  4. Application/Backend/Filter.php +320 -0
  5. Application/Backend/Helper.php +65 -0
  6. Application/Backend/Localization.php +45 -0
  7. Application/Backend/Manager.php +326 -0
  8. Application/Backend/Menu.php +169 -0
  9. Application/Backend/Metabox.php +205 -0
  10. Application/Backend/Post.php +328 -0
  11. application/view/role.php → Application/Backend/Role.php +60 -50
  12. Application/Backend/User.php +152 -0
  13. Application/Backend/View.php +214 -0
  14. Application/Backend/view/extension.phtml +151 -0
  15. Application/Backend/view/index.phtml +319 -0
  16. Application/Backend/view/main-panel.phtml +21 -0
  17. Application/Backend/view/object/capability.phtml +57 -0
  18. Application/Backend/view/object/menu.phtml +57 -0
  19. Application/Backend/view/object/metabox.phtml +58 -0
  20. Application/Backend/view/object/post.phtml +144 -0
  21. Application/Backend/view/partial/post-type.phtml +7 -0
  22. Application/Backend/view/partial/term-type.phtml +7 -0
  23. Application/Core/API.php +187 -0
  24. application/core/configpress.php → Application/Core/ConfigPress.php +4 -25
  25. application/core/console.php → Application/Core/Console.php +10 -4
  26. Application/Core/Object.php +99 -0
  27. Application/Core/Object/Capability.php +57 -0
  28. Application/Core/Object/Menu.php +117 -0
  29. Application/Core/Object/Metabox.php +148 -0
  30. Application/Core/Object/Post.php +171 -0
  31. Application/Core/Repository.php +234 -0
  32. application/core/request.php → Application/Core/Request.php +19 -5
  33. Application/Core/Server.php +99 -0
  34. Application/Core/Subject.php +279 -0
  35. Application/Core/Subject/Role.php +186 -0
  36. Application/Core/Subject/User.php +248 -0
  37. Application/Core/Subject/Visitor.php +104 -0
  38. Application/Frontend/Manager.php +215 -0
  39. Lang/advanced-access-manager.pot +828 -0
  40. Lang/en_US.mo +0 -0
  41. Lang/en_US.po +827 -0
  42. aam.php +97 -1095
  43. active-menu.png +0 -0
  44. application/control/object.php +0 -150
  45. application/control/object/capability.php +0 -96
  46. application/control/object/configpress.php +0 -211
  47. application/control/object/event.php +0 -71
  48. application/control/object/menu.php +0 -166
  49. application/control/object/metabox.php +0 -1
  50. application/control/object/post.php +0 -338
  51. application/control/object/term.php +0 -222
  52. application/control/subject.php +0 -468
  53. application/control/subject/role.php +0 -289
  54. application/control/subject/user.php +0 -395
  55. application/control/subject/visitor.php +0 -201
  56. application/core/api.php +0 -215
  57. application/core/extension.php +0 -89
  58. application/core/repository.php +0 -393
  59. application/core/settings.php +0 -89
  60. application/core/update.php +0 -147
  61. application/view/abstract.php +0 -148
  62. application/view/capability.php +0 -225
  63. application/view/collection.php +0 -285
  64. application/view/configpress.php +0 -30
  65. application/view/event.php +0 -83
  66. application/view/extension.php +0 -115
  67. application/view/manager.php +0 -873
  68. application/view/menu.php +0 -150
  69. application/view/metabox.php +0 -303
  70. application/view/post.php +0 -549
  71. application/view/tmpl/capability.phtml +0 -84
  72. application/view/tmpl/configpress.phtml +0 -167
  73. application/view/tmpl/control_area.phtml +0 -242
  74. application/view/tmpl/event.phtml +0 -109
  75. application/view/tmpl/extension.phtml +0 -233
  76. application/view/tmpl/manager.phtml +0 -120
  77. application/view/tmpl/menu.phtml +0 -76
  78. application/view/tmpl/metabox.phtml +0 -21
  79. application/view/tmpl/post.phtml +0 -57
  80. application/view/tmpl/role.phtml +0 -61
  81. application/view/tmpl/user.phtml +0 -42
  82. application/view/tmpl/visitor.phtml +0 -12
  83. application/view/user.php +0 -156
  84. application/view/visitor.php +0 -32
  85. autoloader.php +69 -0
  86. config.php +0 -71
  87. extension/AAM_Activity_Log/activity.css +0 -46
  88. extension/AAM_Activity_Log/activity.js +0 -185
  89. extension/AAM_Activity_Log/activity.php +0 -214
  90. extension/AAM_Activity_Log/extension.php +0 -277
  91. extension/AAM_Activity_Log/images/info-active.png +0 -0
  92. extension/AAM_Activity_Log/images/info.png +0 -0
  93. extension/AAM_Activity_Log/images/trash-active.png +0 -0
  94. extension/AAM_Activity_Log/images/trash.png +0 -0
  95. extension/AAM_Activity_Log/index.php +0 -15
  96. extension/AAM_Activity_Log/ui.phtml +0 -33
  97. extension/AAM_Multisite_Support/extension.php +0 -253
  98. extension/AAM_Multisite_Support/images/add-active.png +0 -0
  99. extension/AAM_Multisite_Support/images/add.png +0 -0
  100. extension/AAM_Multisite_Support/images/edit-active.png +0 -0
  101. extension/AAM_Multisite_Support/images/edit.png +0 -0
  102. extension/AAM_Multisite_Support/images/manage-active.png +0 -0
  103. extension/AAM_Multisite_Support/images/manage.png +0 -0
  104. extension/AAM_Multisite_Support/images/multisite-active.png +0 -0
  105. extension/AAM_Multisite_Support/images/multisite.png +0 -0
  106. extension/AAM_Multisite_Support/images/pin-active.png +0 -0
  107. extension/AAM_Multisite_Support/images/pin.png +0 -0
  108. extension/AAM_Multisite_Support/images/refresh-active.png +0 -0
  109. extension/AAM_Multisite_Support/images/refresh.png +0 -0
  110. extension/AAM_Multisite_Support/images/unpin.png +0 -0
  111. extension/AAM_Multisite_Support/index.php +0 -15
  112. extension/AAM_Multisite_Support/multisite.css +0 -98
  113. extension/AAM_Multisite_Support/multisite.js +0 -228
  114. extension/AAM_Multisite_Support/ui.phtml +0 -32
  115. extension/AAM_My_Feature/extension.php +0 -113
  116. extension/AAM_My_Feature/images/worker.png +0 -0
  117. extension/AAM_My_Feature/index.php +0 -15
  118. extension/AAM_My_Feature/my_feature.css +0 -22
  119. extension/AAM_My_Feature/my_feature.js +0 -20
  120. extension/AAM_My_Feature/ui.phtml +0 -19
  121. extension/AAM_Secure/extension.php +0 -384
  122. extension/AAM_Secure/geoip/freegeoip.php +0 -32
  123. extension/AAM_Secure/geoip/geoip.php +0 -15
  124. extension/AAM_Secure/index.php +0 -17
  125. extension/AAM_Secure/javascript/loader.js +0 -41
  126. extension/AAM_Secure/javascript/security.js +0 -48
  127. extension/AAM_Secure/security.php +0 -85
  128. extension/AAM_Secure/stylesheet/flags32.css +0 -260
  129. extension/AAM_Secure/stylesheet/images/deny.png +0 -0
  130. extension/AAM_Secure/stylesheet/images/flags32.png +0 -0
  131. extension/AAM_Secure/stylesheet/images/large-iconset.png +0 -0
  132. extension/AAM_Secure/stylesheet/images/restriction.png +0 -0
  133. extension/AAM_Secure/stylesheet/security.css +0 -84
  134. extension/AAM_Secure/view/security.phtml +0 -156
  135. lang/aam-de_DE.mo +0 -0
  136. lang/aam-de_DE.po +0 -336
  137. lang/aam-en_US.mo +0 -0
  138. lang/aam-en_US.po +0 -310
  139. lang/aam-es_ES.mo +0 -0
  140. lang/aam-es_ES.po +0 -998
  141. lang/aam-fa_IR.mo +0 -0
  142. lang/aam-fa_IR.po +0 -606
  143. lang/aam-fr_FR.mo +0 -0
  144. lang/aam-fr_FR.po +0 -337
  145. lang/aam-nb_NO.mo +0 -0
  146. lang/aam-pl_PL.mo +0 -0
  147. lang/aam-pl_PL.po +0 -385
  148. lang/aam-ru_RU.mo +0 -0
  149. lang/aam-ru_RU.po +0 -334
  150. lang/aam.mo +0 -0
  151. lang/aam.pot +0 -850
  152. library/Zend/Config.php +0 -485
  153. library/Zend/Config/Exception.php +0 -33
  154. library/Zend/Config/Ini.php +0 -301
  155. library/Zend/Exception.php +0 -101
  156. license.txt +1 -1
  157. media/active-menu.png +0 -0
  158. media/css/aam.css +502 -667
  159. media/css/bootstrap.min.css +5 -0
  160. media/css/codemirror.css +0 -262
  161. media/css/configpress.css +0 -4
  162. media/css/datatables.min.css +236 -0
  163. media/css/extension.css +0 -155
  164. media/css/images/animated-overlay.gif +0 -0
  165. media/css/images/capability/checked.png +0 -0
  166. media/css/images/capability/delete-active.png +0 -0
  167. media/css/images/capability/delete.png +0 -0
  168. media/css/images/capability/unchecked.png +0 -0
  169. media/css/images/cmanager/field-loader.gif +0 -0
  170. media/css/images/cmanager/lock.png +0 -0
  171. media/css/images/cmanager/role-active.png +0 -0
  172. media/css/images/cmanager/role.png +0 -0
  173. media/css/images/cmanager/user-active.png +0 -0
  174. media/css/images/cmanager/user.png +0 -0
  175. media/css/images/cmanager/visitor-active.png +0 -0
  176. media/css/images/cmanager/visitor.png +0 -0
  177. media/css/images/cpanel/cpanel-loader.gif +0 -0
  178. media/css/images/cpanel/help-forum-active.png +0 -0
  179. media/css/images/cpanel/help-forum.png +0 -0
  180. media/css/images/cpanel/message-active.png +0 -0
  181. media/css/images/cpanel/message.png +0 -0
  182. media/css/images/cpanel/restore-active.png +0 -0
  183. media/css/images/cpanel/restore.png +0 -0
  184. media/css/images/cpanel/save-active.png +0 -0
  185. media/css/images/cpanel/save.png +0 -0
  186. media/css/images/cpanel/star-active.png +0 -0
  187. media/css/images/cpanel/star.png +0 -0
  188. media/css/images/cpanel/twitter-active.png +0 -0
  189. media/css/images/cpanel/twitter.png +0 -0
  190. media/css/images/event/delete-active.png +0 -0
  191. media/css/images/event/delete.png +0 -0
  192. media/css/images/event/edit-active.png +0 -0
  193. media/css/images/event/edit.png +0 -0
  194. media/css/images/extension/download-active.png +0 -0
  195. media/css/images/extension/download.png +0 -0
  196. media/css/images/extension/forum-active.png +0 -0
  197. media/css/images/extension/forum.png +0 -0
  198. media/css/images/extension/link-active.png +0 -0
  199. media/css/images/extension/link.png +0 -0
  200. media/css/images/extension/message-active.png +0 -0
  201. media/css/images/extension/message.png +0 -0
  202. media/css/images/extension/ok-active.png +0 -0
  203. media/css/images/extension/ok.png +0 -0
  204. media/css/images/extension/plus-active.png +0 -0
  205. media/css/images/extension/plus.png +0 -0
  206. media/css/images/extension/twitter-active.png +0 -0
  207. media/css/images/extension/twitter.png +0 -0
  208. media/css/images/extension/youtube-active.png +0 -0
  209. media/css/images/extension/youtube.png +0 -0
  210. media/css/images/feature-active.png +0 -0
  211. media/css/images/feature.png +0 -0
  212. media/css/images/lock.png +0 -0
  213. media/css/images/main-loader.gif +0 -0
  214. media/css/images/menu/checked.png +0 -0
  215. media/css/images/menu/unchecked.png +0 -0
  216. media/css/images/metabox-loader.gif +0 -0
  217. media/css/images/metabox/checked.png +0 -0
  218. media/css/images/metabox/link-active.png +0 -0
  219. media/css/images/metabox/link.png +0 -0
  220. media/css/images/metabox/unchecked.png +0 -0
  221. media/css/images/post/checked.png +0 -0
  222. media/css/images/post/info-active.png +0 -0
  223. media/css/images/post/info.png +0 -0
  224. media/css/images/post/loader.gif +0 -0
  225. media/css/images/post/lock-big.png +0 -0
  226. media/css/images/post/lock.png +0 -0
  227. media/css/images/post/post.png +0 -0
  228. media/css/images/post/unchecked.png +0 -0
  229. media/css/images/search-active.png +0 -0
  230. media/css/images/search.png +0 -0
  231. media/css/images/sort_asc.png +0 -0
  232. media/css/images/sort_asc_disabled.png +0 -0
  233. media/css/images/sort_both.png +0 -0
  234. media/css/images/sort_desc.png +0 -0
  235. media/css/images/sort_desc_disabled.png +0 -0
  236. media/css/images/table-filtered.png +0 -0
  237. media/css/images/treeview/ajax-loader.gif +0 -0
  238. media/css/images/treeview/file.gif +0 -0
  239. media/css/images/treeview/folder-close.png +0 -0
  240. media/css/images/treeview/folder-closed.gif +0 -0
  241. media/css/images/treeview/folder-open.png +0 -0
  242. media/css/images/treeview/folder.gif +0 -0
  243. media/css/images/treeview/minus.gif +0 -0
  244. media/css/images/treeview/plus.gif +0 -0
  245. media/css/images/treeview/treeview-black-line.gif +0 -0
  246. media/css/images/treeview/treeview-black.gif +0 -0
  247. media/css/images/treeview/treeview-default-line.gif +0 -0
  248. media/css/images/treeview/treeview-default.gif +0 -0
  249. media/css/images/treeview/treeview-famfamfam-line.gif +0 -0
  250. media/css/images/treeview/treeview-famfamfam.gif +0 -0
  251. media/css/images/treeview/treeview-gray-line.gif +0 -0
  252. media/css/images/treeview/treeview-gray.gif +0 -0
  253. media/css/images/treeview/treeview-red-line.gif +0 -0
  254. media/css/images/treeview/treeview-red.gif +0 -0
  255. media/css/images/ui-bg_flat_0_aaaaaa_40x100.png +0 -0
  256. media/css/images/ui-bg_flat_75_ffffff_40x100.png +0 -0
  257. media/css/images/ui-bg_glass_55_fbf9ee_1x400.png +0 -0
  258. media/css/images/ui-bg_glass_65_ffffff_1x400.png +0 -0
  259. media/css/images/ui-bg_glass_75_dadada_1x400.png +0 -0
  260. media/css/images/ui-bg_glass_75_e6e6e6_1x400.png +0 -0
  261. media/css/images/ui-bg_glass_95_fef1ec_1x400.png +0 -0
  262. media/css/images/ui-bg_highlight-soft_75_cccccc_1x100.png +0 -0
  263. media/css/images/ui-icons_222222_256x240.png +0 -0
  264. media/css/images/ui-icons_2e83ff_256x240.png +0 -0
  265. media/css/images/ui-icons_454545_256x240.png +0 -0
  266. media/css/images/ui-icons_888888_256x240.png +0 -0
  267. media/css/images/ui-icons_cd0a0a_256x240.png +0 -0
  268. media/css/images/warning.png +0 -0
  269. media/css/jquery-ui.css +0 -7
  270. media/css/jquery.dt.css +0 -242
  271. media/css/jquery.treeview.css +0 -117
  272. media/font/fontello.eot +0 -0
  273. media/font/fontello.svg +21 -0
Application/Backend/Capability.php ADDED
@@ -0,0 +1,198 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * ======================================================================
5
+ * LICENSE: This file is subject to the terms and conditions defined in *
6
+ * file 'license.txt', which is part of this source code package. *
7
+ * ======================================================================
8
+ */
9
+
10
+ /**
11
+ * Backend capability manager
12
+ *
13
+ * @package AAM
14
+ * @author Vasyl Martyniuk <vasyl@vasyltech.com>
15
+ */
16
+ class AAM_Backend_Capability {
17
+
18
+ /**
19
+ * Capability groups
20
+ *
21
+ * @var array
22
+ *
23
+ * @access private
24
+ */
25
+ private $_groups = array(
26
+ 'system' => array(
27
+ 'level_0', 'level_1', 'level_2', 'level_3', 'level_4', 'level_5',
28
+ 'level_6', 'level_7', 'level_8', 'level_9', 'level_10'
29
+ ),
30
+ 'post' => array(
31
+ 'delete_others_pages', 'delete_others_posts', 'edit_others_pages',
32
+ 'delete_posts', 'delete_private_pages', 'delete_private_posts',
33
+ 'delete_published_pages', 'delete_published_posts', 'delete_pages',
34
+ 'edit_others_posts', 'edit_pages', 'edit_private_posts',
35
+ 'edit_private_pages', 'edit_posts', 'edit_published_pages',
36
+ 'edit_published_posts', 'publish_pages', 'publish_posts', 'read',
37
+ 'read_private_pages', 'read_private_posts', 'edit_permalink'
38
+ ),
39
+ 'backend' => array(
40
+ 'aam_manage', 'activate_plugins', 'add_users', 'update_plugins',
41
+ 'delete_users', 'delete_themes', 'edit_dashboard', 'edit_files',
42
+ 'edit_plugins', 'edit_theme_options', 'edit_themes', 'edit_users',
43
+ 'export', 'import', 'install_plugins', 'install_themes',
44
+ 'manage_options', 'manage_links', 'manage_categories', 'customize',
45
+ 'unfiltered_html', 'unfiltered_upload', 'update_themes',
46
+ 'update_core', 'upload_files', 'delete_plugins', 'remove_users',
47
+ 'switch_themes', 'list_users', 'promote_users', 'create_users'
48
+ )
49
+ );
50
+
51
+ /**
52
+ * Get HTML content
53
+ *
54
+ * @return string
55
+ *
56
+ * @access public
57
+ */
58
+ public function getContent() {
59
+ ob_start();
60
+ require_once(dirname(__FILE__) . '/view/object/capability.phtml');
61
+ $content = ob_get_contents();
62
+ ob_end_clean();
63
+
64
+ return $content;
65
+ }
66
+
67
+ /**
68
+ *
69
+ * @return type
70
+ */
71
+ public function getTable() {
72
+ $response = array('data' => array());
73
+
74
+ $subject = AAM_Backend_View::getSubject();
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
+ *
95
+ * @return type
96
+ */
97
+ protected function retrieveAllCaps() {
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
+
114
+ return $response;
115
+ }
116
+
117
+ /**
118
+ * Get capability group list
119
+ *
120
+ * @return array
121
+ *
122
+ * @access public
123
+ */
124
+ public function getGroupList() {
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
+ }
132
+
133
+ /**
134
+ * Add new capability
135
+ *
136
+ * @return string
137
+ *
138
+ * @access public
139
+ */
140
+ public function add() {
141
+ $capability = trim(AAM_Core_Request::post('capability'));
142
+
143
+ if ($capability) {
144
+ //add the capability to administrator's role as default behavior
145
+ AAM_Core_API::getRoles()->add_cap('administrator', $capability);
146
+ $response = array('status' => 'success');
147
+ } else {
148
+ $response = array('status' => 'failure');
149
+ }
150
+
151
+ return json_encode($response);
152
+ }
153
+
154
+ /**
155
+ * Get capability group name
156
+ *
157
+ * @param string $capability
158
+ *
159
+ * @return string
160
+ *
161
+ * @access protected
162
+ */
163
+ protected function getGroup($capability) {
164
+ if (in_array($capability, $this->_groups['system'])) {
165
+ $response = __('System', AAM_KEY);
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
+ }
173
+
174
+ return apply_filters(
175
+ 'aam-capability-group-filter', $response, $capability
176
+ );
177
+ }
178
+
179
+ /**
180
+ * Register capability feature
181
+ *
182
+ * @return void
183
+ *
184
+ * @access public
185
+ */
186
+ public static function register() {
187
+ AAM_Backend_Feature::registerFeature((object) array(
188
+ 'uid' => 'capability',
189
+ 'position' => 15,
190
+ 'title' => __('Capabilities', AAM_KEY),
191
+ 'subjects' => array(
192
+ 'AAM_Core_Subject_Role', 'AAM_Core_Subject_User'
193
+ ),
194
+ 'view' => __CLASS__
195
+ ));
196
+ }
197
+
198
+ }
Application/Backend/Extension.php ADDED
@@ -0,0 +1,179 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * ======================================================================
5
+ * LICENSE: This file is subject to the terms and conditions defined in *
6
+ * file 'license.txt', which is part of this source code package. *
7
+ * ======================================================================
8
+ */
9
+
10
+ /**
11
+ * Backend extension manager
12
+ *
13
+ * @package AAM
14
+ * @author Vasyl Martyniuk <vasyl@vasyltech.com>
15
+ */
16
+ class AAM_Backend_Extension {
17
+
18
+ /**
19
+ * Get HTML content
20
+ *
21
+ * @return string
22
+ *
23
+ * @access public
24
+ */
25
+ public function getContent() {
26
+ ob_start();
27
+ require_once(dirname(__FILE__) . '/view/extension.phtml');
28
+ $content = ob_get_contents();
29
+ ob_end_clean();
30
+
31
+ return $content;
32
+ }
33
+
34
+ /**
35
+ * Install an extension
36
+ *
37
+ * @param string $storedLicense
38
+ *
39
+ * @return string
40
+ *
41
+ * @access public
42
+ */
43
+ public function install($storedLicense = null) {
44
+ $repo = AAM_Core_Repository::getInstance();
45
+ $license = AAM_Core_Request::post('license', $storedLicense);
46
+
47
+ //download the extension from the server first
48
+ $package = AAM_Core_Server::download($license);
49
+
50
+ if (is_wp_error($package)) {
51
+ $response = array(
52
+ 'status' => 'failure', 'error' => $package->get_error_message()
53
+ );
54
+ }elseif ($error = $repo->checkDirectory()) {
55
+ $response = $this->installFailureResponse($error, $package);
56
+ $this->storeLicense($package->title, $license);
57
+ } else { //otherwise install the extension
58
+ $result = $repo->addExtension(base64_decode($package->content));
59
+ if (is_wp_error($result)) {
60
+ $response = $this->installFailureResponse(
61
+ $result->get_error_message(), $package
62
+ );
63
+ } else {
64
+ $response = array('status' => 'success');
65
+ }
66
+ $this->storeLicense($package->title, $license);
67
+ }
68
+
69
+ return json_encode($response);
70
+ }
71
+
72
+ /**
73
+ * Update the extension
74
+ *
75
+ * @return string
76
+ *
77
+ * @access public
78
+ */
79
+ public function update() {
80
+ $extension = AAM_Core_Request::post('extension');
81
+
82
+ $list = AAM_Core_API::getOption('aam-extension-license', array());
83
+ if (isset($list[$extension])) {
84
+ $response = $this->install($list[$extension]);
85
+ } else {
86
+ $response = json_encode(array(
87
+ 'status' => 'failure',
88
+ 'error' => __('License key is missing.', AAM_KEY)
89
+ ));
90
+ }
91
+
92
+ return $response;
93
+ }
94
+
95
+ /**
96
+ * Install extension failure response
97
+ *
98
+ * In case the filesystem fails, AAM allows to download the extension for
99
+ * manuall installation
100
+ *
101
+ * @param string $error
102
+ * @param stdClass $package
103
+ *
104
+ * @return array
105
+ *
106
+ * @access protected
107
+ */
108
+ protected function installFailureResponse($error, $package) {
109
+ return array(
110
+ 'status' => 'failure',
111
+ 'error' => $error,
112
+ 'title' => $package->title,
113
+ 'content' => $package->content
114
+ );
115
+ }
116
+
117
+ /**
118
+ * Store the license key
119
+ *
120
+ * This is important to have just for the update extension purposes
121
+ *
122
+ * @param string $title
123
+ * @param string $license
124
+ *
125
+ * @return void
126
+ *
127
+ * @access protected
128
+ */
129
+ protected function storeLicense($title, $license) {
130
+ //retrieve the installed list of extensions
131
+ $list = AAM_Core_API::getOption('aam-extension-license', array());
132
+ $list[$title] = $license;
133
+
134
+ //update the extension list
135
+ AAM_Core_API::updateOption('aam-extension-license', $list);
136
+ }
137
+
138
+ /**
139
+ * Register Extension feature
140
+ *
141
+ * @return void
142
+ *
143
+ * @access public
144
+ */
145
+ public static function register() {
146
+ AAM_Backend_Feature::registerFeature((object) array(
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',
154
+ 'AAM_Core_Subject_Visitor'
155
+ ),
156
+ 'view' => __CLASS__
157
+ ));
158
+ }
159
+
160
+ /**
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) {
172
+ $count++;
173
+ }
174
+ }
175
+
176
+ return $count;
177
+ }
178
+
179
+ }
Application/Backend/Feature.php ADDED
@@ -0,0 +1,139 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
+ class AAM_Backend_Feature {
11
+
12
+ /**
13
+ * Collection of features
14
+ *
15
+ * @var array
16
+ *
17
+ * @access private
18
+ * @static
19
+ */
20
+ static private $_features = array();
21
+
22
+ /**
23
+ * Register UI Feature
24
+ *
25
+ * @param stdClass $feature
26
+ *
27
+ * @return boolean
28
+ *
29
+ * @access public
30
+ * @static
31
+ */
32
+ public static function registerFeature(stdClass $feature) {
33
+ $response = false;
34
+
35
+ if (empty($feature->capability)){
36
+ $cap = AAM_Core_ConfigPress::get(
37
+ 'aam.feature.capability', 'administrator'
38
+ );
39
+ } else {
40
+ $cap = $feature->capability;
41
+ }
42
+
43
+ if (self::accessGranted($feature->uid, $cap)) {
44
+ self::$_features[] = $feature;
45
+ $response = true;
46
+ }
47
+
48
+ return $response;
49
+ }
50
+
51
+ /**
52
+ * Initiate the Controller
53
+ *
54
+ * @param stdClass $feature
55
+ *
56
+ * @return stdClass
57
+ *
58
+ * @access public
59
+ * @static
60
+ */
61
+ public static function initView(stdClass $feature){
62
+ if (is_string($feature->view)){
63
+ $feature->view = new $feature->view;
64
+ }
65
+
66
+ return $feature;
67
+ }
68
+
69
+ /**
70
+ * Retrieve list of features
71
+ *
72
+ * Retrieve sorted list of featured based on current subject
73
+ *
74
+ * @return array
75
+ *
76
+ * @access public
77
+ * @static
78
+ */
79
+ public static function retriveList() {
80
+ $response = array();
81
+
82
+ $subject = AAM_Backend_View::getSubject();
83
+ foreach (self::$_features as $feature) {
84
+ if (in_array(get_class($subject), $feature->subjects)) {
85
+ $response[] = self::initView($feature);
86
+ }
87
+ }
88
+ usort($response, 'AAM_Backend_Feature::reorder');
89
+
90
+ return $response;
91
+ }
92
+
93
+ /**
94
+ * Check if current user can use feature
95
+ *
96
+ * Make sure that current user has enough capabilities to use feature
97
+ *
98
+ * @param string $feature
99
+ * @param string $cap
100
+ *
101
+ * @return boolean
102
+ *
103
+ * @access protected
104
+ * @static
105
+ */
106
+ protected static function accessGranted($feature, $cap = 'administrator') {
107
+ $capability = AAM_Core_ConfigPress::get(
108
+ "aam.feature.{$feature}.capability", $cap
109
+ );
110
+
111
+ return current_user_can($capability);
112
+ }
113
+
114
+ /**
115
+ * Order list of features or subjectes
116
+ *
117
+ * Reorganize the list based on "position" attribute
118
+ *
119
+ * @param array $features
120
+ *
121
+ * @return array
122
+ *
123
+ * @access public
124
+ * @static
125
+ */
126
+ public static function reorder($feature_a, $feature_b){
127
+ $pos_a = (empty($feature_a->position) ? 9999 : $feature_a->position);
128
+ $pos_b = (empty($feature_b->position) ? 9999 : $feature_b->position);
129
+
130
+ if ($pos_a == $pos_b){
131
+ $response = 0;
132
+ } else {
133
+ $response = ($pos_a < $pos_b ? -1 : 1);
134
+ }
135
+
136
+ return $response;
137
+ }
138
+
139
+ }
Application/Backend/Filter.php ADDED
@@ -0,0 +1,320 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * ======================================================================
5
+ * LICENSE: This file is subject to the terms and conditions defined in *
6
+ * file 'license.txt', which is part of this source code package. *
7
+ * ======================================================================
8
+ */
9
+
10
+ /**
11
+ * Backend manager
12
+ *
13
+ * @package AAM
14
+ * @author Vasyl Martyniuk <vasyl@vasyltech.com>
15
+ */
16
+ class AAM_Backend_Filter {
17
+
18
+ /**
19
+ * Instance of itself
20
+ *
21
+ * @var AAM_Backend_Filter
22
+ *
23
+ * @access private
24
+ */
25
+ private static $_instance = null;
26
+
27
+ /**
28
+ * Initialize backend filters
29
+ *
30
+ * @return void
31
+ *
32
+ * @access protected
33
+ */
34
+ protected function __construct() {
35
+ //menu filter
36
+ add_filter('parent_file', array($this, 'filterMenu'), 999, 1);
37
+
38
+ //manager WordPress metaboxes
39
+ add_action("in_admin_header", array($this, 'metaboxes'), 999);
40
+
41
+ //post restrictions
42
+ add_filter('page_row_actions', array($this, 'postRowActions'), 10, 2);
43
+ add_filter('post_row_actions', array($this, 'postRowActions'), 10, 2);
44
+ add_action('admin_action_edit', array($this, 'adminActionEdit'));
45
+
46
+ //control permalink editing
47
+ add_filter('get_sample_permalink_html', array($this, 'permalinkHTML'));
48
+
49
+ //wp die hook
50
+ add_filter('wp_die_handler', array($this, 'backendDie'));
51
+
52
+ //add post filter for LIST restriction
53
+ add_filter('the_posts', array($this, 'thePosts'), 999, 2);
54
+
55
+ //some additional filter for user capabilities
56
+ add_filter('user_has_cap', array($this, 'checkUserCap'), 999, 4);
57
+ }
58
+
59
+ /**
60
+ * Filter the Admin Menu
61
+ *
62
+ * @param string $parent_file
63
+ *
64
+ * @return string
65
+ *
66
+ * @access public
67
+ */
68
+ public function filterMenu($parent_file) {
69
+ //filter admin menu
70
+ AAM::getUser()->getObject('menu')->filter();
71
+
72
+ return $parent_file;
73
+ }
74
+
75
+ /**
76
+ * Hanlde Metabox initialization process
77
+ *
78
+ * @return void
79
+ *
80
+ * @access public
81
+ */
82
+ public function metaboxes() {
83
+ global $post;
84
+
85
+ //make sure that nobody is playing with screen options
86
+ if ($post instanceof WP_Post) {
87
+ $screen = $post->post_type;
88
+ } elseif ($screen_object = get_current_screen()) {
89
+ $screen = $screen_object->id;
90
+ } else {
91
+ $screen = '';
92
+ }
93
+
94
+ if (AAM_Core_Request::get('init') == 'metabox') {
95
+ $model = new AAM_Backend_Metabox;
96
+ $model->initialize($screen);
97
+ } else {
98
+ AAM::getUser()->getObject('metabox')->filterBackend($screen);
99
+ }
100
+ }
101
+
102
+ /**
103
+ * Post Quick Menu Actions Filtering
104
+ *
105
+ * @param array $actions
106
+ * @param WP_Post $post
107
+ *
108
+ * @return array
109
+ *
110
+ * @access public
111
+ */
112
+ public function postRowActions($actions, $post) {
113
+ $object = AAM::getUser()->getObject('post', $post->ID);
114
+
115
+ //filter edit menu
116
+ if ($object->has('backend.edit')) {
117
+ if (isset($actions['edit'])) {
118
+ unset($actions['edit']);
119
+ }
120
+ if (isset($actions['inline hide-if-no-js'])) {
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
+ }
136
+ }
137
+
138
+ return $actions;
139
+ }
140
+
141
+ /**
142
+ * Control Edit Post
143
+ *
144
+ * Make sure that current user does not have access to edit Post
145
+ *
146
+ * @return void
147
+ *
148
+ * @access public
149
+ */
150
+ public function adminActionEdit() {
151
+ global $post;
152
+
153
+ if (is_a($post, 'WP_Post')) {
154
+ $user = AAM::getUser();
155
+ if ($user->getObject('post', $post->ID)->has('backend.edit')) {
156
+ AAM_Core_API::reject();
157
+ }
158
+ }
159
+ }
160
+
161
+ /**
162
+ * Get Post ID
163
+ *
164
+ * Replication of the same mechanism that is in wp-admin/post.php
165
+ *
166
+ * @return WP_Post|null
167
+ *
168
+ * @access public
169
+ */
170
+ public function getPost() {
171
+ if (get_post()) {
172
+ $post = get_post();
173
+ } elseif ($post_id = AAM_Core_Request::get('post')) {
174
+ $post = get_post($post_id);
175
+ } elseif ($post_id = AAM_Core_Request::get('post_ID')) {
176
+ $post = get_post($post_id);
177
+ } else {
178
+ $post = null;
179
+ }
180
+
181
+ return $post;
182
+ }
183
+
184
+ /**
185
+ * Take control over wp_die function
186
+ *
187
+ * @param callback $function
188
+ *
189
+ * @return void
190
+ *
191
+ * @access public
192
+ */
193
+ public function backendDie($function) {
194
+ $redirect = AAM_Core_ConfigPress::get('backend.access.deny.redirect');
195
+ $message = AAM_Core_ConfigPress::get(
196
+ 'backend.access.deny.message', __('Access Denied', 'aam')
197
+ );
198
+
199
+ if (filter_var($redirect, FILTER_VALIDATE_URL)) {
200
+ wp_redirect($redirect);
201
+ exit;
202
+ } elseif (is_int($redirect)) {
203
+ wp_redirect(get_post_permalink($redirect));
204
+ exit;
205
+ } else {
206
+ call_user_func($function, $message, '', array());
207
+ }
208
+ }
209
+
210
+ /**
211
+ * Control edit permalink feature
212
+ *
213
+ * @param string $html
214
+ *
215
+ * @return string
216
+ */
217
+ public function permalinkHTML($html) {
218
+ if (AAM_Core_ConfigPress::get('aam.control_permalink') === 'true') {
219
+ if (AAM::getUser()->hasCapability('manage_permalink') === false) {
220
+ $html = '';
221
+ }
222
+ }
223
+
224
+ return $html;
225
+ }
226
+
227
+ /**
228
+ * Filter posts from the list
229
+ *
230
+ * @param array $posts
231
+ *
232
+ * @return array
233
+ *
234
+ * @access public
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
+
246
+ return $filtered;
247
+ }
248
+
249
+ /**
250
+ * Check user capability
251
+ *
252
+ * This is a hack function that add additional layout on top of WordPress
253
+ * core functionality. Based on the capability passed in the $args array as
254
+ * "0" element, it performs additional check on user's capability to manage
255
+ * post.
256
+ *
257
+ * @param array $allCaps
258
+ * @param array $metaCaps
259
+ * @param array $args
260
+ *
261
+ * @return array
262
+ *
263
+ * @access public
264
+ */
265
+ public function checkUserCap($allCaps, $metaCaps, $args) {
266
+ switch($args[0]) {
267
+ case 'edit_post':
268
+ $object = AAM::getUser()->getObject('post', $args[2]);
269
+ if ($object->has('backend.edit')) {
270
+ $allCaps = $this->restrictPostActions($allCaps, $metaCaps);
271
+ }
272
+ break;
273
+
274
+ case 'delete_post' :
275
+ $object = AAM::getUser()->getObject('post', $args[2]);
276
+ if ($object->has('backend.delete')) {
277
+ $allCaps = $this->restrictPostActions($allCaps, $metaCaps);
278
+ }
279
+ break;
280
+ }
281
+
282
+ return $allCaps;
283
+ }
284
+
285
+ /**
286
+ * Restrict user capabilities
287
+ *
288
+ * Iterate through the list of meta capabilities and disable them in the
289
+ * list of all user capabilities. Keep in mind that this disable caps only
290
+ * for one time call.
291
+ *
292
+ * @param array $allCaps
293
+ * @param array $metaCaps
294
+ *
295
+ * @return array
296
+ *
297
+ * @access protected
298
+ */
299
+ protected function restrictPostActions($allCaps, $metaCaps) {
300
+ foreach($metaCaps as $cap) {
301
+ $allCaps[$cap] = false;
302
+ }
303
+
304
+ return $allCaps;
305
+ }
306
+
307
+ /**
308
+ * Register backend filters and actions
309
+ *
310
+ * @return void
311
+ *
312
+ * @access public
313
+ */
314
+ public static function register() {
315
+ if (is_null(self::$_instance)) {
316
+ self::$_instance = new self;
317
+ }
318
+ }
319
+
320
+ }
Application/Backend/Helper.php ADDED
@@ -0,0 +1,65 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * ======================================================================
5
+ * LICENSE: This file is subject to the terms and conditions defined in *
6
+ * file 'license.txt', which is part of this source code package. *
7
+ * ======================================================================
8
+ */
9
+
10
+ /**
11
+ * Backend view helper
12
+ *
13
+ * @package AAM
14
+ * @author Vasyl Martyniuk <vasyl@vasyltech.com>
15
+ */
16
+ class AAM_Backend_Helper {
17
+
18
+ /**
19
+ * Prepare phrase or label
20
+ *
21
+ * @param string $phrase
22
+ * @param mixed $...
23
+ *
24
+ * @return string
25
+ *
26
+ * @access protected
27
+ */
28
+ public static function preparePhrase($phrase) {
29
+ //prepare search patterns
30
+ $num = func_num_args();
31
+ $search = array_fill(0, ($num - 1) * 2, null);
32
+ array_walk($search, 'AAM_Backend_Helper::prepareWalk');
33
+
34
+ $replace = array();
35
+ foreach (array_slice(func_get_args(), 1) as $key) {
36
+ array_push($replace, "<{$key}>", "</{$key}>");
37
+ }
38
+
39
+ //localize the phase first
40
+ return preg_replace($search, $replace, __($phrase, AAM_KEY), 1);
41
+ }
42
+
43
+ /**
44
+ *
45
+ * @param string $value
46
+ * @param type $index
47
+ */
48
+ public static function prepareWalk(&$value, $index) {
49
+ $value = '/\\' . ($index % 2 ? ']' : '[') . '/';
50
+ }
51
+
52
+ /**
53
+ * Conver string to readable
54
+ *
55
+ * @param string $text
56
+ *
57
+ * @return string
58
+ *
59
+ * @access public
60
+ */
61
+ public static function getHumanText($text) {
62
+ return implode(' ', array_map('ucfirst', explode('_', $text)));
63
+ }
64
+
65
+ }
Application/Backend/Localization.php ADDED
@@ -0,0 +1,45 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
+ 'Search Capability' => __('Search Capability', AAM_KEY),
12
+ '_TOTAL_ capability(s)' => __('_TOTAL_ capability(s)', AAM_KEY),
13
+ 'Saving...' => __('Saving...', AAM_KEY),
14
+ 'Failed to add new capability' => __('Failed to add new capability', AAM_KEY),
15
+ 'Application error' => __('Application error', AAM_KEY),
16
+ 'Add Capability' => __('Add Capability', AAM_KEY),
17
+ 'Show Menu' => __('Show Menu', AAM_KEY),
18
+ 'Hide Menu' => __('Hide Menu', AAM_KEY),
19
+ 'Failed to retrieve mataboxes' => __('Failed to retrieve mataboxes', AAM_KEY),
20
+ 'Search' => __('Search', AAM_KEY),
21
+ '_TOTAL_ object(s)' => __('_TOTAL_ object(s)', AAM_KEY),
22
+ 'Failed' => __('Failed', AAM_KEY),
23
+ 'Loading...' => __('Loading...', AAM_KEY),
24
+ 'Select Role' => __('Select Role', AAM_KEY),
25
+ 'Search Role' => __('Search Role', AAM_KEY),
26
+ '_TOTAL_ role(s)' => __('_TOTAL_ role(s)', AAM_KEY),
27
+ 'Create' => __('Create', AAM_KEY),
28
+ 'Users' => __('Users', AAM_KEY),
29
+ 'Failed to add new role' => __('Failed to add new role', AAM_KEY),
30
+ 'Add Role' => __('Add Role', AAM_KEY),
31
+ 'Failed to update role' => __('Failed to update role', AAM_KEY),
32
+ 'Update' => __('Update', AAM_KEY),
33
+ 'Deleting...' => __('Deleting...', AAM_KEY),
34
+ 'Failed to delete role' => __('Failed to delete role', AAM_KEY),
35
+ 'Delete Role' => __('Delete Role', AAM_KEY),
36
+ 'Failed to block user' => __('Failed to block user', AAM_KEY),
37
+ 'Search User' => __('Search User', AAM_KEY),
38
+ '_TOTAL_ user(s)' => __('_TOTAL_ user(s)', AAM_KEY),
39
+ 'Role' => __('Role', AAM_KEY),
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
+ );
Application/Backend/Manager.php ADDED
@@ -0,0 +1,326 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * ======================================================================
5
+ * LICENSE: This file is subject to the terms and conditions defined in *
6
+ * file 'license.txt', which is part of this source code package. *
7
+ * ======================================================================
8
+ */
9
+
10
+ /**
11
+ * Backend manager
12
+ *
13
+ * @package AAM
14
+ * @author Vasyl Martyniuk <vasyl@vasyltech.com>
15
+ */
16
+ class AAM_Backend_Manager {
17
+
18
+ /**
19
+ * Single instance of itself
20
+ *
21
+ * @var AAM_Backend_Manager
22
+ *
23
+ * @access private
24
+ */
25
+ private static $_instance = null;
26
+
27
+ /**
28
+ * Initialize the object
29
+ *
30
+ * @return void
31
+ *
32
+ * @access protected
33
+ */
34
+ protected function __construct() {
35
+ //print required JS & CSS
36
+ add_action('admin_enqueue_scripts', array($this, 'enqueueScript'));
37
+ add_action('admin_print_scripts', array($this, 'printJavascript'));
38
+ add_action('admin_print_styles', array($this, 'printStylesheet'));
39
+
40
+ //manager Admin Menu
41
+ add_action('admin_menu', array($this, 'adminMenu'), 999);
42
+
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
50
+ add_filter('user_row_actions', array($this, 'userActions'), 10, 2);
51
+
52
+ //check extension version
53
+ $this->checkExtensionList();
54
+
55
+ //register backend hooks and filters
56
+ AAM_Backend_Filter::register();
57
+ }
58
+
59
+ /**
60
+ * Enqueue global js
61
+ *
62
+ * Very important to track the JS errors on page to notify the customer that
63
+ * plugin might not function properly because of the javascript error on the page
64
+ *
65
+ * @return void
66
+ *
67
+ * @access public
68
+ */
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
+ }
76
+
77
+ /**
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) {
87
+ AAM_Core_Console::add(
88
+ sprintf(
89
+ __('Extension %s has new update available for download.'),
90
+ $extension->title
91
+ )
92
+ );
93
+ }
94
+ }
95
+ }
96
+
97
+ /**
98
+ * Add extra column to search in for User search
99
+ *
100
+ * @param array $columns
101
+ *
102
+ * @return array
103
+ *
104
+ * @access public
105
+ */
106
+ public function searchColumns($columns) {
107
+ $columns[] = 'display_name';
108
+
109
+ return $columns;
110
+ }
111
+
112
+ /**
113
+ * Add "Manage Access" action
114
+ *
115
+ * Add additional action to the user list table.
116
+ *
117
+ * @param array $actions
118
+ * @param WP_User $user
119
+ *
120
+ * @return array
121
+ *
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
+ }
132
+
133
+ /**
134
+ * Print javascript libraries
135
+ *
136
+ * @return void
137
+ *
138
+ * @access public
139
+ */
140
+ public function printJavascript() {
141
+ if (AAM::isAAM()) {
142
+ wp_enqueue_script('aam-bt', AAM_MEDIA . '/js/bootstrap.min.js');
143
+ wp_enqueue_script('aam-dt', AAM_MEDIA . '/js/datatables.min.js');
144
+ wp_enqueue_script('aam-dwn', AAM_MEDIA . '/js/download.min.js');
145
+ wp_enqueue_script('aam-main', AAM_MEDIA . '/js/aam.js');
146
+ //add plugin localization
147
+ $this->printLocalization('aam-main');
148
+ }
149
+ }
150
+
151
+ /**
152
+ * Print plugin localization
153
+ *
154
+ * @param string $localKey
155
+ *
156
+ * @return void
157
+ *
158
+ * @access protected
159
+ */
160
+ protected function printLocalization($localKey) {
161
+ $subject = $this->getCurrentSubject();
162
+
163
+ wp_localize_script($localKey, 'aamLocal', array(
164
+ 'nonce' => wp_create_nonce('aam_ajax'),
165
+ 'ajaxurl' => admin_url('admin-ajax.php'),
166
+ 'url' => array(
167
+ 'site' => admin_url('index.php'),
168
+ 'jsbase' => AAM_MEDIA . '/js',
169
+ 'editUser' => admin_url('user-edit.php'),
170
+ 'addUser' => admin_url('user-new.php')
171
+ ),
172
+ 'subject' => array(
173
+ 'type' => $subject->type,
174
+ 'id' => $subject->id,
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
+ }
182
+
183
+ /**
184
+ *
185
+ * @return type
186
+ */
187
+ protected function getCurrentSubject() {
188
+ $userId = AAM_Core_Request::get('user');
189
+ if ($userId) {
190
+ $u = get_user_by('id', $userId);
191
+ $subject = array(
192
+ 'type' => 'user',
193
+ 'id' => $userId,
194
+ 'name' => ($u->display_name ? $u->display_name : $u->user_nicename)
195
+ );
196
+ } else {
197
+ $roles = array_keys(get_editable_roles());
198
+ $role = array_shift($roles);
199
+
200
+ $subject = array(
201
+ 'type' => 'role',
202
+ 'id' => $role,
203
+ 'name' => AAM_Core_API::getRoles()->get_role($role)->name
204
+ );
205
+ }
206
+
207
+ return (object) $subject;
208
+ }
209
+
210
+ /**
211
+ * Print necessary styles
212
+ *
213
+ * @return void
214
+ *
215
+ * @access public
216
+ */
217
+ public function printStylesheet() {
218
+ if (AAM::isAAM()) {
219
+ wp_enqueue_style('aam-bt', AAM_MEDIA . '/css/bootstrap.min.css');
220
+ wp_enqueue_style('aam-db', AAM_MEDIA . '/css/datatables.min.css');
221
+ wp_enqueue_style('aam-main', AAM_MEDIA . '/css/aam.css');
222
+ }
223
+ }
224
+
225
+ /**
226
+ * Register Admin Menu
227
+ *
228
+ * @return void
229
+ *
230
+ * @access public
231
+ */
232
+ public function adminMenu() {
233
+ if (AAM_Core_Console::hasIssues()) {
234
+ $counter = '&nbsp;<span class="update-plugins">'
235
+ . '<span class="plugin-count">' . AAM_Core_Console::count()
236
+ . '</span></span>';
237
+ } else {
238
+ $counter = '';
239
+ }
240
+
241
+ //register the menu
242
+ add_menu_page(
243
+ __('AAM', AAM_KEY),
244
+ __('AAM', AAM_KEY) . $counter,
245
+ AAM_Core_ConfigPress::get('aam.page.capability', 'administrator'),
246
+ 'aam',
247
+ array($this, 'renderPage'),
248
+ AAM_MEDIA . '/active-menu.png'
249
+ );
250
+ }
251
+
252
+ /**
253
+ * Render Main Content page
254
+ *
255
+ * @return void
256
+ *
257
+ * @access public
258
+ */
259
+ public function renderPage() {
260
+ echo AAM_Backend_View::getInstance()->renderPage();
261
+ }
262
+
263
+ /**
264
+ * Render list of AAM Features
265
+ *
266
+ * Must be separate from Ajax call because WordPress ajax does not load
267
+ * a lot of UI stuff like admin menu
268
+ *
269
+ * @return void
270
+ *
271
+ * @access public
272
+ */
273
+ public function renderContent() {
274
+ check_ajax_referer('aam_ajax');
275
+
276
+ echo AAM_Backend_View::getInstance()->renderContent();
277
+ exit();
278
+ }
279
+
280
+ /**
281
+ * Handle Ajax calls to AAM
282
+ *
283
+ * @return void
284
+ *
285
+ * @access public
286
+ */
287
+ public function ajax() {
288
+ check_ajax_referer('aam_ajax');
289
+
290
+ //clean buffer to make sure that nothing messing around with system
291
+ while (@ob_end_clean()){}
292
+
293
+ //process ajax request
294
+ echo AAM_Backend_View::getInstance()->processAjax();
295
+ exit();
296
+ }
297
+
298
+ /**
299
+ * Bootstrap the manager
300
+ *
301
+ * @return void
302
+ *
303
+ * @access public
304
+ */
305
+ public static function bootstrap() {
306
+ if (is_null(self::$_instance)) {
307
+ self::$_instance = new self;
308
+ }
309
+ }
310
+
311
+ /**
312
+ * Get instance of itself
313
+ *
314
+ * @return AAM_Backend_View
315
+ *
316
+ * @access public
317
+ */
318
+ public static function getInstance() {
319
+ if (is_null(self::$_instance)) {
320
+ self::bootstrap();
321
+ }
322
+
323
+ return self::$_instance;
324
+ }
325
+
326
+ }
Application/Backend/Menu.php ADDED
@@ -0,0 +1,169 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * ======================================================================
5
+ * LICENSE: This file is subject to the terms and conditions defined in *
6
+ * file 'license.txt', which is part of this source code package. *
7
+ * ======================================================================
8
+ */
9
+
10
+ /**
11
+ * Backend menu manager
12
+ *
13
+ * @package AAM
14
+ * @author Vasyl Martyniuk <vasyl@vasyltech.com>
15
+ */
16
+ class AAM_Backend_Menu {
17
+
18
+ /**
19
+ * Get HTML content
20
+ *
21
+ * @return string
22
+ *
23
+ * @access public
24
+ */
25
+ public function getContent() {
26
+ ob_start();
27
+ require_once(dirname(__FILE__) . '/view/object/menu.phtml');
28
+ $content = ob_get_contents();
29
+ ob_end_clean();
30
+
31
+ return $content;
32
+ }
33
+
34
+ /**
35
+ * Get subject's menu
36
+ *
37
+ * Based on the list of capabilitis that current subject has, prepare
38
+ * complete menu list and return it.
39
+ *
40
+ * @return array
41
+ *
42
+ * @access public
43
+ * @global array $menu
44
+ */
45
+ public function getMenu() {
46
+ global $menu;
47
+
48
+ $response = array();
49
+
50
+ //let's create menu list with submenus
51
+ foreach ($menu as $item) {
52
+ if (preg_match('/^separator/', $item[2])) {
53
+ continue; //skip separator
54
+ }
55
+
56
+ $submenu = $this->getSubmenu($item[2]);
57
+
58
+ $allowed = AAM_Backend_View::getSubject()->hasCapability($item[1]);
59
+
60
+ if ($allowed || count($submenu) > 0) {
61
+ $response[] = array(
62
+ 'name' => $this->filterMenuName($item[0]),
63
+ //add menu- prefix to define that this is the top level menu
64
+ //WordPress by default gives the same menu id to the first
65
+ //submenu
66
+ 'id' => 'menu-' . $item[2],
67
+ 'submenu' => $submenu,
68
+ 'capability' => AAM_Backend_Helper::getHumanText($item[1])
69
+ );
70
+ }
71
+ }
72
+
73
+ return $response;
74
+ }
75
+
76
+ /**
77
+ * Prepare filtered submenu
78
+ *
79
+ * @param string $menu
80
+ *
81
+ * @return array
82
+ *
83
+ * @access public
84
+ * @global array $submenu
85
+ */
86
+ public function getSubmenu($menu) {
87
+ global $submenu;
88
+
89
+ $response = array();
90
+ $subject = AAM_Backend_View::getSubject();
91
+
92
+ if (isset($submenu[$menu])) {
93
+ foreach ($submenu[$menu] as $item) {
94
+ if ($subject->hasCapability($item[1])) {
95
+ $response[] = array(
96
+ 'name' => $this->filterMenuName($item[0]),
97
+ 'id' => $item[2],
98
+ 'capability' => AAM_Backend_Helper::getHumanText(
99
+ $item[1]
100
+ )
101
+ );
102
+ }
103
+ }
104
+ }
105
+
106
+ return $response;
107
+ }
108
+
109
+ /**
110
+ * Filter menu name
111
+ *
112
+ * Strip any HTML tags from the menu name and also remove the trailing
113
+ * numbers in case of Plugin or Comments menu name.
114
+ *
115
+ * @param string $name
116
+ *
117
+ * @return string
118
+ *
119
+ * @access protected
120
+ */
121
+ protected function filterMenuName($name) {
122
+ $filtered = trim(strip_tags($name));
123
+
124
+ return preg_replace('/([\d]+)$/', '', $filtered);
125
+ }
126
+
127
+ /**
128
+ * Check if the entire menu branch is restricted
129
+ *
130
+ * @param array $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
+
140
+ foreach ($menu['submenu'] as $submenu) {
141
+ if ($object->has($submenu['id']) === false) {
142
+ $response = false;
143
+ break;
144
+ }
145
+ }
146
+
147
+ return $response;
148
+ }
149
+
150
+ /**
151
+ * Register Menu feature
152
+ *
153
+ * @return void
154
+ *
155
+ * @access public
156
+ */
157
+ public static function register() {
158
+ AAM_Backend_Feature::registerFeature((object) array(
159
+ 'uid' => 'admin_menu',
160
+ 'position' => 5,
161
+ 'title' => __('Backend Menu', AAM_KEY),
162
+ 'subjects' => array(
163
+ 'AAM_Core_Subject_Role', 'AAM_Core_Subject_User'
164
+ ),
165
+ 'view' => __CLASS__
166
+ ));
167
+ }
168
+
169
+ }
Application/Backend/Metabox.php ADDED
@@ -0,0 +1,205 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * ======================================================================
5
+ * LICENSE: This file is subject to the terms and conditions defined in *
6
+ * file 'license.txt', which is part of this source code package. *
7
+ * ======================================================================
8
+ */
9
+
10
+ /**
11
+ * Backend metaboxes & widgets manager
12
+ *
13
+ * @package AAM
14
+ * @author Vasyl Martyniuk <vasyl@vasyltech.com>
15
+ */
16
+ class AAM_Backend_Metabox {
17
+
18
+ /**
19
+ * Get HTML content
20
+ *
21
+ * @return string
22
+ *
23
+ * @access public
24
+ */
25
+ public function getContent() {
26
+ global $wp_post_types; //important to keep. Is used in metabox.phtml
27
+
28
+ ob_start();
29
+ require_once(dirname(__FILE__) . '/view/object/metabox.phtml');
30
+ $content = ob_get_contents();
31
+ ob_end_clean();
32
+
33
+ return $content;
34
+ }
35
+
36
+ /**
37
+ *
38
+ * @global type $wp_post_types
39
+ * @return type
40
+ */
41
+ public function refreshList() {
42
+ global $wp_post_types;
43
+
44
+ AAM_Core_API::deleteOption('aam_metabox_cache');
45
+ $type_list = array_keys($wp_post_types);
46
+
47
+ //used to retrieve the list of all wigets on the frontend
48
+ array_unshift($type_list, 'widgets');
49
+
50
+ foreach ($type_list as $type) {
51
+ if ($type == 'widgets') {
52
+ $url = add_query_arg('init', 'metabox', admin_url('index.php'));
53
+ } else {
54
+ $url = add_query_arg(
55
+ 'init',
56
+ 'metabox',
57
+ admin_url('post-new.php?post_type=' . $type)
58
+ );
59
+ }
60
+ //grab metaboxes
61
+ AAM_Core_API::cURL($url);
62
+ }
63
+
64
+ return json_encode(array('status' => 'success'));
65
+ }
66
+
67
+
68
+ /**
69
+ * Initialize metabox list
70
+ *
71
+ * @param string $post_type
72
+ *
73
+ * @return void
74
+ *
75
+ * @access public
76
+ */
77
+ public function initialize($post_type) {
78
+ $cache = $this->getMetaboxList();
79
+
80
+ if ($post_type === 'dashboard') {
81
+ $this->collectWidgets($cache);
82
+ } else {
83
+ $this->collectMetaboxes($post_type, $cache);
84
+ }
85
+
86
+ AAM_Core_API::updateOption('aam_metabox_cache', $cache);
87
+ }
88
+
89
+ /**
90
+ * Collect dashboard widgets
91
+ *
92
+ * @global type $wp_registered_widgets
93
+ *
94
+ * @return void
95
+ *
96
+ * @access protected
97
+ */
98
+ protected function collectWidgets(&$cache) {
99
+ global $wp_registered_widgets;
100
+
101
+ if (!isset($cache['widgets'])) {
102
+ $cache['widgets'] = array();
103
+ }
104
+
105
+ //get frontend widgets
106
+ if (is_array($wp_registered_widgets)) {
107
+ foreach ($wp_registered_widgets as $data) {
108
+ if (is_object($data['callback'][0])) {
109
+ $callback = get_class($data['callback'][0]);
110
+ } elseif (is_string($data['callback'][0])) {
111
+ $callback = $data['callback'][0];
112
+ } else {
113
+ $callback = null;
114
+ }
115
+
116
+ if (!is_null($callback)) { //exclude any junk
117
+ $cache['widgets'][$callback] = array(
118
+ 'title' => strip_tags($data['name']),
119
+ 'id' => $callback
120
+ );
121
+ }
122
+ }
123
+ }
124
+
125
+ //now collect Admin Dashboard Widgets
126
+ $this->collectMetaboxes('dashboard', $cache);
127
+ }
128
+
129
+ /**
130
+ *
131
+ * @global type $wp_meta_boxes
132
+ * @param type $post_type
133
+ * @param type $cache
134
+ */
135
+ protected function collectMetaboxes($post_type, &$cache) {
136
+ global $wp_meta_boxes;
137
+
138
+ if (!isset($cache[$post_type])) {
139
+ $cache[$post_type] = array();
140
+ }
141
+
142
+ if (isset($wp_meta_boxes[$post_type]) && is_array($wp_meta_boxes[$post_type])) {
143
+ foreach ($wp_meta_boxes[$post_type] as $levels) {
144
+ if (is_array($levels)) {
145
+ foreach ($levels as $boxes) {
146
+ if (is_array($boxes)) {
147
+ foreach ($boxes as $data) {
148
+ if (trim($data['id'])) { //exclude any junk
149
+ $cache[$post_type][$data['id']] = array(
150
+ 'id' => $data['id'],
151
+ 'title' => strip_tags($data['title'])
152
+ );
153
+ }
154
+ }
155
+ }
156
+ }
157
+ }
158
+ }
159
+ }
160
+ }
161
+
162
+ /**
163
+ *
164
+ * @return type
165
+ */
166
+ public function getMetaboxList() {
167
+ $cache = AAM_Core_API::getOption('aam_metabox_cache', array());
168
+ $subject = AAM_Backend_View::getSubject();
169
+
170
+ //if visitor, return only frontend widgets
171
+ if ($subject instanceof AAM_Core_Subject_Visitor) {
172
+ if (!empty($cache['widgets'])) {
173
+ $response = array('widgets' => $cache['widgets']);
174
+ } else {
175
+ $response = array();
176
+ }
177
+ } else {
178
+ $response = $cache;
179
+ }
180
+
181
+ return $response;
182
+ }
183
+
184
+ /**
185
+ * Register metabox feature
186
+ *
187
+ * @return void
188
+ *
189
+ * @access public
190
+ */
191
+ public static function register() {
192
+ AAM_Backend_Feature::registerFeature((object) array(
193
+ 'uid' => 'metabox',
194
+ 'position' => 10,
195
+ 'title' => __('Metaboxes & Widgets', AAM_KEY),
196
+ 'subjects' => array(
197
+ 'AAM_Core_Subject_Role',
198
+ 'AAM_Core_Subject_User',
199
+ 'AAM_Core_Subject_Visitor'
200
+ ),
201
+ 'view' => __CLASS__
202
+ ));
203
+ }
204
+
205
+ }
Application/Backend/Post.php ADDED
@@ -0,0 +1,328 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * ======================================================================
5
+ * LICENSE: This file is subject to the terms and conditions defined in *
6
+ * file 'license.txt', which is part of this source code package. *
7
+ * ======================================================================
8
+ */
9
+
10
+ /**
11
+ * Backend posts & pages manager
12
+ *
13
+ * @package AAM
14
+ * @author Vasyl Martyniuk <vasyl@vasyltech.com>
15
+ */
16
+ class AAM_Backend_Post {
17
+
18
+ /**
19
+ * Get HTML content
20
+ *
21
+ * @return string
22
+ *
23
+ * @access public
24
+ */
25
+ public function getContent() {
26
+ ob_start();
27
+ require_once(dirname(__FILE__) . '/view/object/post.phtml');
28
+ $content = ob_get_contents();
29
+ ob_end_clean();
30
+
31
+ return $content;
32
+ }
33
+
34
+ /**
35
+ * Get list for the table
36
+ *
37
+ * @return string
38
+ *
39
+ * @access public
40
+ */
41
+ public function getTable() {
42
+ $type = trim(AAM_Core_Request::request('type'));
43
+
44
+ if (empty($type)) {
45
+ $response = $this->retrieveTypeList();
46
+ } else {
47
+ $response = $this->retrieveTypeContent($type);
48
+ }
49
+
50
+ return $this->wrapTable($response);
51
+ }
52
+
53
+ /**
54
+ * Get breadcrumb for a post or term
55
+ *
56
+ * @return string
57
+ *
58
+ * @access public
59
+ */
60
+ public function getBreadcrumb() {
61
+ $type = AAM_Core_Request::post('type');
62
+
63
+ if ($type == 'term') {
64
+ $breadcrub = $this->renderTermBreadcrumb();
65
+ } else {
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
+ /**
78
+ * Render term breadcrumb
79
+ *
80
+ * @return string
81
+ *
82
+ * @access protected
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;
92
+ }
93
+
94
+ return implode(' &Gt; ', $breadcrumb);
95
+ }
96
+
97
+ /**
98
+ * Render post breadcrumb
99
+ *
100
+ * @return string
101
+ *
102
+ * @access protected
103
+ */
104
+ protected function renderPostBreadcrumb() {
105
+ $post = get_post(AAM_Core_Request::post('id'));
106
+ $terms = wp_get_object_terms(
107
+ $post->ID, get_object_taxonomies($post)
108
+ );
109
+ $breadcrumb = array();
110
+ foreach ($terms as $term) {
111
+ if (is_taxonomy_hierarchical($term->taxonomy)) {
112
+ $breadcrumb[] = $term->name;
113
+ }
114
+ }
115
+
116
+ return implode('; ', $breadcrumb);
117
+ }
118
+
119
+ /**
120
+ * Retrieve list of registered post types
121
+ *
122
+ * @return array
123
+ *
124
+ * @access protected
125
+ */
126
+ protected function retrieveTypeList() {
127
+ $response = array('data' => array());
128
+
129
+ foreach (get_post_types(array(), 'objects') as $type) {
130
+ if ($type->public) {
131
+ $response['data'][] = array(
132
+ $type->name,
133
+ null,
134
+ 'type',
135
+ $type->labels->name,
136
+ 'manage'
137
+ );
138
+ }
139
+ }
140
+
141
+ return $response;
142
+ }
143
+
144
+ /**
145
+ * Get post type children
146
+ *
147
+ * Retrieve list of all posts and terms that belong to specified post type
148
+ *
149
+ * @param string $type
150
+ *
151
+ * @return array
152
+ *
153
+ * @access protected
154
+ */
155
+ protected function retrieveTypeContent($type) {
156
+ $list = array();
157
+
158
+ //first retrieve all hierarchical terms that belong to Post Type
159
+ foreach (get_object_taxonomies($type, 'objects') as $tax) {
160
+ if (is_taxonomy_hierarchical($tax->name)) {
161
+ //get all terms that have no parent category
162
+ $list = array_merge($list, $this->retrieveTermList($tax->name));
163
+ }
164
+ }
165
+
166
+ //retrieve all posts
167
+ $posts = get_posts(array(
168
+ 'post_type' => $type, 'category' => 0,
169
+ 'numberposts' => -1, 'post_status' => 'any'
170
+ ));
171
+
172
+ foreach ($posts as $post) {
173
+ $list[] = array(
174
+ $post->ID,
175
+ get_edit_post_link($post->ID, 'link'),
176
+ 'post',
177
+ $post->post_title,
178
+ 'manage,edit'
179
+ );
180
+ }
181
+
182
+ return array('data' => $list);
183
+ }
184
+
185
+ /**
186
+ * Retrieve term list
187
+ *
188
+ * @param string $taxonomy
189
+ *
190
+ * @return array
191
+ *
192
+ * @access protected
193
+ */
194
+ protected function retrieveTermList($taxonomy) {
195
+ $response = array();
196
+
197
+ $terms = get_terms($taxonomy, array(
198
+ 'hide_empty' => false
199
+ ));
200
+
201
+ foreach ($terms as $term) {
202
+ $response[] = array(
203
+ $term->term_id . '|' . $taxonomy,
204
+ get_edit_term_link($term->term_id, $taxonomy),
205
+ 'term',
206
+ $term->name,
207
+ 'manage,edit'
208
+ );
209
+ }
210
+
211
+ return $response;
212
+ }
213
+
214
+ /**
215
+ * Prepare response
216
+ *
217
+ * @param array $response
218
+ *
219
+ * @return string
220
+ *
221
+ * @access protected
222
+ */
223
+ protected function wrapTable($response) {
224
+ $response['draw'] = AAM_Core_Request::request('draw');
225
+
226
+ return json_encode($response);
227
+ }
228
+
229
+ /**
230
+ * Get Post or Term access
231
+ *
232
+ * @return string
233
+ *
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
+ /**
255
+ * Save post properties
256
+ *
257
+ * @return string
258
+ *
259
+ * @access public
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
273
+ );
274
+ } else {
275
+ $result = false;
276
+ $error = __('You reached your limitation.', AAM_KEY);
277
+ }
278
+
279
+ return json_encode(array(
280
+ 'status' => ($result ? 'success' : 'failure'),
281
+ 'error' => (empty($error) ? '' : $error)
282
+ ));
283
+ }
284
+
285
+ /**
286
+ *
287
+ * @global type $wpdb
288
+ * @return type
289
+ */
290
+ protected function checkLimit() {
291
+ global $wpdb;
292
+
293
+ $limit = apply_filters('aam-post-limit', 0);
294
+
295
+ if ($limit != -1) {
296
+ //count number of posts that have access saved
297
+ $query = "SELECT COUNT(*) as `total` FROM {$wpdb->postmeta} "
298
+ . "WHERE meta_key LIKE %s";
299
+
300
+ $row = $wpdb->get_row($wpdb->prepare($query, 'aam_post_access_%'));
301
+ $limit = ($row->total < 10 ? -1 : 0);
302
+ }
303
+
304
+ return ($limit == -1);
305
+ }
306
+
307
+ /**
308
+ * Register Posts & Pages feature
309
+ *
310
+ * @return void
311
+ *
312
+ * @access public
313
+ */
314
+ public static function register() {
315
+ AAM_Backend_Feature::registerFeature((object) array(
316
+ 'uid' => 'post',
317
+ 'position' => 20,
318
+ 'title' => __('Posts & Pages', AAM_KEY),
319
+ 'subjects' => array(
320
+ 'AAM_Core_Subject_Role',
321
+ 'AAM_Core_Subject_User',
322
+ 'AAM_Core_Subject_Visitor'
323
+ ),
324
+ 'view' => __CLASS__
325
+ ));
326
+ }
327
+
328
+ }
application/view/role.php → Application/Backend/Role.php RENAMED
@@ -8,60 +8,43 @@
8
  */
9
 
10
  /**
11
- *
 
12
  * @package AAM
13
- * @author Vasyl Martyniuk <support@wpaam.com>
14
- * @copyright Copyright C 2013 Vasyl Martyniuk
15
- * @license GNU General Public License {@link http://www.gnu.org/licenses/}
16
  */
17
- class aam_View_Role extends aam_View_Abstract {
18
 
19
  /**
20
- * Generate UI Content
21
  *
22
- * @return string
23
- *
24
- * @access public
25
- */
26
- public function content() {
27
- return $this->loadTemplate(dirname(__FILE__) . '/tmpl/role.phtml');
28
- }
29
-
30
- /**
31
- * Get Role List
32
  *
33
  * @return string JSON Encoded role list
34
  *
35
  * @access public
36
  */
37
- public function retrieveList() {
38
  //retrieve list of users
39
  $count = count_users();
40
- $user_count = $count['avail_roles'];
41
 
42
- //filter by name
43
- $search = strtolower(trim(aam_Core_Request::request('sSearch')));
44
- $filtered = array();
45
- $roles = get_editable_roles();
46
- foreach ($roles as $id => $role) {
47
- if (!$search || preg_match('/^' . $search . '/i', $role['name'])) {
48
- $filtered[$id] = $role;
49
- }
50
- }
51
 
52
  $response = array(
53
- 'iTotalRecords' => count($roles),
54
- 'iTotalDisplayRecords' => count($filtered),
55
- 'sEcho' => aam_Core_Request::request('sEcho'),
56
- 'aaData' => array(),
57
  );
 
58
  foreach ($filtered as $role => $data) {
59
- $users = (isset($user_count[$role]) ? $user_count[$role] : 0);
60
- $response['aaData'][] = array(
61
  $role,
62
- $users,
63
  translate_user_role($data['name']),
64
- ''
65
  );
66
  }
67
 
@@ -73,8 +56,30 @@ class aam_View_Role extends aam_View_Abstract {
73
  *
74
  * @return string
75
  */
76
- public function retrievePureList(){
77
- return json_encode(get_editable_roles());
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
78
  }
79
 
80
  /**
@@ -85,15 +90,11 @@ class aam_View_Role extends aam_View_Abstract {
85
  * @access public
86
  */
87
  public function add() {
88
- $name = trim(aam_Core_Request::post('name'));
89
  $roles = new WP_Roles;
90
- if (aam_Core_ConfigPress::getParam('aam.native_role_id') === 'true'){
91
- $role_id = strtolower($name);
92
- } else {
93
- $role_id = 'aamrole_' . uniqid();
94
- }
95
  //if inherited role is set get capabilities from it
96
- $parent = trim(aam_Core_Request::post('inherit'));
97
  if ($parent && $roles->get_role($parent)){
98
  $caps = $roles->get_role($parent)->capabilities;
99
  } else {
@@ -113,22 +114,31 @@ class aam_View_Role extends aam_View_Abstract {
113
  }
114
 
115
  /**
116
- *
117
- * @return type
 
 
 
118
  */
119
  public function edit() {
120
- $result = $this->getSubject()->update(trim(aam_Core_Request::post('name')));
 
 
 
121
  return json_encode(
122
  array('status' => ($result ? 'success' : 'failure'))
123
  );
124
  }
125
 
126
  /**
127
- *
128
- * @return type
 
 
 
129
  */
130
  public function delete() {
131
- if ($this->getSubject()->delete(aam_Core_Request::post('delete_users'))) {
132
  $status = 'success';
133
  } else {
134
  $status = 'failure';
8
  */
9
 
10
  /**
11
+ * Role view manager
12
+ *
13
  * @package AAM
14
+ * @author Vasyl Martyniuk <vasyl@vasyltech.com>
 
 
15
  */
16
+ class AAM_Backend_Role {
17
 
18
  /**
19
+ * Get role list
20
  *
21
+ * Prepare and return the list of roles for the table view
 
 
 
 
 
 
 
 
 
22
  *
23
  * @return string JSON Encoded role list
24
  *
25
  * @access public
26
  */
27
+ public function getTable() {
28
  //retrieve list of users
29
  $count = count_users();
30
+ $stats = $count['avail_roles'];
31
 
32
+ $filtered = $this->fetchRoleList();
 
 
 
 
 
 
 
 
33
 
34
  $response = array(
35
+ 'recordsTotal' => count(get_editable_roles()),
36
+ 'recordsFiltered' => count($filtered),
37
+ 'draw' => AAM_Core_Request::request('draw'),
38
+ 'data' => array(),
39
  );
40
+
41
  foreach ($filtered as $role => $data) {
42
+ $uc = (isset($stats[$role]) ? $stats[$role] : 0);
43
+ $response['data'][] = array(
44
  $role,
45
+ $uc,
46
  translate_user_role($data['name']),
47
+ 'manage,edit' . ($uc || !current_user_can('delete_users') ? ',no-delete' : ',delete')
48
  );
49
  }
50
 
56
  *
57
  * @return string
58
  */
59
+ public function getList(){
60
+ return json_encode($this->fetchRoleList());
61
+ }
62
+
63
+ /**
64
+ * Fetch role list
65
+ *
66
+ * @return array
67
+ *
68
+ * @access protected
69
+ */
70
+ protected function fetchRoleList() {
71
+ $response = array();
72
+
73
+ //filter by name
74
+ $search = trim(AAM_Core_Request::request('search.value'));
75
+ $roles = get_editable_roles();
76
+ foreach ($roles as $id => $role) {
77
+ if (!$search || preg_match('/^' . $search . '/i', $role['name'])) {
78
+ $response[$id] = $role;
79
+ }
80
+ }
81
+
82
+ return $response;
83
  }
84
 
85
  /**
90
  * @access public
91
  */
92
  public function add() {
93
+ $name = trim(AAM_Core_Request::post('name'));
94
  $roles = new WP_Roles;
95
+ $role_id = strtolower($name);
 
 
 
 
96
  //if inherited role is set get capabilities from it
97
+ $parent = trim(AAM_Core_Request::post('inherit'));
98
  if ($parent && $roles->get_role($parent)){
99
  $caps = $roles->get_role($parent)->capabilities;
100
  } else {
114
  }
115
 
116
  /**
117
+ * Edit role name
118
+ *
119
+ * @return string
120
+ *
121
+ * @access public
122
  */
123
  public function edit() {
124
+ $result = AAM_Backend_View::getSubject()->update(
125
+ trim(AAM_Core_Request::post('name'))
126
+ );
127
+
128
  return json_encode(
129
  array('status' => ($result ? 'success' : 'failure'))
130
  );
131
  }
132
 
133
  /**
134
+ * Delete role
135
+ *
136
+ * @return string
137
+ *
138
+ * @access public
139
  */
140
  public function delete() {
141
+ if (AAM_Backend_View::getSubject()->delete()) {
142
  $status = 'success';
143
  } else {
144
  $status = 'failure';
Application/Backend/User.php ADDED
@@ -0,0 +1,152 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
+ * User view manager
12
+ *
13
+ * @package AAM
14
+ * @author Vasyl Martyniuk <vasyl@vasyltech.com>
15
+ */
16
+ class AAM_Backend_User {
17
+
18
+ /**
19
+ * Retrieve list of users
20
+ *
21
+ * Based on filters, get list of users
22
+ *
23
+ * @return string JSON encoded list of users
24
+ *
25
+ * @access public
26
+ */
27
+ public function getTable() {
28
+ //get total number of users
29
+ $total = count_users();
30
+ $result = $this->query();
31
+
32
+ $response = array(
33
+ 'recordsTotal' => $total['total_users'],
34
+ 'recordsFiltered' => $result->get_total(),
35
+ 'draw' => AAM_Core_Request::request('draw'),
36
+ 'data' => array(),
37
+ );
38
+
39
+ foreach ($result->get_results() as $user) {
40
+ $response['data'][] = array(
41
+ $user->ID,
42
+ implode(', ', $this->getUserRoles($user->roles)),
43
+ ($user->display_name ? $user->display_name : $user->user_nicename),
44
+ implode(',', $this->prepareRowActions($user))
45
+ );
46
+ }
47
+
48
+ return json_encode($response);
49
+ }
50
+
51
+ /**
52
+ * Get list of user roles
53
+ *
54
+ * @param array $roles
55
+ *
56
+ * @return array
57
+ *
58
+ * @access protected
59
+ */
60
+ protected function getUserRoles($roles) {
61
+ $response = array();
62
+
63
+ $names = AAM_Core_API::getRoles()->get_names();
64
+
65
+ foreach($roles as $role) {
66
+ if (isset($names[$role])) {
67
+ $response[] = translate_user_role($names[$role]);
68
+ }
69
+ }
70
+
71
+ return $response;
72
+ }
73
+
74
+ /**
75
+ * Prepare user row actions
76
+ *
77
+ * @param WP_User $user
78
+ *
79
+ * @return array
80
+ *
81
+ * @access protected
82
+ */
83
+ protected function prepareRowActions(WP_User $user) {
84
+ $max = AAM_Core_API::maxLevel(wp_get_current_user()->allcaps);
85
+
86
+ if ($max < AAM_Core_API::maxLevel($user->allcaps)) {
87
+ $actions = array('no-manage', 'no-lock', 'no-edit');
88
+ } else {
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
+
100
+ /**
101
+ * Query database for list of users
102
+ *
103
+ * Based on filters and settings get the list of users from database
104
+ *
105
+ * @return \WP_User_Query
106
+ *
107
+ * @access public
108
+ */
109
+ public function query() {
110
+ $search = trim(AAM_Core_Request::request('search.value'));
111
+
112
+ $args = array(
113
+ 'number' => '',
114
+ 'blog_id' => get_current_blog_id(),
115
+ 'role' => AAM_Core_Request::request('role'),
116
+ 'fields' => 'all',
117
+ 'number' => AAM_Core_Request::request('length'),
118
+ 'offset' => AAM_Core_Request::request('start'),
119
+ 'search' => ($search ? $search . '*' : ''),
120
+ 'search_columns' => array(
121
+ 'user_login', 'user_email', 'display_name'
122
+ ),
123
+ 'orderby' => 'user_nicename',
124
+ 'order' => 'ASC'
125
+ );
126
+
127
+ return new WP_User_Query($args);
128
+ }
129
+
130
+ /**
131
+ * Block user
132
+ *
133
+ * @return string
134
+ *
135
+ * @access public
136
+ */
137
+ public function block() {
138
+ $subject = AAM_Backend_View::getSubject();
139
+
140
+ //user is not allowed to lock himself
141
+ if ($subject->getId() != get_current_user_id()) {
142
+ $result = $subject->block();
143
+ } else {
144
+ $result = false;
145
+ }
146
+
147
+ return json_encode(
148
+ array('status' => ($result ? 'success' : 'failure'))
149
+ );
150
+ }
151
+
152
+ }
Application/Backend/View.php ADDED
@@ -0,0 +1,214 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * ======================================================================
5
+ * LICENSE: This file is subject to the terms and conditions defined in *
6
+ * file 'license.txt', which is part of this source code package. *
7
+ * ======================================================================
8
+ */
9
+
10
+ /**
11
+ * Backend view manager
12
+ *
13
+ * @package AAM
14
+ * @author Vasyl Martyniuk <vasyl@vasyltech.com>
15
+ */
16
+ class AAM_Backend_View {
17
+
18
+ /**
19
+ * Instance of itself
20
+ *
21
+ * @var AAM_Backend_View
22
+ *
23
+ * @access private
24
+ */
25
+ private static $_instance = null;
26
+
27
+ /**
28
+ * Current Subject
29
+ *
30
+ * @var AAM_Core_Subject
31
+ *
32
+ * @access private
33
+ */
34
+ private static $_subject = null;
35
+
36
+ /**
37
+ * Construct the view object
38
+ *
39
+ * @return void
40
+ *
41
+ * @access protected
42
+ */
43
+ protected function __construct() {
44
+ $classname = 'AAM_Core_Subject_' . ucfirst(
45
+ AAM_Core_Request::request('subject')
46
+ );
47
+ if (class_exists($classname)) {
48
+ $this->setSubject(new $classname(
49
+ AAM_Core_Request::request('subjectId')
50
+ ));
51
+ }
52
+
53
+ //register default features
54
+ AAM_Backend_Menu::register();
55
+ AAM_Backend_Metabox::register();
56
+ AAM_Backend_Capability::register();
57
+ AAM_Backend_Post::register();
58
+ AAM_Backend_Extension::register();
59
+ //feature registration hook
60
+ do_action('aam-feature-registration');
61
+ }
62
+
63
+ /**
64
+ * Run the Manager
65
+ *
66
+ * @return string
67
+ *
68
+ * @access public
69
+ */
70
+ public function renderPage() {
71
+ ob_start();
72
+ require_once(dirname(__FILE__) . '/view/index.phtml');
73
+ $content = ob_get_contents();
74
+ ob_end_clean();
75
+
76
+ return $content;
77
+ }
78
+
79
+ /**
80
+ * Process the ajax call
81
+ *
82
+ * @return string
83
+ *
84
+ * @access public
85
+ */
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
+ *
115
+ * @return void
116
+ *
117
+ * @access public
118
+ */
119
+ public function renderContent() {
120
+ ob_start();
121
+ require_once(dirname(__FILE__) . '/view/main-panel.phtml');
122
+ $content = ob_get_contents();
123
+ ob_end_clean();
124
+
125
+ return $content;
126
+ }
127
+
128
+ /**
129
+ *
130
+ * @param type $partial
131
+ * @return type
132
+ */
133
+ public function loadPartial($partial) {
134
+ ob_start();
135
+ require_once(dirname(__FILE__) . '/view/partial/' . $partial);
136
+ $content = ob_get_contents();
137
+ ob_end_clean();
138
+
139
+ return $content;
140
+ }
141
+
142
+ /**
143
+ * Save AAM options
144
+ *
145
+ * Important notice! This function excepts "value" to be only boolean value
146
+ *
147
+ * @return string
148
+ *
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(
157
+ AAM_Core_Request::post('value'), FILTER_VALIDATE_BOOLEAN
158
+ );
159
+
160
+ $result = $this->getSubject()->save($param, $value, $object, $objectId);
161
+
162
+ return json_encode(array('status' => ($result ? 'success' : 'failure')));
163
+ }
164
+
165
+ /**
166
+ *
167
+ * @return type
168
+ */
169
+ public function confirmWelcome() {
170
+ return json_encode(array(
171
+ 'status' => AAM_Core_API::updateOption('aam-welcome', 0)
172
+ ));
173
+ }
174
+
175
+ /**
176
+ * Get Subject
177
+ *
178
+ * @return AAM_Core_Subject
179
+ *
180
+ * @access public
181
+ */
182
+ public static function getSubject() {
183
+ return self::$_subject;
184
+ }
185
+
186
+ /**
187
+ * Set Subject
188
+ *
189
+ * @param AAM_Core_Subject $subject
190
+ *
191
+ * @return void
192
+ *
193
+ * @access public
194
+ */
195
+ protected function setSubject(AAM_Core_Subject $subject) {
196
+ self::$_subject = $subject;
197
+ }
198
+
199
+ /**
200
+ * Get instance of itself
201
+ *
202
+ * @return AAM_Backend_View
203
+ *
204
+ * @access public
205
+ */
206
+ public static function getInstance() {
207
+ if (is_null(self::$_instance)) {
208
+ self::$_instance = new self;
209
+ }
210
+
211
+ return self::$_instance;
212
+ }
213
+
214
+ }
Application/Backend/view/extension.phtml ADDED
@@ -0,0 +1,151 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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>
Application/Backend/view/index.phtml ADDED
@@ -0,0 +1,319 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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>
Application/Backend/view/main-panel.phtml ADDED
@@ -0,0 +1,21 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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>
Application/Backend/view/object/capability.phtml ADDED
@@ -0,0 +1,57 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
+ <table id="capability-list" class="table table-striped table-bordered">
26
+ <thead>
27
+ <tr>
28
+ <th>ID</th>
29
+ <th width="35%"><?php echo __('Category', AAM_KEY); ?></th>
30
+ <th width="50%"><?php echo __('Capability', AAM_KEY); ?></th>
31
+ <th><?php echo __('Assign', AAM_KEY); ?></th>
32
+ </tr>
33
+ </thead>
34
+ <tbody></tbody>
35
+ </table>
36
+
37
+ <div class="modal fade" id="add-capability-modal" tabindex="-1" role="dialog">
38
+ <div class="modal-dialog modal-sm" role="document">
39
+ <div class="modal-content">
40
+ <div class="modal-header">
41
+ <button type="button" class="close" data-dismiss="modal" aria-label="<?php echo __('Close', AAM_KEY); ?>"><span aria-hidden="true">&times;</span></button>
42
+ <h4 class="modal-title"><?php echo __('Add New Capability', AAM_KEY); ?></h4>
43
+ </div>
44
+ <div class="modal-body">
45
+ <div class="form-group">
46
+ <label for="new-capability-name"><?php echo __('Capability Name', AAM_KEY); ?><span class="aam-asterix">*</span></label>
47
+ <input type="text" class="form-control" id="new-capability-name" placeholder="<?php echo __('Enter Capability', AAM_KEY); ?>" />
48
+ </div>
49
+ </div>
50
+ <div class="modal-footer">
51
+ <button type="button" class="btn btn-success" id="add-capability-btn"><?php echo __('Add Capability', AAM_KEY); ?></button>
52
+ <button type="button" class="btn btn-default" data-dismiss="modal"><?php echo __('Close', AAM_KEY); ?></button>
53
+ </div>
54
+ </div>
55
+ </div>
56
+ </div>
57
+ </div>
Application/Backend/view/object/menu.phtml ADDED
@@ -0,0 +1,57 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <div class="aam-feature" id="admin_menu-content">
2
+ <div class="row">
3
+ <div class="col-xs-12">
4
+ <p class="aam-info">
5
+ <?php echo AAM_Backend_Helper::preparePhrase(__('Backend Menu feature does not restrict direct access to the page but rather filters it from the menu. In order to completely restrict access to the desired page, un-check the capability that is assigned to the menu [(the capability is shown right next to the menu title)].', AAM_KEY), 'small'); ?>
6
+ </p>
7
+ </div>
8
+ </div>
9
+ <div class="panel-group" id="admin-menu" role="tablist" aria-multiselectable="true">
10
+ <?php
11
+ $object = AAM_Backend_View::getSubject()->getObject('menu');
12
+ foreach ($this->getMenu() as $i => $menu) {
13
+ ?>
14
+ <div class="panel panel-default">
15
+ <div class="panel-heading" role="tab" id="menu-<?php echo $i; ?>-heading">
16
+ <h4 class="panel-title">
17
+ <a role="button" data-toggle="collapse" data-parent="#admin-menu" href="#menu-<?php echo $i; ?>" aria-controls="menu-<?php echo $i; ?>">
18
+ <?php echo $menu['name']; ?> <small class="aam-menu-capability"><?php echo $menu['capability']; ?></small>
19
+ </a>
20
+ <?php echo ($object->has($menu['id']) ? '<i class="aam-panel-title-icon icon-eye-off text-danger"></i>' : ''); ?>
21
+ </h4>
22
+ </div>
23
+
24
+ <div id="menu-<?php echo $i; ?>" class="panel-collapse collapse" role="tabpanel" aria-labelledby="menu-<?php echo $i; ?>-heading">
25
+ <div class="panel-body">
26
+ <?php if (!empty($menu['submenu'])) { ?>
27
+ <div class="row aam-bordered">
28
+ <?php echo ($object->has($menu['id']) ? '<div class="aam-lock"></div>' : ''); ?>
29
+ <?php foreach ($menu['submenu'] as $j => $submenu) { ?>
30
+ <div class="col-xs-12 col-md-6 aam-submenu-item">
31
+ <label for="menu-item-<?php echo $i . $j; ?>"><?php echo $submenu['name']; ?> <small class="aam-menu-capability"><?php echo $submenu['capability']; ?></small></label>
32
+ <input type="checkbox" class="aam-checkbox-danger" id="menu-item-<?php echo $i . $j; ?>" data-menu-id="<?php echo $submenu['id']; ?>"<?php echo ($object->has($submenu['id']) || $object->has($menu['id']) ? ' checked="checked"' : ''); ?> />
33
+ <label for="menu-item-<?php echo $i . $j; ?>"></label>
34
+ </div>
35
+ <?php } ?>
36
+ </div>
37
+ <?php } ?>
38
+
39
+ <div class="row<?php echo (!empty($menu['submenu']) ? ' aam-margin-top-xs' : ''); ?>">
40
+ <div class="col-xs-10 col-md-6 col-xs-offset-1 col-md-offset-3">
41
+ <?php if ($object->has($menu['id'])) { ?>
42
+ <a href="#" class="btn btn-primary btn-sm btn-block aam-restrict-menu" data-menu-id="<?php echo $menu['id']; ?>" data-target="#menu-<?php echo $i; ?>">
43
+ <i class="icon-eye"></i> <?php echo __('Show Menu', AAM_KEY); ?>
44
+ </a>
45
+ <?php } else { ?>
46
+ <a href="#" class="btn btn-danger btn-sm btn-block aam-restrict-menu" data-menu-id="<?php echo $menu['id']; ?>" data-target="#menu-<?php echo $i; ?>">
47
+ <i class="icon-eye-off"></i> <?php echo __('Hide Menu', AAM_KEY); ?>
48
+ </a>
49
+ <?php } ?>
50
+ </div>
51
+ </div>
52
+ </div>
53
+ </div>
54
+ </div>
55
+ <?php } ?>
56
+ </div>
57
+ </div>
Application/Backend/view/object/metabox.phtml ADDED
@@ -0,0 +1,58 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <div class="aam-feature" id="metabox-content">
2
+ <div class="aam-feature-top-actions text-right">
3
+ <a href="#" class="btn btn-xs btn-primary" id="refresh-metabox-list"><i class="icon-arrows-cw"></i> <?php echo __('Refresh', AAM_KEY); ?></a>
4
+ </div>
5
+
6
+ <?php $object = AAM_Backend_View::getSubject()->getObject('metabox'); ?>
7
+ <?php $metaboxList = $this->getMetaboxList(); ?>
8
+
9
+ <?php if (!empty($metaboxList)) { ?>
10
+ <div class="panel-group" id="metabox-list" role="tablist">
11
+ <?php foreach ($metaboxList as $screen => $metaboxes) { ?>
12
+ <div class="panel panel-default">
13
+ <div class="panel-heading" role="tab" id="group-<?php echo $screen; ?>-heading">
14
+ <h4 class="panel-title">
15
+ <a role="button" data-toggle="collapse" data-parent="#metabox-list" href="#group-<?php echo $screen; ?>" aria-controls="group-<?php echo $screen; ?>">
16
+ <?php
17
+ switch ($screen) {
18
+ case 'dashboard':
19
+ echo __('Dashboard Widgets', AAM_KEY);
20
+ break;
21
+
22
+ case 'widgets':
23
+ echo __('Frontend Widgets', AAM_KEY);
24
+ break;
25
+
26
+ default:
27
+ echo $wp_post_types[$screen]->labels->name;
28
+ break;
29
+ }
30
+ ?>
31
+ </a>
32
+ </h4>
33
+ </div>
34
+ <div id="group-<?php echo $screen; ?>" class="panel-collapse collapse" role="tabpanel" aria-labelledby="group-<?php echo $screen; ?>-heading">
35
+ <div class="panel-body">
36
+ <div class="row aam-bordered">
37
+ <?php
38
+ foreach ($metaboxes as $metabox) { ?>
39
+ <div class="col-xs-12 col-md-6 aam-submenu-item">
40
+ <label for="metabox-<?php echo $screen; ?>-<?php echo $metabox['id']; ?>"><?php echo $metabox['title']; ?></label>
41
+ <input type="checkbox" class="aam-checkbox-danger" id="metabox-<?php echo $screen; ?>-<?php echo $metabox['id']; ?>" data-metabox="<?php echo $screen; ?>|<?php echo $metabox['id']; ?>"<?php echo ($object->has($screen, $metabox['id']) ? ' checked="checked"' : ''); ?> />
42
+ <label for="metabox-<?php echo $screen; ?>-<?php echo $metabox['id']; ?>"></label>
43
+ </div>
44
+ <?php } ?>
45
+ </div>
46
+ </div>
47
+ </div>
48
+ </div>
49
+ <?php } ?>
50
+ </div>
51
+ <?php } else { ?>
52
+ <div class="row">
53
+ <div class="col-xs-12 text-center">
54
+ <p class="aam-notification-message"><?php echo __('The list of metaboxes and widgets is not initialized. Click Refresh button above.'); ?></p>
55
+ </div>
56
+ </div>
57
+ <?php } ?>
58
+ </div>
Application/Backend/view/object/post.phtml ADDED
@@ -0,0 +1,144 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <div class="aam-feature" id="post-content">
2
+ <?php if (!defined('AAM_PLUS_PACKAGE')) { ?>
3
+ <div class="row">
4
+ <div class="col-xs-12">
5
+ <p class="aam-info">
6
+ <?php echo AAM_Backend_Helper::preparePhrase('You are allowed to manage access up to 10 posts, pages or custom post types. Consider to purchase [AAM Plus Package] extension to unlock this limitation.', 'b'); ?>
7
+ </p>
8
+ </div>
9
+ </div>
10
+ <?php } ?>
11
+
12
+ <div class="aam-post-breadcrumb">
13
+ <a href="#" data-level="root"><i class="icon-home"></i> <?php echo __('Root', AAM_KEY); ?></a>
14
+ </div>
15
+
16
+ <div class="aam-post-manager-container">
17
+ <table id="post-list" class="table table-striped table-bordered">
18
+ <thead>
19
+ <tr>
20
+ <th>ID</th>
21
+ <th>Link</th>
22
+ <th width="5%">&nbsp;</th>
23
+ <th width="75%"><?php echo __('Title', AAM_KEY); ?></th>
24
+ <th><?php echo __('Actions', AAM_KEY); ?></th>
25
+ </tr>
26
+ </thead>
27
+ <tbody></tbody>
28
+ </table>
29
+
30
+ <div class="aam-post-manager" data-type="type">
31
+ <?php echo apply_filters('aam-post-type-ui-filter', AAM_Backend_View::getInstance()->loadPartial('post-type.phtml')); ?>
32
+ <a href="#" class="btn btn-xs btn-primary post-back">&Lt; <?php echo __('Go Back', AAM_KEY); ?></a>
33
+ </div>
34
+
35
+ <div class="aam-post-manager" data-type="term">
36
+ <?php echo apply_filters('aam-term-type-ui-filter', AAM_Backend_View::getInstance()->loadPartial('term-type.phtml')); ?>
37
+ <a href="#" class="btn btn-xs btn-primary post-back">&Lt; <?php echo __('Go Back', AAM_KEY); ?></a>
38
+ </div>
39
+
40
+ <div class="aam-post-manager" data-type="post">
41
+ <table class="table table-striped table-bordered">
42
+ <tbody>
43
+ <tr>
44
+ <td colspan="2" class="aam-table-group">
45
+ <i class="icon-doc-text-inv"></i> <strong><?php echo __('Frontend', AAM_KEY); ?></strong>
46
+ </td>
47
+ </tr>
48
+
49
+ <tr>
50
+ <td width="90%">
51
+ <strong class="aam-block"><?php echo __('List', AAM_KEY); ?></strong>
52
+ <p class="aam-hint">
53
+ <?php echo __('Filter (exclude) post from any list on your website frontend.', AAM_KEY); ?>
54
+ <span class="aam-highlight"><?php echo __('Warning!', AAM_KEY); ?></span>
55
+ <?php echo __('If checked, this property may slowdown your website with large amount of posts.', AAM_KEY); ?>
56
+ </p>
57
+ </td>
58
+ <td>
59
+ <div class="aam-row-actions">
60
+ <i class="aam-row-action text-muted icon-check-empty" data-property="frontend.list"></i>
61
+ </div>
62
+ </td>
63
+ </tr>
64
+ <tr>
65
+ <td>
66
+ <strong class="aam-block"><?php echo __('Read', AAM_KEY); ?></strong>
67
+ <p class="aam-hint">
68
+ <?php echo __('Restrict access to read a post. If "List" option is not checked, a post will be still listed on your website frontend.', AAM_KEY); ?>
69
+ </p>
70
+ </td>
71
+ <td>
72
+ <div class="aam-row-actions">
73
+ <i class="aam-row-action text-muted icon-check-empty" data-property="frontend.read"></i>
74
+ </div>
75
+ </td>
76
+ </tr>
77
+ <tr>
78
+ <td>
79
+ <strong class="aam-block"><?php echo __('Comment', AAM_KEY); ?></strong>
80
+ <p class="aam-hint">
81
+ <?php echo __('Restrict access to comment on a post (if commenting feature is activated).', AAM_KEY); ?>
82
+ </p>
83
+ </td>
84
+ <td>
85
+ <div class="aam-row-actions">
86
+ <i class="aam-row-action text-muted icon-check-empty" data-property="frontend.comment"></i>
87
+ </div>
88
+ </td>
89
+ </tr>
90
+
91
+ <tr class="aam-backend-post-access">
92
+ <td colspan="2" class="aam-table-group">
93
+ <i class="icon-doc-text-inv"></i> <strong><?php echo __('Backend', AAM_KEY); ?></strong>
94
+ </td>
95
+ </tr>
96
+
97
+ <tr class="aam-backend-post-access">
98
+ <td>
99
+ <strong class="aam-block"><?php echo __('List', AAM_KEY); ?></strong>
100
+ <p class="aam-hint">
101
+ <?php echo __('Filter (exclude) post from any list on your website backend.', AAM_KEY); ?>
102
+ <span class="aam-highlight"><?php echo __('Warning!', AAM_KEY); ?></span>
103
+ <?php echo __('If checked, this property may slowdown your backend with large amount of posts.', AAM_KEY); ?>
104
+ </p>
105
+ </td>
106
+ <td>
107
+ <div class="aam-row-actions">
108
+ <i class="aam-row-action text-muted icon-check-empty" data-property="backend.list"></i>
109
+ </div>
110
+ </td>
111
+ </tr>
112
+ <tr class="aam-backend-post-access">
113
+ <td>
114
+ <strong class="aam-block"><?php echo __('Edit', AAM_KEY); ?></strong>
115
+ <p class="aam-hint">
116
+ <?php echo __('Restrict access to edit a post (also the link "Edit" and "Quick Edit" will be removed below the post title).', AAM_KEY); ?>
117
+ </p>
118
+ </td>
119
+ <td>
120
+ <div class="aam-row-actions">
121
+ <i class="aam-row-action text-muted icon-check-empty" data-property="backend.edit"></i>
122
+ </div>
123
+ </td>
124
+ </tr>
125
+ <tr class="aam-backend-post-access">
126
+ <td>
127
+ <strong class="aam-block"><?php echo __('Delete', AAM_KEY); ?></strong>
128
+ <p class="aam-hint">
129
+ <?php echo __('Restrict access to trash or permanently delete a post (also the link "Trash" or "Delete Permanently" will be removed for a post).', AAM_KEY); ?>
130
+ </p>
131
+ </td>
132
+ <td>
133
+ <div class="aam-row-actions">
134
+ <i class="aam-row-action text-muted icon-check-empty" data-property="backend.delete"></i>
135
+ </div>
136
+ </td>
137
+ </tr>
138
+
139
+ </tbody>
140
+ </table>
141
+ <a href="#" class="btn btn-xs btn-primary post-back">&Lt; <?php echo __('Go Back', AAM_KEY); ?></a>
142
+ </div>
143
+ </div>
144
+ </div>
Application/Backend/view/partial/post-type.phtml ADDED
@@ -0,0 +1,7 @@
 
 
 
 
 
 
 
1
+ <div class="row">
2
+ <div class="col-xs-12">
3
+ <p class="aam-info">
4
+ <?php echo AAM_Backend_Helper::preparePhrase('Define the default access to your posts, pages, custom post types or categories. This feature is available only with [AAM Plus Package] extension. But you can still manage access to individual posts, pages or custom post types. Consider to purchase [AAM Plus Package] extension.', 'b', 'b'); ?>
5
+ </p>
6
+ </div>
7
+ </div>
Application/Backend/view/partial/term-type.phtml ADDED
@@ -0,0 +1,7 @@
 
 
 
 
 
 
 
1
+ <div class="row">
2
+ <div class="col-xs-12">
3
+ <p class="aam-info">
4
+ <?php echo AAM_Backend_Helper::preparePhrase('Managing default access to categories (terms) is available in [AAM Plus Package] only. But you can still manage access to individual posts, pages or custom post types. Consider to purchase [AAM Plus Package] extension.', 'b', 'b'); ?>
5
+ </p>
6
+ </div>
7
+ </div>
Application/Core/API.php ADDED
@@ -0,0 +1,187 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * ======================================================================
5
+ * LICENSE: This file is subject to the terms and conditions defined in *
6
+ * file 'license.txt', which is part of this source code package. *
7
+ * ======================================================================
8
+ */
9
+
10
+ /**
11
+ * AAM core API
12
+ *
13
+ * @package AAM
14
+ * @author Vasyl Martyniuk <vasyl@vasyltech.com>
15
+ */
16
+ final class AAM_Core_API {
17
+
18
+ /**
19
+ * Get current blog's option
20
+ *
21
+ * @param string $option
22
+ * @param mixed $default
23
+ * @param int $blog_id
24
+ *
25
+ * @return mixed
26
+ *
27
+ * @access public
28
+ * @static
29
+ */
30
+ public static function getOption($option, $default = FALSE, $blog_id = null) {
31
+ if (is_multisite()) {
32
+ $blog = (is_null($blog_id) ? get_current_blog_id() : $blog_id);
33
+ $response = get_blog_option($blog, $option, $default);
34
+ } else {
35
+ $response = get_option($option, $default);
36
+ }
37
+
38
+ return $response;
39
+ }
40
+
41
+ /**
42
+ * Update Blog Option
43
+ *
44
+ * @param string $option
45
+ * @param mixed $data
46
+ * @param int $blog_id
47
+ *
48
+ * @return bool
49
+ *
50
+ * @access public
51
+ * @static
52
+ */
53
+ public static function updateOption($option, $data, $blog_id = null) {
54
+ if (is_multisite()) {
55
+ $blog = (is_null($blog_id) ? get_current_blog_id() : $blog_id);
56
+ $response = update_blog_option($blog, $option, $data);
57
+ } else {
58
+ $response = update_option($option, $data);
59
+ }
60
+
61
+ return $response;
62
+ }
63
+
64
+ /**
65
+ * Delete Blog Option
66
+ *
67
+ * @param string $option
68
+ * @param int $blog_id
69
+ *
70
+ * @return bool
71
+ *
72
+ * @access public
73
+ * @static
74
+ */
75
+ public static function deleteOption($option, $blog_id = null) {
76
+ if (is_multisite()) {
77
+ $blog = (is_null($blog_id) ? get_current_blog_id() : $blog_id);
78
+ $response = delete_blog_option($blog, $option);
79
+ } else {
80
+ $response = delete_option($option);
81
+ }
82
+
83
+ return $response;
84
+ }
85
+
86
+ /**
87
+ * Initiate HTTP request
88
+ *
89
+ * @param string $url Requested URL
90
+ * @param bool $send_cookies Wheather send cookies or not
91
+ *
92
+ * @return WP_Error|array
93
+ *
94
+ * @access public
95
+ */
96
+ public static function cURL($url, $send_cookies = TRUE) {
97
+ $header = array('User-Agent' => AAM_Core_Request::server('HTTP_USER_AGENT'));
98
+
99
+ $cookies = AAM_Core_Request::cookie(null, array());
100
+ $requestCookies = array();
101
+ if (is_array($cookies) && $send_cookies) {
102
+ foreach ($cookies as $key => $value) {
103
+ //SKIP PHPSESSID - some servers don't like it for security reason
104
+ if ($key !== session_name()) {
105
+ $requestCookies[] = new WP_Http_Cookie(array(
106
+ 'name' => $key, 'value' => $value
107
+ ));
108
+ }
109
+ }
110
+ }
111
+
112
+ return wp_remote_request($url, array(
113
+ 'headers' => $header,
114
+ 'cookies' => $requestCookies,
115
+ 'timeout' => 5
116
+ ));
117
+ }
118
+
119
+ /**
120
+ * Get role list
121
+ *
122
+ * @global WP_Roles $wp_roles
123
+ *
124
+ * @return \WP_Roles
125
+ */
126
+ public static function getRoles() {
127
+ global $wp_roles;
128
+
129
+ if (function_exists('wp_roles')) {
130
+ $roles = wp_roles();
131
+ } elseif(isset($wp_roles)) {
132
+ $roles = $wp_roles;
133
+ } else {
134
+ $roles = $wp_roles = new WP_Roles();
135
+ }
136
+
137
+ return $roles;
138
+ }
139
+
140
+ /**
141
+ * Return max capability level
142
+ *
143
+ * @param array $caps
144
+ * @param int $default
145
+ *
146
+ * @return int
147
+ *
148
+ * @access public
149
+ */
150
+ public static function maxLevel($caps, $default = 0) {
151
+ $levels = array($default);
152
+
153
+ foreach($caps as $cap => $granted) {
154
+ if ($granted && preg_match('/^level_(10|[0-9])$/i', $cap, $match)) {
155
+ $levels[] = intval($match[1]);
156
+ }
157
+ }
158
+
159
+ return max($levels);
160
+ }
161
+
162
+ /**
163
+ * Reject the request
164
+ *
165
+ * Redirect or die the execution based on ConfigPress settings
166
+ *
167
+ * @return void
168
+ *
169
+ * @access public
170
+ */
171
+ public static function reject() {
172
+ $redirect = AAM_Core_ConfigPress::get('frontend.access.deny.redirect');
173
+
174
+ if (filter_var($redirect, FILTER_VALIDATE_URL)) {
175
+ wp_redirect($redirect);
176
+ } elseif (is_int($redirect)) {
177
+ wp_redirect(get_post_permalink($redirect));
178
+ } else {
179
+ $message = AAM_Core_ConfigPress::get(
180
+ 'frontend.access.deny.message', __('Access Denied', AAM_KEY)
181
+ );
182
+ wp_die($message);
183
+ }
184
+ exit;
185
+ }
186
+
187
+ }
application/core/configpress.php → Application/Core/ConfigPress.php RENAMED
@@ -8,33 +8,12 @@
8
  */
9
 
10
  /**
11
- * ConfigPress handler
12
  *
13
  * @package AAM
14
- * @author Vasyl Martyniuk <support@wpaam.com>
15
- * @copyright Copyright C 2013 Vasyl Martyniuk
16
- * @license GNU General Public License {@link http://www.gnu.org/licenses/}
17
  */
18
- final class aam_Core_ConfigPress {
19
-
20
- /**
21
- * Read ConfigPress File content
22
- *
23
- * @return string
24
- *
25
- * @access public
26
- * @static
27
- */
28
- public static function read() {
29
- $filename = aam_Core_API::getBlogOption('aam_configpress', '');
30
- if ($filename && file_exists(AAM_TEMP_DIR . $filename)) {
31
- $content = file_get_contents(AAM_TEMP_DIR . $filename);
32
- } else {
33
- $content = '';
34
- }
35
-
36
- return $content;
37
- }
38
 
39
  /**
40
  * Get ConfigPress parameter
@@ -47,7 +26,7 @@ final class aam_Core_ConfigPress {
47
  * @access public
48
  * @static
49
  */
50
- public static function getParam($param, $default = null) {
51
  if (class_exists('ConfigPress')) {
52
  $response = ConfigPress::get($param, $default);
53
  } else {
8
  */
9
 
10
  /**
11
+ * ConfigPress layer
12
  *
13
  * @package AAM
14
+ * @author Vasyl Martyniuk <vasyl@vasyltech.com>
 
 
15
  */
16
+ final class AAM_Core_ConfigPress {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
17
 
18
  /**
19
  * Get ConfigPress parameter
26
  * @access public
27
  * @static
28
  */
29
+ public static function get($param, $default = null) {
30
  if (class_exists('ConfigPress')) {
31
  $response = ConfigPress::get($param, $default);
32
  } else {
application/core/console.php → Application/Core/Console.php RENAMED
@@ -14,11 +14,9 @@
14
  * execution. The consol is used only when AAM interface was triggered in Admin side.
15
  *
16
  * @package AAM
17
- * @author Vasyl Martyniuk <support@wpaam.com>
18
- * @copyright Copyright C 2013 Vasyl Martyniuk
19
- * @license GNU General Public License {@link http://www.gnu.org/licenses/}
20
  */
21
- class aam_Core_Console {
22
 
23
  /**
24
  * List of Runtime errors related to AAM
@@ -67,5 +65,13 @@ class aam_Core_Console {
67
  public static function getWarnings() {
68
  return self::$_warnings;
69
  }
 
 
 
 
 
 
 
 
70
 
71
  }
14
  * execution. The consol is used only when AAM interface was triggered in Admin side.
15
  *
16
  * @package AAM
17
+ * @author Vasyl Martyniuk <vasyl@vasyltech.com>
 
 
18
  */
19
+ class AAM_Core_Console {
20
 
21
  /**
22
  * List of Runtime errors related to AAM
65
  public static function getWarnings() {
66
  return self::$_warnings;
67
  }
68
+
69
+ /**
70
+ *
71
+ * @return type
72
+ */
73
+ public static function count() {
74
+ return count(self::$_warnings);
75
+ }
76
 
77
  }
Application/Core/Object.php ADDED
@@ -0,0 +1,99 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
+ * Abstract object class
12
+ *
13
+ * @package AAM
14
+ * @author Vasyl Martyniuk <vasyl@vasyltech.com>
15
+ */
16
+ abstract class AAM_Core_Object {
17
+
18
+ /**
19
+ * Subject
20
+ *
21
+ * @var AAM_Core_Subject
22
+ *
23
+ * @access private
24
+ */
25
+ private $_subject = null;
26
+
27
+ /**
28
+ * Object options
29
+ *
30
+ * @var array
31
+ *
32
+ * @access private
33
+ */
34
+ private $_option = array();
35
+
36
+ /**
37
+ * Constructor
38
+ *
39
+ * @param AAM_Core_Subject $subject
40
+ *
41
+ * @return void
42
+ *
43
+ * @access public
44
+ */
45
+ public function __construct(AAM_Core_Subject $subject) {
46
+ $this->setSubject($subject);
47
+ }
48
+
49
+ /**
50
+ * Set current subject
51
+ *
52
+ * Either it is User or Role
53
+ *
54
+ * @param AAM_Core_Subject $subject
55
+ *
56
+ * @return void
57
+ *
58
+ * @access public
59
+ */
60
+ public function setSubject(AAM_Core_Subject $subject) {
61
+ $this->_subject = $subject;
62
+ }
63
+
64
+ /**
65
+ * Get Subject
66
+ *
67
+ * @return AAM_Core_Subject
68
+ *
69
+ * @access public
70
+ */
71
+ public function getSubject() {
72
+ return $this->_subject;
73
+ }
74
+
75
+ /**
76
+ * Set Object options
77
+ *
78
+ * @param mixed $option
79
+ *
80
+ * @return void
81
+ *
82
+ * @access public
83
+ */
84
+ public function setOption($option) {
85
+ $this->_option = (is_array($option) ? $option : array());
86
+ }
87
+
88
+ /**
89
+ * Get Object options
90
+ *
91
+ * @return mixed
92
+ *
93
+ * @access public
94
+ */
95
+ public function getOption() {
96
+ return $this->_option;
97
+ }
98
+
99
+ }
Application/Core/Object/Capability.php ADDED
@@ -0,0 +1,57 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
+ * Capability object
12
+ *
13
+ * @package AAM
14
+ * @author Vasyl Martyniuk <vasyl@vasyltech.com>
15
+ */
16
+ class AAM_Core_Object_Capability extends AAM_Core_Object {
17
+
18
+ /**
19
+ * Constructor
20
+ *
21
+ * @param AAM_Core_Subject $subject
22
+ *
23
+ * @return void
24
+ *
25
+ * @access public
26
+ */
27
+ public function __construct(AAM_Core_Subject $subject) {
28
+ parent::__construct($subject);
29
+
30
+ $this->setOption($this->getSubject()->getCapabilities());
31
+ }
32
+
33
+ /**
34
+ *
35
+ * @param type $capability
36
+ * @param type $granted
37
+ */
38
+ public function save($capability, $granted) {
39
+ if (intval($granted)) {
40
+ $result = $this->getSubject()->addCapability($capability);
41
+ } else {
42
+ $result = $this->getSubject()->removeCapability($capability);
43
+ }
44
+
45
+ return $result;
46
+ }
47
+
48
+ /**
49
+ *
50
+ * @param type $capability
51
+ * @return type
52
+ */
53
+ public function has($capability) {
54
+ return $this->getSubject()->hasCapability($capability);
55
+ }
56
+
57
+ }
Application/Core/Object/Menu.php ADDED
@@ -0,0 +1,117 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
+ * Menu object
12
+ *
13
+ * @package AAM
14
+ * @author Vasyl Martyniuk <vasyl@vasyltech.com>
15
+ */
16
+ class AAM_Core_Object_Menu extends AAM_Core_Object {
17
+
18
+ /**
19
+ * Constructor
20
+ *
21
+ * @param AAM_Core_Subject $subject
22
+ *
23
+ * @return void
24
+ *
25
+ * @access public
26
+ */
27
+ public function __construct(AAM_Core_Subject $subject) {
28
+ parent::__construct($subject);
29
+
30
+ $option = $this->getSubject()->readOption('menu');
31
+
32
+ if (empty($option)) {
33
+ $option = $this->getSubject()->inheritFromParent('menu');
34
+ }
35
+
36
+ $this->setOption($option);
37
+ }
38
+
39
+ /**
40
+ * Filter Menu List
41
+ *
42
+ * Keep in mind that this funciton only filter the menu items but do not
43
+ * restrict access to them. You have to explore roles and capabilities to
44
+ * control the full access to menus.
45
+ *
46
+ * @global array $menu
47
+ * @global array $submenu
48
+ *
49
+ * @return void
50
+ *
51
+ * @access public
52
+ */
53
+ public function filter() {
54
+ global $menu, $submenu;
55
+
56
+ foreach ($menu as $id => $item) {
57
+ if ($this->has('menu-' . $item[2])) {
58
+ unset($menu[$id]);
59
+ }
60
+
61
+ if (!empty($submenu[$item[2]])) {
62
+ $this->filterSubmenu($item[2]);
63
+ }
64
+ }
65
+ }
66
+
67
+ /**
68
+ * Filter submenu
69
+ *
70
+ * @param string $parent
71
+ *
72
+ * @return void
73
+ *
74
+ * @access protected
75
+ * @global array $menu
76
+ * @global array $submenu
77
+ */
78
+ protected function filterSubmenu($parent) {
79
+ global $submenu;
80
+
81
+ foreach ($submenu[$parent] as $id => $item) {
82
+ if ($this->has($item[2])) {
83
+ unset($submenu[$parent][$id]);
84
+ }
85
+ }
86
+ }
87
+
88
+ /**
89
+ * Check is menu defined
90
+ *
91
+ * Check if menu defined in options based on the id
92
+ *
93
+ * @param string $menu
94
+ *
95
+ * @return boolean
96
+ *
97
+ * @access public
98
+ */
99
+ public function has($menu) {
100
+ //decode URL in case of any special characters like &amp;
101
+ $decoded = htmlspecialchars_decode($menu);
102
+ $options = $this->getOption();
103
+
104
+ return !empty($options[$decoded]);
105
+ }
106
+
107
+ /**
108
+ * @inheritdoc
109
+ */
110
+ public function save($menu, $granted) {
111
+ $option = $this->getOption();
112
+ $option[$menu] = $granted;
113
+
114
+ return $this->getSubject()->updateOption($option, 'menu');
115
+ }
116
+
117
+ }
Application/Core/Object/Metabox.php ADDED
@@ -0,0 +1,148 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
+ * Metabox object
12
+ *
13
+ * @package AAM
14
+ * @author Vasyl Martyniuk <vasyl@vasyltech.com>
15
+ */
16
+ class AAM_Core_Object_Metabox extends AAM_Core_Object {
17
+
18
+ /**
19
+ * Constructor
20
+ *
21
+ * @param AAM_Core_Subject $subject
22
+ *
23
+ * @return void
24
+ *
25
+ * @access public
26
+ */
27
+ public function __construct(AAM_Core_Subject $subject) {
28
+ parent::__construct($subject);
29
+
30
+ $option = $this->getSubject()->readOption('metabox');
31
+
32
+ if (empty($option)) {
33
+ $option = $this->getSubject()->inheritFromParent('metabox');
34
+ }
35
+
36
+ $this->setOption($option);
37
+ }
38
+
39
+ /**
40
+ *
41
+ * @global type $wp_registered_widgets
42
+ * @param type $sidebar_widgets
43
+ * @return type
44
+ */
45
+ public function filterFrontend($sidebar_widgets) {
46
+ global $wp_registered_widgets;
47
+
48
+ if (is_array($wp_registered_widgets)) {
49
+ foreach ($wp_registered_widgets as $id => $widget) {
50
+ $callback = $this->getWidgetCallback($widget);
51
+ if ($this->has('widgets', $callback)) {
52
+ unregister_widget($callback);
53
+ //remove it from registered widget global var!!
54
+ //INFORM: Why Unregister Widget does not clear global var?
55
+ unset($wp_registered_widgets[$id]);
56
+ }
57
+ }
58
+ }
59
+
60
+ return $sidebar_widgets;
61
+ }
62
+
63
+ /**
64
+ *
65
+ * @param type $widget
66
+ * @return type
67
+ */
68
+ protected function getWidgetCallback($widget) {
69
+ if (is_object($widget['callback'][0])) {
70
+ $callback = get_class($widget['callback'][0]);
71
+ } elseif (is_string($widget['callback'][0])) {
72
+ $callback = $widget['callback'][0];
73
+ } else {
74
+ $callback = null;
75
+ }
76
+
77
+ return $callback;
78
+ }
79
+
80
+ /**
81
+ *
82
+ * @global type $wp_meta_boxes
83
+ * @param type $screen
84
+ */
85
+ public function filterBackend($screen) {
86
+ global $wp_meta_boxes;
87
+
88
+ if (is_array($wp_meta_boxes)) {
89
+ foreach ($wp_meta_boxes as $screen_id => $zones) {
90
+ if ($screen == $screen_id) {
91
+ $this->filterZones($zones, $screen_id);
92
+ }
93
+ }
94
+ }
95
+ }
96
+
97
+ /**
98
+ *
99
+ * @param type $zones
100
+ * @param type $screen_id
101
+ */
102
+ protected function filterZones($zones, $screen_id) {
103
+ foreach ($zones as $zone => $priorities) {
104
+ foreach ($priorities as $metaboxes) {
105
+ $this->filterMetaboxes($zone, $metaboxes, $screen_id);
106
+ }
107
+ }
108
+ }
109
+
110
+ /**
111
+ *
112
+ * @param type $zone
113
+ * @param type $metaboxes
114
+ * @param type $screen_id
115
+ */
116
+ protected function filterMetaboxes($zone, $metaboxes, $screen_id) {
117
+ foreach (array_keys($metaboxes) as $metabox) {
118
+ if ($this->has($screen_id, $metabox)) {
119
+ remove_meta_box($metabox, $screen_id, $zone);
120
+ }
121
+ }
122
+ }
123
+
124
+ /**
125
+ * @inheritdoc
126
+ */
127
+ public function save($metabox, $granted) {
128
+ $param = explode('|', $metabox);
129
+ $option = $this->getOption();
130
+
131
+ $option[$param[0]][$param[1]] = $granted;
132
+
133
+ return $this->getSubject()->updateOption($option, 'metabox');
134
+ }
135
+
136
+ /**
137
+ *
138
+ * @param type $screen
139
+ * @param type $metabox
140
+ * @return type
141
+ */
142
+ public function has($screen, $metabox) {
143
+ $options = $this->getOption();
144
+
145
+ return !empty($options[$screen][$metabox]);
146
+ }
147
+
148
+ }
Application/Core/Object/Post.php ADDED
@@ -0,0 +1,171 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
+ * Post object
12
+ *
13
+ * @package AAM
14
+ * @author Vasyl Martyniuk <vasyl@vasyltech.com>
15
+ */
16
+ class AAM_Core_Object_Post extends AAM_Core_Object {
17
+
18
+ /**
19
+ * Post object
20
+ *
21
+ * @var WP_Post
22
+ *
23
+ * @access private
24
+ */
25
+ private $_post;
26
+
27
+ /**
28
+ * Constructor
29
+ *
30
+ * @param AAM_Core_Subject $subject
31
+ * @param WP_Post|Int $post
32
+ *
33
+ * @return void
34
+ *
35
+ * @access public
36
+ */
37
+ public function __construct(AAM_Core_Subject $subject, $post) {
38
+ parent::__construct($subject);
39
+
40
+ //make sure that we are dealing with WP_Post object
41
+ if ($post instanceof WP_Post) {
42
+ $this->setPost($post);
43
+ } elseif (intval($post)) {
44
+ $this->setPost(get_post($post));
45
+ }
46
+
47
+ if ($this->getPost()) {
48
+ $this->read();
49
+ }
50
+ }
51
+
52
+ /**
53
+ * Read the Post AAM Metadata
54
+ *
55
+ * Get all settings related to specified post.
56
+ *
57
+ * @return void
58
+ *
59
+ * @access public
60
+ */
61
+ public function read() {
62
+ $subject = $this->getSubject();
63
+ $opname = $this->getOptionName();
64
+
65
+ //cache extension in place first
66
+ $option = apply_filters('aam-read-cache-filter', null, $opname, $subject);
67
+
68
+ if (empty($option)) { //no cache, than try to read it from DB
69
+ $option = get_post_meta($this->getPost()->ID, $opname, true);
70
+ }
71
+
72
+ //try to inherit from parent
73
+ if (empty($option)) {
74
+ $option = $subject->inheritFromParent('post', $this->getPost()->ID);
75
+ }
76
+
77
+ $this->setOption(apply_filters('aam-post-access-filter', $option, $this));
78
+
79
+ //trigger caching mechanism
80
+ do_action('aam-write-cache-action', $opname, $option, $subject);
81
+ }
82
+
83
+ /**
84
+ * Save options
85
+ *
86
+ * @return boolean
87
+ *
88
+ * @access public
89
+ */
90
+ public function save($property, $checked) {
91
+ $option = $this->getOption();
92
+
93
+ if ($checked) {
94
+ $option[$property] = $checked;
95
+ } elseif (isset($option[$property])) {
96
+ //this is important, because if you uncheck all options, AAM will try to
97
+ //inherit settings from the parent. This way there is no need to
98
+ //implement "Reset Settings" feature
99
+ unset($option[$property]); //remove it
100
+ }
101
+
102
+ //clear cache
103
+ do_action('aam-clear-cache-action', $this->getSubject());
104
+
105
+ return update_post_meta(
106
+ $this->getPost()->ID, $this->getOptionName(), $option
107
+ );
108
+ }
109
+
110
+ /**
111
+ * Set Post. Cover all unexpectd wierd issues with WP Core
112
+ *
113
+ * @param WP_Post $post
114
+ *
115
+ * @return void
116
+ *
117
+ * @access public
118
+ */
119
+ public function setPost($post) {
120
+ if ($post instanceof WP_Post) {
121
+ $this->_post = $post;
122
+ } else {
123
+ $this->_post = (object) array('ID' => 0);
124
+ }
125
+ }
126
+
127
+ /**
128
+ * Generate option name
129
+ *
130
+ * @return string
131
+ *
132
+ * @access protected
133
+ */
134
+ protected function getOptionName() {
135
+ $subject = $this->getSubject();
136
+
137
+ //prepare option name
138
+ $meta_key = 'aam-post-access-' . $subject->getUID();
139
+ $meta_key .= ($subject->getId() ? $subject->getId() : '');
140
+
141
+ return $meta_key;
142
+ }
143
+
144
+ /**
145
+ * Check if action is resricted
146
+ *
147
+ * @param string $area
148
+ * @param string $action
149
+ *
150
+ * @return boolean
151
+ *
152
+ * @access public
153
+ */
154
+ public function has($action) {
155
+ $option = $this->getOption();
156
+
157
+ return !empty($option[$action]);
158
+ }
159
+
160
+ /**
161
+ * Get Post
162
+ *
163
+ * @return WP_Post|stdClass
164
+ *
165
+ * @access public
166
+ */
167
+ public function getPost() {
168
+ return $this->_post;
169
+ }
170
+
171
+ }
Application/Core/Repository.php ADDED
@@ -0,0 +1,234 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * ======================================================================
5
+ * LICENSE: This file is subject to the terms and conditions defined in *
6
+ * file 'license.txt', which is part of this source code package. *
7
+ * ======================================================================
8
+ */
9
+
10
+ /**
11
+ * Extension Repository
12
+ *
13
+ * @package AAM
14
+ * @author Vasyl Martyniuk <vasyl@vasyltech.com>
15
+ */
16
+ class AAM_Core_Repository {
17
+
18
+ /**
19
+ * Extension status: installed
20
+ *
21
+ * Extension has been installed and is up to date
22
+ */
23
+ const STATUS_INSTALLED = 'installed';
24
+
25
+ /**
26
+ * Extension status: download
27
+ *
28
+ * Extension is not installed and either needs to be purchased or
29
+ * downloaded for free.
30
+ */
31
+ const STATUS_DOWNLOAD = 'download';
32
+
33
+ /**
34
+ * Extension status: update
35
+ *
36
+ * New version of the extension has been detected.
37
+ */
38
+ const STATUS_UPDATE = 'update';
39
+
40
+ /**
41
+ * Relative path to extension directory
42
+ */
43
+ const RELPATH = '/aam/extension';
44
+
45
+ /**
46
+ * Single instance of itself
47
+ *
48
+ * @var AAM_Core_Repository
49
+ *
50
+ * @access private
51
+ * @static
52
+ */
53
+ private static $_instance = null;
54
+
55
+ /**
56
+ * Consturctor
57
+ *
58
+ * @return void
59
+ *
60
+ * @access protected
61
+ */
62
+ protected function __construct() {}
63
+
64
+ /**
65
+ * Get single instance of itself
66
+ *
67
+ * @param AAM $parent
68
+ *
69
+ * @return AAM_Core_Repository
70
+ *
71
+ * @access public
72
+ * @static
73
+ */
74
+ public static function getInstance() {
75
+ if (is_null(self::$_instance)) {
76
+ self::$_instance = new self;
77
+ }
78
+
79
+ return self::$_instance;
80
+ }
81
+
82
+ /**
83
+ * Load active extensions
84
+ *
85
+ * @return void
86
+ *
87
+ * @access public
88
+ */
89
+ public function load() {
90
+ $basedir = WP_CONTENT_DIR . self::RELPATH;
91
+
92
+ if (file_exists($basedir)) {
93
+ //iterate through each active extension and load it
94
+ foreach (scandir($basedir) as $module) {
95
+ if (!in_array($module, array('.', '..'))) {
96
+ $this->bootstrapExtension($basedir . '/' . $module);
97
+ }
98
+ }
99
+ }
100
+ }
101
+
102
+ /**
103
+ * Bootstrap the Extension
104
+ *
105
+ * In case of any errors, the output can be found in console
106
+ *
107
+ * @param string $path
108
+ *
109
+ * @return void
110
+ * @access protected
111
+ */
112
+ protected function bootstrapExtension($path) {
113
+ $bootstrap = "{$path}/bootstrap.php";
114
+
115
+ if (file_exists($bootstrap)) { //bootstrap the extension
116
+ require($bootstrap);
117
+ }
118
+ }
119
+
120
+ /**
121
+ * Add new extension
122
+ *
123
+ * @param blob $content
124
+ *
125
+ * @return boolean|WP_Error
126
+ * @access public
127
+ * @global type $wp_filesystem
128
+ */
129
+ public function addExtension($content) {
130
+ $filepath = WP_CONTENT_DIR . self::RELPATH . '/' . uniqid('aam_');
131
+
132
+ $response = file_put_contents($filepath, $content);
133
+ if (!is_wp_error($response)) { //unzip the archive
134
+ WP_Filesystem(false, false, true); //init filesystem
135
+ $response = unzip_file($filepath, WP_CONTENT_DIR . self::RELPATH);
136
+ if (!is_wp_error($response)) {
137
+ $response = true;
138
+ }
139
+ @unlink($filepath); //remove the working archive
140
+ }
141
+
142
+ return $response;
143
+ }
144
+
145
+ /**
146
+ * Check extension status
147
+ *
148
+ * The list of extensions is comming from the external server. This list is
149
+ * updated daily by the registered cron-job.
150
+ * Each extension is following by next naming convension and stardard - the
151
+ * title of an extension contains only latin letters and spaces and name is
152
+ * no longer than 50 characters. As a standard, each extension defines the
153
+ * global contant that indicates an extension version. The name of the
154
+ * contants derives from the extension title by transforming all letters to
155
+ * upper case and replacing the white spaces with underscore "_"
156
+ * (e.g AAM Plus Package defines the contant AAM_PLUS_PACKAGE).
157
+ *
158
+ * @param string $title
159
+ *
160
+ * @return string
161
+ *
162
+ * @access public
163
+ */
164
+ public function extensionStatus($title) {
165
+ static $cache = null;
166
+
167
+ $status = self::STATUS_INSTALLED;
168
+ $const = str_replace(' ', '_', strtoupper($title));
169
+
170
+ if (is_null($cache)) {
171
+ $cache = $this->prepareExtensionCache();
172
+ }
173
+
174
+ if (!defined($const)) { //extension does not exist
175
+ $status = self::STATUS_DOWNLOAD;
176
+ } elseif (!empty($cache[$title])) {
177
+ $ver = constant($const);
178
+ //Check if there is a version mismatch. Also ignore if there is no
179
+ //license stored for this extension
180
+ if ($ver != $cache[$title]->version && !empty($cache[$title]->license)) {
181
+ $status = self::STATUS_UPDATE;
182
+ }
183
+ }
184
+
185
+ return $status;
186
+ }
187
+
188
+ /**
189
+ *
190
+ * @return type
191
+ */
192
+ protected function prepareExtensionCache() {
193
+ $list = AAM_Core_API::getOption('aam-extension-list', array());
194
+ $licenses = AAM_Core_API::getOption('aam-extension-license', array());
195
+
196
+ $cache = array();
197
+ foreach ($list as $row) {
198
+ $cache[$row->title] = $row;
199
+ if (isset($licenses[$row->title])) {
200
+ $cache[$row->title]->license = $licenses[$row->title];
201
+ }
202
+ }
203
+
204
+ return $cache;
205
+ }
206
+
207
+ /**
208
+ * Check extension directory
209
+ *
210
+ * @return boolean|sstring
211
+ *
212
+ * @access public
213
+ *
214
+ * @global type $wp_filesystem
215
+ */
216
+ public function checkDirectory() {
217
+ $error = false;
218
+
219
+ //create a directory if does not exist
220
+ $basedir = WP_CONTENT_DIR . self::RELPATH;
221
+ if (!file_exists($basedir)) {
222
+ if (!@mkdir($basedir, fileperms(ABSPATH) & 0777 | 0755, true)) {
223
+ $error = sprintf(__('Failed to create %s', AAM_KEY), $basedir);
224
+ }
225
+ } elseif (!is_writable($basedir)) {
226
+ $error = sprintf(
227
+ __('Directory %s is not writable', AAM_KEY), $basedir
228
+ );
229
+ }
230
+
231
+ return $error;
232
+ }
233
+
234
+ }
application/core/request.php → Application/Core/Request.php RENAMED
@@ -8,13 +8,12 @@
8
  */
9
 
10
  /**
11
- *
 
12
  * @package AAM
13
- * @author Vasyl Martyniuk <support@wpaam.com>
14
- * @copyright Copyright C 2013 Vasyl Martyniuk
15
- * @license GNU General Public License {@link http://www.gnu.org/licenses/}
16
  */
17
- class aam_Core_Request {
18
 
19
  /**
20
  * Get parameter from global _GET array
@@ -73,6 +72,21 @@ class aam_Core_Request {
73
  public static function server($param = null, $default = null) {
74
  return self::readArray($_SERVER, $param, $default);
75
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
76
 
77
  /**
78
  * Check array for specified parameter and return the it's value or
8
  */
9
 
10
  /**
11
+ * HTTP request layer
12
+ *
13
  * @package AAM
14
+ * @author Vasyl Martyniuk <vasyl@vasyltech.com>
 
 
15
  */
16
+ class AAM_Core_Request {
17
 
18
  /**
19
  * Get parameter from global _GET array
72
  public static function server($param = null, $default = null) {
73
  return self::readArray($_SERVER, $param, $default);
74
  }
75
+
76
+ /**
77
+ * Get parameter from global _COOKIE array
78
+ *
79
+ * @param string $param _COOKIE Parameter
80
+ * @param mixed $default Default value
81
+ *
82
+ * @return mixed
83
+ *
84
+ * @access public
85
+ * @static
86
+ */
87
+ public static function cookie($param = null, $default = null) {
88
+ return self::readArray($_COOKIE, $param, $default);
89
+ }
90
 
91
  /**
92
  * Check array for specified parameter and return the it's value or
Application/Core/Server.php ADDED
@@ -0,0 +1,99 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * ======================================================================
5
+ * LICENSE: This file is subject to the terms and conditions defined in *
6
+ * file 'license.txt', which is part of this source code package. *
7
+ * ======================================================================
8
+ */
9
+
10
+ /**
11
+ * AAM server
12
+ *
13
+ * Connection to the external AAM server.
14
+ *
15
+ * @package AAM
16
+ * @author Vasyl Martyniuk <vasyl@vasyltech.com>
17
+ */
18
+ final class AAM_Core_Server {
19
+
20
+ /**
21
+ * Server endpoint
22
+ */
23
+ const SERVER_URL = 'http://rest.vasyltech.com/v1';
24
+
25
+ /**
26
+ * Fetch the extension list
27
+ *
28
+ * Fetch the extension list with versions from the server
29
+ *
30
+ * @return array|WP_Error
31
+ *
32
+ * @access public
33
+ */
34
+ public static function check() {
35
+ $response = self::send(self::SERVER_URL . '/check');
36
+
37
+ if (!is_wp_error($response)) {
38
+ if ($response->error === true) {
39
+ $result = new WP_Error($response->code, $response->message);
40
+ } else {
41
+ $result = $response->products;
42
+ }
43
+ } else {
44
+ $result = $response;
45
+ }
46
+
47
+ return $result;
48
+ }
49
+
50
+ /**
51
+ * Download the extension
52
+ *
53
+ * @param string $license
54
+ *
55
+ * @return base64|WP_Error
56
+ *
57
+ * @access public
58
+ */
59
+ public static function download($license) {
60
+ $host = parse_url(site_url(), PHP_URL_HOST);
61
+
62
+ $url = self::SERVER_URL . '/download?license=' . urlencode($license);
63
+ $url .= '&domain=' . urlencode($host);
64
+
65
+ $response = self::send($url);
66
+
67
+ if (!is_wp_error($response)) {
68
+ if ($response->error === true) {
69
+ $result = new WP_Error($response->code, $response->message);
70
+ } else {
71
+ $result = $response;
72
+ }
73
+ } else {
74
+ $result = $response;
75
+ }
76
+
77
+ return $result;
78
+ }
79
+
80
+ /**
81
+ * Send request
82
+ *
83
+ * @param string $request
84
+ *
85
+ * @return stdClass|WP_Error
86
+ *
87
+ * @access protected
88
+ */
89
+ protected static function send($request) {
90
+ $response = AAM_Core_API::cURL($request, false);
91
+
92
+ if (!is_wp_error($response)) {
93
+ $response = json_decode($response['body']);
94
+ }
95
+
96
+ return $response;
97
+ }
98
+
99
+ }
Application/Core/Subject.php ADDED
@@ -0,0 +1,279 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
+ * Abstract subject
12
+ *
13
+ * @package AAM
14
+ * @author Vasyl Martyniuk <vasyl@vasyltech.com>
15
+ */
16
+ abstract class AAM_Core_Subject {
17
+
18
+ /**
19
+ * Subject ID
20
+ *
21
+ * Whether it is User ID or Role ID
22
+ *
23
+ * @var string|int
24
+ *
25
+ * @access private
26
+ */
27
+ private $_id;
28
+
29
+ /**
30
+ * WordPres Subject
31
+ *
32
+ * It can be WP_User or WP_Role, based on what class has been used
33
+ *
34
+ * @var WP_Role|WP_User
35
+ *
36
+ * @access private
37
+ */
38
+ private $_subject;
39
+
40
+ /**
41
+ * List of Objects to be access controled for current subject
42
+ *
43
+ * All access control objects like Admin Menu, Metaboxes, Posts etc
44
+ *
45
+ * @var array
46
+ *
47
+ * @access private
48
+ */
49
+ private $_objects = array();
50
+
51
+ /**
52
+ * Constructor
53
+ *
54
+ * @param string|int $id
55
+ *
56
+ * @return void
57
+ *
58
+ * @access public
59
+ */
60
+ public function __construct($id = '') {
61
+ //set subject
62
+ $this->setId($id);
63
+ //retrieve and set subject itself
64
+ $this->setSubject($this->retrieveSubject());
65
+ }
66
+
67
+ /**
68
+ * Trigger Subject native methods
69
+ *
70
+ * @param string $name
71
+ * @param array $args
72
+ *
73
+ * @return mixed
74
+ *
75
+ * @access public
76
+ */
77
+ public function __call($name, $args) {
78
+ $subject = $this->getSubject();
79
+
80
+ //make sure that method is callable
81
+ if (method_exists($subject, $name)) {
82
+ $response = call_user_func_array(array($subject, $name), $args);
83
+ } else {
84
+ $response = null;
85
+ }
86
+
87
+ return $response;
88
+ }
89
+
90
+ /**
91
+ * Get Subject's native properties
92
+ *
93
+ * @param string $name
94
+ *
95
+ * @return mixed
96
+ *
97
+ * @access public
98
+ */
99
+ public function __get($name) {
100
+ $subject = $this->getSubject();
101
+
102
+ return (!empty($subject->$name) ? $subject->$name : null);
103
+ }
104
+
105
+ /**
106
+ * Set Subject's native properties
107
+ *
108
+ * @param string $name
109
+ *
110
+ * @return mixed
111
+ *
112
+ * @access public
113
+ */
114
+ public function __set($name, $value) {
115
+ $subject = $this->getSubject();
116
+
117
+ if ($subject) {
118
+ $subject->$name = $value;
119
+ }
120
+ }
121
+
122
+ /**
123
+ * Set Subject ID
124
+ *
125
+ * @param string|int
126
+ *
127
+ * @return void
128
+ *
129
+ * @access public
130
+ */
131
+ public function setId($id) {
132
+ $this->_id = $id;
133
+ }
134
+
135
+ /**
136
+ * Get Subject ID
137
+ *
138
+ * @return string|int
139
+ *
140
+ * @access public
141
+ */
142
+ public function getId() {
143
+ return $this->_id;
144
+ }
145
+
146
+ /**
147
+ * Get Subject
148
+ *
149
+ * @return WP_Role|WP_User
150
+ *
151
+ * @access public
152
+ */
153
+ public function getSubject() {
154
+ return $this->_subject;
155
+ }
156
+
157
+ /**
158
+ * Set Subject
159
+ *
160
+ * @param WP_Role|WP_User $subject
161
+ *
162
+ * @return void
163
+ *
164
+ * @access public
165
+ */
166
+ public function setSubject($subject) {
167
+ $this->_subject = $subject;
168
+ }
169
+
170
+ /**
171
+ * Get Individual Object
172
+ *
173
+ * @param string $objectType
174
+ * @param mixed $id
175
+ *
176
+ * @return AAM_Core_Object
177
+ *
178
+ * @access public
179
+ */
180
+ public function getObject($objectType, $id = 'none') {
181
+ $object = null;
182
+
183
+ //make sure that object group is defined
184
+ if (!isset($this->_objects[$objectType])){
185
+ $this->_objects[$objectType] = array();
186
+ }
187
+
188
+ //check if there is an object with specified ID
189
+ if (!isset($this->_objects[$objectType][$id])) {
190
+ $classname = 'AAM_Core_Object_' . ucfirst($objectType);
191
+ if (class_exists($classname)) {
192
+ $object = new $classname($this, $id);
193
+ } else {
194
+ $object = apply_filters(
195
+ 'aam-object-filter', null, $objectType, $id, $this
196
+ );
197
+ }
198
+
199
+ if ($object instanceof AAM_Core_Object) {
200
+ $this->_objects[$objectType][$id] = $object;
201
+ }
202
+ } else {
203
+ $object = $this->_objects[$objectType][$id];
204
+ }
205
+
206
+ return $object;
207
+ }
208
+
209
+ /**
210
+ *
211
+ * @param type $capability
212
+ * @return type
213
+ */
214
+ public function hasCapability($capability) {
215
+ return $this->getSubject()->has_cap($capability);
216
+ }
217
+
218
+ /**
219
+ *
220
+ * @param type $param
221
+ * @param type $value
222
+ * @param type $object
223
+ * @param type $objectId
224
+ * @return type
225
+ */
226
+ public function save($param, $value, $object, $objectId = 0) {
227
+ return $this->getObject($object, $objectId)->save($param, $value);
228
+ }
229
+
230
+ /**
231
+ * Retrieve list of subject's capabilities
232
+ *
233
+ * @return array
234
+ *
235
+ * @access public
236
+ */
237
+ abstract public function getCapabilities();
238
+
239
+ /**
240
+ * Retrieve subject based on used class
241
+ *
242
+ * @return void
243
+ *
244
+ * @access protected
245
+ */
246
+ abstract protected function retrieveSubject();
247
+
248
+ /**
249
+ * Read object from parent subject
250
+ *
251
+ * @param string $object
252
+ * @param mixed $id
253
+ *
254
+ * @return mixed
255
+ *
256
+ * @access public
257
+ */
258
+ public function inheritFromParent($object, $id = ''){
259
+ if ($subject = $this->getParentSubject()){
260
+ $option = $subject->getObject($object, $id)->getOption();
261
+ } else {
262
+ $option = null;
263
+ }
264
+
265
+ return $option;
266
+ }
267
+
268
+ /**
269
+ * Retrive parent subject
270
+ *
271
+ * If there is no parent subject, return null
272
+ *
273
+ * @return AAM_Core_Subject|null
274
+ *
275
+ * @access public
276
+ */
277
+ abstract public function getParentSubject();
278
+
279
+ }
Application/Core/Subject/Role.php ADDED
@@ -0,0 +1,186 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
+ * Role subject
12
+ *
13
+ * @package AAM
14
+ * @author Vasyl Martyniuk <vasyl@vasyltech.com>
15
+ */
16
+ class AAM_Core_Subject_Role extends AAM_Core_Subject {
17
+
18
+ /**
19
+ * Subject UID: ROLE
20
+ */
21
+ const UID = 'role';
22
+
23
+ /**
24
+ * Retrieve Role based on ID
25
+ *
26
+ * @return WP_Role|null
27
+ *
28
+ * @access protected
29
+ */
30
+ protected function retrieveSubject() {
31
+ $roles = new WP_Roles;
32
+ $role = $roles->get_role($this->getId());
33
+
34
+ if (!is_null($role) && isset($role->capabilities)) {
35
+ //add role capability as role id, weird WordPress behavior
36
+ //example is administrator capability
37
+ $role->capabilities[$this->getId()] = true;
38
+ }
39
+
40
+ return $role;
41
+ }
42
+
43
+ /**
44
+ * Delete User Role
45
+ *
46
+ * @return boolean
47
+ *
48
+ * @access public
49
+ */
50
+ public function delete() {
51
+ $status = false;
52
+ $role = new WP_Roles;
53
+
54
+ if ($this->getId() !== 'administrator') {
55
+ $count = count_users();
56
+ $stats = $count['avail_roles'];
57
+
58
+ if (empty($stats[$this->getId()])) {
59
+ $role->remove_role($this->getId());
60
+ $status = true;
61
+ }
62
+ }
63
+
64
+ return $status;
65
+ }
66
+
67
+ /**
68
+ *
69
+ * @param type $name
70
+ * @return boolean
71
+ */
72
+ public function update($name) {
73
+ $role = new WP_Roles;
74
+ if ($name) {
75
+ $role->roles[$this->getId()]['name'] = $name;
76
+ $status = AAM_Core_API::updateOption($role->role_key, $role->roles);
77
+ } else {
78
+ $status = false;
79
+ }
80
+
81
+ return $status;
82
+ }
83
+
84
+ /**
85
+ * Remove Capability
86
+ *
87
+ * @param string $capability
88
+ *
89
+ * @return boolean
90
+ *
91
+ * @access public
92
+ */
93
+ public function removeCapability($capability) {
94
+ return $this->getSubject()->remove_cap($capability);
95
+ }
96
+
97
+ /**
98
+ * Check if Subject has capability
99
+ *
100
+ * Keep compatible with WordPress core
101
+ *
102
+ * @param string $capability
103
+ *
104
+ * @return boolean
105
+ *
106
+ * @access public
107
+ */
108
+ public function addCapability($capability) {
109
+ return $this->getSubject()->add_cap($capability, 1);
110
+ }
111
+
112
+ /**
113
+ *
114
+ * @return type
115
+ */
116
+ public function getCapabilities() {
117
+ return $this->getSubject()->capabilities;
118
+ }
119
+
120
+ /**
121
+ *
122
+ * @param type $value
123
+ * @param type $object
124
+ * @param type $object_id
125
+ * @return type
126
+ */
127
+ public function updateOption($value, $object, $object_id = 0) {
128
+ return AAM_Core_API::updateOption(
129
+ $this->getOptionName($object, $object_id), $value
130
+ );
131
+ }
132
+
133
+ /**
134
+ *
135
+ * @param type $object
136
+ * @param type $object_id
137
+ * @param type $default
138
+ * @return type
139
+ */
140
+ public function readOption($object, $object_id = 0, $default = null) {
141
+ return AAM_Core_API::getOption(
142
+ $this->getOptionName($object, $object_id), $default
143
+ );
144
+ }
145
+
146
+ /**
147
+ *
148
+ * @param type $object
149
+ * @param type $object_id
150
+ * @return type
151
+ */
152
+ public function deleteOption($object, $object_id = 0) {
153
+ return AAM_Core_API::deleteOption(
154
+ $this->getOptionName($object, $object_id)
155
+ );
156
+ }
157
+
158
+ /**
159
+ *
160
+ * @param type $object
161
+ * @param type $object_id
162
+ * @return string
163
+ */
164
+ public function getOptionName($object, $object_id) {
165
+ $name = "aam_{$object}" . ($object_id ? "_{$object_id}_" : '_');
166
+ $name .= self::UID . '_' . $this->getId();
167
+
168
+ return $name;
169
+ }
170
+
171
+ /**
172
+ *
173
+ * @return type
174
+ */
175
+ public function getUID() {
176
+ return self::UID;
177
+ }
178
+
179
+ /**
180
+ * @inheritdoc
181
+ */
182
+ public function getParentSubject() {
183
+ return null;
184
+ }
185
+
186
+ }
Application/Core/Subject/User.php ADDED
@@ -0,0 +1,248 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
+ * User subject
12
+ *
13
+ * @package AAM
14
+ * @author Vasyl Martyniuk <vasyl@vasyltech.com>
15
+ */
16
+ class AAM_Core_Subject_User extends AAM_Core_Subject {
17
+
18
+ /**
19
+ * Subject UID: USER
20
+ */
21
+ const UID = 'user';
22
+
23
+ /**
24
+ * AAM Capability Key
25
+ *
26
+ * It is very important to have all user capability changes be stored in
27
+ * seperate options from the wp_capabilities usermeta cause if AAM is not
28
+ * active as a plugin, it reverts back to the default WordPress settings
29
+ */
30
+ const AAM_CAPKEY = 'aam_capability';
31
+
32
+ /**
33
+ * Block User
34
+ *
35
+ * @return boolean
36
+ *
37
+ * @access public
38
+ * @global wpdb $wpdb
39
+ */
40
+ public function block() {
41
+ global $wpdb;
42
+
43
+ $response = false;
44
+ if (current_user_can('edit_users')) {
45
+ $status = ($this->getSubject()->user_status ? 0 : 1);
46
+ $result = $wpdb->update(
47
+ $wpdb->users,
48
+ array('user_status' => $status),
49
+ array('ID' => $this->getId())
50
+ );
51
+ if ($result) {
52
+ $this->getSubject()->user_status = $status;
53
+ clean_user_cache($this->getSubject());
54
+ $response = true;
55
+ }
56
+ }
57
+
58
+ return $response;
59
+ }
60
+
61
+ /**
62
+ * Retrieve User based on ID
63
+ *
64
+ * @return WP_Role
65
+ *
66
+ * @access protected
67
+ */
68
+ protected function retrieveSubject() {
69
+ global $current_user;
70
+
71
+ $user = $current_user;
72
+ if (is_a($user, 'WP_User') && ($user->ID == $this->getId())) {
73
+ $subject = $user;
74
+ } else {
75
+ $subject = new WP_User($this->getId());
76
+ }
77
+
78
+ //retrieve aam capabilities if are not retrieved yet
79
+ $caps = get_user_option(self::AAM_CAPKEY, $this->getId());
80
+ if (is_array($caps)) {
81
+ $caps = array_merge($subject->caps, $caps);
82
+ $allcaps = array_merge($subject->allcaps, $caps);
83
+
84
+ //reset the user capabilities
85
+ $subject->allcaps = $allcaps;
86
+ $subject->caps = $caps;
87
+ }
88
+
89
+ return $subject;
90
+ }
91
+
92
+ /**
93
+ * Get user capabilities
94
+ *
95
+ * @return array
96
+ *
97
+ * @access public
98
+ */
99
+ public function getCapabilities() {
100
+ return $this->getSubject()->allcaps;
101
+ }
102
+
103
+ /**
104
+ * Check if user has a capability
105
+ *
106
+ * @param string $capability
107
+ *
108
+ * @return boolean
109
+ *
110
+ * @access public
111
+ */
112
+ public function hasCapability($capability) {
113
+ return user_can($this->getSubject(), $capability);
114
+ }
115
+
116
+ /**
117
+ * Add capability
118
+ *
119
+ * @param string $capability
120
+ *
121
+ * @return boolean
122
+ *
123
+ * @access public
124
+ */
125
+ public function addCapability($capability) {
126
+ //check if user is capable to have this capability
127
+ $map = call_user_func_array(
128
+ 'map_meta_cap', array($capability, $this->getSubject()->ID)
129
+ );
130
+ if (!in_array('do_not_allow', $map)) {
131
+ $response = $this->updateCapability($capability, true);
132
+ } else {
133
+ $response = false;
134
+ }
135
+
136
+ return $response;
137
+ }
138
+
139
+ /**
140
+ * Remove Capability
141
+ *
142
+ * @param string $capability
143
+ *
144
+ * @return boolean
145
+ *
146
+ * @access public
147
+ */
148
+ public function removeCapability($capability) {
149
+ return $this->updateCapability($capability, false);
150
+ }
151
+
152
+ /**
153
+ * Update User's Capability Set
154
+ *
155
+ * @param string $capability
156
+ * @param boolean $grand
157
+ *
158
+ * @return boolean
159
+ *
160
+ * @access public
161
+ */
162
+ public function updateCapability($capability, $grand) {
163
+ //update capability
164
+ $caps = $this->getSubject()->caps;
165
+ $caps[$capability] = $grand;
166
+
167
+ //save and return the result of operation
168
+ return update_user_option($this->getId(), self::AAM_CAPKEY, $caps);
169
+ }
170
+
171
+ /**
172
+ * Update user's option
173
+ *
174
+ * @param mixed $value
175
+ * @param string $object
176
+ * @param string $id
177
+ *
178
+ * @return boolean
179
+ *
180
+ * @access public
181
+ */
182
+ public function updateOption($value, $object, $id = 0) {
183
+ return update_user_option(
184
+ $this->getId(), $this->getOptionName($object, $id), $value
185
+ );
186
+ }
187
+
188
+ /**
189
+ * Read user's option
190
+ *
191
+ * @param string $object
192
+ * @param string $id
193
+ *
194
+ * @return mixed
195
+ *
196
+ * @access public
197
+ */
198
+ public function readOption($object, $id = '') {
199
+ return get_user_option(
200
+ $this->getOptionName($object, $id), $this->getId()
201
+ );
202
+ }
203
+
204
+ /**
205
+ * @inheritdoc
206
+ */
207
+ public function getParentSubject() {
208
+ //try to get this option from the User's Role
209
+ $roles = $this->getSubject()->roles;
210
+ //first user role is counted only. AAM does not support multi-roles
211
+ $subject_role = array_shift($roles);
212
+
213
+ if ($subject_role) {
214
+ //in case of multisite & current user does not belong to the site
215
+ $role = new AAM_Core_Subject_Role($subject_role);
216
+ } else {
217
+ $role = null;
218
+ }
219
+
220
+ return $role;
221
+ }
222
+
223
+ /**
224
+ * Prepare option's name
225
+ *
226
+ * @param string $object
227
+ * @param string|int $id
228
+ *
229
+ * @return string
230
+ *
231
+ * @access public
232
+ */
233
+ public function getOptionName($object, $id) {
234
+ return "aam_{$object}" . ($id ? "_{$id}" : '');
235
+ }
236
+
237
+ /**
238
+ * Get Subject UID
239
+ *
240
+ * @return string
241
+ *
242
+ * @access public
243
+ */
244
+ public function getUID() {
245
+ return self::UID;
246
+ }
247
+
248
+ }
Application/Core/Subject/Visitor.php ADDED
@@ -0,0 +1,104 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
+ * Visitor subject
12
+ *
13
+ * @package AAM
14
+ * @author Vasyl Martyniuk <vasyl@vasyltech.com>
15
+ */
16
+ class AAM_Core_Subject_Visitor extends AAM_Core_Subject {
17
+
18
+ /**
19
+ * Subject UID: VISITOR
20
+ */
21
+ const UID = 'visitor';
22
+
23
+ /**
24
+ * Retrieve Visitor Subject
25
+ *
26
+ * @return stdClass
27
+ *
28
+ * @access protected
29
+ */
30
+ protected function retrieveSubject() {
31
+ return new stdClass;
32
+ }
33
+
34
+ /**
35
+ *
36
+ * @return type
37
+ */
38
+ public function getCapabilities() {
39
+ return array();
40
+ }
41
+
42
+ /**
43
+ *
44
+ * @param type $value
45
+ * @param type $object
46
+ * @param type $id
47
+ * @return type
48
+ */
49
+ public function updateOption($value, $object, $id = 0) {
50
+ return AAM_Core_API::updateOption(
51
+ $this->getOptionName($object, $id), $value
52
+ );
53
+ }
54
+
55
+ /**
56
+ *
57
+ * @param type $object
58
+ * @param type $id
59
+ * @return type
60
+ */
61
+ public function readOption($object, $id = 0) {
62
+ return AAM_Core_API::getOption(
63
+ $this->getOptionName($object, $id)
64
+ );
65
+ }
66
+
67
+ /**
68
+ *
69
+ * @param type $object
70
+ * @param type $id
71
+ * @return type
72
+ */
73
+ public function deleteOption($object, $id = 0) {
74
+ return AAM_Core_API::deleteOption(
75
+ $this->getOptionName($object, $id)
76
+ );
77
+ }
78
+
79
+ /**
80
+ *
81
+ * @param type $object
82
+ * @param type $id
83
+ * @return type
84
+ */
85
+ public function getOptionName($object, $id) {
86
+ return 'aam_' . self::UID . "_{$object}" . ($id ? "_{$id}" : '');
87
+ }
88
+
89
+ /**
90
+ *
91
+ * @return type
92
+ */
93
+ public function getUID() {
94
+ return self::UID;
95
+ }
96
+
97
+ /**
98
+ * @inheritdoc
99
+ */
100
+ public function getParentSubject() {
101
+ return null;
102
+ }
103
+
104
+ }
Application/Frontend/Manager.php ADDED
@@ -0,0 +1,215 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * ======================================================================
5
+ * LICENSE: This file is subject to the terms and conditions defined in *
6
+ * file 'license.txt', which is part of this source code package. *
7
+ * ======================================================================
8
+ */
9
+
10
+ /**
11
+ * AAM frontend manager
12
+ *
13
+ * @package AAM
14
+ * @author Vasyl Martyniuk <vasyl@vasyltech.com>
15
+ */
16
+ class AAM_Frontend_Manager {
17
+
18
+ /**
19
+ * Instance of itself
20
+ *
21
+ * @var AAM_Frontend_Manager
22
+ *
23
+ * @access private
24
+ */
25
+ private static $_instance = null;
26
+
27
+ /**
28
+ * Construct the manager
29
+ *
30
+ * @return void
31
+ *
32
+ * @access public
33
+ */
34
+ public function __construct() {
35
+ //control WordPress frontend
36
+ add_action('wp', array($this, 'wp'), 999);
37
+ //filter navigation pages & taxonomies
38
+ add_filter('get_pages', array($this, 'getPages'));
39
+ add_filter('wp_get_nav_menu_items', array($this, 'getNavigationMenu'));
40
+ //widget filters
41
+ add_filter('sidebars_widgets', array($this, 'widgetFilter'), 999);
42
+ //get control over commenting stuff
43
+ add_filter('comments_open', array($this, 'commentOpen'), 10, 2);
44
+ //user login control
45
+ add_filter('wp_authenticate_user', array($this, 'authenticate'), 1, 2);
46
+ //add post filter for LIST restriction
47
+ add_filter('the_posts', array($this, 'thePosts'), 999, 2);
48
+ }
49
+
50
+ /**
51
+ * Main Frontend access control hook
52
+ *
53
+ * @return void
54
+ *
55
+ * @access public
56
+ * @global WP_Query $wp_query
57
+ * @global WP_Post $post
58
+ */
59
+ public function wp() {
60
+ global $wp_query, $post;
61
+
62
+ $user = AAM::getUser();
63
+ if (!$wp_query->is_home() && ($post instanceof WP_Post)) {
64
+ if ($user->getObject('post', $post->ID)->has('frontend.read')) {
65
+ AAM_Core_API::reject();
66
+ }
67
+ }
68
+ }
69
+
70
+ /**
71
+ * Filter Pages that should be excluded in frontend
72
+ *
73
+ * @param array $pages
74
+ *
75
+ * @return array
76
+ *
77
+ * @access public
78
+ */
79
+ public function getPages($pages) {
80
+ if (is_array($pages)) {
81
+ foreach ($pages as $i => $page) {
82
+ $object = AAM::getUser()->getObject('post', $page->ID);
83
+ if ($object->has('frontend.list')) {
84
+ unset($pages[$i]);
85
+ }
86
+ }
87
+ }
88
+
89
+ return $pages;
90
+ }
91
+
92
+ /**
93
+ * Filter Navigation menu
94
+ *
95
+ * @param array $pages
96
+ *
97
+ * @return array
98
+ *
99
+ * @access public
100
+ */
101
+ public function getNavigationMenu($pages) {
102
+ if (is_array($pages)) {
103
+ $user = AAM::getUser();
104
+ foreach ($pages as $i => $page) {
105
+ $filter = false;
106
+
107
+ if ($page->type == 'post_type') {
108
+ $filter = $user->getObject('post', $page->object_id)->has(
109
+ 'frontend.list'
110
+ );
111
+ }
112
+
113
+ if ($filter) {
114
+ unset($pages[$i]);
115
+ }
116
+ }
117
+ }
118
+
119
+ return $pages;
120
+ }
121
+
122
+ /**
123
+ * Filter Frontend widgets
124
+ *
125
+ * @param array $widgets
126
+ *
127
+ * @return array
128
+ *
129
+ * @access public
130
+ */
131
+ public function widgetFilter($widgets) {
132
+ return AAM::getUser()->getObject('metabox')->filterFrontend($widgets);
133
+ }
134
+
135
+ /**
136
+ * Control Frontend commenting freature
137
+ *
138
+ * @param boolean $open
139
+ * @param int $post_id
140
+ *
141
+ * @return boolean
142
+ *
143
+ * @access public
144
+ */
145
+ public function commentOpen($open, $post_id) {
146
+ $object = AAM::getUser()->getObject('post', $post_id);
147
+
148
+ if ($object->has('frontend.comment')) {
149
+ $open = false;
150
+ }
151
+
152
+ return $open;
153
+ }
154
+
155
+ /**
156
+ * Control User Block flag
157
+ *
158
+ * @param WP_Error $user
159
+ *
160
+ * @return WP_Error|WP_User
161
+ *
162
+ * @access public
163
+ */
164
+ public function authenticate($user) {
165
+ if ($user->user_status == 1) {
166
+ $user = new WP_Error();
167
+
168
+ $message = '[ERROR]: User is locked. Please contact your website ';
169
+ $message .= 'administrator.';
170
+
171
+ $user->add(
172
+ 'authentication_failed',
173
+ AAM_Backend_Helper::preparePhrase($message, 'strong')
174
+ );
175
+ }
176
+
177
+ return $user;
178
+ }
179
+
180
+ /**
181
+ * Filter posts from the list
182
+ *
183
+ * @param array $posts
184
+ *
185
+ * @return array
186
+ *
187
+ * @access public
188
+ */
189
+ public function thePosts($posts) {
190
+ $filtered = array();
191
+
192
+ foreach ($posts as $post) {
193
+ $object = AAM::getUser()->getObject('post', $post->ID);
194
+ if (!$object->has('frontend.list')) {
195
+ $filtered[] = $post;
196
+ }
197
+ }
198
+
199
+ return $filtered;
200
+ }
201
+
202
+ /**
203
+ * Bootstrap the manager
204
+ *
205
+ * @return void
206
+ *
207
+ * @access public
208
+ */
209
+ public static function bootstrap() {
210
+ if (is_null(self::$_instance)) {
211
+ self::$_instance = new self;
212
+ }
213
+ }
214
+
215
+ }
Lang/advanced-access-manager.pot ADDED
@@ -0,0 +1,828 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #, fuzzy
2
+ msgid ""
3
+ msgstr ""
4
+ "Project-Id-Version: AAM\n"
5
+ "POT-Creation-Date: 2015-11-22 10:19-0500\n"
6
+ "PO-Revision-Date: \n"
7
+ "Last-Translator: WPAAM <support@wpaam.com>\n"
8
+ "Language-Team: WP AAM <vasyl@vasyltech.com>\n"
9
+ "Language: en\n"
10
+ "MIME-Version: 1.0\n"
11
+ "Content-Type: text/plain; charset=UTF-8\n"
12
+ "Content-Transfer-Encoding: 8bit\n"
13
+ "X-Generator: Poedit 1.8.6\n"
14
+ "Plural-Forms: nplurals=2; plural=(n != 1);\n"
15
+ "X-Poedit-SourceCharset: UTF-8\n"
16
+ "X-Poedit-KeywordsList: __\n"
17
+ "X-Poedit-Basepath: ..\n"
18
+ "X-Poedit-SearchPath-0: .\n"
19
+
20
+ #: media/js/aam-ui.js:43 media/js/aam-ui.js:1220
21
+ #: Application/Backend/Localization.php:23
22
+ msgid "Loading..."
23
+ msgstr ""
24
+
25
+ #: media/js/aam-ui.js:48 Application/Backend/Localization.php:24
26
+ #: Application/Backend/view/index.phtml:121
27
+ msgid "Select Role"
28
+ msgstr ""
29
+
30
+ #: media/js/aam-ui.js:81 Application/Backend/Localization.php:25
31
+ msgid "Search Role"
32
+ msgstr ""
33
+
34
+ #: media/js/aam-ui.js:82 Application/Backend/Localization.php:26
35
+ msgid "_TOTAL_ role(s)"
36
+ msgstr ""
37
+
38
+ #: media/js/aam-ui.js:89 media/js/aam-ui.js:431
39
+ #: Application/Backend/Localization.php:27
40
+ #: Application/Backend/view/object/capability.phtml:22
41
+ msgid "Create"
42
+ msgstr ""
43
+
44
+ #: media/js/aam-ui.js:114 Application/Backend/Localization.php:28
45
+ #: Application/Backend/view/index.phtml:87
46
+ msgid "Users"
47
+ msgstr ""
48
+
49
+ #: media/js/aam-ui.js:211 media/js/aam-ui.js:255 media/js/aam-ui.js:891
50
+ #: Application/Backend/Localization.php:13
51
+ msgid "Saving..."
52
+ msgstr ""
53
+
54
+ #: media/js/aam-ui.js:219 Application/Backend/Localization.php:29
55
+ msgid "Failed to add new role"
56
+ msgstr ""
57
+
58
+ #: media/js/aam-ui.js:224 media/js/aam-ui.js:267 media/js/aam-ui.js:304
59
+ #: media/js/aam-ui.js:396 media/js/aam-ui.js:687 media/js/aam-ui.js:724
60
+ #: media/js/aam-ui.js:904 media/js/aam-ui.js:1051 media/js/aam-ui.js:1092
61
+ #: media/js/aam-ui.js:1325 media/js/aam.js:220
62
+ #: Application/Backend/Localization.php:15
63
+ msgid "Application error"
64
+ msgstr ""
65
+
66
+ #: media/js/aam-ui.js:227 Application/Backend/Localization.php:30
67
+ #: Application/Backend/view/index.phtml:126
68
+ msgid "Add Role"
69
+ msgstr ""
70
+
71
+ #: media/js/aam-ui.js:262 Application/Backend/Localization.php:31
72
+ msgid "Failed to update role"
73
+ msgstr ""
74
+
75
+ #: media/js/aam-ui.js:271 Application/Backend/Localization.php:32
76
+ #: Application/Backend/view/extension.phtml:41
77
+ #: Application/Backend/view/extension.phtml:59
78
+ #: Application/Backend/view/extension.phtml:77
79
+ #: Application/Backend/view/extension.phtml:95
80
+ msgid "Update"
81
+ msgstr ""
82
+
83
+ #: media/js/aam-ui.js:294 Application/Backend/Localization.php:33
84
+ msgid "Deleting..."
85
+ msgstr ""
86
+
87
+ #: media/js/aam-ui.js:300 Application/Backend/Localization.php:34
88
+ msgid "Failed to delete role"
89
+ msgstr ""
90
+
91
+ #: media/js/aam-ui.js:308 Application/Backend/Localization.php:35
92
+ #: Application/Backend/view/index.phtml:159
93
+ #: Application/Backend/view/index.phtml:165
94
+ msgid "Delete Role"
95
+ msgstr ""
96
+
97
+ #: media/js/aam-ui.js:391 Application/Backend/Localization.php:36
98
+ msgid "Failed to block user"
99
+ msgstr ""
100
+
101
+ #: media/js/aam-ui.js:423 Application/Backend/Localization.php:37
102
+ msgid "Search User"
103
+ msgstr ""
104
+
105
+ #: media/js/aam-ui.js:424 Application/Backend/Localization.php:38
106
+ msgid "_TOTAL_ user(s)"
107
+ msgstr ""
108
+
109
+ #: media/js/aam-ui.js:448 Application/Backend/Localization.php:39
110
+ #: Application/Backend/view/index.phtml:99
111
+ msgid "Role"
112
+ msgstr ""
113
+
114
+ #: media/js/aam-ui.js:569 Application/Backend/Localization.php:40
115
+ msgid "Anonymous"
116
+ msgstr ""
117
+
118
+ #: media/js/aam-ui.js:618 Application/Backend/Localization.php:17
119
+ #: Application/Backend/view/object/menu.phtml:43
120
+ msgid "Show Menu"
121
+ msgstr ""
122
+
123
+ #: media/js/aam-ui.js:633 Application/Backend/Localization.php:18
124
+ #: Application/Backend/view/object/menu.phtml:47
125
+ msgid "Hide Menu"
126
+ msgstr ""
127
+
128
+ #: media/js/aam-ui.js:719 Application/Backend/Localization.php:19
129
+ msgid "Failed to retrieve mataboxes"
130
+ msgstr ""
131
+
132
+ #: media/js/aam-ui.js:779 Application/Backend/Localization.php:44
133
+ msgid "Failed to grand capability - WordPress policy"
134
+ msgstr ""
135
+
136
+ #: media/js/aam-ui.js:814 Application/Backend/Localization.php:11
137
+ msgid "Search Capability"
138
+ msgstr ""
139
+
140
+ #: media/js/aam-ui.js:815 Application/Backend/Localization.php:12
141
+ msgid "_TOTAL_ capability(s)"
142
+ msgstr ""
143
+
144
+ #: media/js/aam-ui.js:899 Application/Backend/Localization.php:14
145
+ msgid "Failed to add new capability"
146
+ msgstr ""
147
+
148
+ #: media/js/aam-ui.js:907 Application/Backend/Localization.php:16
149
+ #: Application/Backend/view/object/capability.phtml:51
150
+ msgid "Add Capability"
151
+ msgstr ""
152
+
153
+ #: media/js/aam-ui.js:1132 Application/Backend/Localization.php:20
154
+ msgid "Search"
155
+ msgstr ""
156
+
157
+ #: media/js/aam-ui.js:1133 Application/Backend/Localization.php:21
158
+ msgid "_TOTAL_ object(s)"
159
+ msgstr ""
160
+
161
+ #: media/js/aam-ui.js:1209 Application/Backend/Localization.php:22
162
+ msgid "Failed"
163
+ msgstr ""
164
+
165
+ #: media/js/aam.js:128 Application/Backend/Localization.php:43
166
+ msgid ""
167
+ "Javascript error detected during the page load. AAM may not function "
168
+ "properly."
169
+ msgstr ""
170
+
171
+ #: media/js/aam.js:159
172
+ msgid "Current "
173
+ msgstr ""
174
+
175
+ #: Application/Backend/Capability.php:126
176
+ #: Application/Backend/Capability.php:165
177
+ msgid "System"
178
+ msgstr ""
179
+
180
+ #: Application/Backend/Capability.php:127
181
+ #: Application/Backend/Capability.php:167 Application/Backend/Post.php:318
182
+ msgid "Posts & Pages"
183
+ msgstr ""
184
+
185
+ #: Application/Backend/Capability.php:128
186
+ #: Application/Backend/Capability.php:169
187
+ msgid "Backend Interface"
188
+ msgstr ""
189
+
190
+ #: Application/Backend/Capability.php:129
191
+ #: Application/Backend/Capability.php:171
192
+ msgid "Miscellaneous"
193
+ msgstr ""
194
+
195
+ #: Application/Backend/Capability.php:190
196
+ #: Application/Backend/view/index.phtml:55
197
+ msgid "Capabilities"
198
+ msgstr ""
199
+
200
+ #: Application/Backend/Extension.php:88
201
+ msgid "License key is missing."
202
+ msgstr ""
203
+
204
+ #: Application/Backend/Extension.php:149
205
+ #: Application/Backend/view/index.phtml:65
206
+ msgid "Extensions"
207
+ msgstr ""
208
+
209
+ #: Application/Backend/Filter.php:196 Application/Core/API.php:180
210
+ msgid "Access Denied"
211
+ msgstr ""
212
+
213
+ #: Application/Backend/Localization.php:41
214
+ msgid "Current user"
215
+ msgstr ""
216
+
217
+ #: Application/Backend/Localization.php:42
218
+ msgid "Current role"
219
+ msgstr ""
220
+
221
+ #: Application/Backend/Manager.php:89
222
+ #, php-format
223
+ msgid "Extension %s has new update available for download."
224
+ msgstr ""
225
+
226
+ #: Application/Backend/Manager.php:128
227
+ msgid "Manage Access"
228
+ msgstr ""
229
+
230
+ #: Application/Backend/Manager.php:243 Application/Backend/Manager.php:244
231
+ msgid "AAM"
232
+ msgstr ""
233
+
234
+ #: Application/Backend/Menu.php:161 Application/Backend/view/index.phtml:45
235
+ msgid "Backend Menu"
236
+ msgstr ""
237
+
238
+ #: Application/Backend/Metabox.php:195
239
+ msgid "Metaboxes & Widgets"
240
+ msgstr ""
241
+
242
+ #: Application/Backend/Post.php:72
243
+ msgid "Base Level"
244
+ msgstr ""
245
+
246
+ #: Application/Backend/Post.php:276
247
+ msgid "You reached your limitation."
248
+ msgstr ""
249
+
250
+ #: Application/Core/Repository.php:223
251
+ #, php-format
252
+ msgid "Failed to create %s"
253
+ msgstr ""
254
+
255
+ #: Application/Core/Repository.php:227
256
+ #, php-format
257
+ msgid "Directory %s is not writable"
258
+ msgstr ""
259
+
260
+ #: aam.php:149
261
+ msgid "PHP 5.2 or higher is required."
262
+ msgstr ""
263
+
264
+ #: aam.php:151
265
+ msgid "WP 3.8 or higher is required."
266
+ msgstr ""
267
+
268
+ #: Application/Backend/view/extension.phtml:10
269
+ msgid "Install Extension"
270
+ msgstr ""
271
+
272
+ #: Application/Backend/view/extension.phtml:14
273
+ msgid "License Key"
274
+ msgstr ""
275
+
276
+ #: Application/Backend/view/extension.phtml:18
277
+ msgid "Install"
278
+ msgstr ""
279
+
280
+ #: Application/Backend/view/extension.phtml:25
281
+ msgid "Extension"
282
+ msgstr ""
283
+
284
+ #: Application/Backend/view/extension.phtml:26
285
+ #: Application/Backend/view/index.phtml:100
286
+ #: Application/Backend/view/index.phtml:197
287
+ msgid "Action"
288
+ msgstr ""
289
+
290
+ #: Application/Backend/view/extension.phtml:36
291
+ msgid ""
292
+ "Development license gives you an ability to download all the available "
293
+ "extensions and use them to up to 5 life domains."
294
+ msgstr ""
295
+
296
+ #: Application/Backend/view/extension.phtml:43
297
+ #: Application/Backend/view/extension.phtml:61
298
+ msgid "Purchase"
299
+ msgstr ""
300
+
301
+ #: Application/Backend/view/extension.phtml:54
302
+ msgid ""
303
+ "Unlock limitations related to Posts and Pages feature. Extend basic AAM "
304
+ "functionality with Page Categories and ability to manage access to your "
305
+ "comments (AAM Plus Package adds new capabilities to the default list of "
306
+ "WordPress capabilities like Edit Comments, Delete Comments, Spam Comments "
307
+ "etc.)."
308
+ msgstr ""
309
+
310
+ #: Application/Backend/view/extension.phtml:72
311
+ msgid "Various useful tools for AAM like caching or clear all settings."
312
+ msgstr ""
313
+
314
+ #: Application/Backend/view/extension.phtml:79
315
+ #: Application/Backend/view/extension.phtml:97
316
+ #: Application/Backend/view/extension.phtml:125
317
+ msgid "Download"
318
+ msgstr ""
319
+
320
+ #: Application/Backend/view/extension.phtml:90
321
+ msgid ""
322
+ "Convenient way to navigate between different sites in the Network Admin "
323
+ "Panel. This extension adds additional widget to the AAM page that allows to "
324
+ "switch between different sites."
325
+ msgstr ""
326
+
327
+ #: Application/Backend/view/extension.phtml:105
328
+ msgid "All extensions are installed and up to date."
329
+ msgstr ""
330
+
331
+ #: Application/Backend/view/extension.phtml:116
332
+ #: Application/Backend/view/extension.phtml:136
333
+ #: Application/Backend/view/extension.phtml:145
334
+ #: Application/Backend/view/index.phtml:110
335
+ #: Application/Backend/view/index.phtml:127
336
+ #: Application/Backend/view/index.phtml:137
337
+ #: Application/Backend/view/index.phtml:148
338
+ #: Application/Backend/view/index.phtml:158
339
+ #: Application/Backend/view/index.phtml:166
340
+ #: Application/Backend/view/index.phtml:176
341
+ #: Application/Backend/view/index.phtml:207
342
+ #: Application/Backend/view/object/capability.phtml:41
343
+ #: Application/Backend/view/object/capability.phtml:52
344
+ msgid "Close"
345
+ msgstr ""
346
+
347
+ #: Application/Backend/view/extension.phtml:117
348
+ #: Application/Backend/view/index.phtml:177
349
+ #: Application/Backend/view/index.phtml:208
350
+ msgid "Notification"
351
+ msgstr ""
352
+
353
+ #: Application/Backend/view/extension.phtml:121
354
+ #, php-format
355
+ msgid ""
356
+ "Click \"Download\" button below for a manual installation. Simply unzip the "
357
+ "archive to wp-content%s directory."
358
+ msgstr ""
359
+
360
+ #: Application/Backend/view/extension.phtml:126
361
+ msgid "Cancel"
362
+ msgstr ""
363
+
364
+ #: Application/Backend/view/extension.phtml:137
365
+ msgid "Install Extension Info"
366
+ msgstr ""
367
+
368
+ #: Application/Backend/view/extension.phtml:141
369
+ msgid ""
370
+ "In order to install premium extension, please use PayPal transaction ID "
371
+ "number that you recieved after the payment was completed successfully (it "
372
+ "might take up to 2 hours for PayPal to send you the email). If you already "
373
+ "purchased an extension for the older AAM version, use the license key but "
374
+ "please remember that it is limited only to one life domain."
375
+ msgstr ""
376
+
377
+ #: Application/Backend/view/index.phtml:30
378
+ msgid "Access Manager"
379
+ msgstr ""
380
+
381
+ #: Application/Backend/view/index.phtml:37
382
+ msgid "Note from the author"
383
+ msgstr ""
384
+
385
+ #: Application/Backend/view/index.phtml:38
386
+ msgid ""
387
+ "Appreciate your interest in Advanced Access Manager (aka AAM). With a strong "
388
+ "knowledge and experience in WordPress, AAM becomes a very powerful tool to "
389
+ "manage access to your frontend and backend."
390
+ msgstr ""
391
+
392
+ #: Application/Backend/view/index.phtml:39
393
+ #: Application/Backend/view/index.phtml:61
394
+ msgid "Please notice!"
395
+ msgstr ""
396
+
397
+ #: Application/Backend/view/index.phtml:40
398
+ msgid ""
399
+ "AAM was thoroughly tested on the fresh installation of WordPress and in the "
400
+ "latest versions of Chrome, Safari, IE and Firefox. If you have any issues, "
401
+ "please make sure that there is no conflict with other plugins on your "
402
+ "WordPress installation."
403
+ msgstr ""
404
+
405
+ #: Application/Backend/view/index.phtml:41
406
+ msgid ""
407
+ "Please find below the short description of each feature that AAM offers."
408
+ msgstr ""
409
+
410
+ #: Application/Backend/view/index.phtml:46
411
+ msgid ""
412
+ "Filter the admin menu. Please notice that it only filters the menu but does "
413
+ "not restrict a direct access to the filtered menus. In order to completely "
414
+ "restrict access to the menu, make sure that your role or user does not have "
415
+ "capability that is assigned by WordPress core to that menu (the capability "
416
+ "name is right next to the menu name)."
417
+ msgstr ""
418
+
419
+ #: Application/Backend/view/index.phtml:50
420
+ msgid "Metaboxes &amp; Widgets"
421
+ msgstr ""
422
+
423
+ #: Application/Backend/view/index.phtml:51
424
+ msgid ""
425
+ "Filter backend metaboxes and frontend widgets. If the list of metaboxes and "
426
+ "widgets is empty, click the “Refresh” button. This will reinitialize the "
427
+ "list. It is a possibility that this feature will not work on servers that "
428
+ "fails to execute WordPress remote request function “wp_remote_request”."
429
+ msgstr ""
430
+
431
+ #: Application/Backend/view/index.phtml:56
432
+ msgid ""
433
+ "This is probably the most important and powerful feature that manages list "
434
+ "of capabilities for roles and users. Please make sure that you are familiar "
435
+ "with WordPress Roles and Capabilities before using this feature. Do not try "
436
+ "to un-check any capability for the Administrator role because your might "
437
+ "lose access to your backend. While creating a new capability, AAM takes the "
438
+ "capability name without any additional processing or normalization; which "
439
+ "means that if you created new capability “Manage Boats”, internally it "
440
+ "retains the same exact name."
441
+ msgstr ""
442
+
443
+ #: Application/Backend/view/index.phtml:60
444
+ msgid "Posts &amp; Pages"
445
+ msgstr ""
446
+
447
+ #: Application/Backend/view/index.phtml:61
448
+ msgid "Manage access to your posts, pages and custom post types."
449
+ msgstr ""
450
+
451
+ #: Application/Backend/view/index.phtml:61
452
+ msgid "This feature has limitations without AAM Plus Package extension."
453
+ msgstr ""
454
+
455
+ #: Application/Backend/view/index.phtml:66
456
+ #, php-format
457
+ msgid ""
458
+ "Extend AAM functionality with variety of extensions that can be either "
459
+ "downloaded for free or purchased. All payment transactions are handled "
460
+ "securely through PayPal and the PayPal Transaction ID is used to obtain the "
461
+ "purchased extension (you can find Transaction ID in the email that PayPal "
462
+ "send you after the purchase). Most of the time the extension is available "
463
+ "for download almost immediately but it might take up to 2 hours for PayPal "
464
+ "to notify our server about your payment. You are allowed to get the full "
465
+ "refund within 30 days after the purchase, if extension did not meet your "
466
+ "expectation. Please submit the %srefund form%s and we will issue a refund "
467
+ "within next 3 business days."
468
+ msgstr ""
469
+
470
+ #: Application/Backend/view/index.phtml:80
471
+ msgid "User/Role Manager"
472
+ msgstr ""
473
+
474
+ #: Application/Backend/view/index.phtml:86
475
+ msgid "Roles"
476
+ msgstr ""
477
+
478
+ #: Application/Backend/view/index.phtml:89
479
+ msgid "Visitor"
480
+ msgstr ""
481
+
482
+ #: Application/Backend/view/index.phtml:111
483
+ msgid "Add New Role"
484
+ msgstr ""
485
+
486
+ #: Application/Backend/view/index.phtml:115
487
+ #: Application/Backend/view/index.phtml:142
488
+ msgid "Role Name"
489
+ msgstr ""
490
+
491
+ #: Application/Backend/view/index.phtml:116
492
+ #: Application/Backend/view/index.phtml:143
493
+ msgid "Enter Role Name"
494
+ msgstr ""
495
+
496
+ #: Application/Backend/view/index.phtml:119
497
+ msgid "Inherit Capabilities"
498
+ msgstr ""
499
+
500
+ #: Application/Backend/view/index.phtml:138
501
+ msgid "Edit Role"
502
+ msgstr ""
503
+
504
+ #: Application/Backend/view/index.phtml:147
505
+ msgid "Update Role"
506
+ msgstr ""
507
+
508
+ #: Application/Backend/view/index.phtml:162
509
+ #, php-format
510
+ msgid "Are you sure that you want to delete %s role?"
511
+ msgstr ""
512
+
513
+ #: Application/Backend/view/index.phtml:180
514
+ msgid ""
515
+ "You are not allowed to delete this role because either you do not have a "
516
+ "capability to \"Delete Users\" or there is at least one user assigned to it."
517
+ msgstr ""
518
+
519
+ #: Application/Backend/view/index.phtml:183
520
+ #: Application/Backend/view/index.phtml:214
521
+ msgid "OK"
522
+ msgstr ""
523
+
524
+ #: Application/Backend/view/index.phtml:196
525
+ msgid "Username"
526
+ msgstr ""
527
+
528
+ #: Application/Backend/view/index.phtml:211
529
+ msgid "You are not allowed to perform this action."
530
+ msgstr ""
531
+
532
+ #: Application/Backend/view/index.phtml:224
533
+ msgid ""
534
+ "Manage access to your website for visitors (any user that is not "
535
+ "authenticated)"
536
+ msgstr ""
537
+
538
+ #: Application/Backend/view/index.phtml:225
539
+ msgid "Manage Visitor"
540
+ msgstr ""
541
+
542
+ #: Application/Backend/view/index.phtml:237
543
+ msgid "Role Manager"
544
+ msgstr ""
545
+
546
+ #: Application/Backend/view/index.phtml:238
547
+ msgid ""
548
+ "With role manager you can manage access for any defined role, edit role's "
549
+ "name, create new role or even delete existing (but only when there is no "
550
+ "users assigned to it). You are not allowed to delete Administrator role."
551
+ msgstr ""
552
+
553
+ #: Application/Backend/view/index.phtml:242
554
+ msgid "User Manager"
555
+ msgstr ""
556
+
557
+ #: Application/Backend/view/index.phtml:243
558
+ msgid ""
559
+ "Manage access for any user. As a bonus feature, you can block user. It means "
560
+ "that user will be not able to login to your website anymore. Create or edit "
561
+ "user actions link to the native WordPress create/edit user interface."
562
+ msgstr ""
563
+
564
+ #: Application/Backend/view/index.phtml:247
565
+ msgid "Visitor Manager"
566
+ msgstr ""
567
+
568
+ #: Application/Backend/view/index.phtml:248
569
+ msgid ""
570
+ "Visitor is any user that is not authenticated to your website. Considering "
571
+ "the fact that visitors do not have any access to backend, any features that "
572
+ "ara backend related are disabled."
573
+ msgstr ""
574
+
575
+ #: Application/Backend/view/index.phtml:276
576
+ #, php-format
577
+ msgid "Follow us on twitter %s for the latest Advanced Access Manager news."
578
+ msgstr ""
579
+
580
+ #: Application/Backend/view/index.phtml:279
581
+ msgid "What's New"
582
+ msgstr ""
583
+
584
+ #: Application/Backend/view/index.phtml:281
585
+ msgid "Brand new and much more intuitive user interface."
586
+ msgstr ""
587
+
588
+ #: Application/Backend/view/index.phtml:282
589
+ msgid ""
590
+ "Fully responsive design so you can manage access to website even on your "
591
+ "smart phone."
592
+ msgstr ""
593
+
594
+ #: Application/Backend/view/index.phtml:283
595
+ msgid "Better, more reliable and faster core functionality."
596
+ msgstr ""
597
+
598
+ #: Application/Backend/view/index.phtml:284
599
+ msgid ""
600
+ "Completely new extension handler. In case of any file system failure, you "
601
+ "can download an extension for manual installation."
602
+ msgstr ""
603
+
604
+ #: Application/Backend/view/index.phtml:285
605
+ msgid "Added \"Manage Access\" action to the list of user."
606
+ msgstr ""
607
+
608
+ #: Application/Backend/view/index.phtml:288
609
+ msgid "Please be aware of the latest changes!"
610
+ msgstr ""
611
+
612
+ #: Application/Backend/view/index.phtml:290
613
+ msgid ""
614
+ "\"Save\" button has been removed. Any changes that you perform are saved "
615
+ "automatically."
616
+ msgstr ""
617
+
618
+ #: Application/Backend/view/index.phtml:292
619
+ msgid ""
620
+ "License key for an extension is valid for one life domain only. All the "
621
+ "licenses that were purchased before are still valid but limited to one "
622
+ "domain with AAM version 3 (with AAM version 2 it is still unlimited until "
623
+ "April 2016)."
624
+ msgstr ""
625
+
626
+ #: Application/Backend/view/index.phtml:293
627
+ msgid ""
628
+ "Development License is valid for 5 domains with AAM version 3 but is still "
629
+ "unlimited with version 2 (only until April 2016)."
630
+ msgstr ""
631
+
632
+ #: Application/Backend/view/index.phtml:294
633
+ msgid ""
634
+ "Posts &amp; Pages settings from AAM version 2 are not compatible with AAM "
635
+ "version 3."
636
+ msgstr ""
637
+
638
+ #: Application/Backend/view/index.phtml:295
639
+ msgid "You are not allowed to delete or lock an \"Administrator\" role."
640
+ msgstr ""
641
+
642
+ #: Application/Backend/view/index.phtml:296
643
+ msgid "There is no longer a \"Super Admin\" role."
644
+ msgstr ""
645
+
646
+ #: Application/Backend/view/index.phtml:297
647
+ msgid ""
648
+ "You are not longer allowed to delete any user or group or users (but you "
649
+ "still can do it within native WordPress interface)."
650
+ msgstr ""
651
+
652
+ #: Application/Backend/view/index.phtml:298
653
+ msgid ""
654
+ "You are not allowed to delete any capability (even the one that you created "
655
+ "manually)."
656
+ msgstr ""
657
+
658
+ #: Application/Backend/view/index.phtml:302
659
+ #, php-format
660
+ msgid ""
661
+ "You can rolleback to the earlier version of AAM by simply downloading any "
662
+ "previous version on %sthis page%s. After download, replace the wp-content/"
663
+ "plugins/advanced-access-manager directory with the archive's content."
664
+ msgstr ""
665
+
666
+ #: Application/Backend/view/index.phtml:305
667
+ msgid "Ok, got it"
668
+ msgstr ""
669
+
670
+ #: Application/Backend/view/object/capability.phtml:5
671
+ msgid ""
672
+ "[Please notice!] You are not allowed to assign or create a new capability "
673
+ "that does not belong to user's role. Consider creating a new role with "
674
+ "desired list of capabilities and then assign that role to user."
675
+ msgstr ""
676
+
677
+ #: Application/Backend/view/object/capability.phtml:12
678
+ msgid "Filter"
679
+ msgstr ""
680
+
681
+ #: Application/Backend/view/object/capability.phtml:19
682
+ msgid "All Capabilities"
683
+ msgstr ""
684
+
685
+ #: Application/Backend/view/object/capability.phtml:29
686
+ msgid "Category"
687
+ msgstr ""
688
+
689
+ #: Application/Backend/view/object/capability.phtml:30
690
+ msgid "Capability"
691
+ msgstr ""
692
+
693
+ #: Application/Backend/view/object/capability.phtml:31
694
+ msgid "Assign"
695
+ msgstr ""
696
+
697
+ #: Application/Backend/view/object/capability.phtml:42
698
+ msgid "Add New Capability"
699
+ msgstr ""
700
+
701
+ #: Application/Backend/view/object/capability.phtml:46
702
+ msgid "Capability Name"
703
+ msgstr ""
704
+
705
+ #: Application/Backend/view/object/capability.phtml:47
706
+ msgid "Enter Capability"
707
+ msgstr ""
708
+
709
+ #: Application/Backend/view/object/menu.phtml:5
710
+ msgid ""
711
+ "Backend Menu feature does not restrict direct access to the page but rather "
712
+ "filters it from the menu. In order to completely restrict access to the "
713
+ "desired page, un-check the capability that is assigned to the menu [(the "
714
+ "capability is shown right next to the menu title)]."
715
+ msgstr ""
716
+
717
+ #: Application/Backend/view/object/metabox.phtml:3
718
+ msgid "Refresh"
719
+ msgstr ""
720
+
721
+ #: Application/Backend/view/object/metabox.phtml:19
722
+ msgid "Dashboard Widgets"
723
+ msgstr ""
724
+
725
+ #: Application/Backend/view/object/metabox.phtml:23
726
+ msgid "Frontend Widgets"
727
+ msgstr ""
728
+
729
+ #: Application/Backend/view/object/metabox.phtml:54
730
+ msgid ""
731
+ "The list of metaboxes and widgets is not initialized. Click Refresh button "
732
+ "above."
733
+ msgstr ""
734
+
735
+ #: Application/Backend/view/object/post.phtml:13
736
+ msgid "Root"
737
+ msgstr ""
738
+
739
+ #: Application/Backend/view/object/post.phtml:23
740
+ msgid "Title"
741
+ msgstr ""
742
+
743
+ #: Application/Backend/view/object/post.phtml:24
744
+ msgid "Actions"
745
+ msgstr ""
746
+
747
+ #: Application/Backend/view/object/post.phtml:32
748
+ #: Application/Backend/view/object/post.phtml:37
749
+ #: Application/Backend/view/object/post.phtml:141
750
+ msgid "Go Back"
751
+ msgstr ""
752
+
753
+ #: Application/Backend/view/object/post.phtml:45
754
+ msgid "Frontend"
755
+ msgstr ""
756
+
757
+ #: Application/Backend/view/object/post.phtml:51
758
+ #: Application/Backend/view/object/post.phtml:99
759
+ msgid "List"
760
+ msgstr ""
761
+
762
+ #: Application/Backend/view/object/post.phtml:53
763
+ msgid "Filter (exclude) post from any list on your website frontend."
764
+ msgstr ""
765
+
766
+ #: Application/Backend/view/object/post.phtml:54
767
+ #: Application/Backend/view/object/post.phtml:102
768
+ msgid "Warning!"
769
+ msgstr ""
770
+
771
+ #: Application/Backend/view/object/post.phtml:55
772
+ msgid ""
773
+ "If checked, this property may slowdown your website with large amount of "
774
+ "posts."
775
+ msgstr ""
776
+
777
+ #: Application/Backend/view/object/post.phtml:66
778
+ msgid "Read"
779
+ msgstr ""
780
+
781
+ #: Application/Backend/view/object/post.phtml:68
782
+ msgid ""
783
+ "Restrict access to read a post. If \"List\" option is not checked, a post "
784
+ "will be still listed on your website frontend."
785
+ msgstr ""
786
+
787
+ #: Application/Backend/view/object/post.phtml:79
788
+ msgid "Comment"
789
+ msgstr ""
790
+
791
+ #: Application/Backend/view/object/post.phtml:81
792
+ msgid ""
793
+ "Restrict access to comment on a post (if commenting feature is activated)."
794
+ msgstr ""
795
+
796
+ #: Application/Backend/view/object/post.phtml:93
797
+ msgid "Backend"
798
+ msgstr ""
799
+
800
+ #: Application/Backend/view/object/post.phtml:101
801
+ msgid "Filter (exclude) post from any list on your website backend."
802
+ msgstr ""
803
+
804
+ #: Application/Backend/view/object/post.phtml:103
805
+ msgid ""
806
+ "If checked, this property may slowdown your backend with large amount of "
807
+ "posts."
808
+ msgstr ""
809
+
810
+ #: Application/Backend/view/object/post.phtml:114
811
+ msgid "Edit"
812
+ msgstr ""
813
+
814
+ #: Application/Backend/view/object/post.phtml:116
815
+ msgid ""
816
+ "Restrict access to edit a post (also the link \"Edit\" and \"Quick Edit\" "
817
+ "will be removed below the post title)."
818
+ msgstr ""
819
+
820
+ #: Application/Backend/view/object/post.phtml:127
821
+ msgid "Delete"
822
+ msgstr ""
823
+
824
+ #: Application/Backend/view/object/post.phtml:129
825
+ msgid ""
826
+ "Restrict access to trash or permanently delete a post (also the link \"Trash"
827
+ "\" or \"Delete Permanently\" will be removed for a post)."
828
+ msgstr ""
Lang/en_US.mo ADDED
Binary file
Lang/en_US.po ADDED
@@ -0,0 +1,827 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ msgid ""
2
+ msgstr ""
3
+ "Project-Id-Version: AAM\n"
4
+ "POT-Creation-Date: 2015-11-22 10:19-0500\n"
5
+ "PO-Revision-Date: \n"
6
+ "Language-Team: WP AAM <vasyl@vasyltech.com>\n"
7
+ "MIME-Version: 1.0\n"
8
+ "Content-Type: text/plain; charset=UTF-8\n"
9
+ "Content-Transfer-Encoding: 8bit\n"
10
+ "X-Generator: Poedit 1.8.6\n"
11
+ "Plural-Forms: nplurals=2; plural=(n != 1);\n"
12
+ "X-Poedit-SourceCharset: UTF-8\n"
13
+ "X-Poedit-KeywordsList: __\n"
14
+ "X-Poedit-Basepath: ..\n"
15
+ "Last-Translator: \n"
16
+ "Language: en_US\n"
17
+ "X-Poedit-SearchPath-0: .\n"
18
+
19
+ #: media/js/aam-ui.js:43 media/js/aam-ui.js:1220
20
+ #: Application/Backend/Localization.php:23
21
+ msgid "Loading..."
22
+ msgstr ""
23
+
24
+ #: media/js/aam-ui.js:48 Application/Backend/Localization.php:24
25
+ #: Application/Backend/view/index.phtml:121
26
+ msgid "Select Role"
27
+ msgstr ""
28
+
29
+ #: media/js/aam-ui.js:81 Application/Backend/Localization.php:25
30
+ msgid "Search Role"
31
+ msgstr ""
32
+
33
+ #: media/js/aam-ui.js:82 Application/Backend/Localization.php:26
34
+ msgid "_TOTAL_ role(s)"
35
+ msgstr ""
36
+
37
+ #: media/js/aam-ui.js:89 media/js/aam-ui.js:431
38
+ #: Application/Backend/Localization.php:27
39
+ #: Application/Backend/view/object/capability.phtml:22
40
+ msgid "Create"
41
+ msgstr ""
42
+
43
+ #: media/js/aam-ui.js:114 Application/Backend/Localization.php:28
44
+ #: Application/Backend/view/index.phtml:87
45
+ msgid "Users"
46
+ msgstr ""
47
+
48
+ #: media/js/aam-ui.js:211 media/js/aam-ui.js:255 media/js/aam-ui.js:891
49
+ #: Application/Backend/Localization.php:13
50
+ msgid "Saving..."
51
+ msgstr ""
52
+
53
+ #: media/js/aam-ui.js:219 Application/Backend/Localization.php:29
54
+ msgid "Failed to add new role"
55
+ msgstr ""
56
+
57
+ #: media/js/aam-ui.js:224 media/js/aam-ui.js:267 media/js/aam-ui.js:304
58
+ #: media/js/aam-ui.js:396 media/js/aam-ui.js:687 media/js/aam-ui.js:724
59
+ #: media/js/aam-ui.js:904 media/js/aam-ui.js:1051 media/js/aam-ui.js:1092
60
+ #: media/js/aam-ui.js:1325 media/js/aam.js:220
61
+ #: Application/Backend/Localization.php:15
62
+ msgid "Application error"
63
+ msgstr ""
64
+
65
+ #: media/js/aam-ui.js:227 Application/Backend/Localization.php:30
66
+ #: Application/Backend/view/index.phtml:126
67
+ msgid "Add Role"
68
+ msgstr ""
69
+
70
+ #: media/js/aam-ui.js:262 Application/Backend/Localization.php:31
71
+ msgid "Failed to update role"
72
+ msgstr ""
73
+
74
+ #: media/js/aam-ui.js:271 Application/Backend/Localization.php:32
75
+ #: Application/Backend/view/extension.phtml:41
76
+ #: Application/Backend/view/extension.phtml:59
77
+ #: Application/Backend/view/extension.phtml:77
78
+ #: Application/Backend/view/extension.phtml:95
79
+ msgid "Update"
80
+ msgstr ""
81
+
82
+ #: media/js/aam-ui.js:294 Application/Backend/Localization.php:33
83
+ msgid "Deleting..."
84
+ msgstr ""
85
+
86
+ #: media/js/aam-ui.js:300 Application/Backend/Localization.php:34
87
+ msgid "Failed to delete role"
88
+ msgstr ""
89
+
90
+ #: media/js/aam-ui.js:308 Application/Backend/Localization.php:35
91
+ #: Application/Backend/view/index.phtml:159
92
+ #: Application/Backend/view/index.phtml:165
93
+ msgid "Delete Role"
94
+ msgstr ""
95
+
96
+ #: media/js/aam-ui.js:391 Application/Backend/Localization.php:36
97
+ msgid "Failed to block user"
98
+ msgstr ""
99
+
100
+ #: media/js/aam-ui.js:423 Application/Backend/Localization.php:37
101
+ msgid "Search User"
102
+ msgstr ""
103
+
104
+ #: media/js/aam-ui.js:424 Application/Backend/Localization.php:38
105
+ msgid "_TOTAL_ user(s)"
106
+ msgstr ""
107
+
108
+ #: media/js/aam-ui.js:448 Application/Backend/Localization.php:39
109
+ #: Application/Backend/view/index.phtml:99
110
+ msgid "Role"
111
+ msgstr ""
112
+
113
+ #: media/js/aam-ui.js:569 Application/Backend/Localization.php:40
114
+ msgid "Anonymous"
115
+ msgstr ""
116
+
117
+ #: media/js/aam-ui.js:618 Application/Backend/Localization.php:17
118
+ #: Application/Backend/view/object/menu.phtml:43
119
+ msgid "Show Menu"
120
+ msgstr ""
121
+
122
+ #: media/js/aam-ui.js:633 Application/Backend/Localization.php:18
123
+ #: Application/Backend/view/object/menu.phtml:47
124
+ msgid "Hide Menu"
125
+ msgstr ""
126
+
127
+ #: media/js/aam-ui.js:719 Application/Backend/Localization.php:19
128
+ msgid "Failed to retrieve mataboxes"
129
+ msgstr ""
130
+
131
+ #: media/js/aam-ui.js:779 Application/Backend/Localization.php:44
132
+ msgid "Failed to grand capability - WordPress policy"
133
+ msgstr ""
134
+
135
+ #: media/js/aam-ui.js:814 Application/Backend/Localization.php:11
136
+ msgid "Search Capability"
137
+ msgstr ""
138
+
139
+ #: media/js/aam-ui.js:815 Application/Backend/Localization.php:12
140
+ msgid "_TOTAL_ capability(s)"
141
+ msgstr ""
142
+
143
+ #: media/js/aam-ui.js:899 Application/Backend/Localization.php:14
144
+ msgid "Failed to add new capability"
145
+ msgstr ""
146
+
147
+ #: media/js/aam-ui.js:907 Application/Backend/Localization.php:16
148
+ #: Application/Backend/view/object/capability.phtml:51
149
+ msgid "Add Capability"
150
+ msgstr ""
151
+
152
+ #: media/js/aam-ui.js:1132 Application/Backend/Localization.php:20
153
+ msgid "Search"
154
+ msgstr ""
155
+
156
+ #: media/js/aam-ui.js:1133 Application/Backend/Localization.php:21
157
+ msgid "_TOTAL_ object(s)"
158
+ msgstr ""
159
+
160
+ #: media/js/aam-ui.js:1209 Application/Backend/Localization.php:22
161
+ msgid "Failed"
162
+ msgstr ""
163
+
164
+ #: media/js/aam.js:128 Application/Backend/Localization.php:43
165
+ msgid ""
166
+ "Javascript error detected during the page load. AAM may not function "
167
+ "properly."
168
+ msgstr ""
169
+
170
+ #: media/js/aam.js:159
171
+ msgid "Current "
172
+ msgstr ""
173
+
174
+ #: Application/Backend/Capability.php:126
175
+ #: Application/Backend/Capability.php:165
176
+ msgid "System"
177
+ msgstr ""
178
+
179
+ #: Application/Backend/Capability.php:127
180
+ #: Application/Backend/Capability.php:167 Application/Backend/Post.php:318
181
+ msgid "Posts & Pages"
182
+ msgstr ""
183
+
184
+ #: Application/Backend/Capability.php:128
185
+ #: Application/Backend/Capability.php:169
186
+ msgid "Backend Interface"
187
+ msgstr ""
188
+
189
+ #: Application/Backend/Capability.php:129
190
+ #: Application/Backend/Capability.php:171
191
+ msgid "Miscellaneous"
192
+ msgstr ""
193
+
194
+ #: Application/Backend/Capability.php:190
195
+ #: Application/Backend/view/index.phtml:55
196
+ msgid "Capabilities"
197
+ msgstr ""
198
+
199
+ #: Application/Backend/Extension.php:88
200
+ msgid "License key is missing."
201
+ msgstr ""
202
+
203
+ #: Application/Backend/Extension.php:149
204
+ #: Application/Backend/view/index.phtml:65
205
+ msgid "Extensions"
206
+ msgstr ""
207
+
208
+ #: Application/Backend/Filter.php:196 Application/Core/API.php:180
209
+ msgid "Access Denied"
210
+ msgstr ""
211
+
212
+ #: Application/Backend/Localization.php:41
213
+ msgid "Current user"
214
+ msgstr ""
215
+
216
+ #: Application/Backend/Localization.php:42
217
+ msgid "Current role"
218
+ msgstr ""
219
+
220
+ #: Application/Backend/Manager.php:89
221
+ #, php-format
222
+ msgid "Extension %s has new update available for download."
223
+ msgstr ""
224
+
225
+ #: Application/Backend/Manager.php:128
226
+ msgid "Manage Access"
227
+ msgstr ""
228
+
229
+ #: Application/Backend/Manager.php:243 Application/Backend/Manager.php:244
230
+ msgid "AAM"
231
+ msgstr ""
232
+
233
+ #: Application/Backend/Menu.php:161 Application/Backend/view/index.phtml:45
234
+ msgid "Backend Menu"
235
+ msgstr ""
236
+
237
+ #: Application/Backend/Metabox.php:195
238
+ msgid "Metaboxes & Widgets"
239
+ msgstr ""
240
+
241
+ #: Application/Backend/Post.php:72
242
+ msgid "Base Level"
243
+ msgstr ""
244
+
245
+ #: Application/Backend/Post.php:276
246
+ msgid "You reached your limitation."
247
+ msgstr ""
248
+
249
+ #: Application/Core/Repository.php:223
250
+ #, php-format
251
+ msgid "Failed to create %s"
252
+ msgstr ""
253
+
254
+ #: Application/Core/Repository.php:227
255
+ #, php-format
256
+ msgid "Directory %s is not writable"
257
+ msgstr ""
258
+
259
+ #: aam.php:149
260
+ msgid "PHP 5.2 or higher is required."
261
+ msgstr ""
262
+
263
+ #: aam.php:151
264
+ msgid "WP 3.8 or higher is required."
265
+ msgstr ""
266
+
267
+ #: Application/Backend/view/extension.phtml:10
268
+ msgid "Install Extension"
269
+ msgstr ""
270
+
271
+ #: Application/Backend/view/extension.phtml:14
272
+ msgid "License Key"
273
+ msgstr ""
274
+
275
+ #: Application/Backend/view/extension.phtml:18
276
+ msgid "Install"
277
+ msgstr ""
278
+
279
+ #: Application/Backend/view/extension.phtml:25
280
+ msgid "Extension"
281
+ msgstr ""
282
+
283
+ #: Application/Backend/view/extension.phtml:26
284
+ #: Application/Backend/view/index.phtml:100
285
+ #: Application/Backend/view/index.phtml:197
286
+ msgid "Action"
287
+ msgstr ""
288
+
289
+ #: Application/Backend/view/extension.phtml:36
290
+ msgid ""
291
+ "Development license gives you an ability to download all the available "
292
+ "extensions and use them to up to 5 life domains."
293
+ msgstr ""
294
+
295
+ #: Application/Backend/view/extension.phtml:43
296
+ #: Application/Backend/view/extension.phtml:61
297
+ msgid "Purchase"
298
+ msgstr ""
299
+
300
+ #: Application/Backend/view/extension.phtml:54
301
+ msgid ""
302
+ "Unlock limitations related to Posts and Pages feature. Extend basic AAM "
303
+ "functionality with Page Categories and ability to manage access to your "
304
+ "comments (AAM Plus Package adds new capabilities to the default list of "
305
+ "WordPress capabilities like Edit Comments, Delete Comments, Spam Comments "
306
+ "etc.)."
307
+ msgstr ""
308
+
309
+ #: Application/Backend/view/extension.phtml:72
310
+ msgid "Various useful tools for AAM like caching or clear all settings."
311
+ msgstr ""
312
+
313
+ #: Application/Backend/view/extension.phtml:79
314
+ #: Application/Backend/view/extension.phtml:97
315
+ #: Application/Backend/view/extension.phtml:125
316
+ msgid "Download"
317
+ msgstr ""
318
+
319
+ #: Application/Backend/view/extension.phtml:90
320
+ msgid ""
321
+ "Convenient way to navigate between different sites in the Network Admin "
322
+ "Panel. This extension adds additional widget to the AAM page that allows to "
323
+ "switch between different sites."
324
+ msgstr ""
325
+
326
+ #: Application/Backend/view/extension.phtml:105
327
+ msgid "All extensions are installed and up to date."
328
+ msgstr ""
329
+
330
+ #: Application/Backend/view/extension.phtml:116
331
+ #: Application/Backend/view/extension.phtml:136
332
+ #: Application/Backend/view/extension.phtml:145
333
+ #: Application/Backend/view/index.phtml:110
334
+ #: Application/Backend/view/index.phtml:127
335
+ #: Application/Backend/view/index.phtml:137
336
+ #: Application/Backend/view/index.phtml:148
337
+ #: Application/Backend/view/index.phtml:158
338
+ #: Application/Backend/view/index.phtml:166
339
+ #: Application/Backend/view/index.phtml:176
340
+ #: Application/Backend/view/index.phtml:207
341
+ #: Application/Backend/view/object/capability.phtml:41
342
+ #: Application/Backend/view/object/capability.phtml:52
343
+ msgid "Close"
344
+ msgstr ""
345
+
346
+ #: Application/Backend/view/extension.phtml:117
347
+ #: Application/Backend/view/index.phtml:177
348
+ #: Application/Backend/view/index.phtml:208
349
+ msgid "Notification"
350
+ msgstr ""
351
+
352
+ #: Application/Backend/view/extension.phtml:121
353
+ #, php-format
354
+ msgid ""
355
+ "Click \"Download\" button below for a manual installation. Simply unzip the "
356
+ "archive to wp-content%s directory."
357
+ msgstr ""
358
+
359
+ #: Application/Backend/view/extension.phtml:126
360
+ msgid "Cancel"
361
+ msgstr ""
362
+
363
+ #: Application/Backend/view/extension.phtml:137
364
+ msgid "Install Extension Info"
365
+ msgstr ""
366
+
367
+ #: Application/Backend/view/extension.phtml:141
368
+ msgid ""
369
+ "In order to install premium extension, please use PayPal transaction ID "
370
+ "number that you recieved after the payment was completed successfully (it "
371
+ "might take up to 2 hours for PayPal to send you the email). If you already "
372
+ "purchased an extension for the older AAM version, use the license key but "
373
+ "please remember that it is limited only to one life domain."
374
+ msgstr ""
375
+
376
+ #: Application/Backend/view/index.phtml:30
377
+ msgid "Access Manager"
378
+ msgstr ""
379
+
380
+ #: Application/Backend/view/index.phtml:37
381
+ msgid "Note from the author"
382
+ msgstr ""
383
+
384
+ #: Application/Backend/view/index.phtml:38
385
+ msgid ""
386
+ "Appreciate your interest in Advanced Access Manager (aka AAM). With a strong "
387
+ "knowledge and experience in WordPress, AAM becomes a very powerful tool to "
388
+ "manage access to your frontend and backend."
389
+ msgstr ""
390
+
391
+ #: Application/Backend/view/index.phtml:39
392
+ #: Application/Backend/view/index.phtml:61
393
+ msgid "Please notice!"
394
+ msgstr ""
395
+
396
+ #: Application/Backend/view/index.phtml:40
397
+ msgid ""
398
+ "AAM was thoroughly tested on the fresh installation of WordPress and in the "
399
+ "latest versions of Chrome, Safari, IE and Firefox. If you have any issues, "
400
+ "please make sure that there is no conflict with other plugins on your "
401
+ "WordPress installation."
402
+ msgstr ""
403
+
404
+ #: Application/Backend/view/index.phtml:41
405
+ msgid ""
406
+ "Please find below the short description of each feature that AAM offers."
407
+ msgstr ""
408
+
409
+ #: Application/Backend/view/index.phtml:46
410
+ msgid ""
411
+ "Filter the admin menu. Please notice that it only filters the menu but does "
412
+ "not restrict a direct access to the filtered menus. In order to completely "
413
+ "restrict access to the menu, make sure that your role or user does not have "
414
+ "capability that is assigned by WordPress core to that menu (the capability "
415
+ "name is right next to the menu name)."
416
+ msgstr ""
417
+
418
+ #: Application/Backend/view/index.phtml:50
419
+ msgid "Metaboxes &amp; Widgets"
420
+ msgstr ""
421
+
422
+ #: Application/Backend/view/index.phtml:51
423
+ msgid ""
424
+ "Filter backend metaboxes and frontend widgets. If the list of metaboxes and "
425
+ "widgets is empty, click the “Refresh” button. This will reinitialize the "
426
+ "list. It is a possibility that this feature will not work on servers that "
427
+ "fails to execute WordPress remote request function “wp_remote_request”."
428
+ msgstr ""
429
+
430
+ #: Application/Backend/view/index.phtml:56
431
+ msgid ""
432
+ "This is probably the most important and powerful feature that manages list "
433
+ "of capabilities for roles and users. Please make sure that you are familiar "
434
+ "with WordPress Roles and Capabilities before using this feature. Do not try "
435
+ "to un-check any capability for the Administrator role because your might "
436
+ "lose access to your backend. While creating a new capability, AAM takes the "
437
+ "capability name without any additional processing or normalization; which "
438
+ "means that if you created new capability “Manage Boats”, internally it "
439
+ "retains the same exact name."
440
+ msgstr ""
441
+
442
+ #: Application/Backend/view/index.phtml:60
443
+ msgid "Posts &amp; Pages"
444
+ msgstr ""
445
+
446
+ #: Application/Backend/view/index.phtml:61
447
+ msgid "Manage access to your posts, pages and custom post types."
448
+ msgstr ""
449
+
450
+ #: Application/Backend/view/index.phtml:61
451
+ msgid "This feature has limitations without AAM Plus Package extension."
452
+ msgstr ""
453
+
454
+ #: Application/Backend/view/index.phtml:66
455
+ #, php-format
456
+ msgid ""
457
+ "Extend AAM functionality with variety of extensions that can be either "
458
+ "downloaded for free or purchased. All payment transactions are handled "
459
+ "securely through PayPal and the PayPal Transaction ID is used to obtain the "
460
+ "purchased extension (you can find Transaction ID in the email that PayPal "
461
+ "send you after the purchase). Most of the time the extension is available "
462
+ "for download almost immediately but it might take up to 2 hours for PayPal "
463
+ "to notify our server about your payment. You are allowed to get the full "
464
+ "refund within 30 days after the purchase, if extension did not meet your "
465
+ "expectation. Please submit the %srefund form%s and we will issue a refund "
466
+ "within next 3 business days."
467
+ msgstr ""
468
+
469
+ #: Application/Backend/view/index.phtml:80
470
+ msgid "User/Role Manager"
471
+ msgstr ""
472
+
473
+ #: Application/Backend/view/index.phtml:86
474
+ msgid "Roles"
475
+ msgstr ""
476
+
477
+ #: Application/Backend/view/index.phtml:89
478
+ msgid "Visitor"
479
+ msgstr ""
480
+
481
+ #: Application/Backend/view/index.phtml:111
482
+ msgid "Add New Role"
483
+ msgstr ""
484
+
485
+ #: Application/Backend/view/index.phtml:115
486
+ #: Application/Backend/view/index.phtml:142
487
+ msgid "Role Name"
488
+ msgstr ""
489
+
490
+ #: Application/Backend/view/index.phtml:116
491
+ #: Application/Backend/view/index.phtml:143
492
+ msgid "Enter Role Name"
493
+ msgstr ""
494
+
495
+ #: Application/Backend/view/index.phtml:119
496
+ msgid "Inherit Capabilities"
497
+ msgstr ""
498
+
499
+ #: Application/Backend/view/index.phtml:138
500
+ msgid "Edit Role"
501
+ msgstr ""
502
+
503
+ #: Application/Backend/view/index.phtml:147
504
+ msgid "Update Role"
505
+ msgstr ""
506
+
507
+ #: Application/Backend/view/index.phtml:162
508
+ #, php-format
509
+ msgid "Are you sure that you want to delete %s role?"
510
+ msgstr ""
511
+
512
+ #: Application/Backend/view/index.phtml:180
513
+ msgid ""
514
+ "You are not allowed to delete this role because either you do not have a "
515
+ "capability to \"Delete Users\" or there is at least one user assigned to it."
516
+ msgstr ""
517
+
518
+ #: Application/Backend/view/index.phtml:183
519
+ #: Application/Backend/view/index.phtml:214
520
+ msgid "OK"
521
+ msgstr ""
522
+
523
+ #: Application/Backend/view/index.phtml:196
524
+ msgid "Username"
525
+ msgstr ""
526
+
527
+ #: Application/Backend/view/index.phtml:211
528
+ msgid "You are not allowed to perform this action."
529
+ msgstr ""
530
+
531
+ #: Application/Backend/view/index.phtml:224
532
+ msgid ""
533
+ "Manage access to your website for visitors (any user that is not "
534
+ "authenticated)"
535
+ msgstr ""
536
+
537
+ #: Application/Backend/view/index.phtml:225
538
+ msgid "Manage Visitor"
539
+ msgstr ""
540
+
541
+ #: Application/Backend/view/index.phtml:237
542
+ msgid "Role Manager"
543
+ msgstr ""
544
+
545
+ #: Application/Backend/view/index.phtml:238
546
+ msgid ""
547
+ "With role manager you can manage access for any defined role, edit role's "
548
+ "name, create new role or even delete existing (but only when there is no "
549
+ "users assigned to it). You are not allowed to delete Administrator role."
550
+ msgstr ""
551
+
552
+ #: Application/Backend/view/index.phtml:242
553
+ msgid "User Manager"
554
+ msgstr ""
555
+
556
+ #: Application/Backend/view/index.phtml:243
557
+ msgid ""
558
+ "Manage access for any user. As a bonus feature, you can block user. It means "
559
+ "that user will be not able to login to your website anymore. Create or edit "
560
+ "user actions link to the native WordPress create/edit user interface."
561
+ msgstr ""
562
+
563
+ #: Application/Backend/view/index.phtml:247
564
+ msgid "Visitor Manager"
565
+ msgstr ""
566
+
567
+ #: Application/Backend/view/index.phtml:248
568
+ msgid ""
569
+ "Visitor is any user that is not authenticated to your website. Considering "
570
+ "the fact that visitors do not have any access to backend, any features that "
571
+ "ara backend related are disabled."
572
+ msgstr ""
573
+
574
+ #: Application/Backend/view/index.phtml:276
575
+ #, php-format
576
+ msgid "Follow us on twitter %s for the latest Advanced Access Manager news."
577
+ msgstr ""
578
+
579
+ #: Application/Backend/view/index.phtml:279
580
+ msgid "What's New"
581
+ msgstr ""
582
+
583
+ #: Application/Backend/view/index.phtml:281
584
+ msgid "Brand new and much more intuitive user interface."
585
+ msgstr ""
586
+
587
+ #: Application/Backend/view/index.phtml:282
588
+ msgid ""
589
+ "Fully responsive design so you can manage access to website even on your "
590
+ "smart phone."
591
+ msgstr ""
592
+
593
+ #: Application/Backend/view/index.phtml:283
594
+ msgid "Better, more reliable and faster core functionality."
595
+ msgstr ""
596
+
597
+ #: Application/Backend/view/index.phtml:284
598
+ msgid ""
599
+ "Completely new extension handler. In case of any file system failure, you "
600
+ "can download an extension for manual installation."
601
+ msgstr ""
602
+
603
+ #: Application/Backend/view/index.phtml:285
604
+ msgid "Added \"Manage Access\" action to the list of user."
605
+ msgstr ""
606
+
607
+ #: Application/Backend/view/index.phtml:288
608
+ msgid "Please be aware of the latest changes!"
609
+ msgstr ""
610
+
611
+ #: Application/Backend/view/index.phtml:290
612
+ msgid ""
613
+ "\"Save\" button has been removed. Any changes that you perform are saved "
614
+ "automatically."
615
+ msgstr ""
616
+
617
+ #: Application/Backend/view/index.phtml:292
618
+ msgid ""
619
+ "License key for an extension is valid for one life domain only. All the "
620
+ "licenses that were purchased before are still valid but limited to one "
621
+ "domain with AAM version 3 (with AAM version 2 it is still unlimited until "
622
+ "April 2016)."
623
+ msgstr ""
624
+
625
+ #: Application/Backend/view/index.phtml:293
626
+ msgid ""
627
+ "Development License is valid for 5 domains with AAM version 3 but is still "
628
+ "unlimited with version 2 (only until April 2016)."
629
+ msgstr ""
630
+
631
+ #: Application/Backend/view/index.phtml:294
632
+ msgid ""
633
+ "Posts &amp; Pages settings from AAM version 2 are not compatible with AAM "
634
+ "version 3."
635
+ msgstr ""
636
+
637
+ #: Application/Backend/view/index.phtml:295
638
+ msgid "You are not allowed to delete or lock an \"Administrator\" role."
639
+ msgstr ""
640
+
641
+ #: Application/Backend/view/index.phtml:296
642
+ msgid "There is no longer a \"Super Admin\" role."
643
+ msgstr ""
644
+
645
+ #: Application/Backend/view/index.phtml:297
646
+ msgid ""
647
+ "You are not longer allowed to delete any user or group or users (but you "
648
+ "still can do it within native WordPress interface)."
649
+ msgstr ""
650
+
651
+ #: Application/Backend/view/index.phtml:298
652
+ msgid ""
653
+ "You are not allowed to delete any capability (even the one that you created "
654
+ "manually)."
655
+ msgstr ""
656
+
657
+ #: Application/Backend/view/index.phtml:302
658
+ #, php-format
659
+ msgid ""
660
+ "You can rolleback to the earlier version of AAM by simply downloading any "
661
+ "previous version on %sthis page%s. After download, replace the wp-content/"
662
+ "plugins/advanced-access-manager directory with the archive's content."
663
+ msgstr ""
664
+
665
+ #: Application/Backend/view/index.phtml:305
666
+ msgid "Ok, got it"
667
+ msgstr ""
668
+
669
+ #: Application/Backend/view/object/capability.phtml:5
670
+ msgid ""
671
+ "[Please notice!] You are not allowed to assign or create a new capability "
672
+ "that does not belong to user's role. Consider creating a new role with "
673
+ "desired list of capabilities and then assign that role to user."
674
+ msgstr ""
675
+
676
+ #: Application/Backend/view/object/capability.phtml:12
677
+ msgid "Filter"
678
+ msgstr ""
679
+
680
+ #: Application/Backend/view/object/capability.phtml:19
681
+ msgid "All Capabilities"
682
+ msgstr ""
683
+
684
+ #: Application/Backend/view/object/capability.phtml:29
685
+ msgid "Category"
686
+ msgstr ""
687
+
688
+ #: Application/Backend/view/object/capability.phtml:30
689
+ msgid "Capability"
690
+ msgstr ""
691
+
692
+ #: Application/Backend/view/object/capability.phtml:31
693
+ msgid "Assign"
694
+ msgstr ""
695
+
696
+ #: Application/Backend/view/object/capability.phtml:42
697
+ msgid "Add New Capability"
698
+ msgstr ""
699
+
700
+ #: Application/Backend/view/object/capability.phtml:46
701
+ msgid "Capability Name"
702
+ msgstr ""
703
+
704
+ #: Application/Backend/view/object/capability.phtml:47
705
+ msgid "Enter Capability"
706
+ msgstr ""
707
+
708
+ #: Application/Backend/view/object/menu.phtml:5
709
+ msgid ""
710
+ "Backend Menu feature does not restrict direct access to the page but rather "
711
+ "filters it from the menu. In order to completely restrict access to the "
712
+ "desired page, un-check the capability that is assigned to the menu [(the "
713
+ "capability is shown right next to the menu title)]."
714
+ msgstr ""
715
+
716
+ #: Application/Backend/view/object/metabox.phtml:3
717
+ msgid "Refresh"
718
+ msgstr ""
719
+
720
+ #: Application/Backend/view/object/metabox.phtml:19
721
+ msgid "Dashboard Widgets"
722
+ msgstr ""
723
+
724
+ #: Application/Backend/view/object/metabox.phtml:23
725
+ msgid "Frontend Widgets"
726
+ msgstr ""
727
+
728
+ #: Application/Backend/view/object/metabox.phtml:54
729
+ msgid ""
730
+ "The list of metaboxes and widgets is not initialized. Click Refresh button "
731
+ "above."
732
+ msgstr ""
733
+
734
+ #: Application/Backend/view/object/post.phtml:13
735
+ msgid "Root"
736
+ msgstr ""
737
+
738
+ #: Application/Backend/view/object/post.phtml:23
739
+ msgid "Title"
740
+ msgstr ""
741
+
742
+ #: Application/Backend/view/object/post.phtml:24
743
+ msgid "Actions"
744
+ msgstr ""
745
+
746
+ #: Application/Backend/view/object/post.phtml:32
747
+ #: Application/Backend/view/object/post.phtml:37
748
+ #: Application/Backend/view/object/post.phtml:141
749
+ msgid "Go Back"
750
+ msgstr ""
751
+
752
+ #: Application/Backend/view/object/post.phtml:45
753
+ msgid "Frontend"
754
+ msgstr ""
755
+
756
+ #: Application/Backend/view/object/post.phtml:51
757
+ #: Application/Backend/view/object/post.phtml:99
758
+ msgid "List"
759
+ msgstr ""
760
+
761
+ #: Application/Backend/view/object/post.phtml:53
762
+ msgid "Filter (exclude) post from any list on your website frontend."
763
+ msgstr ""
764
+
765
+ #: Application/Backend/view/object/post.phtml:54
766
+ #: Application/Backend/view/object/post.phtml:102
767
+ msgid "Warning!"
768
+ msgstr ""
769
+
770
+ #: Application/Backend/view/object/post.phtml:55
771
+ msgid ""
772
+ "If checked, this property may slowdown your website with large amount of "
773
+ "posts."
774
+ msgstr ""
775
+
776
+ #: Application/Backend/view/object/post.phtml:66
777
+ msgid "Read"
778
+ msgstr ""
779
+
780
+ #: Application/Backend/view/object/post.phtml:68
781
+ msgid ""
782
+ "Restrict access to read a post. If \"List\" option is not checked, a post "
783
+ "will be still listed on your website frontend."
784
+ msgstr ""
785
+
786
+ #: Application/Backend/view/object/post.phtml:79
787
+ msgid "Comment"
788
+ msgstr ""
789
+
790
+ #: Application/Backend/view/object/post.phtml:81
791
+ msgid ""
792
+ "Restrict access to comment on a post (if commenting feature is activated)."
793
+ msgstr ""
794
+
795
+ #: Application/Backend/view/object/post.phtml:93
796
+ msgid "Backend"
797
+ msgstr ""
798
+
799
+ #: Application/Backend/view/object/post.phtml:101
800
+ msgid "Filter (exclude) post from any list on your website backend."
801
+ msgstr ""
802
+
803
+ #: Application/Backend/view/object/post.phtml:103
804
+ msgid ""
805
+ "If checked, this property may slowdown your backend with large amount of "
806
+ "posts."
807
+ msgstr ""
808
+
809
+ #: Application/Backend/view/object/post.phtml:114
810
+ msgid "Edit"
811
+ msgstr ""
812
+
813
+ #: Application/Backend/view/object/post.phtml:116
814
+ msgid ""
815
+ "Restrict access to edit a post (also the link \"Edit\" and \"Quick Edit\" "
816
+ "will be removed below the post title)."
817
+ msgstr ""
818
+
819
+ #: Application/Backend/view/object/post.phtml:127
820
+ msgid "Delete"
821
+ msgstr ""
822
+
823
+ #: Application/Backend/view/object/post.phtml:129
824
+ msgid ""
825
+ "Restrict access to trash or permanently delete a post (also the link \"Trash"
826
+ "\" or \"Delete Permanently\" will be removed for a post)."
827
+ msgstr ""
aam.php CHANGED
@@ -3,44 +3,37 @@
3
  /**
4
  Plugin Name: Advanced Access Manager
5
  Description: Manage User and Role Access to WordPress Backend and Frontend.
6
- Version: 2.9.3
7
- Author: Vasyl Martyniuk <support@wpaam.com>
8
- Author URI: http://www.wpaam.com
9
 
10
- ===========================================================================
11
- LICENSE: This file is subject to the terms and conditions defined in *
12
- file 'license.txt', which is part of this source code package. *
13
- ===========================================================================
14
  *
15
  */
16
- require(dirname(__FILE__) . '/config.php');
17
 
18
  /**
19
- * Main Plugin Class
20
- *
21
- * Responsible for initialization and handling user requests to Advanced Access
22
- * Manager
23
- *
24
  * @package AAM
25
- * @author Vasyl Martyniuk <support@wpaam.com>
26
- * @copyright Copyright C 2013 Vasyl Martyniuk
27
- * @license GNU General Public License {@link http://www.gnu.org/licenses/}
28
  */
29
- class aam {
30
 
31
  /**
32
  * Single instance of itself
33
  *
34
- * @var aam
35
  *
36
  * @access private
37
  */
38
- private static $_aam = null;
39
 
40
  /**
41
  * User Subject
42
  *
43
- * @var aam_Control_Subject_User
44
  *
45
  * @access private
46
  */
@@ -54,634 +47,46 @@ class aam {
54
  * @access protected
55
  */
56
  protected function __construct() {
57
- //use some internal hooks to extend functionality
58
- add_filter('aam_access_objects', array($this, 'internalHooks'), 1, 2);
59
-
60
  //initialize the user subject
61
- $this->initializeUser();
62
-
63
- if (is_admin()) {
64
- //check if system requires update
65
- $this->checkUpdate();
66
-
67
- //print required JS & CSS
68
- add_action('admin_print_scripts', array($this, 'printScripts'));
69
- add_action('admin_print_styles', array($this, 'printStyles'));
70
-
71
- //manager Admin Menu
72
- if (aam_Core_API::isNetworkPanel()) {
73
- add_action('network_admin_menu', array($this, 'adminMenu'), 999);
74
- } else {
75
- add_action('admin_menu', array($this, 'adminMenu'), 999);
76
- }
77
- add_filter('parent_file', array($this, 'filterMenu'), 999, 1);
78
- //manager AAM Features Content rendering
79
- add_action('admin_action_features', array($this, 'features'));
80
- //manager AAM Ajax Requests
81
- add_action('wp_ajax_aam', array($this, 'ajax'));
82
- //manager WordPress metaboxes
83
- add_action("in_admin_header", array($this, 'metaboxes'), 999);
84
- //manager user search and authentication control
85
- add_filter('user_search_columns', array($this, 'searchColumns'));
86
- //terms & post restriction handlers
87
- add_filter('get_terms', array($this, 'getBackendTerms'), 10, 3);
88
- //post restrictions
89
- add_action('post_updated', array($this, 'postUpdate'), 10, 3);
90
- add_filter('page_row_actions', array($this, 'postRowActions'), 10, 2);
91
- add_filter('post_row_actions', array($this, 'postRowActions'), 10, 2);
92
- add_filter('tag_row_actions', array($this, 'tagRowActions'), 10, 2);
93
- add_action('admin_action_edit', array($this, 'adminActionEdit'), 10);
94
- //control permalink editing
95
- add_filter(
96
- 'get_sample_permalink_html', array($this, 'permalinkHTML'), 10, 4
97
- );
98
- //wp die hook
99
- add_filter('wp_die_handler', array($this, 'wpDie'), 10);
100
- //***For UI purposes***
101
- add_action('parse_tax_query', array($this, 'parseTaxQuery'), 10, 1);
102
- add_filter('editable_roles', array($this, 'editableRoles'), 999);
103
- //control Admin area
104
- add_action('admin_init', array($this, 'adminInit'));
105
  } else {
106
- //make sure that subject is initiated during the login
107
- add_action('wp_login', array($this, 'login'), 0, 2);
108
- //control WordPress frontend
109
- add_action('wp', array($this, 'wp'), 999);
110
- //filter navigation pages & taxonomies
111
- add_filter('get_pages', array($this, 'getPages'));
112
- add_filter('wp_get_nav_menu_items', array($this, 'getNavigationMenu'));
113
- //widget filters
114
- add_filter('sidebars_widgets', array($this, 'widgetFilter'), 999);
115
- //get control over commenting stuff
116
- add_filter('comments_open', array($this, 'commentOpen'), 10, 2);
117
- //user login control
118
- add_filter('wp_authenticate_user', array($this, 'authenticate'), 1, 2);
119
- //terms & post restriction handlers
120
- add_filter('get_terms', array($this, 'getFrontendTerms'), 10, 3);
121
- }
122
-
123
- //load extensions only when admin
124
- $this->loadExtensions();
125
-
126
- //add shutdown action
127
- add_action('shutdown', array($this, 'shutdown'), 1);
128
- }
129
-
130
- /**
131
- * Control Admin Area access
132
- *
133
- * @return void
134
- *
135
- * @access public
136
- */
137
- public function adminInit() {
138
- global $plugin_page;
139
-
140
- //compile menu
141
- if (empty($plugin_page)){
142
- $menu = basename(aam_Core_Request::server('SCRIPT_NAME'));
143
- if ($query = trim(aam_Core_Request::server('QUERY_STRING'))) {
144
- $menu .= '?' . $query;
145
- }
146
- } else {
147
- $menu = $plugin_page;
148
- }
149
-
150
- $has = $this->getUser()->getObject(aam_Control_Object_Menu::UID)->has($menu);
151
- if ($has === true){
152
- $this->reject();
153
- } elseif(is_null($has)
154
- && aam_Core_ConfigPress::getParam('aam.menu.undefined') == 'deny'){
155
- $this->reject();
156
- }
157
- }
158
-
159
- /**
160
- * Check if system requires update
161
- *
162
- * @return void
163
- *
164
- * @access public
165
- */
166
- public function checkUpdate() {
167
- if (aam_Core_API::getBlogOption('aam_updated', '', 1) != AAM_VERSION) {
168
- $update = new aam_Core_Update($this);
169
- $update->run();
170
- }
171
- }
172
-
173
- /**
174
- * Control Frontend commenting freature
175
- *
176
- * @param boolean $open
177
- * @param int $post_id
178
- *
179
- * @return boolean
180
- *
181
- * @access public
182
- */
183
- public function commentOpen($open, $post_id) {
184
- $control = $this->getUser()->getObject(
185
- aam_Control_Object_Post::UID, $post_id
186
- );
187
- if ($control->has('frontend', aam_Control_Object_Post::ACTION_COMMENT)) {
188
- $open = false;
189
- }
190
-
191
- return $open;
192
- }
193
-
194
- /**
195
- * Control edit permalink feature
196
- *
197
- * @param string $html
198
- * @param int $id
199
- * @param type $new_title
200
- * @param type $new_slug
201
- *
202
- * @return string
203
- */
204
- public function permalinkHTML($html, $id, $new_title, $new_slug) {
205
- if (aam_Core_ConfigPress::getParam('aam.control_permalink') === 'true') {
206
- if ($this->getUser()->hasCapability('manage_permalink') === false) {
207
- $html = '';
208
- }
209
  }
210
 
211
- return $html;
212
- }
213
-
214
- /**
215
- * Get Post ID
216
- *
217
- * Replication of the same mechanism that is in wp-admin/post.php
218
- *
219
- * @return WP_Post|null
220
- *
221
- * @access public
222
- */
223
- public function getPost() {
224
- if (get_post()) {
225
- $post = get_post();
226
- } elseif ($post_id = aam_Core_Request::get('post')) {
227
- $post = get_post($post_id);
228
- } elseif ($post_id = aam_Core_Request::get('post_ID')) {
229
- $post = get_post($post_id);
230
- } else {
231
- $post = null;
232
- }
233
-
234
- return $post;
235
- }
236
-
237
- /**
238
- * Filter backend term list
239
- *
240
- * @param array $terms
241
- * @param array $taxonomies
242
- * @param array $args
243
- *
244
- * @return array
245
- *
246
- * @access public
247
- */
248
- public function getBackendTerms($terms, $taxonomies, $args) {
249
- return $this->getTerms('backend', $terms);
250
- }
251
-
252
- /**
253
- * Filter frontend term list
254
- *
255
- * @param array $terms
256
- * @param array $taxonomies
257
- * @param array $args
258
- *
259
- * @return array
260
- *
261
- * @access public
262
- */
263
- public function getFrontendTerms($terms, $taxonomies, $args) {
264
- return $this->getTerms('frontend', $terms);
265
- }
266
-
267
- /**
268
- * Filter terms based on area
269
- *
270
- * @param string $area
271
- * @param array $terms
272
- *
273
- * @return array
274
- *
275
- * @access public
276
- */
277
- public function getTerms($area, $terms) {
278
- if (is_array($terms)) {
279
- foreach ($terms as $i => $term) {
280
- if (is_object($term)) {
281
- $object = $this->getUser()->getObject(
282
- aam_Control_Object_Term::UID, $term->term_id
283
- );
284
- if ($object->has($area, aam_Control_Object_Term::ACTION_LIST)) {
285
- unset($terms[$i]);
286
- }
287
- }
288
- }
289
- }
290
-
291
- return $terms;
292
- }
293
-
294
- /**
295
- * Filter Pages that should be excluded in frontend
296
- *
297
- * @param array $pages
298
- *
299
- * @return array
300
- *
301
- * @access public
302
- * @todo Cache this process
303
- */
304
- public function getPages($pages) {
305
- if (is_array($pages)) {
306
- foreach ($pages as $i => $page) {
307
- $object = $this->getUser()->getObject(
308
- aam_Control_Object_Post::UID, $page->ID
309
- );
310
- if ($object->has('frontend', aam_Control_Object_Post::ACTION_EXCLUDE)) {
311
- unset($pages[$i]);
312
- }
313
- }
314
- }
315
-
316
- return $pages;
317
- }
318
-
319
- /**
320
- * Filter Navigation menu
321
- *
322
- * @param array $pages
323
- *
324
- * @return array
325
- *
326
- * @access public
327
- */
328
- public function getNavigationMenu($pages) {
329
- if (is_array($pages)) {
330
- foreach ($pages as $i => $page) {
331
- if ($page->type === 'taxonomy') {
332
- $object = $this->getUser()->getObject(
333
- aam_Control_Object_Term::UID, $page->object_id
334
- );
335
- $exclude = aam_Control_Object_Term::ACTION_EXCLUDE;
336
- } else {
337
- $object = $this->getUser()->getObject(
338
- aam_Control_Object_Post::UID, $page->object_id
339
- );
340
- $exclude = aam_Control_Object_Post::ACTION_EXCLUDE;
341
- }
342
-
343
- if ($object->has('frontend', $exclude)) {
344
- unset($pages[$i]);
345
- }
346
- }
347
- }
348
-
349
- return $pages;
350
- }
351
-
352
- /**
353
- * Filter Frontend widgets
354
- *
355
- * @param array $widgets
356
- *
357
- * @return array
358
- *
359
- * @access public
360
- */
361
- public function widgetFilter($widgets) {
362
- return $this->getUser()->getObject(
363
- aam_Control_Object_Metabox::UID)->filterFrontend($widgets);
364
- }
365
-
366
- /**
367
- * Control Edit Post/Term
368
- *
369
- * Make sure that current user does not have access to edit Post or Term
370
- *
371
- * @return void
372
- *
373
- * @access public
374
- */
375
- public function adminActionEdit() {
376
- $user = $this->getUser();
377
- if (aam_Core_Request::request('taxonomy')) {
378
- $control = $user->getObject(
379
- aam_Control_Object_Term::UID, aam_Core_Request::request('tag_ID')
380
- );
381
- if ($control->has('backend', aam_Control_Object_Post::ACTION_EDIT)) {
382
- $this->reject();
383
- }
384
- } elseif ($post = $this->getPost()) {
385
- $control = $user->getObject(aam_Control_Object_Post::UID, $post->ID);
386
- if ($control->has('backend', aam_Control_Object_Post::ACTION_EDIT)) {
387
- $this->reject();
388
- }
389
- }
390
- }
391
-
392
- /**
393
- * Reject the request
394
- *
395
- * Redirect or die the execution based on ConfigPress settings
396
- *
397
- * @return void
398
- *
399
- * @access public
400
- */
401
- public function reject() {
402
- if (is_admin()) {
403
- $redirect = aam_Core_ConfigPress::getParam(
404
- 'backend.access.deny.redirect'
405
- );
406
- $message = aam_Core_ConfigPress::getParam(
407
- 'backend.access.deny.message', __('Access Denied', 'aam')
408
- );
409
- } else {
410
- $redirect = aam_Core_ConfigPress::getParam(
411
- 'frontend.access.deny.redirect'
412
- );
413
- $message = aam_Core_ConfigPress::getParam(
414
- 'frontend.access.deny.message',
415
- __('Access Denied', 'aam')
416
- );
417
- }
418
-
419
- if (filter_var($redirect, FILTER_VALIDATE_URL)) {
420
- wp_redirect($redirect);
421
- exit;
422
- } elseif (is_int($redirect)) {
423
- wp_redirect(get_post_permalink($redirect));
424
- exit;
425
- } else {
426
- wp_die($message);
427
- }
428
- }
429
-
430
- /**
431
- * Take control over wp_die function
432
- *
433
- * @param callback $function
434
- *
435
- * @return void
436
- *
437
- * @access public
438
- */
439
- public function wpDie($function) {
440
- $redirect = aam_Core_ConfigPress::getParam('backend.access.deny.redirect');
441
- $message = aam_Core_ConfigPress::getParam(
442
- 'backend.access.deny.message', __('Access Denied', 'aam')
443
- );
444
 
445
- if (filter_var($redirect, FILTER_VALIDATE_URL)) {
446
- wp_redirect($redirect);
447
- exit;
448
- } elseif (is_int($redirect)) {
449
- wp_redirect(get_post_permalink($redirect));
450
- exit;
451
  } else {
452
- call_user_func($function, $message, '', array());
453
- }
454
- }
455
-
456
- /**
457
- * Term Quick Menu Actions Filtering
458
- *
459
- * @param array $actions
460
- * @param object $term
461
- *
462
- * @return array
463
- *
464
- * @access public
465
- */
466
- public function tagRowActions($actions, $term) {
467
- $control = $this->getUser()->getObject(
468
- aam_Control_Object_Term::UID, $term->term_id
469
- );
470
- //filter edit menu
471
- if ($control->has('backend', aam_Control_Object_Post::ACTION_EDIT)) {
472
- if (isset($actions['edit'])) {
473
- unset($actions['edit']);
474
- }
475
- if (isset($actions['inline hide-if-no-js'])) {
476
- unset($actions['inline hide-if-no-js']);
477
- }
478
- }
479
-
480
- //filter delete menu
481
- if ($control->has('backend', aam_Control_Object_Post::ACTION_DELETE)) {
482
- if (isset($actions['delete'])) {
483
- unset($actions['delete']);
484
- }
485
  }
486
-
487
- return $actions;
488
  }
489
 
490
  /**
491
- * Post Quick Menu Actions Filtering
492
- *
493
- * @param array $actions
494
- * @param WP_Post $post
495
  *
496
- * @return array
497
- *
498
- * @access public
499
- */
500
- public function postRowActions($actions, $post) {
501
- $control = $this->getUser()->getObject(
502
- aam_Control_Object_Post::UID, $post->ID
503
- );
504
- //filter edit menu
505
- if ($control->has('backend', aam_Control_Object_Post::ACTION_EDIT)) {
506
- if (isset($actions['edit'])) {
507
- unset($actions['edit']);
508
- }
509
- if (isset($actions['inline hide-if-no-js'])) {
510
- unset($actions['inline hide-if-no-js']);
511
- }
512
- }
513
- //filter trash menu
514
- if ($control->has('backend', aam_Control_Object_Post::ACTION_TRASH)) {
515
- if (isset($actions['trash'])) {
516
- unset($actions['trash']);
517
- }
518
- }
519
-
520
- //filter delete menu
521
- if ($control->has('backend', aam_Control_Object_Post::ACTION_DELETE)) {
522
- if (isset($actions['delete'])) {
523
- unset($actions['delete']);
524
- }
525
- }
526
-
527
- return $actions;
528
- }
529
-
530
- /**
531
- * Main Frontend access control hook
532
  *
533
  * @return void
534
  *
535
  * @access public
536
- * @global WP_Query $wp_query
537
- * @global WP_Post $post
538
  */
539
- public function wp() {
540
- global $wp_query, $post;
541
-
542
- $user = $this->getUser();
543
- if (is_category()) {
544
- $category = $wp_query->get_queried_object();
545
- if ($user->getObject(aam_Control_Object_Term::UID, $category->term_id
546
- )->has('frontend', aam_Control_Object_Term::ACTION_BROWSE)) {
547
- $this->reject();
548
- }
549
- } elseif (!$wp_query->is_home() && ($post instanceof WP_Post)) {
550
- if ($user->getObject(aam_Control_Object_Post::UID, $post->ID
551
- )->has('frontend', aam_Control_Object_Post::ACTION_READ)) {
552
- $this->reject();
553
- }
554
- }
555
- }
556
-
557
- /**
558
- * Register Internal miscellenious functionality
559
- *
560
- * @param array $objects
561
- * @param aam_Control_Subject $subject
562
- *
563
- * @return array
564
- *
565
- * @access public
566
- */
567
- public function internalHooks($objects, $subject) {
568
- $objects[aam_Control_Object_Event::UID] = new aam_Control_Object_Event(
569
- $subject
570
- );
571
-
572
- return $objects;
573
- }
574
-
575
- /**
576
- * Event Handler
577
- *
578
- * @param int $post_ID
579
- * @param WP_Post $post_after
580
- * @param WP_Post $post_before
581
- *
582
- * @return void
583
- *
584
- * @access public
585
- */
586
- public function postUpdate($post_ID, $post_after, $post_before = null) {
587
- $events = $this->getUser()->getObject(
588
- aam_Control_Object_Event::UID)->getOption();
589
-
590
- foreach ($events as $event) {
591
- if ($post_after->post_type == $event['post_type']) {
592
- if ($event['event'] == 'status_change') {
593
- if ($event['event_specifier'] == $post_after->post_status) {
594
- $this->triggerAction(
595
- $event, $post_ID, $post_after, $post_before
596
- );
597
- }
598
- } elseif ($post_before && $event['event'] == 'content_change') {
599
- if ($post_before->post_content != $post_after->post_content) {
600
- $this->triggerAction(
601
- $event, $post_ID, $post_after, $post_before
602
- );
603
- }
604
- }
605
- }
606
- }
607
- }
608
-
609
- /**
610
- * Trigger Action based on settings
611
- *
612
- * @param array $event
613
- * @param int $post_ID
614
- * @param WP_Post $post_after
615
- * @param WP_Post $post_before
616
- *
617
- * @global wpdb $wpdb
618
- * @global array $wp_post_types
619
- *
620
- * @return void
621
- *
622
- * @access public
623
- */
624
- public function triggerAction($event, $post_ID, $post_after, $post_before) {
625
- global $wpdb, $wp_post_types;
626
-
627
- if ($event['action'] == 'notify') {
628
- $subject = $wp_post_types[$event['post_type']]->labels->name . ' ';
629
- $subject .= $post_ID . ' has been changed by ' . get_current_user();
630
- $subject = apply_filters('aam_notification_subject', $subject);
631
-
632
- $message = apply_filters(
633
- 'aam_notification_message', get_edit_post_link($post_ID)
634
- );
635
-
636
- wp_mail($event['action_specifier'], $subject, $message);
637
- } else if ($event['action'] == 'change_status') {
638
- $wpdb->update(
639
- $wpdb->posts,
640
- array('post_status' => $event['action_specifier']),
641
- array('ID' => $post_ID)
642
- );
643
- } else if ($event['action'] == 'custom') {
644
- if (is_callable($event['callback'])) {
645
- call_user_func(
646
- $event['callback'], $post_ID, $post_after, $post_before
647
- );
648
- }
649
- }
650
- }
651
-
652
- /**
653
- * Add extra column to search in for User search
654
- *
655
- * @param array $columns
656
- *
657
- * @return array
658
- *
659
- * @access public
660
- */
661
- public function searchColumns($columns) {
662
- $columns[] = 'display_name';
663
-
664
- return $columns;
665
  }
666
 
667
  /**
668
- * Control User Block flag
669
- *
670
- * @param WP_Error $user
671
- *
672
- * @return WP_Error|WP_User
673
- *
674
  * @access public
675
  */
676
- public function authenticate($user) {
677
- if ($user->user_status == 1) {
678
- $user = new WP_Error();
679
- $user->add(
680
- 'authentication_failed', '<strong>ERROR</strong>: User is blocked'
681
- );
682
- }
683
-
684
- return $user;
685
  }
686
 
687
  /**
@@ -691,450 +96,71 @@ class aam {
691
  *
692
  * @access public
693
  */
694
- public function isAAMScreen() {
695
- return (aam_Core_Request::get('page') == 'aam' ? true : false);
696
- }
697
-
698
- /**
699
- * Make sure that AAM Extension UI Page is used
700
- *
701
- * @return boolean
702
- *
703
- * @access public
704
- */
705
- public function isAAMExtensionScreen() {
706
- return (aam_Core_Request::get('page') == 'aam-ext' ? true : false);
707
- }
708
-
709
- /**
710
- * Make sure that AAM ConfigPress UI Page is used
711
- *
712
- * @return boolean
713
- *
714
- * @access public
715
- */
716
- public function isAAMConfigPressScreen() {
717
- return (aam_Core_Request::get('page') == 'aam-configpress' ? true : false);
718
- }
719
-
720
- /**
721
- * Print necessary styles
722
- *
723
- * @return void
724
- *
725
- * @access public
726
- */
727
- public function printStyles() {
728
- if ($this->isAAMScreen()) {
729
- wp_enqueue_style('dashboard');
730
- wp_enqueue_style('global');
731
- wp_enqueue_style('wp-admin');
732
- wp_enqueue_style('aam-ui-style', AAM_MEDIA_URL . 'css/jquery-ui.css');
733
- wp_enqueue_style('aam-common-style', AAM_MEDIA_URL . 'css/common.css');
734
- wp_enqueue_style(
735
- 'aam-style',
736
- AAM_MEDIA_URL . 'css/aam.css',
737
- array('aam-common-style')
738
- );
739
- wp_enqueue_style('aam-datatables', AAM_MEDIA_URL . 'css/jquery.dt.css');
740
- wp_enqueue_style('wp-pointer');
741
- wp_enqueue_style(
742
- 'aam-treeview', AAM_MEDIA_URL . 'css/jquery.treeview.css'
743
- );
744
- } elseif ($this->isAAMExtensionScreen()) {
745
- wp_enqueue_style('dashboard');
746
- wp_enqueue_style('global');
747
- wp_enqueue_style('wp-admin');
748
- wp_enqueue_style('aam-ui-style', AAM_MEDIA_URL . 'css/jquery-ui.css');
749
- wp_enqueue_style('aam-common-style', AAM_MEDIA_URL . 'css/common.css');
750
- wp_enqueue_style(
751
- 'aam-style',
752
- AAM_MEDIA_URL . 'css/extension.css',
753
- array('aam-common-style')
754
- );
755
- wp_enqueue_style('aam-datatables', AAM_MEDIA_URL . 'css/jquery.dt.css');
756
- } elseif ($this->isAAMConfigPressScreen()) {
757
- wp_enqueue_style('aam-common-style', AAM_MEDIA_URL . 'css/common.css');
758
- wp_enqueue_style(
759
- 'aam-style',
760
- AAM_MEDIA_URL . 'css/configpress.css',
761
- array('aam-common-style')
762
- );
763
- }
764
-
765
- }
766
-
767
- /**
768
- * Print necessary scripts
769
- *
770
- * @return void
771
- *
772
- * @access public
773
- */
774
- public function printScripts() {
775
- if ($this->isAAMScreen()) {
776
- wp_enqueue_script('postbox');
777
- wp_enqueue_script('dashboard');
778
- wp_enqueue_script('aam-admin', AAM_MEDIA_URL . 'js/aam.js');
779
- wp_enqueue_script('aam-datatables', AAM_MEDIA_URL . 'js/jquery.dt.js');
780
- wp_enqueue_script(
781
- 'aam-treeview', AAM_MEDIA_URL . 'js/jquery.treeview.js'
782
- );
783
- wp_enqueue_script('jquery-ui-core');
784
- wp_enqueue_script('jquery-effects-core');
785
- wp_enqueue_script('jquery-ui-widget');
786
- wp_enqueue_script('jquery-ui-tabs');
787
- wp_enqueue_script('jquery-ui-accordion');
788
- wp_enqueue_script('jquery-ui-progressbar');
789
- wp_enqueue_script('jquery-ui-dialog');
790
- wp_enqueue_script('jquery-ui-button');
791
- wp_enqueue_script('jquery-ui-sortable');
792
- wp_enqueue_script('jquery-ui-menu');
793
- wp_enqueue_script('jquery-effects-highlight');
794
- wp_enqueue_script('wp-pointer');
795
-
796
- $localization = array(
797
- 'nonce' => wp_create_nonce('aam_ajax'),
798
- 'siteURI' => admin_url('index.php'),
799
- 'ajaxurl' => admin_url('admin-ajax.php'),
800
- 'addUserURI' => admin_url('user-new.php'),
801
- 'editUserURI' => admin_url('user-edit.php'),
802
- 'defaultSegment' => array(
803
- 'role' => $this->getDefaultEditableRole(),
804
- 'blog' => get_current_blog_id(),
805
- 'user' => 0
806
- ),
807
- 'contextualMenu' => get_user_meta(
808
- get_current_user_id(), 'aam_contextual_menu', true
809
- ),
810
- 'labels' => aam_View_Manager::uiLabels()
811
- );
812
- wp_localize_script('aam-admin', 'aamLocal', $localization);
813
- } elseif ($this->isAAMExtensionScreen()) {
814
- wp_enqueue_script('postbox');
815
- wp_enqueue_script('dashboard');
816
- wp_enqueue_script('jquery-ui-core');
817
- wp_enqueue_script('jquery-effects-core');
818
- wp_enqueue_script('jquery-ui-widget');
819
- wp_enqueue_script('jquery-ui-dialog');
820
- wp_enqueue_script('jquery-ui-button');
821
- wp_enqueue_script('jquery-effects-highlight');
822
- wp_enqueue_script('aam-admin', AAM_MEDIA_URL . 'js/extension.js');
823
- wp_enqueue_script('aam-datatables', AAM_MEDIA_URL . 'js/jquery.dt.js');
824
-
825
- $localization = array(
826
- 'nonce' => wp_create_nonce('aam_ajax'),
827
- 'ajaxurl' => admin_url('admin-ajax.php'),
828
- 'labels' => aam_View_Manager::uiLabels()
829
- );
830
- wp_localize_script('aam-admin', 'aamLocal', $localization);
831
- } elseif ($this->isAAMConfigPressScreen()) {
832
- wp_enqueue_script('jquery-ui-core');
833
- wp_enqueue_script('aam-admin', AAM_MEDIA_URL . 'js/configpress.js');
834
-
835
- $localization = array(
836
- 'nonce' => wp_create_nonce('aam_ajax'),
837
- 'ajaxurl' => admin_url('admin-ajax.php'),
838
- );
839
- wp_localize_script('aam-admin', 'aamLocal', $localization);
840
- }
841
- }
842
-
843
- /**
844
- * Get first editable role
845
- *
846
- * @return string
847
- *
848
- * @access public
849
- */
850
- public function getDefaultEditableRole(){
851
- $role_keys = array_keys(get_editable_roles());
852
-
853
- return array_shift($role_keys);
854
  }
855
 
856
  /**
857
- * Render list of AAM Features
858
- *
859
- * Must be separate from Ajax call because WordPress ajax does not load a lot of
860
- * UI stuff
861
  *
862
- * @return void
863
  *
864
  * @access public
 
865
  */
866
- public function features() {
867
- check_ajax_referer('aam_ajax');
868
- try{
869
- $model = new aam_View_Manager;
870
- $model->retrieveFeatures();
871
- } catch (Exception $e){
872
- echo $e->getMessage();
873
  }
874
- die();
875
- }
876
 
877
- /**
878
- * Handle Ajax calls to AAM
879
- *
880
- * @return void
881
- *
882
- * @access public
883
- */
884
- public function ajax() {
885
- check_ajax_referer('aam_ajax');
886
-
887
- //clean buffer to make sure that nothing messing around with system
888
- while (@ob_end_clean());
889
-
890
- //process ajax request
891
- try{
892
- $model = new aam_View_Manager();
893
- echo $model->processAjax();
894
- } catch (Exception $e){
895
- echo '-1';
896
- }
897
- die();
898
  }
899
 
900
  /**
901
- * Hanlde Metabox initialization process
902
- *
 
 
903
  * @return void
904
- *
905
  * @access public
906
  */
907
- public function metaboxes() {
908
- global $post;
909
-
910
- //make sure that nobody is playing with screen options
911
- if ($post instanceof WP_Post) {
912
- $screen = $post->post_type;
913
- } elseif ($screen_object = get_current_screen()) {
914
- $screen = $screen_object->id;
915
- } else {
916
- $screen = '';
917
  }
918
-
919
- if (aam_Core_Request::get('aam_meta_init')) {
920
- try {
921
- $model = new aam_View_Metabox;
922
- $model->run($screen);
923
- } catch (Exception $e){}
924
- } else {
925
- $this->getUser()->getObject(aam_Control_Object_Metabox::UID)
926
- ->filterBackend($screen);
927
- }
928
- }
929
-
930
- /**
931
- * Register Admin Menu
932
- *
933
- * @return void
934
- *
935
- * @access public
936
- */
937
- public function adminMenu() {
938
- //register the menu
939
- add_menu_page(
940
- __('AAM', 'aam'),
941
- __('AAM', 'aam'),
942
- aam_Core_ConfigPress::getParam(
943
- 'aam.page.access_control.capability', 'administrator'
944
- ),
945
- 'aam',
946
- array($this, 'content'),
947
- AAM_BASE_URL . 'active-menu.png'
948
- );
949
- //register submenus
950
- add_submenu_page(
951
- 'aam',
952
- __('Access Control', 'aam'),
953
- __('Access Control', 'aam'),
954
- aam_Core_ConfigPress::getParam(
955
- 'aam.page.access_control.capability', 'administrator'
956
- ),
957
- 'aam',
958
- array($this, 'content')
959
- );
960
- add_submenu_page(
961
- 'aam',
962
- __('ConfigPress', 'aam'),
963
- __('ConfigPress', 'aam'),
964
- aam_Core_ConfigPress::getParam(
965
- 'aam.page.configpress.capability', 'administrator'
966
- ),
967
- 'aam-configpress',
968
- array($this, 'configPressContent')
969
- );
970
- add_submenu_page(
971
- 'aam',
972
- __('Extensions', 'aam'),
973
- __('Extensions', 'aam'),
974
- aam_Core_ConfigPress::getParam(
975
- 'aam.page.extensions.capability', 'administrator'
976
- ),
977
- 'aam-ext',
978
- array($this, 'extensionContent')
979
- );
980
-
981
- }
982
-
983
- /**
984
- * Filter the Admin Menu
985
- *
986
- * @param string $parent_file
987
- *
988
- * @return string
989
- *
990
- * @access public
991
- */
992
- public function filterMenu($parent_file){
993
- //filter admin menu
994
- $this->getUser()->getObject(aam_Control_Object_Menu::UID)->filter();
995
-
996
- return $parent_file;
997
  }
998
 
999
  /**
1000
- * Take control over Tax Query parser
1001
- *
1002
- * By default WordPress consider non-empty term & category pair as search by
1003
- * slug. This is weird assumption and there is no other way to force core to
1004
- * search posts within custom taxonomy rather than take control over it with
1005
- * action parse_tax_query.
1006
- *
1007
- * @param WP_Query $query
1008
- *
1009
  * @return void
1010
- *
1011
- * @access public
1012
- */
1013
- public function parseTaxQuery($query) {
1014
- if (!empty($query->query['term']) && !empty($query->query['taxonomy'])) {
1015
- foreach ($query->tax_query->queries as $id => $dump) {
1016
- $query->tax_query->queries[$id]['field'] = 'term_id';
1017
- }
1018
- }
1019
- }
1020
-
1021
- /**
1022
- * Filter list of editable roles
1023
- *
1024
- * Does not allow for current user manager roles that have same or higher Level
1025
- *
1026
- * @param array $roles
1027
- *
1028
- * @return array
1029
- *
1030
  * @access public
1031
  */
1032
- public function editableRoles($roles){
1033
- $filtered = array();
1034
- $level = aam_Core_API::getUserLevel();
1035
 
1036
-
1037
- //check if super admin is specified
1038
- if (aam_Core_API::isSuperAdmin() === false){
1039
- foreach ($roles as $role => $info) {
1040
- if (empty($info['capabilities']["level_{$level}"])
1041
- || !$info['capabilities']["level_{$level}"]) {
1042
- $filtered[$role] = $info;
1043
- }
1044
- }
1045
- } else {
1046
- $filtered = $roles;
1047
  }
1048
 
1049
- return $filtered;
1050
- }
1051
 
1052
- /**
1053
- * Render Main Content page
1054
- *
1055
- * @return void
1056
- *
1057
- * @access public
1058
- */
1059
- public function content() {
1060
- try {
1061
- $manager = new aam_View_Manager();
1062
- echo $manager->run();
1063
- } catch (Exception $e) {
1064
- echo $e->getMessage();
1065
- }
1066
- }
1067
 
1068
- /**
1069
- * Render ConfigPress Page
1070
- *
1071
- * @return void
1072
- *
1073
- * @access public
1074
- */
1075
- public function configPressContent() {
1076
- $manager = new aam_View_ConfigPress();
1077
- echo $manager->run();
1078
- }
1079
-
1080
- /**
1081
- * Extension content page
1082
- *
1083
- * @return void
1084
- *
1085
- * @access public
1086
- */
1087
- public function extensionContent() {
1088
- $manager = new aam_View_Extension();
1089
- echo $manager->run();
1090
- }
1091
-
1092
- /**
1093
- * Initialize the AAM plugin
1094
- *
1095
- * @return void
1096
- *
1097
- * @access public
1098
- * @static
1099
- */
1100
- public static function initialize() {
1101
- if (is_null(self::$_aam)) {
1102
- self::$_aam = new self;
1103
- }
1104
- }
1105
-
1106
- /**
1107
- * Initialize the current user
1108
- *
1109
- * Whether it is logged in user or visitor
1110
- *
1111
- * @return void
1112
- *
1113
- * @access public
1114
- */
1115
- public function initializeUser() {
1116
- if ($user_id = get_current_user_id()) {
1117
- $this->setUser(new aam_Control_Subject_User($user_id));
1118
- } else {
1119
- $this->setUser(new aam_Control_Subject_Visitor(''));
1120
  }
1121
  }
1122
-
1123
- /**
1124
- * User Login Hook
1125
- *
1126
- * This hook track the user's successfull login and update current subject
1127
- *
1128
- * @param string $username User Login name
1129
- * @param Wp_User $user Current user object
1130
- *
1131
- * @return void
1132
- *
1133
- * @access public
1134
- */
1135
- public function login($username, $user) {
1136
- $this->setUser(new aam_Control_Subject_User($user->ID));
1137
- }
1138
 
1139
  /**
1140
  * Uninstall hook
@@ -1147,64 +173,40 @@ class aam {
1147
  */
1148
  public static function uninstall() {
1149
  global $wp_filesystem;
 
 
 
1150
 
1151
- //remove the content directory
1152
- if (!defined(AAM_CONTENT_DIR_FAILURE) && WP_Filesystem()) {
1153
- $wp_filesystem->rmdir(AAM_TEMP_DIR, true);
1154
- }
1155
- }
1156
 
1157
- /**
1158
- * Get Current User Subject
1159
- *
1160
- * @return aam_Control_Subject_User
1161
- *
1162
- * @access public
1163
- */
1164
- public function getUser() {
1165
- return $this->_user;
1166
- }
1167
 
1168
- /**
1169
- * Set Current User Subject
1170
- *
1171
- * @param aam_Control_Subject $user
1172
- *
1173
- * @return void
1174
- *
1175
- * @access public
1176
- */
1177
- public function setUser(aam_Control_Subject $user) {
1178
- $this->_user = $user;
1179
- }
1180
-
1181
- /**
1182
- * Execute before shutdown actions
1183
- *
1184
- * @return void
1185
- *
1186
- * @access public
1187
- */
1188
- public function shutdown() {
1189
- $this->getUser()->saveCache();
1190
- }
1191
-
1192
- /**
1193
- * Load Installed extensions
1194
- *
1195
- * @return void
1196
- *
1197
- * @access protected
1198
- */
1199
- protected function loadExtensions() {
1200
- aam_Core_Repository::getInstance($this)->load();
1201
  }
1202
 
1203
  }
1204
 
1205
- //the highest priority (higher the core)
1206
- //this is important to have to catch events like register core post types
1207
- add_action('init', 'aam::initialize', -1);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1208
 
1209
- //register_activation_hook(__FILE__, array('aam', 'activate'));
1210
- register_uninstall_hook(__FILE__, array('aam', 'uninstall'));
 
 
3
  /**
4
  Plugin Name: Advanced Access Manager
5
  Description: Manage User and Role Access to WordPress Backend and Frontend.
6
+ Version: 3.0
7
+ Author: Vasyl Martyniuk <vasyl@vasyltech.com>
8
+ Author URI: http://www.vasyltech.com
9
 
10
+ -------
11
+ LICENSE: This file is subject to the terms and conditions defined in
12
+ file 'license.txt', which is part of Advanced Access Manager source package.
 
13
  *
14
  */
 
15
 
16
  /**
17
+ * Main plugin's class
18
+ *
 
 
 
19
  * @package AAM
20
+ * @author Vasyl Martyniuk <vasyl@vasyltech.com>
 
 
21
  */
22
+ class AAM {
23
 
24
  /**
25
  * Single instance of itself
26
  *
27
+ * @var AAM
28
  *
29
  * @access private
30
  */
31
+ private static $_instance = null;
32
 
33
  /**
34
  * User Subject
35
  *
36
+ * @var AAM_Core_Subject_User|AAM_Core_Subject_Visitor
37
  *
38
  * @access private
39
  */
47
  * @access protected
48
  */
49
  protected function __construct() {
 
 
 
50
  //initialize the user subject
51
+ if (get_current_user_id()) {
52
+ $this->setUser(new AAM_Core_Subject_User(get_current_user_id()));
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
53
  } else {
54
+ $this->setUser(new AAM_Core_Subject_Visitor(''));
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
55
  }
56
 
57
+ //load all installed extension
58
+ AAM_Core_Repository::getInstance()->load();
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
59
 
60
+ //bootstrap the correct interface
61
+ if (is_admin()) {
62
+ AAM_Backend_Manager::bootstrap();
 
 
 
63
  } else {
64
+ AAM_Frontend_Manager::bootstrap();
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
65
  }
 
 
66
  }
67
 
68
  /**
69
+ * Set Current User
 
 
 
70
  *
71
+ * @param AAM_Core_Subject $user
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
72
  *
73
  * @return void
74
  *
75
  * @access public
 
 
76
  */
77
+ protected function setUser(AAM_Core_Subject $user) {
78
+ $this->_user = $user;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
79
  }
80
 
81
  /**
82
+ * Get current user
83
+ *
84
+ * @return AAM_Core_Subject
85
+ *
 
 
86
  * @access public
87
  */
88
+ public static function getUser() {
89
+ return self::getInstance()->_user;
 
 
 
 
 
 
 
90
  }
91
 
92
  /**
96
  *
97
  * @access public
98
  */
99
+ public static function isAAM() {
100
+ return (AAM_Core_Request::get('page') == 'aam');
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
101
  }
102
 
103
  /**
104
+ * Initialize the AAM plugin
 
 
 
105
  *
106
+ * @return AAM
107
  *
108
  * @access public
109
+ * @static
110
  */
111
+ public static function getInstance() {
112
+ if (is_null(self::$_instance)) {
113
+ load_plugin_textdomain(AAM_KEY, false, dirname(__FILE__) . '/Lang');
114
+ self::$_instance = new self;
 
 
 
115
  }
 
 
116
 
117
+ return self::$_instance;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
118
  }
119
 
120
  /**
121
+ * Run daily routine
122
+ *
123
+ * Check server extension versions
124
+ *
125
  * @return void
126
+ *
127
  * @access public
128
  */
129
+ public static function cron() {
130
+ //grab the server extension list
131
+ $response = AAM_Core_Server::check();
132
+ if (!is_wp_error($response)) {
133
+ AAM_Core_API::updateOption('aam-extension-list', $response);
 
 
 
 
 
134
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
135
  }
136
 
137
  /**
138
+ * Create aam folder
139
+ *
 
 
 
 
 
 
 
140
  * @return void
141
+ *
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
142
  * @access public
143
  */
144
+ public static function activate() {
145
+ global $wp_filesystem, $wp_version;
 
146
 
147
+ //check PHP Version
148
+ if (version_compare(PHP_VERSION, '5.2') == -1) {
149
+ exit(__('PHP 5.2 or higher is required.', AAM_KEY));
150
+ } elseif (version_compare($wp_version, '3.8') == -1) {
151
+ exit(__('WP 3.8 or higher is required.', AAM_KEY));
 
 
 
 
 
 
152
  }
153
 
154
+ //create an wp-content/aam folder if does not exist
155
+ WP_Filesystem(); //initialize the WordPress filesystem
156
 
157
+ $wp_content = $wp_filesystem->wp_content_dir();
 
 
 
 
 
 
 
 
 
 
 
 
 
 
158
 
159
+ //make sure that we have always content dir
160
+ if ($wp_filesystem->exists($wp_content . '/aam') === false) {
161
+ $wp_filesystem->mkdir($wp_content . '/aam');
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
162
  }
163
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
164
 
165
  /**
166
  * Uninstall hook
173
  */
174
  public static function uninstall() {
175
  global $wp_filesystem;
176
+
177
+ //trigger any uninstall hook that is registered by any extension
178
+ do_action('aam-uninstall-action');
179
 
180
+ WP_Filesystem(); //initialize the WordPress filesystem
 
 
 
 
181
 
182
+ $wp_content = $wp_filesystem->wp_content_dir();
 
 
 
 
 
 
 
 
 
183
 
184
+ //remove the content directory
185
+ $wp_filesystem->rmdir($wp_content . '/aam', true);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
186
  }
187
 
188
  }
189
 
190
+ if (defined('ABSPATH')) {
191
+ //define few common constants
192
+ define('AAM_MEDIA', plugins_url('/media', __FILE__));
193
+ define('AAM_KEY', 'advanced-access-manager');
194
+
195
+ //register autoloader
196
+ require (dirname(__FILE__) . '/autoloader.php');
197
+ AAM_Autoloader::register();
198
+
199
+ //the highest priority (higher the core)
200
+ //this is important to have to catch events like register core post types
201
+ add_action('init', 'AAM::getInstance', -1);
202
+
203
+ //schedule cron
204
+ if (!wp_next_scheduled('aam-cron')) {
205
+ wp_schedule_event(time(), 'daily', 'aam-cron');
206
+ }
207
+ add_action('aam-cron', 'AAM::cron');
208
 
209
+ //activation & deactivation hooks
210
+ register_activation_hook(__FILE__, array('AAM', 'activate'));
211
+ register_uninstall_hook(__FILE__, array('AAM', 'uninstall'));
212
+ }
active-menu.png DELETED
Binary file
application/control/object.php DELETED
@@ -1,150 +0,0 @@
1
- <?php
2
-
3
- /**
4
- * ======================================================================
5
- * LICENSE: This file is subject to the terms and conditions defined in *
6
- * file 'license.txt', which is part of this source code package. *
7
- * ======================================================================
8
- */
9
-
10
- /**
11
- * Abstract Object Class
12
- *
13
- * Object is any part of the WordPress that is controlled by AAM. The example of
14
- * object is Post, Page, Metabox, Widget etc.
15
- *
16
- * @package AAM
17
- * @author Vasyl Martyniuk <support@wpaam.com>
18
- * @copyright Copyright C Vasyl Martyniuk
19
- * @license GNU General Public License {@link http://www.gnu.org/licenses/}
20
- */
21
- abstract class aam_Control_Object {
22
-
23
- /**
24
- * Subject
25
- *
26
- * @var aam_Control_Subject
27
- *
28
- * @access private
29
- */
30
- private $_subject = null;
31
-
32
- /**
33
- * Constructor
34
- *
35
- * @param aam_Control_Subject $subject
36
- * @param int $object_id
37
- *
38
- * @return void
39
- *
40
- * @access public
41
- */
42
- public function __construct(aam_Control_Subject $subject, $object_id) {
43
- $this->setSubject($subject);
44
- $this->init($object_id);
45
- }
46
-
47
- /**
48
- * Sleep method
49
- *
50
- * Used for caching mechanism
51
- *
52
- * @return array
53
- *
54
- * @access public
55
- */
56
- public function __sleep(){
57
- return array('_option');
58
- }
59
-
60
- /**
61
- * Indicate either object can be cached on not
62
- *
63
- * @return boolean
64
- *
65
- * @access public
66
- */
67
- abstract public function cacheObject();
68
-
69
- /**
70
- * Initialize object
71
- *
72
- * @param string|int $object_id
73
- *
74
- * @return void
75
- *
76
- * @access public
77
- */
78
- public function init($object_id) {
79
- $this->setOption(
80
- $this->getSubject()->readOption($this->getUID(), $object_id)
81
- );
82
- }
83
-
84
- /**
85
- * Set current subject
86
- *
87
- * Either it is User or Role
88
- *
89
- * @param aam_Control_Subject $subject
90
- *
91
- * @return void
92
- *
93
- * @access public
94
- */
95
- public function setSubject(aam_Control_Subject $subject) {
96
- $this->_subject = $subject;
97
- }
98
-
99
- /**
100
- * Get Subject
101
- *
102
- * @return aam_Control_Subject
103
- *
104
- * @access public
105
- */
106
- public function getSubject() {
107
- return $this->_subject;
108
- }
109
-
110
- /**
111
- * Get current object UID
112
- *
113
- * @return string
114
- *
115
- * @access public
116
- */
117
- abstract public function getUID();
118
-
119
- /**
120
- * Set Object options
121
- *
122
- * @param mixed $option
123
- *
124
- * @return void
125
- *
126
- * @access public
127
- */
128
- abstract public function setOption($option);
129
-
130
- /**
131
- * Get Object options
132
- *
133
- * @return mixed
134
- *
135
- * @access public
136
- */
137
- abstract public function getOption();
138
-
139
- /**
140
- * Save Object options
141
- *
142
- * @param mixed $params
143
- *
144
- * @return void
145
- *
146
- * @access public
147
- */
148
- abstract public function save($params = null);
149
-
150
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
application/control/object/capability.php DELETED
@@ -1,96 +0,0 @@
1
- <?php
2
-
3
- /**
4
- * ======================================================================
5
- * LICENSE: This file is subject to the terms and conditions defined in *
6
- * file 'license.txt', which is part of this source code package. *
7
- * ======================================================================
8
- */
9
-
10
- /**
11
- *
12
- * @package AAM
13
- * @author Vasyl Martyniuk <support@wpaam.com>
14
- * @copyright Copyright C 2013 Vasyl Martyniuk
15
- * @license GNU General Public License {@link http://www.gnu.org/licenses/}
16
- */
17
- class aam_Control_Object_Capability extends aam_Control_Object {
18
-
19
- /**
20
- *
21
- */
22
- const UID = 'capability';
23
-
24
- /**
25
- *
26
- * @var type
27
- */
28
- private $_option = array();
29
-
30
- /**
31
- *
32
- * @param type $capabilities
33
- */
34
- public function save($capabilities = null) {
35
- if (is_array($capabilities)) {
36
- foreach ($capabilities as $capability => $grant) {
37
- if (intval($grant)) {
38
- $this->getSubject()->addCapability($capability);
39
- } else {
40
- $this->getSubject()->removeCapability($capability);
41
- }
42
- }
43
- }
44
- }
45
-
46
- /**
47
- * @inheritdoc
48
- */
49
- public function cacheObject(){
50
- return false;
51
- }
52
-
53
- /**
54
- *
55
- * @param type $object_id
56
- */
57
- public function init($object_id) {
58
- if (empty($this->_option)) {
59
- $this->setOption($this->getSubject()->getCapabilities());
60
- }
61
- }
62
-
63
- /**
64
- *
65
- * @return type
66
- */
67
- public function getUID() {
68
- return self::UID;
69
- }
70
-
71
- /**
72
- *
73
- * @param type $option
74
- */
75
- public function setOption($option) {
76
- $this->_option = (is_array($option) ? $option : array());
77
- }
78
-
79
- /**
80
- *
81
- * @return type
82
- */
83
- public function getOption() {
84
- return $this->_option;
85
- }
86
-
87
- /**
88
- *
89
- * @param type $capability
90
- * @return type
91
- */
92
- public function has($capability) {
93
- return $this->getSubject()->hasCapability($capability);
94
- }
95
-
96
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
application/control/object/configpress.php DELETED
@@ -1,211 +0,0 @@
1
- <?php
2
- /**
3
- * ======================================================================
4
- * LICENSE: This file is subject to the terms and conditions defined in *
5
- * file 'license.txt', which is part of this source code package. *
6
- * ======================================================================
7
- */
8
-
9
- /**
10
- * ConfigPress Legacy
11
- *
12
- * Keep this object for compatibility reasons
13
- *
14
- * @package AAM
15
- * @author Vasyl Martyniuk <support@wpaam.com>
16
- * @copyright Copyright C 2013 Vasyl Martyniuk
17
- * @license GNU General Public License {@link http://www.gnu.org/licenses/}
18
- * @todo Remove in 4/30/2014
19
- */
20
- class aam_Control_Object_ConfigPress extends aam_Control_Object {
21
-
22
- /**
23
- *
24
- */
25
- const UID = 'configpress';
26
-
27
- /**
28
- *
29
- * @var type
30
- */
31
- private $_option = '';
32
-
33
- /**
34
- *
35
- * @var type
36
- */
37
- private $_config = '';
38
-
39
- /**
40
- *
41
- * @var type
42
- */
43
- private $_tree = null;
44
-
45
- /**
46
- * @inheritdoc
47
- */
48
- public function __sleep(){
49
- return array('_option', '_config', '_tree');
50
- }
51
-
52
- /**
53
- * @inheritdoc
54
- */
55
- public function cacheObject(){
56
- return false;
57
- }
58
-
59
- /**
60
- *
61
- * @param type $config_press
62
- * @return boolean
63
- */
64
- public function save($config_press = null) {
65
- if (is_writable(AAM_TEMP_DIR)) {
66
- $filename = $this->getOption();
67
- if (!$filename) { //file already was created
68
- $filename = sha1(uniqid('aam'));
69
- aam_Core_API::updateBlogOption('aam_' . self::UID, $filename);
70
- }
71
- $response = file_put_contents(
72
- AAM_TEMP_DIR . $filename, stripcslashes($config_press)
73
- );
74
- } else {
75
- $response = false;
76
- }
77
-
78
- return $response;
79
- }
80
-
81
- /**
82
- *
83
- * @return type
84
- */
85
- public function getUID(){
86
- return self::UID;
87
- }
88
-
89
- /**
90
- *
91
- * @param type $object_id
92
- */
93
- public function init($object_id) {
94
- $filename = aam_Core_API::getBlogOption('aam_' . self::UID, '');
95
- if ($filename && file_exists(AAM_TEMP_DIR . $filename)) {
96
- $this->setOption($filename);
97
- $this->setConfig(file_get_contents(AAM_TEMP_DIR . $filename));
98
- $this->parseConfig(AAM_TEMP_DIR . $filename);
99
- }
100
- }
101
-
102
- /**
103
- *
104
- * @param type $filename
105
- */
106
- protected function parseConfig($filename) {
107
- //include third party library
108
- if (!class_exists('Zend_Config')){
109
- require_once(AAM_LIBRARY_DIR . 'Zend/Exception.php');
110
- require_once(AAM_LIBRARY_DIR . 'Zend/Config/Exception.php');
111
- require_once(AAM_LIBRARY_DIR . 'Zend/Config.php');
112
- require_once(AAM_LIBRARY_DIR . 'Zend/Config/Ini.php');
113
- }
114
- //parse ini file
115
- try {
116
- $this->setTree(new Zend_Config_Ini($filename));
117
- } catch (Zend_Config_Exception $e) {
118
- aam_Core_Console::add('ConfigPress parsing error');
119
- }
120
- }
121
-
122
- /**
123
- *
124
- * @param type $param
125
- * @param type $default
126
- * @return type
127
- */
128
- protected function parseParam($param, $default) {
129
- if (is_object($param) && isset($param->userFunc)) {
130
- $func = trim($param->userFunc);
131
- if (is_string($func) && is_callable($func)) {
132
- $response = call_user_func($func);
133
- } else {
134
- $response = $default;
135
- }
136
- } else {
137
- $response = $param;
138
- }
139
-
140
- return $response;
141
- }
142
-
143
- /**
144
- *
145
- * @param type $param
146
- * @param type $default
147
- * @return type
148
- */
149
- public function getParam($param, $default = NULL) {
150
- $tree = $this->getTree();
151
- foreach (explode('.', $param) as $section) {
152
- if (isset($tree->{$section})) {
153
- $tree = $tree->{$section};
154
- } else {
155
- $tree = $default;
156
- break;
157
- }
158
- }
159
-
160
- return $this->parseParam($tree, $default);
161
- }
162
-
163
- /**
164
- *
165
- * @param type $option
166
- */
167
- public function setOption($option) {
168
- $this->_option = $option;
169
- }
170
-
171
- /**
172
- *
173
- * @return type
174
- */
175
- public function getOption() {
176
- return $this->_option;
177
- }
178
-
179
- /**
180
- *
181
- * @param type $config
182
- */
183
- public function setConfig($config) {
184
- $this->_config = $config;
185
- }
186
-
187
- /**
188
- *
189
- * @return type
190
- */
191
- public function getConfig() {
192
- return $this->_config;
193
- }
194
-
195
- /**
196
- *
197
- * @param type $tree
198
- */
199
- public function setTree($tree) {
200
- $this->_tree = $tree;
201
- }
202
-
203
- /**
204
- *
205
- * @return type
206
- */
207
- public function getTree() {
208
- return $this->_tree;
209
- }
210
-
211
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
application/control/object/event.php DELETED
@@ -1,71 +0,0 @@
1
- <?php
2
-
3
- /**
4
- * ======================================================================
5
- * LICENSE: This file is subject to the terms and conditions defined in *
6
- * file 'license.txt', which is part of this source code package. *
7
- * ======================================================================
8
- */
9
-
10
- /**
11
- *
12
- * @package AAM
13
- * @author Vasyl Martyniuk <support@wpaam.com>
14
- * @copyright Copyright C 2013 Vasyl Martyniuk
15
- * @license GNU General Public License {@link http://www.gnu.org/licenses/}
16
- */
17
- class aam_Control_Object_Event extends aam_Control_Object {
18
-
19
- /**
20
- *
21
- */
22
- const UID = 'event';
23
-
24
- /**
25
- *
26
- * @var type
27
- */
28
- private $_option = array();
29
-
30
- /**
31
- *
32
- * @param type $events
33
- */
34
- public function save($events = null) {
35
- if (is_array($events)) {
36
- $this->getSubject()->updateOption($events, self::UID);
37
- }
38
- }
39
-
40
- /**
41
- * @inheritdoc
42
- */
43
- public function cacheObject(){
44
- return true;
45
- }
46
-
47
- /**
48
- *
49
- * @return type
50
- */
51
- public function getUID() {
52
- return self::UID;
53
- }
54
-
55
- /**
56
- *
57
- * @param type $option
58
- */
59
- public function setOption($option) {
60
- $this->_option = (is_array($option) ? $option : array());
61
- }
62
-
63
- /**
64
- *
65
- * @return type
66
- */
67
- public function getOption() {
68
- return $this->_option;
69
- }
70
-
71
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
application/control/object/menu.php DELETED
@@ -1,166 +0,0 @@
1
- <?php
2
-
3
- /**
4
- * ======================================================================
5
- * LICENSE: This file is subject to the terms and conditions defined in *
6
- * file 'license.txt', which is part of this source code package. *
7
- * ======================================================================
8
- */
9
-
10
- /**
11
- *
12
- * @package AAM
13
- * @author Vasyl Martyniuk <support@wpaam.com>
14
- * @copyright Copyright C 2013 Vasyl Martyniuk
15
- * @license GNU General Public License {@link http://www.gnu.org/licenses/}
16
- */
17
- class aam_Control_Object_Menu extends aam_Control_Object {
18
-
19
- /**
20
- * Object Unique ID
21
- */
22
- const UID = 'menu';
23
-
24
- /**
25
- * List of options
26
- *
27
- * @var array
28
- *
29
- * @access private
30
- */
31
- private $_option = array();
32
-
33
- /**
34
- * Filter Menu List
35
- *
36
- * @global array $menu
37
- * @global array $submenu
38
- *
39
- * @return void
40
- *
41
- * @access public
42
- */
43
- public function filter() {
44
- global $menu;
45
-
46
- //filter menu & submenu first
47
- $capability = uniqid('aam_'); //random capability means NO access
48
- //let's go and iterate menu & submenu
49
- foreach ($menu as $id => $item) {
50
- if ($this->has($item[2])) {
51
- $menu[$id][1] = $capability;
52
- $denied = true;
53
- } else {
54
- $denied = false;
55
- }
56
- //filter submenu
57
- $submenu = $this->filterSubmenu($item[2], $denied);
58
- //a trick to whether remove the Root Menu or replace link with the first
59
- //available submenu
60
- if ($denied && $submenu){
61
- $menu[$id][2] = $submenu[1];
62
- $menu[$id][1] = $submenu[0];
63
- } elseif ($denied){ //ok, no available submenus, remove it completely
64
- unset($menu[$id]);
65
- }
66
- }
67
- }
68
-
69
- /**
70
- * Filter submenu
71
- *
72
- * @global array $submenu
73
- *
74
- * @param array $menu
75
- * @param boolean $denied
76
- *
77
- * @return string|null
78
- *
79
- * @access public
80
- */
81
- public function filterSubmenu($menu, $denied) {
82
- global $submenu;
83
-
84
- //go to submenu
85
- $available = null;
86
- if (isset($submenu[$menu])) {
87
- foreach ($submenu[$menu] as $sid => $sub_item) {
88
- if ($this->has($sub_item[2])) {
89
- //weird WordPress behavior, it gets the first submenu link
90
- //$submenu[$menu][$sid][1] = $capability;
91
- unset($submenu[$menu][$sid]);
92
- } elseif (is_null($available)){ //find first available submenu
93
- $available = array($sub_item[1], $sub_item[2]);
94
- }
95
- }
96
- }
97
-
98
- //replace submenu with available new if found
99
- if ($denied && !is_null($available) && ($available[1] != $menu) ){
100
- $submenu[$available[1]] = $submenu[$menu];
101
- unset($submenu[$menu]);
102
- }
103
-
104
- return $available;
105
- }
106
-
107
- /**
108
- * @inheritdoc
109
- */
110
- public function save($menu = null) {
111
- if (is_array($menu)) {
112
- $this->getSubject()->updateOption($menu, self::UID);
113
- //set flag that this subject has custom settings
114
- $this->getSubject()->setFlag(aam_Control_Subject::FLAG_MODIFIED);
115
- }
116
- }
117
-
118
- /**
119
- * @inheritdoc
120
- */
121
- public function cacheObject(){
122
- return true;
123
- }
124
-
125
- /**
126
- *
127
- * @return type
128
- */
129
- public function getUID() {
130
- return self::UID;
131
- }
132
-
133
- /**
134
- *
135
- * @param type $option
136
- */
137
- public function setOption($option) {
138
- $this->_option = (is_array($option) ? $option : array());
139
- }
140
-
141
- /**
142
- *
143
- * @return type
144
- */
145
- public function getOption() {
146
- return $this->_option;
147
- }
148
-
149
- /**
150
- *
151
- * @param type $menu
152
- * @return type
153
- */
154
- public function has($menu) {
155
- $response = null;
156
- //decode URL in case of any special characters like &amp;
157
- $menu_decoded = htmlspecialchars_decode($menu);
158
- //check if menu is restricted
159
- if (isset($this->_option[$menu_decoded])) {
160
- $response = (intval($this->_option[$menu_decoded]) ? true : false);
161
- }
162
-
163
- return $response;
164
- }
165
-
166
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
application/control/object/metabox.php DELETED
@@ -1 +0,0 @@
1
- <?php
2
  * ======================================================================
3
  * LICENSE: This file is subject to the terms and conditions defined in *
4
  * file 'license.txt', which is part of this source code package. *
5
  * ======================================================================
6
  */
7
  *
8
  * @package AAM
9
  * @author Vasyl Martyniuk <support@wpaam.com>
10
  * @copyright Copyright C 2013 Vasyl Martyniuk
11
  * @license GNU General Public License {@link http://www.gnu.org/licenses/}
12
  */
13
  /**
14
  *
15
  */
16
  const UID = 'metabox';
17
  /**
18
  *
19
  * @var type
20
  */
21
  private $_option = array();
22
  /**
23
  *
24
  * @global type $wp_registered_widgets
25
  * @param type $sidebar_widgets
26
  * @return type
27
  */
28
  public function filterFrontend($sidebar_widgets) {
29
  global $wp_registered_widgets;
30
  if (is_array($wp_registered_widgets)) {
31
  foreach ($wp_registered_widgets as $id => $data) {
32
  if (is_object($data['callback'][0])) {
33
  $callback = get_class($data['callback'][0]);
34
  } elseif (is_string($data['callback'][0])) {
35
  $callback = $data['callback'][0];
36
  }
37
  if ($this->has('widgets', $callback)) {
38
  unregister_widget($callback);
39
  //remove it from registered widget global var!!
40
  //INFORM: Why Unregister Widget does not clear global var?
41
  unset($wp_registered_widgets[$id]);
42
  }
43
  }
44
  }
45
  return $sidebar_widgets;
46
  }
47
  /**
48
  *
49
  * @global type $wp_meta_boxes
50
  * @param type $screen
51
  * @param type $post
52
  */
53
  public function filterBackend($screen, $post = null) {
54
  global $wp_meta_boxes;
55
  if (is_array($wp_meta_boxes)) {
56
  foreach ($wp_meta_boxes as $screen_id => $zones) {
57
  if ($screen == $screen_id) {
58
  foreach ($zones as $zone => $priorities) {
59
  foreach ($priorities as $priority => $metaboxes) {
60
  foreach ($metaboxes as $metabox => $data) {
61
  if ($this->has($screen_id, $metabox)) {
62
  remove_meta_box($metabox, $screen_id, $zone);
63
  }
64
  }
65
  }
66
  }
67
  }
68
  }
69
  }
70
  }
71
  /**
72
  * @inheritdoc
73
  */
74
  public function save($metaboxes = null) {
75
  if (is_array($metaboxes)) {
76
  $this->getSubject()->updateOption($metaboxes, self::UID);
77
  //set flag that this subject has custom settings
78
  $this->getSubject()->setFlag(aam_Control_Subject::FLAG_MODIFIED);
79
  }
80
  }
81
  /**
82
  * @inheritdoc
83
  */
84
  public function cacheObject(){
85
  return true;
86
  }
87
  /**
88
  *
89
  * @return type
90
  */
91
  public function getUID() {
92
  return self::UID;
93
  }
94
  /**
95
  *
96
  * @param type $option
97
  */
98
  public function setOption($option) {
99
  $this->_option = (is_array($option) ? $option : array());
100
  }
101
  /**
102
  *
103
  * @return type
104
  */
105
  public function getOption() {
106
  return $this->_option;
107
  }
108
  /**
109
  *
110
  * @param type $group
111
  * @param type $metabox
112
  * @return type
113
  */
114
  public function has($group, $metabox) {
115
  $response = false;
116
  if (isset($this->_option[$group][$metabox])) {
117
  $response = (intval($this->_option[$group][$metabox]) ? true : false);
118
  }
119
  return $response;
120
  }
 
0
  * ======================================================================
1
  * LICENSE: This file is subject to the terms and conditions defined in *
2
  * file 'license.txt', which is part of this source code package. *
3
  * ======================================================================
4
  */
5
  *
6
  * @package AAM
7
  * @author Vasyl Martyniuk <support@wpaam.com>
8
  * @copyright Copyright C 2013 Vasyl Martyniuk
9
  * @license GNU General Public License {@link http://www.gnu.org/licenses/}
10
  */
11
  /**
12
  *
13
  */
14
  const UID = 'metabox';
15
  /**
16
  *
17
  * @var type
18
  */
19
  private $_option = array();
20
  /**
21
  *
22
  * @global type $wp_registered_widgets
23
  * @param type $sidebar_widgets
24
  * @return type
25
  */
26
  public function filterFrontend($sidebar_widgets) {
27
  global $wp_registered_widgets;
28
  if (is_array($wp_registered_widgets)) {
29
  foreach ($wp_registered_widgets as $id => $data) {
30
  if (is_object($data['callback'][0])) {
31
  $callback = get_class($data['callback'][0]);
32
  } elseif (is_string($data['callback'][0])) {
33
  $callback = $data['callback'][0];
34
  }
35
  if ($this->has('widgets', $callback)) {
36
  unregister_widget($callback);
37
  //remove it from registered widget global var!!
38
  //INFORM: Why Unregister Widget does not clear global var?
39
  unset($wp_registered_widgets[$id]);
40
  }
41
  }
42
  }
43
  return $sidebar_widgets;
44
  }
45
  /**
46
  *
47
  * @global type $wp_meta_boxes
48
  * @param type $screen
49
  * @param type $post
50
  */
51
  public function filterBackend($screen, $post = null) {
52
  global $wp_meta_boxes;
53
  if (is_array($wp_meta_boxes)) {
54
  foreach ($wp_meta_boxes as $screen_id => $zones) {
55
  if ($screen == $screen_id) {
56
  foreach ($zones as $zone => $priorities) {
57
  foreach ($priorities as $priority => $metaboxes) {
58
  foreach ($metaboxes as $metabox => $data) {
59
  if ($this->has($screen_id, $metabox)) {
60
  remove_meta_box($metabox, $screen_id, $zone);
61
  }
62
  }
63
  }
64
  }
65
  }
66
  }
67
  }
68
  }
69
  /**
70
  * @inheritdoc
71
  */
72
  public function save($metaboxes = null) {
73
  if (is_array($metaboxes)) {
74
  $this->getSubject()->updateOption($metaboxes, self::UID);
75
  //set flag that this subject has custom settings
76
  $this->getSubject()->setFlag(aam_Control_Subject::FLAG_MODIFIED);
77
  }
78
  }
79
  /**
80
  * @inheritdoc
81
  */
82
  public function cacheObject(){
83
  return true;
84
  }
85
  /**
86
  *
87
  * @return type
88
  */
89
  public function getUID() {
90
  return self::UID;
91
  }
92
  /**
93
  *
94
  * @param type $option
95
  */
96
  public function setOption($option) {
97
  $this->_option = (is_array($option) ? $option : array());
98
  }
99
  /**
100
  *
101
  * @return type
102
  */
103
  public function getOption() {
104
  return $this->_option;
105
  }
106
  /**
107
  *
108
  * @param type $group
109
  * @param type $metabox
110
  * @return type
111
  */
112
  public function has($group, $metabox) {
113
  $response = false;
114
  if (isset($this->_option[$group][$metabox])) {
115
  $response = (intval($this->_option[$group][$metabox]) ? true : false);
116
  }
117
  return $response;
118
  }
application/control/object/post.php DELETED
@@ -1,338 +0,0 @@
1
- <?php
2
-
3
- /**
4
- * ======================================================================
5
- * LICENSE: This file is subject to the terms and conditions defined in *
6
- * file 'license.txt', which is part of this source code package. *
7
- * ======================================================================
8
- */
9
-
10
- /**
11
- *
12
- * @package AAM
13
- * @author Vasyl Martyniuk <support@wpaam.com>
14
- * @copyright Copyright C 2013 Vasyl Martyniuk
15
- * @license GNU General Public License {@link http://www.gnu.org/licenses/}
16
- */
17
- class aam_Control_Object_Post extends aam_Control_Object {
18
-
19
- /**
20
- * Object Identifier
21
- */
22
- const UID = 'post';
23
-
24
- /**
25
- * Object Action: COMMENT
26
- *
27
- * Control access to commenting ability
28
- */
29
- const ACTION_COMMENT = 'comment';
30
-
31
- /**
32
- * Object Action: READ
33
- *
34
- * Either Object can be read by user or not
35
- */
36
- const ACTION_READ = 'read';
37
-
38
- /**
39
- * Object Action: EXCLUDE
40
- *
41
- * If object is a part of frontend menu either exclude it from menu or not
42
- */
43
- const ACTION_EXCLUDE = 'exclude';
44
-
45
- /**
46
- * Object Action: TRASH
47
- *
48
- * Manage access to object trash ability
49
- */
50
- const ACTION_TRASH = 'trash';
51
-
52
- /**
53
- *
54
- */
55
- const ACTION_DELETE = 'delete';
56
-
57
- /**
58
- *
59
- */
60
- const ACTION_EDIT = 'edit';
61
-
62
- /**
63
- *
64
- * @var type
65
- */
66
- private $_post;
67
-
68
- /**
69
- *
70
- * @var type
71
- */
72
- private $_option = array();
73
-
74
- /**
75
- * Indicator that settings where inherited
76
- *
77
- * @var boolean
78
- *
79
- * @access private
80
- */
81
- private $_inherited = false;
82
-
83
- /**
84
- * Init Post Object
85
- *
86
- * @param WP_Post|Int $object
87
- *
88
- * @return void
89
- *
90
- * @access public
91
- */
92
- public function init($object) {
93
- //make sure that we are dealing with WP_Post object
94
- if ($object instanceof WP_Post){
95
- $this->setPost($object);
96
- } elseif (intval($object)) {
97
- $this->setPost(get_post($object));
98
- }
99
-
100
- if ($this->getPost()){
101
- $this->read();
102
- }
103
- }
104
-
105
- /**
106
- * Read the Post AAM Metadata
107
- *
108
- * Get all settings related to specified post
109
- *
110
- * @return void
111
- *
112
- * @access public
113
- */
114
- public function read() {
115
- $option = get_post_meta($this->getPost()->ID, $this->getOptionName(), true);
116
- //try to inherit it from parent category
117
- if (empty($option)
118
- && (aam_Core_ConfigPress::getParam('aam.post.inherit', 'true') == 'true')) {
119
- $terms = $this->retrievePostTerms();
120
- //use only first term for inheritance
121
- $term_id = array_shift($terms);
122
- //try to get any parent access
123
- $option = $this->inheritAccess($term_id);
124
- }
125
- //even if parent category is empty, try to read the parent subject
126
- if (empty($option)){
127
- $option = $this->getSubject()->readParentSubject(
128
- self::UID, $this->getPost()->ID
129
- );
130
- }
131
-
132
- $this->setOption(
133
- apply_filters('aam_post_access_option', $option, $this)
134
- );
135
- }
136
-
137
- /**
138
- * Generate option name
139
- *
140
- * @return string
141
- *
142
- * @access protected
143
- */
144
- protected function getOptionName() {
145
- $subject = $this->getSubject();
146
- //prepare option name
147
- $meta_key = 'aam_' . self::UID . '_access_' . $subject->getUID();
148
- $meta_key .= ($subject->getId() ? $subject->getId() : '');
149
-
150
- return $meta_key;
151
- }
152
-
153
- /**
154
- * Inherit access from parent term
155
- *
156
- * Go throught the hierarchical branch of terms and retrieve access from the
157
- * first parent term that has access defined.
158
- *
159
- * @param int $term_id
160
- *
161
- * @return array
162
- *
163
- * @access private
164
- */
165
- private function inheritAccess($term_id) {
166
- $term = new aam_Control_Object_Term($this->getSubject(), $term_id);
167
- $access = $term->getOption();
168
- if (isset($access['post']) && $access['post']) {
169
- $result = array('post' => $access['post']);
170
- $this->setInherited(true);
171
- } elseif (is_object($term->getTerm()) && $term->getTerm()->parent) {
172
- $result = $this->inheritAccess($term->getTerm()->parent);
173
- } else {
174
- $result = array();
175
- }
176
-
177
- return $result;
178
- }
179
-
180
- /**
181
- * @inheritdoc
182
- */
183
- public function __sleep(){
184
- return array('_post', '_option', '_inherited');
185
- }
186
-
187
- /**
188
- * @inheritdoc
189
- */
190
- public function cacheObject(){
191
- return true;
192
- }
193
-
194
- /**
195
- * @inheritdoc
196
- */
197
- public function save($params = null) {
198
- if (is_array($params)) {
199
- $this->setInherited(false);
200
- update_post_meta($this->getPost()->ID, $this->getOptionName(), $params);
201
- //set flag that this subject has custom settings
202
- $this->getSubject()->setFlag(aam_Control_Subject::FLAG_MODIFIED);
203
- }
204
- //fire internal hook
205
- do_action_ref_array('aam_object_saved', $this, $params);
206
- }
207
-
208
- /**
209
- * Get Object Unique ID
210
- *
211
- * @return string
212
- *
213
- * @access public
214
- */
215
- public function getUID() {
216
- return self::UID;
217
- }
218
-
219
- /**
220
- *
221
- * @return type
222
- */
223
- public function delete() {
224
- return delete_post_meta($this->getPost()->ID, $this->getOptionName());
225
- }
226
-
227
- /**
228
- * Retrieve list of all hierarchical terms the object belongs to
229
- *
230
- * @return array
231
- *
232
- * @access private
233
- */
234
- private function retrievePostTerms() {
235
- $taxonomies = get_object_taxonomies($this->getPost());
236
- if (is_array($taxonomies) && count($taxonomies)) {
237
- //filter taxonomies to hierarchical only
238
- $filtered = array();
239
- foreach ($taxonomies as $taxonomy) {
240
- if (is_taxonomy_hierarchical($taxonomy)) {
241
- $filtered[] = $taxonomy;
242
- }
243
- }
244
- $terms = wp_get_object_terms(
245
- $this->getPost()->ID, $filtered, array('fields' => 'ids')
246
- );
247
- } else {
248
- $terms = array();
249
- }
250
-
251
- return $terms;
252
- }
253
-
254
- /**
255
- * Set Post. Cover all unexpectd wierd issues with WP Core
256
- *
257
- * @param WP_Post $post
258
- *
259
- * @return void
260
- *
261
- * @access public
262
- */
263
- public function setPost($post) {
264
- if ($post instanceof WP_Post){
265
- $this->_post = $post;
266
- } else {
267
- $this->_post = (object) array('ID' => 0);
268
- }
269
- }
270
-
271
- /**
272
- * Get Post
273
- *
274
- * @return WP_Post|stdClass
275
- *
276
- * @access public
277
- */
278
- public function getPost() {
279
- return $this->_post;
280
- }
281
-
282
- /**
283
- *
284
- * @param type $option
285
- */
286
- public function setOption($option) {
287
- $this->_option = (is_array($option) ? $option : array());
288
- }
289
-
290
- /**
291
- *
292
- * @return type
293
- */
294
- public function getOption() {
295
- return $this->_option;
296
- }
297
-
298
- /**
299
- * Set inherited flag
300
- *
301
- * If post does not have access specified, it'll try to inherit it from the
302
- * parent category and if parent category has access defined it'll inherit all
303
- * settings and set _inherited flag to true.
304
- *
305
- * @param boolean $flag
306
- *
307
- * @return void
308
- *
309
- * @access public
310
- */
311
- public function setInherited($flag){
312
- $this->_inherited = $flag;
313
- }
314
-
315
- /**
316
- *
317
- * @return type
318
- */
319
- public function getInherited(){
320
- return $this->_inherited;
321
- }
322
-
323
- /**
324
- *
325
- * @param type $area
326
- * @param type $action
327
- * @return type
328
- */
329
- public function has($area, $action) {
330
- $response = false;
331
- if (isset($this->_option['post'][$area][$action])) {
332
- $response = (intval($this->_option['post'][$area][$action]) ? true : false);
333
- }
334
-
335
- return $response;
336
- }
337
-
338
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
application/control/object/term.php DELETED
@@ -1,222 +0,0 @@
1
- <?php
2
-
3
- /**
4
- * ======================================================================
5
- * LICENSE: This file is subject to the terms and conditions defined in *
6
- * file 'license.txt', which is part of this source code package. *
7
- * ======================================================================
8
- */
9
-
10
- /**
11
- *
12
- * @package AAM
13
- * @author Vasyl Martyniuk <support@wpaam.com>
14
- * @copyright Copyright C 2013 Vasyl Martyniuk
15
- * @license GNU General Public License {@link http://www.gnu.org/licenses/}
16
- */
17
- class aam_Control_Object_Term extends aam_Control_Object {
18
-
19
- /**
20
- *
21
- */
22
- const UID = 'term';
23
-
24
- /**
25
- *
26
- */
27
- const ACTION_BROWSE = 'browse';
28
-
29
- /**
30
- *
31
- */
32
- const ACTION_EXCLUDE = 'exclude';
33
-
34
- /**
35
- *
36
- */
37
- const ACTION_EDIT = 'edit';
38
-
39
- /**
40
- *
41
- */
42
- const ACTION_LIST = 'list';
43
-
44
- /**
45
- *
46
- * @var type
47
- */
48
- private $_term = null;
49
-
50
- /**
51
- *
52
- * @var type
53
- */
54
- private $_option = array();
55
-
56
- /**
57
- * @inheritdoc
58
- */
59
- public function __sleep(){
60
- return array('_term', '_option');
61
- }
62
-
63
- /**
64
- * @inheritdoc
65
- */
66
- public function save($params = null) {
67
- if (is_array($params)) {
68
- $this->getSubject()->updateOption(
69
- $params, self::UID, $this->getTerm()->term_id
70
- );
71
- //set flag that this subject has custom settings
72
- $this->getSubject()->setFlag(aam_Control_Subject::FLAG_MODIFIED);
73
- }
74
- }
75
-
76
- /**
77
- * Get Object Unique ID
78
- *
79
- * @return string
80
- *
81
- * @access public
82
- */
83
- public function getUID() {
84
- return self::UID;
85
- }
86
-
87
- /**
88
- *
89
- * @param type $object_id
90
- */
91
- public function init($object_id) {
92
- if ($object_id) {
93
- //initialize term first
94
- $term = get_term($object_id, $this->getTaxonomy($object_id));
95
- if ($term && !is_wp_error($term)) {
96
- $this->setTerm($term);
97
- $access = $this->getSubject()->readOption(
98
- self::UID, $this->getTerm()->term_id
99
- );
100
- $inherit = aam_Core_ConfigPress::getParam(
101
- 'aam.term.inherit', 'true'
102
- );
103
- if (empty($access) && ($inherit == 'true')) {
104
- //try to get any parent restriction
105
- $access = $this->inheritAccess($this->getTerm()->parent);
106
- }
107
-
108
- //even if parent category is empty, try to read the parent subject
109
- if (empty($access)){
110
- $access = $this->getSubject()->readParentSubject(
111
- self::UID, $this->getTerm()->term_id
112
- );
113
- }
114
-
115
- $this->setOption(
116
- apply_filters('aam_term_access_option', $access, $this)
117
- );
118
- }
119
- }
120
- }
121
-
122
- /**
123
- *
124
- * @return type
125
- */
126
- public function delete() {
127
- return $this->getSubject()->deleteOption(
128
- self::UID, $this->getTerm()->term_id
129
- );
130
- }
131
-
132
- /**
133
- *
134
- * @param type $term_id
135
- * @return array
136
- */
137
- private function inheritAccess($term_id) {
138
- $term = new aam_Control_Object_Term($this->getSubject(), $term_id);
139
- if ($term->getTerm()) {
140
- $access = $term->getOption();
141
- if (empty($access) && $term->getTerm()->parent) {
142
- $this->inheritAccess($term->getTerm()->parent);
143
- } elseif (!empty($access)) {
144
- $access['inherited'] = true;
145
- }
146
- } else {
147
- $access = array();
148
- }
149
-
150
- return $access;
151
- }
152
-
153
- /**
154
- *
155
- * @global type $wpdb
156
- * @param type $object_id
157
- * @return type
158
- */
159
- private function getTaxonomy($object_id) {
160
- global $wpdb;
161
-
162
- $query = "SELECT taxonomy FROM {$wpdb->term_taxonomy} ";
163
- $query .= "WHERE term_id = {$object_id}";
164
-
165
- return $wpdb->get_var($query);
166
- }
167
-
168
- /**
169
- *
170
- * @param type $term
171
- */
172
- public function setTerm($term) {
173
- $this->_term = $term;
174
- }
175
-
176
- /**
177
- *
178
- * @return type
179
- */
180
- public function getTerm() {
181
- return $this->_term;
182
- }
183
-
184
- /**
185
- *
186
- * @param type $option
187
- */
188
- public function setOption($option) {
189
- $this->_option = (is_array($option) ? $option : array());
190
- }
191
-
192
- /**
193
- *
194
- * @return type
195
- */
196
- public function getOption() {
197
- return $this->_option;
198
- }
199
-
200
- /**
201
- * @inheritdoc
202
- */
203
- public function cacheObject(){
204
- return true;
205
- }
206
-
207
- /**
208
- *
209
- * @param type $area
210
- * @param type $action
211
- * @return type
212
- */
213
- public function has($area, $action) {
214
- $response = false;
215
- if (isset($this->_option['term'][$area][$action])) {
216
- $response = (intval($this->_option['term'][$area][$action]) ? true : false);
217
- }
218
-
219
- return $response;
220
- }
221
-
222
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
application/control/subject.php DELETED
@@ -1,468 +0,0 @@
1
- <?php
2
-
3
- /**
4
- * ======================================================================
5
- * LICENSE: This file is subject to the terms and conditions defined in *
6
- * file 'license.txt', which is part of this source code package. *
7
- * ======================================================================
8
- */
9
-
10
- /**
11
- * Abstract Subject Controller
12
- *
13
- * @package AAM
14
- * @author Vasyl Martyniuk <support@wpaam.com>
15
- * @copyright Copyright C 2013 Vasyl Martyniuk
16
- * @license GNU General Public License {@link http://www.gnu.org/licenses/}
17
- */
18
- abstract class aam_Control_Subject {
19
-
20
- /**
21
- * Flag that idicates that subject has been modified
22
- */
23
- const FLAG_MODIFIED = 'modified_flag';
24
-
25
- /**
26
- * Subject ID
27
- *
28
- * Whether it is User ID or Role ID
29
- *
30
- * @var string|int
31
- *
32
- * @access private
33
- */
34
- private $_id;
35
-
36
- /**
37
- * WordPres Subject
38
- *
39
- * It can be WP_User or WP_Role, based on what class has been used
40
- *
41
- * @var WP_Role|WP_User
42
- *
43
- * @access private
44
- */
45
- private $_subject;
46
-
47
- /**
48
- * List of Objects to be access controled for current subject
49
- *
50
- * All access control objects like Admin Menu, Metaboxes, Posts etc
51
- *
52
- * @var array
53
- *
54
- * @access private
55
- */
56
- private $_objects = array();
57
-
58
- /**
59
- * Update Cache flag
60
- *
61
- * If there is any new object instantiated, update cache too
62
- *
63
- * @var boolean
64
- *
65
- * @access private
66
- */
67
- private $_updateCache = false;
68
-
69
- /**
70
- * Constructor
71
- *
72
- * @param string|int $id
73
- *
74
- * @return void
75
- *
76
- * @access public
77
- */
78
- public function __construct($id) {
79
- //set subject
80
- $this->setId($id);
81
- //retrieve and set subject itself
82
- $this->setSubject($this->retrieveSubject());
83
- //retrieve cache if there is any
84
- $this->initCache();
85
- }
86
-
87
- /**
88
- * Initialize cache
89
- *
90
- * @return void
91
- *
92
- * @access public
93
- */
94
- public function initCache(){
95
- if (aam_Core_ConfigPress::getParam('aam.caching', 'false') === "true"){
96
- $this->setObjects($this->readCache());
97
- foreach($this->_objects as $objects){
98
- foreach($objects as $object){
99
- if (!($object instanceof __PHP_Incomplete_Class)) {
100
- $object->setSubject($this);
101
- }
102
- }
103
- }
104
- }
105
- }
106
-
107
- /**
108
- * Desctruct the subject
109
- *
110
- * Execute extra actions during application shutdown
111
- *
112
- * @return void
113
- *
114
- * @access public
115
- */
116
- public function saveCache(){
117
- $caching = aam_Core_ConfigPress::getParam('aam.caching', 'false');
118
- if (($this->_updateCache === true) && ($caching === "true")){
119
- $this->updateCache();
120
- }
121
- }
122
-
123
- /**
124
- * Trigger Subject native methods
125
- *
126
- * @param string $name
127
- * @param array $arguments
128
- *
129
- * @return mixed
130
- *
131
- * @access public
132
- */
133
- public function __call($name, $arguments) {
134
- $subject = $this->getSubject();
135
- //make sure that method is callable
136
- if (method_exists($subject, $name)) {
137
- $response = call_user_func_array(array($subject, $name), $arguments);
138
- } else {
139
- $response = null;
140
- }
141
-
142
- return $response;
143
- }
144
-
145
- /**
146
- * Get Subject's native properties
147
- *
148
- * @param string $name
149
- *
150
- * @return mixed
151
- *
152
- * @access public
153
- */
154
- public function __get($name) {
155
- $subject = $this->getSubject();
156
- //TODO - In multisite Wp_User roles are not initialized if admin not a part
157
- //of the site
158
- return @$subject->$name;
159
- }
160
-
161
- /**
162
- * Set Subject's native properties
163
- *
164
- * @param string $name
165
- *
166
- * @return mixed
167
- *
168
- * @access public
169
- */
170
- public function __set($name, $value) {
171
- $subject = $this->getSubject();
172
- $subject->$name = $value;
173
- }
174
-
175
- /**
176
- * Set Subject ID
177
- *
178
- * @param string|int
179
- *
180
- * @return void
181
- *
182
- * @access public
183
- */
184
- public function setId($id) {
185
- $this->_id = $id;
186
- }
187
-
188
- /**
189
- * Get Subject ID
190
- *
191
- * @return string|int
192
- *
193
- * @access public
194
- */
195
- public function getId() {
196
- return $this->_id;
197
- }
198
-
199
- /**
200
- * Get Subject
201
- *
202
- * @return WP_Role|WP_User
203
- *
204
- * @access public
205
- */
206
- public function getSubject() {
207
- return $this->_subject;
208
- }
209
-
210
- /**
211
- * Set Subject
212
- *
213
- * @param WP_Role|WP_User $subject
214
- *
215
- * @return void
216
- *
217
- * @access public
218
- */
219
- public function setSubject($subject) {
220
- $this->_subject = $subject;
221
- }
222
-
223
- /**
224
- * Set Objects
225
- *
226
- * If there is any cache, set the complete set of objects
227
- *
228
- * @return void
229
- *
230
- * @access public
231
- */
232
- public function setObjects($objects) {
233
- $this->_objects = $objects;
234
- }
235
-
236
- /**
237
- * Get Access Objects
238
- *
239
- * @return array
240
- *
241
- * @access public
242
- */
243
- public function getObjects() {
244
- return $this->_objects;
245
- }
246
-
247
- /**
248
- * Get Individual Object
249
- *
250
- * @param string $object
251
- * @param mixed $object_id
252
- *
253
- * @return aam_Control_Object
254
- *
255
- * @access public
256
- */
257
- public function getObject($object, $object_id = 0) {
258
- //make sure that object group is defined
259
- if (!isset($this->_objects[$object])){
260
- $this->_objects[$object] = array();
261
- }
262
- //check if there is an object with specified ID
263
- if (!isset($this->_objects[$object][$object_id])) {
264
- $class_name = 'aam_Control_Object_' . ucfirst($object);
265
- if (class_exists($class_name)) {
266
- $this->_objects[$object][$object_id] = new $class_name(
267
- $this, $object_id, $this
268
- );
269
- } else {
270
- $this->_objects[$object][$object_id] = apply_filters(
271
- 'aam_object', null, $object, $object_id, $this
272
- );
273
- }
274
-
275
- //set update cache flag to true if object can be cached
276
- if ($this->_objects[$object][$object_id]->cacheObject() === true){
277
- $this->_updateCache = true;
278
- }
279
- }
280
-
281
- return $this->_objects[$object][$object_id];
282
- }
283
-
284
- /**
285
- * Set Individual Access Object
286
- *
287
- * @param aam_Control_Object $object
288
- * @param string $uid
289
- *
290
- * @return void
291
- *
292
- * @access public
293
- */
294
- public function setObject(aam_Control_Object $object, $uid) {
295
- $this->_objects[$uid] = $object;
296
- }
297
-
298
- /**
299
- * Release the object
300
- *
301
- * @param string $uid
302
- * @param string|int $object_id
303
- *
304
- * @return void
305
- *
306
- * @access public
307
- */
308
- public function releaseObject($uid, $object_id = 0){
309
- if (isset($this->_objects[$uid][$object_id])){
310
- unset($this->_objects[$uid][$object_id]);
311
- }
312
- }
313
-
314
- /**
315
- * Get Subject Type
316
- *
317
- * @return string
318
- *
319
- * @access public
320
- */
321
- public function getType() {
322
- return get_class($this->getSubject());
323
- }
324
-
325
- /**
326
- *
327
- * @param type $capability
328
- * @return type
329
- */
330
- public function hasCapability($capability) {
331
- return $this->getSubject()->has_cap($capability);
332
- }
333
-
334
- /**
335
- * Save Access Parameters
336
- *
337
- * @param array $params
338
- *
339
- * @return boolean
340
- *
341
- * @access public
342
- */
343
- public function save(array $params) {
344
- foreach ($params as $object_type => $dump) {
345
- if ($object = $this->getObject($object_type)) {
346
- $object->save($dump);
347
- }
348
- }
349
-
350
- //clear cache
351
- $this->clearCache();
352
- }
353
-
354
- /**
355
- * Retrieve list of subject's capabilities
356
- *
357
- * @return array
358
- *
359
- * @access public
360
- */
361
- abstract public function getCapabilities();
362
-
363
- /**
364
- * Read Cache
365
- *
366
- * Cache all settings to speed-up the AAM execution
367
- *
368
- * @return void
369
- *
370
- * @access public
371
- */
372
- abstract public function readCache();
373
-
374
- /**
375
- * Update Cache
376
- *
377
- * If there is any change to cache, update it and save to database
378
- *
379
- * @return boolean
380
- *
381
- * @access public
382
- */
383
- abstract public function updateCache();
384
-
385
- /**
386
- * Clear the Subject Cache
387
- *
388
- * @return boolean
389
- *
390
- * @access public
391
- */
392
- abstract public function clearCache();
393
-
394
- /**
395
- * Clear all options
396
- *
397
- * Remove all options related to current user from database and any other
398
- * custom storage
399
- *
400
- * @return void
401
- *
402
- * @access public
403
- */
404
- abstract public function clearAllOptions();
405
-
406
- /**
407
- * Check if subject has specified flag
408
- *
409
- * @param string flag
410
- *
411
- * @return boolean
412
- *
413
- * @access public
414
- */
415
- abstract public function hasFlag($flag);
416
-
417
- /**
418
- * Set Subject Flag
419
- *
420
- * @param string $flag
421
- * @param boolean $value
422
- *
423
- * @return void
424
- *
425
- * @access protected
426
- */
427
- abstract public function setFlag($flag, $value = true);
428
-
429
- /**
430
- * Retrieve subject based on used class
431
- *
432
- * @return void
433
- *
434
- * @access protected
435
- */
436
- abstract protected function retrieveSubject();
437
-
438
- /**
439
- * Read object from parent subject
440
- *
441
- * @param string $object
442
- * @param mixed $object_id
443
- *
444
- * @return mixed
445
- *
446
- * @access public
447
- */
448
- public function readParentSubject($object, $object_id){
449
- if ($subject = $this->getParentSubject()){
450
- $option = $subject->getObject($object, $object_id)->getOption();
451
- } else {
452
- $option = null;
453
- }
454
-
455
- return $option;
456
- }
457
-
458
- /**
459
- * Retrive parent subject
460
- *
461
- * If there is no parent subject, return null
462
- *
463
- * @return aam_Control_Subject|null
464
- *
465
- * @access public
466
- */
467
- abstract public function getParentSubject();
468
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
application/control/subject/role.php DELETED
@@ -1,289 +0,0 @@
1
- <?php
2
-
3
- /**
4
- * ======================================================================
5
- * LICENSE: This file is subject to the terms and conditions defined in *
6
- * file 'license.txt', which is part of this source code package. *
7
- * ======================================================================
8
- */
9
-
10
- /**
11
- *
12
- * @package AAM
13
- * @author Vasyl Martyniuk <support@wpaam.com>
14
- * @copyright Copyright C 2013 Vasyl Martyniuk
15
- * @license GNU General Public License {@link http://www.gnu.org/licenses/}
16
- */
17
- class aam_Control_Subject_Role extends aam_Control_Subject {
18
-
19
- /**
20
- * Subject UID: ROLE
21
- */
22
- const UID = 'role';
23
-
24
- /**
25
- * Retrieve Role based on ID
26
- *
27
- * @return WP_Role|null
28
- *
29
- * @access protected
30
- */
31
- protected function retrieveSubject() {
32
- $roles = new WP_Roles;
33
- $role = $roles->get_role($this->getId());
34
-
35
- if (!is_null($role) && isset($role->capabilities)){
36
- //add role capability as role id, weird WordPress behavior
37
- //example is administrator capability
38
- $role->capabilities[$this->getId()] = true;
39
- }
40
-
41
- return $role;
42
- }
43
-
44
- /**
45
- * Delete User Role and all User's in role if requested
46
- *
47
- * @param boolean $delete_users
48
- *
49
- * @return boolean
50
- *
51
- * @access public
52
- */
53
- public function delete($delete_users = false) {
54
- $role = new WP_Roles;
55
-
56
- if ($this->getId() !== 'administrator') {
57
- if ($delete_users) {
58
- if (current_user_can('delete_users')) {
59
- //delete users first
60
- $users = new WP_User_Query(array(
61
- 'number' => '',
62
- 'blog_id' => get_current_blog_id(),
63
- 'role' => $this->getId()
64
- ));
65
- foreach ($users->get_results() as $user) {
66
- //user can not delete himself
67
- if (($user instanceof WP_User)
68
- && ($user->ID != get_current_user_id())) {
69
- wp_delete_user($user->ID);
70
- }
71
- }
72
- $role->remove_role($this->getId());
73
- $status = true;
74
- } else {
75
- $status = false;
76
- }
77
- } else {
78
- $role->remove_role($this->getId());
79
- $status = true;
80
- }
81
- } else {
82
- $status = false;
83
- }
84
-
85
- return $status;
86
- }
87
-
88
- /**
89
- *
90
- * @param type $name
91
- * @return boolean
92
- */
93
- public function update($name) {
94
- $role = new WP_Roles;
95
- if ($name) {
96
- $role->roles[$this->getId()]['name'] = $name;
97
- $status = aam_Core_API::updateBlogOption($role->role_key, $role->roles);
98
- } else {
99
- $status = false;
100
- }
101
-
102
- return $status;
103
- }
104
-
105
- /**
106
- * Remove Capability
107
- *
108
- * @param string $capability
109
- *
110
- * @return boolean
111
- *
112
- * @access public
113
- */
114
- public function removeCapability($capability) {
115
- return $this->getSubject()->remove_cap($capability);
116
- }
117
-
118
- /**
119
- * Check if Subject has capability
120
- *
121
- * Keep compatible with WordPress core
122
- *
123
- * @param string $capability
124
- *
125
- * @return boolean
126
- *
127
- * @access public
128
- */
129
- public function addCapability($capability) {
130
- return $this->getSubject()->add_cap($capability, 1);
131
- }
132
-
133
- /**
134
- *
135
- * @return type
136
- */
137
- public function getCapabilities() {
138
- return $this->getSubject()->capabilities;
139
- }
140
-
141
- /**
142
- *
143
- * @param type $value
144
- * @param type $object
145
- * @param type $object_id
146
- * @return type
147
- */
148
- public function updateOption($value, $object, $object_id = 0) {
149
- return aam_Core_API::updateBlogOption(
150
- $this->getOptionName($object, $object_id), $value
151
- );
152
- }
153
-
154
- /**
155
- *
156
- * @param type $object
157
- * @param type $object_id
158
- * @param type $default
159
- * @return type
160
- */
161
- public function readOption($object, $object_id = 0, $default = null) {
162
- return aam_Core_API::getBlogOption(
163
- $this->getOptionName($object, $object_id), $default
164
- );
165
- }
166
-
167
- /**
168
- *
169
- * @param type $object
170
- * @param type $object_id
171
- * @return type
172
- */
173
- public function deleteOption($object, $object_id = 0) {
174
- return aam_Core_API::deleteBlogOption(
175
- $this->getOptionName($object, $object_id)
176
- );
177
- }
178
-
179
- /**
180
- *
181
- * @param type $object
182
- * @param type $object_id
183
- * @return string
184
- */
185
- protected function getOptionName($object, $object_id) {
186
- $name = "aam_{$object}" . ($object_id ? "_{$object_id}_" : '_');
187
- $name .= self::UID . '_' . $this->getId();
188
-
189
- return $name;
190
- }
191
-
192
- /**
193
- * @inheritdoc
194
- */
195
- public function hasFlag($flag){
196
- $option = 'aam_' . self::UID . '_' . $this->getId() . "_{$flag}";
197
- return aam_Core_API::getBlogOption($option);
198
- }
199
-
200
- /**
201
- * @inheritdoc
202
- */
203
- public function setFlag($flag, $value = true) {
204
- $option = 'aam_' . self::UID . '_' . $this->getId() . "_{$flag}";
205
- if ($value === true){
206
- aam_Core_API::updateBlogOption($option, $value);
207
- } else {
208
- aam_Core_API::deleteBlogOption($option);
209
- }
210
- }
211
-
212
- /**
213
- * @inheritdoc
214
- */
215
- public function clearAllOptions(){
216
- global $wpdb;
217
-
218
- //prepare option mask
219
- $mask = 'aam_%_' . $this->getId();
220
-
221
- //clear all settings in options table
222
- $wpdb->query("DELETE FROM {$wpdb->options} WHERE option_name LIKE '{$mask}'");
223
-
224
- //clear all settings in postmeta table
225
- $wpdb->query("DELETE FROM {$wpdb->postmeta} WHERE meta_key LIKE '{$mask}'");
226
-
227
- $this->clearCache(); //delete cache
228
- //clear modifield flag
229
- $this->setFlag(aam_Control_Subject::FLAG_MODIFIED, false);
230
-
231
- do_action('aam_clear_all_options', $this);
232
- }
233
-
234
- /**
235
- *
236
- * @return type
237
- */
238
- public function getUID() {
239
- return self::UID;
240
- }
241
-
242
- /**
243
- * Get Role Cache
244
- *
245
- * AAM does not store individual Role cache that is why this function returns
246
- * always empty array
247
- *
248
- * @return array
249
- *
250
- * @access public
251
- */
252
- public function readCache(){
253
- return array();
254
- }
255
-
256
- /**
257
- * Update Role Cache
258
- *
259
- * This function does nothing because AAM does not store Role's cache
260
- *
261
- * @return boolean
262
- *
263
- * @access public
264
- */
265
- public function updateCache(){
266
- return true;
267
- }
268
-
269
- /**
270
- * Clear Role Cache
271
- *
272
- * This function does nothing because AAM does not store Role's cache
273
- *
274
- * @return boolean
275
- *
276
- * @access public
277
- */
278
- public function clearCache(){
279
- return true;
280
- }
281
-
282
- /**
283
- * @inheritdoc
284
- */
285
- public function getParentSubject(){
286
- return null;
287
- }
288
-
289
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
application/control/subject/user.php DELETED
@@ -1,395 +0,0 @@
1
- <?php
2
-
3
- /**
4
- * ======================================================================
5
- * LICENSE: This file is subject to the terms and conditions defined in *
6
- * file 'license.txt', which is part of this source code package. *
7
- * ======================================================================
8
- */
9
-
10
- /**
11
- * User's Subject
12
- *
13
- * @package AAM
14
- * @author Vasyl Martyniuk <support@wpaam.com>
15
- * @copyright Copyright C 2013 Vasyl Martyniuk
16
- * @license GNU General Public License {@link http://www.gnu.org/licenses/}
17
- */
18
- class aam_Control_Subject_User extends aam_Control_Subject {
19
-
20
- /**
21
- * Subject UID: USER
22
- */
23
- const UID = 'user';
24
-
25
- /**
26
- * AAM Capability Key
27
- *
28
- * WordPress does not allow to have different set of capabilities for one user
29
- * between sites. aam_capability key stores the set of capabilities stored after
30
- * individual user edit and merge them with system capabilities.
31
- * The merging process overwrites allcaps.
32
- *
33
- * @var array
34
- *
35
- * @access private
36
- */
37
- private $_cap_key = '';
38
-
39
- /**
40
- * @inheritdoc
41
- */
42
- public function __construct($id) {
43
- parent::__construct($id);
44
-
45
- //overwrite default set of capabilities if AAM capset is defined
46
- if ($this->isDefaultCapSet() === false){
47
- //make sure that aam_capability is actually array
48
- if (is_array($this->getSubject()->aam_caps)){
49
- $allcaps = array_merge(
50
- $this->getSubject()->allcaps, $this->getSubject()->aam_caps
51
- );
52
- $this->getSubject()->allcaps = $allcaps;
53
- }
54
- }
55
- }
56
-
57
- /**
58
- * Delete User
59
- *
60
- * @return boolean
61
- *
62
- * @access public
63
- */
64
- public function delete() {
65
- $response = false;
66
- if (current_user_can('delete_users')
67
- && ($this->getId() !== get_current_user_id())) {
68
- $response = wp_delete_user($this->getId());
69
- }
70
-
71
- return $response;
72
- }
73
-
74
- /**
75
- * Block User
76
- *
77
- * @return boolean
78
- *
79
- * @access public
80
- * @global wpdb $wpdb
81
- */
82
- public function block() {
83
- global $wpdb;
84
-
85
- $response = false;
86
- if (current_user_can('edit_users')
87
- && ($this->getId() != get_current_user_id())) {
88
- $status = ($this->getSubject()->user_status == 0 ? 1 : 0);
89
- if ($wpdb->update(
90
- $wpdb->users,
91
- array('user_status' => $status),
92
- array('ID' => $this->getId())
93
- )) {
94
- $this->getSubject()->user_status = $status;
95
- clean_user_cache($this->getSubject());
96
- $response = true;
97
- }
98
- }
99
-
100
- return $response;
101
- }
102
-
103
- /**
104
- * Retrieve User based on ID
105
- *
106
- * @return WP_Role|null
107
- *
108
- * @access protected
109
- */
110
- protected function retrieveSubject() {
111
- global $current_user;
112
-
113
- if (($current_user instanceof WP_User)
114
- && ($current_user->ID == $this->getId())) {
115
- $subject = $current_user;
116
- } else {
117
- $subject = new WP_User($this->getId());
118
- }
119
-
120
- //retrieve aam capabilities if are not retrieved yet
121
- $this->_cap_key = 'aam_capability';
122
- $subject->aam_caps = get_user_option($this->_cap_key, $this->getId());
123
-
124
- return $subject;
125
- }
126
-
127
- /**
128
- * Check if user has default capability set
129
- *
130
- * @return boolean
131
- *
132
- * @access public
133
- */
134
- public function isDefaultCapSet(){
135
- return empty($this->getSubject()->aam_caps);
136
- }
137
-
138
- /**
139
- *
140
- * @return array
141
- */
142
- public function getCapabilities() {
143
- return $this->getSubject()->allcaps;
144
- }
145
-
146
- /**
147
- * Check if user has specified capability
148
- *
149
- * @param string $capability
150
- *
151
- * @return boolean
152
- *
153
- * @access public
154
- */
155
- public function hasCapability($capability) {
156
- return user_can($this->getSubject(), $capability);
157
- }
158
-
159
- /**
160
- * Check if Subject has capability
161
- *
162
- * Keep compatible with WordPress core
163
- *
164
- * @param string $capability
165
- *
166
- * @return boolean
167
- *
168
- * @access public
169
- */
170
- public function addCapability($capability) {
171
- return $this->updateCapability($capability, true);
172
- }
173
-
174
- /**
175
- * Remove Capability
176
- *
177
- * @param string $capability
178
- *
179
- * @return boolean
180
- *
181
- * @access public
182
- */
183
- public function removeCapability($capability) {
184
- return $this->updateCapability($capability, false);
185
- }
186
-
187
- /**
188
- * Reset User Capability
189
- *
190
- * @return array
191
- *
192
- * @access public
193
- */
194
- public function resetCapability(){
195
- return delete_user_option($this->getId(), $this->_cap_key);
196
- }
197
-
198
- /**
199
- * Update User's Capability Set
200
- *
201
- * @param string $capability
202
- * @param boolean $grand
203
- *
204
- * @return boolean
205
- *
206
- * @access public
207
- */
208
- public function updateCapability($capability, $grand){
209
- //make sure that we have right array
210
- if (is_array($this->getSubject()->aam_caps)){
211
- $aam_caps = $this->getSubject()->aam_caps;
212
- } else {
213
- $aam_caps = array();
214
- }
215
-
216
- //add capability
217
- $aam_caps[$capability] = $grand;
218
- //update user data. TODO - Keep eyes on this part
219
- $this->getSubject()->data->aam_caps = $aam_caps;
220
- //save and return the result of operation
221
- return update_user_option($this->getId(), $this->_cap_key, $aam_caps);
222
- }
223
-
224
- /**
225
- *
226
- * @param type $value
227
- * @param type $object
228
- * @param type $object_id
229
- * @return type
230
- */
231
- public function updateOption($value, $object, $object_id = 0) {
232
- return update_user_option(
233
- $this->getId(), $this->getOptionName($object, $object_id), $value
234
- );
235
- }
236
-
237
- /**
238
- *
239
- * @param type $object
240
- * @param type $object_id
241
- * @param bool $inherit
242
- *
243
- * @return mixed
244
- */
245
- public function readOption($object, $object_id = 0, $inherit = true) {
246
- $option = get_user_option(
247
- $this->getOptionName($object, $object_id), $this->getId()
248
- );
249
- if (empty($option) && $inherit) {
250
- $option = $this->readParentSubject($object, $object_id);
251
- }
252
-
253
- return $option;
254
- }
255
-
256
- /**
257
- * @inheritdoc
258
- */
259
- public function getParentSubject() {
260
- //try to get this option from the User's Role
261
- $roles = $this->getSubject()->roles;
262
- //first user role is counted only. AAM does not support multi-roles
263
- $subject_role = array_shift($roles);
264
-
265
- if ($subject_role){
266
- //in case of multisite & current user does not belong to the site
267
- $role = new aam_Control_Subject_Role($subject_role);
268
- } else {
269
- $role = null;
270
- }
271
-
272
- return $role;
273
- }
274
-
275
- /**
276
- *
277
- * @param type $object
278
- * @param type $object_id
279
- * @return type
280
- */
281
- public function deleteOption($object, $object_id = 0) {
282
- return delete_user_option(
283
- $this->getId(), $this->getOptionName($object, $object_id)
284
- );
285
- }
286
-
287
- /**
288
- * @inheritdoc
289
- */
290
- public function hasFlag($flag){
291
- return get_user_option("aam_{$flag}", $this->getId());
292
- }
293
-
294
- /**
295
- * @inheritdoc
296
- */
297
- public function setFlag($flag, $value = true) {
298
- if ($value === true){
299
- update_user_option($this->getId(), "aam_{$flag}", $value);
300
- } else {
301
- delete_user_option($this->getId(), "aam_{$flag}");
302
- }
303
- }
304
-
305
- /**
306
- * @inheritdoc
307
- */
308
- public function clearAllOptions()
309
- {
310
- global $wpdb;
311
-
312
- //clear all settings in usermeta table
313
- $prefix = $wpdb->get_blog_prefix();
314
- $query = "DELETE FROM {$wpdb->usermeta} WHERE ";
315
- $query .= "meta_key LIKE '{$prefix}aam_%' AND user_id = " . $this->getId();
316
- $wpdb->query($query);
317
-
318
- //clear all settings in postmeta table
319
- $mask = 'aam_%_' . $this->getId();
320
- $wpdb->query("DELETE FROM {$wpdb->postmeta} WHERE meta_key LIKE '{$mask}'");
321
-
322
- $this->clearCache(); //delete cache
323
- $this->resetCapability(); //reset default capabilities
324
- $this->setFlag(aam_Control_Subject::FLAG_MODIFIED, false); //clear flag
325
-
326
- do_action('aam_clear_all_options', $this);
327
- }
328
-
329
- /**
330
- * Prepare option's name
331
- *
332
- * Compile option's name based on object name and object ID. As example if
333
- * object name is "post" and object ID is "5", the compiled option's name is
334
- * aam_post_5.
335
- *
336
- * @param string $object
337
- * @param string|int $object_id
338
- *
339
- * @return string
340
- *
341
- * @access protected
342
- */
343
- protected function getOptionName($object, $object_id) {
344
- return "aam_{$object}" . ($object_id ? "_{$object_id}" : '');
345
- }
346
-
347
- /**
348
- * Get Subject UID
349
- *
350
- * @return string
351
- *
352
- * @access public
353
- */
354
- public function getUID() {
355
- return self::UID;
356
- }
357
-
358
- /**
359
- * Get User's Cache
360
- *
361
- * Read User's option aam_cache and return it
362
- *
363
- * @return array
364
- *
365
- * @access public
366
- */
367
- public function readCache(){
368
- $cache = get_user_option('aam_cache', $this->getId());
369
-
370
- return (is_array($cache) ? $cache : array());
371
- }
372
-
373
- /**
374
- * Insert or Update User's Cache
375
- *
376
- * @return boolean
377
- *
378
- * @access public
379
- */
380
- public function updateCache(){
381
- return update_user_option($this->getId(), 'aam_cache', $this->getObjects());
382
- }
383
-
384
- /**
385
- * Delete User's Cache
386
- *
387
- * @return boolean
388
- *
389
- * @access public
390
- */
391
- public function clearCache(){
392
- return delete_user_option($this->getId(), 'aam_cache');
393
- }
394
-
395
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
application/control/subject/visitor.php DELETED
@@ -1,201 +0,0 @@
1
- <?php
2
-
3
- /**
4
- * ======================================================================
5
- * LICENSE: This file is subject to the terms and conditions defined in *
6
- * file 'license.txt', which is part of this source code package. *
7
- * ======================================================================
8
- */
9
-
10
- /**
11
- *
12
- * @package AAM
13
- * @author Vasyl Martyniuk <support@wpaam.com>
14
- * @copyright Copyright C 2013 Vasyl Martyniuk
15
- * @license GNU General Public License {@link http://www.gnu.org/licenses/}
16
- */
17
- class aam_Control_Subject_Visitor extends aam_Control_Subject
18
- {
19
-
20
- /**
21
- * Subject UID: VISITOR
22
- */
23
- const UID = 'visitor';
24
-
25
- /**
26
- * Constructor
27
- *
28
- * @param string|int $id
29
- *
30
- * @return void
31
- *
32
- * @access public
33
- */
34
- public function __construct($id) {
35
- //run parent constructor
36
- parent::__construct('');
37
- }
38
-
39
- /**
40
- * Retrieve Visitor Subject
41
- *
42
- * @return stdClass
43
- *
44
- * @access protected
45
- */
46
- protected function retrieveSubject(){
47
- return new stdClass();
48
- }
49
-
50
- /**
51
- *
52
- * @return type
53
- */
54
- public function getCapabilities(){
55
- return array();
56
- }
57
-
58
- /**
59
- *
60
- * @param type $value
61
- * @param type $object
62
- * @param type $object_id
63
- * @return type
64
- */
65
- public function updateOption($value, $object, $object_id = 0){
66
- return aam_Core_API::updateBlogOption(
67
- $this->getOptionName($object, $object_id), $value
68
- );
69
- }
70
-
71
- /**
72
- *
73
- * @param type $object
74
- * @param type $object_id
75
- * @return type
76
- */
77
- public function readOption($object, $object_id = 0){
78
- return aam_Core_API::getBlogOption(
79
- $this->getOptionName($object, $object_id)
80
- );
81
- }
82
-
83
- /**
84
- *
85
- * @param type $object
86
- * @param type $object_id
87
- * @return type
88
- */
89
- public function deleteOption($object, $object_id = 0){
90
- return aam_Core_API::deleteBlogOption(
91
- $this->getOptionName($object, $object_id)
92
- );
93
- }
94
-
95
- /**
96
- *
97
- * @param type $object
98
- * @param type $object_id
99
- * @return type
100
- */
101
- protected function getOptionName($object, $object_id){
102
- return 'aam_' . self::UID . "_{$object}" . ($object_id ? "_{$object_id}" : '');
103
- }
104
-
105
- /**
106
- * @inheritdoc
107
- */
108
- public function hasFlag($flag) {
109
- $option = 'aam_' . self::UID . "_{$flag}";
110
- return aam_Core_API::getBlogOption($option);
111
- }
112
-
113
- /**
114
- * @inheritdoc
115
- */
116
- public function setFlag($flag, $value = true) {
117
- $option = 'aam_' . self::UID . "_{$flag}";
118
- if ($value === true){
119
- aam_Core_API::updateBlogOption($option, $value);
120
- } else {
121
- aam_Core_API::deleteBlogOption($option);
122
- }
123
- }
124
-
125
- /**
126
- *
127
- * @return type
128
- */
129
- public function getUID(){
130
- return self::UID;
131
- }
132
-
133
- /**
134
- * Get Visitor's Cache
135
- *
136
- * Read Visitor's option aam_visitor_cache and return it
137
- *
138
- * @return array
139
- *
140
- * @access public
141
- */
142
- public function readCache(){
143
- $cache = aam_Core_API::getBlogOption('aam_visitor_cache', array());
144
-
145
- return (is_array($cache) ? $cache : array());
146
- }
147
-
148
- /**
149
- * Insert or Update Visitor's Cache
150
- *
151
- * @return boolean
152
- *
153
- * @access public
154
- */
155
- public function updateCache(){
156
- return aam_Core_API::updateBlogOption(
157
- 'aam_visitor_cache', $this->getObjects()
158
- );
159
- }
160
-
161
- /**
162
- * Delete Visitor's Cache
163
- *
164
- * @return boolean
165
- *
166
- * @access public
167
- */
168
- public function clearCache(){
169
- return aam_Core_API::deleteBlogOption('aam_visitor_cache');
170
- }
171
-
172
- /**
173
- * @inheritdoc
174
- */
175
- public function clearAllOptions(){
176
- global $wpdb;
177
-
178
- $mask = 'aam_%_' . self::UID;
179
- //clear postmeta data
180
- $wpdb->query("DELETE FROM {$wpdb->postmeta} WHERE meta_key LIKE '{$mask}'");
181
-
182
- //clear all settings in options table
183
- //TODO - convert mask to the standart aam_%_[subject]
184
- $mask = 'aam_' . self::UID . '_%';
185
- $wpdb->query("DELETE FROM {$wpdb->options} WHERE option_name LIKE '{$mask}'");
186
-
187
- $this->clearCache(); //delete cache
188
- //clear modifield flag
189
- $this->setFlag(aam_Control_Subject::FLAG_MODIFIED, false);
190
-
191
- do_action('aam_clear_all_options', $this);
192
- }
193
-
194
- /**
195
- * @inheritdoc
196
- */
197
- public function getParentSubject(){
198
- return null;
199
- }
200
-
201
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
application/core/api.php DELETED
@@ -1,215 +0,0 @@
1
- <?php
2
-
3
- /**
4
- * ======================================================================
5
- * LICENSE: This file is subject to the terms and conditions defined in *
6
- * file 'license.txt', which is part of this source code package. *
7
- * ======================================================================
8
- */
9
-
10
- /**
11
- *
12
- * @package AAM
13
- * @author Vasyl Martyniuk <support@wpaam.com>
14
- * @copyright Copyright C 2013 Vasyl Martyniuk
15
- * @license GNU General Public License {@link http://www.gnu.org/licenses/}
16
- */
17
- final class aam_Core_API {
18
-
19
- /**
20
- * Get current blog's option
21
- *
22
- * @param string $option
23
- * @param mixed $default
24
- * @param int $blog_id;
25
- *
26
- * @return mixed
27
- *
28
- * @access public
29
- * @static
30
- */
31
- public static function getBlogOption($option, $default = FALSE, $blog_id = null) {
32
- if (is_multisite()) {
33
- $blog = (is_null($blog_id) ? get_current_blog_id() : $blog_id);
34
- $response = get_blog_option($blog, $option, $default);
35
- } else {
36
- $response = get_option($option, $default);
37
- }
38
-
39
- return $response;
40
- }
41
-
42
- /**
43
- * Update Blog Option
44
- *
45
- * @param string $option
46
- * @param mixed $data
47
- * @param int $blog_id
48
- *
49
- * @return bool
50
- *
51
- * @access public
52
- * @static
53
- */
54
- public static function updateBlogOption($option, $data, $blog_id = null) {
55
- if (is_multisite()) {
56
- $blog = (is_null($blog_id) ? get_current_blog_id() : $blog_id);
57
- $response = update_blog_option($blog, $option, $data);
58
- } else {
59
- $response = update_option($option, $data);
60
- }
61
-
62
- return $response;
63
- }
64
-
65
- /**
66
- * Delete Blog Option
67
- *
68
- * @param string $option
69
- * @param int $blog_id
70
- *
71
- * @return bool
72
- *
73
- * @access public
74
- * @static
75
- */
76
- public static function deleteBlogOption($option, $blog_id = null) {
77
- if (is_multisite()) {
78
- $blog = (is_null($blog_id) ? get_current_blog_id() : $blog_id);
79
- $response = delete_blog_option($blog, $option);
80
- } else {
81
- $response = delete_option($option);
82
- }
83
-
84
- return $response;
85
- }
86
-
87
- /**
88
- * Initiate HTTP request
89
- *
90
- * @param string $url Requested URL
91
- * @param bool $send_cookies Wheather send cookies or not
92
- * @param bool $return_content Return content or not
93
- * @return bool Always return TRUE
94
- */
95
- public static function cURL($url, $send_cookies = TRUE, $return_content = FALSE) {
96
- $header = array(
97
- 'User-Agent' => aam_Core_Request::server('HTTP_USER_AGENT')
98
- );
99
-
100
- $cookies = array();
101
- if (is_array($_COOKIE) && $send_cookies) {
102
- foreach ($_COOKIE as $key => $value) {
103
- //SKIP PHPSESSID - some servers does not like it for security reason
104
- if ($key !== 'PHPSESSID') {
105
- $cookies[] = new WP_Http_Cookie(array(
106
- 'name' => $key,
107
- 'value' => $value
108
- ));
109
- }
110
- }
111
- }
112
-
113
- $res = wp_remote_request($url, array(
114
- 'headers' => $header,
115
- 'cookies' => $cookies,
116
- 'timeout' => 5)
117
- );
118
-
119
- if (is_wp_error($res)) {
120
- $result = array(
121
- 'status' => 'error',
122
- 'url' => $url
123
- );
124
- } else {
125
- $result = array('status' => 'success');
126
- if ($return_content) {
127
- $result['content'] = $res['body'];
128
- }
129
- }
130
-
131
- return $result;
132
- }
133
-
134
- /**
135
- * Check whether it is Multisite Network panel
136
- *
137
- * @return boolean
138
- *
139
- * @access public
140
- */
141
- public static function isNetworkPanel() {
142
- return (is_multisite() && is_network_admin() ? TRUE : FALSE);
143
- }
144
-
145
- /**
146
- * Check if SSL is used
147
- *
148
- * @return boolean
149
- *
150
- * @access public
151
- * @static
152
- */
153
- public static function isSSL() {
154
- if (force_ssl_admin()) {
155
- $response = true;
156
- } elseif (aam_Core_Request::server('HTTPS')) {
157
- $response = true;
158
- } elseif (aam_Core_Request::server('REQUEST_SCHEME') == 'https') {
159
- $response = true;
160
- } else {
161
- $response = false;
162
- }
163
-
164
- return $response;
165
- }
166
-
167
- /**
168
- * Get User Capability Level
169
- *
170
- * Iterate throught User Capabilities and find out the higher User Level
171
- *
172
- * @param WP_User $user
173
- *
174
- * @return int
175
- *
176
- * @access public
177
- * @static
178
- */
179
- public static function getUserLevel(WP_User $user = null){
180
- if (is_null($user) ){
181
- $user = wp_get_current_user();
182
- }
183
-
184
- $caps = $user->allcaps;
185
- //get users highest level
186
- $level = 0;
187
- do {
188
- $level++;
189
- } while (isset($caps["level_{$level}"]) && $caps["level_{$level}"]);
190
-
191
- return $level - 1;
192
- }
193
-
194
- /**
195
- * Check if current user is super admin
196
- *
197
- * Super admin is someone who is allowed to manage all roles and users. This
198
- * user is defined in ConfigPress parameter aam.super_admin
199
- *
200
- * @return boolean
201
- *
202
- * @access public
203
- * @static
204
- */
205
- public static function isSuperAdmin(){
206
- if (is_multisite()){
207
- $response = is_super_admin();
208
- } else {
209
- $super_admin = aam_Core_ConfigPress::getParam('aam.super_admin', 0);
210
- $response = ($super_admin == get_current_user_id() ? true : false);
211
- }
212
-
213
- return $response;
214
- }
215
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
application/core/extension.php DELETED
@@ -1,89 +0,0 @@
1
- <?php
2
-
3
- /**
4
- * ======================================================================
5
- * LICENSE: This file is subject to the terms and conditions defined in *
6
- * file 'license.txt', which is part of this source code package. *
7
- * ======================================================================
8
- */
9
-
10
- /**
11
- * AAM Core Extension
12
- *
13
- * @package AAM
14
- * @author Vasyl Martyniuk <support@wpaam.com>
15
- * @copyright Copyright C 2014 Vasyl Martyniuk
16
- */
17
- class AAM_Core_Extension {
18
-
19
- /**
20
- * Parent AAM object
21
- *
22
- * @var aam
23
- *
24
- * @access public
25
- */
26
- private $_parent = null;
27
-
28
- /**
29
- * Constructor
30
- *
31
- * @param aam $parent
32
- *
33
- * @return void
34
- *
35
- * @access public
36
- */
37
- public function __construct(aam $parent) {
38
- $this->setParent($parent);
39
- }
40
-
41
- /**
42
- * Activate hook
43
- *
44
- * @return boolean
45
- *
46
- * @access public
47
- */
48
- public function activate(){
49
- return true;
50
- }
51
-
52
- /**
53
- * Set Parent Object
54
- *
55
- * This is reference to main AAM class
56
- *
57
- * @param aam $parent
58
- *
59
- * @return void
60
- *
61
- * @access public
62
- */
63
- public function setParent(aam $parent) {
64
- $this->_parent = $parent;
65
- }
66
-
67
- /**
68
- * Get Parent Object
69
- *
70
- * @return aam
71
- *
72
- * @access public
73
- */
74
- public function getParent() {
75
- return $this->_parent;
76
- }
77
-
78
- /**
79
- * Get current User
80
- *
81
- * @return aam_Control_Subject_User
82
- *
83
- * @access public
84
- */
85
- public function getUser() {
86
- return $this->getParent()->getUser();
87
- }
88
-
89
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
application/core/repository.php DELETED
@@ -1,393 +0,0 @@
1
- <?php
2
-
3
- /**
4
- * ======================================================================
5
- * LICENSE: This file is subject to the terms and conditions defined in *
6
- * file 'license.txt', which is part of this source code package. *
7
- * ======================================================================
8
- */
9
-
10
- /**
11
- * Extension Repository
12
- *
13
- * @package AAM
14
- * @author Vasyl Martyniuk <support@wpaam.com>
15
- * @copyright Copyright C 2014 Vasyl Martyniuk
16
- * @license GNU General Public License {@link http://www.gnu.org/licenses/}
17
- */
18
- class aam_Core_Repository {
19
-
20
- /**
21
- * Single instance of itself
22
- *
23
- * @var aam_Core_Repository
24
- *
25
- * @access private
26
- * @static
27
- */
28
- private static $_instance = null;
29
-
30
- /**
31
- * Extension repository
32
- *
33
- * @var array
34
- *
35
- * @access private
36
- */
37
- private $_repository = array();
38
-
39
- /**
40
- * Basedir to Extentions repository
41
- *
42
- * @var string
43
- *
44
- * @access private
45
- */
46
- private $_basedir = '';
47
-
48
- /**
49
- * Extension list cache
50
- *
51
- * @var array
52
- *
53
- * @access private
54
- */
55
- private $_cache = array();
56
-
57
- /**
58
- * Repository Errors
59
- *
60
- * @var array
61
- *
62
- * @access private
63
- */
64
- private $_errors = array();
65
-
66
- /**
67
- * Main AAM class
68
- *
69
- * @var aam
70
- *
71
- * @access private
72
- */
73
- private $_parent;
74
-
75
- /**
76
- * Consturctor
77
- *
78
- * @return void
79
- *
80
- * @access protected
81
- */
82
- protected function __construct(aam $parent = null) {
83
- $this->setParent($parent);
84
- $this->_basedir = AAM_BASE_DIR . 'extension';
85
- //retrieve list of extensions from the database
86
- $repository = aam_Core_API::getBlogOption('aam_extensions', array(), 1);
87
- if (is_array($repository)){
88
- $this->_repository = $repository;
89
- }
90
- }
91
-
92
- /**
93
- * Get single instance of itself
94
- *
95
- * @param aam $parent
96
- *
97
- * @return aam_Core_Repository
98
- *
99
- * @access public
100
- * @static
101
- */
102
- public static function getInstance(aam $parent = null){
103
- if (is_null(self::$_instance)){
104
- self::$_instance = new self($parent);
105
- }
106
-
107
- return self::$_instance;
108
- }
109
-
110
- /**
111
- * Load active extensions
112
- *
113
- * @return void
114
- *
115
- * @access public
116
- */
117
- public function load() {
118
- //iterate through each active extension and load it
119
- foreach (scandir($this->_basedir) as $module) {
120
- if (!in_array($module, array('.', '..'))) {
121
- $status = aam_Core_ConfigPress::getParam(
122
- "aam.extension.{$module}.status"
123
- );
124
- if (strtolower($status) !== 'off'){
125
- $this->bootstrapExtension($module);
126
- }
127
- }
128
- }
129
- }
130
-
131
- /**
132
- * Check if extensions exists
133
- *
134
- * @param string $extension
135
- *
136
- * @return boolean
137
- *
138
- * @access public
139
- */
140
- public function hasExtension($extension){
141
- return file_exists(
142
- $this->_basedir . '/' . $this->prepareExtFName($extension)
143
- );
144
- }
145
-
146
- /**
147
- * Check if license exists
148
- *
149
- * @param string $extension
150
- *
151
- * @return boolean
152
- *
153
- * @access public
154
- */
155
- public function hasLicense($extension) {
156
- return (isset($this->_repository[$extension]) ? true : false);
157
- }
158
-
159
- /**
160
- * Get Extension info
161
- *
162
- * @param string $ext
163
- *
164
- * @return stdClass
165
- *
166
- * @access public
167
- */
168
- public function getLicense($ext){
169
- return ($this->hasLicense($ext) ? $this->_repository[$ext]->license : '');
170
- }
171
-
172
- /**
173
- * Download extension from the external server
174
- *
175
- * @return void
176
- *
177
- * @access public
178
- */
179
- public function download() {
180
- $this->initFilesystem();
181
- $repository = aam_Core_API::getBlogOption('aam_extensions', array(), 1);
182
-
183
- if (is_array($repository)) {
184
- //get the list of extensions
185
- foreach ($repository as $data) {
186
- $this->retrieve($data->license);
187
- }
188
- aam_Core_API::updateBlogOption('aam_extensions', $repository, 1);
189
- }
190
- }
191
-
192
- /**
193
- * Add new extension to repository
194
- *
195
- * @param string $extension
196
- * @param string $license
197
- *
198
- * @return boolean
199
- *
200
- * @access public
201
- */
202
- public function add($extension, $license){
203
- $this->initFilesystem();
204
- $repository = aam_Core_API::getBlogOption('aam_extensions', array(), 1);
205
-
206
- if ($this->retrieve($license)){
207
- $repository[$extension] = (object) array(
208
- 'license' => $license
209
- );
210
- aam_Core_API::updateBlogOption('aam_extensions', $repository, 1);
211
- $response = true;
212
- } else {
213
- $response = false;
214
- }
215
-
216
- return $response;
217
- }
218
-
219
- /**
220
- * Remove Extension from the repository
221
- *
222
- * @param string $extension
223
- *
224
- * @return boolean
225
- *
226
- * @access public
227
- */
228
- public function remove($extension){
229
- global $wp_filesystem;
230
-
231
- $repository = aam_Core_API::getBlogOption('aam_extensions', array(), 1);
232
-
233
- //if extension has been downloaded as part of dev license, it'll be
234
- //not present in the repository list
235
- if (isset($repository[$extension])){
236
- unset($repository[$extension]);
237
- aam_Core_API::updateBlogOption('aam_extensions', $repository, 1);
238
- }
239
-
240
- if ($this->hasExtension($extension)){
241
- $this->initFilesystem();
242
- $wp_filesystem->rmdir(
243
- $this->_basedir . '/' . $this->prepareExtFName($extension), true
244
- );
245
- }
246
-
247
- return true;
248
- }
249
-
250
- /**
251
- *
252
- * @param type $extension
253
- * @return type
254
- */
255
- protected function prepareExtFName($extension) {
256
- return str_replace(' ', '_', $extension);
257
- }
258
-
259
- /**
260
- * Initialize WordPress filesystem
261
- *
262
- * @return void
263
- *
264
- * @access protected
265
- */
266
- protected function initFilesystem(){
267
- require_once ABSPATH . 'wp-admin/includes/file.php';
268
-
269
- //initialize Filesystem
270
- WP_Filesystem();
271
- }
272
-
273
- /**
274
- * Retrieve extension based on license key
275
- *
276
- * @global WP_Filesystem $wp_filesystem
277
- * @param string $license
278
- *
279
- * @return boolean
280
- *
281
- * @access protected
282
- */
283
- protected function retrieve($license) {
284
- global $wp_filesystem;
285
-
286
- $url = WPAAM_REST_API . '?method=exchange&license=' . $license;
287
- $res = wp_remote_request($url, array('timeout' => 10));
288
- $response = false;
289
- if (!is_wp_error($res)) {
290
- //write zip archive to the filesystem first
291
- $zip = AAM_TEMP_DIR . '/' . uniqid();
292
- $content = base64_decode($res['body']);
293
- if ($content && $wp_filesystem->put_contents($zip, $content)) {
294
- $response = $this->insert($zip);
295
- $wp_filesystem->delete($zip);
296
- } elseif (empty($content)){
297
- $this->addError(__('Invalid License Key', 'aam'));
298
- } else {
299
- $this->addError(
300
- __('Failed to write file to wp-content/aam folder', 'aam')
301
- );
302
- }
303
- } else {
304
- $this->addError(__('Failed to reach the WPAAM Server', 'aam'));
305
- }
306
-
307
- return $response;
308
- }
309
-
310
- /**
311
- *
312
- * @param type $zip
313
- * @return boolean
314
- */
315
- protected function insert($zip) {
316
- $response = true;
317
- if (is_wp_error(unzip_file($zip, $this->_basedir))) {
318
- $response = false;
319
- $this->addError(
320
- __('Failed to insert extension to extension folder', 'aam')
321
- );
322
- }
323
-
324
- return $response;
325
- }
326
-
327
- /**
328
- * Bootstrap the Extension
329
- *
330
- * In case of any errors, the output can be found in console
331
- *
332
- * @param string $extension
333
- *
334
- * @return void
335
- *
336
- * @access protected
337
- */
338
- protected function bootstrapExtension($extension) {
339
- $bootstrap = $this->_basedir . "/{$extension}/index.php";
340
- if (file_exists($bootstrap) && !isset($this->_cache[$extension])) {
341
- //bootstrap the extension
342
- $this->_cache[$extension] = require_once($bootstrap);
343
- $this->_cache[$extension]->activate();
344
- }
345
- }
346
-
347
- /**
348
- * Set Parent class
349
- *
350
- * @param aam $parent
351
- *
352
- * @return void
353
- *
354
- * @access public
355
- */
356
- public function setParent($parent){
357
- $this->_parent = $parent;
358
- }
359
-
360
- /**
361
- * Get Parent class
362
- *
363
- * @return aam
364
- *
365
- * @access public
366
- */
367
- public function getParent(){
368
- return $this->_parent;
369
- }
370
-
371
- /**
372
- * Add error
373
- *
374
- * @param string $message
375
- *
376
- * @access public
377
- */
378
- public function addError($message){
379
- $this->_errors[] = $message;
380
- }
381
-
382
- /**
383
- * Get all errors
384
- *
385
- * @return array
386
- *
387
- * @access public
388
- */
389
- public function getErrors(){
390
- return $this->_errors;
391
- }
392
-
393
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
application/core/settings.php DELETED
@@ -1,89 +0,0 @@
1
- <?php
2
-
3
- /**
4
- * ======================================================================
5
- * LICENSE: This file is subject to the terms and conditions defined in *
6
- * file 'license.txt', which is part of this source code package. *
7
- * ======================================================================
8
- */
9
-
10
- /**
11
- * Core Plugin Settings
12
- *
13
- * Collection of core and default settings that are used across the plugin
14
- *
15
- * @package AAM
16
- * @author Vasyl Martyniuk <support@wpaam.com>
17
- * @copyright Copyright C Vasyl Martyniuk
18
- * @license GNU General Public License {@link http://www.gnu.org/licenses/}
19
- */
20
- final class aam_Core_Settings {
21
-
22
- /**
23
- * Collection of settings
24
- *
25
- * @var array
26
- *
27
- * @access private
28
- * @static
29
- */
30
- private static $_collection = array();
31
-
32
- /**
33
- * Get Setting
34
- *
35
- * @param string $setting
36
- * @param mixed $default
37
- *
38
- * @return mixed
39
- *
40
- * @access public
41
- * @static
42
- */
43
- public static function get($setting, $default = null) {
44
- if (empty(self::$_collection)) {
45
- self::init();
46
- }
47
-
48
- if (isset(self::$_collection[$setting])) {
49
- $response = self::$_collection[$setting];
50
- } else {
51
- $response = $default;
52
- }
53
-
54
- return apply_filters('aam_core_setting', $response, $setting);
55
- }
56
-
57
- /**
58
- * Initialize all core & default settings
59
- *
60
- * @return void
61
- *
62
- * @access protected
63
- * @static
64
- */
65
- protected static function init() {
66
- //initialize default posts & terms restrictions
67
- self::$_collection['term_frontend_restrictions'] = array(
68
- aam_Control_Object_Term::ACTION_BROWSE,
69
- aam_Control_Object_Term::ACTION_EXCLUDE,
70
- aam_Control_Object_Term::ACTION_LIST
71
- );
72
- self::$_collection['term_backend_restrictions'] = array(
73
- aam_Control_Object_Term::ACTION_BROWSE,
74
- aam_Control_Object_Term::ACTION_EDIT,
75
- aam_Control_Object_Term::ACTION_LIST
76
- );
77
- self::$_collection['post_frontend_restrictions'] = array(
78
- aam_Control_Object_Post::ACTION_READ,
79
- aam_Control_Object_Post::ACTION_EXCLUDE,
80
- aam_Control_Object_Post::ACTION_COMMENT
81
- );
82
- self::$_collection['post_backend_restrictions'] = array(
83
- aam_Control_Object_Post::ACTION_TRASH,
84
- aam_Control_Object_Post::ACTION_DELETE,
85
- aam_Control_Object_Post::ACTION_EDIT
86
- );
87
- }
88
-
89
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
application/core/update.php DELETED
@@ -1,147 +0,0 @@
1
- <?php
2
-
3
- /**
4
- * ======================================================================
5
- * LICENSE: This file is subject to the terms and conditions defined in *
6
- * file 'license.txt', which is part of this source code package. *
7
- * ======================================================================
8
- */
9
-
10
- /**
11
- * AAM Plugin Update Hook
12
- *
13
- * @package AAM
14
- * @author Vasyl Martyniuk <support@wpaam.com>
15
- * @copyright Copyright C Vasyl Martyniuk
16
- * @license GNU General Public License {@link http://www.gnu.org/licenses/}
17
- */
18
- final class aam_Core_Update {
19
-
20
- /**
21
- * Reference to AAM
22
- *
23
- * @var aam
24
- *
25
- * @access private
26
- */
27
-
28
- private $_parent = null;
29
- /**
30
- * List of stages
31
- *
32
- * @var array
33
- *
34
- * @access private
35
- */
36
- private $_stages = array();
37
-
38
- /**
39
- * Constructoor
40
- *
41
- * @return void
42
- *
43
- * @access public
44
- */
45
- public function __construct($parent) {
46
- $this->_parent = $parent;
47
- //register update stages
48
- $this->_stages = apply_filters('aam_update_stages', array(
49
- array($this, 'downloadRepository'),
50
- array($this, 'flashCache'),
51
- array($this, 'updateFlag')
52
- ));
53
- }
54
-
55
- /**
56
- * Run the update if necessary
57
- *
58
- * @return void
59
- *
60
- * @access public
61
- */
62
- public function run() {
63
- foreach ($this->_stages as $stage) {
64
- //break the change if any stage failed
65
- if (call_user_func($stage) === false) {
66
- break;
67
- }
68
- }
69
- }
70
-
71
- /**
72
- * Download the Extension Repository
73
- *
74
- * This forces the system to retrieve the new set of extensions based on
75
- * license key
76
- *
77
- * @return boolean
78
- *
79
- * @access public
80
- */
81
- public function downloadRepository() {
82
- $response = true;
83
- if ($extensions = aam_Core_API::getBlogOption('aam_extensions')) {
84
- if (is_array($extensions)){
85
- $repo = aam_Core_Repository::getInstance($this->_parent);
86
- $repo->download();
87
- }
88
- }
89
-
90
- return $response;
91
- }
92
-
93
- /**
94
- * Flash all cache
95
- *
96
- * @return boolean
97
- *
98
- * @access public
99
- */
100
- public function flashCache(){
101
- global $wpdb;
102
-
103
- //clear visitor's cache first
104
- if (is_multisite()) {
105
- //get all sites first and iterate through each
106
- $query = 'SELECT blog_id FROM ' . $wpdb->blogs;
107
- $blog_list = $wpdb->get_results($query);
108
- if (is_array($blog_list)) {
109
- $query = 'DELETE FROM %s WHERE `option_name` = "aam_%s_cache"';
110
- foreach ($blog_list as $blog) {
111
- $wpdb->query(
112
- sprintf(
113
- $query,
114
- $wpdb->get_blog_prefix($blog->blog_id) . 'options',
115
- aam_Control_Subject_Visitor::UID
116
- )
117
- );
118
- }
119
- }
120
- } else {
121
- $query = 'DELETE FROM ' . $wpdb->options . ' ';
122
- $query .= 'WHERE `option_name` = "aam_' . aam_Control_Subject_Visitor::UID . '_cache"';
123
- $wpdb->query($query);
124
- }
125
-
126
- //clear users cache
127
- $query = 'DELETE FROM ' . $wpdb->usermeta . ' ';
128
- $query .= 'WHERE `meta_key` = "aam_cache"';
129
- $wpdb->query($query);
130
-
131
- return true;
132
- }
133
-
134
- /**
135
- * Change the Update flag
136
- *
137
- * This will stop to run the update again
138
- *
139
- * @return boolean
140
- *
141
- * @access public
142
- */
143
- public function updateFlag() {
144
- return aam_Core_API::updateBlogOption('aam_updated', AAM_VERSION, 1);
145
- }
146
-
147
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
application/view/abstract.php DELETED
@@ -1,148 +0,0 @@
1
- <?php
2
-
3
- /**
4
- * ======================================================================
5
- * LICENSE: This file is subject to the terms and conditions defined in *
6
- * file 'license.txt', which is part of this source code package. *
7
- * ======================================================================
8
- */
9
-
10
- /**
11
- * Abstract class for all View Models
12
- *
13
- * @package AAM
14
- * @author Vasyl Martyniuk <support@wpaam.com>
15
- * @copyright Copyright C Vasyl Martyniuk
16
- * @license GNU General Public License {@link http://www.gnu.org/licenses/}
17
- */
18
- abstract class aam_View_Abstract {
19
-
20
- /**
21
- * Current Subject
22
- *
23
- * @var aam_Control_Subject
24
- *
25
- * @access private
26
- */
27
- static private $_subject = null;
28
-
29
- /**
30
- * Construct the Object
31
- *
32
- * Instantiate the subject one type that is going to be shared with all view
33
- * models.
34
- *
35
- * @return void
36
- *
37
- * @access public
38
- */
39
- public function __construct() {
40
- if (is_null(self::$_subject)) {
41
- $subject_class = 'aam_Control_Subject_' . ucfirst(
42
- trim(aam_Core_Request::request('subject'), '')
43
- );
44
- if (class_exists($subject_class)){
45
- $this->setSubject(new $subject_class(
46
- aam_Core_Request::request('subject_id')
47
- ));
48
- //check if view for current subject can be managed
49
- $this->isManagable();
50
- }
51
- }
52
-
53
- //control default option list
54
- add_filter('aam_default_option_list', array($this, 'defaultOption'));
55
- }
56
-
57
- /**
58
- * Check if view can be managed
59
- *
60
- * @return void
61
- *
62
- * @access public
63
- * @throw Exception You are not allowed to manage current view
64
- */
65
- public function isManagable(){
66
- if ($this->getSubject()->getUID() == aam_Control_Subject_Role::UID){
67
- $caps = $this->getSubject()->capabilities;
68
- } elseif ($this->getSubject()->getUID == aam_Control_Subject_User::UID){
69
- //AAM does not support multi-roles. Get only one first role
70
- $roles = $this->getSubject()->roles;
71
- $caps = get_role(array_shift($roles))->capabilities;
72
- } else {
73
- $caps = apply_filters('aam_managable_capabilities', null, $this);
74
- }
75
-
76
- if ($caps && !aam_Core_API::isSuperAdmin()){
77
- //get user's highest level
78
- $level = aam_Core_API::getUserLevel();
79
- if (!empty($caps['level_' . $level]) && $caps['level_' . $level]){
80
- Throw new Exception(
81
- __('You are not allowed to manager current view', 'aam')
82
- );
83
- }
84
- }
85
-
86
- return true;
87
- }
88
-
89
- /**
90
- * Control default set of options
91
- *
92
- * This is very important function. It control the default option for each
93
- * feature. It covers the scenario when the set of UI options is represented by
94
- * checkboxes.
95
- *
96
- * @param array $options
97
- *
98
- * @return array
99
- *
100
- * @access public
101
- */
102
- public function defaultOption($options){
103
- return $options;
104
- }
105
-
106
- /**
107
- * Get Subject
108
- *
109
- * @return aam_Control_Subject
110
- *
111
- * @access public
112
- */
113
- public function getSubject() {
114
- return self::$_subject;
115
- }
116
-
117
- /**
118
- * Set Subject
119
- *
120
- * @param aam_Control_Subject $subject
121
- *
122
- * @return void
123
- *
124
- * @access public
125
- */
126
- public function setSubject(aam_Control_Subject $subject) {
127
- self::$_subject = $subject;
128
- }
129
-
130
- /**
131
- * Load View template
132
- *
133
- * @param string $tmpl_path
134
- *
135
- * @return string
136
- *
137
- * @access public
138
- */
139
- public function loadTemplate($tmpl_path) {
140
- ob_start();
141
- require_once($tmpl_path);
142
- $content = ob_get_contents();
143
- ob_end_clean();
144
-
145
- return $content;
146
- }
147
-
148
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
application/view/capability.php DELETED
@@ -1,225 +0,0 @@
1
- <?php
2
-
3
- /**
4
- * ======================================================================
5
- * LICENSE: This file is subject to the terms and conditions defined in *
6
- * file 'license.txt', which is part of this source code package. *
7
- * ======================================================================
8
- */
9
-
10
- /**
11
- *
12
- * @package AAM
13
- * @author Vasyl Martyniuk <support@wpaam.com>
14
- * @copyright Copyright C 2013 Vasyl Martyniuk
15
- * @license GNU General Public License {@link http://www.gnu.org/licenses/}
16
- */
17
- class aam_View_Capability extends aam_View_Abstract {
18
-
19
- /**
20
- *
21
- * @var type
22
- */
23
- private $_groups = array(
24
- 'system' => array(
25
- 'level_0', 'level_1', 'level_2', 'level_3', 'level_4', 'level_5',
26
- 'level_6', 'level_7', 'level_8', 'level_9', 'level_10'
27
- ),
28
- 'post' => array(
29
- 'delete_others_pages', 'delete_others_posts', 'delete_pages',
30
- 'delete_posts', 'delete_private_pages', 'delete_private_posts',
31
- 'delete_published_pages', 'delete_published_posts', 'edit_others_pages',
32
- 'edit_others_posts', 'edit_pages', 'edit_private_posts',
33
- 'edit_private_pages', 'edit_posts', 'edit_published_pages',
34
- 'edit_published_posts', 'publish_pages', 'publish_posts', 'read',
35
- 'read_private_pages', 'read_private_posts', 'edit_permalink'
36
- ),
37
- 'backend' => array(
38
- 'aam_manage', 'activate_plugins', 'add_users', 'create_users',
39
- 'delete_users', 'delete_themes', 'edit_dashboard', 'edit_files',
40
- 'edit_plugins', 'edit_theme_options', 'edit_themes', 'edit_users',
41
- 'export', 'import', 'install_plugins', 'install_themes', 'list_users',
42
- 'manage_options', 'manage_links', 'manage_categories', 'promote_users',
43
- 'unfiltered_html', 'unfiltered_upload', 'update_themes', 'update_plugins',
44
- 'update_core', 'upload_files', 'delete_plugins', 'remove_users',
45
- 'switch_themes'
46
- )
47
- );
48
-
49
- /**
50
- *
51
- * @return type
52
- */
53
- public function retrieveList() {
54
- $response = array(
55
- 'aaData' => array(),
56
- 'aaDefault' => 1 //Default set of Capabilities indicator
57
- );
58
-
59
- $subject = $this->getSubject();
60
- $roles = new WP_Roles();
61
- if ($subject->getUID() === aam_Control_Subject_Role::UID) {
62
- //prepare list of all capabilities
63
- $caps = array();
64
- foreach ($roles->role_objects as $role) {
65
- $caps = array_merge($caps, $role->capabilities);
66
- }
67
- //init all caps
68
- foreach ($caps as $capability => $grant) {
69
- $response['aaData'][] = array(
70
- $capability,
71
- ($subject->hasCapability($capability) ? 1 : 0),
72
- $this->getGroup($capability),
73
- $this->getHumanText($capability),
74
- ''
75
- );
76
- }
77
- } else {
78
- $role_list = $subject->roles;
79
- $role = $roles->get_role(array_shift($role_list));
80
- foreach ($role->capabilities as $capability => $grant) {
81
- $response['aaData'][] = array(
82
- $capability,
83
- ($subject->hasCapability($capability) ? 1 : 0),
84
- $this->getGroup($capability),
85
- $this->getHumanText($capability),
86
- ''
87
- );
88
- $response['aaDefault'] = ($subject->isDefaultCapSet() ? 1 : 0);
89
- }
90
- }
91
-
92
- return json_encode($response);
93
- }
94
-
95
- /**
96
- *
97
- * @return type
98
- */
99
- public function getGroupList(){
100
- return apply_filters('aam_capability_groups', array(
101
- __('System', 'aam'),
102
- __('Post & Page', 'aam'),
103
- __('Backend Interface', 'aam'),
104
- __('Miscellaneous', 'aam')
105
- ));
106
- }
107
-
108
- /**
109
- *
110
- * @return type
111
- */
112
- public function retrieveRoleCapabilities() {
113
- return json_encode(array(
114
- 'status' => 'success',
115
- 'capabilities' => $this->getSubject()->getCapabilities()
116
- ));
117
- }
118
-
119
- /**
120
- *
121
- * @return type
122
- */
123
- public function addCapability() {
124
- $roles = new WP_Roles();
125
- $capability = trim(aam_Core_Request::post('capability'));
126
- $unfiltered = intval(aam_Core_Request::post('unfiltered'));
127
-
128
- if ($capability) {
129
- if ($unfiltered){
130
- $normalized = $capability;
131
- } else {
132
- $normalized = str_replace(' ', '_', strtolower($capability));
133
- }
134
- //add the capability to administrator's role as default behavior
135
- $roles->add_cap('administrator', $normalized);
136
- $response = array('status' => 'success', 'capability' => $normalized);
137
- } else {
138
- $response = array('status' => 'failure');
139
- }
140
-
141
- return json_encode($response);
142
- }
143
-
144
- /**
145
- *
146
- * @return type
147
- */
148
- public function deleteCapability() {
149
- $roles = new WP_Roles();
150
- $capability = trim(aam_Core_Request::post('capability'));
151
-
152
- if ($capability) {
153
- foreach ($roles->role_objects as $role) {
154
- $role->remove_cap($capability);
155
- }
156
- $response = array('status' => 'success');
157
- } else {
158
- $response = array('status' => 'failure');
159
- }
160
-
161
- return json_encode($response);
162
- }
163
-
164
- /**
165
- * Restore default user capabilities
166
- *
167
- * @return string
168
- *
169
- * @access public
170
- */
171
- public function restoreCapability(){
172
- $subject = $this->getSubject();
173
- $response = array('status' => 'failure');
174
- if (($subject->getUID() == aam_Control_Subject_User::UID)
175
- && $subject->resetCapability()){
176
- $response['status'] = 'success';
177
- }
178
-
179
- return json_encode($response);
180
- }
181
-
182
- /**
183
- *
184
- * @param type $text
185
- * @return type
186
- */
187
- protected function getHumanText($text) {
188
- $parts = preg_split('/_/', $text);
189
- if (is_array($parts)) {
190
- foreach ($parts as &$part) {
191
- $part = ucfirst($part);
192
- }
193
- }
194
-
195
- return implode(' ', $parts);
196
- }
197
-
198
- /**
199
- *
200
- * @param type $capability
201
- * @return type
202
- */
203
- protected function getGroup($capability) {
204
- if (in_array($capability, $this->_groups['system'])) {
205
- $response = __('System', 'aam');
206
- } elseif (in_array($capability, $this->_groups['post'])) {
207
- $response = __('Post & Page', 'aam');
208
- } elseif (in_array($capability, $this->_groups['backend'])) {
209
- $response = __('Backend Interface', 'aam');
210
- } else {
211
- $response = __('Miscellaneous', 'aam');
212
- }
213
-
214
- return apply_filters('aam_capability_group', $response, $capability);
215
- }
216
-
217
- /**
218
- *
219
- * @return type
220
- */
221
- public function content() {
222
- return $this->loadTemplate(dirname(__FILE__) . '/tmpl/capability.phtml');
223
- }
224
-
225
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
application/view/collection.php DELETED
@@ -1,285 +0,0 @@
1
- <?php
2
-
3
- /**
4
- * ======================================================================
5
- * LICENSE: This file is subject to the terms and conditions defined in *
6
- * file 'license.txt', which is part of this source code package. *
7
- * ======================================================================
8
- */
9
-
10
- /**
11
- * View collection
12
- *
13
- * Collection of features and subjects
14
- *
15
- * @package AAM
16
- * @author Vasyl Martyniuk <support@wpaam.com>
17
- * @copyright Copyright C Vasyl Martyniuk
18
- * @license GNU General Public License {@link http://www.gnu.org/licenses/}
19
- */
20
- class aam_View_Collection {
21
-
22
- /**
23
- * Collection of subjects
24
- *
25
- * @var array
26
- *
27
- * @access private
28
- * @static
29
- */
30
- static private $_subjects = array();
31
-
32
- /**
33
- * Collection of features
34
- *
35
- * @var array
36
- *
37
- * @access private
38
- * @static
39
- */
40
- static private $_features = array();
41
-
42
- /**
43
- * Register Subject
44
- *
45
- * @param stdClass $subject
46
- *
47
- * @return boolean
48
- *
49
- * @access public
50
- * @static
51
- */
52
- public static function registerSubject(stdClass $subject) {
53
- self::$_subjects[] = $subject;
54
-
55
- return true;
56
- }
57
-
58
- /**
59
- * Register UI Feature
60
- *
61
- * @param stdClass $feature
62
- *
63
- * @return boolean
64
- *
65
- * @access public
66
- * @static
67
- */
68
- public static function registerFeature(stdClass $feature) {
69
- $response = false;
70
-
71
- if (empty($feature->capability)){
72
- $cap = aam_Core_ConfigPress::getParam(
73
- 'aam.default_feature_capability', 'administrator'
74
- );
75
- } else {
76
- $cap = $feature->capability;
77
- }
78
-
79
- if (self::accessGranted($feature->uid, $cap)) {
80
- self::$_features[] = $feature;
81
- $response = true;
82
- }
83
-
84
- return $response;
85
- }
86
-
87
- /**
88
- * Check if feature registered
89
- *
90
- * If feature is restricted for current user or it does not exist, this function
91
- * will return false result
92
- *
93
- * @param string $search
94
- *
95
- * @return boolean
96
- *
97
- * @access public
98
- * @static
99
- */
100
- public static function hasFeature($search){
101
- $found = false;
102
- foreach(self::$_features as $feature){
103
- if ($feature->uid == $search){
104
- $found = true;
105
- break;
106
- }
107
- }
108
-
109
- return $found;
110
- }
111
-
112
- /**
113
- * Check if subject is registered
114
- *
115
- * @param string $search
116
- *
117
- * @return boolean
118
- *
119
- * @access public
120
- * @static
121
- */
122
- public static function hasSubject($search){
123
- $found = false;
124
- foreach(self::$_subjects as $subject){
125
- if ($subject->uid == $search){
126
- $found = true;
127
- break;
128
- }
129
- }
130
-
131
- return $found;
132
- }
133
-
134
- /**
135
- * Get initiated feature
136
- *
137
- * Find the feature in the collection of registered features and initiate it if
138
- * was not initiated already
139
- *
140
- * @param string $search
141
- * @return boolean
142
- */
143
- public static function getFeature($search){
144
- $response = null;
145
- foreach(self::$_features as $feature){
146
- if ($feature->uid == $search){
147
- $response = self::initController($feature);
148
- break;
149
- }
150
- }
151
-
152
- return $response;
153
- }
154
-
155
- /**
156
- * Get initiated subject
157
- *
158
- * Find the subject in the collection of registered subjects and initiate it if
159
- * was not initiated already
160
- *
161
- * @param string $search
162
- * @return boolean
163
- */
164
- public static function getSubject($search){
165
- $response = null;
166
- foreach(self::$_subjects as $subject){
167
- if ($subject->uid == $search){
168
- $response = self::initController($subject);
169
- break;
170
- }
171
- }
172
-
173
- return $response;
174
- }
175
-
176
- /**
177
- * Initiate the Controller
178
- *
179
- * @param stdClass $feature
180
- *
181
- * @return stdClass
182
- *
183
- * @access public
184
- * @static
185
- */
186
- public static function initController(stdClass $feature){
187
- if (is_string($feature->controller)){
188
- $feature->controller = new $feature->controller;
189
- }
190
-
191
- return $feature;
192
- }
193
-
194
- /**
195
- * Retrieve subjects
196
- *
197
- * @return array
198
- *
199
- * @access public
200
- * @static
201
- */
202
- public static function retrieveSubjects() {
203
- $subjects = self::$_subjects; //keep originally copy
204
- usort($subjects, 'aam_View_Collection::positionOrder');
205
-
206
- //initiate controller
207
- foreach($subjects as $subject){
208
- self::initController($subject);
209
- }
210
-
211
- return $subjects;
212
- }
213
-
214
- /**
215
- * Retrieve list of features
216
- *
217
- * Retrieve sorted list of featured based on current subject
218
- *
219
- * @param aam_Control_Subject $subject
220
- *
221
- * @return array
222
- *
223
- * @access public
224
- * @static
225
- */
226
- public static function retriveFeatures(aam_Control_Subject $subject) {
227
- $response = array();
228
-
229
- foreach (self::$_features as $feature) {
230
- if (in_array($subject->getUID(), $feature->subjects)) {
231
- $response[] = self::initController($feature);
232
- }
233
- }
234
- usort($response, 'aam_View_Collection::positionOrder');
235
-
236
- return $response;
237
- }
238
-
239
- /**
240
- * Check if current user can use feature
241
- *
242
- * Make sure that current user has enough capabilities to use feature
243
- *
244
- * @param string $feature
245
- * @param string $cap
246
- *
247
- * @return boolean
248
- *
249
- * @access protected
250
- * @static
251
- */
252
- protected static function accessGranted($feature, $cap = 'administrator') {
253
- $capability = aam_Core_ConfigPress::getParam(
254
- "aam.feature.{$feature}.capability", $cap
255
- );
256
-
257
- return current_user_can($capability);
258
- }
259
-
260
- /**
261
- * Order list of features or subjectes
262
- *
263
- * Reorganize the list based on "position" attribute
264
- *
265
- * @param array $features
266
- *
267
- * @return array
268
- *
269
- * @access public
270
- * @static
271
- */
272
- public static function positionOrder($feature_a, $feature_b){
273
- $pos_a = (empty($feature_a->position) ? 9999 : $feature_a->position);
274
- $pos_b = (empty($feature_b->position) ? 9999 : $feature_b->position);
275
-
276
- if ($pos_a == $pos_b){
277
- $response = 0;
278
- } else {
279
- $response = ($pos_a < $pos_b ? -1 : 1);
280
- }
281
-
282
- return $response;
283
- }
284
-
285
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
application/view/configpress.php DELETED
@@ -1,30 +0,0 @@
1
- <?php
2
-
3
- /**
4
- * ======================================================================
5
- * LICENSE: This file is subject to the terms and conditions defined in *
6
- * file 'license.txt', which is part of this source code package. *
7
- * ======================================================================
8
- */
9
-
10
- /**
11
- *
12
- * @package AAM
13
- * @author Vasyl Martyniuk <support@wpaam.com>
14
- * @copyright Copyright C 2013 Vasyl Martyniuk
15
- * @license GNU General Public License {@link http://www.gnu.org/licenses/}
16
- */
17
- class aam_View_ConfigPress extends aam_View_Abstract {
18
-
19
- /**
20
- * Run the Manager
21
- *
22
- * @return string
23
- *
24
- * @access public
25
- */
26
- public function run() {
27
- return $this->loadTemplate(dirname(__FILE__) . '/tmpl/configpress.phtml');
28
- }
29
-
30
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
application/view/event.php DELETED
@@ -1,83 +0,0 @@
1
- <?php
2
-
3
- /**
4
- * ======================================================================
5
- * LICENSE: This file is subject to the terms and conditions defined in *
6
- * file 'license.txt', which is part of this source code package. *
7
- * ======================================================================
8
- */
9
-
10
- /**
11
- *
12
- * @package AAM
13
- * @author Vasyl Martyniuk <support@wpaam.com>
14
- * @copyright Copyright C 2013 Vasyl Martyniuk
15
- * @license GNU General Public License {@link http://www.gnu.org/licenses/}
16
- */
17
- class aam_View_Event extends aam_View_Abstract {
18
-
19
- /**
20
- *
21
- * @return type
22
- */
23
- public function retrieveEventList() {
24
- $response = array('aaData' => array());
25
- $events = $this->getSubject()->getObject(aam_Control_Object_Event::UID);
26
- foreach ($events->getOption() as $event) {
27
- $response['aaData'][] = array(
28
- $event['event'],
29
- $event['event_specifier'],
30
- $event['post_type'],
31
- $event['action'],
32
- $event['action_specifier'],
33
- ''
34
- );
35
- }
36
-
37
- return json_encode($response);
38
- }
39
-
40
- /**
41
- *
42
- * @global type $wp_post_statuses
43
- * @return type
44
- */
45
- public function getPostStatuses() {
46
- global $wp_post_statuses;
47
-
48
- return $wp_post_statuses;
49
- }
50
-
51
- /**
52
- *
53
- * @global type $wp_post_types
54
- * @return type
55
- */
56
- public function getPostTypes() {
57
- global $wp_post_types;
58
-
59
- return $wp_post_types;
60
- }
61
-
62
- /**
63
- *
64
- * @return type
65
- */
66
- public function content() {
67
- return $this->loadTemplate(dirname(__FILE__) . '/tmpl/event.phtml');
68
- }
69
-
70
- /**
71
- * @inheritdoc
72
- */
73
- public function defaultOption($options) {
74
- //make sure that some parts are always in place
75
- if (!isset($options[aam_Control_Object_Event::UID])) {
76
- $options[aam_Control_Object_Event::UID] = array();
77
- }
78
-
79
- return $options;
80
- }
81
-
82
-
83
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
application/view/extension.php DELETED
@@ -1,115 +0,0 @@
1
- <?php
2
-
3
- /**
4
- * ======================================================================
5
- * LICENSE: This file is subject to the terms and conditions defined in *
6
- * file 'license.txt', which is part of this source code package. *
7
- * ======================================================================
8
- */
9
-
10
- /**
11
- * Extension UI controller
12
- *
13
- * @package AAM
14
- * @author Vasyl Martyniuk <support@wpaam.com>
15
- * @copyright Copyright C Vasyl Martyniuk
16
- * @license GNU General Public License {@link http://www.gnu.org/licenses/}
17
- */
18
- class aam_View_Extension extends aam_View_Abstract {
19
-
20
- /**
21
- * Extensions Repository
22
- *
23
- * @var aam_Core_Repository
24
- *
25
- * @access private
26
- */
27
- private $_repository;
28
-
29
- /**
30
- * Constructor
31
- *
32
- * The filter "aam_cpanel" can be used to control the Control Panel items.
33
- *
34
- * @return void
35
- *
36
- * @access public
37
- */
38
- public function __construct() {
39
- parent::__construct();
40
- $this->_repository = aam_Core_Repository::getInstance();
41
- }
42
-
43
- /**
44
- * Install extension
45
- *
46
- * @return string
47
- *
48
- * @access public
49
- */
50
- public function install(){
51
- $license = aam_Core_Request::post('license');
52
- $ext = aam_Core_Request::post('extension');
53
-
54
- if ($license && $this->getRepository()->add($ext, $license)){
55
- $response = array('status' => 'success');
56
- } else {
57
- $response = array(
58
- 'status' => 'failure',
59
- 'reasons' => $this->getRepository()->getErrors()
60
- );
61
- }
62
-
63
- return json_encode($response);
64
- }
65
-
66
- /**
67
- * Remove extension
68
- *
69
- * @return string
70
- *
71
- * @access public
72
- */
73
- public function remove(){
74
- $license = aam_Core_Request::post('license');
75
- $ext = aam_Core_Request::post('extension');
76
-
77
- if ($this->getRepository()->remove($ext, $license)){
78
- $response = array('status' => 'success');
79
- } else {
80
- $response = array(
81
- 'status' => 'failure',
82
- 'reasons' => $this->getRepository()->getErrors()
83
- );
84
- }
85
-
86
- return json_encode($response);
87
- }
88
-
89
- /**
90
- * Run the Manager
91
- *
92
- * @return string
93
- *
94
- * @access public
95
- */
96
- public function run() {
97
- //check if plugins/advanced-access-manager/extension is writable
98
- if (!is_writable(AAM_BASE_DIR . 'extension')){
99
- aam_Core_Console::add(__(
100
- 'Folder advanced-access-manager/extension is not writable', 'aam'
101
- ));
102
- }
103
-
104
- return $this->loadTemplate(dirname(__FILE__) . '/tmpl/extension.phtml');
105
- }
106
-
107
- /**
108
- *
109
- * @return aam_Core_Respository
110
- */
111
- public function getRepository(){
112
- return $this->_repository;
113
- }
114
-
115
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
application/view/manager.php DELETED
@@ -1,873 +0,0 @@
1
- <?php
2
- /**
3
- * ======================================================================
4
- * LICENSE: This file is subject to the terms and conditions defined in *
5
- * file 'license.txt', which is part of this source code package. *
6
- * ======================================================================
7
- */
8
-
9
- /**
10
- * Main UI Controller
11
- *
12
- * @package AAM
13
- * @author Vasyl Martyniuk <support@wpaam.com>
14
- * @copyright Copyright C Vasyl Martyniuk
15
- * @license GNU General Public License {@link http://www.gnu.org/licenses/}
16
- */
17
- class aam_View_Manager extends aam_View_Abstract {
18
-
19
- /**
20
- * Admin Menu Feature
21
- */
22
- const FEATURE_ADMIN_MENU = 'admin_menu';
23
-
24
- /**
25
- * Metaboxes & Widgetst Feature
26
- */
27
- const FEATURE_METABOX = 'metabox';
28
-
29
- /**
30
- * Capability Feature
31
- */
32
- const FEATURE_CAPABILITY = 'capability';
33
-
34
- /**
35
- * Post Access Feature
36
- */
37
- const FEATURE_POST_ACCESS = 'post_access';
38
-
39
- /**
40
- * Event Manager Feature
41
- */
42
- const FEATURE_EVENT_MANAGER = 'event_manager';
43
-
44
- /**
45
- * Default ajax response
46
- */
47
- const DEFAULT_AJAX_RESPONSE = -1;
48
-
49
- /**
50
- * Constructor
51
- *
52
- * The filter "aam_cpanel" can be used to control the Control Panel items.
53
- *
54
- * @return void
55
- *
56
- * @access public
57
- */
58
- public function __construct() {
59
- parent::__construct();
60
-
61
- $this->registerDefaultSubjects();
62
- $this->registerDefaultFeatures();
63
- }
64
-
65
- /**
66
- * Registet default list of subjects
67
- *
68
- * @return void
69
- *
70
- * @access protected
71
- */
72
- protected function registerDefaultSubjects() {
73
- aam_View_Collection::registerSubject((object)array(
74
- 'position' => 5,
75
- 'segment' => aam_Control_Subject_Role::UID,
76
- 'label' => __('Roles', 'aam'),
77
- 'title' => __('Role Manager', 'aam'),
78
- 'class' => 'manager-item manager-item-role',
79
- 'uid' => 'role',
80
- 'controller' => 'aam_View_Role'
81
- ));
82
-
83
- aam_View_Collection::registerSubject((object)array(
84
- 'position' => 10,
85
- 'segment' => aam_Control_Subject_User::UID,
86
- 'label' => __('Users', 'aam'),
87
- 'title' => __('User Manager', 'aam'),
88
- 'class' => 'manager-item manager-item-user',
89
- 'uid' => 'user',
90
- 'controller' => 'aam_View_User'
91
- ));
92
-
93
- aam_View_Collection::registerSubject((object)array(
94
- 'position' => 15,
95
- 'segment' => aam_Control_Subject_Visitor::UID,
96
- 'label' => __('Visitor', 'aam'),
97
- 'title' => __('Visitor Manager', 'aam'),
98
- 'class' => 'manager-item manager-item-visitor',
99
- 'uid' => 'visitor',
100
- 'controller' => 'aam_View_Visitor'
101
- ));
102
- }
103
-
104
- /**
105
- * Prepare default list of features
106
- *
107
- * Check if current user has proper capability to use the feature
108
- *
109
- * @return array
110
- *
111
- * @access protected
112
- */
113
- protected function registerDefaultFeatures() {
114
- $features = array();
115
-
116
- //Main Menu Tab
117
- aam_View_Collection::registerFeature((object)array(
118
- 'uid' => self::FEATURE_ADMIN_MENU,
119
- 'position' => 5,
120
- 'title' => __('Admin Menu', 'aam'),
121
- 'subjects' => array(
122
- aam_Control_Subject_Role::UID, aam_Control_Subject_User::UID
123
- ),
124
- 'controller' => 'aam_View_Menu'
125
- ));
126
-
127
-
128
- //Metaboxes & Widgets Tab
129
- aam_View_Collection::registerFeature((object)array(
130
- 'uid' => self::FEATURE_METABOX,
131
- 'position' => 10,
132
- 'title' => __('Metabox & Widget', 'aam'),
133
- 'subjects' => array(
134
- aam_Control_Subject_Role::UID,
135
- aam_Control_Subject_User::UID,
136
- aam_Control_Subject_Visitor::UID
137
- ),
138
- 'controller' => 'aam_View_Metabox'
139
- ));
140
-
141
- //Capability Tab
142
- aam_View_Collection::registerFeature((object)array(
143
- 'uid' => self::FEATURE_CAPABILITY,
144
- 'position' => 15,
145
- 'title' => __('Capability', 'aam'),
146
- 'subjects' => array(
147
- aam_Control_Subject_Role::UID, aam_Control_Subject_User::UID
148
- ),
149
- 'controller' => 'aam_View_Capability'
150
- ));
151
-
152
- //Posts & Pages Tab
153
- aam_View_Collection::registerFeature((object)array(
154
- 'uid' => self::FEATURE_POST_ACCESS,
155
- 'position' => 20,
156
- 'title' => __('Posts & Pages', 'aam'),
157
- 'subjects' => array(
158
- aam_Control_Subject_Role::UID,
159
- aam_Control_Subject_User::UID,
160
- aam_Control_Subject_Visitor::UID
161
- ),
162
- 'controller' => 'aam_View_Post'
163
- ));
164
-
165
- //Event Manager Tab
166
- aam_View_Collection::registerFeature((object)array(
167
- 'uid' => self::FEATURE_EVENT_MANAGER,
168
- 'position' => 25,
169
- 'title' => __('Event Manager', 'aam'),
170
- 'subjects' => array(
171
- aam_Control_Subject_Role::UID, aam_Control_Subject_User::UID
172
- ),
173
- 'controller' =>'aam_View_Event'
174
- ));
175
-
176
- return $features;
177
- }
178
-
179
- /**
180
- * Run the Manager
181
- *
182
- * @return string
183
- *
184
- * @access public
185
- */
186
- public function run() {
187
- return $this->loadTemplate(dirname(__FILE__) . '/tmpl/manager.phtml');
188
- }
189
-
190
- /**
191
- * Process the ajax call
192
- *
193
- * @return string
194
- *
195
- * @access public
196
- */
197
- public function processAjax(){
198
- $sub_method = aam_Core_Request::request('sub_action');
199
-
200
- if (method_exists($this, $sub_method)) {
201
- $response = call_user_func(array($this, $sub_method));
202
- } else {
203
- $response = apply_filters(
204
- 'aam_ajax_call', self::DEFAULT_AJAX_RESPONSE, $this->getSubject()
205
- );
206
- }
207
-
208
- return $response;
209
- }
210
-
211
- /**
212
- * Render the Main Control Area
213
- *
214
- * @return void
215
- *
216
- * @access public
217
- */
218
- public function retrieveFeatures() {
219
- $features = aam_View_Collection::retriveFeatures($this->getSubject());
220
- if (count($features)){
221
- ?>
222
- <div class="feature-list">
223
- <?php
224
- foreach ($features as $feature) {
225
- echo '<div class="feature-item" feature="' . $feature->uid . '">';
226
- echo '<span>' . $feature->title . '</span></div>';
227
- }
228
- ?>
229
- </div>
230
- <div class="feature-content">
231
- <?php
232
- foreach ($features as $feature) {
233
- echo $feature->controller->content($this->getSubject());
234
- }
235
- ?>
236
- </div>
237
- <br class="clear" />
238
- <?php
239
- } else {
240
- echo '<p class="feature-list-empty">';
241
- echo __('You are not allowed to manage any AAM Features.', 'aam');
242
- echo '</p>';
243
- }
244
- do_action('aam_post_features_render');
245
- }
246
-
247
- /**
248
- * Load List of Metaboxes
249
- *
250
- * @return string
251
- *
252
- * @access public
253
- */
254
- public function loadMetaboxes(){
255
- if (aam_View_Collection::hasFeature(self::FEATURE_METABOX)){
256
- $metabox = new aam_View_Metabox;
257
- $response = $metabox->retrieveList();
258
- } else {
259
- $response = self::DEFAULT_AJAX_RESPONSE;
260
- }
261
-
262
- return $response;
263
- }
264
-
265
- /**
266
- * Initialize list of metaboxes from individual link
267
- *
268
- * @return string
269
- *
270
- * @access public
271
- */
272
- public function initLink(){
273
- if (aam_View_Collection::hasFeature(self::FEATURE_METABOX)){
274
- $metabox = new aam_View_Metabox;
275
- $response = $metabox->initLink();
276
- } else {
277
- $response = self::DEFAULT_AJAX_RESPONSE;
278
- }
279
-
280
- return $response;
281
- }
282
-
283
- /**
284
- * Retrieve Available for Editing Role List
285
- *
286
- * @return string
287
- *
288
- * @access public
289
- */
290
- public function roleList(){
291
- if (aam_View_Collection::hasSubject(aam_Control_Subject_Role::UID)){
292
- $role = new aam_View_Role;
293
- $response = $role->retrieveList();
294
- } else {
295
- $response = self::DEFAULT_AJAX_RESPONSE;
296
- }
297
-
298
- return $response;
299
- }
300
-
301
- /**
302
- * Retrieve Pure Role List
303
- *
304
- * @return string
305
- *
306
- * @access public
307
- */
308
- public function plainRoleList(){
309
- if (aam_View_Collection::hasSubject(aam_Control_Subject_Role::UID)){
310
- $role = new aam_View_Role;
311
- $response = $role->retrievePureList();
312
- } else {
313
- $response = self::DEFAULT_AJAX_RESPONSE;
314
- }
315
-
316
- return $response;
317
- }
318
-
319
- /**
320
- * Add New Role
321
- *
322
- * @return string
323
- *
324
- * @access public
325
- */
326
- public function addRole()
327
- {
328
- if (aam_View_Collection::hasSubject(aam_Control_Subject_Role::UID)) {
329
- $role = new aam_View_Role;
330
- $response = $role->add();
331
- } else {
332
- $response = self::DEFAULT_AJAX_RESPONSE;
333
- }
334
-
335
- return $response;
336
- }
337
-
338
- /**
339
- * Edit Existing Role
340
- *
341
- * @return string
342
- *
343
- * @access public
344
- */
345
- public function editRole()
346
- {
347
- if (aam_View_Collection::hasSubject(aam_Control_Subject_Role::UID)) {
348
- $role = new aam_View_Role;
349
- $response = $role->edit();
350
- } else {
351
- $response = self::DEFAULT_AJAX_RESPONSE;
352
- }
353
-
354
- return $response;
355
- }
356
-
357
- /**
358
- * Delete Existing Role
359
- *
360
- * @return string
361
- *
362
- * @access public
363
- */
364
- public function deleteRole()
365
- {
366
- if (aam_View_Collection::hasSubject(aam_Control_Subject_Role::UID)) {
367
- $role = new aam_View_Role;
368
- $response = $role->delete();
369
- } else {
370
- $response = self::DEFAULT_AJAX_RESPONSE;
371
- }
372
-
373
- return $response;
374
- }
375
-
376
- /**
377
- * Retrieve Available User List
378
- *
379
- * @return string
380
- *
381
- * @access public
382
- */
383
- public function userList()
384
- {
385
- if (aam_View_Collection::hasSubject(aam_Control_Subject_User::UID)) {
386
- $user = new aam_View_User;
387
- $response = $user->retrieveList();
388
- } else {
389
- $response = self::DEFAULT_AJAX_RESPONSE;
390
- }
391
-
392
- return $response;
393
- }
394
-
395
- /**
396
- * Block Selected User
397
- *
398
- * @return string
399
- *
400
- * @access public
401
- */
402
- public function blockUser()
403
- {
404
- if (aam_View_Collection::hasSubject(aam_Control_Subject_User::UID)) {
405
- $user = new aam_View_User;
406
- $response = $user->block();
407
- } else {
408
- $response = self::DEFAULT_AJAX_RESPONSE;
409
- }
410
-
411
- return $response;
412
- }
413
-
414
- /**
415
- * Delete Selected User
416
- *
417
- * @return string
418
- *
419
- * @access public
420
- */
421
- public function deleteList()
422
- {
423
- if (aam_View_Collection::hasSubject(aam_Control_Subject_User::UID)) {
424
- $user = new aam_View_User;
425
- $response = $user->delete();
426
- } else {
427
- $response = self::DEFAULT_AJAX_RESPONSE;
428
- }
429
-
430
- return $response;
431
- }
432
-
433
- /**
434
- * Load list of capabilities
435
- *
436
- * @return string
437
- *
438
- * @access public
439
- */
440
- public function loadCapabilities()
441
- {
442
- if (aam_View_Collection::hasFeature(self::FEATURE_CAPABILITY)){
443
- $capability = new aam_View_Capability;
444
- $response = $capability->retrieveList();
445
- } else {
446
- $response = self::DEFAULT_AJAX_RESPONSE;
447
- }
448
-
449
- return $response;
450
- }
451
-
452
- /**
453
- * Get list of Capabilities by selected Role
454
- *
455
- * @return string
456
- *
457
- * @access public
458
- */
459
- public function roleCapabilities()
460
- {
461
- if (aam_View_Collection::hasFeature(self::FEATURE_CAPABILITY)){
462
- $capability = new aam_View_Capability;
463
- $response = $capability->retrieveRoleCapabilities();
464
- } else {
465
- $response = self::DEFAULT_AJAX_RESPONSE;
466
- }
467
-
468
- return $response;
469
- }
470
-
471
- /**
472
- * Add New Capability
473
- *
474
- * @return string
475
- *
476
- * @access public
477
- */
478
- public function addCapability()
479
- {
480
- if (aam_View_Collection::hasFeature(self::FEATURE_CAPABILITY)){
481
- $capability = new aam_View_Capability;
482
- $response = $capability->addCapability();
483
- } else {
484
- $response = self::DEFAULT_AJAX_RESPONSE;
485
- }
486
-
487
- return $response;
488
- }
489
-
490
- /**
491
- * Delete Capability
492
- *
493
- * @return string
494
- *
495
- * @access protected
496
- */
497
- public function deleteCapability()
498
- {
499
- if (aam_View_Collection::hasFeature(self::FEATURE_CAPABILITY)){
500
- $capability = new aam_View_Capability;
501
- $response = $capability->deleteCapability();
502
- } else {
503
- $response = self::DEFAULT_AJAX_RESPONSE;
504
- }
505
-
506
- return $response;
507
- }
508
-
509
- /**
510
- * Restore Capabilities
511
- *
512
- * @return string
513
- *
514
- * @access public
515
- */
516
- public function restoreCapabilities()
517
- {
518
- if (aam_View_Collection::hasFeature(self::FEATURE_CAPABILITY)){
519
- $capability = new aam_View_Capability;
520
- $response = $capability->restoreCapability();
521
- } else {
522
- $response = self::DEFAULT_AJAX_RESPONSE;
523
- }
524
-
525
- return $response;
526
- }
527
-
528
- /**
529
- * Get the List of Posts
530
- *
531
- * @return string
532
- *
533
- * @access public
534
- */
535
- public function postList()
536
- {
537
- if (aam_View_Collection::hasFeature(self::FEATURE_POST_ACCESS)){
538
- $post = new aam_View_Post;
539
- $response = $post->retrievePostList();
540
- } else {
541
- $response = self::DEFAULT_AJAX_RESPONSE;
542
- }
543
-
544
- return $response;
545
- }
546
-
547
- /**
548
- * Get Post Tree
549
- *
550
- * @return string
551
- *
552
- * @access public
553
- */
554
- public function postTree()
555
- {
556
- if (aam_View_Collection::hasFeature(self::FEATURE_POST_ACCESS)){
557
- $post = new aam_View_Post;
558
- $response = $post->getPostTree();
559
- } else {
560
- $response = self::DEFAULT_AJAX_RESPONSE;
561
- }
562
-
563
- return $response;
564
- }
565
-
566
- /**
567
- * Save Access settings for Post or Term
568
- *
569
- * @return string
570
- *
571
- * @access public
572
- */
573
- public function saveAccess()
574
- {
575
- if (aam_View_Collection::hasFeature(self::FEATURE_POST_ACCESS)){
576
- $post = new aam_View_Post;
577
- $response = $post->saveAccess();
578
- } else {
579
- $response = self::DEFAULT_AJAX_RESPONSE;
580
- }
581
-
582
- return $response;
583
- }
584
-
585
- /**
586
- * Get Access settings for Post or Term
587
- *
588
- * @return string
589
- *
590
- * @access public
591
- */
592
- public function getAccess()
593
- {
594
- if (aam_View_Collection::hasFeature(self::FEATURE_POST_ACCESS)){
595
- $post = new aam_View_Post;
596
- $response = $post->getAccess();
597
- } else {
598
- $response = self::DEFAULT_AJAX_RESPONSE;
599
- }
600
-
601
- return $response;
602
- }
603
-
604
- /**
605
- * Restore default access level for Post or Term
606
- *
607
- * @return string
608
- *
609
- * @access public
610
- */
611
- public function clearAccess()
612
- {
613
- if (aam_View_Collection::hasFeature(self::FEATURE_POST_ACCESS)){
614
- $post = new aam_View_Post;
615
- $response = $post->clearAccess();
616
- } else {
617
- $response = self::DEFAULT_AJAX_RESPONSE;
618
- }
619
-
620
- return $response;
621
- }
622
-
623
- /**
624
- * Delete Post
625
- *
626
- * @return string
627
- *
628
- * @access public
629
- */
630
- public function deletePost()
631
- {
632
- if (aam_View_Collection::hasFeature(self::FEATURE_POST_ACCESS)){
633
- $post = new aam_View_Post;
634
- $response = $post->deletePost();
635
- } else {
636
- $response = self::DEFAULT_AJAX_RESPONSE;
637
- }
638
-
639
- return $response;
640
- }
641
-
642
- /**
643
- * Prepare and generate the post breadcrumb
644
- *
645
- * @return string
646
- *
647
- * @access public
648
- */
649
- public function postBreadcrumb()
650
- {
651
- if (aam_View_Collection::hasFeature(self::FEATURE_POST_ACCESS)){
652
- $post = new aam_View_Post;
653
- $response = $post->getPostBreadcrumb();
654
- } else {
655
- $response = self::DEFAULT_AJAX_RESPONSE;
656
- }
657
-
658
- return $response;
659
- }
660
-
661
- /**
662
- * Get Event List
663
- *
664
- * @return string
665
- *
666
- * @access public
667
- */
668
- public function eventList()
669
- {
670
- if (aam_View_Collection::hasFeature(self::FEATURE_EVENT_MANAGER)){
671
- $event = new aam_View_Event;
672
- $response = $event->retrieveEventList();
673
- } else {
674
- $response = self::DEFAULT_AJAX_RESPONSE;
675
- }
676
-
677
- return $response;
678
- }
679
-
680
- /**
681
- * Save AAM options
682
- *
683
- * @return string
684
- *
685
- * @access public
686
- */
687
- public function save() {
688
- $this->getSubject()->save(
689
- apply_filters(
690
- 'aam_default_option_list', aam_Core_Request::post('aam')
691
- ));
692
- return json_encode(array('status' => 'success'));
693
- }
694
-
695
- /**
696
- * Roleback changes
697
- *
698
- * Restore default settings for current Subject
699
- *
700
- * @return string
701
- *
702
- * @access public
703
- */
704
- public function roleback() {
705
- //clear all settings
706
- $this->getSubject()->clearAllOptions();
707
- //clear cache
708
- $this->getSubject()->clearCache();
709
-
710
- return json_encode(array('status' => 'success'));
711
- }
712
-
713
- /**
714
- * Check if current subject can perform roleback
715
- *
716
- * This function checks if there is any saved set of settings and return
717
- * true if roleback feature can be performed
718
- *
719
- * @return string
720
- *
721
- * @access public
722
- */
723
- public function hasRoleback() {
724
- return json_encode(
725
- array(
726
- 'status' => intval(
727
- $this->getSubject()->hasFlag(
728
- aam_Control_Subject::FLAG_MODIFIED
729
- )
730
- )
731
- ));
732
- }
733
-
734
- /**
735
- * Install license
736
- *
737
- * @return string
738
- *
739
- * @access public
740
- */
741
- public function installLicense()
742
- {
743
- if (current_user_can(aam_Core_ConfigPress::getParam(
744
- 'aam.menu.extensions.capability', 'administrator'
745
- ))){
746
- $model = new aam_View_Extension();
747
- $response = $model->install();
748
- } else {
749
- $response = self::DEFAULT_AJAX_RESPONSE;
750
- }
751
-
752
- return $response;
753
- }
754
-
755
- /**
756
- * Remove license
757
- *
758
- * @return string
759
- *
760
- * @access public
761
- */
762
- public function removeLicense()
763
- {
764
- if (current_user_can(aam_Core_ConfigPress::getParam(
765
- 'aam.menu.extensions.capability', 'administrator'
766
- ))){
767
- $model = new aam_View_Extension();
768
- $response = $model->remove();
769
- } else {
770
- $response = self::DEFAULT_AJAX_RESPONSE;
771
- }
772
-
773
- return $response;
774
- }
775
-
776
- /**
777
- * Save ConfigPress
778
- *
779
- * @return string
780
- *
781
- * @access public
782
- */
783
- public function saveConfigPress()
784
- {
785
- if (current_user_can(aam_Core_ConfigPress::getParam(
786
- 'aam.menu.configpress.capability', 'administrator'
787
- ))){
788
- $result = aam_Core_ConfigPress::write(aam_Core_Request::post('config'));
789
- } else {
790
- $result = false;
791
- }
792
-
793
- return json_encode(array(
794
- 'status' => ($result === false ? 'failure' : 'success')
795
- ));
796
- }
797
-
798
- /**
799
- * Discard Help Pointer
800
- *
801
- * @return string
802
- *
803
- * @access public
804
- */
805
- public function discardHelp(){
806
- return update_user_meta(get_current_user_id(), 'aam_contextual_menu', 1);
807
- }
808
-
809
- /**
810
- * UI Javascript labels
811
- *
812
- * @return array
813
- *
814
- * @access public
815
- * @static
816
- * @todo Move to other file
817
- */
818
- public static function uiLabels() {
819
- return apply_filters('aam_localization_labels', array(
820
- 'Rollback Settings' => __('Rollback Settings', 'aam'),
821
- 'Cancel' => __('Cancel', 'aam'),
822
- 'Send E-mail' => __('Send E-mail', 'aam'),
823
- 'Add New Role' => __('Add New Role', 'aam'),
824
- 'Manage' => __('Manage', 'aam'),
825
- 'Edit' => __('Edit', 'aam'),
826
- 'Delete' => __('Delete', 'aam'),
827
- 'Filtered' => __('Filtered', 'aam'),
828
- 'Clear' => __('Clear', 'aam'),
829
- 'Add New Role' => __('Add New Role', 'aam'),
830
- 'Save Changes' => __('Save Changes', 'aam'),
831
- 'Delete Role with Users Message' => __('System detected %d user(s) with this role. All Users with Role <b>%s</b> will be deleted automatically!', 'aam'),
832
- 'Delete Role Message' => __('Are you sure that you want to delete role <b>%s</b>?', 'aam'),
833
- 'Delete Role' => __('Delete Role', 'aam'),
834
- 'Add User' => __('Add User', 'aam'),
835
- 'Filter Users' => __('Filter Users', 'aam'),
836
- 'Refresh List' => __('Refresh List', 'aam'),
837
- 'Block' => __('Block', 'aam'),
838
- 'Delete User Message' => __('Are you sure you want to delete user <b>%s</b>?', 'aam'),
839
- 'Filter Capabilities by Category' => __('Filter Capabilities by Category', 'aam'),
840
- 'Inherit Capabilities' => __('Inherit Capabilities', 'aam'),
841
- 'Add New Capability' => __('Add New Capability', 'aam'),
842
- 'Delete Capability Message' => __('Are you sure that you want to delete capability <b>%s</b>?', 'aam'),
843
- 'Delete Capability' => __('Delete Capability', 'aam'),
844
- 'Select Role' => __('Select Role', 'aam'),
845
- 'Add Capability' => __('Add Capability', 'aam'),
846
- 'Add Event' => __('Add Event', 'aam'),
847
- 'Edit Event' => __('Edit Event', 'aam'),
848
- 'Delete Event' => __('Delete Event', 'aam'),
849
- 'Save Event' => __('Save Event', 'aam'),
850
- 'Delete Event' => __('Delete Event', 'aam'),
851
- 'Filter Posts by Post Type' => __('Filter Posts by Post Type', 'aam'),
852
- 'Refresh List' => __('Refresh List', 'aam'),
853
- 'Restore Default' => __('Restore Default', 'aam'),
854
- 'Apply' => __('Apply', 'aam'),
855
- 'Edit Term' => __('Edit Term', 'aam'),
856
- 'Manager Access' => __('Manager Access', 'aam'),
857
- 'Unlock Default Accesss Control' => __('Unlock Default Accesss Control', 'aam'),
858
- 'Close' => __('Close', 'aam'),
859
- 'Edit Role' => __('Edit Role', 'aam'),
860
- 'Restore Default Capabilities' => __('Restore Default Capabilities', 'aam'),
861
- 'Delete Post Message' => __('Are you sure you want to delete <b>%s</b>?', 'aam'),
862
- 'Trash Post Message' => __('Are you sure you want to move <b>%s</b> to trash?', 'aam'),
863
- 'Delete Post' => __('Delete Post', 'aam'),
864
- 'Delete Permanently' => __('Delete Permanently', 'aam'),
865
- 'Trash Post' => __('Trash Post', 'aam'),
866
- 'Restore Default Access' => __('Restore Default Access', 'aam'),
867
- 'Duplicate' => __('Duplicate', 'aam'),
868
- 'Actions Locked' => __('Actions Locked', 'aam'),
869
- 'AAM Documentation' => __('<h3>AAM Documentation</h3><div class="inner">Find more information about Advanced Access Manager here.</div>', 'aam'),
870
- ));
871
- }
872
-
873
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
application/view/menu.php DELETED
@@ -1,150 +0,0 @@
1
- <?php
2
-
3
- /**
4
- * ======================================================================
5
- * LICENSE: This file is subject to the terms and conditions defined in *
6
- * file 'license.txt', which is part of this source code package. *
7
- * ======================================================================
8
- */
9
-
10
- /**
11
- *
12
- * @package AAM
13
- * @author Vasyl Martyniuk <support@wpaam.com>
14
- * @copyright Copyright C 2013 Vasyl Martyniuk
15
- * @license GNU General Public License {@link http://www.gnu.org/licenses/}
16
- */
17
- class aam_View_Menu extends aam_View_Abstract {
18
-
19
- /**
20
- *
21
- * @return type
22
- */
23
- public function content() {
24
- return $this->loadTemplate(dirname(__FILE__) . '/tmpl/menu.phtml');
25
- }
26
-
27
- /**
28
- * @inheritdoc
29
- */
30
- public function defaultOption($options) {
31
- //make sure that some parts are always in place
32
- if (!isset($options[aam_Control_Object_Menu::UID])) {
33
- $options[aam_Control_Object_Menu::UID] = array();
34
- }
35
-
36
- return $options;
37
- }
38
-
39
- /**
40
- *
41
- * @global type $menu
42
- * @global type $submenu
43
- * @return type
44
- */
45
- public function getMenu() {
46
- global $menu;
47
-
48
- $response = array();
49
-
50
- //let's create menu list with submenus
51
- foreach ($menu as $menu_item) {
52
- if (!preg_match('/^separator/', $menu_item[2])) {
53
- $submenu = $this->getSubmenu($menu_item[2]);
54
- $remove = !$this->getSubject()->hasCapability($menu_item[1]);
55
- if (($remove === false) || (count($submenu) !== 0)) {
56
- $item = array(
57
- 'name' => $this->removeHTML($menu_item[0]),
58
- 'id' => $menu_item[2],
59
- 'submenu' => $submenu
60
- );
61
- $response[] = $item;
62
- }
63
- }
64
- }
65
-
66
- return $response;
67
- }
68
-
69
- /**
70
- * Prepare filtered submenu
71
- *
72
- * @global array $submenu
73
- * @param string $menu
74
- *
75
- * @return array
76
- *
77
- * @access public
78
- */
79
- public function getSubmenu($menu) {
80
- global $submenu;
81
-
82
- $filtered_submenu = array();
83
- if (isset($submenu[$menu])) {
84
- foreach ($submenu[$menu] as $submenu_item) {
85
- if ($this->getSubject()->hasCapability($submenu_item[1]) !== false) {
86
- //prepare title
87
- $submenu_title = $this->removeHTML($submenu_item[0]);
88
- $filtered_submenu[] = array(
89
- 'name' => $submenu_title,
90
- 'short' => $this->prepareTitle($submenu_title),
91
- 'id' => $submenu_item[2]
92
- );
93
- }
94
- }
95
- }
96
-
97
- return $filtered_submenu;
98
- }
99
-
100
- /**
101
- *
102
- * @param type $title
103
- * @return string
104
- */
105
- protected function prepareTitle($title) {
106
- if (function_exists('mb_strlen')) {
107
- if ((mb_strlen($title) > 18)) {
108
- $title = mb_substr($title, 0, 15) . '..';
109
- }
110
- } elseif (strlen($title) > 18) {
111
- $title = substr($title, 0, 15) . '..';
112
- }
113
-
114
- return $title;
115
- }
116
-
117
- /**
118
- * Check if the entire branch is restricted
119
- *
120
- * @param array $menu
121
- *
122
- * @return boolean
123
- *
124
- * @access public
125
- */
126
- public function hasRestrictedAll($menu) {
127
- $menuControl = $this->getSubject()->getObject(aam_Control_Object_Menu::UID);
128
- $response = $menuControl->has($menu['id']);
129
-
130
- foreach ($menu['submenu'] as $submenu) {
131
- if ($menuControl->has($submenu['id']) === false) {
132
- $response = false;
133
- break;
134
- }
135
- }
136
-
137
- return $response;
138
- }
139
-
140
- /**
141
- *
142
- * @param type $text
143
- * @return type
144
- */
145
- public function removeHTML($text) {
146
- // Return clean content
147
- return strip_tags($text);
148
- }
149
-
150
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
application/view/metabox.php DELETED
@@ -1,303 +0,0 @@
1
- <?php
2
-
3
- /**
4
- * ======================================================================
5
- * LICENSE: This file is subject to the terms and conditions defined in *
6
- * file 'license.txt', which is part of this source code package. *
7
- * ======================================================================
8
- */
9
-
10
- /**
11
- * Metaboxes & Widgets Tab Controller
12
- *
13
- * @package AAM
14
- * @author Vasyl Martyniuk <support@wpaam.com>
15
- * @copyright Copyright C Vasyl Martyniuk
16
- * @license GNU General Public License {@link http://www.gnu.org/licenses/}
17
- */
18
- class aam_View_Metabox extends aam_View_Abstract {
19
-
20
- /**
21
- * Metabox Group - WIDGETS
22
- *
23
- * Is used to retrieve the list of all wigets on the frontend
24
- */
25
- const GROUP_WIDGETS = 'widgets';
26
-
27
- /**
28
- *
29
- * @var type
30
- */
31
- private $_cache = array();
32
-
33
- /**
34
- *
35
- * @global type $wp_meta_boxes
36
- * @param type $post_type
37
- */
38
- public function run($post_type) {
39
- $this->_cache = aam_Core_API::getBlogOption(
40
- 'aam_metabox_cache', array()
41
- );
42
-
43
- if ($post_type === 'dashboard') {
44
- $this->collectWidgets();
45
- } else {
46
- $this->collectMetaboxes($post_type);
47
- }
48
- aam_Core_API::updateBlogOption('aam_metabox_cache', $this->_cache);
49
- }
50
-
51
- /**
52
- *
53
- * @global type $wp_registered_widgets
54
- */
55
- protected function collectWidgets() {
56
- global $wp_registered_widgets;
57
-
58
- if (!isset($this->_cache['widgets'])) {
59
- $this->_cache['widgets'] = array();
60
- }
61
-
62
- //get frontend widgets
63
- if (is_array($wp_registered_widgets)) {
64
- foreach ($wp_registered_widgets as $id => $data) {
65
- if (is_object($data['callback'][0])) {
66
- $callback = get_class($data['callback'][0]);
67
- } elseif (is_string($data['callback'][0])) {
68
- $callback = $data['callback'][0];
69
- } else {
70
- $callback = null;
71
- }
72
-
73
- if (!is_null($callback)) { //exclude any junk
74
- $this->_cache['widgets'][$callback] = array(
75
- 'title' => $this->removeHTML($data['name']),
76
- 'id' => $callback
77
- );
78
- }
79
- }
80
- }
81
-
82
- //now collect Admin Dashboard Widgets
83
- $this->collectMetaboxes('dashboard');
84
- }
85
-
86
- /**
87
- *
88
- * @global type $wp_meta_boxes
89
- * @param type $post_type
90
- */
91
- protected function collectMetaboxes($post_type) {
92
- global $wp_meta_boxes;
93
-
94
- if (!isset($this->_cache[$post_type])) {
95
- $this->_cache[$post_type] = array();
96
- }
97
-
98
- if (isset($wp_meta_boxes[$post_type]) && is_array($wp_meta_boxes[$post_type])) {
99
- foreach ($wp_meta_boxes[$post_type] as $levels) {
100
- if (is_array($levels)) {
101
- foreach ($levels as $boxes) {
102
- if (is_array($boxes)) {
103
- foreach ($boxes as $data) {
104
- if (trim($data['id'])) { //exclude any junk
105
- $this->_cache[$post_type][$data['id']] = array(
106
- 'id' => $data['id'],
107
- 'title' => $this->removeHTML($data['title'])
108
- );
109
- }
110
- }
111
- }
112
- }
113
- }
114
- }
115
- }
116
- }
117
-
118
- /**
119
- *
120
- * @return type
121
- */
122
- public function initLink() {
123
- $link = filter_var(aam_Core_Request::post('link'), FILTER_VALIDATE_URL);
124
- if ($link) {
125
- $url = add_query_arg('aam_meta_init', 1, $link);
126
- aam_Core_API::cURL($url);
127
- $response = array('status' => 'success');
128
- } else {
129
- $response = array('status' => 'failure');
130
- }
131
-
132
- return json_encode($response);
133
- }
134
-
135
- /**
136
- *
137
- * @global type $wp_post_types
138
- * @return type
139
- */
140
- public function retrieveList() {
141
- global $wp_post_types;
142
-
143
- if (aam_Core_Request::post('refresh') == 1) {
144
- aam_Core_API::deleteBlogOption('aam_metabox_cache');
145
- $type_list = array_keys($wp_post_types);
146
- array_unshift($type_list, self::GROUP_WIDGETS);
147
-
148
- foreach ($type_list as $type) {
149
- if ($type == self::GROUP_WIDGETS) {
150
- $url = add_query_arg(
151
- 'aam_meta_init',
152
- 1,
153
- admin_url('index.php')
154
- );
155
- } else {
156
- $url = add_query_arg(
157
- 'aam_meta_init',
158
- 1,
159
- admin_url('post-new.php?post_type=' . $type)
160
- );
161
- }
162
- //grab metaboxes
163
- aam_Core_API::cURL($url);
164
- }
165
- }
166
-
167
- return $this->buildMetaboxList();
168
- }
169
-
170
- /**
171
- *
172
- * @global type $wp_post_types
173
- * @return type
174
- */
175
- protected function buildMetaboxList() {
176
- global $wp_post_types;
177
-
178
- $cache = aam_Core_API::getBlogOption('aam_metabox_cache', array());
179
- if ($this->getSubject()->getUID() == aam_Control_Subject_Visitor::UID) {
180
- $list = array(
181
- 'widgets' => (isset($cache['widgets']) ? $cache['widgets'] : array())
182
- );
183
- } else {
184
- $list = $cache;
185
- }
186
- $content = '<div id="metabox_list">';
187
- foreach ($list as $screen => $metaboxes) {
188
- $content .= '<div class="group">';
189
- switch ($screen) {
190
- case 'dashboard':
191
- $content .= '<h4>' . __('Dashboard Widgets', 'aam') . '</h4>';
192
- break;
193
-
194
- case 'widgets':
195
- $content .= '<h4>' . __('Frontend Widgets', 'aam') . '</h4>';
196
- break;
197
-
198
- default:
199
- $content .= '<h4>' . $wp_post_types[$screen]->labels->name;
200
- $content .= '</h4>';
201
- break;
202
- }
203
- $content .= '<div>';
204
- $content .= '<div class="metabox-group">';
205
- $i = 1;
206
- $metaboxControl = $this->getSubject()->getObject(
207
- aam_Control_Object_Metabox::UID
208
- );
209
- foreach ($metaboxes as $metabox) {
210
- if ($i++ == 1) {
211
- $content .= '<div class=metabox-row>';
212
- }
213
- //prepare title
214
- $title = $this->prepareTitle($metabox['title']);
215
-
216
- //prepare selected
217
- if ($metaboxControl->has($screen, $metabox['id'])) {
218
- $checked = 'checked="checked"';
219
- } else {
220
- $checked = '';
221
- }
222
-
223
- $metabox_id = "metabox_{$screen}_{$metabox['id']}";
224
-
225
- $content .= '<div class="metabox-item">';
226
- $content .= sprintf(
227
- '<label for="%s" aam-tooltip="%s">%s</label>',
228
- $metabox_id,
229
- esc_js($metabox['title']),
230
- $title
231
- );
232
- $content .= sprintf(
233
- '<input type="checkbox" id="%s" name="aam[%s][%s][%s]" %s />',
234
- $metabox_id,
235
- aam_Control_Object_Metabox::UID,
236
- $screen,
237
- $metabox['id'],
238
- $checked
239
- );
240
- $content .= '<label for="' . $metabox_id . '"><span></span></label>';
241
- $content .= '</div>';
242
- if ($i > 3) {
243
- $content .= '</div>';
244
- $i = 1;
245
- }
246
- }
247
- if ($i != 1) {
248
- $content .= '</div>';
249
- }
250
- $content .= '</div></div></div>';
251
- }
252
- $content .= '</div>';
253
-
254
- return $content;
255
- }
256
-
257
- /**
258
- *
259
- * @param type $title
260
- * @return string
261
- */
262
- protected function prepareTitle($title) {
263
- if (function_exists('mb_strlen')) {
264
- if ((mb_strlen($title) > 18)) {
265
- $title = mb_substr($title, 0, 15) . '..';
266
- }
267
- } elseif (strlen($title) > 18) {
268
- $title = substr($title, 0, 15) . '..';
269
- }
270
-
271
- return $title;
272
- }
273
-
274
- /**
275
- *
276
- * @param type $text
277
- * @return type
278
- */
279
- public function removeHTML($text) {
280
- return strip_tags($text);
281
- }
282
-
283
- /**
284
- *
285
- * @return type
286
- */
287
- public function content() {
288
- return $this->loadTemplate(dirname(__FILE__) . '/tmpl/metabox.phtml');
289
- }
290
-
291
- /**
292
- * @inheritdoc
293
- */
294
- public function defaultOption($options) {
295
- //make sure that some parts are always in place
296
- if (!isset($options[aam_Control_Object_Metabox::UID])) {
297
- $options[aam_Control_Object_Metabox::UID] = array();
298
- }
299
-
300
- return $options;
301
- }
302
-
303
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
application/view/post.php DELETED
@@ -1,549 +0,0 @@
1
- <?php
2
-
3
- /**
4
- * ======================================================================
5
- * LICENSE: This file is subject to the terms and conditions defined in *
6
- * file 'license.txt', which is part of this source code package. *
7
- * ======================================================================
8
- */
9
-
10
- /**
11
- *
12
- * @package AAM
13
- * @author Vasyl Martyniuk <support@wpaam.com>
14
- * @copyright Copyright C 2013 Vasyl Martyniuk
15
- * @license GNU General Public License {@link http://www.gnu.org/licenses/}
16
- */
17
- class aam_View_Post extends aam_View_Abstract {
18
-
19
- /**
20
- * Type of browsing object
21
- *
22
- * It can be either post or term
23
- *
24
- * @var string
25
- *
26
- * @access private
27
- */
28
- private $_post_type = 'post';
29
-
30
- /**
31
- * Term ID
32
- *
33
- * @var int
34
- *
35
- * @access private
36
- */
37
- private $_term = 0;
38
-
39
- /**
40
- * Constructor
41
- *
42
- * @return void
43
- *
44
- * @access public
45
- */
46
- public function __construct() {
47
- parent::__construct();
48
- $this->_post_type = aam_Core_Request::request('post_type');
49
- $this->_term = intval(aam_Core_Request::request('term'));
50
- }
51
-
52
- /**
53
- *
54
- * @global type $wp_post_statuses
55
- * @global type $wp_post_types
56
- * @return type
57
- */
58
- public function retrievePostList() {
59
- global $wp_post_statuses, $wp_post_types, $wp_taxonomies;
60
-
61
- $term = trim(aam_Core_Request::request('term'));
62
-
63
- //default behavior
64
- if (empty($term)) {
65
- $post_type = 'post';
66
- //root for each Post Type
67
- } elseif (isset($wp_post_types[$term])) {
68
- $post_type = $term;
69
- $term = '';
70
- } else {
71
- $taxonomy = $this->getTaxonomy($term);
72
- if (isset($wp_taxonomies[$taxonomy])) {
73
- //take in consideration only first object type
74
- $post_type = $wp_taxonomies[$taxonomy]->object_type[0];
75
- } else {
76
- $post_type = 'post';
77
- }
78
- }
79
-
80
- $args = array(
81
- 'numberposts' => aam_Core_Request::request('iDisplayLength'),
82
- 'offset' => aam_Core_Request::request('iDisplayStart'),
83
- 'fields' => 'ids',
84
- 'term' => $term,
85
- 'taxonomy' => (!empty($taxonomy) ? $taxonomy : ''),
86
- 'post_type' => $post_type,
87
- 's' => aam_Core_Request::request('sSearch'),
88
- 'post_status' => array()
89
- );
90
-
91
- $argsAll = array(
92
- 'numberposts' => '999999',
93
- 'fields' => 'ids',
94
- //'category' => $term,
95
- 'term' => $term,
96
- 'taxonomy' => (!empty($taxonomy) ? $taxonomy : ''),
97
- 'post_type' => $post_type,
98
- 's' => aam_Core_Request::request('sSearch'),
99
- 'post_status' => array()
100
- );
101
-
102
- if ($post_type != 'attachment') { //attachment has only inherit status
103
- foreach ($wp_post_statuses as $status => $data) {
104
- if ($data->show_in_admin_status_list) {
105
- $args['post_status'][] = $status;
106
- $argsAll['post_status'][] = $status;
107
- }
108
- }
109
- }
110
-
111
- $total = 0;
112
- foreach (wp_count_posts($post_type) as $status => $number) {
113
- if ($wp_post_statuses[$status]->show_in_admin_status_list) {
114
- $total += $number;
115
- }
116
- }
117
-
118
- //get displayed total
119
- $displayTotal = count(get_posts($argsAll));
120
-
121
- $response = array(
122
- 'iTotalRecords' => $total,
123
- 'iTotalDisplayRecords' => $displayTotal,
124
- 'sEcho' => aam_Core_Request::request('sEcho'),
125
- 'aaData' => array(),
126
- );
127
-
128
- foreach (get_posts($args) as $post_id) {
129
- $post = $this->getSubject()->getObject(
130
- aam_Control_Object_Post::UID, $post_id
131
- );
132
- $response['aaData'][] = array(
133
- $post->getPost()->ID,
134
- $post->getPost()->post_status,
135
- get_edit_post_link($post->getPost()->ID),
136
- $post->getPost()->post_title,
137
- $wp_post_statuses[$post->getPost()->post_status]->label,
138
- '',
139
- ($post->getOption() && !$post->getInherited() ? 1 : 0)
140
- );
141
- }
142
-
143
- return json_encode($response);
144
- }
145
-
146
- /**
147
- * Get Taxonomy by Term ID
148
- *
149
- * @global type $wpdb
150
- * @param type $object_id
151
- * @return type
152
- */
153
- private function getTaxonomy($object_id) {
154
- global $wpdb;
155
-
156
- $query = "SELECT taxonomy FROM {$wpdb->term_taxonomy} ";
157
- $query .= "WHERE term_id = {$object_id}";
158
-
159
- return $wpdb->get_var($query);
160
- }
161
-
162
- /**
163
- *
164
- * @global type $wp_post_types
165
- * @return type
166
- */
167
- public function getPostTree() {
168
- global $wp_post_types;
169
-
170
- $type = aam_Core_Request::request('root');
171
- $tree = array();
172
-
173
- if ($type == "source") {
174
- if (is_array($wp_post_types)) {
175
- foreach ($wp_post_types as $post_type => $data) {
176
- //show only list of post type which have User Interface
177
- if ($data->show_ui) {
178
- $tree[] = (object) array(
179
- 'text' => $data->label,
180
- 'expanded' => FALSE,
181
- 'hasChildren' => TRUE,
182
- 'id' => $post_type,
183
- 'classes' => 'important',
184
- );
185
- }
186
- }
187
- }
188
- } else {
189
- if (preg_match('/^[\d]+$/', $type)) {
190
- $taxonomy = $this->getTaxonomyByTerm($type);
191
- $tree = $this->buildBranch(NULL, $taxonomy, $type);
192
- } else {
193
- $tree = $this->buildBranch($type);
194
- }
195
- }
196
-
197
- if (!count($tree)) {
198
- $tree[] = (object) array(
199
- 'text' => '<i>' . __('[empty]', 'aam') . '</i>',
200
- 'hasChildren' => FALSE,
201
- 'classes' => 'post-ontree',
202
- 'id' => 'empty-' . uniqid()
203
- );
204
- }
205
-
206
- return json_encode($tree);
207
- }
208
-
209
- /**
210
- * Delete Post
211
- *
212
- * @return string
213
- *
214
- * @access public
215
- */
216
- public function deletePost() {
217
- $post_id = aam_Core_Request::post('post');
218
-
219
- if (aam_Core_Request::post('force')) {
220
- $result = wp_delete_post($post_id, true);
221
- } else {
222
- $result = wp_trash_post($post_id);
223
- }
224
-
225
- return json_encode(array('status' => ($result ? 'success' : 'failure')));
226
- }
227
-
228
- /**
229
- *
230
- * @global type $wpdb
231
- * @param type $term_id
232
- * @return boolean
233
- */
234
- protected function getTaxonomyByTerm($term_id) {
235
- global $wpdb;
236
-
237
- if ($term_id) {
238
- $query = "SELECT taxonomy FROM {$wpdb->term_taxonomy} ";
239
- $query .= "WHERE term_id = {$term_id}";
240
- $result = $wpdb->get_var($query);
241
- } else {
242
- $result = FALSE;
243
- }
244
-
245
- return $result;
246
- }
247
-
248
- /**
249
- *
250
- * @param type $post_type
251
- * @param type $taxonomy
252
- * @param type $parent
253
- * @return type
254
- */
255
- private function buildBranch($post_type, $taxonomy = FALSE, $parent = 0) {
256
- $tree = array();
257
- if (!$parent && !$taxonomy) { //root of a branch
258
- $tree = $this->buildCategories($post_type);
259
- } elseif ($taxonomy) { //build sub categories
260
- $tree = $this->buildCategories('', $taxonomy, $parent);
261
- }
262
-
263
- return $tree;
264
- }
265
-
266
- /**
267
- *
268
- * @param type $post_type
269
- * @param type $taxonomy
270
- * @param type $parent
271
- * @return type
272
- */
273
- private function buildCategories($post_type, $taxonomy = FALSE, $parent = 0) {
274
-
275
- $tree = array();
276
-
277
- if ($parent) {
278
- //$taxonomy = $this->get_taxonomy_get_term($parent);
279
- //firstly render the list of sub categories
280
- $cat_list = get_terms(
281
- $taxonomy, array(
282
- 'get' => 'all',
283
- 'parent' => $parent,
284
- 'hide_empty' => FALSE
285
- )
286
- );
287
- if (is_array($cat_list)) {
288
- foreach ($cat_list as $category) {
289
- $tree[] = $this->buildCategory($category);
290
- }
291
- }
292
- } else {
293
- $taxonomies = get_object_taxonomies($post_type);
294
- foreach ($taxonomies as $taxonomy) {
295
- if (is_taxonomy_hierarchical($taxonomy)) {
296
- $term_list = get_terms($taxonomy, array(
297
- 'parent' => $parent,
298
- 'hide_empty' => FALSE
299
- ));
300
- if (is_array($term_list)) {
301
- foreach ($term_list as $term) {
302
- $tree[] = $this->buildCategory($term);
303
- }
304
- }
305
- }
306
- }
307
- }
308
-
309
- return $tree;
310
- }
311
-
312
- /**
313
- *
314
- * @param type $category
315
- * @return type
316
- */
317
- private function buildCategory($category) {
318
- $branch = (object) array(
319
- 'text' => $category->name,
320
- 'expanded' => FALSE,
321
- 'classes' => 'important folder',
322
- );
323
- if ($this->hasCategoryChilds($category)) {
324
- $branch->hasChildren = TRUE;
325
- } else {
326
- $branch->hasChildren = FALSE;
327
- }
328
- $branch->id = $category->term_id;
329
-
330
- return $branch;
331
- }
332
-
333
- /**
334
- * Check if category has children
335
- *
336
- * @param int category ID
337
- * @return bool TRUE if has
338
- */
339
- protected function hasCategoryChilds($cat) {
340
- global $wpdb;
341
-
342
- //get number of categories
343
- $query = "SELECT COUNT(*) FROM {$wpdb->term_taxonomy} ";
344
- $query .= "WHERE parent={$cat->term_id}";
345
- $counter = $wpdb->get_var($query);
346
-
347
- return ($counter ? TRUE : FALSE);
348
- }
349
-
350
- /**
351
- *
352
- * @global type $wp_post_types
353
- * @global type $wp_taxonomies
354
- * @return type
355
- */
356
- public function getPostBreadcrumb() {
357
- global $wp_post_types, $wp_taxonomies;
358
-
359
- $id = aam_Core_Request::post('id');
360
- $response = array();
361
- if (preg_match('/^[\d]+$/', $id)) {
362
- $taxonomy = $this->getTaxonomyByTerm($id);
363
- //get post type
364
- if (isset($wp_taxonomies[$taxonomy])) {
365
- $post_type = $wp_taxonomies[$taxonomy]->object_type[0];
366
- if (isset($wp_post_types[$post_type])) {
367
- $response['post_type'] = $post_type;
368
- $response['term'] = $id;
369
- $response['link'] = get_edit_term_link($id, $taxonomy);
370
- $term = get_term($id, $taxonomy);
371
- $tree = $this->renderBreadcrumbTree($term, array());
372
- $tree[] = array($post_type, $wp_post_types[$post_type]->label);
373
- $response['breadcrumb'] = array_reverse($tree);
374
- }
375
- }
376
- } else {
377
- if (isset($wp_post_types[$id])) {
378
- $response = array(
379
- 'post_type' => $id,
380
- 'term' => 0,
381
- 'breadcrumb' => array(
382
- array($id, $wp_post_types[$id]->label),
383
- array('#', __('All', 'aam'))
384
- )
385
- );
386
- } else {
387
- $response = array(
388
- 'term' => '',
389
- 'breadcrumb' => array(
390
- array('post', $wp_post_types['post']->label),
391
- array('#', __('All', 'aam'))
392
- )
393
- );
394
- }
395
- }
396
-
397
- return json_encode($response);
398
- }
399
-
400
- /**
401
- *
402
- * @param type $term
403
- * @param type $tree
404
- * @return type
405
- */
406
- protected function renderBreadcrumbTree($term, $tree) {
407
- $tree[] = array($term->term_id, $term->name);
408
- if ($term->parent) {
409
- $tree = $this->renderBreadcrumbTree(
410
- get_term($term->parent, $term->taxonomy), $tree
411
- );
412
- }
413
-
414
- return $tree;
415
- }
416
-
417
- /**
418
- *
419
- * @return type
420
- */
421
- public function content() {
422
- return $this->loadTemplate(dirname(__FILE__) . '/tmpl/post.phtml');
423
- }
424
-
425
- /**
426
- * Save Post or Term access
427
- *
428
- * @return string
429
- *
430
- * @access public
431
- */
432
- public function saveAccess() {
433
- $object_id = aam_Core_Request::post('id');
434
-
435
- $limit_counter = apply_filters(
436
- 'wpaccess_restrict_limit',
437
- aam_Core_API::getBlogOption('aam_access_limit', 0)
438
- );
439
-
440
- if ($limit_counter == -1 || $limit_counter <= 10) {
441
- $access = aam_Core_Request::post('access');
442
- if (aam_Core_Request::post('type') == 'term') {
443
- $object = $this->getSubject()->getObject(
444
- aam_Control_Object_Term::UID, $object_id
445
- );
446
- if ($limit_counter !== -1 && isset($access['post'])) {
447
- unset($access['post']);
448
- }
449
- } else {
450
- $object = $this->getSubject()->getObject(
451
- aam_Control_Object_Post::UID, $object_id
452
- );
453
- }
454
- $object->save($access);
455
- aam_Core_API::updateBlogOption('aam_access_limit', $limit_counter + 1);
456
-
457
- //clear cache
458
- $this->getSubject()->clearCache();
459
-
460
- $response = array('status' => 'success');
461
- } else {
462
- $response = array(
463
- 'status' => 'failure',
464
- 'reason' => 'limitation',
465
- 'extension' => 'AAM Unlimited Basic'
466
- );
467
- }
468
-
469
- return json_encode($response);
470
- }
471
-
472
- /**
473
- * Get Post or Term access
474
- *
475
- * @return string
476
- *
477
- * @access public
478
- */
479
- public function getAccess() {
480
- return json_encode(array(
481
- 'html' => $this->loadTemplate(
482
- dirname(__FILE__) . '/tmpl/control_area.phtml'
483
- ),
484
- 'counter' => apply_filters(
485
- 'wpaccess_restrict_limit',
486
- aam_Core_API::getBlogOption('aam_access_limit', 0)
487
- )
488
- ));
489
- }
490
-
491
- /**
492
- * Restore default access level for object
493
- *
494
- * @return string
495
- *
496
- * @access public
497
- */
498
- public function clearAccess() {
499
- $type = aam_Core_Request::post('type');
500
- $object_id = aam_Core_Request::post('id');
501
-
502
- if ($type === aam_Control_Object_Term::UID) {
503
- $object = $this->getSubject()->getObject(
504
- aam_Control_Object_Term::UID, $object_id
505
- );
506
- } else {
507
- $object = $this->getSubject()->getObject(
508
- aam_Control_Object_Post::UID, $object_id
509
- );
510
- }
511
-
512
- return json_encode(array(
513
- 'status' => ($object->delete() ? 'success' : 'failure')
514
- ));
515
- }
516
-
517
- /**
518
- * Get Object Title
519
- *
520
- * @param string $type
521
- * @param string $name
522
- *
523
- * @return string
524
- *
525
- * @access public
526
- * @global array $wp_post_types
527
- * @global array $wp_taxonomies
528
- */
529
- public function getObjectTitle($type, $name) {
530
- global $wp_post_types, $wp_taxonomies;
531
-
532
- if ($type == aam_Control_Object_Term::UID) {
533
- if (!empty($wp_taxonomies[$name]->labels->name)) {
534
- $title = $wp_taxonomies[$name]->labels->name;
535
- } else {
536
- $title = 'term';
537
- }
538
- } else {
539
- if (!empty($wp_post_types[$name]->labels->name)) {
540
- $title = $wp_post_types[$name]->labels->name;
541
- } else {
542
- $title = 'post';
543
- }
544
- }
545
-
546
- return $title;
547
- }
548
-
549
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
application/view/tmpl/capability.phtml DELETED
@@ -1,84 +0,0 @@
1
- <?php
2
-
3
- /**
4
- * ======================================================================
5
- * LICENSE: This file is subject to the terms and conditions defined in *
6
- * file 'license.txt', which is part of this source code package. *
7
- * ======================================================================
8
- */
9
- ?>
10
- <div class="feature-content-container" id="capability_content">
11
- <table id="capability_list">
12
- <thead>
13
- <tr>
14
- <th>Capability ID</th>
15
- <th>Checked</th>
16
- <th width="35%"><?php echo __('Category', 'aam'); ?></th>
17
- <th width="50%"><?php echo __('Capability', 'aam'); ?></th>
18
- <th><?php echo __('Control', 'aam'); ?></th>
19
- </tr>
20
- </thead>
21
- <tbody></tbody>
22
- </table>
23
-
24
- <div id="filter_capability_dialog" class="aam-dialog" title="<?php echo __('Filter Capability List', 'aam'); ?>">
25
- <table id="capability_group_list">
26
- <thead>
27
- <tr>
28
- <th><?php echo __('Group Name', 'aam'); ?></th>
29
- <th><?php echo __('Select', 'aam'); ?></th>
30
- </tr>
31
- </thead>
32
- <tbody>
33
- <?php foreach ($this->getGroupList() as $group) { ?>
34
- <tr>
35
- <td><?php echo $group; ?></td>
36
- <td>
37
- <div class="aam-list-row-actions">
38
- <a href="#" class="aam-icon aam-icon-small aam-icon-select"><span></span></a>
39
- </div>
40
- </td>
41
- </tr>
42
- <?php } ?>
43
- </tbody>
44
- </table>
45
- </div>
46
-
47
- <div id="copy_role_dialog" class="aam-dialog" title="<?php echo __('Inherit Capabilities', 'aam'); ?>">
48
- <table id="copy_role_list">
49
- <thead>
50
- <tr>
51
- <th>Role ID</th>
52
- <th>User Count</th>
53
- <th width="80%"><?php echo __('Role Name', 'aam'); ?></th>
54
- <th><?php echo __('Action', 'aam'); ?></th>
55
- </tr>
56
- </thead>
57
- <tbody></tbody>
58
- </table>
59
- <div class="aam-metabox-loader"></div>
60
- </div>
61
-
62
- <div id="capability_form_dialog" class="aam-dialog" title="<?php echo __('Add New Capability', 'aam'); ?>">
63
- <table class="dataTable">
64
- <tbody>
65
- <tr>
66
- <th class="aam-align-right"><?php echo __('Capability Name', 'aam'); ?><span class="aam-asterix">*</span>:</th>
67
- <td><input type="text" id="capability_name" class="aam-input" /></td>
68
- </tr>
69
- <tr>
70
- <th class="aam-align-right"><?php echo __('Keep Unfiltered', 'aam'); ?>:</th>
71
- <td>
72
- <input type="checkbox" id="capability_unfiltered" />
73
- <label for="capability_unfiltered"><span></span></label>
74
- </td>
75
- </tr>
76
- </tbody>
77
- </table>
78
- <div class="aam-metabox-loader"></div>
79
- </div>
80
-
81
- <div id="delete_capability" class="aam-dialog" title="<?php echo __('Delete Capability', 'aam'); ?>">
82
- <p class="dialog-content"></p>
83
- </div>
84
- </div>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
application/view/tmpl/configpress.phtml DELETED
@@ -1,167 +0,0 @@
1
- <?php
2
- /**
3
- * ======================================================================
4
- * LICENSE: This file is subject to the terms and conditions defined in *
5
- * file 'license.txt', which is part of this source code package. *
6
- * ======================================================================
7
- */
8
- ?>
9
- <div class="wrap" id="aam">
10
- <div class="postbox-container" style="width:70%;" id="configpress_area">
11
- <div class="metabox-holder">
12
- <div class="meta-box-sortables">
13
- <div class="postbox">
14
- <div class="handlediv" title="<?php echo __('Click to toggle', 'aam'); ?>"></div>
15
- <h3 class="hndle">
16
- <span>
17
- <?php echo __('AAM ConfigPress', 'aam'); ?>
18
- </span>
19
- </h3>
20
- <div class="inside">
21
- <p>
22
- ConfigPress has been moved as a stand-alone plugin. Please install <a href="https://wordpress.org/plugins/configpress/" target="_blank">ConfigPress plugin</a> from official WordPress repository.
23
- </p>
24
- <?php $config = aam_Core_ConfigPress::read(); ?>
25
- <?php if ($config) { ?>
26
- <p>After you install ConfigPress plugin. Go to Settings > ConfigPress and copy & paste your below configurations:</p>
27
- <pre>
28
- <?php echo aam_Core_ConfigPress::read(); ?>
29
- </pre>
30
- <?php } ?>
31
- </div>
32
- </div>
33
- </div>
34
- </div>
35
- </div>
36
-
37
- <div class="postbox-container" style="width:70%; display: none;" id="configpress_info">
38
- <div class="metabox-holder">
39
- <div class="meta-box-sortables">
40
- <div class="postbox">
41
- <div class="handlediv" title="<?php echo __('Click to toggle', 'aam'); ?>"></div>
42
- <h3 class="hndle">
43
- <span>
44
- <?php echo __('AAM ConfigPress Information', 'aam'); ?>
45
- </span>
46
- </h3>
47
- <div class="inside">
48
- <p>
49
- Below is the list of all possible ConfigPress settings with explanation:
50
- <pre style="background:#fff;color:#000">
51
- <span style="color:#05a;font-weight: bold;">[aam]</span>
52
- <span style="color:#00b418">#Define default access to admin menu items if it was not configured.</span>
53
- <span style="color:#00b418">#By default it is set to</span> <span style="color:#d80800">"allow"</span>.
54
- <span style="color:#0100b6;font-weight:700;">menu.undefined</span> = <span style="color:#d80800">"deny"</span>
55
- <span style="color:#00b418">#Change the default access capability to AAM->Access Control screen.</span>
56
- <span style="color:#00b418">#By default capability is <b>administrator</b>.</span>
57
- <span style="color:#0100b6;font-weight:700;">page.access_control.capability</span> = <span style="color:#d80800">"aam_manager"</span>
58
- <span style="color:#00b418">#Change the default access capability to AAM->ConfigPress screen.</span>
59
- <span style="color:#00b418">#By default capability is <b>administrator</b>.</span>
60
- <span style="color:#0100b6;font-weight:700;">page.configpress.capability</span> = <span style="color:#d80800">"configpress_guru"</span>
61
- <span style="color:#00b418">#Change the default access capability to AAM->Extensions screen.</span>
62
- <span style="color:#00b418">#By default capability is <b>administrator</b>.</span>
63
- <span style="color:#0100b6;font-weight:700;">page.extensions.capability</span> = <span style="color:#d80800">"aam_extensions_manager"</span>
64
- <span style="color:#00b418">#If there is no access defined for specific post or page, by default AAM tries to inherit</span>
65
- <span style="color:#00b418">#settings from parent category. Below setting can change this behavior.</span>
66
- <span style="color:#0100b6;font-weight:700;">post.inherit</span> = <span style="color:#d80800">"false"</span>
67
- <span style="color:#00b418">#If there is no access defined for specific category, by default AAM tries to inherit</span>
68
- <span style="color:#00b418">#settings from parent category. Below setting can change this behavior.</span>
69
- <span style="color:#0100b6;font-weight:700;">term.inherit</span> = <span style="color:#d80800">"false"</span>
70
- <span style="color:#00b418">#To speed up the AAM execution, the result can be cached.</span>
71
- <span style="color:#00b418">#The cache is automatically flush during plugin update or when you hit Save button.</span>
72
- <span style="color:#0100b6;font-weight:700;">caching</span> = <span style="color:#d80800">"true"</span>
73
- <span style="color:#00b418">#Unlock restricted features in AAM for one administrator. By default you are not</span>
74
- <span style="color:#00b418">#allowed to manager other administrators.</span>
75
- <span style="color:#0100b6;font-weight:700;">super_admin</span> = <span style="color:#d80800">"true"</span>
76
- <span style="color:#00b418">#Keep the native name for newly created roles. Each WordPress role like</span>
77
- <span style="color:#00b418">#Editor or Contributor has internal ID (usually lowercase equivalent) and title.</span>
78
- <span style="color:#00b418">#Each time you create new role with AAM, the ID is changed to something like aam_78koi9831933i.</span>
79
- <span style="color:#00b418">#Setting below suppresses this behavior and keep the name in lowercase format.</span>
80
- <span style="color:#0100b6;font-weight:700;">native_role_id</span> = <span style="color:#d80800">"true"</span>
81
- <span style="color:#00b418">#Control access to Edit Permalink feature (Permalink block under the post or page title).</span>
82
- <span style="color:#00b418">#If this feature is activated, make sure that you created the custom capability "Manage Permalink"</span>
83
- <span style="color:#00b418">#By default this feature is deactivated.</span>
84
- <span style="color:#0100b6;font-weight:700;">control_permalink</span> = <span style="color:#d80800">"false"</span>
85
-
86
- <span style="color:#05a;font-weight: bold;">[backend]</span>
87
- <span style="color:#00b418">#Defines redirect behavior when access is denied to any backend resource like menu</span>
88
- <span style="color:#00b418">#or post. It can be whether valid URL or post/page ID number.</span>
89
- <span style="color:#00b418">#By default it will show <b>Access Denied</b> message.</span>
90
- <span style="color:#0100b6;font-weight:700;">access.deny.redirect</span> = <span style="color:#d80800">"http://someurlhere.in"</span>
91
- <span style="color:#00b418">#Redefine default <b>Access Denied</b> message.</span>
92
- <span style="color:#0100b6;font-weight:700;">access.deny.message</span> = <span style="color:#d80800">"Oops. This is restricted area"</span>
93
-
94
- <span style="color:#05a;font-weight: bold;">[frontend]</span>
95
- <span style="color:#00b418">#Defines redirect behavior when access is denied to any frontend resource like page</span>
96
- <span style="color:#00b418">#or post. It can be whether valid URL or post/page ID number.</span>
97
- <span style="color:#00b418">#By default it will show <b>Access Denied</b> message.</span>
98
- <span style="color:#0100b6;font-weight:700;">access.deny.redirect</span> = <span style="color:#d80800">"http://someurlhere.in"</span>
99
- <span style="color:#00b418">#Redefine default <b>Access Denied</b> message.</span>
100
- <span style="color:#0100b6;font-weight:700;">access.deny.message</span> = <span style="color:#d80800">"Oops. This is restricted area"</span>
101
- </pre>
102
- </p>
103
- </div>
104
- </div>
105
- </div>
106
- </div>
107
- </div>
108
-
109
- <?php if (aam_Core_Console::hasIssues()) { ?>
110
- <div class="postbox-container" style="width:25%; margin-left: 2%;">
111
- <div class="metabox-holder">
112
- <div class="meta-box-sortables">
113
- <div class="postbox">
114
- <div class="handlediv" title="<?php echo __('Click to toggle', 'aam'); ?>"></div>
115
- <h3 class="hndle">
116
- <span><?php echo __('AAM Warnings', 'aam'); ?></span>
117
- </h3>
118
- <div class="inside">
119
- <?php foreach (aam_Core_Console::getWarnings() as $warning) { ?>
120
- <div class="aam-warning"><span><?php echo $warning; ?></span></div>
121
- <?php } ?>
122
- </div>
123
- </div>
124
- </div>
125
- </div>
126
- </div>
127
- <?php } ?>
128
-
129
- <div class="postbox-container" style="width:25%; margin-left: 2%;">
130
- <div class="metabox-holder">
131
- <div class="meta-box-sortables">
132
- <div class="postbox" id="control_panel">
133
- <div class="handlediv" title="<?php echo __('Click to toggle', 'aam'); ?>"></div>
134
- <h3 class="hndle">
135
- <span><?php echo __('Control Panel', 'aam'); ?></span>
136
- </h3>
137
- <div class="inside">
138
- <div class="large-icons-row">
139
- <a href="#" class="aam-icon aam-icon-large aam-icon-large-info" id="info_screen" >
140
- <span></span><?php echo __('Info', 'aam'); ?>
141
- </a>
142
- <a href="#" class="aam-icon aam-icon-large aam-icon-large-editor" style="display: none;" id="configpress_screen" >
143
- <span></span><?php echo __('Editor', 'aam'); ?>
144
- </a>
145
- </div>
146
- <div class="medium-icons-row">
147
- <a href="https://twitter.com/wpaam" target="_blank" class="aam-icon aam-icon-medium aam-icon-medium-twitter" aam-tooltip="<?php echo __('Follow @wpaam', 'aam'); ?>">
148
- <span></span><?php echo __('Follow', 'aam'); ?>
149
- </a>
150
- <a href="http://wpaam.com/support" target="_blank" class="aam-icon aam-icon-medium aam-icon-medium-help" aam-tooltip="<?php echo __('Help Forum', 'aam'); ?>">
151
- <span></span><?php echo __('Help', 'aam'); ?>
152
- </a>
153
- <a href="mailto:support@wpaam.com" class="aam-icon aam-icon-medium aam-icon-medium-message" id="aam_message" aam-tooltip="<?php echo __('E-mail Us', 'aam'); ?>">
154
- <span></span><?php echo __('E-mail Us', 'aam'); ?>
155
- </a>
156
- <a href="http://wordpress.org/support/view/plugin-reviews/advanced-access-manager" target="_blank" class="aam-icon aam-icon-medium aam-icon-medium-star" aam-tooltip="<?php echo __('Rate AAM', 'aam'); ?>">
157
- <span></span><?php echo __('Rate Us', 'aam'); ?>
158
- </a>
159
- </div>
160
- </div>
161
- </div>
162
- </div>
163
- </div>
164
- </div>
165
- </div>
166
-
167
-
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
application/view/tmpl/control_area.phtml DELETED
@@ -1,242 +0,0 @@
1
- <?php
2
-
3
- /**
4
- * ======================================================================
5
- * LICENSE: This file is subject to the terms and conditions defined in *
6
- * file 'license.txt', which is part of this source code package. *
7
- * ======================================================================
8
- */
9
- global $wp_taxonomies;
10
-
11
- if (aam_Core_Request::post('type') === aam_Control_Object_Term::UID) {
12
- $object = $this->getSubject()->getObject(
13
- aam_Control_Object_Term::UID, aam_Core_Request::post('id')
14
- );
15
- if (isset($wp_taxonomies[$object->getTerm()->taxonomy])){
16
- //take in consideration only first object type
17
- $post_type = $wp_taxonomies[$object->getTerm()->taxonomy]->object_type[0];
18
- } else {
19
- $post_type = 'post';
20
- }
21
- } else {
22
- $object = $this->getSubject()->getObject(
23
- aam_Control_Object_Post::UID, aam_Core_Request::post('id')
24
- );
25
- $post_type = $object->getPost()->post_type;
26
- }
27
-
28
- if ($post_type == 'attachment'){
29
- ?>
30
- <div class="attachment-access-block">
31
- Get better access control over your media files with
32
- <b><a href="http://wpaam.com/aam-extensions/aam-media-manager/" target="_blank">AAM Media Manager</a></b>
33
- extension.
34
- </div>
35
- <?php
36
- }
37
- if ($object->getUID() == aam_Control_Object_Term::UID) { ?>
38
- <div id="term_access">
39
- <table class="dataTable" id="term_access_frontend">
40
- <thead>
41
- <tr>
42
- <th colspan="2" class="term-access-title">
43
- <?php echo $this->getObjectTitle('term', $object->getTerm()->taxonomy) . ' ' . __('Access', 'aam'); ?>
44
- </th>
45
- </tr>
46
- <tr>
47
- <th><?php echo __('Capability', 'aam'); ?></th>
48
- <th><?php echo __('Restrict', 'aam'); ?></th>
49
- </tr>
50
- </thead>
51
- <tbody>
52
- <?php
53
- $term_fcaps = aam_Core_ConfigPress::getParam(
54
- 'aam.term.' . $object->getTerm()->taxonomy . '.caps.frontend',
55
- apply_filters(
56
- 'aam_term_access_list',
57
- aam_Core_Settings::get('term_frontend_restrictions'),
58
- 'frontend',
59
- $object,
60
- $post_type
61
- )
62
- );
63
- foreach ($term_fcaps as $i => $action) {
64
- ?>
65
- <tr class="<?php echo ($i % 2 ? 'event' : 'odd'); ?>">
66
- <td>
67
- <div class="post-access">
68
- <?php echo __($action, 'aam'); ?>
69
- </div>
70
- </td>
71
- <td>
72
- <div class="aam-list-row-actions">
73
- <div class="post-action">
74
- <input type="checkbox" id="term_frontend_<?php echo $action; ?>" name="access[term][frontend][<?php echo $action; ?>]" <?php echo ($object->has('frontend', $action) ? 'checked="checked"' : ''); ?> />
75
- <label for="term_frontend_<?php echo $action; ?>">
76
- <span></span>
77
- </label>
78
- </div>
79
- </div>
80
- </td>
81
- </tr>
82
- <?php } ?>
83
- </tbody>
84
- </table>
85
-
86
- <table class="dataTable" id="term_access_backend">
87
- <thead>
88
- <tr>
89
- <th colspan="2" class="term-access-title">
90
- <?php echo $this->getObjectTitle('term', $object->getTerm()->taxonomy) . ' ' . __('Access', 'aam'); ?>
91
- </th>
92
- </tr>
93
- <tr>
94
- <th><?php echo __('Capability', 'aam'); ?></th>
95
- <th><?php echo __('Restrict', 'aam'); ?></th>
96
- </tr>
97
- </thead>
98
- <tbody>
99
- <?php
100
- $term_bcaps = aam_Core_ConfigPress::getParam(
101
- 'aam.term.' . $object->getTerm()->taxonomy . '.caps.backend',
102
- apply_filters(
103
- 'aam_term_access_list',
104
- aam_Core_Settings::get('term_backend_restrictions'),
105
- 'backend',
106
- $object,
107
- $post_type
108
- )
109
- );
110
- foreach ($term_bcaps as $i => $action) {
111
- ?>
112
- <tr class="<?php echo ($i % 2 ? 'event' : 'odd'); ?>">
113
- <td>
114
- <div class="post-access">
115
- <?php echo __($action, 'aam'); ?>
116
- </div>
117
- </td>
118
- <td>
119
- <div class="aam-list-row-actions">
120
- <div class="post-action">
121
- <input type="checkbox" id="term_backend_<?php echo $action ?>" name="access[term][backend][<?php echo $action; ?>]" <?php echo ($object->has('backend', $action) ? 'checked="checked"' : ''); ?> />
122
- <label for="term_backend_<?php echo $action ?>">
123
- <span></span>
124
- </label>
125
- </div>
126
- </div>
127
- </td>
128
- </tr>
129
- <?php } ?>
130
- </tbody>
131
- </table>
132
- </div>
133
- <?php } ?>
134
- <div id="post_access" class="post-access-list">
135
- <table class="dataTable" id="post_access_frontend">
136
- <thead>
137
- <tr>
138
- <th colspan="2" class="post-access-title">
139
- <?php if (($object->getUID() == aam_Control_Object_Term::UID)){
140
- echo sprintf(__('All %s in Term', 'aam'), $this->getObjectTitle('post', $post_type));
141
- } else {
142
- echo $this->getObjectTitle('post', $post_type) . ' ' . __('Access', 'aam');
143
- }
144
- ?>
145
- </th>
146
- </tr>
147
- <tr>
148
- <th><?php echo __('Capability', 'aam'); ?></th>
149
- <th><?php echo __('Restrict', 'aam'); ?></th>
150
- </tr>
151
- </thead>
152
- <tbody>
153
- <?php
154
- $post_fcaps = aam_Core_ConfigPress::getParam(
155
- 'aam.post.' . $post_type . '.caps.frontend',
156
- apply_filters(
157
- 'aam_post_access_list',
158
- aam_Core_Settings::get('post_frontend_restrictions'),
159
- 'frontend',
160
- $object,
161
- $post_type
162
- )
163
- );
164
- foreach ($post_fcaps as $i => $action) {
165
- ?>
166
- <tr class="<?php echo ($i % 2 ? 'event' : 'odd'); ?>">
167
- <td>
168
- <div class="post-access">
169
- <?php echo __($action, 'aam'); ?>
170
- </div>
171
- </td>
172
- <td>
173
- <div class="aam-list-row-actions">
174
- <div class="post-action post-action-check">
175
- <input type="checkbox" id="post_frontend_<?php echo $action ?>" name="access[post][frontend][<?php echo $action; ?>]" <?php echo ($object->has('frontend', $action) ? 'checked="checked"' : ''); ?> />
176
- <label for="post_frontend_<?php echo $action ?>">
177
- <span></span>
178
- </label>
179
- </div>
180
- </div>
181
- </td>
182
- </tr>
183
- <?php } ?>
184
- </tbody>
185
- </table>
186
- <table class="dataTable" id="post_access_backend">
187
- <thead>
188
- <tr>
189
- <th colspan="2" class="post-access-title">
190
- <?php if (($object->getUID() == aam_Control_Object_Term::UID)){
191
- echo sprintf(__('All %s in Term', 'aam'), $this->getObjectTitle('post', $post_type));
192
- } else {
193
- echo $this->getObjectTitle('post', $post_type) . ' ' . __('Access', 'aam');
194
- }
195
- ?>
196
- </th>
197
- </tr>
198
- <tr>
199
- <th><?php echo __('Capability', 'aam'); ?></th>
200
- <th><?php echo __('Restrict', 'aam'); ?></th>
201
- </tr>
202
- </thead>
203
- <tbody>
204
- <?php
205
- $post_bcaps = aam_Core_ConfigPress::getParam(
206
- 'aam.post.' . $post_type . '.caps.backend',
207
- apply_filters(
208
- 'aam_post_access_list',
209
- aam_Core_Settings::get('post_backend_restrictions'),
210
- 'backend',
211
- $object,
212
- $post_type
213
- )
214
- );
215
- foreach ($post_bcaps as $i => $action) {
216
- ?>
217
- <tr class="<?php echo ($i % 2 ? 'event' : 'odd'); ?>">
218
- <td>
219
- <div class="post-access">
220
- <?php echo __($action, 'aam'); ?>
221
- </div>
222
- </td>
223
- <td>
224
- <div class="aam-list-row-actions">
225
- <div class="post-action post-action-check">
226
- <input type="checkbox" id="post_backend_<?php echo $action ?>" name="access[post][backend][<?php echo $action; ?>]" <?php echo ($object->has('backend', $action) ? 'checked="checked"' : ''); ?> />
227
- <label for="post_backend_<?php echo $action ?>">
228
- <span></span>
229
- </label>
230
- </div>
231
- </div>
232
- </td>
233
- </tr>
234
- <?php } ?>
235
- </tbody>
236
- </table>
237
- <div class="post-access-block">
238
- <a href="#" class="aam-lock-big">
239
- <span><?php echo __('Get AAM Plus Package', 'aam'); ?></span>
240
- </a>
241
- </div>
242
- </div>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
application/view/tmpl/event.phtml DELETED
@@ -1,109 +0,0 @@
1
- <?php
2
-
3
- /**
4
- * ======================================================================
5
- * LICENSE: This file is subject to the terms and conditions defined in *
6
- * file 'license.txt', which is part of this source code package. *
7
- * ======================================================================
8
- */
9
- ?>
10
- <div class="feature-content-container" id="event_manager_content">
11
- <table id="event_list">
12
- <thead>
13
- <tr>
14
- <th width="30%"><?php echo __('Event', 'aam'); ?></th>
15
- <th><?php echo __('Event Specifier', 'aam'); ?></th>
16
- <th width="25%"><?php echo __('Bind Post Type', 'aam'); ?></th>
17
- <th width="30%"><?php echo __('Action', 'aam'); ?></th>
18
- <th><?php echo __('Action Specifier', 'aam'); ?></th>
19
- <th><?php echo __('Control', 'aam'); ?></th>
20
- </tr>
21
- </thead>
22
- <tbody></tbody>
23
- </table>
24
- <div id="manage_event_dialog" class="aam-dialog" title="<?php echo __('Manager Event'); ?>">
25
- <table class="aam-form-table">
26
- <tbody>
27
- <tr>
28
- <th width="40%"><?php echo __('Event', 'aam'); ?><span class="aam-asterix">*</span>:</th>
29
- <td>
30
- <select id="event_event">
31
- <option value="status_change"><?php echo __('Post Status Change', 'aam'); ?></option>
32
- <option value="content_change"><?php echo __('Post Content Change', 'aam'); ?></option>
33
- </select>
34
- </td>
35
- </tr>
36
- <tr id="status_changed" style="display: none;">
37
- <th><?php echo __('Status Changed To', 'aam'); ?><span class="aam-asterix">*</span>:</th>
38
- <td>
39
- <select id="event_specifier">
40
- <?php
41
- foreach ($this->getPostStatuses() as $status => $config) {
42
- if ($config->show_in_admin_status_list) {
43
- echo '<option value="' . $status . '">';
44
- echo $config->label . '</option>';
45
- }
46
- }
47
- ?>
48
- </select>
49
- </td>
50
- </tr>
51
- <tr>
52
- <th><?php echo __('Bind to Post Type', 'aam'); ?><span class="aam-asterix">*</span>:</th>
53
- <td>
54
- <select id="event_bind">
55
- <?php
56
- foreach ($this->getPostTypes() as $post => $config) {
57
- echo '<option value="' . $post . '">';
58
- echo $config->labels->name . '</option>';
59
- }
60
- ?>
61
- </select>
62
- </td>
63
- </tr>
64
- <tr>
65
- <th><?php echo __('Action', 'aam'); ?><span class="aam-asterix">*</span>:</th>
66
- <td>
67
- <select id="event_action">
68
- <option value="notify"><?php echo __('Email Notification', 'aam'); ?></option>
69
- <option value="change_status"><?php echo __('Change Status', 'aam'); ?></option>
70
- <option value="callback"><?php echo __('Callback', 'aam'); ?></option>
71
- </select>
72
- </td>
73
- </tr>
74
- <tr id="event_specifier_notify_holder" class="event-specifier">
75
- <th><?php echo __('Email Address', 'aam'); ?><span class="aam-asterix">*</span>:</th>
76
- <td>
77
- <input type="text" id="event_specifier_notify" />
78
- </td>
79
- </tr>
80
- <tr id="event_specifier_change_status_holder" class="event-specifier">
81
- <th><?php echo __('Change Status To', 'aam'); ?><span class="aam-asterix">*</span>:</th>
82
- <td>
83
- <select id="event_specifier_change_status">
84
- <?php
85
- foreach ($this->getPostStatuses() as $status => $config) {
86
- if ($config->show_in_admin_status_list) {
87
- echo '<option value="' . $status . '">';
88
- echo $config->label . '</option>';
89
- }
90
- }
91
- ?>
92
- </select>
93
- </td>
94
- </tr>
95
- <tr id="event_specifier_callback_holder" class="event-specifier">
96
- <th><?php echo __('Callback Function', 'aam'); ?><span class="aam-asterix">*</span>:</th>
97
- <td>
98
- <input type="text" id="event_specifier_callback" />
99
- </td>
100
- </tr>
101
- </tbody>
102
- </table>
103
- </div>
104
-
105
- <div id="delete_event" class="aam-dialog" title="<?php echo __('Delete Event', 'aam'); ?>">
106
- <p class="dialog-content"><?php echo __('Are you sure you want to delete selected Event?', 'aam'); ?></p>
107
- </div>
108
-
109
- </div>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
application/view/tmpl/extension.phtml DELETED
@@ -1,233 +0,0 @@
1
- <?php
2
- /**
3
- * ======================================================================
4
- * LICENSE: This file is subject to the terms and conditions defined in *
5
- * file 'license.txt', which is part of this source code package. *
6
- * ======================================================================
7
- */
8
- ?>
9
- <div class="wrap" id="aam">
10
- <div class="postbox-container" style="width:70%;">
11
- <div class="metabox-holder">
12
- <div class="meta-box-sortables">
13
- <div class="postbox">
14
- <div class="handlediv" title="<?php echo __('Click to toggle', 'aam'); ?>"></div>
15
- <h3 class="hndle">
16
- <span>
17
- <?php echo __('Extension List', 'aam'); ?>
18
- </span>
19
- </h3>
20
- <div class="inside">
21
- <table id="extension_list">
22
- <thead>
23
- <tr>
24
- <th width="25%"><?php echo __('Name', 'aam'); ?></th>
25
- <th width="50%"><?php echo __('Description', 'aam'); ?></th>
26
- <th width="10%"><?php echo __('Price', 'aam'); ?></th>
27
- <th><?php echo __('Actions', 'aam'); ?></th>
28
- </tr>
29
- </thead>
30
- <tbody>
31
- <tr>
32
- <td>
33
- <span class="extension-name">AAM Plus Package</span>
34
- </td>
35
- <td class="extension-description">
36
- This Extension extends default AAM basic features and unlock some limitations.
37
- Add custom taxonomy <b>Page Category</b> to ground pages into categories;
38
- Unlock the limitation for Post Access control;
39
- Add additional Capability Group <b>Comments</b> with the set of capabilities to control default comment
40
- actions like <b>Reply</b>, <b>Mark Spam</b>, <b>Trash</b>, <b>Delete</b> etc;
41
- Add possibility to setup default post or page access.
42
- For more details, please visit our forum.
43
- </td>
44
- <td class="extension-price payed">$30.00</td>
45
- <td>
46
- <div class="extension-actions">
47
- <a href="http://wpaam.com/aam-extensions/aam-plus-package/" target="_blank" class="extension-action extension-action-forum" aam-tooltip="Visit Our Website"></a>
48
- <?php if ($this->getRepository()->hasExtension('AAM Plus Package')) { ?>
49
- <a href="#" extension="AAM Plus Package" license="<?php echo $this->getRepository()->getLicense('AAM Plus Package'); ?>" class="extension-action extension-action-ok view-license-btn" aam-tooltip="Installed Successfully"></a>
50
- <?php } else { ?>
51
- <a href="#" extension="AAM Plus Package" link="https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=UEM8U65HFEG4Q" class="extension-action extension-action-purchase add-license-btn" aam-tooltip="Get it Today"></a>
52
- <?php } ?>
53
- </div>
54
- </td>
55
- </tr>
56
- <tr>
57
- <td>
58
- <span class="extension-name">AAM Activities</span>
59
- </td>
60
- <td class="extension-description">
61
- Extend the list of activities that AAM can track. By default AAM logs only user <i>login</i> and <i>logout</i>.
62
- By purchasing this extension you can also track activities like post trash, delete, update etc.
63
- As well as we can implement any additional activity on demand. Check <a href="http://wpaam.com/aam-extensions/aam-activities/" traget="_blank">our website</a> for more details.
64
- </td>
65
- <td class="extension-price payed">$20.00</td>
66
- <td>
67
- <div class="extension-actions">
68
- <a href="http://wpaam.com/aam-extensions/aam-activities/" target="_blank" class="extension-action extension-action-forum" aam-tooltip="Visit Our Website"></a>
69
- <?php if ($this->getRepository()->hasExtension('AAM Activities')) { ?>
70
- <a href="#" extension="AAM Activities" license="<?php echo $this->getRepository()->getLicense('AAM Activities'); ?>" class="extension-action extension-action-ok view-license-btn" aam-tooltip="Installed Successfully"></a>
71
- <?php } else { ?>
72
- <a href="#" extension="AAM Activities" link="https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=HME9DTSFSJH4W" class="extension-action extension-action-purchase add-license-btn" aam-tooltip="Get it Today"></a>
73
- <?php } ?>
74
- </div>
75
- </td>
76
- </tr>
77
- <tr>
78
- <td>
79
- <span class="extension-name">AAM Media Manager</span>
80
- </td>
81
- <td class="extension-description">
82
- It is the first official prototype that allows you to group your media files in Categories.
83
- Visit our <a href="http://wpaam.com/aam-extensions/aam-media-manager/" target="_blank">website</a>
84
- to find out more about current functionality and future development plans.
85
- </td>
86
- <td class="extension-price payed">$10.00</td>
87
- <td>
88
- <div class="extension-actions">
89
- <a href="http://wpaam.com/aam-extensions/aam-media-manager/" target="_blank" class="extension-action extension-action-forum" aam-tooltip="Visit Our Website"></a>
90
- <?php if ($this->getRepository()->hasExtension('AAM Media Manager')) { ?>
91
- <a href="#" extension="AAM Media Manager" license="<?php echo $this->getRepository()->getLicense('AAM Media Manager'); ?>" class="extension-action extension-action-ok view-license-btn" aam-tooltip="Installed Successfully"></a>
92
- <?php } else { ?>
93
- <a href="#" extension="AAM Media Manager" link="https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=WJ48A7Z6EFZJ4" class="extension-action extension-action-purchase add-license-btn" aam-tooltip="Get it Today"></a>
94
- <?php } ?>
95
- </div>
96
- </td>
97
- </tr>
98
- <tr>
99
- <td>
100
- <span class="extension-name">AAM Content Filter</span>
101
- </td>
102
- <td class="extension-description">
103
- The first version of AAM Content Filter Extension allows you to filter content for your Posts or Pages or Custom Post Types.
104
- The content (or part of the content) can be filtered based on currently logged in user or visitor.
105
- Check our <a href="http://wpaam.com/aam-extensions/aam-content-filter/" target="_blank">website</a> for more information.
106
- </td>
107
- <td class="extension-price payed">$20.00</td>
108
- <td>
109
-
110
- <div class="extension-actions">
111
- <a href="http://wpaam.com/aam-extensions/aam-content-filter/" target="_blank" class="extension-action extension-action-forum" aam-tooltip="Visit Our Website"></a>
112
- <?php if ($this->getRepository()->hasExtension('AAM Content Filter')) { ?>
113
- <a href="#" extension="AAM Content Filter" license="<?php echo $this->getRepository()->getLicense('AAM Content Filter'); ?>" class="extension-action extension-action-ok view-license-btn" aam-tooltip="Installed Successfully"></a>
114
- <?php } else { ?>
115
- <a href="#" extension="AAM Content Filter" link="https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=X7NZ7QF8A9CVS" class="extension-action extension-action-purchase add-license-btn" aam-tooltip="Get it Today"></a>
116
- <?php } ?>
117
- </div>
118
- </td>
119
- </tr>
120
- <tr>
121
- <td>
122
- <span class="extension-name">AAM Plugin Manager</span>
123
- </td>
124
- <td class="extension-description">
125
- Control access to individual plugins in your list of Plugins. Hide, restrict to activate, deactivate or delete any existing plugin for user or role.
126
- Check our <a href="http://wpaam.com/aam-development/aam-plugin-manager/" target="_blank">website</a> for more information.
127
- </td>
128
- <td class="extension-price payed">$10.00</td>
129
- <td>
130
- <div class="extension-actions">
131
- <a href="http://wpaam.com/aam-development/aam-plugin-manager/" target="_blank" class="extension-action extension-action-forum" aam-tooltip="Visit Our Website"></a>
132
- <?php if ($this->getRepository()->hasExtension('AAM Plugin Manager')) { ?>
133
- <a href="#" extension="AAM Plugin Manager" license="<?php echo $this->getRepository()->getLicense('AAM Content Filter'); ?>" class="extension-action extension-action-ok view-license-btn" aam-tooltip="Installed Successfully"></a>
134
- <?php } else { ?>
135
- <a href="#" extension="AAM Plugin Manager" link="https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=QJ2H2J483VXPL" class="extension-action extension-action-purchase add-license-btn" aam-tooltip="Get it Today"></a>
136
- <?php } ?>
137
- </div>
138
- </td>
139
- </tr>
140
- </tbody>
141
- </table>
142
- <div id="install_license" class="aam-dialog" title="<?php echo __('Install License', 'aam'); ?>">
143
- <p class="dialog-content">
144
- <?php echo __('If you already have license key, just enter it below. Othewise click <b>Purchase</b> button to checkout your order.', 'aam'); ?>
145
- <input type="text" class="license-input" id="license_key" placeholder="License Key" />
146
- </p>
147
- <ul class="license-error-list"></ul>
148
- </div>
149
- <div id="update_license" class="aam-dialog" title="<?php echo __('Update License', 'aam'); ?>">
150
- <p class="dialog-content" style="text-align: center;">
151
- <?php echo __('Your license key: ', 'aam'); ?><br/>
152
- <b><span id="installed_license_key"></span></b>
153
- </p>
154
- <ul class="license-error-list"></ul>
155
- </div>
156
- </div>
157
- </div>
158
- </div>
159
- </div>
160
- </div>
161
-
162
- <?php if (aam_Core_Console::hasIssues()) { ?>
163
- <div class="postbox-container" style="width:25%; margin-left: 2%;">
164
- <div class="metabox-holder">
165
- <div class="meta-box-sortables">
166
- <div class="postbox">
167
- <div class="handlediv" title="<?php echo __('Click to toggle', 'aam'); ?>"></div>
168
- <h3 class="hndle">
169
- <span><?php echo __('AAM Warnings', 'aam'); ?></span>
170
- </h3>
171
- <div class="inside">
172
- <?php foreach (aam_Core_Console::getWarnings() as $warning) { ?>
173
- <div class="aam-warning"><span><?php echo $warning; ?></span></div>
174
- <?php } ?>
175
- </div>
176
- </div>
177
- </div>
178
- </div>
179
- </div>
180
- <?php } ?>
181
-
182
- <div class="postbox-container" style="width:25%; margin-left: 2%;">
183
- <div class="metabox-holder">
184
- <div class="meta-box-sortables">
185
- <div class="postbox">
186
- <div class="handlediv" title="<?php echo __('Click to toggle', 'aam'); ?>"></div>
187
- <h3 class="hndle">
188
- <span><?php echo __('Connect with AAM', 'aam'); ?></span>
189
- </h3>
190
- <div class="inside">
191
- <div class="large-icons-row">
192
- <a href="https://twitter.com/vasyltech" class="aam-icon aam-icon-large aam-icon-large-twitter" aam-tooltip="Follow @wpaam" target="_blank">
193
- <span></span><?php echo __('Follow Us', 'aam'); ?>
194
- </a>
195
- <a href="mailto:vasyl@vasyltech.com" class="aam-icon aam-icon-large aam-icon-large-message" aam-tooltip="Send Us Email">
196
- <span></span><?php echo __('Send Message', 'aam'); ?>
197
- </a>
198
- <a href="http://vasyltech.com" class="aam-icon aam-icon-large aam-icon-large-link" aam-tooltip="Visit Us" target="_blank">
199
- <span></span><?php echo __('Website', 'aam'); ?>
200
- </a>
201
- </div>
202
- </div>
203
- </div>
204
- </div>
205
- </div>
206
- </div>
207
-
208
- <div class="postbox-container" style="width:25%; margin-left: 2%;">
209
- <div class="metabox-holder">
210
- <div class="meta-box-sortables">
211
- <div class="postbox">
212
- <div class="handlediv" title="<?php echo __('Click to toggle', 'aam'); ?>"></div>
213
- <h3 class="hndle">
214
- <span style="color:#FF0000;"><?php echo __('Development License', 'aam'); ?></span>
215
- </h3>
216
- <div class="inside">
217
- <p>
218
- <?php echo __('Get <b>Development License</b> for $119 and receive access to all extensions that are available today and will be developed within a year.', 'aam'); ?>
219
- </p>
220
- <div style="text-align: center;">
221
- <?php if ($this->getRepository()->hasLicense('AAM Development License')) { ?>
222
- <a href="#" extension="AAM Development License" license="<?php echo $this->getRepository()->getLicense('AAM Development License'); ?>" class="button button-primary button-large view-license-btn"><?php echo __('View License', 'aam'); ?></a>
223
- <?php } else { ?>
224
- <a href="#" extension="AAM Development License" link="https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=3Q6UDARTR532U" class="button button-primary button-large add-license-btn"><?php echo __('Add License', 'aam'); ?></a>
225
- <?php } ?>
226
-
227
- </div>
228
- </div>
229
- </div>
230
- </div>
231
- </div>
232
- </div>
233
- </div>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
application/view/tmpl/manager.phtml DELETED
@@ -1,120 +0,0 @@
1
- <?php
2
- /**
3
- * ======================================================================
4
- * LICENSE: This file is subject to the terms and conditions defined in *
5
- * file 'license.txt', which is part of this source code package. *
6
- * ======================================================================
7
- */
8
- ?>
9
- <div class="wrap" id="aam">
10
- <div class="aam-notification">
11
- <div class="aam-logo"></div>
12
- <div class="aam-notification-content">
13
- <h1 style="color: #d80800">Important Notification</h1>
14
- <h3>The <u>AAM version 3</u> is available for download <a href="https://downloads.wordpress.org/plugin/advanced-access-manager.3.0.zip">here</a></h3>
15
- <p>Please notice that this is the alpha version and it strongly recommended to install and test it first on a test environment.</p>
16
- </div>
17
- <a class="dashicons dashicons-dismiss" id="close-aam-notification" href="#"></a>
18
- </div>
19
-
20
- <form action="" method="post" id="aam_form">
21
- <?php do_action('aam_cmanager_hierarchy'); ?>
22
- <div class="postbox-container" style="width:70%;">
23
- <div class="metabox-holder">
24
- <div class="meta-box-sortables">
25
- <div class="postbox">
26
- <div class="handlediv" title="<?php echo __('Click to toggle', 'aam'); ?>"></div>
27
- <h3 class="hndle">
28
- <?php if (aam_Core_API::isNetworkPanel()) { ?>
29
- <span class="current-site"></span>
30
- <?php } ?>
31
- <span class="current-subject"></span>
32
- </h3>
33
- <div class="inside main-inside">
34
- <div class="aam-main-loader"></div>
35
- <div class="aam-main-content"></div>
36
- </div>
37
- </div>
38
- </div>
39
- </div>
40
- </div>
41
-
42
- <?php if (aam_Core_Console::hasIssues()) { ?>
43
- <div class="postbox-container" style="width:25%; margin-left: 2%;">
44
- <div class="metabox-holder">
45
- <div class="meta-box-sortables">
46
- <div class="postbox">
47
- <div class="handlediv" title="<?php echo __('Click to toggle', 'aam'); ?>"></div>
48
- <h3 class="hndle">
49
- <span><?php echo __('AAM Warnings', 'aam'); ?></span>
50
- </h3>
51
- <div class="inside">
52
- <?php foreach (aam_Core_Console::getWarnings() as $warning) { ?>
53
- <div class="aam-warning"><span><?php echo $warning; ?></span></div>
54
- <?php } ?>
55
- </div>
56
- </div>
57
- </div>
58
- </div>
59
- </div>
60
- <?php } ?>
61
-
62
- <div class="postbox-container" style="width:25%; margin-left: 2%;">
63
- <div class="metabox-holder" id="control_panel">
64
- <div class="meta-box-sortables">
65
- <div class="postbox">
66
- <div class="handlediv" title="<?php echo __('Click to toggle', 'aam'); ?>"></div>
67
- <h3 class="hndle">
68
- <span><?php echo __('Control Panel', 'aam'); ?></span>
69
- </h3>
70
- <div class="inside">
71
- <div class="large-icons-row" id="cpanel_major">
72
- </div>
73
- <div class="medium-icons-row" id="cpanel_minor"></div>
74
- <div class="aam-metabox-loader"></div>
75
- </div>
76
- <div id="restore_dialog" class="aam-dialog" title="<?php echo __('Undo Change', 'aam'); ?>">
77
- <p class="dialog-content"><?php echo __('Would your like to role back current settings?', 'aam'); ?></p>
78
- </div>
79
- <div id="message_dialog" class="aam-dialog" title="<?php echo __('E-mail Us', 'aam'); ?>">
80
- <p class="dialog-content"><?php echo __('Our E-mail address is <b>support@wpaam.com</b>', 'aam'); ?></p>
81
- </div>
82
- </div>
83
- </div>
84
- </div>
85
-
86
- <div class="metabox-holder" id="control_manager">
87
- <div class="meta-box-sortables">
88
- <div class="postbox">
89
- <div class="handlediv" title="<?php echo __('Click to toggle', 'aam'); ?>"></div>
90
- <h3 class="hndle">
91
- <span><?php echo __('Control Manager', 'aam'); ?></span>
92
- </h3>
93
- <div class="inside">
94
- <div id="minor-publishing">
95
- <div id="misc-publishing-actions" class="control-manager">
96
- <?php
97
- $subjects = aam_View_Collection::retrieveSubjects();
98
- foreach ($subjects as $subject) {
99
- echo '<a href="#" class="', $subject->class, '" ';
100
- echo 'aam-tooltip="', $subject->title, '" segment="' . $subject->segment . '">';
101
- echo $subject->label, '</a>';
102
- }
103
- ?>
104
- </div>
105
- </div>
106
- <div class="control-manager-content">
107
- <?php
108
- foreach ($subjects as $subject) {
109
- echo $subject->controller->content();
110
- }
111
- ?>
112
- </div>
113
- </div>
114
- </div>
115
- </div>
116
- </div>
117
- </div>
118
- <br class="clear" />
119
- </form>
120
- </div>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
application/view/tmpl/menu.phtml DELETED
@@ -1,76 +0,0 @@
1
- <?php
2
-
3
- /**
4
- * ======================================================================
5
- * LICENSE: This file is subject to the terms and conditions defined in *
6
- * file 'license.txt', which is part of this source code package. *
7
- * ======================================================================
8
- */
9
- $menu = $this->getMenu();
10
- ?>
11
- <div class="feature-content-container" id="admin_menu_content">
12
- <?php if (count($menu)) { ?>
13
- <div class="menu-top-actions">
14
- <!--
15
- <div class="menu-top-action-sort-description">
16
- <span>Drag &amp; Drop the Menu Item to change the order.</span>
17
- </div>
18
- <a href="#" class="menu-top-action-item menu-top-action-sort" tooltip="Sort the Admin Menu"></a>
19
- -->
20
- </div>
21
- <?php } ?>
22
- <div id="main_menu_list">
23
- <?php
24
- if (count($menu)) {
25
- $menuControl = $this->getSubject()->getObject(aam_Control_Object_Menu::UID);
26
- foreach ($menu as $i => $menu) {
27
- $menu_id = $i . uniqid();
28
- ?>
29
- <div class="group">
30
- <h4><?php echo $menu['name']; ?></h4>
31
- <div>
32
- <div class="whole-menu">
33
- <label for="m<?php echo $menu_id; ?>"><?php echo __('Restrict All', 'aam'); ?></label>
34
- <input type="checkbox" id="m<?php echo $menu_id; ?>" name="aam[<?php echo aam_Control_Object_Menu::UID; ?>][<?php echo $menu['id']; ?>]" <?php echo ($this->hasRestrictedAll($menu) ? 'checked="checked"' : ''); ?> class="whole_menu" />
35
- <label for="m<?php echo $menu_id; ?>"><span></span></label>
36
- </div>
37
- <?php if (isset($menu['submenu'])) { ?>
38
- <div class="menu-submenu-list" id="submenu_m<?php echo $menu_id; ?>">
39
- <?php
40
- $c = 1;
41
- foreach ($menu['submenu'] as $j => $submenu) {
42
- if ($c++ === 1) {
43
- echo '<div class="menu-submenu-row">';
44
- }
45
- ?>
46
- <div class="menu-submenu-item">
47
- <label for="m<?php echo $menu_id . $j; ?>" aam-tooltip="<?php echo $submenu['name']; ?>" ><?php echo $submenu['short']; ?></label>
48
- <input type="checkbox" id="m<?php echo $menu_id . $j; ?>" name="aam[<?php echo aam_Control_Object_Menu::UID; ?>][<?php echo $submenu['id']; ?>]" <?php echo ($menuControl->has($submenu['id']) ? 'checked="checked"' : ''); ?> />
49
- <label for="m<?php echo $menu_id . $j; ?>"><span></span></label>
50
- </div>
51
- <?php
52
- if ($c > 3) {
53
- $c = 1;
54
- echo '</div>';
55
- }
56
- }
57
- if ($c !== 1) {
58
- echo '</div>';
59
- }
60
- ?>
61
- </div>
62
- <?php } ?>
63
- </div>
64
- </div>
65
- <?php
66
- }
67
- } else {
68
- ?>
69
- <div class="menu-empty-list">
70
- <span><?php echo __('There is no single menu item allowed for current Role or User', 'aam'); ?></span>
71
- </div>
72
- <?php
73
- }
74
- ?>
75
- </div>
76
- </div>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
application/view/tmpl/metabox.phtml DELETED
@@ -1,21 +0,0 @@
1
- <?php
2
-
3
- /**
4
- * ======================================================================
5
- * LICENSE: This file is subject to the terms and conditions defined in *
6
- * file 'license.txt', which is part of this source code package. *
7
- * ======================================================================
8
- */
9
- ?>
10
- <div class="feature-content-container" id="metabox_content">
11
- <div class="metabox-top-actions">
12
- <div class="metabox-top-action-link">
13
- <input type="text" class="link-text" id="metabox_link" />
14
- </div>
15
- <a href="#" class="aam-icon aam-icon-medium aam-icon-medium-add" id="retrieve_url" aam-tooltip="<?php echo __('Retrieve Metaboxes From Link', 'aam') ;?>"><span></span></a>
16
- <a href="#" class="aam-icon aam-icon-medium aam-icon-medium-refresh" id="refresh_metaboxes" aam-tooltip="<?php echo __('Refresh the List', 'aam') ;?>"><span></span></a>
17
- <br class="clear" />
18
- </div>
19
- <div class="aam-metabox-loader"></div>
20
- <div id="metabox_list_container"></div>
21
- </div>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
application/view/tmpl/post.phtml DELETED
@@ -1,57 +0,0 @@
1
- <?php
2
-
3
- /**
4
- * ======================================================================
5
- * LICENSE: This file is subject to the terms and conditions defined in *
6
- * file 'license.txt', which is part of this source code package. *
7
- * ======================================================================
8
- */
9
- ?>
10
- <div class="feature-content-container" id="post_access_content">
11
- <table id="post_list">
12
- <thead>
13
- <tr>
14
- <th>Post ID</th>
15
- <th>Post Status</th>
16
- <th>Post Link</th>
17
- <th width="60%"><?php echo __('Name', 'aam'); ?></th>
18
- <th width="20%"><?php echo __('Status', 'aam'); ?></th>
19
- <th><?php echo __('Control', 'aam'); ?></th>
20
- <th>Restriction Status</th>
21
- </tr>
22
- </thead>
23
- <tbody>
24
- </tbody>
25
- </table>
26
-
27
- <div id="delete_post_dialog" class="aam-dialog" title="<?php echo __('Delete Post', 'aam'); ?>">
28
- <p class="dialog-content"></p>
29
- </div>
30
-
31
- <div id="filter_post_dialog" class="aam-dialog" title="<?php echo __('Filter Posts by Type', 'aam'); ?>">
32
- <div class="tree-holder postbox">
33
- <div id="sidetreecontrol">
34
- <a href="#"><?php echo __('Collapse All', 'aam'); ?></a>&nbsp;|&nbsp;
35
- <a href="#"><?php echo __('Expand All', 'aam'); ?></a>&nbsp;|&nbsp;
36
- <span><?php echo __('Refresh', 'aam'); ?></span></div>
37
- <br class="clear" />
38
- <ul id="tree" class="filetree"></ul>
39
- </div>
40
- <div class="aam-main-loader"></div>
41
- </div>
42
-
43
- <div id="access_dialog" class="aam-dialog">
44
- <div class="aam-lock-message">
45
- <span><?php echo __('You reached the limit. Get <a href="' . admin_url('admin.php?page=aam-ext') . '" target="_blank">AAM Plus Package</a> to unlock the feature.'); ?></span>
46
- </div>
47
- <div class="post-access-inherited"></div>
48
- <?php if ($this->getSubject()->getUID() != 'visitor') { ?>
49
- <div class="post-access-area">
50
- <input type="radio" id="post_area_frontend" value="frontend" checked="checked" name="access_area" /><label for="post_area_frontend"><?php echo __('Frontend', 'aam'); ?></label>
51
- <input type="radio" id="post_area_backend" value="backend" name="access_area" /><label for="post_area_backend"><?php echo __('Backend', 'aam'); ?></label>
52
- </div>
53
- <?php } ?>
54
- <div id="access_control_area"></div>
55
- <div class="aam-main-loader"></div>
56
- </div>
57
- </div>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
application/view/tmpl/role.phtml DELETED
@@ -1,61 +0,0 @@
1
- <?php
2
-
3
- /**
4
- * ======================================================================
5
- * LICENSE: This file is subject to the terms and conditions defined in *
6
- * file 'license.txt', which is part of this source code package. *
7
- * ======================================================================
8
- */
9
- ?>
10
- <div id="role_manager_wrap">
11
- <table id="role_list">
12
- <thead>
13
- <tr>
14
- <th>Role ID</th>
15
- <th>User Count</th>
16
- <th width="60%"><?php echo __('Role', 'aam'); ?></th>
17
- <th><?php echo __('Action', 'aam'); ?></th>
18
- </tr>
19
- </thead>
20
- <tbody></tbody>
21
- </table>
22
-
23
- <div id="manage_role_dialog" class="aam-dialog">
24
- <table class="dataTable">
25
- <tbody>
26
- <tr>
27
- <th><?php echo __('Role Name', 'aam'); ?><span class="aam-asterix">*</span>:</th>
28
- <td><input type="text" id="role_name" class="aam-input" /></td>
29
- </tr>
30
- <tr id="parent_cap_role_holder">
31
- <th><?php echo __('Inherit Caps', 'aam'); ?>:</th>
32
- <td><select class="aam-input" id="parent_cap_role"></select></td>
33
- </tr>
34
- </tbody>
35
- </table>
36
- </div>
37
-
38
- <div id="duplicate_role_dialog" class="aam-dialog" title="<?php echo __('Duplicate Role', 'aam'); ?>">
39
- <table class="dataTable">
40
- <tbody>
41
- <tr>
42
- <th><?php echo __('Duplicate Role', 'aam'); ?>:</th>
43
- <td><span style="font-weight: bold;" id="duplicate_role_name"></span></td>
44
- </tr>
45
- <tr>
46
- <th><?php echo __('Role Name', 'aam'); ?><span class="aam-asterix">*</span>:</th>
47
- <td><input type="text" id="duplicate_role_name" class="aam-input" /></td>
48
- </tr>
49
- </tbody>
50
- </table>
51
- </div>
52
-
53
- <div id="delete_role_dialog" class="aam-dialog" title="<?php echo __('Delete Role', 'aam'); ?>">
54
- <p class="dialog-content"></p>
55
- </div>
56
- <div id="delete_admin_role_dialog" class="aam-dialog" title="<?php echo __('Notice', 'aam'); ?>">
57
- <p class="dialog-content">
58
- <?php echo __('You can not delete <b>Administrator</b> Role', 'aam'); ?>
59
- </p>
60
- </div>
61
- </div>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
application/view/tmpl/user.phtml DELETED
@@ -1,42 +0,0 @@
1
- <?php
2
-
3
- /**
4
- * ======================================================================
5
- * LICENSE: This file is subject to the terms and conditions defined in *
6
- * file 'license.txt', which is part of this source code package. *
7
- * ======================================================================
8
- */
9
- ?>
10
- <div id="user_manager_wrap">
11
- <table id="user_list">
12
- <thead>
13
- <tr>
14
- <th>User ID</th>
15
- <th>User Login</th>
16
- <th width="60%"><?php echo __('Username', 'aam'); ?></th>
17
- <th><?php echo __('Action', 'aam'); ?></th>
18
- <th>Status</th>
19
- <th>Managable</th>
20
- </tr>
21
- </thead>
22
- <tbody></tbody>
23
- </table>
24
-
25
- <div id="filter_user_dialog" class="aam-dialog" title="<?php echo __('Filter Users by Role', 'aam'); ?>">
26
- <table id="filter_role_list">
27
- <thead>
28
- <tr>
29
- <th>Role ID</th>
30
- <th>User Count</th>
31
- <th width="80%"><?php echo __('Role Name', 'aam'); ?></th>
32
- <th><?php echo __('Action', 'aam'); ?></th>
33
- </tr>
34
- </thead>
35
- <tbody></tbody>
36
- </table>
37
- </div>
38
-
39
- <div id="delete_user_dialog" class="aam-dialog" title="<?php echo __('Delete User', 'aam'); ?>">
40
- <span class="dialog-content"></span>
41
- </div>
42
- </div>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
application/view/tmpl/visitor.phtml DELETED
@@ -1,12 +0,0 @@
1
- <?php
2
-
3
- /**
4
- * ======================================================================
5
- * LICENSE: This file is subject to the terms and conditions defined in *
6
- * file 'license.txt', which is part of this source code package. *
7
- * ======================================================================
8
- */
9
- ?>
10
- <div id="visitor_manager_wrap" class="control-manager-visitor">
11
- <?php echo __('Control Access to your blog for visitor (any user that is not logged in)', 'aam'); ?>.
12
- </div>
 
 
 
 
 
 
 
 
 
 
 
 
application/view/user.php DELETED
@@ -1,156 +0,0 @@
1
- <?php
2
-
3
- /**
4
- * ======================================================================
5
- * LICENSE: This file is subject to the terms and conditions defined in *
6
- * file 'license.txt', which is part of this source code package. *
7
- * ======================================================================
8
- */
9
-
10
- /**
11
- *
12
- * @package AAM
13
- * @author Vasyl Martyniuk <support@wpaam.com>
14
- * @copyright Copyright C 2013 Vasyl Martyniuk
15
- * @license GNU General Public License {@link http://www.gnu.org/licenses/}
16
- */
17
- class aam_View_User extends aam_View_Abstract {
18
-
19
- /**
20
- * Generate UI content
21
- *
22
- * @return string
23
- *
24
- * @access public
25
- */
26
- public function content() {
27
- return $this->loadTemplate(dirname(__FILE__) . '/tmpl/user.phtml');
28
- }
29
-
30
- /**
31
- * Retrieve list of users
32
- *
33
- * Based on filters, get list of users
34
- *
35
- * @return string JSON encoded list of users
36
- *
37
- * @access public
38
- */
39
- public function retrieveList() {
40
- //get total number of users
41
- $total = count_users();
42
- $result = $this->query();
43
- $response = array(
44
- 'iTotalRecords' => $total['total_users'],
45
- 'iTotalDisplayRecords' => $result->get_total(),
46
- 'sEcho' => aam_Core_Request::request('sEcho'),
47
- 'aaData' => array(),
48
- );
49
- foreach ($result->get_results() as $user) {
50
- $response['aaData'][] = array(
51
- $user->ID,
52
- $user->user_login,
53
- ($user->display_name ? $user->display_name : $user->user_nicename),
54
- '',
55
- $user->user_status,
56
- ($this->canManage($user) ? 1 : 0)
57
- );
58
- }
59
-
60
- return json_encode($response);
61
- }
62
-
63
- /**
64
- * Check if specified user can be managed by current user
65
- *
66
- * @param WP_User $user
67
- *
68
- * @return boolean
69
- *
70
- * @access public
71
- */
72
- public function canManage(WP_User $user = null){
73
- //AAM does not support multi-roles. Get only one first role
74
- $roles = $user->roles;
75
- $role = get_role(array_shift($roles));
76
- //get user's highest level
77
- $level = aam_Core_API::getUserLevel();
78
-
79
- if (empty($role->capabilities['level_' . $level])
80
- || !$role->capabilities['level_' . $level]
81
- || aam_Core_API::isSuperAdmin()){
82
- $response = true;
83
- } else {
84
- $response = false;
85
- }
86
-
87
- return $response;
88
- }
89
-
90
- /**
91
- * Query database for list of users
92
- *
93
- * Based on filters and settings get the list of users from database
94
- *
95
- * @return \WP_User_Query
96
- *
97
- * @access public
98
- */
99
- public function query() {
100
- if ($search = trim(aam_Core_Request::request('sSearch'))) {
101
- $search = "{$search}*";
102
- }
103
- $args = array(
104
- 'number' => '',
105
- 'blog_id' => get_current_blog_id(),
106
- 'role' => aam_Core_Request::request('role'),
107
- 'fields' => 'all',
108
- 'number' => aam_Core_Request::request('iDisplayLength'),
109
- 'offset' => aam_Core_Request::request('iDisplayStart'),
110
- 'search' => $search,
111
- 'search_columns' => array('user_login', 'user_email', 'display_name'),
112
- 'orderby' => 'user_nicename',
113
- 'order' => 'ASC'
114
- );
115
-
116
- return new WP_User_Query($args);
117
- }
118
-
119
- /**
120
- * Block user
121
- *
122
- * @return string
123
- *
124
- * @access public
125
- */
126
- public function block() {
127
- if ($this->isManagable() && $this->getSubject()->block()){
128
- $response = array(
129
- 'status' => 'success',
130
- 'user_status' => $this->getSubject()->user_status
131
- );
132
- } else{
133
- $response = array('status' => 'failure');
134
- }
135
-
136
- return json_encode($response);
137
- }
138
-
139
- /**
140
- * Delete user
141
- *
142
- * @return string
143
- *
144
- * @access public
145
- */
146
- public function delete() {
147
- if ($this->isManagable($this->getSubject()->getUser())){
148
- $response = $this->getSubject()->delete();
149
- } else {
150
- $response = false;
151
- }
152
-
153
- return json_encode(array('status' => $response ? 'success' : 'failure'));
154
- }
155
-
156
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
application/view/visitor.php DELETED
@@ -1,32 +0,0 @@
1
- <?php
2
-
3
- /**
4
- * ======================================================================
5
- * LICENSE: This file is subject to the terms and conditions defined in *
6
- * file 'license.txt', which is part of this source code package. *
7
- * ======================================================================
8
- */
9
-
10
- /**
11
- *
12
- * @package AAM
13
- * @author Vasyl Martyniuk <support@wpaam.com>
14
- * @copyright Copyright C 2013 Vasyl Martyniuk
15
- * @license GNU General Public License {@link http://www.gnu.org/licenses/}
16
- */
17
- class aam_View_Visitor extends aam_View_Abstract
18
- {
19
-
20
- /**
21
- * Get View content
22
- *
23
- * @return string
24
- *
25
- * @access public
26
- */
27
- public function content()
28
- {
29
- return $this->loadTemplate(dirname(__FILE__) . '/tmpl/visitor.phtml');
30
- }
31
-
32
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
autoloader.php ADDED
@@ -0,0 +1,69 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
+ * Project autloader
12
+ *
13
+ * @package AAM
14
+ * @author Vasyl Martyniuk <vasyl@vasyltech.com>
15
+ */
16
+ class AAM_Autoloader {
17
+
18
+ /**
19
+ *
20
+ * @var type
21
+ */
22
+ protected static $classmap = array();
23
+
24
+ /**
25
+ *
26
+ * @param type $classname
27
+ * @param type $filepath
28
+ */
29
+ public static function add($classname, $filepath) {
30
+ self::$classmap[$classname] = $filepath;
31
+ }
32
+
33
+ /**
34
+ * Autoloader for project Advanced Access Manager
35
+ *
36
+ * Try to load a class if prefix is AAM_
37
+ *
38
+ * @param string $classname
39
+ */
40
+ public static function load($classname) {
41
+ if (array_key_exists($classname, self::$classmap)) {
42
+ $filename = self::$classmap[$classname];
43
+ } else {
44
+ $chunks = explode('_', $classname);
45
+ $prefix = array_shift($chunks);
46
+
47
+ if ($prefix === 'AAM') {
48
+ $base_path = dirname(__FILE__) . '/Application';
49
+ $filename = $base_path . '/' . implode('/', $chunks) . '.php';
50
+ }
51
+ }
52
+
53
+ if (!empty($filename) && file_exists($filename)) {
54
+ require($filename);
55
+ }
56
+ }
57
+
58
+ /**
59
+ * Register autoloader
60
+ *
61
+ * @return void
62
+ *
63
+ * @access public
64
+ */
65
+ public static function register() {
66
+ spl_autoload_register('AAM_Autoloader::load');
67
+ }
68
+
69
+ }
config.php DELETED
@@ -1,71 +0,0 @@
1
- <?php
2
-
3
- /**
4
- * ======================================================================
5
- * LICENSE: This file is subject to the terms and conditions defined in *
6
- * file 'license.txt', which is part of this source code package. *
7
- * ======================================================================
8
- */
9
-
10
- //AAM Version for Update purpose
11
- define('AAM_VERSION', '2.9.3');
12
-
13
- define('AAM_BASE_DIR', dirname(__FILE__) . DIRECTORY_SEPARATOR);
14
-
15
- $base_url = WP_PLUGIN_URL . '/' . basename(AAM_BASE_DIR) . '/';
16
- if (strpos($base_url, 'https') === 0) {
17
- $base_url = str_replace('https:', '', $base_url);
18
- } elseif (strpos($base_url, 'http') === 0) {
19
- $base_url = str_replace('http:', '', $base_url);
20
- }
21
-
22
- define('AAM_BASE_URL', $base_url);
23
-
24
- define('AAM_TEMPLATE_DIR', AAM_BASE_DIR . 'view/html/');
25
- define('AAM_LIBRARY_DIR', AAM_BASE_DIR . 'library/');
26
- define('AAM_TEMP_DIR', WP_CONTENT_DIR . '/aam/');
27
- define('AAM_MEDIA_URL', AAM_BASE_URL . 'media/');
28
-
29
- define('AAM_APPL_ENV', (getenv('APPL_ENV') ? getenv('APPL_ENV') : 'production'));
30
- //Rest API
31
- if (AAM_APPL_ENV === 'production') {
32
- define('WPAAM_REST_API', 'http://rest.wpaam.com');
33
- } else {
34
- define('WPAAM_REST_API', 'http://wpaam.localhost/');
35
- }
36
-
37
- /**
38
- * Autoloader for project Advanced Access Manager
39
- *
40
- * Try to load a class if prefix is mvb_
41
- *
42
- * @param string $class_name
43
- */
44
- function aam_autoload($class_name) {
45
- $chunks = explode('_', strtolower($class_name));
46
- $prefix = array_shift($chunks);
47
-
48
- if ($prefix === 'aam') {
49
- $base_path = AAM_BASE_DIR . '/application';
50
- $path = $base_path . '/' . implode('/', $chunks) . '.php';
51
- if (file_exists($path)) {
52
- require($path);
53
- }
54
- }
55
- }
56
-
57
- spl_autoload_register('aam_autoload');
58
-
59
- //make sure that we have always content dir
60
- if (!file_exists(AAM_TEMP_DIR)) {
61
- if (@mkdir(AAM_TEMP_DIR)) {
62
- //silence the directory
63
- file_put_contents(AAM_TEMP_DIR . '/index.php', '');
64
- } else {
65
- aam_Core_Console::add(__('Failed to create wp-content/aam folder', 'aam'));
66
- }
67
- } elseif(!is_writable(AAM_TEMP_DIR)){
68
- aam_Core_Console::add(__('Folder wp-content/aam is not writable', 'aam'));
69
- }
70
-
71
- load_plugin_textdomain('aam', false, basename(AAM_BASE_DIR) . '/lang');
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
extension/AAM_Activity_Log/activity.css DELETED
@@ -1,46 +0,0 @@
1
- /**
2
- * ======================================================================
3
- * LICENSE: This file is subject to the terms and conditions defined in *
4
- * file 'license.txt', which is part of this source code package. *
5
- * ======================================================================
6
- */
7
- .activity-top-actions{
8
- float: right;
9
- display: inline-table;
10
- width: auto;
11
- text-align: right;
12
- }
13
-
14
- .activity-top-action{
15
- width: 24px;
16
- height: 24px;
17
- display: table-cell;
18
- text-indent: -9999px;
19
- padding-right: 10px;
20
- background-repeat: no-repeat;
21
- background-position: center;
22
- }
23
-
24
- .activity-top-action-clear{
25
- background-image: url('images/trash.png');
26
- }
27
-
28
- .activity-top-action-clear:hover{
29
- background-image: url('images/trash-active.png');
30
- }
31
-
32
- .activity-top-action-clear-active{
33
- background-image: url('images/trash-active.png');
34
- }
35
-
36
- .activity-top-action-info{
37
- background-image: url('images/info.png');
38
- }
39
-
40
- .activity-top-action-info:hover{
41
- background-image: url('images/info-active.png');
42
- }
43
-
44
- .activity-top-action-info-active{
45
- background-image: url('images/info-active.png');
46
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
extension/AAM_Activity_Log/activity.js DELETED
@@ -1,185 +0,0 @@
1
- /**
2
- * ======================================================================
3
- * LICENSE: This file is subject to the terms and conditions defined in *
4
- * file 'license.txt', which is part of this source code package. *
5
- * ======================================================================
6
- */
7
-
8
- /**
9
- * Activity List
10
- *
11
- * @type object
12
- */
13
- AAM.prototype.blogTables.activityList = null;
14
-
15
- /**
16
- * Initialize and load activity tab
17
- *
18
- * @returns void
19
- */
20
- AAM.prototype.loadActivityTab = function() {
21
- var _this = this;
22
-
23
- if (this.blogTables.activityList === null) {
24
- this.blogTables.activityList = jQuery('#activity_list').dataTable({
25
- sDom: "<'top'lf<'activity-top-actions'><'clear'>>t<'footer'ip<'clear'>>",
26
- sPaginationType: "full_numbers",
27
- bAutoWidth: false,
28
- bDestroy: true,
29
- bSort: false,
30
- sAjaxSource: ajaxurl,
31
- fnServerParams: function(aoData) {
32
- aoData.push({
33
- name: 'action',
34
- value: 'aam'
35
- });
36
- aoData.push({
37
- name: 'sub_action',
38
- value: 'activity_list'
39
- });
40
- aoData.push({
41
- name: 'subject',
42
- value: _this.getSubject().type
43
- });
44
- aoData.push({
45
- name: 'subject_id',
46
- value: _this.getSubject().id
47
- });
48
- aoData.push({
49
- name: '_ajax_nonce',
50
- value: aamLocal.nonce
51
- });
52
- },
53
- fnInitComplete: function() {
54
- var a = jQuery('#activity_list_wrapper .activity-top-actions');
55
-
56
- var clear = jQuery('<a/>', {
57
- 'href': '#',
58
- 'class': 'activity-top-action activity-top-action-clear',
59
- 'aam-tooltip': aamLocal.labels['Clear Logs']
60
- }).bind('click', function(event) {
61
- event.preventDefault();
62
- _this.launch(jQuery(this), 'activity-top-action-clear');
63
- _this.launchClearActivityLog();
64
- });
65
- jQuery(a).append(clear);
66
-
67
- var info = jQuery('<a/>', {
68
- 'href': '#',
69
- 'class': 'activity-top-action activity-top-action-info',
70
- 'aam-tooltip': aamLocal.labels['Get More']
71
- }).bind('click', function(event) {
72
- event.preventDefault();
73
- _this.launch(jQuery(this), 'activity-top-action-info');
74
- _this.launchActivityLogInfo();
75
- });
76
- jQuery(a).append(info);
77
-
78
- _this.doAction('aam_activity_top_actions', {container: a});
79
- },
80
- fnRowCallback: function(nRow, aData) {
81
- jQuery('td:eq(0)', nRow).html(jQuery('<a/>', {
82
- href: aamLocal.editUserURI + '?user_id=' + aData[0],
83
- target: '_blank'
84
- }).html(aData[1]));
85
- },
86
- aoColumnDefs: [
87
- {bVisible: false, aTargets: [0]}
88
- ],
89
- oLanguage: {
90
- sSearch: "",
91
- oPaginate: {
92
- sFirst: "&Lt;",
93
- sLast: "&Gt;",
94
- sNext: "&gt;",
95
- sPrevious: "&lt;"
96
- },
97
- sLengthMenu: "_MENU_"
98
- }
99
- });
100
- }
101
- };
102
-
103
- /**
104
- * Show Clear Activity Log Confirmation dialog
105
- *
106
- * @returns {void}
107
- *
108
- * @access public
109
- */
110
- AAM.prototype.launchClearActivityLog = function() {
111
- var _this = this;
112
-
113
- var buttons = {};
114
-
115
- buttons[aamLocal.labels['Clear Logs']] = function() {
116
- jQuery.ajax(aamLocal.ajaxurl, {
117
- type: 'POST',
118
- dataType: 'json',
119
- data: _this.compileAjaxPackage('clear_activities', true),
120
- complete: function() {
121
- jQuery('#clear_activity_dialog').dialog("close");
122
- }
123
- });
124
- };
125
-
126
- buttons[aamLocal.labels['Cancel']] = function() {
127
- jQuery('#clear_activity_dialog').dialog("close");
128
- };
129
-
130
- jQuery('#clear_activity_dialog').dialog({
131
- resizable: false,
132
- height: 'auto',
133
- width: '20%',
134
- modal: true,
135
- buttons: buttons,
136
- close: function() {
137
- _this.terminate(
138
- jQuery('.activity-top-action-clear'),
139
- 'activity-top-action-clear'
140
- );
141
- //refresh the table
142
- _this.blogTables.activityList = null;
143
- _this.loadActivityTab();
144
- }
145
- });
146
- };
147
-
148
- /**
149
- * Show Activation Log Information Dialog
150
- *
151
- * @returns {void}
152
- *
153
- * @access public
154
- */
155
- AAM.prototype.launchActivityLogInfo = function() {
156
- var _this = this;
157
-
158
- var buttons = {};
159
-
160
- buttons[aamLocal.labels['Close']] = function() {
161
- jQuery('#info_activity_dialog').dialog("close");
162
- };
163
-
164
- jQuery('#info_activity_dialog').dialog({
165
- resizable: false,
166
- height: 'auto',
167
- width: '30%',
168
- modal: true,
169
- buttons: buttons,
170
- close: function() {
171
- _this.terminate(
172
- jQuery('.activity-top-action-info'),
173
- 'activity-top-action-info'
174
- );
175
- }
176
- });
177
- };
178
-
179
- jQuery(document).ready(function() {
180
- aamInterface.addAction('aam_feature_activation', function(params) {
181
- if (params.feature === 'activity_log') {
182
- aamInterface.loadActivityTab();
183
- }
184
- });
185
- });
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
extension/AAM_Activity_Log/activity.php DELETED
@@ -1,214 +0,0 @@
1
- <?php
2
-
3
- /**
4
- * ======================================================================
5
- * LICENSE: This file is subject to the terms and conditions defined in *
6
- * file 'license.txt', which is part of this source code package. *
7
- * ======================================================================
8
- */
9
-
10
- /**
11
- *
12
- * @package AAM
13
- * @author Vasyl Martyniuk <support@wpaam.com>
14
- * @copyright Copyright C 2013 Vasyl Martyniuk
15
- * @license GNU General Public License {@link http://www.gnu.org/licenses/}
16
- */
17
- class aam_Control_Object_Activity extends aam_Control_Object {
18
-
19
- /**
20
- * Control Object UID
21
- */
22
- const UID = 'activity';
23
-
24
- /**
25
- * Activity User Login
26
- */
27
- const ACTIVITY_LOGIN = 'login';
28
-
29
- /**
30
- * Activity User Logout
31
- */
32
- const ACTIVITY_LOGOUT = 'logout';
33
-
34
- /**
35
- * Set of Activities
36
- *
37
- * @var array
38
- *
39
- * @access private
40
- */
41
- private $_option = array();
42
-
43
- /**
44
- * Initialize the Activity list
45
- *
46
- * Based on subject type, load the list of activities
47
- *
48
- * @param int $object_id
49
- *
50
- * @return void
51
- *
52
- * @access public
53
- */
54
- public function init($object_id) {
55
- if ($this->getSubject()->getUID() == aam_Control_Subject_User::UID) {
56
- //get single user activity list
57
- $option = array(
58
- $this->getSubject()->getId() => $this->getSubject()->readOption(
59
- self::UID, $object_id, false
60
- ));
61
- } else {
62
- //get all users in Role and combine the activities
63
- $query = new WP_User_Query(array(
64
- 'number' => '',
65
- 'blog_id' => get_current_blog_id(),
66
- 'role' => $this->getSubject()->getId(),
67
- 'fields' => 'id'
68
- ));
69
- $option = array();
70
-
71
- foreach ($query->get_results() as $user) {
72
- $dump = get_user_option('aam_activity', $user);
73
- if (is_array($dump) && count($dump)) {
74
- $option[$user] = $dump;
75
- }
76
- }
77
- }
78
-
79
- if (is_array($option)) {
80
- $this->setOption($option);
81
- //filter old activities
82
- $this->filter();
83
- }
84
- }
85
-
86
- /**
87
- * Decorate Activity description
88
- *
89
- * @param array $activity
90
- *
91
- * @return string
92
- *
93
- * @access public
94
- */
95
- public function decorate($activity) {
96
- switch ($activity['action']) {
97
- case self::ACTIVITY_LOGIN:
98
- $response = __('System Login', 'aam');
99
- break;
100
-
101
- case self::ACTIVITY_LOGOUT:
102
- $response = __('System Logout', 'aam');
103
- break;
104
-
105
- default:
106
- $response = apply_filters(
107
- 'aam_activity_decorator',
108
- __('Unknown Activity', 'aam'),
109
- $activity
110
- );
111
- break;
112
- }
113
-
114
- return $response;
115
- }
116
-
117
- /**
118
- * Add User's Activity
119
- *
120
- * This method can be used only for Subject User
121
- *
122
- * @param int $timestamp
123
- * @param array $activity
124
- *
125
- * @return void
126
- *
127
- * @access public
128
- */
129
- public function add($timestamp, array $activity) {
130
- //make sure that user's activity is array
131
- $user_id = $this->getSubject()->getId();
132
- if (empty($this->_option[$user_id]) || !is_array($this->_option[$user_id])) {
133
- $this->_option[$user_id] = array();
134
- }
135
- //add activity
136
- $this->_option[$user_id][$timestamp] = $activity;
137
-
138
- //finally save the activity
139
- $this->save($this->_option[$user_id]);
140
- }
141
-
142
- /**
143
- * Filter old activities
144
- *
145
- * Based on aam.extension.AAM_Activity_Log.date config, filter old activities
146
- *
147
- * @return void
148
- *
149
- * @access public
150
- */
151
- public function filter() {
152
- $date = strtotime(
153
- aam_Core_ConfigPress::getParam(
154
- 'aam.extension.AAM_Activity_Log.date', 'today - 30 days'
155
- )
156
- );
157
- foreach ($this->_option as $user_id => $activities) {
158
- if (is_array($activities)) {
159
- foreach ($activities as $timestamp => $activity) {
160
- if ($timestamp < $date) {
161
- unset($this->_option[$user_id][$timestamp]);
162
- }
163
- }
164
- }
165
- }
166
- }
167
-
168
- /**
169
- * Save Activities
170
- *
171
- * @param array $events
172
- *
173
- * @return void
174
- *
175
- * @access public
176
- */
177
- public function save($activities = null) {
178
- if (is_array($activities)) {
179
- $this->getSubject()->updateOption($activities, self::UID);
180
- }
181
- }
182
-
183
- /**
184
- * @inheritdoc
185
- */
186
- public function cacheObject() {
187
- return false;
188
- }
189
-
190
- /**
191
- *
192
- * @return type
193
- */
194
- public function getUID() {
195
- return self::UID;
196
- }
197
-
198
- /**
199
- *
200
- * @param type $option
201
- */
202
- public function setOption($option) {
203
- $this->_option = (is_array($option) ? $option : array());
204
- }
205
-
206
- /**
207
- *
208
- * @return type
209
- */
210
- public function getOption() {
211
- return $this->_option;
212
- }
213
-
214
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
extension/AAM_Activity_Log/extension.php DELETED
@@ -1,277 +0,0 @@
1
- <?php
2
-
3
- /**
4
- * ======================================================================
5
- * LICENSE: This file is subject to the terms and conditions defined in *
6
- * file 'license.txt', which is part of this source code package. *
7
- * ======================================================================
8
- */
9
-
10
- /**
11
- * Activity Log Controller
12
- *
13
- * @package AAM
14
- * @author Vasyl Martyniuk <support@wpaam.com>
15
- * @copyright Copyright C 2013 Vasyl Martyniuk
16
- * @license GNU General Public License {@link http://www.gnu.org/licenses/}
17
- */
18
- class AAM_Extension_ActivityLog extends AAM_Core_Extension {
19
-
20
- /**
21
- * Current subject
22
- *
23
- * @var aam_Control_Subject
24
- */
25
- private $_subject = null;
26
-
27
- /**
28
- *
29
- * @param aam|aam_View_Connector $parent
30
- */
31
- public function __construct(aam $parent) {
32
- parent::__construct($parent);
33
-
34
- //include activity object
35
- require_once(dirname(__FILE__) . '/activity.php');
36
-
37
- if (is_admin()) {
38
- $this->registerFeature();
39
- }
40
-
41
- //define new Activity Object
42
- add_filter('aam_object', array($this, 'activityObject'), 10, 3);
43
-
44
- //login & logout hooks
45
- add_action('wp_login', array($this, 'login'), 10, 2);
46
- add_action('wp_logout', array($this, 'logout'));
47
- }
48
-
49
- /**
50
- * Register new UI feature
51
- *
52
- * @return void
53
- *
54
- * @access protected
55
- */
56
- protected function registerFeature() {
57
- $capability = aam_Core_ConfigPress::getParam(
58
- 'aam.feature.activity_log.capability', 'administrator'
59
- );
60
-
61
- if (current_user_can($capability)) {
62
- add_action('admin_print_scripts', array($this, 'printScripts'));
63
- add_action('admin_print_styles', array($this, 'printStyles'));
64
- add_filter('aam_ajax_call', array($this, 'ajax'), 10, 2);
65
- add_action(
66
- 'aam_localization_labels', array($this, 'localizationLabels')
67
- );
68
-
69
- aam_View_Collection::registerFeature((object)array(
70
- 'uid' => 'activity_log',
71
- 'position' => 35,
72
- 'title' => __('Activity Log', 'aam'),
73
- 'subjects' => array(
74
- aam_Control_Subject_Role::UID, aam_Control_Subject_User::UID
75
- ),
76
- 'controller' => $this
77
- ));
78
- }
79
- }
80
-
81
- /**
82
- *
83
- */
84
- public function login() {
85
- $this->getParent()->getUser()
86
- ->getObject(aam_Control_Object_Activity::UID)->add(
87
- time(),
88
- array(
89
- 'action' => aam_Control_Object_Activity::ACTIVITY_LOGIN
90
- )
91
- );
92
- }
93
-
94
- /**
95
- *
96
- */
97
- public function logout() {
98
- $user = $this->getParent()->getUser();
99
- $user->getObject(aam_Control_Object_Activity::UID)->add(
100
- time(),
101
- array(
102
- 'action' => aam_Control_Object_Activity::ACTIVITY_LOGOUT
103
- ));
104
- }
105
-
106
- /**
107
- *
108
- * @param aam_Control_Object_Activity $object
109
- * @param type $object_uid
110
- * @param type $object_id
111
- * @return \aam_Control_Object_Activity
112
- */
113
- public function activityObject($object, $object_uid, $object_id) {
114
- if ($object_uid === aam_Control_Object_Activity::UID) {
115
- $object = new aam_Control_Object_Activity(
116
- $this->getParent()->getUser(), $object_id
117
- );
118
- }
119
-
120
- return $object;
121
- }
122
-
123
- /**
124
- *
125
- * @return type
126
- */
127
- public function content() {
128
- ob_start();
129
- require dirname(__FILE__) . '/ui.phtml';
130
- $content = ob_get_contents();
131
- ob_end_clean();
132
-
133
- return $content;
134
- }
135
-
136
- /**
137
- * Print necessary scripts
138
- *
139
- * @return void
140
- *
141
- * @access public
142
- */
143
- public function printScripts() {
144
- if ($this->getParent()->isAAMScreen()) {
145
- wp_enqueue_script(
146
- 'aam-activity-log-admin',
147
- AAM_ACTIVITY_LOG_BASE_URL . '/activity.js',
148
- array('aam-admin')
149
- );
150
- }
151
- }
152
-
153
- /**
154
- *
155
- */
156
- public function printStyles() {
157
- if ($this->getParent()->isAAMScreen()) {
158
- wp_enqueue_style(
159
- 'aam-activity-log-admin',
160
- AAM_ACTIVITY_LOG_BASE_URL . '/activity.css'
161
- );
162
- }
163
- }
164
-
165
- /**
166
- * Add extra UI labels
167
- *
168
- * @param array $labels
169
- *
170
- * @return array
171
- *
172
- * @access public
173
- */
174
- public function localizationLabels($labels) {
175
- $labels['Clear Logs'] = __('Clear Logs', 'aam');
176
- $labels['Get More'] = __('Get More', 'aam');
177
-
178
- return $labels;
179
- }
180
-
181
- /**
182
- * Hanlde Ajax call
183
- *
184
- * @param mixed $default
185
- * @param aam_Control_Subject $subject
186
- *
187
- * @return mixed
188
- *
189
- * @access public
190
- */
191
- public function ajax($default, aam_Control_Subject $subject = null) {
192
- $this->setSubject($subject);
193
-
194
- switch (aam_Core_Request::request('sub_action')) {
195
- case 'activity_list':
196
- $response = $this->getActivityList();
197
- break;
198
-
199
- case 'clear_activities':
200
- $response = $this->clearActivities();
201
- break;
202
-
203
- default:
204
- $response = $default;
205
- break;
206
- }
207
-
208
- return $response;
209
- }
210
-
211
- /**
212
- *
213
- * @return type
214
- */
215
- protected function getActivityList() {
216
- $response = array(
217
- 'iTotalRecords' => 0,
218
- 'iTotalDisplayRecords' => 0,
219
- 'sEcho' => aam_Core_Request::request('sEcho'),
220
- 'aaData' => array(),
221
- );
222
-
223
- $activity = $this->getSubject()->getObject(aam_Control_Object_Activity::UID);
224
- $activities = $activity->getOption();
225
-
226
- foreach ($activities as $user_id => $list) {
227
- $user = new WP_User($user_id);
228
- if ($user->ID && is_array($list)) {
229
- foreach ($list as $time => $data) {
230
- $response['aaData'][] = array(
231
- $user->ID,
232
- ($user->display_name ? $user->display_name : $user->user_nicename),
233
- $activity->decorate($data),
234
- date('Y-m-d H:i:s', $time)
235
- );
236
- }
237
- }
238
- }
239
-
240
- return json_encode($response);
241
- }
242
-
243
- /**
244
- * Clear the activities
245
- *
246
- * @global wpdb $wpdb
247
- *
248
- * @return string
249
- *
250
- * @access public
251
- */
252
- protected function clearActivities() {
253
- $activity = $this->getSubject()->getObject(aam_Control_Object_Activity::UID);
254
- foreach ($activity->getOption() as $user_id => $list) {
255
- delete_user_option($user_id, 'aam_activity');
256
- }
257
-
258
- return json_encode(array('status' => 'success'));
259
- }
260
-
261
- /**
262
- *
263
- * @param aam_Control_Subject $subject
264
- */
265
- public function setSubject($subject) {
266
- $this->_subject = $subject;
267
- }
268
-
269
- /**
270
- *
271
- * @return aam_Control_Subject
272
- */
273
- public function getSubject() {
274
- return $this->_subject;
275
- }
276
-
277
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
extension/AAM_Activity_Log/images/info-active.png DELETED
Binary file
extension/AAM_Activity_Log/images/info.png DELETED
Binary file
extension/AAM_Activity_Log/images/trash-active.png DELETED
Binary file
extension/AAM_Activity_Log/images/trash.png DELETED
Binary file
extension/AAM_Activity_Log/index.php DELETED
@@ -1,15 +0,0 @@
1
- <?php
2
-
3
- /**
4
- * ======================================================================
5
- * LICENSE: This file is subject to the terms and conditions defined in *
6
- * file 'license.txt', which is part of this source code package. *
7
- * ======================================================================
8
- */
9
-
10
- $dirname = basename(dirname(__FILE__));
11
- define('AAM_ACTIVITY_LOG_BASE_URL', AAM_BASE_URL . 'extension/' . $dirname);
12
-
13
- require_once dirname(__FILE__) . '/extension.php';
14
-
15
- return new AAM_Extension_ActivityLog($this->getParent());
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
extension/AAM_Activity_Log/ui.phtml DELETED
@@ -1,33 +0,0 @@
1
- <?php
2
-
3
- /**
4
- * ======================================================================
5
- * LICENSE: This file is subject to the terms and conditions defined in *
6
- * file 'license.txt', which is part of this source code package. *
7
- * ======================================================================
8
- */
9
- ?>
10
- <div class="feature-content-container" id="activity_log_content">
11
- <table id="activity_list">
12
- <thead>
13
- <tr>
14
- <th>User ID</th>
15
- <th style="width:25%;"><?php echo __('Username', 'aam'); ?></th>
16
- <th><?php echo __('Activity', 'aam'); ?></th>
17
- <th style="width:30%;"><?php echo __('Time', 'aam'); ?></th>
18
- </tr>
19
- </thead>
20
- <tbody></tbody>
21
- </table>
22
-
23
- <div id="clear_activity_dialog" class="aam-dialog" title="<?php echo __('Clear Activity Log', 'aam'); ?>">
24
- <p class="dialog-content">
25
- <?php echo __('Are you sure you want to clear activity log?', 'aam'); ?>
26
- </p>
27
- </div>
28
- <div id="info_activity_dialog" class="aam-dialog" title="<?php echo __('Activity Log Info', 'aam'); ?>">
29
- <p>
30
- <?php echo sprintf(__('Basic version of Activity Log tracks only user\'s login and logout. Consider to purchase the <b>%s</b> Extension today to get access to advanced list of activities as well as we can develop additional activities on demand.', 'aam'), '<a href="http://wpaam.com/forum/viewtopic.php?f=7&t=91" target="_blank">AAM Activities</a>'); ?>
31
- </p>
32
- </div>
33
- </div>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
extension/AAM_Multisite_Support/extension.php DELETED
@@ -1,253 +0,0 @@
1
- <?php
2
-
3
- /**
4
- * ======================================================================
5
- * LICENSE: This file is subject to the terms and conditions defined in *
6
- * file 'license.txt', which is part of this source code package. *
7
- * ======================================================================
8
- */
9
-
10
- /**
11
- * AAM Multisite Support Extension
12
- *
13
- * @package AAM
14
- * @author Vasyl Martyniuk <support@wpaam.com>
15
- * @copyright Copyright C 2014 Vasyl Martyniuk
16
- * @license GNU General Public License {@link http://www.gnu.org/licenses/}
17
- */
18
- class AAM_Extension_Multisite extends AAM_Core_Extension {
19
-
20
- /**
21
- *
22
- * @var type
23
- */
24
- private $_subject = null;
25
-
26
- /**
27
- *
28
- * @param aam|aam_View_Connector $parent
29
- */
30
- public function __construct(aam $parent) {
31
- parent::__construct($parent);
32
- if (aam_Core_API::isNetworkPanel()) {
33
- add_action('admin_print_scripts', array($this, 'printScripts'));
34
- add_action('admin_print_styles', array($this, 'printStyles'));
35
- add_action('aam_localization_labels', array($this, 'localizationLabels'));
36
- add_action('wpmu_new_blog', array($this, 'newBlog'), 10, 6);
37
- $this->registerSubject();
38
- } elseif (is_admin()) {
39
- add_filter('aam_ajax_call', array($this, 'ajax'), 10, 2);
40
- }
41
- }
42
-
43
- /**
44
- *
45
- * @param type $blog_id
46
- * @param type $user_id
47
- * @param type $domain
48
- * @param type $path
49
- * @param type $site_id
50
- * @param type $meta
51
- */
52
- public function newBlog($blog_id, $user_id, $domain, $path, $site_id, $meta) {
53
- global $wpdb;
54
-
55
- if ($default_id = aam_Core_API::getBlogOption('aam_default_site', 0, 1)){
56
- $default_option = $wpdb->get_blog_prefix($default_id) . 'user_roles';
57
- $roles = aam_Core_API::getBlogOption($default_option, null, $default_id);
58
- if ($roles){
59
- aam_Core_API::updateBlogOption(
60
- $wpdb->get_blog_prefix($blog_id) . 'user_roles',
61
- $roles, $blog_id
62
- );
63
- }
64
- }
65
- }
66
-
67
- /**
68
- *
69
- * @return type
70
- */
71
- protected function getSiteList() {
72
- //retrieve site list first
73
- $blog_list = $this->retrieveSiteList();
74
-
75
- $response = array(
76
- 'iTotalRecords' => count($blog_list),
77
- 'iTotalDisplayRecords' => count($blog_list),
78
- 'sEcho' => aam_Core_Request::request('sEcho'),
79
- 'aaData' => array(),
80
- );
81
- $default = aam_Core_API::getBlogOption('aam_default_site', 0, 1);
82
-
83
- foreach ($blog_list as $site) {
84
- $blog = get_blog_details($site->blog_id);
85
- $response['aaData'][] = array(
86
- $site->blog_id,
87
- get_admin_url($site->blog_id, 'admin.php'),
88
- get_admin_url($site->blog_id, 'admin-ajax.php'),
89
- $blog->blogname,
90
- '',
91
- ($site->blog_id == $default ? 1 : 0)
92
- );
93
- }
94
-
95
- return json_encode($response);
96
- }
97
-
98
- /**
99
- * Retieve the list of sites
100
- *
101
- * @return array
102
- *
103
- * @access public
104
- */
105
- public function retrieveSiteList(){
106
- global $wpdb;
107
-
108
- return $wpdb->get_results('SELECT blog_id FROM ' . $wpdb->blogs);
109
- }
110
-
111
- /**
112
- * Register new subject Multisite
113
- *
114
- * @return void
115
- *
116
- * @access public
117
- */
118
- public function registerSubject() {
119
- aam_View_Collection::registerSubject((object)array(
120
- 'position' => 1,
121
- 'segment' => 'multisite',
122
- 'label' => __('Sites', 'aam'),
123
- 'title' => __('Site Manager', 'aam'),
124
- 'class' => 'manager-item manager-item-multisite',
125
- 'uid' => 'multisite',
126
- 'controller' => $this
127
- ));
128
- }
129
-
130
- /**
131
- *
132
- * @return type
133
- */
134
- public function content() {
135
- ob_start();
136
- require dirname(__FILE__) . '/ui.phtml';
137
- $content = ob_get_contents();
138
- ob_end_clean();
139
-
140
- return $content;
141
- }
142
-
143
- /**
144
- * Print necessary scripts
145
- *
146
- * @return void
147
- *
148
- * @access public
149
- */
150
- public function printScripts() {
151
- if ($this->getParent()->isAAMScreen()) {
152
- wp_enqueue_script(
153
- 'aam-multisite-admin',
154
- AAM_MULTISITE_BASE_URL . '/multisite.js',
155
- array('aam-admin')
156
- );
157
- $localization = array(
158
- 'nonce' => wp_create_nonce('aam_ajax'),
159
- 'addSiteURI' => admin_url('network/site-new.php'),
160
- 'editSiteURI' => admin_url('network/site-info.php')
161
- );
162
-
163
- wp_localize_script(
164
- 'aam-multisite-admin', 'aamMultisiteLocal', $localization
165
- );
166
- }
167
- }
168
-
169
- /**
170
- *
171
- */
172
- public function printStyles() {
173
- if ($this->getParent()->isAAMScreen()) {
174
- wp_enqueue_style(
175
- 'aam-multisite-admin', AAM_MULTISITE_BASE_URL . '/multisite.css'
176
- );
177
- }
178
- }
179
-
180
- /**
181
- *
182
- * @param type $labels
183
- * @return type
184
- */
185
- public function localizationLabels($labels) {
186
- $labels['Set Default'] = __('Set Default', 'aam');
187
- $labels['Unset Default'] = __('Unset Default', 'aam');
188
- $labels['Set as Default'] = __('Set as Default', 'aam');
189
-
190
- return $labels;
191
- }
192
-
193
- /**
194
- *
195
- * @param type $default
196
- * @param aam_Control_Subject $subject
197
- * @return type
198
- */
199
- public function ajax($default, aam_Control_Subject $subject = null) {
200
- $this->setSubject($subject);
201
-
202
- switch (aam_Core_Request::request('sub_action')) {
203
- case 'site_list':
204
- $response = $this->getSiteList();
205
- break;
206
-
207
- case 'pin_site':
208
- $response = $this->pinSite();
209
- break;
210
-
211
- case 'unpin_site':
212
- $response = $this->unpinSite();
213
- break;
214
-
215
- default:
216
- $response = $default;
217
- break;
218
- }
219
-
220
- return $response;
221
- }
222
-
223
- protected function pinSite() {
224
- return json_encode(array(
225
- 'status' => aam_Core_API::updateBlogOption(
226
- 'aam_default_site', aam_Core_Request::post('blog'), 1
227
- ) ? 'success' : 'failure'
228
- ));
229
- }
230
-
231
- protected function unpinSite() {
232
- return json_encode(array(
233
- 'status' => aam_Core_API::deleteBlogOption('aam_default_site', 1) ? 'success' : 'failure'
234
- ));
235
- }
236
-
237
- /**
238
- *
239
- * @param type $subject
240
- */
241
- public function setSubject($subject) {
242
- $this->_subject = $subject;
243
- }
244
-
245
- /**
246
- *
247
- * @return type
248
- */
249
- public function getSubject() {
250
- return $this->_subject;
251
- }
252
-
253
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
extension/AAM_Multisite_Support/images/add-active.png DELETED
Binary file
extension/AAM_Multisite_Support/images/add.png DELETED
Binary file
extension/AAM_Multisite_Support/images/edit-active.png DELETED
Binary file
extension/AAM_Multisite_Support/images/edit.png DELETED
Binary file
extension/AAM_Multisite_Support/images/manage-active.png DELETED
Binary file
extension/AAM_Multisite_Support/images/manage.png DELETED
Binary file
extension/AAM_Multisite_Support/images/multisite-active.png DELETED
Binary file
extension/AAM_Multisite_Support/images/multisite.png DELETED
Binary file
extension/AAM_Multisite_Support/images/pin-active.png DELETED
Binary file
extension/AAM_Multisite_Support/images/pin.png DELETED
Binary file
extension/AAM_Multisite_Support/images/refresh-active.png DELETED
Binary file
extension/AAM_Multisite_Support/images/refresh.png DELETED
Binary file
extension/AAM_Multisite_Support/images/unpin.png DELETED
Binary file
extension/AAM_Multisite_Support/index.php DELETED
@@ -1,15 +0,0 @@
1
- <?php
2
-
3
- /**
4
- * ======================================================================
5
- * LICENSE: This file is subject to the terms and conditions defined in *
6
- * file 'license.txt', which is part of this source code package. *
7
- * ======================================================================
8
- */
9
-
10
- $dirname = basename(dirname(__FILE__));
11
- define('AAM_MULTISITE_BASE_URL', AAM_BASE_URL . 'extension/' . $dirname);
12
-
13
- require_once dirname(__FILE__) . '/extension.php';
14
-
15
- return new AAM_Extension_Multisite($this->getParent());
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
extension/AAM_Multisite_Support/multisite.css DELETED
@@ -1,98 +0,0 @@
1
- /**
2
- * ======================================================================
3
- * LICENSE: This file is subject to the terms and conditions defined in *
4
- * file 'license.txt', which is part of this source code package. *
5
- * ======================================================================
6
- */
7
-
8
- /** CONTROL MANAGER STYLES **/
9
- .manager-item-multisite{
10
- background-image: url('images/multisite.png');
11
- }
12
-
13
- .manager-item-multisite-active{
14
- background-image: url('images/multisite-active.png');
15
- }
16
-
17
- .multisite-top-actions{
18
- float: right;
19
- display: inline-table;
20
- width: auto;
21
- text-align: right;
22
- }
23
-
24
- .multisite-top-action{
25
- width: 24px;
26
- height: 24px;
27
- display: table-cell;
28
- text-indent: -9999px;
29
- padding-right: 10px;
30
- background-repeat: no-repeat;
31
- background-position: center;
32
- }
33
-
34
- .multisite-top-action-add{
35
- background-image: url('images/add.png');
36
- }
37
-
38
- .multisite-top-action-add:hover{
39
- background-image: url('images/add-active.png');
40
- }
41
-
42
- .multisite-top-action-refresh{
43
- background-image: url('images/refresh.png');
44
- }
45
-
46
- .multisite-top-action-refresh:hover{
47
- background-image: url('images/refresh-active.png');
48
- }
49
-
50
- .multisite-actions{
51
- width: 100%;
52
- display: table;
53
- }
54
-
55
- .multisite-action{
56
- width: 16px;
57
- height: 16px;
58
- display: table-cell;
59
- text-indent: -9999px;
60
- background-repeat: no-repeat;
61
- background-position: center;
62
- }
63
-
64
- .multisite-action-manage{
65
- background-image: url('images/manage.png');
66
- }
67
-
68
- .multisite-action-manage:hover{
69
- background-image: url('images/manage-active.png');
70
- }
71
-
72
- .multisite-action-manage-active{
73
- background-image: url('images/manage-active.png');
74
- }
75
-
76
- .multisite-action-pin{
77
- background-image: url('images/pin.png');
78
- }
79
-
80
- .multisite-action-pin-active{
81
- background-image: url('images/pin-active.png');
82
- }
83
-
84
- .multisite-action-pin:hover{
85
- background-image: url('images/pin-active.png');
86
- }
87
-
88
- .multisite-action-edit{
89
- background-image: url('images/edit.png');
90
- }
91
-
92
- .multisite-action-edit:hover{
93
- background-image: url('images/edit-active.png');
94
- }
95
-
96
- .aam-multisite-bold{
97
- font-weight: bold;
98
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
extension/AAM_Multisite_Support/multisite.js DELETED
@@ -1,228 +0,0 @@
1
- /**
2
- * ======================================================================
3
- * LICENSE: This file is subject to the terms and conditions defined in *
4
- * file 'license.txt', which is part of this source code package. *
5
- * ======================================================================
6
- */
7
-
8
- AAM.prototype.site_id = 1;
9
- AAM.prototype.segmentTables.siteList = null;
10
-
11
- AAM.prototype.reloadSite = function(site_id, siteurl, ajaxurl) {
12
- var _this = this;
13
- this.site_id = site_id;
14
- aamLocal.siteURI = siteurl;
15
- aamLocal.ajaxurl = ajaxurl;
16
-
17
- //reset default values for current subjects
18
- this.setSubject('role', aamLocal.defaultSegment.role);
19
-
20
- this.retrieveSettings();
21
-
22
- //highlight the active site
23
- jQuery('#site_list .aam-multisite-bold').removeClass('aam-multisite-bold');
24
- jQuery('#site_list .multisite-action-manage-active').each(function() {
25
- _this.terminate(jQuery(this), 'multisite-action-manage');
26
- });
27
- var nRow = jQuery('#site_list tr[site="' + site_id + '"]');
28
- jQuery('td:eq(0)', nRow).addClass('aam-multisite-bold');
29
- this.launch(jQuery('.multisite-action-manage', nRow), 'multisite-action-manage');
30
-
31
- //reload all segmentTables
32
- for (var i in this.segmentTables) {
33
- if (this.segmentTables[i] !== null) {
34
- this.segmentTables[i].fnDraw();
35
- }
36
- }
37
- };
38
-
39
- AAM.prototype.loadMultisiteSegment = function() {
40
- var _this = this;
41
-
42
- if (typeof this.siteList === 'undefined') {
43
- this.siteList = jQuery('#site_list').dataTable({
44
- sDom: "<'top'f<'multisite-top-actions'><'clear'>>t<'footer'ip<'clear'>>",
45
- bServerSide: true,
46
- sPaginationType: "full_numbers",
47
- bAutoWidth: false,
48
- bSort: false,
49
- sAjaxSource: ajaxurl,
50
- fnServerParams: function(aoData) {
51
- aoData.push({
52
- name: 'action',
53
- value: 'aam'
54
- });
55
- aoData.push({
56
- name: 'sub_action',
57
- value: 'site_list'
58
- });
59
- aoData.push({
60
- name: '_ajax_nonce',
61
- value: aamLocal.nonce
62
- });
63
- aoData.push({
64
- name: 's',
65
- value: jQuery('#site_list_filter input').val()
66
- });
67
- },
68
- fnInitComplete: function() {
69
- var add = jQuery('<a/>', {
70
- 'href': aamMultisiteLocal.addSiteURI,
71
- 'target': '_blank',
72
- 'class': 'multisite-top-action multisite-top-action-add',
73
- 'aam-tooltip': aamLocal.labels['Add New Site']
74
- });
75
- jQuery('#site_list_wrapper .multisite-top-actions').append(add);
76
-
77
- var refresh = jQuery('<a/>', {
78
- 'href': '#',
79
- 'class': 'multisite-top-action multisite-top-action-refresh',
80
- 'aam-tooltip': aamLocal.labels['Refresh']
81
- }).bind('click', function(event) {
82
- event.preventDefault();
83
- _this.siteList.fnDraw();
84
- });
85
- jQuery('#site_list_wrapper .multisite-top-actions').append(refresh);
86
-
87
- _this.initTooltip(jQuery('#site_list_wrapper .site-top-actions'));
88
- },
89
- fnDrawCallback: function() {
90
- jQuery('#multisite_list_wrapper .clear-table-filter').bind('click', function(event) {
91
- event.preventDefault();
92
- jQuery('#multisite_list_filter input').val('');
93
- _this.siteList.fnFilter('');
94
- });
95
- },
96
- oLanguage: {
97
- sSearch: "",
98
- oPaginate: {
99
- sFirst: "&Lt;",
100
- sLast: "&Gt;",
101
- sNext: "&gt;",
102
- sPrevious: "&lt;"
103
- }
104
- },
105
- aoColumnDefs: [
106
- {
107
- bVisible: false,
108
- aTargets: [0, 1, 2, 4]
109
- }
110
- ],
111
- fnRowCallback: function(nRow, aData) { //format data
112
- jQuery('td:eq(1)', nRow).html(jQuery('<div/>', {
113
- 'class': 'multisite-actions'
114
- })); //
115
- //add role attribute
116
- jQuery(nRow).attr('site', aData[0]);
117
-
118
- if (parseInt(aData[0]) === _this.site_id) {
119
- jQuery('.current-site').html(aData[3] + ':');
120
- jQuery('td:eq(0)', nRow).addClass('aam-multisite-bold');
121
- var current = true;
122
- } else {
123
- current = false;
124
- }
125
-
126
- jQuery('.multisite-actions', nRow).empty();
127
- jQuery('.multisite-actions', nRow).append(jQuery('<a/>', {
128
- 'href': '#',
129
- 'class': 'multisite-action multisite-action-manage' + (current ? '-active' : ''),
130
- 'aam-tooltip': aamLocal.labels['Manage']
131
- }).bind('click', function(event) {
132
- event.preventDefault();
133
- //change title
134
- jQuery('.current-site').html(aData[3] + ':');
135
- _this.reloadSite(aData[0], aData[1], aData[2]);
136
- }));
137
-
138
- var def_site = (parseInt(aData[5]) === 1 ? true : false);
139
-
140
- jQuery('.multisite-actions', nRow).append(jQuery('<a/>', {
141
- 'href': '#',
142
- 'class': 'multisite-action multisite-action-pin' + (def_site ? '-active' : ''),
143
- 'aam-tooltip': (def_site ? aamLocal.labels['Unset Default'] : aamLocal.labels['Set as Default'])
144
- }).bind('click', function(event) {
145
- event.preventDefault();
146
- var button = this;
147
-
148
- if (def_site) {
149
- var unpin_data = _this.compileAjaxPackage('unpin_site', false);
150
- unpin_data.blog = aData[0];
151
- jQuery.ajax(ajaxurl, {
152
- type: 'POST',
153
- dataType: 'json',
154
- data: unpin_data,
155
- success: function(response) {
156
- if (response.status === 'success') {
157
- _this.siteList.fnDraw();
158
- }
159
- _this.highlight('.control-manager-content', response.status);
160
- },
161
- error: function() {
162
- _this.highlight('.control-manager-content', 'failure');
163
- }
164
- });
165
- } else {
166
- jQuery('#default_site').html(aData[3]);
167
- var pin_data = _this.compileAjaxPackage('pin_site', false);
168
- pin_data.blog = aData[0];
169
-
170
- var buttons = {};
171
- buttons[aamLocal.labels['Set Default']] = function() {
172
- jQuery.ajax(ajaxurl, {
173
- type: 'POST',
174
- dataType: 'json',
175
- data: pin_data,
176
- success: function(response) {
177
- if (response.status === 'success') {
178
- _this.siteList.fnDraw();
179
- }
180
- _this.highlight('.control-manager-content', response.status);
181
- },
182
- error: function() {
183
- _this.highlight('.control-manager-content', 'failure');
184
- },
185
- complete: function() {
186
- jQuery("#tap_default_site").dialog("close");
187
- }
188
- });
189
- jQuery("#tap_default_site").dialog("close");
190
- };
191
- buttons[aamLocal.labels['Cancel']] = function() {
192
- jQuery("#tap_default_site").dialog("close");
193
- };
194
-
195
- jQuery("#tap_default_site").dialog({
196
- resizable: false,
197
- height: 'auto',
198
- modal: true,
199
- buttons: buttons
200
- });
201
- }
202
- }));
203
-
204
- jQuery('.multisite-actions', nRow).append(jQuery('<a/>', {
205
- 'href': aamMultisiteLocal.editSiteURI + '?id=' + aData[0],
206
- 'class': 'multisite-action multisite-action-edit',
207
- 'target': '_blank',
208
- 'aam-tooltip': aamLocal.labels['Edit']
209
- }));
210
-
211
- _this.initTooltip(nRow);
212
- },
213
- fnInfoCallback: function(oSettings, iStart, iEnd, iMax, iTotal, sPre) {
214
- return (iMax !== iTotal ? _this.clearFilterIndicator() : '');
215
- }
216
- });
217
- }
218
-
219
- jQuery('#multisite_manager_wrap').show();
220
- };
221
-
222
- jQuery(document).ready(function() {
223
- aamInterface.addAction('aam_load_segment', function() {
224
- aamInterface.loadMultisiteSegment();
225
- });
226
- //by default load the Multisite panel first
227
- aamInterface.loadSegment('multisite');
228
- });
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
extension/AAM_Multisite_Support/ui.phtml DELETED
@@ -1,32 +0,0 @@
1
- <?php
2
-
3
- /**
4
- * ======================================================================
5
- * LICENSE: This file is subject to the terms and conditions defined in *
6
- * file 'license.txt', which is part of this source code package. *
7
- * ======================================================================
8
- */
9
- ?>
10
- <div id="multisite_manager_wrap">
11
- <table id="site_list">
12
- <thead>
13
- <tr>
14
- <th>Site ID</th>
15
- <th>Site URL</th>
16
- <th>Site Ajax URL</th>
17
- <th width="65%"><?php echo __('Site', 'aam'); ?></th>
18
- <th><?php echo __('Action', 'aam'); ?></th>
19
- <th>Default</th>
20
- </tr>
21
- </thead>
22
- <tbody></tbody>
23
- </table>
24
- <div id="tap_default_site" class="aam-dialog" title="<?php echo __('Set Default Site', 'aam'); ?>">
25
- <p class="dialog-content">
26
- <?php echo __('Would you like to set the site', 'aam'); ?> <b><span id="default_site"></span></b> <?php echo __('as default?', 'aam'); ?>
27
- </p>
28
- <p class="dialog-note">
29
- <?php echo __('All newly created sites will inherit list of Roles & Capabilities.', 'aam'); ?>
30
- </p>
31
- </div>
32
- </div>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
extension/AAM_My_Feature/extension.php DELETED
@@ -1,113 +0,0 @@
1
- <?php
2
-
3
- /**
4
- * ======================================================================
5
- * LICENSE: This file is subject to the terms and conditions defined in *
6
- * file 'license.txt', which is part of this source code package. *
7
- * ======================================================================
8
- */
9
-
10
- /**
11
- * My Feature View Controller
12
- *
13
- * @package AAM
14
- * @author Vasyl Martyniuk <support@wpaam.com>
15
- * @copyright Copyright C Vasyl Martyniuk
16
- * @license GNU General Public License {@link http://www.gnu.org/licenses/}
17
- */
18
- class AAM_Extension_MyFeature extends AAM_Core_Extension {
19
-
20
- /**
21
- * Constructor
22
- *
23
- * @param aam $parent
24
- *
25
- * @return void
26
- *
27
- * @access public
28
- */
29
- public function __construct(aam $parent) {
30
- parent::__construct($parent);
31
-
32
- if (is_admin()) {
33
- $this->registerFeature();
34
- }
35
- }
36
-
37
- /**
38
- * Register feature
39
- *
40
- * @return void
41
- *
42
- * @access protected
43
- */
44
- protected function registerFeature() {
45
- //add feature
46
- $capability = aam_Core_ConfigPress::getParam(
47
- 'aam.feature.my_feature.capability', 'administrator'
48
- );
49
-
50
- if (current_user_can($capability)) {
51
- add_action('admin_print_scripts', array($this, 'printScripts'));
52
- add_action('admin_print_styles', array($this, 'printStyles'));
53
- aam_View_Collection::registerFeature((object)array(
54
- 'uid' => 'my_feature',
55
- 'position' => 100,
56
- 'title' => __('My Feature', 'aam'),
57
- 'subjects' => array(
58
- aam_Control_Subject_Role::UID,
59
- aam_Control_Subject_User::UID,
60
- aam_Control_Subject_Visitor::UID
61
- ),
62
- 'controller' => $this
63
- ));
64
- }
65
- }
66
-
67
- /**
68
- *
69
- * @return type
70
- */
71
- public function content() {
72
- ob_start();
73
- require dirname(__FILE__) . '/ui.phtml';
74
- $content = ob_get_contents();
75
- ob_end_clean();
76
-
77
- return $content;
78
- }
79
-
80
- /**
81
- * Print necessary scripts
82
- *
83
- * @return void
84
- *
85
- * @access public
86
- */
87
- public function printScripts() {
88
- if ($this->getParent()->isAAMScreen()) {
89
- wp_enqueue_script(
90
- 'aam-my-feature-admin',
91
- AAM_MY_FEATURE_BASE_URL . '/my_feature.js',
92
- array('aam-admin')
93
- );
94
- }
95
- }
96
-
97
- /**
98
- * Register stylesheets
99
- *
100
- * @return void
101
- *
102
- * @access public
103
- */
104
- public function printStyles() {
105
- if ($this->getParent()->isAAMScreen()) {
106
- wp_enqueue_style(
107
- 'aam-my-feature-admin',
108
- AAM_MY_FEATURE_BASE_URL . '/my_feature.css'
109
- );
110
- }
111
- }
112
-
113
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
extension/AAM_My_Feature/images/worker.png DELETED
Binary file
extension/AAM_My_Feature/index.php DELETED
@@ -1,15 +0,0 @@
1
- <?php
2
-
3
- /**
4
- * ======================================================================
5
- * LICENSE: This file is subject to the terms and conditions defined in *
6
- * file 'license.txt', which is part of this source code package. *
7
- * ======================================================================
8
- */
9
-
10
- $dirname = basename(dirname(__FILE__));
11
- define('AAM_MY_FEATURE_BASE_URL', AAM_BASE_URL . 'extension/' . $dirname);
12
-
13
- require_once dirname(__FILE__) . '/extension.php';
14
-
15
- return new AAM_Extension_MyFeature($this->getParent());
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
extension/AAM_My_Feature/my_feature.css DELETED
@@ -1,22 +0,0 @@
1
- /**
2
- * ======================================================================
3
- * LICENSE: This file is subject to the terms and conditions defined in *
4
- * file 'license.txt', which is part of this source code package. *
5
- * ======================================================================
6
- */
7
- .my-feature-banner{
8
- width: 100%;
9
- background: transparent url('images/worker.png') no-repeat center 10px;
10
- padding-top: 150px;
11
- -moz-box-sizing: border-box;
12
- box-sizing: border-box;
13
- -webkit-box-sizing: border-box;
14
- }
15
-
16
- .my-feature-banner .banner-style{
17
- margin: 0px 10px;
18
- font-family: "Trebuchet MS", Helvetica, sans-serif;
19
- font-size: 1.2em;
20
- font-weight: bold;
21
- text-align: center;
22
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
extension/AAM_My_Feature/my_feature.js DELETED
@@ -1,20 +0,0 @@
1
- /**
2
- * ======================================================================
3
- * LICENSE: This file is subject to the terms and conditions defined in *
4
- * file 'license.txt', which is part of this source code package. *
5
- * ======================================================================
6
- */
7
-
8
- AAM.prototype.myFeature = function() {
9
- //Send Email to Us
10
- jQuery('.my-feature-message-action').bind('click', function(event) {
11
- event.preventDefault();
12
- jQuery('#aam_message').trigger('click');
13
- });
14
- };
15
-
16
- jQuery(document).ready(function() {
17
- aamInterface.addAction('aam_init_features', function() {
18
- aamInterface.myFeature();
19
- });
20
- });
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
extension/AAM_My_Feature/ui.phtml DELETED
@@ -1,19 +0,0 @@
1
- <?php
2
-
3
- /**
4
- * ======================================================================
5
- * LICENSE: This file is subject to the terms and conditions defined in *
6
- * file 'license.txt', which is part of this source code package. *
7
- * ======================================================================
8
- */
9
- ?>
10
- <div class="feature-content-container" id="my_feature_content">
11
- <div class="my-feature-banner">
12
- <p class="banner-style">
13
- <?php echo __('Do you need a custom feature?', 'aam'); ?>
14
- <a href="https://github.com/wpaam/AAM-Feature-Example" target="_blank">
15
- <?php echo __('Create your own extension ', 'aam'); ?>
16
- </a> <?php echo __('or ask us and we will develop it for you.', 'aam'); ?>
17
- </p>
18
- </div>
19
- </div>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
extension/AAM_Secure/extension.php DELETED
@@ -1,384 +0,0 @@
1
- <?php
2
-
3
- /**
4
- * ======================================================================
5
- * LICENSE: This file is subject to the terms and conditions defined in *
6
- * file 'license.txt', which is part of this source code package. *
7
- * ======================================================================
8
- */
9
-
10
- /**
11
- * Feature Secure
12
- *
13
- * @package AAM
14
- * @author Vasyl Martyniuk <support@wpaam.com>
15
- * @copyright Copyright C Vasyl Martyniuk
16
- * @license GNU General Public License {@link http://www.gnu.org/licenses/}
17
- */
18
- class AAM_Secure extends AAM_Core_Extension {
19
-
20
- /**
21
- * Unique Feature ID
22
- */
23
- const FEATURE_ID = 'secure';
24
-
25
- /**
26
- *
27
- * @var type
28
- */
29
- private $_cache = array();
30
-
31
- /**
32
- *
33
- * @var type
34
- */
35
- private $_cacheLimit = 1000;
36
-
37
- /**
38
- *
39
- * @var type
40
- */
41
- private $_stats = array();
42
-
43
- /**
44
- * Constructor
45
- *
46
- * @param aam $parent Main AAM object
47
- *
48
- * @return void
49
- *
50
- * @access public
51
- */
52
- public function __construct(aam $parent) {
53
- parent::__construct($parent);
54
-
55
- if (is_admin()) {
56
- //print required JS & CSS
57
- add_action('admin_print_scripts', array($this, 'printScripts'));
58
- add_action('admin_print_styles', array($this, 'printStyles'));
59
- add_action('admin_head', array($this, 'adminHead'));
60
-
61
- //manager Admin Menu
62
- if (aam_Core_API::isNetworkPanel()) {
63
- add_action('network_admin_menu', array($this, 'adminMenu'), 999);
64
- } else {
65
- add_action('admin_menu', array($this, 'adminMenu'), 999);
66
- }
67
- //manager AAM Ajax Requests
68
- add_action('wp_ajax_aam_security', array($this, 'ajax'));
69
- }
70
-
71
- add_filter('wp_login_errors', array($this, 'loginFailure'), 10, 2);
72
- add_action('wp_login', array($this, 'login'), 10, 2);
73
-
74
- //add_filter('authenticate', array($this, 'authenticate'), 999, 3);
75
- }
76
-
77
- /**
78
- *
79
- * @param type $username
80
- * @param type $user
81
- */
82
- public function login($username, $user) {
83
- $this->_cache = aam_Core_API::getBlogOption(
84
- 'aam_security_login_cache', array()
85
- );
86
- $ip = aam_Core_Request::server('REMOTE_ADDR');
87
- if ($this->hasIPCache($ip)) {
88
- $data = $this->getIPCache($ip);
89
- $data->attempts = 0; //reset counter
90
- $this->addIPCache($ip, $data);
91
- aam_Core_API::updateBlogOption(
92
- 'aam_security_login_cache', $this->_cache
93
- );
94
- }
95
- }
96
-
97
- /**
98
- *
99
- * @return type
100
- */
101
- public function isGeoLookupOn() {
102
- $geo_lookup = aam_Core_ConfigPress::getParam(
103
- 'security.login.geo_lookup', 'false'
104
- );
105
-
106
- return ($geo_lookup == 'true' ? true : false);
107
- }
108
-
109
- /**
110
- *
111
- * @return type
112
- */
113
- public function isLoginLockoutOn() {
114
- $login_lock = aam_Core_ConfigPress::getParam(
115
- 'security.login.lockout', 'false'
116
- );
117
-
118
- return ($login_lock == 'true' ? true : false);
119
- }
120
-
121
- /**
122
- *
123
- * @param type $errors
124
- * @param type $redirect_to
125
- */
126
- public function loginFailure($errors, $redirect_to) {
127
- $this->_cache = aam_Core_API::getBlogOption(
128
- 'aam_security_login_cache', array()
129
- );
130
- $this->_cacheLimit = aam_Core_ConfigPress::getParam(
131
- 'security.login.cache_limit', 1000
132
- );
133
- if ($this->isGeoLookupOn()) {
134
- $this->_stats = aam_Core_API::getBlogOption(
135
- 'aam_security_login_stats', array()
136
- );
137
- $info = $this->retrieveGeoData();
138
- if ($info instanceof stdClass) {
139
- if (!isset($this->_stats[$info->countryCode])) {
140
- $this->_stats[$info->countryCode] = array(
141
- 'failed' => 0
142
- );
143
- }
144
- $this->_stats[$info->countryCode]['failed']++;
145
- aam_Core_API::updateBlogOption(
146
- 'aam_security_login_stats', $this->_stats
147
- );
148
- }
149
- }
150
- if ($this->isLoginLockoutOn()) {
151
- $this->loginLockout();
152
- }
153
- aam_Core_API::updateBlogOption(
154
- 'aam_security_login_cache', $this->_cache
155
- );
156
-
157
- return $errors;
158
- }
159
-
160
- /**
161
- *
162
- */
163
- protected function loginLockout() {
164
- $ip = aam_Core_Request::server('REMOTE_ADDR');
165
- if ($this->hasIPCache($ip)) {
166
- $info = $this->getIPCache($ip);
167
- } else {
168
- $info = new stdClass;
169
- }
170
-
171
- if (!isset($info->attempts)) {
172
- $info->attempts = 1;
173
- } else {
174
- $info->attempts++;
175
- }
176
- $threshold = aam_Core_ConfigPress::getParam(
177
- 'security.login.attempts', 10
178
- );
179
- if ($info->attempts >= $threshold) {
180
- $action = aam_Core_ConfigPress::getParam(
181
- 'security.login.attempt_failure', 'slowdown'
182
- );
183
- switch ($action) {
184
- case 'slowdown':
185
- $time = aam_Core_ConfigPress::getParam(
186
- 'security.login.slowdown_time', '5'
187
- );
188
- sleep(intval($time));
189
- break;
190
-
191
- case 'die':
192
- wp_die(aam_Core_ConfigPress::getParam(
193
- 'security.login.die_message', 'You are not allowed to login'
194
- ));
195
- break;
196
-
197
- default:
198
- break;
199
- }
200
- }
201
- }
202
-
203
- /**
204
- *
205
- * @return null
206
- */
207
- protected function retrieveGeoData() {
208
- $ip = aam_Core_Request::server('REMOTE_ADDR');
209
- if ($this->hasIPCache($ip)) {
210
- $location = $this->getIPCache($ip);
211
- } else {
212
- $service = aam_Core_ConfigPress::getParam(
213
- 'security.login.geoip.service', 'FreeGeoIP'
214
- );
215
- $filename = dirname(__FILE__) . '/geoip/' . strtolower($service) . '.php';
216
-
217
- if (file_exists($filename)) {
218
- require_once($filename);
219
- $location = call_user_func("{$service}::query", $ip);
220
- $this->addIPCache($ip, $location);
221
- } else {
222
- $location = null;
223
- }
224
- }
225
-
226
- return $location;
227
- }
228
-
229
- /**
230
- *
231
- * @param type $ip
232
- * @return type
233
- */
234
- protected function hasIPCache($ip) {
235
- return (isset($this->_cache[$ip]) ? true : false);
236
- }
237
-
238
- /**
239
- *
240
- * @param type $ip
241
- * @return type
242
- */
243
- protected function getIPCache($ip) {
244
- return ($this->hasIPCache($ip) ? $this->_cache[$ip] : null);
245
- }
246
-
247
- /**
248
- *
249
- * @param type $ip
250
- * @param type $data
251
- */
252
- protected function addIPCache($ip, $data) {
253
- if (!is_null($data)) {
254
- if ((count($this->_cache) >= $this->_cacheLimit) && !isset($this->_cache[$ip])) {
255
- array_shift($this->_cache);
256
- }
257
- $this->_cache[$ip] = $data;
258
- }
259
- }
260
-
261
- /**
262
- * Print necessary styles
263
- *
264
- * @return void
265
- *
266
- * @access public
267
- */
268
- public function printStyles() {
269
- if ($this->isSecurityScreen()) {
270
- wp_enqueue_style('dashboard');
271
- wp_enqueue_style('global');
272
- wp_enqueue_style('wp-admin');
273
- wp_enqueue_style('aam-ui-style', AAM_MEDIA_URL . 'css/jquery-ui.css');
274
- wp_enqueue_style('aam-common-style', AAM_MEDIA_URL . 'css/common.css');
275
- wp_enqueue_style('aam-security-style', AAM_SECURITY_BASE_URL . '/stylesheet/security.css');
276
- if ($this->isGeoLookupOn()) {
277
- wp_enqueue_style('aam-datatable', AAM_MEDIA_URL . 'css/jquery.dt.css');
278
- wp_enqueue_style('aam-country-flags', AAM_SECURITY_BASE_URL . '/stylesheet/flags32.css');
279
- }
280
- }
281
- }
282
-
283
- /**
284
- * Print necessary scripts
285
- *
286
- * @return void
287
- *
288
- * @access public
289
- */
290
- public function printScripts() {
291
- if ($this->isSecurityScreen()) {
292
- wp_enqueue_script('postbox');
293
- wp_enqueue_script('dashboard');
294
- if ($this->isGeoLookupOn()) {
295
- wp_enqueue_script('aam-datatable', AAM_MEDIA_URL . 'js/jquery.dt.js');
296
- wp_enqueue_script('google-jsapi', 'https://www.google.com/jsapi');
297
- }
298
- wp_enqueue_script('aam-security', AAM_SECURITY_BASE_URL . '/javascript/security.js');
299
- $localization = array(
300
- 'nonce' => wp_create_nonce('aam_ajax'),
301
- 'ajaxurl' => admin_url('admin-ajax.php'),
302
- );
303
- wp_localize_script('aam-security', 'aamLocal', $localization);
304
- }
305
- }
306
-
307
- /**
308
- *
309
- */
310
- public function adminHead() {
311
- if ($this->isSecurityScreen() && $this->isGeoLookupOn()) {
312
- echo '<script type="text/javascript">';
313
- echo file_get_contents(__DIR__ . '/javascript/loader.js');
314
- echo '</script>';
315
- }
316
- }
317
-
318
- /**
319
- *
320
- * @return type
321
- */
322
- public function isSecurityScreen() {
323
- return (aam_Core_Request::get('page') == 'aam-security' ? true : false);
324
- }
325
-
326
- /**
327
- * Register Admin Menu
328
- *
329
- * @return void
330
- *
331
- * @access public
332
- */
333
- public function adminMenu() {
334
- //register submenus
335
- add_submenu_page(
336
- 'aam', __('Security', 'aam'), __('Security', 'aam'), aam_Core_ConfigPress::getParam(
337
- 'aam.page.security.capability', 'administrator'
338
- ), 'aam-security', array($this, 'content')
339
- );
340
- }
341
-
342
- /**
343
- *
344
- */
345
- public function content() {
346
- require_once(dirname(__FILE__) . '/security.php');
347
- $security = new aam_View_Security();
348
- echo $security->run();
349
- }
350
-
351
- public function ajax() {
352
- check_ajax_referer('aam_ajax');
353
-
354
- //clean buffer to make sure that nothing messing around with system
355
- while (@ob_end_clean());
356
-
357
- //process ajax request
358
- try {
359
- require_once(dirname(__FILE__) . '/security.php');
360
- $model = new aam_View_Security();
361
- echo $model->processAjax();
362
- } catch (Exception $e) {
363
- echo '-1';
364
- }
365
- die();
366
- }
367
-
368
- /**
369
- *
370
- * @param type $user
371
- * @param type $username
372
- * @param type $password
373
- * @return type
374
- */
375
- public function authenticate($user, $username, $password) {
376
- if (!is_wp_error($user)) {
377
- $login_history = get_user_meta($user->ID, 'aam_login_history', true);
378
- $ip = aam_Core_Request::server('REMOTE_ADDR');
379
- }
380
-
381
- return $user;
382
- }
383
-
384
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
extension/AAM_Secure/geoip/freegeoip.php DELETED
@@ -1,32 +0,0 @@
1
- <?php
2
- /**
3
- * ======================================================================
4
- * LICENSE: This file is subject to the terms and conditions defined in *
5
- * file 'license.txt', which is part of this source code package. *
6
- * ======================================================================
7
- */
8
-
9
- require_once(dirname(__FILE__) . '/geoip.php');
10
-
11
- class FreeGeoIP extends GeoIP {
12
-
13
- public static function query($ip) {
14
- $response = aam_Core_API::cURL('http://freegeoip.net/xml/' . $ip, false, true);
15
- $geodata = null;
16
- if ($response['status'] == 'success') {
17
- $data = @simplexml_load_string($response['content']);
18
- if ($data) {
19
- $geodata = (object) array(
20
- 'countryCode' => (string) $data->CountryCode,
21
- 'countryName' => (string) $data->CountryName,
22
- 'region' => (string) $data->RegionCode,
23
- 'city' => (string) $data->City,
24
- 'zip' => (string) $data->ZipCode
25
- );
26
- }
27
- }
28
-
29
- return $geodata;
30
- }
31
-
32
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
extension/AAM_Secure/geoip/geoip.php DELETED
@@ -1,15 +0,0 @@
1
- <?php
2
- /**
3
- * ======================================================================
4
- * LICENSE: This file is subject to the terms and conditions defined in *
5
- * file 'license.txt', which is part of this source code package. *
6
- * ======================================================================
7
- */
8
-
9
- abstract class GeoIP {
10
-
11
- public static function query($ip) {
12
-
13
- }
14
-
15
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
extension/AAM_Secure/index.php DELETED
@@ -1,17 +0,0 @@
1
- <?php
2
-
3
- /**
4
- * ======================================================================
5
- * LICENSE: This file is subject to the terms and conditions defined in *
6
- * file 'license.txt', which is part of this source code package. *
7
- * ======================================================================
8
- */
9
-
10
- $dirname = basename(dirname(__FILE__));
11
- define('AAM_SECURITY_BASE_URL', AAM_BASE_URL . 'extension/' . $dirname);
12
-
13
-
14
- //load the Extension Controller
15
- require_once dirname(__FILE__) . '/extension.php';
16
-
17
- return new AAM_Secure($this->getParent());
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
extension/AAM_Secure/javascript/loader.js DELETED
@@ -1,41 +0,0 @@
1
- /**
2
- * ======================================================================
3
- * LICENSE: This file is subject to the terms and conditions defined in *
4
- * file 'license.txt', which is part of this source code package. *
5
- * ======================================================================
6
- */
7
-
8
- google.load('visualization', '1', {'packages': ['geochart']});
9
- google.setOnLoadCallback(drawRegionsMap);
10
-
11
- function drawRegionsMap() {
12
- jQuery.ajax(aamLocal.ajaxurl, {
13
- type: 'POST',
14
- dataType: 'json',
15
- data: {
16
- action: 'aam_security',
17
- sub_action: 'map_data',
18
- _ajax_nonce: aamLocal.nonce
19
- },
20
- success: function(response) {
21
- var list = new Array();
22
- list.push(['Country', 'Failed Attempts']);
23
- for (var i in response.list) {
24
- list.push(response.list[i]);
25
- }
26
- var data = google.visualization.arrayToDataTable(list);
27
-
28
- var options = {
29
- colorAxis: {colors: ['#4374e0', '#e7711c']} // orange to blue
30
- };
31
- var chart = new google.visualization.GeoChart(
32
- document.getElementById('geo_map')
33
- );
34
- chart.draw(data, options);
35
- },
36
- failure: function() {
37
-
38
- }
39
- });
40
-
41
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
extension/AAM_Secure/javascript/security.js DELETED
@@ -1,48 +0,0 @@
1
- /**
2
- * ======================================================================
3
- * LICENSE: This file is subject to the terms and conditions defined in *
4
- * file 'license.txt', which is part of this source code package. *
5
- * ======================================================================
6
- */
7
-
8
- function AAMSecurity() {
9
-
10
- }
11
-
12
- AAMSecurity.prototype.init = function() {
13
- var _this = this;
14
-
15
- if (jQuery('#country_list').length) {
16
- jQuery('#country_list').dataTable({
17
- sDom: "t",
18
- bAutoWidth: false,
19
- bSort: false,
20
- aoColumnDefs: [
21
- {
22
- sClass: 'center',
23
- aTargets: [1]
24
- }
25
- ]
26
- });
27
- }
28
-
29
- jQuery('.aam-icon', '.large-icons-row').each(function(){
30
- jQuery(this).bind('click', function(){
31
- _this.switchMode(jQuery(this).attr('mode'));
32
- });
33
- });
34
- jQuery('#setting_trigger_inline').bind('click', function(event){
35
- event.preventDefault();
36
- _this.switchMode('settings');
37
- });
38
- };
39
-
40
- AAMSecurity.prototype.switchMode = function(mode) {
41
- jQuery('.mode-container').hide();
42
- jQuery('#' + mode + '_mode').show();
43
- };
44
-
45
- jQuery(document).ready(function() {
46
- var security = new AAMSecurity();
47
- security.init();
48
- });
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
extension/AAM_Secure/security.php DELETED
@@ -1,85 +0,0 @@
1
- <?php
2
-
3
- /**
4
- * ======================================================================
5
- * LICENSE: This file is subject to the terms and conditions defined in *
6
- * file 'license.txt', which is part of this source code package. *
7
- * ======================================================================
8
- */
9
-
10
- /**
11
- *
12
- * @package AAM
13
- * @author Vasyl Martyniuk <support@wpaam.com>
14
- * @copyright Copyright C 2013 Vasyl Martyniuk
15
- * @license GNU General Public License {@link http://www.gnu.org/licenses/}
16
- */
17
- class aam_View_Security extends aam_View_Abstract {
18
-
19
- /**
20
- * Run the Manager
21
- *
22
- * @return string
23
- *
24
- * @access public
25
- */
26
- public function run() {
27
- return $this->loadTemplate(dirname(__FILE__) . '/view/security.phtml');
28
- }
29
-
30
- /**
31
- *
32
- * @return type
33
- */
34
- public function processAjax() {
35
- switch (aam_Core_Request::post('sub_action')) {
36
- case 'map_data':
37
- $response = $this->getMapData();
38
- break;
39
-
40
- default:
41
- $response = json_encode(array('status' => 'failure'));
42
- break;
43
- }
44
-
45
- return $response;
46
- }
47
-
48
- protected function getMapData() {
49
- $stats = aam_Core_API::getBlogOption(
50
- 'aam_security_login_stats', array()
51
- );
52
- $list = array();
53
- foreach($stats as $country => $data){
54
- $list[] = array($country, $data['failed']);
55
- }
56
- return json_encode(
57
- array('list' => $list)
58
- );
59
- }
60
-
61
- /**
62
- *
63
- * @return type
64
- */
65
- public function isGeoLookupOn() {
66
- $geo_lookup = aam_Core_ConfigPress::getParam(
67
- 'security.login.geo_lookup', 'false'
68
- );
69
-
70
- return ($geo_lookup == 'true' ? true : false);
71
- }
72
-
73
- /**
74
- *
75
- * @return type
76
- */
77
- public function isLoginLockoutOn() {
78
- $login_lock = aam_Core_ConfigPress::getParam(
79
- 'security.login.lockout', 'false'
80
- );
81
-
82
- return ($login_lock == 'true' ? true : false);
83
- }
84
-
85
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
extension/AAM_Secure/stylesheet/flags32.css DELETED
@@ -1,260 +0,0 @@
1
- .flag{
2
- display:block;
3
- height:32px;
4
- min-width:32px;
5
- vertical-align: middle;
6
- line-height:32px;
7
- background:url(images/flags32.png) no-repeat 0 center;
8
- padding-left: 36px;
9
- }
10
- ._African_Union{background-position:0 -32px;}
11
- ._Arab_League{background-position:0 -64px;}
12
- ._ASEAN{background-position:0 -96px;}
13
- ._CARICOM{background-position:0 -128px;}
14
- ._CIS{background-position:0 -160px;}
15
- ._Commonwealth{background-position:0 -192px;}
16
- ._England{background-position:0 -224px;}
17
- ._European_Union, .eu{background-position:0 -256px;}
18
- ._Islamic_Conference{background-position:0 -288px;}
19
- ._Kosovo{background-position:0 -320px;}
20
- ._NATO{background-position:0 -352px;}
21
- ._Northern_Cyprus{background-position:0 -384px;}
22
- ._Northern_Ireland{background-position:0 -416px;}
23
- ._Olimpic_Movement{background-position:0 -448px;}
24
- ._OPEC{background-position:0 -480px;}
25
- ._Red_Cross{background-position:0 -512px;}
26
- ._Scotland{background-position:0 -544px;}
27
- ._Somaliland{background-position:0 -576px;}
28
- ._Tibet{background-position:0 -608px;}
29
- ._United_Nations{background-position:0 -640px;}
30
- ._Wales{background-position:0 -672px;}
31
- .ad{background-position:0 -704px;}
32
- .ae{background-position:0 -736px;}
33
- .af{background-position:0 -768px;}
34
- .ag{background-position:0 -800px;}
35
- .ai{background-position:0 -832px;}
36
- .al{background-position:0 -864px;}
37
- .am{background-position:0 -896px;}
38
- .ao{background-position:0 -928px;}
39
- .aq{background-position:0 -960px;}
40
- .ar{background-position:0 -992px;}
41
- .as{background-position:0 -1024px;}
42
- .at{background-position:0 -1056px;}
43
- .au{background-position:0 -1088px;}
44
- .aw{background-position:0 -1120px;}
45
- .ax{background-position:0 -1152px;}
46
- .az{background-position:0 -1184px;}
47
- .ba{background-position:0 -1216px;}
48
- .bb{background-position:0 -1248px;}
49
- .bd{background-position:0 -1280px;}
50
- .be{background-position:0 -1312px;}
51
- .bf{background-position:0 -1344px;}
52
- .bg{background-position:0 -1376px;}
53
- .bh{background-position:0 -1408px;}
54
- .bi{background-position:0 -1440px;}
55
- .bj{background-position:0 -1472px;}
56
- .bm{background-position:0 -1504px;}
57
- .bn{background-position:0 -1536px;}
58
- .bo{background-position:0 -1568px;}
59
- .br{background-position:0 -1600px;}
60
- .bs{background-position:0 -1632px;}
61
- .bt{background-position:0 -1664px;}
62
- .bw{background-position:0 -1696px;}
63
- .by{background-position:0 -1728px;}
64
- .bz{background-position:0 -1760px;}
65
- .ca{background-position:0 -1792px;}
66
- .cd{background-position:0 -1824px;}
67
- .cf{background-position:0 -1856px;}
68
- .cg{background-position:0 -1888px;}
69
- .ch{background-position:0 -1920px;}
70
- .ci{background-position:0 -1952px;}
71
- .ck{background-position:0 -1984px;}
72
- .cl{background-position:0 -2016px;}
73
- .cm{background-position:0 -2048px;}
74
- .cn{background-position:0 -2080px;}
75
- .co{background-position:0 -2112px;}
76
- .cr{background-position:0 -2144px;}
77
- .cu{background-position:0 -2176px;}
78
- .cv{background-position:0 -2208px;}
79
- .cy{background-position:0 -2240px;}
80
- .cz{background-position:0 -2272px;}
81
- .de{background-position:0 -2304px;}
82
- .dj{background-position:0 -2336px;}
83
- .dk{background-position:0 -2368px;}
84
- .dm{background-position:0 -2400px;}
85
- .do{background-position:0 -2432px;}
86
- .dz{background-position:0 -2464px;}
87
- .ec{background-position:0 -2496px;}
88
- .ee{background-position:0 -2528px;}
89
- .eg{background-position:0 -2560px;}
90
- .eh{background-position:0 -2592px;}
91
- .er{background-position:0 -2624px;}
92
- .es{background-position:0 -2656px;}
93
- .et{background-position:0 -2688px;}
94
- .fi{background-position:0 -2720px;}
95
- .fj{background-position:0 -2752px;}
96
- .fm{background-position:0 -2784px;}
97
- .fo{background-position:0 -2816px;}
98
- .fr{background-position:0 -2848px;}
99
- .bl, .cp, .mf, .yt{background-position:0 -2848px;}
100
- .ga{background-position:0 -2880px;}
101
- .gb{background-position:0 -2912px;}
102
- .sh{background-position:0 -2912px;}
103
- .gd{background-position:0 -2944px;}
104
- .ge{background-position:0 -2976px;}
105
- .gg{background-position:0 -3008px;}
106
- .gh{background-position:0 -3040px;}
107
- .gi{background-position:0 -3072px;}
108
- .gl{background-position:0 -3104px;}
109
- .gm{background-position:0 -3136px;}
110
- .gn{background-position:0 -3168px;}
111
- .gp{background-position:0 -3200px;}
112
- .gq{background-position:0 -3232px;}
113
- .gr{background-position:0 -3264px;}
114
- .gt{background-position:0 -3296px;}
115
- .gu{background-position:0 -3328px;}
116
- .gw{background-position:0 -3360px;}
117
- .gy{background-position:0 -3392px;}
118
- .hk{background-position:0 -3424px;}
119
- .hn{background-position:0 -3456px;}
120
- .hr{background-position:0 -3488px;}
121
- .ht{background-position:0 -3520px;}
122
- .hu{background-position:0 -3552px;}
123
- .id{background-position:0 -3584px;}
124
- .mc{background-position:0 -3584px;}
125
- .ie{background-position:0 -3616px;}
126
- .il{background-position:0 -3648px;}
127
- .im{background-position:0 -3680px;}
128
- .in{background-position:0 -3712px;}
129
- .iq{background-position:0 -3744px;}
130
- .ir{background-position:0 -3776px;}
131
- .is{background-position:0 -3808px;}
132
- .it{background-position:0 -3840px;}
133
- .je{background-position:0 -3872px;}
134
- .jm{background-position:0 -3904px;}
135
- .jo{background-position:0 -3936px;}
136
- .jp{background-position:0 -3968px;}
137
- .ke{background-position:0 -4000px;}
138
- .kg{background-position:0 -4032px;}
139
- .kh{background-position:0 -4064px;}
140
- .ki{background-position:0 -4096px;}
141
- .km{background-position:0 -4128px;}
142
- .kn{background-position:0 -4160px;}
143
- .kp{background-position:0 -4192px;}
144
- .kr{background-position:0 -4224px;}
145
- .kw{background-position:0 -4256px;}
146
- .ky{background-position:0 -4288px;}
147
- .kz{background-position:0 -4320px;}
148
- .la{background-position:0 -4352px;}
149
- .lb{background-position:0 -4384px;}
150
- .lc{background-position:0 -4416px;}
151
- .li{background-position:0 -4448px;}
152
- .lk{background-position:0 -4480px;}
153
- .lr{background-position:0 -4512px;}
154
- .ls{background-position:0 -4544px;}
155
- .lt{background-position:0 -4576px;}
156
- .lu{background-position:0 -4608px;}
157
- .lv{background-position:0 -4640px;}
158
- .ly{background-position:0 -4672px;}
159
- .ma{background-position:0 -4704px;}
160
- .md{background-position:0 -4736px;}
161
- .me{background-position:0 -4768px;}
162
- .mg{background-position:0 -4800px;}
163
- .mh{background-position:0 -4832px;}
164
- .mk{background-position:0 -4864px;}
165
- .ml{background-position:0 -4896px;}
166
- .mm{background-position:0 -4928px;}
167
- .mn{background-position:0 -4960px;}
168
- .mo{background-position:0 -4992px;}
169
- .mq{background-position:0 -5024px;}
170
- .mr{background-position:0 -5056px;}
171
- .ms{background-position:0 -5088px;}
172
- .mt{background-position:0 -5120px;}
173
- .mu{background-position:0 -5152px;}
174
- .mv{background-position:0 -5184px;}
175
- .mw{background-position:0 -5216px;}
176
- .mx{background-position:0 -5248px;}
177
- .my{background-position:0 -5280px;}
178
- .mz{background-position:0 -5312px;}
179
- .na{background-position:0 -5344px;}
180
- .nc{background-position:0 -5376px;}
181
- .ne{background-position:0 -5408px;}
182
- .ng{background-position:0 -5440px;}
183
- .ni{background-position:0 -5472px;}
184
- .nl{background-position:0 -5504px;}
185
- .bq{background-position:0 -5504px;}
186
- .no{background-position:0 -5536px;}
187
- .bv, .nq, .sj{background-position:0 -5536px;}
188
- .np{background-position:0 -5568px;}
189
- .nr{background-position:0 -5600px;}
190
- .nz{background-position:0 -5632px;}
191
- .om{background-position:0 -5664px;}
192
- .pa{background-position:0 -5696px;}
193
- .pe{background-position:0 -5728px;}
194
- .pf{background-position:0 -5760px;}
195
- .pg{background-position:0 -5792px;}
196
- .ph{background-position:0 -5824px;}
197
- .pk{background-position:0 -5856px;}
198
- .pl{background-position:0 -5888px;}
199
- .pr{background-position:0 -5920px;}
200
- .ps{background-position:0 -5952px;}
201
- .pt{background-position:0 -5984px;}
202
- .pw{background-position:0 -6016px;}
203
- .py{background-position:0 -6048px;}
204
- .qa{background-position:0 -6080px;}
205
- .re{background-position:0 -6112px;}
206
- .ro{background-position:0 -6144px;}
207
- .rs{background-position:0 -6176px;}
208
- .ru{background-position:0 -6208px;}
209
- .rw{background-position:0 -6240px;}
210
- .sa{background-position:0 -6272px;}
211
- .sb{background-position:0 -6304px;}
212
- .sc{background-position:0 -6336px;}
213
- .sd{background-position:0 -6368px;}
214
- .se{background-position:0 -6400px;}
215
- .sg{background-position:0 -6432px;}
216
- .si{background-position:0 -6464px;}
217
- .sk{background-position:0 -6496px;}
218
- .sl{background-position:0 -6528px;}
219
- .sm{background-position:0 -6560px;}
220
- .sn{background-position:0 -6592px;}
221
- .so{background-position:0 -6624px;}
222
- .sr{background-position:0 -6656px;}
223
- .st{background-position:0 -6688px;}
224
- .sv{background-position:0 -6720px;}
225
- .sy{background-position:0 -6752px;}
226
- .sz{background-position:0 -6784px;}
227
- .tc{background-position:0 -6816px;}
228
- .td{background-position:0 -6848px;}
229
- .tg{background-position:0 -6880px;}
230
- .th{background-position:0 -6912px;}
231
- .tj{background-position:0 -6944px;}
232
- .tl{background-position:0 -6976px;}
233
- .tm{background-position:0 -7008px;}
234
- .tn{background-position:0 -7040px;}
235
- .to{background-position:0 -7072px;}
236
- .tr{background-position:0 -7104px;}
237
- .tt{background-position:0 -7136px;}
238
- .tv{background-position:0 -7168px;}
239
- .tw{background-position:0 -7200px;}
240
- .tz{background-position:0 -7232px;}
241
- .ua{background-position:0 -7264px;}
242
- .ug{background-position:0 -7296px;}
243
- .us{background-position:0 -7328px;}
244
- .uy{background-position:0 -7360px;}
245
- .uz{background-position:0 -7392px;}
246
- .va{background-position:0 -7424px;}
247
- .vc{background-position:0 -7456px;}
248
- .ve{background-position:0 -7488px;}
249
- .vg{background-position:0 -7520px;}
250
- .vi{background-position:0 -7552px;}
251
- .vn{background-position:0 -7584px;}
252
- .vu{background-position:0 -7616px;}
253
- .ws{background-position:0 -7648px;}
254
- .ye{background-position:0 -7680px;}
255
- .za{background-position:0 -7712px;}
256
- .zm{background-position:0 -7744px;}
257
- .zw{background-position:0 -7776px;}
258
- .sx{background-position:0 -7808px;}
259
- .cw{background-position:0 -7840px;}
260
- .ss{background-position:0 -7872px;}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
extension/AAM_Secure/stylesheet/images/deny.png DELETED
Binary file
extension/AAM_Secure/stylesheet/images/flags32.png DELETED
Binary file
extension/AAM_Secure/stylesheet/images/large-iconset.png DELETED
Binary file
extension/AAM_Secure/stylesheet/images/restriction.png DELETED
Binary file
extension/AAM_Secure/stylesheet/security.css DELETED
@@ -1,84 +0,0 @@
1
- /**
2
- * ======================================================================
3
- * LICENSE: This file is subject to the terms and conditions defined in *
4
- * file 'license.txt', which is part of this source code package. *
5
- * ======================================================================
6
- */
7
-
8
- #aam_form{
9
- position: relative;
10
- }
11
-
12
- .clear{
13
- line-height: 0;
14
- font-size: 0;
15
- padding: 0;
16
- margin: 0;
17
- clear: both;
18
- }
19
-
20
- .main-inside{
21
- position: relative;
22
- min-height: 200px;
23
- }
24
-
25
- .aam-main-loader{
26
- position: absolute;
27
- top: 0px;
28
- left: 0px;
29
- width: 100%;
30
- height: 100%;
31
- background: transparent url('images/main-loader.gif') no-repeat center;
32
- }
33
-
34
- .aam-icon-large span {
35
- background-image: url('images/large-iconset.png');
36
- }
37
-
38
- .aam-icon-large-glob span{
39
- background-position: 0 0;
40
- }
41
-
42
- .aam-icon-large-glob:hover span{
43
- background-position: 0 -48px;
44
- }
45
-
46
- .aam-icon-large-settings span{
47
- background-position: -48px 0;
48
- }
49
-
50
- .aam-icon-large-settings:hover span{
51
- background-position: -48px -48px;
52
- }
53
-
54
-
55
- .restriction{
56
- background: transparent url('images/restriction.png') no-repeat center;
57
- }
58
-
59
- .deny{
60
- background: transparent url('images/deny.png') no-repeat center;
61
- }
62
-
63
- .center{
64
- text-align: center;
65
- }
66
-
67
- .feature-off-notice{
68
- width: 90%;
69
- text-align: center;
70
- padding: 10px 0;
71
- font-size: 1.1em;
72
- margin: 5px auto 0 auto;
73
- border: 1px solid #FFAAAA;
74
- }
75
-
76
- .feature-off-notice a{
77
- text-decoration: none;
78
- color: #257DA6;
79
- }
80
-
81
- #settings_mode{
82
- text-align: justify;
83
- padding: 5px 15px;
84
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
extension/AAM_Secure/view/security.phtml DELETED
@@ -1,156 +0,0 @@
1
- <?php
2
- /**
3
- * ======================================================================
4
- * LICENSE: This file is subject to the terms and conditions defined in *
5
- * file 'license.txt', which is part of this source code package. *
6
- * ======================================================================
7
- */
8
- ?>
9
- <div class="wrap">
10
- <div class="postbox-container" style="width:70%;">
11
- <div class="metabox-holder">
12
- <div class="meta-box-sortables">
13
- <div class="postbox">
14
- <div class="handlediv" title="<?php echo __('Click to toggle', 'aam'); ?>"></div>
15
- <h3 class="hndle">
16
- <?php echo __('AAM Security', 'aam'); ?>
17
- </h3>
18
- <div class="inside main-inside">
19
- <div class="mode-container" id="map_mode">
20
- <?php if ($this->isGeoLookupOn()) { ?>
21
- <div id="geo_map" style="width: 100%; height: 500px;"></div>
22
- <?php } else { ?>
23
- <p class="feature-off-notice">
24
- The Geo Lookup feature is off. Turn it on with ConfigPress.<br/>
25
- For more information check <a href="#" id="setting_trigger_inline">Settings</a> tab.
26
- </p>
27
- <?php } ?>
28
- </div>
29
- <div class="mode-container" id="settings_mode" style="display: none;">
30
- <p>
31
- In current version of AAM Security you have to utilize ConfigPress to trigger
32
- certain features. Please find out below the list of all possible ConfigPress
33
- settings:
34
- <pre style="background:#fff;color:#000">
35
- <span style="color:#05a;font-weight: bold;">[security]</span>
36
- <span style="color:#00b418">#Geo Lookup feature monitors the location of the user based on IP address.</span>
37
- <span style="color:#00b418">#By default this feature is deactivated and can be activated by changing.</span>
38
- <span style="color:#00b418">#the <b>false</b> to <b>true</b>.</span>
39
- <span style="color:#0100b6;font-weight:700;">login.geo_lookup</span> = <span style="color:#d80800">"false"</span>
40
- <span style="color:#00b418">#We are using FreeGeoIP.net webservice to retrieve the geo location based on</span>
41
- <span style="color:#00b418">#IP address. Currently this is the only option but we will extend the list of</span>
42
- <span style="color:#00b418">#possible options in future releases.</span>
43
- <span style="color:#0100b6;font-weight:700">login.geoip.service</span> = <span style="color:#d80800">"FreeGeoIP"</span>
44
- <span style="color:#00b418">#Login lockout feature control the admin login process. This prevent your</span>
45
- <span style="color:#00b418">#website from being hacked by trying different password combinations.</span>
46
- <span style="color:#0100b6;font-weight:700">login.lockout</span> = <span style="color:#d80800">"false"</span>
47
- <span style="color:#00b418">#This setting defines how many attempts user has for entering correct password</span>
48
- <span style="color:#00b418">#before the <b>attempt failure</b> procedure fires.</span>
49
- <span style="color:#0100b6;font-weight:700">login.attempts</span> = <span style="color:#d80800">"10"</span>
50
- <span style="color:#00b418">#Attempt failure procedure is fired after user excided the number of attempts</span>
51
- <span style="color:#00b418">#to enter correct password. By default the server starts slowdown the each </span>
52
- <span style="color:#00b418">#new request for 5 seconds. Another possible procedure is <b>die</b>.</span>
53
- <span style="color:#00b418">#In this case the login process is completely locked for user's IP address.</span>
54
- <span style="color:#0100b6;font-weight:700">login.attempt_failure</span> = <span style="color:#d80800">"slowdown"</span>
55
- <span style="color:#00b418">#By default every new login request slows down for 5 seconds.</span>
56
- <span style="color:#0100b6;font-weight:700">login.slowdown_time</span> = <span style="color:#d80800">"5"</span>
57
- <span style="color:#00b418">#If <b>attempt failure</b> procedure is <b>die</b>, you can define your own</span>
58
- <span style="color:#00b418">#custom message that will be shown for locked user.</span>
59
- <span style="color:#0100b6;font-weight:700">login.die_message</span> = <span style="color:#d80800">"You are not allowed to login"</span>
60
- <span style="color:#00b418">#To speedup the lookup and lockout feature, all IP addresses are cached to database.</span>
61
- <span style="color:#00b418">#By default AAM caches up to 1000 records.</span>
62
- <span style="color:#0100b6;font-weight:700">login.cache_limit</span> = <span style="color:#d80800">"1000"</span>
63
- </pre>
64
- </p>
65
- <p style="font-size: 0.9em;">
66
- AAM Security is very new but expecting to be one of the biggest features
67
- in AAM plugin. Currently it can be considered on development stage so some of
68
- the features might not work the way you expect.<br/>
69
- We are expecting feedback and recommendations from you how to expend and improve
70
- AAM Security feature. Please send your thoughts to our email box
71
- <a href="mailto:support@wpaam.com">support@wpaam.com</a>.
72
- </p>
73
- </div>
74
- </div>
75
- </div>
76
- </div>
77
- </div>
78
- </div>
79
-
80
- <?php if (aam_Core_Console::hasIssues()) { ?>
81
- <div class="postbox-container" style="width:25%; margin-left: 2%;">
82
- <div class="metabox-holder">
83
- <div class="meta-box-sortables">
84
- <div class="postbox">
85
- <div class="handlediv" title="<?php echo __('Click to toggle', 'aam'); ?>"></div>
86
- <h3 class="hndle">
87
- <span><?php echo __('AAM Warnings', 'aam'); ?></span>
88
- </h3>
89
- <div class="inside">
90
- <?php foreach (aam_Core_Console::getWarnings() as $warning) { ?>
91
- <div class="aam-warning"><span><?php echo $warning; ?></span></div>
92
- <?php } ?>
93
- </div>
94
- </div>
95
- </div>
96
- </div>
97
- </div>
98
- <?php } ?>
99
-
100
- <div class="postbox-container" style="width:25%; margin-left: 2%;">
101
- <div class="metabox-holder" id="control_panel">
102
- <div class="meta-box-sortables">
103
- <div class="postbox">
104
- <div class="handlediv" title="<?php echo __('Click to toggle', 'aam'); ?>"></div>
105
- <h3 class="hndle">
106
- <span><?php echo __('Control Panel', 'aam'); ?></span>
107
- </h3>
108
- <div class="inside">
109
- <div class="large-icons-row">
110
- <a href="#" class="aam-icon aam-icon-large aam-icon-large-glob" mode="map">
111
- <span></span><?php echo __('Map', 'aam'); ?>
112
- </a>
113
- <!--<a href="#" class="cpanel-item cpanel-item-graph" ><?php echo __('Graph', 'aam'); ?></a>-->
114
- <a href="#" class="aam-icon aam-icon-large aam-icon-large-settings" mode="settings" >
115
- <span></span><?php echo __('Settings', 'aam'); ?>
116
- </a>
117
- </div>
118
- <div class="medium-icons-row">
119
- <a href="https://twitter.com/wpaam" target="_blank" class="aam-icon aam-icon-medium aam-icon-medium-twitter" aam-tooltip="<?php echo __('Follow @wpaam', 'aam'); ?>"><span></span><?php echo __('Follow', 'aam'); ?></a>
120
- <a href="http://wpaam.com/support" target="_blank" class="aam-icon aam-icon-medium aam-icon-medium-help" aam-tooltip="<?php echo __('Help Forum', 'aam'); ?>"><span></span><?php echo __('Help', 'aam'); ?></a>
121
- <a href="#" class="aam-icon aam-icon-medium aam-icon-medium-message" id="aam_message" aam-tooltip="<?php echo __('E-mail Us', 'aam'); ?>"><span></span><?php echo __('E-mail Us', 'aam'); ?></a>
122
- <a href="http://wordpress.org/support/view/plugin-reviews/advanced-access-manager" target="_blank" class="aam-icon aam-icon-medium aam-icon-medium-star" aam-tooltip="<?php echo __('Rate AAM', 'aam'); ?>"><span></span><?php echo __('Rate Us', 'aam'); ?></a>
123
- </div>
124
- </div>
125
- </div>
126
- </div>
127
- </div>
128
- </div>
129
- <?php if (false && $this->isGeoLookupOn()) { ?>
130
- <div class="postbox-container" style="width:25%; margin-left: 2%;">
131
- <div class="metabox-holder">
132
- <div class="meta-box-sortables">
133
- <div class="postbox">
134
- <div class="handlediv" title="<?php echo __('Click to toggle', 'aam'); ?>"></div>
135
- <h3 class="hndle">
136
- <span><?php echo __('Country Impact List', 'aam'); ?></span>
137
- </h3>
138
- <div class="inside">
139
- <table class="dataTable" id="country_list">
140
- <thead>
141
- <tr>
142
- <th width="80%">Country</th>
143
- <th>Action</th>
144
- </tr>
145
- </thead>
146
- <tbody>
147
- </tbody>
148
- </table>
149
- </div>
150
- </div>
151
- </div>
152
- </div>
153
- </div>
154
- <?php } ?>
155
- <br class="clear" />
156
- </div>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
lang/aam-de_DE.mo DELETED
Binary file
lang/aam-de_DE.po DELETED
@@ -1,336 +0,0 @@
1
- msgid ""
2
- msgstr ""
3
- "Project-Id-Version: AAM\n"
4
- "POT-Creation-Date: 2013-12-01 14:07-0500\n"
5
- "PO-Revision-Date: 2014-01-02 21:40-0500\n"
6
- "Last-Translator: Vasyl Martyniuk <scarab.regit@gmail.com>\n"
7
- "Language-Team: WPAAM <support@wpaam.com>\n"
8
- "MIME-Version: 1.0\n"
9
- "Content-Type: text/plain; charset=UTF-8\n"
10
- "Content-Transfer-Encoding: 8bit\n"
11
- "X-Generator: Poedit 1.6.3\n"
12
- "Plural-Forms: nplurals=2; plural=(n != 1);\n"
13
- "Language: de_DE\n"
14
-
15
- #: aam.php:243 aam.php:248 aam.php:267
16
- msgid "Access denied"
17
- msgstr "Zugriff verweigert"
18
-
19
- #: aam.php:691 aam.php:692
20
- msgid "AAM"
21
- msgstr "AAM"
22
-
23
- #: aam.php:701 aam.php:702
24
- msgid "Access Control"
25
- msgstr "Zugangs Kontrolle"
26
-
27
- #: aam.php:709 aam.php:710
28
- msgid "Extensions"
29
- msgstr "Erweiterungen"
30
-
31
- #: application/view/capability.php:98 application/view/capability.php:179
32
- msgid "System"
33
- msgstr "System"
34
-
35
- #: application/view/capability.php:99 application/view/capability.php:181
36
- msgid "Post & Page"
37
- msgstr "Artikel & Seiten"
38
-
39
- #: application/view/capability.php:100 application/view/capability.php:183
40
- msgid "Backend Interface"
41
- msgstr "Backend Interface"
42
-
43
- #: application/view/capability.php:101
44
- msgid "Miscellaneous"
45
- msgstr "Diverses"
46
-
47
- #: application/view/capability.php:185
48
- msgid "Miscelaneous"
49
- msgstr "Diverses"
50
-
51
- #: application/view/manager.php:59
52
- msgid "Roles"
53
- msgstr "Rollen"
54
-
55
- #: application/view/manager.php:60
56
- msgid "Role Manager"
57
- msgstr "Rollen Manager"
58
-
59
- #: application/view/manager.php:68
60
- msgid "Users"
61
- msgstr "Benutzer"
62
-
63
- #: application/view/manager.php:69
64
- msgid "User Manager"
65
- msgstr "Benutzer Manager"
66
-
67
- #: application/view/manager.php:77
68
- msgid "Visitor"
69
- msgstr "Besucher"
70
-
71
- #: application/view/manager.php:78
72
- msgid "Visitor Manager"
73
- msgstr "Besucher Manager"
74
-
75
- #: application/view/manager.php:95
76
- msgid "Admin Menu"
77
- msgstr "Admin Menü"
78
-
79
- #: application/view/manager.php:98
80
- msgid ""
81
- "Control Access to Admin Menu. Restrict access to entire Menu or Submenu. "
82
- "<b>Notice</b>, the menu is rendered based on Role's or User's capabilities."
83
- msgstr ""
84
- "Zugangskontrolle für das Admin Menü. Zugangs Beschränkung das vollständige "
85
- "Menü oder Untermenüs . <b>Anmerkung</b>, das Menü wird aufgrund der "
86
- "Benutzer- oder Rolleneigenschaften erstellt."
87
-
88
- #: application/view/manager.php:103
89
- msgid "Metabox & Widget"
90
- msgstr "Metabox & Widgets"
91
-
92
- #: application/view/manager.php:106
93
- msgid ""
94
- "Filter the list of Metaboxes or Widgets for selected Role or User. If "
95
- "metabox or widget is not listed, try to click <b>Refresh the List</b> button "
96
- "or Copy & Paste direct link to page where specific metabox or widget is "
97
- "shown and hit <b>Retrieve Metaboxes from Link</b> button."
98
- msgstr ""
99
- "Sortiere nach den Metaboxen oder Widgets der ausgewählten Rolle oder des "
100
- "Benutzers. Wenn eine Metabox oder ein Widget nicht angezeigt wird, klicke "
101
- "auf <b>Refresh the List</b> oder kopiere den direkten Link zu der Site wo "
102
- "die Metabox oder das Widget angezeigt werden und klicke <b>Retrieve "
103
- "Metaboxes from Link</b> ."
104
-
105
- #: application/view/manager.php:111
106
- msgid "Capability"
107
- msgstr "Eigenschaft"
108
-
109
- #: application/view/manager.php:114
110
- msgid ""
111
- "Manage the list of Capabilities for selected User or Role. <b>Notice</b>, "
112
- "list of user's capabilities are inherited from user's Role.<br/><b>Warning!</"
113
- "b> Be very careful with capabilities. Deleting or unchecking any capability "
114
- "may cause temporary or permanent constrol lost over some features or "
115
- "WordPress dashboard."
116
- msgstr ""
117
- "Verwalte die Eigenschaften für die ausgewählte Rolle oder den Benutzer. "
118
- "<b>Anmerkung</b>, die Eigenschafen der Benutzer werden von der Benutzerrolle "
119
- "vererbt.<br/><b>Achtung!</b>, sei vorsichtig mit den Eigenschaften. Das "
120
- "Löschen oder das Abwählen von Eigenschaften kann zeitweisen oder dauerhaften "
121
- "Verlust von Funktionen verursachen."
122
-
123
- #: application/view/manager.php:119
124
- msgid "Posts & Categories"
125
- msgstr "Artikel & Kategorien"
126
-
127
- #: application/view/manager.php:122
128
- msgid ""
129
- "Manage access to individual <b>Post</b> or <b>Term</b>. Notice, under "
130
- "<b>Post</b>, we assume any post, page or custom post type. And under "
131
- "<b>Term</b> - any term like Post Categories."
132
- msgstr ""
133
- "Verwalte den Zugang zu einzelnen <b>Artikeln</b> oder <b>Ebenen<b/> Unter "
134
- "<b>Artikeln</b> werden alle Artikel, Seiten oder custom post type und unter "
135
- "<b>Ebenen<b/> z.B. Kategorien verstanden."
136
-
137
- #: application/view/manager.php:127
138
- msgid "Event Manager"
139
- msgstr "Event Manager"
140
-
141
- #: application/view/manager.php:130
142
- msgid ""
143
- "Define your own action when some event appeared in your WordPress blog. This "
144
- "sections allows you to trigger an action on event like post content change, "
145
- "or page status update. You can setup to send email notification, change the "
146
- "post status or write your own custom event handler."
147
- msgstr ""
148
- "Definiere deine eigene Aktion, wenn ein Bestimmtes Ereignis auf deinem Blog "
149
- "eintritt. Diese Auswahl erlaubt dir automatisch eine Aktion auszulösen, wenn "
150
- "sich der Inhalt eines Artikels oder der Seitenstatus geändert haben. Du "
151
- "kannst Email Benachichtugungen senden, den Artikel Status ändern oder eigene "
152
- "Ereignisse beschreiben."
153
-
154
- #: application/view/manager.php:135
155
- msgid "ConfigPress"
156
- msgstr "ConfigPress"
157
-
158
- #: application/view/manager.php:138
159
- msgid ""
160
- "Control <b>AAM</b> behavior with ConfigPress. For more details please check "
161
- "<b>ConfigPress tutorial</b>."
162
- msgstr ""
163
- "Kontrolliere das Verhalten von <b>AAM</b> mit ConfigPress Für mehr Details "
164
- "schaue bitte ins <b>ConfigPress Tutorial</b>."
165
-
166
- #: application/view/manager.php:342
167
- msgid "Rollback Settings"
168
- msgstr "Wiederholungseinstellungen"
169
-
170
- #: application/view/manager.php:343
171
- msgid "Cancel"
172
- msgstr "Abbrechen"
173
-
174
- #: application/view/manager.php:344
175
- msgid "Send E-mail"
176
- msgstr "E-Mail senden"
177
-
178
- #: application/view/manager.php:345 application/view/manager.php:351
179
- msgid "Add New Role"
180
- msgstr "Neue Rolle hinzufügen"
181
-
182
- #: application/view/manager.php:346
183
- msgid "Manage"
184
- msgstr "Verwalten"
185
-
186
- #: application/view/manager.php:347
187
- msgid "Edit"
188
- msgstr "Bearbeiten"
189
-
190
- #: application/view/manager.php:348
191
- msgid "Delete"
192
- msgstr "Löschen"
193
-
194
- #: application/view/manager.php:349
195
- msgid "Filtered"
196
- msgstr "Sortieren"
197
-
198
- #: application/view/manager.php:350
199
- msgid "Clear"
200
- msgstr "Leeren"
201
-
202
- #: application/view/manager.php:352
203
- msgid "Save Changes"
204
- msgstr "Änderungen speichern"
205
-
206
- #: application/view/manager.php:353
207
- #, php-format
208
- msgid ""
209
- "System detected %d user(s) with this role. All Users with Role <b>%s</b> "
210
- "will be deleted automatically!"
211
- msgstr ""
212
- "Das System hat %d Benutzer mit dieser Rolle identifiziert. Alle Benutzer mit "
213
- "der Rolle <b>%s</b> werden automatisch gelöscht."
214
-
215
- #: application/view/manager.php:354
216
- #, php-format
217
- msgid "Are you sure that you want to delete role <b>%s</b>?"
218
- msgstr "Bist du sicher, dass du die Rolle <b>%s</b> löschen möchtest?"
219
-
220
- #: application/view/manager.php:355
221
- msgid "Delete Role"
222
- msgstr "Rolle löschen"
223
-
224
- #: application/view/manager.php:356
225
- msgid "Add User"
226
- msgstr "Benutzer hinzufügen"
227
-
228
- #: application/view/manager.php:357
229
- msgid "Filter Users"
230
- msgstr "Benutzer sortieren"
231
-
232
- #: application/view/manager.php:358 application/view/manager.php:374
233
- msgid "Refresh List"
234
- msgstr "Liste aktualisieren"
235
-
236
- #: application/view/manager.php:359
237
- msgid "Block"
238
- msgstr "Block"
239
-
240
- #: application/view/manager.php:360
241
- #, php-format
242
- msgid "Are you sure you want to delete user <b>%s</b>?"
243
- msgstr "Bist du sicher, dass du den Benutzer <b>%s</b> löschen möchtest?"
244
-
245
- #: application/view/manager.php:361
246
- msgid "Filter Capabilities by Category"
247
- msgstr "Sortiere die Eigenschaften nach der Kategorie"
248
-
249
- #: application/view/manager.php:362
250
- msgid "Inherit Capabilities"
251
- msgstr "Vererbe Eigenschaften"
252
-
253
- #: application/view/manager.php:363
254
- msgid "Add New Capability"
255
- msgstr "Neue Eigenschaft hinzufügen"
256
-
257
- #: application/view/manager.php:364
258
- #, php-format
259
- msgid "Are you sure that you want to delete capability <b>%s</b>?"
260
- msgstr "Bist du sicher, dass du die Eigenschaft <b>%s</b> löschen möchtest?"
261
-
262
- #: application/view/manager.php:365
263
- msgid "Delete Capability"
264
- msgstr "Eigenschaft löschen"
265
-
266
- #: application/view/manager.php:366
267
- msgid "Select Role"
268
- msgstr "Rolle auswählen"
269
-
270
- #: application/view/manager.php:367
271
- msgid "Add Capability"
272
- msgstr "Eigenschaft hinzufügen"
273
-
274
- #: application/view/manager.php:368
275
- msgid "Add Event"
276
- msgstr "Event hinzufügen"
277
-
278
- #: application/view/manager.php:369
279
- msgid "Edit Event"
280
- msgstr "Event bearbeiten"
281
-
282
- #: application/view/manager.php:370 application/view/manager.php:372
283
- msgid "Delete Event"
284
- msgstr "Event löschen"
285
-
286
- #: application/view/manager.php:371
287
- msgid "Save Event"
288
- msgstr "Event speichern"
289
-
290
- #: application/view/manager.php:373
291
- msgid "Filter Posts by Post Type"
292
- msgstr "Sortiere Artikel nach Artikel Typ"
293
-
294
- #: application/view/manager.php:375
295
- msgid "Restore Default"
296
- msgstr "Standard wiederherstellen"
297
-
298
- #: application/view/manager.php:376
299
- msgid "Apply"
300
- msgstr "Zustimmen"
301
-
302
- #: application/view/manager.php:377
303
- msgid "Edit Term"
304
- msgstr "Ebene bearbeiten"
305
-
306
- #: application/view/manager.php:378
307
- msgid "Manager Access"
308
- msgstr "Zugangs Verwaltung"
309
-
310
- #: application/view/manager.php:379
311
- msgid "Unlock Default Accesss Control"
312
- msgstr "Öffne Standard Zugangs Kontrolle"
313
-
314
- #: application/view/manager.php:380
315
- msgid "Close"
316
- msgstr "Schließen"
317
-
318
- #: application/view/manager.php:381
319
- msgid "Edit Role"
320
- msgstr "Rolle bearbeiten"
321
-
322
- #: application/view/metabox.php:179
323
- msgid "Dashboard Widgets"
324
- msgstr "Dashboard Widgets"
325
-
326
- #: application/view/metabox.php:183
327
- msgid "Frontend Widgets"
328
- msgstr "Frontend Widgets"
329
-
330
- #: application/view/post.php:181
331
- msgid "[empty]"
332
- msgstr "[leer]"
333
-
334
- #: application/view/post.php:345 application/view/post.php:353
335
- msgid "All"
336
- msgstr ""
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
lang/aam-en_US.mo DELETED
Binary file
lang/aam-en_US.po DELETED
@@ -1,310 +0,0 @@
1
- msgid ""
2
- msgstr ""
3
- "Project-Id-Version: AAM\n"
4
- "POT-Creation-Date: 2013-12-01 14:07-0500\n"
5
- "PO-Revision-Date: 2014-01-02 21:40-0500\n"
6
- "Last-Translator: Vasyl Martyniuk <scarab.regit@gmail.com>\n"
7
- "Language-Team: WPAAM <support@wpaam.com>\n"
8
- "MIME-Version: 1.0\n"
9
- "Content-Type: text/plain; charset=UTF-8\n"
10
- "Content-Transfer-Encoding: 8bit\n"
11
- "Language: en_US\n"
12
- "X-Generator: Poedit 1.6.3\n"
13
-
14
- #: aam.php:243 aam.php:248 aam.php:267
15
- msgid "Access denied"
16
- msgstr ""
17
-
18
- #: aam.php:691 aam.php:692
19
- msgid "AAM"
20
- msgstr ""
21
-
22
- #: aam.php:701 aam.php:702
23
- msgid "Access Control"
24
- msgstr ""
25
-
26
- #: aam.php:709 aam.php:710
27
- msgid "Extensions"
28
- msgstr ""
29
-
30
- #: application/view/capability.php:98 application/view/capability.php:179
31
- msgid "System"
32
- msgstr ""
33
-
34
- #: application/view/capability.php:99 application/view/capability.php:181
35
- msgid "Post & Page"
36
- msgstr ""
37
-
38
- #: application/view/capability.php:100 application/view/capability.php:183
39
- msgid "Backend Interface"
40
- msgstr ""
41
-
42
- #: application/view/capability.php:101
43
- msgid "Miscellaneous"
44
- msgstr ""
45
-
46
- #: application/view/capability.php:185
47
- msgid "Miscelaneous"
48
- msgstr ""
49
-
50
- #: application/view/manager.php:59
51
- msgid "Roles"
52
- msgstr ""
53
-
54
- #: application/view/manager.php:60
55
- msgid "Role Manager"
56
- msgstr ""
57
-
58
- #: application/view/manager.php:68
59
- msgid "Users"
60
- msgstr ""
61
-
62
- #: application/view/manager.php:69
63
- msgid "User Manager"
64
- msgstr ""
65
-
66
- #: application/view/manager.php:77
67
- msgid "Visitor"
68
- msgstr ""
69
-
70
- #: application/view/manager.php:78
71
- msgid "Visitor Manager"
72
- msgstr ""
73
-
74
- #: application/view/manager.php:95
75
- msgid "Admin Menu"
76
- msgstr ""
77
-
78
- #: application/view/manager.php:98
79
- msgid ""
80
- "Control Access to Admin Menu. Restrict access to entire Menu or Submenu. "
81
- "<b>Notice</b>, the menu is rendered based on Role's or User's capabilities."
82
- msgstr ""
83
-
84
- #: application/view/manager.php:103
85
- msgid "Metabox & Widget"
86
- msgstr ""
87
-
88
- #: application/view/manager.php:106
89
- msgid ""
90
- "Filter the list of Metaboxes or Widgets for selected Role or User. If "
91
- "metabox or widget is not listed, try to click <b>Refresh the List</b> button "
92
- "or Copy & Paste direct link to page where specific metabox or widget is "
93
- "shown and hit <b>Retrieve Metaboxes from Link</b> button."
94
- msgstr ""
95
-
96
- #: application/view/manager.php:111
97
- msgid "Capability"
98
- msgstr ""
99
-
100
- #: application/view/manager.php:114
101
- msgid ""
102
- "Manage the list of Capabilities for selected User or Role. <b>Notice</b>, "
103
- "list of user's capabilities are inherited from user's Role.<br/><b>Warning!</"
104
- "b> Be very careful with capabilities. Deleting or unchecking any capability "
105
- "may cause temporary or permanent constrol lost over some features or "
106
- "WordPress dashboard."
107
- msgstr ""
108
-
109
- #: application/view/manager.php:119
110
- msgid "Posts & Categories"
111
- msgstr ""
112
-
113
- #: application/view/manager.php:122
114
- msgid ""
115
- "Manage access to individual <b>Post</b> or <b>Term</b>. Notice, under "
116
- "<b>Post</b>, we assume any post, page or custom post type. And under "
117
- "<b>Term</b> - any term like Post Categories."
118
- msgstr ""
119
-
120
- #: application/view/manager.php:127
121
- msgid "Event Manager"
122
- msgstr ""
123
-
124
- #: application/view/manager.php:130
125
- msgid ""
126
- "Define your own action when some event appeared in your WordPress blog. This "
127
- "sections allows you to trigger an action on event like post content change, "
128
- "or page status update. You can setup to send email notification, change the "
129
- "post status or write your own custom event handler."
130
- msgstr ""
131
-
132
- #: application/view/manager.php:135
133
- msgid "ConfigPress"
134
- msgstr ""
135
-
136
- #: application/view/manager.php:138
137
- msgid ""
138
- "Control <b>AAM</b> behavior with ConfigPress. For more details please check "
139
- "<b>ConfigPress tutorial</b>."
140
- msgstr ""
141
-
142
- #: application/view/manager.php:342
143
- msgid "Rollback Settings"
144
- msgstr ""
145
-
146
- #: application/view/manager.php:343
147
- msgid "Cancel"
148
- msgstr ""
149
-
150
- #: application/view/manager.php:344
151
- msgid "Send E-mail"
152
- msgstr ""
153
-
154
- #: application/view/manager.php:345 application/view/manager.php:351
155
- msgid "Add New Role"
156
- msgstr ""
157
-
158
- #: application/view/manager.php:346
159
- msgid "Manage"
160
- msgstr ""
161
-
162
- #: application/view/manager.php:347
163
- msgid "Edit"
164
- msgstr ""
165
-
166
- #: application/view/manager.php:348
167
- msgid "Delete"
168
- msgstr ""
169
-
170
- #: application/view/manager.php:349
171
- msgid "Filtered"
172
- msgstr ""
173
-
174
- #: application/view/manager.php:350
175
- msgid "Clear"
176
- msgstr ""
177
-
178
- #: application/view/manager.php:352
179
- msgid "Save Changes"
180
- msgstr ""
181
-
182
- #: application/view/manager.php:353
183
- #, php-format
184
- msgid ""
185
- "System detected %d user(s) with this role. All Users with Role <b>%s</b> "
186
- "will be deleted automatically!"
187
- msgstr ""
188
-
189
- #: application/view/manager.php:354
190
- #, php-format
191
- msgid "Are you sure that you want to delete role <b>%s</b>?"
192
- msgstr ""
193
-
194
- #: application/view/manager.php:355
195
- msgid "Delete Role"
196
- msgstr ""
197
-
198
- #: application/view/manager.php:356
199
- msgid "Add User"
200
- msgstr ""
201
-
202
- #: application/view/manager.php:357
203
- msgid "Filter Users"
204
- msgstr ""
205
-
206
- #: application/view/manager.php:358 application/view/manager.php:374
207
- msgid "Refresh List"
208
- msgstr ""
209
-
210
- #: application/view/manager.php:359
211
- msgid "Block"
212
- msgstr ""
213
-
214
- #: application/view/manager.php:360
215
- #, php-format
216
- msgid "Are you sure you want to delete user <b>%s</b>?"
217
- msgstr ""
218
-
219
- #: application/view/manager.php:361
220
- msgid "Filter Capabilities by Category"
221
- msgstr ""
222
-
223
- #: application/view/manager.php:362
224
- msgid "Inherit Capabilities"
225
- msgstr ""
226
-
227
- #: application/view/manager.php:363
228
- msgid "Add New Capability"
229
- msgstr ""
230
-
231
- #: application/view/manager.php:364
232
- #, php-format
233
- msgid "Are you sure that you want to delete capability <b>%s</b>?"
234
- msgstr ""
235
-
236
- #: application/view/manager.php:365
237
- msgid "Delete Capability"
238
- msgstr ""
239
-
240
- #: application/view/manager.php:366
241
- msgid "Select Role"
242
- msgstr ""
243
-
244
- #: application/view/manager.php:367
245
- msgid "Add Capability"
246
- msgstr ""
247
-
248
- #: application/view/manager.php:368
249
- msgid "Add Event"
250
- msgstr ""
251
-
252
- #: application/view/manager.php:369
253
- msgid "Edit Event"
254
- msgstr ""
255
-
256
- #: application/view/manager.php:370 application/view/manager.php:372
257
- msgid "Delete Event"
258
- msgstr ""
259
-
260
- #: application/view/manager.php:371
261
- msgid "Save Event"
262
- msgstr ""
263
-
264
- #: application/view/manager.php:373
265
- msgid "Filter Posts by Post Type"
266
- msgstr ""
267
-
268
- #: application/view/manager.php:375
269
- msgid "Restore Default"
270
- msgstr ""
271
-
272
- #: application/view/manager.php:376
273
- msgid "Apply"
274
- msgstr ""
275
-
276
- #: application/view/manager.php:377
277
- msgid "Edit Term"
278
- msgstr ""
279
-
280
- #: application/view/manager.php:378
281
- msgid "Manager Access"
282
- msgstr ""
283
-
284
- #: application/view/manager.php:379
285
- msgid "Unlock Default Accesss Control"
286
- msgstr ""
287
-
288
- #: application/view/manager.php:380
289
- msgid "Close"
290
- msgstr ""
291
-
292
- #: application/view/manager.php:381
293
- msgid "Edit Role"
294
- msgstr ""
295
-
296
- #: application/view/metabox.php:179
297
- msgid "Dashboard Widgets"
298
- msgstr ""
299
-
300
- #: application/view/metabox.php:183
301
- msgid "Frontend Widgets"
302
- msgstr ""
303
-
304
- #: application/view/post.php:181
305
- msgid "[empty]"
306
- msgstr ""
307
-
308
- #: application/view/post.php:345 application/view/post.php:353
309
- msgid "All"
310
- msgstr ""
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
lang/aam-es_ES.mo DELETED
Binary file
lang/aam-es_ES.po DELETED
@@ -1,998 +0,0 @@
1
- msgid ""
2
- msgstr ""
3
- "Project-Id-Version: Advanced Access Manager\n"
4
- "Report-Msgid-Bugs-To: \n"
5
- "POT-Creation-Date: 2013-12-01 14:07-0500\n"
6
- "PO-Revision-Date: 2014-01-03 18:30-0300\n"
7
- "Last-Translator: Esteban Truelsegaard <esteban@netmdp.com>\n"
8
- "Language-Team: Vasyl Martyniuk <whimba@gmail.com>\n"
9
- "Language: en\n"
10
- "MIME-Version: 1.0\n"
11
- "Content-Type: text/plain; charset=UTF-8\n"
12
- "Content-Transfer-Encoding: 8bit\n"
13
- "X-Poedit-KeywordsList: _;gettext;gettext_noop;__\n"
14
- "X-Generator: Poedit 1.5.7\n"
15
- "X-Poedit-SearchPath-0: .\n"
16
-
17
- #: aam.php:243 aam.php:248 aam.php:267
18
- msgid "Access denied"
19
- msgstr "Acceso Denegado"
20
-
21
- #: aam.php:691 aam.php:692
22
- msgid "AAM"
23
- msgstr "Permisos AAM"
24
-
25
- #: aam.php:701 aam.php:702
26
- msgid "Access Control"
27
- msgstr "Control de Accesos"
28
-
29
- #: aam.php:709 aam.php:710
30
- msgid "Extensions"
31
- msgstr "Extensiones"
32
-
33
- #: application/view/capability.php:98 application/view/capability.php:179
34
- msgid "System"
35
- msgstr "Sistema"
36
-
37
- #: application/view/capability.php:99 application/view/capability.php:181
38
- msgid "Post & Page"
39
- msgstr "Entrada & Página"
40
-
41
- #: application/view/capability.php:100 application/view/capability.php:183
42
- msgid "Backend Interface"
43
- msgstr "Backend Interface"
44
-
45
- #: application/view/capability.php:101
46
- msgid "Miscellaneous"
47
- msgstr "Misceláneo"
48
-
49
- #: application/view/capability.php:185
50
- msgid "Miscelaneous"
51
- msgstr "Misceláneo"
52
-
53
- #: application/view/manager.php:59
54
- msgid "Roles"
55
- msgstr "Roles"
56
-
57
- #: application/view/manager.php:60
58
- msgid "Role Manager"
59
- msgstr "Administrar Roles"
60
-
61
- #: application/view/manager.php:68
62
- msgid "Users"
63
- msgstr "Usuarios"
64
-
65
- #: application/view/manager.php:69
66
- msgid "User Manager"
67
- msgstr "Administrar Usuario"
68
-
69
- #: application/view/manager.php:77
70
- msgid "Visitor"
71
- msgstr "Visita"
72
-
73
- #: application/view/manager.php:78
74
- msgid "Visitor Manager"
75
- msgstr "Administrar Visitas"
76
-
77
- #: application/view/manager.php:95
78
- msgid "Admin Menu"
79
- msgstr "Menú principal"
80
-
81
- #: application/view/manager.php:98
82
- msgid ""
83
- "Control Access to Admin Menu. Restrict access to entire Menu or Submenu. "
84
- "<b>Notice</b>, the menu is rendered based on Role's or User's capabilities."
85
- msgstr ""
86
- "Control de Accesos al Menu Admin. Restringe accesos a todo el Menú o por "
87
- "Submenú. <b>Nota</b>, el menú es mostrado basado en el Rol o capabilities "
88
- "del Usuario."
89
-
90
- #: application/view/manager.php:103
91
- msgid "Metabox & Widget"
92
- msgstr "Metabox & Widget"
93
-
94
- #: application/view/manager.php:106
95
- msgid ""
96
- "Filter the list of Metaboxes or Widgets for selected Role or User. If "
97
- "metabox or widget is not listed, try to click <b>Refresh the List</b> button "
98
- "or Copy & Paste direct link to page where specific metabox or widget is "
99
- "shown and hit <b>Retrieve Metaboxes from Link</b> button."
100
- msgstr ""
101
- "Filtrar lista de Metaboxes o Widgets para el Rol o Usuario seleccionado. Si "
102
- "el metabox o widget no está listado, intente clickeando el botón "
103
- "<b>Actualizar Lista</b> o Copie & Pegue el link directo a la página donde se "
104
- "muestra el metabox o widget y toque el botón <b>Recuperar Metaboxes desde "
105
- "link</b>."
106
-
107
- #: application/view/manager.php:111
108
- msgid "Capability"
109
- msgstr "Capability"
110
-
111
- #: application/view/manager.php:114
112
- msgid ""
113
- "Manage the list of Capabilities for selected User or Role. <b>Notice</b>, "
114
- "list of user's capabilities are inherited from user's Role.<br/><b>Warning!</"
115
- "b> Be very careful with capabilities. Deleting or unchecking any capability "
116
- "may cause temporary or permanent constrol lost over some features or "
117
- "WordPress dashboard."
118
- msgstr ""
119
- "Administrar lista de Capabilities para el Usuario o Rol seleccionado. "
120
- "<b>Nota</b>, la lista de capacidades se heredan del Rol de usuario. <br/"
121
- "><b>Cuidado!</b> Sea cuidadoso con las capacidades. Borrar o desmarcar una "
122
- "capability puede causar perdida de control temporal o permanente sobre "
123
- "alguna característica o el panel de Wordpress."
124
-
125
- #: application/view/manager.php:119
126
- msgid "Posts & Categories"
127
- msgstr "Entradas & Taxonomias"
128
-
129
- #: application/view/manager.php:122
130
- msgid ""
131
- "Manage access to individual <b>Post</b> or <b>Term</b>. Notice, under "
132
- "<b>Post</b>, we assume any post, page or custom post type. And under "
133
- "<b>Term</b> - any term like Post Categories."
134
- msgstr ""
135
- "Administrar acceso sobre <b>Entrada</b> o <b>Taxonomía</b> individual. Nota, "
136
- "bajo <b>Entrada</b>, se asume cualquier post, página o custom post type. Y "
137
- "bajo <b>Taxonomía</b>, cualquier término como Categorías de Entradas."
138
-
139
- #: application/view/manager.php:127
140
- msgid "Event Manager"
141
- msgstr "Administrar Eventos"
142
-
143
- #: application/view/manager.php:130
144
- msgid ""
145
- "Define your own action when some event appeared in your WordPress blog. This "
146
- "sections allows you to trigger an action on event like post content change, "
147
- "or page status update. You can setup to send email notification, change the "
148
- "post status or write your own custom event handler."
149
- msgstr ""
150
- "Define su propia acción cuando ocurre algún evento en su blog. Esta sección "
151
- "le permite agregar una acción a un evento como cambio de contenido de una "
152
- "entrada, o el estado de actualización de una página. Puede enviar una "
153
- "notificación por e-mail, cambiar el estado de la entrada o escribir su "
154
- "propio manejador de eventos."
155
-
156
- #: application/view/manager.php:135
157
- msgid "ConfigPress"
158
- msgstr "Configuración"
159
-
160
- #: application/view/manager.php:138
161
- msgid ""
162
- "Control <b>AAM</b> behavior with ConfigPress. For more details please check "
163
- "<b>ConfigPress tutorial</b>."
164
- msgstr ""
165
- "Controle el comportamiento de <b>AAM</b> con ConfigPress. Para mas detalles "
166
- "mire <b>ConfigPress tutorial</b>."
167
-
168
- #: application/view/manager.php:342
169
- msgid "Rollback Settings"
170
- msgstr "Recuperar Valores"
171
-
172
- #: application/view/manager.php:343
173
- msgid "Cancel"
174
- msgstr "Cancelar"
175
-
176
- #: application/view/manager.php:344
177
- msgid "Send E-mail"
178
- msgstr "Enviar email"
179
-
180
- #: application/view/manager.php:345 application/view/manager.php:351
181
- msgid "Add New Role"
182
- msgstr "Agregar Nuevo Rol"
183
-
184
- #: application/view/manager.php:346
185
- msgid "Manage"
186
- msgstr "Administrar"
187
-
188
- #: application/view/manager.php:347
189
- msgid "Edit"
190
- msgstr "Editor"
191
-
192
- #: application/view/manager.php:348
193
- msgid "Delete"
194
- msgstr "Borrar"
195
-
196
- #: application/view/manager.php:349
197
- msgid "Filtered"
198
- msgstr "Filtrado"
199
-
200
- #: application/view/manager.php:350
201
- msgid "Clear"
202
- msgstr "Limpìar"
203
-
204
- #: application/view/manager.php:352
205
- msgid "Save Changes"
206
- msgstr "Grabar Cambios"
207
-
208
- #: application/view/manager.php:353
209
- #, php-format
210
- msgid ""
211
- "System detected %d user(s) with this role. All Users with Role <b>%s</b> "
212
- "will be deleted automatically!"
213
- msgstr ""
214
- "El sistema ha detectado %d usuario(s) con este rol. ¡Todos los Usuarios con "
215
- "Rol <b>%s</b> serán borrados automáticamente!"
216
-
217
- #: application/view/manager.php:354
218
- #, php-format
219
- msgid "Are you sure that you want to delete role <b>%s</b>?"
220
- msgstr "Está seguro de borrar el rol <b>%s</b>?"
221
-
222
- #: application/view/manager.php:355
223
- msgid "Delete Role"
224
- msgstr "Borrar Rol"
225
-
226
- #: application/view/manager.php:356
227
- msgid "Add User"
228
- msgstr "Agregar Usuario"
229
-
230
- #: application/view/manager.php:357
231
- msgid "Filter Users"
232
- msgstr "Filtrar Usuarios"
233
-
234
- #: application/view/manager.php:358 application/view/manager.php:374
235
- msgid "Refresh List"
236
- msgstr "Refrescar Lista"
237
-
238
- #: application/view/manager.php:359
239
- msgid "Block"
240
- msgstr "Bloquear"
241
-
242
- #: application/view/manager.php:360
243
- #, php-format
244
- msgid "Are you sure you want to delete user <b>%s</b>?"
245
- msgstr "Está seguro de borrar el usuario <b>%s</b>?"
246
-
247
- #: application/view/manager.php:361
248
- msgid "Filter Capabilities by Category"
249
- msgstr "Filtrar Capabilities por Categoría"
250
-
251
- #: application/view/manager.php:362
252
- msgid "Inherit Capabilities"
253
- msgstr "Inherit Capabilities"
254
-
255
- #: application/view/manager.php:363
256
- msgid "Add New Capability"
257
- msgstr "Agregar nueva Capability"
258
-
259
- #: application/view/manager.php:364
260
- #, php-format
261
- msgid "Are you sure that you want to delete capability <b>%s</b>?"
262
- msgstr "Por favor confirme el borrado de Capability - <b>%s</b>"
263
-
264
- #: application/view/manager.php:365
265
- msgid "Delete Capability"
266
- msgstr "Borrar Capability"
267
-
268
- #: application/view/manager.php:366
269
- msgid "Select Role"
270
- msgstr "Seleccionar Rol"
271
-
272
- #: application/view/manager.php:367
273
- msgid "Add Capability"
274
- msgstr "Agregar Capability"
275
-
276
- #: application/view/manager.php:368
277
- msgid "Add Event"
278
- msgstr "Agregar Evento"
279
-
280
- #: application/view/manager.php:369
281
- msgid "Edit Event"
282
- msgstr "Editar Evento"
283
-
284
- #: application/view/manager.php:370 application/view/manager.php:372
285
- msgid "Delete Event"
286
- msgstr "Borrar Evento"
287
-
288
- #: application/view/manager.php:371
289
- msgid "Save Event"
290
- msgstr "Salvar Evento"
291
-
292
- #: application/view/manager.php:373
293
- msgid "Filter Posts by Post Type"
294
- msgstr "Filtrar Entradas por Post Type"
295
-
296
- #: application/view/manager.php:375
297
- msgid "Restore Default"
298
- msgstr "Restaurar valores por defecto"
299
-
300
- #: application/view/manager.php:376
301
- msgid "Apply"
302
- msgstr "Aplicar Todo"
303
-
304
- #: application/view/manager.php:377
305
- msgid "Edit Term"
306
- msgstr "Editar Term"
307
-
308
- #: application/view/manager.php:378
309
- msgid "Manager Access"
310
- msgstr "Administrar Accesos"
311
-
312
- #: application/view/manager.php:379
313
- msgid "Unlock Default Accesss Control"
314
- msgstr "Desbloquear Control de Accesos por Defecto"
315
-
316
- #: application/view/manager.php:380
317
- msgid "Close"
318
- msgstr "Cerrar"
319
-
320
- #: application/view/manager.php:381
321
- msgid "Edit Role"
322
- msgstr "Editar Rol"
323
-
324
- #: application/view/metabox.php:179
325
- msgid "Dashboard Widgets"
326
- msgstr "Metaboxes & Widgets"
327
-
328
- #: application/view/metabox.php:183
329
- msgid "Frontend Widgets"
330
- msgstr "Frontend Widgets"
331
-
332
- #: application/view/post.php:181
333
- msgid "[empty]"
334
- msgstr "[vaciar]"
335
-
336
- #: application/view/post.php:345 application/view/post.php:353
337
- msgid "All"
338
- msgstr "Todo"
339
-
340
- #~ msgid "Password Protected"
341
- #~ msgstr "Protegido por contraseña"
342
-
343
- #~ msgid "Public"
344
- #~ msgstr "Público"
345
-
346
- #~ msgid "Advanced Access Manager"
347
- #~ msgstr "Administrador de Accesos"
348
-
349
- #~ msgid "Alert"
350
- #~ msgstr "Alerta"
351
-
352
- #~ msgid "Options updated successfully"
353
- #~ msgstr "Opciones guardadas"
354
-
355
- #~ msgid "Drag and Drop Menu in the List and click <b>Save Order</b>"
356
- #~ msgstr ""
357
- #~ "Para Reorganizar el menu sólo arrastre y suelte Items en la lista y "
358
- #~ "clickee <b>Salvar Orden</b>"
359
-
360
- #~ msgid "Reorganize"
361
- #~ msgstr "Reorganizar"
362
-
363
- #~ msgid "Whole Branch"
364
- #~ msgstr "Toda la Rama"
365
-
366
- #~ msgid ""
367
- #~ "To initialize list of metaboxes manually, copy and paste the URL to edit "
368
- #~ "screen page (e.g. http://localhost/wp-admin/post.php?post=1&action=edit) "
369
- #~ "into text field and click \"Initiate URL\". List of all new metaboxes "
370
- #~ "will be added automatically."
371
- #~ msgstr ""
372
- #~ "Para inicializar la lista de metaboxes manualmente, copie y pegue la URL "
373
- #~ "a la pag. admin en este sitio en el campo de texto y clickee \"Iniciar URL"
374
- #~ "\". La lista de todas las metaboxes nuevas serán agregadas "
375
- #~ "automaticamente."
376
-
377
- #~ msgid "Enter Correct URL"
378
- #~ msgstr "Ingrese URL correcta"
379
-
380
- #~ msgid "Initialize URL"
381
- #~ msgstr "Inicializar URL"
382
-
383
- #~ msgid "ID"
384
- #~ msgstr "ID"
385
-
386
- #~ msgid "Priority"
387
- #~ msgstr "Prioridad"
388
-
389
- #~ msgid "Position"
390
- #~ msgstr "Posición"
391
-
392
- #~ msgid "Restrict"
393
- #~ msgstr "Restringir"
394
-
395
- #~ msgid "List of Metaboxes is empty or not initialized."
396
- #~ msgstr "La lista de metaboxes esta vacía o no inicializada."
397
-
398
- #~ msgid "Initialize the List"
399
- #~ msgstr "Inicializar la Lista"
400
-
401
- #~ msgid "Error"
402
- #~ msgstr "Error"
403
-
404
- #~ msgid "Role Administrator's List of Capabilities"
405
- #~ msgstr "Dar lista de Capabilities de Administrador"
406
-
407
- #~ msgid "Administrator"
408
- #~ msgstr "Administrador"
409
-
410
- #~ msgid "Role Editor's List of Capabilities"
411
- #~ msgstr "Dar lista de Capabilities de Editor"
412
-
413
- #~ msgid "Role Author's List of Capabilities"
414
- #~ msgstr "Dar lista de Capabilities de Autor"
415
-
416
- #~ msgid "Author"
417
- #~ msgstr "Autor"
418
-
419
- #~ msgid "Role Contributor's List of Capabilities"
420
- #~ msgstr "Dar lista de Capabilities de Contribuidor"
421
-
422
- #~ msgid "Contributor"
423
- #~ msgstr "Contribuidor"
424
-
425
- #~ msgid "Role Subscriber's List of Capabilities"
426
- #~ msgstr "Dar lista de Capabilities de Suscriptor"
427
-
428
- #~ msgid "Subscriber"
429
- #~ msgstr "Suscriptor"
430
-
431
- #~ msgid "Collapse All"
432
- #~ msgstr "Colapsar Todo"
433
-
434
- #~ msgid "Expand All"
435
- #~ msgstr "Expandir Todo"
436
-
437
- #~ msgid "Error during saving"
438
- #~ msgstr "Error mientras guardaba"
439
-
440
- #~ msgid "Apply Restrictions Only for Current Role or User"
441
- #~ msgstr "Aplicar Restricciones solo para el Rol o Usuario Actual"
442
-
443
- #~ msgid "Apply Restrictions for All Roles"
444
- #~ msgstr "Aplicar valores para TODOS los Roles de Usuario ?"
445
-
446
- #~ msgid "Apply for All"
447
- #~ msgstr "Aplicar para Todo"
448
-
449
- #~ msgid "Select Post, Page or Taxonomy"
450
- #~ msgstr "Seleccionar Entrada, Página o Taxonomía"
451
-
452
- #~ msgid "Click to toggle"
453
- #~ msgstr "Click para intercambiar"
454
-
455
- #~ msgid "General"
456
- #~ msgstr "General"
457
-
458
- #~ msgid "Current Role"
459
- #~ msgstr "Rol Actual"
460
-
461
- #~ msgid "OK"
462
- #~ msgstr "OK"
463
-
464
- #~ msgid "Saving..."
465
- #~ msgstr "Salvando..."
466
-
467
- #~ msgid "Save"
468
- #~ msgstr "Salvar"
469
-
470
- #~ msgid "Enter New Role"
471
- #~ msgstr "Ingrese Nuevo Rol"
472
-
473
- #~ msgid "Add"
474
- #~ msgstr "Agregar"
475
-
476
- #~ msgid "New Role Created successfully"
477
- #~ msgstr "Nuevo Rol creado"
478
-
479
- #~ msgid "Role can not be created"
480
- #~ msgstr "El Rol no puede ser creado"
481
-
482
- #~ msgid "Delete Role?"
483
- #~ msgstr "Borrar Rol ?"
484
-
485
- #~ msgid "Please confirm deleting Role %s"
486
- #~ msgstr "Por favor confirme el borrado del Rol %s"
487
-
488
- #~ msgid "Save Menu Order"
489
- #~ msgstr "Salvar Orden del Menú?"
490
-
491
- #~ msgid "Save Menu Order <b>ONLY</b> for Role %s?"
492
- #~ msgstr "Le gustaría salvar el orden del Menú <b>SOLO</b> para el Rol %s?"
493
-
494
- #~ msgid "Delete Capability?"
495
- #~ msgstr "Borrar Capability?"
496
-
497
- #~ msgid "Restore Default Settings?"
498
- #~ msgstr "Restaurar valores por defecto de Rol?"
499
-
500
- #~ msgid "All current settings will be lost. Are you sure?"
501
- #~ msgstr "Todos los valores actuales se perderán. Está seguro?"
502
-
503
- #~ msgid "Apply Setting for ALL Roles?"
504
- #~ msgstr "Aplicar valores para TODOS los Roles de Usuario ?"
505
-
506
- #~ msgid "Do you really want to apply these settings to <b>ALL</b> Roles?"
507
- #~ msgstr ""
508
- #~ "Realmente quiere aplicar estos valores para <b>TODOS</b> los Roles de "
509
- #~ "Usuario ?"
510
-
511
- #~ msgid "Do not show me this message again"
512
- #~ msgstr "No mostrarme este mensaje otra vez."
513
-
514
- #~ msgid "Description"
515
- #~ msgstr "Posición"
516
-
517
- #~ msgid "Upgrade functionality"
518
- #~ msgstr "Actualizar funcionalidad"
519
-
520
- #~ msgid "Important Message"
521
- #~ msgstr "Mensaje Importante"
522
-
523
- #~ msgid "No Description found"
524
- #~ msgstr "No se encontró descripción"
525
-
526
- #~ msgid "WARNING"
527
- #~ msgstr "WARNING"
528
-
529
- #~ msgid ""
530
- #~ "Advanced Access Manager requires WordPress 3.2 or newer. <a href=\"http://"
531
- #~ "codex.wordpress.org/Upgrading_WordPress\">Update now!</a>"
532
- #~ msgstr ""
533
- #~ "Advanced Access Manager requiere WordPress 3.1 o mayor. <a href=\"http://"
534
- #~ "codex.wordpress.org/Upgrading_WordPress\">Update now!</a>"
535
-
536
- #~ msgid "Advanced Access Manager requires PHP 5.1.2 or newer"
537
- #~ msgstr "Advanced Access Manager requiere PHP 5.0 o superior"
538
-
539
- #~ msgid "Empty Capability"
540
- #~ msgstr "Borrar Capability"
541
-
542
- #~ msgid "Current Capability can not be deleted"
543
- #~ msgstr "Capability Actual no puede ser borrada"
544
-
545
- #~ msgid "Super Admin"
546
- #~ msgstr "Super Admin"
547
-
548
- #~ msgid "Unauthorized Action"
549
- #~ msgstr "Acción no Autorizada"
550
-
551
- #~ msgid "Options List"
552
- #~ msgstr "Lista de Opciones"
553
-
554
- #~ msgid "Yes"
555
- #~ msgstr "Si"
556
-
557
- #~ msgid "Error appeared during Metabox initialization!"
558
- #~ msgstr "Aparece un error durante la inicialización Metabox!"
559
-
560
- #~ msgid "Restore"
561
- #~ msgstr "Restaurar"
562
-
563
- #~ msgid "Current Role can not be restored!"
564
- #~ msgstr "Rol actual no puede ser restaurado!"
565
-
566
- #~ msgid "Apply All"
567
- #~ msgstr "Aplicar Todo"
568
-
569
- #~ msgid "Error during information grabbing!"
570
- #~ msgstr "Error during information grabbing!"
571
-
572
- #~ msgid "Premium"
573
- #~ msgstr " "
574
-
575
- #~ msgid "Create"
576
- #~ msgstr "Crear"
577
-
578
- #~ msgid "Do not Create"
579
- #~ msgstr "No Crear"
580
-
581
- #~ msgid "Change Role"
582
- #~ msgstr "Cambiar Rol"
583
-
584
- #~ msgid "Current Site"
585
- #~ msgstr "Sitio Actual"
586
-
587
- #~ msgid ""
588
- #~ "cURL library returned empty result. Contact your system administrator to "
589
- #~ "fix this issue."
590
- #~ msgstr ""
591
- #~ "cURL library returned empty result. Contact your system administrator to "
592
- #~ "fix this issue."
593
-
594
- #~ msgid ""
595
- #~ "You are not an active user for current blog. Please click <a href=\"#\" "
596
- #~ "id=\"add-user-toblog\">here</a> to add yourself to current blog as "
597
- #~ "Administrator"
598
- #~ msgstr ""
599
- #~ "No es un usuario activo para el blog Actual. Por favor clickea <a href="
600
- #~ "\"#\" id=\"add-user-toblog\">aquí</a> para agregarte como admin del blog "
601
- #~ "actual"
602
-
603
- #~ msgid "Basic"
604
- #~ msgstr " "
605
-
606
- #~ msgid "Administrator added Successfully"
607
- #~ msgstr "Administrador agregado"
608
-
609
- #~ msgid "Failed to add new Administrator"
610
- #~ msgstr "Falla al agregar Administrador"
611
-
612
- #~ msgid "Click for more information"
613
- #~ msgstr "Click para Tooltip"
614
-
615
- #~ msgid "Current User"
616
- #~ msgstr "Usuario Actual"
617
-
618
- #~ msgid "Delete current capability"
619
- #~ msgstr "Borrar Capability"
620
-
621
- #~ msgid "Read more..."
622
- #~ msgstr "Leer Más..."
623
-
624
- #~ msgid "Restore Default Settings"
625
- #~ msgstr "Restaurar valores por defecto de Rol?"
626
-
627
- #~ msgid ""
628
- #~ "Check Menu or Submenu to restrict or <b>Whole Branch</b> to restrict "
629
- #~ "whole menu."
630
- #~ msgstr ""
631
- #~ "Marque Menú o Sub-menú para restringir el acceso o <b>Toda la Rama</b> "
632
- #~ "para restringir el acceso a todo el menú."
633
-
634
- #~ msgid ""
635
- #~ "Only Latin letters, numbers and space are allowed. All other symbols will "
636
- #~ "be filtered.<br/>New Capability will be added to Super Admin and Admin "
637
- #~ "Roles automatically."
638
- #~ msgstr ""
639
- #~ "Sólo se permiten letras, números y espacios. Todo lo demás será filtrado."
640
- #~ "<br/>La nueva Capability se agregará automáticamente a los roles Super "
641
- #~ "Admin y Admin."
642
-
643
- #~ msgid "Enter New Capability"
644
- #~ msgstr "Agregar nueva Capability"
645
-
646
- #~ msgid "Would you like to restore default restrictions?"
647
- #~ msgstr "Quiere restaurar los permisos por defecto ?"
648
-
649
- #~ msgid "Restore Restrictions"
650
- #~ msgstr "Restaurar valores por defecto de Rol?"
651
-
652
- #~ msgid "Posts in %s"
653
- #~ msgstr "Entradas en %s"
654
-
655
- #~ msgid "Information"
656
- #~ msgstr "Información"
657
-
658
- #~ msgid "Refresh"
659
- #~ msgstr "Refrescar"
660
-
661
- #~ msgid "Frontend"
662
- #~ msgstr "Frontend"
663
-
664
- #~ msgid "Backend"
665
- #~ msgstr "Backend"
666
-
667
- #~ msgid "List"
668
- #~ msgstr "Lista de Roles"
669
-
670
- #~ msgid "Exclude"
671
- #~ msgstr "Excluir Página"
672
-
673
- #~ msgid "Read"
674
- #~ msgstr "Leer"
675
-
676
- #~ msgid "Trash"
677
- #~ msgstr "Papelera"
678
-
679
- #~ msgid "Install Plugin"
680
- #~ msgstr "Instalar Plugin"
681
-
682
- #~ msgid "Publish"
683
- #~ msgstr "Público"
684
-
685
- #~ msgid "Comment"
686
- #~ msgstr "Comentario"
687
-
688
- #~ msgid "Browse"
689
- #~ msgstr "Mostrar"
690
-
691
- #~ msgid "Worth checking"
692
- #~ msgstr "Chequeo de errores"
693
-
694
- #~ msgid "Additional features available"
695
- #~ msgstr "Características adicionales"
696
-
697
- #~ msgid "You have a JavaScript Error on a page"
698
- #~ msgstr "Tiene un error Javascript en una página"
699
-
700
- #~ msgid "For support send an email to address"
701
- #~ msgstr "Para soporte envíe un email a"
702
-
703
- #~ msgid "Add New Cap"
704
- #~ msgstr "Agregar Cap"
705
-
706
- #~ msgid "Title"
707
- #~ msgstr "Título"
708
-
709
- #~ msgid "This is the title of selected Post or Page"
710
- #~ msgstr "Este es el título del Post o Página seleccionada"
711
-
712
- #~ msgid "Selected item's type"
713
- #~ msgstr "Tipo de Item seleccionado"
714
-
715
- #~ msgid "Type"
716
- #~ msgstr "Tipo"
717
-
718
- #~ msgid "Status"
719
- #~ msgstr "Status"
720
-
721
- #~ msgid "Current Post or Page Status"
722
- #~ msgstr "Estado actual del Post o Página"
723
-
724
- #~ msgid "Visibility"
725
- #~ msgstr "Visibilidad"
726
-
727
- #~ msgid "Visibility of current Post or Page"
728
- #~ msgstr "Visibilidad del Post o Página Actual"
729
-
730
- #~ msgid "Restrict Admin"
731
- #~ msgstr "Restringir Admin"
732
-
733
- #~ msgid "Restrict access to current Post or Page on BackEnd"
734
- #~ msgstr "Restringir acceso al Post o Página actual en el BackEnd"
735
-
736
- #~ msgid "Restrict Front"
737
- #~ msgstr "Restringir Frente"
738
-
739
- #~ msgid "Restrict access to current Post or Page on FrontEnd"
740
- #~ msgstr "Restringir acceso al Post o Página actual en el FrontEnd"
741
-
742
- #~ msgid "Just Exclude page from navitation but do not restrict access"
743
- #~ msgstr "Sólo Excluye la página de la navegación pero no restringe el acceso"
744
-
745
- #~ msgid "Expire"
746
- #~ msgstr "Expirar"
747
-
748
- #~ msgid ""
749
- #~ "If Restric is checked then restrict access to current Post or Page until "
750
- #~ "the picked date. If Restrict is unchecked then allow access to Page or "
751
- #~ "Post until the picked date"
752
- #~ msgstr ""
753
- #~ "Si Restringir está checkeado entonces restringe acceso al post o página "
754
- #~ "actual hasta la fecha elegida. Si Restringir no está checkeado entonces "
755
- #~ "permite acceso al post o página actual hasta la fecha elegida."
756
-
757
- #~ msgid "Update info only for current role"
758
- #~ msgstr "Actualizar info sólo para el rol actual"
759
-
760
- #~ msgid "Update Current"
761
- #~ msgstr "Actualizar"
762
-
763
- #~ msgid "Update info for all role"
764
- #~ msgstr "Actualizar info para todos los roles"
765
-
766
- #~ msgid "Update All"
767
- #~ msgstr "Actualziar todo"
768
-
769
- #~ msgid "Category"
770
- #~ msgstr "Categoría"
771
-
772
- #~ msgid "Category title"
773
- #~ msgstr "Título de categoría"
774
-
775
- #~ msgid "This is just a type of post's taxonomy. Always Category"
776
- #~ msgstr "Esto es sólo un tipo de taxonomía de post. Siempre Category"
777
-
778
- #~ msgid "Posts"
779
- #~ msgstr "Posts"
780
-
781
- #~ msgid "Number of posts current category has"
782
- #~ msgstr "Número de posts que tiene la categoría actual"
783
-
784
- #~ msgid ""
785
- #~ "Restrict access to current category and for all Sub Categories on "
786
- #~ "BackEnd. Also it'll restrict access to all posts under these categories"
787
- #~ msgstr ""
788
- #~ "Restringir acceso a la categoría actual y a todas las subcategorías en el "
789
- #~ "BackEnd. También restringirá acceso a todos los posts bajo estas "
790
- #~ "categorías"
791
-
792
- #~ msgid ""
793
- #~ "Restrict access to current category and for all Sub Categories on "
794
- #~ "FrontEnd. Also it'll restrict access to all posts under these categories"
795
- #~ msgstr ""
796
- #~ "Restringir acceso a la categoría actual y a todas las subcategorías en el "
797
- #~ "FrontEnd. También restringirá acceso a todos los posts bajo estas "
798
- #~ "categorías"
799
-
800
- #~ msgid ""
801
- #~ "If Restric is checked then restrict access to current Category and all "
802
- #~ "Sub Categories, and Posts since the picked date. If Restrict is unchecked "
803
- #~ "then allow access to current Category and all Sub Categories, and Posts "
804
- #~ "since the picked date"
805
- #~ msgstr ""
806
- #~ "Si Restringir está checkeado entonces restringe acceso a la categoría "
807
- #~ "actual y sus subcategorías, y Posts desde la fecha elegida. Si "
808
- #~ "Restringir no está checkeado entonces permite acceso a la categoría "
809
- #~ "actual y sus subcategorías, y Posts hasta la fecha elegida."
810
-
811
- #~ msgid "Select a proper Page, Post or Category."
812
- #~ msgstr "Seleccionar una página, Post, o Categoría adecuada."
813
-
814
- #~ msgid "Restore Default Setting for Current Role"
815
- #~ msgstr "Restaurar valores por defecto del Rol Actual"
816
-
817
- #~ msgid "Export Configurations"
818
- #~ msgstr "Exportar configuraciones"
819
-
820
- #~ msgid "Import Configurations"
821
- #~ msgstr "Importar Configuraciones"
822
-
823
- #~ msgid "Support"
824
- #~ msgstr "Soporte"
825
-
826
- #~ msgid "Find on Facebook"
827
- #~ msgstr "Buscar en Facebook"
828
-
829
- #~ msgid "Follow on Twitter"
830
- #~ msgstr "Seguir en Twitter"
831
-
832
- #~ msgid "LinkedIn"
833
- #~ msgstr "LinkedIn"
834
-
835
- #~ msgid "Leave Without Saving?"
836
- #~ msgstr "Salir Sin Salvar ?"
837
-
838
- #~ msgid ""
839
- #~ "Some changed detected. Are you sure that you want to leave without saving"
840
- #~ msgstr "Detectados algunos cambios. Está seguro de salir sin salvar ?"
841
-
842
- #~ msgid "Additional Features Available"
843
- #~ msgstr "Disponibles características adicionales"
844
-
845
- #~ msgid ""
846
- #~ "Additional features detected to extend Advanced Access Manager "
847
- #~ "functionality."
848
- #~ msgstr ""
849
- #~ "Características adicionales detectadas para extender la funcionalidad del "
850
- #~ "Administrador Avanzado de Acceso."
851
-
852
- #~ msgid ""
853
- #~ "Do you want to create a <b>Super Admin</b> Role to get access to ALL "
854
- #~ "features?"
855
- #~ msgstr ""
856
- #~ "Quiere crear el Rol <b>Super Admin</b> para acceder a todas las "
857
- #~ "características ?"
858
-
859
- #~ msgid ""
860
- #~ "After importing, ALL current configurations will be lost. If you are "
861
- #~ "sure, please select proper INI file and click on <i>Import</i> button."
862
- #~ msgstr ""
863
- #~ "Despues de importar, TODAS las configuraciones actuales de perderán. Si "
864
- #~ "está seguro, seleccione el Archivo INI apropiado y haga click en el botón "
865
- #~ "<i>Importar</i>"
866
-
867
- #~ msgid "Uploading..."
868
- #~ msgstr "Actualizando..."
869
-
870
- #~ msgid "Please wait. Importer is working..."
871
- #~ msgstr "Espere por favor. Realizando la importación..."
872
-
873
- #~ msgid "You are not authorized to view this page"
874
- #~ msgstr "No está autorizado a ver esta página"
875
-
876
- #~ msgid "Import"
877
- #~ msgstr "Importar"
878
-
879
- #~ msgid "Error during importing"
880
- #~ msgstr "Error durante la Importación"
881
-
882
- #~ msgid "Apply to ALL Blogs"
883
- #~ msgstr "Aplicar a TODOS los Blogs"
884
-
885
- #~ msgid "Action completed successfully"
886
- #~ msgstr "Acción completada con éxito"
887
-
888
- #~ msgid "Action failed"
889
- #~ msgstr "Error en la acción"
890
-
891
- #~ msgid "Settings applied successfully to ALL Blogs"
892
- #~ msgstr "Valores aplicados con éxito a todos los Blogs"
893
-
894
- #~ msgid ""
895
- #~ "<b>Since 2.0</b><br/>\n"
896
- #~ " <b>Note:</b> No longer used."
897
- #~ msgstr ""
898
- #~ "<b>Since 2.0</b><br/>\n"
899
- #~ " <b>Nota:</b> No usado mas."
900
-
901
- #~ msgid "<b>Description does not exist</b>"
902
- #~ msgstr "<b>Descripción no existe</b>"
903
-
904
- #~ msgid "<p>You do not have sufficient permissions to perform this action</p>"
905
- #~ msgstr "<p>No tienes los permisos suficientes para realizar esta acción</p>"
906
-
907
- #~ msgid ""
908
- #~ "<p><h3>General Information</h3></p>\n"
909
- #~ " <p>If you want to filter Admin Menu for some User Roles or just "
910
- #~ "delete unnecessary dashboard widgets or metaboxes in Edit Post Page, this "
911
- #~ "plugin is for you.\n"
912
- #~ " You can do following things with Advanced Access Manager:</p>\n"
913
- #~ "<ul>\n"
914
- #~ "<li>Filter Admin Menu for specific User Role</li>\n"
915
- #~ "<li>Filter Dashboard Widgets for specific User Role</li>\n"
916
- #~ "<li>Filter List of Metaboxes in Edit Post page for specific User Role</"
917
- #~ "li>\n"
918
- #~ "<li>Add new User Capabilities</li>\n"
919
- #~ "<li>Delete created User Capabilities</li>\n"
920
- #~ "<li>Create new User Roles</li>\n"
921
- #~ "<li>Delete any User Role</li>\n"
922
- #~ "<li>Save current User Roles settings and restore later</li>\n"
923
- #~ "<li>View the list of Posts Pages and Categories in a nice hierarchical "
924
- #~ "tree</li>\n"
925
- #~ "<li>Filter Posts and Post Categories</li>\n"
926
- #~ "<li>Filter Pages and Sub Pages</li>\n"
927
- #~ "<li>Set expiration Date for specific Posts, Pages or even Categories</"
928
- #~ "li>\n"
929
- #~ "<li>Reorganize Order of Main Menu for specific User Role</li>\n"
930
- #~ "</ul>\n"
931
- #~ " <p><h3>Main Menu</h3></p>\n"
932
- #~ " <p>Under Main Menu Tab there is a list of admin menu and submenus. "
933
- #~ "You can Restrict access to certain menus of submenus by checking proper "
934
- #~ "checkbox.\n"
935
- #~ " Also you can reorganize the menu order by draggin and dropping menus "
936
- #~ "in order you want.</p>\n"
937
- #~ " <p><h3>Metabox & Widgets</h3></p>\n"
938
- #~ " <p>This section allows you to filter the list of metaboxes (sections "
939
- #~ "to the Write Post, Write Page, and Write Link editing pages) and "
940
- #~ "dashboard widgets.</p>\n"
941
- #~ " <p><h3>Capabilities</h3></p>\n"
942
- #~ " <p>This is more advanced Tab which allows to create different "
943
- #~ "combinations of Capabilities for current User Role. If you are not "
944
- #~ "familiar with Capabilities please read <a href=\"http://codex.wordpress."
945
- #~ "org/Roles_and_Capabilities\" target=\"_blank\">Roles and Capabilities</a>."
946
- #~ "</p>\n"
947
- #~ " <p><h3>Posts & Pages</h3></p>\n"
948
- #~ " <p>Tree View of Posts (grouped into categories) and Pages (organized "
949
- #~ "hierarchically according to Parent Page parameter) where you can restrict "
950
- #~ "access to certain page or post or the whole category for current User "
951
- #~ "Role. There is also possibility to set expiration date to posts or pages."
952
- #~ "</p>\n"
953
- #~ msgstr ""
954
- #~ "<p><h3>Información General</h3></p>\n"
955
- #~ " <p>Si quiere flitrar el Menú Admin para algunos Roles de usuario o "
956
- #~ "borrar widgets no necesarios del Escritorio o metaboxes en la Edición de "
957
- #~ "páginas , Este plugin es para ti.\n"
958
- #~ " You can do following things with Advanced Access Manager:</p>\n"
959
- #~ "<ul>\n"
960
- #~ "<li>Filter Admin Menu for specific User Role</li>\n"
961
- #~ "<li>Filter Dashboard Widgets for specific User Role</li>\n"
962
- #~ "<li>Filter List of Metaboxes in Edit Post page for specific User Role</"
963
- #~ "li>\n"
964
- #~ "<li>Add new User Capabilities</li>\n"
965
- #~ "<li>Delete created User Capabilities</li>\n"
966
- #~ "<li>Create new User Roles</li>\n"
967
- #~ "<li>Delete any User Role</li>\n"
968
- #~ "<li>Save current User Roles settings and restore later</li>\n"
969
- #~ "<li>View the list of Posts Pages and Categories in a nice hierarchical "
970
- #~ "tree</li>\n"
971
- #~ "<li>Filter Posts and Post Categories</li>\n"
972
- #~ "<li>Filter Pages and Sub Pages</li>\n"
973
- #~ "<li>Set expiration Date for specific Posts, Pages or even Categories</"
974
- #~ "li>\n"
975
- #~ "<li>Reorganize Order of Main Menu for specific User Role</li>\n"
976
- #~ "</ul>\n"
977
- #~ " <p><h3>Main Menu</h3></p>\n"
978
- #~ " <p>Under Main Menu Tab there is a list of admin menu and submenus. "
979
- #~ "You can Restrict access to certain menus of submenus by checking proper "
980
- #~ "checkbox.\n"
981
- #~ " Also you can reorganize the menu order by draggin and dropping menus "
982
- #~ "in order you want.</p>\n"
983
- #~ " <p><h3>Metabox & Widgets</h3></p>\n"
984
- #~ " <p>This section allows you to filter the list of metaboxes (sections "
985
- #~ "to the Write Post, Write Page, and Write Link editing pages) and "
986
- #~ "dashboard widgets.</p>\n"
987
- #~ " <p><h3>Capabilities</h3></p>\n"
988
- #~ " <p>This is more advanced Tab which allows to create different "
989
- #~ "combinations of Capabilities for current User Role. If you are not "
990
- #~ "familiar with Capabilities please read <a href=\"http://codex.wordpress."
991
- #~ "org/Roles_and_Capabilities\" target=\"_blank\">Roles and Capabilities</a>."
992
- #~ "</p>\n"
993
- #~ " <p><h3>Posts & Pages</h3></p>\n"
994
- #~ " <p>Tree View of Posts (grouped into categories) and Pages (organized "
995
- #~ "hierarchically according to Parent Page parameter) where you can restrict "
996
- #~ "access to certain page or post or the whole category for current User "
997
- #~ "Role. There is also possibility to set expiration date to posts or pages."
998
- #~ "</p>\n"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
lang/aam-fa_IR.mo DELETED
Binary file
lang/aam-fa_IR.po DELETED
@@ -1,606 +0,0 @@
1
- msgid ""
2
- msgstr ""
3
- "Project-Id-Version: AAM\n"
4
- "POT-Creation-Date: 2014-02-20 08:00+0330\n"
5
- "PO-Revision-Date: 2014-02-20 09:05+0330\n"
6
- "Last-Translator: Ghaem Omidi <ghaemomidi@yahoo.com>\n"
7
- "Language-Team: WP-Parsi <ghaemomidi@yahoo.com>\n"
8
- "Language: fa_IR\n"
9
- "MIME-Version: 1.0\n"
10
- "Content-Type: text/plain; charset=UTF-8\n"
11
- "Content-Transfer-Encoding: 8bit\n"
12
- "X-Generator: Poedit 1.5.7\n"
13
- "Plural-Forms: nplurals=1; plural=0;\n"
14
- "X-Poedit-KeywordsList: __;_e;_x;_n\n"
15
- "X-Poedit-SourceCharset: UTF-8\n"
16
-
17
- #: C:\Users\Ghaem\Desktop\advanced-access-manager/aam.php:380
18
- #: C:\Users\Ghaem\Desktop\advanced-access-manager/aam.php:387
19
- #: C:\Users\Ghaem\Desktop\advanced-access-manager/aam.php:414
20
- msgid "Access denied"
21
- msgstr "امکان دسترسی وجود ندارد."
22
-
23
- #: C:\Users\Ghaem\Desktop\advanced-access-manager/aam.php:873
24
- #: C:\Users\Ghaem\Desktop\advanced-access-manager/aam.php:874
25
- msgid "AAM"
26
- msgstr "افزونه مدیریت دسترسی پیشرفته"
27
-
28
- #: C:\Users\Ghaem\Desktop\advanced-access-manager/aam.php:883
29
- #: C:\Users\Ghaem\Desktop\advanced-access-manager/aam.php:884
30
- msgid "Access Control"
31
- msgstr "کنترل دسترسی"
32
-
33
- #: C:\Users\Ghaem\Desktop\advanced-access-manager/aam.php:891
34
- #: C:\Users\Ghaem\Desktop\advanced-access-manager/aam.php:892
35
- msgid "ConfigPress"
36
- msgstr "پیکربندی"
37
-
38
- #: C:\Users\Ghaem\Desktop\advanced-access-manager/aam.php:899
39
- #: C:\Users\Ghaem\Desktop\advanced-access-manager/aam.php:900
40
- msgid "Extensions"
41
- msgstr "افزودنی ها"
42
-
43
- #: C:\Users\Ghaem\Desktop\advanced-access-manager/config.php:61
44
- msgid "Failed to create wp-content/aam folder"
45
- msgstr "ایجاد پوشه wp-content/aam انجام نشد."
46
-
47
- #: C:\Users\Ghaem\Desktop\advanced-access-manager/config.php:64
48
- msgid "Folder wp-content/aam is not writable"
49
- msgstr "پوشه wp-content/aam قابل نوشتن نیست."
50
-
51
- #: C:\Users\Ghaem\Desktop\advanced-access-manager/application/view/capability.php:100
52
- #: C:\Users\Ghaem\Desktop\advanced-access-manager/application/view/capability.php:204
53
- #: C:\Users\Ghaem\Desktop\advanced-access-manager\application/view/capability.php:100
54
- #: C:\Users\Ghaem\Desktop\advanced-access-manager\application/view/capability.php:204
55
- #: C:\Users\Ghaem\Desktop\advanced-access-manager\application\view/capability.php:100
56
- #: C:\Users\Ghaem\Desktop\advanced-access-manager\application\view/capability.php:204
57
- msgid "System"
58
- msgstr "سیستم"
59
-
60
- #: C:\Users\Ghaem\Desktop\advanced-access-manager/application/view/capability.php:101
61
- #: C:\Users\Ghaem\Desktop\advanced-access-manager/application/view/capability.php:206
62
- #: C:\Users\Ghaem\Desktop\advanced-access-manager\application/view/capability.php:101
63
- #: C:\Users\Ghaem\Desktop\advanced-access-manager\application/view/capability.php:206
64
- #: C:\Users\Ghaem\Desktop\advanced-access-manager\application\view/capability.php:101
65
- #: C:\Users\Ghaem\Desktop\advanced-access-manager\application\view/capability.php:206
66
- msgid "Post & Page"
67
- msgstr "نوشته و برگه"
68
-
69
- #: C:\Users\Ghaem\Desktop\advanced-access-manager/application/view/capability.php:102
70
- #: C:\Users\Ghaem\Desktop\advanced-access-manager/application/view/capability.php:208
71
- #: C:\Users\Ghaem\Desktop\advanced-access-manager\application/view/capability.php:102
72
- #: C:\Users\Ghaem\Desktop\advanced-access-manager\application/view/capability.php:208
73
- #: C:\Users\Ghaem\Desktop\advanced-access-manager\application\view/capability.php:102
74
- #: C:\Users\Ghaem\Desktop\advanced-access-manager\application\view/capability.php:208
75
- msgid "Backend Interface"
76
- msgstr "رابط بخش مدیریت"
77
-
78
- #: C:\Users\Ghaem\Desktop\advanced-access-manager/application/view/capability.php:103
79
- #: C:\Users\Ghaem\Desktop\advanced-access-manager/application/view/capability.php:210
80
- #: C:\Users\Ghaem\Desktop\advanced-access-manager\application/view/capability.php:103
81
- #: C:\Users\Ghaem\Desktop\advanced-access-manager\application/view/capability.php:210
82
- #: C:\Users\Ghaem\Desktop\advanced-access-manager\application\view/capability.php:103
83
- #: C:\Users\Ghaem\Desktop\advanced-access-manager\application\view/capability.php:210
84
- msgid "Miscellaneous"
85
- msgstr "متفرقه"
86
-
87
- #: C:\Users\Ghaem\Desktop\advanced-access-manager/application/view/extension.php:99
88
- #: C:\Users\Ghaem\Desktop\advanced-access-manager\application/view/extension.php:99
89
- #: C:\Users\Ghaem\Desktop\advanced-access-manager\application\view/extension.php:99
90
- msgid "Folder advanced-access-manager/extension is not writable"
91
- msgstr "پوشه advanced-access-manager/extension قابل نوشتن نیست."
92
-
93
- #: C:\Users\Ghaem\Desktop\advanced-access-manager/application/view/manager.php:59
94
- #: C:\Users\Ghaem\Desktop\advanced-access-manager\application/view/manager.php:59
95
- #: C:\Users\Ghaem\Desktop\advanced-access-manager\application\view/manager.php:59
96
- msgid "Roles"
97
- msgstr "قوانین"
98
-
99
- #: C:\Users\Ghaem\Desktop\advanced-access-manager/application/view/manager.php:60
100
- #: C:\Users\Ghaem\Desktop\advanced-access-manager\application/view/manager.php:60
101
- #: C:\Users\Ghaem\Desktop\advanced-access-manager\application\view/manager.php:60
102
- msgid "Role Manager"
103
- msgstr "مدیریت قانون"
104
-
105
- #: C:\Users\Ghaem\Desktop\advanced-access-manager/application/view/manager.php:68
106
- #: C:\Users\Ghaem\Desktop\advanced-access-manager\application/view/manager.php:68
107
- #: C:\Users\Ghaem\Desktop\advanced-access-manager\application\view/manager.php:68
108
- msgid "Users"
109
- msgstr "کاربران"
110
-
111
- #: C:\Users\Ghaem\Desktop\advanced-access-manager/application/view/manager.php:69
112
- #: C:\Users\Ghaem\Desktop\advanced-access-manager\application/view/manager.php:69
113
- #: C:\Users\Ghaem\Desktop\advanced-access-manager\application\view/manager.php:69
114
- msgid "User Manager"
115
- msgstr "مدیریت کاربر"
116
-
117
- #: C:\Users\Ghaem\Desktop\advanced-access-manager/application/view/manager.php:77
118
- #: C:\Users\Ghaem\Desktop\advanced-access-manager\application/view/manager.php:77
119
- #: C:\Users\Ghaem\Desktop\advanced-access-manager\application\view/manager.php:77
120
- msgid "Visitor"
121
- msgstr "بازدیدکنندگان"
122
-
123
- #: C:\Users\Ghaem\Desktop\advanced-access-manager/application/view/manager.php:78
124
- #: C:\Users\Ghaem\Desktop\advanced-access-manager\application/view/manager.php:78
125
- #: C:\Users\Ghaem\Desktop\advanced-access-manager\application\view/manager.php:78
126
- msgid "Visitor Manager"
127
- msgstr "مدیریت بازدیدکنندگان"
128
-
129
- #: C:\Users\Ghaem\Desktop\advanced-access-manager/application/view/manager.php:95
130
- #: C:\Users\Ghaem\Desktop\advanced-access-manager\application/view/manager.php:95
131
- #: C:\Users\Ghaem\Desktop\advanced-access-manager\application\view/manager.php:95
132
- msgid "Admin Menu"
133
- msgstr "منوی مدیریت"
134
-
135
- #: C:\Users\Ghaem\Desktop\advanced-access-manager/application/view/manager.php:98
136
- #: C:\Users\Ghaem\Desktop\advanced-access-manager\application/view/manager.php:98
137
- #: C:\Users\Ghaem\Desktop\advanced-access-manager\application\view/manager.php:98
138
- msgid ""
139
- "Control Access to Admin Menu. Restrict access to entire Menu or Submenu. "
140
- "<b>Notice</b>, the menu is rendered based on Role's or User's capabilities."
141
- msgstr ""
142
- "<b>کنترل دسترسی به منوی مدیریت. محدود کردن دسترسی به منو یا زیر منو. توجه، "
143
- "منو بر اساس قابلیت های کاربران یا قوانین ارائه شده است.</b>"
144
-
145
- #: C:\Users\Ghaem\Desktop\advanced-access-manager/application/view/manager.php:103
146
- #: C:\Users\Ghaem\Desktop\advanced-access-manager\application/view/manager.php:103
147
- #: C:\Users\Ghaem\Desktop\advanced-access-manager\application\view/manager.php:103
148
- msgid "Metabox & Widget"
149
- msgstr "متاباکس و ابزارک"
150
-
151
- #: C:\Users\Ghaem\Desktop\advanced-access-manager/application/view/manager.php:106
152
- #: C:\Users\Ghaem\Desktop\advanced-access-manager\application/view/manager.php:106
153
- #: C:\Users\Ghaem\Desktop\advanced-access-manager\application\view/manager.php:106
154
- msgid ""
155
- "Filter the list of Metaboxes or Widgets for selected Role or User. If "
156
- "metabox or widget is not listed, try to click <b>Refresh the List</b> button "
157
- "or Copy & Paste direct link to page where specific metabox or widget is "
158
- "shown and hit <b>Retrieve Metaboxes from Link</b> button."
159
- msgstr ""
160
- "<b>فیلترکردن متاباکس ها یا ابزارک ها برای قانون یا کاربر انتخاب شده. اگر "
161
- "متاباکس یا ابزارک فهرست نشده است، روی ((تازه کردن فهرست)) کلیک کنید یا لینک "
162
- "مستقیم را کپی کنید و قرار دهید.</b>"
163
-
164
- #: C:\Users\Ghaem\Desktop\advanced-access-manager/application/view/manager.php:111
165
- #: C:\Users\Ghaem\Desktop\advanced-access-manager\application/view/manager.php:111
166
- #: C:\Users\Ghaem\Desktop\advanced-access-manager\application\view/manager.php:111
167
- msgid "Capability"
168
- msgstr "قابلیت"
169
-
170
- #: C:\Users\Ghaem\Desktop\advanced-access-manager/application/view/manager.php:114
171
- #: C:\Users\Ghaem\Desktop\advanced-access-manager\application/view/manager.php:114
172
- #: C:\Users\Ghaem\Desktop\advanced-access-manager\application\view/manager.php:114
173
- msgid ""
174
- "Manage the list of Capabilities for selected User or Role. <b>Notice</b>, "
175
- "list of user's capabilities are inherited from user's Role.<br/><b>Warning!</"
176
- "b> Be very careful with capabilities. Deleting or unchecking any capability "
177
- "may cause temporary or permanent constrol lost over some features or "
178
- "WordPress dashboard."
179
- msgstr ""
180
- "مدیریت فهرست قابلیت ها برای کاربر یا قانون انتخاب شده. <b>توجه</b>، با "
181
- "قابلیت ها خیلی با دقت باشید. پاک کردن یا برداشتن هر قابلیتی ممکن است باعث "
182
- "شوذ کنترل موقت یا دائم برخی از ویژگی ها یا پیشخوان وردپرس را از دست داد."
183
-
184
- #: C:\Users\Ghaem\Desktop\advanced-access-manager/application/view/manager.php:119
185
- #: C:\Users\Ghaem\Desktop\advanced-access-manager\application/view/manager.php:119
186
- #: C:\Users\Ghaem\Desktop\advanced-access-manager\application\view/manager.php:119
187
- msgid "Posts & Pages"
188
- msgstr "نوشته ها و برگه ها"
189
-
190
- #: C:\Users\Ghaem\Desktop\advanced-access-manager/application/view/manager.php:122
191
- #: C:\Users\Ghaem\Desktop\advanced-access-manager\application/view/manager.php:122
192
- #: C:\Users\Ghaem\Desktop\advanced-access-manager\application\view/manager.php:122
193
- msgid ""
194
- "Manage access to individual <b>Post</b> or <b>Term</b>. Notice, under "
195
- "<b>Post</b>, we assume any post, page or custom post type. And under "
196
- "<b>Term</b> - any term like Post Categories."
197
- msgstr ""
198
- "<b>مدیریت دسترسی یه نوشته یا دوره فردی. توجه، ما فرض می کنیم هر نوشته، برگه "
199
- "یا پست تایپ دلخواه بر اساس نوشته است. و هر دوره ای شبیه دسته های نوشته بر "
200
- "اساس دوره است.</b>"
201
-
202
- #: C:\Users\Ghaem\Desktop\advanced-access-manager/application/view/manager.php:127
203
- #: C:\Users\Ghaem\Desktop\advanced-access-manager\application/view/manager.php:127
204
- #: C:\Users\Ghaem\Desktop\advanced-access-manager\application\view/manager.php:127
205
- msgid "Event Manager"
206
- msgstr "مدیریت رویداد"
207
-
208
- #: C:\Users\Ghaem\Desktop\advanced-access-manager/application/view/manager.php:130
209
- #: C:\Users\Ghaem\Desktop\advanced-access-manager\application/view/manager.php:130
210
- #: C:\Users\Ghaem\Desktop\advanced-access-manager\application\view/manager.php:130
211
- msgid ""
212
- "Define your own action when some event appeared in your WordPress blog. This "
213
- "sections allows you to trigger an action on event like post content change, "
214
- "or page status update. You can setup to send email notification, change the "
215
- "post status or write your own custom event handler."
216
- msgstr ""
217
- "<b>هنگامی که تعدادی رویداد در سایت وردپرسی شما ظاهر می شوند عمل خود را تعریف "
218
- "کنید. این بخش ها به شما اجازه می دهند تا باعث یک عمل در رویداد شبیه تغییر "
219
- "محتوای نوشته یا بروزرسانی وضعیت برگه شوید. شما می توانید تنظیم کنید تا تغییر "
220
- "وضعیت نوشته یا نوشتن یک رویداد دلخواه به عنوان یک اطلاعیه به ایمیل شما ارسال "
221
- "شوند.</b>"
222
-
223
- #: C:\Users\Ghaem\Desktop\advanced-access-manager/application/view/manager.php:331
224
- #: C:\Users\Ghaem\Desktop\advanced-access-manager\application/view/manager.php:331
225
- #: C:\Users\Ghaem\Desktop\advanced-access-manager\application\view/manager.php:331
226
- msgid "Rollback Settings"
227
- msgstr "تنظیمات عقبگرد"
228
-
229
- #: C:\Users\Ghaem\Desktop\advanced-access-manager/application/view/manager.php:332
230
- #: C:\Users\Ghaem\Desktop\advanced-access-manager\application/view/manager.php:332
231
- #: C:\Users\Ghaem\Desktop\advanced-access-manager\application\view/manager.php:332
232
- msgid "Cancel"
233
- msgstr "لغو"
234
-
235
- #: C:\Users\Ghaem\Desktop\advanced-access-manager/application/view/manager.php:333
236
- #: C:\Users\Ghaem\Desktop\advanced-access-manager\application/view/manager.php:333
237
- #: C:\Users\Ghaem\Desktop\advanced-access-manager\application\view/manager.php:333
238
- msgid "Send E-mail"
239
- msgstr "ارسال ایمیل"
240
-
241
- #: C:\Users\Ghaem\Desktop\advanced-access-manager/application/view/manager.php:334
242
- #: C:\Users\Ghaem\Desktop\advanced-access-manager/application/view/manager.php:340
243
- #: C:\Users\Ghaem\Desktop\advanced-access-manager\application/view/manager.php:334
244
- #: C:\Users\Ghaem\Desktop\advanced-access-manager\application/view/manager.php:340
245
- #: C:\Users\Ghaem\Desktop\advanced-access-manager\application\view/manager.php:334
246
- #: C:\Users\Ghaem\Desktop\advanced-access-manager\application\view/manager.php:340
247
- msgid "Add New Role"
248
- msgstr "افزودن قانون جدید"
249
-
250
- #: C:\Users\Ghaem\Desktop\advanced-access-manager/application/view/manager.php:335
251
- #: C:\Users\Ghaem\Desktop\advanced-access-manager\application/view/manager.php:335
252
- #: C:\Users\Ghaem\Desktop\advanced-access-manager\application\view/manager.php:335
253
- msgid "Manage"
254
- msgstr "مدیریت"
255
-
256
- #: C:\Users\Ghaem\Desktop\advanced-access-manager/application/view/manager.php:336
257
- #: C:\Users\Ghaem\Desktop\advanced-access-manager\application/view/manager.php:336
258
- #: C:\Users\Ghaem\Desktop\advanced-access-manager\application\view/manager.php:336
259
- msgid "Edit"
260
- msgstr "ویرایش"
261
-
262
- #: C:\Users\Ghaem\Desktop\advanced-access-manager/application/view/manager.php:337
263
- #: C:\Users\Ghaem\Desktop\advanced-access-manager\application/view/manager.php:337
264
- #: C:\Users\Ghaem\Desktop\advanced-access-manager\application\view/manager.php:337
265
- msgid "Delete"
266
- msgstr "پاک کردن"
267
-
268
- #: C:\Users\Ghaem\Desktop\advanced-access-manager/application/view/manager.php:338
269
- #: C:\Users\Ghaem\Desktop\advanced-access-manager\application/view/manager.php:338
270
- #: C:\Users\Ghaem\Desktop\advanced-access-manager\application\view/manager.php:338
271
- msgid "Filtered"
272
- msgstr "فیلترشده"
273
-
274
- #: C:\Users\Ghaem\Desktop\advanced-access-manager/application/view/manager.php:339
275
- #: C:\Users\Ghaem\Desktop\advanced-access-manager\application/view/manager.php:339
276
- #: C:\Users\Ghaem\Desktop\advanced-access-manager\application\view/manager.php:339
277
- msgid "Clear"
278
- msgstr "پاک کردن"
279
-
280
- #: C:\Users\Ghaem\Desktop\advanced-access-manager/application/view/manager.php:341
281
- #: C:\Users\Ghaem\Desktop\advanced-access-manager\application/view/manager.php:341
282
- #: C:\Users\Ghaem\Desktop\advanced-access-manager\application\view/manager.php:341
283
- msgid "Save Changes"
284
- msgstr "ذخیره ی تغییرات"
285
-
286
- #: C:\Users\Ghaem\Desktop\advanced-access-manager/application/view/manager.php:342
287
- #: C:\Users\Ghaem\Desktop\advanced-access-manager\application/view/manager.php:342
288
- #: C:\Users\Ghaem\Desktop\advanced-access-manager\application\view/manager.php:342
289
- #, php-format
290
- msgid ""
291
- "System detected %d user(s) with this role. All Users with Role <b>%s</b> "
292
- "will be deleted automatically!"
293
- msgstr ""
294
- "سیستم %d کاربر را با این قانون شناسایی کرده است. همه کاربران با قانون <b>%s</"
295
- "b> به طور خودکار پاک خواهند شد."
296
-
297
- #: C:\Users\Ghaem\Desktop\advanced-access-manager/application/view/manager.php:343
298
- #: C:\Users\Ghaem\Desktop\advanced-access-manager\application/view/manager.php:343
299
- #: C:\Users\Ghaem\Desktop\advanced-access-manager\application\view/manager.php:343
300
- #, php-format
301
- msgid "Are you sure that you want to delete role <b>%s</b>?"
302
- msgstr "آیا شما مطمئنید که می خواهید قانون <b>%s</b> را پاک کنید؟"
303
-
304
- #: C:\Users\Ghaem\Desktop\advanced-access-manager/application/view/manager.php:344
305
- #: C:\Users\Ghaem\Desktop\advanced-access-manager\application/view/manager.php:344
306
- #: C:\Users\Ghaem\Desktop\advanced-access-manager\application\view/manager.php:344
307
- msgid "Delete Role"
308
- msgstr "پاک کردن قانون"
309
-
310
- #: C:\Users\Ghaem\Desktop\advanced-access-manager/application/view/manager.php:345
311
- #: C:\Users\Ghaem\Desktop\advanced-access-manager\application/view/manager.php:345
312
- #: C:\Users\Ghaem\Desktop\advanced-access-manager\application\view/manager.php:345
313
- msgid "Add User"
314
- msgstr "افزودن کاربر"
315
-
316
- #: C:\Users\Ghaem\Desktop\advanced-access-manager/application/view/manager.php:346
317
- #: C:\Users\Ghaem\Desktop\advanced-access-manager\application/view/manager.php:346
318
- #: C:\Users\Ghaem\Desktop\advanced-access-manager\application\view/manager.php:346
319
- msgid "Filter Users"
320
- msgstr "فیلتر کاربران"
321
-
322
- #: C:\Users\Ghaem\Desktop\advanced-access-manager/application/view/manager.php:347
323
- #: C:\Users\Ghaem\Desktop\advanced-access-manager/application/view/manager.php:363
324
- #: C:\Users\Ghaem\Desktop\advanced-access-manager\application/view/manager.php:347
325
- #: C:\Users\Ghaem\Desktop\advanced-access-manager\application/view/manager.php:363
326
- #: C:\Users\Ghaem\Desktop\advanced-access-manager\application\view/manager.php:347
327
- #: C:\Users\Ghaem\Desktop\advanced-access-manager\application\view/manager.php:363
328
- msgid "Refresh List"
329
- msgstr "تازه کردن فهرست"
330
-
331
- #: C:\Users\Ghaem\Desktop\advanced-access-manager/application/view/manager.php:348
332
- #: C:\Users\Ghaem\Desktop\advanced-access-manager\application/view/manager.php:348
333
- #: C:\Users\Ghaem\Desktop\advanced-access-manager\application\view/manager.php:348
334
- msgid "Block"
335
- msgstr "مسدود کردن"
336
-
337
- #: C:\Users\Ghaem\Desktop\advanced-access-manager/application/view/manager.php:349
338
- #: C:\Users\Ghaem\Desktop\advanced-access-manager\application/view/manager.php:349
339
- #: C:\Users\Ghaem\Desktop\advanced-access-manager\application\view/manager.php:349
340
- #, php-format
341
- msgid "Are you sure you want to delete user <b>%s</b>?"
342
- msgstr "آیا شما مطمئنید که می خواهید <b>%s</b> را پاک کنید؟"
343
-
344
- #: C:\Users\Ghaem\Desktop\advanced-access-manager/application/view/manager.php:350
345
- #: C:\Users\Ghaem\Desktop\advanced-access-manager\application/view/manager.php:350
346
- #: C:\Users\Ghaem\Desktop\advanced-access-manager\application\view/manager.php:350
347
- msgid "Filter Capabilities by Category"
348
- msgstr "فیلترکردن قابلیت ها بر اساس دسته"
349
-
350
- #: C:\Users\Ghaem\Desktop\advanced-access-manager/application/view/manager.php:351
351
- #: C:\Users\Ghaem\Desktop\advanced-access-manager\application/view/manager.php:351
352
- #: C:\Users\Ghaem\Desktop\advanced-access-manager\application\view/manager.php:351
353
- msgid "Inherit Capabilities"
354
- msgstr "به ارث بردن قابلیت ها"
355
-
356
- #: C:\Users\Ghaem\Desktop\advanced-access-manager/application/view/manager.php:352
357
- #: C:\Users\Ghaem\Desktop\advanced-access-manager\application/view/manager.php:352
358
- #: C:\Users\Ghaem\Desktop\advanced-access-manager\application\view/manager.php:352
359
- msgid "Add New Capability"
360
- msgstr "افزودن قابلیت جدید"
361
-
362
- #: C:\Users\Ghaem\Desktop\advanced-access-manager/application/view/manager.php:353
363
- #: C:\Users\Ghaem\Desktop\advanced-access-manager\application/view/manager.php:353
364
- #: C:\Users\Ghaem\Desktop\advanced-access-manager\application\view/manager.php:353
365
- #, php-format
366
- msgid "Are you sure that you want to delete capability <b>%s</b>?"
367
- msgstr "آیا شما مطمئنید که می خواهید قابلیت <b>%s</b> را پاک کنید؟"
368
-
369
- #: C:\Users\Ghaem\Desktop\advanced-access-manager/application/view/manager.php:354
370
- #: C:\Users\Ghaem\Desktop\advanced-access-manager\application/view/manager.php:354
371
- #: C:\Users\Ghaem\Desktop\advanced-access-manager\application\view/manager.php:354
372
- msgid "Delete Capability"
373
- msgstr "پاک کردن قابلیت"
374
-
375
- #: C:\Users\Ghaem\Desktop\advanced-access-manager/application/view/manager.php:355
376
- #: C:\Users\Ghaem\Desktop\advanced-access-manager\application/view/manager.php:355
377
- #: C:\Users\Ghaem\Desktop\advanced-access-manager\application\view/manager.php:355
378
- msgid "Select Role"
379
- msgstr "انتخاب قانون"
380
-
381
- #: C:\Users\Ghaem\Desktop\advanced-access-manager/application/view/manager.php:356
382
- #: C:\Users\Ghaem\Desktop\advanced-access-manager\application/view/manager.php:356
383
- #: C:\Users\Ghaem\Desktop\advanced-access-manager\application\view/manager.php:356
384
- msgid "Add Capability"
385
- msgstr "افزودن قابلیت"
386
-
387
- #: C:\Users\Ghaem\Desktop\advanced-access-manager/application/view/manager.php:357
388
- #: C:\Users\Ghaem\Desktop\advanced-access-manager\application/view/manager.php:357
389
- #: C:\Users\Ghaem\Desktop\advanced-access-manager\application\view/manager.php:357
390
- msgid "Add Event"
391
- msgstr "افزودن رویداد"
392
-
393
- #: C:\Users\Ghaem\Desktop\advanced-access-manager/application/view/manager.php:358
394
- #: C:\Users\Ghaem\Desktop\advanced-access-manager\application/view/manager.php:358
395
- #: C:\Users\Ghaem\Desktop\advanced-access-manager\application\view/manager.php:358
396
- msgid "Edit Event"
397
- msgstr "ویرایش رویداد"
398
-
399
- #: C:\Users\Ghaem\Desktop\advanced-access-manager/application/view/manager.php:359
400
- #: C:\Users\Ghaem\Desktop\advanced-access-manager/application/view/manager.php:361
401
- #: C:\Users\Ghaem\Desktop\advanced-access-manager\application/view/manager.php:359
402
- #: C:\Users\Ghaem\Desktop\advanced-access-manager\application/view/manager.php:361
403
- #: C:\Users\Ghaem\Desktop\advanced-access-manager\application\view/manager.php:359
404
- #: C:\Users\Ghaem\Desktop\advanced-access-manager\application\view/manager.php:361
405
- msgid "Delete Event"
406
- msgstr "پاک کردن رویداد"
407
-
408
- #: C:\Users\Ghaem\Desktop\advanced-access-manager/application/view/manager.php:360
409
- #: C:\Users\Ghaem\Desktop\advanced-access-manager\application/view/manager.php:360
410
- #: C:\Users\Ghaem\Desktop\advanced-access-manager\application\view/manager.php:360
411
- msgid "Save Event"
412
- msgstr "ذخیره رویداد"
413
-
414
- #: C:\Users\Ghaem\Desktop\advanced-access-manager/application/view/manager.php:362
415
- #: C:\Users\Ghaem\Desktop\advanced-access-manager\application/view/manager.php:362
416
- #: C:\Users\Ghaem\Desktop\advanced-access-manager\application\view/manager.php:362
417
- msgid "Filter Posts by Post Type"
418
- msgstr "فیلتر کردن نوشته ها بر اساس پست تایپ"
419
-
420
- #: C:\Users\Ghaem\Desktop\advanced-access-manager/application/view/manager.php:364
421
- #: C:\Users\Ghaem\Desktop\advanced-access-manager\application/view/manager.php:364
422
- #: C:\Users\Ghaem\Desktop\advanced-access-manager\application\view/manager.php:364
423
- msgid "Restore Default"
424
- msgstr "بازگردانی به پیش فرض"
425
-
426
- #: C:\Users\Ghaem\Desktop\advanced-access-manager/application/view/manager.php:365
427
- #: C:\Users\Ghaem\Desktop\advanced-access-manager\application/view/manager.php:365
428
- #: C:\Users\Ghaem\Desktop\advanced-access-manager\application\view/manager.php:365
429
- msgid "Apply"
430
- msgstr "اعمال کردن"
431
-
432
- #: C:\Users\Ghaem\Desktop\advanced-access-manager/application/view/manager.php:366
433
- #: C:\Users\Ghaem\Desktop\advanced-access-manager\application/view/manager.php:366
434
- #: C:\Users\Ghaem\Desktop\advanced-access-manager\application\view/manager.php:366
435
- msgid "Edit Term"
436
- msgstr "ویرایش دوره"
437
-
438
- #: C:\Users\Ghaem\Desktop\advanced-access-manager/application/view/manager.php:367
439
- #: C:\Users\Ghaem\Desktop\advanced-access-manager\application/view/manager.php:367
440
- #: C:\Users\Ghaem\Desktop\advanced-access-manager\application\view/manager.php:367
441
- msgid "Manager Access"
442
- msgstr "دسترسی مدیریت"
443
-
444
- #: C:\Users\Ghaem\Desktop\advanced-access-manager/application/view/manager.php:368
445
- #: C:\Users\Ghaem\Desktop\advanced-access-manager\application/view/manager.php:368
446
- #: C:\Users\Ghaem\Desktop\advanced-access-manager\application\view/manager.php:368
447
- msgid "Unlock Default Accesss Control"
448
- msgstr "بازکردن کنترل دسترسی پیش فرض"
449
-
450
- #: C:\Users\Ghaem\Desktop\advanced-access-manager/application/view/manager.php:369
451
- #: C:\Users\Ghaem\Desktop\advanced-access-manager\application/view/manager.php:369
452
- #: C:\Users\Ghaem\Desktop\advanced-access-manager\application\view/manager.php:369
453
- msgid "Close"
454
- msgstr "بستن"
455
-
456
- #: C:\Users\Ghaem\Desktop\advanced-access-manager/application/view/manager.php:370
457
- #: C:\Users\Ghaem\Desktop\advanced-access-manager\application/view/manager.php:370
458
- #: C:\Users\Ghaem\Desktop\advanced-access-manager\application\view/manager.php:370
459
- msgid "Edit Role"
460
- msgstr "ویرایش قانون"
461
-
462
- #: C:\Users\Ghaem\Desktop\advanced-access-manager/application/view/manager.php:371
463
- #: C:\Users\Ghaem\Desktop\advanced-access-manager\application/view/manager.php:371
464
- #: C:\Users\Ghaem\Desktop\advanced-access-manager\application\view/manager.php:371
465
- msgid "Restore Default Capabilities"
466
- msgstr "بازگردانی قابلیت های پیش فرض"
467
-
468
- #: C:\Users\Ghaem\Desktop\advanced-access-manager/application/view/manager.php:372
469
- #: C:\Users\Ghaem\Desktop\advanced-access-manager\application/view/manager.php:372
470
- #: C:\Users\Ghaem\Desktop\advanced-access-manager\application\view/manager.php:372
471
- #, php-format
472
- msgid "Are you sure you want to delete <b>%s</b>?"
473
- msgstr "آیا شما مطمئنید که می خواهید <b>%s</b> را پاک کنید؟"
474
-
475
- #: C:\Users\Ghaem\Desktop\advanced-access-manager/application/view/manager.php:373
476
- #: C:\Users\Ghaem\Desktop\advanced-access-manager\application/view/manager.php:373
477
- #: C:\Users\Ghaem\Desktop\advanced-access-manager\application\view/manager.php:373
478
- #, php-format
479
- msgid "Are you sure you want to move <b>%s</b> to trash?"
480
- msgstr "آیا شما مطمئنید که می خواهید <b>%s</b> را به زباله دان انتقال دهید؟"
481
-
482
- #: C:\Users\Ghaem\Desktop\advanced-access-manager/application/view/manager.php:374
483
- #: C:\Users\Ghaem\Desktop\advanced-access-manager\application/view/manager.php:374
484
- #: C:\Users\Ghaem\Desktop\advanced-access-manager\application\view/manager.php:374
485
- msgid "Delete Post"
486
- msgstr "پاک کردن نوشته"
487
-
488
- #: C:\Users\Ghaem\Desktop\advanced-access-manager/application/view/manager.php:375
489
- #: C:\Users\Ghaem\Desktop\advanced-access-manager\application/view/manager.php:375
490
- #: C:\Users\Ghaem\Desktop\advanced-access-manager\application\view/manager.php:375
491
- msgid "Delete Permanently"
492
- msgstr "پاک کردن برای همیشه"
493
-
494
- #: C:\Users\Ghaem\Desktop\advanced-access-manager/application/view/manager.php:376
495
- #: C:\Users\Ghaem\Desktop\advanced-access-manager\application/view/manager.php:376
496
- #: C:\Users\Ghaem\Desktop\advanced-access-manager\application\view/manager.php:376
497
- msgid "Trash Post"
498
- msgstr "زباله دان نوشته"
499
-
500
- #: C:\Users\Ghaem\Desktop\advanced-access-manager/application/view/manager.php:377
501
- #: C:\Users\Ghaem\Desktop\advanced-access-manager\application/view/manager.php:377
502
- #: C:\Users\Ghaem\Desktop\advanced-access-manager\application\view/manager.php:377
503
- msgid "Restore Default Access"
504
- msgstr "بازگردانی دسترسی پیش فرض"
505
-
506
- #: C:\Users\Ghaem\Desktop\advanced-access-manager/application/view/metabox.php:190
507
- #: C:\Users\Ghaem\Desktop\advanced-access-manager\application/view/metabox.php:190
508
- #: C:\Users\Ghaem\Desktop\advanced-access-manager\application\view/metabox.php:190
509
- msgid "Dashboard Widgets"
510
- msgstr "ابزارک های پیشخوان"
511
-
512
- #: C:\Users\Ghaem\Desktop\advanced-access-manager/application/view/metabox.php:194
513
- #: C:\Users\Ghaem\Desktop\advanced-access-manager\application/view/metabox.php:194
514
- #: C:\Users\Ghaem\Desktop\advanced-access-manager\application\view/metabox.php:194
515
- msgid "Frontend Widgets"
516
- msgstr "ابزارک های جلو"
517
-
518
- #: C:\Users\Ghaem\Desktop\advanced-access-manager/application/view/post.php:213
519
- #: C:\Users\Ghaem\Desktop\advanced-access-manager\application/view/post.php:213
520
- #: C:\Users\Ghaem\Desktop\advanced-access-manager\application\view/post.php:213
521
- msgid "[empty]"
522
- msgstr "(خالی)"
523
-
524
- #: C:\Users\Ghaem\Desktop\advanced-access-manager/application/view/post.php:396
525
- #: C:\Users\Ghaem\Desktop\advanced-access-manager/application/view/post.php:404
526
- #: C:\Users\Ghaem\Desktop\advanced-access-manager\application/view/post.php:396
527
- #: C:\Users\Ghaem\Desktop\advanced-access-manager\application/view/post.php:404
528
- #: C:\Users\Ghaem\Desktop\advanced-access-manager\application\view/post.php:396
529
- #: C:\Users\Ghaem\Desktop\advanced-access-manager\application\view/post.php:404
530
- msgid "All"
531
- msgstr "همه"
532
-
533
- #: C:\Users\Ghaem\Desktop\advanced-access-manager/extension/AAM_Activity_Log/activity.php:98
534
- #: C:\Users\Ghaem\Desktop\advanced-access-manager\extension\AAM_Activity_Log/activity.php:98
535
- msgid "System Login"
536
- msgstr "ورود به سیستم"
537
-
538
- #: C:\Users\Ghaem\Desktop\advanced-access-manager/extension/AAM_Activity_Log/activity.php:102
539
- #: C:\Users\Ghaem\Desktop\advanced-access-manager\extension\AAM_Activity_Log/activity.php:102
540
- msgid "System Logout"
541
- msgstr "خروج از سیستم"
542
-
543
- #: C:\Users\Ghaem\Desktop\advanced-access-manager/extension/AAM_Activity_Log/activity.php:108
544
- #: C:\Users\Ghaem\Desktop\advanced-access-manager\extension\AAM_Activity_Log/activity.php:108
545
- msgid "Unknown Activity"
546
- msgstr "فعالیت ناشناخته"
547
-
548
- #: C:\Users\Ghaem\Desktop\advanced-access-manager/extension/AAM_Activity_Log/extension.php:112
549
- #: C:\Users\Ghaem\Desktop\advanced-access-manager\extension\AAM_Activity_Log/extension.php:112
550
- msgid "Activity Log"
551
- msgstr "گزارش فعالیت"
552
-
553
- #: C:\Users\Ghaem\Desktop\advanced-access-manager/extension/AAM_Activity_Log/extension.php:116
554
- #: C:\Users\Ghaem\Desktop\advanced-access-manager\extension\AAM_Activity_Log/extension.php:116
555
- msgid ""
556
- "Tracks User Activities like user login/logout or post changes. Check <b>AAM "
557
- "Activities</b> Extension to get advanced list of possible activities."
558
- msgstr ""
559
- "<b>ردیابی فعالیت های کاربر مانند ورود و خروج کاربر یا تغییرات کاربر. افزودنی "
560
- "فعالیت های افزونه کنترل دسترسی پیشرفته را بررسی کنید تا فهرست پیشرفته از "
561
- "فعالیت های ممکن را دریافت کنید.</b>"
562
-
563
- #: C:\Users\Ghaem\Desktop\advanced-access-manager/extension/AAM_Activity_Log/extension.php:177
564
- #: C:\Users\Ghaem\Desktop\advanced-access-manager\extension\AAM_Activity_Log/extension.php:177
565
- msgid "Clear Logs"
566
- msgstr "پاک کردن گزارش ها"
567
-
568
- #: C:\Users\Ghaem\Desktop\advanced-access-manager/extension/AAM_Activity_Log/extension.php:178
569
- #: C:\Users\Ghaem\Desktop\advanced-access-manager\extension\AAM_Activity_Log/extension.php:178
570
- msgid "Get More"
571
- msgstr "بیشتر"
572
-
573
- #: C:\Users\Ghaem\Desktop\advanced-access-manager/extension/AAM_Multisite_Support/extension.php:125
574
- #: C:\Users\Ghaem\Desktop\advanced-access-manager\extension\AAM_Multisite_Support/extension.php:125
575
- msgid "Sites"
576
- msgstr "سایت ها"
577
-
578
- #: C:\Users\Ghaem\Desktop\advanced-access-manager/extension/AAM_Multisite_Support/extension.php:126
579
- #: C:\Users\Ghaem\Desktop\advanced-access-manager\extension\AAM_Multisite_Support/extension.php:126
580
- msgid "Site Manager"
581
- msgstr "مدیریت سایت"
582
-
583
- #: C:\Users\Ghaem\Desktop\advanced-access-manager/extension/AAM_Multisite_Support/extension.php:189
584
- #: C:\Users\Ghaem\Desktop\advanced-access-manager\extension\AAM_Multisite_Support/extension.php:189
585
- msgid "Set Default"
586
- msgstr "تنظیم پیش فرض"
587
-
588
- #: C:\Users\Ghaem\Desktop\advanced-access-manager/extension/AAM_Multisite_Support/extension.php:190
589
- #: C:\Users\Ghaem\Desktop\advanced-access-manager\extension\AAM_Multisite_Support/extension.php:190
590
- msgid "Unset Default"
591
- msgstr "تنظیم نکردن پیش فرض"
592
-
593
- #: C:\Users\Ghaem\Desktop\advanced-access-manager/extension/AAM_Multisite_Support/extension.php:191
594
- #: C:\Users\Ghaem\Desktop\advanced-access-manager\extension\AAM_Multisite_Support/extension.php:191
595
- msgid "Set as Default"
596
- msgstr "تنظیم به عنوان پیش فرض"
597
-
598
- #: C:\Users\Ghaem\Desktop\advanced-access-manager/extension/AAM_My_Feature/extension.php:50
599
- #: C:\Users\Ghaem\Desktop\advanced-access-manager\extension\AAM_My_Feature/extension.php:50
600
- msgid "My Feature"
601
- msgstr "ویژگی من"
602
-
603
- #: C:\Users\Ghaem\Desktop\advanced-access-manager/extension/AAM_My_Feature/extension.php:53
604
- #: C:\Users\Ghaem\Desktop\advanced-access-manager\extension\AAM_My_Feature/extension.php:53
605
- msgid "My customly developed feature"
606
- msgstr "<b>ویژگی دلخواه توسعه یافته من</b>"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
lang/aam-fr_FR.mo DELETED
Binary file
lang/aam-fr_FR.po DELETED
@@ -1,337 +0,0 @@
1
- msgid ""
2
- msgstr ""
3
- "Project-Id-Version: AAM\n"
4
- "POT-Creation-Date: 2013-12-01 14:07-0500\n"
5
- "PO-Revision-Date: 2014-01-15 23:25+0100\n"
6
- "Last-Translator: Moskito7 <moskito7@wanadoo.fr>\n"
7
- "Language-Team: WPAAM <support@wpaam.com>\n"
8
- "MIME-Version: 1.0\n"
9
- "Content-Type: text/plain; charset=UTF-8\n"
10
- "Content-Transfer-Encoding: 8bit\n"
11
- "Language: fr_FR\n"
12
- "X-Generator: Poedit 1.5.4\n"
13
-
14
- #: aam.php:243 aam.php:248 aam.php:267
15
- msgid "Access denied"
16
- msgstr "Accès refusé"
17
-
18
- #: aam.php:691 aam.php:692
19
- msgid "AAM"
20
- msgstr "AAM"
21
-
22
- #: aam.php:701 aam.php:702
23
- msgid "Access Control"
24
- msgstr "Contrôle d'accès"
25
-
26
- #: aam.php:709 aam.php:710
27
- msgid "Extensions"
28
- msgstr "Extensions"
29
-
30
- #: application/view/capability.php:98 application/view/capability.php:179
31
- msgid "System"
32
- msgstr "Système"
33
-
34
- #: application/view/capability.php:99 application/view/capability.php:181
35
- msgid "Post & Page"
36
- msgstr "Articles et Pages"
37
-
38
- #: application/view/capability.php:100 application/view/capability.php:183
39
- msgid "Backend Interface"
40
- msgstr "Interface d'administration"
41
-
42
- #: application/view/capability.php:101
43
- msgid "Miscellaneous"
44
- msgstr "Divers"
45
-
46
- #: application/view/capability.php:185
47
- msgid "Miscelaneous"
48
- msgstr "Divers"
49
-
50
- #: application/view/manager.php:59
51
- msgid "Roles"
52
- msgstr "Rôles"
53
-
54
- #: application/view/manager.php:60
55
- msgid "Role Manager"
56
- msgstr "Gestionnaire de rôle"
57
-
58
- #: application/view/manager.php:68
59
- msgid "Users"
60
- msgstr "Utilisateurs"
61
-
62
- #: application/view/manager.php:69
63
- msgid "User Manager"
64
- msgstr "Gestionnaire d'utilisateurs"
65
-
66
- #: application/view/manager.php:77
67
- msgid "Visitor"
68
- msgstr "Visiteur"
69
-
70
- #: application/view/manager.php:78
71
- msgid "Visitor Manager"
72
- msgstr "Gestionnaire de visiteurs"
73
-
74
- #: application/view/manager.php:95
75
- msgid "Admin Menu"
76
- msgstr "Menu d'administration"
77
-
78
- #: application/view/manager.php:98
79
- msgid ""
80
- "Control Access to Admin Menu. Restrict access to entire Menu or Submenu. "
81
- "<b>Notice</b>, the menu is rendered based on Role's or User's capabilities."
82
- msgstr ""
83
- "Contrôler l'accès au menu d'administration. Restreindre l'accès au menu "
84
- "entier ou à un sous-menu. <b>Note</b>, l'affichage des menus est basé sur le "
85
- "rôle ou les capacités de l'utilisateur."
86
-
87
- #: application/view/manager.php:103
88
- msgid "Metabox & Widget"
89
- msgstr "Métabox & Widget"
90
-
91
- #: application/view/manager.php:106
92
- msgid ""
93
- "Filter the list of Metaboxes or Widgets for selected Role or User. If "
94
- "metabox or widget is not listed, try to click <b>Refresh the List</b> button "
95
- "or Copy & Paste direct link to page where specific metabox or widget is "
96
- "shown and hit <b>Retrieve Metaboxes from Link</b> button."
97
- msgstr ""
98
- "Filtrer la liste des métabox ou widgets pour le rôle ou l'utilisateur "
99
- "sélectionné. Si une métabox ou un widget n'est pas listé, essayez de cliquer "
100
- "sur le bouton <b>Rafraîchir la liste</b> ou copier et coller directement le "
101
- "lien vers la page où la métabox ou le widget est affiché et cliquez sur le "
102
- "bouton <b>Récupérer une métabox à partir d'un lien</b>."
103
-
104
- #: application/view/manager.php:111
105
- msgid "Capability"
106
- msgstr "Capacités"
107
-
108
- #: application/view/manager.php:114
109
- msgid ""
110
- "Manage the list of Capabilities for selected User or Role. <b>Notice</b>, "
111
- "list of user's capabilities are inherited from user's Role.<br/><b>Warning!</"
112
- "b> Be very careful with capabilities. Deleting or unchecking any capability "
113
- "may cause temporary or permanent constrol lost over some features or "
114
- "WordPress dashboard."
115
- msgstr ""
116
- "Gérer la liste des capacités pour l'utilisateur ou le rôle sélectionné. "
117
- "<b>Note</b>, la liste des capacités de l'utilisateur est héritée du rôle de "
118
- "l'utilisateur.</br><b>Attention !</b> Faites très attention avec les "
119
- "capacités. Supprimer ou décocher n'importe quelle capacité pourrait "
120
- "entrainer la perte temporaire ou définitive de certaines fonctionnalités ou "
121
- "du tableau de bord de Wordpress."
122
-
123
- #: application/view/manager.php:119
124
- msgid "Posts & Categories"
125
- msgstr "Articles et Catégories"
126
-
127
- #: application/view/manager.php:122
128
- msgid ""
129
- "Manage access to individual <b>Post</b> or <b>Term</b>. Notice, under "
130
- "<b>Post</b>, we assume any post, page or custom post type. And under "
131
- "<b>Term</b> - any term like Post Categories."
132
- msgstr ""
133
- "Gérer l'accès individuellement aux <b>articles</b> ou <b>termes</b>. Note, "
134
- "on entend par <b>article</b> n'importe quel article, page ou type d'article. "
135
- "Et par <b>terme</b> n'importe quel élément comme des catégories d'articles."
136
-
137
- #: application/view/manager.php:127
138
- msgid "Event Manager"
139
- msgstr "Gestionnaire d'événements"
140
-
141
- #: application/view/manager.php:130
142
- msgid ""
143
- "Define your own action when some event appeared in your WordPress blog. This "
144
- "sections allows you to trigger an action on event like post content change, "
145
- "or page status update. You can setup to send email notification, change the "
146
- "post status or write your own custom event handler."
147
- msgstr ""
148
- "Définir votre propre action lorsqu'un événement apparaît sur votre blog "
149
- "WordPress. Cette section vous permet de déclencher une action sur un "
150
- "événement comme le changement de contenu d'un article, ou une mise à jour de "
151
- "l'état de la page. Vous pouvez configurer l'envoi d'une notification par E-"
152
- "mail, la modification du statut de l'article ou écrire votre propre "
153
- "gestionnaire d'événements."
154
-
155
- #: application/view/manager.php:135
156
- msgid "ConfigPress"
157
- msgstr "ConfigPress"
158
-
159
- #: application/view/manager.php:138
160
- msgid ""
161
- "Control <b>AAM</b> behavior with ConfigPress. For more details please check "
162
- "<b>ConfigPress tutorial</b>."
163
- msgstr ""
164
- "Contrôler le comportement de <b>AAM</b> avec ConfigPress. Pour plus de "
165
- "détails regardez le <b>tutoriel ConfigPress</b>."
166
-
167
- #: application/view/manager.php:342
168
- msgid "Rollback Settings"
169
- msgstr "Rétablir les paramètres"
170
-
171
- #: application/view/manager.php:343
172
- msgid "Cancel"
173
- msgstr "Annuler"
174
-
175
- #: application/view/manager.php:344
176
- msgid "Send E-mail"
177
- msgstr "Envoyer un E-mail"
178
-
179
- #: application/view/manager.php:345 application/view/manager.php:351
180
- msgid "Add New Role"
181
- msgstr "Ajouter un rôle"
182
-
183
- #: application/view/manager.php:346
184
- msgid "Manage"
185
- msgstr "Gérer"
186
-
187
- #: application/view/manager.php:347
188
- msgid "Edit"
189
- msgstr "Editer"
190
-
191
- #: application/view/manager.php:348
192
- msgid "Delete"
193
- msgstr "Supprimer"
194
-
195
- #: application/view/manager.php:349
196
- msgid "Filtered"
197
- msgstr "Filtré"
198
-
199
- #: application/view/manager.php:350
200
- msgid "Clear"
201
- msgstr "Nettoyer"
202
-
203
- #: application/view/manager.php:352
204
- msgid "Save Changes"
205
- msgstr "Sauvegarder les modifications"
206
-
207
- #: application/view/manager.php:353
208
- #, php-format
209
- msgid ""
210
- "System detected %d user(s) with this role. All Users with Role <b>%s</b> "
211
- "will be deleted automatically!"
212
- msgstr ""
213
- "Le système a détecté %d utilisateur(s) avec ce rôle. Tous les utilisateurs "
214
- "avec le rôle <b>%s</b> seront automatiquement supprimés !"
215
-
216
- #: application/view/manager.php:354
217
- #, php-format
218
- msgid "Are you sure that you want to delete role <b>%s</b>?"
219
- msgstr "Êtes-vous certain de vouloir supprimer <b>%s</b> ?"
220
-
221
- #: application/view/manager.php:355
222
- msgid "Delete Role"
223
- msgstr "Supprimer le rôle"
224
-
225
- #: application/view/manager.php:356
226
- msgid "Add User"
227
- msgstr "Ajouter un utilisateur"
228
-
229
- #: application/view/manager.php:357
230
- msgid "Filter Users"
231
- msgstr "Filtrer les utilisateurs"
232
-
233
- #: application/view/manager.php:358 application/view/manager.php:374
234
- msgid "Refresh List"
235
- msgstr "Rafraîchir la liste"
236
-
237
- #: application/view/manager.php:359
238
- msgid "Block"
239
- msgstr "Bloquer"
240
-
241
- #: application/view/manager.php:360
242
- #, php-format
243
- msgid "Are you sure you want to delete user <b>%s</b>?"
244
- msgstr "Êtes-vous certain de vouloir supprimer l'utilisateur <b>%s</b> ?"
245
-
246
- #: application/view/manager.php:361
247
- msgid "Filter Capabilities by Category"
248
- msgstr "Filtrer les capacités par catégorie"
249
-
250
- #: application/view/manager.php:362
251
- msgid "Inherit Capabilities"
252
- msgstr "Capacités héritées"
253
-
254
- #: application/view/manager.php:363
255
- msgid "Add New Capability"
256
- msgstr "Ajouter une nouvelle capacité"
257
-
258
- #: application/view/manager.php:364
259
- #, php-format
260
- msgid "Are you sure that you want to delete capability <b>%s</b>?"
261
- msgstr "Êtes-vous certain de vouloir supprimer la capacité <b>%s</b> ?"
262
-
263
- #: application/view/manager.php:365
264
- msgid "Delete Capability"
265
- msgstr "Supprimer la capacité"
266
-
267
- #: application/view/manager.php:366
268
- msgid "Select Role"
269
- msgstr "Sélectionner le rôle"
270
-
271
- #: application/view/manager.php:367
272
- msgid "Add Capability"
273
- msgstr "Ajouter la capacité"
274
-
275
- #: application/view/manager.php:368
276
- msgid "Add Event"
277
- msgstr "Ajouter un événement"
278
-
279
- #: application/view/manager.php:369
280
- msgid "Edit Event"
281
- msgstr "Editer un événement"
282
-
283
- #: application/view/manager.php:370 application/view/manager.php:372
284
- msgid "Delete Event"
285
- msgstr "Supprimer un événement"
286
-
287
- #: application/view/manager.php:371
288
- msgid "Save Event"
289
- msgstr "Sauvegarder un événement"
290
-
291
- #: application/view/manager.php:373
292
- msgid "Filter Posts by Post Type"
293
- msgstr "Filtrer les articles par type"
294
-
295
- #: application/view/manager.php:375
296
- msgid "Restore Default"
297
- msgstr "Restaurer les paramètres par défaut"
298
-
299
- #: application/view/manager.php:376
300
- msgid "Apply"
301
- msgstr "Appliquer"
302
-
303
- #: application/view/manager.php:377
304
- msgid "Edit Term"
305
- msgstr "Editer les termes"
306
-
307
- #: application/view/manager.php:378
308
- msgid "Manager Access"
309
- msgstr "Gestionnaire d'accès"
310
-
311
- #: application/view/manager.php:379
312
- msgid "Unlock Default Accesss Control"
313
- msgstr "Déverrouiller le contrôle d'accès par défaut"
314
-
315
- #: application/view/manager.php:380
316
- msgid "Close"
317
- msgstr "Fermer"
318
-
319
- #: application/view/manager.php:381
320
- msgid "Edit Role"
321
- msgstr "Editer le rôle"
322
-
323
- #: application/view/metabox.php:179
324
- msgid "Dashboard Widgets"
325
- msgstr "Widgets du tableau de bord"
326
-
327
- #: application/view/metabox.php:183
328
- msgid "Frontend Widgets"
329
- msgstr "Widgets du site"
330
-
331
- #: application/view/post.php:181
332
- msgid "[empty]"
333
- msgstr "[vide]"
334
-
335
- #: application/view/post.php:345 application/view/post.php:353
336
- msgid "All"
337
- msgstr "Tout"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
lang/aam-nb_NO.mo DELETED
Binary file
lang/aam-pl_PL.mo DELETED
Binary file
lang/aam-pl_PL.po DELETED
@@ -1,385 +0,0 @@
1
- msgid ""
2
- msgstr ""
3
- "Project-Id-Version: AAM v2.2.2\n"
4
- "POT-Creation-Date: 2014-01-23 20:56-0500\n"
5
- "PO-Revision-Date: 2014-02-06 21:37+0100\n"
6
- "Last-Translator: Gustaw Lasek <biuro@servitium.pl>\n"
7
- "Language-Team: Servitium <biuro@servitium.pl>\n"
8
- "Language: pl_PL\n"
9
- "MIME-Version: 1.0\n"
10
- "Content-Type: text/plain; charset=UTF-8\n"
11
- "Content-Transfer-Encoding: 8bit\n"
12
- "X-Generator: Poedit 1.5.7\n"
13
- "Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 "
14
- "|| n%100>=20) ? 1 : 2);\n"
15
-
16
- #: aam.php:346 aam.php:351 aam.php:379
17
- msgid "Access denied"
18
- msgstr "Brak dostępu"
19
-
20
- #: aam.php:833 aam.php:834
21
- msgid "AAM"
22
- msgstr "AAM"
23
-
24
- #: aam.php:843 aam.php:844
25
- msgid "Access Control"
26
- msgstr "Kontrola dostępu"
27
-
28
- #: aam.php:851 aam.php:852
29
- msgid "Extensions"
30
- msgstr "Rozszerzenia"
31
-
32
- #: config.php:58
33
- msgid "<b>wp-content</b> folder is not writable or does not exists. "
34
- msgstr "<b>wp-content</b> folder nie ma uparwnień do zapisu lub nie istnieje."
35
-
36
- #: config.php:60
37
- msgid "Read more."
38
- msgstr "Czytaj więcej."
39
-
40
- #: config.php:85
41
- msgid "Migrate your old AAM settings to the new AAM platform. "
42
- msgstr ""
43
- "Migracja ustawień ze starych wersji AAM (do v1.9.1) do nowej wersji wtyczki "
44
- "AAM."
45
-
46
- #: config.php:86
47
- msgid "Click to Migrate"
48
- msgstr "Kliknij by migrować"
49
-
50
- #: application/view/capability.php:100 application/view/capability.php:199
51
- msgid "System"
52
- msgstr "System"
53
-
54
- #: application/view/capability.php:101 application/view/capability.php:201
55
- msgid "Post & Page"
56
- msgstr "Wpisy i Strony"
57
-
58
- #: application/view/capability.php:102 application/view/capability.php:203
59
- msgid "Backend Interface"
60
- msgstr "Interfejs panelu zarządzania"
61
-
62
- #: application/view/capability.php:103 application/view/capability.php:205
63
- msgid "Miscellaneous"
64
- msgstr "Pozostałe"
65
-
66
- #: application/view/manager.php:59
67
- msgid "Roles"
68
- msgstr "Role"
69
-
70
- #: application/view/manager.php:60
71
- msgid "Role Manager"
72
- msgstr "Zarządzanie rolami"
73
-
74
- #: application/view/manager.php:68
75
- msgid "Users"
76
- msgstr "Użytkownicy"
77
-
78
- #: application/view/manager.php:69
79
- msgid "User Manager"
80
- msgstr "Zarządzanie użytkownikami"
81
-
82
- #: application/view/manager.php:77
83
- msgid "Visitor"
84
- msgstr "Gość"
85
-
86
- #: application/view/manager.php:78
87
- msgid "Visitor Manager"
88
- msgstr "Zarządzaj gośćmi"
89
-
90
- #: application/view/manager.php:95
91
- msgid "Admin Menu"
92
- msgstr "Admin Menu"
93
-
94
- #: application/view/manager.php:98
95
- msgid ""
96
- "Control Access to Admin Menu. Restrict access to entire Menu or Submenu. "
97
- "<b>Notice</b>, the menu is rendered based on Role's or User's capabilities."
98
- msgstr ""
99
- "Kontroluj dostęp do menu administracyjnego. Ogranicz dostęp do całych "
100
- "pozycji menu lub do pozycji podmenu. <b>Wskazówka</b> menu jest dynamicznie "
101
- "generowane zależnie od ról i uprawnień."
102
-
103
- #: application/view/manager.php:103
104
- msgid "Metabox & Widget"
105
- msgstr "Metaboxy i Widżety"
106
-
107
- #: application/view/manager.php:106
108
- msgid ""
109
- "Filter the list of Metaboxes or Widgets for selected Role or User. If "
110
- "metabox or widget is not listed, try to click <b>Refresh the List</b> button "
111
- "or Copy & Paste direct link to page where specific metabox or widget is "
112
- "shown and hit <b>Retrieve Metaboxes from Link</b> button."
113
- msgstr ""
114
- "Filtruj listę Widżetów i Metaboksów dla wybranej roli lub użytkownika. "
115
- "Jeżeli brakuje Metaboxów i/lub Widżetów na liście, kliknij ikonkę <b>Odśwież "
116
- "listę</b> lub skopiuj i wklej bezpośredni odnośnik do strony, gdzie "
117
- "wyświetlają się braujące Metaboksy i/lub Widżety i kliknij ikonkę plusa "
118
- "<b>Wczytaj elementy ze strony</b>"
119
-
120
- #: application/view/manager.php:111
121
- msgid "Capability"
122
- msgstr "Szczegółowe prawa"
123
-
124
- #: application/view/manager.php:114
125
- msgid ""
126
- "Manage the list of Capabilities for selected User or Role. <b>Notice</b>, "
127
- "list of user's capabilities are inherited from user's Role.<br/><b>Warning!</"
128
- "b> Be very careful with capabilities. Deleting or unchecking any capability "
129
- "may cause temporary or permanent constrol lost over some features or "
130
- "WordPress dashboard."
131
- msgstr ""
132
- "Zarządzaj listą uprawnień dla wybranego użytkownia lub roli. <b>Wskazówka</"
133
- "b> Lista uprawnień jest dziedziczona z roli/ról uzytkownika. <b>Ostrzeżenie!"
134
- "</b> Bądź ostrony z uprawnieniami. Usuwanie lub odbieranie uprawnień może "
135
- "spowodować tymczasowy lub całkowity brak dostępu do panelu administracyjnego "
136
- "WordPress."
137
-
138
- #: application/view/manager.php:119
139
- msgid "Posts & Categories"
140
- msgstr "Wpisy i Kategorie"
141
-
142
- #: application/view/manager.php:122
143
- msgid ""
144
- "Manage access to individual <b>Post</b> or <b>Term</b>. Notice, under "
145
- "<b>Post</b>, we assume any post, page or custom post type. And under "
146
- "<b>Term</b> - any term like Post Categories."
147
- msgstr ""
148
- "Zarządzaj dostępen do poszczególnych <b>Wpisów</b> i/lub <b>Typów</b>. "
149
- "Wyjaśnienie, <b>Wpisy</b> rozumiane jako dowolne strony, wpisy lub "
150
- "niestandardowe typy wpisów. <b>Typy</b> rozumiane jako dowolne kategorie."
151
-
152
- #: application/view/manager.php:127
153
- msgid "Event Manager"
154
- msgstr "Menadżer reguł"
155
-
156
- #: application/view/manager.php:130
157
- msgid ""
158
- "Define your own action when some event appeared in your WordPress blog. This "
159
- "sections allows you to trigger an action on event like post content change, "
160
- "or page status update. You can setup to send email notification, change the "
161
- "post status or write your own custom event handler."
162
- msgstr ""
163
- "Zdefiniuj własną akcję dla zdarzeń wystepujących w Twoim WordPress. Ta "
164
- "skecja pozwala ustawić akcję na jakieś zdarzenie np.: zmiana treści wpisu/"
165
- "strony lub statusu. Możesz skonfigurować wysyłanie powiadomień email, "
166
- "zmienić status wpisu/strony lub zdefiniować własną obsługę zdarzenia. "
167
-
168
- #: application/view/manager.php:135
169
- msgid "ConfigPress"
170
- msgstr "Konfiguracja"
171
-
172
- #: application/view/manager.php:138
173
- msgid ""
174
- "Control <b>AAM</b> behavior with ConfigPress. For more details please check "
175
- "<b>ConfigPress tutorial</b>."
176
- msgstr ""
177
- "Konfiguruj <b>AAM</b> przez ConfigPress. Aby uzyskać więcej informacji "
178
- "zapoznaj się <b>poradnikiem ConfigPress</b>."
179
-
180
- #: application/view/manager.php:339
181
- msgid "Rollback Settings"
182
- msgstr "Wycofaj ustawienia"
183
-
184
- #: application/view/manager.php:340
185
- msgid "Cancel"
186
- msgstr "Anuluj"
187
-
188
- #: application/view/manager.php:341
189
- msgid "Send E-mail"
190
- msgstr "Wyślij E-mail"
191
-
192
- #: application/view/manager.php:342 application/view/manager.php:348
193
- msgid "Add New Role"
194
- msgstr "Dodaj nową rolę"
195
-
196
- #: application/view/manager.php:343
197
- msgid "Manage"
198
- msgstr "Zarządzaj/Edytuj"
199
-
200
- #: application/view/manager.php:344
201
- msgid "Edit"
202
- msgstr "Edytuj"
203
-
204
- #: application/view/manager.php:345
205
- msgid "Delete"
206
- msgstr "Usuń"
207
-
208
- #: application/view/manager.php:346
209
- msgid "Filtered"
210
- msgstr "Przefiltrowane"
211
-
212
- #: application/view/manager.php:347
213
- msgid "Clear"
214
- msgstr "Wyczyść"
215
-
216
- #: application/view/manager.php:349
217
- msgid "Save Changes"
218
- msgstr "Zapisz zmiany"
219
-
220
- #: application/view/manager.php:350
221
- #, php-format
222
- msgid ""
223
- "System detected %d user(s) with this role. All Users with Role <b>%s</b> "
224
- "will be deleted automatically!"
225
- msgstr ""
226
- "System wykrył użytkownika/ów z tej roli. Wszyscy użytkownicy z tą rolą "
227
- "zostaną usunięci!"
228
-
229
- #: application/view/manager.php:351
230
- #, php-format
231
- msgid "Are you sure that you want to delete role <b>%s</b>?"
232
- msgstr "Czy na pewno chcesz usunąć rolę/e?"
233
-
234
- #: application/view/manager.php:352
235
- msgid "Delete Role"
236
- msgstr "Usuń rolę"
237
-
238
- #: application/view/manager.php:353
239
- msgid "Add User"
240
- msgstr "Dodaj użytkownika"
241
-
242
- #: application/view/manager.php:354
243
- msgid "Filter Users"
244
- msgstr "FIltruj uzytkowników"
245
-
246
- #: application/view/manager.php:355 application/view/manager.php:371
247
- msgid "Refresh List"
248
- msgstr "Odśwież listę"
249
-
250
- #: application/view/manager.php:356
251
- msgid "Block"
252
- msgstr "Zablokuj"
253
-
254
- #: application/view/manager.php:357
255
- #, php-format
256
- msgid "Are you sure you want to delete user <b>%s</b>?"
257
- msgstr "Czy na pewno chcesz usunąć użytkownika/ów?"
258
-
259
- #: application/view/manager.php:358
260
- msgid "Filter Capabilities by Category"
261
- msgstr "Filtruj prawa wg kategorii"
262
-
263
- #: application/view/manager.php:359
264
- msgid "Inherit Capabilities"
265
- msgstr "Dziedzicz prawa"
266
-
267
- #: application/view/manager.php:360
268
- msgid "Add New Capability"
269
- msgstr "Dodaj nowe prawo"
270
-
271
- #: application/view/manager.php:361
272
- #, php-format
273
- msgid "Are you sure that you want to delete capability <b>%s</b>?"
274
- msgstr "Czy na pewno chcesz usunąć pozycję/e?"
275
-
276
- #: application/view/manager.php:362
277
- msgid "Delete Capability"
278
- msgstr "Usuń pozycję"
279
-
280
- #: application/view/manager.php:363
281
- msgid "Select Role"
282
- msgstr "Wybierz rolę"
283
-
284
- #: application/view/manager.php:364
285
- msgid "Add Capability"
286
- msgstr "Dodaj pozycję"
287
-
288
- #: application/view/manager.php:365
289
- msgid "Add Event"
290
- msgstr "Dodaj regułę"
291
-
292
- #: application/view/manager.php:366
293
- msgid "Edit Event"
294
- msgstr "Edytuj regułę"
295
-
296
- #: application/view/manager.php:367 application/view/manager.php:369
297
- msgid "Delete Event"
298
- msgstr "Usuń regułę"
299
-
300
- #: application/view/manager.php:368
301
- msgid "Save Event"
302
- msgstr "Zapisz regułę"
303
-
304
- #: application/view/manager.php:370
305
- msgid "Filter Posts by Post Type"
306
- msgstr "Filtruj wpisy typy wpisów"
307
-
308
- #: application/view/manager.php:372
309
- msgid "Restore Default"
310
- msgstr "Przywróć domyślne"
311
-
312
- #: application/view/manager.php:373
313
- msgid "Apply"
314
- msgstr "Zastosuj"
315
-
316
- #: application/view/manager.php:374
317
- msgid "Edit Term"
318
- msgstr "Edytuj termin"
319
-
320
- #: application/view/manager.php:375
321
- msgid "Manager Access"
322
- msgstr "Menadżer dostępu"
323
-
324
- #: application/view/manager.php:376
325
- msgid "Unlock Default Accesss Control"
326
- msgstr "Odblokuj domyślną kontrolę dostępu"
327
-
328
- #: application/view/manager.php:377
329
- msgid "Close"
330
- msgstr "Zamknij"
331
-
332
- #: application/view/manager.php:378
333
- msgid "Edit Role"
334
- msgstr "Edytuj rolę"
335
-
336
- #: application/view/manager.php:379
337
- msgid "Restore Default Capabilities"
338
- msgstr "Przywróć domyślne"
339
-
340
- #: application/view/metabox.php:185
341
- msgid "Dashboard Widgets"
342
- msgstr "Widżety panelu"
343
-
344
- #: application/view/metabox.php:189
345
- msgid "Frontend Widgets"
346
- msgstr "Widżety strony"
347
-
348
- #: application/view/post.php:181
349
- msgid "[empty]"
350
- msgstr "[puste]"
351
-
352
- #: application/view/post.php:345 application/view/post.php:353
353
- msgid "All"
354
- msgstr "Wszystkie"
355
-
356
- #: extension/AAM_Multisite_Support/extension.php:125
357
- msgid "Sites"
358
- msgstr "Strony"
359
-
360
- #: extension/AAM_Multisite_Support/extension.php:126
361
- msgid "Site Manager"
362
- msgstr "Zarządzanie stroną"
363
-
364
- #: extension/AAM_Multisite_Support/extension.php:189
365
- msgid "Set Default"
366
- msgstr "Ustaw domyślne"
367
-
368
- #: extension/AAM_Multisite_Support/extension.php:190
369
- msgid "Unset Default"
370
- msgstr "Odznacz domyślne"
371
-
372
- #: extension/AAM_Multisite_Support/extension.php:191
373
- msgid "Set as Default"
374
- msgstr "Zaznacz jako domyślne"
375
-
376
- #: extension/AAM_My_Feature/extension.php:50
377
- msgid "My Feature"
378
- msgstr "Moje funckcje"
379
-
380
- #: extension/AAM_My_Feature/extension.php:53
381
- msgid "My customly developed feature"
382
- msgstr "Własna funkcjonalność"
383
-
384
- #~ msgid "Miscelaneous"
385
- #~ msgstr "Pozostałe"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
lang/aam-ru_RU.mo DELETED
Binary file
lang/aam-ru_RU.po DELETED
@@ -1,334 +0,0 @@
1
- msgid ""
2
- msgstr ""
3
- "Project-Id-Version: AAM\n"
4
- "POT-Creation-Date: 2013-12-01 14:07-0500\n"
5
- "PO-Revision-Date: 2014-01-31 21:24+0400\n"
6
- "Last-Translator: Maxim Kernozhitskiy <maxim@aeromultimedia.com>\n"
7
- "Language-Team: WPAAM <support@wpaam.com>\n"
8
- "MIME-Version: 1.0\n"
9
- "Content-Type: text/plain; charset=UTF-8\n"
10
- "Content-Transfer-Encoding: 8bit\n"
11
- "Language: en_US\n"
12
- "X-Generator: Poedit 1.5.7\n"
13
-
14
- #: aam.php:243 aam.php:248 aam.php:267
15
- msgid "Access denied"
16
- msgstr "Доступ запрещен"
17
-
18
- #: aam.php:691 aam.php:692
19
- msgid "AAM"
20
- msgstr "AAM"
21
-
22
- #: aam.php:701 aam.php:702
23
- msgid "Access Control"
24
- msgstr "Контроль доступа"
25
-
26
- #: aam.php:709 aam.php:710
27
- msgid "Extensions"
28
- msgstr "Расширение"
29
-
30
- #: application/view/capability.php:98 application/view/capability.php:179
31
- msgid "System"
32
- msgstr "Система"
33
-
34
- #: application/view/capability.php:99 application/view/capability.php:181
35
- msgid "Post & Page"
36
- msgstr "Пост и Страница"
37
-
38
- #: application/view/capability.php:100 application/view/capability.php:183
39
- msgid "Backend Interface"
40
- msgstr "Интерфейс Админа"
41
-
42
- #: application/view/capability.php:101
43
- msgid "Miscellaneous"
44
- msgstr "Разное"
45
-
46
- #: application/view/capability.php:185
47
- msgid "Miscelaneous"
48
- msgstr "Разное"
49
-
50
- #: application/view/manager.php:59
51
- msgid "Roles"
52
- msgstr "Роли"
53
-
54
- #: application/view/manager.php:60
55
- msgid "Role Manager"
56
- msgstr "Менеджер ролей"
57
-
58
- #: application/view/manager.php:68
59
- msgid "Users"
60
- msgstr "Пользователи"
61
-
62
- #: application/view/manager.php:69
63
- msgid "User Manager"
64
- msgstr "Менеджер пользователей"
65
-
66
- #: application/view/manager.php:77
67
- msgid "Visitor"
68
- msgstr "Посетители"
69
-
70
- #: application/view/manager.php:78
71
- msgid "Visitor Manager"
72
- msgstr "Менеджер посетителей"
73
-
74
- #: application/view/manager.php:95
75
- msgid "Admin Menu"
76
- msgstr "Меню Админа"
77
-
78
- #: application/view/manager.php:98
79
- msgid ""
80
- "Control Access to Admin Menu. Restrict access to entire Menu or Submenu. "
81
- "<b>Notice</b>, the menu is rendered based on Role's or User's capabilities."
82
- msgstr ""
83
- "Контроль доступа к меню Администратора. Запретить доступ ко всему меню или в "
84
- "подменю. <b>Внимание</b>, меню отображается основываясь на Роли или доступе "
85
- "пользователя."
86
-
87
- #: application/view/manager.php:103
88
- msgid "Metabox & Widget"
89
- msgstr "Виджеты и Метабоксы"
90
-
91
- #: application/view/manager.php:106
92
- msgid ""
93
- "Filter the list of Metaboxes or Widgets for selected Role or User. If "
94
- "metabox or widget is not listed, try to click <b>Refresh the List</b> button "
95
- "or Copy & Paste direct link to page where specific metabox or widget is "
96
- "shown and hit <b>Retrieve Metaboxes from Link</b> button."
97
- msgstr ""
98
- "Фильтрует лист Виджетов или Метабоксов для выбранной Роли Пользователя. Если "
99
- "метабокс или виджет не в списке попробуйте нажать кнопку <b>Обновить список</"
100
- "b> или скопировать и вставить прямую ссылку на страницу, где показан "
101
- "метабокс или виджет и нажать кнопку <b>Извлеч Метабоксы из ссылки</b>"
102
-
103
- #: application/view/manager.php:111
104
- msgid "Capability"
105
- msgstr "Возможность"
106
-
107
- #: application/view/manager.php:114
108
- msgid ""
109
- "Manage the list of Capabilities for selected User or Role. <b>Notice</b>, "
110
- "list of user's capabilities are inherited from user's Role.<br/><b>Warning!</"
111
- "b> Be very careful with capabilities. Deleting or unchecking any capability "
112
- "may cause temporary or permanent constrol lost over some features or "
113
- "WordPress dashboard."
114
- msgstr ""
115
- "Управляйте листом возможностей для выбранных Пользователя или Роли. "
116
- "<b>Внимание</b>, лист пользовательских возможностей унаследован от Роли "
117
- "пользователя.<br/> <b>ВНИМАНИЕ!</b> будьте осторожны с возможностями. "
118
- "Удаление или снятие некоторых возможностей пользователя может привести к "
119
- "временной, либо постоянной потере контроля над некоторыми функциями "
120
- "Wordpress."
121
-
122
- #: application/view/manager.php:119
123
- msgid "Posts & Categories"
124
- msgstr "Посты и Категории"
125
-
126
- #: application/view/manager.php:122
127
- msgid ""
128
- "Manage access to individual <b>Post</b> or <b>Term</b>. Notice, under "
129
- "<b>Post</b>, we assume any post, page or custom post type. And under "
130
- "<b>Term</b> - any term like Post Categories."
131
- msgstr ""
132
- "Управляйте доступом к индивидуальным <b>Постам</b> или <b>Терминам</b>. "
133
- "Понятие <b>Пост</b> в данном случае - любой пост, страница или Собственный "
134
- "тип поста. А под <b>Термином</b> - любой термин типа Категории поста."
135
-
136
- #: application/view/manager.php:127
137
- msgid "Event Manager"
138
- msgstr "Менеджер событий"
139
-
140
- #: application/view/manager.php:130
141
- msgid ""
142
- "Define your own action when some event appeared in your WordPress blog. This "
143
- "sections allows you to trigger an action on event like post content change, "
144
- "or page status update. You can setup to send email notification, change the "
145
- "post status or write your own custom event handler."
146
- msgstr ""
147
- "Укажите ваше собственное действие, когда происходит некоторое событие в "
148
- "Wordpress. Эта секция позволяет вам отрабатывать действие или даже изменение "
149
- "контента, или изменение статуса страницы. Вы можете отправлять уведомления "
150
- "на email, менять статус поста или написать свой собственный обработчик."
151
-
152
- #: application/view/manager.php:135
153
- msgid "ConfigPress"
154
- msgstr "ConfigPress"
155
-
156
- #: application/view/manager.php:138
157
- msgid ""
158
- "Control <b>AAM</b> behavior with ConfigPress. For more details please check "
159
- "<b>ConfigPress tutorial</b>."
160
- msgstr ""
161
- "Контролируйте поведение <b>AAM</b> с ConfigPress. Для подробностей "
162
- "посмотрите <b>ConfigPress туториал</b>."
163
-
164
- #: application/view/manager.php:342
165
- msgid "Rollback Settings"
166
- msgstr "Настройки Rollback"
167
-
168
- #: application/view/manager.php:343
169
- msgid "Cancel"
170
- msgstr "Отменить"
171
-
172
- #: application/view/manager.php:344
173
- msgid "Send E-mail"
174
- msgstr "Отправить E-mail"
175
-
176
- #: application/view/manager.php:345 application/view/manager.php:351
177
- msgid "Add New Role"
178
- msgstr "Добавить Роль"
179
-
180
- #: application/view/manager.php:346
181
- msgid "Manage"
182
- msgstr "Управление"
183
-
184
- #: application/view/manager.php:347
185
- msgid "Edit"
186
- msgstr "Редактировать"
187
-
188
- #: application/view/manager.php:348
189
- msgid "Delete"
190
- msgstr "Удалить"
191
-
192
- #: application/view/manager.php:349
193
- msgid "Filtered"
194
- msgstr "Фильтровано"
195
-
196
- #: application/view/manager.php:350
197
- msgid "Clear"
198
- msgstr "Отчистить"
199
-
200
- #: application/view/manager.php:352
201
- msgid "Save Changes"
202
- msgstr "Сохранить изменения"
203
-
204
- #: application/view/manager.php:353
205
- #, php-format
206
- msgid ""
207
- "System detected %d user(s) with this role. All Users with Role <b>%s</b> "
208
- "will be deleted automatically!"
209
- msgstr ""
210
- "Система определила %d пользователя(лей) с этой ролью. Все Пользователи с "
211
- "Ролью <b>%s</b> будут удалены автоматически!"
212
-
213
- #: application/view/manager.php:354
214
- #, php-format
215
- msgid "Are you sure that you want to delete role <b>%s</b>?"
216
- msgstr "Вы уверены, что хотите удалить роль <b>%s</b>?"
217
-
218
- #: application/view/manager.php:355
219
- msgid "Delete Role"
220
- msgstr "Удалить Роль"
221
-
222
- #: application/view/manager.php:356
223
- msgid "Add User"
224
- msgstr "Добавить пользователя"
225
-
226
- #: application/view/manager.php:357
227
- msgid "Filter Users"
228
- msgstr "Фильтр пользователей"
229
-
230
- #: application/view/manager.php:358 application/view/manager.php:374
231
- msgid "Refresh List"
232
- msgstr "Обновить список"
233
-
234
- #: application/view/manager.php:359
235
- msgid "Block"
236
- msgstr "Заблокировать"
237
-
238
- #: application/view/manager.php:360
239
- #, php-format
240
- msgid "Are you sure you want to delete user <b>%s</b>?"
241
- msgstr "Вы уверены, что хотите удалить пользователя <b>%s</b>?"
242
-
243
- #: application/view/manager.php:361
244
- msgid "Filter Capabilities by Category"
245
- msgstr "Фильтр возможностей по категории"
246
-
247
- #: application/view/manager.php:362
248
- msgid "Inherit Capabilities"
249
- msgstr "Назледовать возможности"
250
-
251
- #: application/view/manager.php:363
252
- msgid "Add New Capability"
253
- msgstr "Добавить новую возможность"
254
-
255
- #: application/view/manager.php:364
256
- #, php-format
257
- msgid "Are you sure that you want to delete capability <b>%s</b>?"
258
- msgstr "Вы уверены, что хотите удалить возможность <b>%s</b>?"
259
-
260
- #: application/view/manager.php:365
261
- msgid "Delete Capability"
262
- msgstr "Удалить возможность"
263
-
264
- #: application/view/manager.php:366
265
- msgid "Select Role"
266
- msgstr "Выбрать роль"
267
-
268
- #: application/view/manager.php:367
269
- msgid "Add Capability"
270
- msgstr "Добавить возможность"
271
-
272
- #: application/view/manager.php:368
273
- msgid "Add Event"
274
- msgstr "Добавить событие"
275
-
276
- #: application/view/manager.php:369
277
- msgid "Edit Event"
278
- msgstr "Редактировать событие"
279
-
280
- #: application/view/manager.php:370 application/view/manager.php:372
281
- msgid "Delete Event"
282
- msgstr "Удалить событие"
283
-
284
- #: application/view/manager.php:371
285
- msgid "Save Event"
286
- msgstr "Сохранить событие"
287
-
288
- #: application/view/manager.php:373
289
- msgid "Filter Posts by Post Type"
290
- msgstr "Фильтр постов по Типу"
291
-
292
- #: application/view/manager.php:375
293
- msgid "Restore Default"
294
- msgstr "Сбросить настройки"
295
-
296
- #: application/view/manager.php:376
297
- msgid "Apply"
298
- msgstr "Применить"
299
-
300
- #: application/view/manager.php:377
301
- msgid "Edit Term"
302
- msgstr "Редактировать Термин"
303
-
304
- #: application/view/manager.php:378
305
- msgid "Manager Access"
306
- msgstr "Диспетчер доступу"
307
-
308
- #: application/view/manager.php:379
309
- msgid "Unlock Default Accesss Control"
310
- msgstr "Разблокировать стандартный контроль доступа"
311
-
312
- #: application/view/manager.php:380
313
- msgid "Close"
314
- msgstr "Закрыть"
315
-
316
- #: application/view/manager.php:381
317
- msgid "Edit Role"
318
- msgstr "Редактировать роль"
319
-
320
- #: application/view/metabox.php:179
321
- msgid "Dashboard Widgets"
322
- msgstr "Панель виджетов"
323
-
324
- #: application/view/metabox.php:183
325
- msgid "Frontend Widgets"
326
- msgstr "Frontend виджеты"
327
-
328
- #: application/view/post.php:181
329
- msgid "[empty]"
330
- msgstr "[пусто]"
331
-
332
- #: application/view/post.php:345 application/view/post.php:353
333
- msgid "All"
334
- msgstr "Все"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
lang/aam.mo DELETED
Binary file
lang/aam.pot DELETED
@@ -1,850 +0,0 @@
1
- msgid ""
2
- msgstr ""
3
- "Project-Id-Version: AAM\n"
4
- "POT-Creation-Date: 2014-05-04 19:41-0500\n"
5
- "PO-Revision-Date: \n"
6
- "Last-Translator: WPAAM <support@wpaam.com>\n"
7
- "Language-Team: WP AAM <support@wpaam.com>\n"
8
- "Language: en\n"
9
- "MIME-Version: 1.0\n"
10
- "Content-Type: text/plain; charset=UTF-8\n"
11
- "Content-Transfer-Encoding: 8bit\n"
12
- "X-Generator: Poedit 1.6.5\n"
13
- "Plural-Forms: nplurals=2; plural=(n != 1);\n"
14
- "X-Poedit-SourceCharset: UTF-8\n"
15
- "X-Poedit-KeywordsList: __\n"
16
- "X-Poedit-Basepath: d:\\xampp\\htdocs\\aam\\wp-content\\plugins\\aam\\\n"
17
- "X-Poedit-SearchPath-0: .\n"
18
-
19
- #: aam.php:404 aam.php:412 aam.php:439
20
- msgid "Access denied"
21
- msgstr ""
22
-
23
- #: aam.php:927 aam.php:928
24
- msgid "AAM"
25
- msgstr ""
26
-
27
- #: aam.php:939 aam.php:940
28
- msgid "Access Control"
29
- msgstr ""
30
-
31
- #: aam.php:949 aam.php:950
32
- msgid "ConfigPress"
33
- msgstr ""
34
-
35
- #: aam.php:959 aam.php:960
36
- msgid "Extensions"
37
- msgstr ""
38
-
39
- #: application/core/repository.php:261
40
- msgid "Failed to Remove Extension"
41
- msgstr ""
42
-
43
- #: application/core/repository.php:306
44
- msgid "Invalid License Key"
45
- msgstr ""
46
-
47
- #: application/core/repository.php:309
48
- msgid "Failed to write file to wp-content/aam folder"
49
- msgstr ""
50
-
51
- #: application/core/repository.php:313
52
- msgid "Failed to reach the WPAAM Server"
53
- msgstr ""
54
-
55
- #: application/core/repository.php:329
56
- msgid "Failed to insert extension to extension folder"
57
- msgstr ""
58
-
59
- #: application/view/abstract.php:81
60
- msgid "You are not allowed to manager current view"
61
- msgstr ""
62
-
63
- #: application/view/capability.php:101 application/view/capability.php:205
64
- msgid "System"
65
- msgstr ""
66
-
67
- #: application/view/capability.php:102 application/view/capability.php:207
68
- msgid "Post & Page"
69
- msgstr ""
70
-
71
- #: application/view/capability.php:103 application/view/capability.php:209
72
- msgid "Backend Interface"
73
- msgstr ""
74
-
75
- #: application/view/capability.php:104 application/view/capability.php:211
76
- msgid "Miscellaneous"
77
- msgstr ""
78
-
79
- #: application/view/extension.php:100
80
- msgid "Folder advanced-access-manager/extension is not writable"
81
- msgstr ""
82
-
83
- #: application/view/manager.php:76
84
- msgid "Roles"
85
- msgstr ""
86
-
87
- #: application/view/manager.php:77
88
- msgid "Role Manager"
89
- msgstr ""
90
-
91
- #: application/view/manager.php:86
92
- msgid "Users"
93
- msgstr ""
94
-
95
- #: application/view/manager.php:87
96
- msgid "User Manager"
97
- msgstr ""
98
-
99
- #: application/view/manager.php:96
100
- msgid "Visitor"
101
- msgstr ""
102
-
103
- #: application/view/manager.php:97
104
- msgid "Visitor Manager"
105
- msgstr ""
106
-
107
- #: application/view/manager.php:120
108
- msgid "Admin Menu"
109
- msgstr ""
110
-
111
- #: application/view/manager.php:132
112
- msgid "Metabox & Widget"
113
- msgstr ""
114
-
115
- #: application/view/manager.php:145 application/view/tmpl/capability.phtml:17
116
- #: application/view/tmpl/control_area.phtml:47
117
- #: application/view/tmpl/control_area.phtml:94
118
- #: application/view/tmpl/control_area.phtml:148
119
- #: application/view/tmpl/control_area.phtml:199
120
- #: extension/AAM_Plus_Package/ui.phtml:28
121
- #: extension/AAM_Plus_Package/ui.phtml:60
122
- #: extension/AAM_Plus_Package/ui.phtml:93
123
- #: extension/AAM_Plus_Package/ui.phtml:125
124
- msgid "Capability"
125
- msgstr ""
126
-
127
- #: application/view/manager.php:156
128
- msgid "Posts & Pages"
129
- msgstr ""
130
-
131
- #: application/view/manager.php:169
132
- msgid "Event Manager"
133
- msgstr ""
134
-
135
- #: application/view/manager.php:241
136
- msgid "You are not allowed to manage any AAM Features."
137
- msgstr ""
138
-
139
- #: application/view/manager.php:820
140
- msgid "Rollback Settings"
141
- msgstr ""
142
-
143
- #: application/view/manager.php:821
144
- msgid "Cancel"
145
- msgstr ""
146
-
147
- #: application/view/manager.php:822
148
- msgid "Send E-mail"
149
- msgstr ""
150
-
151
- #: application/view/manager.php:823 application/view/manager.php:829
152
- msgid "Add New Role"
153
- msgstr ""
154
-
155
- #: application/view/manager.php:824
156
- msgid "Manage"
157
- msgstr ""
158
-
159
- #: application/view/manager.php:825
160
- msgid "Edit"
161
- msgstr ""
162
-
163
- #: application/view/manager.php:826
164
- msgid "Delete"
165
- msgstr ""
166
-
167
- #: application/view/manager.php:827
168
- msgid "Filtered"
169
- msgstr ""
170
-
171
- #: application/view/manager.php:828
172
- msgid "Clear"
173
- msgstr ""
174
-
175
- #: application/view/manager.php:830
176
- msgid "Save Changes"
177
- msgstr ""
178
-
179
- #: application/view/manager.php:831
180
- #, php-format
181
- msgid ""
182
- "System detected %d user(s) with this role. All Users with Role <b>%s</b> "
183
- "will be deleted automatically!"
184
- msgstr ""
185
-
186
- #: application/view/manager.php:832
187
- #, php-format
188
- msgid "Are you sure that you want to delete role <b>%s</b>?"
189
- msgstr ""
190
-
191
- #: application/view/manager.php:833 application/view/tmpl/role.phtml:53
192
- msgid "Delete Role"
193
- msgstr ""
194
-
195
- #: application/view/manager.php:834
196
- msgid "Add User"
197
- msgstr ""
198
-
199
- #: application/view/manager.php:835
200
- msgid "Filter Users"
201
- msgstr ""
202
-
203
- #: application/view/manager.php:836 application/view/manager.php:852
204
- msgid "Refresh List"
205
- msgstr ""
206
-
207
- #: application/view/manager.php:837
208
- msgid "Block"
209
- msgstr ""
210
-
211
- #: application/view/manager.php:838
212
- #, php-format
213
- msgid "Are you sure you want to delete user <b>%s</b>?"
214
- msgstr ""
215
-
216
- #: application/view/manager.php:839
217
- msgid "Filter Capabilities by Category"
218
- msgstr ""
219
-
220
- #: application/view/manager.php:840 application/view/tmpl/capability.phtml:47
221
- msgid "Inherit Capabilities"
222
- msgstr ""
223
-
224
- #: application/view/manager.php:841 application/view/tmpl/capability.phtml:62
225
- msgid "Add New Capability"
226
- msgstr ""
227
-
228
- #: application/view/manager.php:842
229
- #, php-format
230
- msgid "Are you sure that you want to delete capability <b>%s</b>?"
231
- msgstr ""
232
-
233
- #: application/view/manager.php:843 application/view/tmpl/capability.phtml:81
234
- msgid "Delete Capability"
235
- msgstr ""
236
-
237
- #: application/view/manager.php:844
238
- msgid "Select Role"
239
- msgstr ""
240
-
241
- #: application/view/manager.php:845
242
- msgid "Add Capability"
243
- msgstr ""
244
-
245
- #: application/view/manager.php:846
246
- msgid "Add Event"
247
- msgstr ""
248
-
249
- #: application/view/manager.php:847
250
- msgid "Edit Event"
251
- msgstr ""
252
-
253
- #: application/view/manager.php:848 application/view/manager.php:850
254
- #: application/view/tmpl/event.phtml:105
255
- msgid "Delete Event"
256
- msgstr ""
257
-
258
- #: application/view/manager.php:849
259
- msgid "Save Event"
260
- msgstr ""
261
-
262
- #: application/view/manager.php:851
263
- msgid "Filter Posts by Post Type"
264
- msgstr ""
265
-
266
- #: application/view/manager.php:853 application/view/tmpl/manager.phtml:63
267
- msgid "Restore Default"
268
- msgstr ""
269
-
270
- #: application/view/manager.php:854
271
- msgid "Apply"
272
- msgstr ""
273
-
274
- #: application/view/manager.php:855
275
- msgid "Edit Term"
276
- msgstr ""
277
-
278
- #: application/view/manager.php:856
279
- msgid "Manager Access"
280
- msgstr ""
281
-
282
- #: application/view/manager.php:857
283
- msgid "Unlock Default Accesss Control"
284
- msgstr ""
285
-
286
- #: application/view/manager.php:858
287
- msgid "Close"
288
- msgstr ""
289
-
290
- #: application/view/manager.php:859
291
- msgid "Edit Role"
292
- msgstr ""
293
-
294
- #: application/view/manager.php:860
295
- msgid "Restore Default Capabilities"
296
- msgstr ""
297
-
298
- #: application/view/manager.php:861
299
- #, php-format
300
- msgid "Are you sure you want to delete <b>%s</b>?"
301
- msgstr ""
302
-
303
- #: application/view/manager.php:862
304
- #, php-format
305
- msgid "Are you sure you want to move <b>%s</b> to trash?"
306
- msgstr ""
307
-
308
- #: application/view/manager.php:863 application/view/tmpl/post.phtml:27
309
- msgid "Delete Post"
310
- msgstr ""
311
-
312
- #: application/view/manager.php:864
313
- msgid "Delete Permanently"
314
- msgstr ""
315
-
316
- #: application/view/manager.php:865
317
- msgid "Trash Post"
318
- msgstr ""
319
-
320
- #: application/view/manager.php:866
321
- msgid "Restore Default Access"
322
- msgstr ""
323
-
324
- #: application/view/manager.php:867
325
- msgid "Duplicate"
326
- msgstr ""
327
-
328
- #: application/view/manager.php:868
329
- msgid "Actions Locked"
330
- msgstr ""
331
-
332
- #: application/view/manager.php:869
333
- msgid ""
334
- "<h3>AAM Documentation</h3><div class=\"inner\">Find more information about "
335
- "Advanced Access Manager here.</div>"
336
- msgstr ""
337
-
338
- #: application/view/metabox.php:191
339
- msgid "Dashboard Widgets"
340
- msgstr ""
341
-
342
- #: application/view/metabox.php:195
343
- msgid "Frontend Widgets"
344
- msgstr ""
345
-
346
- #: application/view/post.php:199
347
- msgid "[empty]"
348
- msgstr ""
349
-
350
- #: application/view/post.php:383 application/view/post.php:391
351
- msgid "All"
352
- msgstr ""
353
-
354
- #: config.php:62
355
- msgid "Failed to create wp-content/aam folder"
356
- msgstr ""
357
-
358
- #: config.php:65
359
- msgid "Folder wp-content/aam is not writable"
360
- msgstr ""
361
-
362
- #: extension/AAM_Activity_Log/activity.php:98
363
- msgid "System Login"
364
- msgstr ""
365
-
366
- #: extension/AAM_Activity_Log/activity.php:102
367
- msgid "System Logout"
368
- msgstr ""
369
-
370
- #: extension/AAM_Activity_Log/activity.php:108
371
- msgid "Unknown Activity"
372
- msgstr ""
373
-
374
- #: extension/AAM_Activity_Log/extension.php:72
375
- msgid "Activity Log"
376
- msgstr ""
377
-
378
- #: extension/AAM_Activity_Log/extension.php:177
379
- msgid "Clear Logs"
380
- msgstr ""
381
-
382
- #: extension/AAM_Activity_Log/extension.php:178
383
- msgid "Get More"
384
- msgstr ""
385
-
386
- #: extension/AAM_Multisite_Support/extension.php:122
387
- msgid "Sites"
388
- msgstr ""
389
-
390
- #: extension/AAM_Multisite_Support/extension.php:123
391
- msgid "Site Manager"
392
- msgstr ""
393
-
394
- #: extension/AAM_Multisite_Support/extension.php:186
395
- msgid "Set Default"
396
- msgstr ""
397
-
398
- #: extension/AAM_Multisite_Support/extension.php:187
399
- msgid "Unset Default"
400
- msgstr ""
401
-
402
- #: extension/AAM_Multisite_Support/extension.php:188
403
- msgid "Set as Default"
404
- msgstr ""
405
-
406
- #: extension/AAM_My_Feature/extension.php:56
407
- msgid "My Feature"
408
- msgstr ""
409
-
410
- #: extension/AAM_Plus_Package/extension.php:168
411
- msgid "Comments"
412
- msgstr ""
413
-
414
- #: application/view/tmpl/capability.phtml:16
415
- msgid "Category"
416
- msgstr ""
417
-
418
- #: application/view/tmpl/capability.phtml:18
419
- #: application/view/tmpl/event.phtml:19 application/view/tmpl/post.phtml:19
420
- msgid "Control"
421
- msgstr ""
422
-
423
- #: application/view/tmpl/capability.phtml:24
424
- msgid "Filter Capability List"
425
- msgstr ""
426
-
427
- #: application/view/tmpl/capability.phtml:28
428
- msgid "Group Name"
429
- msgstr ""
430
-
431
- #: application/view/tmpl/capability.phtml:29
432
- msgid "Select"
433
- msgstr ""
434
-
435
- #: application/view/tmpl/capability.phtml:53
436
- #: application/view/tmpl/role.phtml:27 application/view/tmpl/role.phtml:46
437
- #: application/view/tmpl/user.phtml:31
438
- msgid "Role Name"
439
- msgstr ""
440
-
441
- #: application/view/tmpl/capability.phtml:54
442
- #: application/view/tmpl/event.phtml:17 application/view/tmpl/event.phtml:65
443
- #: application/view/tmpl/role.phtml:17 application/view/tmpl/user.phtml:17
444
- #: application/view/tmpl/user.phtml:32
445
- #: extension/AAM_Multisite_Support/ui.phtml:18
446
- msgid "Action"
447
- msgstr ""
448
-
449
- #: application/view/tmpl/capability.phtml:66
450
- msgid "Capability Name"
451
- msgstr ""
452
-
453
- #: application/view/tmpl/capability.phtml:70
454
- msgid "Keep Unfiltered"
455
- msgstr ""
456
-
457
- #: application/view/tmpl/configpress.phtml:15
458
- #: application/view/tmpl/configpress.phtml:34
459
- #: application/view/tmpl/configpress.phtml:53
460
- #: application/view/tmpl/extension.phtml:15
461
- #: application/view/tmpl/extension.phtml:148
462
- #: application/view/tmpl/extension.phtml:167
463
- #: application/view/tmpl/extension.phtml:187
464
- #: application/view/tmpl/manager.phtml:17
465
- #: application/view/tmpl/manager.phtml:38
466
- #: application/view/tmpl/manager.phtml:57
467
- #: application/view/tmpl/manager.phtml:87
468
- msgid "Click to toggle"
469
- msgstr ""
470
-
471
- #: application/view/tmpl/configpress.phtml:18
472
- msgid "AAM ConfigPress"
473
- msgstr ""
474
-
475
- #: application/view/tmpl/configpress.phtml:36
476
- #: application/view/tmpl/extension.phtml:150
477
- #: application/view/tmpl/manager.phtml:40
478
- msgid "AAM Warnings"
479
- msgstr ""
480
-
481
- #: application/view/tmpl/configpress.phtml:55
482
- #: application/view/tmpl/manager.phtml:59
483
- msgid "Control Panel"
484
- msgstr ""
485
-
486
- #: application/view/tmpl/configpress.phtml:59
487
- #: application/view/tmpl/manager.phtml:64
488
- msgid "Save"
489
- msgstr ""
490
-
491
- #: application/view/tmpl/configpress.phtml:62
492
- #: application/view/tmpl/manager.phtml:67
493
- msgid "Follow @wpaam"
494
- msgstr ""
495
-
496
- #: application/view/tmpl/configpress.phtml:62
497
- #: application/view/tmpl/manager.phtml:67
498
- msgid "Follow"
499
- msgstr ""
500
-
501
- #: application/view/tmpl/configpress.phtml:63
502
- #: application/view/tmpl/manager.phtml:68
503
- msgid "Help Forum"
504
- msgstr ""
505
-
506
- #: application/view/tmpl/configpress.phtml:63
507
- #: application/view/tmpl/manager.phtml:68
508
- msgid "Help"
509
- msgstr ""
510
-
511
- #: application/view/tmpl/configpress.phtml:64
512
- #: application/view/tmpl/manager.phtml:69
513
- #: application/view/tmpl/manager.phtml:77
514
- msgid "E-mail Us"
515
- msgstr ""
516
-
517
- #: application/view/tmpl/configpress.phtml:65
518
- #: application/view/tmpl/manager.phtml:70
519
- msgid "Rate AAM"
520
- msgstr ""
521
-
522
- #: application/view/tmpl/configpress.phtml:65
523
- #: application/view/tmpl/manager.phtml:70
524
- msgid "Rate Us"
525
- msgstr ""
526
-
527
- #: application/view/tmpl/control_area.phtml:43
528
- #: application/view/tmpl/control_area.phtml:90
529
- #: application/view/tmpl/control_area.phtml:142
530
- #: application/view/tmpl/control_area.phtml:193
531
- msgid "Access"
532
- msgstr ""
533
-
534
- #: application/view/tmpl/control_area.phtml:48
535
- #: application/view/tmpl/control_area.phtml:95
536
- #: application/view/tmpl/control_area.phtml:149
537
- #: application/view/tmpl/control_area.phtml:200
538
- #: extension/AAM_Plus_Package/ui.phtml:29
539
- #: extension/AAM_Plus_Package/ui.phtml:61
540
- #: extension/AAM_Plus_Package/ui.phtml:94
541
- #: extension/AAM_Plus_Package/ui.phtml:126
542
- msgid "Restrict"
543
- msgstr ""
544
-
545
- #: application/view/tmpl/control_area.phtml:140
546
- #: application/view/tmpl/control_area.phtml:191
547
- #, php-format
548
- msgid "All %s in Term"
549
- msgstr ""
550
-
551
- #: application/view/tmpl/control_area.phtml:239
552
- msgid "Get AAM Plus Package"
553
- msgstr ""
554
-
555
- #: application/view/tmpl/event.phtml:14 application/view/tmpl/event.phtml:28
556
- msgid "Event"
557
- msgstr ""
558
-
559
- #: application/view/tmpl/event.phtml:15
560
- msgid "Event Specifier"
561
- msgstr ""
562
-
563
- #: application/view/tmpl/event.phtml:16
564
- msgid "Bind Post Type"
565
- msgstr ""
566
-
567
- #: application/view/tmpl/event.phtml:18
568
- msgid "Action Specifier"
569
- msgstr ""
570
-
571
- #: application/view/tmpl/event.phtml:24
572
- msgid "Manager Event"
573
- msgstr ""
574
-
575
- #: application/view/tmpl/event.phtml:31
576
- msgid "Post Status Change"
577
- msgstr ""
578
-
579
- #: application/view/tmpl/event.phtml:32
580
- msgid "Post Content Change"
581
- msgstr ""
582
-
583
- #: application/view/tmpl/event.phtml:37
584
- msgid "Status Changed To"
585
- msgstr ""
586
-
587
- #: application/view/tmpl/event.phtml:52
588
- msgid "Bind to Post Type"
589
- msgstr ""
590
-
591
- #: application/view/tmpl/event.phtml:68
592
- msgid "Email Notification"
593
- msgstr ""
594
-
595
- #: application/view/tmpl/event.phtml:69
596
- msgid "Change Status"
597
- msgstr ""
598
-
599
- #: application/view/tmpl/event.phtml:70
600
- msgid "Callback"
601
- msgstr ""
602
-
603
- #: application/view/tmpl/event.phtml:75
604
- msgid "Email Address"
605
- msgstr ""
606
-
607
- #: application/view/tmpl/event.phtml:81
608
- msgid "Change Status To"
609
- msgstr ""
610
-
611
- #: application/view/tmpl/event.phtml:96
612
- msgid "Callback Function"
613
- msgstr ""
614
-
615
- #: application/view/tmpl/event.phtml:106
616
- msgid "Are you sure you want to delete selected Event?"
617
- msgstr ""
618
-
619
- #: application/view/tmpl/extension.phtml:18
620
- msgid "Extension List"
621
- msgstr ""
622
-
623
- #: application/view/tmpl/extension.phtml:25
624
- #: application/view/tmpl/post.phtml:17
625
- msgid "Name"
626
- msgstr ""
627
-
628
- #: application/view/tmpl/extension.phtml:26
629
- msgid "Description"
630
- msgstr ""
631
-
632
- #: application/view/tmpl/extension.phtml:27
633
- msgid "Price"
634
- msgstr ""
635
-
636
- #: application/view/tmpl/extension.phtml:28
637
- msgid "Actions"
638
- msgstr ""
639
-
640
- #: application/view/tmpl/extension.phtml:123
641
- msgid "Install Extension"
642
- msgstr ""
643
-
644
- #: application/view/tmpl/extension.phtml:125
645
- msgid ""
646
- "If you already have license key for current extension, please enter it "
647
- "below. Othewise click <b>Purchase</b> button to checkout your order."
648
- msgstr ""
649
-
650
- #: application/view/tmpl/extension.phtml:130
651
- msgid "Update Extension"
652
- msgstr ""
653
-
654
- #: application/view/tmpl/extension.phtml:132
655
- msgid "Extension has been installed. Your license key: "
656
- msgstr ""
657
-
658
- #: application/view/tmpl/extension.phtml:169
659
- msgid "Connect with AAM"
660
- msgstr ""
661
-
662
- #: application/view/tmpl/extension.phtml:189
663
- msgid "Development License"
664
- msgstr ""
665
-
666
- #: application/view/tmpl/extension.phtml:193
667
- msgid ""
668
- "Become a member of <b>AAM Community</b>. Obtain <b>Development License</b> "
669
- "today for $119 and get access to all extensions that are available today and "
670
- "will be developed witin a year."
671
- msgstr ""
672
-
673
- #: application/view/tmpl/extension.phtml:196
674
- msgid "Read More"
675
- msgstr ""
676
-
677
- #: application/view/tmpl/manager.phtml:63
678
- msgid "Default"
679
- msgstr ""
680
-
681
- #: application/view/tmpl/manager.phtml:74
682
- msgid "Undo Change"
683
- msgstr ""
684
-
685
- #: application/view/tmpl/manager.phtml:75
686
- msgid "Would your like to role back current settings?"
687
- msgstr ""
688
-
689
- #: application/view/tmpl/manager.phtml:78
690
- msgid "Our E-mail address is <b>support@wpaam.com</b>"
691
- msgstr ""
692
-
693
- #: application/view/tmpl/manager.phtml:89
694
- msgid "Control Manager"
695
- msgstr ""
696
-
697
- #: application/view/tmpl/menu.phtml:33
698
- msgid "Restrict All"
699
- msgstr ""
700
-
701
- #: application/view/tmpl/menu.phtml:70
702
- msgid "There is no single menu item allowed for current Role or User"
703
- msgstr ""
704
-
705
- #: application/view/tmpl/metabox.phtml:15
706
- msgid "Retrieve Metaboxes From Link"
707
- msgstr ""
708
-
709
- #: application/view/tmpl/metabox.phtml:16
710
- msgid "Refresh the List"
711
- msgstr ""
712
-
713
- #: application/view/tmpl/post.phtml:18
714
- msgid "Status"
715
- msgstr ""
716
-
717
- #: application/view/tmpl/post.phtml:31
718
- msgid "Filter Posts by Type"
719
- msgstr ""
720
-
721
- #: application/view/tmpl/post.phtml:34
722
- msgid "Collapse All"
723
- msgstr ""
724
-
725
- #: application/view/tmpl/post.phtml:35
726
- msgid "Expand All"
727
- msgstr ""
728
-
729
- #: application/view/tmpl/post.phtml:36
730
- msgid "Refresh"
731
- msgstr ""
732
-
733
- #: application/view/tmpl/post.phtml:45
734
- msgid "You reached the limit. Get <a href=\""
735
- msgstr ""
736
-
737
- #: application/view/tmpl/post.phtml:50
738
- msgid "Frontend"
739
- msgstr ""
740
-
741
- #: application/view/tmpl/post.phtml:51
742
- msgid "Backend"
743
- msgstr ""
744
-
745
- #: application/view/tmpl/role.phtml:16
746
- msgid "Role"
747
- msgstr ""
748
-
749
- #: application/view/tmpl/role.phtml:31
750
- msgid "Inherit Caps"
751
- msgstr ""
752
-
753
- #: application/view/tmpl/role.phtml:38 application/view/tmpl/role.phtml:42
754
- msgid "Duplicate Role"
755
- msgstr ""
756
-
757
- #: application/view/tmpl/role.phtml:56
758
- msgid "Notice"
759
- msgstr ""
760
-
761
- #: application/view/tmpl/role.phtml:58
762
- msgid "You can not delete <b>Administrator</b> Role"
763
- msgstr ""
764
-
765
- #: application/view/tmpl/user.phtml:16 extension/AAM_Activity_Log/ui.phtml:15
766
- msgid "Username"
767
- msgstr ""
768
-
769
- #: application/view/tmpl/user.phtml:25
770
- msgid "Filter Users by Role"
771
- msgstr ""
772
-
773
- #: application/view/tmpl/user.phtml:39
774
- msgid "Delete User"
775
- msgstr ""
776
-
777
- #: application/view/tmpl/visitor.phtml:11
778
- msgid ""
779
- "Control Access to your blog for visitor (any user that is not logged in)"
780
- msgstr ""
781
-
782
- #: extension/AAM_Activity_Log/ui.phtml:16
783
- msgid "Activity"
784
- msgstr ""
785
-
786
- #: extension/AAM_Activity_Log/ui.phtml:17
787
- msgid "Time"
788
- msgstr ""
789
-
790
- #: extension/AAM_Activity_Log/ui.phtml:23
791
- msgid "Clear Activity Log"
792
- msgstr ""
793
-
794
- #: extension/AAM_Activity_Log/ui.phtml:25
795
- msgid "Are you sure you want to clear activity log?"
796
- msgstr ""
797
-
798
- #: extension/AAM_Activity_Log/ui.phtml:28
799
- msgid "Activity Log Info"
800
- msgstr ""
801
-
802
- #: extension/AAM_Activity_Log/ui.phtml:30
803
- #, php-format
804
- msgid ""
805
- "Basic version of Activity Log tracks only user's login and logout. Consider "
806
- "to purchase the <b>%s</b> Extension today to get access to advanced list of "
807
- "activities as well as we can develop additional activities on demand."
808
- msgstr ""
809
-
810
- #: extension/AAM_Multisite_Support/ui.phtml:17
811
- msgid "Site"
812
- msgstr ""
813
-
814
- #: extension/AAM_Multisite_Support/ui.phtml:24
815
- msgid "Set Default Site"
816
- msgstr ""
817
-
818
- #: extension/AAM_Multisite_Support/ui.phtml:26
819
- msgid "Would you like to set the site"
820
- msgstr ""
821
-
822
- #: extension/AAM_Multisite_Support/ui.phtml:26
823
- msgid "as default?"
824
- msgstr ""
825
-
826
- #: extension/AAM_Multisite_Support/ui.phtml:29
827
- msgid "All newly created sites will inherit list of Roles & Capabilities."
828
- msgstr ""
829
-
830
- #: extension/AAM_My_Feature/ui.phtml:13
831
- msgid "Do you need a custom feature?"
832
- msgstr ""
833
-
834
- #: extension/AAM_My_Feature/ui.phtml:15
835
- msgid "Create your own extension "
836
- msgstr ""
837
-
838
- #: extension/AAM_My_Feature/ui.phtml:16
839
- msgid "or ask us and we will develop it for you."
840
- msgstr ""
841
-
842
- #: extension/AAM_Plus_Package/ui.phtml:24
843
- #: extension/AAM_Plus_Package/ui.phtml:56
844
- msgid "All Categories Default Access"
845
- msgstr ""
846
-
847
- #: extension/AAM_Plus_Package/ui.phtml:89
848
- #: extension/AAM_Plus_Package/ui.phtml:121
849
- msgid "All Posts Default Access"
850
- msgstr ""
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
library/Zend/Config.php DELETED
@@ -1,485 +0,0 @@
1
- <?php
2
- /**
3
- * Zend Framework
4
- *
5
- * LICENSE
6
- *
7
- * This source file is subject to the new BSD license that is bundled
8
- * with this package in the file LICENSE.txt.
9
- * It is also available through the world-wide-web at this URL:
10
- * http://framework.zend.com/license/new-bsd
11
- * If you did not receive a copy of the license and are unable to
12
- * obtain it through the world-wide-web, please send an email
13
- * to license@zend.com so we can send you a copy immediately.
14
- *
15
- * @category Zend
16
- * @package Zend_Config
17
- * @copyright Copyright (c) 2005-2011 Zend Technologies USA Inc. (http://www.zend.com)
18
- * @license http://framework.zend.com/license/new-bsd New BSD License
19
- * @version $Id: Config.php 23775 2011-03-01 17:25:24Z ralph $
20
- */
21
-
22
- /**
23
- * File has been modified by Vasyl Martyniuk <martyniuk.vasyl@gmail.com> to fit the
24
- * project needs.
25
- */
26
-
27
- /**
28
- * @category Zend
29
- * @package Zend_Config
30
- * @copyright Copyright (c) 2005-2011 Zend Technologies USA Inc. (http://www.zend.com)
31
- * @license http://framework.zend.com/license/new-bsd New BSD License
32
- */
33
- class Zend_Config implements Countable, Iterator
34
- {
35
- /**
36
- * Whether in-memory modifications to configuration data are allowed
37
- *
38
- * @var boolean
39
- */
40
- protected $_allowModifications;
41
-
42
- /**
43
- * Iteration index
44
- *
45
- * @var integer
46
- */
47
- protected $_index;
48
-
49
- /**
50
- * Number of elements in configuration data
51
- *
52
- * @var integer
53
- */
54
- protected $_count;
55
-
56
- /**
57
- * Contains array of configuration data
58
- *
59
- * @var array
60
- */
61
- protected $_data;
62
-
63
- /**
64
- * Used when unsetting values during iteration to ensure we do not skip
65
- * the next element
66
- *
67
- * @var boolean
68
- */
69
- protected $_skipNextIteration;
70
-
71
- /**
72
- * Contains which config file sections were loaded. This is null
73
- * if all sections were loaded, a string name if one section is loaded
74
- * and an array of string names if multiple sections were loaded.
75
- *
76
- * @var mixed
77
- */
78
- protected $_loadedSection;
79
-
80
- /**
81
- * This is used to track section inheritance. The keys are names of sections that
82
- * extend other sections, and the values are the extended sections.
83
- *
84
- * @var array
85
- */
86
- protected $_extends = array();
87
-
88
- /**
89
- * Load file error string.
90
- *
91
- * Is null if there was no error while file loading
92
- *
93
- * @var string
94
- */
95
- protected $_loadFileErrorStr = null;
96
-
97
- /**
98
- * Zend_Config provides a property based interface to
99
- * an array. The data are read-only unless $allowModifications
100
- * is set to true on construction.
101
- *
102
- * Zend_Config also implements Countable and Iterator to
103
- * facilitate easy access to the data.
104
- *
105
- * @param array $array
106
- * @param boolean $allowModifications
107
- * @return void
108
- */
109
- public function __construct(array $array, $allowModifications = false)
110
- {
111
- $this->_allowModifications = (boolean) $allowModifications;
112
- $this->_loadedSection = null;
113
- $this->_index = 0;
114
- $this->_data = array();
115
- foreach ($array as $key => $value) {
116
- if (is_array($value)) {
117
- $this->_data[$key] = new self($value, $this->_allowModifications);
118
- } else {
119
- $this->_data[$key] = $value;
120
- }
121
- }
122
- $this->_count = count($this->_data);
123
- }
124
-
125
- /**
126
- * Retrieve a value and return $default if there is no element set.
127
- *
128
- * @param string $name
129
- * @param mixed $default
130
- * @return mixed
131
- */
132
- public function get($name, $default = null)
133
- {
134
- $result = $default;
135
- if (array_key_exists($name, $this->_data)) {
136
- $result = $this->_data[$name];
137
- }
138
- return $result;
139
- }
140
-
141
- /**
142
- * Magic function so that $obj->value will work.
143
- *
144
- * @param string $name
145
- * @return mixed
146
- */
147
- public function __get($name)
148
- {
149
- return $this->get($name);
150
- }
151
-
152
- /**
153
- * Only allow setting of a property if $allowModifications
154
- * was set to true on construction. Otherwise, throw an exception.
155
- *
156
- * @param string $name
157
- * @param mixed $value
158
- * @throws Zend_Config_Exception
159
- * @return void
160
- */
161
- public function __set($name, $value)
162
- {
163
- if ($this->_allowModifications) {
164
- if (is_array($value)) {
165
- $this->_data[$name] = new self($value, true);
166
- } else {
167
- $this->_data[$name] = $value;
168
- }
169
- $this->_count = count($this->_data);
170
- } else {
171
- /** @see Zend_Config_Exception */
172
- throw new Zend_Config_Exception('Zend_Config is read only');
173
- }
174
- }
175
-
176
- /**
177
- * Deep clone of this instance to ensure that nested Zend_Configs
178
- * are also cloned.
179
- *
180
- * @return void
181
- */
182
- public function __clone()
183
- {
184
- $array = array();
185
- foreach ($this->_data as $key => $value) {
186
- if ($value instanceof Zend_Config) {
187
- $array[$key] = clone $value;
188
- } else {
189
- $array[$key] = $value;
190
- }
191
- }
192
- $this->_data = $array;
193
- }
194
-
195
- /**
196
- * Return an associative array of the stored data.
197
- *
198
- * @return array
199
- */
200
- public function toArray()
201
- {
202
- $array = array();
203
- $data = $this->_data;
204
- foreach ($data as $key => $value) {
205
- if ($value instanceof Zend_Config) {
206
- $array[$key] = $value->toArray();
207
- } else {
208
- $array[$key] = $value;
209
- }
210
- }
211
- return $array;
212
- }
213
-
214
- /**
215
- * Support isset() overloading on PHP 5.1
216
- *
217
- * @param string $name
218
- * @return boolean
219
- */
220
- public function __isset($name)
221
- {
222
- return isset($this->_data[$name]);
223
- }
224
-
225
- /**
226
- * Support unset() overloading on PHP 5.1
227
- *
228
- * @param string $name
229
- * @throws Zend_Config_Exception
230
- * @return void
231
- */
232
- public function __unset($name)
233
- {
234
- if ($this->_allowModifications) {
235
- unset($this->_data[$name]);
236
- $this->_count = count($this->_data);
237
- $this->_skipNextIteration = true;
238
- } else {
239
- /** @see Zend_Config_Exception */
240
- throw new Zend_Config_Exception('Zend_Config is read only');
241
- }
242
-
243
- }
244
-
245
- /**
246
- * Defined by Countable interface
247
- *
248
- * @return int
249
- */
250
- public function count()
251
- {
252
- return $this->_count;
253
- }
254
-
255
- /**
256
- * Defined by Iterator interface
257
- *
258
- * @return mixed
259
- */
260
- public function current()
261
- {
262
- $this->_skipNextIteration = false;
263
- return current($this->_data);
264
- }
265
-
266
- /**
267
- * Defined by Iterator interface
268
- *
269
- * @return mixed
270
- */
271
- public function key()
272
- {
273
- return key($this->_data);
274
- }
275
-
276
- /**
277
- * Defined by Iterator interface
278
- *
279
- */
280
- public function next()
281
- {
282
- if ($this->_skipNextIteration) {
283
- $this->_skipNextIteration = false;
284
- return;
285
- }
286
- next($this->_data);
287
- $this->_index++;
288
- }
289
-
290
- /**
291
- * Defined by Iterator interface
292
- *
293
- */
294
- public function rewind()
295
- {
296
- $this->_skipNextIteration = false;
297
- reset($this->_data);
298
- $this->_index = 0;
299
- }
300
-
301
- /**
302
- * Defined by Iterator interface
303
- *
304
- * @return boolean
305
- */
306
- public function valid()
307
- {
308
- return $this->_index < $this->_count;
309
- }
310
-
311
- /**
312
- * Returns the section name(s) loaded.
313
- *
314
- * @return mixed
315
- */
316
- public function getSectionName()
317
- {
318
- if(is_array($this->_loadedSection) && count($this->_loadedSection) == 1) {
319
- $this->_loadedSection = $this->_loadedSection[0];
320
- }
321
- return $this->_loadedSection;
322
- }
323
-
324
- /**
325
- * Returns true if all sections were loaded
326
- *
327
- * @return boolean
328
- */
329
- public function areAllSectionsLoaded()
330
- {
331
- return $this->_loadedSection === null;
332
- }
333
-
334
-
335
- /**
336
- * Merge another Zend_Config with this one. The items
337
- * in $merge will override the same named items in
338
- * the current config.
339
- *
340
- * @param Zend_Config $merge
341
- * @return Zend_Config
342
- */
343
- public function merge(Zend_Config $merge)
344
- {
345
- foreach($merge as $key => $item) {
346
- if(array_key_exists($key, $this->_data)) {
347
- if($item instanceof Zend_Config && $this->$key instanceof Zend_Config) {
348
- $this->$key = $this->$key->merge(new Zend_Config($item->toArray(), !$this->readOnly()));
349
- } else {
350
- $this->$key = $item;
351
- }
352
- } else {
353
- if($item instanceof Zend_Config) {
354
- $this->$key = new Zend_Config($item->toArray(), !$this->readOnly());
355
- } else {
356
- $this->$key = $item;
357
- }
358
- }
359
- }
360
-
361
- return $this;
362
- }
363
-
364
- /**
365
- * Prevent any more modifications being made to this instance. Useful
366
- * after merge() has been used to merge multiple Zend_Config objects
367
- * into one object which should then not be modified again.
368
- *
369
- */
370
- public function setReadOnly()
371
- {
372
- $this->_allowModifications = false;
373
- foreach ($this->_data as $key => $value) {
374
- if ($value instanceof Zend_Config) {
375
- $value->setReadOnly();
376
- }
377
- }
378
- }
379
-
380
- /**
381
- * Returns if this Zend_Config object is read only or not.
382
- *
383
- * @return boolean
384
- */
385
- public function readOnly()
386
- {
387
- return !$this->_allowModifications;
388
- }
389
-
390
- /**
391
- * Get the current extends
392
- *
393
- * @return array
394
- */
395
- public function getExtends()
396
- {
397
- return $this->_extends;
398
- }
399
-
400
- /**
401
- * Set an extend for Zend_Config_Writer
402
- *
403
- * @param string $extendingSection
404
- * @param string $extendedSection
405
- * @return void
406
- */
407
- public function setExtend($extendingSection, $extendedSection = null)
408
- {
409
- if ($extendedSection === null && isset($this->_extends[$extendingSection])) {
410
- unset($this->_extends[$extendingSection]);
411
- } else if ($extendedSection !== null) {
412
- $this->_extends[$extendingSection] = $extendedSection;
413
- }
414
- }
415
-
416
- /**
417
- * Throws an exception if $extendingSection may not extend $extendedSection,
418
- * and tracks the section extension if it is valid.
419
- *
420
- * @param string $extendingSection
421
- * @param string $extendedSection
422
- * @throws Zend_Config_Exception
423
- * @return void
424
- */
425
- protected function _assertValidExtend($extendingSection, $extendedSection)
426
- {
427
- // detect circular section inheritance
428
- $extendedSectionCurrent = $extendedSection;
429
- while (array_key_exists($extendedSectionCurrent, $this->_extends)) {
430
- if ($this->_extends[$extendedSectionCurrent] == $extendingSection) {
431
- /** @see Zend_Config_Exception */
432
- throw new Zend_Config_Exception('Illegal circular inheritance detected');
433
- }
434
- $extendedSectionCurrent = $this->_extends[$extendedSectionCurrent];
435
- }
436
- // remember that this section extends another section
437
- $this->_extends[$extendingSection] = $extendedSection;
438
- }
439
-
440
- /**
441
- * Handle any errors from simplexml_load_file or parse_ini_file
442
- *
443
- * @param integer $errno
444
- * @param string $errstr
445
- * @param string $errfile
446
- * @param integer $errline
447
- */
448
- protected function _loadFileErrorHandler($errno, $errstr, $errfile, $errline)
449
- {
450
- if ($this->_loadFileErrorStr === null) {
451
- $this->_loadFileErrorStr = $errstr;
452
- } else {
453
- $this->_loadFileErrorStr .= (PHP_EOL . $errstr);
454
- }
455
- }
456
-
457
- /**
458
- * Merge two arrays recursively, overwriting keys of the same name
459
- * in $firstArray with the value in $secondArray.
460
- *
461
- * @param mixed $firstArray First array
462
- * @param mixed $secondArray Second array to merge into first array
463
- * @return array
464
- */
465
- protected function _arrayMergeRecursive($firstArray, $secondArray)
466
- {
467
- if (is_array($firstArray) && is_array($secondArray)) {
468
- foreach ($secondArray as $key => $value) {
469
- if (isset($firstArray[$key])) {
470
- $firstArray[$key] = $this->_arrayMergeRecursive($firstArray[$key], $value);
471
- } else {
472
- if($key === 0) {
473
- $firstArray= array(0=>$this->_arrayMergeRecursive($firstArray, $value));
474
- } else {
475
- $firstArray[$key] = $value;
476
- }
477
- }
478
- }
479
- } else {
480
- $firstArray = $secondArray;
481
- }
482
-
483
- return $firstArray;
484
- }
485
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
library/Zend/Config/Exception.php DELETED
@@ -1,33 +0,0 @@
1
- <?php
2
- /**
3
- * Zend Framework
4
- *
5
- * LICENSE
6
- *
7
- * This source file is subject to the new BSD license that is bundled
8
- * with this package in the file LICENSE.txt.
9
- * It is also available through the world-wide-web at this URL:
10
- * http://framework.zend.com/license/new-bsd
11
- * If you did not receive a copy of the license and are unable to
12
- * obtain it through the world-wide-web, please send an email
13
- * to license@zend.com so we can send you a copy immediately.
14
- *
15
- * @category Zend
16
- * @package Zend_Config
17
- * @copyright Copyright (c) 2005-2011 Zend Technologies USA Inc. (http://www.zend.com)
18
- * @license http://framework.zend.com/license/new-bsd New BSD License
19
- * @version $Id: Exception.php 23775 2011-03-01 17:25:24Z ralph $
20
- */
21
-
22
- /**
23
- * File has been modified by Vasyl Martyniuk <martyniuk.vasyl@gmail.com> to fit the
24
- * project needs.
25
- */
26
-
27
- /**
28
- * @category Zend
29
- * @package Zend_Config
30
- * @copyright Copyright (c) 2005-2011 Zend Technologies USA Inc. (http://www.zend.com)
31
- * @license http://framework.zend.com/license/new-bsd New BSD License
32
- */
33
- class Zend_Config_Exception extends Zend_Exception {}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
library/Zend/Config/Ini.php DELETED
@@ -1,301 +0,0 @@
1
- <?php
2
- /**
3
- * Zend Framework
4
- *
5
- * LICENSE
6
- *
7
- * This source file is subject to the new BSD license that is bundled
8
- * with this package in the file LICENSE.txt.
9
- * It is also available through the world-wide-web at this URL:
10
- * http://framework.zend.com/license/new-bsd
11
- * If you did not receive a copy of the license and are unable to
12
- * obtain it through the world-wide-web, please send an email
13
- * to license@zend.com so we can send you a copy immediately.
14
- *
15
- * @category Zend
16
- * @package Zend_Config
17
- * @copyright Copyright (c) 2005-2011 Zend Technologies USA Inc. (http://www.zend.com)
18
- * @license http://framework.zend.com/license/new-bsd New BSD License
19
- * @version $Id: Ini.php 24045 2011-05-23 12:45:11Z rob $
20
- */
21
-
22
- /**
23
- * File has been modified by Vasyl Martyniuk <martyniuk.vasyl@gmail.com> to fit the
24
- * project needs.
25
- */
26
-
27
-
28
- /**
29
- * @category Zend
30
- * @package Zend_Config
31
- * @copyright Copyright (c) 2005-2011 Zend Technologies USA Inc. (http://www.zend.com)
32
- * @license http://framework.zend.com/license/new-bsd New BSD License
33
- */
34
- class Zend_Config_Ini extends Zend_Config
35
- {
36
- /**
37
- * String that separates nesting levels of configuration data identifiers
38
- *
39
- * @var string
40
- */
41
- protected $_nestSeparator = '.';
42
-
43
- /**
44
- * String that separates the parent section name
45
- *
46
- * @var string
47
- */
48
- protected $_sectionSeparator = ':';
49
-
50
- /**
51
- * Whether to skip extends or not
52
- *
53
- * @var boolean
54
- */
55
- protected $_skipExtends = false;
56
-
57
- /**
58
- * Loads the section $section from the config file $filename for
59
- * access facilitated by nested object properties.
60
- *
61
- * If the section name contains a ":" then the section name to the right
62
- * is loaded and included into the properties. Note that the keys in
63
- * this $section will override any keys of the same
64
- * name in the sections that have been included via ":".
65
- *
66
- * If the $section is null, then all sections in the ini file are loaded.
67
- *
68
- * If any key includes a ".", then this will act as a separator to
69
- * create a sub-property.
70
- *
71
- * example ini file:
72
- * [all]
73
- * db.connection = database
74
- * hostname = live
75
- *
76
- * [staging : all]
77
- * hostname = staging
78
- *
79
- * after calling $data = new Zend_Config_Ini($file, 'staging'); then
80
- * $data->hostname === "staging"
81
- * $data->db->connection === "database"
82
- *
83
- * The $options parameter may be provided as either a boolean or an array.
84
- * If provided as a boolean, this sets the $allowModifications option of
85
- * Zend_Config. If provided as an array, there are three configuration
86
- * directives that may be set. For example:
87
- *
88
- * $options = array(
89
- * 'allowModifications' => false,
90
- * 'nestSeparator' => ':',
91
- * 'skipExtends' => false,
92
- * );
93
- *
94
- * @param string $filename
95
- * @param mixed $section
96
- * @param boolean|array $options
97
- * @throws Zend_Config_Exception
98
- * @return void
99
- */
100
- public function __construct($filename, $section = null, $options = false)
101
- {
102
- if (empty($filename)) {
103
- /**
104
- * @see Zend_Config_Exception
105
- */
106
- throw new Zend_Config_Exception('Filename is not set');
107
- }
108
-
109
- $allowModifications = false;
110
- if (is_bool($options)) {
111
- $allowModifications = $options;
112
- } elseif (is_array($options)) {
113
- if (isset($options['allowModifications'])) {
114
- $allowModifications = (bool) $options['allowModifications'];
115
- }
116
- if (isset($options['nestSeparator'])) {
117
- $this->_nestSeparator = (string) $options['nestSeparator'];
118
- }
119
- if (isset($options['skipExtends'])) {
120
- $this->_skipExtends = (bool) $options['skipExtends'];
121
- }
122
- }
123
-
124
- $iniArray = $this->_loadIniFile($filename);
125
-
126
- if (null === $section) {
127
- // Load entire file
128
- $dataArray = array();
129
- foreach ($iniArray as $sectionName => $sectionData) {
130
- if(!is_array($sectionData)) {
131
- $dataArray = $this->_arrayMergeRecursive($dataArray, $this->_processKey(array(), $sectionName, $sectionData));
132
- } else {
133
- $dataArray[$sectionName] = $this->_processSection($iniArray, $sectionName);
134
- }
135
- }
136
- parent::__construct($dataArray, $allowModifications);
137
- } else {
138
- // Load one or more sections
139
- if (!is_array($section)) {
140
- $section = array($section);
141
- }
142
- $dataArray = array();
143
- foreach ($section as $sectionName) {
144
- if (!isset($iniArray[$sectionName])) {
145
- /**
146
- * @see Zend_Config_Exception
147
- */
148
- throw new Zend_Config_Exception("Section '$sectionName' cannot be found in $filename");
149
- }
150
- $dataArray = $this->_arrayMergeRecursive($this->_processSection($iniArray, $sectionName), $dataArray);
151
-
152
- }
153
- parent::__construct($dataArray, $allowModifications);
154
- }
155
-
156
- $this->_loadedSection = $section;
157
- }
158
-
159
- /**
160
- * Load the INI file from disk using parse_ini_file(). Use a private error
161
- * handler to convert any loading errors into a Zend_Config_Exception
162
- *
163
- * @param string $filename
164
- * @throws Zend_Config_Exception
165
- * @return array
166
- */
167
- protected function _parseIniFile($filename)
168
- {
169
- set_error_handler(array($this, '_loadFileErrorHandler'));
170
- $iniArray = parse_ini_file($filename, true); // Warnings and errors are suppressed
171
- restore_error_handler();
172
-
173
- // Check if there was a error while loading file
174
- if ($this->_loadFileErrorStr !== null) {
175
- /**
176
- * @see Zend_Config_Exception
177
- */
178
- throw new Zend_Config_Exception($this->_loadFileErrorStr);
179
- }
180
-
181
- return $iniArray;
182
- }
183
-
184
- /**
185
- * Load the ini file and preprocess the section separator (':' in the
186
- * section name (that is used for section extension) so that the resultant
187
- * array has the correct section names and the extension information is
188
- * stored in a sub-key called ';extends'. We use ';extends' as this can
189
- * never be a valid key name in an INI file that has been loaded using
190
- * parse_ini_file().
191
- *
192
- * @param string $filename
193
- * @throws Zend_Config_Exception
194
- * @return array
195
- */
196
- protected function _loadIniFile($filename)
197
- {
198
- $loaded = $this->_parseIniFile($filename);
199
- $iniArray = array();
200
- foreach ($loaded as $key => $data)
201
- {
202
- $pieces = explode($this->_sectionSeparator, $key);
203
- $thisSection = trim($pieces[0]);
204
- switch (count($pieces)) {
205
- case 1:
206
- $iniArray[$thisSection] = $data;
207
- break;
208
-
209
- case 2:
210
- $extendedSection = trim($pieces[1]);
211
- $iniArray[$thisSection] = array_merge(array(';extends'=>$extendedSection), $data);
212
- break;
213
-
214
- default:
215
- /**
216
- * @see Zend_Config_Exception
217
- */
218
- throw new Zend_Config_Exception("Section '$thisSection' may not extend multiple sections in $filename");
219
- }
220
- }
221
-
222
- return $iniArray;
223
- }
224
-
225
- /**
226
- * Process each element in the section and handle the ";extends" inheritance
227
- * key. Passes control to _processKey() to handle the nest separator
228
- * sub-property syntax that may be used within the key name.
229
- *
230
- * @param array $iniArray
231
- * @param string $section
232
- * @param array $config
233
- * @throws Zend_Config_Exception
234
- * @return array
235
- */
236
- protected function _processSection($iniArray, $section, $config = array())
237
- {
238
- $thisSection = $iniArray[$section];
239
-
240
- foreach ($thisSection as $key => $value) {
241
- if (strtolower($key) == ';extends') {
242
- if (isset($iniArray[$value])) {
243
- $this->_assertValidExtend($section, $value);
244
-
245
- if (!$this->_skipExtends) {
246
- $config = $this->_processSection($iniArray, $value, $config);
247
- }
248
- } else {
249
- /**
250
- * @see Zend_Config_Exception
251
- */
252
- throw new Zend_Config_Exception("Parent section '$section' cannot be found");
253
- }
254
- } else {
255
- $config = $this->_processKey($config, $key, $value);
256
- }
257
- }
258
- return $config;
259
- }
260
-
261
- /**
262
- * Assign the key's value to the property list. Handles the
263
- * nest separator for sub-properties.
264
- *
265
- * @param array $config
266
- * @param string $key
267
- * @param string $value
268
- * @throws Zend_Config_Exception
269
- * @return array
270
- */
271
- protected function _processKey($config, $key, $value)
272
- {
273
- if (strpos($key, $this->_nestSeparator) !== false) {
274
- $pieces = explode($this->_nestSeparator, $key, 2);
275
- if (strlen($pieces[0]) && strlen($pieces[1])) {
276
- if (!isset($config[$pieces[0]])) {
277
- if ($pieces[0] === '0' && !empty($config)) {
278
- // convert the current values in $config into an array
279
- $config = array($pieces[0] => $config);
280
- } else {
281
- $config[$pieces[0]] = array();
282
- }
283
- } elseif (!is_array($config[$pieces[0]])) {
284
- /**
285
- * @see Zend_Config_Exception
286
- */
287
- throw new Zend_Config_Exception("Cannot create sub-key for '{$pieces[0]}' as key already exists");
288
- }
289
- $config[$pieces[0]] = $this->_processKey($config[$pieces[0]], $pieces[1], $value);
290
- } else {
291
- /**
292
- * @see Zend_Config_Exception
293
- */
294
- throw new Zend_Config_Exception("Invalid key '$key'");
295
- }
296
- } else {
297
- $config[$key] = $value;
298
- }
299
- return $config;
300
- }
301
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
library/Zend/Exception.php DELETED
@@ -1,101 +0,0 @@
1
- <?php
2
- /**
3
- * Zend Framework
4
- *
5
- * LICENSE
6
- *
7
- * This source file is subject to the new BSD license that is bundled
8
- * with this package in the file LICENSE.txt.
9
- * It is also available through the world-wide-web at this URL:
10
- * http://framework.zend.com/license/new-bsd
11
- * If you did not receive a copy of the license and are unable to
12
- * obtain it through the world-wide-web, please send an email
13
- * to license@zend.com so we can send you a copy immediately.
14
- *
15
- * @category Zend
16
- * @package Zend
17
- * @copyright Copyright (c) 2005-2011 Zend Technologies USA Inc. (http://www.zend.com)
18
- * @license http://framework.zend.com/license/new-bsd New BSD License
19
- * @version $Id: Exception.php 23775 2011-03-01 17:25:24Z ralph $
20
- */
21
-
22
- /**
23
- * File has been modified by Vasyl Martyniuk <martyniuk.vasyl@gmail.com> to fit the
24
- * project needs.
25
- */
26
-
27
- /**
28
- * @category Zend
29
- * @package Zend
30
- * @copyright Copyright (c) 2005-2011 Zend Technologies USA Inc. (http://www.zend.com)
31
- * @license http://framework.zend.com/license/new-bsd New BSD License
32
- */
33
- class Zend_Exception extends Exception
34
- {
35
- /**
36
- * @var null|Exception
37
- */
38
- private $_previous = null;
39
-
40
- /**
41
- * Construct the exception
42
- *
43
- * @param string $msg
44
- * @param int $code
45
- * @param Exception $previous
46
- * @return void
47
- */
48
- public function __construct($msg = '', $code = 0, Exception $previous = null)
49
- {
50
- if (version_compare(PHP_VERSION, '5.3.0', '<')) {
51
- parent::__construct($msg, (int) $code);
52
- $this->_previous = $previous;
53
- } else {
54
- parent::__construct($msg, (int) $code, $previous);
55
- }
56
- }
57
-
58
- /**
59
- * Overloading
60
- *
61
- * For PHP < 5.3.0, provides access to the getPrevious() method.
62
- *
63
- * @param string $method
64
- * @param array $args
65
- * @return mixed
66
- */
67
- public function __call($method, array $args)
68
- {
69
- if ('getprevious' == strtolower($method)) {
70
- return $this->_getPrevious();
71
- }
72
- return null;
73
- }
74
-
75
- /**
76
- * String representation of the exception
77
- *
78
- * @return string
79
- */
80
- public function __toString()
81
- {
82
- if (version_compare(PHP_VERSION, '5.3.0', '<')) {
83
- if (null !== ($e = $this->getPrevious())) {
84
- return $e->__toString()
85
- . "\n\nNext "
86
- . parent::__toString();
87
- }
88
- }
89
- return parent::__toString();
90
- }
91
-
92
- /**
93
- * Returns previous Exception
94
- *
95
- * @return Exception|null
96
- */
97
- protected function _getPrevious()
98
- {
99
- return $this->_previous;
100
- }
101
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
license.txt CHANGED
@@ -1,4 +1,4 @@
1
- Copyright (C) <2013> Vasyl Martyniuk <support@wpaam.com>
2
 
3
  This program is free software: you can redistribute it and/or modify
4
  it under the terms of the GNU General Public License as published by
1
+ Copyright (C) <2015> Vasyl Martyniuk <vasyl@vasyltech.com>
2
 
3
  This program is free software: you can redistribute it and/or modify
4
  it under the terms of the GNU General Public License as published by
media/active-menu.png ADDED
Binary file
media/css/aam.css CHANGED
@@ -3,894 +3,729 @@
3
  * LICENSE: This file is subject to the terms and conditions defined in *
4
  * file 'license.txt', which is part of this source code package. *
5
  * ======================================================================
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
6
  */
7
 
 
 
 
 
 
8
 
9
- /** GLOBAL AAM STYLES */
10
- #aam_form{
11
- position: relative;
12
- }
13
-
14
- .aam-asterix{
15
  display: inline-block;
16
- font-size: 0.9em;
17
- color: #bf0909;
18
- margin-left: 3px;
19
- }
20
-
21
- .aam-form-table{
22
- width: 100%;
23
- }
24
-
25
- .aam-form-table th{
26
- text-align: right;
27
- }
28
-
29
- .aam-form-table input, .aam-form-table select{
30
- width: 100%;
31
- }
32
-
33
- .dialog-content{
34
  text-align: center;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
35
  }
36
-
37
- .dialog-note{
38
- font-size: 0.8em;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
39
  margin-bottom: 0;
 
40
  }
41
 
42
- .dialog-input{
43
- width: 55%;
44
- margin-left: 5%;
45
- }
46
-
47
- .aam-input{
48
- width: 100%;
49
- }
50
-
51
- .dialog-input-dynamic{
52
- width: 55%;
53
- margin-left: 5%;
54
- background: transparent url('images/cmanager/field-loader.gif') no-repeat center;
55
- }
56
-
57
- .input-dynamic{
58
- background: transparent url('images/cmanager/field-loader.gif') no-repeat center;
59
- }
60
-
61
- .dialog-fieldset{
62
- width: 100%;
63
- margin: 10px 0px;
64
- }
65
-
66
- .aam-medium-loader span{
67
- background-image: url('images/common/medium-loader.gif');
68
- background-position: 0 0 !important;
69
- }
70
-
71
- .aam-list-top-actions{
72
- float: right;
73
- display: inline-table;
74
- width: auto;
75
- text-align: right;
76
- }
77
-
78
- .aam-list-top-actions a{
79
- display: table-cell;
80
- min-width: 30px;
81
- }
82
-
83
- .aam-list-row-actions{
84
- width: 100%;
85
- display: inline-table;
86
- text-align: center;
87
  }
88
 
89
- .aam-list-row-actions .aam-icon{
90
- display: table-cell;
91
- }
92
-
93
- .clear{
94
- line-height: 0;
95
- font-size: 0;
96
- padding: 0;
97
- margin: 0;
98
- clear: both;
99
  }
100
 
101
- .main-inside{
102
  position: relative;
103
- min-height: 200px;
104
- }
105
-
106
- .aam-main-loader{
107
- position: absolute;
108
- top: 0px;
109
- left: 0px;
110
- width: 100%;
111
- height: 100%;
112
- background: transparent url('images/main-loader.gif') no-repeat center;
113
- }
114
-
115
- .aam-metabox-loader{
116
- display: none;
117
- position: absolute;
118
- top: 0px;
119
- left: 0px;
120
- width: 100%;
121
- height: 100%;
122
- background: transparent url('images/metabox-loader.gif') no-repeat center;
123
- }
124
-
125
- .aam-bold{
126
- font-weight: bold;
127
- }
128
-
129
- .current-site{
130
- text-transform: capitalize;
131
- font-weight: bold;
132
- color: #257DA6;
133
- margin-right: 4px;
134
- }
135
-
136
-
137
- .current-subject{
138
- text-transform: capitalize;
139
- font-weight: bold;
140
- color: #bf0909;
141
- }
142
-
143
- /** FEATURE LIST STYLES */
144
- .feature-list{
145
- width: 25%;
146
- float: left;
147
- }
148
-
149
- .feature-item{
150
- height: 28px;
151
- width: 100%;
152
- display: table;
153
- font-size: 1em;
154
- border: 1px solid #CCCCCC;
155
- font-family: "Lucida Console", Monaco, monospace;
156
- cursor: pointer;
157
- background: transparent url('images/feature.png') no-repeat 2px 2px;
158
- }
159
-
160
- .feature-item:hover{
161
- border: 1px solid #006400;
162
- }
163
-
164
- .feature-item-active{
165
- border: 1px solid #257DA6;
166
- background: #257DA6 url('images/feature-active.png') no-repeat 2px 2px;
167
- }
168
-
169
- .feature-item span{
170
- text-transform: uppercase;
171
- display: table-cell;
172
- padding-left: 38px;
173
- vertical-align: middle;
174
  }
175
 
176
- .feature-item-active span{
177
- font-weight: bold;
178
- color: #FFFFFF;
179
- }
180
-
181
- .feature-content{
182
- float: right;
183
- width: 72%;
184
- border-radius: 4px;
185
- border: 1px solid #CCCCCC;
186
- padding: 5px;
187
  }
188
 
189
- .feature-content-container{
 
190
  position: relative;
191
  }
192
 
193
- .feature-list-empty{
194
- text-align: center;
195
- font-size: 1.1em;
196
- color: #AAAAAA;
197
- padding: 10px;
198
  }
199
 
200
- /** CONTROL PANEL STYLES */
201
-
202
- #major-publishing-actions{
203
- margin-top: 5px;
204
- border-top: 1px solid #D5D5D5;
205
  }
206
 
207
- /** CONTROL MANAGER STYLES */
208
- .control-manager{
209
- display: table;
210
- width: 100%;
211
- margin-bottom: 5px;
212
  }
213
 
214
- .manager-item{
215
- height: 50px;
216
- min-width: 32px;
217
- display: table-cell;
218
- text-align: center;
219
- vertical-align: bottom;
220
- text-decoration: none;
221
- text-transform: uppercase;
222
- font-size: 10px;
223
- font-weight: bold;
224
- color: #333333;
225
- background-repeat: no-repeat;
226
- background-position: center top;
227
  }
228
 
229
- .control-manager-content{
230
- border-top: 1px solid #F5F5F5;
231
- visibility: hidden;
232
  }
233
 
234
- /**
235
- ================
236
- ALL OTHER STYLES
237
- ================
238
- */
239
-
240
- /** ROLE MANAGER STYLES */
241
- .manager-item-role{
242
- background-image: url('images/cmanager/role.png');
243
- }
244
-
245
- .manager-item-role-active{
246
- background-image: url('images/cmanager/role-active.png');
247
- }
248
-
249
- /** USER MANAGER STYLES */
250
- .manager-item-user{
251
- background-image: url('images/cmanager/user.png');
252
  }
253
 
254
- .manager-item-user-active{
255
- background-image: url('images/cmanager/user-active.png');
256
- }
257
-
258
- .user-settings{
259
- border: 1px solid #E2E4FF;
260
- width: 100%;
261
  }
262
 
263
- .user-settings td {
264
- border-bottom: 1px solid #CCCCCC;
 
 
265
  }
266
 
267
- .user-settings th {
268
- padding: 2px 10px;
269
- border-bottom: 1px solid #CCCCCC;
270
- font-weight: bold;
271
- text-transform: uppercase;
272
  cursor: pointer;
273
- text-align: right;
274
- background-color: #257da6;
275
  }
276
 
277
- .user-settings input, .user-settings select{
278
- width: 100%;
279
- border: 0px solid transparent;
280
  }
281
 
282
- .user-action-locked{
283
- display: inline-block;
284
- width:16px;
285
- height: 16px;
286
- background: transparent url('images/cmanager/lock.png') no-repeat center;
287
  }
288
 
289
-
290
- /** VISITOR MANAGER STYLES */
291
- .manager-item-visitor{
292
- background-image: url('images/cmanager/visitor.png');
293
  }
294
 
295
- .manager-item-visitor-active{
296
- background-image: url('images/cmanager/visitor-active.png');
297
  }
298
 
299
- .control-manager-visitor{
300
- margin-top: 10px;
301
- width: auto;
302
- border-top: 4px solid #257DA6;
303
- border-bottom: 1px solid #CCCCCC;
304
- border-left: 1px solid #CCCCCC;
305
- border-right: 1px solid #CCCCCC;
306
- text-align: justify;
307
- padding: 10px;
308
- font-family: 'Lucida Console', Monaco, monospace;
309
  }
310
 
311
-
312
- /** ADMIN MENU STYLES */
313
- .menu-item-action{
314
- background-repeat: no-repeat;
315
- background-position: center;
316
- width: 26px;
317
- height: 26px;
318
  display: block;
319
- margin: -10px auto 4px auto;
320
- text-indent: -9999px;
321
  text-decoration: none;
322
  }
323
 
324
- .menu-item-action-restrict{
325
- background-image:url(images/menu/visibility.png);
326
  }
327
 
328
- .menu-item-action-restrict-active{
329
- background-image:url(images/menu/visibility-active.png);
330
  }
331
 
332
- .whole-menu{
333
- width: 50%;
334
- background-color: #F9F9F9;
335
- border-radius: 5px;
336
- text-align: center;
337
- font-family: 'Lucida Console', Monaco, monospace;
338
- vertical-align: top;
339
- margin: 0px auto 5px auto;
340
- padding: 0px 10px;
341
  }
342
 
343
- .whole-menu label{
344
- display: inline-block;
345
- line-height: 25px;
346
- height: 23px;
347
  }
348
 
349
- .menu-submenu-list{
350
- border: 1px solid #CCCCCC;
351
- border-radius: 5px;
352
- padding: 12px 5px 5px;
353
- background-color: #F9F9F9;
354
- width: 95%;
355
- margin: auto;
356
- display: table;
357
  }
358
 
359
- .menu-submenu-row{
360
- display: table-row;
361
  }
362
 
363
- .menu-submenu-item{
364
- text-align: right;
365
- padding-right: 10px;
366
- font-family: 'Lucida Console', Monaco, monospace;
367
- vertical-align: top;
368
- display: table-cell;
369
  }
370
 
371
- .menu-submenu-item label{
372
- display: inline-block;
373
- line-height: 25px;
374
- height: 29px;
375
- font-size: 0.8em;
376
  }
377
 
378
- #main_menu_list input[type="checkbox"] {
379
- display:none;
380
  }
381
 
382
- #main_menu_list input[type="checkbox"] + label span {
383
- display:inline-block;
384
- width:16px;
385
- height:16px;
386
- background:url(images/menu/unchecked.png) no-repeat center;
387
- cursor:pointer;
388
- margin-top: 4px;
389
  }
390
 
391
- #main_menu_list input[type="checkbox"]:checked + label span {
392
- background:url(images/menu/checked.png) no-repeat center;
393
  }
394
 
395
- .menu-empty-list{
396
- border: 1px solid #bf0909;
397
- border-radius: 4px;
398
- padding: 8px 10px;
399
- text-align: center;
400
  font-weight: bold;
401
- font-size: 1em;
402
- background-color: #E2E4FF;
403
  }
404
 
405
- /** METABOX & WIDGETS STYLES */
406
- .metabox-top-actions{
407
- padding: 2px 0;
408
- width: 100%;
409
- margin-bottom: 10px;
410
  }
411
 
412
- .metabox-top-action-link{
413
- width: 75%;
414
- float: left;
415
  }
416
 
417
- .metabox-top-action-link input{
418
- height: 24px;
419
- width: 100%;
420
- background-repeat: no-repeat;
421
- background-position: 5px center;
422
- background-image: url('images/metabox/link.png');
423
- padding-left: 24px;
424
  }
425
 
426
- .metabox-top-action-link input:focus{
427
- background-image: url('images/metabox/link-active.png');
 
428
  }
429
 
430
- .metabox-top-actions .aam-icon-medium-add{
431
- margin-left: 10px;
432
- display: inline-block;
433
  }
434
 
435
- .metabox-top-actions .aam-icon-medium-refresh{
436
- float: right;
437
- display: inline-block;
438
  }
439
 
440
- .metabox-group{
441
- border: 1px solid #CCCCCC;
442
- border-radius: 5px;
443
- padding: 12px 5px 5px;
444
- background-color: #F9F9F9;
445
- width: 95%;
446
- margin: auto;
447
- display: table;
448
  }
449
 
450
- .metabox-row{
451
- display: table-row;
452
- }
 
453
 
454
- .metabox-item{
455
- text-align: right;
456
- font-family: 'Lucida Console', Monaco, monospace;
457
- vertical-align: top;
458
- display: table-cell;
459
  }
460
 
461
- .metabox-item label{
 
462
  display: inline-block;
463
- line-height: 25px;
464
- height: 29px;
465
- font-size: 0.8em;
466
  }
467
 
468
- .metabox-item input[type="checkbox"] {
469
- display:none;
470
- }
 
471
 
472
- .metabox-item input[type="checkbox"] + label span {
473
- display:inline-block;
474
- width:16px;
475
- height:16px;
476
- background:url(images/metabox/unchecked.png) no-repeat center;
477
- cursor:pointer;
478
- margin-top: 4px;
479
- margin-left: 6px;
480
  }
481
 
482
- .metabox-item input[type="checkbox"]:checked + label span {
483
- background:url(images/metabox/checked.png) no-repeat center;
484
  }
485
 
486
- #metabox_content{
487
- min-height: 200px;
 
488
  }
489
 
490
- /** CAPABILITIES STYLES */
491
- .capability-actions{
492
- display: table;
 
493
  width: 100%;
 
 
 
494
  }
495
 
496
- .capability-action{
497
- width: 16px;
498
- height: 16px;
499
- display: table-cell;
500
- text-align: center;
501
- vertical-align: middle;
502
- text-decoration: none;
503
- outline: 0;
504
- }
505
-
506
- a.capability-action{
507
- outline: 0;
508
- }
509
-
510
- .capability-action input[type="checkbox"] {
511
- display:none;
512
- }
513
-
514
- .capability-action input[type="checkbox"] + label span {
515
- display:inline-block;
516
- width:16px;
517
- height:16px;
518
- background:url(images/capability/unchecked.png) no-repeat center;
519
- cursor:pointer;
520
- margin-top: 4px;
521
- }
522
-
523
- .capability-action input[type="checkbox"]:checked + label span {
524
- background:url(images/capability/checked.png) no-repeat center;
525
- }
526
-
527
- .capability-action-delete{
528
- background: transparent url('images/capability/delete.png') no-repeat center;
529
- }
530
-
531
- .capability-action-delete:hover{
532
- background: transparent url('images/capability/delete-active.png') no-repeat center;
533
- }
534
-
535
- .capability-action-delete-active{
536
- background: transparent url('images/capability/delete-active.png') no-repeat center;
537
  }
538
 
539
- .capability-action-select{
540
- background: transparent url('images/capability/select.png') no-repeat center;
541
  }
542
 
543
- .capability-action-select:hover{
544
- background: transparent url('images/capability/select-active.png') no-repeat center;
 
 
 
 
545
  }
546
 
547
- .capability-action-select-active{
548
- background: transparent url('images/capability/select-active.png') no-repeat center;
549
  }
550
 
551
- #capability_unfiltered {
552
- display:none;
553
  }
554
 
555
- #capability_unfiltered + label span {
556
- display:inline-block;
557
- width:16px;
558
- height:16px;
559
- background:url(images/capability/unchecked.png) no-repeat center;
560
- cursor:pointer;
561
- margin-top: 4px;
562
  }
563
 
564
- #capability_unfiltered:checked + label span {
565
- background:url(images/capability/checked.png) no-repeat center;
 
566
  }
567
 
568
- .aam-align-right{
569
- text-align: right;
 
 
 
570
  }
571
 
572
-
573
- /** POSTS & CATEGORIES STYLES */
574
- .post-type-post{
575
- height: 16px;
576
- background: transparent url('images/post/post.png') no-repeat left center;
577
- display: inline-block;
578
- padding-left: 20px;
579
- text-decoration: none;
580
  }
581
 
582
- .post-action-check{
 
 
 
583
  text-align: center;
584
  }
585
 
586
- .post-action-lock{
587
- background-image: url('images/lock.png');
588
- }
589
-
590
- .post-action input[type="checkbox"] {
591
- display:none;
592
- }
593
-
594
- .post-action input[type="checkbox"] + label span {
595
- display:inline-block;
596
- width:16px;
597
- height:16px;
598
- background:url(images/post/unchecked.png) no-repeat center;
599
- cursor:pointer;
600
- margin-top: 4px;
601
  }
602
 
603
- .post-action input[type="checkbox"]:checked + label span {
604
- background:url(images/post/checked.png) no-repeat center;
 
 
 
 
605
  }
606
 
607
- .post-access-area{
608
- margin: 5px 0;
609
- text-align: center;
610
  }
611
 
612
- .post-access-area .ui-button-text-only .ui-button-text{
613
- padding: 0.1em 1em;
 
 
614
  }
615
 
616
- .post-category-subposts .ui-button-text-only .ui-button-text{
617
- padding: 0.1em 1em;
 
 
 
 
 
 
 
 
 
 
 
618
  }
619
 
620
- .post-access{
621
  display: inline-block;
622
- font-size: 14px;
623
- font-weight: bold;
624
- padding: 2px 0 4px 5px;
625
- text-transform: uppercase;
626
  }
627
 
628
- .post-access-inherited{
629
- border: 1px solid #CCCCCC;
630
- border-radius: 3px;
631
- color: #FF0000;
632
- margin: 5px 0 10px;
633
- padding: 2px;
634
- text-align: center;
635
  display: none;
636
  }
637
 
638
- .post-breadcrumb{
639
- margin-top: 4px;
640
- border: 1px solid #CCCCCC;
641
- width: 100%;
642
- padding: 4px 0px;
643
- font-family: 'Lucida Console', Monaco, monospace;
644
  }
645
 
646
- .post-breadcrumb-loading{
647
- background: transparent url('images/post/loader.gif') no-repeat center;
648
  }
649
 
650
- .post-breadcrumb-line{
651
- width: 88%;
652
- display: inline-block;
653
- vertical-align: middle;
654
  }
655
 
656
- .post-breadcrumb-line a{
657
  text-decoration: none;
658
- font-weight: bold;
659
- color: #257DA6;
660
- margin-left: 5px;
661
  }
662
 
663
- .aam-gt{
664
- display: inline-block;
665
- margin: 0 2px;
 
666
  }
667
 
668
- .post-breadcrumb-line-actions{
669
- width: 10%;
670
- display:inline-table;
671
- border-left: 1px solid #CCCCCC;
672
- vertical-align: middle;
673
- text-align: center;
674
  }
675
 
676
- .post-breadcrumb-line-actions a{
677
- display: table-cell;
678
- width: 16px;
679
- height: 16px;
680
- background-position: center;
681
- background-repeat: no-repeat;
682
  }
683
 
684
- .post-breadcrumb-line-action-lock{
685
- background-image: url('images/lock.png');
686
  }
687
 
688
- #access_dialog{
689
  position: relative;
 
690
  }
691
 
692
- .aam-lock-message{
693
- margin: 5px 0 10px 0;
694
- border: 1px solid #bf0909;
695
- border-radius: 4px;
696
- background: transparent url('images/lock.png') no-repeat 5px center;
697
- display: table;
698
  width: 100%;
 
 
 
 
 
 
 
 
699
  }
700
 
701
- .attachment-access-block{
702
- border: 1px solid #257DA6;
703
- border-radius: 4px;
704
- -moz-border-radius: 4px;
705
- -webkit-border-radius: 4px;
706
- padding-left: 22px;
707
- box-sizing: content-box;
708
- -moz-box-sizing: content-box;
709
- -webkit-box-sizing: content-box;
710
- background: transparent url('images/post/info-active.png') no-repeat 2px center;
711
- font-size: 0.8em;
712
- }
713
-
714
- .aam-lock-message span{
715
- font-weight: bold;
716
- vertical-align: middle;
717
- display: table-cell;
718
- padding: 5px 2px 5px 28px;
719
- }
720
-
721
- .aam-lock-message a{
722
- color: #257DA6;
723
- outline: 0;
724
- }
725
-
726
- .ui-menu {
727
- width: 150px;
728
- z-index: 9999;
729
  }
730
 
731
- .post-term-descend{
732
- margin: 5px 0;
733
- text-align: left;
734
- display: table;
735
  vertical-align: middle;
736
  }
737
 
738
- .post-term-descend label{
739
- display: table-cell;
740
- }
741
-
742
- .post-term-descend input[type="checkbox"] {
743
- display:none;
744
  }
745
 
746
- .post-term-descend input[type="checkbox"] + label span {
747
- display:inline-block;
748
- width:16px;
749
- height:16px;
750
- background:url(images/capability/unchecked.png) no-repeat center;
751
- cursor:pointer;
752
- margin-top: 4px;
753
- margin-left: 8px;
754
  }
755
 
756
- .post-term-descend input[type="checkbox"]:checked + label span {
757
- background:url(images/capability/checked.png) no-repeat center;
 
 
 
758
  }
759
 
760
- #access_dialog table.dataTable td{
761
- padding: 0px 10px;
762
- }
763
-
764
- .dataTable th.term-access-title, .dataTable th.post-access-title{
765
- background-color: #CCCCCC;
766
  }
767
 
768
- .post-access-list{
 
 
 
769
  position: relative;
 
 
770
  }
771
 
772
- .post-access-list .post-access-block{
773
- position: absolute;
774
- top: 0;
775
- left: 0;
776
- width: 100%;
777
- height: 100%;
778
  background-color: #F5F5F5;
779
- opacity: 0.8;
780
- }
781
-
782
- .aam-lock-big{
783
- display: table;
784
- width: 100%;
785
- height: 120px;
786
- background: transparent url('images/post/lock-big.png') no-repeat center;
787
- }
788
-
789
- a.aam-lock-big{
790
- text-decoration: none;
791
- outline: 0;
792
  }
793
 
794
- .aam-lock-big span{
795
- display: table-cell;
796
- vertical-align: bottom;
797
  text-align: center;
798
- text-transform: uppercase;
799
- font-size: 0.8em;
800
- font-weight: bold;
801
  }
802
 
803
- .aam-post-access-notice{
804
- display: inline-block;
805
- margin-right: 2px;
806
- color: #257DA6;
807
- font-weight: bold;
808
  }
809
 
810
- .post-access-description{
811
- font-size: 0.75em;
 
812
  }
813
 
814
-
815
- /** EVENT MANAGER STYLES */
816
- .event-actions{
817
- display: table;
818
- width: 100%;
819
  }
820
 
821
- .event-action{
822
- width: 16px;
823
- height: 16px;
824
- display: table-cell;
825
- padding: 2px 0;
826
- background-repeat: no-repeat;
827
- background-position: center;
828
  }
829
 
830
- .event-action-edit{
831
- background-image: url('images/event/edit.png');
 
832
  }
833
 
834
- .event-action-edit:hover{
835
- background-image: url('images/event/edit-active.png');
 
836
  }
837
 
838
- .event-action-edit-active{
839
- background-image: url('images/event/edit-active.png');
 
 
 
840
  }
841
 
842
- .event-action-delete{
843
- background-image: url('images/event/delete.png');
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
844
  }
845
 
846
- .event-action-delete:hover{
847
- background-image: url('images/event/delete-active.png');
 
 
 
 
848
  }
849
 
850
- .event-action-delete-active{
851
- background-image: url('images/event/delete-active.png');
852
  }
853
 
854
- .event-specifier{
855
- display:none;
 
 
856
  }
857
 
858
- .ui-accordion h4{
859
- margin: 0;
860
  }
861
 
862
- .aam-logo {
863
- float: left;
864
- width: 128px;
865
- height: 128px;
866
- background: transparent url('images/logo.png') no-repeat center;
867
- background-size: 100% 100%;
868
  }
869
 
870
- .aam-notification {
871
- width: 95%;
872
- border-left: 3px solid #F04748;
873
- background-color: #FFFFFF;
874
- padding: 10px;
875
- position: relative;
 
876
  }
877
 
878
- .aam-notification-content {
879
- float: left;
880
- padding-left: 15px;
 
 
 
881
  }
882
 
883
- .aam-notification:after {
884
- content: ' ';
885
- display: block;
886
- clear:both;
887
  }
888
 
889
- .aam-notification > .dashicons-dismiss {
890
- color: #424242;
891
- position: absolute;
892
- right: 20px;
893
- top: 50%;
894
- width: 1em;
895
- margin-top: -0.5em;
896
  }
3
  * LICENSE: This file is subject to the terms and conditions defined in *
4
  * file 'license.txt', which is part of this source code package. *
5
  * ======================================================================
6
+ */
7
+
8
+ @font-face {
9
+ font-family: 'fontello';
10
+ src: url('../font/fontello.eot?99287648');
11
+ src: url('../font/fontello.eot?99287648#iefix') format('embedded-opentype'),
12
+ url('../font/fontello.woff?99287648') format('woff'),
13
+ url('../font/fontello.ttf?99287648') format('truetype'),
14
+ url('../font/fontello.svg?99287648#fontello') format('svg');
15
+ font-weight: normal;
16
+ font-style: normal;
17
+ }
18
+ /* Chrome hack: SVG is rendered more smooth in Windozze. 100% magic, uncomment if you need it. */
19
+ /* Note, that will break hinting! In other OS-es font will be not as sharp as it could be */
20
+ /*
21
+ @media screen and (-webkit-min-device-pixel-ratio:0) {
22
+ @font-face {
23
+ font-family: 'fontello';
24
+ src: url('../font/fontello.svg?99287648#fontello') format('svg');
25
+ }
26
+ }
27
  */
28
 
29
+ [class^="icon-"]:before, [class*=" icon-"]:before {
30
+ font-family: "fontello";
31
+ font-style: normal;
32
+ font-weight: normal;
33
+ speak: none;
34
 
 
 
 
 
 
 
35
  display: inline-block;
36
+ text-decoration: inherit;
37
+ width: 1em;
38
+ margin-right: .2em;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
39
  text-align: center;
40
+ /* opacity: .8; */
41
+
42
+ /* For safety - reset parent styles, that can break glyph codes*/
43
+ font-variant: normal;
44
+ text-transform: none;
45
+
46
+ /* fix buttons height, for twitter bootstrap */
47
+ line-height: 1em;
48
+
49
+ /* Animation center compensation - margins should be symmetric */
50
+ /* remove if not needed */
51
+ margin-left: .2em;
52
+
53
+ /* you can be more comfortable with increased icons size */
54
+ /* font-size: 120%; */
55
+
56
+ /* Font smoothing. That was taken from TWBS */
57
+ -webkit-font-smoothing: antialiased;
58
+ -moz-osx-font-smoothing: grayscale;
59
+
60
+ /* Uncomment for 3D effect */
61
+ /* text-shadow: 1px 1px 1px rgba(127, 127, 127, 0.3); */
62
+ }
63
+
64
+ .icon-spin4:before { content: '\e800'; } /* '' */
65
+ .icon-user-secret:before { content: '\e801'; } /* '' */
66
+ .icon-users:before { content: '\e802'; } /* '' */
67
+ .icon-user:before { content: '\e803'; } /* '' */
68
+ .icon-trash-empty:before { content: '\e804'; } /* '' */
69
+ .icon-cog:before { content: '\e805'; } /* '' */
70
+ .icon-lock:before { content: '\e806'; } /* '' */
71
+ .icon-pencil:before { content: '\e807'; } /* '' */
72
+ .icon-arrows-cw:before { content: '\e808'; } /* '' */
73
+ .icon-lock-open-alt:before { content: '\e809'; } /* '' */
74
+ .icon-plus:before { content: '\e80a'; } /* '' */
75
+ .icon-filter:before { content: '\e80b'; } /* '' */
76
+ .icon-check:before { content: '\e80c'; } /* '' */
77
+ .icon-help-circled:before { content: '\e80d'; } /* '' */
78
+ .icon-box:before { content: '\e80e'; } /* '' */
79
+ .icon-folder:before { content: '\e80f'; } /* '' */
80
+ .icon-check-empty:before { content: '\e810'; } /* '' */
81
+ .icon-doc-text-inv:before { content: '\e811'; } /* '' */
82
+ .icon-home:before { content: '\e812'; } /* '' */
83
+ .icon-angle-double-right:before { content: '\e813'; } /* '' */
84
+ .icon-eye-off:before { content: '\e814'; } /* '' */
85
+ .icon-attention-circled:before { content: '\e815'; } /* '' */
86
+ .icon-eye:before { content: '\e816'; } /* '' */
87
+ .icon-basket:before { content: '\e817'; } /* '' */
88
+ .icon-download-cloud:before { content: '\e818'; } /* '' */
89
+ .icon-github:before { content: '\e819'; } /* '' */
90
+ .icon-twitter:before { content: '\e81a'; } /* '' */
91
+
92
+ .animate-spin {
93
+ -moz-animation: spin 2s infinite linear;
94
+ -o-animation: spin 2s infinite linear;
95
+ -webkit-animation: spin 2s infinite linear;
96
+ animation: spin 2s infinite linear;
97
+ display: inline-block;
98
  }
99
+ @-moz-keyframes spin {
100
+ 0% {
101
+ -moz-transform: rotate(0deg);
102
+ -o-transform: rotate(0deg);
103
+ -webkit-transform: rotate(0deg);
104
+ transform: rotate(0deg);
105
+ }
106
+
107
+ 100% {
108
+ -moz-transform: rotate(359deg);
109
+ -o-transform: rotate(359deg);
110
+ -webkit-transform: rotate(359deg);
111
+ transform: rotate(359deg);
112
+ }
113
+ }
114
+ @-webkit-keyframes spin {
115
+ 0% {
116
+ -moz-transform: rotate(0deg);
117
+ -o-transform: rotate(0deg);
118
+ -webkit-transform: rotate(0deg);
119
+ transform: rotate(0deg);
120
+ }
121
+
122
+ 100% {
123
+ -moz-transform: rotate(359deg);
124
+ -o-transform: rotate(359deg);
125
+ -webkit-transform: rotate(359deg);
126
+ transform: rotate(359deg);
127
+ }
128
+ }
129
+ @-o-keyframes spin {
130
+ 0% {
131
+ -moz-transform: rotate(0deg);
132
+ -o-transform: rotate(0deg);
133
+ -webkit-transform: rotate(0deg);
134
+ transform: rotate(0deg);
135
+ }
136
+
137
+ 100% {
138
+ -moz-transform: rotate(359deg);
139
+ -o-transform: rotate(359deg);
140
+ -webkit-transform: rotate(359deg);
141
+ transform: rotate(359deg);
142
+ }
143
+ }
144
+ @-ms-keyframes spin {
145
+ 0% {
146
+ -moz-transform: rotate(0deg);
147
+ -o-transform: rotate(0deg);
148
+ -webkit-transform: rotate(0deg);
149
+ transform: rotate(0deg);
150
+ }
151
+
152
+ 100% {
153
+ -moz-transform: rotate(359deg);
154
+ -o-transform: rotate(359deg);
155
+ -webkit-transform: rotate(359deg);
156
+ transform: rotate(359deg);
157
+ }
158
+ }
159
+ @keyframes spin {
160
+ 0% {
161
+ -moz-transform: rotate(0deg);
162
+ -o-transform: rotate(0deg);
163
+ -webkit-transform: rotate(0deg);
164
+ transform: rotate(0deg);
165
+ }
166
+
167
+ 100% {
168
+ -moz-transform: rotate(359deg);
169
+ -o-transform: rotate(359deg);
170
+ -webkit-transform: rotate(359deg);
171
+ transform: rotate(359deg);
172
+ }
173
+ }
174
+
175
+ /** WORDPRESS **/
176
+ html, body {
177
+ height: auto;
178
+ min-height: 100%;
179
+ }
180
+
181
+ .postbox .inside {
182
  margin-bottom: 0;
183
+ overflow: hidden;
184
  }
185
 
186
+ .wp-admin select {
187
+ height: 34px;
188
+ line-height: 34px;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
189
  }
190
 
191
+ .metabox-holder h3 {
192
+ letter-spacing: 1px;
193
+ font-size: 1.2em;
 
 
 
 
 
 
 
194
  }
195
 
196
+ .wrap {
197
  position: relative;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
198
  }
199
 
200
+ .js .postbox .hndle, .js .widget .widget-top {
201
+ cursor: auto;
 
 
 
 
 
 
 
 
 
202
  }
203
 
204
+ /** BOOTSTRAP **/
205
+ .row {
206
  position: relative;
207
  }
208
 
209
+ a:focus, a:active {
210
+ outline: none;
211
+ box-shadow: none;
 
 
212
  }
213
 
214
+ .text-info {
215
+ color: #337ab7;
 
 
 
216
  }
217
 
218
+ .tab-content {
219
+ padding-top: 15px;
 
 
 
220
  }
221
 
222
+ .nav-tabs > li > a {
223
+ outline: none;
 
 
 
 
 
 
 
 
 
 
 
224
  }
225
 
226
+ .nav-tabs > li.active > a, .nav-tabs > li.active > a:focus, .nav-tabs > li.active > a:hover {
227
+ box-shadow: none;
 
228
  }
229
 
230
+ .input-sm, input[type="search"] {
231
+ box-shadow: none;
232
+ border-radius: 0;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
233
  }
234
 
235
+ div.error {
236
+ box-shadow: none;
237
+ margin: 0 0 15px 0 !important;
238
+ padding: 0;
 
 
 
239
  }
240
 
241
+ .form-control {
242
+ box-shadow: none;
243
+ height: 34px;
244
+ border-radius: 0;
245
  }
246
 
247
+ .list-group li {
 
 
 
 
248
  cursor: pointer;
249
+ font-size: 1.1em;
250
+ letter-spacing: 1px;
251
  }
252
 
253
+ .list-group li:hover {
254
+ background-color: #EEEEEE;
 
255
  }
256
 
257
+ .list-group li.active:hover {
258
+ background-color: #337ab7;
 
 
 
259
  }
260
 
261
+ .list-group li.active {
262
+ background-color: #337ab7;
263
+ color: #FFFFFF;
264
+ font-weight: bold;
265
  }
266
 
267
+ .panel-title {
268
+ font-size: 13px;
269
  }
270
 
271
+ .panel-group .panel + .panel {
272
+ margin-top: 2px;
 
 
 
 
 
 
 
 
273
  }
274
 
275
+ .panel-heading a {
276
+ outline: none;
 
 
 
 
 
277
  display: block;
 
 
278
  text-decoration: none;
279
  }
280
 
281
+ .panel-heading a:hover, .panel-heading a:focus, .panel-heading a:active {
282
+ box-shadow: none;
283
  }
284
 
285
+ .panel-collapse label {
286
+ margin-bottom: 0;
287
  }
288
 
289
+ a.btn:focus, a.btn:active {
290
+ outline: none !important;
 
 
 
 
 
 
 
291
  }
292
 
293
+ .pagination > li > a:hover {
294
+ border-color: transparent;
 
 
295
  }
296
 
297
+ .pagination > li > a, .pagination > li > span {
298
+ padding: 3px 10px;
 
 
 
 
 
 
299
  }
300
 
301
+ .pagination > li > a:focus, .pagination > li > a:active {
302
+ outline: none;
303
  }
304
 
305
+ .pagination > .active a {
306
+ box-shadow: none;
307
+ outline: none;
 
 
 
308
  }
309
 
310
+ .table {
311
+ margin-bottom: 10px;
 
 
 
312
  }
313
 
314
+ .table > tbody > tr > td, .table > tbody > tr > th, .table > tfoot > tr > td, .table > tfoot > tr > th, .table > thead > tr > td, .table > thead > tr > th {
315
+ vertical-align: middle;
316
  }
317
 
318
+ .btn-group-xs > .btn, .btn-xs {
319
+ border-radius: 0;
 
 
 
 
 
320
  }
321
 
322
+ .btn {
323
+ border-radius: 0;
324
  }
325
 
326
+ /** DATATABLES **/
327
+ .dataTables_info {
328
+ float: left;
 
 
329
  font-weight: bold;
330
+ font-size: 0.9em;
 
331
  }
332
 
333
+ div.dataTables_filter {
334
+ position: relative;
 
 
 
335
  }
336
 
337
+ div.dataTables_filter label {
338
+ margin-bottom: 0;
 
339
  }
340
 
341
+ div.dataTables_wrapper div.dataTables_filter {
342
+ text-align: left;
 
 
 
 
 
343
  }
344
 
345
+ #capability-list_wrapper div.dataTables_filter,
346
+ #post-list_wrapper div.dataTables_filter {
347
+ text-align: right;
348
  }
349
 
350
+ div.dataTables_filter a.btn {
351
+ float:right;
352
+ border-radius: 0;
353
  }
354
 
355
+ div.dataTables_wrapper div.dataTables_filter input {
356
+ margin-left: 0;
 
357
  }
358
 
359
+ table.table-bordered.dataTable tbody th, table.table-bordered.dataTable tbody td {
360
+ vertical-align: middle;
 
 
 
 
 
 
361
  }
362
 
363
+ /** AAM **/
364
+ input[type=checkbox] { /* to hide the checkbox itself */
365
+ display:none;
366
+ }
367
 
368
+ input[type=checkbox] + label {
369
+ width: 1.2em;
370
+ font-weight: normal;
 
 
371
  }
372
 
373
+ input[type=checkbox] + label:before {
374
+ font-family: 'fontello';
375
  display: inline-block;
376
+ font-size: 1.2em;
377
+ content: "\e810"; /* unchecked icon */
 
378
  }
379
 
380
+ input[type=checkbox]:checked + label:before {
381
+ font-size: 1.2em;
382
+ content: "\e80c"; /* checked icon */
383
+ }
384
 
385
+ input[type=checkbox].aam-checkbox-danger:checked + label:before {
386
+ color: #a94442;
 
 
 
 
 
 
387
  }
388
 
389
+ input[type="checkbox"]:focus, input[type="radio"]:focus {
390
+ outline: none;
391
  }
392
 
393
+ .aam-no-margin {
394
+ margin-left: 0;
395
+ margin-right: 0;
396
  }
397
 
398
+ .aam-lock {
399
+ position: absolute;
400
+ top: 0;
401
+ left: 0;
402
  width: 100%;
403
+ height: 100%;
404
+ background-color: rgba(169, 68, 66, 0.2);
405
+ z-index: 9999;
406
  }
407
 
408
+ .aam-block {
409
+ display: block;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
410
  }
411
 
412
+ .panel-title {
413
+ position: relative;
414
  }
415
 
416
+ .aam-panel-title-icon {
417
+ position: absolute;
418
+ right: 0;
419
+ top: 50%;
420
+ font-size: 1.2em;
421
+ margin-top: -0.6em;
422
  }
423
 
424
+ .table p {
425
+ margin: 0;
426
  }
427
 
428
+ .aam-margin-top-xs {
429
+ margin-top: 15px !important;
430
  }
431
 
432
+ .aam-bordered {
433
+ padding: 15px;
434
+ border: 1px solid #E5E5E5;
 
 
 
 
435
  }
436
 
437
+ .row.aam-bordered {
438
+ margin-left: 0;
439
+ margin-right: 0;
440
  }
441
 
442
+ .aam-list-action {
443
+ float: right;
444
+ font-size: 1.6em;
445
+ line-height: 30px;
446
+ cursor: pointer;
447
  }
448
 
449
+ .visitor-message {
450
+ border: 2px solid #F5F5F5;
451
+ padding: 15px 10px;
 
 
 
 
 
452
  }
453
 
454
+ .visitor-message span {
455
+ margin-bottom: 15px;
456
+ display: block;
457
+ font-size: 1.1em;
458
  text-align: center;
459
  }
460
 
461
+ .aam-row-actions {
462
+ display: table;
463
+ table-layout: fixed;
464
+ width: 100%;
 
 
 
 
 
 
 
 
 
 
 
465
  }
466
 
467
+ .aam-row-action {
468
+ display: table-cell;
469
+ text-align: center;
470
+ cursor: pointer;
471
+ font-size: 1.4em;
472
+ line-height: 1em;
473
  }
474
 
475
+ .aam-confirm-message {
476
+ font-size: 1.2em;
 
477
  }
478
 
479
+ .aam-asterix {
480
+ color: #a94442;
481
+ font-weight: bold;
482
+ margin-left: 3px;
483
  }
484
 
485
+ .aam-sticky-note {
486
+ position: absolute;
487
+ top: 10px;
488
+ right: 0px;
489
+ border: 1px solid #e5e5e5;
490
+ -webkit-box-shadow: 0px 0px 12px 2px rgba(100,100,100,1);
491
+ -moz-box-shadow: 0px 0px 12px 2px rgba(100,100,100,1);
492
+ box-shadow: 0px 0px 12px 2px rgba(100,100,100,1);
493
+ font-size: 1.6em;
494
+ font-weight: 500;
495
+ padding: 15px;
496
+ z-index: 999;
497
+ background-color: #FFFFFF;
498
  }
499
 
500
+ .aam-submenu-item label {
501
  display: inline-block;
502
+ width: 80%;
 
 
 
503
  }
504
 
505
+ .aam-feature {
 
 
 
 
 
 
506
  display: none;
507
  }
508
 
509
+ .aam-feature.active {
510
+ display: block;
 
 
 
 
511
  }
512
 
513
+ .aam-feature-top-actions {
514
+ margin-bottom: 15px;
515
  }
516
 
517
+ .aam-post-breadcrumb {
518
+ border: 1px solid #E5E5E5;
519
+ padding: 5px;
520
+ margin-bottom: 15px;
521
  }
522
 
523
+ .aam-post-breadcrumb a {
524
  text-decoration: none;
 
 
 
525
  }
526
 
527
+ .aam-row-subtitle {
528
+ display: block;
529
+ font-size: 0.8em;
530
+ font-style: normal;
531
  }
532
 
533
+ .aam-notification-message {
534
+ font-size: 1.2em;
535
+ border: 1px solid #E5E5E5;
536
+ padding: 10px;
 
 
537
  }
538
 
539
+ .aam-help-menu {
540
+ float: right;
541
+ font-size: 1.2em;
542
+ color: #337ab7;
543
+ cursor: pointer;
 
544
  }
545
 
546
+ .aam-help-menu.active {
547
+ color: #a94442;
548
  }
549
 
550
+ .aam-post-manager-container {
551
  position: relative;
552
+ overflow: hidden;
553
  }
554
 
555
+ .aam-post-manager, .aam-help-context {
556
+ position: absolute;
 
 
 
 
557
  width: 100%;
558
+ top: 0;
559
+ left: 100%;
560
+ background-color: #FFFFFF;
561
+ -webkit-transition: all .5s ease-in-out;
562
+ -moz-transition: all .5s ease-in-out;
563
+ -o-transition: all .5s ease-in-out;
564
+ transition: all .5s ease-in-out;
565
+ z-index: 2000;
566
  }
567
 
568
+ .aam-post-manager.active, .aam-help-context.active {
569
+ left: 0;
570
+ z-index: 1000;
571
+ position: relative;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
572
  }
573
 
574
+ .aam-post-manager .table td {
 
 
 
575
  vertical-align: middle;
576
  }
577
 
578
+ .aam-table-group {
579
+ font-size: 1.5em;
580
+ border-bottom-width: 4px !important;
 
 
 
581
  }
582
 
583
+ .aam-table-group small {
584
+ font-size: 65%;
 
 
 
 
 
 
585
  }
586
 
587
+ #post-list_wrapper {
588
+ -webkit-transition: all .5s ease-in-out;
589
+ -moz-transition: all .5s ease-in-out;
590
+ -o-transition: all .5s ease-in-out;
591
+ transition: all .5s ease-in-out;
592
  }
593
 
594
+ #post-list_wrapper.aam-hidden {
595
+ position: absolute;
596
+ opacity: 0;
 
 
 
597
  }
598
 
599
+ .aam-info {
600
+ border-left: 3px solid #337ab7;
601
+ background-color: #F5F5F5;
602
+ padding: 10px;
603
  position: relative;
604
+ font-size: 1.2em;
605
+ margin-bottom: 20px;
606
  }
607
 
608
+ .aam-notification {
609
+ border-left: 6px solid #F04748;
 
 
 
 
610
  background-color: #F5F5F5;
611
+ padding: 10px;
612
+ position: relative;
613
+ border-radius: 4px;
614
+ -moz-border-radius: 4px;
615
+ -webkit-border-radius: 4px;
 
 
 
 
 
 
 
 
616
  }
617
 
618
+ .aam-notification-icon {
619
+ font-size: 4em;
620
+ color: #F04748;
621
  text-align: center;
 
 
 
622
  }
623
 
624
+ .aam-notification:after {
625
+ content: ' ';
626
+ display: block;
627
+ clear:both;
 
628
  }
629
 
630
+ .aam-social {
631
+ font-size: 1.4em;
632
+ text-align: center;
633
  }
634
 
635
+ .aam-social a {
636
+ text-decoration: none;
637
+ margin: 0 10px;
 
 
638
  }
639
 
640
+ .aam-error-list li {
641
+ font-size: 1.2em;
 
 
 
 
 
642
  }
643
 
644
+ .aam-menu-capability {
645
+ color: #777777;
646
+ font-weight: 400;
647
  }
648
 
649
+ .aam-highlight {
650
+ color: #a94442;
651
+ font-weight: 700;
652
  }
653
 
654
+ .aam-hint {
655
+ font-size: 0.8em;
656
+ -moz-hyphens: auto;
657
+ word-wrap: break-word;
658
+ text-align: justify;
659
  }
660
 
661
+ .aam-welcome-message {
662
+ background-color: #f1f1f1;
663
+ color: #333333;
664
+ position: absolute;
665
+ top: 20px;
666
+ right: 20px;
667
+ width: 0;
668
+ opacity: 0;
669
+ padding: 10px 30px 15px 30px;
670
+ z-index: 10000;
671
+ visibility: hidden;
672
+ -webkit-transition: all .5s ease-in-out;
673
+ -moz-transition: all .5s ease-in-out;
674
+ -o-transition: all .5s ease-in-out;
675
+ transition: all .5s ease-in-out;
676
+ -webkit-transition-delay: 1s;
677
+ -moz-transition-delay: 1s;
678
+ -o-transition-delay: 1s;
679
+ transition-delay: 1s;
680
  }
681
 
682
+ .aam-welcome-message.active {
683
+ width: calc(100% - 15px);
684
+ width: -moz-calc(100% - 15px);
685
+ height: auto;
686
+ opacity: 1;
687
+ visibility: visible;
688
  }
689
 
690
+ .aam-welcome-message h1 {
691
+ font-size: 2.2em;
692
  }
693
 
694
+ .aam-welcome-message ul {
695
+ list-style: disc;
696
+ margin-left: 30px;
697
+ font-size: 1.2em;
698
  }
699
 
700
+ .aam-welcome-message .aam-notification-container ul {
701
+ list-style: none;
702
  }
703
 
704
+ .aam-welcome-message p {
705
+ font-size: 1.2em;
 
 
 
 
706
  }
707
 
708
+ .dataTables_processing {
709
+ border: 1px solid #cccccc;
710
+ color: #337ab7;
711
+ font-size: 0.8em;
712
+ font-weight: 700;
713
+ margin-top: -8px;
714
+ padding: 2px 5px;
715
  }
716
 
717
+ .aam-loading {
718
+ width: 100%;
719
+ text-align: center;
720
+ font-size:8em;
721
+ padding: 30px;
722
+ color: rgba(220, 220, 220, 0.8);
723
  }
724
 
725
+ .aam-current-subject {
726
+ border-bottom: 3px solid #EEEEEE;
 
 
727
  }
728
 
729
+ .aam-current-subject strong {
730
+ text-transform: capitalize;
 
 
 
 
 
731
  }
media/css/bootstrap.min.css ADDED
@@ -0,0 +1,5 @@
 
 
 
 
 
1
+ /*!
2
+ * Bootstrap v3.3.5 (http://getbootstrap.com)
3
+ * Copyright 2011-2015 Twitter, Inc.
4
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
5
+ *//*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */html{font-family:sans-serif;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%}body{margin:0}article,aside,details,figcaption,figure,footer,header,hgroup,main,menu,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background-color:transparent}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:700}dfn{font-style:italic}h1{margin:.67em 0;font-size:2em}mark{color:#000;background:#ff0}small{font-size:80%}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:1em 40px}hr{height:0;-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box}pre{overflow:auto}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}button,input,optgroup,select,textarea{margin:0;font:inherit;color:inherit}button{overflow:visible}button,select{text-transform:none}button,html input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{padding:0;border:0}input{line-height:normal}input[type=checkbox],input[type=radio]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;padding:0}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{height:auto}input[type=search]{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;-webkit-appearance:textfield}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}fieldset{padding:.35em .625em .75em;margin:0 2px;border:1px solid silver}legend{padding:0;border:0}textarea{overflow:auto}optgroup{font-weight:700}table{border-spacing:0;border-collapse:collapse}td,th{padding:0}/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */@media print{*,:after,:before{color:#000!important;text-shadow:none!important;background:0 0!important;-webkit-box-shadow:none!important;box-shadow:none!important}a,a:visited{text-decoration:underline}a[href]:after{content:" (" attr(href) ")"}abbr[title]:after{content:" (" attr(title) ")"}a[href^="javascript:"]:after,a[href^="#"]:after{content:""}blockquote,pre{border:1px solid #999;page-break-inside:avoid}thead{display:table-header-group}img,tr{page-break-inside:avoid}img{max-width:100%!important}h2,h3,p{orphans:3;widows:3}h2,h3{page-break-after:avoid}.navbar{display:none}.btn>.caret,.dropup>.btn>.caret{border-top-color:#000!important}.label{border:1px solid #000}.table{border-collapse:collapse!important}.table td,.table th{background-color:#fff!important}.table-bordered td,.table-bordered th{border:1px solid #ddd!important}}@font-face{font-family:'Glyphicons Halflings';src:url(../fonts/glyphicons-halflings-regular.eot);src:url(../fonts/glyphicons-halflings-regular.eot?#iefix) format('embedded-opentype'),url(../fonts/glyphicons-halflings-regular.woff2) format('woff2'),url(../fonts/glyphicons-halflings-regular.woff) format('woff'),url(../fonts/glyphicons-halflings-regular.ttf) format('truetype'),url(../fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular) format('svg')}.glyphicon{position:relative;top:1px;display:inline-block;font-family:'Glyphicons Halflings';font-style:normal;font-weight:400;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.glyphicon-asterisk:before{content:"\2a"}.glyphicon-plus:before{content:"\2b"}.glyphicon-eur:before,.glyphicon-euro:before{content:"\20ac"}.glyphicon-minus:before{content:"\2212"}.glyphicon-cloud:before{content:"\2601"}.glyphicon-envelope:before{content:"\2709"}.glyphicon-pencil:before{content:"\270f"}.glyphicon-glass:before{content:"\e001"}.glyphicon-music:before{content:"\e002"}.glyphicon-search:before{content:"\e003"}.glyphicon-heart:before{content:"\e005"}.glyphicon-star:before{content:"\e006"}.glyphicon-star-empty:before{content:"\e007"}.glyphicon-user:before{content:"\e008"}.glyphicon-film:before{content:"\e009"}.glyphicon-th-large:before{content:"\e010"}.glyphicon-th:before{content:"\e011"}.glyphicon-th-list:before{content:"\e012"}.glyphicon-ok:before{content:"\e013"}.glyphicon-remove:before{content:"\e014"}.glyphicon-zoom-in:before{content:"\e015"}.glyphicon-zoom-out:before{content:"\e016"}.glyphicon-off:before{content:"\e017"}.glyphicon-signal:before{content:"\e018"}.glyphicon-cog:before{content:"\e019"}.glyphicon-trash:before{content:"\e020"}.glyphicon-home:before{content:"\e021"}.glyphicon-file:before{content:"\e022"}.glyphicon-time:before{content:"\e023"}.glyphicon-road:before{content:"\e024"}.glyphicon-download-alt:before{content:"\e025"}.glyphicon-download:before{content:"\e026"}.glyphicon-upload:before{content:"\e027"}.glyphicon-inbox:before{content:"\e028"}.glyphicon-play-circle:before{content:"\e029"}.glyphicon-repeat:before{content:"\e030"}.glyphicon-refresh:before{content:"\e031"}.glyphicon-list-alt:before{content:"\e032"}.glyphicon-lock:before{content:"\e033"}.glyphicon-flag:before{content:"\e034"}.glyphicon-headphones:before{content:"\e035"}.glyphicon-volume-off:before{content:"\e036"}.glyphicon-volume-down:before{content:"\e037"}.glyphicon-volume-up:before{content:"\e038"}.glyphicon-qrcode:before{content:"\e039"}.glyphicon-barcode:before{content:"\e040"}.glyphicon-tag:before{content:"\e041"}.glyphicon-tags:before{content:"\e042"}.glyphicon-book:before{content:"\e043"}.glyphicon-bookmark:before{content:"\e044"}.glyphicon-print:before{content:"\e045"}.glyphicon-camera:before{content:"\e046"}.glyphicon-font:before{content:"\e047"}.glyphicon-bold:before{content:"\e048"}.glyphicon-italic:before{content:"\e049"}.glyphicon-text-height:before{content:"\e050"}.glyphicon-text-width:before{content:"\e051"}.glyphicon-align-left:before{content:"\e052"}.glyphicon-align-center:before{content:"\e053"}.glyphicon-align-right:before{content:"\e054"}.glyphicon-align-justify:before{content:"\e055"}.glyphicon-list:before{content:"\e056"}.glyphicon-indent-left:before{content:"\e057"}.glyphicon-indent-right:before{content:"\e058"}.glyphicon-facetime-video:before{content:"\e059"}.glyphicon-picture:before{content:"\e060"}.glyphicon-map-marker:before{content:"\e062"}.glyphicon-adjust:before{content:"\e063"}.glyphicon-tint:before{content:"\e064"}.glyphicon-edit:before{content:"\e065"}.glyphicon-share:before{content:"\e066"}.glyphicon-check:before{content:"\e067"}.glyphicon-move:before{content:"\e068"}.glyphicon-step-backward:before{content:"\e069"}.glyphicon-fast-backward:before{content:"\e070"}.glyphicon-backward:before{content:"\e071"}.glyphicon-play:before{content:"\e072"}.glyphicon-pause:before{content:"\e073"}.glyphicon-stop:before{content:"\e074"}.glyphicon-forward:before{content:"\e075"}.glyphicon-fast-forward:before{content:"\e076"}.glyphicon-step-forward:before{content:"\e077"}.glyphicon-eject:before{content:"\e078"}.glyphicon-chevron-left:before{content:"\e079"}.glyphicon-chevron-right:before{content:"\e080"}.glyphicon-plus-sign:before{content:"\e081"}.glyphicon-minus-sign:before{content:"\e082"}.glyphicon-remove-sign:before{content:"\e083"}.glyphicon-ok-sign:before{content:"\e084"}.glyphicon-question-sign:before{content:"\e085"}.glyphicon-info-sign:before{content:"\e086"}.glyphicon-screenshot:before{content:"\e087"}.glyphicon-remove-circle:before{content:"\e088"}.glyphicon-ok-circle:before{content:"\e089"}.glyphicon-ban-circle:before{content:"\e090"}.glyphicon-arrow-left:before{content:"\e091"}.glyphicon-arrow-right:before{content:"\e092"}.glyphicon-arrow-up:before{content:"\e093"}.glyphicon-arrow-down:before{content:"\e094"}.glyphicon-share-alt:before{content:"\e095"}.glyphicon-resize-full:before{content:"\e096"}.glyphicon-resize-small:before{content:"\e097"}.glyphicon-exclamation-sign:before{content:"\e101"}.glyphicon-gift:before{content:"\e102"}.glyphicon-leaf:before{content:"\e103"}.glyphicon-fire:before{content:"\e104"}.glyphicon-eye-open:before{content:"\e105"}.glyphicon-eye-close:before{content:"\e106"}.glyphicon-warning-sign:before{content:"\e107"}.glyphicon-plane:before{content:"\e108"}.glyphicon-calendar:before{content:"\e109"}.glyphicon-random:before{content:"\e110"}.glyphicon-comment:before{content:"\e111"}.glyphicon-magnet:before{content:"\e112"}.glyphicon-chevron-up:before{content:"\e113"}.glyphicon-chevron-down:before{content:"\e114"}.glyphicon-retweet:before{content:"\e115"}.glyphicon-shopping-cart:before{content:"\e116"}.glyphicon-folder-close:before{content:"\e117"}.glyphicon-folder-open:before{content:"\e118"}.glyphicon-resize-vertical:before{content:"\e119"}.glyphicon-resize-horizontal:before{content:"\e120"}.glyphicon-hdd:before{content:"\e121"}.glyphicon-bullhorn:before{content:"\e122"}.glyphicon-bell:before{content:"\e123"}.glyphicon-certificate:before{content:"\e124"}.glyphicon-thumbs-up:before{content:"\e125"}.glyphicon-thumbs-down:before{content:"\e126"}.glyphicon-hand-right:before{content:"\e127"}.glyphicon-hand-left:before{content:"\e128"}.glyphicon-hand-up:before{content:"\e129"}.glyphicon-hand-down:before{content:"\e130"}.glyphicon-circle-arrow-right:before{content:"\e131"}.glyphicon-circle-arrow-left:before{content:"\e132"}.glyphicon-circle-arrow-up:before{content:"\e133"}.glyphicon-circle-arrow-down:before{content:"\e134"}.glyphicon-globe:before{content:"\e135"}.glyphicon-wrench:before{content:"\e136"}.glyphicon-tasks:before{content:"\e137"}.glyphicon-filter:before{content:"\e138"}.glyphicon-briefcase:before{content:"\e139"}.glyphicon-fullscreen:before{content:"\e140"}.glyphicon-dashboard:before{content:"\e141"}.glyphicon-paperclip:before{content:"\e142"}.glyphicon-heart-empty:before{content:"\e143"}.glyphicon-link:before{content:"\e144"}.glyphicon-phone:before{content:"\e145"}.glyphicon-pushpin:before{content:"\e146"}.glyphicon-usd:before{content:"\e148"}.glyphicon-gbp:before{content:"\e149"}.glyphicon-sort:before{content:"\e150"}.glyphicon-sort-by-alphabet:before{content:"\e151"}.glyphicon-sort-by-alphabet-alt:before{content:"\e152"}.glyphicon-sort-by-order:before{content:"\e153"}.glyphicon-sort-by-order-alt:before{content:"\e154"}.glyphicon-sort-by-attributes:before{content:"\e155"}.glyphicon-sort-by-attributes-alt:before{content:"\e156"}.glyphicon-unchecked:before{content:"\e157"}.glyphicon-expand:before{content:"\e158"}.glyphicon-collapse-down:before{content:"\e159"}.glyphicon-collapse-up:before{content:"\e160"}.glyphicon-log-in:before{content:"\e161"}.glyphicon-flash:before{content:"\e162"}.glyphicon-log-out:before{content:"\e163"}.glyphicon-new-window:before{content:"\e164"}.glyphicon-record:before{content:"\e165"}.glyphicon-save:before{content:"\e166"}.glyphicon-open:before{content:"\e167"}.glyphicon-saved:before{content:"\e168"}.glyphicon-import:before{content:"\e169"}.glyphicon-export:before{content:"\e170"}.glyphicon-send:before{content:"\e171"}.glyphicon-floppy-disk:before{content:"\e172"}.glyphicon-floppy-saved:before{content:"\e173"}.glyphicon-floppy-remove:before{content:"\e174"}.glyphicon-floppy-save:before{content:"\e175"}.glyphicon-floppy-open:before{content:"\e176"}.glyphicon-credit-card:before{content:"\e177"}.glyphicon-transfer:before{content:"\e178"}.glyphicon-cutlery:before{content:"\e179"}.glyphicon-header:before{content:"\e180"}.glyphicon-compressed:before{content:"\e181"}.glyphicon-earphone:before{content:"\e182"}.glyphicon-phone-alt:before{content:"\e183"}.glyphicon-tower:before{content:"\e184"}.glyphicon-stats:before{content:"\e185"}.glyphicon-sd-video:before{content:"\e186"}.glyphicon-hd-video:before{content:"\e187"}.glyphicon-subtitles:before{content:"\e188"}.glyphicon-sound-stereo:before{content:"\e189"}.glyphicon-sound-dolby:before{content:"\e190"}.glyphicon-sound-5-1:before{content:"\e191"}.glyphicon-sound-6-1:before{content:"\e192"}.glyphicon-sound-7-1:before{content:"\e193"}.glyphicon-copyright-mark:before{content:"\e194"}.glyphicon-registration-mark:before{content:"\e195"}.glyphicon-cloud-download:before{content:"\e197"}.glyphicon-cloud-upload:before{content:"\e198"}.glyphicon-tree-conifer:before{content:"\e199"}.glyphicon-tree-deciduous:before{content:"\e200"}.glyphicon-cd:before{content:"\e201"}.glyphicon-save-file:before{content:"\e202"}.glyphicon-open-file:before{content:"\e203"}.glyphicon-level-up:before{content:"\e204"}.glyphicon-copy:before{content:"\e205"}.glyphicon-paste:before{content:"\e206"}.glyphicon-alert:before{content:"\e209"}.glyphicon-equalizer:before{content:"\e210"}.glyphicon-king:before{content:"\e211"}.glyphicon-queen:before{content:"\e212"}.glyphicon-pawn:before{content:"\e213"}.glyphicon-bishop:before{content:"\e214"}.glyphicon-knight:before{content:"\e215"}.glyphicon-baby-formula:before{content:"\e216"}.glyphicon-tent:before{content:"\26fa"}.glyphicon-blackboard:before{content:"\e218"}.glyphicon-bed:before{content:"\e219"}.glyphicon-apple:before{content:"\f8ff"}.glyphicon-erase:before{content:"\e221"}.glyphicon-hourglass:before{content:"\231b"}.glyphicon-lamp:before{content:"\e223"}.glyphicon-duplicate:before{content:"\e224"}.glyphicon-piggy-bank:before{content:"\e225"}.glyphicon-scissors:before{content:"\e226"}.glyphicon-bitcoin:before{content:"\e227"}.glyphicon-btc:before{content:"\e227"}.glyphicon-xbt:before{content:"\e227"}.glyphicon-yen:before{content:"\00a5"}.glyphicon-jpy:before{content:"\00a5"}.glyphicon-ruble:before{content:"\20bd"}.glyphicon-rub:before{content:"\20bd"}.glyphicon-scale:before{content:"\e230"}.glyphicon-ice-lolly:before{content:"\e231"}.glyphicon-ice-lolly-tasted:before{content:"\e232"}.glyphicon-education:before{content:"\e233"}.glyphicon-option-horizontal:before{content:"\e234"}.glyphicon-option-vertical:before{content:"\e235"}.glyphicon-menu-hamburger:before{content:"\e236"}.glyphicon-modal-window:before{content:"\e237"}.glyphicon-oil:before{content:"\e238"}.glyphicon-grain:before{content:"\e239"}.glyphicon-sunglasses:before{content:"\e240"}.glyphicon-text-size:before{content:"\e241"}.glyphicon-text-color:before{content:"\e242"}.glyphicon-text-background:before{content:"\e243"}.glyphicon-object-align-top:before{content:"\e244"}.glyphicon-object-align-bottom:before{content:"\e245"}.glyphicon-object-align-horizontal:before{content:"\e246"}.glyphicon-object-align-left:before{content:"\e247"}.glyphicon-object-align-vertical:before{content:"\e248"}.glyphicon-object-align-right:before{content:"\e249"}.glyphicon-triangle-right:before{content:"\e250"}.glyphicon-triangle-left:before{content:"\e251"}.glyphicon-triangle-bottom:before{content:"\e252"}.glyphicon-triangle-top:before{content:"\e253"}.glyphicon-console:before{content:"\e254"}.glyphicon-superscript:before{content:"\e255"}.glyphicon-subscript:before{content:"\e256"}.glyphicon-menu-left:before{content:"\e257"}.glyphicon-menu-right:before{content:"\e258"}.glyphicon-menu-down:before{content:"\e259"}.glyphicon-menu-up:before{content:"\e260"}*{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}:after,:before{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}html{font-size:10px;-webkit-tap-highlight-color:rgba(0,0,0,0)}body{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;line-height:1.42857143;color:#333;background-color:#fff}button,input,select,textarea{font-family:inherit;font-size:inherit;line-height:inherit}a{color:#337ab7;text-decoration:none}a:focus,a:hover{color:#23527c;text-decoration:underline}a:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}figure{margin:0}img{vertical-align:middle}.carousel-inner>.item>a>img,.carousel-inner>.item>img,.img-responsive,.thumbnail a>img,.thumbnail>img{display:block;max-width:100%;height:auto}.img-rounded{border-radius:6px}.img-thumbnail{display:inline-block;max-width:100%;height:auto;padding:4px;line-height:1.42857143;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:all .2s ease-in-out;-o-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.img-circle{border-radius:50%}hr{margin-top:20px;margin-bottom:20px;border:0;border-top:1px solid #eee}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}[role=button]{cursor:pointer}.h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{font-family:inherit;font-weight:500;line-height:1.1;color:inherit}.h1 .small,.h1 small,.h2 .small,.h2 small,.h3 .small,.h3 small,.h4 .small,.h4 small,.h5 .small,.h5 small,.h6 .small,.h6 small,h1 .small,h1 small,h2 .small,h2 small,h3 .small,h3 small,h4 .small,h4 small,h5 .small,h5 small,h6 .small,h6 small{font-weight:400;line-height:1;color:#777}.h1,.h2,.h3,h1,h2,h3{margin-top:20px;margin-bottom:10px}.h1 .small,.h1 small,.h2 .small,.h2 small,.h3 .small,.h3 small,h1 .small,h1 small,h2 .small,h2 small,h3 .small,h3 small{font-size:65%}.h4,.h5,.h6,h4,h5,h6{margin-top:10px;margin-bottom:10px}.h4 .small,.h4 small,.h5 .small,.h5 small,.h6 .small,.h6 small,h4 .small,h4 small,h5 .small,h5 small,h6 .small,h6 small{font-size:75%}.h1,h1{font-size:36px}.h2,h2{font-size:30px}.h3,h3{font-size:24px}.h4,h4{font-size:18px}.h5,h5{font-size:14px}.h6,h6{font-size:12px}p{margin:0 0 10px}.lead{margin-bottom:20px;font-size:16px;font-weight:300;line-height:1.4}@media (min-width:768px){.lead{font-size:21px}}.small,small{font-size:85%}.mark,mark{padding:.2em;background-color:#fcf8e3}.text-left{text-align:left}.text-right{text-align:right}.text-center{text-align:center}.text-justify{text-align:justify}.text-nowrap{white-space:nowrap}.text-lowercase{text-transform:lowercase}.text-uppercase{text-transform:uppercase}.text-capitalize{text-transform:capitalize}.text-muted{color:#777}.text-primary{color:#337ab7}a.text-primary:focus,a.text-primary:hover{color:#286090}.text-success{color:#3c763d}a.text-success:focus,a.text-success:hover{color:#2b542c}.text-info{color:#31708f}a.text-info:focus,a.text-info:hover{color:#245269}.text-warning{color:#8a6d3b}a.text-warning:focus,a.text-warning:hover{color:#66512c}.text-danger{color:#a94442}a.text-danger:focus,a.text-danger:hover{color:#843534}.bg-primary{color:#fff;background-color:#337ab7}a.bg-primary:focus,a.bg-primary:hover{background-color:#286090}.bg-success{background-color:#dff0d8}a.bg-success:focus,a.bg-success:hover{background-color:#c1e2b3}.bg-info{background-color:#d9edf7}a.bg-info:focus,a.bg-info:hover{background-color:#afd9ee}.bg-warning{background-color:#fcf8e3}a.bg-warning:focus,a.bg-warning:hover{background-color:#f7ecb5}.bg-danger{background-color:#f2dede}a.bg-danger:focus,a.bg-danger:hover{background-color:#e4b9b9}.page-header{padding-bottom:9px;margin:40px 0 20px;border-bottom:1px solid #eee}ol,ul{margin-top:0;margin-bottom:10px}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;margin-left:-5px;list-style:none}.list-inline>li{display:inline-block;padding-right:5px;padding-left:5px}dl{margin-top:0;margin-bottom:20px}dd,dt{line-height:1.42857143}dt{font-weight:700}dd{margin-left:0}@media (min-width:768px){.dl-horizontal dt{float:left;width:160px;overflow:hidden;clear:left;text-align:right;text-overflow:ellipsis;white-space:nowrap}.dl-horizontal dd{margin-left:180px}}abbr[data-original-title],abbr[title]{cursor:help;border-bottom:1px dotted #777}.initialism{font-size:90%;text-transform:uppercase}blockquote{padding:10px 20px;margin:0 0 20px;font-size:17.5px;border-left:5px solid #eee}blockquote ol:last-child,blockquote p:last-child,blockquote ul:last-child{margin-bottom:0}blockquote .small,blockquote footer,blockquote small{display:block;font-size:80%;line-height:1.42857143;color:#777}blockquote .small:before,blockquote footer:before,blockquote small:before{content:'\2014 \00A0'}.blockquote-reverse,blockquote.pull-right{padding-right:15px;padding-left:0;text-align:right;border-right:5px solid #eee;border-left:0}.blockquote-reverse .small:before,.blockquote-reverse footer:before,.blockquote-reverse small:before,blockquote.pull-right .small:before,blockquote.pull-right footer:before,blockquote.pull-right small:before{content:''}.blockquote-reverse .small:after,.blockquote-reverse footer:after,.blockquote-reverse small:after,blockquote.pull-right .small:after,blockquote.pull-right footer:after,blockquote.pull-right small:after{content:'\00A0 \2014'}address{margin-bottom:20px;font-style:normal;line-height:1.42857143}code,kbd,pre,samp{font-family:Menlo,Monaco,Consolas,"Courier New",monospace}code{padding:2px 4px;font-size:90%;color:#c7254e;background-color:#f9f2f4;border-radius:4px}kbd{padding:2px 4px;font-size:90%;color:#fff;background-color:#333;border-radius:3px;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.25);box-shadow:inset 0 -1px 0 rgba(0,0,0,.25)}kbd kbd{padding:0;font-size:100%;font-weight:700;-webkit-box-shadow:none;box-shadow:none}pre{display:block;padding:9.5px;margin:0 0 10px;font-size:13px;line-height:1.42857143;color:#333;word-break:break-all;word-wrap:break-word;background-color:#f5f5f5;border:1px solid #ccc;border-radius:4px}pre code{padding:0;font-size:inherit;color:inherit;white-space:pre-wrap;background-color:transparent;border-radius:0}.pre-scrollable{max-height:340px;overflow-y:scroll}.container{padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}@media (min-width:768px){.container{width:750px}}@media (min-width:992px){.container{width:970px}}@media (min-width:1200px){.container{width:1170px}}.container-fluid{padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}.row{margin-right:-15px;margin-left:-15px}.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-xs-1,.col-xs-10,.col-xs-11,.col-xs-12,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9{position:relative;min-height:1px;padding-right:15px;padding-left:15px}.col-xs-1,.col-xs-10,.col-xs-11,.col-xs-12,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9{float:left}.col-xs-12{width:100%}.col-xs-11{width:91.66666667%}.col-xs-10{width:83.33333333%}.col-xs-9{width:75%}.col-xs-8{width:66.66666667%}.col-xs-7{width:58.33333333%}.col-xs-6{width:50%}.col-xs-5{width:41.66666667%}.col-xs-4{width:33.33333333%}.col-xs-3{width:25%}.col-xs-2{width:16.66666667%}.col-xs-1{width:8.33333333%}.col-xs-pull-12{right:100%}.col-xs-pull-11{right:91.66666667%}.col-xs-pull-10{right:83.33333333%}.col-xs-pull-9{right:75%}.col-xs-pull-8{right:66.66666667%}.col-xs-pull-7{right:58.33333333%}.col-xs-pull-6{right:50%}.col-xs-pull-5{right:41.66666667%}.col-xs-pull-4{right:33.33333333%}.col-xs-pull-3{right:25%}.col-xs-pull-2{right:16.66666667%}.col-xs-pull-1{right:8.33333333%}.col-xs-pull-0{right:auto}.col-xs-push-12{left:100%}.col-xs-push-11{left:91.66666667%}.col-xs-push-10{left:83.33333333%}.col-xs-push-9{left:75%}.col-xs-push-8{left:66.66666667%}.col-xs-push-7{left:58.33333333%}.col-xs-push-6{left:50%}.col-xs-push-5{left:41.66666667%}.col-xs-push-4{left:33.33333333%}.col-xs-push-3{left:25%}.col-xs-push-2{left:16.66666667%}.col-xs-push-1{left:8.33333333%}.col-xs-push-0{left:auto}.col-xs-offset-12{margin-left:100%}.col-xs-offset-11{margin-left:91.66666667%}.col-xs-offset-10{margin-left:83.33333333%}.col-xs-offset-9{margin-left:75%}.col-xs-offset-8{margin-left:66.66666667%}.col-xs-offset-7{margin-left:58.33333333%}.col-xs-offset-6{margin-left:50%}.col-xs-offset-5{margin-left:41.66666667%}.col-xs-offset-4{margin-left:33.33333333%}.col-xs-offset-3{margin-left:25%}.col-xs-offset-2{margin-left:16.66666667%}.col-xs-offset-1{margin-left:8.33333333%}.col-xs-offset-0{margin-left:0}@media (min-width:768px){.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9{float:left}.col-sm-12{width:100%}.col-sm-11{width:91.66666667%}.col-sm-10{width:83.33333333%}.col-sm-9{width:75%}.col-sm-8{width:66.66666667%}.col-sm-7{width:58.33333333%}.col-sm-6{width:50%}.col-sm-5{width:41.66666667%}.col-sm-4{width:33.33333333%}.col-sm-3{width:25%}.col-sm-2{width:16.66666667%}.col-sm-1{width:8.33333333%}.col-sm-pull-12{right:100%}.col-sm-pull-11{right:91.66666667%}.col-sm-pull-10{right:83.33333333%}.col-sm-pull-9{right:75%}.col-sm-pull-8{right:66.66666667%}.col-sm-pull-7{right:58.33333333%}.col-sm-pull-6{right:50%}.col-sm-pull-5{right:41.66666667%}.col-sm-pull-4{right:33.33333333%}.col-sm-pull-3{right:25%}.col-sm-pull-2{right:16.66666667%}.col-sm-pull-1{right:8.33333333%}.col-sm-pull-0{right:auto}.col-sm-push-12{left:100%}.col-sm-push-11{left:91.66666667%}.col-sm-push-10{left:83.33333333%}.col-sm-push-9{left:75%}.col-sm-push-8{left:66.66666667%}.col-sm-push-7{left:58.33333333%}.col-sm-push-6{left:50%}.col-sm-push-5{left:41.66666667%}.col-sm-push-4{left:33.33333333%}.col-sm-push-3{left:25%}.col-sm-push-2{left:16.66666667%}.col-sm-push-1{left:8.33333333%}.col-sm-push-0{left:auto}.col-sm-offset-12{margin-left:100%}.col-sm-offset-11{margin-left:91.66666667%}.col-sm-offset-10{margin-left:83.33333333%}.col-sm-offset-9{margin-left:75%}.col-sm-offset-8{margin-left:66.66666667%}.col-sm-offset-7{margin-left:58.33333333%}.col-sm-offset-6{margin-left:50%}.col-sm-offset-5{margin-left:41.66666667%}.col-sm-offset-4{margin-left:33.33333333%}.col-sm-offset-3{margin-left:25%}.col-sm-offset-2{margin-left:16.66666667%}.col-sm-offset-1{margin-left:8.33333333%}.col-sm-offset-0{margin-left:0}}@media (min-width:992px){.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9{float:left}.col-md-12{width:100%}.col-md-11{width:91.66666667%}.col-md-10{width:83.33333333%}.col-md-9{width:75%}.col-md-8{width:66.66666667%}.col-md-7{width:58.33333333%}.col-md-6{width:50%}.col-md-5{width:41.66666667%}.col-md-4{width:33.33333333%}.col-md-3{width:25%}.col-md-2{width:16.66666667%}.col-md-1{width:8.33333333%}.col-md-pull-12{right:100%}.col-md-pull-11{right:91.66666667%}.col-md-pull-10{right:83.33333333%}.col-md-pull-9{right:75%}.col-md-pull-8{right:66.66666667%}.col-md-pull-7{right:58.33333333%}.col-md-pull-6{right:50%}.col-md-pull-5{right:41.66666667%}.col-md-pull-4{right:33.33333333%}.col-md-pull-3{right:25%}.col-md-pull-2{right:16.66666667%}.col-md-pull-1{right:8.33333333%}.col-md-pull-0{right:auto}.col-md-push-12{left:100%}.col-md-push-11{left:91.66666667%}.col-md-push-10{left:83.33333333%}.col-md-push-9{left:75%}.col-md-push-8{left:66.66666667%}.col-md-push-7{left:58.33333333%}.col-md-push-6{left:50%}.col-md-push-5{left:41.66666667%}.col-md-push-4{left:33.33333333%}.col-md-push-3{left:25%}.col-md-push-2{left:16.66666667%}.col-md-push-1{left:8.33333333%}.col-md-push-0{left:auto}.col-md-offset-12{margin-left:100%}.col-md-offset-11{margin-left:91.66666667%}.col-md-offset-10{margin-left:83.33333333%}.col-md-offset-9{margin-left:75%}.col-md-offset-8{margin-left:66.66666667%}.col-md-offset-7{margin-left:58.33333333%}.col-md-offset-6{margin-left:50%}.col-md-offset-5{margin-left:41.66666667%}.col-md-offset-4{margin-left:33.33333333%}.col-md-offset-3{margin-left:25%}.col-md-offset-2{margin-left:16.66666667%}.col-md-offset-1{margin-left:8.33333333%}.col-md-offset-0{margin-left:0}}@media (min-width:1200px){.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9{float:left}.col-lg-12{width:100%}.col-lg-11{width:91.66666667%}.col-lg-10{width:83.33333333%}.col-lg-9{width:75%}.col-lg-8{width:66.66666667%}.col-lg-7{width:58.33333333%}.col-lg-6{width:50%}.col-lg-5{width:41.66666667%}.col-lg-4{width:33.33333333%}.col-lg-3{width:25%}.col-lg-2{width:16.66666667%}.col-lg-1{width:8.33333333%}.col-lg-pull-12{right:100%}.col-lg-pull-11{right:91.66666667%}.col-lg-pull-10{right:83.33333333%}.col-lg-pull-9{right:75%}.col-lg-pull-8{right:66.66666667%}.col-lg-pull-7{right:58.33333333%}.col-lg-pull-6{right:50%}.col-lg-pull-5{right:41.66666667%}.col-lg-pull-4{right:33.33333333%}.col-lg-pull-3{right:25%}.col-lg-pull-2{right:16.66666667%}.col-lg-pull-1{right:8.33333333%}.col-lg-pull-0{right:auto}.col-lg-push-12{left:100%}.col-lg-push-11{left:91.66666667%}.col-lg-push-10{left:83.33333333%}.col-lg-push-9{left:75%}.col-lg-push-8{left:66.66666667%}.col-lg-push-7{left:58.33333333%}.col-lg-push-6{left:50%}.col-lg-push-5{left:41.66666667%}.col-lg-push-4{left:33.33333333%}.col-lg-push-3{left:25%}.col-lg-push-2{left:16.66666667%}.col-lg-push-1{left:8.33333333%}.col-lg-push-0{left:auto}.col-lg-offset-12{margin-left:100%}.col-lg-offset-11{margin-left:91.66666667%}.col-lg-offset-10{margin-left:83.33333333%}.col-lg-offset-9{margin-left:75%}.col-lg-offset-8{margin-left:66.66666667%}.col-lg-offset-7{margin-left:58.33333333%}.col-lg-offset-6{margin-left:50%}.col-lg-offset-5{margin-left:41.66666667%}.col-lg-offset-4{margin-left:33.33333333%}.col-lg-offset-3{margin-left:25%}.col-lg-offset-2{margin-left:16.66666667%}.col-lg-offset-1{margin-left:8.33333333%}.col-lg-offset-0{margin-left:0}}table{background-color:transparent}caption{padding-top:8px;padding-bottom:8px;color:#777;text-align:left}th{text-align:left}.table{width:100%;max-width:100%;margin-bottom:20px}.table>tbody>tr>td,.table>tbody>tr>th,.table>tfoot>tr>td,.table>tfoot>tr>th,.table>thead>tr>td,.table>thead>tr>th{padding:8px;line-height:1.42857143;vertical-align:top;border-top:1px solid #ddd}.table>thead>tr>th{vertical-align:bottom;border-bottom:2px solid #ddd}.table>caption+thead>tr:first-child>td,.table>caption+thead>tr:first-child>th,.table>colgroup+thead>tr:first-child>td,.table>colgroup+thead>tr:first-child>th,.table>thead:first-child>tr:first-child>td,.table>thead:first-child>tr:first-child>th{border-top:0}.table>tbody+tbody{border-top:2px solid #ddd}.table .table{background-color:#fff}.table-condensed>tbody>tr>td,.table-condensed>tbody>tr>th,.table-condensed>tfoot>tr>td,.table-condensed>tfoot>tr>th,.table-condensed>thead>tr>td,.table-condensed>thead>tr>th{padding:5px}.table-bordered{border:1px solid #ddd}.table-bordered>tbody>tr>td,.table-bordered>tbody>tr>th,.table-bordered>tfoot>tr>td,.table-bordered>tfoot>tr>th,.table-bordered>thead>tr>td,.table-bordered>thead>tr>th{border:1px solid #ddd}.table-bordered>thead>tr>td,.table-bordered>thead>tr>th{border-bottom-width:2px}.table-striped>tbody>tr:nth-of-type(odd){background-color:#f9f9f9}.table-hover>tbody>tr:hover{background-color:#f5f5f5}table col[class*=col-]{position:static;display:table-column;float:none}table td[class*=col-],table th[class*=col-]{position:static;display:table-cell;float:none}.table>tbody>tr.active>td,.table>tbody>tr.active>th,.table>tbody>tr>td.active,.table>tbody>tr>th.active,.table>tfoot>tr.active>td,.table>tfoot>tr.active>th,.table>tfoot>tr>td.active,.table>tfoot>tr>th.active,.table>thead>tr.active>td,.table>thead>tr.active>th,.table>thead>tr>td.active,.table>thead>tr>th.active{background-color:#f5f5f5}.table-hover>tbody>tr.active:hover>td,.table-hover>tbody>tr.active:hover>th,.table-hover>tbody>tr:hover>.active,.table-hover>tbody>tr>td.active:hover,.table-hover>tbody>tr>th.active:hover{background-color:#e8e8e8}.table>tbody>tr.success>td,.table>tbody>tr.success>th,.table>tbody>tr>td.success,.table>tbody>tr>th.success,.table>tfoot>tr.success>td,.table>tfoot>tr.success>th,.table>tfoot>tr>td.success,.table>tfoot>tr>th.success,.table>thead>tr.success>td,.table>thead>tr.success>th,.table>thead>tr>td.success,.table>thead>tr>th.success{background-color:#dff0d8}.table-hover>tbody>tr.success:hover>td,.table-hover>tbody>tr.success:hover>th,.table-hover>tbody>tr:hover>.success,.table-hover>tbody>tr>td.success:hover,.table-hover>tbody>tr>th.success:hover{background-color:#d0e9c6}.table>tbody>tr.info>td,.table>tbody>tr.info>th,.table>tbody>tr>td.info,.table>tbody>tr>th.info,.table>tfoot>tr.info>td,.table>tfoot>tr.info>th,.table>tfoot>tr>td.info,.table>tfoot>tr>th.info,.table>thead>tr.info>td,.table>thead>tr.info>th,.table>thead>tr>td.info,.table>thead>tr>th.info{background-color:#d9edf7}.table-hover>tbody>tr.info:hover>td,.table-hover>tbody>tr.info:hover>th,.table-hover>tbody>tr:hover>.info,.table-hover>tbody>tr>td.info:hover,.table-hover>tbody>tr>th.info:hover{background-color:#c4e3f3}.table>tbody>tr.warning>td,.table>tbody>tr.warning>th,.table>tbody>tr>td.warning,.table>tbody>tr>th.warning,.table>tfoot>tr.warning>td,.table>tfoot>tr.warning>th,.table>tfoot>tr>td.warning,.table>tfoot>tr>th.warning,.table>thead>tr.warning>td,.table>thead>tr.warning>th,.table>thead>tr>td.warning,.table>thead>tr>th.warning{background-color:#fcf8e3}.table-hover>tbody>tr.warning:hover>td,.table-hover>tbody>tr.warning:hover>th,.table-hover>tbody>tr:hover>.warning,.table-hover>tbody>tr>td.warning:hover,.table-hover>tbody>tr>th.warning:hover{background-color:#faf2cc}.table>tbody>tr.danger>td,.table>tbody>tr.danger>th,.table>tbody>tr>td.danger,.table>tbody>tr>th.danger,.table>tfoot>tr.danger>td,.table>tfoot>tr.danger>th,.table>tfoot>tr>td.danger,.table>tfoot>tr>th.danger,.table>thead>tr.danger>td,.table>thead>tr.danger>th,.table>thead>tr>td.danger,.table>thead>tr>th.danger{background-color:#f2dede}.table-hover>tbody>tr.danger:hover>td,.table-hover>tbody>tr.danger:hover>th,.table-hover>tbody>tr:hover>.danger,.table-hover>tbody>tr>td.danger:hover,.table-hover>tbody>tr>th.danger:hover{background-color:#ebcccc}.table-responsive{min-height:.01%;overflow-x:auto}@media screen and (max-width:767px){.table-responsive{width:100%;margin-bottom:15px;overflow-y:hidden;-ms-overflow-style:-ms-autohiding-scrollbar;border:1px solid #ddd}.table-responsive>.table{margin-bottom:0}.table-responsive>.table>tbody>tr>td,.table-responsive>.table>tbody>tr>th,.table-responsive>.table>tfoot>tr>td,.table-responsive>.table>tfoot>tr>th,.table-responsive>.table>thead>tr>td,.table-responsive>.table>thead>tr>th{white-space:nowrap}.table-responsive>.table-bordered{border:0}.table-responsive>.table-bordered>tbody>tr>td:first-child,.table-responsive>.table-bordered>tbody>tr>th:first-child,.table-responsive>.table-bordered>tfoot>tr>td:first-child,.table-responsive>.table-bordered>tfoot>tr>th:first-child,.table-responsive>.table-bordered>thead>tr>td:first-child,.table-responsive>.table-bordered>thead>tr>th:first-child{border-left:0}.table-responsive>.table-bordered>tbody>tr>td:last-child,.table-responsive>.table-bordered>tbody>tr>th:last-child,.table-responsive>.table-bordered>tfoot>tr>td:last-child,.table-responsive>.table-bordered>tfoot>tr>th:last-child,.table-responsive>.table-bordered>thead>tr>td:last-child,.table-responsive>.table-bordered>thead>tr>th:last-child{border-right:0}.table-responsive>.table-bordered>tbody>tr:last-child>td,.table-responsive>.table-bordered>tbody>tr:last-child>th,.table-responsive>.table-bordered>tfoot>tr:last-child>td,.table-responsive>.table-bordered>tfoot>tr:last-child>th{border-bottom:0}}fieldset{min-width:0;padding:0;margin:0;border:0}legend{display:block;width:100%;padding:0;margin-bottom:20px;font-size:21px;line-height:inherit;color:#333;border:0;border-bottom:1px solid #e5e5e5}label{display:inline-block;max-width:100%;margin-bottom:5px;font-weight:700}input[type=search]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}input[type=checkbox],input[type=radio]{margin:4px 0 0;margin-top:1px\9;line-height:normal}input[type=file]{display:block}input[type=range]{display:block;width:100%}select[multiple],select[size]{height:auto}input[type=file]:focus,input[type=checkbox]:focus,input[type=radio]:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}output{display:block;padding-top:7px;font-size:14px;line-height:1.42857143;color:#555}.form-control{display:block;width:100%;height:34px;padding:6px 12px;font-size:14px;line-height:1.42857143;color:#555;background-color:#fff;background-image:none;border:1px solid #ccc;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075);-webkit-transition:border-color ease-in-out .15s,-webkit-box-shadow ease-in-out .15s;-o-transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s}.form-control:focus{border-color:#66afe9;outline:0;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6);box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6)}.form-control::-moz-placeholder{color:#999;opacity:1}.form-control:-ms-input-placeholder{color:#999}.form-control::-webkit-input-placeholder{color:#999}.form-control[disabled],.form-control[readonly],fieldset[disabled] .form-control{background-color:#eee;opacity:1}.form-control[disabled],fieldset[disabled] .form-control{cursor:not-allowed}textarea.form-control{height:auto}input[type=search]{-webkit-appearance:none}@media screen and (-webkit-min-device-pixel-ratio:0){input[type=date].form-control,input[type=time].form-control,input[type=datetime-local].form-control,input[type=month].form-control{line-height:34px}.input-group-sm input[type=date],.input-group-sm input[type=time],.input-group-sm input[type=datetime-local],.input-group-sm input[type=month],input[type=date].input-sm,input[type=time].input-sm,input[type=datetime-local].input-sm,input[type=month].input-sm{line-height:30px}.input-group-lg input[type=date],.input-group-lg input[type=time],.input-group-lg input[type=datetime-local],.input-group-lg input[type=month],input[type=date].input-lg,input[type=time].input-lg,input[type=datetime-local].input-lg,input[type=month].input-lg{line-height:46px}}.form-group{margin-bottom:15px}.checkbox,.radio{position:relative;display:block;margin-top:10px;margin-bottom:10px}.checkbox label,.radio label{min-height:20px;padding-left:20px;margin-bottom:0;font-weight:400;cursor:pointer}.checkbox input[type=checkbox],.checkbox-inline input[type=checkbox],.radio input[type=radio],.radio-inline input[type=radio]{position:absolute;margin-top:4px\9;margin-left:-20px}.checkbox+.checkbox,.radio+.radio{margin-top:-5px}.checkbox-inline,.radio-inline{position:relative;display:inline-block;padding-left:20px;margin-bottom:0;font-weight:400;vertical-align:middle;cursor:pointer}.checkbox-inline+.checkbox-inline,.radio-inline+.radio-inline{margin-top:0;margin-left:10px}fieldset[disabled] input[type=checkbox],fieldset[disabled] input[type=radio],input[type=checkbox].disabled,input[type=checkbox][disabled],input[type=radio].disabled,input[type=radio][disabled]{cursor:not-allowed}.checkbox-inline.disabled,.radio-inline.disabled,fieldset[disabled] .checkbox-inline,fieldset[disabled] .radio-inline{cursor:not-allowed}.checkbox.disabled label,.radio.disabled label,fieldset[disabled] .checkbox label,fieldset[disabled] .radio label{cursor:not-allowed}.form-control-static{min-height:34px;padding-top:7px;padding-bottom:7px;margin-bottom:0}.form-control-static.input-lg,.form-control-static.input-sm{padding-right:0;padding-left:0}.input-sm{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.input-sm{height:30px;line-height:30px}select[multiple].input-sm,textarea.input-sm{height:auto}.form-group-sm .form-control{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.form-group-sm select.form-control{height:30px;line-height:30px}.form-group-sm select[multiple].form-control,.form-group-sm textarea.form-control{height:auto}.form-group-sm .form-control-static{height:30px;min-height:32px;padding:6px 10px;font-size:12px;line-height:1.5}.input-lg{height:46px;padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}select.input-lg{height:46px;line-height:46px}select[multiple].input-lg,textarea.input-lg{height:auto}.form-group-lg .form-control{height:46px;padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}.form-group-lg select.form-control{height:46px;line-height:46px}.form-group-lg select[multiple].form-control,.form-group-lg textarea.form-control{height:auto}.form-group-lg .form-control-static{height:46px;min-height:38px;padding:11px 16px;font-size:18px;line-height:1.3333333}.has-feedback{position:relative}.has-feedback .form-control{padding-right:42.5px}.form-control-feedback{position:absolute;top:0;right:0;z-index:2;display:block;width:34px;height:34px;line-height:34px;text-align:center;pointer-events:none}.form-group-lg .form-control+.form-control-feedback,.input-group-lg+.form-control-feedback,.input-lg+.form-control-feedback{width:46px;height:46px;line-height:46px}.form-group-sm .form-control+.form-control-feedback,.input-group-sm+.form-control-feedback,.input-sm+.form-control-feedback{width:30px;height:30px;line-height:30px}.has-success .checkbox,.has-success .checkbox-inline,.has-success .control-label,.has-success .help-block,.has-success .radio,.has-success .radio-inline,.has-success.checkbox label,.has-success.checkbox-inline label,.has-success.radio label,.has-success.radio-inline label{color:#3c763d}.has-success .form-control{border-color:#3c763d;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-success .form-control:focus{border-color:#2b542c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168}.has-success .input-group-addon{color:#3c763d;background-color:#dff0d8;border-color:#3c763d}.has-success .form-control-feedback{color:#3c763d}.has-warning .checkbox,.has-warning .checkbox-inline,.has-warning .control-label,.has-warning .help-block,.has-warning .radio,.has-warning .radio-inline,.has-warning.checkbox label,.has-warning.checkbox-inline label,.has-warning.radio label,.has-warning.radio-inline label{color:#8a6d3b}.has-warning .form-control{border-color:#8a6d3b;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-warning .form-control:focus{border-color:#66512c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c0a16b;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c0a16b}.has-warning .input-group-addon{color:#8a6d3b;background-color:#fcf8e3;border-color:#8a6d3b}.has-warning .form-control-feedback{color:#8a6d3b}.has-error .checkbox,.has-error .checkbox-inline,.has-error .control-label,.has-error .help-block,.has-error .radio,.has-error .radio-inline,.has-error.checkbox label,.has-error.checkbox-inline label,.has-error.radio label,.has-error.radio-inline label{color:#a94442}.has-error .form-control{border-color:#a94442;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-error .form-control:focus{border-color:#843534;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ce8483;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ce8483}.has-error .input-group-addon{color:#a94442;background-color:#f2dede;border-color:#a94442}.has-error .form-control-feedback{color:#a94442}.has-feedback label~.form-control-feedback{top:25px}.has-feedback label.sr-only~.form-control-feedback{top:0}.help-block{display:block;margin-top:5px;margin-bottom:10px;color:#737373}@media (min-width:768px){.form-inline .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .form-control-static{display:inline-block}.form-inline .input-group{display:inline-table;vertical-align:middle}.form-inline .input-group .form-control,.form-inline .input-group .input-group-addon,.form-inline .input-group .input-group-btn{width:auto}.form-inline .input-group>.form-control{width:100%}.form-inline .control-label{margin-bottom:0;vertical-align:middle}.form-inline .checkbox,.form-inline .radio{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.form-inline .checkbox label,.form-inline .radio label{padding-left:0}.form-inline .checkbox input[type=checkbox],.form-inline .radio input[type=radio]{position:relative;margin-left:0}.form-inline .has-feedback .form-control-feedback{top:0}}.form-horizontal .checkbox,.form-horizontal .checkbox-inline,.form-horizontal .radio,.form-horizontal .radio-inline{padding-top:7px;margin-top:0;margin-bottom:0}.form-horizontal .checkbox,.form-horizontal .radio{min-height:27px}.form-horizontal .form-group{margin-right:-15px;margin-left:-15px}@media (min-width:768px){.form-horizontal .control-label{padding-top:7px;margin-bottom:0;text-align:right}}.form-horizontal .has-feedback .form-control-feedback{right:15px}@media (min-width:768px){.form-horizontal .form-group-lg .control-label{padding-top:14.33px;font-size:18px}}@media (min-width:768px){.form-horizontal .form-group-sm .control-label{padding-top:6px;font-size:12px}}.btn{display:inline-block;padding:6px 12px;margin-bottom:0;font-size:14px;font-weight:400;line-height:1.42857143;text-align:center;white-space:nowrap;vertical-align:middle;-ms-touch-action:manipulation;touch-action:manipulation;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-image:none;border:1px solid transparent;border-radius:4px}.btn.active.focus,.btn.active:focus,.btn.focus,.btn:active.focus,.btn:active:focus,.btn:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.btn.focus,.btn:focus,.btn:hover{color:#333;text-decoration:none}.btn.active,.btn:active{background-image:none;outline:0;-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn.disabled,.btn[disabled],fieldset[disabled] .btn{cursor:not-allowed;filter:alpha(opacity=65);-webkit-box-shadow:none;box-shadow:none;opacity:.65}a.btn.disabled,fieldset[disabled] a.btn{pointer-events:none}.btn-default{color:#333;background-color:#fff;border-color:#ccc}.btn-default.focus,.btn-default:focus{color:#333;background-color:#e6e6e6;border-color:#8c8c8c}.btn-default:hover{color:#333;background-color:#e6e6e6;border-color:#adadad}.btn-default.active,.btn-default:active,.open>.dropdown-toggle.btn-default{color:#333;background-color:#e6e6e6;border-color:#adadad}.btn-default.active.focus,.btn-default.active:focus,.btn-default.active:hover,.btn-default:active.focus,.btn-default:active:focus,.btn-default:active:hover,.open>.dropdown-toggle.btn-default.focus,.open>.dropdown-toggle.btn-default:focus,.open>.dropdown-toggle.btn-default:hover{color:#333;background-color:#d4d4d4;border-color:#8c8c8c}.btn-default.active,.btn-default:active,.open>.dropdown-toggle.btn-default{background-image:none}.btn-default.disabled,.btn-default.disabled.active,.btn-default.disabled.focus,.btn-default.disabled:active,.btn-default.disabled:focus,.btn-default.disabled:hover,.btn-default[disabled],.btn-default[disabled].active,.btn-default[disabled].focus,.btn-default[disabled]:active,.btn-default[disabled]:focus,.btn-default[disabled]:hover,fieldset[disabled] .btn-default,fieldset[disabled] .btn-default.active,fieldset[disabled] .btn-default.focus,fieldset[disabled] .btn-default:active,fieldset[disabled] .btn-default:focus,fieldset[disabled] .btn-default:hover{background-color:#fff;border-color:#ccc}.btn-default .badge{color:#fff;background-color:#333}.btn-primary{color:#fff;background-color:#337ab7;border-color:#2e6da4}.btn-primary.focus,.btn-primary:focus{color:#fff;background-color:#286090;border-color:#122b40}.btn-primary:hover{color:#fff;background-color:#286090;border-color:#204d74}.btn-primary.active,.btn-primary:active,.open>.dropdown-toggle.btn-primary{color:#fff;background-color:#286090;border-color:#204d74}.btn-primary.active.focus,.btn-primary.active:focus,.btn-primary.active:hover,.btn-primary:active.focus,.btn-primary:active:focus,.btn-primary:active:hover,.open>.dropdown-toggle.btn-primary.focus,.open>.dropdown-toggle.btn-primary:focus,.open>.dropdown-toggle.btn-primary:hover{color:#fff;background-color:#204d74;border-color:#122b40}.btn-primary.active,.btn-primary:active,.open>.dropdown-toggle.btn-primary{background-image:none}.btn-primary.disabled,.btn-primary.disabled.active,.btn-primary.disabled.focus,.btn-primary.disabled:active,.btn-primary.disabled:focus,.btn-primary.disabled:hover,.btn-primary[disabled],.btn-primary[disabled].active,.btn-primary[disabled].focus,.btn-primary[disabled]:active,.btn-primary[disabled]:focus,.btn-primary[disabled]:hover,fieldset[disabled] .btn-primary,fieldset[disabled] .btn-primary.active,fieldset[disabled] .btn-primary.focus,fieldset[disabled] .btn-primary:active,fieldset[disabled] .btn-primary:focus,fieldset[disabled] .btn-primary:hover{background-color:#337ab7;border-color:#2e6da4}.btn-primary .badge{color:#337ab7;background-color:#fff}.btn-success{color:#fff;background-color:#5cb85c;border-color:#4cae4c}.btn-success.focus,.btn-success:focus{color:#fff;background-color:#449d44;border-color:#255625}.btn-success:hover{color:#fff;background-color:#449d44;border-color:#398439}.btn-success.active,.btn-success:active,.open>.dropdown-toggle.btn-success{color:#fff;background-color:#449d44;border-color:#398439}.btn-success.active.focus,.btn-success.active:focus,.btn-success.active:hover,.btn-success:active.focus,.btn-success:active:focus,.btn-success:active:hover,.open>.dropdown-toggle.btn-success.focus,.open>.dropdown-toggle.btn-success:focus,.open>.dropdown-toggle.btn-success:hover{color:#fff;background-color:#398439;border-color:#255625}.btn-success.active,.btn-success:active,.open>.dropdown-toggle.btn-success{background-image:none}.btn-success.disabled,.btn-success.disabled.active,.btn-success.disabled.focus,.btn-success.disabled:active,.btn-success.disabled:focus,.btn-success.disabled:hover,.btn-success[disabled],.btn-success[disabled].active,.btn-success[disabled].focus,.btn-success[disabled]:active,.btn-success[disabled]:focus,.btn-success[disabled]:hover,fieldset[disabled] .btn-success,fieldset[disabled] .btn-success.active,fieldset[disabled] .btn-success.focus,fieldset[disabled] .btn-success:active,fieldset[disabled] .btn-success:focus,fieldset[disabled] .btn-success:hover{background-color:#5cb85c;border-color:#4cae4c}.btn-success .badge{color:#5cb85c;background-color:#fff}.btn-info{color:#fff;background-color:#5bc0de;border-color:#46b8da}.btn-info.focus,.btn-info:focus{color:#fff;background-color:#31b0d5;border-color:#1b6d85}.btn-info:hover{color:#fff;background-color:#31b0d5;border-color:#269abc}.btn-info.active,.btn-info:active,.open>.dropdown-toggle.btn-info{color:#fff;background-color:#31b0d5;border-color:#269abc}.btn-info.active.focus,.btn-info.active:focus,.btn-info.active:hover,.btn-info:active.focus,.btn-info:active:focus,.btn-info:active:hover,.open>.dropdown-toggle.btn-info.focus,.open>.dropdown-toggle.btn-info:focus,.open>.dropdown-toggle.btn-info:hover{color:#fff;background-color:#269abc;border-color:#1b6d85}.btn-info.active,.btn-info:active,.open>.dropdown-toggle.btn-info{background-image:none}.btn-info.disabled,.btn-info.disabled.active,.btn-info.disabled.focus,.btn-info.disabled:active,.btn-info.disabled:focus,.btn-info.disabled:hover,.btn-info[disabled],.btn-info[disabled].active,.btn-info[disabled].focus,.btn-info[disabled]:active,.btn-info[disabled]:focus,.btn-info[disabled]:hover,fieldset[disabled] .btn-info,fieldset[disabled] .btn-info.active,fieldset[disabled] .btn-info.focus,fieldset[disabled] .btn-info:active,fieldset[disabled] .btn-info:focus,fieldset[disabled] .btn-info:hover{background-color:#5bc0de;border-color:#46b8da}.btn-info .badge{color:#5bc0de;background-color:#fff}.btn-warning{color:#fff;background-color:#f0ad4e;border-color:#eea236}.btn-warning.focus,.btn-warning:focus{color:#fff;background-color:#ec971f;border-color:#985f0d}.btn-warning:hover{color:#fff;background-color:#ec971f;border-color:#d58512}.btn-warning.active,.btn-warning:active,.open>.dropdown-toggle.btn-warning{color:#fff;background-color:#ec971f;border-color:#d58512}.btn-warning.active.focus,.btn-warning.active:focus,.btn-warning.active:hover,.btn-warning:active.focus,.btn-warning:active:focus,.btn-warning:active:hover,.open>.dropdown-toggle.btn-warning.focus,.open>.dropdown-toggle.btn-warning:focus,.open>.dropdown-toggle.btn-warning:hover{color:#fff;background-color:#d58512;border-color:#985f0d}.btn-warning.active,.btn-warning:active,.open>.dropdown-toggle.btn-warning{background-image:none}.btn-warning.disabled,.btn-warning.disabled.active,.btn-warning.disabled.focus,.btn-warning.disabled:active,.btn-warning.disabled:focus,.btn-warning.disabled:hover,.btn-warning[disabled],.btn-warning[disabled].active,.btn-warning[disabled].focus,.btn-warning[disabled]:active,.btn-warning[disabled]:focus,.btn-warning[disabled]:hover,fieldset[disabled] .btn-warning,fieldset[disabled] .btn-warning.active,fieldset[disabled] .btn-warning.focus,fieldset[disabled] .btn-warning:active,fieldset[disabled] .btn-warning:focus,fieldset[disabled] .btn-warning:hover{background-color:#f0ad4e;border-color:#eea236}.btn-warning .badge{color:#f0ad4e;background-color:#fff}.btn-danger{color:#fff;background-color:#d9534f;border-color:#d43f3a}.btn-danger.focus,.btn-danger:focus{color:#fff;background-color:#c9302c;border-color:#761c19}.btn-danger:hover{color:#fff;background-color:#c9302c;border-color:#ac2925}.btn-danger.active,.btn-danger:active,.open>.dropdown-toggle.btn-danger{color:#fff;background-color:#c9302c;border-color:#ac2925}.btn-danger.active.focus,.btn-danger.active:focus,.btn-danger.active:hover,.btn-danger:active.focus,.btn-danger:active:focus,.btn-danger:active:hover,.open>.dropdown-toggle.btn-danger.focus,.open>.dropdown-toggle.btn-danger:focus,.open>.dropdown-toggle.btn-danger:hover{color:#fff;background-color:#ac2925;border-color:#761c19}.btn-danger.active,.btn-danger:active,.open>.dropdown-toggle.btn-danger{background-image:none}.btn-danger.disabled,.btn-danger.disabled.active,.btn-danger.disabled.focus,.btn-danger.disabled:active,.btn-danger.disabled:focus,.btn-danger.disabled:hover,.btn-danger[disabled],.btn-danger[disabled].active,.btn-danger[disabled].focus,.btn-danger[disabled]:active,.btn-danger[disabled]:focus,.btn-danger[disabled]:hover,fieldset[disabled] .btn-danger,fieldset[disabled] .btn-danger.active,fieldset[disabled] .btn-danger.focus,fieldset[disabled] .btn-danger:active,fieldset[disabled] .btn-danger:focus,fieldset[disabled] .btn-danger:hover{background-color:#d9534f;border-color:#d43f3a}.btn-danger .badge{color:#d9534f;background-color:#fff}.btn-link{font-weight:400;color:#337ab7;border-radius:0}.btn-link,.btn-link.active,.btn-link:active,.btn-link[disabled],fieldset[disabled] .btn-link{background-color:transparent;-webkit-box-shadow:none;box-shadow:none}.btn-link,.btn-link:active,.btn-link:focus,.btn-link:hover{border-color:transparent}.btn-link:focus,.btn-link:hover{color:#23527c;text-decoration:underline;background-color:transparent}.btn-link[disabled]:focus,.btn-link[disabled]:hover,fieldset[disabled] .btn-link:focus,fieldset[disabled] .btn-link:hover{color:#777;text-decoration:none}.btn-group-lg>.btn,.btn-lg{padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}.btn-group-sm>.btn,.btn-sm{padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.btn-group-xs>.btn,.btn-xs{padding:1px 5px;font-size:12px;line-height:1.5;border-radius:3px}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:5px}input[type=button].btn-block,input[type=reset].btn-block,input[type=submit].btn-block{width:100%}.fade{opacity:0;-webkit-transition:opacity .15s linear;-o-transition:opacity .15s linear;transition:opacity .15s linear}.fade.in{opacity:1}.collapse{display:none}.collapse.in{display:block}tr.collapse.in{display:table-row}tbody.collapse.in{display:table-row-group}.collapsing{position:relative;height:0;overflow:hidden;-webkit-transition-timing-function:ease;-o-transition-timing-function:ease;transition-timing-function:ease;-webkit-transition-duration:.35s;-o-transition-duration:.35s;transition-duration:.35s;-webkit-transition-property:height,visibility;-o-transition-property:height,visibility;transition-property:height,visibility}.caret{display:inline-block;width:0;height:0;margin-left:2px;vertical-align:middle;border-top:4px dashed;border-top:4px solid\9;border-right:4px solid transparent;border-left:4px solid transparent}.dropdown,.dropup{position:relative}.dropdown-toggle:focus{outline:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:160px;padding:5px 0;margin:2px 0 0;font-size:14px;text-align:left;list-style:none;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #ccc;border:1px solid rgba(0,0,0,.15);border-radius:4px;-webkit-box-shadow:0 6px 12px rgba(0,0,0,.175);box-shadow:0 6px 12px rgba(0,0,0,.175)}.dropdown-menu.pull-right{right:0;left:auto}.dropdown-menu .divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.dropdown-menu>li>a{display:block;padding:3px 20px;clear:both;font-weight:400;line-height:1.42857143;color:#333;white-space:nowrap}.dropdown-menu>li>a:focus,.dropdown-menu>li>a:hover{color:#262626;text-decoration:none;background-color:#f5f5f5}.dropdown-menu>.active>a,.dropdown-menu>.active>a:focus,.dropdown-menu>.active>a:hover{color:#fff;text-decoration:none;background-color:#337ab7;outline:0}.dropdown-menu>.disabled>a,.dropdown-menu>.disabled>a:focus,.dropdown-menu>.disabled>a:hover{color:#777}.dropdown-menu>.disabled>a:focus,.dropdown-menu>.disabled>a:hover{text-decoration:none;cursor:not-allowed;background-color:transparent;background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.open>.dropdown-menu{display:block}.open>a{outline:0}.dropdown-menu-right{right:0;left:auto}.dropdown-menu-left{right:auto;left:0}.dropdown-header{display:block;padding:3px 20px;font-size:12px;line-height:1.42857143;color:#777;white-space:nowrap}.dropdown-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:990}.pull-right>.dropdown-menu{right:0;left:auto}.dropup .caret,.navbar-fixed-bottom .dropdown .caret{content:"";border-top:0;border-bottom:4px dashed;border-bottom:4px solid\9}.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{top:auto;bottom:100%;margin-bottom:2px}@media (min-width:768px){.navbar-right .dropdown-menu{right:0;left:auto}.navbar-right .dropdown-menu-left{right:auto;left:0}}.btn-group,.btn-group-vertical{position:relative;display:inline-block;vertical-align:middle}.btn-group-vertical>.btn,.btn-group>.btn{position:relative;float:left}.btn-group-vertical>.btn.active,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn:focus,.btn-group-vertical>.btn:hover,.btn-group>.btn.active,.btn-group>.btn:active,.btn-group>.btn:focus,.btn-group>.btn:hover{z-index:2}.btn-group .btn+.btn,.btn-group .btn+.btn-group,.btn-group .btn-group+.btn,.btn-group .btn-group+.btn-group{margin-left:-1px}.btn-toolbar{margin-left:-5px}.btn-toolbar .btn,.btn-toolbar .btn-group,.btn-toolbar .input-group{float:left}.btn-toolbar>.btn,.btn-toolbar>.btn-group,.btn-toolbar>.input-group{margin-left:5px}.btn-group>.btn:not(:first-child):not(:last-child):not(.dropdown-toggle){border-radius:0}.btn-group>.btn:first-child{margin-left:0}.btn-group>.btn:first-child:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn:last-child:not(:first-child),.btn-group>.dropdown-toggle:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.btn-group>.btn-group{float:left}.btn-group>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn-group:last-child:not(:first-child)>.btn:first-child{border-top-left-radius:0;border-bottom-left-radius:0}.btn-group .dropdown-toggle:active,.btn-group.open .dropdown-toggle{outline:0}.btn-group>.btn+.dropdown-toggle{padding-right:8px;padding-left:8px}.btn-group>.btn-lg+.dropdown-toggle{padding-right:12px;padding-left:12px}.btn-group.open .dropdown-toggle{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn-group.open .dropdown-toggle.btn-link{-webkit-box-shadow:none;box-shadow:none}.btn .caret{margin-left:0}.btn-lg .caret{border-width:5px 5px 0;border-bottom-width:0}.dropup .btn-lg .caret{border-width:0 5px 5px}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group,.btn-group-vertical>.btn-group>.btn{display:block;float:none;width:100%;max-width:100%}.btn-group-vertical>.btn-group>.btn{float:none}.btn-group-vertical>.btn+.btn,.btn-group-vertical>.btn+.btn-group,.btn-group-vertical>.btn-group+.btn,.btn-group-vertical>.btn-group+.btn-group{margin-top:-1px;margin-left:0}.btn-group-vertical>.btn:not(:first-child):not(:last-child){border-radius:0}.btn-group-vertical>.btn:first-child:not(:last-child){border-top-right-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn:last-child:not(:first-child){border-top-left-radius:0;border-top-right-radius:0;border-bottom-left-radius:4px}.btn-group-vertical>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group-vertical>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group-vertical>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:last-child:not(:first-child)>.btn:first-child{border-top-left-radius:0;border-top-right-radius:0}.btn-group-justified{display:table;width:100%;table-layout:fixed;border-collapse:separate}.btn-group-justified>.btn,.btn-group-justified>.btn-group{display:table-cell;float:none;width:1%}.btn-group-justified>.btn-group .btn{width:100%}.btn-group-justified>.btn-group .dropdown-menu{left:auto}[data-toggle=buttons]>.btn input[type=checkbox],[data-toggle=buttons]>.btn input[type=radio],[data-toggle=buttons]>.btn-group>.btn input[type=checkbox],[data-toggle=buttons]>.btn-group>.btn input[type=radio]{position:absolute;clip:rect(0,0,0,0);pointer-events:none}.input-group{position:relative;display:table;border-collapse:separate}.input-group[class*=col-]{float:none;padding-right:0;padding-left:0}.input-group .form-control{position:relative;z-index:2;float:left;width:100%;margin-bottom:0}.input-group-lg>.form-control,.input-group-lg>.input-group-addon,.input-group-lg>.input-group-btn>.btn{height:46px;padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}select.input-group-lg>.form-control,select.input-group-lg>.input-group-addon,select.input-group-lg>.input-group-btn>.btn{height:46px;line-height:46px}select[multiple].input-group-lg>.form-control,select[multiple].input-group-lg>.input-group-addon,select[multiple].input-group-lg>.input-group-btn>.btn,textarea.input-group-lg>.form-control,textarea.input-group-lg>.input-group-addon,textarea.input-group-lg>.input-group-btn>.btn{height:auto}.input-group-sm>.form-control,.input-group-sm>.input-group-addon,.input-group-sm>.input-group-btn>.btn{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.input-group-sm>.form-control,select.input-group-sm>.input-group-addon,select.input-group-sm>.input-group-btn>.btn{height:30px;line-height:30px}select[multiple].input-group-sm>.form-control,select[multiple].input-group-sm>.input-group-addon,select[multiple].input-group-sm>.input-group-btn>.btn,textarea.input-group-sm>.form-control,textarea.input-group-sm>.input-group-addon,textarea.input-group-sm>.input-group-btn>.btn{height:auto}.input-group .form-control,.input-group-addon,.input-group-btn{display:table-cell}.input-group .form-control:not(:first-child):not(:last-child),.input-group-addon:not(:first-child):not(:last-child),.input-group-btn:not(:first-child):not(:last-child){border-radius:0}.input-group-addon,.input-group-btn{width:1%;white-space:nowrap;vertical-align:middle}.input-group-addon{padding:6px 12px;font-size:14px;font-weight:400;line-height:1;color:#555;text-align:center;background-color:#eee;border:1px solid #ccc;border-radius:4px}.input-group-addon.input-sm{padding:5px 10px;font-size:12px;border-radius:3px}.input-group-addon.input-lg{padding:10px 16px;font-size:18px;border-radius:6px}.input-group-addon input[type=checkbox],.input-group-addon input[type=radio]{margin-top:0}.input-group .form-control:first-child,.input-group-addon:first-child,.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group>.btn,.input-group-btn:first-child>.dropdown-toggle,.input-group-btn:last-child>.btn-group:not(:last-child)>.btn,.input-group-btn:last-child>.btn:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.input-group-addon:first-child{border-right:0}.input-group .form-control:last-child,.input-group-addon:last-child,.input-group-btn:first-child>.btn-group:not(:first-child)>.btn,.input-group-btn:first-child>.btn:not(:first-child),.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group>.btn,.input-group-btn:last-child>.dropdown-toggle{border-top-left-radius:0;border-bottom-left-radius:0}.input-group-addon:last-child{border-left:0}.input-group-btn{position:relative;font-size:0;white-space:nowrap}.input-group-btn>.btn{position:relative}.input-group-btn>.btn+.btn{margin-left:-1px}.input-group-btn>.btn:active,.input-group-btn>.btn:focus,.input-group-btn>.btn:hover{z-index:2}.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group{margin-right:-1px}.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group{z-index:2;margin-left:-1px}.nav{padding-left:0;margin-bottom:0;list-style:none}.nav>li{position:relative;display:block}.nav>li>a{position:relative;display:block;padding:10px 15px}.nav>li>a:focus,.nav>li>a:hover{text-decoration:none;background-color:#eee}.nav>li.disabled>a{color:#777}.nav>li.disabled>a:focus,.nav>li.disabled>a:hover{color:#777;text-decoration:none;cursor:not-allowed;background-color:transparent}.nav .open>a,.nav .open>a:focus,.nav .open>a:hover{background-color:#eee;border-color:#337ab7}.nav .nav-divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.nav>li>a>img{max-width:none}.nav-tabs{border-bottom:1px solid #ddd}.nav-tabs>li{float:left;margin-bottom:-1px}.nav-tabs>li>a{margin-right:2px;line-height:1.42857143;border:1px solid transparent;border-radius:4px 4px 0 0}.nav-tabs>li>a:hover{border-color:#eee #eee #ddd}.nav-tabs>li.active>a,.nav-tabs>li.active>a:focus,.nav-tabs>li.active>a:hover{color:#555;cursor:default;background-color:#fff;border:1px solid #ddd;border-bottom-color:transparent}.nav-tabs.nav-justified{width:100%;border-bottom:0}.nav-tabs.nav-justified>li{float:none}.nav-tabs.nav-justified>li>a{margin-bottom:5px;text-align:center}.nav-tabs.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width:768px){.nav-tabs.nav-justified>li{display:table-cell;width:1%}.nav-tabs.nav-justified>li>a{margin-bottom:0}}.nav-tabs.nav-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:focus,.nav-tabs.nav-justified>.active>a:hover{border:1px solid #ddd}@media (min-width:768px){.nav-tabs.nav-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:focus,.nav-tabs.nav-justified>.active>a:hover{border-bottom-color:#fff}}.nav-pills>li{float:left}.nav-pills>li>a{border-radius:4px}.nav-pills>li+li{margin-left:2px}.nav-pills>li.active>a,.nav-pills>li.active>a:focus,.nav-pills>li.active>a:hover{color:#fff;background-color:#337ab7}.nav-stacked>li{float:none}.nav-stacked>li+li{margin-top:2px;margin-left:0}.nav-justified{width:100%}.nav-justified>li{float:none}.nav-justified>li>a{margin-bottom:5px;text-align:center}.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width:768px){.nav-justified>li{display:table-cell;width:1%}.nav-justified>li>a{margin-bottom:0}}.nav-tabs-justified{border-bottom:0}.nav-tabs-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:focus,.nav-tabs-justified>.active>a:hover{border:1px solid #ddd}@media (min-width:768px){.nav-tabs-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:focus,.nav-tabs-justified>.active>a:hover{border-bottom-color:#fff}}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-left-radius:0;border-top-right-radius:0}.navbar{position:relative;min-height:50px;margin-bottom:20px;border:1px solid transparent}@media (min-width:768px){.navbar{border-radius:4px}}@media (min-width:768px){.navbar-header{float:left}}.navbar-collapse{padding-right:15px;padding-left:15px;overflow-x:visible;-webkit-overflow-scrolling:touch;border-top:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 0 rgba(255,255,255,.1)}.navbar-collapse.in{overflow-y:auto}@media (min-width:768px){.navbar-collapse{width:auto;border-top:0;-webkit-box-shadow:none;box-shadow:none}.navbar-collapse.collapse{display:block!important;height:auto!important;padding-bottom:0;overflow:visible!important}.navbar-collapse.in{overflow-y:visible}.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse,.navbar-static-top .navbar-collapse{padding-right:0;padding-left:0}}.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse{max-height:340px}@media (max-device-width:480px) and (orientation:landscape){.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse{max-height:200px}}.container-fluid>.navbar-collapse,.container-fluid>.navbar-header,.container>.navbar-collapse,.container>.navbar-header{margin-right:-15px;margin-left:-15px}@media (min-width:768px){.container-fluid>.navbar-collapse,.container-fluid>.navbar-header,.container>.navbar-collapse,.container>.navbar-header{margin-right:0;margin-left:0}}.navbar-static-top{z-index:1000;border-width:0 0 1px}@media (min-width:768px){.navbar-static-top{border-radius:0}}.navbar-fixed-bottom,.navbar-fixed-top{position:fixed;right:0;left:0;z-index:1030}@media (min-width:768px){.navbar-fixed-bottom,.navbar-fixed-top{border-radius:0}}.navbar-fixed-top{top:0;border-width:0 0 1px}.navbar-fixed-bottom{bottom:0;margin-bottom:0;border-width:1px 0 0}.navbar-brand{float:left;height:50px;padding:15px 15px;font-size:18px;line-height:20px}.navbar-brand:focus,.navbar-brand:hover{text-decoration:none}.navbar-brand>img{display:block}@media (min-width:768px){.navbar>.container .navbar-brand,.navbar>.container-fluid .navbar-brand{margin-left:-15px}}.navbar-toggle{position:relative;float:right;padding:9px 10px;margin-top:8px;margin-right:15px;margin-bottom:8px;background-color:transparent;background-image:none;border:1px solid transparent;border-radius:4px}.navbar-toggle:focus{outline:0}.navbar-toggle .icon-bar{display:block;width:22px;height:2px;border-radius:1px}.navbar-toggle .icon-bar+.icon-bar{margin-top:4px}@media (min-width:768px){.navbar-toggle{display:none}}.navbar-nav{margin:7.5px -15px}.navbar-nav>li>a{padding-top:10px;padding-bottom:10px;line-height:20px}@media (max-width:767px){.navbar-nav .open .dropdown-menu{position:static;float:none;width:auto;margin-top:0;background-color:transparent;border:0;-webkit-box-shadow:none;box-shadow:none}.navbar-nav .open .dropdown-menu .dropdown-header,.navbar-nav .open .dropdown-menu>li>a{padding:5px 15px 5px 25px}.navbar-nav .open .dropdown-menu>li>a{line-height:20px}.navbar-nav .open .dropdown-menu>li>a:focus,.navbar-nav .open .dropdown-menu>li>a:hover{background-image:none}}@media (min-width:768px){.navbar-nav{float:left;margin:0}.navbar-nav>li{float:left}.navbar-nav>li>a{padding-top:15px;padding-bottom:15px}}.navbar-form{padding:10px 15px;margin-top:8px;margin-right:-15px;margin-bottom:8px;margin-left:-15px;border-top:1px solid transparent;border-bottom:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.1)}@media (min-width:768px){.navbar-form .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.navbar-form .form-control{display:inline-block;width:auto;vertical-align:middle}.navbar-form .form-control-static{display:inline-block}.navbar-form .input-group{display:inline-table;vertical-align:middle}.navbar-form .input-group .form-control,.navbar-form .input-group .input-group-addon,.navbar-form .input-group .input-group-btn{width:auto}.navbar-form .input-group>.form-control{width:100%}.navbar-form .control-label{margin-bottom:0;vertical-align:middle}.navbar-form .checkbox,.navbar-form .radio{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.navbar-form .checkbox label,.navbar-form .radio label{padding-left:0}.navbar-form .checkbox input[type=checkbox],.navbar-form .radio input[type=radio]{position:relative;margin-left:0}.navbar-form .has-feedback .form-control-feedback{top:0}}@media (max-width:767px){.navbar-form .form-group{margin-bottom:5px}.navbar-form .form-group:last-child{margin-bottom:0}}@media (min-width:768px){.navbar-form{width:auto;padding-top:0;padding-bottom:0;margin-right:0;margin-left:0;border:0;-webkit-box-shadow:none;box-shadow:none}}.navbar-nav>li>.dropdown-menu{margin-top:0;border-top-left-radius:0;border-top-right-radius:0}.navbar-fixed-bottom .navbar-nav>li>.dropdown-menu{margin-bottom:0;border-top-left-radius:4px;border-top-right-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.navbar-btn{margin-top:8px;margin-bottom:8px}.navbar-btn.btn-sm{margin-top:10px;margin-bottom:10px}.navbar-btn.btn-xs{margin-top:14px;margin-bottom:14px}.navbar-text{margin-top:15px;margin-bottom:15px}@media (min-width:768px){.navbar-text{float:left;margin-right:15px;margin-left:15px}}@media (min-width:768px){.navbar-left{float:left!important}.navbar-right{float:right!important;margin-right:-15px}.navbar-right~.navbar-right{margin-right:0}}.navbar-default{background-color:#f8f8f8;border-color:#e7e7e7}.navbar-default .navbar-brand{color:#777}.navbar-default .navbar-brand:focus,.navbar-default .navbar-brand:hover{color:#5e5e5e;background-color:transparent}.navbar-default .navbar-text{color:#777}.navbar-default .navbar-nav>li>a{color:#777}.navbar-default .navbar-nav>li>a:focus,.navbar-default .navbar-nav>li>a:hover{color:#333;background-color:transparent}.navbar-default .navbar-nav>.active>a,.navbar-default .navbar-nav>.active>a:focus,.navbar-default .navbar-nav>.active>a:hover{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav>.disabled>a,.navbar-default .navbar-nav>.disabled>a:focus,.navbar-default .navbar-nav>.disabled>a:hover{color:#ccc;background-color:transparent}.navbar-default .navbar-toggle{border-color:#ddd}.navbar-default .navbar-toggle:focus,.navbar-default .navbar-toggle:hover{background-color:#ddd}.navbar-default .navbar-toggle .icon-bar{background-color:#888}.navbar-default .navbar-collapse,.navbar-default .navbar-form{border-color:#e7e7e7}.navbar-default .navbar-nav>.open>a,.navbar-default .navbar-nav>.open>a:focus,.navbar-default .navbar-nav>.open>a:hover{color:#555;background-color:#e7e7e7}@media (max-width:767px){.navbar-default .navbar-nav .open .dropdown-menu>li>a{color:#777}.navbar-default .navbar-nav .open .dropdown-menu>li>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>li>a:hover{color:#333;background-color:transparent}.navbar-default .navbar-nav .open .dropdown-menu>.active>a,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:hover{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:hover{color:#ccc;background-color:transparent}}.navbar-default .navbar-link{color:#777}.navbar-default .navbar-link:hover{color:#333}.navbar-default .btn-link{color:#777}.navbar-default .btn-link:focus,.navbar-default .btn-link:hover{color:#333}.navbar-default .btn-link[disabled]:focus,.navbar-default .btn-link[disabled]:hover,fieldset[disabled] .navbar-default .btn-link:focus,fieldset[disabled] .navbar-default .btn-link:hover{color:#ccc}.navbar-inverse{background-color:#222;border-color:#080808}.navbar-inverse .navbar-brand{color:#9d9d9d}.navbar-inverse .navbar-brand:focus,.navbar-inverse .navbar-brand:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-text{color:#9d9d9d}.navbar-inverse .navbar-nav>li>a{color:#9d9d9d}.navbar-inverse .navbar-nav>li>a:focus,.navbar-inverse .navbar-nav>li>a:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav>.active>a,.navbar-inverse .navbar-nav>.active>a:focus,.navbar-inverse .navbar-nav>.active>a:hover{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav>.disabled>a,.navbar-inverse .navbar-nav>.disabled>a:focus,.navbar-inverse .navbar-nav>.disabled>a:hover{color:#444;background-color:transparent}.navbar-inverse .navbar-toggle{border-color:#333}.navbar-inverse .navbar-toggle:focus,.navbar-inverse .navbar-toggle:hover{background-color:#333}.navbar-inverse .navbar-toggle .icon-bar{background-color:#fff}.navbar-inverse .navbar-collapse,.navbar-inverse .navbar-form{border-color:#101010}.navbar-inverse .navbar-nav>.open>a,.navbar-inverse .navbar-nav>.open>a:focus,.navbar-inverse .navbar-nav>.open>a:hover{color:#fff;background-color:#080808}@media (max-width:767px){.navbar-inverse .navbar-nav .open .dropdown-menu>.dropdown-header{border-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu .divider{background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a{color:#9d9d9d}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:hover{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:hover{color:#444;background-color:transparent}}.navbar-inverse .navbar-link{color:#9d9d9d}.navbar-inverse .navbar-link:hover{color:#fff}.navbar-inverse .btn-link{color:#9d9d9d}.navbar-inverse .btn-link:focus,.navbar-inverse .btn-link:hover{color:#fff}.navbar-inverse .btn-link[disabled]:focus,.navbar-inverse .btn-link[disabled]:hover,fieldset[disabled] .navbar-inverse .btn-link:focus,fieldset[disabled] .navbar-inverse .btn-link:hover{color:#444}.breadcrumb{padding:8px 15px;margin-bottom:20px;list-style:none;background-color:#f5f5f5;border-radius:4px}.breadcrumb>li{display:inline-block}.breadcrumb>li+li:before{padding:0 5px;color:#ccc;content:"/\00a0"}.breadcrumb>.active{color:#777}.pagination{display:inline-block;padding-left:0;margin:20px 0;border-radius:4px}.pagination>li{display:inline}.pagination>li>a,.pagination>li>span{position:relative;float:left;padding:6px 12px;margin-left:-1px;line-height:1.42857143;color:#337ab7;text-decoration:none;background-color:#fff;border:1px solid #ddd}.pagination>li:first-child>a,.pagination>li:first-child>span{margin-left:0;border-top-left-radius:4px;border-bottom-left-radius:4px}.pagination>li:last-child>a,.pagination>li:last-child>span{border-top-right-radius:4px;border-bottom-right-radius:4px}.pagination>li>a:focus,.pagination>li>a:hover,.pagination>li>span:focus,.pagination>li>span:hover{z-index:3;color:#23527c;background-color:#eee;border-color:#ddd}.pagination>.active>a,.pagination>.active>a:focus,.pagination>.active>a:hover,.pagination>.active>span,.pagination>.active>span:focus,.pagination>.active>span:hover{z-index:2;color:#fff;cursor:default;background-color:#337ab7;border-color:#337ab7}.pagination>.disabled>a,.pagination>.disabled>a:focus,.pagination>.disabled>a:hover,.pagination>.disabled>span,.pagination>.disabled>span:focus,.pagination>.disabled>span:hover{color:#777;cursor:not-allowed;background-color:#fff;border-color:#ddd}.pagination-lg>li>a,.pagination-lg>li>span{padding:10px 16px;font-size:18px;line-height:1.3333333}.pagination-lg>li:first-child>a,.pagination-lg>li:first-child>span{border-top-left-radius:6px;border-bottom-left-radius:6px}.pagination-lg>li:last-child>a,.pagination-lg>li:last-child>span{border-top-right-radius:6px;border-bottom-right-radius:6px}.pagination-sm>li>a,.pagination-sm>li>span{padding:5px 10px;font-size:12px;line-height:1.5}.pagination-sm>li:first-child>a,.pagination-sm>li:first-child>span{border-top-left-radius:3px;border-bottom-left-radius:3px}.pagination-sm>li:last-child>a,.pagination-sm>li:last-child>span{border-top-right-radius:3px;border-bottom-right-radius:3px}.pager{padding-left:0;margin:20px 0;text-align:center;list-style:none}.pager li{display:inline}.pager li>a,.pager li>span{display:inline-block;padding:5px 14px;background-color:#fff;border:1px solid #ddd;border-radius:15px}.pager li>a:focus,.pager li>a:hover{text-decoration:none;background-color:#eee}.pager .next>a,.pager .next>span{float:right}.pager .previous>a,.pager .previous>span{float:left}.pager .disabled>a,.pager .disabled>a:focus,.pager .disabled>a:hover,.pager .disabled>span{color:#777;cursor:not-allowed;background-color:#fff}.label{display:inline;padding:.2em .6em .3em;font-size:75%;font-weight:700;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25em}a.label:focus,a.label:hover{color:#fff;text-decoration:none;cursor:pointer}.label:empty{display:none}.btn .label{position:relative;top:-1px}.label-default{background-color:#777}.label-default[href]:focus,.label-default[href]:hover{background-color:#5e5e5e}.label-primary{background-color:#337ab7}.label-primary[href]:focus,.label-primary[href]:hover{background-color:#286090}.label-success{background-color:#5cb85c}.label-success[href]:focus,.label-success[href]:hover{background-color:#449d44}.label-info{background-color:#5bc0de}.label-info[href]:focus,.label-info[href]:hover{background-color:#31b0d5}.label-warning{background-color:#f0ad4e}.label-warning[href]:focus,.label-warning[href]:hover{background-color:#ec971f}.label-danger{background-color:#d9534f}.label-danger[href]:focus,.label-danger[href]:hover{background-color:#c9302c}.badge{display:inline-block;min-width:10px;padding:3px 7px;font-size:12px;font-weight:700;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:middle;background-color:#777;border-radius:10px}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.btn-group-xs>.btn .badge,.btn-xs .badge{top:0;padding:1px 5px}a.badge:focus,a.badge:hover{color:#fff;text-decoration:none;cursor:pointer}.list-group-item.active>.badge,.nav-pills>.active>a>.badge{color:#337ab7;background-color:#fff}.list-group-item>.badge{float:right}.list-group-item>.badge+.badge{margin-right:5px}.nav-pills>li>a>.badge{margin-left:3px}.jumbotron{padding-top:30px;padding-bottom:30px;margin-bottom:30px;color:inherit;background-color:#eee}.jumbotron .h1,.jumbotron h1{color:inherit}.jumbotron p{margin-bottom:15px;font-size:21px;font-weight:200}.jumbotron>hr{border-top-color:#d5d5d5}.container .jumbotron,.container-fluid .jumbotron{border-radius:6px}.jumbotron .container{max-width:100%}@media screen and (min-width:768px){.jumbotron{padding-top:48px;padding-bottom:48px}.container .jumbotron,.container-fluid .jumbotron{padding-right:60px;padding-left:60px}.jumbotron .h1,.jumbotron h1{font-size:63px}}.thumbnail{display:block;padding:4px;margin-bottom:20px;line-height:1.42857143;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:border .2s ease-in-out;-o-transition:border .2s ease-in-out;transition:border .2s ease-in-out}.thumbnail a>img,.thumbnail>img{margin-right:auto;margin-left:auto}a.thumbnail.active,a.thumbnail:focus,a.thumbnail:hover{border-color:#337ab7}.thumbnail .caption{padding:9px;color:#333}.alert{padding:15px;margin-bottom:20px;border:1px solid transparent;border-radius:4px}.alert h4{margin-top:0;color:inherit}.alert .alert-link{font-weight:700}.alert>p,.alert>ul{margin-bottom:0}.alert>p+p{margin-top:5px}.alert-dismissable,.alert-dismissible{padding-right:35px}.alert-dismissable .close,.alert-dismissible .close{position:relative;top:-2px;right:-21px;color:inherit}.alert-success{color:#3c763d;background-color:#dff0d8;border-color:#d6e9c6}.alert-success hr{border-top-color:#c9e2b3}.alert-success .alert-link{color:#2b542c}.alert-info{color:#31708f;background-color:#d9edf7;border-color:#bce8f1}.alert-info hr{border-top-color:#a6e1ec}.alert-info .alert-link{color:#245269}.alert-warning{color:#8a6d3b;background-color:#fcf8e3;border-color:#faebcc}.alert-warning hr{border-top-color:#f7e1b5}.alert-warning .alert-link{color:#66512c}.alert-danger{color:#a94442;background-color:#f2dede;border-color:#ebccd1}.alert-danger hr{border-top-color:#e4b9c0}.alert-danger .alert-link{color:#843534}@-webkit-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@-o-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}.progress{height:20px;margin-bottom:20px;overflow:hidden;background-color:#f5f5f5;border-radius:4px;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.1);box-shadow:inset 0 1px 2px rgba(0,0,0,.1)}.progress-bar{float:left;width:0;height:100%;font-size:12px;line-height:20px;color:#fff;text-align:center;background-color:#337ab7;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);-webkit-transition:width .6s ease;-o-transition:width .6s ease;transition:width .6s ease}.progress-bar-striped,.progress-striped .progress-bar{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);-webkit-background-size:40px 40px;background-size:40px 40px}.progress-bar.active,.progress.active .progress-bar{-webkit-animation:progress-bar-stripes 2s linear infinite;-o-animation:progress-bar-stripes 2s linear infinite;animation:progress-bar-stripes 2s linear infinite}.progress-bar-success{background-color:#5cb85c}.progress-striped .progress-bar-success{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-info{background-color:#5bc0de}.progress-striped .progress-bar-info{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-warning{background-color:#f0ad4e}.progress-striped .progress-bar-warning{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-danger{background-color:#d9534f}.progress-striped .progress-bar-danger{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.media{margin-top:15px}.media:first-child{margin-top:0}.media,.media-body{overflow:hidden;zoom:1}.media-body{width:10000px}.media-object{display:block}.media-object.img-thumbnail{max-width:none}.media-right,.media>.pull-right{padding-left:10px}.media-left,.media>.pull-left{padding-right:10px}.media-body,.media-left,.media-right{display:table-cell;vertical-align:top}.media-middle{vertical-align:middle}.media-bottom{vertical-align:bottom}.media-heading{margin-top:0;margin-bottom:5px}.media-list{padding-left:0;list-style:none}.list-group{padding-left:0;margin-bottom:20px}.list-group-item{position:relative;display:block;padding:10px 15px;margin-bottom:-1px;background-color:#fff;border:1px solid #ddd}.list-group-item:first-child{border-top-left-radius:4px;border-top-right-radius:4px}.list-group-item:last-child{margin-bottom:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}a.list-group-item,button.list-group-item{color:#555}a.list-group-item .list-group-item-heading,button.list-group-item .list-group-item-heading{color:#333}a.list-group-item:focus,a.list-group-item:hover,button.list-group-item:focus,button.list-group-item:hover{color:#555;text-decoration:none;background-color:#f5f5f5}button.list-group-item{width:100%;text-align:left}.list-group-item.disabled,.list-group-item.disabled:focus,.list-group-item.disabled:hover{color:#777;cursor:not-allowed;background-color:#eee}.list-group-item.disabled .list-group-item-heading,.list-group-item.disabled:focus .list-group-item-heading,.list-group-item.disabled:hover .list-group-item-heading{color:inherit}.list-group-item.disabled .list-group-item-text,.list-group-item.disabled:focus .list-group-item-text,.list-group-item.disabled:hover .list-group-item-text{color:#777}.list-group-item.active,.list-group-item.active:focus,.list-group-item.active:hover{z-index:2;color:#fff;background-color:#337ab7;border-color:#337ab7}.list-group-item.active .list-group-item-heading,.list-group-item.active .list-group-item-heading>.small,.list-group-item.active .list-group-item-heading>small,.list-group-item.active:focus .list-group-item-heading,.list-group-item.active:focus .list-group-item-heading>.small,.list-group-item.active:focus .list-group-item-heading>small,.list-group-item.active:hover .list-group-item-heading,.list-group-item.active:hover .list-group-item-heading>.small,.list-group-item.active:hover .list-group-item-heading>small{color:inherit}.list-group-item.active .list-group-item-text,.list-group-item.active:focus .list-group-item-text,.list-group-item.active:hover .list-group-item-text{color:#c7ddef}.list-group-item-success{color:#3c763d;background-color:#dff0d8}a.list-group-item-success,button.list-group-item-success{color:#3c763d}a.list-group-item-success .list-group-item-heading,button.list-group-item-success .list-group-item-heading{color:inherit}a.list-group-item-success:focus,a.list-group-item-success:hover,button.list-group-item-success:focus,button.list-group-item-success:hover{color:#3c763d;background-color:#d0e9c6}a.list-group-item-success.active,a.list-group-item-success.active:focus,a.list-group-item-success.active:hover,button.list-group-item-success.active,button.list-group-item-success.active:focus,button.list-group-item-success.active:hover{color:#fff;background-color:#3c763d;border-color:#3c763d}.list-group-item-info{color:#31708f;background-color:#d9edf7}a.list-group-item-info,button.list-group-item-info{color:#31708f}a.list-group-item-info .list-group-item-heading,button.list-group-item-info .list-group-item-heading{color:inherit}a.list-group-item-info:focus,a.list-group-item-info:hover,button.list-group-item-info:focus,button.list-group-item-info:hover{color:#31708f;background-color:#c4e3f3}a.list-group-item-info.active,a.list-group-item-info.active:focus,a.list-group-item-info.active:hover,button.list-group-item-info.active,button.list-group-item-info.active:focus,button.list-group-item-info.active:hover{color:#fff;background-color:#31708f;border-color:#31708f}.list-group-item-warning{color:#8a6d3b;background-color:#fcf8e3}a.list-group-item-warning,button.list-group-item-warning{color:#8a6d3b}a.list-group-item-warning .list-group-item-heading,button.list-group-item-warning .list-group-item-heading{color:inherit}a.list-group-item-warning:focus,a.list-group-item-warning:hover,button.list-group-item-warning:focus,button.list-group-item-warning:hover{color:#8a6d3b;background-color:#faf2cc}a.list-group-item-warning.active,a.list-group-item-warning.active:focus,a.list-group-item-warning.active:hover,button.list-group-item-warning.active,button.list-group-item-warning.active:focus,button.list-group-item-warning.active:hover{color:#fff;background-color:#8a6d3b;border-color:#8a6d3b}.list-group-item-danger{color:#a94442;background-color:#f2dede}a.list-group-item-danger,button.list-group-item-danger{color:#a94442}a.list-group-item-danger .list-group-item-heading,button.list-group-item-danger .list-group-item-heading{color:inherit}a.list-group-item-danger:focus,a.list-group-item-danger:hover,button.list-group-item-danger:focus,button.list-group-item-danger:hover{color:#a94442;background-color:#ebcccc}a.list-group-item-danger.active,a.list-group-item-danger.active:focus,a.list-group-item-danger.active:hover,button.list-group-item-danger.active,button.list-group-item-danger.active:focus,button.list-group-item-danger.active:hover{color:#fff;background-color:#a94442;border-color:#a94442}.list-group-item-heading{margin-top:0;margin-bottom:5px}.list-group-item-text{margin-bottom:0;line-height:1.3}.panel{margin-bottom:20px;background-color:#fff;border:1px solid transparent;border-radius:4px;-webkit-box-shadow:0 1px 1px rgba(0,0,0,.05);box-shadow:0 1px 1px rgba(0,0,0,.05)}.panel-body{padding:15px}.panel-heading{padding:10px 15px;border-bottom:1px solid transparent;border-top-left-radius:3px;border-top-right-radius:3px}.panel-heading>.dropdown .dropdown-toggle{color:inherit}.panel-title{margin-top:0;margin-bottom:0;font-size:16px;color:inherit}.panel-title>.small,.panel-title>.small>a,.panel-title>a,.panel-title>small,.panel-title>small>a{color:inherit}.panel-footer{padding:10px 15px;background-color:#f5f5f5;border-top:1px solid #ddd;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.list-group,.panel>.panel-collapse>.list-group{margin-bottom:0}.panel>.list-group .list-group-item,.panel>.panel-collapse>.list-group .list-group-item{border-width:1px 0;border-radius:0}.panel>.list-group:first-child .list-group-item:first-child,.panel>.panel-collapse>.list-group:first-child .list-group-item:first-child{border-top:0;border-top-left-radius:3px;border-top-right-radius:3px}.panel>.list-group:last-child .list-group-item:last-child,.panel>.panel-collapse>.list-group:last-child .list-group-item:last-child{border-bottom:0;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.panel-heading+.panel-collapse>.list-group .list-group-item:first-child{border-top-left-radius:0;border-top-right-radius:0}.panel-heading+.list-group .list-group-item:first-child{border-top-width:0}.list-group+.panel-footer{border-top-width:0}.panel>.panel-collapse>.table,.panel>.table,.panel>.table-responsive>.table{margin-bottom:0}.panel>.panel-collapse>.table caption,.panel>.table caption,.panel>.table-responsive>.table caption{padding-right:15px;padding-left:15px}.panel>.table-responsive:first-child>.table:first-child,.panel>.table:first-child{border-top-left-radius:3px;border-top-right-radius:3px}.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child,.panel>.table:first-child>thead:first-child>tr:first-child{border-top-left-radius:3px;border-top-right-radius:3px}.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:first-child,.panel>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table:first-child>thead:first-child>tr:first-child th:first-child{border-top-left-radius:3px}.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:last-child,.panel>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table:first-child>thead:first-child>tr:first-child th:last-child{border-top-right-radius:3px}.panel>.table-responsive:last-child>.table:last-child,.panel>.table:last-child{border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child{border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:first-child,.panel>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:first-child{border-bottom-left-radius:3px}.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:last-child{border-bottom-right-radius:3px}.panel>.panel-body+.table,.panel>.panel-body+.table-responsive,.panel>.table+.panel-body,.panel>.table-responsive+.panel-body{border-top:1px solid #ddd}.panel>.table>tbody:first-child>tr:first-child td,.panel>.table>tbody:first-child>tr:first-child th{border-top:0}.panel>.table-bordered,.panel>.table-responsive>.table-bordered{border:0}.panel>.table-bordered>tbody>tr>td:first-child,.panel>.table-bordered>tbody>tr>th:first-child,.panel>.table-bordered>tfoot>tr>td:first-child,.panel>.table-bordered>tfoot>tr>th:first-child,.panel>.table-bordered>thead>tr>td:first-child,.panel>.table-bordered>thead>tr>th:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:first-child,.panel>.table-responsive>.table-bordered>thead>tr>td:first-child,.panel>.table-responsive>.table-bordered>thead>tr>th:first-child{border-left:0}.panel>.table-bordered>tbody>tr>td:last-child,.panel>.table-bordered>tbody>tr>th:last-child,.panel>.table-bordered>tfoot>tr>td:last-child,.panel>.table-bordered>tfoot>tr>th:last-child,.panel>.table-bordered>thead>tr>td:last-child,.panel>.table-bordered>thead>tr>th:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:last-child,.panel>.table-responsive>.table-bordered>thead>tr>td:last-child,.panel>.table-responsive>.table-bordered>thead>tr>th:last-child{border-right:0}.panel>.table-bordered>tbody>tr:first-child>td,.panel>.table-bordered>tbody>tr:first-child>th,.panel>.table-bordered>thead>tr:first-child>td,.panel>.table-bordered>thead>tr:first-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>th,.panel>.table-responsive>.table-bordered>thead>tr:first-child>td,.panel>.table-responsive>.table-bordered>thead>tr:first-child>th{border-bottom:0}.panel>.table-bordered>tbody>tr:last-child>td,.panel>.table-bordered>tbody>tr:last-child>th,.panel>.table-bordered>tfoot>tr:last-child>td,.panel>.table-bordered>tfoot>tr:last-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>th,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>td,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>th{border-bottom:0}.panel>.table-responsive{margin-bottom:0;border:0}.panel-group{margin-bottom:20px}.panel-group .panel{margin-bottom:0;border-radius:4px}.panel-group .panel+.panel{margin-top:5px}.panel-group .panel-heading{border-bottom:0}.panel-group .panel-heading+.panel-collapse>.list-group,.panel-group .panel-heading+.panel-collapse>.panel-body{border-top:1px solid #ddd}.panel-group .panel-footer{border-top:0}.panel-group .panel-footer+.panel-collapse .panel-body{border-bottom:1px solid #ddd}.panel-default{border-color:#ddd}.panel-default>.panel-heading{color:#333;background-color:#f5f5f5;border-color:#ddd}.panel-default>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ddd}.panel-default>.panel-heading .badge{color:#f5f5f5;background-color:#333}.panel-default>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ddd}.panel-primary{border-color:#337ab7}.panel-primary>.panel-heading{color:#fff;background-color:#337ab7;border-color:#337ab7}.panel-primary>.panel-heading+.panel-collapse>.panel-body{border-top-color:#337ab7}.panel-primary>.panel-heading .badge{color:#337ab7;background-color:#fff}.panel-primary>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#337ab7}.panel-success{border-color:#d6e9c6}.panel-success>.panel-heading{color:#3c763d;background-color:#dff0d8;border-color:#d6e9c6}.panel-success>.panel-heading+.panel-collapse>.panel-body{border-top-color:#d6e9c6}.panel-success>.panel-heading .badge{color:#dff0d8;background-color:#3c763d}.panel-success>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#d6e9c6}.panel-info{border-color:#bce8f1}.panel-info>.panel-heading{color:#31708f;background-color:#d9edf7;border-color:#bce8f1}.panel-info>.panel-heading+.panel-collapse>.panel-body{border-top-color:#bce8f1}.panel-info>.panel-heading .badge{color:#d9edf7;background-color:#31708f}.panel-info>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#bce8f1}.panel-warning{border-color:#faebcc}.panel-warning>.panel-heading{color:#8a6d3b;background-color:#fcf8e3;border-color:#faebcc}.panel-warning>.panel-heading+.panel-collapse>.panel-body{border-top-color:#faebcc}.panel-warning>.panel-heading .badge{color:#fcf8e3;background-color:#8a6d3b}.panel-warning>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#faebcc}.panel-danger{border-color:#ebccd1}.panel-danger>.panel-heading{color:#a94442;background-color:#f2dede;border-color:#ebccd1}.panel-danger>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ebccd1}.panel-danger>.panel-heading .badge{color:#f2dede;background-color:#a94442}.panel-danger>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ebccd1}.embed-responsive{position:relative;display:block;height:0;padding:0;overflow:hidden}.embed-responsive .embed-responsive-item,.embed-responsive embed,.embed-responsive iframe,.embed-responsive object,.embed-responsive video{position:absolute;top:0;bottom:0;left:0;width:100%;height:100%;border:0}.embed-responsive-16by9{padding-bottom:56.25%}.embed-responsive-4by3{padding-bottom:75%}.well{min-height:20px;padding:19px;margin-bottom:20px;background-color:#f5f5f5;border:1px solid #e3e3e3;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.05);box-shadow:inset 0 1px 1px rgba(0,0,0,.05)}.well blockquote{border-color:#ddd;border-color:rgba(0,0,0,.15)}.well-lg{padding:24px;border-radius:6px}.well-sm{padding:9px;border-radius:3px}.close{float:right;font-size:21px;font-weight:700;line-height:1;color:#000;text-shadow:0 1px 0 #fff;filter:alpha(opacity=20);opacity:.2}.close:focus,.close:hover{color:#000;text-decoration:none;cursor:pointer;filter:alpha(opacity=50);opacity:.5}button.close{-webkit-appearance:none;padding:0;cursor:pointer;background:0 0;border:0}.modal-open{overflow:hidden}.modal{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1050;display:none;overflow:hidden;-webkit-overflow-scrolling:touch;outline:0}.modal.fade .modal-dialog{-webkit-transition:-webkit-transform .3s ease-out;-o-transition:-o-transform .3s ease-out;transition:transform .3s ease-out;-webkit-transform:translate(0,-25%);-ms-transform:translate(0,-25%);-o-transform:translate(0,-25%);transform:translate(0,-25%)}.modal.in .modal-dialog{-webkit-transform:translate(0,0);-ms-transform:translate(0,0);-o-transform:translate(0,0);transform:translate(0,0)}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal-dialog{position:relative;width:auto;margin:10px}.modal-content{position:relative;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #999;border:1px solid rgba(0,0,0,.2);border-radius:6px;outline:0;-webkit-box-shadow:0 3px 9px rgba(0,0,0,.5);box-shadow:0 3px 9px rgba(0,0,0,.5)}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;background-color:#000}.modal-backdrop.fade{filter:alpha(opacity=0);opacity:0}.modal-backdrop.in{filter:alpha(opacity=50);opacity:.5}.modal-header{min-height:16.43px;padding:15px;border-bottom:1px solid #e5e5e5}.modal-header .close{margin-top:-2px}.modal-title{margin:0;line-height:1.42857143}.modal-body{position:relative;padding:15px}.modal-footer{padding:15px;text-align:right;border-top:1px solid #e5e5e5}.modal-footer .btn+.btn{margin-bottom:0;margin-left:5px}.modal-footer .btn-group .btn+.btn{margin-left:-1px}.modal-footer .btn-block+.btn-block{margin-left:0}.modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}@media (min-width:768px){.modal-dialog{width:600px;margin:30px auto}.modal-content{-webkit-box-shadow:0 5px 15px rgba(0,0,0,.5);box-shadow:0 5px 15px rgba(0,0,0,.5)}.modal-sm{width:300px}}@media (min-width:992px){.modal-lg{width:900px}}.tooltip{position:absolute;z-index:1070;display:block;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:12px;font-style:normal;font-weight:400;line-height:1.42857143;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;word-wrap:normal;white-space:normal;filter:alpha(opacity=0);opacity:0;line-break:auto}.tooltip.in{filter:alpha(opacity=90);opacity:.9}.tooltip.top{padding:5px 0;margin-top:-3px}.tooltip.right{padding:0 5px;margin-left:3px}.tooltip.bottom{padding:5px 0;margin-top:3px}.tooltip.left{padding:0 5px;margin-left:-3px}.tooltip-inner{max-width:200px;padding:3px 8px;color:#fff;text-align:center;background-color:#000;border-radius:4px}.tooltip-arrow{position:absolute;width:0;height:0;border-color:transparent;border-style:solid}.tooltip.top .tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.top-left .tooltip-arrow{right:5px;bottom:0;margin-bottom:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.top-right .tooltip-arrow{bottom:0;left:5px;margin-bottom:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.right .tooltip-arrow{top:50%;left:0;margin-top:-5px;border-width:5px 5px 5px 0;border-right-color:#000}.tooltip.left .tooltip-arrow{top:50%;right:0;margin-top:-5px;border-width:5px 0 5px 5px;border-left-color:#000}.tooltip.bottom .tooltip-arrow{top:0;left:50%;margin-left:-5px;border-width:0 5px 5px;border-bottom-color:#000}.tooltip.bottom-left .tooltip-arrow{top:0;right:5px;margin-top:-5px;border-width:0 5px 5px;border-bottom-color:#000}.tooltip.bottom-right .tooltip-arrow{top:0;left:5px;margin-top:-5px;border-width:0 5px 5px;border-bottom-color:#000}.popover{position:absolute;top:0;left:0;z-index:1060;display:none;max-width:276px;padding:1px;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;font-style:normal;font-weight:400;line-height:1.42857143;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;word-wrap:normal;white-space:normal;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #ccc;border:1px solid rgba(0,0,0,.2);border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,.2);box-shadow:0 5px 10px rgba(0,0,0,.2);line-break:auto}.popover.top{margin-top:-10px}.popover.right{margin-left:10px}.popover.bottom{margin-top:10px}.popover.left{margin-left:-10px}.popover-title{padding:8px 14px;margin:0;font-size:14px;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-radius:5px 5px 0 0}.popover-content{padding:9px 14px}.popover>.arrow,.popover>.arrow:after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.popover>.arrow{border-width:11px}.popover>.arrow:after{content:"";border-width:10px}.popover.top>.arrow{bottom:-11px;left:50%;margin-left:-11px;border-top-color:#999;border-top-color:rgba(0,0,0,.25);border-bottom-width:0}.popover.top>.arrow:after{bottom:1px;margin-left:-10px;content:" ";border-top-color:#fff;border-bottom-width:0}.popover.right>.arrow{top:50%;left:-11px;margin-top:-11px;border-right-color:#999;border-right-color:rgba(0,0,0,.25);border-left-width:0}.popover.right>.arrow:after{bottom:-10px;left:1px;content:" ";border-right-color:#fff;border-left-width:0}.popover.bottom>.arrow{top:-11px;left:50%;margin-left:-11px;border-top-width:0;border-bottom-color:#999;border-bottom-color:rgba(0,0,0,.25)}.popover.bottom>.arrow:after{top:1px;margin-left:-10px;content:" ";border-top-width:0;border-bottom-color:#fff}.popover.left>.arrow{top:50%;right:-11px;margin-top:-11px;border-right-width:0;border-left-color:#999;border-left-color:rgba(0,0,0,.25)}.popover.left>.arrow:after{right:1px;bottom:-10px;content:" ";border-right-width:0;border-left-color:#fff}.carousel{position:relative}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-inner>.item{position:relative;display:none;-webkit-transition:.6s ease-in-out left;-o-transition:.6s ease-in-out left;transition:.6s ease-in-out left}.carousel-inner>.item>a>img,.carousel-inner>.item>img{line-height:1}@media all and (transform-3d),(-webkit-transform-3d){.carousel-inner>.item{-webkit-transition:-webkit-transform .6s ease-in-out;-o-transition:-o-transform .6s ease-in-out;transition:transform .6s ease-in-out;-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-perspective:1000px;perspective:1000px}.carousel-inner>.item.active.right,.carousel-inner>.item.next{left:0;-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}.carousel-inner>.item.active.left,.carousel-inner>.item.prev{left:0;-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}.carousel-inner>.item.active,.carousel-inner>.item.next.left,.carousel-inner>.item.prev.right{left:0;-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}.carousel-inner>.active,.carousel-inner>.next,.carousel-inner>.prev{display:block}.carousel-inner>.active{left:0}.carousel-inner>.next,.carousel-inner>.prev{position:absolute;top:0;width:100%}.carousel-inner>.next{left:100%}.carousel-inner>.prev{left:-100%}.carousel-inner>.next.left,.carousel-inner>.prev.right{left:0}.carousel-inner>.active.left{left:-100%}.carousel-inner>.active.right{left:100%}.carousel-control{position:absolute;top:0;bottom:0;left:0;width:15%;font-size:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,.6);filter:alpha(opacity=50);opacity:.5}.carousel-control.left{background-image:-webkit-linear-gradient(left,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);background-image:-o-linear-gradient(left,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);background-image:-webkit-gradient(linear,left top,right top,from(rgba(0,0,0,.5)),to(rgba(0,0,0,.0001)));background-image:linear-gradient(to right,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1);background-repeat:repeat-x}.carousel-control.right{right:0;left:auto;background-image:-webkit-linear-gradient(left,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);background-image:-o-linear-gradient(left,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);background-image:-webkit-gradient(linear,left top,right top,from(rgba(0,0,0,.0001)),to(rgba(0,0,0,.5)));background-image:linear-gradient(to right,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1);background-repeat:repeat-x}.carousel-control:focus,.carousel-control:hover{color:#fff;text-decoration:none;filter:alpha(opacity=90);outline:0;opacity:.9}.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next,.carousel-control .icon-prev{position:absolute;top:50%;z-index:5;display:inline-block;margin-top:-10px}.carousel-control .glyphicon-chevron-left,.carousel-control .icon-prev{left:50%;margin-left:-10px}.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next{right:50%;margin-right:-10px}.carousel-control .icon-next,.carousel-control .icon-prev{width:20px;height:20px;font-family:serif;line-height:1}.carousel-control .icon-prev:before{content:'\2039'}.carousel-control .icon-next:before{content:'\203a'}.carousel-indicators{position:absolute;bottom:10px;left:50%;z-index:15;width:60%;padding-left:0;margin-left:-30%;text-align:center;list-style:none}.carousel-indicators li{display:inline-block;width:10px;height:10px;margin:1px;text-indent:-999px;cursor:pointer;background-color:#000\9;background-color:rgba(0,0,0,0);border:1px solid #fff;border-radius:10px}.carousel-indicators .active{width:12px;height:12px;margin:0;background-color:#fff}.carousel-caption{position:absolute;right:15%;bottom:20px;left:15%;z-index:10;padding-top:20px;padding-bottom:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,.6)}.carousel-caption .btn{text-shadow:none}@media screen and (min-width:768px){.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next,.carousel-control .icon-prev{width:30px;height:30px;margin-top:-15px;font-size:30px}.carousel-control .glyphicon-chevron-left,.carousel-control .icon-prev{margin-left:-15px}.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next{margin-right:-15px}.carousel-caption{right:20%;left:20%;padding-bottom:30px}.carousel-indicators{bottom:20px}}.btn-group-vertical>.btn-group:after,.btn-group-vertical>.btn-group:before,.btn-toolbar:after,.btn-toolbar:before,.clearfix:after,.clearfix:before,.container-fluid:after,.container-fluid:before,.container:after,.container:before,.dl-horizontal dd:after,.dl-horizontal dd:before,.form-horizontal .form-group:after,.form-horizontal .form-group:before,.modal-footer:after,.modal-footer:before,.nav:after,.nav:before,.navbar-collapse:after,.navbar-collapse:before,.navbar-header:after,.navbar-header:before,.navbar:after,.navbar:before,.pager:after,.pager:before,.panel-body:after,.panel-body:before,.row:after,.row:before{display:table;content:" "}.btn-group-vertical>.btn-group:after,.btn-toolbar:after,.clearfix:after,.container-fluid:after,.container:after,.dl-horizontal dd:after,.form-horizontal .form-group:after,.modal-footer:after,.nav:after,.navbar-collapse:after,.navbar-header:after,.navbar:after,.pager:after,.panel-body:after,.row:after{clear:both}.center-block{display:block;margin-right:auto;margin-left:auto}.pull-right{float:right!important}.pull-left{float:left!important}.hide{display:none!important}.show{display:block!important}.invisible{visibility:hidden}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.hidden{display:none!important}.affix{position:fixed}@-ms-viewport{width:device-width}.visible-lg,.visible-md,.visible-sm,.visible-xs{display:none!important}.visible-lg-block,.visible-lg-inline,.visible-lg-inline-block,.visible-md-block,.visible-md-inline,.visible-md-inline-block,.visible-sm-block,.visible-sm-inline,.visible-sm-inline-block,.visible-xs-block,.visible-xs-inline,.visible-xs-inline-block{display:none!important}@media (max-width:767px){.visible-xs{display:block!important}table.visible-xs{display:table!important}tr.visible-xs{display:table-row!important}td.visible-xs,th.visible-xs{display:table-cell!important}}@media (max-width:767px){.visible-xs-block{display:block!important}}@media (max-width:767px){.visible-xs-inline{display:inline!important}}@media (max-width:767px){.visible-xs-inline-block{display:inline-block!important}}@media (min-width:768px) and (max-width:991px){.visible-sm{display:block!important}table.visible-sm{display:table!important}tr.visible-sm{display:table-row!important}td.visible-sm,th.visible-sm{display:table-cell!important}}@media (min-width:768px) and (max-width:991px){.visible-sm-block{display:block!important}}@media (min-width:768px) and (max-width:991px){.visible-sm-inline{display:inline!important}}@media (min-width:768px) and (max-width:991px){.visible-sm-inline-block{display:inline-block!important}}@media (min-width:992px) and (max-width:1199px){.visible-md{display:block!important}table.visible-md{display:table!important}tr.visible-md{display:table-row!important}td.visible-md,th.visible-md{display:table-cell!important}}@media (min-width:992px) and (max-width:1199px){.visible-md-block{display:block!important}}@media (min-width:992px) and (max-width:1199px){.visible-md-inline{display:inline!important}}@media (min-width:992px) and (max-width:1199px){.visible-md-inline-block{display:inline-block!important}}@media (min-width:1200px){.visible-lg{display:block!important}table.visible-lg{display:table!important}tr.visible-lg{display:table-row!important}td.visible-lg,th.visible-lg{display:table-cell!important}}@media (min-width:1200px){.visible-lg-block{display:block!important}}@media (min-width:1200px){.visible-lg-inline{display:inline!important}}@media (min-width:1200px){.visible-lg-inline-block{display:inline-block!important}}@media (max-width:767px){.hidden-xs{display:none!important}}@media (min-width:768px) and (max-width:991px){.hidden-sm{display:none!important}}@media (min-width:992px) and (max-width:1199px){.hidden-md{display:none!important}}@media (min-width:1200px){.hidden-lg{display:none!important}}.visible-print{display:none!important}@media print{.visible-print{display:block!important}table.visible-print{display:table!important}tr.visible-print{display:table-row!important}td.visible-print,th.visible-print{display:table-cell!important}}.visible-print-block{display:none!important}@media print{.visible-print-block{display:block!important}}.visible-print-inline{display:none!important}@media print{.visible-print-inline{display:inline!important}}.visible-print-inline-block{display:none!important}@media print{.visible-print-inline-block{display:inline-block!important}}@media print{.hidden-print{display:none!important}}
media/css/codemirror.css DELETED
@@ -1,262 +0,0 @@
1
- /* BASICS */
2
-
3
- .CodeMirror {
4
- /* Set height, width, borders, and global font properties here */
5
- font-family: monospace;
6
- height: 300px;
7
- }
8
- .CodeMirror-scroll {
9
- /* Set scrolling behaviour here */
10
- overflow: auto;
11
- }
12
-
13
- /* PADDING */
14
-
15
- .CodeMirror-lines {
16
- padding: 4px 0; /* Vertical padding around content */
17
- }
18
- .CodeMirror pre {
19
- padding: 0 4px; /* Horizontal padding of content */
20
- }
21
-
22
- .CodeMirror-scrollbar-filler, .CodeMirror-gutter-filler {
23
- background-color: white; /* The little square between H and V scrollbars */
24
- }
25
-
26
- /* GUTTER */
27
-
28
- .CodeMirror-gutters {
29
- border-right: 1px solid #ddd;
30
- background-color: #f7f7f7;
31
- white-space: nowrap;
32
- }
33
- .CodeMirror-linenumbers {}
34
- .CodeMirror-linenumber {
35
- padding: 0 3px 0 5px;
36
- min-width: 20px;
37
- text-align: right;
38
- color: #999;
39
- }
40
-
41
- /* CURSOR */
42
-
43
- .CodeMirror div.CodeMirror-cursor {
44
- border-left: 1px solid black;
45
- z-index: 3;
46
- }
47
- /* Shown when moving in bi-directional text */
48
- .CodeMirror div.CodeMirror-secondarycursor {
49
- border-left: 1px solid silver;
50
- }
51
- .CodeMirror.cm-keymap-fat-cursor div.CodeMirror-cursor {
52
- width: auto;
53
- border: 0;
54
- background: #7e7;
55
- z-index: 1;
56
- }
57
- /* Can style cursor different in overwrite (non-insert) mode */
58
- .CodeMirror div.CodeMirror-cursor.CodeMirror-overwrite {}
59
-
60
- .cm-tab { display: inline-block; }
61
-
62
- /* DEFAULT THEME */
63
-
64
- .cm-s-default .cm-keyword {color: #708;}
65
- .cm-s-default .cm-atom {color: #219;}
66
- .cm-s-default .cm-number {color: #164;}
67
- .cm-s-default .cm-def {color: #00f;}
68
- .cm-s-default .cm-variable {color: black;}
69
- .cm-s-default .cm-variable-2 {color: #05a;}
70
- .cm-s-default .cm-variable-3 {color: #085;}
71
- .cm-s-default .cm-property {color: black;}
72
- .cm-s-default .cm-operator {color: black;}
73
- .cm-s-default .cm-comment {color: #a50;}
74
- .cm-s-default .cm-string {color: #a11;}
75
- .cm-s-default .cm-string-2 {color: #f50;}
76
- .cm-s-default .cm-meta {color: #555;}
77
- .cm-s-default .cm-error {color: #f00;}
78
- .cm-s-default .cm-qualifier {color: #555;}
79
- .cm-s-default .cm-builtin {color: #30a;}
80
- .cm-s-default .cm-bracket {color: #997;}
81
- .cm-s-default .cm-tag {color: #170;}
82
- .cm-s-default .cm-attribute {color: #00c;}
83
- .cm-s-default .cm-header {color: blue;}
84
- .cm-s-default .cm-quote {color: #090;}
85
- .cm-s-default .cm-hr {color: #999;}
86
- .cm-s-default .cm-link {color: #00c;}
87
-
88
- .cm-negative {color: #d44;}
89
- .cm-positive {color: #292;}
90
- .cm-header, .cm-strong {font-weight: bold;}
91
- .cm-em {font-style: italic;}
92
- .cm-link {text-decoration: underline;}
93
-
94
- .cm-invalidchar {color: #f00;}
95
-
96
- div.CodeMirror span.CodeMirror-matchingbracket {color: #0f0;}
97
- div.CodeMirror span.CodeMirror-nonmatchingbracket {color: #f22;}
98
- .CodeMirror-activeline-background {background: #e8f2ff;}
99
-
100
- /* STOP */
101
-
102
- /* The rest of this file contains styles related to the mechanics of
103
- the editor. You probably shouldn't touch them. */
104
-
105
- .CodeMirror {
106
- line-height: 1;
107
- position: relative;
108
- overflow: hidden;
109
- background: #FFFFFF;
110
- color: black;
111
- border: 1px solid #CCCCCC;
112
- border-radius: 4px;
113
- padding: 1px;
114
- }
115
-
116
- .CodeMirror-scroll {
117
- /* 30px is the magic margin used to hide the element's real scrollbars */
118
- /* See overflow: hidden in .CodeMirror */
119
- background-color: #F9F9F9;
120
- font-size: 1.1em;
121
- height: 100%;
122
- outline: none; /* Prevent dragging from highlighting the element */
123
- position: relative;
124
- }
125
- .CodeMirror-sizer {
126
- position: relative;
127
- }
128
-
129
- /* The fake, visible scrollbars. Used to force redraw during scrolling
130
- before actuall scrolling happens, thus preventing shaking and
131
- flickering artifacts. */
132
- .CodeMirror-vscrollbar, .CodeMirror-hscrollbar, .CodeMirror-scrollbar-filler, .CodeMirror-gutter-filler {
133
- position: absolute;
134
- z-index: 6;
135
- display: none;
136
- }
137
- .CodeMirror-vscrollbar {
138
- right: 0; top: 0;
139
- overflow-x: hidden;
140
- overflow-y: scroll;
141
- }
142
- .CodeMirror-hscrollbar {
143
- bottom: 0; left: 0;
144
- overflow-y: hidden;
145
- overflow-x: scroll;
146
- }
147
- .CodeMirror-scrollbar-filler {
148
- right: 0; bottom: 0;
149
- }
150
- .CodeMirror-gutter-filler {
151
- left: 0; bottom: 0;
152
- }
153
-
154
- .CodeMirror-gutters {
155
- position: absolute; left: 0; top: 0;
156
- padding-bottom: 30px;
157
- z-index: 3;
158
- }
159
- .CodeMirror-gutter {
160
- white-space: normal;
161
- height: 100%;
162
- padding-bottom: 30px;
163
- margin-bottom: -32px;
164
- display: inline-block;
165
- /* Hack to make IE7 behave */
166
- *zoom:1;
167
- *display:inline;
168
- }
169
- .CodeMirror-gutter-elt {
170
- position: absolute;
171
- cursor: default;
172
- z-index: 4;
173
- }
174
-
175
- .CodeMirror-lines {
176
- cursor: text;
177
- }
178
- .CodeMirror pre {
179
- /* Reset some styles that the rest of the page might have set */
180
- -moz-border-radius: 0; -webkit-border-radius: 0; border-radius: 0;
181
- border-width: 0;
182
- background: transparent;
183
- font-family: inherit;
184
- font-size: inherit;
185
- margin: 0;
186
- white-space: pre;
187
- word-wrap: normal;
188
- line-height: inherit;
189
- color: inherit;
190
- z-index: 2;
191
- position: relative;
192
- overflow: visible;
193
- }
194
- .CodeMirror-wrap pre {
195
- word-wrap: break-word;
196
- white-space: pre-wrap;
197
- word-break: normal;
198
- }
199
- .CodeMirror-code pre {
200
- border-right: 30px solid transparent;
201
- width: -webkit-fit-content;
202
- width: -moz-fit-content;
203
- width: fit-content;
204
- }
205
- .CodeMirror-wrap .CodeMirror-code pre {
206
- border-right: none;
207
- width: auto;
208
- }
209
- .CodeMirror-linebackground {
210
- position: absolute;
211
- left: 0; right: 0; top: 0; bottom: 0;
212
- z-index: 0;
213
- }
214
-
215
- .CodeMirror-linewidget {
216
- position: relative;
217
- z-index: 2;
218
- overflow: auto;
219
- }
220
-
221
- .CodeMirror-widget {
222
- }
223
-
224
- .CodeMirror-wrap .CodeMirror-scroll {
225
- overflow-x: hidden;
226
- }
227
-
228
- .CodeMirror-measure {
229
- position: absolute;
230
- width: 100%; height: 0px;
231
- overflow: hidden;
232
- visibility: hidden;
233
- }
234
- .CodeMirror-measure pre { position: static; }
235
-
236
- .CodeMirror div.CodeMirror-cursor {
237
- position: absolute;
238
- visibility: hidden;
239
- border-right: none;
240
- width: 0;
241
- }
242
- .CodeMirror-focused div.CodeMirror-cursor {
243
- visibility: visible;
244
- }
245
-
246
- .CodeMirror-selected { background: #d9d9d9; }
247
- .CodeMirror-focused .CodeMirror-selected { background: #d7d4f0; }
248
-
249
- .cm-searching {
250
- background: #ffa;
251
- background: rgba(255, 255, 0, .4);
252
- }
253
-
254
- /* IE7 hack to prevent it from returning funny offsetTops on the spans */
255
- .CodeMirror span { *vertical-align: text-bottom; }
256
-
257
- @media print {
258
- /* Hide the cursor when printing */
259
- .CodeMirror div.CodeMirror-cursor {
260
- visibility: hidden;
261
- }
262
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
media/css/configpress.css DELETED
@@ -1,4 +0,0 @@
1
- #major-publishing-actions{
2
- margin-top: 5px;
3
- border-top: 1px solid #D5D5D5;
4
- }
 
 
 
 
media/css/datatables.min.css ADDED
@@ -0,0 +1,236 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /*
2
+ * This combined file was created by the DataTables downloader builder:
3
+ * https://datatables.net/download
4
+ *
5
+ * To rebuild or modify this file with the latest versions of the included
6
+ * software please visit:
7
+ * https://datatables.net/download/#bs-3.3.5/jq-2.1.4,dt-1.10.9,r-1.0.7
8
+ *
9
+ * Included libraries:
10
+ * DataTables 1.10.9, Responsive 1.0.7
11
+ */
12
+
13
+ table.dataTable {
14
+ clear: both;
15
+ margin-bottom: 6px !important;
16
+ margin-top: 6px !important;
17
+ max-width: none !important;
18
+ }
19
+ table.dataTable td,table.dataTable th {
20
+ box-sizing: content-box;
21
+ moz-box-sizing: content-box;
22
+ webkit-box-sizing: content-box;
23
+ }
24
+ table.dataTable td.dataTables_empty,table.dataTable th.dataTables_empty {
25
+ text-align: center;
26
+ }
27
+ table.dataTable.nowrap th,table.dataTable.nowrap td {
28
+ white-space: nowrap;
29
+ }
30
+ div.dataTables_wrapper div.dataTables_length label {
31
+ font-weight: normal;
32
+ text-align: left;
33
+ white-space: nowrap;
34
+ }
35
+ div.dataTables_wrapper div.dataTables_length select {
36
+ display: inline-block;
37
+ width: 75px;
38
+ }
39
+ div.dataTables_wrapper div.dataTables_filter {
40
+ text-align: right;
41
+ }
42
+ div.dataTables_wrapper div.dataTables_filter label {
43
+ font-weight: normal;
44
+ text-align: left;
45
+ white-space: nowrap;
46
+ }
47
+ div.dataTables_wrapper div.dataTables_filter input {
48
+ display: inline-block;
49
+ margin-left: 0.5em;
50
+ width: auto;
51
+ }
52
+ div.dataTables_wrapper div.dataTables_info {
53
+ padding-top: 8px;
54
+ white-space: nowrap;
55
+ }
56
+ div.dataTables_wrapper div.dataTables_paginate {
57
+ margin: 0;
58
+ text-align: right;
59
+ white-space: nowrap;
60
+ }
61
+ div.dataTables_wrapper div.dataTables_paginate ul.pagination {
62
+ margin: 2px 0;
63
+ white-space: nowrap;
64
+ }
65
+ table.dataTable thead>tr>th.sorting_asc,table.dataTable thead>tr>th.sorting_desc,table.dataTable thead>tr>th.sorting,table.dataTable thead>tr>td.sorting_asc,table.dataTable thead>tr>td.sorting_desc,table.dataTable thead>tr>td.sorting {
66
+ padding-right: 30px;
67
+ }
68
+ table.dataTable thead>tr>th:active,table.dataTable thead>tr>td:active {
69
+ outline: none;
70
+ }
71
+ table.dataTable thead .sorting,table.dataTable thead .sorting_asc,table.dataTable thead .sorting_desc,table.dataTable thead .sorting_asc_disabled,table.dataTable thead .sorting_desc_disabled {
72
+ cursor: pointer;
73
+ position: relative;
74
+ }
75
+ table.dataTable thead .sorting:after,table.dataTable thead .sorting_asc:after,table.dataTable thead .sorting_desc:after,table.dataTable thead .sorting_asc_disabled:after,table.dataTable thead .sorting_desc_disabled:after {
76
+ bottom: 8px;
77
+ display: block;
78
+ opacity: 0.5;
79
+ position: absolute;
80
+ right: 8px;
81
+ }
82
+ table.dataTable thead .sorting:after {
83
+ content: "\e150";
84
+ opacity: 0.2;
85
+ }
86
+ table.dataTable thead .sorting_asc:after {
87
+ content: "\e155";
88
+ }
89
+ table.dataTable thead .sorting_desc:after {
90
+ content: "\e156";
91
+ }
92
+ table.dataTable thead .sorting_asc_disabled:after,table.dataTable thead .sorting_desc_disabled:after {
93
+ color: #eee;
94
+ }
95
+ div.dataTables_scrollHead table.dataTable {
96
+ margin-bottom: 0 !important;
97
+ }
98
+ div.dataTables_scrollBody table {
99
+ border-top: none;
100
+ margin-bottom: 0 !important;
101
+ margin-top: 0 !important;
102
+ }
103
+ div.dataTables_scrollBody table thead .sorting:after,div.dataTables_scrollBody table thead .sorting_asc:after,div.dataTables_scrollBody table thead .sorting_desc:after {
104
+ display: none;
105
+ }
106
+ div.dataTables_scrollBody table tbody tr:first-child th,div.dataTables_scrollBody table tbody tr:first-child td {
107
+ border-top: none;
108
+ }
109
+ div.dataTables_scrollFoot table {
110
+ border-top: none;
111
+ margin-top: 0 !important;
112
+ }
113
+ @media screen and (max-width: 767px) {
114
+ div.dataTables_wrapper div.dataTables_length,div.dataTables_wrapper div.dataTables_filter,div.dataTables_wrapper div.dataTables_info,div.dataTables_wrapper div.dataTables_paginate {
115
+ text-align: center;
116
+ }
117
+ }
118
+ table.dataTable.table-condensed>thead>tr>th {
119
+ padding-right: 20px;
120
+ }
121
+ table.dataTable.table-condensed .sorting:after,table.dataTable.table-condensed .sorting_asc:after,table.dataTable.table-condensed .sorting_desc:after {
122
+ right: 6px;
123
+ top: 6px;
124
+ }
125
+ table.table-bordered.dataTable {
126
+ border-collapse: separate !important;
127
+ }
128
+ table.table-bordered.dataTable th,table.table-bordered.dataTable td {
129
+ border-left-width: 0;
130
+ }
131
+ table.table-bordered.dataTable th:last-child,table.table-bordered.dataTable th:last-child,table.table-bordered.dataTable td:last-child,table.table-bordered.dataTable td:last-child {
132
+ border-right-width: 0;
133
+ }
134
+ table.table-bordered.dataTable tbody th,table.table-bordered.dataTable tbody td {
135
+ border-bottom-width: 0;
136
+ }
137
+ div.dataTables_scrollHead table.table-bordered {
138
+ border-bottom-width: 0;
139
+ }
140
+ table.dataTable.dtr-inline.collapsed>tbody>tr>td:first-child,table.dataTable.dtr-inline.collapsed>tbody>tr>th:first-child {
141
+ cursor: pointer;
142
+ padding-left: 30px;
143
+ position: relative;
144
+ }
145
+ table.dataTable.dtr-inline.collapsed>tbody>tr>td:first-child:before,table.dataTable.dtr-inline.collapsed>tbody>tr>th:first-child:before {
146
+ background-color: #337ab7;
147
+ border: 2px solid white;
148
+ border-radius: 16px;
149
+ box-shadow: 0 0 3px #444;
150
+ box-sizing: content-box;
151
+ color: white;
152
+ content: '+';
153
+ display: block;
154
+ height: 16px;
155
+ left: 4px;
156
+ line-height: 14px;
157
+ position: absolute;
158
+ text-align: center;
159
+ top: 8px;
160
+ width: 16px;
161
+ }
162
+ table.dataTable.dtr-inline.collapsed>tbody>tr>td:first-child.dataTables_empty:before,table.dataTable.dtr-inline.collapsed>tbody>tr>th:first-child.dataTables_empty:before {
163
+ display: none;
164
+ }
165
+ table.dataTable.dtr-inline.collapsed>tbody>tr.parent>td:first-child:before,table.dataTable.dtr-inline.collapsed>tbody>tr.parent>th:first-child:before {
166
+ background-color: #d33333;
167
+ content: '-';
168
+ }
169
+ table.dataTable.dtr-inline.collapsed>tbody>tr.child td:before {
170
+ display: none;
171
+ }
172
+ table.dataTable.dtr-inline.collapsed.compact>tbody>tr>td:first-child,table.dataTable.dtr-inline.collapsed.compact>tbody>tr>th:first-child {
173
+ padding-left: 27px;
174
+ }
175
+ table.dataTable.dtr-inline.collapsed.compact>tbody>tr>td:first-child:before,table.dataTable.dtr-inline.collapsed.compact>tbody>tr>th:first-child:before {
176
+ border-radius: 14px;
177
+ height: 14px;
178
+ left: 4px;
179
+ line-height: 12px;
180
+ top: 5px;
181
+ width: 14px;
182
+ }
183
+ table.dataTable.dtr-column>tbody>tr>td.control,table.dataTable.dtr-column>tbody>tr>th.control {
184
+ cursor: pointer;
185
+ position: relative;
186
+ }
187
+ table.dataTable.dtr-column>tbody>tr>td.control:before,table.dataTable.dtr-column>tbody>tr>th.control:before {
188
+ background-color: #337ab7;
189
+ border: 2px solid white;
190
+ border-radius: 16px;
191
+ box-shadow: 0 0 3px #444;
192
+ box-sizing: content-box;
193
+ color: white;
194
+ content: '+';
195
+ display: block;
196
+ height: 16px;
197
+ left: 50%;
198
+ line-height: 14px;
199
+ margin-left: -10px;
200
+ margin-top: -10px;
201
+ position: absolute;
202
+ text-align: center;
203
+ top: 50%;
204
+ width: 16px;
205
+ }
206
+ table.dataTable.dtr-column>tbody>tr.parent td.control:before,table.dataTable.dtr-column>tbody>tr.parent th.control:before {
207
+ background-color: #d33333;
208
+ content: '-';
209
+ }
210
+ table.dataTable>tbody>tr.child {
211
+ padding: 0.5em 1em;
212
+ }
213
+ table.dataTable>tbody>tr.child:hover {
214
+ background: transparent !important;
215
+ }
216
+ table.dataTable>tbody>tr.child ul {
217
+ display: inline-block;
218
+ list-style-type: none;
219
+ margin: 0;
220
+ padding: 0;
221
+ }
222
+ table.dataTable>tbody>tr.child ul li {
223
+ border-bottom: 1px solid #efefef;
224
+ padding: 0.5em 0;
225
+ }
226
+ table.dataTable>tbody>tr.child ul li:first-child {
227
+ padding-top: 0;
228
+ }
229
+ table.dataTable>tbody>tr.child ul li:last-child {
230
+ border-bottom: none;
231
+ }
232
+ table.dataTable>tbody>tr.child span.dtr-title {
233
+ display: inline-block;
234
+ font-weight: bold;
235
+ min-width: 75px;
236
+ }
media/css/extension.css DELETED
@@ -1,155 +0,0 @@
1
- .extension-name{
2
- font-weight: bold;
3
- font-family: Tahoma, Geneva, sans-serif;
4
- }
5
-
6
- .extension-description{
7
- text-align: justify;
8
- }
9
-
10
- .extension-description a{
11
- font-weight: bold;
12
- text-decoration: none;
13
- }
14
-
15
- .extension-price{
16
- text-align: center;
17
- font-weight: bold;
18
- font-size: 1.1em;
19
- }
20
-
21
- .free{
22
- color: #006400;
23
- }
24
-
25
- .payed{
26
- color: #212121;
27
- }
28
-
29
- .cpanel-item-twitter{
30
- background-image: url('images/extension/twitter.png');
31
- }
32
-
33
- .cpanel-item-twitter:hover{
34
- background-image: url('images/extension/twitter-active.png');
35
- }
36
-
37
- .cpanel-item-message{
38
- background-image: url('images/extension/message.png');
39
- }
40
-
41
- .cpanel-item-message:hover{
42
- background-image: url('images/extension/message-active.png');
43
- }
44
-
45
- .cpanel-item-website{
46
- background-image: url('images/extension/link.png');
47
- }
48
-
49
- .cpanel-item-website:hover{
50
- background-image: url('images/extension/link-active.png');
51
- }
52
-
53
- .extension-actions{
54
- display: table;
55
- width: 100%;
56
- }
57
-
58
- .extension-action{
59
- width: 26px;
60
- height: 26px;
61
- display: table-cell;
62
- text-align: center;
63
- vertical-align: middle;
64
- text-decoration: none;
65
- background-color: transparent;
66
- background-repeat: no-repeat;
67
- background-position: center;
68
- }
69
-
70
- a.extension-action{
71
- outline: 0;
72
- }
73
-
74
- .extension-action-youtube{
75
- background-image: url('images/extension/youtube.png');
76
- }
77
-
78
- .extension-action-youtube:hover{
79
- background-image: url('images/extension/youtube-active.png');
80
- }
81
-
82
- .extension-action-forum{
83
- background-image: url('images/extension/forum.png');
84
- }
85
-
86
- .extension-action-forum:hover{
87
- background-image: url('images/extension/forum-active.png');
88
- }
89
-
90
- .extension-action-purchase{
91
- background-image: url('images/extension/plus.png');
92
- }
93
-
94
- .extension-action-purchase:hover{
95
- background-image: url('images/extension/plus-active.png');
96
- }
97
-
98
- .extension-action-ok{
99
- background-image: url('images/extension/ok.png');
100
- }
101
-
102
- .extension-action-ok:hover{
103
- background-image: url('images/extension/ok-active.png');
104
- }
105
-
106
- .extension-action-download{
107
- background-image: url('images/extension/download.png');
108
- }
109
-
110
- .extension-action-download:hover{
111
- background-image: url('images/extension/download-active.png');
112
- }
113
-
114
- .dialog-content{
115
- font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;
116
- }
117
-
118
- .dialog-content a{
119
- font-weight: bold;
120
- text-decoration: none;
121
- color: #257DA6;
122
- outline: 0;
123
- }
124
-
125
- input.license-input{
126
- width: 100%;
127
- border: 1px solid #CCCCCC;
128
- border-radius: 0px;
129
- margin-top: 5px;
130
- padding: 2px;
131
- font-size: 12px;
132
- line-height: 16px;
133
- }
134
-
135
- #install_extension{
136
- position: relative;
137
- }
138
-
139
- .loading-extension{
140
- width: 100%;
141
- height: 100%;
142
- background: #CCCCCC url('images/main-loader.gif') no-repeat center;
143
- position: absolute;
144
- top: 0;
145
- left: 0;
146
- opacity: 0.8;
147
- }
148
-
149
- .license-error-list{
150
- margin-top: 5px;
151
- display: none;
152
- font-size: 0.8em;
153
- color: #FF8888;
154
- font-weight: bold;
155
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
media/css/images/animated-overlay.gif DELETED
Binary file
media/css/images/capability/checked.png DELETED
Binary file
media/css/images/capability/delete-active.png DELETED
Binary file
media/css/images/capability/delete.png DELETED
Binary file
media/css/images/capability/unchecked.png DELETED
Binary file
media/css/images/cmanager/field-loader.gif DELETED
Binary file
media/css/images/cmanager/lock.png DELETED
Binary file
media/css/images/cmanager/role-active.png DELETED
Binary file
media/css/images/cmanager/role.png DELETED
Binary file
media/css/images/cmanager/user-active.png DELETED
Binary file
media/css/images/cmanager/user.png DELETED
Binary file
media/css/images/cmanager/visitor-active.png DELETED
Binary file
media/css/images/cmanager/visitor.png DELETED
Binary file
media/css/images/cpanel/cpanel-loader.gif DELETED
Binary file
media/css/images/cpanel/help-forum-active.png DELETED
Binary file
media/css/images/cpanel/help-forum.png DELETED
Binary file
media/css/images/cpanel/message-active.png DELETED
Binary file
media/css/images/cpanel/message.png DELETED
Binary file
media/css/images/cpanel/restore-active.png DELETED
Binary file
media/css/images/cpanel/restore.png DELETED
Binary file
media/css/images/cpanel/save-active.png DELETED
Binary file
media/css/images/cpanel/save.png DELETED
Binary file
media/css/images/cpanel/star-active.png DELETED
Binary file
media/css/images/cpanel/star.png DELETED
Binary file
media/css/images/cpanel/twitter-active.png DELETED
Binary file
media/css/images/cpanel/twitter.png DELETED
Binary file
media/css/images/event/delete-active.png DELETED
Binary file
media/css/images/event/delete.png DELETED
Binary file
media/css/images/event/edit-active.png DELETED
Binary file
media/css/images/event/edit.png DELETED
Binary file
media/css/images/extension/download-active.png DELETED
Binary file
media/css/images/extension/download.png DELETED
Binary file
media/css/images/extension/forum-active.png DELETED
Binary file
media/css/images/extension/forum.png DELETED
Binary file
media/css/images/extension/link-active.png DELETED
Binary file
media/css/images/extension/link.png DELETED
Binary file
media/css/images/extension/message-active.png DELETED
Binary file
media/css/images/extension/message.png DELETED
Binary file
media/css/images/extension/ok-active.png DELETED
Binary file
media/css/images/extension/ok.png DELETED
Binary file
media/css/images/extension/plus-active.png DELETED
Binary file
media/css/images/extension/plus.png DELETED
Binary file
media/css/images/extension/twitter-active.png DELETED
Binary file
media/css/images/extension/twitter.png DELETED
Binary file
media/css/images/extension/youtube-active.png DELETED
Binary file
media/css/images/extension/youtube.png DELETED
Binary file
media/css/images/feature-active.png DELETED
Binary file
media/css/images/feature.png DELETED
Binary file
media/css/images/lock.png DELETED
Binary file
media/css/images/main-loader.gif DELETED
Binary file
media/css/images/menu/checked.png DELETED
Binary file
media/css/images/menu/unchecked.png DELETED
Binary file
media/css/images/metabox-loader.gif DELETED
Binary file
media/css/images/metabox/checked.png DELETED
Binary file
media/css/images/metabox/link-active.png DELETED
Binary file
media/css/images/metabox/link.png DELETED
Binary file
media/css/images/metabox/unchecked.png DELETED
Binary file
media/css/images/post/checked.png DELETED
Binary file
media/css/images/post/info-active.png DELETED
Binary file
media/css/images/post/info.png DELETED
Binary file
media/css/images/post/loader.gif DELETED
Binary file
media/css/images/post/lock-big.png DELETED
Binary file
media/css/images/post/lock.png DELETED
Binary file
media/css/images/post/post.png DELETED
Binary file
media/css/images/post/unchecked.png DELETED
Binary file
media/css/images/search-active.png DELETED
Binary file
media/css/images/search.png DELETED
Binary file
media/css/images/sort_asc.png DELETED
Binary file
media/css/images/sort_asc_disabled.png DELETED
Binary file
media/css/images/sort_both.png DELETED
Binary file
media/css/images/sort_desc.png DELETED
Binary file
media/css/images/sort_desc_disabled.png DELETED
Binary file
media/css/images/table-filtered.png DELETED
Binary file
media/css/images/treeview/ajax-loader.gif DELETED
Binary file
media/css/images/treeview/file.gif DELETED
Binary file
media/css/images/treeview/folder-close.png DELETED
Binary file
media/css/images/treeview/folder-closed.gif DELETED
Binary file
media/css/images/treeview/folder-open.png DELETED
Binary file
media/css/images/treeview/folder.gif DELETED
Binary file
media/css/images/treeview/minus.gif DELETED
Binary file
media/css/images/treeview/plus.gif DELETED
Binary file
media/css/images/treeview/treeview-black-line.gif DELETED
Binary file
media/css/images/treeview/treeview-black.gif DELETED
Binary file
media/css/images/treeview/treeview-default-line.gif DELETED
Binary file
media/css/images/treeview/treeview-default.gif DELETED
Binary file
media/css/images/treeview/treeview-famfamfam-line.gif DELETED
Binary file
media/css/images/treeview/treeview-famfamfam.gif DELETED
Binary file
media/css/images/treeview/treeview-gray-line.gif DELETED
Binary file
media/css/images/treeview/treeview-gray.gif DELETED
Binary file
media/css/images/treeview/treeview-red-line.gif DELETED
Binary file
media/css/images/treeview/treeview-red.gif DELETED
Binary file
media/css/images/ui-bg_flat_0_aaaaaa_40x100.png DELETED
Binary file
media/css/images/ui-bg_flat_75_ffffff_40x100.png DELETED
Binary file
media/css/images/ui-bg_glass_55_fbf9ee_1x400.png DELETED
Binary file
media/css/images/ui-bg_glass_65_ffffff_1x400.png DELETED
Binary file
media/css/images/ui-bg_glass_75_dadada_1x400.png DELETED
Binary file
media/css/images/ui-bg_glass_75_e6e6e6_1x400.png DELETED
Binary file
media/css/images/ui-bg_glass_95_fef1ec_1x400.png DELETED
Binary file
media/css/images/ui-bg_highlight-soft_75_cccccc_1x100.png DELETED
Binary file
media/css/images/ui-icons_222222_256x240.png DELETED
Binary file
media/css/images/ui-icons_2e83ff_256x240.png DELETED
Binary file
media/css/images/ui-icons_454545_256x240.png DELETED
Binary file
media/css/images/ui-icons_888888_256x240.png DELETED
Binary file
media/css/images/ui-icons_cd0a0a_256x240.png DELETED
Binary file
media/css/images/warning.png DELETED
Binary file
media/css/jquery-ui.css DELETED
@@ -1,7 +0,0 @@
1
- /*! jQuery UI - v1.10.3 - 2013-09-12
2
- * http://jqueryui.com
3
- * Includes: jquery.ui.core.css, jquery.ui.resizable.css, jquery.ui.selectable.css, jquery.ui.accordion.css, jquery.ui.autocomplete.css, jquery.ui.button.css, jquery.ui.datepicker.css, jquery.ui.dialog.css, jquery.ui.menu.css, jquery.ui.progressbar.css, jquery.ui.slider.css, jquery.ui.spinner.css, jquery.ui.tabs.css, jquery.ui.tooltip.css, jquery.ui.theme.css
4
- * To view and modify this theme, visit http://jqueryui.com/themeroller/?ffDefault=Verdana%2CArial%2Csans-serif&fwDefault=normal&fsDefault=1.1em&cornerRadius=4px&bgColorHeader=cccccc&bgTextureHeader=highlight_soft&bgImgOpacityHeader=75&borderColorHeader=aaaaaa&fcHeader=222222&iconColorHeader=222222&bgColorContent=ffffff&bgTextureContent=flat&bgImgOpacityContent=75&borderColorContent=aaaaaa&fcContent=222222&iconColorContent=222222&bgColorDefault=e6e6e6&bgTextureDefault=glass&bgImgOpacityDefault=75&borderColorDefault=d3d3d3&fcDefault=555555&iconColorDefault=888888&bgColorHover=dadada&bgTextureHover=glass&bgImgOpacityHover=75&borderColorHover=999999&fcHover=212121&iconColorHover=454545&bgColorActive=ffffff&bgTextureActive=glass&bgImgOpacityActive=65&borderColorActive=aaaaaa&fcActive=212121&iconColorActive=454545&bgColorHighlight=fbf9ee&bgTextureHighlight=glass&bgImgOpacityHighlight=55&borderColorHighlight=fcefa1&fcHighlight=363636&iconColorHighlight=2e83ff&bgColorError=fef1ec&bgTextureError=glass&bgImgOpacityError=95&borderColorError=cd0a0a&fcError=cd0a0a&iconColorError=cd0a0a&bgColorOverlay=aaaaaa&bgTextureOverlay=flat&bgImgOpacityOverlay=0&opacityOverlay=30&bgColorShadow=aaaaaa&bgTextureShadow=flat&bgImgOpacityShadow=0&opacityShadow=30&thicknessShadow=8px&offsetTopShadow=-8px&offsetLeftShadow=-8px&cornerRadiusShadow=8px
5
- * Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */
6
-
7
- .ui-helper-hidden{display:none}.ui-helper-hidden-accessible{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.ui-helper-reset{margin:0;padding:0;border:0;outline:0;line-height:1.3;text-decoration:none;font-size:100%;list-style:none}.ui-helper-clearfix:before,.ui-helper-clearfix:after{content:"";display:table;border-collapse:collapse}.ui-helper-clearfix:after{clear:both}.ui-helper-clearfix{min-height:0}.ui-helper-zfix{width:100%;height:100%;top:0;left:0;position:absolute;opacity:0;filter:Alpha(Opacity=0)}.ui-front{z-index:100}.ui-state-disabled{cursor:default!important}.ui-icon{display:block;text-indent:-99999px;overflow:hidden;background-repeat:no-repeat}.ui-widget-overlay{position:fixed;top:0;left:0;width:100%;height:100%}.ui-resizable{position:relative}.ui-resizable-handle{position:absolute;font-size:0.1px;display:block}.ui-resizable-disabled .ui-resizable-handle,.ui-resizable-autohide .ui-resizable-handle{display:none}.ui-resizable-n{cursor:n-resize;height:7px;width:100%;top:-5px;left:0}.ui-resizable-s{cursor:s-resize;height:7px;width:100%;bottom:-5px;left:0}.ui-resizable-e{cursor:e-resize;width:7px;right:-5px;top:0;height:100%}.ui-resizable-w{cursor:w-resize;width:7px;left:-5px;top:0;height:100%}.ui-resizable-se{cursor:se-resize;width:12px;height:12px;right:1px;bottom:1px}.ui-resizable-sw{cursor:sw-resize;width:9px;height:9px;left:-5px;bottom:-5px}.ui-resizable-nw{cursor:nw-resize;width:9px;height:9px;left:-5px;top:-5px}.ui-resizable-ne{cursor:ne-resize;width:9px;height:9px;right:-5px;top:-5px}.ui-selectable-helper{position:absolute;z-index:100;border:1px dotted black}.ui-accordion .ui-accordion-header{display:block;cursor:pointer;position:relative;margin-top:2px;padding:.5em .5em .5em .7em;min-height:0}.ui-accordion .ui-accordion-icons{padding-left:2.2em}.ui-accordion .ui-accordion-noicons{padding-left:.7em}.ui-accordion .ui-accordion-icons .ui-accordion-icons{padding-left:2.2em}.ui-accordion .ui-accordion-header .ui-accordion-header-icon{position:absolute;left:.5em;top:50%;margin-top:-8px}.ui-accordion .ui-accordion-content{padding:1em 2.2em;border-top:0;overflow:auto}.ui-autocomplete{position:absolute;top:0;left:0;cursor:default}.ui-button{display:inline-block;position:relative;padding:0;line-height:normal;margin-right:.1em;cursor:pointer;vertical-align:middle;text-align:center;overflow:visible}.ui-button,.ui-button:link,.ui-button:visited,.ui-button:hover,.ui-button:active{text-decoration:none}.ui-button-icon-only{width:2.2em}button.ui-button-icon-only{width:2.4em}.ui-button-icons-only{width:3.4em}button.ui-button-icons-only{width:3.7em}.ui-button .ui-button-text{display:block;line-height:normal}.ui-button-text-only .ui-button-text{padding:.4em 1em}.ui-button-icon-only .ui-button-text,.ui-button-icons-only .ui-button-text{padding:.4em;text-indent:-9999999px}.ui-button-text-icon-primary .ui-button-text,.ui-button-text-icons .ui-button-text{padding:.4em 1em .4em 2.1em}.ui-button-text-icon-secondary .ui-button-text,.ui-button-text-icons .ui-button-text{padding:.4em 2.1em .4em 1em}.ui-button-text-icons .ui-button-text{padding-left:2.1em;padding-right:2.1em}input.ui-button{padding:.4em 1em}.ui-button-icon-only .ui-icon,.ui-button-text-icon-primary .ui-icon,.ui-button-text-icon-secondary .ui-icon,.ui-button-text-icons .ui-icon,.ui-button-icons-only .ui-icon{position:absolute;top:50%;margin-top:-8px}.ui-button-icon-only .ui-icon{left:50%;margin-left:-8px}.ui-button-text-icon-primary .ui-button-icon-primary,.ui-button-text-icons .ui-button-icon-primary,.ui-button-icons-only .ui-button-icon-primary{left:.5em}.ui-button-text-icon-secondary .ui-button-icon-secondary,.ui-button-text-icons .ui-button-icon-secondary,.ui-button-icons-only .ui-button-icon-secondary{right:.5em}.ui-buttonset{margin-right:7px}.ui-buttonset .ui-button{margin-left:0;margin-right:-.3em}input.ui-button::-moz-focus-inner,button.ui-button::-moz-focus-inner{border:0;padding:0}.ui-datepicker{width:17em;padding:.2em .2em 0;display:none}.ui-datepicker .ui-datepicker-header{position:relative;padding:.2em 0}.ui-datepicker .ui-datepicker-prev,.ui-datepicker .ui-datepicker-next{position:absolute;top:2px;width:1.8em;height:1.8em}.ui-datepicker .ui-datepicker-prev-hover,.ui-datepicker .ui-datepicker-next-hover{top:1px}.ui-datepicker .ui-datepicker-prev{left:2px}.ui-datepicker .ui-datepicker-next{right:2px}.ui-datepicker .ui-datepicker-prev-hover{left:1px}.ui-datepicker .ui-datepicker-next-hover{right:1px}.ui-datepicker .ui-datepicker-prev span,.ui-datepicker .ui-datepicker-next span{display:block;position:absolute;left:50%;margin-left:-8px;top:50%;margin-top:-8px}.ui-datepicker .ui-datepicker-title{margin:0 2.3em;line-height:1.8em;text-align:center}.ui-datepicker .ui-datepicker-title select{font-size:1em;margin:1px 0}.ui-datepicker select.ui-datepicker-month-year{width:100%}.ui-datepicker select.ui-datepicker-month,.ui-datepicker select.ui-datepicker-year{width:49%}.ui-datepicker table{width:100%;font-size:.9em;border-collapse:collapse;margin:0 0 .4em}.ui-datepicker th{padding:.7em .3em;text-align:center;font-weight:bold;border:0}.ui-datepicker td{border:0;padding:1px}.ui-datepicker td span,.ui-datepicker td a{display:block;padding:.2em;text-align:right;text-decoration:none}.ui-datepicker .ui-datepicker-buttonpane{background-image:none;margin:.7em 0 0 0;padding:0 .2em;border-left:0;border-right:0;border-bottom:0}.ui-datepicker .ui-datepicker-buttonpane button{float:right;margin:.5em .2em .4em;cursor:pointer;padding:.2em .6em .3em .6em;width:auto;overflow:visible}.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current{float:left}.ui-datepicker.ui-datepicker-multi{width:auto}.ui-datepicker-multi .ui-datepicker-group{float:left}.ui-datepicker-multi .ui-datepicker-group table{width:95%;margin:0 auto .4em}.ui-datepicker-multi-2 .ui-datepicker-group{width:50%}.ui-datepicker-multi-3 .ui-datepicker-group{width:33.3%}.ui-datepicker-multi-4 .ui-datepicker-group{width:25%}.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header,.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header{border-left-width:0}.ui-datepicker-multi .ui-datepicker-buttonpane{clear:left}.ui-datepicker-row-break{clear:both;width:100%;font-size:0}.ui-datepicker-rtl{direction:rtl}.ui-datepicker-rtl .ui-datepicker-prev{right:2px;left:auto}.ui-datepicker-rtl .ui-datepicker-next{left:2px;right:auto}.ui-datepicker-rtl .ui-datepicker-prev:hover{right:1px;left:auto}.ui-datepicker-rtl .ui-datepicker-next:hover{left:1px;right:auto}.ui-datepicker-rtl .ui-datepicker-buttonpane{clear:right}.ui-datepicker-rtl .ui-datepicker-buttonpane button{float:left}.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current,.ui-datepicker-rtl .ui-datepicker-group{float:right}.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header,.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header{border-right-width:0;border-left-width:1px}.ui-dialog{position:absolute;top:0;left:0;padding:.2em;outline:0}.ui-dialog .ui-dialog-titlebar{padding:.4em 1em;position:relative}.ui-dialog .ui-dialog-title{float:left;margin:.1em 0;white-space:nowrap;width:90%;overflow:hidden;text-overflow:ellipsis}.ui-dialog .ui-dialog-titlebar-close{position:absolute;right:.3em;top:50%;width:21px;margin:-10px 0 0 0;padding:1px;height:20px}.ui-dialog .ui-dialog-content{position:relative;border:0;padding:.5em 1em;background:none;overflow:auto}.ui-dialog .ui-dialog-buttonpane{text-align:left;border-width:1px 0 0 0;background-image:none;margin-top:.5em;padding:.3em 1em .5em .4em}.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset{float:right}.ui-dialog .ui-dialog-buttonpane button{margin:.5em .4em .5em 0;cursor:pointer}.ui-dialog .ui-resizable-se{width:12px;height:12px;right:-5px;bottom:-5px;background-position:16px 16px}.ui-draggable .ui-dialog-titlebar{cursor:move}.ui-menu{list-style:none;padding:2px;margin:0;display:block;outline:none}.ui-menu .ui-menu{margin-top:-3px;position:absolute}.ui-menu .ui-menu-item{margin:0;padding:0;width:100%;list-style-image:url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)}.ui-menu .ui-menu-divider{margin:5px -2px 5px -2px;height:0;font-size:0;line-height:0;border-width:1px 0 0 0}.ui-menu .ui-menu-item a{text-decoration:none;display:block;padding:2px .4em;line-height:1.5;min-height:0;font-weight:normal}.ui-menu .ui-menu-item a.ui-state-focus,.ui-menu .ui-menu-item a.ui-state-active{font-weight:normal;margin:-1px}.ui-menu .ui-state-disabled{font-weight:normal;margin:.4em 0 .2em;line-height:1.5}.ui-menu .ui-state-disabled a{cursor:default}.ui-menu-icons{position:relative}.ui-menu-icons .ui-menu-item a{position:relative;padding-left:2em}.ui-menu .ui-icon{position:absolute;top:.2em;left:.2em}.ui-menu .ui-menu-icon{position:static;float:right}.ui-progressbar{height:2em;text-align:left;overflow:hidden}.ui-progressbar .ui-progressbar-value{margin:-1px;height:100%}.ui-progressbar .ui-progressbar-overlay{background:url("images/animated-overlay.gif");height:100%;filter:alpha(opacity=25);opacity:0.25}.ui-progressbar-indeterminate .ui-progressbar-value{background-image:none}.ui-slider{position:relative;text-align:left}.ui-slider .ui-slider-handle{position:absolute;z-index:2;width:1.2em;height:1.2em;cursor:default}.ui-slider .ui-slider-range{position:absolute;z-index:1;font-size:.7em;display:block;border:0;background-position:0 0}.ui-slider.ui-state-disabled .ui-slider-handle,.ui-slider.ui-state-disabled .ui-slider-range{filter:inherit}.ui-slider-horizontal{height:.8em}.ui-slider-horizontal .ui-slider-handle{top:-.3em;margin-left:-.6em}.ui-slider-horizontal .ui-slider-range{top:0;height:100%}.ui-slider-horizontal .ui-slider-range-min{left:0}.ui-slider-horizontal .ui-slider-range-max{right:0}.ui-slider-vertical{width:.8em;height:100px}.ui-slider-vertical .ui-slider-handle{left:-.3em;margin-left:0;margin-bottom:-.6em}.ui-slider-vertical .ui-slider-range{left:0;width:100%}.ui-slider-vertical .ui-slider-range-min{bottom:0}.ui-slider-vertical .ui-slider-range-max{top:0}.ui-spinner{position:relative;display:inline-block;overflow:hidden;padding:0;vertical-align:middle}.ui-spinner-input{border:none;background:none;color:inherit;padding:0;margin:.2em 0;vertical-align:middle;margin-left:.4em;margin-right:22px}.ui-spinner-button{width:16px;height:50%;font-size:.5em;padding:0;margin:0;text-align:center;position:absolute;cursor:default;display:block;overflow:hidden;right:0}.ui-spinner a.ui-spinner-button{border-top:none;border-bottom:none;border-right:none}.ui-spinner .ui-icon{position:absolute;margin-top:-8px;top:50%;left:0}.ui-spinner-up{top:0}.ui-spinner-down{bottom:0}.ui-spinner .ui-icon-triangle-1-s{background-position:-65px -16px}.ui-tabs{position:relative;padding:.2em}.ui-tabs .ui-tabs-nav{margin:0;padding:.2em .2em 0}.ui-tabs .ui-tabs-nav li{list-style:none;float:left;position:relative;top:0;margin:1px .2em 0 0;border-bottom-width:0;padding:0;white-space:nowrap}.ui-tabs .ui-tabs-nav li a{float:left;padding:.5em 1em;text-decoration:none}.ui-tabs .ui-tabs-nav li.ui-tabs-active{margin-bottom:-1px;padding-bottom:1px}.ui-tabs .ui-tabs-nav li.ui-tabs-active a,.ui-tabs .ui-tabs-nav li.ui-state-disabled a,.ui-tabs .ui-tabs-nav li.ui-tabs-loading a{cursor:text}.ui-tabs .ui-tabs-nav li a,.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-active a{cursor:pointer}.ui-tabs .ui-tabs-panel{display:block;border-width:0;padding:1em 1.4em;background:none}.ui-tooltip{padding:8px;position:absolute;z-index:9999;max-width:300px;-webkit-box-shadow:0 0 5px #aaa;box-shadow:0 0 5px #aaa}body .ui-tooltip{border-width:2px}.ui-widget{font-family:Verdana,Arial,sans-serif;font-size:1.1em}.ui-widget .ui-widget{font-size:1em}.ui-widget input,.ui-widget select,.ui-widget textarea,.ui-widget button{font-family:Verdana,Arial,sans-serif;font-size:1em}.ui-widget-content{border:1px solid #aaa;background:#fff url(images/ui-bg_flat_75_ffffff_40x100.png) 50% 50% repeat-x;color:#222}.ui-widget-content a{color:#222}.ui-widget-header{border:1px solid #aaa;background:#ccc url(images/ui-bg_highlight-soft_75_cccccc_1x100.png) 50% 50% repeat-x;color:#222;font-weight:bold}.ui-widget-header a{color:#222}.ui-state-default,.ui-widget-content .ui-state-default,.ui-widget-header .ui-state-default{border:1px solid #d3d3d3;background:#e6e6e6 url(images/ui-bg_glass_75_e6e6e6_1x400.png) 50% 50% repeat-x;font-weight:normal;color:#555}.ui-state-default a,.ui-state-default a:link,.ui-state-default a:visited{color:#555;text-decoration:none}.ui-state-hover,.ui-widget-content .ui-state-hover,.ui-widget-header .ui-state-hover,.ui-state-focus,.ui-widget-content .ui-state-focus,.ui-widget-header .ui-state-focus{border:1px solid #999;background:#dadada url(images/ui-bg_glass_75_dadada_1x400.png) 50% 50% repeat-x;font-weight:normal;color:#212121}.ui-state-hover a,.ui-state-hover a:hover,.ui-state-hover a:link,.ui-state-hover a:visited{color:#212121;text-decoration:none}.ui-state-active,.ui-widget-content .ui-state-active,.ui-widget-header .ui-state-active{border:1px solid #aaa;background:#fff url(images/ui-bg_glass_65_ffffff_1x400.png) 50% 50% repeat-x;font-weight:normal;color:#212121}.ui-state-active a,.ui-state-active a:link,.ui-state-active a:visited{color:#212121;text-decoration:none}.ui-state-highlight,.ui-widget-content .ui-state-highlight,.ui-widget-header .ui-state-highlight{border:1px solid #fcefa1;background:#fbf9ee url(images/ui-bg_glass_55_fbf9ee_1x400.png) 50% 50% repeat-x;color:#363636}.ui-state-highlight a,.ui-widget-content .ui-state-highlight a,.ui-widget-header .ui-state-highlight a{color:#363636}.ui-state-error,.ui-widget-content .ui-state-error,.ui-widget-header .ui-state-error{border:1px solid #cd0a0a;background:#fef1ec url(images/ui-bg_glass_95_fef1ec_1x400.png) 50% 50% repeat-x;color:#cd0a0a}.ui-state-error a,.ui-widget-content .ui-state-error a,.ui-widget-header .ui-state-error a{color:#cd0a0a}.ui-state-error-text,.ui-widget-content .ui-state-error-text,.ui-widget-header .ui-state-error-text{color:#cd0a0a}.ui-priority-primary,.ui-widget-content .ui-priority-primary,.ui-widget-header .ui-priority-primary{font-weight:bold}.ui-priority-secondary,.ui-widget-content .ui-priority-secondary,.ui-widget-header .ui-priority-secondary{opacity:.7;filter:Alpha(Opacity=70);font-weight:normal}.ui-state-disabled,.ui-widget-content .ui-state-disabled,.ui-widget-header .ui-state-disabled{opacity:.35;filter:Alpha(Opacity=35);background-image:none}.ui-state-disabled .ui-icon{filter:Alpha(Opacity=35)}.ui-icon{width:16px;height:16px}.ui-icon,.ui-widget-content .ui-icon{background-image:url(images/ui-icons_222222_256x240.png)}.ui-widget-header .ui-icon{background-image:url(images/ui-icons_222222_256x240.png)}.ui-state-default .ui-icon{background-image:url(images/ui-icons_888888_256x240.png)}.ui-state-hover .ui-icon,.ui-state-focus .ui-icon{background-image:url(images/ui-icons_454545_256x240.png)}.ui-state-active .ui-icon{background-image:url(images/ui-icons_454545_256x240.png)}.ui-state-highlight .ui-icon{background-image:url(images/ui-icons_2e83ff_256x240.png)}.ui-state-error .ui-icon,.ui-state-error-text .ui-icon{background-image:url(images/ui-icons_cd0a0a_256x240.png)}.ui-icon-blank{background-position:16px 16px}.ui-icon-carat-1-n{background-position:0 0}.ui-icon-carat-1-ne{background-position:-16px 0}.ui-icon-carat-1-e{background-position:-32px 0}.ui-icon-carat-1-se{background-position:-48px 0}.ui-icon-carat-1-s{background-position:-64px 0}.ui-icon-carat-1-sw{background-position:-80px 0}.ui-icon-carat-1-w{background-position:-96px 0}.ui-icon-carat-1-nw{background-position:-112px 0}.ui-icon-carat-2-n-s{background-position:-128px 0}.ui-icon-carat-2-e-w{background-position:-144px 0}.ui-icon-triangle-1-n{background-position:0 -16px}.ui-icon-triangle-1-ne{background-position:-16px -16px}.ui-icon-triangle-1-e{background-position:-32px -16px}.ui-icon-triangle-1-se{background-position:-48px -16px}.ui-icon-triangle-1-s{background-position:-64px -16px}.ui-icon-triangle-1-sw{background-position:-80px -16px}.ui-icon-triangle-1-w{background-position:-96px -16px}.ui-icon-triangle-1-nw{background-position:-112px -16px}.ui-icon-triangle-2-n-s{background-position:-128px -16px}.ui-icon-triangle-2-e-w{background-position:-144px -16px}.ui-icon-arrow-1-n{background-position:0 -32px}.ui-icon-arrow-1-ne{background-position:-16px -32px}.ui-icon-arrow-1-e{background-position:-32px -32px}.ui-icon-arrow-1-se{background-position:-48px -32px}.ui-icon-arrow-1-s{background-position:-64px -32px}.ui-icon-arrow-1-sw{background-position:-80px -32px}.ui-icon-arrow-1-w{background-position:-96px -32px}.ui-icon-arrow-1-nw{background-position:-112px -32px}.ui-icon-arrow-2-n-s{background-position:-128px -32px}.ui-icon-arrow-2-ne-sw{background-position:-144px -32px}.ui-icon-arrow-2-e-w{background-position:-160px -32px}.ui-icon-arrow-2-se-nw{background-position:-176px -32px}.ui-icon-arrowstop-1-n{background-position:-192px -32px}.ui-icon-arrowstop-1-e{background-position:-208px -32px}.ui-icon-arrowstop-1-s{background-position:-224px -32px}.ui-icon-arrowstop-1-w{background-position:-240px -32px}.ui-icon-arrowthick-1-n{background-position:0 -48px}.ui-icon-arrowthick-1-ne{background-position:-16px -48px}.ui-icon-arrowthick-1-e{background-position:-32px -48px}.ui-icon-arrowthick-1-se{background-position:-48px -48px}.ui-icon-arrowthick-1-s{background-position:-64px -48px}.ui-icon-arrowthick-1-sw{background-position:-80px -48px}.ui-icon-arrowthick-1-w{background-position:-96px -48px}.ui-icon-arrowthick-1-nw{background-position:-112px -48px}.ui-icon-arrowthick-2-n-s{background-position:-128px -48px}.ui-icon-arrowthick-2-ne-sw{background-position:-144px -48px}.ui-icon-arrowthick-2-e-w{background-position:-160px -48px}.ui-icon-arrowthick-2-se-nw{background-position:-176px -48px}.ui-icon-arrowthickstop-1-n{background-position:-192px -48px}.ui-icon-arrowthickstop-1-e{background-position:-208px -48px}.ui-icon-arrowthickstop-1-s{background-position:-224px -48px}.ui-icon-arrowthickstop-1-w{background-position:-240px -48px}.ui-icon-arrowreturnthick-1-w{background-position:0 -64px}.ui-icon-arrowreturnthick-1-n{background-position:-16px -64px}.ui-icon-arrowreturnthick-1-e{background-position:-32px -64px}.ui-icon-arrowreturnthick-1-s{background-position:-48px -64px}.ui-icon-arrowreturn-1-w{background-position:-64px -64px}.ui-icon-arrowreturn-1-n{background-position:-80px -64px}.ui-icon-arrowreturn-1-e{background-position:-96px -64px}.ui-icon-arrowreturn-1-s{background-position:-112px -64px}.ui-icon-arrowrefresh-1-w{background-position:-128px -64px}.ui-icon-arrowrefresh-1-n{background-position:-144px -64px}.ui-icon-arrowrefresh-1-e{background-position:-160px -64px}.ui-icon-arrowrefresh-1-s{background-position:-176px -64px}.ui-icon-arrow-4{background-position:0 -80px}.ui-icon-arrow-4-diag{background-position:-16px -80px}.ui-icon-extlink{background-position:-32px -80px}.ui-icon-newwin{background-position:-48px -80px}.ui-icon-refresh{background-position:-64px -80px}.ui-icon-shuffle{background-position:-80px -80px}.ui-icon-transfer-e-w{background-position:-96px -80px}.ui-icon-transferthick-e-w{background-position:-112px -80px}.ui-icon-folder-collapsed{background-position:0 -96px}.ui-icon-folder-open{background-position:-16px -96px}.ui-icon-document{background-position:-32px -96px}.ui-icon-document-b{background-position:-48px -96px}.ui-icon-note{background-position:-64px -96px}.ui-icon-mail-closed{background-position:-80px -96px}.ui-icon-mail-open{background-position:-96px -96px}.ui-icon-suitcase{background-position:-112px -96px}.ui-icon-comment{background-position:-128px -96px}.ui-icon-person{background-position:-144px -96px}.ui-icon-print{background-position:-160px -96px}.ui-icon-trash{background-position:-176px -96px}.ui-icon-locked{background-position:-192px -96px}.ui-icon-unlocked{background-position:-208px -96px}.ui-icon-bookmark{background-position:-224px -96px}.ui-icon-tag{background-position:-240px -96px}.ui-icon-home{background-position:0 -112px}.ui-icon-flag{background-position:-16px -112px}.ui-icon-calendar{background-position:-32px -112px}.ui-icon-cart{background-position:-48px -112px}.ui-icon-pencil{background-position:-64px -112px}.ui-icon-clock{background-position:-80px -112px}.ui-icon-disk{background-position:-96px -112px}.ui-icon-calculator{background-position:-112px -112px}.ui-icon-zoomin{background-position:-128px -112px}.ui-icon-zoomout{background-position:-144px -112px}.ui-icon-search{background-position:-160px -112px}.ui-icon-wrench{background-position:-176px -112px}.ui-icon-gear{background-position:-192px -112px}.ui-icon-heart{background-position:-208px -112px}.ui-icon-star{background-position:-224px -112px}.ui-icon-link{background-position:-240px -112px}.ui-icon-cancel{background-position:0 -128px}.ui-icon-plus{background-position:-16px -128px}.ui-icon-plusthick{background-position:-32px -128px}.ui-icon-minus{background-position:-48px -128px}.ui-icon-minusthick{background-position:-64px -128px}.ui-icon-close{background-position:-80px -128px}.ui-icon-closethick{background-position:-96px -128px}.ui-icon-key{background-position:-112px -128px}.ui-icon-lightbulb{background-position:-128px -128px}.ui-icon-scissors{background-position:-144px -128px}.ui-icon-clipboard{background-position:-160px -128px}.ui-icon-copy{background-position:-176px -128px}.ui-icon-contact{background-position:-192px -128px}.ui-icon-image{background-position:-208px -128px}.ui-icon-video{background-position:-224px -128px}.ui-icon-script{background-position:-240px -128px}.ui-icon-alert{background-position:0 -144px}.ui-icon-info{background-position:-16px -144px}.ui-icon-notice{background-position:-32px -144px}.ui-icon-help{background-position:-48px -144px}.ui-icon-check{background-position:-64px -144px}.ui-icon-bullet{background-position:-80px -144px}.ui-icon-radio-on{background-position:-96px -144px}.ui-icon-radio-off{background-position:-112px -144px}.ui-icon-pin-w{background-position:-128px -144px}.ui-icon-pin-s{background-position:-144px -144px}.ui-icon-play{background-position:0 -160px}.ui-icon-pause{background-position:-16px -160px}.ui-icon-seek-next{background-position:-32px -160px}.ui-icon-seek-prev{background-position:-48px -160px}.ui-icon-seek-end{background-position:-64px -160px}.ui-icon-seek-start{background-position:-80px -160px}.ui-icon-seek-first{background-position:-80px -160px}.ui-icon-stop{background-position:-96px -160px}.ui-icon-eject{background-position:-112px -160px}.ui-icon-volume-off{background-position:-128px -160px}.ui-icon-volume-on{background-position:-144px -160px}.ui-icon-power{background-position:0 -176px}.ui-icon-signal-diag{background-position:-16px -176px}.ui-icon-signal{background-position:-32px -176px}.ui-icon-battery-0{background-position:-48px -176px}.ui-icon-battery-1{background-position:-64px -176px}.ui-icon-battery-2{background-position:-80px -176px}.ui-icon-battery-3{background-position:-96px -176px}.ui-icon-circle-plus{background-position:0 -192px}.ui-icon-circle-minus{background-position:-16px -192px}.ui-icon-circle-close{background-position:-32px -192px}.ui-icon-circle-triangle-e{background-position:-48px -192px}.ui-icon-circle-triangle-s{background-position:-64px -192px}.ui-icon-circle-triangle-w{background-position:-80px -192px}.ui-icon-circle-triangle-n{background-position:-96px -192px}.ui-icon-circle-arrow-e{background-position:-112px -192px}.ui-icon-circle-arrow-s{background-position:-128px -192px}.ui-icon-circle-arrow-w{background-position:-144px -192px}.ui-icon-circle-arrow-n{background-position:-160px -192px}.ui-icon-circle-zoomin{background-position:-176px -192px}.ui-icon-circle-zoomout{background-position:-192px -192px}.ui-icon-circle-check{background-position:-208px -192px}.ui-icon-circlesmall-plus{background-position:0 -208px}.ui-icon-circlesmall-minus{background-position:-16px -208px}.ui-icon-circlesmall-close{background-position:-32px -208px}.ui-icon-squaresmall-plus{background-position:-48px -208px}.ui-icon-squaresmall-minus{background-position:-64px -208px}.ui-icon-squaresmall-close{background-position:-80px -208px}.ui-icon-grip-dotted-vertical{background-position:0 -224px}.ui-icon-grip-dotted-horizontal{background-position:-16px -224px}.ui-icon-grip-solid-vertical{background-position:-32px -224px}.ui-icon-grip-solid-horizontal{background-position:-48px -224px}.ui-icon-gripsmall-diagonal-se{background-position:-64px -224px}.ui-icon-grip-diagonal-se{background-position:-80px -224px}.ui-corner-all,.ui-corner-top,.ui-corner-left,.ui-corner-tl{border-top-left-radius:4px}.ui-corner-all,.ui-corner-top,.ui-corner-right,.ui-corner-tr{border-top-right-radius:4px}.ui-corner-all,.ui-corner-bottom,.ui-corner-left,.ui-corner-bl{border-bottom-left-radius:4px}.ui-corner-all,.ui-corner-bottom,.ui-corner-right,.ui-corner-br{border-bottom-right-radius:4px}.ui-widget-overlay{background:#aaa url(images/ui-bg_flat_0_aaaaaa_40x100.png) 50% 50% repeat-x;opacity:.3;filter:Alpha(Opacity=30)}.ui-widget-shadow{margin:-8px 0 0 -8px;padding:8px;background:#aaa url(images/ui-bg_flat_0_aaaaaa_40x100.png) 50% 50% repeat-x;opacity:.3;filter:Alpha(Opacity=30);border-radius:8px}
 
 
 
 
 
 
 
media/css/jquery.dt.css DELETED
@@ -1,242 +0,0 @@
1
- .dataTable {
2
- margin: 10px auto;
3
- clear: both;
4
- width: 100%;
5
- border: 1px solid #CCCCCC;
6
- }
7
-
8
- table.dataTable thead th {
9
- padding: 3px 18px 3px 10px;
10
- border-bottom: 1px solid #CCCCCC;
11
- font-weight: bold;
12
- text-transform: uppercase;
13
- cursor: pointer;
14
- background-color: #257da6;
15
- }
16
-
17
- table.dataTable tfoot td {
18
- border-top: 1px solid #CCCCCC;
19
- }
20
-
21
- table.dataTable td {
22
- padding: 3px 10px;
23
- }
24
-
25
- table.dataTable td.center,
26
- table.dataTable td.dataTables_empty {
27
- text-align: center;
28
- }
29
-
30
- table.dataTable tr.odd { background-color: #E2E4FF; }
31
- table.dataTable tr.even { background-color: white; }
32
-
33
- table.dataTable tr.odd td.sorting_1 { background-color: #D3D6FF; }
34
- table.dataTable tr.odd td.sorting_2 { background-color: #DADCFF; }
35
- table.dataTable tr.odd td.sorting_3 { background-color: #E0E2FF; }
36
- table.dataTable tr.even td.sorting_1 { background-color: #EAEBFF; }
37
- table.dataTable tr.even td.sorting_2 { background-color: #F2F3FF; }
38
- table.dataTable tr.even td.sorting_3 { background-color: #F9F9FF; }
39
-
40
-
41
- /*
42
- * Table wrapper
43
- */
44
- .dataTables_wrapper {
45
- position: relative;
46
- clear: both;
47
- }
48
-
49
-
50
- /*
51
- * Page length menu
52
- */
53
- .dataTables_length {
54
- float: left;
55
- margin-right: 5px;
56
- }
57
-
58
- /*
59
- * Filter
60
- */
61
- .dataTables_filter {
62
- text-align: left;
63
- width: 60%;
64
- float:left;
65
- }
66
-
67
- .dataTables_filter input{
68
- width: 90%;
69
- height: 28px;
70
- padding-left: 24px;
71
- background: transparent url('images/search.png') no-repeat 5px center;
72
- }
73
-
74
- .dataTables_filter input:focus{
75
- background: transparent url('images/search-active.png') no-repeat 5px center;
76
- }
77
-
78
- .table-filtered{
79
- background: transparent url('images/table-filtered.png') no-repeat 2px center;
80
- height: 16px;
81
- display: inline-block;
82
- padding-left: 20px;
83
- font-size: 0.8em;
84
- }
85
-
86
- a.clear-table-filter{
87
- text-decoration: none;
88
- color: #257DA6;
89
- font-size: 0.9em;
90
- font-weight: bold;
91
- }
92
-
93
- /*
94
- * Table information
95
- */
96
- .dataTables_info {
97
- clear: both;
98
- float: left;
99
- }
100
-
101
-
102
- /*
103
- * Pagination
104
- */
105
- .dataTables_paginate {
106
- float: right;
107
- text-align: right;
108
- font-size: 0.8em;
109
- }
110
-
111
- /* Two button pagination - previous / next */
112
- .paginate_disabled_previous,
113
- .paginate_enabled_previous,
114
- .paginate_disabled_next,
115
- .paginate_enabled_next {
116
- height: 19px;
117
- float: left;
118
- cursor: pointer;
119
- *cursor: hand;
120
- color: #111 !important;
121
- }
122
- .paginate_disabled_previous:hover,
123
- .paginate_enabled_previous:hover,
124
- .paginate_disabled_next:hover,
125
- .paginate_enabled_next:hover {
126
- text-decoration: none !important;
127
- }
128
- .paginate_disabled_previous:active,
129
- .paginate_enabled_previous:active,
130
- .paginate_disabled_next:active,
131
- .paginate_enabled_next:active {
132
- outline: none;
133
- }
134
-
135
- .paginate_disabled_previous,
136
- .paginate_disabled_next {
137
- color: #666 !important;
138
- }
139
- .paginate_disabled_previous,
140
- .paginate_enabled_previous {
141
- padding-left: 23px;
142
- }
143
- .paginate_disabled_next,
144
- .paginate_enabled_next {
145
- padding-right: 23px;
146
- margin-left: 10px;
147
- }
148
-
149
- .paginate_enabled_previous { background: url('images/back_enabled.png') no-repeat top left; }
150
- .paginate_enabled_previous:hover { background: url('images/back_enabled_hover.png') no-repeat top left; }
151
- .paginate_disabled_previous { background: url('images/back_disabled.png') no-repeat top left; }
152
-
153
- .paginate_enabled_next { background: url('images/forward_enabled.png') no-repeat top right; }
154
- .paginate_enabled_next:hover { background: url('images/forward_enabled_hover.png') no-repeat top right; }
155
- .paginate_disabled_next { background: url('images/forward_disabled.png') no-repeat top right; }
156
-
157
- /* Full number pagination */
158
- .paging_full_numbers {
159
- height: 22px;
160
- line-height: 22px;
161
- }
162
- .paging_full_numbers a:active {
163
- outline: none
164
- }
165
- .paging_full_numbers a:hover {
166
- text-decoration: none;
167
- }
168
-
169
- .paging_full_numbers a.paginate_button,
170
- .paging_full_numbers a.paginate_active {
171
- border: 1px solid #aaa;
172
- -webkit-border-radius: 5px;
173
- -moz-border-radius: 5px;
174
- border-radius: 5px;
175
- padding: 2px 5px;
176
- margin: 0 3px;
177
- cursor: pointer;
178
- *cursor: hand;
179
- color: #333 !important;
180
- }
181
-
182
- .paging_full_numbers a.paginate_button {
183
- background-color: #ddd;
184
- }
185
-
186
- .paging_full_numbers a.paginate_button:hover {
187
- background-color: #ccc;
188
- text-decoration: none !important;
189
- }
190
-
191
- .paging_full_numbers a.paginate_active {
192
- background-color: #99B3FF;
193
- }
194
-
195
-
196
- /*
197
- * Processing indicator
198
- */
199
- .dataTables_processing {
200
- position: absolute;
201
- top: 50%;
202
- left: 50%;
203
- width: 250px;
204
- height: 30px;
205
- margin-left: -125px;
206
- margin-top: -15px;
207
- padding: 14px 0 2px 0;
208
- border: 1px solid #ddd;
209
- text-align: center;
210
- color: #999;
211
- font-size: 14px;
212
- background-color: white;
213
- }
214
-
215
-
216
- /*
217
- * Sorting
218
- */
219
- .sorting { background: url('images/sort_both.png') no-repeat center right; }
220
- .sorting_asc { background: url('images/sort_asc.png') no-repeat center right; }
221
- .sorting_desc { background: url('images/sort_desc.png') no-repeat center right; }
222
-
223
- .sorting_asc_disabled { background: url('images/sort_asc_disabled.png') no-repeat center right; }
224
- .sorting_desc_disabled { background: url('images/sort_desc_disabled.png') no-repeat center right; }
225
-
226
- table.dataTable thead th:active,
227
- table.dataTable thead td:active {
228
- outline: none;
229
- }
230
-
231
-
232
- /*
233
- * Scrolling
234
- */
235
- .dataTables_scroll {
236
- clear: both;
237
- }
238
-
239
- .dataTables_scrollBody {
240
- *margin-top: -1px;
241
- -webkit-overflow-scrolling: touch;
242
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
media/css/jquery.treeview.css DELETED
@@ -1,117 +0,0 @@
1
- .treeview, .treeview ul {
2
- padding: 0;
3
- margin: 0;
4
- list-style: none;
5
- }
6
-
7
- .treeview ul {
8
-
9
- margin-top: 4px;
10
- }
11
-
12
- .treeview .hitarea {
13
- background: url(images/treeview/treeview-default.gif) -64px -25px no-repeat;
14
- height: 16px;
15
- width: 16px;
16
- margin-left: -16px;
17
- float: left;
18
- cursor: pointer;
19
- }
20
- /* fix for IE6 */
21
- * html .hitarea {
22
- display: inline;
23
- float:none;
24
- }
25
-
26
- .treeview li {
27
- margin: 0;
28
- padding: 3px 0pt 3px 16px;
29
- }
30
-
31
- .treeview a.selected {
32
- background-color: #eee;
33
- }
34
-
35
- #treecontrol { margin: 1em 0; display: none; }
36
-
37
- .treeview .hover { color: red; cursor: pointer; }
38
-
39
- .treeview li { background: url(images/treeview/treeview-default-line.gif) 0 0 no-repeat; }
40
- .treeview li.collapsable, .treeview li.expandable { background-position: 0 -176px; }
41
-
42
- .treeview .expandable-hitarea { background-position: -80px -3px; }
43
-
44
- .treeview li.last { background-position: 0 -1766px }
45
- .treeview li.lastCollapsable, .treeview li.lastExpandable { background-image: url(images/treeview/treeview-default.gif); }
46
- .treeview li.lastCollapsable { background-position: 0 -111px }
47
- .treeview li.lastExpandable { background-position: -32px -67px }
48
-
49
- .treeview div.lastCollapsable-hitarea, .treeview div.lastExpandable-hitarea { background-position: 0; }
50
-
51
- .treeview-red li { background-image: url(images/treeview/treeview-red-line.gif); }
52
- .treeview-red .hitarea, .treeview-red li.lastCollapsable, .treeview-red li.lastExpandable { background-image: url(images/treeview-red.gif); }
53
-
54
- .treeview-black li { background-image: url(images/treeview/treeview-black-line.gif); }
55
- .treeview-black .hitarea, .treeview-black li.lastCollapsable, .treeview-black li.lastExpandable { background-image: url(images/treeview-black.gif); }
56
-
57
- .treeview-gray li { background-image: url(images/treeview/treeview-gray-line.gif); }
58
- .treeview-gray .hitarea, .treeview-gray li.lastCollapsable, .treeview-gray li.lastExpandable { background-image: url(images/treeview-gray.gif); }
59
-
60
- .treeview-famfamfam li { background-image: url(images/treeview/treeview-famfamfam-line.gif); }
61
- .treeview-famfamfam .hitarea, .treeview-famfamfam li.lastCollapsable, .treeview-famfamfam li.lastExpandable { background-image: url(images/treeview-famfamfam.gif); }
62
-
63
- .treeview .placeholder {
64
- background: url(images/treeview/ajax-loader.gif) 0 0 no-repeat;
65
- height: 16px;
66
- width: 16px;
67
- display: block;
68
- }
69
-
70
- .filetree li { padding: 3px 0 2px 16px; }
71
- .filetree span.folder { padding-left: 18px; display: block; }
72
- .filetree span.folder { background: url(images/treeview/folder-open.png) 0 0 no-repeat; }
73
- .filetree li.expandable span.folder { background: url(images/treeview/folder-close.png) 0 0 no-repeat; }
74
- .filetree span.folder a{
75
- text-decoration: none;
76
- }
77
-
78
- .treeview .important{
79
- font-weight: bold;
80
- }
81
-
82
- .treeview .roots{
83
- font-weight: bold;
84
- color: #257DA6;
85
- }
86
-
87
- #sidetreecontrol{
88
- font-size: 12px;
89
- margin-bottom: 10px;
90
- float: right;
91
- padding-bottom: 6px;
92
- border-bottom: 2px solid #257DA6;
93
- }
94
-
95
- #sidetreecontrol span{
96
- color: #006505;
97
- text-decoration: underline;
98
- cursor: pointer;
99
- }
100
-
101
- #sidetreecontrol span:hover{
102
- color: #257da6;
103
- }
104
-
105
- .tree-holder{
106
- width: auto;
107
- padding: 10px;
108
- }
109
-
110
- #sidetreecontrol a{
111
- color: #006505;
112
- outline: none;
113
- }
114
-
115
- #sidetreecontrol a:hover{
116
- color: #257da6;
117
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
media/font/fontello.eot ADDED
Binary file
media/font/fontello.svg ADDED
@@ -0,0 +1,38 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0" standalone="no"?>
2
+ <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
3
+ <svg xmlns="http://www.w3.org/2000/svg">
4
+ <metadata>Copyright (C) 2015 by original authors @ fontello.com</metadata>
5
+ <defs>
6
+ <font id="fontello" horiz-adv-x="1000" >
7
+ <font-face font-family="fontello" font-weight="400" font-stretch="normal" units-per-em="1000" ascent="850" descent="-150" />
8
+ <missing-glyph horiz-adv-x="1000" />
9
+ <glyph glyph-name="spin4" unicode="&#xe800;" d="m498 850c-114 0-228-39-320-116l0 0c173 140 428 130 588-31 134-134 164-332 89-495-10-29-5-50 12-68 21-20 61-23 84 0 3 3 12 15 15 24 71 180 33 393-112 539-99 98-228 147-356 147z m-409-274c-14 0-29-5-39-16-3-3-13-15-15-24-71-180-34-393 112-539 185-185 479-195 676-31l0 0c-173-140-428-130-589 31-134 134-163 333-89 495 11 29 6 50-12 68-11 11-27 17-44 16z" horiz-adv-x="1001" />
10
+ <glyph glyph-name="user-secret" unicode="&#xe801;" d="m321-7l54 250-54 71-71 36z m143 0l72 357-72-36-53-71z m90 563q-2 3-3 4-5 4-53 4-39 0-93-10-4-2-12-2t-12 2q-54 10-93 10-48 0-54-4-1-1-2-4 1-10 2-15 2-1 5-3t4-6q1-2 4-12t4-11 4-10 5-9 5-8 7-7 7-6 10-4 12-2 13-1q20 0 33 6t18 17 8 19 7 17 10 7h6q6 0 10-7t6-17 9-19 18-17 33-6q7 0 13 1t12 2 9 4 8 6 7 7 5 8 5 9 4 10 4 11 4 12q1 4 4 6t4 3q1 5 3 15z m232-490q0-68-41-106t-108-39h-488q-67 0-108 39t-41 106q0 34 3 66t10 70 21 69 36 58 52 41l-51 123h120q-12 36-12 71 0 7 1 18-109 22-109 54 0 32 118 55 9 35 28 75t40 63q18 21 42 21 17 0 47-17t47-18 47 18 47 17q24 0 42-21 20-23 39-63t29-75q117-23 117-55 0-32-108-54 4-45-11-89h119l-45-126q35-18 60-54t36-80 16-84 5-83z" horiz-adv-x="857.1" />
11
+ <glyph glyph-name="users" unicode="&#xe802;" d="m331 350q-90-3-148-71h-75q-45 0-77 22t-31 66q0 197 69 197 4 0 25-11t54-24 66-12q38 0 75 13-3-21-3-37 0-78 45-143z m598-356q0-66-41-105t-108-39h-488q-68 0-108 39t-41 105q0 30 2 58t8 61 14 61 24 54 35 45 48 30 62 11q6 0 24-12t41-26 59-27 76-12 75 12 60 27 41 26 23 12q35 0 63-11t47-30 35-45 24-54 15-61 8-61 2-58z m-572 713q0-59-42-101t-101-42-101 42-42 101 42 101 101 42 101-42 42-101z m393-214q0-89-63-152t-151-62-152 62-63 152 63 151 152 63 151-63 63-151z m321-126q0-43-31-66t-77-22h-75q-57 68-147 71 45 65 45 143 0 16-3 37 37-13 74-13 33 0 67 12t54 24 24 11q69 0 69-197z m-71 340q0-59-42-101t-101-42-101 42-42 101 42 101 101 42 101-42 42-101z" horiz-adv-x="1071.4" />
12
+ <glyph glyph-name="user" unicode="&#xe803;" d="m786 66q0-67-41-106t-108-39h-488q-67 0-108 39t-41 106q0 30 2 58t8 61 15 60 24 55 34 45 48 30 62 11q5 0 24-12t41-27 60-27 75-12 74 12 61 27 41 27 24 12q34 0 62-11t48-30 34-45 24-55 15-60 8-61 2-58z m-179 498q0-88-63-151t-151-63-152 63-62 151 62 152 152 63 151-63 63-152z" horiz-adv-x="785.7" />
13
+ <glyph glyph-name="trash-empty" unicode="&#xe804;" d="m286 439v-321q0-8-5-13t-13-5h-36q-8 0-13 5t-5 13v321q0 8 5 13t13 5h36q8 0 13-5t5-13z m143 0v-321q0-8-5-13t-13-5h-36q-8 0-13 5t-5 13v321q0 8 5 13t13 5h36q8 0 13-5t5-13z m142 0v-321q0-8-5-13t-12-5h-36q-8 0-13 5t-5 13v321q0 8 5 13t13 5h36q7 0 12-5t5-13z m72-404v529h-500v-529q0-12 4-22t8-15 6-5h464q2 0 6 5t8 15 4 22z m-375 601h250l-27 65q-4 5-9 6h-177q-6-1-10-6z m518-18v-36q0-8-5-13t-13-5h-54v-529q0-46-26-80t-63-34h-464q-37 0-63 33t-27 79v531h-53q-8 0-13 5t-5 13v36q0 8 5 13t13 5h172l39 93q9 21 31 35t44 15h178q22 0 44-15t30-35l39-93h173q8 0 13-5t5-13z" horiz-adv-x="785.7" />
14
+ <glyph glyph-name="cog" unicode="&#xe805;" d="m571 350q0 59-41 101t-101 42-101-42-42-101 42-101 101-42 101 42 41 101z m286 61v-124q0-7-4-13t-11-7l-104-16q-10-30-21-51 19-27 59-77 6-6 6-13t-5-13q-15-21-55-61t-53-39q-7 0-14 5l-77 60q-25-13-51-21-9-76-16-104-4-16-20-16h-124q-8 0-14 5t-6 12l-16 103q-27 9-50 21l-79-60q-6-5-14-5-8 0-14 6-70 64-92 94-4 5-4 13 0 6 5 12 8 12 28 37t30 40q-15 28-23 55l-102 15q-7 1-11 7t-5 13v124q0 7 5 13t10 7l104 16q8 25 22 51-23 32-60 77-6 7-6 14 0 5 5 12 15 20 55 60t53 40q7 0 15-5l77-60q24 13 50 21 9 76 17 104 3 15 20 15h124q7 0 13-4t7-12l15-103q28-9 50-21l80 60q5 5 13 5 7 0 14-5 72-67 92-95 4-5 4-13 0-6-4-12-9-12-29-38t-30-39q14-28 23-55l102-15q7-1 12-7t4-13z" horiz-adv-x="857.1" />
15
+ <glyph glyph-name="lock" unicode="&#xe806;" d="m179 421h285v108q0 59-42 101t-101 41-101-41-41-101v-108z m464-53v-322q0-22-16-37t-38-16h-535q-23 0-38 16t-16 37v322q0 22 16 38t38 15h17v108q0 102 74 176t176 74 177-74 73-176v-108h18q23 0 38-15t16-38z" horiz-adv-x="642.9" />
16
+ <glyph glyph-name="pencil" unicode="&#xe807;" d="m203-7l50 51-131 131-51-51v-60h72v-71h60z m291 518q0 12-12 12-5 0-9-4l-303-302q-4-4-4-10 0-12 13-12 5 0 9 4l303 302q3 4 3 10z m-30 107l232-232-464-465h-232v233z m381-54q0-29-20-50l-93-93-232 233 93 92q20 21 50 21 29 0 51-21l131-131q20-22 20-51z" horiz-adv-x="857.1" />
17
+ <glyph glyph-name="arrows-cw" unicode="&#xe808;" d="m843 261q0-3 0-4-36-150-150-243t-267-93q-81 0-157 31t-136 88l-72-72q-11-11-25-11t-25 11-11 25v250q0 14 11 25t25 11h250q14 0 25-11t10-25-10-25l-77-77q40-37 90-57t105-20q74 0 139 37t104 99q6 10 29 66 5 13 17 13h107q8 0 13-6t5-12z m14 446v-250q0-14-10-25t-26-11h-250q-14 0-25 11t-10 25 10 25l77 77q-82 77-194 77-75 0-140-37t-104-99q-6-10-29-66-5-13-17-13h-111q-7 0-13 6t-5 12v4q36 150 151 243t268 93q81 0 158-31t137-88l72 72q11 11 25 11t26-11 10-25z" horiz-adv-x="857.1" />
18
+ <glyph glyph-name="lock-open-alt" unicode="&#xe809;" d="m589 421q23 0 38-15t16-38v-322q0-22-16-37t-38-16h-535q-23 0-38 16t-16 37v322q0 22 16 38t38 15h17v179q0 103 74 177t176 73 177-73 73-177q0-15-10-25t-25-11h-36q-14 0-25 11t-11 25q0 59-42 101t-101 42-101-42-41-101v-179h410z" horiz-adv-x="642.9" />
19
+ <glyph glyph-name="plus" unicode="&#xe80a;" d="m786 439v-107q0-22-16-38t-38-15h-232v-233q0-22-16-37t-38-16h-107q-22 0-38 16t-15 37v233h-232q-23 0-38 15t-16 38v107q0 23 16 38t38 16h232v232q0 22 15 38t38 16h107q23 0 38-16t16-38v-232h232q22 0 38-16t16-38z" horiz-adv-x="785.7" />
20
+ <glyph glyph-name="filter" unicode="&#xe80b;" d="m783 685q9-23-8-39l-275-275v-414q0-23-22-33-7-3-14-3-15 0-25 11l-143 143q-10 10-10 25v271l-275 275q-18 16-8 39 9 22 33 22h714q23 0 33-22z" horiz-adv-x="785.7" />
21
+ <glyph glyph-name="check" unicode=