Compare commits
191 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 2491b253c6 | |||
| df3bb979e9 | |||
| bc75bb7afc | |||
| ef5f0e81da | |||
| 88ceb319af | |||
| f314a614fe | |||
| b19498ef46 | |||
| 6313039500 | |||
| f098e4b6b8 | |||
| ed70e8c940 | |||
| 9762aee7ae | |||
| d0fd19d760 | |||
| 3ccf2b9604 | |||
| babfa473fb | |||
| 0bcd46fde8 | |||
| c976bb6d21 | |||
| d301c3b029 | |||
| c5a1aebecc | |||
| e516e45cb0 | |||
| 441304c363 | |||
| 3399a82379 | |||
| 4e111ae3cd | |||
| ed669974a1 | |||
| 02c68a48c9 | |||
| cce45d834f | |||
| 0373f01013 | |||
| cbcf51f93d | |||
| dffb439bb3 | |||
| 4b2c5fc222 | |||
| 13073d59e4 | |||
| 8e995cef82 | |||
| 349bc309bd | |||
| 492d2687c5 | |||
| 2fa50e3d5b | |||
| e6e00c1659 | |||
| db7cc56e3a | |||
| 7b5e7bc53a | |||
| 0d7c6466ec | |||
| 27ecf6f81c | |||
| 55eb1ed363 | |||
| 6ddf703f9e | |||
| 6f8671bc8f | |||
| 68802a2a4d | |||
| ceb2f7f7ce | |||
| 4da427bac0 | |||
| 766e57e849 | |||
| 3c3b8c8428 | |||
| 49d47b70f6 | |||
| 49cc496661 | |||
| 717e57dc81 | |||
| 9e7ef88bea | |||
| a46d69f190 | |||
| 3f7c0803f1 | |||
| c99b3d2236 | |||
| 580bf6ecb4 | |||
| 26a41d4eb6 | |||
| 82bf5fa76f | |||
| 3fb8262649 | |||
| feca14ae4d | |||
| 33c1221cb2 | |||
| f4f9191bd1 | |||
| 9709b69125 | |||
| 6f19c7df97 | |||
| 7779cdbf66 | |||
| 95d58a14e0 | |||
| f8db5a4b1c | |||
| ca23af2623 | |||
| b13ebb9d0f | |||
| b54d162032 | |||
| 78c15596cd | |||
| 74f9c7b884 | |||
| 76f557501e | |||
| 5bb76aa419 | |||
| 2eb399776b | |||
| 8986ae738a | |||
| d5532926aa | |||
| 7dfaf01705 | |||
| 1707d28fc7 | |||
| a4631872e0 | |||
| ddc6b18d0a | |||
| 39143908af | |||
| 6033516273 | |||
| b2b075ffe7 | |||
| 73a44a011d | |||
| 91c7ebb145 | |||
| 57299b841e | |||
| 66e5fd4c6c | |||
| 80f8ad7043 | |||
| fb11613b7c | |||
| e13ef32197 | |||
| e70c1c7f5e | |||
| 0c9c4f0fc2 | |||
| 5cd78b272a | |||
| e1c3f77e68 | |||
| 14cc09b25f | |||
| f3597146ad | |||
| f52f49ce9a | |||
| 0b6a04e8d0 | |||
| 0dfc9af863 | |||
| fc548bc74c | |||
| 5d78b30bef | |||
| 7372b03e5c | |||
| eadb2a397f | |||
| bdbe45e1a2 | |||
| 66af01c050 | |||
| 6f5118e500 | |||
| a38b63f87f | |||
| 85abb49683 | |||
| 6fb0ad4d40 | |||
| 1ab9cf6703 | |||
| e8ab042fe5 | |||
| 009bea43ef | |||
| 0abfa0dca8 | |||
| 7510b8022a | |||
| 69e6f6c16b | |||
| 4981a3d310 | |||
| 13ec5f3d34 | |||
| a08b13591a | |||
| a470518403 | |||
| 64e76b29f5 | |||
| 983e0b03be | |||
| 45cb8896de | |||
| 9bf7065984 | |||
| 243d1e3945 | |||
| 16951ee895 | |||
| e5ce4c7127 | |||
| 18c12c3b3a | |||
| 13adc1b87c | |||
| 75e0f4b99e | |||
| 9d659eea7e | |||
| 8a987d48c1 | |||
| e6d9c72f62 | |||
| a92ab7f3cc | |||
| d1c37dfd23 | |||
| a9b16a7a84 | |||
| 962b9f0633 | |||
| d413fee495 | |||
| 058763fdbb | |||
| b19184b11b | |||
| 642958639c | |||
| 353151a440 | |||
| 4bb64ce3e2 | |||
| c9d52ed240 | |||
| 0c808e2513 | |||
| 7e22a202c2 | |||
| 8907b9232a | |||
| 1f588171ef | |||
| 681e5add11 | |||
| 16145c81c0 | |||
| 8a3f502129 | |||
| aad4dcb110 | |||
| 129dd22cbb | |||
| 2387b1c922 | |||
| c43a7655e7 | |||
| 55e8eaf6cd | |||
| db9f554792 | |||
| 820cc048eb | |||
| 1c99889e89 | |||
| 552c9ecf9e | |||
| 8bb8afbee7 | |||
| daee96533d | |||
| c09f6f0b62 | |||
| 7494173cde | |||
| 0dcc5111f4 | |||
| 4cdd9dc256 | |||
| 2a2ef6673d | |||
| 00f38cf4f7 | |||
| f3d618b640 | |||
| 5ab04175b8 | |||
| ce3eda07b4 | |||
| 3b4ebf343a | |||
| c9b4a2b30f | |||
| acb87af087 | |||
| 8a14b86f03 | |||
| c05edac0fd | |||
| 7a2be30f15 | |||
| e183729687 | |||
| ce498eb526 | |||
| 4d09bf2ddf | |||
| d8ee626298 | |||
| 50e9f45369 | |||
| c9663ab0d9 | |||
| 33fc07121b | |||
| a71e6692a6 | |||
| 2ef6707342 | |||
| 728f16ee06 | |||
| 05d9bcced2 | |||
| 7d2f3353eb | |||
| 5d4249984d | |||
| d7114a0219 | |||
| 672d2148c2 |
@@ -0,0 +1,13 @@
|
||||
version: '3'
|
||||
|
||||
services:
|
||||
nginx:
|
||||
networks:
|
||||
- default
|
||||
- frontnginx_front
|
||||
|
||||
networks:
|
||||
default:
|
||||
driver: bridge
|
||||
frontnginx_front:
|
||||
external: true
|
||||
@@ -1,44 +1,22 @@
|
||||
|
||||
upstream website_php-preprod {
|
||||
server tt.website-preprod:9000;
|
||||
server tt-website.php.preprod:9000;
|
||||
}
|
||||
|
||||
upstream store_php-preprod {
|
||||
server tt.store-preprod:9000;
|
||||
server tt-website.store-php.preprod:9000;
|
||||
}
|
||||
|
||||
server {
|
||||
listen 80;
|
||||
server_name pp.talentstube.com;
|
||||
return 301 https://pp.talentstube.com$request_uri;
|
||||
}
|
||||
|
||||
server {
|
||||
listen 443 ssl http2;
|
||||
listen 80;
|
||||
server_name pp.talentstube.com;
|
||||
|
||||
client_max_body_size 500M;
|
||||
root /home/www/website/www/web;
|
||||
|
||||
root /home/www/pp.talentstube.com/www/web;
|
||||
access_log /home/www/website/log/access.log vhosts;
|
||||
error_log /home/www/website/log/error.log;
|
||||
|
||||
access_log /home/www/pp.talentstube.com/log/access.log vhosts;
|
||||
error_log /home/www/pp.talentstube.com/log/error.log;
|
||||
|
||||
ssl on;
|
||||
ssl_certificate /etc/ssl/private/talentstube.com.chain.crt;
|
||||
ssl_certificate_key /etc/ssl/private/talentstube.com.key;
|
||||
|
||||
ssl_session_timeout 24h;
|
||||
ssl_session_cache shared:SSL:10m;
|
||||
|
||||
ssl_dhparam /etc/ssl/dhparam.pem;
|
||||
|
||||
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
|
||||
ssl_ciphers 'ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA';
|
||||
ssl_prefer_server_ciphers on;
|
||||
|
||||
location / {
|
||||
# try to serve file directly, fallback to app.php
|
||||
try_files $uri /app.php$is_args$args;
|
||||
}
|
||||
|
||||
@@ -85,7 +63,7 @@ server {
|
||||
# ---- PRESTASHOP ----
|
||||
location ^~ /store/ {
|
||||
|
||||
root /home/www/pp.talentstube.com;
|
||||
root /home/www/website;
|
||||
index index.php;
|
||||
try_files $uri $uri/ /www/index.php;
|
||||
|
||||
@@ -115,6 +93,6 @@ server {
|
||||
|
||||
sendfile off;
|
||||
|
||||
include /home/www/pp.talentstube.com/conf/redirect.conf;
|
||||
include /home/www/pp.talentstube.com/conf/expires.conf;
|
||||
include /home/www/website/conf/redirect.conf;
|
||||
include /home/www/website/conf/expires.conf;
|
||||
}
|
||||
|
||||
@@ -11,4 +11,5 @@ rewrite ^/page/presentation-talent$ https://www.talentstube.com/cv-video perma
|
||||
rewrite ^/page/la-plateforme$ https://www.talentstube.com/ permanent;
|
||||
rewrite ^/tarifs$ https://www.talentstube.com/accompagnement-entreprise permanent;
|
||||
rewrite ^/annonce/38-charge-de-projets-developpement-h-f$ https://www.talentstube.com/annonce/38-charge-de-projets-developpement-cosmetique-h-f permanent;
|
||||
rewrite ^/annonce/recherche/$ https://www.talentstube.com/annonce/recherche permanent;
|
||||
rewrite ^/annonce/recherche/$ https://www.talentstube.com/annonce/recherche permanent;
|
||||
rewrite ^/territoire/1573-communaute-d-agglomeration-castres-mazamet/$ https://www.talentstube.com/territoire/1573-castres-mazamet/ permanent;
|
||||
+1
-1
@@ -15,7 +15,7 @@
|
||||
</p>
|
||||
{% endif %}
|
||||
<br/><br/>
|
||||
{% if app.request.cookies.get('redirect_register')is defined %}
|
||||
{% if app.request.cookies.get('redirect_register') is defined and app.request.cookies.get('redirect_register') is not null %}
|
||||
<div class="center">
|
||||
<a href="{{ app.request.cookies.get('redirect_register') }}" class="btn btn-default">Poursuivre votre candidature</a>
|
||||
</div>
|
||||
|
||||
+14
-7
@@ -9,13 +9,20 @@
|
||||
{% set text_accept_button = fairlane_cookie_consent.twig.text_accept_button %}
|
||||
{% endif %}
|
||||
<div id="fairlane-cookie-consent" {% if fairlane_cookie_consent.useBootstrap == true %}class="navbar navbar-fixed-top"{% endif %}>
|
||||
<p>
|
||||
{{ text_info }}
|
||||
{% if fairlane_cookie_consent.twig.url_additional_info| length > 1 and text_additional_info_link | length > 1 %}
|
||||
<a href="{{ fairlane_cookie_consent.twig.url_additional_info }}" target="_blank">{{ text_additional_info_link }}</a>
|
||||
{% endif %}
|
||||
</p>
|
||||
<button class="btn btn-default">{{ text_accept_button }}</button>
|
||||
<div class="container">
|
||||
<div class="row">
|
||||
<div class="col s8">
|
||||
<p>{{ text_info }}
|
||||
{% if fairlane_cookie_consent.twig.url_additional_info| length > 1 and text_additional_info_link | length > 1 %}
|
||||
<a href="{{ fairlane_cookie_consent.twig.url_additional_info }}" target="_blank">{{ text_additional_info_link }}</a>
|
||||
{% endif %}
|
||||
</p>
|
||||
</div>
|
||||
<div class="col s4">
|
||||
<button class="btn btn-default">{{ text_accept_button }}</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{% if fairlane_cookie_consent.useJquery %}
|
||||
<script type="text/javascript">
|
||||
|
||||
@@ -59,6 +59,34 @@
|
||||
<trans-unit id="DECLINED">
|
||||
<source>DECLINED</source>
|
||||
<target>Refusée</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="NEW">
|
||||
<source>NEW</source>
|
||||
<target>Nouveau</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="VIEWED">
|
||||
<source>VIEWED</source>
|
||||
<target>Visionnée</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="NEGATIVE">
|
||||
<source>NEGATIVE</source>
|
||||
<target>Négatif</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="POSITIVE">
|
||||
<source>POSITIVE</source>
|
||||
<target>Positif</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="INFOS">
|
||||
<source>INFOS</source>
|
||||
<target>Demande d’informations</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="CONTACTED">
|
||||
<source>CONTACTED</source>
|
||||
<target>Demande d’informations</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="CONTACTED.RDV">
|
||||
<source>CONTACTED.RDV</source>
|
||||
<target>Convocation entretien</target>
|
||||
</trans-unit>
|
||||
<!-- MENU COMPANY-->
|
||||
<trans-unit id="profile.territory.brandname">
|
||||
@@ -79,7 +107,11 @@
|
||||
</trans-unit>
|
||||
<trans-unit id="company.menu.ads.label">
|
||||
<source>company.menu.ads.label</source>
|
||||
<target>Mes annonces</target>
|
||||
<target>Espace offres d'emploi</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="company.title.ads.label">
|
||||
<source>company.title.ads.label</source>
|
||||
<target>Mes offres d'emploi</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="company.menu.bookmark.label">
|
||||
<source>company.menu.bookmark.label</source>
|
||||
@@ -87,7 +119,11 @@
|
||||
</trans-unit>
|
||||
<trans-unit id="company.menu.answers.label">
|
||||
<source>company.menu.answers.label</source>
|
||||
<target>Réponses</target>
|
||||
<target>Candidatures</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="company.menu.spontaneous.label">
|
||||
<source>company.menu.spontaneous.label</source>
|
||||
<target>Candidatures spontanées</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="company.menu.videotheque.label">
|
||||
<source>company.menu.videotheque.label</source>
|
||||
@@ -133,6 +169,10 @@
|
||||
<trans-unit id="profile.edit.submit">
|
||||
<source>profile.edit.submit</source>
|
||||
<target>Sauvegarder mon profil</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="profile.edit.save">
|
||||
<source>profile.edit.save</source>
|
||||
<target>Enregistrer</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="profile.company.title">
|
||||
<source>profile.company.title</source>
|
||||
@@ -190,10 +230,34 @@
|
||||
<source>profile.company.logo</source>
|
||||
<target>Logo de l'entreprise</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="talent.profile.title.label">
|
||||
<source>talent.profile.title.label</source>
|
||||
<target>Titre de votre profil</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="talent.profile.situation.label">
|
||||
<source>talent.profile.situation.label</source>
|
||||
<target>Votre situation</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="talent.profile.description.label">
|
||||
<source>talent.profile.description.label</source>
|
||||
<target>Quelques mots sur vous</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="profile.talent.tags">
|
||||
<source>profile.talent.tags</source>
|
||||
<target>Vos compétences.</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="profile.talent.under.tags">
|
||||
<source>profile.talent.under.tags</source>
|
||||
<target>Définissez vos clés dans l’ordre d’importance. Vous pouvez indiquer jusqu’à 50 compétences.</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="talent.menu.dashboard.label">
|
||||
<source>talent.menu.dashboard.label</source>
|
||||
<target>Mon profil</target>
|
||||
</trans-unit>
|
||||
<!-- ANNONCE-->
|
||||
<trans-unit id="ad.company.add.label">
|
||||
<source>ad.company.add.label</source>
|
||||
<target>Ajouter une annonce</target>
|
||||
<target>Ajouter une offre</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="ad.company.video.edit.label">
|
||||
<source>ad.company.video.edit.label</source>
|
||||
@@ -233,7 +297,7 @@
|
||||
</trans-unit>
|
||||
<trans-unit id="ad.company.list.status">
|
||||
<source>ad.company.list.status</source>
|
||||
<target>Statuts</target>
|
||||
<target>Statut</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="ad.save.extension.title">
|
||||
<source>ad.save.extension.title</source>
|
||||
@@ -260,6 +324,90 @@
|
||||
<trans-unit id="profile.talent.account.title">
|
||||
<source>profile.talent.account.title</source>
|
||||
<target>Informations de compte</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="talent.menu.answers.label">
|
||||
<source>talent.menu.answers.label</source>
|
||||
<target>Mes candidatures</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="talent.menu.recommandations.label">
|
||||
<source>talent.menu.recommandations.label</source>
|
||||
<target>Mes recommandations</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="talent.profile.career.company.label">
|
||||
<source>talent.profile.career.company.label</source>
|
||||
<target>Entreprise</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="talent.profile.career.job.label">
|
||||
<source>talent.profile.career.job.label</source>
|
||||
<target>Intitulé du poste</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="talent.profile.career.begin.label">
|
||||
<source>talent.profile.career.begin.label</source>
|
||||
<target>Début</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="talent.profile.career.end.label">
|
||||
<source>talent.profile.career.end.label</source>
|
||||
<target>Fin</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="talent.profile.career.skills.label">
|
||||
<source>talent.profile.career.skills.label</source>
|
||||
<target>Vos compétences</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="talent.profile.career.actualJob.label">
|
||||
<source>talent.profile.career.actualJob.label</source>
|
||||
<target>Toujours en poste</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="talent.profile.career.place.label">
|
||||
<source>talent.profile.career.place.label</source>
|
||||
<target>Lieux</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="talent.profile.formation.name.label">
|
||||
<source>talent.profile.formation.name.label</source>
|
||||
<target>Diplome</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="talent.profile.formation.school.label">
|
||||
<source>talent.profile.formation.school.label</source>
|
||||
<target>Ecole</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="talent.profile.formation.actual.label">
|
||||
<source>talent.profile.formation.actual.label</source>
|
||||
<target>Toujours en cours</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="talent.profile.formation.obtention.label">
|
||||
<source>talent.profile.formation.obtention.label</source>
|
||||
<target>Année d'obtention</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="talent.profile.language.skill.1.label">
|
||||
<source>talent.profile.language.skill.1.label</source>
|
||||
<target>Notions</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="talent.profile.language.skill.2.label">
|
||||
<source>talent.profile.language.skill.2.label</source>
|
||||
<target>Compétence professionnelle limitée</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="talent.profile.language.skill.3.label">
|
||||
<source>talent.profile.language.skill.3.label</source>
|
||||
<target>Compétence professionnelle complète</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="talent.profile.language.skill.4.label">
|
||||
<source>talent.profile.language.skill.4.label</source>
|
||||
<target>Bilingue ou natif</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="talent.profile.language.name.label">
|
||||
<source>talent.profile.language.name.label</source>
|
||||
<target>Langue</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="talent.profile.situation.1.label">
|
||||
<source>talent.profile.situation.1.label</source>
|
||||
<target>En recherche d’emploi</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="talent.profile.situation.2.label">
|
||||
<source>talent.profile.situation.2.label</source>
|
||||
<target>À l’écoute d’opportunités</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="talent.profile.situation.3.label">
|
||||
<source>talent.profile.situation.3.label</source>
|
||||
<target>En poste</target>
|
||||
</trans-unit>
|
||||
<!-- TALENT -->
|
||||
<trans-unit id="ad.talent.answer.label">
|
||||
@@ -394,7 +542,134 @@
|
||||
|
||||
Talents Tube
|
||||
</target>
|
||||
</trans-unit>
|
||||
</trans-unit>
|
||||
<!-- Recommendations -->
|
||||
<trans-unit id="label.recommendations">
|
||||
<source>label.recommendations</source>
|
||||
<target>Recommandations</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="label.button.recommendation">
|
||||
<source>label.button.recommendation</source>
|
||||
<target>Je recommande</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="label.link.readmore">
|
||||
<source>label.link.readmore</source>
|
||||
<target>Lire la suite</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="label.choice.imtheboss">
|
||||
<source>label.choice.imtheboss</source>
|
||||
<target>%{name} était sous votre responsabilité</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="label.choice.sheistheboss">
|
||||
<source>label.choice.sheistheboss</source>
|
||||
<target>Vous étiez sous la responsabilité de %{name} </target>
|
||||
</trans-unit>
|
||||
<trans-unit id="label.choice.sheismyscollege">
|
||||
<source>label.choice.sheismyscollege</source>
|
||||
<target>Vous avez travaillé avec %{name} dans la même entreprise</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="label.front.imtheboss">
|
||||
<source>label.front.imtheboss</source>
|
||||
<target>%{name2} était responsable de %{name}</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="label.front.sheistheboss">
|
||||
<source>label.front.sheistheboss</source>
|
||||
<target>%{name2} était sous la responsabilité de %{name}</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="label.front.sheismyscollege">
|
||||
<source>label.front.sheismyscollege</source>
|
||||
<target>%{name} et %{name2} étaient collègues</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="recommendation.email.message.html">
|
||||
<source>recommendation.email.message.html</source>
|
||||
<target><![CDATA[
|
||||
<div style="margin:0 auto;max-width:600px;background:#FFFFFF;"><table class="" cellpadding="0" cellspacing="0" style="width:100%;font-size:0px;background:#FFFFFF;" align="center"><tbody><tr><td style="text-align:center;vertical-align:top;font-size:0;padding:0px;"><!--[if mso]>
|
||||
<table border="0" cellpadding="0" cellspacing="0"><tr><td style="width:600px;">
|
||||
<![endif]--><div style="vertical-align:top;display:inline-block;font-size:13px;text-align:left;width:100%;" class="mj-column-per-100" aria-labelledby="mj-column-per-100"><table width="100%"><tbody><tr><td style="font-size:0;padding:40px 35px 20px 35px;" align="left"><div class="mj-content" style="cursor:auto;color:#534F4F;font-family:Trebuchet,Helvetica,sans-serif;font-size:14px;line-height:22px;"><p>Bonjour %firstname% %lastname%,</p>
|
||||
<p>Vous avez reçu une recommandation vidéo de %firstname_sender% %lastname_sender%.</p>
|
||||
<p>La recommandation est inactive par défaut, vous pouvez l’activer dans votre espace recommandations.</p>
|
||||
</div></td></tr></tbody></table></div><!--[if mso]>
|
||||
</td></tr></table>
|
||||
<![endif]--></td></tr></tbody></table></div>
|
||||
<div style="margin:0 auto;max-width:600px;background:#FFFFFF;"><table class="" cellpadding="0" cellspacing="0" style="width:100%;font-size:0px;background:#FFFFFF;" align="center"><tbody><tr><td style="text-align:center;vertical-align:top;font-size:0;padding:0px;"><!--[if mso]>
|
||||
<table border="0" cellpadding="0" cellspacing="0"><tr><td style="width:600px;">
|
||||
<![endif]--><div style="vertical-align:top;display:inline-block;font-size:13px;text-align:left;width:100%;" class="mj-column-per-100" aria-labelledby="mj-column-per-100"><table width="100%"><tbody><tr><td style="font-size:0;padding:15px 30px;" align="center"><table cellpadding="0" cellspacing="0" style="border:none;border-radius:30px;" align="center"><tbody><tr><td style="background:#1689FB;border-radius:30px;color:#FFFFFF;cursor:auto;" align="center" valign="middle" bgcolor="#1689FB"><a class="mj-content" href="%recommendationUrl%" style="display:inline-block;text-decoration:none;background:#1689FB;border:1px solid #1689FB;border-radius:30px;color:#FFFFFF;font-family:Trebuchet,Helvetica,sans-serif;font-size:14px;font-weight:normal;padding:15px 30px;" target="_blank">Voir la recommandation</a></td></tr></tbody></table></td></tr></tbody></table></div><!--[if mso]>
|
||||
</td></tr></table>
|
||||
]]>
|
||||
</target>
|
||||
</trans-unit>
|
||||
<!-- Dashboard -->
|
||||
<trans-unit id="global.datereception.label">
|
||||
<source>global.datereception.label</source>
|
||||
<target>Date de reception </target>
|
||||
</trans-unit>
|
||||
<!-- Réponse en vidéo -->
|
||||
<trans-unit id="label.message">
|
||||
<source>label.message</source>
|
||||
<target>MESSAGE : </target>
|
||||
</trans-unit>
|
||||
<trans-unit id="label.noMessage">
|
||||
<source>label.noMessage</source>
|
||||
<target>Aucun message</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="label.offers">
|
||||
<source>label.offers</source>
|
||||
<target>Offres d'emploi</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="label.answer">
|
||||
<source>label.answer</source>
|
||||
<target>Réponse : </target>
|
||||
</trans-unit>
|
||||
<trans-unit id="label.sended">
|
||||
<source>label.sended</source>
|
||||
<target>Envoyé : </target>
|
||||
</trans-unit>
|
||||
<trans-unit id="label.received">
|
||||
<source>label.received</source>
|
||||
<target>Recu : </target>
|
||||
</trans-unit>
|
||||
<trans-unit id="label.history.link">
|
||||
<source>label.history.link</source>
|
||||
<target>Afficher l'historique</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="label.history.talent.link">
|
||||
<source>label.history.talent.link</source>
|
||||
<target>Historique des message recus</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="label.webcam.answer.step1">
|
||||
<source>label.webcam.answer.step1</source>
|
||||
<target>Enregistrer ma vidéo</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="label.webcam.answer.step2">
|
||||
<source>label.webcam.answer.step2</source>
|
||||
<target>Importer ma vidéo</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="label.webcam.answer.step3">
|
||||
<source>label.webcam.answer.step3</source>
|
||||
<target>Définir le type de réponse</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="label.webcam.answer.videotheque">
|
||||
<source>label.webcam.answer.videotheque</source>
|
||||
<target>Choisir une vidéo de réponse</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="label.answer.history.title">
|
||||
<source>label.answer.history.title</source>
|
||||
<target>Historique des messages envoyés</target>
|
||||
</trans-unit>
|
||||
|
||||
<!-- Territoires -->
|
||||
<trans-unit id="message.territory.list.ads">
|
||||
<source>message.territory.list.ads</source>
|
||||
<target>offres d'emploi en cours sur ce territoire</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="message.territory.list.ad">
|
||||
<source>message.territory.list.ad</source>
|
||||
<target>offre d'emploi en cours sur ce territoire</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="message.territory.list.noads">
|
||||
<source>message.territory.list.noads</source>
|
||||
<target>Découvrez les entreprises qui recrutent sur ce territoire</target>
|
||||
</trans-unit>
|
||||
</body>
|
||||
</file>
|
||||
</xliff>
|
||||
+134
@@ -0,0 +1,134 @@
|
||||
{% extends 'admin/base_admin.html.twig' %}
|
||||
|
||||
|
||||
{% block contentHeader %}
|
||||
<h1>
|
||||
Liste des Candidatures
|
||||
</h1>
|
||||
<ol class="breadcrumb">
|
||||
<li><a href="{{ path('admin_dashboard') }}"><i class="fa fa-dashboard"></i> Dashboard</a></li>
|
||||
<li class="active">Annonces</li>
|
||||
</ol>
|
||||
{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
|
||||
<div class="box box-primary">
|
||||
<div class="box-body">
|
||||
<table id="answer_list_table" class="table table-hover table-bordered">
|
||||
<thead>
|
||||
<tr>
|
||||
<th class="col-xs-2">Date d'envoi</th>
|
||||
<th>Utilisateur</th>
|
||||
<th>Annonce / Entreprise</th>
|
||||
<th>video</th>
|
||||
<th>Status</th>
|
||||
<th>action</th>
|
||||
</tr>
|
||||
</thead>
|
||||
|
||||
<tbody>
|
||||
{% for answer in answers if answer.status != "DRAFT" %}
|
||||
<tr>
|
||||
<td data-order="{{ answer.sendTime|date('U') }}">{{ answer.sendTime|date('d/m/Y') }}</td>
|
||||
<td>{{ answer.user.firstname }} {{ answer.user.lastname }}</td>
|
||||
{% if answer.ad %}
|
||||
<td>{{ answer.ad.company.brandname }} - {{ answer.ad.title }}</td>
|
||||
{% else %}
|
||||
<td>{{ answer.company.brandname }}</td>
|
||||
{% endif %}
|
||||
<td>
|
||||
|
||||
ID Candidature : {{ answer.id }}<br />
|
||||
{% if answer.video.cdnUrl is defined %}
|
||||
<iframe src="https://player.vimeo.com/video/{{ answer.video.cdnUrl|replace({ "/videos/": ""}) }}"
|
||||
width="auto" height="auto" frameborder="0" webkitallowfullscreen mozallowfullscreen
|
||||
allowfullscreen></iframe>
|
||||
{% endif %}
|
||||
</td>
|
||||
<td class="status">{{ answer.status }}</td>
|
||||
<td>
|
||||
Actions :
|
||||
<select class="changeStatus" name="changeStatus" data-id="{{ answer.id }}">
|
||||
<option value="null">choisir</option>
|
||||
<option value="SENDED">Envoyé</option>
|
||||
<option value="DRAFT">Brouillon</option>
|
||||
<option value="REFUSED">Refuser</option>
|
||||
</select>
|
||||
<br />
|
||||
<a class="delete-answer" href='{{ path("admin_answer_delete",{'id':answer.id }) }}' data-toggle="tooltip" title="Supprimer">
|
||||
Supprimer <i class="fa fa-trash"></i>
|
||||
</a>
|
||||
</td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{% endblock %}
|
||||
|
||||
{% block javascripts %}
|
||||
<script>
|
||||
$(function () {
|
||||
$('.changeStatus').change(function(e){
|
||||
e.preventDefault();
|
||||
var idAnswer = $(this).data('id');
|
||||
var value = $(this).val();
|
||||
var route = '/app_dev.php/admin/config/answer/' + idAnswer + '/status/' + value;
|
||||
var select = $(this);
|
||||
$.ajax({
|
||||
type: "POST",
|
||||
url: route,
|
||||
dataType: "json",
|
||||
success: function (msg) {
|
||||
console.log("ok");
|
||||
select.parent().prev('.status').html(value);
|
||||
}
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
$('#answer_list_table').DataTable({
|
||||
"paging": true,
|
||||
"lengthChange": true,
|
||||
"searching": true,
|
||||
"ordering": true,
|
||||
"info": true,
|
||||
"autoWidth": false,
|
||||
"language": {
|
||||
"url": "http://cdn.datatables.net/plug-ins/1.10.11/i18n/French.json"
|
||||
},
|
||||
"columnDefs": [
|
||||
{"targets": 1, "searchable": true, "orderable": true},
|
||||
{"targets": 2, "searchable": true, "orderable": true},
|
||||
{"targets": 4, "searchable": true, "orderable": true, "className": "text-center"},
|
||||
],
|
||||
"order": [[ 0, "desc" ]]
|
||||
});
|
||||
|
||||
$(".delete-answer").confirm({
|
||||
title: "Êtes vous sûr de supprimer cette candidature ?",
|
||||
content: "Supprimer cette candidature supprimera le média associé",
|
||||
type: 'red',
|
||||
boxWidth: '30%',
|
||||
useBootstrap: false,
|
||||
buttons: {
|
||||
confirm: {
|
||||
text: 'Confirmer',
|
||||
action: function () {
|
||||
console.log(this.$target);
|
||||
location.href = this.$target.attr('href');
|
||||
return true;
|
||||
}
|
||||
},
|
||||
cancel: {
|
||||
text: 'Annuler'
|
||||
}
|
||||
}
|
||||
});
|
||||
});
|
||||
</script>
|
||||
|
||||
{% endblock %}
|
||||
@@ -16,6 +16,7 @@
|
||||
<link rel="stylesheet" href="{{ asset('admin/AdminLTE/plugins/datatables/dataTables.bootstrap.css') }}">
|
||||
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/jquery-confirm/3.3.2/jquery-confirm.min.css">
|
||||
<script type="text/javascript" defer="defer" src="https://extend.vimeocdn.com/ga/64189815.js"></script>
|
||||
<link href="https://gitcdn.github.io/bootstrap-toggle/2.2.2/css/bootstrap-toggle.min.css" rel="stylesheet">
|
||||
|
||||
{% block css %}
|
||||
|
||||
@@ -71,6 +72,7 @@ output='assetic/admin.backend.js' filter='?uglifyjs2' %}
|
||||
$('[data-toggle="tooltip"]').tooltip();
|
||||
});
|
||||
</script>
|
||||
<script src="https://gitcdn.github.io/bootstrap-toggle/2.2.2/js/bootstrap-toggle.min.js"></script>
|
||||
{% block javascripts %}
|
||||
|
||||
{% endblock %}
|
||||
|
||||
+176
@@ -0,0 +1,176 @@
|
||||
{% extends 'admin/base_admin.html.twig' %}
|
||||
|
||||
{% block contentHeader %}
|
||||
<h1>
|
||||
Recommandations
|
||||
<small>Liste</small>
|
||||
</h1>
|
||||
<ol class="breadcrumb">
|
||||
<li>
|
||||
<a href="{{ path('admin_dashboard') }}">
|
||||
<i class="fa fa-dashboard"></i>
|
||||
Dashboard</a>
|
||||
</li>
|
||||
<li class="active">Recommandations</li>
|
||||
</ol>
|
||||
{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
|
||||
<div class="box box-primary">
|
||||
<div class="box-body">
|
||||
<table id="reco_list_table" class="table table-hover table-bordered">
|
||||
<thead>
|
||||
<tr>
|
||||
<th class="col-xs-2">Date de création</th>
|
||||
<th>De</th>
|
||||
<th>Pour</th>
|
||||
<th>Status</th>
|
||||
<th>Player</th>
|
||||
<th>Action</th>
|
||||
</tr>
|
||||
</thead>
|
||||
|
||||
<tbody>
|
||||
{% for r in recos %}
|
||||
<tr>
|
||||
<td data-order="{{ r.cTime|date('U') }}">{{ r.cTime|date('d/m/Y') }}</td>
|
||||
<td>
|
||||
{{ r.sender.lastname }}
|
||||
{{ r.sender.firstname }}
|
||||
</td>
|
||||
<td>
|
||||
{{ r.user.lastname }}
|
||||
{{ r.user.firstname }}
|
||||
</td>
|
||||
<td>
|
||||
{% if r.isRemoved %}
|
||||
<span class="label pull-right bg-red">supprimée</span>
|
||||
{% elseif r.isEnabled %}
|
||||
<span class="label pull-right bg-green">Visible</span>
|
||||
{% endif %}
|
||||
</td>
|
||||
<td>
|
||||
{% if r.video != null %}
|
||||
<i class="fa fa-eye modalBtn c-pointer hover-blue1" data-url="{{ r.video.cdnUrl }}"></i>
|
||||
{% endif %}
|
||||
</td>
|
||||
<td>
|
||||
<input class="visibilityToggle" {% if r.isVisible == false %} checked="checked" {% endif %} type="checkbox" data-toggle="toggle" data-size="mini" data-onstyle="danger" data-on="Desactivée" data-off="Activée" data-recid="{{ r.id }}">
|
||||
</td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{# <div id="modal_video" class="modal">
|
||||
<div class="modal-content">
|
||||
<h4>Vidéo de la recommendation</h4>
|
||||
<div class="videoContainer" style="text-align:center;">Loading...</div>
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
<button class="modal-action modal-close waves-effect waves-green btn-flat">Fermer</button>
|
||||
</div>
|
||||
</div> #}
|
||||
|
||||
<div id="modal_video" class="modal fade" tabindex="-1" role="dialog">
|
||||
<div class="modal-dialog" role="document" style="width:800px;">
|
||||
<div class="modal-content">
|
||||
<div class="modal-header">
|
||||
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
|
||||
<span aria-hidden="true">×</span></button>
|
||||
<h4 class="modal-title">Vidéo de la recommendation</h4>
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
<div class="videoContainer" style="text-align:center;">Loading...</div>
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
<button type="button" class="btn btn-default" data-dismiss="modal">Fermer</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{% endblock %}
|
||||
|
||||
{% block javascripts %}
|
||||
{{ parent() }}
|
||||
<script>
|
||||
$(function () {
|
||||
$('#reco_list_table').DataTable({
|
||||
"paging": true,
|
||||
"lengthChange": true,
|
||||
"searching": true,
|
||||
"ordering": true,
|
||||
"info": true,
|
||||
"autoWidth": false,
|
||||
"language": {
|
||||
"url": "https://cdn.datatables.net/plug-ins/1.10.11/i18n/French.json"
|
||||
},
|
||||
"columnDefs": [
|
||||
{
|
||||
"targets": 0,
|
||||
"searchable": true,
|
||||
"orderable": true
|
||||
}, {
|
||||
"targets": 1,
|
||||
"searchable": true,
|
||||
"orderable": true
|
||||
}, {
|
||||
"targets": 2,
|
||||
"searchable": true,
|
||||
"orderable": true
|
||||
}, {
|
||||
"targets": 3,
|
||||
"searchable": true,
|
||||
"orderable": true,
|
||||
"className": "text-center"
|
||||
}, {
|
||||
"targets": 4,
|
||||
"searchable": false,
|
||||
"orderable": false,
|
||||
"className": "text-center"
|
||||
}, {
|
||||
"targets": 5,
|
||||
"searchable": true,
|
||||
"orderable": true,
|
||||
"className": "text-center"
|
||||
}
|
||||
],
|
||||
"order": [
|
||||
[0, "desc"]
|
||||
]
|
||||
});
|
||||
});
|
||||
</script>
|
||||
|
||||
<script src="https://player.vimeo.com/api/player.js"></script>
|
||||
<script type="text/javascript">
|
||||
$('.modalBtn').click(function () {
|
||||
$('.videoContainer').html('');
|
||||
$('#modal_video').modal();
|
||||
var urlVideo = $(this).data("url");
|
||||
urlVideo = urlVideo.replace('videos', 'video');
|
||||
var player = '<div data-vimeo-url="https://vimeo.com' + urlVideo + '" id="player_vimeo"></div>';
|
||||
$('.videoContainer').html(player);
|
||||
var player_vimeo = new Vimeo.Player('player_vimeo');
|
||||
});
|
||||
</script>
|
||||
<script>
|
||||
$('.visibilityToggle').change(function () {
|
||||
var recId = $(this).data('recid');
|
||||
var route = '/admin/config/recommandation/' + recId + '/toggle';
|
||||
$.ajax({
|
||||
type: "POST",
|
||||
url: route,
|
||||
dataType: "json",
|
||||
success: function (msg) {
|
||||
console.log(msg);
|
||||
}
|
||||
});
|
||||
});
|
||||
</script>
|
||||
|
||||
{% endblock %}
|
||||
@@ -28,6 +28,11 @@
|
||||
<i class="fa fa-file-video-o" aria-hidden="true"></i> <span>Vidéos Talent</span>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="{{ path('admin_anwser_moderation_list') }}">
|
||||
<i class="fa fa-file-video-o" aria-hidden="true"></i> <span>Candidatures</span>
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
<ul class="sidebar-menu">
|
||||
<li class="header">ENTITEES</li>
|
||||
@@ -53,9 +58,14 @@
|
||||
<i class="fa fa-user-circle" aria-hidden="true"></i><span>Talents</span>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="{{ path('admin_config_recommendations') }}">
|
||||
<i class="fa fa-thumbs-up" aria-hidden="true"></i><span>Recommandations</span>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="{{ path('admin_config_territory') }}">
|
||||
<i class="fa fa-map-marker" aria-hidden="true"></i><span>Territoire</span>
|
||||
<i class="fa fa-map-marker" aria-hidden="true"></i><span>Territoires</span>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
|
||||
@@ -28,6 +28,7 @@
|
||||
<i class="fa fa-star color-gold" aria-hidden="true"></i>
|
||||
</span>
|
||||
{% endif %}
|
||||
<br/><i class="fa fa-link"></i>Url :<br /> https://www.talentstube.com{{ path("talent_show",{'alias':user.company.alias})}}<br />
|
||||
</h3>
|
||||
<br>
|
||||
<span><a href="mailto:{{ user.email }}">{{ user.email }}</a></span>
|
||||
|
||||
@@ -30,6 +30,7 @@
|
||||
{{ form_row(form.emphasis) }}
|
||||
{{ form_row(form.emphasisOrder) }}
|
||||
{{ form_row(form.brandName) }}
|
||||
{{ form_row(form.terType) }}
|
||||
{{ form_row(form.description) }}
|
||||
{{ form_row(form.descriptionAdmin) }}
|
||||
{{ form_row(form.website) }}
|
||||
|
||||
@@ -1,13 +1,13 @@
|
||||
<div id="modal-tuto" class="modal">
|
||||
<div id="modal-tuto" class="modal modal-fixed-footer">
|
||||
<div class="modal-content">
|
||||
<div class="row">
|
||||
<div class="col s12">
|
||||
<h3 class="color-blue1 center-align title-tuto">Les conseils de Talents Tube</h3>
|
||||
<div class="col-content">
|
||||
<h3 class="color-blue1 center-align">Les conseils de Talents Tube</h3>
|
||||
<div class="owl-carousel tuto-carousel">
|
||||
<div class="item-tuto-webcam carousel-item">
|
||||
<div class="row">
|
||||
<div class="col s4 offset-s1 hide-on-med-and-down">
|
||||
<div class="col s3 offset-s1 hide-on-med-and-down">
|
||||
<img class="responsive-img" src="{{ asset('img/img_popupcv/cv_video_step_1.svg')}}" alt="">
|
||||
</div>
|
||||
<div class="col s11 m11 l6 offset-s1 left-align">
|
||||
@@ -31,7 +31,7 @@
|
||||
</div>
|
||||
<div class="item-tuto-webcam carousel-item">
|
||||
<div class="row">
|
||||
<div class="col s4 offset-s1 hide-on-med-and-down">
|
||||
<div class="col s3 offset-s1 hide-on-med-and-down">
|
||||
<img class="responsive-img" src="{{ asset('img/img_popupcv/cv_video_step_2.svg')}}" alt="">
|
||||
</div>
|
||||
<div class="col s11 m11 l6 offset-s1 left-align">
|
||||
@@ -51,7 +51,7 @@
|
||||
</div>
|
||||
<div class="item-tuto-webcam carousel-item">
|
||||
<div class="row">
|
||||
<div class="col s4 offset-s1 hide-on-med-and-down">
|
||||
<div class="col s3 offset-s1 hide-on-med-and-down">
|
||||
<img class="responsive-img" src="{{ asset('img/img_popupcv/cv_video_step_3.svg')}}" alt="">
|
||||
</div>
|
||||
<div class="col s11 m11 l6 offset-s1 left-align">
|
||||
@@ -73,12 +73,15 @@
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="carousel-fixed-item right">
|
||||
<a class="text close-tuto">Passer l'intro</a>
|
||||
<a class="btn btn-default next-slide">suivant</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
<div id="customDots" class="owl-dots"></div>
|
||||
<div class="carousel-fixed-item right">
|
||||
<a class="text close-tuto">Passer l'intro</a>
|
||||
<a class="btn btn-default next-slide">suivant</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -54,9 +54,7 @@
|
||||
{% endif %}
|
||||
{# CSS #}
|
||||
<link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet">
|
||||
<link href="https://fonts.googleapis.com/css?family=Raleway:100,100i,200,200i,300,300i,400,400i,500,500i,600,600i,700,700i,800,800i,900,900i&subset=latin-ext"
|
||||
rel="stylesheet">
|
||||
<link href="https://fonts.googleapis.com/css?family=Varela+Round" : rel="stylesheet">
|
||||
<link href="https://fonts.googleapis.com/css?family=Raleway:100,100i,200,200i,300,300i,400,400i,500,500i,600,600i,700,700i,800,800i,900,900i|Varela+Round" rel="stylesheet">
|
||||
<link rel="stylesheet" href="{{ asset('css/styles.css') }}">
|
||||
{% block stylesheets %}
|
||||
{% endblock %}
|
||||
|
||||
@@ -35,8 +35,7 @@
|
||||
href="{% block urlCanonical %}{{ url(app.request.attributes.get('_route'), app.request.attributes.get('_route_params')) }}"{% endblock %}>
|
||||
{# CSS #}
|
||||
<link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet">
|
||||
<link href="https://fonts.googleapis.com/css?family=Raleway:300,300i,400,400i,700,700i" rel=“stylesheet”>
|
||||
<link href="https://fonts.googleapis.com/css?family=Varela+Round" rel="stylesheet">
|
||||
<link href="https://fonts.googleapis.com/css?family=Raleway:100,100i,200,200i,300,300i,400,400i,500,500i,600,600i,700,700i,800,800i,900,900i|Varela+Round" rel="stylesheet">
|
||||
<link rel="stylesheet" href="{{ asset('css/styles.css') }}">
|
||||
{% block stylesheets %}
|
||||
{% endblock %}
|
||||
|
||||
@@ -2,41 +2,58 @@
|
||||
|
||||
|
||||
{% block dashContent %}
|
||||
{% if type == "spontaneous" %}
|
||||
{% include 'company/job_submenu.html.twig' with {
|
||||
'tab' : 3
|
||||
} %}
|
||||
{% else %}
|
||||
{% include 'company/job_submenu.html.twig' with {
|
||||
'tab' : 2
|
||||
} %}
|
||||
{% endif %}
|
||||
<div class="row bg-bordered p-20">
|
||||
{% set first = answers|first %}
|
||||
<h1 class="alttitle">Réponses pour : {{ first.ad.title }}</h1>
|
||||
{% include 'company/tabs.html.twig' with {'tab':2} %}
|
||||
{% include 'company/ad_breadcrumb.html.twig' with {'step': 2,'ad': ad} %}
|
||||
<div id="reponses" class="col s12">
|
||||
<table id="table-answers" class="bordered highlight responsive-table">
|
||||
<thead>
|
||||
<tr>
|
||||
<th> {{ 'profile.talent.firstname'|trans }} - {{ 'profile.talent.lastname'|trans }}</th>
|
||||
<th>{{ 'global.intitule.label'|trans }}</th>
|
||||
<th>{{ 'global.date.label'|trans }}</th>
|
||||
<th>{{ 'note.title'|trans }}</th>
|
||||
<th>{{ 'profile.talent.lastname'|trans }} {{ 'profile.talent.firstname'|trans }}</th>
|
||||
<th>{{ 'global.datereception.label'|trans }}</th>
|
||||
<th>{{ 'ad.company.list.status'|trans }}</th>
|
||||
<th class="center-align">{{ 'ad.company.list.actions'|trans }}</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{% for answer in answers %}
|
||||
<tr>
|
||||
<td>
|
||||
<a href="{{ path('company_answer_show',{'id':answer.id }) }}">{{ answer.user.firstname }} {{ answer.user.lastname }}</a>
|
||||
<a href="{{ path('company_answer_show',{'id':answer.id }) }}">{{ answer.user.lastname }} {{ answer.user.firstname }}</a>
|
||||
</td>
|
||||
<td>{{ answer.ad.title }}</td>
|
||||
<td>{{ answer.uTime()|date('d-m-Y') }}</td>
|
||||
<td>
|
||||
{#{% if answer.notes|length <= 0 %}#}
|
||||
<a href="#" class="note-action c-pointer" data-func="add" data-answer="{{ answer.id }}">
|
||||
<i class="fa fa-plus " aria-hidden="true"></i>
|
||||
<td>{{ answer.sendTime()|date('d/m/Y') }}</td>
|
||||
{% if answer.firstMessage %}
|
||||
<td>{{ answer.firstMessage.status|trans }}</td>
|
||||
{% else %}
|
||||
{% if answer.isViewed %}
|
||||
{% if answer.isViewed.status == "DRAFT" %}
|
||||
<td>{{ 'VIEWED'|trans }}</td>
|
||||
{% endif %}
|
||||
{% else %}
|
||||
<td>{{ 'NEW'|trans }}</td>
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
<td class="center-align">
|
||||
<a title="{{ad.title}}" href="{{ path('company_answer_show',{'id':answer.id }) }}">
|
||||
<i class="fa fa-eye"></i>
|
||||
</a>
|
||||
<a href="#" class="note-action c-pointer" data-func="add" data-answer="{{ answer.id }}">
|
||||
<i class="fa fa-sticky-note"></i>
|
||||
</a>
|
||||
{#{% else %}#}
|
||||
{% for note in answer.notes %}
|
||||
<a class="tooltipped note-action c-pointer" data-position="top" data-delay="50"
|
||||
data-tooltip="{{ note.content }}" data-note="{{ note.id }}" data-func="edit">
|
||||
<i class="fa fa-commenting" aria-hidden="true"></i>
|
||||
</a>
|
||||
{% endfor %}
|
||||
{#{% endif %}#}
|
||||
</td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
|
||||
@@ -0,0 +1,19 @@
|
||||
<div class="col s12" id="breadcrumb">
|
||||
<a href="{{ path('company_ad') }}">
|
||||
<span>{% trans %}label.offers{% endtrans %}</span>
|
||||
</a>
|
||||
{% if step > 1 %}
|
||||
<span class="sepa-breadcrumb">></span>
|
||||
<a href="{{ path('company_ad_answer_list',{'id':ad.id}) }}">
|
||||
<span {% if step == 2 %}class="active"{% endif %}>{{ ad.title }}</span>
|
||||
</a>
|
||||
{% endif %}
|
||||
{% if step > 2 %}
|
||||
<span class="sepa-breadcrumb">></span>
|
||||
<span class="active">{{ firstname }} {{ lastname }}</span>
|
||||
{% endif %}
|
||||
<div class="border-breadcrumb"></div>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
@@ -1,16 +1,20 @@
|
||||
{% extends 'company/base_dashboard_company.html.twig' %}
|
||||
|
||||
{% block title %} Mes annonces {% endblock %}
|
||||
{% block title %}
|
||||
Mes annonces
|
||||
{% endblock %}
|
||||
|
||||
{% block dashContent %}
|
||||
{% include 'default/flash_message.html.twig' %}
|
||||
|
||||
{#<h1 class="alttitle">Espace offres d'emploi</h1>#}
|
||||
<div class="bg-bordered p-20">
|
||||
{% include 'company/tabs.html.twig' with {'tab':1} %}
|
||||
{% include 'company/ad_table_listing.html.twig' with {'ads':ads} %}
|
||||
<p class="center-align">
|
||||
<a href="{{ path('company_ad_create') }}" class="btn btn-default">{{ 'ad.company.add.label'|trans }}</a>
|
||||
</p>
|
||||
{% include 'company/job_submenu.html.twig' with {
|
||||
'tab' : 1
|
||||
} %}
|
||||
|
||||
<div class="row bg-bordered p-20">
|
||||
{% include 'company/ad_breadcrumb.html.twig' with {'step': 1} %}
|
||||
{% include 'company/ad_table_listing.html.twig' with {
|
||||
'ads' : ads
|
||||
} %}
|
||||
</div>
|
||||
{% endblock %}
|
||||
{% endblock %}
|
||||
@@ -1,5 +1,5 @@
|
||||
<table id="ads-table" class="bordered highlight responsive-table">
|
||||
<thead>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>{{ 'ad.company.list.title'|trans }}</th>
|
||||
<th class="tdCount">{{ 'ad.company.list.answers'|trans }}</th>
|
||||
@@ -7,15 +7,23 @@
|
||||
<th>{{ 'ad.company.list.status'|trans }}</th>
|
||||
<th>{{ 'ad.company.list.actions'|trans }}</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
</thead>
|
||||
<tbody>
|
||||
{% for ad in ads %}
|
||||
<tr>
|
||||
<td>{{ ad.title }}</td>
|
||||
<td>
|
||||
{% if ad.countAnswers > 0 %}
|
||||
<a href="{{ path('company_ad_answer_list',{'id':ad.id}) }}">
|
||||
{{ ad.title }}
|
||||
</a>
|
||||
{% else %}
|
||||
{{ ad.title }}
|
||||
{% endif %}
|
||||
</td>
|
||||
<td class="tdCount">
|
||||
{% if ad.countAnswers > 0 %}
|
||||
<a href="{{ path('company_ad_answer_list',{'id':ad.id}) }}">
|
||||
{{ ad.countAnswers }}
|
||||
<i class="fa fa-eye"></i> {{ ad.countAnswers }}
|
||||
</a>
|
||||
{% else %}
|
||||
0
|
||||
@@ -23,13 +31,12 @@
|
||||
</td>
|
||||
<td class="tdCount">
|
||||
{% if arrayByAds is defined %}
|
||||
{{ arrayByAds[ad.id]["count"] }}
|
||||
{{ arrayByAds[ad.id]["count"] }}
|
||||
{% endif %}
|
||||
</td>
|
||||
<td align="center" valign="center">
|
||||
{% if ad.getStatus() == "DECLINED" %}
|
||||
<div class="tooltipped" data-position="top" data-delay="50"
|
||||
data-tooltip="{{ ad.moderationText }}">
|
||||
<div class="tooltipped" data-position="top" data-delay="50" data-tooltip="{{ ad.moderationText }}">
|
||||
<span class="">{{ ad.getStatus()|trans }}</span>
|
||||
<i class="c-pointer fa fa-info-circle color-red" aria-hidden="true"></i>
|
||||
</div>
|
||||
@@ -40,57 +47,43 @@
|
||||
<td>
|
||||
{% if ad.getStatus() == "DRAFT" or ad.getStatus() == "DECLINED" %}
|
||||
{#Edit#}
|
||||
<a class="tooltipped td-none" data-position="top" data-delay="0"
|
||||
data-tooltip="{{ 'ad.company.edit.label'|trans }}"
|
||||
href="{{ path('company_ad_edit', { 'id': ad.id }) }}" style="margin-right: 10px">
|
||||
<a class="tooltipped td-none" data-position="top" data-delay="0" data-tooltip="{{ 'ad.company.edit.label'|trans }}" href="{{ path('company_ad_edit', { 'id': ad.id }) }}" style="margin-right: 10px">
|
||||
<i class="fa fa-pencil-square-o" aria-hidden="true"></i>
|
||||
</a>
|
||||
{% else %}
|
||||
{#Soft Edit#}
|
||||
<a class="tooltipped td-none" data-position="top" data-delay="0"
|
||||
data-tooltip="{{ 'ad.company.edit.label'|trans }}"
|
||||
href="{{ path('company_ad_soft_edit', { 'id': ad.id }) }}"
|
||||
style="margin-right: 10px">
|
||||
<a class="tooltipped td-none" data-position="top" data-delay="0" data-tooltip="{{ 'ad.company.edit.label'|trans }}" href="{{ path('company_ad_soft_edit', { 'id': ad.id }) }}" style="margin-right: 10px">
|
||||
<i class="fa fa-pencil-square-o" aria-hidden="true"></i>
|
||||
</a>
|
||||
{% endif %}
|
||||
|
||||
{% if ad.getStatus() == "DRAFT" or ad.getStatus() == "DECLINED" %}
|
||||
{#Video#}
|
||||
<a class="tooltipped td-none" data-position="top" data-delay="0"
|
||||
data-tooltip="{{ 'ad.company.video.edit.label'|trans }}"
|
||||
href="{{ path('create_media', { 'id': ad.id }) }}">
|
||||
<a class="tooltipped td-none" data-position="top" data-delay="0" data-tooltip="{{ 'ad.company.video.edit.label'|trans }}" href="{{ path('create_media', { 'id': ad.id }) }}">
|
||||
<i class="fa fa-video-camera" aria-hidden="true"></i>
|
||||
</a>
|
||||
{% endif %}
|
||||
|
||||
{% if ad.getStatus() == "PUBLISHED" %}
|
||||
{% if ad.getStatus() == "PUBLISHED" %}
|
||||
{#Extension#}
|
||||
<a class="tooltipped td-none" data-position="top" data-delay="0"
|
||||
data-tooltip="{{ 'ad.company.dates.extension.label'|trans }}"
|
||||
href="{{ path('company_ad_extension', { 'id': ad.id }) }}"
|
||||
style="margin-right: 10px">
|
||||
<a class="tooltipped td-none" data-position="top" data-delay="0" data-tooltip="{{ 'ad.company.dates.extension.label'|trans }}" href="{{ path('company_ad_extension', { 'id': ad.id }) }}" style="margin-right: 10px">
|
||||
<i class="fa fa-calendar" aria-hidden="true"></i>
|
||||
</a>
|
||||
{#Force ending#}
|
||||
<a class="tooltipped td-none" data-position="top" data-delay="0"
|
||||
data-tooltip="{{ 'ad.company.closed.label'|trans }}"
|
||||
href="{{ path('company_ad_closed', { 'id': ad.id }) }}" style="margin-right: 10px">
|
||||
<a class="tooltipped td-none" data-position="top" data-delay="0" data-tooltip="{{ 'ad.company.closed.label'|trans }}" href="{{ path('company_ad_closed', { 'id': ad.id }) }}" style="margin-right: 10px">
|
||||
<i class="fa fa-window-close-o" aria-hidden="true"></i>
|
||||
</a>
|
||||
{% endif %}
|
||||
|
||||
{% if ad.getStatus() == "TO_PUBLISH" or ad.getStatus() == "VALIDATED" or ad.getStatus() == "CLOSED" or ad.getStatus() == "EXPIRED" %}
|
||||
{#Edit Dates#}
|
||||
<a class="tooltipped td-none" data-position="top" data-delay="0"
|
||||
data-tooltip="{{ 'ad.company.dates.edit.label'|trans }}"
|
||||
href="{{ path('company_ad_step3', { 'id': ad.id }) }}" style="margin-right: 10px">
|
||||
<a class="tooltipped td-none" data-position="top" data-delay="0" data-tooltip="{{ 'ad.company.dates.edit.label'|trans }}" href="{{ path('company_ad_step3', { 'id': ad.id }) }}" style="margin-right: 10px">
|
||||
<i class="fa fa-calendar" aria-hidden="true"></i>
|
||||
</a>
|
||||
{% endif %}
|
||||
</td>
|
||||
|
||||
|
||||
</tr>
|
||||
{% endfor %}
|
||||
</tbody>
|
||||
</table>
|
||||
</tbody>
|
||||
</table>
|
||||
@@ -1,53 +1,86 @@
|
||||
{% extends 'company/base_dashboard_company.html.twig' %}
|
||||
|
||||
|
||||
{% block dashContent %}
|
||||
{% include 'company/job_submenu.html.twig' with {'tab' : 2} %}
|
||||
<div class="row bg-bordered p-20">
|
||||
|
||||
{% if type == "spontaneous" %}
|
||||
{% include 'company/tabs.html.twig' with {'tab':3} %}
|
||||
{% else %}
|
||||
{% include 'company/tabs.html.twig' with {'tab':2} %}
|
||||
{% endif %}
|
||||
|
||||
<div id="reponses" class="col s12">
|
||||
<table id="table-answers" class="bordered highlight responsive-table">
|
||||
<thead>
|
||||
<tr>
|
||||
<th> {{ 'profile.talent.firstname'|trans }} - {{ 'profile.talent.lastname'|trans }}</th>
|
||||
<th>{{ 'global.intitule.label'|trans }}</th>
|
||||
<th>{{ 'global.date.label'|trans }}</th>
|
||||
<th>{{ 'note.title'|trans }}</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{% for answer in answers %}
|
||||
<tr>
|
||||
<td>
|
||||
<a href="{{ path('company_answer_show',{'id':answer.id }) }}">{{ answer.user.firstname }} {{ answer.user.lastname }}</a>
|
||||
</td>
|
||||
<td>{% if answer.ad != null %}{{ answer.ad.title }} {% endif %}</td>
|
||||
<td>{{ answer.cTime()|date('d-m-Y') }}</td>
|
||||
<td>
|
||||
{#{% if answer.notes|length <= 0 %}#}
|
||||
<a href="#" class="note-action c-pointer" data-func="add" data-answer="{{ answer.id }}">
|
||||
<i class="fa fa-plus " aria-hidden="true"></i>
|
||||
</a>
|
||||
{#{% else %}#}
|
||||
{% for note in answer.notes %}
|
||||
<a class="tooltipped note-action c-pointer" data-position="top" data-delay="50"
|
||||
data-tooltip="{{ note.content }}" data-note="{{ note.id }}" data-func="edit">
|
||||
<i class="fa fa-commenting" aria-hidden="true"></i>
|
||||
</a>
|
||||
{% endfor %}
|
||||
{#{% endif %}#}
|
||||
</td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
</table>
|
||||
<div class="col s12">
|
||||
<h4 class="title-table">{{ 'company.menu.answers.label'|trans }}</h4>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="note-modal"></div>
|
||||
{% endblock %}
|
||||
|
||||
<div id="reponses" class="col s12">
|
||||
<table id="table-answers" class="bordered highlight responsive-table">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>{{ 'profile.talent.lastname'|trans }} {{ 'profile.talent.firstname'|trans }}</th>
|
||||
<th>{{ 'global.datereception.label'|trans }}</th>
|
||||
<th>{{ 'ad.company.list.title'|trans }}</th>
|
||||
<th class="center-align">{{ 'ad.company.list.actions'|trans }}</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{% for answer in answers %}
|
||||
<tr>
|
||||
<td>
|
||||
<a href="{{ path('company_answer_show',{'id':answer.id }) }}">{{ answer.user.lastname }} {{ answer.user.firstname }}</a>
|
||||
</td>
|
||||
<td>{{ answer.sendTime()|date('d/m/Y') }}</td>
|
||||
<td>{{ answer.ad.title }}</td>
|
||||
<td class="center-align">
|
||||
<a title="{{answer.ad.title}}" href="{{ path('company_answer_show',{'id':answer.id }) }}">
|
||||
<i class="fa fa-eye"></i>
|
||||
</a>
|
||||
<a href="#" class="note-action c-pointer" data-func="add" data-answer="{{ answer.id }}">
|
||||
<i class="fa fa-sticky-note"></i>
|
||||
</a>
|
||||
{% for note in answer.notes %}
|
||||
<a class="tooltipped note-action c-pointer" data-position="top" data-delay="50"
|
||||
data-tooltip="{{ note.content }}" data-note="{{ note.id }}" data-func="edit">
|
||||
<i class="fa fa-commenting" aria-hidden="true"></i>
|
||||
</a>
|
||||
{% endfor %}
|
||||
</td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row bg-bordered p-20">
|
||||
<div class="col s12">
|
||||
<h4 class="title-table">{{ 'company.menu.spontaneous.label'|trans }}</h4>
|
||||
</div>
|
||||
<div id="spontaneous" class="col s12">
|
||||
<table id="table-answers" class="bordered highlight responsive-table">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>{{ 'profile.talent.lastname'|trans }} {{ 'profile.talent.firstname'|trans }}</th>
|
||||
<th>{{ 'global.datereception.label'|trans }}</th>
|
||||
<th class="center-align">{{ 'ad.company.list.actions'|trans }}</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{% for answer in spontaneous %}
|
||||
<tr>
|
||||
<td>
|
||||
<a href="{{ path('company_answer_show',{'id':answer.id }) }}">{{ answer.user.lastname }} {{ answer.user.firstname }}</a>
|
||||
</td>
|
||||
<td>{{ answer.sendTime()|date('d/m/Y') }}</td>
|
||||
<td class="center-align">
|
||||
<a title="" href="{{ path('company_answer_show',{'id':answer.id }) }}">
|
||||
<i class="fa fa-eye"></i>
|
||||
</a>
|
||||
<a href="#" class="note-action c-pointer" data-func="add" data-answer="{{ answer.id }}">
|
||||
<i class="fa fa-sticky-note"></i>
|
||||
</a>
|
||||
{% for note in answer.notes %}
|
||||
<a class="tooltipped note-action c-pointer" data-position="top" data-delay="50"
|
||||
data-tooltip="{{ note.content }}" data-note="{{ note.id }}" data-func="edit">
|
||||
<i class="fa fa-commenting" aria-hidden="true"></i>
|
||||
</a>
|
||||
{% endfor %}
|
||||
</td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
<div id="note-modal"></div>
|
||||
{% endblock %}
|
||||
@@ -2,95 +2,245 @@
|
||||
|
||||
|
||||
{% block dashContent %}
|
||||
{% if type == "spontaneous" %}
|
||||
{% include 'company/job_submenu.html.twig' with {
|
||||
'tab' : 3
|
||||
} %}
|
||||
{% else %}
|
||||
{% include 'company/job_submenu.html.twig' with {
|
||||
'tab' : 2
|
||||
} %}
|
||||
{% endif %}
|
||||
<div class="row bg-bordered p-20">
|
||||
<h1 class="alttitle">Réponse de {{ answer.user.firstname }} {{ answer.user.lastname }}</h1>
|
||||
{% if type == "spontaneous" %}
|
||||
{% include 'company/tabs.html.twig' with {'tab':3} %}
|
||||
{% else %}
|
||||
{% include 'company/tabs.html.twig' with {'tab':2} %}
|
||||
{% endif %}
|
||||
|
||||
<div class="col s12 m6 l6 col-padding-right">
|
||||
<div class="bg-bordered inside-m">
|
||||
<span>Réponse émise le : {{ answer.cTime|date('d-m-Y') }}</span><br/>
|
||||
{% include 'company/ad_breadcrumb.html.twig' with {'step': 3,'ad': answer.ad,'firstname':answer.user.firstname ,'lastname':answer.user.lastname} %}
|
||||
<div class="col s12 m6">
|
||||
<div id="mini-profil-block">
|
||||
{% include 'talent/talent_picture.html.twig' with {
|
||||
'user' : answer.user
|
||||
} %}
|
||||
<div>
|
||||
<iframe src="https://player.vimeo.com/video/{{ answer.video.cdnUrl|replace({ "/videos/": ""}) }}"
|
||||
width="100%" height="300" frameborder="0" webkitallowfullscreen mozallowfullscreen
|
||||
allowfullscreen></iframe>
|
||||
<div class="mini-profil-picture-name">{{ answer.user.firstname }} {{ answer.user.lastname }}</div>
|
||||
<div>Recu le {{ answer.sendTime|date('d/m/Y') }}</div>
|
||||
</div>
|
||||
<div>
|
||||
{% if answer.comment %}
|
||||
<strong>Message du talent :</strong>
|
||||
<p>{{ answer.comment }}</p>
|
||||
{% endif %}
|
||||
</div>
|
||||
<h3>Profil du talent : </h3>
|
||||
<div class="profil">
|
||||
<p class="profil-picture">
|
||||
{% if answer.user.getWebPath() %}
|
||||
<img src="{{ answer.user.getWebPath() | imagine_filter('profile_square') }}"
|
||||
alt="{{ answer.user.firstname }} {{ answer.user.lastname }}"
|
||||
class="circle responsive-img"/>
|
||||
{% endif %}
|
||||
</p>
|
||||
<i class="fa fa-user-circle"
|
||||
aria-hidden="true"></i> {{ answer.user.firstname }} {{ answer.user.lastname }}
|
||||
{% if answer.user.gender == "female" %}
|
||||
<i class="fa fa-mars" aria-hidden="true"></i>
|
||||
{% else %}
|
||||
<i class="fa fa-venus" aria-hidden="true"></i>
|
||||
{% endif %}
|
||||
<br/>
|
||||
<i class="fa fa-birthday-cake" aria-hidden="true"></i> {{ answer.user.birthday|date('d-m-Y') }}<br/>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
<div class="embed-responsive embed-responsive-16by9">
|
||||
<iframe src="https://player.vimeo.com/video/{{ answer.video.cdnUrl|replace({ "/videos/": ""}) }}"
|
||||
width="100%" height="auto" frameborder="0" webkitallowfullscreen mozallowfullscreen
|
||||
allowfullscreen></iframe>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col s12 m6 l6 col-padding-left">
|
||||
<div class="col s12 m12 l12">
|
||||
<div class="bg-bordered inside-m">
|
||||
<h4 class="no-margin-top">
|
||||
Contacter le talent
|
||||
</h4>
|
||||
<p>
|
||||
Expéditeur : {{ app.user.firstname }} {{ app.user.lastname }}
|
||||
</p>
|
||||
<div class="col s12 m6">
|
||||
{% if answer.comment %}
|
||||
<strong>{% trans %}label.message{% endtrans %}</strong>
|
||||
<p class="message-answer">{{ answer.comment }}</p>
|
||||
{% else %}
|
||||
{% trans %}label.noMessage{% endtrans %}
|
||||
{% endif %}
|
||||
</div>
|
||||
<div class="col s12">
|
||||
<h4 class="no-margin-top bordered">Contacter {{ answer.user.firstname }} {{ answer.user.lastname }} par : </h4>
|
||||
</div>
|
||||
<div class="col s12 col-actions">
|
||||
<a class="btn btn-default btn-active bnt-choice-message" data-value="message">Message</a><a class="btn btn-default bnt-choice-message" data-value="video">Vidéo</a>
|
||||
</div>
|
||||
<div class="col s12">
|
||||
<div class="col-bordered">
|
||||
<div class="blockanswer blockanswer-video">
|
||||
<a class="btn btn-default bnt-choice-video" data-value="webcam" href="#">Enregistrer une vidéo</a>
|
||||
<a class="btn btn-default bnt-choice-video" data-value="upload" href="#">Importer une vidéo</a>
|
||||
<a class="btn btn-default bnt-choice-video" data-value="videotheque" ref="#">Choisir depuis la videothèque</a>
|
||||
</div>
|
||||
<div class="blockanswer blockanswer-message">
|
||||
<div class="sender">De : {{ app.user.firstname }} {{ app.user.lastname }}</div>
|
||||
{{ form_start(form) }}
|
||||
{{ form_rest(form) }}
|
||||
<button type="submit" class="btn btn-default">Envoyer</button>
|
||||
<div class="bottom-form">
|
||||
<button type="submit" class="btn btn-default disabled">Envoyer</button>
|
||||
</div>
|
||||
{{ form_end(form) }}
|
||||
</div>
|
||||
{{ form_start(formVideo) }}
|
||||
<div id="blockanswer-video-webcam" class="panel-hide">
|
||||
{% include 'message/message_create_webcam.twig' %}
|
||||
</div>
|
||||
<div id="blockanswer-video-upload" class="panel-hide">
|
||||
{% include 'message/message_create_import.twig' %}
|
||||
</div>
|
||||
<div id="blockanswer-video-videotheque" class="panel-hide">
|
||||
{% include 'message/message_create_videotheque.twig' %}
|
||||
</div>
|
||||
<div id="validFormVideo" class="panel-hide">
|
||||
{{ form_widget(formVideo._token, { 'id': 'token_video' }) }}
|
||||
{{ form_widget(formVideo.status, { 'id': 'contact_talent_status_video' }) }}
|
||||
{{ form_rest(formVideo) }}
|
||||
<div class="bottom-form">
|
||||
<button type="submit" class="btn btn-default disabled">Envoyer</button>
|
||||
</div>
|
||||
</div>
|
||||
{{ form_end(formVideo) }}
|
||||
</div>
|
||||
{#{% if answer.contactMessage %}
|
||||
|
||||
<div class="col s12 m12 l12 m-t-20">
|
||||
<div class="bg-bordered inside-m">
|
||||
<h4 class="no-margin-top">
|
||||
Réponse
|
||||
</h4>
|
||||
<p>
|
||||
{{ answer.contactMessage|nl2br }}
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{% endif %}#}
|
||||
|
||||
</div>
|
||||
<div class="col s12">
|
||||
<h4 class="no-margin-top bordered">{% trans %}label.answer.history.title{% endtrans %}</h4>
|
||||
</div>
|
||||
<div class="col s12">
|
||||
{% if answer.messages %}
|
||||
{% for message in answer.messages %}
|
||||
<div class="col s12 m12 l12 m-t-20">
|
||||
<div class="bg-bordered inside-m">
|
||||
<h4 class="no-margin-top">
|
||||
Réponse : {{ message.status }}
|
||||
</h4>
|
||||
<p>
|
||||
{{ message.content|nl2br }}
|
||||
</p>
|
||||
</div>
|
||||
{% for message in answer.messages if message.status != "DRAFT" %}
|
||||
{% set class = '' %}
|
||||
{% if loop.index > 1 %}
|
||||
{% set class = 'history-hidden' %}
|
||||
{% endif %}
|
||||
<div class="blockanswer-answer {{class}}">
|
||||
<div class="title-answer">
|
||||
{% trans %}label.answer{% endtrans %}{{ message.status|trans }}
|
||||
<span class="date-answer">{% trans %}label.sended{% endtrans %}{{ message.uTime|date('d-m-Y') }}</span>
|
||||
</div>
|
||||
<div class="description-answer">
|
||||
{% if message.video %}
|
||||
<div class="embed-responsive embed-responsive-16by9">
|
||||
<iframe src="https://player.vimeo.com/video/{{ message.video.cdnUrl|replace({ "/videos/": ""}) }}"
|
||||
width="100%" height="300" frameborder="0" webkitallowfullscreen mozallowfullscreen
|
||||
allowfullscreen></iframe>
|
||||
</div>
|
||||
{% endif %}
|
||||
{{ message.content|nl2br }}
|
||||
</div>
|
||||
</div>
|
||||
{% endfor %}
|
||||
{% endif %}
|
||||
</div>
|
||||
<div class="col s12 center-align m-t-30">
|
||||
<a class="bnt btn-round btn-grey-2 link-history-more" href="#" title="{% trans %}label.history.link{% endtrans %}">{% trans %}label.history.link{% endtrans %}</a>
|
||||
</div>
|
||||
</div>
|
||||
{% endblock %}
|
||||
|
||||
{% block javascripts %}
|
||||
{{ parent() }}
|
||||
<script type="text/javascript">
|
||||
var urlDropzone = '{{ path("upload_media_message", {"id": message.getId()}) }}';
|
||||
var urlDelete = '{{ path("delete_media_message", {"id": message.getId() }) }}'
|
||||
var idObject = null;
|
||||
var typeObject = "answer";
|
||||
var videoExist = false;
|
||||
</script>
|
||||
<script src="{{ asset('/js/dropzone.js') }}"></script>
|
||||
<script src="{{ asset('/js/vendors/video.min.js') }}"></script>
|
||||
<script src="{{ asset('/js/vendors/RecordRTC.js') }}"></script>
|
||||
<script src="{{ asset('/js/vendors/videojs.record.js') }}"></script>
|
||||
<script src="{{ asset('/js/vendors/jquery.browser.min.js') }}"></script>
|
||||
<script src="{{ asset('/js/vendors/readmore.min.js') }}"></script>
|
||||
<script src="{{ asset('/js/answer.js') }}"></script>
|
||||
<script type="text/javascript">
|
||||
$(".card-action").click(function(){
|
||||
var idVideo = $(this).data("id");
|
||||
var titleVideo = $(this).data("title");
|
||||
var imgVideo = $(this).data("img");
|
||||
var urlVideo = $(this).data("url");
|
||||
var elem = $(this);
|
||||
form['contact_talent_video'] = 1;
|
||||
$.ajax({
|
||||
type: 'POST',
|
||||
url: '{{ path("link_media_message", {"id": message.getId()}) }}',
|
||||
data: "idVideo="+idVideo,
|
||||
dataType: 'html',
|
||||
success: function (response) {
|
||||
$(".card-action").removeClass('active');
|
||||
elem.addClass('active');
|
||||
Materialize.toast('Vidéo bien associé à la réponse', 4000);
|
||||
if($("#submit").hasClass('disabled')){
|
||||
$("#submit").removeClass('disabled');
|
||||
$("#submit").addClass('pulse');
|
||||
}
|
||||
},
|
||||
error: function (response, xhr, ajaxOptions, thrownError) {
|
||||
Materialize.toast('Erreur lors de l\'association de la vidéo!', 4000);
|
||||
}
|
||||
});
|
||||
});
|
||||
$('.bnt-choice-message').on('click',function(){
|
||||
var type = $(this).data('value');
|
||||
$('.bnt-choice-message').removeClass('btn-active');
|
||||
$('.bnt-choice-video').removeClass('active');
|
||||
$(this).addClass('btn-active');
|
||||
$(".panel-hide").removeClass('active');
|
||||
$(".panel-hide").stop().fadeOut();
|
||||
$('.blockanswer').stop().fadeOut('normal',function(){
|
||||
$('.blockanswer-'+type).stop().fadeIn();
|
||||
if(type == 'video'){
|
||||
$('.bnt-choice-video:first').click();
|
||||
}
|
||||
});
|
||||
});
|
||||
$('.blockanswer-video').css('display','none');
|
||||
$('.bnt-choice-video').on('click',function(e){
|
||||
e.preventDefault();
|
||||
var type = $(this).data('value');
|
||||
$('.bnt-choice-video').removeClass('active');
|
||||
$(this).addClass('active');
|
||||
$(".panel-hide").removeClass('active');
|
||||
$('#blockanswer-video-'+type).addClass('active');
|
||||
$(".panel-hide").not(".active").stop().fadeOut('normal',function(){
|
||||
$('#blockanswer-video-'+type).stop().fadeIn('fast');
|
||||
if(type=="webcam"){
|
||||
$('#blockanswer-video-upload').stop().fadeIn('fast');
|
||||
}
|
||||
$('#validFormVideo').stop().fadeIn('fast');
|
||||
|
||||
});
|
||||
});
|
||||
$('.link-history-more').on('click',function(e) {
|
||||
e.preventDefault();
|
||||
$('.history-hidden').fadeIn();
|
||||
$(this).fadeOut();
|
||||
});
|
||||
|
||||
document.getElementsByName("contact_talent[message]")[0].addEventListener('change', verifySubmitButton);
|
||||
$('#contact_talent_status').on('change',verifySubmitButton);
|
||||
|
||||
var form = [];
|
||||
form['contact_talent_message'] = 0;
|
||||
form['contact_talent_video'] = 0;
|
||||
form['contact_talent_status_video'] = 0;
|
||||
form['contact_talent_status'] = 0;
|
||||
function verifySubmitButton(){
|
||||
if(this.value && this.value != 0){
|
||||
form[this.id] = 1;
|
||||
} else {
|
||||
form[this.id] = 0;
|
||||
}
|
||||
if(form['contact_talent_message'] + form['contact_talent_status'] >= 2){
|
||||
$('.blockanswer-message .btn').removeClass('disabled');
|
||||
} else {
|
||||
$('.blockanswer-message .btn').addClass('disabled');
|
||||
}
|
||||
}
|
||||
|
||||
$('#contact_talent_status_video').on('change',verifyVideoSubmitButton);
|
||||
function verifyVideoSubmitButton(){
|
||||
if(this.value && this.value != 0){
|
||||
form[this.id] = 1;
|
||||
} else {
|
||||
form[this.id] = 0;
|
||||
}
|
||||
if(form['contact_talent_video'] + form['contact_talent_status_video'] >= 2){
|
||||
$('#validFormVideo .btn').removeClass('disabled');
|
||||
} else {
|
||||
$('#validFormVideo .btn').addClass('disabled');
|
||||
}
|
||||
}
|
||||
|
||||
$('.message-answer').readmore({
|
||||
speed: 75,
|
||||
lessLink: '<a href="#" class="link-message-more">Fermer</a>',
|
||||
moreLink: '<a href="#" class="link-message-more">{% trans %}label.link.readmore{% endtrans %}</a>',
|
||||
blockProcessed: function(element,collapsable){
|
||||
console.log(element);
|
||||
console.log(collapsable);
|
||||
if(collapsable == false){
|
||||
$('.message-answer').readmore('destroy');
|
||||
}
|
||||
}
|
||||
});
|
||||
</script>
|
||||
{% endblock %}
|
||||
@@ -2,7 +2,7 @@
|
||||
|
||||
|
||||
{% block content %}
|
||||
<div class="fluid-container bg-grey-3 dashboardWrapper">
|
||||
<div class="fluid-container bg-grey-3 dashboardWrapper dashboardCompanyWrapper">
|
||||
<div class="container">
|
||||
<div class="row flexcontainer">
|
||||
{% include "company/menu.html.twig" ignore missing %}
|
||||
|
||||
@@ -68,11 +68,11 @@
|
||||
- {{ company.addresses.billing.country|country }}</p>
|
||||
{% endif %}
|
||||
</div>
|
||||
<div class="col s12 profil-links">
|
||||
<div class="col s12 profil-links center-align">
|
||||
{% if company.website %}
|
||||
<a target="_blank" href="{{ company.website }}" class="td-none">
|
||||
<span class="fa-stack fa-lg">
|
||||
<i class="fa fa-circle fa-stack-2x z-depth-2"></i>
|
||||
<i class="fa fa-circle fa-stack-2x"></i>
|
||||
<i class="fa fa-link fa-stack-1x fa-inverse"></i>
|
||||
</span>
|
||||
</a>
|
||||
@@ -130,20 +130,18 @@
|
||||
<div class="row">
|
||||
<div class="col s12">
|
||||
<div class="col-content p-30">
|
||||
{% if popup_answer_already_send is not empty and popup_answer_already_send[0] == true %}
|
||||
<h3 class="color-blue1 center-align">Votre candidature a bien été envoyée à {{ company.brandname }} !</h3>
|
||||
<div class="col offset-s2 s8 center-align">
|
||||
<div class="embed-responsive embed-responsive-16by9">
|
||||
<div class="col s12">
|
||||
<iframe src="https://player.vimeo.com/video/249822507"
|
||||
width="100%" height="640" frameborder="0"></iframe>
|
||||
</div>
|
||||
<h3 class="color-blue1 center-align">Votre candidature a bien été envoyée à {{ company.brandname }} !</h3>
|
||||
<div class="col offset-s2 s8 center-align">
|
||||
<div class="embed-responsive embed-responsive-16by9">
|
||||
<div class="col s12">
|
||||
<iframe src="https://player.vimeo.com/video/249822507"
|
||||
width="100%" height="640" frameborder="0"></iframe>
|
||||
</div>
|
||||
<a href="{{ path('talent_dashboard') }}" class="btn btn-default m-t-20">Accéder à mon profil</a>
|
||||
<br /><br />
|
||||
<a class="text modal-action modal-close">Fermer</a>
|
||||
</div>
|
||||
{% endif %}
|
||||
<a href="{{ path('talent_dashboard') }}" class="btn btn-default m-t-20">Accéder à mon profil</a>
|
||||
<br /><br />
|
||||
<a class="text modal-action modal-close">Fermer</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -0,0 +1,20 @@
|
||||
<div class="row bg-bordered p-0">
|
||||
<ul class="nav-tabs">
|
||||
<li class="{% if tab == 1 %} active {% endif %} col s3">
|
||||
<a {% if tab == 1 %}class="active"{% endif %} target="_self"
|
||||
href="{{ path('company_ad') }}">
|
||||
{{ 'company.title.ads.label'|trans }}
|
||||
</a>
|
||||
</li>
|
||||
<li class="{% if tab == 2 %} active {% endif %} col s3">
|
||||
<a {% if tab == 2 %}class="active"{% endif %} target="_self" href="{{ path('company_answer_list') }}">
|
||||
{{ 'company.menu.answers.label'|trans }}
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
<div class="col s4 right m-t-10">
|
||||
<a class="btn-square" target="_self" href="{{ path('company_ad_create') }}">
|
||||
<i class="fa fa-plus"></i> {{ 'ad.company.add.label'|trans }}
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
@@ -46,9 +46,9 @@
|
||||
<span class="clearfix"></span>
|
||||
<div class="keywords">
|
||||
{% if a.publicTag %}
|
||||
{% for keyword in a.publicTag %}
|
||||
{% for tag in a.publicTag %}
|
||||
<div class="chip">
|
||||
{{ keyword }}
|
||||
<a href="{{ path('ad_search_result',{'tag':tag }) }}">{{ tag }}</a>
|
||||
</div>
|
||||
{% endfor %}
|
||||
{% endif %}
|
||||
|
||||
@@ -52,7 +52,9 @@
|
||||
<div class="col s11 col-noPadding" style="position:relative;">
|
||||
<div class="frame" id="basic">
|
||||
<ul class="slidee">{% for tag in a.publicTag %}
|
||||
<li class="chip">{{ tag }}</li>{% endfor %}</ul>
|
||||
<li class="chip">
|
||||
<a href="{{ path('ad_search_result',{'tag':tag }) }}" class="hover-blue2">{{ tag }}</a>
|
||||
</li>{% endfor %}</ul>
|
||||
</div>
|
||||
<div class="controls center">
|
||||
<a class="prev"><i class="fa fa-arrow-circle-left" aria-hidden="true"></i></a>
|
||||
|
||||
@@ -76,9 +76,8 @@
|
||||
</div>
|
||||
<div class="col s12">
|
||||
{% for tag in ad.publicTag %}
|
||||
<p class="chip">{{ tag }}</p>
|
||||
<p class="chip"><a href="{{ path('ad_search_result',{'tag':tag }) }}" class="hover-blue2">{{ tag }}</a></p>
|
||||
{% endfor %}
|
||||
|
||||
<div class="item-detail-description">
|
||||
<h3 class="blue-text">Détails de l'offre d'emploi</h3>
|
||||
<p>{{ ad.description|nl2br }}</p>
|
||||
@@ -100,7 +99,7 @@
|
||||
{% elseif not is_granted('ROLE_COMPANY') %}
|
||||
{% if not ad.isPromoted %}
|
||||
<p class="item-detail-reply">
|
||||
<a href="{{ path('talent_answer_create',{'id': ad.getId()}) }}"
|
||||
<a title="postuler-bottom" href="{{ path('talent_answer_create',{'id': ad.getId()}) }}"
|
||||
class="btn btn-default">
|
||||
Postuler
|
||||
</a>
|
||||
|
||||
@@ -58,7 +58,7 @@
|
||||
{% elseif not is_granted('ROLE_COMPANY') %}
|
||||
{% if not ad.isPromoted %}
|
||||
<p class="item-detail-reply">
|
||||
<a href="{{ path('talent_answer_create',{'id': ad.getId()}) }}"
|
||||
<a title="postuler-side" href="{{ path('talent_answer_create',{'id': ad.getId()}) }}"
|
||||
class="btn btn-default">
|
||||
Postuler
|
||||
</a>
|
||||
|
||||
@@ -32,15 +32,22 @@
|
||||
<div class="row row-tags row-noMargin">
|
||||
<div class="col s11 col-noPadding" style="position:relative;">
|
||||
<div class="chip center-align">
|
||||
{% set nbAds = c.getPublishedAds|length %}
|
||||
{% set fragment = "" %}
|
||||
{% if nbAds > 0 %}
|
||||
{% set fragment = "offers" %}
|
||||
{% endif %}
|
||||
<a class="td-none color-grey3"
|
||||
href="{{ path('company_show',{'alias': c.alias, '_fragment':'offers' }) }}">
|
||||
href="{{ path('company_show',{'alias': c.alias, '_fragment': fragment }) }}">
|
||||
{% set nbAds = c.getPublishedAds|length %}
|
||||
{% if nbAds > 1 %}
|
||||
<strong>{{ c.getPublishedAds|length }} offres d'emploi en
|
||||
cours</strong>
|
||||
{% else %}
|
||||
{% elseif nbAds == 1 %}
|
||||
<strong>{{ c.getPublishedAds|length }} offre d'emploi en
|
||||
cours</strong>
|
||||
{% else %}
|
||||
<strong>candidature spontanée</strong>
|
||||
{% endif %}
|
||||
</a>
|
||||
</div>
|
||||
|
||||
@@ -7,6 +7,7 @@
|
||||
<li><a href="{{ path('page_cvVideo') }}" title="Le Cv vidéo">Le CV vidéo</a></li>
|
||||
<li><a href="{{ path('page_reussirCVvideo') }}" title="Comment faire son CV Vidéo ?">Comment faire son CV Vidéo ?</a></li>
|
||||
<li><a href="{{ path('page_accompagnementTalent') }}" title="Accompagnement talent">Accompagnement</a></li>
|
||||
<li><a href="{{ path('talent_cv_import') }}" title="Créer mon CV vidéo">Créer mon CV vidéo</a></li>
|
||||
</ul>
|
||||
<ul id='dropdown_company' class='dropdown-content'>
|
||||
<li><a href="{{ path('company_list') }}" title="Les entreprises qui recrutent">Les entreprises qui recrutent</a></li>
|
||||
|
||||
@@ -9,16 +9,17 @@
|
||||
{# VIDEO #}
|
||||
<div class="col l12 m12 s12 home-content col-noPadding">
|
||||
<div id="homeTeaser" class="valign-wrapper">
|
||||
<h1 class="white-text center-align">1ère plateforme pour l’emploi <span>100% vidéo</span></h1><br />
|
||||
<h1 class="white-text center-align">1ère plateforme pour l’emploi
|
||||
<span>100% vidéo</span></h1><br/>
|
||||
<div class="link-home-head">
|
||||
<a data-target="modal_concept" href="#!" class="btn btn-default btn-round btn-concept modal-trigger">
|
||||
Le concept en vidéo
|
||||
<img src="{{asset('img/bouton-play.png')}}" />
|
||||
<img src="{{asset('img/bouton-play.png')}}"/>
|
||||
</a>
|
||||
</div>
|
||||
<div class="header-video-inner">
|
||||
<video loop="" preload="metadata" autoplay="" id="vid" muted>
|
||||
<source src="/img/home_video.mp4" type="video/mp4">
|
||||
<video loop="" preload="metadata" autoplay="" id="vid" muted="muted">
|
||||
<source src="/img/home_video.mp4" type="video/mp4">
|
||||
</video>
|
||||
</div>
|
||||
|
||||
@@ -26,7 +27,9 @@
|
||||
{# RECHERCHE #}
|
||||
<div class="fluid-container bg-grey-3 homeSearchWrapper">
|
||||
<div id="homeSearch" class="container">
|
||||
{% include 'form/search_form.html.twig' with {'searchform': searchform } %}
|
||||
{% include 'form/search_form.html.twig' with {
|
||||
'searchform' : searchform
|
||||
} %}
|
||||
</div>
|
||||
</div>
|
||||
{# BLOC OFFRE EMPLOI CARDS #}
|
||||
@@ -41,16 +44,17 @@
|
||||
<div class="row">
|
||||
<div class="col s12 col-noPadding">
|
||||
<div class="owl-carousel owl-carousel-home">
|
||||
{% if ads|length > 0 %}
|
||||
{% include 'default/ad_card.html.twig' with {'ads': ads } %}
|
||||
{% if ads | length > 0 %}
|
||||
{% include 'default/ad_card.html.twig' with {
|
||||
'ads' : ads
|
||||
} %}
|
||||
{% endif %}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row center-align">
|
||||
<div class="col s12">
|
||||
<a href="{{ path('ad_search_result') }}" title="Découvrir toutes les offres d'emploi"
|
||||
class="btn btn-default btn-round btn-all-jobs">Voir les offres
|
||||
<a href="{{ path('ad_search_result') }}" title="Découvrir toutes les offres d'emploi" class="btn btn-default btn-round btn-all-jobs">Voir les offres
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
@@ -70,8 +74,10 @@
|
||||
<div class="row">
|
||||
<div class="col s12 col-noPadding">
|
||||
<div class="owl-carousel owl-carousel-home home-company-carousel">
|
||||
{% if companies|length > 0 %}
|
||||
{% include 'default/company_card.html.twig' with {'companies': companies } %}
|
||||
{% if companies | length > 0 %}
|
||||
{% include 'default/company_card.html.twig' with {
|
||||
'companies' : companies
|
||||
} %}
|
||||
{% endif %}
|
||||
</div>
|
||||
</div>
|
||||
@@ -86,22 +92,31 @@
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
{# TALENTS #}
|
||||
<div id="liste-talents" class="bg-dark2 button-plus">
|
||||
<div class="container">
|
||||
<div class="container">
|
||||
<div class="row center-align">
|
||||
<div class="col s12"><h2 class="blue-text no-margin-top">Les talents</h2></div>
|
||||
<h3 class="subtitles-homepage">Découvrez leurs CV vidéo et vidéo de motivation.</h3>
|
||||
<div class="col s12">
|
||||
<h2 class="blue-text no-margin-top">Les talents à la une</h2>
|
||||
</div>
|
||||
<h3 class="subtitles-homepage">Découvrez leur CV vidéo et vidéo de motivation.</h3>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="owl-carousel owl-carousel-home home-talent-carousel">
|
||||
{% if talents|length > 0 %}
|
||||
{% include 'default/talent_card.html.twig' with {'talents': talents } %}
|
||||
{% if talents | length > 0 %}
|
||||
{% include 'default/talent_card.html.twig' with {
|
||||
'talents' : talents
|
||||
} %}
|
||||
{% endif %}
|
||||
</div>
|
||||
</div>
|
||||
<div class="row center-align">
|
||||
<h2>Rejoignez une communauté de plus de <strong>500</strong> candidats</h2>
|
||||
<div class="col s12 m-t-50">
|
||||
<a href="#!" title="Créer Mon profil" class="btn btn-default btn-round btn-create-account">Créer mon profil</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{# TERRITOIRE #}
|
||||
@@ -112,25 +127,31 @@
|
||||
<h2 class="blue-text no-margin-top">Les territoires</h2>
|
||||
<h3 class="subtitles-homepage">Venez vivre et travailler chez nous.</h3>
|
||||
{% if territories %}
|
||||
<div class="owl-carousel owl-carousel-home territory-carousel">
|
||||
{% for territory in territories if territory.presentationVideo and territory.isPrivate != true %}
|
||||
<div class="item">
|
||||
<div class="embed-responsive embed-responsive-16by9">
|
||||
<div class="col s12">
|
||||
<iframe src="https://player.vimeo.com/video/{{ territory.presentationVideo.cdnUrl|replace({ "/videos/": ""}) }}"
|
||||
width="100%" height="640" frameborder="0" webkitallowfullscreen mozallowfullscreen
|
||||
allowfullscreen></iframe>
|
||||
<div class="owl-carousel owl-carousel-home territory-carousel">
|
||||
{% for t in territories if t.presentationVideo and t.isPrivate != true %}
|
||||
<div class="item">
|
||||
{% if t.presentationVideo.thumbnails.0. sizes is defined %}
|
||||
<a href="{{ path('territory_show',{'alias': t.alias }) }}" title="{{ t.brandname }}">
|
||||
<img src="{{ t.presentationVideo.thumbnails.0.sizes.4.link }}" alt="{{ t.brandName }}" class="overlay-hover"/>
|
||||
<span class="playerbtn" style="margin-top: -55px;"></span>
|
||||
</a>
|
||||
{% endif %}
|
||||
{% if t.extra.terType is defined %}
|
||||
<div class="m-t-15 fs-12 text-100">{{ t.extra.terType|upper }}</div>
|
||||
{% endif %}
|
||||
<div class="m-t-5 hover-none">
|
||||
<a href="{{ path('territory_show',{'alias': t.alias }) }}" class="color-white td-none">{{ t.brandName|upper }}</a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="m-t-30">
|
||||
<a title="Voir les territoires" class="btn btn-default" href="{{ path('territory_list') }}">
|
||||
Voir les territoires</span>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
{% endfor %}
|
||||
</div>
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
</div>
|
||||
<div class="m-t-30">
|
||||
<a title="Voir les territoires" class="btn btn-default" href="{{ path('territory_list') }}">
|
||||
<span>
|
||||
Voir les territoires</span>
|
||||
</a>
|
||||
</div>
|
||||
{% endif %}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -140,23 +161,23 @@
|
||||
<div class="container">
|
||||
<div class="blocs-texte-video">
|
||||
<div class="row center-align">
|
||||
<div class="col s12"><h2 class="blue-text no-margin-top no-margin-bottom">Les conseils de votre
|
||||
<span>talentstubeuse</span></h2></div>
|
||||
<div class="col s12">
|
||||
<h2 class="blue-text no-margin-top no-margin-bottom">Les conseils de votre
|
||||
<span>talentstubeuse</span></h2>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row flexcontainer row-bloc-video-1 row-noMargin">
|
||||
<div class="col l6 m12 s12 col-noPadding">
|
||||
<a href="#!" data-video="#video2" class="img_content embed-responsive embed-responsive-16by9" style="background:url(/img-cnt/cv_video.jpg);background-size:cover;">
|
||||
<span class="playerbtn"></span>
|
||||
</a>
|
||||
<iframe style="display:block;" class="hide" id="video2" src="https://player.vimeo.com/video/215657518?title=0&byline=0&portrait=0" width="100%"
|
||||
height="344" frameborder="0" webkitallowfullscreen mozallowfullscreen
|
||||
allowfullscreen></iframe>
|
||||
<iframe style="display:block;" class="hide" id="video2" src="https://player.vimeo.com/video/286344340?title=0&byline=0&portrait=0" width="100%" height="344" frameborder="0" webkitallowfullscreen="webkitallowfullscreen" mozallowfullscreen="mozallowfullscreen" allowfullscreen="allowfullscreen"></iframe>
|
||||
</div>
|
||||
<div class="col l6 m12 s12 valign-wrapper">
|
||||
<div class="inside-m valign">
|
||||
<h2 class="no-margin-top">CV vidéo
|
||||
</h2>
|
||||
<p>Devenez acteur de vos talents, montrez qui vous êtes !</p>
|
||||
<p>Devenez acteur de vos talents, montrez qui vous êtes !</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="clearfix"></div>
|
||||
@@ -174,9 +195,7 @@
|
||||
<a href="#!" data-video="#video1" class="img_content embed-responsive embed-responsive-16by9" style="background:url(/img-cnt/offre_emploi.jpg);background-size:cover;">
|
||||
<span class="playerbtn"></span>
|
||||
</a>
|
||||
<iframe style="display:block;" class="hide" id="video1" src="https://player.vimeo.com/video/215657499?title=0&byline=0&portrait=0" width="100%"
|
||||
height="344" frameborder="0" webkitallowfullscreen mozallowfullscreen
|
||||
allowfullscreen></iframe>
|
||||
<iframe style="display:block;" class="hide" id="video1" src="https://player.vimeo.com/video/215657499?title=0&byline=0&portrait=0" width="100%" height="344" frameborder="0" webkitallowfullscreen="webkitallowfullscreen" mozallowfullscreen="mozallowfullscreen" allowfullscreen="allowfullscreen"></iframe>
|
||||
</div>
|
||||
<div class="clearfix"></div>
|
||||
</div>
|
||||
@@ -185,9 +204,7 @@
|
||||
<a href="#!" data-video="#video3" class="img_content embed-responsive embed-responsive-16by9" style="background:url(https://i.vimeocdn.com/video/653721887_1024x573.jpg);background-size:cover;">
|
||||
<span class="playerbtn"></span>
|
||||
</a>
|
||||
<iframe style="display:block;" class="hide" id="video3" src="https://player.vimeo.com/video/232618030" width="100%"
|
||||
height="344" frameborder="0" webkitallowfullscreen mozallowfullscreen
|
||||
allowfullscreen></iframe>
|
||||
<iframe style="display:block;" class="hide" id="video3" src="https://player.vimeo.com/video/232618030" width="100%" height="344" frameborder="0" webkitallowfullscreen="webkitallowfullscreen" mozallowfullscreen="mozallowfullscreen" allowfullscreen="allowfullscreen"></iframe>
|
||||
</div>
|
||||
<div class="col l6 m12 s12 valign-wrapper">
|
||||
<div class="inside-m valign">
|
||||
@@ -207,8 +224,7 @@
|
||||
<div id="modal_concept" class="modal modal-fixed-footer">
|
||||
<div class="modal-content">
|
||||
<div class="video-container">
|
||||
<iframe id="iframe_concept" src="https://player.vimeo.com/video/215638758?title=0&byline=0&portrait=0" frameborder="0" webkitallowfullscreen mozallowfullscreen
|
||||
allowfullscreen></iframe>
|
||||
<iframe id="iframe_concept" src="https://player.vimeo.com/video/215638758?title=0&byline=0&portrait=0" frameborder="0" webkitallowfullscreen="webkitallowfullscreen" mozallowfullscreen="mozallowfullscreen" allowfullscreen="allowfullscreen"></iframe>
|
||||
</div>
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
|
||||
@@ -9,9 +9,8 @@
|
||||
{% elseif user.photo %}
|
||||
<img class="circle z-depth-3" src="{{ user.webPath | imagine_filter('profile_square') }}" alt="{{ user.firstname }} {{ user.lastname }}"/>
|
||||
{% else %}
|
||||
<img class="circle z-depth-3"
|
||||
src="{{ asset('/img/portrait-carre.png') }}"
|
||||
alt="{{ user.firstname }} {{ user.lastname }}"/>
|
||||
<div class="circle-letters font-2">{{ user.firstname|first|upper }}{{ user.lastname|first|upper }}</div>
|
||||
|
||||
{% endif %}
|
||||
</a>
|
||||
<p class="item-list-job item-list-name center-align">
|
||||
@@ -20,13 +19,13 @@
|
||||
{{ user.firstname }} {{ user.lastname }}
|
||||
</a>
|
||||
</p>
|
||||
{% if talent.publicTag %}
|
||||
{#{% if talent.publicTag %}
|
||||
{% for keyword in talent.publicTag %}
|
||||
{% if keyword != "" %}
|
||||
<div class="chip">{{ keyword }}</div>
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
{% endif %}
|
||||
{% endif %}#}
|
||||
</div>
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
@@ -3,8 +3,21 @@
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
|
||||
<title></title>
|
||||
<!--[if !mso]><!-->
|
||||
<style type="text/css">
|
||||
|
||||
@import url(https://fonts.googleapis.com/css?family=Raleway);
|
||||
</style>
|
||||
<style type="text/css">
|
||||
@media only screen and (max-width:480px) {
|
||||
@-ms-viewport { width:320px; }
|
||||
@viewport { width:320px; }
|
||||
}
|
||||
</style>
|
||||
<link href="https://fonts.googleapis.com/css?family=Raleway" rel="stylesheet" type="text/css">
|
||||
<style type="text/css">
|
||||
*{
|
||||
font-family: 'Raleway';
|
||||
}
|
||||
#outlook a { padding: 0; }
|
||||
.ReadMsgBody { width: 100%; }
|
||||
.ExternalClass { width: 100%; }
|
||||
@@ -16,25 +29,31 @@
|
||||
display: block;
|
||||
margin: 13px 0;
|
||||
}
|
||||
.btn-default {
|
||||
padding: 12px 30px;
|
||||
border-radius: 30px;
|
||||
height: 48px;
|
||||
line-height: 48px;
|
||||
background: #1689fb;
|
||||
font-size: 16px;
|
||||
color: #FFF;
|
||||
text-decoration: none;
|
||||
}
|
||||
.btn-white {
|
||||
background: #FFF;
|
||||
color: #1689fb;
|
||||
border: 1px solid #1689fb;
|
||||
padding: 10px 29px;
|
||||
}
|
||||
|
||||
</style>
|
||||
<!--[if !mso]><!-->
|
||||
<style type="text/css">
|
||||
@import url(https://fonts.googleapis.com/css?family=Ubuntu:400,500,700,300);
|
||||
</style>
|
||||
<style type="text/css">
|
||||
@media only screen and (max-width:480px) {
|
||||
@-ms-viewport { width:320px; }
|
||||
@viewport { width:320px; }
|
||||
}
|
||||
</style>
|
||||
<link href="https://fonts.googleapis.com/css?family=Ubuntu:400,500,700,300" rel="stylesheet" type="text/css">
|
||||
|
||||
<!--<![endif]-->
|
||||
<style type="text/css">
|
||||
@media only screen and (min-width:480px) {
|
||||
.mj-column-per-100, * [aria-labelledby="mj-column-per-100"] { width:100%!important; }
|
||||
}</style></head>
|
||||
<body id="YIELD_MJML" style="background: #F2F2F2;"><div class="mj-body" style="background-color:#F2F2F2;"><!--[if mso]>
|
||||
<body id="YIELD_MJML" style="background: #F2F2F2;font-family:'Raleway';"><div class="mj-body" style="background-color:#F2F2F2;"><!--[if mso]>
|
||||
<table border="0" cellpadding="0" cellspacing="0" width="600" align="center" style="width:600px;"><tr><td>
|
||||
<![endif]--><div style="margin:0 auto;max-width:600px;background:#F2F2F2;"><table class="" cellpadding="0" cellspacing="0" style="width:100%;font-size:0px;background:#F2F2F2;" align="center"><tbody><tr><td style="text-align:center;vertical-align:top;font-size:0;padding:0px;"><!--[if mso]>
|
||||
<table border="0" cellpadding="0" cellspacing="0"><tr><td style="width:600px;">
|
||||
@@ -57,7 +76,7 @@
|
||||
<table border="0" cellpadding="0" cellspacing="0" width="600" align="center" style="width:600px;"><tr><td>
|
||||
<![endif]--><div style="margin:0 auto;max-width:600px;background:#FFFFFF;"><table class="" cellpadding="0" cellspacing="0" style="width:100%;font-size:0px;background:#FFFFFF;" align="center"><tbody><tr><td style="text-align:center;vertical-align:top;font-size:0;padding:0px;"><!--[if mso]>
|
||||
<table border="0" cellpadding="0" cellspacing="0"><tr><td style="width:600px;">
|
||||
<![endif]--><div style="vertical-align:top;display:inline-block;font-size:13px;text-align:left;width:100%;" class="mj-column-per-100" aria-labelledby="mj-column-per-100"><table width="100%"><tbody><tr><td style="font-size:0;padding:20px 35px 20px 35px;" align="left"><div class="mj-content" style="cursor:auto;color:#534F4F;font-family:Trebuchet,Helvetica,sans-serif;font-size:14px;line-height:22px;">
|
||||
<![endif]--><div style="vertical-align:top;display:inline-block;font-size:13px;text-align:left;width:100%;" class="mj-column-per-100" aria-labelledby="mj-column-per-100"><table width="100%"><tbody><tr><td style="font-size:0;padding:20px 35px 20px 35px;" align="left"><div class="mj-content" style="cursor:auto;color:#534F4F;font-family:Raleway;font-size:14px;line-height:22px;">
|
||||
{% block content %}{% endblock %}<!--[if mso]>
|
||||
</td></tr></table>
|
||||
<![endif]--></td></tr></tbody></table></div><!--[if mso]>
|
||||
@@ -67,7 +86,7 @@
|
||||
<table border="0" cellpadding="0" cellspacing="0" width="600" align="center" style="width:600px;"><tr><td>
|
||||
<![endif]--><div style="margin:0 auto;max-width:600px;background:#FFFFFF;"><table class="" cellpadding="0" cellspacing="0" style="width:100%;font-size:0px;background:#FFFFFF;" align="center"><tbody><tr><td style="text-align:center;vertical-align:top;font-size:0;padding:0px;"><!--[if mso]>
|
||||
<table border="0" cellpadding="0" cellspacing="0"><tr><td style="width:600px;">
|
||||
<![endif]--><div style="vertical-align:top;display:inline-block;font-size:13px;text-align:left;width:100%;" class="mj-column-per-100" aria-labelledby="mj-column-per-100"><table width="100%"><tbody><tr><td style="font-size:0;padding:0px 35px 0px 35px;" align="center"><div class="mj-content" style="cursor:auto;color:#534F4F;font-family:Trebuchet,Helvetica,sans-serif;font-size:14px;line-height:22px;"><p>Suivez-nous !</p>
|
||||
<![endif]--><div style="vertical-align:top;display:inline-block;font-size:13px;text-align:left;width:100%;" class="mj-column-per-100" aria-labelledby="mj-column-per-100"><table width="100%"><tbody><tr><td style="font-size:0;padding:0px 35px 0px 35px;" align="center"><div class="mj-content" style="cursor:auto;color:#534F4F;font-family:Raleway;font-size:14px;line-height:22px;"><p>Suivez-nous !</p>
|
||||
<p>
|
||||
<a style="margin:10px 20px 22px 20px;" href="https://www.facebook.com/TalentsTuber/"><img src="{{ absolute_url(asset('img/mail/facebook.png')) }}" alt="Facebook"></a>
|
||||
<a style="margin:10px 20px 22px 20px;" href="https://twitter.com/TalentsTuber"><img src="{{ absolute_url(asset('img/mail/twitter.png')) }}" alt="Twitter"></a>
|
||||
@@ -81,7 +100,7 @@
|
||||
<table border="0" cellpadding="0" cellspacing="0" width="600" align="center" style="width:600px;"><tr><td>
|
||||
<![endif]--><div style="margin:0 auto;max-width:600px;background:#F2F2F2;"><table class="" cellpadding="0" cellspacing="0" style="width:100%;font-size:0px;background:#F2F2F2;" align="center"><tbody><tr><td style="text-align:center;vertical-align:top;font-size:0;padding:0px;"><!--[if mso]>
|
||||
<table border="0" cellpadding="0" cellspacing="0"><tr><td style="width:600px;">
|
||||
<![endif]--><div style="vertical-align:top;display:inline-block;font-size:13px;text-align:left;width:100%;" class="mj-column-per-100" aria-labelledby="mj-column-per-100"><table width="100%"><tbody><tr><td style="font-size:0;padding:20px 35px 20px 35px;" align="center"><div class="mj-content" style="cursor:auto;color:#7E7878;font-family:Trebuchet,Helvetica,sans-serif;font-size:14px;line-height:22px;"><p style="font-weight:bold;">Talents Tube</p>
|
||||
<![endif]--><div style="vertical-align:top;display:inline-block;font-size:13px;text-align:left;width:100%;" class="mj-column-per-100" aria-labelledby="mj-column-per-100"><table width="100%"><tbody><tr><td style="font-size:0;padding:20px 35px 20px 35px;" align="center"><div class="mj-content" style="cursor:auto;color:#7E7878;font-family:Raleway;font-size:14px;line-height:22px;"><p style="font-weight:bold;">Talents Tube</p>
|
||||
<p>Place Albert Einstein 6 Le Prisme CP60 PIBS 6 CS 72001 - 56038 VANNES</p>
|
||||
<p><a style="text-decoration:none;color:#7E7878;font-weight:bold;" href="mailto:contact@talentstube.com">contact@talentstube.com</a></p></div></td></tr></tbody></table></div><!--[if mso]>
|
||||
</td></tr></table>
|
||||
|
||||
@@ -2,17 +2,47 @@
|
||||
|
||||
{% block content %}
|
||||
{% if type == 'html' %}
|
||||
<p>{{ user.getCivility()|trans }} {{ user.lastname }} {{ user.firstname }}</p>
|
||||
<p>{{ message|nl2br}}</p>
|
||||
<br><br>
|
||||
<p>Informations : La personne qui vous à contacté ne connaîtra pas votre email tant que vous ne lui aurez pas
|
||||
répondu</p>
|
||||
|
||||
<p>Pensez également à bien vérifier l'identité de votre correspondant pour éviter toute tentative de phishing</p>
|
||||
|
||||
{% if video is not null %}
|
||||
<div style="margin-left: -35px; margin-right: -35px;margin-top: -20px;">
|
||||
{% if video.thumbnails.0.sizes is defined %}
|
||||
<img width="100%" src="{{ video.thumbnails.0.sizes.4.link }}"
|
||||
alt="réponse vidéo"/>
|
||||
{% endif %}
|
||||
</div>
|
||||
<br />
|
||||
Bonjour {{ user.firstname }} {{ user.lastname }},<br /><br />
|
||||
<strong>Vous avez reçu une réponse vidéo de l’entreprise {{ message.sender.company.brandname }}.</strong><br />
|
||||
Découvez la réponse vidéo en cliquant sur le bouton ci-dessous.
|
||||
<br/>
|
||||
<br/>
|
||||
<div style="text-align:center;">
|
||||
<a class="btn btn-default" href="{{ path('talent_ad_detail',{'alias': answer.ad.alias,'id': answer.id }) }}">Visionner la réponse vidéo</a>
|
||||
</div>
|
||||
{% else %}
|
||||
<br />
|
||||
Bonjour {{ user.firstname }} {{ user.lastname }},<br /><br />
|
||||
<strong>Vous avez reçu une réponse de l’entreprise {{ message.sender.company.brandname }}.</strong><br />
|
||||
Découvez la réponse en cliquant sur le bouton ci-dessous.
|
||||
<br/>
|
||||
<br/>
|
||||
<div style="text-align:center;">
|
||||
<a class="btn btn-default" href="{{ path('talent_ad_detail',{'alias': answer.ad.alias,'id': answer.id }) }}">Consulter la réponse</a>
|
||||
</div>
|
||||
{% endif %}
|
||||
<br>
|
||||
<strong>Vous souhaitez contacter l’entreprise ?</strong><br /><br />
|
||||
Cliquez sur le bouton ci-dessous pour envoyer un email à la personne en charge du recrutement.
|
||||
<br/>
|
||||
<br/>
|
||||
<div style="text-align:center;">
|
||||
<a class="btn-default btn-white" href="mailto:{{ message.sender.email }}">Répondre à {{ message.sender.firstname }} {{ message.sender.lastname }}</a>
|
||||
</div>
|
||||
<br />
|
||||
<br />
|
||||
L’équipe Talents Tube
|
||||
{% elseif type == 'plain' %}
|
||||
{{ user.getCivility()|trans }} {{ user.lastname }} {{ user.firstname }}
|
||||
{{ message}}
|
||||
{{ messageText}}
|
||||
{% endif %}
|
||||
|
||||
{% endblock %}
|
||||
@@ -6,8 +6,10 @@
|
||||
<div id="template" class="file-row">
|
||||
<div class="dz-preview">
|
||||
<div id="preview_video">
|
||||
{% if video %}
|
||||
<iframe src="https://player.vimeo.com{{ video.getCdnUrl()|replace({ "videos": "video"}) }}" width="100%" height="300px" frameborder="0" webkitallowfullscreen mozallowfullscreen allowfullscreen></iframe>
|
||||
{% if video is defined %}
|
||||
{% if video is not null %}
|
||||
<iframe src="https://player.vimeo.com{{ video.getCdnUrl()|replace({ "videos": "video"}) }}" width="100%" height="300px" frameborder="0" webkitallowfullscreen mozallowfullscreen allowfullscreen></iframe>
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
</div>
|
||||
<div class="progress">
|
||||
|
||||
@@ -0,0 +1,59 @@
|
||||
{% extends 'base.html.twig' %}
|
||||
{% block content %}
|
||||
<div class="fluid-container bg-grey-3">
|
||||
<div class="container contentWrapper contentPage" id="answerPage">
|
||||
<div class="row">
|
||||
<div class="col s12">
|
||||
<div class="center-align bg-grey-3 m-t-20">
|
||||
<h3 class="color-blue1 m-t-10">Importer</h3>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col s12">
|
||||
<div class="col-content bg-arrow z-depth-2 p-20">
|
||||
<div class="row">
|
||||
<div class="col s12">
|
||||
<h4 class="color-blue1 p-0">
|
||||
<span class="title-bubble">1</span>
|
||||
Importez votre CV Vidéo</h4>
|
||||
</div>
|
||||
<div class="col s10 offset-s1 answer-dropzone">
|
||||
{% include 'media/dropzone.html.twig' with {
|
||||
'deleting' : true
|
||||
} %}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row m-t-40">
|
||||
<div id="form_media" class="col s10 offset-s1 center-align">
|
||||
<button id="submit" class=" btn btn-large btn-default disabled" type="submit">
|
||||
Envoyer mon CV
|
||||
</button><br/><br/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{% endblock %}
|
||||
{% block javascripts %}
|
||||
{{ parent() }}
|
||||
<script type="text/javascript">
|
||||
var urlDropzone = '{{ path("upload_media_default", {"id": app.user.getId()}) }}';
|
||||
var urlDelete = 'null'
|
||||
var idObject = '{{ app.user.getId() }}';
|
||||
var typeObject = "user";
|
||||
var videoExist = false;
|
||||
</script>
|
||||
<script src="{{ asset('/js/dropzone.js') }}"></script>
|
||||
<script src="{{ asset('/js/answer.js') }}"></script>
|
||||
<script type="text/javascript">
|
||||
{% if mustLogin == true %}
|
||||
$('#submit').on('click', function (event) {
|
||||
event.preventDefault();
|
||||
$('#modal_login').modal('open');
|
||||
});
|
||||
{% endif %}
|
||||
</script>
|
||||
{% endblock %}
|
||||
@@ -0,0 +1,39 @@
|
||||
{% extends 'base.html.twig' %}
|
||||
{% block content %}
|
||||
|
||||
{% set title = 'Importer son CV Vidéo' %}
|
||||
{% set route = "media_import_cv" %}
|
||||
|
||||
<div class="fluid-container bg-grey-3">
|
||||
<div class="container contentWrapper contentPage">
|
||||
<div class="row">
|
||||
<div class="col s12">
|
||||
<div class="col-content center-align m-t-20">
|
||||
<h3 class="color-blue1 m-0 m-t-10">{{ title }}</h3>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col s12 m6 ">
|
||||
<div class="col-content p-15 bg-blue-1 center-align whiteColor z-depth-2 choice-answer-item">
|
||||
<img src="{{ asset('img/img_popupcv/webcam_cv_video.svg')}}">
|
||||
<h3>J'enregistre mon CV vidéo !</h3>
|
||||
<p>Suivez nos conseils puis enregistrez votre CV vidéo directement depuis votre webcam.</p>
|
||||
<a href="{{ path(route,{'type': 'webcam' }) }}" class="btn btn-default white">Enregistrer mon CV vidéo</a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col s12 m6">
|
||||
<div class="col-content p-15 center-align z-depth-2 choice-answer-item bg-white">
|
||||
<img src="{{ asset('img/img_popupcv/videotheque_cv_video.svg')}}">
|
||||
<h3>Je possède un CV vidéo !</h3>
|
||||
<p>Importez une vidéo</p>
|
||||
<a href="{{ path(route,{'type': 'import'}) }}" class="btn btn btn-default">Importer mon CV vidéo</a><br/><br/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{% endblock %}
|
||||
{% block javascripts %}
|
||||
{{ parent() }}
|
||||
{% endblock %}
|
||||
@@ -0,0 +1,105 @@
|
||||
{% extends 'base.html.twig' %}
|
||||
{% block content %}
|
||||
<div class="fluid-container bg-grey-3">
|
||||
<div class="container contentWrapper contentPage" id="answerPage">
|
||||
<div class="row">
|
||||
<div class="col s12">
|
||||
<div class="center-align bg-grey-3 m-t-20">
|
||||
<h3 class="color-blue1 m-t-10">J'enregistre mon CV vidéo</h3>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col s12">
|
||||
<div class="col-content bg-arrow z-depth-2 p-20">
|
||||
<div class="row">
|
||||
<div class="col s12">
|
||||
<h4 class="color-blue1 p-0">
|
||||
<span class="title-bubble">1</span>
|
||||
Enregistrez votre cv vidéo</h4>
|
||||
</div>
|
||||
<div class="col m4 offset-m1 s12">
|
||||
<video id="myCvVideo" class="video-js vjs-default-skin"></video>
|
||||
<div class="video-informations-card center-align">
|
||||
<p>Merci de cliquer sur l'icône
|
||||
<span class="vjs-icon-device-perm"></span>
|
||||
afin d'activer votre webcam.</p>
|
||||
<p>Votre webcam activée, lancez l'enregistrement en cliquant sur le bouton rond en bas à gauche du lecteur.</p>
|
||||
<p>Si vous n'êtes pas satisfait(e) de votre CV vidéo après un enregistrement, vous pouvez à tout moment recommencer l'enregistrement.</p>
|
||||
<p>
|
||||
<a class="view-tuto">Revoir le tutoriel</a>
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col m2 hide-on-small-only">
|
||||
<div class="valign-wrapper" style="align-items:center;justify-content: center;height: 300px;width:100%;">
|
||||
<div style="font-size:40px;">
|
||||
<i class="fa fa-arrow-right center-align" aria-hidden="true"></i>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col m4 s12">
|
||||
<video id="preview" controls="true">
|
||||
<span class="vjs-control-text">Play Video</span>
|
||||
</video>
|
||||
<div class="btnContainer center-align" style="display:none;">
|
||||
<a id="saveRecord" href="#!" class="saveVideo btn btn-default">
|
||||
<i class="fa fa-floppy-o" aria-hidden="true"></i> Télécharger mon CV Vidéo
|
||||
</a>
|
||||
<div class="video-informations-card">
|
||||
<p>Une fois téléchargé vous pouvez glisser-déposer votre CV vidéo dans la zone prévue pour lancer le téléchargement.</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-content bg-arrow z-depth-2 p-20">
|
||||
<div class="row">
|
||||
<div class="col s12">
|
||||
<h4 class="color-blue1 p-0">
|
||||
<span class="title-bubble">2</span>
|
||||
Importez votre CV Vidéo</h4>
|
||||
</div>
|
||||
<div class="col s10 offset-s1 answer-dropzone">
|
||||
{% include 'media/dropzone.html.twig' with {
|
||||
'deleting' : true
|
||||
} %}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row m-t-40">
|
||||
<div id="form_media" class="col s10 offset-s1 center-align">
|
||||
<button id="submit" class=" btn btn-large btn-default disabled" type="submit">
|
||||
Envoyer mon CV vidéo
|
||||
</button><br/><br/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{% endblock %}
|
||||
{% block javascripts %}
|
||||
{{ parent() }}
|
||||
<script type="text/javascript">
|
||||
var urlDropzone = '{{ path("upload_media_default", {"id": app.user.getId()}) }}';
|
||||
var urlDelete = 'null';
|
||||
var idObject = '{{ app.user.getId() }}';
|
||||
var typeObject = "user";
|
||||
var videoExist = false;
|
||||
</script>
|
||||
<script src="{{ asset('/js/dropzone.js') }}"></script>
|
||||
<script src="{{ asset('/js/vendors/video.min.js') }}"></script>
|
||||
<script src="{{ asset('/js/vendors/RecordRTC.js') }}"></script>
|
||||
<script src="{{ asset('/js/vendors/videojs.record.js') }}"></script>
|
||||
<script src="{{ asset('/js/vendors/jquery.browser.min.js') }}"></script>
|
||||
<script src="{{ asset('/js/answer.js') }}"></script>
|
||||
<script type="text/javascript">
|
||||
{% if mustLogin == true %}
|
||||
$('#submit').on('click', function (event) {
|
||||
event.preventDefault();
|
||||
$('#modal_login').modal('open');
|
||||
});
|
||||
{% endif %}
|
||||
</script>
|
||||
{% endblock %}
|
||||
@@ -12,12 +12,12 @@
|
||||
<div class="row">
|
||||
<div class="col s12">
|
||||
{% if medias|length == 0 and is_granted('ROLE_TALENT') %}
|
||||
<div class="col s12 col-actions center-align">
|
||||
<div class="col s12 center-align">
|
||||
<br/><br/>
|
||||
<strong class="color-grey3">Vous ne possédez pas encore de CV vidéo!</strong><br/>
|
||||
<span class="color-grey2">Cliquez sur le bouton pour ajouter votre première vidéo.</span>
|
||||
<br/><br/>
|
||||
<a class="waves-effect waves-light btn btn-default modal-trigger" href="#addVideo">Ajouter une
|
||||
<a class="btn btn-default modal-trigger" href="#addVideo">Ajouter une
|
||||
vidéo</a>
|
||||
</div>
|
||||
{% else %}
|
||||
|
||||
@@ -0,0 +1,315 @@
|
||||
{% if is_granted('ROLE_COMPANY') %}
|
||||
{% set extendTemplate='company/base_dashboard_company.html.twig' %}
|
||||
{% elseif is_granted('ROLE_TERRITORY') %}
|
||||
{% set extendTemplate='territory/base_dashboard_territory.html.twig' %}
|
||||
{% else %}
|
||||
{% set extendTemplate='talent/base_dashboard_talent.html.twig' %}
|
||||
{% endif %}
|
||||
|
||||
{% extends extendTemplate %}
|
||||
|
||||
{% block dashContent %}
|
||||
<div class="row">
|
||||
<div class="col s12">
|
||||
{#<a class="waves-effect waves-light btn btn-default modal-trigger left m-r-10" href="#addVideo">Créer une vidéo</a>#}
|
||||
{% if medias|length > 0 %}
|
||||
<a class="waves-effect waves-light btn btn-default modal-trigger left" href="#addVideo">Ajouter une vidéo</a>
|
||||
<a class="btn btn-delete-video btn-round tooltipped red right" href="#!" data-position="top"
|
||||
data-tooltip="Supprimer des vidéos"><i class="fa fa-trash" aria-hidden="true"></i>
|
||||
</a>
|
||||
{% endif %}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
{% if medias|length == 0 %}
|
||||
<div class="col s12 col-actions center-align" id="no-video-talents">
|
||||
<br/><br/>
|
||||
<strong class="color-grey3">Vous ne possédez pas encore de CV vidéo!</strong><br/>
|
||||
<span class="color-grey2">Cliquez sur le bouton pour ajouter votre première vidéo.</span>
|
||||
<br/><br/>
|
||||
<a class="waves-effect waves-light btn btn-default modal-trigger" href="#addVideo">Ajouter une
|
||||
vidéo</a>
|
||||
</div>
|
||||
{% else %}
|
||||
{% if app.user.company.presentationVideo %}
|
||||
{% set media = app.user.company.presentationVideo %}
|
||||
{% endif %}
|
||||
<div class="row video_premier z-depth-3">
|
||||
{% if app.user.company.presentationVideo %}
|
||||
<div class="col s4 video_col col-card">
|
||||
<div class="preloader-wrapper small">
|
||||
<div class="spinner-layer spinner-blue-only">
|
||||
<div class="circle-clipper left">
|
||||
<div class="circle"></div>
|
||||
</div><div class="gap-patch">
|
||||
<div class="circle"></div>
|
||||
</div><div class="circle-clipper right">
|
||||
<div class="circle"></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="embed-responsive embed-responsive-16by9">
|
||||
<iframe src="https://player.vimeo.com{{ media.getCdnUrl()|replace({ "videos": "video"}) }}"
|
||||
width="100%" height="550" frameborder="0" webkitallowfullscreen
|
||||
mozallowfullscreen allowfullscreen></iframe>
|
||||
</div>
|
||||
<a data-id="{{ media.getCdnUrl()|replace({ "/videos/": ""}) }}" href="#!" class="btn-floating left halfway-fab changeThumbnail"><i class="material-icons">image</i></a>
|
||||
</div>
|
||||
{% else %}
|
||||
<div class="col s12 video_col">
|
||||
<div class="no-presentation-video">
|
||||
<strong>
|
||||
Vous ne disposez pas de vidéo de présentation !
|
||||
</strong><br/>
|
||||
Cliquez sur le bouton ci-dessous pour la sélectionner dans votre bibliothèque.
|
||||
</div>
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
{% if media is defined %}
|
||||
<div class="col s8 content_col">
|
||||
<div class="col s12 video_col_content">
|
||||
<h3>{{ media.title }}</h3>
|
||||
</div>
|
||||
<div class="video_col_actions">
|
||||
<div class="col s6 video_col_link_share">
|
||||
<a class="btn btn-default modal-trigger" href="#shareCv">Partager le profil
|
||||
<i class="fa fa-share-alt" aria-hidden="true"></i>
|
||||
</a>
|
||||
</div>
|
||||
<div class="col s6 video_col_edit_premier">
|
||||
<a class="btn btn-cancel-premier red right" href="#!" data-position="top" data-tooltip="Annuler">
|
||||
<span>Annuler</span> <i class="fa fa-ban" aria-hidden="true"></i>
|
||||
</a>
|
||||
<a class="btn btn-default btn-video-premier right">
|
||||
<span>Remplacer la vidéo</span>
|
||||
<i class="fa fa-pencil" aria-hidden="true"></i>
|
||||
</a>
|
||||
<div class="clearfix"></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{% endif %}
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
<div class="row">
|
||||
{% for media in medias %}
|
||||
{% set classVideo = "" %}
|
||||
{% if app.user.company.presentationVideo %}
|
||||
{% set idPresentationVideo = app.user.company.presentationVideo.id %}
|
||||
{% else %}
|
||||
{% set idPresentationVideo = false %}
|
||||
{% endif %}
|
||||
{% if idPresentationVideo != media.id %}
|
||||
<div class="col s12 m6 l4 col-card">
|
||||
<div class="card card-video-action z-depth-1">
|
||||
<div class="card-image">
|
||||
<div class="preloader-wrapper small">
|
||||
<div class="spinner-layer spinner-blue-only">
|
||||
<div class="circle-clipper left">
|
||||
<div class="circle"></div>
|
||||
</div><div class="gap-patch">
|
||||
<div class="circle"></div>
|
||||
</div><div class="circle-clipper right">
|
||||
<div class="circle"></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="embed-responsive embed-responsive-16by9">
|
||||
<iframe src="https://player.vimeo.com{{ media.getCdnUrl()|replace({ "videos": "video"}) }}"
|
||||
width="100%" height="230px" frameborder="0" webkitallowfullscreen
|
||||
mozallowfullscreen allowfullscreen></iframe>
|
||||
</div>
|
||||
<div class="card-fog choice-fog">
|
||||
<div class="card-fog-container">
|
||||
<a data-id="{{ media.getId() }}"
|
||||
class="btn btn-default btn-default-video {{ classVideo }} tooltipped"
|
||||
data-position="top"
|
||||
data-tooltip="{{ 'global.video.defaultaction.label'|trans }}">
|
||||
Choisir cette vidéo
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
{% set classFog ="" %}
|
||||
{% set messageTooltipFog ="" %}
|
||||
{% if media.getAds().toArray() %}
|
||||
{% set classFog = "fogLight" %}
|
||||
{% set messageTooltipFog ="Vidéo associée à une annonce" %}
|
||||
{% endif %}
|
||||
|
||||
{% if media.getAnswers().toArray() %}
|
||||
{% set classFog = "fogLight" %}
|
||||
{% set messageTooltipFog ="Vidéo associée à une réponse" %}
|
||||
{% endif %}
|
||||
<div class="card-fog delete-fog {{ classFog }}">
|
||||
<div class="card-fog-container">
|
||||
{% if media.getAds().toArray() or media.getAnswers().toArray() %}
|
||||
<div class="card-fog-message">
|
||||
Vous ne pouvez pas supprimer cette vidéo.<br/>
|
||||
<i data-position="top" data-tooltip="{{ messageTooltipFog }}"
|
||||
class="fa fa-question-circle tooltipped" aria-hidden="true"></i>
|
||||
</div>
|
||||
{% else %}
|
||||
<a class="btn btn-default halfway-fab waves-effect waves-light red delete_unattached_media tooltipped"
|
||||
href="{{ path("delete_unattached_media",{"id" : media.getId()}) }}"
|
||||
data-position="top" data-tooltip="{{ 'media.delete.video.label'|trans }}">Supprimer</a>
|
||||
{% endif %}
|
||||
</div>
|
||||
</div>
|
||||
<a data-id="{{ media.getCdnUrl()|replace({ "/videos/": ""}) }}" href="#!" class="btn-floating left halfway-fab changeThumbnail"><i class="material-icons">image</i></a>
|
||||
</div>
|
||||
<div class="card-content">
|
||||
<p>
|
||||
<strong><span data-id="{{ media.id }}" class="titleVideo truncate tooltipped"
|
||||
data-position="top"
|
||||
data-tooltip="{{ media.title }}">{{ media.title }}</span></strong>
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
</div>
|
||||
|
||||
|
||||
<div id="changeThumbnailVideo" class="modal modal-fixed-footer modal-fixed-header">
|
||||
<div class="modal-header">
|
||||
<h3 class="color-blue1">Modifier la vignette</h3>
|
||||
<span class="right">
|
||||
<a href="#!" class="modal-close">
|
||||
<img src="{{ asset('/img/close-modal.svg') }}" >
|
||||
</a>
|
||||
</span>
|
||||
</div>
|
||||
<div class="modal-content">
|
||||
<div class="row">
|
||||
<div class="col s6">
|
||||
<div class="embed-responsive embed-responsive-16by9">
|
||||
<div class="col s12">
|
||||
<div id="video-vimeo"></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col s6">
|
||||
<p><strong>Lancez la vidéo</strong> , puis <strong>appuyer sur pause</strong> pour définir l’image.
|
||||
<br />Une fois votre vignette définie, cliquez sur le bouton
|
||||
<strong>Sauvegarder</strong>.</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
<a href="#!" class="modal-action modal-close btn btn-default btn-round captur">Sauvegarder</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
|
||||
{% set video = null %}
|
||||
<div id="addVideo" class="modal modal-fixed-footer">
|
||||
<div class="modal-content">
|
||||
<div class="row">
|
||||
{{ form_start(form, {'attr': { 'id': 'form_media' } }) }}
|
||||
<div class="input-field col s8">
|
||||
{{ form_rest(form) }}
|
||||
</div>
|
||||
<div class="col s4 right-align">
|
||||
<button id="submit" class="btn btn-default disabled" type="submit">Enregistrer</button>
|
||||
{% set messageTooltiped = "Votre vidéo ne doit pas dépasser les 500Mo.\n
|
||||
Les formats de vidéo acceptés sont les suivants : .mp4, .mov, .qt, .mkv, .avi, .m4v, .webm." %}
|
||||
<i class="fa fa-question-circle tooltipped" data-position="top" data-delay="50"
|
||||
data-tooltip="{{ messageTooltiped }}" aria-hidden="true"></i>
|
||||
</div>
|
||||
{{ form_end(form) }}
|
||||
<div class="col s12">
|
||||
{% include 'media/dropzone.html.twig' with {'deleting': 'false'} %}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
<a href="#!" class="modal-action modal-close btn btn-default btn-round">Fermer</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="shareCv" class="modal modal-fixed-footer">
|
||||
<div class="modal-content">
|
||||
<div class="row">
|
||||
<h2>Vous souhaitez partager votre profil à d'autres entreprises?</h2>
|
||||
<h3>Copiez et ajoutez l'adresse ci-dessous lors de vos candidatures</h3>
|
||||
|
||||
<input id="linkToCopy" type="text" value="https://www.talentstube.com{{ path("talent_show", {"alias": app.user.company.alias }) }}">
|
||||
<a class="btn btn-default btn-round" id="copyLink">Copier</a><br />
|
||||
<a class="modal-action modal-close">Fermer</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{% endblock %}
|
||||
{% block javascripts %}
|
||||
{{ parent() }}
|
||||
<script type="text/javascript">
|
||||
var urlDropzone = '{{ path("upload_media_default", {"id": app.user.id }) }}';
|
||||
var urlDelete = '';
|
||||
var idObject = null;
|
||||
var typeObject = null;
|
||||
var videoExist = false;
|
||||
var mediaDefaultUrl = '{{ path("media_default") }}';
|
||||
var idUser = '{{ app.user.id }}';
|
||||
var mediaEditTitleUrl = "{{ path('media_edit_title', {'id': 'id_video'})|escape('js') }}";
|
||||
$(document).ready(function(){
|
||||
$('.modal').modal();
|
||||
});
|
||||
</script>
|
||||
<script src="{{ asset('/js/mediaListing.js') }}"></script>
|
||||
<script src="{{ asset('/js/dropzone.js') }}"></script>
|
||||
<script src="https://player.vimeo.com/api/player.js"></script>
|
||||
<script type="text/javascript">
|
||||
$(document).ready(function(){
|
||||
var options = {
|
||||
id: null
|
||||
};
|
||||
var player = null;
|
||||
$('.modal-close').on('click',function(){
|
||||
$('#changeThumbnailVideo').modal('close');
|
||||
});
|
||||
$('.changeThumbnail').on('click',function(){
|
||||
$('#changeThumbnailVideo').modal();
|
||||
$('#changeThumbnailVideo').modal('open');
|
||||
var idVideo = $(this).data('id');
|
||||
options = {
|
||||
id: idVideo
|
||||
};
|
||||
player = new Vimeo.Player('video-vimeo', options);
|
||||
});
|
||||
|
||||
$('.captur').on('click',function(e){
|
||||
e.preventDefault();
|
||||
$('a.changeThumbnail').data('id',options.id).parents('.col-card').find('.preloader-wrapper').addClass('active');
|
||||
player.getCurrentTime().then(function(seconds) {
|
||||
var data = {'duration': seconds, 'id':options.id};
|
||||
$.ajax({
|
||||
url:"{{ path('video_changeThumbnail') }}",
|
||||
type:"POST",
|
||||
data: JSON.stringify(data),
|
||||
success:function(response) {
|
||||
$('a.changeThumbnail').data('id',options.id).parents('.col-card').each(function( index ) {
|
||||
var iframe = $( this ).contents().find('iframe');
|
||||
iframe[0].src = iframe[0].src;
|
||||
});
|
||||
},
|
||||
error:function(error){
|
||||
console.log(error)
|
||||
}
|
||||
});
|
||||
}).catch(function(error) {
|
||||
console.log(error);
|
||||
});
|
||||
});
|
||||
$("iframe").on("load", function () {
|
||||
$('.preloader-wrapper').removeClass('active');
|
||||
});
|
||||
});
|
||||
</script>
|
||||
{% endblock %}
|
||||
@@ -0,0 +1,10 @@
|
||||
{% block content %}
|
||||
<div class="row">
|
||||
<div class="col s12">
|
||||
<h4>{% trans %}label.webcam.answer.step2{% endtrans %}</h4>
|
||||
</div>
|
||||
<div class="col s10 offset-s1 answer-dropzone">
|
||||
{% include 'media/dropzone.html.twig' with {'deleting': true } %}
|
||||
</div>
|
||||
</div>
|
||||
{% endblock %}
|
||||
@@ -0,0 +1,28 @@
|
||||
|
||||
{% block content %}
|
||||
<div class="row">
|
||||
<div class="col s12">
|
||||
<h4>{% trans %}label.webcam.answer.videotheque{% endtrans %}</h4>
|
||||
</div>
|
||||
{% for vid in videos %}
|
||||
{% set img = "" %}
|
||||
{% if vid.thumbnails.0 is defined %}
|
||||
{% set img = vid.thumbnails.0.sizes.4.link %}
|
||||
{% endif %}
|
||||
<div class="col s4">
|
||||
<div class="card">
|
||||
<div class="card-image">
|
||||
<div class="embed-responsive embed-responsive-16by9">
|
||||
<iframe src="https://player.vimeo.com{{ vid.getCdnUrl()|replace({ "videos": "video"}) }}" width="100%" height="auto" frameborder="0" webkitallowfullscreen mozallowfullscreen allowfullscreen></iframe>
|
||||
</div>
|
||||
</div>
|
||||
<div style="cursor:pointer;" class="card-action" data-url="https://player.vimeo.com{{ vid.getCdnUrl()|replace({ "videos": "video"}) }}" data-img="{{ img }}" data-position="top" data-tooltip="Choisir cette vidéo" href="#" data-title="{{ vid.getTitle() }}" data-id="{{ vid.getId() }}">
|
||||
<a class="addExistingVideo" >
|
||||
<span>{{ vid.getTitle() }}</span>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{% endfor %}
|
||||
</div>
|
||||
{% endblock %}
|
||||
@@ -0,0 +1,35 @@
|
||||
{% block content %}
|
||||
<div class="row">
|
||||
<div class="col s12">
|
||||
<h4>{% trans %}label.webcam.answer.step1{% endtrans %}</h4>
|
||||
</div>
|
||||
<div class="col s5">
|
||||
<video id="myCvVideo" class="video-js vjs-default-skin"></video>
|
||||
<div class="video-informations-card center-align">
|
||||
<p>Merci de cliquer sur l'icône <span class="vjs-icon-device-perm"></span> afin d'activer votre webcam.</p>
|
||||
<p>Votre webcam activée, lancez l'enregistrement en cliquant sur le bouton rond en bas à gauche du lecteur.</p>
|
||||
<p>Si vous n'êtes pas satisfait(e) de votre vidéo après un enregistrement, vous pouvez à tout moment recommencer l'enregistrement.</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col s2 hide-on-small-only">
|
||||
<div class="valign-wrapper" style="align-items:center;justify-content: center;height: 300px;width:100%;">
|
||||
<div style="font-size:40px;">
|
||||
<i class="fa fa-arrow-right center-align" aria-hidden="true"></i>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col s5">
|
||||
<video id="preview" controls="true">
|
||||
<span class="vjs-control-text">Play Video</span>
|
||||
</video>
|
||||
<div class="btnContainer center-align" style="display:none;">
|
||||
<a id="saveRecord" href="#!" class="saveVideo btn btn-default">
|
||||
<i class="fa fa-floppy-o" aria-hidden="true"></i> Télécharger ma vidéo
|
||||
</a>
|
||||
<div class="video-informations-card">
|
||||
<p>Une fois téléchargé vous pouvez glisser-déposer votre vidéo dans la zone prévue pour lancer le téléchargement.</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{% endblock %}
|
||||
+113
@@ -0,0 +1,113 @@
|
||||
{% extends 'base.html.twig' %}
|
||||
{% block content %}
|
||||
{% set subtitle = 'Déposer une recommandation pour :' %}
|
||||
{% set title = userTalent.firstname ~" "~ userTalent.lastname %}
|
||||
<div class="fluid-container bg-grey-3">
|
||||
<div class="container contentWrapper contentPage" id="answerPage">
|
||||
<div class="row">
|
||||
<div class="col s12">
|
||||
<div class="center-align bg-grey-3 m-t-20">
|
||||
<strong>{{ subtitle }}</strong>
|
||||
<h3 class="color-blue1 m-t-10">{{ title }}</h3>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col s12">
|
||||
<div class="col-content bg-arrow z-depth-2 p-20">
|
||||
<div class="row">
|
||||
<div class="col s12">
|
||||
<h4 class="color-blue1 p-0"><span class="title-bubble">1</span> Enregistrez votre vidéo de recommandation</h4>
|
||||
</div>
|
||||
<div class="col m4 offset-m1 s12">
|
||||
<video id="myCvVideo" class="video-js vjs-default-skin"></video>
|
||||
<div class="video-informations-card center-align">
|
||||
<p>Merci de cliquer sur l'icône <span class="vjs-icon-device-perm"></span> afin d'activer votre webcam.</p>
|
||||
<p>Votre webcam activée, lancez l'enregistrement en cliquant sur le bouton rond en bas à gauche du lecteur.</p>
|
||||
<p>Si vous n'êtes pas satisfait(e) de votre vidéo après un enregistrement, vous pouvez à tout moment recommencer l'enregistrement.</p>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<div class="col m2 hide-on-small-only">
|
||||
<div class="valign-wrapper" style="align-items:center;justify-content: center;height: 300px;width:100%;">
|
||||
<div style="font-size:40px;">
|
||||
<i class="fa fa-arrow-right center-align" aria-hidden="true"></i>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col m4 s12">
|
||||
<video id="preview" controls="true">
|
||||
<span class="vjs-control-text">Play Video</span>
|
||||
</video>
|
||||
<div class="btnContainer center-align" style="display:none;">
|
||||
<a id="saveRecord" href="#!" class="saveVideo btn btn-default">
|
||||
<i class="fa fa-floppy-o" aria-hidden="true"></i> Télécharger ma Vidéo de recommandation
|
||||
</a>
|
||||
<div class="video-informations-card">
|
||||
<p>Une fois téléchargé vous pouvez glisser-déposer votre vidéo dans la zone prévue pour lancer le téléchargement.</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-content bg-arrow z-depth-2 p-20">
|
||||
<div class="row">
|
||||
<div class="col s12">
|
||||
<h4 class="color-blue1 p-0"><span class="title-bubble">2</span> Importez votre Vidéo de recommandation</h4>
|
||||
</div>
|
||||
<div class="col s10 offset-s1 answer-dropzone">
|
||||
{% include 'media/dropzone.html.twig' with {'deleting': true } %}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{{ form_start(form, {'attr': { 'id': 'form_media' } }) }}
|
||||
<div class="col-content z-depth-2 p-20">
|
||||
<div class="row">
|
||||
<div class="col s12">
|
||||
<h4 class="color-blue1 p-0"><span class="title-bubble">3</span> Choix de relation</h4>
|
||||
</div>
|
||||
<div class="col s10 offset-s1 answer-dropzone">
|
||||
{{ form_row(form.relationType) }}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row m-t-40">
|
||||
<div class="col s10 offset-s1 center-align">
|
||||
<button id="submit" class=" btn btn-large btn-default disabled" type="submit">
|
||||
Envoyer ma recommandation
|
||||
</button><br /><br />
|
||||
<a class="color-grey5" href="{{ routeReturn }}">Annuler</a>
|
||||
</div>
|
||||
</div>
|
||||
{{ form_end(form) }}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{% endblock %}
|
||||
{% block javascripts %}
|
||||
{{ parent() }}
|
||||
<script type="text/javascript">
|
||||
var urlDropzone = '{{ path("upload_media_recommendation", {"id": recommendation.getId()}) }}';
|
||||
var urlDelete = '{{ path("delete_media_recommendation", {"id": recommendation.getId() }) }}'
|
||||
var idObject = '{{ recommendation.getId() }}';
|
||||
var typeObject = "recommendation";
|
||||
{% if video %}
|
||||
if($("#form_media").length){
|
||||
$("#submit").removeClass('disabled');
|
||||
$("#submit").addClass('pulse');
|
||||
}
|
||||
var videoExist = true;
|
||||
var videoOriginal = "{{video.getOriginalUrl()}}";
|
||||
var mockFile = { name: '{{video.getTitle()}}', size: '181818181', type: 'mp4', serverID: 0, accepted: true };
|
||||
{% else %}
|
||||
var videoExist = false;
|
||||
{% endif %}
|
||||
</script>
|
||||
<script src="{{ asset('/js/dropzone.js') }}"></script>
|
||||
<script src="{{ asset('/js/vendors/video.min.js') }}"></script>
|
||||
<script src="{{ asset('/js/vendors/RecordRTC.js') }}"></script>
|
||||
<script src="{{ asset('/js/vendors/videojs.record.js') }}"></script>
|
||||
<script src="{{ asset('/js/vendors/jquery.browser.min.js') }}"></script>
|
||||
<script src="{{ asset('/js/answer.js') }}"></script>
|
||||
{% endblock %}
|
||||
@@ -0,0 +1,13 @@
|
||||
<div class="col s12" id="breadcrumb">
|
||||
<a href="{{ path('talent_ad_space')}}">
|
||||
<span {% if step == 1 %}class="active"{% endif %}>{% trans %}talent.menu.answers.label{% endtrans %}</span>
|
||||
</a>
|
||||
{% if step >= 2 %}
|
||||
<span class="sepa-breadcrumb">></span>
|
||||
<span {% if step == 2 %}class="active"{% endif %}>{{ title }}</span>
|
||||
{% endif %}
|
||||
<div class="border-breadcrumb"></div>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
@@ -0,0 +1,97 @@
|
||||
{% extends 'talent/base_dashboard_talent.html.twig' %}
|
||||
|
||||
{% block dashContent %}
|
||||
{% include 'talent/job_submenu.html.twig' with {
|
||||
'tab' : 1
|
||||
} %}
|
||||
|
||||
<div class="row bg-bordered p-20">
|
||||
{% if answer.ad is not null %}
|
||||
{% set titleAnswer = answer.ad.title %}
|
||||
{% else %}
|
||||
{% set titleAnswer = answer.company.brandname %}
|
||||
{% endif %}
|
||||
{% include 'talent/ad_breadcrumb.html.twig' with {'step': 2,'title': titleAnswer,'firstname':answer.user.firstname ,'lastname':answer.user.lastname} %}
|
||||
<div class="col s12 m6">
|
||||
<div id="mini-profil-block">
|
||||
{% include 'talent/talent_picture.html.twig' with {
|
||||
'user' : answer.user
|
||||
} %}
|
||||
<div>
|
||||
<div class="mini-profil-picture-name">{{ answer.user.firstname }} {{ answer.user.lastname }}</div>
|
||||
<div>Envoyé le {{ answer.sendTime|date('d/m/Y') }}</div>
|
||||
</div>
|
||||
</div>
|
||||
{% if answer.video is not null %}
|
||||
<div class="embed-responsive embed-responsive-16by9">
|
||||
<iframe src="https://player.vimeo.com/video/{{ answer.video.cdnUrl|replace({ "/videos/": ""}) }}"
|
||||
width="100%" height="auto" frameborder="0" webkitallowfullscreen mozallowfullscreen
|
||||
allowfullscreen></iframe>
|
||||
</div>
|
||||
{% endif %}
|
||||
</div>
|
||||
<div class="col s12 m6">
|
||||
{% if answer.comment %}
|
||||
<strong>{% trans %}label.message{% endtrans %}</strong>
|
||||
<p class="message-answer">{{ answer.comment }}</p>
|
||||
<a href="#" class="link-message-more">{% trans %}label.link.readmore{% endtrans %}</a>
|
||||
{% else %}
|
||||
{% trans %}label.noMessage{% endtrans %}
|
||||
{% endif %}
|
||||
</div>
|
||||
<div class="col s12">
|
||||
<h4 class="no-margin-top bordered">HISTORIQUE DES MESSAGES RECUS</h4>
|
||||
</div>
|
||||
<div class="col s12">
|
||||
{% if answer.messages %}
|
||||
{% set nbMessage = 0 %}
|
||||
{% for message in answer.messages if message.status != "DRAFT" %}
|
||||
{% set class = '' %}
|
||||
{% if loop.index > 1 %}
|
||||
{% set class = 'history-hidden' %}
|
||||
{% endif %}
|
||||
<div class="blockanswer-answer {{class}}">
|
||||
<div class="title-answer">
|
||||
{{ message.sender.lastname }} {{ message.sender.firstname }}
|
||||
<span class="date-answer">{% trans %}label.received{% endtrans %}{{ message.uTime|date('d-m-Y') }}</span>
|
||||
</div>
|
||||
<div class="description-answer">
|
||||
{% if message.video %}
|
||||
<div class="embed-responsive embed-responsive-16by9">
|
||||
<iframe src="https://player.vimeo.com/video/{{ message.video.cdnUrl|replace({ "/videos/": ""}) }}"
|
||||
width="100%" height="300" frameborder="0" webkitallowfullscreen mozallowfullscreen
|
||||
allowfullscreen></iframe>
|
||||
</div>
|
||||
{% endif %}
|
||||
{{ message.content|nl2br }}
|
||||
</div>
|
||||
</div>
|
||||
{% set nbMessage = nbMessage + 1 %}
|
||||
{% endfor %}
|
||||
{% endif %}
|
||||
</div>
|
||||
{% if nbMessage > 1 %}
|
||||
<div class="col s12 center-align m-t-30">
|
||||
<a class="bnt btn-round btn-grey-2 link-history-more" href="#" title="{% trans %}label.history.talent.link{% endtrans %}">{% trans %}label.history.talent.link{% endtrans %}</a>
|
||||
</div>
|
||||
{% endif %}
|
||||
</div>
|
||||
{% endblock %}
|
||||
|
||||
{% block javascripts %}
|
||||
{{ parent() }}
|
||||
|
||||
<script type="text/javascript">
|
||||
$('.link-message-more').on('click',function(e) {
|
||||
e.preventDefault();
|
||||
$('.message-answer').animate({
|
||||
'height': '100%'
|
||||
})
|
||||
});
|
||||
$('.link-history-more').on('click',function(e) {
|
||||
e.preventDefault();
|
||||
$('.history-hidden').fadeIn();
|
||||
$(this).fadeOut();
|
||||
});
|
||||
</script>
|
||||
{% endblock %}
|
||||
@@ -1,49 +1,59 @@
|
||||
{% extends 'talent/base_dashboard_talent.html.twig' %}
|
||||
|
||||
|
||||
{% block dashContent %}
|
||||
{#<h1 class="alttitle">Espace offres d'emploi</h1>#}
|
||||
{% include 'talent/job_submenu.html.twig' with {
|
||||
'tab' : 1
|
||||
} %}
|
||||
<div class=" row bg-bordered p-20">
|
||||
<ul class="tabs">
|
||||
<li class="tab col s4"><a class="active" href="#reponses">Mes candidatures</a></li>
|
||||
</ul>
|
||||
<div id="reponses" class="col s12">
|
||||
<table class="bordered highlight responsive-table">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Intitulé de l'annonce</th>
|
||||
<th>Date de réponse</th>
|
||||
<th>Réponses</th>
|
||||
<th>État</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{% for a in answers %}
|
||||
<tr>
|
||||
<td>
|
||||
{% if a.ad != null %}{{ a.ad.title }}{% else %}{{ a.company.brandname }}{% endif %}<br />
|
||||
{% if a.video is not null %}
|
||||
<a class="waves-effect waves-light btn btn-default modalBtn" href="#" data-url="{{ a.video.cdnUrl }}">Voir la vidéo</a>
|
||||
{% endif %}
|
||||
</td>
|
||||
<td>{{ a.uTime|date('d/m/Y') }}</td>
|
||||
<td>
|
||||
{% if a.ad != null %} {{ a.ad.countAnswers }}{% endif %}
|
||||
|
||||
</td>
|
||||
<td>
|
||||
{% if a.status == "DRAFT" and a.ad != null %}
|
||||
<a href="{{ path('talent_answer_create',{id:a.ad.id}) }}">
|
||||
<i class="fa fa-pencil-square-o" aria-hidden="true"></i>
|
||||
</a>
|
||||
{% endif %}
|
||||
{{ a.status|trans }}
|
||||
</td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
</tbody>
|
||||
</table>
|
||||
<p class="center-align"></p>
|
||||
{% include 'talent/ad_breadcrumb.html.twig' with {'step': 1} %}
|
||||
<div id="reponses" class="col s12">
|
||||
<table id="table-answers" class="bordered highlight responsive-table">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Intitulé de l'annonce</th>
|
||||
<th>Date de réponse</th>
|
||||
<th>Nombre de candidats</th>
|
||||
<th>Message recus</th>
|
||||
<th>État</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{% for a in answers %}
|
||||
<tr>
|
||||
<td>
|
||||
{% if a.ad != null %}
|
||||
<a href="{{ path('talent_ad_detail',{alias: a.ad.alias, id: a.id })}}">
|
||||
{{ a.ad.title }}
|
||||
{% else %}
|
||||
<a href="{{ path('talent_ad_detail',{alias: a.company.alias, id: a.id })}}">
|
||||
{{ a.company.brandname }} - {{ 'company.menu.spontaneous.label'|trans }}
|
||||
{% endif %}
|
||||
</a>
|
||||
</td>
|
||||
<td>{{ a.sendTime|date('d/m/Y') }}</td>
|
||||
<td> {% if a.ad != null %}{{ a.ad.countAnswers }}{% else %} - {% endif %}</td>
|
||||
<td>{{ a.mineMessages|length }}</td>
|
||||
<td style="min-width: 100px;">
|
||||
{% if a.status == "DRAFT" and a.ad != null %}
|
||||
<a href="{{ path('talent_answer_create',{id:a.ad.id}) }}">
|
||||
<i class="fa fa-pencil-square-o" aria-hidden="true"></i>
|
||||
</a>
|
||||
{% elseif a.status == "DRAFT" and a.company != null %}
|
||||
<a href="{{ path('talent_spontaneous_application_create',{id:a.company.id}) }}">
|
||||
<i class="fa fa-pencil-square-o" aria-hidden="true"></i>
|
||||
</a>
|
||||
{% endif %}
|
||||
{% if a.isViewed %}
|
||||
{{ 'VIEWED'|trans }}
|
||||
{% else %}
|
||||
{{ a.status|trans }}
|
||||
{% endif %}
|
||||
</td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
</tbody>
|
||||
</table>
|
||||
<p class="center-align"></p>
|
||||
</div>
|
||||
<div id="modal_video" class="modal">
|
||||
<div class="modal-content">
|
||||
@@ -51,26 +61,32 @@
|
||||
<div class="videoContainer" style="text-align:center;">Loading...</div>
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
<a href="#!" class="modal-action modal-close waves-effect waves-green btn-flat">Fermer</a>
|
||||
<a href="#!" class="modal-action modal-close waves-effect waves-green btn-flat">Fermer</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
{% endblock %}
|
||||
|
||||
{% block javascripts %}
|
||||
{{ parent() }}
|
||||
<script src="https://player.vimeo.com/api/player.js"></script>
|
||||
<script type="text/javascript">
|
||||
$('.modalBtn').click(function(){
|
||||
$('.modalBtn').click(function () {
|
||||
$('.videoContainer').html('');
|
||||
$('#modal_video').modal('open');
|
||||
var urlVideo = $(this).data("url");
|
||||
urlVideo = urlVideo.replace('videos', 'video');
|
||||
var player = '<div data-vimeo-url="https://vimeo.com'+urlVideo+'" id="player_vimeo"></div>';
|
||||
var player = '<div data-vimeo-url="https://vimeo.com' + urlVideo + '" id="player_vimeo"></div>';
|
||||
$('.videoContainer').html(player);
|
||||
var player_vimeo = new Vimeo.Player('player_vimeo');
|
||||
});
|
||||
</script>
|
||||
<script type="text/javascript">
|
||||
(function ($) {
|
||||
$(function () {
|
||||
$('.modal').modal();
|
||||
});
|
||||
})(jQuery);
|
||||
</script>
|
||||
{% endblock %}
|
||||
@@ -19,6 +19,10 @@
|
||||
{% endblock %}
|
||||
|
||||
{% block javascripts %}
|
||||
{{ parent() }}
|
||||
<script src="https://maps.googleapis.com/maps/api/js?key=AIzaSyDYV8IJGtIoWLfXJQQvIuDQ88n2aEuRgpg&libraries=places"></script>
|
||||
{% javascripts
|
||||
'@talents'
|
||||
output='assetic/main.dashboard.talent.js' filter='?uglifyjs2' %}
|
||||
<script src="{{ asset_url }}"></script>
|
||||
{% endjavascripts %}
|
||||
{% endblock %}
|
||||
@@ -0,0 +1,10 @@
|
||||
<div class="row bg-bordered p-0">
|
||||
<ul class="nav-tabs">
|
||||
<li class="{% if tab == 1 %} active {% endif %} col s3">
|
||||
<a {% if tab == 1 %}class="active"{% endif %} href="{{ path('talent_ad_space') }}">{{'talent.menu.answers.label'|trans}}</a>
|
||||
</li>
|
||||
<li class="{% if tab == 2 %} active {% endif %} col s3">
|
||||
<a {% if tab == 2 %}class="active"{% endif %} href="{{path('recommandation_list')}}">{{'talent.menu.recommandations.label'|trans}}</a>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
@@ -7,26 +7,26 @@
|
||||
<img src="{{ app.user.webPath | imagine_filter('profile_square') }}"
|
||||
alt="{{ app.user.firstname }} {{ app.user.lastname|first|upper }}"
|
||||
class="circle responsive-img"/>
|
||||
<a href="#modalProfilePicture">
|
||||
<a data-target="modalProfilePicture" class="modal-trigger" href="#modalProfilePicture">
|
||||
<i class="fa fa-pencil" aria-hidden="true"></i>
|
||||
</a>
|
||||
{% elseif app.user.socialPicture is not null %}
|
||||
<img src="{{ app.user.socialPicture }}"
|
||||
alt="{{ app.user.firstname }} {{ app.user.lastname|first|upper }}"
|
||||
class="circle responsive-img"/>
|
||||
<a href="#modalProfilePicture">
|
||||
<a data-target="modalProfilePicture" class="modal-trigger" href="#modalProfilePicture">
|
||||
<i class="fa fa-pencil" aria-hidden="true"></i>
|
||||
</a>
|
||||
{% else %}
|
||||
<div class="circle-letters font-2">{{ app.user.firstname|first|upper }}{{ app.user.lastname|first|upper }}</div>
|
||||
<a href="#modalProfilePicture">
|
||||
<a data-target="modalProfilePicture" class="modal-trigger" href="#modalProfilePicture">
|
||||
<i class="fa fa-pencil" aria-hidden="true"></i>
|
||||
</a>
|
||||
{% endif %}
|
||||
</div>
|
||||
|
||||
<p class="profil-name">
|
||||
<b>{{ app.user.firstname }} {{ app.user.lastname|upper }}</b>
|
||||
<a href="https://www.talentstube.com{{ path("talent_show", {"alias": app.user.company.alias }) }}"><b>{{ app.user.firstname }} {{ app.user.lastname|upper }}</b></a>
|
||||
</p>
|
||||
{% if company.addresses.billing is defined %}
|
||||
<p class="profil-city">{{ company.addresses.billing.city }}
|
||||
@@ -41,7 +41,7 @@
|
||||
<li>
|
||||
<a href="{{ path('talent_dashboard') }}">
|
||||
<i class="fa fa-user"></i>
|
||||
{{ 'company.menu.dashboard.label'|trans }}
|
||||
{{ 'talent.menu.dashboard.label'|trans }}
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
|
||||
@@ -3,13 +3,102 @@
|
||||
{% set video = null %}
|
||||
{% block title %} Profil Talent{% endblock %}
|
||||
|
||||
|
||||
{% macro printTalentRow(form, loop_index, typeform, add) %}
|
||||
{% set loop_index = loop_index|default(1000) %}
|
||||
{% set typeform = typeform|default('default') %}
|
||||
{% set add = add|default('false') %}
|
||||
<div class="modal modal-fixed-footer {{ "modal-" ~ typeform }} {{ "modal-" ~ typeform ~ "-" ~ (loop_index) }}">
|
||||
<div class="modal-content">
|
||||
<div id="modal-header" class="row">
|
||||
<div class="col s12">
|
||||
{% if typeform == "career" %}
|
||||
<h4>Expériences</h4>
|
||||
{% endif %}
|
||||
{% if typeform == "formation" %}
|
||||
<h4>Formations & certifications</h4>
|
||||
{% endif %}
|
||||
{% if typeform == "language" %}
|
||||
<h4>Langues</h4>
|
||||
{% endif %}
|
||||
<span class="right">
|
||||
<a href="#!" class="modal-close">
|
||||
<img src="{{ asset('/img/close-modal.svg') }}" >
|
||||
</a>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row {{ "form-container-" ~ typeform }}">
|
||||
{% set index = loop_index %}
|
||||
{% for row in form %}
|
||||
{% set type = row.vars.block_prefixes.1 %}
|
||||
{% if type == "choice" %}
|
||||
{% if row.vars.name == "beginMonth" ~ typeform|capitalize %}
|
||||
<div class="col s12"><h5 class="required">Dates</h5></div>
|
||||
<div class="col s6"><span class="undertitle">Début</span></div>
|
||||
<div class="col s6"><span class="undertitle">Fin</span></div>
|
||||
{% endif %}
|
||||
{% if row.vars.name == "skillLanguage" %}
|
||||
<div class="col s12">
|
||||
{% else %}
|
||||
<div class="col s3">
|
||||
{% endif %}
|
||||
{% elseif type == "checkbox" %}
|
||||
{% if typeform == "formation" %}
|
||||
<div class="col s12">
|
||||
{% else %}
|
||||
<div class="col s6">
|
||||
{% endif %}
|
||||
{% else %}
|
||||
<div class="col s12">
|
||||
{% endif %}
|
||||
{% if type == "checkbox" %}
|
||||
<p>
|
||||
{{ form_widget(row, { 'attr': {'class': 'checkbox-' ~ typeform,'data-index': (index)} }) }}
|
||||
{{ form_label(row) }}
|
||||
</p><br />
|
||||
{% else %}
|
||||
{% if type != "choice" %}
|
||||
{% if row.vars.block_prefixes.2 matches '{^(.*)(_tagsComma)$}' %}
|
||||
<div class="m-t-10 m-b-20">
|
||||
{{ form_label(row) }}
|
||||
<br />
|
||||
<span class="small">{{ 'profile.talent.under.tags'|trans }}</span>
|
||||
{{ form_widget(row) }}
|
||||
<span class="xsmall">Insérez une virgule ou appuyez sur ENTRÉE pour séparer vos mots-clés.</span>
|
||||
<br />
|
||||
</div>
|
||||
{% else %}
|
||||
{{ form_label(row) }}
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
{{ form_widget(row) }}
|
||||
{% endif %}
|
||||
</div>
|
||||
{% endfor %}
|
||||
</div>
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
{% if add == 'add' %}
|
||||
<a class="btn btn-default {{ "cancel-" ~ typeform }} left">Annuler</a>
|
||||
{% else %}
|
||||
<a data-type="{{ typeform }}" class="btn btn-default {{ "delete-" ~ typeform }} left">Supprimer</a>
|
||||
{% endif %}
|
||||
<a href="#!" data-type="{{ typeform }}" class="btn btn-default {{ typeform ~ "-save-action " }} right">Sauvegarder</a>
|
||||
</div>
|
||||
</div>
|
||||
{% endmacro %}
|
||||
|
||||
{% import _self as formMacros %}
|
||||
|
||||
|
||||
{% block dashContent %}
|
||||
{% include 'default/flash_message.html.twig' %}
|
||||
{{ render(controller('AppBundle:Talent:profileProgression',{'talent':app.user.company.id})) }}
|
||||
|
||||
<div class="bg-bordered row m-b-10 p-20">
|
||||
<div class="col s12">
|
||||
<span class="bg-blue-1 text-gradient font-2 fs-20">CV Vidéo générique</span>
|
||||
<h4>CV Vidéo générique</h4>
|
||||
<div class="switch d-inblock pull-right">
|
||||
<label>
|
||||
Etre visible des recruteurs
|
||||
@@ -49,89 +138,145 @@
|
||||
<span><strong><a href="{{ path('talent_media') }}">Choisir depuis votre videothèque</a></strong></span>
|
||||
</div>
|
||||
</div>
|
||||
{#
|
||||
<div class="row">
|
||||
<div class="col s6">
|
||||
<div class="input-field">
|
||||
{{ form_rest(formMedia) }}
|
||||
</div>
|
||||
</div>
|
||||
<div class="col s6 ">
|
||||
<button id="submit" class="btn btn-default disabled" type="submit">Enregistrer</button>
|
||||
</div>
|
||||
<div class="col s12">
|
||||
<span><strong><a href="{{ path('talent_media') }}">Choisir depuis votre videothèque</a></strong></span>
|
||||
</div>
|
||||
</div>
|
||||
#}
|
||||
</div>
|
||||
{{ form_end(formMedia) }}
|
||||
{% endif %}
|
||||
</div>
|
||||
</div>
|
||||
{{ form_start(form) }}
|
||||
<div class="bg-bordered row m-b-10 p-20">
|
||||
|
||||
{{ form_start(formCompany, {'attr': {'id': 'form_profile_edit','novalidate': 'novalidate'}}) }}
|
||||
<div class="bg-bordered professional-info row m-b-10 p-20">
|
||||
<div class="col s12">
|
||||
<span class="bg-blue-1 text-gradient font-2 fs-20">Information Professionnelles</span>
|
||||
<h4>Information Professionnelles</h4>
|
||||
</div>
|
||||
<div class="col s12">
|
||||
<div class="m-t-10">
|
||||
{{ form_label(form.company.tagsComma) }}
|
||||
{{ form_row(formCompany.titleTalent) }}
|
||||
{{ form_row(formCompany.situationTalent) }}
|
||||
<div class="m-t-10 m-b-20">
|
||||
{{ form_label(formCompany.tagsComma) }}
|
||||
<br />
|
||||
<span class="small">{{ 'profile.talent.under.tags'|trans }}</span>
|
||||
<i class="fa fa-question-circle-o fs-20 color-blue1 tooltipped" data-position="top"
|
||||
data-tooltip="Les mots clés permettent la mise en relation des talents et des entreprises. Vous pourrez les changer à tout moment."></i>
|
||||
{{ form_widget(form.company.tagsComma) }}
|
||||
{{ form_widget(formCompany.tagsComma) }}
|
||||
<span class="xsmall">Insérez une virgule ou appuyez sur ENTRÉE pour séparer vos mots-clés.</span>
|
||||
<br />
|
||||
</div>
|
||||
{{ form_row(form.company.tagsComma) }}
|
||||
{{ form_row(form.company.website) }}
|
||||
{{ form_row(form.company.twitter) }}
|
||||
{{ form_row(form.company.linkedin) }}
|
||||
{{ form_row(formCompany.descriptionTalent) }}
|
||||
{{ form_row(formCompany.website) }}
|
||||
{{ form_row(formCompany.twitter) }}
|
||||
{{ form_row(formCompany.linkedin) }}
|
||||
</div>
|
||||
<div class="col s12">
|
||||
<input class="btn btn-default btn-round pull-right m-t-15 m-b-20" type="submit"
|
||||
value="{{ 'profile.edit.save'|trans }}"/>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{{ form_end(formCompany) }}
|
||||
|
||||
{# Espace Experiences professionnelle #}
|
||||
{{ form_start(formCareer, {'attr': {'id': 'form_profile_career','novalidate': 'novalidate'}}) }}
|
||||
{% do formCareer.career.setRendered %}
|
||||
<div class="bg-bordered row m-b-10 p-20">
|
||||
<div class="col s12">
|
||||
<span class="bg-blue-1 text-gradient font-2 fs-20">Information personnelles</span>
|
||||
<h4>Experiences</h4>
|
||||
<a class="btn btn-default right" id="add_career">Ajouter une experience professionnelle</a>
|
||||
</div>
|
||||
<div class="col s12" id="career_container">
|
||||
{% include 'talent/profile_career.html.twig' with {'carrer': career, 'edit': true} %}
|
||||
{{ form_errors(formCareer.career) }}
|
||||
<span class="career-holder" data-prototype="{{ formMacros.printTalentRow(formCareer.career.vars.prototype, (formCareer.career|length + 1), 'career','add')|e('html_attr') }}"></span>
|
||||
{% for careerField in formCareer.career %}
|
||||
{{ formMacros.printTalentRow(careerField, (loop.index - 1), 'career') }}
|
||||
{% endfor %}
|
||||
</div>
|
||||
</div>
|
||||
{{ form_end(formCareer) }}
|
||||
|
||||
{{ form_start(formFormation, {'attr': {'id': 'form_profile_formation','novalidate': 'novalidate'}}) }}
|
||||
{% do formFormation.formation.setRendered %}
|
||||
{# Espace Formation #}
|
||||
<div class="bg-bordered row m-b-10 p-20">
|
||||
<div class="col s12">
|
||||
<h4>Formations et certifications</h4>
|
||||
<a class="btn btn-default right" id="add_formation">Ajouter une formation</a>
|
||||
</div>
|
||||
<div class="col s12" id="formation_container">
|
||||
{% include 'talent/profile_formation.html.twig' with {'formation': formation, 'edit': true} %}
|
||||
{{ form_errors(formFormation.formation) }}
|
||||
<span class="formation-holder" data-prototype="{{ formMacros.printTalentRow(formFormation.formation.vars.prototype, (formFormation.formation|length + 1), 'formation','add')|e('html_attr') }}"></span>
|
||||
{% for formationField in formFormation.formation %}
|
||||
{{ formMacros.printTalentRow(formationField, (loop.index - 1), 'formation') }}
|
||||
{% endfor %}
|
||||
</div>
|
||||
</div>
|
||||
{{ form_end(formFormation) }}
|
||||
|
||||
{{ form_start(formLanguage, {'attr': {'id': 'form_profile_language','novalidate': 'novalidate'}}) }}
|
||||
{% do formLanguage.language.setRendered %}
|
||||
<div class="bg-bordered row m-b-10 p-20">
|
||||
<div class="col s12">
|
||||
<h4>Langues</h4>
|
||||
<a class="btn btn-default right" id="add_language">Ajouter une langues</a>
|
||||
</div>
|
||||
<div class="col s12" id="language_container">
|
||||
{% include 'talent/profile_language.html.twig' with {'language': language, 'edit': true} %}
|
||||
{{ form_errors(formLanguage.language) }}
|
||||
<span class="language-holder" data-prototype="{{ formMacros.printTalentRow(formLanguage.language.vars.prototype, (formLanguage.language|length + 1 ), 'language','add')|e('html_attr') }}"></span>
|
||||
{% for languageField in formLanguage.language %}
|
||||
{{ formMacros.printTalentRow(languageField, (loop.index - 1), 'language') }}
|
||||
{% endfor %}
|
||||
</div>
|
||||
</div>
|
||||
{{ form_end(formLanguage) }}
|
||||
|
||||
|
||||
{{ form_start(formProfile, {'attr': {'id': 'form_profile_edit2','novalidate': 'novalidate'}}) }}
|
||||
<div class="bg-bordered personal-info row m-b-10 p-20">
|
||||
<div class="col s12">
|
||||
<h4>Information personnelles</h4>
|
||||
</div>
|
||||
<div class="col s12">
|
||||
<div class="p-t-10">
|
||||
<div class="col s6 p-r-10">
|
||||
{{ form_row(form.firstname) }}
|
||||
{{ form_row(formProfile.firstname) }}
|
||||
</div>
|
||||
<div class="col s6">
|
||||
{{ form_row(form.lastname) }}
|
||||
{{ form_row(formProfile.lastname) }}
|
||||
</div>
|
||||
<div class="col s6">
|
||||
{{ form_row(form.birthday) }}
|
||||
{{ form_row(formProfile.birthday) }}
|
||||
</div>
|
||||
<div class="col s6">
|
||||
{{ form_row(form.gender) }}
|
||||
{{ form_row(formProfile.gender) }}
|
||||
</div>
|
||||
<div class="col s12">
|
||||
{{ form_row(form.company.address) }}
|
||||
{{ form_row(form.company.addressComp) }}
|
||||
{{ form_row(formProfile.company.address) }}
|
||||
{{ form_row(formProfile.company.addressComp) }}
|
||||
</div>
|
||||
<div class="col s6 p-r-10">
|
||||
{{ form_row(form.company.city) }}
|
||||
{{ form_row(formProfile.company.city) }}
|
||||
</div>
|
||||
<div class="col s6">
|
||||
{{ form_row(form.company.zipcode) }}
|
||||
{{ form_row(formProfile.company.zipcode) }}
|
||||
</div>
|
||||
<div class="col s12">
|
||||
{{ form_row(form.company.country) }}
|
||||
{{ form_row(formProfile.company.country) }}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col s12">
|
||||
<input class="btn btn-default btn-round pull-right m-t-15 m-b-20" type="submit"
|
||||
value="{{ 'profile.edit.save'|trans }}"/>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row">
|
||||
<input class="btn btn-default btn-round pull-right m-t-15" type="submit"
|
||||
value="{{ 'profile.edit.submit'|trans }}"/>
|
||||
</div>
|
||||
{{ form_end(form) }}
|
||||
{{ form_end(formProfile) }}
|
||||
|
||||
|
||||
<div id="liste-offres" class="bg-bordered row m-t-20 m-b-10 p-20">
|
||||
<div class="col s12">
|
||||
<span class="bg-blue-1 text-gradient font-2 fs-20">Mes dernières offres consultées</span>
|
||||
<h4>Mes dernières offres consultées</h4>
|
||||
</div>
|
||||
<div class="owl-carousel owl-carousel-ptalent">
|
||||
{% for historyAd in historyAds %}
|
||||
@@ -165,8 +310,8 @@
|
||||
{% endblock %}
|
||||
|
||||
{% block javascripts %}
|
||||
|
||||
{{ parent() }}
|
||||
{% if app.user.company.presentationVideo is null %}
|
||||
<script type="text/javascript">
|
||||
var urlDropzone = '{{ path("upload_media_presentation") }}';
|
||||
var urlDelete = '';
|
||||
@@ -178,26 +323,14 @@
|
||||
var mediaEditTitleUrl = "{{ path('media_edit_title', {'id': 'id_video'})|escape('js') }}";
|
||||
</script>
|
||||
<script src="{{ asset('/js/dropzone.js') }}"></script>
|
||||
<script>
|
||||
$(document).ready(function () {
|
||||
$('.tooltipster').tooltipster({
|
||||
theme: 'tooltipster-ttube',
|
||||
side: 'bottom',
|
||||
{% endif %}
|
||||
<script src="{{ asset('/js/profileTalent.js') }}"></script>
|
||||
<script type="text/javascript">
|
||||
(function ($) {
|
||||
$(function () {
|
||||
$('.modal').modal();
|
||||
});
|
||||
});
|
||||
</script>
|
||||
<script>
|
||||
$('#searchableToggle').change(function () {
|
||||
var route = '/talent/me/searchable/toggle';
|
||||
$.ajax({
|
||||
type: "POST",
|
||||
url: route,
|
||||
dataType: "json",
|
||||
success: function (msg) {
|
||||
console.log(msg);
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
})(jQuery);
|
||||
</script>
|
||||
|
||||
{% endblock %}
|
||||
@@ -0,0 +1,44 @@
|
||||
{% for c in career %}
|
||||
<div class="row row-career">
|
||||
<div class="col s12">
|
||||
<span class="titleCompanyCareer">{{c.companyCareer}}</span>
|
||||
{% if edit is defined %}
|
||||
<span class="right">
|
||||
<a class="edit-career" data-index="{{ loop.index - 1 }}">
|
||||
<i class="fa fa-pencil" aria-hidden="true"></i>
|
||||
</a>
|
||||
</span>
|
||||
{% endif %}
|
||||
</div>
|
||||
<div class="col s12">
|
||||
<span class="titleJobCareer">{{c.jobCareer}}</span>
|
||||
</div>
|
||||
<div class="col s12 titleDateCareer">
|
||||
{% if c.beginMonthCareer is defined %}
|
||||
{% set fullDate = '2018-' ~ c.beginMonthCareer ~ '-01' %}
|
||||
{% if c.beginMonthCareer matches '/^\\d+$/' %}
|
||||
<span>{{ fullDate|datetime }} {{ c.beginYearCareer }}</span>
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
<span>-
|
||||
{% if c.actualJobCareer is defined and c.actualJobCareer == true %}
|
||||
Aujourd'hui{% else %} {% set fullDateEnd = '2018-' ~ c.endMonthCareer ~ '-01' %} {% if c.endMonthCareer matches '/^\\d+$/' %}{{ fullDateEnd|datetime }}{% endif %} {{ c.endYearCareer }}{% endif %}, {{ c.placeCareer }}
|
||||
</span>
|
||||
</div>
|
||||
<div class="col s12">
|
||||
<span class="titleDescriptionCareer">{{c.descriptionCareer|nl2br}}</span>
|
||||
</div>
|
||||
<div class="col s12">
|
||||
<div class="keywords">
|
||||
{% if c.tagsComma %}
|
||||
{% for keyword in c.tagsComma|split(',') %}
|
||||
<div class="chip">
|
||||
{{ keyword }}
|
||||
</div>
|
||||
{% endfor %}
|
||||
{% endif %}
|
||||
</div>
|
||||
<hr />
|
||||
</div>
|
||||
</div>
|
||||
{% endfor %}
|
||||
@@ -0,0 +1,29 @@
|
||||
{% for f in formation %}
|
||||
<div class="row row-formation">
|
||||
<div class="col s12">
|
||||
<span class="titleCompanyCareer">{{f.nameFormation}}</span>
|
||||
{% if edit is defined %}
|
||||
<span class="right">
|
||||
<a class="edit-formation" data-index="{{ loop.index - 1 }}">
|
||||
<i class="fa fa-pencil" aria-hidden="true"></i>
|
||||
</a>
|
||||
</span>
|
||||
{% endif %}
|
||||
</div>
|
||||
<div class="col s12 titleDateCareer">
|
||||
<span>
|
||||
{% if f.actualJobFormation is defined and f.actualJobFormation == true %}
|
||||
En cours
|
||||
{% else %}
|
||||
{{ f.beginYearFormation }}
|
||||
{% endif %}
|
||||
</span>
|
||||
</div>
|
||||
<div class="col s12">
|
||||
<span class="titleDescriptionCareer">{{f.descriptionFormation|nl2br}}</span>
|
||||
</div>
|
||||
<div class="col s12">
|
||||
<hr />
|
||||
</div>
|
||||
</div>
|
||||
{% endfor %}
|
||||
@@ -0,0 +1,17 @@
|
||||
{% for l in language %}
|
||||
<div class="row row-language">
|
||||
<div class="col s12">
|
||||
<span class="titleCompanyCareer">{{l.nameLanguage}}</span>
|
||||
{% if edit is defined %}
|
||||
<span class="right">
|
||||
<a class="edit-language" data-index="{{ loop.index - 1 }}">
|
||||
<i class="fa fa-pencil" aria-hidden="true"></i>
|
||||
</a>
|
||||
</span>
|
||||
{% endif %}
|
||||
</div>
|
||||
<div class="col s12">
|
||||
<span class="titleJobCareer">{{ l.skillLanguage|trans }}</span>
|
||||
</div>
|
||||
</div>
|
||||
{% endfor %}
|
||||
@@ -0,0 +1,27 @@
|
||||
{% extends 'talent/base_dashboard_talent.html.twig' %}
|
||||
|
||||
{% block dashContent %}
|
||||
{% include 'talent/job_submenu.html.twig' with {
|
||||
'tab' : 2
|
||||
} %}
|
||||
<div class=" row bg-bordered p-20">
|
||||
<div class="col s12 bb-grey p-b-10">
|
||||
<span class="bg-blue-1 text-gradient font-2 text-upper text-bold">Supprimer votre recommandation</span>
|
||||
</div>
|
||||
<div id="recommendation" class="col s12 p-t-20">
|
||||
{{form_start(form)}}
|
||||
{{form_rest(form)}}
|
||||
<button id="submit" class="btn btn-large btn-default" type="submit">
|
||||
Supprimer votre recommandation
|
||||
</button>
|
||||
|
||||
{{form_end(form)}}
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{% endblock %}
|
||||
|
||||
{% block javascripts %}
|
||||
{{ parent() }}
|
||||
{% endblock %}
|
||||
@@ -0,0 +1,136 @@
|
||||
{% extends 'talent/base_dashboard_talent.html.twig' %}
|
||||
|
||||
{% block dashContent %}
|
||||
{% include 'talent/job_submenu.html.twig' with {
|
||||
'tab' : 2
|
||||
} %}
|
||||
<div class=" row bg-bordered p-20">
|
||||
<div class="col s12 bb-grey p-b-10">
|
||||
<span class="bg-blue-1 text-gradient font-2 text-upper text-bold">recommandations reçues</span>
|
||||
</div>
|
||||
<div id="reponses" class="col s12">
|
||||
<table class="bordered responsive-table">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Nom Prénom</th>
|
||||
<th class="center-align">Date</th>
|
||||
<th class="center-align">Action</th>
|
||||
<th>Visibilité</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{% for r in received %}
|
||||
<tr>
|
||||
<td>
|
||||
{{ r.sender.lastname }}
|
||||
{{ r.sender.firstname }}
|
||||
</td>
|
||||
<td class="center-align">
|
||||
{{ r.uTime|date('d/m/Y') }}
|
||||
</td>
|
||||
<td class="center-align">
|
||||
<i class="fa fa-eye modalBtn c-pointer hover-blue1" data-url="{{ r.video.cdnUrl }}"></i>
|
||||
</td>
|
||||
<td>
|
||||
{% if r.isVisible == false %}
|
||||
<span class="color-red">Désactivée</span>
|
||||
{% else %}
|
||||
<div class="switch d-inblock">
|
||||
<label>
|
||||
<input class="visibilityToggle" type="checkbox" {% if r.isEnabled %} checked="checked" {% endif %} data-id="{{r.id}}">
|
||||
<span class="lever"></span>
|
||||
</label>
|
||||
</div>
|
||||
{% endif %}
|
||||
</td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
</tbody>
|
||||
</table>
|
||||
<p class="center-align"></p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class=" row bg-bordered p-20">
|
||||
<div class="col s12 bb-grey p-b-10">
|
||||
<span class="bg-blue-1 text-gradient font-2 text-upper text-bold">recommandations envoyées</span>
|
||||
</div>
|
||||
<div id="reponses" class="col s12">
|
||||
<table class="bordered responsive-table">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Nom Prénom</th>
|
||||
<th class="center-align">Date</th>
|
||||
<th class="center-align">Action</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{% for r in sended %}
|
||||
<tr>
|
||||
<td>
|
||||
{{ r.user.lastname }}
|
||||
{{ r.user.firstname }}
|
||||
</td>
|
||||
<td class="center-align">
|
||||
{{ r.uTime|date('d/m/Y') }}
|
||||
</td>
|
||||
<td class="center-align">
|
||||
{% if r.video.cdnUrl is defined %}
|
||||
<i class="fa fa-eye modalBtn c-pointer hover-blue1" data-url="{{ r.video.cdnUrl }}"></i>
|
||||
{% endif %}
|
||||
<a href="{{ path('delete_recommendation',{id:r.id}) }}">
|
||||
<i class="fa fa-trash hover-red c-pointer color-black"></i>
|
||||
</a>
|
||||
{% if r.isVisible == false %}
|
||||
<span class="color-red">Désactivée</span>
|
||||
{% endif %}
|
||||
</td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
</tbody>
|
||||
</table>
|
||||
<p class="center-align"></p>
|
||||
</div>
|
||||
|
||||
<div id="modal_video" class="modal">
|
||||
<div class="modal-content">
|
||||
<h4>Vidéo de la recommandation</h4>
|
||||
<div class="videoContainer" style="text-align:center;">Loading...</div>
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
<button class="modal-action modal-close waves-effect waves-green btn-flat">Fermer</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{% endblock %}
|
||||
|
||||
{% block javascripts %}
|
||||
{{ parent() }}
|
||||
<script src="https://player.vimeo.com/api/player.js"></script>
|
||||
<script type="text/javascript">
|
||||
$('.modalBtn').click(function () {
|
||||
$('.videoContainer').html('');
|
||||
$('#modal_video').modal('open');
|
||||
var urlVideo = $(this).data("url");
|
||||
urlVideo = urlVideo.replace('videos', 'video');
|
||||
var player = '<div data-vimeo-url="https://vimeo.com' + urlVideo + '" id="player_vimeo"></div>';
|
||||
$('.videoContainer').html(player);
|
||||
var player_vimeo = new Vimeo.Player('player_vimeo');
|
||||
});
|
||||
</script>
|
||||
<script>
|
||||
$('.visibilityToggle').change(function () {
|
||||
var recId = $(this).data('id');
|
||||
var route = '/talent/me/recommandation/' + recId + '/toggle';
|
||||
$.ajax({
|
||||
type: "POST",
|
||||
url: route,
|
||||
dataType: "json",
|
||||
success: function (msg) {
|
||||
console.log(msg);
|
||||
}
|
||||
});
|
||||
});
|
||||
</script>
|
||||
{% endblock %}
|
||||
@@ -1,13 +1,6 @@
|
||||
{% for t in talents %}
|
||||
{% if t.users[0] is defined %}
|
||||
{% set user = t.users[0] %}
|
||||
{#{% if user.photo %}#}
|
||||
{#<img src="/{{ user.webPath }}" alt="{{ user.firstname }} {{ user.lastname }}"/>#}
|
||||
{#<span class="playerbtn"></span>#}
|
||||
{#{% endif %}#}
|
||||
|
||||
|
||||
|
||||
<div class="row item-list-bis">
|
||||
<div class="col s12 m12 l4 col-padding-right">
|
||||
<a href="{{ path('talent_show',{'alias': t.alias }) }}"
|
||||
|
||||
@@ -0,0 +1,13 @@
|
||||
<div class="profil-picture mini-profil-picture">
|
||||
{% if answer.user.getWebPath() %}
|
||||
{% if user.socialPicture is not null and user.photo is null %}
|
||||
<img class="circle responsive-img" src="{{ user.socialPicture }}" alt="{{ user.firstname }} {{ user.lastname|first|upper }}"/>
|
||||
{% elseif user.photo %}
|
||||
<img class="circle responsive-img" src="{{ user.webPath | imagine_filter('profile_square') }}" alt="{{ user.firstname }} {{ user.lastname }}"/>
|
||||
{% else %}
|
||||
<div class="circle-letters font-2">{{ user.firstname|first|upper }}{{ user.lastname|first|upper }}</div>
|
||||
{% endif %}
|
||||
{% else %}
|
||||
<div class="circle-letters font-2">{{ user.firstname|first|upper }}{{ user.lastname|first|upper }}</div>
|
||||
{% endif %}
|
||||
</div>
|
||||
@@ -1,64 +1,45 @@
|
||||
{% extends 'base.html.twig' %}
|
||||
|
||||
{% block title %}Recruter un(e) employé(e) spécialisé(e) {% for t in user.company.publicTag %}{{ t }} {% endfor %}| Talents Tube{% endblock %}
|
||||
{% block title %}Recruter un(e) employé(e) spécialisé(e)
|
||||
{% for t in user.company.publicTag %}{{ t }}
|
||||
{% endfor %}| Talents Tube{% endblock %}
|
||||
|
||||
{% block description %}Découvrez le CV vidéo de {{ user.firstname }}. Trouvez le prochain talent de votre équipe sur Talents Tube.{% endblock %}
|
||||
{% block description %}Découvrez le CV vidéo de
|
||||
{{ user.firstname }}. Trouvez le prochain talent de votre équipe sur Talents Tube.{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
{% include 'default/flash_message.html.twig' %}
|
||||
|
||||
<div class="fluid-container bg-grey-3 ">
|
||||
<div class="fluid-container bg-grey-3" id="talent-show">
|
||||
<div class="container contentWrapper contentPage">
|
||||
<div class="row">
|
||||
<div class="col s12 m4 l3" id="sidebar">
|
||||
<div class="profil center-align">
|
||||
{% set company = user.company %}
|
||||
<div class="profil-picture">
|
||||
{% if user.socialPicture is not null and user.photo is null %}
|
||||
<img class="circle responsive-img" src="{{ user.socialPicture }}" alt="{{ user.firstname }} {{ user.lastname|first|upper }}"/>
|
||||
{% elseif user.photo %}
|
||||
<img class="circle responsive-img" src="{{ user.webPath | imagine_filter('profile_square') }}" alt="{{ user.firstname }} {{ user.lastname }}"/>
|
||||
{% else %}
|
||||
<div class="circle-letters font-2">{{ user.firstname|first|upper }}{{ user.lastname|first|upper }}</div>
|
||||
{% endif %}
|
||||
</div>
|
||||
<p class="profil-name"><b>{{ user.firstname }} {{ user.lastname|upper }}</b></p>
|
||||
<div class="profil-picture">
|
||||
{% if user.socialPicture is not null and user.photo is null %}
|
||||
<img class="circle responsive-img" src="{{ user.socialPicture }}" alt="{{ user.firstname }} {{ user.lastname|first|upper }}"/>
|
||||
{% elseif user.photo %}
|
||||
<img class="circle responsive-img" src="{{ user.webPath | imagine_filter('profile_square') }}" alt="{{ user.firstname }} {{ user.lastname }}"/>
|
||||
{% else %}
|
||||
<div class="circle-letters font-2">{{ user.firstname|first|upper }}{{ user.lastname|first|upper }}</div>
|
||||
{% endif %}
|
||||
</div>
|
||||
<p class="profil-name">
|
||||
<b>{{ user.firstname }}
|
||||
{{ user.lastname|upper }}</b>
|
||||
</p>
|
||||
{% if company.addresses.billing is defined %}
|
||||
<p class="profil-city">{{ company.addresses.billing.city }}
|
||||
- {{ company.addresses.billing.country|country }}</p>
|
||||
{% endif %}
|
||||
</div>
|
||||
<div class="col s12 profil-links">
|
||||
{% if talent.extra.linkedin %}
|
||||
<a target="_blank" href="{{ talent.extra.linkedin }}" class="td-none">
|
||||
<span class="fa-stack fa-lg">
|
||||
<i class="fa fa-circle fa-stack-2x z-depth-2"></i>
|
||||
<i class="fa fa-linkedin fa-stack-1x fa-inverse"></i>
|
||||
</span>
|
||||
</a>
|
||||
{% endif %}
|
||||
{% if talent.extra.twitter %}
|
||||
<a target="_blank" href="{{ talent.extra.twitter }}" class="td-none">
|
||||
<span class="fa-stack fa-lg">
|
||||
<i class="fa fa-circle fa-stack-2x z-depth-2"></i>
|
||||
<i class="fa fa-twitter fa-stack-1x fa-inverse"></i>
|
||||
</span>
|
||||
</a>
|
||||
{% endif %}
|
||||
{% if talent.website %}
|
||||
<a target="_blank" href="{{ talent.website }}" class="td-none">
|
||||
<span class="fa-stack fa-lg">
|
||||
<i class="fa fa-circle fa-stack-2x z-depth-2"></i>
|
||||
<i class="fa fa-link fa-stack-1x fa-inverse"></i>
|
||||
</span>
|
||||
</a>
|
||||
-
|
||||
{{ company.addresses.billing.country|country }}</p>
|
||||
{% endif %}
|
||||
</div>
|
||||
<div class="col s12 center-align">
|
||||
<div class="divider"></div>
|
||||
<br />
|
||||
<br/>
|
||||
{% if is_granted("ROLE_COMPANY") %}
|
||||
<a class="btn btn-default contact-talent" href="#modal1">Contacter le talent</a>
|
||||
<a class="btn btn-default contact-talent" href="#modal1">Contacter le talent</a>
|
||||
{% endif %}
|
||||
</div>
|
||||
</div>
|
||||
@@ -67,26 +48,152 @@
|
||||
<div class="col s12 detail-item-video">
|
||||
{% if talent.presentationVideo %}
|
||||
<div class="video-responsive">
|
||||
<iframe src="https://player.vimeo.com/video/{{ talent.presentationVideo.cdnUrl|replace({ "/videos/": ""}) }}"
|
||||
width="100%" height="640" frameborder="0" webkitallowfullscreen mozallowfullscreen
|
||||
allowfullscreen></iframe>
|
||||
<iframe src="https://player.vimeo.com/video/{{ talent.presentationVideo.cdnUrl|replace({ "/videos/": ""}) }}" width="100%" height="640" frameborder="0" webkitallowfullscreen="webkitallowfullscreen" mozallowfullscreen="mozallowfullscreen" allowfullscreen="allowfullscreen"></iframe>
|
||||
</div>
|
||||
{% endif %}
|
||||
</div>
|
||||
</div>
|
||||
<div class="row bg-bordered">
|
||||
<div class="col s12">
|
||||
<h3 class="blue-text no-margin-top"> Le Cv vidéo de {{ user.firstname }} {{ user.lastname }}</h3>
|
||||
{% for tag in talent.publicTag %}
|
||||
<div class="chip">{{ tag }}</div>
|
||||
<div class="row bg-bordered talent-profile">
|
||||
<div class="col s8">
|
||||
<h3 class="no-margin-top">{{ user.company.extra.titleTalent }}</h3>
|
||||
<span>{{ user.company.extra.situationTalent|trans }}</span>
|
||||
</div>
|
||||
<div class="col s4 talent-border-left">
|
||||
<h3 class="no-margin-top talent-profile-title">DÉCOUVRIR SON PROFIL</h3>
|
||||
<div class="profil-links">
|
||||
{% if talent.extra.linkedin %}
|
||||
<a target="_blank" href="{{ talent.extra.linkedin }}" >
|
||||
<i class="fa fa-linkedin fa-inverse"></i>
|
||||
</a>
|
||||
{% endif %}
|
||||
{% if talent.extra.twitter %}
|
||||
<a target="_blank" href="{{ talent.extra.twitter }}" >
|
||||
<i class="fa fa-twitter fa-inverse"></i>
|
||||
</a>
|
||||
{% endif %}
|
||||
{% if talent.website %}
|
||||
<a target="_blank" href="{{ talent.website }}" >
|
||||
<i class="fa fa-globe-africa fa-inverse"></i>
|
||||
</a>
|
||||
{% endif %}
|
||||
</div>
|
||||
</div>
|
||||
<div class="col s12 talent-border-top">
|
||||
{% for tag in talent.publicTag if talent.publicTag[0] is not empty %}
|
||||
<div class="chip {% if loop.index > 5 %}chip-invisible{% endif %}">{{ tag }}</div>
|
||||
{% endfor %}
|
||||
{% if talent.publicTag|length > 5 %}
|
||||
<div class="chip chip-more">+ {{ talent.publicTag|length - 5 }}</div>
|
||||
{% endif %}
|
||||
</div>
|
||||
</div>
|
||||
{% if user.company.extra.descriptionTalent %}
|
||||
<div class="row bg-bordered">
|
||||
<div class="col s12">
|
||||
<h3 class="blue-text no-margin-top">{{ user.firstname }} {% trans %}en quelques mots{% endtrans %}</h3>
|
||||
</div>
|
||||
<div class="col s12">
|
||||
<p>
|
||||
{{ user.company.extra.descriptionTalent|raw|nl2br }}
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
{% endif %}
|
||||
{% if user.career %}
|
||||
<div class="row bg-bordered">
|
||||
<div class="col s12">
|
||||
<h3 class="blue-text no-margin-top">Expériences</h3>
|
||||
</div>
|
||||
<div class="col s12">
|
||||
<div class="col s12" id="career_container">
|
||||
{% include 'talent/profile_career.html.twig' with {'career': user.career } %}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{% endif %}
|
||||
<div class="row bg-bordered">
|
||||
<div class="col s12 header-recommendations">
|
||||
<h3 class="blue-text no-margin-top">{% trans %}label.recommendations{% endtrans %}</h3>
|
||||
{% if showRecommendation %}
|
||||
<a title="Recommander {{ user.firstname }} {{ user.lastname }}" href="{{urlRecommendation}}" id="recommendation" class=" btn btn-large btn-default" type="submit">
|
||||
{% trans %}label.button.recommendation{% endtrans %}
|
||||
{{ user.firstname }}
|
||||
</a>
|
||||
{% endif %}
|
||||
</div>
|
||||
{% if recommendations is not null %}
|
||||
<div class="recommendations-list">
|
||||
{% for recommendation in recommendations if recommendation.isVisible != false %}
|
||||
<div class="col s6 recommendation-block">
|
||||
<div class="video-responsive">
|
||||
<iframe src="https://player.vimeo.com/video/{{ recommendation.video.cdnUrl|replace({ "/videos/": ""}) }}" width="100%" height="640" frameborder="0" webkitallowfullscreen="webkitallowfullscreen" mozallowfullscreen="mozallowfullscreen" allowfullscreen="allowfullscreen"></iframe>
|
||||
</div>
|
||||
<div class="recommendation-user-infos">
|
||||
<div class="profil-picture">
|
||||
{% if recommendation.sender.socialPicture is not null and recommendation.sender.photo is null %}
|
||||
<img class="circle responsive-img" src="{{ recommendation.sender.socialPicture }}" alt="{{ recommendation.sender.firstname }} {{ recommendation.sender.lastname|first|upper }}"/>
|
||||
{% elseif user.photo %}
|
||||
<img class="circle responsive-img" src="{{ recommendation.sender.webPath | imagine_filter('profile_square') }}" alt="{{ recommendation.sender.firstname }} {{ recommendation.sender.lastname }}"/>
|
||||
{% else %}
|
||||
<div class="circle-letters font-2">{{ recommendation.sender.firstname|first|upper }}{{ recommendation.sender.lastname|first|upper }}</div>
|
||||
{% endif %}
|
||||
</div>
|
||||
<div>
|
||||
<span class="recommendation-user-name">{{ recommendation.sender.firstname }}
|
||||
{{ recommendation.sender.lastname }}</span>
|
||||
<br/>
|
||||
<span class="recommendation-date">{{ recommendation.ctime|localizeddate('medium', 'none', 'fr_FR') }}, {{ recommendation.relationType|replace({'choice': 'front'})|trans({'%{name}' : user.firstname,'%{name2}' : recommendation.sender.firstname})}}</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{% endfor %}
|
||||
</div>
|
||||
{% endif %}
|
||||
</div>
|
||||
{% if user.formation %}
|
||||
<div class="row bg-bordered">
|
||||
<div class="col s12">
|
||||
<h3 class="blue-text no-margin-top">Formations & Certifications </h3>
|
||||
</div>
|
||||
<div class="col s12">
|
||||
<div class="col s12" id="formation_container">
|
||||
{% include 'talent/profile_formation.html.twig' with {'formation': user.formation } %}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{% endif %}
|
||||
{% if user.language %}
|
||||
<div class="row bg-bordered">
|
||||
<div class="col s12">
|
||||
<h3 class="blue-text no-margin-top">Langues </h3>
|
||||
</div>
|
||||
<div class="col s12">
|
||||
<div class="col s12" id="formation_container">
|
||||
{% include 'talent/profile_language.html.twig' with {'language': user.language } %}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{% endif %}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{% set popup_recommendation = app.session.flashbag.get('popup_recommendation') %}
|
||||
{% if popup_recommendation is not empty %}
|
||||
{% if popup_recommendation == true %}
|
||||
<div id="modal-recommendation" class="modal">
|
||||
<div class="modal-content">
|
||||
<div class="col-content center-align">
|
||||
<span class="color-blue1">Votre recommandation a bien été envoyée à <br />{{ user.firstname }} {{ user.lastname }}</span>
|
||||
<hr />
|
||||
<a class="btn btn-default modal-action modal-close text-center">Fermer</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
|
||||
{% if is_granted("ROLE_COMPANY") %}
|
||||
<div id="modal1" class="modal">
|
||||
<div class="col s12 m12 l12">
|
||||
@@ -94,8 +201,10 @@
|
||||
<h4 class="no-margin-top">
|
||||
Contacter le talent
|
||||
</h4>
|
||||
<p>
|
||||
Expéditeur : {{ app.user.firstname }} {{ app.user.lastname }}
|
||||
Ex <p>
|
||||
péditeur :
|
||||
{{ app.user.firstname }}
|
||||
{{ app.user.lastname }}
|
||||
</p>
|
||||
{{ form_start(form) }}
|
||||
{{ form_rest(form) }}
|
||||
@@ -113,9 +222,28 @@
|
||||
|
||||
{% block javascripts %}
|
||||
{{ parent() }}
|
||||
<script type="text/javascript">
|
||||
{% if mustLogin == true %}
|
||||
$('#recommendation').on('click', function (event) {
|
||||
event.preventDefault();
|
||||
$('#modal_login').modal('open');
|
||||
});
|
||||
{% endif %}
|
||||
</script>
|
||||
<script>
|
||||
$(document).ready(function(){
|
||||
$.get( "{{ path('talent_ajaxRecStat',{'id': talent.id }) }}", function( data ) {
|
||||
$(document).ready(function () {
|
||||
$.get("{{ path('talent_ajaxRecStat',{'id': talent.id }) }}", function (data) {});
|
||||
if ($('#modal-recommendation').length > 0) {
|
||||
$('#modal-recommendation').modal({
|
||||
dismissible: false,
|
||||
ready: function (modal, trigger) {}
|
||||
});
|
||||
$('#modal-recommendation').modal('open');
|
||||
}
|
||||
|
||||
$(".chip-more").on('click',function(){
|
||||
$(this).fadeOut();
|
||||
$(".chip-invisible").css('display','inline-block');
|
||||
});
|
||||
});
|
||||
</script>
|
||||
|
||||
@@ -65,18 +65,21 @@
|
||||
<div class="col s11 col-noPadding" style="position:relative;">
|
||||
<div class="chip center-align">
|
||||
<p class="m-0">
|
||||
{% set nbAds = 0 %}
|
||||
{% set fragment = "companies" %}
|
||||
{% for territoryAd in c.getTerritoryAds if territoryAd.ad != null %}
|
||||
{% set nbAds = nbAds + 1 %}
|
||||
{% set fragment = "offers" %}
|
||||
{% endfor %}
|
||||
<a class="td-none color-grey3"
|
||||
href="{{ path('territory_show',{'alias': c.alias, '_fragment':'offers' }) }}">
|
||||
{% set nbAds = 0 %}
|
||||
{% for territoryAd in c.getTerritoryAds if territoryAd.ad != null %}
|
||||
{% set nbAds = nbAds + 1 %}
|
||||
{% endfor %}
|
||||
href="{{ path('territory_show',{'alias': c.alias, '_fragment': fragment }) }}">
|
||||
|
||||
{% if nbAds > 1 %}
|
||||
<strong>{{ nbAds }} offres d'emploi en
|
||||
cours sur ce territoire</strong>
|
||||
<strong>{{ nbAds }} {{ 'message.territory.list.ads'|trans }}</strong>
|
||||
{% elseif nbAds == 1 %}
|
||||
<strong>{{ nbAds }} {{ 'message.territory.list.ad'|trans }}</strong>
|
||||
{% else %}
|
||||
<strong>{{ nbAds }} offre d'emploi en
|
||||
cours sur ce territoire</strong>
|
||||
<strong>{{ 'message.territory.list.noads'|trans }}</strong>
|
||||
{% endif %}
|
||||
</a>
|
||||
</p>
|
||||
|
||||
@@ -71,11 +71,11 @@
|
||||
- {{ company.addresses.billing.country|country }}</p>
|
||||
{% endif %}
|
||||
</div>
|
||||
<div class="col s12 profil-links">
|
||||
<div class="col s12 profil-links center-align">
|
||||
{% if company.website %}
|
||||
<a target="_blank" href="{{ company.website }}" class="td-none">
|
||||
<span class="fa-stack fa-lg">
|
||||
<i class="fa fa-circle fa-stack-2x z-depth-2"></i>
|
||||
<i class="fa fa-circle fa-stack-2x"></i>
|
||||
<i class="fa fa-link fa-stack-1x fa-inverse"></i>
|
||||
</span>
|
||||
</a>
|
||||
|
||||
@@ -19,6 +19,7 @@ assetic:
|
||||
- 'js/vendors/jquery-confirm.min.js'
|
||||
- 'js/vendors/sly.min.js'
|
||||
- 'js/vendors/tooltipster.bundle.min.js'
|
||||
- 'js/vendors/readmore.min.js'
|
||||
global:
|
||||
inputs:
|
||||
- 'js/global.js'
|
||||
@@ -29,6 +30,18 @@ assetic:
|
||||
- 'js/company.js'
|
||||
- 'js/vendors/moment.min.js'
|
||||
- 'js/vendors/jquery.daterangepicker.min.js'
|
||||
talents:
|
||||
inputs:
|
||||
- 'js/vendors/jquery-3.1.1.min.js'
|
||||
- 'js/vendors/dropzone.js'
|
||||
- 'js/vendors/materialize.min.js'
|
||||
- 'js/vendors/materialize-tags.min.js'
|
||||
- 'js/vendors/typeahead.js'
|
||||
- 'js/vendors/jquery-confirm.min.js'
|
||||
- 'js/vendors/tooltipster.bundle.min.js'
|
||||
- 'js/vendors/datepicker.min.js'
|
||||
- 'js/vendors/jquery.validate.min.js'
|
||||
- 'js/talent.js'
|
||||
admin:
|
||||
inputs:
|
||||
- 'admin/AdminLTE/plugins/jQuery/jquery-2.2.3.min.js'
|
||||
|
||||
@@ -112,8 +112,8 @@ fos_user:
|
||||
# Edeclic Prestashop Bridge
|
||||
edeclic_prestashop_bridge:
|
||||
prestashop:
|
||||
cookie_key: "%prestashop_key%"
|
||||
presta_path: "%prestashop_path%"
|
||||
cookie_key: %prestashop_key%
|
||||
presta_path: %prestashop_path%
|
||||
shop_id: %prestashop_id%
|
||||
avoid_mode: %prestashop_avoid%
|
||||
ad_product_id: %prestashop_ad_id%
|
||||
|
||||
@@ -11,6 +11,11 @@ web_profiler:
|
||||
toolbar: true
|
||||
intercept_redirects: false
|
||||
|
||||
services:
|
||||
twig.extension.debug:
|
||||
class: Twig_Extension_Debug
|
||||
tags: [{ name: 'twig.extension' }]
|
||||
|
||||
monolog:
|
||||
handlers:
|
||||
main:
|
||||
|
||||
@@ -2,6 +2,18 @@ fos_elastica:
|
||||
clients:
|
||||
default: { host: %elastic_host%, port: %elastic_port% }
|
||||
indexes:
|
||||
tags:
|
||||
types:
|
||||
tagsfr:
|
||||
mappings:
|
||||
publicTag:
|
||||
analyzer: keyword
|
||||
type: text
|
||||
persistence:
|
||||
driver: orm
|
||||
model: AppBundle\Entity\Ad
|
||||
provider: ~
|
||||
finder: ~
|
||||
ads:
|
||||
settings:
|
||||
index:
|
||||
|
||||
@@ -3,8 +3,8 @@ security:
|
||||
in_memory:
|
||||
memory: ~
|
||||
fos_userbundle:
|
||||
id: fos_user.user_provider.username_email
|
||||
#id: app.user_provider
|
||||
#id: fos_user.user_provider.username_email
|
||||
id: app.user_provider
|
||||
|
||||
firewalls:
|
||||
dev:
|
||||
|
||||
@@ -19,6 +19,10 @@ services:
|
||||
class: AppBundle\Utils\Services\AdSearcher
|
||||
arguments: ['@fos_elastica.finder.ads.adfr']
|
||||
|
||||
app.ad_tags_searcher:
|
||||
class: AppBundle\Utils\Services\AdSearcher
|
||||
arguments: ['@fos_elastica.finder.tags.tagsfr']
|
||||
|
||||
# Twig Extensions
|
||||
twig.country_extension:
|
||||
class: AppBundle\Twig\CountryExtension
|
||||
@@ -39,7 +43,11 @@ services:
|
||||
class: AppBundle\Twig\AppExtension
|
||||
tags:
|
||||
- { name: twig.extension }
|
||||
|
||||
|
||||
twig.extension.intl:
|
||||
class: Twig_Extensions_Extension_Intl
|
||||
tags:
|
||||
- { name: twig.extension }
|
||||
# Listeners
|
||||
user.registration_listener:
|
||||
class: AppBundle\Utils\EventListener\RegistrationListener
|
||||
|
||||
@@ -298,7 +298,6 @@ class AdController extends Controller
|
||||
if ($form->isSubmitted() && $form->isValid()) {
|
||||
$data = $form->getData();
|
||||
if (is_null($data['job'])) {
|
||||
//return $this->redirectToRoute('homepage');
|
||||
$session->remove('jobSearch');
|
||||
unset($data['job']);
|
||||
} else {
|
||||
@@ -330,8 +329,13 @@ class AdController extends Controller
|
||||
]);
|
||||
|
||||
} else {
|
||||
|
||||
$ads = $this->getPublishedAds($promoted);
|
||||
if($request->get('tag')){
|
||||
$data['tag'] = $request->get('tag');
|
||||
$adSearcher = $this->get('app.ad_tags_searcher');
|
||||
$ads = $adSearcher->process($data,'tag');
|
||||
} else {
|
||||
$ads = $this->getPublishedAds($promoted);
|
||||
}
|
||||
}
|
||||
|
||||
return $this->render('default/ad_search_result.html.twig', [
|
||||
|
||||
@@ -0,0 +1,68 @@
|
||||
<?php
|
||||
|
||||
namespace AppBundle\Controller\Admin;
|
||||
|
||||
use AppBundle\Entity\Answer;
|
||||
use AppBundle\Entity\Ad;
|
||||
use AppBundle\Form\Admin\AdType;
|
||||
use AppBundle\Form\Admin\ModerationDeclineType;
|
||||
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
|
||||
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Security;
|
||||
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
|
||||
use Symfony\Component\HttpFoundation\Request;
|
||||
use Symfony\Component\HttpFoundation\JsonResponse;
|
||||
|
||||
class AnswerController extends Controller
|
||||
{
|
||||
|
||||
/***********************
|
||||
* MODERATION
|
||||
***********************/
|
||||
|
||||
/**
|
||||
* @Route("/admin/moderation/anwser/list", name="admin_anwser_moderation_list")
|
||||
*/
|
||||
public function adminAnswerModerationListAction()
|
||||
{
|
||||
$em = $this->getDoctrine()->getManager();
|
||||
$answers = $em->getRepository('AppBundle:Answer')->findAll();
|
||||
|
||||
return $this->render('admin/answer_list_moderation.html.twig', array(
|
||||
'answers' => $answers,
|
||||
));
|
||||
}
|
||||
|
||||
/**
|
||||
* @Route("/admin/config/answer/{id}/status/{status}", name="admin_answer_status")
|
||||
*/
|
||||
public function adminStatusAnswerAction(Answer $answer, $status)
|
||||
{
|
||||
$em = $this->getDoctrine()->getManager();
|
||||
$answer->setStatus($status);
|
||||
$em->persist($answer);
|
||||
$em->flush();
|
||||
$result = array("msg" => "toggle ok");
|
||||
return new JsonResponse($result);
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @Route("/admin/config/answer/{id}/delete", name="admin_answer_delete")
|
||||
*/
|
||||
public function adminAnswerDeleteAction(Answer $answer)
|
||||
{
|
||||
$em = $this->getDoctrine()->getManager();
|
||||
$t = $em->getRepository('AppBundle:User')->findByRole('ROLE_TALENT');
|
||||
$media = $answer->getVideo();
|
||||
$answer->setVideo(null);
|
||||
$em->remove($answer);
|
||||
$mediaManager = $this->get('media_manager');
|
||||
if($media){
|
||||
$mediaManager->delete($media);
|
||||
$em->remove($media);
|
||||
}
|
||||
$em->flush();
|
||||
|
||||
return $this->redirectToRoute('admin_anwser_moderation_list');
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,41 @@
|
||||
<?php
|
||||
|
||||
namespace AppBundle\Controller\Admin;
|
||||
|
||||
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
|
||||
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
|
||||
use AppBundle\Entity\Recommendation;
|
||||
use Symfony\Component\HttpFoundation\JsonResponse;
|
||||
|
||||
class RecommendationController extends Controller
|
||||
{
|
||||
|
||||
/**
|
||||
* @Route("/admin/config/recommandations/list", name="admin_config_recommendations")
|
||||
*/
|
||||
public function listeRecommendationAdminAction()
|
||||
{
|
||||
$em = $this->getDoctrine()->getManager();
|
||||
$recos = $em->getRepository('AppBundle:Recommendation')->findAll();
|
||||
return $this->render('admin/recommendation_list.html.twig', array(
|
||||
'recos' => $recos,
|
||||
));
|
||||
}
|
||||
|
||||
/**
|
||||
* @Route("/admin/config/recommandation/{id}/toggle", name="admin_recommendation_toggle")
|
||||
*/
|
||||
public function adminToggleRecommendationAction(Recommendation $recommendation)
|
||||
{
|
||||
$em = $this->getDoctrine()->getManager();
|
||||
$value = ($recommendation->getIsVisible() ? false : true);
|
||||
$recommendation->setIsVisible($value);
|
||||
$em->persist($recommendation);
|
||||
$em->flush();
|
||||
$result = array("msg" => "toggle ok");
|
||||
return new JsonResponse($result);
|
||||
$result = array("msg" => "toggle error");
|
||||
return new JsonResponse($result);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -4,17 +4,14 @@ namespace AppBundle\Controller\Admin;
|
||||
|
||||
use AppBundle\Entity\Company;
|
||||
use AppBundle\Entity\TerritoryAd;
|
||||
use AppBundle\Form\Admin\TalentAdminType;
|
||||
use AppBundle\Form\Admin\TerritoryAdminType;
|
||||
use AppBundle\Form\Admin\TerritoryAdType;
|
||||
use AppBundle\Form\Admin\TerritoryCompanyRemoveType;
|
||||
use AppBundle\Form\Admin\TerritoryCompanyType;
|
||||
use AppBundle\Form\Admin\TerritoryListAdType;
|
||||
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
|
||||
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
|
||||
use Symfony\Component\HttpFoundation\Request;
|
||||
|
||||
|
||||
class TerritoryController extends Controller
|
||||
{
|
||||
|
||||
@@ -39,6 +36,14 @@ class TerritoryController extends Controller
|
||||
$form = $this->createForm(TerritoryAdminType::class, $territory);
|
||||
$form->handleRequest($request);
|
||||
if ($form->isSubmitted() && $form->isValid()) {
|
||||
$type = $form['terType']->getData();
|
||||
$arrayExtra = $territory->getExtra();
|
||||
if (is_array($arrayExtra)) {
|
||||
$arrayExtra['terType'] = $type;
|
||||
} else {
|
||||
$arrayExtra = array('terType' => $type);
|
||||
}
|
||||
$territory->setExtra($arrayExtra);
|
||||
$companyManager = $this->get('app.company_manager');
|
||||
$companyManager->updateCompany($territory);
|
||||
return $this->redirectToRoute('admin_config_territory');
|
||||
|
||||
@@ -17,6 +17,7 @@ use Symfony\Component\HttpFoundation\Request;
|
||||
use Symfony\Component\HttpFoundation\Session\Session;
|
||||
use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
|
||||
use Symfony\Component\Security\Core\Authentication\Token\UsernamePasswordToken;
|
||||
use AppBundle\Entity\Media;
|
||||
|
||||
class AnswerController extends Controller
|
||||
{
|
||||
@@ -87,6 +88,7 @@ class AnswerController extends Controller
|
||||
$session = new Session();
|
||||
$session->getFlashBag()->add('popup_answer_already_send', false);
|
||||
$answer->setStatus('SENDED');
|
||||
$answer->setSendTime(new \DateTime('NOW'));
|
||||
$em->persist($answer);
|
||||
|
||||
$mediaManager = $this->get('media_manager');
|
||||
@@ -130,6 +132,7 @@ class AnswerController extends Controller
|
||||
|
||||
/**
|
||||
* @Route("/annonce/{id}/repondre/{type}", name="answer_create_ad_step2")
|
||||
* @security("type == 'webcam' or type == 'import' or type == 'videotheque'")
|
||||
*/
|
||||
public function createAnswerAdAction(Request $request, Ad $ad, $type = 'default')
|
||||
{
|
||||
@@ -138,6 +141,7 @@ class AnswerController extends Controller
|
||||
|
||||
/**
|
||||
* @Route("/entreprise/{id}/repondre/{type}", name="answer_create_company_step2")
|
||||
* @security("type == 'webcam' or type == 'import' or type == 'videotheque'")
|
||||
*/
|
||||
public function createAnswerCompanyAction(Request $request, Company $company, $type = 'default')
|
||||
{
|
||||
@@ -330,15 +334,41 @@ class AnswerController extends Controller
|
||||
$user = $this->getUser();
|
||||
$form = $this->createForm(ContactTalentType::class);
|
||||
$form->handleRequest($request);
|
||||
$em = $this->getDoctrine()->getManager();
|
||||
$videos = $em->getRepository('AppBundle:Media')->findBy(array('creator' => $this->getUser()));
|
||||
$existMessage = $em->getRepository('AppBundle:Message')->findOneBy(
|
||||
array(
|
||||
'sender' => $user,
|
||||
'recipient' => $answer->getUser(),
|
||||
'status' => 'DRAFT'
|
||||
)
|
||||
);
|
||||
if ($existMessage) {
|
||||
$message = $existMessage;
|
||||
} else {
|
||||
$message = new message('Draft', 'Draft', $this->getUser(), $answer->getUser(), 'DRAFT', $answer);
|
||||
$em->persist($message);
|
||||
$em->flush();
|
||||
}
|
||||
|
||||
if ($form->isSubmitted() && $form->isValid()) {
|
||||
$message = $form['message']->getData();
|
||||
$messageText = $form['message']->getData();
|
||||
if(!$messageText){
|
||||
$messageText = "";
|
||||
}
|
||||
$mediaManager = $this->get('media_manager');
|
||||
$mediaManager->getThumbnails($message);
|
||||
$htmlView = $this->renderView('email/contact_talent.html.twig', array(
|
||||
'type' => 'html',
|
||||
'message' => $message,
|
||||
'answer' => $answer,
|
||||
'messageText' => $messageText,
|
||||
'user' => $answer->getUser(),
|
||||
));
|
||||
$plainView = $this->renderView('email/contact_talent_plain.html.twig', array(
|
||||
'video' => $message->getVideo(),
|
||||
'message' => $message,
|
||||
));
|
||||
|
||||
$plainView = $this->renderView('email/contact_talent_plain.html.twig', array(
|
||||
'message' => $messageText,
|
||||
'user' => $answer->getUser(),
|
||||
));
|
||||
$email = \Swift_Message::newInstance()
|
||||
@@ -350,15 +380,25 @@ class AnswerController extends Controller
|
||||
->addPart($plainView, 'text/plain');
|
||||
$this->get('mailer')->send($email);
|
||||
$em = $this->getDoctrine()->getManager();
|
||||
$messageObj = new message('Candidature : ' . $title, $message, $user, $answer->getUser(), $form['status']->getData(), $answer);
|
||||
$em->persist($messageObj);
|
||||
$message->setSubject('Candidature : ' . $title);
|
||||
$message->setContent($messageText);
|
||||
$message->setStatus($form['status']->getData());
|
||||
$em->persist($message);
|
||||
$em->flush();
|
||||
return $this->redirectToRoute('company_answer_show', ['id' => $answer->getId()]);
|
||||
}
|
||||
|
||||
$formMessage = $form->createView();
|
||||
$formVideo = $form;
|
||||
$formVideo->remove('message');
|
||||
|
||||
return $this->render('company/answer_show.html.twig', [
|
||||
'answer' => $answer,
|
||||
'form' => $form->createView(),
|
||||
'form' => $formMessage,
|
||||
'formVideo' => $formVideo->createView(),
|
||||
'type' => $type,
|
||||
'videos' => $videos,
|
||||
'message' => $message
|
||||
]);
|
||||
}
|
||||
|
||||
@@ -370,9 +410,20 @@ class AnswerController extends Controller
|
||||
$user = $this->getUser();
|
||||
$em = $this->getDoctrine()->getManager();
|
||||
$answers = $em->getRepository('AppBundle:Answer')->getAnswerByCompany($user->getCompany()->getId());
|
||||
$spontaneous = $em->getRepository('AppBundle:Answer')->findBy(
|
||||
array(
|
||||
'company' => $user->getCompany()->getId(),
|
||||
'status' => 'SENDED'
|
||||
),
|
||||
array(
|
||||
'uTime' => 'DESC'
|
||||
)
|
||||
);
|
||||
|
||||
return $this->render('company/answer_list.html.twig', [
|
||||
'answers' => $answers,
|
||||
'type' => 'answer',
|
||||
'spontaneous' => $spontaneous,
|
||||
'type' => 'answer'
|
||||
]);
|
||||
}
|
||||
|
||||
@@ -399,9 +450,11 @@ class AnswerController extends Controller
|
||||
{
|
||||
$em = $this->getDoctrine()->getManager();
|
||||
|
||||
$answers = $em->getRepository('AppBundle:Answer')->findBy(array('ad' => $ad, 'status' => 'SENDED'));
|
||||
$answers = $em->getRepository('AppBundle:Answer')->findBy(array('ad' => $ad, 'status' => 'SENDED'),array('sendTime' => 'DESC'));
|
||||
return $this->render('company/ad_answer_list.html.twig', [
|
||||
'answers' => $answers,
|
||||
'type' => 'annonce',
|
||||
'ad' => $ad
|
||||
]);
|
||||
}
|
||||
|
||||
@@ -451,4 +504,30 @@ class AnswerController extends Controller
|
||||
return new JsonResponse(array('success' => "true"));
|
||||
}
|
||||
|
||||
/**
|
||||
* UPLOAD de Media
|
||||
*/
|
||||
|
||||
/**
|
||||
* @Route("/importer-son-cv", name="talent_cv_import")
|
||||
*/
|
||||
public function talentCVImportrAction(Request $request)
|
||||
{
|
||||
$securityContext = $this->container->get('security.authorization_checker');
|
||||
if (!$securityContext->isGranted('IS_AUTHENTICATED_FULLY')) {
|
||||
$this->createAnonymousUser();
|
||||
}
|
||||
$em = $this->getDoctrine()->getManager();
|
||||
$user = $this->getUser();
|
||||
$mustLogin = false;
|
||||
if (!$user->hasRole('ROLE_TALENT')) {
|
||||
$mustLogin = true;
|
||||
}
|
||||
|
||||
return $this->render('media/media_create_step1.html.twig', array(
|
||||
'mustLogin' => $mustLogin,
|
||||
));
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
@@ -12,9 +12,8 @@ use Edeclic\PrestashopBridgeBundle\Event\UserEvent;
|
||||
use Sensio\Bundle\FrameworkExtraBundle\Configuration\ParamConverter;
|
||||
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
|
||||
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
|
||||
use Symfony\Component\HttpFoundation\Request;
|
||||
use Symfony\Component\HttpFoundation\JsonResponse;
|
||||
|
||||
use Symfony\Component\HttpFoundation\Request;
|
||||
|
||||
class CompanyController extends Controller
|
||||
{
|
||||
@@ -31,7 +30,7 @@ class CompanyController extends Controller
|
||||
$records = $stats->getCompanyDashboard($this->getUser()->getCompany()->getId(), null);
|
||||
return $this->render('company/dashboard.html.twig', [
|
||||
'ads' => $ads,
|
||||
'arrayByAds' => $records['arrayByAds']
|
||||
'arrayByAds' => $records['arrayByAds'],
|
||||
]);
|
||||
}
|
||||
|
||||
@@ -41,7 +40,7 @@ class CompanyController extends Controller
|
||||
public function companyAjaxDashboardAction(Request $request)
|
||||
{
|
||||
$stats = $this->get("app.stats_manager");
|
||||
if( ($request->request->get('date1') != 0) && ($request->request->get('date2') != 0) ) {
|
||||
if (($request->request->get('date1') != 0) && ($request->request->get('date2') != 0)) {
|
||||
$dateBegin = new \DateTime();
|
||||
$dateEnd = new \DateTime();
|
||||
$dateBegin->setTimestamp(strtotime($request->request->get('date1')));
|
||||
@@ -109,7 +108,7 @@ class CompanyController extends Controller
|
||||
$this->get('translator')->trans('company.account.save.title')
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
$formFactory = $this->container->get('fos_user.change_password.form.factory');
|
||||
$formPw = $formFactory->createForm();
|
||||
$formPw->setData($user);
|
||||
@@ -174,9 +173,7 @@ class CompanyController extends Controller
|
||||
return $this->redirect($this->getParameter('prestashop_url') . 'index.php?controller=order');
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
/**
|
||||
* @Route("/company_ajaxRecStat/{id}", name="company_ajaxRecStat")
|
||||
*/
|
||||
public function companyAjaxRecStatAction(Request $request, Company $company)
|
||||
@@ -206,8 +203,8 @@ class CompanyController extends Controller
|
||||
$em = $this->getDoctrine()->getManager();
|
||||
$companyAds = $em->getRepository('AppBundle:Ad')->findBy(array(
|
||||
'company' => $company,
|
||||
'status' => "PUBLISHED"
|
||||
));
|
||||
'status' => "PUBLISHED",
|
||||
), array('isPromoted' => 'ASC'));
|
||||
$mediaManager = $this->get('media_manager');
|
||||
foreach ($companyAds as $ad) {
|
||||
$mediaManager->getThumbnails($ad);
|
||||
@@ -215,7 +212,7 @@ class CompanyController extends Controller
|
||||
|
||||
return $this->render('company/company_show.html.twig', [
|
||||
'company' => $company,
|
||||
'companyAds' => $companyAds
|
||||
'companyAds' => $companyAds,
|
||||
]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2,13 +2,9 @@
|
||||
|
||||
namespace AppBundle\Controller;
|
||||
|
||||
use AppBundle\Entity\Ad;
|
||||
use AppBundle\Entity\Company;
|
||||
use AppBundle\Form\AdSearchType;
|
||||
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
|
||||
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
|
||||
use Symfony\Component\HttpFoundation\Request;
|
||||
|
||||
|
||||
class DefaultController extends Controller
|
||||
{
|
||||
@@ -19,13 +15,13 @@ class DefaultController extends Controller
|
||||
{
|
||||
$em = $this->getDoctrine()->getManager();
|
||||
$ads = $em->getRepository('AppBundle:Ad')->findBy(array("status" => "PUBLISHED", "emphasis" => true, "isPromoted" => false), array('emphasisOrder' => 'DESC'));
|
||||
if(!$ads) {
|
||||
$ads = $em->getRepository('AppBundle:Ad')->findBy(array("status" => "PUBLISHED", "isPromoted" => false), array('id' => 'DESC'));
|
||||
if (!$ads) {
|
||||
$ads = $em->getRepository('AppBundle:Ad')->findBy(array("status" => "PUBLISHED", "isPromoted" => false), array('id' => 'DESC'));
|
||||
}
|
||||
$talents = $em->getRepository('AppBundle:Company')->findBy(array("type" => "TALENT", "emphasis" => true), array('emphasisOrder' => 'ASC'));
|
||||
$talents = $em->getRepository('AppBundle:Company')->findBy(array("type" => "TALENT", "emphasis" => true), array('emphasisOrder' => 'DESC'));
|
||||
$companies = $em->getRepository('AppBundle:Company')->findBy(array("type" => "COMPANY", "emphasis" => true), array('emphasisOrder' => 'ASC'));
|
||||
$territories = $em->getRepository('AppBundle:Company')->findBy(array("type" => "TERRITORY"));
|
||||
|
||||
$territories = $em->getRepository('AppBundle:Company')->findBy(array("type" => "TERRITORY", "emphasis" => true), array('emphasisOrder' => 'ASC'));
|
||||
|
||||
$arrayTalents = array();
|
||||
foreach ($talents as $talent) {
|
||||
if ($talent->getPresentationVideo()) {
|
||||
@@ -36,15 +32,10 @@ class DefaultController extends Controller
|
||||
$arrayCompany = array();
|
||||
foreach ($companies as $company) {
|
||||
if ($company->getPresentationVideo()) {
|
||||
$arrayCompany[] = $company;
|
||||
$arrayCompany[] = $company;
|
||||
}
|
||||
}
|
||||
|
||||
$arrayTerritory = array();
|
||||
foreach ($territories as $territory) {
|
||||
$arrayTerritory[] = $territory;
|
||||
}
|
||||
|
||||
$mediaManager = $this->get('media_manager');
|
||||
foreach ($ads as $ad) {
|
||||
$mediaManager->getThumbnails($ad);
|
||||
@@ -54,15 +45,19 @@ class DefaultController extends Controller
|
||||
$mediaManager->getThumbnails($company);
|
||||
}
|
||||
|
||||
foreach ($territories as $t) {
|
||||
$mediaManager->getThumbnails($t);
|
||||
}
|
||||
|
||||
$form = $this->createForm(AdSearchType::class);
|
||||
|
||||
return $this->render(
|
||||
'default/index.html.twig', [
|
||||
'ads' => $ads,
|
||||
'companies' => $arrayCompany,
|
||||
'talents' => $arrayTalents,
|
||||
'territories' => $arrayTerritory,
|
||||
'searchform' => $form->createView()
|
||||
'ads' => $ads,
|
||||
'companies' => $arrayCompany,
|
||||
'talents' => $arrayTalents,
|
||||
'territories' => $territories,
|
||||
'searchform' => $form->createView(),
|
||||
]
|
||||
);
|
||||
}
|
||||
@@ -73,9 +68,9 @@ class DefaultController extends Controller
|
||||
public function redirect_dashboard()
|
||||
{
|
||||
$user = $this->getUser();
|
||||
if($user){
|
||||
if ($user) {
|
||||
if ($user->hasRole('ROLE_TALENT')) {
|
||||
|
||||
|
||||
return $this->redirectToRoute('talent_dashboard');
|
||||
} elseif ($user->hasRole('ROLE_COMPANY')) {
|
||||
|
||||
|
||||
@@ -14,10 +14,11 @@ use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
|
||||
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Security;
|
||||
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
|
||||
use Symfony\Component\Form\Extension\Core\Type\TextType;
|
||||
use Symfony\Component\HttpFoundation\Cookie;
|
||||
use Symfony\Component\HttpFoundation\JsonResponse;
|
||||
use Symfony\Component\HttpFoundation\Request;
|
||||
use Symfony\Component\HttpFoundation\Response;
|
||||
|
||||
use Symfony\Component\HttpFoundation\Session\Session;
|
||||
|
||||
class MediaController extends Controller
|
||||
{
|
||||
@@ -96,7 +97,7 @@ class MediaController extends Controller
|
||||
return $this->redirectToRoute('talent_media');
|
||||
}
|
||||
|
||||
return $this->render('media/media_list.html.twig', [
|
||||
return $this->render('media/media_list_talent.html.twig', [
|
||||
'form' => $form->createView(),
|
||||
'medias' => $medias,
|
||||
]);
|
||||
@@ -120,7 +121,7 @@ class MediaController extends Controller
|
||||
$form = $this->createFormBuilder($video)
|
||||
->add('title', TextType::class, array(
|
||||
'label' => 'Titre de la vidéo',
|
||||
'required' => true
|
||||
'required' => true,
|
||||
))
|
||||
->getForm();
|
||||
$form->handleRequest($request);
|
||||
@@ -135,7 +136,7 @@ class MediaController extends Controller
|
||||
'form' => $form->createView(),
|
||||
'ad' => $ad,
|
||||
'video' => $video,
|
||||
'videos' => $videos
|
||||
'videos' => $videos,
|
||||
));
|
||||
}
|
||||
|
||||
@@ -143,6 +144,18 @@ class MediaController extends Controller
|
||||
* Ajax & Webservices
|
||||
***********************/
|
||||
|
||||
/**
|
||||
* @Route("/media/changeThumbnail", name="video_changeThumbnail")
|
||||
*/
|
||||
public function changeThumbnailAction(Request $request)
|
||||
{
|
||||
$data = json_decode($request->getContent());
|
||||
$mediaManager = $this->get('media_manager');
|
||||
$message = $mediaManager->changeThumbnail($data->duration, $data->id);
|
||||
|
||||
return new JsonResponse($message);
|
||||
}
|
||||
|
||||
/**
|
||||
* @Route("/media/upload/{id}", name="upload_media")
|
||||
*/
|
||||
@@ -150,7 +163,7 @@ class MediaController extends Controller
|
||||
{
|
||||
$message = array('success' => 200,
|
||||
'filename' => null,
|
||||
'originalFilename' => null
|
||||
'originalFilename' => null,
|
||||
);
|
||||
foreach ($request->files as $uploadedFile) {
|
||||
$mediaManager = $this->get('media_manager');
|
||||
@@ -167,7 +180,7 @@ class MediaController extends Controller
|
||||
{
|
||||
$message = array('success' => 200,
|
||||
'filename' => null,
|
||||
'originalFilename' => null
|
||||
'originalFilename' => null,
|
||||
);
|
||||
foreach ($request->files as $uploadedFile) {
|
||||
$mediaManager = $this->get('media_manager');
|
||||
@@ -184,7 +197,7 @@ class MediaController extends Controller
|
||||
{
|
||||
$message = array('success' => 200,
|
||||
'filename' => null,
|
||||
'originalFilename' => null
|
||||
'originalFilename' => null,
|
||||
);
|
||||
foreach ($request->files as $uploadedFile) {
|
||||
$mediaManager = $this->get('media_manager');
|
||||
@@ -261,7 +274,7 @@ class MediaController extends Controller
|
||||
$user = $em->getRepository('AppBundle:User')->findOneBy(array('id' => $idUser));
|
||||
$video = $em->getRepository('AppBundle:Media')->findOneBy(array('id' => $idVideo));
|
||||
$company = $user->getCompany();
|
||||
if ($user->hasRole('ROLE_TALENT') || $user->hasRole('ROLE_TERRITORY') || ($user->hasRole('ROLE_COMPANY') && $company->hasCompanyVideo()) ) {
|
||||
if ($user->hasRole('ROLE_TALENT') || $user->hasRole('ROLE_TERRITORY') || ($user->hasRole('ROLE_COMPANY') && $company->hasCompanyVideo())) {
|
||||
$company->setPresentationVideo($video);
|
||||
}
|
||||
}
|
||||
@@ -299,7 +312,7 @@ class MediaController extends Controller
|
||||
return $this->redirect($this->generateUrl('talent_dashboard'));
|
||||
}
|
||||
return $this->render('profile/form_picture.html.twig', [
|
||||
'form' => $form->createView()
|
||||
'form' => $form->createView(),
|
||||
]);
|
||||
}
|
||||
|
||||
@@ -322,7 +335,39 @@ class MediaController extends Controller
|
||||
return $this->redirect($this->generateUrl('company_dashboard'));
|
||||
}
|
||||
return $this->render('profile/form_logo.html.twig', [
|
||||
'form' => $form->createView()
|
||||
'form' => $form->createView(),
|
||||
]);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @Route("/media/import/cv/{type}", name="media_import_cv")
|
||||
* @security("type == 'webcam' or type == 'import'")
|
||||
*/
|
||||
public function importCVAction(Request $request, $type = 'webcam')
|
||||
{
|
||||
$securityContext = $this->container->get('security.authorization_checker');
|
||||
if (!$securityContext->isGranted('IS_AUTHENTICATED_FULLY')) {
|
||||
return $this->redirectToRoute('talent_cv_import');
|
||||
}
|
||||
$em = $this->getDoctrine()->getManager();
|
||||
$user = $this->getUser();
|
||||
$mustLogin = false;
|
||||
if (!$user->hasRole('ROLE_TALENT')) {
|
||||
$mustLogin = true;
|
||||
}
|
||||
|
||||
/*Definition des urls de destination pour oauth login et register*/
|
||||
$destination_login = $this->generateUrl('talent_media');
|
||||
$this->get('twig')->addGlobal('destination_login', $destination_login);
|
||||
$session = new Session();
|
||||
$session->set('registration_destination', $destination_login);
|
||||
|
||||
$res = $this->render('media/media_create_' . $type . '.twig', array(
|
||||
'video' => null,
|
||||
'mustLogin' => $mustLogin,
|
||||
));
|
||||
$res->headers->setCookie(new Cookie('redirect_register', $destination_login));
|
||||
return $res;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -0,0 +1,64 @@
|
||||
<?php
|
||||
|
||||
namespace AppBundle\Controller;
|
||||
|
||||
use AppBundle\Entity\Message;
|
||||
use AppBundle\Entity\Media;
|
||||
use AppBundle\Entity\User;
|
||||
use AppBundle\Form\MediaType;
|
||||
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
|
||||
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Security;
|
||||
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
|
||||
use Symfony\Component\HttpFoundation\JsonResponse;
|
||||
use Symfony\Component\HttpFoundation\Request;
|
||||
use Symfony\Component\HttpFoundation\Response;
|
||||
|
||||
|
||||
class MessageController extends Controller
|
||||
{
|
||||
/***********************
|
||||
* Ajax / Webservices
|
||||
***********************/
|
||||
|
||||
/**
|
||||
* @Route("/media/deleteMessage/{id}", name="delete_media_message")
|
||||
*/
|
||||
public function removeFileMessageAction(Message $message)
|
||||
{
|
||||
$mediaManager = $this->get('media_manager');
|
||||
$return = $mediaManager->remove($message);
|
||||
|
||||
return new JsonResponse($return);
|
||||
}
|
||||
|
||||
/**
|
||||
* @Route("/media/uploadMessage/{id}", name="upload_media_message")
|
||||
*/
|
||||
public function uploadMessageAction(Request $request, Message $message)
|
||||
{
|
||||
$return = array('success' => 200,
|
||||
'filename' => null,
|
||||
'originalFilename' => null,
|
||||
);
|
||||
foreach ($request->files as $uploadedFile) {
|
||||
$mediaManager = $this->get('media_manager');
|
||||
$return = $mediaManager->upload($message, $uploadedFile, $message->getSender());
|
||||
}
|
||||
|
||||
return new JsonResponse($return);
|
||||
}
|
||||
|
||||
/**
|
||||
* @Route("/media/linkMessage/{id}", name="link_media_message")
|
||||
*/
|
||||
public function mediaMessageAction(Request $request, Message $message)
|
||||
{
|
||||
$em = $this->getDoctrine()->getManager();
|
||||
$video = $em->getRepository('AppBundle:Media')->find($request->request->get('idVideo'));
|
||||
$message->setVideo($video);
|
||||
$em->persist($message);
|
||||
$em->flush();
|
||||
|
||||
return new JsonResponse(array('success' => "true"));
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,228 @@
|
||||
<?php
|
||||
|
||||
namespace AppBundle\Controller;
|
||||
|
||||
use AppBundle\Entity\Company;
|
||||
use AppBundle\Entity\Recommendation;
|
||||
use AppBundle\Form\RecommendationDeleteType;
|
||||
use AppBundle\Form\RecommendationType;
|
||||
use Sensio\Bundle\FrameworkExtraBundle\Configuration\ParamConverter;
|
||||
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
|
||||
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Security;
|
||||
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
|
||||
use Symfony\Component\HttpFoundation\JsonResponse;
|
||||
use Symfony\Component\HttpFoundation\Request;
|
||||
use Symfony\Component\HttpFoundation\Session\Session;
|
||||
use Symfony\Component\Translation\Translator;
|
||||
use Symfony\Component\Translation\Loader\ArrayLoader;
|
||||
|
||||
class RecommendationController extends Controller
|
||||
{
|
||||
|
||||
/**
|
||||
* @Route("/talent/me/recommandations", name="recommandation_list")
|
||||
*/
|
||||
public function listeRecommendationAction()
|
||||
{
|
||||
$user = $this->getUser();
|
||||
$em = $this->getDoctrine()->getManager();
|
||||
$received = $em->getRepository('AppBundle:Recommendation')->findBy(array('user' => $user, 'isRemoved' => false));
|
||||
$sended = $em->getRepository('AppBundle:Recommendation')->findBy(array('sender' => $user, 'isRemoved' => false));
|
||||
return $this->render('talent/recommendations_list.html.twig', [
|
||||
'received' => $received,
|
||||
'sended' => $sended,
|
||||
]);
|
||||
}
|
||||
|
||||
/**
|
||||
* @Route("/talent/me/recommandation/{id}/toggle", name="recommendation_toggle")
|
||||
*/
|
||||
public function toggleRecommendationAction(Recommendation $recommendation)
|
||||
{
|
||||
$user = $this->getUser();
|
||||
if ($recommendation->getUser() == $user) {
|
||||
$em = $this->getDoctrine()->getManager();
|
||||
$value = ($recommendation->getIsEnabled() ? false : true);
|
||||
$recommendation->setIsEnabled($value);
|
||||
$em->persist($recommendation);
|
||||
$em->flush();
|
||||
$result = array("msg" => "toggle ok");
|
||||
return new JsonResponse($result);
|
||||
}
|
||||
$result = array("msg" => "toggle 403");
|
||||
return new JsonResponse($result);
|
||||
}
|
||||
|
||||
/**
|
||||
* @Route("/recommandation/{alias}/", name="recommandation_create")
|
||||
* @ParamConverter("company", options={"mapping": {"alias": "alias"}})
|
||||
*/
|
||||
public function createRecommendationAction(Request $request, Company $talent)
|
||||
{
|
||||
$em = $this->getDoctrine()->getManager();
|
||||
if (!$this->getUser()) {
|
||||
return $this->redirectToRoute('talent_show', array('alias' => $talent->getAlias()));
|
||||
}
|
||||
if ($this->getUser() && ($this->getUser()->getCompany()->getId() == $talent->getId())) {
|
||||
return $this->redirectToRoute('talent_show', array('alias' => $talent->getAlias()));
|
||||
}
|
||||
$existRecommendation = $em->getRepository('AppBundle:Recommendation')->findOneBy(array('status' => 'DRAFT', 'sender' => $this->getUser(), 'user' => $talent->getMainUser()));
|
||||
if ($existRecommendation) {
|
||||
$recommendation = $existRecommendation;
|
||||
//return $this->redirectToRoute('talent_show', array('alias' => $talent->getAlias()));
|
||||
} else {
|
||||
$recommendation = new Recommendation($talent->getMainUser(), $this->getUser());
|
||||
$recommendation->setStatus('DRAFT');
|
||||
$em->persist($recommendation);
|
||||
$em->flush();
|
||||
}
|
||||
$video = $recommendation->getVideo();
|
||||
$firstname = $recommendation->getUser()->getFirstname();
|
||||
|
||||
$relations = array(
|
||||
$this->get('translator')->trans('label.choice.imtheboss', array('%{name}' => $firstname)) => 'label.choice.imtheboss',
|
||||
$this->get('translator')->trans('label.choice.sheistheboss', array('%{name}' => $firstname)) => 'label.choice.sheistheboss',
|
||||
$this->get('translator')->trans('label.choice.sheismyscollege', array('%{name}' => $firstname)) => 'label.choice.sheismyscollege'
|
||||
);
|
||||
$form = $this->createForm(RecommendationType::class, $recommendation, array('extra_fields_message' => $relations));
|
||||
//$form->remove('relationType');
|
||||
$form->handleRequest($request);
|
||||
|
||||
if ($form->isSubmitted() && $form->isValid()) {
|
||||
$relationType = $form->getData()->getRelationType();
|
||||
$recommendation->setRelationType($relationType);
|
||||
$em->persist($recommendation);
|
||||
$em->flush();
|
||||
return $this->redirect($this->generateUrl('finishRecommendation', array('talent' => $talent->getId(), 'recommendation' => $recommendation->getId())));
|
||||
}
|
||||
|
||||
return $this->render('recommendation/recommendation_create_webcam.twig', array(
|
||||
'routeReturn' => $this->generateUrl('talent_show', array('alias' => $talent->getAlias())),
|
||||
'typeObject' => 'Recommendation',
|
||||
'object' => $recommendation,
|
||||
'recommendation' => $recommendation,
|
||||
'form' => $form->createView(),
|
||||
'userTalent' => $talent->getMainUser(),
|
||||
'talent' => $talent,
|
||||
'video' => $video,
|
||||
));
|
||||
}
|
||||
|
||||
/**
|
||||
* @Route("/recommendation/submit/{talent}/{recommendation}", name="finishRecommendation")
|
||||
* @Security("recommendation.getSender().getId() == user.getId()")
|
||||
*/
|
||||
public function finishRecommendationAction(Request $request, Company $talent, Recommendation $recommendation)
|
||||
{
|
||||
$securityContext = $this->container->get('security.authorization_checker');
|
||||
if (false === $this->get('security.authorization_checker')->isGranted('ROLE_TALENT')) {
|
||||
return $this->redirect($this->generateUrl('talent_show', array('alias' => $talent->getAlias())));
|
||||
}
|
||||
if ($recommendation) {
|
||||
|
||||
$em = $this->getDoctrine()->getManager();
|
||||
$recommendation->setStatus('SENDED');
|
||||
$session = new Session();
|
||||
$contact = $recommendation->getUser();
|
||||
$session->getFlashBag()->add('popup_recommendation', true);
|
||||
$mailManager = $this->get('app.mail_manager');
|
||||
$link = $this->generateUrl('recommandation_list');
|
||||
$mailManager->sendMail(
|
||||
'Recommendation TalentsTube ',
|
||||
$this->get('translator')->trans('recommendation.email.message.html',
|
||||
array(
|
||||
'%lastname%' => $contact->getLastname(),
|
||||
'%firstname%' => $contact->getFirstname(),
|
||||
'%firstname_sender%' => $recommendation->getSender()->getFirstname(),
|
||||
'%lastname_sender%' => $recommendation->getSender()->getLastname(),
|
||||
'%recommendationUrl%' => $link
|
||||
)
|
||||
),
|
||||
$contact,
|
||||
'contact_default'
|
||||
);
|
||||
|
||||
}
|
||||
$em->persist($recommendation);
|
||||
$em->flush();
|
||||
|
||||
return $this->redirect($this->generateUrl('talent_show', array('alias' => $talent->getAlias())));
|
||||
}
|
||||
|
||||
/**
|
||||
* @Route("/talent/me/recommendation/{id}/delete", name="delete_recommendation")
|
||||
* @Security("recommendation.getSender().getId() == user.getId()")
|
||||
*/
|
||||
public function deleteRecommendationAction(Recommendation $recommendation, Request $request)
|
||||
{
|
||||
$form = $this->createForm(RecommendationDeleteType::class, $recommendation);
|
||||
$form->handleRequest($request);
|
||||
if ($form->isSubmitted() && $form->isValid()) {
|
||||
$recommendation->setIsRemoved(true);
|
||||
$em = $this->getDoctrine()->getManager();
|
||||
$em->persist($recommendation);
|
||||
$contact = $recommendation->getUser();
|
||||
$sender = $recommendation->getSender();
|
||||
$mailManager = $this->get('app.mail_manager');
|
||||
$mailManager->sendMail(
|
||||
'Recommendation TalentsTube ',
|
||||
'<div style="margin:0 auto;max-width:600px;background:#FFFFFF;"><table class="" cellpadding="0" cellspacing="0" style="width:100%;font-size:0px;background:#FFFFFF;" align="center"><tbody><tr><td style="text-align:center;vertical-align:top;font-size:0;padding:0px;"><!--[if mso]>
|
||||
<table border="0" cellpadding="0" cellspacing="0"><tr><td style="width:600px;">
|
||||
<![endif]--><div style="vertical-align:top;display:inline-block;font-size:13px;text-align:left;width:100%;" class="mj-column-per-100" aria-labelledby="mj-column-per-100"><table width="100%"><tbody><tr><td style="font-size:0;padding:0px;" align="center"><table cellpadding="0" cellspacing="0" style="border-collapse:collapse;border-spacing:0px;" align="center"><tbody><tr><td></td></tr></tbody></table></td></tr></tbody></table></div><!--[if mso]>
|
||||
</td></tr></table>
|
||||
<![endif]--></td></tr></tbody></table></div>
|
||||
|
||||
<div style="margin:0 auto;max-width:600px;background:#FFFFFF;"><table class="" cellpadding="0" cellspacing="0" style="width:100%;font-size:0px;background:#FFFFFF;" align="center"><tbody><tr><td style="text-align:center;vertical-align:top;font-size:0;padding:0px;"><!--[if mso]>
|
||||
<table border="0" cellpadding="0" cellspacing="0"><tr><td style="width:600px;">
|
||||
<![endif]--><div style="vertical-align:top;display:inline-block;font-size:13px;text-align:left;width:100%;" class="mj-column-per-100" aria-labelledby="mj-column-per-100"><table width="100%"><tbody><tr><td style="font-size:0;padding:20px 35px 20px 35px;" align="left"><div class="mj-content" style="cursor:auto;color:#534F4F;font-family:Trebuchet,Helvetica,sans-serif;font-size:14px;line-height:22px;"><p>Bonjour ' . $contact->getLastname() . ' ' . $contact->getFirstname() . ',</p>
|
||||
<p> Nous vous informons que la recommendation effectuée par M/Mme ' . $sender->getLastname() . ' ' . $sender->getFirstname() . ' à été supprimée à la demande de cette personne. Vous trouverez ci-après le message lié à cette suppression :<br /><br /><br> '. $recommendation->getMessage() .'</p></div></td></tr></tbody></table></div><!--[if mso]>
|
||||
</td></tr></table>
|
||||
<![endif]--></td></tr></tbody></table></div>
|
||||
|
||||
<div style="margin:0 auto;max-width:600px;background:#FFFFFF;"><table class="" cellpadding="0" cellspacing="0" style="width:100%;font-size:0px;background:#FFFFFF;" align="center"><tbody><tr><td style="text-align:center;vertical-align:top;font-size:0;padding:0px 0px 40px 0px;"><!--[if mso]>
|
||||
',
|
||||
$contact,
|
||||
'contact_default'
|
||||
);
|
||||
$em->flush();
|
||||
return $this->redirect($this->generateUrl('recommandation_list'));
|
||||
}
|
||||
|
||||
return $this->render('talent/recommendation_delete.html.twig', array(
|
||||
'form' => $form->createView(),
|
||||
));
|
||||
}
|
||||
|
||||
/***********************
|
||||
* Ajax / Webservices
|
||||
***********************/
|
||||
|
||||
/**
|
||||
* @Route("/media/deleteRecommendation/{id}", name="delete_media_recommendation")
|
||||
*/
|
||||
public function removeFileRecommendationAction(Recommendation $recommendation)
|
||||
{
|
||||
$mediaManager = $this->get('media_manager');
|
||||
$message = $mediaManager->remove($recommendation);
|
||||
|
||||
return new JsonResponse($message);
|
||||
}
|
||||
|
||||
/**
|
||||
* @Route("/media/uploadRecommendation/{id}", name="upload_media_recommendation")
|
||||
*/
|
||||
public function uploadRecommendationAction(Request $request, Recommendation $recommendation)
|
||||
{
|
||||
$message = array('success' => 200,
|
||||
'filename' => null,
|
||||
'originalFilename' => null,
|
||||
);
|
||||
foreach ($request->files as $uploadedFile) {
|
||||
$mediaManager = $this->get('media_manager');
|
||||
$message = $mediaManager->upload($recommendation, $uploadedFile, $recommendation->getUser());
|
||||
}
|
||||
|
||||
return new JsonResponse($message);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -4,17 +4,28 @@ namespace AppBundle\Controller;
|
||||
|
||||
use AppBundle\Entity\Ad;
|
||||
use AppBundle\Entity\Company;
|
||||
use AppBundle\Entity\Answer;
|
||||
use AppBundle\Entity\Message;
|
||||
use AppBundle\Entity\Recommendation;
|
||||
use AppBundle\Form\ContactTalentType;
|
||||
use AppBundle\Form\MediaType;
|
||||
use AppBundle\Form\TalentProfileType;
|
||||
use AppBundle\Form\TalentType;
|
||||
use AppBundle\Form\CareersType;
|
||||
use AppBundle\Form\FormationsType;
|
||||
use AppBundle\Form\LanguagesType;
|
||||
use Edeclic\PrestashopBridgeBundle\Event\PrestashopBridgeEvents;
|
||||
use Edeclic\PrestashopBridgeBundle\Event\UserEvent;
|
||||
use Sensio\Bundle\FrameworkExtraBundle\Configuration\ParamConverter;
|
||||
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
|
||||
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Security;
|
||||
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
|
||||
use Symfony\Component\HttpFoundation\JsonResponse;
|
||||
use Symfony\Component\HttpFoundation\Request;
|
||||
use Symfony\Component\HttpFoundation\Cookie;
|
||||
use Symfony\Component\HttpFoundation\Session\Session;
|
||||
use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
|
||||
use Symfony\Component\Security\Core\Authentication\Token\UsernamePasswordToken;
|
||||
|
||||
|
||||
class TalentController extends Controller
|
||||
@@ -31,11 +42,28 @@ class TalentController extends Controller
|
||||
]);
|
||||
}
|
||||
|
||||
private static function sortByBeginYearCareer($x, $y) {
|
||||
|
||||
return strcasecmp($y['beginYearCareer'], $x['beginYearCareer']);
|
||||
}
|
||||
|
||||
private static function sortByBeginYearFormation($x, $y) {
|
||||
|
||||
return strcasecmp($y['beginYearFormation'], $x['beginYearFormation']);
|
||||
}
|
||||
|
||||
private static function sortByLanguageName($x, $y) {
|
||||
|
||||
return strcasecmp($y['nameLanguage'], $x['nameLanguage']);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @Route("/talent/me/", name="talent_dashboard")
|
||||
*/
|
||||
public function talentProfileAction(Request $request)
|
||||
{
|
||||
setlocale(LC_TIME, 'fr_FR.UTF8', 'fr.UTF8', 'fr_FR.UTF-8', 'fr.UTF-8');
|
||||
$em = $this->getDoctrine()->getManager();
|
||||
$history = $this->get('edeclic.history.record');
|
||||
$records = $history->recordShow($this->getUser()->getId(), "r", 'AppBundle\Entity\Ad', null);
|
||||
@@ -46,9 +74,10 @@ class TalentController extends Controller
|
||||
$historyAds[$objRecord->getId()] = $existAnswer;
|
||||
}
|
||||
$user = $this->getUser();
|
||||
$form = $this->createForm(TalentProfileType::class, $user);
|
||||
$form->handleRequest($request);
|
||||
if ($form->isSubmitted() && $form->isValid()) {
|
||||
|
||||
$formProfile = $this->createForm(TalentProfileType::class, $user);
|
||||
$formProfile->handleRequest($request);
|
||||
if ($formProfile->isSubmitted() && $formProfile->isValid()) {
|
||||
$companyManager = $this->get('app.company_manager');
|
||||
$companyManager->updateTalent($user);
|
||||
$event = new UserEvent($user);
|
||||
@@ -58,6 +87,59 @@ class TalentController extends Controller
|
||||
$this->get('translator')->trans('company.profile.save.title')
|
||||
);
|
||||
}
|
||||
|
||||
$formCompany = $this->createForm(TalentType::class, $user->getCompany());
|
||||
$formCompany->handleRequest($request);
|
||||
if ($formCompany->isSubmitted() && $formCompany->isValid()) {
|
||||
$companyManager = $this->get('app.company_manager');
|
||||
$companyManager->updateTalent($user);
|
||||
$this->addFlash(
|
||||
'notice',
|
||||
$this->get('translator')->trans('company.profile.save.title')
|
||||
);
|
||||
}
|
||||
|
||||
$formCareer = $this->createForm(CareersType::class, $user);
|
||||
$formCareer->handleRequest($request);
|
||||
if ($formCareer->isSubmitted() && $formCareer->isValid()) {
|
||||
$careers = $formCareer->getData()->getCareer();
|
||||
usort($careers, "static::sortByBeginYearCareer");
|
||||
$user->setCareer($careers);
|
||||
$em->persist($user);
|
||||
$em->flush();
|
||||
$this->addFlash(
|
||||
'notice',
|
||||
$this->get('translator')->trans('company.profile.save.title')
|
||||
);
|
||||
}
|
||||
|
||||
$formFormation = $this->createForm(FormationsType::class, $user);
|
||||
$formFormation->handleRequest($request);
|
||||
if ($formFormation->isSubmitted() && $formFormation->isValid()) {
|
||||
$formations = $formFormation->getData()->getFormation();
|
||||
usort($formations, "static::sortByBeginYearFormation");
|
||||
$user->setFormation($formations);
|
||||
$em->persist($user);
|
||||
$em->flush();
|
||||
$this->addFlash(
|
||||
'notice',
|
||||
$this->get('translator')->trans('company.profile.save.title')
|
||||
);
|
||||
}
|
||||
|
||||
$formLanguage = $this->createForm(LanguagesType::class, $user);
|
||||
$formLanguage->handleRequest($request);
|
||||
if ($formLanguage->isSubmitted() && $formLanguage->isValid()) {
|
||||
$languages = $formLanguage->getData()->getLanguage();
|
||||
$user->setLanguage($languages);
|
||||
$em->persist($user);
|
||||
$em->flush();
|
||||
$this->addFlash(
|
||||
'notice',
|
||||
$this->get('translator')->trans('company.profile.save.title')
|
||||
);
|
||||
}
|
||||
|
||||
$formMedia = $this->createForm(MediaType::class);
|
||||
$formMedia->handleRequest($request);
|
||||
if ($formMedia->isSubmitted() && $formMedia->isValid()) {
|
||||
@@ -71,10 +153,16 @@ class TalentController extends Controller
|
||||
return $this->redirectToRoute('talent_media');
|
||||
}
|
||||
|
||||
|
||||
return $this->render('talent/profile.html.twig', [
|
||||
'form' => $form->createView(),
|
||||
'formProfile' => $formProfile->createView(),
|
||||
'formCompany' => $formCompany->createView(),
|
||||
'formCareer' => $formCareer->createView(),
|
||||
'formFormation' => $formFormation->createView(),
|
||||
'formLanguage' => $formLanguage->createView(),
|
||||
'formMedia' => $formMedia->createView(),
|
||||
'career' => $user->getCareer(),
|
||||
'formation' => $user->getFormation(),
|
||||
'language' => $user->getLanguage(),
|
||||
'historyAds' => $historyAds
|
||||
]);
|
||||
}
|
||||
@@ -107,6 +195,19 @@ class TalentController extends Controller
|
||||
return $this->render('talent/ad_space.html.twig', ['answers' => $answers]);
|
||||
}
|
||||
|
||||
/**
|
||||
* @Route("/talent/me/espace-oe/candidature/{alias}/{id}", name="talent_ad_detail")
|
||||
* @ParamConverter("answer", options={"mapping": {"id": "id"}})
|
||||
* @Security("answer.getUser().getId() == user.getId()")
|
||||
*/
|
||||
public function talentOeDetailAction(Request $request, $alias, Answer $answer)
|
||||
{
|
||||
|
||||
return $this->render('talent/ad_detail.html.twig', [
|
||||
'answer' => $answer
|
||||
]);
|
||||
}
|
||||
|
||||
/**
|
||||
* @Route("/talent/me/mes-recherches", name="talent_my_searches")
|
||||
*/
|
||||
@@ -188,7 +289,7 @@ class TalentController extends Controller
|
||||
*/
|
||||
public function talentShowAction(Request $request, Company $talent)
|
||||
{
|
||||
|
||||
setlocale(LC_ALL, 'fr_FR.utf-8');
|
||||
$user = $talent->getUsers();
|
||||
$subject = "Demande de contact";
|
||||
$form = $this->createForm(ContactTalentType::class, array("subject" => false));
|
||||
@@ -196,12 +297,12 @@ class TalentController extends Controller
|
||||
if ($form->isSubmitted() && $form->isValid()) {
|
||||
$userCompany = $this->getUser();
|
||||
$message = $form['message']->getData();
|
||||
$htmlView = $this->renderView('email/contact_talent.html.twig', array(
|
||||
$htmlView = $this->renderView('email/contact_default.html.twig', array(
|
||||
'type' => 'html',
|
||||
'message' => $message,
|
||||
'user' => $user{0},
|
||||
));
|
||||
$plainView = $this->renderView('email/contact_talent.html.twig', array(
|
||||
$plainView = $this->renderView('email/contact_default.html.twig', array(
|
||||
'type' => 'plain',
|
||||
'message' => $message,
|
||||
'user' => $user{0},
|
||||
@@ -224,10 +325,40 @@ class TalentController extends Controller
|
||||
$em->close();
|
||||
return $this->redirectToRoute('talent_show', ['alias' => $talent->getAlias()]);
|
||||
}
|
||||
return $this->render('talent/talent_show.html.twig', [
|
||||
$mustLogin = true;
|
||||
if ($this->getUser() && $this->getUser()->hasRole('ROLE_TALENT')) {
|
||||
$mustLogin = false;
|
||||
if ($this->getUser() && ($this->getUser()->getCompany()->getId() == $talent->getId())) {
|
||||
$showRecommendation = false;
|
||||
}
|
||||
}
|
||||
|
||||
$showRecommendation = true;
|
||||
if ($this->getUser() && !$this->getUser()->hasRole('ROLE_TALENT')) {
|
||||
$showRecommendation = false;
|
||||
}
|
||||
|
||||
$em = $this->getDoctrine()->getManager();
|
||||
$recommendations = $em->getRepository('AppBundle:Recommendation')->findBy(
|
||||
array('isEnabled'=>true, 'status'=> 'SENDED', 'user'=> $talent->getMainUser()),
|
||||
array('uTime' => 'DESC')
|
||||
);
|
||||
/*Definition des urls de destination pour oauth login et register pour la recommandation vidéo*/
|
||||
$destination = $this->generateUrl('recommandation_create', array('alias' => $talent->getAlias()));
|
||||
$this->get('twig')->addGlobal('destination_login', $destination);
|
||||
$session = $request->getSession();
|
||||
$session->set('registration_destination', $destination);
|
||||
$res = $this->render('talent/talent_show.html.twig', [
|
||||
'talent' => $talent,
|
||||
'user' => $user{0},
|
||||
'form' => $form->createView()
|
||||
'form' => $form->createView(),
|
||||
'mustLogin' => $mustLogin,
|
||||
'showRecommendation' => $showRecommendation,
|
||||
'urlRecommendation' => $destination,
|
||||
'recommendations' => $recommendations
|
||||
]);
|
||||
$res->headers->setCookie(new Cookie('redirect_register', $destination));
|
||||
|
||||
return $res;
|
||||
}
|
||||
}
|
||||
@@ -181,6 +181,7 @@ class Ad
|
||||
|
||||
/**
|
||||
* @ORM\OneToMany(targetEntity="AppBundle\Entity\Answer", mappedBy="ad", cascade={"persist", "remove"})
|
||||
* @ORM\OrderBy({"sendTime" = "DESC"})
|
||||
*/
|
||||
private $answers;
|
||||
|
||||
|
||||
@@ -6,6 +6,7 @@ use AppBundle\Utils\Traits\IsVisibleTrait;
|
||||
use AppBundle\Utils\Traits\StatusTrait;
|
||||
use AppBundle\Utils\Traits\TimestampableTrait;
|
||||
use Doctrine\ORM\Mapping as ORM;
|
||||
use Doctrine\Common\Collections\Criteria as Criteria;
|
||||
|
||||
/**
|
||||
* Answer
|
||||
@@ -66,6 +67,13 @@ class Answer
|
||||
*/
|
||||
private $comment;
|
||||
|
||||
/**
|
||||
* @var \DateTime $sendTime
|
||||
*
|
||||
* @ORM\Column(name="send_time", type="datetime", nullable=true)
|
||||
*/
|
||||
private $sendTime;
|
||||
|
||||
/***********************
|
||||
* OneToMany Array's
|
||||
***********************/
|
||||
@@ -77,6 +85,7 @@ class Answer
|
||||
|
||||
/**
|
||||
* @ORM\OneToMany(targetEntity="AppBundle\Entity\Message", mappedBy="answer", cascade={"persist", "remove"})
|
||||
* @ORM\OrderBy({"uTime" = "DESC"})
|
||||
*/
|
||||
private $messages;
|
||||
|
||||
@@ -115,6 +124,32 @@ class Answer
|
||||
|
||||
}
|
||||
|
||||
public function getMineMessages()
|
||||
{
|
||||
$criteria = Criteria::create()
|
||||
->where(Criteria::expr()->neq('status', "DRAFT"));
|
||||
|
||||
return $this->messages->matching($criteria);
|
||||
}
|
||||
|
||||
public function getFirstMessage(){
|
||||
$criteria = Criteria::create()
|
||||
->where(Criteria::expr()->neq('status', "DRAFT"));
|
||||
|
||||
return $this->messages->matching($criteria)->last();
|
||||
}
|
||||
|
||||
public function getIsViewed(){
|
||||
if($this->messages->count() >= 1){
|
||||
|
||||
return $this->messages->last();
|
||||
} else {
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/***********************
|
||||
* Getters & Setters
|
||||
***********************/
|
||||
@@ -344,4 +379,28 @@ class Answer
|
||||
{
|
||||
return $this->company;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set sendTime.
|
||||
*
|
||||
* @param \DateTime|null $sendTime
|
||||
*
|
||||
* @return Answer
|
||||
*/
|
||||
public function setSendTime($sendTime = null)
|
||||
{
|
||||
$this->sendTime = $sendTime;
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get sendTime.
|
||||
*
|
||||
* @return \DateTime|null
|
||||
*/
|
||||
public function getSendTime()
|
||||
{
|
||||
return $this->sendTime;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -57,6 +57,11 @@ class Message
|
||||
*/
|
||||
private $answer;
|
||||
|
||||
/**
|
||||
* @ORM\ManyToOne(targetEntity="AppBundle\Entity\Media", inversedBy="answers", cascade={"persist"})
|
||||
*/
|
||||
private $video;
|
||||
|
||||
/***********************
|
||||
* Constructor
|
||||
***********************/
|
||||
@@ -253,4 +258,28 @@ class Message
|
||||
{
|
||||
return $this->answer->removeElement($answer);
|
||||
}
|
||||
|
||||
/**
|
||||
* Set video.
|
||||
*
|
||||
* @param \AppBundle\Entity\Media|null $video
|
||||
*
|
||||
* @return Message
|
||||
*/
|
||||
public function setVideo(\AppBundle\Entity\Media $video = null)
|
||||
{
|
||||
$this->video = $video;
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get video.
|
||||
*
|
||||
* @return \AppBundle\Entity\Media|null
|
||||
*/
|
||||
public function getVideo()
|
||||
{
|
||||
return $this->video;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,295 @@
|
||||
<?php
|
||||
|
||||
namespace AppBundle\Entity;
|
||||
|
||||
use AppBundle\Utils\Traits\IsVisibleTrait;
|
||||
use AppBundle\Utils\Traits\StatusTrait;
|
||||
use AppBundle\Utils\Traits\TimestampableTrait;
|
||||
use Doctrine\ORM\Mapping as ORM;
|
||||
|
||||
/**
|
||||
* Recommendation
|
||||
*
|
||||
* @ORM\Table(name="recommendation")
|
||||
* @ORM\Entity()
|
||||
* @ORM\HasLifecycleCallbacks()
|
||||
*/
|
||||
class Recommendation
|
||||
{
|
||||
|
||||
use TimestampableTrait;
|
||||
use StatusTrait;
|
||||
use IsVisibleTrait;
|
||||
|
||||
/**
|
||||
* @var int
|
||||
*
|
||||
* @ORM\Column(name="id", type="integer")
|
||||
* @ORM\Id
|
||||
* @ORM\GeneratedValue(strategy="AUTO")
|
||||
*/
|
||||
private $id;
|
||||
|
||||
/**
|
||||
* @ORM\ManyToOne(targetEntity="AppBundle\Entity\User", inversedBy="sendedRecommendations", cascade={"persist"})
|
||||
*/
|
||||
private $sender;
|
||||
|
||||
/**
|
||||
* @ORM\ManyToOne(targetEntity="AppBundle\Entity\User", inversedBy="recommendations", cascade={"persist"})
|
||||
*/
|
||||
private $user;
|
||||
|
||||
/**
|
||||
* @ORM\ManyToOne(targetEntity="AppBundle\Entity\Media", inversedBy="answers", cascade={"persist"})
|
||||
*/
|
||||
private $video;
|
||||
|
||||
/**
|
||||
* @var string
|
||||
*
|
||||
* @ORM\Column(name="message", type="text", nullable=true)
|
||||
*/
|
||||
private $message;
|
||||
|
||||
/**
|
||||
* @var string
|
||||
*
|
||||
* @ORM\Column(name="relation_type", type="string", length=255, nullable=true)
|
||||
*/
|
||||
private $relationType;
|
||||
|
||||
/**
|
||||
* @var boolean
|
||||
*
|
||||
* @ORM\Column(name="is_enabled", type="boolean", nullable=true, options={"comment":"visible sur la page du talent"})
|
||||
*/
|
||||
private $isEnabled;
|
||||
|
||||
/**
|
||||
* @var boolean
|
||||
*
|
||||
* @ORM\Column(name="is_removed", type="boolean", nullable=true, options={"comment":"supprimee par l'envoyeur"})
|
||||
*/
|
||||
private $isRemoved;
|
||||
|
||||
/**
|
||||
* @var string
|
||||
*
|
||||
* @ORM\Column(name="remove_message", type="text", nullable=true)
|
||||
*/
|
||||
private $removeMessage;
|
||||
|
||||
/***********************
|
||||
* Constructor
|
||||
***********************/
|
||||
|
||||
public function __construct($user = null, $sender = null)
|
||||
{
|
||||
$this->user = $user;
|
||||
$this->sender = $sender;
|
||||
$this->isVisible = true;
|
||||
$this->isRemoved = false;
|
||||
$this->isEnabled = false;
|
||||
}
|
||||
|
||||
/***********************
|
||||
* Custom Functions
|
||||
***********************/
|
||||
|
||||
//Write custom function here
|
||||
|
||||
/***********************
|
||||
* Getters & Setters
|
||||
***********************/
|
||||
|
||||
/**
|
||||
* Get id.
|
||||
*
|
||||
* @return int
|
||||
*/
|
||||
public function getId()
|
||||
{
|
||||
return $this->id;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the value of sender
|
||||
*/
|
||||
public function getSender()
|
||||
{
|
||||
return $this->sender;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the value of sender
|
||||
*
|
||||
* @return self
|
||||
*/
|
||||
public function setSender($sender)
|
||||
{
|
||||
$this->sender = $sender;
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the value of user
|
||||
*/
|
||||
public function getUser()
|
||||
{
|
||||
return $this->user;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the value of user
|
||||
*
|
||||
* @return self
|
||||
*/
|
||||
public function setUser($user)
|
||||
{
|
||||
$this->user = $user;
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the value of video
|
||||
*/
|
||||
public function getVideo()
|
||||
{
|
||||
return $this->video;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the value of video
|
||||
*
|
||||
* @return self
|
||||
*/
|
||||
public function setVideo($video)
|
||||
{
|
||||
$this->video = $video;
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the value of message
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function getMessage()
|
||||
{
|
||||
return $this->message;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the value of message
|
||||
*
|
||||
* @param string $message
|
||||
*
|
||||
* @return self
|
||||
*/
|
||||
public function setMessage(string $message)
|
||||
{
|
||||
$this->message = $message;
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the value of relationType
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function getRelationType()
|
||||
{
|
||||
return $this->relationType;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the value of relationType
|
||||
*
|
||||
* @param string $relationType
|
||||
*
|
||||
* @return self
|
||||
*/
|
||||
public function setRelationType(string $relationType)
|
||||
{
|
||||
$this->relationType = $relationType;
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the value of isEnabled
|
||||
*
|
||||
* @return boolean
|
||||
*/
|
||||
public function getIsEnabled()
|
||||
{
|
||||
return $this->isEnabled;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the value of isEnabled
|
||||
*
|
||||
* @param boolean $isEnabled
|
||||
*
|
||||
* @return self
|
||||
*/
|
||||
public function setIsEnabled($isEnabled)
|
||||
{
|
||||
$this->isEnabled = $isEnabled;
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the value of isRemoved
|
||||
*
|
||||
* @return boolean
|
||||
*/
|
||||
public function getIsRemoved()
|
||||
{
|
||||
return $this->isRemoved;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the value of isRemoved
|
||||
*
|
||||
* @param boolean $isRemoved
|
||||
*
|
||||
* @return self
|
||||
*/
|
||||
public function setIsRemoved($isRemoved)
|
||||
{
|
||||
$this->isRemoved = $isRemoved;
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the value of removeMessage
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function getRemoveMessage()
|
||||
{
|
||||
return $this->removeMessage;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the value of removeMessage
|
||||
*
|
||||
* @param string $removeMessage
|
||||
*
|
||||
* @return self
|
||||
*/
|
||||
public function setRemoveMessage(string $removeMessage)
|
||||
{
|
||||
$this->removeMessage = $removeMessage;
|
||||
|
||||
return $this;
|
||||
}
|
||||
}
|
||||
@@ -6,7 +6,7 @@ use Doctrine\Common\Collections\ArrayCollection;
|
||||
use Doctrine\ORM\Mapping as ORM;
|
||||
use FOS\UserBundle\Model\User as BaseUser;
|
||||
use Symfony\Component\HttpFoundation\File\UploadedFile;
|
||||
|
||||
use AppBundle\Utils\Traits\CareerJsonTrait;
|
||||
/**
|
||||
* @ORM\Entity(repositoryClass="AppBundle\Repository\UserRepository")
|
||||
* @ORM\Table(name="fos_user")
|
||||
@@ -75,6 +75,7 @@ class User extends BaseUser
|
||||
|
||||
/**
|
||||
* @ORM\OneToMany(targetEntity="AppBundle\Entity\Answer",mappedBy="user", cascade={"persist", "remove"})
|
||||
* @ORM\OrderBy({"sendTime" = "DESC"})
|
||||
*/
|
||||
private $answers;
|
||||
|
||||
@@ -113,6 +114,16 @@ class User extends BaseUser
|
||||
*/
|
||||
private $receivedMessages;
|
||||
|
||||
/**
|
||||
* @ORM\OneToMany(targetEntity="AppBundle\Entity\Recommendation",mappedBy="user", cascade={"persist", "remove"})
|
||||
*/
|
||||
private $recommendations;
|
||||
|
||||
/**
|
||||
* @ORM\OneToMany(targetEntity="AppBundle\Entity\Recommendation",mappedBy="sender", cascade={"persist", "remove"})
|
||||
*/
|
||||
private $sendedRecommendations;
|
||||
|
||||
/************************
|
||||
* Social Network
|
||||
************************/
|
||||
@@ -149,6 +160,28 @@ class User extends BaseUser
|
||||
*/
|
||||
private $socialPicture;
|
||||
|
||||
|
||||
/**
|
||||
* @var array
|
||||
*
|
||||
* @ORM\Column(name="career", type="json_document", nullable=true)
|
||||
*/
|
||||
private $career;
|
||||
|
||||
/**
|
||||
* @var array
|
||||
*
|
||||
* @ORM\Column(name="formation", type="json_document", nullable=true)
|
||||
*/
|
||||
private $formation;
|
||||
|
||||
/**
|
||||
* @var array
|
||||
*
|
||||
* @ORM\Column(name="language", type="json_document", nullable=true)
|
||||
*/
|
||||
private $language;
|
||||
|
||||
/***********************
|
||||
* Constructor
|
||||
***********************/
|
||||
@@ -163,6 +196,8 @@ class User extends BaseUser
|
||||
$this->sharedBookmarks = new ArrayCollection();
|
||||
$this->medias = new ArrayCollection();
|
||||
$this->products = new ArrayCollection();
|
||||
$this->recommendations = new ArrayCollection();
|
||||
$this->sendedRecommendations = new ArrayCollection();
|
||||
}
|
||||
|
||||
/***********************
|
||||
@@ -336,8 +371,16 @@ class User extends BaseUser
|
||||
*
|
||||
* @return User
|
||||
*/
|
||||
public function setBirthday($birthday = null)
|
||||
public function setBirthday($birthday = null, $isSocial = false)
|
||||
{
|
||||
if($birthday != null){
|
||||
if($isSocial){
|
||||
$birthday = \DateTime::createFromFormat('m/d/Y', $birthday);
|
||||
} else {
|
||||
$birthday = \DateTime::createFromFormat('d/m/Y', $birthday);
|
||||
}
|
||||
}
|
||||
|
||||
$this->birthday = $birthday;
|
||||
|
||||
return $this;
|
||||
@@ -350,7 +393,12 @@ class User extends BaseUser
|
||||
*/
|
||||
public function getBirthday()
|
||||
{
|
||||
return $this->birthday;
|
||||
if ($this->birthday == null) {
|
||||
|
||||
return $this->birthday;
|
||||
}
|
||||
|
||||
return $this->birthday->format('d/m/Y');
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -856,4 +904,168 @@ class User extends BaseUser
|
||||
{
|
||||
return $this->linkedinAccessToken;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the value of recommendations
|
||||
*/
|
||||
public function getRecommendations()
|
||||
{
|
||||
return $this->recommendations;
|
||||
}
|
||||
|
||||
/**
|
||||
* Add Recommendation.
|
||||
*
|
||||
* @param \AppBundle\Entity\Recommendation $reco
|
||||
*
|
||||
* @return User
|
||||
*/
|
||||
public function addRecommendation(\AppBundle\Entity\Recommendation $reco)
|
||||
{
|
||||
$this->recommendations[] = $reco;
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove Recommendation.
|
||||
*
|
||||
* @param \AppBundle\Entity\Recommendation $reco
|
||||
*
|
||||
*/
|
||||
public function removeRecommendation(\AppBundle\Entity\Recommendation $reco)
|
||||
{
|
||||
return $this->recommendations->removeElement($reco);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the value of sendedRecommendations
|
||||
*/
|
||||
public function getSendedRecommendations()
|
||||
{
|
||||
return $this->sendedRecommendations;
|
||||
}
|
||||
|
||||
/**
|
||||
* Add sendedRecommendations.
|
||||
*
|
||||
* @param \AppBundle\Entity\Recommendation $reco
|
||||
*
|
||||
* @return User
|
||||
*/
|
||||
public function addSendedRecommendations(\AppBundle\Entity\Recommendation $reco)
|
||||
{
|
||||
$this->sendedRecommendations[] = $reco;
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove sendedRecommendations.
|
||||
*
|
||||
* @param \AppBundle\Entity\Recommendation $reco
|
||||
*
|
||||
*/
|
||||
public function removeSendedRecommendations(\AppBundle\Entity\Recommendation $reco)
|
||||
{
|
||||
return $this->sendedRecommendations->removeElement($reco);
|
||||
}
|
||||
|
||||
/**
|
||||
* Set career.
|
||||
*
|
||||
* @param json_document|null $career
|
||||
*
|
||||
* @return User
|
||||
*/
|
||||
public function setCareer($career = null)
|
||||
{
|
||||
$this->career = $career;
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get career.
|
||||
*
|
||||
* @return json_document|null
|
||||
*/
|
||||
public function getCareer()
|
||||
{
|
||||
return $this->career;
|
||||
}
|
||||
|
||||
/**
|
||||
* Add sendedRecommendation.
|
||||
*
|
||||
* @param \AppBundle\Entity\Recommendation $sendedRecommendation
|
||||
*
|
||||
* @return User
|
||||
*/
|
||||
public function addSendedRecommendation(\AppBundle\Entity\Recommendation $sendedRecommendation)
|
||||
{
|
||||
$this->sendedRecommendations[] = $sendedRecommendation;
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove sendedRecommendation.
|
||||
*
|
||||
* @param \AppBundle\Entity\Recommendation $sendedRecommendation
|
||||
*
|
||||
* @return boolean TRUE if this collection contained the specified element, FALSE otherwise.
|
||||
*/
|
||||
public function removeSendedRecommendation(\AppBundle\Entity\Recommendation $sendedRecommendation)
|
||||
{
|
||||
return $this->sendedRecommendations->removeElement($sendedRecommendation);
|
||||
}
|
||||
|
||||
/**
|
||||
* Set formation.
|
||||
*
|
||||
* @param json_document|null $formation
|
||||
*
|
||||
* @return User
|
||||
*/
|
||||
public function setFormation($formation = null)
|
||||
{
|
||||
$this->formation = $formation;
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get formation.
|
||||
*
|
||||
* @return json_document|null
|
||||
*/
|
||||
public function getFormation()
|
||||
{
|
||||
return $this->formation;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set language.
|
||||
*
|
||||
* @param json_document|null $language
|
||||
*
|
||||
* @return User
|
||||
*/
|
||||
public function setLanguage($language = null)
|
||||
{
|
||||
$this->language = $language;
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get language.
|
||||
*
|
||||
* @return json_document|null
|
||||
*/
|
||||
public function getLanguage()
|
||||
{
|
||||
return $this->language;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -13,15 +13,16 @@ namespace AppBundle\Form\Admin;
|
||||
|
||||
use AppBundle\Entity\Company;
|
||||
use Symfony\Component\Form\AbstractType;
|
||||
use Symfony\Component\Form\Extension\Core\Type\CheckboxType;
|
||||
use Symfony\Component\Form\Extension\Core\Type\CountryType;
|
||||
use Symfony\Component\Form\Extension\Core\Type\FileType;
|
||||
use Symfony\Component\Form\Extension\Core\Type\IntegerType;
|
||||
use Symfony\Component\Form\Extension\Core\Type\TextareaType;
|
||||
use Symfony\Component\Form\Extension\Core\Type\TextType;
|
||||
use Symfony\Component\Form\Extension\Core\Type\UrlType;
|
||||
use Symfony\Component\Form\FormBuilderInterface;
|
||||
use Symfony\Component\OptionsResolver\OptionsResolver;
|
||||
use Symfony\Component\Form\Extension\Core\Type\UrlType;
|
||||
use Symfony\Component\Form\Extension\Core\Type\FileType;
|
||||
use Symfony\Component\Form\Extension\Core\Type\TextType;
|
||||
use Symfony\Component\Form\Extension\Core\Type\CountryType;
|
||||
use Symfony\Component\Form\Extension\Core\Type\IntegerType;
|
||||
use Symfony\Component\Form\Extension\Core\Type\CheckboxType;
|
||||
use Symfony\Component\Form\Extension\Core\Type\TextareaType;
|
||||
use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
|
||||
|
||||
class TerritoryAdminType extends AbstractType
|
||||
{
|
||||
@@ -29,6 +30,15 @@ class TerritoryAdminType extends AbstractType
|
||||
{
|
||||
$company = $options['data'];
|
||||
$company->init();
|
||||
|
||||
$terType = "";
|
||||
$extra = $company->getExtra();
|
||||
if ($extra != null) {
|
||||
if (is_array($extra)) {
|
||||
$terType = (isset($extra['terType'])) ? $extra['terType'] : '';
|
||||
}
|
||||
}
|
||||
|
||||
// Common fields
|
||||
$builder
|
||||
->add('brandName', TextType::class, array('label' => 'Nom'))
|
||||
@@ -38,35 +48,35 @@ class TerritoryAdminType extends AbstractType
|
||||
'label' => 'profile.company.website',
|
||||
'required' => false,
|
||||
'attr' => array(
|
||||
'placeholder' => 'http://...'
|
||||
'placeholder' => 'http://...',
|
||||
)));
|
||||
// Addresses fields
|
||||
$builder
|
||||
->add('address', TextType::class, array(
|
||||
'label' => 'Adresse',
|
||||
'required' => false
|
||||
'required' => false,
|
||||
))
|
||||
->add('addressComp', TextType::class, array(
|
||||
'label' => 'Complément Adresse',
|
||||
'required' => false
|
||||
'required' => false,
|
||||
))
|
||||
->add('zipcode', TextType::class, array(
|
||||
'label' => 'Code postal',
|
||||
'required' => false
|
||||
'required' => false,
|
||||
))
|
||||
->add('city', TextType::class, array(
|
||||
'label' => 'Ville',
|
||||
'required' => false
|
||||
'required' => false,
|
||||
))
|
||||
->add('country', CountryType::class, array(
|
||||
'label' => 'Pays',
|
||||
'required' => false
|
||||
'required' => false,
|
||||
));
|
||||
//Tags field
|
||||
$builder
|
||||
->add('tagsComma', TextType::class, array(
|
||||
'label' => 'profile.company.tags',
|
||||
'required' => false
|
||||
'required' => false,
|
||||
));
|
||||
// File fields
|
||||
$builder
|
||||
@@ -74,22 +84,34 @@ class TerritoryAdminType extends AbstractType
|
||||
'label' => 'profile.company.logo',
|
||||
'required' => false,
|
||||
'attr' => array(
|
||||
'class' => 'file-path validate'
|
||||
)
|
||||
'class' => 'file-path validate',
|
||||
),
|
||||
));
|
||||
// Emphasis
|
||||
$builder
|
||||
->add('emphasis', CheckboxType::class, array(
|
||||
'label' => 'A la une',
|
||||
'required' => false
|
||||
'required' => false,
|
||||
))
|
||||
->add('emphasisOrder', IntegerType::class, array(
|
||||
'label' => 'Ordre',
|
||||
'required' => false
|
||||
'required' => false,
|
||||
));
|
||||
$builder->add('isPrivate', CheckboxType::class, array(
|
||||
'label' => 'Page territoire privé ( non listée en front )',
|
||||
'required' => false
|
||||
'required' => false,
|
||||
));
|
||||
$builder->add('terType', ChoiceType::class, array(
|
||||
'mapped' => false,
|
||||
'label' => 'Type ',
|
||||
'data' => $terType,
|
||||
'choices' => array(
|
||||
'Région' => 'Région',
|
||||
'Communauté d\'agglomération' => 'Communauté d\'agglomération',
|
||||
'Communauté de commune' => 'Communauté de commune',
|
||||
'Commune' => 'Commune',
|
||||
'Département' => 'Département',
|
||||
),
|
||||
));
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,111 @@
|
||||
<?php
|
||||
|
||||
/*
|
||||
* This file is part of the FOSUserBundle package.
|
||||
*
|
||||
* (c) FriendsOfSymfony <http://friendsofsymfony.github.com/>
|
||||
*
|
||||
* For the full copyright and license information, please view the LICENSE
|
||||
* file that was distributed with this source code.
|
||||
*/
|
||||
|
||||
namespace AppBundle\Form;
|
||||
|
||||
use AppBundle\Entity\User;
|
||||
use Symfony\Component\Form\AbstractType;
|
||||
use Symfony\Component\Form\Extension\Core\Type\CountryType;
|
||||
use Symfony\Component\Form\Extension\Core\Type\TextType;
|
||||
use Symfony\Component\Form\Extension\Core\Type\TextareaType;
|
||||
use Symfony\Component\Form\Extension\Core\Type\UrlType;
|
||||
use Symfony\Component\Form\FormBuilderInterface;
|
||||
use Symfony\Component\OptionsResolver\OptionsResolver;
|
||||
use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
|
||||
use Symfony\Component\Form\Extension\Core\Type\CheckboxType;
|
||||
|
||||
class CareerType extends AbstractType
|
||||
{
|
||||
public function buildForm(FormBuilderInterface $builder, array $options)
|
||||
{
|
||||
$builder
|
||||
->add('companyCareer', TextType::class, array(
|
||||
'label' => 'talent.profile.career.company.label',
|
||||
))
|
||||
->add('jobCareer', TextType::class, array(
|
||||
'label' => 'talent.profile.career.job.label',
|
||||
))
|
||||
->add('placeCareer', TextType::class, array(
|
||||
'label' => 'talent.profile.career.place.label',
|
||||
))
|
||||
->add('beginMonthCareer', ChoiceType::class, array(
|
||||
'label' => 'talent.profile.career.begin.label',
|
||||
'choices' => $this->getMonths(),
|
||||
'placeholder' => 'Mois'
|
||||
))
|
||||
->add('beginYearCareer', ChoiceType::class, array(
|
||||
'label' => 'talent.profile.career.begin.label',
|
||||
'choices' => $this->getYears(1960),
|
||||
'placeholder' => 'Année',
|
||||
'attr' => array(
|
||||
'class' => 'beginYearCareer'
|
||||
)
|
||||
))
|
||||
->add('endMonthCareer', ChoiceType::class, array(
|
||||
'label' => 'talent.profile.career.end.label',
|
||||
'choices' => $this->getMonths(),
|
||||
'required' => false,
|
||||
'placeholder' => 'Mois'
|
||||
))
|
||||
->add('endYearCareer', ChoiceType::class, array(
|
||||
'label' => 'talent.profile.career.end.label',
|
||||
'choices' => $this->getYears(1960),
|
||||
'required' => false,
|
||||
'placeholder' => 'Année',
|
||||
'attr' => array(
|
||||
'class' => 'endYearCareer'
|
||||
)
|
||||
))
|
||||
->add('actualJobCareer', CheckboxType::class, array(
|
||||
'label' => 'talent.profile.career.actualJob.label',
|
||||
'required' => false
|
||||
))
|
||||
->add('descriptionCareer', TextareaType::class, array(
|
||||
'label' => 'profile.company.description',
|
||||
'required' => false,
|
||||
'attr' => array(
|
||||
'class' => 'materialize-textarea'
|
||||
)
|
||||
))
|
||||
->add('tagsComma', TextType::class, array(
|
||||
'label' => 'talent.profile.career.skills.label',
|
||||
'required' => false,
|
||||
'attr' => array(
|
||||
'data-role'=>"materialtags"
|
||||
)
|
||||
));
|
||||
}
|
||||
|
||||
private function getYears($min, $max='current')
|
||||
{
|
||||
$years = range($min, ($max === 'current' ? date('Y') : $max));
|
||||
$resultYears = array_combine($years, $years);
|
||||
arsort($resultYears);
|
||||
|
||||
return $resultYears;
|
||||
}
|
||||
|
||||
private function getMonths()
|
||||
{
|
||||
$months = array();
|
||||
for ($m=1; $m<=12; $m++) {
|
||||
$month = strftime('%B', mktime(0,0,0,$m, 1, date('Y')));
|
||||
$months[$month] = $m;
|
||||
}
|
||||
|
||||
return $months;
|
||||
}
|
||||
|
||||
public function getName()
|
||||
{
|
||||
return 'career';
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,65 @@
|
||||
<?php
|
||||
|
||||
/*
|
||||
* This file is part of the FOSUserBundle package.
|
||||
*
|
||||
* (c) FriendsOfSymfony <http://friendsofsymfony.github.com/>
|
||||
*
|
||||
* For the full copyright and license information, please view the LICENSE
|
||||
* file that was distributed with this source code.
|
||||
*/
|
||||
|
||||
namespace AppBundle\Form;
|
||||
|
||||
use AppBundle\Entity\User;
|
||||
use Symfony\Component\Form\AbstractType;
|
||||
use Symfony\Component\Form\FormBuilderInterface;
|
||||
|
||||
use Symfony\Component\Form\Extension\Core\Type\CollectionType;
|
||||
use Symfony\Component\Form\FormEvents;
|
||||
use Symfony\Component\Form\FormEvent;
|
||||
|
||||
use Symfony\Component\Form\FormInterface;
|
||||
use Symfony\Component\Form\FormView;
|
||||
|
||||
class CareersType extends AbstractType
|
||||
{
|
||||
public function buildForm(FormBuilderInterface $builder, array $options)
|
||||
{
|
||||
$builder->add('career', CollectionType::class, array(
|
||||
'entry_type'=> CareerType::class,
|
||||
'prototype'=>true,
|
||||
'allow_add'=>true,
|
||||
'allow_delete'=>true
|
||||
));
|
||||
|
||||
$builder->addEventListener(FormEvents::PRE_SUBMIT, function (FormEvent $event) {
|
||||
|
||||
$submittedData = $event->getData();
|
||||
if (empty($submittedData['career'])) {
|
||||
return;
|
||||
}
|
||||
|
||||
usort($submittedData['career'], "static::sortByBeginYearCareer");
|
||||
|
||||
$event->setData($submittedData);
|
||||
});
|
||||
}
|
||||
|
||||
private static function sortByBeginYearCareer($x, $y) {
|
||||
|
||||
return strcasecmp($y['beginYearCareer'], $x['beginYearCareer']);
|
||||
}
|
||||
|
||||
|
||||
public function getName()
|
||||
{
|
||||
return 'careers';
|
||||
}
|
||||
|
||||
public function setDefaultOptions(OptionsResolverInterface $resolver) {
|
||||
$resolver->setDefaults(array(
|
||||
'restore_input_order' => false,
|
||||
));
|
||||
}
|
||||
}
|
||||
@@ -13,22 +13,24 @@ class ContactTalentType extends AbstractType
|
||||
{
|
||||
$builder
|
||||
->add('message', TextareaType::class, array(
|
||||
'label' => 'Message',
|
||||
'label' => false,
|
||||
'required' => true,
|
||||
'attr' => array(
|
||||
'class' => 'materialize-textarea'
|
||||
'placeholder' => 'Rédigez un message de réponse'
|
||||
)
|
||||
));
|
||||
if(!isset($options['data']['subject']) || ($options['data']['subject'] == true)){
|
||||
$arraySubjects = array(
|
||||
'Répondu' => 'CONTACTED',
|
||||
'Répondu - Négatif' => 'NEGATIVE',
|
||||
'Répondu - Demande d\'infos' => 'INFOS',
|
||||
'Répondu - Positif' => 'POSITIVE',
|
||||
'Choisir un statut' => null,
|
||||
'POSITIVE' => 'POSITIVE',
|
||||
'INFOS' => 'INFOS',
|
||||
'CONTACTED.RDV' => 'CONTACTED.RDV',
|
||||
'NEGATIVE' => 'NEGATIVE'
|
||||
);
|
||||
$builder
|
||||
->add('status', ChoiceType::class, array(
|
||||
'label' => 'Status',
|
||||
'label' => false,
|
||||
'required' => true,
|
||||
'choices' => $arraySubjects
|
||||
));
|
||||
}
|
||||
|
||||
@@ -0,0 +1,84 @@
|
||||
<?php
|
||||
|
||||
/*
|
||||
* This file is part of the FOSUserBundle package.
|
||||
*
|
||||
* (c) FriendsOfSymfony <http://friendsofsymfony.github.com/>
|
||||
*
|
||||
* For the full copyright and license information, please view the LICENSE
|
||||
* file that was distributed with this source code.
|
||||
*/
|
||||
|
||||
namespace AppBundle\Form;
|
||||
|
||||
use AppBundle\Entity\User;
|
||||
use Symfony\Component\Form\AbstractType;
|
||||
use Symfony\Component\Form\Extension\Core\Type\CountryType;
|
||||
use Symfony\Component\Form\Extension\Core\Type\TextType;
|
||||
use Symfony\Component\Form\Extension\Core\Type\TextareaType;
|
||||
use Symfony\Component\Form\Extension\Core\Type\UrlType;
|
||||
use Symfony\Component\Form\FormBuilderInterface;
|
||||
use Symfony\Component\OptionsResolver\OptionsResolver;
|
||||
use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
|
||||
use Symfony\Component\Form\Extension\Core\Type\CheckboxType;
|
||||
|
||||
class FormationType extends AbstractType
|
||||
{
|
||||
public function buildForm(FormBuilderInterface $builder, array $options)
|
||||
{
|
||||
$builder
|
||||
->add('nameFormation', TextType::class, array(
|
||||
'label' => 'talent.profile.formation.name.label',
|
||||
'required' => true
|
||||
))
|
||||
->add('schoolFormation', TextType::class, array(
|
||||
'label' => 'talent.profile.formation.school.label',
|
||||
'required' => true
|
||||
))
|
||||
->add('beginYearFormation', ChoiceType::class, array(
|
||||
'label' => 'talent.profile.formation.begin.label',
|
||||
'choices' => $this->getYears(1960),
|
||||
'placeholder' => 'Année',
|
||||
'attr' => array(
|
||||
'class' => 'beginYearFormation'
|
||||
)
|
||||
))
|
||||
->add('actualFormation', CheckboxType::class, array(
|
||||
'label' => 'talent.profile.formation.actual.label',
|
||||
'required' => false,
|
||||
))
|
||||
->add('descriptionFormation', TextareaType::class, array(
|
||||
'label' => 'profile.company.description',
|
||||
'required' => false,
|
||||
'attr' => array(
|
||||
'class' => 'materialize-textarea'
|
||||
)
|
||||
));
|
||||
}
|
||||
|
||||
private function getYears($min, $max='current')
|
||||
{
|
||||
$years = range($min, ($max === 'current' ? date('Y') : $max));
|
||||
$resultYears = array_combine($years, $years);
|
||||
arsort($resultYears);
|
||||
|
||||
return $resultYears;
|
||||
}
|
||||
|
||||
private function getMonths()
|
||||
{
|
||||
setlocale(LC_TIME, "fr_FR");
|
||||
$months = array();
|
||||
for ($m=1; $m<=12; $m++) {
|
||||
$month = utf8_encode(strftime('%B', mktime(0,0,0,$m, 1, date('Y'))));
|
||||
$months[] = $month;
|
||||
}
|
||||
|
||||
return array_combine($months, $months);
|
||||
}
|
||||
|
||||
public function getName()
|
||||
{
|
||||
return 'formation';
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,52 @@
|
||||
<?php
|
||||
|
||||
/*
|
||||
* This file is part of the FOSUserBundle package.
|
||||
*
|
||||
* (c) FriendsOfSymfony <http://friendsofsymfony.github.com/>
|
||||
*
|
||||
* For the full copyright and license information, please view the LICENSE
|
||||
* file that was distributed with this source code.
|
||||
*/
|
||||
|
||||
namespace AppBundle\Form;
|
||||
|
||||
use AppBundle\Entity\User;
|
||||
use Symfony\Component\Form\AbstractType;
|
||||
use Symfony\Component\Form\FormBuilderInterface;
|
||||
|
||||
use Symfony\Component\Form\Extension\Core\Type\CollectionType;
|
||||
use Symfony\Component\Form\FormEvents;
|
||||
use Symfony\Component\Form\FormEvent;
|
||||
|
||||
class FormationsType extends AbstractType
|
||||
{
|
||||
public function buildForm(FormBuilderInterface $builder, array $options)
|
||||
{
|
||||
$builder->add('formation', CollectionType::class, array(
|
||||
'entry_type'=> FormationType::class,
|
||||
'prototype'=>true,
|
||||
'allow_add'=>true,
|
||||
'allow_delete'=>true
|
||||
));
|
||||
|
||||
$builder->addEventListener(FormEvents::PRE_SUBMIT, function (FormEvent $event) {
|
||||
$submittedData = $event->getData();
|
||||
if (!array_key_exists('formation', $submittedData)) {
|
||||
return;
|
||||
}
|
||||
usort($submittedData['formation'], "static::sortByBeginYearFormation");
|
||||
$event->setData($submittedData);
|
||||
});
|
||||
}
|
||||
|
||||
private static function sortByBeginYearFormation($x, $y) {
|
||||
|
||||
return strcasecmp($y['beginYearFormation'], $x['beginYearFormation']);
|
||||
}
|
||||
|
||||
public function getName()
|
||||
{
|
||||
return 'formations';
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,56 @@
|
||||
<?php
|
||||
|
||||
/*
|
||||
* This file is part of the FOSUserBundle package.
|
||||
*
|
||||
* (c) FriendsOfSymfony <http://friendsofsymfony.github.com/>
|
||||
*
|
||||
* For the full copyright and license information, please view the LICENSE
|
||||
* file that was distributed with this source code.
|
||||
*/
|
||||
|
||||
namespace AppBundle\Form;
|
||||
|
||||
use AppBundle\Entity\User;
|
||||
use Symfony\Component\Form\AbstractType;
|
||||
use Symfony\Component\Form\Extension\Core\Type\CountryType;
|
||||
use Symfony\Component\Form\Extension\Core\Type\TextType;
|
||||
use Symfony\Component\Form\Extension\Core\Type\UrlType;
|
||||
use Symfony\Component\Form\FormBuilderInterface;
|
||||
use Symfony\Component\OptionsResolver\OptionsResolver;
|
||||
use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
|
||||
use Symfony\Component\Form\Extension\Core\Type\CheckboxType;
|
||||
|
||||
class LanguageType extends AbstractType
|
||||
{
|
||||
public function buildForm(FormBuilderInterface $builder, array $options)
|
||||
{
|
||||
$builder
|
||||
->add('nameLanguage', TextType::class, array(
|
||||
'label' => 'talent.profile.language.name.label',
|
||||
))
|
||||
->add('skillLanguage', ChoiceType::class, array(
|
||||
'label' => 'talent.profile.language.skill.label',
|
||||
'choices' => $this->getSkills(),
|
||||
'placeholder' => 'Niveau',
|
||||
'required' => true
|
||||
));
|
||||
}
|
||||
|
||||
private function getSkills()
|
||||
{
|
||||
$skills = array(
|
||||
'talent.profile.language.skill.1.label' => 'talent.profile.language.skill.1.label',
|
||||
'talent.profile.language.skill.2.label' =>'talent.profile.language.skill.2.label',
|
||||
'talent.profile.language.skill.3.label' => 'talent.profile.language.skill.3.label',
|
||||
'talent.profile.language.skill.4.label' => 'talent.profile.language.skill.4.label',
|
||||
);
|
||||
|
||||
return $skills;
|
||||
}
|
||||
|
||||
public function getName()
|
||||
{
|
||||
return 'language';
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,37 @@
|
||||
<?php
|
||||
|
||||
/*
|
||||
* This file is part of the FOSUserBundle package.
|
||||
*
|
||||
* (c) FriendsOfSymfony <http://friendsofsymfony.github.com/>
|
||||
*
|
||||
* For the full copyright and license information, please view the LICENSE
|
||||
* file that was distributed with this source code.
|
||||
*/
|
||||
|
||||
namespace AppBundle\Form;
|
||||
|
||||
use AppBundle\Entity\User;
|
||||
use Symfony\Component\Form\AbstractType;
|
||||
use Symfony\Component\Form\FormBuilderInterface;
|
||||
|
||||
use Symfony\Component\Form\Extension\Core\Type\CollectionType;
|
||||
|
||||
class LanguagesType extends AbstractType
|
||||
{
|
||||
public function buildForm(FormBuilderInterface $builder, array $options)
|
||||
{
|
||||
$builder->add('language', CollectionType::class, array(
|
||||
'entry_type'=> LanguageType::class,
|
||||
'prototype'=>true,
|
||||
'allow_add'=>true,
|
||||
'allow_delete'=>true
|
||||
));
|
||||
}
|
||||
|
||||
|
||||
public function getName()
|
||||
{
|
||||
return 'languages';
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,21 @@
|
||||
<?php
|
||||
namespace AppBundle\Form;
|
||||
|
||||
use Symfony\Component\Form\AbstractType;
|
||||
use Symfony\Component\Form\Extension\Core\Type\TextareaType;
|
||||
use Symfony\Component\Form\FormBuilderInterface;
|
||||
|
||||
class RecommendationDeleteType extends AbstractType
|
||||
{
|
||||
public function buildForm(FormBuilderInterface $builder, array $options)
|
||||
{
|
||||
$builder
|
||||
->add('message', TextareaType::class, array(
|
||||
'label' => 'Message pour la personne concernée',
|
||||
'required' => true,
|
||||
'attr' => array(
|
||||
'class' => 'materialize-textarea',
|
||||
),
|
||||
));
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,28 @@
|
||||
<?php
|
||||
namespace AppBundle\Form;
|
||||
|
||||
use Symfony\Component\Form\AbstractType;
|
||||
use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
|
||||
use Symfony\Component\Form\Extension\Core\Type\TextareaType;
|
||||
use Symfony\Component\Form\FormBuilderInterface;
|
||||
use Symfony\Component\Translation\Translator;
|
||||
|
||||
class RecommendationType extends AbstractType
|
||||
{
|
||||
|
||||
private $translator;
|
||||
|
||||
public function __construct()
|
||||
{
|
||||
$this->translator = new Translator('fr');
|
||||
}
|
||||
|
||||
public function buildForm(FormBuilderInterface $builder, array $options)
|
||||
{
|
||||
$builder
|
||||
->add('relationType', ChoiceType::class, array(
|
||||
'label' => 'Sélectionnez la relation',
|
||||
'choices' => $options['extra_fields_message'],
|
||||
));
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,53 @@
|
||||
<?php
|
||||
|
||||
/*
|
||||
* This file is part of the FOSUserBundle package.
|
||||
*
|
||||
* (c) FriendsOfSymfony <http://friendsofsymfony.github.com/>
|
||||
*
|
||||
* For the full copyright and license information, please view the LICENSE
|
||||
* file that was distributed with this source code.
|
||||
*/
|
||||
|
||||
namespace AppBundle\Form;
|
||||
|
||||
use AppBundle\Entity\Company;
|
||||
use Symfony\Component\Form\AbstractType;
|
||||
use Symfony\Component\Form\FormBuilderInterface;
|
||||
|
||||
use Symfony\Component\Form\Extension\Core\Type\TextType;
|
||||
use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
|
||||
use Symfony\Component\Form\Extension\Core\Type\CountryType;
|
||||
use Symfony\Component\OptionsResolver\OptionsResolver;
|
||||
|
||||
class TalentProfileAddressType extends AbstractType
|
||||
{
|
||||
public function buildForm(FormBuilderInterface $builder, array $options)
|
||||
{
|
||||
$builder
|
||||
->add('address', TextType::class, array(
|
||||
'label' => 'Adresse',
|
||||
))
|
||||
->add('addressComp', TextType::class, array(
|
||||
'label' => 'Complément Adresse',
|
||||
'required' => false
|
||||
))
|
||||
->add('zipcode', TextType::class, array(
|
||||
'label' => 'Code postal',
|
||||
))
|
||||
->add('city', TextType::class, array(
|
||||
'label' => 'Ville',
|
||||
))
|
||||
->add('country', CountryType::class, array(
|
||||
'label' => 'Pays',
|
||||
));
|
||||
}
|
||||
|
||||
public function configureOptions(OptionsResolver $resolver)
|
||||
{
|
||||
|
||||
$resolver->setDefaults(array(
|
||||
'data_class' => Company::class,
|
||||
));
|
||||
}
|
||||
}
|
||||
@@ -14,19 +14,23 @@ namespace AppBundle\Form;
|
||||
use AppBundle\Entity\User;
|
||||
use Symfony\Component\Form\AbstractType;
|
||||
use Symfony\Component\Form\FormBuilderInterface;
|
||||
use AppBundle\Form\TalentProfileAddressType;
|
||||
|
||||
|
||||
use Symfony\Component\Form\Extension\Core\Type\TextType;
|
||||
use Symfony\Component\Form\Extension\Core\Type\DateType;
|
||||
use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
|
||||
use Symfony\Component\Form\Extension\Core\Type\CountryType;
|
||||
use Symfony\Component\OptionsResolver\OptionsResolver;
|
||||
|
||||
use Symfony\Component\Form\Extension\Core\Type\CollectionType;
|
||||
|
||||
class TalentProfileType extends AbstractType
|
||||
{
|
||||
public function buildForm(FormBuilderInterface $builder, array $options)
|
||||
{
|
||||
$user = $options['data'];
|
||||
$user->getCompany()->init();
|
||||
|
||||
|
||||
$builder
|
||||
->add('firstname', null, array(
|
||||
'label' => 'Prénom',
|
||||
@@ -36,11 +40,12 @@ class TalentProfileType extends AbstractType
|
||||
'label' => 'Nom',
|
||||
'required' => true,
|
||||
))
|
||||
->add('birthday', DateType::class, array(
|
||||
'widget' => 'single_text',
|
||||
->add('birthday', TextType::class, array(
|
||||
'label' => 'Date de naissance',
|
||||
'attr' => array(
|
||||
'class' => 'calendar'
|
||||
'class' => 'datepicker',
|
||||
'data-date-format' => "dd/mm/yyyy",
|
||||
'data-toggle'=>"datepicker"
|
||||
)
|
||||
))
|
||||
->add('gender', ChoiceType::class, array(
|
||||
@@ -52,15 +57,13 @@ class TalentProfileType extends AbstractType
|
||||
),
|
||||
'label' => 'Sexe'
|
||||
));
|
||||
|
||||
$builder
|
||||
->add('company',TalentType::class, array(
|
||||
'label'=>false
|
||||
));
|
||||
|
||||
$builder->add('company', TalentProfileAddressType::class);
|
||||
}
|
||||
|
||||
public function configureOptions(OptionsResolver $resolver)
|
||||
{
|
||||
|
||||
$resolver->setDefaults(array(
|
||||
'data_class' => User::class,
|
||||
));
|
||||
|
||||
@@ -13,8 +13,10 @@ namespace AppBundle\Form;
|
||||
|
||||
use AppBundle\Entity\Company;
|
||||
use Symfony\Component\Form\AbstractType;
|
||||
use Symfony\Component\Form\Extension\Core\Type\CountryType;
|
||||
|
||||
use Symfony\Component\Form\Extension\Core\Type\TextType;
|
||||
use Symfony\Component\Form\Extension\Core\Type\TextareaType;
|
||||
use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
|
||||
use Symfony\Component\Form\Extension\Core\Type\UrlType;
|
||||
use Symfony\Component\Form\FormBuilderInterface;
|
||||
use Symfony\Component\OptionsResolver\OptionsResolver;
|
||||
@@ -23,30 +25,27 @@ class TalentType extends AbstractType
|
||||
{
|
||||
public function buildForm(FormBuilderInterface $builder, array $options)
|
||||
{
|
||||
|
||||
$builder
|
||||
->add('address', TextType::class, array(
|
||||
'label' => 'Adresse',
|
||||
->add('titleTalent', TextType::class, array(
|
||||
'label' => 'talent.profile.title.label',
|
||||
))
|
||||
->add('addressComp', TextType::class, array(
|
||||
'label' => 'Complément Adresse',
|
||||
'required' => false
|
||||
->add('situationTalent', ChoiceType::class, array(
|
||||
'label' => 'talent.profile.situation.label',
|
||||
'choices' => $this->getSituations()
|
||||
))
|
||||
->add('zipcode', TextType::class, array(
|
||||
'label' => 'Code postal',
|
||||
))
|
||||
->add('city', TextType::class, array(
|
||||
'label' => 'Ville',
|
||||
))
|
||||
->add('country', CountryType::class, array(
|
||||
'label' => 'Pays',
|
||||
));
|
||||
$builder
|
||||
->add('tagsComma', TextType::class, array(
|
||||
'label' => 'profile.company.tags',
|
||||
'label' => 'profile.talent.tags',
|
||||
'attr' => array(
|
||||
'data-role'=>"materialtags"
|
||||
)
|
||||
))
|
||||
->add('descriptionTalent', TextareaType::class, array(
|
||||
'label' => 'talent.profile.description.label',
|
||||
'required' => false,
|
||||
'attr' => array(
|
||||
'class' => 'materialize-textarea',
|
||||
'placeholder' => '...'
|
||||
)
|
||||
));
|
||||
$builder
|
||||
->add('website', UrlType::class, array('label' => 'Site internet',
|
||||
@@ -75,4 +74,14 @@ class TalentType extends AbstractType
|
||||
'data_class' => Company::class,
|
||||
));
|
||||
}
|
||||
|
||||
public function getSituations(){
|
||||
$situations = array(
|
||||
'talent.profile.situation.1.label' => 'talent.profile.situation.1.label',
|
||||
'talent.profile.situation.2.label' =>'talent.profile.situation.2.label',
|
||||
'talent.profile.situation.3.label' => 'talent.profile.situation.3.label'
|
||||
);
|
||||
|
||||
return $situations;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -23,7 +23,8 @@ class AnswerRepository extends \Doctrine\ORM\EntityRepository
|
||||
)')
|
||||
->setParameter(':id', $id)
|
||||
->andWhere('a.status = :status')
|
||||
->setParameter(':status', 'SENDED');
|
||||
->setParameter(':status', 'SENDED')
|
||||
->orderBy('a.uTime','DESC');
|
||||
|
||||
return $qb
|
||||
->getQuery()
|
||||
|
||||
@@ -2,19 +2,11 @@
|
||||
|
||||
namespace AppBundle\Security\Core\User;
|
||||
|
||||
|
||||
use FOS\UserBundle\Model\UserInterface as FOSUserInterface;
|
||||
use AppBundle\Entity\Company;
|
||||
use HWI\Bundle\OAuthBundle\OAuth\Response\UserResponseInterface;
|
||||
use HWI\Bundle\OAuthBundle\Security\Core\User\FOSUBUserProvider as BaseFOSUBProvider;
|
||||
use AppBundle\Entity\Company;
|
||||
use AppBundle\Entity\Answer;
|
||||
use AppBundle\Entity\Media;
|
||||
use Symfony\Component\Security\Core\Exception\UsernameNotFoundException;
|
||||
use Symfony\Component\Security\Core\User\UserInterface;
|
||||
use Symfony\Component\HttpFoundation\Session\Session;
|
||||
|
||||
use Symfony\Component\Security\Core\Authentication\Token\UsernamePasswordToken;
|
||||
use Symfony\Component\Security\Http\Event\InteractiveLoginEvent;
|
||||
use Symfony\Component\Security\Core\User\UserInterface;
|
||||
|
||||
class FOSUBUserProvider extends BaseFOSUBProvider
|
||||
{
|
||||
@@ -22,20 +14,19 @@ class FOSUBUserProvider extends BaseFOSUBProvider
|
||||
|
||||
public function __construct($userManager, $em, $slug, $container, array $properties)
|
||||
{
|
||||
parent::__construct($userManager,$properties);
|
||||
parent::__construct($userManager, $properties);
|
||||
$this->em = $em;
|
||||
$this->slugService = $slug;
|
||||
$this->container = $container;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function connect(UserInterface $user, UserResponseInterface $response)
|
||||
{
|
||||
$isTmpUser = false;
|
||||
if($this->container->get('security.token_storage')->getToken()){
|
||||
if ($this->container->get('security.token_storage')->getToken()) {
|
||||
$userConnected = $this->container->get('security.token_storage')->getToken()->getUser();
|
||||
if ($userConnected->hasRole('ROLE_TALENT_TMP')) {
|
||||
$isTmpUser = true;
|
||||
@@ -46,7 +37,7 @@ class FOSUBUserProvider extends BaseFOSUBProvider
|
||||
$property = $this->getProperty($response);
|
||||
$username = $response->getUsername(); // get the unique user identifier
|
||||
$serviceName = $response->getResourceOwner()->getName();
|
||||
$propertyQuery = str_replace('_', '', lcfirst(ucwords($property, '_')));
|
||||
$propertyQuery = str_replace('_', '', lcfirst(ucwords($property, '_')));
|
||||
$setter = 'set' . ucfirst($serviceName) . 'Id';
|
||||
$setterToken = 'set' . ucfirst($serviceName) . 'AccessToken';
|
||||
$existingUser = $this->userManager->findUserBy(array($propertyQuery => $username));
|
||||
@@ -56,7 +47,7 @@ class FOSUBUserProvider extends BaseFOSUBProvider
|
||||
}
|
||||
if (null !== $existingUser) {
|
||||
$this->disconnect($existingUser, $response);
|
||||
if($isTmpUser){
|
||||
if ($isTmpUser) {
|
||||
$this->assignToRealAccount($userConnected, $existingUser);
|
||||
$user = $existingUser;
|
||||
$token = new UsernamePasswordToken($user, null, "main", $user->getRoles());
|
||||
@@ -66,7 +57,7 @@ class FOSUBUserProvider extends BaseFOSUBProvider
|
||||
$existingUser->$setterToken($response->getAccessToken());
|
||||
$this->userManager->updateUser($existingUser);
|
||||
} else {
|
||||
if($isTmpUser){
|
||||
if ($isTmpUser) {
|
||||
$existingUser = $this->loadUserByOAuthUserResponse($response);
|
||||
$this->assignToRealAccount($userConnected, $existingUser);
|
||||
$existingUser->$setter($username);
|
||||
@@ -81,9 +72,17 @@ class FOSUBUserProvider extends BaseFOSUBProvider
|
||||
}
|
||||
}
|
||||
|
||||
public function assignToRealAccount($userConnected, $existingUser) {
|
||||
/**
|
||||
* This function is meant to reassign data from a temporary account to a real account
|
||||
*
|
||||
* @param $userConnected
|
||||
* @param $existingUser
|
||||
* @return void
|
||||
*/
|
||||
public function assignToRealAccount($userConnected, $existingUser)
|
||||
{
|
||||
$answers = $this->em->getRepository('AppBundle:Answer')->findBy(array('user' => $userConnected));
|
||||
$medias = $this->em->getRepository('AppBundle:Media')->findBy(array('creator'=> $userConnected));
|
||||
$medias = $this->em->getRepository('AppBundle:Media')->findBy(array('creator' => $userConnected));
|
||||
foreach ($medias as $key => $media) {
|
||||
$media->setCreator($existingUser);
|
||||
}
|
||||
@@ -95,48 +94,61 @@ class FOSUBUserProvider extends BaseFOSUBProvider
|
||||
$this->userManager->deleteUser($userConnected);
|
||||
}
|
||||
|
||||
/**
|
||||
* Load a user by username.
|
||||
*
|
||||
* @param string $username
|
||||
*
|
||||
* @return UserInterface|null
|
||||
*/
|
||||
public function loadUserByUsername($username)
|
||||
{
|
||||
$existingUser = $this->userManager->findUserByEmail($username);
|
||||
if($this->container->get('security.token_storage')->getToken()){
|
||||
$existingUser = $this->userManager->findUserByUsername($username);
|
||||
if($existingUser == null){
|
||||
$existingUser = $this->userManager->findUserByEmail($username);
|
||||
}
|
||||
|
||||
//Used to assign data from temporry account to real account
|
||||
if ($this->container->get('security.token_storage')->getToken()) {
|
||||
$userConnected = $this->container->get('security.token_storage')->getToken()->getUser();
|
||||
if ($userConnected->hasRole('ROLE_TALENT_TMP')) {
|
||||
|
||||
$this->assignToRealAccount($userConnected, $existingUser);
|
||||
}
|
||||
}
|
||||
|
||||
return $existingUser;
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*/
|
||||
* Used to create or load user when linkedin or Facebook Oauth is used
|
||||
*
|
||||
* @param UserResponseInterface $response
|
||||
* @return $user
|
||||
*/
|
||||
public function loadUserByOAuthUserResponse(UserResponseInterface $response)
|
||||
{
|
||||
{
|
||||
$serviceName = $response->getResourceOwner()->getName();
|
||||
$data = $response->getData();
|
||||
$userConnected = null;
|
||||
if($this->container->get('security.token_storage')->getToken()){
|
||||
if ($this->container->get('security.token_storage')->getToken()) {
|
||||
$userConnected = $this->container->get('security.token_storage')->getToken()->getUser();
|
||||
|
||||
}
|
||||
$userEmail = $response->getEmail();
|
||||
$user = $this->userManager->findUserByEmail($userEmail);
|
||||
|
||||
if($serviceName == "linkedin"){
|
||||
if ($serviceName == "linkedin") {
|
||||
$id = $data['id'];
|
||||
$birthday = null;
|
||||
$gender = null;
|
||||
$userPhoto = $data['pictureUrls']['values'][0];
|
||||
$username = $data['firstName']."-".$data['lastName'];
|
||||
$username = $data['firstName'] . "-" . $data['lastName'];
|
||||
$firstname = $data['firstName'];
|
||||
$lastname = $data['lastName'];
|
||||
|
||||
} else {
|
||||
$userPhoto = 'http://graph.facebook.com/'.$data['id'].'/picture?height=200';
|
||||
$userPhoto = 'https://graph.facebook.com/'.$data['id'].'/picture?height=200';
|
||||
if(isset($data['birthday'])){
|
||||
$birthday = \DateTime::createFromFormat ('m/d/Y', $data['birthday']);
|
||||
$birthday = $data['birthday'];
|
||||
} else {
|
||||
$birthday = null;
|
||||
}
|
||||
@@ -150,9 +162,9 @@ class FOSUBUserProvider extends BaseFOSUBProvider
|
||||
$lastname = $data['last_name'];
|
||||
}
|
||||
|
||||
if (null === $user) {
|
||||
if (null === $user) {
|
||||
$user = $this->userManager->createUser();
|
||||
$user->setUsername($firstname."-".$lastname);
|
||||
$user->setUsername($firstname . "-" . $lastname);
|
||||
$user->setFirstname($firstname);
|
||||
$user->setLastname($lastname);
|
||||
$user->setEmail($userEmail);
|
||||
@@ -162,10 +174,10 @@ class FOSUBUserProvider extends BaseFOSUBProvider
|
||||
$user->setRoles(array('ROLE_TALENT'));
|
||||
$user->setBirthday($birthday);
|
||||
$user->setGender($gender);
|
||||
if($serviceName == "linkedin"){
|
||||
if ($serviceName == "linkedin") {
|
||||
$user->setLinkedinId($id);
|
||||
}
|
||||
if($serviceName == "facebook"){
|
||||
if ($serviceName == "facebook") {
|
||||
$user->setFacebookId($id);
|
||||
}
|
||||
$this->userManager->updateUser($user);
|
||||
@@ -184,10 +196,10 @@ class FOSUBUserProvider extends BaseFOSUBProvider
|
||||
|
||||
return $user;
|
||||
} else {
|
||||
if($userConnected) {
|
||||
if ($userConnected) {
|
||||
$userConnected->hasRole('ROLE_TALENT_TMP');
|
||||
if ($userConnected->hasRole('ROLE_TALENT_TMP')) {
|
||||
$user->setUsername($firstname."-".$lastname);
|
||||
$user->setUsername($firstname . "-" . $lastname);
|
||||
$user->setFirstname($firstname);
|
||||
$user->setLastname($lastname);
|
||||
$user->setEmail($userEmail);
|
||||
@@ -197,10 +209,10 @@ class FOSUBUserProvider extends BaseFOSUBProvider
|
||||
$user->setRoles(array('ROLE_TALENT'));
|
||||
$user->setBirthday($birthday);
|
||||
$user->setGender($gender);
|
||||
if($serviceName == "linkedin"){
|
||||
if ($serviceName == "linkedin") {
|
||||
$user->setLinkedinId($id);
|
||||
}
|
||||
if($serviceName == "facebook"){
|
||||
if ($serviceName == "facebook") {
|
||||
$user->setFacebookId($id);
|
||||
}
|
||||
$token = new UsernamePasswordToken($user, null, "main", $user->getRoles());
|
||||
@@ -213,7 +225,6 @@ class FOSUBUserProvider extends BaseFOSUBProvider
|
||||
$serviceName = $response->getResourceOwner()->getName();
|
||||
$setter = 'set' . ucfirst($serviceName) . 'AccessToken';
|
||||
$user->$setter($response->getAccessToken());
|
||||
|
||||
return $user;
|
||||
return $user;
|
||||
}
|
||||
}
|
||||
@@ -25,12 +25,38 @@ class AdSearcher
|
||||
{
|
||||
if ($param == 'lite') {
|
||||
$ads = $this->searchLite($data);
|
||||
} elseif ($param == 'tag') {
|
||||
$ads = $this->searchTag($data);
|
||||
} else {
|
||||
return null;
|
||||
}
|
||||
return $ads;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param $data
|
||||
* @return mixed
|
||||
*
|
||||
* ElasticSearch query for ad search
|
||||
*/
|
||||
public function searchTag($data)
|
||||
{
|
||||
$query = new \Elastica\Query();
|
||||
$boolQuery = new \Elastica\Query\BoolQuery();
|
||||
$fieldQuery = new \Elastica\Query\MultiMatch();
|
||||
if(isset($data['tag'])){
|
||||
$fieldQuery->setQuery($data['tag']);
|
||||
$fieldQuery->setFields(['publicTag']);
|
||||
//$fieldQuery->setFieldQuery('publicTag', $data['tag']);
|
||||
$boolQuery->addMust($fieldQuery);
|
||||
}
|
||||
$query->setQuery($boolQuery);
|
||||
$result = $this->finder->find($query);
|
||||
$ads = $this->filterStatus($result);
|
||||
|
||||
return $ads;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param $data
|
||||
* @return mixed
|
||||
|
||||
@@ -35,10 +35,17 @@ class CompanyManager
|
||||
$company->setAddresses($addrs);
|
||||
$publicTags = explode(',', $company->getTagsComma());
|
||||
$company->setPublicTag($publicTags);
|
||||
$extra = array(
|
||||
'size' => $company->getSize(),
|
||||
'siren' => $company->getSiren(),
|
||||
);
|
||||
$extra = $company->getExtra();
|
||||
if (is_array($extra)) {
|
||||
$extra['size'] = $company->getSize();
|
||||
$extra['siren'] = $company->getSiren();
|
||||
} else {
|
||||
$extra = array(
|
||||
'size' => $company->getSize(),
|
||||
'siren' => $company->getSiren(),
|
||||
);
|
||||
}
|
||||
|
||||
$company->setExtra($extra);
|
||||
$company->upload();
|
||||
}
|
||||
@@ -65,7 +72,6 @@ class CompanyManager
|
||||
$talent = $user->getCompany();
|
||||
$alias = $this->slugService->slugify($user->getId() . "-" . $user->getFirstname() . "-" . $user->getLastname());
|
||||
$talent->setAlias($alias);
|
||||
|
||||
if ($talent->getAddress() != null) {
|
||||
$billing = array(
|
||||
'address1' => $talent->getAddress(),
|
||||
@@ -76,16 +82,20 @@ class CompanyManager
|
||||
);
|
||||
$addrs['billing'] = $billing;
|
||||
$talent->setAddresses($addrs);
|
||||
$publicTags = explode(',', $talent->getTagsComma());
|
||||
$talent->setPublicTag($publicTags);
|
||||
$extra = array(
|
||||
'linkedin' => $talent->getLinkedin(),
|
||||
'twitter' => $talent->getTwitter(),
|
||||
);
|
||||
$talent->setExtra($extra);
|
||||
}
|
||||
$publicTags = explode(',', $talent->getTagsComma());
|
||||
$talent->setPublicTag($publicTags);
|
||||
$extra = array(
|
||||
'linkedin' => $talent->getLinkedin(),
|
||||
'twitter' => $talent->getTwitter(),
|
||||
'titleTalent' => $talent->getTitleTalent(),
|
||||
'situationTalent' => $talent->getSituationTalent(),
|
||||
'descriptionTalent' => $talent->getDescriptionTalent(),
|
||||
);
|
||||
$talent->setExtra($extra);
|
||||
|
||||
$this->em->persist($talent);
|
||||
$this->em->persist($user);
|
||||
$this->em->flush();
|
||||
}
|
||||
|
||||
@@ -123,8 +133,8 @@ class CompanyManager
|
||||
};
|
||||
$result = array();
|
||||
$result['count'] = count($complete);
|
||||
$result['steps'] = array_merge($complete,$incomplete);
|
||||
$result['steps'] = array_merge($complete, $incomplete);
|
||||
return $result;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user