summaryrefslogtreecommitdiff
path: root/inc/html.php
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 /inc/html.php
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.
Diffstat (limited to 'inc/html.php')
-rw-r--r--inc/html.php31
1 files changed, 24 insertions, 7 deletions
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,