Compare commits

..

105 Commits

Author SHA1 Message Date
Thomas MONCHICOURT a552221f60 #9792 déactivation linkedIn 2019-06-14 11:34:33 +02:00
Thomas MONCHICOURT 0b7db51bfb Feat #9689 texttrack=fr forcé 2019-06-05 16:08:21 +02:00
Thomas MONCHICOURT 4faedfa9b9 Fix : temporary fix to display upload response message instead of preview 2019-04-12 12:09:03 +02:00
Thomas MONCHICOURT 77989ab3d8 fix: removed space 2019-04-11 15:32:53 +02:00
Thomas MONCHICOURT 8b0b253f4a fix videojs.record createObjectURL deprecation 2019-02-07 15:05:05 +01:00
Thomas MONCHICOURT 560669f316 Deprecation Fix #8730 @14 2019-02-06 15:09:00 +01:00
Thomas MONCHICOURT ea11a42efd Fix : path mail annonce 2019-01-31 10:24:24 +01:00
Thomas MONCHICOURT 0be29b5255 Fix : probleme lien dans mail réponse talent 2019-01-31 10:19:51 +01:00
Thomas MONCHICOURT 6f539f0605 Feat : ajout d’un lien dashboard #8703 @0h20 2019-01-30 17:13:24 +01:00
Thomas MONCHICOURT e91582f846 Fix : status recommendation in dashboard 2018-12-10 10:03:23 +01:00
Thomas MONCHICOURT e72b86c95a Feat : Suite #8027 2018-11-22 09:50:46 +01:00
Thomas MONCHICOURT 58feccb9d0 Feat : suite #8027 @0h10 2018-11-22 09:48:24 +01:00
Thomas MONCHICOURT 09484f45ca Merge branch 'master' of https://git.e-declic.net/talents-tube/website 2018-11-22 09:36:05 +01:00
Thomas MONCHICOURT 39bf55c815 Feat : demande spe pour lid 53 #8027 @0h15 2018-11-22 09:36:01 +01:00
Maxime Thévenot e8f7cce07b Merge branch 'develop' 2018-10-31 14:14:30 +01:00
Author Name d56dc27fe1 Feat : Update js with assetic 2018-10-31 14:13:19 +01:00
Maxime Thévenot 2ee49175ef Conf : update parameters preprod according to server 2018-10-31 14:10:58 +01:00
Maxime Thévenot 6fc93372a7 Conf : update parameters preprod according to server 2018-10-31 14:05:55 +01:00
Maxime Thévenot 6f0379c7aa Feat : update carrousel to not loop with less than 3 item 2018-10-31 12:18:57 +01:00
Maxime Thévenot 2491b253c6 Fix : update css for select visibility 2018-10-11 11:25:45 +02:00
Thomas MONCHICOURT df3bb979e9 Merge branch 'feat/choose-thumbnail' into develop 2018-10-03 16:51:04 +02:00
Thomas MONCHICOURT bc75bb7afc Feat: Mise en place du changement de vignette #7354 @2h30 2018-10-03 16:50:29 +02:00
Thomas MONCHICOURT ef5f0e81da Fix : birthdate null 2018-10-03 12:17:40 +02:00
Thomas MONCHICOURT 88ceb319af Merge branch 'master' into develop 2018-10-03 11:32:36 +02:00
Thomas MONCHICOURT f314a614fe Fix: probleme set date anniversaire Facebook 2018-10-03 11:26:50 +02:00
Thomas MONCHICOURT b19498ef46 Feat: mise en place du choix de la vignette #7354 @2h 2018-10-03 11:07:51 +02:00
Thomas MONCHICOURT 6313039500 Feat : modification talent en home #7339 @1h 2018-09-26 14:17:28 +02:00
Thomas MONCHICOURT f098e4b6b8 Merge branch 'develop' 2018-09-26 10:46:39 +02:00
Thomas MONCHICOURT ed70e8c940 Fix: delete dump 2018-09-26 10:46:24 +02:00
Thomas MONCHICOURT 9762aee7ae Feat : ajout nouveau type search #7317 @0h15 2018-09-25 16:40:34 +02:00
Thomas MONCHICOURT d0fd19d760 Fix : style dashboard 2018-09-25 16:35:08 +02:00
Thomas MONCHICOURT 3ccf2b9604 Feat : test elastic #7317 @0h30 2018-09-25 16:34:29 +02:00
Thomas MONCHICOURT babfa473fb Merge branch 'master' into develop
# Conflicts:
#	volume/www/website/www/web/css/styles.css
#	volume/www/website/www/web/css/styles.css.map
#	volume/www/website/www/web/sass/base/_mtgenerics.scss
2018-09-25 16:13:31 +02:00
Thomas MONCHICOURT 0bcd46fde8 Fix : correction affichage mediatheque 2018-09-25 16:11:29 +02:00
Thomas MONCHICOURT c976bb6d21 Feat : Modification recherche par tag #7317 @0h20 2018-09-25 15:59:34 +02:00
Thomas MONCHICOURT d301c3b029 Feat : Etat de visionnage d’une candidature par le talent #7229 @0h30 2018-09-25 15:33:24 +02:00
Thomas MONCHICOURT c5a1aebecc Merge branch 'feat/research-keywords' into develop 2018-09-25 14:59:26 +02:00
Thomas MONCHICOURT e516e45cb0 Feat: ajout lien + css #7317 @0h30 2018-09-25 14:58:51 +02:00
Thomas MONCHICOURT 441304c363 Fix : probleme save data 2018-09-24 17:22:51 +02:00
Thomas MONCHICOURT 3399a82379 Fix : Bouton lien page detail territoire 2018-09-24 17:02:25 +02:00
Thomas MONCHICOURT 4e111ae3cd Fix : re prestashop 2018-09-24 16:59:31 +02:00
Thomas MONCHICOURT ed669974a1 Fix : delete event for prestashop 2018-09-24 16:56:01 +02:00
Thomas MONCHICOURT 02c68a48c9 Fix : edition image progile 2018-09-24 16:12:54 +02:00
Thomas MONCHICOURT cce45d834f Feat : Mots clefs cliquable #7317 @2h 2018-09-24 15:32:50 +02:00
Thomas MONCHICOURT 0373f01013 Fix: remove utf8 encode for months 2018-09-20 16:49:19 +02:00
Thomas MONCHICOURT cbcf51f93d Fix : language mois 2018-09-20 16:44:41 +02:00
Thomas MONCHICOURT dffb439bb3 Fix : language date 2018-09-20 16:39:46 +02:00
Thomas MONCHICOURT 4b2c5fc222 Fix : bouton de lien page entreprise 2018-09-20 16:31:10 +02:00
Thomas MONCHICOURT 13073d59e4 Fix : set locales 2018-09-20 14:05:50 +02:00
Thomas MONCHICOURT 8e995cef82 Fix : modal picture profil 2018-09-20 12:23:10 +02:00
Thomas MONCHICOURT 349bc309bd Fix: lien pour voir plus de mots clefs 2018-09-20 11:46:33 +02:00
Thomas MONCHICOURT 492d2687c5 Fix : modification affichage mois 2018-09-20 11:36:27 +02:00
Thomas MONCHICOURT 2fa50e3d5b Fix : changin month save 2018-09-20 11:05:25 +02:00
Thomas MONCHICOURT e6e00c1659 Merge branch 'develop'
# Conflicts:
#	volume/www/website/www/web/css/styles.css.map
2018-09-20 10:33:57 +02:00
Thomas MONCHICOURT db7cc56e3a Feat: Required 2018-09-20 10:21:55 +02:00
Thomas MONCHICOURT 7b5e7bc53a Feat: dernière correction #7104 @0h15 2018-09-20 10:03:03 +02:00
Thomas MONCHICOURT 0d7c6466ec Fix : header et footer tuto 2018-09-19 11:24:37 +02:00
Thomas MONCHICOURT 27ecf6f81c Fix : correction page talent 2018-09-19 09:25:39 +02:00
Thomas MONCHICOURT 55eb1ed363 Feat : dernier correctif page talent #7104 @2h 2018-09-18 16:34:46 +02:00
Thomas MONCHICOURT 6ddf703f9e Fix : correction 2018-09-18 15:37:56 +02:00
Thomas MONCHICOURT 6f8671bc8f Feat : correctin design #7104 @1h30 2018-09-18 12:17:30 +02:00
Thomas MONCHICOURT 68802a2a4d Feat : ajout de fonctionnalité admin #7249 @0h15 2018-09-12 15:15:03 +02:00
Thomas MONCHICOURT ceb2f7f7ce Feat : correction mineur #7244 @0h20 2018-09-12 14:22:02 +02:00
Thomas MONCHICOURT 4da427bac0 Feat : test unit test 2018-09-12 09:36:33 +02:00
Thomas MONCHICOURT 766e57e849 Fix : hide career default form 2018-09-11 10:51:45 +02:00
Thomas MONCHICOURT 3c3b8c8428 Fix : Get birthday on null 2018-09-11 10:46:45 +02:00
Thomas MONCHICOURT 49d47b70f6 Feat : ajout d’un status visionnée candidature talent #7229 @0h15 2018-09-10 15:56:01 +02:00
Thomas MONCHICOURT 49cc496661 Feat : changer les photos de temoignages #7220 @0h10 2018-09-10 15:13:01 +02:00
Thomas MONCHICOURT 717e57dc81 Fix: problem edition carrriere 2018-09-10 14:50:53 +02:00
Thomas MONCHICOURT 9e7ef88bea Feat: refactor form #7104 @1h 2018-09-07 14:59:44 +02:00
Thomas MONCHICOURT a46d69f190 Feat : mise en place suppression d’une candidature 2018-09-07 13:35:12 +02:00
Thomas MONCHICOURT 3f7c0803f1 Refactor: Formulaire independant #7104 @2h 2018-09-07 11:12:25 +02:00
Thomas MONCHICOURT c99b3d2236 Merge branch 'master' into develop
# Conflicts:
#	volume/www/website/www/web/assetic/main.dash.talent.js
#	volume/www/website/www/web/css/styles.css
#	volume/www/website/www/web/css/styles.css.map
2018-09-07 09:42:31 +02:00
Thomas MONCHICOURT 580bf6ecb4 Refactor: experience 2018-09-07 09:41:01 +02:00
Thomas MONCHICOURT 26a41d4eb6 Fix : modal tuto #7202 @1h 2018-09-06 16:52:39 +02:00
Thomas MONCHICOURT 82bf5fa76f Feat : correction affichage 2018-09-06 16:12:01 +02:00
Thomas MONCHICOURT 3fb8262649 Feat: correction review correntin #7104 @3h30 2018-09-06 14:22:53 +02:00
Thomas MONCHICOURT feca14ae4d Fix : ajouter au menu et changement status direct #7177 @0h10 2018-09-05 12:26:58 +02:00
Thomas MONCHICOURT 33c1221cb2 Feat : lister les candidatures en admin #7177 @1h 2018-09-05 12:16:56 +02:00
Thomas MONCHICOURT f4f9191bd1 Fix : retour corentin profile talent 2018-09-05 11:03:29 +02:00
Thomas MONCHICOURT 9709b69125 Fix : Condition pour éviter erreur JS 2018-09-04 15:29:29 +02:00
Thomas MONCHICOURT 6f19c7df97 Feat : Mise en place de la gestion des langues #7104 @3h 2018-09-04 09:32:23 +02:00
Thomas MONCHICOURT 7779cdbf66 Fix : modification style apres merge 2018-08-30 16:30:57 +02:00
Thomas MONCHICOURT 95d58a14e0 Merge branch 'feat/profile-talent' into develop
# Conflicts:
#	volume/www/website/www/src/AppBundle/Form/TalentProfileType.php
#	volume/www/website/www/web/css/styles.css
2018-08-30 16:29:04 +02:00
Thomas MONCHICOURT f8db5a4b1c Feat : Videotheque #5925 @1h 2018-08-30 16:22:00 +02:00
Thomas MONCHICOURT ca23af2623 Feat : edition page talent #7104 @2h 2018-08-29 17:18:49 +02:00
Thomas MONCHICOURT b13ebb9d0f Fix: birtday date error on save 2018-08-29 14:20:53 +02:00
Thomas MONCHICOURT b54d162032 Merge branch 'feat/videotheque' into feat/profile-talent
# Conflicts:
#	volume/www/website/www/app/Resources/views/base.html.twig
#	volume/www/website/www/app/Resources/views/base_dashboard.html.twig
#	volume/www/website/www/web/assetic/main.base.dash.js
#	volume/www/website/www/web/assetic/main.dash.company.js
#	volume/www/website/www/web/assetic/main.js
#	volume/www/website/www/web/css/styles.css.map
2018-08-28 16:50:51 +02:00
Thomas MONCHICOURT 78c15596cd feat : Page profile 2018-08-28 15:58:20 +02:00
Maxime Thévenot 76f557501e Fix : update registration template to fix button 2018-08-28 15:27:09 +02:00
Thomas MONCHICOURT 5bb76aa419 feat : page talent 2018-08-28 12:29:06 +02:00
Thomas MONCHICOURT d5532926aa Feat : Front + css page talent #7104 @3h 2018-08-27 17:26:35 +02:00
Thomas MONCHICOURT 1707d28fc7 Feat: Nouveaux champs talent + formations #7104 @5h 2018-08-27 12:01:03 +02:00
Thomas MONCHICOURT 39143908af Feat : careers #7104 @2h 2018-08-24 12:16:16 +02:00
Thomas MONCHICOURT b2b075ffe7 Feat : macro form pour prototype career 2018-08-23 17:06:48 +02:00
Thomas MONCHICOURT 91c7ebb145 Feat : form experience #7104 @2h 2018-08-23 16:38:13 +02:00
Thomas MONCHICOURT 66e5fd4c6c Feat : experiences 2018-08-23 16:06:14 +02:00
Thomas MONCHICOURT 80f8ad7043 Merge branch 'master' into feat/profile-talent
# Conflicts:
#	volume/www/website/www/web/css/styles.css.map
#	volume/www/website/www/web/js/dropzone.js
2018-08-23 15:49:01 +02:00
Thomas MONCHICOURT e1c3f77e68 Feat : dropzone reload 2018-08-23 14:56:07 +02:00
Thomas MONCHICOURT 14cc09b25f Merge branch 'develop' into feat/profile-talent
# Conflicts:
#	volume/www/website/www/src/AppBundle/Controller/TalentController.php
#	volume/www/website/www/src/AppBundle/Form/TalentProfileType.php
#	volume/www/website/www/web/css/styles.css.map
2018-08-23 14:23:16 +02:00
Thomas MONCHICOURT bdbe45e1a2 Feat : Formulaire compétence #7104 @1h30 2018-08-22 11:01:34 +02:00
Thomas MONCHICOURT 66af01c050 Feat : gestion des experiences #7104 @3h 2018-08-21 17:27:53 +02:00
Thomas MONCHICOURT a38b63f87f Feat : form career pour talents #7104 @5h 2018-08-21 11:01:25 +02:00
Thomas MONCHICOURT 2a2ef6673d feat : Videotheque + lien partage #5925 @2h 2018-07-24 16:55:52 +02:00
Thomas MONCHICOURT f3d618b640 Feat: modificiation videotheque #5925 @1h20 2018-07-23 16:59:57 +02:00
11674 changed files with 74990 additions and 282886 deletions
+1 -1
View File
@@ -17,7 +17,7 @@ endif
DC_OVERRIDE := $(shell test -e conf/docker-compose.override.yml && echo "--file conf/docker-compose.override.yml")
DC_OVERRIDE_ENV := $(shell test -e conf/docker-compose.$(ENV).yml && echo "--file conf/docker-compose.$(ENV).yml")
DC=ENV=$(ENV) CLIENT=$(CLIENT) "$(DOCKERCOMPOSE)" --project-name "$(CLIENT)_$(ENV)" --file conf/docker-compose.yml $(DC_OVERRIDE) $(DC_OVERRIDE_ENV)
DC=ENV=$(ENV) CLIENT=$(CLIENT) $(DOCKERCOMPOSE) --project-name "$(CLIENT)_$(ENV)" --file conf/docker-compose.yml $(DC_OVERRIDE) $(DC_OVERRIDE_ENV)
default:
$(info $(USAGE))
-7
View File
@@ -51,13 +51,6 @@ class AppKernel extends Kernel
//CookieBar
new Fairlane\CookieConsentBundle\FairlaneCookieConsentBundle(),
//Api
new JMS\SerializerBundle\JMSSerializerBundle(),
new FOS\RestBundle\FOSRestBundle(),
new WhiteOctober\PagerfantaBundle\WhiteOctoberPagerfantaBundle(),
new Bazinga\Bundle\HateoasBundle\BazingaHateoasBundle(),
new Lexik\Bundle\JWTAuthenticationBundle\LexikJWTAuthenticationBundle(),
];
if (in_array($this->getEnvironment(), ['dev', 'test'], true)) {
@@ -169,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>
@@ -226,6 +230,30 @@
<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 lordre dimportance. 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>
@@ -305,6 +333,82 @@
<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 demploi</target>
</trans-unit>
<trans-unit id="talent.profile.situation.2.label">
<source>talent.profile.situation.2.label</source>
<target>À l’écoute dopportunité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">
<source>ad.talent.answer.label</source>
@@ -552,8 +656,20 @@
<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>
@@ -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 %}
@@ -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>
@@ -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>
@@ -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>
@@ -15,11 +15,18 @@
{% 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">
<a target="_blank" href="{{ path('talent_show',{'alias':answer.user.company.alias} ) }}">
{% include 'talent/talent_picture.html.twig' with {
'user' : answer.user
} %}
</a>
<div>
<div class="mini-profil-picture-name">{{ answer.user.firstname }} {{ answer.user.lastname }}</div>
<div class="mini-profil-picture-name">
<a target="_blank" href="{{ path('talent_show',{'alias':answer.user.company.alias} ) }}">
{{ answer.user.firstname }} {{ answer.user.lastname }}
&nbsp;<i class="fa fa-user-circle"></i>
</a>
</div>
<div>Recu le {{ answer.sendTime|date('d/m/Y') }}</div>
</div>
</div>
@@ -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>
@@ -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>
@@ -40,7 +40,7 @@
{% else %}#}
<div class="embed-responsive embed-responsive-16by9">
<div class="col s12">
<iframe src="https://player.vimeo.com/video/{{ ad.video.cdnUrl|replace({ "/videos/": ""}) }}"
<iframe src="https://player.vimeo.com/video/{{ ad.video.cdnUrl|replace({ "/videos/": ""}) }}?texttrack=fr"
width="100%" height="640" frameborder="0" webkitallowfullscreen mozallowfullscreen
allowfullscreen></iframe>
</div>
@@ -51,6 +51,11 @@
OFFRE POURVUE
</div>
{% endif %}
{% if ad.id == 53 %}
<div class="isPromoted">
Traitement des candidatures vidéos
</div>
{% endif %}
</div>
{% endif %}
@@ -76,9 +81,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>
@@ -99,12 +103,14 @@
</div>
{% elseif not is_granted('ROLE_COMPANY') %}
{% if not ad.isPromoted %}
{% if ad.id != 53 %}
<p class="item-detail-reply">
<a title="postuler-bottom" href="{{ path('talent_answer_create',{'id': ad.getId()}) }}"
class="btn btn-default">
Postuler
</a>
</p>
{% endif %}
{% endif %}
{% endif %}
{% endif %}
@@ -57,12 +57,14 @@
</div>
{% elseif not is_granted('ROLE_COMPANY') %}
{% if not ad.isPromoted %}
{% if ad.id != 53 %}
<p class="item-detail-reply">
<a title="postuler-side" href="{{ path('talent_answer_create',{'id': ad.getId()}) }}"
class="btn btn-default">
Postuler
</a>
</p>
{% endif %}
{% else %}
<div class="item-detail-ispromoted">
Offre pourvue
@@ -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>
@@ -4,7 +4,7 @@
{% set destination = path('redirect_dashboard') %}
{% endif %}
<a class="btn btn-default btn-facebook z-depth-2" href="{{ url("hwi_oauth_service_redirect", {service: "facebook"}) }}?_destination={{ destination }}">Connexion avec Facebook</a>
<a class="btn btn-default btn-linkedin z-depth-2" href="{{ url("hwi_oauth_service_redirect", {service: "linkedin"}) }}?_destination={{ destination }}">Connexion avec Linkedin</a>
{# <a class="btn btn-default btn-linkedin z-depth-2" href="{{ url("hwi_oauth_service_redirect", {service: "linkedin"}) }}?_destination={{ destination }}">Connexion avec Linkedin</a> #}
<div class="row">
<div class="col s12">
<div class="separator-with-label">
@@ -98,9 +98,9 @@
<div class="container">
<div class="row center-align">
<div class="col s12">
<h2 class="blue-text no-margin-top">Les talents</h2>
<h2 class="blue-text no-margin-top">Les talents à la une</h2>
</div>
<h3 class="subtitles-homepage">Découvrez leurs CV vidéo et vidéo de motivation.</h3>
<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">
@@ -111,6 +111,12 @@
{% 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 #}
@@ -19,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 %}
@@ -8,7 +8,7 @@
<h2>Détail de mon annonce</h2>
<div>
<div>
<a href="{{ path('ad_show',{'alias': ad.alias }) }}" title="{{ ad.title }}" class="item-list-media">
<a href="{{ absolute_url(path('ad_show',{'alias': ad.alias })) }}" title="{{ ad.title }}" class="item-list-media">
{% if ad.video %}
{% if ad.video.thumbnails.0.sizes is defined %}
<img width="100%" src="{{ ad.video.thumbnails.0.sizes.4.link }}"
@@ -19,7 +19,7 @@
</div>
<div>
<h3>
<a href="{{ path('ad_show',{'alias': ad.alias }) }}"
<a href="{{ absolute_url(path('ad_show',{'alias': ad.alias })) }}"
title="{{ ad.title }}">{{ ad.title }}</a>
</h3>
<p>
@@ -40,10 +40,10 @@
</p>
{% endif %}
<p>Entité :
<a href="{{ path('company_show',{'alias': ad.company.alias }) }}">{{ ad.company.brandName }}</a>
<a href="{{ absolute_url(path('company_show',{'alias': ad.company.alias })) }}">{{ ad.company.brandName }}</a>
</p>
<p>
<a href="{{ path('ad_show',{'alias': ad.alias }) }}" title="{{ ad.title }}" class="btn btn-default">Voir
<a href="{{ absolute_url(path('ad_show',{'alias': ad.alias })) }}" title="{{ ad.title }}" class="btn btn-default">Voir
l'offre d'emploi</a>
</p>
</div>
@@ -16,7 +16,7 @@
<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>
<a class="btn btn-default" href="{{ absolute_url(path('talent_ad_detail',{'alias': answer.ad.alias,'id': answer.id })) }}">Visionner la réponse vidéo</a>
</div>
{% else %}
<br />
@@ -26,7 +26,7 @@
<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>
<a class="btn btn-default" href="{{ absolute_url(path('talent_ad_detail',{'alias': answer.ad.alias,'id': answer.id })) }}">Consulter la réponse</a>
</div>
{% endif %}
<br>
@@ -8,7 +8,11 @@
<div id="preview_video">
{% 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>
<iframe
src="https://player.vimeo.com{{ video.getCdnUrl()|replace({ "videos": "video"}) }}"
width="100%" height="300px" frameborder="0"
webkitallowfullscreen mozallowfullscreen allowfullscreen>
</iframe>
{% endif %}
{% endif %}
</div>
@@ -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 limage.
<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 %}
@@ -38,7 +38,16 @@
<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 }}
{% 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 %}
@@ -73,4 +82,11 @@
var player_vimeo = new Vimeo.Player('player_vimeo');
});
</script>
<script type="text/javascript">
(function ($) {
$(function () {
$('.modal').modal();
});
})(jQuery);
</script>
{% endblock %}
@@ -21,27 +21,8 @@
{% block javascripts %}
<script src="https://maps.googleapis.com/maps/api/js?key=AIzaSyDYV8IJGtIoWLfXJQQvIuDQ88n2aEuRgpg&libraries=places"></script>
{% javascripts
'@vendors'
'@global'
'@talents'
output='assetic/main.dash.talent.js' filter='?uglifyjs2' %}
output='assetic/main.dashboard.talent.js' filter='?uglifyjs2' %}
<script src="{{ asset_url }}"></script>
{% endjavascripts %}
<script type="text/javascript">
$.fn.datepicker.languages['fr-FR'] = {
format: 'dd/mm/yyyy',
days: ['Dimanche', 'Lundi', 'Mardi', 'Mercredi', 'Jeudi', 'Vendredi', 'Samedi'],
daysShort: ['Dim', 'Lun', 'Mar', 'Mer', 'Jeu', 'Ven', 'Sam'],
daysMin: ['Di', 'Lu', 'Ma', 'Me', 'Je', 'Ve', 'Sa'],
weekStart: 1,
months: ['Janvier', 'Février', 'Mars', 'Avril', 'Mai', 'Juin', 'Juillet', 'Aout', 'Septembre', 'Octobre', 'Novembre', 'Décembre'],
monthsShort: ['Jan', 'Fev', 'Mar', 'Avr', 'Mai', 'Jun', 'Jui', 'Aou', 'Sep', 'Oct', 'Nov', 'Dec']
};
$('.datepicker').datepicker({
language: 'fr-FR'
});
$('form[name="talent_profile"]').validate();
</script>
{% endblock %}
@@ -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,25 +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 %}
@@ -35,32 +35,6 @@
{{ 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>
{% endif %}
</div>
<div class="col s12 center-align">
<div class="divider"></div>
<br/>
@@ -79,17 +53,64 @@
{% 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>
@@ -129,6 +150,30 @@
</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>
@@ -195,6 +240,11 @@
});
$('#modal-recommendation').modal('open');
}
$(".chip-more").on('click',function(){
$(this).fadeOut();
$(".chip-invisible").css('display','inline-block');
});
});
</script>
{% endblock %}
@@ -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>
@@ -32,8 +32,16 @@ assetic:
- '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'
+1 -25
View File
@@ -227,28 +227,4 @@ monolog:
level: debug
type: rotating_file
max_files: 15
path: '%kernel.logs_dir%/%kernel.environment%_debug.log'
#Api
fos_rest:
zone:
- { path: ^/api/* }
body_converter:
enabled: true
view:
formats: { json: true, xml: false, rss: false }
view_response_listener: true
mime_types:
json: ['application/json', 'application/json;version=1.0', 'application/json;version=2.0']
serializer:
serialize_null: true
format_listener:
rules:
- { path: '^/api/', priorities: ['json'], fallback_format: 'json' }
param_fetcher_listener: true
lexik_jwt_authentication:
secret_key: '%kernel.root_dir%/../app/config/jwt/private.pem' # required for token creation
public_key: '%kernel.root_dir%/../app/config/jwt/public.pem' # required for token verification
pass_phrase: 'talentstubeforever' # required for token creation, usage of an environment variable is recommended
token_ttl: 3600
path: '%kernel.logs_dir%/%kernel.environment%_debug.log'
@@ -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:
@@ -1,54 +0,0 @@
-----BEGIN RSA PRIVATE KEY-----
Proc-Type: 4,ENCRYPTED
DEK-Info: AES-256-CBC,1B8B1CB3A64B49F820DD713907974037
0/ahxIYlJ0RiiOqRz78LbR7g+UvBC8r4RrMWFCIOuh/FPbTYyIc0VxRMObrTqvHv
B4oUMnTzHzkOimvLWncZSIA39TL2OuQMTT7g/Cp8uh7Exnf29js7Ywv8EAQA2trw
EsLXjH5St3vLhWLQdxVUBY6tWc5yuqTJ3ze9rFojiJ0mbIoeid7L8sI4mQAocfX2
2/aMWwhQX83AJaRC7liU18nZAP4gAxYjvLAaC6zj7M3wxPv1r3Ox2PuSUfYZFkYA
HbVYq6pi/Dw32CmCniufccSr2wd0f78fZdI/E20tdAviLN6awqrjM2aFgzqZ6zw/
UCD3L1hLfGxRk6uYAFgEiFQB7dT4ZzqjopKNsVuho+DTc55kmx8iPD3xXuTMbeUY
SgiV4KcGCbHRt1HGWWbJgyOkSaPQQQk5Bf63glS4nLVNqzIqzJmpVCKuwOpKCSnK
DTeWpw9MIHLHM4SD2OM8Hh8S8l6v+Y4ash6mEtUNh6a7N+TQ1vEn/wyt8wyM7/Fh
UY/97loUyu0HC2Ox89sP1y6VcNaRQlhNj9hZzLC/q5K+Z4zAQRnGPuTowZL7ztxZ
BD+MTnNZc+Akrti+3c1vAHxzuUoBd7h8NX2pnNNUY2Wme9JqfZnCx9fV4AwVOvx6
8mvTQL5YHOv8HpsGnDoOak1r+QzHM8IrL8SSrJ/DBXMIWmFefhcIDgrXZG8LV+ck
RlSuP5Lsyy3e8AQ6hrM06DXkhjGi7gCeHIHySbzw0AiFERQz0d7XgU75DL/ALPqh
0lyqlXdrx/+qqTc0wwjYIerNLNdVqN9kvLg+aqFSwZrfiZyEy6rYdUoqYXoInwle
QBt2uqcjVUhMwdQYaDWiqHidSpIMP5nuTKDm6Z8J/SLf4iy+It1qXUEcoRKhDavm
fy+dw3JvthpoNjP3Bq+moygP8J8msS5Ti3UgVug21Fsp89fmvUO8FO2JRXLXP8+U
3HG1Ij/KKk1dxC6PT7qu9gVeoKM+W8maCVV/O84Qx/N3aXY+sHm1HsSssg0cLEC7
zaEai16xhVGI8aagYwxBHVkVVXk/CBS7zq1JYBnZOIw56d1NTjvJ3YmTx619Hyek
PJuMNjGV4mM0jONzHJbI6deE2B+f1/ej1JwoeGyBhynrZjwtTCd3JAtwRK9WO1fq
owdoCAnDOV7yDcwfFEYaNV2ie/R/kQo/fIIanykQs59Op2M0yhLvmch+C3RghLVg
qfR3Jngbqjwz/uh5ZQShZtHFirdAyer/eLD0CteDt4TrAiQxiHqrEOdqwF/G/STq
+3SSkChf6uhqUUqfmJFwxaF6AiNTkdk0YyxucWY2JXYf3qyz7ADGnI/KZZ+1LchF
2bLUKjyjnFKQoaFtDd7qMGxrTD80egN/fFV4Nybt+DTsGjdUjvCFS69j+YvZ0vIP
8rZHK7etISTfiauP9SrIR9UKpNA8fGrUgJGOMo/5Wkz4YS6LmMceQkpDxj46p8Ia
Iv+pOKez6NsckP1OiDfTxLtXL1S3xQHP3V0dYI5UcWt8Bczi2VylZCcS8JiV8Cqy
+EYRaIB9Qi1X5uLQsbiyS70rJp9mJ3xUR2dIzD70njCIDtLPA2b9dXqXm1IyqdkB
46W0MOnyI699XgiywvPovwhzTH8uO5Xn5gnjEgD92pHdJ2iTVQDTC9qtKhODrhbC
ouOCbS/LPAnQMwlLD1rWAeJcBJ3PL1KdAlaxWq3Jd/iMhDh/hSboS88Lm88RYtBh
3DhMCyxY1gu6jyzuWN2pHKzCvZ1Aqqm1SMS/8nAPe/KtPJO7zTRQJIrrfPK1pt2B
u5tu1zupVKihoRkLZtV4FUwDBo8DE9V65b/LAJZtuId77ci7aWRoD5b1Lc9X9iyH
cFJTQbMxzA76/8F9/Y1h8D9mdP+N9Tfw6iOvRxszqciGAsUasqo4Xm3ZOQqCcOo5
djoywGnzqsfxrV733i2KHRqz7XUkLf8n6URloH2i1tSbHWl7fmYAC0N85IUs1PxQ
DB0LUtQgS03gjE4pRJSlgf8JX/0KrG8sYpcvz9R5CqMKrkM6rDy6ehe4P5xVQ+3m
WNCZFfGjCTcuEVLFDNx8CdF8qIV/BCcUSty7KXXoC3AMOAsVlZSwskmKN61GJmBS
Sz1bDwZO6QCZgXR2fH0UMEnCkpksS4xf3f0oq5/WzWzC4ZaDHnwt5NqKE8XXeYpn
isulqUFmCK2VhkqRX1rwND8E45yDG8+U5lyJSHp4y8Fe+AEQjxXUxXDefc80s09i
LMXM7iNUtESFge3BZvocdRrqvp21tkPElzaDoW0nMb0VoNI4Xfe113vBeBdEq0Hr
yuGvM8ZgvKjzl1T4h9PTaBu97kR1QjBSiY0PeEeSMtq/W1XbFO5jU4g/utVRluBm
z64kldtRW1RC8vosrN4sNbdVDAvL43Dynl0wYMI+jgIN3HP2QnOTDH1MLQ5BJZg4
aZFSMZ70e9kF2HXpFnfp+SsuT0lMhzZrSrLvKg0pkuD8jc7FtP/HoLcay2doBufd
fS4VheiaGm7om9Ggmkowld1CUpuzfyi7NDcymWH6J37Ypcvprn1Ts9iBcBDaOsbZ
T3pP0mU4glmRPFRq2IRZXOgTQFXIJKYFpnt0LCC2IuzbQLTKy0LVr6Ksc6ZD21j5
AR/xblSp8dZDS4ltrN44r+rtcio7dN9KlDctURpoqdw8oatwpk5QLFfYeMKPRn6j
yQA4tatWlTxr/UR8Xy8JNcJfg7JQIYjdf36atxpv5xYvnkf6Gs56xVnRthwNYawn
h44emyq/Tuflc9FZqptUDwEPKzLvH0NWxVkNvGG92H0OtES3q9OpGPTnqhIPUTme
Jrbu7knwD5sdzYRh64BhbXem8glPStYnW7B0dSdvyvGpArF1W2cKKURgnr7XokrB
DqbeSpdRf7fE5bw9jHJgcpUJOZ3o6kGA3l309Cdcbigm7gnK0KiY0y/P8MSWEu00
C4WZOFLxuaO1iVav+spACFbFkdVmLoRBPE2hFUc6BA3E/7qNHAjlVYXbUrIR3NA+
iioXf1XFM7K0LG02mMKEFSuWIpZacDyAfjHUlrid7cFBBXLk/EWcwNyGSlRdQl7w
rn7V+QfAdTxmk2FAyO80odbrdZQaBR6oLZaFgz/MzkT6dLJXwCjKG/qJrwwV/2sv
-----END RSA PRIVATE KEY-----
@@ -1,14 +0,0 @@
-----BEGIN PUBLIC KEY-----
MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA0emZKHHTXLKphYp1XLeh
YApXdcWoZenqaFeE9pa3yzP888bsvka7t41JZy7+LOACkjnZj8VQNhMl/JIwtuv8
L276Tox94l1CeLSDvH0vxGAvCyZzpW4pgx2xAJk1xWndkEWcx/6A7/kgdePOFNJt
41JdDsefqRMlsMjw5vCxxX4V1mlebi6owKkxVBXii476xheX1M2k3cfVbC95h++h
Yd7h10DwA17SPbmIDN07QygKqRH7RGkEU5gK2Psc+NFstmYaYj4ew1NF4X9e2Erj
5M3RnYoUfkQBaigv+GSjefL6zdp+yZwjrPtZo+YDC/M1SQLEPAsoxQZvOISrLtkH
usqdvLB8rsVysZOipJyO3OClI+Vvqy9p4CggM3rHlpzMu+e+sgpZersaNxDEz/rX
J/rMXpPTfkVSRMddkQ/s0e0w4oop/tr2Zi4fYfmaJ2Ha49PFBPT7buZeyabLyAOk
utwRBkaGiUGmfVidlb0TMK2fQQOS5WottAJJOhEDzl7woCtCBgCeclsuM6v/EDd/
9KCeMcWrx7/PHBH2I8RGSfoqTKrZ8plOOPccaY2G6zZjvceExyBjewlzOm5zXI7Z
c/L5H9mghOdLjEJ+eRLZIYL9yw1LSDjY3Q0ENkxdvkMdVnZxmsf+UFMFdxBU3VjB
hqeH8T9lC2ZWC8OJ5kA4y4ECAwEAAQ==
-----END PUBLIC KEY-----
@@ -24,4 +24,4 @@ parameters:
media_photo_dir: '%kernel.root_dir%/../web/uploads/photos/'
elastic_host: tt-website.elasticsearch.dev
elastic_port: 9200
delivery_addresses: maxime.thevenot@e-declic.com
delivery_addresses: thomas@e-declic.com
@@ -8,7 +8,8 @@ parameters:
database_port: '5432'
database_name: database
database_user: user
database_password: 7C|Uk2B[.>"6{QO{
#database_password: 7C|Uk2B[.>"6{QO{
database_password: b|RN:iR<g,TNMqM6
#Mongo
mongodb_server: "mongodb://tt-website.mongo.preprod:27017"
#Prestashop
@@ -38,6 +38,4 @@ parameters:
# Elastic
elastic_host: tt.search_db
elastic_port: 9200
delivery_addresses: maxime.thevenot@e-declic.com
elastic_port: 9200
@@ -22,7 +22,4 @@ hwi_oauth_redirect:
prefix: /login
fairlane_cookie_consent:
resource: "@FairlaneCookieConsentBundle/Resources/config/routing.yml"
api_login_check:
path: /api/login_check
resource: "@FairlaneCookieConsentBundle/Resources/config/routing.yml"
+1 -26
View File
@@ -5,31 +5,12 @@ security:
fos_userbundle:
#id: fos_user.user_provider.username_email
id: app.user_provider
firewalls:
dev:
pattern: ^/(_(profiler|wdt)|css|images|js)/
security: false
api_login:
pattern: ^/api/login_check
stateless: true
anonymous: true
provider: fos_userbundle
json_login:
check_path: /api/login_check
success_handler: lexik_jwt_authentication.handler.authentication_success
failure_handler: lexik_jwt_authentication.handler.authentication_failure
api:
pattern: ^/api
stateless: true
anonymous: true
provider: fos_userbundle
guard:
authenticators:
- lexik_jwt_authentication.jwt_token_authenticator
main:
pattern: ^/
remember_me:
@@ -52,8 +33,6 @@ security:
anonymous: true
switch_user:
provider: fos_userbundle
access_control:
- { path: ^/login$, roles: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/register, roles: IS_AUTHENTICATED_ANONYMOUSLY }
@@ -65,10 +44,6 @@ security:
- { path: ^/talent/recherche/, roles: ROLE_COMPANY }
- { path: ^/entreprise/me/, roles: ROLE_COMPANY }
- { path: ^/territoire/me/, roles: ROLE_TERRITORY }
- { path: ^/api/login_check, roles: IS_AUTHENTICATED_ANONYMOUSLY}
- { path: ^/api/login_check_oauth, roles: IS_AUTHENTICATED_ANONYMOUSLY}
- { path: ^/api, roles: IS_AUTHENTICATED_FULLY, methods: [POST, PUT, DELETE, PATCH] }
- { path: ^/api, roles: IS_AUTHENTICATED_ANONYMOUSLY, methods: [GET]}
encoders:
FOS\UserBundle\Model\UserInterface: bcrypt
@@ -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
@@ -79,6 +83,3 @@ services:
app.user_provider:
class: AppBundle\Security\Core\User\FOSUBUserProvider
arguments: ["@fos_user.user_manager","@doctrine.orm.entity_manager","@mt.slug","@service_container", { facebook: facebookId, linkedin: linkedinId}]
app.api_key_authenticator:
class: AppBundle\Security\ApiKeyAuthenticator
+4 -9
View File
@@ -23,8 +23,8 @@
},
"require": {
"php": ">=5.5.9",
"symfony/symfony": "3.4.*",
"doctrine/orm": "^2.6.2",
"symfony/symfony": "3.2.*",
"doctrine/orm": "2.6.*@dev",
"doctrine/doctrine-bundle": "^1.6",
"doctrine/doctrine-cache-bundle": "^1.2",
"symfony/swiftmailer-bundle": "^2.3.10",
@@ -37,6 +37,7 @@
"friendsofsymfony/user-bundle": "~2.0",
"doctrine/mongodb-odm-bundle": "^3.0",
"doctrine/mongodb-odm": "^1.0",
"alcaeus/mongo-php-adapter": "^1.0",
"dunglas/doctrine-json-odm": "dev-master",
"php-ffmpeg/php-ffmpeg": "^0.5",
"requestlab/vimeo-bundle": "^0.0.3",
@@ -51,13 +52,7 @@
"friendsofsymfony/elastica-bundle": "4.1.*",
"liip/imagine-bundle": "^1.9",
"twig/extensions": "^1.5",
"fairlane/cookie-consent-bundle": "^1.0",
"jms/serializer-bundle": "^2.4",
"friendsofsymfony/rest-bundle": "^2.4",
"symfony/twig-bundle": "^4.1",
"white-october/pagerfanta-bundle": "^1.2",
"willdurand/hateoas-bundle": "^1.4",
"lexik/jwt-authentication-bundle": "^2.5"
"fairlane/cookie-consent-bundle": "^1.0"
},
"require-dev": {
"sensio/generator-bundle": "^3.0",
+335 -1932
View File
File diff suppressed because it is too large Load Diff
@@ -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');
}
}
@@ -1,86 +0,0 @@
<?php
namespace AppBundle\Controller\Api;
use AppBundle\Entity\Ad;
use AppBundle\Representation\Ads;
use AppBundle\Representation\SingleAd;
use FOS\RestBundle\Controller\Annotations as Rest;
use FOS\RestBundle\Controller\Annotations\Get;
use FOS\RestBundle\Controller\Annotations\Post;
use FOS\RestBundle\Controller\Annotations\View;
use FOS\RestBundle\Controller\FOSRestController;
use FOS\RestBundle\Request\ParamFetcherInterface;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\ParamConverter;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
class AdController extends FOSRestController
{
/**
* @Rest\Get(path="/api/ads/{id}", name="api_ad_show", requirements={"id"="\d+"})
* @Rest\View
*
*/
public function showAction(Ad $ad)
{
// return $ad;
return new SingleAd($ad);
}
/**
* @Rest\Get("/api/ads", name="api_ad_list")
* @Rest\QueryParam(
* name="keyword",
* requirements="[a-zA-Z0-9]",
* nullable=true,
* description="The keyword to search for."
* )
* @Rest\QueryParam(
* name="order",
* requirements="asc|desc",
* default="asc",
* description="Sort order (asc or desc)"
* )
* @Rest\QueryParam(
* name="limit",
* requirements="\d+",
* default="15",
* description="Max number of ads per page."
* )
* @Rest\QueryParam(
* name="offset",
* requirements="\d+",
* default="1",
* description="The pagination offset"
* )
* @Rest\View(StatusCode = 200)
*/
public function listAction(ParamFetcherInterface $paramFetcher)
{
$pager = $this->getDoctrine()->getRepository('AppBundle:Ad')->search(
$paramFetcher->get('keyword'),
$paramFetcher->get('order'),
$paramFetcher->get('limit'),
$paramFetcher->get('offset')
);
return new Ads($pager);
}
/**
* @Rest\Post("/api/ads", name="api_ad_create")
* @Rest\View(StatusCode = 201)
* @ParamConverter("ad", converter="fos_rest.request_body")
*/
public function createAction(Ad $ad)
{
$em = $this->getDoctrine()->getManager();
$em->persist($ad);
$em->flush();
return $this->view(
new SingleAd($ad),
Response::HTTP_CREATED,
['Location' => $this->generateUrl('api_ad_show', ['id' => $ad->getId(), UrlGeneratorInterface::ABSOLUTE_URL])]);
}
}
@@ -1,79 +0,0 @@
<?php
namespace AppBundle\Controller\Api;
use AppBundle\Entity\Answer;
use AppBundle\Representation\Answers;
use AppBundle\Representation\SingleAnswer;
use FOS\RestBundle\Controller\Annotations as Rest;
use FOS\RestBundle\Controller\Annotations\Get;
use FOS\RestBundle\Controller\Annotations\Post;
use FOS\RestBundle\Controller\Annotations\View;
use FOS\RestBundle\Controller\FOSRestController;
use FOS\RestBundle\Request\ParamFetcherInterface;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\ParamConverter;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
class AnswerController extends FOSRestController
{
/**
* @Rest\Get(path="/api/answers/{id}", name="api_answer_show", requirements={"id"="\d+"})
* @Rest\View
*
*/
public function showAction(Answer $answer)
{
// return $answer;
return new SingleAnswer($answer);
}
/**
* @Rest\Get("/api/answers", name="api_answer_list")
* @Rest\QueryParam(
* name="order",
* requirements="asc|desc",
* default="asc",
* description="Sort order (asc or desc)"
* )
* @Rest\QueryParam(
* name="limit",
* requirements="\d+",
* default="15",
* description="Max number of answers per page."
* )
* @Rest\QueryParam(
* name="offset",
* requirements="\d+",
* default="1",
* description="The pagination offset"
* )
* @Rest\View(StatusCode = 200)
*/
public function listAction(ParamFetcherInterface $paramFetcher)
{
$pager = $this->getDoctrine()->getRepository('AppBundle:Answer')->search(
$paramFetcher->get('order'),
$paramFetcher->get('limit'),
$paramFetcher->get('offset')
);
return new Answers($pager);
}
/**
* @Rest\Post("/api/answers", name="api_answer_create")
* @Rest\View(StatusCode = 201)
* @ParamConverter("answer", converter="fos_rest.request_body")
*/
public function createAction(Answer $answer)
{
$em = $this->getDoctrine()->getManager();
$em->persist($answer);
$em->flush();
return $this->view(
new SingleAnswer($answer),
Response::HTTP_CREATED,
['Location' => $this->generateUrl('api_answer_show', ['id' => $answer->getId(), UrlGeneratorInterface::ABSOLUTE_URL])]);
}
}
@@ -1,79 +0,0 @@
<?php
namespace AppBundle\Controller\Api;
use AppBundle\Entity\Company;
use AppBundle\Representation\Companys;
use AppBundle\Representation\SingleCompany;
use FOS\RestBundle\Controller\Annotations as Rest;
use FOS\RestBundle\Controller\Annotations\Get;
use FOS\RestBundle\Controller\Annotations\Post;
use FOS\RestBundle\Controller\Annotations\View;
use FOS\RestBundle\Controller\FOSRestController;
use FOS\RestBundle\Request\ParamFetcherInterface;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\ParamConverter;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
class CompanyController extends FOSRestController
{
/**
* @Rest\Get(path="/api/companies/{id}", name="api_company_show", requirements={"id"="\d+"})
* @Rest\View
*
*/
public function showAction(Company $company)
{
// return $company;
return new SingleCompany($company);
}
/**
* @Rest\Get("/api/companies", name="api_company_list")
* @Rest\QueryParam(
* name="order",
* requirements="asc|desc",
* default="asc",
* description="Sort order (asc or desc)"
* )
* @Rest\QueryParam(
* name="limit",
* requirements="\d+",
* default="15",
* description="Max number of companys per page."
* )
* @Rest\QueryParam(
* name="offset",
* requirements="\d+",
* default="1",
* description="The pagination offset"
* )
* @Rest\View(StatusCode = 200)
*/
public function listAction(ParamFetcherInterface $paramFetcher)
{
$pager = $this->getDoctrine()->getRepository('AppBundle:Company')->search(
$paramFetcher->get('order'),
$paramFetcher->get('limit'),
$paramFetcher->get('offset')
);
return new Companys($pager);
}
/**
* @Rest\Post("/api/companies", name="api_company_create")
* @Rest\View(StatusCode = 201)
* @ParamConverter("company", converter="fos_rest.request_body")
*/
public function createAction(Company $company)
{
$em = $this->getDoctrine()->getManager();
$em->persist($company);
$em->flush();
return $this->view(
new SingleCompany($company),
Response::HTTP_CREATED,
['Location' => $this->generateUrl('api_company_show', ['id' => $company->getId(), UrlGeneratorInterface::ABSOLUTE_URL])]);
}
}

Some files were not shown because too many files have changed in this diff Show More