Mercurial > hg > isophonics-drupal-site
comparison core/modules/node/src/Plugin/Action/AssignOwnerNode.php @ 0:4c8ae668cc8c
Initial import (non-working)
author | Chris Cannam |
---|---|
date | Wed, 29 Nov 2017 16:09:58 +0000 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
-1:000000000000 | 0:4c8ae668cc8c |
---|---|
1 <?php | |
2 | |
3 namespace Drupal\node\Plugin\Action; | |
4 | |
5 use Drupal\Core\Action\ConfigurableActionBase; | |
6 use Drupal\Core\Database\Connection; | |
7 use Drupal\Core\Form\FormStateInterface; | |
8 use Drupal\Core\Plugin\ContainerFactoryPluginInterface; | |
9 use Drupal\Core\Session\AccountInterface; | |
10 use Drupal\user\Entity\User; | |
11 use Symfony\Component\DependencyInjection\ContainerInterface; | |
12 | |
13 /** | |
14 * Assigns ownership of a node to a user. | |
15 * | |
16 * @Action( | |
17 * id = "node_assign_owner_action", | |
18 * label = @Translation("Change the author of content"), | |
19 * type = "node" | |
20 * ) | |
21 */ | |
22 class AssignOwnerNode extends ConfigurableActionBase implements ContainerFactoryPluginInterface { | |
23 | |
24 /** | |
25 * The database connection. | |
26 * | |
27 * @var \Drupal\Core\Database\Connection | |
28 */ | |
29 protected $connection; | |
30 | |
31 /** | |
32 * Constructs a new AssignOwnerNode action. | |
33 * | |
34 * @param array $configuration | |
35 * A configuration array containing information about the plugin instance. | |
36 * @param string $plugin_id | |
37 * The plugin ID for the plugin instance. | |
38 * @param mixed $plugin_definition | |
39 * The plugin implementation definition. | |
40 * @param \Drupal\Core\Database\Connection $connection | |
41 * The database connection. | |
42 */ | |
43 public function __construct(array $configuration, $plugin_id, $plugin_definition, Connection $connection) { | |
44 parent::__construct($configuration, $plugin_id, $plugin_definition); | |
45 | |
46 $this->connection = $connection; | |
47 } | |
48 | |
49 /** | |
50 * {@inheritdoc} | |
51 */ | |
52 public static function create(ContainerInterface $container, array $configuration, $plugin_id, $plugin_definition) { | |
53 return new static($configuration, $plugin_id, $plugin_definition, | |
54 $container->get('database') | |
55 ); | |
56 } | |
57 | |
58 /** | |
59 * {@inheritdoc} | |
60 */ | |
61 public function execute($entity = NULL) { | |
62 /** @var \Drupal\node\NodeInterface $entity */ | |
63 $entity->setOwnerId($this->configuration['owner_uid'])->save(); | |
64 } | |
65 | |
66 /** | |
67 * {@inheritdoc} | |
68 */ | |
69 public function defaultConfiguration() { | |
70 return [ | |
71 'owner_uid' => '', | |
72 ]; | |
73 } | |
74 | |
75 /** | |
76 * {@inheritdoc} | |
77 */ | |
78 public function buildConfigurationForm(array $form, FormStateInterface $form_state) { | |
79 $description = t('The username of the user to which you would like to assign ownership.'); | |
80 $count = $this->connection->query("SELECT COUNT(*) FROM {users}")->fetchField(); | |
81 | |
82 // Use dropdown for fewer than 200 users; textbox for more than that. | |
83 if (intval($count) < 200) { | |
84 $options = []; | |
85 $result = $this->connection->query("SELECT uid, name FROM {users_field_data} WHERE uid > 0 AND default_langcode = 1 ORDER BY name"); | |
86 foreach ($result as $data) { | |
87 $options[$data->uid] = $data->name; | |
88 } | |
89 $form['owner_uid'] = [ | |
90 '#type' => 'select', | |
91 '#title' => t('Username'), | |
92 '#default_value' => $this->configuration['owner_uid'], | |
93 '#options' => $options, | |
94 '#description' => $description, | |
95 ]; | |
96 } | |
97 else { | |
98 $form['owner_uid'] = [ | |
99 '#type' => 'entity_autocomplete', | |
100 '#title' => t('Username'), | |
101 '#target_type' => 'user', | |
102 '#selection_setttings' => [ | |
103 'include_anonymous' => FALSE, | |
104 ], | |
105 '#default_value' => User::load($this->configuration['owner_uid']), | |
106 // Validation is done in static::validateConfigurationForm(). | |
107 '#validate_reference' => FALSE, | |
108 '#size' => '6', | |
109 '#maxlength' => '60', | |
110 '#description' => $description, | |
111 ]; | |
112 } | |
113 return $form; | |
114 } | |
115 | |
116 /** | |
117 * {@inheritdoc} | |
118 */ | |
119 public function validateConfigurationForm(array &$form, FormStateInterface $form_state) { | |
120 $exists = (bool) $this->connection->queryRange('SELECT 1 FROM {users_field_data} WHERE uid = :uid AND default_langcode = 1', 0, 1, [':uid' => $form_state->getValue('owner_uid')])->fetchField(); | |
121 if (!$exists) { | |
122 $form_state->setErrorByName('owner_uid', t('Enter a valid username.')); | |
123 } | |
124 } | |
125 | |
126 /** | |
127 * {@inheritdoc} | |
128 */ | |
129 public function submitConfigurationForm(array &$form, FormStateInterface $form_state) { | |
130 $this->configuration['owner_uid'] = $form_state->getValue('owner_uid'); | |
131 } | |
132 | |
133 /** | |
134 * {@inheritdoc} | |
135 */ | |
136 public function access($object, AccountInterface $account = NULL, $return_as_object = FALSE) { | |
137 /** @var \Drupal\node\NodeInterface $object */ | |
138 $result = $object->access('update', $account, TRUE) | |
139 ->andIf($object->getOwner()->access('edit', $account, TRUE)); | |
140 | |
141 return $return_as_object ? $result : $result->isAllowed(); | |
142 } | |
143 | |
144 } |