private function tryToUseSubpageHierarchyFallback($subject, $parents) { if ($parents !== array() || !$this->bySubpageLinksFinder->canUseSubpageDiscoveryForFallback()) { return $parents; } $this->bySubpageLinksFinder->tryToFindLinksFor($subject); return $this->bySubpageLinksFinder->getParents(); }
private function addCallbackHandlers($store, $configuration) { $propertyRegistry = new PropertyRegistry(); /** * @see https://github.com/SemanticMediaWiki/SemanticMediaWiki/blob/master/docs/technical/hooks.md */ $this->handlers['SMW::Property::initProperties'] = function () use($propertyRegistry) { return $propertyRegistry->register(); }; /** * @see https://www.mediawiki.org/wiki/Manual:Hooks/SkinTemplateOutputPageBeforeExec */ $this->handlers['SkinTemplateOutputPageBeforeExec'] = function (&$skin, &$template) use($store, $configuration) { $bySubpageLinksFinder = new BySubpageLinksFinder(); $bySubpageLinksFinder->setSubpageDiscoverySupportState($configuration['useSubpageFinderFallback']); $byPropertyHierarchicalLinksFinder = new ByPropertyHierarchicalLinksFinder($store); $byPropertyHierarchicalLinksFinder->setFindClosestDescendantState($configuration['tryToFindClosestDescendant']); $byPropertyHierarchicalLinksFinder->setPropertySearchPatternByNamespace($configuration['propertySearchPatternByNamespace']); $htmlBreadcrumbLinksBuilder = new HtmlBreadcrumbLinksBuilder($byPropertyHierarchicalLinksFinder, $bySubpageLinksFinder); $htmlBreadcrumbLinksBuilder->setLinker(new DummyLinker()); $htmlBreadcrumbLinksBuilder->setBreadcrumbTrailStyleClass($configuration['breadcrumbTrailStyleClass']); $htmlBreadcrumbLinksBuilder->setBreadcrumbDividerStyleClass($configuration['breadcrumbDividerStyleClass']); $skinTemplateOutputModifier = new SkinTemplateOutputModifier($htmlBreadcrumbLinksBuilder); $skinTemplateOutputModifier->modifyTemplate($template); $skinTemplateOutputModifier->modifyOutput($skin->getOutput()); return true; }; /** * @see https://www.mediawiki.org/wiki/Manual:Hooks/BeforePageDisplay */ $this->handlers['BeforePageDisplay'] = function (&$output, &$skin) use($configuration) { $pageDisplayOutputModifier = new PageDisplayOutputModifier(); $pageDisplayOutputModifier->setHideSubpageParentState($configuration['hideSubpageParent']); $pageDisplayOutputModifier->setSubpageByNamespace($configuration['wgNamespacesWithSubpages']); $pageDisplayOutputModifier->modifyOutput($output); return true; }; }
/** * @dataProvider titleProvider */ public function testFindParentBreadcrumbs($title, $count, $expected) { $subject = DIWikiPage::newFromTitle(Title::newFromText($title)); $instance = new BySubpageLinksFinder(); $instance->setSubpageDiscoverySupportState(true); $this->assertEmpty($instance->getParents()); $instance->tryToFindLinksFor($subject); $this->assertCount($count, $instance->getParents()); $this->assertEquals($expected, $instance->getParents()); }