View | Details | Raw Unified | Return to bug 25025
Collapse All | Expand All

(-)a/koha-tmpl/intranet-tmpl/prog/en/modules/tools/upload-images.tt (-143 / +431 lines)
Lines 2-12 Link Here
2
[% USE Asset %]
2
[% USE Asset %]
3
[% SET footerjs = 1 %]
3
[% SET footerjs = 1 %]
4
[% INCLUDE 'doc-head-open.inc' %]
4
[% INCLUDE 'doc-head-open.inc' %]
5
<title>Upload images &rsaquo; Tools &rsaquo; Koha</title>
5
<title>
6
    Koha &rsaquo;
7
    Tools &rsaquo;
8
    Upload local cover image
9
    [% IF ( biblio ) %]
10
        &rsaquo; [% INCLUDE 'biblio-title-head.inc' %]
11
    [% END %]
12
</title>
6
[% INCLUDE 'doc-head-close.inc' %]
13
[% INCLUDE 'doc-head-close.inc' %]
7
<style>
14
[% FILTER collapse %]
8
    #fileuploadstatus,#fileuploadfailed,#jobpanel,#jobstatus,#jobfailed { display : none; }
15
    <style>
9
</style>
16
        #fileuploadstatus,
17
        #fileuploadfailed,
18
        #jobpanel,
19
        #jobstatus,
20
        #jobfailed,
21
        #fileuploadform,
22
        #upload_file_type,
23
        #upload_options,
24
        #process_images {
25
            display: none;
26
        }
27
        #uploadpanel {
28
            clear:both;
29
            margin-top: .9em;
30
        }
31
        #filedrag {
32
            background-color: #FFF;
33
            outline: 2px dashed #92b0b3;
34
            outline-offset: -10px;
35
            font-weight: bold;
36
            font-size: 130%;
37
            text-align: center;
38
            position: relative;
39
            padding: 50px 20px;
40
            margin: 1em;
41
42
            cursor: default;
43
        }
44
45
        #click_to_select:hover {
46
            color: #538200;
47
            cursor: pointer;
48
        }
49
50
        #filedrag.hover {
51
            outline-offset: -20px;
52
            outline-color: #c8dadf;
53
            background-color: #fff;
54
        }
55
56
        #messages {
57
            font-weight: normal;
58
        }
59
        .cover_preview {
60
            margin:1em;
61
            max-height:200px;
62
            max-width:200px;
63
        }
64
        .progress_panel {
65
            border: 0;
66
            border-radius: 0;
67
            margin: .9em;
68
            background-color: #FFF;
69
        }
70
        .fa-file-archive-o {
71
            color: #777;
72
            font-size: 300%
73
        }
74
    </style>
75
[% END %]
10
</head>
76
</head>
11
77
12
<body id="tools_upload-images" class="tools">
78
<body id="tools_upload-images" class="tools">
Lines 21-49 Link Here
21
        <li>
87
        <li>
22
            <a href="/cgi-bin/koha/tools/tools-home.pl">Tools</a>
88
            <a href="/cgi-bin/koha/tools/tools-home.pl">Tools</a>
23
        </li>
89
        </li>
90
        <li>
91
            <a href="/cgi-bin/koha/tools/upload-cover-image.pl">Upload local cover image</a>
92
        </li>
24
93
25
        [% IF ( uploadimage ) %]
94
        [% IF ( uploadimage ) %]
26
            <li>
27
                <a href="/cgi-bin/koha/tools/upload-cover-image.pl">Upload local cover image</a>
28
            </li>
29
            <li>
95
            <li>
30
                <a href="#" aria-current="page">
96
                <a href="#" aria-current="page">
31
                    Upload results
97
                    Upload results
32
                </a>
98
                </a>
33
            </li>
99
            </li>
100
            [% IF ( biblionumber ) %]
101
               <li>
102
                    <a href="#" aria-current="page"><em>[% INCLUDE 'biblio-title.inc' %]</em></a>
103
                </li>
104
            [% END %]
34
        [% ELSIF itemnumber %]
105
        [% ELSIF itemnumber %]
35
            <li>
36
                <a href="/cgi-bin/koha/tools/upload-cover-image.pl">Upload local cover image</a>
37
            </li>
38
            <li>
106
            <li>
39
                <a href="#" aria-current="page">
107
                <a href="#" aria-current="page">
40
                    Upload cover for itemnumber: [% itemnumber | html %]
108
                    Upload cover for itemnumber: [% itemnumber | html %]
41
                </a>
109
                </a>
42
            </li>
110
            </li>
43
        [% ELSIF biblionumber %]
