X-Git-Url: http://koha-dev.rot13.org:8081/gitweb/?a=blobdiff_plain;f=opac%2Fopac-sendshelf.pl;h=f5600a27e3e20e9a3872245a5ea123266ab3051b;hb=326c4e23ced56669c9435fadc0f3ff1bb659dc5f;hp=8512c6572b8695fd4c655e3408503f85df4daa38;hpb=0114465ced0d87aed51e8632e0ec1c005ae4fce3;p=srvgit diff --git a/opac/opac-sendshelf.pl b/opac/opac-sendshelf.pl index 8512c6572b..f5600a27e3 100755 --- a/opac/opac-sendshelf.pl +++ b/opac/opac-sendshelf.pl @@ -17,185 +17,134 @@ # 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 qw ( -utf8 ); -use Encode qw( encode ); -use Carp; - -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; +use Encode; +use Carp qw( carp ); +use Try::Tiny qw( catch try ); + +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; -my $query = new CGI; +# 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 ( +my ( $template, $borrowernumber, $cookie ) = get_template_and_user( { - template_name => "opac-sendshelfform.tt", - query => $query, - type => "opac", - authnotrequired => 0, + template_name => "opac-sendshelfform.tt", + query => $query, + type => "opac", } ); 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 $message = Koha::Email->new(); - my $comment = $query->param('comment'); - - my %mail = $message->create_message_headers( - { - to => $email, +my $shelf = Koha::Virtualshelves->find($shelfid); +if ( $shelf and $shelf->can_be_viewed($borrowernumber) ) { + if ($email) { + my $comment = $query->param('comment'); + + 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 @biblionumbers; + while ( my $content = $contents->next ) { + push @biblionumbers, $content->biblionumber; + my $biblio = Koha::Biblios->find( $content->biblionumber ); + $iso2709 .= $biblio->metadata->record->as_usmarc(); } - ); - my ( $template2, $borrowernumber, $cookie ) = get_template_and_user( - { - template_name => "opac-sendshelf.tt", - query => $query, - type => "opac", - authnotrequired => 1, + 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 ); } - ); - - my @shelf = GetShelf($shelfid); - my ($items, $totitems) = GetShelfContents($shelfid); - my $marcflavour = C4::Context->preference('marcflavour'); - 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, 1); - 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); - - $template2->param( - BIBLIO_RESULTS => \@results, - 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"; } - $mail{subject} = Encode::encode("UTF-8", $mail{subject}); - - my $email_header = ""; - if ( $template_res =~ /
(.*)/s ) { - $email_header = $1; - $email_header =~ s|\n?(.*)\n?|$1|; - $email_header = encode_qp(Encode::encode("UTF-8", $email_header)); - } - - 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(Encode::encode("UTF-8", $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( + shelfid => $shelfid, + email => $email, + ); + output_html_with_http_headers $query, $cookie, $template->output, + undef, { force_no_caching => 1 }; - # Sending mail - if ( sendmail %mail ) { - # do something if it works.... - $template->param( SENT => "1" ); } else { - # do something if it doesnt work.... - carp "Error sending mail: $Mail::Sendmail::error \n"; - $template->param( error => 1 ); + $template->param( + shelfid => $shelfid, + url => "/cgi-bin/koha/opac-sendshelf.pl", + ); + output_html_with_http_headers $query, $cookie, $template->output, + undef, { force_no_caching => 1 }; } - - $template->param( email => $email ); - output_html_with_http_headers $query, $cookie, $template->output; - - -}else{ - $template->param( shelfid => $shelfid, - url => "/cgi-bin/koha/opac-sendshelf.pl", - ); - output_html_with_http_headers $query, $cookie, $template->output; } - -} else { - $template->param( invalidlist => 1, - url => "/cgi-bin/koha/opac-sendshelf.pl", +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 }; }