Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

NEW Remove ImageBackendFactory Injector override from ImageThumbnailHelper #905

Merged
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
51 changes: 42 additions & 9 deletions code/Helper/ImageThumbnailHelper.php
Original file line number Diff line number Diff line change
Expand Up @@ -3,28 +3,61 @@

use SilverStripe\AssetAdmin\Controller\AssetAdmin;
use SilverStripe\Assets\File;
use SilverStripe\Assets\ImageBackendFactory;
use SilverStripe\Core\Convert;
use SilverStripe\Core\Injector\Injectable;
use SilverStripe\Core\Injector\InjectionCreator;
use SilverStripe\Core\Injector\Injector;
use SilverStripe\ORM\DB;

class ImageThumbnailHelper
{
use Injectable;

/**
* @var int
*/
private $maxImageFileSize;
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We prefer protected over private

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

In the context that there's a proper accessor and mutator, I think it's better to make it private. My view is people should be using those instead of accessing the variable directly.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We really need to clarify this policy - consistency is the most important thing in my mind, but we've always gone with protected over private until the last couple of months


/**
* @param mixed $maxImageSize Maximum file size for which thumbnails will be generated. Set to `0` to disable the
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Mixed is not a useful annotation - I think string|int would be better

* limit.
*/
public function __construct($maxImageFileSize = '9M')
{
$this->setMaxImageFileSize($maxImageFileSize);
}

/**
* Get the maximum file size for which thumbnails will be generated. Set to `0` to disable the limit.
* @return int
robbieaverill marked this conversation as resolved.
Show resolved Hide resolved
*/
public function getMaxImageFileSize()
{
return $this->maxImageFileSize;
}

/**
* Set the maximum file size for which thumbnails will be generated. Set to `0` to disable the limit.
* @param mixed $size
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggest string|int

* @return $this
*/
public function setMaxImageFileSize($size)
{
$this->maxImageFileSize = Convert::memstring2bytes($size);
return $this;
}

public function run()
{
$assetAdmin = AssetAdmin::singleton();
$creator = new InjectionCreator();
Injector::inst()->registerService(
$creator,
ImageBackendFactory::class
);
/** @var File[] $files */
$files = File::get();

set_time_limit(0);

$maxSize = $this->getMaxImageFileSize();
foreach ($files as $file) {
$assetAdmin->generateThumbnails($file, true);
if ($maxSize == 0 || $file->getAbsoluteSize() < $maxSize) {
$assetAdmin->generateThumbnails($file, true);
}
}
}
}