diff options
Diffstat (limited to 'admin')
-rw-r--r-- | admin/derivatives_build.php | 30 | ||||
-rw-r--r-- | admin/include/functions.php | 3 | ||||
-rw-r--r-- | admin/include/image.class.php | 1 | ||||
-rw-r--r-- | admin/themes/default/template/derivatives.tpl | 1 | ||||
-rw-r--r-- | admin/themes/default/template/derivatives_build.tpl | 152 |
5 files changed, 184 insertions, 3 deletions
diff --git a/admin/derivatives_build.php b/admin/derivatives_build.php new file mode 100644 index 000000000..4203124ac --- /dev/null +++ b/admin/derivatives_build.php @@ -0,0 +1,30 @@ +<?php +// +-----------------------------------------------------------------------+ +// | Piwigo - a PHP based photo gallery | +// +-----------------------------------------------------------------------+ +// | Copyright(C) 2008-2011 Piwigo Team http://piwigo.org | +// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net | +// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick | +// +-----------------------------------------------------------------------+ +// | This program is free software; you can redistribute it and/or modify | +// | it under the terms of the GNU General Public License as published by | +// | the Free Software Foundation | +// | | +// | This program is distributed in the hope that it will be useful, but | +// | WITHOUT ANY WARRANTY; without even the implied warranty of | +// | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | +// | General Public License for more details. | +// | | +// | You should have received a copy of the GNU General Public License | +// | along with this program; if not, write to the Free Software | +// | Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, | +// | USA. | +// +-----------------------------------------------------------------------+ + +defined('PHPWG_ROOT_PATH') or trigger_error('Hacking attempt!', E_USER_ERROR); + +$template->assign('derivatives', array_keys(ImageStdParams::get_defined_type_map())); + +$template->set_filename('derivatives', 'derivatives_build.tpl'); +$template->assign_var_from_handle('ADMIN_CONTENT', 'derivatives'); +?>
\ No newline at end of file diff --git a/admin/include/functions.php b/admin/include/functions.php index 59e59e5c2..84bae9154 100644 --- a/admin/include/functions.php +++ b/admin/include/functions.php @@ -200,11 +200,8 @@ SELECT $files = array(); $files[] = get_element_path($row); - if (!empty($row['representative_ext'])) { - $pi = pathinfo($row['path']); - $file_wo_ext = get_filename_wo_extension($pi['basename']); $files[] = original_to_representative( $files[0], $row['representative_ext']); } diff --git a/admin/include/image.class.php b/admin/include/image.class.php index 03cf419a4..c8e61a829 100644 --- a/admin/include/image.class.php +++ b/admin/include/image.class.php @@ -704,6 +704,7 @@ class image_gd implements imageInterface // Place the source image in the destination image imagecopy($cut, $ioverlay, 0, 0, 0, 0, $ow, $oh); imagecopymerge($this->image, $cut, $x, $y, 0, 0, $ow, $oh, $opacity); + imagedestroy($cut); return true; } diff --git a/admin/themes/default/template/derivatives.tpl b/admin/themes/default/template/derivatives.tpl index 59f6344a7..dcf52a4ec 100644 --- a/admin/themes/default/template/derivatives.tpl +++ b/admin/themes/default/template/derivatives.tpl @@ -22,6 +22,7 @@ </style> {/literal}{/html_head} +<p><a href="admin.php?page=derivatives_build">Build missing derivatives</a></p> <form method="post" id="derviativesForm"> <fieldset> <legend>{'Watermark'|@translate}</legend> diff --git a/admin/themes/default/template/derivatives_build.tpl b/admin/themes/default/template/derivatives_build.tpl new file mode 100644 index 000000000..6e0c8e35d --- /dev/null +++ b/admin/themes/default/template/derivatives_build.tpl @@ -0,0 +1,152 @@ +{html_head}{literal} +<style type="text/css"> +TABLE { + font-size: larger; +} +</style> +{/literal}{/html_head} + +<p> + <select id="types" name="types[]" multiple="multiple"> + {foreach from=$derivatives item=type} + <option value="{$type}" selected="selected">{$type|@translate}</option> + {/foreach} + </select> + <input id="startLink" value="{'Start'|@translate}" onclick="start()" type="button"> + <input id="pauseLink" value="{'Pause'|@translate}" onclick="pause()" type="button" disabled="disbled"> + <input id="stopLink" value="{'Stop'|@translate}" onclick="stop()" type="button" disabled="disbled"> +</p> +<hr/> +<p> +<table> + <tr> + <td>Errors</td> + <td id="errors">0</td> + </tr> + <tr> + <td>Loaded</td> + <td id="loaded">0</td> + </tr> + <tr> + <td>Remaining</td> + <td id="remaining">0</td> + </tr> +</table> +<div id="feedbackWrap" style="height:320px; min-height:320px;"> +<img id="feedbackImg"> +</div> +</p> + +<div id="errorList"> +</div> + +{combine_script id='iloader' load='footer' path='themes/default/js/image.loader.js'} + +{footer_script require='jquery.effects.slide'}{literal} + +var loader = new ImageLoader( {onChanged: loaderChanged} ) + , pending_next_page = null + , last_image_show_time = 0 + , allDoneDfd, urlDfd; + +function start() { + allDoneDfd = jQuery.Deferred(); + urlDfd = jQuery.Deferred(); + + allDoneDfd.always( function() { + jQuery("#startLink").attr('disabled', false).css("opacity", 1); + jQuery("#pauseLink,#stopLink").attr('disabled', true).css("opacity", 0.5); + } ); + + urlDfd.always( function() { + if (loader.remaining()==0) + allDoneDfd.resolve(); + } ); + + jQuery("#startLink").attr('disabled', true).css("opacity", 0.5); + jQuery("#pauseLink,#stopLink").attr('disabled', false).css("opacity", 1); + + loader.pause(false); + updateStats(); + getUrls(); +} + +function pause() { + loader.pause( !loader.pause() ); +} + +function stop() { + loader.clear(); + urlDfd.resolve(); +} + +function getUrls(page_token) { + data = {max_urls: 500, types: []}; + jQuery.each(jQuery("#types").serializeArray(), function(i, t) { + data.types.push( t.value ); + } ); + + if (page_token) + data['prev_page'] = page_token; + jQuery.post( '{/literal}{$ROOT_URL}{literal}ws.php?format=json&method=pwg.getMissingDerivatives', + data, wsData, "json").fail( wsError ); +} + +function wsData(data) { + if (!data.stat || data.stat != "ok") { + wsError(); + return; + } + loader.add( data.result.urls ); + if (data.result.next_page) { + if (loader.pause() || loader.remaining() > 100) { + pending_next_page = data.result.next_page; + } + else { + getUrls(data.result.next_page); + } + } +} + +function wsError() { + urlDfd.reject(); +} + +function updateStats() { + jQuery("#loaded").text( loader.loaded ); + jQuery("#errors").text( loader.errors ); + jQuery("#remaining").text( loader.remaining() ); +} + +function loaderChanged(type, img) { + updateStats(); + if (img) { + if (type==="load") { + var now = jQuery.now(); + if (now - last_image_show_time > 3000) { + last_image_show_time = now; + var h=img.height, url=img.src; + jQuery("#feedbackWrap").hide("slide", {direction:'down'}, function() { + last_image_show_time = jQuery.now(); + if (h > 300 ) + jQuery("#feedbackImg").attr("height", 300); + else + jQuery("#feedbackImg").removeAttr("height"); + jQuery("#feedbackImg").attr("src", url); + jQuery("#feedbackWrap").show("slide", {direction:'up'} ); + } ); + } + } + else { + jQuery("#errorList").prepend( '<a href="'+img.src+'">'+img.src+'</a>' + "<br>"); + } + } + if (pending_next_page && 100 > loader.remaining() ) { + getUrls(pending_next_page); + pending_next_page = null; + } + else if (loader.remaining() == 0 && (urlDfd.isResolved() || urlDfd.isRejected())) { + allDoneDfd.resolve(); + } +} +{/literal}{/footer_script}
\ No newline at end of file |