View | Details | Raw Unified | Return to bug 29543
Collapse All | Expand All

(-)a/opac/sco/sco-main.pl (-25 / +39 lines)
Lines 21-33 Link Here
21
21
22
# We're going to authenticate a self-check user.  we'll add a flag to borrowers 'selfcheck'
22
# We're going to authenticate a self-check user.  we'll add a flag to borrowers 'selfcheck'
23
#
23
#
24
# We're in a controlled environment; we trust the user.
24
# We're not in a controlled environment; we never trust the user.
25
# So the selfcheck station will accept a patronid and issue items to that borrower.
26
# FIXME: NOT really a controlled environment...  We're on the internet!
27
#
25
#
28
# The checkout permission comes form the CGI cookie/session of a staff user.
26
# The checkout permission comes form the CGI cookie/session of a staff user.
29
# The patron is not really logging in here in the same way as they do on the
27
# The patron is not really logging in here in the same way as they do on the
30
# rest of the OPAC.  So don't confuse loggedinuser with the patron user.
28
# rest of the OPAC.  So don't confuse loggedinuser with the patron user.
29
# The patron id/cardnumber is retrieved from the JWT
31
30
32
use Modern::Perl;
31
use Modern::Perl;
33
32
Lines 94-102 if (defined C4::Context->preference('SCOAllowCheckin')) { Link Here
94
}
93
}
95
94
96
my $issuerid = $loggedinuser;
95
my $issuerid = $loggedinuser;
97
my ($op, $patronid, $patronlogin, $patronpw, $barcode, $confirmed, $newissues) = (
96
my ($op, $patronlogin, $patronpw, $barcode, $confirmed, $newissues) = (
98
    $query->param("op")         || '',
97
    $query->param("op")         || '',
99
    $query->param("patronid")   || '',
100
    $query->param("patronlogin")|| '',
98
    $query->param("patronlogin")|| '',
101
    $query->param("patronpw")   || '',
99
    $query->param("patronpw")   || '',
102
    $query->param("barcode")    || '',
100
    $query->param("barcode")    || '',
Lines 104-119 my ($op, $patronid, $patronlogin, $patronpw, $barcode, $confirmed, $newissues) = Link Here
104
    $query->param("newissues")  || '',
102
    $query->param("newissues")  || '',
105
);
103
);
106
104
105
my $jwt = $query->cookie('JWT');
106
if ($op eq "logout") {
107
    $template->param( loggedout => 1 );
108
    $query->param( patronlogin => undef, patronpw => undef );
109
    undef $jwt;
110
}
111
107
$barcode = barcodedecode( $barcode ) if $barcode;
112
$barcode = barcodedecode( $barcode ) if $barcode;
108
113
109
my @newissueslist = split /,/, $newissues;
114
my @newissueslist = split /,/, $newissues;
110
my $issuenoconfirm = 1; #don't need to confirm on issue.
115
my $issuenoconfirm = 1; #don't need to confirm on issue.
111
my $issuer   = Koha::Patrons->find( $issuerid )->unblessed;
116
my $issuer   = Koha::Patrons->find( $issuerid )->unblessed;
112
my $item     = Koha::Items->find({ barcode => $barcode });
117
113
if (C4::Context->preference('SelfCheckoutByLogin') && !$patronid) {
118
my $patronid = $jwt ? Koha::Token->new->decode_jwt({ token => $jwt }) : undef;
114
    my $dbh = C4::Context->dbh;
119
unless ( $patronid ) {
115
    my $resval;
120
    if ( C4::Context->preference('SelfCheckoutByLogin') ) {
116
    ($resval, $patronid) = checkpw($dbh, $patronlogin, $patronpw);
121
        my $dbh = C4::Context->dbh;
122
        ( undef, $patronid ) = checkpw( $dbh, $patronlogin, $patronpw );
123
    }
124
    else {    # People should not do that unless they know what they are doing!
125
              # SelfCheckAllowByIPRanges MUST be configured
126
        $patronid = $query->param('patronid');
127
    }
128
    $jwt = Koha::Token->new->generate_jwt({ id => $patronid }) if $patronid;
117
}
129
}
118
130
119
my $patron;
131
my $patron;
Lines 125-139 if ( $patronid ) { Link Here
125
my $branch = $issuer->{branchcode};
137
my $branch = $issuer->{branchcode};
126
my $confirm_required = 0;
138
my $confirm_required = 0;
127
my $return_only = 0;
139
my $return_only = 0;
128
if ($op eq "logout") {
140
129
    $template->param( loggedout => 1 );
141
if ( $patron && $op eq "returnbook" && $allowselfcheckreturns ) {
130
    $query->param( patronid => undef, patronlogin => undef, patronpw => undef );
131
}
132
elsif ( $op eq "returnbook" && $allowselfcheckreturns ) {
133
    my $success        = 0;
142
    my $success        = 0;
134
    my $human_required = 0;
143
    my $human_required = 0;
144
    my $item = Koha::Items->find( { barcode => $barcode } );
135
    if ( C4::Context->preference("CircConfirmItemParts") ) {
145
    if ( C4::Context->preference("CircConfirmItemParts") ) {
136
        my $item = Koha::Items->find( { barcode => $barcode } );
137
        if ( defined($item)
146
        if ( defined($item)
138
            && $item->materials )
147
            && $item->materials )
139
        {
148
        {
Lines 146-151 elsif ( $op eq "returnbook" && $allowselfcheckreturns ) { Link Here
146
    $template->param( returned => $success );
155
    $template->param( returned => $success );
147
}
156
}
148
elsif ( $patron && ( $op eq 'checkout' ) ) {
157
elsif ( $patron && ( $op eq 'checkout' ) ) {
158
159
    my $item = Koha::Items->find( { barcode => $barcode } );
149
    my $impossible  = {};
160
    my $impossible  = {};
150
    my $needconfirm = {};
161
    my $needconfirm = {};
151
    ( $impossible, $needconfirm ) = CanBookBeIssued(
162
    ( $impossible, $needconfirm ) = CanBookBeIssued(
Lines 166-172 elsif ( $patron && ( $op eq 'checkout' ) ) { Link Here
166
        }
177
        }
167
    }
178
    }
168
179
169
    #warn "confirm_required: " . $confirm_required ;
170
    if (scalar keys %$impossible) {
180
    if (scalar keys %$impossible) {
171
181
172
        my $issue_error = (keys %$impossible)[0]; # FIXME This is wrong, we assume only one error and keys are not ordered
182
        my $issue_error = (keys %$impossible)[0]; # FIXME This is wrong, we assume only one error and keys are not ordered
Lines 181-187 elsif ( $patron && ( $op eq 'checkout' ) ) { Link Here
181
        if ($issue_error eq 'DEBT') {
191
        if ($issue_error eq 'DEBT') {
182
            $template->param(DEBT => $impossible->{DEBT});
192
            $template->param(DEBT => $impossible->{DEBT});
183
        }
193
        }
184
        #warn "issue_error: " . $issue_error ;
185
        if ( $issue_error eq "NO_MORE_RENEWALS" ) {
194
        if ( $issue_error eq "NO_MORE_RENEWALS" ) {
186
            $return_only = 1;
195
            $return_only = 1;
187
            $template->param(
196
            $template->param(
Lines 198-204 elsif ( $patron && ( $op eq 'checkout' ) ) { Link Here
198
                hide_main           => 1,
207
                hide_main           => 1,
199
        );
208
        );
200
    } elsif ( $confirm_required && !$confirmed ) {
209
    } elsif ( $confirm_required && !$confirmed ) {
201
        #warn "failed confirmation";
202
        $template->param(
210
        $template->param(
203
            impossible                => 1,
211
            impossible                => 1,
204
            "circ_error_$issue_error" => 1,
212
            "circ_error_$issue_error" => 1,
Lines 248-254 elsif ( $patron && ( $op eq 'checkout' ) ) { Link Here
248
            }
256
            }
249
        } else {
257
        } else {
250
            $confirm_required = 1;
258
            $confirm_required = 1;
251
            #warn "issue confirmation";
252
            $template->param(
259
            $template->param(
253
                confirm    => "Issuing title: " . $item->biblio->title,
260
                confirm    => "Issuing title: " . $item->biblio->title,
254
                barcode    => $barcode,
261
                barcode    => $barcode,
Lines 259-274 elsif ( $patron && ( $op eq 'checkout' ) ) { Link Here
259
} # $op
266
} # $op
260
267
261
if ( $patron && ( $op eq 'renew' ) ) {
268
if ( $patron && ( $op eq 'renew' ) ) {
269
    my $item = Koha::Items->find({ barcode => $barcode });
262
    my ($status,$renewerror) = CanBookBeRenewed( $patron->borrowernumber, $item->itemnumber );
270
    my ($status,$renewerror) = CanBookBeRenewed( $patron->borrowernumber, $item->itemnumber );
263
    if ($status) {
271
    if ($status) {
264
        #warn "renewing";
265
        AddRenewal( $patron->borrowernumber, $item->itemnumber, undef, undef, undef, undef, 1 );
272
        AddRenewal( $patron->borrowernumber, $item->itemnumber, undef, undef, undef, undef, 1 );
266
        push @newissueslist, $barcode;
273
        push @newissueslist, $barcode;
267
        $template->param( renewed => 1 );
274
        $template->param( renewed => 1 );
268
    }
275
    }
269
}
276
}
270
277
271
if ($patron) {
278
if ( $patron) {
272
    my $borrowername = sprintf "%s %s", ($patron->firstname || ''), ($patron->surname || '');
279
    my $borrowername = sprintf "%s %s", ($patron->firstname || ''), ($patron->surname || '');
273
    my $pending_checkouts = $patron->pending_checkouts;
280
    my $pending_checkouts = $patron->pending_checkouts;
274
    my @checkouts;
281
    my @checkouts;
Lines 307-313 if ($patron) { Link Here
307
        ISSUES => \@checkouts,
314
        ISSUES => \@checkouts,
308
        HOLDS => $holds,
315
        HOLDS => $holds,
309
        newissues => join(',',@newissueslist),
316
        newissues => join(',',@newissueslist),
310
        patronid => $patronid,
311
        patronlogin => $patronlogin,
317
        patronlogin => $patronlogin,
312
        patronpw => $patronpw,
318
        patronpw => $patronpw,
313
        waiting_holds_count => $waiting_holds_count,
319
        waiting_holds_count => $waiting_holds_count,
Lines 344-352 if ($patron) { Link Here
344
    }
350
    }
345
} else {
351
} else {
346
    $template->param(
352
    $template->param(
347
        patronid   => $patronid,
348
        nouser     => $patronid,
353
        nouser     => $patronid,
349
    );
354
    );
350
}
355
}
351
356
357
$cookie = $query->cookie(
358
    -name => 'JWT',
359
    -value => $jwt // '',
360
    -expires => $jwt ? '+1d' : '',
361
    -HttpOnly => 1,
362
    -secure => ( C4::Context->https_enabled() ? 1 : 0 ),
363
);
364
365
$template->param(patronid => $patronid);
366
352
output_html_with_http_headers $query, $cookie, $template->output, undef, { force_no_caching => 1 };
367
output_html_with_http_headers $query, $cookie, $template->output, undef, { force_no_caching => 1 };
353
- 

Return to bug 29543