function MergeSimulEdits($pagename,&$page,&$new) { global $Now, $EnablePost, $MessagesFmt, $WorkDir; if (@!$_POST['basetime'] || !PageExists($pagename) || $page['time'] >= $Now || $_POST['basetime']>=$page['time'] || $page['text'] == $new['text']) return; $EnablePost = 0; $old = array(); RestorePage($pagename,$page,$old,"diff:{$_POST['basetime']}"); $text = Merge($new['text'],$old['text'],$page['text']); if ($text > '') { $new['text'] = $text; $ec = '$[EditConflict]'; } else $ec = '$[EditWarning]'; XLSDV('en', array( 'EditConflict' => "The page you are editing has been modified since you started editing it. The modifications have been merged into the text below, you may want to verify the results of the merge before pressing save. Conflicts the system couldn't resolve are bracketed by <<<<<<< and >>>>>>>.", 'EditWarning' => "The page you are editing has been modified since you started editing it. If you continue, your changes will overwrite any changes that others have made.")); $MessagesFmt[] = "<p class='editconflict'>$ec (<a target='_blank' href='\$PageUrl?action=diff'>$[View changes]</a>) </p>\n"; }
function ExportActionHandler($pagename, $auth) { // read the page and sort keys chronologically $page = ReadPage($pagename); if (!$page || !$page['name']) { return; } krsort($page); reset($page); // start with the latest version $versions = []; $version['author'] = $page['author']; $version['timestamp'] = $page['time']; $version['source'] = utf8_encode($page['text']); array_push($versions, $version); // use the page's diff keys to restore markup for older version foreach ($page as $key => $value) { if (!preg_match("/^diff:(\\d+):(\\d+):?([^:]*)/", $key, $match)) { continue; } // ignore the original diff tag, which is is not a delta // ignore blank changes // ignore some rare dupes if ($match[1] === $match[2]) { continue; } if (@$page[$match[0]] === '') { continue; } if (array_search($match[2], array_column($versions, 'timestamp'))) { continue; } // metadata $diffgmt = $match[1]; $diffauthor = @$page["author:{$diffgmt}"]; if (!$diffauthor) { @($diffauthor = $page["host:{$diffgmt}"]); } if (!$diffauthor) { $diffauthor = "unknown"; } $diffchangesum = PHSC(@$page["csum:{$diffgmt}"]); // page version $version = []; $version['author'] = $diffauthor; $version['timestamp'] = $match[2]; $version['commit_message'] = $diffchangesum; $version['source'] = utf8_encode(RestorePage($pagename, $page, $new, $match[0])); array_push($versions, $version); } // finalize response $response['page_name'] = $pagename; $response['versions'] = $versions; $response = json_encode($response); echo $response; }
function MergeSimulEdits($pagename, &$page, &$new) { global $MessagesFmt, $WorkDir, $SysMergeCmd; SDV($SysMergeCmd, "/usr/bin/diff3 -L '' -L '' -L '' -m -E"); if (@(!$_POST['basetime']) || !PageExists($pagename) || $_POST['basetime'] >= $page['time']) { return; } unset($_POST['post']); $MessagesFmt[] = "<p class='editconflict'>The page you are \n editing has been modified since you started editing it. \n The modifications have been merged into the text below,\n you may want to verify the results of the merge before\n pressing save. Conflicts the system couldn't resolve are\n bracketed by <<<<<<< and \n >>>>>>>. (<a target='_blank' \n href='\$PageUrl?action=diff'>View changes</a>)</p>\n"; $old = array(); RestorePage($pagename, $page, $old, "diff:{$_POST['basetime']}"); $new['text'] = Merge($new['text'], $old['text'], $page['text']); }