Esempio n. 1
0
 /**
  * Uninstall package.
  *
  * @param string $type   Package type.
  * @param string $name   Package name.
  * @param string $return Return to.
  *
  * @return mixed
  *
  * @Route(
  * "/uninstall/{type:[a-zA-Z0-9_-]+}/{name:[a-zA-Z0-9_-]+}/{return:[a-zA-Z0-9_-]+}",
  * methods={"GET"},
  * name="admin-packages-uninstall"
  * )
  */
 public function uninstallAction($type, $name, $return)
 {
     $this->view->disable();
     $package = $this->_getPackage($type, $name);
     if ($package) {
         if ($this->_hasDependencies($package)) {
             return $this->response->redirect(['for' => $return]);
         }
         try {
             if ($package->type == Manager::PACKAGE_TYPE_MODULE) {
                 $installerClass = ucfirst($name) . '\\Installer';
                 if (class_exists($installerClass)) {
                     $packageInstaller = new $installerClass($this->di, $name);
                     if (method_exists($packageInstaller, 'remove')) {
                         $packageInstaller->remove();
                     }
                 }
             }
             $packageManager = new Manager();
             $packageManager->removePackage($package);
             $package->delete();
             $this->_removePackageConfig($package);
             $this->_updateMetadata();
             $this->_clearCache();
             // Update database.
             $schema = new Schema($this->getDI());
             $schema->updateDatabase(true);
             $this->flashSession->success('Package "' . $name . '" removed!');
         } catch (PackageException $e) {
             $package->delete();
             $this->flashSession->notice('Failed to remove package directory, check logs...');
         }
     } else {
         $this->flashSession->notice('Package not found...');
     }
     return $this->response->redirect(['for' => $return]);
 }