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

(-)a/opac/sco/sco-main.pl (-216 / +226 lines)
Lines 32-38 use Modern::Perl; Link Here
32
32
33
use CGI qw ( -utf8 );
33
use CGI qw ( -utf8 );
34
34
35
use C4::Auth qw( in_iprange get_template_and_user checkpw );
35
use C4::Auth        qw( in_iprange get_template_and_user checkpw );
36
use C4::Circulation qw( barcodedecode AddReturn CanBookBeIssued AddIssue CanBookBeRenewed AddRenewal );
36
use C4::Circulation qw( barcodedecode AddReturn CanBookBeIssued AddIssue CanBookBeRenewed AddRenewal );
37
use C4::Reserves;
37
use C4::Reserves;
38
use C4::Output qw( output_html_with_http_headers );
38
use C4::Output qw( output_html_with_http_headers );
Lines 49-87 use Koha::CookieManager; Link Here
49
49
50
my $query = CGI->new;
50
my $query = CGI->new;
51
51
52
unless (C4::Context->preference('WebBasedSelfCheck')) {
52
unless ( C4::Context->preference('WebBasedSelfCheck') ) {
53
53
    # redirect to OPAC home if self-check is not enabled
54
    # redirect to OPAC home if self-check is not enabled
54
    print $query->redirect("/cgi-bin/koha/opac-main.pl");
55
    print $query->redirect("/cgi-bin/koha/opac-main.pl");
55
    exit;
56
    exit;
56
}
57
}
57
58
58
unless ( in_iprange(C4::Context->preference('SelfCheckAllowByIPRanges')) ) {
59
unless ( in_iprange( C4::Context->preference('SelfCheckAllowByIPRanges') ) ) {
60
59
    # redirect to OPAC home if self-checkout not permitted from current IP
61
    # redirect to OPAC home if self-checkout not permitted from current IP
60
    print $query->redirect("/cgi-bin/koha/opac-main.pl");
62
    print $query->redirect("/cgi-bin/koha/opac-main.pl");
61
    exit;
63
    exit;
62
}
64
}
63
65
64
$query->param(-name=>'sco_user_login',-values=>[1]);
66
$query->param( -name => 'sco_user_login', -values => [1] );
65
67
66
my ( $template, $loggedinuser, $cookie ) = get_template_and_user(
68
my ( $template, $loggedinuser, $cookie ) = get_template_and_user(
67
    {
69
    {
68
        template_name   => "sco/sco-main.tt",
70
        template_name => "sco/sco-main.tt",
69
        flagsrequired   => { self_check => "self_checkout_module" },
71
        flagsrequired => { self_check => "self_checkout_module" },
70
        query           => $query,
72
        query         => $query,
71
        type            => "opac",
73
        type          => "opac",
72
    }
74
    }
73
);
75
);
74
76
75
# Get the self checkout timeout preference, or use 120 seconds as a default
77
# Get the self checkout timeout preference, or use 120 seconds as a default
76
my $selfchecktimeout = 120000;
78
my $selfchecktimeout = 120000;
77
if (C4::Context->preference('SelfCheckTimeout')) { 
79
if ( C4::Context->preference('SelfCheckTimeout') ) {
78
    $selfchecktimeout = C4::Context->preference('SelfCheckTimeout') * 1000;
80
    $selfchecktimeout = C4::Context->preference('SelfCheckTimeout') * 1000;
79
}
81
}
80
$template->param( SelfCheckTimeout => $selfchecktimeout );
82
$template->param( SelfCheckTimeout => $selfchecktimeout );
81
83
82
# Checks policy laid out by SCOAllowCheckin, defaults to 'on' if preference is undefined
84
# Checks policy laid out by SCOAllowCheckin, defaults to 'on' if preference is undefined
83
my $allowselfcheckreturns = 1;
85
my $allowselfcheckreturns = 1;
84
if (defined C4::Context->preference('SCOAllowCheckin')) {
86
if ( defined C4::Context->preference('SCOAllowCheckin') ) {
85
    $allowselfcheckreturns = C4::Context->preference('SCOAllowCheckin');
87
    $allowselfcheckreturns = C4::Context->preference('SCOAllowCheckin');
86
}
88
}
87
89
Lines 97-147 my ( $op, $patronlogin, $patronpw, $barcodestr, $confirmed, $newissues, $load_ch Link Here
97
);
99
);
98
100
99
my $jwt = $query->cookie('JWT');
101
my $jwt = $query->cookie('JWT');
102
100
#FIXME: This needs to be changed to a POSTed logout...
103
#FIXME: This needs to be changed to a POSTed logout...
101
if ($op eq "logout") {
104
if ( $op eq "logout" ) {
102
    $template->param( loggedout => 1 );
105
    $template->param( loggedout => 1 );
103
    $query->param( patronlogin => undef, patronpw => undef );
106
    $query->param( patronlogin => undef, patronpw => undef );
104
    undef $jwt;
107
    undef $jwt;
105
}
108
}
106
109
107
my $barcodes = [];
110
my $barcodes = [];
108
if ( $barcodestr ) {
111
if ($barcodestr) {
109
    push @$barcodes, split( /\s\n/, $barcodestr );
112
    push @$barcodes, split( /\s\n/, $barcodestr );
110
    $barcodes = [ map { $_ =~ /^\s*$/ ? () : barcodedecode( $_ ) } @$barcodes ];
113
    $barcodes = [ map { $_ =~ /^\s*$/ ? () : barcodedecode($_) } @$barcodes ];
111
}
114
}
112
115
113
my @newissueslist = split /,/, $newissues;
116
my @newissueslist  = split /,/, $newissues;
114
my $issuenoconfirm = 1; #don't need to confirm on issue.
117
my $issuenoconfirm = 1;                                           #don't need to confirm on issue.
115
my $issuer   = Koha::Patrons->find( $issuerid )->unblessed;
118
my $issuer         = Koha::Patrons->find($issuerid)->unblessed;
116
119
117
my $patronid = $jwt ? Koha::Token->new->decode_jwt({ token => $jwt }) : undef;
120
my $patronid = $jwt ? Koha::Token->new->decode_jwt( { token => $jwt } ) : undef;
118
unless ( $patronid ) {
121
unless ($patronid) {
119
    if ( C4::Context->preference('SelfCheckoutByLogin') ) {
122
    if ( C4::Context->preference('SelfCheckoutByLogin') ) {
120
        ( undef, $patronid ) = checkpw( $patronlogin, $patronpw );
123
        ( undef, $patronid ) = checkpw( $patronlogin, $patronpw );
121
    }
124
    } else {    # People should not do that unless they know what they are doing!
122
    else {    # People should not do that unless they know what they are doing!
125
                # SelfCheckAllowByIPRanges MUST be configured
123
              # SelfCheckAllowByIPRanges MUST be configured
124
        $patronid = $query->param('patronid');
126
        $patronid = $query->param('patronid');
125
    }
127
    }
126
    $jwt = Koha::Token->new->generate_jwt({ id => $patronid }) if $patronid;
128
    $jwt = Koha::Token->new->generate_jwt( { id => $patronid } ) if $patronid;
127
}
129
}
128
130
129
my $patron;
131
my $patron;
130
if ( $patronid ) {
132
if ($patronid) {
131
    Koha::Plugins->call( 'patron_barcode_transform', \$patronid );
133
    Koha::Plugins->call( 'patron_barcode_transform', \$patronid );
132
    $patron = Koha::Patrons->find( { cardnumber => $patronid } );
134
    $patron = Koha::Patrons->find( { cardnumber => $patronid } );
133
}
135
}
134
136
135
undef $jwt unless $patron;
137
undef $jwt unless $patron;
136
138
137
my $branch = $issuer->{branchcode};
139
my $branch           = $issuer->{branchcode};
138
my $confirm_required = 0;
140
my $confirm_required = 0;
139
my $return_only = 0;
141
my $return_only      = 0;
140
142
141
my $batch_checkouts_allowed;
143
my $batch_checkouts_allowed;
142
if ( C4::Context->preference('BatchCheckouts') and $patron ) {
144
if ( C4::Context->preference('BatchCheckouts') and $patron ) {
143
    my @batch_category_codes = split ',', C4::Context->preference('BatchCheckoutsValidCategories');
145
    my @batch_category_codes = split ',', C4::Context->preference('BatchCheckoutsValidCategories');
144
    my $categorycode = $patron->categorycode;
146
    my $categorycode         = $patron->categorycode;
145
    if ( $categorycode && grep { $_ eq $categorycode } @batch_category_codes ) {
147
    if ( $categorycode && grep { $_ eq $categorycode } @batch_category_codes ) {
146
        $batch_checkouts_allowed = 1;
148
        $batch_checkouts_allowed = 1;
147
    }
149
    }
Lines 150-336 if ( C4::Context->preference('BatchCheckouts') and $patron ) { Link Here
150
if ( $patron && $op eq "cud-returnbook" && $allowselfcheckreturns ) {
152
if ( $patron && $op eq "cud-returnbook" && $allowselfcheckreturns ) {
151
    my $success = 1;
153
    my $success = 1;
152
154
153
  foreach my $barcode ( @$barcodes ) {
155
    foreach my $barcode (@$barcodes) {
154
    my $item = Koha::Items->find( { barcode => $barcode } );
156
        my $item = Koha::Items->find( { barcode => $barcode } );
155
    if ( $success && C4::Context->preference("CircConfirmItemParts") ) {
157
        if ( $success && C4::Context->preference("CircConfirmItemParts") ) {
156
        if ( defined($item)
158
            if ( defined($item)
157
            && $item->materials )
159
                && $item->materials )
158
        {
160
            {
159
            $success = 0;
161
                $success = 0;
160
        }
161
    }
162
163
    if ($success) {
164
        # Patron cannot checkin an item they don't own
165
        $success = 0
166
          unless $patron->checkouts->find( { itemnumber => $item->itemnumber } );
167
    }
168
169
    if ( $success ) {
170
        ($success) = AddReturn( $barcode, $branch )
171
    }
172
173
    $template->param(
174
        returned => $success,
175
        barcode => $barcode
176
    );
177
  } # foreach barcode in barcodes
178
}
179
180
elsif ( $patron && ( $op eq 'cud-checkout' ) ) {
181
  my @failed_checkouts;
182
  my @confirm_checkouts;
183
  foreach my $barcode ( @$barcodes ) {
184
    my $item = Koha::Items->find( { barcode => $barcode } );
185
    my $impossible  = {};
186
    my $needconfirm = {};
187
    ( $impossible, $needconfirm ) = CanBookBeIssued(
188
        $patron,
189
        $barcode,
190
        undef,
191
        0,
192
        C4::Context->preference("AllowItemsOnHoldCheckoutSCO")
193
    );
194
    my $issue_error;
195
    if ( $confirm_required = scalar keys %$needconfirm ) {
196
        for my $error ( qw( UNKNOWN_BARCODE max_loans_allowed ISSUED_TO_ANOTHER NO_MORE_RENEWALS NOT_FOR_LOAN DEBT WTHDRAWN RESTRICTED RESERVED ITEMNOTSAMEBRANCH EXPIRED DEBARRED CARD_LOST GNA INVALID_DATE UNKNOWN_BARCODE TOO_MANY DEBT_GUARANTEES DEBT_GUARANTORS USERBLOCKEDOVERDUE PATRON_CANT PREVISSUE NOT_FOR_LOAN_FORCING ITEM_LOST ADDITIONAL_MATERIALS ) ) {
197
            if ( $needconfirm->{$error} ) {
198
                $issue_error = $error;
199
                $confirmed = 0;
200
                last;
201
            }
162
            }
202
        }
163
        }
203
    }
204
164
205
    if (scalar keys %$impossible) {
165
        if ($success) {
206
        my $issue_error = (keys %$impossible)[0]; # FIXME This is wrong, we assume only one error and keys are not ordered
207
        my $title = ( $item ) ? $item->biblio->title : '';
208
166
209
        my $failed_checkout = {
167
            # Patron cannot checkin an item they don't own
210
            "circ_error_$issue_error" => 1,
168
            $success = 0
211
            title                     => $title,
169
                unless $patron->checkouts->find( { itemnumber => $item->itemnumber } );
212
        };
213
214
        if ($issue_error eq 'DEBT') {
215
            $failed_checkout->{DEBT} = $impossible->{DEBT};
216
        }
217
        if ( $issue_error eq "NO_MORE_RENEWALS" ) {
218
            $return_only = 1;
219
            $failed_checkout->{barcode} = $barcode;
220
            $failed_checkout->{returnitem} = 1;
221
        }
170
        }
222
171
223
        push @failed_checkouts, $failed_checkout;
172
        if ($success) {
173
            ($success) = AddReturn( $barcode, $branch );
174
        }
224
175
225
        $template->param(
176
        $template->param(
226
            hide_main => 1,
177
            returned => $success,
178
            barcode  => $barcode
227
        );
179
        );
228
    } elsif ( $needconfirm->{RENEW_ISSUE} ) {
180
    }    # foreach barcode in barcodes
229
        my $confirm_checkout = {
181
230
            renew               => 1,
182
} elsif ( $patron && ( $op eq 'cud-checkout' ) ) {
231
            barcode             => $barcode,
183
    my @failed_checkouts;
232
            confirm             => $item->biblio->title,
184
    my @confirm_checkouts;
233
            confirm_renew_issue => 1,
185
    foreach my $barcode (@$barcodes) {
234
        };
186
        my $item        = Koha::Items->find( { barcode => $barcode } );
235
        push @confirm_checkouts, $confirm_checkout;
187
        my $impossible  = {};
236
        $template->param(
188
        my $needconfirm = {};
237
            hide_main => 1,
189
        ( $impossible, $needconfirm ) = CanBookBeIssued(
190
            $patron,
191
            $barcode,
192
            undef,
193
            0,
194
            C4::Context->preference("AllowItemsOnHoldCheckoutSCO")
238
        );
195
        );
239
    } elsif ( $confirm_required && !$confirmed ) {
196
        my $issue_error;
240
        my $failed_checkout = {
197
        if ( $confirm_required = scalar keys %$needconfirm ) {
241
            "circ_error_$issue_error" => 1,
198
            for my $error (
242
        };
199
                qw( UNKNOWN_BARCODE max_loans_allowed ISSUED_TO_ANOTHER NO_MORE_RENEWALS NOT_FOR_LOAN DEBT WTHDRAWN RESTRICTED RESERVED ITEMNOTSAMEBRANCH EXPIRED DEBARRED CARD_LOST GNA INVALID_DATE UNKNOWN_BARCODE TOO_MANY DEBT_GUARANTEES DEBT_GUARANTORS USERBLOCKEDOVERDUE PATRON_CANT PREVISSUE NOT_FOR_LOAN_FORCING ITEM_LOST ADDITIONAL_MATERIALS )
243
        if ($issue_error eq 'DEBT') {
200
                )
244
            $failed_checkout->{DEBT} = $needconfirm->{DEBT};
201
            {
245
        }
202
                if ( $needconfirm->{$error} ) {
246
        push @failed_checkouts, $failed_checkout;
203
                    $issue_error = $error;
247
    } else {
204
                    $confirmed   = 0;
248
        if ( $confirmed || $issuenoconfirm ) {    # we'll want to call getpatroninfo again to get updated issues.
205
                    last;
249
            my ( $hold_existed, $item );
206
                }
250
            if ( C4::Context->preference('HoldFeeMode') eq 'any_time_is_collected' ) {
251
                # There is no easy way to know if the patron has been charged for this item.
252
                # So we check if a hold existed for this item before the check in
253
                $item = Koha::Items->find({ barcode => $barcode });
254
                $hold_existed = Koha::Holds->search(
255
                    {
256
                        -and => {
257
                            borrowernumber => $patron->borrowernumber,
258
                            -or            => {
259
                                biblionumber => $item->biblionumber,
260
                                itemnumber   => $item->itemnumber
261
                            }
262
                        }
263
                    }
264
                )->count;
265
            }
207
            }
208
        }
266
209
267
            my $new_issue = AddIssue( $patron, $barcode );
210
        if ( scalar keys %$impossible ) {
268
            $template->param( issued => 1, new_issue => $new_issue );
211
            my $issue_error =
269
            push @newissueslist, $barcode unless ( grep /^$barcode$/, @newissueslist );
212
                ( keys %$impossible )[0];    # FIXME This is wrong, we assume only one error and keys are not ordered
213
            my $title = ($item) ? $item->biblio->title : '';
270
214
271
            if ( $hold_existed ) {
215
            my $failed_checkout = {
272
                my $dtf = Koha::Database->new->schema->storage->datetime_parser;
216
                "circ_error_$issue_error" => 1,
273
                $template->param(
217
                title                     => $title,
274
                    # If the hold existed before the check in, let's confirm that the charge line exists
218
            };
275
                    # Note that this should not be needed but since we do not have proper exception handling here we do it this way
219
276
                    patron_has_hold_fee => Koha::Account::Lines->search(
220
            if ( $issue_error eq 'DEBT' ) {
277
                        {
221
                $failed_checkout->{DEBT} = $impossible->{DEBT};
278
                            borrowernumber  => $patron->borrowernumber,
279
                            debit_type_code => 'RESERVE',
280
                            description     => $item->biblio->title,
281
                            date            => $dtf->format_date(dt_from_string)
282
                        }
283
                      )->count,
284
                );
285
            }
222
            }
286
        } else {
223
            if ( $issue_error eq "NO_MORE_RENEWALS" ) {
287
            $confirm_required = 1;
224
                $return_only                   = 1;
225
                $failed_checkout->{barcode}    = $barcode;
226
                $failed_checkout->{returnitem} = 1;
227
            }
228
229
            push @failed_checkouts, $failed_checkout;
230
231
            $template->param(
232
                hide_main => 1,
233
            );
234
        } elsif ( $needconfirm->{RENEW_ISSUE} ) {
288
            my $confirm_checkout = {
235
            my $confirm_checkout = {
289
                confirm    => "Issuing title: " . $item->biblio->title,
236
                renew               => 1,
290
                barcode    => $barcode,
237
                barcode             => $barcode,
238
                confirm             => $item->biblio->title,
239
                confirm_renew_issue => 1,
291
            };
240
            };
292
            push @confirm_checkouts, $confirm_checkout;
241
            push @confirm_checkouts, $confirm_checkout;
293
            $template->param(
242
            $template->param(
294
                hide_main  => 1,
243
                hide_main => 1,
295
            );
244
            );
245
        } elsif ( $confirm_required && !$confirmed ) {
246
            my $failed_checkout = {
247
                "circ_error_$issue_error" => 1,
248
            };
249
            if ( $issue_error eq 'DEBT' ) {
250
                $failed_checkout->{DEBT} = $needconfirm->{DEBT};
251
            }
252
            push @failed_checkouts, $failed_checkout;
253
        } else {
254
            if ( $confirmed || $issuenoconfirm ) {    # we'll want to call getpatroninfo again to get updated issues.
255
                my ( $hold_existed, $item );
256
                if ( C4::Context->preference('HoldFeeMode') eq 'any_time_is_collected' ) {
257
258
                    # There is no easy way to know if the patron has been charged for this item.
259
                    # So we check if a hold existed for this item before the check in
260
                    $item         = Koha::Items->find( { barcode => $barcode } );
261
                    $hold_existed = Koha::Holds->search(
262
                        {
263
                            -and => {
264
                                borrowernumber => $patron->borrowernumber,
265
                                -or            => {
266
                                    biblionumber => $item->biblionumber,
267
                                    itemnumber   => $item->itemnumber
268
                                }
269
                            }
270
                        }
271
                    )->count;
272
                }
273
274
                my $new_issue = AddIssue( $patron, $barcode );
275
                $template->param( issued => 1, new_issue => $new_issue );
276
                push @newissueslist, $barcode unless ( grep /^$barcode$/, @newissueslist );
277
278
                if ($hold_existed) {
279
                    my $dtf = Koha::Database->new->schema->storage->datetime_parser;
280
                    $template->param(
281
282
                        # If the hold existed before the check in, let's confirm that the charge line exists
283
                        # Note that this should not be needed but since we do not have proper exception handling here we do it this way
284
                        patron_has_hold_fee => Koha::Account::Lines->search(
285
                            {
286
                                borrowernumber  => $patron->borrowernumber,
287
                                debit_type_code => 'RESERVE',
288
                                description     => $item->biblio->title,
289
                                date            => $dtf->format_date(dt_from_string)
290
                            }
291
                        )->count,
292
                    );
293
                }
294
            } else {
295
                $confirm_required = 1;
296
                my $confirm_checkout = {
297
                    confirm => "Issuing title: " . $item->biblio->title,
298
                    barcode => $barcode,
299
                };
300
                push @confirm_checkouts, $confirm_checkout;
301
                $template->param(
302
                    hide_main => 1,
303
                );
304
            }
296
        }
305
        }
297
    }
306
    }    # foreach barcode in barcodes
298
  } # foreach barcode in barcodes
299
307
300
  $template->param(
308
    $template->param(
301
    impossible => \@failed_checkouts,
309
        impossible => \@failed_checkouts,
302
    confirm    => \@confirm_checkouts,
310
        confirm    => \@confirm_checkouts,
303
  );
311
    );
304
} # $op
312
}    # $op
305
313
306
if ( $patron && ( $op eq 'cud-renew' ) ) {
314
if ( $patron && ( $op eq 'cud-renew' ) ) {
307
  foreach my $barcode ( @$barcodes ) {
315
    foreach my $barcode (@$barcodes) {
308
    my $item = Koha::Items->find({ barcode => $barcode });
316
        my $item = Koha::Items->find( { barcode => $barcode } );
309
317
310
    if ( $patron->checkouts->find( { itemnumber => $item->itemnumber } ) ) {
318
        if ( $patron->checkouts->find( { itemnumber => $item->itemnumber } ) ) {
311
        my ($status,$renewerror) = CanBookBeRenewed( $patron, $item->checkout );
319
            my ( $status, $renewerror ) = CanBookBeRenewed( $patron, $item->checkout );
312
        if ($status) {
320
            if ($status) {
313
            AddRenewal(
321
                AddRenewal(
314
                {
322
                    {
315
                    borrowernumber => $patron->borrowernumber,
323
                        borrowernumber => $patron->borrowernumber,
316
                    itemnumber     => $item->itemnumber,
324
                        itemnumber     => $item->itemnumber,
317
                    seen           => 1
325
                        seen           => 1
318
                }
326
                    }
319
            );
327
                );
320
            push @newissueslist, $barcode;
328
                push @newissueslist, $barcode;
321
            $template->param(
329
                $template->param(
322
                renewed => 1,
330
                    renewed => 1,
323
                barcode => $barcode
331
                    barcode => $barcode
324
            );
332
                );
333
            }
334
        } else {
335
            $template->param( renewed => 0 );
325
        }
336
        }
326
    } else {
337
    }    # foreach barcode in barcodes
327
        $template->param( renewed => 0 );
328
    }
329
  } # foreach barcode in barcodes
330
}
338
}
331
339
332
if ( $patron) {
340
if ($patron) {
333
    my $borrowername = sprintf "%s %s", ($patron->firstname || ''), ($patron->surname || '');
341
    my $borrowername = sprintf "%s %s", ( $patron->firstname || '' ), ( $patron->surname || '' );
334
    my @checkouts;
342
    my @checkouts;
335
    my $pending_checkouts = $patron->pending_checkouts;
343
    my $pending_checkouts = $patron->pending_checkouts;
336
    if ( C4::Context->preference('SCOLoadCheckoutsByDefault') || $load_checkouts ) {
344
    if ( C4::Context->preference('SCOLoadCheckoutsByDefault') || $load_checkouts ) {
Lines 349-402 if ( $patron) { Link Here
349
        m/priority/ and $show_priority = 1;
357
        m/priority/ and $show_priority = 1;
350
    }
358
    }
351
359
352
    my $account = $patron->account;
360
    my $account      = $patron->account;
353
    my $total = $account->balance;
361
    my $total        = $account->balance;
354
    my $accountlines = $account->lines;
362
    my $accountlines = $account->lines;
355
363
356
    my $holds = $patron->holds;
364
    my $holds               = $patron->holds;
357
    my $waiting_holds_count = 0;
365
    my $waiting_holds_count = 0;
358
366
359
    while(my $hold = $holds->next) {
367
    while ( my $hold = $holds->next ) {
360
        $waiting_holds_count++ if $hold->is_waiting;
368
        $waiting_holds_count++ if $hold->is_waiting;
361
    }
369
    }
362
370
363
    $template->param(
371
    $template->param(
364
        validuser => 1,
372
        validuser                => 1,
365
        borrowername => $borrowername,
373
        borrowername             => $borrowername,
366
        issues_count => scalar(@checkouts) || $pending_checkouts->count(),
374
        issues_count             => scalar(@checkouts) || $pending_checkouts->count(),
367
        ISSUES => \@checkouts,
375
        ISSUES                   => \@checkouts,
368
        HOLDS => $holds,
376
        HOLDS                    => $holds,
369
        newissues => join(',',@newissueslist),
377
        newissues                => join( ',', @newissueslist ),
370
        patronlogin => $patronlogin,
378
        patronlogin              => $patronlogin,
371
        patronpw => $patronpw,
379
        patronpw                 => $patronpw,
372
        waiting_holds_count => $waiting_holds_count,
380
        waiting_holds_count      => $waiting_holds_count,
373
        noitemlinks => 1 ,
381
        noitemlinks              => 1,
374
        load_checkouts => $load_checkouts,
382
        load_checkouts           => $load_checkouts,
375
        borrowernumber => $patron->borrowernumber,
383
        borrowernumber           => $patron->borrowernumber,
376
        SuspendHoldsOpac => C4::Context->preference('SuspendHoldsOpac'),
384
        SuspendHoldsOpac         => C4::Context->preference('SuspendHoldsOpac'),
377
        AutoResumeSuspendedHolds => C4::Context->preference('AutoResumeSuspendedHolds'),
385
        AutoResumeSuspendedHolds => C4::Context->preference('AutoResumeSuspendedHolds'),
378
        howpriority   => $show_priority,
386
        howpriority              => $show_priority,
379
        ACCOUNT_LINES => $accountlines,
387
        ACCOUNT_LINES            => $accountlines,
380
        total => $total,
388
        total                    => $total,
381
        batch_checkouts_allowed => $batch_checkouts_allowed,
389
        batch_checkouts_allowed  => $batch_checkouts_allowed,
382
    );
390
    );
383
391
384
    my $patron_messages = Koha::Patron::Messages->search(
392
    my $patron_messages = Koha::Patron::Messages->search(
385
        {
393
        {
386
            borrowernumber => $patron->borrowernumber,
394
            borrowernumber => $patron->borrowernumber,
387
            message_type => 'B',
395
            message_type   => 'B',
388
        }
396
        }
389
    );
397
    );
390
    $template->param(
398
    $template->param(
391
        patron_messages => $patron_messages,
399
        patron_messages => $patron_messages,
392
        opacnote => $patron->opacnote,
400
        opacnote        => $patron->opacnote,
393
    );
401
    );
394
402
395
    $template->param(
403
    $template->param(
396
        nofines => 1,
404
        nofines => 1,
397
405
398
    );
406
    );
399
    if (C4::Context->preference('ShowPatronImageInWebBasedSelfCheck')) {
407
    if ( C4::Context->preference('ShowPatronImageInWebBasedSelfCheck') ) {
400
        my $patron_image = $patron->image;
408
        my $patron_image = $patron->image;
401
        $template->param(
409
        $template->param(
402
            display_patron_image => 1,
410
            display_patron_image => 1,
Lines 404-421 if ( $patron) { Link Here
404
    }
412
    }
405
} else {
413
} else {
406
    $template->param(
414
    $template->param(
407
        nouser     => $patronid,
415
        nouser => $patronid,
408
    );
416
    );
409
}
417
}
410
my $cookie_mgr = Koha::CookieManager->new;
418
my $cookie_mgr = Koha::CookieManager->new;
411
$cookie = $cookie_mgr->replace_in_list( $cookie, $query->cookie(
419
$cookie = $cookie_mgr->replace_in_list(
412
    -name => 'JWT',
420
    $cookie,
413
    -value => $jwt // '',
421
    $query->cookie(
414
    -expires => $jwt ? '+1d' : '',
422
        -name     => 'JWT',
415
    -HttpOnly => 1,
423
        -value    => $jwt // '',
416
    -secure => ( C4::Context->https_enabled() ? 1 : 0 ),
424
        -expires  => $jwt ? '+1d' : '',
417
    -sameSite => 'Lax'
425
        -HttpOnly => 1,
418
));
426
        -secure   => ( C4::Context->https_enabled() ? 1 : 0 ),
419
$template->param(patronid => $patronid);
427
        -sameSite => 'Lax'
428
    )
429
);
430
$template->param( patronid => $patronid );
420
431
421
output_html_with_http_headers $query, $cookie, $template->output, undef, { force_no_caching => 1 };
432
output_html_with_http_headers $query, $cookie, $template->output, undef, { force_no_caching => 1 };
422
- 

Return to bug 32256