* * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see . */ namespace Chill\TaskBundle\Workflow\Definition; use Chill\TaskBundle\Entity\AbstractTask; use Chill\TaskBundle\Entity\SingleTask; use Symfony\Component\Workflow\Transition; /** * * * @author Julien Fastré */ class DefaultTaskDefinition implements \Chill\TaskBundle\Workflow\TaskWorkflowDefinition { const TRANSITION_METADATA = [ 'close' => [ 'verb' => 'close', 'background-color' => 'var(--yellow)', // css variable, see https://developer.mozilla.org/fr/docs/Web/CSS/Les_variables_CSS 'text-color' => 'black' ], 'cancel' => [ 'verb' => 'cancel', 'background-color' => 'var(--red)', // css variable, see https://developer.mozilla.org/fr/docs/Web/CSS/Les_variables_CSS 'text-color' => 'black' ], 'start' => [ 'verb' => 'start', 'background-color' => 'var(--green)', // css variable, see https://developer.mozilla.org/fr/docs/Web/CSS/Les_variables_CSS 'text-color' => 'black' ] ]; public function supports(AbstractTask $task) { return $task instanceof SingleTask && $task->getType() === 'task_default'; } public function getAssociatedWorkflowName() { return 'task_default'; } public function getWorkflowMetadata( string $key, $metadataSubject = null ) { $keys = \explode('.', $key); switch($keys[0]) { case 'transition': if (!$metadataSubject instanceof Transition) { throw new \LogicException("You must give a transition as metadatasubject"); } return $this->getTransitionMetadata(\implode('.', \array_slice($keys, 1)), $metadataSubject); default: throw new \LogicException("this key '$key' is not implemented"); } } protected function getTransitionMetadata($key, Transition $transition) { if (!\array_key_exists($transition->getName(), self::TRANSITION_METADATA)) { throw new \LogicException("the metadata for this transition are not defined"); } if (!\array_key_exists($key, self::TRANSITION_METADATA[$transition->getName()])) { throw new \LogicException("The metadata ".$key." is not " . "defined for the transition ".$transition.getName()); } return self::TRANSITION_METADATA[$transition->getName()][$key]; } }