Bug 28375: (QA follow-up) Remove two remaining interface params
[srvgit] / opac / opac-request-article.pl
index e6ea45c..dcf9f21 100755 (executable)
@@ -21,26 +21,33 @@ use Modern::Perl;
 
 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');
@@ -54,34 +61,80 @@ if ( $action eq 'create' ) {
     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 };