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

(-)a/koha-tmpl/opac-tmpl/bootstrap/en/modules/sci/sci-main.tt (-248 / +230 lines)
Lines 25-35 Link Here
25
[% SET SelfCheckInMainUserBlock = AdditionalContents.get( location => "SelfCheckInMainUserBlock", lang => lang, library => logged_in_user.branchcode || default_branch, blocktitle => 0 ) %]
25
[% SET SelfCheckInMainUserBlock = AdditionalContents.get( location => "SelfCheckInMainUserBlock", lang => lang, library => logged_in_user.branchcode || default_branch, blocktitle => 0 ) %]
26
[% INCLUDE 'doc-head-open.inc' %]
26
[% INCLUDE 'doc-head-open.inc' %]
27
[% SET OpacLangSelectorMode = Koha.Preference('OpacLangSelectorMode') %]
27
[% SET OpacLangSelectorMode = Koha.Preference('OpacLangSelectorMode') %]
28
<title>Self check-in &rsaquo; [% IF ( LibraryNameTitle ) %][% LibraryNameTitle | html %][% ELSE %]Koha[% END %]</title>
28
<title>Self check-in &rsaquo; [% IF ( LibraryNameTitle ) %][% LibraryNameTitle | html %][% ELSE %]Koha [% END %]</title>
29
29
30
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
30
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
31
<meta name="generator" content="Koha" />
31
<meta name="generator" content="Koha" /> <!-- leave this for stats -->
32
<!-- leave this for stats -->
33
32
34
[% IF ( Koha.Preference('OpacFavicon') ) %]
33
[% IF ( Koha.Preference('OpacFavicon') ) %]
35
    <link rel="shortcut icon" href="[% Koha.Preference('OpacFavicon') | url %]" type="image/x-icon" />
34
    <link rel="shortcut icon" href="[% Koha.Preference('OpacFavicon') | url %]" type="image/x-icon" />
Lines 44-71 Link Here
44
[% ELSE %]
43
[% ELSE %]
45
    [% Asset.css("css/sco.css") | $raw %]
44
    [% Asset.css("css/sco.css") | $raw %]
46
[% END %]
45
[% END %]
47
[% IF ( Koha.Preference('OPACUserCSS') ) %]
46
[% IF ( Koha.Preference('OPACUserCSS') ) %]<style>[% Koha.Preference('OPACUserCSS') | $raw %]</style>[% END %]
48
    <!-- prettier-ignore-start -->
49
    <style>[% Koha.Preference('OPACUserCSS') | $raw %]</style>
50
    <!-- prettier-ignore-end -->
51
[% END %]
52
[% IF Branches.GetBranchSpecificCSS( Branches.GetLoggedInBranchcode() || default_branch) %]
47
[% IF Branches.GetBranchSpecificCSS( Branches.GetLoggedInBranchcode() || default_branch) %]
53
    <!-- prettier-ignore-start -->
54
    <style>
48
    <style>
55
        [% Branches.GetBranchSpecificCSS( Branches.GetLoggedInBranchcode() || default_branch) | $raw %]
49
        [% Branches.GetBranchSpecificCSS( Branches.GetLoggedInBranchcode() || default_branch) | $raw %]
56
    </style>
50
    </style>
57
    <!-- prettier-ignore-end -->
58
[% END %]
59
[% IF ( Koha.Preference('SelfCheckInUserCSS') ) %]
60
    <!-- prettier-ignore-start -->
61
    <style>[% Koha.Preference('SelfCheckInUserCSS') | $raw %]</style>
62
    <!-- prettier-ignore-end -->
63
[% END %]
51
[% END %]
52
[% IF ( Koha.Preference('SelfCheckInUserCSS') ) %]<style>[% Koha.Preference('SelfCheckInUserCSS') | $raw %]</style>[% END %]
64
<script>
53
<script>
65
    var Koha = {};
54
    var Koha = {};
