diff --git a/core/lib/Thelia/Core/DependencyInjection/Loader/XmlFileLoader.php b/core/lib/Thelia/Core/DependencyInjection/Loader/XmlFileLoader.php
index baae8c487..8de39f095 100755
--- a/core/lib/Thelia/Core/DependencyInjection/Loader/XmlFileLoader.php
+++ b/core/lib/Thelia/Core/DependencyInjection/Loader/XmlFileLoader.php
@@ -137,7 +137,7 @@ class XmlFileLoader extends FileLoader
}
foreach ($forms as $form) {
- $formConfig[$form->getAttributeAsPhp('name')] = $formConfig->getAttributeAsPhp('class');
+ $formConfig[$form->getAttributeAsPhp('name')] = $form->getAttributeAsPhp('class');
}
$this->container->setParameter('Thelia.parser.forms', $formConfig);
diff --git a/core/lib/Thelia/Core/Template/Smarty/Plugins/Form.php b/core/lib/Thelia/Core/Template/Smarty/Plugins/Form.php
index c994d9cfa..f9f488c3c 100644
--- a/core/lib/Thelia/Core/Template/Smarty/Plugins/Form.php
+++ b/core/lib/Thelia/Core/Template/Smarty/Plugins/Form.php
@@ -22,6 +22,8 @@
/*************************************************************************************/
namespace Thelia\Core\Template\Smarty\Plugins;
+use Thelia\Form\BaseForm;
+use Thelia\Core\Template\Element\Exception\ElementNotFoundException;
use Symfony\Component\HttpFoundation\Request;
use Thelia\Core\Template\Smarty\SmartyPluginDescriptor;
use Thelia\Core\Template\Smarty\SmartyPluginInterface;
@@ -30,11 +32,13 @@ class Form implements SmartyPluginInterface
{
protected $request;
+ protected $form;
protected $formDefinition = array();
public function __construct(Request $request)
{
$this->request = $request;
+
}
public function setFormDefinition($formDefinition)
@@ -51,7 +55,29 @@ class Form implements SmartyPluginInterface
public function generateForm($params, $content, $template, &$repeat)
{
+ if (empty($params['name'])) {
+ throw new \InvalidArgumentException("Missing 'name' parameter in form arguments");
+ }
+ $form = new BaseForm($this->request);
+ $formBuilder = $form->getFormBuilder()->createBuilder();
+
+ $instance = $this->getInstance($params['name']);
+ $instance = $instance->buildForm($formBuilder, array());
+
+ var_dump($instance->getForm()->createView()); exit;
+ $template->assign("form", $instance->getForm()->createView());
+
+ }
+
+ public function getInstance($name)
+ {
+ if (!isset($this->formDefinition[$name])) {
+ throw new ElementNotFoundException(sprintf("%s form does not exists", $name));
+ }
+
+
+ return new $this->formDefinition[$name];
}
/**
diff --git a/core/lib/Thelia/Form/BaseForm.php b/core/lib/Thelia/Form/BaseForm.php
new file mode 100644
index 000000000..e16106c1b
--- /dev/null
+++ b/core/lib/Thelia/Form/BaseForm.php
@@ -0,0 +1,59 @@
+. */
+/* */
+/*************************************************************************************/
+namespace Thelia\Form;
+
+use Symfony\Component\Form\Forms;
+use Symfony\Component\HttpFoundation\Session\Session;
+use Symfony\Component\HttpFoundation\Request;
+use Symfony\Component\Form\Extension\HttpFoundation\HttpFoundationExtension;
+use Symfony\Component\Form\Extension\Csrf\CsrfExtension;
+use Symfony\Component\Form\Extension\Csrf\CsrfProvider\SessionCsrfProvider;
+use Thelia\Model\ConfigQuery;
+
+class BaseForm {
+
+ protected $request;
+
+ public function __construct(Request $request)
+ {
+ $this->request = $request;
+ }
+
+
+ public function getFormBuilder()
+ {
+ $form = Forms::createFormFactoryBuilder()
+ ->addExtension(new HttpFoundationExtension())
+ ->addExtension(
+ new CsrfExtension(
+ new SessionCsrfProvider(
+ $this->request->getSession(),
+ ConfigQuery::read("form.secret", md5(__DIR__))
+ )
+ )
+ )->getFormFactory();
+
+ return $form;
+ }
+}
+
diff --git a/core/lib/Thelia/Form/CustomerCreation.php b/core/lib/Thelia/Form/CustomerCreation.php
index e160702d5..4c70a0177 100644
--- a/core/lib/Thelia/Form/CustomerCreation.php
+++ b/core/lib/Thelia/Form/CustomerCreation.php
@@ -20,6 +20,29 @@
/* along with this program. If not, see