/**
  * @dataProvider authorsProvider
  * @param $path
  * @param $expectedAuthors
  */
 public function testAuthorsTag($path, $expectedAuthors)
 {
     $modulePath = __DIR__ . "/Authors/" . $path;
     $moduleValidator = new ModuleValidator($modulePath, $this->getStubTranslator());
     $moduleDefinition = $moduleValidator->getModuleDefinition();
     $this->assertEquals($expectedAuthors, count($moduleDefinition->getAuthors()), sprintf("%d author(s) was expected for module %s", $expectedAuthors, $path));
 }
Beispiel #2
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()]));
         }
     }
 }
Beispiel #3
0
 public function testVirtualProductDelivery()
 {
     $modulePath = THELIA_MODULE_DIR . "VirtualProductDelivery";
     $moduleValidator = new ModuleValidator($modulePath, $this->getStubTranslator());
     $moduleDescriptor = $moduleValidator->getModuleDescriptor();
     $this->assertInstanceOf('SimpleXMLElement', $moduleDescriptor);
     $this->assertEquals("2", $moduleValidator->getModuleVersion());
     $moduleDefinition = $moduleValidator->getModuleDefinition();
     $this->assertInstanceOf('Thelia\\Module\\Validator\\ModuleDefinition', $moduleDefinition);
     $this->assertEquals("VirtualProductDelivery", $moduleDefinition->getCode());
     $this->assertEquals("VirtualProductDelivery\\VirtualProductDelivery", $moduleDefinition->getNamespace());
     $this->assertEquals(2, count($moduleDefinition->getLanguages()));
     $this->assertEquals(0, count($moduleDefinition->getDependencies()));
     $this->assertEquals(1, count($moduleDefinition->getAuthors()));
     $this->assertEquals("", $moduleDefinition->getDocumentation());
     $this->assertEquals("", $moduleDefinition->getLogo());
     $this->assertEquals("2.1.0", $moduleDefinition->getTheliaVersion());
     $this->assertTrue(Version::test(Thelia::RELEASE_VERSION, $moduleDefinition->getTheliaVersion(), false, ">="));
     // validate
     $moduleValidator->validate(false);
 }
Beispiel #4
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;
 }
Beispiel #5
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;
 }