src/Entity/Cvs/Candidates.php line 25

Open in your IDE?
  1. <?php
  2. namespace App\Entity\Cvs;
  3. use App\Entity\Core\Users;
  4. use App\Entity\Core\Agencies;
  5. use Doctrine\DBAL\Types\Types;
  6. use Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity;
  7. use Symfony\Component\Validator\Constraints as Assert;
  8. use Doctrine\ORM\Mapping as ORM;
  9. use Vich\UploaderBundle\Mapping\Annotation as Vich;
  10. use Symfony\Component\HttpFoundation\File\File;
  11. use Symfony\Component\HttpFoundation\File\UploadedFile;
  12. use Vich\UploaderBundle\Entity\File as EmbeddedFile;
  13. use Vich\UploaderBundle\Templating\Helper\UploaderHelper;
  14. /**
  15. * Candidates
  16. *
  17. * @ORM\Table("cvs_candidates")
  18. * @ORM\Entity(repositoryClass="App\Repository\Cvs\CandidatesRepository")
  19. * @ORM\HasLifecycleCallbacks()
  20. * @Vich\Uploadable
  21. */
  22. class Candidates
  23. {
  24. /**
  25. * @var integer
  26. *
  27. * @ORM\Column(name="id", type="integer")
  28. * @ORM\Id
  29. * @ORM\GeneratedValue(strategy="AUTO")
  30. */
  31. protected $id;
  32. /**
  33. * @var string
  34. *
  35. * @ORM\Column(name="created_at", type="datetime", nullable=true, options={"comment":"Date de création"})
  36. */
  37. private $createdAt;
  38. /**
  39. * @var string
  40. *
  41. * @ORM\Column(name="updated_at", type="datetime", nullable=true, options={"comment":"Date de mise à jour"})
  42. */
  43. private $updatedAt;
  44. /**
  45. * @var string
  46. *
  47. * @ORM\Column(name="perimeter", type="string", length=255, nullable=true)
  48. */
  49. private $perimeter;
  50. /**
  51. * @var string
  52. *
  53. * @ORM\Column(name="phone", type="string", length=255, nullable=true)
  54. */
  55. private $phone;
  56. /**
  57. * @var string
  58. *
  59. * @ORM\Column(name="address", type="string", length=255, nullable=true)
  60. */
  61. private $address;
  62. /**
  63. * @var string
  64. *
  65. * @ORM\Column(name="city", type="string", length=255, nullable=true)
  66. */
  67. private $city;
  68. /**
  69. * @var string
  70. *
  71. * @ORM\Column(name="zipcode", type="string", length=255, nullable=true)
  72. */
  73. private $zipcode;
  74. /**
  75. * @var string
  76. *
  77. * @ORM\Column(name="country", type="string", length=255, nullable=true)
  78. */
  79. private $country;
  80. /**
  81. * @var string
  82. *
  83. * @ORM\Column(name="slug", type="string", length=255, nullable=true)
  84. */
  85. private $slug;
  86. /**
  87. * @var string
  88. *
  89. * @ORM\Column(name="slug_anonyme", type="string", length=255, nullable=true)
  90. */
  91. private $slugAnonyme;
  92. /**
  93. * L'adresse publique du profil : /cv/{publicRef}.
  94. *
  95. * ⚠️ ENTIÈREMENT ALÉATOIRE — AUCUN LIEN AVEC L'ID.
  96. *
  97. * `slug` existe déjà, mais au format `{id}-{aléatoire}` : il PORTE
  98. * l'identifiant. Publier ça, c'est révéler le numéro du candidat et,
  99. * par recoupement, l'ordre des inscriptions et leur volume.
  100. *
  101. * Cette colonne est donc distincte : 15 caractères tirés au sort,
  102. * sans préfixe, sans structure. On ne remonte à rien, et on ne
  103. * devine rien — l'index UNIQUE garantit qu'elle désigne une seule
  104. * personne.
  105. *
  106. * @var string|null
  107. *
  108. * @ORM\Column(name="public_ref", type="string", length=32, nullable=true, unique=true, options={"comment":"Adresse publique aléatoire du profil (/cv/{ref})"})
  109. */
  110. private $publicRef;
  111. /**
  112. * L'adresse LISIBLE du portfolio public : /portfolio/{slug}.
  113. *
  114. * ══════════════════════════════════════════════════════════════════
  115. * ⚠️ À NE CONFONDRE NI AVEC `slug`, NI AVEC `slugAnonyme`, NI AVEC
  116. * `publicRef`.
  117. * ══════════════════════════════════════════════════════════════════
  118. *
  119. * `slug` / `slugAnonyme` colonnes héritées, jamais alimentées
  120. * pour un candidat aujourd'hui ;
  121. * `publicRef` quinze caractères tirés au sort, pour
  122. * une adresse qu'on partage à quelqu'un
  123. * de précis sans qu'elle se devine ;
  124. * `portfolioSlug` l'inverse assumé : « marie-dupont »,
  125. * lisible, mémorisable, indexable — parce
  126. * que le but est justement d'être trouvé.
  127. *
  128. * Les deux coexistent : discrétion d'un côté, visibilité de l'autre.
  129. * Publier l'un ne publie pas l'autre.
  130. *
  131. * ⚠️ UNIQUE, ET MODIFIABLE PAR SON PROPRIÉTAIRE.
  132. *
  133. * Le candidat peut le changer quand il veut — c'est SON adresse.
  134. * L'unicité est garantie par l'index : deux candidats ne peuvent
  135. * pas porter le même, et une tentative se solde par un refus
  136. * explicite plutôt que par un écrasement silencieux.
  137. *
  138. * Contrepartie assumée : changer de slug casse les liens déjà
  139. * partagés, et libère l'ancien pour quelqu'un d'autre. L'écran le
  140. * dit avant de valider — c'est un choix qui appartient au
  141. * candidat, pas une décision qu'on prend à sa place.
  142. *
  143. * @var string|null
  144. *
  145. * @ORM\Column(name="portfolio_slug", type="string", length=160, nullable=true, unique=true, options={"comment":"Adresse lisible du portfolio public (/portfolio/{slug})"})
  146. */
  147. private $portfolioSlug;
  148. /**
  149. * Le portfolio public est-il en ligne ?
  150. *
  151. * ⚠️ TROISIÈME DRAPEAU DE PUBLICATION, INDÉPENDANT DES DEUX AUTRES.
  152. *
  153. * `online` être trouvé par les recruteurs de la plateforme ;
  154. * `onlineClassic` le CV nommé à une adresse aléatoire ;
  155. * celui-ci une page indexable à une adresse qui porte le nom.
  156. *
  157. * Les confondre publierait l'identité de quelqu'un qui n'a accepté
  158. * que d'être contacté.
  159. *
  160. * @var bool|null
  161. *
  162. * @ORM\Column(name="portfolio_online", type="boolean", nullable=true, options={"default":0,"comment":"Portfolio public en ligne"})
  163. */
  164. private $portfolioOnline = false;
  165. /**
  166. * La SECONDE adresse publique : le même profil, sans identité.
  167. *
  168. * ⚠️ DEUX PORTES VERS UN SEUL PROFIL, PAS DEUX PROFILS.
  169. *
  170. * `/cv/{publicRef}` montre nom et photo. `/cv/{anonRef}` montre le
  171. * métier, la ville, l'expérience et la présentation — rien d'autre.
  172. * Le candidat partage l'une ou l'autre selon qui peut lire.
  173. *
  174. * Elle est tirée au sort indépendamment : connaître l'une ne donne
  175. * jamais l'autre. Sans ça, l'anonymat ne tiendrait pas cinq minutes.
  176. *
  177. * @var string|null
  178. *
  179. * @ORM\Column(name="anon_ref", type="string", length=32, nullable=true, unique=true, options={"comment":"Adresse publique anonyme du profil (/cv/{ref})"})
  180. */
  181. private $anonRef;
  182. /**
  183. * @var string
  184. *
  185. * @ORM\Column(name="title_job", type="string", length=255, nullable=true)
  186. */
  187. private $titleJob;
  188. /**
  189. * @var string
  190. *
  191. * @ORM\Column(name="description_cover", type="text", nullable=true)
  192. */
  193. private $descriptionCover;
  194. /**
  195. * @var string
  196. *
  197. * @ORM\Column(name="description_cover_anonyme", type="text", nullable=true)
  198. */
  199. private $descriptionCoverAnonyme;
  200. /**
  201. * @var string
  202. *
  203. * @ORM\Column(name="description_services", type="text", nullable=true)
  204. */
  205. private $descriptionServices;
  206. /**
  207. * @var string
  208. *
  209. * @ORM\Column(name="description_services_anonyme", type="text", nullable=true)
  210. */
  211. private $descriptionServicesAnonyme;
  212. /**
  213. * @var string
  214. *
  215. * @ORM\Column(name="description_cta", type="text", nullable=true)
  216. */
  217. private $descriptionCta;
  218. /**
  219. * @var string
  220. *
  221. * @ORM\Column(name="description_cta_anonyme", type="text", nullable=true)
  222. */
  223. private $descriptionCtaAnonyme;
  224. /**
  225. * @var string
  226. *
  227. * @ORM\Column(name="description", type="text", nullable=true)
  228. */
  229. private $description;
  230. /**
  231. * @var string
  232. *
  233. * @ORM\Column(name="description_anonyme", type="text", nullable=true)
  234. */
  235. private $descriptionAnonyme;
  236. /**
  237. * @var string
  238. *
  239. * @ORM\Column(name="description_experience", type="text", nullable=true)
  240. */
  241. private $descriptionExperience;
  242. /**
  243. * @var string
  244. *
  245. * @ORM\Column(name="description_experience_anonyme", type="text", nullable=true)
  246. */
  247. private $descriptionExperienceAnonyme;
  248. /**
  249. * @var string
  250. *
  251. * @ORM\Column(name="website_url", type="text", nullable=true)
  252. */
  253. private $websiteUrl;
  254. /**
  255. * @var string
  256. *
  257. * @ORM\Column(name="video_fr_url", type="text", nullable=true)
  258. */
  259. private $videoFrUrl;
  260. /**
  261. * @var string
  262. *
  263. * @ORM\Column(name="video_en_url", type="text", nullable=true)
  264. */
  265. private $videoEnUrl;
  266. /**
  267. * @var string
  268. *
  269. * @ORM\Column(name="video_default_url", type="text", nullable=true)
  270. */
  271. private $videoDefaultUrl;
  272. /**
  273. * @var string
  274. *
  275. * @ORM\Column(name="linkedin_url", type="text", nullable=true)
  276. */
  277. private $linkedinUrl;
  278. /**
  279. * @var string
  280. *
  281. * @ORM\Column(name="salary", type="boolean", nullable=true)
  282. */
  283. private $salary;
  284. /**
  285. * @var string
  286. *
  287. * @ORM\Column(name="freelance", type="boolean", nullable=true)
  288. */
  289. private $freelance;
  290. /**
  291. * @var string
  292. *
  293. * @ORM\Column(name="alternance", type="boolean", nullable=true)
  294. */
  295. private $alternance;
  296. /**
  297. * @var string
  298. *
  299. * @ORM\Column(name="stage", type="boolean", nullable=true)
  300. */
  301. private $stage;
  302. /**
  303. * @var string
  304. *
  305. * @ORM\Column(name="on_search", type="boolean", nullable=true)
  306. */
  307. private $onSearch;
  308. /**
  309. * @var string
  310. *
  311. * @ORM\Column(name="on_discussion", type="boolean", nullable=true)
  312. */
  313. private $onDiscussion;
  314. /**
  315. * @var string
  316. *
  317. * @ORM\Column(name="notifications", type="boolean", nullable=true)
  318. */
  319. private $notifications;
  320. /**
  321. * @var string
  322. *
  323. * @ORM\Column(name="online", type="boolean", nullable=true)
  324. */
  325. private $online;
  326. /**
  327. * Le profil public masque-t-il l'identité du candidat ?
  328. *
  329. * ⚠️ LE BESOIN CENTRAL D'UNE PLATEFORME DE RECRUTEMENT INVERSÉ.
  330. *
  331. * Un candidat en poste qui cherche ailleurs ne peut pas exposer son
  332. * nom : son employeur actuel le trouverait. Sans ce mode, toute une
  333. * population — celle qui a le plus de valeur pour les recruteurs,
  334. * puisqu'elle travaille — ne peut tout simplement pas publier.
  335. *
  336. * Actif : la page /cv/{ref} montre le métier, la ville,
  337. * l'expérience et la présentation, mais ni nom, ni prénom, ni
  338. * photo. Le recruteur écrit quand même — c'est le candidat qui
  339. * décide de se révéler, en répondant.
  340. *
  341. * @var bool|null
  342. *
  343. * @ORM\Column(name="anonymous", type="boolean", nullable=true, options={"default":0,"comment":"Masque l'identité sur la page publique"})
  344. */
  345. private $anonymous;
  346. /**
  347. * @var string
  348. *
  349. * @ORM\Column(name="online_classic", type="boolean", nullable=true)
  350. */
  351. private $onlineClassic;
  352. /**
  353. * @var string
  354. *
  355. * @ORM\Column(name="invitation_code", type="text", nullable=true)
  356. */
  357. private $invitationCode;
  358. /**
  359. * @var string
  360. *
  361. * @ORM\Column(name="invitation_code_anonyme", type="text", nullable=true)
  362. */
  363. private $invitationCodeAnonyme;
  364. /**
  365. * @var string
  366. *
  367. * @ORM\Column(name="views", type="integer", nullable=true)
  368. */
  369. private $views;
  370. /**
  371. * @var string
  372. *
  373. * @ORM\Column(name="exp_years", type="integer", nullable=true)
  374. */
  375. private $expYears;
  376. /**
  377. * @var string
  378. *
  379. * @ORM\Column(name="views_anonyme", type="integer", nullable=true)
  380. */
  381. private $viewsAnonyme;
  382. /**
  383. * @var string
  384. *
  385. * @ORM\Column(name="first", type="boolean", nullable=true)
  386. */
  387. private $first;
  388. /**
  389. * @var string
  390. *
  391. * @ORM\Column(name="point_x", type="string", length=255, nullable=true)
  392. */
  393. private $pointX;
  394. /**
  395. * @var string
  396. *
  397. * @ORM\Column(name="point_y", type="string", length=255, nullable=true)
  398. */
  399. private $pointY;
  400. /**
  401. * NOTE: This is not a mapped field of entity metadata, just a simple property.
  402. *
  403. * @Vich\UploadableField(mapping="cv_files", fileNameProperty="image.name", size="image.size", mimeType="image.mimeType", originalName="image.originalName", dimensions="image.dimensions")
  404. *
  405. * @var File|null
  406. */
  407. private $imageFile;
  408. /**
  409. * @ORM\Embedded(class="Vich\UploaderBundle\Entity\File")
  410. *
  411. * @var EmbeddedFile
  412. */
  413. private $image;
  414. /**
  415. * @var string
  416. *
  417. * @ORM\Column(name="analyse", type="boolean", nullable=true)
  418. */
  419. private $analyse;
  420. /**
  421. * @var string
  422. *
  423. * @ORM\Column(name="analyse_note", type="text", nullable=true)
  424. */
  425. private $analyseNote;
  426. /**
  427. * @var string
  428. *
  429. * @ORM\Column(name="analyse_locale", type="text", nullable=true)
  430. */
  431. private $analyseLocale;
  432. /**
  433. * @var string
  434. *
  435. * @ORM\Column(name="default_locale", type="text", nullable=true)
  436. */
  437. private $defaultLocale;
  438. /**
  439. * @var string
  440. *
  441. * @ORM\Column(name="french", type="boolean", nullable=true)
  442. */
  443. private $french;
  444. /**
  445. * @var string
  446. *
  447. * @ORM\Column(name="english", type="boolean", nullable=true)
  448. */
  449. private $english;
  450. /**
  451. * @var string
  452. *
  453. * @ORM\Column(name="default_language", type="boolean", nullable=true)
  454. */
  455. private $default;
  456. /**
  457. * @var string
  458. *
  459. * @ORM\Column(name="hard_skills_fr", type="text", nullable=true)
  460. */
  461. private $hardSkillsFr;
  462. /**
  463. * @var string
  464. *
  465. * @ORM\Column(name="hard_skills_en", type="text", nullable=true)
  466. */
  467. private $hardSkillsEn;
  468. /**
  469. * @var string
  470. *
  471. * @ORM\Column(name="hard_skills_default", type="text", nullable=true)
  472. */
  473. private $hardSkillsDefault;
  474. /**
  475. * @var string
  476. *
  477. * @ORM\Column(name="soft_skills_en", type="text", nullable=true)
  478. */
  479. private $softSkillsEn;
  480. /**
  481. * @var string
  482. *
  483. * @ORM\Column(name="soft_skills_fr", type="text", nullable=true)
  484. */
  485. private $softSkillsFr;
  486. /**
  487. * @var string
  488. *
  489. * @ORM\Column(name="soft_skills_default", type="text", nullable=true)
  490. */
  491. private $softSkillsDefault;
  492. /**
  493. * @var string
  494. *
  495. * @ORM\Column(name="tags_fr", type="text", nullable=true)
  496. */
  497. private $tagsFr;
  498. /**
  499. * @var string
  500. *
  501. * @ORM\Column(name="tags_en", type="text", nullable=true)
  502. */
  503. private $tagsEn;
  504. /**
  505. * @var string
  506. *
  507. * @ORM\Column(name="tags_default", type="text", nullable=true)
  508. */
  509. private $tagsDefault;
  510. /**
  511. * @var string
  512. *
  513. * @ORM\Column(name="recruiter_summary_fr", type="text", nullable=true)
  514. */
  515. private $resumeRecruiterFr;
  516. /**
  517. * @var string
  518. *
  519. * @ORM\Column(name="recruiter_summary_en", type="text", nullable=true)
  520. */
  521. private $resumeRecruiterEn;
  522. /**
  523. * @var string
  524. *
  525. * @ORM\Column(name="recruiter_summary_default", type="text", nullable=true)
  526. */
  527. private $resumeRecruiterDefault;
  528. /**
  529. * @var string
  530. *
  531. * @ORM\Column(name="recruiter_projects_fr", type="text", nullable=true)
  532. */
  533. private $resumeProjectsFr;
  534. /**
  535. * @var string
  536. *
  537. * @ORM\Column(name="recruiter_projects_en", type="text", nullable=true)
  538. */
  539. private $resumeProjectsEn;
  540. /**
  541. * @var string
  542. *
  543. * @ORM\Column(name="recruiter_projects_default", type="text", nullable=true)
  544. */
  545. private $resumeProjectsDefault;
  546. /**
  547. * @var string
  548. *
  549. * @ORM\Column(name="recruiter_exp_fr", type="text", nullable=true)
  550. */
  551. private $resumeExpFr;
  552. /**
  553. * @var string
  554. *
  555. * @ORM\Column(name="recruiter_exp_en", type="text", nullable=true)
  556. */
  557. private $resumeExpEn;
  558. /**
  559. * @var string
  560. *
  561. * @ORM\Column(name="recruiter_exp_default", type="text", nullable=true)
  562. */
  563. private $resumeExpDefault;
  564. /**
  565. * @var string
  566. *
  567. * @ORM\Column(name="titlejob_fr", type="text", nullable=true)
  568. */
  569. private $titlejobFr;
  570. /**
  571. * @var string
  572. *
  573. * @ORM\Column(name="titlejob_en", type="text", nullable=true)
  574. */
  575. private $titlejobEn;
  576. /**
  577. * @var string
  578. *
  579. * @ORM\Column(name="titlejob_default", type="text", nullable=true)
  580. */
  581. private $titlejobDefault;
  582. /**
  583. * @var string
  584. *
  585. * @ORM\Column(name="presentation_fr", type="text", nullable=true)
  586. */
  587. private $presentationFr;
  588. /**
  589. * @var string
  590. *
  591. * @ORM\Column(name="presentation_en", type="text", nullable=true)
  592. */
  593. private $presentationEn;
  594. /**
  595. * @var string
  596. *
  597. * @ORM\Column(name="presentation_default", type="text", nullable=true)
  598. */
  599. private $presentationDefault;
  600. /**
  601. * @var string
  602. *
  603. * @ORM\Column(name="futur_jobtitle_fr", type="text", nullable=true)
  604. */
  605. private $futurTitlejobFr;
  606. /**
  607. * @var string
  608. *
  609. * @ORM\Column(name="futur_jobtitle_en", type="text", nullable=true)
  610. */
  611. private $futurTitlejobEn;
  612. /**
  613. * @var string
  614. *
  615. * @ORM\Column(name="futur_jobtitle_default", type="text", nullable=true)
  616. */
  617. private $futurTitlejobDefault;
  618. /**
  619. * @var string
  620. *
  621. * @ORM\Column(name="sector_en", type="text", nullable=true)
  622. */
  623. private $sectorEn;
  624. /**
  625. * @var string
  626. *
  627. * @ORM\Column(name="sector_fr", type="text", nullable=true)
  628. */
  629. private $sectorFr;
  630. /**
  631. * @var string
  632. *
  633. * @ORM\Column(name="sector_default", type="text", nullable=true)
  634. */
  635. private $sectorDefault;
  636. /**
  637. * @var string
  638. *
  639. * @ORM\Column(name="status_search", type="text", nullable=true)
  640. */
  641. private $statusSearch;
  642. /**
  643. * @var string
  644. *
  645. * @ORM\Column(name="availability", type="text", nullable=true)
  646. */
  647. private $availability;
  648. /**
  649. * @var string|null
  650. * @ORM\Column(name="form_ai_analysis", type="text", nullable=true)
  651. */
  652. private $formAiAnalysis;
  653. /**
  654. * @var string|null
  655. * @ORM\Column(name="form_ai_analysis_status", type="string", length=16, nullable=true)
  656. */
  657. private $formAiAnalysisStatus;
  658. /**
  659. * @var \DateTime|null
  660. * @ORM\Column(name="form_ai_analysis_updated_at", type="datetime", nullable=true)
  661. */
  662. private $formAiAnalysisUpdatedAt;
  663. /**
  664. * Données brutes du formulaire CV (tunnel V2).
  665. * JSON sérialisé de l'objet CvData côté mobile.
  666. *
  667. * @var string|null
  668. * @ORM\Column(name="cv_data", type="text", nullable=true)
  669. */
  670. private $cvData;
  671. /**
  672. * Paramètres de rendu du CV : theme, primary, secondary, cv_language.
  673. * JSON sérialisé.
  674. *
  675. * @var string|null
  676. * @ORM\Column(name="cv_settings", type="text", nullable=true)
  677. */
  678. private $cvSettings;
  679. /**
  680. * Chemin absolu du dernier PDF généré par cv_primary.py / cv_second.py.
  681. *
  682. * @var string|null
  683. * @ORM\Column(name="cv_pdf_path", type="string", length=512, nullable=true)
  684. */
  685. private $cvPdfPath;
  686. public function __construct()
  687. {
  688. $this->image = new \Vich\UploaderBundle\Entity\File();
  689. }
  690. /**
  691. * @ORM\PrePersist
  692. */
  693. public function setCreatedAtValue(): void
  694. {
  695. $this->setCreatedAt(new \DateTime("now"));
  696. $this->setUpdatedAt(new \DateTime("now"));
  697. }
  698. /**
  699. * @ORM\PreUpdate
  700. */
  701. public function setUpdatedAtValue(): void
  702. {
  703. $this->setUpdatedAt(new \DateTime("now"));
  704. }
  705. public function __toString()
  706. {
  707. return (string)$this->id;
  708. }
  709. /**
  710. * If manually uploading a file (i.e. not using Symfony Form) ensure an instance
  711. * of 'UploadedFile' is injected into this setter to trigger the update. If this
  712. * bundle's configuration parameter 'inject_on_load' is set to 'true' this setter
  713. * must be able to accept an instance of 'File' as the bundle will inject one here
  714. * during Doctrine hydration.
  715. *
  716. * @param File|UploadedFile|null $imageFile
  717. */
  718. public function setImageFile(?File $imageFile = null)
  719. {
  720. $this->imageFile = $imageFile;
  721. if (null !== $imageFile) {
  722. // It is required that at least one field changes if you are using doctrine
  723. // otherwise the event listeners won't be called and the file is lost
  724. $this->setUpdatedAt(new \DateTime("now"));
  725. }
  726. }
  727. public function getImageFile(): ?File
  728. {
  729. return $this->imageFile;
  730. }
  731. public function setImage(EmbeddedFile $image): void
  732. {
  733. $this->image = $image;
  734. }
  735. public function getImage(): ?EmbeddedFile
  736. {
  737. return $this->image;
  738. }
  739. public function getImageBase64(?string $projectDir = null): ?string
  740. {
  741. if (!$this->image || !$this->image->getName()) {
  742. return null;
  743. }
  744. if (!$projectDir) {
  745. return null; // ou throw new \Exception('Project dir required');
  746. }
  747. $filePath = $projectDir . '/files/cvs/' . $this->image->getName();
  748. if (!file_exists($filePath)) {
  749. return null;
  750. }
  751. $imageData = file_get_contents($filePath);
  752. $mimeType = $this->image->getMimeType() ?? mime_content_type($filePath);
  753. return 'data:' . $mimeType . ';base64,' . base64_encode($imageData);
  754. }
  755. public function getId(): ?int
  756. {
  757. return $this->id;
  758. }
  759. public function getCreatedAt(): ?\DateTimeInterface
  760. {
  761. return $this->createdAt;
  762. }
  763. public function setCreatedAt(?\DateTimeInterface $createdAt): self
  764. {
  765. $this->createdAt = $createdAt;
  766. return $this;
  767. }
  768. public function getUpdatedAt(): ?\DateTimeInterface
  769. {
  770. return $this->updatedAt;
  771. }
  772. public function setUpdatedAt(?\DateTimeInterface $updatedAt): self
  773. {
  774. $this->updatedAt = $updatedAt;
  775. return $this;
  776. }
  777. public function getPhone(): ?string
  778. {
  779. return $this->phone;
  780. }
  781. public function setPhone(?string $phone): self
  782. {
  783. $this->phone = $phone;
  784. return $this;
  785. }
  786. public function getEmail(): ?string
  787. {
  788. return $this->email;
  789. }
  790. public function setEmail(?string $email): self
  791. {
  792. $this->email = $email;
  793. return $this;
  794. }
  795. public function getAddress(): ?string
  796. {
  797. return $this->address;
  798. }
  799. public function setAddress(?string $address): self
  800. {
  801. $this->address = $address;
  802. return $this;
  803. }
  804. public function getCity(): ?string
  805. {
  806. return $this->city;
  807. }
  808. public function setCity(?string $city): self
  809. {
  810. $this->city = $city;
  811. return $this;
  812. }
  813. public function getZipcode(): ?string
  814. {
  815. return $this->zipcode;
  816. }
  817. public function setZipcode(?string $zipcode): self
  818. {
  819. $this->zipcode = $zipcode;
  820. return $this;
  821. }
  822. public function getCountry(): ?string
  823. {
  824. return $this->country;
  825. }
  826. public function setCountry(?string $country): self
  827. {
  828. $this->country = $country;
  829. return $this;
  830. }
  831. public function isAnonymous(): bool
  832. {
  833. return (bool) $this->anonymous;
  834. }
  835. public function setAnonymous(?bool $anonymous): self
  836. {
  837. $this->anonymous = (bool) $anonymous;
  838. return $this;
  839. }
  840. public function getSlug(): ?string
  841. {
  842. return $this->slug;
  843. }
  844. public function setSlug(?string $slug): self
  845. {
  846. $this->slug = $slug;
  847. return $this;
  848. }
  849. public function getAnonRef(): ?string
  850. {
  851. return $this->anonRef;
  852. }
  853. public function setAnonRef(?string $anonRef): self
  854. {
  855. $this->anonRef = $anonRef;
  856. return $this;
  857. }
  858. public function getPublicRef(): ?string
  859. {
  860. return $this->publicRef;
  861. }
  862. public function setPublicRef(?string $publicRef): self
  863. {
  864. $this->publicRef = $publicRef;
  865. return $this;
  866. }
  867. public function getPortfolioSlug(): ?string
  868. {
  869. return $this->portfolioSlug;
  870. }
  871. public function setPortfolioSlug(?string $slug): self
  872. {
  873. $this->portfolioSlug = $slug;
  874. return $this;
  875. }
  876. public function getPortfolioOnline(): ?bool
  877. {
  878. return $this->portfolioOnline;
  879. }
  880. public function setPortfolioOnline(?bool $v): self
  881. {
  882. $this->portfolioOnline = $v;
  883. return $this;
  884. }
  885. public function getSlugAnonyme(): ?string
  886. {
  887. return $this->slugAnonyme;
  888. }
  889. public function setSlugAnonyme(?string $slugAnonyme): self
  890. {
  891. $this->slugAnonyme = $slugAnonyme;
  892. return $this;
  893. }
  894. public function getTitleJob(): ?string
  895. {
  896. return $this->titleJob;
  897. }
  898. public function setTitleJob(?string $titleJob): self
  899. {
  900. $this->titleJob = $titleJob;
  901. return $this;
  902. }
  903. public function getDescription(): ?string
  904. {
  905. return $this->description;
  906. }
  907. public function setDescription(?string $description): self
  908. {
  909. $this->description = $description;
  910. return $this;
  911. }
  912. public function getWebsiteUrl(): ?string
  913. {
  914. return $this->websiteUrl;
  915. }
  916. public function setWebsiteUrl(?string $websiteUrl): self
  917. {
  918. $this->websiteUrl = $websiteUrl;
  919. return $this;
  920. }
  921. public function getLinkedinUrl(): ?string
  922. {
  923. return $this->linkedinUrl;
  924. }
  925. public function setLinkedinUrl(?string $linkedinUrl): self
  926. {
  927. $this->linkedinUrl = $linkedinUrl;
  928. return $this;
  929. }
  930. public function getSalary(): ?bool
  931. {
  932. return $this->salary;
  933. }
  934. public function setSalary(?bool $salary): self
  935. {
  936. $this->salary = $salary;
  937. return $this;
  938. }
  939. public function getFreelance(): ?bool
  940. {
  941. return $this->freelance;
  942. }
  943. public function setFreelance(?bool $freelance): self
  944. {
  945. $this->freelance = $freelance;
  946. return $this;
  947. }
  948. public function getOnSearch(): ?bool
  949. {
  950. return $this->onSearch;
  951. }
  952. public function setOnSearch(?bool $onSearch): self
  953. {
  954. $this->onSearch = $onSearch;
  955. return $this;
  956. }
  957. public function getOnDiscussion(): ?bool
  958. {
  959. return $this->onDiscussion;
  960. }
  961. public function setOnDiscussion(?bool $onDiscussion): self
  962. {
  963. $this->onDiscussion = $onDiscussion;
  964. return $this;
  965. }
  966. public function getNotifications(): ?bool
  967. {
  968. return $this->notifications;
  969. }
  970. public function setNotifications(?bool $notifications): self
  971. {
  972. $this->notifications = $notifications;
  973. return $this;
  974. }
  975. public function getOnline(): ?bool
  976. {
  977. return $this->online;
  978. }
  979. public function setOnline(?bool $online): self
  980. {
  981. $this->online = $online;
  982. return $this;
  983. }
  984. public function getOnlineClassic(): ?bool
  985. {
  986. return $this->onlineClassic;
  987. }
  988. public function setOnlineClassic(?bool $onlineClassic): self
  989. {
  990. $this->onlineClassic = $onlineClassic;
  991. return $this;
  992. }
  993. public function getInvitationCode(): ?string
  994. {
  995. return $this->invitationCode;
  996. }
  997. public function setInvitationCode(?string $invitationCode): self
  998. {
  999. $this->invitationCode = $invitationCode;
  1000. return $this;
  1001. }
  1002. public function getAgency(): ?Agencies
  1003. {
  1004. return $this->agency;
  1005. }
  1006. public function setAgency(?Agencies $agency): self
  1007. {
  1008. $this->agency = $agency;
  1009. return $this;
  1010. }
  1011. public function getFirst(): ?bool
  1012. {
  1013. return $this->first;
  1014. }
  1015. public function setFirst(?bool $first): self
  1016. {
  1017. $this->first = $first;
  1018. return $this;
  1019. }
  1020. public function getDescriptionAnonyme(): ?string
  1021. {
  1022. return $this->descriptionAnonyme;
  1023. }
  1024. public function setDescriptionAnonyme(?string $descriptionAnonyme): self
  1025. {
  1026. $this->descriptionAnonyme = $descriptionAnonyme;
  1027. return $this;
  1028. }
  1029. public function getDescriptionCover(): ?string
  1030. {
  1031. return $this->descriptionCover;
  1032. }
  1033. public function setDescriptionCover(?string $descriptionCover): self
  1034. {
  1035. $this->descriptionCover = $descriptionCover;
  1036. return $this;
  1037. }
  1038. public function getDescriptionCta(): ?string
  1039. {
  1040. return $this->descriptionCta;
  1041. }
  1042. public function setDescriptionCta(?string $descriptionCta): self
  1043. {
  1044. $this->descriptionCta = $descriptionCta;
  1045. return $this;
  1046. }
  1047. public function getDescriptionCoverAnonyme(): ?string
  1048. {
  1049. return $this->descriptionCoverAnonyme;
  1050. }
  1051. public function setDescriptionCoverAnonyme(?string $descriptionCoverAnonyme): self
  1052. {
  1053. $this->descriptionCoverAnonyme = $descriptionCoverAnonyme;
  1054. return $this;
  1055. }
  1056. public function getDescriptionCtaAnonyme(): ?string
  1057. {
  1058. return $this->descriptionCtaAnonyme;
  1059. }
  1060. public function setDescriptionCtaAnonyme(?string $descriptionCtaAnonyme): self
  1061. {
  1062. $this->descriptionCtaAnonyme = $descriptionCtaAnonyme;
  1063. return $this;
  1064. }
  1065. public function getDescriptionServices(): ?string
  1066. {
  1067. return $this->descriptionServices;
  1068. }
  1069. public function setDescriptionServices(?string $descriptionServices): self
  1070. {
  1071. $this->descriptionServices = $descriptionServices;
  1072. return $this;
  1073. }
  1074. public function getDescriptionServicesAnonyme(): ?string
  1075. {
  1076. return $this->descriptionServicesAnonyme;
  1077. }
  1078. public function setDescriptionServicesAnonyme(?string $descriptionServicesAnonyme): self
  1079. {
  1080. $this->descriptionServicesAnonyme = $descriptionServicesAnonyme;
  1081. return $this;
  1082. }
  1083. public function getDescriptionExperience(): ?string
  1084. {
  1085. return $this->descriptionExperience;
  1086. }
  1087. public function setDescriptionExperience(?string $descriptionExperience): self
  1088. {
  1089. $this->descriptionExperience = $descriptionExperience;
  1090. return $this;
  1091. }
  1092. public function getDescriptionExperienceAnonyme(): ?string
  1093. {
  1094. return $this->descriptionExperienceAnonyme;
  1095. }
  1096. public function setDescriptionExperienceAnonyme(?string $descriptionExperienceAnonyme): self
  1097. {
  1098. $this->descriptionExperienceAnonyme = $descriptionExperienceAnonyme;
  1099. return $this;
  1100. }
  1101. public function getInvitationCodeAnonyme(): ?string
  1102. {
  1103. return $this->invitationCodeAnonyme;
  1104. }
  1105. public function setInvitationCodeAnonyme(?string $invitationCodeAnonyme): self
  1106. {
  1107. $this->invitationCodeAnonyme = $invitationCodeAnonyme;
  1108. return $this;
  1109. }
  1110. public function getViews(): ?int
  1111. {
  1112. return $this->views;
  1113. }
  1114. public function setViews(?int $views): self
  1115. {
  1116. $this->views = $views;
  1117. return $this;
  1118. }
  1119. public function getViewsAnonyme(): ?int
  1120. {
  1121. return $this->viewsAnonyme;
  1122. }
  1123. public function setViewsAnonyme(?int $viewsAnonyme): self
  1124. {
  1125. $this->viewsAnonyme = $viewsAnonyme;
  1126. return $this;
  1127. }
  1128. public function getAlternance(): ?bool
  1129. {
  1130. return $this->alternance;
  1131. }
  1132. public function setAlternance(?bool $alternance): self
  1133. {
  1134. $this->alternance = $alternance;
  1135. return $this;
  1136. }
  1137. public function getStage(): ?bool
  1138. {
  1139. return $this->stage;
  1140. }
  1141. public function setStage(?bool $stage): self
  1142. {
  1143. $this->stage = $stage;
  1144. return $this;
  1145. }
  1146. public function getPerimeter(): ?string
  1147. {
  1148. return $this->perimeter;
  1149. }
  1150. public function setPerimeter(?string $perimeter): self
  1151. {
  1152. $this->perimeter = $perimeter;
  1153. return $this;
  1154. }
  1155. public function getPointX(): ?string
  1156. {
  1157. return $this->pointX;
  1158. }
  1159. public function setPointX(?string $pointX): self
  1160. {
  1161. $this->pointX = $pointX;
  1162. return $this;
  1163. }
  1164. public function getPointY(): ?string
  1165. {
  1166. return $this->pointY;
  1167. }
  1168. public function setPointY(?string $pointY): self
  1169. {
  1170. $this->pointY = $pointY;
  1171. return $this;
  1172. }
  1173. public function isSalary(): ?bool
  1174. {
  1175. return $this->salary;
  1176. }
  1177. public function isFreelance(): ?bool
  1178. {
  1179. return $this->freelance;
  1180. }
  1181. public function isAlternance(): ?bool
  1182. {
  1183. return $this->alternance;
  1184. }
  1185. public function isStage(): ?bool
  1186. {
  1187. return $this->stage;
  1188. }
  1189. public function isOnSearch(): ?bool
  1190. {
  1191. return $this->onSearch;
  1192. }
  1193. public function isOnDiscussion(): ?bool
  1194. {
  1195. return $this->onDiscussion;
  1196. }
  1197. public function isNotifications(): ?bool
  1198. {
  1199. return $this->notifications;
  1200. }
  1201. public function isOnline(): ?bool
  1202. {
  1203. return $this->online;
  1204. }
  1205. public function getExpYears(): ?int
  1206. {
  1207. return $this->expYears;
  1208. }
  1209. public function setExpYears(?int $expYears): static
  1210. {
  1211. $this->expYears = $expYears;
  1212. return $this;
  1213. }
  1214. public function isFirst(): ?bool
  1215. {
  1216. return $this->first;
  1217. }
  1218. public function isOnlineClassic(): ?bool
  1219. {
  1220. return $this->onlineClassic;
  1221. }
  1222. public function getVideoFrUrl(): ?string
  1223. {
  1224. return $this->videoFrUrl;
  1225. }
  1226. public function setVideoFrUrl(?string $videoFrUrl): static
  1227. {
  1228. $this->videoFrUrl = $videoFrUrl;
  1229. return $this;
  1230. }
  1231. public function getVideoEnUrl(): ?string
  1232. {
  1233. return $this->videoEnUrl;
  1234. }
  1235. public function setVideoEnUrl(?string $videoEnUrl): static
  1236. {
  1237. $this->videoEnUrl = $videoEnUrl;
  1238. return $this;
  1239. }
  1240. public function getAnalyse(): ?bool
  1241. {
  1242. return $this->analyse;
  1243. }
  1244. public function setAnalyse(?bool $analyse): self
  1245. {
  1246. $this->analyse = $analyse;
  1247. return $this;
  1248. }
  1249. public function getAnalyseLocale(): ?string
  1250. {
  1251. return $this->analyseLocale;
  1252. }
  1253. public function setAnalyseLocale(?string $analyseLocale): static
  1254. {
  1255. $this->analyseLocale = $analyseLocale;
  1256. return $this;
  1257. }
  1258. public function isAnalyse(): ?bool
  1259. {
  1260. return $this->analyse;
  1261. }
  1262. public function getAnalyseNote(): ?string
  1263. {
  1264. return $this->analyseNote;
  1265. }
  1266. public function setAnalyseNote(?string $analyseNote): static
  1267. {
  1268. $this->analyseNote = $analyseNote;
  1269. return $this;
  1270. }
  1271. public function getHardSkillsFr(): ?string
  1272. {
  1273. return $this->hardSkillsFr;
  1274. }
  1275. public function setHardSkillsFr(?string $hardSkillsFr): static
  1276. {
  1277. $this->hardSkillsFr = $hardSkillsFr;
  1278. return $this;
  1279. }
  1280. public function getHardSkillsEn(): ?string
  1281. {
  1282. return $this->hardSkillsEn;
  1283. }
  1284. public function setHardSkillsEn(?string $hardSkillsEn): static
  1285. {
  1286. $this->hardSkillsEn = $hardSkillsEn;
  1287. return $this;
  1288. }
  1289. public function getSoftSkillsEn(): ?string
  1290. {
  1291. return $this->softSkillsEn;
  1292. }
  1293. public function setSoftSkillsEn(?string $softSkillsEn): static
  1294. {
  1295. $this->softSkillsEn = $softSkillsEn;
  1296. return $this;
  1297. }
  1298. public function getSoftSkillsFr(): ?string
  1299. {
  1300. return $this->softSkillsFr;
  1301. }
  1302. public function setSoftSkillsFr(?string $softSkillsFr): static
  1303. {
  1304. $this->softSkillsFr = $softSkillsFr;
  1305. return $this;
  1306. }
  1307. public function getTagsFr(): ?string
  1308. {
  1309. return $this->tagsFr;
  1310. }
  1311. public function setTagsFr(?string $tagsFr): static
  1312. {
  1313. $this->tagsFr = $tagsFr;
  1314. return $this;
  1315. }
  1316. public function getTagsEn(): ?string
  1317. {
  1318. return $this->tagsEn;
  1319. }
  1320. public function setTagsEn(?string $tagsEn): static
  1321. {
  1322. $this->tagsEn = $tagsEn;
  1323. return $this;
  1324. }
  1325. public function getResumeRecruiterFr(): ?string
  1326. {
  1327. return $this->resumeRecruiterFr;
  1328. }
  1329. public function setResumeRecruiterFr(?string $resumeRecruiterFr): static
  1330. {
  1331. $this->resumeRecruiterFr = $resumeRecruiterFr;
  1332. return $this;
  1333. }
  1334. public function getResumeRecruiterEn(): ?string
  1335. {
  1336. return $this->resumeRecruiterEn;
  1337. }
  1338. public function setResumeRecruiterEn(?string $resumeRecruiterEn): static
  1339. {
  1340. $this->resumeRecruiterEn = $resumeRecruiterEn;
  1341. return $this;
  1342. }
  1343. public function getTitlejobFr(): ?string
  1344. {
  1345. return $this->titlejobFr;
  1346. }
  1347. public function setTitlejobFr(?string $titlejobFr): static
  1348. {
  1349. $this->titlejobFr = $titlejobFr;
  1350. return $this;
  1351. }
  1352. public function getTitlejobEn(): ?string
  1353. {
  1354. return $this->titlejobEn;
  1355. }
  1356. public function setTitlejobEn(?string $titlejobEn): static
  1357. {
  1358. $this->titlejobEn = $titlejobEn;
  1359. return $this;
  1360. }
  1361. public function getPresentationFr(): ?string
  1362. {
  1363. return $this->presentationFr;
  1364. }
  1365. public function setPresentationFr(?string $presentation_fr): static
  1366. {
  1367. $this->presentationFr = $presentation_fr;
  1368. return $this;
  1369. }
  1370. public function getPresentationEn(): ?string
  1371. {
  1372. return $this->presentationEn;
  1373. }
  1374. public function setPresentationEn(?string $presentation_en): static
  1375. {
  1376. $this->presentationEn = $presentation_en;
  1377. return $this;
  1378. }
  1379. public function getFuturTitlejobFr(): ?string
  1380. {
  1381. return $this->futurTitlejobFr;
  1382. }
  1383. public function setFuturTitlejobFr(?string $futurTitlejobFr): static
  1384. {
  1385. $this->futurTitlejobFr = $futurTitlejobFr;
  1386. return $this;
  1387. }
  1388. public function getFuturTitlejobEn(): ?string
  1389. {
  1390. return $this->futurTitlejobEn;
  1391. }
  1392. public function setFuturTitlejobEn(?string $futurTitlejobEn): static
  1393. {
  1394. $this->futurTitlejobEn = $futurTitlejobEn;
  1395. return $this;
  1396. }
  1397. public function getSectorEn(): ?string
  1398. {
  1399. return $this->sectorEn;
  1400. }
  1401. public function setSectorEn(?string $sectorEn): static
  1402. {
  1403. $this->sectorEn = $sectorEn;
  1404. return $this;
  1405. }
  1406. public function getSectorFr(): ?string
  1407. {
  1408. return $this->sectorFr;
  1409. }
  1410. public function setSectorFr(?string $sectorFr): static
  1411. {
  1412. $this->sectorFr = $sectorFr;
  1413. return $this;
  1414. }
  1415. public function isFrench(): ?bool
  1416. {
  1417. return $this->french;
  1418. }
  1419. public function setFrench(?bool $french): static
  1420. {
  1421. $this->french = $french;
  1422. return $this;
  1423. }
  1424. public function isEnglish(): ?bool
  1425. {
  1426. return $this->english;
  1427. }
  1428. public function setEnglish(?bool $english): static
  1429. {
  1430. $this->english = $english;
  1431. return $this;
  1432. }
  1433. public function getDefaultLocale(): ?string
  1434. {
  1435. return $this->defaultLocale;
  1436. }
  1437. public function setDefaultLocale(?string $defaultLocale): static
  1438. {
  1439. $this->defaultLocale = $defaultLocale;
  1440. return $this;
  1441. }
  1442. public function isDefault(): ?bool
  1443. {
  1444. return $this->default;
  1445. }
  1446. public function setDefault(?bool $default): static
  1447. {
  1448. $this->default = $default;
  1449. return $this;
  1450. }
  1451. public function getHardSkillsDefault(): ?string
  1452. {
  1453. return $this->hardSkillsDefault;
  1454. }
  1455. public function setHardSkillsDefault(?string $hardSkillsDefault): static
  1456. {
  1457. $this->hardSkillsDefault = $hardSkillsDefault;
  1458. return $this;
  1459. }
  1460. public function getSoftSkillsDefault(): ?string
  1461. {
  1462. return $this->softSkillsDefault;
  1463. }
  1464. public function setSoftSkillsDefault(?string $softSkillsDefault): static
  1465. {
  1466. $this->softSkillsDefault = $softSkillsDefault;
  1467. return $this;
  1468. }
  1469. public function getTagsDefault(): ?string
  1470. {
  1471. return $this->tagsDefault;
  1472. }
  1473. public function setTagsDefault(?string $tagsDefault): static
  1474. {
  1475. $this->tagsDefault = $tagsDefault;
  1476. return $this;
  1477. }
  1478. public function getResumeRecruiterDefault(): ?string
  1479. {
  1480. return $this->resumeRecruiterDefault;
  1481. }
  1482. public function setResumeRecruiterDefault(?string $resumeRecruiterDefault): static
  1483. {
  1484. $this->resumeRecruiterDefault = $resumeRecruiterDefault;
  1485. return $this;
  1486. }
  1487. public function getTitlejobDefault(): ?string
  1488. {
  1489. return $this->titlejobDefault;
  1490. }
  1491. public function setTitlejobDefault(?string $titlejobDefault): static
  1492. {
  1493. $this->titlejobDefault = $titlejobDefault;
  1494. return $this;
  1495. }
  1496. public function getPresentationDefault(): ?string
  1497. {
  1498. return $this->presentationDefault;
  1499. }
  1500. public function setPresentationDefault(?string $presentationDefault): static
  1501. {
  1502. $this->presentationDefault = $presentationDefault;
  1503. return $this;
  1504. }
  1505. public function getFuturTitlejobDefault(): ?string
  1506. {
  1507. return $this->futurTitlejobDefault;
  1508. }
  1509. public function setFuturTitlejobDefault(?string $futurTitlejobDefault): static
  1510. {
  1511. $this->futurTitlejobDefault = $futurTitlejobDefault;
  1512. return $this;
  1513. }
  1514. public function getSectorDefault(): ?string
  1515. {
  1516. return $this->sectorDefault;
  1517. }
  1518. public function setSectorDefault(?string $sectorDefault): static
  1519. {
  1520. $this->sectorDefault = $sectorDefault;
  1521. return $this;
  1522. }
  1523. public function getVideoDefaultUrl(): ?string
  1524. {
  1525. return $this->videoDefaultUrl;
  1526. }
  1527. public function setVideoDefaultUrl(?string $videoDefaultUrl): static
  1528. {
  1529. $this->videoDefaultUrl = $videoDefaultUrl;
  1530. return $this;
  1531. }
  1532. public function getStatusSearch(): ?string
  1533. {
  1534. return $this->statusSearch;
  1535. }
  1536. public function setStatusSearch(?string $statusSearch): static
  1537. {
  1538. $this->statusSearch = $statusSearch;
  1539. return $this;
  1540. }
  1541. public function getAvailability(): ?string
  1542. {
  1543. return $this->availability;
  1544. }
  1545. public function setAvailability(?string $availability): static
  1546. {
  1547. $this->availability = $availability;
  1548. return $this;
  1549. }
  1550. public function getResumeProjectsFr(): ?string
  1551. {
  1552. return $this->resumeProjectsFr;
  1553. }
  1554. public function setResumeProjectsFr(?string $resumeProjectsFr): static
  1555. {
  1556. $this->resumeProjectsFr = $resumeProjectsFr;
  1557. return $this;
  1558. }
  1559. public function getResumeProjectsEn(): ?string
  1560. {
  1561. return $this->resumeProjectsEn;
  1562. }
  1563. public function setResumeProjectsEn(?string $resumeProjectsEn): static
  1564. {
  1565. $this->resumeProjectsEn = $resumeProjectsEn;
  1566. return $this;
  1567. }
  1568. public function getResumeProjectsDefault(): ?string
  1569. {
  1570. return $this->resumeProjectsDefault;
  1571. }
  1572. public function setResumeProjectsDefault(?string $resumeProjectsDefault): static
  1573. {
  1574. $this->resumeProjectsDefault = $resumeProjectsDefault;
  1575. return $this;
  1576. }
  1577. public function getResumeExpFr(): ?string
  1578. {
  1579. return $this->resumeExpFr;
  1580. }
  1581. public function setResumeExpFr(?string $resumeExpFr): static
  1582. {
  1583. $this->resumeExpFr = $resumeExpFr;
  1584. return $this;
  1585. }
  1586. public function getResumeExpEn(): ?string
  1587. {
  1588. return $this->resumeExpEn;
  1589. }
  1590. public function setResumeExpEn(?string $resumeExpEn): static
  1591. {
  1592. $this->resumeExpEn = $resumeExpEn;
  1593. return $this;
  1594. }
  1595. public function getResumeExpDefault(): ?string
  1596. {
  1597. return $this->resumeExpDefault;
  1598. }
  1599. public function setResumeExpDefault(?string $resumeExpDefault): static
  1600. {
  1601. $this->resumeExpDefault = $resumeExpDefault;
  1602. return $this;
  1603. }
  1604. public function getFormAiAnalysis(): ?string
  1605. {
  1606. return $this->formAiAnalysis;
  1607. }
  1608. public function setFormAiAnalysis(?string $formAiAnalysis): self
  1609. {
  1610. $this->formAiAnalysis = $formAiAnalysis;
  1611. return $this;
  1612. }
  1613. public function getFormAiAnalysisStatus(): ?string
  1614. {
  1615. return $this->formAiAnalysisStatus;
  1616. }
  1617. public function setFormAiAnalysisStatus(?string $status): self
  1618. {
  1619. $this->formAiAnalysisStatus = $status;
  1620. return $this;
  1621. }
  1622. public function getFormAiAnalysisUpdatedAt(): ?\DateTimeInterface
  1623. {
  1624. return $this->formAiAnalysisUpdatedAt;
  1625. }
  1626. public function setFormAiAnalysisUpdatedAt(?\DateTimeInterface $d): self
  1627. {
  1628. $this->formAiAnalysisUpdatedAt = $d;
  1629. return $this;
  1630. }
  1631. public function getCvData(): ?string
  1632. {
  1633. return $this->cvData;
  1634. }
  1635. public function setCvData(?string $cvData): self
  1636. {
  1637. $this->cvData = $cvData;
  1638. return $this;
  1639. }
  1640. public function getCvSettings(): ?string
  1641. {
  1642. return $this->cvSettings;
  1643. }
  1644. public function setCvSettings(?string $cvSettings): self
  1645. {
  1646. $this->cvSettings = $cvSettings;
  1647. return $this;
  1648. }
  1649. public function getCvPdfPath(): ?string
  1650. {
  1651. return $this->cvPdfPath;
  1652. }
  1653. public function setCvPdfPath(?string $cvPdfPath): self
  1654. {
  1655. $this->cvPdfPath = $cvPdfPath;
  1656. return $this;
  1657. }
  1658. }