@ -1,7 +1,7 @@
# -*- tab-width: 8 -*-
# -*- tab-width: 8 -*-
# Please use 8-character tabs for this file (indents are every 4 characters)
# Please use 8-character tabs for this file (indents are every 4 characters)
package C4::Book Shelves ;
package C4::Virtual Shelves ;
# $Id$
# $Id$
@ -33,17 +33,17 @@ $VERSION = do { my @v = '$Revision$' =~ /\d+/g; shift(@v) . "." . join( "_", map
= head1 NAME
= head1 NAME
C4:: Book Shelves - Functions for manipulating Koha virtual book shelves
C4:: Virtual Shelves - Functions for manipulating Koha virtual virtual shelves
= head1 SYNOPSIS
= head1 SYNOPSIS
use C4::Book Shelves ;
use C4::Virtual Shelves ;
= head1 DESCRIPTION
= head1 DESCRIPTION
This module provides functions for manipulating virtual book shelves,
This module provides functions for manipulating virtual virtual shelves,
including creating and deleting book shelves, and adding and removing
including creating and deleting virtual shelves, and adding and removing
items to and from book shelves.
items to and from virtual shelves.
= head1 FUNCTIONS
= head1 FUNCTIONS
@ -69,13 +69,13 @@ my $dbh = C4::Context->dbh;
$ shelflist = & GetShelves ( $ owner , $ mincategory ) ;
$ shelflist = & GetShelves ( $ owner , $ mincategory ) ;
( $ shelfnumber , $ shelfhash ) = each % { $ shelflist } ;
( $ shelfnumber , $ shelfhash ) = each % { $ shelflist } ;
Looks up the virtual book shelves, and returns a summary . C <$shelflist>
Looks up the virtual virtual shelves, and returns a summary . C <$shelflist>
is a reference - to - hash . The keys are the bookshelf numbers
is a reference - to - hash . The keys are the virtualshelves numbers
( C <$shelfnumber> , above ) , and the values ( C <$shelfhash> , above ) are
( C <$shelfnumber> , above ) , and the values ( C <$shelfhash> , above ) are
themselves references - to - hash , with the following keys :
themselves references - to - hash , with the following keys :
C <mincategory> : 2 if the list is for "look" . 3 if the list is for "Select bookshelf for adding a book " .
C <mincategory> : 2 if the list is for "look" . 3 if the list is for "Select virtualshelves for adding a virtual " .
book shelves of the owner are always selected , whatever the category
virtual shelves of the owner are always selected , whatever the category
= over 4
= over 4
@ -85,7 +85,7 @@ A string. The name of the shelf.
= item C <$shelfhash-E<gt> { count } >
= item C <$shelfhash-E<gt> { count } >
The number of book s on that bookshelf .
The number of virtual s on that virtualshelves .
= back
= back
@ -100,14 +100,14 @@ sub GetShelves {
my ( $ owner , $ mincategory ) = @ _ ;
my ( $ owner , $ mincategory ) = @ _ ;
my $ query = qq(
my $ query = qq(
SELECT bookshelf . shelfnumber , bookshelf . shelfname , owner , surname , firstname , bookshelf . category ,
SELECT virtualshelves . shelfnumber , virtualshelves . shelfname , owner , surname , firstname , virtualshelves . category ,
count ( shelfcontents . item number) as count
count ( virtual shelfcontents. biblio number) as count
FROM bookshelf
FROM virtualshelves
LEFT JOIN shelfcontents ON bookshelf . shelfnumber = shelfcontents . shelfnumber
LEFT JOIN virtual shelfcontents ON virtualshelves . shelfnumber = virtual shelfcontents. shelfnumber
LEFT JOIN borrowers ON bookshelf . owner = borrowers . borrowernumber
LEFT JOIN borrowers ON virtualshelves . owner = borrowers . borrowernumber
WHERE owner = ? OR category >= ?
WHERE owner = ? OR category >= ?
GROUP BY bookshelf . shelfnumber
GROUP BY virtualshelves . shelfnumber
ORDER BY bookshelf . category , bookshelf . shelfname , borrowers . firstname , borrowers . surname
ORDER BY virtualshelves . category , virtualshelves . shelfname , borrowers . firstname , borrowers . surname
) ;
) ;
my $ sth = $ dbh - > prepare ( $ query ) ;
my $ sth = $ dbh - > prepare ( $ query ) ;
$ sth - > execute ( $ owner , $ mincategory ) ;
$ sth - > execute ( $ owner , $ mincategory ) ;
@ -134,10 +134,10 @@ sub GetShelves {
( shelfnumber , shelfname , owner , category ) = & GetShelf ( $ shelfnumber ) ;
( shelfnumber , shelfname , owner , category ) = & GetShelf ( $ shelfnumber ) ;
Looks up information about the contents of virtual bookshelf number
Looks up information about the contents of virtual virtualshelves number
C <$shelfnumber>
C <$shelfnumber>
Returns the database 's information on ' bookshelf ' table .
Returns the database 's information on ' virtualshelves ' table .
= cut
= cut
@ -145,7 +145,7 @@ sub GetShelf {
my ( $ shelfnumber ) = @ _ ;
my ( $ shelfnumber ) = @ _ ;
my $ query = qq(
my $ query = qq(
SELECT shelfnumber , shelfname , owner , category
SELECT shelfnumber , shelfname , owner , category
FROM bookshelf
FROM virtualshelves
WHERE shelfnumber = ?
WHERE shelfnumber = ?
) ;
) ;
my $ sth = $ dbh - > prepare ( $ query ) ;
my $ sth = $ dbh - > prepare ( $ query ) ;
@ -157,7 +157,7 @@ sub GetShelf {
$ itemlist = & GetShelfContents ( $ shelfnumber ) ;
$ itemlist = & GetShelfContents ( $ shelfnumber ) ;
Looks up information about the contents of virtual bookshelf number
Looks up information about the contents of virtual virtualshelves number
C <$shelfnumber> .
C <$shelfnumber> .
Returns a reference - to - array , whose elements are references - to - hash ,
Returns a reference - to - array , whose elements are references - to - hash ,
@ -170,23 +170,22 @@ sub GetShelfContents {
my ( $ shelfnumber ) = @ _ ;
my ( $ shelfnumber ) = @ _ ;
my @ itemlist ;
my @ itemlist ;
my $ query =
my $ query =
" SELECT item number
" SELECT biblio number
FROM shelfcontents
FROM virtual shelfcontents
WHERE shelfnumber = ?
WHERE shelfnumber = ?
ORDER BY item number
ORDER BY biblio number
" ;
" ;
my $ sth = $ dbh - > prepare ( $ query ) ;
my $ sth = $ dbh - > prepare ( $ query ) ;
$ sth - > execute ( $ shelfnumber ) ;
$ sth - > execute ( $ shelfnumber ) ;
my $ sth2 = $ dbh - > prepare ( "
my $ sth2 = $ dbh - > prepare ( "
SELECT biblio . * , biblioitems . * FROM items
SELECT biblio . * , biblioitems . * FROM biblio
LEFT JOIN biblio on items . biblionumber = biblio . biblionumber
LEFT JOIN biblioitems on biblio . biblionumber = biblioitems . biblionumber
LEFT JOIN biblioitems on items . biblionumber = biblioitems . biblionumber
WHERE biblio . biblionumber = ? "
WHERE items . itemnumber = ? "
) ;
) ;
while ( my ( $ item number) = $ sth - > fetchrow ) {
while ( my ( $ biblio number) = $ sth - > fetchrow ) {
$ sth2 - > execute ( $ item number) ;
$ sth2 - > execute ( $ biblio number) ;
my $ item = $ sth2 - > fetchrow_hashref ;
my $ item = $ sth2 - > fetchrow_hashref ;
$ item - > { 'item number' } = $ item number;
$ item - > { 'biblio number' } = $ biblio number;
push ( @ itemlist , $ item ) ;
push ( @ itemlist , $ item ) ;
}
}
return ( \ @ itemlist ) ;
return ( \ @ itemlist ) ;
@ -196,11 +195,11 @@ sub GetShelfContents {
$ shelfnumber = & AddShelf ( $ shelfname , $ owner , $ category ) ;
$ shelfnumber = & AddShelf ( $ shelfname , $ owner , $ category ) ;
Creates a new virtual bookshelf with name C <$shelfname> , owner C <$owner> and category
Creates a new virtual virtualshelves with name C <$shelfname> , owner C <$owner> and category
C <$category> .
C <$category> .
Returns a code to know what ' s happen .
Returns a code to know what ' s happen .
* - 1 : if this bookshelf already exist .
* - 1 : if this virtualshelves already exist .
* $ shelfnumber : if success .
* $ shelfnumber : if success .
= cut
= cut
@ -209,7 +208,7 @@ sub AddShelf {
my ( $ shelfname , $ owner , $ category ) = @ _ ;
my ( $ shelfname , $ owner , $ category ) = @ _ ;
my $ query = qq(
my $ query = qq(
SELECT *
SELECT *
FROM bookshelf
FROM virtualshelves
WHERE shelfname = ? AND owner = ?
WHERE shelfname = ? AND owner = ?
) ;
) ;
my $ sth = $ dbh - > prepare ( $ query ) ;
my $ sth = $ dbh - > prepare ( $ query ) ;
@ -219,7 +218,7 @@ sub AddShelf {
}
}
else {
else {
my $ query = qq(
my $ query = qq(
INSERT INTO bookshelf
INSERT INTO virtualshelves
( shelfname , owner , category )
( shelfname , owner , category )
VALUES ( ? , ? , ? )
VALUES ( ? , ? , ? )
) ;
) ;
@ -232,35 +231,35 @@ sub AddShelf {
= item AddToShelf
= item AddToShelf
& AddToShelf ( $ item number, $ shelfnumber ) ;
& AddToShelf ( $ biblio number, $ shelfnumber ) ;
Adds item number C <$item number> to virtual bookshelf number
Adds item number C <$biblio number> to virtual virtualshelves number
C <$shelfnumber> , unless that item is already on that shelf .
C <$shelfnumber> , unless that item is already on that shelf .
= cut
= cut
#'
#'
sub AddToShelf {
sub AddToShelf {
my ( $ item number, $ shelfnumber ) = @ _ ;
my ( $ biblio number, $ shelfnumber ) = @ _ ;
return unless $ item number;
return unless $ biblio number;
my $ query = qq(
my $ query = qq(
SELECT *
SELECT *
FROM shelfcontents
FROM virtual shelfcontents
WHERE shelfnumber = ? AND item number= ?
WHERE shelfnumber = ? AND biblio number= ?
) ;
) ;
my $ sth = $ dbh - > prepare ( $ query ) ;
my $ sth = $ dbh - > prepare ( $ query ) ;
$ sth - > execute ( $ shelfnumber , $ item number ) ;
$ sth - > execute ( $ shelfnumber , $ biblio number ) ;
unless ( $ sth - > rows ) {
unless ( $ sth - > rows ) {
# already on shelf
# already on shelf
my $ query = qq(
my $ query = qq(
INSERT INTO shelfcontents
INSERT INTO virtual shelfcontents
( shelfnumber , item number, flags )
( shelfnumber , biblio number, flags )
VALUES
VALUES
( ? , ? , 0 )
( ? , ? , 0 )
) ;
) ;
$ sth = $ dbh - > prepare ( $ query ) ;
$ sth = $ dbh - > prepare ( $ query ) ;
$ sth - > execute ( $ shelfnumber , $ item number ) ;
$ sth - > execute ( $ shelfnumber , $ biblio number ) ;
}
}
}
}
@ -268,7 +267,7 @@ sub AddToShelf {
& AddToShelfFromBiblio ( $ biblionumber , $ shelfnumber )
& AddToShelfFromBiblio ( $ biblionumber , $ shelfnumber )
this function allow to add a book into the shelf number $ shelfnumber
this function allow to add a virtual into the shelf number $ shelfnumber
from biblionumber .
from biblionumber .
= cut
= cut
@ -277,30 +276,21 @@ sub AddToShelfFromBiblio {
my ( $ biblionumber , $ shelfnumber ) = @ _ ;
my ( $ biblionumber , $ shelfnumber ) = @ _ ;
return unless $ biblionumber ;
return unless $ biblionumber ;
my $ query = qq(
my $ query = qq(
SELECT itemnumber
FROM items
WHERE biblionumber = ?
) ;
my $ sth = $ dbh - > prepare ( $ query ) ;
$ sth - > execute ( $ biblionumber ) ;
my ( $ itemnumber ) = $ sth - > fetchrow ;
$ query = qq(
SELECT *
SELECT *
FROM shelfcontents
FROM virtualshelfcontents
WHERE shelfnumber = ? AND item number= ?
WHERE shelfnumber = ? AND biblionumber = ?
) ;
) ;
$ sth = $ dbh - > prepare ( $ query ) ;
my $ sth = $ dbh - > prepare ( $ query ) ;
$ sth - > execute ( $ shelfnumber , $ item number ) ;
$ sth - > execute ( $ shelfnumber , $ biblionumber ) ;
unless ( $ sth - > rows ) {
unless ( $ sth - > rows ) {
# "already on shelf";
my $ query = qq(
my $ query = qq(
INSERT INTO shelfcontents
INSERT INTO virtual shelfcontents
( shelfnumber , item number, flags )
( shelfnumber , biblio number, flags )
VALUES
VALUES
( ? , ? , 0 )
( ? , ? , 0 )
) ;
) ;
$ sth = $ dbh - > prepare ( $ query ) ;
$ sth = $ dbh - > prepare ( $ query ) ;
$ sth - > execute ( $ shelfnumber , $ item number ) ;
$ sth - > execute ( $ shelfnumber , $ biblio number ) ;
}
}
}
}
@ -308,14 +298,14 @@ sub AddToShelfFromBiblio {
ModShelf ( $ shelfnumber , $ shelfname , $ owner , $ category )
ModShelf ( $ shelfnumber , $ shelfname , $ owner , $ category )
Modify the value into bookshelf table with values given on input arg .
Modify the value into virtualshelves table with values given on input arg .
= cut
= cut
sub ModShelf {
sub ModShelf {
my ( $ shelfnumber , $ shelfname , $ owner , $ category ) = @ _ ;
my ( $ shelfnumber , $ shelfname , $ owner , $ category ) = @ _ ;
my $ query = qq(
my $ query = qq(
UPDATE bookshelf
UPDATE virtualshelves
SET shelfname = ? , owner = ? , category = ?
SET shelfname = ? , owner = ? , category = ?
WHERE shelfnumber = ?
WHERE shelfnumber = ?
) ;
) ;
@ -327,7 +317,7 @@ sub ModShelf {
( $ status ) = & DelShelf ( $ shelfnumber ) ;
( $ status ) = & DelShelf ( $ shelfnumber ) ;
Deletes virtual bookshelf number C <$shelfnumber> . The bookshelf must
Deletes virtual virtualshelves number C <$shelfnumber> . The virtualshelves must
be empty .
be empty .
Returns a two - element array , where C <$status> is 0 if the operation
Returns a two - element array , where C <$status> is 0 if the operation
@ -354,7 +344,7 @@ sub ShelfPossibleAction {
my ( $ user , $ shelfnumber , $ action ) = @ _ ;
my ( $ user , $ shelfnumber , $ action ) = @ _ ;
my $ query = qq(
my $ query = qq(
SELECT owner , category
SELECT owner , category
FROM bookshelf
FROM virtualshelves
WHERE shelfnumber = ?
WHERE shelfnumber = ?
) ;
) ;
my $ sth = $ dbh - > prepare ( $ query ) ;
my $ sth = $ dbh - > prepare ( $ query ) ;
@ -367,23 +357,23 @@ sub ShelfPossibleAction {
= item DelFromShelf
= item DelFromShelf
& DelFromShelf ( $ item number, $ shelfnumber ) ;
& DelFromShelf ( $ biblio number, $ shelfnumber ) ;
Removes item number C <$item number> from virtual bookshelf number
Removes item number C <$biblio number> from virtual virtualshelves number
C <$shelfnumber> . If the item wasn ' t on that bookshelf to begin with ,
C <$shelfnumber> . If the item wasn ' t on that virtualshelves to begin with ,
nothing happens .
nothing happens .
= cut
= cut
#'
#'
sub DelFromShelf {
sub DelFromShelf {
my ( $ item number, $ shelfnumber ) = @ _ ;
my ( $ biblio number, $ shelfnumber ) = @ _ ;
my $ query = qq(
my $ query = qq(
DELETE FROM shelfcontents
DELETE FROM virtual shelfcontents
WHERE shelfnumber = ? AND item number= ?
WHERE shelfnumber = ? AND biblio number= ?
) ;
) ;
my $ sth = $ dbh - > prepare ( $ query ) ;
my $ sth = $ dbh - > prepare ( $ query ) ;
$ sth - > execute ( $ shelfnumber , $ item number ) ;
$ sth - > execute ( $ shelfnumber , $ biblio number ) ;
}
}
= head2 DelShelf
= head2 DelShelf
@ -397,7 +387,7 @@ sub DelFromShelf {
#'
#'
sub DelShelf {
sub DelShelf {
my ( $ shelfnumber ) = @ _ ;
my ( $ shelfnumber ) = @ _ ;
my $ sth = $ dbh - > prepare ( "DELETE FROM bookshelf WHERE shelfnumber=?" ) ;
my $ sth = $ dbh - > prepare ( "DELETE FROM virtualshelves WHERE shelfnumber=?" ) ;
$ sth - > execute ( $ shelfnumber ) ;
$ sth - > execute ( $ shelfnumber ) ;
return 0 ;
return 0 ;
}
}
@ -419,53 +409,3 @@ Koha Developement team <info@koha.org>
C4::Circulation:: Circ2 ( 3 )
C4::Circulation:: Circ2 ( 3 )
= cut
= cut
#
# $Log$
# Revision 1.21 2007/04/04 16:46:22 tipaul
# HUGE COMMIT : code cleaning circulation.
#
# some stuff to do, i'll write a mail on koha-devel NOW !
#
# Revision 1.20 2007/03/09 14:31:47 tipaul
# rel_3_0 moved to HEAD
#
# Revision 1.15.8.10 2007/01/25 13:18:15 tipaul
# checking that a bookshelf with the same name AND OWNER does not exist before creating it
#
# Revision 1.15.8.9 2006/12/15 17:37:52 toins
# removing a function used only once.
#
# Revision 1.15.8.8 2006/12/14 17:22:55 toins
# bookshelves work perfectly with mod_perl and are cleaned.
#
# Revision 1.15.8.7 2006/12/13 19:46:41 hdl
# Some bug fixing.
#
# Revision 1.15.8.6 2006/12/11 17:10:06 toins
# fixing some bugs on bookshelves.
#
# Revision 1.15.8.5 2006/12/07 16:45:43 toins
# removing warn compilation. (perl -wc)
#
# Revision 1.15.8.4 2006/11/23 09:05:01 tipaul
# enable removal of a bookshelf even if there are items inside
#
# Revision 1.15.8.3 2006/10/30 09:50:20 tipaul
# removing getiteminformations (using direct SQL, as we are in a .pm, so it's "legal")
#
# Revision 1.15.8.2 2006/08/31 16:03:52 toins
# Add Pod to DelShelf
#
# Revision 1.15.8.1 2006/08/30 15:59:14 toins
# Code cleaned according to coding guide lines.
#
# Revision 1.15 2004/12/16 11:30:58 tipaul
# adding bookshelf features :
# * create bookshelf on the fly
# * modify a bookshelf name & status
#
# Revision 1.14 2004/12/15 17:28:23 tipaul
# adding bookshelf features :
# * create bookshelf on the fly
# * modify a bookshelf (this being not finished, will commit the rest soon)