<?php
namespace JanusHercules\Shared\Presentation\Component\Header;
use App\Entity\Profile\JoboffererProfile;
use App\Entity\Profile\JobseekerProfile;
use App\Entity\User;
use Exception;
use JanusHercules\Shared\Presentation\Entity\GroupNavigationItem;
use JanusHercules\Shared\Presentation\Entity\NavigationItem;
use JanusHercules\Shared\Presentation\Service\HeaderPresentationService;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\RequestStack;
use Symfony\UX\LiveComponent\Attribute\AsLiveComponent;
use Symfony\UX\LiveComponent\Attribute\LiveAction;
use Symfony\UX\LiveComponent\ComponentToolsTrait;
use Symfony\UX\LiveComponent\DefaultActionTrait;
#[AsLiveComponent(
'Header',
'@janus_hercules.shared.presentation/header/header_twig_component.html.twig'
)]
class HeaderTwigLiveComponent extends AbstractController
{
use DefaultActionTrait;
use ComponentToolsTrait;
public function __construct(
private readonly HeaderPresentationService $headerService,
private readonly RequestStack $request,
) {
}
#[LiveAction]
public function getShowJoboffererHeader(): bool
{
/** @var ?User $user */
$user = $this->getUser();
/** @var ?string $fromDigitalEstate */
$fromDigitalEstate = $this->request->getCurrentRequest()?->query?->get('fromDigitalEstate');
/** @var ?string $isJoboffererLogin */
$isJoboffererLogin = $this->request->getCurrentRequest()?->query?->get('isJoboffererLogin');
/** @var ?string $createWithRole */
$createWithRole = $this->request->getCurrentRequest()?->query?->get('createWithRole');
/** @var ?string $pathInfo */
$pathInfo = $this->request->getCurrentRequest()?->getPathInfo();
return $this->headerService->showJoboffererHeader($user, $fromDigitalEstate, $createWithRole, $pathInfo, $isJoboffererLogin);
}
#[LiveAction]
public function getDigitalEstateUrlPro(): string
{
return $this->headerService->getDigitalEstateUrlPro();
}
/**
* @throws Exception
*/
#[LiveAction]
public function getProfileLabel(): string
{
/** @var ?User $user */
$user = $this->getUser();
/** @var ?JobseekerProfile $jobseekerProfile */
$jobseekerProfile = $user?->getDefaultJobseekerProfile();
/** @var ?JoboffererProfile $joboffererProfile */
$joboffererProfile = $user?->getDefaultJoboffererProfile();
$displayName = null;
if ($jobseekerProfile !== null && $jobseekerProfile->getFullDisplayName()) {
$displayName = $jobseekerProfile->getFullDisplayName();
} elseif ($joboffererProfile !== null && $joboffererProfile->getFullDisplayName()) {
$displayName = $joboffererProfile->getFullDisplayName();
} else {
$displayName = $user?->getUsername();
}
return $displayName ?? 'Profil';
}
/**
* @throws Exception
*/
#[LiveAction]
public function getUserCanSeeWebsiteNavigationItems(): bool
{
/** @var ?User $user */
$user = $this->getUser();
if ($user) {
return $this->headerService->userCanSeeWebsiteNavigationItems($user);
}
return false;
}
#[LiveAction]
public function getIsLoginFromAdmin(): bool
{
return $this->request->getCurrentRequest() && $this->request->getCurrentRequest()->cookies->has($this->headerService::COOKIE_NAME_LOGIN_WAS_FROM_ADMIN)
&& ($this->request->getCurrentRequest()->cookies->get($this->headerService::COOKIE_NAME_LOGIN_WAS_FROM_ADMIN) == '1');
}
/**
* @return GroupNavigationItem[]
*/
#[LiveAction]
public function getJoboffererNavbarItems(): array
{
return [
new GroupNavigationItem('JOBOO!®', [
new NavigationItem('', 'Darum JOBOO!®', '', $this->getDigitalEstateUrlPro()),
new NavigationItem('', 'Preise', '', $this->getDigitalEstateUrlPro() . '/preise'),
new NavigationItem('', 'Arbeitskräfte finden', '', $this->generateUrl('wanted_jobs_search.form')),
]),
new GroupNavigationItem('Lösungen', [
new NavigationItem('', 'Einsatzzeit Matching', '', $this->getDigitalEstateUrlPro() . '/stellenanzeigen#KIMatching'),
new NavigationItem('', 'Stellenanzeigen', '', $this->getDigitalEstateUrlPro() . '/stellenanzeigen'),
new NavigationItem('', 'Bewerberdatenbank', '', $this->getDigitalEstateUrlPro() . '/active-sourcing'),
]),
new GroupNavigationItem('Profil', [
new NavigationItem('', 'Login', '', $this->generateUrl('fos_user_security_login', ['isJoboffererLogin' => true])),
new NavigationItem('', 'Registrieren', '', $this->generateUrl('fos_user_registration_register', ['createWithRole' => User::ROLE_NAME_JOBOFFERER])),
]), new GroupNavigationItem('', [
new NavigationItem('', 'Für Jobsuchende', '', '/de/'),
])
];
}
/**
* @return GroupNavigationItem[]
*/
#[LiveAction]
public function getSolutionsLinks(): array
{
return [
new GroupNavigationItem('', [
new NavigationItem('', 'Einsatzzeit Matching', '', $this->getDigitalEstateUrlPro() . '/stellenanzeigen#KIMatching'),
new NavigationItem('', 'Stellenanzeigen', '', $this->getDigitalEstateUrlPro() . '/stellenanzeigen'),
new NavigationItem('', 'Bewerberdatenbank', '', $this->getDigitalEstateUrlPro() . '/active-sourcing'),
]),
];
}
}