Skip to content

Instantly share code, notes, and snippets.

@maxime-rainville
Created April 28, 2019 22:27
Show Gist options
  • Save maxime-rainville/2731fefa7e26fe0d46009e3ccae09b84 to your computer and use it in GitHub Desktop.
Save maxime-rainville/2731fefa7e26fe0d46009e3ccae09b84 to your computer and use it in GitHub Desktop.
Generating SilverStripe 3 assets in SilverStripe 4 for testing File migration
<?php
use GuzzleHttp\Psr7\StreamWrapper;
use Intervention\Image\AbstractFont;
use Intervention\Image\AbstractShape;
use Intervention\Image\ImageManager;
use SilverStripe\Assets\FilenameParsing\FileIDHelperResolutionStrategy;
use SilverStripe\Assets\FilenameParsing\LegacyFileIDHelper;
use SilverStripe\Assets\Flysystem\FlysystemAssetStore;
use SilverStripe\Assets\Image;
use SilverStripe\Assets\InterventionBackend;
use SilverStripe\Assets\Storage\AssetStore;
use SilverStripe\Core\Environment;
use SilverStripe\Core\Injector\Injector;
use SilverStripe\Dev\BuildTask;
use SilverStripe\ORM\DB;
use SilverStripe\ORM\FieldType\DBText;
use SilverStripe\ORM\Queries\SQLUpdate;
class GenerateSS3Assets extends BuildTask
{
private static $segment = 'gen-ss3-asset';
public function run($request)
{
Environment::increaseTimeLimitTo();
Environment::increaseMemoryLimitTo();
/** @var FlysystemAssetStore $store */
$store = Injector::inst()->get(AssetStore::class);
$legacyStrategy = new FileIDHelperResolutionStrategy();
$legacyStrategy->setDefaultFileIDHelper(new LegacyFileIDHelper());
$legacyStrategy->setResolutionFileIDHelpers([new LegacyFileIDHelper()]);
$store->setPublicResolutionStrategy($legacyStrategy);
DB::get_schema()->schemaUpdate( function() {
DB::quiet();
$ss3DBField = new DBText('Filename');
$ss3DBField->setTable('File');
$ss3DBField->requireField();
});
for ($i = 0; $i < 500; $i++) {
$imgData = $this->generateImage('Live', "generated/test-image-$i.jpg", 1);
$jpg = $imgData->stream('jpg');
$stream = StreamWrapper::getResource($jpg);
$file = new Image();
$file->setFromStream($stream, "generated/test-image-$i.jpg", null, null, ['visibility' => AssetStore::VISIBILITY_PUBLIC]);
$file->write();
$file->CMSThumbnail();
$file->PreviewThumbnail();
SQLUpdate::create(
'File',
[
'FileFilename' => null,
'FileHash' => null,
'Filename' => "assets/generated/test-image-$i.jpg"
],
['ID' => $file->ID]
)->execute();
fclose($stream);
$imgData->destroy();
InterventionBackend::flush();
echo "generated/test-image-$i.jpg\n";
}
}
/**
* Generate a placeholder image
* @param string $targetedStage
* @param string $filename
* @param float $f
* @return \Intervention\Image\Image
*/
private function generateImage($targetedStage, $filename, $f=1.0)
{
/** @var ImageManager $imageManager */
$imageManager = Injector::inst()->create(ImageManager::class);
return $imageManager
->canvas(400*$f, 300*$f, '#142237')
->text($targetedStage, 20*$f, 170*$f, function (AbstractFont $font) use ($f) {
$font->file(__DIR__ . '/../fonts/ZillaSlab-SemiBold.ttf');
$font->size(36*$f);
$font->color('#44C8F5');
})->text($filename, 20*$f, 195*$f, function (AbstractFont $font) use ($f) {
$font->file(__DIR__ . '/../fonts/ZillaSlab-Regular.ttf');
$font->size(20*$f);
$font->color('#ffffff');
})->rectangle(20*$f, 210*$f, 100*$f, 212*$f, function (AbstractShape $shape) {
$shape->background('#DA1052');
});
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment