Skip to content

Commit

Permalink
Löschen von Dateien unterbinden, die in Media Manager Effekt verwende…
Browse files Browse the repository at this point in the history
…t werden (#5028)

Co-authored-by: Gregor Harlan <330436+gharlan@users.noreply.github.com>
  • Loading branch information
TobiasKrais and gharlan committed Feb 6, 2022
1 parent c1be6a8 commit 3eb7072
Show file tree
Hide file tree
Showing 2 changed files with 31 additions and 0 deletions.
1 change: 1 addition & 0 deletions redaxo/src/addons/media_manager/boot.php
Expand Up @@ -15,4 +15,5 @@
// delete thumbnails on mediapool changes
rex_extension::register('MEDIA_UPDATED', [rex_media_manager::class, 'mediaUpdated']);
rex_extension::register('MEDIA_DELETED', [rex_media_manager::class, 'mediaUpdated']);
rex_extension::register('MEDIA_IS_IN_USE', [rex_media_manager::class, 'mediaIsInUse']);
}
30 changes: 30 additions & 0 deletions redaxo/src/addons/media_manager/lib/media_manager.php
Expand Up @@ -424,6 +424,36 @@ private static function getEffectClass(string $effectFile): string
* For ExtensionPoints.
*/

/**
* Checks if media is used by this addon.
* @return string[] Warning message as array
*/
public static function mediaIsInUse(rex_extension_point $ep)
{
/** @var string[] $warning */
$warning = $ep->getSubject();
$filename = $ep->getParam('filename');
assert(is_string($filename));

$sql = rex_sql::factory();
$sql->setQuery('
SELECT DISTINCT effect.id AS effect_id, effect.type_id, type.id, type.name
FROM `' . rex::getTable('media_manager_type_effect') . '` AS effect
LEFT JOIN `' . rex::getTable('media_manager_type') . '` AS type ON effect.type_id = type.id
WHERE parameters LIKE ?
', ['%'.$sql->escapeLikeWildcards(json_encode($filename)).'%']);

for ($i = 0; $i < $sql->getRows(); ++$i) {
$message = '<a href="javascript:openPage(\''. rex_url::backendPage('media_manager/types', ['effects' => 1, 'type_id' => $sql->getValue('type_id'), 'effect_id' => $sql->getValue('effect_id'), 'func' => 'edit']) .'\')">'. rex_i18n::msg('media_manager') .' '. rex_i18n::msg('media_manager_effect_name') .': '. (string) $sql->getValue('name') .'</a>';

if (!in_array($message, $warning)) {
$warning[] = $message;
}
}

return $warning;
}

public static function mediaUpdated(rex_extension_point $ep)
{
self::deleteCache((string) $ep->getParam('filename'));
Expand Down

0 comments on commit 3eb7072

Please sign in to comment.