AfterItemsSortedEvent 

Example Use Cases 

Filter Items by Extension 

This example shows how to filter items to only allow specific file types.

<?php

declare(strict_types=1);

namespace MyVendor\MyExtension\EventListener;

use Freshworkx\BmImageGallery\Event\AfterItemsSortedEvent;
use TYPO3\CMS\Core\Attribute\AsEventListener;

#[AsEventListener(
    identifier: 'my-ext/filter-items',
    event: AfterItemsSortedEvent::class
)]
final readonly class FilterItemsListener
{
    public function __invoke(AfterItemsSortedEvent $event): void
    {
        $items = $event->getItems();

        // Only allow JPG and PNG
        $filtered = array_filter($items, function($item) {
            return in_array(
                strtolower($item->getExtension()),
                ['jpg', 'jpeg', 'png'],
                true
            );
        });

        $event->setItems(array_values($filtered));
    }
}
Copied!

Filter Items by Size 

This example demonstrates filtering items based on file size.

<?php

declare(strict_types=1);

namespace MyVendor\MyExtension\EventListener;

use Freshworkx\BmImageGallery\Event\AfterItemsSortedEvent;
use TYPO3\CMS\Core\Attribute\AsEventListener;

#[AsEventListener(
    identifier: 'my-ext/filter-by-size',
    event: AfterItemsSortedEvent::class
)]
final readonly class FilterBySizeListener
{
    public function __invoke(AfterItemsSortedEvent $event): void
    {
        $items = $event->getItems();

        // Only allow files larger than 1MB
        $filtered = array_filter($items, fn($item) => $item->getSize() > 1048576);

        $event->setItems(array_values($filtered));
    }
}
Copied!

Enrich Items 

This example shows how to enrich items with additional metadata.

<?php

declare(strict_types=1);

namespace MyVendor\MyExtension\EventListener;

use Freshworkx\BmImageGallery\Event\AfterItemsSortedEvent;
use TYPO3\CMS\Core\Attribute\AsEventListener;
use TYPO3\CMS\Core\Resource\ProcessedFile;

#[AsEventListener(
    identifier: 'my-ext/enrich-items',
    event: AfterItemsSortedEvent::class
)]
final readonly class EnrichItemsListener
{
    public function __invoke(AfterItemsSortedEvent $event): void
    {
        $items = $event->getItems();

        foreach ($items as $item) {
            // Add metadata or prepare thumbnails
            // This is just for demonstration - in real scenarios,
            // you might want to add custom properties or process files
        }

        $event->setItems($items);
    }
}
Copied!

Re-sort Items 

This example demonstrates custom sorting of items.

<?php

declare(strict_types=1);

namespace MyVendor\MyExtension\EventListener;

use Freshworkx\BmImageGallery\Event\AfterItemsSortedEvent;
use TYPO3\CMS\Core\Attribute\AsEventListener;

#[AsEventListener(
    identifier: 'my-ext/resort-items',
    event: AfterItemsSortedEvent::class
)]
final readonly class ResortItemsListener
{
    public function __invoke(AfterItemsSortedEvent $event): void
    {
        $items = $event->getItems();

        // Sort alphabetically by name
        usort($items, fn($a, $b) => $a->getName() <=> $b->getName());

        $event->setItems($items);
    }
}
Copied!