/** * @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)); }
/** * 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()])); } } }
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); }
/** * 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; }
/** * 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; }