function register() { global $wgContLang, $wgNamespaceAliases, $wgDisableCounters; $lib = array('getNsIndex' => array($this, 'getNsIndex'), 'pagesInCategory' => array($this, 'pagesInCategory'), 'pagesInNamespace' => array($this, 'pagesInNamespace'), 'usersInGroup' => array($this, 'usersInGroup'), 'interwikiMap' => array($this, 'interwikiMap')); $info = array('siteName' => $GLOBALS['wgSitename'], 'server' => $GLOBALS['wgServer'], 'scriptPath' => $GLOBALS['wgScriptPath'], 'stylePath' => $GLOBALS['wgStylePath'], 'currentVersion' => SpecialVersion::getVersion()); if (!self::$namespacesCache || self::$namespacesCacheLang !== $wgContLang->getCode()) { $namespaces = array(); $namespacesByName = array(); foreach ($wgContLang->getFormattedNamespaces() as $ns => $title) { $canonical = MWNamespace::getCanonicalName($ns); $namespaces[$ns] = array('id' => $ns, 'name' => $title, 'canonicalName' => strtr($canonical, '_', ' '), 'hasSubpages' => MWNamespace::hasSubpages($ns), 'hasGenderDistinction' => MWNamespace::hasGenderDistinction($ns), 'isCapitalized' => MWNamespace::isCapitalized($ns), 'isContent' => MWNamespace::isContent($ns), 'isIncludable' => !MWNamespace::isNonincludable($ns), 'isMovable' => MWNamespace::isMovable($ns), 'isSubject' => MWNamespace::isSubject($ns), 'isTalk' => MWNamespace::isTalk($ns), 'defaultContentModel' => MWNamespace::getNamespaceContentModel($ns), 'aliases' => array()); if ($ns >= NS_MAIN) { $namespaces[$ns]['subject'] = MWNamespace::getSubject($ns); $namespaces[$ns]['talk'] = MWNamespace::getTalk($ns); $namespaces[$ns]['associated'] = MWNamespace::getAssociated($ns); } else { $namespaces[$ns]['subject'] = $ns; } $namespacesByName[strtr($title, ' ', '_')] = $ns; if ($canonical) { $namespacesByName[$canonical] = $ns; } } $aliases = array_merge($wgNamespaceAliases, $wgContLang->getNamespaceAliases()); foreach ($aliases as $title => $ns) { if (!isset($namespacesByName[$title]) && isset($namespaces[$ns])) { $ct = count($namespaces[$ns]['aliases']); $namespaces[$ns]['aliases'][$ct + 1] = $title; $namespacesByName[$title] = $ns; } } $namespaces[NS_MAIN]['displayName'] = wfMessage('blanknamespace')->inContentLanguage()->text(); self::$namespacesCache = $namespaces; self::$namespacesCacheLang = $wgContLang->getCode(); } $info['namespaces'] = self::$namespacesCache; $info['stats'] = array('pages' => (int) SiteStats::pages(), 'articles' => (int) SiteStats::articles(), 'files' => (int) SiteStats::images(), 'edits' => (int) SiteStats::edits(), 'views' => $wgDisableCounters ? null : (int) SiteStats::views(), 'users' => (int) SiteStats::users(), 'activeUsers' => (int) SiteStats::activeUsers(), 'admins' => (int) SiteStats::numberingroup('sysop')); return $this->getEngine()->registerInterface('mw.site.lua', $lib, $info); }
/** * Returns the name of the default content model to be used for the page * with the given title. * * Note: There should rarely be need to call this method directly. * To determine the actual content model for a given page, use * Title::getContentModel(). * * Which model is to be used by default for the page is determined based * on several factors: * - The global setting $wgNamespaceContentModels specifies a content model * per namespace. * - The hook ContentHandlerDefaultModelFor may be used to override the page's default * model. * - Pages in NS_MEDIAWIKI and NS_USER default to the CSS or JavaScript * model if they end in .js or .css, respectively. * - Pages in NS_MEDIAWIKI default to the wikitext model otherwise. * - The hook TitleIsCssOrJsPage may be used to force a page to use the CSS * or JavaScript model. This is a compatibility feature. The ContentHandlerDefaultModelFor * hook should be used instead if possible. * - The hook TitleIsWikitextPage may be used to force a page to use the * wikitext model. This is a compatibility feature. The ContentHandlerDefaultModelFor * hook should be used instead if possible. * * If none of the above applies, the wikitext model is used. * * Note: this is used by, and may thus not use, Title::getContentModel() * * @since 1.21 * * @param Title $title * * @return string Default model name for the page given by $title */ public static function getDefaultModelFor(Title $title) { // NOTE: this method must not rely on $title->getContentModel() directly or indirectly, // because it is used to initialize the mContentModel member. $ns = $title->getNamespace(); $ext = false; $m = null; $model = MWNamespace::getNamespaceContentModel($ns); // Hook can determine default model if (!wfRunHooks('ContentHandlerDefaultModelFor', array($title, &$model))) { if (!is_null($model)) { return $model; } } // Could this page contain custom CSS or JavaScript, based on the title? $isCssOrJsPage = NS_MEDIAWIKI == $ns && preg_match('!\\.(css|js)$!u', $title->getText(), $m); if ($isCssOrJsPage) { $ext = $m[1]; } // Hook can force JS/CSS wfRunHooks('TitleIsCssOrJsPage', array($title, &$isCssOrJsPage)); // Is this a .css subpage of a user page? $isJsCssSubpage = NS_USER == $ns && !$isCssOrJsPage && preg_match("/\\/.*\\.(js|css)\$/", $title->getText(), $m); if ($isJsCssSubpage) { $ext = $m[1]; } // Is this wikitext, according to $wgNamespaceContentModels or the DefaultModelFor hook? $isWikitext = is_null($model) || $model == CONTENT_MODEL_WIKITEXT; $isWikitext = $isWikitext && !$isCssOrJsPage && !$isJsCssSubpage; // Hook can override $isWikitext wfRunHooks('TitleIsWikitextPage', array($title, &$isWikitext)); if (!$isWikitext) { switch ($ext) { case 'js': return CONTENT_MODEL_JAVASCRIPT; case 'css': return CONTENT_MODEL_CSS; default: return is_null($model) ? CONTENT_MODEL_TEXT : $model; } } // We established that it must be wikitext return CONTENT_MODEL_WIKITEXT; }
protected function appendNamespaces($property) { global $wgContLang; $data = array(); foreach ($wgContLang->getFormattedNamespaces() as $ns => $title) { $data[$ns] = array('id' => intval($ns), 'case' => MWNamespace::isCapitalized($ns) ? 'first-letter' : 'case-sensitive'); ApiResult::setContent($data[$ns], $title); $canonical = MWNamespace::getCanonicalName($ns); if (MWNamespace::hasSubpages($ns)) { $data[$ns]['subpages'] = ''; } if ($canonical) { $data[$ns]['canonical'] = strtr($canonical, '_', ' '); } if (MWNamespace::isContent($ns)) { $data[$ns]['content'] = ''; } if (MWNamespace::isNonincludable($ns)) { $data[$ns]['nonincludable'] = ''; } $contentmodel = MWNamespace::getNamespaceContentModel($ns); if ($contentmodel) { $data[$ns]['defaultcontentmodel'] = $contentmodel; } } $this->getResult()->setIndexedTagName($data, 'ns'); return $this->getResult()->addValue('query', $property, $data); }