- Throw an error if an invalid creator type for the item type is passed to Zotero.Item.setCreator()
- Cache some Zotero.CreatorTypes calls
This commit is contained in:
parent
1c560eb94c
commit
e9f5643ecd
|
@ -164,21 +164,48 @@ Zotero.CreatorTypes = new function() {
|
|||
|
||||
var _primaryIDCache = {};
|
||||
var _hasCreatorTypeCache = {};
|
||||
var _creatorTypesByItemType = {};
|
||||
var _isValidForItemType = {};
|
||||
|
||||
function getTypesForItemType(itemTypeID) {
|
||||
if (_creatorTypesByItemType[itemTypeID]) {
|
||||
return _creatorTypesByItemType[itemTypeID];
|
||||
}
|
||||
|
||||
var sql = "SELECT creatorTypeID AS id, creatorType AS name "
|
||||
+ "FROM itemTypeCreatorTypes NATURAL JOIN creatorTypes "
|
||||
// DEBUG: sort needs to be on localized strings in itemPane.js
|
||||
// (though still put primary field at top)
|
||||
+ "WHERE itemTypeID=? ORDER BY primaryField=1 DESC, name";
|
||||
return Zotero.DB.query(sql, itemTypeID);
|
||||
var types = Zotero.DB.query(sql, itemTypeID);
|
||||
if (!types) {
|
||||
types = [];
|
||||
}
|
||||
|
||||
_creatorTypesByItemType[itemTypeID] = types;
|
||||
return _creatorTypesByItemType[itemTypeID];
|
||||
}
|
||||
|
||||
|
||||
function isValidForItemType(creatorTypeID, itemTypeID) {
|
||||
var sql = "SELECT COUNT(*) FROM itemTypeCreatorTypes "
|
||||
+ "WHERE itemTypeID=? AND creatorTypeID=?";
|
||||
return !!Zotero.DB.valueQuery(sql, [itemTypeID, creatorTypeID]);
|
||||
if (_isValidForItemType[itemTypeID] && typeof _isValidForItemType[itemTypeID][creatorTypeID] != 'undefined') {
|
||||
return _isValidForItemType[itemTypeID][creatorTypeID];
|
||||
}
|
||||
|
||||
var valid = false;
|
||||
var types = this.getTypesForItemType(creatorTypeID, itemTypeID);
|
||||
for each(var type in types) {
|
||||
if (type.id == creatorTypeID) {
|
||||
valid = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (!_isValidForItemType[itemTypeID]) {
|
||||
_isValidForItemType[itemTypeID] = {};
|
||||
}
|
||||
_isValidForItemType[itemTypeID][creatorTypeID] = valid;
|
||||
return valid;
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -1011,6 +1011,11 @@ Zotero.Item.prototype.setCreator = function(orderIndex, creator, creatorTypeIDOr
|
|||
return false;
|
||||
}
|
||||
|
||||
if (!Zotero.CreatorTypes.isValidForItemType(creatorTypeID, this.itemTypeID)) {
|
||||
throw ("Invalid creator type for item type in Zotero.Item.setCreator() "
|
||||
+ "(" + creatorTypeID + ", " + this.itemTypeID + ")");
|
||||
}
|
||||
|
||||
this._creators[orderIndex] = {
|
||||
ref: creator,
|
||||
creatorTypeID: creatorTypeID
|
||||
|
|
Loading…
Reference in New Issue
Block a user