/**
  * @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);
 }
Example #2
0
 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, '') . '&#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);
 }
 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);
 }