コード例 #1
0
 function show()
 {
     $out = $this->getOutput();
     $user = $this->getUser();
     // Header
     $out->addWikiMsg('abusefilter-tools-text');
     // Expression evaluator
     $eval = '';
     $eval .= AbuseFilter::buildEditBox('', 'wpTestExpr');
     // Only let users with permission actually test it
     if ($user->isAllowed('abusefilter-modify')) {
         $eval .= Xml::tags('p', null, Xml::element('input', array('type' => 'button', 'id' => 'mw-abusefilter-submitexpr', 'value' => $this->msg('abusefilter-tools-submitexpr')->text())));
         $eval .= Xml::element('p', array('id' => 'mw-abusefilter-expr-result'), ' ');
     }
     $eval = Xml::fieldset($this->msg('abusefilter-tools-expr')->text(), $eval);
     $out->addHTML($eval);
     $out->addModules('ext.abuseFilter.tools');
     if ($user->isAllowed('abusefilter-modify')) {
         // Hacky little box to re-enable autoconfirmed if it got disabled
         $rac = '';
         $rac .= Xml::inputLabel($this->msg('abusefilter-tools-reautoconfirm-user')->text(), 'wpReAutoconfirmUser', 'reautoconfirm-user', 45);
         $rac .= ' ';
         $rac .= Xml::element('input', array('type' => 'button', 'id' => 'mw-abusefilter-reautoconfirmsubmit', 'value' => $this->msg('abusefilter-tools-reautoconfirm-submit')->text()));
         $rac = Xml::fieldset($this->msg('abusefilter-tools-reautoconfirm')->text(), $rac);
         $out->addHTML($rac);
     }
 }
コード例 #2
0
 function show()
 {
     global $wgOut, $wgUser, $wgRequest;
     AbuseFilter::disableConditionLimit();
     if (!$wgUser->isAllowed('abusefilter-modify')) {
         $wgOut->addWikiMsg('abusefilter-mustbeeditor');
         return;
     }
     $this->loadParameters();
     $wgOut->setPageTitle(wfMsg('abusefilter-test'));
     $wgOut->addWikiMsg('abusefilter-test-intro', self::$mChangeLimit);
     $output = '';
     $output .= AbuseFilter::buildEditBox($this->mFilter, 'wpTestFilter') . "\n";
     $output .= Xml::inputLabel(wfMsg('abusefilter-test-load-filter'), 'wpInsertFilter', 'mw-abusefilter-load-filter', 10, '') . ' ' . Xml::element('input', array('type' => 'button', 'value' => wfMsg('abusefilter-test-load'), 'id' => 'mw-abusefilter-load'));
     $output = Xml::tags('div', array('id' => 'mw-abusefilter-test-editor'), $output);
     $output .= Xml::tags('p', null, Xml::checkLabel(wfMsg('abusefilter-test-shownegative'), 'wpShowNegative', 'wpShowNegative', $this->mShowNegative));
     // Selectory stuff
     $selectFields = array();
     $selectFields['abusefilter-test-user'] = Xml::input('wpTestUser', 45, $this->mTestUser);
     $selectFields['abusefilter-test-period-start'] = Xml::input('wpTestPeriodStart', 45, $this->mTestPeriodStart);
     $selectFields['abusefilter-test-period-end'] = Xml::input('wpTestPeriodEnd', 45, $this->mTestPeriodEnd);
     $selectFields['abusefilter-test-page'] = Xml::input('wpTestPage', 45, $this->mTestPage);
     $output .= Xml::buildForm($selectFields, 'abusefilter-test-submit');
     $output .= Html::hidden('title', $this->getTitle('test')->getPrefixedText());
     $output = Xml::tags('form', array('action' => $this->getTitle('test')->getLocalURL(), 'method' => 'post'), $output);
     $output = Xml::fieldset(wfMsg('abusefilter-test-legend'), $output);
     $wgOut->addHTML($output);
     if ($wgRequest->wasPosted()) {
         $this->doTest();
     }
 }
