Closes #56, add "institution" field in creators table to deal with institutional authors

- 'isInstitution' parameter added to Item.setCreator(), Creators.getID(), Creators.add()

- 'isInstitution' property added to return from Creators.get() and Item.getCreator()


var obj = Scholar.Items.getNewItemByType(1);
obj.setField('title', 'Digital History for Dummies');
obj.setCreator(0, '', 'Center for History and New Media', 1, true); // true == institutional creator
var id = obj.save();


Note: 'firstName' field is ignored when 'isInstitution' is true
This commit is contained in:
Dan Stillman 2006-08-11 04:36:44 +00:00
parent 8a56951c0b
commit 957b220cd3
3 changed files with 61 additions and 36 deletions

View File

@ -223,7 +223,7 @@ Scholar.Item.prototype.getCreators = function(){
/* /*
* Set or update the creator at the specified position * Set or update the creator at the specified position
*/ */
Scholar.Item.prototype.setCreator = function(orderIndex, firstName, lastName, creatorTypeID){ Scholar.Item.prototype.setCreator = function(orderIndex, firstName, lastName, creatorTypeID, isInstitution){
if (this.getID() && !this._creatorsLoaded){ if (this.getID() && !this._creatorsLoaded){
this._loadCreators(); this._loadCreators();
} }
@ -236,11 +236,14 @@ Scholar.Item.prototype.setCreator = function(orderIndex, firstName, lastName, cr
lastName = ''; lastName = '';
} }
isInstitution = !!isInstitution;
// If creator at this position hasn't changed, cancel // If creator at this position hasn't changed, cancel
if (this._creators.has(orderIndex) && if (this._creators.has(orderIndex) &&
this._creators.get(orderIndex)['firstName']==firstName && this._creators.get(orderIndex)['firstName']==firstName &&
this._creators.get(orderIndex)['lastName']==lastName && this._creators.get(orderIndex)['lastName']==lastName &&
this._creators.get(orderIndex)['creatorTypeID']==creatorTypeID){ this._creators.get(orderIndex)['creatorTypeID']==creatorTypeID &&
this._creators.get(orderIndex)['isInstitution']==isInstitution){
return false; return false;
} }
@ -252,6 +255,7 @@ Scholar.Item.prototype.setCreator = function(orderIndex, firstName, lastName, cr
creator['firstName'] = firstName; creator['firstName'] = firstName;
creator['lastName'] = lastName; creator['lastName'] = lastName;
creator['creatorTypeID'] = creatorTypeID; creator['creatorTypeID'] = creatorTypeID;
creator['isInstitution'] = isInstitution;
this._creators.set(orderIndex, creator); this._creators.set(orderIndex, creator);
this._changedCreators.set(orderIndex); this._changedCreators.set(orderIndex);
@ -283,7 +287,7 @@ Scholar.Item.prototype.removeCreator = function(orderIndex){
} }
Scholar.Item.prototype.creatorExists = function(firstName, lastName, creatorTypeID, skipIndex){ Scholar.Item.prototype.creatorExists = function(firstName, lastName, creatorTypeID, isInstitution, skipIndex){
for (var j=0, len=this.numCreators(); j<len; j++){ for (var j=0, len=this.numCreators(); j<len; j++){
if (typeof skipIndex!='undefined' && skipIndex==j){ if (typeof skipIndex!='undefined' && skipIndex==j){
continue; continue;
@ -292,7 +296,8 @@ Scholar.Item.prototype.creatorExists = function(firstName, lastName, creatorType
if (firstName==creator2['firstName'] && if (firstName==creator2['firstName'] &&
lastName==creator2['lastName'] && lastName==creator2['lastName'] &&
creatorTypeID==creator2['creatorTypeID']){ creatorTypeID==creator2['creatorTypeID'] &&
isInstitution==creator2['isInstitution']){
return true; return true;
} }
} }
@ -439,7 +444,8 @@ Scholar.Item.prototype.save = function(){
for (var i=0, len=this.numCreators(); i<len; i++){ for (var i=0, len=this.numCreators(); i<len; i++){
var creator = this.getCreator(i); var creator = this.getCreator(i);
if (this.creatorExists(creator['firstName'], if (this.creatorExists(creator['firstName'],
creator['lastName'], creator['creatorTypeID'], i)){ creator['lastName'], creator['creatorTypeID'],
creator['isInstitution'], i)){
throw('Cannot add duplicate creator/creatorType ' throw('Cannot add duplicate creator/creatorType '
+ 'to item ' + this.getID()); + 'to item ' + this.getID());
} }
@ -467,14 +473,16 @@ Scholar.Item.prototype.save = function(){
// See if this is an existing creator // See if this is an existing creator
var creatorID = Scholar.Creators.getID( var creatorID = Scholar.Creators.getID(
creator['firstName'], creator['firstName'],
creator['lastName'] creator['lastName'],
creator['isInstitution']
); );
// If not, add it // If not, add it
if (!creatorID){ if (!creatorID){
creatorID = Scholar.Creators.add( creatorID = Scholar.Creators.add(
creator['firstName'], creator['firstName'],
creator['lastName'] creator['lastName'],
creator['isInstitution']
); );
Scholar.History.add('creators', 'creatorID', creatorID); Scholar.History.add('creators', 'creatorID', creatorID);
} }
@ -724,14 +732,16 @@ Scholar.Item.prototype.save = function(){
// See if this is an existing creator // See if this is an existing creator
var creatorID = Scholar.Creators.getID( var creatorID = Scholar.Creators.getID(
creator['firstName'], creator['firstName'],
creator['lastName'] creator['lastName'],
creator['isInstitution']
); );
// If not, add it // If not, add it
if (!creatorID){ if (!creatorID){
creatorID = Scholar.Creators.add( creatorID = Scholar.Creators.add(
creator['firstName'], creator['firstName'],
creator['lastName'] creator['lastName'],
creator['isInstitution']
); );
Scholar.History.add('creators', 'creatorID', creatorID); Scholar.History.add('creators', 'creatorID', creatorID);
} }
@ -1479,6 +1489,7 @@ Scholar.Item.prototype.toArray = function(){
arr['creators'][i] = []; arr['creators'][i] = [];
arr['creators'][i]['firstName'] = creators[i]['firstName']; arr['creators'][i]['firstName'] = creators[i]['firstName'];
arr['creators'][i]['lastName'] = creators[i]['lastName']; arr['creators'][i]['lastName'] = creators[i]['lastName'];
arr['creators'][i]['isInstitution'] = creators[i]['isInstitution'];
// Convert creatorTypeIDs to text // Convert creatorTypeIDs to text
arr['creators'][i]['creatorType'] = arr['creators'][i]['creatorType'] =
Scholar.CreatorTypes.getName(creators[i]['creatorTypeID']); Scholar.CreatorTypes.getName(creators[i]['creatorTypeID']);
@ -1576,6 +1587,7 @@ Scholar.Item.prototype._loadCreators = function(){
var creator = new Array(); var creator = new Array();
creator['firstName'] = creators[i]['firstName']; creator['firstName'] = creators[i]['firstName'];
creator['lastName'] = creators[i]['lastName']; creator['lastName'] = creators[i]['lastName'];
creator['isInstitution'] = creators[i]['isInstitution'];
creator['creatorTypeID'] = creators[i]['creatorTypeID']; creator['creatorTypeID'] = creators[i]['creatorTypeID'];
// Save creator data into Hash, indexed by orderIndex // Save creator data into Hash, indexed by orderIndex
this._creators.set(creators[i]['orderIndex'], creator); this._creators.set(creators[i]['orderIndex'], creator);
@ -2667,7 +2679,7 @@ Scholar.Collections = new function(){
* Same structure as Scholar.Tags -- make changes in both places if possible * Same structure as Scholar.Tags -- make changes in both places if possible
*/ */
Scholar.Creators = new function(){ Scholar.Creators = new function(){
var _creators = new Array; // indexed by first%%%last hash var _creators = new Array; // indexed by first%%%last%%%isInstitution hash
var _creatorsByID = new Array; // indexed by creatorID var _creatorsByID = new Array; // indexed by creatorID
this.get = get; this.get = get;
@ -2700,16 +2712,24 @@ Scholar.Creators = new function(){
/* /*
* Returns the creatorID matching given name and type * Returns the creatorID matching given name and type
*/ */
function getID(firstName, lastName){ function getID(firstName, lastName, isInstitution){
var hash = firstName + '%%%' + lastName; if (isInstitution){
firstName = '';
isInstitution = 1;
}
else {
isInstitution = 0;
}
var hash = firstName + '%%%' + lastName + '%%%' + isInstitution;
if (_creators[hash]){ if (_creators[hash]){
return _creators[hash]; return _creators[hash];
} }
var sql = 'SELECT creatorID FROM creators ' var sql = 'SELECT creatorID FROM creators '
+ 'WHERE firstName=? AND lastName=?'; + 'WHERE firstName=? AND lastName=? AND isInstitution=?';
var params = [{string: firstName}, {string: lastName}]; var params = [{string: firstName}, {string: lastName}, isInstitution];
var creatorID = Scholar.DB.valueQuery(sql, params); var creatorID = Scholar.DB.valueQuery(sql, params);
if (creatorID){ if (creatorID){
@ -2725,14 +2745,17 @@ Scholar.Creators = new function(){
* *
* Returns new creatorID * Returns new creatorID
*/ */
function add(firstName, lastName){ function add(firstName, lastName, isInstitution){
Scholar.debug('Adding new creator', 4); Scholar.debug('Adding new creator', 4);
Scholar.DB.beginTransaction(); Scholar.DB.beginTransaction();
var sql = 'INSERT INTO creators VALUES (?,?,?)'; var sql = 'INSERT INTO creators VALUES (?,?,?,?)';
var rnd = Scholar.getRandomID('creators', 'creatorID'); var rnd = Scholar.getRandomID('creators', 'creatorID');
var params = [{int: rnd}, {string: firstName}, {string: lastName}]; var params = [
rnd, isInstitution ? '' : {string: firstName}, {string: lastName},
isInstitution ? 1 : 0
];
Scholar.DB.query(sql, params); Scholar.DB.query(sql, params);
Scholar.DB.commitTransaction(); Scholar.DB.commitTransaction();
@ -2774,7 +2797,8 @@ Scholar.Creators = new function(){
if (!creator){ if (!creator){
return false; return false;
} }
return creator['firstName'] + '%%%' + creator['lastName']; return creator['firstName'] + '%%%' + creator['lastName'] + '%%%' +
creator['isInstitution'];
} }
} }

View File

@ -391,7 +391,7 @@ Scholar.Schema = new function(){
// //
// Change this value to match the schema version // Change this value to match the schema version
// //
var toVersion = 36; var toVersion = 37;
if (toVersion != _getSchemaSQLVersion()){ if (toVersion != _getSchemaSQLVersion()){
throw('Schema version does not match version in _migrateSchema()'); throw('Schema version does not match version in _migrateSchema()');
@ -415,7 +415,7 @@ Scholar.Schema = new function(){
} }
} }
if (i==36){ if (i==37){
_initializeSchema(); _initializeSchema();
} }
} }

View File

@ -1,4 +1,4 @@
-- 36 -- 37
DROP TABLE IF EXISTS version; DROP TABLE IF EXISTS version;
CREATE TABLE version ( CREATE TABLE version (
@ -162,6 +162,7 @@
creatorID INT, creatorID INT,
firstName TEXT, firstName TEXT,
lastName TEXT, lastName TEXT,
isInstitution INT,
PRIMARY KEY (creatorID) PRIMARY KEY (creatorID)
); );
@ -685,21 +686,21 @@
INSERT INTO "creatorTypes" VALUES(3, "editor"); INSERT INTO "creatorTypes" VALUES(3, "editor");
INSERT INTO "creatorTypes" VALUES(4, "translator"); INSERT INTO "creatorTypes" VALUES(4, "translator");
INSERT INTO "creators" VALUES(1, 'Susan B.', 'Barnes'); INSERT INTO "creators" VALUES(1, 'Susan B.', 'Barnes', NULL);
INSERT INTO "creators" VALUES(2, 'J.S.', 'Bassard'); INSERT INTO "creators" VALUES(2, 'J.S.', 'Bassard', NULL);
INSERT INTO "creators" VALUES(3, 'Mary', 'Chayko'); INSERT INTO "creators" VALUES(3, 'Mary', 'Chayko', NULL);
INSERT INTO "creators" VALUES(4, 'Michael', 'Civin'); INSERT INTO "creators" VALUES(4, 'Michael', 'Civin', NULL);
INSERT INTO "creators" VALUES(5, 'Paul', 'DiMaggio'); INSERT INTO "creators" VALUES(5, 'Paul', 'DiMaggio', NULL);
INSERT INTO "creators" VALUES(6, 'Leon', 'Festinger'); INSERT INTO "creators" VALUES(6, 'Leon', 'Festinger', NULL);
INSERT INTO "creators" VALUES(7, 'Stanley', 'Schachter'); INSERT INTO "creators" VALUES(7, 'Stanley', 'Schachter', NULL);
INSERT INTO "creators" VALUES(8, 'Kurt', 'Back'); INSERT INTO "creators" VALUES(8, 'Kurt', 'Back', NULL);
INSERT INTO "creators" VALUES(9, 'Steven G.', 'Jones'); INSERT INTO "creators" VALUES(9, 'Steven G.', 'Jones', NULL);
INSERT INTO "creators" VALUES(10, 'J.C.R.', 'Licklider'); INSERT INTO "creators" VALUES(10, 'J.C.R.', 'Licklider', NULL);
INSERT INTO "creators" VALUES(11, 'Robert W.', 'Taylor'); INSERT INTO "creators" VALUES(11, 'Robert W.', 'Taylor', NULL);
INSERT INTO "creators" VALUES(12, 'Yuliang', 'Lui'); INSERT INTO "creators" VALUES(12, 'Yuliang', 'Lui', NULL);
INSERT INTO "creators" VALUES(13, 'Sherry', 'Turkle'); INSERT INTO "creators" VALUES(13, 'Sherry', 'Turkle', NULL);
INSERT INTO "creators" VALUES(14, 'J.', 'Vallee'); INSERT INTO "creators" VALUES(14, 'J.', 'Vallee', NULL);
INSERT INTO "creators" VALUES(15, 'Barry', 'Wellman'); INSERT INTO "creators" VALUES(15, 'Barry', 'Wellman', NULL);
INSERT INTO "itemCreators" VALUES(1, 1, 1, 0); INSERT INTO "itemCreators" VALUES(1, 1, 1, 0);
INSERT INTO "itemCreators" VALUES(2, 1, 1, 0); INSERT INTO "itemCreators" VALUES(2, 1, 1, 0);