Skip to content

Commit 94ee751

Browse files
ArthurLashermesArthurLashermes
andauthored
Fix/main (#19)
* fix : clear cache management (#17) Co-authored-by: ArthurLashermes <[email protected]> * fix : add image-library in clear cache process --------- Co-authored-by: ArthurLashermes <[email protected]>
1 parent 4e6747e commit 94ee751

File tree

3 files changed

+94
-1
lines changed

3 files changed

+94
-1
lines changed

Config/module.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@
2020
<language>en_US</language>
2121
<language>fr_FR</language>
2222
</languages>
23-
<version>1.2.7</version>
23+
<version>1.2.9</version>
2424
<authors>
2525
<author>
2626
<name></name>
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
<?php
2+
3+
namespace TheliaLibrary\EventListeners;
4+
5+
use Symfony\Component\EventDispatcher\EventDispatcherInterface;
6+
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
7+
use Thelia\Core\Event\Cache\CacheEvent;
8+
use Thelia\Core\Event\TheliaEvents;
9+
use Thelia\Model\ConfigQuery;
10+
11+
class CacheClearListener implements EventSubscriberInterface
12+
{
13+
14+
public function __construct(private EventDispatcherInterface $dispatcher)
15+
{
16+
}
17+
18+
public static function getSubscribedEvents(): array
19+
{
20+
return [
21+
TheliaEvents::CACHE_CLEAR => ['deleteAllTheliaLibraryCachedImages'],
22+
];
23+
}
24+
25+
public function deleteAllTheliaLibraryCachedImages(CacheEvent $event): void
26+
{
27+
$cachedPath = THELIA_WEB_DIR . ConfigQuery::read(
28+
search: 'image_cache_dir_from_web_root',
29+
default: 'cache' . DS . 'images'
30+
);
31+
$cachedDirectoryLegacy = THELIA_WEB_DIR . 'legacy-image-library';
32+
$cachedDirectoryLibrary = THELIA_WEB_DIR . 'image-library';
33+
if ($event->getDir() !== $cachedPath) {
34+
return;
35+
}
36+
if (is_dir($cachedDirectoryLegacy)) {
37+
$imageLibraryEventLegacy = new CacheEvent($cachedDirectoryLegacy);
38+
$this->dispatcher->dispatch(event: $imageLibraryEventLegacy, eventName: TheliaEvents::CACHE_CLEAR);
39+
}
40+
if (is_dir($cachedDirectoryLibrary)) {
41+
$imageLibraryEventLibrary = new CacheEvent($cachedDirectoryLibrary);
42+
$this->dispatcher->dispatch(event: $imageLibraryEventLibrary, eventName: TheliaEvents::CACHE_CLEAR);
43+
}
44+
}
45+
}
Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
<?php
2+
3+
namespace TheliaLibrary\EventListeners;
4+
5+
use Symfony\Component\EventDispatcher\EventDispatcherInterface;
6+
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
7+
use Symfony\Component\HttpFoundation\RequestStack;
8+
use Thelia\Core\Event\Cache\CacheEvent;
9+
use Thelia\Core\Event\File\FileCreateOrUpdateEvent;
10+
use Thelia\Core\Event\TheliaEvents;
11+
12+
class UpdateImageListener implements EventSubscriberInterface
13+
{
14+
public function __construct(private RequestStack $request, private EventDispatcherInterface $dispatcher)
15+
{
16+
}
17+
18+
public static function getSubscribedEvents() : array
19+
{
20+
return [
21+
TheliaEvents::IMAGE_UPDATE => ['deleteTheliaLibraryCachedImage'],
22+
];
23+
}
24+
25+
public function deleteTheliaLibraryCachedImage(FileCreateOrUpdateEvent $event): void
26+
{
27+
$uri = $this->request->getCurrentRequest()?->getUri();
28+
if (!$uri){
29+
return;
30+
}
31+
$segments = explode('/', $uri);
32+
$index = array_search('type', $segments);
33+
if (!$index){
34+
return;
35+
}
36+
$type = $segments[$index + 1] ?? null;
37+
if (!$type){
38+
return;
39+
}
40+
$imageId = $event->getModel()->getId();
41+
$cachedDir = THELIA_WEB_DIR.'legacy-image-library'.DS.$type.'_image_'.$imageId;
42+
if (!is_dir($cachedDir)){
43+
return;
44+
}
45+
$imageLibraryEvent = new CacheEvent($cachedDir);
46+
$this->dispatcher->dispatch(event: $imageLibraryEvent, eventName: TheliaEvents::CACHE_CLEAR);
47+
}
48+
}

0 commit comments

Comments
 (0)