WorkflowExtension.php 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. <?php
  2. namespace WorkflowBundle\Twig;
  3. use Symfony\Component\Workflow\Registry;
  4. use Symfony\Component\Translation\DataCollectorTranslator as Translator;
  5. class WorkflowExtension extends \Twig_Extension
  6. {
  7. private $workflowRegistry;
  8. private $translator;
  9. public function __construct(Registry $workflowRegistry, Translator $translator)
  10. {
  11. $this->workflowRegistry = $workflowRegistry;
  12. $this->translator = $translator;
  13. }
  14. public function getFunctions()
  15. {
  16. return array(
  17. new \Twig_SimpleFunction('workflow_can', array($this, 'canTransition')),
  18. new \Twig_SimpleFunction('workflow_transitions', array($this, 'getEnabledTransitions')),
  19. new \Twig_SimpleFunction('workflow_correct_state', array($this, 'isCorrectState')),
  20. new \Twig_SimpleFunction('get_class', array($this, 'getClass')),
  21. new \Twig_SimpleFunction('workflow_translate_label', array($this, 'getLabelTranslate'))
  22. );
  23. }
  24. public function isCorrectState($object, $name = null)
  25. {
  26. try {
  27. $places = $this->workflowRegistry->get($object, $name)->getDefinition()->getPlaces();
  28. } catch (\Exception $e) {
  29. $places = array();
  30. }
  31. $state = $object->getCurrentState();
  32. if(is_null($state)) return false;
  33. if(isset($places[$state])) return true;
  34. return false;
  35. }
  36. public function canTransition($object, $transition, $name = null)
  37. {
  38. return $this->workflowRegistry->get($object, $name)->can($object, $transition);
  39. }
  40. public function getEnabledTransitions($object, $name = null)
  41. {
  42. try {
  43. $return = $this->workflowRegistry->get($object, $name)->getEnabledTransitions($object);
  44. } catch (\Exception $e) {
  45. $return = array();
  46. }
  47. return $return;
  48. }
  49. public function getName()
  50. {
  51. return 'workflow';
  52. }
  53. public function getClass($object)
  54. {
  55. return get_class($object);
  56. }
  57. public function getLabelTranslate($label, $alternative, $params = null, $resource = "WorkflowLabel")
  58. {
  59. if(is_null($params)) $params = array();
  60. $trans = $this->translator->trans($label,$params,$resource);
  61. if($trans == $label) {
  62. return $alternative;
  63. }
  64. return $trans;
  65. }
  66. }