diff --git a/core/lib/Thelia/Config/Resources/config.xml b/core/lib/Thelia/Config/Resources/config.xml index a0b5ddfad..b3bb75fa3 100644 --- a/core/lib/Thelia/Config/Resources/config.xml +++ b/core/lib/Thelia/Config/Resources/config.xml @@ -4,14 +4,24 @@ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://thelia.net/schema/dic/config http://thelia.net/schema/dic/config/thelia-1.0.xsd"> - - - - + + + + + + + + + + @@ -55,17 +65,24 @@ - %tpex.loop% + %thelia.parser.loops% + + + + + + + + - diff --git a/core/lib/Thelia/Core/DependencyInjection/Loader/XmlFileLoader.php b/core/lib/Thelia/Core/DependencyInjection/Loader/XmlFileLoader.php index e4ba1501d..58c81a64a 100644 --- a/core/lib/Thelia/Core/DependencyInjection/Loader/XmlFileLoader.php +++ b/core/lib/Thelia/Core/DependencyInjection/Loader/XmlFileLoader.php @@ -57,9 +57,7 @@ class XmlFileLoader extends FileLoader $this->parseFilters($xml); - $this->parseBaseParams($xml); - - $this->parseTestLoops($xml); + $this->parseTemplateDirectives($xml); $this->parseParameters($xml); @@ -112,7 +110,7 @@ class XmlFileLoader extends FileLoader return; } try { - $loopConfig = $this->container->getParameter("Tpex.loop"); + $loopConfig = $this->container->getParameter("Thelia.parser.loops"); } catch (\Symfony\Component\DependencyInjection\Exception\ParameterNotFoundException $e) { $loopConfig = array(); } @@ -121,7 +119,7 @@ class XmlFileLoader extends FileLoader $loopConfig[$loop->getAttributeAsPhp("name")] = $loop->getAttributeAsPhp("class"); } - $this->container->setParameter("Tpex.loop", $loopConfig); + $this->container->setParameter("Thelia.parser.loops", $loopConfig); } /** @@ -135,7 +133,7 @@ class XmlFileLoader extends FileLoader return; } try { - $filterConfig = $this->container->getParameter("Tpex.filter"); + $filterConfig = $this->container->getParameter("Thelia.parser.filters"); } catch (\Symfony\Component\DependencyInjection\Exception\ParameterNotFoundException $e) { $filterConfig = array(); } @@ -144,7 +142,7 @@ class XmlFileLoader extends FileLoader $filterConfig[$filter->getAttributeAsPhp("name")] = $filter->getAttributeAsPhp("class"); } - $this->container->setParameter("Tpex.filter", $filterConfig); + $this->container->setParameter("Thelia.parser.filters", $filterConfig); } /** @@ -152,13 +150,13 @@ class XmlFileLoader extends FileLoader * * @param SimpleXMLElement $xml */ - protected function parseBaseParams(SimpleXMLElement $xml) + protected function parseTemplateDirectives(SimpleXMLElement $xml) { - if (false === $baseParams = $xml->xpath('//config:baseParams/config:baseParam')) { + if (false === $baseParams = $xml->xpath('//config:templateDirectives/config:templateDirective')) { return; } try { - $baseParamConfig = $this->container->getParameter("Tpex.baseParam"); + $baseParamConfig = $this->container->getParameter("Thelia.parser.templateDirectives"); } catch (\Symfony\Component\DependencyInjection\Exception\ParameterNotFoundException $e) { $baseParamConfig = array(); } @@ -167,30 +165,7 @@ class XmlFileLoader extends FileLoader $baseParamConfig[$baseParam->getAttributeAsPhp("name")] = $baseParam->getAttributeAsPhp("class"); } - $this->container->setParameter("Tpex.baseParam", $baseParamConfig); - } - - /** - * parse testLoops property - * - * @param SimpleXMLElement $xml - */ - protected function parseTestLoops(SimpleXMLElement $xml) - { - if (false === $testLoops = $xml->xpath('//config:testLoops/config:testLoop')) { - return; - } - try { - $baseParamConfig = $this->container->getParameter("Tpex.baseParam"); - } catch (\Symfony\Component\DependencyInjection\Exception\ParameterNotFoundException $e) { - $baseParamConfig = array(); - } - - foreach ($testLoops as $testLoop) { - $baseParamConfig[$testLoop->getAttributeAsPhp("name")] = $testLoop->getAttributeAsPhp("class"); - } - - $this->container->setParameter("Tpex.testLoop", $baseParamConfig); + $this->container->setParameter("Thelia.parser.templateDirectives", $baseParamConfig); } /** diff --git a/core/lib/Thelia/Core/DependencyInjection/Loader/schema/dic/config/thelia-1.0.xsd b/core/lib/Thelia/Core/DependencyInjection/Loader/schema/dic/config/thelia-1.0.xsd index 2c700a34e..33f563040 100644 --- a/core/lib/Thelia/Core/DependencyInjection/Loader/schema/dic/config/thelia-1.0.xsd +++ b/core/lib/Thelia/Core/DependencyInjection/Loader/schema/dic/config/thelia-1.0.xsd @@ -10,9 +10,8 @@ - - - + + @@ -55,7 +54,7 @@ - + @@ -66,7 +65,7 @@ - + @@ -76,34 +75,23 @@ - + - + - - - + + + - - - - - - - - - - - - + diff --git a/core/lib/Thelia/Core/Template/Smarty/Plugins/Module.php b/core/lib/Thelia/Core/Template/Smarty/Plugins/Module.php new file mode 100644 index 000000000..bf2a26ca9 --- /dev/null +++ b/core/lib/Thelia/Core/Template/Smarty/Plugins/Module.php @@ -0,0 +1,56 @@ +. */ +/* */ +/*************************************************************************************/ + +namespace Thelia\Core\Template\Smarty\Plugins; + + +use Thelia\Core\Template\Smarty\SmartyPluginDescriptor; +use Thelia\Core\Template\Smarty\SmartyPluginInterface; + +class Module implements SmartyPluginInterface { + + /** + * Process theliaModule template inclusion function + * + * @param unknown $params + * @param unknown $smarty + * @return string + */ + public function theliaModule($params, &$smarty) + { + // TODO + return ""; + } + + /** + * Define the various smarty plugins hendled by this class + * + * @return an array of smarty plugin descriptors + */ + public function getPluginDescriptors() + { + return array( + new SmartyPluginDescriptor('function', 'module_include', $this, 'theliaModule'), + ); + } +} \ No newline at end of file diff --git a/core/lib/Thelia/Core/Template/Smarty/Plugins/Translation.php b/core/lib/Thelia/Core/Template/Smarty/Plugins/Translation.php new file mode 100644 index 000000000..36e14b97a --- /dev/null +++ b/core/lib/Thelia/Core/Template/Smarty/Plugins/Translation.php @@ -0,0 +1,65 @@ +. */ +/* */ +/*************************************************************************************/ + +namespace Thelia\Core\Template\Smarty\Plugins; + + +use Thelia\Core\Template\Smarty\SmartyPluginDescriptor; +use Thelia\Core\Template\Smarty\SmartyPluginInterface; + +class Translation implements SmartyPluginInterface { + + + /** + * Process translate function + * + * @param unknown $params + * @param unknown $smarty + * @return string + */ + public function theliaTranslate($params, &$smarty) + { + if (isset($params['l'])) { + $string = str_replace('\'', '\\\'', $params['l']); + } + else { + $string = ''; + } + + // TODO + + return "[$string]"; + } + + /** + * Define the various smarty plugins hendled by this class + * + * @return an array of smarty plugin descriptors + */ + public function getPluginDescriptors() + { + return array( + new SmartyPluginDescriptor('function', 'intl', $this, 'theliaTranslate'), + ); + } +} \ No newline at end of file diff --git a/core/lib/Thelia/Core/Template/Smarty/SmartyParser.php b/core/lib/Thelia/Core/Template/Smarty/SmartyParser.php index ecf5b352c..86a5c3ada 100644 --- a/core/lib/Thelia/Core/Template/Smarty/SmartyParser.php +++ b/core/lib/Thelia/Core/Template/Smarty/SmartyParser.php @@ -61,12 +61,6 @@ class SmartyParser extends Smarty implements ParserInterface { // The default HTTP status $this->status = 200; - - // Register translation function 'intl' - $this->registerPlugin('function', 'intl', array($this, 'theliaTranslate')); - - // Register Thelia modules inclusion function 'thelia_module' - $this->registerPlugin('function', 'thelia_module', array($this, 'theliaModule')); } public function setTemplate($template_path_from_template_base) { @@ -94,41 +88,6 @@ class SmartyParser extends Smarty implements ParserInterface { return $this->fetch($realTemplateName); } - /** - * Process translate function - * - * @param unknown $params - * @param unknown $smarty - * @return string - */ - public function theliaTranslate($params, &$smarty) - { - if (isset($params['l'])) { - $string = str_replace('\'', '\\\'', $params['l']); - } - else { - $string = ''; - } - - // TODO - - return "[$string]"; - } - - - /** - * Process theliaModule template inclusion function - * - * @param unknown $params - * @param unknown $smarty - * @return string - */ - public function theliaModule($params, &$smarty) - { - // TODO - return ""; - } - /** * * This method must return a Symfony\Component\HttpFoudation\Response instance or the content of the response diff --git a/core/lib/Thelia/Core/Template/TPex/Parser.php b/core/lib/Thelia/Core/Template/TPex/Parser.php new file mode 100644 index 000000000..b30ca1b70 --- /dev/null +++ b/core/lib/Thelia/Core/Template/TPex/Parser.php @@ -0,0 +1,171 @@ +. */ +/* */ +/*************************************************************************************/ +namespace Thelia\Core\Template\TPex; + +use Symfony\Component\HttpFoundation\Response; +use Thelia\Core\Template\ParserInterface; +use Symfony\Component\DependencyInjection\ContainerInterface; +use Symfony\Component\HttpFoundation\Request; +use Symfony\Component\Routing\Exception\ResourceNotFoundException; +use Symfony\Component\Config\ConfigCache; + +use Thelia\Tpex\Tpex; +use Thelia\Log\Tlog; + +/** + * + * Master class of Thelia's parser. The loop mechanism depends of this parser + * + * From this class all the parser is lunch + * + * + * @author Manuel Raynaud + */ + + +class Parser implements ParserInterface +{ + const PREFIXE = 'prx'; + + const SHOW_TIME = true; + const ALLOW_DEBUG = true; + const USE_CACHE = true; + + + /** + * + * @var Symfony\Component\DependencyInjection\ContainerInterface + */ + protected $container; + + protected $content; + protected $status = 200; + + /** + * + * @var Thelia\Tpex\Tpex + */ + protected $tpex; + + protected $template = "default"; + + /** + * + * @param type $container + * + * public function __construct(ContainerBuilder $container) + */ + public function __construct(ContainerInterface $container) + { + $this->container = $container; + } + + /** + * + * @return Symfony\Component\HttpFoundation\Request + */ + public function getRequest() + { + return $this->container->get('request'); + } + + /** + * + * @return Symfony\Component\EventDispatcher\EventDispatcher + */ + public function getDispatcher() + { + return $this->container->get('dispatcher'); + } + + /** + * + * This method must return a Symfony\Component\HttpFoudation\Response instance or the content of the response + * + */ + public function getContent() + { + $this->loadParser(); + + return $this->content; + } + + /** + * + * set $content with the body of the response or the Response object directly + * + * @param string|Symfony\Component\HttpFoundation\Response $content + */ + public function setContent($content) + { + $this->content = $content; + } + + /** + * + * @return type the status of the response + */ + public function getStatus() + { + return $this->status; + } + + /** + * + * status HTTP of the response + * + * @param int $status + */ + public function setStatus($status) + { + $this->status = $status; + } + + /** + * Main parser function, load the parser + */ + public function loadParser() + { + $content = $this->openFile($this->getRequest()); + + $tpex = $this->container->get("template"); + + $tpex->setBaseDir(THELIA_TEMPLATE_DIR . rtrim($this->template, "/") . "/"); + $tpex->setContent($content); + + $this->setContent($tpex->execute()); + } + + protected function openFile(Request $request) + { + $file = $request->attributes->get('_view'); + $fileName = THELIA_TEMPLATE_DIR . rtrim($this->template, "/") . "/" . $file . ".html"; + if (file_exists($fileName)) { + $content = file_get_contents($fileName); + } else { + throw new ResourceNotFoundException(sprintf("%s file not found in %s template", $file, $this->template)); + } + + return $content; + } +}