Bug 34616: Add native bootstrap behaviour to default server dialog
[koha.git] / koha-tmpl / intranet-tmpl / prog / en / modules / admin / smtp_servers.tt
1 [% USE raw %]
2 [% USE Asset %]
3 [% PROCESS 'i18n.inc' %]
4 [% SET footerjs = 1 %]
5 [% INCLUDE 'doc-head-open.inc' %]
6 <title>[% FILTER collapse %]
7     [% IF op == 'add_form' %]
8         [% t("New SMTP server") | html %] &rsaquo;
9     [% ELSIF op == 'edit_form' %]
10         [% t("Edit SMTP server") | html %] &rsaquo;
11     [% END %]
12     [% t("SMTP servers") | html %] &rsaquo;
13     [% t("Administration") | html %] &rsaquo;
14     [% t("Koha") | html %]
15 [% END %]</title>
16 [% INCLUDE 'doc-head-close.inc' %]
17 </head>
18
19 <body id="admin_smtp_servers" class="admin">
20 [% WRAPPER 'header.inc' %]
21     [% INCLUDE 'prefs-admin-search.inc' %]
22 [% END %]
23
24 [% WRAPPER 'sub-header.inc' %]
25     [% WRAPPER breadcrumbs %]
26         [% WRAPPER breadcrumb_item %]
27             <a href="/cgi-bin/koha/admin/admin-home.pl">Administration</a>
28         [% END %]
29
30         [% IF op == 'add_form' || op == 'edit_form' %]
31             [% WRAPPER breadcrumb_item %]
32                 <a href="/cgi-bin/koha/admin/smtp_servers.pl">SMTP servers</a>
33             [% END %]
34         [% END %]
35
36         [% IF op == 'add_form' %]
37             [% WRAPPER breadcrumb_item bc_active= 1 %]
38                 <span>New</span>
39             [% END %]
40
41         [% ELSIF op == 'edit_form' %]
42             [% WRAPPER breadcrumb_item bc_active= 1 %]
43                 <span>Edit</span>
44             [% END %]
45
46         [% ELSE %]
47             [% WRAPPER breadcrumb_item bc_active= 1 %]
48                 <span>SMTP servers</span>
49             [% END %]
50         [% END %]
51     [% END #/ WRAPPER breadcrumbs %]
52 [% END #/ WRAPPER sub-header.inc %]
53
54 <div class="main container-fluid">
55     <div class="row">
56         <div class="col-sm-10 col-sm-push-2">
57             <main>
58
59 [% FOREACH m IN messages %]
60     <div class="dialog [% m.type | html %]" id="smtp_action_result_dialog">
61         [% SWITCH m.code %]
62         [% CASE 'error_on_update' %]
63             <span>An error occurred trying to open the server for editing. The passed ID is invalid.</span>
64         [% CASE 'error_on_insert' %]
65             <span>An error occurred when adding the server. The library already has an SMTP server set.</span>
66         [% CASE 'success_on_update' %]
67             <span>Server updated successfully.</span>
68         [% CASE 'success_on_insert' %]
69             <span>Server added successfully.</span>
70         [% CASE %]
71             <span>[% m.code | html %]</span>
72         [% END %]
73     </div>
74 [% END %]
75
76     <div class="dialog message" id="smtp_delete_success" style="display: none;"></div>
77     <div class="dialog alert"   id="smtp_delete_error"   style="display: none;"></div>
78
79 [% IF op == 'add_form' %]
80     <h1>New SMTP server</h1>
81     <form action="/cgi-bin/koha/admin/smtp_servers.pl" id="add" name="add" class="validated" method="post">
82         <input type="hidden" name="op" value="add" />
83         <fieldset class="rows">
84             <ol>
85                 <li>
86                     <label for="smtp_name" class="required">Name: </label>
87                     <input type="text" name="smtp_name" id="smtp_name" size="60" class="required focus" required="required" />
88                     <span class="required">Required</span>
89                 </li>
90             </ol>
91         </fieldset>
92
93         <fieldset class="rows">
94             <ol>
95                 <li>
96                     <label for="smtp_host" class="required">Host: </label>
97                     <input type="text" name="smtp_host" id="smtp_host" size="60" class="required"/>
98                     <span class="required">Required</span>
99                 </li>
100                 <li>
101                     <label for="smtp_port" class="required">Port: </label>
102                     <input type="text" inputmode="numeric" pattern="[0-9]*" value="25" name="smtp_port" id="smtp_port" size="20" class="required"/>
103                     <span class="required">Required</span>
104                 </li>
105                 <li>
106                     <label for="smtp_timeout">Timeout (seconds): </label>
107                     <input type="text" inputmode="numeric" pattern="[0-9]*" value="120" name="smtp_timeout" id="smtp_timeout" size="20" />
108                 </li>
109                 <li>
110                     <label for="smtp_ssl_mode">SSL: </label>
111                     <select name="smtp_ssl_mode" id="smtp_ssl_mode">
112                         <option value="disabled" selected="selected">Disabled</option>
113                         <option value="ssl">SSL</option>
114                         <option value="starttls">STARTTLS</option>
115                     </select>
116                 </li>
117                 <li>
118                     <label for="smtp_user_name">User name: </label>
119                     <input type="text" name="smtp_user_name" id="smtp_user_name" size="60" autocomplete="off" />
120                 </li>
121                 <li>
122                     <label for="smtp_password">Password: </label>
123                     <input type="password" name="smtp_password" id="smtp_password" size="60" autocomplete="off" />
124                 </li>
125                 <li>
126                     <label for="smtp_debug_mode">Debug mode: </label>
127                     <select name="smtp_debug_mode" id="smtp_debug_mode">
128                         <option value="1">Enabled</option>
129                         <option value="0" selected="selected">Disabled</option>
130                     </select>
131                     <span>Enables additional debug output in the logs</span>
132                 </li>
133                 <li>
134                     <label for="smtp_default">Default server: </label>
135                     <input type="checkbox" name="smtp_default" id="smtp_default" />
136                     <span>Sets this SMTP server as the default SMTP server.</span>
137                 </li>
138             </ol>
139         </fieldset>
140         <fieldset class="action">
141             <input type="submit" class="btn btn-primary" value="Submit" />
142             <a class="cancel" href="/cgi-bin/koha/admin/smtp_servers.pl">Cancel</a>
143         </fieldset>
144     </form>
145 [% END %]
146
147 [% IF op == 'edit_form' %]
148     <h1>Edit SMTP server</h1>
149     <form action="/cgi-bin/koha/admin/smtp_servers.pl" id="edit_save" name="edit_save" class="validated" method="post">
150         <input type="hidden" name="op" value="edit_save" />
151         <input type="hidden" name="smtp_server_id" value="[%- smtp_server.id | html -%]" />
152         <fieldset class="rows">
153             <ol>
154                 <li>
155                     <label for="smtp_name" class="required">Name: </label>
156                     <input type="text" name="smtp_name" id="smtp_name" size="60" class="required" required="required" value="[%- smtp_server.name | html -%]"/>
157                     <span class="required">Required</span>
158                 </li>
159             </ol>
160         </fieldset>
161
162         <fieldset class="rows">
163             <ol>
164                 <li>
165                     <label for="smtp_host" class="required">Host: </label>
166                     <input type="text" name="smtp_host" id="smtp_host" size="60" class="required" value="[%- smtp_server.host | html -%]"/>
167                     <span class="required">Required</span>
168                 </li>
169                 <li>
170                     <label for="smtp_port" class="required">Port: </label>
171                     <input type="text" inputmode="numeric" pattern="[0-9]*" name="smtp_port" id="smtp_port" size="20" class="required" value="[%- smtp_server.port | html -%]"/>
172                     <span class="required">Required</span>
173                 </li>
174                 <li>
175                     <label for="smtp_timeout">Timeout (seconds): </label>
176                     <input type="text" inputmode="numeric" pattern="[0-9]*" name="smtp_timeout" id="smtp_timeout" size="20" value="[%- smtp_server.timeout | html -%]"/>
177                 </li>
178                 <li>
179                     <label for="smtp_ssl_mode">SSL: </label>
180                     <select name="smtp_ssl_mode" id="smtp_ssl_mode">
181                     [%- IF smtp_server.ssl_mode == 'disabled' -%]
182                         <option value="disabled" selected="selected">Disabled</option>
183                         <option value="ssl">SSL</option>
184                         <option value="starttls">STARTTLS</option>
185                     [%- ELSIF smtp_server.ssl_mode == 'ssl' -%]
186                         <option value="disabled">Disabled</option>
187                         <option value="ssl" selected="selected">SSL</option>
188                         <option value="starttls">STARTTLS</option>
189                     [%- ELSE -%]
190                         <option value="disabled">Disabled</option>
191                         <option value="ssl">SSL</option>
192                         <option value="starttls" selected="selected">STARTTLS</option>
193                     [%- END -%]
194                     </select>
195                 </li>
196                 <li>
197                     <label for="smtp_user_name">User name: </label>
198                     <input type="text" name="smtp_user_name" id="smtp_user_name" size="60"  value="[%- smtp_server.user_name | html -%]" autocomplete="off" />
199                 </li>
200                 <li>
201                     <label for="smtp_password">Password: </label>
202                     [% IF smtp_server.password %]
203                         <input type="password" name="smtp_password" id="smtp_password" size="60" value="****" autocomplete="off"/>
204                     [% ELSE %]
205                         <input type="password" name="smtp_password" id="smtp_password" size="60" value="" autocomplete="off"/>
206                     [% END %]
207                 </li>
208                 <li>
209                     <label for="smtp_debug_mode">Debug mode: </label>
210                     <select name="smtp_debug_mode" id="smtp_debug_mode">
211                     [%- IF smtp_server.debug == 1 -%]
212                         <option value="1" selected="selected">Enabled</option>
213                         <option value="0">Disabled</option>
214                     [%- ELSE -%]
215                         <option value="1">Enabled</option>
216                         <option value="0" selected="selected">Disabled</option>
217                     [%- END -%]
218                     </select>
219                 </li>
220                 <li>
221                     <label for="smtp_default">Default server: </label>
222                     [% IF smtp_server.is_default %]
223                         <input type="checkbox" name="smtp_default" id="smtp_default" checked="checked"/>
224                     [% ELSE %]
225                         <input type="checkbox" name="smtp_default" id="smtp_default" />
226                     [% END %]
227                     <span>Sets this SMTP server as the default SMTP server.</span>
228                 </li>
229                 [% UNLESS smtp_server.is_default %]
230                     <div class="dialog message" id="default_server_message">
231                         <p>Current default configuration:</p>
232
233                         <ul>
234                             <li><strong>Host</strong>: [%- default_config.host | html -%]</li>
235                             <li><strong>Port</strong>: [%- default_config.port | html -%]</li>
236                             <li><strong>Timeout (secs)</strong>: [%- default_config.timeout | html -%]</li>
237                             <li><strong>SSL</strong>: [%- IF default_config.ssl_mode == 'disabled' -%]<span>Disabled</span>[%- ELSIF default_config.ssl_mode == 'ssl' -%]<span>SSL</span>[%- ELSE -%]<span>STARTTLS</span>[%- END -%]</li>
238                             <li><strong>Debug mode</strong>: [%- IF default_config.debug -%]Yes[%- ELSE -%]No[%- END -%]</li>
239                         </ul>
240                     </div>
241                 [% END %]
242             </ol>
243         </fieldset>
244         <fieldset class="action">
245             <input type="submit" class="btn btn-primary" value="Submit" />
246             <a class="cancel" href="/cgi-bin/koha/admin/smtp_servers.pl">Cancel</a>
247         </fieldset>
248     </form>
249 [% END %]
250
251 [% IF op == 'list' %]
252
253     <div id="toolbar" class="btn-toolbar">
254         <a class="btn btn-default" id="new_smtp_server" href="/cgi-bin/koha/admin/smtp_servers.pl?op=add_form"><i class="fa fa-plus"></i> New SMTP server</a>
255     </div>
256
257     <h1>SMTP servers</h1>
258
259     <div class="dialog message" id="default_server_message">
260         <p>Default configuration:</p>
261
262         <ul>
263             <li><strong>Host</strong>: [%- default_config.host | html -%]</li>
264             <li><strong>Port</strong>: [%- default_config.port | html -%]</li>
265             <li><strong>Timeout (secs)</strong>: [%- default_config.timeout | html -%]</li>
266             <li><strong>SSL</strong>: [%- IF default_config.ssl_mode == 'disabled' -%]<span>Disabled</span>[%- ELSIF default_config.ssl_mode == 'ssl' -%]<span>SSL</span>[%- ELSE -%]<span>STARTTLS</span>[%- END -%]</li>
267             <li><strong>Debug mode</strong>: [%- IF default_config.debug -%]Yes[%- ELSE -%]No[%- END -%]</li>
268         </ul>
269     </div>
270
271     [% IF servers_count > 0 %]
272         <div class="page-section">
273             <table id="smtp_servers">
274                 <thead>
275                     <tr>
276                         <th>Name</th>
277                         <th>Host</th>
278                         <th>Port</th>
279                         <th>Timeout (secs)</th>
280                         <th>SSL</th>
281                         <th>Authenticated</th>
282                         <th>Is default</th>
283                         <th data-class-name="actions noExport">Actions</th>
284                     </tr>
285                 </thead>
286             </table>
287         </div> <!-- /.page-section -->
288     [% END %]
289 [% END %]
290
291             <div id="delete_confirm_modal" class="modal" tabindex="-1" role="dialog" aria-labelledby="delete_confirm_modal_label" aria-hidden="true">
292                 <div class="modal-dialog">
293                     <div class="modal-content">
294                         <div class="modal-header">
295                             <button type="button" class="closebtn" data-dismiss="modal" aria-hidden="true">×</button>
296                             <h3 id="delete_confirm_modal_label">Delete server</h3>
297                         </div>
298                         <div class="modal-body">
299                             <div id="delete_confirm_dialog"></div>
300                         </div>
301                         <div class="modal-footer">
302                             <a href="#" class="btn btn-default" id="delete_confirm_modal_button" role="button" data-toggle="modal">Delete</a>
303                             <button class="btn btn-default" data-dismiss="modal" aria-hidden="true">Close</button>
304                         </div>
305                     </div> <!-- /.modal-content -->
306                 </div> <!-- /.modal-dialog -->
307             </div> <!-- #delete_confirm_modal -->
308
309             <div id="default_confirm_modal" class="modal" tabindex="-1" role="dialog" aria-labelledby="default_confirm_modal_label" aria-hidden="true">
310                 <div class="modal-dialog">
311                     <div class="modal-content">
312                         <div class="modal-header">
313                             <button type="button" class="default_confirm_modal_no closebtn" data-dismiss="modal" aria-hidden="true">×</button>
314                             <h3 id="default_confirm_modal_label">Set default server</h3>
315                         </div>
316                         <div class="modal-body">
317                             <div id="default_confirm_dialog">Are you sure you want to change the default SMTP server?</div>
318                         </div>
319                         <div class="modal-footer">
320                             <a id="default_confirm_dialog" href="#" class="btn btn-primary default_confirm_modal_yes" id="default_confirm_modal_button" role="button" data-toggle="modal">Yes</a>
321                             <button class="btn btn-default default_confirm_modal_no" data-dismiss="modal" aria-hidden="true">No</button>
322                         </div>
323                     </div> <!-- /.modal-content -->
324                 </div> <!-- /.modal-dialog -->
325             </div> <!-- #default_confirm_modal -->
326
327             </main>
328         </div> <!-- /.col-sm-10.col-sm-push-2 -->
329
330         <div class="col-sm-2 col-sm-pull-10">
331             <aside>
332                 [% INCLUDE 'admin-menu.inc' %]
333             </aside>
334         </div> <!-- /.col-sm-2.col-sm-pull-10 -->
335      </div> <!-- /.row -->
336
337
338 [% MACRO jsinclude BLOCK %]
339     [% Asset.js("js/admin-menu.js") | $raw %]
340     [% INCLUDE 'datatables.inc' %]
341     <script>
342         $(document).ready(function() {
343
344             var smtp_servers_url = '/api/v1/config/smtp_servers';
345             window.smtp_servers = $("#smtp_servers").kohaTable({
346                 "ajax": {
347                     "url": smtp_servers_url
348                 },
349                 'language': {
350                     'emptyTable': '<div class="dialog message">'+_("There are no SMTP servers defined.")+'</div>'
351                 },
352                 "columnDefs": [ {
353                     "targets": [0,1],
354                     "render": function (data, type, row, meta) {
355                         if ( type == 'display' ) {
356                             if ( data != null ) {
357                                 return data.escapeHtml();
358                             }
359                             else {
360                                 return "Default";
361                             }
362                         }
363                         return data;
364                     }
365                 } ],
366                 "columns": [
367                     {
368                         "data": "name",
369                         "searchable": true,
370                         "orderable": true
371                     },
372                     {
373                         "data": "host",
374                         "searchable": true,
375                         "orderable": true
376                     },
377                     {
378                         "data": "port",
379                         "searchable": true,
380                         "orderable": false
381                     },
382                     {
383                         "data": "timeout",
384                         "searchable": true,
385                         "orderable": false
386                     },
387                     {
388                         "data": "ssl_mode",
389                         "render": function (data, type, row, meta) {
390                             if (data == 'disabled') {
391                                 return _("Disabled");
392                             }
393                             else if (data == 'ssl') {
394                                 return _("SSL");
395                             }
396                             else {
397                                 return _("STARTTLS");
398                             }
399                         },
400                         "searchable": false,
401                         "orderable": false
402                     },
403                     {
404                         "data": function( row, type, val, meta ) {
405                             if ( row.user_name != null ) {
406                                 return _("Yes");
407                             }
408                             else {
409                                 return _("No");
410                             }
411                         },
412                         "searchable": false,
413                         "orderable": false
414                     },
415                     {
416                         "data": function( row, type, val, meta ) {
417                             if ( row.is_default ) {
418                                 return _("Yes");
419                             }
420                             else {
421                                 return _("No");
422                             }
423                         },
424                         "searchable": false,
425                         "orderable": false
426                     },
427                     {
428                         "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";
430                             result += '<a class="btn btn-default btn-xs delete_server" role="button" href="#" data-toggle="modal" data-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>';
431                             return result;
432                         },
433                         "searchable": false,
434                         "orderable": false
435                     }
436                 ],
437                 createdRow: function (row, data, dataIndex) {
438                     if ( data.is_default ) {
439                         $(row).addClass('default warn');
440                     }
441                     if ( data.debug ) {
442                         $(row).addClass('debug');
443                     }
444                 },
445             });
446
447             $('#smtp_servers').on( "click", '.delete_server', function () {
448                 var smtp_server_id   = $(this).data('smtp-server-id');
449                 var smtp_server_name = decodeURIComponent($(this).data('smtp-server-name'));
450
451                 $("#delete_confirm_dialog").html(
452                     _("You are about to delete the '%s' SMTP server.").format(smtp_server_name)
453                 );
454                 $("#delete_confirm_modal_button").data('smtp-server-id', smtp_server_id);
455                 $("#delete_confirm_modal_button").data('smtp-server-name', smtp_server_name);
456             });
457
458             $('#smtp_default').on( "click", function () {
459                 $("#default_confirm_modal").modal('show');
460             });
461             $('.default_confirm_modal_yes').on( "click", function () {
462                 $("#default_confirm_modal").modal('hide');
463             });
464             $('.default_confirm_modal_no').on( "click", function () {
465                 $("#smtp_default").prop('checked', !$("#smtp_default").prop('checked') );
466                 $("#default_confirm_modal").modal('hide');
467             });
468
469             $("#delete_confirm_modal_button").on( "click", function () {
470
471                 var smtp_server_id   = $(this).data('smtp-server-id');
472                 var smtp_server_name = $(this).data('smtp-server-name');
473
474                 $.ajax({
475                     method: "DELETE",
476                     url: "/api/v1/config/smtp_servers/"+smtp_server_id
477                 }).success(function() {
478                     window.smtp_servers.api().ajax.reload(function (data) {
479                         $("#smtp_action_result_dialog").hide();
480                         $("#smtp_delete_success").html(_("Server '%s' deleted successfully.").format(smtp_server_name)).show();
481                     });
482                 }).fail(function () {
483                     $("#smtp_delete_error").html(_("Error deleting server '%s'. Check the logs.").format(smtp_server_name)).show();
484                 }).done(function () {
485                     $("#delete_confirm_modal").modal('hide');
486                 });
487             });
488         });
489     </script>
490 [% END %]
491
492 [% INCLUDE 'intranet-bottom.inc' %]