annotate core/lib/Drupal/Core/Field/FieldUpdateActionBase.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\Core\Field;
Chris@0 4
Chris@0 5 use Drupal\Core\Action\ActionBase;
Chris@0 6 use Drupal\Core\Session\AccountInterface;
Chris@0 7
Chris@0 8 /**
Chris@0 9 * Provides a base for action plugins that update one or more fields.
Chris@0 10 *
Chris@0 11 * Example implementation:
Chris@0 12 *
Chris@0 13 * @code
Chris@0 14 * class PromoteAndMakeSticky extends FieldUpdateActionBase {
Chris@0 15 *
Chris@0 16 * protected function getFieldsToUpdate() {
Chris@0 17 * return [
Chris@0 18 * 'status' => NODE_PROMOTED,
Chris@0 19 * 'sticky' => NODE_STICKY,
Chris@0 20 * ];
Chris@0 21 * }
Chris@0 22 *
Chris@0 23 * }
Chris@0 24 * @endcode
Chris@0 25 *
Chris@0 26 * @see \Drupal\node\Plugin\Action\PublishNode
Chris@0 27 */
Chris@0 28 abstract class FieldUpdateActionBase extends ActionBase {
Chris@0 29
Chris@0 30 /**
Chris@0 31 * Gets an array of values to be set.
Chris@0 32 *
Chris@0 33 * @return array
Chris@0 34 * Array of values with field names as keys.
Chris@0 35 */
Chris@0 36 abstract protected function getFieldsToUpdate();
Chris@0 37
Chris@0 38 /**
Chris@0 39 * {@inheritdoc}
Chris@0 40 */
Chris@0 41 public function execute($entity = NULL) {
Chris@0 42 foreach ($this->getFieldsToUpdate() as $field => $value) {
Chris@0 43 $entity->$field = $value;
Chris@0 44 }
Chris@0 45 $entity->save();
Chris@0 46 }
Chris@0 47
Chris@0 48 /**
Chris@0 49 * {@inheritdoc}
Chris@0 50 */
Chris@0 51 public function access($object, AccountInterface $account = NULL, $return_as_object = FALSE) {
Chris@0 52 /** @var \Drupal\Core\Access\AccessResultInterface $result */
Chris@0 53 $result = $object->access('update', $account, TRUE);
Chris@0 54
Chris@0 55 foreach ($this->getFieldsToUpdate() as $field => $value) {
Chris@0 56 $result->andIf($object->{$field}->access('edit', $account, TRUE));
Chris@0 57 }
Chris@0 58
Chris@0 59 return $return_as_object ? $result : $result->isAllowed();
Chris@0 60 }
Chris@0 61
Chris@0 62 }