本文整理汇总了PHP中DifferenceEngine::showDiffStyle方法的典型用法代码示例。如果您正苦于以下问题:PHP DifferenceEngine::showDiffStyle方法的具体用法?PHP DifferenceEngine::showDiffStyle怎么用?PHP DifferenceEngine::showDiffStyle使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类DifferenceEngine
的用法示例。
在下文中一共展示了DifferenceEngine::showDiffStyle方法的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的PHP代码示例。
示例1: getData
public function getData()
{
$db = wfGetDB(DB_MASTER);
$conds = array('rt_page' => $this->handle->getTitle()->getArticleID(), 'rt_type' => RevTag::getType('tp:transver'));
$options = array('ORDER BY' => 'rt_revision DESC');
$translationRevision = $db->selectField('revtag', 'rt_value', $conds, __METHOD__, $options);
if ($translationRevision === false) {
throw new TranslationHelperException("No definition revision recorded");
}
$definitionTitle = Title::makeTitleSafe($this->handle->getTitle()->getNamespace(), $this->handle->getKey() . '/' . $this->group->getSourceLanguage());
if (!$definitionTitle || !$definitionTitle->exists()) {
throw new TranslationHelperException("Definition page doesn't exist");
}
// Using newFromId instead of newFromTitle, because the page might have been renamed
$oldrev = Revision::newFromId($translationRevision);
if (!$oldrev) {
throw new TranslationHelperException("Old definition version doesn't exist anymore");
}
$oldContent = $oldrev->getContent();
$newContent = $this->getDefinitionContent();
if (!$oldContent) {
throw new TranslationHelperException("Old definition version doesn't exist anymore");
}
if (!$oldContent instanceof WikitextContent || !$newContent instanceof WikitextContent) {
throw new TranslationHelperException('Can only work on Wikitext content');
}
if ($oldContent->equals($newContent)) {
throw new TranslationHelperException('No changes');
}
$diff = new DifferenceEngine($this->context);
if (method_exists('DifferenceEngine', 'setTextLanguage')) {
$diff->setTextLanguage($this->group->getSourceLanguage());
}
$diff->setContent($oldContent, $newContent);
$diff->setReducedLineNumbers();
$diff->showDiffStyle();
$html = $diff->getDiff($this->context->msg('tpt-diff-old')->escaped(), $this->context->msg('tpt-diff-new')->escaped());
return array('value_old' => $oldContent->getNativeData(), 'value_new' => $newContent->getNativeData(), 'revisionid_old' => $oldrev->getId(), 'revisionid_new' => $definitionTitle->getLatestRevId(), 'language' => $this->group->getSourceLanguage(), 'html' => $html);
}
示例2: showDiff
/**
* Build a diff display between this and the previous either deleted
* or non-deleted edit.
*
* @param $previousRev Revision
* @param $currentRev Revision
* @return String: HTML
*/
function showDiff($previousRev, $currentRev)
{
$diffEngine = new DifferenceEngine($this->getContext());
$diffEngine->showDiffStyle();
$this->getOutput()->addHTML("<div>" . "<table border='0' width='98%' cellpadding='0' cellspacing='4' class='diff'>" . "<col class='diff-marker' />" . "<col class='diff-content' />" . "<col class='diff-marker' />" . "<col class='diff-content' />" . "<tr>" . "<td colspan='2' width='50%' align='center' class='diff-otitle'>" . $this->diffHeader($previousRev, 'o') . "</td>\n" . "<td colspan='2' width='50%' align='center' class='diff-ntitle'>" . $this->diffHeader($currentRev, 'n') . "</td>\n" . "</tr>" . $diffEngine->generateDiffBody($previousRev->getText(), $currentRev->getText()) . "</table>" . "</div>\n");
}
示例3: showDiff
function showDiff($revision)
{
global $wgOut;
$dbr = wfGetDB(DB_SLAVE);
$result = $this->getRevisions($dbr, array('hidden_rev_id' => $revision));
while ($row = $dbr->fetchObject($result)) {
$info = $this->listRow($row);
$list = $this->revisionInfo($row);
$rev = new Revision($row);
$rev->mTitle = Title::makeTitle($row->page_namespace, $row->page_title);
$prevId = $rev->mTitle->getPreviousRevisionID($row->rev_id);
if ($prevId) {
$prev = Revision::newFromTitle($rev->mTitle, $prevId);
$otext = strval($prev->getText());
} else {
$wgOut->addHtml("<ul>" . $info . "</ul>\n" . $list);
$wgOut->addWikiText(wfMsgNoTrans('oversight-nodiff'));
return;
}
$ntext = strval($rev->getText());
$diffEngine = new DifferenceEngine();
$diffEngine->showDiffStyle();
$wgOut->addHtml("<ul>" . $info . "</ul>\n" . $list . "<p><strong>" . wfMsgHTML('oversight-difference') . "</strong>" . "</p>" . "<div>" . "<table border='0' width='98%' cellpadding='0' cellspacing='4' class='diff'>" . "<col class='diff-marker' />" . "<col class='diff-content' />" . "<col class='diff-marker' />" . "<col class='diff-content' />" . "<tr>" . "<td colspan='2' width='50%' align='center' class='diff-otitle'>" . wfMsgHTML('oversight-prev') . " (#{$prevId})" . "</td>" . "<td colspan='2' width='50%' align='center' class='diff-ntitle'>" . wfMsgHTML('oversight-hidden') . "</td>" . "</tr>" . $diffEngine->generateDiffBody($otext, $ntext) . "</table>" . "</div>\n");
}
$dbr->freeResult($result);
}
示例4: showDiff
/**
* Build a diff display between this and the previous either deleted
* or non-deleted edit.
*
* @param $previousRev Revision
* @param $currentRev Revision
* @return String: HTML
*/
function showDiff($previousRev, $currentRev)
{
$diffEngine = new DifferenceEngine($this->getContext());
$diffEngine->showDiffStyle();
$this->getOutput()->addHTML("<div>" . "<table style='width: 98%;' cellpadding='0' cellspacing='4' class='diff'>" . "<col class='diff-marker' />" . "<col class='diff-content' />" . "<col class='diff-marker' />" . "<col class='diff-content' />" . "<tr>" . "<td colspan='2' style='width: 50%; text-align: center' class='diff-otitle'>" . $this->diffHeader($previousRev, 'o') . "</td>\n" . "<td colspan='2' style='width: 50%; text-align: center' class='diff-ntitle'>" . $this->diffHeader($currentRev, 'n') . "</td>\n" . "</tr>" . $diffEngine->generateDiffBody($previousRev->getText(Revision::FOR_THIS_USER, $this->getUser()), $currentRev->getText(Revision::FOR_THIS_USER, $this->getUser())) . "</table>" . "</div>\n");
}
示例5: showDiff
/**
* Get a diff between the current contents of the edit box and the
* version of the page we're editing from.
*
* If this is a section edit, we'll replace the section as for final
* save and then make a comparison.
*/
function showDiff()
{
$oldtext = $this->mArticle->fetchContent();
$newtext = $this->mArticle->replaceSection($this->section, $this->textbox1, $this->summary, $this->edittime);
$newtext = $this->mArticle->preSaveTransform($newtext);
$oldtitle = wfMsgExt('currentrev', array('parseinline'));
$newtitle = wfMsgExt('yourtext', array('parseinline'));
if ($oldtext !== false || $newtext != '') {
$de = new DifferenceEngine($this->mTitle);
$de->setText($oldtext, $newtext);
$difftext = $de->getDiff($oldtitle, $newtitle);
$de->showDiffStyle();
} else {
$difftext = '';
}
global $wgOut;
$wgOut->addHTML('<div id="wikiDiff">' . $difftext . '</div>');
}
示例6: execute
public function execute($messages)
{
$context = RequestContext::getMain();
$this->out = $context->getOutput();
// Set up diff engine
$diff = new DifferenceEngine();
$diff->showDiffStyle();
$diff->setReducedLineNumbers();
// Check whether we do processing
$process = $this->allowProcess();
// Initialise collection
$group = $this->getGroup();
$code = $this->getCode();
$collection = $group->initCollection($code);
$collection->loadTranslations();
$this->out->addHTML($this->doHeader());
// Determine changes
$alldone = $process;
$changed = array();
foreach ($messages as $key => $value) {
$fuzzy = $old = false;
if (isset($collection[$key])) {
$old = $collection[$key]->translation();
}
// No changes at all, ignore
if (strval($old) === strval($value)) {
continue;
}
if ($old === false) {
$para = '<code class="mw-tmi-new">' . htmlspecialchars($key) . '</code>';
$name = $context->msg('translate-manage-import-new')->rawParams($para)->escaped();
$text = TranslateUtils::convertWhiteSpaceToHTML($value);
$changed[] = self::makeSectionElement($name, 'new', $text);
} else {
$oldContent = ContentHandler::makeContent($old, $diff->getTitle());
$newContent = ContentHandler::makeContent($value, $diff->getTitle());
$diff->setContent($oldContent, $newContent);
$text = $diff->getDiff('', '');
$type = 'changed';
$action = $context->getRequest()->getVal(self::escapeNameForPHP("action-{$type}-{$key}"));
if ($process) {
if (!count($changed)) {
$changed[] = '<ul>';
}
if ($action === null) {
$message = $context->msg('translate-manage-inconsistent', wfEscapeWikiText("action-{$type}-{$key}"))->parse();
$changed[] = "<li>{$message}</li></ul>";
$process = false;
} else {
// Check processing time
if (!isset($this->time)) {
$this->time = wfTimestamp();
}
$message = self::doAction($action, $group, $key, $code, $value);
$key = array_shift($message);
$params = $message;
$message = $context->msg($key, $params)->parse();
$changed[] = "<li>{$message}</li>";
if ($this->checkProcessTime()) {
$process = false;
$message = $context->msg('translate-manage-toolong')->numParams($this->processingTime)->parse();
$changed[] = "<li>{$message}</li></ul>";
}
continue;
}
}
$alldone = false;
$actions = $this->getActions();
$defaction = $this->getDefaultAction($fuzzy, $action);
$act = array();
// Give grep a chance to find the usages:
// translate-manage-action-import, translate-manage-action-conflict,
// translate-manage-action-ignore, translate-manage-action-fuzzy
foreach ($actions as $action) {
$label = $context->msg("translate-manage-action-{$action}")->text();
$name = self::escapeNameForPHP("action-{$type}-{$key}");
$id = Sanitizer::escapeId("action-{$key}-{$action}");
$act[] = Xml::radioLabel($label, $name, $action, $id, $action === $defaction);
}
$param = '<code class="mw-tmi-diff">' . htmlspecialchars($key) . '</code>';
$name = $context->msg('translate-manage-import-diff', $param, implode(' ', $act))->text();
$changed[] = self::makeSectionElement($name, $type, $text);
}
}
if (!$process) {
$collection->filter('hastranslation', false);
$keys = $collection->getMessageKeys();
$diff = array_diff($keys, array_keys($messages));
foreach ($diff as $s) {
$para = '<code class="mw-tmi-deleted">' . htmlspecialchars($s) . '</code>';
$name = $context->msg('translate-manage-import-deleted')->rawParams($para)->escaped();
$text = TranslateUtils::convertWhiteSpaceToHTML($collection[$s]->translation());
$changed[] = self::makeSectionElement($name, 'deleted', $text);
}
}
if ($process || !count($changed) && $code !== 'en') {
if (!count($changed)) {
$this->out->addWikiMsg('translate-manage-nochanges-other');
}
if (!count($changed) || strpos($changed[count($changed) - 1], '<li>') !== 0) {
//.........这里部分代码省略.........
示例7: perform
function perform($bPerformEdits = true)
{
global $wgRequest, $wgOut, $wgUser, $wgTitle, $wgLang;
$iMaxPerCriterion = $bPerformEdits ? MER_MAX_EXECUTE_PAGES : MER_MAX_PREVIEW_DIFFS;
$aErrors = array();
$aPages = $this->getPages($aErrors, $iMaxPerCriterion);
if ($aPages === null) {
$this->showForm(wfMsg('masseditregex-err-nopages'));
return;
}
// Show the form again ready for further editing if we're just previewing
if (!$bPerformEdits) {
$this->showForm();
}
$diff = new DifferenceEngine();
$diff->showDiffStyle();
// send CSS link to the browser for diff colours
$wgOut->addHTML('<ul>');
if (count($aErrors)) {
$wgOut->addHTML('<li>' . join('</li><li> ', $aErrors) . '</li>');
}
$htmlDiff = '';
$editToken = $wgUser->editToken();
$iArticleCount = 0;
foreach ($aPages as $p) {
$iArticleCount++;
if (!isset($p['revisions'])) {
$wgOut->addHTML('<li>' . wfMsg('masseditregex-page-not-exists', $p['title']) . '</li>');
continue;
// empty page
}
$curContent = $p['revisions'][0]['*'];
$iCount = 0;
$newContent = $curContent;
foreach ($this->aMatch as $i => $strMatch) {
$this->strNextReplace = $this->aReplace[$i];
$result = @preg_replace_callback($strMatch, array($this, 'regexCallback'), $newContent, -1, $iCount);
if ($result !== null) {
$newContent = $result;
} else {
$strErrorMsg = '<li>' . wfMsg('masseditregex-badregex') . ' <b>' . htmlspecialchars($strMatch) . '</b></li>';
$wgOut->addHTML($strErrorMsg);
unset($this->aMatch[$i]);
}
}
if ($bPerformEdits) {
// Not in preview mode, make the edits
$wgOut->addHTML('<li>' . wfMsg('masseditregex-num-changes', $p['title'], $iCount) . '</li>');
$req = new DerivativeRequest($wgRequest, array('action' => 'edit', 'bot' => true, 'title' => $p['title'], 'summary' => $this->strSummary, 'text' => $newContent, 'basetimestamp' => $p['starttimestamp'], 'watchlist' => 'nochange', 'nocreate' => 1, 'token' => $editToken), true);
$processor = new ApiMain($req, true);
try {
$processor->execute();
} catch (UsageException $e) {
$wgOut->addHTML('<li><ul><li>' . wfMsg('masseditregex-editfailed') . ' ' . $e . '</li></ul></li>');
}
} else {
// In preview mode, display the first few diffs
$diff->setText($curContent, $newContent);
$htmlDiff .= $diff->getDiff('<b>' . $p['title'] . ' - ' . wfMsg('masseditregex-before') . '</b>', '<b>' . wfMsg('masseditregex-after') . '</b>');
if ($iArticleCount >= MER_MAX_PREVIEW_DIFFS) {
$htmlDiff .= Xml::element('p', null, wfMsg('masseditregex-max-preview-diffs', $wgLang->formatNum(MER_MAX_PREVIEW_DIFFS)));
break;
}
}
}
$wgOut->addHTML('</ul>');
if ($bPerformEdits) {
$wgOut->addWikiMsg('masseditregex-num-articles-changed', $iArticleCount);
$wgOut->addHTML($this->sk->makeKnownLinkObj(SpecialPage::getSafeTitleFor('Contributions', $wgUser->getName()), wfMsgHtml('masseditregex-view-full-summary')));
} else {
// Only previewing, show the diffs now (after any errors)
$wgOut->addHTML($htmlDiff);
}
}
示例8: execute
public function execute( $messages ) {
global $wgOut, $wgLang;
$this->out = $wgOut;
// Set up diff engine
$diff = new DifferenceEngine;
$diff->showDiffStyle();
$diff->setReducedLineNumbers();
// Check whether we do processing
$process = $this->allowProcess();
// Initialise collection
$group = $this->getGroup();
$code = $this->getCode();
$collection = $group->initCollection( $code );
$collection->loadTranslations();
$this->out->addHTML( $this->doHeader() );
// Determine changes
$alldone = $process;
$changed = array();
foreach ( $messages as $key => $value ) {
$fuzzy = $old = false;
if ( isset( $collection[$key] ) ) {
$old = $collection[$key]->translation();
}
// No changes at all, ignore
if ( strval( $old ) === strval( $value ) ) {
continue;
}
if ( $old === false ) {
$name = wfMsgHtml( 'translate-manage-import-new',
'<code style="font-weight:normal;">' . htmlspecialchars( $key ) . '</code>'
);
$text = TranslateUtils::convertWhiteSpaceToHTML( $value );
$changed[] = self::makeSectionElement( $name, 'new', $text );
} else {
$diff->setText( $old, $value );
$text = $diff->getDiff( '', '' );
$type = 'changed';
global $wgRequest;
$action = $wgRequest->getVal( self::escapeNameForPHP( "action-$type-$key" ) );
if ( $process ) {
if ( !count( $changed ) ) {
$changed[] = '<ul>';
}
if ( $action === null ) {
$message = wfMsgExt( 'translate-manage-inconsistent', 'parseinline', wfEscapeWikiText( "action-$type-$key" ) );
$changed[] = "<li>$message</li></ul>";
$process = false;
} else {
// Check processing time
if ( !isset( $this->time ) ) {
$this->time = wfTimestamp();
}
$message = self::doAction(
$action,
$group,
$key,
$code,
$value
);
$key = array_shift( $message );
$params = $message;
$message = wfMsgExt( $key, 'parseinline', $params );
$changed[] = "<li>$message</li>";
if ( $this->checkProcessTime() ) {
$process = false;
$duration = $wgLang->formatNum( $this->processingTime );
$message = wfMsgExt( 'translate-manage-toolong', 'parseinline', $duration );
$changed[] = "<li>$message</li></ul>";
}
continue;
}
}
$alldone = false;
$actions = $this->getActions();
$defaction = $this->getDefaultAction( $fuzzy, $action );
$act = array();
foreach ( $actions as $action ) {
$label = wfMsg( "translate-manage-action-$action" );
$name = self::escapeNameForPHP( "action-$type-$key" );
$id = Sanitizer::escapeId( "action-$key-$action" );
//.........这里部分代码省略.........
示例9: showDetails
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);
}
示例10: addModules
public static function addModules(OutputPage $out)
{
$modules = array('ext.translate.quickedit');
Hooks::run('TranslateBeforeAddModules', array(&$modules));
$out->addModules($modules);
// Might be needed, but ajax doesn't load it
// Globals :(
$diff = new DifferenceEngine();
$diff->showDiffStyle();
}
示例11: showPage
/**
* Displays the sections and changes for the user to review
* @param TranslatablePage $page
* @param array $sections
*/
public function showPage(TranslatablePage $page, array $sections)
{
global $wgContLang;
$out = $this->getOutput();
$out->setSubtitle(Linker::link($page->getTitle()));
$out->addModules('ext.translate.special.pagetranslation');
$out->addWikiMsg('tpt-showpage-intro');
$formParams = array('method' => 'post', 'action' => $this->getPageTitle()->getFullURL(), 'class' => 'mw-tpt-sp-markform');
$out->addHTML(Xml::openElement('form', $formParams) . Html::hidden('title', $this->getPageTitle()->getPrefixedText()) . Html::hidden('revision', $page->getRevision()) . Html::hidden('target', $page->getTitle()->getPrefixedtext()) . Html::hidden('token', $this->getUser()->getEditToken()));
$out->wrapWikiMsg('==$1==', 'tpt-sections-oldnew');
$diffOld = $this->msg('tpt-diff-old')->escaped();
$diffNew = $this->msg('tpt-diff-new')->escaped();
$hasChanges = false;
// Check whether page title was previously marked for translation.
// If the page is marked for translation the first time, default to checked.
$defaultChecked = $page->hasPageDisplayTitle();
/**
* @var TPSection $s
*/
foreach ($sections as $s) {
if ($s->name === 'Page display title') {
// Set section type as new if title previously unchecked
$s->type = $defaultChecked ? $s->type : 'new';
// Checkbox for page title optional translation
$this->getOutput()->addHTML(Xml::checkLabel($this->msg('tpt-translate-title')->text(), 'translatetitle', 'mw-translate-title', $defaultChecked));
}
if ($s->type === 'new') {
$hasChanges = true;
$name = $this->msg('tpt-section-new', $s->name)->escaped();
} else {
$name = $this->msg('tpt-section', $s->name)->escaped();
}
if ($s->type === 'changed') {
$hasChanges = true;
$diff = new DifferenceEngine();
if (method_exists('DifferenceEngine', 'setTextLanguage')) {
$diff->setTextLanguage($wgContLang);
}
$diff->setReducedLineNumbers();
$oldContent = ContentHandler::makeContent($s->getOldText(), $diff->getTitle());
$newContent = ContentHandler::makeContent($s->getText(), $diff->getTitle());
$diff->setContent($oldContent, $newContent);
$text = $diff->getDiff($diffOld, $diffNew);
$diffOld = $diffNew = null;
$diff->showDiffStyle();
$id = "tpt-sect-{$s->id}-action-nofuzzy";
$checkLabel = Xml::checkLabel($this->msg('tpt-action-nofuzzy')->text(), $id, $id, false);
$text = $checkLabel . $text;
} else {
$text = TranslateUtils::convertWhiteSpaceToHTML($s->getText());
}
# For changed text, the language is set by $diff->setTextLanguage()
$lang = $s->type === 'changed' ? null : $wgContLang;
$out->addHTML(MessageWebImporter::makeSectionElement($name, $s->type, $text, $lang));
}
$deletedSections = $page->getParse()->getDeletedSections();
if (count($deletedSections)) {
$hasChanges = true;
$out->wrapWikiMsg('==$1==', 'tpt-sections-deleted');
/**
* @var TPSection $s
*/
foreach ($deletedSections as $s) {
$name = $this->msg('tpt-section-deleted', $s->id)->escaped();
$text = TranslateUtils::convertWhiteSpaceToHTML($s->getText());
$out->addHTML(MessageWebImporter::makeSectionElement($name, $s->type, $text, $wgContLang));
}
}
// Display template changes if applicable
if ($page->getMarkedTag() !== false) {
$hasChanges = true;
$newTemplate = $page->getParse()->getTemplatePretty();
$oldPage = TranslatablePage::newFromRevision($page->getTitle(), $page->getMarkedTag());
$oldTemplate = $oldPage->getParse()->getTemplatePretty();
if ($oldTemplate !== $newTemplate) {
$out->wrapWikiMsg('==$1==', 'tpt-sections-template');
$diff = new DifferenceEngine();
if (method_exists('DifferenceEngine', 'setTextLanguage')) {
$diff->setTextLanguage($wgContLang);
}
$oldContent = ContentHandler::makeContent($oldTemplate, $diff->getTitle());
$newContent = ContentHandler::makeContent($newTemplate, $diff->getTitle());
$diff->setContent($oldContent, $newContent);
$text = $diff->getDiff($this->msg('tpt-diff-old')->escaped(), $this->msg('tpt-diff-new')->escaped());
$diff->showDiffStyle();
$diff->setReducedLineNumbers();
$contentParams = array('class' => 'mw-tpt-sp-content');
$out->addHTML(Xml::tags('div', $contentParams, $text));
}
}
if (!$hasChanges) {
$out->wrapWikiMsg('<div class="successbox">$1</div>', 'tpt-mark-nochanges');
}
$this->priorityLanguagesForm($page);
$out->addHTML(Xml::submitButton($this->msg('tpt-submit')->text()) . Xml::closeElement('form'));
//.........这里部分代码省略.........
示例12: statusInterface
protected function statusInterface() {
global $wgOut, $wgUser, $wgPremoderationStrict;
$params = $this->mParams;
if( !isset( $params['id'] ) ) {
$wgOut->setPageTitle( wfMsg( 'premoderation-manager-invalidaction' ) );
$wgOut->addWikiMsg( 'premoderation-invalidaction' );
return;
}
$id = intval( $params['id'] );
$dbr = wfGetDB( DB_SLAVE );
$res = $dbr->select(
'pm_queue',
'*',
"pmq_id = '$id'",
__METHOD__,
array( 'LIMIT' => 1 )
);
$row = $dbr->fetchRow( $res );
if( !$row ) {
$wgOut->setPageTitle( wfMsg( 'premoderation-manager-invalidaction' ) );
$wgOut->addWikiMsg( 'premoderation-notexists-id' );
return;
}
$wgOut->setPageTitle( wfMsg( 'premoderation-manager-status' ) );
$wgOut->addWikiMsg( 'premoderation-status-intro' );
$wgOut->addHTML( '<h2>' . wfMsg( 'premoderation-status-info' ) . '</h2>' .
$this->getListTableHeader( 'status' ) . $this->formatListTableRow( $row ) .
Xml::closeElement( 'table' ) );
if( $wgUser->isAllowed( 'premoderation-viewip' ) ) {
$wgOut->addWikiMsg( 'premoderation-private-ip', $row['pmq_ip'] );
}
$rev = Revision::newFromID( $row['pmq_page_last_id'] );
$diff = new DifferenceEngine();
$diff->showDiffStyle();
$formattedDiff = $diff->generateDiffBody(
isset( $rev ) ? $rev->getText() : '', $row['pmq_text']
);
$wgOut->addHTML( '<h2>' . wfMsg( 'premoderation-diff-h2' ) . '</h2>' .
"<table class='mw-abusefilter-diff-multiline'><col class='diff-marker' />" .
"<col class='diff-content' /><col class='diff-marker' /><col class='diff-content' />" .
"<tbody>" . $formattedDiff . "</tbody></table>" );
if( $row['pmq_status'] == 'approved' ) {
return;
}
$externalConflicts = $this->checkExternalConflicts( $row['pmq_page_last_id'],
$row['pmq_page_ns'], $row['pmq_page_title'] );
if( $externalConflicts ) {
$wgOut->addHTML( '<h2>' . wfMsg( 'premoderation-external-conflicts-h2' ) . '</h2>' );
if( $wgPremoderationStrict ) {
$wgOut->addWikiMsg( 'premoderation-error-externals' );
return;
}
$wgOut->addWikiMsg( 'premoderation-external-edits' );
}
$this->checkInternalConflicts( $dbr, $id, $row['pmq_page_ns'], $row['pmq_page_title'] );
$final = Xml::fieldset( wfMsg( 'premoderation-status-fieldset' ) ) .
Xml::openElement( 'form', array( 'id' => 'prem-status-form', 'method' => 'post' ) ) .
$this->getStatusForm( $row['pmq_status'] ) .
'<input type="hidden" name="id" value="' . $id . '" />' .
Xml::closeElement( 'form' ) . Xml::closeElement( 'fieldset' );
$wgOut->addHTML( $final );
}
示例13: showDiff
/**
* Get a diff between the current contents of the edit box and the
* version of the page we're editing from.
*
* If this is a section edit, we'll replace the section as for final
* save and then make a comparison.
*/
function showDiff()
{
global $wgUser, $wgContLang, $wgParser, $wgOut;
$oldtitlemsg = 'currentrev';
# if message does not exist, show diff against the preloaded default
if ($this->mTitle->getNamespace() == NS_MEDIAWIKI && !$this->mTitle->exists()) {
$oldtext = $this->mTitle->getDefaultMessageText();
if ($oldtext !== false) {
$oldtitlemsg = 'defaultmessagetext';
}
} else {
$oldtext = $this->mArticle->getRawText();
}
$newtext = $this->mArticle->replaceSection($this->section, $this->textbox1, $this->summary, $this->edittime);
wfRunHooks('EditPageGetDiffText', array($this, &$newtext));
$popts = ParserOptions::newFromUserAndLang($wgUser, $wgContLang);
$newtext = $wgParser->preSaveTransform($newtext, $this->mTitle, $wgUser, $popts);
if ($oldtext !== false || $newtext != '') {
$oldtitle = wfMessage($oldtitlemsg)->parse();
$newtitle = wfMessage('yourtext')->parse();
$de = new DifferenceEngine($this->mArticle->getContext());
$de->setText($oldtext, $newtext);
$difftext = $de->getDiff($oldtitle, $newtitle);
$de->showDiffStyle();
} else {
$difftext = '';
}
$wgOut->addHTML('<div id="wikiDiff">' . $difftext . '</div>');
}
示例14: importForm
/**
* @todo Very long code block; split up.
*
* @param $group MessageGroup
* @param $code
*/
public function importForm($group, $code)
{
$this->setSubtitle($group, $code);
$formParams = array('method' => 'post', 'action' => $this->getTitle()->getFullURL(array('group' => $group->getId())), 'class' => 'mw-translate-manage');
global $wgRequest, $wgLang;
if ($wgRequest->wasPosted() && $wgRequest->getBool('process', false) && $this->user->isAllowed('translate-manage') && $this->user->matchEditToken($wgRequest->getVal('token'))) {
$process = true;
} else {
$process = false;
}
$this->out->addHTML(Xml::openElement('form', $formParams) . Html::hidden('title', $this->getTitle()->getPrefixedText()) . Html::hidden('token', $this->user->editToken()) . Html::hidden('group', $group->getId()) . Html::hidden('process', 1));
// BEGIN
$cache = new MessageGroupCache($group, $code);
if (!$cache->exists() && $code === 'en') {
$cache->create();
}
$collection = $group->initCollection($code);
$collection->loadTranslations();
$diff = new DifferenceEngine();
$diff->showDiffStyle();
$diff->setReducedLineNumbers();
$ignoredMessages = $collection->getTags('ignored');
if (!is_array($ignoredMessages)) {
$ignoredMessages = array();
}
$messages = $group->load($code);
$changed = array();
foreach ($messages as $key => $value) {
// ignored? ignore!
if (in_array($key, $ignoredMessages)) {
continue;
}
$fuzzy = $old = false;
if (isset($collection[$key])) {
$old = $collection[$key]->translation();
}
// No changes at all, ignore.
if (str_replace(TRANSLATE_FUZZY, '', $old) === $value) {
continue;
}
if ($old === false) {
$name = wfMsgHtml('translate-manage-import-new', '<code style="font-weight:normal;">' . htmlspecialchars($key) . '</code>');
$text = TranslateUtils::convertWhiteSpaceToHTML($value);
$changed[] = MessageWebImporter::makeSectionElement($name, 'new', $text);
} else {
if (TranslateEditAddons::hasFuzzyString($old)) {
// NO-OP
} else {
$transTitle = MessageWebImporter::makeTranslationTitle($group, $key, $code);
if (TranslateEditAddons::isFuzzy($transTitle)) {
$old = TRANSLATE_FUZZY . $old;
}
}
$diff->setText($old, $value);
$text = $diff->getDiff('', '');
$type = 'changed';
if ($process) {
if (!count($changed)) {
$changed[] = '<ul>';
}
$action = $wgRequest->getVal(MessageWebImporter::escapeNameForPHP("action-{$type}-{$key}"));
if ($action === null) {
$message = wfMsgExt('translate-manage-inconsistent', 'parseinline', wfEscapeWikiText("action-{$type}-{$key}"));
$changed[] = "<li>{$message}</li></ul>";
$process = false;
} else {
// Initialise processing time counter.
if (!isset($this->time)) {
$this->time = wfTimestamp();
}
$fuzzybot = FuzzyBot::getUser();
$message = MessageWebImporter::doAction($action, $group, $key, $code, $value, '', $fuzzybot, EDIT_FORCE_BOT);
$key = array_shift($message);
$params = $message;
$message = wfMsgExt($key, 'parseinline', $params);
$changed[] = "<li>{$message}</li>";
if ($this->checkProcessTime()) {
$process = false;
$duration = $wgLang->formatNum($this->processingTime);
$message = wfMsgExt('translate-manage-toolong', 'parseinline', $duration);
$changed[] = "<li>{$message}</li></ul>";
}
continue;
}
}
if ($code !== 'en') {
$actions = array('import', 'conflict', 'ignore');
} else {
$actions = array('import', 'fuzzy', 'ignore');
}
$act = array();
if ($this->user->isAllowed('translate-manage')) {
$defaction = $fuzzy ? 'conflict' : 'import';
foreach ($actions as $action) {
//.........这里部分代码省略.........
示例15: getDiffRow
/**
* @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";
}