123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146 |
- <?php
- namespace TemplateBundle\Services;
- use Base\AdminBundle\Controller\AuditReaderService;
- use Doctrine\ORM\EntityManagerInterface;
- use Doctrine\ORM\EntityRepository;
- use SimpleThings\EntityAudit\AuditReader;
- use TemplateBundle\Entity\Template;
- class TemplateService
- {
- const TEMPLATE_PATH = '/tmp/flowdat/templates';
- /**
- * @var EntityManagerInterface
- */
- private $entityManager;
- /**
- * @var AuditReaderService
- */
- private $auditReader;
- /**
- * @var EntityRepository
- */
- private $templateRepository;
- /**
- * @param EntityManagerInterface $entityManager
- * @param AuditReader $auditReader
- */
- public function __construct(EntityManagerInterface $entityManager, AuditReaderService $auditReader)
- {
- $this->entityManager = $entityManager;
- $this->auditReader = $auditReader;
- $this->templateRepository = $entityManager->getRepository('TemplateBundle:Template');
- }
- /**
- * @param string $name
- *
- * @return Template
- */
- public function getTemplateByName($name)
- {
- return $this->templateRepository->findOneByName($name);
- }
- /**
- * @param string $name
- * @param array $params
- * @param string $filename
- * @param string $engine
- *
- * @return string
- */
- public function renderTemplate($name, $params = array(), $filename = null, $engine = 'twig')
- {
- $content = null;
- $template = $this->getTemplateByName($name);
- $params = array('em' => $this->entityManager, 'baars' => $this->auditReader) + $params;
- if (!is_null($template)) {
- $content = $this->render($template, $params, $engine);
- var_dump($content);
- $filename = $this->createFile($content, $filename);
- } else {
- throw new \Exception("Template {$name} not found");
- }
- return $filename;
- }
- /**
- * @param Template $template
- * @param array $params
- * @param string $engine
- *
- * @return string
- */
- public function render($template, $params = array(), $engine = 'twig')
- {
- if ($engine == 'twig') {
- $loader = new \Twig_Loader_Array(array(
- $template->getName() => $template->getContent()
- ));
- $twig = new \Twig_Environment($loader, array(
- 'cache' => false,
- ));
- $content = $twig->render($template->getName(), $params);
- } elseif ($engine == 'dwoo') {
- $core = new \Dwoo\Core();
- $tpl = new \Dwoo\Template\Str($template->getContent());
- $data = new \Dwoo\Data();
- $data->setData($params);
- $content = $core->get($tpl, $data);
- } else {
- throw new \Exception("Invalid {$engine} engine value");
- }
- return $content;
- }
- /**
- * @param string $content
- * @param string $filename
- *
- * @return string
- */
- public function createFile($content, $filename = null)
- {
- if (is_null($filename)) {
- $filename = self::TEMPLATE_PATH . DIRECTORY_SEPARATOR . uniqid();
- }
- $pieces = explode(DIRECTORY_SEPARATOR, $filename);
- $file = array_pop($pieces);
- $dir = DIRECTORY_SEPARATOR . implode(DIRECTORY_SEPARATOR, $pieces);
- if (!file_exists($dir)) {
- mkdir($dir, 0777, true);
- }
- file_put_contents($dir . DIRECTORY_SEPARATOR . $file, $content);
- return $filename;
- }
-
- /**
- * Retorna si encuentra un template en la db con nombre = $name
- *
- * @param string $name
- *
- * @return boolean
- */
- public function exists($name)
- {
- $template = $this->getTemplateByName($name);
-
- return !is_null($template);
- }
- }
|