end module removal

This commit is contained in:
Manuel Raynaud
2013-10-21 11:30:19 +02:00
parent a10fa20340
commit 28b7423443
5 changed files with 56 additions and 4 deletions

View File

@@ -24,6 +24,7 @@
namespace Thelia\Action;
use Propel\Runtime\Propel;
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\ModuleToggleActivationEvent;
@@ -64,7 +65,37 @@ class Module extends BaseAction implements EventSubscriberInterface
public function delete(ModuleDeleteEvent $event)
{
if (null !== $module = ModuleQuery::create()->findPk($event->getModuleId())) {
$con = Propel::getWriteConnection(ModuleTableMap::DATABASE_NAME);
$con->beginTransaction();
try {
if(null === $module->getFullNamespace()) {
throw new \LogicException('can not instanciante this module if namespace is null. Maybe the model is not loaded ?');
}
$reflected = new \ReflectionClass($module->getFullNamespace());
$instance = $reflected->newInstance();
$instance->setContainer($this->container);
$path = dirname($reflected->getFileName());
$instance->destroy($con);
$fs = new Filesystem();
$fs->remove($path);
$module->delete($con);
$con->commit();
$event->setModule($module);
} catch (\Exception $e) {
$con->rollBack();
throw $e;
}
}
}
protected function cacheClear()

View File

@@ -88,6 +88,7 @@ class ModuleController extends BaseAdminController
{
if (null !== $response = $this->checkAuth("admin.module.delete")) return $response;
$message = null;
try {
$module_id = $this->getRequest()->get('module_id');
@@ -96,8 +97,22 @@ class ModuleController extends BaseAdminController
$this->dispatch(TheliaEvents::MODULE_DELETE, $deleteEvent);
} catch (\Exception $e) {
if($deleteEvent->hasModule() === false) {
throw new \LogicException(
$this->getTranslator()->trans("No %obj was updated.", array('%obj' => 'Module')));
}
} catch (\Exception $e) {
\Thelia\Log\Tlog::getInstance()->error(sprintf("error during module removal : %s", $message));
$message = $e->getMessage();
}
if($message) {
return $this->render("modules", array(
"error_message" => $message
));
} else {
$this->redirectToRoute('admin.module');
}
}
}

View File

@@ -62,4 +62,9 @@ class ModuleEvent extends ActionEvent
return $this->module;
}
public function hasModule()
{
return null !== $this->module;
}
}

View File

@@ -225,7 +225,7 @@ abstract class BaseModule extends ContainerAware
return basename(dirname($this->reflected->getFileName()));
}
public function install()
public function install(ConnectionInterface $con = null)
{
}
@@ -249,7 +249,7 @@ abstract class BaseModule extends ContainerAware
}
public function destroy()
public function destroy(ConnectionInterface $con = null)
{
}

View File

@@ -25,6 +25,7 @@
<div class="row">
<div class="col-md-12">
{if $error_message}<div class="alert alert-danger">{$error_message}</div>{/if}
{include file="includes/module-block.html" module_type="1" caption_title={intl l='Classic modules'}}
{include file="includes/module-block.html" module_type="2" caption_title={intl l='Delivery modules'}}
{include file="includes/module-block.html" module_type="3" caption_title={intl l='Payment modules'}}