/** * @param SpecialPage $page * @param array $conds */ function __construct($page, $conds) { $this->page = $page; $this->conds = $conds; $this->mDefaultDirection = IndexPager::DIR_DESCENDING; parent::__construct($page->getContext()); }
public function testRequireLoginNotAnon() { $specialPage = new SpecialPage('Watchlist', 'viewmywatchlist'); $user = User::newFromName("UTSysop"); $specialPage->getContext()->setUser($user); $specialPage->requireLogin(); // no exception thrown, logged in use can access special page $this->assertTrue(true); }
/** * Invocation of hook SpecialPageBeforeExecute * * We use this hook to ensure that login/account creation pages * are redirected to HTTPS if they are not accessed via HTTPS and * $wgSecureLogin == true - but only when using the * mobile site. * * @param SpecialPage $special * @param string $subpage * @return bool */ public static function onSpecialPageBeforeExecute(SpecialPage $special, $subpage) { $mobileContext = MobileContext::singleton(); $isMobileView = $mobileContext->shouldDisplayMobileView(); $context = $special->getContext(); $out = $context->getOutput(); $secureLogin = $context->getConfig()->get('SecureLogin'); $request = $special->getContext()->getRequest(); $skin = $out->getSkin()->getSkinName(); $name = $special->getName(); // Ensure desktop version of Special:Preferences page gets mobile targeted modules // FIXME: Upstream to core (?) if ($skin === 'minerva') { if ($name === 'Preferences') { $out->addModules('skins.minerva.special.preferences.scripts'); } // Add default warning message to Special:UserLogin and Special:UserCreate // if no warning message set. if ($name === 'Userlogin' && !$request->getVal('warning', null) && !$context->getUser()->isLoggedIn()) { $request->setVal('warning', 'mobile-frontend-generic-login-new'); } } if ($isMobileView) { if ($name === 'Search') { $out->addModuleStyles('skins.minerva.special.search.styles'); } elseif ($name === 'Userlogin') { $out->addModuleStyles('skins.minerva.special.userlogin.styles'); $out->addModules('mobile.special.userlogin.scripts'); // make sure we're on https if we're supposed to be and currently aren't. // most of this is lifted from https redirect code in SpecialUserlogin::execute() // also, checking for 'https' in $wgServer is a little funky, but this is what // is done on the WMF cluster (see config in CommonSettings.php) if ($secureLogin && WebRequest::detectProtocol() != 'https') { // get the https url and redirect $query = $special->getContext()->getRequest()->getQueryValues(); if (isset($query['title'])) { unset($query['title']); } $url = $mobileContext->getMobileUrl($special->getFullTitle()->getFullURL($query), true); $special->getContext()->getOutput()->redirect($url); } } } return true; }
/** * Links to different places. * * @note This function is also called in DeletedContributionsPage * @param SpecialPage $sp SpecialPage instance, for context * @param User $target Target user object * @return array */ public static function getUserLinks(SpecialPage $sp, User $target) { $id = $target->getId(); $username = $target->getName(); $userpage = $target->getUserPage(); $talkpage = $target->getTalkPage(); $linkRenderer = $sp->getLinkRenderer(); $tools['user-talk'] = $linkRenderer->makeLink($talkpage, $sp->msg('sp-contributions-talk')->text()); if ($id !== null || $id === null && IP::isIPAddress($username)) { if ($sp->getUser()->isAllowed('block')) { # Block / Change block / Unblock links if ($target->isBlocked() && $target->getBlock()->getType() != Block::TYPE_AUTO) { $tools['block'] = $linkRenderer->makeKnownLink(SpecialPage::getTitleFor('Block', $username), $sp->msg('change-blocklink')->text()); $tools['unblock'] = $linkRenderer->makeKnownLink(SpecialPage::getTitleFor('Unblock', $username), $sp->msg('unblocklink')->text()); } else { # User is not blocked $tools['block'] = $linkRenderer->makeKnownLink(SpecialPage::getTitleFor('Block', $username), $sp->msg('blocklink')->text()); } } # Block log link $tools['log-block'] = $linkRenderer->makeKnownLink(SpecialPage::getTitleFor('Log', 'block'), $sp->msg('sp-contributions-blocklog')->text(), [], ['page' => $userpage->getPrefixedText()]); # Suppression log link (bug 59120) if ($sp->getUser()->isAllowed('suppressionlog')) { $tools['log-suppression'] = $linkRenderer->makeKnownLink(SpecialPage::getTitleFor('Log', 'suppress'), $sp->msg('sp-contributions-suppresslog', $username)->text(), [], ['offender' => $username]); } } # Uploads $tools['uploads'] = $linkRenderer->makeKnownLink(SpecialPage::getTitleFor('Listfiles', $username), $sp->msg('sp-contributions-uploads')->text()); # Other logs link $tools['logs'] = $linkRenderer->makeKnownLink(SpecialPage::getTitleFor('Log', $username), $sp->msg('sp-contributions-logs')->text()); # Add link to deleted user contributions for priviledged users if ($sp->getUser()->isAllowed('deletedhistory')) { $tools['deletedcontribs'] = $linkRenderer->makeKnownLink(SpecialPage::getTitleFor('DeletedContributions', $username), $sp->msg('sp-contributions-deleted', $username)->text()); } # Add a link to change user rights for privileged users $userrightsPage = new UserrightsPage(); $userrightsPage->setContext($sp->getContext()); if ($userrightsPage->userCanChangeRights($target)) { $tools['userrights'] = $linkRenderer->makeKnownLink(SpecialPage::getTitleFor('Userrights', $username), $sp->msg('sp-contributions-userrights')->text()); } Hooks::run('ContributionsToolLinks', [$id, $userpage, &$tools, $sp]); return $tools; }