Example #1
0
 /**
  * Check module validity
  *
  * @param UploadedFile $file
  * @param ExecutionContextInterface $context
  */
 public function checkModuleValidity(UploadedFile $file, ExecutionContextInterface $context)
 {
     $modulePath = $this->unzipModule($file);
     if ($modulePath !== false) {
         try {
             // get the first directory
             $moduleFiles = $this->getDirContents($modulePath);
             if (count($moduleFiles['directories']) !== 1) {
                 throw new Exception(Translator::getInstance()->trans("Your zip must contain 1 root directory which is the root folder directory of your module"));
             }
             $moduleDirectory = $moduleFiles['directories'][0];
             $this->modulePath = sprintf('%s/%s', $modulePath, $moduleDirectory);
             $moduleValidator = new ModuleValidator($this->modulePath);
             $moduleValidator->validate();
             $this->moduleDefinition = $moduleValidator->getModuleDefinition();
         } catch (Exception $ex) {
             $context->addViolation(Translator::getInstance()->trans("The module is not valid : %message", ['%message' => $ex->getMessage()]));
         }
     }
 }
Example #2
0
 /**
  * @dataProvider validatorProvider
  */
 public function testValidator($path, $exceptionExpected, $exceptionMessage)
 {
     $modulePath = __DIR__ . "/" . $path;
     /** @var \Exception $exception */
     $exception = null;
     try {
         $moduleValidator = new ModuleValidator($modulePath, $this->getStubTranslator("opiopi"));
         $moduleValidator->validate(true);
     } catch (\Exception $ex) {
         $exception = $ex;
     }
     if (null !== $exceptionExpected) {
         $this->assertInstanceOf($exceptionExpected, $exception, $path . " module should return exception " . $exceptionExpected);
         if (null !== $exceptionMessage) {
             $this->assertNotEmpty($exception->getMessage(), $path . " module exception should not be empty");
             $this->assertTrue(false !== strpos($exception->getMessage(), $exceptionMessage), $path . " module exception should contain : " . $exceptionMessage);
         }
     } else {
         $this->assertNull($exception, $path . " module should not return exception [" . $exception->getMessage() . ']');
     }
 }
Example #3
0
 /**
  * Get modules having current module in dependence and deactivate it if needed
  *
  * @param ModuleToggleActivationEvent $event
  *
  */
 public function recursiveDeactivation(ModuleToggleActivationEvent $event)
 {
     if (null !== ($module = ModuleQuery::create()->findPk($event->getModuleId()))) {
         $moduleValidator = new ModuleValidator($module->getAbsoluteBaseDir());
         $dependencies = $moduleValidator->getModulesDependOf(true);
         foreach ($dependencies as $defMod) {
             $submodule = ModuleQuery::create()->findOneByCode($defMod["code"]);
             if ($submodule && $submodule->getActivate() == BaseModule::IS_ACTIVATED) {
                 $subevent = new ModuleToggleActivationEvent($submodule->getId());
                 $subevent->setRecursive(true);
                 $event->getDispatcher()->dispatch(TheliaEvents::MODULE_TOGGLE_ACTIVATION, $subevent);
             }
         }
     }
 }
Example #4
0
 /**
  * Get an array of modules that depend of the current module
  *
  * @param  bool|null $active if true only search in activated module, false only deactivated and null on all modules
  * @return array     array of array with `code` which is the module code that depends of this current module and
  *                   `version` which is the required version of current module
  */
 public function getModulesDependOf($active = true)
 {
     $code = $this->getModuleDefinition()->getCode();
     $query = ModuleQuery::create();
     $dependantModules = [];
     if (true === $active) {
         $query->findByActivate(1);
     } elseif (false === $active) {
         $query->findByActivate(0);
     }
     $modules = $query->find();
     /** @var Module $module */
     foreach ($modules as $module) {
         try {
             $validator = new ModuleValidator($module->getAbsoluteBaseDir());
             $definition = $validator->getModuleDefinition();
             $dependencies = $definition->getDependencies();
             if (count($dependencies) > 0) {
                 foreach ($dependencies as $dependency) {
                     if ($dependency[0] == $code) {
                         $dependantModules[] = ['code' => $definition->getCode(), 'version' => $dependency[1]];
                         break;
                     }
                 }
             }
         } catch (\Exception $ex) {
         }
     }
     return $dependantModules;
 }
Example #5
0
 /**
  * Check if module can be deactivated safely because other modules
  * could have dependencies to this module
  *
  * @param  \Thelia\Model\Module $module
  * @return bool true if the module can be deactivated, otherwise false
  */
 private function checkDeactivation($module)
 {
     $moduleValidator = new ModuleValidator($module->getAbsoluteBaseDir());
     $modules = $moduleValidator->getModulesDependOf();
     if (count($modules) > 0) {
         $moduleList = implode(', ', array_column($modules, 'code'));
         $message = count($modules) == 1 ? Translator::getInstance()->trans('%s has dependency to module %s. You have to deactivate this module before.') : Translator::getInstance()->trans('%s have dependencies to module %s. You have to deactivate these modules before.');
         throw new ModuleException(sprintf($message, $moduleList, $moduleValidator->getModuleDefinition()->getCode()));
     }
     return true;
 }