- 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 _primaryIDCache = {};
|
||||||
var _hasCreatorTypeCache = {};
|
var _hasCreatorTypeCache = {};
|
||||||
|
var _creatorTypesByItemType = {};
|
||||||
|
var _isValidForItemType = {};
|
||||||
|
|
||||||
function getTypesForItemType(itemTypeID) {
|
function getTypesForItemType(itemTypeID) {
|
||||||
|
if (_creatorTypesByItemType[itemTypeID]) {
|
||||||
|
return _creatorTypesByItemType[itemTypeID];
|
||||||
|
}
|
||||||
|
|
||||||
var sql = "SELECT creatorTypeID AS id, creatorType AS name "
|
var sql = "SELECT creatorTypeID AS id, creatorType AS name "
|
||||||
+ "FROM itemTypeCreatorTypes NATURAL JOIN creatorTypes "
|
+ "FROM itemTypeCreatorTypes NATURAL JOIN creatorTypes "
|
||||||
// DEBUG: sort needs to be on localized strings in itemPane.js
|
// DEBUG: sort needs to be on localized strings in itemPane.js
|
||||||
// (though still put primary field at top)
|
// (though still put primary field at top)
|
||||||
+ "WHERE itemTypeID=? ORDER BY primaryField=1 DESC, name";
|
+ "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) {
|
function isValidForItemType(creatorTypeID, itemTypeID) {
|
||||||
var sql = "SELECT COUNT(*) FROM itemTypeCreatorTypes "
|
if (_isValidForItemType[itemTypeID] && typeof _isValidForItemType[itemTypeID][creatorTypeID] != 'undefined') {
|
||||||
+ "WHERE itemTypeID=? AND creatorTypeID=?";
|
return _isValidForItemType[itemTypeID][creatorTypeID];
|
||||||
return !!Zotero.DB.valueQuery(sql, [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;
|
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] = {
|
this._creators[orderIndex] = {
|
||||||
ref: creator,
|
ref: creator,
|
||||||
creatorTypeID: creatorTypeID
|
creatorTypeID: creatorTypeID
|
||||||
|
|
Loading…
Reference in New Issue
Block a user