www

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs | Submodules | README | LICENSE

commit e2c9ee03877c1ec53779e8ef457a7d4e5440a8a0
parent d01ff389d42fd61d6733cc4e838bddd3ef3937b3
Author: Dan Stillman <dstillman@zotero.org>
Date:   Sat,  3 Jun 2006 20:41:23 +0000

- Collection.rename(name) -- renames collection in DB

- Collection.add( name [, parentCollectionID] ) -- saves new collection in DB and returns new Collection object; defaults to root if parent not provided

	Currently some exceptions in folderTreeView.js when notified on collection add

- Added back Item.isCollection() and Collection.isCollection(), as they seem to still be used

- Collection._load() now takes optional ids for loading new collections


Diffstat:
Mchrome/chromeFiles/content/scholar/xpcom/data_access.js | 101+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++----------------
1 file changed, 81 insertions(+), 20 deletions(-)

diff --git a/chrome/chromeFiles/content/scholar/xpcom/data_access.js b/chrome/chromeFiles/content/scholar/xpcom/data_access.js @@ -687,6 +687,11 @@ Scholar.Item.prototype.erase = function(){ } +Scholar.Item.prototype.isCollection = function(){ + return false; +} + + Scholar.Item.prototype.toString = function(){ return this.getTitle(); } @@ -1002,7 +1007,7 @@ Scholar.Collection.prototype.getName = function(){ } /** -* Returns the parent collection +* Returns collectionID of the parent collection **/ Scholar.Collection.prototype.getParent = function(){ return this._parent; @@ -1021,6 +1026,28 @@ Scholar.Collection.prototype.hasChildItems = function(){ return !!(parseInt(this._hasChildItems)); } +/** +* Rename the collection +* +* Returns true on success, or false on error +**/ +Scholar.Collection.prototype.rename = function(name){ + if (!name){ + return false; + } + + var sql = "UPDATE collections SET collectionName=? " + + "WHERE collectionID=?"; + Scholar.DB.query(sql, [{'string':name},{'int':this.getID()}]); + this._name = name; + + Scholar.Notifier.trigger('modify', 'collection', this.getID()); + return true; +} + +/** +* Add an item to the collection +**/ Scholar.Collection.prototype.addItem = function(itemID){ Scholar.DB.beginTransaction(); @@ -1045,6 +1072,9 @@ Scholar.Collection.prototype.addItem = function(itemID){ } +/** +* Remove an item from the collection (does not delete item from library) +**/ Scholar.Collection.prototype.removeItem = function(itemID){ Scholar.DB.beginTransaction(); @@ -1081,6 +1111,9 @@ Scholar.Collection.prototype.removeItem = function(itemID){ } +/** +* Check if an item belongs to the collection +**/ Scholar.Collection.prototype.hasItem = function(itemID){ if (!this._childItemsLoaded){ this._loadChildItems(); @@ -1089,10 +1122,8 @@ Scholar.Collection.prototype.hasItem = function(itemID){ } - - /** -* Deletes a collection and all descendent collections and items +* Deletes collection and all descendent collections and items **/ Scholar.Collection.prototype.erase = function(deleteItems){ Scholar.DB.beginTransaction(); @@ -1134,6 +1165,11 @@ Scholar.Collection.prototype.erase = function(deleteItems){ } +Scholar.Collection.prototype.isCollection = function(){ + return true; +} + + Scholar.Collection.prototype._loadChildItems = function(){ this._childItems = new Scholar.Hash(); @@ -1197,6 +1233,7 @@ Scholar.Collections = new function(){ var _collectionsLoaded = false; this.get = get; + this.add = add; this.reloadAll = reloadAll; this.unload = unload; @@ -1211,6 +1248,35 @@ Scholar.Collections = new function(){ } + function add(name, parent){ + if (!name){ + return false; + } + + Scholar.DB.beginTransaction(); + + if (parent && !this.get(parent)){ + Scholar.DB.rollbackTransaction(); + throw('Cannot add collection to invalid parent ' + parent); + } + + var parentParam = parent ? {'int':parent} : {'null':true}; + + var rnd = Scholar.getRandomID('collections', 'collectionID'); + + var sql = "INSERT INTO collections VALUES (?,?,?)"; + var sqlValues = [ {'int':rnd}, {'string':name}, parentParam ]; + Scholar.DB.query(sql, sqlValues); + + Scholar.DB.commitTransaction(); + + _load(rnd); + Scholar.Notifier.trigger('add', 'collection', rnd); + + return this.get(rnd); + } + + /** * Clears internal cache and reloads collection data from DB **/ @@ -1247,10 +1313,15 @@ Scholar.Collections = new function(){ + "collectionID=C.collectionID)!=0 AS hasChildItems " + "FROM collections C"; + var ids = Scholar.flattenArguments(arguments) + if (ids.length){ + sql += " WHERE collectionID IN (" + ids.join() + ")"; + } + var result = Scholar.DB.query(sql); if (!result){ - throw ('No collections exist'); + throw ('No collections found'); } for (var i=0; i<result.length; i++){ @@ -1336,30 +1407,20 @@ Scholar.Creators = new function(){ function add(firstName, lastName){ Scholar.debug('Adding new creator', 4); + Scholar.DB.beginTransaction(); + var sql = 'INSERT INTO creators ' + 'VALUES (?,?,?)'; - // Use a random integer for the creatorID - var tries = 10; // # of tries to find a unique id - var max = 65535; - do { - // If no luck after 10 tries, try a larger range - if (!tries){ - tries = 10; - max = max * 10; - } - var rnd = Math.floor(Math.random()*max); - var sql2 = 'SELECT COUNT(*) FROM creators WHERE creatorID=' + rnd; - var exists = Scholar.DB.valueQuery(sql2); - tries--; - } - while (exists); + var rnd = Scholar.getRandomID('creators', 'creatorID'); var params = [ {'int': rnd}, {'string': firstName}, {'string': lastName} ]; Scholar.DB.query(sql, params); + + Scholar.DB.commitTransaction(); return rnd; }