Refactoring Menu 1st step: Permissions
- added config permissions to setup our capabilities - added debug mode for Twig so that we can use "dump()" when WP_DEBUG is on
This commit is contained in:
@ -22,6 +22,7 @@ class Initializer {
|
||||
$this->setupMenu();
|
||||
$this->setupRouter();
|
||||
$this->setupWidget();
|
||||
$this->setupPermissions();
|
||||
}
|
||||
|
||||
function setupDB() {
|
||||
@ -82,4 +83,9 @@ class Initializer {
|
||||
$widget = new Widget();
|
||||
$widget->init();
|
||||
}
|
||||
|
||||
function setupPermissions() {
|
||||
$permissions = new Permissions();
|
||||
$permissions->init();
|
||||
}
|
||||
}
|
||||
|
@ -3,6 +3,7 @@ namespace MailPoet\Config;
|
||||
use \MailPoet\Models\Segment;
|
||||
use \MailPoet\Models\Setting;
|
||||
use \MailPoet\Settings\Hosts;
|
||||
use \MailPoet\Settings\Permissions;
|
||||
use \MailPoet\Util\DKIM;
|
||||
|
||||
if(!defined('ABSPATH')) exit;
|
||||
@ -151,51 +152,7 @@ class Menu {
|
||||
'ISO-8859-15', 'Windows-1251', 'Windows-1252'
|
||||
);
|
||||
|
||||
// Roles & Permissions
|
||||
global $wp_roles;
|
||||
$editable_roles = apply_filters('editable_roles', $wp_roles->roles);
|
||||
$roles = array();
|
||||
foreach($editable_roles as $role => $role_data) {
|
||||
$roles[$role] = translate_user_role($role_data['name']);
|
||||
}
|
||||
|
||||
$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);
|
||||
|
||||
// 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
|
||||
);
|
||||
}
|
||||
|
||||
// dkim: check if public/private keys have been generated
|
||||
if(
|
||||
@ -219,8 +176,7 @@ class Menu {
|
||||
'flags' => $flags,
|
||||
'charsets' => $charsets,
|
||||
'current_user' => $current_user,
|
||||
'capabilities' => $capabilities,
|
||||
'roles' => $roles,
|
||||
'permissions' => Permissions::get(),
|
||||
'hosts' => array(
|
||||
'web' => Hosts::getWebHosts(),
|
||||
'smtp' => Hosts::getSMTPHosts()
|
||||
|
43
lib/Config/Permissions.php
Normal file
43
lib/Config/Permissions.php
Normal file
@ -0,0 +1,43 @@
|
||||
<?php
|
||||
namespace MailPoet\Config;
|
||||
|
||||
class Permissions {
|
||||
function __construct() {
|
||||
}
|
||||
|
||||
function init() {
|
||||
add_action(
|
||||
'admin_init',
|
||||
array($this, 'setup')
|
||||
);
|
||||
}
|
||||
|
||||
function setup() {
|
||||
// administrative roles
|
||||
$roles = array('administrator', 'super_admin');
|
||||
|
||||
// mailpoet capabilities
|
||||
$capabilities = array(
|
||||
'mailpoet_newsletters',
|
||||
'mailpoet_newsletter_styles',
|
||||
'mailpoet_subscribers',
|
||||
'mailpoet_settings',
|
||||
'mailpoet_statistics'
|
||||
);
|
||||
|
||||
foreach($roles as $role_key){
|
||||
// get role based on role key
|
||||
$role = get_role($role_key);
|
||||
|
||||
// if the role doesn't exist, skip it
|
||||
if($role !== null) {
|
||||
// add capability
|
||||
foreach($capabilities as $capability) {
|
||||
if(!$role->has_cap($capability)) {
|
||||
$role->add_cap($capability);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -12,11 +12,15 @@ class Renderer {
|
||||
$file_system = new TwigFileSystem(Env::$views_path);
|
||||
$this->renderer = new TwigEnv(
|
||||
$file_system,
|
||||
array('cache' => $this->detectCache())
|
||||
array(
|
||||
'cache' => $this->detectCache(),
|
||||
'debug' => WP_DEBUG
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
function init() {
|
||||
$this->setupDebug();
|
||||
$this->setupTranslations();
|
||||
$this->setupFunctions();
|
||||
$this->setupHandlebars();
|
||||
@ -61,4 +65,10 @@ class Renderer {
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
function setupDebug() {
|
||||
if(WP_DEBUG === true) {
|
||||
$this->renderer->addExtension(new \Twig_Extension_Debug());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -21,4 +21,8 @@ class Settings {
|
||||
|
||||
wp_send_json(in_array(false, $results));
|
||||
}
|
||||
|
||||
function save($data = array()) {
|
||||
// TODO
|
||||
}
|
||||
}
|
||||
|
94
lib/Settings/Permissions.php
Normal file
94
lib/Settings/Permissions.php
Normal file
@ -0,0 +1,94 @@
|
||||
<?php
|
||||
namespace MailPoet\Settings;
|
||||
|
||||
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 get() {
|
||||
$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)) {
|
||||
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']);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -46,8 +46,7 @@ class Functions extends \Twig_Extension {
|
||||
'sending_frequency',
|
||||
array($this, 'getSendingFrequency'),
|
||||
array('is_safe' => array('all'))
|
||||
),
|
||||
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
|
@ -62,6 +62,77 @@
|
||||
jQuery(function($) {
|
||||
// on dom loaded
|
||||
$(function() {
|
||||
// save settings
|
||||
$('.mailpoet_settings_submit').on('click', function(e) {
|
||||
e.preventDefault();
|
||||
|
||||
// serialize form data
|
||||
var data = $('#mailpoet_settings_form').serializeObject(),
|
||||
permissions = $('.mailpoet_role_permission'),
|
||||
data_permissions = [],
|
||||
has_error = false;
|
||||
|
||||
// check if "subscribe in comments" is enabled
|
||||
if(parseInt(data.subscribe_on_comment) === 1) {
|
||||
if(data.subscribe_on_comment_lists === undefined) {
|
||||
$('#subscribe_on_comment_lists').next('.mailpoet_error').show();
|
||||
has_error = true;
|
||||
} else {
|
||||
$('#subscribe_on_comment_lists').next('.mailpoet_error').hide();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// check if "subscribe in registration form" is enabled
|
||||
if(parseInt(data.subscribe_on_register) === 1) {
|
||||
if(data.subscribe_on_register_lists === undefined) {
|
||||
$('#subscribe_on_register_lists').next('.mailpoet_error').show();
|
||||
has_error = true;
|
||||
} else {
|
||||
$('#subscribe_on_register_lists').next('.mailpoet_error').hide();
|
||||
}
|
||||
}
|
||||
|
||||
// fail fast...
|
||||
if(has_error === true) {
|
||||
return false;
|
||||
}
|
||||
|
||||
// format permissions
|
||||
for(var i = permissions.length - 1; i >= 0; i--) {
|
||||
var permission = $(permissions[i]);
|
||||
data_permissions.push({
|
||||
role: permission.data('role'),
|
||||
capability: permission.data('capability'),
|
||||
is_capable: (permission.is(':checked') ? 1 : 0)
|
||||
});
|
||||
};
|
||||
|
||||
// show loading screen
|
||||
//MailPoet.Modal.loading(true);
|
||||
console.log(data);
|
||||
console.log(data_permissions);
|
||||
|
||||
// // save permissions
|
||||
// mailpoet_post_wpi('settings_set_permissions.php', { permissions: data_permissions });
|
||||
|
||||
// // save settings
|
||||
// mailpoet_post_json('settings_set.php', data, function(response) {
|
||||
// if(response.success !== undefined && response.success === true) {
|
||||
// // display success message
|
||||
// MailPoet.Notice.success("<?php _e('Settings saved.'); ?>");
|
||||
// } else if(response.error !== undefined) {
|
||||
// MailPoet.Notice.error("<?php _e('Settings could not be saved.'); ?>");
|
||||
// }
|
||||
|
||||
// // hide loading screen
|
||||
// // MailPoet.Modal.loading(false);
|
||||
// }, function(error) {
|
||||
// // hide loading screen
|
||||
// // MailPoet.Modal.loading(false);
|
||||
// });
|
||||
});
|
||||
|
||||
// setup toggle checkboxes
|
||||
function toggleContent() {
|
||||
$('#'+$(this).data('toggle'))[
|
||||
|
@ -4,7 +4,7 @@
|
||||
<th class="manage-column">
|
||||
<%= __('Roles and permissions') %>
|
||||
</th>
|
||||
<% for role in roles %>
|
||||
<% for role in permissions.roles %>
|
||||
<th class="manage-column">
|
||||
<%= role %>
|
||||
</th>
|
||||
@ -12,18 +12,18 @@
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<% for capability in capabilities %>
|
||||
<% for capability in permissions.capabilities %>
|
||||
<tr class="<%= cycle(['alternate', ''], loop.index0) %>">
|
||||
<td>
|
||||
<%= capability.label %>
|
||||
</td>
|
||||
<% for role in capability.roles %>
|
||||
<% for role_key, role in capability.roles %>
|
||||
<td>
|
||||
<input
|
||||
class="mailpoet_role_permission"
|
||||
type="checkbox"
|
||||
data-role="<%= role %>"
|
||||
data-capability="<%= capability %>"
|
||||
data-role="<%= role_key %>"
|
||||
data-capability="<%= role.capability %>"
|
||||
value="1"
|
||||
<% if(role.is_capable) %>
|
||||
checked="checked"
|
||||
|
@ -121,6 +121,9 @@
|
||||
><%= segment.name %></option>
|
||||
<% endfor %>
|
||||
</select>
|
||||
<span class="mailpoet_error">
|
||||
<%= __('Please select a list.') %>
|
||||
</span>
|
||||
</p>
|
||||
</div>
|
||||
</td>
|
||||
|
Reference in New Issue
Block a user