X-Git-Url: http://koha-dev.rot13.org:8081/gitweb/?a=blobdiff_plain;f=opac%2Fopac-sendshelf.pl;h=758a32c8db56c36ca5dc163df669c41ab5342e04;hb=a184a88cb8148817d05f83c415e00b08844fb1c4;hp=852ef8d4b4d3731f76e300fbe596f36b978b8fd8;hpb=76e8bb0fabd4a9ef85fd2dc5ad604c446a50f751;p=srvgit diff --git a/opac/opac-sendshelf.pl b/opac/opac-sendshelf.pl index 852ef8d4b4..758a32c8db 100755 --- a/opac/opac-sendshelf.pl +++ b/opac/opac-sendshelf.pl @@ -4,202 +4,147 @@ # # 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., -# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +# You should have received a copy of the GNU General Public License +# along with Koha; if not, see . -use strict; -use warnings; +use Modern::Perl; -use CGI; -use Encode qw(decode encode); -use Carp; +use CGI qw ( -utf8 ); +use Encode; +use Carp qw( carp ); +use Try::Tiny qw( catch try ); -use Mail::Sendmail; -use MIME::QuotedPrint; -use MIME::Base64; -use C4::Auth; -use C4::Biblio; -use C4::Items; -use C4::Output; -use C4::VirtualShelves; -use C4::Members; - -my $query = new CGI; +use C4::Auth qw( get_template_and_user ); +use C4::Biblio qw( + GetFrameworkCode + GetMarcISBN + GetMarcSubjects +); +use C4::Output qw( output_html_with_http_headers ); +use Koha::Biblios; +use Koha::Email; +use Koha::Patrons; +use Koha::Virtualshelves; + +my $query = CGI->new; + +# if virtualshelves is disabled, leave immediately +if ( ! C4::Context->preference('virtualshelves') ) { + print $query->redirect("/cgi-bin/koha/errors/404.pl"); + exit; +} my ( $template, $borrowernumber, $cookie ) = get_template_and_user ( { - template_name => "opac-sendshelfform.tmpl", + template_name => "opac-sendshelfform.tt", query => $query, type => "opac", - authnotrequired => 0, - flagsrequired => { borrow => 1 }, } ); my $shelfid = $query->param('shelfid'); my $email = $query->param('email'); -my $dbh = C4::Context->dbh; - -if ( ShelfPossibleAction( (defined($borrowernumber) ? $borrowernumber : -1), $shelfid, 'view' ) ) { - -if ( $email ) { - my $email_from = C4::Context->preference('KohaAdminEmailAddress'); +my $shelf = Koha::Virtualshelves->find( $shelfid ); +if ( $shelf and $shelf->can_be_viewed( $borrowernumber ) ) { + if ( $email ) { my $comment = $query->param('comment'); - my %mail = ( - To => $email, - From => $email_from - ); - my ( $template2, $borrowernumber, $cookie ) = get_template_and_user( { - template_name => "opac-sendshelf.tmpl", + template_name => "opac-sendshelf.tt", query => $query, type => "opac", authnotrequired => 1, - flagsrequired => { borrow => 1 }, } ); - my @shelf = GetShelf($shelfid); - my ($items, $totitems) = GetShelfContents($shelfid); - my $marcflavour = C4::Context->preference('marcflavour'); + my $patron = Koha::Patrons->find( $borrowernumber ); + my $user_email = $patron->first_valid_email_address; + my $shelf = Koha::Virtualshelves->find( $shelfid ); + my $contents = $shelf->get_contents; my $iso2709; - my @results; - - # retrieve biblios from shelf - foreach my $biblio (@$items) { - my $biblionumber = $biblio->{biblionumber}; - my $fw = GetFrameworkCode($biblionumber); - my $dat = GetBiblioData($biblionumber); - my $record = GetMarcBiblio($biblionumber); - my $marcnotesarray = GetMarcNotes( $record, $marcflavour ); - my $marcauthorsarray = GetMarcAuthors( $record, $marcflavour ); - my $marcsubjctsarray = GetMarcSubjects( $record, $marcflavour ); - my $subtitle = GetRecordValue('subtitle', $record, $fw); - - my @items = GetItemsInfo( $biblionumber ); - - $dat->{ISBN} = GetMarcISBN($record, $marcflavour); - $dat->{MARCNOTES} = $marcnotesarray; - $dat->{MARCSUBJCTS} = $marcsubjctsarray; - $dat->{MARCAUTHORS} = $marcauthorsarray; - $dat->{'biblionumber'} = $biblionumber; - $dat->{ITEM_RESULTS} = \@items; - $dat->{subtitle} = $subtitle; - $dat->{HASAUTHORS} = $dat->{'author'} || @$marcauthorsarray; - - $iso2709 .= $record->as_usmarc(); - - push( @results, $dat ); - } - - my $user = GetMember(borrowernumber => $borrowernumber); - if (C4::Context->preference('OPACBaseURL')){ - $template2->param( OPACBaseURL => C4::Context->preference('OPACBaseURL') ); - } - - $template2->param( - BIBLIO_RESULTS => \@results, - email_sender => $email_from, - comment => $comment, - shelfname => $shelf[1], - firstname => $user->{firstname}, - surname => $user->{surname}, - ); - - # Getting template result - my $template_res = $template2->output(); - my $body; - - # Analysing information and getting mail properties - if ( $template_res =~ /(.*)/s ) { - $mail{subject} = $1; - $mail{subject} =~ s|\n?(.*)\n?|$1|; - } - else { $mail{'subject'} = "no subject"; } - - my $email_header = ""; - if ( $template_res =~ /
(.*)/s ) { - $email_header = $1; - $email_header =~ s|\n?(.*)\n?|$1|; - $email_header = encode_qp($email_header); - } + my @biblionumbers; + while ( my $content = $contents->next ) { + push @biblionumbers, $content->biblionumber; + my $biblio = Koha::Biblios->find($content->biblionumber); + $iso2709 .= $biblio->metadata->record->as_usmarc(); + }; - my $email_file = "list.txt"; - if ( $template_res =~ /(.*)/s ) { - $email_file = $1; - $email_file =~ s|\n?(.*)\n?|$1|; - } - - if ( $template_res =~ /(.*)/s ) { - $body = $1; - $body =~ s|\n?(.*)\n?|$1|; - $body = encode_qp($body); - } - - my $boundary = "====" . time() . "===="; - - # We set and put the multipart content - $mail{'content-type'} = "multipart/mixed; boundary=\"$boundary\""; - - my $isofile = encode_base64(encode("UTF-8", $iso2709)); - $boundary = '--' . $boundary; - - $mail{body} = <param( SENT => "1" ); - } - else { - # do something if it doesnt work.... - carp "Error sending mail: $Mail::Sendmail::error \n"; + if ( !defined $iso2709 ) { + carp "Error sending mail: empty list"; + $template->param( error => 1 ); + } elsif ( !defined $user_email or $user_email eq '' ) { + carp "Error sending mail: sender's email address is invalid"; $template->param( error => 1 ); + } else { + my %loops = ( + biblio => \@biblionumbers, + ); + + my %substitute = ( + comment => $comment, + listname => $shelf->shelfname, + ); + + my $letter = C4::Letters::GetPreparedLetter( + module => 'catalogue', + letter_code => 'LIST', + lang => $patron->lang, + tables => { + borrowers => $borrowernumber, + }, + message_transport_type => 'email', + loops => \%loops, + substitute => \%substitute, + ); + + my $attachment = { + filename => 'list.iso2709', + type => 'application/octet-stream', + content => Encode::encode("UTF-8", $iso2709), + }; + + my $message_id = C4::Letters::EnqueueLetter({ + letter => $letter, + message_transport_type => 'email', + borrowernumber => $patron->borrowernumber, + to_address => $email, + reply_address => $user_email, + attachments => [$attachment], + }); + + C4::Letters::SendQueuedMessages({ message_id => $message_id }); + + $template->param( SENT => 1 ); } - $template->param( email => $email ); - output_html_with_http_headers $query, $cookie, $template->output; - + $template->param( + shelfid => $shelfid, + email => $email, + ); + output_html_with_http_headers $query, $cookie, $template->output, undef, { force_no_caching => 1 }; -}else{ + } else { $template->param( shelfid => $shelfid, url => "/cgi-bin/koha/opac-sendshelf.pl", ); - output_html_with_http_headers $query, $cookie, $template->output; -} - + output_html_with_http_headers $query, $cookie, $template->output, undef, { force_no_caching => 1 }; + } } else { $template->param( invalidlist => 1, url => "/cgi-bin/koha/opac-sendshelf.pl", ); - output_html_with_http_headers $query, $cookie, $template->output; + output_html_with_http_headers $query, $cookie, $template->output, undef, { force_no_caching => 1 }; }