process module toggle activation

This commit is contained in:
Manuel Raynaud
2013-10-17 18:50:00 +02:00
parent d25ad53d5a
commit 6d791f5bf7
7 changed files with 99 additions and 63 deletions

View File

@@ -24,7 +24,10 @@
namespace Thelia\Module;
use Propel\Runtime\Connection\ConnectionInterface;
use Propel\Runtime\Propel;
use Symfony\Component\DependencyInjection\ContainerAware;
use Thelia\Model\Map\ModuleTableMap;
use Thelia\Model\ModuleI18nQuery;
use Thelia\Model\Map\ModuleImageTableMap;
use Thelia\Model\ModuleI18n;
@@ -50,22 +53,54 @@ abstract class BaseModule extends ContainerAware
}
public function activate()
public function activate($moduleModel = null)
{
$moduleModel = $this->getModuleModel();
if(null === $moduleModel) {
$moduleModel = $this->getModuleModel();
}
if ($moduleModel->getActivate() == self::IS_NOT_ACTIVATED) {
$moduleModel->setActivate(self::IS_ACTIVATED);
$moduleModel->save();
$con = Propel::getWriteConnection(ModuleTableMap::DATABASE_NAME);
$con->beginTransaction();
try {
$this->afterActivation();
if($this->preActivation($con)) {
$moduleModel->setActivate(self::IS_ACTIVATED);
$moduleModel->save($con);
$this->postActivation($con);
$con->commit();
}
} catch (\Exception $e) {
$moduleModel->setActivate(self::IS_NOT_ACTIVATED);
$moduleModel->save();
$con->rollBack();
throw $e;
}
}
}
public function deActivate($moduleModel = null)
{
if(null === $moduleModel) {
$moduleModel = $this->getModuleModel();
}
if ($moduleModel->getActivate() == self::IS_ACTIVATED) {
$con = Propel::getWriteConnection(ModuleTableMap::DATABASE_NAME);
$con->beginTransaction();
try {
if($this->preDeactivation($con)) {
$moduleModel->setActivate(self::IS_NOT_ACTIVATED);
$moduleModel->save($con);
$this->postDeactivation($con);
$con->commit();
}
} catch (\Exception $e) {
$con->rollBack();
throw $e;
}
}
}
public function hasContainer()
{
return null === $this->container;
@@ -190,8 +225,33 @@ abstract class BaseModule extends ContainerAware
return basename(dirname($this->reflected->getFileName()));
}
abstract public function install();
abstract public function afterActivation();
abstract public function destroy();
public function install(){
}
public function preActivation(ConnectionInterface $con = null)
{
return true;
}
public function postActivation(ConnectionInterface $con = null)
{
}
public function preDeactivation(ConnectionInterface $con = null)
{
return true;
}
public function postDeactivation(ConnectionInterface $con = null)
{
}
public function destroy()
{
}
}