2019-09-17 23:14:29 +02:00
|
|
|
<?php namespace Aweos\Resizer;
|
|
|
|
|
2021-09-06 14:37:35 +02:00
|
|
|
use Aweos\Resizer\Classes\CacheManager;
|
2021-09-06 02:31:27 +02:00
|
|
|
use Aweos\Resizer\Classes\FileObserver;
|
|
|
|
use Aweos\Resizer\Classes\ImageResizer;
|
|
|
|
use Aweos\Resizer\Classes\ResizeJob;
|
|
|
|
use Aweos\Resizer\Classes\TagGenerator;
|
2019-09-17 23:14:29 +02:00
|
|
|
use Aweos\Resizer\Console\ClearOld;
|
|
|
|
use Aweos\Resizer\Console\ResizeMake;
|
|
|
|
use Aweos\Resizer\Console\ResizePurge;
|
2020-10-21 00:02:20 +02:00
|
|
|
use Aweos\Resizer\FormWidgets\Responsiveimage;
|
2021-09-06 02:31:27 +02:00
|
|
|
use Aweos\Resizer\Models\Setting;
|
|
|
|
use Event;
|
|
|
|
use Illuminate\Support\Facades\Cache;
|
|
|
|
use Queue;
|
|
|
|
use Storage;
|
|
|
|
use System\Classes\MediaLibrary;
|
|
|
|
use System\Classes\PluginBase;
|
|
|
|
use System\Models\File;
|
2019-09-17 23:14:29 +02:00
|
|
|
|
|
|
|
/**
|
|
|
|
* resizer Plugin Information File
|
|
|
|
*/
|
|
|
|
class Plugin extends PluginBase
|
|
|
|
{
|
|
|
|
/**
|
|
|
|
* Returns information about this plugin.
|
|
|
|
*
|
|
|
|
* @return array
|
|
|
|
*/
|
|
|
|
public function pluginDetails()
|
|
|
|
{
|
|
|
|
return [
|
|
|
|
'name' => 'resizer',
|
|
|
|
'description' => 'No description provided yet...',
|
|
|
|
'author' => 'aweos',
|
|
|
|
'icon' => 'icon-leaf'
|
|
|
|
];
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Register method, called when the plugin is first registered.
|
|
|
|
*
|
|
|
|
* @return void
|
|
|
|
*/
|
|
|
|
public function register()
|
|
|
|
{
|
|
|
|
$this->registerConsoleCommand('resizer.resizemake', ResizeMake::class);
|
|
|
|
$this->registerConsoleCommand('resizer.resizepurge', ResizePurge::class);
|
|
|
|
$this->registerConsoleCommand('resizer.clearold', ClearOld::class);
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Boot method, called right before the request route.
|
|
|
|
*
|
|
|
|
* @return array
|
|
|
|
*/
|
|
|
|
public function boot()
|
|
|
|
{
|
2021-09-06 02:31:27 +02:00
|
|
|
app()->bind(ImageResizer::class, function() {
|
|
|
|
$disk = (new File())->getDisk();
|
|
|
|
$dir = (new File(['is_public' => true]))->getStorageDirectory().'c/';
|
|
|
|
$media = MediaLibrary::instance();
|
|
|
|
|
|
|
|
return new ImageResizer($disk, $dir, $media);
|
|
|
|
});
|
|
|
|
|
|
|
|
Event::listen('media.file.upload', function($widget, $filePath, $uploadedFile) {
|
|
|
|
if (app(FileObserver::class)->shouldProcessFile($filePath)) {
|
|
|
|
Queue::push(ResizeJob::class, [$filePath]);
|
|
|
|
}
|
|
|
|
});
|
|
|
|
Event::listen('media.file.delete', function($widget, $filePath) {
|
|
|
|
app(FileObserver::class)->delete($filePath);
|
2021-09-06 15:35:45 +02:00
|
|
|
app(CacheManager::class)->delete($filePath);
|
2021-09-06 02:31:27 +02:00
|
|
|
});
|
|
|
|
|
|
|
|
Event::listen('media.file.move', function($widget, $old, $new) {
|
|
|
|
app(FileObserver::class)->rename($old, $new);
|
2021-09-06 17:22:57 +02:00
|
|
|
app(CacheManager::class)->delete($old);
|
2021-09-06 02:31:27 +02:00
|
|
|
});
|
|
|
|
Event::listen('media.file.rename', function($widget, $old, $new) {
|
|
|
|
app(FileObserver::class)->rename($old, $new);
|
2021-09-06 17:22:57 +02:00
|
|
|
app(CacheManager::class)->delete($old);
|
2021-09-06 02:31:27 +02:00
|
|
|
});
|
2019-09-17 23:14:29 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
public function registerSettings() {
|
|
|
|
return [
|
|
|
|
'resizer' => [
|
|
|
|
'label' => 'Resizer Settings',
|
|
|
|
'description' => 'Change how images are resized and compressed',
|
|
|
|
'category' => 'Base',
|
|
|
|
'icon' => 'icon-cog',
|
|
|
|
'class' => '\Aweos\Resizer\Models\Setting',
|
|
|
|
'order' => 500,
|
|
|
|
'keywords' => 'setting',
|
|
|
|
'permissions' => ['aweos.resizer.*']
|
|
|
|
]
|
|
|
|
];
|
|
|
|
}
|
|
|
|
|
|
|
|
public function registerMarkupTags() {
|
|
|
|
return [
|
|
|
|
'filters' => [
|
2021-09-06 18:23:06 +02:00
|
|
|
'resize' => fn ($media, $size = 'original', $sizes = null) => app(CacheManager::class)->get($media, $size, $sizes)
|
2019-09-17 23:14:29 +02:00
|
|
|
]
|
|
|
|
];
|
|
|
|
}
|
|
|
|
|
|
|
|
public function breakpointsToSizes($breakpoints) {
|
|
|
|
$s = [];
|
|
|
|
|
|
|
|
foreach ($breakpoints as $size => $bp) {
|
|
|
|
if ($size === 'max') { continue; }
|
|
|
|
|
|
|
|
$s[] = '(max-width: '.$size.'px) '.$bp;
|
|
|
|
}
|
|
|
|
|
|
|
|
if (array_key_exists('max', $breakpoints)) {
|
|
|
|
$s[] = $breakpoints['max'];
|
|
|
|
}
|
|
|
|
|
|
|
|
return 'sizes="'.implode(', ', $s).'"';
|
|
|
|
}
|
|
|
|
|
|
|
|
public function registerSchedule($schedule) {
|
|
|
|
$schedule->command('resize:make')->dailyAt('01:00');
|
|
|
|
}
|
2020-10-21 00:02:20 +02:00
|
|
|
|
|
|
|
public function registerFormWidgets() {
|
|
|
|
return [
|
|
|
|
Responsiveimage::class => 'responsiveimage'
|
|
|
|
];
|
|
|
|
}
|
2019-09-17 23:14:29 +02:00
|
|
|
}
|