/** * Display some statistics when a user clicks stats link (&action=stats) * * @param $blckid Int: ID number of the block */ private function showStatsList($blckid) { global $wgOut, $wgLang, $wgUser, $wgContLang; wfProfileIn(__METHOD__); $action = $this->mTitle->escapeLocalURL($this->makeListUrlParams(true)); $skin = $wgUser->getSkin(); $regexData = new RegexBlockData(); $this->numStatResults = $regexData->fetchNbrStatResults($blckid); $filter = 'action=stats&filter=' . urlencode($this->mFilter) . '&blckid=' . urlencode($blckid); $pager = wfViewPrevNext($this->mOffset, $this->mLimit, $wgContLang->specialpage('RegexBlock'), $filter, $this->numStatResults - $this->mOffset <= $this->mLimit); /* allow display by specific blockers only */ $blockInfo = $regexData->getRegexBlockById($blckid); $stats_list = array(); if (!empty($blockInfo) && is_object($blockInfo)) { $stats_list = $regexData->getStatsData($blckid, $this->mLimit, $this->mOffset); } $blocker_link = $skin->makeKnownLinkObj($this->mTitle, $blockInfo->blckby_blocker, 'filter=' . urlencode($blockInfo->blckby_blocker)); $blockername_link = $skin->makeKnownLinkObj($this->mTitle, $blockInfo->blckby_name, 'rfilter=' . urlencode($blockInfo->blckby_name)); $blockReason = $blockInfo->blckby_reason ? wfMsg('regexblock-form-reason') . $blockInfo->blckby_reason : wfMsg('regexblock-view-reason-default'); $wgOut->addHTML('<h5>' . wfMsg('regexblock-stats-title') . ' <strong> ' . $blockername_link . '</strong> (' . wfMsg('regexblock-view-block-by') . ' <b>' . $blocker_link . '</b>, <i>' . $blockReason . '</i>)</h5><br />'); if (!empty($stats_list)) { $wgOut->addHTML('<p>' . $pager . '</p><br /><ul>'); foreach ($stats_list as $id => $row) { $wgOut->addHTML('<li style="border-bottom:1px dashed #778899; padding-bottom:2px;font-size:11px"> ' . wfMsg('regexblock-match-stats-record', array($row->stats_match, $row->stats_user, htmlspecialchars($row->stats_dbname), $wgLang->timeanddate(wfTimestamp(TS_MW, $row->stats_timestamp), true), $row->stats_ip, $wgLang->date(wfTimestamp(TS_MW, $row->stats_timestamp), true), $wgLang->time(wfTimestamp(TS_MW, $row->stats_timestamp), true))) . ' </li>'); } $wgOut->addHTML('</ul><br /> <p>' . $pager . '</p>'); } else { $wgOut->addWikiMsg('regexblock-nodata-found'); } wfProfileOut(__METHOD__); }
function wfRegexBlockUnsetKeys($username) { global $wgMemc; wfProfileIn(__METHOD__); $data = RegexBlockData::getRegexBlockByName($username, 1, 1); if (empty($data)) { wfProfileOut(__METHOD__); return false; } /* nbr of blockers */ $key = RegexBlockData::getMemcKey("num_rec"); $memcData = $wgMemc->get($key); if (!is_null($memcData)) { if ($memcData > 0) { $memcData--; } $wgMemc->set($key, $memcData, REGEXBLOCK_EXPIRE); } /* main cache of user-block data */ $key = RegexBlockData::getMemcKey("block_user", $username); $wgMemc->delete($key); /* blockers */ $key = RegexBlockData::getMemcKey("blockers"); $blockers_array = $wgMemc->get($key); if (!is_null($blockers_array)) { $blockers_array = array_diff($blockers_array, array($data->blckby_blocker)); $wgMemc->set($key, $blockers_array, REGEXBLOCK_EXPIRE); } /* blocker's matches */ $memkey = RegexBlockData::getMemcKey("all_blockers"); $blockData = $wgMemc->get($memkey); if (!is_null($blockData)) { $key = "regex"; if (User::isIP($data->blckby_name) != 0) { $key = "ips"; } elseif ($data->blckby_exact != 0) { $key = "exact"; } if (isset($blockData[$data->blckby_blocker]) && isset($blockData[$data->blckby_blocker][$key])) { $blockData[$data->blckby_blocker][$key] = array_diff($blockData[$data->blckby_blocker][$key], array($data->blckby_name)); $wgMemc->set($memkey, $blockData, REGEXBLOCK_EXPIRE); } } /* clear user object in memc */ $userId = User::idFromName($username); if ($userId) { $wgMemc->delete(wfMemcKey('user', 'id', $userId)); $_key = wfSharedMemcKey('user_touched', $userId); $wgMemc->delete($_key); } wfProfileOut(__METHOD__); return true; }
private function showStatsList($blckid) { global $wgOut, $wgLang, $wgUser; global $wgContLang; wfProfileIn(__METHOD__); $titleObj = Title::makeTitle(NS_SPECIAL, 'RegexBlock'); $action = htmlspecialchars($titleObj->getLocalURL()) . "?" . $this->makeListUrlParams(true); $regexData = new RegexBlockData(); $this->numStatResults = $regexData->fetchNbrStatResults($blckid); $filter = 'action=stats&filter=' . urlencode($this->mFilter) . '&blckid=' . urlencode($blckid); $pager = $wgLang->viewPrevNext(SpecialPage::getTitleFor('RegexBlock'), $this->mOffset, $this->mLimit, wfCgiToArray($filter), $this->numStatResults - $this->mOffset <= $this->mLimit); /* allow display by specific blockers only */ $blockInfo = $regexData->getRegexBlockById($blckid); $stats_list = array(); if (!empty($blockInfo) && is_object($blockInfo)) { $stats_list = $regexData->getStatsData($blckid, $this->mLimit, $this->mOffset); } $oTmpl = new EasyTemplate(dirname(__FILE__) . "/templates/"); $oTmpl->set_vars(array("pager" => $pager, "action" => $action, "stats_list" => $stats_list, "lang" => $wgLang, "skin" => RequestContext::getMain()->getSkin(), "blockInfo" => $blockInfo, "titleObj" => $titleObj)); $wgOut->addHTML($oTmpl->render("page-stats")); wfProfileOut(__METHOD__); }