コード例 #3
0
 function show()
 {
     global $wgOut, $wgUser;
     // Header
     $wgOut->setSubTitle(wfMsg('abusefilter-tools-subtitle'));
     $wgOut->addWikiMsg('abusefilter-tools-text');
     // Expression evaluator
     $eval = '';
     $eval .= AbuseFilter::buildEditBox('', 'wpTestExpr');
     // Only let users with permission actually test it
     if ($wgUser->isAllowed('abusefilter-modify')) {
         $eval .= Xml::tags('p', null, Xml::element('input', array('type' => 'button', 'id' => 'mw-abusefilter-submitexpr', 'onclick' => 'doExprSubmit();', 'value' => wfMsg('abusefilter-tools-submitexpr'))));
         $eval .= Xml::element('p', array('id' => 'mw-abusefilter-expr-result'), ' ');
     }
     $eval = Xml::fieldset(wfMsg('abusefilter-tools-expr'), $eval);
     $wgOut->addHTML($eval);
     // Associated script
     $exprScript = file_get_contents(dirname(__FILE__) . '/tools.js');
     $wgOut->addInlineScript($exprScript);
     global $wgUser;
     if ($wgUser->isAllowed('abusefilter-modify')) {
         // Hacky little box to re-enable autoconfirmed if it got disabled
         $rac = '';
         $rac .= Xml::inputLabel(wfMsg('abusefilter-tools-reautoconfirm-user'), 'wpReAutoconfirmUser', 'reautoconfirm-user', 45);
         $rac .= ' ';
         $rac .= Xml::element('input', array('type' => 'button', 'id' => 'mw-abusefilter-reautoconfirmsubmit', 'onclick' => 'doReautoSubmit();', 'value' => wfMsg('abusefilter-tools-reautoconfirm-submit')));
         $rac = Xml::fieldset(wfMsg('abusefilter-tools-reautoconfirm'), $rac);
         $wgOut->addHTML($rac);
     }
 }
