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

(-)a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/aqbudgetperiods.tt (-53 / +49 lines)
Lines 566-633 Link Here
566
        <script>
566
        <script>
567
            const budget_period_description = "[% budget_period_description | html %]";
567
            const budget_period_description = "[% budget_period_description | html %]";
568
        </script>
568
        </script>
569
570
        <script>
569
        <script>
571
            $(document).ready(function() {
570
            $(document).ready(function () {
572
                $("#budgeth").kohaTable({
571
                $("#budgeth").kohaTable({
573
                    dom: "t",
572
                    dom: "t",
574
                });
573
                });
575
              $("#move_form").submit(function(){
574
                $("#move_form").submit(function () {
576
                var budget_from = budget_period_description;
575
                    var budget_from = budget_period_description;
577
                var budget_to = $("#to_budget_period_id").find("option:selected").html();
576
                    var budget_to = $("#to_budget_period_id").find("option:selected").html();
578
                var alert_message = _("You have chosen to move all unreceived orders from '%s' to '%s'.").format(budget_from, budget_to);
577
                    var alert_message = _("You have chosen to move all unreceived orders from '%s' to '%s'.").format(budget_from, budget_to);
579
                alert_message += "\n" + _("This action cannot be reversed. Do you wish to continue?");
578
                    alert_message += "\n" + _("This action cannot be reversed. Do you wish to continue?");
580
                return confirm ( alert_message );
579
                    return confirm(alert_message);
581
              });
580
                });
582
            });
581
            });
583
        </script>
582
        </script>
584
    [% END %]
583
    [% END %]
585
584
586
    [% IF closed %]
585
    [% IF closed %]
587
        <script>
586
        <script>
588
            $(document).ready(function() {
587
            $(document).ready(function () {
589
              var oTable = $("#closed_report").kohaTable({
588
                var oTable = $("#closed_report").kohaTable({
590
                // The following is a c/p from aqbudgets.tt and is a candidate for refactoring.
589
                    // The following is a c/p from aqbudgets.tt and is a candidate for refactoring.
591
                drawCallback: function ( oSettings ) {
590
                    drawCallback: function (oSettings) {
592
                    if ( oSettings.aiDisplay.length == 0 )
591
                        if (oSettings.aiDisplay.length == 0) {
593
                    {
592
                            return;
594
                        return;
595
                    }
596
597
                    var nTrs = $('#closed_report tbody tr');
598
                    var iColspan = nTrs[1].getElementsByTagName('td').length;
599
                    var sLastGroup = "";
600
                    for ( var i=0 ; i<nTrs.length ; i++ )
601
                    {
602
                        var iDisplayIndex = oSettings._iDisplayStart + i;
603
                        var sGroup = oSettings.aoData[ oSettings.aiDisplay[iDisplayIndex] ]._aData[0];
604
                        if ( sGroup != sLastGroup )
605
                        {
606
                            var nGroup = document.createElement( 'tr' );
607
                            var nCell = document.createElement( 'td' );
608
                            nCell.colSpan = iColspan;
609
                            nCell.className = "group";
610
                            nCell.innerHTML = sGroup;
611
                            nGroup.appendChild( nCell );
612
                            nTrs[i].parentNode.insertBefore( nGroup, nTrs[i] );
613
                            sLastGroup = sGroup;
614
                        }
593
                        }
615
                    }
594
616
                },
595
                        var nTrs = $("#closed_report tbody tr");
617
                columnDefs: [
596
                        var iColspan = nTrs[1].getElementsByTagName("td").length;
618
                    { visible: false, targets: [ 0, 1 ] },
597
                        var sLastGroup = "";
619
                    { orderable: false, targets: ["_all"] }
598
                        for (var i = 0; i < nTrs.length; i++) {
620
                ],
599
                            var iDisplayIndex = oSettings._iDisplayStart + i;
621
                ordering: true,
600
                            var sGroup = oSettings.aoData[oSettings.aiDisplay[iDisplayIndex]]._aData[0];
622
                orderFixed: [[ 1, 'asc' ]],
601
                            if (sGroup != sLastGroup) {
623
                autoWidth: false,
602
                                var nGroup = document.createElement("tr");
624
                pagingType: "full_numbers"
603
                                var nCell = document.createElement("td");
625
              });
604
                                nCell.colSpan = iColspan;
605
                                nCell.className = "group";
606
                                nCell.innerHTML = sGroup;
607
                                nGroup.appendChild(nCell);
608
                                nTrs[i].parentNode.insertBefore(nGroup, nTrs[i]);
609
                                sLastGroup = sGroup;
610
                            }
611
                        }
612
                    },
613
                    columnDefs: [
614
                        { visible: false, targets: [0, 1] },
615
                        { orderable: false, targets: ["_all"] },
616
                    ],
617
                    ordering: true,
618
                    orderFixed: [[1, "asc"]],
619
                    autoWidth: false,
620
                    pagingType: "full_numbers",
621
                });
626
            });
622
            });
627
        </script>
623
        </script>
628
    [% END %]
624
    [% END %]
629
    <script>
625
    <script>
630
        $(document).ready(function() {
626
        $(document).ready(function () {
631
            let dt_params = {
627
            let dt_params = {
632
                pagingType: "full",
628
                pagingType: "full",
633
                autoWidth: false,
629
                autoWidth: false,
Lines 641-658 Link Here
641
                    budget_period_startdate: "required",
637
                    budget_period_startdate: "required",
642
                    budget_period_enddate: {
638
                    budget_period_enddate: {
643
                        required: true,
639
                        required: true,
644
                        date_on_or_after: "#from"
640
                        date_on_or_after: "#from",
645
                    },
641
                    },
646
                    budget_period_description: "required",
642
                    budget_period_description: "required",
647
                    budget_period_total: {
643
                    budget_period_total: {
648
                        number: true
644
                        number: true,
649
                    }
645
                    },
650
                },
646
                },
651
                messages: {
647
                messages: {
652
                    budget_period_enddate: {
648
                    budget_period_enddate: {
653
                        date_on_or_after: _("Budget end date must be on or after budget start date")
649
                        date_on_or_after: _("Budget end date must be on or after budget start date"),
654
                    }
650
                    },
655
                }
651
                },
656
            });
652
            });
657
        });
653
        });
658
    </script>
654
    </script>
(-)a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/aqbudgets.tt (-42 / +38 lines)
Lines 680-761 Link Here
680
            <script>
680
            <script>
681
                const budget_period_id = [% budget_period_id || 'null' | html %];
681
                const budget_period_id = [% budget_period_id || 'null' | html %];
682
            </script>
682
            </script>
683
684
            <script>
683
            <script>
685
                $(document).ready(function() {
684
                $(document).ready(function () {
686
                    var oTable = $("#budgeth").kohaTable({
685
                    var oTable = $("#budgeth").kohaTable({
687
                        drawCallback: function ( oSettings ) {
686
                        drawCallback: function (oSettings) {
688
                            if ( oSettings.aiDisplay.length == 0 )
687
                            if (oSettings.aiDisplay.length == 0) {
689
                            {
690
                                return;
688
                                return;
691
                            }
689
                            }
692
690
693
                            var nTrs = $('#budgeth tbody tr');
691
                            var nTrs = $("#budgeth tbody tr");
694
                            var iColspan = nTrs[0].getElementsByTagName('td').length;
692
                            var iColspan = nTrs[0].getElementsByTagName("td").length;
695
                            var sLastGroup = "";
693
                            var sLastGroup = "";
696
                            for ( var i=0 ; i<nTrs.length ; i++ )
694
                            for (var i = 0; i < nTrs.length; i++) {
697
                            {
698
                                var iDisplayIndex = oSettings._iDisplayStart + i;
695
                                var iDisplayIndex = oSettings._iDisplayStart + i;
699
                                var sGroup = oSettings.aoData[ oSettings.aiDisplay[iDisplayIndex] ]._aData[1];
696
                                var sGroup = oSettings.aoData[oSettings.aiDisplay[iDisplayIndex]]._aData[1];
700
                                if ( sGroup != sLastGroup )
697
                                if (sGroup != sLastGroup) {
701
                                {
698
                                    var nGroup = document.createElement("tr");
702
                                    var nGroup = document.createElement( 'tr' );
699
                                    var nCell = document.createElement("td");
703
                                    var nCell = document.createElement( 'td' );
704
                                    nCell.colSpan = iColspan;
700
                                    nCell.colSpan = iColspan;
705
                                    nCell.className = "group";
701
                                    nCell.className = "group";
706
                                    nCell.innerHTML = sGroup;
702
                                    nCell.innerHTML = sGroup;
707
                                    nGroup.appendChild( nCell );
703
                                    nGroup.appendChild(nCell);
708
                                    nTrs[i].parentNode.insertBefore( nGroup, nTrs[i] );
704
                                    nTrs[i].parentNode.insertBefore(nGroup, nTrs[i]);
709
                                    sLastGroup = sGroup;
705
                                    sLastGroup = sGroup;
710
                                }
706
                                }
711
                            }
707
                            }
712
                        },
708
                        },
713
                        footerCallback: function ( row, data, start, end, display ) {
709
                        footerCallback: function (row, data, start, end, display) {
714
                            var api = this.api(), data;
710
                            var api = this.api(),
715
                            footer_column_sum( api, [ 4, 6, 8, 10 ], 2 );
711
                                data;
712
                            footer_column_sum(api, [4, 6, 8, 10], 2);
716
                        },
713
                        },
717
                        columnDefs: [
714
                        columnDefs: [
718
                            { visible: false, targets: [ 0, 1 ] },
715
                            { visible: false, targets: [0, 1] },
719
                            { orderable: false, targets: ["_all"] }
716
                            { orderable: false, targets: ["_all"] },
720
                        ],
717
                        ],
721
                        ordering: true,
718
                        ordering: true,
722
                        orderFixed: [[ 1, 'asc' ]],
719
                        orderFixed: [[1, "asc"]],
723
                        paging: false,
720
                        paging: false,
724
                        autoWidth: false
721
                        autoWidth: false,
725
                    });
722
                    });
726
                    let table_dt = oTable.DataTable();
723
                    let table_dt = oTable.DataTable();
727
724
728
                    $(oTable).treetable({
725
                    $(oTable).treetable({
729
                        expandable: true
726
                        expandable: true,
730
                    });
727
                    });
731
                    $(oTable).treetable('expandAll');
728
                    $(oTable).treetable("expandAll");
732
                    $("#expand_all").click(function(e){
729
                    $("#expand_all").click(function (e) {
733
                        e.preventDefault();
730
                        e.preventDefault();
734
                        $(oTable).treetable('expandAll');
731
                        $(oTable).treetable("expandAll");
735
                    });
732
                    });
736
                    $("#collapse_all").click(function(e){
733
                    $("#collapse_all").click(function (e) {
737
                        e.preventDefault();
734
                        e.preventDefault();
738
                        $(oTable).treetable('collapseAll');
735
                        $(oTable).treetable("collapseAll");
739
                    });
736
                    });
740
737
741
                    if (!budget_period_id){
738
                    if (!budget_period_id) {
742
                      $("#hide_inactive").click(function(e){
739
                        $("#hide_inactive").click(function (e) {
743
                        e.preventDefault();
740
                            e.preventDefault();
744
                        table_dt.columns(0).search(1).draw(); // Show only active=1
741
                            table_dt.columns(0).search(1).draw(); // Show only active=1
745
                      });
742
                        });
746
                      $("#show_inactive").click(function(e){
743
                        $("#show_inactive").click(function (e) {
747
                        e.preventDefault();
744
                            e.preventDefault();
748
                        table_dt.columns(0).search("").draw(); // Show only active=1
745
                            table_dt.columns(0).search("").draw(); // Show only active=1
749
                      });
746
                        });
750
                      $("#hide_inactive").click();
747
                        $("#hide_inactive").click();
751
                    }
748
                    }
752
                });
749
                });
753
            </script>
750
            </script>
754
        [% END %]
751
        [% END %]
755
756
        <script>
752
        <script>
757
            $(document).ready(function() {
753
            $(document).ready(function () {
758
                $(".deletefund-disabled").on("click", function(e){
754
                $(".deletefund-disabled").on("click", function (e) {
759
                    e.preventDefault();
755
                    e.preventDefault();
760
                    alert(_("This fund has sub funds. It cannot be deleted."));
756
                    alert(_("This fund has sub funds. It cannot be deleted."));
761
                });
757
                });
(-)a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/auth_subfields_structure.tt (-5 / +3 lines)
Lines 438-455 Link Here
438
    <script>
438
    <script>
439
        const tagsubfield = [% IF tabsubfield %]"[% tabsubfield | html %]"[% ELSE %]null[% END %];
439
        const tagsubfield = [% IF tabsubfield %]"[% tabsubfield | html %]"[% ELSE %]null[% END %];
440
    </script>
440
    </script>
441
442
    <script>
441
    <script>
443
        $(document).ready(function() {
442
        $(document).ready(function () {
444
            $("#table_authsubfieldstructure").kohaTable({
443
            $("#table_authsubfieldstructure").kohaTable({
445
                order: [],
444
                order: [],
446
                paging: false,
445
                paging: false,
447
            });
446
            });
448
447
449
            if ($("#subfieldtabs").length > 0) {
448
            if ($("#subfieldtabs").length > 0) {
450
                if (tagsubfield && tagsubfield == "@"){
449
                if (tagsubfield && tagsubfield == "@") {
451
                    $("#subfieldtabs a[href='#AT_panel']").tab("show");
450
                    $("#subfieldtabs a[href='#AT_panel']").tab("show");
452
                } else if ( tagsubfield && tagsubfield != "@") {
451
                } else if (tagsubfield && tagsubfield != "@") {
453
                    $(`#subfieldtabs a[href='#${tagsubfield}_panel']`).tab("show");
452
                    $(`#subfieldtabs a[href='#${tagsubfield}_panel']`).tab("show");
454
                } else {
453
                } else {
455
                    $("#subfieldtabs a:first").tab("show");
454
                    $("#subfieldtabs a:first").tab("show");
Lines 472-478 Link Here
472
                    },
471
                    },
473
                });
472
                });
474
            }
473
            }
475
476
        });
474
        });
477
    </script>
475
    </script>
478
[% END %]
476
[% END %]
(-)a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/background_jobs.tt (-85 / +104 lines)
Lines 244-349 Link Here
244
            type: "[% job.type | html %]",
244
            type: "[% job.type | html %]",
245
        };
245
        };
246
    </script>
246
    </script>
247
248
    <script>
247
    <script>
249
        function get_job_type (job_type) {
248
        function get_job_type(job_type) {
250
            let job_type_lib = job_types.find( t => t._id == job_type );
249
            let job_type_lib = job_types.find(t => t._id == job_type);
251
            if ( job_type_lib ) {
250
            if (job_type_lib) {
252
                return job_type_lib._str;
251
                return job_type_lib._str;
253
            }
252
            }
254
            return _("Unknown job type '%s'").format(job_type);
253
            return _("Unknown job type '%s'").format(job_type);
255
        }
254
        }
