annotate core/modules/user/src/Plugin/Action/ChangeUserRoleBase.php @ 19:fa3358dc1485 tip

Add ndrum files
author Chris Cannam
date Wed, 28 Aug 2019 13:14:47 +0100
parents 4c8ae668cc8c
children
rev   line source
Chris@0 1 <?php
Chris@0 2
Chris@0 3 namespace Drupal\user\Plugin\Action;
Chris@0 4
Chris@0 5 use Drupal\Core\Action\ConfigurableActionBase;
Chris@0 6 use Drupal\Core\Entity\DependencyTrait;
Chris@0 7 use Drupal\Core\Entity\EntityTypeInterface;
Chris@0 8 use Drupal\Core\Form\FormStateInterface;
Chris@0 9 use Drupal\Core\Plugin\ContainerFactoryPluginInterface;
Chris@0 10 use Drupal\Core\Session\AccountInterface;
Chris@0 11 use Drupal\user\RoleInterface;
Chris@0 12 use Symfony\Component\DependencyInjection\ContainerInterface;
Chris@0 13
Chris@0 14 /**
Chris@0 15 * Provides a base class for operations to change a user's role.
Chris@0 16 */
Chris@0 17 abstract class ChangeUserRoleBase extends ConfigurableActionBase implements ContainerFactoryPluginInterface {
Chris@0 18
Chris@0 19 use DependencyTrait;
Chris@0 20
Chris@0 21 /**
Chris@0 22 * The user role entity type.
Chris@0 23 *
Chris@0 24 * @var \Drupal\Core\Entity\EntityTypeInterface
Chris@0 25 */
Chris@0 26 protected $entityType;
Chris@0 27
Chris@0 28 /**
Chris@0 29 * {@inheritdoc}
Chris@0 30 */
Chris@0 31 public function __construct(array $configuration, $plugin_id, $plugin_definition, EntityTypeInterface $entity_type) {
Chris@0 32 parent::__construct($configuration, $plugin_id, $plugin_definition);
Chris@0 33 $this->entityType = $entity_type;
Chris@0 34 }
Chris@0 35
Chris@0 36 /**
Chris@0 37 * {@inheritdoc}
Chris@0 38 */
Chris@0 39 public static function create(ContainerInterface $container, array $configuration, $plugin_id, $plugin_definition) {
Chris@0 40 return new static(
Chris@0 41 $configuration,
Chris@0 42 $plugin_id,
Chris@0 43 $plugin_definition,
Chris@0 44 $container->get('entity.manager')->getDefinition('user_role')
Chris@0 45 );
Chris@0 46 }
Chris@0 47
Chris@0 48 /**
Chris@0 49 * {@inheritdoc}
Chris@0 50 */
Chris@0 51 public function defaultConfiguration() {
Chris@0 52 return [
Chris@0 53 'rid' => '',
Chris@0 54 ];
Chris@0 55 }
Chris@0 56
Chris@0 57 /**
Chris@0 58 * {@inheritdoc}
Chris@0 59 */
Chris@0 60 public function buildConfigurationForm(array $form, FormStateInterface $form_state) {
Chris@0 61 $roles = user_role_names(TRUE);
Chris@0 62 unset($roles[RoleInterface::AUTHENTICATED_ID]);
Chris@0 63 $form['rid'] = [
Chris@0 64 '#type' => 'radios',
Chris@0 65 '#title' => t('Role'),
Chris@0 66 '#options' => $roles,
Chris@0 67 '#default_value' => $this->configuration['rid'],
Chris@0 68 '#required' => TRUE,
Chris@0 69 ];
Chris@0 70 return $form;
Chris@0 71 }
Chris@0 72
Chris@0 73 /**
Chris@0 74 * {@inheritdoc}
Chris@0 75 */
Chris@0 76 public function submitConfigurationForm(array &$form, FormStateInterface $form_state) {
Chris@0 77 $this->configuration['rid'] = $form_state->getValue('rid');
Chris@0 78 }
Chris@0 79
Chris@0 80 /**
Chris@0 81 * {@inheritdoc}
Chris@0 82 */
Chris@0 83 public function calculateDependencies() {
Chris@0 84 if (!empty($this->configuration['rid'])) {
Chris@0 85 $prefix = $this->entityType->getConfigPrefix() . '.';
Chris@0 86 $this->addDependency('config', $prefix . $this->configuration['rid']);
Chris@0 87 }
Chris@0 88 return $this->dependencies;
Chris@0 89 }
Chris@0 90
Chris@0 91 /**
Chris@0 92 * {@inheritdoc}
Chris@0 93 */
Chris@0 94 public function access($object, AccountInterface $account = NULL, $return_as_object = FALSE) {
Chris@0 95 /** @var \Drupal\user\UserInterface $object */
Chris@0 96 $access = $object->access('update', $account, TRUE)
Chris@0 97 ->andIf($object->roles->access('edit', $account, TRUE));
Chris@0 98
Chris@0 99 return $return_as_object ? $access : $access->isAllowed();
Chris@0 100 }
Chris@0 101
Chris@0 102 }