/** * Show the special page * * @param $par Mixed: parameter passed to the page or null */ public function execute($par) { global $wgUploadPath, $wgUser, $wgHuijiPrefix; $templateParser = new TemplateParser(__DIR__ . '/pages'); $out = $this->getOutput(); $user = $this->getUser(); if (!$user->isAllowed('AdminDashboard')) { $out->permissionRequired('AdminDashboard'); return; } // Set the page title, robot policies, etc. $this->setHeaders(); // Add CSS $out->addModules('ext.socialprofile.userprofile.css'); $out->addModules('ext.socialprofile.admindashboard.css'); // Add js and message // $out->addModules( 'skin.bootstrapmediawiki.huiji.getRecordsInterface.js' ); $out->addModules('ext.socialprofile.admindashboard.js'); $out->addModules('ext.socialprofile.userprofile.js'); $output = ''; // Prevent E_NOTICE $yesterday = date("Y-m-d", strtotime("-1 day")); $totaledit = SiteStats::edits(); $ueb = new UserEditBox(); $rankInfo = AllSitesInfo::getAllSitesRankData($wgHuijiPrefix, $yesterday); $usf = new UserSiteFollow(); $follows = $usf->getSiteFollowers('', $wgHuijiPrefix); // print_r($follows); $followCount = count($follows); if ($followCount >= 8) { $follows = array_slice($follows, 0, 8); $display = ''; } else { $display = 'none'; } $newFollow = array(); foreach ($follows as $value) { $arr['user_name'] = $value['user_name']; $userPage = Title::makeTitle(NS_USER, $value['user_name']); $arr['user_url'] = htmlspecialchars($userPage->getFullURL()); $arr['follow_date'] = wfMessage('comments-time-ago', HuijiFunctions::getTimeAgo(strtotime($value['follow_date'])))->text(); $newFollow[] = $arr; } $sentToAll = SpecialPage::getTitleFor('SendToFollowers')->getFullURL(); $showMore = SpecialPage::getTitleFor('EditRank')->getFullURL(); $rightsManage = SpecialPage::getTitleFor('用户权限')->getFullURL(); $blockUsers = SpecialPage::getTitleFor('封禁')->getFullURL(); $freezeUsers = SpecialPage::getTitleFor('解除封禁')->getFullURL(); $replaceText = SpecialPage::getTitleFor('替换文本')->getFullURL(); $siteRankPage = SpecialPage::getTitleFor('SiteRank')->getFullURL(); $allSpecial = SpecialPage::getTitleFor('特殊页面')->getFullURL(); $siteAvatar = (new wSiteAvatar($wgHuijiPrefix, 'l'))->getAvatarHtml(); $token = $user->getEditToken(); if (is_null($newFollow)) { $newFollow = false; } $output .= $templateParser->processTemplate('admin_index', array('siteRank' => isset($rankInfo[0]['site_rank']) ? $rankInfo[0]['site_rank'] : '暂无', 'siteScore' => isset($rankInfo[0]['site_score']) ? $rankInfo[0]['site_score'] : '暂无', 'yesterdayCount' => UserSiteFollow::getFollowerCountOneday($wgHuijiPrefix, $yesterday), 'totalCount' => UserSiteFollow::getFollowerCount($wgHuijiPrefix), 'yesterdayEdit' => $ueb->getSiteEditCount('', $wgHuijiPrefix, $yesterday, $yesterday), 'totalEdit' => $totaledit, 'totalView' => $ueb->getSiteViewCount(-1, $wgHuijiPrefix, '', ''), 'yesterdayView' => $ueb->getSiteViewCount(-1, $wgHuijiPrefix, $yesterday, $yesterday), 'newFollow' => $newFollow, 'sendToAll' => $sentToAll, 'showMore' => $showMore, 'display' => $display, 'rightsManage' => $rightsManage, 'blockUsers' => $blockUsers, 'freezeUsers' => $freezeUsers, 'replaceText' => $replaceText, 'siteRankPage' => $siteRankPage, 'allSpecial' => $allSpecial, 'siteAvatar' => $siteAvatar, 'token' => $token)); $out->addHtml($output); }
static function admins() { if (!isset(self::$admins)) { $dbr =& wfGetDB(DB_SLAVE); self::$admins = $dbr->selectField('user_groups', 'COUNT(*)', array('ug_group' => 'sysop'), __METHOD__); } return self::$admins; }
/** * Show the special page * * @param $par Mixed: parameter passed to the page or null */ function execute( $par ) { global $wgOut, $wgUser; global $wgOpenIDShowUrlOnUserPage; global $wgOpenIDTrustEmailAddress; global $wgOpenIDAllowExistingAccountSelection; global $wgOpenIDAllowNewAccountname; global $wgOpenIDUseEmailAsNickname; global $wgOpenIDProposeUsernameFromSREG; global $wgOpenIDAllowAutomaticUsername; global $wgOpenIDOnly; global $wgOpenIDClientOnly; global $wgOpenIDAllowServingOpenIDUserAccounts; global $wgOpenIDShowProviderIcons; if ( !$this->userCanExecute( $wgUser ) ) { $this->displayRestrictionError(); return; } $totalUsers = SiteStats::users(); $OpenIDdistinctUsers = $this->getOpenIDUsers( 'distinctusers' ); $OpenIDUsers = $this->getOpenIDUsers(); $this->setHeaders(); $this->outputHeader(); $wgOut->addWikiMsg( 'openid-dashboard-introduction', 'http://www.mediawiki.org/wiki/Extension:OpenID' ); $wgOut->addHTML( Html::openElement( 'table', array( 'style' => 'width:50%;', 'class' => 'mw-openiddashboard-table wikitable' ) ) ); # Here we show some basic version infos. Retrieval of SVN revision number of OpenID appears to be too difficult $out = $this->show( 'OpenID ' . wfMsg( 'version-software-version' ), MEDIAWIKI_OPENID_VERSION ); $out .= $this->show( 'MediaWiki ' . wfMsg( 'version-software-version' ), SpecialVersion::getVersion() ); $out .= $this->show( '$wgOpenIDOnly', $wgOpenIDOnly ); $out .= $this->show( '$wgOpenIDClientOnly', $wgOpenIDClientOnly ); $out .= $this->show( '$wgOpenIDAllowServingOpenIDUserAccounts', $wgOpenIDAllowServingOpenIDUserAccounts ); $out .= $this->show( '$wgOpenIDTrustEmailAddress', $wgOpenIDTrustEmailAddress ); $out .= $this->show( '$wgOpenIDAllowExistingAccountSelection', $wgOpenIDAllowExistingAccountSelection ); $out .= $this->show( '$wgOpenIDAllowAutomaticUsername', $wgOpenIDAllowAutomaticUsername ); $out .= $this->show( '$wgOpenIDAllowNewAccountname', $wgOpenIDAllowNewAccountname ); $out .= $this->show( '$wgOpenIDUseEmailAsNickname', $wgOpenIDUseEmailAsNickname ); $out .= $this->show( '$wgOpenIDProposeUsernameFromSREG', $wgOpenIDProposeUsernameFromSREG ); $out .= $this->show( '$wgOpenIDShowUrlOnUserPage', $wgOpenIDShowUrlOnUserPage ); $out .= $this->show( '$wgOpenIDShowProviderIcons', $wgOpenIDShowProviderIcons ); $out .= $this->show( wfMsgExt( 'statistics-users', array( 'parseinline' ) ), $totalUsers ); $out .= $this->show( wfMsg( 'openid-dashboard-number-openid-users' ), $OpenIDdistinctUsers ); $out .= $this->show( wfMsg( 'openid-dashboard-number-openids-in-database' ), $OpenIDUsers ); $out .= $this->show( wfMsg( 'openid-dashboard-number-users-without-openid' ), $totalUsers - $OpenIDdistinctUsers ); $wgOut->addHTML( $out . Html::closeElement( 'table' ) . "\n" ); }
/** * constructor */ function wfSpecialStatistics() { global $wgOut, $wgLang, $wgRequest; $fname = 'wfSpecialStatistics'; $action = $wgRequest->getVal('action'); $dbr = wfGetDB(DB_SLAVE); $views = SiteStats::views(); $edits = SiteStats::edits(); $good = SiteStats::articles(); $images = SiteStats::images(); $total = SiteStats::pages(); $users = SiteStats::users(); $admins = $dbr->selectField('user_groups', 'COUNT(*)', array('ug_group' => 'sysop'), $fname); $numJobs = $dbr->estimateRowCount('job'); if ($action == 'raw') { $wgOut->disable(); header('Pragma: nocache'); echo "total={$total};good={$good};views={$views};edits={$edits};users={$users};admins={$admins};images={$images};jobs={$numJobs}\n"; return; } else { $text = '==' . wfMsg('sitestats') . "==\n"; $text .= wfMsgExt('sitestatstext', array('parsemag'), $wgLang->formatNum($total), $wgLang->formatNum($good), $wgLang->formatNum($views), $wgLang->formatNum($edits), $wgLang->formatNum(sprintf('%.2f', $total ? $edits / $total : 0)), $wgLang->formatNum(sprintf('%.2f', $edits ? $views / $edits : 0)), $wgLang->formatNum($numJobs), $wgLang->formatNum($images)); $text .= "\n==" . wfMsg('userstats') . "==\n"; $text .= wfMsgExt('userstatstext', array('parsemag'), $wgLang->formatNum($users), $wgLang->formatNum($admins), '[[' . wfMsgForContent('grouppage-sysop') . ']]', $wgLang->formatNum(sprintf('%.2f', $admins / $users * 100)), User::makeGroupLinkWiki('sysop')); $wgOut->addWikiText($text); global $wgDisableCounters, $wgMiserMode, $wgUser, $wgLang, $wgContLang; if (!$wgDisableCounters && !$wgMiserMode) { $page = $dbr->tableName('page'); $sql = "SELECT page_namespace, page_title, page_counter FROM {$page} WHERE page_is_redirect = 0 AND page_counter > 0 ORDER BY page_counter DESC"; $sql = $dbr->limitResult($sql, 10, 0); $res = $dbr->query($sql, $fname); if ($res) { $wgOut->addHtml('<h2>' . wfMsgHtml('statistics-mostpopular') . '</h2>'); $skin = $wgUser->getSkin(); $wgOut->addHtml('<ol>'); while ($row = $dbr->fetchObject($res)) { // BizzWiki begin {{ if (!$wgUser->isAllowed('browse', $row->page_namespace)) { continue; } // BizzWiki end }} $link = $skin->makeKnownLinkObj(Title::makeTitleSafe($row->page_namespace, $row->page_title)); $dirmark = $wgContLang->getDirMark(); $wgOut->addHtml('<li>' . $link . $dirmark . ' [' . $wgLang->formatNum($row->page_counter) . ']</li>'); } $wgOut->addHtml('</ol>'); $dbr->freeResult($res); } } $footer = wfMsg('statistics-footer'); if (!wfEmptyMsg('statistics-footer', $footer) && $footer != '') { $wgOut->addWikiText($footer); } } }
private function setColorConverters() { $expected_number_of_edits_to_white = SiteStats::edits() / SiteStats::articles(); $wiki_color = $this->wikiColor; $red = hexdec(substr($wiki_color, 0, -4)); $green = hexdec(substr($wiki_color, 2, -2)); $blue = hexdec(substr($wiki_color, -2)); $red_diff = 255 - $red; $green_diff = 255 - $green; $blue_diff = 255 - $blue; $this->redConverter = $red_diff / $expected_number_of_edits_to_white; $this->greenConverter = $green_diff / $expected_number_of_edits_to_white; $this->blueConverter = $blue_diff / $expected_number_of_edits_to_white; }
function WidgetCommunity($id, $params) { global $wgEnableCommunityWidget, $wgTitle; if (empty($wgEnableCommunityWidget)) { return ''; } if ($params['skinname'] != 'oasis') { return ''; } if (!class_exists('ActivityFeedHelper')) { return ''; } wfProfileIn(__METHOD__); global $wgUser, $wgLang, $wgLanguageCode, $wgStylePath, $wgEnableMyHomeExt, $wgContentNamespaces; $total = SiteStats::articles(); /* RT#64490: Strange Article Count in Latest Activity on some new wikis */ if ($total < 0 || $total > 1.0E+18) { $total = 0; } $total = $wgLang->formatNum($total); $footerButton = array(); if (!empty($wgEnableMyHomeExt)) { $footerButton['text'] = wfMsg('widget-community-more'); $footerButton['href'] = Skin::makeSpecialUrl($wgUser->isLoggedIn() ? 'MyHome' : 'ActivityFeed'); $footerButton['class'] = 'wikia-button forward'; } else { $footerButton['text'] = wfMsg('recentchanges'); $footerButton['href'] = Skin::makeSpecialUrl('RecentChanges'); $footerButton['class'] = 'wikia-button forward'; } $maxElements = 5; $includeNamespaces = implode('|', $wgContentNamespaces); $uselang = $wgLang->getCode(); //this should be the same as in /extensions/wikia/MyHome/ActivityFeedHelper.php $parameters = array('type' => 'widget', 'tagid' => $id, 'maxElements' => $maxElements, 'flags' => array('shortlist'), 'uselang' => $uselang, 'includeNamespaces' => $includeNamespaces); $userLangEqContent = $uselang == $wgLanguageCode; $feedHTML = ActivityFeedHelper::getListForWidget($parameters, $userLangEqContent); // template stuff $tmpl = new EasyTemplate(dirname(__FILE__)); $tmpl->set_vars(array('tagid' => $id, 'timestamp' => wfTimestampNow(), 'header' => wfMsg('monaco-articles-on', $total), 'feedHTML' => $feedHTML, 'footerButton' => $footerButton)); $output = $tmpl->render('WidgetCommunity'); wfProfileOut(__METHOD__); return $output; }
/** * Show the special page * * @param mixed $par (not used) */ function wfSpecialStatistics($par = '') { global $wgOut, $wgLang, $wgRequest; $dbr = wfGetDB(DB_SLAVE); $views = SiteStats::views(); $edits = SiteStats::edits(); $good = SiteStats::articles(); $images = SiteStats::images(); $total = SiteStats::pages(); $users = SiteStats::users(); $admins = SiteStats::admins(); $numJobs = SiteStats::jobs(); if ($wgRequest->getVal('action') == 'raw') { $wgOut->disable(); header('Pragma: nocache'); echo "total={$total};good={$good};views={$views};edits={$edits};users={$users};admins={$admins};images={$images};jobs={$numJobs}\n"; return; } else { $text = "__NOTOC__\n"; $text .= '==' . wfMsg('sitestats') . "==\n"; $text .= wfMsgExt('sitestatstext', array('parsemag'), $wgLang->formatNum($total), $wgLang->formatNum($good), $wgLang->formatNum($views), $wgLang->formatNum($edits), $wgLang->formatNum(sprintf('%.2f', $total ? $edits / $total : 0)), $wgLang->formatNum(sprintf('%.2f', $edits ? $views / $edits : 0)), $wgLang->formatNum($numJobs), $wgLang->formatNum($images)) . "\n"; $text .= "==" . wfMsg('userstats') . "==\n"; $text .= wfMsgExt('userstatstext', array('parsemag'), $wgLang->formatNum($users), $wgLang->formatNum($admins), '[[' . wfMsgForContent('grouppage-sysop') . ']]', $wgLang->formatNum(sprintf('%.2f', $admins / $users * 100)), User::makeGroupLinkWiki('sysop')) . "\n"; global $wgDisableCounters, $wgMiserMode, $wgUser, $wgLang, $wgContLang; if (!$wgDisableCounters && !$wgMiserMode) { $res = $dbr->select('page', array('page_namespace', 'page_title', 'page_counter'), array('page_is_redirect' => 0, 'page_counter > 0'), __METHOD__, array('ORDER BY' => 'page_counter DESC', 'LIMIT' => 10)); if ($res->numRows() > 0) { $text .= "==" . wfMsg('statistics-mostpopular') . "==\n"; while ($row = $res->fetchObject()) { $title = Title::makeTitleSafe($row->page_namespace, $row->page_title); if ($title instanceof Title) { $text .= '* [[:' . $title->getPrefixedText() . ']] (' . $wgLang->formatNum($row->page_counter) . ")\n"; } } $res->free(); } } $footer = wfMsg('statistics-footer'); if (!wfEmptyMsg('statistics-footer', $footer) && $footer != '') { $text .= "\n" . $footer; } $wgOut->addWikiText($text); } }
function getSQL() { global $wgMiserMode; $dbr = wfGetDB(DB_SLAVE); # In miser mode, reduce the query cost by adding a threshold for large wikis if ($wgMiserMode) { $numPages = SiteStats::pages(); if ($numPages > 10000) { $cutoff = 100; } elseif ($numPages > 100) { $cutoff = intval(sqrt($numPages)); } else { $cutoff = 1; } } else { $cutoff = 1; } list($pagelinks, $page) = $dbr->tableNamesN('pagelinks', 'page'); return "SELECT 'Mostlinked' AS type,\n\t\t\t\tpl_namespace AS namespace,\n\t\t\t\tpl_title AS title,\n\t\t\t\tCOUNT(*) AS value\n\t\t\tFROM {$pagelinks}\n\t\t\tLEFT JOIN {$page} ON pl_namespace=page_namespace AND pl_title=page_title\n\t\t\tGROUP BY pl_namespace, pl_title\n\t\t\tHAVING COUNT(*) > {$cutoff}"; }
/** * Updates user's points after they've made an edit in a namespace that is * listed in the $wgNamespacesForEditPoints array. */ function incEditCount($article, $revision, $baseRevId) { global $wgUser, $wgNamespacesForEditPoints, $wgMemc, $wgHuijiPrefix; // only keep tally for allowable namespaces if (!is_array($wgNamespacesForEditPoints) || in_array($article->getTitle()->getNamespace(), $wgNamespacesForEditPoints)) { $stats = new UserStatsTrack($wgUser->getID(), $wgUser->getName()); $stats->incStatField('edit'); } $dbr = wfGetDB(DB_SLAVE); $num = SiteStats::edits(); $sg = SystemGifts::checkEditsCounts($num); $usg = new UserSystemGifts($wgUser->getName()); if ($sg) { $usg->sendSystemGift(17); } $key = wfForeignMemcKey('huiji', '', 'revision', 'high_edit_site_followed', $wgUser->getName(), $wgHuijiPrefix); $wgMemc->incr($key); $key = wfForeignMemcKey('huiji', '', 'revision', 'last_edit_user', $article->getTitle()->getArticleId(), $wgHuijiPrefix); $wgMemc->delete($key); return true; }
public function execute($subPage) { if (!$this->userCanExecute($this->getUser())) { $this->displayRestrictionError(); return; } $this->setHeaders(); $out = $this->getOutput(); $out->setPageTitle($this->msg('ultimatecleaner')->text()); $numPages = SiteStats::pages(); $out->addHTML(Linker::link(SpecialPage::getTitleFor('UltimateCleanerTrustedUsers'), wfMessage('ultimatecleaner-view-trusted-users')->text(), array('target' => '_blank'))); $out->addHTML('<h2>' . $this->msg('ultimatecleaner-spam-pages-list-heading')->text() . '</h2>'); $out->addHTML('<div id="pagination"></div>'); $out->addHTML(Html::openElement('form', array('method' => 'post', 'id' => 'UltimateCleaner-delete-pages'))); $out->addHTML('<div id="UltimateCleaner-select-options"></div>'); $out->addHTML('<input type="submit" value="' . $this->msg('ultimatecleaner-delete-selected') . '" style="display:none;">'); $out->addHTML(Html::openElement('div', array('id' => 'UltimateCleaner-page-list'))); $out->addHTML(Html::closeElement('div')); $out->addHTML('<input type="submit" value="' . $this->msg('ultimatecleaner-delete-selected') . '" style="display:none;">'); $out->addHTML(Html::closeElement('form')); }
protected function appendUserGroups($property, $numberInGroup) { $config = $this->getConfig(); $data = array(); $result = $this->getResult(); $allGroups = User::getAllGroups(); foreach ($config->get('GroupPermissions') as $group => $permissions) { $arr = array('name' => $group, 'rights' => array_keys($permissions, true)); if ($numberInGroup) { $autopromote = $config->get('Autopromote'); if ($group == 'user') { $arr['number'] = SiteStats::users(); // '*' and autopromote groups have no size } elseif ($group !== '*' && !isset($autopromote[$group])) { $arr['number'] = SiteStats::numberInGroup($group); } } $groupArr = array('add' => $config->get('AddGroups'), 'remove' => $config->get('RemoveGroups'), 'add-self' => $config->get('GroupsAddToSelf'), 'remove-self' => $config->get('GroupsRemoveFromSelf')); foreach ($groupArr as $type => $rights) { if (isset($rights[$group])) { $groups = array_intersect($rights[$group], $allGroups); if ($groups) { $arr[$type] = $groups; ApiResult::setIndexedTagName($arr[$type], 'group'); } } } ApiResult::setIndexedTagName($arr['rights'], 'permission'); $data[] = $arr; } ApiResult::setIndexedTagName($data, 'group'); return $result->addValue('query', $property, $data); }
private function getGroupStats() { global $wgGroupPermissions, $wgImplicitGroups; $text = ''; foreach ($wgGroupPermissions as $group => $permissions) { # Skip generic * and implicit groups if (in_array($group, $wgImplicitGroups) || $group == '*') { continue; } $groupname = htmlspecialchars($group); $msg = $this->msg('group-' . $groupname); if ($msg->isBlank()) { $groupnameLocalized = $groupname; } else { $groupnameLocalized = $msg->text(); } $msg = $this->msg('grouppage-' . $groupname)->inContentLanguage(); if ($msg->isBlank()) { $grouppageLocalized = MWNamespace::getCanonicalName(NS_PROJECT) . ':' . $groupname; } else { $grouppageLocalized = $msg->text(); } $linkTarget = Title::newFromText($grouppageLocalized); $grouppage = Linker::link($linkTarget, htmlspecialchars($groupnameLocalized)); $grouplink = Linker::linkKnown(SpecialPage::getTitleFor('Listusers'), $this->msg('listgrouprights-members')->escaped(), array(), array('group' => $group)); # Add a class when a usergroup contains no members to allow hiding these rows $classZero = ''; $countUsers = SiteStats::numberingroup($groupname); if ($countUsers == 0) { $classZero = ' statistics-group-zero'; } $text .= $this->formatRow($grouppage . ' ' . $grouplink, $this->getLanguage()->formatNum($countUsers), array('class' => 'statistics-group-' . Sanitizer::escapeClass($group) . $classZero)); } return $text; }
/** * Return value of a magic variable (like PAGENAME) * * @private * * @param $index integer * @param bool|\PPFrame $frame * * @throws MWException * @return string */ function getVariableValue($index, $frame = false) { global $wgContLang, $wgSitename, $wgServer; global $wgArticlePath, $wgScriptPath, $wgStylePath; if (is_null($this->mTitle)) { // If no title set, bad things are going to happen // later. Title should always be set since this // should only be called in the middle of a parse // operation (but the unit-tests do funky stuff) throw new MWException(__METHOD__ . ' Should only be ' . ' called while parsing (no title set)'); } /** * Some of these require message or data lookups and can be * expensive to check many times. */ if (wfRunHooks('ParserGetVariableValueVarCache', array(&$this, &$this->mVarCache))) { if (isset($this->mVarCache[$index])) { return $this->mVarCache[$index]; } } $ts = wfTimestamp(TS_UNIX, $this->mOptions->getTimestamp()); wfRunHooks('ParserGetVariableValueTs', array(&$this, &$ts)); $pageLang = $this->getFunctionLang(); switch ($index) { case 'currentmonth': $value = $pageLang->formatNum(MWTimestamp::getInstance($ts)->format('m')); break; case 'currentmonth1': $value = $pageLang->formatNum(MWTimestamp::getInstance($ts)->format('n')); break; case 'currentmonthname': $value = $pageLang->getMonthName(MWTimestamp::getInstance($ts)->format('n')); break; case 'currentmonthnamegen': $value = $pageLang->getMonthNameGen(MWTimestamp::getInstance($ts)->format('n')); break; case 'currentmonthabbrev': $value = $pageLang->getMonthAbbreviation(MWTimestamp::getInstance($ts)->format('n')); break; case 'currentday': $value = $pageLang->formatNum(MWTimestamp::getInstance($ts)->format('j')); break; case 'currentday2': $value = $pageLang->formatNum(MWTimestamp::getInstance($ts)->format('d')); break; case 'localmonth': $value = $pageLang->formatNum(MWTimestamp::getLocalInstance($ts)->format('m')); break; case 'localmonth1': $value = $pageLang->formatNum(MWTimestamp::getLocalInstance($ts)->format('n')); break; case 'localmonthname': $value = $pageLang->getMonthName(MWTimestamp::getLocalInstance($ts)->format('n')); break; case 'localmonthnamegen': $value = $pageLang->getMonthNameGen(MWTimestamp::getLocalInstance($ts)->format('n')); break; case 'localmonthabbrev': $value = $pageLang->getMonthAbbreviation(MWTimestamp::getLocalInstance($ts)->format('n')); break; case 'localday': $value = $pageLang->formatNum(MWTimestamp::getLocalInstance($ts)->format('j')); break; case 'localday2': $value = $pageLang->formatNum(MWTimestamp::getLocalInstance($ts)->format('d')); break; case 'pagename': $value = wfEscapeWikiText($this->mTitle->getText()); break; case 'pagenamee': $value = wfEscapeWikiText($this->mTitle->getPartialURL()); break; case 'fullpagename': $value = wfEscapeWikiText($this->mTitle->getPrefixedText()); break; case 'fullpagenamee': $value = wfEscapeWikiText($this->mTitle->getPrefixedURL()); break; case 'subpagename': $value = wfEscapeWikiText($this->mTitle->getSubpageText()); break; case 'subpagenamee': $value = wfEscapeWikiText($this->mTitle->getSubpageUrlForm()); break; case 'rootpagename': $value = wfEscapeWikiText($this->mTitle->getRootText()); break; case 'rootpagenamee': $value = wfEscapeWikiText(wfUrlEncode(str_replace(' ', '_', $this->mTitle->getRootText()))); break; case 'basepagename': $value = wfEscapeWikiText($this->mTitle->getBaseText()); break; case 'basepagenamee': $value = wfEscapeWikiText(wfUrlEncode(str_replace(' ', '_', $this->mTitle->getBaseText()))); break; case 'talkpagename': if ($this->mTitle->canTalk()) { $talkPage = $this->mTitle->getTalkPage(); $value = wfEscapeWikiText($talkPage->getPrefixedText()); } else { $value = ''; } break; case 'talkpagenamee': if ($this->mTitle->canTalk()) { $talkPage = $this->mTitle->getTalkPage(); $value = wfEscapeWikiText($talkPage->getPrefixedURL()); } else { $value = ''; } break; case 'subjectpagename': $subjPage = $this->mTitle->getSubjectPage(); $value = wfEscapeWikiText($subjPage->getPrefixedText()); break; case 'subjectpagenamee': $subjPage = $this->mTitle->getSubjectPage(); $value = wfEscapeWikiText($subjPage->getPrefixedURL()); break; case 'pageid': // requested in bug 23427 $pageid = $this->getTitle()->getArticleID(); if ($pageid == 0) { # 0 means the page doesn't exist in the database, # which means the user is previewing a new page. # The vary-revision flag must be set, because the magic word # will have a different value once the page is saved. $this->mOutput->setFlag('vary-revision'); wfDebug(__METHOD__ . ": {{PAGEID}} used in a new page, setting vary-revision...\n"); } $value = $pageid ? $pageid : null; break; case 'revisionid': # Let the edit saving system know we should parse the page # *after* a revision ID has been assigned. $this->mOutput->setFlag('vary-revision'); wfDebug(__METHOD__ . ": {{REVISIONID}} used, setting vary-revision...\n"); $value = $this->mRevisionId; break; case 'revisionday': # Let the edit saving system know we should parse the page # *after* a revision ID has been assigned. This is for null edits. $this->mOutput->setFlag('vary-revision'); wfDebug(__METHOD__ . ": {{REVISIONDAY}} used, setting vary-revision...\n"); $value = intval(substr($this->getRevisionTimestamp(), 6, 2)); break; case 'revisionday2': # Let the edit saving system know we should parse the page # *after* a revision ID has been assigned. This is for null edits. $this->mOutput->setFlag('vary-revision'); wfDebug(__METHOD__ . ": {{REVISIONDAY2}} used, setting vary-revision...\n"); $value = substr($this->getRevisionTimestamp(), 6, 2); break; case 'revisionmonth': # Let the edit saving system know we should parse the page # *after* a revision ID has been assigned. This is for null edits. $this->mOutput->setFlag('vary-revision'); wfDebug(__METHOD__ . ": {{REVISIONMONTH}} used, setting vary-revision...\n"); $value = substr($this->getRevisionTimestamp(), 4, 2); break; case 'revisionmonth1': # Let the edit saving system know we should parse the page # *after* a revision ID has been assigned. This is for null edits. $this->mOutput->setFlag('vary-revision'); wfDebug(__METHOD__ . ": {{REVISIONMONTH1}} used, setting vary-revision...\n"); $value = intval(substr($this->getRevisionTimestamp(), 4, 2)); break; case 'revisionyear': # Let the edit saving system know we should parse the page # *after* a revision ID has been assigned. This is for null edits. $this->mOutput->setFlag('vary-revision'); wfDebug(__METHOD__ . ": {{REVISIONYEAR}} used, setting vary-revision...\n"); $value = substr($this->getRevisionTimestamp(), 0, 4); break; case 'revisiontimestamp': # Let the edit saving system know we should parse the page # *after* a revision ID has been assigned. This is for null edits. $this->mOutput->setFlag('vary-revision'); wfDebug(__METHOD__ . ": {{REVISIONTIMESTAMP}} used, setting vary-revision...\n"); $value = $this->getRevisionTimestamp(); break; case 'revisionuser': # Let the edit saving system know we should parse the page # *after* a revision ID has been assigned. This is for null edits. $this->mOutput->setFlag('vary-revision'); wfDebug(__METHOD__ . ": {{REVISIONUSER}} used, setting vary-revision...\n"); $value = $this->getRevisionUser(); break; case 'revisionsize': # Let the edit saving system know we should parse the page # *after* a revision ID has been assigned. This is for null edits. $this->mOutput->setFlag('vary-revision'); wfDebug(__METHOD__ . ": {{REVISIONSIZE}} used, setting vary-revision...\n"); $value = $this->getRevisionSize(); break; case 'namespace': $value = str_replace('_', ' ', $wgContLang->getNsText($this->mTitle->getNamespace())); break; case 'namespacee': $value = wfUrlencode($wgContLang->getNsText($this->mTitle->getNamespace())); break; case 'namespacenumber': $value = $this->mTitle->getNamespace(); break; case 'talkspace': $value = $this->mTitle->canTalk() ? str_replace('_', ' ', $this->mTitle->getTalkNsText()) : ''; break; case 'talkspacee': $value = $this->mTitle->canTalk() ? wfUrlencode($this->mTitle->getTalkNsText()) : ''; break; case 'subjectspace': $value = str_replace('_', ' ', $this->mTitle->getSubjectNsText()); break; case 'subjectspacee': $value = wfUrlencode($this->mTitle->getSubjectNsText()); break; case 'currentdayname': $value = $pageLang->getWeekdayName((int) MWTimestamp::getInstance($ts)->format('w') + 1); break; case 'currentyear': $value = $pageLang->formatNum(MWTimestamp::getInstance($ts)->format('Y'), true); break; case 'currenttime': $value = $pageLang->time(wfTimestamp(TS_MW, $ts), false, false); break; case 'currenthour': $value = $pageLang->formatNum(MWTimestamp::getInstance($ts)->format('H'), true); break; case 'currentweek': # @bug 4594 PHP5 has it zero padded, PHP4 does not, cast to # int to remove the padding $value = $pageLang->formatNum((int) MWTimestamp::getInstance($ts)->format('W')); break; case 'currentdow': $value = $pageLang->formatNum(MWTimestamp::getInstance($ts)->format('w')); break; case 'localdayname': $value = $pageLang->getWeekdayName((int) MWTimestamp::getLocalInstance($ts)->format('w') + 1); break; case 'localyear': $value = $pageLang->formatNum(MWTimestamp::getLocalInstance($ts)->format('Y'), true); break; case 'localtime': $value = $pageLang->time(MWTimestamp::getLocalInstance($ts)->format('YmdHis'), false, false); break; case 'localhour': $value = $pageLang->formatNum(MWTimestamp::getLocalInstance($ts)->format('H'), true); break; case 'localweek': # @bug 4594 PHP5 has it zero padded, PHP4 does not, cast to # int to remove the padding $value = $pageLang->formatNum((int) MWTimestamp::getLocalInstance($ts)->format('W')); break; case 'localdow': $value = $pageLang->formatNum(MWTimestamp::getLocalInstance($ts)->format('w')); break; case 'numberofarticles': $value = $pageLang->formatNum(SiteStats::articles()); break; case 'numberoffiles': $value = $pageLang->formatNum(SiteStats::images()); break; case 'numberofusers': $value = $pageLang->formatNum(SiteStats::users()); break; case 'numberofactiveusers': $value = $pageLang->formatNum(SiteStats::activeUsers()); break; case 'numberofpages': $value = $pageLang->formatNum(SiteStats::pages()); break; case 'numberofadmins': $value = $pageLang->formatNum(SiteStats::numberingroup('sysop')); break; case 'numberofedits': $value = $pageLang->formatNum(SiteStats::edits()); break; case 'numberofviews': global $wgDisableCounters; $value = !$wgDisableCounters ? $pageLang->formatNum(SiteStats::views()) : ''; break; case 'currenttimestamp': $value = wfTimestamp(TS_MW, $ts); break; case 'localtimestamp': $value = MWTimestamp::getLocalInstance($ts)->format('YmdHis'); break; case 'currentversion': $value = SpecialVersion::getVersion(); break; case 'articlepath': return $wgArticlePath; case 'sitename': return $wgSitename; case 'server': return $wgServer; case 'servername': $serverParts = wfParseUrl($wgServer); return $serverParts && isset($serverParts['host']) ? $serverParts['host'] : $wgServer; case 'scriptpath': return $wgScriptPath; case 'stylepath': return $wgStylePath; case 'directionmark': return $pageLang->getDirMark(); case 'contentlanguage': global $wgLanguageCode; return $wgLanguageCode; case 'cascadingsources': $value = CoreParserFunctions::cascadingsources($this); break; default: $ret = null; wfRunHooks('ParserGetVariableValueSwitch', array(&$this, &$this->mVarCache, &$index, &$ret, &$frame)); return $ret; } if ($index) { $this->mVarCache[$index] = $value; } return $value; }
/** * Return value of a magic variable (like PAGENAME) * * @private */ function getVariableValue($index) { global $wgContLang, $wgSitename, $wgServer, $wgServerName, $wgScriptPath; /** * Some of these require message or data lookups and can be * expensive to check many times. */ if (wfRunHooks('ParserGetVariableValueVarCache', array(&$this, &$this->mVarCache))) { if (isset($this->mVarCache[$index])) { return $this->mVarCache[$index]; } } $ts = wfTimestamp(TS_UNIX, $this->mOptions->getTimestamp()); wfRunHooks('ParserGetVariableValueTs', array(&$this, &$ts)); # Use the time zone global $wgLocaltimezone; if (isset($wgLocaltimezone)) { $oldtz = getenv('TZ'); putenv('TZ=' . $wgLocaltimezone); } wfSuppressWarnings(); // E_STRICT system time bitching $localTimestamp = date('YmdHis', $ts); $localMonth = date('m', $ts); $localMonthName = date('n', $ts); $localDay = date('j', $ts); $localDay2 = date('d', $ts); $localDayOfWeek = date('w', $ts); $localWeek = date('W', $ts); $localYear = date('Y', $ts); $localHour = date('H', $ts); if (isset($wgLocaltimezone)) { putenv('TZ=' . $oldtz); } wfRestoreWarnings(); switch ($index) { case 'currentmonth': return $this->mVarCache[$index] = $wgContLang->formatNum(gmdate('m', $ts)); case 'currentmonthname': return $this->mVarCache[$index] = $wgContLang->getMonthName(gmdate('n', $ts)); case 'currentmonthnamegen': return $this->mVarCache[$index] = $wgContLang->getMonthNameGen(gmdate('n', $ts)); case 'currentmonthabbrev': return $this->mVarCache[$index] = $wgContLang->getMonthAbbreviation(gmdate('n', $ts)); case 'currentday': return $this->mVarCache[$index] = $wgContLang->formatNum(gmdate('j', $ts)); case 'currentday2': return $this->mVarCache[$index] = $wgContLang->formatNum(gmdate('d', $ts)); case 'localmonth': return $this->mVarCache[$index] = $wgContLang->formatNum($localMonth); case 'localmonthname': return $this->mVarCache[$index] = $wgContLang->getMonthName($localMonthName); case 'localmonthnamegen': return $this->mVarCache[$index] = $wgContLang->getMonthNameGen($localMonthName); case 'localmonthabbrev': return $this->mVarCache[$index] = $wgContLang->getMonthAbbreviation($localMonthName); case 'localday': return $this->mVarCache[$index] = $wgContLang->formatNum($localDay); case 'localday2': return $this->mVarCache[$index] = $wgContLang->formatNum($localDay2); case 'pagename': return wfEscapeWikiText($this->mTitle->getText()); case 'pagenamee': return $this->mTitle->getPartialURL(); case 'fullpagename': return wfEscapeWikiText($this->mTitle->getPrefixedText()); case 'fullpagenamee': return $this->mTitle->getPrefixedURL(); case 'subpagename': return wfEscapeWikiText($this->mTitle->getSubpageText()); case 'subpagenamee': return $this->mTitle->getSubpageUrlForm(); case 'basepagename': return wfEscapeWikiText($this->mTitle->getBaseText()); case 'basepagenamee': return wfUrlEncode(str_replace(' ', '_', $this->mTitle->getBaseText())); case 'talkpagename': if ($this->mTitle->canTalk()) { $talkPage = $this->mTitle->getTalkPage(); return wfEscapeWikiText($talkPage->getPrefixedText()); } else { return ''; } case 'talkpagenamee': if ($this->mTitle->canTalk()) { $talkPage = $this->mTitle->getTalkPage(); return $talkPage->getPrefixedUrl(); } else { return ''; } case 'subjectpagename': $subjPage = $this->mTitle->getSubjectPage(); return wfEscapeWikiText($subjPage->getPrefixedText()); case 'subjectpagenamee': $subjPage = $this->mTitle->getSubjectPage(); return $subjPage->getPrefixedUrl(); case 'revisionid': // Let the edit saving system know we should parse the page // *after* a revision ID has been assigned. $this->mOutput->setFlag('vary-revision'); wfDebug(__METHOD__ . ": {{REVISIONID}} used, setting vary-revision...\n"); return $this->mRevisionId; case 'revisionday': // Let the edit saving system know we should parse the page // *after* a revision ID has been assigned. This is for null edits. $this->mOutput->setFlag('vary-revision'); wfDebug(__METHOD__ . ": {{REVISIONDAY}} used, setting vary-revision...\n"); return intval(substr($this->getRevisionTimestamp(), 6, 2)); case 'revisionday2': // Let the edit saving system know we should parse the page // *after* a revision ID has been assigned. This is for null edits. $this->mOutput->setFlag('vary-revision'); wfDebug(__METHOD__ . ": {{REVISIONDAY2}} used, setting vary-revision...\n"); return substr($this->getRevisionTimestamp(), 6, 2); case 'revisionmonth': // Let the edit saving system know we should parse the page // *after* a revision ID has been assigned. This is for null edits. $this->mOutput->setFlag('vary-revision'); wfDebug(__METHOD__ . ": {{REVISIONMONTH}} used, setting vary-revision...\n"); return intval(substr($this->getRevisionTimestamp(), 4, 2)); case 'revisionyear': // Let the edit saving system know we should parse the page // *after* a revision ID has been assigned. This is for null edits. $this->mOutput->setFlag('vary-revision'); wfDebug(__METHOD__ . ": {{REVISIONYEAR}} used, setting vary-revision...\n"); return substr($this->getRevisionTimestamp(), 0, 4); case 'revisiontimestamp': // Let the edit saving system know we should parse the page // *after* a revision ID has been assigned. This is for null edits. $this->mOutput->setFlag('vary-revision'); wfDebug(__METHOD__ . ": {{REVISIONTIMESTAMP}} used, setting vary-revision...\n"); return $this->getRevisionTimestamp(); case 'revisionuser': // Let the edit saving system know we should parse the page // *after* a revision ID has been assigned. This is for null edits. $this->mOutput->setFlag('vary-revision'); wfDebug(__METHOD__ . ": {{REVISIONUSER}} used, setting vary-revision...\n"); return $this->getRevisionUser(); case 'namespace': return str_replace('_', ' ', $wgContLang->getNsText($this->mTitle->getNamespace())); case 'namespacee': return wfUrlencode($wgContLang->getNsText($this->mTitle->getNamespace())); case 'talkspace': return $this->mTitle->canTalk() ? str_replace('_', ' ', $this->mTitle->getTalkNsText()) : ''; case 'talkspacee': return $this->mTitle->canTalk() ? wfUrlencode($this->mTitle->getTalkNsText()) : ''; case 'subjectspace': return $this->mTitle->getSubjectNsText(); case 'subjectspacee': return wfUrlencode($this->mTitle->getSubjectNsText()); case 'currentdayname': return $this->mVarCache[$index] = $wgContLang->getWeekdayName(gmdate('w', $ts) + 1); case 'currentyear': return $this->mVarCache[$index] = $wgContLang->formatNum(gmdate('Y', $ts), true); case 'currenttime': return $this->mVarCache[$index] = $wgContLang->time(wfTimestamp(TS_MW, $ts), false, false); case 'currenthour': return $this->mVarCache[$index] = $wgContLang->formatNum(gmdate('H', $ts), true); case 'currentweek': // @bug 4594 PHP5 has it zero padded, PHP4 does not, cast to // int to remove the padding return $this->mVarCache[$index] = $wgContLang->formatNum((int) gmdate('W', $ts)); case 'currentdow': return $this->mVarCache[$index] = $wgContLang->formatNum(gmdate('w', $ts)); case 'localdayname': return $this->mVarCache[$index] = $wgContLang->getWeekdayName($localDayOfWeek + 1); case 'localyear': return $this->mVarCache[$index] = $wgContLang->formatNum($localYear, true); case 'localtime': return $this->mVarCache[$index] = $wgContLang->time($localTimestamp, false, false); case 'localhour': return $this->mVarCache[$index] = $wgContLang->formatNum($localHour, true); case 'localweek': // @bug 4594 PHP5 has it zero padded, PHP4 does not, cast to // int to remove the padding return $this->mVarCache[$index] = $wgContLang->formatNum((int) $localWeek); case 'localdow': return $this->mVarCache[$index] = $wgContLang->formatNum($localDayOfWeek); case 'numberofarticles': return $this->mVarCache[$index] = $wgContLang->formatNum(SiteStats::articles()); case 'numberoffiles': return $this->mVarCache[$index] = $wgContLang->formatNum(SiteStats::images()); case 'numberofusers': return $this->mVarCache[$index] = $wgContLang->formatNum(SiteStats::users()); case 'numberofactiveusers': return $this->mVarCache[$index] = $wgContLang->formatNum(SiteStats::activeUsers()); case 'numberofpages': return $this->mVarCache[$index] = $wgContLang->formatNum(SiteStats::pages()); case 'numberofadmins': return $this->mVarCache[$index] = $wgContLang->formatNum(SiteStats::numberingroup('sysop')); case 'numberofedits': return $this->mVarCache[$index] = $wgContLang->formatNum(SiteStats::edits()); case 'numberofviews': return $this->mVarCache[$index] = $wgContLang->formatNum(SiteStats::views()); case 'currenttimestamp': return $this->mVarCache[$index] = wfTimestamp(TS_MW, $ts); case 'localtimestamp': return $this->mVarCache[$index] = $localTimestamp; case 'currentversion': return $this->mVarCache[$index] = SpecialVersion::getVersion(); case 'sitename': return $wgSitename; case 'server': return $wgServer; case 'servername': return $wgServerName; case 'scriptpath': return $wgScriptPath; case 'directionmark': return $wgContLang->getDirMark(); case 'contentlanguage': global $wgContLanguageCode; return $wgContLanguageCode; default: $ret = null; if (wfRunHooks('ParserGetVariableValueSwitch', array(&$this, &$this->mVarCache, &$index, &$ret))) { return $ret; } else { return null; } } }
protected function appendStatistics($property) { $data = array(); $data['pages'] = intval(SiteStats::pages()); $data['articles'] = intval(SiteStats::articles()); $data['views'] = intval(SiteStats::views()); $data['edits'] = intval(SiteStats::edits()); $data['images'] = intval(SiteStats::images()); $data['users'] = intval(SiteStats::users()); $data['admins'] = intval(SiteStats::admins()); $data['jobs'] = intval(SiteStats::jobs()); $this->getResult()->addValue('query', $property, $data); }
/** * @return int */ static function jobs() { if (!isset(self::$jobs)) { // wikia change start, eloy global $wgMemc; $key = wfMemcKey('SiteStats', 'jobs'); self::$jobs = $wgMemc->get($key); if (!self::$jobs) { // wikia change end $dbr = wfGetDB(DB_SLAVE); self::$jobs = $dbr->estimateRowCount('job'); /* Zero rows still do single row read for row that doesn't exist, but people are annoyed by that */ if (self::$jobs == 1) { self::$jobs = 0; } $wgMemc->set($key, self::$jobs, 3600); } } return self::$jobs; }
/** * @return int */ static function jobs() { if (!isset(self::$jobs)) { try { self::$jobs = array_sum(JobQueueGroup::singleton()->getQueueSizes()); } catch (JobQueueError $e) { self::$jobs = 0; } /** * Zero rows still do single row read for row that doesn't exist, * but people are annoyed by that */ if (self::$jobs == 1) { self::$jobs = 0; } } return self::$jobs; }
public function usersInGroup($group = null) { $this->checkType('usersInGroup', 1, $group, 'string'); return array((int) SiteStats::numberingroup(strtolower($group))); }
/** * @return int */ static function jobs() { if (!isset(self::$jobs)) { $dbr = wfGetDB(DB_SLAVE); self::$jobs = array_sum(JobQueueGroup::singleton()->getQueueSizes()); /** * Zero rows still do single row read for row that doesn't exist, * but people are annoyed by that */ if (self::$jobs == 1) { self::$jobs = 0; } } return self::$jobs; }
/** * @param IDatabase $dbw * @return bool|mixed */ public static function cacheUpdate($dbw) { global $wgActiveUserDays; $dbr = wfGetDB(DB_REPLICA, 'vslow'); # Get non-bot users than did some recent action other than making accounts. # If account creation is included, the number gets inflated ~20+ fold on enwiki. $activeUsers = $dbr->selectField('recentchanges', 'COUNT( DISTINCT rc_user_text )', ['rc_user != 0', 'rc_bot' => 0, 'rc_log_type != ' . $dbr->addQuotes('newusers') . ' OR rc_log_type IS NULL', 'rc_timestamp >= ' . $dbr->addQuotes($dbr->timestamp(wfTimestamp(TS_UNIX) - $wgActiveUserDays * 24 * 3600))], __METHOD__); $dbw->update('site_stats', ['ss_active_users' => intval($activeUsers)], ['ss_row_id' => 1], __METHOD__); // Invalid cache used by parser functions SiteStats::unload(); return $activeUsers; }
static function jobs() { if (!isset(self::$jobs)) { $dbr = wfGetDB(DB_SLAVE); self::$jobs = $dbr->estimateRowCount('job'); /* Zero rows still do single row read for row that doesn't exist, but people are annoyed by that */ if (self::$jobs == 1) { self::$jobs = 0; } } return self::$jobs; }
protected function appendStatistics($property) { global $wgDisableCounters; $data = array(); $data['pages'] = intval(SiteStats::pages()); $data['articles'] = intval(SiteStats::articles()); if (!$wgDisableCounters) { $data['views'] = intval(SiteStats::views()); } $data['edits'] = intval(SiteStats::edits()); $data['images'] = intval(SiteStats::images()); $data['users'] = intval(SiteStats::users()); $data['activeusers'] = intval(SiteStats::activeUsers()); $data['admins'] = intval(SiteStats::numberingroup('sysop')); $data['jobs'] = intval(SiteStats::jobs()); return $this->getResult()->addValue('query', $property, $data); }
/** * Return value of a magic variable (like PAGENAME) * * @private * * @param $index integer * @param $frame PPFrame * * @return string */ function getVariableValue($index, $frame = false) { global $wgContLang, $wgSitename, $wgServer; global $wgArticlePath, $wgScriptPath, $wgStylePath; if (is_null($this->mTitle)) { // If no title set, bad things are going to happen // later. Title should always be set since this // should only be called in the middle of a parse // operation (but the unit-tests do funky stuff) throw new MWException(__METHOD__ . ' Should only be ' . ' called while parsing (no title set)'); } /** * Some of these require message or data lookups and can be * expensive to check many times. */ if (wfRunHooks('ParserGetVariableValueVarCache', array(&$this, &$this->mVarCache))) { if (isset($this->mVarCache[$index])) { return $this->mVarCache[$index]; } } $ts = wfTimestamp(TS_UNIX, $this->mOptions->getTimestamp()); wfRunHooks('ParserGetVariableValueTs', array(&$this, &$ts)); # Use the time zone global $wgLocaltimezone; if (isset($wgLocaltimezone)) { $oldtz = date_default_timezone_get(); date_default_timezone_set($wgLocaltimezone); } $localTimestamp = date('YmdHis', $ts); $localMonth = date('m', $ts); $localMonth1 = date('n', $ts); $localMonthName = date('n', $ts); $localDay = date('j', $ts); $localDay2 = date('d', $ts); $localDayOfWeek = date('w', $ts); $localWeek = date('W', $ts); $localYear = date('Y', $ts); $localHour = date('H', $ts); if (isset($wgLocaltimezone)) { date_default_timezone_set($oldtz); } $pageLang = $this->getFunctionLang(); switch ($index) { case 'currentmonth': $value = $pageLang->formatNum(gmdate('m', $ts)); break; case 'currentmonth1': $value = $pageLang->formatNum(gmdate('n', $ts)); break; case 'currentmonthname': $value = $pageLang->getMonthName(gmdate('n', $ts)); break; case 'currentmonthnamegen': $value = $pageLang->getMonthNameGen(gmdate('n', $ts)); break; case 'currentmonthabbrev': $value = $pageLang->getMonthAbbreviation(gmdate('n', $ts)); break; case 'currentday': $value = $pageLang->formatNum(gmdate('j', $ts)); break; case 'currentday2': $value = $pageLang->formatNum(gmdate('d', $ts)); break; case 'localmonth': $value = $pageLang->formatNum($localMonth); break; case 'localmonth1': $value = $pageLang->formatNum($localMonth1); break; case 'localmonthname': $value = $pageLang->getMonthName($localMonthName); break; case 'localmonthnamegen': $value = $pageLang->getMonthNameGen($localMonthName); break; case 'localmonthabbrev': $value = $pageLang->getMonthAbbreviation($localMonthName); break; case 'localday': $value = $pageLang->formatNum($localDay); break; case 'localday2': $value = $pageLang->formatNum($localDay2); break; case 'pagename': $value = wfEscapeWikiText($this->mTitle->getText()); break; case 'pagenamee': $value = wfEscapeWikiText($this->mTitle->getPartialURL()); break; case 'fullpagename': $value = wfEscapeWikiText($this->mTitle->getPrefixedText()); break; case 'fullpagenamee': $value = wfEscapeWikiText($this->mTitle->getPrefixedURL()); break; case 'subpagename': $value = wfEscapeWikiText($this->mTitle->getSubpageText()); break; case 'subpagenamee': $value = wfEscapeWikiText($this->mTitle->getSubpageUrlForm()); break; case 'basepagename': $value = wfEscapeWikiText($this->mTitle->getBaseText()); break; case 'basepagenamee': $value = wfEscapeWikiText(wfUrlEncode(str_replace(' ', '_', $this->mTitle->getBaseText()))); break; case 'talkpagename': if ($this->mTitle->canTalk()) { $talkPage = $this->mTitle->getTalkPage(); $value = wfEscapeWikiText($talkPage->getPrefixedText()); } else { $value = ''; } break; case 'talkpagenamee': if ($this->mTitle->canTalk()) { $talkPage = $this->mTitle->getTalkPage(); $value = wfEscapeWikiText($talkPage->getPrefixedUrl()); } else { $value = ''; } break; case 'subjectpagename': $subjPage = $this->mTitle->getSubjectPage(); $value = wfEscapeWikiText($subjPage->getPrefixedText()); break; case 'subjectpagenamee': $subjPage = $this->mTitle->getSubjectPage(); $value = wfEscapeWikiText($subjPage->getPrefixedUrl()); break; case 'revisionid': # Let the edit saving system know we should parse the page # *after* a revision ID has been assigned. $this->mOutput->setFlag('vary-revision'); wfDebug(__METHOD__ . ": {{REVISIONID}} used, setting vary-revision...\n"); $value = $this->mRevisionId; break; case 'revisionday': # Let the edit saving system know we should parse the page # *after* a revision ID has been assigned. This is for null edits. $this->mOutput->setFlag('vary-revision'); wfDebug(__METHOD__ . ": {{REVISIONDAY}} used, setting vary-revision...\n"); $value = intval(substr($this->getRevisionTimestamp(), 6, 2)); break; case 'revisionday2': # Let the edit saving system know we should parse the page # *after* a revision ID has been assigned. This is for null edits. $this->mOutput->setFlag('vary-revision'); wfDebug(__METHOD__ . ": {{REVISIONDAY2}} used, setting vary-revision...\n"); $value = substr($this->getRevisionTimestamp(), 6, 2); break; case 'revisionmonth': # Let the edit saving system know we should parse the page # *after* a revision ID has been assigned. This is for null edits. $this->mOutput->setFlag('vary-revision'); wfDebug(__METHOD__ . ": {{REVISIONMONTH}} used, setting vary-revision...\n"); $value = substr($this->getRevisionTimestamp(), 4, 2); break; case 'revisionmonth1': # Let the edit saving system know we should parse the page # *after* a revision ID has been assigned. This is for null edits. $this->mOutput->setFlag('vary-revision'); wfDebug(__METHOD__ . ": {{REVISIONMONTH1}} used, setting vary-revision...\n"); $value = intval(substr($this->getRevisionTimestamp(), 4, 2)); break; case 'revisionyear': # Let the edit saving system know we should parse the page # *after* a revision ID has been assigned. This is for null edits. $this->mOutput->setFlag('vary-revision'); wfDebug(__METHOD__ . ": {{REVISIONYEAR}} used, setting vary-revision...\n"); $value = substr($this->getRevisionTimestamp(), 0, 4); break; case 'revisiontimestamp': # Let the edit saving system know we should parse the page # *after* a revision ID has been assigned. This is for null edits. $this->mOutput->setFlag('vary-revision'); wfDebug(__METHOD__ . ": {{REVISIONTIMESTAMP}} used, setting vary-revision...\n"); $value = $this->getRevisionTimestamp(); break; case 'revisionuser': # Let the edit saving system know we should parse the page # *after* a revision ID has been assigned. This is for null edits. $this->mOutput->setFlag('vary-revision'); wfDebug(__METHOD__ . ": {{REVISIONUSER}} used, setting vary-revision...\n"); $value = $this->getRevisionUser(); break; case 'namespace': $value = str_replace('_', ' ', $wgContLang->getNsText($this->mTitle->getNamespace())); break; case 'namespacee': $value = wfUrlencode($wgContLang->getNsText($this->mTitle->getNamespace())); break; case 'talkspace': $value = $this->mTitle->canTalk() ? str_replace('_', ' ', $this->mTitle->getTalkNsText()) : ''; break; case 'talkspacee': $value = $this->mTitle->canTalk() ? wfUrlencode($this->mTitle->getTalkNsText()) : ''; break; case 'subjectspace': $value = $this->mTitle->getSubjectNsText(); break; case 'subjectspacee': $value = wfUrlencode($this->mTitle->getSubjectNsText()); break; case 'currentdayname': $value = $pageLang->getWeekdayName(gmdate('w', $ts) + 1); break; case 'currentyear': $value = $pageLang->formatNum(gmdate('Y', $ts), true); break; case 'currenttime': $value = $pageLang->time(wfTimestamp(TS_MW, $ts), false, false); break; case 'currenthour': $value = $pageLang->formatNum(gmdate('H', $ts), true); break; case 'currentweek': # @bug 4594 PHP5 has it zero padded, PHP4 does not, cast to # int to remove the padding $value = $pageLang->formatNum((int) gmdate('W', $ts)); break; case 'currentdow': $value = $pageLang->formatNum(gmdate('w', $ts)); break; case 'localdayname': $value = $pageLang->getWeekdayName($localDayOfWeek + 1); break; case 'localyear': $value = $pageLang->formatNum($localYear, true); break; case 'localtime': $value = $pageLang->time($localTimestamp, false, false); break; case 'localhour': $value = $pageLang->formatNum($localHour, true); break; case 'localweek': # @bug 4594 PHP5 has it zero padded, PHP4 does not, cast to # int to remove the padding $value = $pageLang->formatNum((int) $localWeek); break; case 'localdow': $value = $pageLang->formatNum($localDayOfWeek); break; case 'numberofarticles': $value = $pageLang->formatNum(SiteStats::articles()); break; case 'numberoffiles': $value = $pageLang->formatNum(SiteStats::images()); break; case 'numberofusers': $value = $pageLang->formatNum(SiteStats::users()); break; case 'numberofactiveusers': $value = $pageLang->formatNum(SiteStats::activeUsers()); break; case 'numberofpages': $value = $pageLang->formatNum(SiteStats::pages()); break; case 'numberofadmins': $value = $pageLang->formatNum(SiteStats::numberingroup('sysop')); break; case 'numberofedits': $value = $pageLang->formatNum(SiteStats::edits()); break; case 'numberofviews': $value = $pageLang->formatNum(SiteStats::views()); break; case 'currenttimestamp': $value = wfTimestamp(TS_MW, $ts); break; case 'localtimestamp': $value = $localTimestamp; break; case 'currentversion': $value = SpecialVersion::getVersion(); break; case 'articlepath': return $wgArticlePath; case 'sitename': return $wgSitename; case 'server': return $wgServer; case 'servername': $serverParts = wfParseUrl($wgServer); return $serverParts && isset($serverParts['host']) ? $serverParts['host'] : $wgServer; case 'scriptpath': return $wgScriptPath; case 'stylepath': return $wgStylePath; case 'directionmark': return $pageLang->getDirMark(); case 'contentlanguage': global $wgLanguageCode; return $wgLanguageCode; default: $ret = null; if (wfRunHooks('ParserGetVariableValueSwitch', array(&$this, &$this->mVarCache, &$index, &$ret, &$frame))) { return $ret; } else { return null; } } if ($index) { $this->mVarCache[$index] = $value; } return $value; }
public function executeIndex() { wfProfileIn(__METHOD__); $this->total = SiteStats::articles(); wfProfileOut(__METHOD__); }
/** * Should low-performance queries be disabled? * * @return bool * @codeCoverageIgnore */ function wfQueriesMustScale() { global $wgMiserMode; return $wgMiserMode || SiteStats::pages() > 100000 && SiteStats::edits() > 1000000 && SiteStats::users() > 10000; }
protected function appendUserGroups($property, $numberInGroup) { global $wgGroupPermissions, $wgAddGroups, $wgRemoveGroups, $wgGroupsAddToSelf, $wgGroupsRemoveFromSelf; $data = array(); $result = $this->getResult(); foreach ($wgGroupPermissions as $group => $permissions) { $arr = array('name' => $group, 'rights' => array_keys($permissions, true)); if ($numberInGroup) { global $wgAutopromote; if ($group == 'user') { $arr['number'] = SiteStats::users(); // '*' and autopromote groups have no size } elseif ($group !== '*' && !isset($wgAutopromote[$group])) { $arr['number'] = SiteStats::numberInGroup($group); } } $groupArr = array('add' => $wgAddGroups, 'remove' => $wgRemoveGroups, 'add-self' => $wgGroupsAddToSelf, 'remove-self' => $wgGroupsRemoveFromSelf); foreach ($groupArr as $type => $rights) { if (isset($rights[$group])) { $arr[$type] = $rights[$group]; $result->setIndexedTagName($arr[$type], 'group'); } } $result->setIndexedTagName($arr['rights'], 'permission'); $data[] = $arr; } $result->setIndexedTagName($data, 'group'); return $result->addValue('query', $property, $data); }
public static function numberingroup($parser, $name = '', $raw = null) { return self::formatRaw(SiteStats::numberingroup(strtolower($name)), $raw); }
/** * Return value of a magic variable (like PAGENAME) * * @private */ function getVariableValue($index) { global $wgContLang, $wgSitename, $wgServer, $wgServerName, $wgScriptPath; /** * Some of these require message or data lookups and can be * expensive to check many times. */ static $varCache = array(); if (wfRunHooks('ParserGetVariableValueVarCache', array(&$this, &$varCache))) { if (isset($varCache[$index])) { return $varCache[$index]; } } $ts = time(); wfRunHooks('ParserGetVariableValueTs', array(&$this, &$ts)); # Use the time zone global $wgLocaltimezone; if (isset($wgLocaltimezone)) { $oldtz = getenv('TZ'); putenv('TZ=' . $wgLocaltimezone); } $localTimestamp = date('YmdHis', $ts); $localMonth = date('m', $ts); $localMonthName = date('n', $ts); $localDay = date('j', $ts); $localDay2 = date('d', $ts); $localDayOfWeek = date('w', $ts); $localWeek = date('W', $ts); $localYear = date('Y', $ts); $localHour = date('H', $ts); if (isset($wgLocaltimezone)) { putenv('TZ=' . $oldtz); } switch ($index) { case 'currentmonth': return $varCache[$index] = $wgContLang->formatNum(date('m', $ts)); case 'currentmonthname': return $varCache[$index] = $wgContLang->getMonthName(date('n', $ts)); case 'currentmonthnamegen': return $varCache[$index] = $wgContLang->getMonthNameGen(date('n', $ts)); case 'currentmonthabbrev': return $varCache[$index] = $wgContLang->getMonthAbbreviation(date('n', $ts)); case 'currentday': return $varCache[$index] = $wgContLang->formatNum(date('j', $ts)); case 'currentday2': return $varCache[$index] = $wgContLang->formatNum(date('d', $ts)); case 'localmonth': return $varCache[$index] = $wgContLang->formatNum($localMonth); case 'localmonthname': return $varCache[$index] = $wgContLang->getMonthName($localMonthName); case 'localmonthnamegen': return $varCache[$index] = $wgContLang->getMonthNameGen($localMonthName); case 'localmonthabbrev': return $varCache[$index] = $wgContLang->getMonthAbbreviation($localMonthName); case 'localday': return $varCache[$index] = $wgContLang->formatNum($localDay); case 'localday2': return $varCache[$index] = $wgContLang->formatNum($localDay2); case 'pagename': return $this->mTitle->getText(); case 'pagenamee': return $this->mTitle->getPartialURL(); case 'fullpagename': return $this->mTitle->getPrefixedText(); case 'fullpagenamee': return $this->mTitle->getPrefixedURL(); case 'subpagename': return $this->mTitle->getSubpageText(); case 'subpagenamee': return $this->mTitle->getSubpageUrlForm(); case 'basepagename': return $this->mTitle->getBaseText(); case 'basepagenamee': return wfUrlEncode(str_replace(' ', '_', $this->mTitle->getBaseText())); case 'talkpagename': if ($this->mTitle->canTalk()) { $talkPage = $this->mTitle->getTalkPage(); return $talkPage->getPrefixedText(); } else { return ''; } case 'talkpagenamee': if ($this->mTitle->canTalk()) { $talkPage = $this->mTitle->getTalkPage(); return $talkPage->getPrefixedUrl(); } else { return ''; } case 'subjectpagename': $subjPage = $this->mTitle->getSubjectPage(); return $subjPage->getPrefixedText(); case 'subjectpagenamee': $subjPage = $this->mTitle->getSubjectPage(); return $subjPage->getPrefixedUrl(); case 'revisionid': return $this->mRevisionId; case 'revisionday': return intval(substr($this->getRevisionTimestamp(), 6, 2)); case 'revisionday2': return substr($this->getRevisionTimestamp(), 6, 2); case 'revisionmonth': return intval(substr($this->getRevisionTimestamp(), 4, 2)); case 'revisionyear': return substr($this->getRevisionTimestamp(), 0, 4); case 'revisiontimestamp': return $this->getRevisionTimestamp(); case 'namespace': return str_replace('_', ' ', $wgContLang->getNsText($this->mTitle->getNamespace())); case 'namespacee': return wfUrlencode($wgContLang->getNsText($this->mTitle->getNamespace())); case 'talkspace': return $this->mTitle->canTalk() ? str_replace('_', ' ', $this->mTitle->getTalkNsText()) : ''; case 'talkspacee': return $this->mTitle->canTalk() ? wfUrlencode($this->mTitle->getTalkNsText()) : ''; case 'subjectspace': return $this->mTitle->getSubjectNsText(); case 'subjectspacee': return wfUrlencode($this->mTitle->getSubjectNsText()); case 'currentdayname': return $varCache[$index] = $wgContLang->getWeekdayName(date('w', $ts) + 1); case 'currentyear': return $varCache[$index] = $wgContLang->formatNum(date('Y', $ts), true); case 'currenttime': return $varCache[$index] = $wgContLang->time(wfTimestamp(TS_MW, $ts), false, false); case 'currenthour': return $varCache[$index] = $wgContLang->formatNum(date('H', $ts), true); case 'currentweek': // @bug 4594 PHP5 has it zero padded, PHP4 does not, cast to // int to remove the padding return $varCache[$index] = $wgContLang->formatNum((int) date('W', $ts)); case 'currentdow': return $varCache[$index] = $wgContLang->formatNum(date('w', $ts)); case 'localdayname': return $varCache[$index] = $wgContLang->getWeekdayName($localDayOfWeek + 1); case 'localyear': return $varCache[$index] = $wgContLang->formatNum($localYear, true); case 'localtime': return $varCache[$index] = $wgContLang->time($localTimestamp, false, false); case 'localhour': return $varCache[$index] = $wgContLang->formatNum($localHour, true); case 'localweek': // @bug 4594 PHP5 has it zero padded, PHP4 does not, cast to // int to remove the padding return $varCache[$index] = $wgContLang->formatNum((int) $localWeek); case 'localdow': return $varCache[$index] = $wgContLang->formatNum($localDayOfWeek); case 'numberofarticles': return $varCache[$index] = $wgContLang->formatNum(SiteStats::articles()); case 'numberoffiles': return $varCache[$index] = $wgContLang->formatNum(SiteStats::images()); case 'numberofusers': return $varCache[$index] = $wgContLang->formatNum(SiteStats::users()); case 'numberofpages': return $varCache[$index] = $wgContLang->formatNum(SiteStats::pages()); case 'numberofadmins': return $varCache[$index] = $wgContLang->formatNum(SiteStats::admins()); case 'currenttimestamp': return $varCache[$index] = wfTimestampNow(); case 'localtimestamp': return $varCache[$index] = $localTimestamp; case 'currentversion': return $varCache[$index] = SpecialVersion::getVersion(); case 'sitename': return $wgSitename; case 'server': return $wgServer; case 'servername': return $wgServerName; case 'scriptpath': return $wgScriptPath; case 'directionmark': return $wgContLang->getDirMark(); case 'contentlanguage': global $wgContLanguageCode; return $wgContLanguageCode; default: $ret = null; if (wfRunHooks('ParserGetVariableValueSwitch', array(&$this, &$varCache, &$index, &$ret))) { return $ret; } else { return null; } } }
/** * Print basic information about this site. */ public function printWikiInfo() { global $wgSitename, $wgLanguageCode; $this->prepareSerialization(); $this->delay_flush = 35; // don't do intermediate flushes with default parameters // assemble export data: $expData = new SMWExpData(new SMWExpResource('&wiki;#wiki')); $expData->addPropertyObjectValue(SMWExporter::getInstance()->getSpecialNsResource('rdf', 'type'), new SMWExpData(SMWExporter::getInstance()->getSpecialNsResource('swivt', 'Wikisite'))); // basic wiki information $expData->addPropertyObjectValue(SMWExporter::getInstance()->getSpecialNsResource('rdfs', 'label'), new SMWExpLiteral($wgSitename)); $expData->addPropertyObjectValue(SMWExporter::getInstance()->getSpecialNsResource('swivt', 'siteName'), new SMWExpLiteral($wgSitename, 'http://www.w3.org/2001/XMLSchema#string')); $expData->addPropertyObjectValue(SMWExporter::getInstance()->getSpecialNsResource('swivt', 'pagePrefix'), new SMWExpLiteral(SMWExporter::getInstance()->expandURI('&wikiurl;'), 'http://www.w3.org/2001/XMLSchema#string')); $expData->addPropertyObjectValue(SMWExporter::getInstance()->getSpecialNsResource('swivt', 'smwVersion'), new SMWExpLiteral(SMW_VERSION, 'http://www.w3.org/2001/XMLSchema#string')); $expData->addPropertyObjectValue(SMWExporter::getInstance()->getSpecialNsResource('swivt', 'langCode'), new SMWExpLiteral($wgLanguageCode, 'http://www.w3.org/2001/XMLSchema#string')); $mainpage = Title::newMainPage(); if (!is_null($mainpage)) { $ed = new SMWExpData(new SMWExpResource($mainpage->getFullURL())); $expData->addPropertyObjectValue(SMWExporter::getInstance()->getSpecialNsResource('swivt', 'mainPage'), $ed); } // statistical information $expData->addPropertyObjectValue(SMWExporter::getInstance()->getSpecialNsResource('swivt', 'pageCount'), new SMWExpLiteral(SiteStats::pages(), 'http://www.w3.org/2001/XMLSchema#int')); $expData->addPropertyObjectValue(SMWExporter::getInstance()->getSpecialNsResource('swivt', 'contentPageCount'), new SMWExpLiteral(SiteStats::articles(), 'http://www.w3.org/2001/XMLSchema#int')); $expData->addPropertyObjectValue(SMWExporter::getInstance()->getSpecialNsResource('swivt', 'mediaCount'), new SMWExpLiteral(SiteStats::images(), 'http://www.w3.org/2001/XMLSchema#int')); $expData->addPropertyObjectValue(SMWExporter::getInstance()->getSpecialNsResource('swivt', 'editCount'), new SMWExpLiteral(SiteStats::edits(), 'http://www.w3.org/2001/XMLSchema#int')); // SiteStats::views was deprecated in MediaWiki 1.25 // "Stop calling this function, it will be removed some time in the future" //$expData->addPropertyObjectValue( // SMWExporter::getInstance()->getSpecialNsResource( 'swivt', 'viewCount' ), // new SMWExpLiteral( SiteStats::views(), 'http://www.w3.org/2001/XMLSchema#int' ) //); $expData->addPropertyObjectValue(SMWExporter::getInstance()->getSpecialNsResource('swivt', 'userCount'), new SMWExpLiteral(SiteStats::users(), 'http://www.w3.org/2001/XMLSchema#int')); $expData->addPropertyObjectValue(SMWExporter::getInstance()->getSpecialNsResource('swivt', 'adminCount'), new SMWExpLiteral(SiteStats::numberingroup('sysop'), 'http://www.w3.org/2001/XMLSchema#int')); $this->serializer->startSerialization(); $this->serializer->serializeExpData(SMWExporter::getInstance()->getOntologyExpData('')); $this->serializer->serializeExpData($expData); // link to list of existing pages: if (strpos(SMWExporter::getInstance()->expandURI('&wikiurl;'), '?') === false) { // check whether we have title as a first parameter or in URL $nexturl = SMWExporter::getInstance()->expandURI('&export;?offset=0'); } else { $nexturl = SMWExporter::getInstance()->expandURI('&export;&offset=0'); } $expData = new SMWExpData(new SMWExpResource($nexturl)); $ed = new SMWExpData(SMWExporter::getInstance()->getSpecialNsResource('owl', 'Thing')); $expData->addPropertyObjectValue(SMWExporter::getInstance()->getSpecialNsResource('rdf', 'type'), $ed); $ed = new SMWExpData(new SMWExpResource($nexturl)); $expData->addPropertyObjectValue(SMWExporter::getInstance()->getSpecialNsResource('rdfs', 'isDefinedBy'), $ed); $this->serializer->serializeExpData($expData); $this->serializer->finishSerialization(); $this->flush(true); }
/** * Render page header for Hubs * * @param: array $params */ public function executeHubs($params) { global $wgSupressPageTitle; wfProfileIn(__METHOD__); $this->displaytitle = true; // Leave this for now. To discuss do we want PageTitle if ($this->displaytitle) { $this->title = wfMessage('oasis-home')->escaped(); } // number of pages on this wiki $this->tallyMsg = wfMessage('oasis-total-articles-mainpage', SiteStats::articles())->parse(); if (!empty($wgSupressPageTitle)) { $this->title = ''; } wfProfileOut(__METHOD__); }