256
255
257
        $(document).ready(function() {
256
        $(document).ready(function () {
258
            if (op == 'view'){
257
            if (op == "view") {
259
                $("#job_status_description").html( get_job_status(job.status) );
258
                $("#job_status_description").html(get_job_status(job.status));
260
                $("#job_type_description").html( get_job_type(job.type) );
259
                $("#job_type_description").html(get_job_type(job.type));
261
                $("#job_details").show();
260
                $("#job_details").show();
262
            }
261
            }
263
262
264
            let only_current_filter = function(){
263
            let only_current_filter = function () {
265
                if ( $("#only_current").is(":checked") ) {
264
                if ($("#only_current").is(":checked")) {
266
                    return 'only_current=1';
265
                    return "only_current=1";
267
                } else {
266
                } else {
268
                    return 'only_current=0';
267
                    return "only_current=0";
269
                }
268
                }
270
            }
269
            };
271
270
272
            let jobs_table = $("#table_jobs").kohaTable({
271
            let jobs_table = $("#table_jobs").kohaTable(
273
                ajax: {
272
                {
274
                    "url": "/api/v1/jobs?" + only_current_filter()
273
                    ajax: {
275
                },
274
                        url: "/api/v1/jobs?" + only_current_filter(),
276
                order: [[ 4, "desc" ]],
277
                columns: [
278
                    {
279
                        data: "job_id",
280
                        searchable: true,
281
                        orderable: true
282
                    },
283
                    {
284
                        data: "status",
285
                        searchable: true,
286
                        orderable: true,
287
                        render: function(data, type, row, meta) {
288
                            return get_job_status(row.status).escapeHtml();
289
                        }
290
                    },
291
                    {
292
                        data: "progress,size",
293
                        searchable: false,
294
                        orderable: true,
295
                        render: function(data, type, row, meta) {
296
                            return "%s/%s".format(row.progress, row.size).escapeHtml();
297
                        }
298
                    },
299
                    {
300
                        data: "type",
301
                        searchable: true,
302
                        orderable: true,
303
                        render: function(data, type, row, meta) {
304
                            return get_job_type(row.type);
305
                        }
306
                    },
307
                    {
308
                        data: "enqueued_date",
309
                        searchable: true,
310
                        orderable: true,
311
                        render: function(data, type, row, meta) {
312
                            return $datetime(row.enqueued_date);
313
                        }
314
                    },
315
                    {
316
                        data: "started_date",
317
                        searchable: true,
318
                        orderable: true,
319
                        render: function(data, type, row, meta) {
320
                            return $datetime(row.started_date);
321
                        }
322
                    },
323
                    {
324
                        data: "ended_date",
325
                        searchable: true,
326
                        orderable: true,
327
                        render: function(data, type, row, meta) {
328
                            return $datetime(row.ended_date);
329
                        }
330
                    },
275
                    },
331
                    {
276
                    order: [[4, "desc"]],
332
                        data: function( row, type, val, meta ) {
277
                    columns: [
333
                            var result = '<a class="btn btn-default btn-xs" role="button" href="/cgi-bin/koha/admin/background_jobs.pl?op=view&amp;id='+ encodeURIComponent(row.job_id) +'"><i class="fa-solid fa-eye aria-hidden="true"></i> '+_("View")+'</a>'+"\n";
278
                        {
334
                            if ( row.status == 'new' || row.status == 'started' ) {
279
                            data: "job_id",
335
                                result += '<a class="btn btn-default btn-xs submit-form-link" role="button" href="#" data-action="/cgi-bin/koha/admin/background_jobs.pl" data-method="post" data-op="cud-cancel" data-confirmation-msg="' + _("Are you sure you want to cancel this job?") + '" data-id="'+ encodeURIComponent(row.job_id) +'"><i class="fa fa-trash-can" aria-hidden="true"></i> '+_("Cancel")+'</a>';
280
                            searchable: true,
336
                            }
281
                            orderable: true,
337
                            return result;
338
                        },
282
                        },
339
                        searchable: false,
283
                        {
340
                        orderable: false
284
                            data: "status",
341
                    }
285
                            searchable: true,
342
                ]
286
                            orderable: true,
343
            }, null, 1);
287
                            render: function (data, type, row, meta) {
288
                                return get_job_status(row.status).escapeHtml();
289
                            },
290
                        },
291
                        {
292
                            data: "progress,size",
293
                            searchable: false,
294
                            orderable: true,
295
                            render: function (data, type, row, meta) {
296
                                return "%s/%s".format(row.progress, row.size).escapeHtml();
297
                            },
298
                        },
299
                        {
300
                            data: "type",
301
                            searchable: true,
302
                            orderable: true,
303
                            render: function (data, type, row, meta) {
304
                                return get_job_type(row.type);
305
                            },
306
                        },
307
                        {
308
                            data: "enqueued_date",
309
                            searchable: true,
310
                            orderable: true,
311
                            render: function (data, type, row, meta) {
312
                                return $datetime(row.enqueued_date);
313
                            },
314
                        },
315
                        {
316
                            data: "started_date",
317
                            searchable: true,
318
                            orderable: true,
319
                            render: function (data, type, row, meta) {
320
                                return $datetime(row.started_date);
321
                            },
322
                        },
323
                        {
324
                            data: "ended_date",
325
                            searchable: true,
326
                            orderable: true,
327
                            render: function (data, type, row, meta) {
328
                                return $datetime(row.ended_date);
329
                            },
330
                        },
331
                        {
332
                            data: function (row, type, val, meta) {
333
                                var result =
334
                                    '<a class="btn btn-default btn-xs" role="button" href="/cgi-bin/koha/admin/background_jobs.pl?op=view&amp;id=' +
335
                                    encodeURIComponent(row.job_id) +
336
                                    '"><i class="fa-solid fa-eye aria-hidden="true"></i> ' +
337
                                    _("View") +
338
                                    "</a>" +
339
                                    "\n";
340
                                if (row.status == "new" || row.status == "started") {
341
                                    result +=
342
                                        '<a class="btn btn-default btn-xs submit-form-link" role="button" href="#" data-action="/cgi-bin/koha/admin/background_jobs.pl" data-method="post" data-op="cud-cancel" data-confirmation-msg="' +
343
                                        _("Are you sure you want to cancel this job?") +
344
                                        '" data-id="' +
345
                                        encodeURIComponent(row.job_id) +
346
                                        '"><i class="fa fa-trash-can" aria-hidden="true"></i> ' +
347
                                        _("Cancel") +
348
                                        "</a>";
349
                                }
350
                                return result;
351
                            },
352
                            searchable: false,
353
                            orderable: false,
354
                        },
355
                    ],
356
                },
357
                null,
358
                1
359
            );
344
360
345
            $("#only_current").on("change", function(){
361
            $("#only_current").on("change", function () {
346
                jobs_table.DataTable().ajax.url("/api/v1/jobs?" + only_current_filter()).load();
362
                jobs_table
363
                    .DataTable()
364
                    .ajax.url("/api/v1/jobs?" + only_current_filter())
365
                    .load();
347
                return false;
366
                return false;
348
            });
367
            });
349
        });
368
        });
(-)a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/branch_transfer_limits.tt (-22 / +21 lines)
Lines 135-188 Link Here
135
[% MACRO jsinclude BLOCK %]
135
[% MACRO jsinclude BLOCK %]
136
    [% Asset.js("js/admin-menu.js") | $raw %]
136
    [% Asset.js("js/admin-menu.js") | $raw %]
137
    [% INCLUDE 'datatables.inc' %]
137
    [% INCLUDE 'datatables.inc' %]
138
        <script>
138
    <script>
139
            const codes_loop = [% To.json(codes_loop) | $raw %];
139
        const codes_loop = [% To.json(codes_loop) | $raw %];
140
        </script>
140
    </script>
141
141
    <script>
142
        <script>
