function execute($par) { $request = $this->getRequest(); $output = $this->getOutput(); $this->setHeaders(); $this->checkPermissions(); $inputValue = htmlspecialchars($request->getText('page', $par)); $pagenamePlaceholder = $this->msg('pp-pagename-placeholder')->escaped(); $prepareButtonValue = $this->msg('pp-prepare-button-label')->escaped(); $saveButtonValue = $this->msg('pp-save-button-label')->escaped(); $cancelButtonValue = $this->msg('pp-cancel-button-label')->escaped(); $summaryValue = $this->msg('pp-save-summary')->inContentLanguage()->escaped(); $output->addModules('ext.translate.special.pagepreparation'); $output->addModuleStyles('jquery.uls.grid'); $out = ''; $diff = new DifferenceEngine($this->getContext()); $diffHeader = $diff->addHeader(" ", $this->msg('pp-diff-old-header')->escaped(), $this->msg('pp-diff-new-header')->escaped()); $out = <<<HTML <div class="grid"> \t<form class="mw-tpp-sp-form row" name="mw-tpp-sp-input-form" action=""> \t\t<input id="pp-summary" type="hidden" value="{$summaryValue}" /> \t\t<input name="page" id="page" class="mw-searchInput mw-ui-input" \t\t\tplaceholder="{$pagenamePlaceholder}" value="{$inputValue}"/> \t\t<button id="action-prepare" class="mw-ui-button mw-ui-primary" type="button"> \t\t\t{$prepareButtonValue}</button> \t\t<button id="action-save" class="mw-ui-button mw-ui-constructive hide" type="button"> \t\t\t{$saveButtonValue}</button> \t\t<button id="action-cancel" class="mw-ui-button mw-ui-quiet hide" type="button"> \t\t\t{$cancelButtonValue}</button> \t</form> \t<div class="messageDiv hide"></div> \t<div class="divDiff hide"> \t\t{$diffHeader} \t</div> </div> HTML; $output->addHTML($out); }
protected function diffWikitext($title, $wikitext) { $apiParams = array('action' => 'query', 'prop' => 'revisions', 'titles' => $title->getPrefixedDBkey(), 'rvdifftotext' => $this->pstWikitext($title, $wikitext)); $api = new ApiMain(new DerivativeRequest($this->getRequest(), $apiParams, false), false); $api->execute(); if (defined('ApiResult::META_CONTENT')) { $result = $api->getResult()->getResultData(null, array('BC' => array(), 'Types' => array())); } else { $result = $api->getResultData(); } if (!isset($result['query']['pages'][$title->getArticleID()]['revisions'][0]['diff']['*'])) { return array('result' => 'fail'); } $diffRows = $result['query']['pages'][$title->getArticleID()]['revisions'][0]['diff']['*']; if ($diffRows !== '') { $context = new DerivativeContext($this->getContext()); $context->setTitle($title); $engine = new DifferenceEngine($context); return array('result' => 'success', 'diff' => $engine->addHeader($diffRows, $context->msg('currentrev')->parse(), $context->msg('yourtext')->parse())); } else { return array('result' => 'nochanges'); } }
/** * @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); }
public static function diffUndo(array $args, array $named) { if (count($args) !== 1) { throw new WrongNumberArgumentsException($args, 'one'); } list($diffContent) = $args; $differenceEngine = new \DifferenceEngine(); $multi = $differenceEngine->getMultiNotice(); $notice = ''; if ($diffContent === '') { $notice = '<div class="mw-diff-empty">' . wfMessage('diff-empty')->parse() . "</div>\n"; } $differenceEngine->showDiffStyle(); return self::html($differenceEngine->addHeader($diffContent, wfMessage('flow-undo-latest-revision'), wfMessage('flow-undo-your-text'), $multi, $notice)); }
protected function getLegend() { $text = $this->diff->addHeader('', $this->msg('translate-smg-left')->escaped(), $this->msg('translate-smg-right')->escaped()); return Html::rawElement('div', array('class' => "mw-translate-smg-header"), $text); }
/** * @param $msg * @param $old * @param $new * @return string */ function getDiffRow($msg, $old, $new) { if (!is_array($old)) { $old = explode("\n", preg_replace("/\\\r\\\n?/", "\n", $old)); } if (!is_array($new)) { $new = explode("\n", preg_replace("/\\\r\\\n?/", "\n", $new)); } $diffEngine = new DifferenceEngine($this->getContext()); $diffEngine->showDiffStyle(); // We can't use $diffEngine->generateDiffBody since it doesn't allow custom formatters $diff = new Diff($old, $new); $formatter = new TableDiffFormatterFullContext(); $formattedDiff = $diffEngine->addHeader($formatter->format($diff), '', ''); return Xml::tags('tr', null, Xml::tags('th', null, $this->msg($msg)->parse()) . Xml::tags('td', array('colspan' => 2), $formattedDiff)) . "\n"; }