<?php
namespace App\EventSubscriber\App;
use App\Controller\ExternalPartnersApi\Gohiring\V1_4\PositionOpeningController;
use App\Entity\ApplicationEvent;
use App\Entity\ContentDistribution\ContentDistributor;
use App\Entity\ExternalPartner\ExternalPartner;
use App\Entity\ExternalPartner\IntegratedExternalPartnerCustomer;
use App\Entity\PlatformEvent;
use App\Entity\PlatformSite;
use App\Enum\SyncRecurrentJobWithSearchesReason;
use App\Event\RecurrentJobCreatedDuringProfileCreationEvent;
use App\Event\RecurrentJobCreatedEvent;
use App\Event\RecurrentJobDeactivatedEvent;
use App\Event\RecurrentJobEditedEvent;
use App\Event\RecurrentJobEvent;
use App\Event\RecurrentJobExternalApplicationQuestionsWereImportedEvent;
use App\Event\RecurrentJobPublishedEvent;
use App\Event\RecurrentJobQuotaIncrementedDueToZipcodeChangeEvent;
use App\Event\RecurrentJobReactivatedEvent;
use App\Event\RecurrentJobSharePageRequestedEvent;
use App\Event\RecurrentJobSkippedUsedQuotaIncreaseEvent;
use App\Event\RecurrentJobUpdateAbortedBecauseZipcodeChangeNotPossibleEvent;
use App\Event\RecurrentJobUpdatedEvent;
use App\Event\RecurrentJobWillBeRemovedEvent;
use App\Event\RecurrentJobWillForwardToExternalUrlEvent;
use App\Service\AgenturFuerArbeitService;
use App\Service\ApplicationEventService;
use App\Service\ConversionEventService;
use App\Service\DestatisEconomicSectorService;
use App\Service\ExternalFeedsService;
use App\Service\ExternalPartner\IntegratedExternalPartnerGohiringService;
use App\Service\ExternalPartner\IntegratedExternalPartnerService;
use App\Service\ExternalPartner\IntegratedExternalPartnerSoftgardenService;
use App\Service\FeatureLimitationsService;
use App\Service\GoogleIndexingApiService;
use App\Service\NotificationService;
use App\Service\PlatformEventService;
use App\Service\ProfileService;
use App\Service\RecurrentJobContentDistributionValueService;
use App\Service\RecurrentJobService;
use App\Service\RecurrentJobStatusService;
use App\SymfonyMessage\SyncRecurrentJobWithSearchesSymfonyMessage;
use App\Utility\DateTimeUtility;
use App\Utility\RequestHelper;
use Doctrine\ORM\EntityManagerInterface;
use Exception;
use Firebase\JWT\JWT;
use FOS\ElasticaBundle\Persister\ObjectPersisterInterface;
use JanusHercules\DatawarehouseIntegration\Domain\Entity\BusinessEvent;
use JanusHercules\DatawarehouseIntegration\Domain\Entity\ExternalPartnerEvent;
use JanusHercules\DatawarehouseIntegration\Domain\Service\BusinessEventDomainService;
use JanusHercules\DatawarehouseIntegration\Domain\Service\ExternalPartnerEventDomainService;
use JanusHercules\ExternalApplicationQuestions\Domain\Service\ExternalApplicationQuestionsDomainService;
use JanusHercules\ExternalApplicationQuestions\Domain\SymfonyMessage\ImportExternalApplicationQuestionsSymfonyMessage;
use JanusHercules\Jobradar\Domain\SymfonyMessage\CreateJobradarMatchTriggeredByRecurrentJobSymfonyMessage;
use Psr\Log\LoggerInterface;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\Messenger\MessageBusInterface;
use Throwable;
readonly class RecurrentJobEventSubscriber implements EventSubscriberInterface
{
public function __construct(
private BusinessEventDomainService $businessEventDomainService,
private NotificationService $notificationService,
private ConversionEventService $conversionEventService,
private ObjectPersisterInterface $recurrentJobsPersister,
private IntegratedExternalPartnerService $integratedExternalPartnerService,
private ExternalPartnerEventDomainService $externalPartnerEventDomainService,
private GoogleIndexingApiService $googleIndexingApiService,
private FeatureLimitationsService $featureLimitationsService,
private PlatformEventService $platformEventService,
private RecurrentJobContentDistributionValueService $recurrentJobContentDistributionValueService,
private LoggerInterface $logger,
private MessageBusInterface $messageBus,
private RequestHelper $requestHelper,
private ApplicationEventService $applicationEventService,
private DestatisEconomicSectorService $destatisEconomicSectorService,
private AgenturFuerArbeitService $agenturFuerArbeitService,
private RecurrentJobService $recurrentJobService,
private EntityManagerInterface $entityManager,
private ProfileService $profileService,
private RecurrentJobStatusService $recurrentJobStatusService
) {
}
public static function getSubscribedEvents(): array
{
return [
RecurrentJobCreatedEvent::class => 'onRecurrentJobCreated',
RecurrentJobCreatedDuringProfileCreationEvent::class => 'onRecurrentJobCreatedDuringProfileCreation',
RecurrentJobPublishedEvent::class => 'onRecurrentJobPublished',
RecurrentJobEditedEvent::class => 'onRecurrentJobEdited',
RecurrentJobDeactivatedEvent::class => 'onRecurrentJobDeactivated',
RecurrentJobReactivatedEvent::class => 'onRecurrentJobReactivated',
RecurrentJobSharePageRequestedEvent::class => 'onRecurrentJobSharePageRequested',
RecurrentJobWillForwardToExternalUrlEvent::class => 'onRecurrentJobWillForwardToExternalUrlEvent',
RecurrentJobWillBeRemovedEvent::class => 'onRecurrentJobWillBeRemoved',
RecurrentJobUpdatedEvent::class => 'onRecurrentJobUpdated',
RecurrentJobExternalApplicationQuestionsWereImportedEvent::class => 'onRecurrentJobExternalApplicationQuestionsWereImported',
RecurrentJobQuotaIncrementedDueToZipcodeChangeEvent::class => 'onRecurrentJobQuotaIncrementedDueToZipcodeChange',
RecurrentJobUpdateAbortedBecauseZipcodeChangeNotPossibleEvent::class => 'onRecurrentJobUpdateAbortedBecauseZipcodeChangeNotPossible',
RecurrentJobSkippedUsedQuotaIncreaseEvent::class => 'onRecurrentJobSkippedUsedQuotaIncrease',
];
}
public function onRecurrentJobQuotaIncrementedDueToZipcodeChange(
RecurrentJobQuotaIncrementedDueToZipcodeChangeEvent $event
): void {
$this->externalPartnerEventDomainService->writeEvent(
ExternalPartnerEvent::EVENT_TYPE_USED_QUOTA_INCREMENTED_DUE_TO_CHANGED_ZIPCODE,
$event->getRecurrentJob()->getExternalPartner(),
$event->getRecurrentJob(),
$event->getQuota(),
null,
null,
null,
null,
$event->getRecurrentJob()->getJoboffererProfile()->getUser()
);
}
public function onRecurrentJobUpdateAbortedBecauseZipcodeChangeNotPossible(
RecurrentJobUpdateAbortedBecauseZipcodeChangeNotPossibleEvent $event
): void {
$this->externalPartnerEventDomainService->writeEvent(
ExternalPartnerEvent::EVENT_TYPE_RECURRENT_JOB_UPDATE_DENIED_BECAUSE_ZIPCODE_CHANGE_NOT_POSSIBLE,
$event->getRecurrentJob()->getExternalPartner(),
$event->getRecurrentJob(),
null,
null,
null,
null,
null,
$event->getRecurrentJob()->getJoboffererProfile()->getUser()
);
}
/** @throws Exception */
public function onRecurrentJobCreated(RecurrentJobEvent $event): void
{
if (!is_null($event->getRecurrentJob())
&& $event->getRecurrentJob()->isActive()
) {
$this->messageBus->dispatch(
new CreateJobradarMatchTriggeredByRecurrentJobSymfonyMessage(
$event->getRecurrentJob()
)
);
$this->messageBus->dispatch(
new SyncRecurrentJobWithSearchesSymfonyMessage(
$event->getRecurrentJob()->getId(),
SyncRecurrentJobWithSearchesReason::CREATED
)
);
if (ExternalApplicationQuestionsDomainService::recurrentJobCanHaveExternalApplicationQuestions($event->getRecurrentJob())) {
$this->messageBus->dispatch(
new ImportExternalApplicationQuestionsSymfonyMessage(
$event->getRecurrentJob()
)
);
}
$this->businessEventDomainService->writeNewEvent(
BusinessEvent::EVENT_TYPE_RECURRENT_JOB_PUBLISHED,
$event->getRecurrentJob()->getJoboffererProfile()->getUser(),
$event->getRecurrentJob(),
null,
json_encode([
'isPlus' => $event->getRecurrentJob()->isPlus(),
'isFlex' => $this->featureLimitationsService->recurrentJobIsFlex($event->getRecurrentJob()),
'customer' => is_null($event->getRecurrentJob()->getIntegratedExternalPartnerCustomer()) ? null : $event->getRecurrentJob()->getIntegratedExternalPartnerCustomer()->getInternalId(),
'businessName' => $event->getRecurrentJob()->getBusinessName(),
'title' => $event->getRecurrentJob()->getTitle(),
'zipCode' => $event->getRecurrentJob()->getZipCode(),
])
);
}
$customer = $event->getRecurrentJob()->getIntegratedExternalPartnerCustomer();
$this->businessEventDomainService->writeNewEvent(
BusinessEvent::EVENT_TYPE_RECURRENTJOB_CREATED,
$event->getRecurrentJob()->getJoboffererProfile()->getUser(),
$event->getRecurrentJob(),
null,
json_encode(
[
'recurrentJobId' => $event->getRecurrentJob()->getId(),
'userCreatedVia' => $event->getRecurrentJob()->getJoboffererProfile()->getUser()->getCreatedVia(),
'isPlus' => $event->getRecurrentJob()->isPlus(),
'isFlex' => $this->featureLimitationsService->recurrentJobIsFlex($event->getRecurrentJob()),
'applicationType' => $event->getRecurrentJob()->getApplicationType(),
'jobBoardProductId' => $event->getRecurrentJob()->getExternalPartnerRecurrentJobAdditionalInfoStringValueByName(
IntegratedExternalPartnerGohiringService::RECURRENT_JOB_ADDITIONAL_INFO_STRING_VALUE_NAME_GOHIRING_JOB_BOARD_PRODUCT_ID
),
'customer' => is_null($customer) ? null : $customer->getInternalId(),
'businessName' => $event->getRecurrentJob()->getBusinessName(),
'title' => $event->getRecurrentJob()->getTitle(),
'zipCode' => $event->getRecurrentJob()->getZipCode(),
])
);
$this->notificationService->uncancelNotification(
$event->getRecurrentJob()->getJoboffererProfile()->getUser(),
NotificationService::NOTIFICATION_TYPE_UNREAD_CONVERSATION_MESSAGES
);
$this->conversionEventService->handleConversionGoalReached(
ConversionEventService::CAMPAIGN_ID_NOTIFICATION,
NotificationService::NOTIFICATION_TYPE_MISSING_RECURRENT_JOBS
);
$this->conversionEventService->handleConversionGoalReached(
ConversionEventService::CAMPAIGN_ID_JOBOO_MAILING_VONOVIA_2020_07_14,
0
);
if ($event->getRecurrentJob()->belongsToExternalPartner()) {
switch ($event->getRecurrentJob()->getExternalPartner()->getId()) {
case ExternalPartner::ID_GERMAN_PERSONNEL_FEED:
$businessEventType = BusinessEvent::EVENT_TYPE_GERMAN_PERSONNEL_NEW_RECURRENT_JOB_CREATED;
break;
case ExternalPartner::ID_HAYS_FEED:
$businessEventType = BusinessEvent::EVENT_TYPE_HAYS_NEW_RECURRENT_JOB_CREATED;
break;
case ExternalPartner::ID_MYSTAFFPILOT_FEED:
$businessEventType = BusinessEvent::EVENT_TYPE_MYSTAFFPILOT_NEW_RECURRENT_JOB_CREATED;
break;
case ExternalPartner::ID_REWE_FEED:
$businessEventType = BusinessEvent::EVENT_TYPE_REWE_NEW_RECURRENT_JOB_CREATED;
break;
default:
$businessEventType = null;
}
if (!is_null($businessEventType)) {
$this->businessEventDomainService->writeNewEvent(
$businessEventType,
$event->getRecurrentJob()->getJoboffererProfile()->getUser(),
$event->getRecurrentJob(),
null,
json_encode([
'externalId' => $this->integratedExternalPartnerService->getExternalIdForRecurrentJob($event->getRecurrentJob()),
'externalPartner' => $event->getRecurrentJob()->getExternalPartner()->getId(),
'occupationalFieldSearchterm' => $event->getRecurrentJob()->getOccupationalFieldSearchterm(),
'additionalSearchterms' => $event->getRecurrentJob()->getAdditionalOccupationalFieldSearchterms(),
'employmentType' => $event->getRecurrentJob()->getEmploymentTypes(),
'careerLevel' => $event->getRecurrentJob()->getCareerLevels(),
'businessName' => $event->getRecurrentJob()->getJoboffererProfile()->getBusinessName(),
'economicSector' => $event->getRecurrentJob()->getJoboffererProfile()->getEconomicSector(),
'titel' => $event->getRecurrentJob()->getTitle(),
'zipCode' => $event->getRecurrentJob()->getZipCode(),
'internalId' => $event->getRecurrentJob()->getIntegratedExternalPartnerCustomer()->getInternalId(),
])
);
}
$this->externalPartnerEventDomainService->writeEvent(
ExternalPartnerEvent::EVENT_TYPE_RECURRENT_JOB_CREATED,
$event->getRecurrentJob()->getExternalPartner(),
$event->getRecurrentJob(),
null,
null,
null,
null,
null,
$event->getRecurrentJob()->getJoboffererProfile()->getUser(),
null
);
if (!is_null($event->getRecurrentJob()->getQuota())) {
$this->businessEventDomainService->writeNewEvent(
BusinessEvent::EVENT_TYPE_NEW_BILLING_FOR_EXTERNAL_RECURRENT_JOB,
$event->getRecurrentJob()->getJoboffererProfile()->getUser(),
$event->getRecurrentJob(),
null,
json_encode([
'externalId' => $this->integratedExternalPartnerService->getExternalIdForRecurrentJob($event->getRecurrentJob()),
'externalPartner' => $event->getRecurrentJob()->getExternalPartner()->getId(),
'quotaId' => $event->getRecurrentJob()->getQuota()->getId(),
'userCreatedVia' => $event->getRecurrentJob()->getJoboffererProfile()->getUser()->getCreatedVia(),
'customer' => is_null($event->getRecurrentJob()->getIntegratedExternalPartnerCustomer()) ? null : $event->getRecurrentJob()->getIntegratedExternalPartnerCustomer()->getInternalId()
])
);
$this->businessEventDomainService->writeNewEvent(
BusinessEvent::EVENT_TYPE_USED_QUOTA_VALUE_RAISED,
$event->getRecurrentJob()->getJoboffererProfile()->getUser(),
$event->getRecurrentJob(),
null,
json_encode([
'quotaId' => $event->getRecurrentJob()->getQuota()->getId(),
'recurrentJobId' => $event->getRecurrentJob()->getId(),
'customerId' => $event->getRecurrentJob()->getQuota()->getIntegratedExternalPartnerCustomer()->getId(),
'customerInternalId' => $event->getRecurrentJob()->getQuota()->getIntegratedExternalPartnerCustomer()->getInternalId(),
'customerBusinessName' => $event->getRecurrentJob()->getQuota()->getIntegratedExternalPartnerCustomer()->getBusinessName(),
'userCreatedVia' => $event->getRecurrentJob()->getJoboffererProfile()->getUser()->getCreatedVia(),
'businessName' => $event->getRecurrentJob()->getBusinessName(),
'title' => $event->getRecurrentJob()->getTitle(),
'zipCode' => $event->getRecurrentJob()->getZipCode(),
])
);
}
}
$this->destatisEconomicSectorService->setDestatisEconomicSectorBasedOnOccupationalFieldSearchtermIfPossible($event->getRecurrentJob());
$this->agenturFuerArbeitService->checkIfRecurrentJobCanBeAutomaticallyMatchedToAfaProfession($event->getRecurrentJob());
$this->agenturFuerArbeitService->queueReminderMailingForAfaCategorizationIfNecessary($event->getRecurrentJob());
}
/**
* @throws Exception
*/
public function onRecurrentJobCreatedDuringProfileCreation(RecurrentJobEvent $event): void
{
if (!is_null($event->getRecurrentJob())
&& $event->getRecurrentJob()->isActive()
) {
$this->messageBus->dispatch(
new CreateJobradarMatchTriggeredByRecurrentJobSymfonyMessage(
$event->getRecurrentJob()
)
);
$this->messageBus->dispatch(
new SyncRecurrentJobWithSearchesSymfonyMessage(
$event->getRecurrentJob()->getId(),
SyncRecurrentJobWithSearchesReason::CREATED_DURING_PROFILE_CREATION
)
);
$this->businessEventDomainService->writeNewEvent(
BusinessEvent::EVENT_TYPE_RECURRENT_JOB_PUBLISHED,
$event->getRecurrentJob()->getJoboffererProfile()->getUser(),
$event->getRecurrentJob(),
null,
json_encode([
'isPlus' => $event->getRecurrentJob()->isPlus(),
'isFlex' => $this->featureLimitationsService->recurrentJobIsFlex($event->getRecurrentJob()),
'customer' => is_null($event->getRecurrentJob()->getIntegratedExternalPartnerCustomer()) ? null : $event->getRecurrentJob()->getIntegratedExternalPartnerCustomer()->getInternalId(),
'businessName' => $event->getRecurrentJob()->getBusinessName(),
'title' => $event->getRecurrentJob()->getTitle(),
'zipCode' => $event->getRecurrentJob()->getZipCode(),
])
);
}
$this->businessEventDomainService->writeNewEvent(
BusinessEvent::EVENT_TYPE_RECURRENTJOB_CREATED_DURING_PROFILE_CREATION,
$event->getRecurrentJob()->getJoboffererProfile()->getUser(),
$event->getRecurrentJob(),
null,
json_encode($event->getRecurrentJob()->getId())
);
$this->agenturFuerArbeitService->checkIfRecurrentJobCanBeAutomaticallyMatchedToAfaProfession($event->getRecurrentJob());
$this->agenturFuerArbeitService->queueReminderMailingForAfaCategorizationIfNecessary($event->getRecurrentJob());
}
/**
* @throws Exception
*/
public function onRecurrentJobPublished(RecurrentJobEvent $event): void
{
if (!is_null($event->getRecurrentJob())) {
$this->messageBus->dispatch(
new CreateJobradarMatchTriggeredByRecurrentJobSymfonyMessage(
$event->getRecurrentJob()
)
);
$this->messageBus->dispatch(
new SyncRecurrentJobWithSearchesSymfonyMessage(
$event->getRecurrentJob()->getId(),
SyncRecurrentJobWithSearchesReason::PUBLISHED
)
);
$this->businessEventDomainService->writeNewEvent(
BusinessEvent::EVENT_TYPE_RECURRENT_JOB_PUBLISHED,
$event->getRecurrentJob()->getJoboffererProfile()->getUser(),
$event->getRecurrentJob(),
null,
json_encode([
'isPlus' => $event->getRecurrentJob()->isPlus(),
'isFlex' => $this->featureLimitationsService->recurrentJobIsFlex($event->getRecurrentJob()),
'customer' => is_null($event->getRecurrentJob()->getIntegratedExternalPartnerCustomer()) ? null : $event->getRecurrentJob()->getIntegratedExternalPartnerCustomer()->getInternalId(),
'businessName' => $event->getRecurrentJob()->getBusinessName(),
'title' => $event->getRecurrentJob()->getTitle(),
'zipCode' => $event->getRecurrentJob()->getZipCode(),
])
);
$this->recurrentJobService->sendAlertEmailAboutJoboffererWithCriticalNumberOfRecurrentJobsIfNecessary($event->getRecurrentJob()->getJoboffererProfile());
}
}
public function onRecurrentJobExternalApplicationQuestionsWereImported(
RecurrentJobExternalApplicationQuestionsWereImportedEvent $event
): void {
if (is_null($event->getRecurrentJob())) {
return;
}
$this->externalPartnerEventDomainService->writeEvent(
ExternalPartnerEvent::EVENT_TYPE_IMPORTED_EXTERNAL_APPLICATION_QUESTIONS,
$event->getRecurrentJob()->getExternalPartner(),
$event->getRecurrentJob(),
null,
null,
null,
null,
null,
$event->getRecurrentJob()->getJoboffererProfile()->getUser()
);
}
/** @throws Exception */
public function onRecurrentJobEdited(RecurrentJobEvent $event): void
{
if (!is_null($event->getRecurrentJob())
&& $event->getRecurrentJob()->isActive()
) {
$this->messageBus->dispatch(
new CreateJobradarMatchTriggeredByRecurrentJobSymfonyMessage(
$event->getRecurrentJob()
)
);
$this->messageBus->dispatch(
new SyncRecurrentJobWithSearchesSymfonyMessage(
$event->getRecurrentJob()->getId(),
SyncRecurrentJobWithSearchesReason::EDITED
)
);
}
$this->businessEventDomainService->writeNewEvent(
BusinessEvent::EVENT_TYPE_RECURRENTJOB_EDITED,
$event->getRecurrentJob()->getJoboffererProfile()->getUser(),
$event->getRecurrentJob(),
null,
json_encode(
[
'recurrentJobId' => $event->getRecurrentJob()->getId(),
'isPlus' => $event->getRecurrentJob()->isPlus(),
'isFlex' => $this->featureLimitationsService->recurrentJobIsFlex($event->getRecurrentJob()),
'applicationType' => $event->getRecurrentJob()->getApplicationType()
]
)
);
$this->destatisEconomicSectorService->setDestatisEconomicSectorBasedOnOccupationalFieldSearchtermIfPossible($event->getRecurrentJob());
$this->notificationService->uncancelNotification(
$event->getRecurrentJob()->getJoboffererProfile()->getUser(),
NotificationService::NOTIFICATION_TYPE_UNREAD_CONVERSATION_MESSAGES
);
if ($event->getRecurrentJob()->isFindable()) {
$this->recurrentJobsPersister->replaceOne($event->getRecurrentJob());
}
}
public function onRecurrentJobDeactivated(RecurrentJobDeactivatedEvent $event): void
{
if (!is_null($event->getRecurrentJob())) {
$this->messageBus->dispatch(
new SyncRecurrentJobWithSearchesSymfonyMessage(
$event->getRecurrentJob()->getId(),
SyncRecurrentJobWithSearchesReason::DEACTIVATED
)
);
}
$recurrentJob = $event->getRecurrentJob();
$integratedExternalPartnerCustomer = null;
if (!is_null($recurrentJob)) {
$integratedExternalPartnerCustomer = $recurrentJob->getIntegratedExternalPartnerCustomer();
}
$this->businessEventDomainService->writeNewEvent(
BusinessEvent::EVENT_TYPE_RECURRENT_JOB_DEACTIVATED,
$recurrentJob->getJoboffererProfile()->getUser(),
$recurrentJob,
null,
json_encode(
[
'isPlus' => $recurrentJob->isPlus(),
'isFlex' => $this->featureLimitationsService->recurrentJobIsFlex($recurrentJob),
'remainingActiveRecurrentJobs' => $this->recurrentJobStatusService->getNumberOfActiveRecurrentJobsFromJoboffererProfile($recurrentJob->getJoboffererProfile()),
'businessName' => $recurrentJob->getBusinessName(),
'title' => $recurrentJob->getTitle(),
'zipCode' => $recurrentJob->getZipCode(),
'internalId' => !is_null($integratedExternalPartnerCustomer) ? $integratedExternalPartnerCustomer->getInternalId() : null,
]
)
);
if ($recurrentJob->belongsToExternalPartner()) {
$this->externalPartnerEventDomainService->writeEvent(
ExternalPartnerEvent::EVENT_TYPE_RECURRENT_JOB_DEACTIVATED,
$recurrentJob->getExternalPartner(),
$recurrentJob,
$recurrentJob->getQuota(),
null,
null,
null,
null,
$recurrentJob->getJoboffererProfile()->getUser()
);
}
}
/**
* @throws Exception
*/
public function onRecurrentJobSharePageRequested(RecurrentJobSharePageRequestedEvent $event): void
{
$request = $event->getRequest();
$recurrentJob = $event->getRecurrentJob();
$user = $event->getRequestingUser();
if ((int)DateTimeUtility::createDateTimeCet()->format('Ym') > 202209) { // We want a clean cutoff for bot-filtered tracking on October 1, 2022
if ($this->requestHelper::isBotOrCrawlerRequest($request)) {
$this->applicationEventService->writeNewEvent(
ApplicationEvent::EVENT_CATEGORY_INFO,
ApplicationEvent::EVENT_TYPE_RECURRENT_JOB_SHARE_PAGE_WAS_REQUESTED_BY_BOT,
null,
null,
null,
json_encode([
'recurrentJobId' => !is_null($event->getRecurrentJob()) ? $event->getRecurrentJob()->getId() : null,
'requestHeaderUserAgent' => $request->headers->get('User-Agent'),
'requestHeaderXForwardedFor' => $request->headers->get('X-Forwarded-For'),
'realClientIpAddress' => RequestHelper::getRealClientIpAddress($request),
])
);
return; // No further event tracking / handling if this is a bot request
}
}
$this->conversionEventService->initiateGoalReachedConversionTrackingBasedOnRequest(
$request,
$user
);
if (!is_null($recurrentJob)) {
if ($this->featureLimitationsService->recurrentJobMustDisplayExtendedApplicationForm($recurrentJob, $user)) {
$this->conversionEventService->initiateGoalReachedConversionTracking($user, ConversionEventService::CAMPAIGN_ID_EXTENDED_APPLICATION, is_null($user) ? 0 : 1, $recurrentJob, $request);
}
}
$this->conversionEventService->handleRequest($request);
$this->conversionEventService->handleConversionGoalReached(ConversionEventService::CAMPAIGN_ID_INTEGRATED_EXTERNAL_PARTNER_CUSTOMER_PREMIUM_RADAR, 1, $request, $user, $recurrentJob);
if (!is_null($recurrentJob) && $recurrentJob->belongsToExternalPartner()) {
$this->externalPartnerEventDomainService->writeEvent(
ExternalPartnerEvent::EVENT_TYPE_RECURRENT_JOB_SHARE_PAGE_REQUESTED,
$recurrentJob->getExternalPartner(),
$recurrentJob,
null,
null,
null,
null,
null,
$user,
$request,
$event->getConversionCampaignId(),
$event->getPlatformSiteId()
);
}
if (!is_null($premiumRadarContext = $request->get('premiumRadarContext', null))) {
$this->businessEventDomainService->writeNewEvent(BusinessEvent::EVENT_TYPE_INTEGRATED_EXTERNAL_PARTNER_CUSTOMER_PREMIUM_RADAR_LINK_CLICKED, $user, $recurrentJob, null, json_encode(['premiumRadarContext' => $premiumRadarContext, 'externalPartnerForwarding' => 'false', 'relatedWantedJobId' => $request->get('relatedWantedJobId', null)]));
}
if (!is_null($recurrentJob)
&& !is_null($request->get(ConversionEventService::QUERY_STRING_PARAM_NAME_CONVERSION_CAMPAIGN_ID))
&& ((int)$request->get(ConversionEventService::QUERY_STRING_PARAM_NAME_CONVERSION_CAMPAIGN_ID, -1) === ConversionEventService::CAMPAIGN_ID_TALENTCOM
|| (int)$request->get(ConversionEventService::QUERY_STRING_PARAM_NAME_CONVERSION_CAMPAIGN_ID, -1) === ConversionEventService::CAMPAIGN_ID_JOBLIFT
|| (int)$request->get(ConversionEventService::QUERY_STRING_PARAM_NAME_CONVERSION_CAMPAIGN_ID, -1) === ConversionEventService::CAMPAIGN_ID_EBAY
|| (int)$request->get(ConversionEventService::QUERY_STRING_PARAM_NAME_CONVERSION_CAMPAIGN_ID, -1) === ConversionEventService::CAMPAIGN_ID_JOBWARE
|| (int)$request->get(ConversionEventService::QUERY_STRING_PARAM_NAME_CONVERSION_CAMPAIGN_ID, -1) === ConversionEventService::CAMPAIGN_ID_GOOGLE_FOR_JOBS
|| (int)$request->get(ConversionEventService::QUERY_STRING_PARAM_NAME_CONVERSION_CAMPAIGN_ID, -1) === ConversionEventService::CAMPAIGN_ID_AGENTUR_FUER_ARBEIT
|| (int)$request->get(ConversionEventService::QUERY_STRING_PARAM_NAME_CONVERSION_CAMPAIGN_ID, -1) === ConversionEventService::CAMPAIGN_ID_INDEED_RECRUIT_DL_CONTENT_DISTRIBUTION_VIA_XML_FEED
|| (int)$request->get(ConversionEventService::QUERY_STRING_PARAM_NAME_CONVERSION_CAMPAIGN_ID, -1) === ConversionEventService::CAMPAIGN_ID_STELLENONLINE
|| (int)$request->get(ConversionEventService::QUERY_STRING_PARAM_NAME_CONVERSION_CAMPAIGN_ID, -1) === ConversionEventService::CAMPAIGN_ID_MEINESTADT
)
) {
$additionalData = [];
$additionalData['directForwarding'] = (
$recurrentJob->belongsToIntegratedExternalPartnerCustomer()
&& $this->featureLimitationsService->recurrentJobMustLinkExternally($recurrentJob)
&& $recurrentJob->getIntegratedExternalPartnerCustomer()->isDirectForwarded()
);
if ($recurrentJob->belongsToIntegratedExternalPartnerCustomer()) {
$additionalData['internalId'] = $recurrentJob->getIntegratedExternalPartnerCustomer()->getInternalId();
}
$additionalData['title'] = $recurrentJob->getTitle();
$additionalData['zipCode'] = $recurrentJob->getZipcode();
$additionalData['recurrentJobId'] = $recurrentJob->getId();
$additionalData['occupationalFieldSearchterm'] = $recurrentJob->getOccupationalFieldSearchterm();
if (!is_null($recurrentJob->getJoboffererProfile())
&& !is_null($recurrentJob->getJoboffererProfile()->getEconomicSector())
&& !is_null($recurrentJob->getJoboffererProfile()->getEconomicSector()->getTitle())
) {
$additionalData['economicSector'] = $recurrentJob->getJoboffererProfile()->getEconomicSector()->getTitle();
$additionalData['businessName'] = $recurrentJob->getJoboffererProfile()->getBusinessName();
}
if ((int)$request->get(ConversionEventService::QUERY_STRING_PARAM_NAME_CONVERSION_CAMPAIGN_ID, -1) === ConversionEventService::CAMPAIGN_ID_TALENTCOM) {
/** @var ContentDistributor $contentDistributor */
$contentDistributor = $this->entityManager->find(ContentDistributor::class, ExternalFeedsService::EXTERNAL_FEED_TALENTCOM);
$clickPrice = $this->recurrentJobContentDistributionValueService->getCpcForXmlFeed($recurrentJob, $contentDistributor);
if (is_null($clickPrice) || !is_numeric($clickPrice)) {
$clickPrice = 0.00;
}
$additionalData['clickPrice'] = $clickPrice;
$this->businessEventDomainService->writeNewEvent(
BusinessEvent::EVENT_TYPE_TALENTCOM_LINK_CLICKED,
$user,
$recurrentJob,
null,
json_encode($additionalData)
);
if ((int)$request->get(ConversionEventService::QUERY_STRING_PARAM_NAME_CONVERSION_SUBCAMPAIGN_ID, -1) === ExternalFeedsService::EXTERNAL_FEED_SUBCAMPAIGN_ID_A_FEED) {
$this->platformEventService->eventHasOccurred(
PlatformEvent::EVENT_TYPE_FORWARDED_TO_RECURRENT_JOB_FROM_TALENTCOM_A_FEED,
$recurrentJob->getId()
);
} elseif ((int)$request->get(ConversionEventService::QUERY_STRING_PARAM_NAME_CONVERSION_SUBCAMPAIGN_ID, -1) === ExternalFeedsService::EXTERNAL_FEED_SUBCAMPAIGN_ID_B_FEED) {
$this->platformEventService->eventHasOccurred(
PlatformEvent::EVENT_TYPE_FORWARDED_TO_RECURRENT_JOB_FROM_TALENTCOM_B_FEED,
$recurrentJob->getId()
);
} elseif ((int)$request->get(ConversionEventService::QUERY_STRING_PARAM_NAME_CONVERSION_SUBCAMPAIGN_ID, -1) === ExternalFeedsService::EXTERNAL_FEED_SUBCAMPAIGN_ID_C_FEED) {
$this->platformEventService->eventHasOccurred(
PlatformEvent::EVENT_TYPE_FORWARDED_TO_RECURRENT_JOB_FROM_TALENTCOM_C_FEED,
$recurrentJob->getId()
);
} elseif ((int)$request->get(ConversionEventService::QUERY_STRING_PARAM_NAME_CONVERSION_SUBCAMPAIGN_ID, -1) === ExternalFeedsService::EXTERNAL_FEED_SUBCAMPAIGN_ID_D_FEED) {
$this->platformEventService->eventHasOccurred(
PlatformEvent::EVENT_TYPE_FORWARDED_TO_RECURRENT_JOB_FROM_TALENTCOM_D_FEED,
$recurrentJob->getId()
);
} elseif ((int)$request->get(ConversionEventService::QUERY_STRING_PARAM_NAME_CONVERSION_SUBCAMPAIGN_ID, -1) === ExternalFeedsService::EXTERNAL_FEED_SUBCAMPAIGN_ID_E_FEED) {
$this->platformEventService->eventHasOccurred(
PlatformEvent::EVENT_TYPE_FORWARDED_TO_RECURRENT_JOB_FROM_TALENTCOM_E_FEED,
$recurrentJob->getId()
);
} elseif ((int)$request->get(ConversionEventService::QUERY_STRING_PARAM_NAME_CONVERSION_SUBCAMPAIGN_ID, -1) === ExternalFeedsService::EXTERNAL_FEED_SUBCAMPAIGN_ID_F_FEED) {
$this->platformEventService->eventHasOccurred(
PlatformEvent::EVENT_TYPE_FORWARDED_TO_RECURRENT_JOB_FROM_TALENTCOM_F_FEED,
$recurrentJob->getId()
);
} elseif ((int)$request->get(ConversionEventService::QUERY_STRING_PARAM_NAME_CONVERSION_SUBCAMPAIGN_ID, -1) === ExternalFeedsService::EXTERNAL_FEED_SUBCAMPAIGN_ID_G_FEED) {
$this->platformEventService->eventHasOccurred(
PlatformEvent::EVENT_TYPE_FORWARDED_TO_RECURRENT_JOB_FROM_TALENTCOM_G_FEED,
$recurrentJob->getId()
);
}
} elseif ((int)$request->get(ConversionEventService::QUERY_STRING_PARAM_NAME_CONVERSION_CAMPAIGN_ID, -1) === ConversionEventService::CAMPAIGN_ID_JOBLIFT) {
$this->businessEventDomainService->writeNewEvent(
BusinessEvent::EVENT_TYPE_JOBLIFT_LINK_CLICKED,
$user,
$recurrentJob,
null,
json_encode($additionalData)
);
if ((int)$request->get(ConversionEventService::QUERY_STRING_PARAM_NAME_CONVERSION_SUBCAMPAIGN_ID, -1) === ExternalFeedsService::EXTERNAL_FEED_SUBCAMPAIGN_ID_A_FEED) {
$this->platformEventService->eventHasOccurred(
PlatformEvent::EVENT_TYPE_FORWARDED_TO_RECURRENT_JOB_FROM_JOBLIFT_A_FEED,
$recurrentJob->getId()
);
} elseif ((int)$request->get(ConversionEventService::QUERY_STRING_PARAM_NAME_CONVERSION_SUBCAMPAIGN_ID, -1) === ExternalFeedsService::EXTERNAL_FEED_SUBCAMPAIGN_ID_B_FEED) {
$this->platformEventService->eventHasOccurred(
PlatformEvent::EVENT_TYPE_FORWARDED_TO_RECURRENT_JOB_FROM_JOBLIFT_B_FEED,
$recurrentJob->getId()
);
} elseif ((int)$request->get(ConversionEventService::QUERY_STRING_PARAM_NAME_CONVERSION_SUBCAMPAIGN_ID, -1) === ExternalFeedsService::EXTERNAL_FEED_SUBCAMPAIGN_ID_C_FEED) {
$this->platformEventService->eventHasOccurred(
PlatformEvent::EVENT_TYPE_FORWARDED_TO_RECURRENT_JOB_FROM_JOBLIFT_C_FEED,
$recurrentJob->getId()
);
} elseif ((int)$request->get(ConversionEventService::QUERY_STRING_PARAM_NAME_CONVERSION_SUBCAMPAIGN_ID, -1) === ExternalFeedsService::EXTERNAL_FEED_SUBCAMPAIGN_ID_D_FEED) {
$this->platformEventService->eventHasOccurred(
PlatformEvent::EVENT_TYPE_FORWARDED_TO_RECURRENT_JOB_FROM_JOBLIFT_D_FEED,
$recurrentJob->getId()
);
} elseif ((int)$request->get(ConversionEventService::QUERY_STRING_PARAM_NAME_CONVERSION_SUBCAMPAIGN_ID, -1) === ExternalFeedsService::EXTERNAL_FEED_SUBCAMPAIGN_ID_E_FEED) {
$this->platformEventService->eventHasOccurred(
PlatformEvent::EVENT_TYPE_FORWARDED_TO_RECURRENT_JOB_FROM_JOBLIFT_E_FEED,
$recurrentJob->getId()
);
} elseif ((int)$request->get(ConversionEventService::QUERY_STRING_PARAM_NAME_CONVERSION_SUBCAMPAIGN_ID, -1) === ExternalFeedsService::EXTERNAL_FEED_SUBCAMPAIGN_ID_F_FEED) {
$this->platformEventService->eventHasOccurred(
PlatformEvent::EVENT_TYPE_FORWARDED_TO_RECURRENT_JOB_FROM_JOBLIFT_F_FEED,
$recurrentJob->getId()
);
} elseif ((int)$request->get(ConversionEventService::QUERY_STRING_PARAM_NAME_CONVERSION_SUBCAMPAIGN_ID, -1) === ExternalFeedsService::EXTERNAL_FEED_SUBCAMPAIGN_ID_G_FEED) {
$this->platformEventService->eventHasOccurred(
PlatformEvent::EVENT_TYPE_FORWARDED_TO_RECURRENT_JOB_FROM_JOBLIFT_G_FEED,
$recurrentJob->getId()
);
} elseif ((int)$request->get(ConversionEventService::QUERY_STRING_PARAM_NAME_CONVERSION_SUBCAMPAIGN_ID, -1) === ExternalFeedsService::EXTERNAL_FEED_SUBCAMPAIGN_ID_M_FEED) {
$this->platformEventService->eventHasOccurred(
PlatformEvent::EVENT_TYPE_FORWARDED_TO_RECURRENT_JOB_FROM_JOBLIFT_M_FEED,
$recurrentJob->getId()
);
}
} elseif ((int)$request->get(ConversionEventService::QUERY_STRING_PARAM_NAME_CONVERSION_CAMPAIGN_ID, -1) === ConversionEventService::CAMPAIGN_ID_EBAY) {
$this->businessEventDomainService->writeNewEvent(
BusinessEvent::EVENT_TYPE_EBAY_LINK_CLICKED,
$user,
$recurrentJob,
null,
json_encode($additionalData)
);
} elseif ((int)$request->get(ConversionEventService::QUERY_STRING_PARAM_NAME_CONVERSION_CAMPAIGN_ID, -1) === ConversionEventService::CAMPAIGN_ID_JOBWARE) {
$this->businessEventDomainService->writeNewEvent(
BusinessEvent::EVENT_TYPE_JOBWARE_LINK_CLICKED,
$user,
$recurrentJob,
null,
json_encode($additionalData)
);
} elseif ((int)$request->get(ConversionEventService::QUERY_STRING_PARAM_NAME_CONVERSION_CAMPAIGN_ID, -1) === ConversionEventService::CAMPAIGN_ID_STELLENONLINE) {
$this->businessEventDomainService->writeNewEvent(
BusinessEvent::EVENT_TYPE_STELLENONLINE_LINK_CLICKED,
$user,
$recurrentJob,
null,
json_encode($additionalData)
);
if ((int)$request->get(ConversionEventService::QUERY_STRING_PARAM_NAME_CONVERSION_SUBCAMPAIGN_ID, -1) === ExternalFeedsService::EXTERNAL_FEED_SUBCAMPAIGN_ID_A_FEED) {
$this->platformEventService->eventHasOccurred(
PlatformEvent::EVENT_TYPE_FORWARDED_TO_RECURRENT_JOB_FROM_STELLENONLINE_A_FEED,
$recurrentJob->getId()
);
} elseif ((int)$request->get(ConversionEventService::QUERY_STRING_PARAM_NAME_CONVERSION_SUBCAMPAIGN_ID, -1) === ExternalFeedsService::EXTERNAL_FEED_SUBCAMPAIGN_ID_B_FEED) {
$this->platformEventService->eventHasOccurred(
PlatformEvent::EVENT_TYPE_FORWARDED_TO_RECURRENT_JOB_FROM_STELLENONLINE_B_FEED,
$recurrentJob->getId()
);
} elseif ((int)$request->get(ConversionEventService::QUERY_STRING_PARAM_NAME_CONVERSION_SUBCAMPAIGN_ID, -1) === ExternalFeedsService::EXTERNAL_FEED_SUBCAMPAIGN_ID_C_FEED) {
$this->platformEventService->eventHasOccurred(
PlatformEvent::EVENT_TYPE_FORWARDED_TO_RECURRENT_JOB_FROM_STELLENONLINE_C_FEED,
$recurrentJob->getId()
);
} elseif ((int)$request->get(ConversionEventService::QUERY_STRING_PARAM_NAME_CONVERSION_SUBCAMPAIGN_ID, -1) === ExternalFeedsService::EXTERNAL_FEED_SUBCAMPAIGN_ID_D_FEED) {
$this->platformEventService->eventHasOccurred(
PlatformEvent::EVENT_TYPE_FORWARDED_TO_RECURRENT_JOB_FROM_STELLENONLINE_D_FEED,
$recurrentJob->getId()
);
} elseif ((int)$request->get(ConversionEventService::QUERY_STRING_PARAM_NAME_CONVERSION_SUBCAMPAIGN_ID, -1) === ExternalFeedsService::EXTERNAL_FEED_SUBCAMPAIGN_ID_E_FEED) {
$this->platformEventService->eventHasOccurred(
PlatformEvent::EVENT_TYPE_FORWARDED_TO_RECURRENT_JOB_FROM_STELLENONLINE_E_FEED,
$recurrentJob->getId()
);
} elseif ((int)$request->get(ConversionEventService::QUERY_STRING_PARAM_NAME_CONVERSION_SUBCAMPAIGN_ID, -1) === ExternalFeedsService::EXTERNAL_FEED_SUBCAMPAIGN_ID_F_FEED) {
$this->platformEventService->eventHasOccurred(
PlatformEvent::EVENT_TYPE_FORWARDED_TO_RECURRENT_JOB_FROM_STELLENONLINE_F_FEED,
$recurrentJob->getId()
);
} elseif ((int)$request->get(ConversionEventService::QUERY_STRING_PARAM_NAME_CONVERSION_SUBCAMPAIGN_ID, -1) === ExternalFeedsService::EXTERNAL_FEED_SUBCAMPAIGN_ID_G_FEED) {
$this->platformEventService->eventHasOccurred(
PlatformEvent::EVENT_TYPE_FORWARDED_TO_RECURRENT_JOB_FROM_STELLENONLINE_G_FEED,
$recurrentJob->getId()
);
} elseif ((int)$request->get(ConversionEventService::QUERY_STRING_PARAM_NAME_CONVERSION_SUBCAMPAIGN_ID, -1) === ExternalFeedsService::EXTERNAL_FEED_SUBCAMPAIGN_ID_M_FEED) {
$this->platformEventService->eventHasOccurred(
PlatformEvent::EVENT_TYPE_FORWARDED_TO_RECURRENT_JOB_FROM_STELLENONLINE_M_FEED,
$recurrentJob->getId()
);
}
} elseif ((int)$request->get(ConversionEventService::QUERY_STRING_PARAM_NAME_CONVERSION_CAMPAIGN_ID, -1) === ConversionEventService::CAMPAIGN_ID_JOOBLE) {
$this->businessEventDomainService->writeNewEvent(
BusinessEvent::EVENT_TYPE_JOOBLE_LINK_CLICKED,
$user,
$recurrentJob,
null,
json_encode($additionalData)
);
if ((int)$request->get(ConversionEventService::QUERY_STRING_PARAM_NAME_CONVERSION_SUBCAMPAIGN_ID, -1) === ExternalFeedsService::EXTERNAL_FEED_SUBCAMPAIGN_ID_A_FEED) {
$this->platformEventService->eventHasOccurred(
PlatformEvent::EVENT_TYPE_FORWARDED_TO_RECURRENT_JOB_FROM_JOOBLE_A_FEED,
$recurrentJob->getId()
);
} elseif ((int)$request->get(ConversionEventService::QUERY_STRING_PARAM_NAME_CONVERSION_SUBCAMPAIGN_ID, -1) === ExternalFeedsService::EXTERNAL_FEED_SUBCAMPAIGN_ID_B_FEED) {
$this->platformEventService->eventHasOccurred(
PlatformEvent::EVENT_TYPE_FORWARDED_TO_RECURRENT_JOB_FROM_JOOBLE_B_FEED,
$recurrentJob->getId()
);
} elseif ((int)$request->get(ConversionEventService::QUERY_STRING_PARAM_NAME_CONVERSION_SUBCAMPAIGN_ID, -1) === ExternalFeedsService::EXTERNAL_FEED_SUBCAMPAIGN_ID_C_FEED) {
$this->platformEventService->eventHasOccurred(
PlatformEvent::EVENT_TYPE_FORWARDED_TO_RECURRENT_JOB_FROM_JOOBLE_C_FEED,
$recurrentJob->getId()
);
} elseif ((int)$request->get(ConversionEventService::QUERY_STRING_PARAM_NAME_CONVERSION_SUBCAMPAIGN_ID, -1) === ExternalFeedsService::EXTERNAL_FEED_SUBCAMPAIGN_ID_D_FEED) {
$this->platformEventService->eventHasOccurred(
PlatformEvent::EVENT_TYPE_FORWARDED_TO_RECURRENT_JOB_FROM_JOOBLE_D_FEED,
$recurrentJob->getId()
);
}
} elseif ((int)$request->get(ConversionEventService::QUERY_STRING_PARAM_NAME_CONVERSION_CAMPAIGN_ID, -1) === ConversionEventService::CAMPAIGN_ID_MEINESTADT) {
$this->businessEventDomainService->writeNewEvent(
BusinessEvent::EVENT_TYPE_MEINESTADT_LINK_CLICKED,
$user,
$recurrentJob,
null,
json_encode($additionalData)
);
if ((int)$request->get(ConversionEventService::QUERY_STRING_PARAM_NAME_CONVERSION_SUBCAMPAIGN_ID, -1) === ExternalFeedsService::EXTERNAL_FEED_SUBCAMPAIGN_ID_A_FEED) {
$this->platformEventService->eventHasOccurred(
PlatformEvent::EVENT_TYPE_FORWARDED_TO_RECURRENT_JOB_FROM_MEINESTADT_A_FEED,
$recurrentJob->getId()
);
} elseif ((int)$request->get(ConversionEventService::QUERY_STRING_PARAM_NAME_CONVERSION_SUBCAMPAIGN_ID, -1) === ExternalFeedsService::EXTERNAL_FEED_SUBCAMPAIGN_ID_B_FEED) {
$this->platformEventService->eventHasOccurred(
PlatformEvent::EVENT_TYPE_FORWARDED_TO_RECURRENT_JOB_FROM_MEINESTADT_B_FEED,
$recurrentJob->getId()
);
} elseif ((int)$request->get(ConversionEventService::QUERY_STRING_PARAM_NAME_CONVERSION_SUBCAMPAIGN_ID, -1) === ExternalFeedsService::EXTERNAL_FEED_SUBCAMPAIGN_ID_C_FEED) {
$this->platformEventService->eventHasOccurred(
PlatformEvent::EVENT_TYPE_FORWARDED_TO_RECURRENT_JOB_FROM_MEINESTADT_C_FEED,
$recurrentJob->getId()
);
} elseif ((int)$request->get(ConversionEventService::QUERY_STRING_PARAM_NAME_CONVERSION_SUBCAMPAIGN_ID, -1) === ExternalFeedsService::EXTERNAL_FEED_SUBCAMPAIGN_ID_H_FEED) {
$this->platformEventService->eventHasOccurred(
PlatformEvent::EVENT_TYPE_FORWARDED_TO_RECURRENT_JOB_FROM_MEINESTADT_H_FEED,
$recurrentJob->getId()
);
} elseif ((int)$request->get(ConversionEventService::QUERY_STRING_PARAM_NAME_CONVERSION_SUBCAMPAIGN_ID, -1) === ExternalFeedsService::EXTERNAL_FEED_SUBCAMPAIGN_ID_I_FEED) {
$this->platformEventService->eventHasOccurred(
PlatformEvent::EVENT_TYPE_FORWARDED_TO_RECURRENT_JOB_FROM_MEINESTADT_I_FEED,
$recurrentJob->getId()
);
} elseif ((int)$request->get(ConversionEventService::QUERY_STRING_PARAM_NAME_CONVERSION_SUBCAMPAIGN_ID, -1) === ExternalFeedsService::EXTERNAL_FEED_SUBCAMPAIGN_ID_J_FEED) {
$this->platformEventService->eventHasOccurred(
PlatformEvent::EVENT_TYPE_FORWARDED_TO_RECURRENT_JOB_FROM_MEINESTADT_J_FEED,
$recurrentJob->getId()
);
} elseif ((int)$request->get(ConversionEventService::QUERY_STRING_PARAM_NAME_CONVERSION_SUBCAMPAIGN_ID, -1) === ExternalFeedsService::EXTERNAL_FEED_SUBCAMPAIGN_ID_K_FEED) {
$this->platformEventService->eventHasOccurred(
PlatformEvent::EVENT_TYPE_FORWARDED_TO_RECURRENT_JOB_FROM_MEINESTADT_K_FEED,
$recurrentJob->getId()
);
} elseif ((int)$request->get(ConversionEventService::QUERY_STRING_PARAM_NAME_CONVERSION_SUBCAMPAIGN_ID, -1) === ExternalFeedsService::EXTERNAL_FEED_SUBCAMPAIGN_ID_L_FEED) {
$this->platformEventService->eventHasOccurred(
PlatformEvent::EVENT_TYPE_FORWARDED_TO_RECURRENT_JOB_FROM_MEINESTADT_L_FEED,
$recurrentJob->getId()
);
} elseif ((int)$request->get(ConversionEventService::QUERY_STRING_PARAM_NAME_CONVERSION_SUBCAMPAIGN_ID, -1) === ExternalFeedsService::EXTERNAL_FEED_SUBCAMPAIGN_ID_M_FEED) {
$this->platformEventService->eventHasOccurred(
PlatformEvent::EVENT_TYPE_FORWARDED_TO_RECURRENT_JOB_FROM_MEINESTADT_M_FEED,
$recurrentJob->getId()
);
} elseif ((int)$request->get(ConversionEventService::QUERY_STRING_PARAM_NAME_CONVERSION_SUBCAMPAIGN_ID, -1) === ExternalFeedsService::EXTERNAL_FEED_SUBCAMPAIGN_ID_N_FEED) {
$this->platformEventService->eventHasOccurred(
PlatformEvent::EVENT_TYPE_FORWARDED_TO_RECURRENT_JOB_FROM_MEINESTADT_N_FEED,
$recurrentJob->getId()
);
}
} elseif ((int)$request->get(ConversionEventService::QUERY_STRING_PARAM_NAME_CONVERSION_CAMPAIGN_ID, -1) === ConversionEventService::CAMPAIGN_ID_AGENTUR_FUER_ARBEIT) {
$this->businessEventDomainService->writeNewEvent(
BusinessEvent::EVENT_TYPE_AGENTUR_FUER_ARBEIT_LINK_CLICKED,
$user,
$recurrentJob,
null,
json_encode($additionalData)
);
} elseif ((int)$request->get(ConversionEventService::QUERY_STRING_PARAM_NAME_CONVERSION_CAMPAIGN_ID, -1) === ConversionEventService::CAMPAIGN_ID_GOOGLE_FOR_JOBS) {
$this->businessEventDomainService->writeNewEvent(
BusinessEvent::EVENT_TYPE_GOOGLE_FOR_JOBS_LINK_CLICKED,
$user,
$recurrentJob,
null,
json_encode($additionalData)
);
} elseif ((int)$request->get(ConversionEventService::QUERY_STRING_PARAM_NAME_CONVERSION_CAMPAIGN_ID, -1) === ConversionEventService::CAMPAIGN_ID_INDEED_RECRUIT_DL_CONTENT_DISTRIBUTION_VIA_XML_FEED) {
$this->platformEventService->eventHasOccurred(
PlatformEvent::EVENT_TYPE_FORWARDED_TO_RECURRENT_JOB_FROM_INDEED_FEED,
$recurrentJob->getId()
);
}
}
if ($event->getPlatformSiteId() === PlatformSite::PLATFORM_SITE_ID_RECRUIT_DL) {
$this->conversionEventService->initiateGoalReachedConversionTracking(
$user,
ConversionEventService::CAMPAIGN_ID_RECRUIT_DL_LANDINGPAGE,
$this->featureLimitationsService->recurrentJobMustLinkExternally($recurrentJob) ? 1 : 0,
$recurrentJob,
$request
);
$additionalData = [
'occupationalFieldSearchterm' => $recurrentJob->getOccupationalFieldSearchterm(),
'recurrentJobId' => null
];
if (!is_null($recurrentJob)) {
$additionalData = [
...$additionalData,
'recurrentJobId' => $recurrentJob,
'titel' => $recurrentJob->getTitle(),
'businessName' => $recurrentJob->getBusinessName(),
'zipCode' => $recurrentJob->getZipCode(),
];
}
if ($recurrentJob->belongsToIntegratedExternalPartnerCustomer()) {
$additionalData = [
...$additionalData,
'internalId' => $recurrentJob->getIntegratedExternalPartnerCustomer()->getInternalId(),
];
}
if (!is_null($recurrentJob)
&& !is_null($recurrentJob->getJoboffererProfile())
&& !is_null($recurrentJob->getJoboffererProfile()->getEconomicSector())
&& !is_null($recurrentJob->getJoboffererProfile()->getEconomicSector()->getTitle())
) {
$additionalData = [
...$additionalData,
'economicSector' => $recurrentJob->getJoboffererProfile()->getEconomicSector()->getTitle(),
];
}
$this->businessEventDomainService->writeNewEvent(
BusinessEvent::EVENT_TYPE_INDEED_RECRUIT_DL_LANDINGPAGE_SHOWN,
null,
$recurrentJob,
null,
json_encode($additionalData)
);
}
if ($event->getPlatformSiteId() === PlatformSite::PLATFORM_SITE_ID_JOBOO_ONLINE) {
if (!is_null($recurrentJob)
&& !is_null($recurrentJob->getJoboffererProfile())
&& !is_null($recurrentJob->getJoboffererProfile()->getEconomicSector())
&& !is_null($recurrentJob->getJoboffererProfile()->getEconomicSector()->getTitle())
) {
$additionalData = json_encode(['occupationalFieldSearchterm' => $recurrentJob->getOccupationalFieldSearchterm(), 'economicSector' => $recurrentJob->getJoboffererProfile()->getEconomicSector()->getTitle(), 'recurrentJobId' => $recurrentJob->getId()]);
} else {
$additionalData = json_encode(['occupationalFieldSearchterm' => $recurrentJob->getOccupationalFieldSearchterm(), 'recurrentJobId' => $recurrentJob->getId()]);
}
$this->businessEventDomainService->writeNewEvent(
BusinessEvent::EVENT_TYPE_JOBOO_ONLINE_LANDINGPAGE_SHOWN,
null,
$recurrentJob,
null,
$additionalData
);
}
}
/** @throws Exception */
public function onRecurrentJobWillForwardToExternalUrlEvent(
RecurrentJobWillForwardToExternalUrlEvent $event
): void {
if (!is_null($event->getRecurrentJob()->getExternalPartner())) {
$this->externalPartnerEventDomainService->writeEvent(
ExternalPartnerEvent::EVENT_TYPE_USER_HAS_BEEN_FORWARDED_TO_EXTERNAL_JOB_POST_THAT_IS_RECURRENT_JOB,
$event->getRecurrentJob()->getExternalPartner(),
$event->getRecurrentJob(),
null,
null,
null,
null,
null,
$event->getUser(),
$event->getRequest(),
$event->getConversionCampaignId(),
$event->getPlatformSiteId()
);
}
if (!$event->getRecurrentJob()->isLinkedToExternalPartner() && !is_null($event->getRequest()) && !is_null($event->getRequest()->query) && $event->getRequest()->query->get('directForwarding', 'false') === 'true') {
$this->conversionEventService->initiateGoalReachedConversionTrackingBasedOnRequest(
$event->getRequest(),
$event->getUser()
);
}
foreach ([0, 1, 2, 3, 4, 5, 6, 7] as $subcampaignId) {
$this->conversionEventService->handleConversionGoalReached(
ConversionEventService::CAMPAIGN_ID_RECURRENT_JOBS_SEARCH_FOR_ONE_SPECIFIC_CUSTOMER,
$subcampaignId,
$event->getRequest(),
$event->getUser(),
$event->getRecurrentJob(),
null,
null,
!is_null($event->getRecurrentJob())
? $event->getRecurrentJob()->getIntegratedExternalPartnerCustomer()
: null
);
}
$this->conversionEventService->handleConversionGoalReached(
ConversionEventService::CAMPAIGN_ID_INDEED_RECRUIT_DL_CONTENT_DISTRIBUTION_VIA_XML_FEED,
1,
$event->getRequest(),
$event->getUser(),
$event->getRecurrentJob()
);
foreach ([0, 1] as $subcampaignId) {
$this->conversionEventService->handleConversionGoalReached(
ConversionEventService::CAMPAIGN_ID_PERSOMATCH_FEED,
$subcampaignId,
$event->getRequest(),
$event->getUser(),
$event->getRecurrentJob()
);
}
$this->conversionEventService->handleConversionGoalReached(
ConversionEventService::CAMPAIGN_ID_INSTAGRAM,
0,
$event->getRequest(),
$event->getUser(),
$event->getRecurrentJob()
);
$this->conversionEventService->handleConversionGoalReached(
ConversionEventService::CAMPAIGN_ID_RECRUIT_DL_LANDINGPAGE,
1,
$event->getRequest(),
$event->getUser(),
$event->getRecurrentJob()
);
$this->conversionEventService->handleConversionGoalReached(
ConversionEventService::CAMPAIGN_ID_AGENTUR_FUER_ARBEIT,
1,
$event->getRequest(),
$event->getUser(),
$event->getRecurrentJob()
);
$this->conversionEventService->handleConversionGoalReached(
ConversionEventService::CAMPAIGN_ID_WHATSAPP_MESSAGE_ABOUT_UNREAD_INTEGRATED_EXTERNAL_PARTNER_CUSTOMER_PREMIUM_RADAR_MESSAGE,
0,
$event->getRequest(),
$event->getUser(),
$event->getRecurrentJob(),
null,
json_encode(['goalReachedBy' => 'forwarded'])
);
foreach ([0, 1, 2] as $subcampaignId) {
$this->conversionEventService->handleConversionGoalReached(
ConversionEventService::CAMPAIGN_ID_INTERNAL_APPLICATION_TRACKING_RECURRENT_JOBS_SEARCH,
$subcampaignId,
$event->getRequest(),
$event->getUser(),
$event->getRecurrentJob(),
null,
null,
!is_null($event->getRecurrentJob())
? $event->getRecurrentJob()->getIntegratedExternalPartnerCustomer()
: null
);
}
foreach ([0, 1, 2] as $subcampaignId) {
$this->conversionEventService->handleConversionGoalReached(
ConversionEventService::CAMPAIGN_ID_INTERNAL_APPLICATION_TRACKING_RECURRENT_JOBS_SEARCH_ALL_JOBS,
$subcampaignId,
$event->getRequest(),
$event->getUser(),
$event->getRecurrentJob(),
null,
null,
!is_null($event->getRecurrentJob())
? $event->getRecurrentJob()->getIntegratedExternalPartnerCustomer()
: null
);
}
foreach ([0, 1] as $subcampaignId) {
$this->conversionEventService->handleConversionGoalReached(
ConversionEventService::CAMPAIGN_ID_INTERNAL_APPLICATION_TRACKING_AUTOMATED_CONVERSATION_MESSAGES_MAILING,
$subcampaignId,
$event->getRequest(),
$event->getUser(),
$event->getRecurrentJob(),
null,
null,
!is_null($event->getRecurrentJob())
? $event->getRecurrentJob()->getIntegratedExternalPartnerCustomer()
: null
);
}
foreach ([0, 1] as $subcampaignId) {
$this->conversionEventService->handleConversionGoalReached(
ConversionEventService::CAMPAIGN_ID_INTERNAL_APPLICATION_TRACKING_INTEGRATED_EXTERNAL_PARTNER_CUSTOMER_PREMIUM_RADAR,
$subcampaignId,
$event->getRequest(),
$event->getUser(),
$event->getRecurrentJob(),
null,
null,
!is_null($event->getRecurrentJob())
? $event->getRecurrentJob()->getIntegratedExternalPartnerCustomer()
: null
);
}
$this->conversionEventService->handleConversionGoalReached(
ConversionEventService::CAMPAIGN_ID_XING_FEED,
0,
$event->getRequest(),
$event->getUser(),
$event->getRecurrentJob()
);
if (!is_null($event->getRecurrentJob()) && !$event->getRecurrentJob()->isLinkedToExternalPartner()) {
$this->businessEventDomainService->writeNewEvent(
BusinessEvent::EVENT_TYPE_FORWARDED_TO_ORGANIC_RECURRENT_JOB_EXTERNAL_APPLICATION_URL,
$event->getUser(),
$event->getRecurrentJob(),
null,
json_encode([
'directForwarding' => !is_null($event->getRequest()) && $event->getRequest()->query->get('directForwarding', 'false') === 'true',
'recurrentJobId' => $event->getRecurrentJob()->getId(),
'jobseekerHasCV' => (!is_null($event->getUser()) && !is_null($event->getUser()->getDefaultJobseekerProfile()) && !is_null($event->getUser()->getDefaultJobseekerProfile()->getDocumentFileName())) ? 'true' : 'false'
])
);
}
$customer = $event->getRecurrentJob()->getIntegratedExternalPartnerCustomer();
$this->businessEventDomainService->writeNewEvent(
BusinessEvent::EVENT_TYPE_RECURRENTJOB_FORWARDED_TO_EXTERNAL_APPLICATION_URL,
$event->getUser(),
$event->getRecurrentJob(),
null,
json_encode(
[
'context' => $event->getContext(),
'jobseekerHasCV' => (
!is_null($event->getUser())
&& !is_null($event->getUser()->getDefaultJobseekerProfile())
&& !is_null($event->getUser()->getDefaultJobseekerProfile()->getDocumentFileName())
) ? 'true' : 'false',
'businessName' => $event->getRecurrentJob()->getBusinessName(),
'titel' => $event->getRecurrentJob()->getTitle(),
'zipCode' => $event->getRecurrentJob()->getZipCode(),
'internalId' => !is_null($customer) ? $customer->getInternalId() : null,
]
)
);
if ($event->getRecurrentJob()->isLinkedToExternalPartner()) {
$this->conversionEventService->handleConversionGoalReached(
ConversionEventService::CAMPAIGN_ID_HAYS_MAILING,
0,
$event->getRequest(),
$event->getUser()
);
$this->conversionEventService->handleConversionGoalReached(
ConversionEventService::CAMPAIGN_ID_AGENTUR_FUER_ARBEIT,
1,
$event->getRequest(),
$event->getUser(),
$event->getRecurrentJob()
);
$this->businessEventDomainService->writeNewEvent(
BusinessEvent::EVENT_TYPE_EXTERNAL_PARTNERS_JOBOFFER_VISITED,
$event->getUser(),
$event->getRecurrentJob(),
null,
json_encode([
'directForwarding' => !is_null($event->getRequest()) && $event->getRequest()->query->get('directForwarding', 'false') === 'true',
'recurrentJobId' => $event->getRecurrentJob()->getId(),
'externalPartnerId' => (!is_null($event->getRecurrentJob()->getJoboffererProfile()->getUser()->getExternalPartner())) ? $event->getRecurrentJob()->getJoboffererProfile()->getUser()->getExternalPartner()->getId() : '',
'jobseekerHasCV' => (!is_null($event->getUser()) && !is_null($event->getUser()->getDefaultJobseekerProfile()) && !is_null($event->getUser()->getDefaultJobseekerProfile()->getDocumentFileName())) ? 'true' : 'false',
'businessName' => $event->getRecurrentJob()->getBusinessName(),
'titel' => $event->getRecurrentJob()->getTitle(),
'zipCode' => $event->getRecurrentJob()->getZipCode(),
'internalId' => !is_null($customer) ? $customer->getInternalId() : null,
])
);
if (
!is_null($event->getRecurrentJob()->getIntegratedExternalPartnerCustomer())
&& $event->getRecurrentJob()->getIntegratedExternalPartnerCustomer()->hasClickBasedBilling()
) {
$this->platformEventService->eventHasOccurred(
PlatformEvent::EVENT_TYPE_FORWARDED_TO_CUSTOMER_WITH_CLICK_BASED_BILLING_RECURRENT_JOB,
$event->getRecurrentJob()->getIntegratedExternalPartnerCustomerId(),
null,
$event->getRecurrentJob(),
$event->getRequest()?->getSession()->getId()
);
}
$this->conversionEventService->handleConversionGoalReached(
ConversionEventService::CAMPAIGN_ID_INDEED_RECRUIT_DL_CONTENT_DISTRIBUTION_VIA_XML_FEED,
1,
$event->getRequest(),
$event->getUser(),
$event->getRecurrentJob()
);
$this->conversionEventService->handleConversionGoalReached(
ConversionEventService::CAMPAIGN_ID_RECRUIT_DL_LANDINGPAGE,
1,
$event->getRequest(),
$event->getUser(),
$event->getRecurrentJob()
);
if (!is_null($event->getRecurrentJob()->getJoboffererProfile()->getUser()->getExternalPartner()) && in_array($event->getRecurrentJob()->getJoboffererProfile()->getUser()->getExternalPartner()->getId(), [ExternalPartner::ID_REWE_FEED, ExternalPartner::ID_GOHIRING_API, ExternalPartner::ID_TANKUNDRAST_API_CLIENT])) {
$this->conversionEventService->handleConversionGoalReached(
ConversionEventService::CAMPAIGN_ID_REWE_MAILING_29_04_2021,
0,
$event->getRequest(),
$event->getUser(),
$event->getRecurrentJob()
);
$this->conversionEventService->handleConversionGoalReached(
ConversionEventService::CAMPAIGN_ID_REWE_MAILING_29_04_2021,
1,
$event->getRequest(),
$event->getUser(),
$event->getRecurrentJob()
);
if ($event->getRecurrentJob()->getJoboffererProfile()->getUser()->getExternalPartner()->getId() === ExternalPartner::ID_REWE_FEED) {
$this->conversionEventService->handleConversionGoalReached(
ConversionEventService::CAMPAIGN_ID_REWE_PUSH_NOTIFICATION_BOOST_SEARCH_RESULTS_PAGE,
0,
$event->getRequest(),
$event->getUser(),
$event->getRecurrentJob()
);
}
}
if (
!is_null($event->getRequest()) && $event->getRequest()->query->get('directForwarding', 'false') === 'true'
|| (
!is_null($event->getRequest()) && ($event->getRequest()->get(ConversionEventService::QUERY_STRING_PARAM_NAME_CONVERSION_CAMPAIGN_ID)
&& (int)$event->getRequest()->get(ConversionEventService::QUERY_STRING_PARAM_NAME_CONVERSION_CAMPAIGN_ID, -1)
=== ConversionEventService::CAMPAIGN_ID_INDEED_RECRUIT_DL_CONTENT_DISTRIBUTION_VIA_XML_FEED
)
)
) {
if ((int)$event->getRequest()->get(ConversionEventService::QUERY_STRING_PARAM_NAME_CONVERSION_CAMPAIGN_ID, -1)
!== ConversionEventService::CAMPAIGN_ID_INTERNAL_APPLICATION_TRACKING_RECURRENT_JOBS_SEARCH
&& (int)$event->getRequest()->get(ConversionEventService::QUERY_STRING_PARAM_NAME_CONVERSION_CAMPAIGN_ID, -1)
!== ConversionEventService::CAMPAIGN_ID_INTERNAL_APPLICATION_TRACKING_RECURRENT_JOBS_SEARCH_ALL_JOBS
&& (int)$event->getRequest()->get(ConversionEventService::QUERY_STRING_PARAM_NAME_CONVERSION_CAMPAIGN_ID, -1)
!== ConversionEventService::CAMPAIGN_ID_INTERNAL_APPLICATION_TRACKING_AUTOMATED_CONVERSATION_MESSAGES_MAILING
) {
$this->conversionEventService->initiateGoalReachedConversionTrackingBasedOnRequest(
$event->getRequest(),
$event->getUser()
);
}
if (!is_null($event->getRecurrentJob()->getIntegratedExternalPartnerCustomer())
&& $event->getRecurrentJob()->getIntegratedExternalPartnerCustomer()->getInternalId()
=== IntegratedExternalPartnerCustomer::INTERNAL_ID_XING
) {
$this->conversionEventService->handleConversionGoalReached(
ConversionEventService::CAMPAIGN_ID_TALENTCOM,
3,
$event->getRequest(),
$event->getUser(),
$event->getRecurrentJob()
);
$this->conversionEventService->handleConversionGoalReached(
ConversionEventService::CAMPAIGN_ID_JOBLIFT,
3,
$event->getRequest(),
$event->getUser(),
$event->getRecurrentJob()
);
$this->conversionEventService->handleConversionGoalReached(
ConversionEventService::CAMPAIGN_ID_STELLENONLINE,
3,
$event->getRequest(),
$event->getUser(),
$event->getRecurrentJob()
);
}
}
if (!is_null($event->getRequest()) && $event->getRequest()->query->get('directForwarding', 'false') === 'true') {
if (!is_null($recurrentJob = $event->getRecurrentJob())
&& $recurrentJob->belongsToIntegratedExternalPartnerCustomer()
&& !is_null($customer = $recurrentJob->getIntegratedExternalPartnerCustomer())
&& $customer->getInternalId() === IntegratedExternalPartnerCustomer::INTERNAL_ID_DEUTSCHE_BAHN_AG
) {
$this->conversionEventService->handleConversionGoalReached(
ConversionEventService::CAMPAIGN_ID_TALENTCOM,
4,
$event->getRequest(),
$event->getUser(),
$event->getRecurrentJob()
);
$this->conversionEventService->handleConversionGoalReached(
ConversionEventService::CAMPAIGN_ID_JOBLIFT,
4,
$event->getRequest(),
$event->getUser(),
$event->getRecurrentJob()
);
$this->conversionEventService->handleConversionGoalReached(
ConversionEventService::CAMPAIGN_ID_STELLENONLINE,
4,
$event->getRequest(),
$event->getUser(),
$event->getRecurrentJob()
);
} elseif (!is_null($recurrentJob = $event->getRecurrentJob())
&& $recurrentJob->belongsToIntegratedExternalPartnerCustomer()
&& !is_null($customer = $recurrentJob->getIntegratedExternalPartnerCustomer())
&& $customer->getInternalId() === IntegratedExternalPartnerCustomer::INTERNAL_ID_WISAG_CONCLUDIS_API
) {
$this->conversionEventService->handleConversionGoalReached(
ConversionEventService::CAMPAIGN_ID_STELLENONLINE,
5,
$event->getRequest(),
$event->getUser(),
$event->getRecurrentJob()
);
$this->conversionEventService->handleConversionGoalReached(
ConversionEventService::CAMPAIGN_ID_JOBLIFT,
5,
$event->getRequest(),
$event->getUser(),
$event->getRecurrentJob()
);
} elseif (!is_null($recurrentJob = $event->getRecurrentJob())
&& $recurrentJob->belongsToIntegratedExternalPartnerCustomer()
&& !is_null($customer = $recurrentJob->getIntegratedExternalPartnerCustomer())
&& $customer->getInternalId() === IntegratedExternalPartnerCustomer::INTERNAL_ID_MEINESTADT_DE
) {
$this->conversionEventService->handleConversionGoalReached(
ConversionEventService::CAMPAIGN_ID_TALENTCOM,
6,
$event->getRequest(),
$event->getUser(),
$event->getRecurrentJob()
);
$this->conversionEventService->handleConversionGoalReached(
ConversionEventService::CAMPAIGN_ID_STELLENONLINE,
6,
$event->getRequest(),
$event->getUser(),
$event->getRecurrentJob()
);
$this->conversionEventService->handleConversionGoalReached(
ConversionEventService::CAMPAIGN_ID_JOBLIFT,
6,
$event->getRequest(),
$event->getUser(),
$event->getRecurrentJob()
);
}
}
}
$this->conversionEventService->handleConversionGoalReached(
ConversionEventService::CAMPAIGN_ID_GOOGLE_FOR_JOBS,
0,
$event->getRequest(),
$event->getUser(),
$event->getRecurrentJob()
);
$this->conversionEventService->handleConversionGoalReached(
ConversionEventService::CAMPAIGN_ID_EBAY,
0,
$event->getRequest(),
$event->getUser(),
$event->getRecurrentJob()
);
foreach ([0, 1, 2, 7, 8, 9] as $subcampaignId) {
$this->conversionEventService->handleConversionGoalReached(
ConversionEventService::CAMPAIGN_ID_MEINESTADT,
$subcampaignId,
$event->getRequest(),
$event->getUser(),
$event->getRecurrentJob()
);
}
foreach ([0, 1, 2, 3, 4, 5] as $subcampaignId) {
$this->conversionEventService->handleConversionGoalReached(
ConversionEventService::CAMPAIGN_ID_JOBIJOBA,
$subcampaignId,
$event->getRequest(),
$event->getUser(),
$event->getRecurrentJob()
);
}
foreach ([0, 1, 2, 3, 4, 5] as $subcampaignId) {
$this->conversionEventService->handleConversionGoalReached(
ConversionEventService::CAMPAIGN_ID_WHATJOBS,
$subcampaignId,
$event->getRequest(),
$event->getUser(),
$event->getRecurrentJob()
);
}
foreach ([0, 1, 2, 3] as $subcampaignId) {
$this->conversionEventService->handleConversionGoalReached(
ConversionEventService::CAMPAIGN_ID_JOOBLE,
$subcampaignId,
$event->getRequest(),
$event->getUser(),
$event->getRecurrentJob()
);
}
$this->conversionEventService->handleConversionGoalReached(
ConversionEventService::CAMPAIGN_ID_LINKED_IN,
0,
$event->getRequest(),
$event->getUser(),
$event->getRecurrentJob()
);
if ($event->getPlatformSiteId() === PlatformSite::PLATFORM_SITE_ID_JOBOO) {
if (!is_null($event->getRequest()) && $event->getRequest()->query->get('directForwarding', 'false') !== 'true') {
// When there was a forwarding on joboo by a user without base profile, it means they must have accepted our AGB now and they get a base profile
// Only on joboo.de and without direct forwarding
$this->profileService->checkIfUserHasAcceptedAGBBecauseOfForwarding($event->getUser());
}
}
$this->conversionEventService->handleConversionGoalReached(
ConversionEventService::CAMPAIGN_ID_WHATSAPP_MESSAGE_ABOUT_UNREAD_LEAD_CONVERSION_RADAR_MESSAGE,
0,
$event->getRequest(),
$event->getUser(),
$event->getRecurrentJob(),
null,
json_encode(['goalReachedBy' => 'forwarding'])
);
$this->conversionEventService->handleConversionGoalReached(
ConversionEventService::CAMPAIGN_ID_WHATSAPP_MESSAGE_ABOUT_UNREAD_LEAD_CONVERSION_RADAR_MESSAGE,
1,
$event->getRequest(),
$event->getUser(),
$event->getRecurrentJob(),
null,
json_encode(['goalReachedBy' => 'forwarding'])
);
}
public function onRecurrentJobWillBeRemoved(RecurrentJobWillBeRemovedEvent $event)
{
$recurrentJob = $event->getRecurrentJob();
if (!is_null($recurrentJob)) {
if ($recurrentJob->belongsToExternalPartner()) {
if ($recurrentJob->getExternalPartner()->getId() === ExternalPartner::ID_SOFTGARDEN_FEED) {
$this->businessEventDomainService->writeNewEvent(
BusinessEvent::EVENT_TYPE_SOFTGARDEN_RECURRENT_JOB_REMOVED,
$recurrentJob->getJoboffererProfile()->getUser(),
$recurrentJob,
null,
json_encode([
'externalId' => $recurrentJob->getExternalPartnerRecurrentJobAdditionalInfoStringValueByName(
IntegratedExternalPartnerSoftgardenService::RECURRENT_JOB_ADDITIONAL_INFO_STRING_VALUE_NAME_SOFTGARDEN_EXTERNAL_ID
),
'activeDays' => DateTimeUtility::createDateTimeUtc()->diff($recurrentJob->getCreatedAt())->format('%d'),
'businessName' => $recurrentJob->getBusinessName(),
'searchterm' => $recurrentJob->getOccupationalFieldSearchtermForDisplay(),
'titel' => $recurrentJob->getTitle(),
'zipCode' => $recurrentJob->getZipCode(),
'internalId' => $recurrentJob->getIntegratedExternalPartnerCustomer()?->getInternalId(),
])
);
}
if (!is_null($recurrentJob->getExternalPartner())
&& $recurrentJob->getExternalPartner()->getId() === ExternalPartner::ID_GOHIRING_API
) {
try {
$uri = $recurrentJob->getExternalPartnerRecurrentJobAdditionalInfoStringValueByName(
IntegratedExternalPartnerGohiringService::RECURRENT_JOB_ADDITIONAL_INFO_STRING_VALUE_NAME_GOHIRING_POSTING_URI
);
// This implements the specification at https://common-api.gohiring.com/api-reference/common-api/
$headers = [];
$headers[] = 'Content-Type: application/vnd.api+json';
$jwtAsString = JWT::encode(
['sub' => PositionOpeningController::JWT_PUBLIC_KEY],
PositionOpeningController::JWT_SECRET_TOKEN,
'HS256'
);
$headers[] = 'Authorization: Bearer ' . $jwtAsString;
$curl = curl_init();
curl_setopt($curl, CURLOPT_CUSTOMREQUEST, Request::METHOD_DELETE);
curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
curl_setopt($curl, CURLOPT_URL, $uri);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_HEADER, 1);
$response = curl_exec($curl);
if ($response === false) {
$this->logger->warning(curl_error($curl));
} else {
$responseLines = explode("\n", $response);
$firstResponseLine = trim($responseLines[0]);
if (!str_contains($firstResponseLine, ' 204')) {
$this->logger->warning("Expected '204 No Content', got '$firstResponseLine'.");
}
}
curl_close($curl);
} catch (Throwable $t) {
$this->logger->error("Error while trying to inform GOhiring about removal of recurrent job '{$recurrentJob->getId()}' at '$uri'.");
}
}
$this->externalPartnerEventDomainService->writeEvent(
ExternalPartnerEvent::EVENT_TYPE_RECURRENT_JOB_REMOVED,
$recurrentJob->getExternalPartner(),
$recurrentJob,
$recurrentJob->getQuota(),
null,
null,
null,
null,
$recurrentJob->getJoboffererProfile()->getUser()
);
}
$this->googleIndexingApiService->removeRecurrentJobFromIndexingAPI($event->getRecurrentJob());
$customer = $recurrentJob->getIntegratedExternalPartnerCustomer();
$this->businessEventDomainService->writeNewEvent(
BusinessEvent::EVENT_TYPE_RECURRENT_JOB_REMOVAL_REQUESTED,
$event->getRecurrentJob()->getJoboffererProfile()->getUser(),
$event->getRecurrentJob(),
null,
json_encode([
'isPlus' => $event->getRecurrentJob()->isPlus(),
'businessName' => $event->getRecurrentJob()->getBusinessName(),
'titel' => $event->getRecurrentJob()->getTitle(),
'zipCode' => $event->getRecurrentJob()->getZipCode(),
'internalId' => !is_null($customer) ? $customer->getInternalId() : null,
])
);
}
}
public function onRecurrentJobReactivated(RecurrentJobReactivatedEvent $event)
{
if (!is_null($event->getRecurrentJob())) {
$this->messageBus->dispatch(
new SyncRecurrentJobWithSearchesSymfonyMessage(
$event->getRecurrentJob()->getId(),
SyncRecurrentJobWithSearchesReason::REACTIVATED
)
);
}
$recurrentJob = $event->getRecurrentJob();
$integratedExternalPartnerCustomer = null;
if (!is_null($recurrentJob)) {
$integratedExternalPartnerCustomer = $recurrentJob->getIntegratedExternalPartnerCustomer();
}
$this->businessEventDomainService->writeNewEvent(
BusinessEvent::EVENT_TYPE_RECURRENT_JOB_REACTIVATED,
$event->getRecurrentJob()->getJoboffererProfile()->getUser(),
$event->getRecurrentJob(),
null,
json_encode([
'isPlus' => $event->getRecurrentJob()->isPlus(),
'titel' => $event->getRecurrentJob()->getTitle(),
'businessName' => $event->getRecurrentJob()->getBusinessName(),
'zipCode' => $event->getRecurrentJob()->getZipCode(),
'internalId' => !is_null($integratedExternalPartnerCustomer) ? $integratedExternalPartnerCustomer->getInternalId() : null,
])
);
$this->businessEventDomainService->writeNewEvent(
BusinessEvent::EVENT_TYPE_RECURRENT_JOB_PUBLISHED,
$event->getRecurrentJob()->getJoboffererProfile()->getUser(),
$event->getRecurrentJob(),
null,
json_encode([
'isPlus' => $event->getRecurrentJob()->isPlus(),
'isFlex' => $this->featureLimitationsService->recurrentJobIsFlex($event->getRecurrentJob()),
'customer' => !is_null($integratedExternalPartnerCustomer) ? $integratedExternalPartnerCustomer->getInternalId() : null,
'businessName' => $event->getRecurrentJob()->getBusinessName(),
'title' => $event->getRecurrentJob()->getTitle(),
'zipCode' => $event->getRecurrentJob()->getZipCode(),
])
);
if ($event->getRecurrentJob()->belongsToExternalPartner()) {
$this->externalPartnerEventDomainService->writeEvent(
ExternalPartnerEvent::EVENT_TYPE_RECURRENT_JOB_PUBLISHED,
$event->getRecurrentJob()->getExternalPartner(),
$event->getRecurrentJob(),
$event->getRecurrentJob()->getQuota(),
null,
null,
null,
null,
$event->getRecurrentJob()->getJoboffererProfile()->getUser()
);
}
}
public function onRecurrentJobUpdated(RecurrentJobUpdatedEvent $event): void
{
if (!is_null($event->getRecurrentJob())) {
$this->messageBus->dispatch(
new SyncRecurrentJobWithSearchesSymfonyMessage(
$event->getRecurrentJob()->getId(),
SyncRecurrentJobWithSearchesReason::UPDATED
)
);
}
if ($event->getRecurrentJob()->belongsToExternalPartner()) {
$this->externalPartnerEventDomainService->writeEvent(
ExternalPartnerEvent::EVENT_TYPE_RECURRENT_JOB_UPDATED,
$event->getRecurrentJob()->getExternalPartner(),
$event->getRecurrentJob(),
$event->getRecurrentJob()->getQuota(),
null,
null,
null,
null,
$event->getRecurrentJob()->getJoboffererProfile()->getUser()
);
}
}
public function onRecurrentJobSkippedUsedQuotaIncrease(
RecurrentJobSkippedUsedQuotaIncreaseEvent $event
): void {
$this->externalPartnerEventDomainService->writeEvent(
ExternalPartnerEvent::EVENT_TYPE_SKIPPED_USED_QUOTA_INCREASE_DUE_TO_RECURRENT_JOB_SPECIFIC_RULES,
$event->getRecurrentJob()->getExternalPartner(),
$event->getRecurrentJob(),
null,
null,
null,
null,
null,
$event->getRecurrentJob()->getJoboffererProfile()->getUser()
);
}
}