コード例 #4
0
 function buildFilterEditor($error, $filter, $history_id = null)
 {
     if ($filter === null) {
         return false;
     }
     // Build the edit form
     $out = $this->getOutput();
     $lang = $this->getLanguage();
     $user = $this->getUser();
     $sk = $this->getSkin();
     // Load from request OR database.
     list($row, $actions) = $this->loadRequest($filter, $history_id);
     if (!$row) {
         $out->addWikiMsg('abusefilter-edit-badfilter');
         $out->addHTML($sk->link($this->getTitle(), wfMsg('abusefilter-return')));
         return;
     }
     $out->setSubtitle(wfMsg('abusefilter-edit-subtitle', $filter, $history_id));
     // Hide hidden filters.
     if ((isset($row->af_hidden) && $row->af_hidden || AbuseFilter::filterHidden($filter)) && !$this->canViewPrivate()) {
         return wfMsg('abusefilter-edit-denied');
     }
     $output = '';
     if ($error) {
         $out->addHTML("<span class=\"error\">{$error}</span>");
     }
     // Read-only attribute
     $readOnlyAttrib = array();
     $cbReadOnlyAttrib = array();
     // For checkboxes
     if (!$this->canEdit()) {
         $readOnlyAttrib['readonly'] = 'readonly';
         $cbReadOnlyAttrib['disabled'] = 'disabled';
     }
     $fields = array();
     $fields['abusefilter-edit-id'] = $this->mFilter == 'new' ? wfMsg('abusefilter-edit-new') : $lang->formatNum($filter);
     $fields['abusefilter-edit-description'] = Xml::input('wpFilterDescription', 45, isset($row->af_public_comments) ? $row->af_public_comments : '', $readOnlyAttrib);
     // Hit count display
     if (!empty($row->af_hit_count)) {
         $count = (int) $row->af_hit_count;
         $count_display = wfMsgExt('abusefilter-hitcount', array('parseinline'), $lang->formatNum($count));
         $hitCount = $sk->makeKnownLinkObj(SpecialPage::getTitleFor('AbuseLog'), $count_display, 'wpSearchFilter=' . $row->af_id);
         $fields['abusefilter-edit-hitcount'] = $hitCount;
     }
     if ($filter !== 'new') {
         // Statistics
         global $wgMemc;
         $matches_count = $wgMemc->get(AbuseFilter::filterMatchesKey($filter));
         $total = $wgMemc->get(AbuseFilter::filterUsedKey());
         if ($total > 0) {
             $matches_percent = sprintf('%.2f', 100 * $matches_count / $total);
             list($timeProfile, $condProfile) = AbuseFilter::getFilterProfile($filter);
             $fields['abusefilter-edit-status-label'] = wfMsgExt('abusefilter-edit-status', array('parsemag', 'escape'), array($lang->formatNum($total), $lang->formatNum($matches_count), $lang->formatNum($matches_percent), $lang->formatNum($timeProfile), $lang->formatNum($condProfile)));
         }
     }
     $fields['abusefilter-edit-rules'] = AbuseFilter::buildEditBox($row->af_pattern, 'wpFilterRules', true, $this->canEdit());
     $fields['abusefilter-edit-notes'] = Xml::textarea('wpFilterNotes', isset($row->af_comments) ? $row->af_comments . "\n" : "\n", 40, 5, $readOnlyAttrib);
     // Build checkboxen
     $checkboxes = array('hidden', 'enabled', 'deleted');
     $flags = '';
     global $wgAbuseFilterIsCentral;
     if ($wgAbuseFilterIsCentral) {
         $checkboxes[] = 'global';
     }
     if (isset($row->af_throttled) && $row->af_throttled) {
         global $wgAbuseFilterEmergencyDisableThreshold;
         $threshold_percent = sprintf('%.2f', $wgAbuseFilterEmergencyDisableThreshold * 100);
         $flags .= $out->parse(wfMsg('abusefilter-edit-throttled', $lang->formatNum($threshold_percent)));
     }
     foreach ($checkboxes as $checkboxId) {
         $message = "abusefilter-edit-{$checkboxId}";
         $dbField = "af_{$checkboxId}";
         $postVar = 'wpFilter' . ucfirst($checkboxId);
         $checkbox = Xml::checkLabel(wfMsg($message), $postVar, $postVar, isset($row->{$dbField}) ? $row->{$dbField} : false, $cbReadOnlyAttrib);
         $checkbox = Xml::tags('p', null, $checkbox);
         $flags .= $checkbox;
     }
     $fields['abusefilter-edit-flags'] = $flags;
     $tools = '';
     if ($filter != 'new' && $user->isAllowed('abusefilter-revert')) {
         $tools .= Xml::tags('p', null, $sk->link($this->getTitle('revert/' . $filter), wfMsg('abusefilter-edit-revert')));
     }
     if ($filter != 'new') {
         // Test link
         $tools .= Xml::tags('p', null, $sk->link($this->getTitle("test/{$filter}"), wfMsgExt('abusefilter-edit-test-link', 'parseinline')));
         // Last modification details
         $userLink = $sk->userLink($row->af_user, $row->af_user_text) . $sk->userToolLinks($row->af_user, $row->af_user_text);
         $userName = $row->af_user_text;
         $fields['abusefilter-edit-lastmod'] = wfMsgExt('abusefilter-edit-lastmod-text', array('parseinline', 'replaceafter'), array($lang->timeanddate($row->af_timestamp, true), $userLink, $lang->date($row->af_timestamp, true), $lang->time($row->af_timestamp, true), $userName));
         $history_display = wfMsgExt('abusefilter-edit-viewhistory', array('parseinline'));
         $fields['abusefilter-edit-history'] = $sk->makeKnownLinkObj($this->getTitle('history/' . $filter), $history_display);
     }
     // Add export
     $exportText = json_encode(array('row' => $row, 'actions' => $actions));
     $tools .= Xml::tags('a', array('href' => '#', 'id' => 'mw-abusefilter-export-link'), wfMsgExt('abusefilter-edit-export', 'parseinline'));
     $tools .= Xml::element('textarea', array('readonly' => 'readonly', 'id' => 'mw-abusefilter-export'), $exportText);
     $fields['abusefilter-edit-tools'] = $tools;
     $form = Xml::buildForm($fields);
     $form = Xml::fieldset(wfMsg('abusefilter-edit-main'), $form);
     $form .= Xml::fieldset(wfMsg('abusefilter-edit-consequences'), $this->buildConsequenceEditor($row, $actions));
     if ($this->canEdit()) {
         $form .= Xml::submitButton(wfMsg('abusefilter-edit-save'), array('accesskey' => 's'));
         $form .= Html::hidden('wpEditToken', $user->getEditToken(array('abusefilter', $filter)));
     }
     $form = Xml::tags('form', array('action' => $this->getTitle($filter)->getFullURL(), 'method' => 'post'), $form);
     $output .= $form;
     return $output;
 }
