From e651ebf89f76430fde0f6d6abf6d0dc32632f0c6 Mon Sep 17 00:00:00 2001 From: tipaul Date: Fri, 28 May 2004 08:28:22 +0000 Subject: [PATCH] adding suggestions in OPAC --- C4/Suggestions.pm | 151 +++++++++++++++++++++++++++++++++++++++ opac/opac-main.pl | 4 +- opac/opac-suggestions.pl | 55 ++++++++++++++ 3 files changed, 209 insertions(+), 1 deletion(-) create mode 100644 C4/Suggestions.pm create mode 100755 opac/opac-suggestions.pl diff --git a/C4/Suggestions.pm b/C4/Suggestions.pm new file mode 100644 index 0000000000..ada7f62824 --- /dev/null +++ b/C4/Suggestions.pm @@ -0,0 +1,151 @@ +package C4::Suggestions; + +# $Id$ + +# Copyright 2000-2002 Katipo Communications +# +# This file is part of Koha. +# +# Koha is free software; you can redistribute it and/or modify it under the +# terms of the GNU General Public License as published by the Free Software +# Foundation; either version 2 of the License, or (at your option) any later +# version. +# +# Koha is distributed in the hope that it will be useful, but WITHOUT ANY +# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR +# A PARTICULAR PURPOSE. See the GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License along with +# Koha; if not, write to the Free Software Foundation, Inc., 59 Temple Place, +# Suite 330, Boston, MA 02111-1307 USA + +use strict; +require Exporter; +use DBI; +use C4::Context; +use vars qw($VERSION @ISA @EXPORT); + +# set the version for version checking +$VERSION = 0.01; + +=head1 NAME + +C4::Accounts - Functions for dealing with Koha authorities + +=head1 SYNOPSIS + + use C4::Suggestions; + +=head1 DESCRIPTION + +The functions in this module deal with the suggestions : +* in OPAC +* in librarian interface + +A suggestion is done in the OPAC. It has the status "ASKED" +When a librarian manages the suggestion, he can set the status to "REJECTED" or "ORDERED". +When a book is ordered and arrived in the library, the status becomes "AVAILABLE" +All suggestions of a borrower by the borrower itself. +Suggestions done by other can be seen when not "AVAILABLE" + +=head1 FUNCTIONS + +=over 2 + +=cut + +@ISA = qw(Exporter); +@EXPORT = qw( &newsuggestion + &searchsuggestion + &delsuggestion + ); + +=item SearchSuggestion + + (\@array) = &SearchSuggestion($user) + + searches for a suggestion + +C<$user> is the user code (used as suggestor filter) + +return : +C<\@array> : the suggestions found. Array of hash. +Note the status is stored twice : +* in the status field +* as parameter ( for example ASKED => 1, or REJECTED => 1) . This is for template & translation purposes. + +=cut +sub searchsuggestion { + my ($user,$author,$title,$publishercode,$status,$suggestedbyme)=@_; + my $dbh = C4::Context->dbh; + my $query="Select suggestions.*, + U1.surname as surnamesuggestedby,U1.firstname as firstnamesuggestedby, + U2.surname as surnamemanagedby,U2.firstname as firstnamemanagedby + from suggestions,borrowers as U1 + left join borrowers as U2 on managedby=U2.borrowernumber + where suggestedby=U1.borrowernumber"; + my @sql_params; + if ($author) { + push @sql_params,"%".$author."%"; + $query .= " and author like ?"; + } + if ($title) { + push @sql_params,"%".$title."%"; + $query .= " and suggestions.title like ?"; + } + if ($publishercode) { + push @sql_params,"%".$publishercode."%"; + $query .= " and publishercode like ?"; + } + if ($status) { + push @sql_params,$status; + $query .= " and status=?"; + } + if ($suggestedbyme) { + push @sql_params,$user; + $query .= " and suggestedby=?"; + } else { + $query .= " and managedby is NULL"; + } + my $sth=$dbh->prepare($query); + $sth->execute(@sql_params); + my @results; + my $even=1; # the even variable is used to set even / odd lines, for highlighting + while (my $data=$sth->fetchrow_hashref){ + $data->{$data->{status}} = 1; + if ($even) { + $even=0; + $data->{even}=1; + } else { + $even=1; + } + push(@results,$data); + } + return (\@results); +} + +sub newsuggestion { + my ($borrowernumber,$title,$author,$publishercode,$note) = @_; + my $dbh = C4::Context->dbh; + my $sth = $dbh->prepare("insert into suggestions (suggestedby,title,author,publishercode,note) values (?,?,?,?,?)"); + $sth->execute($borrowernumber,$title,$author,$publishercode,$note); +} + +sub delsuggestion { + my ($borrowernumber,$suggestionnumber) = @_; + my $dbh = C4::Context->dbh; + # check that the suggestion comes from the suggestor + my $sth = $dbh->prepare("select suggestedby from suggestions where suggestionnumber=?"); + $sth->execute($suggestionnumber); + my ($suggestedby) = $sth->fetchrow; + if ($suggestedby eq $borrowernumber) { + $sth = $dbh->prepare("delete from suggestions where suggestionnumber=?"); + $sth->execute($suggestionnumber); + } +} + +=back + +=head1 SEE ALSO + +=cut diff --git a/opac/opac-main.pl b/opac/opac-main.pl index 202a54e8b2..cbeb288a6b 100755 --- a/opac/opac-main.pl +++ b/opac/opac-main.pl @@ -26,6 +26,7 @@ my $CGIitemtype=CGI::scrolling_list( -name => 'itemtype', -size => 1, -multiple => 0 ); $sth->finish; + my ($template, $borrowernumber, $cookie) = get_template_and_user({template_name => "opac-main.tmpl", type => "opac", @@ -33,7 +34,8 @@ my ($template, $borrowernumber, $cookie) authnotrequired => 1, flagsrequired => {borrow => 1}, }); - $template->param(CGIitemtype => $CGIitemtype, + suggestion => C4::Context->preference("suggestion"), ); +warn "X : ".C4::Context->preference("suggestion"); output_html_with_http_headers $input, $cookie, $template->output; diff --git a/opac/opac-suggestions.pl b/opac/opac-suggestions.pl new file mode 100755 index 0000000000..ba533ed6d5 --- /dev/null +++ b/opac/opac-suggestions.pl @@ -0,0 +1,55 @@ +#!/usr/bin/perl +use strict; +require Exporter; +use CGI; +use HTML::Template; + +use C4::Auth; # get_template_and_user +use C4::Interface::CGI::Output; +use C4::Suggestions; + +my $input = new CGI; +my $title = $input->param('title'); +my $author = $input->param('author'); +my $publishercode = $input->param('publishercode'); +my $status = $input->param('status'); +my $suggestedbyme = $input->param('suggestedbyme'); +my $note = $input->param('note'); +my $op = $input->param('op'); +$op = 'else' unless $op; + +my $dbh = C4::Context->dbh; +my ($template, $borrowernumber, $cookie) + = get_template_and_user({template_name => "opac-suggestions.tmpl", + type => "opac", + query => $input, + authnotrequired => 1, + flagsrequired => {borrow => 1}, + }); +if ($op eq "add_confirm") { + &newsuggestion($borrowernumber,$title,$author,$publishercode,$note); + # empty fields, to avoid filter in "searchsuggestion" + $title=''; + $author=''; + $publishercode=''; + $op='else'; +} + +if ($op eq "delete_confirm") { + my @delete_field = $input->param("delete_field"); + foreach my $delete_field (@delete_field) { + &delsuggestion($borrowernumber,$delete_field); + } + $op='else'; +} + +my $suggestions_loop= &searchsuggestion($borrowernumber,$author,$title,$publishercode,$status,$suggestedbyme); +$template->param(suggestions_loop => $suggestions_loop, + title => $title, + author => $author, + publishercode => $publishercode, + status => $status, + suggestedbyme => $suggestedbyme, + "op_$op" => 1, +); +output_html_with_http_headers $input, $cookie, $template->output; -- 2.39.2