View source
<?php
namespace Drupal\permissions_lock\Form;
use Drupal\Core\Form\ConfigFormBase;
use Drupal\Core\Form\FormStateInterface;
use Drupal\Core\Extension\ModuleHandlerInterface;
use Drupal\user\PermissionHandlerInterface;
use Drupal\user\RoleStorageInterface;
use Symfony\Component\DependencyInjection\ContainerInterface;
class PermissionsLockForm extends ConfigFormBase {
protected $permissionHandler;
protected $roleStorage;
protected $moduleHandler;
public function __construct(PermissionHandlerInterface $permission_handler, RoleStorageInterface $role_storage, ModuleHandlerInterface $module_handler) {
$this->permissionHandler = $permission_handler;
$this->roleStorage = $role_storage;
$this->moduleHandler = $module_handler;
}
public static function create(ContainerInterface $container) {
return new static($container
->get('user.permissions'), $container
->get('entity.manager')
->getStorage('user_role'), $container
->get('module_handler'));
}
protected function getRoles() {
return $this->roleStorage
->loadMultiple();
}
public function getFormId() {
return 'permissions_lock_settings_form';
}
protected function getEditableConfigNames() {
return [
'permissions_lock.settings',
];
}
public function buildForm(array $form, FormStateInterface $form_state) {
$config = \Drupal::config('permissions_lock.settings');
$default_roles = $config
->get('permissions_lock_locked_roles');
$default_perms = $config
->get('permissions_lock_locked_perm');
$permissions = array();
foreach ($this->permissionHandler
->getPermissions() as $key => $value) {
$permissions[$key] = $key;
}
$form['permissions_lock_roles'] = array(
'#type' => 'fieldset',
'#title' => $this
->t('Roles'),
'#weight' => 0,
'#collapsible' => TRUE,
);
$form['permissions_lock_roles']['permissions_lock_locked_roles'] = array(
'#type' => 'checkboxes',
'#title' => $this
->t('Locked roles'),
'#description' => $this
->t("Users without the 'manage permissions unrestricted' permission will not be able to change permissions for the selected roles."),
"#default_value" => $default_roles,
'#options' => user_role_names(),
);
$form['permissions_lock_permissions'] = array(
'#type' => 'fieldset',
'#title' => $this
->t('Permissions'),
'#weight' => 0,
'#collapsible' => TRUE,
'#collapsed' => TRUE,
);
$form['permissions_lock_permissions']['permissions_lock_locked_perm'] = array(
'#type' => 'checkboxes',
'#title' => $this
->t('Locked permissions'),
'#description' => $this
->t("Specify which permissions will not be changeable by users without the 'manage permissions unrestricted' permission"),
"#default_value" => $default_perms,
'#options' => $permissions,
);
$form['submit'] = array(
'#type' => 'submit',
'#value' => $this
->t('Save'),
'#weight' => 15,
);
return $form;
}
public function submitForm(array &$form, FormStateInterface $form_state) {
drupal_set_message($this
->t('The configuration options have been saved.'));
$this
->config('permissions_lock.settings')
->set('permissions_lock_locked_roles', $form_state
->getValue('permissions_lock_locked_roles'))
->set('permissions_lock_locked_perm', $form_state
->getValue('permissions_lock_locked_perm'))
->save();
}
}