use vars qw($VERSION @ISA @EXPORT @EXPORT_OK);
BEGIN {
- # set the version for version checking
- $VERSION = 3.02;
- require Exporter;
- @ISA = qw(Exporter);
- @EXPORT = qw(
+ # set the version for version checking
+ $VERSION = 3.02;
+ require Exporter;
+ @ISA = qw(Exporter);
+ @EXPORT = qw(
&GetShelves &GetShelfContents &GetShelf
&AddToShelf &AddShelf
&ModShelf
&ShelfPossibleAction
&DelFromShelf &DelShelf
&GetBibliosShelves
- );
+ );
@EXPORT_OK = qw(
&GetAllShelves &ShelvesMax
);
$query.= qq{
LEFT JOIN virtualshelfshares sh ON sh.shelfnumber=vs.shelfnumber
AND sh.borrowernumber=?
- WHERE category=1 AND (vs.owner=? OR sh.borrowernumber=?) };
+ WHERE category=1 AND (vs.owner=? OR sh.borrowernumber=?) };
@params= ($owner, $owner, $owner, $offset||0, $row_count);
}
else {
$query.= qq{
LEFT JOIN virtualshelfshares sh ON sh.shelfnumber=vs.shelfnumber
AND sh.borrowernumber=?
- WHERE category=1 AND (vs.owner=? OR sh.borrowernumber=?) };
+ WHERE category=1 AND (vs.owner=? OR sh.borrowernumber=?) };
@params = ($owner, $owner, $owner);
}
else {
- $query.='WHERE category=2 ';
+ $query.='WHERE category=2 ';
@params = ();
}
$query.='AND (allow_add=1 OR owner=?) ' if $adding_allowed;
sub GetShelfContents ($;$$$) {
my ($shelfnumber, $row_count, $offset, $sortfield) = @_;
my $dbh=C4::Context->dbh();
- my $sth1 = $dbh->prepare("SELECT count(*) FROM virtualshelfcontents WHERE shelfnumber = ?");
- $sth1->execute($shelfnumber);
- my $total = $sth1->fetchrow;
- if(!$sortfield) {
- my $sth2 = $dbh->prepare('SELECT sortfield FROM virtualshelves WHERE shelfnumber=?');
- $sth2->execute($shelfnumber);
- ($sortfield) = $sth2->fetchrow_array;
- }
+ my $sth1 = $dbh->prepare("SELECT count(*) FROM virtualshelfcontents WHERE shelfnumber = ?");
+ $sth1->execute($shelfnumber);
+ my $total = $sth1->fetchrow;
+ if(!$sortfield) {
+ my $sth2 = $dbh->prepare('SELECT sortfield FROM virtualshelves WHERE shelfnumber=?');
+ $sth2->execute($shelfnumber);
+ ($sortfield) = $sth2->fetchrow_array;
+ }
my $query =
" SELECT vc.biblionumber, vc.shelfnumber, vc.dateadded, itemtypes.*,
biblio.*, biblioitems.itemtype, biblioitems.publicationyear as year, biblioitems.publishercode, biblioitems.place, biblioitems.size, biblioitems.pages
FROM virtualshelfcontents vc
- LEFT JOIN biblio ON vc.biblionumber = biblio.biblionumber
- LEFT JOIN biblioitems ON biblio.biblionumber = biblioitems.biblionumber
- LEFT JOIN itemtypes ON biblioitems.itemtype = itemtypes.itemtype
+ LEFT JOIN biblio ON vc.biblionumber = biblio.biblionumber
+ LEFT JOIN biblioitems ON biblio.biblionumber = biblioitems.biblionumber
+ LEFT JOIN itemtypes ON biblioitems.itemtype = itemtypes.itemtype
WHERE vc.shelfnumber=? ";
- my @params = ($shelfnumber);
- if($sortfield) {
- $query .= " ORDER BY " . $sortfield;
- $query .= " DESC " if ($sortfield eq 'copyrightdate');
- }
+ my @params = ($shelfnumber);
+ if($sortfield) {
+ $query .= " ORDER BY " . $sortfield;
+ $query .= " DESC " if ($sortfield eq 'copyrightdate');
+ }
if($row_count){
- $query .= " LIMIT ?, ? ";
- push (@params, ($offset ? $offset : 0));
- push (@params, $row_count);
+ $query .= " LIMIT ?, ? ";
+ push (@params, ($offset ? $offset : 0));
+ push (@params, $row_count);
}
my $sth3 = $dbh->prepare($query);
- $sth3->execute(@params);
- return ($sth3->fetchall_arrayref({}), $total);
- # Like the perldoc says,
- # returns reference-to-array, where each element is reference-to-hash of the row:
- # like [ $sth->fetchrow_hashref(), $sth->fetchrow_hashref() ... ]
- # Suitable for use in TMPL_LOOP.
- # See http://search.cpan.org/~timb/DBI-1.601/DBI.pm#fetchall_arrayref
- # or newer, for your version of DBI.
+ $sth3->execute(@params);
+ return ($sth3->fetchall_arrayref({}), $total);
+ # Like the perldoc says,
+ # returns reference-to-array, where each element is reference-to-hash of the row:
+ # like [ $sth->fetchrow_hashref(), $sth->fetchrow_hashref() ... ]
+ # Suitable for use in TMPL_LOOP.
+ # See http://search.cpan.org/~timb/DBI-1.601/DBI.pm#fetchall_arrayref
+ # or newer, for your version of DBI.
}
=head2 AddShelf
my $sth = $dbh->prepare($query);
$sth->execute(
- $hashref->{shelfname},
- $owner,
- $hashref->{category},
- $hashref->{sortfield},
- $hashref->{allow_add}||0,
- $hashref->{allow_delete_own}||1,
- $hashref->{allow_delete_other}||0 );
+ $hashref->{shelfname},
+ $owner,
+ $hashref->{category},
+ $hashref->{sortfield},
+ $hashref->{allow_add}||0,
+ $hashref->{allow_delete_own}||1,
+ $hashref->{allow_delete_other}||0 );
my $shelfnumber = $dbh->{'mysql_insertid'};
return $shelfnumber;
}
$sth->execute( $shelfnumber, $biblionumber );
($sth->rows) and return undef; # already on shelf
- $query = qq(
- INSERT INTO virtualshelfcontents
- (shelfnumber, biblionumber, flags, borrowernumber)
- VALUES (?, ?, 0, ?));
- $sth = $dbh->prepare($query);
- $sth->execute( $shelfnumber, $biblionumber, $borrowernumber);
- $query = qq(UPDATE virtualshelves
- SET lastmodified = CURRENT_TIMESTAMP
- WHERE shelfnumber = ?);
- $sth = $dbh->prepare($query);
- $sth->execute( $shelfnumber );
+ $query = qq(
+ INSERT INTO virtualshelfcontents
+ (shelfnumber, biblionumber, flags, borrowernumber)
+ VALUES (?, ?, 0, ?));
+ $sth = $dbh->prepare($query);
+ $sth->execute( $shelfnumber, $biblionumber, $borrowernumber);
+ $query = qq(UPDATE virtualshelves
+ SET lastmodified = CURRENT_TIMESTAMP
+ WHERE shelfnumber = ?);
+ $sth = $dbh->prepare($query);
+ $sth->execute( $shelfnumber );
}
=head2 ModShelf
#if name or category changes, the name should be tested
if($hashref->{shelfname} || $hashref->{category}) {
unless(_CheckShelfName(
- $hashref->{shelfname}||$oldrecord->{shelfname},
- $hashref->{category}||$oldrecord->{category},
- $oldrecord->{owner}, $shelfnumber )) {
- return 0; #name check failed
+ $hashref->{shelfname}||$oldrecord->{shelfname},
+ $hashref->{category}||$oldrecord->{category},
+ $oldrecord->{owner}, $shelfnumber )) {
+ return 0; #name check failed
}
}
$query= "UPDATE virtualshelves SET shelfname=?, category=?, sortfield=?, allow_add=?, allow_delete_own=?, allow_delete_other=? WHERE shelfnumber=?";
$sth = $dbh->prepare($query);
$sth->execute(
- $hashref->{shelfname}||$oldrecord->{shelfname},
- $hashref->{category}||$oldrecord->{category},
- $hashref->{sortfield}||$oldrecord->{sortfield},
- $hashref->{allow_add}||$oldrecord->{allow_add},
- $hashref->{allow_delete_own}||$oldrecord->{allow_delete_own},
- $hashref->{allow_delete_other}||$oldrecord->{allow_delete_other},
- $shelfnumber );
+ $hashref->{shelfname}||$oldrecord->{shelfname},
+ $hashref->{category}||$oldrecord->{category},
+ $hashref->{sortfield}||$oldrecord->{sortfield},
+ $hashref->{allow_add}||$oldrecord->{allow_add},
+ $hashref->{allow_delete_own}||$oldrecord->{allow_delete_own},
+ $hashref->{allow_delete_other}||$oldrecord->{allow_delete_other},
+ $shelfnumber );
return $@? 0: 1;
}
return 0 unless $shelf && ($shelf->{category}==2 || $shelf->{owner}==$user || $shelf->{borrowernumber}==$user);
if($action eq 'view') {
- #already handled in the above condition
- return 1;
+ #already handled in the above condition
+ return 1;
}
elsif($action eq 'add') {
- return 0 if $user<=0; #should be logged in
- return 1 if $shelf->{allow_add}==1 || $shelf->{owner}==$user;
- #owner may always add
+ return 0 if $user<=0; #should be logged in
+ return 1 if $shelf->{allow_add}==1 || $shelf->{owner}==$user;
+ #owner may always add
}
elsif($action eq 'delete') {
#this answer is just diplomatic: it says that you may be able to delete
#some items from that shelf
#it does not answer the question about a specific biblio
#DelFromShelf checks the situation per biblio
- return 1 if $user>0 && ($shelf->{allow_delete_own}==1 || $shelf->{allow_delete_other}==1);
+ return 1 if $user>0 && ($shelf->{allow_delete_own}==1 || $shelf->{allow_delete_other}==1);
}
elsif($action eq 'manage') {
- return 1 if $user && $shelf->{owner}==$user;
+ return 1 if $user && $shelf->{owner}==$user;
}
return 0;
}
$query = qq(DELETE FROM virtualshelfcontents
WHERE shelfnumber=? AND biblionumber=? AND borrowernumber=?);
$sth= $dbh->prepare($query);
- foreach my $biblionumber (@$bibref) {
+ foreach my $biblionumber (@$bibref) {
$sth->execute($shelfnumber, $biblionumber, $user);
- $r= $sth->rows; #Expect -1, 0 or 1 (-1 means Don't know; count as 1)
- $t+= ($r==-1)? 1: $r;
- }
+ $r= $sth->rows; #Expect -1, 0 or 1 (-1 means Don't know; count as 1)
+ $t+= ($r==-1)? 1: $r;
+ }
}
if($del_oth) {
#includes a check if borrowernumber is null (deleted patron)
WHERE shelfnumber=? AND biblionumber=? AND
(borrowernumber IS NULL OR borrowernumber<>?)/;
$sth= $dbh->prepare($query);
- foreach my $biblionumber (@$bibref) {
+ foreach my $biblionumber (@$bibref) {
$sth->execute($shelfnumber, $biblionumber, $user);
- $r= $sth->rows;
- $t+= ($r==-1)? 1: $r;
- }
+ $r= $sth->rows;
+ $t+= ($r==-1)? 1: $r;
+ }
}
return $t;
}
$query.= qq{
LEFT JOIN virtualshelfshares sh ON sh.shelfnumber=vs.shelfnumber
AND sh.borrowernumber=?
- WHERE category=1 AND (vs.owner=? OR sh.borrowernumber=?) };
+ WHERE category=1 AND (vs.owner=? OR sh.borrowernumber=?) };
@params= ($owner, $owner, $owner);
}
else {
- $query.='WHERE category=2';
+ $query.='WHERE category=2';
@params= ();
}
my $sth = $dbh->prepare($query);
my $query = 'select biblionumber from virtualshelfcontents where shelfnumber = ?';
my $dbh = C4::Context->dbh;
my $sth = $dbh->prepare($query)
- or die $dbh->errstr;
+ or die $dbh->errstr;
$sth->execute( $shelf )
- or die $sth->errstr;
+ or die $sth->errstr;
$sth;
}
my ($code,$shelf) = @_;
my $ref = _biblionumber_sth($shelf)->fetchall_arrayref;
map {
- $_=$$_[0];
- $code->();
+ $_=$$_[0];
+ $code->();
} @$ref;
}
my $query = qq(
SELECT DISTINCT shelfnumber
FROM virtualshelves
- LEFT JOIN virtualshelfshares sh USING (shelfnumber)
+ LEFT JOIN virtualshelfshares sh USING (shelfnumber)
WHERE shelfname=? AND shelfnumber<>?);
if($cat==1) {
$query.= ' AND (sh.borrowernumber=? OR owner=?) AND category=1';
sub HandleNewVirtualShelf {
if($authorized= ShelfPossibleAction($loggedinuser, undef, $category==1? 'new_private': 'new_public')) {
- $shelfnumber = AddShelf( {
+ $shelfnumber = AddShelf( {
shelfname => $newvirtualshelf,
category => $category }, $loggedinuser);
- if($shelfnumber == -1) {
- $authorized=0;
- $errcode=1;
- return;
- }
- AddBibliosToShelf($shelfnumber, @biblionumber);
- #Reload the page where you came from
- print $query->header;
- print "<html><meta http-equiv=\"refresh\" content=\"0\" /><body onload=\"window.opener.location.reload(true);self.close();\"></body></html>";
+ if($shelfnumber == -1) {
+ $authorized=0;
+ $errcode=1;
+ return;
+ }
+ AddBibliosToShelf($shelfnumber, @biblionumber);
+ #Reload the page where you came from
+ print $query->header;
+ print "<html><meta http-equiv=\"refresh\" content=\"0\" /><body onload=\"window.opener.location.reload(true);self.close();\"></body></html>";
}
}
sub HandleShelfNumber {
if($authorized= ShelfPossibleAction($loggedinuser, $shelfnumber, 'add')) {
- AddBibliosToShelf($shelfnumber,@biblionumber);
- #Close this page and return
- print $query->header;
- print "<html><meta http-equiv=\"refresh\" content=\"0\" /><body onload=\"self.close();\"></body></html>";
+ AddBibliosToShelf($shelfnumber,@biblionumber);
+ #Close this page and return
+ print $query->header;
+ print "<html><meta http-equiv=\"refresh\" content=\"0\" /><body onload=\"self.close();\"></body></html>";
}
}
#adding to specific shelf
my ($singleshelf, $singleshelfname, $singlecategory)= GetShelf($query->param('selectedshelf'));
$template->param(
- singleshelf => 1,
- shelfnumber => $singleshelf,
- shelfname => $singleshelfname,
- "category$singlecategory" => 1
+ singleshelf => 1,
+ shelfnumber => $singleshelf,
+ shelfname => $singleshelfname,
+ "category$singlecategory" => 1
);
}
}
my $privateshelves = GetAllShelves(1,$loggedinuser,1);
if(@{$privateshelves}){
$template->param (
- privatevirtualshelves => $privateshelves,
- existingshelves => 1
- );
+ privatevirtualshelves => $privateshelves,
+ existingshelves => 1
+ );
}
my $publicshelves = GetAllShelves(2,$loggedinuser,1);
if(@{$publicshelves}){
$template->param (
- publicvirtualshelves => $publicshelves,
- existingshelves => 1
- );
+ publicvirtualshelves => $publicshelves,
+ existingshelves => 1
+ );
}
}
sub LoadBib {
for my $bib (@biblionumber) {
my $data = GetBiblioData( $bib );
- push(@biblios,
- { biblionumber => $bib,
- title => $data->{'title'},
- author => $data->{'author'},
- } );
+ push(@biblios,
+ { biblionumber => $bib,
+ title => $data->{'title'},
+ author => $data->{'author'},
+ } );
}
$template->param(
multiple => (scalar(@biblios) > 1),
- total => scalar @biblios,
- biblios => \@biblios,
+ total => scalar @biblios,
+ biblios => \@biblios,
);
}
sub ShowTemplate {
$template->param (
- newshelf => $newshelf||0,
- authorized => $authorized,
- errcode => $errcode,
- OpacAllowPublicListCreation => C4::Context->preference('OpacAllowPublicListCreation'),
+ newshelf => $newshelf||0,
+ authorized => $authorized,
+ errcode => $errcode,
+ OpacAllowPublicListCreation => C4::Context->preference('OpacAllowPublicListCreation'),
);
output_html_with_http_headers $query, $cookie, $template->output;
}
sortfield => $sortfield,
category => $category }, $loggedinuser);
if($shelfnumber == -1) {
- $authorized=0;
- $errcode=1; #add failed
- return;
+ $authorized=0;
+ $errcode=1; #add failed
+ return;
}
AddBibliosToShelf($shelfnumber, @biblionumber);
#Reload the page where you came from
sub HandleShelfNumber {
if($authorized= ShelfPossibleAction($loggedinuser, $shelfnumber, 'add')) {
- AddBibliosToShelf($shelfnumber, @biblionumber);
- #Close this page and return
- print $query->header;
- print "<html><meta http-equiv=\"refresh\" content=\"0\" /><body onload=\"self.close();\"></body></html>";
+ AddBibliosToShelf($shelfnumber, @biblionumber);
+ #Close this page and return
+ print $query->header;
+ print "<html><meta http-equiv=\"refresh\" content=\"0\" /><body onload=\"self.close();\"></body></html>";
}
else {
- $errcode=2; #no perm
+ $errcode=2; #no perm
}
}
#confirm adding to specific shelf
my ($singleshelf, $singleshelfname, $singlecategory)= GetShelf($shelfnumber);
$template->param(
- singleshelf => 1,
- shelfnumber => $singleshelf,
- shelfname => $singleshelfname,
- "category$singlecategory" => 1
+ singleshelf => 1,
+ shelfnumber => $singleshelf,
+ shelfname => $singleshelfname,
+ "category$singlecategory" => 1
);
}
else {
- $errcode=2; #no perm
+ $errcode=2; #no perm
}
}
my $privateshelves = GetAllShelves(1,$loggedinuser,1);
my $publicshelves = GetAllShelves(2,$loggedinuser,1);
$template->param(
- privatevirtualshelves => $privateshelves,
- publicvirtualshelves => $publicshelves,
+ privatevirtualshelves => $privateshelves,
+ publicvirtualshelves => $publicshelves,
);
}
my @biblios;
for my $bib (@biblionumber) {
my $data = GetBiblioData($bib);
- push(@biblios,
- { biblionumber => $bib,
- title => $data->{'title'},
- author => $data->{'author'},
- } );
+ push(@biblios,
+ { biblionumber => $bib,
+ title => $data->{'title'},
+ author => $data->{'author'},
+ } );
}
$template->param(
multiple => (scalar(@biblios) > 1),
- total => scalar @biblios,
- biblios => \@biblios,
+ total => scalar @biblios,
+ biblios => \@biblios,
);
}
sub ShowTemplate {
$template->param (
- newshelf => $newshelf||0,
- authorized => $authorized,
- errcode => $errcode,
+ newshelf => $newshelf||0,
+ authorized => $authorized,
+ errcode => $errcode,
);
output_html_with_http_headers $query, $cookie, $template->output;
}