diff --git a/core/lib/Thelia/Action/Lang.php b/core/lib/Thelia/Action/Lang.php
index da5a07197..1c74da3bd 100644
--- a/core/lib/Thelia/Action/Lang.php
+++ b/core/lib/Thelia/Action/Lang.php
@@ -29,6 +29,7 @@ use Thelia\Core\Event\Lang\LangDeleteEvent;
use Thelia\Core\Event\Lang\LangToggleDefaultEvent;
use Thelia\Core\Event\Lang\LangUpdateEvent;
use Thelia\Core\Event\TheliaEvents;
+use Thelia\Form\Lang\LangUrlEvent;
use Thelia\Model\ConfigQuery;
use Thelia\Model\LangQuery;
use Thelia\Model\Lang as LangModel;
@@ -102,6 +103,15 @@ class Lang extends BaseAction implements EventSubscriberInterface
->update(array('Value' => $event->getDefaultBehavior()));
}
+ public function langUrl(LangUrlEvent $event)
+ {
+ foreach($event->getUrl() as $id => $url){
+ LangQuery::create()
+ ->filterById($id)
+ ->update(array('Url' => $url));
+ }
+ }
+
/**
* Returns an array of event names this subscriber wants to listen to.
*
@@ -129,7 +139,8 @@ class Lang extends BaseAction implements EventSubscriberInterface
TheliaEvents::LANG_TOGGLEDEFAULT => array('toggleDefault', 128),
TheliaEvents::LANG_CREATE => array('create', 128),
TheliaEvents::LANG_DELETE => array('delete', 128),
- TheliaEvents::LANG_DEFAULTBEHAVIOR => array('defaultBehavior', 128)
+ TheliaEvents::LANG_DEFAULTBEHAVIOR => array('defaultBehavior', 128),
+ TheliaEvents::LANG_URL => array('langUrl', 128)
);
}
}
\ No newline at end of file
diff --git a/core/lib/Thelia/Config/Resources/config.xml b/core/lib/Thelia/Config/Resources/config.xml
index 69874762a..06f2acf48 100755
--- a/core/lib/Thelia/Config/Resources/config.xml
+++ b/core/lib/Thelia/Config/Resources/config.xml
@@ -156,6 +156,7 @@
+
diff --git a/core/lib/Thelia/Config/Resources/routing/admin.xml b/core/lib/Thelia/Config/Resources/routing/admin.xml
index d6c46af78..8a6037844 100755
--- a/core/lib/Thelia/Config/Resources/routing/admin.xml
+++ b/core/lib/Thelia/Config/Resources/routing/admin.xml
@@ -966,6 +966,17 @@
Thelia\Controller\Admin\LangController::defaultBehaviorAction
+
+ Thelia\Controller\Admin\LangController::domainAction
+
+
+
+ Thelia\Controller\Admin\LangController::activateDomainAction
+
+
+
+ Thelia\Controller\Admin\LangController::deactivateDomainAction
+
diff --git a/core/lib/Thelia/Controller/Admin/LangController.php b/core/lib/Thelia/Controller/Admin/LangController.php
index 0b882579a..9b6074955 100644
--- a/core/lib/Thelia/Controller/Admin/LangController.php
+++ b/core/lib/Thelia/Controller/Admin/LangController.php
@@ -36,6 +36,8 @@ use Thelia\Form\Exception\FormValidationException;
use Thelia\Form\Lang\LangCreateForm;
use Thelia\Form\Lang\LangDefaultBehaviorForm;
use Thelia\Form\Lang\LangUpdateForm;
+use Thelia\Form\Lang\LangUrlEvent;
+use Thelia\Form\Lang\LangUrlForm;
use Thelia\Model\ConfigQuery;
use Thelia\Model\LangQuery;
@@ -57,6 +59,13 @@ class LangController extends BaseAdminController
public function renderDefault(array $param = array())
{
+ $data = array();
+ foreach (LangQuery::create()->find() as $lang) {
+ $data[LangUrlForm::LANG_PREFIX.$lang->getId()] = $lang->getUrl();
+ }
+ $langUrlForm = new LangUrlForm($this->getRequest(), 'form', $data);
+ $this->getParserContext()->addForm($langUrlForm);
+
return $this->render('languages', array_merge($param, array(
'lang_without_translation' => ConfigQuery::getDefaultLangWhenNoTranslationAvailable(),
'one_domain_per_lang' => ConfigQuery::read("one_domain_foreach_lang", false)
@@ -231,7 +240,6 @@ class LangController extends BaseAdminController
if (null !== $response = $this->checkAuth(AdminResources::LANGUAGE, AccessManager::UPDATE)) return $response;
$error_msg = false;
- $exception = false;
$behaviorForm = new LangDefaultBehaviorForm($this->getRequest());
@@ -258,4 +266,64 @@ class LangController extends BaseAdminController
// At this point, the form has error, and should be redisplayed.
return $this->renderDefault();
}
+
+ public function domainAction()
+ {
+ if (null !== $response = $this->checkAuth(AdminResources::LANGUAGE, AccessManager::UPDATE)) return $response;
+
+ $error_msg = false;
+ $langUrlForm = new LangUrlForm($this->getRequest());
+
+ try {
+ $form = $this->validateForm($langUrlForm);
+
+ $data = $form->getData();
+ $event = new LangUrlEvent();
+ foreach ($data as $key => $value) {
+ $pos= strpos($key, LangUrlForm::LANG_PREFIX);
+ if(false !== strpos($key, LangUrlForm::LANG_PREFIX)) {
+ $event->addUrl(substr($key,strlen(LangUrlForm::LANG_PREFIX)), $value);
+ }
+ }
+
+ $this->dispatch(TheliaEvents::LANG_URL, $event);
+
+ $this->redirectToRoute('admin.configuration.languages');
+ } catch (FormValidationException $ex) {
+ // Form cannot be validated
+ $error_msg = $this->createStandardFormValidationErrorMessage($ex);
+ } catch (\Exception $ex) {
+ // Any other error
+ $error_msg = $ex->getMessage();
+ }
+
+ $this->setupFormErrorContext(
+ $this->getTranslator()->trans("%obj creation", array('%obj' => 'Lang')), $error_msg, $langUrlForm, $ex);
+
+ // At this point, the form has error, and should be redisplayed.
+ return $this->renderDefault();
+ }
+
+ public function activateDomainAction()
+ {
+ $this->domainActivation(1);
+ }
+
+ public function deactivateDomainAction()
+ {
+ $this->domainActivation(0);
+ }
+
+ private function domainActivation($activate)
+ {
+ if (null !== $response = $this->checkAuth(AdminResources::LANGUAGE, AccessManager::UPDATE)) return $response;
+
+ $error_msg = false;
+
+ ConfigQuery::create()
+ ->filterByName('one_domain_foreach_lang')
+ ->update(array('Value' => $activate));
+
+ $this->redirectToRoute('admin.configuration.languages');
+ }
}
\ No newline at end of file
diff --git a/core/lib/Thelia/Core/Event/TheliaEvents.php b/core/lib/Thelia/Core/Event/TheliaEvents.php
index 22e5a1841..8327cc3c3 100755
--- a/core/lib/Thelia/Core/Event/TheliaEvents.php
+++ b/core/lib/Thelia/Core/Event/TheliaEvents.php
@@ -697,20 +697,21 @@ final class TheliaEvents
/************ LANG MANAGEMENT ****************************/
- const LANG_UPDATE = 'action.lang.update';
- const LANG_CREATE = 'action.lang.create';
- const LANG_DELETE = 'action.lang.delete';
+ const LANG_UPDATE = 'action.lang.update';
+ const LANG_CREATE = 'action.lang.create';
+ const LANG_DELETE = 'action.lang.delete';
- const LANG_DEFAULTBEHAVIOR = 'action.lang.defaultBehavior';
+ const LANG_DEFAULTBEHAVIOR = 'action.lang.defaultBehavior';
+ const LANG_URL = 'action.lang.url';
- const LANG_TOGGLEDEFAULT = 'action.lang.toggleDefault';
+ const LANG_TOGGLEDEFAULT = 'action.lang.toggleDefault';
- const BEFORE_UPDATELANG = 'action.lang.beforeUpdate';
- const AFTER_UPDATELANG = 'action.lang.afterUpdate';
+ const BEFORE_UPDATELANG = 'action.lang.beforeUpdate';
+ const AFTER_UPDATELANG = 'action.lang.afterUpdate';
- const BEFORE_CREATELANG = 'action.lang.beforeCreate';
- const AFTER_CREATELANG = 'action.lang.afterCreate';
+ const BEFORE_CREATELANG = 'action.lang.beforeCreate';
+ const AFTER_CREATELANG = 'action.lang.afterCreate';
- const BEFORE_DELETELANG = 'action.lang.beforeDelete';
- const AFTER_DELETELANG = 'action.lang.afterDelete';
+ const BEFORE_DELETELANG = 'action.lang.beforeDelete';
+ const AFTER_DELETELANG = 'action.lang.afterDelete';
}
diff --git a/core/lib/Thelia/Form/Lang/LangUrlEvent.php b/core/lib/Thelia/Form/Lang/LangUrlEvent.php
new file mode 100644
index 000000000..de8248c81
--- /dev/null
+++ b/core/lib/Thelia/Form/Lang/LangUrlEvent.php
@@ -0,0 +1,46 @@
+. */
+/* */
+/*************************************************************************************/
+
+namespace Thelia\Form\Lang;
+use Thelia\Core\Event\ActionEvent;
+
+
+/**
+ * Class LangUrlEvent
+ * @package Thelia\Form\Lang
+ * @author Manuel Raynaud
+ */
+class LangUrlEvent extends ActionEvent
+{
+ protected $url = array();
+
+ public function addUrl($id, $url)
+ {
+ $this->url[$id] = $url;
+ }
+
+ public function getUrl()
+ {
+ return $this->url;
+ }
+}
\ No newline at end of file
diff --git a/core/lib/Thelia/Form/Lang/LangUrlForm.php b/core/lib/Thelia/Form/Lang/LangUrlForm.php
new file mode 100644
index 000000000..ec9837329
--- /dev/null
+++ b/core/lib/Thelia/Form/Lang/LangUrlForm.php
@@ -0,0 +1,87 @@
+. */
+/* */
+/*************************************************************************************/
+
+namespace Thelia\Form\Lang;
+use Symfony\Component\Validator\Constraints\NotBlank;
+use Thelia\Form\BaseForm;
+use Thelia\Model\LangQuery;
+
+
+/**
+ * Class LangUrlForm
+ * @package Thelia\Form\Lang
+ * @author Manuel Raynaud
+ */
+class LangUrlForm extends BaseForm
+{
+ const LANG_PREFIX = 'url_';
+
+ /**
+ *
+ * in this function you add all the fields you need for your Form.
+ * Form this you have to call add method on $this->formBuilder attribute :
+ *
+ * $this->formBuilder->add("name", "text")
+ * ->add("email", "email", array(
+ * "attr" => array(
+ * "class" => "field"
+ * ),
+ * "label" => "email",
+ * "constraints" => array(
+ * new \Symfony\Component\Validator\Constraints\NotBlank()
+ * )
+ * )
+ * )
+ * ->add('age', 'integer');
+ *
+ * @return null
+ */
+ protected function buildForm()
+ {
+ foreach (LangQuery::create()->find() as $lang) {
+ $this->formBuilder->add(
+ self::LANG_PREFIX . $lang->getId(),
+ 'text',
+ array(
+ 'constraints' => array(
+ new NotBlank()
+ ),
+ "attr" => array(
+ "tag" => "url",
+ "url_id" => $lang->getId(),
+ "url_title" => $lang->getTitle()
+ ),
+
+ )
+ );
+ }
+ }
+
+ /**
+ * @return string the name of you form. This name must be unique
+ */
+ public function getName()
+ {
+ return 'thelia_language_url';
+ }
+}
\ No newline at end of file
diff --git a/install/insert.sql b/install/insert.sql
index 1e83c666d..89454096b 100755
--- a/install/insert.sql
+++ b/install/insert.sql
@@ -8,7 +8,7 @@ INSERT INTO `config` (`name`, `value`, `secured`, `hidden`, `created_at`, `updat
('session_config.default', '1', 1, 1, NOW(), NOW()),
('verifyStock', '1', 0, 0, NOW(), NOW()),
('active-template', 'default', 0, 0, NOW(), NOW()),
-('default_lang_without_translation', '1', 0, 0, NOW(), NOW()),
+('default_lang_without_translation', '1', 1, 1, NOW(), NOW()),
('rewriting_enable', '0', 0, 0, NOW(), NOW()),
('imagine_graphic_driver', 'gd', 0, 0, NOW(), NOW()),
('default_images_quality_percent', '75', 0, 0, NOW(), NOW()),
@@ -29,7 +29,8 @@ INSERT INTO `config` (`name`, `value`, `secured`, `hidden`, `created_at`, `updat
('thelia_customer_remember_me_cookie_expiration', 31536000, 0, 0, NOW(), NOW()),
('session_config.handlers', 'Symfony\\Component\\HttpFoundation\\Session\\Storage\\Handler\\NativeFileSessionHandler', 0, 0, NOW(), NOW()),
('company_name','', 0, 0, NOW(), NOW()),
-('contact_email','', 0, 0, NOW(), NOW())
+('contact_email','', 0, 0, NOW(), NOW()),
+('one_domain_foreach_lang','0', 1, 1, NOW(), NOW())
;
diff --git a/templates/admin/default/languages.html b/templates/admin/default/languages.html
index b1a0433da..5fe0c9e61 100644
--- a/templates/admin/default/languages.html
+++ b/templates/admin/default/languages.html
@@ -116,45 +116,42 @@
-
{intl l="Association language/URL"}
-
-
-
+ {/form}