[Koha-cvs] koha/C4 Shelf.pm [rel_3_0]

Antoine Farnault antoine at koha-fr.org
Wed Aug 30 11:51:41 CEST 2006


CVSROOT:	/sources/koha
Module name:	koha
Branch:		rel_3_0
Changes by:	Antoine Farnault <toins>	06/08/30 09:51:41

Removed files:
	C4             : Shelf.pm 

Log message:
	This package is unused.

CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/koha/C4/Shelf.pm?cvsroot=koha&only_with_tag=rel_3_0&r1=1.4&r2=0

Patches:
Index: Shelf.pm
===================================================================
RCS file: Shelf.pm
diff -N Shelf.pm
--- Shelf.pm	15 Dec 2003 13:41:43 -0000	1.4
+++ /dev/null	1 Jan 1970 00:00:00 -0000
@@ -1,476 +0,0 @@
-package Shelf;
-
-=head1 NAME
-
-Shelf - Perl extension for Virtual Bookshelves
-
-=cut
-
-use strict;
-use C4::Context;
-use Cache::FileCache;
-
-=head1 VERSION
-
-  $Id: Shelf.pm,v 1.4 2003/12/15 13:41:43 slef Exp $
-
-=cut
-
-=head1 DESCRIPTION
-
-Module for querying and stocking Virtual Bookshelves
-
-   1. can contain a list of items, a list of biblioitems, or a list of biblios
-   2. can have an arbitrary name, and will have a unique numerical identifier
-   3. will have arbitrary metadata (properties) associated with it
-	  * Sharing information (private, only visible by the owner of the
-	    shelf; shared with a group of patrons; public, viewable by anybody)
-	  * Special circulation rules - Do not return to home branch, do not
-	    circulate, reduced loan time (ie 3 day loan)
-	  * Search query term - if the shelf is the result of a query, the
-	    query itself can be stored with the list of books that resulted
-          * Creation date - useful for 'retiring' a stale cached query result
-          * Access information - who has "write" or "read" access to the shelf.
-	  * Searchable - If a patron can perform a search query on the contents
-	    of this shelf
-
-
-Patrons typically will only use "biblioitem" bookshelves, and will not need to
-be presented with the differences between biblioitem and item bookshelves.
-
-
-Some uses for VirtualBookshelves
-
-   1. Cache search results for faster response on popular searches
-   2. Name search results so that patrons can pull up saved searches
-   3. Creation of sub-collections within a library or branch
-   4. replacing "itemtypes" field... this would allow an individual item to be
-	a member of more than one itemtype
-   5. store a patron's reading record (if he chooses to store such data)
-   6. store a patron's "To be read" list
-   7. A teacher of a course could add a list of books to a shelf for his course
-	and ask that those items be marked non-circulating so students always
-	have access to them at the library.
-	  * The teacher creates the list of materials that she wants to be
-	    non-circulating (or reduced to 3-day loan) and marks them as such
-	  * A librarian receives a notice that a shelf requires her attention.
-	    He can pull up a list of the contents of the shelf, the owner of
-	    the shelf, and the reason the owner is requesting this change in
-	    circulation rules. The librarian can approve or deny the request.
-	  * Optionally, create an access flag that grants teachers the right to
-	    put items on modified circulation shelves without librarian
-	    intervention.
-
-
-=cut
-
-=head1 METHODS
-
-=head2 C<new()>
-
-Base constructor for the class.
-
-  my $shelf=Shelf->new(56);
-      will load bookshelf 56.
-  my $shelf=Shelf->new(-name => 'Fiction');
-  my $shelf=Shelf->new('Fiction');
-      will load the internal 'Fiction' shelf
-  my $shelf=Shelf->new('Favourite Books', 'sjohnson');
-  my $shelf=Shelf->new(-name => 'Favourite Books', -owner => 'sjohnson');
-      will load sjohnson's "Favourite Books" bookshelf
-  
-  Any of the last four invocations will create a new shelf with the name and
-  owner given if one doesn't already exist.
-
-
-=cut
-
-sub new {
-    my $self = {};
-    $self->{ID}	= undef;
-    $self->{NAME}=undef;
-    $self->{OWNDER}=undef;
-    $self->{BIBLIOCONTENTS}={};
-    $self->{BIBLIOITEMCONTENTS}={};
-    $self->{ITEMCONTENTS}={};
-    $self->{ATTRIBUTES}={};
-    $self->{CACHE}=new Cache::FileCache( { 'namespace' => 'KohaShelves' } );
-
-    if (@_) {
-	my $dbh=C4::Context->dbh();
-	shift;
-	if ($#_ == 0) {
-	    $self->{ID}=shift;
-	    # load attributes of shelf #ID
-	    my $sth;
-	    $sth=$dbh->prepare("select bookshelfname,bookshelfowner from bookshelves where bookshelfid=?");
-	    $sth->execute($self->{ID});
-	    ($self->{NAME},$self->{OWNER}) = $sth->fetchrow;
-	    $sth=$dbh->prepare("select attribute,value from bookshelfattributes where bookshelfid=?");
-	    $sth->execute($self->{ID});
-	    while (my ($attribute,$value) = $sth->fetchrow) {
-		$self->{ATTRIBUTES}->{$attribute}=$value;
-	    }
-	} elsif ($#_) {
-	    my ($name,$owner,$attributes);
-	    if ($_[0] =~/^-/) {
-		my %params=@_;
-		$name=$params{name};
-		$owner=$params{owner};
-		$attributes=$params{attributes};
-	    } else {
-		$name=shift;
-		$owner=shift;
-		$attributes=shift;
-	    }
-	    my $sth=$dbh->prepare("select bookshelfid from bookshelves where bookshelfname=? and bookshelfowner=?");
-	    $sth->execute($name, $owner);
-	    if ($sth->rows) {
-		($self->{ID})=$sth->fetchrow;
-		$sth=$dbh->prepare("select attribute,value from bookshelfattributes where bookshelfid=?");
-		$sth->execute($self->{ID});
-		while (my ($attribute,$value) = $sth->fetchrow) {
-		    $self->{ATTRIBUTES}->{$attribute}=$value;
-		}
-	    } else {
-		$sth=$dbh->prepare("insert into bookshelves (bookshelfname, bookshelfowner) values (?, ?)");
-		$sth->execute($name,$owner);
-		$sth=$dbh->prepare("select bookshelfid from bookshelves where bookshelfname=? and bookshelfowner=?");
-		$sth->execute($name,$owner);
-		($self->{ID})=$sth->fetchrow();
-		foreach my $attribute (keys %$attributes) {
-		    my $value=$attributes->{$attribute};
-		    $self->attribute($attribute,$value);
-		}
-	    }
-	}
-    }
-    bless($self);
-    return $self;
-}
-
-
-=head2 C<itemcontents()>
-
-retrieve a slice of itemnumbers from a shelf.
-
-    my $arrayref = $shelf->itemcontents(-orderby=>'title', 
-    					-startat=>50,
-					-number=>10	);
-
-=cut
-
-sub itemcontents {
-    my $self=shift;
-    my ($orderby,$startat,$number);
-    if ($_[0]=~/^\-/) {
-	my %params=@_;
-	$orderby=$params{'-orderby'};
-	$startat=$params{'-startat'};
-	$number=$params{'-number'};
-    } else {
-	($orderby,$startat,$number)=@_;
-    }
-    $number--;
-    unless ($self->{ITEMCONTENTS}->{orderby}->{$orderby}) {
-	$self->loadcontents(-orderby=>$orderby, -startat=>$startat, -number=>$number);
-    }
-    my $endat=$startat+$number;
-    my @return;
-    foreach (@{$self->{ITEMCONTENTS}->{orderby}->{$orderby}}[$startat..$endat]) {
-	push @return,$_;
-    }
-    return \@return;
-}
-
-=head2 C<biblioitemcontents()>
-
-retrieve a slice of biblioitemnumbers from a shelf.
-
-    my $arrayref = $shelf->biblioitemcontents(-orderby=>'title', 
-    					      -startat=>50,
-					      -number=>10	);
-
-=cut
-
-sub biblioitemcontents {
-    my $self=shift;
-    my ($orderby,$startat,$number);
-    if ($_[0]=~/^\-/) {
-	my %params=@_;
-	$orderby=$params{'-orderby'};
-	$startat=$params{'-startat'};
-	$number=$params{'-number'};
-    } else {
-	($orderby,$startat,$number)=@_;
-    }
-    unless ($self->{BIBLIOITEMCONTENTS}->{orderby}->{$orderby}) {
-	$self->loadcontents(-orderby=>$orderby, -startat=>$startat, -number=>$number);
-    }
-    my $endat=$startat+$number;
-    my @return;
-    foreach (@{$self->{BIBLIOITEMCONTENTS}->{orderby}->{$orderby}}[$startat..$endat]) {
-	push @return,$_;
-    }
-    return \@return;
-}
-
-=head2 C<biblioitemcontents()>
-
-retrieve a slice of biblionumbers from a shelf.
-
-    my $arrayref = $shelf->bibliocontents(-orderby=>'title', 
-    					  -startat=>50,
-					  -number=>10	);
-
-=cut
-
-sub bibliocontents {
-    my $self=shift;
-    my ($orderby,$startat,$number);
-    if ($_[0]=~/^\-/) {
-	my %params=@_;
-	$orderby=$params{'-orderby'};
-	$startat=$params{'-startat'};
-	$number=$params{'-number'};
-    } else {
-	($orderby,$startat,$number)=@_;
-    }
-    unless ($self->{BIBLIOCONTENTS}->{orderby}->{$orderby}) {
-	$self->loadcontents(-orderby=>$orderby, -startat=>$startat, -number=>$number);
-    }
-    my $endat=$startat+$number;
-    my @return;
-    foreach (@{$self->{BIBLIOCONTENTS}->{orderby}->{$orderby}}[$startat..$endat]) {
-	push @return,$_;
-    }
-    return \@return;
-}
-
-
-=head2 C<itemcounter()>
-
-returns the number of items on the shelf
-
-    my $itemcount=$shelf->itemcounter();
-
-=cut
-sub itemcounter {
-    my $self=shift;
-    unless ($self->{ITEMCONTENTS}->{orderby}->{'natural'}) {
-	$self->loadcontents();
-    }
-    my @temparray=@{$self->{ITEMCONTENTS}->{orderby}->{'natural'}};
-    return $#temparray+1;
-}
-
-sub shelfcontents {
-    my $self=shift;
-}
-
-
-=head2 C<clearcontents()>
-
-Removes all contents from the shelf.
-
-    $shelf->clearcontents();
-
-=cut
-
-sub clearcontents {
-    my $self=shift;
-    my $dbh=C4::Context->dbh();
-    my $sth=$dbh->prepare("delete from bookshelfcontents where bookshelfid=?");
-    $sth->execute($self->{ID});
-    foreach my $level ('ITEM', 'BIBLIOITEM', 'BIBLIO') {
-	delete $self->{$level."CONTENTS"};
-	$self->{$level."CONTENTS"}={};
-    }
-    $self->clearcache();
-
-}
-
-
-
-=head2 C<addtoshelf()>
-
-adds an array of items to a shelf.  If any modifications are actually made to
-the shelf then the per process caches and the FileCache for that shelf are
-cleared.
-
-  $shelf->addtoshelf(-add => [[ 45, 54, 67], [69, 87, 143]]);
-
-=cut
-
-sub addtoshelf {
-    my $self=shift;
-    my $add;
-    if ($_[0]=~/^\-/) {
-	my %params=@_;
-	$add=$params{'-add'};
-    } else {
-	($add)=@_;
-    }
-    my $dbh=C4::Context->dbh();
-    my $sth;
-    my $bookshelfid=$self->{ID};
-    my $clearcache=0;
-    foreach (@$add) {
-	my ($biblionumber,$biblioitemnumber,$itemnumber) = @$_;
-	$sth=$dbh->prepare("select count(*) from bookshelfcontents where bookshelfid=? and itemnumber=? and biblioitemnumber=? and biblionumber=?");
-	$sth->execute($bookshelfid,$itemnumber,$biblioitemnumber,$biblionumber);
-	my $rows=$sth->fetchrow();
-	if ($rows==0) {
-	    $sth=$dbh->prepare("insert into bookshelfcontents (bookshelfid,biblionumber,biblioitemnumber,itemnumber) values (?,?,?,?)");
-	    $sth->execute($bookshelfid,$biblionumber,$biblioitemnumber,$itemnumber);
-	    $clearcache=1;
-	}
-    }
-    ($clearcache) && ($self->clearcache());
-}
-
-
-sub removefromshelf {
-    my $self=shift;
-}
-
-=head2 C<attribute()>
-
-Returns or sets the value of a given attribute for the shelf.
-
-  my $loanlength=$shelf->attribute('loanlength');
-  $shelf->attribute('loanlength', '21 days');
-
-
-=cut
-
-sub attribute {
-    my $self=shift;
-    my ($attribute, $value);
-    $attribute=shift;
-    $value=shift;
-    if ($value) {
-	$self->{ATTRIBUTES}->{$attribute}=$value;
-	my $dbh=C4::Context->dbh();
-	my $sth=$dbh->prepare("select value from bookshelfattributes where bookshelfid=? and attribute=?");
-	$sth->execute($self->{ID}, $attribute);
-	if ($sth->rows) {
-	    my $sti=$dbh->prepare("update bookshelfattributes set value=? where bookshelfid=? and attribute=?");
-	    $sti->execute($value, $self->{ID}, $attribute);
-	} else {
-	    my $sti=$dbh->prepare("insert into bookshelfattributes (bookshelfid, attribute, value) values (?, ?, ?)");
-	    $sti->execute($self->{ID}, $attribute, $value);
-	}
-    }
-    return $self->{ATTRIBUTES}->{$attribute};
-}
-
-
-=head2 C<attributes()>
-
-Returns a hash reference of the shelf attributes
-
-    my $attributes=$shelf->attributes();
-    my $loanlength=$attributes->{loanlength};
-
-=cut
-
-sub attributes {
-    my $self=shift;
-    return $self->{ATTRIBUTES};
-}
-
-=head2 C<clearcache()>
-
-Clears the per process in-memory cache and the FileCache if any changes are
-made to a shelf.
-
-  $shelf->clearshelf();
-
-=cut
-
-sub clearcache {
-    my $self=shift;
-    foreach my $level ('ITEM','BIBLIOITEM','BIBLIO') {
-	delete $self->{$level."CONTENTS"};
-	foreach my $sorttype (('author', 'title')) {
-	    $self->{CACHE}->remove($self->{ID}."_".$level."CONTENTS_".$sorttype);
-	}
-    }
-}
-
-
-=head2 C<loadcontents()>
-
-loads the contents of a particular shelf and loads into a per process memory
-cache as well as a shared Cache::FileCache.
-
-This subroutine is normally only used internally (called by itemcontents,
-biblioitemcontents, or bibliocontents).
-
-  $shelf->loadcontents(-orderby => 'author', -startat => 30, -number => 10);
-
-
-=cut
-
-sub loadcontents {
-    my $self=shift;
-    my ($orderby,$startat,$number);
-    if ($_[0]=~/^\-/) {
-	my %params=@_;
-	$orderby=$params{'-orderby'};
-	$startat=$params{'-startat'};
-	$number=$params{'-number'};
-    } else {
-	($orderby,$startat,$number)=@_;
-    }
-    my $bookshelfid=$self->{ID};
-    ($orderby) || ($orderby='natural');
-    $self->{ITEMCONTENTS}->{orderby}->{$orderby}=$self->{CACHE}->get( "$bookshelfid\_ITEMCONTENTS_$orderby" );
-    $self->{BIBLIOITEMCONTENTS}->{orderby}->{$orderby}=$self->{CACHE}->get( "$bookshelfid\_BIBLIOITEMCONTENTS_$orderby" );
-    $self->{BIBLIOCONTENTS}->{orderby}->{$orderby}=$self->{CACHE}->get( "$bookshelfid\_BIBLIOCONTENTS_$orderby" );
-    if ( defined $self->{ITEMCONTENTS}->{orderby}->{$orderby}) {
-	return;
-    }
-    my $dbh=C4::Context->dbh();
-    my $sth;
-    my $limit='';
-    if ($startat && $number) {
-	$limit="limit $startat,$number";
-    }
-    $limit='';
-    my $biblionumbers;
-    my $biblioitemnumbers;
-    if ($orderby eq 'author') {
-	$sth=$dbh->prepare("select itemnumber,BSC.biblionumber,BSC.biblioitemnumber from bookshelfcontents BSC, biblio B where BSC.biblionumber=B.biblionumber and bookshelfid=? order by B.author $limit");
-    } elsif ($orderby eq 'title') {
-	$sth=$dbh->prepare("select itemnumber,BSC.biblionumber,BSC.biblioitemnumber from bookshelfcontents BSC, biblio B where BSC.biblionumber=B.biblionumber and bookshelfid=? order by B.title $limit");
-    } else {
-	$sth=$dbh->prepare("select itemnumber,biblionumber,biblioitemnumber from bookshelfcontents where bookshelfid=? $limit");
-    }
-    $sth->execute($bookshelfid);
-    my @results;
-    my @biblioresults;
-    my @biblioitemresults;
-    while (my ($itemnumber,$biblionumber,$biblioitemnumber) = $sth->fetchrow) {
-	unless ($biblionumbers->{$biblionumber}) {
-	    $biblionumbers->{$biblionumber}=1;
-	    push @biblioresults, $biblionumber;
-	}
-	unless ($biblioitemnumbers->{$biblioitemnumber}) {
-	    $biblioitemnumbers->{$biblioitemnumber}=1;
-	    push @biblioitemresults, $biblioitemnumber;
-	}
-	push @results, $itemnumber;
-    }
-    $self->{CACHE}->set("$bookshelfid\_ITEMCONTENTS_$orderby", \@results, "3 hours");
-    $self->{CACHE}->set("$bookshelfid\_BIBLIOITEMCONTENTS_$orderby", \@results, "3 hours");
-    $self->{CACHE}->set("$bookshelfid\_BIBLIOCONTENTS_$orderby", \@results, "3 hours");
-    $self->{ITEMCONTENTS}->{orderby}->{$orderby}=\@results;
-    $self->{BIBLIOOCONTENTS}->{orderby}->{$orderby}=\@biblioresults;
-    $self->{BIBLIOITEMCONTENTS}->{orderby}->{$orderby}=\@biblioitemresults;
-}
-
-
-
-1;





More information about the Koha-cvs mailing list