/** * @param Parser $parser * @param PPFrame $frame * @param array $args * * @return array Wikitext */ public function runPropertyParserFunction(Parser $parser, PPFrame $frame, array $args) { $propertyLabelOrId = $frame->expand($args[0]); unset($args[0]); // Create a child frame, so that we can access arguments by name. $childFrame = $frame->newChild($args, $parser->getTitle()); $entityId = $this->getEntityIdForStatementListProvider($parser, $childFrame, $args); if ($entityId === null) { return $this->buildResult(''); } $renderer = $this->rendererFactory->newRendererFromParser($parser); $rendered = $renderer->render($entityId, $propertyLabelOrId); $result = $this->buildResult($rendered); // Track usage of "other" (that is, not label/title/sitelinks) data from the item. $usageAcc = new ParserOutputUsageAccumulator($parser->getOutput()); $usageAcc->addOtherUsage($entityId); return $result; }
/** * @dataProvider allowDataAccessInUserLanguageProvider */ public function testNewRendererFromParser_languageOption($allowDataAccessInUserLanguage) { $idResolver = $this->getMockBuilder('Wikibase\\Client\\DataAccess\\PropertyIdResolver')->disableOriginalConstructor()->getMock(); $formatterFactory = $this->getMockBuilder('Wikibase\\Lib\\OutputFormatSnakFormatterFactory')->disableOriginalConstructor()->getMock(); $self = $this; $formatterFactory->expects($this->once())->method('getSnakFormatter')->will($this->returnCallback(function ($format, FormatterOptions $options) use($self, $allowDataAccessInUserLanguage) { $self->assertSame($allowDataAccessInUserLanguage ? 'es' : 'de', $options->getOption(ValueFormatter::OPT_LANG)); return $self->getMock('Wikibase\\Lib\\SnakFormatter'); })); $factory = new StatementGroupRendererFactory($idResolver, new SnaksFinder(), new LanguageFallbackChainFactory(), $formatterFactory, $this->getMock('Wikibase\\DataModel\\Services\\Lookup\\EntityLookup'), $allowDataAccessInUserLanguage); $factory->newRendererFromParser($this->getParser('de', 'es')); }