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;
+ }
+}