adding suggestions in OPAC
authortipaul <tipaul>
Fri, 28 May 2004 08:28:22 +0000 (08:28 +0000)
committertipaul <tipaul>
Fri, 28 May 2004 08:28:22 +0000 (08:28 +0000)
C4/Suggestions.pm [new file with mode: 0644]
opac/opac-main.pl
opac/opac-suggestions.pl [new file with mode: 0755]

diff --git a/C4/Suggestions.pm b/C4/Suggestions.pm
new file mode 100644 (file)
index 0000000..ada7f62
--- /dev/null
@@ -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
index 202a54e..cbeb288 100755 (executable)
@@ -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 (executable)
index 0000000..ba533ed
--- /dev/null
@@ -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;