X-Git-Url: http://koha-dev.rot13.org:8081/gitweb/?a=blobdiff_plain;f=opac%2Fopac-suggestions.pl;h=e086b14ffb77f075f4f0d3e0d57ae4a75f047a9b;hb=2b90ea2cb0e5e976de7ddef0151ae83d8ac578e6;hp=8a43353ee896c72c19a56245b1cc007186b86315;hpb=d339abf0bfc334a819818bbb9b4c31f23326cbd1;p=srvgit diff --git a/opac/opac-suggestions.pl b/opac/opac-suggestions.pl index 8a43353ee8..e086b14ffb 100755 --- a/opac/opac-suggestions.pl +++ b/opac/opac-suggestions.pl @@ -2,116 +2,234 @@ # 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 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 3 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. +# 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 +# You should have received a copy of the GNU General Public License +# along with Koha; if not, see . use strict; use warnings; -use CGI; +use CGI qw ( -utf8 ); +use Encode qw( encode ); use C4::Auth; # get_template_and_user -use C4::Branch; +use C4::Members; use C4::Koha; use C4::Output; use C4::Suggestions; use C4::Koha; -use C4::Dates; +use C4::Scrubber; + +use Koha::AuthorisedValues; +use Koha::Libraries; +use Koha::Patrons; + +use Koha::DateUtils qw( dt_from_string ); my $input = new CGI; -my $allsuggestions = $input->param('showall'); my $op = $input->param('op'); my $suggestion = $input->Vars; -delete $$suggestion{$_} foreach qw; -$op = 'else' unless $op; +my $negcaptcha = $input->param('negcap'); +my $suggested_by_anyone = $input->param('suggested_by_anyone') || 0; -my ( $template, $borrowernumber, $cookie ); +# If a spambot accidentally populates the 'negcap' field in the sugesstions form, then silently skip and return. +if ($negcaptcha ) { + print $input->redirect("/cgi-bin/koha/opac-suggestions.pl"); + exit; +} else { + # don't pass 'negcap' column to DB, else DBI::Class will error + # DBIx::Class::Row::store_column(): No such column 'negcap' on Koha::Schema::Result::Suggestion at Koha/C4/Suggestions.pm + delete $suggestion->{negcap}; +} +#If suggestions are turned off we redirect to 404 error. This will also redirect guest suggestions +if ( ! C4::Context->preference('suggestion') ) { + print $input->redirect("/cgi-bin/koha/errors/404.pl"); + exit; +} + +delete $suggestion->{$_} foreach qw; +$op = 'else' unless $op; -if ( C4::Context->preference("AnonSuggestions") ) { +my ( $template, $borrowernumber, $cookie, @messages ); +my $deleted = $input->param('deleted'); +my $submitted = $input->param('submitted'); + +if ( C4::Context->preference("AnonSuggestions") or ( C4::Context->preference("OPACViewOthersSuggestions") and $op eq 'else' ) ) { ( $template, $borrowernumber, $cookie ) = get_template_and_user( { - template_name => "opac-suggestions.tmpl", + template_name => "opac-suggestions.tt", query => $input, type => "opac", - authnotrequired => 1, + authnotrequired => ( C4::Context->preference("OpacPublic") ? 1 : 0 ), } ); - if ( !$$suggestion{suggestedby} ) { - $$suggestion{suggestedby} = C4::Context->preference("AnonSuggestions"); - } } else { ( $template, $borrowernumber, $cookie ) = get_template_and_user( { - template_name => "opac-suggestions.tmpl", + template_name => "opac-suggestions.tt", query => $input, type => "opac", authnotrequired => 0, } ); } -if ($allsuggestions){ - delete $$suggestion{suggestedby}; + +if ( $op eq 'else' ) { + if ( C4::Context->preference("OPACViewOthersSuggestions") ) { + if ( $borrowernumber ) { + # A logged in user is able to see suggestions from others + $suggestion->{suggestedby} = $suggested_by_anyone + ? undef + : $borrowernumber; + } + else { + # Non logged in user is able to see all suggestions + $suggestion->{suggestedby} = undef; + } + } + else { + if ( $borrowernumber ) { + $suggestion->{suggestedby} = $borrowernumber; + } + else { + $suggestion->{suggestedby} = -1; + } + } +} else { + if ( $borrowernumber ) { + $suggestion->{suggestedby} = $borrowernumber; + } + else { + $suggestion->{suggestedby} = C4::Context->preference("AnonymousPatron"); + } } -else { - $$suggestion{suggestedby} ||= $borrowernumber unless ($allsuggestions); + +my $patrons_pending_suggestions_count = 0; +if ( $borrowernumber && C4::Context->preference("MaxOpenSuggestions") ne '' ) { + $patrons_pending_suggestions_count = scalar @{ SearchSuggestion( { suggestedby => $borrowernumber, STATUS => 'ASKED' } ) } ; } -# warn "bornum:",$borrowernumber; -use YAML; -my $suggestions_loop = - &SearchSuggestion( $suggestion); + +my $suggestions_loop = &SearchSuggestion($suggestion); if ( $op eq "add_confirm" ) { - if (@$suggestions_loop>=1){ - #some suggestion are answering the request Donot Add - } - else { - $$suggestion{'suggestioncreateddate'}=C4::Dates->today; - $$suggestion{'branchcode'}=C4::Context->userenv->{"branch"}; - &NewSuggestion($suggestion); - # empty fields, to avoid filter in "SearchSuggestion" - $$suggestion{$_}='' foreach qw; - $suggestions_loop = - &SearchSuggestion( $suggestion ); - } - $op = 'else'; + if ( C4::Context->preference("MaxOpenSuggestions") ne '' && $patrons_pending_suggestions_count >= C4::Context->preference("MaxOpenSuggestions") ) #only check limit for signed in borrowers + { + push @messages, { type => 'error', code => 'too_many' }; + } + elsif ( @$suggestions_loop >= 1 ) { + + #some suggestion are answering the request Donot Add + for my $suggestion (@$suggestions_loop) { + push @messages, + { + type => 'error', + code => 'already_exists', + id => $suggestion->{suggestionid} + }; + last; + } + } + else { + my $scrubber = C4::Scrubber->new(); + foreach my $suggest ( keys %$suggestion ) { + + # Don't know why the encode is needed for Perl v5.10 here + $suggestion->{$suggest} = Encode::encode( "utf8", + $scrubber->scrub( $suggestion->{$suggest} ) ); + } + $suggestion->{suggesteddate} = dt_from_string; + $suggestion->{branchcode} = $input->param('branchcode') || C4::Context->userenv->{"branch"}; + + &NewSuggestion($suggestion); + $patrons_pending_suggestions_count++; + + # delete empty fields, to avoid filter in "SearchSuggestion" + foreach my $field ( qw( title author publishercode copyrightdate place collectiontitle isbn STATUS ) ) { + delete $suggestion->{$field}; #clear search filters (except borrower related) to show all suggestions after placing a new one + } + $suggestions_loop = &SearchSuggestion($suggestion); + + push @messages, { type => 'info', code => 'success_on_inserted' }; + + } + $op = 'else'; } if ( $op eq "delete_confirm" ) { - my @delete_field = $input->param("delete_field"); + my @delete_field = $input->multi_param("delete_field"); foreach my $delete_field (@delete_field) { &DelSuggestion( $borrowernumber, $delete_field ); } $op = 'else'; + print $input->redirect("/cgi-bin/koha/opac-suggestions.pl?op=else"); + exit; +} + +map{ + my $s = $_; + my $library = Koha::Libraries->find($s->{branchcodesuggestedby}); + $library ? $s->{branchcodesuggestedby} = $library->branchname : () +} @$suggestions_loop; + +foreach my $suggestion(@$suggestions_loop) { + if($suggestion->{'suggestedby'} == $borrowernumber) { + $suggestion->{'showcheckbox'} = $borrowernumber; + } else { + $suggestion->{'showcheckbox'} = 0; + } + if($suggestion->{'patronreason'}){ + my $av = Koha::AuthorisedValues->search({ category => 'OPAC_SUG', authorised_value => $suggestion->{patronreason} }); + $suggestion->{'patronreason'} = $av->count ? $av->next->opac_description : ''; + } +} + +my $patron_reason_loop = GetAuthorisedValues("OPAC_SUG"); + +# Is the person allowed to choose their branch +if ( C4::Context->preference("AllowPurchaseSuggestionBranchChoice") ) { + +# pass the pickup branch along.... + my $userbranch = ''; + if (C4::Context->userenv && C4::Context->userenv->{'branch'}) { + $userbranch = C4::Context->userenv->{'branch'}; + } + my $branchcode = $input->param('branchcode'); + unless ( $branchcode ) { + my $patron = Koha::Patrons->find( $borrowernumber ); + $branchcode = $patron->branchcode || $userbranch || '' ; + } + + $template->param( branchcode => $branchcode ); } -map{ $_->{'branchcodesuggestedby'}=GetBranchInfo($_->{'branchcodesuggestedby'})->[0]->{'branchname'}} @$suggestions_loop; -my $supportlist=GetSupportList(); -foreach my $support(@$supportlist){ - if ($$support{'imageurl'}){ - $$support{'imageurl'}= getitemtypeimagelocation( 'opac', $$support{'imageurl'} ); - } - else { - delete $$support{'imageurl'} - } + +my $mandatoryfields = ''; +{ + last unless ($op eq 'add'); + my $fldsreq_sp = C4::Context->preference("OPACSuggestionMandatoryFields") || 'title'; + $mandatoryfields = join(', ', (map { '"'.$_.'"'; } sort split(/\s*\,\s*/, $fldsreq_sp))); } + $template->param( - %$suggestion, - itemtypeloop=> $supportlist, - suggestions_loop => $suggestions_loop, - showall => $allsuggestions, - "op_$op" => 1, - suggestionsview => 1 + %$suggestion, + suggestions_loop => $suggestions_loop, + patron_reason_loop => $patron_reason_loop, + "op_$op" => 1, + $op => 1, + messages => \@messages, + suggestionsview => 1, + suggested_by_anyone => $suggested_by_anyone, + mandatoryfields => $mandatoryfields, + patrons_pending_suggestions_count => $patrons_pending_suggestions_count, ); - output_html_with_http_headers $input, $cookie, $template->output;