public function execute($parameters) { global $wgOut, $wgUser; $this->setHeaders(); $this->setup(); if (!function_exists('apc_cache_info')) { $wgOut->addWikiMsg('viewapc-apc-not-available'); return; } if ($this->opts->getValue('image')) { $wgOut->disable(); header('Content-type: image/png'); echo APCImages::generateImage($this->opts->getValue('image')); return; } if ($this->opts->getValue('mode') !== self::MODE_STATS) { if (!$wgUser->isAllowed('apc')) { $wgOut->permissionRequired('apc'); return; } } // clear cache if ($this->opts->getValue('clearcache')) { $this->opts->setValue('clearcache', ''); // TODO: reset if (!$wgUser->isAllowed('apc')) { $wgOut->permissionRequired('apc'); return; } $usermode = $this->opts->getValue('mode') === self::MODE_USER_CACHE; $mode = $usermode ? 'user' : 'opcode'; apc_clear_cache($mode); if ($usermode) { $wgOut->addWikiMsg('viewapc-filecache-cleared'); } else { $wgOut->addWikiMsg('viewapc-usercache-cleared'); } } $delete = $this->opts->getValue('delete'); if ($delete) { $this->opts->setValue('delete', ''); // TODO: reset if (!$wgUser->isAllowed('apc')) { $wgOut->permissionRequired('apc'); return; } $result = apc_delete($delete); if ($result) { $wgOut->addWikiMsg('viewapc-delete-ok', $delete); } else { $wgOut->addWikiMsg('viewapc-delete-failed', $delete); } } $wgOut->addModuleStyles('ext.apc'); $this->getLogo(); $this->mainMenu(); $this->doPage(); }
private function parseParams(FormOptions $opts, $par) { global $wgLogTypes; # Get parameters $parms = explode('/', $par = $par !== null ? $par : ''); $symsForAll = array('*', 'all'); if ($parms[0] != '' && (in_array($par, $wgLogTypes) || in_array($par, $symsForAll))) { $opts->setValue('type', $par); } elseif (count($parms) == 2) { $opts->setValue('type', $parms[0]); $opts->setValue('user', $parms[1]); } elseif ($par != '') { $opts->setValue('user', $par); } }
function execute($par) { $out = $this->getOutput(); $this->setHeaders(); $this->outputHeader(); $opts = new FormOptions(); $opts->add('target', ''); $opts->add('namespace', '', FormOptions::INTNULL); $opts->add('limit', 50); $opts->add('from', 0); $opts->add('back', 0); $opts->add('hideredirs', false); $opts->add('hidetrans', false); $opts->add('hidelinks', false); $opts->add('hideimages', false); $opts->fetchValuesFromRequest($this->getRequest()); $opts->validateIntBounds('limit', 0, 5000); // Give precedence to subpage syntax if (isset($par)) { $opts->setValue('target', $par); } // Bind to member variable $this->opts = $opts; $this->target = Title::newFromURL($opts->getValue('target')); if (!$this->target) { $out->addHTML($this->whatlinkshereForm()); return; } $this->getSkin()->setRelevantTitle($this->target); $this->selfTitle = $this->getTitle($this->target->getPrefixedDBkey()); $out->setPageTitle(wfMsg('whatlinkshere-title', $this->target->getPrefixedText())); $out->setSubtitle(wfMsg('whatlinkshere-backlink', Linker::link($this->target, $this->target->getPrefixedText(), array(), array('redirect' => 'no')))); $this->showIndirectLinks(0, $this->target, $opts->getValue('limit'), $opts->getValue('from'), $opts->getValue('back')); }
public function execute($par) { $this->setHeaders(); $this->outputHeader(); $out = $this->getOutput(); $this->addHelpLink('Help:New images'); $opts = new FormOptions(); $opts->add('like', ''); $opts->add('showbots', false); $opts->add('hidepatrolled', false); $opts->add('limit', 50); $opts->add('offset', ''); $opts->fetchValuesFromRequest($this->getRequest()); if ($par !== null) { $opts->setValue(is_numeric($par) ? 'limit' : 'like', $par); } $opts->validateIntBounds('limit', 0, 500); $this->opts = $opts; if (!$this->including()) { $this->setTopText(); $this->buildForm(); } $pager = new NewFilesPager($this->getContext(), $opts); $out->addHTML($pager->getBody()); if (!$this->including()) { $out->addHTML($pager->getNavigationBar()); } }
protected function setup($par) { global $wgRequest, $wgUser, $wgEnableNewpagesUserFilter; // Options $opts = new FormOptions(); $this->opts = $opts; // bind $opts->add('hideliu', false); $opts->add('hidepatrolled', false); $opts->add('hidebots', false); $opts->add('hideredirs', true); $opts->add('limit', (int) $wgUser->getOption('rclimit')); $opts->add('offset', ''); $opts->add('namespace', '0'); $opts->add('username', ''); $opts->add('feed', ''); // Set values $opts->fetchValuesFromRequest($wgRequest); if ($par) { $this->parseParams($par); } // Validate $opts->validateIntBounds('limit', 0, 5000); if (!$wgEnableNewpagesUserFilter) { $opts->setValue('username', ''); } // Store some objects $this->skin = $wgUser->getSkin(); }
protected function parseParams($par) { global $wgLang; $bits = preg_split('/\\s*,\\s*/', trim($par)); foreach ($bits as $bit) { if ('shownav' == $bit) { $this->showNavigation = true; } if ('hideliu' === $bit) { $this->opts->setValue('hideliu', true); } if ('hidepatrolled' == $bit) { $this->opts->setValue('hidepatrolled', true); } if ('hidebots' == $bit) { $this->opts->setValue('hidebots', true); } if ('showredirs' == $bit) { $this->opts->setValue('hideredirs', false); } if (is_numeric($bit)) { $this->opts->setValue('limit', intval($bit)); } $m = array(); if (preg_match('/^limit=(\\d+)$/', $bit, $m)) { $this->opts->setValue('limit', intval($m[1])); } // PG offsets not just digits! if (preg_match('/^offset=([^=]+)$/', $bit, $m)) { $this->opts->setValue('offset', intval($m[1])); } if (preg_match('/^username=(.*)$/', $bit, $m)) { $this->opts->setValue('username', $m[1]); } if (preg_match('/^namespace=(.*)$/', $bit, $m)) { $ns = $wgLang->getNsIndex($m[1]); if ($ns !== false) { $this->opts->setValue('namespace', $ns); } } } }
protected function setup($par) { global $wgRequest, $wgUser; // Options $opts = new FormOptions(); $this->opts = $opts; // bind $opts->add('page1', ''); $opts->add('page2', ''); $opts->add('rev1', ''); $opts->add('rev2', ''); $opts->add('action', ''); // Set values $opts->fetchValuesFromRequest($wgRequest); $title1 = Title::newFromText($opts->getValue('page1')); $title2 = Title::newFromText($opts->getValue('page2')); if ($title1 && $title1->exists() && $opts->getValue('rev1') == '') { $pda = new Article($title1); $pdi = $pda->getID(); $pdLastRevision = Revision::loadFromPageId(wfGetDB(DB_SLAVE), $pdi); $opts->setValue('rev1', $pdLastRevision->getId()); } elseif ($opts->getValue('rev1') != '') { $pdrev = Revision::newFromId($opts->getValue('rev1')); if ($pdrev) { $opts->setValue('page1', $pdrev->getTitle()->getPrefixedText()); } } if ($title2 && $title2->exists() && $opts->getValue('rev2') == '') { $pda = new Article($title2); $pdi = $pda->getID(); $pdLastRevision = Revision::loadFromPageId(wfGetDB(DB_SLAVE), $pdi); $opts->setValue('rev2', $pdLastRevision->getId()); } elseif ($opts->getValue('rev2') != '') { $pdrev = Revision::newFromId($opts->getValue('rev2')); if ($pdrev) { $opts->setValue('page2', $pdrev->getTitle()->getPrefixedText()); } } // Store some objects $this->skin = $wgUser->getSkin(); }
/** * Show the special page * * @param string $par Parameter passed to the page or null */ public function execute($par) { $out = $this->getOutput(); $this->setHeaders(); $this->outputHeader(); $opts = new FormOptions(); $opts->add('username', ''); $opts->add('hidebots', false, FormOptions::BOOL); $opts->add('hidesysops', false, FormOptions::BOOL); $opts->fetchValuesFromRequest($this->getRequest()); if ($par !== null) { $opts->setValue('username', $par); } // Mention the level of cache staleness... $cacheText = ''; $dbr = wfGetDB(DB_SLAVE, 'recentchanges'); $rcMax = $dbr->selectField('recentchanges', 'MAX(rc_timestamp)', '', __METHOD__); if ($rcMax) { $cTime = $dbr->selectField('querycache_info', 'qci_timestamp', ['qci_type' => 'activeusers'], __METHOD__); if ($cTime) { $secondsOld = wfTimestamp(TS_UNIX, $rcMax) - wfTimestamp(TS_UNIX, $cTime); } else { $rcMin = $dbr->selectField('recentchanges', 'MIN(rc_timestamp)'); $secondsOld = time() - wfTimestamp(TS_UNIX, $rcMin); } if ($secondsOld > 0) { $cacheTxt = '<br>' . $this->msg('cachedspecial-viewing-cached-ttl')->durationParams($secondsOld); } } $pager = new ActiveUsersPager($this->getContext(), $opts); $usersBody = $pager->getBody(); $days = $this->getConfig()->get('ActiveUserDays'); $formDescriptor = ['username' => ['type' => 'user', 'name' => 'username', 'label-message' => 'activeusers-from'], 'hidebots' => ['type' => 'check', 'name' => 'hidebots', 'label-message' => 'activeusers-hidebots', 'default' => false], 'hidesysops' => ['type' => 'check', 'name' => 'hidesysops', 'label-message' => 'activeusers-hidesysops', 'default' => false]]; $htmlForm = HTMLForm::factory('ooui', $formDescriptor, $this->getContext())->setIntro($this->msg('activeusers-intro')->numParams($days) . $cacheText)->setWrapperLegendMsg('activeusers')->setSubmitTextMsg('activeusers-submit')->setMethod('get')->prepareForm()->displayForm(false); if ($usersBody) { $out->addHTML($pager->getNavigationBar() . Html::rawElement('ul', [], $usersBody) . $pager->getNavigationBar()); } else { $out->addWikiMsg('activeusers-noresult'); } }
function execute($par) { $out = $this->getOutput(); $this->setHeaders(); $this->outputHeader(); $this->addHelpLink('Help:What links here'); $opts = new FormOptions(); $opts->add('target', ''); $opts->add('namespace', '', FormOptions::INTNULL); $opts->add('limit', $this->getConfig()->get('QueryPageDefaultLimit')); $opts->add('from', 0); $opts->add('back', 0); $opts->add('hideredirs', false); $opts->add('hidetrans', false); $opts->add('hidelinks', false); $opts->add('hideimages', false); $opts->add('invert', false); $opts->fetchValuesFromRequest($this->getRequest()); $opts->validateIntBounds('limit', 0, 5000); // Give precedence to subpage syntax if ($par !== null) { $opts->setValue('target', $par); } // Bind to member variable $this->opts = $opts; $this->target = Title::newFromText($opts->getValue('target')); if (!$this->target) { if (!$this->including()) { $out->addHTML($this->whatlinkshereForm()); } return; } $this->getSkin()->setRelevantTitle($this->target); $this->selfTitle = $this->getPageTitle($this->target->getPrefixedDBkey()); $out->setPageTitle($this->msg('whatlinkshere-title', $this->target->getPrefixedText())); $out->addBacklinkSubtitle($this->target); $this->showIndirectLinks(0, $this->target, $opts->getValue('limit'), $opts->getValue('from'), $opts->getValue('back')); }
private function parseParams(FormOptions $opts, $par) { # Get parameters $par = $par !== null ? $par : ''; $parms = explode('/', $par); $symsForAll = ['*', 'all']; if ($parms[0] != '' && (in_array($par, $this->getConfig()->get('LogTypes')) || in_array($par, $symsForAll))) { $opts->setValue('type', $par); } elseif (count($parms) == 2) { $opts->setValue('type', $parms[0]); $opts->setValue('user', $parms[1]); } elseif ($par != '') { $opts->setValue('user', $par); } }
public function execute($par) { global $wgLanguageCode; $this->setHeaders(); $this->checkPermissions(); $server = TTMServer::primary(); if (!$server instanceof SearchableTTMServer) { throw new ErrorPageError('tux-sst-nosolr-title', 'tux-sst-nosolr-body'); } $out = $this->getOutput(); $out->addModuleStyles('jquery.uls.grid'); $out->addModuleStyles('ext.translate.special.searchtranslations.styles'); $out->addModuleStyles('ext.translate.special.translate.styles'); $out->addModules('ext.translate.special.searchtranslations'); $out->addModules('ext.translate.special.searchtranslations.operatorsuggest'); TranslateUtils::addSpecialHelpLink($out, 'Help:Extension:Translate#searching'); $this->opts = $opts = new FormOptions(); $opts->add('query', ''); $opts->add('sourcelanguage', $wgLanguageCode); $opts->add('language', ''); $opts->add('group', ''); $opts->add('grouppath', ''); $opts->add('filter', ''); $opts->add('match', ''); $opts->add('case', ''); $opts->add('limit', $this->limit); $opts->add('offset', 0); $opts->fetchValuesFromRequest($this->getRequest()); $queryString = $opts->getValue('query'); if ($queryString === '') { $this->showEmptySearch(); return; } $params = $opts->getAllValues(); $filter = $opts->getValue('filter'); try { $translationSearch = new CrossLanguageTranslationSearchQuery($params, $server); if (in_array($filter, $translationSearch->getAvailableFilters())) { if ($opts->getValue('language') === '') { $params['language'] = $this->getLanguage()->getCode(); $opts->setValue('language', $params['language']); } $documents = $translationSearch->getDocuments(); $total = $translationSearch->getTotalHits(); $resultset = $translationSearch->getResultSet(); } else { $resultset = $server->search($queryString, $params, $this->hl); $documents = $server->getDocuments($resultset); $total = $server->getTotalHits($resultset); } } catch (TTMServerException $e) { error_log('Translation search server unavailable:' . $e->getMessage()); throw new ErrorPageError('tux-sst-solr-offline-title', 'tux-sst-solr-offline-body'); } // Part 1: facets $facets = $server->getFacets($resultset); $facetHtml = ''; if (count($facets['language']) > 0) { if ($filter !== '') { $facets['language'] = array_merge($facets['language'], array($opts->getValue('language') => $total)); } $facetHtml = Html::element('div', array('class' => 'row facet languages', 'data-facets' => FormatJson::encode($this->getLanguages($facets['language'])), 'data-language' => $opts->getValue('language')), $this->msg('tux-sst-facet-language')); } if (count($facets['group']) > 0) { $facetHtml .= Html::element('div', array('class' => 'row facet groups', 'data-facets' => FormatJson::encode($this->getGroups($facets['group'])), 'data-group' => $opts->getValue('group')), $this->msg('tux-sst-facet-group')); } // Part 2: results $resultsHtml = ''; $title = Title::newFromText($queryString); if ($title && !in_array($filter, $translationSearch->getAvailableFilters())) { $handle = new MessageHandle($title); $code = $handle->getCode(); $language = $opts->getValue('language'); if ($handle->isValid() && $code !== '' && $code !== $language) { $groupId = $handle->getGroup()->getId(); $helpers = new TranslationHelpers($title, $groupId); $document['wiki'] = wfWikiId(); $document['localid'] = $handle->getTitleForBase()->getPrefixedText(); $document['content'] = $helpers->getTranslation(); $document['language'] = $handle->getCode(); array_unshift($documents, $document); $total++; } } foreach ($documents as $document) { $text = $document['content']; $text = TranslateUtils::convertWhiteSpaceToHTML($text); list($pre, $post) = $this->hl; $text = str_replace($pre, '<strong class="tux-search-highlight">', $text); $text = str_replace($post, '</strong>', $text); $title = Title::newFromText($document['localid'] . '/' . $document['language']); if (!$title) { // Should not ever happen but who knows... continue; } $resultAttribs = array('class' => 'row tux-message', 'data-title' => $title->getPrefixedText(), 'data-language' => $document['language']); $handle = new MessageHandle($title); if ($handle->isValid()) { $groupId = $handle->getGroup()->getId(); $helpers = new TranslationHelpers($title, $groupId); $resultAttribs['data-definition'] = $helpers->getDefinition(); $resultAttribs['data-translation'] = $helpers->getTranslation(); $resultAttribs['data-group'] = $groupId; $uri = $title->getLocalUrl(array('action' => 'edit')); $link = Html::element('a', array('href' => $uri), $this->msg('tux-sst-edit')->text()); } else { $url = wfParseUrl($document['uri']); $domain = $url['host']; $link = Html::element('a', array('href' => $document['uri']), $this->msg('tux-sst-view-foreign', $domain)->text()); } $access = Html::rawElement('div', array('class' => 'row tux-edit tux-message-item'), $link); $titleText = $title->getPrefixedText(); $titleAttribs = array('class' => 'row tux-title', 'dir' => 'ltr'); $textAttribs = array('class' => 'row tux-text', 'lang' => wfBCP47($document['language']), 'dir' => Language::factory($document['language'])->getDir()); $resultsHtml = $resultsHtml . Html::openElement('div', $resultAttribs) . Html::rawElement('div', $textAttribs, $text) . Html::element('div', $titleAttribs, $titleText) . $access . Html::closeElement('div'); } $resultsHtml .= Html::rawElement('hr', array('class' => 'tux-pagination-line')); $prev = $next = ''; $offset = $this->opts->getValue('offset'); $params = $this->opts->getChangedValues(); if ($total - $offset > $this->limit) { $newParams = array('offset' => $offset + $this->limit) + $params; $attribs = array('class' => 'mw-ui-button pager-next', 'href' => $this->getPageTitle()->getLocalUrl($newParams)); $next = Html::element('a', $attribs, $this->msg('tux-sst-next')->text()); } if ($offset) { $newParams = array('offset' => max(0, $offset - $this->limit)) + $params; $attribs = array('class' => 'mw-ui-button pager-prev', 'href' => $this->getPageTitle()->getLocalUrl($newParams)); $prev = Html::element('a', $attribs, $this->msg('tux-sst-prev')->text()); } $resultsHtml .= Html::rawElement('div', array('class' => 'tux-pagination-links'), "{$prev} {$next}"); $search = $this->getSearchInput($queryString); $count = $this->msg('tux-sst-count')->numParams($total); $this->showSearch($search, $count, $facetHtml, $resultsHtml, $total); }