- Fix "Creator must be a Zotero.Creator object in Zotero.Item.setCreator()" problem -- now looks for creator data within item block when it doesn't exist locally
- Fix a couple other problems with creators that could cause changes not to be synced or to cause unnecessary conflicts
This commit is contained in:
parent
70145d7a70
commit
5cfb050e15
|
@ -3538,8 +3538,12 @@ Zotero.Item.prototype._loadCreators = function() {
|
||||||
}
|
}
|
||||||
|
|
||||||
for (var i=0; i<creators.length; i++) {
|
for (var i=0; i<creators.length; i++) {
|
||||||
|
var creatorObj = Zotero.Creators.get(creators[i].creatorID);
|
||||||
|
if (!creatorObj) {
|
||||||
|
creatorObj = new Zotero.Creator(creators[i].creatorID);
|
||||||
|
}
|
||||||
this._creators[creators[i].orderIndex] = {
|
this._creators[creators[i].orderIndex] = {
|
||||||
ref: new Zotero.Creator(creators[i].creatorID),
|
ref: creatorObj,
|
||||||
creatorTypeID: creators[i].creatorTypeID
|
creatorTypeID: creators[i].creatorTypeID
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
@ -1392,6 +1392,9 @@ Zotero.Sync.Server.Data = new function() {
|
||||||
var relatedItemsStore = {};
|
var relatedItemsStore = {};
|
||||||
var itemStorageModTimes = {};
|
var itemStorageModTimes = {};
|
||||||
|
|
||||||
|
//Zotero.debug("Updated IDs:");
|
||||||
|
//Zotero.debug(uploadIDs);
|
||||||
|
|
||||||
Zotero.DB.beginTransaction();
|
Zotero.DB.beginTransaction();
|
||||||
|
|
||||||
for each(var syncObject in Zotero.Sync.syncObjects) {
|
for each(var syncObject in Zotero.Sync.syncObjects) {
|
||||||
|
@ -1480,7 +1483,9 @@ Zotero.Sync.Server.Data = new function() {
|
||||||
var creators = obj.getCreators();
|
var creators = obj.getCreators();
|
||||||
creators = creators.concat(remoteObj.getCreators());
|
creators = creators.concat(remoteObj.getCreators());
|
||||||
for each(var creator in creators) {
|
for each(var creator in creators) {
|
||||||
if (remoteCreatorStore[obj.id]) {
|
var r = remoteCreatorStore[creator.ref.id];
|
||||||
|
// Doesn't include dateModified
|
||||||
|
if (r && !r.equals(creator.ref)) {
|
||||||
creatorsChanged = true;
|
creatorsChanged = true;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -1656,7 +1661,23 @@ Zotero.Sync.Server.Data = new function() {
|
||||||
// Don't use assigned-but-unsaved ids for new ids
|
// Don't use assigned-but-unsaved ids for new ids
|
||||||
Zotero.ID.skip(types, obj.id);
|
Zotero.ID.skip(types, obj.id);
|
||||||
|
|
||||||
if (type == 'item' && obj.isAttachment() &&
|
if (type == 'item') {
|
||||||
|
// Make sure none of the item's creators are marked as
|
||||||
|
// deleted, which could happen if a creator was deleted
|
||||||
|
// locally but attached to a new/modified item remotely
|
||||||
|
// and added back in xmlToItem()
|
||||||
|
if (obj.isRegularItem()) {
|
||||||
|
var creators = obj.getCreators();
|
||||||
|
for each(var creator in creators) {
|
||||||
|
Zotero.Sync.removeFromDeleted(
|
||||||
|
uploadIDs.deleted.creators,
|
||||||
|
creator.ref.id,
|
||||||
|
creator.ref.key,
|
||||||
|
true
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (obj.isAttachment() &&
|
||||||
(obj.attachmentLinkMode ==
|
(obj.attachmentLinkMode ==
|
||||||
Zotero.Attachments.LINK_MODE_IMPORTED_FILE ||
|
Zotero.Attachments.LINK_MODE_IMPORTED_FILE ||
|
||||||
obj.attachmentLinkMode ==
|
obj.attachmentLinkMode ==
|
||||||
|
@ -1675,6 +1696,7 @@ Zotero.Sync.Server.Data = new function() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
//
|
//
|
||||||
|
@ -1867,6 +1889,9 @@ Zotero.Sync.Server.Data = new function() {
|
||||||
|
|
||||||
var xmlstr = Zotero.Sync.Server.Data.buildUploadXML(uploadIDs);
|
var xmlstr = Zotero.Sync.Server.Data.buildUploadXML(uploadIDs);
|
||||||
|
|
||||||
|
//Zotero.debug(xmlstr);
|
||||||
|
//throw ('break');
|
||||||
|
|
||||||
Zotero.DB.commitTransaction();
|
Zotero.DB.commitTransaction();
|
||||||
|
|
||||||
return xmlstr;
|
return xmlstr;
|
||||||
|
@ -2127,8 +2152,20 @@ Zotero.Sync.Server.Data = new function() {
|
||||||
|
|
||||||
var creatorID = parseInt(creator.@id);
|
var creatorID = parseInt(creator.@id);
|
||||||
var creatorObj = Zotero.Creators.get(creatorID);
|
var creatorObj = Zotero.Creators.get(creatorID);
|
||||||
|
// If creator doesn't exist locally (e.g., if it was deleted locally
|
||||||
|
// and appears in a new/modified item remotely), get it from within
|
||||||
|
// the item's creator block, where a copy should be provided
|
||||||
if (!creatorObj) {
|
if (!creatorObj) {
|
||||||
throw ("Creator " + creatorID + " does not exist");
|
if (creator.creator.length() == 0) {
|
||||||
|
throw ("Data for missing local creator " + creatorID
|
||||||
|
+ " not provided in Zotero.Sync.Server.Data.xmlToItem()");
|
||||||
|
}
|
||||||
|
var creatorObj =
|
||||||
|
Zotero.Sync.Server.Data.xmlToCreator(creator.creator);
|
||||||
|
if (creatorObj.id != creatorID) {
|
||||||
|
throw ("Creator id " + creatorObj.id + " does not match "
|
||||||
|
+ "item creator in Zotero.Sync.Server.Data.xmlToItem()");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
item.setCreator(
|
item.setCreator(
|
||||||
pos,
|
pos,
|
||||||
|
@ -2328,10 +2365,14 @@ Zotero.Sync.Server.Data = new function() {
|
||||||
function xmlToCreator(xmlCreator, creator, skipPrimary) {
|
function xmlToCreator(xmlCreator, creator, skipPrimary) {
|
||||||
if (!creator) {
|
if (!creator) {
|
||||||
if (skipPrimary) {
|
if (skipPrimary) {
|
||||||
creator = new Zotero.Creator(null);
|
creator = new Zotero.Creator;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
creator = new Zotero.Creator(parseInt(xmlCreator.@id));
|
var creatorID = parseInt(xmlCreator.@id);
|
||||||
|
creator = Zotero.Creators.get(creatorID);
|
||||||
|
if (!creator) {
|
||||||
|
creator = new Zotero.Creator(creatorID);
|
||||||
|
}
|
||||||
/*
|
/*
|
||||||
if (creator.exists()) {
|
if (creator.exists()) {
|
||||||
throw ("Creator specified in XML node already exists "
|
throw ("Creator specified in XML node already exists "
|
||||||
|
|
Loading…
Reference in New Issue
Block a user