WorkflowBaseAdmin.php 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. <?php
  2. namespace WorkflowBundle\Admin;
  3. use Base\AdminBundle\Admin\BaseAdmin;
  4. class WorkflowBaseAdmin extends BaseAdmin
  5. {
  6. /**
  7. * @return array
  8. */
  9. public function getBatchActions()
  10. {
  11. $actions = parent::getBatchActions();
  12. $workflows = array();
  13. $registry = $this->get('workflow.registry');
  14. $class = $this->getClass();
  15. $tmpEntity = new $class();
  16. try {
  17. $workflows = $this->getRepository('WorkflowBundle:Workflow')->findAllByClass($this->getClass());
  18. // No hay workflows en db, pruebo traer desde el workflow registry
  19. if (count($workflows) == 0) {
  20. $workflows[] = $registry->get($tmpEntity);
  21. }
  22. } catch (\Exception $ex) {
  23. // No hay workflows en db, pruebo traer desde el workflow registry
  24. // con los names definidos en el admin $batchWorkflows
  25. if (isset($this->batchWorkflows)) {
  26. foreach ($this->batchWorkflows as $name) {
  27. $workflows[] = $registry->get($tmpEntity, $name);
  28. }
  29. }
  30. }
  31. foreach ($workflows as $workflow) {
  32. $definition = method_exists($workflow, 'getSubject')
  33. ? $workflow->getDefinition($workflow->getSubject())
  34. : $workflow->getDefinition();
  35. $transitions = $definition ? $definition->getTransitions() : array();
  36. foreach ($transitions as $transition) {
  37. $label = $this->trans('workflow.' . $workflow->getName() . '.transitions.' . $transition->getName(), array(), 'WorkflowLabel');
  38. $label .= " ( {$transition->getName()} )";
  39. $actions[$transition->getName()] = array(
  40. 'label' => $label,
  41. 'ask_confirmation' => true,
  42. 'workflow' => array(
  43. 'name' => $workflow->getName(),
  44. 'transition' => $transition->getName(),
  45. ),
  46. );
  47. }
  48. }
  49. asort($actions);
  50. return $actions;
  51. }
  52. }