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

(-)a/koha-tmpl/intranet-tmpl/prog/en/modules/tools/letter.tt (-207 / +17 lines)
Lines 5-10 Link Here
5
<title>Koha &rsaquo; Tools &rsaquo; Notices[% IF ( add_form or copy_form ) %][% IF ( modify ) %] &rsaquo; Modify notice[% ELSE %] &rsaquo; Add notice[% END %][% END %][% IF ( add_validate or copy_validate) %] &rsaquo; Notice added[% END %][% IF ( delete_confirm ) %] &rsaquo; Confirm deletion[% END %]</title>
5
<title>Koha &rsaquo; Tools &rsaquo; Notices[% IF ( add_form or copy_form ) %][% IF ( modify ) %] &rsaquo; Modify notice[% ELSE %] &rsaquo; Add notice[% END %][% END %][% IF ( add_validate or copy_validate) %] &rsaquo; Notice added[% END %][% IF ( delete_confirm ) %] &rsaquo; Confirm deletion[% END %]</title>
6
[% INCLUDE 'doc-head-close.inc' %]
6
[% INCLUDE 'doc-head-close.inc' %]
7
<link rel="stylesheet" type="text/css" href="[% interface %]/[% theme %]/css/datatables_[% KOHA_VERSION %].css" />
7
<link rel="stylesheet" type="text/css" href="[% interface %]/[% theme %]/css/datatables_[% KOHA_VERSION %].css" />
8
<style type="text/css">#preview_template .modal-dialog { width : 80%; } .spinner { display: none; } @media (max-width: 767px) { #preview_template { margin: 0; width : auto; } }</style>
8
</head>
9
</head>
9
10
10
<body id="tools_letter" class="tools">
11
<body id="tools_letter" class="tools">
Lines 445-657 Link Here
445
    [% INCLUDE 'datatables.inc' %]
446
    [% INCLUDE 'datatables.inc' %]
446
    <script type="text/javascript" src="[% interface %]/lib/jquery/plugins/jquery.fixFloat_[% KOHA_VERSION %].js"></script>
447
    <script type="text/javascript" src="[% interface %]/lib/jquery/plugins/jquery.fixFloat_[% KOHA_VERSION %].js"></script>
447
    <script type="text/javascript" src="[% interface %]/lib/jquery/plugins/jquery.insertatcaret_[% KOHA_VERSION %].js"></script>
448
    <script type="text/javascript" src="[% interface %]/lib/jquery/plugins/jquery.insertatcaret_[% KOHA_VERSION %].js"></script>
448
    <script type="text/javascript">
449
    <script>
