Bug 13618: Add html filters to all the variables
[srvgit] / koha-tmpl / intranet-tmpl / prog / en / modules / cataloguing / merge.tt
1 [% USE raw %]
2 [% USE Asset %]
3 [% SET footerjs = 1 %]
4 [% PROCESS 'merge-record.inc' %]
5
6 [% INCLUDE 'doc-head-open.inc' %]
7 <title>Koha &rsaquo; Cataloging &rsaquo; Merging records</title>
8 [% INCLUDE 'doc-head-close.inc' %]
9 <style type="text/css">
10 div.record ul, div.record li { float:none; display:block; }
11 div#result { margin-top: 1em; }
12 /* We use this style "against" the li ui-tabs-nav style automatically applied */
13 #dataPreview { width : 80%; } @media (max-width: 767px) { #dataPreview { margin: 0; width : auto; } }
14 </style>
15 </head>
16
17 <body id="cat_merge" class="cat">
18 [% INCLUDE 'header.inc' %]
19 [% INCLUDE 'cataloging-search.inc' %]
20 <div id="breadcrumbs"><a href="/cgi-bin/koha/mainpage.pl">Home</a> &rsaquo; <a href="/cgi-bin/koha/cataloguing/addbooks.pl">Cataloging</a>  &rsaquo; Merging records</div>
21
22 <div id="doc" class="yui-t7">
23
24 <div id="bd">
25         <div id="yui-main">
26
27
28 <h1>Merging records</h1>
29 [% IF ( result ) %]
30     [% IF ( errors.size ) %]
31        [% FOREACH error IN errors %]
32            <div class="dialog alert">
33                 [% IF error.code == 'CANNOT_MOVE' %]
34                     The following items could not be moved from the old record to the new one: [% error.value | html %]
35                 [% ELSE %]
36                     [% error | html %]
37                 [% END %]
38                 <br />
39                 Therefore, the record to be merged has not been deleted.
40             </div>
41        [% END %]
42
43     [% ELSE %]
44         <p>The merge was successful. <a href="/cgi-bin/koha/catalogue/MARCdetail.pl?biblionumber=[% ref_biblionumber | html %]">Click here to see the merged record.</a></p>
45         <h3>Report</h3>
46         <table>
47             <thead>
48                 <tr>
49                     <th>Biblionumber</th>
50                     [% FOREACH key IN report_header.keys.sort %]
51                         [% tag = key.substr(0, 3) | html %]
52                         [% code = key.substr(3, 1) | html %]
53                         [% IF code == '@' %]
54                             [% header = tag | html %]
55                         [% ELSE %]
56                             [% header = tag _ '$' _ code | html %]
57                         [% END %]
58                         <th>[% header | html %]</th>
59                     [% END %]
60                 </tr>
61             </thead>
62             <tbody>
63                 [% FOREACH record IN report_records %]
64                     <tr>
65                         <td>
66                             [% record.biblionumber | html %]
67                             [% IF loop.first %]
68                                 (record kept)
69                             [% END %]
70                         </td>
71                         [% FOREACH key IN report_header.keys.sort %]
72                             <td>
73                                 [% values = record.fields.$key | html %]
74                                 [% IF values %]
75                                     [% FOREACH value IN record.fields.$key %]
76                                         [% value | html %]
77                                         [% UNLESS loop.last %]<br />[% END %]
78                                     [% END %]
79                                 [% END %]
80                             </td>
81                         [% END %]
82                     </tr>
83                 [% END %]
84             </tbody>
85         </table>
86     [% END %]
87
88 [% ELSE %]
89
90 [% IF ( choosereference ) %]
91 <p>Please choose which record will be the reference for the merge. The record chosen as reference will be kept, and the other will be deleted.</p>
92 <form id="mergeform" action="/cgi-bin/koha/cataloguing/merge.pl" method="post">
93     <fieldset class="rows">
94     <legend>Merge reference</legend>
95     <ol>
96         [% FOREACH record IN records %]
97             <li class="radio">
98                 [% IF loop.first %]
99                     <input type="radio" value="[% record.biblionumber | html %]" checked="checked" id="ref_biblionumber[% record.biblionumber | html %]" name="ref_biblionumber" onclick="changeFramework('[% record.frameworkcode | html %]')" />
100                 [% ELSE %]
101                     <input type="radio" value="[% record.biblionumber | html %]" id="ref_biblionumber[% record.biblionumber | html %]" name="ref_biblionumber" onclick="changeFramework('[% record.frameworkcode | html %]')" />
102                 [% END %]
103                 <label for="ref_biblionumber[% record.biblionumber | html %]">
104                     [% record.data.title | html %]
105                     [% FOREACH subtitle IN record.subtitles %]
106                         [% subtitle.subfield | html %]
107                     [% END %]
108                     ([% record.biblionumber | html %]) <a href="/cgi-bin/koha/catalogue/showmarc.pl?id=[% record.biblionumber | html %]" class="previewData">View MARC</a>
109                 </label>
110             </li>
111         [% END %]
112
113             <li>
114                 <label for="frameworkcode">Using framework:</label>
115                 <select name="frameworkcode" id="frameworkcode">
116                     <option value="">Default</option>
117                     [% FOREACH framework IN frameworks %]
118                         <option value="[% framework.frameworkcode | html %]">[% framework.frameworktext | html %]</option>
119                     [% END %]
120                 </select>
121             </li>
122     </ol>
123
124     [% FOREACH record IN records %]
125         <input type="hidden" name="biblionumber" value="[% record.biblionumber | html %]" />
126     [% END %]
127     <fieldset class="action">
128         <input type="submit" value="Next" />
129     </fieldset>
130     </fieldset>
131 </form>
132
133 <div id="dataPreview" class="modal" tabindex="-1" role="dialog" aria-labelledby="dataPreviewLabel" aria-hidden="true">
134     <div class="modal-dialog">
135     <div class="modal-content">
136     <div class="modal-header">
137         <button type="button" class="closebtn" data-dismiss="modal" aria-hidden="true">×</button>
138         <h3 id="dataPreviewLabel">Preview</h3>
139     </div>
140     <div class="modal-body">
141         <div id="loading"> <img src="[% interface | html %]/[% theme | html %]/img/spinner-small.gif" alt="" /> Loading </div>
142     </div>
143     <div class="modal-footer">
144         <button class="btn btn-default" data-dismiss="modal" aria-hidden="true">Close</button>
145     </div>
146     </div>
147     </div>
148 </div>
149
150 [% ELSE %]
151 [% IF ( errors.size ) %]
152     <div class="dialog alert">
153         [% FOREACH error IN errors %]
154             <p>[% error | html %]</p>
155         [% END %]
156     </div>
157 [% ELSE %]
158 <form id="mergeform" action="/cgi-bin/koha/cataloguing/merge.pl" method="post" onsubmit="return mergeformsubmit()">
159
160 <div class="yui-g">
161 <div class="yui-u first">
162 [% PROCESS mergesource sourcerecords=records %]
163 </div>
164 <div class="yui-u">
165 [% PROCESS mergetarget %]
166 </div> <!-- .yui-u -->
167
168 <input type="hidden" name="ref_biblionumber" value="[% ref_biblionumber | html %]" />
169 [% FOREACH record IN records %]
170     <input type="hidden" name="biblionumber" value="[% record.recordid | html %]" />
171 [% END %]
172 <input type="hidden" name="frameworkcode" value="[% framework | html %]" />
173
174 <fieldset class="action">
175     <input type="submit" name="merge" value="Merge" />
176     <label for="report_fields">Fields to display in report:</label>
177     <input type="text" name="report_fields" id="report_fields" value="[% MergeReportFields | html %]" />
178     <span class="hint">(Example: "001,245ab,600")
179 </fieldset>
180 </div>
181 </form>
182 [% END %]
183 [% END %]
184 [% END %]
185
186 </div>
187 </div>
188 </div>
189
190 [% MACRO jsinclude BLOCK %]
191     [% Asset.js("js/merge-record.js") | $raw %]
192     [% INCLUDE 'merge-record-strings.inc' %]
193     <script type="text/javascript">
194         [% UNLESS (result) %]
195           [% IF (choosereference) %]
196             function changeFramework(fw) {
197                 $("#frameworkcode").val(fw);
198             }
199             $(document).ready(function(){
200                     $(".previewData").on("click", function(e){
201                     e.preventDefault();
202                     var ltitle = $(this).text();
203                     var page = $(this).attr("href");
204                     $("#dataPreviewLabel").text(ltitle);
205                     $("#dataPreview .modal-body").load(page + " div");
206                     $('#dataPreview').modal({show:true});
207                 });
208                 $("#dataPreview").on("hidden", function(){
209                     $("#dataPreviewLabel").html("");
210                     $("#dataPreview .modal-body").html("<div id=\"loading\"><img src=\"[% interface | html %]/[% theme | html %]/img/spinner-small.gif\" alt=\"\" /> "+_("Loading")+"</div>");
211                 });
212             });
213           [% ELSE %]
214             function check_mandatory () {
215                 var missing = {
216                     'fields': [],
217                     'subfields': []
218                 };
219                 for (tag in tagslib) {
220                     if (tag == '000' || tag == '001')
221                         continue;
222                     if (tagslib[tag].mandatory == 1) {
223                         if ($("#resultul span.field:contains("+ tag +")").length == 0) {
224                             missing.fields.push(tag);
225                         }
226                     }
227                     for (subfieldcode in tagslib[tag]) {
228                         if (subfieldcode == 'lib' || subfieldcode == 'mandatory'
229                         || subfieldcode == 'repeatable' || subfieldcode == 'tab'
230                         || subfieldcode == '@') {
231                             continue;
232                         }
233                         if (tagslib[tag][subfieldcode].mandatory == 1 && tagslib[tag][subfieldcode].tab >= 0) {
234                             var fields = $("#resultul span.field:contains("+ tag +")");
235                             $(fields).each(function() {
236                                 var subfields = $(this).parents('li').find("span.subfield:contains("+ subfieldcode +")");
237                                 if (subfields.length == 0) {
238                                     missing.subfields.push( {
239                                         'tag': tag,
240                                         'subfieldcode': subfieldcode
241                                     } );
242                                 }
243                             });
244                         }
245                     }
246                 }
247                 return missing;
248             }
249
250             // When submiting the form
251             function mergeformsubmit() {
252                 var missing = check_mandatory();
253                 var alert_msg = '';
254                 var error = 0;
255                 if (missing.fields.length > 0) {
256                     alert_msg += _("Following required fields are missing:") + "\n";
257                     for (var i in missing.fields) {
258                         alert_msg += "\t- " + missing.fields[i] + "\n";
259                         error ++;
260                     }
261                     alert_msg += "\n";
262                 }
263                 if (missing.subfields.length > 0) {
264                     alert_msg += _("Following required subfields are missing:") + "\n";
265                     for (var i in missing.subfields) {
266                         var subfield = missing.subfields[i];
267                         alert_msg += "\t- " + subfield.tag + "$" + subfield.subfieldcode + "\n";
268                         error ++;
269                     }
270                 }
271
272                 if (error != 0) {
273                     alert(alert_msg);
274                     return false;
275                 } else {
276                     $("#tabs").remove();
277                 }
278             }
279
280         $(document).ready(function(){
281             tagslib = [];
282             $.getJSON("/cgi-bin/koha/cataloguing/merge_ajax.pl", {frameworkcode : "[% framework | html %]" }, function(json) {
283               tagslib = json;
284               rebuild_target($("#tabs"), $("#resultul"));
285             });
286
287             // Creating tabs
288             $("#tabs").tabs();
289
290             // Check all checkboxes in first tab, and uncheck all others to avoid
291             // inconsistencies from a page refresh.
292             $('#tabs div#tabrecord[% ref_biblionumber | html %]').find('input[type="checkbox"]').prop('checked', true);
293             $('#tabs > div:not("#tabrecord[% ref_biblionumber | html %]")').find('input[type="checkbox"]').prop('checked', false);
294
295             //Set focus to cataloging search
296             $("input[name=q]:eq(0)").focus();
297         });
298
299           [% END %]
300         [% END %]
301     </script>
302 [% END %]
303
304 [% INCLUDE 'intranet-bottom.inc' %]