/** * {@inheritdoc} */ public function getThemeHierarchy(ThemeInterface $theme) { $parents = []; $parentsNames = $theme->getParentsNames(); foreach ($parentsNames as $parentName) { $parents = array_merge($parents, $this->getThemeHierarchy($this->getTheme($parentName))); } return array_merge([$theme], $parents); }
function it_resolves_themes(ThemeRepositoryInterface $themeRepository, ThemeInterface $firstTheme, ThemeInterface $secondTheme) { $firstTheme->getLogicalName()->willReturn("foo/bar1"); $firstTheme->getParentsNames()->willReturn(["foo/bar2"]); $secondTheme->getLogicalName()->willReturn("foo/bar2"); $secondTheme->getParentsNames()->willReturn([]); $themeRepository->findByLogicalName("foo/bar1")->willReturn($firstTheme); $themeRepository->findByLogicalName("foo/bar2")->willReturn($secondTheme); $this->getDependencies($firstTheme)->shouldReturn([$secondTheme]); }
function it_returns_theme_list_in_hierarchized_order(ThemeRepositoryInterface $themeRepository, ThemeInterface $firstTheme, ThemeInterface $secondTheme) { $firstTheme->getName()->willReturn('foo/bar1'); $firstTheme->getParentsNames()->willReturn(['foo/bar2']); $secondTheme->getName()->willReturn('foo/bar2'); $secondTheme->getParentsNames()->willReturn([]); $themeRepository->findOneByName('foo/bar1')->willReturn($firstTheme); $themeRepository->findOneByName('foo/bar2')->willReturn($secondTheme); $this->getThemeHierarchy($firstTheme)->shouldReturn([$firstTheme, $secondTheme]); }
function it_adds_theme_parents_to_context_while_setting_theme(ThemeDependenciesResolverInterface $themeDependenciesResolver, ThemeInterface $firstTheme, ThemeInterface $secondTheme) { $firstTheme->getLogicalName()->willReturn("foo/bar1"); $firstTheme->getParentsNames()->willReturn(["foo/bar2"]); $secondTheme->getLogicalName()->willReturn("foo/bar2"); $secondTheme->getParentsNames()->willReturn([]); $themeDependenciesResolver->getDependencies($firstTheme)->shouldBeCalled()->willReturn([$secondTheme]); $this->setTheme($firstTheme); $this->getThemes()->shouldHaveCount(2); $this->getThemes()->shouldReturn([$firstTheme, $secondTheme]); }
/** * {@inheritdoc} */ public function getDependencies(ThemeInterface $theme) { $parents = []; $parentsNames = $theme->getParentsNames(); foreach ($parentsNames as $parentName) { $parent = $this->themeRepository->findByLogicalName($parentName); if (null === $parent) { throw new \InvalidArgumentException(sprintf('Theme "%s" not found (required by theme "%s")!', $parentName, $theme->getLogicalName()), 0); } $parents = array_merge($parents, [$parent], $this->getDependencies($parent)); } return $parents; }