aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJoas Schilling <nickvergessen@gmx.de>2013-06-28 10:52:13 +0200
committerJoas Schilling <nickvergessen@gmx.de>2013-07-14 11:51:29 -0400
commit573987d2d2defe3425c083b093bb5a5d3ec2db2a (patch)
tree84ea03d64f26b36507a208226d97e1ec6b83c7ce
parent3d9e57d0cec8f6d7883f8de1e461580047d18709 (diff)
downloadforums-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.yml5
-rw-r--r--phpBB/includes/acp/acp_permissions.php9
-rw-r--r--phpBB/includes/permissions.php263
-rw-r--r--phpBB/language/en/acp/permissions_phpbb.php16
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 &amp; 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 &amp; 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