コード例 #5
0
 function showExaminer($vars)
 {
     $output = $this->getOutput();
     if (!$vars) {
         $output->addWikiMsg('abusefilter-examine-incompatible');
         return;
     }
     if ($vars instanceof AbuseFilterVariableHolder) {
         $vars = $vars->exportAllVars();
     }
     $html = '';
     $output->addModules('ext.abuseFilter.examine');
     // Add test bit
     if ($this->getUser()->isAllowed('abusefilter-modify')) {
         $tester = Xml::tags('h2', null, $this->msg('abusefilter-examine-test')->parse());
         $tester .= AbuseFilter::buildEditBox($this->mTestFilter, 'wpTestFilter', false);
         $tester .= "\n" . Xml::inputLabel($this->msg('abusefilter-test-load-filter')->text(), 'wpInsertFilter', 'mw-abusefilter-load-filter', 10, '') . '&#160;' . Xml::element('input', array('type' => 'button', 'value' => $this->msg('abusefilter-test-load')->text(), 'id' => 'mw-abusefilter-load'));
         $html .= Xml::tags('div', array('id' => 'mw-abusefilter-examine-editor'), $tester);
         $html .= Xml::tags('p', null, Xml::element('input', array('type' => 'button', 'value' => $this->msg('abusefilter-examine-test-button')->text(), 'id' => 'mw-abusefilter-examine-test')) . Xml::element('div', array('id' => 'mw-abusefilter-syntaxresult', 'style' => 'display: none;'), '&#160;'));
     }
     // Variable dump
     $html .= Xml::tags('h2', null, $this->msg('abusefilter-examine-vars', 'parseinline')->parse());
     $html .= AbuseFilter::buildVarDumpTable($vars);
     $output->addHTML($html);
 }
コード例 #6
0
 function showExaminer($vars)
 {
     global $wgOut, $wgUser;
     if (!$vars) {
         $wgOut->addWikiMsg('abusefilter-examine-incompatible');
         return;
     }
     if ($vars instanceof AbuseFilterVariableHolder) {
         $vars = $vars->exportAllVars();
     }
     $output = '';
     // Send armoured as JSON -- I totally give up on trying to send it as a proper object.
     $wgOut->addInlineScript("var wgExamineVars = " . Xml::encodeJsVar(json_encode($vars)) . ";");
     $wgOut->addInlineScript(file_get_contents(dirname(__FILE__) . '/examine.js'));
     // Add messages
     $msg = array();
     $msg['match'] = wfMsg('abusefilter-examine-match');
     $msg['nomatch'] = wfMsg('abusefilter-examine-nomatch');
     $msg['syntaxerror'] = wfMsg('abusefilter-examine-syntaxerror');
     $wgOut->addInlineScript("var wgMessageMatch = " . Xml::encodeJsVar($msg['match']) . ";\n" . "var wgMessageNomatch = " . Xml::encodeJsVar($msg['nomatch']) . ";\n" . "var wgMessageError = " . Xml::encodeJsVar($msg['syntaxerror']) . ";\n");
     // Add test bit
     if ($wgUser->isAllowed('abusefilter-modify')) {
         $tester = Xml::tags('h2', null, wfMsgExt('abusefilter-examine-test', 'parseinline'));
         $tester .= AbuseFilter::buildEditBox($this->mTestFilter, 'wpTestFilter', false);
         $tester .= "\n" . Xml::inputLabel(wfMsg('abusefilter-test-load-filter'), 'wpInsertFilter', 'mw-abusefilter-load-filter', 10, '') . '&nbsp;' . Xml::element('input', array('type' => 'button', 'value' => wfMsg('abusefilter-test-load'), 'id' => 'mw-abusefilter-load'));
         $output .= Xml::tags('div', array('id' => 'mw-abusefilter-examine-editor'), $tester);
         $output .= Xml::tags('p', null, Xml::element('input', array('type' => 'button', 'value' => wfMsg('abusefilter-examine-test-button'), 'id' => 'mw-abusefilter-examine-test')) . Xml::element('div', array('id' => 'mw-abusefilter-syntaxresult', 'style' => 'display: none;'), '&nbsp;'));
     }
     // Variable dump
     $output .= Xml::tags('h2', null, wfMsgExt('abusefilter-examine-vars', 'parseinline'));
     $output .= AbuseFilter::buildVarDumpTable($vars);
     $wgOut->addHTML($output);
 }