Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 0 additions & 3 deletions src/AppConfig.php
Original file line number Diff line number Diff line change
Expand Up @@ -7,15 +7,13 @@
use craft\cachecascade\CascadeCache;
use craft\cloud\fs\TmpFs;
use craft\cloud\Helper as CloudHelper;
use craft\cloud\imagetransforms\ImageTransform;
use craft\cloud\queue\SqsQueue;
use craft\cloud\web\AssetManager;
use craft\db\Table;
use craft\debug\Module as DebugModule;
use craft\fs\Temp;
use craft\helpers\App;
use craft\log\MonologTarget;
use craft\models\ImageTransform as CraftImageTransform;
use craft\queue\Queue as CraftQueue;
use yii\caching\ArrayCache;
use yii\redis\Cache as RedisCache;
Expand Down Expand Up @@ -159,7 +157,6 @@ private function getDefinitions(): array
{
return [
Temp::class => TmpFs::class,
CraftImageTransform::class => ImageTransform::class,
MonologTarget::class => function($container, $params, $config) {
return new MonologTarget([
'logContext' => false,
Expand Down
6 changes: 6 additions & 0 deletions src/Module.php
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
use craft\base\Event;
use craft\base\Model;
use craft\cloud\fs\AssetsFs;
use craft\cloud\imagetransforms\ImageTransform;
use craft\cloud\imagetransforms\ImageTransformer;
use craft\cloud\twig\TwigExtension;
use craft\cloud\web\assets\uploader\UploaderAsset;
Expand All @@ -19,6 +20,7 @@
use craft\helpers\App;
use craft\helpers\ConfigHelper;
use craft\log\MonologTarget;
use craft\models\ImageTransform as CraftImageTransform;
use craft\services\Fs as FsService;
use craft\services\ImageTransforms;
use craft\web\Application as WebApplication;
Expand Down Expand Up @@ -83,6 +85,10 @@ public function bootstrap($app): void
),
]);

// Replace ImageTransform with cloud ImageTransform via DI
// We do this here and not in AppConfig, because non-Cloud envs need it to support non-standard transform props
Craft::$container->set(CraftImageTransform::class, ImageTransform::class);

if (Helper::isCraftCloud()) {
$this->bootstrapCloud($app);
}
Expand Down
31 changes: 11 additions & 20 deletions src/imagetransforms/ImageTransform.php
Original file line number Diff line number Diff line change
Expand Up @@ -110,32 +110,23 @@ class ImageTransform extends \craft\models\ImageTransform

public ?float $zoom = null;

/**
* @inheritdoc
*/
public function fields(): array
{
$this->normalize();
return parent::fields();
}

public function normalize(): static
{
$this->format = $this->computeFormat();
$this->fit = $this->computeFit();
$this->background = $this->computeBackground();
$this->gravity = $this->computeGravity();
return $this;
}

public function toOptions(): array
{
$reflection = new \ReflectionClass($this);
$this->normalize();

return Collection::make($reflection->getProperties(\ReflectionProperty::IS_PUBLIC))
$options = Collection::make($reflection->getProperties(\ReflectionProperty::IS_PUBLIC))
->filter(fn($property) => $property->getDeclaringClass()->getName() === self::class)
->mapWithKeys(fn($property) => [$property->getName() => $property->getValue($this)])
->all();

// Compute derived Cloudflare values from Craft's base transform settings,
// without mutating the model (so the same instance can be safely reused).
$options['format'] = $this->computeFormat();
$options['fit'] = $this->computeFit();
$options['background'] = $this->computeBackground();
$options['gravity'] ??= $this->computeGravity();

return Collection::make($options)
->filter(fn($value) => $value !== null)
->all();
}
Expand Down
Loading