From fb8d22e52dfb8bbf0dba4845fd171b3872ceaf6f Mon Sep 17 00:00:00 2001
From: Demian Katz <demian.katz@villanova.edu>
Date: Wed, 3 Jul 2013 08:47:58 -0400
Subject: [PATCH] Fixed bug: first_indexed value in change_tracker updated
 inappropriately. Resolves VUFIND-835; thanks to Luke O'Sullivan for the fix.

---
 module/VuFind/src/VuFind/Db/Table/ChangeTracker.php       | 2 +-
 .../src/VuFindTest/Db/Table/ChangeTrackerTest.php         | 8 ++++++++
 2 files changed, 9 insertions(+), 1 deletion(-)

diff --git a/module/VuFind/src/VuFind/Db/Table/ChangeTracker.php b/module/VuFind/src/VuFind/Db/Table/ChangeTracker.php
index f2020fa7c86..f9a957d7123 100644
--- a/module/VuFind/src/VuFind/Db/Table/ChangeTracker.php
+++ b/module/VuFind/src/VuFind/Db/Table/ChangeTracker.php
@@ -203,7 +203,7 @@ class ChangeTracker extends Gateway
 
             // If first indexed is null, we're restoring a deleted record, so
             // we need to treat it as new -- we'll use the current time.
-            if (empty($this->first_indexed)) {
+            if (empty($row->first_indexed)) {
                 $row->first_indexed = $row->last_indexed;
             }
 
diff --git a/module/VuFind/tests/integration-tests/src/VuFindTest/Db/Table/ChangeTrackerTest.php b/module/VuFind/tests/integration-tests/src/VuFindTest/Db/Table/ChangeTrackerTest.php
index 10f3900a30d..799335d1fb7 100644
--- a/module/VuFind/tests/integration-tests/src/VuFindTest/Db/Table/ChangeTrackerTest.php
+++ b/module/VuFind/tests/integration-tests/src/VuFindTest/Db/Table/ChangeTrackerTest.php
@@ -77,6 +77,10 @@ class ChangeTrackerTest extends \VuFindTest\Unit\DbTestCase
         $this->assertTrue(empty($row->deleted));
         $this->assertEquals($row->first_indexed, $row->last_indexed);
         $this->assertEquals($row->last_record_change, '2012-01-17 20:46:10');
+        $previousFirstIndexed = $row->first_indexed;
+
+        // Sleep two seconds to be sure timestamps change:
+        sleep(2);
 
         // Index a later record version -- this should lead to changes:
         $tracker->index($core, 'test1', 1326833176);
@@ -89,6 +93,9 @@ class ChangeTrackerTest extends \VuFindTest\Unit\DbTestCase
         );
         $this->assertEquals($row->last_record_change, '2012-01-17 20:46:16');
 
+        // Make sure the "first indexed" date hasn't changed!
+        $this->assertEquals($row->first_indexed, $previousFirstIndexed);
+
         // Delete the record:
         $tracker->markDeleted($core, 'test1');
         $row = $tracker->retrieve($core, 'test1');
@@ -108,6 +115,7 @@ class ChangeTrackerTest extends \VuFindTest\Unit\DbTestCase
         $this->assertTrue(is_object($row));
         $this->assertTrue(empty($row->deleted));
         $this->assertEquals($row->last_record_change, '2012-01-17 20:46:10');
+        $this->assertEquals($row->first_indexed, $row->last_indexed);
 
         // Clean up after ourselves:
         $tracker->delete(array('core' => $core));
-- 
GitLab