Bug 29041: (follow-up) Expand the scope of changes
[koha.git] / koha-tmpl / intranet-tmpl / prog / en / modules / tools / additional-contents.tt
1 [% USE raw %]
2 [% USE Asset %]
3 [% USE Koha %]
4 [% USE KohaDates %]
5 [% USE Branches %]
6 [% SET footerjs = 1 %]
7 [% INCLUDE 'doc-head-open.inc' %]
8 <title>Additional contents &rsaquo; Tools &rsaquo; Koha</title>
9 [% INCLUDE 'doc-head-close.inc' %]
10 [% UNLESS ( wysiwyg ) %]
11     [% Asset.css("lib/codemirror/codemirror.css") | $raw %]
12     [% Asset.css("lib/codemirror/lint.min.css") | $raw %]
13     <style>
14         .CodeMirror {
15             resize: vertical;
16             z-index: 0;
17         }
18     </style>
19 [% END %]
20 </head>
21
22 <body id="tools_additional-contents" class="tools">
23 [% INCLUDE 'header.inc' %]
24 [% INCLUDE 'cat-search.inc' %]
25
26 <nav id="breadcrumbs" aria-label="Breadcrumb" class="breadcrumb">
27     <ol>
28         <li>
29             <a href="/cgi-bin/koha/mainpage.pl">Home</a>
30         </li>
31         <li>
32             <a href="/cgi-bin/koha/tools/tools-home.pl">Tools</a>
33         </li>
34
35             <li>
36                 <a href="/cgi-bin/koha/tools/additional-contents.pl">Additional contents</a>
37             </li>
38         [% IF op == 'add_form' %]
39             <li>
40                 [% IF category == 'news' %]
41                     <a href="/cgi-bin/koha/tools/additional-contents.pl?category=news">News</a>
42                 [% ELSE %]
43                     <a href="/cgi-bin/koha/tools/additional-contents.pl?category=html_customizations">HTML customizations</a>
44                 [% END %]
45             </li>
46             <li>
47                 <a href="#" aria-current="page">
48                     [% IF additional_content.idnew %]
49                         Modify additional content
50                     [% ELSE %]
51                         Add additional content
52                     [% END %]
53                 </a>
54             </li>
55         [% ELSE %]
56             <li>
57                 <a href="#" aria-current="page">
58                     [% IF category == 'news' %]
59                         News
60                     [% ELSE %]
61                         HTML customizations
62                     [% END %]
63                 </a>
64             </li>
65         [% END %]
66
67     </ol>
68 </nav>
69
70 [% IF op == 'add_form' %]
71 <div class="main container-fluid">
72     <div class="row">
73         <div class="col-md-10 col-md-offset-1 col-lg-8 col-lg-offset-2">
74 [% ELSE %]
75 <div class="main container-fluid">
76     <div class="row">
77         <div class="col-sm-10 col-sm-push-2">
78 [% END %]
79
80 <main>
81
82     [% FOR m IN messages %]
83         <div class="dialog [% m.type | html %]">
84             [% SWITCH m.code %]
85             [% CASE 'error_on_update' %]
86                 An error occurred when updating this content. Perhaps it already exists.
87             [% CASE 'error_on_insert' %]
88                 An error occurred when adding this content. Check the logs
89             [% CASE 'error_on_delete' %]
90                 An error occurred when deleting this content. Check the logs.
91             [% CASE 'success_on_update' %]
92                 Content updated successfully.
93             [% CASE 'success_on_insert' %]
94                 Content added successfully.
95             [% CASE 'success_on_delete' %]
96                 Content deleted successfully.
97             [% CASE %]
98                 [% m.code | html %]
99             [% END %]
100         </div>
101     [% END %]
102
103     [% IF op == 'add_form' %]
104         [% PROCESS add_form %]
105     [% ELSE %]
106         [% PROCESS list %]
107     [% END %]
108
109 </main>
110
111         [% IF op != 'add_form' %]
112             </div> <!-- /.col-sm-10.col-sm-push-2 -->
113
114             <div class="col-sm-2 col-sm-pull-10">
115                 <aside>
116
117                     <div id="news-filter">
118                         <form action="/cgi-bin/koha/tools/additional-contents.pl" method="get">
119                             <h4>Filter</h4>
120                             <fieldset class="brief">
121                                 <ol>
122                                     <li>
123                                         <label for="news_keyword">Keyword:</label>
124                                         <input type="text" name="news_keyword" id="news_keyword" />
125                                     </li>
126                                     <li>
127                                         <label for="news_display_location">Display location:</label>
128                                         <select name="news_display_location" id="news_display_location">
129                                             <option value="">All</option>
130                                             [% PROCESS locations_options category => category %]
131                                         </select>
132                                     </li>
133                                     <li>
134                                         <label for="news_library">Library: </label>
135                                         <select id="news_library" name="news_library">
136                                             <option value=""></option>
137                                             <option value="">All libraries</option>
138                                             [% PROCESS options_for_libraries libraries => Branches.all( selected => branchcode, unfiltered => 1, ) %]
139                                         </select>
140                                     </li>
141                                     <li>
142                                         <label>
143                                             <input type="checkbox" name="show_expired" id="show_expired" /> Show expired
144                                         </label>
145                                     </li>
146                                 </ol>
147                             </fieldset>
148                         </form>
149                     </div>
150
151                     [% INCLUDE 'tools-menu.inc' %]
152                 </aside>
153             </div> <!-- /.col-sm-2.col-sm-pull-10 -->
154         [% END %]
155     </div> <!-- /.row -->
156 </div> <!-- /.main.container-fluid -->
157
158 [% BLOCK add_form %]
159     [% IF additional_content %]
160         <h1>Modify an additional content</h1>
161     [% ELSE %]
162         <h1>New additional content ([% IF category == 'news' %]News[% ELSE %]HTML customizations[% END %])</h1>
163     [% END %]
164
165     <div id="toolbar" class="btn-toolbar">
166         <div class="btn-group">
167             <button class="btn btn-default" id="submit_form"><i class="fa fa-save"></i> Save</button>
168         </div>
169         <a class="btn btn-default cancel" href="/cgi-bin/koha/tools/additional-contents.pl"><i class="fa fa-remove"></i> Cancel</a>
170     </div>
171
172     <form id="add_additional_content" method="post" action="/cgi-bin/koha/tools/additional-contents.pl" class="validate">
173         <input type="hidden" name="op" value="add_validate" />
174         <input type="hidden" name="id" value="[% additional_content.idnew | html %]" />
175         <input type="hidden" name="category" value="[% category | html %]" />
176         <fieldset class="rows">
177             <ol>
178                 <li>
179                     [% IF additional_content %]
180                         <span class="label">Code:</span> [% additional_content.code | html %]
181                         <input type="hidden" id="code" name="code" value="[% additional_content.code | html %]" />
182                     [% ELSE %]
183                         <label for="code" class="required">Code:</label>
184                         <input type="text" id="code" name="code" size="20" maxlength="20" value="" required="required"/>
185                         <span class="required">Required</span>
186                     [% END %]
187                 </li>
188                 <li>
189                     <label for="location">Display location:</label>
190                     <select id="location" name="location">
191                         [% PROCESS locations_options location => additional_content.location %]
192                     </select>
193                 </li>
194                 <li>
195                     <label for="branchcode">Library: </label>
196                     <select id="branchcode" name="branchcode">
197                         [% IF additional_content.branchcode == '' %]
198                             <option value="" selected="selected">All libraries</option>
199                         [% ELSE %]
200                             <option value="">All libraries</option>
201                         [% END %]
202                         [% PROCESS options_for_libraries libraries => Branches.all( selected => additional_content.branchcode, unfiltered => 1, ) %]
203                     </select>
204                 </li>
205                 [% UNLESS languages.size %]
206                     <li>
207                         <label for="title" class="required">Title: </label>
208                         <input id="title" size="30" type="text" name="title" value="[% additional_content.title | html %]" required="required" class="required" /> <span class="required">Required</span>
209                     </li>
210                 [% END %]
211                 <li>
212                     <label for="from">Publication date: </label>
213                     <input id="from" type="text" name="published_on" size="15" value="[% additional_content.published_on | html %]" class="flatpickrfrom" />
214                     <div class="hint">[% INCLUDE 'date-format.inc' %]</div>
215                 </li>
216                 <li>
217                     <label for="to">Expiration date: </label>
218                     <input id="to" type="text" name="expirationdate" size="15" value="[% additional_content.expirationdate | html %]" class="flatpickrto" />
219                     <div class="hint">
220                         [% INCLUDE 'date-format.inc' %]
221                         [% IF category == 'news' %]
222                             <br>News will still be accessible by direct URL if expired.
223                         [% END %]
224                     </div>
225                 </li>
226                 <li>
227                     <label for="number">Appear in position: </label>
228                     [% IF ( additional_content.number ) %]
229                         <input id="number" size="3" name="number" type="text" value="[% additional_content.number | html %]" />
230                     [% ELSE %]
231                         <input id="number" size="3" name="number" type="text" />
232                     [% END %]
233                 </li>
234             </ol>
235         </fieldset>
236
237         [% IF languages.size %]
238             <div style="clear:both"></div>
239             <div id="tabs">
240                 <ul>
241                     [% FOR language IN languages %]
242                         [% IF language.lang == 'default' %]
243                             <li><a href="#lang_default">Default</a></li>
244                         [% ELSE %]
245                             <li><a href="#lang_[% language.lang | uri %]">[% language.description | html %]</a></li>
246                         [% END %]
247                     [% END %]
248                 </ul>
249
250                 [% FOR language IN languages %]
251                     <div id="lang_[% language.lang | uri %]" class="lang" data-lang="[% language.description | html %]">
252                         <div style="clear:both;">
253
254                             <fieldset>[%# FIXME We should remove list-style:none; and use class="rows" here but it does not work. Owen please help! %]
255                                 <ol>
256                                     <li style="list-style: none;">
257                                         <label for="title_[% language.lang | html %]">Title: </label>
258                                         <input id="title_[% language.lang| html %]" size="30" type="text" name="title" value="[% translated_contents.item(language.lang).title | html %]"></span>
259                                     </li>
260                                     <li style="list-style: none;">
261                                         <label for="content_[% language.lang | html %]">Content: </label>
262                                         <textarea name="content" id="content_[% language.lang | html %]"  cols="75" rows="10">[% translated_contents.item(language.lang).content | html %]</textarea>
263                                         <input type="hidden" name="lang" value="[% language.lang | html %]" />
264                                     </li>
265                                 </ol>
266                             </fieldset>
267                         </div>
268                     </div>
269                 [% END %]
270             </div>
271         [% ELSE %]
272             <div id="lang_default">
273                 <div style="clear:both;">
274                     <textarea name="content" id="content_default"  cols="75" rows="10">[% additional_content.content | html %]</textarea>
275                 </div>
276             </div>
277         [% END %]
278     </form>
279 [% END %]
280
281 [% BLOCK list %]
282
283     <div id="toolbar" class="btn-toolbar">
284         <a class="btn btn-default" id="newentry" href="/cgi-bin/koha/tools/additional-contents.pl?op=add_form&category=[% category | html %]"><i class="fa fa-plus"></i> New entry</a>
285     </div>
286
287     <h2>Additional contents ([% IF category == 'news' %]News[% ELSE %]HTML customizations[% END %])</h2>
288     [% IF category == 'news' %]
289         See <a href="/cgi-bin/koha/tools/additional-contents.pl?category=html_customizations">HTML customizations</a>
290     [% ELSE %]
291         See <a href="/cgi-bin/koha/tools/additional-contents.pl?category=news">News</a>
292     [% END %]
293
294     [% IF additional_contents.count %]
295         <form id="del_form" method="post" action="/cgi-bin/koha/tools/additional-contents.pl">
296             <table id="table_additional_contents">
297                 <thead>
298                     <tr>
299                         <th class="NoSort">&nbsp;</th>
300                         <th>Location</th>
301                         <th>Library</th>
302                         <th>Number</th>
303                         <th>Publication date</th>
304                         <th>Expiration date</th>
305                         <th class="anti-the">Title</th>
306                         <th>Author</th>
307                         <th class="anti-the">News</th>
308                         <th class="NoSort noExport">Actions</th>
309                     </tr>
310                 </thead>
311                 <tbody>
312                     [% FOREACH c IN additional_contents%]
313                         [% IF ( c.is_expired ) %]<tr class="expired">[% ELSE %]<tr>[% END %]
314                         <td>
315                             <input type="checkbox" name="ids" value="[% c.idnew | html %]" />
316                         </td>
317                         <td>
318                             [% IF c.category == 'news' %]
319                                 [% IF c.location == 'staff_and_opac' %]All
320                                 [% ELSIF c.location == 'staff_only' %]Librarian interface
321                                 [% ELSIF c.location == 'opac_only' %]OPAC
322                                 [% ELSIF c.location == 'slip' %]Slip
323                                 [% ELSE %]Unknown ('[% location | html %]')
324                                 [% END %]
325                             [% ELSE %]
326                                 [% c.location | html %]
327                             [% END %]
328                         </td>
329                         <td>
330                             [% IF ( c.branchcode == "" ) -%]
331                             All libraries
332                             [% ELSE %][% c.library.branchname | html %]
333                             [% END %]
334                         </td>
335                         <td>[% c.number | html %]</td>
336                         <td data-order="[% c.published_on | html %]">[% c.published_on | $KohaDates %]</td>
337                         <td data-order="[% c.expirationdate | html %]">[% c.expirationdate | $KohaDates %] [% IF ( c.is_expired ) %](<span class="expired">expired</span>)[% END %]</td>
338                         <td>[% c.title | html %]</td>
339                         <td>[% IF ( c.author) %][% INCLUDE 'patron-title.inc' patron=c.author %][% END %]</td>
340                         <td>
341                             <div class="btn-group">
342                                 <a class="preview_news btn btn-default btn-xs" data-number="[% loop.count | html %]"><i class="fa fa-eye" aria-hidden="true"></i> Preview content</a>
343                             </div>
344                             <div id="contentModal[% loop.count | html %]" class="modal" tabindex="-1" role="dialog" data-number="[% loop.count | html %]">
345                                 <div class="modal-dialog" role="document">
346                                     <div class="modal-content modal-lg">
347                                         <div class="modal-header">
348                                             <h5 class="modal-title">Preview of: "[% c.title | html %]"</h5>
349                                         </div>
350                                     <div class="modal-body">
351                                         [% c.content | $raw %]
352                                     </div>
353                                     <div class="modal-footer">
354                                         <button type="button" class="btn btn-secondary" data-dismiss="modal">Close</button>
355                                     </div>
356                                 </div>
357                             </div>
358                         </td>
359                         <td class="actions">
360                             [% IF ( wysiwyg ) %]
361                                 [% SET editmode = "wysiwyg" %]
362                             [% ELSE %]
363                                 [% SET editmode = "text" %]
364                             [% END %]
365                             <div class="btn-group dropup">
366                                 <a href="/cgi-bin/koha/tools/additional-contents.pl?op=add_form&amp;id=[% c.idnew | uri %]&editmode=[% editmode | uri %]" class="btn btn-default btn-xs"> <i class="fa fa-pencil"></i> Edit</a><button class="btn btn-default btn-xs dropdown-toggle" data-toggle="dropdown">
367                                     <span class="caret"></span>
368                                 </button>
369                                 <ul class="dropdown-menu pull-right">
370                                     <li>
371                                         [% IF ( wysiwyg ) %]
372                                             <a href="/cgi-bin/koha/tools/additional-contents.pl?op=add_form&amp;id=[% c.idnew | uri %]&editmode=text"><i class="fa fa-pencil"></i> Edit with text editor</a>
373                                         [% ELSE %]
374                                             <a href="/cgi-bin/koha/tools/additional-contents.pl?op=add_form&amp;id=[% c.idnew | uri %]&editmode=wysiwyg"><i class="fa fa-pencil"></i> Edit with WYSIWYG editor</a>
375                                         [% END %]
376                                     </li>
377                                 </ul>
378                             </div>
379                             <div class="btn-group">
380                                 <a href="#" class="delete_news btn btn-default btn-xs" data-idnew="[% c.idnew | html %]"><i class="fa fa-trash"></i> Delete</a>
381                             </div>
382                         </td>
383                     </tr>
384                     [% END %]
385                 </tbody>
386             </table>
387             <input type="hidden" name="op" value="delete_confirmed" />
388             <input type="hidden" name="category" value="[% category | html %]" />
389             <fieldset class="action"><input type="submit" class="button" value="Delete selected" /></fieldset>
390         </form>
391         <form action="/cgi-bin/koha/tools/additional-contents.pl" method="post" id="delete_single">
392             <input type="hidden" id="del_op" name="op" value="delete_confirmed" />
393             <input type="hidden" id="del_category" name="category" value="[% category | html %]" />
394             <input type="hidden" id="del_ids" name="ids" />
395         </form>
396     [% ELSE %]
397         <div class="dialog message">There are no additional contents.</div>
398     [% END %]
399 [% END %]
400
401 [% BLOCK locations_options %]
402     [% IF category == 'news' %]
403         [% IF location == "staff_and_opac" %]
404             <option value="staff_and_opac" selected="selected">Librarian and OPAC interfaces</option>
405         [% ELSE %]
406             <option value="staff_and_opac">Librarian and OPAC interfaces</option>
407         [% END %]
408
409         [% IF location == "staff_only" %]
410             <option value="staff_only" selected="selected">Librarian interface</option>
411         [% ELSE %]
412             <option value="staff_only">Librarian interface</option>
413         [% END %]
414
415         [% IF location == "opac_only" %]
416             <option value="opac_only" selected="selected">OPAC</option>
417         [% ELSE %]
418             <option value="opac_only">OPAC</option>
419         [% END %]
420
421         [% IF location == "slip" %]
422             <option value="slip" selected="selected">Slip</option>
423         [% ELSE %]
424             <option value="slip">Slip</option>
425         [% END %]
426     [% ELSE %]
427         [% FOREACH l IN [ 'OpacNavRight', 'opacheader', 'OpacCustomSearch', 'OpacMainUserBlock', 'opaccredits', 'OpacLoginInstructions', 'OpacSuggestionInstructions', 'ArticleRequestsDisclaimerText' ] %]
428             [% IF l == location %]
429                 <option value="[% l | html %]" selected="selected">[% l | html %]</option>
430             [% ELSE %]
431                 <option value="[% l | html %]">[% l | html %]</option>
432             [% END %]
433         [% END %]
434     [% END %]
435 [% END %]
436
437 [% MACRO jsinclude BLOCK %]
438     [% INCLUDE 'calendar.inc' %]
439     [% Asset.js("js/tools-menu.js") | $raw %]
440     [% Asset.js("lib/hc-sticky.js") | $raw %]
441     [% IF additional_contents.count %]
442         [% INCLUDE 'datatables.inc' %]
443         <script>
444             $('.preview_news').click( function() {
445                 modalNumber = $(this).attr('data-number');
446                 $('.modal[data-number="'+modalNumber+'"]').modal('show');
447             })
448             function Checkbox(){
449                 var form = document.getElementById('del_form');
450                 var inputs = form.getElementsByTagName('input');
451                 var checked = false;
452                 for (var i=0; i<inputs.length; i++) {
453                     if (inputs[i].type == 'checkbox' && inputs[i].name == 'ids') {
454                         checked = inputs[i].checked;
455                         if (checked) return true;
456                     }
457                 }
458             }
459
460             function filterDataTable( table, column, term ){
461                 if( column ){
462                     table.column( column ).search( term ).draw();
463                 } else {
464                     table.search( term ).draw();
465                 }
466                 clearFilter( term );
467             }
468
469             function clearFilter( term ){
470                 if( term == "" ){
471                     $(".dt_button_clear_filter").addClass("disabled");
472                 } else {
473                     $(".dt_button_clear_filter").removeClass("disabled");
474                 }
475             }
476
477             /* Custom table search configuration: If a table row
478                has an "expired" class, hide it UNLESS the
479                show_expired checkbox is checked */
480             $.fn.dataTable.ext.search.push(
481                 function( settings, searchData, index, rowData, counter ) {
482                     var row = $(settings.aoData[index].nTr);
483                     if( row.hasClass("expired") && !$("#show_expired").prop("checked") ){
484                         return false;
485                     } else {
486                         return true;
487                     }
488                 }
489             );
490
491             $(document).ready(function() {
492
493                 var table = $("#table_additional_contents").DataTable($.extend(true, {}, dataTablesDefaults, {
494                     "order": [[ 4, "desc" ]],
495                     "aoColumnDefs": [
496                         { "sortable": false, "searchable": false, 'targets': [ 'NoSort' ] },
497                         { "type": "anti-the", "targets": [ "anti-the" ] }
498                     ],
499                     "sPaginationType": "full_numbers"
500                 }));
501
502                 $("#del_form").on("click", ".delete_news", function(e){
503                     e.preventDefault();
504                     if( confirmDelete( _("Are you sure you want to delete this content? This cannot be undone.") ) ){
505                         $("#del_ids").val( $(this).data("idnew") );
506                         $("#delete_single").submit();
507                     }
508                 });
509
510                 $("#del_form").on("submit",function(){
511                     if ( Checkbox() ) {
512                         return confirmDelete( _("Are you sure you want to delete the selected content?") );
513                     } else {
514                         alert(_("Please select content to delete."));
515                         return false;
516                     }
517                 });
518
519                 $("#show_expired").on("change", function(){
520                     /* redraw the DataTable according to the custom search function */
521                     table.draw();
522                 });
523
524                 table.on( 'search.dt', function () {
525                     var term = table.search();
526                     $("#news_keyword").val( term );
527                 });
528
529                 $("#news_keyword").on("keyup", function(){
530                     var term = $(this).val();
531                     filterDataTable( table, null, term );
532                 });
533
534                 $("#news_display_location").on("change", function(){
535                     var term = $(this).val();
536                     filterDataTable( table, 1, term );
537                 });
538
539                 $("#news_library").on("change", function(){
540                     // Table must be filtered by the <option>'s text, not its value
541                     var opt = $(this).find("option:selected").text();
542                     filterDataTable( table, 2, opt );
543                 });
544
545                 $(".dt_button_clear_filter").on("click", function(){
546                     table.search('').columns().search('').draw();
547                     $("#news-filter select").each(function(){
548                         $(this).val("");
549                     });
550                 });
551             });
552         </script>
553     [% ELSE %]
554         <script>
555             $(document).ready(function() {
556                 $("#tabs").tabs();
557                 $("#add_additional_content").validate({
558                     submitHandler: function(form){
559                         if ( ! $("#title_default").val().length > 0 ) {
560                             alert(__("Please specify a title for 'Default'"));
561                             return false;
562                         }
563
564                         form.submit();
565                     }
566                 });
567
568                 $("#submit_form").on("click",function(){
569                     $("#add_additional_content").submit();
570                 });
571
572                 Sticky = $("#toolbar");
573                 Sticky.hcSticky({
574                     stickTo: ".main",
575                     stickyClass: "floating"
576                 });
577
578             });
579         </script>
580     [% END %]
581     [% UNLESS ( wysiwyg ) %]
582         [% Asset.js( "lib/codemirror/codemirror.min.js" ) | $raw %]
583         [% Asset.js( "lib/codemirror/xml.min.js" ) | $raw %]
584         [% Asset.js( "lib/codemirror/lint.min.js" ) | $raw %]
585         [% Asset.js( "lib/linters/htmlhint.min.js" ) | $raw %]
586         [% Asset.js( "lib/codemirror/html-lint.min.js" ) | $raw %]
587         <script>
588             var editor = CodeMirror.fromTextArea(document.getElementById('content'), {
589                 lineNumbers: true,
590                 lineWrapping: true,
591                 lint: true,
592                 mode: "text/html",
593                 gutters: ["CodeMirror-lint-markers"],
594                 viewportMargin: Infinity,
595             });
596         </script>
597     [% ELSE %]
598         [% Asset.js("lib/tiny_mce/tinymce.min.js") | $raw %]
599         [% INCLUDE 'str/tinymce_i18n.inc' %]
600         <script>
601             tinyMCE.init({
602                 verify_html: false,
603                 force_br_newlines : false,
604                 force_p_newlines : false,
605                 forced_root_block : '',
606                 branding : false,
607                 relative_urls : false,
608                 content_css : "[% interface | html %]/[% theme | html %]/css/tinymce.css",
609                 menubar : "file edit view insert format tools table",
610                 mode : "specific_textareas",
611                 plugins : "autoresize table hr link image charmap lists code emoticons",
612                 extended_valid_elements:"style,link[href|rel]",
613                 custom_elements:"style,link,~link",
614                 toolbar : [
615                     "formatselect | bold italic | cut copy paste | alignleft aligncenter alignright | outdent indent | image link unlink anchor cleanup hr",
616                     "table | bullist numlist | undo redo | removeformat | emoticons charmap | forecolor backcolor | code"
617                 ],
618             });
619         </script>
620     [% END # /UNLESS wysiwyg %]
621 [% END %]
622
623 [% INCLUDE 'intranet-bottom.inc' %]