From 0f13c836f0ee71a3188a775b9ea64025e10d38f5 Mon Sep 17 00:00:00 2001
From: Gerrit Uitslag <klapinklapin@gmail.com>
Date: Thu, 21 Nov 2013 18:02:12 +0100
Subject: [PATCH] Improved isCurrentRevision(), tests included

---
 .../changelog_getrelativerevision.test.php    | 35 +++++++++++++++++++
 inc/changelog.php                             |  7 ++--
 2 files changed, 39 insertions(+), 3 deletions(-)

diff --git a/_test/tests/inc/changelog_getrelativerevision.test.php b/_test/tests/inc/changelog_getrelativerevision.test.php
index 7cd081eab..588c424b1 100644
--- a/_test/tests/inc/changelog_getrelativerevision.test.php
+++ b/_test/tests/inc/changelog_getrelativerevision.test.php
@@ -270,4 +270,39 @@ class changelog_getrelativerevision_test extends DokuWikiTest {
         $revfound = $pagelog->getRelativeRevision($rev, $dir, $media = false);
         $this->assertEquals($revexpected, $revfound);
     }
+
+    function test_iscurrentpagerevision() {
+        $rev = 1385051947;
+        $currentexpected = true;
+
+        //set a known timestamp
+        touch(wikiFN($this->pageid), $rev);
+
+        $pagelog = new PageRevisionLog($this->pageid, $chunk_size = 8192);
+
+        $current = $pagelog->isCurrentRevision($rev, $media = false);
+        $this->assertEquals($currentexpected, $current);
+    }
+
+    function test_isnotcurrentpagerevision() {
+        $rev = 1385051947;
+        $not_current_rev = $rev - 1;
+        $currentexpected = false;
+
+        //set a known timestamp
+        touch(wikiFN($this->pageid), $rev);
+
+        $pagelog = new PageRevisionLog($this->pageid, $chunk_size = 8192);
+        $current = $pagelog->isCurrentRevision($not_current_rev, $media = false);
+        $this->assertEquals($currentexpected, $current);
+    }
+
+    function test_notexistingcurrentpage() {
+        $rev = 1385051947;
+        $currentexpected = false;
+
+        $pagelog = new PageRevisionLog('nonexistingpage', $chunk_size = 8192);
+        $current = $pagelog->isCurrentRevision($rev, $media = false);
+        $this->assertEquals($currentexpected, $current);
+    }
 }
\ No newline at end of file
diff --git a/inc/changelog.php b/inc/changelog.php
index de26fdf6a..722365853 100644
--- a/inc/changelog.php
+++ b/inc/changelog.php
@@ -760,11 +760,12 @@ class PageRevisionLog {
     /**
      * Check whether given revision is the current page
      *
-     * @param int $rev timestamp of current page
+     * @param int  $rev   timestamp of current page
+     * @param bool $media look for media?
      * @return bool true if $rev is current revision, otherwise false
      */
-    public function isCurrentRevision($rev){
-        return isset($INFO['meta']['last_change']) && $rev == $INFO['meta']['last_change']['date'];
+    public function isCurrentRevision($rev, $media = false) {
+        return $rev == @filemtime($media ? mediaFN($this->id) : wikiFN($this->id));
     }
 }
 
-- 
GitLab