private function tryToMatchDataItemForWikiNamespaceUri($uri) { $dataItem = null; $localName = substr($uri, strlen($this->wikiNamespace)); $dbKey = rawurldecode(Escaper::decodeUri($localName)); $parts = explode('#', $dbKey, 2); if (count($parts) == 2) { $dbKey = $parts[0]; $subobjectname = $parts[1]; } else { $subobjectname = ''; } $parts = explode(':', $dbKey, 2); // No extra NS if (count($parts) == 1) { return new DIWikiPage($dbKey, NS_MAIN, '', $subobjectname); } $namespaceId = $this->tryToMatchNamespaceName($parts[0]); if ($namespaceId != -1 && $namespaceId !== false) { $dataItem = new DIWikiPage($parts[1], $namespaceId, '', $subobjectname); } else { $title = Title::newFromDBkey($dbKey); if ($title !== null) { $dataItem = new DIWikiPage($title->getDBkey(), $title->getNamespace(), $title->getInterwiki(), $subobjectname); } } return $dataItem; }
public function diWikiPageProvider() { // Constant $wiki = \SMWExporter::getInstance()->getNamespaceUri('wiki'); $property = \SMWExporter::getInstance()->getNamespaceUri('property'); #0 $provider[] = array(new DIWikiPage('Foo', NS_MAIN, '', ''), '', array('type' => Element::TYPE_NSRESOURCE, 'uri' => "Foo|{$wiki}|wiki", 'dataitem' => array('type' => 9, 'item' => 'Foo#0#'))); #1 $provider[] = array(new DIWikiPage('Foo', NS_MAIN, 'bar', ''), '', array('type' => Element::TYPE_NSRESOURCE, 'uri' => "bar-3AFoo|{$wiki}|wiki", 'dataitem' => array('type' => 9, 'item' => 'Foo#0#bar'))); #2 $provider[] = array(new DIWikiPage('Foo', NS_MAIN, 'bar', '1234'), '', array('type' => Element::TYPE_NSRESOURCE, 'uri' => "bar-3AFoo-231234|{$wiki}|wiki", 'dataitem' => array('type' => 9, 'item' => 'Foo#0#bar#1234'))); #3 Extra modififer doesn't not alter the object when a subobject is used $provider[] = array(new DIWikiPage('Foo', NS_MAIN, 'bar', '1234'), 'abc', array('type' => Element::TYPE_NSRESOURCE, 'uri' => "bar-3AFoo-231234|{$wiki}|wiki", 'dataitem' => array('type' => 9, 'item' => 'Foo#0#bar#1234'))); #4 $provider[] = array(new DIWikiPage('Foo', SMW_NS_PROPERTY, '', ''), '', array('type' => Element::TYPE_NSRESOURCE, 'uri' => "Foo|{$property}|property", 'dataitem' => array('type' => 9, 'item' => 'Foo#102#'))); #5 $provider[] = array(new DIWikiPage('Foo', SMW_NS_PROPERTY, '', ''), true, array('type' => Element::TYPE_NSRESOURCE, 'uri' => "Foo-23aux|{$property}|property", 'dataitem' => array('type' => 9, 'item' => 'Foo#102#'))); #6 $name = Escaper::encodePage(new DIWikiPage('-Foo', SMW_NS_PROPERTY, '', '')); $provider[] = array(new DIWikiPage('-Foo', SMW_NS_PROPERTY, '', ''), true, array('type' => Element::TYPE_NSRESOURCE, 'uri' => "{$name}-23aux|{$wiki}|wiki", 'dataitem' => array('type' => 9, 'item' => '-Foo#102#'))); return $provider; }
function execute($query) { global $wgOut; if (is_null($query) || trim($query) === '') { if (stristr($_SERVER['HTTP_ACCEPT'], 'RDF')) { $wgOut->redirect(SpecialPage::getTitleFor('ExportRDF')->getFullURL(array('stats' => '1')), '303'); } else { $this->setHeaders(); $wgOut->addHTML('<p>' . wfMessage('smw_uri_doc', 'http://www.w3.org/2001/tag/issues.html#httpRange-14')->parse() . '</p>'); } } else { $query = Escaper::decodeUri($query); $query = str_replace('_', '%20', $query); $query = urldecode($query); $title = Title::newFromText($query); // In case the title doesn't exists throw an error page if ($title === null) { $wgOut->showErrorPage('badtitle', 'badtitletext'); } else { $wgOut->redirect(stristr($_SERVER['HTTP_ACCEPT'], 'RDF') ? SpecialPage::getTitleFor('ExportRDF', $title->getPrefixedText())->getFullURL(array('xmlmime' => 'rdf')) : $title->getFullURL(), '303'); } } }
private function defineElementsForDiWikiPage(DIWikiPage $diWikiPage, $modifier) { $localName = ''; if ($diWikiPage->getNamespace() === SMW_NS_PROPERTY) { $namespace = Exporter::getInstance()->getNamespaceUri('property'); $namespaceId = 'property'; $localName = Escaper::encodeUri(rawurlencode($diWikiPage->getDBkey())); } if ($localName === '' || in_array($localName[0], array('-', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9'))) { $namespace = Exporter::getInstance()->getNamespaceUri('wiki'); $namespaceId = 'wiki'; $localName = Escaper::encodePage($diWikiPage); } // "-23$modifier" where "-23" is the URI encoding of "#" (a symbol not // occuring in MW titles). if ($modifier !== '') { $localName .= '-23' . Escaper::encodeUri(rawurlencode($modifier)); } return array($localName, $namespace, $namespaceId); }
/** * @return string */ public function decodeURI($uri) { return Escaper::decodeUri($uri); }
/** * @dataProvider decodeUriProvider */ public function testDecodeUri($uri, $expected) { $this->assertEquals($expected, Escaper::decodeUri($uri)); $this->assertEquals($uri, Escaper::encodeUri(Escaper::decodeUri($uri))); }
public function testExportSubobject() { $semanticData = $this->semanticDataFactory->newEmptySemanticData(__METHOD__); $subobject = new Subobject($semanticData->getSubject()->getTitle()); $subobject->setEmptyContainerForId('Foo'); $semanticData->addPropertyObjectValue($subobject->getProperty(), $subobject->getContainer()); $exportData = Exporter::getInstance()->makeExportData($semanticData); $expectedProperty = new ExpNsResource($this->transformPropertyLabelToAuxiliary($subobject->getProperty()), Exporter::getInstance()->getNamespaceUri('property'), 'property', new DIWikiPage('Has_subobject', SMW_NS_PROPERTY)); $this->assertTrue(Exporter::getInstance()->hasHelperExpElement($subobject->getProperty())); $this->assertCount(1, $exportData->getValues($expectedProperty)); $this->exportDataValidator->assertThatExportDataContainsProperty($expectedProperty, $exportData); $expectedResource = new ExpNsResource(Escaper::encodePage($subobject->getSemanticData()->getSubject()) . '-23' . 'Foo', Exporter::getInstance()->getNamespaceUri('wiki'), 'wiki', $subobject->getSemanticData()->getSubject()); $this->exportDataValidator->assertThatExportDataContainsResource($expectedResource, $expectedProperty, $exportData); }
/** * Try to find an SMWDataItem that the given SMWExpElement might * represent. Returns null if this attempt failed. * * @param SMWExpElement $expElement * @return SMWDataItem or null */ public static function findDataItemForExpElement(SMWExpElement $expElement) { global $wgContLang; $dataItem = null; if ($expElement instanceof SMWExpResource) { $uri = $expElement->getUri(); $wikiNamespace = self::getNamespaceUri('wiki'); if (strpos($uri, $wikiNamespace) === 0) { $localName = substr($uri, strlen($wikiNamespace)); $dbKey = rawurldecode(Escaper::decodeUri($localName)); $parts = explode('#', $dbKey, 2); if (count($parts) == 2) { $dbKey = $parts[0]; $subobjectname = $parts[1]; } else { $subobjectname = ''; } $parts = explode(':', $dbKey, 2); if (count($parts) == 1) { $dataItem = new SMWDIWikiPage($dbKey, NS_MAIN, '', $subobjectname); } else { // try the by far most common cases directly before using Title $namespaceName = str_replace('_', ' ', $parts[0]); $namespaceId = -1; foreach (array(SMW_NS_PROPERTY, NS_CATEGORY, NS_USER, NS_HELP) as $nsId) { if ($namespaceName == $wgContLang->getNsText($nsId)) { $namespaceId = $nsId; break; } } if ($namespaceId != -1) { $dataItem = new SMWDIWikiPage($parts[1], $namespaceId, '', $subobjectname); } else { $title = Title::newFromDBkey($dbKey); if (!is_null($title)) { $dataItem = new SMWDIWikiPage($title->getDBkey(), $title->getNamespace(), $title->getInterwiki(), $subobjectname); } } } } // else: not in wiki namespace -- TODO: this could be an imported URI } else { // TODO (currently not needed, but will be useful for displaying external SPARQL results) } return $dataItem; }
public function testRedirectTragetForDBLookupWithMultipleEntriesForcesNewResource() { $propertyPage = new DIWikiPage('Foo', SMW_NS_PROPERTY); $resource = new ExpNsResource('Foo', Exporter::getInstance()->getNamespaceUri('property'), 'property', $propertyPage); $repositoryConnection = $this->createRepositoryConnectionMockToUse(array($resource, $resource)); $instance = new RedirectLookup($repositoryConnection); $instance->reset(); $dataItem = new DIWikiPage('Foo', 1, '', ''); $expNsResource = new ExpNsResource('Foo', 'Bar', '', $dataItem); $exists = null; $targetResource = $instance->findRedirectTargetResource($expNsResource, $exists); $this->assertNotSame($expNsResource, $targetResource); $expectedResource = new ExpNsResource(Escaper::encodePage($propertyPage), Exporter::getInstance()->getNamespaceUri('wiki'), 'wiki'); $this->assertEquals($expectedResource, $targetResource); $this->assertTrue($exists); }