Chris@0: NODE_PROMOTED, Chris@0: * 'sticky' => NODE_STICKY, Chris@0: * ]; Chris@0: * } Chris@0: * Chris@0: * } Chris@0: * @endcode Chris@0: * Chris@0: * @see \Drupal\node\Plugin\Action\PublishNode Chris@0: */ Chris@0: abstract class FieldUpdateActionBase extends ActionBase { Chris@0: Chris@0: /** Chris@0: * Gets an array of values to be set. Chris@0: * Chris@0: * @return array Chris@0: * Array of values with field names as keys. Chris@0: */ Chris@0: abstract protected function getFieldsToUpdate(); Chris@0: Chris@0: /** Chris@0: * {@inheritdoc} Chris@0: */ Chris@0: public function execute($entity = NULL) { Chris@0: foreach ($this->getFieldsToUpdate() as $field => $value) { Chris@0: $entity->$field = $value; Chris@0: } Chris@0: $entity->save(); 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\Core\Access\AccessResultInterface $result */ Chris@0: $result = $object->access('update', $account, TRUE); Chris@0: Chris@0: foreach ($this->getFieldsToUpdate() as $field => $value) { Chris@0: $result->andIf($object->{$field}->access('edit', $account, TRUE)); Chris@0: } Chris@0: Chris@0: return $return_as_object ? $result : $result->isAllowed(); Chris@0: } Chris@0: Chris@0: }