diff --git a/core/lib/Thelia/Action/Image.php b/core/lib/Thelia/Action/Image.php index dcf4390c5..eabf03b0a 100644 --- a/core/lib/Thelia/Action/Image.php +++ b/core/lib/Thelia/Action/Image.php @@ -490,9 +490,8 @@ class Image extends BaseAction implements EventSubscriberInterface public static function getSubscribedEvents() { return array( - TheliaEvents::IMAGE_PROCESS => array( - "processImage", 128 - ), + TheliaEvents::IMAGE_PROCESS => array("processImage", 128), + TheliaEvents::IMAGE_CLEAR_CACHE => array("clearCache", 128), ); } } diff --git a/core/lib/Thelia/Command/ClearImageCache.php b/core/lib/Thelia/Command/ClearImageCache.php new file mode 100644 index 000000000..801e2e8d0 --- /dev/null +++ b/core/lib/Thelia/Command/ClearImageCache.php @@ -0,0 +1,70 @@ +. */ +/* */ +/*************************************************************************************/ + +namespace Thelia\Command; + + +use Thelia\Command\ContainerAwareCommand; +use Thelia\Core\Event\TheliaEvents; + +use Symfony\Component\Console\Input\InputInterface; +use Symfony\Component\Console\Output\OutputInterface; +use Thelia\Core\Event\ImageEvent; +use Thelia\Core\HttpFoundation\Request; +use Symfony\Component\Console\Input\InputArgument; + + +class ClearImageCache extends ContainerAwareCommand +{ + protected function configure() + { + $this + ->setName("image-cache:clear") + ->setDescription("Empty part or whole web space image cache") + ->addArgument("subdir", InputArgument::OPTIONAL, "Clear only the specified subdirectory") + ; + } + + protected function execute(InputInterface $input, OutputInterface $output) + { + $dispatcher = $this->getContainer()->get('event_dispatcher'); + + $request = new Request(); + + try { + $event = new ImageEvent($request); + + $subdir = $input->getArgument('subdir'); + + if (! is_null($subdir)) $event->setCacheSubdirectory($subdir); + + $dispatcher->dispatch(TheliaEvents::IMAGE_CLEAR_CACHE, $event); + + $output->writeln(sprintf('%s image cache successfully cleared.', is_null($subdir) ? 'Entire' : ucfirst($subdir))); + } + catch(\Exception $ex) { + $output->writeln(sprintf("Failed to clear image cache: %s", $ex->getMessage())); + } + } +} diff --git a/core/lib/Thelia/Config/Resources/config.xml b/core/lib/Thelia/Config/Resources/config.xml index 8181c60fc..a404fa6f2 100755 --- a/core/lib/Thelia/Config/Resources/config.xml +++ b/core/lib/Thelia/Config/Resources/config.xml @@ -43,6 +43,7 @@ + diff --git a/core/lib/Thelia/Core/Event/TheliaEvents.php b/core/lib/Thelia/Core/Event/TheliaEvents.php index 0f512fab3..f64a071c7 100755 --- a/core/lib/Thelia/Core/Event/TheliaEvents.php +++ b/core/lib/Thelia/Core/Event/TheliaEvents.php @@ -140,4 +140,9 @@ final class TheliaEvents */ const IMAGE_PROCESS = "action.processImage"; + /** + * Sent on cimage cache clear request + */ + const IMAGE_CLEAR_CACHE = "action.clearImageCache"; + } diff --git a/install/insert.sql b/install/insert.sql index a7255eba2..c9b740dac 100755 --- a/install/insert.sql +++ b/install/insert.sql @@ -10,6 +10,8 @@ INSERT INTO `config` (`name`, `value`, `secured`, `hidden`, `created_at`, `updat ('imagine_graphic_driver', 'gd', 1, 0, NOW(), NOW()); ('default_images_quality_percent', '75', 1, 0, NOW(), NOW()); ('original_image_delivery_mode', 'symlink', 1, 0, NOW(), NOW()); +('images_library_path', 'local/media/images', 1, 0, NOW(), NOW()); +('image_cache_dir_from_web_root', 'cache/images', 1, 0, NOW(), NOW());