diff --git a/Readme.md b/Readme.md index 2a3e9fece..93df8ab36 100755 --- a/Readme.md +++ b/Readme.md @@ -7,7 +7,6 @@ Thelia [Thelia](http://thelia.net/v2) is an open source tool for creating e-business websites and managing online content. This software is published under GPL. -Here is the current developping next major version. You can download this version for testing or see the code. Here is the most recent developed code for the next major version (v2). You can download this version for testing or having a look on the code (or anything you wish, respecting GPL). See http://thelia.net/v2 web site for more information. Most part of the code can possibly change, a large part will be refactor soon, graphical setup does not exist yet. diff --git a/core/bootstrap.php b/core/bootstrap.php index 99a24db72..72c003da9 100755 --- a/core/bootstrap.php +++ b/core/bootstrap.php @@ -15,7 +15,7 @@ define('DS' , DIRECTORY_SEPARATOR); $loader = require __DIR__ . "/vendor/autoload.php"; -if (!file_exists(THELIA_ROOT . '/local/config/database.yml') && !defined('THELIA_INSTALL_MODE')) { +if (!file_exists(THELIA_CONF_DIR . 'database.yml') && !defined('THELIA_INSTALL_MODE')) { $sapi = php_sapi_name(); if (substr($sapi, 0, 3) == 'cli') { define('THELIA_INSTALL_MODE', true); @@ -24,4 +24,4 @@ if (!file_exists(THELIA_ROOT . '/local/config/database.yml') && !defined('THELIA header('location: '.$request->getSchemeAndHttpHost() . '/install'); exit; } -} +} \ No newline at end of file diff --git a/core/lib/Thelia/Action/Module.php b/core/lib/Thelia/Action/Module.php index a994288d9..d27bedd1f 100644 --- a/core/lib/Thelia/Action/Module.php +++ b/core/lib/Thelia/Action/Module.php @@ -27,6 +27,7 @@ use Symfony\Component\EventDispatcher\EventSubscriberInterface; use Symfony\Component\Filesystem\Filesystem; use Thelia\Core\Event\Cache\CacheEvent; use Thelia\Core\Event\Module\ModuleDeleteEvent; +use Thelia\Core\Event\Module\ModuleEvent; use Thelia\Core\Event\Module\ModuleToggleActivationEvent; use Thelia\Core\Event\TheliaEvents; use Thelia\Model\Map\ModuleTableMap; @@ -99,6 +100,28 @@ class Module extends BaseAction implements EventSubscriberInterface } } + /** + * @param ModuleEvent $event + */ + public function update(ModuleEvent $event) + { + if (null !== $module = ModuleQuery::create()->findPk($event->getId())) { + + $module + ->setDispatcher($this->getDispatcher()) + ->setLocale($event->getLocale()) + ->setTitle($event->getTitle()) + ->setChapo($event->getChapo()) + ->setDescription($event->getDescription()) + ->setPostscriptum($event->getPostscriptum()) + ; + + $module->save(); + + $event->setModule($module); + } + } + protected function cacheClear() { $cacheEvent = new CacheEvent($this->container->getParameter('kernel.cache_dir')); @@ -130,7 +153,8 @@ class Module extends BaseAction implements EventSubscriberInterface { return array( TheliaEvents::MODULE_TOGGLE_ACTIVATION => array('toggleActivation', 128), - TheliaEvents::MODULE_DELETE => array('delete', 128) + TheliaEvents::MODULE_DELETE => array('delete', 128), + TheliaEvents::MODULE_UPDATE => array('update', 128), ); } } diff --git a/core/lib/Thelia/Command/Install.php b/core/lib/Thelia/Command/Install.php index 21ebdcfdc..71c97e9a1 100755 --- a/core/lib/Thelia/Command/Install.php +++ b/core/lib/Thelia/Command/Install.php @@ -180,8 +180,8 @@ class Install extends ContainerAwareCommand { $fs = new Filesystem(); - $sampleConfigFile = THELIA_ROOT . "/local/config/database.yml.sample"; - $configFile = THELIA_ROOT . "/local/config/database.yml"; + $sampleConfigFile = THELIA_CONF_DIR . "database.yml.sample"; + $configFile = THELIA_CONF_DIR . "database.yml"; $fs->copy($sampleConfigFile, $configFile, true); diff --git a/core/lib/Thelia/Config/Resources/form.xml b/core/lib/Thelia/Config/Resources/form.xml index ecd530b69..dd21a9232 100644 --- a/core/lib/Thelia/Config/Resources/form.xml +++ b/core/lib/Thelia/Config/Resources/form.xml @@ -122,6 +122,8 @@
+ + diff --git a/core/lib/Thelia/Config/Resources/routing/admin.xml b/core/lib/Thelia/Config/Resources/routing/admin.xml index a966b2608..52af62c45 100755 --- a/core/lib/Thelia/Config/Resources/routing/admin.xml +++ b/core/lib/Thelia/Config/Resources/routing/admin.xml @@ -925,16 +925,25 @@ - + Thelia\Controller\Admin\ModuleController::indexAction - + + Thelia\Controller\Admin\ModuleController::updateAction + \d+ + + + + Thelia\Controller\Admin\ModuleController::processUpdateAction + + + Thelia\Controller\Admin\ModuleController::toggleActivationAction \d+ - + Thelia\Controller\Admin\ModuleController::deleteAction diff --git a/core/lib/Thelia/Controller/Admin/ModuleController.php b/core/lib/Thelia/Controller/Admin/ModuleController.php index 53322949a..24f297cbf 100644 --- a/core/lib/Thelia/Controller/Admin/ModuleController.php +++ b/core/lib/Thelia/Controller/Admin/ModuleController.php @@ -23,12 +23,15 @@ namespace Thelia\Controller\Admin; +use Thelia\Core\Event\Module\ModuleEvent; use Thelia\Core\Security\Resource\AdminResources; use Thelia\Core\Event\Module\ModuleDeleteEvent; use Thelia\Core\Event\Module\ModuleToggleActivationEvent; use Thelia\Core\Event\TheliaEvents; use Thelia\Core\Security\AccessManager; +use Thelia\Form\ModuleModificationForm; +use Thelia\Model\ModuleQuery; use Thelia\Module\ModuleManagement; /** @@ -36,25 +39,155 @@ use Thelia\Module\ModuleManagement; * @package Thelia\Controller\Admin * @author Manuel Raynaud */ -class ModuleController extends BaseAdminController +class ModuleController extends AbstractCrudController { + public function __construct() + { + parent::__construct( + 'module', + null, + null, + + AdminResources::MODULE, + + null, + TheliaEvents::MODULE_UPDATE, + null + ); + } + + protected function getCreationForm() + { + return null; + } + + protected function getUpdateForm() + { + return new ModuleModificationForm($this->getRequest()); + } + + protected function getCreationEvent($formData) + { + return null; + } + + protected function getUpdateEvent($formData) + { + $event = new ModuleEvent(); + + $event->setLocale($formData['locale']); + $event->setId($formData['id']); + $event->setTitle($formData['title']); + $event->setChapo($formData['chapo']); + $event->setDescription($formData['description']); + $event->setPostscriptum($formData['postscriptum']); + + return $event; + } + + protected function getDeleteEvent() + { + return null; + } + + protected function eventContainsObject($event) + { + return $event->hasModule(); + } + + protected function hydrateObjectForm($object) + { + $object->setLocale($this->getCurrentEditionLocale()); + $data = array( + 'id' => $object->getId(), + 'locale' => $object->getLocale(), + 'title' => $object->getTitle(), + 'chapo' => $object->getChapo(), + 'description' => $object->getDescription(), + 'postscriptum' => $object->getPostscriptum(), + ); + + // Setup the object form + return new ModuleModificationForm($this->getRequest(), "form", $data); + } + + protected function getObjectFromEvent($event) + { + return $event->hasModule() ? $event->getModule() : null; + } + + protected function getExistingObject() + { + return ModuleQuery::create() + ->joinWithI18n($this->getCurrentEditionLocale()) + ->findOneById($this->getRequest()->get('module_id')); + } + + + protected function getObjectLabel($object) + { + return $object->getTitle(); + } + + protected function getObjectId($object) + { + return $object->getId(); + } + + protected function getViewArguments() + { + return array(); + } + + protected function getRouteArguments($module_id = null) + { + return array( + 'module_id' => $module_id === null ? $this->getRequest()->get('module_id') : $module_id, + ); + } + + protected function renderListTemplate($currentOrder) + { + // We always return to the feature edition form + return $this->render( + 'modules', + array() + ); + } + + protected function renderEditionTemplate() + { + // We always return to the feature edition form + return $this->render('module-edit', array_merge($this->getViewArguments(), $this->getRouteArguments())); + } + + protected function redirectToEditionTemplate($request = null, $country = null) + { + // We always return to the module edition form + $this->redirectToRoute( + "admin.module.update", + $this->getViewArguments(), + $this->getRouteArguments() + ); + } + + protected function redirectToListTemplate() + { + $this->redirectToRoute( + "admin.module" + ); + } + public function indexAction() { if (null !== $response = $this->checkAuth(AdminResources::MODULE, AccessManager::VIEW)) return $response; - $modulemanagement = new ModuleManagement(); - $modulemanagement->updateModules(); + $moduleManagement = new ModuleManagement(); + $moduleManagement->updateModules(); return $this->render("modules"); } - public function updateAction($module_id) - { - return $this->render("module-edit", array( - "module_id" => $module_id - )); - } - public function toggleActivationAction($module_id) { if (null !== $response = $this->checkAuth(AdminResources::MODULE, AccessManager::UPDATE)) return $response; diff --git a/core/lib/Thelia/Core/Event/Module/ModuleEvent.php b/core/lib/Thelia/Core/Event/Module/ModuleEvent.php index 583a3afc9..7dc3f67e8 100644 --- a/core/lib/Thelia/Core/Event/Module/ModuleEvent.php +++ b/core/lib/Thelia/Core/Event/Module/ModuleEvent.php @@ -37,6 +37,109 @@ class ModuleEvent extends ActionEvent */ protected $module; + protected $id; + protected $locale; + protected $title; + protected $chapo; + protected $description; + protected $postscriptum; + + /** + * @param mixed $chapo + */ + public function setChapo($chapo) + { + $this->chapo = $chapo; + } + + /** + * @return mixed + */ + public function getChapo() + { + return $this->chapo; + } + + /** + * @param mixed $description + */ + public function setDescription($description) + { + $this->description = $description; + } + + /** + * @return mixed + */ + public function getDescription() + { + return $this->description; + } + + /** + * @param mixed $id + */ + public function setId($id) + { + $this->id = $id; + } + + /** + * @return mixed + */ + public function getId() + { + return $this->id; + } + + /** + * @param mixed $locale + */ + public function setLocale($locale) + { + $this->locale = $locale; + } + + /** + * @return mixed + */ + public function getLocale() + { + return $this->locale; + } + + /** + * @param mixed $postscriptum + */ + public function setPostscriptum($postscriptum) + { + $this->postscriptum = $postscriptum; + } + + /** + * @return mixed + */ + public function getPostscriptum() + { + return $this->postscriptum; + } + + /** + * @param mixed $title + */ + public function setTitle($title) + { + $this->title = $title; + } + + /** + * @return mixed + */ + public function getTitle() + { + return $this->title; + } + public function __construct(Module $module = null) { $this->module = $module; diff --git a/core/lib/Thelia/Core/Event/TheliaEvents.php b/core/lib/Thelia/Core/Event/TheliaEvents.php index 6dbe89e10..1dfcb673c 100755 --- a/core/lib/Thelia/Core/Event/TheliaEvents.php +++ b/core/lib/Thelia/Core/Event/TheliaEvents.php @@ -693,8 +693,9 @@ final class TheliaEvents const MODULE_TOGGLE_ACTIVATION = 'thelia.module.toggleActivation'; /** - * sent when a module is deleted + * module */ + const MODULE_UPDATE = 'thelia.module.update'; const MODULE_DELETE = 'thelia.module.delete'; /** diff --git a/core/lib/Thelia/Core/Security/Resource/AdminResources.php b/core/lib/Thelia/Core/Security/Resource/AdminResources.php index 834c2c628..e953b83aa 100644 --- a/core/lib/Thelia/Core/Security/Resource/AdminResources.php +++ b/core/lib/Thelia/Core/Security/Resource/AdminResources.php @@ -84,7 +84,7 @@ final class AdminResources const MESSAGE = "admin.configuration.message"; - const MODULE = "admin.configuration.module"; + const MODULE = "admin.module"; const ORDER = "admin.order"; diff --git a/core/lib/Thelia/Core/Template/Loop/FolderPath.php b/core/lib/Thelia/Core/Template/Loop/FolderPath.php index ce5ea9526..92c42f890 100644 --- a/core/lib/Thelia/Core/Template/Loop/FolderPath.php +++ b/core/lib/Thelia/Core/Template/Loop/FolderPath.php @@ -102,9 +102,9 @@ class FolderPath extends BaseI18nLoop implements ArraySearchLoopInterface if ($folder != null) { $results[] = array( - "ID" => $result->getId(), - "TITLE" => $result->getVirtualColumn('i18n_TITLE'), - "URL" => $result->getUrl($this->locale), + "ID" => $folder->getId(), + "TITLE" => $folder->getVirtualColumn('i18n_TITLE'), + "URL" => $folder->getUrl($this->locale), "LOCALE" => $this->locale, ); diff --git a/core/lib/Thelia/Core/Template/TemplateHelper.php b/core/lib/Thelia/Core/Template/TemplateHelper.php index 10fe67a5b..f1a2ec8b9 100644 --- a/core/lib/Thelia/Core/Template/TemplateHelper.php +++ b/core/lib/Thelia/Core/Template/TemplateHelper.php @@ -62,7 +62,7 @@ class TemplateHelper public function getActiveFrontTemplate() { return new TemplateDefinition( - ConfigQuery::read('active-admin-template', 'default'), + ConfigQuery::read('active-front-template', 'default'), TemplateDefinition::FRONT_OFFICE ); } @@ -130,7 +130,7 @@ class TemplateHelper */ public function walkDir($directory, $walkMode, Translator $translator, $currentLocale, &$strings) { - $num_files = 0; + $num_texts = 0; if ($walkMode == self::WALK_MODE_PHP) { $prefix = '\-\>[\s]*trans[\s]*\('; @@ -155,7 +155,7 @@ class TemplateHelper if ($fileInfo->isDot()) continue; - if ($fileInfo->isDir()) $num_files += $this->walkDir($fileInfo->getPathName(), $walkMode, $translator, $currentLocale, $strings); + if ($fileInfo->isDir()) $num_texts += $this->walkDir($fileInfo->getPathName(), $walkMode, $translator, $currentLocale, $strings); if ($fileInfo->isFile()) { @@ -186,18 +186,19 @@ class TemplateHelper $strings[$hash]['files'][] = $short_path; } } - else - $num_files++; + else { + $num_texts++; - // remove \' - $match = str_replace("\\'", "'", $match); + // remove \' + $match = str_replace("\\'", "'", $match); - $strings[$hash] = array( - 'files' => array($short_path), - 'text' => $match, - 'translation' => $translator->trans($match, array(), 'messages', $currentLocale, false), - 'dollar' => strstr($match, '$') !== false - ); + $strings[$hash] = array( + 'files' => array($short_path), + 'text' => $match, + 'translation' => $translator->trans($match, array(), 'messages', $currentLocale, false), + 'dollar' => strstr($match, '$') !== false + ); + } } } } @@ -205,7 +206,7 @@ class TemplateHelper } } - return $num_files; + return $num_texts; } catch (\UnexpectedValueException $ex) { echo $ex; diff --git a/core/lib/Thelia/Core/Thelia.php b/core/lib/Thelia/Core/Thelia.php index c8cc02820..f4187b5a5 100755 --- a/core/lib/Thelia/Core/Thelia.php +++ b/core/lib/Thelia/Core/Thelia.php @@ -75,7 +75,7 @@ class Thelia extends Kernel } $definePropel = new DefinePropel(new DatabaseConfiguration(), - Yaml::parse(THELIA_ROOT . '/local/config/database.yml')); + Yaml::parse(THELIA_CONF_DIR . 'database.yml')); $serviceContainer = Propel::getServiceContainer(); $serviceContainer->setAdapterClass('thelia', 'mysql'); $manager = new ConnectionManagerSingle(); diff --git a/core/lib/Thelia/Core/TheliaHttpKernel.php b/core/lib/Thelia/Core/TheliaHttpKernel.php index 07dc15eed..94ad7f9de 100755 --- a/core/lib/Thelia/Core/TheliaHttpKernel.php +++ b/core/lib/Thelia/Core/TheliaHttpKernel.php @@ -215,7 +215,7 @@ class TheliaHttpKernel extends HttpKernel $storage = new Session\Storage\NativeSessionStorage(); if (Model\ConfigQuery::read("session_config.default")) { - $storage->setSaveHandler(new Session\Storage\Handler\NativeFileSessionHandler(Model\ConfigQuery::read("session_config.save_path", THELIA_ROOT . '/local/session/'))); + $storage->setSaveHandler(new Session\Storage\Handler\NativeFileSessionHandler(Model\ConfigQuery::read("session_config.save_path", THELIA_LOCAL_DIR . 'session/'))); } else { $handlerString = Model\ConfigQuery::read("session_config.handlers", 'Symfony\Component\HttpFoundation\Session\Storage\Handler\NativeFileSessionHandler'); diff --git a/local/modules/FakeCB/Tests/FakeCBTest.php b/core/lib/Thelia/Form/ModuleModificationForm.php similarity index 55% rename from local/modules/FakeCB/Tests/FakeCBTest.php rename to core/lib/Thelia/Form/ModuleModificationForm.php index 20a68fc1d..5b65f5709 100755 --- a/local/modules/FakeCB/Tests/FakeCBTest.php +++ b/core/lib/Thelia/Form/ModuleModificationForm.php @@ -4,7 +4,7 @@ /* Thelia */ /* */ /* Copyright (c) OpenStudio */ -/* email : info@thelia.net */ +/* email : info@thelia.net */ /* web : http://www.thelia.net */ /* */ /* This program is free software; you can redistribute it and/or modify */ @@ -21,32 +21,55 @@ /* */ /*************************************************************************************/ -namespace FakeCB\Tests; +namespace Thelia\Form; -use FakeCB\FakeCB; -use Thelia\Tests\Module\BaseModuleTestor; +use Symfony\Component\Validator\Constraints; +use Symfony\Component\Validator\ExecutionContextInterface; +use Thelia\Model\ModuleQuery; -/** - * - * @author Etienne Roudeix - * - */ -class FakeCBTest extends BaseModuleTestor +class ModuleModificationForm extends BaseForm { - public function getTestedClassName() + use StandardDescriptionFieldsTrait; + + protected function buildForm() { - return 'FakeCB\FakeCB'; + $this->addStandardDescFields(); + + $this->formBuilder + ->add("id", "hidden", array( + "required" => true, + "constraints" => array( + new Constraints\NotBlank(), + new Constraints\Callback( + array( + "methods" => array( + array($this, "verifyModuleId"), + ), + ) + ), + ), + "attr" => array( + "id" => "module_update_id", + ), + )) + ; } - public function getTestedInstance() + /** + * @return string the name of you form. This name must be unique + */ + public function getName() { - return new FakeCB(); + return "thelia_admin_module_modification"; } - public function testInstall() + public function verifyModuleId($value, ExecutionContextInterface $context) { - //$fakeCB = new FakeCB(); + $module = ModuleQuery::create() + ->findPk($value); - //$fakeCB->install(); + if (null === $module) { + $context->addViolation("Module ID not found"); + } } } diff --git a/core/lib/Thelia/Model/Module.php b/core/lib/Thelia/Model/Module.php index d57df77fa..b2518169d 100755 --- a/core/lib/Thelia/Model/Module.php +++ b/core/lib/Thelia/Model/Module.php @@ -4,8 +4,11 @@ namespace Thelia\Model; use Propel\Runtime\Connection\ConnectionInterface; use Thelia\Model\Base\Module as BaseModule; +use Thelia\Model\Tools\ModelEventDispatcherTrait; -class Module extends BaseModule { +class Module extends BaseModule +{ + use ModelEventDispatcherTrait; public function postSave(ConnectionInterface $con = null) { diff --git a/core/lib/Thelia/Module/BaseModule.php b/core/lib/Thelia/Module/BaseModule.php index 15853a398..4575f5aac 100755 --- a/core/lib/Thelia/Module/BaseModule.php +++ b/core/lib/Thelia/Module/BaseModule.php @@ -27,6 +27,8 @@ namespace Thelia\Module; use Propel\Runtime\Connection\ConnectionInterface; use Propel\Runtime\Propel; use Symfony\Component\DependencyInjection\ContainerAware; +use Symfony\Component\EventDispatcher\EventDispatcherInterface; +use Symfony\Component\HttpFoundation\Request; use Thelia\Model\Map\ModuleTableMap; use Thelia\Model\ModuleI18nQuery; use Thelia\Model\Map\ModuleImageTableMap; @@ -37,7 +39,8 @@ use Thelia\Model\Module; use Thelia\Model\ModuleImage; use Thelia\Model\ModuleQuery; -abstract class BaseModule extends ContainerAware + +class BaseModule extends ContainerAware implements BaseModuleInterface { const CLASSIC_MODULE_TYPE = 1; const DELIVERY_MODULE_TYPE = 2; @@ -48,10 +51,8 @@ abstract class BaseModule extends ContainerAware protected $reflected; - public function __construct() - { - - } + protected $dispatcher = null; + protected $request = null; public function activate($moduleModel = null) { @@ -102,7 +103,7 @@ abstract class BaseModule extends ContainerAware public function hasContainer() { - return null === $this->container; + return null !== $this->container; } public function getContainer() @@ -114,6 +115,41 @@ abstract class BaseModule extends ContainerAware return $this->container; } + + public function hasRequest() { + return null !== $this->request; + } + + public function setRequest(Request $request) { + $this->request = $request; + } + + public function getRequest() { + if ($this->hasRequest() === false) { + throw new \RuntimeException("Sorry, the request is not available in this context"); + } + + return $this->request; + } + + + public function hasDispatcher() { + return null !== $this->dispatcher; + } + + public function setDispatcher(EventDispatcherInterface $dispatcher) { + $this->dispatcher = $dispatcher; + } + + public function getDispatcher() { + if ($this->hasDispatcher() === false) { + throw new \RuntimeException("Sorry, the dispatcher is not available in this context"); + } + + return $this->dispatcher; + } + + public function setTitle(Module $module, $titles) { if (is_array($titles)) { @@ -226,6 +262,7 @@ abstract class BaseModule extends ContainerAware public function install(ConnectionInterface $con = null) { + // Implement this method to do something useful. } public function preActivation(ConnectionInterface $con = null) @@ -235,7 +272,7 @@ abstract class BaseModule extends ContainerAware public function postActivation(ConnectionInterface $con = null) { - + // Implement this method to do something useful. } public function preDeactivation(ConnectionInterface $con = null) @@ -245,12 +282,11 @@ abstract class BaseModule extends ContainerAware public function postDeactivation(ConnectionInterface $con = null) { - + // Implement this method to do something useful. } - public function destroy(ConnectionInterface $con = null) + public function destroy(ConnectionInterface $con = null, $deleteModuleData = false) { - + // Implement this method to do something useful. } - -} +} \ No newline at end of file diff --git a/core/lib/Thelia/Module/BaseModuleInterface.php b/core/lib/Thelia/Module/BaseModuleInterface.php index 5cfd98409..694a4082c 100644 --- a/core/lib/Thelia/Module/BaseModuleInterface.php +++ b/core/lib/Thelia/Module/BaseModuleInterface.php @@ -23,14 +23,21 @@ namespace Thelia\Module; +use Propel\Runtime\Connection\ConnectionInterface; use Symfony\Component\EventDispatcher\EventDispatcherInterface; use Symfony\Component\HttpFoundation\Request; interface BaseModuleInterface { - public function setRequest(Request $request); - public function getRequest(); + public function install(ConnectionInterface $con = null); - public function setDispatcher(EventDispatcherInterface $dispatcher); - public function getDispatcher(); + public function preActivation(ConnectionInterface $con = null); + + public function postActivation(ConnectionInterface $con = null); + + public function preDeactivation(ConnectionInterface $con = null); + + public function postDeactivation(ConnectionInterface $con = null); + + public function destroy(ConnectionInterface $con = null, $deleteModuleData = false); } diff --git a/core/lib/Thelia/Tests/Command/ModuleActivateCommandTest.php b/core/lib/Thelia/Tests/Command/ModuleActivateCommandTest.php index 680a487aa..d18c80a61 100755 --- a/core/lib/Thelia/Tests/Command/ModuleActivateCommandTest.php +++ b/core/lib/Thelia/Tests/Command/ModuleActivateCommandTest.php @@ -41,6 +41,9 @@ class ModuleActivateCommandTest extends \PHPUnit_Framework_TestCase $module = ModuleQuery::create()->findOne(); if (null !== $module) { + + $prev_activation_status = $module->getActivate(); + $application = new Application($this->getKernel()); $module->setActivate(BaseModule::IS_NOT_ACTIVATED); @@ -58,7 +61,12 @@ class ModuleActivateCommandTest extends \PHPUnit_Framework_TestCase "module" => $module->getCode(), )); - $this->assertEquals(BaseModule::IS_ACTIVATED, ModuleQuery::create()->findPk($module->getId())->getActivate()); + $activated = ModuleQuery::create()->findPk($module->getId())->getActivate(); + + // Restore activation status + $module->setActivate($prev_activation_status)->save(); + + $this->assertEquals(BaseModule::IS_ACTIVATED, $activated); } } diff --git a/install/insert.sql b/install/insert.sql index ea26fbd6f..c49f3e210 100755 --- a/install/insert.sql +++ b/install/insert.sql @@ -7,7 +7,7 @@ INSERT INTO `lang`(`id`,`title`,`code`,`locale`,`url`,`date_format`,`time_format INSERT INTO `config` (`name`, `value`, `secured`, `hidden`, `created_at`, `updated_at`) VALUES ('session_config.default', '1', 1, 1, NOW(), NOW()), ('verifyStock', '1', 0, 0, NOW(), NOW()), -('active-template', 'default', 0, 0, NOW(), NOW()), +('active-front-template', 'default', 0, 0, NOW(), NOW()), ('active-admin-template', 'default', 0, 0, NOW(), NOW()), ('active-pdf-template', 'default', 0, 0, NOW(), NOW()), ('default_lang_without_translation', '1', 1, 1, NOW(), NOW()), diff --git a/local/modules/FakeCB/Config/config.xml b/local/modules/FakeCB/Config/config.xml deleted file mode 100755 index 2430f5027..000000000 --- a/local/modules/FakeCB/Config/config.xml +++ /dev/null @@ -1,36 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - diff --git a/local/modules/FakeCB/Config/module.xml b/local/modules/FakeCB/Config/module.xml deleted file mode 100644 index 0beea57f4..000000000 --- a/local/modules/FakeCB/Config/module.xml +++ /dev/null @@ -1,18 +0,0 @@ - - - FakeCB\FakeCB - - fake cb - - - simulation cb - - 1.0 - - Manuel Raynaud - mraynaud@openstudio.fr - - payment - 2.0.0 - alpha - diff --git a/local/modules/FakeCB/FakeCB.php b/local/modules/FakeCB/FakeCB.php deleted file mode 100755 index 58c8318da..000000000 --- a/local/modules/FakeCB/FakeCB.php +++ /dev/null @@ -1,88 +0,0 @@ -. */ -/* */ -/*************************************************************************************/ - -namespace FakeCB; - -use Propel\Runtime\Connection\ConnectionInterface; -use Symfony\Component\EventDispatcher\EventDispatcherInterface; -use Symfony\Component\HttpFoundation\Request; -use Thelia\Model\Base\ModuleImageQuery; -use Thelia\Module\BaseModule; -use Thelia\Module\PaymentModuleInterface; - -class FakeCB extends BaseModule implements PaymentModuleInterface -{ - protected $request; - protected $dispatcher; - - public function setRequest(Request $request) - { - $this->request = $request; - } - - public function getRequest() - { - return $this->request; - } - - public function setDispatcher(EventDispatcherInterface $dispatcher) - { - $this->dispatcher = $dispatcher; - } - - public function getDispatcher() - { - return $this->dispatcher; - } - - public function pay() - { - // TODO: Implement pay() method. - } - - - public function postActivation(ConnectionInterface $con = null) - { - /* insert the images from image folder if first module activation */ - $module = $this->getModuleModel(); - if(ModuleImageQuery::create()->filterByModule($module)->count() == 0) { - $this->deployImageFolder($module, sprintf('%s/images', __DIR__)); - } - - /* set module title */ - $this->setTitle( - $module, - array( - "en_US" => "Credit Card", - "fr_FR" => "Carte de crédit", - ) - ); - } - - - public function getCode() - { - return 'FakeCB'; - } - -} diff --git a/local/modules/FakeCB/images/mastercard.png b/local/modules/FakeCB/images/mastercard.png deleted file mode 100755 index 28701c3dd..000000000 Binary files a/local/modules/FakeCB/images/mastercard.png and /dev/null differ diff --git a/local/modules/FakeCB/images/visa.png b/local/modules/FakeCB/images/visa.png deleted file mode 100755 index ef0447105..000000000 Binary files a/local/modules/FakeCB/images/visa.png and /dev/null differ diff --git a/templates/admin/default/administrators.html b/templates/admin/default/administrators.html index c2b8fa521..a02846c0f 100644 --- a/templates/admin/default/administrators.html +++ b/templates/admin/default/administrators.html @@ -1,6 +1,6 @@ {extends file="admin-layout.tpl"} -{block name="page-title"}{intl l='Taxes rules'}{/block} +{block name="page-title"}{intl l='Back-office users'}{/block} {block name="check-resource"}admin.configuration.administrator{/block} {block name="check-access"}view{/block} @@ -9,12 +9,12 @@
- + @@ -37,8 +37,8 @@ {intl l="Login"} - {intl l="FirstName"} - {intl l="LastName"} + {intl l="First Name"} + {intl l="Last Name"} {intl l="Profile"} {intl l="Actions"} @@ -82,7 +82,7 @@ {/loop} - +
diff --git a/templates/admin/default/configuration.html b/templates/admin/default/configuration.html index 6b4428b1a..dec253917 100644 --- a/templates/admin/default/configuration.html +++ b/templates/admin/default/configuration.html @@ -116,13 +116,6 @@ {module_include location='system_configuration_top'} - {loop type="auth" name="pcc1" role="ADMIN" resource="admin.configuration.module" access="VIEW"} - - {intl l='Modules activation'} - - - {/loop} - {loop type="auth" name="pcc2" role="ADMIN" resource="admin.configuration.variable" access="VIEW"} {intl l='System variables'} diff --git a/templates/admin/default/includes/module-block.html b/templates/admin/default/includes/module-block.html index 527e9bf6a..f11be5331 100644 --- a/templates/admin/default/includes/module-block.html +++ b/templates/admin/default/includes/module-block.html @@ -27,9 +27,9 @@ @@ -48,7 +48,7 @@ {/loop} {loop type="auth" name="can_delete" role="ADMIN" resource="admin.modules" access="DELETE"} - + {/loop} diff --git a/templates/admin/default/languages.html b/templates/admin/default/languages.html index 73f2a656c..dc337efe2 100644 --- a/templates/admin/default/languages.html +++ b/templates/admin/default/languages.html @@ -21,9 +21,9 @@
- + - +
{intl l="Languages management"} @@ -98,13 +98,13 @@
- {foreach $choices as $choice} {/foreach}
- +
@@ -115,7 +115,7 @@
- +
{intl l="Using a domain or subdomain for each language"}
{form name="thelia.lang.url"} diff --git a/templates/admin/default/module-edit.html b/templates/admin/default/module-edit.html new file mode 100644 index 000000000..755a50826 --- /dev/null +++ b/templates/admin/default/module-edit.html @@ -0,0 +1,82 @@ +{extends file="admin-layout.tpl"} + +{block name="page-title"}{intl l='Edit a module'}{/block} + +{block name="check-resource"}admin.module{/block} +{block name="check-access"}update{/block} + +{block name="main-content"} + +
+ +
+ + + + {loop type="module" name="module" id=$module_id backend_context="1" lang=$edit_language_id} + +
+
+ +
+ + {form name="thelia.admin.module.modification"} + + + + {include + file = "includes/inner-form-toolbar.html" + hide_submit_buttons = false + + page_url = {url path="/admin/module/update/$module_id"} + close_url = {url path="/admin/modules"} + } + + {* Be sure to get the product ID, even if the form could not be validated *} + + + {form_hidden_fields form=$form} + + {form_field form=$form field='success_url'} + + {/form_field} + + {if $form_error}
{$form_error_message}
{/if} + + {include file="includes/standard-description-form-fields.html" form=$form} + +
+
+
+ +
+

{intl l='Module created on %date_create. Last modification: %date_change' date_create={format_date date=$CREATE_DATE} date_change={format_date date=$UPDATE_DATE}}

+
+
+
+
+ + + {/form} +
+ +
+
+ + {/loop} + +
+ +
+ +{/block} + +{block name="javascript-initialization"} + + + +{/block} \ No newline at end of file diff --git a/templates/admin/default/modules.html b/templates/admin/default/modules.html index d82bce399..0eebed2b8 100644 --- a/templates/admin/default/modules.html +++ b/templates/admin/default/modules.html @@ -2,7 +2,7 @@ {block name="page-title"}{intl l='Modules'}{/block} -{block name="check-resource"}admin.configuration.module{/block} +{block name="check-resource"}admin.module{/block} {block name="check-access"}view{/block} {block name="main-content"} @@ -53,7 +53,7 @@ dialog_title = {intl l="Delete a module"} dialog_message = {intl l="Do you really want to delete this module ?"} - form_action = {url path='/admin/configuration/modules/delete'} + form_action = {url path='/admin/modules/delete'} form_content = {$smarty.capture.delete_module_dialog nofilter} } @@ -81,8 +81,8 @@ {/javascripts}