. */ declare(strict_types=1); namespace App\Twig; use App\Services\System\UpdateAvailableFacade; use Symfony\Bundle\SecurityBundle\Security; use Twig\Extension\AbstractExtension; use Twig\TwigFunction; /** * Twig extension for update-related functions. */ final class UpdateExtension extends AbstractExtension { public function __construct(private readonly UpdateAvailableFacade $updateAvailableManager, private readonly Security $security) { } public function getFunctions(): array { return [ new TwigFunction('is_update_available', $this->isUpdateAvailable(...)), new TwigFunction('get_latest_version', $this->getLatestVersion(...)), new TwigFunction('get_latest_version_url', $this->getLatestVersionUrl(...)), ]; } /** * Check if an update is available and the user has permission to see it. */ public function isUpdateAvailable(): bool { // Only show to users with the show_updates permission if (!$this->security->isGranted('@system.show_updates')) { return false; } return $this->updateAvailableManager->isUpdateAvailable(); } /** * Get the latest available version string. */ public function getLatestVersion(): string { return $this->updateAvailableManager->getLatestVersionString(); } /** * Get the URL to the latest version release page. */ public function getLatestVersionUrl(): string { return $this->updateAvailableManager->getLatestVersionUrl(); } }