Code Coverage
 
Classes and Traits
Functions and Methods
Lines
Total
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 10
CRAP
0.00% covered (danger)
0.00%
0 / 51
permissions
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 10
272.00
0.00% covered (danger)
0.00%
0 / 51
 __construct
0.00% covered (danger)
0.00%
0 / 1
2.00
0.00% covered (danger)
0.00%
0 / 12
 get_categories
0.00% covered (danger)
0.00%
0 / 1
2.00
0.00% covered (danger)
0.00%
0 / 3
 get_category_lang
0.00% covered (danger)
0.00%
0 / 1
2.00
0.00% covered (danger)
0.00%
0 / 3
 get_types
0.00% covered (danger)
0.00%
0 / 1
2.00
0.00% covered (danger)
0.00%
0 / 3
 get_type_lang
0.00% covered (danger)
0.00%
0 / 1
30.00
0.00% covered (danger)
0.00%
0 / 15
 get_permissions
0.00% covered (danger)
0.00%
0 / 1
2.00
0.00% covered (danger)
0.00%
0 / 3
 get_permission_category
0.00% covered (danger)
0.00%
0 / 1
6.00
0.00% covered (danger)
0.00%
0 / 3
 category_defined
0.00% covered (danger)
0.00%
0 / 1
2.00
0.00% covered (danger)
0.00%
0 / 3
 permission_defined
0.00% covered (danger)
0.00%
0 / 1
2.00
0.00% covered (danger)
0.00%
0 / 3
 get_permission_lang
