summaryrefslogtreecommitdiff
path: root/bin/wiki/vendor/addwiki/mediawiki-api/src/Service/NamespaceGetter.php
diff options
context:
space:
mode:
authorYaco <franco@reevo.org>2020-06-04 11:01:00 -0300
committerYaco <franco@reevo.org>2020-06-04 11:01:00 -0300
commitfc7369835258467bf97eb64f184b93691f9a9fd5 (patch)
treedaabd60089d2dd76d9f5fb416b005fbe159c799d /bin/wiki/vendor/addwiki/mediawiki-api/src/Service/NamespaceGetter.php
first commit
Diffstat (limited to 'bin/wiki/vendor/addwiki/mediawiki-api/src/Service/NamespaceGetter.php')
-rw-r--r--bin/wiki/vendor/addwiki/mediawiki-api/src/Service/NamespaceGetter.php108
1 files changed, 108 insertions, 0 deletions
diff --git a/bin/wiki/vendor/addwiki/mediawiki-api/src/Service/NamespaceGetter.php b/bin/wiki/vendor/addwiki/mediawiki-api/src/Service/NamespaceGetter.php
new file mode 100644
index 00000000..c3f00030
--- /dev/null
+++ b/bin/wiki/vendor/addwiki/mediawiki-api/src/Service/NamespaceGetter.php
@@ -0,0 +1,108 @@
+<?php
+
+namespace Mediawiki\Api\Service;
+
+use Mediawiki\Api\SimpleRequest;
+use Mediawiki\DataModel\NamespaceInfo;
+
+/**
+ * @access private
+ *
+ * @author gbirke
+ */
+class NamespaceGetter extends Service {
+
+ /**
+ * Find a namespace by its canonical name
+ *
+ * @param string $canonicalName
+ * @return NamespaceInfo|null
+ */
+ public function getNamespaceByCanonicalName( $canonicalName ) {
+ $result = $this->getNamespaceResult()['query'];
+ foreach ( $result['namespaces'] as $nsInfo ) {
+ if ( !empty( $nsInfo['canonical'] ) && $nsInfo['canonical'] === $canonicalName ) {
+ return $this->createNamespaceFromQuery( $nsInfo, $result['namespacealiases'] );
+ }
+ }
+ return null;
+ }
+
+ /**
+ * Find a namespace by its canonical name, local name or namespace alias
+ *
+ * @param string $name
+ * @return NamespaceInfo|null
+ */
+ public function getNamespaceByName( $name ) {
+ $result = $this->getNamespaceResult()['query'];
+ foreach ( $result['namespaces'] as $nsInfo ) {
+ if ( ( !empty( $nsInfo['canonical'] ) && $nsInfo['canonical'] === $name ) ||
+ $nsInfo['*'] === $name ) {
+ return $this->createNamespaceFromQuery( $nsInfo, $result['namespacealiases'] );
+ }
+ }
+ foreach ( $result['namespacealiases'] as $alias ) {
+ if ( $alias['*'] === $name && !empty( $result['namespaces'][$alias['id']] ) ) {
+ return $this->createNamespaceFromQuery(
+ $result['namespaces'][$alias['id']],
+ $result['namespacealiases']
+ );
+ }
+ }
+ return null;
+ }
+
+ /**
+ * @return NamespaceInfo[]
+ */
+ public function getNamespaces() {
+ $namespaces = [];
+ $result = $this->getNamespaceResult()['query'];
+ foreach ( $result['namespaces'] as $nsInfo ) {
+ $namespaces[$nsInfo['id']] = $this->createNamespaceFromQuery(
+ $nsInfo, $result['namespacealiases']
+ );
+ }
+ return $namespaces;
+ }
+
+ private function createNamespaceFromQuery( $nsInfo, $namespaceAliases ) {
+ return new NamespaceInfo(
+ $nsInfo['id'],
+ empty( $nsInfo['canonical'] ) ? '' : $nsInfo['canonical'],
+ $nsInfo['*'],
+ $nsInfo['case'],
+ empty( $nsInfo['defaultcontentmodel'] ) ? null : $nsInfo['defaultcontentmodel'],
+ $this->getAliases( $nsInfo['id'], $namespaceAliases )
+ );
+ }
+
+ /**
+ * @param int $id
+ * @param array $namespaceAliases Alias list, as returned by the API
+ * @return string[]
+ */
+ private function getAliases( $id, $namespaceAliases ) {
+ $aliases = [];
+ foreach ( $namespaceAliases as $alias ) {
+ if ( $alias['id'] === $id ) {
+ $aliases[] = $alias['*'];
+ }
+ }
+ return $aliases;
+ }
+
+ /**
+ * @return array
+ */
+ private function getNamespaceResult() {
+ return $this->api->getRequest( new SimpleRequest(
+ 'query', [
+ 'meta' => 'siteinfo',
+ 'siprop' => 'namespaces|namespacealiases'
+ ]
+ ) );
+ }
+
+}