Chris@0: connection = $connection; Chris@0: } Chris@0: Chris@0: /** Chris@0: * {@inheritdoc} Chris@0: */ Chris@0: public static function create(ContainerInterface $container, array $configuration, $plugin_id, $plugin_definition) { Chris@0: return new static($configuration, $plugin_id, $plugin_definition, Chris@0: $container->get('database') Chris@0: ); Chris@0: } Chris@0: Chris@0: /** Chris@0: * {@inheritdoc} Chris@0: */ Chris@0: public function execute($entity = NULL) { Chris@0: /** @var \Drupal\node\NodeInterface $entity */ Chris@0: $entity->setOwnerId($this->configuration['owner_uid'])->save(); Chris@0: } Chris@0: Chris@0: /** Chris@0: * {@inheritdoc} Chris@0: */ Chris@0: public function defaultConfiguration() { Chris@0: return [ Chris@0: 'owner_uid' => '', Chris@0: ]; Chris@0: } Chris@0: Chris@0: /** Chris@0: * {@inheritdoc} Chris@0: */ Chris@0: public function buildConfigurationForm(array $form, FormStateInterface $form_state) { Chris@0: $description = t('The username of the user to which you would like to assign ownership.'); Chris@0: $count = $this->connection->query("SELECT COUNT(*) FROM {users}")->fetchField(); Chris@0: Chris@0: // Use dropdown for fewer than 200 users; textbox for more than that. Chris@0: if (intval($count) < 200) { Chris@0: $options = []; Chris@0: $result = $this->connection->query("SELECT uid, name FROM {users_field_data} WHERE uid > 0 AND default_langcode = 1 ORDER BY name"); Chris@0: foreach ($result as $data) { Chris@0: $options[$data->uid] = $data->name; Chris@0: } Chris@0: $form['owner_uid'] = [ Chris@0: '#type' => 'select', Chris@0: '#title' => t('Username'), Chris@0: '#default_value' => $this->configuration['owner_uid'], Chris@0: '#options' => $options, Chris@0: '#description' => $description, Chris@0: ]; Chris@0: } Chris@0: else { Chris@0: $form['owner_uid'] = [ Chris@0: '#type' => 'entity_autocomplete', Chris@0: '#title' => t('Username'), Chris@0: '#target_type' => 'user', Chris@0: '#selection_setttings' => [ Chris@0: 'include_anonymous' => FALSE, Chris@0: ], Chris@0: '#default_value' => User::load($this->configuration['owner_uid']), Chris@0: // Validation is done in static::validateConfigurationForm(). Chris@0: '#validate_reference' => FALSE, Chris@0: '#size' => '6', Chris@0: '#maxlength' => '60', Chris@0: '#description' => $description, Chris@0: ]; Chris@0: } Chris@0: return $form; Chris@0: } Chris@0: Chris@0: /** Chris@0: * {@inheritdoc} Chris@0: */ Chris@0: public function validateConfigurationForm(array &$form, FormStateInterface $form_state) { Chris@0: $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(); Chris@0: if (!$exists) { Chris@0: $form_state->setErrorByName('owner_uid', t('Enter a valid username.')); Chris@0: } Chris@0: } Chris@0: Chris@0: /** Chris@0: * {@inheritdoc} Chris@0: */ Chris@0: public function submitConfigurationForm(array &$form, FormStateInterface $form_state) { Chris@0: $this->configuration['owner_uid'] = $form_state->getValue('owner_uid'); Chris@0: } Chris@0: Chris@0: /** Chris@0: * {@inheritdoc} Chris@0: */ Chris@0: public function access($object, AccountInterface $account = NULL, $return_as_object = FALSE) { Chris@0: /** @var \Drupal\node\NodeInterface $object */ Chris@0: $result = $object->access('update', $account, TRUE) Chris@0: ->andIf($object->getOwner()->access('edit', $account, TRUE)); Chris@0: Chris@0: return $return_as_object ? $result : $result->isAllowed(); Chris@0: } Chris@0: Chris@0: }