TemplateService.php 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146
  1. <?php
  2. namespace TemplateBundle\Services;
  3. use Base\AdminBundle\Controller\AuditReaderService;
  4. use Doctrine\ORM\EntityManagerInterface;
  5. use Doctrine\ORM\EntityRepository;
  6. use SimpleThings\EntityAudit\AuditReader;
  7. use TemplateBundle\Entity\Template;
  8. class TemplateService
  9. {
  10. const TEMPLATE_PATH = '/tmp/flowdat/templates';
  11. /**
  12. * @var EntityManagerInterface
  13. */
  14. private $entityManager;
  15. /**
  16. * @var AuditReaderService
  17. */
  18. private $auditReader;
  19. /**
  20. * @var EntityRepository
  21. */
  22. private $templateRepository;
  23. /**
  24. * @param EntityManagerInterface $entityManager
  25. * @param AuditReader $auditReader
  26. */
  27. public function __construct(EntityManagerInterface $entityManager, AuditReaderService $auditReader)
  28. {
  29. $this->entityManager = $entityManager;
  30. $this->auditReader = $auditReader;
  31. $this->templateRepository = $entityManager->getRepository('TemplateBundle:Template');
  32. }
  33. /**
  34. * @param string $name
  35. *
  36. * @return Template
  37. */
  38. public function getTemplateByName($name)
  39. {
  40. return $this->templateRepository->findOneByName($name);
  41. }
  42. /**
  43. * @param string $name
  44. * @param array $params
  45. * @param string $filename
  46. * @param string $engine
  47. *
  48. * @return string
  49. */
  50. public function renderTemplate($name, $params = array(), $filename = null, $engine = 'twig')
  51. {
  52. $content = null;
  53. $template = $this->getTemplateByName($name);
  54. $params = array('em' => $this->entityManager, 'baars' => $this->auditReader) + $params;
  55. if (!is_null($template)) {
  56. $content = $this->render($template, $params, $engine);
  57. var_dump($content);
  58. $filename = $this->createFile($content, $filename);
  59. } else {
  60. throw new \Exception("Template {$name} not found");
  61. }
  62. return $filename;
  63. }
  64. /**
  65. * @param Template $template
  66. * @param array $params
  67. * @param string $engine
  68. *
  69. * @return string
  70. */
  71. public function render($template, $params = array(), $engine = 'twig')
  72. {
  73. if ($engine == 'twig') {
  74. $loader = new \Twig_Loader_Array(array(
  75. $template->getName() => $template->getContent()
  76. ));
  77. $twig = new \Twig_Environment($loader, array(
  78. 'cache' => false,
  79. ));
  80. $content = $twig->render($template->getName(), $params);
  81. } elseif ($engine == 'dwoo') {
  82. $core = new \Dwoo\Core();
  83. $tpl = new \Dwoo\Template\Str($template->getContent());
  84. $data = new \Dwoo\Data();
  85. $data->setData($params);
  86. $content = $core->get($tpl, $data);
  87. } else {
  88. throw new \Exception("Invalid {$engine} engine value");
  89. }
  90. return $content;
  91. }
  92. /**
  93. * @param string $content
  94. * @param string $filename
  95. *
  96. * @return string
  97. */
  98. public function createFile($content, $filename = null)
  99. {
  100. if (is_null($filename)) {
  101. $filename = self::TEMPLATE_PATH . DIRECTORY_SEPARATOR . uniqid();
  102. }
  103. $pieces = explode(DIRECTORY_SEPARATOR, $filename);
  104. $file = array_pop($pieces);
  105. $dir = DIRECTORY_SEPARATOR . implode(DIRECTORY_SEPARATOR, $pieces);
  106. if (!file_exists($dir)) {
  107. mkdir($dir, 0777, true);
  108. }
  109. file_put_contents($dir . DIRECTORY_SEPARATOR . $file, $content);
  110. return $filename;
  111. }
  112. /**
  113. * Retorna si encuentra un template en la db con nombre = $name
  114. *
  115. * @param string $name
  116. *
  117. * @return boolean
  118. */
  119. public function exists($name)
  120. {
  121. $template = $this->getTemplateByName($name);
  122. return !is_null($template);
  123. }
  124. }