commit 7a03b1e527b16a8bd4386a6614426ccdcd3620ea
parent 28eaaaf2bf5e0e268efb32e16a38aeb42766ee1a
Author: Dan Stillman <dstillman@zotero.org>
Date: Fri, 11 Mar 2016 03:28:38 -0500
Accept ISO dates in Item::setField()
Diffstat:
2 files changed, 58 insertions(+), 6 deletions(-)
diff --git a/chrome/content/zotero/xpcom/data/item.js b/chrome/content/zotero/xpcom/data/item.js
@@ -663,10 +663,16 @@ Zotero.Item.prototype.setField = function(field, value, loadIn) {
switch (field) {
case 'itemTypeID':
- case 'dateAdded':
break;
+ case 'dateAdded':
case 'dateModified':
+ // Accept ISO dates
+ if (Zotero.Date.isISODate(value)) {
+ let d = Zotero.Date.isoToDate(value);
+ value = Zotero.Date.dateToSQL(d, true);
+ }
+
// Make sure it's valid
let date = Zotero.Date.sqlToDate(value, true);
if (!date) throw new Error("Invalid SQL date: " + value);
@@ -790,11 +796,18 @@ Zotero.Item.prototype.setField = function(field, value, loadIn) {
}
// Validate access date
else if (fieldID == Zotero.ItemFields.getID('accessDate')) {
- if (value && (!Zotero.Date.isSQLDate(value) &&
- !Zotero.Date.isSQLDateTime(value) &&
- value != 'CURRENT_TIMESTAMP')) {
- Zotero.debug("Discarding invalid accessDate '" + value + "' in Item.setField()");
- return false;
+ if (value && value != 'CURRENT_TIMESTAMP') {
+ // Accept ISO dates
+ if (Zotero.Date.isISODate(value)) {
+ let d = Zotero.Date.isoToDate(value);
+ value = Zotero.Date.dateToSQL(d, true);
+ }
+
+ if (!Zotero.Date.isSQLDate(value) && !Zotero.Date.isSQLDateTime(value)) {
+ Zotero.logError(`Discarding invalid ${field} '${value}' for `
+ + `item ${this.libraryKey} in setField()`);
+ return false;
+ }
}
}
diff --git a/test/tests/itemTest.js b/test/tests/itemTest.js
@@ -135,6 +135,45 @@ describe("Zotero.Item", function () {
item = yield Zotero.Items.getAsync(id);
assert.equal(item.getField("versionNumber"), "1.0");
});
+
+ it("should accept ISO 8601 dates", function* () {
+ var fields = {
+ accessDate: "2015-06-07T20:56:00Z",
+ dateAdded: "2015-06-07T20:57:00Z",
+ dateModified: "2015-06-07T20:58:00Z",
+ };
+ var item = createUnsavedDataObject('item');
+ for (let i in fields) {
+ item.setField(i, fields[i]);
+ }
+ assert.equal(item.getField('accessDate'), '2015-06-07 20:56:00');
+ assert.equal(item.dateAdded, '2015-06-07 20:57:00');
+ assert.equal(item.dateModified, '2015-06-07 20:58:00');
+ })
+
+ it("should accept SQL dates", function* () {
+ var fields = {
+ accessDate: "2015-06-07 20:56:00",
+ dateAdded: "2015-06-07 20:57:00",
+ dateModified: "2015-06-07 20:58:00",
+ };
+ var item = createUnsavedDataObject('item');
+ for (let i in fields) {
+ item.setField(i, fields[i]);
+ item.getField(i, fields[i]);
+ }
+ })
+
+ it("should ignore unknown accessDate values", function* () {
+ var fields = {
+ accessDate: "foo"
+ };
+ var item = createUnsavedDataObject('item');
+ for (let i in fields) {
+ item.setField(i, fields[i]);
+ }
+ assert.strictEqual(item.getField('accessDate'), '');
+ })
})
describe("#dateAdded", function () {