WorkflowRepository.php 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  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. foreach ($results as $key => &$result) {
  23. if (!in_array($class, $result->getSupport())) {
  24. unset($results[$key]);
  25. }
  26. }
  27. // No hay workflow enable y usedByDefault, busco los enable
  28. if (count($results) == 0) {
  29. $results = $this->createQueryBuilder('Workflow')
  30. ->where('Workflow.enable = :enable')->setParameter('enable', true)
  31. ->getQuery()->getResult();
  32. }
  33. foreach ($results as $key => &$result) {
  34. if (!in_array($class, $result->getSupport())) {
  35. unset($results[$key]);
  36. }
  37. }
  38. return $results;
  39. }
  40. /**
  41. * Retorna los workflow soportados por $class
  42. *
  43. * @param string $class
  44. *
  45. * @return array
  46. */
  47. public function findAllSupportedBy($class, $id = null)
  48. {
  49. $qb = $this->createQueryBuilder('Workflow')
  50. ->select('Workflow.id, Workflow.support');
  51. if ($id) {
  52. $qb->andWhere('Workflow.id <> :id')->setParameter('id', $id);
  53. }
  54. $results = $qb->getQuery()->getResult();
  55. foreach ($results as $key => &$result) {
  56. if (!in_array($class, $result['support'])) {
  57. unset($results[$key]);
  58. }
  59. }
  60. return array_map(function($result) {
  61. return $result['id'];
  62. }, $results);
  63. }
  64. }