/Web/wp-content/plugins/user-access-manager/user-access-manager.php

https://bitbucket.org/jimjenkins5/blog · PHP · 341 lines · 218 code · 56 blank · 67 comment · 39 complexity · 6478779aec2c0bab248f62143dab47ee MD5 · raw file

  1. <?php
  2. /**
  3. * Plugin Name: User Access Manager
  4. * Plugin URI: http://www.gm-alex.de/projects/wordpress/plugins/user-access-manager/
  5. * Author URI: http://www.gm-alex.de/
  6. * Version: 1.2.2
  7. * Author: Alexander Schneider
  8. * Description: Manage the access to your posts, pages, categories and files.
  9. *
  10. * user-access-manager.php
  11. *
  12. * PHP versions 5
  13. *
  14. * @category UserAccessManager
  15. * @package UserAccessManager
  16. * @author Alexander Schneider <alexanderschneider85@gmail.com>
  17. * @copyright 2008-2010 Alexander Schneider
  18. * @license http://www.gnu.org/licenses/gpl-2.0.html GNU General Public License, version 2
  19. * @version SVN: $Id$
  20. * @link http://wordpress.org/extend/plugins/user-access-manager/
  21. */
  22. //Paths
  23. load_plugin_textdomain(
  24. 'user-access-manager',
  25. false,
  26. 'user-access-manager/lang'
  27. );
  28. define(
  29. 'UAM_URLPATH',
  30. WP_PLUGIN_URL.'/user-access-manager/'
  31. );
  32. if (defined('UAM_LOCAL_DEBUG')) {
  33. //ONLY FOR MY LOCAL DEBUG
  34. define(
  35. 'UAM_REALPATH',
  36. '/'.plugin_basename(dirname(__FILE__)).'/'
  37. );
  38. } else {
  39. define(
  40. 'UAM_REALPATH',
  41. WP_PLUGIN_DIR.'/'.plugin_basename(dirname(__FILE__)).'/'
  42. );
  43. }
  44. //Defines
  45. require_once 'includes/database.define.php';
  46. require_once 'includes/language.define.php';
  47. //Check requirements
  48. $stop = false;
  49. //Check php version
  50. $phpVersion = phpversion();
  51. if (version_compare($phpVersion, "5.0") === -1) {
  52. add_action(
  53. 'admin_notices',
  54. create_function(
  55. '',
  56. 'echo \'<div id="message" class="error"><p><strong>'.
  57. sprintf(TXT_UAM_PHP_VERSION_TO_LOW, $phpVersion).
  58. '</strong></p></div>\';'
  59. )
  60. );
  61. $stop = true;
  62. }
  63. //Check wordpress version
  64. global $wp_version;
  65. if (version_compare($wp_version, "3.0") === -1) {
  66. add_action(
  67. 'admin_notices',
  68. create_function(
  69. '',
  70. 'echo \'<div id="message" class="error"><p><strong>'.
  71. sprintf(TXT_UAM_WORDPRESS_VERSION_TO_LOW, $wp_version).
  72. '</strong></p></div>\';'
  73. )
  74. );
  75. $stop = true;
  76. }
  77. //If we have a error stop plugin.
  78. if ($stop) {
  79. return;
  80. }
  81. //Classes
  82. require_once 'class/UserAccessManager.class.php';
  83. require_once 'class/UamUserGroup.class.php';
  84. require_once 'class/UamAccessHandler.class.php';
  85. if (class_exists("UserAccessManager")) {
  86. $userAccessManager = new UserAccessManager();
  87. }
  88. //Initialize the admin panel
  89. if (!function_exists("userAccessManagerAP")) {
  90. /**
  91. * Creates the filters and actions for the admin panel
  92. *
  93. * @return null;
  94. */
  95. function userAccessManagerAP()
  96. {
  97. global $userAccessManager,
  98. $current_user;
  99. if (!isset($userAccessManager)) {
  100. return;
  101. }
  102. $userAccessManager->setAtAdminPanel();
  103. $uamOptions = $userAccessManager->getAdminOptions();
  104. if ($userAccessManager->isDatabaseUpdateNecessary()) {
  105. $link = 'admin.php?page=uam_setup';
  106. add_action(
  107. 'admin_notices',
  108. create_function(
  109. '',
  110. 'echo \'<div id="message" class="error"><p><strong>'.
  111. sprintf(TXT_UAM_NEED_DATABASE_UPDATE, $link).
  112. '</strong></p></div>\';'
  113. )
  114. );
  115. }
  116. get_currentuserinfo();
  117. $curUserdata = get_userdata($current_user->ID);
  118. $uamAccessHandler = $userAccessManager->getAccessHandler();
  119. if ($uamAccessHandler->checkUserAccess()
  120. || $uamOptions['authors_can_add_posts_to_groups'] == 'true'
  121. ) {
  122. //Admin actions
  123. if (function_exists('add_action')) {
  124. add_action('admin_print_styles', array(&$userAccessManager, 'addStyles'));
  125. add_action('wp_print_scripts', array(&$userAccessManager, 'addScripts'));
  126. add_action('manage_posts_custom_column', array(&$userAccessManager, 'addPostColumn'), 10, 2);
  127. add_action('manage_pages_custom_column', array(&$userAccessManager, 'addPostColumn'), 10, 2);
  128. add_action('save_post', array(&$userAccessManager, 'savePostData'));
  129. add_action('manage_media_custom_column', array(&$userAccessManager, 'addPostColumn'), 10, 2);
  130. //Actions are only called when the attachment content is modified so we can't use it.
  131. //add_action('add_attachment', array(&$userAccessManager, 'savePostData'));
  132. //add_action('edit_attachment', array(&$userAccessManager, 'savePostData'));
  133. add_action('edit_user_profile', array(&$userAccessManager, 'showUserProfile'));
  134. add_action('profile_update', array(&$userAccessManager, 'saveUserData'));
  135. add_action('edit_category_form', array(&$userAccessManager, 'showCategoryEditForm'));
  136. add_action('create_category', array(&$userAccessManager, 'saveCategoryData'));
  137. add_action('edit_category', array(&$userAccessManager, 'saveCategoryData'));
  138. }
  139. //Admin filters
  140. if (function_exists('add_filter')) {
  141. //The filter we use instead of add|edit_attachment action, reason see top
  142. add_filter('attachment_fields_to_save', array(&$userAccessManager, 'saveAttachmentData'));
  143. add_filter('manage_posts_columns', array(&$userAccessManager, 'addPostColumnsHeader'));
  144. add_filter('manage_pages_columns', array(&$userAccessManager, 'addPostColumnsHeader'));
  145. add_filter('manage_users_columns', array(&$userAccessManager, 'addUserColumnsHeader'), 10);
  146. add_filter('manage_users_custom_column', array(&$userAccessManager, 'addUserColumn'), 10, 3);
  147. add_filter('manage_edit-category_columns', array(&$userAccessManager, 'addCategoryColumnsHeader'));
  148. add_filter('manage_category_custom_column', array(&$userAccessManager, 'addCategoryColumn'), 10, 3);
  149. }
  150. if ($uamOptions['lock_file'] == 'true') {
  151. add_action('media_meta', array(&$userAccessManager, 'showMediaFile'), 10, 2);
  152. add_filter('manage_media_columns', array(&$userAccessManager, 'addPostColumnsHeader'));
  153. }
  154. }
  155. //Clean up at deleting should be always done.
  156. if (function_exists('add_action')) {
  157. add_action('update_option_permalink_structure', array(&$userAccessManager, 'updatePermalink'));
  158. add_action('wp_dashboard_setup', array(&$userAccessManager, 'setupAdminDashboard'));
  159. add_action('delete_post', array(&$userAccessManager, 'removePostData'));
  160. add_action('delete_attachment', array(&$userAccessManager, 'removePostData'));
  161. add_action('delete_user', array(&$userAccessManager, 'removeUserData'));
  162. add_action('delete_category', array(&$userAccessManager, 'removeCategoryData'), 10, 2);
  163. }
  164. $userAccessManager->noRightsToEditContent();
  165. }
  166. }
  167. if (!function_exists("userAccessManagerAPMenu")) {
  168. /**
  169. * Creates the menu at the admin panel
  170. *
  171. * @return null;
  172. */
  173. function userAccessManagerAPMenu()
  174. {
  175. global $userAccessManager,
  176. $current_user;
  177. if (!isset($userAccessManager)) {
  178. return;
  179. }
  180. $uamOptions = $userAccessManager->getAdminOptions();
  181. if (ini_get('safe_mode')
  182. && $uamOptions['download_type'] == 'fopen'
  183. ) {
  184. add_action(
  185. 'admin_notices',
  186. create_function(
  187. '',
  188. 'echo \'<div id="message" class="error"><p><strong>'.
  189. TXT_UAM_FOPEN_WITHOUT_SAVEMODE_OFF.
  190. '</strong></p></div>\';'
  191. )
  192. );
  193. }
  194. $curUserdata = get_userdata($current_user->ID);
  195. $uamAccessHandler = $userAccessManager->getAccessHandler();
  196. if ($uamAccessHandler->checkUserAccess()) {
  197. //TODO
  198. /**
  199. * --- BOF ---
  200. * Not the best way to handle full user access capabilities seems
  201. * to be the right way, but it is way difficult.
  202. */
  203. //Admin main menu
  204. if (function_exists('add_menu_page')) {
  205. add_menu_page('User Access Manager', 'UAM', 'read', 'uam_usergroup', array(&$userAccessManager, 'printAdminPage'), 'div');
  206. }
  207. //Admin sub menus
  208. if (function_exists('add_submenu_page')) {
  209. add_submenu_page('uam_usergroup', TXT_UAM_MANAGE_GROUP, TXT_UAM_MANAGE_GROUP, 'read', 'uam_usergroup', array(&$userAccessManager, 'printAdminPage'));
  210. add_submenu_page('uam_usergroup', TXT_UAM_SETTINGS, TXT_UAM_SETTINGS, 'read', 'uam_settings', array(&$userAccessManager, 'printAdminPage'));
  211. add_submenu_page('uam_usergroup', TXT_UAM_SETUP, TXT_UAM_SETUP, 'read', 'uam_setup', array(&$userAccessManager, 'printAdminPage'));
  212. add_submenu_page('uam_usergroup', TXT_UAM_ABOUT, TXT_UAM_ABOUT, 'read', 'uam_about', array(&$userAccessManager, 'printAdminPage'));
  213. do_action('uam_add_submenu');
  214. }
  215. /**
  216. * --- EOF ---
  217. */
  218. }
  219. if ($uamAccessHandler->checkUserAccess()
  220. || $uamOptions['authors_can_add_posts_to_groups'] == 'true'
  221. ) {
  222. //Admin meta boxes
  223. if (function_exists('add_meta_box')) {
  224. $postableTypes = $uamAccessHandler->getPostableTypes();
  225. foreach ($postableTypes as $postableType) {
  226. add_meta_box('uma_post_access', 'Access', array(&$userAccessManager, 'editPostContent'), $postableType, 'side');
  227. }
  228. /*add_meta_box('uma_post_access', 'Access', array(&$userAccessManager, 'editPostContent'), 'post', 'side');
  229. add_meta_box('uma_post_access', 'Access', array(&$userAccessManager, 'editPostContent'), 'page', 'side');*/
  230. }
  231. }
  232. }
  233. }
  234. if (!function_exists("userAccessManagerUninstall")) {
  235. function userAccessManagerUninstall() {
  236. $userAccessManager = new UserAccessManager();
  237. $userAccessManager->uninstall();
  238. }
  239. }
  240. if (isset($userAccessManager)) {
  241. //install
  242. if (function_exists('register_activation_hook')) {
  243. register_activation_hook(__FILE__, array(&$userAccessManager, 'install'));
  244. }
  245. //uninstall
  246. if (function_exists('register_uninstall_hook')) {
  247. register_uninstall_hook(__FILE__, 'userAccessManagerUninstall');
  248. } elseif (function_exists('register_deactivation_hook')) {
  249. //Fallback
  250. register_deactivation_hook(__FILE__, array(&$userAccessManager, 'uninstall'));
  251. }
  252. //deactivation
  253. if (function_exists('register_deactivation_hook')) {
  254. register_deactivation_hook(__FILE__, array(&$userAccessManager, 'deactivate'));
  255. }
  256. //Redirect
  257. $uamOptions = $userAccessManager->getAdminOptions();
  258. if ($uamOptions['redirect'] != 'false' || isset($_GET['uamgetfile'])) {
  259. add_filter('wp_headers', array(&$userAccessManager, 'redirect'), 10, 2);
  260. }
  261. //Actions
  262. if (function_exists('add_action')) {
  263. add_action('wp_print_scripts', array(&$userAccessManager, 'addScripts'));
  264. add_action('wp_print_styles', array(&$userAccessManager, 'addStyles'));
  265. add_action('admin_init', 'userAccessManagerAP');
  266. add_action('admin_menu', 'userAccessManagerAPMenu');
  267. }
  268. //Filters
  269. if (function_exists('add_filter')) {
  270. add_filter('wp_get_attachment_thumb_url', array(&$userAccessManager, 'getFileUrl'), 10, 2);
  271. add_filter('wp_get_attachment_url', array(&$userAccessManager, 'getFileUrl'), 10, 2);
  272. add_filter('the_posts', array(&$userAccessManager, 'showPost'));
  273. add_filter('posts_where_paged', array(&$userAccessManager, 'showPostSql'));
  274. add_filter('wp_get_nav_menu_items', array(&$userAccessManager, 'showCustomMenu'));
  275. add_filter('comments_array', array(&$userAccessManager, 'showComment'));
  276. add_filter('get_pages', array(&$userAccessManager, 'showPage'));
  277. add_filter('get_terms', array(&$userAccessManager, 'showTerms'), 10, 2);
  278. add_filter('get_next_post_where', array(&$userAccessManager, 'showNextPreviousPost'));
  279. add_filter('get_previous_post_where', array(&$userAccessManager, 'showNextPreviousPost'));
  280. add_filter('post_link', array(&$userAccessManager, 'cachePostLinks'), 10, 2);
  281. add_filter('edit_post_link', array(&$userAccessManager, 'showGroupMembership'), 10, 2);
  282. add_filter('parse_query', array(&$userAccessManager, 'parseQuery'));
  283. add_filter('getarchives_where', array(&$userAccessManager, 'showPostSql'));
  284. }
  285. }