use CGI qw ( -utf8 );
-use C4::Auth;
-use C4::Output;
+use C4::Auth qw( get_template_and_user );
+use C4::Output qw( output_html_with_http_headers );
use Koha::Biblios;
+use Koha::Logger;
use Koha::Patrons;
-my $cgi = new CGI;
+use Scalar::Util qw( blessed );
+use Try::Tiny;
+
+my $cgi = CGI->new;
my ( $template, $borrowernumber, $cookie ) = get_template_and_user(
{
template_name => "opac-request-article.tt",
query => $cgi,
type => "opac",
- authnotrequired => 0,
- debug => 1,
}
);
my $action = $cgi->param('action') || q{};
my $biblionumber = $cgi->param('biblionumber');
+my $biblio = Koha::Biblios->find($biblionumber);
+if( !$biblio ) {
+ print $cgi->redirect("/cgi-bin/koha/errors/404.pl");
+ exit;
+}
if ( $action eq 'create' ) {
my $branchcode = $cgi->param('branchcode');
my $pages = $cgi->param('pages') || undef;
my $chapters = $cgi->param('chapters') || undef;
my $patron_notes = $cgi->param('patron_notes') || undef;
+ my $format = $cgi->param('format') || undef;
+ my $toc_request = $cgi->param('toc_request');
- my $ar = Koha::ArticleRequest->new(
- {
- borrowernumber => $borrowernumber,
- biblionumber => $biblionumber,
- branchcode => $branchcode,
- itemnumber => $itemnumber,
- title => $title,
- author => $author,
- volume => $volume,
- issue => $issue,
- date => $date,
- pages => $pages,
- chapters => $chapters,
- patron_notes => $patron_notes,
+
+ my $success;
+
+ try {
+ my $ar = Koha::ArticleRequest->new(
+ {
+ borrowernumber => $borrowernumber,
+ biblionumber => $biblionumber,
+ branchcode => $branchcode,
+ itemnumber => $itemnumber,
+ title => $title,
+ author => $author,
+ volume => $volume,
+ issue => $issue,
+ date => $date,
+ pages => $pages,
+ chapters => $chapters,
+ patron_notes => $patron_notes,
+ format => $format,
+ toc_request => $toc_request ? 1 : 0,
+ }
+ )->request;
+ $success = 1;
+ } catch {
+ if ( blessed $_ and $_->isa('Koha::Exceptions::ArticleRequest::LimitReached') ) {
+ $template->param(
+ error_message => 'article_request_limit_reached'
+ );
+ }
+ else {
+ Koha::Logger->get->debug("Unhandled exception when placing an article request ($_)");
+ $template->param(
+ error_message => 'article_request_unhandled_exception'
+ );
}
- )->store();
+ };
- print $cgi->redirect("/cgi-bin/koha/opac-user.pl#opac-user-article-requests");
- exit;
+ if ( $success ) {
+ print $cgi->redirect("/cgi-bin/koha/opac-user.pl#opac-user-article-requests");
+ exit;
+ }
+# Should we redirect?
+}
+elsif ( !$action && C4::Context->preference('ArticleRequestsOpacHostRedirection') ) {
+ # Conditions: no items, host item entry (MARC21 773)
+ my ( $host, $pageinfo ) = $biblio->get_marc_host( { no_items => 1 } );
+ if ($host) {
+ $template->param(
+ pageinfo => $pageinfo,
+ title => $biblio->title,
+ author => $biblio->author
+ );
+ $biblio = $host;
+ }
}
-my $biblio = Koha::Biblios->find($biblionumber);
my $patron = Koha::Patrons->find($borrowernumber);
+if(!$patron->can_request_article) {
+ $template->param(
+ error_message => 'article_request_limit_reached'
+ );
+}
+
+$template->param( article_request_fee => $patron->article_request_fee )
+ if $action ne 'create';
+
$template->param(
biblio => $biblio,
patron => $patron,
+ action => $action
);
output_html_with_http_headers $cgi, $cookie, $template->output, undef, { force_no_caching => 1 };