66
    function _(s) {
55
    function _(s) { return s } // dummy function for gettext
67
        return s;
68
    } // dummy function for gettext
69
</script>
56
</script>
70
[% IF lang && lang != 'en' %]
57
[% IF lang && lang != 'en' %]
71
    [% Asset.js(lang _ '/js/locale_data.js') | $raw %]
58
    [% Asset.js(lang _ '/js/locale_data.js') | $raw %]
Lines 74-203 Link Here
74
[% Asset.js('js/i18n.js') | $raw %]
61
[% Asset.js('js/i18n.js') | $raw %]
75
</head>
62
</head>
76
<body id="sci_main" class="sci">
63
<body id="sci_main" class="sci">
77
[% INCLUDE 'masthead-sci.inc' %]
64
    [% INCLUDE 'masthead-sci.inc' %]
78
65
79
<div class="main">
66
    <div class="main">
80
    <div class="container-fluid">
67
        <div class="container-fluid">
81
        <div class="row">
68
            <div class="row">
82
            <div class="col order-first order-md-first order-lg-2">
69
                <div class="col order-first order-md-first order-lg-2">
83
                <div id="masthead">
70
                    <div id="masthead">
84
                    <h1>[% LibraryName | html %] Self check-in</h1>
71
                        <h1>[% LibraryName | html %] Self check-in</h1>
85
                </div>
86
87
                [% IF ( nopermission ) %]