0.00% covered (danger)
0.00%
0 / 1
6.00
0.00% covered (danger)
0.00%
0 / 3
<?php
/**
*
* This file is part of the phpBB Forum Software package.
*
* @copyright (c) phpBB Limited <https://www.phpbb.com>
* @license GNU General Public License, version 2 (GPL-2.0)
*
* For full copyright and license information, please see
* the docs/CREDITS.txt file.
*
*/
namespace phpbb;
class permissions
{
    /**
    * Event dispatcher object
    * @var \phpbb\event\dispatcher_interface
    */
    protected $dispatcher;
    /**
    * User object
    * @var \phpbb\user
    */
    protected $user;
    /**
    * Constructor
    *
    * @param    \phpbb\event\dispatcher_interface    $phpbb_dispatcher    Event dispatcher
    * @param    \phpbb\user                $user                User Object
    */
    public function __construct(\phpbb\event\dispatcher_interface $phpbb_dispatcher, \phpbb\user $user)
    {
        $this->dispatcher = $phpbb_dispatcher;
        $this->user = $user;
        $categories = $this->categories;
        $types = $this->types;
        $permissions = $this->permissions;
        /**
        * Allows to specify additional permission categories, types and permissions
        *
        * @event core.permissions
        * @var    array    types            Array with permission types (a_, u_, m_, etc.)
        * @var    array    categories        Array with permission categories (pm, post, settings, misc, etc.)
        * @var    array    permissions        Array with permissions. Each Permission has the following layout:
        *        '<type><permission>' => array(
        *            'lang'    => 'Language Key with a Short description', // Optional, if not set,
        *                        // the permissions identifier '<type><permission>' is used with
        *                        // all uppercase.
        *            'cat'    => 'Identifier of the category, the permission should be displayed in',
        *        ),
        *        Example:
        *        'u_viewprofile' => array(
        *            'lang'    => 'ACL_U_VIEWPROFILE',
        *            'cat'    => 'profile',
        *        ),
        * @since 3.1.0-a1
        */
        $vars = array('types', 'categories', 'permissions');
        extract($phpbb_dispatcher->trigger_event('core.permissions', compact($vars)));
        $this->categories = $categories;
        $this->types = $types;
        $this->permissions = $permissions;
    }
    /**
    * Returns an array with all the permission categories (pm, post, settings, misc, etc.)
    *
    * @return    array    Layout: cat-identifier => Language key
    */
    public function get_categories()
    {
        return $this->categories;
    }
    /**
    * Returns the language string of a permission category
    *
    * @param    string    $category    Identifier of the category
    * @return    string        Language string
    */
    public function get_category_lang($category)
    {
        return $this->user->lang($this->categories[$category]);
    }
    /**
    * Returns an array with all the permission types (a_, u_, m_, etc.)
    *
    * @return    array    Layout: type-identifier => Language key
    */
    public function get_types()
    {
        return $this->types;
    }
    /**
    * Returns the language string of a permission type
    *
    * @param    string    $type    Identifier of the type
    * @param    mixed    $scope    Scope of the type (should be 'global', 'local' or false)
    * @return    string    Language string
    */
    public function get_type_lang($type, $scope = false)
    {
        if ($scope && isset($this->types[$scope][$type]))
        {
            $lang_key = $this->types[$scope][$type];
        }
        else if (isset($this->types[$type]))
        {
            $lang_key = $this->types[$type];
        }
        else
        {
            $lang_key = 'ACL_TYPE_' . strtoupper(($scope) ? $scope . '_' . $type : $type);
        }
        return $this->user->lang($lang_key);
    }
    /**
    * Returns an array with all the permissions.
    * Each Permission has the following layout:
    *    '<type><permission>' => array(
    *        'lang'    => 'Language Key with a Short description', // Optional, if not set,
    *                    // the permissions identifier '<type><permission>' is used with
    *                    // all uppercase.
    *        'cat'    => 'Identifier of the category, the permission should be displayed in',
    *    ),
    *    Example:
    *    'u_viewprofile' => array(
    *        'lang'    => 'ACL_U_VIEWPROFILE',
    *        'cat'    => 'profile',
    *    ),
    *
    * @return    array
    */
    public function get_permissions()
    {
        return $this->permissions;
    }
    /**
    * Returns the category of a permission
    *
    * @param    string    $permission    Identifier of the permission
    * @return    string        Returns the category identifier of the permission
    */
    public function get_permission_category($permission)
    {
        return (isset($this->permissions[$permission]['cat'])) ? $this->permissions[$permission]['cat'] : 'misc';
    }
    /**
    * Checks if a category has been defined
    *
    * @param    string    $category    Identifier of the category
    * @return    bool    True if the category is defined, false otherwise
    */
    public function category_defined($category)
    {
        return isset($this->categories[$category]);
    }
    /**
    * Checks if a permission has been defined
    *
    * @param    string    $permission    Identifier of the permission
    * @return    bool    True if the permission is defined, false otherwise
    */
    public function permission_defined($permission)
    {
        return isset($this->permissions[$permission]);
    }
    /**
    * Returns the language string of a permission
    *
    * @param    string    $permission    Identifier of the permission
    * @return    string    Language string
    */
    public function get_permission_lang($permission)
    {
        return (isset($this->permissions[$permission]['lang'])) ? $this->user->lang($this->permissions[$permission]['lang']) : $this->user->lang('ACL_' . strtoupper($permission));
    }
    protected $types = array(
        'u_'            => 'ACL_TYPE_U_',
        'a_'            => 'ACL_TYPE_A_',
        'm_'            => 'ACL_TYPE_M_',
        'f_'            => 'ACL_TYPE_F_',
        'global'        => array(
            'm_'            => 'ACL_TYPE_GLOBAL_M_',
        ),
    );
    protected $categories = array(
        'actions'        => 'ACL_CAT_ACTIONS',
        'content'        => 'ACL_CAT_CONTENT',
        'forums'        => 'ACL_CAT_FORUMS',
        'misc'            => 'ACL_CAT_MISC',
        'permissions'    => 'ACL_CAT_PERMISSIONS',
        'pm'            => 'ACL_CAT_PM',
        'polls'            => 'ACL_CAT_POLLS',
        'post'            => 'ACL_CAT_POST',
        'post_actions'    => 'ACL_CAT_POST_ACTIONS',
        'posting'        => 'ACL_CAT_POSTING',
        'profile'        => 'ACL_CAT_PROFILE',
        'settings'        => 'ACL_CAT_SETTINGS',
        'topic_actions'    => 'ACL_CAT_TOPIC_ACTIONS',
        'user_group'    => 'ACL_CAT_USER_GROUP',
    );
    protected $permissions = array(
        // User Permissions
        'u_viewprofile'    => array('lang' => 'ACL_U_VIEWPROFILE', 'cat' => 'profile'),
        'u_chgname'        => array('lang' => 'ACL_U_CHGNAME', 'cat' => 'profile'),
        'u_chgpasswd'    => array('lang' => 'ACL_U_CHGPASSWD', 'cat' => 'profile'),
        'u_chgemail'    => array('lang' => 'ACL_U_CHGEMAIL', 'cat' => 'profile'),
        'u_chgavatar'    => array('lang' => 'ACL_U_CHGAVATAR', 'cat' => 'profile'),
        'u_chggrp'        => array('lang' => 'ACL_U_CHGGRP', 'cat' => 'profile'),
        'u_chgprofileinfo'    => array('lang' => 'ACL_U_CHGPROFILEINFO', 'cat' => 'profile'),
        'u_attach'        => array('lang' => 'ACL_U_ATTACH', 'cat' => 'post'),
        'u_download'    => array('lang' => 'ACL_U_DOWNLOAD', 'cat' => 'post'),
        'u_savedrafts'    => array('lang' => 'ACL_U_SAVEDRAFTS', 'cat' => 'post'),
        'u_chgcensors'    => array('lang' => 'ACL_U_CHGCENSORS', 'cat' => 'post'),
        'u_sig'            => array('lang' => 'ACL_U_SIG', 'cat' => 'post'),
        'u_emoji'        => array('lang' => 'ACL_U_EMOJI', 'cat' => 'post'),
        'u_sendpm'        => array('lang' => 'ACL_U_SENDPM', 'cat' => 'pm'),
        'u_masspm'        => array('lang' => 'ACL_U_MASSPM', 'cat' => 'pm'),
        'u_masspm_group'=> array('lang' => 'ACL_U_MASSPM_GROUP', 'cat' => 'pm'),
        'u_readpm'        => array('lang' => 'ACL_U_READPM', 'cat' => 'pm'),
        'u_pm_edit'        => array('lang' => 'ACL_U_PM_EDIT', 'cat' => 'pm'),
        'u_pm_delete'    => array('lang' => 'ACL_U_PM_DELETE', 'cat' => 'pm'),
        'u_pm_forward'    => array('lang' => 'ACL_U_PM_FORWARD', 'cat' => 'pm'),
        'u_pm_emailpm'    => array('lang' => 'ACL_U_PM_EMAILPM', 'cat' => 'pm'),
        'u_pm_printpm'    => array('lang' => 'ACL_U_PM_PRINTPM', 'cat' => 'pm'),
        'u_pm_attach'    => array('lang' => 'ACL_U_PM_ATTACH', 'cat' => 'pm'),
        'u_pm_download'    => array('lang' => 'ACL_U_PM_DOWNLOAD', 'cat' => 'pm'),
        'u_pm_bbcode'    => array('lang' => 'ACL_U_PM_BBCODE', 'cat' => 'pm'),
        'u_pm_smilies'    => array('lang' => 'ACL_U_PM_SMILIES', 'cat' => 'pm'),
        'u_pm_img'        => array('lang' => 'ACL_U_PM_IMG', 'cat' => 'pm'),
        'u_pm_flash'    => array('lang' => 'ACL_U_PM_FLASH', 'cat' => 'pm'),
        'u_sendemail'    => array('lang' => 'ACL_U_SENDEMAIL', 'cat' => 'misc'),
        'u_sendim'        => array('lang' => 'ACL_U_SENDIM', 'cat' => 'misc'),
        'u_ignoreflood'    => array('lang' => 'ACL_U_IGNOREFLOOD', 'cat' => 'misc'),
        'u_hideonline'    => array('lang' => 'ACL_U_HIDEONLINE', 'cat' => 'misc'),
        'u_viewonline'    => array('lang' => 'ACL_U_VIEWONLINE', 'cat' => 'misc'),
        'u_search'        => array('lang' => 'ACL_U_SEARCH', 'cat' => 'misc'),
        // Forum Permissions
        'f_list'        => array('lang' => 'ACL_F_LIST', 'cat' => 'actions'),
        'f_list_topics' => array('lang' => 'ACL_F_LIST_TOPICS', 'cat' => 'actions'),
        'f_read'        => array('lang' => 'ACL_F_READ', 'cat' => 'actions'),
        'f_search'        => array('lang' => 'ACL_F_SEARCH', 'cat' => 'actions'),
        'f_subscribe'    => array('lang' => 'ACL_F_SUBSCRIBE', 'cat' => 'actions'),
        'f_print'        => array('lang' => 'ACL_F_PRINT', 'cat' => 'actions'),
        'f_email'        => array('lang' => 'ACL_F_EMAIL', 'cat' => 'actions'),
        'f_bump'        => array('lang' => 'ACL_F_BUMP', 'cat' => 'actions'),
        'f_user_lock'    => array('lang' => 'ACL_F_USER_LOCK', 'cat' => 'actions'),
        'f_download'    => array('lang' => 'ACL_F_DOWNLOAD', 'cat' => 'actions'),
        'f_report'        => array('lang' => 'ACL_F_REPORT', 'cat' => 'actions'),
        'f_post'        => array('lang' => 'ACL_F_POST', 'cat' => 'post'),
        'f_sticky'        => array('lang' => 'ACL_F_STICKY', 'cat' => 'post'),
        'f_announce'    => array('lang' => 'ACL_F_ANNOUNCE', 'cat' => 'post'),
        'f_announce_global'    => array('lang' => 'ACL_F_ANNOUNCE_GLOBAL', 'cat' => 'post'),
        'f_reply'        => array('lang' => 'ACL_F_REPLY', 'cat' => 'post'),
        'f_edit'        => array('lang' => 'ACL_F_EDIT', 'cat' => 'post'),
        'f_delete'        => array('lang' => 'ACL_F_DELETE', 'cat' => 'post'),
        'f_softdelete'    => array('lang' => 'ACL_F_SOFTDELETE', 'cat' => 'post'),
        'f_ignoreflood' => array('lang' => 'ACL_F_IGNOREFLOOD', 'cat' => 'post'),
        'f_postcount'    => array('lang' => 'ACL_F_POSTCOUNT', 'cat' => 'post'),
        'f_noapprove'    => array('lang' => 'ACL_F_NOAPPROVE', 'cat' => 'post'),
        'f_attach'        => array('lang' => 'ACL_F_ATTACH', 'cat' => 'content'),
        'f_icons'        => array('lang' => 'ACL_F_ICONS', 'cat' => 'content'),
        'f_bbcode'        => array('lang' => 'ACL_F_BBCODE', 'cat' => 'content'),
        'f_flash'        => array('lang' => 'ACL_F_FLASH', 'cat' => 'content'),
        'f_img'            => array('lang' => 'ACL_F_IMG', 'cat' => 'content'),
        'f_sigs'        => array('lang' => 'ACL_F_SIGS', 'cat' => 'content'),
        'f_smilies'        => array('lang' => 'ACL_F_SMILIES', 'cat' => 'content'),
        'f_poll'        => array('lang' => 'ACL_F_POLL', 'cat' => 'polls'),
        'f_vote'        => array('lang' => 'ACL_F_VOTE', 'cat' => 'polls'),
        'f_votechg'        => array('lang' => 'ACL_F_VOTECHG', 'cat' => 'polls'),
        // Moderator Permissions
        'm_edit'        => array('lang' => 'ACL_M_EDIT', 'cat' => 'post_actions'),
        'm_delete'        => array('lang' => 'ACL_M_DELETE', 'cat' => 'post_actions'),
        'm_approve'        => array('lang' => 'ACL_M_APPROVE', 'cat' => 'post_actions'),
        'm_report'        => array('lang' => 'ACL_M_REPORT', 'cat' => 'post_actions'),
        'm_chgposter'    => array('lang' => 'ACL_M_CHGPOSTER', 'cat' => 'post_actions'),
        'm_info'        => array('lang' => 'ACL_M_INFO', 'cat' => 'post_actions'),
        'm_softdelete'    => array('lang' => 'ACL_M_SOFTDELETE', 'cat' => 'post_actions'),
        'm_move'    => array('lang' => 'ACL_M_MOVE', 'cat' => 'topic_actions'),
        'm_lock'    => array('lang' => 'ACL_M_LOCK', 'cat' => 'topic_actions'),
        'm_split'    => array('lang' => 'ACL_M_SPLIT', 'cat' => 'topic_actions'),
        'm_merge'    => array('lang' => 'ACL_M_MERGE', 'cat' => 'topic_actions'),
        'm_warn'        => array('lang' => 'ACL_M_WARN', 'cat' => 'misc'),
        'm_pm_report'    => array('lang' => 'ACL_M_PM_REPORT', 'cat' => 'misc'),
        'm_ban'            => array('lang' => 'ACL_M_BAN', 'cat' => 'misc'),
        // Admin Permissions
        'a_board'        => array('lang' => 'ACL_A_BOARD', 'cat' => 'settings'),
        'a_server'        => array('lang' => 'ACL_A_SERVER', 'cat' => 'settings'),
        'a_jabber'        => array('lang' => 'ACL_A_JABBER', 'cat' => 'settings'),
        'a_phpinfo'        => array('lang' => 'ACL_A_PHPINFO', 'cat' => 'settings'),
        'a_forum'        => array('lang' => 'ACL_A_FORUM', 'cat' => 'forums'),
        'a_forumadd'    => array('lang' => 'ACL_A_FORUMADD', 'cat' => 'forums'),
        'a_forumdel'    => array('lang' => 'ACL_A_FORUMDEL', 'cat' => 'forums'),
        'a_prune'        => array('lang' => 'ACL_A_PRUNE', 'cat' => 'forums'),
        'a_icons'        => array('lang' => 'ACL_A_ICONS', 'cat' => 'posting'),
        'a_words'        => array('lang' => 'ACL_A_WORDS', 'cat' => 'posting'),
        'a_bbcode'        => array('lang' => 'ACL_A_BBCODE', 'cat' => 'posting'),
        'a_attach'        => array('lang' => 'ACL_A_ATTACH', 'cat' => 'posting'),
        'a_user'        => array('lang' => 'ACL_A_USER', 'cat' => 'user_group'),
        'a_userdel'        => array('lang' => 'ACL_A_USERDEL', 'cat' => 'user_group'),
        'a_group'        => array('lang' => 'ACL_A_GROUP', 'cat' => 'user_group'),
        'a_groupadd'    => array('lang' => 'ACL_A_GROUPADD', 'cat' => 'user_group'),
        'a_groupdel'    => array('lang' => 'ACL_A_GROUPDEL', 'cat' => 'user_group'),
        'a_ranks'        => array('lang' => 'ACL_A_RANKS', 'cat' => 'user_group'),
        'a_profile'        => array('lang' => 'ACL_A_PROFILE', 'cat' => 'user_group'),
        'a_names'        => array('lang' => 'ACL_A_NAMES', 'cat' => 'user_group'),
        'a_ban'            => array('lang' => 'ACL_A_BAN', 'cat' => 'user_group'),
        'a_viewauth'    => array('lang' => 'ACL_A_VIEWAUTH', 'cat' => 'permissions'),
        'a_authgroups'    => array('lang' => 'ACL_A_AUTHGROUPS', 'cat' => 'permissions'),
        'a_authusers'    => array('lang' => 'ACL_A_AUTHUSERS', 'cat' => 'permissions'),
        'a_fauth'        => array('lang' => 'ACL_A_FAUTH', 'cat' => 'permissions'),
        'a_mauth'        => array('lang' => 'ACL_A_MAUTH', 'cat' => 'permissions'),
        'a_aauth'        => array('lang' => 'ACL_A_AAUTH', 'cat' => 'permissions'),
        'a_uauth'        => array('lang' => 'ACL_A_UAUTH', 'cat' => 'permissions'),
        'a_roles'        => array('lang' => 'ACL_A_ROLES', 'cat' => 'permissions'),
        'a_switchperm'    => array('lang' => 'ACL_A_SWITCHPERM', 'cat' => 'permissions'),
        'a_styles'        => array('lang' => 'ACL_A_STYLES', 'cat' => 'misc'),
        'a_extensions'    => array('lang' => 'ACL_A_EXTENSIONS', 'cat' => 'misc'),
        'a_viewlogs'    => array('lang' => 'ACL_A_VIEWLOGS', 'cat' => 'misc'),
        'a_clearlogs'    => array('lang' => 'ACL_A_CLEARLOGS', 'cat' => 'misc'),
        'a_modules'        => array('lang' => 'ACL_A_MODULES', 'cat' => 'misc'),
        'a_language'    => array('lang' => 'ACL_A_LANGUAGE', 'cat' => 'misc'),
        'a_email'        => array('lang' => 'ACL_A_EMAIL', 'cat' => 'misc'),
        'a_bots'        => array('lang' => 'ACL_A_BOTS', 'cat' => 'misc'),
        'a_reasons'        => array('lang' => 'ACL_A_REASONS', 'cat' => 'misc'),
        'a_backup'        => array('lang' => 'ACL_A_BACKUP', 'cat' => 'misc'),
        'a_search'        => array('lang' => 'ACL_A_SEARCH', 'cat' => 'misc'),
    );
}