public function testConfiguration() { $this->assertEquals('en_GB', $this->config->getCode()); $this->assertEquals('Magento', $this->config->getVendor()); $this->assertEquals('en_GB', $this->config->getPackage()); $this->assertEquals('100', $this->config->getSortOrder()); $this->assertEquals([['vendor' => 'oxford-university', 'package' => 'en_us'], ['vendor' => 'oxford-university', 'package' => 'en_gb']], $this->config->getUses()); }
public function testConfiguration() { $languageXml = file_get_contents(__DIR__ . '/_files/language.xml'); $languageConfig = new Config($languageXml); $this->assertEquals('en_GB', $languageConfig->getCode()); $this->assertEquals('magento', $languageConfig->getVendor()); $this->assertEquals('en_gb', $languageConfig->getPackage()); $this->assertEquals('100', $languageConfig->getSortOrder()); $this->assertEquals([['vendor' => 'oxford-university', 'package' => 'en_us'], ['vendor' => 'oxford-university', 'package' => 'en_gb']], $languageConfig->getUses()); }
/** * Line up (flatten) a tree of inheritance of language packs * * Record level of recursion (level of inheritance) for further use in sorting * * @param Config $languageConfig * @param array $result * @param int $level * @return void */ private function collectInheritedPacks($languageConfig, &$result, $level = 0) { $packKey = implode('|', [$languageConfig->getVendor(), $languageConfig->getPackage()]); if (!isset($result[$packKey])) { $result[$packKey] = ['inheritance_level' => $level, 'sort_order' => $languageConfig->getSortOrder(), 'language' => $languageConfig]; foreach ($languageConfig->getUses() as $reuse) { if (isset($this->packList[$reuse['vendor']][$reuse['package']])) { $parentLanguageConfig = $this->packList[$reuse['vendor']][$reuse['package']]; $this->collectInheritedPacks($parentLanguageConfig, $result, $level + 1); } } } }
/** * @param Config $languageConfig * @param array $languageList * @param bool $isCircular * @return array|null */ private function collectCircularInheritance(Config $languageConfig, &$languageList = [], &$isCircular = false) { $packKey = implode('|', [$languageConfig->getVendor(), $languageConfig->getPackage()]); if (isset($languageList[$packKey])) { $isCircular = true; } else { $languageList[$packKey] = $languageConfig; foreach ($languageConfig->getUses() as $reuse) { if (isset($this->packs[$reuse['vendor']][$reuse['package']])) { $this->collectCircularInheritance($this->packs[$reuse['vendor']][$reuse['package']], $languageList, $isCircular); } } } return $isCircular ? $languageList : []; }
/** * Line up (flatten) a tree of inheritance of language packs * * Record level of recursion (level of inheritance) for further use in sorting * * @param Config $languageConfig * @param array $result * @param int $level * @param array $visitedPacks * @return void */ private function collectInheritedPacks($languageConfig, &$result, $level = 0, array &$visitedPacks = []) { $packKey = implode('|', [$languageConfig->getVendor(), $languageConfig->getPackage()]); if (!isset($visitedPacks[$packKey]) && (!isset($result[$packKey]) || $result[$packKey]['inheritance_level'] < $level)) { $visitedPacks[$packKey] = true; $result[$packKey] = ['inheritance_level' => $level, 'sort_order' => $languageConfig->getSortOrder(), 'language' => $languageConfig, 'key' => $packKey]; foreach ($languageConfig->getUses() as $reuse) { if (isset($this->packList[$reuse['vendor']][$reuse['package']])) { $parentLanguageConfig = $this->packList[$reuse['vendor']][$reuse['package']]; $this->collectInheritedPacks($parentLanguageConfig, $result, $level + 1, $visitedPacks); } } } }