summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGerrit Uitslag <klapinklapin@gmail.com>2014-02-19 17:58:36 +0100
committerGerrit Uitslag <klapinklapin@gmail.com>2014-02-19 17:58:36 +0100
commit621bbd2a24f6ceac0310c04b27e11a2c7c325294 (patch)
tree8a68b48ee6810ce580900f11f7e2a39698139bbd
parentc130b0f8ec18ec66ac40422cf354a23268108866 (diff)
downloadrpg-621bbd2a24f6ceac0310c04b27e11a2c7c325294.tar.gz
rpg-621bbd2a24f6ceac0310c04b27e11a2c7c325294.tar.bz2
diff of removed page, require handling right rev=0
When page is removed, and diff can be requested between a revision and current situation. This results in right revision is 0. Similar case just after creating a page. A diff between the first version and nothing before, result in left revision is 0. In these cases a empty dummy revision is placed as selected value in dropdown. Otherwise user got distracted by the revisions details shown in select field, which are not related to the diff below.
-rw-r--r--inc/changelog.php16
-rw-r--r--inc/html.php31
2 files changed, 35 insertions, 12 deletions
diff --git a/inc/changelog.php b/inc/changelog.php
index d2ad23c08..28e53e77a 100644
--- a/inc/changelog.php
+++ b/inc/changelog.php
@@ -642,7 +642,7 @@ abstract class ChangeLog {
* When available it returns $max entries for each revision
*
* @param int $rev1 oldest revision timestamp
- * @param int $rev2 newest revision timestamp
+ * @param int $rev2 newest revision timestamp (0 looks up last revision)
* @param int $max maximum number of revisions returned
* @return array with two arrays with revisions surrounding rev1 respectively rev2
*/
@@ -651,10 +651,16 @@ abstract class ChangeLog {
$rev1 = max($rev1, 0);
$rev2 = max($rev2, 0);
- if($rev2 < $rev1) {
- $rev = $rev2;
- $rev2 = $rev1;
- $rev1 = $rev;
+ if($rev2) {
+ if($rev2 < $rev1) {
+ $rev = $rev2;
+ $rev2 = $rev1;
+ $rev1 = $rev;
+ }
+ } else {
+ //empty right side means a removed page. Look up last revision.
+ $revs = $this->getRevisions(-1, 1);
+ $rev2 = $revs[0];
}
//collect revisions around rev2
list($revs2, $allrevs, $fp, $lines, $head, $tail) = $this->retrieveRevisionsAround($rev2, $max);
diff --git a/inc/html.php b/inc/html.php
index 1a549824e..39d0eeada 100644
--- a/inc/html.php
+++ b/inc/html.php
@@ -1308,21 +1308,27 @@ function html_diff($text = '', $intro = true, $type = null) {
function html_diff_navigation($pagelog, $type, $l_rev, $r_rev) {
global $INFO, $ID;
- //last timestamp is not in changelog
+ //last timestamp is not in changelog (note: when page is removed, the metadata timestamp is zero as well)
$r_rev = $r_rev ? $r_rev : $INFO['meta']['last_change']['date'];
//retrieve revisions with additional info
list($l_revs, $r_revs) = $pagelog->getRevisionsAround($l_rev, $r_rev);
$l_revisions = array();
+ if(!$l_rev) {
+ $l_revisions[0] = array(0, "", false); //no left revision given, add dummy
+ }
foreach($l_revs as $rev) {
$info = $pagelog->getRevisionInfo($rev);
$l_revisions[$rev] = array(
$rev,
dformat($info['date']) . ' ' . editorinfo($info['user']) . ' ' . $info['sum'],
- $rev >= $r_rev //disable?
+ $r_rev ? $rev >= $r_rev : false //disable?
);
}
$r_revisions = array();
+ if(!$r_rev) {
+ $r_revisions[0] = array(0, "", false); //no right revision given, add dummy
+ }
foreach($r_revs as $rev) {
$info = $pagelog->getRevisionInfo($rev);
$r_revisions[$rev] = array(
@@ -1331,13 +1337,24 @@ function html_diff_navigation($pagelog, $type, $l_rev, $r_rev) {
$rev <= $l_rev //disable?
);
}
+
//determine previous/next revisions
$l_index = array_search($l_rev, $l_revs);
$l_prev = $l_revs[$l_index + 1];
$l_next = $l_revs[$l_index - 1];
- $r_index = array_search($r_rev, $r_revs);
- $r_prev = $r_revs[$r_index + 1];
- $r_next = $r_revs[$r_index - 1];
+ if($r_rev) {
+ $r_index = array_search($r_rev, $r_revs);
+ $r_prev = $r_revs[$r_index + 1];
+ $r_next = $r_revs[$r_index - 1];
+ } else {
+ //removed page
+ if($l_next) {
+ $r_prev = $r_revs[0];
+ } else {
+ $r_prev = null;
+ }
+ $r_next = null;
+ }
/*
* Left side:
@@ -1366,7 +1383,7 @@ function html_diff_navigation($pagelog, $type, $l_rev, $r_rev) {
$form->addElement(form_makeButton('submit', 'diff', 'Go'));
$l_nav .= $form->getForm();
//move forward
- if($l_next && $l_next < $r_rev) {
+ if($l_next && ($l_next < $r_rev || !$r_rev)) {
$l_nav .= html_diff_navigationlink($type, 'diffnextrev', $l_next, $r_rev);
}
@@ -1418,7 +1435,7 @@ function html_diff_navigation($pagelog, $type, $l_rev, $r_rev) {
*/
function html_diff_navigationlink($difftype, $linktype, $lrev, $rrev = null) {
global $ID, $lang;
- if($rrev === null) {
+ if(!$rrev) {
$urlparam = array(
'do' => 'diff',
'rev' => $lrev,