<?php
namespace App\Service;
use App\Entity\NextStepInfoForAfterSubscription;
use Symfony\Component\HttpFoundation\RequestStack;
use Symfony\Component\HttpFoundation\Session\SessionInterface;
class SessionService
{
public const JOBOFFERER_SEARCH_HINT_STATE_FIRST = 0;
public const JOBOFFERER_SEARCH_HINT_STATE_SECOND = 1;
public function markSessionAsLoginFromAdmin(SessionInterface $session, string $userId): void
{
$session->set('_loginWasFromAdmin', true);
$session->set('_loginFromAdminUserId', $userId);
}
public function loginWasFromAdmin(SessionInterface $session): bool
{
return $session->get('_loginWasFromAdmin', false);
}
public function getLoginFromAdminUserId(SessionInterface $session): ?string
{
return $session->get('_loginFromAdminUserId', null);
}
public function setNextStepInfoForAfterSubscription(SessionInterface $session, NextStepInfoForAfterSubscription $nextStepInfoForAfterSubscription): void
{
$session->set('_nextStepInfoForAfterSubscription', $nextStepInfoForAfterSubscription);
}
public function removeNextStepInfoForAfterSubscription(SessionInterface $session): void
{
$session->remove('_nextStepInfoForAfterSubscription');
}
public function getNextStepInfoForAfterSubscription(SessionInterface $session): ?NextStepInfoForAfterSubscription
{
return $session->get('_nextStepInfoForAfterSubscription');
}
public function addProfileIdForMultiMessageSelection(
SessionInterface $session,
string $profileId
): void {
$profileIds = is_null($session->get('_profileIdsForMultiMessageSelection'))
? []
: $session->get('_profileIdsForMultiMessageSelection');
if (!in_array($profileId, $profileIds)) {
$profileIds[] = trim($profileId);
}
$session->set('_profileIdsForMultiMessageSelection', $profileIds);
}
public function deleteProfileIdForMultiMessageSelection(
SessionInterface $session,
string $profileId
): void {
$profileIds = is_null($session->get('_profileIdsForMultiMessageSelection')) ? [] : $session->get('_profileIdsForMultiMessageSelection');
if (($index = array_search($profileId, $profileIds)) !== false) {
unset($profileIds[$index]);
}
$session->set('_profileIdsForMultiMessageSelection', $profileIds);
}
public function getProfileIdsForMultiMessageSelection(SessionInterface $session): array
{
$profileIds = $session->get('_profileIdsForMultiMessageSelection');
if (is_null($profileIds)) {
return [];
} else {
return $profileIds;
}
}
public function resetProfileIdsForMultiMessageSelection(SessionInterface $session): void
{
$session->set('_profileIdsForMultiMessageSelection', []);
}
public function setUsernamePrefillForLogin(SessionInterface $session, string $usernamePrefill): void
{
$session->set('_usernamePrefillForLogin', $usernamePrefill);
}
public function getUsernamePrefillForLogin(SessionInterface $session): ?string
{
return $session->get('_usernamePrefillForLogin');
}
public function getAndCycleJoboffererSearchHintState(SessionInterface $session): int
{
$currentState = $session->get('_joboffererSearchHintState');
if (is_null($currentState) || $currentState === self::JOBOFFERER_SEARCH_HINT_STATE_FIRST) {
$session->set('_joboffererSearchHintState', self::JOBOFFERER_SEARCH_HINT_STATE_SECOND);
return self::JOBOFFERER_SEARCH_HINT_STATE_FIRST;
} else {
$session->set('_joboffererSearchHintState', self::JOBOFFERER_SEARCH_HINT_STATE_FIRST);
return self::JOBOFFERER_SEARCH_HINT_STATE_SECOND;
}
}
public function addConversionEventId(
SessionInterface $session,
string $conversionEventId,
int $campaignId,
int $subcampaignId,
?string $relatedRecurrentJobId = null
): void {
$conversionEventIds = $session->get('_conversionEventIds');
if (is_null($conversionEventIds)) {
$conversionEventIds = [];
}
if (!is_null($relatedRecurrentJobId)) {
$conversionEventIds["$campaignId-$subcampaignId-$relatedRecurrentJobId"] = $conversionEventId;
}
$conversionEventIds["$campaignId-$subcampaignId"] = $conversionEventId;
$session->set('_conversionEventIds', $conversionEventIds);
}
public function getConversionEventId(
SessionInterface $session,
int $campaignId,
int $subcampaignId,
?string $relatedRecurrentJobId = null
): ?string {
$conversionEventIds = $session->get('_conversionEventIds');
if (is_null($conversionEventIds)) {
return null;
}
if (!is_null($relatedRecurrentJobId)) {
if (array_key_exists("$campaignId-$subcampaignId-$relatedRecurrentJobId", $conversionEventIds)) {
return $conversionEventIds["$campaignId-$subcampaignId-$relatedRecurrentJobId"];
}
}
if (array_key_exists("$campaignId-$subcampaignId", $conversionEventIds)) {
return $conversionEventIds["$campaignId-$subcampaignId"];
} else {
return null;
}
}
public function removeConversionEventId(
SessionInterface $session,
int $campaignId,
int $subcampaignId,
?string $relatedRecurrentJobId = null
): void {
$conversionEventIds = $session->get('_conversionEventIds');
if (is_null($conversionEventIds)) {
return;
}
if (!is_null($relatedRecurrentJobId)) {
unset($conversionEventIds["$campaignId-$subcampaignId-$relatedRecurrentJobId"]);
}
unset($conversionEventIds["$campaignId-$subcampaignId"]);
$session->set('_conversionEventIds', $conversionEventIds);
}
public function getAnonymousUserInfo(SessionInterface $session): ?string
{
return $session->get('anonymousUserInfo');
}
public function setAnonymousUserInfo(SessionInterface $session, string $id): void
{
$session->set('anonymousUserInfo', $id);
}
public function hasSessionAnonymousUserInfo(SessionInterface $session): bool
{
return $session->has('anonymousUserInfo');
}
public function setWasRedirectedFromGoGastro(SessionInterface $session): void
{
$session->set('wasRedirectedFromGoGastro', true);
}
public function getWasRedirectedFromGoGastro(SessionInterface $session): bool
{
if ($session->has('wasRedirectedFromGoGastro')) {
$session->remove('wasRedirectedFromGoGastro');
return true;
}
return false;
}
public function setHasSeenGGInfoPage(SessionInterface $session): void
{
$session->set('hasSeenGGInfoPage', true);
}
public function getHasSeenGGInfoPage(SessionInterface $session): bool
{
if ($session->get('hasSeenGGInfoPage') === true) {
return true;
} else {
$this->setHasSeenGGInfoPage($session);
return false;
}
}
public function setPreventInfoPage(SessionInterface $session): void
{
$session->set('preventInfoPage', true);
}
public function getPreventInfoPage(SessionInterface $session): bool
{
if ($session->has('preventInfoPage')) {
return true;
}
return false;
}
public function getUriOfLastSuccessfulSearchResultsPage(SessionInterface $session): string
{
return (!is_null($session->get('uriOfLastSuccessfulSearchResultsPage'))) ? $session->get('uriOfLastSuccessfulSearchResultsPage') : '';
}
public function setUriOfLastSuccessfulSearchResultsPage(SessionInterface $session, string $uri): void
{
$session->set('uriOfLastSuccessfulSearchResultsPage', $uri);
}
public function getSearchResultsUriToOfferForReturn(SessionInterface $session): string
{
return (!is_null($session->get('searchResultsUriToOfferForReturn'))) ? $session->get('searchResultsUriToOfferForReturn') : '';
}
public function setSearchResultsUriToOfferForReturn(SessionInterface $session, string $uri): void
{
$session->set('searchResultsUriToOfferForReturn', $uri);
}
public function getRecurrentJobUriToOfferForReturn(SessionInterface $session): string
{
return (!is_null($session->get('recurrentJobUriToOfferForReturn'))) ? $session->get('recurrentJobUriToOfferForReturn') : '';
}
public function setRecurrentJobUriToOfferForReturn(SessionInterface $session, string $uri): void
{
$session->set('recurrentJobUriToOfferForReturn', $uri);
}
public static function hasStartedSession(?RequestStack $requestStack): bool
{
if (is_null($requestStack)) {
return false;
}
if (is_null($requestStack->getMainRequest())) {
return false;
}
return $requestStack->getMainRequest()->hasSession()
&& $requestStack->getMainRequest()->getSession()->isStarted();
}
}