449
        $(document).ready(function() {
450
        var no_op_set = '[% no_op_set %]';
450
            [% IF add_form or copy_form %]
451
        var interface = '[% interface %]';
451
                $('#toolbar').fixFloat();
452
        var theme = '[% theme %]';
452
            [% END %]
453
        var add_form = '[% add_form %]';
453
            $("#lettert:has(tbody tr)").dataTable($.extend(true, {}, dataTablesDefaults, {
454
        var copy_form = '[% copy_form %]';
454
                "sDom": 't',
455
        var code = '[% code %]';
455
                "aoColumnDefs": [
456
        var new_lettercode = '[% new_lettercode %]';
456
                    { "bSortable": false, "bSearchable": false, 'aTargets': [ 'nosort' ] }
457
        var new_branchcode = '[% new_branchcode %]';
457
                ],
458
        var MSG_CODE_EXISTS = _("A default letter with the code '%s' already exists.");
458
                "bPaginate": false
459
        var MSG_CODE_EXISTS_FOR_LIBRARY = _("A letter with the code '%s' already exists for '%s'.");
459
            }));
460
        var MSG_EMPTY_TITLE_AND_CONTENT = _("Please specify title and content for %s");
460
            [% IF no_op_set %]
461
        var MSG_EMPTY_TEMPLATES = _("Please fill at least one template.");
461
                $('#branch').change(function() {
462
        var MSG_LOADING = _("Loading");
462
                    $('#op').val("");
463
     </script>
463
                    $('#selectlibrary').submit();
464
    <script type="text/javascript" src="[% interface %]/[% theme %]/js/letter_[% KOHA_VERSION %].js"></script>
464
                });
465
                $('#newnotice').click(function() {
466
                    $('#op').val("add_form");
467
                    return true;
468
                });
469
            [% END %]
470
471
            $("#newmodule").on("change",function(){
472
                if( $("#branch").val() == ""){
473
                    var branchcode = "*";
474
                } else {
475
                    var branchcode = $("#branch").val();
476
                }
477
                window.location.href = "/cgi-bin/koha/tools/letter.pl?op=add_form&module=" + $(this).val() + "&branchcode=" + branchcode;
478
            });
479
480
            $("#submit_form").click( function(event) {
481
                event.preventDefault();
482
                var at_least_one_exists = 0;
483
                var are_valid = 1;
484
                $("fieldset.mtt").each( function(){
485
                    var title = $(this).find('input[name="title"]').val();
486
                    var content = $(this).find('textarea[name="content"]').val();
487
                    if (
488
                            ( title.length == 0 && content.length > 0 )
489
                         || ( title.length > 0 && content.length == 0 )
490
                    ) {
491
                        var mtt = $(this).find('input[name="message_transport_type"]').val();
492
                        var msg = _("Please specify title and content for %s");
493
                        msg = msg.replace( "%s", mtt );
494
                        at_least_one_exists = 1;
495
                        alert(msg);
496
                        return are_valid = false;
497
                    } else if ( title.length > 0 && content.length > 0 ) {
498
                        at_least_one_exists = 1;
499
                    }
500
                } );
501
                if ( ! at_least_one_exists ) {
502
                    alert( _("Please fill at least one template.") );
503
                    return false;
504
                }
505
                if ( ! are_valid ) {
506
                    return false;
507
                }
508
509
                // Test if code already exists in DB
510
                var new_lettercode = $("#code").val();
511
                var new_branchcode = $("#branch").val();
512
                [% IF ( add_form and code ) # IF edit %]
513
                    if ( new_lettercode != '[% code %]' ) {
514
                [% END %]
515
                    $.ajax({
516
                        data: { code: new_lettercode, branchcode: new_branchcode },
517
                        type: 'GET',
518
                        url: '/cgi-bin/koha/svc/letters/get/',
519
                        success: function (data) {
520
                             if ( data.letters.length > 0 ) {
521
                                 if( new_branchcode == '' ) {
522
                                     alert( _("A default letter with the code '%s' already exists.").format(new_lettercode) );
523
                                 } else {
524
                                     alert( _("A letter with the code '%s' already exists for '%s'.").format(new_lettercode, new_branchcode) );
525
                                 }
526
                                 return false;
527
                             } else {
528
                                 $("#add_notice").submit();
529
                             }
530
                        },
531
                    });
532
                [% IF ( add_form and code ) %]
533
                    } else {
534
                        $("#add_notice").submit();
535
                    }
536
                [% END %]
537
            });
538
539
            var sms_limit = 160;
540
            $(".content_sms").on("keyup", function(){
541
                var length = $(this).val().length;
542
                var sms_counter = ("#sms_counter_" + $(this).data('lang'));
543
                $(sms_counter).html(length + "/" + sms_limit + _(" characters"));
544
                if ( length  > sms_limit ) {
545
                    $(sms_counter).css("color", "red");
546
                } else {
547
                    $(sms_counter).css("color", "black");
548
                }
549
            });
550
            $( ".transport-types" ).accordion({ collapsible: true, active:false, animate: 200 });
551
            $(".insert").on("click",function(){
552
                var containerid = $(this).data("containerid");
553
                insertValueQuery( containerid );
554
            })
555
556
            $("#tabs").tabs();
557
558
            $("#saveandcontinue").on("click",function(e){
559
                e.preventDefault();
560
                $("#redirect").val("just_save");
561
                $("#submit_form").click();
562
            });
563
564
            $("body").on("click", ".preview_template", function(e){
565
                e.preventDefault();
566
                var mtt = $(this).data("mtt");
567
                var lang = $(this).data("lang");
568
569
                var code = $("#code").val();
570
                var content = $("#content_"+mtt+"_"+lang).val();
571
                var title = $("#title_"+mtt+"_"+lang).val();
572
573
                var is_html = $("#is_html_"+mtt+"_"+lang).val();
574
                var page = $(this).attr("href");
575
                var data_preview = $("#data_preview").val();
576
                page += '?code='+encodeURIComponent(code);
577
                page += '&title='+encodeURIComponent(title);
578
                page += '&content='+encodeURIComponent(content);
579
                page += '&data_preview='+encodeURIComponent(data_preview);
580
                page += '&is_html='+encodeURIComponent(is_html);
581
                $("#preview_template .modal-body").load(page);
582
                $('#preview_template').modal('show');
583
                $("#preview_template_button").attr("href", "/cgi-bin/koha/svc/letters/convert?code="+code+"&mtt="+mtt+"&lang="+lang);
584
            });
585
            $("#preview_template").on("hidden", function(){
586
                $("#preview_template_label").html("");
587
                $("#preview_template .modal-body").html("<div id=\"loading\"><img src=\"[% interface %]/[% theme %]/img/spinner-small.gif\" alt=\"\" /> "+_("Loading")+"</div>");
588
            });
589
            $("body").on("click", "#convert_template", function(e){
590
                e.preventDefault();
591
                var mtt = $(this).data("mtt");
592
                var lang = $(this).data("lang");
593
594
                var code = $("#code").val();
595
                var content = $("#content_"+mtt+"_"+lang).val();
596
                var title = $("#title_"+mtt+"_"+lang).val();
597
598
                var is_html = $("#is_html_"+mtt+"_"+lang).val();
599
                var page = $(this).attr("href");
600
                var data_preview = $("#data_preview").val();
601
                page += '?code='+encodeURIComponent(code);
602
                page += '&title='+encodeURIComponent(title);
603
                page += '&content='+encodeURIComponent(content);
604
                page += '&data_preview='+encodeURIComponent(data_preview);
605
                page += '&is_html='+encodeURIComponent(is_html);
606
                $("#preview_template .modal-body").load(page + " div");
607
                $('#preview_template').modal('show');
608
                $("#preview_template_button").attr("href", "/cgi-bin/koha/svc/letters/convert?code="+code+"&branchcode="+branchcode+"&mtt="+mtt+"&lang="+lang);
609
            });
610
            $("#convert_template").on("hidden", function(){
611
                $("#convert_template_label").html("");
612
                $("#convert_template .modal-body").html("<div id=\"loading\"><img src=\"[% interface %]/[% theme %]/img/spinner-small.gif\" alt=\"\" /> "+_("Loading")+"</div>");
613
            });
614
615
        });
616
        [% IF add_form or copy_form %]
617
            function cancel(f) {
618
                $('#op').val("");
619
                f.method = "get";
620
                f.submit();
621
            }
622
623
            function isNotNull(f,noalert) {
624
              if (f.value.length ==0) {
625
                  return false;
626
              }
627
              return true;
628
            }
629
630
            function isNum(v,maybenull) {
631
                var n = new Number(v.value);
632
                if (isNaN(n)) {
633
                    return false;
634
                }
635
                if (maybenull==0 && v.value==''){
636
                  return false;
637
                }
638
                return true;
639
            }
640
            function insertValueQuery(containerid) {
641
                var fieldset = $("#" + containerid);
642
                var myQuery = $(fieldset).find('textarea[name="content"]');
643
                var myListBox = $(fieldset).find('select[name="SQLfieldname"]');
644
645
                if($(myListBox).find('option').length > 0) {
646
                    $(myListBox).find('option').each( function (){
647
                        if ( $(this).attr('selected') && $(this).val().length > 0 ) {
648
                            $(myQuery).insertAtCaret("<<" + $(this).val() + ">>");
649
                        }
650
                    });
651
                }
652
            }
653
        [% END %]
654
    </script>
655
[% END %]
465
[% END %]
656
466
657
[% INCLUDE 'intranet-bottom.inc' %]
467
[% INCLUDE 'intranet-bottom.inc' %]
(-)a/koha-tmpl/intranet-tmpl/prog/en/modules/tools/preview_letter.tt (-18 / +38 lines)
Lines 29-55 Link Here
29
            [% END %]
29
            [% END %]
30
30
31
            [% IF rendered_message %]
31
            [% IF rendered_message %]
32
                <fieldset class="brief">
32
                <div class="yui-g">
33
                    <legend>Original version</legend>
33
                    <div class="yui-u first">
34
                    <pre>[% original_content | html %]</pre>
34
                        <h3>Original version</h3>
35
                </fieldset>
35
                        <span style="font-family:monospace">
36
36
                            [% FILTER html_line_break %]
37
                <fieldset class="brief">
37
                                [% original_content | html %]
38
                    <legend>Rendered message:</legend>
38
                            [% END %]
39
                    <pre>[% rendered_message.content | html %]</pre>
39
                        </span>
40
                </fieldset>
40
                    </div>
41
                    <div class="yui-u">
42
                        <h3>Original message, rendered:</h3>
43
                        <span style="font-family:monospace">
44
                            [% FILTER html_line_break %]
45
                                [% rendered_message.content | html %]
46
                            [% END %]
47
                        </span>
48
                    </div>
49
                </div>
41
            [% END %]
50
            [% END %]
42
51
43
            [% IF rendered_tt_message %]
44
                <fieldset class="brief">
45
                    <legend>Converted version</legend>
46
                    <pre>[% tt_content | html %]</pre>
47
                </fieldset>
48
52
49
                <fieldset class="brief">
53
            [% IF rendered_tt_message %]
50
                    <legend>Rendered message:</legend>
54
            <hr />
51
                    <pre>[% rendered_tt_message.content | html %]</pre>
55
                <div class="yui-g">
52
                </fieldset>
56
                    <div class="yui-u first">
57
                        <h3>Converted version</h3>
58
                        <span style="font-family:monospace">
59
                            [% FILTER html_line_break %]
60
                                [% tt_content | html %]
61
                            [% END %]
62
                        </span>
63
                    </div>
64
                    <div class="yui-u">
65
                        <h3>Converted message, rendered:</h3>
66
                        <span style="font-family:monospace">
67
                            [% FILTER html_line_break %]
68
                                [% rendered_tt_message.content | html %]
69
                            [% END %]
70
                        </span>
71
                    </div>
72
                </div>
53
            [% END %]
73
            [% END %]
54
        </div>
74
        </div>
55
75
(-)a/koha-tmpl/intranet-tmpl/prog/js/letter.js (-1 / +183 lines)
Line 0 Link Here
0
- 
1
/* Variables defined in letter.tt: */
2
/* global _ module add_form copy_form dataTablesDefaults no_op_set MSG_EMPTY_TITLE_AND_CONTENT MSG_EMPTY_TEMPLATES code MSG_CODE_EXISTS MSG_CODE_EXISTS_FOR_LIBRARY MSG_DT_LOADING_RECORDS interface theme */
3
4
var modal_loading = "<div id=\"loading\"><img src=\"" + interface + "/" + theme + "/img/spinner-small.gif\" alt=\"\" /> "+ MSG_DT_LOADING_RECORDS +"</div>";
5
6
var editing = 0;
7
if( add_form == 1 && code !== '' ){
8
    editing = 1;
9
}
10
11
function checkCodes( new_lettercode, new_branchcode ){
12
    $(".spinner").show();
13
    return $.ajax({
14
        data: { code: new_lettercode, branchcode: new_branchcode },
15
        type: 'GET',
16
        url: '/cgi-bin/koha/svc/letters/get/',
17
        async: !1,
18
        success: function (data) {
19
            if ( data.letters.length > 0 ) {
20
                if( new_branchcode === '' ) {
21
                    alert( MSG_CODE_EXISTS.format(new_lettercode));
22
                } else {
23
                    alert( MSG_CODE_EXISTS_FOR_LIBRARY.format(new_lettercode, new_branchcode) );
24
                }
25
                $(".spinner").hide();
26
            } else {
27
                $(".spinner").hide();
28
            }
29
        }
30
    });
31
}
32
33
$(document).ready(function() {
34
    if( add_form || copy_form ){
35
        $('#toolbar').fixFloat();
36
    }
37
38
    $("#lettert:has(tbody tr)").dataTable($.extend(true, {}, dataTablesDefaults, {
39
        "sDom": 't',
40
        "aoColumnDefs": [
41
            { "bSortable": false, "bSearchable": false, 'aTargets': [ 'nosort' ] }
42
        ],
43
        "bPaginate": false
44
    }));
45
46
    if( no_op_set ){
47
        $('#branch').change(function() {
48
            $('#op').val("");
49
            $('#selectlibrary').submit();
50
        });
51
        $('#newnotice').click(function() {
52
            $('#op').val("add_form");
53
            return true;
54
        });
55
    }
56
57
    $("#newmodule").on("change",function(){
58
        var branchcode;
59
        if( $("#branch").val() === ""){
60
            branchcode = "*";
61
        } else {
62
            branchcode = $("#branch").val();
63
        }
64
        window.location.href = "/cgi-bin/koha/tools/letter.pl?op=add_form&module=" + $(this).val() + "&branchcode=" + branchcode;
65
    });
66
67
    $("#submit_form").on("click",function(){
68
        $("#add_notice").submit();
69
    });
70
71
    $("#add_notice").validate({
72
        submitHandler: function(form){
73
            var at_least_one_exists = 0;
74
            var are_valid = 1;
75
            $("fieldset.mtt").each( function(){
76
                var title = $(this).find('input[name="title"]').val();
77
                var content = $(this).find('textarea[name="content"]').val();
78
                if (
79
                    ( title.length === 0 && content.length > 0 ) || ( title.length > 0 && content.length === 0 )
80
                ) {
81
                    var mtt = $(this).find('input[name="message_transport_type"]').val();
82
                    at_least_one_exists = 1; // Only one template has to be filled in for form to be valid
83
                    alert( MSG_EMPTY_TITLE_AND_CONTENT.format( mtt ) );
84
                    are_valid = 0;
85
                } else if ( title.length > 0 && content.length > 0 ) {
86
                    at_least_one_exists = 1;
87
                }
88
            });
89
90
            if ( ! at_least_one_exists ) {
91
                // No templates were filled out
92
                alert( MSG_EMPTY_TEMPLATES );
93
                return false;
94
            }
95
96
            if ( ! are_valid ){
97
                return false;
98
            }
99
100
            // Test if code already exists in DB
101
            if( editing == 1 ){ // This is an edit operation
102
                // We don't need to check for an existing Code
103
            } else {
104
                var new_lettercode = $("#code").val();
105
                var new_branchcode = $("#branch").val();
106
                var code_check = checkCodes( new_lettercode, new_branchcode );
107
                if( code_check.responseJSON.letters.length > 0 ){
108
                    return false;
109
                }
110
            }
111
            form.submit();
112
        }
113
    });
114
115
    var sms_limit = 160;
116
    $(".content_sms").on("keyup", function(){
117
        var length = $(this).val().length;
118
        var sms_counter = ("#sms_counter_" + $(this).data('lang'));
119
        $(sms_counter).html(length + "/" + sms_limit + _(" characters"));
120
        if ( length  > sms_limit ) {
121
            $(sms_counter).css("color", "red");
122
        } else {
123
            $(sms_counter).css("color", "black");
124
        }
125
    });
126
127
    $( ".transport-types" ).accordion({ collapsible: true, active:false, animate: 200 });
128
129
    $(".insert").on("click",function(){
130
        var containerid = $(this).data("containerid");
131
        insertValueQuery( containerid );
132
    });
133
134
    $("#saveandcontinue").on("click",function(e){
135
        e.preventDefault();
136
        $("#redirect").val("just_save");
137
        $("#submit_form").click();
138
    });
139
140
    $("#tabs").tabs();
141
142
    $("body").on("click", ".preview_template", function(e){
143
        e.preventDefault();
144
        var mtt = $(this).data("mtt");
145
        var lang = $(this).data("lang");
146
147
        var code = $("#code").val();
148
        var content = $("#content_"+mtt+"_"+lang).val();
149
        var title = $("#title_"+mtt+"_"+lang).val();
150
151
        var is_html = $("#is_html_"+mtt+"_"+lang).val();
152
        var page = $(this).attr("href");
153
        var data_preview = $("#data_preview").val();
154
        page += '?code='+encodeURIComponent(code);
155
        page += '&title='+encodeURIComponent(title);
156
        page += '&content='+encodeURIComponent(content);
157
        page += '&data_preview='+encodeURIComponent(data_preview);
158
        page += '&is_html='+encodeURIComponent(is_html);
159
        $("#preview_template .modal-body").load(page + " #main");
160
        $('#preview_template').modal('show');
161
        $("#preview_template_button").attr("href", "/cgi-bin/koha/svc/letters/convert?module="+module+"&code="+code+"&mtt="+mtt+"&lang="+lang);
162
    });
163
164
    $("#preview_template").on("hidden.bs.modal", function(){
165
        $("#preview_template_label").html("");
166
        $("#preview_template .modal-body").html( modal_loading );
167
    });
168
169
    function insertValueQuery(containerid) {
170
        var fieldset = $("#" + containerid);
171
        var myQuery = $(fieldset).find('textarea[name="content"]');
172
        var myListBox = $(fieldset).find('select[name="SQLfieldname"]');
173
174
        if($(myListBox).find('option').length > 0) {
175
            $(myListBox).find('option').each( function (){
176
                if ( $(this).attr('selected') && $(this).val().length > 0 ) {
177
                    $(myQuery).insertAtCaret("<<" + $(this).val() + ">>");
178
                }
179
            });
180
        }
181
    }
182
183
});

Return to bug 18007