From 336fdb764f5ce2ff76c5ddf74811deadf43e6906 Mon Sep 17 00:00:00 2001 From: Andreas Lenhardt Date: Sun, 5 Feb 2023 12:54:59 +0100 Subject: [PATCH] 1.0.0 --- CHANGELOG.md | 7 ++++++ LICENSE | 2 +- README.de.md | 1 - README.md | 13 ++++------- boot.php | 43 ++++++++++++++++++++++++++++++++++- lib/rex_effect_negotiator.php | 34 +++++++++++++++++++++++++++ package.yml | 13 ++++++----- 7 files changed, 96 insertions(+), 17 deletions(-) create mode 100644 CHANGELOG.md delete mode 100644 README.de.md create mode 100644 lib/rex_effect_negotiator.php diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 0000000..47d84d4 --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,7 @@ +# Changelog + + +## [1.0.0] - 05.02.2023 + +### Changed +- initial release diff --git a/LICENSE b/LICENSE index 69c57ce..585c49e 100644 --- a/LICENSE +++ b/LICENSE @@ -1,6 +1,6 @@ MIT License -Copyright (c) 2023 Friends Of REDAXO +Copyright (c) 2023 Andreas Lenhardt Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/README.de.md b/README.de.md deleted file mode 100644 index c513c91..0000000 --- a/README.de.md +++ /dev/null @@ -1 +0,0 @@ -Deutsche Readme diff --git a/README.md b/README.md index 1acbfea..db3b60a 100644 --- a/README.md +++ b/README.md @@ -1,10 +1,7 @@ -# rex_repo_template -REDAXO AddOn english readme +# media_negotiator -please use in your classes a namespace as +Addon für Redaxo welches dem Media Manager Addon einen Effekt für Content Negotiation hinzufügt. Siehe https://developer.mozilla.org/en-US/docs/Web/HTTP/Content_negotiation -``` -namespace FriendsOfRedaxo\[AddOnNameWithoutSpacesAndAsCamelCase] -``` - -in order to use non deprecated features please don't use PlugIns anymore +Anleitung: +Dem Media Profil den Effekt "Negotiate image format" hinzufügen. +Danach wird automatisch eines der folgenden Formate ausgeliefert: avif, webp, jpg (in dieser Reihenfolge). diff --git a/boot.php b/boot.php index 7c16537..2779feb 100644 --- a/boot.php +++ b/boot.php @@ -1 +1,42 @@ -getSubject(); + + // check if the requested image has the 'negotiator' effect + $set_effects = $subject->effectsFromType($subject->getMediaType()); + $set_effects = array_column($set_effects, 'effect'); + $type = $subject->getMediaType(); + + // if not, skip + if (!in_array('negotiator', $set_effects)) { + return $subject; + } + + // if yes, set cache path + if (in_array($type, ['avif'])) { + $possible_types = rex_server('HTTP_ACCEPT', 'string', ''); + $types = explode(',', $possible_types); + + + if (in_array('image/avif', $types)) { + $subject->setCachePath($subject->getCachePath() . 'avif-'); + } elseif (in_array('image/webp', $types)) { + $subject->setCachePath($subject->getCachePath() . 'webp-'); + } else { + $subject->setCachePath($subject->getCachePath() . 'jpg-'); + } + } + + return $subject; +} + + +rex_extension::register('MEDIA_MANAGER_BEFORE_SEND', "negotiateFormat"); + +if (rex_addon::get('media_manager')->isAvailable()) { + rex_media_manager::addEffect(rex_effect_negotiator::class); +} diff --git a/lib/rex_effect_negotiator.php b/lib/rex_effect_negotiator.php new file mode 100644 index 0000000..b193c76 --- /dev/null +++ b/lib/rex_effect_negotiator.php @@ -0,0 +1,34 @@ +media = $this->media; + + // set convert_to extension + if (in_array('image/avif', $types)) { + $re->params['convert_to'] = 'avif'; + } elseif (in_array('image/webp', $types)) { + $re->params['convert_to'] = 'webp'; + } else { + $re->params['convert_to'] = 'jpg'; + } + + // change format + $re->execute(); + } +} diff --git a/package.yml b/package.yml index 1d80324..1c599be 100644 --- a/package.yml +++ b/package.yml @@ -1,8 +1,9 @@ -package: addon_key -version: '0.0.0' -author: 'Friends Of REDAXO' -supportpage: https://github.com/FriendsOfREDAXO/addon_key +package: media_negotiator +version: 1.0.0 +name: Media Negotiator +author: Andreas Lenhardt + requires: - redaxo: '^5.13.0' + redaxo: ^5.13.0 php: - version: '>=7.3, <9' + version: "^8.0"