getTypePlugin(); $missing_states = array_diff($workflow_type->getRequiredStates(), array_keys($this->getTypePlugin()->getStates())); if (!empty($missing_states)) { throw new RequiredStateMissingException(sprintf("Workflow type '{$workflow_type->label()}' requires states with the ID '%s' in workflow '{$this->id()}'", implode("', '", $missing_states))); } parent::preSave($storage); } /** * {@inheritdoc} */ public function getTypePlugin() { return $this->getPluginCollection()->get($this->type); } /** * {@inheritdoc} */ public function getPluginCollections() { return ['type_settings' => $this->getPluginCollection()]; } /** * Encapsulates the creation of the workflow's plugin collection. * * @return \Drupal\Core\Plugin\DefaultSingleLazyPluginCollection * The workflow's plugin collection. */ protected function getPluginCollection() { if (!$this->pluginCollection && $this->type) { $this->pluginCollection = new DefaultSingleLazyPluginCollection(\Drupal::service('plugin.manager.workflows.type'), $this->type, $this->type_settings); } return $this->pluginCollection; } /** * Loads all workflows of the provided type. * * @param string $type * The workflow type to load all workflows for. * * @return static[] * An array of workflow objects of the provided workflow type, indexed by * their IDs. * * @see \Drupal\workflows\Annotation\WorkflowType */ public static function loadMultipleByType($type) { return self::loadMultiple(\Drupal::entityQuery('workflow')->condition('type', $type)->execute()); } /** * {@inheritdoc} */ public function status() { // In order for a workflow to be usable it must have at least one state. return !empty($this->status) && !empty($this->getTypePlugin()->getStates()); } /** * {@inheritdoc} */ public function onDependencyRemoval(array $dependencies) { // Give the parent method and the workflow type plugin a chance to react // to removed dependencies and report if either of these two made a change. $parent_changed_entity = parent::onDependencyRemoval($dependencies); $plugin_changed_entity = $this->getTypePlugin()->onDependencyRemoval($dependencies); return $plugin_changed_entity || $parent_changed_entity; } }