source: extensions/community/add_photos.tpl @ 19058

Last change on this file since 19058 was 16637, checked in by plg, 12 years ago

Compatibility with Piwigo 2.4

Better "zoom" feature on gallery side and admin side

Bug fixed: the "Upload Photos" link in menubar is hidden when Advanced Menu Manager is activated.

File size: 16.8 KB
RevLine 
[12333]1{if $upload_mode eq 'multiple'}
[9372]2{combine_script id='jquery.jgrowl' load='footer' require='jquery' path='themes/default/js/plugins/jquery.jgrowl_minimized.js' }
[12333]3{combine_script id='jquery.uploadify' load='footer' require='jquery' path='admin/include/uploadify/jquery.uploadify.v3.0.0.min.js' }
4{combine_script id='jquery.ui.progressbar' load='footer'}
5{combine_css path="admin/themes/default/uploadify.jGrowl.css"}
6{combine_css path="admin/include/uploadify/uploadify.css"}
[9372]7{/if}
8
[12333]9{combine_script id='jquery.colorbox' load='footer' require='jquery' path='themes/default/js/plugins/jquery.colorbox.min.js'}
10{combine_css path="themes/default/js/plugins/colorbox/style2/colorbox.css"}
[9372]11
12{footer_script}{literal}
13jQuery(document).ready(function(){
14  function checkUploadStart() {
15    var nbErrors = 0;
[10171]16    jQuery("#formErrors").hide();
17    jQuery("#formErrors li").hide();
[9372]18
[12333]19    if (jQuery("#albumSelect option:selected").length == 0) {
20      jQuery("#formErrors #noAlbum").show();
[9372]21      nbErrors++;
22    }
23
24    var nbFiles = 0;
[10171]25    if (jQuery("#uploadBoxes").size() == 1) {
26      jQuery("input[name^=image_upload]").each(function() {
27        if (jQuery(this).val() != "") {
[9372]28          nbFiles++;
29        }
30      });
31    }
32    else {
[10171]33      nbFiles = jQuery(".uploadifyQueueItem").size();
[9372]34    }
35
36    if (nbFiles == 0) {
[10171]37      jQuery("#formErrors #noPhoto").show();
[9372]38      nbErrors++;
39    }
40
41    if (nbErrors != 0) {
[10171]42      jQuery("#formErrors").show();
[9372]43      return false;
44    }
45    else {
46      return true;
47    }
48
49  }
50
51  function humanReadableFileSize(bytes) {
52    var byteSize = Math.round(bytes / 1024 * 100) * .01;
53    var suffix = 'KB';
54
55    if (byteSize > 1000) {
56      byteSize = Math.round(byteSize *.001 * 100) * .01;
57      suffix = 'MB';
58    }
59
60    var sizeParts = byteSize.toString().split('.');
61    if (sizeParts.length > 1) {
62      byteSize = sizeParts[0] + '.' + sizeParts[1].substr(0,2);
63    }
64    else {
65      byteSize = sizeParts[0];
66    }
67
68    return byteSize+suffix;
69  }
70
[12333]71  function fillCategoryListbox(selectId, selectedValue) {
72    jQuery.getJSON(
73      "ws.php?format=json&method=pwg.categories.getList",
74      {
75        recursive: true,
76        fullname: true,
77        format: "json",
78      },
79      function(data) {
80        jQuery.each(
81          data.result.categories,
82          function(i,category) {
83            var selected = null;
84            if (category.id == selectedValue) {
85              selected = "selected";
86            }
87           
88            jQuery("<option/>")
89              .attr("value", category.id)
90              .attr("selected", selected)
91              .text(category.name)
92              .appendTo("#"+selectId)
93              ;
94          }
95        );
96      }
97    );
[9372]98  }
99
[12333]100  jQuery(".addAlbumOpen").colorbox({
101    inline:true,
102    href:"#addAlbumForm",
103    onComplete:function(){
104      jQuery("input[name=category_name]").focus();
105    }
[9372]106  });
107
[12333]108  jQuery("#addAlbumForm form").submit(function(){
109      jQuery("#categoryNameError").text("");
110
111      jQuery.ajax({
112        url: "ws.php?format=json&method=pwg.categories.add",
113        data: {
114          parent: jQuery("select[name=category_parent] option:selected").val(),
115          name: jQuery("input[name=category_name]").val(),
116        },
117        beforeSend: function() {
118          jQuery("#albumCreationLoading").show();
119        },
120        success:function(html) {
121          jQuery("#albumCreationLoading").hide();
122
123          var newAlbum = jQuery.parseJSON(html).result.id;
124          jQuery(".addAlbumOpen").colorbox.close();
125
126          jQuery("#albumSelect").find("option").remove();
127          fillCategoryListbox("albumSelect", newAlbum);
128
129          jQuery(".albumSelection").show();
130
131          /* we hide the ability to create another album, this is different from the admin upload form */
132          /* in Community, it's complicated to refresh the list of parent albums                       */
133          jQuery("#linkToCreate").hide();
134
135          return true;
136        },
137        error:function(XMLHttpRequest, textStatus, errorThrows) {
138            jQuery("#albumCreationLoading").hide();
139            jQuery("#categoryNameError").text(errorThrows).css("color", "red");
140        }
141      });
142
143      return false;
144  });
145
[10171]146  jQuery("#hideErrors").click(function() {
147    jQuery("#formErrors").hide();
[9372]148    return false;
149  });
150
[12333]151  jQuery("#uploadWarningsSummary a.showInfo").click(function() {
152    jQuery("#uploadWarningsSummary").hide();
153    jQuery("#uploadWarnings").show();
[9372]154  });
155
[12333]156  jQuery("#showPermissions").click(function() {
157    jQuery(this).parent(".showFieldset").hide();
158    jQuery("#permissions").show();
159  });
160
161  jQuery("#showPhotoProperties").click(function() {
162    jQuery(this).parent(".showFieldset").hide();
163    jQuery("#photoProperties").show();
[12616]164    jQuery("input[name=set_photo_properties]").attr('checked', true);
[12333]165  });
166
[9372]167{/literal}
168{if $upload_mode eq 'html'}
169{literal}
170  function addUploadBox() {
171    var uploadBox = '<p class="file"><input type="file" size="60" name="image_upload[]"></p>';
[10171]172    jQuery(uploadBox).appendTo("#uploadBoxes");
[9372]173  }
174
175  addUploadBox();
176
[10171]177  jQuery("#addUploadBox A").click(function () {
[9372]178    addUploadBox();
179  });
180
[10171]181  jQuery("#uploadForm").submit(function() {
[9372]182    return checkUploadStart();
183  });
184{/literal}
185{elseif $upload_mode eq 'multiple'}
186
187var uploadify_path = '{$uploadify_path}';
188var upload_id = '{$upload_id}';
189var session_id = '{$session_id}';
190var pwg_token = '{$pwg_token}';
[12333]191var buttonText = "{'Select files'|@translate}";
192var sizeLimit = Math.round({$upload_max_filesize} / 1024); /* in KBytes */
[9372]193
194{literal}
195  jQuery("#uploadify").uploadify({
[12333]196    'uploader'       : uploadify_path + '/uploadify.php',
197    'langFile'       : uploadify_path + '/uploadifyLang_en.js',
198    'swf'            : uploadify_path + '/uploadify.swf',
199
200    buttonCursor     : 'pointer',
201    'buttonText'     : buttonText,
202    'width'          : 300,
203    'cancelImage'    : uploadify_path + '/cancel.png',
[9372]204    'queueID'        : 'fileQueue',
205    'auto'           : false,
206    'multi'          : true,
[12333]207    'fileTypeDesc'   : 'Photo files',
208    'fileTypeExts'   : '*.jpg;*.JPG;*.jpeg;*.JPEG;*.png;*.PNG;*.gif;*.GIF',
209    'fileSizeLimit'  : sizeLimit,
210    'progressData'   : 'percentage',
211    requeueErrors   : false,
212    'onSelect'       : function(event,ID,fileObj) {
213      jQuery("#fileQueue").show();
214    },
215    'onQueueComplete'  : function(stats) {
216      jQuery("input[name=submit_upload]").click();
217    },
218    onUploadError: function (file,errorCode,errorMsg,errorString,swfuploadifyQueue) {
219      /* uploadify calls the onUploadError trigger when the user cancels a file! */
220      /* There no error so we skip it to avoid panic.                            */
221      if ("Cancelled" == errorString) {
[9372]222        return false;
223      }
224
[12333]225      var msg = file.name+', '+errorString;
[9372]226
[12333]227      /* Let's put the error message in the form to display once the form is     */
228      /* performed, it makes support easier when user can copy/paste the error   */
229      /* thrown.                                                                 */
230      jQuery("#uploadForm").append('<input type="hidden" name="onUploadError[]" value="'+msg+'">');
231
[10171]232      jQuery.jGrowl(
[12333]233        '<p></p>onUploadError '+msg,
[9372]234        {
235          theme:  'error',
236          header: 'ERROR',
[12333]237          life:   4000,
238          sticky: false
[9372]239        }
240      );
241
242      return false;
243    },
[12333]244    onUploadSuccess: function (file,data,response) {
245      var data = jQuery.parseJSON(data);
246      jQuery("#uploadedPhotos").parent("fieldset").show();
247
248      /* Let's display the thumbnail of the uploaded photo, no need to wait the  */
249      /* end of the queue                                                        */
250      jQuery("#uploadedPhotos").prepend('<img src="'+data.thumbnail_url+'" class="thumbnail"> ');
[9372]251    },
[12333]252    onUploadComplete: function(file,swfuploadifyQueue) {
253      var max = parseInt(jQuery("#progressMax").text());
254      var next = parseInt(jQuery("#progressCurrent").text())+1;
255      var addToProgressBar = 2;
256      if (next <= max) {
257        jQuery("#progressCurrent").text(next);
258      }
259      else {
260        addToProgressBar = 1;
261      }
262
263      jQuery("#progressbar").progressbar({
264        value: jQuery("#progressbar").progressbar("option", "value") + addToProgressBar
265      });
[9372]266    }
267  });
268
[10171]269  jQuery("input[type=button]").click(function() {
[9372]270    if (!checkUploadStart()) {
271      return false;
272    }
273
[12333]274    jQuery("#uploadify").uploadifySettings(
275      'postData',
276      {
277        'category_id' : jQuery("select[name=category] option:selected").val(),
278        'level' : jQuery("select[name=level] option:selected").val(),
279        'upload_id' : upload_id,
280        'session_id' : session_id,
281        'pwg_token' : pwg_token,
282      }
283    );
284
285    nb_files = jQuery(".uploadifyQueueItem").size();
286    jQuery("#progressMax").text(nb_files);
287    jQuery("#progressbar").progressbar({max: nb_files*2, value:1});
288    jQuery("#progressCurrent").text(1);
289
290    jQuery("#uploadProgress").show();
291
[10171]292    jQuery("#uploadify").uploadifyUpload();
[9372]293  });
294
295{/literal}
296{/if}
297});
298{/footer_script}
299
300{literal}
[12333]301<style type="text/css">
302/*
303#photosAddContent form p {
304  text-align:left;
305}
306*/
307
[9372]308#photosAddContent FIELDSET {
309  width:650px;
310  margin:20px auto;
311}
312
[10756]313#photosAddContent fieldset#photoProperties {padding-bottom:0}
314#photosAddContent fieldset#photoProperties p {text-align:left;margin:0 0 1em 0;line-height:20px;}
315#photosAddContent fieldset#photoProperties input[type="text"] {width:320px}
316#photosAddContent fieldset#photoProperties textarea {width:500px; height:100px}
317
[9372]318#photosAddContent P {
[12333]319  margin:0;
[9372]320}
321
322#uploadBoxes P {
323  margin:0;
324  margin-bottom:2px;
325  padding:0;
326}
327
[12333]328#uploadBoxes .file {margin-bottom:5px;text-align:left;}
329#uploadBoxes {margin-top:20px;}
330#addUploadBox {margin-bottom:2em;}
[9372]331
[12333]332p#uploadWarningsSummary {text-align:left;margin-bottom:1em;font-size:90%;color:#999;}
333p#uploadWarningsSummary .showInfo {position:static;display:inline;padding:1px 6px;margin-left:3px;}
334p#uploadWarnings {display:none;text-align:left;margin-bottom:1em;font-size:90%;color:#999;}
335p#uploadModeInfos {text-align:left;margin-top:1em;font-size:90%;color:#999;}
[9372]336
[12333]337#photosAddContent p.showFieldset {text-align:left;margin: 0 auto 10px auto;width: 650px;}
338
339#uploadProgress {width:650px; margin:10px auto;font-size:90%;}
340#progressbar {border:1px solid #ccc; background-color:#eee;}
341.ui-progressbar-value { background-image: url(admin/themes/default/images/pbar-ani.gif); height:10px;margin:-1px;border:1px solid #E78F08;}
342
343.showInfo {display:block;position:absolute;top:0;right:5px;width:15px;font-style:italic;font-family:"Georgia",serif;background-color:#464646;font-size:0.9em;border-radius:10px;-moz-border-radius:10px;}
344.showInfo:hover {cursor:pointer}
345.showInfo {color:#fff;background-color:#999; }
346.showInfo:hover {color:#fff;border:none;background-color:#333}
[9372]347</style>
348{/literal}
349
350<div id="photosAddContent">
351
352{if count($setup_errors) > 0}
353<div class="errors">
354  <ul>
355  {foreach from=$setup_errors item=error}
356    <li>{$error}</li>
357  {/foreach}
358  </ul>
359</div>
360{else}
361
362  {if count($setup_warnings) > 0}
363<div class="warnings">
364  <ul>
365    {foreach from=$setup_warnings item=warning}
366    <li>{$warning}</li>
367    {/foreach}
368  </ul>
369  <div class="hideButton" style="text-align:center"><a href="{$hide_warnings_link}">{'Hide'|@translate}</a></div>
370</div>
371  {/if}
372
373
374{if !empty($thumbnails)}
375<fieldset>
376  <legend>{'Uploaded Photos'|@translate}</legend>
377  <div>
378  {foreach from=$thumbnails item=thumbnail}
[16637]379    <a href="{$thumbnail.link}"  class="{if isset($thumbnail.lightbox)}colorboxThumb{else}externalLink{/if}">
[9372]380      <img src="{$thumbnail.src}" alt="{$thumbnail.file}" title="{$thumbnail.title}" class="thumbnail">
381    </a>
382  {/foreach}
383  </div>
384</fieldset>
[12333]385<p style="margin:10px"><a href="{$another_upload_link}">{'Add another set of photos'|@translate}</a></p>
[9372]386{else}
387
388<div id="formErrors" class="errors" style="display:none">
389  <ul>
[12333]390    <li id="noAlbum">{'Select an album'|@translate}</li>
[9372]391    <li id="noPhoto">{'Select at least one photo'|@translate}</li>
392  </ul>
393  <div class="hideButton" style="text-align:center"><a href="#" id="hideErrors">{'Hide'|@translate}</a></div>
394</div>
395
[12333]396<div style="display:none">
397  <div id="addAlbumForm" style="text-align:left;padding:1em;">
398    <form>
399      {'Parent album'|@translate}<br>
400      <select id ="category_parent" name="category_parent">
401        <option value="0">------------</option>
402        {html_options options=$category_parent_options selected=$category_parent_options_selected}
403      </select>
404
405      <br><br>{'Album name'|@translate}<br><input name="category_name" type="text"> <span id="categoryNameError"></span>
406      <br><br><br><input type="submit" value="{'Create'|@translate}"> <span id="albumCreationLoading" style="display:none"><img src="themes/default/images/ajax-loader-small.gif"></span>
407    </form>
408  </div>
409</div>
410
[9372]411<form id="uploadForm" enctype="multipart/form-data" method="post" action="{$form_action}" class="properties">
[12333]412{if $upload_mode eq 'multiple'}
413    <input name="upload_id" value="{$upload_id}" type="hidden">
414{/if}
415
[9372]416    <fieldset>
417      <legend>{'Drop into album'|@translate}</legend>
418
[12333]419      <span class="albumSelection"{if count($category_options) == 0} style="display:none"{/if}>
420      <select id="albumSelect" name="category">
421        {html_options options=$category_options selected=$category_options_selected}
422      </select>
423      </span>
[9372]424{if $create_subcategories}
[12333]425      <div id="linkToCreate">
426      <span class="albumSelection">{'... or '|@translate}</span><a href="#" class="addAlbumOpen" title="{'create a new album'|@translate}">{'create a new album'|@translate}</a>
427      </div>
428{/if}     
429    </fieldset>
[9372]430
[12333]431    <fieldset>
432      <legend>{'Select files'|@translate}</legend>
433
434    <p id="uploadWarningsSummary">{$upload_max_filesize_shorthand}B. {$upload_file_types}. {if isset($max_upload_resolution)}{$max_upload_resolution}Mpx{/if} <a class="showInfo" title="{'Learn more'|@translate}">i</a></p>
435
436    <p id="uploadWarnings">
437{'Maximum file size: %sB.'|@translate|@sprintf:$upload_max_filesize_shorthand}
438{'Allowed file types: %s.'|@translate|@sprintf:$upload_file_types}
439  {if isset($max_upload_resolution)}
440{'Approximate maximum resolution: %dM pixels (that\'s %dx%d pixels).'|@translate|@sprintf:$max_upload_resolution:$max_upload_width:$max_upload_height}
441  {/if}
442    </p>
443
444{if $upload_mode eq 'html'}
445      <div id="uploadBoxes"></div>
446      <div id="addUploadBox">
447        <a href="javascript:">{'+ Add an upload box'|@translate}</a>
[9372]448      </div>
449
[12333]450    <p id="uploadModeInfos">{'You are using the Browser uploader. Try the <a href="%s">Flash uploader</a> instead.'|@translate|@sprintf:$switch_url}</p>
451
452{elseif $upload_mode eq 'multiple'}
453    <div id="uploadify">You've got a problem with your JavaScript</div>
454
455    <div id="fileQueue" style="display:none"></div>
456
457    <p id="uploadModeInfos">{'You are using the Flash uploader. Problems? Try the <a href="%s">Browser uploader</a> instead.'|@translate|@sprintf:$switch_url}</p>
458
[9372]459{/if}
460    </fieldset>
461
[12333]462    <p class="showFieldset"><a id="showPhotoProperties" href="#">{'Set Photo Properties'|@translate}</a></p>
463
464    <fieldset id="photoProperties" style="display:none">
[10756]465      <legend>{'Photo Properties'|@translate}</legend>
466
[12616]467      <input type="checkbox" name="set_photo_properties" style="display:none">
468
[10756]469      <p>
470        {'Name'|@translate}<br>
471        <input type="text" class="large" name="name" value="{$NAME}">
472      </p>
473
474      <p>
475        {'Author'|@translate}<br>
476        <input type="text" class="large" name="author" value="{$AUTHOR}">
477      </p>
478
479      <p>
480        {'Description'|@translate}<br>
481        <textarea name="description" id="description" class="description" style="margin:0">{$DESCRIPTION}</textarea>
482      </p>
483
484    </fieldset>
485
[12333]486{if $enable_permissions}
487    <p class="showFieldset"><a id="showPermissions" href="#">{'Manage Permissions'|@translate}</a></p>
[9372]488
[12333]489    <fieldset id="permissions" style="display:none">
490      <legend>{'Who can see these photos?'|@translate}</legend>
[9372]491
[12333]492      <select name="level" size="1">
493        {html_options options=$level_options selected=$level_options_selected}
494      </select>
[9372]495    </fieldset>
[12333]496{/if}
[9372]497
[12333]498{if $upload_mode eq 'html'}
[9372]499    <p>
[12333]500      <input class="submit" type="submit" name="submit_upload" value="{'Start Upload'|@translate}">
[9372]501    </p>
502{elseif $upload_mode eq 'multiple'}
[12333]503    <p style="margin-bottom:1em">
504      <input class="submit" type="button" value="{'Start Upload'|@translate}">
505      <input type="submit" name="submit_upload" style="display:none">
[9372]506    </p>
[12333]507{/if}
508</form>
[9372]509
[12333]510<div id="uploadProgress" style="display:none">
511{'Photo %s of %s'|@translate|@sprintf:'<span id="progressCurrent">1</span>':'<span id="progressMax">10</span>'}
512<br>
513<div id="progressbar"></div>
514</div>
[9372]515
[12333]516<fieldset style="display:none">
517  <legend>{'Uploaded Photos'|@translate}</legend>
518  <div id="uploadedPhotos"></div>
519</fieldset>
[9372]520
521{/if} {* empty($thumbnails) *}
522{/if} {* $setup_errors *}
523
[16637]524</div> <!-- photosAddContent -->
525
526{* Community specific *}
527{footer_script}{literal}
528jQuery(document).ready(function(){
529  jQuery("a.colorboxThumb").colorbox({rel:"colorboxThumb"});
530
531  jQuery("a.externalLink").click(function() {
532    window.open($(this).attr("href"));
533    return false;
534  });
535});
536{/literal}{/footer_script}
Note: See TracBrowser for help on using the repository browser.