88
                    [%# This is what is displayed if user doesn't have permission %]
89
                    <div class="alert alert-warning">
90
                        <h2>Access denied</h2>
91
                        <p>Sorry, this self check-in station has lost authentication. Please contact the administrator to resolve this problem.</p>
92
                    </div>
93
                [% ELSIF ( different_ip ) %]
94
                    [%# This is what is displayed if user doesn't have permission %]
95
                    <div class="alert alert-warning">
96
                        <h2>Session lost</h2>
97
                        <p>You are accessing self check-in from a different IP address! Please log in again.</p>
98
                    </div>
72
                    </div>
99
                [% ELSIF ( checkins ) %]
73
100
                    [%# We have results from a check-in attempt %]
74
                    [% IF ( nopermission ) %]
101
                    <div id="checkins" class="sci_results_list">
75
                        [%# This is what is displayed if user doesn't have permission %]
102
                        [% IF ( success && success.size > 0 || errors && errors.size > 0 ) %]
76
                        <div class="alert alert-warning">
103
                            <table id="sci_bcheckins_table" class="table table-bordered table-striped dataTable no-footer">
77
                            <h2>Access denied</h2>
104
                                <caption><h2>Results</h2></caption>
78
                            <p>Sorry, this self check-in station has lost authentication. Please contact the administrator to resolve this problem.</p>
105
                                <thead>
79
                        </div>
106
                                    <th>Barcode</th>
80
                    [% ELSIF ( different_ip ) %]
107
                                    <th>Status</th>
81
                        [%# This is what is displayed if user doesn't have permission %]
108
                                </thead>
82
                        <div class="alert alert-warning">
109
                                <tbody>
83
                            <h2>Session lost</h2>
110
                                    [% FOREACH success_line IN success %]
84
                            <p>You are accessing self check-in from a different IP address! Please log in again.</p>
111
                                        <tr>
85
                        </div>
112
                                            <td>[% success_line.barcode | html %]</td>
86
                    [% ELSIF ( checkins ) %]
113
                                            <td>Checked in</td>
87
                        [%# We have results from a check-in attempt %]
114
                                        </tr>
88
                        <div id="checkins" class="sci_results_list">
115
                                    [% END %]
89
                            [% IF ( success && success.size > 0 || errors && errors.size > 0 ) %]
116
                                    [% FOREACH error IN errors %]
90
                                    <table id="sci_bcheckins_table" class="table table-bordered table-striped dataTable no-footer">
117
                                        <tr>
91
                                        <caption><h2>Results</h2></caption>
118
                                            <td>[% error.barcode | html %]</td>
92
                                        <thead>
119
                                            <td>Not checked in [% PROCESS error_message messages=error.messages %]</td>
93
                                            <th>Barcode</th>
120
                                        </tr>
94
                                            <th>Status</th>
121
                                    [% END %]
95
                                        </thead>
122
                                </tbody>
96
                                        <tbody>
123
                            </table>
97
                                            [% FOREACH success_line IN success %]
124
                            <div>
98
                                                <tr>
125
                                <a href="/cgi-bin/koha/sci/sci-main.pl" id="sci_finish_button" class="btn btn-primary" role="button"><i class="fa fa-check" aria-hidden="true"></i> Finish</a>
99
                                                    <td>[% success_line.barcode | html %]</td>
126
                            </div>
100
                                                    <td>Checked in</td>
127
                        [% ELSE %]
101
                                                </tr>
128
                            <div class="alert alert-warning">
102
                                            [% END %]
129
                                <p>Your request included no check-ins.</p>
103
                                            [% FOREACH error IN errors %]
130
                            </div>
104
                                                <tr>
131
                        [% END %]
105
                                                    <td>[% error.barcode | html %]</td>
132
                    </div>
106
                                                    <td>Not checked in [% PROCESS error_message messages=error.messages %]</td>
133
                [% ELSE %]
107
                                                </tr>
134
                    [%# Prompt for barcodes %]
108
                                            [% END %]
135
                    <div id="new_checkins" class="sci_entry">
109
                                        </tbody>
136
                        <form id="scan_form" name="scan_form" method="post" action="/cgi-bin/koha/sci/sci-main.pl">
110
                                    </table>
137
                            [% INCLUDE 'csrf-token.inc' %]
111
                                    <div>
138
                            <legend class="sr-only">Scan</legend>
112
                                        <a href="/cgi-bin/koha/sci/sci-main.pl" id="sci_finish_button" class="btn btn-primary" role="button"><i class="fa fa-check" aria-hidden="true"></i> Finish</a>
139
                            <div class="row">
113
                                    </div>
140
                                <div class="col-auto">
114
                            [% ELSE %]
141
                                    <label for="barcode_input">Scan the item or enter its barcode:</label>
115
                                <div class="alert alert-warning">
142
                                </div>
116
                                    <p>Your request included no check-ins.</p>
143
                                <div class="col-4">
144
                                    <input id="barcode_input" name="barcode_input" size="20" type="text" class="focus form-control" autocomplete="off" />
145
                                </div>
146
                                <div class="col-auto">
147
                                    <button id="sci_append_button" type="submit" class="btn btn-primary"> Submit </button>
148
                                </div>
117
                                </div>
149
                            </div>
118
                            [% END %]
150
                            <!-- /.row -->
119
                        </div>
151
                            <div class="row">
120
                    [% ELSE %]
152
                                <div class="col">
121
                        [%# Prompt for barcodes %]
153
                                    <div class="sci_input_append">
122
                        <div id="new_checkins" class="sci_entry">
154
                                        <table id="sci_barcodes_table" class="table table-bordered table-striped dataTable no-footer" style="display: none;">
123
                            <form id="scan_form" name="scan_form" method="post" action="/cgi-bin/koha/sci/sci-main.pl">
155
                                            <caption class="sr-only">Barcodes</caption>
124
                                [% INCLUDE 'csrf-token.inc' %]
156
                                            <thead>
125
                                <legend class="sr-only">Scan</legend>
157
                                                <th class="barcodes_column">Barcode</th>
126
                                <div class="row">
158
                                            </thead>
127
                                    <div class="col-auto">
159
                                            <tbody> </tbody>
128
                                        <label for="barcode_input">Scan the item or enter its barcode:</label>
160
                                        </table>
161
                                        <!-- /#sci_barcodes_table -->
162
                                    </div>
129
                                    </div>
163
                                    <!-- .sci_input_append -->
130
                                    <div class="col-4">
164
                                    <input type="hidden" name="op" value="cud-check_in" />
131
                                        <input id="barcode_input" name="barcode_input" size="20" type="text" class="focus form-control" autocomplete="off" />
165
                                    <div id="button_bar">
166
                                        <button id="sci_checkin_button" type="submit" class="btn btn-primary" style="display: none;"> <i class="fa fa-check-square" aria-hidden="true"></i> <span>Check in</span> </button>
167
                                        <a href="/cgi-bin/koha/sci/sci-main.pl" class="btn btn-danger" role="button" style="display: none;" id="sci_refresh_button"> <i class="fa fa-times" aria-hidden="true"></i> <span>Cancel</span> </a>
168
                                    </div>
132
                                    </div>
169
                                    <!-- /#button_bar -->
133
                                    <div class="col-auto">
170
                                </div>
134
                                        <button id="sci_append_button" type="submit" class="btn btn-primary">
171
                                <!-- /.col -->
135
                                            Submit
172
                            </div>
136
                                        </button>
173
                            <!-- /.row -->
137
                                    </div>
174
                        </form>
138
                                </div> <!-- /.row -->
175
                        <!-- /#scan_form -->
139
                                <div class="row">
176
                    </div>
140
                                    <div class="col">
177
                    <!-- / #new_checkins -->
141
                                        <div class="sci_input_append">
178
                [% END # /IF ( nopermission ) %]
142
                                            <table id="sci_barcodes_table" class="table table-bordered table-striped dataTable no-footer" style="display: none;">
179
143
                                                <caption class="sr-only">Barcodes</caption>
180
                [% IF ( SelfCheckInMainUserBlock ) %]
144
                                                <thead>
181
                    <div id="scimainuserblock"> [% PROCESS koha_news_block news => SelfCheckInMainUserBlock %] </div>
145
                                                    <th class="barcodes_column">Barcode</th>
182
                [% END %]
146
                                                </thead>
183
            </div>
147
                                                <tbody>
184
            <!-- / #masthead -->
148
                                                </tbody>
185
        </div>
149
                                            </table> <!-- /#sci_barcodes_table -->
186
        <!-- / .row -->
150
                                        </div> <!-- .sci_input_append -->
187
    </div>
151
                                        <input type="hidden" name="op" value="cud-check_in" />
188
    <!-- / .container-fluid -->
152
                                        <div id="button_bar">
189
</div>
153
                                            <button id="sci_checkin_button" type="submit" class="btn btn-primary" style="display: none;">
190
<!-- / .main -->
154
                                                <i class="fa fa-check-square" aria-hidden="true"></i> <span>Check in</span>
191
155
                                            </button>
192
[%# Help modal %]
156
                                            <a href="/cgi-bin/koha/sci/sci-main.pl" class="btn btn-danger" role="button" style="display: none;" id="sci_refresh_button">
157
                                                <i class="fa fa-times" aria-hidden="true"></i> <span>Cancel</span>
158
                                            </a>
159
                                        </div> <!-- /#button_bar -->
160
                                    </div> <!-- /.col -->
161
                                </div> <!-- /.row -->
162
                            </form> <!-- /#scan_form -->
163
                        </div> <!-- / #new_checkins -->
164
                    [% END # /IF ( nopermission ) %]
165
166
                    [% IF ( SelfCheckInMainUserBlock ) %]
167
                        <div id="scimainuserblock">
168
                            [% PROCESS koha_news_block news => SelfCheckInMainUserBlock %]
169
                        </div>
170
                    [% END %]
171
                </div> <!-- / #masthead -->
172
            </div> <!-- / .row -->
173
        </div> <!-- / .container-fluid -->
174
175
</div> <!-- / .main -->
176
177
[% # Help modal %]
193
<div id="helpModal" class="modal" tabindex="-1" role="dialog" aria-labelledby="helpModalLabel" aria-hidden="true">
178
<div id="helpModal" class="modal" tabindex="-1" role="dialog" aria-labelledby="helpModalLabel" aria-hidden="true">
194
    <div class="modal-dialog">
179
    <div class="modal-dialog">
195
        <div class="modal-content">
180
        <div class="modal-content">
196
            <div class="modal-header">
181
            <div class="modal-header">
197
                <h1 class="modal-title" id="helpModalLabel">Self check-in help</h1>
182
                <h1 class="modal-title" id="helpModalLabel">Self check-in help</h1>
198
                <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
183
                <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
199
            </div>
184
            </div> <!-- /.modal-header -->
200
            <!-- /.modal-header -->
201
            <div class="modal-body">
185
            <div class="modal-body">
202
                <ul>
186
                <ul>
203
                    <li>Scan each item or enter its barcode. A list with the entered barcodes will be displayed.</li>
187
                    <li>Scan each item or enter its barcode. A list with the entered barcodes will be displayed.</li>
Lines 206-344 Link Here
206
                    <li>The 'Finish' button is presented to start over.</li>
190
                    <li>The 'Finish' button is presented to start over.</li>
207
                    <li>At any step, clicking the 'Cancel' button will erase the scanned barcodes and start over.</li>
191
                    <li>At any step, clicking the 'Cancel' button will erase the scanned barcodes and start over.</li>
208
                </ul>
192
                </ul>
209
            </div>
193
            </div> <!-- /.modal-body -->
210
            <!-- /.modal-body -->
211
            <div class="modal-footer">
194
            <div class="modal-footer">
212
                <button type="button" class="btn btn-primary" data-bs-dismiss="modal">Close</button>
195
                <button type="button" class="btn btn-primary" data-bs-dismiss="modal">Close</button>
213
            </div>
196
            </div>
214
        </div>
197
        </div> <!-- /.modal-content -->
215
        <!-- /.modal-content -->
198
    </div> <!-- /.modal-dialog -->
216
    </div>
199
</div> <!-- /#helpModal -->
217
    <!-- /.modal-dialog -->
218
</div>
219
<!-- /#helpModal -->
220
200
221
</body>
201
</body>
222
202
223
[% INCLUDE 'opac-bottom.inc' %]
203
[% INCLUDE 'opac-bottom.inc' %]
224
[% BLOCK jsinclude %]
204
[% BLOCK jsinclude %]
205
[% Asset.js('js/timeout.js') | $raw %]
225
    <script>
206
    <script>
207
226
        function mungeHistory() {
208
        function mungeHistory() {
227
                    // prevent back button from allowing form resubmission
209
            // prevent back button from allowing form resubmission
228
                    if (history && history.pushState) {
210
            if (history && history.pushState) {
229
                        history.replaceState(null, document.title, window.location.href);
211
                history.replaceState(null, document.title, window.location.href);
230
                    }
212
            }
231
                }
213
        }
232
233
                function dofocus() {
234
                    $(".focus:last").select();
235
                }
236
237
                var barcodes = [];
238
239
                $( window ).on( "load", function() {
240
                    dofocus();
241
                });
242
243
                $( window ).on( "unload", function() {
244
                    mungeHistory();
245
                });
246
247
                $(document).ready(function() {
248
            // Barcodes scanning table initially hidden
249
            $("#sci_barcodes_table").hide();
250
251
            // Control the 'append' button behaviour
252
            $("#sci_append_button").on('click', function(e) {
253
                // Make sure the form is not submitted by the button
254
                e.preventDefault();
255
256
                var barcode = $('#barcode_input').val().trim(); // Trim whitespace from input
257
258
                if (barcode !== "") {
259
                    // Properly escape the barcode value by using .text() for display
260
                    var barcodeHtml = $('<tr style="font-size: initial;"><td></td></tr>');
261
                    barcodeHtml.find('td').text(barcode).append(
262
                        $('<input>').attr({
263
                            type: 'hidden',
264
                            name: 'barcode',
265
                            value: barcode
266
                        })
267
                    );
268
269
                    $('#sci_barcodes_table tbody').append(barcodeHtml);
270
271
                    // Make sure the table is now displayed
272
                    $("#sci_barcodes_table").show();
273
                    $('#sci_checkin_button').show();
274
                    $('#sci_refresh_button').show();
275
276
                    // Add barcode to the array
277
                    barcodes.push(barcode);
278
                }
279
280
                // Clear the input and reset the focus
281
                $('#barcode_input').val('');
282
                dofocus();
283
            });
284
214
285
            $(".helpModal-trigger").on("click", function(e) {
215
        function dofocus() {
286
                e.preventDefault();
216
            $(".focus:last").select();
287
                $("#helpModal").modal("show");
217
        }
288
            });
289
218
290
            // Set focus at the beginning
219
        var barcodes = [];
220
221
        $( window ).on( "load", function() {
291
            dofocus();
222
            dofocus();
292
        });
223
        });
293
224
294
225
        $( window ).on( "unload", function() {
295
                var idleTime = 0;
226
            mungeHistory();
296
                $(document).ready(function () {
297
                    //Increment the idle time counter every second
298
                    var idleInterval = setInterval(timerIncrement, 1000);
299
300
                    //Zero the idle timer on mouse movement.
301
                    $(this).mousemove(function (e) {
302
                        idleTime = 0;
303
                    });
304
                    $(this).keypress(function (e) {
305
                        idleTime = 0;
306
                    });
307
                });
308
309
                function timerIncrement() {
310
                    if ( $("#sci_finish_button").is(":visible") || $("#sci_refresh_button").is(":visible") ) {
311
                        idleTime = idleTime + 1;
312
                        idleTimeout = [% refresh_timeout | html %];
313
                        if (idleTime >= idleTimeout ) {
314
                            location.href = '/cgi-bin/koha/sci/sci-main.pl';
315
                        }
316
                    }
317
                }
318
319
320
                function checkBarcodeInput() {
321
                    var inputField = document.getElementById("barcode_input");
322
                    var button = document.getElementById("sci_append_button");
323
324
                    if (inputField.value.trim() === "") {
325
                        button.disabled = true;
326
                    } else {
327
                        button.disabled = false;
328
                    }
329
                }
330
331
        checkBarcodeInput();
332
333
        document.getElementById("barcode_input").addEventListener("input", checkBarcodeInput);
334
335
        document.getElementById("sci_append_button").addEventListener("click", function() {
336
            setTimeout(checkBarcodeInput, 10);
337
        });
227
        });
228
229
        $(document).ready(function() {
230
    // Barcodes scanning table initially hidden
231
    $("#sci_barcodes_table").hide();
232
233
    // Control the 'append' button behaviour
234
    $("#sci_append_button").on('click', function(e) {
235
        // Make sure the form is not submitted by the button
236
        e.preventDefault();
237
238
        var barcode = $('#barcode_input').val().trim(); // Trim whitespace from input
239
240
        if (barcode !== "") {
241
            // Properly escape the barcode value by using .text() for display
242
            var barcodeHtml = $('<tr style="font-size: initial;"><td></td></tr>');
243
            barcodeHtml.find('td').text(barcode).append(
244
                $('<input>').attr({
245
                    type: 'hidden',
246
                    name: 'barcode',
247
                    value: barcode
248
                })
249
            );
250
251
            $('#sci_barcodes_table tbody').append(barcodeHtml);
252
253
            // Make sure the table is now displayed
254
            $("#sci_barcodes_table").show();
255
            $('#sci_checkin_button').show();
256
            $('#sci_refresh_button').show();
257
            login_timeout();
258
259
            // Add barcode to the array
260
            barcodes.push(barcode);
261
        }
262
263
        // Clear the input and reset the focus
264
        $('#barcode_input').val('');
265
        dofocus();
266
    });
267
268
    $(".helpModal-trigger").on("click", function(e) {
269
        e.preventDefault();
270
        $("#helpModal").modal("show");
271
    });
272
273
    // Set focus at the beginning
274
    dofocus();
275
});
276
277
    document.addEventListener("DOMContentLoaded",function(){
278
        if ( document.querySelector('#sci_finish_button,#sci_append_button') ){
279
            login_timeout();
280
        }
281
    });
282
    function login_timeout(){
283
        //NOTE: There can only be 1 sci_login_timer at a time
284
        if ( ! window.sci_login_timer ){
285
            const idleTimeout = "[% Koha.Preference('SelfCheckInTimeOut') || 120 | html %]";
286
            const home_href = "/cgi-bin/koha/sci/sci-main.pl";
287
            const sci_timer = new sc_timer({
288
                "idle_timeout": idleTimeout,
289
                "redirect_url": home_href
290
            });
291
            window.sci_login_timer = sci_timer;
292
            sci_timer.start_timer();
293
        }
294
    }
295
296
        function checkBarcodeInput() {
297
            var inputField = document.getElementById("barcode_input");
298
            var button = document.getElementById("sci_append_button");
299
300
            if (inputField.value.trim() === "") {
301
                button.disabled = true;
302
            } else {
303
                button.disabled = false;
304
            }
305
        }
306
307
checkBarcodeInput();
308
309
document.getElementById("barcode_input").addEventListener("input", checkBarcodeInput);
310
311
document.getElementById("sci_append_button").addEventListener("click", function() {
312
    setTimeout(checkBarcodeInput, 10);
313
});
314
315
316
317
318
319
320
338
    </script>
321
    </script>
322
339
    [% IF ( Koha.Preference('SelfCheckInUserJS') ) %]
323
    [% IF ( Koha.Preference('SelfCheckInUserJS') ) %]
340
        <script>
324
        <script>[% Koha.Preference('SelfCheckInUserJS') | $raw %]</script>
341
            [% Koha.Preference('SelfCheckInUserJS') | $raw %]
342
        </script>
343
    [% END %]
325
    [% END %]
344
[% END %]
326
[% END %]
(-)a/koha-tmpl/opac-tmpl/bootstrap/js/timeout.js (+39 lines)
Line 0 Link Here
1
class sc_timer {
2
    constructor(args) {
3
        const idle_timeout = args["idle_timeout"];
4
        const redirect_url = args["redirect_url"];
5
        if (idle_timeout) {
6
            this.idle_timeout = idle_timeout;
7
        }
8
        if (redirect_url) {
9
            this.redirect_url = redirect_url;
10
        }
11
        this.idle_time = 0;
12
    }
13
14
    start_timer() {
15
        const self = this;
16
        //Increment the idle time counter every 1 second
17
        const idle_interval = setInterval(function () {
18
            self._timer_increment();
19
        }, 1000);
20
21
        document.addEventListener("mousemove", function () {
22
            self.reset_timer();
23
        });
24
        document.addEventListener("keypress", function () {
25
            self.reset_timer();
26
        });
27
    }
28
29
    reset_timer() {
30
        this.idle_time = 0;
31
    }
32
33
    _timer_increment() {
34
        this.idle_time++;
35
        if (this.idle_time >= this.idle_timeout) {
36
            location.href = this.redirect_url;
37
        }
38
    }
39
}
(-)a/opac/sci/sci-main.pl (-5 lines)
Lines 102-109 if ( $op eq 'cud-check_in' ) { Link Here
102
    $template->param( success => \@success, errors => \@errors, checkins => 1 );
102
    $template->param( success => \@success, errors => \@errors, checkins => 1 );
103
}
103
}
104
104
105
# Make sure timeout has a reasonable value
106
my $timeout = C4::Context->preference('SelfCheckInTimeout') || 120;
107
$template->param( refresh_timeout => $timeout );
108
109
output_html_with_http_headers $cgi, $cookie, $template->output, undef, { force_no_caching => 1 };
105
output_html_with_http_headers $cgi, $cookie, $template->output, undef, { force_no_caching => 1 };
110
- 

Return to bug 36586