111
        [% ELSIF biblionumber %]
44
            <li>
45
                <a href="/cgi-bin/koha/tools/upload-cover-image.pl">Upload local cover image</a>
46
            </li>
47
            <li>
112
            <li>
48
                <a href="#" aria-current="page">
113
                <a href="#" aria-current="page">
49
                    Upload cover for biblionumber: [% biblionumber | html %]
114
                    Upload cover for biblionumber: [% biblionumber | html %]
Lines 64-106 Link Here
64
        <div class="col-sm-10 col-sm-push-2">
129
        <div class="col-sm-10 col-sm-push-2">
65
            <main>
130
            <main>
66
131
67
                [% IF ( uploadimage ) %]
68
                    <h1>Image upload results :</h1>
69
                    <ul>
70
                        <li>[% total | html %] images found</li>
71
                        [% IF ( error ) %]
72
                            <li>
73
                                <div class="dialog alert">
74
                                    [% IF ( error == 'UZIPFAIL' ) %]
75
                                        <p><strong>Failed to unzip archive.<br />Please ensure you are uploading a valid zip file and try again.</strong></p>
76
                                    [% ELSIF ( error == 'OPNLINK' ) %]
77
                                        <p><strong>Cannot open folder index (idlink.txt or datalink.txt) to read.<br />Please verify that it exists.</strong></p>
78
                                    [% ELSIF ( error == 'OPNIMG' ) %]
79
                                        <p><strong>Cannot process file as an image.<br />Please ensure you only upload GIF, JPEG, PNG, or XPM images.</strong></p>
80
                                    [% ELSIF ( error == 'DELERR' ) %]
81
                                        <p><strong>Unrecognized or missing field delimiter.<br />Please verify that you are using either a single quote or a tab.</strong></p>
82
                                    [% ELSIF ( error == 'DBERR' ) %]
83
                                        <p><strong>Unable to save image to database.</strong></p>
84
                                    [% ELSE %]
85
                                        <p><strong>An unknown error has occurred.<br />Please review the error log for more details.</strong></p>
86
                                    [% END %]
87
                                </div>
88
                            </li>
