Bug 29939: Use the REST API for ratings
[srvgit] / opac / opac-illrequests.pl
index 9ff413a..e619707 100755 (executable)
 
 use Modern::Perl;
 
+use JSON qw( encode_json );
+
 use CGI qw ( -utf8 );
-use C4::Auth;
+use C4::Auth qw( get_template_and_user );
 use C4::Koha;
-use C4::Output;
+use C4::Output qw( output_html_with_http_headers );
 
+use Koha::Illrequest::Config;
 use Koha::Illrequests;
 use Koha::Libraries;
 use Koha::Patrons;
+use Koha::Illrequest::Availability;
 
-my $query = new CGI;
+my $query = CGI->new;
 
 # Grab all passed data
 # 'our' since Plack changes the scoping
@@ -45,9 +49,14 @@ my ( $template, $loggedinuser, $cookie ) = get_template_and_user({
     template_name   => "opac-illrequests.tt",
     query           => $query,
     type            => "opac",
-    authnotrequired => ( C4::Context->preference("OpacPublic") ? 1 : 0 ),
 });
 
+# Are we able to actually work?
+my $reduced  = C4::Context->preference('ILLOpacbackends');
+my $backends = Koha::Illrequest::Config->new->available_backends($reduced);
+my $backends_available = ( scalar @{$backends} > 0 );
+$template->param( backends_available => $backends_available );
+
 my $op = $params->{'method'} || 'list';
 
 if ( $op eq 'list' ) {
@@ -58,7 +67,7 @@ if ( $op eq 'list' ) {
     my $req = Koha::Illrequest->new;
     $template->param(
         requests => $requests,
-        backends    => $req->available_backends
+        backends    => $backends
     );
 
 } elsif ( $op eq 'view') {
@@ -76,11 +85,14 @@ if ( $op eq 'list' ) {
         illrequest_id  => $params->{illrequest_id}
     });
     $request->notesopac($params->{notesopac})->store;
+    # Send a notice to staff alerting them of the update
+    $request->send_staff_notice('ILL_REQUEST_MODIFIED');
     print $query->redirect(
         '/cgi-bin/koha/opac-illrequests.pl?method=view&illrequest_id=' .
         $params->{illrequest_id} .
         '&message=1'
     );
+    exit;
 } elsif ( $op eq 'cancreq') {
     my $request = Koha::Illrequests->find({
         borrowernumber => $loggedinuser,
@@ -92,7 +104,7 @@ if ( $op eq 'list' ) {
         $params->{illrequest_id} .
         '&message=1'
     );
-
+    exit;
 } elsif ( $op eq 'create' ) {
     if (!$params->{backend}) {
         my $req = Koha::Illrequest->new;
@@ -102,28 +114,76 @@ if ( $op eq 'list' ) {
     } else {
         my $request = Koha::Illrequest->new
             ->load_backend($params->{backend});
+
+        # Does this backend enable us to insert an availability stage and should
+        # we? If not, proceed as normal.
+        if (
+            C4::Context->preference("ILLCheckAvailability") &&
+            $request->_backend_capability(
+                'should_display_availability',
+                $params
+            ) &&
+            # If the user has elected to continue with the request despite
+            # having viewed availability info, this flag will be set
+            !$params->{checked_availability}
+        ) {
+            # Establish which of the installed availability providers
+            # can service our metadata, if so, jump in
+            my $availability = Koha::Illrequest::Availability->new($params);
+            my $services = $availability->get_services({
+                ui_context => 'opac'
+            });
+            if (scalar @{$services} > 0) {
+                # Modify our method so we use the correct part of the
+                # template
+                $op = 'availability';
+                # Prepare the metadata we're sending them
+                my $metadata = $availability->prep_metadata($params);
+                $template->param(
+                    metadata        => $metadata,
+                    services_json   => encode_json($services),
+                    services        => $services,
+                    illrequestsview => 1,
+                    message         => $params->{message},
+                    method          => $op,
+                    whole           => $params
+                );
+                output_html_with_http_headers $query, $cookie,
+                    $template->output, undef, { force_no_caching => 1 };
+                exit;
+            }
+        }
+
         $params->{cardnumber} = Koha::Patrons->find({
             borrowernumber => $loggedinuser
         })->cardnumber;
+        $params->{opac} = 1;
         my $backend_result = $request->backend_create($params);
-        $template->param(
-            media       => [ "Book", "Article", "Journal" ],
-            branches    => Koha::Libraries->search->unblessed,
-            whole       => $backend_result,
-            request     => $request
-        );
-        if ($backend_result->{stage} eq 'commit') {
-            print $query->redirect('/cgi-bin/koha/opac-illrequests.pl?message=2');
+        if ($backend_result->{stage} eq 'copyrightclearance') {
+            $template->param(
+                stage       => $backend_result->{stage},
+                whole       => $backend_result
+            );
+        } else {
+            $template->param(
+                types       => [ "Book", "Article", "Journal" ],
+                branches    => Koha::Libraries->search->unblessed,
+                whole       => $backend_result,
+                request     => $request
+            );
+            if ($backend_result->{stage} eq 'commit') {
+                print $query->redirect('/cgi-bin/koha/opac-illrequests.pl?message=2');
+                exit;
+            }
         }
-    }
-
 
+    }
 }
 
 $template->param(
     message         => $params->{message},
     illrequestsview => 1,
-    method              => $op
+    method          => $op
 );
 
-output_html_with_http_headers $query, $cookie, $template->output;
+output_html_with_http_headers $query, $cookie, $template->output, undef, { force_no_caching => 1 };