Bug 30844: The OPAC detail page's browser is limited to the current page of results...
[srvgit] / opac / opac-request-article.pl
old mode 100644 (file)
new mode 100755 (executable)
index d20e8e8..dcf9f21
@@ -21,12 +21,16 @@ 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;
 
+use Scalar::Util qw( blessed );
+use Try::Tiny;
+
 my $cgi = CGI->new;
 
 my ( $template, $borrowernumber, $cookie ) = get_template_and_user(
@@ -57,29 +61,53 @@ 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 $success;
 
-    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,
+    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'
+            );
         }
-    )->store();
+        else {
+            Koha::Logger->get->debug("Unhandled exception when placing an article request ($_)");
+            $template->param(
+                error_message => 'article_request_unhandled_exception'
+            );
+        }
+    };
 
-    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('ArticleRequestsHostRedirection') ) {
+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) {
@@ -94,6 +122,15 @@ elsif ( !$action && C4::Context->preference('ArticleRequestsHostRedirection') )
 
 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,