Bug 3150: Move emails for sending cart and list contents to notices
[srvgit] / virtualshelves / sendshelf.pl
1 #!/usr/bin/perl
2
3 # Copyright 2009 BibLibre
4 #
5 # This file is part of Koha.
6 #
7 # Koha is free software; you can redistribute it and/or modify it
8 # under the terms of the GNU General Public License as published by
9 # the Free Software Foundation; either version 3 of the License, or
10 # (at your option) any later version.
11 #
12 # Koha is distributed in the hope that it will be useful, but
13 # WITHOUT ANY WARRANTY; without even the implied warranty of
14 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 # GNU General Public License for more details.
16 #
17 # You should have received a copy of the GNU General Public License
18 # along with Koha; if not, see <http://www.gnu.org/licenses>.
19
20 use Modern::Perl;
21
22 use CGI qw ( -utf8 );
23 use Encode;
24 use Carp qw( carp );
25 use Try::Tiny qw( catch try );
26
27 use C4::Auth qw( get_template_and_user );
28 use C4::Biblio qw(
29     GetMarcISBN
30     GetMarcSubjects
31 );
32 use C4::Output qw(
33     output_html_with_http_headers
34     output_and_exit
35 );
36
37 use Koha::Biblios;
38 use Koha::Email;
39 use Koha::Virtualshelves;
40
41 my $query = CGI->new;
42
43 my ( $template, $loggedinuser, $cookie ) = get_template_and_user(
44     {
45         template_name   => "virtualshelves/sendshelfform.tt",
46         query           => $query,
47         type            => "intranet",
48         flagsrequired   => { catalogue => 1 },
49     }
50 );
51
52 my $shelfid    = $query->param('shelfid');
53 my $to_address = $query->param('email');
54
55 my $shelf = Koha::Virtualshelves->find( $shelfid );
56
57 output_and_exit( $query, $cookie, $template, 'insufficient_permission' )
58     if $shelf && !$shelf->can_be_viewed( $loggedinuser );
59
60 if ($to_address) {
61     my $comment = $query->param('comment');
62
63     my ( $template2, $borrowernumber, $cookie ) = get_template_and_user(
64         {
65         template_name   => "virtualshelves/sendshelf.tt",
66         query           => $query,
67         type            => "intranet",
68         flagsrequired   => { catalogue => 1 },
69         }
70     );
71
72     my $patron = Koha::Patrons->find( $borrowernumber );
73     my $user_email = $patron->first_valid_email_address;
74     my $contents = $shelf->get_contents;
75     my @biblionumbers;
76     my $iso2709;
77
78     while ( my $content = $contents->next ) {
79         push @biblionumbers, $content->biblionumber;
80         my $biblio = Koha::Biblios->find($content->biblionumber);
81         $iso2709 .= $biblio->metadata->record->as_usmarc();
82     };
83
84     if ( !defined $iso2709 ) {
85         carp "Error sending mail: empty basket";
86         $template->param( error => 1 );
87     } elsif ( !defined $user_email or $user_email eq '' ) {
88         carp "Error sending mail: sender's email address is invalid";
89         $template->param( error => 1 );
90     } else {
91         my %loops = (
92             biblio => \@biblionumbers,
93         );
94
95         my %substitute = (
96             comment => $comment,
97             listname => $shelf->shelfname,
98         );
99
100         my $letter = C4::Letters::GetPreparedLetter(
101             module => 'catalogue',
102             letter_code => 'LIST',
103             lang => $patron->lang,
104             tables => {
105                 borrowers => $borrowernumber,
106             },
107             message_transport_type => 'email',
108             loops => \%loops,
109             substitute => \%substitute,
110         );
111
112         my $attachment = {
113             filename => 'shelf.iso2709',
114             type => 'application/octet-stream',
115             content => Encode::encode("UTF-8", $iso2709),
116         };
117
118         C4::Letters::EnqueueLetter({
119             letter => $letter,
120             message_transport_type => 'email',
121             borrowernumber => $patron->borrowernumber,
122             to_address => $to_address,
123             reply_address => $user_email,
124             attachments => [$attachment],
125         });
126
127         $template->param( SENT => 1 );
128     }
129
130     $template->param( email => $to_address );
131     output_html_with_http_headers $query, $cookie, $template->output;
132
133 }
134 else {
135     $template->param(
136         shelfid => $shelfid,
137         url     => "/cgi-bin/koha/virtualshelves/sendshelf.pl",
138     );
139     output_html_with_http_headers $query, $cookie, $template->output;
140 }