--- /dev/null
+package C4::BookShelves; #asummes C4/BookShelves
+
+#
+# $Header$
+#
+#requires DBI.pm to be installed
+
+use strict;
+require Exporter;
+use DBI;
+use C4::Database;
+use C4::Circulation::Circ2;
+use vars qw($VERSION @ISA @EXPORT @EXPORT_OK %EXPORT_TAGS);
+
+# set the version for version checking
+$VERSION = 0.01;
+
+@ISA = qw(Exporter);
+@EXPORT = qw(&GetShelfList &GetShelfContents &AddToShelf &RemoveFromShelf &AddShelf &RemoveShelf);
+
+sub AddShelf {
+}
+
+sub RemoveShelf {
+}
+%EXPORT_TAGS = ( ); # eg: TAG => [ qw!name1 name2! ],
+
+# your exported package globals go here,
+# as well as any optionally exported functions
+
+@EXPORT_OK = qw($Var1 %Hashit);
+
+
+# non-exported package globals go here
+use vars qw(@more $stuff);
+
+# initalize package globals, first exported ones
+
+my $Var1 = '';
+my %Hashit = ();
+
+# then the others (which are still accessible as $Some::Module::stuff)
+my $stuff = '';
+my @more = ();
+
+# all file-scoped lexicals must be created before
+# the functions below that use them.
+
+# file-private lexicals go here
+my $priv_var = '';
+my %secret_hash = ();
+
+# here's a file-private function as a closure,
+# callable as &$priv_func; it cannot be prototyped.
+my $priv_func = sub {
+ # stuff goes here.
+};
+
+# make all your functions, whether exported or not;
+
+my $dbh=C4Connect();
+
+sub GetShelfList {
+ my $sth=$dbh->prepare("select shelfnumber,shelfname from bookshelf");
+ $sth->execute;
+ my %shelflist;
+ while (my ($shelfnumber, $shelfname) = $sth->fetchrow) {
+ my $sti=$dbh->prepare("select count(*) from shelfcontents where shelfnumber=$shelfnumber");
+ $sti->execute;
+ my ($count) = $sti->fetchrow;
+ $shelflist{$shelfnumber}->{'shelfname'}=$shelfname;
+ $shelflist{$shelfnumber}->{'count'}=$count;
+ }
+ return(\%shelflist);
+}
+
+
+sub GetShelfContents {
+ my ($env, $shelfnumber) = @_;
+ my @itemlist;
+ my $sth=$dbh->prepare("select itemnumber from shelfcontents where shelfnumber=$shelfnumber order by itemnumber");
+ $sth->execute;
+ while (my ($itemnumber) = $sth->fetchrow) {
+ my ($item) = getiteminformation($env, $itemnumber, 0);
+ push (@itemlist, $item);
+ }
+ return (\@itemlist);
+}
+
+sub AddToShelf {
+ my ($env, $itemnumber, $shelfnumber) = @_;
+ my $sth=$dbh->prepare("select * from shelfcontents where shelfnumber=$shelfnumber and itemnumber=$itemnumber");
+ $sth->execute;
+ if ($sth->rows) {
+# already on shelf
+ } else {
+ $sth=$dbh->prepare("insert into shelfcontents (shelfnumber, itemnumber, flags) values ($shelfnumber, $itemnumber, 0)");
+ $sth->execute;
+ }
+}
+
+sub RemoveFromShelf {
+ my ($env, $itemnumber, $shelfnumber) = @_;
+ my $sth=$dbh->prepare("delete from shelfcontents where shelfnumber=$shelfnumber and itemnumber=$itemnumber");
+ $sth->execute;
+}
+
+sub AddShelf {
+ my ($env, $shelfname) = @_;
+ my $q_shelfname=$dbh->quote($shelfname);
+ my $sth=$dbh->prepare("select * from bookshelf where shelfname=$q_shelfname");
+ $sth->execute;
+ if ($sth->rows) {
+ return(0, "Shelf \"$shelfname\" already exists");
+ } else {
+ $sth=$dbh->prepare("insert into bookshelf (shelfname) values ($q_shelfname)");
+ $sth->execute;
+ return (1, "Done");
+ }
+}
+
+sub RemoveShelf {
+ my ($env, $shelfnumber) = @_;
+ my $sth=$dbh->prepare("select count(*) from shelfcontents where shelfnumber=$shelfnumber");
+ $sth->execute;
+ my ($count)=$sth->fetchrow;
+ if ($count) {
+ return (0, "Shelf has $count items on it");
+ } else {
+ $sth=$dbh->prepare("delete from bookshelf where shelfnumber=$shelfnumber");
+ $sth->execute;
+ return (1, "Done");
+ }
+}
+
+
+END { } # module clean-up code here (global destructor)
+
+
+#
+# $Log$
+# Revision 1.1 2001/02/07 20:27:17 tonnesen
+# Start of code to implement virtual bookshelves in Koha.
+#
+#
--- /dev/null
+#!/usr/bin/perl
+#script to provide bookshelf management
+#
+# $Header$
+#
+
+use strict;
+use C4::Search;
+use CGI;
+use C4::Output;
+use C4::BookShelves;
+use C4::Circulation::Circ2;
+
+my $env;
+my $query = new CGI;
+print $query->header;
+my $headerbackgroundcolor='#663266';
+my $circbackgroundcolor='#555555';
+my $circbackgroundcolor='#550000';
+my $linecolor1='#bbbbbb';
+my $linecolor2='#dddddd';
+
+print startpage();
+print startmenu('catalogue');
+
+
+
+
+my ($shelflist) = GetShelfList();
+
+if ($query->param('modifyshelfcontents')) {
+ my $shelfnumber=$query->param('shelfnumber');
+ my $barcode=$query->param('addbarcode');
+ my ($item) = getiteminformation($env, 0, $barcode);
+ AddToShelf($env, $item->{'itemnumber'}, $shelfnumber);
+ foreach ($query->param) {
+ if (/REM-(\d*)/) {
+ my $itemnumber=$1;
+ RemoveFromShelf($env, $itemnumber, $shelfnumber);
+ }
+ }
+}
+
+SWITCH: {
+ if ($query->param('viewshelf')) { viewshelf($query->param('viewshelf')); last SWITCH;}
+ print << "EOF";
+ <center>
+ <table border=0 cellpadding=4 cellspacing=0>
+ <tr><td bgcolor=$headerbackgroundcolor>
+ <table border=0 cellpadding=5 cellspacing=0 width=100%>
+ <tr><th bgcolor=$headerbackgroundcolor>
+ <font color=white>Shelf List</font>
+ </th></tr>
+ </table>
+ </td></tr>
+EOF
+ my $color='';
+ foreach (sort keys %$shelflist) {
+ ($color eq $linecolor1) ? ($color=$linecolor2) : ($color=$linecolor1);
+ print "<tr><td bgcolor=$color><a href=shelves.pl?viewshelf=$_>$shelflist->{$_}->{'shelfname'} ($shelflist->{$_}->{'count'} books)</a></td></tr>\n";
+ }
+ print "</table>\n";
+}
+
+
+sub viewshelf {
+ my $shelfnumber=shift;
+ my ($itemlist) = GetShelfContents($env, $shelfnumber);
+ my $item='';
+ print << "EOF";
+ <center>
+ <form>
+ <a href=shelves.pl>Shelf List</a><p>
+ <table border=0 cellpadding=0 cellspacing=0>
+ <tr><td colspan=7>
+ <table>
+ <tr><td>Add a book by barcode:</td><td><input name=addbarcode></td></tr>
+ </table>
+ <br>
+ <table border=0 cellpadding=5 cellspacing=0 width=100%>
+ <tr><th bgcolor=$headerbackgroundcolor>
+ <font color=white>Contents of $shelflist->{$shelfnumber}->{'shelfname'} shelf</font>
+ </th></tr>
+ </table>
+ </td></tr>
+EOF
+ my $color='';
+ foreach $item (sort {$a->{'barcode'} cmp $b->{'barcode'}} @$itemlist) {
+ ($color eq $linecolor1) ? ($color=$linecolor2) : ($color=$linecolor1);
+ print << "EOF";
+ <tr>
+ <td bgcolor=$color><input type=checkbox name=REM-$item->{'itemnumber'}></td>
+ <td bgcolor=$color width=10 align=center><img src=/images/blankdot.gif></td>
+ <td bgcolor=$color>$item->{'barcode'}</td>
+ <td bgcolor=$color width=10 align=center><img src=/images/blankdot.gif></td>
+ <td bgcolor=$color>$item->{'title'}</td>
+ <td bgcolor=$color width=10 align=center><img src=/images/blankdot.gif></td>
+ <td bgcolor=$color>$item->{'author'}</td>
+ </tr>
+EOF
+ }
+ print << "EOF";
+ </table>
+ <br>
+ <input type=hidden name=shelfnumber value=$shelfnumber>
+ <input type=hidden name=modifyshelfcontents value=1>
+ <input type=hidden name=viewshelf value=$shelfnumber>
+ <input type=submit value="Modify Shelf List">
+ </form>
+EOF
+}
+
+
+
+#
+# $Log$
+# Revision 1.1 2001/02/07 20:27:16 tonnesen
+# Start of code to implement virtual bookshelves in Koha.
+#
+#
+#
+
+
+