Skip to content

Commit

Permalink
Fix pre 4.0.27 translator exports. Closes zotero#73
Browse files Browse the repository at this point in the history
  • Loading branch information
adomasven committed Jan 10, 2019
1 parent 158ebc6 commit e02ee7a
Show file tree
Hide file tree
Showing 2 changed files with 77 additions and 0 deletions.
3 changes: 3 additions & 0 deletions src/translation/translate_item.js
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,9 @@ ItemGetter.prototype = {
"nextItem":function() {
if(!this._itemsLeft.length) return false;
var item = this._itemsLeft.shift();
if (this.legacy) {
item = Zotero.Utilities.itemToLegacyExportFormat(item);
}
if (!item.attachments) {
item.attachments = [];
}
Expand Down
74 changes: 74 additions & 0 deletions src/utilities.js
Original file line number Diff line number Diff line change
Expand Up @@ -187,5 +187,79 @@ Zotero.Utilities.itemToAPIJSON = function(item) {
return newItems;
};

Zotero.Utilities.itemToLegacyExportFormat = function(item) {
item.uniqueFields = {};

// Map base fields
for (let field in item) {
try {
var baseField = Zotero.ItemFields.getName(
Zotero.ItemFields.getBaseIDFromTypeAndField(item.itemType, field)
);
} catch (e) {
continue;
}

if (!baseField || baseField == field) {
item.uniqueFields[field] = item[field];
} else {
item[baseField] = item[field];
item.uniqueFields[baseField] = item[field];
}
}

// Meaningless local item ID, but some older export translators depend on it
item.itemID = Zotero.Utilities.randomString(6);
item.key = Zotero.Utilities.randomString(6); // CSV translator exports this

// "version" is expected to be a field for "computerProgram", which is now
// called "versionNumber"
delete item.version;
if (item.versionNumber) {
item.version = item.uniqueFields.version = item.versionNumber;
delete item.versionNumber;
}

// Creators
if (item.creators) {
for (let i=0; i<item.creators.length; i++) {
let creator = item.creators[i];

if (creator.name) {
creator.fieldMode = 1;
creator.lastName = creator.name;
delete creator.name;
}

// Old format used to supply creatorID (the database ID), but no
// translator ever used it
}
}

item.sourceItemKey = item.parentItem;

// Tags
for (let i=0; i<item.tags.length; i++) {
if (!item.tags[i].type) {
item.tags[i].type = 0;
}
// No translator ever used "primary", "fields", or "linkedItems" objects
}

// seeAlso was always present, but it was always an empty array.
// Zotero RDF translator pretended to use it
item.seeAlso = [];

if (item.contentType) {
item.mimeType = item.uniqueFields.mimeType = item.contentType;
}

if (item.note) {
item.uniqueFields.note = item.note;
}

return item;
}

module.exports = Zotero.Utilities;

0 comments on commit e02ee7a

Please sign in to comment.