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