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