142
        $(document).ready(function () {
143
            $(document).ready(function(){
143
            $("#CheckAll").on("click", function (e) {
144
            $("#CheckAll").on("click", function(e){
145
                e.preventDefault();
144
                e.preventDefault();
146
                $(".cb").each(function(){
145
                $(".cb").each(function () {
147
                    $(this).prop("checked", true);
146
                    $(this).prop("checked", true);
148
                });
147
                });
149
            });
148
            });
150
149
151
            $("#UncheckAll").on("click", function(e){
150
            $("#UncheckAll").on("click", function (e) {
152
                e.preventDefault();
151
                e.preventDefault();
153
                $(".cb").each(function(){
152
                $(".cb").each(function () {
154
                    $(this).prop("checked", false);
153
                    $(this).prop("checked", false);
155
                });
154
                });
156
            });
155
            });
157
156
158
            if( $("#transferlimit_tabs .tab-pane.active").length < 1 ){
157
            if ($("#transferlimit_tabs .tab-pane.active").length < 1) {
159
                  $("#transferlimit_tabs a:first").tab("show");
158
                $("#transferlimit_tabs a:first").tab("show");
160
            }
159
            }
161
160
162
             $('#branchselect').change(function() {
161
            $("#branchselect").change(function () {
163
                $('#selectlibrary').submit();
162
                $("#selectlibrary").submit();
164
             });
163
            });
165
164
166
            var checkall = $(".checkall");
165
            var checkall = $(".checkall");
167
            var uncheckall = $(".uncheckall");
166
            var uncheckall = $(".uncheckall");
168
167
169
            $(checkall).on("click", function(e){
168
            $(checkall).on("click", function (e) {
170
                e.preventDefault();
169
                e.preventDefault();
171
                var tid = $(this).data("cb");
170
                var tid = $(this).data("cb");
172
                $(".cb" + tid ).each(function(){
171
                $(".cb" + tid).each(function () {
173
                    $(this).prop("checked", true);
172
                    $(this).prop("checked", true);
174
                })
173
                });
175
            });
174
            });
176
175
177
            $(uncheckall).on("click", function(e){
176
            $(uncheckall).on("click", function (e) {
178
                e.preventDefault();
177
                e.preventDefault();
179
                var tid = $(this).data("cb");
178
                var tid = $(this).data("cb");
180
                $(".cb" + tid ).each(function(){
179
                $(".cb" + tid).each(function () {
181
                    $(this).prop("checked", false);
180
                    $(this).prop("checked", false);
182
                })
181
                });
183
            });
182
            });
184
183
185
            codes_loop.forEach((code) => {
184
            codes_loop.forEach(code => {
186
                $(`#${code.code}table`).kohaTable({
185
                $(`#${code.code}table`).kohaTable({
187
                    paging: false,
186
                    paging: false,
188
                });
187
                });
(-)a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/branches.tt (-169 / +175 lines)
Lines 820-1001 Link Here
820
        var table_settings = [% TablesSettings.GetTableSettings( 'admin', 'libraries', 'libraries', 'json' ) | $raw %];
820
        var table_settings = [% TablesSettings.GetTableSettings( 'admin', 'libraries', 'libraries', 'json' ) | $raw %];
821
        var calendarFirstDayOfWeek = '[% Koha.Preference('CalendarFirstDayOfWeek') | html %]';
821
        var calendarFirstDayOfWeek = '[% Koha.Preference('CalendarFirstDayOfWeek') | html %]';
822
    </script>
822
    </script>
823
824
    <script>
823
    <script>
825
        var libraries_table;
824
        var libraries_table;
826
        $(document).ready(function() {
825
        $(document).ready(function () {
827
826
            var libraries_url = "/api/v1/libraries";
828
            var libraries_url = '/api/v1/libraries';
827
            libraries_table = $("#libraries").kohaTable(
829
            libraries_table = $("#libraries").kohaTable({
828
                {
830
                ajax: {
829
                    ajax: {
831
                    "url": libraries_url
830
                        url: libraries_url,
832
                },
833
                embed: [ 'smtp_server', 'library_hours' ],
834
                emptyTable: '<div class="alert alert-info">'+_("There are no libraries defined.")+' <a href="/cgi-bin/koha/admin/branches.pl?op=add_form">'+_("Start defining libraries")+'</a>.</div>',
835
                columnDefs: [ {
836
                    targets: [1,3,4,5,6],
837
                    render: function (data, type, row, meta) {
838
                        if ( type == 'display' ) {
839
                            if ( data != null ) {
840
                                return data.escapeHtml();
841
                            }
842
                            else {
843
                                return "";
844
                            }
845
                        }
846
                        return data;
847
                    }
848
                } ],
849
                columns: [
850
                    {
851
                        data: "name",
852
                        searchable: true,
853
                        orderable: true,
854
                        render: function( data, type, row, meta ) {
855
                            return "<a href=\"/cgi-bin/koha/admin/branches.pl?op=view&branchcode=" + encodeURIComponent( row.library_id ) + "\">" + row.name.escapeHtml() + "</a>";
856
                        }
857
                    },
858
                    {
859
                        data: "library_id",
860
                        searchable: true,
861
                        orderable: true
862
                    },
831
                    },
863
                    {
832
                    embed: ["smtp_server", "library_hours"],
864
                        render: function( data, type, row, meta ) {
833
                    emptyTable: '<div class="alert alert-info">' + _("There are no libraries defined.") + ' <a href="/cgi-bin/koha/admin/branches.pl?op=add_form">' + _("Start defining libraries") + "</a>.</div>",
865
                            const library_info = [];
834
                    columnDefs: [
866
                            if ( row.address1 != null ) library_info.push(row.address1.escapeHtml());
835
                        {
867
                            if ( row.address2 != null ) library_info.push(row.address2.escapeHtml());
836
                            targets: [1, 3, 4, 5, 6],
868
                            if ( row.address3 != null ) library_info.push(row.address3.escapeHtml());
837
                            render: function (data, type, row, meta) {
869
                            // geographical_location = city, state postal_code
838
                                if (type == "display") {
870
                            const locations = [];
839
                                    if (data != null) {
871
                            if ( row.city != null ) locations.push(row.city.escapeHtml());
840
                                        return data.escapeHtml();
872
                            if ( row.state != null ) locations.push(row.state.escapeHtml());
841
                                    } else {
873
                            const geographical_location = locations.join(', ');
842
                                        return "";
874
                            if ( geographical_location != '' && row.postal_code != null) {
843
                                    }
875
                                library_info.push(geographical_location+' '+row.postal_code.escapeHtml());
844
                                }
876
                            }
845
                                return data;
877
                            else {
846
                            },
878
                                library_info.push(geographical_location);
879
                            }
880
                            if ( row.country != null ) library_info.push(row.country.escapeHtml());
881
                            if ( row.phone != null ) library_info.push(_("Ph: ") + row.phone.escapeHtml());
882
                            if ( row.fax != null ) library_info.push(_("Fax: ") + row.fax.escapeHtml());
883
                            if ( row.email != null ) library_info.push('<a href="mailto:'+encodeURIComponent(row.email)+'">'+row.email.escapeHtml()+'</a>');
884
                            if ( row.url != null ) library_info.push('<a href="'+encodeURI(row.url)+'">'+row.url.escapeHtml()+'</a>');
885
                            if ( row.notes != null ) library_info.push(_("Notes")+': '+row.notes.escapeHtml());
886
                            return library_info.join('<br/>');
887
                        },
847
                        },
888
                        searchable: false,
848
                    ],
889
                        orderable: false
849
                    columns: [
890
                    },
850
                        {
891
                    {
851
                            data: "name",
892
                        data: "marc_org_code",
852
                            searchable: true,
893
                        searchable: true,
853
                            orderable: true,
894
                        orderable: true
854
                            render: function (data, type, row, meta) {
895
                    },
855
                                return '<a href="/cgi-bin/koha/admin/branches.pl?op=view&branchcode=' + encodeURIComponent(row.library_id) + '">' + row.name.escapeHtml() + "</a>";
896
                    {
856
                            },
897
                        data: "ip",
898
                        searchable: true,
899
                        orderable: true
900
                    },
901
                    {
902
                        data: "pickup_location",
903
                        searchable: true,
904
                        orderable: true,
905
                        render: function( data, type, row, meta ) {
906
                            return (data) ? _("Yes") : _("No");
907
                        }
908
                    },
909
                    {
910
                        data: "public",
911
                        searchable: true,
912
                        orderable: true,
913
                        render: function( data, type, row, meta ) {
914
                            return (data) ? _("Yes") : _("No");
915
                        }
916
                    },
917
                    {
918
                        data: "smtp_server",
919
                        render: function( data, type, row, meta ) {
920
                            if ( data.smtp_server_id ) {
921
                                return '<a href="/cgi-bin/koha/admin/smtp_servers.pl?op=edit_form&smtp_server_id='+encodeURIComponent(data.smtp_server_id)+'">'+data.name.escapeHtml()+'</a>';
922
                            }
923
                            else {
924
                                return _("Default").escapeHtml();
925
                            }
926
                        },
857
                        },
927
                        searchable: false,
858
                        {
928
                        visible: true,
859
                            data: "library_id",
929
                        orderable: false
860
                            searchable: true,
930
                    },
861
                            orderable: true,
931
                    {
862
                        },
932
                        data: function( row, type, val, meta ) {
863
                        {
933
                            let result = '';
864
                            render: function (data, type, row, meta) {
934
                            let set_hours = 0;
865
                                const library_info = [];
935
                            if ( row.library_hours.length > 0 ) {
866
                                if (row.address1 != null) library_info.push(row.address1.escapeHtml());
936
                                for (let check_counter = 0; check_counter < 7; check_counter++) {
867
                                if (row.address2 != null) library_info.push(row.address2.escapeHtml());
937
                                    if ( row.library_hours[check_counter].open_time != null || row.library_hours[check_counter].close_time != null ) {
868
                                if (row.address3 != null) library_info.push(row.address3.escapeHtml());
938
                                        set_hours = 1;
869
                                // geographical_location = city, state postal_code
870
                                const locations = [];
871
                                if (row.city != null) locations.push(row.city.escapeHtml());
872
                                if (row.state != null) locations.push(row.state.escapeHtml());
873
                                const geographical_location = locations.join(", ");
874
                                if (geographical_location != "" && row.postal_code != null) {
875
                                    library_info.push(geographical_location + " " + row.postal_code.escapeHtml());
876
                                } else {
877
                                    library_info.push(geographical_location);
878
                                }
879
                                if (row.country != null) library_info.push(row.country.escapeHtml());
880
                                if (row.phone != null) library_info.push(_("Ph: ") + row.phone.escapeHtml());
881
                                if (row.fax != null) library_info.push(_("Fax: ") + row.fax.escapeHtml());
882
                                if (row.email != null) library_info.push('<a href="mailto:' + encodeURIComponent(row.email) + '">' + row.email.escapeHtml() + "</a>");
883
                                if (row.url != null) library_info.push('<a href="' + encodeURI(row.url) + '">' + row.url.escapeHtml() + "</a>");
884
                                if (row.notes != null) library_info.push(_("Notes") + ": " + row.notes.escapeHtml());
885
                                return library_info.join("<br/>");
886
                            },
887
                            searchable: false,
888
                            orderable: false,
889
                        },
890
                        {
891
                            data: "marc_org_code",
892
                            searchable: true,
893
                            orderable: true,
894
                        },
895
                        {
896
                            data: "ip",
897
                            searchable: true,
898
                            orderable: true,
899
                        },
900
                        {
901
                            data: "pickup_location",
902
                            searchable: true,
903
                            orderable: true,
904
                            render: function (data, type, row, meta) {
905
                                return data ? _("Yes") : _("No");
906
                            },
907
                        },
908
                        {
909
                            data: "public",
910
                            searchable: true,
911
                            orderable: true,
912
                            render: function (data, type, row, meta) {
913
                                return data ? _("Yes") : _("No");
914
                            },
915
                        },
916
                        {
917
                            data: "smtp_server",
918
                            render: function (data, type, row, meta) {
919
                                if (data.smtp_server_id) {
920
                                    return '<a href="/cgi-bin/koha/admin/smtp_servers.pl?op=edit_form&smtp_server_id=' + encodeURIComponent(data.smtp_server_id) + '">' + data.name.escapeHtml() + "</a>";
921
                                } else {
922
                                    return _("Default").escapeHtml();
923
                                }
924
                            },
925
                            searchable: false,
926
                            visible: true,
927
                            orderable: false,
928
                        },
929
                        {
930
                            data: function (row, type, val, meta) {
931
                                let result = "";
932
                                let set_hours = 0;
933
                                if (row.library_hours.length > 0) {
934
                                    for (let check_counter = 0; check_counter < 7; check_counter++) {
935
                                        if (row.library_hours[check_counter].open_time != null || row.library_hours[check_counter].close_time != null) {
936
                                            set_hours = 1;
937
                                        }
939
                                    }
938
                                    }
940
                                }
939
                                }
941
                            }
940
                                if (set_hours > 0) {
942
                            if ( set_hours > 0 ) {
941
                                    const daysOfWeek = [_("Sunday"), _("Monday"), _("Tuesday"), _("Wednesday"), _("Thursday"), _("Friday"), _("Saturday")];
943
                                const daysOfWeek = [ _("Sunday"), _("Monday"), _("Tuesday"), _("Wednesday"), _("Thursday"), _("Friday"), _("Saturday") ];
944
942
945
                                result = '<table id="library_hours_table"><thead><tr><th>Day</th><th>Open time</th><th>Close time</th></tr></thead><tbody>';
943
                                    result = '<table id="library_hours_table"><thead><tr><th>Day</th><th>Open time</th><th>Close time</th></tr></thead><tbody>';
946
                                let counter = 0;
944
                                    let counter = 0;
947
                                for (let i = calendarFirstDayOfWeek; counter < 7; i++) {
945
                                    for (let i = calendarFirstDayOfWeek; counter < 7; i++) {
948
                                    const day = i % 7; // Wrap around the day using modulo operator
946
                                        const day = i % 7; // Wrap around the day using modulo operator
949
                                    result += '<tr id="hours_'+day+'">';
947
                                        result += '<tr id="hours_' + day + '">';
950
                                    result += '<td>'+daysOfWeek[day].escapeHtml()+'</td>';
948
                                        result += "<td>" + daysOfWeek[day].escapeHtml() + "</td>";
951
                                    result += '<td><span>';
949
                                        result += "<td><span>";
952
                                    result += row.library_hours[day].open_time != null ? $kohatime(row.library_hours[day].open_time): '';
950
                                        result += row.library_hours[day].open_time != null ? $kohatime(row.library_hours[day].open_time) : "";
953
                                    result += '</span></td>';
951
                                        result += "</span></td>";
954
                                    result += '<td><span>';
952
                                        result += "<td><span>";
955
                                    result += row.library_hours[day].close_time != null ? $kohatime(row.library_hours[day].close_time): '';
953
                                        result += row.library_hours[day].close_time != null ? $kohatime(row.library_hours[day].close_time) : "";
956
                                    result += '</span></td>';
954
                                        result += "</span></td>";
957
                                    result += '</tr>';
955
                                        result += "</tr>";
958
                                    counter++;
956
                                        counter++;
957
                                    }
958
                                    result += "</tbody></table>";
959
                                } else {
960
                                    result = _("Library hours not set").escapeHtml();
959
                                }
961
                                }
960
                                result += '</tbody></table>';
962
                                return result;
961
                            } else {
963
                            },
962
                                result = _("Library hours not set").escapeHtml();
964
                            searchable: false,
963
                            }
965
                            orderable: false,
964
                            return result;
965
                        },
966
                        },
966
                        searchable: false,
967
                        {
967
                        orderable: false
968
                            data: function (row, type, val, meta) {
968
                    },
969
                                var result =
969
                    {
970
                                    '<a class="btn btn-default btn-xs" href="/cgi-bin/koha/admin/branches.pl?op=add_form&amp;branchcode=' +
970
                        data: function( row, type, val, meta ) {
971
                                    encodeURIComponent(row.library_id) +
971
972
                                    '" role="button"><i class="fa-solid fa-pencil" aria-hidden="true"></i> ' +
972
                            var result = '<a class="btn btn-default btn-xs" href="/cgi-bin/koha/admin/branches.pl?op=add_form&amp;branchcode='+encodeURIComponent(row.library_id)+'" role="button"><i class="fa-solid fa-pencil" aria-hidden="true"></i> '+_("Edit")+'</a>';
973
                                    _("Edit") +
973
                            result += '<form action="/cgi-bin/koha/admin/branches.pl" method="get">';
974
                                    "</a>";
974
                            result += '<input type="hidden" name="branchcode" value="'+row.library_id.escapeHtml()+'" />'+"\n";
975
                                result += '<form action="/cgi-bin/koha/admin/branches.pl" method="get">';
975
                            result += '<input type="hidden" name="op" value="delete_confirm" />';
976
                                result += '<input type="hidden" name="branchcode" value="' + row.library_id.escapeHtml() + '" />' + "\n";
976
                            result += '<button type="submit" id="delete_library_'+row.library_id.escapeHtml()+'" class="btn btn-default btn-xs" role="button"><i class="fa fa-trash-can" aria-hidden="true"></i> '+_("Delete")+'</button></form>';
977
                                result += '<input type="hidden" name="op" value="delete_confirm" />';
977
978
                                result +=
978
                            return result;
979
                                    '<button type="submit" id="delete_library_' +
980
                                    row.library_id.escapeHtml() +
981
                                    '" class="btn btn-default btn-xs" role="button"><i class="fa fa-trash-can" aria-hidden="true"></i> ' +
982
                                    _("Delete") +
983
                                    "</button></form>";
979
984
985
                                return result;
986
                            },
987
                            searchable: false,
988
                            orderable: false,
980
                        },
989
                        },
981
                        searchable: false,
990
                    ],
982
                        orderable: false
991
                    bKohaColumnsUseNames: true,
983
                    },
992
                },
984
                ],
993
                table_settings
985
                bKohaColumnsUseNames: true,
994
            );
986
            }, table_settings);
987
        });
995
        });
988
996
989
        $( ".expand-textarea" ).on("click", function(e){
997
        $(".expand-textarea").on("click", function (e) {
990
            e.preventDefault();
998
            e.preventDefault();
991
            $(this).hide();
999
            $(this).hide();
992
            var target = $(this).data("target");
1000
            var target = $(this).data("target");
993
            var syntax = $(this).data("syntax");
1001
            var syntax = $(this).data("syntax");
994
            $("#collapse_" + target ).show();
1002
            $("#collapse_" + target).show();
995
            if( syntax ){
1003
            if (syntax) {
996
                var esLintConfig = { 'esversion': 6 };
1004
                var esLintConfig = { esversion: 6 };
997
                var lint_type = syntax === 'javascript' ? esLintConfig : true;
1005
                var lint_type = syntax === "javascript" ? esLintConfig : true;
998
                var editor = CodeMirror.fromTextArea( document.getElementById( target ), {
1006
                var editor = CodeMirror.fromTextArea(document.getElementById(target), {
999
                    lineNumbers: true,
1007
                    lineNumbers: true,
1000
                    mode: syntax,
1008
                    mode: syntax,
1001
                    lineWrapping: true,
1009
                    lineWrapping: true,
Lines 1003-1034 Link Here
1003
                    gutters: ["CodeMirror-lint-markers"],
1011
                    gutters: ["CodeMirror-lint-markers"],
1004
                    lint: lint_type,
1012
                    lint: lint_type,
1005
                });
1013
                });
1006
                editor.on("blur", function(){
1014
                editor.on("blur", function () {
1007
                    editor.save();
1015
                    editor.save();
1008
                });
1016
                });
1009
            } else {
1017
            } else {
1010
                $( target ).show();
1018
                $(target).show();
1011
            }
1019
            }
1012
        });
1020
        });
1013
1021
1014
        $( ".collapse-textarea" ).on("click", function(e){
1022
        $(".collapse-textarea").on("click", function (e) {
1015
            e.preventDefault();
1023
            e.preventDefault();
1016
            $(this).hide();
1024
            $(this).hide();
1017
            var target = $(this).data("target");
1025
            var target = $(this).data("target");
1018
            var syntax = $(this).data("syntax");
1026
            var syntax = $(this).data("syntax");
1019
            $("#expand_" + target ).show();
1027
            $("#expand_" + target).show();
1020
            if( syntax ){
1028
            if (syntax) {
1021
                var editor = $( "#" + target ).next(".CodeMirror")[0].CodeMirror;
1029
                var editor = $("#" + target).next(".CodeMirror")[0].CodeMirror;
1022
                editor.toTextArea();
1030
                editor.toTextArea();
1023
            }
1031
            }
1024
            $( "#" + target ).hide();
1032
            $("#" + target).hide();
1025
        });
1033
        });
1026
    </script>
1034
    </script>
1027
1028
    [% UNLESS library %]
1035
    [% UNLESS library %]
1029
        <script>
1036
        <script>
1030
            $("#Aform").on("submit", function( event ) {
1037
            $("#Aform").on("submit", function (event) {
1031
                if ( $("#branchcode").val().match(/\s/) ) {
1038
                if ($("#branchcode").val().match(/\s/)) {
1032
                    event.preventDefault();
1039
                    event.preventDefault();
1033
                    alert(_("The library code entered contains whitespace characters. Please remove any whitespace characters from the library code"));
1040
                    alert(_("The library code entered contains whitespace characters. Please remove any whitespace characters from the library code"));
1034
                    return false;
1041
                    return false;
Lines 1038-1044 Link Here
1038
            });
1045
            });
1039
        </script>
1046
        </script>
1040
    [% END %]
1047
    [% END %]
1041
1042
[% END %]
1048
[% END %]
1043
1049
1044
[% INCLUDE 'intranet-bottom.inc' %]
1050
[% INCLUDE 'intranet-bottom.inc' %]
(-)a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/cities.tt (-58 / +71 lines)
Lines 219-285 Link Here
219
            [% END %]
219
            [% END %]
220
        });
220
        });
221
    </script>
221
    </script>
222
223
    <script>
222
    <script>
224
        $(document).ready(function() {
223
        $(document).ready(function () {
225
            var cities_table = $("#table_cities").kohaTable({
224
            var cities_table = $("#table_cities").kohaTable(
226
                ajax: {
225
                {
227
                    "url": cities_table_url
226
                    ajax: {
228
                },
227
                        url: cities_table_url,
229
                order: [[ 1, "asc" ]],
230
                columnDefs: [ {
231
                    targets: [0,1,2,3,4],
232
                    render: function (data, type, row, meta) {
233
                        if ( type == 'display' ) {
234
                            if ( data != null ) {
235
                                return data.escapeHtml();
236
                            } else {
237
                                return "";
238
                            }
239
                        }
240
                        return data;
241
                    }
242
                } ],
243
                columns: [
244
                    {
245
                        data: "city_id",
246
                        searchable: true,
247
                        orderable: true
248
                    },
249
                    {
250
                        data: "name",
251
                        searchable: true,
252
                        orderable: true
253
                    },
228
                    },
254
                    {
229
                    order: [[1, "asc"]],
255
                        data: "state",
230
                    columnDefs: [
256
                        searchable: true,
231
                        {
257
                        orderable: true
232
                            targets: [0, 1, 2, 3, 4],
258
                    },
233
                            render: function (data, type, row, meta) {
259
                    {
234
                                if (type == "display") {
260
                        data: "postal_code",
235
                                    if (data != null) {
261
                        searchable: true,
236
                                        return data.escapeHtml();
262
                        orderable: true
237
                                    } else {
263
                    },
238
                                        return "";
264
                    {
239
                                    }
265
                        data: "country",
240
                                }
266
                        searchable: true,
241
                                return data;
267
                        orderable: true
242
                            },
268
                    },
269
                    {
270
                        data: function( row, type, val, meta ) {
271
272
                            var result = '<a class="btn btn-default btn-xs" role="button" href="/cgi-bin/koha/admin/cities.pl?op=add_form&amp;cityid='+ encodeURIComponent(row.city_id) +'"><i class="fa-solid fa-pencil" aria-hidden="true"></i> '+_("Edit")+'</a>'+"\n";
273
                            result += '<a class="btn btn-default btn-xs" role="button" href="/cgi-bin/koha/admin/cities.pl?op=delete_confirm&amp;cityid='+ encodeURIComponent(row.city_id) +'"><i class="fa fa-trash-can" aria-hidden="true"></i> '+_("Delete")+'</a>';
274
                            return result;
275
276
                        },
243
                        },
277
                        searchable: false,
244
                    ],
278
                        orderable: false
245
                    columns: [
279
                    }
246
                        {
280
                ]
247
                            data: "city_id",
281
            }, table_settings, 1);
248
                            searchable: true,
282
249
                            orderable: true,
250
                        },
251
                        {
252
                            data: "name",
253
                            searchable: true,
254
                            orderable: true,
255
                        },
256
                        {
257
                            data: "state",
258
                            searchable: true,
259
                            orderable: true,
260
                        },
261
                        {
262
                            data: "postal_code",
263
                            searchable: true,
264
                            orderable: true,
265
                        },
266
                        {
267
                            data: "country",
268
                            searchable: true,
269
                            orderable: true,
270
                        },
271
                        {
272
                            data: function (row, type, val, meta) {
273
                                var result =
274
                                    '<a class="btn btn-default btn-xs" role="button" href="/cgi-bin/koha/admin/cities.pl?op=add_form&amp;cityid=' +
275
                                    encodeURIComponent(row.city_id) +
276
                                    '"><i class="fa-solid fa-pencil" aria-hidden="true"></i> ' +
277
                                    _("Edit") +
278
                                    "</a>" +
279
                                    "\n";
280
                                result +=
281
                                    '<a class="btn btn-default btn-xs" role="button" href="/cgi-bin/koha/admin/cities.pl?op=delete_confirm&amp;cityid=' +
282
                                    encodeURIComponent(row.city_id) +
283
                                    '"><i class="fa fa-trash-can" aria-hidden="true"></i> ' +
284
                                    _("Delete") +
285
                                    "</a>";
286
                                return result;
287
                            },
288
                            searchable: false,
289
                            orderable: false,
290
                        },
291
                    ],
292
                },
293
                table_settings,
294
                1
295
            );
283
        });
296
        });
284
    </script>
297
    </script>
285
[% END %]
298
[% END %]
(-)a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/currency.tt (-10 / +9 lines)
Lines 269-296 Link Here
269
    <script>
269
    <script>
270
        let table_settings = [% TablesSettings.GetTableSettings( 'admin', 'currency', 'currencies-table', 'json' ) | $raw %]
270
        let table_settings = [% TablesSettings.GetTableSettings( 'admin', 'currency', 'currencies-table', 'json' ) | $raw %]
271
    </script>
271
    </script>
272
273
    <script>
272
    <script>
274
        function check_currency(val) {
273
        function check_currency(val) {
275
            if ( val == 1.0 ) {
274
            if (val == 1.0) {
276
                $("#active").prop('disabled', false);
275
                $("#active").prop("disabled", false);
277
                $("#hint").html("");
276
                $("#hint").html("");
278
            } else {
277
            } else {
279
                $("#active").prop('checked', false);
278
                $("#active").prop("checked", false);
280
                $("#active").prop('disabled', true);
279
                $("#active").prop("disabled", true);
281
                $("#hint").html(_("The active currency must have a rate of 1.0"));
280
                $("#hint").html(_("The active currency must have a rate of 1.0"));
282
            }
281
            }
283
        }
282
        }
284
283
285
        $(document).ready(function() {
284
        $(document).ready(function () {
286
            $("#currencies-table").kohaTable({}, table_settings);
285
            $("#currencies-table").kohaTable({}, table_settings);
287
286
288
            // prevents users to check active with a currency != 1
287
            // prevents users to check active with a currency != 1
289
            $("#rate").keyup(function() {
288
            $("#rate").keyup(function () {
290
                check_currency( $(this).val() );
289
                check_currency($(this).val());
291
            });
290
            });
292
            check_currency( $("#rate").val() );
291
            check_currency($("#rate").val());
293
            $("#currency_code").on("blur",function(){
292
            $("#currency_code").on("blur", function () {
294
                toUC(this);
293
                toUC(this);
295
            });
294
            });
296
        });
295
        });
(-)a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/edi_accounts.tt (-2 / +1 lines)
Lines 412-420 Link Here
412
    <script>
412
    <script>
413
        var table_settings = [% TablesSettings.GetTableSettings( 'admin', 'edi_accounts', 'edi_accounts_table', 'json' ) | $raw %];
413
        var table_settings = [% TablesSettings.GetTableSettings( 'admin', 'edi_accounts', 'edi_accounts_table', 'json' ) | $raw %];
414
    </script>
414
    </script>
415
416
    <script>
415
    <script>
417
        $(document).ready(function(){
416
        $(document).ready(function () {
418
            $("#edi_accounts_table").kohaTable(
417
            $("#edi_accounts_table").kohaTable(
419
                {
418
                {
420
                    pagingType: "full",
419
                    pagingType: "full",
(-)a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/file_transports.tt (-138 / +148 lines)
Lines 464-586 Link Here
464
            on: "[% tp("Active", "On") | html %]";
464
            on: "[% tp("Active", "On") | html %]";
465
        };
465
        };
466
    </script>
466
    </script>
467
468
    <script>
467
    <script>
469
        $(document).ready(function() {
468
        $(document).ready(function () {
470
469
            var file_transports_url = "/api/v1/config/file_transports";
471
            var file_transports_url = '/api/v1/config/file_transports';
472
            window.file_transports = $("#file_transports").kohaTable({
470
            window.file_transports = $("#file_transports").kohaTable({
473
                "ajax": {
471
                ajax: {
474
                    "url": file_transports_url
472
                    url: file_transports_url,
475
                },
473
                },
476
                "language": {
474
                language: {
477
                    "emptyTable": "<div class=\"alert alert-info\">"+_("There are no file transports defined.")+"</div>"
475
                    emptyTable: '<div class="alert alert-info">' + _("There are no file transports defined.") + "</div>",
478
                },
476
                },
479
                "columnDefs": [ {
477
                columnDefs: [
480
                    "targets": [0,1],
478
                    {
481
                    "render": function(data, type, row, meta) {
479
                        targets: [0, 1],
482
                        if (type == "display") {
480
                        render: function (data, type, row, meta) {
483
                            if(data != null) {
481
                            if (type == "display") {
484
                                return data.escapeHtml();
482
                                if (data != null) {
485
                            } else {
483
                                    return data.escapeHtml();
486
                                return "Default";
484
                                } else {
485
                                    return "Default";
486
                                }
487
                            }
487
                            }
488
                        }
488
                            return data;
489
                        return data;
489
                        },
490
                    }
490
                    },
491
                } ],
491
                ],
492
                "columns": [
492
                columns: [
493
                    {
493
                    {
494
                        "data": "name",
494
                        data: "name",
495
                        "searchable": true,
495
                        searchable: true,
496
                        "orderable": true
496
                        orderable: true,
497
                    },
497
                    },
498
                    {
498
                    {
499
                        "data": "host",
499
                        data: "host",
500
                        "searchable": true,
500
                        searchable: true,
501
                        "orderable": true
501
                        orderable: true,
502
                    },
502
                    },
503
                    {
503
                    {
504
                        "data": "port",
504
                        data: "port",
505
                        "searchable": true,
505
                        searchable: true,
506
                        "orderable": false
506
                        orderable: false,
507
                    },
507
                    },
508
                    {
508
                    {
509
                        "data": "transport",
509
                        data: "transport",
510
                        "render": function(data, type, row, meta) {
510
                        render: function (data, type, row, meta) {
511
                            return data.toUpperCase();
511
                            return data.toUpperCase();
512
                        },
512
                        },
513
                        "searchable": true,
513
                        searchable: true,
514
                        "orderable": false
514
                        orderable: false,
515
                    },
515
                    },
516
                    {
516
                    {
517
                        "data": "auth_mode",
517
                        data: "auth_mode",
518
                        "render": function(data, type, row, meta) {
518
                        render: function (data, type, row, meta) {
519
                            if(data == "password") {
519
                            if (data == "password") {
520
                                return _("Password-based");
520
                                return _("Password-based");
521
                            } else if(data == "key_file") {
521
                            } else if (data == "key_file") {
522
                                return _("Key file-based");
522
                                return _("Key file-based");
523
                            } else {
523
                            } else {
524
                                return _("No authentication");
524
                                return _("No authentication");
525
                            }
525
                            }
526
                        },
526
                        },
527
                        "searchable": false,
527
                        searchable: false,
528
                        "orderable": false
528
                        orderable: false,
529
                    },
529
                    },
530
                    {
530
                    {
531
                        "data": "user_name",
531
                        data: "user_name",
532
                        "searchable": false,
532
                        searchable: false,
533
                        "orderable": false
533
                        orderable: false,
534
                    },
534
                    },
535
                    {
535
                    {
536
                        "data": "download_directory",
536
                        data: "download_directory",
537
                        "render": function(data, type, row, meta) {
537
                        render: function (data, type, row, meta) {
538
                            if(data) {
538
                            if (data) {
539
                                return data;
539
                                return data;
540
                            } else {
540
                            } else {
541
                                return "<em>" + _("Not specified") + "</em>";
541
                                return "<em>" + _("Not specified") + "</em>";
542
                            }
542
                            }
543
                        },
543
                        },
544
                        "searchable": false,
544
                        searchable: false,
545
                        "orderable": false
545
                        orderable: false,
546
                    },
546
                    },
547
                    {
547
                    {
548
                        "data": "upload_directory",
548
                        data: "upload_directory",
549
                        "render": function(data, type, row, meta) {
549
                        render: function (data, type, row, meta) {
550
                            if(data) {
550
                            if (data) {
551
                                return data;
551
                                return data;
552
                            } else {
552
                            } else {
553
                                return "<em>" + _("Not specified") + "</em>";
553
                                return "<em>" + _("Not specified") + "</em>";
554
                            }
554
                            }
555
                        },
555
                        },
556
                        "searchable": false,
556
                        searchable: false,
557
                        "orderable": false
557
                        orderable: false,
558
                    },
558
                    },
559
                    {
559
                    {
560
                        "data": "status",
560
                        data: "status",
561
                        "render": function(data, type, row, meta) {
561
                        render: function (data, type, row, meta) {
562
                            let render = '';
562
                            let render = "";
563
                            if (data) {
563
                            if (data) {
564
                                if (data.status == "ok") {
564
                                if (data.status == "ok") {
565
                                    render += '<i class="text-success fa-solid fa-circle-check"></i> ';
565
                                    render += '<i class="text-success fa-solid fa-circle-check"></i> ';
566
                                    render += '<span class="text-success">';
566
                                    render += '<span class="text-success">';
567
                                    render += _("Tests passing");
567
                                    render += _("Tests passing");
568
                                    render += '</span>'
568
                                    render += "</span>";
569
                                } else if (data.status == "errors") {
569
                                } else if (data.status == "errors") {
570
                                    data.operations.forEach(operation => {
570
                                    data.operations.forEach(operation => {
571
                                        render += "<div>";
571
                                        render += "<div>";
572
                                        if ( operation.status == "error" ) {
572
                                        if (operation.status == "error") {
573
                                            render += '<i class="text-danger fa-solid fa-circle-xmark"></i> ';
573
                                            render += '<i class="text-danger fa-solid fa-circle-xmark"></i> ';
574
                                            render += '<span class="text-danger">';
574
                                            render += '<span class="text-danger">';
575
                                            render += operationLabels[operation.code] || operation.code;
575
                                            render += operationLabels[operation.code] || operation.code;
576
                                            render += ' ' + _("failed");
576
                                            render += " " + _("failed");
577
                                            render += '</span>';
577
                                            render += "</span>";
578
                                        } else {
578
                                        } else {
579
                                            render += '<i class="text-success fa-solid fa-circle-check"></i> ';
579
                                            render += '<i class="text-success fa-solid fa-circle-check"></i> ';
580
                                            render += '<span class="text-success">';
580
                                            render += '<span class="text-success">';
581
                                            render += operationLabels[operation.code] || operation.code;
581
                                            render += operationLabels[operation.code] || operation.code;
582
                                            render += ' ' + _("ok");
582
                                            render += " " + _("ok");
583
                                            render += '</span>';
583
                                            render += "</span>";
584
                                        }
584
                                        }
585
                                        render += "</div>";
585
                                        render += "</div>";
586
                                    });
586
                                    });
Lines 592-715 Link Here
592
                            }
592
                            }
593
                            return render;
593
                            return render;
594
                        },
594
                        },
595
                        "searchable": false,
595
                        searchable: false,
596
                        "orderable": false
596
                        orderable: false,
597
                    },
597
                    },
598
                    {
598
                    {
599
                        "data": "debug",
599
                        data: "debug",
600
                        "render": function(data, type, row, meta) {
600
                        render: function (data, type, row, meta) {
601
                            if(data == true) {
601
                            if (data == true) {
602
                                return i18n.on;
602
                                return i18n.on;
603
                            }
603
                            } else {
604
                            else {
605
                                return _("Off");
604
                                return _("Off");
606
                            }
605
                            }
607
                        },
606
                        },
608
                        "searchable": false,
607
                        searchable: false,
609
                        "orderable": false
608
                        orderable: false,
610
                    },
609
                    },
611
                    {
610
                    {
612
                        "data": function(row, type, val, meta) {
611
                        data: function (row, type, val, meta) {
613
                            let result = '<a class="btn btn-default btn-xs" role="button" href="/cgi-bin/koha/admin/file_transports.pl?op=edit_form&amp;file_transport_id='+ encodeURIComponent(row.file_transport_id) +'"><i class="fa-solid fa-pencil" aria-hidden="true"></i> '+_("Edit")+'</a>'+"\n";
612
                            let result =
614
                            result += '<a class="btn btn-default btn-xs delete_server" role="button" href="#" data-bs-toggle="modal" data-bs-target="#delete_confirm_modal" data-file-transport-id="'+ encodeURIComponent(row.file_transport_id) +'" data-file-transport-name="'+ encodeURIComponent(row.name.escapeHtml()) +'"><i class="fa fa-trash-can" aria-hidden="true"></i> '+_("Delete")+'</a>';
613
                                '<a class="btn btn-default btn-xs" role="button" href="/cgi-bin/koha/admin/file_transports.pl?op=edit_form&amp;file_transport_id=' +
614
                                encodeURIComponent(row.file_transport_id) +
615
                                '"><i class="fa-solid fa-pencil" aria-hidden="true"></i> ' +
616
                                _("Edit") +
617
                                "</a>" +
618
                                "\n";
619
                            result +=
620
                                '<a class="btn btn-default btn-xs delete_server" role="button" href="#" data-bs-toggle="modal" data-bs-target="#delete_confirm_modal" data-file-transport-id="' +
621
                                encodeURIComponent(row.file_transport_id) +
622
                                '" data-file-transport-name="' +
623
                                encodeURIComponent(row.name.escapeHtml()) +
624
                                '"><i class="fa fa-trash-can" aria-hidden="true"></i> ' +
625
                                _("Delete") +
626
                                "</a>";
615
                            return result;
627
                            return result;
616
                        },
628
                        },
617
                        "searchable": false,
629
                        searchable: false,
618
                        "orderable": false
630
                        orderable: false,
619
                    }
631
                    },
620
                ],
632
                ],
621
                createdRow: function(row, data, dataIndex) {
633
                createdRow: function (row, data, dataIndex) {
622
                    if(data.is_default) {
634
                    if (data.is_default) {
623
                        $(row).addClass('default warn');
635
                        $(row).addClass("default warn");
624
                    }
636
                    }
625
                    if(data.debug) {
637
                    if (data.debug) {
626
                        $(row).addClass('debug');
638
                        $(row).addClass("debug");
627
                    }
639
                    }
628
                },
640
                },
629
            });
641
            });
630
642
631
            $('#file_transports').on("click", '.delete_server', function() {
643
            $("#file_transports").on("click", ".delete_server", function () {
632
                var file_transport_id   = $(this).data('file-transport-id');
644
                var file_transport_id = $(this).data("file-transport-id");
633
                var file_transport_name = decodeURIComponent($(this).data('file-transport-name'));
645
                var file_transport_name = decodeURIComponent($(this).data("file-transport-name"));
634
646
635
                $("#delete_confirm_dialog").html(
647
                $("#delete_confirm_dialog").html(_("You are about to delete the '%s' file transport.").format(file_transport_name));
636
                    _("You are about to delete the '%s' file transport.").format(file_transport_name)
648
                $("#delete_confirm_modal_button").data("file-transport-id", file_transport_id);
637
                );
649
                $("#delete_confirm_modal_button").data("file-transport-name", file_transport_name);
638
                $("#delete_confirm_modal_button").data('file-transport-id', file_transport_id);
639
                $("#delete_confirm_modal_button").data('file-transport-name', file_transport_name);
640
            });
650
            });
641
651
642
            $("#delete_confirm_modal_button").on("click", function() {
652
            $("#delete_confirm_modal_button").on("click", function () {
643
653
                var file_transport_id = $(this).data("file-transport-id");
644
                var file_transport_id   = $(this).data('file-transport-id');
654
                var file_transport_name = $(this).data("file-transport-name");
645
                var file_transport_name = $(this).data('file-transport-name');
646
655
647
                $.ajax({
656
                $.ajax({
648
                    method: "DELETE",
657
                    method: "DELETE",
649
                    url: "/api/v1/config/file_transports/"+file_transport_id
658
                    url: "/api/v1/config/file_transports/" + file_transport_id,
650
                }).success(function() {
659
                })
651
                    window.file_transports.api().ajax.reload(function(data) {
660
                    .success(function () {
652
                        $("#action_result_dialog").hide();
661
                        window.file_transports.api().ajax.reload(function (data) {
653
                        $("#delete_success").html(_("Server '%s' deleted successfully.").format(file_transport_name)).show();
662
                            $("#action_result_dialog").hide();
663
                            $("#delete_success").html(_("Server '%s' deleted successfully.").format(file_transport_name)).show();
664
                        });
665
                    })
666
                    .fail(function () {
667
                        $("#delete_error").html(_("Error deleting server '%s'. Please ensure all linked EDI accounts are unlinked or deleted. Check the logs for details.").format(file_transport_name)).show();
668
                    })
669
                    .done(function () {
670
                        $("#delete_confirm_modal").modal("hide");
654
                    });
671
                    });
655
                }).fail(function() {
656
                    $("#delete_error").html(_("Error deleting server '%s'. Please ensure all linked EDI accounts are unlinked or deleted. Check the logs for details.").format(file_transport_name)).show();
657
                }).done(function() {
658
                    $("#delete_confirm_modal").modal('hide');
659
                });
660
            });
672
            });
661
673
662
            transportChange();
674
            transportChange();
663
            $("#transport").on("change", function(event) {
675
            $("#transport").on("change", function (event) {
664
                transportChange();
676
                transportChange();
665
            });
677
            });
666
678
667
            authModeChange();
679
            authModeChange();
668
            $("#auth_mode").on("change", function(event) {
680
            $("#auth_mode").on("change", function (event) {
669
                authModeChange();
681
                authModeChange();
670
            });
682
            });
671
683
672
            $('#confirm_key_accept_submit').on('click', function(event) {
684
            $("#confirm_key_accept_submit").on("click", function (event) {
673
                event.preventDefault();
685
                event.preventDefault();
674
686
675
                if ( $('#add').length > 0 ) {
687
                if ($("#add").length > 0) {
676
                    if( $('#add').valid() == true ) {
688
                    if ($("#add").valid() == true) {
677
                        modalChange();
689
                        modalChange();
678
                        $('#confirm_key_accept').modal('show');
690
                        $("#confirm_key_accept").modal("show");
679
                    } else {
691
                    } else {
680
                        $('#confirm_key_accept').modal('hide');
692
                        $("#confirm_key_accept").modal("hide");
681
                    }
693
                    }
682
                }
694
                }
683
695
684
                if ( $('#edit_save').length > 0 ) {
696
                if ($("#edit_save").length > 0) {
685
                    if( $('#edit_save').valid() == true ) {
697
                    if ($("#edit_save").valid() == true) {
686
                        modalChange();
698
                        modalChange();
687
                        $('#confirm_key_accept').modal('show');
699
                        $("#confirm_key_accept").modal("show");
688
                    } else {
700
                    } else {
689
                        $('#confirm_key_accept').modal('hide');
701
                        $("#confirm_key_accept").modal("hide");
690
                    }
702
                    }
691
                }
703
                }
692
693
            });
704
            });
694
705
695
            $('#confirm_key_accept .approve').on('click', function() {
706
            $("#confirm_key_accept .approve").on("click", function () {
696
                $('#confirm_key_accept .deny').click();
707
                $("#confirm_key_accept .deny").click();
697
708
698
                if ( $('#add').length > 0 ) {
709
                if ($("#add").length > 0) {
699
                    $('#add').submit();
710
                    $("#add").submit();
700
                }
711
                }
701
712
702
                if ( $('#edit_save').length > 0 ) {
713
                if ($("#edit_save").length > 0) {
703
                    $('#edit_save').submit();
714
                    $("#edit_save").submit();
704
                }
715
                }
705
            });
716
            });
706
707
        });
717
        });
708
718
709
        function transportChange() {
719
        function transportChange() {
710
            let transport = $("#transport");
720
            let transport = $("#transport");
711
721
712
            if(transport.val() == "ftp") {
722
            if (transport.val() == "ftp") {
713
                $("#host").removeAttr("disabled");
723
                $("#host").removeAttr("disabled");
714
                $("#port").removeAttr("disabled");
724
                $("#port").removeAttr("disabled");
715
                $("#passive").removeAttr("disabled");
725
                $("#passive").removeAttr("disabled");
Lines 721-735 Link Here
721
                $("#auth_mode option[value='password']").removeAttr("disabled");
731
                $("#auth_mode option[value='password']").removeAttr("disabled");
722
                $("#auth_mode option[value='key_file']").attr("disabled", "disabled");
732
                $("#auth_mode option[value='key_file']").attr("disabled", "disabled");
723
                $("#auth_mode option[value='noauth']").removeAttr("disabled");
733
                $("#auth_mode option[value='noauth']").removeAttr("disabled");
724
                if($("#auth_mode option:selected").val() == "key_file") {
734
                if ($("#auth_mode option:selected").val() == "key_file") {
725
                    $("#auth_mode option[value='password']").prop("selected", true);
735
                    $("#auth_mode option[value='password']").prop("selected", true);
726
                }
736
                }
727
737
728
                let port = $("#port").val();
738
                let port = $("#port").val();
729
                if(port == 22) $("#port").val("21");
739
                if (port == 22) $("#port").val("21");
730
740
731
                authModeChange();
741
                authModeChange();
732
            } else if(transport.val() == "sftp") {
742
            } else if (transport.val() == "sftp") {
733
                $("#host").removeAttr("disabled");
743
                $("#host").removeAttr("disabled");
734
                $("#port").removeAttr("disabled");
744
                $("#port").removeAttr("disabled");
735
                $("#passive").attr("disabled", "disabled");
745
                $("#passive").attr("disabled", "disabled");
Lines 744-750 Link Here
744
                $("#passive option[value='1']").prop("selected", true);
754
                $("#passive option[value='1']").prop("selected", true);
745
755
746
                let port = $("#port").val();
756
                let port = $("#port").val();
747
                if(port == 21) $("#port").val("22");
757
                if (port == 21) $("#port").val("22");
748
758
749
                return authModeChange();
759
                return authModeChange();
750
            }
760
            }
Lines 753-762 Link Here
753
        function authModeChange() {
763
        function authModeChange() {
754
            let auth_mode = $("#auth_mode").val();
764
            let auth_mode = $("#auth_mode").val();
755
765
756
            if(auth_mode == "password") {
766
            if (auth_mode == "password") {
757
                $("#password").removeAttr("disabled");
767
                $("#password").removeAttr("disabled");
758
                $("#key_file").attr("disabled", "disabled");
768
                $("#key_file").attr("disabled", "disabled");
759
            } else if(auth_mode == "key_file") {
769
            } else if (auth_mode == "key_file") {
760
                $("#password").attr("disabled", "disabled");
770
                $("#password").attr("disabled", "disabled");
761
                $("#key_file").removeAttr("disabled");
771
                $("#key_file").removeAttr("disabled");
762
            } else {
772
            } else {
Lines 766-779 Link Here
766
        }
776
        }
767
777
768
        function modalChange() {
778
        function modalChange() {
769
            $('#modal_message').hide();
779
            $("#modal_message").hide();
770
            if ( $('#transport').val() == 'sftp' ) $('#modal_message').show();
780
            if ($("#transport").val() == "sftp") $("#modal_message").show();
771
781
772
            $('#modal_host').text( $('#host').val() );
782
            $("#modal_host").text($("#host").val());
773
            $('#modal_port').text( $('#port').val() );
783
            $("#modal_port").text($("#port").val());
774
            $('#modal_transport').text( $('#transport option:selected').text() );
784
            $("#modal_transport").text($("#transport option:selected").text());
775
            $('#modal_user_name').text( $('#user_name').val() );
785
            $("#modal_user_name").text($("#user_name").val());
776
            $('#modal_auth_mode').text( $('#auth_mode option:selected').text() );
786
            $("#modal_auth_mode").text($("#auth_mode option:selected").text());
777
        }
787
        }
778
    </script>
788
    </script>
779
[% END %]
789
[% END %]
(-)a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/identity_provider_domains.tt (-68 / +82 lines)
Lines 344-389 Link Here
344
344
345
        const identity_provider_id = "[%- identity_provider_id | html -%]";
345
        const identity_provider_id = "[%- identity_provider_id | html -%]";
346
    </script>
346
    </script>
347
348
    <script>
347
    <script>
349
        $(document).ready(function() {
348
        $(document).ready(function () {
350
            window.identity_provider_domains = $("#identity_provider_domains").kohaTable({
349
            window.identity_provider_domains = $("#identity_provider_domains").kohaTable({
351
                ajax: {
350
                ajax: {
352
                    "url": identity_provider_domains_url
351
                    url: identity_provider_domains_url,
353
                },
352
                },
354
                language: {
353
                language: {
355
                    emptyTable: '<div class="alert alert-info">'+_("There are no identity provider domains defined.")+'</div>'
354
                    emptyTable: '<div class="alert alert-info">' + _("There are no identity provider domains defined.") + "</div>",
356
                },
355
                },
357
                columnDefs: [ {
356
                columnDefs: [
358
                    targets: [1],
357
                    {
359
                    render: function (data, type, row, meta) {
358
                        targets: [1],
360
                        if ( type == 'display' ) {
359
                        render: function (data, type, row, meta) {
361
                            if ( data != null ) {
360
                            if (type == "display") {
362
                                return data.escapeHtml();
361
                                if (data != null) {
363
                            }
362
                                    return data.escapeHtml();
364
                            else {
363
                                } else {
365
                                return "";
364
                                    return "";
365
                                }
366
                            }
366
                            }
367
                        }
367
                            return data;
368
                        return data;
368
                        },
369
                    }
369
                    },
370
                } ],
370
                ],
371
                columns: [
371
                columns: [
372
                    {
372
                    {
373
                        data: "domain",
373
                        data: "domain",
374
                        searchable: true,
374
                        searchable: true,
375
                        orderable: true,
375
                        orderable: true,
376
                        render: function(data, type, row, meta) {
376
                        render: function (data, type, row, meta) {
377
                            if ( data != null ) {
377
                            if (data != null) {
378
                                return data.escapeHtml();
378
                                return data.escapeHtml();
379
                            }
379
                            } else {
380
                            else {
381
                                return "*";
380
                                return "*";
382
                            }
381
                            }
383
                        }
382
                        },
384
                    },
383
                    },
385
                    {
384
                    {
386
                        data: function( row, type, val, meta ) {
385
                        data: function (row, type, val, meta) {
387
                            if (row.update_on_auth) {
386
                            if (row.update_on_auth) {
388
                                return _("Yes");
387
                                return _("Yes");
389
                            } else {
388
                            } else {
Lines 391-400 Link Here
391
                            }
390
                            }
392
                        },
391
                        },
393
                        searchable: true,
392
                        searchable: true,
394
                        orderable: true
393
                        orderable: true,
395
                    },
394
                    },
396
                    {
395
                    {
397
                        data: function( row, type, val, meta ) {
396
                        data: function (row, type, val, meta) {
398
                            if (row.auto_register_opac) {
397
                            if (row.auto_register_opac) {
399
                                return _("Yes");
398
                                return _("Yes");
400
                            } else {
399
                            } else {
Lines 402-411 Link Here
402
                            }
401
                            }
403
                        },
402
                        },
404
                        searchable: true,
403
                        searchable: true,
405
                        orderable: true
404
                        orderable: true,
406
                    },
405
                    },
407
                    {
406
                    {
408
                        data: function( row, type, val, meta ) {
407
                        data: function (row, type, val, meta) {
409
                            if (row.auto_register_staff) {
408
                            if (row.auto_register_staff) {
410
                                return _("Yes");
409
                                return _("Yes");
411
                            } else {
410
                            } else {
Lines 413-436 Link Here
413
                            }
412
                            }
414
                        },
413
                        },
415
                        searchable: true,
414
                        searchable: true,
416
                        orderable: true
415
                        orderable: true,
417
                    },
416
                    },
418
                    {
417
                    {
419
                        data: function( row, type, val, meta ) {
418
                        data: function (row, type, val, meta) {
420
                            return libraries[row.default_library_id] || "";
419
                            return libraries[row.default_library_id] || "";
421
                        },
420
                        },
422
                        searchable: true,
421
                        searchable: true,
423
                        orderable: true
422
                        orderable: true,
424
                    },
423
                    },
425
                    {
424
                    {
426
                        data: function( row, type, val, meta ) {
425
                        data: function (row, type, val, meta) {
427
                            return categories[row.default_category_id] || "";
426
                            return categories[row.default_category_id] || "";
428
                        },
427
                        },
429
                        searchable: true,
428
                        searchable: true,
430
                        orderable: true
429
                        orderable: true,
431
                    },
430
                    },
432
                    {
431
                    {
433
                        data: function( row, type, val, meta ) {
432
                        data: function (row, type, val, meta) {
434
                            if (row.allow_opac) {
433
                            if (row.allow_opac) {
435
                                return _("Yes");
434
                                return _("Yes");
436
                            } else {
435
                            } else {
Lines 438-447 Link Here
438
                            }
437
                            }
439
                        },
438
                        },
440
                        searchable: true,
439
                        searchable: true,
441
                        orderable: true
440
                        orderable: true,
442
                    },
441
                    },
443
                    {
442
                    {
444
                        data: function( row, type, val, meta ) {
443
                        data: function (row, type, val, meta) {
445
                            if (row.allow_staff) {
444
                            if (row.allow_staff) {
446
                                return _("Yes");
445
                                return _("Yes");
447
                            } else {
446
                            } else {
Lines 449-508 Link Here
449
                            }
448
                            }
450
                        },
449
                        },
451
                        searchable: true,
450
                        searchable: true,
452
                        orderable: true
451
                        orderable: true,
453
                    },
452
                    },
454
                    {
453
                    {
455
                        data: function( row, type, val, meta ) {
454
                        data: function (row, type, val, meta) {
456
                            var result = '<a class="btn btn-default btn-xs" role="button" href="/cgi-bin/koha/admin/identity_providers.pl?domain_ops=1&amp;identity_provider_id=' + identity_provider_id + '&amp;op=edit_form&amp;identity_provider_domain_id='+ encodeURIComponent(row.identity_provider_domain_id) +'"><i class="fa-solid fa-pencil" aria-hidden="true"></i> '+_("Edit")+'</a>'+"\n";
455
                            var result =
457
                            result += '<a class="btn btn-default btn-xs delete_identity_provider_domain" role="button" href="#" data-bs-toggle="modal" data-bs-target="#delete_confirm_modal" data-auth-provider-domain-id="'+ encodeURIComponent(row.identity_provider_domain_id) +'" data-auth-provider-domain="'+ encodeURIComponent((row.domain || '').escapeHtml()) +'"><i class="fa fa-trash-can" aria-hidden="true"></i> '+_("Delete")+'</a>';
456
                                '<a class="btn btn-default btn-xs" role="button" href="/cgi-bin/koha/admin/identity_providers.pl?domain_ops=1&amp;identity_provider_id=' +
457
                                identity_provider_id +
458
                                "&amp;op=edit_form&amp;identity_provider_domain_id=" +
459
                                encodeURIComponent(row.identity_provider_domain_id) +
460
                                '"><i class="fa-solid fa-pencil" aria-hidden="true"></i> ' +
461
                                _("Edit") +
462
                                "</a>" +
463
                                "\n";
464
                            result +=
465
                                '<a class="btn btn-default btn-xs delete_identity_provider_domain" role="button" href="#" data-bs-toggle="modal" data-bs-target="#delete_confirm_modal" data-auth-provider-domain-id="' +
466
                                encodeURIComponent(row.identity_provider_domain_id) +
467
                                '" data-auth-provider-domain="' +
468
                                encodeURIComponent((row.domain || "").escapeHtml()) +
469
                                '"><i class="fa fa-trash-can" aria-hidden="true"></i> ' +
470
                                _("Delete") +
471
                                "</a>";
458
                            return result;
472
                            return result;
459
                        },
473
                        },
460
                        searchable: false,
474
                        searchable: false,
461
                        orderable: false
475
                        orderable: false,
462
                    }
476
                    },
463
                ],
477
                ],
464
                createdRow: function (row, data, dataIndex) {
478
                createdRow: function (row, data, dataIndex) {
465
                    if ( data.debug ) {
479
                    if (data.debug) {
466
                        $(row).addClass('debug');
480
                        $(row).addClass("debug");
467
                    }
481
                    }
468
                },
482
                },
469
            });
483
            });
470
484
471
            $('#identity_provider_domains').on( "click", '.delete_identity_provider_domain', function () {
485
            $("#identity_provider_domains").on("click", ".delete_identity_provider_domain", function () {
472
                var identity_provider_domain_id   = $(this).data('auth-provider-domain-id');
486
                var identity_provider_domain_id = $(this).data("auth-provider-domain-id");
473
                var identity_provider_domain = decodeURIComponent($(this).data('auth-provider-domain'));
487
                var identity_provider_domain = decodeURIComponent($(this).data("auth-provider-domain"));
474
488
475
                $("#delete_confirm_dialog").html(
489
                $("#delete_confirm_dialog").html(_("You are about to delete the '%s' identity provider domain.").format(identity_provider_domain));
476
                    _("You are about to delete the '%s' identity provider domain.").format(identity_provider_domain)
490
                $("#delete_confirm_modal_button").data("auth-provider-domain-id", identity_provider_domain_id);
477
                );
491
                $("#delete_confirm_modal_button").data("auth-provider-domain", identity_provider_domain);
478
                $("#delete_confirm_modal_button").data('auth-provider-domain-id', identity_provider_domain_id);
479
                $("#delete_confirm_modal_button").data('auth-provider-domain', identity_provider_domain);
480
            });
492
            });
481
493
482
            $("#delete_confirm_modal_button").on( "click", function () {
494
            $("#delete_confirm_modal_button").on("click", function () {
483
495
                var identity_provider_domain_id = $(this).data("auth-provider-domain-id");
484
                var identity_provider_domain_id   = $(this).data('auth-provider-domain-id');
496
                var identity_provider_domain = $(this).data("auth-provider-domain");
485
                var identity_provider_domain = $(this).data('auth-provider-domain');
486
497
487
                $.ajax({
498
                $.ajax({
488
                    method: "DELETE",
499
                    method: "DELETE",
489
                    url: identity_provider_domains_url+"/"+identity_provider_domain_id
500
                    url: identity_provider_domains_url + "/" + identity_provider_domain_id,
490
                }).success(function() {
501
                })
491
                    window.identity_provider_domains.api().ajax.reload(function (data) {
502
                    .success(function () {
492
                        $("#smtp_action_result_dialog").hide();
503
                        window.identity_provider_domains.api().ajax.reload(function (data) {
493
                        $("#smtp_delete_success").html(_("Server '%s' deleted successfully.").format(identity_provider_domain)).show();
504
                            $("#smtp_action_result_dialog").hide();
505
                            $("#smtp_delete_success").html(_("Server '%s' deleted successfully.").format(identity_provider_domain)).show();
506
                        });
507
                    })
508
                    .fail(function () {
509
                        $("#smtp_delete_error").html(_("Error deleting server '%s'. Check the logs for details.").format(identity_provider_domain)).show();
510
                    })
511
                    .done(function () {
512
                        $("#delete_confirm_modal").modal("hide");
494
                    });
513
                    });
495
                }).fail(function () {
496
                    $("#smtp_delete_error").html(_("Error deleting server '%s'. Check the logs for details.").format(identity_provider_domain)).show();
497
                }).done(function () {
498
                    $("#delete_confirm_modal").modal('hide');
499
                });
500
            });
514
            });
501
515
502
            $('button.more').on('click', function(event) {
516
            $("button.more").on("click", function (event) {
503
                event.preventDefault();
517
                event.preventDefault();
504
                var target = $(this).hide().data('target');
518
                var target = $(this).hide().data("target");
505
                $('.more-'+target).show();
519
                $(".more-" + target).show();
506
            });
520
            });
507
        });
521
        });
508
    </script>
522
    </script>
(-)a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/itemtypes.tt (-28 / +27 lines)
Lines 555-591 Link Here
555
    [% INCLUDE 'datatables.inc' %]
555
    [% INCLUDE 'datatables.inc' %]
556
    [% INCLUDE 'select2.inc' %]
556
    [% INCLUDE 'select2.inc' %]
557
    <script>
557
    <script>
558
       var table_settings = [% TablesSettings.GetTableSettings( 'admin', 'itemtypes', 'table_item_type', 'json' ) | $raw %];
558
        var table_settings = [% TablesSettings.GetTableSettings( 'admin', 'itemtypes', 'table_item_type', 'json' ) | $raw %];
559
       [% IF ( Koha.Preference('noItemTypeImages') && Koha.Preference('OpacNoItemTypeImages') ) %]
559
        [% IF ( Koha.Preference('noItemTypeImages') && Koha.Preference('OpacNoItemTypeImages') ) %]
560
           table_settings['columns'].shift(); // Remove item type image column from configuration
560
            table_settings['columns'].shift(); // Remove item type image column from configuration
561
       [% END %]
561
        [% END %]
562
    </script>
562
    </script>
563
564
    <script>
563
    <script>
565
           $(document).ready(function() {
564
        $(document).ready(function () {
566
               $("#table_item_type").kohaTable(
565
            $("#table_item_type").kohaTable(
567
                   {
566
                {
568
                       pagingType: "full",
567
                    pagingType: "full",
569
                   },
568
                },
570
                   table_settings
569
                table_settings
571
               );
570
            );
572
571
573
           $( "#itemtypeentry" ).validate({
572
            $("#itemtypeentry").validate({
574
               rules: {
573
                rules: {
575
                   itemtype: { required: true },
574
                    itemtype: { required: true },
576
                   description: { required: true },
575
                    description: { required: true },
577
                   rentalcharge: { number: true },
576
                    rentalcharge: { number: true },
578
                   rentalcharge_hourly: { number: true },
577
                    rentalcharge_hourly: { number: true },
579
                   defaultreplacecost: { number: true },
578
                    defaultreplacecost: { number: true },
580
                   processfee: { number: true }
579
                    processfee: { number: true },
581
               }
580
                },
582
           });
581
            });
583
           $("#itemtype").on("blur",function(){
582
            $("#itemtype").on("blur", function () {
584
               toUC(this);
583
                toUC(this);
585
           });
584
            });
586
           if( $("#icons .tab-pane.active").length < 1 ){
585
            if ($("#icons .tab-pane.active").length < 1) {
587
               $("#icons a:first").tab("show");
586
                $("#icons a:first").tab("show");
588
           }
587
            }
589
588
590
            if ($("#library_limitation").length > 0) {
589
            if ($("#library_limitation").length > 0) {
591
                $("#library_limitation")[0].style.minWidth = "450px";
590
                $("#library_limitation")[0].style.minWidth = "450px";
(-)a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/localization.tt (-76 / +84 lines)
Lines 142-174 Link Here
142
[% MACRO jsinclude BLOCK %]
142
[% MACRO jsinclude BLOCK %]
143
    [% INCLUDE 'datatables.inc' %]
143
    [% INCLUDE 'datatables.inc' %]
144
    <script>
144
    <script>
145
        function show_message( params ) {
145
        function show_message(params) {
146
            var type = params.type;
146
            var type = params.type;
147
            var data = params.data;
147
            var data = params.data;
148
            var messages = $("#messages");
148
            var messages = $("#messages");
149
            var message;
149
            var message;
150
            if ( type == 'success_on_update' ) {
150
            if (type == "success_on_update") {
151
                message = $('<div class="alert alert-info"></div>');
151
                message = $('<div class="alert alert-info"></div>');
152
                message.text(_("Entity %s (code %s) for lang %s has been updated with '%s'").format(data.entity, data.code, data.lang, data.translation));
152
                message.text(_("Entity %s (code %s) for lang %s has been updated with '%s'").format(data.entity, data.code, data.lang, data.translation));
153
            } else if ( type == 'error_on_update' ) {
153
            } else if (type == "error_on_update") {
154
                message = $('<div class="alert alert-warning"></div>');
154
                message = $('<div class="alert alert-warning"></div>');
155
                if ( data.error_code == 'already_exists' ) {
155
                if (data.error_code == "already_exists") {
156
                    message.text(_("A translation already exists for this language."));
156
                    message.text(_("A translation already exists for this language."));
157
                } else {
157
                } else {
158
                    message.text(_("An error occurred when updating this translation."));
158
                    message.text(_("An error occurred when updating this translation."));
159
                }
159
                }
160
            } else if ( type == 'success_on_delete' ) {
160
            } else if (type == "success_on_delete") {
161
                message = $('<div class="alert alert-info"></div>');
161
                message = $('<div class="alert alert-info"></div>');
162
                message.text(_("The translation (id %s) has been removed successfully").format(data.id));
162
                message.text(_("The translation (id %s) has been removed successfully").format(data.id));
163
            } else if ( type == 'error_on_delete' ) {
163
            } else if (type == "error_on_delete") {
164
                message = $('<div class="alert alert-warning"></div>');
164
                message = $('<div class="alert alert-warning"></div>');
165
                message.text(_("An error occurred when deleting this translation"));
165
                message.text(_("An error occurred when deleting this translation"));
166
            } else if ( type == 'success_on_insert' ) {
166
            } else if (type == "success_on_insert") {
167
                message = $('<div class="alert alert-info"></div>');
167
                message = $('<div class="alert alert-info"></div>');
168
                message.text(_("Translation (id %s) has been added successfully").format(data.id));
168
                message.text(_("Translation (id %s) has been added successfully").format(data.id));
169
            } else if ( type == 'error_on_insert' ) {
169
            } else if (type == "error_on_insert") {
170
                message = $('<div class="alert alert-warning"></div>');
170
                message = $('<div class="alert alert-warning"></div>');
171
                if ( data.error_code == 'already_exists' ) {
171
                if (data.error_code == "already_exists") {
172
                    message.text(_("A translation already exists for this language."));
172
                    message.text(_("A translation already exists for this language."));
173
                } else {
173
                } else {
174
                    message.text(_("An error occurred when adding this translation"));
174
                    message.text(_("An error occurred when adding this translation"));
Lines 177-234 Link Here
177
177
178
            $(messages).append(message);
178
            $(messages).append(message);
179
179
180
            setTimeout(function(){
180
            setTimeout(function () {
181
                message.hide()
181
                message.hide();
182
            }, 3000);
182
            }, 3000);
183
        }
183
        }
184
184
185
        function send_update_request( data, cell ) {
185
        function send_update_request(data, cell) {
186
            const client = APIClient.localization;
186
            const client = APIClient.localization;
187
            client.localizations.update(data).then(
187
            client.localizations.update(data).then(
188
                success => {
188
                success => {
189
                    if ( success.error ) {
189
                    if (success.error) {
190
                        $(cell).css('background-color', '#FF0000');
190
                        $(cell).css("background-color", "#FF0000");
191
                        show_message({ type: 'error_on_update', data: success });
191
                        show_message({ type: "error_on_update", data: success });
192
                    } else if ( success.is_changed == 1 ) {
192
                    } else if (success.is_changed == 1) {
193
                        $(cell).css('background-color', '#00FF00');
193
                        $(cell).css("background-color", "#00FF00");
194
                        show_message({ type: 'success_on_update', data: success });
194
                        show_message({ type: "success_on_update", data: success });
195
                    }
195
                    }
196
196
197
                    if ( $(cell).hasClass('lang') ) {
197
                    if ($(cell).hasClass("lang")) {
198
                        $(cell).text(success.lang)
198
                        $(cell).text(success.lang);
199
                    } else if ( $(cell).hasClass('translation') ) {
199
                    } else if ($(cell).hasClass("translation")) {
200
                        $(cell).text(success.translation)
200
                        $(cell).text(success.translation);
201
                    }
201
                    }
202
                },
202
                },
203
                error => {
203
                error => {
204
                    $(cell).css('background-color', '#FF9090');
204
                    $(cell).css("background-color", "#FF9090");
205
                    if ( $(cell).hasClass('lang') ) {
205
                    if ($(cell).hasClass("lang")) {
206
                        $(cell).text(error.lang)
206
                        $(cell).text(error.lang);
207
                    } else if ( $(cell).hasClass('translation') ) {
207
                    } else if ($(cell).hasClass("translation")) {
208
                        $(cell).text(error.translation)
208
                        $(cell).text(error.translation);
209
                    }
209
                    }
210
                    show_message({ type: 'error_on_update', data: error });
210
                    show_message({ type: "error_on_update", data: error });
211
                    console.warn("Something wrong happened: %s".format(error));
211
                    console.warn("Something wrong happened: %s".format(error));
212
                }
212
                }
213
            );
213
            );
214
        }
214
        }
215
215
216
        function send_delete_request( id, cell ) {
216
        function send_delete_request(id, cell) {
217
            const client = APIClient.localization;
217
            const client = APIClient.localization;
218
            client.localizations.delete(id).then(
218
            client.localizations.delete(id).then(
219
                success => {
219
                success => {
220
                    $("#localization").DataTable().row( '#row_id_' + id ).remove().draw();
220
                    $("#localization")
221
                    show_message({ type: 'success_on_delete', data: {id} });
221
                        .DataTable()
222
                        .row("#row_id_" + id)
223
                        .remove()
224
                        .draw();
225
                    show_message({ type: "success_on_delete", data: { id } });
222
                },
226
                },
223
                error => {
227
                error => {
224
                    $(cell).css('background-color', '#FF9090');
228
                    $(cell).css("background-color", "#FF9090");
225
                    show_message({ type: 'error_on_delete', data: error });
229
                    show_message({ type: "error_on_delete", data: error });
226
                    console.warn("Something wrong happened: %s".format(error));
230
                    console.warn("Something wrong happened: %s".format(error));
227
                }
231
                }
228
            );
232
            );
229
        }
233
        }
230
234
231
        $(document).ready(function() {
235
        $(document).ready(function () {
232
            $(".dialog").hide();
236
            $(".dialog").hide();
233
237
234
            let table = $("#localization").kohaTable({
238
            let table = $("#localization").kohaTable({
Lines 238-291 Link Here
238
            });
242
            });
239
            let table_dt = table.DataTable();
243
            let table_dt = table.DataTable();
240
244
241
            $("body").on('focus', "td.translation", function(){
245
            $("body").on("focus", "td.translation", function () {
242
                $(this).css('background-color', '');
246
                $(this).css("background-color", "");
243
            });
247
            });
244
            $("body").on('click', "td.lang", function(){
248
            $("body").on("click", "td.lang", function () {
245
                var td = $(this);
249
                var td = $(this);
246
                var tr = td.parent();
250
                var tr = td.parent();
247
                var id = tr.data('id');
251
                var id = tr.data("id");
248
                var lang = td.text();
252
                var lang = td.text();
249
                td.css('background-color', '');
253
                td.css("background-color", "");
250
                var my_select = languages_select.clone();
254
                var my_select = languages_select.clone();
251
                my_select.find('option[value="' + lang + '"]').attr('selected', 'selected');
255
                my_select.find('option[value="' + lang + '"]').attr("selected", "selected");
252
                my_select.on('click', function(e){
256
                my_select.on("click", function (e) {
253
                    e.stopPropagation();
257
                    e.stopPropagation();
254
                });
258
                });
255
                var lang;
259
                var lang;
256
                my_select.on('change', function(){
260
                my_select.on("change", function () {
257
                    lang = td.find('option:selected').val();
261
                    lang = td.find("option:selected").val();
258
                    var translation = tr.find("td.translation").text();
262
                    var translation = tr.find("td.translation").text();
259
                    send_update_request( {id, lang, translation}, td[0] );
263
                    send_update_request({ id, lang, translation }, td[0]);
260
                });
264
                });
261
                my_select.on('blur', function(){
265
                my_select.on("blur", function () {
262
                    td.html(lang);
266
                    td.html(lang);
263
                });
267
                });
264
                td.html(my_select);
268
                td.html(my_select);
265
            });
269
            });
266
270
267
            $("body").on('blur', "td.translation", function(){
271
            $("body").on("blur", "td.translation", function () {
268
                var tr = $(this).parent();
272
                var tr = $(this).parent();
269
                var id = $(tr).data('id');
273
                var id = $(tr).data("id");
270
                var lang = $(tr).find('td.lang').text();
274
                var lang = $(tr).find("td.lang").text();
271
                var translation = $(this).text();
275
                var translation = $(this).text();
272
                send_update_request( {id, lang, translation}, this );
276
                send_update_request({ id, lang, translation }, this);
273
            });
277
            });
274
278
275
            $("body").on("click", "a.delete", function(e){
279
            $("body").on("click", "a.delete", function (e) {
276
                e.preventDefault();
280
                e.preventDefault();
277
                if ( confirm(_("Are you sure you want to delete this translation?")) ) {
281
                if (confirm(_("Are you sure you want to delete this translation?"))) {
278
                    var td = $(this).parent();
282
                    var td = $(this).parent();
279
                    var tr = $(td).parent();
283
                    var tr = $(td).parent();
280
                    var id = $(tr).data('id');
284
                    var id = $(tr).data("id");
281
                    send_delete_request( id, td );
285
                    send_delete_request(id, td);
282
                }
286
                }
283
            });
287
            });
284
288
285
            const th_lang_index = document.querySelector('th.lang').cellIndex;
289
            const th_lang_index = document.querySelector("th.lang").cellIndex;
286
            const th_translation_index = document.querySelector('th.translation').cellIndex;
290
            const th_translation_index = document.querySelector("th.translation").cellIndex;
287
291
288
            $("#add_translation").on('submit', function(e){
292
            $("#add_translation").on("submit", function (e) {
289
                e.preventDefault();
293
                e.preventDefault();
290
                let localization = {
294
                let localization = {
291
                    entity: $(this).find('input[name="entity"]').val(),
295
                    entity: $(this).find('input[name="entity"]').val(),
Lines 296-334 Link Here
296
                const client = APIClient.localization;
300
                const client = APIClient.localization;
297
                client.localizations.create(localization).then(
301
                client.localizations.create(localization).then(
298
                    success => {
302
                    success => {
299
                        if ( success.error ) {
303
                        if (success.error) {
300
                            show_message({ type: 'error_on_insert', data: success });
304
                            show_message({ type: "error_on_insert", data: success });
301
                        } else {
305
                        } else {
302
                            var new_row = table_dt.row.add( [ success.id, success.entity, success.code, success.lang, success.translation, "<a href=\"#\" class=\"btn btn-default btn-xs delete\"><i class=\"fa fa-trash-can\"></i> Delete</a>" ] ).draw().node();
306
                            var new_row = table_dt.row
303
                            $( new_row ).attr("id", "row_id_" + success.id ).data("id", success.id );
307
                                .add([success.id, success.entity, success.code, success.lang, success.translation, '<a href="#" class="btn btn-default btn-xs delete"><i class="fa fa-trash-can"></i> Delete</a>'])
304
                            $( new_row.children[th_lang_index] ).prop("contenteditable", true).addClass("lang")
308
                                .draw()
305
                            $( new_row.children[th_translation_index] ).prop("contenteditable", true).addClass("translation")
309
                                .node();
306
                            show_message({ type: 'success_on_insert', data: success });
310
                            $(new_row)
311
                                .attr("id", "row_id_" + success.id)
312
                                .data("id", success.id);
313
                            $(new_row.children[th_lang_index]).prop("contenteditable", true).addClass("lang");
314
                            $(new_row.children[th_translation_index]).prop("contenteditable", true).addClass("translation");
315
                            show_message({ type: "success_on_insert", data: success });
307
                        }
316
                        }
308
                    },
317
                    },
309
                    error => {
318
                    error => {
310
                        show_message({ type: 'error_on_insert', data: error });
319
                        show_message({ type: "error_on_insert", data: error });
311
                        console.warn("Something wrong happened: %s".format(error));
320
                        console.warn("Something wrong happened: %s".format(error));
312
                    }
321
                    }
313
                );
322
                );
314
            });
323
            });
315
         });
324
        });
316
    </script>
325
    </script>
317
318
    <script>
326
    <script>
319
            var languages_select = $('<select name="lang" id="lang"></select>');
327
        var languages_select = $('<select name="lang" id="lang"></select>');
320
            [% FOR language IN languages %]
328
        [% FOR language IN languages %]
321
                [% FOR sublanguage IN language.sublanguages_loop %]
329
            [% FOR sublanguage IN language.sublanguages_loop %]
322
                    var option;
330
                var option;
323
                    [% IF language.plural %]
331
                [% IF language.plural %]
324
                        option = $('<option value="[% sublanguage.rfc4646_subtag | html %]">[% sublanguage.native_description | html %] [% sublanguage.region_description | html %] ([% sublanguage.rfc4646_subtag | html %])</option>');
332
                    option = $('<option value="[% sublanguage.rfc4646_subtag | html %]">[% sublanguage.native_description | html %] [% sublanguage.region_description | html %] ([% sublanguage.rfc4646_subtag | html %])</option>');
325
                        $(languages_select).append(option);
326
                    [% ELSE %]
327
                        option = $('<option value="[% sublanguage.rfc4646_subtag | html %]">[% sublanguage.native_description | html %] ([% sublanguage.rfc4646_subtag | html %])</option>');
328
                    [% END %]
329
                    $(languages_select).append(option);
333
                    $(languages_select).append(option);
334
                [% ELSE %]
335
                    option = $('<option value="[% sublanguage.rfc4646_subtag | html %]">[% sublanguage.native_description | html %] ([% sublanguage.rfc4646_subtag | html %])</option>');
330
                [% END %]
336
                [% END %]
337
                $(languages_select).append(option);
331
            [% END %]
338
            [% END %]
339
        [% END %]
332
    </script>
340
    </script>
333
[% END %]
341
[% END %]
334
[% INCLUDE 'intranet-bottom.inc' %]
342
[% INCLUDE 'intranet-bottom.inc' %]
(-)a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/marc-overlay-rules.tt (-153 / +145 lines)
Lines 321-566 Link Here
321
    <script>
321
    <script>
322
        var categories = [% To.json( categories ) | $raw %];
322
        var categories = [% To.json( categories ) | $raw %];
323
    </script>
323
    </script>
324
325
    <script>
324
    <script>
326
        $(document).ready(function(){
325
        $(document).ready(function () {
327
326
            var validator = $("#marc-overlay-rules-form").validate({
328
            var validator = $( "#marc-overlay-rules-form" ).validate({
327
                ignore: ".ignore",
329
                ignore: ".ignore"
330
            });
328
            });
331
329
332
            function prepareSubmit(op, id) {
330
            function prepareSubmit(op, id) {
333
334
                $('#marc-overlay-rules-form > input[name="op"]').val(op);
331
                $('#marc-overlay-rules-form > input[name="op"]').val(op);
335
332
336
                if(id) {
333
                if (id) {
337
                    $('<input type="hidden"/>')
334
                    $('<input type="hidden"/>').attr("name", "id").attr("value", id).appendTo("#marc-overlay-rules-form");
338
                    .attr('name', 'id')
339
                    .attr('value', id)
340
                    .appendTo('#marc-overlay-rules-form');
341
                }
335
                }
342
336
343
                if (op == 'cud-add' || op == 'cud-edit') {
337
                if (op == "cud-add" || op == "cud-edit") {
344
                    $('#marc-overlay-rules-form input[name="tag"]').removeClass('ignore');
338
                    $('#marc-overlay-rules-form input[name="tag"]').removeClass("ignore");
345
                } else {
339
                } else {
346
                    $('#marc-overlay-rules-form input[name="tag"]').addClass('ignore');
340
                    $('#marc-overlay-rules-form input[name="tag"]').addClass("ignore");
347
                }
341
                }
348
349
            }
342
            }
350
343
351
            $('#doedit').on('click', function(){
344
            $("#doedit").on("click", function () {
352
                prepareSubmit('cud-edit', $("#doedit").attr('value'));
345
                prepareSubmit("cud-edit", $("#doedit").attr("value"));
353
            });
346
            });
354
            $('#add').on('click', function(){
347
            $("#add").on("click", function () {
355
                prepareSubmit('cud-add');
348
                prepareSubmit("cud-add");
356
            });
349
            });
357
            $('.btn_remove').on('click', function(el){
350
            $(".btn_remove").on("click", function (el) {
358
                // remove all earlier selections
351
                // remove all earlier selections
359
                $('#marc-overlay-rules-form input[name="batchremove"]').each(function() {
352
                $('#marc-overlay-rules-form input[name="batchremove"]').each(function () {
360
                    $(this).prop( "checked", false );
353
                    $(this).prop("checked", false);
361
                });
354
                });
362
355
363
                confirm_remove(el.currentTarget.value);
356
                confirm_remove(el.currentTarget.value);
364
            });
357
            });
365
            $('#btn_batchremove').on('click', function(){
358
            $("#btn_batchremove").on("click", function () {
366
                confirm_remove();
359
                confirm_remove();
367
            });
360
            });
368
361
369
            function confirm_remove(id){
362
            function confirm_remove(id) {
370
                if (confirm(_("Are you sure you want to remove the selected rule(s)?"))){
363
                if (confirm(_("Are you sure you want to remove the selected rule(s)?"))) {
371
                    prepareSubmit('cud-remove', id);
364
                    prepareSubmit("cud-remove", id);
372
                    $('#marc-overlay-rules-form').submit()
365
                    $("#marc-overlay-rules-form").submit();
373
                }
366
                }
374
            }
367
            }
375
368
376
            /* Disable batch remove unless one or more checkboxes are checked */
369
            /* Disable batch remove unless one or more checkboxes are checked */
377
            $('input[name="batchremove"]').change(function() {
370
            $('input[name="batchremove"]').change(function () {
378
                if($('input[name="batchremove"]:checked').length > 0) {
371
                if ($('input[name="batchremove"]:checked').length > 0) {
379
                    $('#btn_batchremove').removeAttr('disabled');
372
                    $("#btn_batchremove").removeAttr("disabled");
380
                } else {
373
                } else {
381
                    $('#btn_batchremove').attr('disabled', 'disabled');
374
                    $("#btn_batchremove").attr("disabled", "disabled");
382
                }
375
                }
383
            });
376
            });
384
377
385
            $.fn.dataTable.ext.order['dom-input'] = function (settings, col) {
378
            $.fn.dataTable.ext.order["dom-input"] = function (settings, col) {
386
                return this.api().column(col, { order: 'index' }).nodes()
379
                return this.api()
380
                    .column(col, { order: "index" })
381
                    .nodes()
387
                    .map(function (td, i) {
382
                    .map(function (td, i) {
388
                        if($('input', td).val() != undefined) {
383
                        if ($("input", td).val() != undefined) {
389
                            return $('input', td).val();
384
                            return $("input", td).val();
390
                        } else if($('select', td).val() != undefined) {
385
                        } else if ($("select", td).val() != undefined) {
391
                            return $('option[selected="selected"]', td).val();
386
                            return $('option[selected="selected"]', td).val();
392
                        } else {
387
                        } else {
393
                            return $(td).html();
388
                            return $(td).html();
394
                        }
389
                        }
395
                    });
390
                    });
396
            }
391
            };
397
392
398
            $('#marc-overlay-rules').kohaTable({
393
            $("#marc-overlay-rules").kohaTable({
399
                columns: [
394
                columns: [
400
                    {searchable:  false, orderable: false},
395
                    { searchable: false, orderable: false },
401
                    {orderDataType: "dom-input"},
396
                    { orderDataType: "dom-input" },
402
                    {orderDataType: "dom-input"},
397
                    { orderDataType: "dom-input" },
403
                    {searchable:  false, orderDataType: "dom-input"},
398
                    { searchable: false, orderDataType: "dom-input" },
404
                    {searchable:  false, orderDataType: "dom-input"},
399
                    { searchable: false, orderDataType: "dom-input" },
405
                    {searchable:  false, orderDataType: "dom-input"},
400
                    { searchable: false, orderDataType: "dom-input" },
406
                    {searchable:  false, orderDataType: "dom-input"},
401
                    { searchable: false, orderDataType: "dom-input" },
407
                    {searchable:  false, orderDataType: "dom-input"},
402
                    { searchable: false, orderDataType: "dom-input" },
408
                    {searchable:  false, orderDataType: "dom-input"},
403
                    { searchable: false, orderDataType: "dom-input" },
409
                    {searchable:  false, orderable: false},
404
                    { searchable: false, orderable: false },
410
                    {searchable:  false, orderable: false}
405
                    { searchable: false, orderable: false },
411
                ],
406
                ],
412
                pagingType: "simple"
407
                pagingType: "simple",
413
            });
408
            });
414
409
415
            var overlay_rules_presets = {};
410
            var overlay_rules_presets = {};
416
            overlay_rules_presets["protect"] = {
411
            overlay_rules_presets["protect"] = {
417
              'add': 0,
412
                add: 0,
418
              'append': 0,
413
                append: 0,
419
              'remove': 0,
414
                remove: 0,
420
              'delete': 0
415
                delete: 0,
421
            };
416
            };
422
            overlay_rules_presets["overwrite"] = {
417
            overlay_rules_presets["overwrite"] = {
423
              'add': 1,
418
                add: 1,
424
              'append': 1,
419
                append: 1,
425
              'remove': 1,
420
                remove: 1,
426
              'delete': 1
421
                delete: 1,
427
            };
422
            };
428
            overlay_rules_presets["add"] = {
423
            overlay_rules_presets["add"] = {
429
              'add': 1,
424
                add: 1,
430
              'append': 0,
425
                append: 0,
431
              'remove': 0,
426
                remove: 0,
432
              'delete': 0
427
                delete: 0,
433
            };
428
            };
434
            overlay_rules_presets["addappend"] = {
429
            overlay_rules_presets["addappend"] = {
435
              'add': 1,
430
                add: 1,
436
              'append': 1,
431
                append: 1,
437
              'remove': 0,
432
                remove: 0,
438
              'delete': 0
433
                delete: 0,
439
            };
434
            };
440
            overlay_rules_presets["protectfromdeletion"] = {
435
            overlay_rules_presets["protectfromdeletion"] = {
441
              'add': 1,
436
                add: 1,
442
              'append': 1,
437
                append: 1,
443
              'remove': 1,
438
                remove: 1,
444
              'delete': 0
439
                delete: 0,
445
            };
440
            };
446
441
447
            function hash_config(config) {
442
            function hash_config(config) {
448
              return JSON.stringify(config, Object.keys(config).sort());
443
                return JSON.stringify(config, Object.keys(config).sort());
449
            }
444
            }
450
445
451
            var overlay_rules_preset_map = {};
446
            var overlay_rules_preset_map = {};
452
            $.each(overlay_rules_presets, function(preset, config) {
447
            $.each(overlay_rules_presets, function (preset, config) {
453
              overlay_rules_preset_map[hash_config(config)] = preset;
448
                overlay_rules_preset_map[hash_config(config)] = preset;
454
            });
449
            });
455
450
456
            function operations_config_overlay_rule_preset(config) {
451
            function operations_config_overlay_rule_preset(config) {
457
              return overlay_rules_preset_map[hash_config(config)] || '';
452
                return overlay_rules_preset_map[hash_config(config)] || "";
458
            }
453
            }
459
454
460
            /* Set preset values according to operation config */
455
            /* Set preset values according to operation config */
461
            $('.rule').each(function() {
456
            $(".rule").each(function () {
462
              var $this = $(this);
457
                var $this = $(this);
463
              var operations_config = {};
458
                var operations_config = {};
464
              $('.rule-operation-action', $this).each(function() {
459
                $(".rule-operation-action", $this).each(function () {
465
                var $operation = $(this);
460
                    var $operation = $(this);
466
                operations_config[$operation.data('operation')] = $operation.data('value');
461
                    operations_config[$operation.data("operation")] = $operation.data("value");
467
              });
462
                });
468
              $('.rule-preset', $this).text(
463
                $(".rule-preset", $this).text($('select[name="preset"] option[value="' + operations_config_overlay_rule_preset(operations_config) + '"]').text());
469
                $('select[name="preset"] option[value="' + operations_config_overlay_rule_preset(operations_config) + '"]').text()
470
              );
471
            });
464
            });
472
465
473
            /* Listen to operations config changes and set presets accordingly */
466
            /* Listen to operations config changes and set presets accordingly */
474
            $('.rule-operation-action-edit select').change(function() {
467
            $(".rule-operation-action-edit select").change(function () {
475
              var operations_config = {};
468
                var operations_config = {};
476
              var $parent_row = $(this).closest('tr');
469
                var $parent_row = $(this).closest("tr");
477
              $('.rule-operation-action-edit select', $parent_row).each(function() {
470
                $(".rule-operation-action-edit select", $parent_row).each(function () {
478
                var $this = $(this);
471
                    var $this = $(this);
479
                operations_config[$this.attr('name')] = parseInt($this.val());
472
                    operations_config[$this.attr("name")] = parseInt($this.val());
480
              });
473
                });
481
              $('select[name="preset"]', $parent_row).val(
474
                $('select[name="preset"]', $parent_row).val(operations_config_overlay_rule_preset(operations_config));
482
                  operations_config_overlay_rule_preset(operations_config)
483
              );
484
            });
475
            });
485
476
486
            /* Listen to preset changes and set operations config accordingly */
477
            /* Listen to preset changes and set operations config accordingly */
487
            $('select[name="preset"]').change(function() {
478
            $('select[name="preset"]').change(function () {
488
              var $this = $(this);
479
                var $this = $(this);
489
              var $parent_row = $this.closest('tr');
480
                var $parent_row = $this.closest("tr");
490
              var preset = $this.val();
481
                var preset = $this.val();
491
              if (preset) {
482
                if (preset) {
492
                $.each(overlay_rules_presets[preset], function(operation, action) {
483
                    $.each(overlay_rules_presets[preset], function (operation, action) {
493
                  $('select[name="' + operation + '"]', $parent_row).val(action);
484
                        $('select[name="' + operation + '"]', $parent_row).val(action);
494
                });
485
                    });
495
              }
486
                }
496
            });
487
            });
497
488
498
            // Add * => * to this array of objects, and *reduce* it to one object
489
            // Add * => * to this array of objects, and *reduce* it to one object
499
            // Note: This allows displaying a sorted list of categories later, but we still depend on an object!
490
            // Note: This allows displaying a sorted list of categories later, but we still depend on an object!
500
            categories.unshift({ categorycode: '*', description: '*'});
491
            categories.unshift({ categorycode: "*", description: "*" });
501
            categories = categories.reduce( ( a,c ) => ( { ...a, [c.categorycode]: c.description } ), {} );
492
            categories = categories.reduce((a, c) => ({ ...a, [c.categorycode]: c.description }), {});
502
493
503
            var module_filter_options = {
494
            var module_filter_options = {
504
            source: {
495
                source: {
505
                '*': '*',
496
                    "*": "*",
506
                batchmod: _("Batch record modification"),
497
                    batchmod: _("Batch record modification"),
507
                intranet: _("Staff interface MARC editor"),
498
                    intranet: _("Staff interface MARC editor"),
508
                batchimport: _("Staged MARC import"),
499
                    batchimport: _("Staged MARC import"),
509
                z3950: _("Z39.50"),
500
                    z3950: _("Z39.50"),
510
                bulkmarcimport: _("bulkmarcimport.pl"),
501
                    bulkmarcimport: _("bulkmarcimport.pl"),
511
                import_lexile: _("import_lexile.pl")
502
                    import_lexile: _("import_lexile.pl"),
512
            },
503
                },
513
504
514
                categorycode: categories,
505
                categorycode: categories,
515
            };
506
            };
516
507
517
            //Kind of hack: Replace filter value with label when one exist
508
            //Kind of hack: Replace filter value with label when one exist
518
            $('.rule-module').each(function() {
509
            $(".rule-module").each(function () {
519
              var $this = $(this);
510
                var $this = $(this);
520
              var module = $this.text();
511
                var module = $this.text();
521
              if (module in module_filter_options) {
512
                if (module in module_filter_options) {
522
                let $filter = $this.siblings('.rule-filter');
513
                    let $filter = $this.siblings(".rule-filter");
523
                if ($filter.text() in module_filter_options[module]) {
514
                    if ($filter.text() in module_filter_options[module]) {
524
                  $filter.text(module_filter_options[module][$filter.text()]);
515
                        $filter.text(module_filter_options[module][$filter.text()]);
516
                    }
525
                }
517
                }
526
              }
527
            });
518
            });
528
519
529
            var $filter_container = $('#filter-container');
520
            var $filter_container = $("#filter-container");
530
521
531
            /* Listen to module changes and set filter input accordingly */
522
            /* Listen to module changes and set filter input accordingly */
532
            $('select[name="module"]').change(function() {
523
            $('select[name="module"]')
533
              var $this = $(this);
524
                .change(function () {
534
              var module_name = $this.val();
525
                    var $this = $(this);
535
526
                    var module_name = $this.val();
536
              /* Remove current element if any */
527
537
              $filter_container.empty();
528
                    /* Remove current element if any */
538
529
                    $filter_container.empty();
539
              var filter_elem = null;
530
540
              if (module_name in module_filter_options) {
531
                    var filter_elem = null;
541
                // Create select element
532
                    if (module_name in module_filter_options) {
542
                filter_elem = document.createElement('select');
533
                        // Create select element
543
                for (var filter_value in module_filter_options[module_name]) {
534
                        filter_elem = document.createElement("select");
544
                  var option = document.createElement('option');
535
                        for (var filter_value in module_filter_options[module_name]) {
545
                  option.value = filter_value;
536
                            var option = document.createElement("option");
546
                  option.text = module_filter_options[module_name][filter_value];
537
                            option.value = filter_value;
547
                  filter_elem.appendChild(option);
538
                            option.text = module_filter_options[module_name][filter_value];
548
                }
539
                            filter_elem.appendChild(option);
549
              }
540
                        }
550
              else {
541
                    } else {
551
                // Create text input element
542
                        // Create text input element
552
                filter_elem = document.createElement('input');
543
                        filter_elem = document.createElement("input");
553
                filter_elem.type = 'text';
544
                        filter_elem.type = "text";
554
                filter_elem.setAttribute('size', 5);
545
                        filter_elem.setAttribute("size", 5);
555
              }
546
                    }
556
              filter_elem.name = 'filter';
547
                    filter_elem.name = "filter";
557
              filter_elem.id = 'filter';
548
                    filter_elem.id = "filter";
558
              $filter_container.append(filter_elem);
549
                    $filter_container.append(filter_elem);
559
            }).change(); // Trigger change
550
                })
551
                .change(); // Trigger change
560
552
561
            // Hack: set value if editing rule
553
            // Hack: set value if editing rule
562
            if ($filter_container.data('filter')) {
554
            if ($filter_container.data("filter")) {
563
              $('#filter').val($filter_container.data('filter'));
555
                $("#filter").val($filter_container.data("filter"));
564
            }
556
            }
565
        });
557
        });
566
    </script>
558
    </script>
(-)a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/oai_servers.tt (-12 / +12 lines)
Lines 194-236 Link Here
194
    [% END %]
194
    [% END %]
195
    [% IF ( add_form ) %]
195
    [% IF ( add_form ) %]
196
        <script>
196
        <script>
197
            $(document).ready(function(){
197
            $(document).ready(function () {
198
                // Update selects for dataformat and recordtype
198
                // Update selects for dataformat and recordtype
199
                // FIXME Do not do this in JS!
199
                // FIXME Do not do this in JS!
200
                if (typeof server !== "undefined"){
200
                if (typeof server !== "undefined") {
201
                    $("#dataformat").val(server.dataformat);
201
                    $("#dataformat").val(server.dataformat);
202
                    $("#recordtype").val(server.recordtype);
202
                    $("#recordtype").val(server.recordtype);
203
                }
203
                }
204
                $( "#serverentry" ).validate({
204
                $("#serverentry").validate({
205
                    rules: {
205
                    rules: {
206
                        servername: { required: true },
206
                        servername: { required: true },
207
                        host: { required: true },
207
                        host: { required: true },
208
                        port: {
208
                        port: {
209
                            number: true
209
                            number: true,
210
                        },
210
                        },
211
                        rank: { number: true },
211
                        rank: { number: true },
212
                    }
212
                    },
213
                });
213
                });
214
                $("#serverentry").submit(function( event ) {
214
                $("#serverentry").submit(function (event) {
215
                    // enable recordtype to include field in post
215
                    // enable recordtype to include field in post
216
                    $('#recordtype').prop('disabled',false);
216
                    $("#recordtype").prop("disabled", false);
217
                });
217
                });
218
                $("#servername").on("blur",function(){
218
                $("#servername").on("blur", function () {
219
                    toUC(this);
219
                    toUC(this);
220
                });
220
                });
221
            });
221
            });
222
        </script>
222
        </script>
223
    [% ELSE %]
223
    [% ELSE %]
224
        <script>
224
        <script>
225
            $(document).ready(function() {
225
            $(document).ready(function () {
226
                $("#serverst").kohaTable({
226
                $("#serverst").kohaTable({
227
                    pagingType: "full",
227
                    pagingType: "full",
228
                });
228
                });
229
                $(".delete").on("click",function(e){
229
                $(".delete").on("click", function (e) {
230
                    var servername = $(this).data("servername");
230
                    var servername = $(this).data("servername");
231
                    let formid = $(this).data("formid");
231
                    let formid = $(this).data("formid");
232
                    if( confirm( _("Are you sure you want to delete repository %s?").format(servername) ) ) {
232
                    if (confirm(_("Are you sure you want to delete repository %s?").format(servername))) {
233
                        $('#'+formid).submit();
233
                        $("#" + formid).submit();
234
                        return true;
234
                        return true;
235
                    } else {
235
                    } else {
236
                        e.preventDefault();
236
                        e.preventDefault();
(-)a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/smtp_servers.tt (-79 / +87 lines)
Lines 324-481 Link Here
324
            on: "[% tp("Active", "On") | html %]";
324
            on: "[% tp("Active", "On") | html %]";
325
        };
325
        };
326
    </script>
326
    </script>
327
328
    <script>
327
    <script>
329
        $(document).ready(function() {
328
        $(document).ready(function () {
330
329
            var smtp_servers_url = "/api/v1/config/smtp_servers";
331
            var smtp_servers_url = '/api/v1/config/smtp_servers';
332
            window.smtp_servers = $("#smtp_servers").kohaTable({
330
            window.smtp_servers = $("#smtp_servers").kohaTable({
333
                ajax: {
331
                ajax: {
334
                    "url": smtp_servers_url
332
                    url: smtp_servers_url,
335
                },
333
                },
336
                'language': {
334
                language: {
337
                    emptyTable: '<div class="alert alert-info">'+_("There are no SMTP servers defined.")+'</div>'
335
                    emptyTable: '<div class="alert alert-info">' + _("There are no SMTP servers defined.") + "</div>",
338
                },
336
                },
339
                columnDefs: [ {
337
                columnDefs: [
340
                    targets: [0,1],
338
                    {
341
                    render: function (data, type, row, meta) {
339
                        targets: [0, 1],
342
                        if ( type == 'display' ) {
340
                        render: function (data, type, row, meta) {
343
                            if ( data != null ) {
341
                            if (type == "display") {
344
                                return data.escapeHtml();
342
                                if (data != null) {
345
                            }
343
                                    return data.escapeHtml();
346
                            else {
344
                                } else {
347
                                return "Default";
345
                                    return "Default";
346
                                }
348
                            }
347
                            }
349
                        }
348
                            return data;
350
                        return data;
349
                        },
351
                    }
350
                    },
352
                } ],
351
                ],
353
                columns: [
352
                columns: [
354
                    {
353
                    {
355
                        data: "name",
354
                        data: "name",
356
                        searchable: true,
355
                        searchable: true,
357
                        orderable: true
356
                        orderable: true,
358
                    },
357
                    },
359
                    {
358
                    {
360
                        data: "host",
359
                        data: "host",
361
                        searchable: true,
360
                        searchable: true,
362
                        orderable: true
361
                        orderable: true,
363
                    },
362
                    },
364
                    {
363
                    {
365
                        data: "port",
364
                        data: "port",
366
                        searchable: true,
365
                        searchable: true,
367
                        orderable: false
366
                        orderable: false,
368
                    },
367
                    },
369
                    {
368
                    {
370
                        data: "timeout",
369
                        data: "timeout",
371
                        searchable: true,
370
                        searchable: true,
372
                        orderable: false
371
                        orderable: false,
373
                    },
372
                    },
374
                    {
373
                    {
375
                        data: "ssl_mode",
374
                        data: "ssl_mode",
376
                        render: function (data, type, row, meta) {
375
                        render: function (data, type, row, meta) {
377
                            if (data == 'disabled') {
376
                            if (data == "disabled") {
378
                                return _("Disabled");
377
                                return _("Disabled");
379
                            }
378
                            } else if (data == "ssl") {
380
                            else if (data == 'ssl') {
381
                                return _("SSL");
379
                                return _("SSL");
382
                            }
380
                            } else {
383
                            else {
384
                                return _("STARTTLS");
381
                                return _("STARTTLS");
385
                            }
382
                            }
386
                        },
383
                        },
387
                        searchable: false,
384
                        searchable: false,
388
                        orderable: false
385
                        orderable: false,
389
                    },
386
                    },
390
                    {
387
                    {
391
                        data: function( row, type, val, meta ) {
388
                        data: function (row, type, val, meta) {
392
                            if ( row.user_name != null ) {
389
                            if (row.user_name != null) {
393
                                return _("Yes");
390
                                return _("Yes");
394
                            }
391
                            } else {
395
                            else {
396
                                return _("No");
392
                                return _("No");
397
                            }
393
                            }
398
                        },
394
                        },
399
                        searchable: false,
395
                        searchable: false,
400
                        orderable: false
396
                        orderable: false,
401
                    },
397
                    },
402
                    {
398
                    {
403
                        data: function( row, type, val, meta ) {
399
                        data: function (row, type, val, meta) {
404
                            if ( row.debug ) {
400
                            if (row.debug) {
405
                                let result = '<span class="badge text-bg-warning">' + i18n.on + '</span>';
401
                                let result = '<span class="badge text-bg-warning">' + i18n.on + "</span>";
406
                                return result;
402
                                return result;
407
                            }
403
                            } else {
408
                            else {
409
                                return _("");
404
                                return _("");
410
                            }
405
                            }
411
                        },
406
                        },
412
                        searchable: false,
407
                        searchable: false,
413
                        orderable: false
408
                        orderable: false,
414
                    },
409
                    },
415
                    {
410
                    {
416
                        data: function( row, type, val, meta ) {
411
                        data: function (row, type, val, meta) {
417
                            if ( row.is_default ) {
412
                            if (row.is_default) {
418
                                let result = '<span class="badge text-bg-success">' + _("Default") + '</span>';
413
                                let result = '<span class="badge text-bg-success">' + _("Default") + "</span>";
419
                                return result;
414
                                return result;
420
                            } else {
415
                            } else {
421
                                return "";
416
                                return "";
422
                            }
417
                            }
423
                        },
418
                        },
424
                        searchable: false,
419
                        searchable: false,
425
                        orderable: false
420
                        orderable: false,
426
                    },
421
                    },
427
                    {
422
                    {
428
                        data: function( row, type, val, meta ) {
423
                        data: function (row, type, val, meta) {
429
                            var result = '<a class="btn btn-default btn-xs" role="button" href="/cgi-bin/koha/admin/smtp_servers.pl?op=edit_form&amp;smtp_server_id='+ encodeURIComponent(row.smtp_server_id) +'"><i class="fa-solid fa-pencil" aria-hidden="true"></i> '+_("Edit")+'</a>'+"\n";
424
                            var result =
430
                            result += '<a class="btn btn-default btn-xs delete_server" role="button" href="#" data-bs-toggle="modal" data-bs-target="#delete_confirm_modal" data-smtp-server-id="'+ encodeURIComponent(row.smtp_server_id) +'" data-smtp-server-name="'+ encodeURIComponent(row.name.escapeHtml()) +'"><i class="fa fa-trash-can" aria-hidden="true"></i> '+_("Delete")+'</a>';
425
                                '<a class="btn btn-default btn-xs" role="button" href="/cgi-bin/koha/admin/smtp_servers.pl?op=edit_form&amp;smtp_server_id=' +
426
                                encodeURIComponent(row.smtp_server_id) +
427
                                '"><i class="fa-solid fa-pencil" aria-hidden="true"></i> ' +
428
                                _("Edit") +
429
                                "</a>" +
430
                                "\n";
431
                            result +=
432
                                '<a class="btn btn-default btn-xs delete_server" role="button" href="#" data-bs-toggle="modal" data-bs-target="#delete_confirm_modal" data-smtp-server-id="' +
433
                                encodeURIComponent(row.smtp_server_id) +
434
                                '" data-smtp-server-name="' +
435
                                encodeURIComponent(row.name.escapeHtml()) +
436
                                '"><i class="fa fa-trash-can" aria-hidden="true"></i> ' +
437
                                _("Delete") +
438
                                "</a>";
431
                            return result;
439
                            return result;
432
                        },
440
                        },
433
                        searchable: false,
441
                        searchable: false,
434
                        orderable: false
442
                        orderable: false,
435
                    }
443
                    },
436
                ],
444
                ],
437
            });
445
            });
438
446
439
            $('#smtp_servers').on( "click", '.delete_server', function () {
447
            $("#smtp_servers").on("click", ".delete_server", function () {
440
                var smtp_server_id   = $(this).data('smtp-server-id');
448
                var smtp_server_id = $(this).data("smtp-server-id");
441
                var smtp_server_name = decodeURIComponent($(this).data('smtp-server-name'));
449
                var smtp_server_name = decodeURIComponent($(this).data("smtp-server-name"));
442
450
443
                $("#delete_confirm_dialog").html(
451
                $("#delete_confirm_dialog").html(_("You are about to delete the '%s' SMTP server.").format(smtp_server_name));
444
                    _("You are about to delete the '%s' SMTP server.").format(smtp_server_name)
452
                $("#delete_confirm_modal_button").data("smtp-server-id", smtp_server_id);
445
                );
453
                $("#delete_confirm_modal_button").data("smtp-server-name", smtp_server_name);
446
                $("#delete_confirm_modal_button").data('smtp-server-id', smtp_server_id);
447
                $("#delete_confirm_modal_button").data('smtp-server-name', smtp_server_name);
448
            });
454
            });
449
455
450
            $('#smtp_default').on( "click", function () {
456
            $("#smtp_default").on("click", function () {
451
                $("#default_confirm_modal").modal('show');
457
                $("#default_confirm_modal").modal("show");
452
            });
458
            });
453
            $('.default_confirm_modal_yes').on( "click", function () {
459
            $(".default_confirm_modal_yes").on("click", function () {
454
                $("#default_confirm_modal").modal('hide');
460
                $("#default_confirm_modal").modal("hide");
455
            });
461
            });
456
            $('.default_confirm_modal_no').on( "click", function () {
462
            $(".default_confirm_modal_no").on("click", function () {
457
                $("#smtp_default").prop('checked', !$("#smtp_default").prop('checked') );
463
                $("#smtp_default").prop("checked", !$("#smtp_default").prop("checked"));
458
                $("#default_confirm_modal").modal('hide');
464
                $("#default_confirm_modal").modal("hide");
459
            });
465
            });
460
466
461
            $("#delete_confirm_modal_button").on( "click", function () {
467
            $("#delete_confirm_modal_button").on("click", function () {
462
468
                var smtp_server_id = $(this).data("smtp-server-id");
463
                var smtp_server_id   = $(this).data('smtp-server-id');
469
                var smtp_server_name = $(this).data("smtp-server-name");
464
                var smtp_server_name = $(this).data('smtp-server-name');
465
470
466
                $.ajax({
471
                $.ajax({
467
                    method: "DELETE",
472
                    method: "DELETE",
468
                    url: "/api/v1/config/smtp_servers/"+smtp_server_id
473
                    url: "/api/v1/config/smtp_servers/" + smtp_server_id,
469
                }).success(function() {
474
                })
470
                    window.smtp_servers.api().ajax.reload(function (data) {
475
                    .success(function () {
471
                        $("#smtp_action_result_dialog").hide();
476
                        window.smtp_servers.api().ajax.reload(function (data) {
472
                        $("#smtp_delete_success").html(_("Server '%s' deleted successfully.").format(smtp_server_name)).show();
477
                            $("#smtp_action_result_dialog").hide();
478
                            $("#smtp_delete_success").html(_("Server '%s' deleted successfully.").format(smtp_server_name)).show();
479
                        });
480
                    })
481
                    .fail(function () {
482
                        $("#smtp_delete_error").html(_("Error deleting server '%s'. Check the logs for details.").format(smtp_server_name)).show();
483
                    })
484
                    .done(function () {
485
                        $("#delete_confirm_modal").modal("hide");
473
                    });
486
                    });
474
                }).fail(function () {
475
                    $("#smtp_delete_error").html(_("Error deleting server '%s'. Check the logs for details.").format(smtp_server_name)).show();
476
                }).done(function () {
477
                    $("#delete_confirm_modal").modal('hide');
478
                });
479
            });
487
            });
480
        });
488
        });
481
    </script>
489
    </script>
(-)a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/systempreferences.tt (-30 / +33 lines)
Lines 494-564 Link Here
494
    [% IF else && loop %]
494
    [% IF else && loop %]
495
        [% INCLUDE 'datatables.inc' %]
495
        [% INCLUDE 'datatables.inc' %]
496
        <script>
496
        <script>
497
            $(document).ready(function() {
497
            $(document).ready(function () {
498
               $("#sysprefst").kohaTable({
498
                $("#sysprefst").kohaTable({
499
                   dom: '<"top pager"ilf>t',
499
                    dom: '<"top pager"ilf>t',
500
                   paging: false,
500
                    paging: false,
501
               });
501
                });
502
            });
502
            });
503
        </script>
503
        </script>
504
    [% END %]
504
    [% END %]
505
505
506
    [% IF ( add_form ) %]
506
    [% IF ( add_form ) %]
507
        <script>
507
        <script>
508
            $(document).ready(function() {
508
            $(document).ready(function () {
509
                $('.variabletype').css({ color: "#0000CC", cursor: "pointer" });
509
                $(".variabletype").css({ color: "#0000CC", cursor: "pointer" });
510
                $('.variabletype').click(function() {
510
                $(".variabletype").click(function () {
511
                    $('#preftype').attr("value",$(this).attr("id"));
511
                    $("#preftype").attr("value", $(this).attr("id"));
512
                });
512
                });
513
            });
513
            });
514
        </script>
514
        </script>
515
    [% END %]
515
    [% END %]
516
517
    <script>
516
    <script>
518
            // FIXME: many of these js functions appear unused
517
        // FIXME: many of these js functions appear unused
519
        function isNotNull(f,noalert) {
518
        function isNotNull(f, noalert) {
520
                if (f.value.length ==0) {
519
            if (f.value.length == 0) {
521
        return false;
520
                return false;
522
                }
521
            }
523
                return true;
522
            return true;
524
        }
523
        }
525
524
526
        function isNum(v,maybenull) {
525
        function isNum(v, maybenull) {
527
            var n = new Number(v.value);
526
            var n = new Number(v.value);
528
            if (isNaN(n)) {
527
            if (isNaN(n)) {
529
                return false;
528
                return false;
530
                }
529
            }
531
            if (maybenull==0 && v.value=='') {
530
            if (maybenull == 0 && v.value == "") {
532
                return false;
531
                return false;
533
            }
532
            }
534
            return true;
533
            return true;
535
        }
534
        }
536
535
537
        function Check(f) {
536
        function Check(f) {
538
            var ok=1;
537
            var ok = 1;
539
            var _alertString="";
538
            var _alertString = "";
540
            var alertString2;
539
            var alertString2;
541
            if (f.variable.value.length==0) {
540
            if (f.variable.value.length == 0) {
542
                _alertString += "\n- " + _("variable missing");
541
                _alertString += "\n- " + _("variable missing");
543
            }
542
            }
544
            if (f.value.value.length==0) {
543
            if (f.value.value.length == 0) {
545
                _alertString += "\n- " + _("value missing");
544
                _alertString += "\n- " + _("value missing");
546
            }
545
            }
547
            if (_alertString.length==0) {
546
            if (_alertString.length == 0) {
548
                document.Aform.submit();
547
                document.Aform.submit();
549
            } else {
548
            } else {
550
                alertString2  = _("Form not submitted because of the following problem(s)");
549
                alertString2 = _("Form not submitted because of the following problem(s)");
551
                alertString2 += "\n------------------------------------------------------------------------------------\n";
550
                alertString2 += "\n------------------------------------------------------------------------------------\n";
552
                alertString2 += _alertString;
551
                alertString2 += _alertString;
553
                alert(alertString2);
552
                alert(alertString2);
554
            }
553
            }
555
        }
554
        }
556
        $( function() {
555
        $(function () {
557
            $( '#sysprefst .expand-textarea' ).show().click( function () {
556
            $("#sysprefst .expand-textarea")
558
                $( this ).hide().nextAll( 'textarea, input[type=submit]' ).show( 'slow' );
557
                .show()
558
                .click(function () {
559
                    $(this).hide().nextAll("textarea, input[type=submit]").show("slow");
559
560
560
                return false;
561
                    return false;
561
            } ).nextAll( 'textarea, input[type=submit]' ).hide();
562
                })
563
                .nextAll("textarea, input[type=submit]")
564
                .hide();
562
        });
565
        });
563
    </script>
566
    </script>
564
[% END %]
567
[% END %]
(-)a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/z3950servers.tt (-21 / +20 lines)
Lines 284-343 Link Here
284
284
285
    [% IF ( add_form ) %]
285
    [% IF ( add_form ) %]
286
        <script>
286
        <script>
287
            $(document).ready(function(){
287
            $(document).ready(function () {
288
                // Update selects for syntax, encoding and recordtype
288
                // Update selects for syntax, encoding and recordtype
289
                if (typeof server !== 'undefined'){
289
                if (typeof server !== "undefined") {
290
                    $("#syntax").val(server.syntax);
290
                    $("#syntax").val(server.syntax);
291
                    $("#encoding").val(server.encoding);
291
                    $("#encoding").val(server.encoding);
292
                    $("#recordtype").val(server.recordtype);
292
                    $("#recordtype").val(server.recordtype);
293
                }
293
                }
294
                $( "#serverentry" ).validate({
294
                $("#serverentry").validate({
295
                    rules: {
295
                    rules: {
296
                        servername: { required: true },
296
                        servername: { required: true },
297
                        host: { required: true },
297
                        host: { required: true },
298
                        port: {
298
                        port: {
299
                            required: true,
299
                            required: true,
300
                            number: true
300
                            number: true,
301
                        },
301
                        },
302
                        db: { required: true },
302
                        db: { required: true },
303
                        rank: { number: true },
303
                        rank: { number: true },
304
                        timeout: { number: true }
304
                        timeout: { number: true },
305
                    }
305
                    },
306
                });
306
                });
307
                $("#serverentry").submit(function( event ) {
307
                $("#serverentry").submit(function (event) {
308
                    // first test if show_sru_fields exists
308
                    // first test if show_sru_fields exists
309
                    if( $('#show_sru_fields').length && $('#show_sru_fields').val()=='' && !confirm( _("No SRU search field mappings have been defined. This means that all field searches will go through the whole record. Continue?"))) {
309
                    if ($("#show_sru_fields").length && $("#show_sru_fields").val() == "" && !confirm(_("No SRU search field mappings have been defined. This means that all field searches will go through the whole record. Continue?"))) {
310
                        return false;
310
                        return false;
311
                    }
311
                    }
312
                    // copy show_sru_fields to hidden counterpart
312
                    // copy show_sru_fields to hidden counterpart
313
                    $('#sru_fields').val( $('#show_sru_fields').val() );
313
                    $("#sru_fields").val($("#show_sru_fields").val());
314
                    // enable recordtype to include field in post
314
                    // enable recordtype to include field in post
315
                    $('#recordtype').prop('disabled',false);
315
                    $("#recordtype").prop("disabled", false);
316
                });
316
                });
317
                $("#servername").on("blur",function(){
317
                $("#servername").on("blur", function () {
318
                    toUC(this);
318
                    toUC(this);
319
                });
319
                });
320
                $("#modify_sru_fields").on("click",function(){
320
                $("#modify_sru_fields").on("click", function () {
321
                    ModMapping();
321
                    ModMapping();
322
                });
322
                });
323
            });
323
            });
324
            function ModMapping () {
324
            function ModMapping() {
325
                var map= $('#show_sru_fields').val();
325
                var map = $("#show_sru_fields").val();
326
                var type= $('#recordtype').val();
326
                var type = $("#recordtype").val();
327
                window.open('/cgi-bin/koha/admin/sru_modmapping.pl?mapping='+map + '&type=' + type,'popup','width=800,height=400,resizable=yes,toolbar=false,scrollbars=yes,top');
327
                window.open("/cgi-bin/koha/admin/sru_modmapping.pl?mapping=" + map + "&type=" + type, "popup", "width=800,height=400,resizable=yes,toolbar=false,scrollbars=yes,top");
328
            }
328
            }
329
        </script>
329
        </script>
330
    [% ELSE %]
330
    [% ELSE %]
331
        <script>
331
        <script>
332
            $(document).ready(function() {
332
            $(document).ready(function () {
333
                $("#serverst").kohaTable({
333
                $("#serverst").kohaTable({
334
                    pagingType: "full",
334
                    pagingType: "full",
335
                });
335
                });
336
                $("#serverst").on("click", ".delete", function(e) {
336
                $("#serverst").on("click", ".delete", function (e) {
337
                    var servername = $(this).data("servername");
337
                    var servername = $(this).data("servername");
338
                    let formid = $(this).data("formid");
338
                    let formid = $(this).data("formid");
339
                    if( confirm( _("Are you sure you want to delete server %s?").format(servername) ) ) {
339
                    if (confirm(_("Are you sure you want to delete server %s?").format(servername))) {
340
                        $('#'+formid).submit();
340
                        $("#" + formid).submit();
341
                        return false;
341
                        return false;
342
                    } else {
342
                    } else {
343
                        e.preventDefault();
343
                        e.preventDefault();
344
- 

Return to bug 41564