. */ namespace App\Twig; use App\Services\InfoProviderSystem\CreateFromUrlHelper; use Twig\Attribute\AsTwigFunction; use App\Settings\SettingsIcon; use Symfony\Component\HttpFoundation\Request; use App\Services\LogSystem\EventCommentType; use Jbtronics\SettingsBundle\Proxy\SettingsProxyInterface; use ReflectionClass; use Twig\TwigFunction; use App\Services\LogSystem\EventCommentNeededHelper; use Twig\Extension\AbstractExtension; final readonly class MiscExtension { public function __construct(private EventCommentNeededHelper $eventCommentNeededHelper, private CreateFromUrlHelper $fromUrlHelper) { } #[AsTwigFunction(name: 'event_comment_needed')] public function evenCommentNeeded(string|EventCommentType $operation_type): bool { if (is_string($operation_type)) { $operation_type = EventCommentType::from($operation_type); } return $this->eventCommentNeededHelper->isCommentNeeded($operation_type); } /** * Returns the value of the icon attribute of the SettingsIcon attribute of the given class. * If the class does not have a SettingsIcon attribute, then null is returned. * @param string|object $objectOrClass * @return string|null * @throws \ReflectionException */ #[AsTwigFunction(name: 'settings_icon')] public function settingsIcon(string|object $objectOrClass): ?string { //If the given object is a proxy, then get the real object if (is_a($objectOrClass, SettingsProxyInterface::class)) { $objectOrClass = get_parent_class($objectOrClass); } $reflection = new ReflectionClass($objectOrClass); $attribute = $reflection->getAttributes(SettingsIcon::class)[0] ?? null; return $attribute?->newInstance()->icon; } /** * Similar to the getUri function of the request, but does not contain protocol and host. * @param Request $request * @return string */ #[AsTwigFunction(name: 'uri_without_host')] public function uri_without_host(Request $request): string { if (null !== $qs = $request->getQueryString()) { $qs = '?'.$qs; } return $request->getBaseUrl().$request->getPathInfo().$qs; } /** * Returns true if the from url provider is active, false otherwise. * @return bool */ #[AsTwigFunction(name: 'create_from_url_active')] public function create_from_url_active(): bool { return $this->fromUrlHelper->canCreateFromUrl(); } }