97 lines
2.6 KiB
PHP
97 lines
2.6 KiB
PHP
<?php
|
|
namespace MailPoet\Util;
|
|
|
|
class Permissions {
|
|
static function getCapabilities() {
|
|
$capabilities = array(
|
|
'mailpoet_newsletters' =>
|
|
__('Who can create newsletters?'),
|
|
'mailpoet_newsletter_styles' =>
|
|
__('Who can see the Styles tab in the visual editor?'),
|
|
'mailpoet_subscribers' =>
|
|
__('Who can manage subscribers?'),
|
|
'mailpoet_settings' =>
|
|
__("Who can change MailPoet's settings?")
|
|
);
|
|
$capabilities = apply_filters('mailpoet_capabilities', $capabilities);
|
|
|
|
return $capabilities;
|
|
}
|
|
|
|
static function getRoles() {
|
|
$roles = array();
|
|
|
|
global $wp_roles;
|
|
$editable_roles = apply_filters('editable_roles', $wp_roles->roles);
|
|
foreach($editable_roles as $role => $role_data) {
|
|
$roles[$role] = translate_user_role($role_data['name']);
|
|
}
|
|
|
|
return $roles;
|
|
}
|
|
|
|
static function getAll() {
|
|
$roles = static::getRoles();
|
|
$capabilities = static::getCapabilities();
|
|
|
|
// go over each capability
|
|
foreach($capabilities as $capability => $label) {
|
|
$capability_roles = array();
|
|
// go over each role and check permission
|
|
foreach($roles as $role_key => $role_data) {
|
|
// get role object based on role key
|
|
$role = get_role($role_key);
|
|
|
|
// assign role capability
|
|
$capability_roles[$role_key] = array(
|
|
'capability' => $capability,
|
|
'is_capable' => (
|
|
in_array($role_key, array('administrator', 'super_admin'))
|
|
|| ($role->has_cap($capability))
|
|
),
|
|
'is_disabled' =>(
|
|
in_array($role_key, array('administrator', 'super_admin'))
|
|
)
|
|
);
|
|
}
|
|
$capabilities[$capability] = array(
|
|
'label' => $label,
|
|
'roles' => $capability_roles
|
|
);
|
|
}
|
|
|
|
return array(
|
|
'roles' => $roles,
|
|
'capabilities' => $capabilities
|
|
);
|
|
}
|
|
|
|
static function set($permissions = array()) {
|
|
if(empty($permissions)) {
|
|
return false;
|
|
}
|
|
|
|
foreach($permissions as $permission) {
|
|
// ignore administrator & superadmin roles
|
|
if(in_array(
|
|
$permission['role'],
|
|
array('administrator', 'superadmin'))
|
|
) {
|
|
continue;
|
|
}
|
|
|
|
// get role
|
|
$role = get_role($permission['role']);
|
|
if((bool)$permission['is_capable'] === true) {
|
|
// add capability to role
|
|
$role->add_cap($permission['capability']);
|
|
} else {
|
|
// remove capability to role
|
|
if($role->has_cap($permission['capability'])) {
|
|
$role->remove_cap($permission['capability']);
|
|
}
|
|
}
|
|
}
|
|
return true;
|
|
}
|
|
} |