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))
This commit is contained in:
parent
74dbdec49b
commit
cd26267afe
7 changed files with 50 additions and 50 deletions
|
@ -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
|
||||
|
|
|
@ -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'];
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -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") {
|
||||
|
|
|
@ -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');
|
||||
|
|
|
@ -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 "
|
||||
|
|
14
scrapers.sql
14
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
|
||||
|
|
|
@ -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)
|
||||
);
|
||||
|
||||
|
|
Loading…
Reference in a new issue