commit cd26267afeaa8b06987bca93e8de03349ad1bd5b
parent 74dbdec49bb33ce4cd50fad81d792cff1f99df19
Author: Dan Stillman <dstillman@zotero.org>
Date: Thu, 5 Oct 2006 00:59:26 +0000
Closes #340, Change isInstitution to fieldMode everywhere
Including in the DB, which it turns out isn't really all that bad (thanks, among other things, to SQLite's ability to DROP tables within transactions without autocommitting (which MySQL can't do))
Diffstat:
7 files changed, 50 insertions(+), 50 deletions(-)
diff --git a/chrome/content/zotero/itemPane.js b/chrome/content/zotero/itemPane.js
@@ -247,7 +247,7 @@ var ZoteroItemPane = new function()
for(var i = 0, len=_itemBeingEdited.numCreators(); i<len; i++)
{
var creator = _itemBeingEdited.getCreator(i);
- addCreatorRow(creator['firstName'], creator['lastName'], creator['creatorTypeID'], creator['isInstitution']);
+ addCreatorRow(creator['firstName'], creator['lastName'], creator['creatorTypeID'], creator['fieldMode']);
}
}
else
@@ -1108,7 +1108,7 @@ var ZoteroItemPane = new function()
var firstName = creator['firstName'];
var lastName = creator['lastName'];
var typeID = creator['creatorTypeID'];
- var singleField = creator['isInstitution'];
+ var singleField = creator['singleField'];
}
// Don't save empty creators
diff --git a/chrome/content/zotero/xpcom/data_access.js b/chrome/content/zotero/xpcom/data_access.js
@@ -255,12 +255,12 @@ Zotero.Item.prototype.getCreators = function(){
/*
* Set or update the creator at the specified position
*/
-Zotero.Item.prototype.setCreator = function(orderIndex, firstName, lastName, creatorTypeID, isInstitution){
+Zotero.Item.prototype.setCreator = function(orderIndex, firstName, lastName, creatorTypeID, fieldMode){
if (this.getID() && !this._creatorsLoaded){
this._loadCreators();
}
- if (isInstitution || !firstName){
+ if (fieldMode==1 || !firstName){
firstName = '';
}
@@ -268,14 +268,12 @@ Zotero.Item.prototype.setCreator = function(orderIndex, firstName, lastName, cre
lastName = '';
}
- isInstitution = !!isInstitution;
-
// If creator at this position hasn't changed, cancel
if (this._creators.has(orderIndex) &&
this._creators.get(orderIndex)['firstName']==firstName &&
this._creators.get(orderIndex)['lastName']==lastName &&
this._creators.get(orderIndex)['creatorTypeID']==creatorTypeID &&
- this._creators.get(orderIndex)['isInstitution']==isInstitution){
+ this._creators.get(orderIndex)['fieldMode']==fieldMode){
return false;
}
@@ -287,7 +285,7 @@ Zotero.Item.prototype.setCreator = function(orderIndex, firstName, lastName, cre
creator['firstName'] = firstName;
creator['lastName'] = lastName;
creator['creatorTypeID'] = creatorTypeID;
- creator['isInstitution'] = isInstitution;
+ creator['fieldMode'] = fieldMode;
this._creators.set(orderIndex, creator);
this._changedCreators.set(orderIndex);
@@ -320,8 +318,8 @@ Zotero.Item.prototype.removeCreator = function(orderIndex){
// Currently unused
-Zotero.Item.prototype.creatorExists = function(firstName, lastName, creatorTypeID, isInstitution, skipIndex){
- if (isInstitution || !firstName){
+Zotero.Item.prototype.creatorExists = function(firstName, lastName, creatorTypeID, fieldMode, skipIndex){
+ if (fieldMode==1 || !firstName){
firstName = '';
}
@@ -329,8 +327,6 @@ Zotero.Item.prototype.creatorExists = function(firstName, lastName, creatorTypeI
lastName = '';
}
- isInstitution = !!isInstitution;
-
for (var j=0, len=this.numCreators(); j<len; j++){
if (typeof skipIndex!='undefined' && skipIndex==j){
continue;
@@ -341,7 +337,7 @@ Zotero.Item.prototype.creatorExists = function(firstName, lastName, creatorTypeI
if (firstName==creator2['firstName'] &&
lastName==creator2['lastName'] &&
creatorTypeID==creator2['creatorTypeID'] &&
- isInstitution==creator2['isInstitution']){
+ fieldMode==creator2['fieldMode']){
return true;
}
}
@@ -513,7 +509,7 @@ Zotero.Item.prototype.save = function(){
var creatorID = Zotero.Creators.getID(
creator['firstName'],
creator['lastName'],
- creator['isInstitution']
+ creator['fieldMode']
);
// If not, add it
@@ -521,17 +517,11 @@ Zotero.Item.prototype.save = function(){
creatorID = Zotero.Creators.add(
creator['firstName'],
creator['lastName'],
- creator['isInstitution']
+ creator['fieldMode']
);
Zotero.History.add('creators', 'creatorID', creatorID);
}
-
- sql2 = 'SELECT COUNT(*) FROM itemCreators'
- + ' WHERE itemID=' + this.getID()
- + ' AND creatorID=' + creatorID
- + ' AND creatorTypeID=' + creator['creatorTypeID'];
-
sql = "INSERT INTO itemCreators VALUES (?,?,?,?)";
sqlValues = [
@@ -786,7 +776,7 @@ Zotero.Item.prototype.save = function(){
var creatorID = Zotero.Creators.getID(
creator['firstName'],
creator['lastName'],
- creator['isInstitution']
+ creator['fieldMode']
);
// If not, add it
@@ -794,7 +784,7 @@ Zotero.Item.prototype.save = function(){
creatorID = Zotero.Creators.add(
creator['firstName'],
creator['lastName'],
- creator['isInstitution']
+ creator['fieldMode']
);
Zotero.History.add('creators', 'creatorID', creatorID);
}
@@ -1622,7 +1612,7 @@ Zotero.Item.prototype.toArray = function(){
arr['creators'][i] = [];
arr['creators'][i]['firstName'] = creators[i]['firstName'];
arr['creators'][i]['lastName'] = creators[i]['lastName'];
- arr['creators'][i]['isInstitution'] = creators[i]['isInstitution'];
+ arr['creators'][i]['fieldMode'] = creators[i]['fieldMode'];
// Convert creatorTypeIDs to text
arr['creators'][i]['creatorType'] =
Zotero.CreatorTypes.getName(creators[i]['creatorTypeID']);
@@ -1706,7 +1696,7 @@ Zotero.Item.prototype._loadCreators = function(){
var creator = new Array();
creator['firstName'] = creators[i]['firstName'];
creator['lastName'] = creators[i]['lastName'];
- creator['isInstitution'] = creators[i]['isInstitution'];
+ creator['fieldMode'] = creators[i]['fieldMode'];
creator['creatorTypeID'] = creators[i]['creatorTypeID'];
// Save creator data into Hash, indexed by orderIndex
this._creators.set(creators[i]['orderIndex'], creator);
@@ -2557,7 +2547,7 @@ Zotero.Collections = new function(){
* Same structure as Zotero.Tags -- make changes in both places if possible
*/
Zotero.Creators = new function(){
- var _creators = new Array; // indexed by first%%%last%%%isInstitution hash
+ var _creators = new Array; // indexed by first%%%last%%%fieldMode hash
var _creatorsByID = new Array; // indexed by creatorID
this.get = get;
@@ -2590,7 +2580,7 @@ Zotero.Creators = new function(){
/*
* Returns the creatorID matching given name and type
*/
- function getID(firstName, lastName, isInstitution){
+ function getID(firstName, lastName, fieldMode){
if (!firstName){
firstName = '';
}
@@ -2598,23 +2588,24 @@ Zotero.Creators = new function(){
lastName = '';
}
- if (isInstitution){
+ // Only two modes for now
+ if (fieldMode){
firstName = '';
- isInstitution = 1;
+ fieldMode = 1;
}
else {
- isInstitution = 0;
+ fieldMode = 0;
}
- var hash = firstName + '%%%' + lastName + '%%%' + isInstitution;
+ var hash = firstName + '%%%' + lastName + '%%%' + fieldMode;
if (_creators[hash]){
return _creators[hash];
}
var sql = 'SELECT creatorID FROM creators '
- + 'WHERE firstName=? AND lastName=? AND isInstitution=?';
- var params = [{string: firstName}, {string: lastName}, isInstitution];
+ + 'WHERE firstName=? AND lastName=? AND fieldMode=?';
+ var params = [{string: firstName}, {string: lastName}, fieldMode];
var creatorID = Zotero.DB.valueQuery(sql, params);
if (creatorID){
@@ -2630,7 +2621,7 @@ Zotero.Creators = new function(){
*
* Returns new creatorID
*/
- function add(firstName, lastName, isInstitution){
+ function add(firstName, lastName, fieldMode){
Zotero.debug('Adding new creator', 4);
Zotero.DB.beginTransaction();
@@ -2638,8 +2629,8 @@ Zotero.Creators = new function(){
var sql = 'INSERT INTO creators VALUES (?,?,?,?)';
var rnd = Zotero.getRandomID('creators', 'creatorID');
var params = [
- rnd, isInstitution ? '' : {string: firstName}, {string: lastName},
- isInstitution ? 1 : 0
+ rnd, fieldMode ? '' : {string: firstName}, {string: lastName},
+ fieldMode ? 1 : 0
];
Zotero.DB.query(sql, params);
@@ -2683,7 +2674,7 @@ Zotero.Creators = new function(){
return false;
}
return creator['firstName'] + '%%%' + creator['lastName'] + '%%%' +
- creator['isInstitution'];
+ creator['fieldMode'];
}
}
diff --git a/chrome/content/zotero/xpcom/ingester.js b/chrome/content/zotero/xpcom/ingester.js
@@ -471,7 +471,7 @@ Zotero.OpenURL = new function() {
} else if(key == "rft.au") {
item.creators.push(Zotero.Utilities.prototype.cleanAuthor(value, "author", true));
} else if(key == "rft.aucorp") {
- item.creators.push({lastName:value, isInstitution:true});
+ item.creators.push({lastName:value, fieldMode:true});
} else if(key == "rft.isbn" && !item.ISBN) {
item.ISBN = value;
} else if(key == "rft.pub") {
diff --git a/chrome/content/zotero/xpcom/schema.js b/chrome/content/zotero/xpcom/schema.js
@@ -525,6 +525,15 @@ Zotero.Schema = new function(){
Zotero.DB.query("UPDATE itemAttachments SET path=NULL WHERE linkMode=3");
try { Zotero.DB.query("DELETE FROM fulltextItems WHERE itemID IS NULL"); } catch(e){}
}
+
+ if (i==6){
+ Zotero.DB.query("CREATE TABLE creatorsTemp (creatorID INT, firstName INT, lastName INT, fieldMode INT)");
+ Zotero.DB.query("INSERT INTO creatorsTemp SELECT * FROM creators");
+ Zotero.DB.query("DROP TABLE creators");
+ Zotero.DB.query("CREATE TABLE creators (\n creatorID INT,\n firstName INT,\n lastName INT,\n fieldMode INT,\n PRIMARY KEY (creatorID)\n);");
+ Zotero.DB.query("INSERT INTO creators SELECT * FROM creatorsTemp");
+ Zotero.DB.query("DROP TABLE creatorsTemp");
+ }
}
_updateSchema('userdata');
diff --git a/components/chnmIZoteroAutoComplete.js b/components/chnmIZoteroAutoComplete.js
@@ -150,9 +150,9 @@ ZoteroAutoComplete.prototype.startSearch = function(searchString, searchParam,
if (fieldMode==2)
{
- var sql = "SELECT DISTINCT CASE isInstitution WHEN 1 THEN lastName "
+ var sql = "SELECT DISTINCT CASE fieldMode WHEN 1 THEN lastName "
+ "WHEN 0 THEN firstName || ' ' || lastName END AS name "
- + "FROM creators WHERE CASE isInstitution "
+ + "FROM creators WHERE CASE fieldMode "
+ "WHEN 1 THEN lastName "
+ "WHEN 0 THEN firstName || ' ' || lastName END "
+ "LIKE ? ORDER BY name";
@@ -181,7 +181,7 @@ ZoteroAutoComplete.prototype.startSearch = function(searchString, searchParam,
}
var fromSQL = " FROM creators WHERE " + searchParts[2]
- + " LIKE ?1 " + "AND isInstitution=?2";
+ + " LIKE ?1 " + "AND fieldMode=?2";
var sqlParams = [searchString + '%', parseInt(fieldMode)];
if (itemID){
fromSQL += " AND creatorID NOT IN (SELECT creatorID FROM "
diff --git a/scrapers.sql b/scrapers.sql
@@ -1,4 +1,4 @@
--- 97
+-- 98
DROP TABLE IF EXISTS translators;
CREATE TABLE translators (
@@ -229,7 +229,7 @@ REPLACE INTO "translators" VALUES ('838d8849-4ffb-9f44-3d0d-aa8a0a079afe', '2006
for(var j=1; j<authors.length; j+=2) {
if(authors[j-1].substring(0, 1) != ''('' && !yearRegexp.test(authors[j])) {
// ignore places where there are parentheses
- newItem.creators.push({lastName:authors[j], creatorType:"author", isInstitution:true});
+ newItem.creators.push({lastName:authors[j], creatorType:"author", fieldMode:true});
}
}
} else {
@@ -1073,7 +1073,7 @@ REPLACE INTO "translators" VALUES ('add7c71c-21f3-ee14-d188-caf9da12728b', '2006
} else if(field == "added author") {
newItem.creators.push(Zotero.Utilities.cleanAuthor(value, "contributor", true));
} else if(field == "corporate author") {
- newItem.creators.push({lastName:author, isInstitution:true});
+ newItem.creators.push({lastName:author, fieldMode:true});
} else if(field == "subject term" || field == "corporate subject" || field == "geographic term") {
var subjects = value.split("--");
newItem.tags = newItem.tags.concat(subjects);
@@ -3516,7 +3516,7 @@ function scrape(doc, url) {
author = words.join(" ");
if(words[0] == "The") {
- newItem.creators.push({lastName:author, creatorType:"author", isInstitution:true});
+ newItem.creators.push({lastName:author, creatorType:"author", fieldMode:true});
} else {
newItem.creators.push(Zotero.Utilities.cleanAuthor(author, "author"));
}
@@ -3640,7 +3640,7 @@ function scrape(doc) {
author = words.join(" ");
if(words[0] == "The") {
- newItem.creators.push({lastName:author, creatorType:"author", isInstitution:true});
+ newItem.creators.push({lastName:author, creatorType:"author", fieldMode:true});
} else {
newItem.creators.push(Zotero.Utilities.cleanAuthor(author, "author"));
}
@@ -6261,7 +6261,7 @@ function processTag(item, tag, value) {
item.creators.push(Zotero.Utilities.cleanAuthor(value, type));
}
} else if(tag == "Q") {
- item.creators.push({creatorType:"author", lastName:value, isInstitution:true});
+ item.creators.push({creatorType:"author", lastName:value, fieldMode:true});
} else if(tag == "H" || tag == "O") {
item.extra += "\n"+value;
} else if(tag == "Z") {
@@ -6893,7 +6893,7 @@ function pullISBN(text) {
// corporate author extraction
function corpAuthor(author) {
- return {lastName:author, isInstitution:true};
+ return {lastName:author, fieldMode:true};
}
// regular author extraction
diff --git a/userdata.sql b/userdata.sql
@@ -1,4 +1,4 @@
--- 5
+-- 6
-- This file creates tables containing user-specific data -- any changes
-- to existing tables made here must be mirrored in transition steps in
@@ -131,7 +131,7 @@ CREATE TABLE IF NOT EXISTS creators (
creatorID INT,
firstName TEXT,
lastName TEXT,
- isInstitution INT,
+ fieldMode INT,
PRIMARY KEY (creatorID)
);