Bugzilla – Attachment 74518 Details for
Bug 20582
Turn Koha into a Mojolicious application
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Help
|
New Account
|
Log In
[x]
|
Forgot Password
Login:
[x]
[patch]
Bug 20582: Add routes for some svc/ scripts
Bug-20582-Add-routes-for-some-svc-scripts.patch (text/plain), 7.51 KB, created by
Julian Maurice
on 2018-04-19 06:49:45 UTC
(
hide
)
Description:
Bug 20582: Add routes for some svc/ scripts
Filename:
MIME Type:
Creator:
Julian Maurice
Created:
2018-04-19 06:49:45 UTC
Size:
7.51 KB
patch
obsolete
>From f90f769573e71fcd7da98d33c149734bec5282c1 Mon Sep 17 00:00:00 2001 >From: Julian Maurice <julian.maurice@biblibre.com> >Date: Wed, 18 Apr 2018 23:22:08 +0200 >Subject: [PATCH] Bug 20582: Add routes for some svc/ scripts > >svc/club/enroll, svc/club/cancel_enrollment and svc/report are available >in different versions: one for the OPAC, one for the intranet >This patch creates new routes that override the CGI scripts and that >work for both OPAC and intranet >--- > Koha/App/Plugin/CGIBinKoha.pm | 10 ++++- > Koha/Controller/Svc/Club.pm | 96 +++++++++++++++++++++++++++++++++++++++++++ > Koha/Controller/Svc/Report.pm | 85 ++++++++++++++++++++++++++++++++++++++ > 3 files changed, 189 insertions(+), 2 deletions(-) > create mode 100644 Koha/Controller/Svc/Club.pm > create mode 100644 Koha/Controller/Svc/Report.pm > >diff --git a/Koha/App/Plugin/CGIBinKoha.pm b/Koha/App/Plugin/CGIBinKoha.pm >index e3edeffdf4..13f8a2857d 100644 >--- a/Koha/App/Plugin/CGIBinKoha.pm >+++ b/Koha/App/Plugin/CGIBinKoha.pm >@@ -11,7 +11,14 @@ use IO::Scalar; > sub register { > my ($self, $app) = @_; > >- $app->routes->any('/cgi-bin/koha/*name' => sub { >+ my $r = $app->routes; >+ >+ # Rewrites of those scripts that work for both OPAC and Intranet >+ $r->post('/cgi-bin/koha/svc/club/enroll')->to('svc-club#enroll'); >+ $r->post('/cgi-bin/koha/svc/club/cancel_enrollment')->to('svc-club#cancel_enrollment'); >+ $r->get('/cgi-bin/koha/svc/report')->to('svc-report#report'); >+ >+ $r->any('/cgi-bin/koha/*name' => sub { > my ($c) = @_; > > my $script = $c->stash('name'); >@@ -25,7 +32,6 @@ sub register { > # Guess if it's an OPAC script, or an Intranet script > # FIXME: errors scripts (400.pl, 401.pl, ...) exist in both intranet and > # opac. The intranet ones will never be executed >- # Same for svc/club/cancel_enrollment, svc/club/enroll and svc/report > if (-e $c->app->home->rel_file("opac/$script")) { > $script = "opac/$script"; > } >diff --git a/Koha/Controller/Svc/Club.pm b/Koha/Controller/Svc/Club.pm >new file mode 100644 >index 0000000000..ece4b1ecc9 >--- /dev/null >+++ b/Koha/Controller/Svc/Club.pm >@@ -0,0 +1,96 @@ >+package Koha::Controller::Svc::Club; >+ >+use Modern::Perl; >+ >+use Mojo::Base 'Mojolicious::Controller'; >+ >+use C4::Auth qw(check_cookie_auth); >+use Koha::Club::Enrollment::Field; >+use Koha::Club::Enrollment; >+use Koha::Clubs; >+ >+sub enroll { >+ my ($c) = @_; >+ >+ my $cookie = $c->cookie('CGISESSID'); >+ my ($status, $sessionId) = check_cookie_auth($cookie, {}, { >+ remote_addr => $c->tx->remote_address, >+ }); >+ >+ if ($status ne 'ok') { >+ return $c->render(json => {success => 0}); >+ } >+ >+ my $session = C4::Auth::get_session($sessionId); >+ my $userid = $session->param('id'); >+ >+ my $can_enroll = C4::Auth::haspermission($userid, {clubs => 'enroll'}); >+ my $id = $c->param('id'); >+ my $borrowernumber = $c->param('borrowernumber'); >+ if (!$borrowernumber || !$can_enroll) { >+ $borrowernumber = $session->param('number'); >+ } >+ >+ my $enrollment; >+ my $club = Koha::Clubs->find($id); >+ my $club_template = $club->club_template; >+ my $is_enrollable_from_opac = $club_template->is_enrollable_from_opac; >+ if ($club && $borrowernumber && ($can_enroll || $is_enrollable_from_opac)) { >+ $enrollment = Koha::Club::Enrollment->new({ >+ club_id => $club->id, >+ borrowernumber => $borrowernumber, >+ date_enrolled => \'NOW()', >+ date_created => \'NOW()', >+ branchcode => $session->param('branch'), >+ })->store(); >+ >+ if ($enrollment) { >+ my @enrollment_fields = $club_template->club_template_enrollment_fields; >+ >+ foreach my $field (@enrollment_fields) { >+ my $value = $c->param($field->id); >+ Koha::Club::Enrollment::Field->new({ >+ club_enrollment_id => $enrollment->id, >+ club_template_enrollment_field_id => $field->id, >+ value => $value, >+ })->store(); >+ } >+ } >+ } >+ >+ my $success = $enrollment ? 1 : 0; >+ $c->render(json => {success => $success}); >+} >+ >+sub cancel_enrollment { >+ my ($c) = @_; >+ >+ my $cookie = $c->cookie('CGISESSID'); >+ my ($status, $sessionId) = check_cookie_auth($cookie, {}, { >+ remote_addr => $c->tx->remote_address, >+ }); >+ >+ if ($status ne 'ok') { >+ return $c->render(json => {success => 0}); >+ } >+ >+ my $session = C4::Auth::get_session($sessionId); >+ my $userid = $session->param('id'); >+ my $borrowernumber = $session->param('number'); >+ >+ my $can_enroll = C4::Auth::haspermission($userid, {clubs => 'enroll'}); >+ >+ my $id = $c->param('id'); >+ >+ my $enrollment = Koha::Club::Enrollments->find($id); >+ if ($enrollment) { >+ if ($can_enroll || $enrollment->borrowernumber eq $borrowernumber) { >+ $enrollment->cancel; >+ } >+ } >+ >+ my $success = $enrollment ? 1 : 0; >+ $c->render(json => {success => $success}); >+} >+ >+1; >diff --git a/Koha/Controller/Svc/Report.pm b/Koha/Controller/Svc/Report.pm >new file mode 100644 >index 0000000000..00231117f6 >--- /dev/null >+++ b/Koha/Controller/Svc/Report.pm >@@ -0,0 +1,85 @@ >+package Koha::Controller::Svc::Report; >+ >+use Modern::Perl; >+ >+use Mojo::Base 'Mojolicious::Controller'; >+ >+use JSON; >+ >+use C4::Auth qw(check_cookie_auth); >+use C4::Context; >+use C4::Reports::Guided; >+ >+use Koha::Caches; >+ >+sub report { >+ my ($c) = @_; >+ >+ my $cookie = $c->cookie('CGISESSID'); >+ my ($status, $sessionId) = check_cookie_auth($cookie, {}, { >+ remote_addr => $c->tx->remote_address, >+ }); >+ >+ if ($status ne 'ok') { >+ return $c->render(json => {success => 0}); >+ } >+ >+ my $session = C4::Auth::get_session($sessionId); >+ my $userid = $session->param('id'); >+ >+ my $can_catalogue = C4::Auth::haspermission($userid, {catalogue => 1}); >+ >+ my $id = $c->param('id'); >+ my $name = $c->param('name'); >+ my $annotated = $c->param('annotated') // 0; >+ >+ my $report = get_saved_report({ >+ name => $name, >+ id => $id, >+ }); >+ if (!$report) { die "There is no such report.\n"; } >+ >+ if (!$can_catalogue and !$report->{public}) { >+ die "Sorry this report is not public\n"; >+ } >+ >+ my $sql_params = $c->every_param('sql_params'); >+ >+ my $cache = Koha::Caches->get_instance(); >+ my $cache_active = $cache->is_cache_active; >+ my ($cache_key, $json_text); >+ if ($cache_active) { >+ $cache_key = sprintf('report:%s:%s:%s', $report->{id}, $annotated, join('-', @$sql_params)); >+ $json_text = $cache->get_from_cache($cache_key); >+ } >+ >+ unless ($json_text) { >+ my $offset = 0; >+ my $limit = C4::Context->preference("SvcMaxReportRows") || 10; >+ my $sql = $report->{savedsql}; >+ >+ # convert SQL parameters to placeholders >+ $sql =~ s/(<<.*?>>)/\?/g; >+ >+ my ( $sth, $errors ) = execute_query( $sql, $offset, $limit, $sql_params, $report->{id} ); >+ if ($sth) { >+ my $lines; >+ if ($annotated) { >+ $lines = $sth->fetchall_arrayref({}); >+ } else { >+ $lines = $sth->fetchall_arrayref; >+ } >+ $json_text = encode_json($lines); >+ >+ if ($cache_active) { >+ $cache->set_in_cache( $cache_key, $json_text, { expiry => $report->{cache_expiry} } ); >+ } >+ } else { >+ $json_text = encode_json($errors); >+ } >+ } >+ >+ $c->render(text => $json_text, format => 'json'); >+} >+ >+1; >-- >2.14.2
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Diff
|
Splinter Review
Attachments on
bug 20582
:
74173
|
74517
|
74518
|
74519
|
74520
|
79648
|
81687
|
81857
|
82423
|
84526
|
84527
|
84528
|
84529
|
84530
|
84531
|
91009
|
99267
|
103633
|
103720
|
103721
|
109282
|
109283
|
109284
|
109895
|
109896
|
109897
|
109898
|
109899
|
109900
|
111282
|
111315
|
111374