WorkflowRepository.php 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. <?php
  2. namespace WorkflowBundle\Repository;
  3. use \Doctrine\ORM\EntityRepository;
  4. class WorkflowRepository extends EntityRepository
  5. {
  6. /**
  7. * Retorna los workflow habilitados (enable=true) y
  8. * que estén por defecto (usedByDefault=true) según la clase
  9. * si no encuentra, retorna los habilitados
  10. *
  11. * @param string $class
  12. *
  13. * @return array
  14. */
  15. public function findAllByClass($class)
  16. {
  17. $results = $this->createQueryBuilder('Workflow')
  18. ->where('Workflow.enable = :enable')->setParameter('enable', true)
  19. ->andWhere('Workflow.usedByDefault = :usedByDefault')
  20. ->setParameter('usedByDefault', true)
  21. ->getQuery()->getResult();
  22. // No hay workflow enable y usedByDefault, busco los enable
  23. if (count($results) == 0) {
  24. $results = $this->createQueryBuilder('Workflow')
  25. ->where('Workflow.enable = :enable')->setParameter('enable', true)
  26. ->getQuery()->getResult();
  27. }
  28. foreach ($results as $key => &$result) {
  29. if (!in_array($class, $result->getSupport())) {
  30. unset($results[$key]);
  31. }
  32. }
  33. return $results;
  34. }
  35. /**
  36. * Retorna los workflow soportados por $class
  37. *
  38. * @param string $class
  39. *
  40. * @return array
  41. */
  42. public function findAllSupportedBy($class, $id = null)
  43. {
  44. $qb = $this->createQueryBuilder('Workflow')
  45. ->select('Workflow.id, Workflow.support');
  46. if ($id) {
  47. $qb->andWhere('Workflow.id <> :id')->setParameter('id', $id);
  48. }
  49. $results = $qb->getQuery()->getResult();
  50. foreach ($results as $key => &$result) {
  51. if (!in_array($class, $result['support'])) {
  52. unset($results[$key]);
  53. }
  54. }
  55. return array_map(function($result) {
  56. return $result['id'];
  57. }, $results);
  58. }
  59. }