src/JanusHercules/DatawarehouseIntegration/Domain/Entity/ExternalPartnerEvent.php line 22

Open in your IDE?
  1. <?php
  2. namespace JanusHercules\DatawarehouseIntegration\Domain\Entity;
  3. use App\Entity\ExternalPartner\ExternalPartner;
  4. use App\Entity\PlatformSite;
  5. use App\Service\ConversionEventService;
  6. use App\Utility\DatabaseIdGenerator;
  7. use App\Utility\DateTimeUtility;
  8. use App\Utility\GuidUtility;
  9. use App\Utility\ReflectionHelper;
  10. use DateTime;
  11. use Doctrine\DBAL\Types\Types;
  12. use Doctrine\ORM\Mapping as ORM;
  13. use Exception;
  14. use InvalidArgumentException;
  15. use ReflectionClass;
  16. use ValueError;
  17. #[ORM\Entity]
  18. #[ORM\Table(name: 'external_partner_events')]
  19. class ExternalPartnerEvent
  20. {
  21. public const EVENT_TYPE_USER_CREATED = 0;
  22. public const EVENT_TYPE_RECURRENT_JOB_CREATED = 1;
  23. public const EVENT_TYPE_USER_HAS_BEEN_FORWARDED_TO_EXTERNAL_JOB_POST_THAT_IS_RECURRENT_JOB = 2;
  24. public const EVENT_TYPE_RECURRENT_JOB_SHARE_PAGE_REQUESTED = 3;
  25. public const EVENT_TYPE_JOBRADAR_CREATED = 4;
  26. public const EVENT_TYPE_PREMIUM_JOBRADAR_CREATED = 5;
  27. public const EVENT_TYPE_TANKUNDRAST_RADAR_CREATED = 6;
  28. public const EVENT_TYPE_WISAG_RADAR_CREATED = 7;
  29. public const EVENT_TYPE_WISAG_PREMIUM_RADAR_CREATED = 8;
  30. public const EVENT_TYPE_RECURRENT_JOB_HAS_BEEN_PROLONGED = 9;
  31. public const EVENT_TYPE_RECURRENT_JOB_HAS_BEEN_REACTIVATED_BECAUSE_QUOTA_BECAME_AVAILABLE_AGAIN = 10;
  32. public const EVENT_TYPE_RECURRENT_JOB_REMOVED = 11;
  33. public const EVENT_TYPE_GOOGLE_INDEXING_WAS_REQUESTED_FOR_RECURRENT_JOB = 12;
  34. public const EVENT_TYPE_RECURRENT_JOB_DEACTIVATED = 13;
  35. public const EVENT_TYPE_RECURRENT_JOB_PUBLISHED = 14;
  36. public const EVENT_TYPE_EXTERNAL_JOB_AVAILABILITY_CHECK_WAS_POSITIVE = 15;
  37. public const EVENT_TYPE_EXTERNAL_JOB_AVAILABILITY_CHECK_WAS_NEGATIVE = 16;
  38. public const EVENT_TYPE_EXTERNAL_JOB_AVAILABILITY_CHECK_WAS_CONNECTION_PROBLEM = 17;
  39. public const EVENT_TYPE_EXTERNAL_JOB_AVAILABILITY_CHECK_WAS_SERVER_ERROR = 18;
  40. // See https://trello.com/c/9gH3Hdjn/2088-verl%C3%A4ngerungs-command-hat-die-falschen-jobs-deaktiviert-oder-verl%C3%A4ngert
  41. public const EVENT_TYPE_RECURRENT_JOB_REACTIVATED_DUE_TO_BUGFIX_2088 = 19;
  42. public const EVENT_TYPE_USAGE_EVENT_REMOVED_DUE_TO_BUGFIX_2088 = 20;
  43. public const EVENT_TYPE_QUOTA_WAS_DECREMENTED_DUE_TO_BUGFIX_2088 = 21;
  44. public const EVENT_TYPE_RECURRENT_JOB_HAS_NOT_BEEN_PROLONGED_BECAUSE_MAX_AGE_REACHED = 22;
  45. public const EVENT_TYPE_RECURRENT_JOB_HAS_NOT_BEEN_PROLONGED_BECAUSE_NO_QUOTA_AVAILABLE = 23;
  46. public const EVENT_TYPE_EXTENDED_APPLICATION_HAS_BEEN_CREATED = 24;
  47. public const EVENT_TYPE_RECURRENT_JOB_HAS_NOT_BEEN_PROLONGED_BECAUSE_MAX_NUMBER_OF_PROLONGATIONS_REACHED = 25;
  48. public const EVENT_TYPE_AVAILABILITY_OF_RECURRENT_JOB_COULD_NOT_BE_CHECKED_BECAUSE_OF_MISSING_EXTERNAL_JOB_POSTING_URL = 26;
  49. public const EVENT_TYPE_EXTERNAL_JOB_AVAILABILITY_CHECK_WAS_ERROR = 27;
  50. public const EVENT_TYPE_USER_HAS_BEEN_FORWARDED_TO_EXTERNAL_JOB_POST_THAT_IS_RECURRENT_JOB_VIA_CONTENT_DISTRIBUTION_PARTNER = 28;
  51. public const EVENT_TYPE_USER_HAS_BEEN_FORWARDED_TO_EXTERNAL_JOB_POST_THAT_IS_RECURRENT_JOB_VIA_JOBLIFT = 29;
  52. public const EVENT_TYPE_USER_HAS_BEEN_FORWARDED_TO_EXTERNAL_JOB_POST_THAT_IS_RECURRENT_JOB_VIA_TALENTCOM = 30;
  53. public const EVENT_TYPE_USER_HAS_BEEN_FORWARDED_TO_EXTERNAL_JOB_POST_THAT_IS_RECURRENT_JOB_VIA_JOBRAPIDO = 31;
  54. public const EVENT_TYPE_USER_HAS_BEEN_FORWARDED_TO_EXTERNAL_JOB_POST_THAT_IS_RECURRENT_JOB_VIA_INDEED = 32;
  55. public const EVENT_TYPE_USER_HAS_BEEN_FORWARDED_TO_EXTERNAL_JOB_POST_THAT_IS_RECURRENT_JOB_VIA_EBAY = 33;
  56. public const EVENT_TYPE_USER_HAS_BEEN_FORWARDED_TO_EXTERNAL_JOB_POST_THAT_IS_RECURRENT_JOB_VIA_KIMETA = 34;
  57. public const EVENT_TYPE_USER_HAS_BEEN_FORWARDED_TO_EXTERNAL_JOB_POST_THAT_IS_RECURRENT_JOB_VIA_STELLENONLINE = 35;
  58. public const EVENT_TYPE_USER_HAS_BEEN_FORWARDED_TO_EXTERNAL_JOB_POST_THAT_IS_RECURRENT_JOB_VIA_GOOGLE_FOR_JOBS = 36;
  59. public const EVENT_TYPE_USER_HAS_BEEN_FORWARDED_TO_EXTERNAL_JOB_POST_THAT_IS_RECURRENT_JOB_VIA_AGENTUR_FUER_ARBEIT = 37;
  60. public const EVENT_TYPE_RECURRENT_JOB_HAS_BEEN_REACTIVATED_BECAUSE_RECURRENT_JOBS_LIMIT_HAS_CAPACITY_AGAIN = 38;
  61. public const EVENT_TYPE_EXTERNAL_JOBPOSTING_IMPORT_FAILED_DUE_TO_INSUFFICIENT_UNUSED_QUOTA = 39;
  62. public const EVENT_TYPE_EXTERNAL_JOBOFFER_CREATED = 40;
  63. public const EVENT_TYPE_EXTERNAL_JOBOFFER_UPDATED = 41;
  64. public const EVENT_TYPE_EXTERNAL_JOBOFFER_REMOVED = 42;
  65. public const EVENT_TYPE_SENT_EXTERNAL_APPLICATION = 43;
  66. public const EVENT_TYPE_RECURRENT_JOB_UPDATED = 44;
  67. public const EVENT_TYPE_USER_REMOVED = 45;
  68. public const EVENT_TYPE_USER_HAS_BEEN_FORWARDED_TO_EXTERNAL_JOB_POST_THAT_IS_RECURRENT_JOB_VIA_JOBIJOBA = 46;
  69. public const EVENT_TYPE_USER_HAS_BEEN_FORWARDED_TO_EXTERNAL_JOB_POST_THAT_IS_RECURRENT_JOB_VIA_WHATJOBS = 47;
  70. public const EVENT_TYPE_USER_HAS_BEEN_FORWARDED_TO_EXTERNAL_JOB_POST_THAT_IS_RECURRENT_JOB_VIA_JOOBLE = 48;
  71. public const EVENT_TYPE_UPDATE_CHECK_FOR_RECURRENT_JOB_COULD_NOT_BE_EXECUTED_BECAUSE_OF_MISSING_EXTERNAL_JOB_POSTING_URL = 49;
  72. public const EVENT_TYPE_USED_QUOTA_INCREMENTED_DUE_TO_CHANGED_ZIPCODE = 50;
  73. public const EVENT_TYPE_IMPORTED_EXTERNAL_APPLICATION_QUESTIONS = 51;
  74. public const EVENT_TYPE_RECURRENT_JOB_UPDATE_DENIED_BECAUSE_ZIPCODE_CHANGE_NOT_POSSIBLE = 52;
  75. public const EVENT_TYPE_SKIPPED_USED_QUOTA_INCREASE_DUE_TO_RECURRENT_JOB_SPECIFIC_RULES = 53;
  76. public const EVENT_TYPE_RECURRENT_JOB_CONTACT_INFO_DISPLAYED = 54;
  77. public const EVENT_TYPE_USER_HAS_CLICKED_RECURRENT_JOB_WEBSITE = 55;
  78. public const EVENT_TYPE_RECURRENT_JOB_DUPLICATED = 56;
  79. public const EVENT_TYPE_EXTERNAL_JOBPOSTING_IMPORT_FAILED_DUE_TO_LIMIT_EXHAUSTED = 57;
  80. public const EVENT_TYPE_RECURRENT_JOB_FRESHNESS_DATE_UPDATE = 58;
  81. public const EVENT_TYPE_USER_HAS_BEEN_FORWARDED_TO_CUSTOMER_SPECIFIC_SEARCH_RESULTS_PAGE_VIA_PERSOMATCH_GOOGLE = 59;
  82. /**
  83. * @throws InvalidArgumentException|Exception
  84. */
  85. public function __construct(
  86. string $id,
  87. int $eventType,
  88. int $externalPartnerId
  89. ) {
  90. GuidUtility::validOrThrow($id);
  91. $this->id = $id;
  92. if (!ReflectionHelper::hasConstWithValue(self::class, 'EVENT_TYPE_', $eventType)) {
  93. throw new InvalidArgumentException('Value ' . $eventType . ' not allowed for eventType.');
  94. }
  95. $this->eventType = $eventType;
  96. if (!ReflectionHelper::hasConstWithValue(ExternalPartner::class, 'ID_', $externalPartnerId)) {
  97. throw new InvalidArgumentException('Value ' . $externalPartnerId . ' not allowed for externalPartnerId.');
  98. }
  99. $this->externalPartnerId = $externalPartnerId;
  100. $this->occuredAt = DateTimeUtility::createDateTimeUtc();
  101. $this->affectedUserId = null;
  102. $this->adminUserId = null;
  103. $this->affectedUserRegisteredAt = null;
  104. $this->affectedUserIsJobofferer = false;
  105. $this->affectedUserIsJobseeker = false;
  106. $this->requestId = null;
  107. $this->sessionId = null;
  108. $this->clientId = null;
  109. $this->isMeerbuschOfficeRequest = false;
  110. $this->additionalData = null;
  111. $this->platformSiteId = PlatformSite::PLATFORM_SITE_ID_JOBOO;
  112. $this->conversionCampaignId = null;
  113. $this->businessName = null;
  114. $this->integratedExternalPartnerCustomerId = null;
  115. $this->integratedExternalPartnerCustomerInternalId = null;
  116. $this->recurrentJobId = null;
  117. $this->recurrentJobCreatedAt = null;
  118. $this->recurrentJobExternalId = null;
  119. $this->recurrentJobOccupationalFieldSearchterm = null;
  120. $this->recurrentJobZipcode = null;
  121. $this->recurrentJobExternalUrl = null;
  122. $this->isProbablyBotRequest = null;
  123. }
  124. /**
  125. * @throws Exception
  126. */
  127. public function getEventTypeTitle(): string
  128. {
  129. return self::getEventTypeTitleByEventType($this->getEventType());
  130. }
  131. /**
  132. * @throws Exception
  133. */
  134. public static function getEventTypeTitleByEventType(int $eventType): string
  135. {
  136. $refl = new ReflectionClass(self::class);
  137. $constants = $refl->getConstants();
  138. foreach ($constants as $constantName => $constantValue) {
  139. if (substr($constantName, 0, 11) === 'EVENT_TYPE_' && $constantValue === $eventType) {
  140. return strtolower(str_replace('_', '-', substr($constantName, 11)));
  141. }
  142. }
  143. throw new Exception('Cannot resolve title for event type ' . $eventType);
  144. }
  145. #[ORM\Id]
  146. #[ORM\GeneratedValue(strategy: 'CUSTOM')]
  147. #[ORM\CustomIdGenerator(class: DatabaseIdGenerator::class)]
  148. #[ORM\Column(
  149. name : 'id',
  150. type : Types::GUID,
  151. unique: true
  152. )]
  153. private string $id;
  154. public function getId(): string
  155. {
  156. return $this->id;
  157. }
  158. #[ORM\Column(
  159. name : 'event_type',
  160. type : Types::SMALLINT,
  161. nullable: false
  162. )]
  163. private int $eventType;
  164. public function getEventType(): int
  165. {
  166. return $this->eventType;
  167. }
  168. #[ORM\Column(
  169. name : 'occured_at',
  170. type : Types::DATETIME_MUTABLE,
  171. nullable: false
  172. )]
  173. protected DateTime $occuredAt;
  174. public function getOccuredAt(): DateTime
  175. {
  176. return $this->occuredAt;
  177. }
  178. #[ORM\Column(
  179. name : 'external_partner_id',
  180. type : Types::SMALLINT,
  181. nullable: false
  182. )]
  183. protected int $externalPartnerId;
  184. public function getExternalPartnerId(): ?int
  185. {
  186. return $this->externalPartnerId;
  187. }
  188. #[ORM\Column(
  189. name : 'integrated_external_partner_customer_id',
  190. type : Types::GUID,
  191. nullable: true
  192. )]
  193. protected ?string $integratedExternalPartnerCustomerId;
  194. public function setIntegratedExternalPartnerCustomerId(
  195. ?string $integratedExternalPartnerCustomerId
  196. ): void {
  197. GuidUtility::validOrThrow($integratedExternalPartnerCustomerId, true);
  198. $this->integratedExternalPartnerCustomerId = $integratedExternalPartnerCustomerId;
  199. }
  200. public function getIntegratedExternalPartnerCustomerId(): ?string
  201. {
  202. return $this->integratedExternalPartnerCustomerId;
  203. }
  204. #[ORM\Column(
  205. name : 'integrated_external_partner_customer_internal_id',
  206. type : Types::STRING,
  207. length : 255,
  208. nullable: true
  209. )]
  210. protected ?string $integratedExternalPartnerCustomerInternalId;
  211. public function setIntegratedExternalPartnerCustomerInternalId(
  212. ?string $integratedExternalPartnerCustomerInternalId
  213. ): void {
  214. $this->integratedExternalPartnerCustomerInternalId = $integratedExternalPartnerCustomerInternalId;
  215. }
  216. public function getIntegratedExternalPartnerCustomerInternalId(): ?string
  217. {
  218. return $this->integratedExternalPartnerCustomerInternalId;
  219. }
  220. #[ORM\Column(
  221. name : 'recurrent_job_id',
  222. type : Types::GUID,
  223. nullable: true
  224. )]
  225. protected ?string $recurrentJobId;
  226. public function setRecurrentJobId(
  227. ?string $recurrentJobId
  228. ): void {
  229. GuidUtility::validOrThrow($recurrentJobId, true);
  230. $this->recurrentJobId = $recurrentJobId;
  231. }
  232. public function getRecurrentJobId(): ?string
  233. {
  234. return $this->recurrentJobId;
  235. }
  236. #[ORM\Column(
  237. name : 'recurrent_job_created_at',
  238. type : Types::DATETIME_MUTABLE,
  239. nullable: true
  240. )]
  241. protected ?DateTime $recurrentJobCreatedAt;
  242. public function getRecurrentJobCreatedAt(): ?DateTime
  243. {
  244. return $this->recurrentJobCreatedAt;
  245. }
  246. public function setRecurrentJobCreatedAt(?DateTime $recurrentJobCreatedAt): void
  247. {
  248. $this->recurrentJobCreatedAt = $recurrentJobCreatedAt;
  249. }
  250. #[ORM\Column(
  251. name : 'recurrent_job_zipcode',
  252. type : Types::STRING,
  253. length : 5,
  254. nullable: true
  255. )]
  256. protected ?string $recurrentJobZipcode;
  257. public function setRecurrentJobZipcode(
  258. ?string $recurrentJobZipcode
  259. ): void {
  260. $this->recurrentJobZipcode = $recurrentJobZipcode;
  261. }
  262. public function getRecurrentJobZipcode(): ?string
  263. {
  264. return $this->recurrentJobZipcode;
  265. }
  266. #[ORM\Column(
  267. name : 'recurrent_job_occupational_field_searchterm',
  268. type : Types::STRING,
  269. length : 1024,
  270. nullable: true
  271. )]
  272. protected ?string $recurrentJobOccupationalFieldSearchterm;
  273. public function setRecurrentJobOccupationalFieldSearchterm(
  274. ?string $recurrentJobOccupationalFieldSearchterm
  275. ): void {
  276. $this->recurrentJobOccupationalFieldSearchterm = $recurrentJobOccupationalFieldSearchterm;
  277. }
  278. public function getRecurrentJobOccupationalFieldSearchterm(): ?string
  279. {
  280. return $this->recurrentJobOccupationalFieldSearchterm;
  281. }
  282. #[ORM\Column(
  283. name : 'recurrent_job_external_id',
  284. type : Types::STRING,
  285. length : 1024,
  286. nullable: true
  287. )]
  288. protected ?string $recurrentJobExternalId;
  289. public function setRecurrentJobExternalId(
  290. ?string $recurrentJobExternalId
  291. ): void {
  292. $this->recurrentJobExternalId = $recurrentJobExternalId;
  293. }
  294. public function getRecurrentJobExternalId(): ?string
  295. {
  296. return $this->recurrentJobExternalId;
  297. }
  298. #[ORM\Column(
  299. name : 'recurrent_job_external_url',
  300. type : Types::STRING,
  301. length : 4096,
  302. nullable: true
  303. )]
  304. protected ?string $recurrentJobExternalUrl;
  305. public function setRecurrentJobExternalUrl(
  306. ?string $recurrentJobExternalUrl
  307. ): void {
  308. $this->recurrentJobExternalUrl = $recurrentJobExternalUrl;
  309. }
  310. public function getRecurrentJobExternalUrl(): ?string
  311. {
  312. return $this->recurrentJobExternalUrl;
  313. }
  314. #[ORM\Column(
  315. name : 'affected_user_id',
  316. type : Types::GUID,
  317. nullable: true
  318. )]
  319. protected ?string $affectedUserId;
  320. public function setAffectedUserId(
  321. ?string $userId
  322. ): void {
  323. GuidUtility::validOrThrow($userId, true);
  324. $this->affectedUserId = $userId;
  325. }
  326. public function getAffectedUserId(): ?string
  327. {
  328. return $this->affectedUserId;
  329. }
  330. /**
  331. * We don't make this a foreign key on purpose, we don't need the integrity and don't want to delete event data
  332. * if a user is deleted.
  333. */
  334. #[ORM\Column(
  335. name : 'admin_user_id',
  336. type : Types::GUID,
  337. nullable: true
  338. )]
  339. protected ?string $adminUserId;
  340. public function setAdminUserId(?string $adminUserId = null): void
  341. {
  342. GuidUtility::validOrThrow($adminUserId, true);
  343. $this->adminUserId = $adminUserId;
  344. }
  345. public function getAdminUserId(): ?string
  346. {
  347. return $this->adminUserId;
  348. }
  349. #[ORM\Column(
  350. name : 'affected_user_is_jobofferer',
  351. type : Types::BOOLEAN,
  352. nullable: false
  353. )]
  354. protected bool $affectedUserIsJobofferer;
  355. public function setAffectedUserIsJobofferer(
  356. bool $affectedUserIsJobofferer
  357. ): void {
  358. $this->affectedUserIsJobofferer = $affectedUserIsJobofferer;
  359. }
  360. public function getAffectedUserIsJobofferer(): bool
  361. {
  362. return $this->affectedUserIsJobofferer;
  363. }
  364. #[ORM\Column(
  365. name : 'affected_user_is_jobseeker',
  366. type : Types::BOOLEAN,
  367. nullable: false
  368. )]
  369. protected bool $affectedUserIsJobseeker;
  370. public function setAffectedUserIsJobseeker(
  371. bool $affectedUserIsJobseeker
  372. ): void {
  373. $this->affectedUserIsJobseeker = $affectedUserIsJobseeker;
  374. }
  375. public function getAffectedUserIsJobseeker(): bool
  376. {
  377. return $this->affectedUserIsJobseeker;
  378. }
  379. #[ORM\Column(
  380. name : 'affected_user_registered_at',
  381. type : Types::DATETIME_MUTABLE,
  382. nullable: true
  383. )]
  384. protected ?DateTime $affectedUserRegisteredAt;
  385. public function setAffectedUserRegisteredAt(?DateTime $affectedUserRegisteredAt): void
  386. {
  387. $this->affectedUserRegisteredAt = $affectedUserRegisteredAt;
  388. }
  389. public function getAffectedUserRegisteredAt(): ?DateTime
  390. {
  391. return $this->affectedUserRegisteredAt;
  392. }
  393. #[ORM\Column(
  394. name : 'additional_data',
  395. type : Types::TEXT,
  396. length : 8192,
  397. nullable: true
  398. )]
  399. protected ?string $additionalData;
  400. /**
  401. * @throws Exception
  402. */
  403. public function setAdditionalData(?string $additionalData = null): void
  404. {
  405. if (!is_null($additionalData)) {
  406. if (is_null(json_decode($additionalData))) {
  407. throw new Exception('additionalData must be valid JSON');
  408. }
  409. }
  410. $this->additionalData = $additionalData;
  411. }
  412. public function getAdditionalData(): ?string
  413. {
  414. return $this->additionalData;
  415. }
  416. #[ORM\Column(
  417. name : 'request_id',
  418. type : Types::TEXT,
  419. length : 256,
  420. nullable: true
  421. )]
  422. protected ?string $requestId;
  423. public function setRequestId(?string $requestId = null): void
  424. {
  425. $this->requestId = $requestId;
  426. }
  427. public function getRequestId(): ?string
  428. {
  429. return $this->requestId;
  430. }
  431. #[ORM\Column(
  432. name : 'session_id',
  433. type : Types::TEXT,
  434. length : 256,
  435. nullable: true
  436. )]
  437. protected ?string $sessionId;
  438. public function setSessionId(?string $sessionId = null): void
  439. {
  440. $this->sessionId = $sessionId;
  441. }
  442. public function getSessionId(): ?string
  443. {
  444. return $this->sessionId;
  445. }
  446. #[ORM\Column(
  447. name : 'client_id',
  448. type : Types::TEXT,
  449. length : 64,
  450. nullable: true
  451. )]
  452. protected ?string $clientId;
  453. public function setClientId(?string $clientId = null): void
  454. {
  455. $this->clientId = $clientId;
  456. }
  457. public function getClientId(): ?string
  458. {
  459. return $this->clientId;
  460. }
  461. #[ORM\Column(
  462. name : 'is_meerbusch_office_request',
  463. type : Types::BOOLEAN,
  464. nullable: false
  465. )]
  466. protected bool $isMeerbuschOfficeRequest;
  467. public function getIsMeerbuschOfficeRequest(): bool
  468. {
  469. return $this->isMeerbuschOfficeRequest;
  470. }
  471. public function setIsMeerbuschOfficeRequest(bool $isMeerbuschOfficeRequest): void
  472. {
  473. $this->isMeerbuschOfficeRequest = $isMeerbuschOfficeRequest;
  474. }
  475. #[ORM\Column(
  476. name : 'platform_site_id',
  477. type : Types::INTEGER,
  478. nullable: true
  479. )]
  480. private ?int $platformSiteId;
  481. public function getPlatformSiteId(): ?int
  482. {
  483. return $this->platformSiteId;
  484. }
  485. /**
  486. * @throws Exception
  487. */
  488. public function setPlatformSiteId(?int $platformSiteId): void
  489. {
  490. if (!is_null($platformSiteId) && !ReflectionHelper::hasConstWithValue(PlatformSite::class, 'PLATFORM_SITE_ID_', $platformSiteId)) {
  491. throw new Exception("Not a valid value for : '$platformSiteId'.");
  492. }
  493. $this->platformSiteId = $platformSiteId;
  494. }
  495. #[ORM\Column(
  496. name : 'conversion_campaign_id',
  497. type : Types::INTEGER,
  498. nullable: true
  499. )]
  500. private ?int $conversionCampaignId;
  501. public function getConversionCampaignId(): ?int
  502. {
  503. return $this->conversionCampaignId;
  504. }
  505. /**
  506. * @throws Exception
  507. */
  508. public function setConversionCampaignId(?int $conversionCampaignId): void
  509. {
  510. if (!is_null($conversionCampaignId)
  511. && !ReflectionHelper::hasConstWithValue(
  512. ConversionEventService::class,
  513. 'CAMPAIGN_ID_',
  514. $conversionCampaignId
  515. )
  516. ) {
  517. throw new ValueError("Invalid campaign id '$conversionCampaignId'.");
  518. }
  519. $this->conversionCampaignId = $conversionCampaignId;
  520. }
  521. #[ORM\Column(
  522. name : 'business_name',
  523. type : Types::TEXT,
  524. length : 255,
  525. nullable: true
  526. )]
  527. protected ?string $businessName;
  528. public function getBusinessName(): ?string
  529. {
  530. return $this->businessName;
  531. }
  532. public function setBusinessName(?string $businessName): void
  533. {
  534. $this->businessName = $businessName;
  535. }
  536. #[ORM\Column(
  537. name : 'is_probably_bot_request',
  538. type : Types::BOOLEAN,
  539. nullable: true
  540. )]
  541. private ?bool $isProbablyBotRequest = null;
  542. public function getIsProbablyBotRequest(): ?bool
  543. {
  544. return $this->isProbablyBotRequest;
  545. }
  546. public function setIsProbablyBotRequest(?bool $isProbablyBotRequest): void
  547. {
  548. $this->isProbablyBotRequest = $isProbablyBotRequest;
  549. }
  550. }