89
                        [% END # /IF error  %]
90
                        <li><a href="/cgi-bin/koha/catalogue/detail.pl?biblionumber=[% biblionumber | uri %]">View final record</a></li>
91
                        <li><a href="/cgi-bin/koha/tools/tools-home.pl">Back</a></li>
92
                    </ul>
93
                    <hr />
94
                [% END # /IF uploadimage %]
95
96
                [% UNLESS itemnumber || biblionumber %]
132
                [% UNLESS itemnumber || biblionumber %]
97
                    <h1>Upload local cover image</h1>
133
                    <h1>Upload local cover image</h1>
134
                [% ELSIF biblio %]
135
                    <h1>
136
                        Upload local cover image for <a href="/cgi-bin/koha/catalogue/detail.pl?biblionumber=[% biblionumber | uri %]"><em>[% INCLUDE 'biblio-title.inc' %]</em></a>
137
                        [% IF ( itemnumber ) %],  Item number: [% itemnumber | html %][% END %]
138
                    </h1>
98
                [% ELSIF itemnumber %]
139
                [% ELSIF itemnumber %]
99
                    <h1>Upload local cover image for itemnumber: [% itemnumber | html %]</h1>
140
                    <h1>Upload local cover image for item number: [% itemnumber | html %]</h1>
100
                [% ELSIF biblionumber %]
101
                    <h1>Upload local cover image for biblionumber: [% biblionumber | html %]</h1>
102
                [% END %]
141
                [% END %]
103
142
143
                [% IF ( uploadimage ) %]
144
                    <h2>Image upload results :</h2>
145
                    <div id="upload_results">
146
                        [% IF ( error ) %]
147
                            <div class="dialog alert">
148
                                [% IF ( error == 'UZIPFAIL' ) %]
149
                                    <p><strong>Failed to unzip archive.<br />Please ensure you are uploading a valid zip file and try again.</strong></p>
150
                                [% ELSIF ( error == 'OPNLINK' ) %]
151
                                    <p><strong>Cannot open folder index (idlink.txt or datalink.txt) to read.<br />Please verify that it exists.</strong></p>
152
                                [% ELSIF ( error == 'OPNIMG' ) %]
153
                                    <p><strong>Cannot process file as an image.<br />Please ensure you only upload GIF, JPEG, PNG, or XPM images.</strong></p>
154
                                [% ELSIF ( error == 'DELERR' ) %]
155
                                    <p><strong>Unrecognized or missing field delimiter.<br />Please verify that you are using either a single quote or a tab.</strong></p>
156
                                [% ELSIF ( error == 'DBERR' ) %]
157
                                    <p><strong>Unable to save image to database.</strong></p>
158
                                [% ELSE %]
159
                                    <p><strong>An unknown error has occurred.<br />Please review the error log for more details.</strong></p>
160
                                [% END %]
161
                            </div>
162
                        [% END # /IF error  %]
163
                        <h3>[% total | html %] images found</h3>
164
                        <ul>
165
                            [% FOREACH result IN results %]
166
                                <li><a href="/cgi-bin/koha/catalogue/detail.pl?biblionumber=[% result.biblionumber | uri %]">[% result.title | html %]</a></li>
167
                            [% END %]
168
                        </ul>
169
                        <hr />
170
                    </div> <!-- /#upload_results -->
171
                [% END # /IF uploadimage %]
172
104
                <ul>
173
                <ul>
105
                    [% UNLESS itemnumber || biblionumber %]
174
                    [% UNLESS itemnumber || biblionumber %]
106
                        <li>Select an image file or ZIP file to upload. The tool will accept images in GIF, JPEG, PNG, and XPM formats.</li>
175
                        <li>Select an image file or ZIP file to upload. The tool will accept images in GIF, JPEG, PNG, and XPM formats.</li>
Lines 109-199 Link Here
109
                    [% END %]
178
                    [% END %]
110
                </ul>
179
                </ul>
111
180
112
                <form method="post" action="/cgi-bin/koha/tools/upload-cover-image.pl" id="uploadfile" enctype="multipart/form-data">
181
                <div class="row">
113
                    <fieldset class="rows" >
182
                    [% IF ( cover_images ) %]
114
                        <legend>Upload images</legend>
183
                        <div class="col-sm-9">
115
                        <ol>
184
                    [% ELSE %]
116
                            <li>
185
                        <div class="col-sm-12">
186
                    [% END %]
187
188
                        <form method="post" action="/cgi-bin/koha/tools/upload-cover-image.pl" id="uploadfile" enctype="multipart/form-data">
189
                            <fieldset class="rows" >
117
                                <div id="fileuploadform">
190
                                <div id="fileuploadform">
118
                                    <label for="fileToUpload" class="required">Select the file to upload: </label>
191
                                    <label for="fileToUpload">Select the file to upload: </label>
119
                                    <input type="file" id="fileToUpload" name="fileToUpload" required="required" class="required" />
192
                                    <input type="file" id="fileToUpload" name="fileToUpload" />
120
                                    <span class="required">Required</span>
121
                                </div>
193
                                </div>
122
                            </li>
194
123
                        </ol>
195
                                <div id="filedrag">
124
                        <fieldset class="action"><button class="submit btn btn-default">Upload file</button></fieldset>
196
                                    <a id="click_to_select" href="#">Drop files here or click to select a file</a>
125
                    </fieldset>
197
                                    <div id="messages"></div>
126
198
                                </div>
127
                    <div id="uploadpanel">
199
128
                        <div id="fileuploadstatus" class="progress_panel">Upload progress:
200
                                <div id="uploadpanel">
129
                            <progress max="100" value="0" id="fileuploadprogress">
201
                                    <div id="fileuploadstatus" class="progress_panel">Upload progress:
130
                            </progress>
202
                                        <progress max="100" value="0" id="fileuploadprogress">
131
                            <span class="fileuploadpercent">0</span>%
203
                                        </progress>
132
                        </div>
204
                                        <span class="fileuploadpercent">0</span>%
133
                        <div id="fileuploadfailed"></div>
205
                                    </div>
134
                    </div>
206
                                    <div id="fileuploadfailed"></div>
135
                </form> <!-- /#uploadfile -->
207
                                </div>
136
208
                            </fieldset>
137
                <form method="post" id="processfile" action="/cgi-bin/koha/tools/upload-cover-image.pl" enctype="multipart/form-data">
209
                        </form> <!-- /#uploadfile -->
138
                    <input type="hidden" name="uploadedfileid" id="uploadedfileid" value="" />
210
139
                    <input type="hidden" name="runinbackground" id="runinbackground" value="" />
211
                        <form method="post" id="processfile" action="/cgi-bin/koha/tools/upload-cover-image.pl" enctype="multipart/form-data">
140
                    <input type="hidden" name="completedJobID" id="completedJobID" value="" />
212
                            <input type="hidden" name="uploadedfileid" id="uploadedfileid" value="" />
141
                    [% UNLESS itemnumber || biblionumber %]
213
                            <input type="hidden" name="runinbackground" id="runinbackground" value="" />
142
                        <fieldset class="rows">
214
                            <input type="hidden" name="completedJobID" id="completedJobID" value="" />
143
                            <legend>File type</legend>
215
144
                            <ol>
216
                            [% IF itemnumber %]
145
                                <li class="radio">
217
                                <input type="hidden" id="itemnumber" name="itemnumber" value="[% itemnumber | html %]" />
146
                                    [% IF (filetype != 'image' ) %]
218
                                <input type="hidden" name="filetype" value="image" />
147
                                        <input type="radio" id="zipfile" name="filetype" value="zip" checked="checked" />
219
                            [% ELSIF biblionumber %]
148
                                    [% ELSE %]
220
                                <input type="hidden" id="biblionumber" name="biblionumber" value="[% biblionumber | html %]" />
149
                                        <input type="radio" id="zipfile" name="filetype" value="zip" />
221
                                <input type="hidden" name="filetype" value="image" />
150
                                    [% END %]
222
                            [% END %]
151
                                    <label for="zipfile">ZIP file</label>
223
152
                                </li>
224
153
                                <li class="radio">
225
                            <fieldset id="upload_options" class="rows">
154
                                    [% IF (filetype == 'image' ) %]
226
                                <ol>
155
                                        <input type="radio" id="image" name="filetype" value="image" checked="checked" />
227
                                    [% UNLESS itemnumber || biblionumber %]
156
                                    [% ELSE %]
228
                                        <li class="radio">
157
                                        <input type="radio" id="image" name="filetype" value="image" />
229
                                            [% IF (filetype != 'image' ) %]
158
                                    [% END %]
230
                                                <input type="radio" id="zipfile" name="filetype" value="zip" checked="checked" />
159
                                    <label for="image">Image file</label>
231
                                            [% ELSE %]
160
                                </li>
232
                                                <input type="radio" id="zipfile" name="filetype" value="zip" />
161
                                <li class="radio">
233
                                            [% END %]
162
                                    [% IF ( filetype == 'image' ) %]
234
                                            <label for="zipfile">ZIP file</label>
163
                                        <span id="bibnum">
235
                                        </li>
164
                                    [% ELSE %]
236
                                        <li class="radio">
165
                                        <span id="bibnum" style="display: none">
237
                                            [% IF (filetype == 'image' ) %]
238
                                                <input type="radio" id="image" name="filetype" value="image" checked="checked" />
239
                                            [% ELSE %]
240
                                                <input type="radio" id="image" name="filetype" value="image" />
241
                                            [% END %]
242
                                            <label for="image">Image file</label>
243
                                        </li>
244
                                        <li id="biblionumber_entry">
245
                                            <label for="biblionumber">Bibliographic record number: </label>
246
                                            <input type="text" id="biblionumber" name="biblionumber" value="[% biblionumber | html %]" size="15" />
247
                                        </li>
166
                                    [% END %]
248
                                    [% END %]
167
                                    <label for="biblionumber">Enter cover biblionumber: </label>
249
                                    <li class="radio">
168
                                    <input type="text" id="biblionumber" name="biblionumber" value="[% biblionumber | html %]" size="15" /></span>
250
                                        <label for="replace">
169
                                </li>
251
                                        [% IF AllowMultipleCovers == 0 %]
170
                            </ol>
252
                                            <input type="checkbox" id="replace" name="replace" value="" disabled="disabled" checked="checked" />
171
                        </fieldset>
253
                                            Existing covers will be replaced
172
                    [% ELSIF itemnumber %]
254
                                        [% ELSE %]
173
                        <input type="hidden" id="itemnumber" name="itemnumber" value="[% itemnumber | html %]" />
255
                                            <input type="checkbox" id="replace" name="replace" value="1" />
174
                        <input type="hidden" name="filetype" value="image" />
256
                                            Replace existing covers
175
                    [% ELSIF biblionumber %]
257
                                        [% END %]
176
                        <input type="hidden" id="biblionumber" name="biblionumber" value="[% biblionumber | html %]" />
258
                                    </li>
177
                        <input type="hidden" name="filetype" value="image" />
259
                                </ol>
178
                    [% END %]
260
                            </fieldset>
179
                    <fieldset class="rows">
261
180
                        <legend>Options</legend>
262
                            <fieldset id="process_images" class="action">
181
                        <ol>
263
                                <button type="submit" class="btn btn-default btn-sm save_image">Process images</button>
182
                            <li class="checkbox">
264
                                [% IF ( biblionumber ) %]
183
                                [% IF AllowMultipleCovers == 0 %]
265
                                    <a class="cancel cancel_image" href="/cgi-bin/koha/catalogue/detail.pl?biblionumber=[% biblionumber | uri %]">Cancel</a>
184
                                    <input type="checkbox" id="replace" name="replace" checked="checked" disabled="disabled" value="1" />
185
                                [% ELSE %]
266
                                [% ELSE %]
186
                                    <input type="checkbox" id="replace" name="replace" value="1" />
267
                                    <a class="cancel cancel_image" href="/cgi-bin/koha/tools/upload-cover-image.pl">Cancel</a>
187
                                [% END %]
268
                                [% END %]
188
                                <label for="replace">Replace existing covers</label>
269
                            </fieldset>
189
                            </li>
270
                        </form> <!-- /#processfile -->
190
                        </ol>
271
                    </div> <!-- /.col-sm-9/.col-sm-12 -->
191
                    </fieldset>
192
                    <fieldset class="action">
193
                        <button type="submit" class="btn btn-default btn-sm">Process images</button>
194
                    </fieldset>
195
                </form> <!-- /#processfile -->
196
272
273
                    [% IF ( cover_images.size ) %]
274
                        <div class="col-sm-3">
275
                            <h3>Existing images</h3>
276
                            <ul class="thumbnails">
277
                                [% FOREACH img IN cover_images %]
278
                                    [% IF img %]
279
                                        <li id="imagenumber-[% img.imagenumber | html %]" class="thumbnail">
280
                                            <a class="show_cover" data-coverimg="[% img.imagenumber | html %]" href="/cgi-bin/koha/catalogue/imageviewer.pl?biblionumber=[% biblionumber | html %]&amp;imagenumber=[% img.imagenumber | html %]">
281
                                                [% IF ( imagenumber == img.imagenumber ) %]
282
                                                    <img class="selected" id="thumbnail_[% img.imagenumber | html %]" src="/cgi-bin/koha/catalogue/image.pl?imagenumber=[% img.imagenumber | html %]&amp;thumbnail=1" alt="Thumbnail" />
283
                                                [% ELSE %]
284
                                                    <img id="thumbnail_[% img.imagenumber | html %]" src="/cgi-bin/koha/catalogue/image.pl?imagenumber=[% img.imagenumber | html %]&amp;thumbnail=1" alt="Thumbnail" />
285
                                                [% END %]
286
                                            </a>
287
                                            <a href="#" class="remove" data-coverimg="[% img.imagenumber | html %]"><i class="fa fa-trash"></i> Delete image</a>
288
                                        </li>
289
                                    [% END # /IF img %]
290
                                [% END # /FOREACH img %]
291
                            </ul> <!-- /ul.thumbnails -->
292
                        </div> <!-- /.col-sm-3 -->
293
                    [% END # /IF images.size %]
294
295
                </div> <!-- /.row -->
197
            </main>
296
            </main>
198
        </div> <!-- /.col-sm-10.col-sm-push-2 -->
297
        </div> <!-- /.col-sm-10.col-sm-push-2 -->
199
298
Lines 206-225 Link Here
206
305
207
[% MACRO jsinclude BLOCK %]
306
[% MACRO jsinclude BLOCK %]
208
    [% Asset.js("js/tools-menu.js") | $raw %]
307
    [% Asset.js("js/tools-menu.js") | $raw %]
209
    [% Asset.js("js/file-upload.js") | $raw %]
210
    <script>
308
    <script>
211
        function StartUpload() {
309
        var interface = "[% interface | html %]";
212
            if( $('#fileToUpload').prop('files').length == 0 ) return;
310
        var theme = "[% theme | html %]";
311
        var biblionumber = "[% biblionumber | html %]";
312
        $(document).ready(function(){
313
            $("html").on("drop", function(e) {
314
                e.preventDefault();
315
                e.stopPropagation();
316
            });
317
318
            $("#zipfile").click(function(){
319
                $("biblionumber_entry").hide();
320
            });
321
322
            $("#image").click(function(){
323
                $("#biblionumber_entry").show();
324
            });
325
326
            $("#uploadfile").validate({
327
                submitHandler: function(form) {
328
                    StartUpload();
329
                    return false;
330
                }
331
            });
332
333
            $()
334
335
            $("#filedrag").on("click", ".cancel_image", function(){
336
                $("#click_to_select").show();
337
                $("#messages").html("");
338
                $("#fileToUpload").prop( "disabled", false );
339
                $("#process_images, #fileuploadstatus").hide();
340
                return false;
341
            }).on("click", ".save_image", function(e){
342
                e.preventDefault();
343
                $("#processfile").submit();
344
            });
345
346
            $("html").on("drop", function(e) {
347
                /* Prevent the default browser action when image is dropped */
348
                /* i.e. don't navigate to a view of the local image */
349
                e.preventDefault();
350
                e.stopPropagation();
351
            });
352
353
            $('#filedrag').on('dragenter dragover dragleave', function (e) {
354
                /* Handle various drag and drop events in "Drop files" area */
355
                /* If event type is "dragover," add the "hover" class */
356
                /* otherwise set no class name */
357
                e.stopPropagation();
358
                e.preventDefault();
359
                e.target.className = (e.type == "dragover" ? "hover" : "");
360
            });
361
362
            $("#filedrag").click(function(){
363
                /* Capture a click inside the drag and drop area */
364
                /* Trigger the <input type="file"> action */
365
                $("#fileToUpload").click();
366
            });
367
368
            // Drop
369
            $('#filedrag').on('drop', function (e) {
370
                e.stopPropagation();
371
                e.preventDefault();
372
                prepUpLoad(e);
373
            });
374
375
            // file selected
376
            $("#fileToUpload").change(function(){
377
                prepUpLoad();
378
            });
379
380
            $('.thumbnails .remove').on("click", function(e) {
381
                e.preventDefault();
382
                var result = confirm(_("Are you sure you want to delete this cover image?"));
383
                var imagenumber = $(this).data("coverimg");
384
                if ( result == true ) {
385
                    removeLocalImage(imagenumber);
386
                }
387
            });
388
        });
389
390
        function prepUpLoad( event ){
391
            $("#click_to_select,#upload_results").hide();
392
            $("#messages").html("");
393
            if( event ){
394
                var file = event.originalEvent.dataTransfer.files[0];
395
            } else {
396
                var file = $('#fileToUpload')[0].files[0];
397
            }
398
399
            $("#fileuploadstatus, #upload_options").show();
400
            var fd = new FormData();
401
            fd.append('file', file);
402
            if( ParseFile( file ) ){
403
                StartUpload( fd );
404
            }
405
        }
406
407
        function StartUpload( fd ) {
213
            $('#uploadform button.submit').prop('disabled',true);
408
            $('#uploadform button.submit').prop('disabled',true);
214
            $("#fileuploadstatus").show();
215
            $("#uploadedfileid").val('');
409
            $("#uploadedfileid").val('');
216
            xhr= AjaxUpload( $('#fileToUpload'), $('#fileuploadprogress'), 'temp=1', cbUpload );
410
            xhr= AjaxUpload( fd, $('#fileuploadprogress'), 'temp=1', cbUpload );
217
        }
411
        }
218
        function cbUpload( status, fileid, errors ) {
412
        function cbUpload( status, fileid, errors ) {
219
            if( status=='done' ) {
413
            if( status=='done' ) {
220
                $("#uploadedfileid").val( fileid );
414
                $("#uploadedfileid").val( fileid );
221
                $('#fileToUpload').prop('disabled',true);
415
                $('#fileToUpload').prop('disabled',true);
222
                $("#processfile").show();
416
                $("#process_images").show();
223
            } else {
417
            } else {
224
                var errMsgs = [ _("Error code 0 not used"), _("File already exists"), _("Directory is not writeable"), _("Root directory for uploads not defined"), _("Temporary directory for uploads not defined") ];
418
                var errMsgs = [ _("Error code 0 not used"), _("File already exists"), _("Directory is not writeable"), _("Root directory for uploads not defined"), _("Temporary directory for uploads not defined") ];
225
                var errCode = errors[$('#fileToUpload').prop('files')[0].name].code;
419
                var errCode = errors[$('#fileToUpload').prop('files')[0].name].code;
Lines 232-252 Link Here
232
                $("#processfile").hide();
426
                $("#processfile").hide();
233
            }
427
            }
234
        }
428
        }
235
        $(document).ready(function(){
429
236
            $("#processfile").hide();
430
        function AjaxUpload ( formData, progressbar, xtra, callback ) {
237
            $("#zipfile").click(function(){
431
            var xhr= new XMLHttpRequest();
238
                $("#bibnum").hide();
432
            var url= '/cgi-bin/koha/tools/upload-file.pl?' + xtra;
239
            });
433
            progressbar.val( 0 );
240
            $("#image").click(function(){
434
            progressbar.next('.fileuploadpercent').text( '0' );
241
                $("#bibnum").show();
435
            xhr.open('POST', url, true);
242
            });
436
            xhr.upload.onprogress = function (e) {
243
            $("#uploadfile").validate({
437
                var p = Math.round( (e.loaded/e.total) * 100 );
244
                submitHandler: function(form) {
438
                progressbar.val( p );
245
                    StartUpload();
439
                progressbar.next('.fileuploadpercent').text( p );
246
                    return false;
440
            }
441
            xhr.onload = function (e) {
442
                var data = JSON.parse( xhr.responseText );
443
                if( data.status == 'done' ) {
444
                    progressbar.val( 100 );
445
                    progressbar.next('.fileuploadpercent').text( '100' );
446
                }
447
                callback( data.status, data.fileid, data.errors );
448
            }
449
            xhr.onerror = function (e) {
450
                // Probably only fires for network failure
451
                alert(_("An error occurred while uploading.") );
452
            }
453
            xhr.send( formData );
454
            return xhr;
455
        }
456
457
        // output file information
458
        function ParseFile(file) {
459
            var valid = true;
460
            if (file.type.indexOf("image") == 0) {
461
                /* If the uploaded file is an image, show it */
462
                var reader = new FileReader();
463
                reader.onload = function(e) {
464
                    Output(
465
                        '<p><img class="cover_preview" src="' + e.target.result + '" /></p>'
466
                    );
467
                }
468
                $("#biblionumber_entry").show().find("input,label").addClass("required").prop("required", true );
469
                $("#image").prop("checked", true ).change();
470
                $("#zipfile").prop("checked", false );
471
                reader.readAsDataURL(file);
472
            } else if( file.type.indexOf("zip") > 0) {
473
                Output(
474
                    '<p><i class="fa fa-file-archive-o" aria-hidden="true"></i></p>'
475
                );
476
                $("#biblionumber_entry").hide();
477
                $("#image").prop("checked", false );
478
                $("#zipfile").prop("checked", true );
479
            } else {
480
                Output(
481
                    '<div class="dialog alert"><strong>' + _("Error:") + ' </strong> ' + _("This tool only accepts ZIP files or GIF, JPEG, PNG, or XPM images.") + '</div>'
482
                );
483
                valid = false;
484
                resetForm();
485
            }
486
487
            Output(
488
                    "<p>" + _("File name:") + " <strong>" + file.name + "</strong><br />" +
489
                    _("File type:") + " <strong>" + file.type + "</strong><br />" +
490
                    _("File size:") + " <strong>" + convertSize( file.size ) + "</strong>"
491
            );
492
            return valid;
493
        }
494
495
        // output information
496
        function Output(msg) {
497
            var m = document.getElementById("messages");
498
            m.innerHTML = msg + m.innerHTML;
499
        }
500
501
        // Bytes conversion
502
        function convertSize(size) {
503
            var sizes = ['Bytes', 'KB', 'MB', 'GB', 'TB'];
504
            if (size == 0) return '0 Byte';
505
            var i = parseInt(Math.floor(Math.log(size) / Math.log(1024)));
506
            return Math.round(size / Math.pow(1024, i), 2) + ' ' + sizes[i];
507
        }
508
509
        function removeLocalImage(imagenumber) {
510
            var thumbnail = $("#imagenumber-" + imagenumber );
511
            var copy = thumbnail.html();
512
            thumbnail.find("img").css("opacity", ".2");
513
            thumbnail.find("a.remove").html("<img style='display:inline-block' src='" + interface + "/" + theme + "/img/spinner-small.gif' alt='' />");
514
515
            $.ajax({
516
                url: "/cgi-bin/koha/svc/cover_images?action=delete&biblionumber=" + biblionumber + "&imagenumber=" + imagenumber,
517
                success: function(data) {
518
                    $(data).each( function() {
519
                        if ( this.deleted == 1 ) {
520
                            location.href="/cgi-bin/koha/tools/upload-cover-image.pl?biblionumber=" + biblionumber;
521
                        } else {
522
                            thumbnail.html( copy );
523
                            alert(_("An error occurred on deleting this image"));
524
                        }
525
                    });
526
                },
527
                error: function(data) {
528
                    thumbnail.html( copy );
529
                    alert(_("An error occurred on deleting this image"));
247
                }
530
                }
248
            });
531
            });
249
        });
532
        }
533
534
        function resetForm(){
535
            $("#uploadpanel,#upload_options,#process_images").hide();
536
            $("#click_to_select").show();
537
        }
250
    </script>
538
    </script>
251
[% END %]
539
[% END %]
252
540
(-)a/tools/upload-cover-image.pl (-11 / +56 lines)
Lines 75-87 my $sessionID = $cookies{'CGISESSID'}->value; Link Here
75
75
76
my $error;
76
my $error;
77
77
78
my $biblio;
79
my $cover_images;
80
my $item;
81
82
if ( $itemnumber ) {
83
    $item = Koha::Items->find($itemnumber);
84
    $biblionumber = $item->biblionumber;
85
    $biblio = Koha::Biblios->find( $biblionumber );
86
    $cover_images = $item->cover_images->as_list;
87
} elsif ( $biblionumber ){
88
    $biblio = Koha::Biblios->find( $biblionumber );
89
    $cover_images = $biblio->cover_images->as_list;
90
}
91
78
$template->param(
92
$template->param(
79
    filetype     => $filetype,
93
    filetype     => $filetype,
94
    biblio       => $biblio,
80
    biblionumber => $biblionumber,
95
    biblionumber => $biblionumber,
81
    itemnumber   => $itemnumber,
96
    itemnumber   => $itemnumber,
97
    cover_images => $cover_images,
82
);
98
);
83
99
84
my $total = 0;
100
my $total = 0;
101
my @results;
85
102
86
if ($fileID) {
103
if ($fileID) {
87
    my $upload = Koha::UploadedFiles->find( $fileID );
104
    my $upload = Koha::UploadedFiles->find( $fileID );
Lines 175-191 if ($fileID) { Link Here
175
                                logaction('CATALOGUING', 'MODIFY', $biblionumber, "biblio cover image: $filename");
192
                                logaction('CATALOGUING', 'MODIFY', $biblionumber, "biblio cover image: $filename");
176
                            }
193
                            }
177
                            my $srcimage = GD::Image->new("$dir/$filename");
194
                            my $srcimage = GD::Image->new("$dir/$filename");
195
                            my $biblio;
196
                            my $item;
178
                            if ( defined $srcimage ) {
197
                            if ( defined $srcimage ) {
179
                                $total++;
198
                                $total++;
180
                                eval {
199
                                eval {
181
                                    if ( $replace ) {
200
                                    if ( $replace ) {
182
                                        if ( $biblionumber ) {
201
                                        if ( $biblionumber ) {
183
                                            Koha::Biblios->find($biblionumber)->cover_images->delete;
202
                                            $biblio = Koha::Biblios->find( $biblionumber );
203
                                            $biblio->cover_images->delete;
184
                                        } elsif ( $itemnumber ) {
204
                                        } elsif ( $itemnumber ) {
185
                                            Koha::Items->find($itemnumber)->cover_images->delete;
205
                                            $item = Koha::Items->find($itemnumber);
206
                                            $item->cover_images->delete;
207
                                            $biblio = Koha::Biblios->find( $item->{biblionumber} );
208
                                        }
209
                                    } else {
210
                                        if( $biblionumber ){
211
                                            $biblio = Koha::Biblios->find( $biblionumber );
212
                                        } elsif ( $itemnumber ){
213
                                            $item = Koha::Items->find($itemnumber);
214
                                            $biblio = Koha::Biblios->find( $item->{biblionumber} );
215
                                        } else {
216
                                            warn "Problem.";
186
                                        }
217
                                        }
187
                                    }
218
                                    }
188
219
220
                                    push @results, {
221
                                        biblionumber => $biblionumber,
222
                                        itemnumber => $itemnumber,
223
                                        title => $biblio->title
224
                                    };
225
189
                                    Koha::CoverImage->new(
226
                                    Koha::CoverImage->new(
190
                                        {
227
                                        {
191
                                            biblionumber => $biblionumber,
228
                                            biblionumber => $biblionumber,
Lines 213-226 if ($fileID) { Link Here
213
            }
250
            }
214
        }
251
        }
215
    }
252
    }
216
253
    if( $error ){
217
    $template->param(
254
        $template->param(
218
        total        => $total,
255
            total        => $total,
219
        uploadimage  => 1,
256
            uploadimage  => 1,
220
        error        => $error,
257
            error        => $error,
221
        biblionumber => $biblionumber || Koha::Items->find($itemnumber)->biblionumber,
258
            biblionumber => $biblionumber || Koha::Items->find($itemnumber)->biblionumber,
222
        itemnumber   => $itemnumber,
259
            itemnumber   => $itemnumber,
223
    );
260
        );
261
    } elsif ( @results ){
262
        $template->param(
263
            total        => $total,
264
            uploadimage  => 1,
265
            results      => \@results
266
        );
267
    } else {
268
        print $input->redirect("/cgi-bin/koha/tools/upload-cover-image.pl?biblionumber=$biblionumber&itemnumber=$itemnumber");
269
    }
224
}
270
}
225
271
226
output_html_with_http_headers $input, $cookie, $template->output;
272
output_html_with_http_headers $input, $cookie, $template->output;
227
- 

Return to bug 25025