diff --git a/controllers/EditAsset.php b/controllers/EditAsset.php
index 2f79390c..a794fd48 100644
--- a/controllers/EditAsset.php
+++ b/controllers/EditAsset.php
@@ -149,18 +149,19 @@ class EditAsset extends HTMLController
$crop_value = $data->crop_width . ',' . $data->crop_height . ',' . $data->source_x . ',' . $data->source_y;
$meta[$crop_key] = $crop_value;
- // If we uploaded a custom thumbnail, stop considering it such.
+ // If we previously uploaded a custom thumbnail, stop considering it such.
$custom_key = 'custom_' . $data->thumb_width . 'x' . $data->thumb_height;
if (isset($meta[$custom_key]))
+ {
+ // TODO: delete from disk
unset($meta[$custom_key]);
+ }
+
+ // Save meta changes so far.
+ $image->setMetaData($meta);
// Force a rebuild of related thumbnails.
- $thumb_key = 'thumb_' . $data->thumb_width . 'x' . $data->thumb_height;
- foreach ($meta as $meta_key => $meta_value)
- if ($meta_key === $thumb_key || strpos($meta_key, $thumb_key . '_') !== false)
- unset($meta[$meta_key]);
-
- $image->setMetaData($meta);
+ $image->removeThumbnailsOfSize($data->thumb_width, $data->thumb_height);
$payload = [
'key' => $crop_key,
diff --git a/models/Image.php b/models/Image.php
index dae64229..c8205f83 100644
--- a/models/Image.php
+++ b/models/Image.php
@@ -133,9 +133,9 @@ class Image extends Asset
public function removeAllThumbnails()
{
- foreach ($this->thumbnails as $key => $value)
+ foreach ($this->thumbnails as $key => $filename)
{
- $thumb_path = THUMBSDIR . '/' . $this->subdir . '/' . $value;
+ $thumb_path = THUMBSDIR . '/' . $this->subdir . '/' . $filename;
if (is_file($thumb_path))
unlink($thumb_path);
}
@@ -146,6 +146,30 @@ class Image extends Asset
['id_asset' => $this->id_asset]);
}
+ public function removeThumbnailsOfSize($width, $height)
+ {
+ foreach ($this->thumbnails as $key => $filename)
+ {
+ if (strpos($key, $width . 'x' . $height) !== 0)
+ continue;
+
+ $thumb_path = THUMBSDIR . '/' . $this->subdir . '/' . $filename;
+ if (is_file($thumb_path))
+ unlink($thumb_path);
+ }
+
+ return Registry::get('db')->query('
+ DELETE FROM assets_thumbs
+ WHERE id_asset = {int:id_asset} AND
+ width = {int:width} AND
+ height = {int:height}',
+ [
+ 'height' => $height,
+ 'id_asset' => $this->id_asset,
+ 'width' => $width,
+ ]);
+ }
+
public function replaceThumbnail($descriptor, $tmp_file)
{
if (!is_file($tmp_file))
diff --git a/templates/EditAssetForm.php b/templates/EditAssetForm.php
index dc7682c4..490b0d24 100644
--- a/templates/EditAssetForm.php
+++ b/templates/EditAssetForm.php
@@ -141,9 +141,6 @@ class EditAssetForm extends SubTemplate
$first = INF;
foreach ($this->thumbs as $i => $thumb)
{
- if (!$thumb['status'])
- continue;
-
$first = min($i, $first);
echo '
@@ -178,14 +175,12 @@ class EditAssetForm extends SubTemplate
- ';
}
@@ -196,27 +191,27 @@ class EditAssetForm extends SubTemplate
echo '
- ';
}
@@ -259,9 +254,6 @@ class EditAssetForm extends SubTemplate
foreach ($this->thumbs as $thumb)
{
- if (!$thumb['status'])
- continue;
-
echo '