/** * @param $id * @return mixed */ function showDetails($id) { $out = $this->getOutput(); $dbr = wfGetDB(DB_SLAVE); $row = $dbr->selectRow(array('abuse_filter_log', 'abuse_filter'), '*', array('afl_id' => $id), __METHOD__, array(), array('abuse_filter' => array('LEFT JOIN', 'af_id=afl_filter'))); if (!$row) { return; } if (AbuseFilter::decodeGlobalName($row->afl_filter)) { $filter_hidden = null; } else { $filter_hidden = $row->af_hidden; } if (!self::canSeeDetails($row->afl_filter, $filter_hidden)) { $out->addWikiMsg('abusefilter-log-cannot-see-details'); return; } if (self::isHidden($row) && !self::canSeeHidden()) { $out->addWikiMsg('abusefilter-log-details-hidden'); return; } $output = Xml::element('legend', null, $this->msg('abusefilter-log-details-legend', $id)->text()); $output .= Xml::tags('p', null, $this->formatRow($row, false)); // Load data $vars = AbuseFilter::loadVarDump($row->afl_var_dump); // Diff, if available if ($vars && $vars->getVar('action')->toString() == 'edit') { $old_wikitext = $vars->getVar('old_wikitext')->toString(); $new_wikitext = $vars->getVar('new_wikitext')->toString(); $diffEngine = new DifferenceEngine($this->getContext()); $diffEngine->showDiffStyle(); // Note: generateDiffBody has been deprecated in favour of generateTextDiffBody in 1.21 but we can't use it for b/c $formattedDiff = $diffEngine->generateDiffBody($old_wikitext, $new_wikitext); $formattedDiff = $diffEngine->addHeader($formattedDiff, '', ''); $output .= Xml::tags('h3', null, $this->msg('abusefilter-log-details-diff')->parse()); $output .= $formattedDiff; } $output .= Xml::element('h3', null, $this->msg('abusefilter-log-details-vars')->text()); // Build a table. $output .= AbuseFilter::buildVarDumpTable($vars); if (self::canSeePrivate()) { // Private stuff, like IPs. $header = Xml::element('th', null, $this->msg('abusefilter-log-details-var')->text()) . Xml::element('th', null, $this->msg('abusefilter-log-details-val')->text()); $output .= Xml::element('h3', null, $this->msg('abusefilter-log-details-private')->text()); $output .= Xml::openElement('table', array('class' => 'wikitable mw-abuselog-private', 'style' => 'width: 80%;')) . Xml::openElement('tbody'); $output .= $header; // IP address $output .= Xml::tags('tr', null, Xml::element('td', array('style' => 'width: 30%;'), $this->msg('abusefilter-log-details-ip')->text()) . Xml::element('td', null, $row->afl_ip)); $output .= Xml::closeElement('tbody') . Xml::closeElement('table'); } $output = Xml::tags('fieldset', null, $output); $out->addHTML($output); }
function showDetails($id) { if (!self::canSeeDetails()) { return; } $dbr = wfGetDB(DB_SLAVE); $row = $dbr->selectRow(array('abuse_filter_log', 'abuse_filter'), '*', array('afl_id' => $id), __METHOD__, array(), array('abuse_filter' => array('LEFT JOIN', 'af_id=afl_filter'))); if (!$row) { return; } if ($row->afl_deleted && !self::canSeeHidden()) { global $wgOut; $wgOut->addWikiMsg('abusefilter-log-details-hidden'); return; } $output = ''; $output .= Xml::element('legend', null, wfMsg('abusefilter-log-details-legend', $id)); $output .= Xml::tags('p', null, $this->formatRow($row, false)); // Load data $vars = AbuseFilter::loadVarDump($row->afl_var_dump); // Diff, if available if ($vars->getVar('action')->toString() == 'edit') { $old_wikitext = $vars->getVar('old_wikitext')->toString(); $new_wikitext = $vars->getVar('new_wikitext')->toString(); $diffEngine = new DifferenceEngine($this->mSearchTitle); $diffEngine->showDiffStyle(); $formattedDiff = $diffEngine->generateDiffBody($old_wikitext, $new_wikitext); static $colDescriptions = "<col class='diff-marker' />\n <col class='diff-content' />\n <col class='diff-marker' />\n <col class='diff-content' />"; $formattedDiff = "<table class='diff'>{$colDescriptions}<tbody>{$formattedDiff}</tbody></table>"; $output .= Xml::tags('h3', null, wfMsgExt('abusefilter-log-details-diff', 'parseinline')); $output .= $formattedDiff; } $output .= Xml::element('h3', null, wfMsg('abusefilter-log-details-vars')); // Build a table. $output .= AbuseFilter::buildVarDumpTable($vars); if (self::canSeePrivate()) { // Private stuff, like IPs. $header = Xml::element('th', null, wfMsg('abusefilter-log-details-var')) . Xml::element('th', null, wfMsg('abusefilter-log-details-val')); $output .= Xml::element('h3', null, wfMsg('abusefilter-log-details-private')); $output .= Xml::openElement('table', array('class' => 'wikitable mw-abuselog-private', 'style' => 'width: 80%;')) . Xml::openElement('tbody'); $output .= $header; // IP address $output .= Xml::tags('tr', null, Xml::element('td', array('style' => 'width: 30%;'), wfMsg('abusefilter-log-details-ip')) . Xml::element('td', null, $row->afl_ip)); $output .= Xml::closeElement('tbody') . Xml::closeElement('table'); } $output = Xml::tags('fieldset', null, $output); global $wgOut; $wgOut->addHTML($output); }
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, '') . ' ' . 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;'), ' ')); } // Variable dump $html .= Xml::tags('h2', null, $this->msg('abusefilter-examine-vars', 'parseinline')->parse()); $html .= AbuseFilter::buildVarDumpTable($vars); $output->addHTML($html); }
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, '') . ' ' . 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;'), ' ')); } // Variable dump $output .= Xml::tags('h2', null, wfMsgExt('abusefilter-examine-vars', 'parseinline')); $output .= AbuseFilter::buildVarDumpTable($vars); $wgOut->addHTML($output); }