src/App/Entity/RecurrentJobsSearch/RecurrentJobsSearchParameters.php line 17

Open in your IDE?
  1. <?php
  2. namespace App\Entity\RecurrentJobsSearch;
  3. use App\Entity\Profile\JobseekerProfile;
  4. use App\Entity\RecurrentJob;
  5. use App\Entity\WantedJob;
  6. use App\Validator\Constraint as AppAssert;
  7. use App\Value\PossibleAvailabilitiesValue;
  8. use App\Value\ZipcodeRadiusesValue;
  9. use Exception;
  10. use JsonSerializable;
  11. use ReturnTypeWillChange;
  12. use Symfony\Component\Validator\Constraints as Assert;
  13. use Symfony\Component\Validator\Context\ExecutionContextInterface;
  14. class RecurrentJobsSearchParameters implements JsonSerializable
  15. {
  16. /** @var string */
  17. private $filterSearchterm;
  18. /** @var int */
  19. private $filterZipcodeRadius = ZipcodeRadiusesValue::DEFAULT;
  20. /**
  21. * @var string
  22. *
  23. * @AppAssert\KnownZipcode
  24. */
  25. private $filterZipcode;
  26. /** @var int */
  27. private $filterRequiredExperience = JobseekerProfile::EXPERIENCE_MORE_THAN_ONE_YEAR;
  28. /** @var array|int[] */
  29. private $filterRequiredCareerLevels;
  30. /** @var bool */
  31. private $atLeastOneRequiredCareerLevelMustMatch;
  32. /** @var array|int[] */
  33. private $filterRequiredEmploymentTypes;
  34. /** @var bool */
  35. private $atLeastOneRequiredEmploymentTypeMustMatch;
  36. /** @var bool */
  37. private $filterIsRequiredOnMondayMorning;
  38. /** @var bool */
  39. private $filterIsRequiredOnMondayNoon;
  40. /** @var bool */
  41. private $filterIsRequiredOnMondayEvening;
  42. /** @var bool */
  43. private $filterIsRequiredOnMondayNight;
  44. /** @var bool */
  45. private $filterIsRequiredOnTuesdayMorning;
  46. /** @var bool */
  47. private $filterIsRequiredOnTuesdayNoon;
  48. /** @var bool */
  49. private $filterIsRequiredOnTuesdayEvening;
  50. /** @var bool */
  51. private $filterIsRequiredOnTuesdayNight;
  52. /** @var bool */
  53. private $filterIsRequiredOnWednesdayMorning;
  54. /** @var bool */
  55. private $filterIsRequiredOnWednesdayNoon;
  56. /** @var bool */
  57. private $filterIsRequiredOnWednesdayEvening;
  58. /** @var bool */
  59. private $filterIsRequiredOnWednesdayNight;
  60. /** @var bool */
  61. private $filterIsRequiredOnThursdayMorning;
  62. /** @var bool */
  63. private $filterIsRequiredOnThursdayNoon;
  64. /** @var bool */
  65. private $filterIsRequiredOnThursdayEvening;
  66. /** @var bool */
  67. private $filterIsRequiredOnThursdayNight;
  68. /** @var bool */
  69. private $filterIsRequiredOnFridayMorning;
  70. /** @var bool */
  71. private $filterIsRequiredOnFridayNoon;
  72. /** @var bool */
  73. private $filterIsRequiredOnFridayEvening;
  74. /** @var bool */
  75. private $filterIsRequiredOnFridayNight;
  76. /** @var bool */
  77. private $filterIsRequiredOnSaturdayMorning;
  78. /** @var bool */
  79. private $filterIsRequiredOnSaturdayNoon;
  80. /** @var bool */
  81. private $filterIsRequiredOnSaturdayEvening;
  82. /** @var bool */
  83. private $filterIsRequiredOnSaturdayNight;
  84. /** @var bool */
  85. private $filterIsRequiredOnSundayMorning;
  86. /** @var bool */
  87. private $filterIsRequiredOnSundayNoon;
  88. /** @var bool */
  89. private $filterIsRequiredOnSundayEvening;
  90. /** @var bool */
  91. private $filterIsRequiredOnSundayNight;
  92. /** @var bool */
  93. private $filterAlreadyContacted;
  94. private bool $filterSuperiorSalary;
  95. /**
  96. * @param array|int[] $filterRequiredCareerLevels
  97. * @param array|int[] $filterRequiredEmploymentTypes
  98. *
  99. * @throws Exception
  100. */
  101. public function __construct(
  102. string $filterSearchterm = '',
  103. string $filterZipcode = '',
  104. int $filterZipcodeRadius = ZipcodeRadiusesValue::DEFAULT,
  105. int $filterRequiredExperience = RecurrentJob::EXPERIENCE_NONE,
  106. array $filterRequiredCareerLevels = [],
  107. bool $atLeastOneRequiredCareerLevelMustMatch = false,
  108. array $filterRequiredEmploymentTypes = [],
  109. bool $atLeastOneRequiredEmploymentTypeMustMatch = false,
  110. bool $defaultFilterIsRequiredOn = false
  111. ) {
  112. $this->setFilterSearchterm($filterSearchterm);
  113. $this->setFilterZipcode($filterZipcode);
  114. $this->setFilterZipcodeRadius($filterZipcodeRadius);
  115. $this->setFilterRequiredExperience($filterRequiredExperience);
  116. $this->setFilterRequiredCareerLevels($filterRequiredCareerLevels);
  117. $this->setAtLeastOneRequiredCareerLevelMustMatch($atLeastOneRequiredCareerLevelMustMatch);
  118. $this->setFilterRequiredEmploymentTypes($filterRequiredEmploymentTypes);
  119. $this->setAtLeastOneRequiredEmploymentTypeMustMatch($atLeastOneRequiredEmploymentTypeMustMatch);
  120. foreach (PossibleAvailabilitiesValue::WEEKDAYS as $weekday) {
  121. foreach (PossibleAvailabilitiesValue::TIMES_OF_DAY as $timeOfDay) {
  122. $methodName = 'setFilterIsRequiredOn' . $weekday . $timeOfDay;
  123. $this->$methodName($defaultFilterIsRequiredOn);
  124. }
  125. }
  126. $this->filterAlreadyContacted = false;
  127. $this->filterSuperiorSalary = false;
  128. }
  129. public function getFilterSearchterm(): string
  130. {
  131. return $this->filterSearchterm;
  132. }
  133. public function setFilterSearchterm(?string $filterSearchterm = null): void
  134. {
  135. if (is_null($filterSearchterm)) {
  136. $filterSearchterm = '';
  137. }
  138. $this->filterSearchterm = $filterSearchterm;
  139. }
  140. public function getFilterZipcodeRadius(): int
  141. {
  142. return $this->filterZipcodeRadius;
  143. }
  144. public function setFilterZipcodeRadius(int $filterZipcodeRadius): void
  145. {
  146. $this->filterZipcodeRadius = $filterZipcodeRadius;
  147. }
  148. public function getFilterZipcode(): string
  149. {
  150. return $this->filterZipcode;
  151. }
  152. public function setFilterZipcode(string $filterZipcode): void
  153. {
  154. $this->filterZipcode = $filterZipcode;
  155. }
  156. public function getFilterRequiredExperience(): int
  157. {
  158. return $this->filterRequiredExperience;
  159. }
  160. public function setFilterRequiredExperience(int $filterRequiredExperience): void
  161. {
  162. $this->filterRequiredExperience = $filterRequiredExperience;
  163. }
  164. /**
  165. * @param array|int[] $filterRequiredCareerLevels
  166. *
  167. * @throws Exception
  168. */
  169. public function setFilterRequiredCareerLevels(array $filterRequiredCareerLevels): void
  170. {
  171. foreach ($filterRequiredCareerLevels as $filterRequiredCareerLevel) {
  172. if (!is_int($filterRequiredCareerLevel)
  173. || $filterRequiredCareerLevel < WantedJob::CAREER_LEVEL_TRAINEE
  174. || $filterRequiredCareerLevel > WantedJob::CAREER_LEVEL_EXECUTIVE
  175. ) {
  176. throw new Exception("Invalid value $filterRequiredCareerLevel in filterRequiredCareerLevels.");
  177. }
  178. }
  179. $this->filterRequiredCareerLevels = $filterRequiredCareerLevels;
  180. }
  181. public function setAtLeastOneRequiredCareerLevelMustMatch(bool $val): void
  182. {
  183. $this->atLeastOneRequiredCareerLevelMustMatch = $val;
  184. }
  185. public function getAtLeastOneRequiredCareerLevelMustMatch(): bool
  186. {
  187. return $this->atLeastOneRequiredCareerLevelMustMatch;
  188. }
  189. /** @return int[] */
  190. public function getFilterRequiredCareerLevels(): array
  191. {
  192. return $this->filterRequiredCareerLevels;
  193. }
  194. public function hasFilterRequiredCareerLevels(): bool
  195. {
  196. return (bool)sizeof($this->filterRequiredCareerLevels);
  197. }
  198. /**
  199. * @param array|int[] $filterRequiredEmploymentTypes
  200. *
  201. * @throws Exception
  202. */
  203. public function setFilterRequiredEmploymentTypes(array $filterRequiredEmploymentTypes): void
  204. {
  205. foreach ($filterRequiredEmploymentTypes as $filterRequiredEmploymentType) {
  206. if (!is_int($filterRequiredEmploymentType)
  207. || $filterRequiredEmploymentType < RecurrentJob::EMPLOYMENT_TYPE_ONCE
  208. || $filterRequiredEmploymentType > RecurrentJob::EMPLOYMENT_TYPE_UNDEFINED
  209. ) {
  210. throw new Exception("Invalid value '{$filterRequiredEmploymentType}' in filterRequiredEmploymentTypes.");
  211. }
  212. }
  213. $this->filterRequiredEmploymentTypes = $filterRequiredEmploymentTypes;
  214. }
  215. public function setAtLeastOneRequiredEmploymentTypeMustMatch(bool $val): void
  216. {
  217. $this->atLeastOneRequiredEmploymentTypeMustMatch = $val;
  218. }
  219. public function getAtLeastOneRequiredEmploymentTypeMustMatch(): bool
  220. {
  221. return $this->atLeastOneRequiredEmploymentTypeMustMatch;
  222. }
  223. /** @return int[] */
  224. public function getFilterRequiredEmploymentTypes(): array
  225. {
  226. return $this->filterRequiredEmploymentTypes;
  227. }
  228. public function hasFilterRequiredEmploymentTypes(): bool
  229. {
  230. return (bool)sizeof($this->filterRequiredEmploymentTypes);
  231. }
  232. public function getFilterIsRequiredOnMondayMorning(): bool
  233. {
  234. return $this->filterIsRequiredOnMondayMorning;
  235. }
  236. public function setFilterIsRequiredOnMondayMorning(bool $filterIsRequiredOnMondayMorning): void
  237. {
  238. $this->filterIsRequiredOnMondayMorning = $filterIsRequiredOnMondayMorning;
  239. }
  240. public function getFilterIsRequiredOnMondayNoon(): bool
  241. {
  242. return $this->filterIsRequiredOnMondayNoon;
  243. }
  244. public function setFilterIsRequiredOnMondayNoon(bool $filterIsRequiredOnMondayNoon): void
  245. {
  246. $this->filterIsRequiredOnMondayNoon = $filterIsRequiredOnMondayNoon;
  247. }
  248. public function getFilterIsRequiredOnMondayEvening(): bool
  249. {
  250. return $this->filterIsRequiredOnMondayEvening;
  251. }
  252. public function setFilterIsRequiredOnMondayEvening(bool $filterIsRequiredOnMondayEvening): void
  253. {
  254. $this->filterIsRequiredOnMondayEvening = $filterIsRequiredOnMondayEvening;
  255. }
  256. public function getFilterIsRequiredOnMondayNight(): bool
  257. {
  258. return $this->filterIsRequiredOnMondayNight;
  259. }
  260. public function setFilterIsRequiredOnMondayNight(bool $filterIsRequiredOnMondayNight): void
  261. {
  262. $this->filterIsRequiredOnMondayNight = $filterIsRequiredOnMondayNight;
  263. }
  264. public function getFilterIsRequiredOnTuesdayMorning(): bool
  265. {
  266. return $this->filterIsRequiredOnTuesdayMorning;
  267. }
  268. public function setFilterIsRequiredOnTuesdayMorning(bool $filterIsRequiredOnTuesdayMorning): void
  269. {
  270. $this->filterIsRequiredOnTuesdayMorning = $filterIsRequiredOnTuesdayMorning;
  271. }
  272. public function getFilterIsRequiredOnTuesdayNoon(): bool
  273. {
  274. return $this->filterIsRequiredOnTuesdayNoon;
  275. }
  276. public function setFilterIsRequiredOnTuesdayNoon(bool $filterIsRequiredOnTuesdayNoon): void
  277. {
  278. $this->filterIsRequiredOnTuesdayNoon = $filterIsRequiredOnTuesdayNoon;
  279. }
  280. public function getFilterIsRequiredOnTuesdayEvening(): bool
  281. {
  282. return $this->filterIsRequiredOnTuesdayEvening;
  283. }
  284. public function setFilterIsRequiredOnTuesdayEvening(bool $filterIsRequiredOnTuesdayEvening): void
  285. {
  286. $this->filterIsRequiredOnTuesdayEvening = $filterIsRequiredOnTuesdayEvening;
  287. }
  288. public function getFilterIsRequiredOnTuesdayNight(): bool
  289. {
  290. return $this->filterIsRequiredOnTuesdayNight;
  291. }
  292. public function setFilterIsRequiredOnTuesdayNight(bool $filterIsRequiredOnTuesdayNight): void
  293. {
  294. $this->filterIsRequiredOnTuesdayNight = $filterIsRequiredOnTuesdayNight;
  295. }
  296. public function getFilterIsRequiredOnWednesdayMorning(): bool
  297. {
  298. return $this->filterIsRequiredOnWednesdayMorning;
  299. }
  300. public function setFilterIsRequiredOnWednesdayMorning(bool $filterIsRequiredOnWednesdayMorning): void
  301. {
  302. $this->filterIsRequiredOnWednesdayMorning = $filterIsRequiredOnWednesdayMorning;
  303. }
  304. public function getFilterIsRequiredOnWednesdayNoon(): bool
  305. {
  306. return $this->filterIsRequiredOnWednesdayNoon;
  307. }
  308. public function setFilterIsRequiredOnWednesdayNoon(bool $filterIsRequiredOnWednesdayNoon): void
  309. {
  310. $this->filterIsRequiredOnWednesdayNoon = $filterIsRequiredOnWednesdayNoon;
  311. }
  312. public function getFilterIsRequiredOnWednesdayEvening(): bool
  313. {
  314. return $this->filterIsRequiredOnWednesdayEvening;
  315. }
  316. public function setFilterIsRequiredOnWednesdayEvening(bool $filterIsRequiredOnWednesdayEvening): void
  317. {
  318. $this->filterIsRequiredOnWednesdayEvening = $filterIsRequiredOnWednesdayEvening;
  319. }
  320. public function getFilterIsRequiredOnWednesdayNight(): bool
  321. {
  322. return $this->filterIsRequiredOnWednesdayNight;
  323. }
  324. public function setFilterIsRequiredOnWednesdayNight(bool $filterIsRequiredOnWednesdayNight): void
  325. {
  326. $this->filterIsRequiredOnWednesdayNight = $filterIsRequiredOnWednesdayNight;
  327. }
  328. public function getFilterIsRequiredOnThursdayMorning(): bool
  329. {
  330. return $this->filterIsRequiredOnThursdayMorning;
  331. }
  332. public function setFilterIsRequiredOnThursdayMorning(bool $filterIsRequiredOnThursdayMorning): void
  333. {
  334. $this->filterIsRequiredOnThursdayMorning = $filterIsRequiredOnThursdayMorning;
  335. }
  336. public function getFilterIsRequiredOnThursdayNoon(): bool
  337. {
  338. return $this->filterIsRequiredOnThursdayNoon;
  339. }
  340. public function setFilterIsRequiredOnThursdayNoon(bool $filterIsRequiredOnThursdayNoon): void
  341. {
  342. $this->filterIsRequiredOnThursdayNoon = $filterIsRequiredOnThursdayNoon;
  343. }
  344. public function getFilterIsRequiredOnThursdayEvening(): bool
  345. {
  346. return $this->filterIsRequiredOnThursdayEvening;
  347. }
  348. public function setFilterIsRequiredOnThursdayEvening(bool $filterIsRequiredOnThursdayEvening): void
  349. {
  350. $this->filterIsRequiredOnThursdayEvening = $filterIsRequiredOnThursdayEvening;
  351. }
  352. public function getFilterIsRequiredOnThursdayNight(): bool
  353. {
  354. return $this->filterIsRequiredOnThursdayNight;
  355. }
  356. public function setFilterIsRequiredOnThursdayNight(bool $filterIsRequiredOnThursdayNight): void
  357. {
  358. $this->filterIsRequiredOnThursdayNight = $filterIsRequiredOnThursdayNight;
  359. }
  360. public function getFilterIsRequiredOnFridayMorning(): bool
  361. {
  362. return $this->filterIsRequiredOnFridayMorning;
  363. }
  364. public function setFilterIsRequiredOnFridayMorning(bool $filterIsRequiredOnFridayMorning): void
  365. {
  366. $this->filterIsRequiredOnFridayMorning = $filterIsRequiredOnFridayMorning;
  367. }
  368. public function getFilterIsRequiredOnFridayNoon(): bool
  369. {
  370. return $this->filterIsRequiredOnFridayNoon;
  371. }
  372. public function setFilterIsRequiredOnFridayNoon(bool $filterIsRequiredOnFridayNoon): void
  373. {
  374. $this->filterIsRequiredOnFridayNoon = $filterIsRequiredOnFridayNoon;
  375. }
  376. public function getFilterIsRequiredOnFridayEvening(): bool
  377. {
  378. return $this->filterIsRequiredOnFridayEvening;
  379. }
  380. public function setFilterIsRequiredOnFridayEvening(bool $filterIsRequiredOnFridayEvening): void
  381. {
  382. $this->filterIsRequiredOnFridayEvening = $filterIsRequiredOnFridayEvening;
  383. }
  384. public function getFilterIsRequiredOnFridayNight(): bool
  385. {
  386. return $this->filterIsRequiredOnFridayNight;
  387. }
  388. public function setFilterIsRequiredOnFridayNight(bool $filterIsRequiredOnFridayNight): void
  389. {
  390. $this->filterIsRequiredOnFridayNight = $filterIsRequiredOnFridayNight;
  391. }
  392. public function getFilterIsRequiredOnSaturdayMorning(): bool
  393. {
  394. return $this->filterIsRequiredOnSaturdayMorning;
  395. }
  396. public function setFilterIsRequiredOnSaturdayMorning(bool $filterIsRequiredOnSaturdayMorning): void
  397. {
  398. $this->filterIsRequiredOnSaturdayMorning = $filterIsRequiredOnSaturdayMorning;
  399. }
  400. public function getFilterIsRequiredOnSaturdayNoon(): bool
  401. {
  402. return $this->filterIsRequiredOnSaturdayNoon;
  403. }
  404. public function setFilterIsRequiredOnSaturdayNoon(bool $filterIsRequiredOnSaturdayNoon): void
  405. {
  406. $this->filterIsRequiredOnSaturdayNoon = $filterIsRequiredOnSaturdayNoon;
  407. }
  408. public function getFilterIsRequiredOnSaturdayEvening(): bool
  409. {
  410. return $this->filterIsRequiredOnSaturdayEvening;
  411. }
  412. public function setFilterIsRequiredOnSaturdayEvening(bool $filterIsRequiredOnSaturdayEvening): void
  413. {
  414. $this->filterIsRequiredOnSaturdayEvening = $filterIsRequiredOnSaturdayEvening;
  415. }
  416. public function getFilterIsRequiredOnSaturdayNight(): bool
  417. {
  418. return $this->filterIsRequiredOnSaturdayNight;
  419. }
  420. public function setFilterIsRequiredOnSaturdayNight(bool $filterIsRequiredOnSaturdayNight): void
  421. {
  422. $this->filterIsRequiredOnSaturdayNight = $filterIsRequiredOnSaturdayNight;
  423. }
  424. public function getFilterIsRequiredOnSundayMorning(): bool
  425. {
  426. return $this->filterIsRequiredOnSundayMorning;
  427. }
  428. public function setFilterIsRequiredOnSundayMorning(bool $filterIsRequiredOnSundayMorning): void
  429. {
  430. $this->filterIsRequiredOnSundayMorning = $filterIsRequiredOnSundayMorning;
  431. }
  432. public function getFilterIsRequiredOnSundayNoon(): bool
  433. {
  434. return $this->filterIsRequiredOnSundayNoon;
  435. }
  436. public function setFilterIsRequiredOnSundayNoon(bool $filterIsRequiredOnSundayNoon): void
  437. {
  438. $this->filterIsRequiredOnSundayNoon = $filterIsRequiredOnSundayNoon;
  439. }
  440. public function getFilterIsRequiredOnSundayEvening(): bool
  441. {
  442. return $this->filterIsRequiredOnSundayEvening;
  443. }
  444. public function setFilterIsRequiredOnSundayEvening(bool $filterIsRequiredOnSundayEvening): void
  445. {
  446. $this->filterIsRequiredOnSundayEvening = $filterIsRequiredOnSundayEvening;
  447. }
  448. public function getFilterIsRequiredOnSundayNight(): bool
  449. {
  450. return $this->filterIsRequiredOnSundayNight;
  451. }
  452. public function setFilterIsRequiredOnSundayNight(bool $filterIsRequiredOnSundayNight): void
  453. {
  454. $this->filterIsRequiredOnSundayNight = $filterIsRequiredOnSundayNight;
  455. }
  456. public function getFilterAlreadyContacted(): bool
  457. {
  458. return $this->filterAlreadyContacted;
  459. }
  460. public function setFilterAlreadyContacted(bool $filterAlreadyContacted): void
  461. {
  462. $this->filterAlreadyContacted = $filterAlreadyContacted;
  463. }
  464. public function setAllFilterIsRequiredOnTo(bool $to): void
  465. {
  466. foreach (PossibleAvailabilitiesValue::WEEKDAYS as $weekday) {
  467. foreach (PossibleAvailabilitiesValue::TIMES_OF_DAY as $timeOfDay) {
  468. $methodName = 'getFilterIsRequiredOn' . $weekday . $timeOfDay;
  469. $this->$methodName($to);
  470. }
  471. }
  472. }
  473. public function isFilterSuperiorSalary(): bool
  474. {
  475. return $this->filterSuperiorSalary;
  476. }
  477. public function setFilterSuperiorSalary(bool $filterSuperiorSalary): void
  478. {
  479. $this->filterSuperiorSalary = $filterSuperiorSalary;
  480. }
  481. /**
  482. * @Assert\Callback
  483. */
  484. public function validate(ExecutionContextInterface $context, $payload)
  485. {
  486. if (!in_array($this->filterZipcodeRadius, ZipcodeRadiusesValue::ALL)) {
  487. $context->buildViolation('')
  488. ->atPath('filterZipcodeRadius')
  489. ->addViolation();
  490. }
  491. }
  492. #[ReturnTypeWillChange]
  493. public function jsonSerialize()
  494. {
  495. $result = [];
  496. $result['filterSearchterm'] = $this->filterSearchterm;
  497. $result['filterZipcodeRadius'] = $this->filterZipcodeRadius;
  498. $result['filterZipcode'] = $this->filterZipcode;
  499. $result['filterRequiredExperience'] = $this->filterRequiredExperience;
  500. $result['filterAlreadyContacted'] = $this->filterAlreadyContacted;
  501. $result['filterSuperiorSalary'] = $this->filterSuperiorSalary;
  502. foreach (PossibleAvailabilitiesValue::WEEKDAYS as $weekday) {
  503. foreach (PossibleAvailabilitiesValue::TIMES_OF_DAY as $timeOfDay) {
  504. $attr = 'filterIsRequiredOn' . $weekday . $timeOfDay;
  505. $result[$attr] = $this->$attr;
  506. }
  507. }
  508. return $result;
  509. }
  510. /** @throws Exception */
  511. public static function createFromArray(array $data): self
  512. {
  513. $recurrentJobsSearchParameters = new self();
  514. $recurrentJobsSearchParameters->filterSearchterm = $data['filterSearchterm'];
  515. $recurrentJobsSearchParameters->filterZipcodeRadius = $data['filterZipcodeRadius'];
  516. $recurrentJobsSearchParameters->filterZipcode = $data['filterZipcode'];
  517. $recurrentJobsSearchParameters->filterRequiredExperience = $data['filterRequiredExperience'];
  518. $recurrentJobsSearchParameters->filterRequiredCareerLevels = $data['filterRequiredCareerLevels'];
  519. $recurrentJobsSearchParameters->filterRequiredEmploymentTypes = $data['filterRequiredEmploymentTypes'];
  520. if (array_key_exists('filterAlreadyContacted', $data) && !is_null($data['filterAlreadyContacted'])) {
  521. $recurrentJobsSearchParameters->filterAlreadyContacted = $data['filterAlreadyContacted'];
  522. } else {
  523. $recurrentJobsSearchParameters->filterAlreadyContacted = false;
  524. }
  525. if (array_key_exists('filterSuperiorSalary', $data) && !is_null($data['filterSuperiorSalary'])) {
  526. $recurrentJobsSearchParameters->filterSuperiorSalary = $data['filterSuperiorSalary'];
  527. } else {
  528. $recurrentJobsSearchParameters->filterSuperiorSalary = false;
  529. }
  530. foreach (PossibleAvailabilitiesValue::WEEKDAYS as $weekday) {
  531. foreach (PossibleAvailabilitiesValue::TIMES_OF_DAY as $timeOfDay) {
  532. $attr = 'filterIsRequiredOn' . $weekday . $timeOfDay;
  533. if (array_key_exists($attr, $data) && is_bool($data[$attr])) {
  534. $recurrentJobsSearchParameters->$attr = $data[$attr];
  535. }
  536. }
  537. }
  538. return $recurrentJobsSearchParameters;
  539. }
  540. public function toQueryString(int $page = 1): string
  541. {
  542. $queryString = '';
  543. $queryString .= 'recurrent_jobs_search_parameters[filterSearchterm]=' . urlencode($this->filterSearchterm);
  544. $queryString .= '&recurrent_jobs_search_parameters[filterZipcodeRadius]=' . urlencode($this->filterZipcodeRadius);
  545. $queryString .= '&recurrent_jobs_search_parameters[filterZipcode]=' . urlencode($this->filterZipcode);
  546. $queryString .= '&recurrent_jobs_search_parameters[filterRequiredExperience]=' . urlencode($this->filterRequiredExperience);
  547. $queryString .= '&recurrent_jobs_search_parameters[filterAlreadyContacted]=' . urlencode($this->filterAlreadyContacted);
  548. $queryString .= '&recurrent_jobs_search_parameters[filterSuperiorSalary]=' . urlencode($this->filterSuperiorSalary);
  549. foreach ($this->filterRequiredCareerLevels as $careerLevel) {
  550. $queryString .= '&recurrent_jobs_search_parameters[filterRequiredCareerLevels][]=' . urlencode($careerLevel);
  551. }
  552. foreach ($this->filterRequiredEmploymentTypes as $employmentType) {
  553. $queryString .= '&recurrent_jobs_search_parameters[filterRequiredEmploymentTypes][]=' . urlencode($employmentType);
  554. }
  555. foreach (PossibleAvailabilitiesValue::WEEKDAYS as $weekday) {
  556. foreach (PossibleAvailabilitiesValue::TIMES_OF_DAY as $timeOfDay) {
  557. $attr = 'filterIsRequiredOn' . $weekday . $timeOfDay;
  558. if ($this->$attr === true) {
  559. $queryString .= '&recurrent_jobs_search_parameters[' . $attr . ']=1';
  560. }
  561. }
  562. }
  563. $queryString .= '&page=' . $page;
  564. return $queryString;
  565. }
  566. /**
  567. * Returns a parameter set that matches the given recurrent job perfectly.
  568. *
  569. * @throws Exception
  570. */
  571. public static function fromWantedJob(WantedJob $wantedJob): self
  572. {
  573. $remainingEmploymentTypes = [];
  574. foreach ($wantedJob->getEmploymentTypes() as $employmentType) {
  575. if ($employmentType !== RecurrentJob::EMPLOYMENT_TYPE_UNDEFINED) {
  576. $remainingEmploymentTypes[] = $employmentType;
  577. }
  578. }
  579. $recurrentJobsSearchParameters = new self();
  580. $recurrentJobsSearchParameters->filterSearchterm = $wantedJob->getOccupationalFieldSearchterm();
  581. $recurrentJobsSearchParameters->filterZipcodeRadius = is_null($wantedJob->getAvailabilityRadius()) ? ZipcodeRadiusesValue::DEFAULT : $wantedJob->getAvailabilityRadius();
  582. $recurrentJobsSearchParameters->filterZipcode = $wantedJob->getZipcode();
  583. $recurrentJobsSearchParameters->filterRequiredExperience = $wantedJob->getRequiredExperience();
  584. $recurrentJobsSearchParameters->filterRequiredCareerLevels = $wantedJob->getCareerLevels();
  585. $recurrentJobsSearchParameters->filterRequiredEmploymentTypes = $remainingEmploymentTypes;
  586. $recurrentJobsSearchParameters->filterSuperiorSalary = false;
  587. foreach (PossibleAvailabilitiesValue::WEEKDAYS as $weekday) {
  588. foreach (PossibleAvailabilitiesValue::TIMES_OF_DAY as $timeOfDay) {
  589. $paramsAttr = 'filterIsRequiredOn' . $weekday . $timeOfDay;
  590. $profileMethod = 'isRequiredOn' . $weekday . $timeOfDay;
  591. $recurrentJobsSearchParameters->$paramsAttr = $wantedJob->$profileMethod();
  592. }
  593. }
  594. return $recurrentJobsSearchParameters;
  595. }
  596. public static function fromRecurrentJob(RecurrentJob $recurrentJob): self
  597. {
  598. $remainingEmploymentTypes = [];
  599. foreach ($recurrentJob->getEmploymentTypes() as $employmentType) {
  600. if ($employmentType !== RecurrentJob::EMPLOYMENT_TYPE_UNDEFINED) {
  601. $remainingEmploymentTypes[] = $employmentType;
  602. }
  603. }
  604. $recurrentJobsSearchParameters = new self();
  605. $recurrentJobsSearchParameters->filterSearchterm = $recurrentJob->getOccupationalFieldSearchterm();
  606. $recurrentJobsSearchParameters->filterZipcodeRadius = ZipcodeRadiusesValue::MINIMUM;
  607. $recurrentJobsSearchParameters->filterZipcode = $recurrentJob->getZipcode();
  608. $recurrentJobsSearchParameters->filterRequiredExperience = $recurrentJob->getRequiredExperience();
  609. $recurrentJobsSearchParameters->filterRequiredCareerLevels = $recurrentJob->getCareerLevels();
  610. $recurrentJobsSearchParameters->filterRequiredEmploymentTypes = $remainingEmploymentTypes;
  611. $recurrentJobsSearchParameters->filterSuperiorSalary = false;
  612. foreach (PossibleAvailabilitiesValue::WEEKDAYS as $weekday) {
  613. foreach (PossibleAvailabilitiesValue::TIMES_OF_DAY as $timeOfDay) {
  614. $paramsAttr = 'filterIsRequiredOn' . $weekday . $timeOfDay;
  615. $profileMethod = 'isRequiredOn' . $weekday . $timeOfDay;
  616. $recurrentJobsSearchParameters->$paramsAttr = $recurrentJob->$profileMethod();
  617. }
  618. }
  619. return $recurrentJobsSearchParameters;
  620. }
  621. public function asArray(): array
  622. {
  623. $arr = [
  624. 'filterSearchterm' => $this->getFilterSearchterm(),
  625. 'filterZipcode' => $this->getFilterZipcode(),
  626. 'filterZipcodeRadius' => $this->getFilterZipcodeRadius(),
  627. 'filterRequiredExperience' => $this->getFilterRequiredExperience(),
  628. 'filterAlreadyContacted' => $this->getFilterAlreadyContacted(),
  629. 'filterRequiredCareerLevels' => $this->getFilterRequiredCareerLevels(),
  630. 'filterRequiredEmploymentTypes' => $this->getFilterRequiredEmploymentTypes(),
  631. 'filterSuperiorSalary' => $this->isFilterSuperiorSalary()
  632. ];
  633. foreach (PossibleAvailabilitiesValue::WEEKDAYS as $weekday) {
  634. foreach (PossibleAvailabilitiesValue::TIMES_OF_DAY as $timeOfDay) {
  635. $key = 'filterIsRequiredOn' . $weekday . $timeOfDay;
  636. $methodName = 'getFilterIsRequiredOn' . $weekday . $timeOfDay;
  637. if ($this->$methodName() == true) {
  638. $arr[$key] = $this->$methodName();
  639. }
  640. }
  641. }
  642. return $arr;
  643. }
  644. }