diff options
author | Joas Schilling <nickvergessen@gmx.de> | 2013-06-28 10:52:13 +0200 |
---|---|---|
committer | Joas Schilling <nickvergessen@gmx.de> | 2013-07-14 11:51:29 -0400 |
commit | 573987d2d2defe3425c083b093bb5a5d3ec2db2a (patch) | |
tree | 84ea03d64f26b36507a208226d97e1ec6b83c7ce | |
parent | 3d9e57d0cec8f6d7883f8de1e461580047d18709 (diff) | |
download | forums-573987d2d2defe3425c083b093bb5a5d3ec2db2a.tar forums-573987d2d2defe3425c083b093bb5a5d3ec2db2a.tar.gz forums-573987d2d2defe3425c083b093bb5a5d3ec2db2a.tar.bz2 forums-573987d2d2defe3425c083b093bb5a5d3ec2db2a.tar.xz forums-573987d2d2defe3425c083b093bb5a5d3ec2db2a.zip |
[ticket/11582] Add new service for permissions
Replace calls to the language-array type with a call to get_types()
PHPBB3-11582
-rw-r--r-- | phpBB/config/services.yml | 5 | ||||
-rw-r--r-- | phpBB/includes/acp/acp_permissions.php | 9 | ||||
-rw-r--r-- | phpBB/includes/permissions.php | 263 | ||||
-rw-r--r-- | phpBB/language/en/acp/permissions_phpbb.php | 16 |
4 files changed, 280 insertions, 13 deletions
diff --git a/phpBB/config/services.yml b/phpBB/config/services.yml index c1579cfb57..9337fb0a5b 100644 --- a/phpBB/config/services.yml +++ b/phpBB/config/services.yml @@ -8,6 +8,11 @@ imports: - { resource: auth_providers.yml } services: + acl.permissions: + class: phpbb_permissions + arguments: + - @dispatcher + auth: class: phpbb_auth diff --git a/phpBB/includes/acp/acp_permissions.php b/phpBB/includes/acp/acp_permissions.php index a64765f4f5..9c5395c5b2 100644 --- a/phpBB/includes/acp/acp_permissions.php +++ b/phpBB/includes/acp/acp_permissions.php @@ -587,7 +587,10 @@ class acp_permissions */ function build_permission_dropdown($options, $default_option, $permission_scope) { - global $user, $auth; + global $user, $auth, $phpbb_container; + + $permissions = $phpbb_container->get('acl.permissions'); + $permission_types = $permissions->get_types(); $s_dropdown_options = ''; foreach ($options as $setting) @@ -598,8 +601,8 @@ class acp_permissions } $selected = ($setting == $default_option) ? ' selected="selected"' : ''; - $l_setting = (isset($user->lang['permission_type'][$permission_scope][$setting])) ? $user->lang['permission_type'][$permission_scope][$setting] : $user->lang['permission_type'][$setting]; - $s_dropdown_options .= '<option value="' . $setting . '"' . $selected . '>' . $l_setting . '</option>'; + $l_setting = (isset($permission_types[$permission_scope][$setting])) ? $permission_types[$permission_scope][$setting] : $permission_types[$setting]; + $s_dropdown_options .= '<option value="' . $setting . '"' . $selected . '>' . $user->lang($l_setting) . '</option>'; } return $s_dropdown_options; diff --git a/phpBB/includes/permissions.php b/phpBB/includes/permissions.php new file mode 100644 index 0000000000..d5389344f7 --- /dev/null +++ b/phpBB/includes/permissions.php @@ -0,0 +1,263 @@ +<?php +/** +* +* @package phpBB3 +* @copyright (c) 2013 phpBB Group +* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2 +* +*/ + +/** +* DO NOT CHANGE +*/ +if (!defined('IN_PHPBB')) +{ + exit; +} + +class phpbb_permissions +{ + /** + * Event dispatcher object + * @var phpbb_dispatcher + */ + protected $dispatcher; + /** + * Constructor + * + * @param phpbb_dispatcher $phpbb_dispatcher Event dispatcher + * @return null + */ + public function __construct($phpbb_dispatcher) + { + $this->dispatcher = $phpbb_dispatcher; + } + + public function get_categories() + { + $categories = $this->categories; + + /** + * Allows to specify additional permission categories + * + * @event core.permissions_get_categories + * @var array categories Array with permission categories (pm, post, settings, misc, etc.) + * @since 3.1-A1 + */ + $vars = array('categories'); + extract($this->dispatcher->trigger_event('core.permissions_get_categories', $vars)); + + return $categories; + } + + public function get_types() + { + $types = $this->types; + + /** + * Allows to specify additional permission types + * + * @event core.permissions_get_types + * @var array types Array with permission types (a_, u_, m_, etc.) + * @since 3.1-A1 + */ + $vars = array('types'); + extract($this->dispatcher->trigger_event('core.permissions_get_types', $vars)); + + return $types; + } + + public function get_permissions() + { + $permissions = $this->permissions; + + /** + * Allows to specify additional permissions + * + * @event core.permissions_get_types + * @var array permissions Array with permissions. Each Permission has the following layout: + * 'acl_<type><permission>' => array( + * 'lang' => 'Language Key with a Short description', // Optional, if not set, + * // the permissions identifier 'acl_<type><permission>' is used with + * // all uppercase. + * 'cat' => 'Identifier of the category, the permission should be displayed in', + * ), + * Example: + * 'acl_u_viewprofile' => array( + * 'lang' => 'ACL_U_VIEWPROFILE', + * 'cat' => 'profile', + * ), + * + * @since 3.1-A1 + */ + $vars = array('permissions'); + extract($this->dispatcher->trigger_event('core.permissions_get_permissions', $vars)); + + return $permissions; + } + + protected $types = array( + 'u_' => 'ACL_TYPE_USER', + 'a_' => 'ACL_TYPE_ADMIN', + 'm_' => 'ACL_TYPE_MODERATOR', + 'f_' => 'ACL_TYPE_FORUM', + 'global' => array( + 'm_' => 'ACL_TYPE_GLOBAL_MODERATOR', + ), + ); + + protected $categories = array( + 'actions' => 'Actions', + 'content' => 'Content', + 'forums' => 'Forums', + 'misc' => 'Misc', + 'permissions' => 'Permissions', + 'pm' => 'Private messages', + 'polls' => 'Polls', + 'post' => 'Post', + 'post_actions' => 'Post actions', + 'posting' => 'Posting', + 'profile' => 'Profile', + 'settings' => 'Settings', + 'topic_actions' => 'Topic actions', + 'user_group' => 'Users & Groups', + ); + + protected $permissions = array( + // User Permissions + 'acl_u_viewprofile' => array('lang' => 'Can view profiles, memberlist and online list', 'cat' => 'profile'), + 'acl_u_chgname' => array('lang' => 'Can change username', 'cat' => 'profile'), + 'acl_u_chgpasswd' => array('lang' => 'Can change password', 'cat' => 'profile'), + 'acl_u_chgemail' => array('lang' => 'Can change email address', 'cat' => 'profile'), + 'acl_u_chgavatar' => array('lang' => 'Can change avatar', 'cat' => 'profile'), + 'acl_u_chggrp' => array('lang' => 'Can change default usergroup', 'cat' => 'profile'), + 'acl_u_chgprofileinfo' => array('lang' => 'Can change profile field information', 'cat' => 'profile'), + + 'acl_u_attach' => array('lang' => 'Can attach files', 'cat' => 'post'), + 'acl_u_download' => array('lang' => 'Can download files', 'cat' => 'post'), + 'acl_u_savedrafts' => array('lang' => 'Can save drafts', 'cat' => 'post'), + 'acl_u_chgcensors' => array('lang' => 'Can disable word censors', 'cat' => 'post'), + 'acl_u_sig' => array('lang' => 'Can use signature', 'cat' => 'post'), + + 'acl_u_sendpm' => array('lang' => 'Can send private messages', 'cat' => 'pm'), + 'acl_u_masspm' => array('lang' => 'Can send messages to multiple users', 'cat' => 'pm'), + 'acl_u_masspm_group'=> array('lang' => 'Can send messages to groups', 'cat' => 'pm'), + 'acl_u_readpm' => array('lang' => 'Can read private messages', 'cat' => 'pm'), + 'acl_u_pm_edit' => array('lang' => 'Can edit own private messages', 'cat' => 'pm'), + 'acl_u_pm_delete' => array('lang' => 'Can remove private messages from own folder', 'cat' => 'pm'), + 'acl_u_pm_forward' => array('lang' => 'Can forward private messages', 'cat' => 'pm'), + 'acl_u_pm_emailpm' => array('lang' => 'Can email private messages', 'cat' => 'pm'), + 'acl_u_pm_printpm' => array('lang' => 'Can print private messages', 'cat' => 'pm'), + 'acl_u_pm_attach' => array('lang' => 'Can attach files in private messages', 'cat' => 'pm'), + 'acl_u_pm_download' => array('lang' => 'Can download files in private messages', 'cat' => 'pm'), + 'acl_u_pm_bbcode' => array('lang' => 'Can use BBCode in private messages', 'cat' => 'pm'), + 'acl_u_pm_smilies' => array('lang' => 'Can use smilies in private messages', 'cat' => 'pm'), + 'acl_u_pm_img' => array('lang' => 'Can use [img] BBCode tag in private messages', 'cat' => 'pm'), + 'acl_u_pm_flash' => array('lang' => 'Can use [flash] BBCode tag in private messages', 'cat' => 'pm'), + + 'acl_u_sendemail' => array('lang' => 'Can send emails', 'cat' => 'misc'), + 'acl_u_sendim' => array('lang' => 'Can send instant messages', 'cat' => 'misc'), + 'acl_u_ignoreflood' => array('lang' => 'Can ignore flood limit', 'cat' => 'misc'), + 'acl_u_hideonline' => array('lang' => 'Can hide online status', 'cat' => 'misc'), + 'acl_u_viewonline' => array('lang' => 'Can view hidden online users', 'cat' => 'misc'), + 'acl_u_search' => array('lang' => 'Can search board', 'cat' => 'misc'), + + // Forum Permissions + 'acl_f_list' => array('lang' => 'Can see forum', 'cat' => 'actions'), + 'acl_f_read' => array('lang' => 'Can read forum', 'cat' => 'actions'), + 'acl_f_search' => array('lang' => 'Can search the forum', 'cat' => 'actions'), + 'acl_f_subscribe' => array('lang' => 'Can subscribe forum', 'cat' => 'actions'), + 'acl_f_print' => array('lang' => 'Can print topics', 'cat' => 'actions'), + 'acl_f_email' => array('lang' => 'Can email topics', 'cat' => 'actions'), + 'acl_f_bump' => array('lang' => 'Can bump topics', 'cat' => 'actions'), + 'acl_f_user_lock' => array('lang' => 'Can lock own topics', 'cat' => 'actions'), + 'acl_f_download' => array('lang' => 'Can download files', 'cat' => 'actions'), + 'acl_f_report' => array('lang' => 'Can report posts', 'cat' => 'actions'), + + 'acl_f_post' => array('lang' => 'Can start new topics', 'cat' => 'post'), + 'acl_f_sticky' => array('lang' => 'Can post stickies', 'cat' => 'post'), + 'acl_f_announce' => array('lang' => 'Can post announcements', 'cat' => 'post'), + 'acl_f_reply' => array('lang' => 'Can reply to topics', 'cat' => 'post'), + 'acl_f_edit' => array('lang' => 'Can edit own posts', 'cat' => 'post'), + 'acl_f_delete' => array('lang' => 'Can delete own posts', 'cat' => 'post'), + 'acl_f_ignoreflood' => array('lang' => 'Can ignore flood limit', 'cat' => 'post'), + 'acl_f_postcount' => array('lang' => 'Increment post counter<br /><em>Please note that this setting only affects new posts.</em>', 'cat' => 'post'), + 'acl_f_noapprove' => array('lang' => 'Can post without approval', 'cat' => 'post'), + + 'acl_f_attach' => array('lang' => 'Can attach files', 'cat' => 'content'), + 'acl_f_icons' => array('lang' => 'Can use topic/post icons', 'cat' => 'content'), + 'acl_f_bbcode' => array('lang' => 'Can use BBCode', 'cat' => 'content'), + 'acl_f_flash' => array('lang' => 'Can use [flash] BBCode tag', 'cat' => 'content'), + 'acl_f_img' => array('lang' => 'Can use [img] BBCode tag', 'cat' => 'content'), + 'acl_f_sigs' => array('lang' => 'Can use signatures', 'cat' => 'content'), + 'acl_f_smilies' => array('lang' => 'Can use smilies', 'cat' => 'content'), + + 'acl_f_poll' => array('lang' => 'Can create polls', 'cat' => 'polls'), + 'acl_f_vote' => array('lang' => 'Can vote in polls', 'cat' => 'polls'), + 'acl_f_votechg' => array('lang' => 'Can change existing vote', 'cat' => 'polls'), + + // Moderator Permissions + 'acl_m_edit' => array('lang' => 'Can edit posts', 'cat' => 'post_actions'), + 'acl_m_delete' => array('lang' => 'Can delete posts', 'cat' => 'post_actions'), + 'acl_m_approve' => array('lang' => 'Can approve posts', 'cat' => 'post_actions'), + 'acl_m_report' => array('lang' => 'Can close and delete reports', 'cat' => 'post_actions'), + 'acl_m_chgposter' => array('lang' => 'Can change post author', 'cat' => 'post_actions'), + + 'acl_m_move' => array('lang' => 'Can move topics', 'cat' => 'topic_actions'), + 'acl_m_lock' => array('lang' => 'Can lock topics', 'cat' => 'topic_actions'), + 'acl_m_split' => array('lang' => 'Can split topics', 'cat' => 'topic_actions'), + 'acl_m_merge' => array('lang' => 'Can merge topics', 'cat' => 'topic_actions'), + + 'acl_m_info' => array('lang' => 'Can view post details', 'cat' => 'misc'), + 'acl_m_warn' => array('lang' => 'Can issue warnings<br /><em>This setting is only assigned globally. It is not forum based.</em>', 'cat' => 'misc'), // This moderator setting is only global (and not local) + 'acl_m_ban' => array('lang' => 'Can manage bans<br /><em>This setting is only assigned globally. It is not forum based.</em>', 'cat' => 'misc'), // This moderator setting is only global (and not local) + + // Admin Permissions + 'acl_a_board' => array('lang' => 'Can alter board settings/check for updates', 'cat' => 'settings'), + 'acl_a_server' => array('lang' => 'Can alter server/communication settings', 'cat' => 'settings'), + 'acl_a_jabber' => array('lang' => 'Can alter Jabber settings', 'cat' => 'settings'), + 'acl_a_phpinfo' => array('lang' => 'Can view php settings', 'cat' => 'settings'), + + 'acl_a_forum' => array('lang' => 'Can manage forums', 'cat' => 'forums'), + 'acl_a_forumadd' => array('lang' => 'Can add new forums', 'cat' => 'forums'), + 'acl_a_forumdel' => array('lang' => 'Can delete forums', 'cat' => 'forums'), + 'acl_a_prune' => array('lang' => 'Can prune forums', 'cat' => 'forums'), + + 'acl_a_icons' => array('lang' => 'Can alter topic/post icons and smilies', 'cat' => 'posting'), + 'acl_a_words' => array('lang' => 'Can alter word censors', 'cat' => 'posting'), + 'acl_a_bbcode' => array('lang' => 'Can define BBCode tags', 'cat' => 'posting'), + 'acl_a_attach' => array('lang' => 'Can alter attachment related settings', 'cat' => 'posting'), + + 'acl_a_user' => array('lang' => 'Can manage users<br /><em>This also includes seeing the users browser agent within the viewonline list.</em>', 'cat' => 'user_group'), + 'acl_a_userdel' => array('lang' => 'Can delete/prune users', 'cat' => 'user_group'), + 'acl_a_group' => array('lang' => 'Can manage groups', 'cat' => 'user_group'), + 'acl_a_groupadd' => array('lang' => 'Can add new groups', 'cat' => 'user_group'), + 'acl_a_groupdel' => array('lang' => 'Can delete groups', 'cat' => 'user_group'), + 'acl_a_ranks' => array('lang' => 'Can manage ranks', 'cat' => 'user_group'), + 'acl_a_profile' => array('lang' => 'Can manage custom profile fields', 'cat' => 'user_group'), + 'acl_a_names' => array('lang' => 'Can manage disallowed names', 'cat' => 'user_group'), + 'acl_a_ban' => array('lang' => 'Can manage bans', 'cat' => 'user_group'), + + 'acl_a_viewauth' => array('lang' => 'Can view permission masks', 'cat' => 'permissions'), + 'acl_a_authgroups' => array('lang' => 'Can alter permissions for individual groups', 'cat' => 'permissions'), + 'acl_a_authusers' => array('lang' => 'Can alter permissions for individual users', 'cat' => 'permissions'), + 'acl_a_fauth' => array('lang' => 'Can alter forum permission class', 'cat' => 'permissions'), + 'acl_a_mauth' => array('lang' => 'Can alter moderator permission class', 'cat' => 'permissions'), + 'acl_a_aauth' => array('lang' => 'Can alter admin permission class', 'cat' => 'permissions'), + 'acl_a_uauth' => array('lang' => 'Can alter user permission class', 'cat' => 'permissions'), + 'acl_a_roles' => array('lang' => 'Can manage roles', 'cat' => 'permissions'), + 'acl_a_switchperm' => array('lang' => 'Can use others permissions', 'cat' => 'permissions'), + + 'acl_a_styles' => array('lang' => 'Can manage styles', 'cat' => 'misc'), + 'acl_a_extensions' => array('lang' => 'Can manage extensions', 'cat' => 'misc'), + 'acl_a_viewlogs' => array('lang' => 'Can view logs', 'cat' => 'misc'), + 'acl_a_clearlogs' => array('lang' => 'Can clear logs', 'cat' => 'misc'), + 'acl_a_modules' => array('lang' => 'Can manage modules', 'cat' => 'misc'), + 'acl_a_language' => array('lang' => 'Can manage language packs', 'cat' => 'misc'), + 'acl_a_email' => array('lang' => 'Can send mass email', 'cat' => 'misc'), + 'acl_a_bots' => array('lang' => 'Can manage bots', 'cat' => 'misc'), + 'acl_a_reasons' => array('lang' => 'Can manage report/denial reasons', 'cat' => 'misc'), + 'acl_a_backup' => array('lang' => 'Can backup/restore database', 'cat' => 'misc'), + 'acl_a_search' => array('lang' => 'Can manage search backends and settings', 'cat' => 'misc'), + ); +} diff --git a/phpBB/language/en/acp/permissions_phpbb.php b/phpBB/language/en/acp/permissions_phpbb.php index 98679ad544..70312261a1 100644 --- a/phpBB/language/en/acp/permissions_phpbb.php +++ b/phpBB/language/en/acp/permissions_phpbb.php @@ -82,16 +82,12 @@ $lang = array_merge($lang, array( 'user_group' => 'Users & Groups', ), - // With defining 'global' here we are able to specify what is printed out if the permission is within the global scope. - 'permission_type' => array( - 'u_' => 'User permissions', - 'a_' => 'Admin permissions', - 'm_' => 'Moderator permissions', - 'f_' => 'Forum permissions', - 'global' => array( - 'm_' => 'Global moderator permissions', - ), - ), + + 'ACL_TYPE_USER' => 'User permissions', + 'ACL_TYPE_ADMIN' => 'Admin permissions', + 'ACL_TYPE_MODERATOR' => 'Moderator permissions', + 'ACL_TYPE_FORUM' => 'Forum permissions', + 'ACL_TYPE_GLOBAL_MODERATOR' => 'Global moderator permissions', )); // User Permissions |