/** * Set up basic search parameters from the request and user settings. * Typically you'll pass $wgRequest and $wgUser. * * @param WebRequest $request * @param User $user * @public */ function __construct(&$request, &$user) { list($this->limit, $this->offset) = $request->getLimitOffset(20, 'searchlimit'); $this->mPrefix = $request->getVal('prefix', ''); # Extract requested namespaces $this->namespaces = $this->powerSearch($request); if (empty($this->namespaces)) { $this->namespaces = SearchEngine::userNamespaces($user); } $this->searchRedirects = $request->getcheck('redirs') ? true : false; $this->searchAdvanced = $request->getVal('advanced'); $this->active = 'advanced'; $this->sk = $user->getSkin(); $this->didYouMeanHtml = ''; # html of did you mean... link $this->fulltext = $request->getVal('fulltext'); }
/** * Make a <script> tag containing global variables * @param array $data Associative array containing one element: * skinname => the skin name * The odd calling convention is for backwards compatibility */ static function makeGlobalVariablesScript($data) { global $wgScript, $wgStylePath, $wgUser; global $wgArticlePath, $wgScriptPath, $wgServer, $wgContLang, $wgLang; global $wgTitle, $wgCanonicalNamespaceNames, $wgOut, $wgArticle; global $wgBreakFrames, $wgRequest, $wgVariantArticlePath, $wgActionPaths; global $wgUseAjax, $wgAjaxWatch; global $wgVersion, $wgEnableAPI, $wgEnableWriteAPI; global $wgRestrictionTypes, $wgLivePreview; global $wgMWSuggestTemplate, $wgDBname, $wgEnableMWSuggest; $ns = $wgTitle->getNamespace(); $nsname = isset($wgCanonicalNamespaceNames[$ns]) ? $wgCanonicalNamespaceNames[$ns] : $wgTitle->getNsText(); $separatorTransTable = $wgContLang->separatorTransformTable(); $separatorTransTable = $separatorTransTable ? $separatorTransTable : array(); $compactSeparatorTransTable = array(implode("\t", array_keys($separatorTransTable)), implode("\t", $separatorTransTable)); $digitTransTable = $wgContLang->digitTransformTable(); $digitTransTable = $digitTransTable ? $digitTransTable : array(); $compactDigitTransTable = array(implode("\t", array_keys($digitTransTable)), implode("\t", $digitTransTable)); $vars = array('skin' => $data['skinname'], 'stylepath' => $wgStylePath, 'wgArticlePath' => $wgArticlePath, 'wgScriptPath' => $wgScriptPath, 'wgScript' => $wgScript, 'wgVariantArticlePath' => $wgVariantArticlePath, 'wgActionPaths' => (object) $wgActionPaths, 'wgServer' => $wgServer, 'wgCanonicalNamespace' => $nsname, 'wgCanonicalSpecialPageName' => SpecialPage::resolveAlias($wgTitle->getDBkey()), 'wgNamespaceNumber' => $wgTitle->getNamespace(), 'wgPageName' => $wgTitle->getPrefixedDBKey(), 'wgTitle' => $wgTitle->getText(), 'wgAction' => $wgRequest->getText('action', 'view'), 'wgArticleId' => $wgTitle->getArticleId(), 'wgIsArticle' => $wgOut->isArticle(), 'wgUserName' => $wgUser->isAnon() ? NULL : $wgUser->getName(), 'wgUserGroups' => $wgUser->isAnon() ? NULL : $wgUser->getEffectiveGroups(), 'wgUserLanguage' => $wgLang->getCode(), 'wgContentLanguage' => $wgContLang->getCode(), 'wgBreakFrames' => $wgBreakFrames, 'wgCurRevisionId' => isset($wgArticle) ? $wgArticle->getLatest() : 0, 'wgVersion' => $wgVersion, 'wgEnableAPI' => $wgEnableAPI, 'wgEnableWriteAPI' => $wgEnableWriteAPI, 'wgSeparatorTransformTable' => $compactSeparatorTransTable, 'wgDigitTransformTable' => $compactDigitTransTable); if ($wgUseAjax && $wgEnableMWSuggest && !$wgUser->getOption('disablesuggest', false)) { $vars['wgMWSuggestTemplate'] = SearchEngine::getMWSuggestTemplate(); $vars['wgDBname'] = $wgDBname; $vars['wgSearchNamespaces'] = SearchEngine::userNamespaces($wgUser); $vars['wgMWSuggestMessages'] = array(wfMsg('search-mwsuggest-enabled'), wfMsg('search-mwsuggest-disabled')); } foreach ($wgRestrictionTypes as $type) { $vars['wgRestriction' . ucfirst($type)] = $wgTitle->getRestrictions($type); } if ($wgLivePreview && $wgUser->getOption('uselivepreview')) { $vars['wgLivepreviewMessageLoading'] = wfMsg('livepreview-loading'); $vars['wgLivepreviewMessageReady'] = wfMsg('livepreview-ready'); $vars['wgLivepreviewMessageFailed'] = wfMsg('livepreview-failed'); $vars['wgLivepreviewMessageError'] = wfMsg('livepreview-error'); } if ($wgOut->isArticleRelated() && $wgUseAjax && $wgAjaxWatch && $wgUser->isLoggedIn()) { $msgs = (object) array(); foreach (array('watch', 'unwatch', 'watching', 'unwatching') as $msgName) { $msgs->{$msgName . 'Msg'} = wfMsg($msgName); } $vars['wgAjaxWatch'] = $msgs; } wfRunHooks('MakeGlobalVariablesScript', array(&$vars)); return self::makeVariablesScript($vars); }
/** * Set up basic search parameters from the request and user settings. * * @see tests/phpunit/includes/specials/SpecialSearchTest.php */ public function load() { $request = $this->getRequest(); list( $this->limit, $this->offset ) = $request->getLimitOffset( 20, 'searchlimit' ); $this->mPrefix = $request->getVal( 'prefix', '' ); $user = $this->getUser(); # Extract manually requested namespaces $nslist = $this->powerSearch( $request ); if ( !count( $nslist ) ) { # Fallback to user preference $nslist = SearchEngine::userNamespaces( $user ); } $profile = null; if ( !count( $nslist ) ) { $profile = 'default'; } $profile = $request->getVal( 'profile', $profile ); $profiles = $this->getSearchProfiles(); if ( $profile === null ) { // BC with old request format $profile = 'advanced'; foreach ( $profiles as $key => $data ) { if ( $nslist === $data['namespaces'] && $key !== 'advanced' ) { $profile = $key; } } $this->namespaces = $nslist; } elseif ( $profile === 'advanced' ) { $this->namespaces = $nslist; } else { if ( isset( $profiles[$profile]['namespaces'] ) ) { $this->namespaces = $profiles[$profile]['namespaces']; } else { // Unknown profile requested $profile = 'default'; $this->namespaces = $profiles['default']['namespaces']; } } // Redirects defaults to true, but we don't know whether it was ticked of or just missing $default = $request->getBool( 'profile' ) ? 0 : 1; $this->searchRedirects = $request->getBool( 'redirs', $default ) ? 1 : 0; $this->didYouMeanHtml = ''; # html of did you mean... link $this->fulltext = $request->getVal( 'fulltext' ); $this->profile = $profile; }
/** * Set up basic search parameters from the request and user settings. * * @see tests/phpunit/includes/specials/SpecialSearchTest.php */ public function load() { $request = $this->getRequest(); list($this->limit, $this->offset) = $request->getLimitOffset(20, ''); $this->mPrefix = $request->getVal('prefix', ''); $user = $this->getUser(); # Extract manually requested namespaces $nslist = $this->powerSearch($request); if (!count($nslist)) { # Fallback to user preference $nslist = SearchEngine::userNamespaces($user); } $profile = null; if (!count($nslist)) { $profile = 'default'; } $profile = $request->getVal('profile', $profile); $profiles = $this->getSearchProfiles(); if ($profile === null) { // BC with old request format $profile = 'advanced'; foreach ($profiles as $key => $data) { if ($nslist === $data['namespaces'] && $key !== 'advanced') { $profile = $key; } } $this->namespaces = $nslist; } elseif ($profile === 'advanced') { $this->namespaces = $nslist; } else { if (isset($profiles[$profile]['namespaces'])) { $this->namespaces = $profiles[$profile]['namespaces']; } else { // Unknown profile requested $profile = 'default'; $this->namespaces = $profiles['default']['namespaces']; } } $this->fulltext = $request->getVal('fulltext'); $this->profile = $profile; }
/** * Get an array containing the variables to be set in mw.config in JavaScript. * * DO NOT CALL THIS FROM OUTSIDE OF THIS CLASS OR Skin::makeGlobalVariablesScript(). * This is only public until that function is removed. You have been warned. * * Do not add things here which can be evaluated in ResourceLoaderStartupScript * - in other words, page-indendent/site-wide variables (without state). * You will only be adding bloat to the html page and causing page caches to * have to be purged on configuration changes. */ public function getJSVars() { global $wgUseAjax, $wgEnableMWSuggest, $wgContLang; $title = $this->getTitle(); $ns = $title->getNamespace(); $nsname = MWNamespace::exists($ns) ? MWNamespace::getCanonicalName($ns) : $title->getNsText(); if ($ns == NS_SPECIAL) { list($canonicalName, ) = SpecialPageFactory::resolveAlias($title->getDBkey()); } else { $canonicalName = false; # bug 21115 } $vars = array('wgCanonicalNamespace' => $nsname, 'wgCanonicalSpecialPageName' => $canonicalName, 'wgNamespaceNumber' => $title->getNamespace(), 'wgPageName' => $title->getPrefixedDBKey(), 'wgTitle' => $title->getText(), 'wgCurRevisionId' => $title->getLatestRevID(), 'wgArticleId' => $title->getArticleId(), 'wgIsArticle' => $this->isArticle(), 'wgAction' => $this->getRequest()->getText('action', 'view'), 'wgUserName' => $this->getUser()->isAnon() ? null : $this->getUser()->getName(), 'wgUserGroups' => $this->getUser()->getEffectiveGroups(), 'wgCategories' => $this->getCategories(), 'wgBreakFrames' => $this->getFrameOptions() == 'DENY'); if ($wgContLang->hasVariants()) { $vars['wgUserVariant'] = $wgContLang->getPreferredVariant(); } foreach ($title->getRestrictionTypes() as $type) { $vars['wgRestriction' . ucfirst($type)] = $title->getRestrictions($type); } if ($wgUseAjax && $wgEnableMWSuggest && !$this->getUser()->getOption('disablesuggest', false)) { $vars['wgSearchNamespaces'] = SearchEngine::userNamespaces($this->getUser()); } if ($title->isMainPage()) { $vars['wgIsMainPage'] = true; } // Allow extensions to add their custom variables to the mw.config map. // Use the 'ResourceLoaderGetConfigVars' hook if the variable is not // page-dependant but site-wide (without state). // Alternatively, you may want to use OutputPage->addJsConfigVars() instead. wfRunHooks('MakeGlobalVariablesScript', array(&$vars)); // Merge in variables from addJsConfigVars last return array_merge($vars, $this->mJsConfigVars); }
/** * Make a <script> tag containing global variables * @param $skinName string Name of the skin * The odd calling convention is for backwards compatibility * @todo FIXME: Make this not depend on $wgTitle! * * Do not add things here which can be evaluated in ResourceLoaderStartupScript - in other words, without state. * You will only be adding bloat to the page and causing page caches to have to be purged on configuration changes. */ static function makeGlobalVariablesScript($skinName) { global $wgTitle, $wgUser, $wgRequest, $wgArticle, $wgOut, $wgUseAjax, $wgEnableMWSuggest; $ns = $wgTitle->getNamespace(); $nsname = MWNamespace::exists($ns) ? MWNamespace::getCanonicalName($ns) : $wgTitle->getNsText(); $vars = array('wgCanonicalNamespace' => $nsname, 'wgCanonicalSpecialPageName' => $ns == NS_SPECIAL ? SpecialPage::resolveAlias($wgTitle->getDBkey()) : false, 'wgNamespaceNumber' => $wgTitle->getNamespace(), 'wgPageName' => $wgTitle->getPrefixedDBKey(), 'wgTitle' => $wgTitle->getText(), 'wgAction' => $wgRequest->getText('action', 'view'), 'wgArticleId' => $wgTitle->getArticleId(), 'wgIsArticle' => $wgOut->isArticle(), 'wgUserName' => $wgUser->isAnon() ? null : $wgUser->getName(), 'wgUserGroups' => $wgUser->getEffectiveGroups(), 'wgCurRevisionId' => isset($wgArticle) ? $wgArticle->getLatest() : 0, 'wgCategories' => $wgOut->getCategories(), 'wgBreakFrames' => $wgOut->getFrameOptions() == 'DENY'); foreach ($wgTitle->getRestrictionTypes() as $type) { $vars['wgRestriction' . ucfirst($type)] = $wgTitle->getRestrictions($type); } if ($wgUseAjax && $wgEnableMWSuggest && !$wgUser->getOption('disablesuggest', false)) { $vars['wgSearchNamespaces'] = SearchEngine::userNamespaces($wgUser); } // Allow extensions to add their custom variables to the global JS variables wfRunHooks('MakeGlobalVariablesScript', array(&$vars)); return self::makeVariablesScript($vars); }
/** * Get an array containing the variables to be set in mw.config in JavaScript. * * DO NOT CALL THIS FROM OUTSIDE OF THIS CLASS OR Skin::makeGlobalVariablesScript(). * This is only public until that function is removed. You have been warned. * * Do not add things here which can be evaluated in ResourceLoaderStartupScript * - in other words, page-independent/site-wide variables (without state). * You will only be adding bloat to the html page and causing page caches to * have to be purged on configuration changes. * @return array */ public function getJSVars() { global $wgUseAjax, $wgEnableMWSuggest; $latestRevID = 0; $pageID = 0; $canonicalName = false; # bug 21115 $title = $this->getTitle(); $ns = $title->getNamespace(); $nsname = MWNamespace::exists($ns) ? MWNamespace::getCanonicalName($ns) : $title->getNsText(); // Get the relevant title so that AJAX features can use the correct page name // when making API requests from certain special pages (bug 34972). $relevantTitle = $this->getSkin()->getRelevantTitle(); if ($ns == NS_SPECIAL) { list($canonicalName, ) = SpecialPageFactory::resolveAlias($title->getDBkey()); } elseif ($this->canUseWikiPage()) { $wikiPage = $this->getWikiPage(); $latestRevID = $wikiPage->getLatest(); $pageID = $wikiPage->getId(); } $lang = $title->getPageLanguage(); // Pre-process information $separatorTransTable = $lang->separatorTransformTable(); $separatorTransTable = $separatorTransTable ? $separatorTransTable : array(); $compactSeparatorTransTable = array(implode("\t", array_keys($separatorTransTable)), implode("\t", $separatorTransTable)); $digitTransTable = $lang->digitTransformTable(); $digitTransTable = $digitTransTable ? $digitTransTable : array(); $compactDigitTransTable = array(implode("\t", array_keys($digitTransTable)), implode("\t", $digitTransTable)); $vars = array('wgCanonicalNamespace' => $nsname, 'wgCanonicalSpecialPageName' => $canonicalName, 'wgNamespaceNumber' => $title->getNamespace(), 'wgPageName' => $title->getPrefixedDBKey(), 'wgTitle' => $title->getText(), 'wgCurRevisionId' => $latestRevID, 'wgArticleId' => $pageID, 'wgIsArticle' => $this->isArticle(), 'wgAction' => Action::getActionName($this->getContext()), 'wgUserName' => $this->getUser()->isAnon() ? null : $this->getUser()->getName(), 'wgUserGroups' => $this->getUser()->getEffectiveGroups(), 'wgCategories' => $this->getCategories(), 'wgBreakFrames' => $this->getFrameOptions() == 'DENY', 'wgPageContentLanguage' => $lang->getCode(), 'wgSeparatorTransformTable' => $compactSeparatorTransTable, 'wgDigitTransformTable' => $compactDigitTransTable, 'wgRelevantPageName' => $relevantTitle->getPrefixedDBKey()); if ($lang->hasVariants()) { $vars['wgUserVariant'] = $lang->getPreferredVariant(); } foreach ($title->getRestrictionTypes() as $type) { $vars['wgRestriction' . ucfirst($type)] = $title->getRestrictions($type); } if ($wgUseAjax && $wgEnableMWSuggest && !$this->getUser()->getOption('disablesuggest', false)) { $vars['wgSearchNamespaces'] = SearchEngine::userNamespaces($this->getUser()); } if ($title->isMainPage()) { $vars['wgIsMainPage'] = true; } if ($this->mRedirectedFrom) { $vars['wgRedirectedFrom'] = $this->mRedirectedFrom->getPrefixedDBKey(); } // Allow extensions to add their custom variables to the mw.config map. // Use the 'ResourceLoaderGetConfigVars' hook if the variable is not // page-dependant but site-wide (without state). // Alternatively, you may want to use OutputPage->addJsConfigVars() instead. wfRunHooks('MakeGlobalVariablesScript', array(&$vars, $this)); // Merge in variables from addJsConfigVars last return array_merge($vars, $this->mJsConfigVars); }
/** * Set up basic search parameters from the request and user settings. * Typically you'll pass $wgRequest and $wgUser. * * @param WebRequest $request * @param User $user * @public */ function __construct(&$request, &$user) { list($this->limit, $this->offset) = $request->getLimitOffset(20, 'searchlimit'); $this->mPrefix = $request->getVal('prefix', ''); $this->namespaces = $this->powerSearch($request); if (empty($this->namespaces)) { $this->namespaces = SearchEngine::userNamespaces($user); } $this->searchRedirects = $request->getcheck('redirs') ? true : false; }
/** * Make a <script> tag containing global variables * @param $skinName string Name of the skin * The odd calling convention is for backwards compatibility * @TODO @FIXME Make this not depend on $wgTitle! */ static function makeGlobalVariablesScript($skinName) { if (is_array($skinName)) { # Weird back-compat stuff. $skinName = $skinName['skinname']; } global $wgScript, $wgTitle, $wgStylePath, $wgUser, $wgScriptExtension; global $wgArticlePath, $wgScriptPath, $wgServer, $wgContLang, $wgLang; global $wgOut, $wgArticle; global $wgBreakFrames, $wgRequest, $wgVariantArticlePath, $wgActionPaths; global $wgUseAjax, $wgAjaxWatch; global $wgVersion, $wgEnableAPI, $wgEnableWriteAPI; global $wgRestrictionTypes; global $wgMWSuggestTemplate, $wgDBname, $wgEnableMWSuggest; global $wgSitename; $ns = $wgTitle->getNamespace(); $nsname = MWNamespace::exists($ns) ? MWNamespace::getCanonicalName($ns) : $wgTitle->getNsText(); $separatorTransTable = $wgContLang->separatorTransformTable(); $separatorTransTable = $separatorTransTable ? $separatorTransTable : array(); $compactSeparatorTransTable = array(implode("\t", array_keys($separatorTransTable)), implode("\t", $separatorTransTable)); $digitTransTable = $wgContLang->digitTransformTable(); $digitTransTable = $digitTransTable ? $digitTransTable : array(); $compactDigitTransTable = array(implode("\t", array_keys($digitTransTable)), implode("\t", $digitTransTable)); $mainPage = Title::newFromText(wfMsgForContent('mainpage')); $vars = array('skin' => $skinName, 'stylepath' => $wgStylePath, 'wgUrlProtocols' => wfUrlProtocols(), 'wgArticlePath' => $wgArticlePath, 'wgScriptPath' => $wgScriptPath, 'wgScriptExtension' => $wgScriptExtension, 'wgScript' => $wgScript, 'wgVariantArticlePath' => $wgVariantArticlePath, 'wgActionPaths' => (object) $wgActionPaths, 'wgServer' => $wgServer, 'wgCanonicalNamespace' => $nsname, 'wgCanonicalSpecialPageName' => $ns == NS_SPECIAL ? SpecialPage::resolveAlias($wgTitle->getDBkey()) : false, 'wgNamespaceNumber' => $wgTitle->getNamespace(), 'wgPageName' => $wgTitle->getPrefixedDBKey(), 'wgTitle' => $wgTitle->getText(), 'wgAction' => $wgRequest->getText('action', 'view'), 'wgArticleId' => $wgTitle->getArticleId(), 'wgIsArticle' => $wgOut->isArticle(), 'wgUserName' => $wgUser->isAnon() ? null : $wgUser->getName(), 'wgUserGroups' => $wgUser->isAnon() ? null : $wgUser->getEffectiveGroups(), 'wgUserLanguage' => $wgLang->getCode(), 'wgContentLanguage' => $wgContLang->getCode(), 'wgBreakFrames' => $wgBreakFrames, 'wgCurRevisionId' => isset($wgArticle) ? $wgArticle->getLatest() : 0, 'wgVersion' => $wgVersion, 'wgEnableAPI' => $wgEnableAPI, 'wgEnableWriteAPI' => $wgEnableWriteAPI, 'wgSeparatorTransformTable' => $compactSeparatorTransTable, 'wgDigitTransformTable' => $compactDigitTransTable, 'wgMainPageTitle' => $mainPage ? $mainPage->getPrefixedText() : null, 'wgFormattedNamespaces' => $wgContLang->getFormattedNamespaces(), 'wgNamespaceIds' => $wgContLang->getNamespaceIds(), 'wgSiteName' => $wgSitename, 'wgCategories' => $wgOut->getCategories()); if ($wgContLang->hasVariants()) { $vars['wgUserVariant'] = $wgContLang->getPreferredVariant(); } // if on upload page output the extension list & js_upload if (SpecialPage::resolveAlias($wgTitle->getDBkey()) == 'Upload') { global $wgFileExtensions, $wgAjaxUploadInterface; $vars['wgFileExtensions'] = $wgFileExtensions; } if ($wgUseAjax && $wgEnableMWSuggest && !$wgUser->getOption('disablesuggest', false)) { $vars['wgMWSuggestTemplate'] = SearchEngine::getMWSuggestTemplate(); $vars['wgDBname'] = $wgDBname; $vars['wgSearchNamespaces'] = SearchEngine::userNamespaces($wgUser); $vars['wgMWSuggestMessages'] = array(wfMsg('search-mwsuggest-enabled'), wfMsg('search-mwsuggest-disabled')); } foreach ($wgRestrictionTypes as $type) { $vars['wgRestriction' . ucfirst($type)] = $wgTitle->getRestrictions($type); } if ($wgOut->isArticleRelated() && $wgUseAjax && $wgAjaxWatch && $wgUser->isLoggedIn()) { $msgs = (object) array(); foreach (array('watch', 'unwatch', 'watching', 'unwatching', 'tooltip-ca-watch', 'tooltip-ca-unwatch') as $msgName) { $msgs->{$msgName . 'Msg'} = wfMsg($msgName); } $vars['wgAjaxWatch'] = $msgs; } // Allow extensions to add their custom variables to the global JS variables wfRunHooks('MakeGlobalVariablesScript', array(&$vars)); return self::makeVariablesScript($vars); }