em = $em; $this->registry = $registry; } public function fetchQuery($context, $args) { if ('task' !== $context) { throw new LogicException(sprintf('%s is not able ' . 'to render context %s', self::class, $context)); } $metadata = $this->em ->getClassMetadata(SingleTaskPlaceEvent::class); $singleTaskMetadata = $this->em ->getClassMetadata(SingleTask::class); return TimelineSingleQuery::fromArray([ 'id' => sprintf('%s.%s.%s', $metadata->getSchemaName(), $metadata->getTableName(), $metadata->getColumnName('id')), 'type' => self::TYPE, 'date' => $metadata->getColumnName('datetime'), 'FROM' => sprintf( '%s JOIN %s ON %s = %s', sprintf('%s.%s', $metadata->getSchemaName(), $metadata->getTableName()), sprintf('%s.%s', $singleTaskMetadata->getSchemaName(), $singleTaskMetadata->getTableName()), $metadata->getAssociationMapping('task')['joinColumns'][0]['name'], sprintf('%s.%s.%s', $singleTaskMetadata->getSchemaName(), $singleTaskMetadata->getTableName(), $singleTaskMetadata->getColumnName('id')) ), 'WHERE' => sprintf( '%s.%s = %d', sprintf('%s.%s', $singleTaskMetadata->getSchemaName(), $singleTaskMetadata->getTableName()), $singleTaskMetadata->getColumnName('id'), $args['task']->getId() ), 'parameters' => [], ]); } public function getEntities(array $ids) { $events = $this->em ->getRepository(SingleTaskPlaceEvent::class) ->findBy(['id' => $ids]); return array_combine( array_map(static function ($e) { return $e->getId(); }, $events), $events ); } public function getEntityTemplate($entity, $context, array $args) { if (isset($entity->getData()['workflow'])) { $workflow = $this->registry->get($entity->getTask(), $entity->getData()['workflow']); $transition = $this->getTransitionByName($entity->getTransition(), $workflow); } return [ 'template' => 'ChillTaskBundle:Timeline:single_task_transition_task_context.html.twig', 'template_data' => [ 'task' => $args['task'], 'event' => $entity, 'transition' => $transition ?? null, ], ]; } public function supportsType($type): bool { return self::TYPE === $type; } /** * @param string $name * * @return \Symfony\Component\Workflow\Transition */ protected function getTransitionByName($name, Workflow $workflow) { foreach ($workflow->getDefinition()->getTransitions() as $transition) { if ($transition->getName() === $name) { return $transition; } } } }