end module removal
This commit is contained in:
@@ -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()
|
||||
|
||||
@@ -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');
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -62,4 +62,9 @@ class ModuleEvent extends ActionEvent
|
||||
return $this->module;
|
||||
}
|
||||
|
||||
public function hasModule()
|
||||
{
|
||||
return null !== $this->module;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -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)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
@@ -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'}}
|
||||
|
||||
Reference in New Issue
Block a user