Compare commits
127 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 7a54bbe673 | |||
| 47043ac6bc | |||
| f094ee739e | |||
| bad5ad0d1c | |||
| 8701a4beb9 | |||
| 9444700ab5 | |||
| 050ccb0ae1 | |||
| d40dc7add2 | |||
| 8fc9d69d80 | |||
| e8eb1c9692 | |||
| d4b2b78553 | |||
| c0c1735e9d | |||
| b6d6a3f177 | |||
| 4f185984f9 | |||
| 26e781c230 | |||
| b68e1c6050 | |||
| ee98a19150 | |||
| 0e512cb8a2 | |||
| 24a5ac8cbf | |||
| 6920e8faa0 | |||
| 5aa8079b0a | |||
| cc83f88458 | |||
| 4edfdfd187 | |||
| 605834be03 | |||
| dca7bf9efe | |||
| 99434105e3 | |||
| d018b73fc8 | |||
| 10975021c3 | |||
| 2af32f2835 | |||
| 2c41f2aa02 | |||
| ef50bfddff | |||
| 029d86649a | |||
| 24becf66c3 | |||
| 43d0852075 | |||
| 81c548bd00 | |||
| c7f4eddad5 | |||
| 39e02581ae | |||
| a5aa1364ab | |||
| e48027f2b2 | |||
| aad0203d0b | |||
| a49cf8d9bf | |||
| c85313ade6 | |||
| 992ba3a103 | |||
| 992f61867e | |||
| 72b119ac0c | |||
| 831f7696ac | |||
| 5a44f7d6ec | |||
| ddbfcc8a69 | |||
| 61925ebb38 | |||
| 0bb341b7ce | |||
| 74f2e45edf | |||
| 5d660ebc8b | |||
| a31e49278b | |||
| b13d0d939f | |||
| e470c8dce1 | |||
| 8eeaf240de | |||
| 18144e395c | |||
| f53815aa1a | |||
| bab23a58ac | |||
| 9346635ca7 | |||
| 849b5a999a | |||
| 409be2f0b0 | |||
| d201bd44b9 | |||
| cbe1b1f0d6 | |||
| a56d568319 | |||
| c8f9e4d8f4 | |||
| 21b8954c13 | |||
| ee9eb19ca9 | |||
| 3060f93e59 | |||
| dc29527064 | |||
| f369802b96 | |||
| 07941367cc | |||
| effb92a9d8 | |||
| 1952e27030 | |||
| 6db371f2af | |||
| 37ef9a4fdd | |||
| e11f36d170 | |||
| 968b4d0497 | |||
| b6ba7e62e3 | |||
| 67734e40b3 | |||
| 4d96ede4ea | |||
| 55ff3ddcb8 | |||
| 47fdf752b1 | |||
| f5008ea3de | |||
| fc3d9d71a7 | |||
| a3212a5b17 | |||
| 6760343163 | |||
| 720e112d3c | |||
| 383b129317 | |||
| 886a931221 | |||
| 8cfeb2906b | |||
| f2d8e569a2 | |||
| d03c1615b1 | |||
| 36fdf82d18 | |||
| 3bdc692f5d | |||
| 1e81d2835d | |||
| c76645669d | |||
| 5f29e076e6 | |||
| c48ec26bc4 | |||
| 18d07463ab | |||
| 9f58cf7f58 | |||
| 40688feb88 | |||
| 2275c6aadd | |||
| 6e4f718fe0 | |||
| b19eb227b5 | |||
| f35dcbbeba | |||
| 6860dee286 | |||
| a93d58e119 | |||
| 6babd6976c | |||
| 468f5baed6 | |||
| 6a1c231fcb | |||
| 6b25e5b5e7 | |||
| bb231fbeb3 | |||
| cae04bc8d7 | |||
| 4fa83f1c51 | |||
| 15c9e8811d | |||
| be62f29fb9 | |||
| 439362bda4 | |||
| 1866008c84 | |||
| 4e8d3b8a9d | |||
| b21946500a | |||
| 8808da8af1 | |||
| 6ba0c4744e | |||
| f8a03f317b | |||
| 8de926b22f | |||
| eb70757671 | |||
| 0c82a72da5 |
@@ -0,0 +1,8 @@
|
||||
UPDATE ad SET competences = '{"competences" : [{ "id1" : "libelle 1"},{ "id2" : "libelle 2"},{ "id3" : "libelle 3" }]}' WHERE id =1;
|
||||
UPDATE ad SET competences = '{ "id1" : "libelle 1", "id2" : "libelle 2", "id3" : "libelle 3" }' WHERE id =1;
|
||||
UPDATE ad SET competences = '{ "id1" : "libelle 1" }' WHERE id =31;
|
||||
UPDATE ad SET competences = '{ "id2" : "libelle 2", "id3" : "libelle 3"}' WHERE id =29;
|
||||
SELECT id FROM "ad" WHERE competences::jsonb @> '{ "id1" : "libelle 1"}'::jsonb LIMIT 10;
|
||||
SELECT id FROM "ad" WHERE competences::jsonb ? 'id1' LIMIT 10;
|
||||
SELECT competences::jsonb @> '{ "id1" : "libelle 1"}'::jsonb FROM "ad" WHERE id=1 LIMIT 1;
|
||||
SELECT * FROM "ad" WHERE id = 1 or id=31 or id =29;
|
||||
@@ -1,6 +1,9 @@
|
||||
{% extends "base.html.twig" %}
|
||||
{% extends "basev2.html.twig" %}
|
||||
{% block menu %}
|
||||
|
||||
{% endblock %}
|
||||
{% block content %}
|
||||
<main id="content">
|
||||
<div class="container contentWrapper">
|
||||
<div class="row">
|
||||
<div class="col push-s3 s6">
|
||||
@@ -8,8 +11,10 @@
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{% endblock %}
|
||||
|
||||
{% block metarobot %}
|
||||
<meta name="robots" content="noindex,nofollow">
|
||||
<meta http-equiv="refresh" content="1;URL=/">
|
||||
{% endblock %}
|
||||
|
||||
+1
@@ -1,6 +1,7 @@
|
||||
{% trans_default_domain 'FOSUserBundle' %}
|
||||
|
||||
<div class="fos_user_user_show">
|
||||
Votre mot de passe a bien été modifié<br/>
|
||||
<p>{{ 'profile.show.username'|trans }}: {{ user.username }}</p>
|
||||
<p>{{ 'profile.show.email'|trans }}: {{ user.email }}</p>
|
||||
</div>
|
||||
|
||||
+2
@@ -1,7 +1,9 @@
|
||||
{% extends "base.html.twig" %}
|
||||
|
||||
{% trans_default_domain 'FOSUserBundle' %}
|
||||
{% block menu %}
|
||||
|
||||
{% endblock %}
|
||||
{% block content %}
|
||||
<div class="container contentWrapper">
|
||||
<div class="row">
|
||||
|
||||
+3
@@ -2,6 +2,9 @@
|
||||
|
||||
{% block title %}Talents Tube : Le 1er job board 100% vidéo{% endblock %}
|
||||
{% trans_default_domain 'FOSUserBundle' %}
|
||||
{% block menu %}
|
||||
|
||||
{% endblock %}
|
||||
{% block content %}
|
||||
<main id="content">
|
||||
<div class="container space-2 ">
|
||||
|
||||
+2
@@ -1,7 +1,9 @@
|
||||
{% extends "basetemporaire.html.twig" %}
|
||||
|
||||
{% trans_default_domain 'FOSUserBundle' %}
|
||||
{% block menu %}
|
||||
|
||||
{% endblock %}
|
||||
{% block content %}
|
||||
|
||||
<div class="container contentWrapper">
|
||||
|
||||
+6
-5
@@ -43,18 +43,19 @@
|
||||
{% endif %}
|
||||
<div class="js-form-message mb-3">
|
||||
<div class="input-field col s12">
|
||||
{% set label = 'user.cgu.label'|trans({'%link_start%' : '<a href="'~path('service_cgu')~'">', '%link_end%' : '</a>'}, 'messages') | raw %}
|
||||
{{ form_errors(form.cgu) }}
|
||||
{{ form_widget(form.cgu) }}
|
||||
{{ form_label(form.cgu) }}
|
||||
{# {{ form_label(form.cgu) }} #}
|
||||
<label>Je déclare avoir pris connaissance et accepté les termes et les <a target="_blank"
|
||||
href="/cgu">conditions générales d’utilisation</a></label>
|
||||
</div>
|
||||
</div>
|
||||
<div class="js-form-message mb-3">
|
||||
{# <div class="js-form-message mb-3">
|
||||
<div class="input-field col s12">
|
||||
<a href="/mentions-legales">Lire les conditions générales d'utilisations</a>
|
||||
<a href="/cgu">Lire les conditions générales d'utilisations</a>
|
||||
<br /><br />
|
||||
</div>
|
||||
</div>
|
||||
</div> #}
|
||||
<div class="js-form-message mb-3">
|
||||
<div class="input-field col s12">
|
||||
{{ form_rest(form) }}
|
||||
|
||||
@@ -1,17 +1,17 @@
|
||||
{% extends 'basev2.html.twig' %}
|
||||
|
||||
{% block title %}Talents Tube - Solution de recrutement en vidéo{% endblock %}
|
||||
{% block title %}Espace recruteur - Solution de recrutement en vidéo | Talents Tube{% endblock %}
|
||||
{% block meta %}
|
||||
<meta name="description" content="Vous souhaitez recruter en vidéo ? Talents Tube diffuse vos vidéos d’offres d’emploi et marque employeur pour attirer les meilleurs talents en vidéo.">
|
||||
|
||||
<meta name="twitter:card" content="summary">
|
||||
<meta name="twitter:site" content="@TalentsTube">
|
||||
<meta name="twitter:title" content="Talents Tube - Solution de recrutement en vidéo">
|
||||
<meta name="twitter:title" content="Espace recruteur - Solution de recrutement en vidéo | Talents Tube">
|
||||
<meta name="twitter:description" content="Vous souhaitez recruter en vidéo ? Talents Tube diffuse vos vidéos d’offres d’emploi et marque employeur pour attirer les meilleurs talents en vidéo.">
|
||||
<meta name="twitter:image" content="{{ absolute_url(asset('img/mail/logo-talents-tube.png')) }}">
|
||||
|
||||
{#Open Graph data pour le partage sur les réseaux sociaux (ex Facebook..)#}
|
||||
<meta property="og:title" content="Talents Tube - Solution de recrutement en vidéo" />
|
||||
<meta property="og:title" content="Espace recruteur - Solution de recrutement en vidéo | Talents Tube" />
|
||||
<meta property="og:type" content="article" />
|
||||
<meta property="og:image" content="{{ absolute_url(asset('img/mail/logo-talents-tube.png')) }}" />
|
||||
<meta property="og:description" content="Vous souhaitez recruter en vidéo ? Talents Tube diffuse vos vidéos d’offres d’emploi et marque employeur pour attirer les meilleurs talents en vidéo." />
|
||||
|
||||
+4
-3
@@ -60,9 +60,10 @@
|
||||
{{ form_widget(register_form.cgu) }}
|
||||
{% block form_label %}
|
||||
{% spaceless %}
|
||||
<label for="fos_user_registration_form_cgu">
|
||||
Je déclare avoir pris connaissance et accepté les termes et les <a target="_blank" href="{{ path("service_cgu") }}">conditions générales d’utilisation</a>
|
||||
</label>
|
||||
<label for="fos_user_registration_form_cgu">
|
||||
Je déclare avoir pris connaissance et accepté les termes et les <a target="_blank"
|
||||
href="{{ path("service_cgu") }}">conditions générales d’utilisation</a>
|
||||
</label>
|
||||
{% endspaceless %}
|
||||
{% endblock %}
|
||||
</div>
|
||||
|
||||
@@ -6,13 +6,13 @@
|
||||
|
||||
<meta name="twitter:card" content="summary">
|
||||
<meta name="twitter:site" content="@TalentsTube">
|
||||
<meta name="twitter:title" content="Talents Tube - Solution de recrutement en vidéo">
|
||||
<meta name="twitter:title" content="Espace recruteur - Solution de recrutement en vidéo | Talents Tube">
|
||||
<meta name="twitter:description"
|
||||
content="Vous souhaitez recruter en vidéo ? Talents Tube diffuse vos vidéos d’offres d’emploi et marque employeur pour attirer les meilleurs talents en vidéo.">
|
||||
<meta name="twitter:image" content="{{ absolute_url(asset('img/mail/logo-talents-tube.png')) }}">
|
||||
|
||||
{#Open Graph data pour le partage sur les réseaux sociaux (ex Facebook..)#}
|
||||
<meta property="og:title" content="Talents Tube - Solution de recrutement en vidéo" />
|
||||
<meta property="og:title" content="Espace recruteur - Solution de recrutement en vidéo | Talents Tube" />
|
||||
<meta property="og:type" content="article" />
|
||||
<meta property="og:image" content="{{ absolute_url(asset('img/mail/logo-talents-tube.png')) }}" />
|
||||
<meta property="og:description"
|
||||
@@ -22,7 +22,9 @@
|
||||
content="{{ url(app.request.attributes.get('_route'), app.request.attributes.get('_route_params')) }}" />
|
||||
|
||||
{% endblock %}
|
||||
{% block menu %}
|
||||
|
||||
{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
<main id="content">
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
{% extends 'base.html.twig' %}
|
||||
{% extends 'basetemporaire.html.twig' %}
|
||||
|
||||
{% block urlCanonical %}
|
||||
#!
|
||||
|
||||
@@ -196,11 +196,11 @@
|
||||
</trans-unit>
|
||||
<trans-unit id="profile.company.brandname">
|
||||
<source>profile.company.brandname</source>
|
||||
<target>Nom commercial</target>
|
||||
<target>Nom de votre entreprise</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="profile.company.businessname">
|
||||
<source>profile.company.businessname</source>
|
||||
<target>Raison social</target>
|
||||
<target>Raison sociale</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="profile.company.siren">
|
||||
<source>profile.company.siren</source>
|
||||
@@ -208,7 +208,7 @@
|
||||
</trans-unit>
|
||||
<trans-unit id="profile.company.size">
|
||||
<source>profile.company.size</source>
|
||||
<target>Taille de l'entreprise (nombre de personnes)</target>
|
||||
<target>Taille de l'entreprise</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="profile.company.description">
|
||||
<source>profile.company.description</source>
|
||||
|
||||
@@ -31,7 +31,6 @@
|
||||
{{ form_row(form.location_gmap) }}
|
||||
{{ form_row(form.beneficiaire) }}
|
||||
{{ form_row(form.description) }}
|
||||
{{ form_row(form.publicTag) }}
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
+286
@@ -0,0 +1,286 @@
|
||||
{% extends 'admin/base_admin.html.twig' %}
|
||||
{% block js %}
|
||||
{# <link rel="stylesheet" href="//cdn.datatables.net/1.10.16/css/jquery.dataTables.min.css">
|
||||
|
||||
<link rel="stylesheet" href="https://cdn.datatables.net/buttons/1.4.1/css/buttons.dataTables.min.css"> #}
|
||||
|
||||
<link rel="stylesheet" type="text/css" href="https://cdn.datatables.net/1.10.22/css/jquery.dataTables.min.css">
|
||||
<link rel="stylesheet" type="text/css" href="https://cdn.datatables.net/buttons/1.6.4/css/buttons.dataTables.min.css">
|
||||
{# <script type="text/javascript" language="javascript" src="https://code.jquery.com/jquery-3.5.1.js"></script>
|
||||
<script type="text/javascript" language="javascript" src="https://cdn.datatables.net/1.10.22/js/jquery.dataTables.min.js"></script>
|
||||
|
||||
<script type="text/javascript" language="javascript" src="https://cdn.datatables.net/buttons/1.6.4/js/dataTables.buttons.min.js"></script>
|
||||
<script type="text/javascript" language="javascript" src="https://cdn.datatables.net/buttons/1.6.4/js/buttons.flash.min.js"></script> #}
|
||||
|
||||
<script type="text/javascript" src="https://code.jquery.com/jquery-3.5.1.js"></script>
|
||||
<script type="text/javascript" src="https://cdn.datatables.net/1.10.22/js/jquery.dataTables.min.js"></script>
|
||||
<script type="text/javascript" src="https://cdn.datatables.net/buttons/1.6.4/js/dataTables.buttons.min.js"></script>
|
||||
<script type="text/javascript" language="javascript" src="https://cdnjs.cloudflare.com/ajax/libs/jszip/3.1.3/jszip.min.js"></script>
|
||||
<script type="text/javascript" language="javascript" src="https://cdnjs.cloudflare.com/ajax/libs/pdfmake/0.1.53/pdfmake.min.js"></script>
|
||||
<script type="text/javascript" language="javascript" src="https://cdnjs.cloudflare.com/ajax/libs/pdfmake/0.1.53/vfs_fonts.js"></script>
|
||||
<script type="text/javascript" language="javascript" src="https://cdn.datatables.net/buttons/1.6.4/js/buttons.html5.min.js"></script>
|
||||
|
||||
<script type="text/javascript" language="javascript" src="https://cdn.datatables.net/buttons/1.6.4/js/buttons.print.min.js"></script>
|
||||
|
||||
|
||||
|
||||
{# <script type="text/javascript" src="https://cdn.datatables.net/buttons/1.6.4/js/buttons.flash.min.js"></script>
|
||||
<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/jszip/3.1.3/jszip.min.js"></script>
|
||||
<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/pdfmake/0.1.53/pdfmake.min.js"></script>
|
||||
<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/pdfmake/0.1.53/vfs_fonts.js"></script>
|
||||
<script type="text/javascript" src="https://cdn.datatables.net/buttons/1.6.4/js/buttons.html5.min.js"></script>
|
||||
<script type="text/javascript" src="https://cdn.datatables.net/buttons/1.6.4/js/buttons.print.min.js"></script> #}
|
||||
|
||||
|
||||
{% endblock %}
|
||||
|
||||
{% 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 %}
|
||||
<style type="text/css">
|
||||
/* Hide default search box */
|
||||
.dataTables_filter {
|
||||
display: none;
|
||||
}
|
||||
|
||||
|
||||
</style>
|
||||
<div class="box box-primary">
|
||||
<div class="box-body">
|
||||
<table width="100%" class="table " style="background-color: #3c8dbc">
|
||||
<thead>
|
||||
<tr>
|
||||
<th colspan="5" class="text-center">RECHERCHE</th>
|
||||
|
||||
</tr>
|
||||
|
||||
</thead>
|
||||
<tr>
|
||||
<th width="4%"><input id='input1' type='text' class='form-control' placeholder='par id' style='font-family:Arial, FontAwesome; width:100%'/></th>
|
||||
|
||||
<th width="11%"><input id='input3' type='text' class='form-control' placeholder='par nom' style='font-family:Arial, FontAwesome; width:100%'/></th>
|
||||
<th width="11%"><input id='input4' type='text' class='form-control' placeholder='par prénom' style='font-family:Arial, FontAwesome; width:100%'/></th>
|
||||
<th width="25%"><input id='input5' type='text' class='form-control' placeholder='par entreprise / offre' style='font-family:Arial, FontAwesome; width:100%'/></th>
|
||||
|
||||
<th width="15%">
|
||||
<select id='input7'>
|
||||
<option value="sended">Envoyé</option>
|
||||
<option value="draft">Brouillon</option>
|
||||
</select>
|
||||
</th>
|
||||
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
<br/>
|
||||
<table id="towns_dt_table" width="100%" class="table table-hover table-bordered">
|
||||
{# Add a tfoot which will actually be used to place the individual search boxes #}
|
||||
<tfoot>
|
||||
<tr>
|
||||
<th width="4%">id</th>
|
||||
<th width="6%">Date d'envoi</th>
|
||||
<th width="11%">Nom</th>
|
||||
<th width="11%">Prénom</th>
|
||||
<th width="25%">Annonce / entreprise</th>
|
||||
<th width="28%">Vidéo</th>
|
||||
<th width="15%">Statut</th>
|
||||
<th width="10%">Actions</th>
|
||||
</tr>
|
||||
{# <tr>
|
||||
<th><input id='input1' type='text' class='form-control' placeholder='' style='font-family:Arial, FontAwesome; width:100%'/></th>
|
||||
<th></th>
|
||||
<th><input id='input3' type='text' class='form-control' placeholder='' style='font-family:Arial, FontAwesome; width:100%'/></th>
|
||||
<th><input id='input4' type='text' class='form-control' placeholder='' style='font-family:Arial, FontAwesome; width:100%'/></th>
|
||||
<th></th>
|
||||
<th><input id='input5' type='text' class='form-control' placeholder='' style='font-family:Arial, FontAwesome; width:100%'/></th>
|
||||
</tr> #}
|
||||
</tfoot>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Id</th>
|
||||
<th>Date d'envoi</th>
|
||||
<th>Nom</th>
|
||||
<th>Prénom</th>
|
||||
<th>Annonce / entreprise</th>
|
||||
<th>Vidéo</th>
|
||||
<th>Statut</th>
|
||||
<th>Actions</th>
|
||||
</tr>
|
||||
|
||||
</thead>
|
||||
<tbody></tbody>
|
||||
</table>
|
||||
|
||||
|
||||
{# <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>
|
||||
$(document).ready(function(){
|
||||
|
||||
// Add a text input to each footer cell
|
||||
var pos = 1;
|
||||
$('#towns_dt_table tfoot th').each( function () {
|
||||
var title = $(this).text();
|
||||
//$(this).html( "<input id='input" + pos + "' type='text' class='form-control' placeholder='' style='font-family:Arial, FontAwesome; width:100%'/>" );
|
||||
|
||||
pos ++;
|
||||
});
|
||||
|
||||
|
||||
|
||||
var table = $('#towns_dt_table').DataTable({
|
||||
|
||||
|
||||
buttons: [
|
||||
'copy', 'csv', 'excel', 'pdf', 'print'
|
||||
],
|
||||
|
||||
"columnDefs": [
|
||||
{ "name": "ad_id", "targets": 0 , "searchable": true, "orderable": true},
|
||||
{ "name": "date_envoi", "targets": 1 , "searchable": true, "orderable": true},
|
||||
{ "name": "nom", "targets": 2 , "searchable": true, "orderable": true},
|
||||
{ "name": "prenom", "targets": 3 , "searchable": true, "orderable": true},
|
||||
{ "name": "entreprise", "targets": 4, "searchable": true, "orderable": true },
|
||||
{ "name": "video", "targets": 5 },
|
||||
{ "name": "status", "targets": 6 , "searchable": true, "orderable": true},
|
||||
{ "name": "actions", "targets": 7 },
|
||||
],
|
||||
"processing": true,
|
||||
"serverSide": true,
|
||||
|
||||
"ajax": {
|
||||
"url": '{{ path('alimenterCandidatures') }}',
|
||||
"type": 'POST'
|
||||
},
|
||||
"paging" : true,
|
||||
"info" : true,
|
||||
"searching": true,
|
||||
"bFilter":true,
|
||||
"responsive": true,
|
||||
"pageLength": 10,
|
||||
"order": [[0, 'desc']],
|
||||
"language": {
|
||||
"url": "http://cdn.datatables.net/plug-ins/1.10.11/i18n/French.json"
|
||||
},
|
||||
|
||||
});
|
||||
|
||||
|
||||
|
||||
// Apply the search
|
||||
pos = 1;
|
||||
table.columns().every( function () {
|
||||
var that = this;
|
||||
|
||||
$("#input"+pos).on( 'keyup change', function () {
|
||||
if ( that.search() !== this.value )
|
||||
{
|
||||
that
|
||||
.search( this.value )
|
||||
.draw();
|
||||
}
|
||||
});
|
||||
pos++;
|
||||
});
|
||||
|
||||
$('#towns_dt_table_filter').hide();
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
});
|
||||
function changerStatut(value, id){
|
||||
var idAnswer = id;
|
||||
|
||||
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");
|
||||
$("#status_"+id).text(value);
|
||||
|
||||
}
|
||||
});
|
||||
}
|
||||
function verifierDelete(id){
|
||||
console.log(id);
|
||||
var r = confirm("Êtes vous sûr de supprimer cette candidature ?\nSupprimer cette candidature supprimera le média associé\n");
|
||||
if (r == true) {
|
||||
txt = "You pressed OK!";
|
||||
location.href = "/app_dev.php/admin/config/answer/"+id+"/delete";
|
||||
return true;
|
||||
} else {
|
||||
txt = "You pressed Cancel!";
|
||||
}
|
||||
console.log(txt);
|
||||
|
||||
}
|
||||
</script>
|
||||
|
||||
{% endblock %}
|
||||
@@ -15,10 +15,12 @@
|
||||
<link rel="stylesheet" href="{{ asset('admin/AdminLTE/dist/css/skins/skin-blue.min.css') }}">
|
||||
<link rel="stylesheet" href="{{ asset('admin/AdminLTE/plugins/datatables/dataTables.bootstrap.css') }}">
|
||||
<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">
|
||||
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/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 js %}
|
||||
|
||||
{% endblock %}
|
||||
{% block css %}
|
||||
|
||||
{% endblock %}
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<html lang="fr">
|
||||
|
||||
<head>
|
||||
<meta http-equiv="content-type" content="text/html;charset=UTF-8" />
|
||||
@@ -27,10 +27,22 @@
|
||||
type="text/css" />
|
||||
<!-- Please remove the file below for production: Contains demo classes -->
|
||||
<link class="main-stylesheet" href="{{ asset('dashboard/css/style.css') }}" rel="stylesheet" type="text/css" />
|
||||
<script type="text/javascript">window.$crisp=[];window.CRISP_WEBSITE_ID="08e9d301-ba14-4d69-8b1a-53685114c5af";(function(){d=document;s=d.createElement("script");s.src="https://client.crisp.chat/l.js";s.async=1;d.getElementsByTagName("head")[0].appendChild(s);})();</script>
|
||||
<!-- END PAGE LEVEL JS -->
|
||||
|
||||
<script src="{{ asset('dashboard/plugins/jquery/jquery-3.2.1.min.js') }}" type="text/javascript"></script>
|
||||
|
||||
{# <script type="text/javascript" src="http://code.jquery.com/jquery-3.2.1.min.js"></script> #}
|
||||
|
||||
{% block javascriptSupl %}
|
||||
{% endblock %}
|
||||
<!-- END PAGE LEVEL JS -->
|
||||
</head>
|
||||
|
||||
<body class="fixed-header dashboard menu-pin menu-behind">
|
||||
{{ include('admin/navigation_gauche.html.twig') }}
|
||||
{# {{ include('default/user_switch.html.twig') }} #}
|
||||
|
||||
{{ include('admin/navigation_gauche.html.twig')}} }}
|
||||
|
||||
|
||||
<!-- START PAGE-CONTAINER -->
|
||||
@@ -42,16 +54,29 @@
|
||||
{% block dashContent %}
|
||||
Dashboard Company
|
||||
{% endblock %}
|
||||
|
||||
|
||||
</div>
|
||||
|
||||
<!-- START COPYRIGHT -->
|
||||
<!-- START CONTAINER FLUID -->
|
||||
<!-- START CONTAINER FLUID -->
|
||||
<div class=" container-fluid container-fixed-lg footer">
|
||||
<div class="copyright sm-text-center">
|
||||
<p class="small-text no-margin pull-left sm-pull-reset">
|
||||
©2017-2021 Talents Tube
|
||||
</p>
|
||||
<p class="small no-margin pull-right sm-pull-reset">
|
||||
Besoin d'aide ? 02 30 05 06 31
|
||||
</p>
|
||||
<div class="clearfix"></div>
|
||||
</div>
|
||||
</div>
|
||||
<!-- END COPYRIGHT -->
|
||||
</div>
|
||||
|
||||
<!-- END PAGE CONTENT WRAPPER -->
|
||||
</div>
|
||||
<!-- END PAGE CONTAINER -->
|
||||
|
||||
|
||||
{% block javascripts %}
|
||||
{% block javascripts %}
|
||||
<script src="https://maps.googleapis.com/maps/api/js?key=AIzaSyDYV8IJGtIoWLfXJQQvIuDQ88n2aEuRgpg&libraries=places">
|
||||
</script>
|
||||
{% javascripts
|
||||
@@ -63,15 +88,18 @@
|
||||
{% endjavascripts %}
|
||||
|
||||
{% endblock %}
|
||||
|
||||
<!-- BEGIN VENDOR JS -->
|
||||
<script src="{{ asset('dashboard/plugins/pace/pace.min.js') }}" type="text/javascript"></script>
|
||||
<!-- A polyfill for browsers that don't support ligatures: remove liga.js if not needed-->
|
||||
<script src="{{ asset('dashboard/plugins/liga.js') }}" type="text/javascript"></script>
|
||||
<script src="{{ asset('dashboard/plugins/jquery/jquery-3.2.1.min.js') }}" type="text/javascript"></script>
|
||||
<script src="{{ asset('dashboard/plugins/modernizr.custom.js') }}" type="text/javascript"></script>
|
||||
|
||||
<script src="{{ asset('dashboard/plugins/modernizr.custom.js') }}" type="text/javascript"></script>
|
||||
<script src="{{ asset('dashboard/plugins/jquery-ui/jquery-ui.min.js') }}" type="text/javascript"></script>
|
||||
<script src="{{ asset('dashboard/plugins/popper/umd/popper.min.js') }}" type="text/javascript"></script>
|
||||
<script src="{{ asset('dashboard/plugins/bootstrap/js/bootstrap.min.js') }}" type="text/javascript"></script>
|
||||
|
||||
|
||||
<script src="{{ asset('dashboard/plugins/jquery/jquery-easy.js') }}" type="text/javascript"></script>
|
||||
<script src="{{ asset('dashboard/plugins/jquery-unveil/jquery.unveil.min.js') }}" type="text/javascript"></script>
|
||||
<script src="{{ asset('dashboard/plugins/jquery-ios-list/jquery.ioslist.min.js') }}" type="text/javascript"></script>
|
||||
@@ -93,6 +121,7 @@
|
||||
<script src="{{ asset('dashboard/plugins/rickshaw/rickshaw.min.js') }}"></script>
|
||||
<script src="{{ asset('dashboard/plugins/jquery-sparkline/jquery.sparkline.min.js') }}" type="text/javascript">
|
||||
</script>
|
||||
|
||||
<script src="{{ asset('dashboard/plugins/skycons/skycons.js') }}" type="text/javascript"></script>
|
||||
<script src="{{ asset('dashboard/plugins/quill/quill.min.js') }}" type="text/javascript"></script>
|
||||
<!-- END VENDOR JS -->
|
||||
@@ -105,10 +134,18 @@
|
||||
<script src="{{ asset('dashboard/js/scripts.js') }}" type="text/javascript"></script>
|
||||
<!-- END PAGE LEVEL JS -->
|
||||
<!-- END CORE TEMPLATE JS -->
|
||||
<!-- BEGIN PAGE LEVEL JS -->
|
||||
<script src="{{ asset('dashboard/js/dashboard.js') }}" type="text/javascript"></script>
|
||||
|
||||
|
||||
|
||||
<!-- BEGIN PAGE LEVEL JS -->
|
||||
<script src="{{ asset('dashboard/js/dashboard.js') }}" type="text/javascript"></script>
|
||||
{% block javascriptsSecondaire %}
|
||||
|
||||
{% endblock %}
|
||||
|
||||
{% block javascriptsEnd %}
|
||||
{% endblock %}
|
||||
|
||||
<!-- END PAGE LEVEL JS -->
|
||||
</body>
|
||||
|
||||
</html>
|
||||
</html>
|
||||
|
||||
@@ -22,7 +22,8 @@
|
||||
<th>ID</th>
|
||||
<th>Titre</th>
|
||||
<th>Utilisateur</th>
|
||||
<th>Status</th>
|
||||
<th>Annonce?</th>
|
||||
<th>Date de réponse</th>
|
||||
<th>action</th>
|
||||
</tr>
|
||||
</thead>
|
||||
@@ -30,11 +31,21 @@
|
||||
<tbody>
|
||||
{% for m in medias %}
|
||||
<tr>
|
||||
<td>{{ m.id }}</td>
|
||||
<td>{{ m.title }}</td>
|
||||
<td>{{ m.creator.firstname }} {{ m.creator.lastname }}</td>
|
||||
<td>{{ m.mediaid }}</td>
|
||||
<td><a href="{{ chemin }}{{ m.original_url }}" target="_blank">{{ m.title }}</a></td>
|
||||
<td>{{ m.firstname }} {{ m.lastname }} - ({{ m.email }}) </td>
|
||||
<td>
|
||||
<span class="label pull-right bg-orange">{{ m.status }}</span>
|
||||
{% if m.answerid %}
|
||||
{% if m.adtitle %}
|
||||
({{ m.adtitle }})
|
||||
{% else %}
|
||||
({{ m.ctitle }})
|
||||
{% endif %}
|
||||
{% else %}
|
||||
<b>Vidéo orpheline</b>
|
||||
{% endif %}</td>
|
||||
<td>
|
||||
<span class="label pull-right bg-orange">{{ m.sendtime }}</span>
|
||||
</td>
|
||||
<td>
|
||||
<a href="{{ path('admin_video_moderation',{'id':m.id}) }}">
|
||||
@@ -67,9 +78,11 @@
|
||||
{"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": 3, "searchable": true, "orderable": true},
|
||||
{"targets": 4, "searchable": true, "orderable": true, "className": "text-center"},
|
||||
{"targets": 5, "searchable": false, "orderable": false, "className": "text-center"},
|
||||
],
|
||||
"order": [[ 0, "desc" ]]
|
||||
});
|
||||
});
|
||||
</script>
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
<!-- BEGIN SIDEBPANEL-->
|
||||
<nav class="page-sidebar" data-pages="sidebar">
|
||||
<!-- BEGIN SIDEBAR MENU TOP TRAY CONTENT-->
|
||||
<div class="sidebar-overlay-slide from-top" id="appMenu">
|
||||
{# <div class="sidebar-overlay-slide from-top" id="appMenu">
|
||||
<div class="row">
|
||||
<div class="col-xs-6 no-padding">
|
||||
<a href="#" class="p-l-40"><img src="{{ asset('dashboard/img/demo/social_app.svg') }}" alt="socail">
|
||||
@@ -22,14 +22,14 @@
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div> #}
|
||||
<!-- END SIDEBAR MENU TOP TRAY CONTENT-->
|
||||
<!-- BEGIN SIDEBAR MENU HEADER-->
|
||||
<div class="sidebar-header">
|
||||
<img src="{{ asset('dashboard/img/logo_white.png') }}" alt="logo" class="brand"
|
||||
{# <img src="{{ asset('dashboard/img/logo_white.png') }}" alt="logo" class="brand"
|
||||
data-src="{{ asset('dashboard/img/logo_white.png') }}"
|
||||
data-src-retina="{{ asset('dashboard/img/logo_white_2x.png') }}" width="78" height="22">
|
||||
<div class="sidebar-header-controls">
|
||||
data-src-retina="{{ asset('dashboard/img/logo_white_2x.png') }}" width="78" height="22"> #}
|
||||
{# <div class="sidebar-header-controls">
|
||||
<button aria-label="Toggle Drawer" type="button"
|
||||
class="btn btn-icon-link invert sidebar-slide-toggle m-l-20 m-r-10" data-pages-toggle="#appMenu">
|
||||
<i class="pg-icon">chevron_down</i>
|
||||
@@ -39,7 +39,7 @@
|
||||
data-toggle-pin="sidebar">
|
||||
<i class="pg-icon"></i>
|
||||
</button>
|
||||
</div>
|
||||
</div> #}
|
||||
</div>
|
||||
<!-- END SIDEBAR MENU HEADER-->
|
||||
<!-- START SIDEBAR MENU -->
|
||||
@@ -57,51 +57,25 @@
|
||||
</span>
|
||||
</span>
|
||||
</li>
|
||||
|
||||
<li>
|
||||
<a href="javascript:;"><span class="principal">Entreprise</span>
|
||||
<span class=" arrow"></span></a>
|
||||
<span class="icon-thumbnail">
|
||||
<span class="material-icons">
|
||||
business
|
||||
</span>
|
||||
</span>
|
||||
<ul class="sub-menu">
|
||||
<li class="">
|
||||
<a href="{{ path('company_profile') }}">Profil de l'Entreprise</a>
|
||||
<li class=" ">
|
||||
<a href="{{ path('company_profile') }}">Profil de l'Entreprise</a>
|
||||
<span class="icon-thumbnail">
|
||||
<span class="material-icons">
|
||||
store_mall_directory
|
||||
</span>
|
||||
</span>
|
||||
</li>
|
||||
<li class="">
|
||||
<a href="{{ path('company_marque') }}">Vidéo marque employeur</a>
|
||||
<span class="icon-thumbnail">
|
||||
<span class="material-icons">
|
||||
store_mall_directory
|
||||
</span>
|
||||
</span>
|
||||
</li>
|
||||
<li class="">
|
||||
<a href="{{ path('users') }}">Utilisateurs</a>
|
||||
<span class="icon-thumbnail"><span class="material-icons">
|
||||
group
|
||||
</span>
|
||||
</span>
|
||||
</li>
|
||||
{# <li class="">
|
||||
<a href="{{ path('users') }}">Informations juridiques</a>
|
||||
<span class="icon-thumbnail">
|
||||
<span class="material-icons">
|
||||
gavel
|
||||
</span>
|
||||
|
||||
</span>
|
||||
</li> #}
|
||||
|
||||
</ul>
|
||||
</li>
|
||||
<li class="">
|
||||
<a href="{{ path('company_marque') }}">Marque employeur</a>
|
||||
<span class="icon-thumbnail">
|
||||
<span class="material-icons">
|
||||
videocam
|
||||
</span>
|
||||
</span>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
<li class="">
|
||||
<a href="{{ path('company_ad') }}">
|
||||
<span class="">Offres d'emploi</span>
|
||||
@@ -122,9 +96,17 @@
|
||||
</span>
|
||||
</span>
|
||||
</li>
|
||||
<li class=" ">
|
||||
<a href="{{ path('users') }}">Utilisateurs</a>
|
||||
<span class="icon-thumbnail">
|
||||
<span class="material-icons">
|
||||
group
|
||||
</span>
|
||||
</span>
|
||||
</li>
|
||||
<li class="">
|
||||
<a href="{{ path('company_my_account') }}">
|
||||
<span class="">Mes paramètres</span>
|
||||
<span class="">Paramètres</span>
|
||||
</a>
|
||||
<span class="icon-thumbnail">
|
||||
<span class="material-icons">
|
||||
@@ -132,12 +114,26 @@
|
||||
</span>
|
||||
</span>
|
||||
</li>
|
||||
|
||||
|
||||
{% if is_granted('ROLE_PREVIOUS_ADMIN') %}
|
||||
|
||||
<li class="">
|
||||
<a href="mailto:contact@talentstube.com">
|
||||
<span class="principal">Contacter Talents Tube</span>
|
||||
<a href="{{ path('admin_dashboard', {'_switch_user': '_exit'}) }}">
|
||||
<span class="principal">Se déconnecter</span>
|
||||
</a>
|
||||
<span class="icon-thumbnail"><i class="pg-icon">mail</i></span>
|
||||
|
||||
<span class="icon-thumbnail">
|
||||
<i class="pg-icon m-20">exit</i>
|
||||
</span>
|
||||
</li>
|
||||
<li class="">
|
||||
<small>
|
||||
(Connecté en tant que {{ app.user.firstname }} {{ app.user.lastname }})
|
||||
</small>
|
||||
</li>
|
||||
|
||||
{% endif %}
|
||||
|
||||
|
||||
</ul>
|
||||
|
||||
@@ -21,6 +21,9 @@
|
||||
<th class="col-md-2">Date de création</th>
|
||||
<th>Prénom - Nom</th>
|
||||
<th>Email</th>
|
||||
<th>Dernière connexion</th>
|
||||
<th>Validé</th>
|
||||
<th>Annonce?</th>
|
||||
<th class="col-md-1">Vidéos</th>
|
||||
<th class="col-md-1">A la une</th>
|
||||
<th>Action</th>
|
||||
@@ -29,12 +32,34 @@
|
||||
<tbody>
|
||||
{% for talent in t if talent.MainUser %}
|
||||
{% set user = talent.users|first %}
|
||||
{% set adId = talent.description|split(':') %}
|
||||
<tr>
|
||||
<td data-order="{{ talent.cTime|date('U') }}">{{ talent.cTime|date('d/m/Y') }}</td>
|
||||
<td>
|
||||
{{ user.firstname }} {{ user.lastname }}
|
||||
{{ user.firstname }} / {{ user.lastname }} - {% if talent.extra["phoneTalent"] is defined %} (Tel : {{ talent.extra["phoneTalent"] }}) {% endif %}
|
||||
</td>
|
||||
<td><a href="mailto:{{ user.email }}">{{ user.email }}</a></td>
|
||||
<td>
|
||||
{% if user.enabled == 1 %}
|
||||
{{ user.lastLogin|date('d-m-Y h:m') }}
|
||||
{% endif %}</td>
|
||||
<td>
|
||||
{% if user.enabled == 1 %}
|
||||
oui
|
||||
{% else %}
|
||||
non
|
||||
{% endif %}
|
||||
</td>
|
||||
<td> {% if adId|length > 1 %}
|
||||
{% if user.medias|length > 0 %}
|
||||
|
||||
{% else %}
|
||||
{% if adId[1] and adId[1] !="" %}
|
||||
<a href="https://www.talentstube.com/Offre/{{ adId[1]|replace({' ': ''}) }}-{{ adId[1] }}" target="_blank">Lien vers l'annonce avant inscription</a>
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
</td>
|
||||
<td>
|
||||
{% if user.medias|length > 0 %}
|
||||
{{ user.medias|length }}
|
||||
@@ -90,9 +115,12 @@
|
||||
{"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": true, "orderable": true, "className": "text-center"},
|
||||
{"targets": 5, "searchable": false, "orderable": false, "className": "text-center"},
|
||||
{"targets": 3, "searchable": true, "orderable": true},
|
||||
{"targets": 4, "searchable": true, "orderable": true},
|
||||
{"targets": 5, "searchable": true, "orderable": true},
|
||||
{"targets": 6, "searchable": true, "orderable": true, "className": "text-center"},
|
||||
{"targets": 7, "searchable": true, "orderable": true, "className": "text-center"},
|
||||
{"targets": 8, "searchable": false, "orderable": false, "className": "text-center"},
|
||||
],
|
||||
"order": [[0, "desc"]]
|
||||
});
|
||||
|
||||
@@ -1,9 +1,12 @@
|
||||
{% extends 'base.html.twig' %}
|
||||
{% extends 'basev2.html.twig' %}
|
||||
|
||||
{% block metarobot %}<meta name="robots" content="noindex,follow">{% endblock %}
|
||||
{% block metarobot %}
|
||||
<meta name="robots" content="noindex,follow">
|
||||
<link rel="canonical" href="https://www.talentstube.com/Offres" />
|
||||
{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
{% if typeObject == 'Ad' %}
|
||||
{# {% if typeObject == 'Ad' %}
|
||||
{% set subtitle = 'Candidature à l\'offre d\'emploi:' %}
|
||||
{% set title = object.title %}
|
||||
{% set route = "answer_create_ad_step2" %}
|
||||
@@ -11,20 +14,20 @@
|
||||
{% set subtitle = 'Candidature pour l\'entreprise :' %}
|
||||
{% set title = object.brandName %}
|
||||
{% set route = "answer_create_company_step2" %}
|
||||
{% endif %}
|
||||
{% endif %} #}
|
||||
|
||||
<div class="fluid-container bg-grey-3">
|
||||
<div class="container contentWrapper contentPage">
|
||||
<div class="row">
|
||||
<div class="col s12">
|
||||
{# <div class="col s12">
|
||||
<div class="col-content center-align m-t-20">
|
||||
<strong>{{ subtitle }}</strong>
|
||||
<h3 class="color-blue1 m-0 m-t-10">{{ title }}</h3>
|
||||
</div>
|
||||
</div>
|
||||
</div> #}
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col s12 m6 ">
|
||||
{# <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>
|
||||
@@ -40,13 +43,13 @@
|
||||
<a href="{{ path(route,{'id': object.id, 'type': 'import'}) }}" class="btn btn btn-default">Importer mon CV vidéo</a><br /><br />
|
||||
<a id="link-videotheque" href="{{ route_videotheque }}">Choisir une vidéo de ma vidéothèque</a>
|
||||
</div>
|
||||
</div>
|
||||
</div> #}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{% endblock %}
|
||||
{% block javascripts %}
|
||||
{{ parent() }}
|
||||
{# {{ parent() }}
|
||||
<script type="text/javascript">
|
||||
{% if mustLogin == true %}
|
||||
$('#link-videotheque').on('click',function(event){
|
||||
@@ -54,5 +57,5 @@
|
||||
$('#modal_login').modal('open');
|
||||
});
|
||||
{% endif %}
|
||||
</script>
|
||||
</script> #}
|
||||
{% endblock %}
|
||||
@@ -1,6 +1,15 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="fr">
|
||||
<head>
|
||||
<!-- Global site tag (gtag.js) - Google Analytics -->
|
||||
<script async src="https://www.googletagmanager.com/gtag/js?id=UA-98246968-7"></script>
|
||||
<script>
|
||||
window.dataLayer = window.dataLayer || [];
|
||||
function gtag(){dataLayer.push(arguments);}
|
||||
gtag('js', new Date());
|
||||
|
||||
gtag('config', 'UA-98246968-7');
|
||||
</script>
|
||||
<!-- Title -->
|
||||
<title>{% block title %}{% endblock %}</title>
|
||||
|
||||
@@ -25,7 +34,7 @@
|
||||
|
||||
<!-- CSS Space Template -->
|
||||
<link rel="stylesheet" href="{{ asset('v2/css/theme.css') }}">
|
||||
<script type="text/javascript"> window.$crisp=[];window.CRISP_WEBSITE_ID="78ec5756-1cd5-4f3f-b0db-cb408c8171da";(function(){ d=document;s=d.createElement("script"); s.src="https://client.crisp.chat/l.js"; s.async=1;d.getElementsByTagName("head")[0].appendChild(s);})(); </script>
|
||||
<script type="text/javascript"> window.$crisp=[];window.CRISP_WEBSITE_ID="08e9d301-ba14-4d69-8b1a-53685114c5af";(function(){ d=document;s=d.createElement("script"); s.src="https://client.crisp.chat/l.js"; s.async=1;d.getElementsByTagName("head")[0].appendChild(s);})(); </script>
|
||||
</head>
|
||||
<body>
|
||||
<!-- Google Tag Manager (noscript) -->
|
||||
@@ -47,5 +56,6 @@
|
||||
{% endblock %}
|
||||
{# {% include 'defaultv2/footer.html.twig' %} #}
|
||||
{{ include('FairlaneCookieConsentBundle::cookie-info.html.twig') }}
|
||||
|
||||
</body>
|
||||
</html>
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
<div class="inner">
|
||||
<!-- START BREADCRUMB -->
|
||||
<ol class="breadcrumb">
|
||||
<li class="breadcrumb-item"><a href="/">Accueil</a></li>
|
||||
<li class="breadcrumb-item"><a href="/entreprise/me/">Accueil</a></li>
|
||||
<li class="breadcrumb-item"><a href="{{ path('company_ad') }}">Offres d'emploi</a></li>
|
||||
<li class="breadcrumb-item"><a href="{{ path('company_ad_answer_list',{'id':ad.id}) }}">{{ ad.title }}
|
||||
</a></li>
|
||||
@@ -28,9 +28,221 @@
|
||||
'tab' : 2
|
||||
} %}
|
||||
{% endif %} #}
|
||||
<div class="row bg-bordered p-20">
|
||||
|
||||
|
||||
<!-- Modal 1 -->
|
||||
<div class="modal fade in bd-example-modal-lg" id="partageModal" tabindex="-1" role="dialog"
|
||||
aria-labelledby="partageModalLabel" aria-hidden="false" data-show="false">
|
||||
<div class="modal-dialog modal-lg" role="document">
|
||||
<div class="modal-content">
|
||||
<div class="modal-header">
|
||||
<h5 class="modal-title" id="partageModalLabel">Vous souhaitez partager les candidatures sélectionnées
|
||||
dans l’espace visiteurs ?</h5>
|
||||
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
|
||||
<span aria-hidden="true">×</span>
|
||||
</button>
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
<h5> </h5>
|
||||
<p>Pour transmettre les informations aux personnes de votre choix, nous vous invitons à copier-coller le
|
||||
texte présent dans l’encadré ci-dessous dans votre messagerie mail.</p>
|
||||
|
||||
<label class="h6 small d-block text-uppercase" for="exampleFormControlTextarea1">texte a copier</label>
|
||||
<textarea class="form-control" id="codeShare" rows="11">Bonjour,
|
||||
Dans le cadre du recrutement pour le poste de {{ ad.title }}, nous avons reçu plusieurs candidatures en vidéo.
|
||||
Parmi ces différentes candidatures, nous souhaitons vous partager notre sélection.
|
||||
Pour visionner les candidatures vidéo, cliquez sur le lien ci-dessous, puis saisissez le mot de passe indiqué.
|
||||
Lien : https://recruteur.talentstube.com/partage/{{ ad.id }}
|
||||
Mot de passe : ######
|
||||
Au plaisir d’échanger avec vous,
|
||||
</textarea>
|
||||
<br/>
|
||||
<p>* Les données collectées dans les candidatures vidéo sont strictement confidentielles et entrent dans le champ de la protection des données personnelles d’un candidat. Les vidéos peuvent être partagées uniquement dans le cadre du processus de recrutement.
|
||||
</p>
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
<button type="button" class="btn btn-secondary" data-dismiss="modal">Fermer</button>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Modal 2 -->
|
||||
<div class="modal fade in bd-example-modal-lg" id="decocheModal" tabindex="-1" role="dialog"
|
||||
aria-labelledby="decocheModalLabel" aria-hidden="false" data-show="false" data-backdrop="static">
|
||||
<div class="modal-dialog modal-lg" role="document">
|
||||
<div class="modal-content">
|
||||
<div class="modal-header">
|
||||
<h5 class="modal-title" id="decocheModalLabel">Cette candidature est actuellement partagée</h5>
|
||||
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
|
||||
<span aria-hidden="true">×</span>
|
||||
</button>
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
<h5> </h5>
|
||||
<p>En cliquant sur confirmer, cette candidature ne sera plus accessible dans l’espace visiteurs.</p>
|
||||
|
||||
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
<input type="hidden" id="caseRecocher">
|
||||
<button type="button" class="btn btn-secondary" data-dismiss="modal" onClick="annulerCheckbox()">Annuler</button>
|
||||
<button type="button" class="btn btn-secondary" data-dismiss="modal">Confirmer</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{#
|
||||
<a href="#" data-toggle="tooltip" title="Some tooltip text!">Hover over me</a>
|
||||
|
||||
<!-- Generated markup by the plugin -->
|
||||
<div class="tooltip bs-tooltip-top" role="tooltip">
|
||||
<div class="arrow"></div>
|
||||
<div class="tooltip-inner">
|
||||
Some tooltip text!
|
||||
</div>
|
||||
</div> #}
|
||||
|
||||
<div class="col-xl-12">
|
||||
<div class="card card-borderless col-xl-12 col-sm-12 p-b-20">
|
||||
<div class="row profil-candidature">
|
||||
<div class="col-xl-6 col-md-12 p-t-10">
|
||||
<h5>{{ ad.title }}</h5>
|
||||
<h6>Publiée le {{ ad.publishedAt|date("d/m/Y") }}</h6>
|
||||
</div>
|
||||
<div class="col-xl-6 col-md-12 p-t-20 text-right">
|
||||
<button type="button" class="btn btn-primary" disabled data-toggle="modal"
|
||||
data-target="#partageModal" id="partageCandidats">
|
||||
<a href="#" class="btn btn-primary" data-toggle="tooltip"
|
||||
title="Cochez une ou plusieurs candidatures avant de pouvoir les partager.">Partager les
|
||||
candidatures</a>
|
||||
</button>
|
||||
<!--<button type="button" aria-label="" class="btn btn-default btn-lg m-b-10">
|
||||
<span class="material-icons fs-16 m-r-5">delete</span>
|
||||
<span class="">Clôturer</span>
|
||||
</button>-->
|
||||
<a href="{{ path('company_ad_soft_edit', { 'id': ad.id }) }}" >
|
||||
<button type="button" aria-label="" class="btn btn-default btn-lg m-b-10">
|
||||
<span class="material-icons fs-16 m-r-5">create</span>
|
||||
<span class="">Éditer l'offre</span>
|
||||
</button>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
<div id="reponses" class="table-responsive m-t-20">
|
||||
<table class="table table-hover" id="basicTable">
|
||||
<thead>
|
||||
<tr>
|
||||
<!-- NOTE * : Inline Style Width For Table Cell is Required as it may differ from user to user
|
||||
Comman Practice Followed
|
||||
-->
|
||||
<th style="width: 1%;"></th>
|
||||
<th style="width: 10%;">Vidéo</th>
|
||||
<th style="width: 20%;">Nom prénom</th>
|
||||
<th style="width: 15%;">Date de reception </th>
|
||||
<th style="width: 20%;">Localisation </th>
|
||||
<th style="width: 20%;">Statut</th>
|
||||
<th class="width: 5%;">Actions</th>
|
||||
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{% for answer in answers %}
|
||||
<tr>
|
||||
<td>
|
||||
<input type="checkbox" id="answer_{{answer.id}}" name="answers" class="nav-trigger"
|
||||
onChange="verifierIsChecked({{answer.id}})" {% if answer.isShared %} checked
|
||||
{% endif %} />
|
||||
<label for="nav-trigger" class="navicon-button x">
|
||||
<div class="navicon"></div>
|
||||
</label>
|
||||
</td>
|
||||
<td>
|
||||
<a href="{{ path('company_answer_show',{'id':answer.id }) }}">
|
||||
{% if answer.video.thumbnails.0 is defined %}
|
||||
{% set img = answer.video.thumbnails.0.sizes.1.link %}
|
||||
{% else %}
|
||||
{% set img = " " %}
|
||||
{% endif %}
|
||||
<img src="{{ img }}">
|
||||
</a>
|
||||
</td>
|
||||
<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>
|
||||
{% if answer.user.getGeoloc %}
|
||||
{% for adress in answer.user.getGeoloc %}
|
||||
|
||||
{{ adress["locality"] }}, {{ adress["postal_code"] }}
|
||||
{% endfor %}
|
||||
{% else %}
|
||||
Non renseignée
|
||||
{% endif %}
|
||||
</td>
|
||||
|
||||
|
||||
<td>
|
||||
{% if answer.statusReponse =="EMBAUCHE" %}
|
||||
<span class="label label-success">Embauché</span>
|
||||
{% elseif answer.statusReponse =="REFUSE"%}
|
||||
<span class="label label-important">Refusé</span>
|
||||
{% elseif answer.statusReponse =="ENTRETIEN"%}
|
||||
<span class="label label-warning">Entretien programmé</span>
|
||||
{% elseif answer.statusReponse =="A_TRAITER"%}
|
||||
<span class="label label-info">À traiter</span>
|
||||
{% else %}
|
||||
<span class="label">Contacté</span>
|
||||
{% endif %}
|
||||
</td>
|
||||
|
||||
|
||||
<td class="v-align-middle">
|
||||
<a title="{{ad.title}}" href="{{ path('company_answer_show',{'id':answer.id }) }}">
|
||||
<i class="pg-icon">eye</i>
|
||||
</a>
|
||||
{# <a href="#" class="note-action c-pointer" data-func="add"
|
||||
data-answer="{{ answer.id }}">
|
||||
<i class="pg-icon">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="pg-icon">comment</i>
|
||||
</a>
|
||||
{% endfor %} #}
|
||||
</td>
|
||||
|
||||
</tr>
|
||||
{% endfor %}
|
||||
{% if answers|length == 0 %}
|
||||
<tr>
|
||||
<th colspan="7" class="text-center">Aucune candidature pour le moment</th>
|
||||
</tr>
|
||||
{% endif %}
|
||||
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
{# <div class="row bg-bordered p-20">
|
||||
|
||||
|
||||
|
||||
<!-- START CONTAINER FLUID -->
|
||||
<div class=" container-fluid container-fixed-lg bg-white">
|
||||
@@ -38,6 +250,21 @@
|
||||
<div class="card card-transparent">
|
||||
<div class="card-header ">
|
||||
<div class="card-title">Candidatures de l'offre {{ ad.title }}
|
||||
|
||||
<br /><br />
|
||||
<button type="button" class="btn btn-primary" disabled data-toggle="modal"
|
||||
data-target="#partageModal" id="partageCandidats">
|
||||
<a href="#" data-toggle="tooltip"
|
||||
title="Cochez une ou plusieurs candidatures avant de pouvoir les partager.">Partager les
|
||||
candidatures</a>
|
||||
</button>
|
||||
|
||||
<div class="tooltip bs-tooltip-top" role="tooltip">
|
||||
<div class="arrow"></div>
|
||||
<div class="tooltip-inner">
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="card-body">
|
||||
@@ -48,7 +275,7 @@
|
||||
<!-- NOTE * : Inline Style Width For Table Cell is Required as it may differ from user to user
|
||||
Comman Practice Followed
|
||||
-->
|
||||
|
||||
<th></th>
|
||||
<th>{{ 'profile.talent.lastname'|trans }} {{ 'profile.talent.firstname'|trans }}</th>
|
||||
<th>{{ 'global.datereception.label'|trans }}</th>
|
||||
<th>{{ 'ad.company.list.status'|trans }}</th>
|
||||
@@ -59,33 +286,41 @@
|
||||
|
||||
{% for answer in answers %}
|
||||
<tr>
|
||||
|
||||
<td >
|
||||
<a href="{{ path('company_answer_show',{'id':answer.id }) }}">{{ answer.user.lastname }}
|
||||
{{ answer.user.firstname }}</a>
|
||||
<td>
|
||||
<input type="checkbox" id="answer_{{answer.id}}" name="answers" class="nav-trigger"
|
||||
onChange="verifierIsChecked({{answer.id}})" {% if answer.isShared %} checked
|
||||
{% endif %} />
|
||||
<label for="nav-trigger" class="navicon-button x">
|
||||
<div class="navicon"></div>
|
||||
</label>
|
||||
</td>
|
||||
<td >
|
||||
<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>
|
||||
|
||||
|
||||
{% 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 %}
|
||||
{% if answer.isViewed %}
|
||||
{% if answer.isViewed.status == "DRAFT" %}
|
||||
<td>{{ 'VIEWED'|trans }}</td>
|
||||
{% endif %}
|
||||
|
||||
|
||||
{% else %}
|
||||
<td>{{ 'NEW'|trans }}</td>
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
|
||||
|
||||
<td class="v-align-middle">
|
||||
<a title="{{ad.title}}" href="{{ path('company_answer_show',{'id':answer.id }) }}">
|
||||
<i class="pg-icon">eye</i>
|
||||
</a>
|
||||
<a href="#" class="note-action c-pointer" data-func="add" data-answer="{{ answer.id }}">
|
||||
<a href="#" class="note-action c-pointer" data-func="add"
|
||||
data-answer="{{ answer.id }}">
|
||||
<i class="pg-icon">note</i>
|
||||
</a>
|
||||
{% for note in answer.notes %}
|
||||
@@ -95,11 +330,13 @@
|
||||
</a>
|
||||
{% endfor %}
|
||||
</td>
|
||||
|
||||
|
||||
</tr>
|
||||
{% endfor %}
|
||||
{% if answers|length == 0 %}
|
||||
<tr><th colspan="4" class="text-center">Aucune candidature pour le moment</th></tr>
|
||||
<tr>
|
||||
<th colspan="4" class="text-center">Aucune candidature pour le moment</th>
|
||||
</tr>
|
||||
{% endif %}
|
||||
|
||||
|
||||
@@ -112,8 +349,128 @@
|
||||
</div>
|
||||
<!-- END CONTAINER FLUID -->
|
||||
|
||||
</div>
|
||||
</div> #}
|
||||
|
||||
<div id="note-modal"></div>
|
||||
|
||||
|
||||
{% endblock %}
|
||||
|
||||
{% block javascriptsEnd %}
|
||||
<!-- BEGIN VENDOR JS -->
|
||||
|
||||
<script src="{{ asset('dashboard/plugins/bootstrap/js/bootstrap.min.js') }}" type="text/javascript"></script>
|
||||
|
||||
|
||||
<!-- END PAGE LEVEL JS -->
|
||||
<script type="text/javascript">
|
||||
function parcourirAllCheckbox() {
|
||||
var allCheckboxes = $("input[type=checkbox]");
|
||||
var allCheckboxes = $("input[type=checkbox]");
|
||||
var auMoinUneCheckboxCoche = false;
|
||||
// Put all the unique name attributes in an array.
|
||||
var checkboxCocheId= null;
|
||||
allCheckboxes.each(function () {
|
||||
var isChecked = $(this).prop('checked');
|
||||
if (isChecked == true) {
|
||||
auMoinUneCheckboxCoche = true;
|
||||
|
||||
var tabId =$(this).prop('id').split("_");
|
||||
checkboxCocheId = tabId[1];
|
||||
console.log(checkboxCocheId);
|
||||
}
|
||||
|
||||
});
|
||||
if (auMoinUneCheckboxCoche == true) {
|
||||
console.log("au moins un checkbox est coché");
|
||||
$("#partageCandidats").attr("disabled", false);
|
||||
} else {
|
||||
console.log("aucuncheckbox n'est coché");
|
||||
$("#partageCandidats").attr("disabled", true);
|
||||
}
|
||||
|
||||
return checkboxCocheId;
|
||||
|
||||
}
|
||||
|
||||
function annulerCheckbox(){
|
||||
//recuprer l'id de la checkbox
|
||||
var checkboxId = $("#caseRecocher").val();
|
||||
//$("#answer_" + checkboxId).prop(checked, true);
|
||||
document.getElementById("answer_" + checkboxId).checked = true;
|
||||
console.log("annuler action checkbox "+checkboxId);
|
||||
verifierIsChecked(checkboxId);
|
||||
}
|
||||
|
||||
function verifierIsChecked(id) {
|
||||
var auMoinUneCheckboxCoche = false;
|
||||
parcourirAllCheckbox();
|
||||
if($("#answer_" + id).prop('checked')==false){
|
||||
console.log("cette checkbox était cochée avant");
|
||||
//$('#decocheModal').modal('open');
|
||||
$('#decocheModal').modal('show');
|
||||
$("#caseRecocher").val(id);
|
||||
}
|
||||
//recuperer la valeur de la case coché
|
||||
// Appel Ajax pour modifier l'answer qui a l'id :id
|
||||
// Si la case est decocher mettre le champ is_checked à false
|
||||
// Sinon mettre à true
|
||||
|
||||
$.ajax({
|
||||
//L'URL de la requête
|
||||
url: "/anwser/share/" + id,
|
||||
//url: '{{ path("anwser_share", {"id":'+id+'}) }}',
|
||||
//La méthode d'envoi (type de requête)
|
||||
method: "GET",
|
||||
data: 'isShare=' + $("#answer_" + id).prop('checked'),
|
||||
//Le format de réponse attendu
|
||||
dataType: "json",
|
||||
})
|
||||
//Ce code sera exécuté en cas de succès - La réponse du serveur est passée à done()
|
||||
/*On peut par exemple convertir cette réponse en chaine JSON et insérer
|
||||
* cette chaine dans un div id="res"*/
|
||||
.done(function (response) {
|
||||
let data = JSON.stringify(response);
|
||||
//$("div#res").append(data);
|
||||
console.log(data);
|
||||
const obj = JSON.parse(data);
|
||||
console.log(obj.code);
|
||||
var texteMail = $("#codeShare").val();
|
||||
$("#codeShare").val(texteMail.replace('######', obj.code));
|
||||
})
|
||||
|
||||
//Ce code sera exécuté en cas d'échec - L'erreur est passée à fail()
|
||||
//On peut afficher les informations relatives à la requête et à l'erreur
|
||||
.fail(function (error) {
|
||||
console.log("La requête s'est terminée en échec. Infos : " + JSON.stringify(error));
|
||||
})
|
||||
|
||||
//Ce code sera exécuté que la requête soit un succès ou un échec
|
||||
.always(function () {
|
||||
console.log("Requête effectuée");
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
$(document)
|
||||
.ready(function () {
|
||||
console.log("ready");
|
||||
var id = parcourirAllCheckbox();
|
||||
//on recupere un id d'une checkbox coché pour lancer l'ajax et remplacé les caracteres ###### par le mot de passe
|
||||
verifierIsChecked(id);
|
||||
//initialize all modals!!
|
||||
$('.modal').modal({
|
||||
dismissible: true
|
||||
});
|
||||
$('#partageModal').modal('hide');
|
||||
$('#decocheModal').modal('hide');
|
||||
}
|
||||
);
|
||||
$(window).load(function() {
|
||||
$('#partageModal').modal('hide');
|
||||
$('#decocheModal').modal('hide');
|
||||
});
|
||||
</script>
|
||||
{% endblock %}
|
||||
@@ -0,0 +1,229 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="fr">
|
||||
<head>
|
||||
<!-- Global site tag (gtag.js) - Google Analytics -->
|
||||
<script async src="https://www.googletagmanager.com/gtag/js?id=UA-98246968-7"></script>
|
||||
<script>
|
||||
window.dataLayer = window.dataLayer || [];
|
||||
function gtag(){dataLayer.push(arguments);}
|
||||
gtag('js', new Date());
|
||||
|
||||
gtag('config', 'UA-98246968-7');
|
||||
</script>
|
||||
<!-- Title -->
|
||||
<title>{% block title %}{% endblock %}</title>
|
||||
|
||||
<!-- Required Meta Tags Always Come First -->
|
||||
<meta charset="utf-8">
|
||||
<meta name="robots" content="noindex,nofollow">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
|
||||
{% block meta %}
|
||||
{% endblock %}
|
||||
<!-- Google Fonts -->
|
||||
<link href="//fonts.googleapis.com/css?family=Roboto:300,400,500,700" rel="stylesheet">
|
||||
|
||||
<!-- CSS Implementing Plugins -->
|
||||
<link rel="stylesheet" href="{{ asset('v2/vendor/font-awesome/css/all.min.css') }}">
|
||||
<link rel="stylesheet" href="{{ asset('v2/vendor/hs-megamenu/src/hs.megamenu.css') }}">
|
||||
<link rel="stylesheet" href="{{ asset('v2/vendor/malihu-custom-scrollbar-plugin/jquery.mCustomScrollbar.css') }}">
|
||||
<link rel="stylesheet" href="{{ asset('v2/vendor/custombox/dist/custombox.min.css') }}">
|
||||
<link rel="stylesheet" href="{{ asset('v2/vendor/animate.css/animate.min.css') }}">
|
||||
<link rel="stylesheet" href="{{ asset('v2/vendor/slick-carousel/slick/slick.css') }}">
|
||||
<link rel="stylesheet" href="{{ asset('v2/vendor/cubeportfolio/css/cubeportfolio.min.css') }}">
|
||||
<link rel="stylesheet" href="{{ asset('v2/vendor/fancybox/jquery.fancybox.css') }}">
|
||||
|
||||
<!-- CSS Space Template -->
|
||||
<link rel="stylesheet" href="{{ asset('v2/css/theme.css') }}">
|
||||
<script type="text/javascript"> window.$crisp=[];window.CRISP_WEBSITE_ID="08e9d301-ba14-4d69-8b1a-53685114c5af";(function(){ d=document;s=d.createElement("script"); s.src="https://client.crisp.chat/l.js"; s.async=1;d.getElementsByTagName("head")[0].appendChild(s);})(); </script>
|
||||
</head>
|
||||
<body>
|
||||
|
||||
|
||||
{% block content %}
|
||||
|
||||
|
||||
|
||||
|
||||
<main id="content">
|
||||
<!-- Hero Section -->
|
||||
<div class="gradient-half-primary-v1">
|
||||
|
||||
|
||||
|
||||
|
||||
<div class="bg-img-hero" style="background-image: url('/v2/img/partage/candidature-offre-emploi-video.jpg');">
|
||||
<div class="container space-2 space-2-top--lg space-3-bottom--lg">
|
||||
<div class=" text-center mx-auto">
|
||||
<!-- Title -->
|
||||
<div class="mb-9">
|
||||
<h3 class="display-4 font-size-36--md-down text-white">Découvrez en vidéo les candidatures sélectionnées pour le poste de <br/><b>{{titreAnnonce}}</b></h3>
|
||||
|
||||
</div>
|
||||
<!-- End Title -->
|
||||
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!-- End Hero Section -->
|
||||
|
||||
<!-- Cubeportfolio -->
|
||||
<div class="container u-cubeportfolio space-2 space-3--lg">
|
||||
<!-- Filter -->
|
||||
{# <ul id="filterControls" class="list-inline cbp-l-filters-alignCenter mb-5">
|
||||
<li class="list-inline-item cbp-filter-item cbp-filter-item-active u-cubeportfolio__item" data-filter="*">All</li>
|
||||
<li class="list-inline-item cbp-filter-item u-cubeportfolio__item" data-filter=".branding">Branding</li>
|
||||
<li class="list-inline-item cbp-filter-item u-cubeportfolio__item" data-filter=".abstract">Abstract</li>
|
||||
<li class="list-inline-item cbp-filter-item u-cubeportfolio__item" data-filter=".graphic">Graphic</li>
|
||||
<li class="list-inline-item cbp-filter-item u-cubeportfolio__item" data-filter=".illustration">Illustration</li>
|
||||
</ul> #}
|
||||
<!-- End Filter -->
|
||||
{% if answers|length == 0 %}
|
||||
<div class="text-center">
|
||||
<h1>Aucune candidature pour le moment</h1>
|
||||
</div>
|
||||
{% endif %}
|
||||
<!-- Content -->
|
||||
<div class="cbp mb-9"
|
||||
data-controls="#filterControls"
|
||||
data-animation="quicksand"
|
||||
data-caption-animation="zoom"
|
||||
data-x-gap="30"
|
||||
data-y-gap="30"
|
||||
data-load-more-selector="#cubeLoadMore"
|
||||
data-load-more-action="click"
|
||||
data-load-items-amount="2"
|
||||
data-media-queries='[
|
||||
{"width": 1500, "cols": 3},
|
||||
{"width": 1100, "cols": 3},
|
||||
{"width": 800, "cols": 3},
|
||||
{"width": 580, "cols": 2},
|
||||
{"width": 300, "cols": 1}
|
||||
]'>
|
||||
|
||||
{% for answer in answers %}
|
||||
<!-- Item -->
|
||||
<div class="cbp-item branding">
|
||||
<div class="cbp-caption">
|
||||
<iframe src="https://player.vimeo.com/video/{{ answer.video.cdnUrl|replace({ "/videos/": ""}) }}"
|
||||
width="100%" height="100%" frameborder="0" webkitallowfullscreen mozallowfullscreen
|
||||
allowfullscreen></iframe>
|
||||
|
||||
</div>
|
||||
<div class="p-4 text-center">
|
||||
<h2 class="h5 mb-0">{{ answer.user.firstname }} {{ answer.user.lastname|slice(0, 1)|capitalize }}.</h2>
|
||||
{# <p class="small mb-0">by Tiberiu Neamu</p> #}
|
||||
</div>
|
||||
</div>
|
||||
<!-- End Item -->
|
||||
{% endfor %}
|
||||
|
||||
|
||||
|
||||
</div>
|
||||
<!-- End Content -->
|
||||
|
||||
<!-- Load More Button -->
|
||||
<div id="cubeLoadMore" class="text-center">
|
||||
{# <a href="../../assets/ajax/portfolio-grid-1/load-more.html" class="cbp-l-loadMore-link btn btn-dark btn-wide" rel="nofollow">
|
||||
<span class="cbp-l-loadMore-defaultText">Load More</span>
|
||||
<span class="cbp-l-loadMore-loadingText">Loading...</span>
|
||||
<span class="cbp-l-loadMore-noMoreLoading">No more works</span>
|
||||
</a> #}
|
||||
</div>
|
||||
<!-- End Load More Button -->
|
||||
</div>
|
||||
<!-- End Cubeportfolio -->
|
||||
</main>
|
||||
|
||||
|
||||
{% endblock %}
|
||||
|
||||
{% block javascriptsEnd %}
|
||||
<!-- JS Global Compulsory -->
|
||||
<script src="{{ asset('v2/vendor/jquery/dist/jquery.min.js') }}"></script>
|
||||
<script src="{{ asset('v2/vendor/jquery-migrate/dist/jquery-migrate.min.js') }}"></script>
|
||||
<script src="{{ asset('v2/vendor/popper.js/dist/umd/popper.min.js') }}"></script>
|
||||
<script src="{{ asset('v2/vendor/bootstrap/bootstrap.min.js') }}"></script>
|
||||
|
||||
<!-- JS Implementing Plugins -->
|
||||
<script src="{{ asset('v2/vendor/hs-megamenu/src/hs.megamenu.js') }}"></script>
|
||||
<script src="{{ asset('v2/vendor/jquery-validation/dist/jquery.validate.min.js') }}"></script>
|
||||
<script src="{{ asset('v2/vendor/malihu-custom-scrollbar-plugin/jquery.mCustomScrollbar.concat.min.js') }}"></script>
|
||||
<script src="{{ asset('v2/vendor/custombox/dist/custombox.min.js') }}"></script>
|
||||
<script src="{{ asset('v2/vendor/custombox/dist/custombox.legacy.min.js') }}"></script>
|
||||
<script src="{{ asset('v2/vendor/cubeportfolio/js/jquery.cubeportfolio.min.js') }}"></script>
|
||||
|
||||
<!-- JS Space -->
|
||||
<script src="{{ asset('v2/js/hs.core.js') }}"></script>
|
||||
<script src="{{ asset('v2/js/components/hs.header.js') }}"></script>
|
||||
<script src="{{ asset('v2/js/components/hs.unfold.js') }}"></script>
|
||||
<script src="{{ asset('v2/js/components/hs.validation.js') }}"></script>
|
||||
<script src="{{ asset('v2/js/helpers/hs.focus-state.js') }}"></script>
|
||||
<script src="{{ asset('v2/js/components/hs.malihu-scrollbar.js') }}"></script>
|
||||
<script src="{{ asset('v2/js/components/hs.modal-window.js') }}"></script>
|
||||
<script src="{{ asset('v2/js/components/hs.show-animation.js') }}"></script>
|
||||
<script src="{{ asset('v2/js/components/hs.cubeportfolio.js') }}"></script>
|
||||
<script src="{{ asset('v2/js/components/hs.go-to.js') }}"></script>
|
||||
|
||||
|
||||
|
||||
<!-- JS Plugins Init. -->
|
||||
<script>
|
||||
// initialization of google map
|
||||
{# function initMap() {
|
||||
$.HSCore.components.HSGMap.init('.js-g-map');
|
||||
} #}
|
||||
|
||||
$(document).on('ready', function () {
|
||||
// initialization of header
|
||||
$.HSCore.components.HSHeader.init($('#header'));
|
||||
|
||||
// initialization of unfold component
|
||||
$.HSCore.components.HSUnfold.init($('[data-unfold-target]'), {
|
||||
afterOpen: function () {
|
||||
if (!$('body').hasClass('IE11')) {
|
||||
$(this).find('input[type="search"]').focus();
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
// initialization of form validation
|
||||
$.HSCore.components.HSValidation.init('.js-validate', {
|
||||
rules: {
|
||||
confirmPassword: {
|
||||
equalTo: '#password'
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
// initialization of forms
|
||||
$.HSCore.helpers.HSFocusState.init();
|
||||
|
||||
// initialization of malihu scrollbar
|
||||
$.HSCore.components.HSMalihuScrollBar.init($('.js-scrollbar'));
|
||||
|
||||
// initialization of autonomous popups
|
||||
$.HSCore.components.HSModalWindow.init('[data-modal-target]', '.js-signup-modal', {
|
||||
autonomous: true
|
||||
});
|
||||
|
||||
// initialization of show animations
|
||||
$.HSCore.components.HSShowAnimation.init('.js-animation-link');
|
||||
|
||||
// initialization of cubeportfolio
|
||||
$.HSCore.components.HSCubeportfolio.init('.cbp');
|
||||
|
||||
// initialization of go to
|
||||
$.HSCore.components.HSGoTo.init('.js-go-to');
|
||||
|
||||
|
||||
});
|
||||
|
||||
|
||||
|
||||
</script>
|
||||
{% endblock %}
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,284 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="fr">
|
||||
|
||||
<head>
|
||||
<!-- Global site tag (gtag.js) - Google Analytics -->
|
||||
<script async src="https://www.googletagmanager.com/gtag/js?id=UA-98246968-7"></script>
|
||||
<script>
|
||||
window.dataLayer = window.dataLayer || [];
|
||||
|
||||
function gtag() {
|
||||
dataLayer.push(arguments);
|
||||
}
|
||||
gtag('js', new Date());
|
||||
|
||||
gtag('config', 'UA-98246968-7');
|
||||
</script>
|
||||
<!-- Title -->
|
||||
<title>{% block title %}{% endblock %}</title>
|
||||
|
||||
<!-- Required Meta Tags Always Come First -->
|
||||
<meta charset="utf-8">
|
||||
<meta name="robots" content="noindex,nofollow">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
|
||||
{% block meta %}
|
||||
{% endblock %}
|
||||
<!-- Google Fonts -->
|
||||
<link href="//fonts.googleapis.com/css?family=Roboto:300,400,500,700" rel="stylesheet">
|
||||
|
||||
<!-- CSS Implementing Plugins -->
|
||||
<link rel="stylesheet" href="{{ asset('v2/vendor/font-awesome/css/all.min.css') }}">
|
||||
<link rel="stylesheet" href="{{ asset('v2/vendor/hs-megamenu/src/hs.megamenu.css') }}">
|
||||
<link rel="stylesheet" href="{{ asset('v2/vendor/malihu-custom-scrollbar-plugin/jquery.mCustomScrollbar.css') }}">
|
||||
<link rel="stylesheet" href="{{ asset('v2/vendor/custombox/dist/custombox.min.css') }}">
|
||||
<link rel="stylesheet" href="{{ asset('v2/vendor/animate.css/animate.min.css') }}">
|
||||
<link rel="stylesheet" href="{{ asset('v2/vendor/slick-carousel/slick/slick.css') }}">
|
||||
<link rel="stylesheet" href="{{ asset('v2/vendor/cubeportfolio/css/cubeportfolio.min.css') }}">
|
||||
<link rel="stylesheet" href="{{ asset('v2/vendor/fancybox/jquery.fancybox.css') }}">
|
||||
<link class="main-stylesheet" href="{{ asset('dashboard/css/style.css') }}" rel="stylesheet" type="text/css" />
|
||||
<!-- CSS Space Template -->
|
||||
<link rel="stylesheet" href="{{ asset('v2/css/theme.css') }}">
|
||||
<script type="text/javascript">
|
||||
window.$crisp = [];
|
||||
window.CRISP_WEBSITE_ID = "08e9d301-ba14-4d69-8b1a-53685114c5af";
|
||||
(function () {
|
||||
d = document;
|
||||
s = d.createElement("script");
|
||||
s.src = "https://client.crisp.chat/l.js";
|
||||
s.async = 1;
|
||||
d.getElementsByTagName("head")[0].appendChild(s);
|
||||
})();
|
||||
</script>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
|
||||
|
||||
{% block content %}
|
||||
|
||||
<!-- ========== HEADER ========== -->
|
||||
<header id="header" class="u-header u-header--abs-top">
|
||||
<div class="u-header__section bg-transparent border-0">
|
||||
<div id="logoAndNav" class="container-fluid">
|
||||
<!-- Nav -->
|
||||
<nav class="navbar navbar-expand justify-content-between u-header__navbar py-3">
|
||||
<!-- Logo -->
|
||||
<div class="col-4 col-sm-6">
|
||||
<a class="navbar-brand u-header__navbar-brand" href="../home/index.html" aria-label="Space">
|
||||
|
||||
<img class="u-header__navbar-brand-default" src={{ asset('/v2/svg/logos/talents-tube-logo.svg') }} alt="Talents Tube">
|
||||
<img class="u-header__navbar-brand-mobile" src={{ asset('/v2/svg/logos/talents-tube-logo.svg') }} alt="Talents Tube">
|
||||
</a>
|
||||
</div>
|
||||
<!-- End Logo -->
|
||||
|
||||
<!-- End Button -->
|
||||
</nav>
|
||||
<!-- End Nav -->
|
||||
</div>
|
||||
</div>
|
||||
</header>
|
||||
<!-- ========== END HEADER ========== -->
|
||||
<main id="content">
|
||||
<!-- Hero Section -->
|
||||
<div class="bg-img-hero"
|
||||
style="background-image: url(/v2/img/partage/partage-candidature-video.jpg);">
|
||||
<div class="d-sm-flex align-items-sm-center height-100vh--sm">
|
||||
<div class="container text-center space-3-top space-2-bottom space-3-bottom--lg">
|
||||
<div class="w-lg-60 text-center mx-lg-auto fondBlanc">
|
||||
<form class="js-validate form-signin p-5">
|
||||
<!-- Logo -->
|
||||
<div class="text-center">
|
||||
|
||||
</div>
|
||||
<!-- End Logo -->
|
||||
|
||||
<!-- Title -->
|
||||
<div class="text-center">
|
||||
<h1 class="h3 mb-0">Voir les candidatures</h1>
|
||||
<p>Pour visionner la ou les candidatures, veuillez saisir le mot de passe qui vous a été communiqué.
|
||||
</p>
|
||||
</div>
|
||||
<!-- End Title -->
|
||||
|
||||
<!-- Input -->
|
||||
<div class="js-form-message mb-3">
|
||||
<div class="js-focus-state input-group form">
|
||||
<div class="input-group-prepend form__prepend">
|
||||
<span class="input-group-text form__text">
|
||||
<i class="fa fa-lock form__text-inner"></i>
|
||||
</span>
|
||||
</div>
|
||||
<input type="hidden" id="adId" name="adId" value="{{adId}}">
|
||||
<input type="password" class="form-control form__input" id="mdp" name="mdp" required placeholder="Saisissez votre mot de passe"
|
||||
aria-label="mdp" data-msg="Saisissez votre mot de passe" data-error-class="u-has-error"
|
||||
data-success-class="u-has-success">
|
||||
|
||||
</div>
|
||||
<div>
|
||||
{% if error %}
|
||||
<br/><span class="text-danger">Le mot de passe est incorrect</span>
|
||||
{% endif %}
|
||||
</div>
|
||||
</div>
|
||||
<!-- End Input -->
|
||||
|
||||
<!-- Input -->
|
||||
<div class="js-form-message mb-3">
|
||||
|
||||
</div>
|
||||
<!-- End Input -->
|
||||
|
||||
<div class="row mb-3">
|
||||
|
||||
</div>
|
||||
<div class="mb-3">
|
||||
<a href="#" onClick="verifierMdp()">
|
||||
<button type="button" class="btn btn-success">Valider</button>
|
||||
</a>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
<!-- End Countdown -->
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!-- End Hero Section -->
|
||||
</main>
|
||||
|
||||
|
||||
{% endblock %}
|
||||
|
||||
|
||||
{% block javascriptsEnd %}
|
||||
<!-- JS Global Compulsory -->
|
||||
<script src="{{ asset('v2/vendor/jquery/dist/jquery.min.js') }}"></script>
|
||||
<script src="{{ asset('v2/vendor/jquery-migrate/dist/jquery-migrate.min.js') }}"></script>
|
||||
<script src="{{ asset('v2/vendor/popper.js/dist/umd/popper.min.js') }}"></script>
|
||||
<script src="{{ asset('v2/vendor/bootstrap/bootstrap.min.js') }}"></script>
|
||||
|
||||
<!-- JS Implementing Plugins -->
|
||||
<script src="{{ asset('v2/vendor/hs-megamenu/src/hs.megamenu.js') }}"></script>
|
||||
<script src="{{ asset('v2/vendor/jquery-validation/dist/jquery.validate.min.js') }}"></script>
|
||||
<script src="{{ asset('v2/vendor/malihu-custom-scrollbar-plugin/jquery.mCustomScrollbar.concat.min.js') }}"></script>
|
||||
<script src="{{ asset('v2/vendor/custombox/dist/custombox.min.js') }}"></script>
|
||||
<script src="{{ asset('v2/vendor/custombox/dist/custombox.legacy.min.js') }}"></script>
|
||||
<script src="{{ asset('v2/vendor/cubeportfolio/js/jquery.cubeportfolio.min.js') }}"></script>
|
||||
|
||||
<!-- JS Space -->
|
||||
<script src="{{ asset('v2/js/hs.core.js') }}"></script>
|
||||
<script src="{{ asset('v2/js/components/hs.header.js') }}"></script>
|
||||
<script src="{{ asset('v2/js/components/hs.unfold.js') }}"></script>
|
||||
<script src="{{ asset('v2/js/components/hs.validation.js') }}"></script>
|
||||
<script src="{{ asset('v2/js/helpers/hs.focus-state.js') }}"></script>
|
||||
<script src="{{ asset('v2/js/components/hs.malihu-scrollbar.js') }}"></script>
|
||||
<script src="{{ asset('v2/js/components/hs.modal-window.js') }}"></script>
|
||||
<script src="{{ asset('v2/js/components/hs.show-animation.js') }}"></script>
|
||||
<script src="{{ asset('v2/js/components/hs.cubeportfolio.js') }}"></script>
|
||||
<script src="{{ asset('v2/js/components/hs.go-to.js') }}"></script>
|
||||
|
||||
|
||||
|
||||
<!-- JS Plugins Init. -->
|
||||
<script>
|
||||
// initialization of google map
|
||||
{
|
||||
|
||||
function initMap() {
|
||||
$.HSCore.components.HSGMap.init('.js-g-map');
|
||||
}
|
||||
}
|
||||
|
||||
$(document).on('ready', function () {
|
||||
// initialization of header
|
||||
$.HSCore.components.HSHeader.init($('#header'));
|
||||
|
||||
// initialization of unfold component
|
||||
$.HSCore.components.HSUnfold.init($('[data-unfold-target]'), {
|
||||
afterOpen: function () {
|
||||
if (!$('body').hasClass('IE11')) {
|
||||
$(this).find('input[type="search"]').focus();
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
// initialization of form validation
|
||||
$.HSCore.components.HSValidation.init('.js-validate', {
|
||||
rules: {
|
||||
confirmPassword: {
|
||||
equalTo: '#password'
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
// initialization of forms
|
||||
$.HSCore.helpers.HSFocusState.init();
|
||||
|
||||
// initialization of malihu scrollbar
|
||||
$.HSCore.components.HSMalihuScrollBar.init($('.js-scrollbar'));
|
||||
|
||||
// initialization of autonomous popups
|
||||
$.HSCore.components.HSModalWindow.init('[data-modal-target]', '.js-signup-modal', {
|
||||
autonomous: true
|
||||
});
|
||||
|
||||
// initialization of show animations
|
||||
$.HSCore.components.HSShowAnimation.init('.js-animation-link');
|
||||
|
||||
// initialization of cubeportfolio
|
||||
$.HSCore.components.HSCubeportfolio.init('.cbp');
|
||||
|
||||
// initialization of go to
|
||||
$.HSCore.components.HSGoTo.init('.js-go-to');
|
||||
|
||||
|
||||
});
|
||||
</script>
|
||||
|
||||
<script type="text/javascript">
|
||||
function verifierMdp(){
|
||||
$.ajax({
|
||||
//L'URL de la requête
|
||||
url: '{{ path("connectionpartage") }}',
|
||||
//url: 'http://localhost/app_dev.php/connectionpartage',
|
||||
//La méthode d'envoi (type de requête)
|
||||
method: "GET",
|
||||
data: 'adId=' + $("#adId").val()+"&mdp="+$("#mdp").val(),
|
||||
//Le format de réponse attendu
|
||||
dataType: "json",
|
||||
})
|
||||
//Ce code sera exécuté en cas de succès - La réponse du serveur est passée à done()
|
||||
/*On peut par exemple convertir cette réponse en chaine JSON et insérer
|
||||
* cette chaine dans un div id="res"*/
|
||||
.done(function (response) {
|
||||
//let data = JSON.stringify(response)JSON.stringify(response);
|
||||
//$("div#res").append(data);=
|
||||
var retour =JSON.stringify(response);
|
||||
console.log(response);
|
||||
|
||||
var url = '{{ path("anwser_share_show", {"id": "id"}) }}';
|
||||
url = url.replace("id", $("#adId").val());
|
||||
window.location.replace(url);
|
||||
|
||||
})
|
||||
|
||||
//Ce code sera exécuté en cas d'échec - L'erreur est passée à fail()
|
||||
//On peut afficher les informations relatives à la requête et à l'erreur
|
||||
.fail(function (error) {
|
||||
//alert(error)
|
||||
console.log("La requête s'est terminée en échec. Infos : " + JSON.stringify(error));
|
||||
|
||||
})
|
||||
|
||||
//Ce code sera exécuté que la requête soit un succès ou un échec
|
||||
.always(function () {
|
||||
console.log("Requête effectuée");
|
||||
});
|
||||
}
|
||||
|
||||
</script>
|
||||
{% endblock %}
|
||||
</body>
|
||||
|
||||
</html>
|
||||
@@ -1,6 +1,23 @@
|
||||
{# {% extends 'company/base_dashboard_company.html.twig' %} #}
|
||||
{% extends 'admin/base_dashboard.html.twig' %}
|
||||
{% block javascriptSupl %}
|
||||
<style>
|
||||
.saisie thead tr th,
|
||||
.saisie tbody tr td,
|
||||
.saisie tbody tr td *:not(.dropdown-default) .saisie tr td {
|
||||
overflow: visible;
|
||||
|
||||
}
|
||||
|
||||
.modalCompetences {
|
||||
height: 600px;
|
||||
}
|
||||
</style>
|
||||
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/corejs-typeahead/1.3.1/bloodhound.min.js" type="text/javascript">
|
||||
</script>
|
||||
<script src="{{ asset('dashboard/plugins/typeahead/typeahead.bundle.js') }}" type="text/javascript"></script>
|
||||
{% endblock %}
|
||||
{% block dashContent %}
|
||||
<!-- START JUMBOTRON -->
|
||||
<div class="jumbotron" data-pages="parallax">
|
||||
@@ -8,237 +25,693 @@
|
||||
<div class="inner">
|
||||
<!-- START BREADCRUMB -->
|
||||
<ol class="breadcrumb">
|
||||
<li class="breadcrumb-item"><a href="/">Accueil</a></li>
|
||||
<li class="breadcrumb-item"><a href="/entreprise/me/">Accueil</a></li>
|
||||
<li class="breadcrumb-item"><a href="{{ path('company_ad') }}">Offres d'emploi</a></li>
|
||||
|
||||
|
||||
</ol>
|
||||
<!-- END BREADCRUMB -->
|
||||
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!-- END JUMBOTRON -->
|
||||
|
||||
|
||||
<!-- MODALS-->
|
||||
|
||||
<!-- Modal 1 -->
|
||||
<div class="modal fade bd-example-modal-lg" id="competencesModal" tabindex="-1" role="dialog"
|
||||
aria-labelledby="competencesModalLabel" aria-hidden="false" data-show="false">
|
||||
<div class="modal-dialog modal-lg" role="document">
|
||||
<div class="modal-content">
|
||||
<div class="modal-header">
|
||||
<h5 class="modal-title" id="competencesModalLabel">Souhaitez-vous sélectionner le métier <span
|
||||
class="metierPopup"></span>?</h5>
|
||||
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
|
||||
<span aria-hidden="true">×</span>
|
||||
</button>
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
<h5> </h5>
|
||||
<p>
|
||||
|
||||
Si vous aviez précédemment sélectionné des compétences en lien avec l'ancien métier de rattachement,
|
||||
celles-ci seront remplacées par les nouvelles compétences, correspondant au métier <span
|
||||
class="metierPopup"></span>.
|
||||
</p>
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
<button type="button" class="btn btn-secondary" data-dismiss="modal">Annuler</button>
|
||||
<button type="button" class="btn btn-secondary" data-dismiss="modal"
|
||||
onclick="chargerCompetences();">Sélectionner</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<!-- Modal 2 -->
|
||||
<div class="modal fade modalCompetences" id="ajoutCompetencesModal" tabindex="-1" role="dialog"
|
||||
aria-labelledby="ajoutCompetencesModalLabel" aria-hidden="false" data-show="false">
|
||||
<div class="modal-dialog modal-lg" role="document">
|
||||
<div class="modal-content">
|
||||
<div class="modal-header">
|
||||
<h6 class="modal-title">Sélectionnez les compétences recherchées pour le poste à pourvoir </h6>
|
||||
<h7 class="modal-title">Vous pouvez sélectionner jusqu’à 10 compétences à afficher dans votre offre
|
||||
d’emploi. </h7>
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
|
||||
{# <p>Etes vous sur de charger les compétences du métier <span id="metierPopup"></span></p> #}
|
||||
<div class="card card-default">
|
||||
<div class="card-body">
|
||||
<div class="scrollable">
|
||||
<div class="demo-card-scrollable">
|
||||
|
||||
|
||||
<div id="competencesAdPopup"></div>
|
||||
|
||||
</div>
|
||||
</div><br />
|
||||
<div id="competencesAdMessagePopup" class="text-danger"></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
<button type="button" id="ajouterCompetenceButtonMdal" class="btn btn-secondary" data-dismiss="modal"
|
||||
onclick="">Ajouter ces compétences</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!-- FIN MODALS-->
|
||||
|
||||
<!-- START CONTAINER FLUID -->
|
||||
<div class=" container-fluid container-fixed-lg">
|
||||
<div id="rootwizard" class="m-t-50">
|
||||
<div class="col-lg-8 bloc-header">
|
||||
<div class="card card-default container">
|
||||
<div class="card-body">
|
||||
<div class="row" style="min-height:10rem;">
|
||||
<div class="col-8">
|
||||
<h4 class="header-title" style="font-size:2em;line-height:1.5em;">Création d'une offre d'emploi
|
||||
vidéo</h4>
|
||||
<p>Pour trouver le bon profil, renseignez et personnalisez votre annonce. <br>Plus votre annonce
|
||||
est précise et attractive, plus les candidatures seront ciblées.</p>
|
||||
</div>
|
||||
<div class="col-4"
|
||||
style="background-repeat: no-repeat; background-image: url('https://blog.talentstube.com/wp-content/uploads/2021/02/creer-offre-emploi-video.svg');background-size: contain;background-position: center;">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div id="rootwizard" class="col-lg-8 m-t-50">
|
||||
{% if type is defined and type == 'update' %}
|
||||
{% include 'company/ad_stepsV2.html.twig' with {'tab':1, 'type':'update'} %}
|
||||
{% include 'company/ad_stepsV2.html.twig' with {'tab':1, 'type':'update'} %}
|
||||
{% else %}
|
||||
{% include 'company/ad_stepsV2.html.twig' with {'tab':1} %}
|
||||
{% include 'company/ad_stepsV2.html.twig' with {'tab':1} %}
|
||||
{% endif %}
|
||||
|
||||
|
||||
<div class="tab-content">
|
||||
{{ form_start(form, {'attr': {'class': ''}}) }}
|
||||
|
||||
<div class="tab-pane padding-20 sm-no-padding active slide-left" id="tab1">
|
||||
<div class="row row-same-height">
|
||||
<div class="col-md-5 b-r b-dashed b-grey sm-b-b">
|
||||
<div class="padding-30 sm-padding-5 sm-m-t-15 m-t-50">
|
||||
<i class="material-icons hint-text">info</i>
|
||||
<h2>Etape 1 : Je crée une annonce</h2>
|
||||
<p>Pour trouver le bon profil, renseignez et personnalisez votre annonce.
|
||||
Plus votre annonce est précise et attractive, plus les candidatures seront ciblées.
|
||||
Afin de créer votre annonce, renseignez l’ensemble des champs relatifs au poste proposé.</p>
|
||||
{# <p class="small hint-text">Below is a sample page for your cart , Created using pages design
|
||||
UI Elementes</p> #}
|
||||
|
||||
<div class="col-md">
|
||||
<h4>À propos du poste</h4>
|
||||
<br>
|
||||
{% if form.title is defined%}
|
||||
<div class="form-group form-group-default required">
|
||||
{# <label for="ad_title" class="required active">Intitulé du poste</label><input type="text"
|
||||
id="ad_title" name="ad[title]" required="required" placeholder="Ex: Commercial (H/F)"
|
||||
class="form-control"> #}
|
||||
{{ form_row(form.title) }}
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-7">
|
||||
<div class="padding-30 sm-padding-5">
|
||||
|
||||
<table class="table table-condensed ">
|
||||
{% if form_errors(form) %}
|
||||
<tr>
|
||||
<td class="col-lg-12 col-md-12 col-sm-12 ">
|
||||
|
||||
<span class="red-text text-darken-2">{{ form_errors(form) }}</span>
|
||||
|
||||
{% endif %}
|
||||
{% if form.reference is defined%}
|
||||
<div class="form-group form-group-default required">
|
||||
{# <label for="ad_reference" class="required active">Référence de l'offre
|
||||
d'emploi</label><input type="text" id="ad_reference" name="ad[reference]"
|
||||
required="required" placeholder="Ex : BTH567" class="form-control"> #}
|
||||
{{ form_row(form.reference) }}
|
||||
</div>
|
||||
{% endif %}
|
||||
<div class="form-group form-group-default required" style="min-height:250px;">
|
||||
{# <label for="ad_description" class="required active">Description du poste</label>
|
||||
<textarea id="ad_description" name="ad[description]" required="required"
|
||||
class="form-control"
|
||||
placeholder="Décrivez le poste, les missions, le profil recherché..."></textarea> #}
|
||||
{{ form_row(form.description) }}
|
||||
</div>
|
||||
<div class="form-group form-group-default required">
|
||||
{# <label for="ad_location_gmap" class="required active">Localisation du poste</label><input
|
||||
type="text" id="ad_location_gmap" name="ad[location_gmap]" required="required" value=""
|
||||
class="form-control pac-target-input"
|
||||
placeholder="Ex : 3 Rue Louis de Broglie, Vannes, France" autocomplete="off"> #}
|
||||
{{ form_row(form.location_gmap) }}
|
||||
{{ form_row(form.location) }}
|
||||
</div>
|
||||
{# <input type="hidden" id="ad_location" name="ad[location]" value="null"> #}
|
||||
<br>
|
||||
<h6>Organisation cliente (facultatif)</h6>
|
||||
<div class="form-group form-group-default">
|
||||
{# <label for="ad_beneficiaire" class="active">Nom de l'organisation</label>
|
||||
<input type="text" id="ad_beneficiaire" name="ad[beneficiaire]" placeholder=""
|
||||
class="form-control"> #}
|
||||
{{ form_row(form.beneficiaire) }}
|
||||
</div>
|
||||
<p class="fs-12 bold">Vous souhaitez recruter pour l'un de vos clients ? Veuillez renseigner le
|
||||
champ ci-dessus</p>
|
||||
<br>
|
||||
<h4>Critères de l'offre d'emploi</h4>
|
||||
<br>
|
||||
<div class="form-group form-group-default required">
|
||||
{# <label for="ad_contract_type" class="required">Type de contrat:</label>
|
||||
<select id="ad_contract_type" name="ad[contract_type]" class="form-control">
|
||||
<option value="CDI">CDI</option>
|
||||
<option value="CDD">CDD</option>
|
||||
<option value="Apprentissage">Apprentissage</option>
|
||||
<option value="professionnalisation">Contrat de professionnalisation</option>
|
||||
<option value="Stage">Stage</option>
|
||||
<option value="Indépendant">Indépendant</option>
|
||||
<option value="Interim">Interim</option>
|
||||
</select> #}
|
||||
{{ form_row(form.contract_type) }}
|
||||
</div>
|
||||
<div class="form-group form-group-default disabled" id="ad_duree_contrat_div">
|
||||
{# <label for="ad_duree_contrat" class="active">Durée du contrat en mois</label>
|
||||
<input type="number" id="ad_duree_contrat" name="ad[duree_contrat]" value="0"
|
||||
class="form-control" placeholder="Ex : 6" min="0" max="36" disabled=""> #}
|
||||
{{ form_row(form.duree_contrat) }}
|
||||
</div>
|
||||
<div class="form-group form-group-default required">
|
||||
{# <label for="ad_temps_type" class="required">Type d'emploi</label>
|
||||
<select id="ad_temps_type" name="ad[temps_type]" class="form-control">
|
||||
<option value="FULL_TIME">Temps plein </option>
|
||||
<option value="PART_TIME">Temps partiel </option>
|
||||
<option value="MIX_TIME">Temps plein ou temps partiel</option>
|
||||
</select> #}
|
||||
{{ form_row(form.temps_type) }}
|
||||
</div>
|
||||
<div class="form-group form-group-default disabled" id="ad_nombre_heure_div">
|
||||
{# <label for="ad_nombre_heure" class="active">Temps de travail (Le nombre saisi correspond au
|
||||
nombre d'heures/semaine.)</label>
|
||||
<input type="number" id="ad_nombre_heure" name="ad[nombre_heure]" value="0"
|
||||
class="form-control" placeholder="Ex : 20" min="0" max="35" disabled=""> #}
|
||||
{{ form_row(form.nombre_heure) }}
|
||||
</div>
|
||||
<div class="form-group form-group-default required">
|
||||
{# <label for="ad_teletravail" class="required">Possibilité de faire du Télétravail?</label>
|
||||
<select id="ad_teletravail" name="ad[teletravail]" class="form-control">
|
||||
<option value="tele_occasionel">Occasionnel </option>
|
||||
<option value="tele_partiel">Partiel </option>
|
||||
<option value="tele_total">Total</option>
|
||||
<option value="tele_non">Non</option>
|
||||
</select> #}
|
||||
{{ form_row(form.teletravail) }}
|
||||
</div>
|
||||
|
||||
<br>
|
||||
<h4 class="no-margin p-b-5">Compétences recherchées</h4>
|
||||
<br>
|
||||
<div class="col bg-contrast-lower">
|
||||
<br>
|
||||
<table>
|
||||
<tr class='bg-contrast-lower'>
|
||||
<td class="col-lg-12 col-md-12 col-sm-12 bg-contrast-lower">
|
||||
<h3 class="no-margin p-b-5">Compétences recherchées</h3>
|
||||
<br />
|
||||
Recherchez le métier de rattachement le plus proche de l’intitulé de poste
|
||||
que vous avez saisi.
|
||||
|
||||
|
||||
</button>
|
||||
|
||||
</td>
|
||||
</tr>
|
||||
{% endif %}
|
||||
<tr>
|
||||
<td class="col-lg-12 col-md-12 col-sm-12 ">
|
||||
{{ form_row(form.reference) }}
|
||||
<tr class='bg-contrast-lower'>
|
||||
<td class="col-lg-12 col-md-12 col-sm-12 bg-contrast-lower">
|
||||
<table class='saisie'>
|
||||
<tr class='saisie'>
|
||||
<td class='saisie'>
|
||||
<label for="saisie" class="required">Métier de
|
||||
rattachement</label><br />
|
||||
<input class="typeahead form-control sample-typehead tt-input"
|
||||
id="saisie" type="text" placeholder="Saisir un métier"
|
||||
autocomplete="off" spellcheck="false" dir="auto"
|
||||
style="position: relative; vertical-align: top; background-color: transparent;">
|
||||
<br />
|
||||
<input type="hidden" name="id_appellation_temporaire"
|
||||
id="id_appellation_temporaire">
|
||||
<input type="hidden" name="metier_temporaire"
|
||||
id="metier_temporaire">
|
||||
<input type="hidden" name="competences_origine"
|
||||
id="competences_origine">
|
||||
<br />Le métier de rattachement sert uniquement à vous proposer des
|
||||
compétences
|
||||
et ne sera pas affiché sur votre offre d’emploi.
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="col-lg-12 col-md-12 col-sm-12 ">
|
||||
{{ form_row(form.title) }}
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="col-lg-12 col-md-12 col-sm-12">
|
||||
{{ form_row(form.beneficiaire) }}
|
||||
<br/>
|
||||
Vous souhaitez recruter pour l'un de vos clients, renseignez ce champ
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="col-lg-12 col-md-12 col-sm-12">
|
||||
{{ form_row(form.location_gmap) }}
|
||||
{{ form_row(form.location) }}
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="col-lg-12 col-md-12 col-sm-12">
|
||||
{{ form_row(form.description) }}
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="col-lg-12 col-md-12 col-sm-12">
|
||||
{{ form_row(form.contract_type) }}
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="col-lg-12 col-md-12 col-sm-12">
|
||||
{{ form_row(form.status) }}
|
||||
</td>
|
||||
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="col-lg-12 col-md-12 col-sm-12">
|
||||
{{ form_row(form.publicTag) }}
|
||||
</td>
|
||||
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="col-lg-12 col-md-12 col-sm-12 ">
|
||||
<button aria-label="" type="submit" class="btn btn-primary btn-cons btn-animated from-left pull-right"
|
||||
type="button">
|
||||
<span>{% if type is defined and type == 'update' %}Sauvegarde et étape suivante {% else %}Je crée mon annonce{% endif %}</span>
|
||||
<span class="hidden-block">
|
||||
<i class="material-icons fs-16">videocam</i>
|
||||
</span>
|
||||
</button>
|
||||
{# <button class="btn btn-default" type="submit">Je crée mon annonce!</button> #}
|
||||
</td>
|
||||
|
||||
</tr>
|
||||
|
||||
</table>
|
||||
|
||||
|
||||
<table class="table table-condensed ">
|
||||
<tr class='bg-contrast-lower'>
|
||||
<td class="col-lg-12 col-md-12 col-sm-12 bg-contrast-lower">
|
||||
<div id="competencesAd"></div><br />
|
||||
<div id="competencesAdMessage" class="text-danger">Veuillez choisir un métier de
|
||||
rattachement pour votre annonce.</div><br />
|
||||
<div id="loadingDiv">Patientez...</div><br />
|
||||
<div class="text-center" id="competencesButtonAd">
|
||||
<button type="button" class="btn btn-info btn-lg" data-toggle="modal"
|
||||
data-target="#ajoutCompetencesModal" id="ajoutCompetences">
|
||||
Ajouter des compétences
|
||||
</button>
|
||||
<input type="hidden" id="nbCompetences">
|
||||
<span id="nbCompetencesText"></span>
|
||||
</div>
|
||||
</td>
|
||||
{{ form_row(form.appellationId) }}
|
||||
{{ form_row(form.appellationLibelle) }}
|
||||
{{ form_row(form.codeRome) }}
|
||||
</tr>
|
||||
|
||||
{# <tr>
|
||||
<td class="col-lg-12 col-md-12 col-sm-12">
|
||||
{{ form_row(form.status) }}
|
||||
</td>
|
||||
|
||||
</tr> #}
|
||||
|
||||
|
||||
|
||||
|
||||
</table>
|
||||
</div>
|
||||
<br>
|
||||
|
||||
<button aria-label="" type="submit"
|
||||
class="btn btn-lg btn-primary btn-cons btn-animated from-left" id="saveAdButton"
|
||||
disabled="">
|
||||
<span>Suivant</span>
|
||||
<span class="hidden-block">
|
||||
<i class="material-icons tab-icon">videocam</i>
|
||||
</span>
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
{{ form_end(form) }}
|
||||
<div class="tab-pane slide-left padding-20 sm-no-padding disabled" id="tab2">
|
||||
<div class="row row-same-height">
|
||||
<div class="col-md-5 b-r b-dashed b-grey ">
|
||||
<div class="padding-30 sm-padding-5 sm-m-t-15 m-t-50">
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-7">
|
||||
<div class="padding-30 sm-padding-5">
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="tab-pane slide-left padding-20 sm-no-padding disabled" id="tab3">
|
||||
<div class="row row-same-height">
|
||||
<div class="col-md-5 b-r b-dashed b-grey ">
|
||||
<div class="padding-30 sm-padding-5 sm-m-t-15 m-t-50">
|
||||
<h2>We Secured Your Line</h2>
|
||||
<p>Below is a sample page for your cart , Created using pages design UI Elementes</p>
|
||||
<p class="small hint-text">Below is a sample page for your cart , Created using pages design
|
||||
UI Elementes</p>
|
||||
<table class="table table-condensed">
|
||||
<tr>
|
||||
<td class=" col-md-9">
|
||||
<span class="m-l-10 font-montserrat fs-11 all-caps">Webarch UI Framework</span>
|
||||
<span class="m-l-10 ">Dashboard UI Pack</span>
|
||||
</td>
|
||||
<td class=" col-md-3 text-right">
|
||||
<span>Qty 1</span>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class=" col-md-9">
|
||||
<span class="m-l-10 font-montserrat fs-11 all-caps">Pages UI Framework</span>
|
||||
<span class="m-l-10 ">Next Gen UI Pack</span>
|
||||
</td>
|
||||
<td class=" col-md-3 text-right">
|
||||
<span>Qty 1</span>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td colspan="2" class=" col-md-3 text-right">
|
||||
<h4 class="text-primary no-margin font-montserrat">$27</h4>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
<p class="small">Invoice are issued on the date of despatch. Payment terms: Pre-orders:
|
||||
within 10 days of invoice date with 4% discount, from the 11th to the 30th day net.
|
||||
Re-orders: non-reduced stock items are payable net after 20 days. </p>
|
||||
<p class="small">By pressing Pay Now You will Agree to the Payment <a href="#">Terms &
|
||||
Conditions</a></p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-7">
|
||||
<div class="padding-30 sm-padding-5">
|
||||
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="padding-20 sm-padding-5 sm-m-b-20 sm-m-t-20 bg-white clearfix">
|
||||
{# <ul class="pager wizard no-style">
|
||||
<li class="next">
|
||||
<button aria-label="" class="btn btn-primary btn-cons btn-animated from-left pull-right"
|
||||
type="button">
|
||||
<span>Je crée mon annonce</span>
|
||||
<span class="hidden-block">
|
||||
<i class="material-icons fs-16">local_shipping</i>
|
||||
</span>
|
||||
</button>
|
||||
</li>
|
||||
<li class="next finish hidden">
|
||||
<button aria-label="" class="btn btn-primary btn-cons btn-animated from-left pull-right"
|
||||
type="button">
|
||||
<span>Finish</span>
|
||||
<span class="hidden-block">
|
||||
<i class="material-icons fs-16">settings</i>
|
||||
</span>
|
||||
</button>
|
||||
</li>
|
||||
<li class="previous first hidden">
|
||||
<button aria-label="" class="btn btn-default btn-cons btn-animated from-left pull-right"
|
||||
type="button">
|
||||
<span>First</span>
|
||||
<span class="hidden-block">
|
||||
<i class="material-icons fs-16">settings</i>
|
||||
</span>
|
||||
</button>
|
||||
</li>
|
||||
<li class="previous">
|
||||
<button aria-label="" class="btn btn-default btn-cons btn-animated from-left pull-right"
|
||||
type="button">
|
||||
<span>Previous</span>
|
||||
<span class="hidden-block">
|
||||
<i class="material-icons fs-14">settings</i>
|
||||
</span>
|
||||
</button>
|
||||
</li>
|
||||
</ul> #}
|
||||
</div>
|
||||
<div class="wizard-footer padding-20 bg-contrast-low">
|
||||
<p class="small hint-text pull-left no-margin">
|
||||
|
||||
</p>
|
||||
<div class="pull-right">
|
||||
|
||||
</div>
|
||||
<div class="clearfix"></div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!-- END CONTAINER FLUID -->
|
||||
|
||||
{% endblock %}
|
||||
|
||||
{% block javascriptsSecondaire %}
|
||||
<script type="application/javascript">
|
||||
//Methode permettant d'afficher le bloc nb d'heure si est en temps partiel
|
||||
function afficherTempsType() {
|
||||
if ($("#ad_temps_type").val() == "PART_TIME") {
|
||||
//$("#ligneNbHeure").show();
|
||||
$("#ad_nombre_heure").prop("disabled", false);
|
||||
$("#ad_nombre_heure_div").removeClass("disabled");
|
||||
} else {
|
||||
//$("#ligneNbHeure").hide().prop('required',false) ;;
|
||||
$("#ad_nombre_heure").prop("disabled", true);
|
||||
$("#ad_nombre_heure_div").addClass("disabled");
|
||||
}
|
||||
}
|
||||
|
||||
//Methode permettant d'afficher le bloc durée de contrat si le contrat est un CDI
|
||||
function afficherDureeContrat() {
|
||||
console.log("type de contrat =" + $("#ad_contract_type").val());
|
||||
if ($("#ad_contract_type").val() == "CDD") {
|
||||
//$("#ligneDureeContrat").show();
|
||||
$("#ad_duree_contrat").prop("disabled", false);
|
||||
$("#ad_duree_contrat_div").removeClass("disabled");
|
||||
} else {
|
||||
//$("#ligneDureeContrat").hide().prop('required',false) ;
|
||||
$("#ad_duree_contrat").prop("disabled", true);
|
||||
$("#ad_duree_contrat_div").addClass("disabled");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
$("#ad_temps_type").change(function () {
|
||||
afficherTempsType();
|
||||
});
|
||||
|
||||
$("#ad_contract_type").change(function () {
|
||||
afficherDureeContrat();
|
||||
});
|
||||
|
||||
//methode qui permet de générer le json des competences.
|
||||
// c'est le champ ad_competences qui sert à l'enregistrement en base
|
||||
function genererJson() {
|
||||
var competences = "";
|
||||
//competences = [];
|
||||
var nbCompetencesSelect = 0;
|
||||
//on parcourt toutes les checkbox cochées
|
||||
$(":checkbox:checked").map(function () {
|
||||
//on recuperer l'input car l'id du champ est formaté comme suit competence_ ou competencepopup_
|
||||
var input = this.id.split('_');
|
||||
// on ne ored=nd que les input de la page pricnipale (pas ceux de la popup)
|
||||
if (input[0] == "competence") {
|
||||
var retour = this.value.split('_');
|
||||
//var competence = [retour[0], parseInt(retour[1])];
|
||||
console.log(this.value);
|
||||
//competences.push(competence);
|
||||
//on remplace la virgule par un esapce car sinon bug (les compétences sont séparés par une virgule)
|
||||
var chaine = this.value.replace(",", " ");
|
||||
//On limite a 10 compétences, au dela, on les enregistre pas dans le champ ad_competences
|
||||
if (nbCompetencesSelect < 11) {
|
||||
competences += chaine + ",";
|
||||
nbCompetencesSelect++;
|
||||
}
|
||||
|
||||
$("#nbCompetencesText").html(nbCompetencesSelect + " compétences sélectionnées");
|
||||
$("#ajouterCompetenceButtonMdal").html("Ajouter (+" + nbCompetencesSelect + ")");
|
||||
$("#nbCompetences").val(nbCompetencesSelect);
|
||||
//return competence;
|
||||
}
|
||||
|
||||
}).get();
|
||||
// on renseigne le champ ad_competences
|
||||
$("#ad_competences").val(competences);
|
||||
//Gestion des erreurs si aucune compétence
|
||||
if (nbCompetencesSelect == 0) {
|
||||
$("#nbCompetencesText").html("");
|
||||
$("#competencesAdMessage").html(
|
||||
"Vous devez sélectionner au minimum une compétence "
|
||||
);
|
||||
$("#competencesAdMessagePopup").html(
|
||||
"Vous devez sélectionner au minimum une compétence "
|
||||
);
|
||||
$("#ajouterCompetenceButtonMdal").html("Ajouter (+0)");
|
||||
$("#ajouterCompetenceButtonMdal").hide();
|
||||
$("#saveAdButton").prop("disabled", true);
|
||||
} else if (nbCompetencesSelect > 9) {
|
||||
//Gestion des erreurs si plusde 10 compétences
|
||||
$("#saveAdButton").prop("disabled", false);
|
||||
$("#competencesAdMessage").html(
|
||||
"Vous avez atteint le nombre maximum de compétences. "
|
||||
);
|
||||
$("#competencesAdMessagePopup").html(
|
||||
"Vous avez atteint le nombre maximum de compétences. "
|
||||
);
|
||||
if (nbCompetencesSelect > 10) {
|
||||
$("#ajouterCompetenceButtonMdal").hide();
|
||||
|
||||
}
|
||||
} else {
|
||||
//cas standards, on reinitialise les champs a vide
|
||||
|
||||
$("#competencesAdMessage").html(" ");
|
||||
$("#competencesAdMessagePopup").html(" ");
|
||||
$("#saveAdButton").prop("disabled", false);
|
||||
$("#ajouterCompetenceButtonMdal").show();
|
||||
}
|
||||
console.log("valeur saiisie");
|
||||
if ($("#saisie").val() == "" || !$("#saisie").val()) {
|
||||
$("#competencesAdMessage").html(
|
||||
"Veuillez choisir un métier de rattachement pour votre annonce. "
|
||||
);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
$(document).ready(function () {
|
||||
afficherTempsType();
|
||||
afficherDureeContrat();
|
||||
$("#saveAdButton").prop("disabled", true);
|
||||
//ad_appellationId
|
||||
//ad_appellationLibelle
|
||||
//ad_competences
|
||||
// renseignement des champs temporaires (champ caché)
|
||||
$("#id_appellation_temporaire").val($("#ad_appellationId").val());
|
||||
$("#metier_temporaire").val($("#ad_appellationLibelle").val());
|
||||
// renseignement du champ visible (init du métier)
|
||||
$("#saisie").val($("#ad_appellationLibelle").val());
|
||||
$("#competences_origine").val($("#ad_competences").val());
|
||||
if ($("#ad_competences").val() != 'null') {
|
||||
$("#saveAdButton").prop("disabled", false);
|
||||
}
|
||||
//charger les compétences en fonction du métier d'origine
|
||||
chargerCompetences("init");
|
||||
//cocher les cases par rapport aux compétences d'origine
|
||||
|
||||
});
|
||||
</script>
|
||||
<script>
|
||||
$(document)
|
||||
.ready(function () {
|
||||
// Construction du champ typeahead d'auto compléetion de métier
|
||||
$("#competencesButtonAd").hide();
|
||||
$('#loadingDiv').hide();
|
||||
var metiers = new Bloodhound({
|
||||
datumTokenizer: Bloodhound.tokenizers.whitespace,
|
||||
queryTokenizer: Bloodhound.tokenizers.whitespace,
|
||||
remote: {
|
||||
// Ajax qui appelle getAppellionsMetier (API TT qui appelle APi pole emploi)
|
||||
url: '/app_dev.php/api/getAppelationsLibelle',
|
||||
wildcar: '%QUERY',
|
||||
filter: function (metiers) {
|
||||
return $.map(metiers, function (metier) {
|
||||
//console.log(metier);
|
||||
return {
|
||||
metier_id: metier.code,
|
||||
metier_libelle: metier.libelle
|
||||
}
|
||||
})
|
||||
},
|
||||
prepare: function (query, settings) {
|
||||
//ing%20agro
|
||||
//query = query.replace(" ", "%20");
|
||||
settings.url += '?q=' + query;
|
||||
return settings;
|
||||
}
|
||||
},
|
||||
|
||||
});
|
||||
metiers.initialize();
|
||||
// Initializing the typeahead
|
||||
$('#saisie').typeahead({
|
||||
hint: true,
|
||||
highlight: true
|
||||
}, {
|
||||
name: 'metiers',
|
||||
source: metiers.ttAdapter(),
|
||||
display: 'metier_libelle',
|
||||
limit: 10,
|
||||
templates: {
|
||||
suggestion: function (data) {
|
||||
//comment sont formaté les suggestion de l'auto completion
|
||||
$(".tt-dataset-metiers").show();
|
||||
var chaine = data.metier_libelle.replace("'", "\\'");
|
||||
return '<div onclick="chargerDonneesTemp(' + data.metier_id + ',\'' +
|
||||
chaine +
|
||||
'\')" data-toggle="modal" data-target="#competencesModal" id="competences"><a href="#" >' +
|
||||
data.metier_libelle +
|
||||
'</a></div>'
|
||||
},
|
||||
footer: function (query) {
|
||||
//return '<div class="text-center">Plus de résultats :' + query.query + '</div>';
|
||||
},
|
||||
empty: function (context) {
|
||||
// cas ou l'on ne trpouve rien
|
||||
$("#competencesAdMessage").html(
|
||||
" Aucun résultat ne correspond à votre recherche. <br/>Saisissez un autre mot clé pour trouver votre métier de rattachement."
|
||||
);
|
||||
return '<div class="text-center">Aucun résultat</div>';
|
||||
}
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
//methode qui charge métier temporaire (en attente validation de la popup)
|
||||
//En effet, on demande a l'utilsiateur s'il est sur. C'est pour ca qu'on a a ces champs temporaires
|
||||
function chargerDonneesTemp(codeRome, libelleMetier) {
|
||||
$("#id_appellation_temporaire").val(codeRome);
|
||||
console.log(codeRome);
|
||||
$("#metier_temporaire").val(libelleMetier);
|
||||
$(".metierPopup").text(libelleMetier);
|
||||
console.log(libelleMetier);
|
||||
}
|
||||
//Charger les compétences, code Rome, d'un métier
|
||||
//appel de l'api TT getDetailAppelaltion qui appelle une autre Api Pole emploi
|
||||
|
||||
function chargerCompetences(type) {
|
||||
$.ajax({
|
||||
//L'URL de la requête
|
||||
url: "/app_dev.php/api/getDetailAppelation",
|
||||
//url: '{{ path("anwser_share", {"id":'+id+'}) }}',
|
||||
//La méthode d'envoi (type de requête)
|
||||
method: "GET",
|
||||
data: 'q=' + $("#id_appellation_temporaire").val(),
|
||||
//Le format de réponse attendu
|
||||
dataType: "json",
|
||||
beforeSend: function () { // Before we send the request, remove the .hidden class from the spinner and default to inline-block.
|
||||
$('#loadingDiv').show();
|
||||
console.log("début loading");
|
||||
},
|
||||
})
|
||||
//Ce code sera exécuté en cas de succès - La réponse du serveur est passée à done()
|
||||
/*On peut par exemple convertir cette réponse en chaine JSON et insérer
|
||||
* cette chaine dans un div id="res"*/
|
||||
.done(function (response) {
|
||||
let data = JSON.stringify(response);
|
||||
const obj = JSON.parse(data);
|
||||
//chargement du code ROme
|
||||
$("#ad_codeRome").val(obj.metier.code);
|
||||
//Passage du l'id appelation et de son libelle temporaire
|
||||
$("#ad_appellationId").val($("#id_appellation_temporaire").val());
|
||||
$("#ad_appellationLibelle").val($("#metier_temporaire").val());
|
||||
$('.metierAncienPopup').text($("#metier_temporaire").val());
|
||||
//Init des champs de compétences
|
||||
$("#competencesAd").text("");
|
||||
$("#competencesAdPopup").text("");
|
||||
$("#competencesAdMessage").html("");
|
||||
//parcours de l'objet json renvoyé par l'api (competence de base)
|
||||
obj.competencesDeBase.forEach(function (object) {
|
||||
// Pour chaque compétences, on crée
|
||||
//1 checkbox dans la page principal. iL est affiché par défaut si c'est une compétence clé. les compéetences clés sonr cochés
|
||||
// 1 checkbox dans la popup d'ajout de competences. Par defaut, seul les compétences clé sont cochés
|
||||
var hidden = "";
|
||||
var checked = "";
|
||||
if (object.competenceCle == true && type != "init") {
|
||||
checked = "checked";
|
||||
}
|
||||
var chaine = object.libelle.replace("'", " ");
|
||||
var chaine = chaine.replace(",", " ");
|
||||
$("#competencesAd").append("<div id='competence_ad_" + object.code +
|
||||
"' name='competences_ad[]'><input type='checkbox' " + checked +
|
||||
" onChange='genererCompetences(this);' id='competence_" + object
|
||||
.code + "' value='" + chaine + "_" + object.code + "'> " + object.libelle +
|
||||
"<br/></div>");
|
||||
|
||||
$("#competencesAdPopup").append("<div id='competence_ad_popup_" + object.code +
|
||||
"'><input type='checkbox' " + checked +
|
||||
" onChange='genererCompetences(this);' id='competencepopup_" + object
|
||||
.code + "' value='" + object.code + "'> " + object.libelle + "<br/></div>");
|
||||
if (object.competenceCle == false) {
|
||||
$("#competence_ad_" + object.code).hide();
|
||||
}
|
||||
});
|
||||
|
||||
//parcours de l'objet json renvoyé par l'api ( groupes de compétences spécifiques)
|
||||
obj.groupesCompetencesSpecifiques.forEach(function (object) {
|
||||
//parcours de l'objet json renvoyé par l'api ( groupes de compétences spécifiques)
|
||||
object.competences.forEach(function (competence) {
|
||||
// Pour chaque compétences, on crée
|
||||
//1 checkbox dans la page principal. iL est affiché par défaut si c'est une compétence clé. les compéetences clés sonr cochés
|
||||
// 1 checkbox dans la popup d'ajout de competences. Par defaut, seul les compétences clé sont cochés
|
||||
var hidden = "";
|
||||
var checked = "";
|
||||
//On on ne coche pas ces competences clé (uniquement les compétences de base) sur le formulaire de base
|
||||
//if (competence.competenceCle == true && type != "init") {
|
||||
//checked = "checked";
|
||||
//}
|
||||
var chaine = competence.libelle.replace("'", " ");
|
||||
var chaine = chaine.replace(",", " ");
|
||||
$("#competencesAd").append("<div id='competence_ad_" + competence.code +
|
||||
"' name='competences_ad[]'><input type='checkbox' " + checked +
|
||||
" onChange='genererCompetences(this);' id='competence_" +
|
||||
competence
|
||||
.code + "' value='" + chaine + "_" + competence.code + "'> " +
|
||||
competence.libelle + "<br/></div>");
|
||||
|
||||
$("#competencesAdPopup").append("<div id='competence_ad_popup_" + competence
|
||||
.code + "'><input type='checkbox' " + checked +
|
||||
" onChange='genererCompetences(this);' id='competencepopup_" +
|
||||
competence
|
||||
.code + "' value='" + competence.code + "'> " + competence.libelle +
|
||||
"<br/></div>");
|
||||
//On n'affiche pas ces competences (meme les competences clé) sur le formulaire de base
|
||||
//if (competence.competenceCle == false) {
|
||||
$("#competence_ad_" + competence.code).hide();
|
||||
//}
|
||||
});
|
||||
});
|
||||
$("#competencesButtonAd").show();
|
||||
//lors de l'init, on affiche et coche les compétences récupérer en base. On désaffiche et decoche celle qui n'y sont plus
|
||||
// Pareil pour la popup sauf qu'elles sont toutes affichées
|
||||
if (type == "init") {
|
||||
const obj = JSON.parse($("#ad_competences").val());
|
||||
console.log(obj);
|
||||
for (var key in obj) {
|
||||
for (var key2 in obj[key]) {
|
||||
//console.log(obj[key][key2]);
|
||||
console.log(key2);
|
||||
|
||||
$("#competencepopup_" + key2).prop("checked", true);
|
||||
$("#competence_" + key2).prop("checked", true);
|
||||
$("#competence_ad_" + key2).show();
|
||||
}
|
||||
}
|
||||
}
|
||||
//on génere le json qui va remplir le champ ad_competences
|
||||
genererJson();
|
||||
$('#loadingDiv').hide();
|
||||
})
|
||||
|
||||
//Ce code sera exécuté en cas d'échec - L'erreur est passée à fail()
|
||||
//On peut afficher les informations relatives à la requête et à l'erreur
|
||||
.fail(function (error) {
|
||||
$("#competencesAd").text("");
|
||||
$("#competencesAdPopup").text("");
|
||||
if ($("#saisie").val() != "") {
|
||||
// si il y a un pb avec l'api pole emploi, on affiche ce message
|
||||
$("#competencesAdMessage").html(
|
||||
"Une erreur est survenue dans la recherche du métier de rattachement. <a href='#' onclick='chargerCompetences();'><br/><i class='fa fa-refresh fa-spin fa-fw'></i>Cliquez ici pour relancer la recherche</a> "
|
||||
);
|
||||
|
||||
}
|
||||
$('#loadingDiv').hide();
|
||||
console.log("La requête s'est terminée en échec q= " + $("#id_appellation_temporaire").val() +
|
||||
" Infos : " + JSON.stringify(error));
|
||||
})
|
||||
//Ce code sera exécuté que la requête soit un succès ou un échec
|
||||
.always(function () {
|
||||
console.log("Requête effectuée");
|
||||
});
|
||||
}
|
||||
// function qui permet de synchroniser les compétences de la page et celles de la popup
|
||||
// ca va dans les deux sens.
|
||||
function genererCompetences(cb) {
|
||||
console.log("Clicked, new value = " + cb.checked);
|
||||
console.log("Clicked, target = " + cb.id);
|
||||
var id = cb.id.split('_');
|
||||
id = id[1];
|
||||
if ($("#nbCompetences").val() < 10) {
|
||||
$("#competence_" + id).prop("checked", cb.checked);
|
||||
$("#competencepopup_" + id).prop("checked", cb.checked);
|
||||
if (cb.checked) {
|
||||
console.log("reaffichage div #competence_ad_" + id);
|
||||
$("#competence_ad_" + id).show();
|
||||
} else {
|
||||
console.log("hidden de div #competence_ad_" + id);
|
||||
$("#competence_ad_" + id).hide();
|
||||
}
|
||||
} else {
|
||||
$("#competence_" + id).prop("checked", false);
|
||||
$("#competence_ad_" + id).hide();
|
||||
//$("#competence_" + id).hide();
|
||||
$("#competencepopup_" + id).prop("checked", false);
|
||||
}
|
||||
// on génere le json a chaque fois
|
||||
genererJson();
|
||||
}
|
||||
</script>
|
||||
{% endblock %}
|
||||
@@ -1,6 +1,23 @@
|
||||
{# {% extends 'company/base_dashboard_company.html.twig' %} #}
|
||||
{% extends 'admin/base_dashboard.html.twig' %}
|
||||
{% block javascriptSupl %}
|
||||
<style>
|
||||
.saisie thead tr th,
|
||||
.saisie tbody tr td,
|
||||
.saisie tbody tr td *:not(.dropdown-default) .saisie tr td {
|
||||
overflow: visible;
|
||||
|
||||
}
|
||||
|
||||
.modalCompetences {
|
||||
height: 600px;
|
||||
}
|
||||
</style>
|
||||
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/corejs-typeahead/1.3.1/bloodhound.min.js" type="text/javascript">
|
||||
</script>
|
||||
<script src="{{ asset('dashboard/plugins/typeahead/typeahead.bundle.js') }}" type="text/javascript"></script>
|
||||
{% endblock %}
|
||||
{% block dashContent %}
|
||||
<!-- START JUMBOTRON -->
|
||||
<div class="jumbotron" data-pages="parallax">
|
||||
@@ -8,236 +25,685 @@
|
||||
<div class="inner">
|
||||
<!-- START BREADCRUMB -->
|
||||
<ol class="breadcrumb">
|
||||
<li class="breadcrumb-item"><a href="/">Accueil</a></li>
|
||||
<li class="breadcrumb-item"><a href="/entreprise/me/">Accueil</a></li>
|
||||
<li class="breadcrumb-item"><a href="{{ path('company_ad') }}">Offres d'emploi</a></li>
|
||||
|
||||
|
||||
</ol>
|
||||
<!-- END BREADCRUMB -->
|
||||
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!-- END JUMBOTRON -->
|
||||
<!-- START CONTAINER FLUID -->
|
||||
<div class=" container-fluid container-fixed-lg">
|
||||
<div id="rootwizard" class="m-t-50">
|
||||
{% include 'company/ad_stepsV2.html.twig' with {'tab':1} %}
|
||||
|
||||
<div class="tab-content">
|
||||
<div class="tab-pane padding-20 sm-no-padding active slide-left" id="tab1">
|
||||
<div class="row row-same-height">
|
||||
<div class="col-md-5 b-r b-dashed b-grey sm-b-b">
|
||||
<div class="padding-30 sm-padding-5 sm-m-t-15 m-t-50">
|
||||
<i class="material-icons hint-text">shopping_cart</i>
|
||||
<h2>Etape 1 : Je crée/modifie une annonce</h2>
|
||||
<p>Pour trouver le bon profil, renseignez et personnalisez votre annonce.
|
||||
Plus votre annonce est précise et attractive, plus les candidatures seront ciblées.
|
||||
Afin de créer votre annonce, renseignez l’ensemble des champs relatifs au poste proposé.</p>
|
||||
{# <p class="small hint-text">Below is a sample page for your cart , Created using pages design
|
||||
UI Elementes</p> #}
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-7">
|
||||
<div class="padding-30 sm-padding-5">
|
||||
{{ form_start(form, {'attr': {'class': 'form-horizontal'}}) }}
|
||||
<table class="table table-condensed form-horizontal">
|
||||
{% if form_errors(form) %}<tr>
|
||||
<td class="col-lg-12 col-md-12 col-sm-12 ">
|
||||
|
||||
<span class="red-text text-darken-2">{{ form_errors(form) }}</span>
|
||||
|
||||
</td>
|
||||
</tr>
|
||||
{% endif %}
|
||||
{% if form.reference is defined%}
|
||||
<tr>
|
||||
<td class="col-lg-12 col-md-12 col-sm-12 ">
|
||||
|
||||
{{ form_row(form.reference) }}
|
||||
|
||||
</td>
|
||||
</tr>
|
||||
{% endif %}
|
||||
<tr>
|
||||
<td class="col-lg-12 col-md-12 col-sm-12 ">
|
||||
{% if form.title is defined%}
|
||||
{{ form_row(form.title) }}
|
||||
{% endif %}
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="col-lg-12 col-md-12 col-sm-12">
|
||||
{{ form_row(form.beneficiaire) }}
|
||||
<br/>
|
||||
Vous souhaitez recruter pour l'un de vos clients, renseignez ce champ
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
|
||||
<tr>
|
||||
<td class="col-lg-12 col-md-12 col-sm-12">
|
||||
{{ form_row(form.location_gmap) }}
|
||||
{{ form_row(form.location) }}
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="col-lg-12 col-md-12 col-sm-12">
|
||||
{{ form_row(form.description) }}
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="col-lg-12 col-md-12 col-sm-12">
|
||||
{{ form_row(form.contract_type) }}
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="col-lg-12 col-md-12 col-sm-12">
|
||||
{{ form_row(form.publicTag) }}
|
||||
</td>
|
||||
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="col-lg-12 col-md-12 col-sm-12">
|
||||
{{ form_row(form.status) }}
|
||||
</td>
|
||||
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="col-lg-12 col-md-12 col-sm-12 ">
|
||||
<button aria-label="" type="submit" class="btn btn-primary btn-cons btn-animated from-left pull-right"
|
||||
type="button">
|
||||
<span>Je crée mon annonce</span>
|
||||
<span class="hidden-block">
|
||||
<i class="material-icons fs-16">local_shipping</i>
|
||||
</span>
|
||||
</button>
|
||||
{# <button class="btn btn-default" type="submit">Je crée mon annonce!</button> #}
|
||||
</td>
|
||||
|
||||
</tr>
|
||||
|
||||
</table>
|
||||
{{ form_end(form) }}
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- MODALS-->
|
||||
|
||||
<!-- Modal 1 -->
|
||||
<div class="modal fade bd-example-modal-lg" id="competencesModal" tabindex="-1" role="dialog"
|
||||
aria-labelledby="competencesModalLabel" aria-hidden="false" data-show="false">
|
||||
<div class="modal-dialog modal-lg" role="document">
|
||||
<div class="modal-content">
|
||||
<div class="modal-header">
|
||||
<h5 class="modal-title" id="competencesModalLabel">Souhaitez-vous sélectionner le métier <span
|
||||
class="metierPopup"></span>?</h5>
|
||||
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
|
||||
<span aria-hidden="true">×</span>
|
||||
</button>
|
||||
</div>
|
||||
<div class="tab-pane slide-left padding-20 sm-no-padding disabled" id="tab2">
|
||||
<div class="row row-same-height">
|
||||
<div class="col-md-5 b-r b-dashed b-grey ">
|
||||
<div class="padding-30 sm-padding-5 sm-m-t-15 m-t-50">
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-7">
|
||||
<div class="padding-30 sm-padding-5">
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="tab-pane slide-left padding-20 sm-no-padding disabled" id="tab3">
|
||||
<div class="row row-same-height">
|
||||
<div class="col-md-5 b-r b-dashed b-grey ">
|
||||
<div class="padding-30 sm-padding-5 sm-m-t-15 m-t-50">
|
||||
<h2>We Secured Your Line</h2>
|
||||
<p>Below is a sample page for your cart , Created using pages design UI Elementes</p>
|
||||
<p class="small hint-text">Below is a sample page for your cart , Created using pages design
|
||||
UI Elementes</p>
|
||||
<table class="table table-condensed">
|
||||
<tr>
|
||||
<td class=" col-md-9">
|
||||
<span class="m-l-10 font-montserrat fs-11 all-caps">Webarch UI Framework</span>
|
||||
<span class="m-l-10 ">Dashboard UI Pack</span>
|
||||
</td>
|
||||
<td class=" col-md-3 text-right">
|
||||
<span>Qty 1</span>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class=" col-md-9">
|
||||
<span class="m-l-10 font-montserrat fs-11 all-caps">Pages UI Framework</span>
|
||||
<span class="m-l-10 ">Next Gen UI Pack</span>
|
||||
</td>
|
||||
<td class=" col-md-3 text-right">
|
||||
<span>Qty 1</span>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td colspan="2" class=" col-md-3 text-right">
|
||||
<h4 class="text-primary no-margin font-montserrat">$27</h4>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
<p class="small">Invoice are issued on the date of despatch. Payment terms: Pre-orders:
|
||||
within 10 days of invoice date with 4% discount, from the 11th to the 30th day net.
|
||||
Re-orders: non-reduced stock items are payable net after 20 days. </p>
|
||||
<p class="small">By pressing Pay Now You will Agree to the Payment <a href="#">Terms &
|
||||
Conditions</a></p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-7">
|
||||
<div class="padding-30 sm-padding-5">
|
||||
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="padding-20 sm-padding-5 sm-m-b-20 sm-m-t-20 bg-white clearfix">
|
||||
{# <ul class="pager wizard no-style">
|
||||
<li class="next">
|
||||
<button aria-label="" class="btn btn-primary btn-cons btn-animated from-left pull-right"
|
||||
type="button">
|
||||
<span>Je crée mon annonce</span>
|
||||
<span class="hidden-block">
|
||||
<i class="material-icons fs-16">local_shipping</i>
|
||||
</span>
|
||||
</button>
|
||||
</li>
|
||||
<li class="next finish hidden">
|
||||
<button aria-label="" class="btn btn-primary btn-cons btn-animated from-left pull-right"
|
||||
type="button">
|
||||
<span>Finish</span>
|
||||
<span class="hidden-block">
|
||||
<i class="material-icons fs-16">settings</i>
|
||||
</span>
|
||||
</button>
|
||||
</li>
|
||||
<li class="previous first hidden">
|
||||
<button aria-label="" class="btn btn-default btn-cons btn-animated from-left pull-right"
|
||||
type="button">
|
||||
<span>First</span>
|
||||
<span class="hidden-block">
|
||||
<i class="material-icons fs-16">settings</i>
|
||||
</span>
|
||||
</button>
|
||||
</li>
|
||||
<li class="previous">
|
||||
<button aria-label="" class="btn btn-default btn-cons btn-animated from-left pull-right"
|
||||
type="button">
|
||||
<span>Previous</span>
|
||||
<span class="hidden-block">
|
||||
<i class="material-icons fs-14">settings</i>
|
||||
</span>
|
||||
</button>
|
||||
</li>
|
||||
</ul> #}
|
||||
</div>
|
||||
<div class="wizard-footer padding-20 bg-contrast-low">
|
||||
<p class="small hint-text pull-left no-margin">
|
||||
|
||||
<div class="modal-body">
|
||||
<h5> </h5>
|
||||
<p>
|
||||
|
||||
Si vous aviez précédemment sélectionné des compétences en lien avec l'ancien métier de rattachement,
|
||||
celles-ci seront remplacées par les nouvelles compétences, correspondant au métier <span
|
||||
class="metierPopup"></span>.
|
||||
</p>
|
||||
<div class="pull-right">
|
||||
|
||||
</div>
|
||||
<div class="clearfix"></div>
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
<button type="button" class="btn btn-secondary" data-dismiss="modal">Annuler</button>
|
||||
<button type="button" class="btn btn-secondary" data-dismiss="modal"
|
||||
onclick="chargerCompetences();">Sélectionner</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<!-- Modal 2 -->
|
||||
<div class="modal fade modalCompetences" id="ajoutCompetencesModal" tabindex="-1" role="dialog"
|
||||
aria-labelledby="ajoutCompetencesModalLabel" aria-hidden="false" data-show="false">
|
||||
<div class="modal-dialog modal-lg" role="document">
|
||||
<div class="modal-content">
|
||||
<div class="modal-header">
|
||||
<h6 class="modal-title">Sélectionnez les compétences recherchées pour le poste à pourvoir </h6>
|
||||
<h7 class="modal-title">Vous pouvez sélectionner jusqu’à 10 compétences à afficher dans votre offre
|
||||
d’emploi. </h7>
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
|
||||
{# <p>Etes vous sur de charger les compétences du métier <span id="metierPopup"></span></p> #}
|
||||
<div class="card card-default">
|
||||
<div class="card-body">
|
||||
<div class="scrollable">
|
||||
<div class="demo-card-scrollable">
|
||||
<div id="competencesAdPopup"></div>
|
||||
</div>
|
||||
</div>
|
||||
<div id="competencesAdMessagePopup" class="text-danger"></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
<button type="button" id="ajouterCompetenceButtonMdal" class="btn btn-secondary" data-dismiss="modal"
|
||||
onclick="">Ajouter ces compétences</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!-- FIN MODALS-->
|
||||
|
||||
|
||||
<!-- START CONTAINER FLUID -->
|
||||
<div class=" container-fluid container-fixed-lg">
|
||||
<div class="col-lg-8 bloc-header">
|
||||
<div class="card card-default container">
|
||||
<div class="card-body">
|
||||
<div class="row" style="min-height:10rem;">
|
||||
<div class="col-8">
|
||||
<h4 class="header-title" style="font-size:2em;line-height:1.5em;">Création d'une offre d'emploi
|
||||
vidéo</h4>
|
||||
<p>Pour trouver le bon profil, renseignez et personnalisez votre annonce. <br>Plus votre annonce
|
||||
est précise et attractive, plus les candidatures seront ciblées.</p>
|
||||
</div>
|
||||
<div class="col-4"
|
||||
style="background-repeat: no-repeat; background-image: url('https://blog.talentstube.com/wp-content/uploads/2021/02/creer-offre-emploi-video.svg');background-size: contain;background-position: center;">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div id="rootwizard" class="col-lg-8 m-t-50">
|
||||
{% if type is defined and type == 'update' %}
|
||||
{% include 'company/ad_stepsV2.html.twig' with {'tab':1, 'type':'update'} %}
|
||||
{% else %}
|
||||
{% include 'company/ad_stepsV2.html.twig' with {'tab':1} %}
|
||||
{% endif %}
|
||||
|
||||
<div class="tab-content">
|
||||
{{ form_start(form, {'attr': {'class': ''}}) }}
|
||||
|
||||
<div class="tab-pane padding-20 sm-no-padding active slide-left" id="tab1">
|
||||
<div class="row row-same-height">
|
||||
<div class="col-md">
|
||||
<h4>À propos du poste</h4>
|
||||
<br>
|
||||
{% if form.title is defined%}
|
||||
<div class="form-group form-group-default required">
|
||||
{# <label for="ad_title" class="required active">Intitulé du poste</label><input type="text"
|
||||
id="ad_title" name="ad[title]" required="required" placeholder="Ex: Commercial (H/F)"
|
||||
class="form-control"> #}
|
||||
{{ form_row(form.title) }}
|
||||
</div>
|
||||
{% endif %}
|
||||
{% if form.reference is defined%}
|
||||
<div class="form-group form-group-default required">
|
||||
{# <label for="ad_reference" class="required active">Référence de l'offre
|
||||
d'emploi</label><input type="text" id="ad_reference" name="ad[reference]"
|
||||
required="required" placeholder="Ex : BTH567" class="form-control"> #}
|
||||
{{ form_row(form.reference) }}
|
||||
</div>
|
||||
{% endif %}
|
||||
<div class="form-group form-group-default required" style="min-height:250px;">
|
||||
{# <label for="ad_description" class="required active">Description du poste</label>
|
||||
<textarea id="ad_description" name="ad[description]" required="required"
|
||||
class="form-control"
|
||||
placeholder="Décrivez le poste, les missions, le profil recherché..."></textarea> #}
|
||||
{{ form_row(form.description) }}
|
||||
</div>
|
||||
<div class="form-group form-group-default required">
|
||||
{# <label for="ad_location_gmap" class="required active">Localisation du poste</label><input
|
||||
type="text" id="ad_location_gmap" name="ad[location_gmap]" required="required" value=""
|
||||
class="form-control pac-target-input"
|
||||
placeholder="Ex : 3 Rue Louis de Broglie, Vannes, France" autocomplete="off"> #}
|
||||
{{ form_row(form.location_gmap) }}
|
||||
{{ form_row(form.location) }}
|
||||
</div>
|
||||
{# <input type="hidden" id="ad_location" name="ad[location]" value="null"> #}
|
||||
<br>
|
||||
<h6>Organisation cliente (facultatif)</h6>
|
||||
<div class="form-group form-group-default">
|
||||
{# <label for="ad_beneficiaire" class="active">Nom de l'organisation</label>
|
||||
<input type="text" id="ad_beneficiaire" name="ad[beneficiaire]" placeholder=""
|
||||
class="form-control"> #}
|
||||
{{ form_row(form.beneficiaire) }}
|
||||
</div>
|
||||
<p class="fs-12 bold">Vous souhaitez recruter pour l'un de vos clients ? Veuillez renseigner le
|
||||
champ ci-dessus</p>
|
||||
<br>
|
||||
<h4>Critères de l'offre d'emploi</h4>
|
||||
<br>
|
||||
<div class="form-group form-group-default required">
|
||||
{# <label for="ad_contract_type" class="required">Type de contrat:</label>
|
||||
<select id="ad_contract_type" name="ad[contract_type]" class="form-control">
|
||||
<option value="CDI">CDI</option>
|
||||
<option value="CDD">CDD</option>
|
||||
<option value="Apprentissage">Apprentissage</option>
|
||||
<option value="professionnalisation">Contrat de professionnalisation</option>
|
||||
<option value="Stage">Stage</option>
|
||||
<option value="Indépendant">Indépendant</option>
|
||||
<option value="Interim">Interim</option>
|
||||
</select> #}
|
||||
{{ form_row(form.contract_type) }}
|
||||
</div>
|
||||
<div class="form-group form-group-default disabled" id="ad_duree_contrat_div">
|
||||
{# <label for="ad_duree_contrat" class="active">Durée du contrat en mois</label>
|
||||
<input type="number" id="ad_duree_contrat" name="ad[duree_contrat]" value="0"
|
||||
class="form-control" placeholder="Ex : 6" min="0" max="36" disabled=""> #}
|
||||
{{ form_row(form.duree_contrat) }}
|
||||
</div>
|
||||
<div class="form-group form-group-default required">
|
||||
{# <label for="ad_temps_type" class="required">Type d'emploi</label>
|
||||
<select id="ad_temps_type" name="ad[temps_type]" class="form-control">
|
||||
<option value="FULL_TIME">Temps plein </option>
|
||||
<option value="PART_TIME">Temps partiel </option>
|
||||
<option value="MIX_TIME">Temps plein ou temps partiel</option>
|
||||
</select> #}
|
||||
{{ form_row(form.temps_type) }}
|
||||
</div>
|
||||
<div class="form-group form-group-default disabled" id="ad_nombre_heure_div">
|
||||
{# <label for="ad_nombre_heure" class="active">Temps de travail (Le nombre saisi correspond au
|
||||
nombre d'heures/semaine.)</label>
|
||||
<input type="number" id="ad_nombre_heure" name="ad[nombre_heure]" value="0"
|
||||
class="form-control" placeholder="Ex : 20" min="0" max="35" disabled=""> #}
|
||||
{{ form_row(form.nombre_heure) }}
|
||||
</div>
|
||||
<div class="form-group form-group-default required">
|
||||
{# <label for="ad_teletravail" class="required">Possibilité de faire du Télétravail?</label>
|
||||
<select id="ad_teletravail" name="ad[teletravail]" class="form-control">
|
||||
<option value="tele_occasionel">Occasionnel </option>
|
||||
<option value="tele_partiel">Partiel </option>
|
||||
<option value="tele_total">Total</option>
|
||||
<option value="tele_non">Non</option>
|
||||
</select> #}
|
||||
{{ form_row(form.teletravail) }}
|
||||
{{ form_row(form.status) }}
|
||||
</div>
|
||||
|
||||
<br>
|
||||
<h4 class="no-margin p-b-5">Compétences recherchées</h4>
|
||||
<br>
|
||||
<div class="col bg-contrast-lower">
|
||||
<br>
|
||||
<table>
|
||||
<tr class='bg-contrast-lower'>
|
||||
<td class="col-lg-12 col-md-12 col-sm-12 bg-contrast-lower">
|
||||
<h3 class="no-margin p-b-5">Compétences recherchées</h3>
|
||||
<br />
|
||||
Recherchez le métier de rattachement le plus proche de l’intitulé de poste
|
||||
que vous avez saisi.
|
||||
|
||||
|
||||
</button>
|
||||
|
||||
</td>
|
||||
</tr>
|
||||
<tr class='bg-contrast-lower'>
|
||||
<td class="col-lg-12 col-md-12 col-sm-12 bg-contrast-lower">
|
||||
<table class='saisie'>
|
||||
<tr class='saisie'>
|
||||
<td class='saisie'>
|
||||
<label for="saisie" class="required">Métier de
|
||||
rattachement</label><br />
|
||||
<input class="typeahead form-control sample-typehead tt-input"
|
||||
id="saisie" type="text" placeholder="Saisir un métier"
|
||||
autocomplete="off" spellcheck="false" dir="auto"
|
||||
style="position: relative; vertical-align: top; background-color: transparent;">
|
||||
<br />
|
||||
<input type="hidden" name="id_appellation_temporaire"
|
||||
id="id_appellation_temporaire">
|
||||
<input type="hidden" name="metier_temporaire"
|
||||
id="metier_temporaire">
|
||||
<input type="hidden" name="competences_origine"
|
||||
id="competences_origine">
|
||||
<br />Le métier de rattachement sert uniquement à vous proposer des
|
||||
compétences
|
||||
et ne sera pas affiché sur votre offre d’emploi.
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
<table class="table table-condensed ">
|
||||
<tr class='bg-contrast-lower'>
|
||||
<td class="col-lg-12 col-md-12 col-sm-12 bg-contrast-lower">
|
||||
<div id="competencesAd"></div><br />
|
||||
<div id="competencesAdMessage" class="text-danger">Veuillez choisir un métier de
|
||||
rattachement pour votre annonce.</div><br />
|
||||
<div id="loadingDiv">Patientez...</div><br />
|
||||
<div class="text-center" id="competencesButtonAd">
|
||||
<button type="button" class="btn btn-info btn-lg" data-toggle="modal"
|
||||
data-target="#ajoutCompetencesModal" id="ajoutCompetences">
|
||||
Ajouter des compétences
|
||||
</button>
|
||||
<input type="hidden" id="nbCompetences">
|
||||
<span id="nbCompetencesText"></span>
|
||||
</div>
|
||||
</td>
|
||||
{{ form_row(form.appellationId) }}
|
||||
{{ form_row(form.appellationLibelle) }}
|
||||
{{ form_row(form.codeRome) }}
|
||||
</tr>
|
||||
|
||||
{# <tr>
|
||||
<td class="col-lg-12 col-md-12 col-sm-12">
|
||||
{{ form_row(form.status) }}
|
||||
</td>
|
||||
|
||||
</tr> #}
|
||||
|
||||
|
||||
|
||||
|
||||
</table>
|
||||
</div>
|
||||
<br>
|
||||
|
||||
<button aria-label="" type="submit"
|
||||
class="btn btn-lg btn-primary btn-cons btn-animated from-left" id="saveAdButton"
|
||||
disabled="">
|
||||
<span>Suivant</span>
|
||||
<span class="hidden-block">
|
||||
<i class="material-icons tab-icon">videocam</i>
|
||||
</span>
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
{{ form_end(form) }}
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!-- END CONTAINER FLUID -->
|
||||
|
||||
{% endblock %}
|
||||
|
||||
{% block javascriptsSecondaire %}
|
||||
<script type="application/javascript">
|
||||
function afficherTempsType() {
|
||||
if ($("#ad_temps_type").val() == "PART_TIME") {
|
||||
//$("#ligneNbHeure").show();
|
||||
$("#ad_nombre_heure").prop("disabled", false);
|
||||
$("#ad_nombre_heure_div").removeClass("disabled");
|
||||
} else {
|
||||
//$("#ligneNbHeure").hide().prop('required',false) ;;
|
||||
$("#ad_nombre_heure").prop("disabled", true);
|
||||
$("#ad_nombre_heure_div").addClass("disabled");
|
||||
}
|
||||
}
|
||||
|
||||
//Methode permettant d'afficher le bloc durée de contrat si le contrat est un CDI
|
||||
function afficherDureeContrat() {
|
||||
console.log("type de contrat =" + $("#ad_contract_type").val());
|
||||
if ($("#ad_contract_type").val() == "CDD") {
|
||||
//$("#ligneDureeContrat").show();
|
||||
$("#ad_duree_contrat").prop("disabled", false);
|
||||
$("#ad_duree_contrat_div").removeClass("disabled");
|
||||
} else {
|
||||
//$("#ligneDureeContrat").hide().prop('required',false) ;
|
||||
$("#ad_duree_contrat").prop("disabled", true);
|
||||
$("#ad_duree_contrat_div").addClass("disabled");
|
||||
}
|
||||
}
|
||||
|
||||
$("#ad_soft_temps_type").change(function () {
|
||||
afficherTempsType();
|
||||
});
|
||||
|
||||
$("#ad_soft_contract_type").change(function () {
|
||||
afficherDureeContrat();
|
||||
});
|
||||
|
||||
//methode qui permet de générer le json des competences.
|
||||
// c'est le champ ad_competences qui sert à l'enregistrement en base
|
||||
function genererJson() {
|
||||
var competences = "";
|
||||
//competences = [];
|
||||
var nbCompetencesSelect = 0;
|
||||
//on parcourt toutes les checkbox cochées
|
||||
$(":checkbox:checked").map(function () {
|
||||
//on recuperer l'input car l'id du champ est formaté comme suit competence_ ou competencepopup_
|
||||
var input = this.id.split('_');
|
||||
// on ne ored=nd que les input de la page pricnipale (pas ceux de la popup)
|
||||
if (input[0] == "competence") {
|
||||
var retour = this.value.split('_');
|
||||
//var competence = [retour[0], parseInt(retour[1])];
|
||||
console.log(this.value);
|
||||
//competences.push(competence);
|
||||
//on remplace la virgule par un esapce car sinon bug (les compétences sont séparés par une virgule)
|
||||
var chaine = this.value.replace(",", " ");
|
||||
//On limite a 10 compétences, au dela, on les enregistre pas dans le champ ad_competences
|
||||
if (nbCompetencesSelect < 11) {
|
||||
competences += chaine + ",";
|
||||
nbCompetencesSelect++;
|
||||
}
|
||||
|
||||
$("#nbCompetencesText").html(nbCompetencesSelect + " compétences sélectionnées");
|
||||
$("#ajouterCompetenceButtonMdal").html("Ajouter (+" + nbCompetencesSelect + ")");
|
||||
$("#nbCompetences").val(nbCompetencesSelect);
|
||||
//return competence;
|
||||
}
|
||||
|
||||
}).get();
|
||||
// on renseigne le champ ad_competences
|
||||
$("#ad_soft_competences").val(competences);
|
||||
//Gestion des erreurs si aucune compétence
|
||||
if (nbCompetencesSelect == 0) {
|
||||
$("#nbCompetencesText").html("");
|
||||
$("#competencesAdMessage").html(
|
||||
"Vous devez sélectionner au minimum une compétence. "
|
||||
);
|
||||
$("#competencesAdMessagePopup").html(
|
||||
"Vous devez sélectionner au minimum une compétence. "
|
||||
);
|
||||
$("#ajouterCompetenceButtonMdal").html("Ajouter (+0)");
|
||||
$("#ajouterCompetenceButtonMdal").hide();
|
||||
$("#saveAdButton").prop("disabled", true);
|
||||
} else if (nbCompetencesSelect > 9) {
|
||||
$("#saveAdButton").prop("disabled", false);
|
||||
//Gestion des erreurs si plusde 10 compétences
|
||||
$("#competencesAdMessage").html(
|
||||
"Vous avez atteint le nombre maximum de compétences. "
|
||||
);
|
||||
$("#competencesAdMessagePopup").html(
|
||||
"Vous avez atteint le nombre maximum de compétences. "
|
||||
);
|
||||
if (nbCompetencesSelect > 10) {
|
||||
$("#ajouterCompetenceButtonMdal").hide();
|
||||
}
|
||||
} else {
|
||||
//cas standards, on reinitialise les champs a vide
|
||||
$("#saveAdButton").prop("disabled", false);
|
||||
$("#competencesAdMessage").html(" ");
|
||||
$("#competencesAdMessagePopup").html(" ");
|
||||
$("#ajouterCompetenceButtonMdal").show();
|
||||
}
|
||||
if ($("#saisie").val() == "" || !$("#saisie").val()) {
|
||||
$("#competencesAdMessage").html(
|
||||
"Veuillez choisir un métier de rattachement pour votre annonce. "
|
||||
);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
$(document).ready(function () {
|
||||
afficherTempsType();
|
||||
afficherDureeContrat();
|
||||
//ad_appellationId
|
||||
//ad_appellationLibelle
|
||||
//ad_competences
|
||||
// renseignement des champs temporaires (champ caché)
|
||||
$("#id_appellation_temporaire").val($("#ad_soft_appellationId").val());
|
||||
$("#metier_temporaire").val($("#ad_soft_appellationLibelle").val());
|
||||
// renseignement du champ visible (init du métier)
|
||||
$("#saisie").val($("#ad_soft_appellationLibelle").val());
|
||||
$("#competences_origine").val($("#ad_soft_competences").val());
|
||||
//charger les compétences en fonction du métier d'origine
|
||||
chargerCompetences("init");
|
||||
//cocher les cases par rapport aux compétences d'origine
|
||||
|
||||
});
|
||||
</script>
|
||||
|
||||
<script>
|
||||
$(document)
|
||||
.ready(function () {
|
||||
// Construction du champ typeahead d'auto compléetion de métier
|
||||
$("#competencesButtonAd").hide();
|
||||
$('#loadingDiv').hide();
|
||||
console.log("metiers!!");
|
||||
var metiers = new Bloodhound({
|
||||
datumTokenizer: Bloodhound.tokenizers.whitespace,
|
||||
queryTokenizer: Bloodhound.tokenizers.whitespace,
|
||||
remote: {
|
||||
// Ajax qui appelle getAppellionsMetier (API TT qui appelle APi pole emploi)
|
||||
url: '/app_dev.php/api/getAppelationsLibelle',
|
||||
wildcar: '%QUERY',
|
||||
|
||||
filter: function (metiers) {
|
||||
console.log("metiers2");
|
||||
return $.map(metiers, function (metier) {
|
||||
//console.log(metier);
|
||||
return {
|
||||
metier_id: metier.code,
|
||||
metier_libelle: metier.libelle
|
||||
}
|
||||
})
|
||||
},
|
||||
prepare: function (query, settings) {
|
||||
//ing%20agro
|
||||
//query = query.replace(" ", "%20");
|
||||
settings.url += '?q=' + query;
|
||||
return settings;
|
||||
}
|
||||
},
|
||||
|
||||
});
|
||||
metiers.initialize();
|
||||
// Initializing the typeahead
|
||||
$('#saisie').typeahead({
|
||||
hint: true,
|
||||
highlight: true
|
||||
}, {
|
||||
name: 'metiers',
|
||||
source: metiers.ttAdapter(),
|
||||
display: 'metier_libelle',
|
||||
limit: 10,
|
||||
templates: {
|
||||
suggestion: function (data) {
|
||||
//comment sont formaté les suggestion de l'auto completion
|
||||
$(".tt-dataset-metiers").show();
|
||||
var chaine = data.metier_libelle.replace("'", " ");
|
||||
return '<div onclick="chargerDonneesTemp(' + data.metier_id + ',\'' +
|
||||
chaine +
|
||||
'\')" data-toggle="modal" data-target="#competencesModal" id="competences"><a href="#" >' +
|
||||
data.metier_libelle +
|
||||
'</a></div>'
|
||||
},
|
||||
footer: function (query) {
|
||||
//return '<div class="text-center">Plus de résultats :' + query.query + '</div>';
|
||||
},
|
||||
empty: function (context) {
|
||||
// cas ou l'on ne trpouve rien
|
||||
$("#competencesAdMessage").html(
|
||||
" Aucun résultat ne correspond à votre recherche. <br/>Saisissez un autre mot clé pour trouver votre métier de rattachement."
|
||||
);
|
||||
return '<div class="text-center">Aucun résultat</div>';
|
||||
}
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
//methode qui charge métier temporaire (en attente validation de la popup)
|
||||
//En effet, on demande a l'utilsiateur s'il est sur. C'est pour ca qu'on a a ces champs temporaires
|
||||
function chargerDonneesTemp(codeRome, libelleMetier) {
|
||||
$("#id_appellation_temporaire").val(codeRome);
|
||||
console.log(codeRome);
|
||||
$("#metier_temporaire").val(libelleMetier);
|
||||
$(".metierPopup").text(libelleMetier);
|
||||
console.log(libelleMetier);
|
||||
}
|
||||
|
||||
function chargerCompetences(type) {
|
||||
$.ajax({
|
||||
//L'URL de la requête
|
||||
url: "/app_dev.php/api/getDetailAppelation",
|
||||
//url: '{{ path("anwser_share", {"id":'+id+'}) }}',
|
||||
//La méthode d'envoi (type de requête)
|
||||
method: "GET",
|
||||
data: 'q=' + $("#id_appellation_temporaire").val(),
|
||||
//Le format de réponse attendu
|
||||
dataType: "json",
|
||||
beforeSend: function () { // Before we send the request, remove the .hidden class from the spinner and default to inline-block.
|
||||
$('#loadingDiv').show();
|
||||
console.log("début loading");
|
||||
},
|
||||
})
|
||||
//Ce code sera exécuté en cas de succès - La réponse du serveur est passée à done()
|
||||
/*On peut par exemple convertir cette réponse en chaine JSON et insérer
|
||||
* cette chaine dans un div id="res"*/
|
||||
.done(function (response) {
|
||||
let data = JSON.stringify(response);
|
||||
//$("div#res").append(data);
|
||||
//console.log(data);
|
||||
const obj = JSON.parse(data);
|
||||
//console.log("code ROME");
|
||||
//console.log(obj.metier.code);
|
||||
//Passage du l'id appelation et de son libelle temporaire
|
||||
$("#ad_soft_codeRome").val(obj.metier.code);
|
||||
$("#ad_soft_appellationId").val($("#id_appellation_temporaire").val());
|
||||
$("#ad_soft_appellationLibelle").val($("#metier_temporaire").val());
|
||||
//console.log("competences de base");
|
||||
//console.log(obj.competencesDeBase);
|
||||
//Init des champs de compétences
|
||||
$("#competencesAd").text("");
|
||||
$("#competencesAdPopup").text("");
|
||||
$("#competencesAdMessage").html("");
|
||||
obj.competencesDeBase.forEach(function (object) {
|
||||
//console.log("Compétence de base");
|
||||
//console.log(object.code);
|
||||
//console.log(object.libelle);
|
||||
//console.log(object.competenceCle);
|
||||
var hidden = "";
|
||||
var checked = "";
|
||||
if (object.competenceCle == true && type != "init") {
|
||||
checked = "checked";
|
||||
}
|
||||
var chaine = object.libelle.replace("'", " ");
|
||||
var chaine = chaine.replace(",", " ");
|
||||
$("#competencesAd").append("<div id='competence_ad_" + object.code +
|
||||
"' name='competences_ad[]'><input type='checkbox' " + checked +
|
||||
" onChange='genererCompetences(this);' id='competence_" + object
|
||||
.code + "' value='" + chaine + "_" + object.code + "'> " + object.libelle +
|
||||
"<br/></div>");
|
||||
|
||||
$("#competencesAdPopup").append("<div id='competence_ad_popup_" + object.code +
|
||||
"'><input type='checkbox' " + checked +
|
||||
" onChange='genererCompetences(this);' id='competencepopup_" + object
|
||||
.code + "' value='" + object.code + "'> " + object.libelle + "<br/></div>");
|
||||
if (object.competenceCle == false) {
|
||||
$("#competence_ad_" + object.code).hide();
|
||||
}
|
||||
});
|
||||
|
||||
//parcours de l'objet json renvoyé par l'api ( groupes de compétences spécifiques)
|
||||
obj.groupesCompetencesSpecifiques.forEach(function (object) {
|
||||
//parcours de l'objet json renvoyé par l'api ( groupes de compétences spécifiques)
|
||||
object.competences.forEach(function (competence) {
|
||||
// Pour chaque compétences, on crée
|
||||
//1 checkbox dans la page principal. iL est affiché par défaut si c'est une compétence clé. les compéetences clés sonr cochés
|
||||
// 1 checkbox dans la popup d'ajout de competences. Par defaut, seul les compétences clé sont cochés
|
||||
var hidden = "";
|
||||
var checked = "";
|
||||
//On on ne coche pas ces competences clé (uniquement les compétences de base) sur le formulaire de base
|
||||
//if (competence.competenceCle == true && type != "init") {
|
||||
//checked = "checked";
|
||||
//}
|
||||
var chaine = competence.libelle.replace("'", " ");
|
||||
var chaine = chaine.replace(",", " ");
|
||||
$("#competencesAd").append("<div id='competence_ad_" + competence.code +
|
||||
"' name='competences_ad[]'><input type='checkbox' " + checked +
|
||||
" onChange='genererCompetences(this);' id='competence_" +
|
||||
competence
|
||||
.code + "' value='" + chaine + "_" + competence.code + "'> " +
|
||||
competence.libelle + "<br/></div>");
|
||||
|
||||
$("#competencesAdPopup").append("<div id='competence_ad_popup_" + competence
|
||||
.code + "'><input type='checkbox' " + checked +
|
||||
" onChange='genererCompetences(this);' id='competencepopup_" +
|
||||
competence
|
||||
.code + "' value='" + competence.code + "'> " + competence.libelle +
|
||||
"<br/></div>");
|
||||
//On n'affiche pas ces competences (meme les competences clé) sur le formulaire de base
|
||||
//if (competence.competenceCle == false) {
|
||||
$("#competence_ad_" + competence.code).hide();
|
||||
//}
|
||||
});
|
||||
});
|
||||
|
||||
|
||||
$("#competencesButtonAd").show();
|
||||
if (type == "init") {
|
||||
const obj = JSON.parse($("#ad_soft_competences").val());
|
||||
for (var key in obj) {
|
||||
for (var key2 in obj[key]) {
|
||||
//console.log(obj[key][key2]);
|
||||
console.log(key2);
|
||||
|
||||
$("#competencepopup_" + key2).prop("checked", true);
|
||||
$("#competence_" + key2).prop("checked", true);
|
||||
$("#competence_ad_" + key2).show();
|
||||
}
|
||||
}
|
||||
}
|
||||
//on génere le json qui va remplir le champ ad_soft_competences
|
||||
genererJson();
|
||||
$('#loadingDiv').hide();
|
||||
})
|
||||
|
||||
//Ce code sera exécuté en cas d'échec - L'erreur est passée à fail()
|
||||
//On peut afficher les informations relatives à la requête et à l'erreur
|
||||
.fail(function (error) {
|
||||
$("#competencesAd").text("");
|
||||
$("#competencesAdPopup").text("");
|
||||
if ($("#saisie").val() != "") {
|
||||
// si il y a un pb avec l'api pole emploi, on affiche ce message
|
||||
$("#competencesAdMessage").html(
|
||||
"Une erreur est survenue dans la recherche du métier de rattachement. <a href='#' onclick='chargerCompetences();'><br/><i class='fa fa-refresh fa-spin fa-fw'></i>Cliquez ici pour relancer la recherche</a> "
|
||||
);
|
||||
}
|
||||
$('#loadingDiv').hide();
|
||||
console.log("La requête s'est terminée en échec. Infos : " + JSON.stringify(error));
|
||||
})
|
||||
|
||||
//Ce code sera exécuté que la requête soit un succès ou un échec
|
||||
.always(function () {
|
||||
console.log("Requête effectuée");
|
||||
});
|
||||
}
|
||||
|
||||
// function qui permet de synchroniser les compétences de la page et celles de la popup
|
||||
// ca va dans les deux sens.
|
||||
function genererCompetences(cb) {
|
||||
console.log("Clicked, new value = " + cb.checked);
|
||||
console.log("Clicked, target = " + cb.id);
|
||||
var id = cb.id.split('_');
|
||||
id = id[1];
|
||||
if ($("#nbCompetences").val() < 10) {
|
||||
$("#competence_" + id).prop("checked", cb.checked);
|
||||
$("#competencepopup_" + id).prop("checked", cb.checked);
|
||||
if (cb.checked) {
|
||||
console.log("reaffichage div #competence_ad_" + id);
|
||||
$("#competence_ad_" + id).show();
|
||||
} else {
|
||||
console.log("hidden de div #competence_ad_" + id);
|
||||
$("#competence_ad_" + id).hide();
|
||||
}
|
||||
} else {
|
||||
$("#competence_" + id).prop("checked", false);
|
||||
$("#competence_ad_" + id).hide();
|
||||
$("#competencepopup_" + id).prop("checked", false);
|
||||
}
|
||||
// on génere le json a chaque fois
|
||||
genererJson();
|
||||
}
|
||||
</script>
|
||||
{% endblock %}
|
||||
@@ -1,8 +1,8 @@
|
||||
{% extends 'company/base_dashboard_company.html.twig' %}
|
||||
{% extends 'company/base_dashboard_company_V2.html.twig' %}
|
||||
|
||||
{% block dashContent %}
|
||||
<div class="row bg-bordered p-0">
|
||||
{% include 'company/ad_steps.html.twig' with {'tab':3} %}
|
||||
{# {% include 'company/ad_steps.html.twig' with {'tab':3} %} #}
|
||||
<div class="p-20">
|
||||
<form>
|
||||
<p>
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
<div class="inner">
|
||||
<!-- START BREADCRUMB -->
|
||||
<ol class="breadcrumb">
|
||||
<li class="breadcrumb-item"><a href="#">Accueil</a></li>
|
||||
<li class="breadcrumb-item"><a href="/entreprise/me/">Accueil</a></li>
|
||||
<li class="breadcrumb-item active">Offres d'emploi</li>
|
||||
</ol>
|
||||
<!-- END BREADCRUMB -->
|
||||
@@ -38,6 +38,7 @@
|
||||
<div class="card card-transparent">
|
||||
<div class="card-header ">
|
||||
<div class="card-title">Offres d'emploi
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<div class="card-body">
|
||||
@@ -86,8 +87,7 @@
|
||||
</td>
|
||||
<td class="v-align-middle">
|
||||
{% if ad.getStatus() == "DECLINED" %}
|
||||
<div class="tooltipped" data-position="top" data-delay="50"
|
||||
data-tooltip="{{ ad.moderationText }}">
|
||||
<div class="">
|
||||
<span class="">{{ ad.getStatus()|trans }}</span>
|
||||
<i class="c-pointer fa fa-info-circle color-red" aria-hidden="true"></i>
|
||||
</div>
|
||||
@@ -98,16 +98,13 @@
|
||||
<td class="v-align-middle">
|
||||
{% 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=" td-none" href="{{ path('company_ad_edit', { 'id': ad.id }) }}"
|
||||
style="margin-right: 10px">
|
||||
<i class="pg-icon">pen</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 }) }}"
|
||||
<a class=" td-none" href="{{ path('company_ad_soft_edit', { 'id': ad.id }) }}"
|
||||
style="margin-right: 10px">
|
||||
<i class="pg-icon">pen</i>
|
||||
</a>
|
||||
@@ -115,9 +112,7 @@
|
||||
|
||||
{% 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" href="{{ path('create_media', { 'id': ad.id }) }}">
|
||||
<i class="material-icons">
|
||||
videocam
|
||||
</i>
|
||||
@@ -158,7 +153,9 @@
|
||||
</tr>
|
||||
{% endfor %}
|
||||
{% if ads|length == 0 %}
|
||||
<tr><th colspan="5" class="text-center">Aucune offre pour le moment</th></tr>
|
||||
<tr>
|
||||
<th colspan="5" class="text-center">Aucune offre pour le moment</th>
|
||||
</tr>
|
||||
{% endif %}
|
||||
|
||||
|
||||
@@ -169,4 +166,9 @@
|
||||
</div>
|
||||
<!-- END card -->
|
||||
</div>
|
||||
<!-- END CONTAINER FLUID -->
|
||||
<script type="text/javascript">
|
||||
<!-- END CONTAINER FLUID
|
||||
-->
|
||||
|
||||
|
||||
</script>
|
||||
@@ -9,7 +9,7 @@
|
||||
<div class="inner">
|
||||
<!-- START BREADCRUMB -->
|
||||
<ol class="breadcrumb">
|
||||
<li class="breadcrumb-item"><a href="#">Accueil</a></li>
|
||||
<li class="breadcrumb-item"><a href="/entreprise/me/">Accueil</a></li>
|
||||
<li class="breadcrumb-item active">Candidatures</li>
|
||||
</ol>
|
||||
<!-- END BREADCRUMB -->
|
||||
@@ -59,15 +59,7 @@
|
||||
href="{{ path('company_answer_show',{'id':answer.id }) }}">
|
||||
<i class="pg-icon">eye</i>
|
||||
</a>
|
||||
<a href="#" class="note-action c-pointer" data-func="add" data-answer="{{ answer.id }}">
|
||||
<i class="pg-icon">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="pg-icon">comment</i>
|
||||
</a>
|
||||
{% endfor %}
|
||||
|
||||
</td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
@@ -131,7 +123,7 @@
|
||||
</td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
{% if answers|length == 0 %}
|
||||
{% if spontaneous|length == 0 %}
|
||||
<tr><th colspan="3" class="text-center">Aucune candidature pour le moment</th></tr>
|
||||
{% endif %}
|
||||
</tbody>
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
<div class="inner">
|
||||
<!-- START BREADCRUMB -->
|
||||
<ol class="breadcrumb">
|
||||
<li class="breadcrumb-item"><a href="#">Accueil</a></li>
|
||||
<li class="breadcrumb-item"><a href="/entreprise/me/">Accueil</a></li>
|
||||
<li class="breadcrumb-item ">Candidatures!</li>
|
||||
<li class="breadcrumb-item active"><a
|
||||
href="{{ path('company_ad_answer_list',{'id':answer.ad.id}) }}">{{ answer.ad.title }}</a>
|
||||
|
||||
@@ -17,11 +17,13 @@
|
||||
<div class="inner">
|
||||
<!-- START BREADCRUMB -->
|
||||
<ol class="breadcrumb">
|
||||
<li class="breadcrumb-item"><a href="#">Accueil</a></li>
|
||||
<li class="breadcrumb-item"><a href="/entreprise/me/">Accueil</a></li>
|
||||
<li class="breadcrumb-item "><a href="{{ path('company_answer_list') }}">Candidatures</a></li>
|
||||
<li class="breadcrumb-item"><a
|
||||
href="{{ path('company_ad_answer_list',{'id':answer.ad.id}) }}">{{ answer.ad.title }}
|
||||
<li class="breadcrumb-item">
|
||||
{% if answer.ad%}
|
||||
<a href="{{ path('company_ad_answer_list',{'id':answer.ad.id}) }}">{{ answer.ad.title }}
|
||||
</a>
|
||||
{% endif %}
|
||||
</li>
|
||||
<li class="breadcrumb-item active"><a href="#"> candidat {{ answer.user.firstname }}
|
||||
{{ answer.user.lastname }}</a>
|
||||
@@ -34,50 +36,125 @@
|
||||
</div>
|
||||
</div>
|
||||
<!-- END JUMBOTRON -->
|
||||
|
||||
<div class="col-lg-12">
|
||||
<div class="card card-borderless">
|
||||
<ul class="nav nav-tabs nav-tabs-simple" role="tablist" data-init-reponsive-tabs="dropdownfx">
|
||||
<li class="nav-item">
|
||||
<a class="active" data-toggle="tab" role="tab" data-target="#candidature" href="#"
|
||||
id="candidatureLien">Candidature</a>
|
||||
</li>
|
||||
<li class="nav-item">
|
||||
<a href="#" data-toggle="tab" role="tab" data-target="#messagerieVideo"
|
||||
id="messagerieVideoLien">Messagerie vidéo</a>
|
||||
</li>
|
||||
<li class="nav-item">
|
||||
<a href="#" data-toggle="tab" role="tab" data-target="#messagerie"
|
||||
id="messagerieLien">Messagerie
|
||||
texte</a>
|
||||
</li>
|
||||
|
||||
{# <li class="nav-item">
|
||||
<a href="#" data-toggle="tab" role="tab" data-target="#comment" id="commentLien">Commentaire</a>
|
||||
</li> #}
|
||||
</ul>
|
||||
</div>
|
||||
<div class="tab-content">
|
||||
<!-- ========== bloc candidature ========== -->
|
||||
|
||||
{% include 'company/answer_show_candidature.html.twig' %}
|
||||
|
||||
<!-- ========== bloc message video ========== -->
|
||||
|
||||
{% include 'company/answer_show_message_video.html.twig' %}
|
||||
|
||||
<!-- ========== bloc message texte ========== -->
|
||||
|
||||
{% include 'company/answer_show_message_texte.html.twig' %}
|
||||
|
||||
<!-- ========== bloc commentaire ========== -->
|
||||
|
||||
{# {% include 'company/answer_show_comment.html.twig' %} #}
|
||||
|
||||
|
||||
|
||||
<div class="row">
|
||||
<div class="col-xl-12">
|
||||
<div class="card-body">
|
||||
<div class="col-xl-10 col-sm-12">
|
||||
{% if answer.ad%}
|
||||
<h5> <a href="{{ path('company_ad_answer_list',{'id':answer.ad.id}) }}">{{ answer.ad.title }}</a></h5>
|
||||
{% endif %}
|
||||
<h6>Candidature reçue le {{ answer.cTime|date('d/m/Y') }}</h6>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-xl-12 ">
|
||||
<div class="card card-borderless col-xl-12 col-sm-12">
|
||||
<div class="row profil-candidature">
|
||||
<div class="col-xl-8 col-md-12 p-t-10">
|
||||
<h4 class="bold">{{ answer.user.firstname }} {{ answer.user.lastname }}</h4>
|
||||
<p><i class="material-icons fs-16 tab-icon icons-candidatures">home</i>
|
||||
{% if answer.user.getGeoloc %}
|
||||
{% for adress in answer.user.getGeoloc %}
|
||||
|
||||
{{ adress["locality"] }}, {{ adress["postal_code"] }}
|
||||
{% endfor %}
|
||||
{% else %}
|
||||
Non renseignée
|
||||
{% endif %}
|
||||
</p>
|
||||
<i class="material-icons fs-16 tab-icon icons-candidatures">phone</i><span id="telBouton"
|
||||
class="visible"><a href="#" onClick="afficherNumero()">Afficher le numéro de
|
||||
téléphone</a></span>{% if answer.user.company.extra["phoneTalent"] is defined %} <span
|
||||
id="telSpan" class="invisible">Tel : {{ answer.user.company.extra["phoneTalent"] }}<span>
|
||||
{% endif %}
|
||||
</div>
|
||||
<div class="col-xl-4 col-md-12 profil-candidature-action">
|
||||
<div class="dropdown candidature-action">
|
||||
<button class="btn btn-primary btn-lg dropdown-toggle" type="button" id="dropdownMenu2"
|
||||
data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
|
||||
<span id="libelleBouton">
|
||||
{% if answer.statusReponse =='CONTACTE' %}
|
||||
Contacté
|
||||
{% elseif answer.statusReponse =='REFUSE' %}
|
||||
Refusé
|
||||
{% elseif answer.statusReponse =='EMBAUCHE' %}
|
||||
Embauché
|
||||
{% elseif answer.statusReponse =='ENTRETIEN' %}
|
||||
Entretien programmé
|
||||
{% elseif answer.statusReponse =='A_TRAITER' %}
|
||||
À traiter
|
||||
{% endif %}
|
||||
|
||||
</span>
|
||||
</button>
|
||||
<div class="dropdown-menu" aria-labelledby="dropdownMenu2">
|
||||
<button class="dropdown-item" type="button" onClick="changerStatutAnswer('A_TRAITER', 'A traiter')">A traiter</button>
|
||||
<button class="dropdown-item" type="button"
|
||||
onClick="changerStatutAnswer('CONTACTE', 'Contacté')">Contacté</button>
|
||||
<button class="dropdown-item" type="button"
|
||||
onClick="changerStatutAnswer('REFUSE', 'Refusé')">Refusé</button>
|
||||
<button class="dropdown-item" type="button" onClick="changerStatutAnswer('ENTRETIEN', 'Entretien programmé')">Entretien programmé</button>
|
||||
<button class="dropdown-item" type="button"
|
||||
onClick="changerStatutAnswer('EMBAUCHE', 'Embauché')">Embauché</button>
|
||||
</div>
|
||||
</div>
|
||||
<button aria-label="" type="button" class="btn btn-lg btn-seconday btn-cons">Contacter le candidat</button>
|
||||
</div>
|
||||
</div>
|
||||
<ul class="nav nav-tabs nav-tabs-simple d-none d-md-flex d-lg-flex d-xl-flex" role="tablist"
|
||||
data-init-reponsive-tabs="dropdownfx">
|
||||
<li class="nav-item">
|
||||
<a class="active" data-toggle="tab" role="tab" data-target="#candidature"
|
||||
href="{{ path('company_ad_answer_list',{'id':answer.ad.id}) }}" id="candidatureLien">Candidature</a>
|
||||
</li>
|
||||
<li class="nav-item">
|
||||
<a href="{{ path('company_ad_answer_list',{'id':answer.ad.id}) }}" data-toggle="tab" role="tab"
|
||||
data-target="#messagerieVideo" id="messagerieVideoLien">Messagerie</a>
|
||||
</li>
|
||||
</ul>
|
||||
<div class="nav-tab-dropdown cs-wrapper full-width d-lg-none d-xl-none d-md-none">
|
||||
<div class="cs-select cs-skin-slide full-width" tabindex="0"><span class="cs-placeholder">Candidature</span>
|
||||
<div class="cs-options">
|
||||
<ul>
|
||||
<li data-option="" data-value="#candidature"><span>Candidature</span></li>
|
||||
<li data-option="" data-value="#messagerieVideo"><span>Messagerie vidéo</span></li>
|
||||
<li data-option="" data-value="#messagerie"><span>Messagerie
|
||||
texte</span></li>
|
||||
</ul>
|
||||
</div><select class="cs-select cs-skin-slide full-width" data-init-plugin="cs-select">
|
||||
<option value="#candidature" selected="">Candidature</option>
|
||||
<option value="#messagerieVideo">Messagerie vidéo</option>
|
||||
<option value="#messagerie">Messagerie
|
||||
texte</option>
|
||||
</select>
|
||||
<div class="cs-backdrop"></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-xl-12 bg-white details-candidature">
|
||||
<div class="tab-content">
|
||||
<!-- ========== bloc candidature ========== -->
|
||||
|
||||
{% include 'company/answer_show_candidature.html.twig' %}
|
||||
|
||||
<!-- ========== bloc message video ========== -->
|
||||
|
||||
{% include 'company/answer_show_message_video.html.twig' %}
|
||||
|
||||
<!-- ========== bloc message texte ========== -->
|
||||
|
||||
{# {% include 'company/answer_show_message_texte.html.twig' %} #}
|
||||
|
||||
<!-- ========== bloc commentaire ========== -->
|
||||
|
||||
{# {% include 'company/answer_show_comment.html.twig' %} #}
|
||||
|
||||
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
@@ -105,6 +182,46 @@
|
||||
<script src="{{ asset('/js/demo.js') }}"></script>
|
||||
<script src="{{ asset('/js/scripts.js') }}"></script>
|
||||
<script type="text/javascript">
|
||||
function changerStatutAnswer(item, valeurBouton) {
|
||||
console.log(item);
|
||||
console.log({{answer.id}});
|
||||
$("#libelleBouton").text(valeurBouton);
|
||||
$.ajax({
|
||||
//L'URL de la requête
|
||||
url: "/app_dev.php/anwser/updateStatus/{{answer.id}}",
|
||||
//url: '{{ path("anwser_share", {"id":'+id+'}) }}',
|
||||
//La méthode d'envoi (type de requête)
|
||||
method: "GET",
|
||||
data: 'status=' + item,
|
||||
//Le format de réponse attendu
|
||||
dataType: "json",
|
||||
})
|
||||
//Ce code sera exécuté en cas de succès - La réponse du serveur est passée à done()
|
||||
/*On peut par exemple convertir cette réponse en chaine JSON et insérer
|
||||
* cette chaine dans un div id="res"*/
|
||||
.done(function (response) {
|
||||
console.log("La requête s'est terminée avec succes. Infos : " + JSON.stringify(response));
|
||||
})
|
||||
|
||||
//Ce code sera exécuté en cas d'échec - L'erreur est passée à fail()
|
||||
//On peut afficher les informations relatives à la requête et à l'erreur
|
||||
.fail(function (error) {
|
||||
console.log("La requête s'est terminée en échec. Infos : " + JSON.stringify(error));
|
||||
})
|
||||
|
||||
//Ce code sera exécuté que la requête soit un succès ou un échec
|
||||
.always(function () {
|
||||
console.log("Requête effectuée");
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
|
||||
function afficherNumero() {
|
||||
$("#telBouton").hide();
|
||||
$("#telSpan").removeClass("invisible").addClass("visible");
|
||||
|
||||
}
|
||||
$(".card-action").click(function () {
|
||||
var idVideo = $(this).data("id");
|
||||
var titleVideo = $(this).data("title");
|
||||
|
||||
+110
-7
@@ -1,4 +1,96 @@
|
||||
<!-- ========== bloc candidature ========== -->
|
||||
<div class="tab-pane active" id="candidature">
|
||||
<div class="row ">
|
||||
<div class="col-xl-7 col-lg-6">
|
||||
|
||||
<!-- START card -->
|
||||
|
||||
<div class="full-height">
|
||||
<div class="card-body">
|
||||
<h5><i class="material-icons fs-18 tab-icon icons-candidatures">videocam</i>Candidature vidéo</h5>
|
||||
<iframe src="https://player.vimeo.com/video/{{ answer.video.cdnUrl|replace({ "/videos/": ""}) }}"
|
||||
width="100%" height="300px" frameborder="0" webkitallowfullscreen mozallowfullscreen
|
||||
allowfullscreen></iframe>
|
||||
|
||||
</div>
|
||||
<div class="card-body row">
|
||||
<div class="col-8">
|
||||
<h5><i class="material-icons fs-18 tab-icon icons-candidatures">text_snippet</i>Curriculum vitae
|
||||
</h5>
|
||||
</div>
|
||||
<div class="col-4">
|
||||
<a href="/uploads/cv/{{ answer.user.company.cv }}" target="_blank">
|
||||
<button aria-label="" type="button" class="btn btn-lg btn-seconday btn-cons m-b-10">Télécharger
|
||||
le CV</button>
|
||||
</a>
|
||||
</div>
|
||||
{% if extension=="doc" or extension=="docx" %}
|
||||
<iframe width="100%" height="600"
|
||||
src="http://docs.google.com/gview?url=https://www.recruteur.talentstube.com/uploads/cv/{{ answer.user.company.cv }}"></iframe>
|
||||
|
||||
{% else %}
|
||||
<iframe width="100%" height="600"
|
||||
src="/uploads/cv/{{ answer.user.company.cv }}"></iframe>
|
||||
{% endif %}
|
||||
|
||||
<!--<iframe width="100%" height="600" src="http://docs.google.com/gview?url=http://qualite-en-recherche.cnrs.fr/IMG/doc/pr-m1-09-ressources_humaines-30-1.doc&embedded=true"></iframe>-->
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<!-- END card -->
|
||||
</div>
|
||||
<div class="col-xl-5 col-lg-6">
|
||||
<!-- START card -->
|
||||
<div class="card-body">
|
||||
{{ form_start(formNote) }}
|
||||
<div class="form-group">
|
||||
<i class="material-icons fs-18 tab-icon icons-candidatures">comment</i><label for="">
|
||||
<h5>Commentaires</h5>
|
||||
</label>
|
||||
{# <textarea class="form-control" id="exampleFormControlTextarea1"
|
||||
placeholder="Ce commentaire sera visible uniquement par vous et les autres utilisateurs de l’espace recruteur."
|
||||
rows="5"></textarea> #}
|
||||
{{ form_widget(formNote.content) }}
|
||||
</div>
|
||||
<button class="btn btn btn-lg btn-outline-primary" type="submit">Valider le commentaire</button>
|
||||
{{ form_end(formNote) }}
|
||||
|
||||
|
||||
{% for note in answer.notes %}
|
||||
<div class="card card-body">
|
||||
<h6 class="card-title">{{ note.author.firstname }} {{ note.author.lastname }}</h6>
|
||||
<p class="card-text">{{ note.content }}</p>
|
||||
</div>
|
||||
|
||||
{% endfor %}
|
||||
|
||||
|
||||
</div>
|
||||
<!-- === Début : Bloc aide - À garder pour la prochaine v2
|
||||
<div class="card-body">
|
||||
<div class="form-group">
|
||||
<i class="material-icons fs-18 tab-icon icons-candidatures">help_center</i><label for="">
|
||||
<h5>Besoin d'aide</h5>
|
||||
</label>
|
||||
</div>
|
||||
<div class="lien-aide">
|
||||
<a href="">Comment répondre aux candidats en vidéo ?</a>
|
||||
</div>
|
||||
<div class="lien-aide">
|
||||
<a href="">Comment contacter un candidat ?</a>
|
||||
</div>
|
||||
</div>-->
|
||||
<!-- === Début : Bloc aide - À garder pour la prochaine v2-->
|
||||
|
||||
</div>
|
||||
<!-- END card -->
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- ========== bloc message texte + video ========== -->
|
||||
{#
|
||||
|
||||
<div class="tab-pane active" id="">
|
||||
<div class="row ">
|
||||
<div class="col-xl-7 col-lg-6 bg-white">
|
||||
<!-- START card -->
|
||||
@@ -16,8 +108,9 @@
|
||||
<div class="card card-transparent">
|
||||
<div class="card-header ">
|
||||
<div class="card-title">
|
||||
|
||||
{% if answer.ad%}
|
||||
<a href="{{ path('company_ad_answer_list',{'id':answer.ad.id}) }}">{{ answer.ad.title }}</a>
|
||||
{% endif %}
|
||||
</div>
|
||||
</div>
|
||||
<div class="card-body">
|
||||
@@ -39,6 +132,14 @@
|
||||
<p class="small hint-text m-t-5">{{ answer.user.firstname }}
|
||||
{{ answer.user.lastname }}
|
||||
</p>
|
||||
<p class="small hint-text m-t-5">
|
||||
{% if answer.user.company %}
|
||||
{% if answer.user.company.cv %}
|
||||
<a href="/uploads/cv/{{ answer.user.company.cv }}" target="_blank"><button aria-label=""
|
||||
type="button" class="btn btn-outline-primary">Télécharger le cv</button></a>
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -80,10 +181,10 @@
|
||||
<!-- NOTE * : Inline Style Width For Table Cell is Required as it may differ from user to user
|
||||
Comman Practice Followed
|
||||
-->
|
||||
|
||||
|
||||
<th style="width:15%">Objet</th>
|
||||
<th style="width:15%">Message</th>
|
||||
<th style="width:70%">Envoyé le</th>
|
||||
<th style="width:15%">Envoyé le</th>
|
||||
<th style="width:70%">Message</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
@@ -117,14 +218,16 @@
|
||||
</tr>
|
||||
{% endfor %}
|
||||
{% if answer.messages|length == 0 %}
|
||||
<tr><th colspan="3" class="text-center">Aucun message pour le moment</th></tr>
|
||||
<tr>
|
||||
<th colspan="3" class="text-center">Aucun message pour le moment</th>
|
||||
</tr>
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
|
||||
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div> #}
|
||||
+1
-1
@@ -93,7 +93,7 @@
|
||||
</div> #}
|
||||
</div>
|
||||
<div class="form-group form-group-default required">
|
||||
{{ form_row(form.status) }}
|
||||
{# {{ form_row(form.status) }} #}
|
||||
</div>
|
||||
<div class="form-group required">
|
||||
{{ form_row(form.message) }}
|
||||
|
||||
+175
-48
@@ -1,62 +1,189 @@
|
||||
<div class="tab-pane fondBlanc" id="messagerieVideo">
|
||||
<div class="row fondBlanc">
|
||||
<div class="tab-pane" id="messagerieVideo">
|
||||
<div class="row">
|
||||
<div class="col-xl-7 col-lg-6">
|
||||
<div class="full-height">
|
||||
<div class="card-body">
|
||||
<h5><i
|
||||
class="material-icons fs-18 tab-icon icons-candidatures">message</i>Envoyer
|
||||
un message au candidat</h5>
|
||||
{{ form_start(formVideo) }}
|
||||
{{ form_widget(formVideo._token, { 'id': 'token_video' }) }}
|
||||
<div class="form-group form-group-default">
|
||||
<label class="active">De : </label>
|
||||
<input name="to" data-role="tagsinput" disabled
|
||||
class="form-control tagsinput" type="text"
|
||||
value="{{ app.user.firstname }} {{ app.user.lastname }}" />
|
||||
</div>
|
||||
|
||||
<!-- START ITEM -->
|
||||
<div class="col-lg-4 fondBlanc">
|
||||
<div class="card card-default bg-success">
|
||||
<div class="card-header separator">
|
||||
<div class="card-title">Réponse vidéo
|
||||
</div>
|
||||
</div>
|
||||
<div class="card-body">
|
||||
<h3>
|
||||
<span class="semi-bold">Et si vous répondiez à </span> {{ answer.user.firstname }} {{ answer.user.lastname }} <b>en vidéo</b></h3>
|
||||
<p>Découvrez <a href="https://blog.talentstube.com/articles-entreprise/comment-faire-une-video-avec-une-webcam/" target="_blank">nos conseils</a> pour réaliser une vidéo de réponse.</p>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!-- END ITEM -->
|
||||
<div class="form-group form-group-default" style="min-height:250px;">
|
||||
<label for="contact_talent_message" class="active">Message</label>
|
||||
{# <textarea id="contact_talent_message"
|
||||
name="contact_talent[message]" required="required"
|
||||
class="form-control"
|
||||
placeholder="Rédigez un message de réponse"></textarea> #}
|
||||
{{ form_widget(formVideo.message) }}
|
||||
</div>
|
||||
<!--<h6>Et si vous répondiez à [Nom du candidat] en vidéo ?</h6>-->
|
||||
<p class="m-l-10 bold">Vous pouvez joindre une vidéo de réponse</p>
|
||||
<p class="m-l-10">Pour une meilleure expérience candidat, motivez les
|
||||
raisons de votre choix en vidéo.</p>
|
||||
{% include 'message/message_create_import.twig' %}
|
||||
<div class="form-group m-t-20" ;>
|
||||
<button type="submit" aria-label=""
|
||||
class="btn btn-primary btn-lg disabled">Envoyer le
|
||||
message</button>
|
||||
</div>
|
||||
<div class="m-t-30">
|
||||
<div class="row fondBlanc">
|
||||
<h5><i
|
||||
class="material-icons fs-18 tab-icon icons-candidatures">inbox</i>Historique
|
||||
des messages envoyés</h5>
|
||||
</div>
|
||||
<div class="row fondBlanc">
|
||||
<div class="card-body">
|
||||
<div class="table-responsive">
|
||||
<table class="table table-hover" id="basicTable">
|
||||
<thead>
|
||||
<tr>
|
||||
<!-- NOTE * : Inline Style Width For Table Cell is Required as it may differ from user to user
|
||||
Comman Practice Followed
|
||||
-->
|
||||
<th style="width:20%">Envoyé le</th>
|
||||
<th style="width:30%">Expéditeur</th>
|
||||
<th style="width:50%">Message</th>
|
||||
</tr>
|
||||
{% if answer.messages %}
|
||||
{% for message in answer.messages if message.status != "DRAFT" %}
|
||||
{% set class = '' %}
|
||||
{% if loop.index > 1 %}
|
||||
{% set class = 'history-hidden' %}
|
||||
{% endif %}
|
||||
<tr>
|
||||
<td class="v-align-middle">
|
||||
|
||||
{{ message.uTime|date('d-m-Y h:m') }}
|
||||
|
||||
</td>
|
||||
<td class="v-align-middle ">
|
||||
{% if message.sender.company.type =="COMPANY" %}
|
||||
Recruteur
|
||||
{% elseif message.sender.company.type =="TALENT" %}
|
||||
Talent
|
||||
{% endif %}
|
||||
</td>
|
||||
<td class="v-align-middle">
|
||||
{% 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 }}
|
||||
</td>
|
||||
|
||||
</tr>
|
||||
{% endfor %}
|
||||
{% if answer.messages|length == 0 %}
|
||||
<tr>
|
||||
<th colspan="3" class="text-center">Aucun
|
||||
message pour le moment</th>
|
||||
</tr>
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
|
||||
|
||||
</thead>
|
||||
<tbody>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!-- END COMPOSE EMAIL -->
|
||||
|
||||
{{ form_end(formVideo) }}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
<div class="tab-pane fondBlanc" id="">
|
||||
<div class="row fondBlanc">
|
||||
|
||||
<!-- START ITEM -->
|
||||
<div class="col-lg-4 fondBlanc">
|
||||
<div class="card card-default bg-success">
|
||||
<div class="card-header separator">
|
||||
<div class="card-title">Réponse vidéo
|
||||
</div>
|
||||
</div>
|
||||
<div class="card-body">
|
||||
<h3>
|
||||
<span class="semi-bold">Et si vous répondiez à </span> Celia Machin
|
||||
Auriol <b>en vidéo</b>
|
||||
</h3>
|
||||
<p>Découvrez <a
|
||||
href="https://blog.talentstube.com/articles-entreprise/comment-faire-une-video-avec-une-webcam/"
|
||||
target="_blank">nos conseils</a> pour réaliser une vidéo de
|
||||
réponse.</p>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!-- END ITEM -->
|
||||
|
||||
|
||||
|
||||
|
||||
<div class="col-md-12 col-lg-8 col-xlg-8 md-m-t-10">
|
||||
<!-- START WIDGET widget_weatherWidget-->
|
||||
<div class="widget-17 card no-border no-margin widget-loader-circle">
|
||||
<div class="widget-16-header p-r-20 p-l-20 p-t-10 d-flex">
|
||||
<span class="icon-thumbnail bg-contrast-low pull-left text-color pg-icon">M</span>
|
||||
<div class="flex-1 full-width overflow-ellipsis">
|
||||
<p class="hint-text all-caps font-montserrat small no-margin overflow-ellipsis ">
|
||||
Contacter
|
||||
</p>
|
||||
<h6 class="no-margin overflow-ellipsis ">par vidéo</h6>
|
||||
</div>
|
||||
</div>
|
||||
<div class="card-body">
|
||||
{{ form_start(formVideo) }}
|
||||
{{ form_widget(formVideo._token, { 'id': 'token_video' }) }}
|
||||
<div class="col-md-12 col-lg-8 col-xlg-8 md-m-t-10">
|
||||
<!-- START WIDGET widget_weatherWidget-->
|
||||
<div class="widget-17 card no-border no-margin widget-loader-circle">
|
||||
<div class="widget-16-header p-r-20 p-l-20 p-t-10 d-flex">
|
||||
<span
|
||||
class="icon-thumbnail bg-contrast-low pull-left text-color pg-icon">M</span>
|
||||
<div class="flex-1 full-width overflow-ellipsis">
|
||||
<p
|
||||
class="hint-text all-caps font-montserrat small no-margin overflow-ellipsis ">
|
||||
Contacter
|
||||
</p>
|
||||
<h6 class="no-margin overflow-ellipsis ">par vidéo</h6>
|
||||
</div>
|
||||
</div>
|
||||
<div class="card-body">
|
||||
{{ form_start(formVideo) }}
|
||||
{{ form_widget(formVideo._token, { 'id': 'token_video' }) }}
|
||||
|
||||
|
||||
|
||||
{% include 'message/message_create_import.twig' %}
|
||||
<br />
|
||||
{{ form_widget(formVideo.status, { 'id': 'contact_talent_status_video' }) }}
|
||||
{{ form_rest(formVideo) }}
|
||||
<br />
|
||||
<div class="bottom-form">
|
||||
<button type="submit" class="btn btn-default disabled">Envoyer</button>
|
||||
</div>
|
||||
{% include 'message/message_create_import.twig' %}
|
||||
<br />
|
||||
{# {{ form_widget(formVideo.status, { 'id': 'contact_talent_status_video' }) }} #}
|
||||
{{ form_rest(formVideo) }}
|
||||
<br />
|
||||
<div class="bottom-form">
|
||||
<button type="submit" class="btn btn-default disabled">Envoyer</button>
|
||||
</div>
|
||||
|
||||
{{ form_end(formVideo) }}
|
||||
</div>
|
||||
</div>
|
||||
<!-- END WIDGET -->
|
||||
</div>
|
||||
{{ form_end(formVideo) }}
|
||||
</div>
|
||||
</div>
|
||||
<!-- END WIDGET -->
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
{% extends 'base_dashboard_temporaire.html.twig' %}
|
||||
{% extends 'admin/base_dashboard.html.twig' %}
|
||||
|
||||
|
||||
{% block content %}
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
{% extends 'base.html.twig' %}
|
||||
{% extends 'basetemporaire.html.twig' %}
|
||||
|
||||
|
||||
{% block title %}Offres d'emploi et recrutement {{ company.brandName }} | TalentsTube{% endblock %}
|
||||
|
||||
@@ -51,7 +51,7 @@
|
||||
<div class="inner">
|
||||
<!-- START BREADCRUMB -->
|
||||
<ol class="breadcrumb">
|
||||
<li class="breadcrumb-item"><a href="/">Accueil</a></li>
|
||||
<li class="breadcrumb-item"><a href="/entreprise/me/">Accueil</a></li>
|
||||
<li class="breadcrumb-item"><a href="{{ path('company_ad') }}">Offres d'emploi</a></li>
|
||||
|
||||
</ol>
|
||||
@@ -62,73 +62,112 @@
|
||||
</div>
|
||||
<!-- END JUMBOTRON -->
|
||||
<div class=" container-fluid container-fixed-lg">
|
||||
<div id="rootwizard" class="m-t-50">
|
||||
<div class="col-lg-8 bloc-header">
|
||||
<div class="card card-default container">
|
||||
<div class="card-body">
|
||||
<div class="row" style="min-height:10rem;">
|
||||
<div class="col-8">
|
||||
<h4 class="header-title" style="font-size:2em;line-height:1.5em;">Création d'une offre d'emploi vidéo</h4>
|
||||
<p>Pour trouver le bon profil, renseignez et personnalisez votre annonce. <br>Plus votre annonce est précise et attractive, plus les candidatures seront ciblées.</p>
|
||||
</div>
|
||||
<div class="col-4" style="background-repeat: no-repeat; background-image: url('https://blog.talentstube.com/wp-content/uploads/2021/02/creer-offre-emploi-video.svg');background-size: contain;background-position: center;">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div id="rootwizard" class="col-lg-10 m-t-50">
|
||||
{% include 'company/ad_stepsV2.html.twig' with {'tab':2} %}
|
||||
|
||||
<div class="tab-content">
|
||||
<div class="tab-pane padding-20 sm-no-padding slide-left disabled" id="tab1">
|
||||
<div class="row row-same-height">
|
||||
<div class="col-md-5 b-r b-dashed b-grey sm-b-b">
|
||||
<div class="padding-30 sm-padding-5 sm-m-t-15 m-t-50">
|
||||
<i class="material-icons hint-text">shopping_cart</i>
|
||||
<h2>Etape 1 : détail de l'annonce</h2>
|
||||
<p>Pour trouver le bon profil, renseignez et personnalisez votre annonce.
|
||||
Plus votre annonce est précise et attractive, plus les candidatures seront ciblées.
|
||||
Afin de créer votre annonce, renseignez l’ensemble des champs relatifs au poste proposé.</p>
|
||||
{# <p class="small hint-text">Below is a sample page for your cart , Created using pages design
|
||||
UI Elementes</p> #}
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-7">
|
||||
<div class="padding-30 sm-padding-5">
|
||||
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="tab-pane slide-left padding-20 sm-no-padding active" id="tab2">
|
||||
<div class="row row-same-height">
|
||||
<div class="col-md-5 b-r b-dashed b-grey ">
|
||||
<div class="padding-30 sm-padding-5 sm-m-t-15 m-t-50">
|
||||
<div class="col-md-12 col-xl-6 ">
|
||||
<div class="container-envoi-videos">
|
||||
<div class="titre-bloc-envoi-videos">
|
||||
<img src='https://www.talentstube.com/statique/images/capture.svg'class="image-envoi-video"/img>
|
||||
<div class="texte-envoi-video">
|
||||
<h4>Choix n°1</h4>
|
||||
<h5>J’<span class="underline">envoie</span> mes séquences vidéo à Talents Tube</h5>
|
||||
</div>
|
||||
</div>
|
||||
<div class="contenu-bloc-envoi-videos">
|
||||
{{ form_start(formFile, {'attr': { 'id': 'form_file' } }) }}
|
||||
{# {{ form_row(form.brochure) }}
|
||||
{{ form_row(form.brochure1) }}
|
||||
{{ form_row(form.brochure2) }} #}
|
||||
<p>Envoyez les séquences vidéo et Talents Tube s’occupe pour vous du montage complet de votre offre d’emploi sous <span class="underline">48h</span></p>
|
||||
<label for="etape-import-video">Vidéo 1 : Présentation de l’entreprise</label>
|
||||
{{ form_row(formFile.file1) }}
|
||||
{# <input type="file" id="avatar" name="avatar" accept="image/png, image/jpeg"> #}
|
||||
<label for="etape-import-video">Vidéo 2 : Présentation du poste et des missions</label>
|
||||
{{ form_row(formFile.file2) }}
|
||||
{# <input type="file" id="avatar" name="avatar" accept="image/png, image/jpeg"> #}
|
||||
<label for="etape-import-video">Vidéo 3 : Témoignage d’un collaborateur</label>
|
||||
{{ form_row(formFile.file3) }}
|
||||
{# <input type="file" id="avatar" name="avatar" accept="image/png, image/jpeg"> #}
|
||||
{# <button aria-label="" class="btn btn-info btn-lg btn-icon-right m-b-10" type="submit"><span class="">Envoyer les séquences vidéo</span><i class="pg-icon" onclick="$("#encours").show();">send</i></button> #}
|
||||
<button aria-label class="btn btn-info btn-lg m-b-10" type="submit" onClick='$("#encours").show();'><span class="">Envoyer les séquences vidéo</span></button>
|
||||
|
||||
{{ form_end(formFile) }}
|
||||
{% if message !="" %}
|
||||
<div class="green center-align" style="border-radius:10px;padding:20px;color:#FFF;">{{ message }}</div>
|
||||
{% else %}
|
||||
<div class=" center-align" id="encours">Vos séquences vidéo sont en cours d’envoi...
|
||||
Veuillez rester sur la page pendant le chargement qui peut durer plusieurs minutes.
|
||||
</div>
|
||||
|
||||
{% endif %}
|
||||
</div>
|
||||
</div>
|
||||
<!--<div class="padding-30 sm-padding-5 sm-m-t-15 m-t-50">
|
||||
<h2>J'importe une vidéo</h2>
|
||||
<p>Importez votre vidéo de recrutement et publiez votre annonce.
|
||||
Vous ne possédez pas encore de vidéo ?
|
||||
Talents Tube peut vous accompagner dans la réalisation de votre
|
||||
vidéo d'offre d'emploi. <a href="https://blog.talentstube.com/contact" target="_blank">Contactez-nous</a></p>
|
||||
{# <p class="small hint-text">Below is a sample page for your cart , Created using pages design
|
||||
UI Elementes</p> #}
|
||||
{# <ul id="tabs-video" class="tabs">
|
||||
<li class="tab col s4"><a class="active" href="#tab-video-new">Ajouter une nouvelle vidéo</a>
|
||||
</li>
|
||||
<li class="tab col s4"><a href="#tab-video-select">Utiliser une vidéo existante</a></li>
|
||||
</ul> #}
|
||||
</div>
|
||||
</div>-->
|
||||
</div>
|
||||
<div class="col-md-7">
|
||||
<div class="padding-30 sm-padding-5" id="tab-video-new">
|
||||
{% include 'media/dropzoneV2.html.twig' %}
|
||||
{{ form_start(form, {'attr': { 'id': 'form_media' } }) }}
|
||||
{{ form_row(form.title) }}
|
||||
<br/>
|
||||
<a href="{{ path('company_ad_edit',{"id": ad.getId()}) }}" class="btn btn-round btn-dark">
|
||||
<button aria-label="" class="btn btn-primary btn-cons btn-animated from-left pull-right"
|
||||
type="button">
|
||||
<span>Retour au détail de l'annonce </span>
|
||||
<span class="hidden-block">
|
||||
<i class="material-icons fs-16">info</i>
|
||||
</span>
|
||||
</button>
|
||||
</a>
|
||||
<button aria-label="" id="submit" type="submit" class="btn btn-primary btn-cons btn-animated from-left pull-right hide"
|
||||
type="button">
|
||||
<span>Valider l'annonce</span>
|
||||
<span class="hidden-block">
|
||||
<i class="material-icons fs-16">save</i>
|
||||
</span>
|
||||
</button>
|
||||
|
||||
{{ form_end(form) }}
|
||||
<div class="col-md-12 col-xl-6">
|
||||
<div class="padding sm-padding-5" id="tab-video-new">
|
||||
<div class="container-envoi-videos">
|
||||
<div class="titre-bloc-envoi-videos">
|
||||
<img src='https://www.talentstube.com/statique/images/Import-video-recruteur.svg'class="image-envoi-video"/img>
|
||||
<div class="texte-envoi-video">
|
||||
<h4>Choix n°2</h4>
|
||||
<h5>J’<span class="underline">importe</span> ma vidéo d’offre d’emploi</h5>
|
||||
</div>
|
||||
</div>
|
||||
<div class="contenu-bloc-envoi-videos">
|
||||
{% include 'media/dropzoneV2.html.twig' %}
|
||||
{{ form_start(form, {'attr': { 'id': 'form_media' } }) }}
|
||||
{{ form_row(form.title) }}
|
||||
{# {{ form_row(form.brochure) }}
|
||||
{{ form_row(form.brochure1) }}
|
||||
{{ form_row(form.brochure2) }} #}
|
||||
<br/>
|
||||
<div class="row">
|
||||
<div class="col-6">
|
||||
<a href="{{ path('company_ad_edit',{"id": ad.getId()}) }}" >
|
||||
<button aria-label="" class="btn btn-default btn-lg m-b-10"
|
||||
type="button">
|
||||
<span>Retour </span>
|
||||
|
||||
</button>
|
||||
</a>
|
||||
</div>
|
||||
<div class="col-6">
|
||||
<button aria-label="" id="submit" type="submit" class="btn btn-primary btn-lg m-b-10 hide"
|
||||
type="button">
|
||||
<span>Publier l'offre</span>
|
||||
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
{{ form_end(form) }}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div id="tab-video-select" class="col s12">
|
||||
<div class="row">
|
||||
@@ -210,10 +249,7 @@ vidéo d'offre d'emploi. <a href="https://blog.talentstube.com/contact" target="
|
||||
</li>
|
||||
</ul> #}
|
||||
</div>
|
||||
<div class="wizard-footer padding-20 bg-contrast-low">
|
||||
|
||||
<div class="clearfix"></div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -243,6 +279,7 @@ vidéo d'offre d'emploi. <a href="https://blog.talentstube.com/contact" target="
|
||||
});
|
||||
</script>
|
||||
<script type="text/javascript">
|
||||
$("#encours").hide();
|
||||
var urlDropzone = '{{ path("upload_media", {"id": ad.getId()}) }}';
|
||||
var urlDelete = '{{ path("delete_media", {"id": ad.getId() }) }}'
|
||||
var idObject = '{{ ad.getId() }}';
|
||||
|
||||
@@ -49,190 +49,524 @@
|
||||
<a href="{{ path('company_profile') }}">à les remplir ici. <i class="fa fa-link" aria-hidden="true"></i></a>
|
||||
</div>
|
||||
</div>
|
||||
<script>
|
||||
document.location.href = "/entreprise/me/profil";
|
||||
</script>
|
||||
|
||||
{# {{ render("/entreprise/me/profil") }} #}
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
{% include 'company/ad_table_listing.html.twig' with {'ads':ads} %}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<!-- START JUMBOTRON -->
|
||||
<div class="jumbotron" data-pages="parallax">
|
||||
<div class=" container-fluid container-fixed-lg sm-p-l-0 sm-p-r-0">
|
||||
<div class="inner" style="transform: translateY(0px); opacity: 1;">
|
||||
<!-- START BREADCRUMB -->
|
||||
<ol class="breadcrumb">
|
||||
<li class="breadcrumb-item"><a href="https://recruteur.talentstube.com/entreprise/me/">Accueil</a></li>
|
||||
</ol>
|
||||
<!-- END BREADCRUMB -->
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!-- END JUMBOTRON -->
|
||||
<!--Boutons actions Tableau de bord -->
|
||||
|
||||
<div class=" container-fluid container-fixed-lg bloc-tdb">
|
||||
<!-- START card -->
|
||||
<div class="col-lg-12">
|
||||
<div class="card card-default container">
|
||||
<div class="row">
|
||||
<div class="col-md">
|
||||
<button class="card-action" type="button">
|
||||
<a href="{{path('company_ad_create')}}">
|
||||
<span class="material-icons">movie_creation</span>
|
||||
<div class="row lien-fleche" style="justify-content: center; align-items: center">
|
||||
<h6 class="col-10">Créer une offre d’emploi vidéo</h6>
|
||||
<span class="material-icons col-2 fleche">arrow_right_alt</span>
|
||||
</div>
|
||||
</a>
|
||||
</button>
|
||||
</div>
|
||||
<div class="col-md" type="button">
|
||||
|
||||
<button class="card-action" style="" type="button">
|
||||
<a href="{{path('company_ad')}}">
|
||||
<span class="material-icons" style="">work</span>
|
||||
<div class="row lien-fleche" style="justify-content: center; align-items: center">
|
||||
<h6 class="col-10">Gérer mes offres d’emploi</h6>
|
||||
<span class="material-icons col-2 fleche">arrow_right_alt</span>
|
||||
</div>
|
||||
</a>
|
||||
</button>
|
||||
</div>
|
||||
<div class="col-md" type="button">
|
||||
<button class="card-action" style="" type="button">
|
||||
|
||||
<a href="{{path('company_answer_list')}}">
|
||||
<span class="material-icons" style="">face</span>
|
||||
<div class="row lien-fleche" style="justify-content: center; align-items: center">
|
||||
<h6 class="col-10">Gérer mes candidatures</h6>
|
||||
<span class="material-icons col-2 fleche">arrow_right_alt</span>
|
||||
</div>
|
||||
</a>
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!--Fin Boutons actions Tableau de bord -->
|
||||
|
||||
<!--Blocs statistiques Tableau de bord -->
|
||||
<div class=" container-fluid container-fixed-lg bloc-tdb">
|
||||
<!-- START card -->
|
||||
<div class="col-lg-12">
|
||||
<div class="card card-default container">
|
||||
<div class="row">
|
||||
<div class="col-lg text-card">
|
||||
<div class="bloc-stats">
|
||||
<span class="font-montserrat fs-11 all-caps">Nombre total de candidats</span>
|
||||
<h3 class="bold no-margin p-b-5"><a class="bold no-margin p-b-5"
|
||||
href="{{ path('company_answer_list') }}">{{nbAnswersSended}}</a></h3>
|
||||
<span class="fs-12 ">Nouveaux candidats</span>
|
||||
<h4 class="bold no-margin" class=""><a class="bold no-margin"
|
||||
href="{{ path('company_answer_list') }}">+{{nbAnswersSended}}</a></h4>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-lg text-card">
|
||||
<div class="bloc-stats">
|
||||
<span class="font-montserrat fs-11 all-caps">Visites de la page entreprise</span>
|
||||
<h3 class="bold no-margin p-b-5">{{ records.totalRecordsCompany }}</h3>
|
||||
<div class="row">
|
||||
<div class="col-sm vertical-border" border-right: 1px solid white;>
|
||||
<span class="fs-12">7 derniers jours</span>
|
||||
<h4 class="bold no-margin">+{{ records7days.totalRecordsCompany }}</h4>
|
||||
</div>
|
||||
<div class="col-sm">
|
||||
<span class="fs-12">30 derniers jours</span>
|
||||
<h4 class="bold no-margin" style="opacity:0.75">+{{ records30days.totalRecordsCompany }}
|
||||
</h4>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-lg text-card">
|
||||
<div class="bloc-stats">
|
||||
<span class="font-montserrat fs-11 all-caps">Vues globales des offres d’emploi</span>
|
||||
<h3 class="bold no-margin p-b-5">{{ records.totalRecords-records.totalRecordsCompany }}</h3>
|
||||
<div class="row">
|
||||
<div class="col-sm vertical-border">
|
||||
<span class="fs-12">7 derniers jours</span>
|
||||
<h4 class="bold no-margin">
|
||||
+{{ records7days.totalRecords-records7days.totalRecordsCompany }}</h4>
|
||||
</div>
|
||||
<div class="col-sm">
|
||||
<span class="fs-12">30 derniers jours</span>
|
||||
<h4 class="bold no-margin" style="opacity:0.75">+{{ records30days.totalRecordsCompany }}
|
||||
</h4>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!--Fin Blocs statistiques Tableau de bord -->
|
||||
|
||||
|
||||
<!-- START CONTAINER FLUID -->
|
||||
<!-- START CONTAINER FLUID -->
|
||||
{# <div class=" container-fluid container-fixed-lg bg-white">
|
||||
<!-- START card -->
|
||||
<div class="card card-transparent">
|
||||
<div class="card-header ">
|
||||
<div class="card-title">Statistiques</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col-lg-12 col-xl-12 col-xlg-12">
|
||||
<div class="col-md-12 m-b-10" style="display:flex;">
|
||||
<!-- Nombre de candidatures vidéo - START WIDGET D3 widget_graphTileFlat-->
|
||||
<div class="widget-8 card m-r-15 widget-loader-bar card-header card-background-1">
|
||||
<div class="container-xs-height">
|
||||
<!--full-height-->
|
||||
<div class="">
|
||||
<!--row-xs-height -->
|
||||
<div class="col-xs-height col-top">
|
||||
<div class="">
|
||||
<!--card-header top-left top-right -->
|
||||
<div class="card-title text-card">
|
||||
<span class="font-montserrat fs-11 all-caps">Nombre total de
|
||||
candidats</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row-xs-height">
|
||||
<div class="col-xs-height col-top relative">
|
||||
<div class="row full-height">
|
||||
<div class="col-sm-12 text-card">
|
||||
<h3 class="bold no-margin p-b-5 text-card"><a
|
||||
class="bold no-margin p-b-5 text-card"
|
||||
href="{{ path('company_answer_list') }}">{{nbAnswersSended}}</a>
|
||||
</h3>
|
||||
</div>
|
||||
<div class="col-sm-8">
|
||||
<div
|
||||
class="p-l-0 full-height d-flex flex-column justify-content-between text-card">
|
||||
<p class="small m-t-5 m-b-0">
|
||||
<span class="fs-12 ">Nouveaux candidats</span>
|
||||
</p>
|
||||
<h4 class="bold no-margin"><a class="bold no-margin"
|
||||
href="{{ path('company_answer_list') }}">+{{nbAnswersSended}}</a>
|
||||
</h4>
|
||||
</div>
|
||||
</div>
|
||||
<!--<div class="col-sm-5">
|
||||
<div class="p-l-0 full-height d-flex flex-column justify-content-between text-card">
|
||||
<p class="small m-t-5 m-b-0">
|
||||
<span class="fs-12 ">30 derniers jours</span>
|
||||
</p>
|
||||
<h4 class="bold no-margin" style="opacity:0.75">+48</h4>
|
||||
</div>
|
||||
</div>-->
|
||||
</div>
|
||||
<!--<div class="widget-8-chart line-chart" data-line-color="white" data-points="true" data-point-color="warning" data-stroke-width="2">
|
||||
</div>-->
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!-- END WIDGET -->
|
||||
<!-- Nombre de visite page entreprise vidéo - START WIDGET D3 widget_graphTileFlat-->
|
||||
<div class="widget-8 card m-r-15 widget-loader-bar card-header card-background-2">
|
||||
<div class="container-xs-height">
|
||||
<div class="">
|
||||
<!--row-xs-height -->
|
||||
<div class="col-xs-height col-top">
|
||||
<div class="">
|
||||
<!--card-header top-left top-right -->
|
||||
<div class="card-title text-card">
|
||||
<span class="font-montserrat fs-11 all-caps">Visites de la page
|
||||
entreprise</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row-xs-height">
|
||||
<div class="col-xs-height col-top relative">
|
||||
<div class="row full-height">
|
||||
<div class="col-sm-12 text-card">
|
||||
<h3 class="bold no-margin p-b-5 text-card">{{ records.totalRecordsCompany }}
|
||||
</h3>
|
||||
</div>
|
||||
<div class="col-sm-5 vertical-border">
|
||||
<div
|
||||
class="p-l-0 full-height d-flex flex-column justify-content-between text-card">
|
||||
<p class="small m-t-5 m-b-0">
|
||||
<span class="fs-12 ">7 derniers jours</span>
|
||||
</p>
|
||||
<h4 class="bold no-margin">+{{ records7days.totalRecordsCompany }}</h4>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-sm-5">
|
||||
<div
|
||||
class="p-l-0 full-height d-flex flex-column justify-content-between text-card">
|
||||
<p class="small m-t-5 m-b-0">
|
||||
<span class="fs-12 ">30 derniers jours</span>
|
||||
</p>
|
||||
<h4 class="bold no-margin" style="opacity:0.75">
|
||||
+{{ records30days.totalRecordsCompany }}</h4>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!--<div class="widget-8-chart line-chart" data-line-color="white" data-points="true" data-point-color="warning" data-stroke-width="2">
|
||||
</div>-->
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!-- END WIDGET -->
|
||||
|
||||
<!-- Nombre de visites global offres d'emploi --START WIDGET D3 widget_graphTileFlat-->
|
||||
<div class="widget-8 card no-margin widget-loader-bar card-header card-background-3">
|
||||
<div class="container-xs-height">
|
||||
<div class="">
|
||||
<!--row-xs-height -->
|
||||
<div class="col-xs-height col-top">
|
||||
<div class="">
|
||||
<!--card-header top-left top-right -->
|
||||
<div class="card-title text-card">
|
||||
<span class="font-montserrat fs-11 all-caps">Vues globales des offres
|
||||
d’emploi</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row-xs-height">
|
||||
<div class="col-xs-height col-top relative">
|
||||
<div class="row full-height">
|
||||
<div class="col-sm-12 text-card">
|
||||
<h3 class="bold no-margin p-b-5 text-card">
|
||||
{{ records.totalRecords-records.totalRecordsCompany }}</h3>
|
||||
</div>
|
||||
<div class="col-sm-5 vertical-border">
|
||||
<div
|
||||
class="p-l-0 full-height d-flex flex-column justify-content-between text-card">
|
||||
<p class="small m-t-5 m-b-0">
|
||||
<span class="fs-12 ">7 derniers jours</span>
|
||||
</p>
|
||||
<h4 class="bold no-margin">
|
||||
+{{ records7days.totalRecords-records7days.totalRecordsCompany }}
|
||||
</h4>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-sm-5">
|
||||
<div
|
||||
class="p-l-0 full-height d-flex flex-column justify-content-between text-card">
|
||||
<p class="small m-t-5 m-b-0">
|
||||
<span class="fs-12 ">30 derniers jours</span>
|
||||
</p>
|
||||
<h4 class="bold no-margin" style="opacity:0.75">
|
||||
+{{ records30days.totalRecords-records30days.totalRecordsCompany }}
|
||||
</h4>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!--<div class="widget-8-chart line-chart" data-line-color="white" data-points="true" data-point-color="warning" data-stroke-width="2">
|
||||
</div>-->
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!-- END WIDGET -->
|
||||
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<!--class="col-lg-8 sm-p-b-10 md-p-b-10"-->
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
</div> #}
|
||||
<!-- END card -->
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
{% endblock %}
|
||||
|
||||
{% block javascripts %}
|
||||
{{ parent() }}
|
||||
<script src="{{ asset('/js/vendors/Chart.bundle.min.js') }}"></script>
|
||||
{# <script src="{{ asset('/js/vendors/Chart.bundle.min.js') }}"></script> #}
|
||||
<script type="text/javascript">
|
||||
var currentMonth = '{{ "now"|date("m") }}';
|
||||
var arrayRecords;
|
||||
var ctx, myChart, arrayCurrentsLabel, arrayCurrentsAdsValues, arrayCurrentsCompanyValues, donughtRecords;
|
||||
var arrayRecords; {
|
||||
#
|
||||
var ctx, myChart, arrayCurrentsLabel, arrayCurrentsAdsValues, arrayCurrentsCompanyValues, donughtRecords;#
|
||||
}
|
||||
var sumVisitsAds = 0;
|
||||
var sumCompanyValues = 0;
|
||||
|
||||
function loadChartData() {
|
||||
setArrayValues();
|
||||
myChart.update();
|
||||
myDoughnutChart.update();
|
||||
{
|
||||
#
|
||||
function loadChartData() {
|
||||
setArrayValues();
|
||||
myChart.update();
|
||||
myDoughnutChart.update();
|
||||
}#
|
||||
}
|
||||
|
||||
function getChartData(date1, date2) {
|
||||
$.ajax({
|
||||
type: "POST",
|
||||
url: '{{ path("company_ajax_dashboard") }}',
|
||||
data: 'date1=' + date1 + '&date2=' + date2,
|
||||
dataType: "json",
|
||||
success: function (data) {
|
||||
arrayRecords = data.lineRecords;
|
||||
donughtRecords = data.donughtRecords;
|
||||
myDoughnutChart.data.datasets[0].data = donughtRecords;
|
||||
loadChartData();
|
||||
$('.fa-refresh').hide();
|
||||
},
|
||||
error: function (data) {
|
||||
$('.fa-refresh').hide();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
document.addEventListener("DOMContentLoaded", function (event) {
|
||||
$('.fa-refresh').hide();
|
||||
getChartData(0, 0);
|
||||
configDatePicker = {
|
||||
applyBtnClass: 'btn btn-default',
|
||||
format: 'DD-MM-YYYY',
|
||||
separator: ' au ',
|
||||
endDate: new Date(),
|
||||
maxDays: 365
|
||||
}
|
||||
$('#choiceMonth').dateRangePicker(configDatePicker).bind('datepicker-apply', function (event, obj) {
|
||||
$('.fa-refresh').show();
|
||||
var month1 = obj.date1.getMonth();
|
||||
var day1 = obj.date1.getDate();
|
||||
var year1 = obj.date1.getFullYear();
|
||||
var month2 = obj.date2.getMonth();
|
||||
var day2 = obj.date2.getDate();
|
||||
var year2 = obj.date2.getFullYear();
|
||||
var date1 = (month1 + 1) + "/" + day1 + "/" + year1 + " 00:00:01";
|
||||
var date2 = (month2 + 1) + "/" + day2 + "/" + year2 + " 23:59:59";
|
||||
getChartData(date1, date2);
|
||||
});
|
||||
$('.apply-btn').attr('value', 'Valider');
|
||||
});
|
||||
|
||||
function setArrayValues() {
|
||||
arrayCurrentsLabel = [];
|
||||
arrayCurrentsAdsValues = [];
|
||||
arrayCurrentsCompanyValues = [];
|
||||
arrayRecords['labels'].forEach(function (element, index) {
|
||||
var date = element.split("-");
|
||||
var dateAffiche = date[2] + "-" + date[1] + "-" + date[0];
|
||||
arrayCurrentsLabel.push(dateAffiche);
|
||||
arrayCurrentsAdsValues.push(arrayRecords['datasetsAd'][index]);
|
||||
arrayCurrentsCompanyValues.push(arrayRecords['datasetsCompany'][index]);
|
||||
});
|
||||
myChart.data.labels = arrayCurrentsLabel;
|
||||
myChart.data.datasets[0].data = arrayCurrentsAdsValues;
|
||||
myChart.data.datasets[1].data = arrayCurrentsCompanyValues;
|
||||
|
||||
if (arrayCurrentsAdsValues.length > 0) {
|
||||
sumVisitsAds = arrayCurrentsAdsValues.reduce(function (memo, val) {
|
||||
let value = val || 0;
|
||||
if (value != null) {
|
||||
return memo + value;
|
||||
{
|
||||
#
|
||||
function getChartData(date1, date2) {
|
||||
$.ajax({
|
||||
type: "POST",
|
||||
url: '{{ path("company_ajax_dashboard") }}',
|
||||
data: 'date1=' + date1 + '&date2=' + date2,
|
||||
dataType: "json",
|
||||
success: function (data) {
|
||||
arrayRecords = data.lineRecords;
|
||||
donughtRecords = data.donughtRecords;
|
||||
myDoughnutChart.data.datasets[0].data = donughtRecords;
|
||||
loadChartData();
|
||||
$('.fa-refresh').hide();
|
||||
},
|
||||
error: function (data) {
|
||||
$('.fa-refresh').hide();
|
||||
}
|
||||
});
|
||||
} else {
|
||||
sumVisitsAds = 0;
|
||||
}
|
||||
if (arrayCurrentsCompanyValues.length > 0) {
|
||||
sumCompanyValues = arrayCurrentsCompanyValues.reduce(function (memo, val) {
|
||||
let value = val || 0;
|
||||
if (value != null) {
|
||||
return memo + value;
|
||||
}
|
||||
});
|
||||
} else {
|
||||
sumCompanyValues = 0;
|
||||
}
|
||||
|
||||
$('.countVisitsAds').html(sumVisitsAds);
|
||||
$('.countVisitsCompany').html(sumCompanyValues);
|
||||
}#
|
||||
}
|
||||
|
||||
var dataLine = {
|
||||
datasets: [{
|
||||
label: "Nombre de visite d'annonce par jour",
|
||||
fill: false,
|
||||
fontColor: "rgba(39,139,231,1)",
|
||||
backgroundColor: "rgba(39,139,231,1)",
|
||||
borderColor: "rgba(39,139,231,1)"
|
||||
}, {
|
||||
label: "Nombre de visite de votre page entreprise",
|
||||
fill: false,
|
||||
fontColor: "#F9C339",
|
||||
backgroundColor: "#F9C339",
|
||||
borderColor: "#F9C339"
|
||||
}]
|
||||
};
|
||||
|
||||
var ctx = document.getElementById("nb_visits");
|
||||
var myChart = new Chart(ctx, {
|
||||
type: 'line',
|
||||
data: dataLine,
|
||||
options: {
|
||||
legend: {
|
||||
display: false
|
||||
},
|
||||
scales: {
|
||||
xAxes: [{
|
||||
display: true,
|
||||
scaleLabel: {
|
||||
display: true,
|
||||
labelString: 'Date'
|
||||
}
|
||||
}],
|
||||
yAxes: [{
|
||||
ticks: {
|
||||
min: 0
|
||||
},
|
||||
scaleLabel: {
|
||||
display: true,
|
||||
labelString: 'Valeur'
|
||||
}
|
||||
}]
|
||||
{
|
||||
#
|
||||
document.addEventListener("DOMContentLoaded", function (event) {
|
||||
$('.fa-refresh').hide();
|
||||
getChartData(0, 0);
|
||||
configDatePicker = {
|
||||
applyBtnClass: 'btn btn-default',
|
||||
format: 'DD-MM-YYYY',
|
||||
separator: ' au ',
|
||||
endDate: new Date(),
|
||||
maxDays: 365
|
||||
}
|
||||
}
|
||||
});
|
||||
$('#choiceMonth').dateRangePicker(configDatePicker).bind('datepicker-apply', function (event, obj) {
|
||||
$('.fa-refresh').show();
|
||||
var month1 = obj.date1.getMonth();
|
||||
var day1 = obj.date1.getDate();
|
||||
var year1 = obj.date1.getFullYear();
|
||||
var month2 = obj.date2.getMonth();
|
||||
var day2 = obj.date2.getDate();
|
||||
var year2 = obj.date2.getFullYear();
|
||||
var date1 = (month1 + 1) + "/" + day1 + "/" + year1 + " 00:00:01";
|
||||
var date2 = (month2 + 1) + "/" + day2 + "/" + year2 + " 23:59:59";
|
||||
getChartData(date1, date2);
|
||||
});
|
||||
$('.apply-btn').attr('value', 'Valider');
|
||||
});#
|
||||
}
|
||||
|
||||
var dataDonught = {
|
||||
labels: [
|
||||
"Visites de talents",
|
||||
"Visites d'entreprises",
|
||||
"Visites d'internautes non inscrit"
|
||||
],
|
||||
datasets: [{
|
||||
data: donughtRecords,
|
||||
backgroundColor: [
|
||||
"#FF6384",
|
||||
"#36A2EB",
|
||||
"#FFCE56"
|
||||
{
|
||||
#
|
||||
function setArrayValues() {
|
||||
arrayCurrentsLabel = [];
|
||||
arrayCurrentsAdsValues = [];
|
||||
arrayCurrentsCompanyValues = [];
|
||||
arrayRecords['labels'].forEach(function (element, index) {
|
||||
var date = element.split("-");
|
||||
var dateAffiche = date[2] + "-" + date[1] + "-" + date[0];
|
||||
arrayCurrentsLabel.push(dateAffiche);
|
||||
arrayCurrentsAdsValues.push(arrayRecords['datasetsAd'][index]);
|
||||
arrayCurrentsCompanyValues.push(arrayRecords['datasetsCompany'][index]);
|
||||
});
|
||||
myChart.data.labels = arrayCurrentsLabel;
|
||||
myChart.data.datasets[0].data = arrayCurrentsAdsValues;
|
||||
myChart.data.datasets[1].data = arrayCurrentsCompanyValues;
|
||||
|
||||
if (arrayCurrentsAdsValues.length > 0) {
|
||||
sumVisitsAds = arrayCurrentsAdsValues.reduce(function (memo, val) {
|
||||
let value = val || 0;
|
||||
if (value != null) {
|
||||
return memo + value;
|
||||
}
|
||||
});
|
||||
} else {
|
||||
sumVisitsAds = 0;
|
||||
}
|
||||
if (arrayCurrentsCompanyValues.length > 0) {
|
||||
sumCompanyValues = arrayCurrentsCompanyValues.reduce(function (memo, val) {
|
||||
let value = val || 0;
|
||||
if (value != null) {
|
||||
return memo + value;
|
||||
}
|
||||
});
|
||||
} else {
|
||||
sumCompanyValues = 0;
|
||||
}
|
||||
|
||||
$('.countVisitsAds').html(sumVisitsAds);
|
||||
$('.countVisitsCompany').html(sumCompanyValues);
|
||||
}
|
||||
|
||||
var dataLine = {
|
||||
datasets: [{
|
||||
label: "Nombre de visite d'annonce par jour",
|
||||
fill: false,
|
||||
fontColor: "rgba(39,139,231,1)",
|
||||
backgroundColor: "rgba(39,139,231,1)",
|
||||
borderColor: "rgba(39,139,231,1)"
|
||||
}, {
|
||||
label: "Nombre de visite de votre page entreprise",
|
||||
fill: false,
|
||||
fontColor: "#F9C339",
|
||||
backgroundColor: "#F9C339",
|
||||
borderColor: "#F9C339"
|
||||
}]
|
||||
};
|
||||
|
||||
var ctx = document.getElementById("nb_visits");
|
||||
var myChart = new Chart(ctx, {
|
||||
type: 'line',
|
||||
data: dataLine,
|
||||
options: {
|
||||
legend: {
|
||||
display: false
|
||||
},
|
||||
scales: {
|
||||
xAxes: [{
|
||||
display: true,
|
||||
scaleLabel: {
|
||||
display: true,
|
||||
labelString: 'Date'
|
||||
}
|
||||
}],
|
||||
yAxes: [{
|
||||
ticks: {
|
||||
min: 0
|
||||
},
|
||||
scaleLabel: {
|
||||
display: true,
|
||||
labelString: 'Valeur'
|
||||
}
|
||||
}]
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
var dataDonught = {
|
||||
labels: [
|
||||
"Visites de talents",
|
||||
"Visites d'entreprises",
|
||||
"Visites d'internautes non inscrit"
|
||||
],
|
||||
hoverBackgroundColor: [
|
||||
"#FF6384",
|
||||
"#36A2EB",
|
||||
"#FFCE56"
|
||||
]
|
||||
}]
|
||||
};
|
||||
var ctxDonught = document.getElementById("donught_visits");
|
||||
var myDoughnutChart = new Chart(ctxDonught, {
|
||||
type: 'doughnut',
|
||||
data: dataDonught,
|
||||
options: {
|
||||
legend: {
|
||||
display: false,
|
||||
},
|
||||
animation: {
|
||||
animateScale: true
|
||||
datasets: [{
|
||||
data: donughtRecords,
|
||||
backgroundColor: [
|
||||
"#FF6384",
|
||||
"#36A2EB",
|
||||
"#FFCE56"
|
||||
],
|
||||
hoverBackgroundColor: [
|
||||
"#FF6384",
|
||||
"#36A2EB",
|
||||
"#FFCE56"
|
||||
]
|
||||
}]
|
||||
};
|
||||
var ctxDonught = document.getElementById("donught_visits");
|
||||
var myDoughnutChart = new Chart(ctxDonught, {
|
||||
type: 'doughnut',
|
||||
data: dataDonught,
|
||||
options: {
|
||||
legend: {
|
||||
display: false,
|
||||
},
|
||||
animation: {
|
||||
animateScale: true
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
});#
|
||||
}
|
||||
</script>
|
||||
{% endblock %}
|
||||
@@ -46,11 +46,7 @@
|
||||
<i class="fa fa-search"></i>
|
||||
{{ 'company.menu.users.label'|trans }}</a></li>
|
||||
|
||||
<li>
|
||||
<a href="{{ path('company_media') }}">
|
||||
<i class="fa fa-play"></i>
|
||||
{{ 'company.menu.videotheque.label'|trans }}</a>
|
||||
</li>
|
||||
|
||||
<li>
|
||||
<a href="{{ path('company_my_account') }}">
|
||||
<i class="fa fa-cog"></i>
|
||||
|
||||
@@ -21,8 +21,10 @@
|
||||
<p class="profil-city">{{ company.addresses.billing.city }}
|
||||
- {{ company.addresses.billing.country|country }}</p>
|
||||
{% endif %}
|
||||
{# <p class="profil-job"><a
|
||||
href="{{ path("company_show",{"alias":company.alias}) }}">{{ company.brandname }}</a></p> #}
|
||||
<p class="profil-job"><a
|
||||
href="{{ path("company_show",{"alias":company.alias}) }}">{{ company.brandname }}</a></p>
|
||||
href="https://www.talentstube.com/Entreprise/{{company.alias}}" target="_blank">{{ company.brandname }}</a></p>
|
||||
</div>
|
||||
<div class="profil-nav">
|
||||
<ul class="font-2">
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
<div class="inner">
|
||||
<!-- START BREADCRUMB -->
|
||||
<ol class="breadcrumb">
|
||||
<li class="breadcrumb-item"><a href="#">Accueil</a></li>
|
||||
<li class="breadcrumb-item"><a href="/entreprise/me/">Accueil</a></li>
|
||||
<li class="breadcrumb-item active">Profil</li>
|
||||
</ol>
|
||||
<!-- END BREADCRUMB -->
|
||||
@@ -33,55 +33,56 @@
|
||||
<div class=" container-fluid container-fixed-lg bg-white">
|
||||
<!-- START card -->
|
||||
<div class="row">
|
||||
<div class="col-lg-6">
|
||||
|
||||
<div class="col-lg-12s">
|
||||
|
||||
<div class="card card-transparent">
|
||||
{{ form_start(form, { 'action': path('company_my_account'), 'attr': { 'class': 'fos_user_profile_edit' } }) }}
|
||||
|
||||
|
||||
<div class="card-body">
|
||||
{% if form_errors(form) %}
|
||||
<span class="red-text text-darken-2">{{ form_errors(form) }}</span>
|
||||
{% endif %}
|
||||
|
||||
<div class="row">
|
||||
<div class="col-md-6">
|
||||
<div class="form-group form-group-default required">
|
||||
<div class="card-body">
|
||||
{% if form_errors(form) %}
|
||||
<span class="red-text text-darken-2">{{ form_errors(form) }}</span>
|
||||
{% endif %}
|
||||
|
||||
{{ form_row(form.firstname) }}
|
||||
<div class="row">
|
||||
<div class="col-md-6">
|
||||
<div class="form-group form-group-default required">
|
||||
|
||||
{{ form_row(form.firstname) }}
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
<div class="form-group form-group-default">
|
||||
|
||||
{{ form_row(form.lastname) }}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
<div class="form-group form-group-default">
|
||||
{# <div class="row">
|
||||
<div class="col-md-12">
|
||||
|
||||
{{ form_row(form.lastname) }}
|
||||
<div class="form-group ">
|
||||
|
||||
{{ form_row(form.gender) }}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col-md-12">
|
||||
|
||||
<div class="form-group ">
|
||||
<br /> #}
|
||||
<div style="text-align: right;">
|
||||
<button class="btn btn-default" type="submit">Sauvegarde</button>
|
||||
|
||||
{{ form_row(form.gender) }}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<br />
|
||||
<div style="text-align: right;">
|
||||
<button class="btn btn-default" type="submit">Sauvegarde</button>
|
||||
|
||||
</div>
|
||||
|
||||
{{ form_end(form) }}
|
||||
</div>
|
||||
{{ form_end(form) }}
|
||||
</div>
|
||||
<!-- END card -->
|
||||
|
||||
</div>
|
||||
<!-- END card -->
|
||||
|
||||
<div class="col-lg-6">
|
||||
<div class="card card-transparent">
|
||||
</div>
|
||||
|
||||
<div class="col-lg-12">
|
||||
{# <div class="card card-transparent">
|
||||
{{ form_start(formPw) }}
|
||||
<div class="card-body">
|
||||
{% if form_errors(formPw) %}
|
||||
@@ -99,7 +100,17 @@
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{{ form_end(formPw) }}
|
||||
{{ form_end(formPw) }} #}
|
||||
<div class="card card-transparent">
|
||||
|
||||
<div class="card-body">
|
||||
<div class="row">
|
||||
<div class="col-md-12">
|
||||
<a href="/resetting/request" target="_blank">Réinitialisation de mot de passe</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!-- END card -->
|
||||
|
||||
|
||||
File diff suppressed because one or more lines are too long
@@ -8,8 +8,8 @@
|
||||
<div class="inner">
|
||||
<!-- START BREADCRUMB -->
|
||||
<ol class="breadcrumb">
|
||||
<li class="breadcrumb-item"><a href="#">Accueil</a></li>
|
||||
<li class="breadcrumb-item active">Utilisateurss</li>
|
||||
<li class="breadcrumb-item"><a href="/entreprise/me/">Accueil</a></li>
|
||||
<li class="breadcrumb-item active">Utilisateurs</li>
|
||||
</ol>
|
||||
<!-- END BREADCRUMB -->
|
||||
<div class="row">
|
||||
@@ -46,7 +46,10 @@
|
||||
</div>
|
||||
<div class="card-body">
|
||||
{% if form_errors(form) %}
|
||||
<span class="red-text text-darken-2">{{ form_errors(form) }}</span>
|
||||
<span class="red-text text-darken-2">{{ form_errors(form) }}{{ error }}</span>
|
||||
{% endif %}
|
||||
{% if error%}
|
||||
<span class="red-text text-darken-2"><b>{{ error }}</b><br/> </span>
|
||||
{% endif %}
|
||||
{{ form_start(form) }}
|
||||
<div class="row">
|
||||
@@ -72,7 +75,7 @@
|
||||
</div>
|
||||
|
||||
</div>
|
||||
<div class="row">
|
||||
{# <div class="row">
|
||||
|
||||
<div class="col-md-12">
|
||||
<div class="form-group ">
|
||||
@@ -80,7 +83,7 @@
|
||||
{{ form_row(form.gender) }}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div> #}
|
||||
{% if form.password is defined%}
|
||||
<div class="row">
|
||||
<div class="col-md-12">
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
<div class="inner">
|
||||
<!-- START BREADCRUMB -->
|
||||
<ol class="breadcrumb">
|
||||
<li class="breadcrumb-item"><a href="#">Accueil</a></li>
|
||||
<li class="breadcrumb-item"><a href="/entreprise/me/">Accueil</a></li>
|
||||
<li class="breadcrumb-item active">Utilisateurs</li>
|
||||
</ol>
|
||||
<!-- END BREADCRUMB -->
|
||||
|
||||
@@ -28,9 +28,12 @@
|
||||
{% if company.presentationVideo is defined %}
|
||||
{% if company.presentationVideo.thumbnails.0.sizes is defined %}
|
||||
<a href="{{ path('company_show',{'alias': company.alias }) }}" title="{{ company.brandName }}">
|
||||
{% if company.presentationVideo.thumbnails.0.sizes.4.link is defined %}
|
||||
<img src="{{ company.presentationVideo.thumbnails.0.sizes.4.link }}"
|
||||
alt="{{ company.brandName }}"/>
|
||||
|
||||
<span class="playerbtn"></span>
|
||||
{% endif %}
|
||||
</a>
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
|
||||
+395
@@ -0,0 +1,395 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="fr">
|
||||
|
||||
<head>
|
||||
<link
|
||||
href="{{ asset('dashboard/plugins/bootstrap/css/bootstrap.min.css') }}"
|
||||
rel="stylesheet"
|
||||
type="text/css"/>
|
||||
<script
|
||||
src="{{ asset('dashboard/plugins/jquery/jquery-3.5.1.min.js') }}"
|
||||
type="text/javascript"></script>
|
||||
<script
|
||||
src="https://cdnjs.cloudflare.com/ajax/libs/corejs-typeahead/1.3.1/bloodhound.min.js"
|
||||
type="text/javascript"></script>
|
||||
<script
|
||||
src="{{ asset('dashboard/plugins/typeahead/typeahead.bundle.js') }}"
|
||||
type="text/javascript"></script>
|
||||
<script>
|
||||
$(document)
|
||||
.ready(function () {
|
||||
// Constructing the suggestion engine
|
||||
console.log("metiers!!!");
|
||||
var metiers = new Bloodhound({
|
||||
datumTokenizer: Bloodhound.tokenizers.whitespace,
|
||||
queryTokenizer: Bloodhound.tokenizers.whitespace,
|
||||
remote: {
|
||||
url: 'http://localhost/app_dev.php/api/getAppelationsLibelle',
|
||||
wildcar: '%QUERY',
|
||||
|
||||
filter: function (metiers) {
|
||||
console.log("metiers2");
|
||||
return $.map(metiers, function (metier) {
|
||||
console.log(metier);
|
||||
return {metier_id: metier.code, metier_libelle: metier.libelle}
|
||||
})
|
||||
},
|
||||
prepare: function (query, settings) {
|
||||
//ing%20agro
|
||||
//query = query.replace(" ", "%20");
|
||||
settings.url += '?q=' + query;
|
||||
return settings;
|
||||
}
|
||||
},
|
||||
|
||||
});
|
||||
metiers.initialize();
|
||||
// Initializing the typeahead
|
||||
$('.typeahead').typeahead({
|
||||
hint: true,
|
||||
highlight: true
|
||||
}, {
|
||||
name: 'metiers',
|
||||
source: metiers.ttAdapter(),
|
||||
display: 'metier_libelle',
|
||||
limit: 10,
|
||||
templates: {
|
||||
suggestion: function (data) {
|
||||
return '<div><strong>' + data.metier_id + '</strong> ' + data.metier_libelle + '</div>'
|
||||
},
|
||||
footer: function (query) {
|
||||
//return '<div class="text-center">Plus de résultats :' + query.query + '</div>';
|
||||
},
|
||||
empty: function (context) {
|
||||
// console.log(1) // put here your code when result not found
|
||||
return '<div class="text-center">Aucun résultat</div>';
|
||||
}
|
||||
}
|
||||
});
|
||||
});
|
||||
</script>
|
||||
<style>
|
||||
.bs-example {
|
||||
font-family: sans-serif;
|
||||
position: relative;
|
||||
margin: 100px;
|
||||
}
|
||||
|
||||
.tt-hint,
|
||||
.tt-query,
|
||||
.typeahead {
|
||||
border: 2px solid #CCCCCC;
|
||||
border-radius: 8px;
|
||||
font-size: 22px;
|
||||
/* Set input font size */
|
||||
height: 30px;
|
||||
line-height: 30px;
|
||||
outline: medium none;
|
||||
padding: 8px 12px;
|
||||
width: 396px;
|
||||
}
|
||||
|
||||
.typeahead {
|
||||
background-color: #FFFFFF;
|
||||
}
|
||||
.typeahead:focus {
|
||||
border: 2px solid #0097CF;
|
||||
}
|
||||
|
||||
.tt-query {
|
||||
box-shadow: 0 1px 1px rgba(0, 0, 0, 0.075) inset;
|
||||
}
|
||||
|
||||
.tt-hint {
|
||||
color: #999999;
|
||||
}
|
||||
|
||||
.tt-menu {
|
||||
background-color: #FFFFFF;
|
||||
border: 1px solid rgba(0, 0, 0, 0.2);
|
||||
border-radius: 8px;
|
||||
box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);
|
||||
margin-top: 12px;
|
||||
padding: 8px 0;
|
||||
width: 422px;
|
||||
}
|
||||
|
||||
.tt-suggestion {
|
||||
font-size: 22px;
|
||||
/* Set suggestion dropdown font size */
|
||||
padding: 3px 20px;
|
||||
}
|
||||
.tt-suggestion:hover {
|
||||
cursor: pointer;
|
||||
background-color: #0097CF;
|
||||
color: #FFFFFF;
|
||||
}
|
||||
|
||||
.tt-suggestion p {
|
||||
margin: 0;
|
||||
}
|
||||
.tt-suggestions {
|
||||
min-height: 300px;
|
||||
max-height: 600px;
|
||||
overflow-y: auto;
|
||||
}
|
||||
|
||||
</style>
|
||||
<style type="text/css">
|
||||
/* Copyright 2014-present Evernote Corporation. All rights reserved. */
|
||||
@keyframes caretBlink {
|
||||
from {
|
||||
opacity: 1.0;
|
||||
}
|
||||
|
||||
to {
|
||||
opacity: 0.0;
|
||||
}
|
||||
}
|
||||
@keyframes rotateSpinner {
|
||||
from {
|
||||
transform: rotate(0deg);
|
||||
}
|
||||
|
||||
to {
|
||||
transform: rotate(360deg);
|
||||
}
|
||||
}
|
||||
|
||||
#text-tool-caret {
|
||||
animation-name: caretBlink;
|
||||
animation-iteration-count: infinite;
|
||||
animation-timing-function: cubic-bezier(1.0, 0, 0, 1.0);
|
||||
animation-duration: 1s;
|
||||
}
|
||||
|
||||
#en-markup-loading-spinner {
|
||||
position: absolute;
|
||||
top: calc(50% - 16px);
|
||||
left: calc(50% - 16px);
|
||||
width: 32px;
|
||||
height: 32px;
|
||||
}
|
||||
|
||||
#en-markup-loading-spinner img {
|
||||
position: relative;
|
||||
top: 0;
|
||||
left: 0;
|
||||
animation-name: rotateSpinner;
|
||||
animation-duration: 0.6s;
|
||||
animation-iteration-count: infinite;
|
||||
animation-timing-function: linear;
|
||||
}
|
||||
|
||||
</style>
|
||||
<style type="text/css">
|
||||
/* Copyright 2014-present Evernote Corporation. All rights reserved. */
|
||||
.skitchToastBoxContainer {
|
||||
position: absolute;
|
||||
width: 100%;
|
||||
text-align: center;
|
||||
top: 30px;
|
||||
-webkit-user-select: none;
|
||||
-moz-user-select: none;
|
||||
pointer-events: none;
|
||||
}
|
||||
|
||||
.skitchToastBox {
|
||||
width: 200px;
|
||||
height: 16px;
|
||||
padding: 12px;
|
||||
background-color: rgba(47, 55, 61, 0.95);
|
||||
border-radius: 4px;
|
||||
color: white;
|
||||
cursor: default;
|
||||
font-size: 10pt;
|
||||
text-shadow: 1px 1px 2px rgba(0, 0, 0, 0.32);
|
||||
font-family: 'Soleil', Helvetica, Arial, sans-serif;
|
||||
border: 2px rgba(255, 255, 255, 0.38) solid;
|
||||
}
|
||||
|
||||
.lang-zh-cn .skitchToastBox {
|
||||
font-family: '微软雅黑', 'Microsoft YaHei', SimSun, 'メイリオ', Meiryo, 'MS PGothic', 'Soleil', Helvetica, Arial, sans-serif;
|
||||
}
|
||||
|
||||
.lang-ja-jp .skitchToastBox {
|
||||
font-family: 'メイリオ', Meiryo, 'MS PGothic', '微软雅黑', 'Microsoft YaHei', SimSun, 'Soleil', Helvetica, Arial, sans-serif;
|
||||
}
|
||||
|
||||
.skitchToast {
|
||||
padding-left: 20px;
|
||||
padding-right: 20px;
|
||||
display: inline-block;
|
||||
height: 10px;
|
||||
color: #f1f5f8;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.skitchVisible {
|
||||
/* Don't remove this class it's a hack used by the Evernote Clipper */
|
||||
}
|
||||
|
||||
</style>
|
||||
<style type="text/css">
|
||||
/* Copyright 2019-present Evernote Corporation. All rights reserved. */
|
||||
|
||||
#en-markup-disabled {
|
||||
position: fixed;
|
||||
z-index: 9999;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
top: 0;
|
||||
left: 0;
|
||||
cursor: default;
|
||||
-webkit-user-select: none;
|
||||
}
|
||||
|
||||
#en-markup-alert-container {
|
||||
position: absolute;
|
||||
z-index: 9999;
|
||||
width: 450px;
|
||||
left: calc(50% - 225px);
|
||||
top: calc(50% - 85px);
|
||||
background-color: white;
|
||||
box-shadow: 0 2px 7px 1px rgba(0, 0, 0, 0.35);
|
||||
-webkit-user-select: none;
|
||||
}
|
||||
|
||||
|
||||
#en-markup-alert-container .cell-2 {
|
||||
position: relative;
|
||||
float: left;
|
||||
width: 345px;
|
||||
margin-top: 29px;
|
||||
margin-bottom: 20px;
|
||||
}
|
||||
|
||||
#en-markup-alert-container .cell-2 .cell-2-title {
|
||||
margin-bottom: 5px;
|
||||
padding-right: 30px;
|
||||
font-size: 12pt;
|
||||
font-family: Tahoma, Arial;
|
||||
}
|
||||
|
||||
#en-markup-alert-container .cell-2 .cell-2-message {
|
||||
padding-right: 30px;
|
||||
font-size: 9.5pt;
|
||||
font-family: Tahoma, Arial;
|
||||
}
|
||||
|
||||
#en-markup-alert-container .cell-3 {
|
||||
position: relative;
|
||||
width: 450px;
|
||||
height: 60px;
|
||||
float: left;
|
||||
background-color: rgb(240, 240, 240);
|
||||
}
|
||||
|
||||
#en-markup-alert-container .cell-3 button {
|
||||
position: absolute;
|
||||
top: 12px;
|
||||
right: 15px;
|
||||
width: 110px;
|
||||
height: 36px;
|
||||
}
|
||||
|
||||
#en-markup-alert-container .cell-3 button.alt-button {
|
||||
position: absolute;
|
||||
top: 12px;
|
||||
right: 140px;
|
||||
width: 110px;
|
||||
height: 36px;
|
||||
}
|
||||
|
||||
</style>
|
||||
<style>
|
||||
[touch-action="none"] {
|
||||
-ms-touch-action: none;
|
||||
touch-action: none;
|
||||
}
|
||||
|
||||
[touch-action="auto"] {
|
||||
-ms-touch-action: auto;
|
||||
touch-action: auto;
|
||||
}
|
||||
|
||||
[touch-action~="pan-x"] {
|
||||
-ms-touch-action: pan-x;
|
||||
touch-action: pan-x;
|
||||
}
|
||||
|
||||
[touch-action~="pan-y"] {
|
||||
-ms-touch-action: pan-y;
|
||||
touch-action: pan-y;
|
||||
}
|
||||
|
||||
[touch-action~="pan-up"] {
|
||||
-ms-touch-action: pan-up;
|
||||
touch-action: pan-up;
|
||||
}
|
||||
|
||||
[touch-action~="pan-down"] {
|
||||
-ms-touch-action: pan-down;
|
||||
touch-action: pan-down;
|
||||
}
|
||||
|
||||
[touch-action~="pan-left"] {
|
||||
-ms-touch-action: pan-left;
|
||||
touch-action: pan-left;
|
||||
}
|
||||
|
||||
[touch-action~="pan-right"] {
|
||||
-ms-touch-action: pan-right;
|
||||
touch-action: pan-right;
|
||||
}
|
||||
|
||||
</style>
|
||||
</head>
|
||||
|
||||
<body class="fixed-header dashboard menu-pin menu-behind">
|
||||
{# {{ include('default/user_switch.html.twig') }} #}
|
||||
|
||||
<!-- START PAGE-CONTAINER -->
|
||||
<div class="page-container ">
|
||||
<!-- START PAGE CONTENT WRAPPER -->
|
||||
<div class="page-content-wrapper ">
|
||||
<div class="content ">
|
||||
{% block dashContent %}
|
||||
|
||||
<h2>choisir un métier</h2>
|
||||
|
||||
<span
|
||||
class="twitter-typeahead"
|
||||
style="position: relative; display: inline-block;"><input
|
||||
type="text"
|
||||
class="typeahead tt-query tt-hint"
|
||||
autocomplete="off"
|
||||
spellcheck="false"
|
||||
readonly=""
|
||||
tabindex="-1"
|
||||
dir="ltr"
|
||||
style="position: absolute; top: 0px; left: 0px; border-color: transparent; box-shadow: none; opacity: 1; background: none 0% 0% / auto repeat scroll padding-box border-box rgb(255, 255, 255);"><input
|
||||
type="text"
|
||||
id="saisie"
|
||||
class="typeahead tt-query tt-input"
|
||||
autocomplete="off"
|
||||
spellcheck="false"
|
||||
dir="auto"
|
||||
style="position: relative; vertical-align: top; background-color: transparent;">
|
||||
<pre aria-hidden="true"
|
||||
style="position: absolute; visibility: hidden; white-space: pre; font-family: Arial; font-size: 22px; font-style: normal; font-variant: normal; font-weight: 400; word-spacing: 0px; letter-spacing: 0px; text-indent: 0px; text-rendering: auto; text-transform: none;"></pre>
|
||||
<div
|
||||
class="tt-menu"
|
||||
style="position: absolute; top: 100%; left: 0px; z-index: 100; display: none;">
|
||||
<div class="tt-dataset tt-dataset-cars"></div>
|
||||
</div>
|
||||
</span>
|
||||
{% endblock %}
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</body>
|
||||
|
||||
</html>
|
||||
@@ -11,8 +11,8 @@
|
||||
<div class="media">
|
||||
|
||||
<div class="media-body px-4">
|
||||
<h2 class="statChiffre">1500+</h2>
|
||||
<p class="statTexte">Talents connectés</p>
|
||||
<h2 class="statChiffre">10000+</h2>
|
||||
<p class="statTexte">Visiteurs par mois</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -24,7 +24,7 @@
|
||||
<div class="card-body p-4">
|
||||
<div class="media">
|
||||
<div class="media-body px-4">
|
||||
<h2 class="statChiffre">900+</h2>
|
||||
<h2 class="statChiffre">1050+</h2>
|
||||
<p class="statTexte">Vues par vidéo</p>
|
||||
</div>
|
||||
</div>
|
||||
@@ -38,7 +38,7 @@
|
||||
<div class="media">
|
||||
|
||||
<div class="media-body px-4">
|
||||
<h2 class="statChiffre">350</h2>
|
||||
<h2 class="statChiffre">550+</h2>
|
||||
<p class="statTexte">Candidatures vidéo</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -19,7 +19,8 @@
|
||||
<!-- Title -->
|
||||
<header class="text-center mb-5">
|
||||
<h2 class="h4 mb-0">Connexion</h2>
|
||||
<p>Connecter vous pour gérer votre compte</p>
|
||||
<p>Connectez-vous pour gérer votre compte </p>
|
||||
{% if erreur is defined and erreur %}<p class="text-danger">Votre dernière tentative de connexion a échoué. Vérifiez votre email ou votre mot de passe</p>{% endif %}
|
||||
</header>
|
||||
|
||||
|
||||
@@ -35,7 +36,7 @@
|
||||
aria-label="Email" data-msg="Please enter a valid email address." data-error-class="u-has-error"
|
||||
data-success-class="u-has-success"> #}
|
||||
|
||||
<input type="text" id="username" name="_username" value="{{ last_username }}" required="required" class="form-control"/>
|
||||
<input type="text" id="username" name="_username" value="{{ last_username }}" required="required" class="form-control" placeholder="Saisissez votre adresse email"/>
|
||||
</div>
|
||||
</div>
|
||||
<!-- End Input -->
|
||||
@@ -51,7 +52,7 @@
|
||||
{# <input type="password" class="form-control form__input" name="password" required placeholder="Password"
|
||||
aria-label="Password" data-msg="Your password is invalid. Please try again."
|
||||
data-error-class="u-has-error" data-success-class="u-has-success"> #}
|
||||
<input type="password" id="password" name="_password" required="required" class="form-control" />
|
||||
<input type="password" id="password" name="_password" required="required" class="form-control" placeholder="Saisissez votre mot de passe" />
|
||||
</div>
|
||||
</div>
|
||||
<!-- End Input -->
|
||||
@@ -75,9 +76,9 @@
|
||||
|
||||
<div class="mb-3">
|
||||
|
||||
<input type="hidden" name="_target_path" value="redirect_dashboard" />
|
||||
<input type="hidden" name="_target_path" value="redirect_dashboard" />
|
||||
|
||||
<input type="submit" id="_submit" name="_submit" class="btn btn-block btn-primary"/>
|
||||
<input type="submit" id="_submit" name="_submit" class="btn btn-block btn-primary" value="Se connecter"/>
|
||||
</div>
|
||||
|
||||
<div class="text-center mb-3">
|
||||
@@ -143,4 +144,4 @@
|
||||
<!-- End Content -->
|
||||
</div>
|
||||
<!-- End Signup Modal Window -->
|
||||
<!-- ========== END SECONDARY CONTENTS ========== -->
|
||||
<!-- ========== END SECONDARY CONTENTS ========== -->
|
||||
|
||||
+97
@@ -17,8 +17,67 @@
|
||||
data-arrow-left-classes="fa fa-arrow-left u-slick__arrow-classic-inner bg-white text-dark left-0 ml-md-n9"
|
||||
data-arrow-right-classes="fa fa-arrow-right u-slick__arrow-classic-inner bg-white text-dark right-0 mr-md-n9"
|
||||
data-nav-for="#sliderSyncingThumb2">
|
||||
|
||||
<div class="js-slide bg-img-hero bg-img-hero-center gradient-overlay-half-black-v1"
|
||||
style="background-image: url({{ asset('v2/temoignages/pontivy-temoignage-image.jpg') }});">
|
||||
|
||||
<div class="w-md-80 w-lg-50 text-white space-2 px-9">
|
||||
<h3 class="h2 text-lh-xs mb-4">Pontivy Communauté</h3>
|
||||
<p class="text-white-70 mb-4">Christine Le Strat & Kévin Nado</p>
|
||||
|
||||
<a class="js-fancybox text-white" href="javascript:;"
|
||||
data-src="https://www.youtube.com/watch?v=ugXui7ICJeM?autoplay=1" data-speed="700"
|
||||
data-animate-in="zoomIn" data-animate-out="zoomOut" data-caption="Témoignage">
|
||||
Voir le témoignage
|
||||
<i class="u-icon u-icon--sm u-icon--white-soft rounded-circle ml-2">
|
||||
<i class="u-icon__inner svg-icon svg-icon-xs text-white">
|
||||
<svg width="24px" height="24px" viewBox="0 0 24 24" version="1.1" xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<g stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
|
||||
<rect x="0" y="0" width="24" height="24"></rect>
|
||||
<path
|
||||
d="M9.82866499,18.2771971 L16.5693679,12.3976203 C16.7774696,12.2161036 16.7990211,11.9002555 16.6175044,11.6921539 C16.6029128,11.6754252 16.5872233,11.6596867 16.5705402,11.6450431 L9.82983723,5.72838979 C9.62230202,5.54622572 9.30638833,5.56679309 9.12422426,5.7743283 C9.04415337,5.86555116 9,5.98278612 9,6.10416552 L9,17.9003957 C9,18.1765381 9.22385763,18.4003957 9.5,18.4003957 C9.62084305,18.4003957 9.73759731,18.3566309 9.82866499,18.2771971 Z"
|
||||
fill="#000000"></path>
|
||||
</g>
|
||||
</svg>
|
||||
</i>
|
||||
</i>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="js-slide bg-img-hero bg-img-hero-center gradient-overlay-half-black-v1"
|
||||
style="background-image: url({{ asset('v2/temoignages/temoignage-mma-questembert.jpg') }});">
|
||||
|
||||
<div class="w-md-80 w-lg-50 text-white space-2 px-9">
|
||||
<h3 class="h2 text-lh-xs mb-4">MMA Questembert</h3>
|
||||
<p class="text-white-70 mb-4"> Stephane David, Agent Général d'Assurances</p>
|
||||
|
||||
<a class="js-fancybox text-white" href="javascript:;"
|
||||
data-src="https://www.youtube.com/watch?v=0bbNdf4qAng?autoplay=1" data-speed="700"
|
||||
data-animate-in="zoomIn" data-animate-out="zoomOut" data-caption="Témoignage">
|
||||
Voir le témoignage
|
||||
<i class="u-icon u-icon--sm u-icon--white-soft rounded-circle ml-2">
|
||||
<i class="u-icon__inner svg-icon svg-icon-xs text-white">
|
||||
<svg width="24px" height="24px" viewBox="0 0 24 24" version="1.1" xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<g stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
|
||||
<rect x="0" y="0" width="24" height="24"></rect>
|
||||
<path
|
||||
d="M9.82866499,18.2771971 L16.5693679,12.3976203 C16.7774696,12.2161036 16.7990211,11.9002555 16.6175044,11.6921539 C16.6029128,11.6754252 16.5872233,11.6596867 16.5705402,11.6450431 L9.82983723,5.72838979 C9.62230202,5.54622572 9.30638833,5.56679309 9.12422426,5.7743283 C9.04415337,5.86555116 9,5.98278612 9,6.10416552 L9,17.9003957 C9,18.1765381 9.22385763,18.4003957 9.5,18.4003957 C9.62084305,18.4003957 9.73759731,18.3566309 9.82866499,18.2771971 Z"
|
||||
fill="#000000"></path>
|
||||
</g>
|
||||
</svg>
|
||||
</i>
|
||||
</i>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<div class="js-slide bg-img-hero bg-img-hero-center gradient-overlay-half-black-v1"
|
||||
style="background-image: url({{ asset('v2/temoignages/mgdis-temoignage-image.jpg') }});">
|
||||
|
||||
<div class="w-md-80 w-lg-50 text-white space-2 px-9">
|
||||
<h3 class="h2 text-lh-xs mb-4">MGDIS</h3>
|
||||
<p class="text-white-70 mb-4">Simona Vasile-Martin, Responsable Marketing</p>
|
||||
@@ -100,6 +159,7 @@
|
||||
|
||||
<div class="js-slide bg-img-hero bg-img-hero-center gradient-overlay-half-black-v1"
|
||||
style="background-image: url({{ asset('v2/temoignages/intermarche-temoignage-image.jpg') }});">
|
||||
|
||||
<div class="w-md-80 w-lg-50 text-white space-2 px-9">
|
||||
<h3 class="h2 text-lh-xs mb-4">Intermarché LAI</h3>
|
||||
<p class="text-white-70 mb-4">Ludovic Chamoin-Foucaut, Responsable Ressources Humaines</p>
|
||||
@@ -135,6 +195,43 @@
|
||||
<div id="sliderSyncingThumb2"
|
||||
class="js-slick-carousel u-slick u-slick--gutters-2 u-slick--video w-50 w-lg-30 mx-auto" data-infinite="true"
|
||||
data-slides-show="3" data-is-thumbs="true" data-center-mode="true" data-nav-for="#sliderSyncingNav2">
|
||||
|
||||
<div class="js-slide rounded overflow-hidden">
|
||||
<img class="img-fluid" src="{{ asset('v2/temoignages/pontivy-communaute-temoignage-vignette.jpg') }}"
|
||||
alt="Image Description">
|
||||
<i class="u-icon u-icon--sm u-icon--dark-soft rounded-circle u-slick--video__player">
|
||||
<i class="u-icon__inner svg-icon svg-icon-xs text-white">
|
||||
<svg width="24px" height="24px" viewBox="0 0 24 24" version="1.1" xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<g stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
|
||||
<rect x="0" y="0" width="24" height="24"></rect>
|
||||
<path
|
||||
d="M9.82866499,18.2771971 L16.5693679,12.3976203 C16.7774696,12.2161036 16.7990211,11.9002555 16.6175044,11.6921539 C16.6029128,11.6754252 16.5872233,11.6596867 16.5705402,11.6450431 L9.82983723,5.72838979 C9.62230202,5.54622572 9.30638833,5.56679309 9.12422426,5.7743283 C9.04415337,5.86555116 9,5.98278612 9,6.10416552 L9,17.9003957 C9,18.1765381 9.22385763,18.4003957 9.5,18.4003957 C9.62084305,18.4003957 9.73759731,18.3566309 9.82866499,18.2771971 Z"
|
||||
fill="#000000"></path>
|
||||
</g>
|
||||
</svg>
|
||||
</i>
|
||||
</i>
|
||||
</div>
|
||||
|
||||
<div class="js-slide rounded overflow-hidden">
|
||||
<img class="img-fluid" src="{{ asset('v2/temoignages/mma-temoignage-vignette.jpg') }}"
|
||||
alt="Image Description">
|
||||
<i class="u-icon u-icon--sm u-icon--dark-soft rounded-circle u-slick--video__player">
|
||||
<i class="u-icon__inner svg-icon svg-icon-xs text-white">
|
||||
<svg width="24px" height="24px" viewBox="0 0 24 24" version="1.1" xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<g stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
|
||||
<rect x="0" y="0" width="24" height="24"></rect>
|
||||
<path
|
||||
d="M9.82866499,18.2771971 L16.5693679,12.3976203 C16.7774696,12.2161036 16.7990211,11.9002555 16.6175044,11.6921539 C16.6029128,11.6754252 16.5872233,11.6596867 16.5705402,11.6450431 L9.82983723,5.72838979 C9.62230202,5.54622572 9.30638833,5.56679309 9.12422426,5.7743283 C9.04415337,5.86555116 9,5.98278612 9,6.10416552 L9,17.9003957 C9,18.1765381 9.22385763,18.4003957 9.5,18.4003957 C9.62084305,18.4003957 9.73759731,18.3566309 9.82866499,18.2771971 Z"
|
||||
fill="#000000"></path>
|
||||
</g>
|
||||
</svg>
|
||||
</i>
|
||||
</i>
|
||||
</div>
|
||||
|
||||
<div class="js-slide rounded overflow-hidden">
|
||||
<img class="img-fluid" src="{{ asset('v2/temoignages/mgdis-temoignage-vignette.jpg') }}"
|
||||
alt="Image Description">
|
||||
|
||||
@@ -9,7 +9,14 @@
|
||||
<div class="list-group list-group-flush list-group-transparent">
|
||||
<!-- Links -->
|
||||
<ul class="list-unstyled">
|
||||
<li><a class="list-group-item list-group-item-action" href="/">Espace recruteurs</a></li>
|
||||
<li><a class="list-group-item list-group-item-action" href="/">Accueil</a></li>
|
||||
<li>
|
||||
<a class="list-group-item list-group-item-action" href="#signupModal" role="button"
|
||||
data-modal-target="#signupModal"
|
||||
data-overlay-color="#151b26">
|
||||
Espace recruteurs
|
||||
</a>
|
||||
</li>
|
||||
<li><a class="list-group-item list-group-item-action"href="https://www.talentstube.com/" target="_blank">Jobs</a></li>
|
||||
{# <li><a class="list-group-item list-group-item-action" href="#" target="_blank">CV Vidéothèque (En cours)</a></li> #}
|
||||
</ul>
|
||||
@@ -25,12 +32,11 @@
|
||||
<div class="list-group list-group-flush list-group-transparent">
|
||||
<!-- Links -->
|
||||
<ul class="list-unstyled">
|
||||
<li><a class="list-group-item list-group-item-action" href="mentions-legales" target="_blank">Mentions légales</a></li>
|
||||
<li><a class="list-group-item list-group-item-action" href="cgu" target="_blank">CGU</a></li>
|
||||
<li><a class="list-group-item list-group-item-action" href="politique-confidentialite" target="_blank">Politique de confidentialité</a></li>
|
||||
<li><a class="list-group-item list-group-item-action" href="abonnement" >Tarifs</a></li>
|
||||
<li><a class="list-group-item list-group-item-action" href="https://blog.talentstube.com/contact" target="_blank"
|
||||
">Contact</a></li>
|
||||
<li><a class="list-group-item list-group-item-action" href="{{ path('mentions-legales') }}" target="_blank">Mentions légales</a></li>
|
||||
<li><a class="list-group-item list-group-item-action" href="{{ path('cgu') }}" target="_blank">CGU</a></li>
|
||||
<li><a class="list-group-item list-group-item-action" href="{{ path('politique-confidentialite') }}" target="_blank">Politique de confidentialité</a></li>
|
||||
<li><a class="list-group-item list-group-item-action" href="{{ path('abonnement') }}" >Tarifs</a></li>
|
||||
<li><a class="list-group-item list-group-item-action" href="https://blog.talentstube.com/contact" target="_blank">Contact</a></li>
|
||||
</ul>
|
||||
<!-- End Links -->
|
||||
</div>
|
||||
@@ -72,14 +78,14 @@
|
||||
|
||||
<div class="col-lg-4 order-lg-1 d-flex align-items-start flex-column">
|
||||
<!-- Logo -->
|
||||
<a class="d-inline-block mb-5" href="index.html" aria-label="Space">
|
||||
<a class="d-inline-block mb-5" href="/" aria-label="Space">
|
||||
<img src="{{ asset('v2/svg/logos/talentstube-logo-mobile.svg') }}" alt="Logo" style="width: 40px; max-width: 100%;">
|
||||
</a>
|
||||
<!-- End Logo -->
|
||||
|
||||
|
||||
|
||||
<p class="small text-muted">Tous droits réservés. © 2020 Talents Tube.</p>
|
||||
<p class="small text-muted">Tous droits réservés.. © 2020 Talents Tube. V{{ version }}</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -1,17 +1,17 @@
|
||||
{% extends 'basev2.html.twig' %}
|
||||
|
||||
{% block title %}Talents Tube - Solution de recrutement en vidéo{% endblock %}
|
||||
{% block title %}Espace recruteur - Solution de recrutement en vidéo | Talents Tube{% endblock %}
|
||||
{% block meta %}
|
||||
<meta name="description" content="Vous souhaitez recruter en vidéo ? Talents Tube diffuse vos vidéos d’offres d’emploi et marque employeur pour attirer les meilleurs talents en vidéo.">
|
||||
|
||||
<meta name="twitter:card" content="summary">
|
||||
<meta name="twitter:site" content="@TalentsTube">
|
||||
<meta name="twitter:title" content="Talents Tube - Solution de recrutement en vidéo">
|
||||
<meta name="twitter:title" content="Espace recruteur - Solution de recrutement en vidéo | Talents Tube">
|
||||
<meta name="twitter:description" content="Vous souhaitez recruter en vidéo ? Talents Tube diffuse vos vidéos d’offres d’emploi et marque employeur pour attirer les meilleurs talents en vidéo.">
|
||||
<meta name="twitter:image" content="{{ absolute_url(asset('img/mail/logo-talents-tube.png')) }}">
|
||||
|
||||
{#Open Graph data pour le partage sur les réseaux sociaux (ex Facebook..)#}
|
||||
<meta property="og:title" content="Talents Tube - Solution de recrutement en vidéo" />
|
||||
<meta property="og:title" content="Espace recruteur - Solution de recrutement en vidéo | Talents Tube" />
|
||||
<meta property="og:type" content="article" />
|
||||
<meta property="og:image" content="{{ absolute_url(asset('img/mail/logo-talents-tube.png')) }}" />
|
||||
<meta property="og:description" content="Vous souhaitez recruter en vidéo ? Talents Tube diffuse vos vidéos d’offres d’emploi et marque employeur pour attirer les meilleurs talents en vidéo." />
|
||||
|
||||
+1
-1
@@ -12,7 +12,7 @@ La candidature en vidéo ou vidéo de motivation s’avère être un outil perfo
|
||||
|
||||
En plus des savoirs et savoir-faire, la candidature vidéo met en lumière le savoir-être et le savoir devenir des candidats. Vous pouvez cerner la personnalité du candidat et son projet professionnel en quelques instants.
|
||||
</p>
|
||||
<a class="btn btn-sm btn-primary btn-wide" href="#">Voir la plateforme</a>
|
||||
<a class="btn btn-sm btn-primary btn-wide" href="https://www.talentstube.com">Voir la plateforme</a>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{% extends 'basev2.html.twig' %}
|
||||
|
||||
{% block title %}Offres d’emploi - Recrutez des candidats en vidéo - Talents Tube{% endblock %}
|
||||
{% block title %}Tarifs - Talents Tube{% endblock %}
|
||||
{% block meta %}
|
||||
<meta name="description" content="Attirez les meilleurs candidats avec des offres d’emploi en vidéo. Présentez le poste recherché, les missions, les locaux et les collaborateurs de votre entreprise.">
|
||||
|
||||
@@ -194,7 +194,7 @@
|
||||
</div>
|
||||
<!-- End Title -->
|
||||
<div class="w-md-80 w-lg-60 text-center mx-md-auto mb-9">
|
||||
<button type="button" class="btn btn-block btn-primary" href="https://blog.talentstube.com/contact" target="_blank">Contactez-nous</button>
|
||||
<a href="https://blog.talentstube.com/contact" target="_blank"><button type="button" class="btn btn-block btn-primary" >Contactez-nous</button></a>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
@@ -1,110 +1,530 @@
|
||||
<!doctype html>
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<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%; }
|
||||
.ExternalClass * { line-height:100%; }
|
||||
body { margin: 0; padding: 0; -webkit-text-size-adjust: 100%; -ms-text-size-adjust: 100%; }
|
||||
table, td { border-collapse:collapse; mso-table-lspace: 0pt; mso-table-rspace: 0pt; }
|
||||
img { border: 0; height: auto; line-height: 100%; outline: none; text-decoration: none; -ms-interpolation-mode: bicubic; }
|
||||
p {
|
||||
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;
|
||||
}
|
||||
<!doctype html>
|
||||
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:v="urn:schemas-microsoft-com:vml"
|
||||
xmlns:o="urn:schemas-microsoft-com:office:office">
|
||||
|
||||
</style>
|
||||
<head>
|
||||
<title>
|
||||
Réinitialisation de votre mot de passe Talents Tube
|
||||
</title>
|
||||
<!--[if !mso]><!-- -->
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||||
<!--<![endif]-->
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<style type="text/css">
|
||||
#outlook a {
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
<!--<![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;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;">
|
||||
</td></tr></table>
|
||||
<![endif]--></td></tr></tbody></table></div><!--[if mso]>
|
||||
</td></tr></table>
|
||||
<![endif]-->
|
||||
<!--[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:22px 0;"><!--[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><a href="http://www.talentstube.com/"><img alt="Talents Tube" src="{{ absolute_url(asset('img/mail/logo-talents-tube.png')) }}" style="border:none;display:block;outline:none;text-decoration:none;width:100%;max-width:150px;height:auto;" width="150" height="auto"></a></td></tr></tbody></table></td></tr></tbody></table></div><!--[if mso]>
|
||||
</td></tr></table>
|
||||
<![endif]--></td></tr></tbody></table></div><!--[if mso]>
|
||||
</td></tr></table>
|
||||
<![endif]-->
|
||||
<!--[if mso]>
|
||||
body {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
-webkit-text-size-adjust: 100%;
|
||||
-ms-text-size-adjust: 100%;
|
||||
}
|
||||
|
||||
<!--[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:#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:Raleway;font-size:14px;line-height:22px;">
|
||||
{% block content %}{% endblock %}<!--[if mso]>
|
||||
</td></tr></table>
|
||||
<![endif]--></td></tr></tbody></table></div><!--[if mso]>
|
||||
</td></tr></table>
|
||||
<![endif]-->
|
||||
<!--[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:#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: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>
|
||||
<a style="margin:10px 20px 22px 20px;" href="https://www.linkedin.com/company/talentstube"><img src="{{ absolute_url(asset('img/mail/linkedin.png')) }}" alt="LinkedIn"></a>
|
||||
</p></div></td></tr></tbody></table></div><!--[if mso]>
|
||||
</td></tr></table>
|
||||
<![endif]--></td></tr></tbody></table></div><!--[if mso]>
|
||||
</td></tr></table>
|
||||
<![endif]-->
|
||||
<!--[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;">
|
||||
<![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>
|
||||
<![endif]--></td></tr></tbody></table></div><!--[if mso]>
|
||||
</td></tr></table>
|
||||
<![endif]--></div></body>
|
||||
</html>
|
||||
table,
|
||||
td {
|
||||
border-collapse: collapse;
|
||||
mso-table-lspace: 0pt;
|
||||
mso-table-rspace: 0pt;
|
||||
}
|
||||
|
||||
img {
|
||||
border: 0;
|
||||
height: auto;
|
||||
line-height: 100%;
|
||||
outline: none;
|
||||
text-decoration: none;
|
||||
-ms-interpolation-mode: bicubic;
|
||||
}
|
||||
|
||||
p {
|
||||
display: block;
|
||||
margin: 13px 0;
|
||||
}
|
||||
</style>
|
||||
<!--[if mso]>
|
||||
<xml>
|
||||
<o:OfficeDocumentSettings>
|
||||
<o:AllowPNG/>
|
||||
<o:PixelsPerInch>96</o:PixelsPerInch>
|
||||
</o:OfficeDocumentSettings>
|
||||
</xml>
|
||||
<![endif]-->
|
||||
<!--[if lte mso 11]>
|
||||
<style type="text/css">
|
||||
.mj-outlook-group-fix { width:100% !important; }
|
||||
</style>
|
||||
<![endif]-->
|
||||
|
||||
<!--[if !mso]><!-->
|
||||
<link href="https://fonts.googleapis.com/css?family=Roboto:300,400,500,700" rel="stylesheet" type="text/css">
|
||||
<style type="text/css">
|
||||
@import url(https://fonts.googleapis.com/css?family=Roboto:300,400,500,700);
|
||||
</style>
|
||||
<!--<![endif]-->
|
||||
|
||||
|
||||
|
||||
<style type="text/css">
|
||||
@media only screen and (min-width:480px) {
|
||||
.mj-column-per-100 {
|
||||
width: 100% !important;
|
||||
max-width: 100%;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
<style type="text/css">
|
||||
[owa] .mj-column-per-100 {
|
||||
width: 100% !important;
|
||||
max-width: 100%;
|
||||
}
|
||||
</style>
|
||||
|
||||
<style type="text/css">
|
||||
@media only screen and (max-width:480px) {
|
||||
table.mj-full-width-mobile {
|
||||
width: 100% !important;
|
||||
}
|
||||
|
||||
td.mj-full-width-mobile {
|
||||
width: auto !important;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
|
||||
|
||||
</head>
|
||||
|
||||
<body style="background-color:#f3f3f4;">
|
||||
|
||||
|
||||
<div style="background-color:#f3f3f4;">
|
||||
|
||||
|
||||
<!--[if mso | IE]>
|
||||
<table
|
||||
align="center" border="0" cellpadding="0" cellspacing="0" class="" style="width:600px;" width="600"
|
||||
>
|
||||
<tr>
|
||||
<td style="line-height:0px;font-size:0px;mso-line-height-rule:exactly;">
|
||||
<![endif]-->
|
||||
|
||||
|
||||
<div style="margin:0px auto;max-width:600px;">
|
||||
|
||||
<table align="center" border="0" cellpadding="0" cellspacing="0" role="presentation"
|
||||
style="width:100%;">
|
||||
<tbody>
|
||||
<tr>
|
||||
<td
|
||||
style="border:0px solid #ffffff;direction:ltr;font-size:0px;padding:15px 0px 15px 0px;padding-bottom:15px;padding-left:0px;padding-right:0px;padding-top:15px;text-align:center;">
|
||||
<!--[if mso | IE]>
|
||||
<table role="presentation" border="0" cellpadding="0" cellspacing="0">
|
||||
|
||||
<tr>
|
||||
|
||||
<td
|
||||
class="" style="vertical-align:top;width:600px;"
|
||||
>
|
||||
<![endif]-->
|
||||
|
||||
<div class="mj-column-per-100 mj-outlook-group-fix"
|
||||
style="font-size:0px;text-align:left;direction:ltr;display:inline-block;vertical-align:top;width:100%;">
|
||||
|
||||
<table border="0" cellpadding="0" cellspacing="0" role="presentation"
|
||||
style="vertical-align:top;" width="100%">
|
||||
|
||||
<tr>
|
||||
<td align="center"
|
||||
style="font-size:0px;padding:10px 25px 10px 25px;padding-right:25px;padding-left:25px;word-break:break-word;">
|
||||
|
||||
<table border="0" cellpadding="0" cellspacing="0" role="presentation"
|
||||
style="border-collapse:collapse;border-spacing:0px;">
|
||||
<tbody>
|
||||
<tr>
|
||||
<td style="width:150px;">
|
||||
|
||||
<a href="https://www.talentstube.com/" target="_blank">
|
||||
|
||||
<img alt="Talents Tube, plateforme pour l'emploi en vidéo."
|
||||
height="auto"
|
||||
src="https://izq1.mjt.lu/tplimg/izq1/b/0644g/gvziq.png"
|
||||
style="border:none;display:block;outline:none;text-decoration:none;height:auto;width:100%;font-size:13px;"
|
||||
title="" width="150" />
|
||||
|
||||
</a>
|
||||
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
</table>
|
||||
|
||||
</div>
|
||||
|
||||
<!--[if mso | IE]>
|
||||
</td>
|
||||
|
||||
</tr>
|
||||
|
||||
</table>
|
||||
<![endif]-->
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
<!--[if mso | IE]>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
<table
|
||||
align="center" border="0" cellpadding="0" cellspacing="0" class="" style="width:600px;" width="600"
|
||||
>
|
||||
<tr>
|
||||
<td style="line-height:0px;font-size:0px;mso-line-height-rule:exactly;">
|
||||
<![endif]-->
|
||||
|
||||
|
||||
<div style="background:#ffffff;background-color:#ffffff;margin:0px auto;max-width:600px;">
|
||||
|
||||
<table align="center" border="0" cellpadding="0" cellspacing="0" role="presentation"
|
||||
style="background:#ffffff;background-color:#ffffff;width:100%;">
|
||||
<tbody>
|
||||
<tr>
|
||||
<td
|
||||
style="border:0px solid #ffffff;direction:ltr;font-size:0px;padding:20px 0px 20px 0px;padding-left:0px;padding-right:0px;text-align:center;">
|
||||
<!--[if mso | IE]>
|
||||
<table role="presentation" border="0" cellpadding="0" cellspacing="0">
|
||||
|
||||
<tr>
|
||||
|
||||
<td
|
||||
class="" style="vertical-align:top;width:600px;"
|
||||
>
|
||||
<![endif]-->
|
||||
|
||||
<div class="mj-column-per-100 mj-outlook-group-fix"
|
||||
style="font-size:0px;text-align:left;direction:ltr;display:inline-block;vertical-align:top;width:100%;">
|
||||
|
||||
{% block content %}{% endblock %}
|
||||
|
||||
</div>
|
||||
|
||||
<!--[if mso | IE]>
|
||||
</td>
|
||||
|
||||
</tr>
|
||||
|
||||
</table>
|
||||
<![endif]-->
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
<!--[if mso | IE]>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
<table
|
||||
align="center" border="0" cellpadding="0" cellspacing="0" class="" style="width:600px;" width="600"
|
||||
>
|
||||
<tr>
|
||||
<td style="line-height:0px;font-size:0px;mso-line-height-rule:exactly;">
|
||||
<![endif]-->
|
||||
|
||||
|
||||
<div style="margin:0px auto;max-width:600px;">
|
||||
|
||||
<table align="center" border="0" cellpadding="0" cellspacing="0" role="presentation"
|
||||
style="width:100%;">
|
||||
<tbody>
|
||||
<tr>
|
||||
<td
|
||||
style="border:0px solid #ffffff;direction:ltr;font-size:0px;padding:20px 0px 0px 0px;padding-bottom:0px;padding-left:0px;padding-right:0px;text-align:center;">
|
||||
<!--[if mso | IE]>
|
||||
<table role="presentation" border="0" cellpadding="0" cellspacing="0">
|
||||
|
||||
<tr>
|
||||
|
||||
<td
|
||||
class="" style="vertical-align:top;width:600px;"
|
||||
>
|
||||
<![endif]-->
|
||||
|
||||
<div class="mj-column-per-100 mj-outlook-group-fix"
|
||||
style="font-size:0px;text-align:left;direction:ltr;display:inline-block;vertical-align:top;width:100%;">
|
||||
|
||||
<table border="0" cellpadding="0" cellspacing="0" role="presentation"
|
||||
style="vertical-align:top;" width="100%">
|
||||
|
||||
<tr>
|
||||
<td align="left"
|
||||
style="font-size:0px;padding:0px 0px 0px 0px;padding-top:0px;padding-right:0px;padding-bottom:0px;padding-left:0px;word-break:break-word;">
|
||||
|
||||
<div
|
||||
style="font-family:Arial, sans-serif;font-size:13px;letter-spacing:normal;line-height:1;text-align:left;color:#000000;">
|
||||
<p
|
||||
style="text-align: center; margin: 10px 0; margin-top: 10px; margin-bottom: 10px;">
|
||||
<span
|
||||
style="text-align:center;font-size:13px;letter-spacing:normal;text-align:left;color:#1E2327;font-family:Arial;">REJOIGNEZ
|
||||
LA COMMUNAUTÉ</span></p>
|
||||
</div>
|
||||
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td align="center"
|
||||
style="background:transparent;font-size:0px;padding:0px 0px 25px 0px;padding-top:0px;padding-right:0px;padding-bottom:25px;padding-left:0px;word-break:break-word;">
|
||||
|
||||
|
||||
<!--[if mso | IE]>
|
||||
<table
|
||||
align="center" border="0" cellpadding="0" cellspacing="0" role="presentation"
|
||||
>
|
||||
<tr>
|
||||
|
||||
<td>
|
||||
<![endif]-->
|
||||
<table align="center" border="0" cellpadding="0" cellspacing="0"
|
||||
role="presentation" style="float:none;display:inline-table;">
|
||||
|
||||
<tr>
|
||||
<td style="padding:4px;">
|
||||
<table border="0" cellpadding="0" cellspacing="0"
|
||||
role="presentation"
|
||||
style="background:#1689fb;border-radius:50%;width:21;">
|
||||
<tr>
|
||||
<td
|
||||
style="padding:5px 5px 5px 5px;font-size:0;height:21;vertical-align:middle;width:21;">
|
||||
<a href="https://www.youtube.com/channel/UCRNqiJCLAorO0aCzNQu-8ww"
|
||||
target="_blank">
|
||||
<img height="21"
|
||||
src="https://www.mailjet.com/images/theme/v1/icons/ico-social/youtube.png"
|
||||
style="border-radius:50%;display:block;"
|
||||
width="21" />
|
||||
</a>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
|
||||
</tr>
|
||||
|
||||
</table>
|
||||
<!--[if mso | IE]>
|
||||
</td>
|
||||
|
||||
<td>
|
||||
<![endif]-->
|
||||
<table align="center" border="0" cellpadding="0" cellspacing="0"
|
||||
role="presentation" style="float:none;display:inline-table;">
|
||||
|
||||
<tr>
|
||||
<td style="padding:4px;">
|
||||
<table border="0" cellpadding="0" cellspacing="0"
|
||||
role="presentation"
|
||||
style="background:#1689fb;border-radius:50%;width:21;">
|
||||
<tr>
|
||||
<td
|
||||
style="padding:5px 5px 5px 5px;font-size:0;height:21;vertical-align:middle;width:21;">
|
||||
<a href="https://www.linkedin.com/company/talentstube"
|
||||
target="_blank">
|
||||
<img height="21"
|
||||
src="https://www.mailjet.com/images/theme/v1/icons/ico-social/linkedin.png"
|
||||
style="border-radius:50%;display:block;"
|
||||
width="21" />
|
||||
</a>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
|
||||
</tr>
|
||||
|
||||
</table>
|
||||
<!--[if mso | IE]>
|
||||
</td>
|
||||
|
||||
<td>
|
||||
<![endif]-->
|
||||
<table align="center" border="0" cellpadding="0" cellspacing="0"
|
||||
role="presentation" style="float:none;display:inline-table;">
|
||||
|
||||
<tr>
|
||||
<td style="padding:4px;">
|
||||
<table border="0" cellpadding="0" cellspacing="0"
|
||||
role="presentation"
|
||||
style="background:#1689fb;border-radius:50%;width:21;">
|
||||
<tr>
|
||||
<td
|
||||
style="padding:5px 5px 5px 5px;font-size:0;height:21;vertical-align:middle;width:21;">
|
||||
<a href="https://www.facebook.com/TalentsTuber/"
|
||||
target="_blank">
|
||||
<img height="21"
|
||||
src="https://www.mailjet.com/images/theme/v1/icons/ico-social/facebook.png"
|
||||
style="border-radius:50%;display:block;"
|
||||
width="21" />
|
||||
</a>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
|
||||
</tr>
|
||||
|
||||
</table>
|
||||
<!--[if mso | IE]>
|
||||
</td>
|
||||
|
||||
<td>
|
||||
<![endif]-->
|
||||
<table align="center" border="0" cellpadding="0" cellspacing="0"
|
||||
role="presentation" style="float:none;display:inline-table;">
|
||||
|
||||
<tr>
|
||||
<td style="padding:4px;">
|
||||
<table border="0" cellpadding="0" cellspacing="0"
|
||||
role="presentation"
|
||||
style="background:#1689fb;border-radius:50%;width:21;">
|
||||
<tr>
|
||||
<td
|
||||
style="padding:5px 5px 5px 5px;font-size:0;height:21;vertical-align:middle;width:21;">
|
||||
<a href="https://www.instagram.com/talents.tube/"
|
||||
target="_blank">
|
||||
<img height="21"
|
||||
src="https://www.mailjet.com/images/theme/v1/icons/ico-social/instagram.png"
|
||||
style="border-radius:50%;display:block;"
|
||||
width="21" />
|
||||
</a>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
|
||||
</tr>
|
||||
|
||||
</table>
|
||||
<!--[if mso | IE]>
|
||||
</td>
|
||||
|
||||
<td>
|
||||
<![endif]-->
|
||||
<table align="center" border="0" cellpadding="0" cellspacing="0"
|
||||
role="presentation" style="float:none;display:inline-table;">
|
||||
|
||||
<tr>
|
||||
<td style="padding:4px;">
|
||||
<table border="0" cellpadding="0" cellspacing="0"
|
||||
role="presentation"
|
||||
style="background:#1689fb;border-radius:50%;width:21;">
|
||||
<tr>
|
||||
<td
|
||||
style="padding:5px 5px 5px 5px;font-size:0;height:21;vertical-align:middle;width:21;">
|
||||
<a href="https://twitter.com/TalentsTuber"
|
||||
target="_blank">
|
||||
<img height="21"
|
||||
src="https://www.mailjet.com/images/theme/v1/icons/ico-social/twitter.png"
|
||||
style="border-radius:50%;display:block;"
|
||||
width="21" />
|
||||
</a>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
|
||||
</tr>
|
||||
|
||||
</table>
|
||||
<!--[if mso | IE]>
|
||||
</td>
|
||||
|
||||
</tr>
|
||||
</table>
|
||||
<![endif]-->
|
||||
|
||||
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td align="left"
|
||||
style="font-size:0px;padding:0px 25px 0px 25px;padding-top:0px;padding-right:25px;padding-bottom:0px;padding-left:25px;word-break:break-word;">
|
||||
|
||||
<div
|
||||
style="font-family:Arial, sans-serif;font-size:13px;letter-spacing:normal;line-height:1;text-align:left;color:#000000;">
|
||||
<p class="text-build-content"
|
||||
style="text-align: center; margin: 10px 0; margin-top: 10px;"
|
||||
data-testid="51OayorMO"><a class="link-build-content"
|
||||
style="color:inherit;; text-decoration: none;"
|
||||
target="_blank"
|
||||
href="https://www.talentstube.com/Confidentialite"><span
|
||||
style="color:#4B4F52;font-family:Arial;font-size:13px;line-height:20px;"><u>Confidentialité</u></span></a><span
|
||||
style="color:#4B4F52;font-family:Roboto;font-size:13px;line-height:20px;">
|
||||
| </span><a class="link-build-content"
|
||||
style="color:inherit;; text-decoration: none;"
|
||||
target="_blank" href="https://www.talentstube.com/Cgu"><span
|
||||
style="color:#4B4F52;font-family:Arial;font-size:13px;line-height:20px;"><u>CGU</u></span></a>
|
||||
</p>
|
||||
<p class="text-build-content"
|
||||
style="text-align: center; margin: 10px 0; margin-bottom: 10px;"
|
||||
data-testid="51OayorMO"><span
|
||||
style="color:#4B4F52;font-family:Roboto;font-size:13px;line-height:20px;">Talents
|
||||
Tube, 3 rue Louis de Broglie, 56000 Vannes, France</span>
|
||||
</p>
|
||||
</div>
|
||||
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
</table>
|
||||
|
||||
</div>
|
||||
|
||||
<!--[if mso | IE]>
|
||||
</td>
|
||||
|
||||
</tr>
|
||||
|
||||
</table>
|
||||
<![endif]-->
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
<!--[if mso | IE]>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
<![endif]-->
|
||||
|
||||
|
||||
</div>
|
||||
|
||||
</body>
|
||||
|
||||
</html>
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -12,40 +12,44 @@
|
||||
<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.
|
||||
Découvrez la réponse vidéo en cliquant sur le bouton ci-dessous.
|
||||
<br/>
|
||||
<br/>
|
||||
<div style="text-align:center;">
|
||||
{% if answer.ad.alias is null %}
|
||||
<a class="btn btn-default" href="{{ absolute_url(path('talent_ad_detail',{'alias': aliasCompany,'id': answer.id })) }}">Visionner la réponse</a>
|
||||
{# <a class="btn btn-default" href="{{ absolute_url(path('talent_ad_detail',{'alias': aliasCompany,'id': answer.id })) }}">Visionner la réponse</a> #}
|
||||
<a class="btn btn-default" href="https://www.talentstube.com">Consulter la réponse</a>
|
||||
{% else %}
|
||||
<a class="btn btn-default" href="{{ absolute_url(path('talent_ad_detail',{'alias': answer.ad.alias,'id': answer.id })) }}">Visionner la réponse</a>
|
||||
{# <a class="btn btn-default" href="{{ absolute_url(path('talent_ad_detail',{'alias': answer.ad.alias,'id': answer.id })) }}">Visionner la réponse</a> #}
|
||||
<a class="btn btn-default" href="https://www.talentstube.com">Consulter la réponse</a>
|
||||
{% endif %}
|
||||
</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.
|
||||
Découvrez la réponse en cliquant sur le bouton ci-dessous.
|
||||
<br/>
|
||||
<br/>
|
||||
<div style="text-align:center;">
|
||||
{% if answer.ad.alias is null %}
|
||||
<a class="btn btn-default" href="{{ absolute_url(path('talent_ad_detail',{'alias': aliasCompany,'id': answer.id })) }}">Consulter la réponse</a>
|
||||
{# <a class="btn btn-default" href="{{ absolute_url(path('talent_ad_detail',{'alias': aliasCompany,'id': answer.id })) }}">Consulter la réponse</a> #}
|
||||
<a class="btn btn-default" href="https://www.talentstube.com">Consulter la réponse</a>
|
||||
{% else %}
|
||||
<a class="btn btn-default" href="{{ absolute_url(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> #}
|
||||
<a class="btn btn-default" href="https://www.talentstube.com">Consulter la réponse</a>
|
||||
{% endif %}
|
||||
</div>
|
||||
{% endif %}
|
||||
<br>
|
||||
<strong>Vous souhaitez contacter l’entreprise ?</strong><br /><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 /> #}
|
||||
<br />
|
||||
L’équipe Talents Tube
|
||||
{% elseif type == 'plain' %}
|
||||
|
||||
@@ -2,16 +2,136 @@
|
||||
|
||||
{% block body_text %}
|
||||
{% autoescape false %}
|
||||
Bonjour {{ user.firstname }} {{ user.lastname }},
|
||||
<table border="0" cellpadding="0" cellspacing="0" role="presentation" style="vertical-align:top;" width="100%">
|
||||
|
||||
|
||||
Nous avons reçu une demande de changement de mot de passe pour votre compte Talents Tube.
|
||||
Si vous n'avez pas fait cette demande, veuillez ignorez cet e-mail.
|
||||
Dans le cas contraire, veuillez cliquer sur le lien ci-dessous pour changer votre mot de passe :
|
||||
<tr>
|
||||
<td align="left"
|
||||
style="font-size:0px;padding:0px 25px 0px 25px;padding-top:0px;padding-bottom:0px;word-break:break-word;">
|
||||
|
||||
{{ confirmationUrl }}
|
||||
<div
|
||||
style="font-family:Arial, sans-serif;font-size:22px;letter-spacing:normal;line-height:1;text-align:left;color:#000000;">
|
||||
<h1 class="text-build-content" data-testid="1ZA4EV9FdGR"
|
||||
style="margin-top: 10px; margin-bottom: 10px; font-weight: normal;">
|
||||
<span style="color:#000000;font-family:Roboto;font-size:22px;"><b>Bonjour
|
||||
{{ user.firstname }} {{ user.lastname }},</b></span></h1>
|
||||
</div>
|
||||
|
||||
L'équipe de talentstube.com
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td align="left"
|
||||
style="font-size:0px;padding:0px 25px 0px 25px;padding-top:0px;padding-bottom:0px;word-break:break-word;">
|
||||
|
||||
<div
|
||||
style="font-family:Arial, sans-serif;font-size:14px;letter-spacing:normal;line-height:1;text-align:left;color:#000000;">
|
||||
<p class="text-build-content" style="line-height: 24px; margin: 10px 0; margin-top: 10px;"
|
||||
data-testid="S-P6IScCbo-"><span style="color:#000000;font-family:Roboto;font-size:16px;">Vous
|
||||
avez demandé un nouveau mot de passe pour votre compte
|
||||
Talents Tube.</span></p>
|
||||
<p class="text-build-content" style="line-height: 24px; margin: 10px 0; margin-bottom: 10px;"
|
||||
data-testid="S-P6IScCbo-"><span style="color:#000000;font-family:Roboto;font-size:16px;">Cliquez
|
||||
sur le bouton ci-dessous pour changer votre mot de passe
|
||||
:</span></p>
|
||||
</div>
|
||||
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td style="font-size:0px;padding:0px;padding-top:0px;padding-bottom:0px;word-break:break-word;">
|
||||
|
||||
<div
|
||||
style="font-family:Arial, sans-serif;font-size:13px;letter-spacing:normal;line-height:1;color:#000000;">
|
||||
<div>
|
||||
<!--[if mso | IE]><table align="center" border="0" cellpadding="0" cellspacing="0" class="" style="width:600px;" width="600" ><tr><td style="line-height:0px;font-size:0px;mso-line-height-rule:exactly;"><![endif]-->
|
||||
<div style="margin:0px auto;max-width:600px;">
|
||||
<table align="center" border="0" cellpadding="0" cellspacing="0" role="presentation"
|
||||
style="width:100%;">
|
||||
<tbody>
|
||||
<tr>
|
||||
<td style="direction:ltr;font-size:0px;padding:10px 0;text-align:center;">
|
||||
<!--[if mso | IE]><table role="presentation" border="0" cellpadding="0" cellspacing="0"><tr><td class="" style="vertical-align:top;width:600px;" ><![endif]-->
|
||||
<div class="mj-column-per-100 mj-outlook-group-fix"
|
||||
style="font-size:0px;text-align:left;direction:ltr;display:inline-block;vertical-align:top;width:100%;">
|
||||
<table border="0" cellpadding="0" cellspacing="0" role="presentation"
|
||||
style="vertical-align:top;" width="100%">
|
||||
<tr>
|
||||
<td align="center" vertical-align="middle"
|
||||
style="font-size:0px;padding:10px 25px;word-break:break-word;">
|
||||
<table border="0" cellpadding="0" cellspacing="0"
|
||||
role="presentation"
|
||||
style="border-collapse:separate;line-height:100%;">
|
||||
<tr>
|
||||
<td align="center" bgcolor="#1689FB" role="presentation"
|
||||
style="border:none;border-radius:3px;cursor:auto;mso-padding-alt:10px 25px;background:#1689FB;"
|
||||
valign="middle">
|
||||
<a href="{{ confirmationUrl }}"
|
||||
style="display:inline-block;background:#1689FB;color:white;font-family:Roboto;font-size:15px;font-weight:normal;line-height:120%;margin:0;text-decoration:none;text-transform:none;padding:14px 20px;mso-padding-alt:0px;border-radius:5px;; text-decoration: none;">Modifier
|
||||
mon mot de
|
||||
passe</a>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
<!--[if mso | IE]></td></tr></table><![endif]-->
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<!--[if mso | IE]></td></tr></table><![endif]-->
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td align="left"
|
||||
style="background:#f3f9ff;font-size:0px;padding:0px 25px 0px 25px;padding-top:0px;padding-right:25px;padding-bottom:0px;padding-left:25px;word-break:break-word;">
|
||||
|
||||
<div
|
||||
style="font-family:Arial, sans-serif;font-size:14px;letter-spacing:normal;line-height:1;text-align:left;color:#000000;">
|
||||
<p class="text-build-content" style="line-height: 22px; margin: 10px 0; margin-top: 10px;"
|
||||
data-testid="-KQrJGjLi"><span style="color:#000000;font-family:Roboto;font-size:14px;">Vous
|
||||
pouvez également copier-coller cette URL dans votre
|
||||
navigateur Internet.</span></p>
|
||||
<p class="text-build-content" style="line-height: 22px; margin: 10px 0; margin-bottom: 10px;"
|
||||
data-testid="-KQrJGjLi"><span
|
||||
style="color:#000000;font-family:Roboto;font-size:14px;">{{ confirmationUrl }}</span>
|
||||
</p>
|
||||
</div>
|
||||
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td align="left"
|
||||
style="font-size:0px;padding:15px 25px 0px 25px;padding-top:15px;padding-right:25px;padding-bottom:0px;padding-left:25px;word-break:break-word;">
|
||||
|
||||
<div
|
||||
style="font-family:Arial, sans-serif;font-size:13px;letter-spacing:normal;line-height:1;text-align:left;color:#000000;">
|
||||
<p class="text-build-content" data-testid="CMoJCeaZu" style="margin: 10px 0; margin-top: 10px;"><span
|
||||
style="color:#000000;font-family:Roboto;font-size:16px;line-height:24px;">Si
|
||||
vous n'avez pas demandé à changer de mot de passe, veuillez
|
||||
ignorer ce message.</span></p>
|
||||
<p class="text-build-content" data-testid="CMoJCeaZu" style="margin: 10px 0;"> </p>
|
||||
<p class="text-build-content" data-testid="CMoJCeaZu" style="margin: 10px 0;"><span
|
||||
style="color:#000000;font-family:Roboto;font-size:16px;line-height:24px;">A
|
||||
très bientôt,</span></p>
|
||||
<p class="text-build-content" data-testid="CMoJCeaZu" style="margin: 10px 0; margin-bottom: 10px;"><span
|
||||
style="color:#000000;font-family:Roboto;font-size:16px;line-height:24px;">L'équipe
|
||||
Talents Tube</span></p>
|
||||
</div>
|
||||
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
</table>
|
||||
{% endautoescape %}
|
||||
{% endblock %}
|
||||
|
||||
|
||||
@@ -2,17 +2,135 @@
|
||||
|
||||
|
||||
{% block content %}
|
||||
<p>Bonjour {{ user.firstname }} {{ user.lastname }},</p>
|
||||
<table border="0" cellpadding="0" cellspacing="0" role="presentation" style="vertical-align:top;" width="100%">
|
||||
|
||||
<p>
|
||||
Nous avons reçu une demande de changement de mot de passe pour votre compte Talents Tube.<br />
|
||||
Si vous n'avez pas fait cette demande, veuillez ignorez cet e-mail.<br />
|
||||
Dans le cas contraire, veuillez cliquer sur le lien ci-dessous pour changer votre mot de passe :<br /><br />
|
||||
<a href="{{ confirmationUrl }}">Réinitialiser mon mot de passe</a>
|
||||
<br /><br />
|
||||
Vous pouvez également copier-coller cette URL dans votre navigateur Internet :
|
||||
{{ confirmationUrl }}
|
||||
</p>
|
||||
<tr>
|
||||
<td align="left"
|
||||
style="font-size:0px;padding:0px 25px 0px 25px;padding-top:0px;padding-bottom:0px;word-break:break-word;">
|
||||
|
||||
<div
|
||||
style="font-family:Arial, sans-serif;font-size:22px;letter-spacing:normal;line-height:1;text-align:left;color:#000000;">
|
||||
<h1 class="text-build-content" data-testid="1ZA4EV9FdGR"
|
||||
style="margin-top: 10px; margin-bottom: 10px; font-weight: normal;">
|
||||
<span style="color:#000000;font-family:Roboto;font-size:22px;"><b>Bonjour
|
||||
{{ user.firstname }} {{ user.lastname }},</b></span></h1>
|
||||
</div>
|
||||
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td align="left"
|
||||
style="font-size:0px;padding:0px 25px 0px 25px;padding-top:0px;padding-bottom:0px;word-break:break-word;">
|
||||
|
||||
<div
|
||||
style="font-family:Arial, sans-serif;font-size:14px;letter-spacing:normal;line-height:1;text-align:left;color:#000000;">
|
||||
<p class="text-build-content" style="line-height: 24px; margin: 10px 0; margin-top: 10px;"
|
||||
data-testid="S-P6IScCbo-"><span style="color:#000000;font-family:Roboto;font-size:16px;">Vous
|
||||
avez demandé un nouveau mot de passe pour votre compte
|
||||
Talents Tube.</span></p>
|
||||
<p class="text-build-content" style="line-height: 24px; margin: 10px 0; margin-bottom: 10px;"
|
||||
data-testid="S-P6IScCbo-"><span style="color:#000000;font-family:Roboto;font-size:16px;">Cliquez
|
||||
sur le bouton ci-dessous pour changer votre mot de passe
|
||||
:</span></p>
|
||||
</div>
|
||||
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td style="font-size:0px;padding:0px;padding-top:0px;padding-bottom:0px;word-break:break-word;">
|
||||
|
||||
<div
|
||||
style="font-family:Arial, sans-serif;font-size:13px;letter-spacing:normal;line-height:1;color:#000000;">
|
||||
<div>
|
||||
<!--[if mso | IE]><table align="center" border="0" cellpadding="0" cellspacing="0" class="" style="width:600px;" width="600" ><tr><td style="line-height:0px;font-size:0px;mso-line-height-rule:exactly;"><![endif]-->
|
||||
<div style="margin:0px auto;max-width:600px;">
|
||||
<table align="center" border="0" cellpadding="0" cellspacing="0" role="presentation"
|
||||
style="width:100%;">
|
||||
<tbody>
|
||||
<tr>
|
||||
<td style="direction:ltr;font-size:0px;padding:10px 0;text-align:center;">
|
||||
<!--[if mso | IE]><table role="presentation" border="0" cellpadding="0" cellspacing="0"><tr><td class="" style="vertical-align:top;width:600px;" ><![endif]-->
|
||||
<div class="mj-column-per-100 mj-outlook-group-fix"
|
||||
style="font-size:0px;text-align:left;direction:ltr;display:inline-block;vertical-align:top;width:100%;">
|
||||
<table border="0" cellpadding="0" cellspacing="0" role="presentation"
|
||||
style="vertical-align:top;" width="100%">
|
||||
<tr>
|
||||
<td align="center" vertical-align="middle"
|
||||
style="font-size:0px;padding:10px 25px;word-break:break-word;">
|
||||
<table border="0" cellpadding="0" cellspacing="0"
|
||||
role="presentation"
|
||||
style="border-collapse:separate;line-height:100%;">
|
||||
<tr>
|
||||
<td align="center" bgcolor="#1689FB" role="presentation"
|
||||
style="border:none;border-radius:3px;cursor:auto;mso-padding-alt:10px 25px;background:#1689FB;"
|
||||
valign="middle">
|
||||
<a href="{{ confirmationUrl }}"
|
||||
style="display:inline-block;background:#1689FB;color:white;font-family:Roboto;font-size:15px;font-weight:normal;line-height:120%;margin:0;text-decoration:none;text-transform:none;padding:14px 20px;mso-padding-alt:0px;border-radius:5px;; text-decoration: none;">Modifier
|
||||
mon mot de
|
||||
passe</a>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
<!--[if mso | IE]></td></tr></table><![endif]-->
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<!--[if mso | IE]></td></tr></table><![endif]-->
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td align="left"
|
||||
style="background:#f3f9ff;font-size:0px;padding:0px 25px 0px 25px;padding-top:0px;padding-right:25px;padding-bottom:0px;padding-left:25px;word-break:break-word;">
|
||||
|
||||
<div
|
||||
style="font-family:Arial, sans-serif;font-size:14px;letter-spacing:normal;line-height:1;text-align:left;color:#000000;">
|
||||
<p class="text-build-content" style="line-height: 22px; margin: 10px 0; margin-top: 10px;"
|
||||
data-testid="-KQrJGjLi"><span style="color:#000000;font-family:Roboto;font-size:14px;">Vous
|
||||
pouvez également copier-coller cette URL dans votre
|
||||
navigateur Internet.</span></p>
|
||||
<p class="text-build-content" style="line-height: 22px; margin: 10px 0; margin-bottom: 10px;"
|
||||
data-testid="-KQrJGjLi"><span
|
||||
style="color:#000000;font-family:Roboto;font-size:14px;">{{ confirmationUrl }}</span>
|
||||
</p>
|
||||
</div>
|
||||
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td align="left"
|
||||
style="font-size:0px;padding:15px 25px 0px 25px;padding-top:15px;padding-right:25px;padding-bottom:0px;padding-left:25px;word-break:break-word;">
|
||||
|
||||
<div
|
||||
style="font-family:Arial, sans-serif;font-size:13px;letter-spacing:normal;line-height:1;text-align:left;color:#000000;">
|
||||
<p class="text-build-content" data-testid="CMoJCeaZu" style="margin: 10px 0; margin-top: 10px;"><span
|
||||
style="color:#000000;font-family:Roboto;font-size:16px;line-height:24px;">Si
|
||||
vous n'avez pas demandé à changer de mot de passe, veuillez
|
||||
ignorer ce message.</span></p>
|
||||
<p class="text-build-content" data-testid="CMoJCeaZu" style="margin: 10px 0;"> </p>
|
||||
<p class="text-build-content" data-testid="CMoJCeaZu" style="margin: 10px 0;"><span
|
||||
style="color:#000000;font-family:Roboto;font-size:16px;line-height:24px;">A
|
||||
très bientôt,</span></p>
|
||||
<p class="text-build-content" data-testid="CMoJCeaZu" style="margin: 10px 0; margin-bottom: 10px;"><span
|
||||
style="color:#000000;font-family:Roboto;font-size:16px;line-height:24px;">L'équipe
|
||||
Talents Tube</span></p>
|
||||
</div>
|
||||
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
</table>
|
||||
|
||||
<p>L'équipe de talentstube.com</p>
|
||||
{% endblock %}
|
||||
@@ -0,0 +1,434 @@
|
||||
<!DOCTYPE html>
|
||||
|
||||
<html lang="fr">
|
||||
|
||||
<head>
|
||||
<!-- Global site tag (gtag.js) - Google Analytics -->
|
||||
<script async src="https://www.googletagmanager.com/gtag/js?id=UA-98246968-7"></script>
|
||||
<script>
|
||||
window.dataLayer = window.dataLayer || [];
|
||||
function gtag(){dataLayer.push(arguments);}
|
||||
gtag('js', new Date());
|
||||
gtag('config', 'UA-98246968-7');
|
||||
</script>
|
||||
<link rel="preconnect" href="https://fonts.gstatic.com">
|
||||
<link href="https://fonts.googleapis.com/css2?family=Roboto:wght@100;400;500;700;900&display=swap" rel="stylesheet">
|
||||
<meta charset="utf-8">
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<title>Réalisez une offre d’emploi originale vous-même</title>
|
||||
<meta name="description" content="Créez des vidéos d’offres d’emploi originales avec Talents Tube. Réalisez vos vidéos rapidement avec un smartphone et recrutez">
|
||||
<link rel="shortcut icon" href="/landing/img/talentstubeIco.svg" type="image/x-icon">
|
||||
<link rel="icon" href="/landing/img/favicon.ico" type="image/x-icon">
|
||||
<link href="/landing/css/bootstrap.min.css" rel="stylesheet">
|
||||
<link href="/landing/css/owl.carousel.css" rel="stylesheet">
|
||||
<link href="/landing/css/main.css" rel="stylesheet">
|
||||
<link href="/landing/css/fontawesome.min.css" rel="stylesheet">
|
||||
<!-- Latest compiled and minified CSS -->
|
||||
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.4/css/bootstrap.min.css">
|
||||
<!-- Optional theme -->
|
||||
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.4/css/bootstrap-theme.min.css">
|
||||
<script src="/landing/js/modernizr.min.js"></script>
|
||||
<!--Ajout pour le référencement-->
|
||||
{# <link rel="canonical" href="" /> #}
|
||||
<meta property="og:locale" content="fr_FR" />
|
||||
<meta property="og:type" content="website" />
|
||||
<meta property="og:title" content="Réalisez une offre d’emploi originale vous-même" />
|
||||
<meta property="og:description" content="Créez des vidéos d’offres d’emploi originales avec Talents Tube. Réalisez vos vidéos rapidement avec un smartphone et recrutez" />
|
||||
<meta property="og:url" content="https://recruteur.talentstube.com/offre-emploi-originale" />
|
||||
<meta property="og:site_name" content="Talents Tube" />
|
||||
<meta property="og:image" content="https://recruteur.talentstube.com/landing/img/offre-emploi-originale-en-video.jpg" />
|
||||
<meta name="twitter:card" content="summary_large_image" />
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<!-- Modal : Vidéo -->
|
||||
<div class="modal fade bd-example-modal-lg" id="exampleModalCenter" tabindex="-1" role="dialog"
|
||||
aria-labelledby="myLargeModalLabel" aria-hidden="true">
|
||||
<div class="modal-dialog modal-lg" role="document">
|
||||
<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>
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
<div class="container-video" style="position:relative;width:100%;height:0;padding-bottom:56.25%;">
|
||||
<iframe src="https://www.youtube.com/embed/gOXg9e29dyc"
|
||||
style="position: absolute;top: 0;left: 0;width: 100%;height: 100%;" frameborder="0"
|
||||
allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture"
|
||||
allowfullscreen id="player"></iframe>
|
||||
</div>
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
<button type="button" class="btn btn-secondary" data-dismiss="modal" onclick="fermerVideo()">Fermer</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!--Modal : Vidéo End -->
|
||||
|
||||
<!-- Modal : Formulaire -->
|
||||
<div class="modal fade" id="exampleModal" tabindex="-1" role="dialog" aria-labelledby="exampleModalLabel"
|
||||
aria-hidden="true">
|
||||
<div class="modal-dialog" role="document">
|
||||
<div class="modal-content">
|
||||
<div class="modal-header">
|
||||
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
<div class="container-fluid">
|
||||
<div class="row" id="demandeRdvContainer">
|
||||
<div class="col-sm-12">
|
||||
<h2>Demandez votre rendez-vous</h2>
|
||||
|
||||
<div class="row">
|
||||
|
||||
<div class="col-12 col-sm-12">
|
||||
<div class="form-group">
|
||||
<label for="exampleInputPrenom>">Prénom</label>
|
||||
<input type="text" class="form-control" id="prenom" placeholder="Votre prénom">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
|
||||
<div class="col-12 col-sm-12">
|
||||
<div class="form-group">
|
||||
<label for="exampleInputNom">Nom</label>
|
||||
<input type="text" class="form-control" id="nom" placeholder="Votre nom">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
|
||||
<div class="col-12 col-sm-12">
|
||||
<div class="form-group">
|
||||
<label for="exampleInputEmail1">E-mail</label>
|
||||
<input type="email" class="form-control" id="email" placeholder="Votre email">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
|
||||
<div class="col-12 col-sm-12">
|
||||
<div class="form-group">
|
||||
<label for="exampleInputPhone">Téléphone</label>
|
||||
<input type="phone" class="form-control" id="telephone" placeholder="Votre téléphone">
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<p class="text-danger" id="erreur">Veuillez compléter l'ensemble des champs ci-dessus pour
|
||||
demander un rendez-vous</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row" id="felicitationRdvContainer" class="text-center">
|
||||
<div class="text-center">
|
||||
<img src="/landing/img/demande-rendez-vous.svg">
|
||||
<h2>Merci!</h2>
|
||||
<p>Votre demande a bien été envoyée. Un conseiller vous contactera <b>sous 48h</b>.
|
||||
En attendant, nous allons vous rediriger vers notre blog afin de vous faire découvrir tous nos
|
||||
conseils pour un recrutement réussi.</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
<button class="bttn" onClick="demanderRdv();" id="boutonDemandeRdv">Demander un rendez-vous</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!--Modal : Formulaire End -->
|
||||
|
||||
<main>
|
||||
<data id="mj-w-res-data" data-token="3ff0355b417f4f6e84deb70f12fcbca8" class="mj-w-data" data-apikey="2jWA"
|
||||
data-w-id="HpL" data-lang="fr_FR" data-base="https://app.mailjet.com" data-width="640" data-height="588"
|
||||
data-statics="statics"></data>
|
||||
<!--Header : Menu et Vidéo en fond-->
|
||||
<header class="hero-section">
|
||||
<!--HTML5 Video-->
|
||||
<video autoplay loop muted id="bgvid" poster="">
|
||||
<source src="/landing/video/modele-offre-emploi-originale.mp4" type="video/mp4"
|
||||
alt="Modèle offre d'emploi originale">
|
||||
<!--Prévoir une image fixe pour la version mobile : main.css : 102-->
|
||||
</video>
|
||||
|
||||
<!--HTML5 Video end-->
|
||||
<div class="overlay"></div>
|
||||
<div class="container">
|
||||
<div class="row">
|
||||
<div class="col-md-12">
|
||||
<div class="logo-header" style="display:inline-block;">
|
||||
<img src="/landing/img/talentstube-logo-blanc.svg" data-at2x="/landing/img/talentstube-logo-blanc@2x.svg"
|
||||
alt="Talents Tube" class="logo-talentstube" style="width:150px">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!--nav-->
|
||||
<nav class="navbar-default">
|
||||
<!-- clas="navbar"-->
|
||||
<div class="container">
|
||||
<div class="logo-brand">
|
||||
<img src="https://blog.talentstube.com/wp-content/uploads/2021/02/TalentsTube-logo-blanc.svg"
|
||||
data-at2x="https://blog.talentstube.com/wp-content/uploads/2021/02/TalentsTube-logo-blanc.svg"
|
||||
alt="Talents Tube, plateforme de recrutement en vidéo" class="logo-head">
|
||||
</div>
|
||||
<!--<div class="navbar-header">
|
||||
<button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#bs-navbar-collapse-1">
|
||||
<span class="sr-only">Toggle navigation</span>
|
||||
<span class="icon-bar"></span>
|
||||
<span class="icon-bar"></span>
|
||||
<span class="icon-bar"></span>
|
||||
</button>
|
||||
</div>-->
|
||||
<div class="collapse navbar-collapse" id="bs-navbar-collapse-1">
|
||||
<div class="row">
|
||||
<div class="logo-header" style="display:inline-block;">
|
||||
<img src="https://blog.talentstube.com/wp-content/uploads/2021/02/talents-tube-logo-color.svg'"
|
||||
data-at2x="https://blog.talentstube.com/wp-content/uploads/2021/02/talents-tube-logo-color.svg"
|
||||
alt="Talents Tube" class="logo-nav">
|
||||
</div>
|
||||
<ul class="nav navbar-nav navbar-right">
|
||||
<li>
|
||||
<div class="mj-w-button mj-w-btn bttn" data-toggle="modal" data-target="#exampleModal">Demander un
|
||||
rendez-vous</div>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</nav>
|
||||
<!--nav end-->
|
||||
|
||||
<div class="container">
|
||||
<div class="row">
|
||||
<div class="col-md-12">
|
||||
<!--welcome-message-->
|
||||
<div class="welcome-message">
|
||||
<h1>Créez des vidéos d’offres d’emploi avec votre smartphone</h1>
|
||||
<p>Vous voulez recruter rapidement, efficacement, vous démarquer de la concurrence tout en restant
|
||||
vous-même ? Votre recrutement, c’est dans la poche avec Talents Tube !</p>
|
||||
</div>
|
||||
<!--welcome-message end-->
|
||||
<div class="action-btn video-header">
|
||||
<button class="bttn" data-toggle="modal" data-target="#exampleModal">Demander un rendez-vous</button>
|
||||
<button class="bttn" data-toggle="modal" data-target=".bd-example-modal-lg">Voir la démo</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</header>
|
||||
<!--Header end-->
|
||||
<!--about 1-->
|
||||
<section class="about section-spacing-little" style="margin-top:20px">
|
||||
<div class="container">
|
||||
<div class="row">
|
||||
<div class="col-md-5 bloc-gauche-1"> <img src="/landing/img/realiser-offre-emploi-originale.jpg"
|
||||
alt="Réaliser une offre d'emploi originale avec un smartphone" data-no-retina> </div>
|
||||
<div class="col-md-7 bloc-droit-1" style="padding: 2em 4em;">
|
||||
<h2>Votre offre d’emploi originale en vidéo</h2>
|
||||
<p>Parce que <span class="texte-gras">votre recrutement mérite mieux que du texte</span>, lancez-vous dans
|
||||
<span class="texte-gras">la vidéo de recrutement !</span></p>
|
||||
<p>Vous êtes en quête de rapidité et d’efficacité dans votre processus de recrutement? Vous ne voulez pas
|
||||
ressembler à vos concurrents?</p>
|
||||
<p>Démarquez-vous avec des <span class="texte-gras">annonces de recrutement originales et
|
||||
attractives.</span>En filmant vos collaborateurs, vos gestes métiers, vous offrez une <span
|
||||
class="texte-gras">meilleure expérience candidat</span>, vous engagez et valorisez vos collaborateurs et
|
||||
vous <span class="texte-gras">recrutez plus efficacement.</span></p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
<!--about end-->
|
||||
|
||||
<!--about 2-->
|
||||
<section class="about section-spacing-little">
|
||||
<div class="container">
|
||||
<div class="row">
|
||||
<div class="col-md-7 bloc-droit-2" style="padding: 2em 4em;">
|
||||
<h2>Votre vidéo de recrutement originale avec un smartphone</h2>
|
||||
<p>Vous vous dites que c’est une super idée mais <span class="texte-gras">faire une vidéo c’est trop
|
||||
compliqué, trop cher et pas pour vous !</span></p>
|
||||
<p>Sachez qu’aujourd’hui, vous pouvez <span class="texte-gras">créer des vidéos facilement !</span></p>
|
||||
<p>Vous possédez <span class="texte-gras">un smartphone avec une caméra</span> ultra performante qui vous
|
||||
permet de créer du contenu vidéo tout le temps et partout, avec une qualité pro. Et tout ceci ne nécessite
|
||||
aucun investissement supplémentaire.</p>
|
||||
<p><span class="texte-gras">Le recrutement vidéo</span> est dans votre poche !</p>
|
||||
</div>
|
||||
<div class="col-md-5 bloc-gauche-2"> <img src="/landing/img/recruter-rapidement-offre-emploi-originale.jpg"
|
||||
alt="Recruter rapidement avec une offre d'emploi vidéo originale" data-no-retina> </div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
<!--about end-->
|
||||
|
||||
<!--about 3-->
|
||||
<section class="about section-spacing-little">
|
||||
<div class="container">
|
||||
<div class="row">
|
||||
<div class="col-md-5 bloc-gauche-1"> <img src="/landing/img/etape-realisation-offre-emploi-originale.jpg"
|
||||
alt="3 étapes pour réaliser une offre d'emploi originale" data-no-retina> </div>
|
||||
<div class="col-md-7 bloc-droit-1" style="padding: 2em 4em;">
|
||||
<h2>Un recrutement vidéo rapide en quelques étapes</h2>
|
||||
<p>Avec Talents Tube, vous allez recruter de nouveaux profils en seulement 3 étapes :</p>
|
||||
<ul class="list-puces">
|
||||
<li>Rédigez votre scénario pour préparer le tournage de votre vidéo</li>
|
||||
<li>Réalisez votre offre d’emploi vidéo avec un smartphone</li>
|
||||
<li>Envoyez-nous vos séquences vidéo</li>
|
||||
<li>Pour vous, nous réalisons le montage de votre vidéo</li>
|
||||
<li>Et nous vous accompagnons dans votre recherche du candidat idéal</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
<!--about end-->
|
||||
|
||||
<!--sponsor-->
|
||||
<section class="sponsor section-spacing text-center">
|
||||
<div class="container">
|
||||
<header>
|
||||
<h2>Ils ont recruté en vidéo</h2>
|
||||
<h3>Ces entreprises ont choisi Talents Tube pour recruter avec des offres d'emploi originales !</h3>
|
||||
</header>
|
||||
<div class="row">
|
||||
<div class="col-md-12">
|
||||
<figure><img
|
||||
src="https://recruteur.talentstube.com/media/cache/profile_thumb/uploads/img/94c787c21c93a6b905eca6b739eedbf2.png"
|
||||
data-at2x="https://recruteur.talentstube.com/media/cache/profile_thumb/uploads/img/94c787c21c93a6b905eca6b739eedbf2.png"
|
||||
alt="actual-offre-emploi-orignale"></figure>
|
||||
<figure><img
|
||||
src="https://recruteur.talentstube.com/media/cache/profile_thumb/uploads/img/4f3dba583fea12c01a9c708772b1e0ac.jpeg"
|
||||
data-at2x="https://recruteur.talentstube.com/media/cache/profile_thumb/uploads/img/4f3dba583fea12c01a9c708772b1e0ac.jpeg"
|
||||
alt="aer-recyclage-offre-emploi-orignale"></figure>
|
||||
<figure><img
|
||||
src="https://recruteur.talentstube.com/media/cache/profile_thumb/uploads/img/154d998227e24b1e44e6e520ab2e09a2.png"
|
||||
data-at2x="https://recruteur.talentstube.com/media/cache/profile_thumb/uploads/img/154d998227e24b1e44e6e520ab2e09a2.png"
|
||||
alt="cdg-offre-emploi-orignale"></figure>
|
||||
<figure><img
|
||||
src="https://recruteur.talentstube.com/media/cache/profile_thumb/uploads/img/c076323088783c6aa0093563dcdd1f16.jpeg"
|
||||
data-at2x="https://recruteur.talentstube.com/media/cache/profile_thumb/uploads/img/c076323088783c6aa0093563dcdd1f16.jpeg"
|
||||
alt="temporis-offre-emploi-orignale"></figure>
|
||||
</div>
|
||||
</div>
|
||||
<!--<div class="row">
|
||||
<div class="col-md-12">
|
||||
<figure><img src="https://recruteur.talentstube.com//media/cache/profile_thumb/uploads/img/c99c8a1e7cd4b9bf249053774d72e0c9.jpeg" data-at2x="https://recruteur.talentstube.com//media/cache/profile_thumb/uploads/img/c99c8a1e7cd4b9bf249053774d72e0c9.jpeg" alt="sponsor"></figure>
|
||||
<figure><img src="https://recruteur.talentstube.com//media/cache/profile_thumb/uploads/img/0dc350ae6a639b3671b7a262e51ad581.jpeg" data-at2x="https://recruteur.talentstube.com//media/cache/profile_thumb/uploads/img/0dc350ae6a639b3671b7a262e51ad581.jpeg" alt="sponsor"></figure>
|
||||
<figure><img src="https://recruteur.talentstube.com//media/cache/profile_thumb/uploads/img/0a4c111bc35a4b2ab654ab8fce9f1d53.png" data-at2x="https://recruteur.talentstube.com//media/cache/profile_thumb/uploads/img/0a4c111bc35a4b2ab654ab8fce9f1d53.png" alt="sponsor"></figure>
|
||||
<figure><img src="https://recruteur.talentstube.com//media/cache/profile_thumb/uploads/img/4f3dba583fea12c01a9c708772b1e0ac.jpeg" data-at2x="https://recruteur.talentstube.com//media/cache/profile_thumb/uploads/img/4f3dba583fea12c01a9c708772b1e0ac.jpeg" alt="sponsor"></figure>
|
||||
</div>
|
||||
</div>-->
|
||||
</div>
|
||||
</section>
|
||||
<!--sponsor end-->
|
||||
<!--venue-->
|
||||
<section class="venue section-spacing" id="venue">
|
||||
<div class="container">
|
||||
<div class="row">
|
||||
<div class="container text-center">
|
||||
<div class="row">
|
||||
<div class="col-md-12">
|
||||
<!--goodbye-message-->
|
||||
<div class="appel-action">
|
||||
<h2>Créez votre première offre d’emploi originale avec un smartphone</h2>
|
||||
<p>Il ne vous reste plus qu'un clic pour recruter rapidement, efficacement et vous démarquer de la
|
||||
concurrence...</p>
|
||||
<p>Lancez-vous et demandez un rendez-vous dès maintenant !</p>
|
||||
<button class="bttn" data-toggle="modal" data-target="#exampleModal" style="margin-top:30px;">Demander
|
||||
un rendez-vous</button>
|
||||
</div>
|
||||
<!--goodbye-message end-->
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
</main>
|
||||
<script type="text/javascript" src="https://app.mailjet.com/statics/js/widget.modal.js"></script>
|
||||
<script src="/landing/js/jquery-2.1.3.min.js"></script>
|
||||
<script src="/landing/js/bootstrap.min.js"></script>
|
||||
<script src="/landing/js/waypoints.min.js"></script>
|
||||
<!--Ordre important-->
|
||||
<script src="/landing/js/waypoints-sticky.min.js"></script> <!-- Nécessaire header sticky -->
|
||||
<script src="/landing/js/retina.min.js"></script> <!-- Nécessaire logo header (à voir pour l'enlever) -->
|
||||
<script src="/landing/js/owl.carousel.min.js"></script> <!-- Nécessaire avec les avantages (+de 3 avantages) -->
|
||||
<script src="/landing/js/jquery.ajaxchimp.min.js"></script> <!-- Nécessaire FAQ-->
|
||||
<script src="/landing/js/jquery.validate.min.js"></script>
|
||||
<script src="/landing/js/main.js"></script>
|
||||
<!--<script src="js/jquery.animateNumber.min.js"></script>-->
|
||||
<!--<script src="js/jquery.form.min.js"></script>-->
|
||||
<script>
|
||||
$("#erreur").hide();
|
||||
$("#felicitationRdvContainer").hide();
|
||||
|
||||
|
||||
function demanderRdv() {
|
||||
if ($("#nom").val() == "" || $("#prenom").val() == "" || $("#email").val() == "" || $("#telephone").val() == "") {
|
||||
$("#erreur").show();
|
||||
} else {
|
||||
$("#erreur").hide();
|
||||
$("#boutonDemandeRdv").hide();
|
||||
$("#felicitationRdvContainer").show();
|
||||
$("#demandeRdvContainer").hide();
|
||||
|
||||
$.ajax({
|
||||
//L'URL de la requête
|
||||
|
||||
url: "/app_dev.php/api/demanderRdv?nom=" + $("#nom").val() + "&prenom=" + $("#prenom").val() + "&email=" +
|
||||
$("#email").val() + "&telephone=" + $("#telephone").val() + "&page=Demande rdv module vidéo",
|
||||
method: "GET",
|
||||
//La méthode d'envoi (type de requête)
|
||||
|
||||
|
||||
//Le format de réponse attendu
|
||||
dataType: "json",
|
||||
})
|
||||
//Ce code sera exécuté en cas de succès - La réponse du serveur est passée à done()
|
||||
/*On peut par exemple convertir cette réponse en chaine JSON et insérer
|
||||
* cette chaine dans un div id="res"*/
|
||||
.done(function (response) {
|
||||
console.log("Requête demande rdv done");
|
||||
setTimeout(function () {
|
||||
document.location.href = "https://blog.talentstube.com/articles-entreprise/";
|
||||
}, 8000);
|
||||
|
||||
})
|
||||
|
||||
//Ce code sera exécuté en cas d'échec - L'erreur est passée à fail()
|
||||
//On peut afficher les informations relatives à la requête et à l'erreur
|
||||
.fail(function (error) {
|
||||
aconsole.log("Requête demande rdvfail");
|
||||
console.log(error);
|
||||
})
|
||||
|
||||
//Ce code sera exécuté que la requête soit un succès ou un échec
|
||||
.always(function () {
|
||||
console.log("Requête demande rdv effectuée");
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
function fermerVideo() {
|
||||
var videoURL = $('#player').prop('src');
|
||||
videoURL = videoURL.replace("&autoplay=1", "");
|
||||
$('#player').prop('src', '');
|
||||
$('#player').prop('src', videoURL);
|
||||
|
||||
}
|
||||
$('#exampleModalCenter').on('hidden.bs.modal', function (e) {
|
||||
console.log("exampleModalCenter11");
|
||||
fermerVideo();
|
||||
})
|
||||
</script>
|
||||
</body>
|
||||
|
||||
</html>
|
||||
@@ -1,7 +1,7 @@
|
||||
{% block dropzone %}
|
||||
<div id="dropzone-row" class="row">
|
||||
<div class="col s12">
|
||||
<div class="dropzone dz-clickable" id="my-awesome-dropzone">
|
||||
<div class="dropzone dz-clickable text-center" id="my-awesome-dropzone">
|
||||
<div id="template-container-dz">
|
||||
<div id="template" class="file-row">
|
||||
<div class="dz-preview">
|
||||
|
||||
@@ -1,220 +1,236 @@
|
||||
{% if is_granted('ROLE_COMPANY') %}
|
||||
{% set extendTemplate='company/base_dashboard_company_V2.html.twig' %}
|
||||
{% set extendTemplate='company/base_dashboard_company_V2.html.twig' %}
|
||||
{% elseif is_granted('ROLE_TERRITORY') %}
|
||||
{% set extendTemplate='territory/base_dashboard_territory.html.twig' %}
|
||||
{% set extendTemplate='territory/base_dashboard_territory.html.twig' %}
|
||||
{% else %}
|
||||
{% set extendTemplate='talent/base_dashboard_talent.html.twig' %}
|
||||
{% set extendTemplate='talent/base_dashboard_talent.html.twig' %}
|
||||
{% endif %}
|
||||
|
||||
{% extends extendTemplate %}
|
||||
|
||||
{% block dashContent %}
|
||||
<div class="row">
|
||||
<div class="col s12">
|
||||
|
||||
{% if medias|length == 0 and is_granted('ROLE_TALENT') %}
|
||||
<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="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="video_premier card z-depth-3">
|
||||
<div class="card-content">
|
||||
<h4> Vous souhaitez booster vos recrutements ?</h4>
|
||||
<p>Ajoutez une vidéo marque employeur pour présenter
|
||||
votre entreprise et attirer de nouveaux talents.</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="video_premier card z-depth-3">
|
||||
<div class="card-image">
|
||||
{% if app.user.company.presentationVideo %}
|
||||
<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>
|
||||
{% else %}
|
||||
<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>
|
||||
{% endif %}
|
||||
</div>
|
||||
|
||||
<div class="card-content">
|
||||
<p>
|
||||
{# {% if app.user.getCompany().hasCompanyVideo() != true and is_granted('ROLE_COMPANY') %}
|
||||
{% set storePath = path('company_process_cart_video_corporate') %}
|
||||
{% set message = "Vous ne disposez pas de l'option présentation vidéo pour votre entreprise, il est nécessaire de vous procurer
|
||||
l'option sur la boutique talents tube.<br /><br /><a class='btn btn-default' href='"~storePath~"'>boutique Talents Tube</a>" %}
|
||||
{{ message|raw }}
|
||||
{% else %} #}
|
||||
{% if app.user.company.presentationVideo %}
|
||||
<div><strong><span data-id="{{ media.id }}"
|
||||
class="titleVideo">{{ media.title }}</span></strong></div>
|
||||
{% else %}
|
||||
{% set label_title_video = "" %}
|
||||
{% if is_granted('ROLE_COMPANY') %}
|
||||
{% set label_title_video = "Mon entreprise en vidéo" %}
|
||||
{% elseif is_granted('ROLE_TALENT') %}
|
||||
{% set label_title_video = "Mon CV Générique" %}
|
||||
{% endif %}
|
||||
<strong>{{ label_title_video }}</strong>
|
||||
{% endif %}
|
||||
<a class="btn btn-cancel-premier red tooltipped btn-round right" href="#!"
|
||||
data-position="top" data-tooltip="Annuler">Annuler</a>
|
||||
<a class="btn btn-default btn-video-premier right btn-orange">
|
||||
{% if app.user.company.presentationVideo %}
|
||||
Remplacer ma vidéo marque employeur
|
||||
{% else %}
|
||||
Ajouter une vidéo marque employeur
|
||||
{% endif %}
|
||||
</a>
|
||||
<div class="jumbotron" data-pages="parallax">
|
||||
<div class=" container-fluid container-fixed-lg sm-p-l-0 sm-p-r-0">
|
||||
<div class="inner">
|
||||
<!-- START BREADCRUMB -->
|
||||
<ol class="breadcrumb">
|
||||
<li class="breadcrumb-item"><a href="/entreprise/me/">Accueil</a></li>
|
||||
<li class="breadcrumb-item"><a href="#">Marque Employeur</a></li>
|
||||
|
||||
|
||||
</ol>
|
||||
<!-- END BREADCRUMB -->
|
||||
|
||||
<div class="clearfix"></div>
|
||||
<div class="">
|
||||
<strong>
|
||||
Guide
|
||||
</strong><br/>
|
||||
Pour remplacer votre vidéo marque employeur, cliquer sur le bouton remplacer et choisissez une vidéo dans la liste ci dessous </div>
|
||||
{# {% endif %} #}
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
{% endif %}
|
||||
</div>
|
||||
</div>
|
||||
<div class="divider"></div>
|
||||
<br />
|
||||
<div class="row">
|
||||
<div class="col s12 center-align"><h4>Gestion de mes vidéos</h4>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col s12">
|
||||
{% if medias|length > 0 or is_granted('ROLE_COMPANY') or is_granted('ROLE_TERRITORY')%}
|
||||
<div class="col s12 col-actions">
|
||||
<a class="waves-effect waves-light btn btn-default modal-trigger" 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>
|
||||
</div>
|
||||
{% endif %}
|
||||
{% 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="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 %}
|
||||
</div>
|
||||
|
||||
{% 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>
|
||||
</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>
|
||||
{% set video = null %}
|
||||
|
||||
<div class=" container-fluid container-fixed-lg">
|
||||
<div class="col-lg-8 bloc-header">
|
||||
<div class="card card-default container">
|
||||
<div class="card-body">
|
||||
<div class="row" style="min-height:10rem;">
|
||||
<div class="col-8">
|
||||
<h4 class="header-title" style="font-size:2em;line-height:1.5em;">Vous souhaitez booster vos
|
||||
recrutements ?</h4>
|
||||
<p>Ajoutez une vidéo marque employeur pour présenter votre entreprise et attirer de nouveaux
|
||||
talents.</p>
|
||||
</div>
|
||||
<div class="col-4"
|
||||
style="background-repeat: no-repeat; background-image: url('https://blog.talentstube.com/wp-content/uploads/2021/02/marque-employeur-entreprise.svg');background-size: contain;background-position: center;">
|
||||
</div>
|
||||
</div>
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
</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 class="col-lg-8">
|
||||
<div id="addVideo">
|
||||
<div class="card col p-t-20 p-b-15">
|
||||
<div class="row m-b-20">
|
||||
<div class="col">
|
||||
<div class="col">
|
||||
<h4>Importer une vidéo Marque Employeur</h4>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row ">
|
||||
<div class="col ">
|
||||
{% include 'media/dropzone.html.twig' with {'deleting': 'false'} %}
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col m-t-20">
|
||||
{{ form_start(form, {'attr': { 'id': 'form_media' } }) }}
|
||||
<div class="input-field col">
|
||||
<div>
|
||||
{{ form_rest(form) }}
|
||||
</div>
|
||||
</div>
|
||||
<div class="col m-t-20">
|
||||
<button id="submit" class="btn btn-lg btn-primary disabled"
|
||||
type="submit">Définir comme vidéo marque employeur</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>
|
||||
</div>
|
||||
{% if app.user.company.presentationVideo %}
|
||||
{% set media = app.user.company.presentationVideo %}
|
||||
<div class="col video_premier z-depth-3 m-t-30 m-b-30">
|
||||
<div class="card-image">
|
||||
<div class="embed-responsive embed-responsive-16by9">
|
||||
{% if app.user.company.presentationVideo %}
|
||||
<div><strong><span data-id="{{ media.id }}" class="titleVideo">{{ media.title }}</span></strong>
|
||||
</div>
|
||||
{% else %}
|
||||
{% set label_title_video = "" %}
|
||||
{% if is_granted('ROLE_COMPANY') %}
|
||||
{% set label_title_video = "Mon entreprise en vidéo" %}
|
||||
{% elseif is_granted('ROLE_TALENT') %}
|
||||
{% set label_title_video = "Mon CV Générique" %}
|
||||
{% endif %}
|
||||
<strong>{{ label_title_video }}</strong>
|
||||
{% endif %}
|
||||
|
||||
{% set media = app.user.company.presentationVideo %}
|
||||
<iframe src="https://player.vimeo.com{{ media.getCdnUrl()|replace({ "videos": "video"}) }}"
|
||||
width="100%" height="550" frameborder="0" webkitallowfullscreen mozallowfullscreen
|
||||
allowfullscreen></iframe>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{% endif %}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<div class="col-lg-8">
|
||||
<div class="card card-default card-body">
|
||||
<div class="card-body">
|
||||
<h4>Gestion de mes vidéos</h4>
|
||||
{% set iteration = 0 %}
|
||||
{% 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 %}
|
||||
{% if iteration is divisible by(2) or iteration==0%}
|
||||
<div class="row p-t-10 p-b-10">
|
||||
{% endif %}
|
||||
{% set iteration = iteration+1 %}
|
||||
<div class="col">
|
||||
<div class="card-image">
|
||||
<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="row m-t-10 m-b-10">
|
||||
<div class="col 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()}) }}"
|
||||
target="_blank">Supprimer</a>
|
||||
{% endif %}
|
||||
|
||||
</div>
|
||||
</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>
|
||||
</div>
|
||||
|
||||
|
||||
{# cas d'un nombre impair de video #}
|
||||
{% if medias|length == iteration+1%}
|
||||
<div class="col">
|
||||
<div class="card-image">
|
||||
<div class="embed-responsive embed-responsive-16by9">
|
||||
|
||||
</div>
|
||||
<div class="row m-t-10 m-b-10">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{% endif %}
|
||||
{# fermeture de div pour aller à la ligne quand le nombre de video est un multiple de deux et par défaut au début iteration==0 #}
|
||||
{% if iteration is divisible by(2) or iteration==0 or medias|length == iteration+1%}
|
||||
</div>
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
|
||||
</div>
|
||||
</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') }}";
|
||||
</script>
|
||||
<script src="{{ asset('/js/mediaListing.js') }}"></script>
|
||||
<script src="{{ asset('/js/dropzone.js') }}"></script>
|
||||
{{ 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') }}";
|
||||
</script>
|
||||
<script src="{{ asset('/js/mediaListing.js') }}"></script>
|
||||
<script src="{{ asset('/js/dropzone.js') }}"></script>
|
||||
{% endblock %}
|
||||
@@ -239,7 +239,7 @@
|
||||
<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 }) }}">
|
||||
<input id="linkToCopy" type="text" value="https://recruteur.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>
|
||||
|
||||
@@ -3,22 +3,18 @@
|
||||
<div class="errors"></div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="profile_picture_upload">
|
||||
{{ form_start(form, { 'action': path('profile_logo'), 'attr': { 'class': 'fos_user_profile_edit' } }) }}
|
||||
<div class="col s6">
|
||||
<label for="profile_logo_file" class="btn btn-default custom-file-upload">
|
||||
<i class="fa fa-cloud-upload"></i> Importer une photo
|
||||
</label>
|
||||
{{ form_widget(form.file) }}
|
||||
{{ form_rest(form) }}
|
||||
</div>
|
||||
<div class="col s6" style="text-align: center;">
|
||||
<div id="preview_profile_picture">
|
||||
<img src="" class="resize-image responsive-img">
|
||||
</div>
|
||||
<button class="hide btn btn-default btn-save-profile-picture" type="submit">
|
||||
<i class="fa fa-floppy-o" aria-hidden="true"></i> Sauvegarder
|
||||
</button>
|
||||
</div>
|
||||
{{ form_end(form) }}
|
||||
{{ form_start(formLogo, { 'action': path('profile_logo'), 'attr': { 'class': 'fos_user_profile_edit' } }) }}
|
||||
|
||||
|
||||
|
||||
<div class="input-group">
|
||||
{# {{ form_widget(formLogo.file) }} #}
|
||||
{# {{ form_rest(formLogo) }} #}
|
||||
<button aria-label="" type="button" class="btn btn-outline-primary btn-lg m-r-10" onclick="profile_logo_file.click()">Choisir votre logo</button>
|
||||
<button class="btn btn-primary btn-lg" type="submit" id="inputGroupFileAddon04">Valider le logo</button>
|
||||
</div>
|
||||
|
||||
{{ form_end(formLogo) }}
|
||||
</div>
|
||||
@@ -247,9 +247,9 @@
|
||||
<div class="col s6">
|
||||
{{ form_row(formProfile.birthday) }}
|
||||
</div>
|
||||
<div class="col s6">
|
||||
{# <div class="col s6">
|
||||
{{ form_row(formProfile.gender) }}
|
||||
</div>
|
||||
</div> #}
|
||||
<div class="col s12">
|
||||
{{ form_row(formProfile.company.address) }}
|
||||
{{ form_row(formProfile.company.addressComp) }}
|
||||
|
||||
@@ -80,6 +80,8 @@ twig:
|
||||
globals:
|
||||
push_public_key: "%push_params.public_key%"
|
||||
fairlane_cookie_consent: '@fairlane_cookie_consent.twig'
|
||||
version: '2.7.2'
|
||||
|
||||
|
||||
|
||||
# Swiftmailer Configuration
|
||||
@@ -158,7 +160,9 @@ doctrine_mongodb:
|
||||
liip_imagine :
|
||||
resolvers :
|
||||
default :
|
||||
web_path : ~
|
||||
web_path:
|
||||
web_root: %kernel.root_dir%/..'
|
||||
cache_prefix: media/cache
|
||||
filter_sets :
|
||||
cache : ~
|
||||
profile_thumb :
|
||||
|
||||
@@ -35,8 +35,8 @@ monolog:
|
||||
# type: chromephp
|
||||
# level: info
|
||||
|
||||
swiftmailer:
|
||||
delivery_addresses: ['%delivery_addresses%']
|
||||
# swiftmailer:
|
||||
# delivery_addresses: ['%delivery_addresses%']
|
||||
|
||||
# Twig Configuration
|
||||
twig:
|
||||
|
||||
Regular → Executable
@@ -1,10 +1,12 @@
|
||||
# This file is auto-generated during the composer install
|
||||
parameters:
|
||||
onurb_yuml.extension: jpg
|
||||
mailjet_public: 355697fac93fca865660734b4fdffaeb
|
||||
mailjet_private : ddecf75321ca89c09e561857b13534c8
|
||||
mailer_transport: smtp
|
||||
mailer_host: mail.gandi.net
|
||||
mailer_user: noreply@talentstube.io
|
||||
mailer_password: zfYwOGBHweCQ8OI9ghF6lUyo
|
||||
mailer_password: eaV76D3AEhRbLxNVwfuz9
|
||||
secret: 416157a2389cec970df2a46fa8ffd361b76516d1
|
||||
database_host: tt-website.postgres.dev
|
||||
database_port: '5432'
|
||||
@@ -25,7 +27,8 @@ parameters:
|
||||
media_photo_dir: '%kernel.root_dir%/../web/uploads/photos/'
|
||||
elastic_host: tt-website.elasticsearch.dev
|
||||
elastic_port: 9200
|
||||
delivery_addresses: l.laniau@talentstube.com
|
||||
delivery_addresses: dev@talentstube.com
|
||||
app.version: 2.5.1
|
||||
push_params:
|
||||
push_notification_file_path: '%kernel.root_dir%/../web/push/'
|
||||
push_network_config:
|
||||
@@ -35,4 +38,4 @@ parameters:
|
||||
ttl: 300
|
||||
urgency: high
|
||||
topic: Emploi
|
||||
push_params.public_key: BNFyiyPiLH97Dgc0m1vXluUNaCN6y3Hkgd4YcqS2lVkP8my3tq2D5gM5g7cY6R4VxC7GljSzkLRu+k+oO+2TtjU=
|
||||
push_params.public_key: BNFyiyPiLH97Dgc0m1vXluUNaCN6y3Hkgd4YcqS2lVkP8my3tq2D5gM5g7cY6R4VxC7GljSzkLRu+k+oO+2TtjU=
|
||||
@@ -1,15 +1,19 @@
|
||||
parameters:
|
||||
mailjet_public: 355697fac93fca865660734b4fdffaeb
|
||||
mailjet_private : ddecf75321ca89c09e561857b13534c8
|
||||
mailer_transport: smtp
|
||||
mailer_host: mail.gandi.net
|
||||
# mailer_user: noreply@talentstube.io
|
||||
# mailer_password: zfYwOGBHweCQ8OI9ghF6lUyo
|
||||
mailer_user: noreply@talentstube.io
|
||||
mailer_password: zfYwOGBHweCQ8OI9ghF6lUyo
|
||||
mailer_password: eaV76D3AEhRbLxNVwfuz9
|
||||
secret: 416157a2389cec970df2a46fa8ffd361b76516d1
|
||||
database_host: 'tt-website.postgres.preprod'
|
||||
database_port: '5432'
|
||||
database_name: database
|
||||
database_user: user
|
||||
database_password: 7C|Uk2B[.>"6{QO{
|
||||
#database_password: b|RN:iR<g,TNMqM6
|
||||
#database_password: 7C|Uk2B[.>"6{QO{
|
||||
database_password: b|RN:iR<g,TNMqM6
|
||||
#Mongo
|
||||
mongodb_server: "mongodb://tt-website.mongo.preprod:27017"
|
||||
#Prestashop
|
||||
@@ -28,7 +32,8 @@ parameters:
|
||||
|
||||
elastic_host: tt-website.elasticsearch.preprod
|
||||
elastic_port: 9200
|
||||
delivery_addresses: l.laniau@talentstube.com
|
||||
delivery_addresses: dev@talentstube.com
|
||||
app.version: 2.5.1
|
||||
push_params:
|
||||
push_notification_file_path: '%kernel.root_dir%/../web/push/'
|
||||
push_network_config:
|
||||
|
||||
@@ -1,8 +1,12 @@
|
||||
parameters:
|
||||
mailjet_public: 355697fac93fca865660734b4fdffaeb
|
||||
mailjet_private : ddecf75321ca89c09e561857b13534c8
|
||||
mailer_transport: smtp
|
||||
mailer_host: mail.gandi.net
|
||||
#mailer_user: noreply@talentstube.com
|
||||
#mailer_password: zfYwOGBHweCQ8OI9ghF6lUyo
|
||||
mailer_user: noreply@talentstube.io
|
||||
mailer_password: zfYwOGBHweCQ8OI9ghF6lUyo
|
||||
mailer_password: eaV76D3AEhRbLxNVwfuz9
|
||||
secret: 416157a2389cec970df2a46fa8ffd361b76516d1
|
||||
database_host: 'tt-website.postgres.prod'
|
||||
database_port: '5432'
|
||||
@@ -20,22 +24,23 @@ parameters:
|
||||
prestashop_ad_id: 10
|
||||
prestashop_video_corporate_id: 19
|
||||
prestashop_url: https://www.talentstube.com/store/
|
||||
#Media
|
||||
#Media
|
||||
media_video_dir: '%kernel.root_dir%/../web/uploads/videos/'
|
||||
media_video_url: 'http://static.talentstube.com/videos/'
|
||||
media_photo_dir: '%kernel.root_dir%/../web/uploads/photos/'
|
||||
|
||||
elastic_host: tt-website.elasticsearch.prod
|
||||
elastic_port: 9200
|
||||
delivery_addresses: l.laniau@talentstube.com
|
||||
delivery_addresses: dev@talentstube.com
|
||||
app.version: 2.5.1
|
||||
push_params:
|
||||
push_notification_file_path: '%kernel.root_dir%/../web/push/'
|
||||
push_network_config:
|
||||
public_key: '%push_params.public_key%'
|
||||
private_key: g2Yimi3AK1ppvRqwikPyTTWcEEsTdRPxoBJ2Vi9bOWw
|
||||
service_mail_subject: 'mailto:looping@talentstube.com'
|
||||
ttl: 300
|
||||
urgency: high
|
||||
topic: Emploi
|
||||
push_notification_file_path: '%kernel.root_dir%/../web/push/'
|
||||
push_network_config:
|
||||
public_key: '%push_params.public_key%'
|
||||
private_key: g2Yimi3AK1ppvRqwikPyTTWcEEsTdRPxoBJ2Vi9bOWw
|
||||
service_mail_subject: 'mailto:looping@talentstube.com'
|
||||
ttl: 300
|
||||
urgency: high
|
||||
topic: Emploi
|
||||
push_params.public_key: BG2lV673DvB67dzEwX9GKfds3sXaEdtZo2oWO1cO2xUdTJAFZ_rV_UrP1nHQz-F8LJNO9HxG0kmQRIb54JL1ZCA
|
||||
|
||||
|
||||
@@ -1,4 +1,6 @@
|
||||
parameters:
|
||||
cheminVideo : '%kernel.project_dir%/web/uploads/videos/montage'
|
||||
|
||||
services:
|
||||
|
||||
#Tools (independent)
|
||||
|
||||
@@ -60,7 +60,8 @@
|
||||
"willdurand/hateoas-bundle": "^1.4",
|
||||
"lexik/jwt-authentication-bundle": "^2.5",
|
||||
"nelmio/cors-bundle": "^1.5",
|
||||
"onurb/doctrine-yuml-bundle": "^1.1"
|
||||
"onurb/doctrine-yuml-bundle": "^1.1",
|
||||
"mailjet/mailjet-apiv3-php": "^1.5"
|
||||
},
|
||||
"require-dev": {
|
||||
"sensio/generator-bundle": "^3.0",
|
||||
|
||||
@@ -28,6 +28,65 @@ class AdController extends Controller
|
||||
/***********************
|
||||
* Ad - Company
|
||||
***********************/
|
||||
/**
|
||||
* @Route("/partage/show/{id}", name="anwser_share_show")
|
||||
*/
|
||||
public function answerShowAction(Request $request, Ad $ad)
|
||||
{
|
||||
$session = $request->getSession();
|
||||
$ad_authorisation = $session->get('ad_authorisation');
|
||||
if($ad_authorisation == $ad->getId()){
|
||||
$user = $this->getUser();
|
||||
$em = $this->getDoctrine()->getManager();
|
||||
$answers = $em->getRepository('AppBundle:Answer')->getAnswerByAdsShare( $ad->getId());
|
||||
return $this->render('company/ad_answers.html.twig', array(
|
||||
'answers' => $answers,
|
||||
'titreAnnonce' => $ad->getTitle(),
|
||||
));
|
||||
}else{
|
||||
return $this->redirectToRoute('anwser_share_show_connect', array(
|
||||
'id' => $ad->getId(),
|
||||
'error' => true
|
||||
));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @Route("/partage/{id}", name="anwser_share_show_connect")
|
||||
*/
|
||||
public function answersConnectShowAction(Request $request, Ad $ad)
|
||||
{
|
||||
$error= $request->query->get('error');
|
||||
return $this->render('company/ad_answers_connect.html.twig', array(
|
||||
'adId' => $ad->getId(),
|
||||
'error' => $error,
|
||||
));
|
||||
}
|
||||
|
||||
/**
|
||||
* @Route("/connectionpartage", name="connectionpartage")
|
||||
*/
|
||||
public function answersConnectAction(Request $request)
|
||||
{
|
||||
$adId= $request->query->get('adId');
|
||||
$mdp= $request->query->get('mdp');
|
||||
$session = $request->getSession();
|
||||
//verifier si le mot de passe est valide pour l'annonce
|
||||
$em = $this->getDoctrine()->getManager();
|
||||
$retour = $em->getRepository('AppBundle:Ad')->findBy(array('id' => $adId, 'code'=>$mdp));
|
||||
|
||||
|
||||
if(count($retour)>0){
|
||||
$session->set('ad_authorisation', $adId);
|
||||
return new JsonResponse(array('retour' => "true"));
|
||||
}else{
|
||||
$session->set('ad_authorisation', null);
|
||||
//TODO redirection vers page de connexion avec message d'erreur
|
||||
//return $this->redirectToRoute('anwser_share_show');
|
||||
return new JsonResponse(array('retour' => "false"));
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @Route("/entreprise/me/espace-oe/annonce", name="company_ad")
|
||||
@@ -55,10 +114,48 @@ class AdController extends Controller
|
||||
$form = $this->createForm(AdType::class, $ad);
|
||||
$form->handleRequest($request);
|
||||
if ($form->isSubmitted() && $form->isValid()) {
|
||||
$type_contract = $form['contract_type']->getData();
|
||||
$arrayExtra = $ad->getExtra();
|
||||
$type_contract = $form['contract_type']->getData();
|
||||
$arrayExtra['contract_type'] = $type_contract;
|
||||
//LLAN Ajout de la notion de temps partiel, plein temps (5 oct 2020)
|
||||
$temps_type = $form['temps_type']->getData();
|
||||
$arrayExtra['temps_type'] = $temps_type;
|
||||
//LLAN US 380 :mise en place du nb de mois de contrat (CDD)
|
||||
$duree_contrat = $form['duree_contrat']->getData();
|
||||
$arrayExtra['duree_contrat'] = $duree_contrat;
|
||||
//LLAN US 329 :mise en place du nb d'heure
|
||||
$nombre_heure = $form['nombre_heure']->getData();
|
||||
$arrayExtra['nombre_heure'] = $nombre_heure;
|
||||
//LLAN US 295 :mise en place du télétravail
|
||||
$teletravail = $form['teletravail']->getData();
|
||||
$arrayExtra['teletravail'] = $teletravail;
|
||||
$ad->setExtra($arrayExtra);
|
||||
//US 340
|
||||
$competences = $form['competences']->getData();
|
||||
$competencesList = explode(",", $competences);
|
||||
//dump($competencesList);
|
||||
//$competencesJson = "{";
|
||||
$array = Array ();
|
||||
for ($i = 0; $i < count($competencesList)-1; $i++) {
|
||||
//dump($i);
|
||||
//$competence = split("_", $competencesList);
|
||||
//dump($competencesList[$i]);
|
||||
list($competenceLibelle, $competenceId) =
|
||||
explode("_", $competencesList[$i]);
|
||||
if($competenceLibelle && $competenceId){
|
||||
$array[] = Array (
|
||||
intval($competenceId) => $competenceLibelle);
|
||||
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
$ad->setCompetences(
|
||||
|
||||
$array
|
||||
|
||||
);
|
||||
$adManager = $this->get('app.ad_manager');
|
||||
$adManager->updateAd($ad);
|
||||
return $this->redirectToRoute('create_media', array('id' => $ad->getId()));
|
||||
@@ -105,9 +202,45 @@ class AdController extends Controller
|
||||
$form->handleRequest($request);
|
||||
if ($form->isSubmitted() && $form->isValid()) {
|
||||
$type_contract = $form['contract_type']->getData();
|
||||
$temps_type = $form['temps_type']->getData();
|
||||
$teletravail = $form['teletravail']->getData();
|
||||
$arrayExtra = $ad->getExtra();
|
||||
$arrayExtra['contract_type'] = $type_contract;
|
||||
$arrayExtra['temps_type'] = $temps_type;
|
||||
$arrayExtra['teletravail'] = $teletravail;
|
||||
//LLAN US 380 :mise en place du nb de mois de contrat (CDD)
|
||||
$duree_contrat = $form['duree_contrat']->getData();
|
||||
$arrayExtra['duree_contrat'] = $duree_contrat;
|
||||
//LLAN US 329 :mise en place du nb d'heure
|
||||
$nombre_heure = $form['nombre_heure']->getData();
|
||||
$arrayExtra['nombre_heure'] = $nombre_heure;
|
||||
$ad->setExtra($arrayExtra);
|
||||
//US 340
|
||||
$competences = $form['competences']->getData();
|
||||
$competencesList = explode(",", $competences);
|
||||
//dump($competencesList);
|
||||
//$competencesJson = "{";
|
||||
$array = Array ();
|
||||
for ($i = 0; $i < count($competencesList)-1; $i++) {
|
||||
//dump($i);
|
||||
//$competence = split("_", $competencesList);
|
||||
//dump($competencesList[$i]);
|
||||
list($competenceLibelle, $competenceId) =
|
||||
explode("_", $competencesList[$i]);
|
||||
if($competenceLibelle && $competenceId){
|
||||
$array[] = Array (
|
||||
intval($competenceId) => $competenceLibelle);
|
||||
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
$ad->setCompetences(
|
||||
|
||||
$array
|
||||
|
||||
);
|
||||
$adManager = $this->get('app.ad_manager');
|
||||
$adManager->updateAd($ad);
|
||||
return $this->redirectToRoute('create_media', array('id' => $ad->getId()));
|
||||
@@ -128,8 +261,46 @@ class AdController extends Controller
|
||||
$form->handleRequest($request);
|
||||
if ($form->isSubmitted() && $form->isValid()) {
|
||||
$type_contract = $form['contract_type']->getData();
|
||||
$temps_type = $form['temps_type']->getData();
|
||||
$teletravail = $form['teletravail']->getData();
|
||||
//LLAN US 380 :mise en place du nb de mois de contrat (CDD)
|
||||
$duree_contrat = $form['duree_contrat']->getData();
|
||||
|
||||
//LLAN US 329 :mise en place du nb d'heure
|
||||
$nombre_heure = $form['nombre_heure']->getData();
|
||||
|
||||
//US 340
|
||||
$competences = $form['competences']->getData();
|
||||
$competencesList = explode(",", $competences);
|
||||
//dump($competencesList);
|
||||
//$competencesJson = "{";
|
||||
$array = Array ();
|
||||
for ($i = 0; $i < count($competencesList)-1; $i++) {
|
||||
//dump($i);
|
||||
//$competence = split("_", $competencesList);
|
||||
//dump($competencesList[$i]);
|
||||
list($competenceLibelle, $competenceId) =
|
||||
explode("_", $competencesList[$i]);
|
||||
if($competenceLibelle && $competenceId){
|
||||
$array[] = Array (
|
||||
intval($competenceId) => $competenceLibelle);
|
||||
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
$ad->setCompetences(
|
||||
|
||||
$array
|
||||
|
||||
);
|
||||
$arrayExtra = $ad->getExtra();
|
||||
$arrayExtra['contract_type'] = $type_contract;
|
||||
$arrayExtra['temps_type'] = $temps_type;
|
||||
$arrayExtra['teletravail'] = $teletravail;
|
||||
$arrayExtra['duree_contrat'] = $duree_contrat;
|
||||
$arrayExtra['nombre_heure'] = $nombre_heure;
|
||||
$ad->setExtra($arrayExtra);
|
||||
$adManager = $this->get('app.ad_manager');
|
||||
$adManager->updateAd($ad);
|
||||
@@ -209,7 +380,7 @@ class AdController extends Controller
|
||||
$em->flush();
|
||||
$em->clear();
|
||||
|
||||
return $this->redirectToRoute('company_ad_validation', array('id' => $ad->getId()));
|
||||
return $this->redirectToRoute('company_ad', array('id' => $ad->getId()));
|
||||
}
|
||||
|
||||
return $this->render('company/ad_edit_date.html.twig', [
|
||||
|
||||
@@ -9,10 +9,13 @@ 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\Bundle\FrameworkBundle\Controller\AbstractController;
|
||||
use Symfony\Component\HttpFoundation\Request;
|
||||
use Symfony\Component\HttpFoundation\JsonResponse;
|
||||
|
||||
class AnswerController extends Controller
|
||||
|
||||
|
||||
class AnswerController extends AbstractController
|
||||
{
|
||||
|
||||
/***********************
|
||||
@@ -24,14 +27,240 @@ class AnswerController extends Controller
|
||||
*/
|
||||
public function adminAnswerModerationListAction()
|
||||
{
|
||||
$em = $this->getDoctrine()->getManager();
|
||||
$answers = $em->getRepository('AppBundle:Answer')->findAll();
|
||||
// Passage en multipage ajax
|
||||
// $em = $this->getDoctrine()->getManager();
|
||||
// $answers = $em->getRepository('AppBundle:Answer')->findAll();
|
||||
|
||||
return $this->render('admin/answer_list_moderation.html.twig', array(
|
||||
'answers' => $answers,
|
||||
return $this->render('admin/answer_list_moderation_v2.html.twig', array(
|
||||
|
||||
));
|
||||
}
|
||||
|
||||
/**
|
||||
* @Route("/admin/moderation/anwser/list/test", name="admin_anwser_moderation_list_test")
|
||||
*/
|
||||
public function adminAnswerModerationListTestAction(Request $request)
|
||||
{
|
||||
// $em = $this->getDoctrine()->getManager();
|
||||
// $answers = $em->getRepository('AppBundle:Answer')->findAll();
|
||||
|
||||
return $this->render('admin/answer_list_moderation_v2.html.twig', array(
|
||||
// 'answers' => $answers,
|
||||
));
|
||||
|
||||
}
|
||||
//
|
||||
/**
|
||||
* @Route("/admin/alimenterCandidatures", name="alimenterCandidatures")
|
||||
*/
|
||||
public function listDatatablesAction(Request $request)
|
||||
{
|
||||
// Set up required variables
|
||||
$this->entityManager = $this->getDoctrine()->getManager();
|
||||
$this->repository = $this->entityManager->getRepository('AppBundle:Answer');
|
||||
//$this->translator = $this->get('translator');
|
||||
|
||||
// Get the parameters from DataTable Ajax Call
|
||||
if ($request->getMethod() == 'POST')
|
||||
{
|
||||
$draw = intval($request->request->get('draw'));
|
||||
$start = $request->request->get('start');
|
||||
$length = $request->request->get('length');
|
||||
$search = $request->request->get('search');
|
||||
$orders = $request->request->get('order');
|
||||
$columns = $request->request->get('columns');
|
||||
}
|
||||
else // If the request is not a POST one, die hard
|
||||
die;
|
||||
|
||||
// Process Parameters
|
||||
|
||||
// Orders
|
||||
foreach ($orders as $key => $order)
|
||||
{
|
||||
// Orders does not contain the name of the column, but its number,
|
||||
// so add the name so we can handle it just like the $columns array
|
||||
$orders[$key]['name'] = $columns[$order['column']]['name'];
|
||||
}
|
||||
|
||||
// Further filtering can be done in the Repository by passing necessary arguments
|
||||
$otherConditions = "array or whatever is needed";
|
||||
|
||||
// Get results from the Repository
|
||||
$results = $this->repository->getRequiredDTData($start, $length, $orders, $search, $columns, $otherConditions = null);
|
||||
|
||||
// Returned objects are of type Town
|
||||
$objects = $results["results"];
|
||||
// Get total number of objects
|
||||
$total_objects_count = $this->repository->comptage();
|
||||
// Get total number of results
|
||||
$selected_objects_count = count($objects);
|
||||
// Get total number of filtered data
|
||||
$filtered_objects_count = $results["countResult"];
|
||||
|
||||
// Construct response
|
||||
$response = '{
|
||||
"draw": '.$draw.',
|
||||
"recordsTotal": '.$total_objects_count.',
|
||||
"recordsFiltered": '.$filtered_objects_count.',
|
||||
"data": [';
|
||||
|
||||
$i = 0;
|
||||
|
||||
foreach ($objects as $key => $answer)
|
||||
{
|
||||
$response .= '["';
|
||||
|
||||
$j = 0;
|
||||
$nbColumn = count($columns);
|
||||
foreach ($columns as $key => $column)
|
||||
{
|
||||
// In all cases where something does not exist or went wrong, return -
|
||||
$responseTemp = "-";
|
||||
|
||||
switch($column['name'])
|
||||
{
|
||||
case 'ad_id':
|
||||
{
|
||||
$name = $answer->getId();
|
||||
|
||||
// Do this kind of treatments if you suspect that the string is not JS compatible
|
||||
$name = htmlentities(str_replace(array("\r\n", "\n", "\r"), ' ', $name));
|
||||
|
||||
// // View permission ?
|
||||
// if ($this->get('security.authorization_checker')->isGranted('view_town', $town))
|
||||
// {
|
||||
// // Get the ID
|
||||
// $id = $answer->getId();
|
||||
// // Construct the route
|
||||
// $url = $this->generateUrl('playground_town_view', array('id' => $id));
|
||||
// // Construct the html code to send back to datatables
|
||||
// $responseTemp = "<a href='".$url."' target='_self'>".$ref."</a>";
|
||||
// }
|
||||
// else
|
||||
// {
|
||||
$responseTemp = $name;
|
||||
//}
|
||||
break;
|
||||
}
|
||||
|
||||
case 'nom':
|
||||
{
|
||||
// We know from the class definition that the postal code cannot be null
|
||||
// But if that werent't the case, its value should have been tested
|
||||
// before assigning it to $responseTemp
|
||||
$responseTemp = $answer->getUser()->getLastname();
|
||||
break;
|
||||
}
|
||||
|
||||
case 'prenom':
|
||||
{
|
||||
// We know from the class definition that the postal code cannot be null
|
||||
// But if that werent't the case, its value should have been tested
|
||||
// before assigning it to $responseTemp
|
||||
$responseTemp = $answer->getUser()->getFirstname();
|
||||
if($answer->getUser()->getCompany()){
|
||||
if($answer->getUser()->getCompany()->getCv()){
|
||||
if ($this->container->get( 'kernel' )->getEnvironment() == "dev") {
|
||||
$cheminCv = "../../../../../uploads/cv/";
|
||||
}else{
|
||||
$cheminCv = "../../../../uploads/cv/";
|
||||
}
|
||||
$responseTemp .= "<br> <a target='_blank' href='".$cheminCv.$answer->getUser()->getCompany()->getCv()."'>Lien vers le CV papier</a>";
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
case 'entreprise':
|
||||
{
|
||||
// We know from the class definition that the postal code cannot be null
|
||||
// But if that werent't the case, its value should have been tested
|
||||
// before assigning it to $responseTemp
|
||||
if($answer->getCompany()){
|
||||
$responseTemp = $answer->getCompany()->getBrandName()." / ";
|
||||
if($answer->getAd()){
|
||||
$responseTemp .= $answer->getAd()->getTitle();
|
||||
}
|
||||
}else{
|
||||
$responseTemp = "ND";
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
case 'date_envoi':
|
||||
{
|
||||
if($answer->getSendTime()){
|
||||
$responseTemp = date_format($answer->getSendTime(), 'd-m-Y H:i:s');;
|
||||
}else{
|
||||
$responseTemp ="ND";
|
||||
}
|
||||
// This cannot happen if inner join is used
|
||||
// However it can happen if left or right joins are used
|
||||
|
||||
break;
|
||||
}
|
||||
case 'video':
|
||||
{
|
||||
$video = $answer->getVideo();
|
||||
$responseTemp ="ND";
|
||||
if($video){
|
||||
$responseTemp = 'ID Candidature :'.$answer->getId().'<br />';
|
||||
$videoRenommee = str_replace("/videos/", "", $video->getCdnUrl());
|
||||
//TODO : revoir ca car une vue dans un controller ca n'est pas top!!!!!
|
||||
$responseTemp .= "<iframe src='https://player.vimeo.com/video/".$videoRenommee."?embedparameter=value' width='auto' height='auto' frameborder='0' allowfullscreen></iframe>";
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
case 'status':
|
||||
{
|
||||
if($answer->getstatus()=="SENDED"){
|
||||
$status= "ENVOYE";
|
||||
}else{
|
||||
$status=$answer->getstatus();
|
||||
}
|
||||
$responseTemp = "<span id='status_".$answer->getId()."'> ".$status."</span> ";
|
||||
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
case 'actions':
|
||||
{
|
||||
$responseTemp = "Actions :<select class='changeStatus' onChange='changerStatut(this.value, ".$answer->getId().")' name='changeStatus' data-id=".$answer->getId()."><option value='null'>choisir</option><option value='SENDED'>Envoyé</option><option value='DRAFT'>Brouillon</option><option value='REFUSED'>Refuser</option></select>";
|
||||
$responseTemp .= "<br>";
|
||||
$responseTemp .= "<a class='delete-answer' href='#' onClick='verifierDelete(".$answer->getId().")' data-toggle='tooltip' title='Supprimer'>Supprimer <i class='fa fa-trash'></i></a>";
|
||||
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
// Add the found data to the json
|
||||
$response .= $responseTemp;
|
||||
|
||||
if(++$j !== $nbColumn)
|
||||
$response .='","';
|
||||
}
|
||||
|
||||
$response .= '"]';
|
||||
|
||||
// Not on the last item
|
||||
if(++$i !== $selected_objects_count)
|
||||
$response .= ',';
|
||||
}
|
||||
|
||||
$response .= ']}';
|
||||
|
||||
// Send all this stuff back to DataTables
|
||||
$returnResponse = new JsonResponse();
|
||||
$returnResponse->setJson($response);
|
||||
|
||||
return $returnResponse;
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @Route("/admin/config/answer/{id}/status/{status}", name="admin_answer_status")
|
||||
*/
|
||||
|
||||
@@ -24,10 +24,15 @@ class MediaController extends Controller
|
||||
public function adminVideoModerationListAction()
|
||||
{
|
||||
$em = $this->getDoctrine()->getManager();
|
||||
$medias = $em->getRepository('AppBundle:Media')->findByStatus('TO_MODERATE');
|
||||
|
||||
$medias = $em->getRepository('AppBundle:Media')->getMedias();
|
||||
if ($this->container->get( 'kernel' )->getEnvironment() == "dev") {
|
||||
$chemin="../../../../uploads/videos/";
|
||||
}else{
|
||||
$chemin="../../../uploads/videos/";
|
||||
}
|
||||
return $this->render('admin/media_list_moderation.html.twig', array(
|
||||
'medias' => $medias,
|
||||
'chemin' => $chemin,
|
||||
));
|
||||
}
|
||||
|
||||
|
||||
@@ -108,7 +108,11 @@ class UserController extends Controller
|
||||
}
|
||||
|
||||
\assert(!\is_null($user));
|
||||
$company = $user->getCompany();
|
||||
$company = $user->getCompany();
|
||||
// if ($company) {
|
||||
// $em->remove($company);
|
||||
// $em->flush();
|
||||
// }
|
||||
if ($company) {
|
||||
$company->setPresentationVideo(null);
|
||||
$em->persist($company);
|
||||
@@ -117,15 +121,15 @@ class UserController extends Controller
|
||||
$this->deleteRelation($user);
|
||||
$em->remove($user);
|
||||
$em->flush();
|
||||
if ($company) {
|
||||
$em->remove($company);
|
||||
$em->flush();
|
||||
}
|
||||
// if ($company) {
|
||||
// $em->remove($company);
|
||||
// $em->flush();
|
||||
// }
|
||||
|
||||
// if ($company) {
|
||||
// $em->remove($company);
|
||||
// }
|
||||
$em->flush();
|
||||
//$em->flush();
|
||||
|
||||
return $this->redirectToRoute('admin_config_others_user');
|
||||
}
|
||||
@@ -133,13 +137,14 @@ class UserController extends Controller
|
||||
public function deleteRelation($user)
|
||||
{
|
||||
$em = $this->getDoctrine()->getManager();
|
||||
|
||||
//$company = $em->getRepository('AppBundle:Company')->find($companyId);
|
||||
$sendMessage = $em->getRepository('AppBundle:Message')->findBy(array('sender' => $user));
|
||||
if ($sendMessage) {
|
||||
foreach ($sendMessage as $key => $message) {
|
||||
$message->setSender(null);
|
||||
$message->setAnswer(null);
|
||||
}
|
||||
|
||||
$em->flush();
|
||||
}
|
||||
|
||||
@@ -160,6 +165,14 @@ class UserController extends Controller
|
||||
$em->flush();
|
||||
}
|
||||
|
||||
$subscriptions = $em->getRepository('AppBundle:UserSubscription')->findBy(array('user' => $user));
|
||||
if ($subscriptions) {
|
||||
foreach ($subscriptions as $key => $subscription) {
|
||||
$em->remove($subscription);
|
||||
}
|
||||
$em->flush();
|
||||
}
|
||||
|
||||
$answers = $em->getRepository('AppBundle:Answer')->findBy(array('user' => $user));
|
||||
if ($answers) {
|
||||
foreach ($answers as $key => $answer) {
|
||||
@@ -194,6 +207,12 @@ class UserController extends Controller
|
||||
|
||||
$medias = $em->getRepository('AppBundle:Media')->findBy(array('creator' => $user));
|
||||
if ($medias) {
|
||||
// foreach ($medias as $key => $media) {
|
||||
// $media->setCompany(null);
|
||||
// $em->persist($media);
|
||||
// $em->flush();
|
||||
// }
|
||||
|
||||
foreach ($medias as $key => $media) {
|
||||
$em->remove($media);
|
||||
}
|
||||
|
||||
@@ -4,6 +4,8 @@ namespace AppBundle\Controller;
|
||||
|
||||
use AppBundle\Entity\Ad;
|
||||
use AppBundle\Entity\Answer;
|
||||
use AppBundle\Entity\Note;
|
||||
use AppBundle\Form\NoteAjaxType;
|
||||
use AppBundle\Entity\Company;
|
||||
use AppBundle\Entity\Message;
|
||||
use AppBundle\Form\AnswerType;
|
||||
@@ -18,9 +20,55 @@ use Symfony\Component\HttpFoundation\Session\Session;
|
||||
use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
|
||||
use Symfony\Component\Security\Core\Authentication\Token\UsernamePasswordToken;
|
||||
use AppBundle\Entity\Media;
|
||||
|
||||
//MAILJET
|
||||
use AppBundle\Entity\Mailjet;
|
||||
// use AppBundle\Entity\Response;
|
||||
use AppBundle\Entity\Resources;
|
||||
use AppBundle\Entity\Config;
|
||||
use AppBundle\Entity\Client;
|
||||
class AnswerController extends Controller
|
||||
{
|
||||
/**
|
||||
* @Route("/anwser/share/{id}", name="anwser_share")
|
||||
*/
|
||||
public function anwserShareAction(Request $request, Answer $answer)
|
||||
{
|
||||
if ($answer) {
|
||||
$em = $this->getDoctrine()->getManager();
|
||||
$answer->setIsShared($request->query->get('isShare'));
|
||||
|
||||
$ad = $answer->getAd();
|
||||
if($ad->getCode()==null){
|
||||
$ad->generateCode();
|
||||
//$em->persist($ad);
|
||||
}
|
||||
$em->persist($ad);
|
||||
$em->persist($answer);
|
||||
$em->flush();
|
||||
}
|
||||
|
||||
return new JsonResponse(array('success' => "true", 'code' => $ad->getCode()));
|
||||
}
|
||||
|
||||
/**
|
||||
* @Route("/anwser/updateStatus/{id}", name="anwser_update_status")
|
||||
*/
|
||||
public function anwserUpdateStatusAction(Request $request, Answer $answer)
|
||||
{
|
||||
if ($answer) {
|
||||
$em = $this->getDoctrine()->getManager();
|
||||
$answer->setStatusReponse($request->query->get('status'));
|
||||
|
||||
$em->persist($answer);
|
||||
$em->flush();
|
||||
}
|
||||
|
||||
return new JsonResponse(array('success' => "true", 'code' => ""));
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* @Route("/anwser/edit/comment/{id}", name="anwser_edit_comment")
|
||||
*/
|
||||
@@ -241,42 +289,37 @@ class AnswerController extends Controller
|
||||
*/
|
||||
public function talentCreateSpontaneaousAction(Request $request, Company $company)
|
||||
{
|
||||
$securityContext = $this->container->get('security.authorization_checker');
|
||||
if (!$securityContext->isGranted('IS_AUTHENTICATED_FULLY')) {
|
||||
$this->createAnonymousUser();
|
||||
}
|
||||
$em = $this->getDoctrine()->getManager();
|
||||
$existAnswer = $em->getRepository('AppBundle:Answer')->findOneBy(array('user' => $this->getUser(), 'company' => $company));
|
||||
if ($existAnswer) {
|
||||
if ($existAnswer->getStatus() == "SENDED") {
|
||||
$answer = new Answer($this->getUser(), null, 'DRAFT', $company);
|
||||
$em->persist($answer);
|
||||
$em->flush();
|
||||
} else {
|
||||
$answer = $existAnswer;
|
||||
}
|
||||
} else {
|
||||
$answer = new Answer($this->getUser(), null, 'DRAFT', $company);
|
||||
$em->persist($answer);
|
||||
$em->flush();
|
||||
}
|
||||
$em->persist($answer);
|
||||
$em->flush();
|
||||
$user = $this->getUser();
|
||||
$mustLogin = false;
|
||||
if (!$user->hasRole('ROLE_TALENT')) {
|
||||
$mustLogin = true;
|
||||
}
|
||||
$route_videotheque = $this->generateUrl("answer_create_company_step2", array('id' => $company->getId(), 'type' => 'videotheque'));
|
||||
$this->get('twig')->addGlobal('destination_login', $route_videotheque);
|
||||
// $securityContext = $this->container->get('security.authorization_checker');
|
||||
// if (!$securityContext->isGranted('IS_AUTHENTICATED_FULLY')) {
|
||||
// $this->createAnonymousUser();
|
||||
// }
|
||||
// $em = $this->getDoctrine()->getManager();
|
||||
// $existAnswer = $em->getRepository('AppBundle:Answer')->findOneBy(array('user' => $this->getUser(), 'company' => $company));
|
||||
// if ($existAnswer) {
|
||||
// if ($existAnswer->getStatus() == "SENDED") {
|
||||
// $answer = new Answer($this->getUser(), null, 'DRAFT', $company);
|
||||
// $em->persist($answer);
|
||||
// $em->flush();
|
||||
// } else {
|
||||
// $answer = $existAnswer;
|
||||
// }
|
||||
// } else {
|
||||
// $answer = new Answer($this->getUser(), null, 'DRAFT', $company);
|
||||
// $em->persist($answer);
|
||||
// $em->flush();
|
||||
// }
|
||||
// $em->persist($answer);
|
||||
// $em->flush();
|
||||
// $user = $this->getUser();
|
||||
// $mustLogin = false;
|
||||
// if (!$user->hasRole('ROLE_TALENT')) {
|
||||
// $mustLogin = true;
|
||||
// }
|
||||
// $route_videotheque = $this->generateUrl("answer_create_company_step2", array('id' => $company->getId(), 'type' => 'videotheque'));
|
||||
// $this->get('twig')->addGlobal('destination_login', $route_videotheque);
|
||||
|
||||
return $this->render('answer/answer_create_step1.html.twig', array(
|
||||
'typeObject' => 'Company',
|
||||
'answer' => $answer,
|
||||
'object' => $company,
|
||||
'mustLogin' => $mustLogin,
|
||||
'route_videotheque' => $route_videotheque,
|
||||
));
|
||||
return $this->render('answer/answer_create_step1.html.twig'
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -354,51 +397,132 @@ class AnswerController extends Controller
|
||||
}
|
||||
|
||||
if ($form->isSubmitted() && $form->isValid()) {
|
||||
$mj = new Client($this->getParameter('mailjet_public'), $this->getParameter('mailjet_private'));
|
||||
// $link = $this->generateUrl('company_answer_show', array('id' => $answer->getId()), UrlGeneratorInterface::ABSOLUTE_URL);
|
||||
$contactMail = $answer->getUser()->getEmail();
|
||||
if ($this->container->get( 'kernel' )->getEnvironment() == "dev") {
|
||||
$contactMail = "dev@talentstube.com";
|
||||
}
|
||||
if($message->getVideo() == null){
|
||||
$body = [
|
||||
'FromEmail' => "noreply@talentstube.io",
|
||||
'FromName' => "Talents Tube",
|
||||
'Subject' => "Découvrez la réponse de l’entreprise pour votre candidature",
|
||||
'MJ-TemplateID' =>2196199 ,
|
||||
'MJ-TemplateLanguage' => true,
|
||||
'Recipients' => [
|
||||
[
|
||||
'Email' => $contactMail,
|
||||
'Vars' => [
|
||||
'prenom' => $answer->getUser()->getFirstname(),
|
||||
'entreprise' => $this->getUser()->getCompany()->getBrandName(),
|
||||
]
|
||||
]
|
||||
]
|
||||
];
|
||||
}else{
|
||||
$thumbnailsArray = $message->getVideo()->getThumbnails();
|
||||
$img="";
|
||||
if($thumbnailsArray){
|
||||
if($thumbnailsArray[0]){
|
||||
if($thumbnailsArray[0]['sizes']){
|
||||
$img = $thumbnailsArray[0]['sizes'][4]['link'];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
$body = [
|
||||
'FromEmail' => "noreply@talentstube.io",
|
||||
'FromName' => "Talents tube",
|
||||
'Subject' => "Découvrez la réponse de l’entreprise pour votre candidature.",
|
||||
'MJ-TemplateID' =>2196010 ,
|
||||
'MJ-TemplateLanguage' => true,
|
||||
'Recipients' => [
|
||||
[
|
||||
'Email' => $contactMail,
|
||||
'Vars' => [
|
||||
'prenom' => $answer->getUser()->getFirstname(),
|
||||
'entreprise' => $this->getUser()->getCompany()->getBrandName(),
|
||||
'imgReponseEntreprise' => $img,
|
||||
]
|
||||
]
|
||||
]
|
||||
];
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
$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',
|
||||
'answer' => $answer,
|
||||
'messageText' => $messageText,
|
||||
'user' => $answer->getUser(),
|
||||
'video' => $message->getVideo(),
|
||||
'message' => $message,
|
||||
'aliasCompany' => $aliasCompany
|
||||
));
|
||||
// $mediaManager = $this->get('media_manager');
|
||||
// $mediaManager->getThumbnails($message);
|
||||
// $htmlView = $this->renderView('email/contact_talent.html.twig', array(
|
||||
// 'type' => 'html',
|
||||
// 'answer' => $answer,
|
||||
// 'messageText' => $messageText,
|
||||
// 'user' => $answer->getUser(),
|
||||
// 'video' => $message->getVideo(),
|
||||
// 'message' => $message,
|
||||
// 'aliasCompany' => $aliasCompany
|
||||
// ));
|
||||
|
||||
$plainView = $this->renderView('email/contact_talent_plain.html.twig', array(
|
||||
'message' => $messageText,
|
||||
'user' => $answer->getUser(),
|
||||
));
|
||||
$email = \Swift_Message::newInstance()
|
||||
->setSubject('Candidature : ' . $title)
|
||||
->setFrom($this->getParameter('mailer_user'), $user->getEmail())
|
||||
->setReplyTo($user->getEmail())
|
||||
->setTo($answer->getUser()->getEmail())
|
||||
->setBody($htmlView, 'text/html')
|
||||
->addPart($plainView, 'text/plain');
|
||||
$this->get('mailer')->send($email);
|
||||
// $plainView = $this->renderView('email/contact_talent_plain.html.twig', array(
|
||||
// 'message' => $messageText,
|
||||
// 'user' => $answer->getUser(),
|
||||
// ));
|
||||
// $email = \Swift_Message::newInstance()
|
||||
// ->setSubject('Candidature : ' . $title)
|
||||
// ->setFrom($this->getParameter('mailer_user'))
|
||||
// ->setReplyTo($this->getParameter('mailer_user'))
|
||||
// ->setTo($answer->getUser()->getEmail())
|
||||
// ->setBody($htmlView, 'text/html')
|
||||
// ->addPart($plainView, 'text/plain');
|
||||
// $this->get('mailer')->send($email);
|
||||
$em = $this->getDoctrine()->getManager();
|
||||
$message->setSubject('Candidature : ' . $title);
|
||||
$message->setContent($messageText);
|
||||
$message->setStatus($form['status']->getData());
|
||||
$message->setAnswer($answer);
|
||||
$message->setStatus('CONTACTED');
|
||||
$em->persist($message);
|
||||
$em->flush();
|
||||
|
||||
$response = $mj->post(Resources::$Email, ['body' => $body]);
|
||||
$response->success() && var_dump($response->getData());
|
||||
return $this->redirectToRoute('company_answer_show', ['id' => $answer->getId()]);
|
||||
}
|
||||
|
||||
$formMessage = $form->createView();
|
||||
$formVideo = $form;
|
||||
$formVideo->remove('message');
|
||||
|
||||
//$formVideo->remove('message');
|
||||
$note = new Note($user);
|
||||
$formNote = $this->createForm(NoteAjaxType::class, $note);
|
||||
$formNote->handleRequest($request);
|
||||
if ($formNote->isSubmitted() && $formNote->isValid()) {
|
||||
$answer->addNote($note);
|
||||
$em->persist($answer);
|
||||
$em->flush();
|
||||
$referer = $request->headers->get('referer');
|
||||
return $this->redirect($referer);
|
||||
}
|
||||
$extension="";
|
||||
if($answer->getUser()->getCompany()->getCv()){
|
||||
//$fichier = new SplFileInfo($answer->getUser()->getCompany()->getCv());
|
||||
|
||||
$fichier = explode(".", $answer->getUser()->getCompany()->getCv());
|
||||
$extension=$fichier[1];
|
||||
}
|
||||
return $this->render('company/answer_show.html.twig', [
|
||||
'answer' => $answer,
|
||||
'extension' => $extension,
|
||||
'form' => $formMessage,
|
||||
'formVideo' => $formVideo->createView(),
|
||||
'formNote' => $formNote->createView(),
|
||||
'type' => $type,
|
||||
'videos' => $videos,
|
||||
'message' => $message
|
||||
@@ -416,7 +540,8 @@ class AnswerController extends Controller
|
||||
$spontaneous = $em->getRepository('AppBundle:Answer')->findBy(
|
||||
array(
|
||||
'company' => $user->getCompany()->getId(),
|
||||
'status' => 'SENDED'
|
||||
'status' => 'SENDED',
|
||||
'ad' => null
|
||||
),
|
||||
array(
|
||||
'uTime' => 'DESC'
|
||||
|
||||
@@ -22,6 +22,12 @@ use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
|
||||
use JMS\Serializer\SerializationContext;
|
||||
use AppBundle\Exception\ResourceValidationException;
|
||||
use AppBundle\Exception\UnknownUserException;
|
||||
//MAILJET
|
||||
use AppBundle\Entity\Mailjet;
|
||||
// use AppBundle\Entity\Response;
|
||||
use AppBundle\Entity\Resources;
|
||||
use AppBundle\Entity\Config;
|
||||
use AppBundle\Entity\Client;
|
||||
use \DateTime;
|
||||
|
||||
class AnswerController extends FOSRestController
|
||||
@@ -95,7 +101,7 @@ class AnswerController extends FOSRestController
|
||||
$mediaId = htmlspecialchars($request->get('mediaId'));
|
||||
$companyId = htmlspecialchars($request->get('companyId'));
|
||||
$adId = htmlspecialchars($request->get('adId'));
|
||||
|
||||
//TODO 471 : Associer CV avec candidature crée (on a envoyé le lien du cv dans le request)
|
||||
if (!is_numeric($mediaId) || !is_numeric($companyId) || ($adId != null && !is_numeric($adId))) {
|
||||
$message = 'Le média, l\'entreprise ou l\'offre ne sont pas au format demandé';
|
||||
$status = 'failure';
|
||||
@@ -105,9 +111,13 @@ class AnswerController extends FOSRestController
|
||||
$existCompanyAnswer = null;
|
||||
// Verify if users have already posted answers
|
||||
if (isset($adId) && $adId != null) {
|
||||
$existAdAnswer = $em->getRepository('AppBundle:Answer')->findOneBy(array('user' => $usr, 'ad' => $adId));
|
||||
$dateJour = new \DateTime('NOW');
|
||||
// $existAdAnswer = $em->getRepository('AppBundle:Answer')->findOneBy(array('user' => $usr, 'ad' => $adId));
|
||||
$existAdAnswer = $em->getRepository('AppBundle:Answer')->findExistAdAnswer($usr, $adId);
|
||||
} else {
|
||||
$existCompanyAnswer = $em->getRepository('AppBundle:Answer')->findOneBy(array('user' => $usr, 'company' => $companyId));
|
||||
// $existCompanyAnswer = $em->getRepository('AppBundle:Answer')->findOneBy(array('user' => $usr, 'company' => $companyId));
|
||||
$existCompanyAnswer = $em->getRepository('AppBundle:Answer')->findExistEntrepriseAnswer($usr, $companyId);
|
||||
|
||||
}
|
||||
|
||||
if (!isset($mediaId) || !isset($companyId) || $mediaId == null || $companyId == null) {
|
||||
@@ -115,11 +125,11 @@ class AnswerController extends FOSRestController
|
||||
$status = 'failure';
|
||||
throw new ResourceValidationException($message, $status);
|
||||
} else if ($existAdAnswer) {
|
||||
$message = 'Vous avez déja postulé pour cette offre';
|
||||
$message = "Tu as déjà postulé aujourd’hui !";
|
||||
$status = 'failure';
|
||||
throw new ResourceValidationException($message, $status);
|
||||
} else if ($existCompanyAnswer) {
|
||||
$message = 'Vous avez déja postulé pour cette entreprise.';
|
||||
$message = "Tu as déjà postulé aujourd’hui pour cette entreprise !";
|
||||
$status = 'failure';
|
||||
throw new ResourceValidationException($message, $status);
|
||||
} else {
|
||||
@@ -144,13 +154,90 @@ class AnswerController extends FOSRestController
|
||||
$em->persist($answer);
|
||||
$em->flush();
|
||||
|
||||
$userCompany = $company->getUsers();
|
||||
$usersCompany = $company->getUsers();
|
||||
$mediaManager = $this->get('media_manager');
|
||||
$mediaManager->getThumbnails($answer);
|
||||
$thumbnailsArray = $answer->getVideo()->getThumbnails();
|
||||
$img = $thumbnailsArray[0]['sizes'][3]['link'];
|
||||
$title = $company->getBrandName();
|
||||
|
||||
/*$message = new Message('Candidature', 'Video', $usr, $userCompany{
|
||||
0}, 'CONTACT_TALENT', $answer);
|
||||
$message->setVideo($video);
|
||||
$em->persist($message);
|
||||
$em->flush();*/
|
||||
|
||||
|
||||
//if ($this->container->get( 'kernel' )->getEnvironment() != "dev") {
|
||||
|
||||
|
||||
$mailManager = $this->get('app.mail_manager');
|
||||
foreach ($usersCompany as $user){
|
||||
$mj = new Client("355697fac93fca865660734b4fdffaeb", "ddecf75321ca89c09e561857b13534c8");
|
||||
$link = $this->generateUrl('company_answer_show', array('id' => $answer->getId()), UrlGeneratorInterface::ABSOLUTE_URL);
|
||||
$contactMail = $user->getEmail();
|
||||
if ($this->container->get( 'kernel' )->getEnvironment() == "dev") {
|
||||
$contactMail = "dev@talentstube.com";
|
||||
|
||||
}else{
|
||||
// $complSubject="";
|
||||
// if($user->getEmail()){
|
||||
// $complSubject=$user->getEmail();
|
||||
// }
|
||||
if($answer->getUser()){
|
||||
$body = [
|
||||
'FromEmail' => "noreply@talentstube.io",
|
||||
'FromName' => "Talents Tube",
|
||||
// 'To' => $contactMail,
|
||||
'Subject' => "Une nouvelle candidature reçue sur Talents Tube ",
|
||||
'MJ-TemplateID' =>2297838 ,
|
||||
'MJ-TemplateLanguage' => true,
|
||||
'Recipients' => [
|
||||
[
|
||||
'Email' => $contactMail,
|
||||
'Name' => $user->getLastname(),
|
||||
'Vars' => [
|
||||
'prenomRecruteur' => $user->getFirstname(),
|
||||
'nomRecruteur' => $user->getLastname(),
|
||||
'prenom' => $answer->getUser()->getFirstname(),
|
||||
'nom' => $answer->getUser()->getLastname(),
|
||||
'urlCandidature' => $link,
|
||||
]
|
||||
]
|
||||
],
|
||||
|
||||
];
|
||||
$response = $mj->post(Resources::$Email, ['body' => $body]);
|
||||
$response->success() ;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// $mailManager->sendMail(
|
||||
// 'Candidature 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><img alt="" src="' . $img . '" style="border:none;display:block;outline:none;text-decoration:none;width:100%;max-width:600px;height:auto;" width="600" height="auto"></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 ' . $user->getLastname() . ' ' . $user->getFirstname() . ',</p>
|
||||
// <p>Le talent ' . $answer->getUser()->getFirstname() . ' ' . $answer->getUser()->getLastname() . ' a répondu à votre annonce ' . $title . '.</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]>
|
||||
// <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="' . $link . '" 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">Découvrir le talent</a></td></tr></tbody></table></td></tr></tbody></table></div><!--[if mso]>
|
||||
// </td></tr></table>
|
||||
// <![endif]--></td></tr></tbody></table></div>',
|
||||
// $user,
|
||||
// 'contact_default'
|
||||
// );
|
||||
}
|
||||
//}
|
||||
$status = array('status' => "success", "idAnswer" => $answer->getId()/*, "idMessage" => $message->getId()*/);
|
||||
}
|
||||
} else {
|
||||
@@ -284,6 +371,7 @@ class AnswerController extends FOSRestController
|
||||
$status = array('status' => "success", "companyUpdated" => false);
|
||||
//dump($file);
|
||||
// If a file was uploaded
|
||||
//TODO Controle sur l'extension du fichier (pdf, word)
|
||||
if (!is_null($file)) {
|
||||
|
||||
$companyManager = $this->get('app.company_manager');
|
||||
@@ -334,6 +422,78 @@ class AnswerController extends FOSRestController
|
||||
$em->persist($message);
|
||||
$em->flush();
|
||||
|
||||
|
||||
|
||||
$usersCompany = $existAnswer->getCompany()->getUsers();
|
||||
$mediaManager = $this->get('media_manager');
|
||||
$mediaManager->getThumbnails($existAnswer);
|
||||
$thumbnailsArray = $existAnswer->getVideo()->getThumbnails();
|
||||
$img = $thumbnailsArray[0]['sizes'][3]['link'];
|
||||
$title = $existAnswer->getCompany()->getBrandName();
|
||||
|
||||
/*$message = new Message('Candidature', 'Video', $usr, $userCompany{
|
||||
0}, 'CONTACT_TALENT', $answer);
|
||||
$message->setVideo($video);
|
||||
$em->persist($message);
|
||||
$em->flush();*/
|
||||
$mailManager = $this->get('app.mail_manager');
|
||||
foreach ($usersCompany as $user){
|
||||
|
||||
$mj = new Client($this->getParameter('mailjet_public'), $this->getParameter('mailjet_private'));
|
||||
// $link = $this->generateUrl('company_answer_show', array('id' => $existAnswer->getId()), UrlGeneratorInterface::ABSOLUTE_URL);
|
||||
$contactMail = $user->getEmail();
|
||||
if ($this->container->get( 'kernel' )->getEnvironment() == "dev") {
|
||||
$contactMail = "dev@talentstube.com";
|
||||
}
|
||||
$body = [
|
||||
'FromEmail' => "noreply@talentstube.io",
|
||||
'FromName' => "Talents Tube",
|
||||
'Subject' => "Vous avez reçu un message d’un candidat",
|
||||
'MJ-TemplateID' =>2195469 ,
|
||||
'MJ-TemplateLanguage' => true,
|
||||
'Recipients' => [
|
||||
[
|
||||
'Email' => $contactMail,
|
||||
'Vars' => [
|
||||
'prenomRecruteur' => $user->getFirstname(),
|
||||
'nomRecruteur' => $user->getLastname(),
|
||||
'prenom' => $existAnswer->getUser()->getFirstname(),
|
||||
'nom' => $existAnswer->getUser()->getLastname(),
|
||||
'entreprise' => $title
|
||||
]
|
||||
]
|
||||
]
|
||||
];
|
||||
$response = $mj->post(Resources::$Email, ['body' => $body]);
|
||||
|
||||
|
||||
// $link = $this->generateUrl('company_answer_show', array('id' => $existAnswer->getId()), UrlGeneratorInterface::ABSOLUTE_URL);
|
||||
// $mailManager->sendMail(
|
||||
// 'Message sur la plateforme Talents Tube ',
|
||||
// '<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><img alt="" src="' . $img . '" style="border:none;display:block;outline:none;text-decoration:none;width:100%;max-width:600px;height:auto;" width="600" height="auto"></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 ' . $user->getLastname() . ' ' . $user->getFirstname() . ',</p>
|
||||
// <p>Le talent ' . $existAnswer->getUser()->getFirstname() . ' ' . $existAnswer->getUser()->getLastname() . ' a laissé un message à votre annonce ' . $title . '.</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]>
|
||||
// <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="' . $link . '" 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">Lire le message</a></td></tr></tbody></table></td></tr></tbody></table></div><!--[if mso]>
|
||||
// </td></tr></table>
|
||||
// <![endif]--></td></tr></tbody></table></div>',
|
||||
// $user,
|
||||
// 'contact_default'
|
||||
// );
|
||||
}
|
||||
|
||||
|
||||
$status = array('status' => "success");
|
||||
return new JsonResponse($status);
|
||||
}
|
||||
@@ -365,4 +525,4 @@ class AnswerController extends FOSRestController
|
||||
|
||||
return new JsonResponse($data, 200, [], true);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -17,6 +17,13 @@ use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
|
||||
use JMS\Serializer\SerializationContext;
|
||||
use Symfony\Component\HttpFoundation\JsonResponse;
|
||||
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
|
||||
use Symfony\Component\HttpFoundation\Request;
|
||||
//MAILJET
|
||||
use AppBundle\Entity\Mailjet;
|
||||
// use AppBundle\Entity\Response;
|
||||
use AppBundle\Entity\Resources;
|
||||
use AppBundle\Entity\Config;
|
||||
use AppBundle\Entity\Client;
|
||||
|
||||
class CompanyController extends FOSRestController
|
||||
{
|
||||
@@ -31,6 +38,353 @@ class CompanyController extends FOSRestController
|
||||
return new JsonResponse($data, 200, [], true);
|
||||
}
|
||||
|
||||
/**
|
||||
* @Rest\Get(path="/api/getToken", name="api_getToken")
|
||||
* @Rest\View
|
||||
* Récupérer token
|
||||
*/
|
||||
public function getToken(){
|
||||
$curl = curl_init();
|
||||
|
||||
curl_setopt_array($curl, array(
|
||||
CURLOPT_URL => "https://entreprise.pole-emploi.fr/connexion/oauth2/access_token?realm=/partenaire",
|
||||
CURLOPT_RETURNTRANSFER => true,
|
||||
CURLOPT_ENCODING => "",
|
||||
CURLOPT_MAXREDIRS => 10,
|
||||
CURLOPT_TIMEOUT => 0,
|
||||
CURLOPT_FOLLOWLOCATION => true,
|
||||
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
|
||||
CURLOPT_CUSTOMREQUEST => "POST",
|
||||
CURLOPT_POSTFIELDS => "grant_type=client_credentials&client_id=PAR_talentstube_35a96821a2f4a981a21a387dd590041617a42cb7755960fe7b6c68e617136b92&client_secret=de3dff58ab5adab6ab265753ed0f7d373ab764aea7c4b2b9de4a7744467503cc&scope=api_romev1%20application_PAR_talentstube_35a96821a2f4a981a21a387dd590041617a42cb7755960fe7b6c68e617136b92%20nomenclatureRome",
|
||||
CURLOPT_HTTPHEADER => array(
|
||||
"Content-Type: application/x-www-form-urlencoded",
|
||||
|
||||
),
|
||||
));
|
||||
|
||||
$response = curl_exec($curl);
|
||||
|
||||
curl_close($curl);
|
||||
|
||||
$json = new JsonResponse($response, 200, [], true);
|
||||
// echo "tes14";
|
||||
$obj= json_decode ( $response);
|
||||
// var_dump($obj);
|
||||
// echo "<br>!!<br>";
|
||||
// echo($obj->access_token);
|
||||
return $obj->access_token;
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* @Rest\Get(path="/api/getCompetences", name="api_getCompetences")
|
||||
* @Rest\View
|
||||
* Récupérer des compétences à partir d'un libellé
|
||||
*/
|
||||
public function getCompetencesAction(Request $request)
|
||||
{
|
||||
//APPEL de l'api Pole emploi pour recuperer Token
|
||||
$q=$request->query->get('q');
|
||||
//echo "requete".$q;
|
||||
$token = $this->getToken();
|
||||
$curl = curl_init();
|
||||
|
||||
curl_setopt_array($curl, array(
|
||||
CURLOPT_URL => "https://api.emploi-store.fr/partenaire/rome/v1/competence?q=".$q,
|
||||
CURLOPT_RETURNTRANSFER => true,
|
||||
CURLOPT_ENCODING => "",
|
||||
CURLOPT_MAXREDIRS => 10,
|
||||
CURLOPT_TIMEOUT => 0,
|
||||
CURLOPT_FOLLOWLOCATION => true,
|
||||
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
|
||||
CURLOPT_CUSTOMREQUEST => "GET",
|
||||
CURLOPT_HTTPHEADER => array(
|
||||
"Accept: application/json",
|
||||
"Authorization: Bearer " . $token ,
|
||||
),
|
||||
));
|
||||
|
||||
$response = curl_exec($curl);
|
||||
|
||||
curl_close($curl);
|
||||
return new JsonResponse($response, 200, [], true);
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @Rest\Get(path="/api/getAppelationsMetier", name="api_getAppelationsMetier")
|
||||
* @Rest\View
|
||||
* Récupérer des appelations pole emploi à partir d'un métier (code ROME)
|
||||
*/
|
||||
public function getAppelationsMetierAction(Request $request)
|
||||
{
|
||||
//APPEL de l'api Pole emploi pour recuperer Token
|
||||
$q=$request->query->get('q');
|
||||
//echo "requete".$q;
|
||||
$token = $this->getToken();
|
||||
$response =null;
|
||||
if($q){
|
||||
$curl = curl_init();
|
||||
curl_setopt($curl, CURLOPT_HTTPHEADER, array(
|
||||
'Content-Type: application/json',
|
||||
'Accept : application/json',
|
||||
'Authorization: Bearer ' . $token
|
||||
));
|
||||
curl_setopt_array($curl, array(
|
||||
CURLOPT_URL => "https://api.emploi-store.fr/partenaire/rome/v1/metier/".$q."/appellation",
|
||||
CURLOPT_RETURNTRANSFER => true,
|
||||
CURLOPT_ENCODING => "",
|
||||
CURLOPT_MAXREDIRS => 10,
|
||||
CURLOPT_TIMEOUT => 0,
|
||||
CURLOPT_FOLLOWLOCATION => true,
|
||||
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
|
||||
CURLOPT_CUSTOMREQUEST => "GET",
|
||||
CURLOPT_HTTPHEADER => array(
|
||||
"Accept: application/json",
|
||||
"Authorization: Bearer " . $token ,
|
||||
),
|
||||
));
|
||||
|
||||
|
||||
|
||||
$response = curl_exec($curl);
|
||||
$err = curl_error($curl);
|
||||
if (!$err)
|
||||
{
|
||||
|
||||
|
||||
}
|
||||
curl_close($curl);
|
||||
|
||||
}
|
||||
|
||||
return new JsonResponse($response, 200, [], true);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @Rest\Get(path="/api/getAppelationsLibelle", name="api_getAppelationsLibelle")
|
||||
* @Rest\View
|
||||
* Récupérer des appelations pole emploi à partir d'un libellé
|
||||
*/
|
||||
public function getAppelationsLibelleAction(Request $request)
|
||||
{
|
||||
//APPEL de l'api Pole emploi pour recuperer Token
|
||||
$q=$request->query->get('q');
|
||||
//echo "requete".$q;
|
||||
$token = $this->getToken();
|
||||
$response =null;
|
||||
if($q){
|
||||
$curl = curl_init();
|
||||
curl_setopt($curl, CURLOPT_HTTPHEADER, array(
|
||||
'Content-Type: application/json',
|
||||
'Accept : application/json',
|
||||
'Authorization: Bearer ' . $token
|
||||
));
|
||||
$q =str_replace(" ","%20",$q);
|
||||
$search = array('À', 'Á', 'Â', 'Ã', 'Ä', 'Å', 'Ç', 'È', 'É', 'Ê', 'Ë', 'Ì', 'Í', 'Î', 'Ï', 'Ò', 'Ó', 'Ô', 'Õ', 'Ö', 'Ù', 'Ú', 'Û', 'Ü', 'Ý', 'à', 'á', 'â', 'ã', 'ä', 'å', 'ç', 'è', 'é', 'ê', 'ë', 'ì', 'í', 'î', 'ï', 'ð', 'ò', 'ó', 'ô', 'õ', 'ö', 'ù', 'ú', 'û', 'ü', 'ý', 'ÿ');
|
||||
$replace = array('A', 'A', 'A', 'A', 'A', 'A', 'C', 'E', 'E', 'E', 'E', 'I', 'I', 'I', 'I', 'O', 'O', 'O', 'O', 'O', 'U', 'U', 'U', 'U', 'Y', 'a', 'a', 'a', 'a', 'a', 'a', 'c', 'e', 'e', 'e', 'e', 'i', 'i', 'i', 'i', 'o', 'o', 'o', 'o', 'o', 'o', 'u', 'u', 'u', 'u', 'y', 'y');
|
||||
$q = str_replace($search, $replace, $q);
|
||||
|
||||
curl_setopt_array($curl, array(
|
||||
CURLOPT_URL => "https://api.emploi-store.fr/partenaire/rome/v1/appellation?q=".$q,
|
||||
CURLOPT_RETURNTRANSFER => true,
|
||||
CURLOPT_ENCODING => "",
|
||||
CURLOPT_MAXREDIRS => 10,
|
||||
CURLOPT_TIMEOUT => 0,
|
||||
CURLOPT_FOLLOWLOCATION => true,
|
||||
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
|
||||
CURLOPT_CUSTOMREQUEST => "GET",
|
||||
CURLOPT_HTTPHEADER => array(
|
||||
"Accept: application/json",
|
||||
"Authorization: Bearer " . $token ,
|
||||
),
|
||||
));
|
||||
$response = curl_exec($curl);
|
||||
$err = curl_error($curl);
|
||||
if (!$err)
|
||||
{
|
||||
|
||||
|
||||
}
|
||||
curl_close($curl);
|
||||
|
||||
}
|
||||
|
||||
return new JsonResponse($response, 200, [], true);
|
||||
}
|
||||
|
||||
/**
|
||||
* @Rest\Get(path="/api/getDetailAppelation", name="api_getDetailAppelation")
|
||||
* @Rest\View
|
||||
* Récupérer le détail d'une appelation pole meploi
|
||||
*/
|
||||
public function getDetailAppelationAction(Request $request)
|
||||
{
|
||||
//APPEL de l'api Pole emploi pour recuperer Token
|
||||
$q=$request->query->get('q');
|
||||
//echo "requete".$q;
|
||||
$token = $this->getToken();
|
||||
$response =null;
|
||||
if($q){
|
||||
$curl = curl_init();
|
||||
curl_setopt($curl, CURLOPT_HTTPHEADER, array(
|
||||
'Content-Type: application/json',
|
||||
'Accept : application/json',
|
||||
'Authorization: Bearer ' . $token
|
||||
));
|
||||
curl_setopt_array($curl, array(
|
||||
CURLOPT_URL => "https://api.emploi-store.fr/partenaire/rome/v1/appellation/".$q,
|
||||
CURLOPT_RETURNTRANSFER => true,
|
||||
CURLOPT_ENCODING => "",
|
||||
CURLOPT_MAXREDIRS => 10,
|
||||
CURLOPT_TIMEOUT => 0,
|
||||
CURLOPT_FOLLOWLOCATION => true,
|
||||
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
|
||||
CURLOPT_CUSTOMREQUEST => "GET",
|
||||
CURLOPT_HTTPHEADER => array(
|
||||
"Accept: application/json",
|
||||
"Authorization: Bearer " . $token ,
|
||||
),
|
||||
));
|
||||
$response = curl_exec($curl);
|
||||
$err = curl_error($curl);
|
||||
if (!$err)
|
||||
{
|
||||
|
||||
|
||||
}
|
||||
curl_close($curl);
|
||||
|
||||
}
|
||||
|
||||
return new JsonResponse($response, 200, [], true);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @Rest\Get(path="/api/getMetiers", name="api_getMetiers")
|
||||
* @Rest\View
|
||||
*/
|
||||
public function getMetiersAction(Request $request)
|
||||
{
|
||||
//APPEL de l'api Pole emploi pour recuperer Token
|
||||
$q=$request->query->get('q');
|
||||
//echo "requete".$q;
|
||||
$curl = curl_init();
|
||||
curl_setopt_array($curl, array(
|
||||
CURLOPT_URL => "https://entreprise.pole-emploi.fr/connexion/oauth2/access_token",
|
||||
CURLOPT_RETURNTRANSFER => true,
|
||||
CURLOPT_ENCODING => "",
|
||||
CURLOPT_MAXREDIRS => 10,
|
||||
CURLOPT_TIMEOUT => 30,
|
||||
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
|
||||
CURLOPT_CUSTOMREQUEST => "POST",
|
||||
CURLOPT_POSTFIELDS => "realm=/partenaire&grant_type=client_credentials&client_id=PAR_talentstube_35a96821a2f4a981a21a387dd590041617a42cb7755960fe7b6c68e617136b92&client_secret=de3dff58ab5adab6ab265753ed0f7d373ab764aea7c4b2b9de4a7744467503cc&scope=api_romev1 application_PAR_talentstube_35a96821a2f4a981a21a387dd590041617a42cb7755960fe7b6c68e617136b92 nomenclatureRome",
|
||||
CURLOPT_HTTPHEADER => array(
|
||||
"cache-control: no-cache",
|
||||
"content-type: application/x-www-form-urlencoded"
|
||||
),
|
||||
));
|
||||
$response = curl_exec($curl);
|
||||
$err = curl_error($curl);
|
||||
|
||||
curl_close($curl);
|
||||
$token = "";
|
||||
if (!$err)
|
||||
{
|
||||
|
||||
$obj = json_decode($response);
|
||||
$token = $obj->access_token;
|
||||
// echo $token;
|
||||
}
|
||||
$response =null;
|
||||
if($q){
|
||||
$curl = curl_init();
|
||||
curl_setopt($curl, CURLOPT_HTTPHEADER, array(
|
||||
'Content-Type: application/json',
|
||||
'Authorization: Bearer ' . $token
|
||||
));
|
||||
curl_setopt_array($curl, array(
|
||||
CURLOPT_URL => "https://api.emploi-store.fr/partenaire/rome/v1/competence?q=".$q,
|
||||
CURLOPT_RETURNTRANSFER => true,
|
||||
CURLOPT_ENCODING => "",
|
||||
CURLOPT_MAXREDIRS => 10,
|
||||
CURLOPT_TIMEOUT => 30,
|
||||
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
|
||||
CURLOPT_CUSTOMREQUEST => "GET",
|
||||
|
||||
|
||||
));
|
||||
$response = curl_exec($curl);
|
||||
$err = curl_error($curl);
|
||||
if (!$err)
|
||||
{
|
||||
|
||||
|
||||
}
|
||||
curl_close($curl);
|
||||
|
||||
}
|
||||
$arr = array('a' => 1, 'b' => 2, 'c' => 3, 'd' => 4, 'e' => 5);
|
||||
$data = json_encode($arr);
|
||||
return new JsonResponse($response, 200, [], true);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @Rest\Get(path="/api/demanderRdv", name="api_demanderRdv")
|
||||
* @Rest\View
|
||||
*/
|
||||
public function demanderRdvAction(Request $request)
|
||||
{
|
||||
//APPEL de l'api Pole emploi pour recuperer Token
|
||||
$nom=$request->query->get('nom');
|
||||
$prenom=$request->query->get('prenom');
|
||||
$email=$request->query->get('email');
|
||||
$telephone=$request->query->get('telephone');
|
||||
$page=$request->query->get('page');
|
||||
if(isset($_SERVER['HTTP_REFERER'])) {
|
||||
$previous = $_SERVER['HTTP_REFERER']." / ".$_SERVER['REQUEST_URI'];
|
||||
}
|
||||
|
||||
$mj = new Client($this->getParameter('mailjet_public'), $this->getParameter('mailjet_private'));
|
||||
// $link = $this->generateUrl('company_answer_show', array('id' => $existAnswer->getId()), UrlGeneratorInterface::ABSOLUTE_URL);
|
||||
$contactMail = "contact@talentstube.com";
|
||||
if ($this->container->get( 'kernel' )->getEnvironment() == "dev") {
|
||||
$contactMail = "dev@talentstube.com";
|
||||
}
|
||||
$body = [
|
||||
'FromEmail' => "noreply@talentstube.io",
|
||||
'FromName' => "Talents Tube",
|
||||
'Subject' => "Demande de rdv ",
|
||||
'MJ-TemplateID' =>2383497 ,
|
||||
'MJ-TemplateLanguage' => true,
|
||||
'Recipients' => [
|
||||
[
|
||||
'Email' => $contactMail,
|
||||
'Vars' => [
|
||||
'prenom' => $prenom,
|
||||
'nom' => $nom,
|
||||
'email' => $email,
|
||||
'telephone' => $telephone,
|
||||
'page' => $page,
|
||||
'precedent' => $previous
|
||||
]
|
||||
]
|
||||
]
|
||||
];
|
||||
$response = $mj->post(Resources::$Email, ['body' => $body]);
|
||||
|
||||
|
||||
return new JsonResponse(array('retour' => "true"));
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* @Rest\Get("/api/companies", name="api_company_list")
|
||||
* @Rest\QueryParam(
|
||||
@@ -103,6 +457,7 @@ class CompanyController extends FOSRestController
|
||||
public function companyAjaxRecStatAction(Company $company)
|
||||
{
|
||||
$history = $this->get('edeclic.history.record');
|
||||
|
||||
if ($this->getUser() && $this->getUser()->getCompany() != null) {
|
||||
if ($this->getUser()->getCompany()->getId() !== $company->getId()) {
|
||||
$history->recordIt($this->getUser()->getId(), "r", get_class($company), $company->getId(), serialize($company));
|
||||
@@ -111,6 +466,10 @@ class CompanyController extends FOSRestController
|
||||
$history->recordIt("Anonymous", "r", 'AppBundle\Entity\Company', $company->getId(), serialize($company));
|
||||
}
|
||||
|
||||
return new JsonResponse(array('code' => "ok"));
|
||||
if(!$this->getUser() == null){
|
||||
return new JsonResponse(array('code' => "ok", "user" => $this->getUser()->getUsername()));
|
||||
} else{
|
||||
return new JsonResponse(array('code' => "ok"));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -67,6 +67,7 @@ class SecurityController extends FOSRestController
|
||||
$lastname = htmlspecialchars($request->get('lastname'));
|
||||
$email = htmlspecialchars($request->get('email'));
|
||||
$password = htmlspecialchars($request->get('password'));
|
||||
$adId = htmlspecialchars($request->get('adId'));
|
||||
|
||||
if (!isset($firstname) || !isset($lastname) || !isset($email) || !isset($password))
|
||||
$status = array('status' => "failure", 'message' => 'empty parameters');
|
||||
@@ -75,7 +76,7 @@ class SecurityController extends FOSRestController
|
||||
$user = $userManager->findUserByEmail($email);
|
||||
|
||||
if (isset($user))
|
||||
$status = array('status' => "failure", 'message' => "L'utilisateur existe déjà.");
|
||||
$status = array('status' => "failure", 'message' => "L'utilisateur existe déjà!");
|
||||
else {
|
||||
$user = $userManager->createUser();
|
||||
|
||||
@@ -99,11 +100,12 @@ class SecurityController extends FOSRestController
|
||||
$alias = $slugService->slugify($user->getId() . "-" . $user->getFirstname() . "-" . $user->getLastname());
|
||||
$company->setAlias($alias);
|
||||
$company->setType("TALENT");
|
||||
$company->setDescription("Annonce consultée : ".$adId);
|
||||
$user->setCompany($company);
|
||||
$userManager->updateUser($user);
|
||||
}
|
||||
// $userManager->updatePassword($user);//pas besoin car fait dans updateUser , vraiment bizarre....
|
||||
$status = array('status' => "success", 'confirmationToken' => $user->getConfirmationToken(), 'email' => $user->getEmail(), 'firstname' => $user->getFirstname(), 'lastname' => $user->getLastname());
|
||||
$status = array('status' => "success", 'confirmationToken' => $user->getConfirmationToken(), 'email' => $user->getEmail(), 'firstname' => $user->getFirstname(), 'lastname' => $user->getLastname(), 'adId' => $adId);
|
||||
}
|
||||
}
|
||||
return new JsonResponse($status);
|
||||
@@ -163,6 +165,21 @@ class SecurityController extends FOSRestController
|
||||
$countryTalent = "";
|
||||
}
|
||||
$titleTalent = htmlspecialchars($request->get('currentJob'));
|
||||
|
||||
$geoloc = htmlspecialchars($request->get('geoloc'));
|
||||
$street_number = htmlspecialchars($request->get('street_number'));
|
||||
$route = htmlspecialchars($request->get('route'));
|
||||
$locality = htmlspecialchars($request->get('locality'));
|
||||
$administrative_area_level_2 = htmlspecialchars($request->get('administrative_area_level_2'));
|
||||
$administrative_area_level_1 = htmlspecialchars($request->get('administrative_area_level_1'));
|
||||
$country = htmlspecialchars($request->get('country'));
|
||||
$postal_code = htmlspecialchars($request->get('postal_code'));
|
||||
$formatted_address = str_replace('"', '', $request->get('formatted_address'));
|
||||
$lat = stripslashes($request->get('lat'));
|
||||
$lng = stripslashes($request->get('lng'));
|
||||
|
||||
//
|
||||
|
||||
$newLinkedin = htmlspecialchars($request->get('linkedin'));
|
||||
$newTwitter = htmlspecialchars($request->get('twitter'));
|
||||
$newWebsite = htmlspecialchars($request->get('website'));
|
||||
@@ -179,6 +196,26 @@ class SecurityController extends FOSRestController
|
||||
$talent->setLinkedin($newLinkedin);
|
||||
$talent->setTwitter($newTwitter);
|
||||
$talent->setTitleTalent($titleTalent);
|
||||
$array = Array ();
|
||||
|
||||
// \"$formatted_address
|
||||
if($formatted_address!=""){
|
||||
$array[] = Array (
|
||||
"street_number" => $street_number,
|
||||
"route" => $route,
|
||||
"administrative_area_level_2" => $administrative_area_level_2,
|
||||
"administrative_area_level_1" => $administrative_area_level_1,
|
||||
"country" => $country,
|
||||
"locality" => $locality,
|
||||
"postal_code" => $postal_code,
|
||||
"formatted_address" => $formatted_address,
|
||||
"lat" => stripslashes($lat),
|
||||
"lng" => stripslashes($lng)
|
||||
);
|
||||
|
||||
$usr->setGeoloc($array);
|
||||
}
|
||||
|
||||
$talent->setPhoneTalent($phoneTalent);
|
||||
//$talent->setPhoneTalent($phoneTalent);
|
||||
$billing = array(
|
||||
@@ -193,7 +230,7 @@ class SecurityController extends FOSRestController
|
||||
|
||||
$companyManager->updateTalent($usr);
|
||||
|
||||
$status = array('status' => "success");
|
||||
$status = array('status' => "success!!!!!!!!!!!!!!!!!!");
|
||||
}
|
||||
} else {
|
||||
$status = array('status' => "failure", 'message' => "Vous n'êtes pas connecté.");
|
||||
|
||||
@@ -6,6 +6,7 @@ use AppBundle\Entity\Company;
|
||||
use AppBundle\Entity\User;
|
||||
use AppBundle\Form\AdSearchType;
|
||||
use AppBundle\Form\CompanyProfileType;
|
||||
use AppBundle\Form\ProfileLogoType;
|
||||
use AppBundle\Form\UserType;
|
||||
use AppBundle\Form\UserTypeCreate;
|
||||
use Edeclic\PrestashopBridgeBundle\Event\PrestashopBridgeEvents;
|
||||
@@ -16,6 +17,13 @@ use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
|
||||
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
|
||||
use Symfony\Component\HttpFoundation\JsonResponse;
|
||||
use Symfony\Component\HttpFoundation\Request;
|
||||
use Symfony\Component\HttpFoundation\Session\Session;
|
||||
//MAILJET
|
||||
use AppBundle\Entity\Mailjet;
|
||||
// use AppBundle\Entity\Response;
|
||||
use AppBundle\Entity\Resources;
|
||||
use AppBundle\Entity\Config;
|
||||
use AppBundle\Entity\Client;
|
||||
|
||||
class CompanyController extends Controller
|
||||
{
|
||||
@@ -29,9 +37,27 @@ class CompanyController extends Controller
|
||||
$stats = $this->get("app.stats_manager");
|
||||
$em = $this->getDoctrine()->getManager();
|
||||
$ads = $em->getRepository('AppBundle:Ad')->findBy(array('company' => $this->getUser()->getCompany()));
|
||||
$arrayDate['dateBegin'] = new \DateTime('now -7 Day');
|
||||
$arrayDate['dateEnd'] = new \DateTime('now');
|
||||
$records7days = $stats->getCompanyDashboard($this->getUser()->getCompany()->getId(), $arrayDate);
|
||||
//dump($records7days);
|
||||
$arrayDate['dateBegin'] = new \DateTime('now -30 Day');
|
||||
$records30days = $stats->getCompanyDashboard($this->getUser()->getCompany()->getId(), $arrayDate);
|
||||
//dump($records30days);
|
||||
$records = $stats->getCompanyDashboard($this->getUser()->getCompany()->getId(), null);
|
||||
//dump($records);
|
||||
$answersSended = $em->getRepository('AppBundle:Answer')->getAnswerByCompanyStatus($this->getUser()->getCompany()->getId(), 'SENDED');
|
||||
$answersDraft = $em->getRepository('AppBundle:Answer')->getAnswerByCompanyStatus($this->getUser()->getCompany()->getId(), 'DRAFT');
|
||||
$nbAnswersSended =count($answersSended);
|
||||
$nbAnswersDraft =count($answersDraft);
|
||||
|
||||
return $this->render('company/dashboard.html.twig', [
|
||||
'ads' => $ads,
|
||||
'records7days' => $records7days,
|
||||
'records30days' => $records30days,
|
||||
'records' => $records,
|
||||
'nbAnswersSended' => $nbAnswersSended,
|
||||
'nbAnswersDraft' => $nbAnswersDraft,
|
||||
'arrayByAds' => $records['arrayByAds'],
|
||||
]);
|
||||
}
|
||||
@@ -76,15 +102,37 @@ class CompanyController extends Controller
|
||||
if ($form->isSubmitted() && $form->isValid()) {
|
||||
$companyManager = $this->get('app.company_manager');
|
||||
$companyManager->updateCompany($company);
|
||||
$event = new UserEvent($user);
|
||||
$this->get('event_dispatcher')->dispatch(PrestashopBridgeEvents::USER_PROFIL_EDIT_SUCCESS, $event);
|
||||
//$event = new UserEvent($user);
|
||||
//$this->get('event_dispatcher')->dispatch(PrestashopBridgeEvents::USER_PROFIL_EDIT_SUCCESS, $event);
|
||||
|
||||
$this->addFlash(
|
||||
'notice',
|
||||
$this->get('translator')->trans('company.profile.save.title')
|
||||
);
|
||||
return $this->redirectToRoute('company_dashboard');
|
||||
}
|
||||
|
||||
|
||||
|
||||
$formMedia = $this->createForm(ProfileLogoType::class, $company);
|
||||
$formMedia->handleRequest($request);
|
||||
if ($formMedia->isSubmitted() && $formMedia->isValid()) {
|
||||
$companyManager = $this->get('app.company_manager');
|
||||
$companyManager->updateLogo($company);
|
||||
|
||||
$this->addFlash(
|
||||
'notice',
|
||||
$this->get('translator')->trans('Le logo de votre entreprise a bien été modifié')
|
||||
);
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
return $this->render('company/profile.html.twig', [
|
||||
'company'=>$company,
|
||||
'form' => $form->createView(),
|
||||
'formMedia' => $formMedia->createView(),
|
||||
]);
|
||||
}
|
||||
|
||||
@@ -111,20 +159,20 @@ class CompanyController extends Controller
|
||||
);
|
||||
}
|
||||
|
||||
$formFactory = $this->container->get('fos_user.change_password.form.factory');
|
||||
$formPw = $formFactory->createForm();
|
||||
$formPw->setData($user);
|
||||
$formPw->handleRequest($request);
|
||||
if ($formPw->isSubmitted() && $formPw->isValid()) {
|
||||
$userManager->updateUser($user);
|
||||
$this->addFlash(
|
||||
'notice',
|
||||
$this->get('translator')->trans('company.account.save.title')
|
||||
);
|
||||
}
|
||||
// $formFactory = $this->container->get('fos_user.change_password.form.factory');
|
||||
// $formPw = $formFactory->createForm();
|
||||
// $formPw->setData($user);
|
||||
// $formPw->handleRequest($request);
|
||||
// if ($formPw->isSubmitted() && $formPw->isValid()) {
|
||||
// $userManager->updateUser($user);
|
||||
// $this->addFlash(
|
||||
// 'notice',
|
||||
// $this->get('translator')->trans('company.account.save.title')
|
||||
// );
|
||||
// }
|
||||
return $this->render('company/my_account.html.twig', [
|
||||
'form' => $form->createView(),
|
||||
'formPw' => $formPw->createView(),
|
||||
// 'formPw' => $formPw->createView(),
|
||||
]);
|
||||
}
|
||||
|
||||
@@ -164,6 +212,7 @@ class CompanyController extends Controller
|
||||
$userManager = $this->get('fos_user.user_manager');
|
||||
$form = $this->createForm(UserTypeCreate::class, $user);
|
||||
$form->handleRequest($request);
|
||||
$error="";
|
||||
if ($form->isSubmitted() && $form->isValid()) {
|
||||
|
||||
$user->setFirstname($form["firstname"]->getData());
|
||||
@@ -173,12 +222,119 @@ class CompanyController extends Controller
|
||||
$user->setCompany($company);
|
||||
$user->setEnabled(true);
|
||||
$user->setRoles(array('ROLE_COMPANY'));
|
||||
$em = $this->getDoctrine()->getManager();
|
||||
//TRY catche
|
||||
try {
|
||||
//verifier si un user n'existe pas avec le meme mail
|
||||
|
||||
$verifUser = $em->getRepository('AppBundle:User')->findBy(array('email' => $form["email"]->getData()));
|
||||
if(!$verifUser){
|
||||
$userManager->updateUser($user);
|
||||
//US 422 : Envoi d'email
|
||||
$session = new Session();
|
||||
$session->getFlashBag()->add('popup_answer_already_send', false);
|
||||
// $mailManager = $this->get('app.mail_manager');
|
||||
|
||||
// $mailManager->sendMail(
|
||||
// 'Candidature 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><img alt="" src="" style="border:none;display:block;outline:none;text-decoration:none;width:100%;max-width:600px;height:auto;" width="600" height="auto"></td></tr></tbody></table></td></tr></tbody></table></div><!--[if mso]>
|
||||
// </td></tr></table>
|
||||
// <![endif]--></td></tr></tbody></table></div>
|
||||
|
||||
$userManager->updateUser($user);
|
||||
return $this->redirectToRoute('users');
|
||||
// <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 ,</p>
|
||||
// <p>Le talent a répondu à votre annonce .</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]>
|
||||
// <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="" 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">Découvrir le talent</a></td></tr></tbody></table></td></tr></tbody></table></div><!--[if mso]>
|
||||
// </td></tr></table>
|
||||
// <![endif]--></td></tr></tbody></table></div>',
|
||||
// $user,
|
||||
// 'contact_default'
|
||||
// );
|
||||
$mj = new Client($this->getParameter('mailjet_public'), $this->getParameter('mailjet_private'));
|
||||
|
||||
$contactMail = $user->getEmail();
|
||||
// if ($this->container->get( 'kernel' )->getEnvironment() == "dev") {
|
||||
// $contactMail = "l.laniau@talentstube.com";
|
||||
// }
|
||||
$body = [
|
||||
'FromEmail' => "noreply@talentstube.io",
|
||||
'FromName' => "Talents Tube",
|
||||
'Subject' => "Rejoignez l’espace recruteur ".$company->getBrandName()." sur Talents Tube
|
||||
" ,
|
||||
'MJ-TemplateID' =>2183741 ,
|
||||
'MJ-TemplateLanguage' => true,
|
||||
'Recipients' => [
|
||||
[
|
||||
'Email' => $contactMail,
|
||||
'Vars' => [
|
||||
'entreprise' => $company->getBrandName(),
|
||||
'emailNouvelUtilisateur' => $user->getEmail(),
|
||||
'mdpNouvelUtilisateur' => $form["password"]->getData(),
|
||||
|
||||
]
|
||||
]
|
||||
]
|
||||
];
|
||||
$response = $mj->post(Resources::$Email, ['body' => $body]);
|
||||
$response->success() && var_dump($response->getData());
|
||||
// $message=$company->getBrandName()." vous invite à rejoindre la plateforme de recrutement vidéo Talents Tube.<br/>
|
||||
|
||||
// Votre identifiant : ".$user->getEmail()."<br/>
|
||||
// Votre mot de passe : ".$form["password"]->getData()."<br/>
|
||||
// (Vous pourrez réinitialiser votre mot de passe en cliquant <a href='https://recruteur.talentstube.com/resetting/request' target='_blank'>**ici**</a><br/>
|
||||
// <br/>
|
||||
// <a href='https://recruteur.talentstube.com' target='_blank'>[Rejoindre l'équipe]</a> <br/>";
|
||||
// $plainView = $this->renderView('email/contact_default.html.twig', array(
|
||||
// 'message' => $message,
|
||||
// 'type' => 'html'
|
||||
// ));
|
||||
// //$body ="";
|
||||
// $mj = new Client('355697fac93fca865660734b4fdffaeb', 'ddecf75321ca89c09e561857b13534c8');
|
||||
// $body = [
|
||||
// 'FromEmail' => $this->getParameter('mailer_user'),
|
||||
// 'FromName' => "Talents Tube",
|
||||
// 'Subject' => "Rejoignez l'équipe ".$company->getBrandName()." sur Talents Tube.",
|
||||
// //'Text-part' => "Dear passenger, welcome to Mailjet! May the delivery force be with you!",
|
||||
// 'Html-part' => $plainView,
|
||||
// 'Recipients' => [
|
||||
// ['Email' => $user->getEmail()]
|
||||
// ]
|
||||
// ];
|
||||
// $response = $mj->post(Resources::$Email, ['body' => $body]);
|
||||
// $response->success() && var_dump($response->getData());
|
||||
|
||||
// $email = \Swift_Message::newInstance()
|
||||
// ->setSubject("Rejoignez l'équipe ".$company->getBrandName()." sur Talents Tube." )
|
||||
// ->setFrom($this->getParameter('mailer_user'))
|
||||
// ->setReplyTo($this->getParameter('mailer_user'))
|
||||
// ->setTo($user->getEmail())
|
||||
// ->setBody($plainView, 'text/html')
|
||||
// // ->addPart($plainView, 'text/plain')
|
||||
// ;
|
||||
// $retour = $this->get('mailer')->send($email);
|
||||
//var_dump($mailManager);
|
||||
return $this->redirectToRoute('users');
|
||||
}else{
|
||||
|
||||
$error = "Un utilisateur existe déjà avec ce mail";
|
||||
}
|
||||
|
||||
} catch (PDOException $pdoE) {
|
||||
|
||||
throw new PDOException("factoryCamps::update: ".$pdoE -> getMessage());
|
||||
}
|
||||
}
|
||||
return $this->render('company/user_create.html.twig', array(
|
||||
'form' => $form->createView(),
|
||||
'error' => $error
|
||||
));
|
||||
}
|
||||
|
||||
@@ -308,4 +464,4 @@ class CompanyController extends Controller
|
||||
'companyAds' => $companyAds,
|
||||
]);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -6,9 +6,16 @@ use Symfony\Bundle\FrameworkBundle\Controller\Controller;
|
||||
use Symfony\Component\HttpFoundation\Request;
|
||||
use Symfony\Component\Security\Core\Exception\AuthenticationException;
|
||||
use Symfony\Component\Security\Core\Security;
|
||||
use AppBundle\Entity\Mailjet;
|
||||
use AppBundle\Entity\Response;
|
||||
use AppBundle\Entity\Resources;
|
||||
use AppBundle\Entity\Config;
|
||||
use AppBundle\Entity\Client;
|
||||
use Symfony\Component\HttpFoundation\Session\SessionInterface;
|
||||
|
||||
class DefaultController extends Controller
|
||||
{
|
||||
|
||||
/**
|
||||
* @Route("/indexV1", name="homepageV1")
|
||||
*/
|
||||
@@ -51,7 +58,8 @@ class DefaultController extends Controller
|
||||
}
|
||||
|
||||
$form = $this->createForm(AdSearchType::class);
|
||||
|
||||
|
||||
|
||||
return $this->render(
|
||||
'default/index.html.twig', [
|
||||
'ads' => $ads,
|
||||
@@ -68,7 +76,34 @@ class DefaultController extends Controller
|
||||
*/
|
||||
public function homepagev2Action(Request $request)
|
||||
{
|
||||
//$em = $this->getDoctrine()->getManager();
|
||||
//US-468
|
||||
$session = $request->getSession();
|
||||
$arrayDate['dateBegin'] = new \DateTime('now -1 Month');
|
||||
$arrayDate['dateEnd'] = new \DateTime('now');
|
||||
setlocale(LC_ALL, 'fr_FR.utf-8');
|
||||
$stats = $this->get("app.stats_manager");
|
||||
// $records = $stats->getCompanyDashboard(21247, $arrayDate);
|
||||
// dump($records);
|
||||
//US444
|
||||
// $mj = new Client('805b8adce80bc6aa9422ddff20bb4171', 'f3bce955f21bc9456d65245c50e8c512');
|
||||
// $body = [
|
||||
// 'FromEmail' => "l.laniau@talentstube.com",
|
||||
// 'FromName' => "Mailjet Pilot",
|
||||
// 'Subject' => "Your email flight plan!",
|
||||
// 'MJ-TemplateID' =>2087555 ,
|
||||
// 'MJ-TemplateLanguage' => true,
|
||||
// 'Recipients' => [
|
||||
// ['Email' => "l.laniau@talentstube.com", 'Vars' => ['lien' => 'www.talentstube.com']]
|
||||
// ]
|
||||
// ];
|
||||
// $response = $mj->post(Resources::$Email, ['body' => $body]);
|
||||
// $response->success() && var_dump($response->getData());
|
||||
// dump($response);
|
||||
//FIN US444
|
||||
|
||||
|
||||
|
||||
//$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'));
|
||||
@@ -103,19 +138,48 @@ class DefaultController extends Controller
|
||||
// foreach ($territories as $t) {
|
||||
// $mediaManager->getThumbnails($t);
|
||||
// }
|
||||
|
||||
//dump($this->container->get( 'kernel' )->getEnvironment());
|
||||
// $form = $this->createForm(AdSearchType::class);
|
||||
$params = $this->getParams($request);
|
||||
$usename = $params["lastUsername"];
|
||||
$csrfToken = $params["csrfToken"];
|
||||
$error = $params["error"];
|
||||
$destination_login = "admin/dashboard";
|
||||
$erreur = false;
|
||||
if($request->query->get('erreur')){
|
||||
$erreur = $request->query->get('erreur');
|
||||
}
|
||||
//$mj = new \Mailjet\Client('805b8adce80bc6aa9422ddff20bb4171', 'f3bce955f21bc9456d65245c50e8c512');
|
||||
//dump($mj);
|
||||
//var_dump($mailManager);
|
||||
return $this->render(
|
||||
'defaultv2/accueil/index.html.twig', [
|
||||
'last_username' => $usename,
|
||||
'csrf_token' => $csrfToken,
|
||||
'error' => $error,
|
||||
'destination_login' => $destination_login
|
||||
'destination_login' => $destination_login,
|
||||
'erreur' => $erreur
|
||||
//'ads' => $ads,
|
||||
//'companies' => $arrayCompany,
|
||||
//'talents' => $arrayTalents,
|
||||
//'territories' => $territories,
|
||||
//'searchform' => $form->createView(),
|
||||
]
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @Route("/autocomplete", name="autocomplete")
|
||||
*/
|
||||
public function autocompleteAction(Request $request)
|
||||
{
|
||||
|
||||
|
||||
|
||||
//var_dump($mailManager);
|
||||
return $this->render(
|
||||
'defaultv2/accueil/autocomplete.html.twig', [
|
||||
|
||||
//'ads' => $ads,
|
||||
//'companies' => $arrayCompany,
|
||||
//'talents' => $arrayTalents,
|
||||
@@ -307,17 +371,18 @@ class DefaultController extends Controller
|
||||
|
||||
return $this->redirectToRoute('admin_dashboard');
|
||||
} elseif ($user->hasRole('ROLE_TALENT')) {
|
||||
|
||||
return $this->redirectToRoute('talent_dashboard');
|
||||
return $this->redirect('https://www.talentstube.com');
|
||||
//return $this->redirectToRoute('talent_dashboard');
|
||||
} elseif ($user->hasRole('ROLE_COMPANY')) {
|
||||
|
||||
return $this->redirectToRoute('company_dashboard');
|
||||
// return $this->redirectToRoute('company_profile');
|
||||
}
|
||||
} else {
|
||||
|
||||
return $this->redirectToRoute('homepage');
|
||||
return $this->redirectToRoute('/homepage');
|
||||
}
|
||||
return $this->redirectToRoute('homepage');
|
||||
return $this->redirectToRoute('/homepage');
|
||||
|
||||
}
|
||||
|
||||
@@ -336,6 +401,31 @@ class DefaultController extends Controller
|
||||
//return $this->render('page_static/video_territoire.html.twig');
|
||||
return $this->render('page_static/accompagnement_video_territoire.html.twig');
|
||||
}
|
||||
|
||||
/**
|
||||
* @Route("/offre-emploi-originale", name="offre_emploi_originale")
|
||||
*/
|
||||
public function landingAction()
|
||||
{
|
||||
$previous="";
|
||||
if(isset($_SERVER['HTTP_REFERER'])) {
|
||||
$previous = $_SERVER['HTTP_REFERER']." / ".$_SERVER['REQUEST_URI'];
|
||||
}
|
||||
//return $this->render('page_static/marque_employeur.html.twig');
|
||||
//return $this->render('page_static/offre_emploi.html.twig');
|
||||
//return $this->render('page_static/accompagnement_video_company.html.twig');
|
||||
//return $this->render('page_static/reussir_video_company.html.twig');
|
||||
//return $this->render('page_static/accompagnement_video_talent.html.twig');
|
||||
//return $this->render('page_static/cvvideo.html.twig');
|
||||
//return $this->render('page_static/reussir_video_talent.html.twig');
|
||||
//return $this->render('page_static/video_territoire.html.twig');
|
||||
return $this->render('landing/offreEmploiOriginal.html.twig', [
|
||||
'previous' => $previous,
|
||||
|
||||
]);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @param Request $request
|
||||
*
|
||||
|
||||
@@ -14,20 +14,29 @@ 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\Form\Extension\Core\Type\FileType;
|
||||
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;
|
||||
use Symfony\Component\Validator\Constraints\File;
|
||||
//MAILJET
|
||||
use AppBundle\Entity\Mailjet;
|
||||
// use AppBundle\Entity\Response;
|
||||
use AppBundle\Entity\Resources;
|
||||
use AppBundle\Entity\Config;
|
||||
use AppBundle\Entity\Client;
|
||||
|
||||
class MediaController extends Controller
|
||||
{
|
||||
/**
|
||||
* @Route("/entreprise/me/videotheque", name="company_media")
|
||||
* @Route("/entreprise/me/videotheque", name="company_marque")
|
||||
*/
|
||||
public function companyMediaAction(Request $request)
|
||||
{
|
||||
$event = new UserEvent($this->getUser());
|
||||
$company = $this->getUser()->getCompany();
|
||||
$this->get('event_dispatcher')->dispatch(PrestashopBridgeEvents::USER_PROD_UPDATE, $event);
|
||||
$em = $this->getDoctrine()->getManager();
|
||||
$medias = $em->getRepository('AppBundle:Media')->findBy(array('creator' => $this->getUser()));
|
||||
@@ -40,35 +49,9 @@ class MediaController extends Controller
|
||||
$media->setTitle($title);
|
||||
$em->persist($media);
|
||||
$em->flush();
|
||||
|
||||
return $this->redirectToRoute('company_media');
|
||||
}
|
||||
|
||||
return $this->render('media/media_list.html.twig', array(
|
||||
'form' => $form->createView(),
|
||||
'medias' => $medias,
|
||||
));
|
||||
}
|
||||
|
||||
/**
|
||||
* @Route("/entreprise/me/video-marque-employeur", name="company_marque")
|
||||
*/
|
||||
public function companyMarqueAction(Request $request)
|
||||
{
|
||||
$event = new UserEvent($this->getUser());
|
||||
$this->get('event_dispatcher')->dispatch(PrestashopBridgeEvents::USER_PROD_UPDATE, $event);
|
||||
$em = $this->getDoctrine()->getManager();
|
||||
$medias = $em->getRepository('AppBundle:Media')->findBy(array('creator' => $this->getUser()));
|
||||
$form = $this->createForm(MediaType::class);
|
||||
$form->handleRequest($request);
|
||||
if ($form->isSubmitted() && $form->isValid()) {
|
||||
$title = $form['title']->getData();
|
||||
$idMedia = $form['media']->getData();
|
||||
$media = $em->getRepository('AppBundle:Media')->findOneBy(array('id' => $idMedia, 'creator' => $this->getUser()));
|
||||
$media->setTitle($title);
|
||||
$em->persist($media);
|
||||
$company->setPresentationVideo($media);
|
||||
$em->persist($company);
|
||||
$em->flush();
|
||||
|
||||
return $this->redirectToRoute('company_marque');
|
||||
}
|
||||
|
||||
@@ -130,10 +113,18 @@ class MediaController extends Controller
|
||||
'medias' => $medias,
|
||||
]);
|
||||
}
|
||||
public function convertKekab($string){
|
||||
$search = array('À', 'Á', 'Â', 'Ã', 'Ä', 'Å', 'Ç', 'È', 'É', 'Ê', 'Ë', 'Ì', 'Í', 'Î', 'Ï', 'Ò', 'Ó', 'Ô', 'Õ', 'Ö', 'Ù', 'Ú', 'Û', 'Ü', 'Ý', 'à', 'á', 'â', 'ã', 'ä', 'å', 'ç', 'è', 'é', 'ê', 'ë', 'ì', 'í', 'î', 'ï', 'ð', 'ò', 'ó', 'ô', 'õ', 'ö', 'ù', 'ú', 'û', 'ü', 'ý', 'ÿ', "/");
|
||||
//Préférez str_replace à strtr car strtr travaille directement sur les octets, ce qui pose problème en UTF-8
|
||||
$replace = array('A', 'A', 'A', 'A', 'A', 'A', 'C', 'E', 'E', 'E', 'E', 'I', 'I', 'I', 'I', 'O', 'O', 'O', 'O', 'O', 'U', 'U', 'U', 'U', 'Y', 'a', 'a', 'a', 'a', 'a', 'a', 'c', 'e', 'e', 'e', 'e', 'i', 'i', 'i', 'i', 'o', 'o', 'o', 'o', 'o', 'o', 'u', 'u', 'u', 'u', 'y', 'y', "s");
|
||||
|
||||
$string = str_replace($search, $replace, $string);
|
||||
$string = strtolower (str_replace(" ", "-", $string));
|
||||
return $string;
|
||||
}
|
||||
/**
|
||||
* @Route("/media/create/{id}", name="create_media")
|
||||
* @Security("ad.getStatus() == 'DRAFT' or ad.getStatus() == 'TO_PUBLISH' or ad.getStatus() == 'DECLINED'")
|
||||
* @Security("ad.getStatus() == 'DRAFT' or ad.getStatus() == 'DECLINED' or ad.getStatus() == 'TO_PUBLISH'")
|
||||
*/
|
||||
public function createMediaAction(Request $request, Ad $ad)
|
||||
{
|
||||
@@ -143,6 +134,7 @@ class MediaController extends Controller
|
||||
if ($ad) {
|
||||
$video = $ad->getVideo();
|
||||
}
|
||||
$message="";
|
||||
// Get Avalaible videos
|
||||
$em = $this->getDoctrine()->getManager();
|
||||
$videos = $em->getRepository('AppBundle:Media')->findBy(array('creator' => $this->getUser()));
|
||||
@@ -150,9 +142,6 @@ class MediaController extends Controller
|
||||
->add('title', TextType::class, array(
|
||||
'label' => 'Titre de la vidéo',
|
||||
'required' => true,
|
||||
'attr' => array(
|
||||
'class' => 'form-control'
|
||||
)
|
||||
))
|
||||
->getForm();
|
||||
$form->handleRequest($request);
|
||||
@@ -170,14 +159,184 @@ class MediaController extends Controller
|
||||
$ad->setUnpublishedAt($unpublishedDate);
|
||||
$em->persist($ad);
|
||||
$em->flush();
|
||||
//return $this->redirectToRoute('company_ad_step3', array('id' => $ad->getId()));
|
||||
}
|
||||
|
||||
|
||||
$formFile = $this->createFormBuilder($video)
|
||||
->add('file1', FileType::class, [
|
||||
|
||||
'label' => false,
|
||||
// unmapped means that this field is not associated to any entity property
|
||||
'mapped' => false,
|
||||
|
||||
// make it optional so you don't have to re-upload the PDF file
|
||||
// every time you edit the Product details
|
||||
'required' => false,
|
||||
|
||||
// unmapped fields can't define their validation using annotations
|
||||
// in the associated entity, so you can use the PHP constraint classes
|
||||
'constraints' => [
|
||||
new File([
|
||||
'maxSize' => '512000k',
|
||||
'mimeTypes' => [
|
||||
'video/*',
|
||||
],
|
||||
'mimeTypesMessage' => 'Votre fichier doit être un fichier vidéo',
|
||||
])
|
||||
],
|
||||
])
|
||||
->add('file2', FileType::class, [
|
||||
'label' => false,
|
||||
|
||||
// unmapped means that this field is not associated to any entity property
|
||||
'mapped' => false,
|
||||
|
||||
// make it optional so you don't have to re-upload the PDF file
|
||||
// every time you edit the Product details
|
||||
'required' => false,
|
||||
|
||||
// unmapped fields can't define their validation using annotations
|
||||
// in the associated entity, so you can use the PHP constraint classes
|
||||
'constraints' => [
|
||||
new File([
|
||||
'maxSize' => '512000k',
|
||||
'mimeTypes' => [
|
||||
'video/*',
|
||||
],
|
||||
'mimeTypesMessage' => 'Votre fichier doit être un fichier vidéo',
|
||||
])
|
||||
],
|
||||
])
|
||||
->add('file3', FileType::class, [
|
||||
'label' => false,
|
||||
|
||||
// unmapped means that this field is not associated to any entity property
|
||||
'mapped' => false,
|
||||
|
||||
// make it optional so you don't have to re-upload the PDF file
|
||||
// every time you edit the Product details
|
||||
'required' => false,
|
||||
|
||||
// unmapped fields can't define their validation using annotations
|
||||
// in the associated entity, so you can use the PHP constraint classes
|
||||
'constraints' => [
|
||||
new File([
|
||||
'maxSize' => '512000k',
|
||||
'mimeTypes' => [
|
||||
'video/*',
|
||||
],
|
||||
'mimeTypesMessage' => 'Votre fichier doit être un fichier vidéo',
|
||||
])
|
||||
],
|
||||
])
|
||||
->getForm();
|
||||
|
||||
$formFile->handleRequest($request);
|
||||
if ($formFile->isSubmitted() && $formFile->isValid()) {
|
||||
|
||||
$file1 = $formFile->get('file1')->getData();
|
||||
$file2 = $formFile->get('file2')->getData();
|
||||
$file3 = $formFile->get('file3')->getData();
|
||||
$newFilenameWithoutExt="fichier";
|
||||
if($ad->getTitle()){
|
||||
$newFilenameWithoutExt= $this->convertKekab($ad->getTitle()." ".$ad->getId()." ");
|
||||
}
|
||||
if ($file1) {
|
||||
$originalFilename = pathinfo($file1->getClientOriginalName(), PATHINFO_FILENAME);
|
||||
// this is needed to safely include the file name as part of the URL
|
||||
|
||||
|
||||
$newFilename1 = "1-".$newFilenameWithoutExt.uniqid().'.'.$file1->guessExtension();
|
||||
|
||||
// Move the file to the directory where brochures are stored
|
||||
try {
|
||||
$file1->move(
|
||||
$this->get('kernel')->getProjectDir()."/web/uploads/videos/montage",
|
||||
$newFilename1
|
||||
);
|
||||
} catch (FileException $e) {
|
||||
// ... handle exception if something happens during file upload
|
||||
}
|
||||
|
||||
// updates the 'brochureFilename' property to store the PDF file name
|
||||
// instead of its contents
|
||||
// $product->setBrochureFilename($newFilename);
|
||||
}
|
||||
if ($file2) {
|
||||
$originalFilename = pathinfo($file2->getClientOriginalName(), PATHINFO_FILENAME);
|
||||
// this is needed to safely include the file name as part of the URL
|
||||
|
||||
$newFilename2 = "2-".$newFilenameWithoutExt.uniqid().'.'.$file2->guessExtension();
|
||||
|
||||
// Move the file to the directory where brochures are stored
|
||||
try {
|
||||
$file2->move(
|
||||
$this->get('kernel')->getProjectDir()."/web/uploads/videos/montage",
|
||||
$newFilename2
|
||||
);
|
||||
} catch (FileException $e) {
|
||||
// ... handle exception if something happens during file upload
|
||||
}
|
||||
|
||||
// updates the 'brochureFilename' property to store the PDF file name
|
||||
// instead of its contents
|
||||
// $product->setBrochureFilename($newFilename);
|
||||
}
|
||||
if ($file3) {
|
||||
$originalFilename = pathinfo($file3->getClientOriginalName(), PATHINFO_FILENAME);
|
||||
// this is needed to safely include the file name as part of the URL
|
||||
|
||||
$newFilename3 = "3-".$newFilenameWithoutExt.uniqid().'.'.$file3->guessExtension();
|
||||
|
||||
// Move the file to the directory where brochures are stored
|
||||
try {
|
||||
$file3->move(
|
||||
$this->get('kernel')->getProjectDir()."/web/uploads/videos/montage",
|
||||
$newFilename3
|
||||
);
|
||||
} catch (FileException $e) {
|
||||
// ... handle exception if something happens during file upload
|
||||
}
|
||||
|
||||
// updates the 'brochureFilename' property to store the PDF file name
|
||||
// instead of its contents
|
||||
// $product->setBrochureFilename($newFilename);
|
||||
}
|
||||
$mj = new Client($this->getParameter('mailjet_public'), $this->getParameter('mailjet_private'));
|
||||
// $link = $this->generateUrl('company_answer_show', array('id' => $answer->getId()), UrlGeneratorInterface::ABSOLUTE_URL);
|
||||
|
||||
|
||||
$body = [
|
||||
'FromEmail' => "noreply@talentstube.io",
|
||||
'FromName' => "Talents Tube",
|
||||
'Subject' => $ad->getCompany()->getBrandName()." : Nouvelles vidéos Whaouuuuu!!!",
|
||||
'MJ-TemplateID' =>2210612 ,
|
||||
'MJ-TemplateLanguage' => true,
|
||||
'Recipients' => [
|
||||
[
|
||||
'Email' => 'dev@talentstube.com',
|
||||
'Vars' => [
|
||||
'adressEmailRecruteur' => "",
|
||||
'nomEntreprise' => $ad->getCompany()->getBrandName(),
|
||||
'videoOffre1' => "https://recruteur.talentstube.com/uploads/videos/montage/".$newFilename1,
|
||||
'videoOffre2' => "https://recruteur.talentstube.com/uploads/videos/montage/".$newFilename2,
|
||||
'videoOffre3' => "https://recruteur.talentstube.com/uploads/videos/montage/".$newFilename3,
|
||||
]
|
||||
]
|
||||
]
|
||||
];
|
||||
$response = $mj->post(Resources::$Email, ['body' => $body]);
|
||||
$response->success() && var_dump($response->getData());
|
||||
$message="Talents Tube a bien reçu vos séquences vidéo. Nous vous recontacterons par email pour finaliser la publication de votre annonce.";
|
||||
}
|
||||
|
||||
return $this->render('company/createMedia.html.twig', array(
|
||||
'form' => $form->createView(),
|
||||
'formFile' => $formFile->createView(),
|
||||
'ad' => $ad,
|
||||
'video' => $video,
|
||||
'videos' => $videos,
|
||||
'message' => $message,
|
||||
));
|
||||
}
|
||||
|
||||
@@ -210,13 +369,7 @@ class MediaController extends Controller
|
||||
$mediaManager = $this->get('media_manager');
|
||||
$message = $mediaManager->upload($ad, $uploadedFile, $ad->getCreator());
|
||||
}
|
||||
$em = $this->getDoctrine()->getManager();
|
||||
$ad->setIsVerified(true);
|
||||
$ad->setPrivate(false);
|
||||
$ad->setPromoted(true);
|
||||
$em->persist($ad);
|
||||
dump($ad);
|
||||
$em->flush();
|
||||
|
||||
return new JsonResponse($message);
|
||||
}
|
||||
|
||||
@@ -321,7 +474,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->setPresentationVideo($video);
|
||||
}
|
||||
}
|
||||
@@ -379,10 +532,10 @@ class MediaController extends Controller
|
||||
'notice',
|
||||
$this->get('translator')->trans('Le logo de votre entreprise a bien été modifié')
|
||||
);
|
||||
return $this->redirect($this->generateUrl('company_dashboard'));
|
||||
return $this->redirect($this->generateUrl('company_profile'));
|
||||
}
|
||||
return $this->render('profile/form_logo.html.twig', [
|
||||
'form' => $form->createView(),
|
||||
'formLogo' => $form->createView(),
|
||||
]);
|
||||
}
|
||||
|
||||
@@ -417,4 +570,4 @@ class MediaController extends Controller
|
||||
return $res;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
@@ -85,6 +85,7 @@ class Ad
|
||||
*/
|
||||
private $title;
|
||||
|
||||
|
||||
/**
|
||||
* @var string
|
||||
*
|
||||
@@ -101,6 +102,15 @@ class Ad
|
||||
*/
|
||||
private $description;
|
||||
|
||||
/**
|
||||
* @var string
|
||||
*
|
||||
* @ORM\Column(name="code", type="text", nullable=true)
|
||||
*
|
||||
* @Groups({"ad_detail", "answer_detail"})
|
||||
*/
|
||||
private $code;
|
||||
|
||||
/**
|
||||
* @var string
|
||||
*
|
||||
@@ -110,6 +120,38 @@ class Ad
|
||||
*/
|
||||
private $beneficiaire;
|
||||
|
||||
/**
|
||||
* @var int
|
||||
*
|
||||
* @ORM\Column(name="appellationId", type="integer", nullable=true)
|
||||
*
|
||||
*/
|
||||
private $appellationId;
|
||||
|
||||
/**
|
||||
* @var string
|
||||
*
|
||||
* @ORM\Column(name="appellationLibelle", type="text", nullable=true)
|
||||
*
|
||||
*/
|
||||
private $appellationLibelle;
|
||||
|
||||
/**
|
||||
* @var string
|
||||
*
|
||||
* @ORM\Column(name="codeRome", type="text", nullable=true)
|
||||
*
|
||||
*/
|
||||
private $codeRome;
|
||||
|
||||
/**
|
||||
* @var array
|
||||
*
|
||||
* @ORM\Column(name="competences", type="json_document", nullable=true, options={"jsonb":true})
|
||||
* @Groups({"ad_detail", "ad_list", "answer_detail", "company_detail"})
|
||||
*/
|
||||
private $competences;
|
||||
|
||||
/**
|
||||
* @var \DateTime
|
||||
*
|
||||
@@ -117,12 +159,14 @@ class Ad
|
||||
* @Groups({"ad_detail", "answer_detail"})
|
||||
* @Assert\GreaterThanOrEqual("today", groups={"dates"})
|
||||
*/
|
||||
|
||||
private $publishedAt;
|
||||
|
||||
/**
|
||||
* @var \DateTime
|
||||
*
|
||||
* @ORM\Column(name="unpublished_at", type="datetime", nullable=true)
|
||||
* @Groups({"ad_detail", "answer_detail"})
|
||||
*/
|
||||
private $unpublishedAt;
|
||||
|
||||
@@ -375,6 +419,79 @@ class Ad
|
||||
return $contract_type;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return array|null
|
||||
*
|
||||
* Search duree_contrat in the extra field
|
||||
*/
|
||||
public function getDureeContrat()
|
||||
{
|
||||
$duree_contrat = null;
|
||||
$extra = $this->extra;
|
||||
if ($extra) {
|
||||
if (array_key_exists('duree_contrat', $extra)) {
|
||||
$duree_contrat = $extra['duree_contrat'];
|
||||
}
|
||||
}
|
||||
|
||||
return $duree_contrat;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return array|null
|
||||
*
|
||||
* Search nombre_heure in the extra field
|
||||
*/
|
||||
public function getNombreHeure()
|
||||
{
|
||||
$nombre_heure = null;
|
||||
$extra = $this->extra;
|
||||
if ($extra) {
|
||||
if (array_key_exists('nombre_heure', $extra)) {
|
||||
$nombre_heure = $extra['nombre_heure'];
|
||||
}
|
||||
}
|
||||
|
||||
return $nombre_heure;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @return array|null
|
||||
*
|
||||
* Search temps type in the extra field
|
||||
*/
|
||||
public function getTempsType()
|
||||
{
|
||||
$temps_type = null;
|
||||
$extra = $this->extra;
|
||||
if ($extra) {
|
||||
if (array_key_exists('temps_type', $extra)) {
|
||||
$temps_type = $extra['temps_type'];
|
||||
}
|
||||
}
|
||||
|
||||
return $temps_type;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return array|null
|
||||
* US 295 : mise en place du champ télétravail
|
||||
* Search teletravail in the extra field
|
||||
*/
|
||||
public function getTeletravail()
|
||||
{
|
||||
$teletravail = null;
|
||||
$extra = $this->extra;
|
||||
if ($extra) {
|
||||
if (array_key_exists('teletravail', $extra)) {
|
||||
$teletravail = $extra['teletravail'];
|
||||
}
|
||||
}
|
||||
|
||||
return $teletravail;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return array|null
|
||||
*
|
||||
@@ -598,6 +715,10 @@ class Ad
|
||||
return $this->title;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* Set description.
|
||||
*
|
||||
@@ -622,6 +743,42 @@ class Ad
|
||||
return $this->description;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set code.
|
||||
*
|
||||
* @param string|null $code
|
||||
*
|
||||
* @return Ad
|
||||
*/
|
||||
public function setCode($code = null)
|
||||
{
|
||||
$this->code = $code;
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get code.
|
||||
*
|
||||
* @return string|null
|
||||
*/
|
||||
public function getCode()
|
||||
{
|
||||
return $this->code;
|
||||
}
|
||||
|
||||
/**
|
||||
* Generate code.
|
||||
*
|
||||
* @return Ad
|
||||
*/
|
||||
public function generateCode()
|
||||
{
|
||||
$six_digit_random_number = mt_rand(100000, 999999);
|
||||
$this->setCode($six_digit_random_number);
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set beneficiaire.
|
||||
*
|
||||
@@ -646,6 +803,78 @@ class Ad
|
||||
return $this->beneficiaire;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Set appellationId.
|
||||
*
|
||||
* @param int|null $appellationId
|
||||
*
|
||||
* @return Ad
|
||||
*/
|
||||
public function setAppellationId($appellationId = null)
|
||||
{
|
||||
$this->appellationId = $appellationId;
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get appellationId.
|
||||
*
|
||||
* @return int|null
|
||||
*/
|
||||
public function getAppellationId()
|
||||
{
|
||||
return $this->appellationId;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set appellationLibelle.
|
||||
*
|
||||
* @param string|null $appellationLibelle
|
||||
*
|
||||
* @return Ad
|
||||
*/
|
||||
public function setAppellationLibelle($appellationLibelle = null)
|
||||
{
|
||||
$this->appellationLibelle = $appellationLibelle;
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get appellationLibelle.
|
||||
*
|
||||
* @return string|null
|
||||
*/
|
||||
public function getAppellationLibelle()
|
||||
{
|
||||
return $this->appellationLibelle;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set codeRome.
|
||||
*
|
||||
* @param string|null $codeRome
|
||||
*
|
||||
* @return Ad
|
||||
*/
|
||||
public function setCodeRome($codeRome = null)
|
||||
{
|
||||
$this->codeRome = $codeRome;
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get codeRome.
|
||||
*
|
||||
* @return string|null
|
||||
*/
|
||||
public function getCodeRome()
|
||||
{
|
||||
return $this->codeRome;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set publishedAt.
|
||||
*
|
||||
@@ -838,6 +1067,31 @@ class Ad
|
||||
return $this->extra;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Set competences.
|
||||
*
|
||||
* @param json_document|null $competences
|
||||
*
|
||||
* @return Ad
|
||||
*/
|
||||
public function setCompetences($competences = null)
|
||||
{
|
||||
$this->competences = $competences;
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get competences.
|
||||
*
|
||||
* @return json_document|null
|
||||
*/
|
||||
public function getCompetences()
|
||||
{
|
||||
return $this->competences;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set location.
|
||||
*
|
||||
|
||||
@@ -90,6 +90,13 @@ class Answer
|
||||
*/
|
||||
private $video;
|
||||
|
||||
/**
|
||||
* @var boolean
|
||||
*
|
||||
* @ORM\Column(name="is_shared", type="boolean", nullable=true)
|
||||
*/
|
||||
private $isShared;
|
||||
|
||||
/**
|
||||
* @var int
|
||||
*
|
||||
@@ -98,6 +105,14 @@ class Answer
|
||||
*/
|
||||
private $vote;
|
||||
|
||||
/**
|
||||
* @var string
|
||||
*
|
||||
* @ORM\Column(name="status_reponse", type="string", length=255, nullable=true)
|
||||
*
|
||||
*/
|
||||
private $statusReponse;
|
||||
|
||||
/**
|
||||
* @var string
|
||||
*
|
||||
@@ -204,6 +219,29 @@ class Answer
|
||||
{
|
||||
return $this->id;
|
||||
}
|
||||
/**
|
||||
* Set isShared.
|
||||
*
|
||||
* @param bool|null $isShared
|
||||
*
|
||||
* @return Answer
|
||||
*/
|
||||
public function setIsShared($isShared = null)
|
||||
{
|
||||
$this->isShared = $isShared;
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get isShared.
|
||||
*
|
||||
* @return bool|null
|
||||
*/
|
||||
public function getIsShared()
|
||||
{
|
||||
return $this->isShared;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set vote.
|
||||
@@ -229,6 +267,54 @@ class Answer
|
||||
return $this->vote;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set status.
|
||||
*
|
||||
* @param int|null $status
|
||||
*
|
||||
* @return Answer
|
||||
*/
|
||||
public function setStatus($status = null)
|
||||
{
|
||||
$this->status = $status;
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get status.
|
||||
*
|
||||
* @return int|null
|
||||
*/
|
||||
public function getStatus()
|
||||
{
|
||||
return $this->status;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set statusReponse.
|
||||
*
|
||||
* @param string|null $statusReponse
|
||||
*
|
||||
* @return Answer
|
||||
*/
|
||||
public function setStatusReponse($statusReponse = null)
|
||||
{
|
||||
$this->statusReponse = $statusReponse;
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get status.
|
||||
*
|
||||
* @return string|null
|
||||
*/
|
||||
public function getStatusReponse()
|
||||
{
|
||||
return $this->statusReponse;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set ad.
|
||||
*
|
||||
|
||||
@@ -0,0 +1,425 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
/*
|
||||
* Copyright (C) 2013 Mailgun
|
||||
*
|
||||
* This software may be modified and distributed under the terms
|
||||
* of the MIT license. See the LICENSE file for details.
|
||||
*/
|
||||
|
||||
namespace AppBundle\Entity;
|
||||
|
||||
class Client
|
||||
{
|
||||
const WRAPPER_VERSION = Config::WRAPPER_VERSION;
|
||||
|
||||
/**
|
||||
* connect_timeout: (float, default=2) Float describing the number of
|
||||
* seconds to wait while trying to connect to a server. Use 0 to wait
|
||||
* indefinitely (the default behavior).
|
||||
*/
|
||||
const CONNECT_TIMEOUT = 'connect_timeout';
|
||||
|
||||
/**
|
||||
* timeout: (float, default=15) Float describing the timeout of the
|
||||
* request in seconds. Use 0 to wait indefinitely (the default behavior).
|
||||
*/
|
||||
const TIMEOUT = 'timeout';
|
||||
|
||||
/**
|
||||
* proxy: (array, default=none) Array describing the proxy options used by guzzle client
|
||||
* See guzzle-http for specification.
|
||||
*/
|
||||
const PROXY = 'proxy';
|
||||
|
||||
private $apikey;
|
||||
private $apisecret;
|
||||
private $apitoken;
|
||||
private $version = Config::MAIN_VERSION;
|
||||
private $url = Config::MAIN_URL;
|
||||
private $secure = Config::SECURED;
|
||||
private $call = true;
|
||||
private $settings = [];
|
||||
private $changed = false;
|
||||
private $requestOptions = [
|
||||
self::TIMEOUT => 15,
|
||||
self::CONNECT_TIMEOUT => 2,
|
||||
];
|
||||
private $smsResources = [
|
||||
'send',
|
||||
'sms',
|
||||
'sms-send',
|
||||
];
|
||||
private $dataAction = [
|
||||
'csverror/text:csv',
|
||||
'csvdata/text:plain',
|
||||
'JSONError/application:json/LAST',
|
||||
];
|
||||
|
||||
/**
|
||||
* Client constructor requires:.
|
||||
*
|
||||
* @param string $key Mailjet API Key
|
||||
* @param string|null $secret Mailjet API Secret
|
||||
* @param bool $call performs the call or not
|
||||
* @param array $settings
|
||||
*/
|
||||
public function __construct(string $key, string $secret = null, bool $call = true, array $settings = [])
|
||||
{
|
||||
$this->setAuthentication($key, $secret, $call, $settings);
|
||||
}
|
||||
|
||||
/**
|
||||
* Trigger a POST request.
|
||||
*
|
||||
* @param array $resource Mailjet Resource/Action pair
|
||||
* @param array $args Request arguments
|
||||
* @param array $options
|
||||
* @return Response
|
||||
*/
|
||||
public function post(array $resource, array $args = [], array $options = []): Response
|
||||
{
|
||||
if (!empty($options)) {
|
||||
$this->setOptions($options, $resource);
|
||||
}
|
||||
|
||||
$result = $this->_call('POST', $resource[0], $resource[1], $args);
|
||||
|
||||
if (!empty($this->changed)) {
|
||||
$this->setSettings();
|
||||
}
|
||||
|
||||
return $result;
|
||||
}
|
||||
|
||||
/**
|
||||
* Trigger a GET request.
|
||||
*
|
||||
* @param array $resource Mailjet Resource/Action pair
|
||||
* @param array $args Request arguments
|
||||
* @param array $options
|
||||
* @return Response
|
||||
*/
|
||||
public function get(array $resource, array $args = [], array $options = []): Response
|
||||
{
|
||||
if (!empty($options)) {
|
||||
$this->setOptions($options, $resource);
|
||||
}
|
||||
|
||||
$result = $this->_call('GET', $resource[0], $resource[1], $args);
|
||||
|
||||
if (!empty($this->changed)) {
|
||||
$this->setSettings();
|
||||
}
|
||||
|
||||
return $result;
|
||||
}
|
||||
|
||||
/**
|
||||
* Trigger a POST request.
|
||||
*
|
||||
* @param array $resource Mailjet Resource/Action pair
|
||||
* @param array $args Request arguments
|
||||
* @param array $options
|
||||
* @return Response
|
||||
*/
|
||||
public function put(array $resource, array $args = [], array $options = []): Response
|
||||
{
|
||||
if (!empty($options)) {
|
||||
$this->setOptions($options, $resource);
|
||||
}
|
||||
|
||||
$result = $this->_call('PUT', $resource[0], $resource[1], $args);
|
||||
|
||||
if (!empty($this->changed)) {
|
||||
$this->setSettings();
|
||||
}
|
||||
|
||||
return $result;
|
||||
}
|
||||
|
||||
/**
|
||||
* Trigger a GET request.
|
||||
*
|
||||
* @param array $resource Mailjet Resource/Action pair
|
||||
* @param array $args Request arguments
|
||||
* @param array $options
|
||||
* @return Response
|
||||
*/
|
||||
public function delete(array $resource, array $args = [], array $options = []): Response
|
||||
{
|
||||
if (!empty($options)) {
|
||||
$this->setOptions($options, $resource);
|
||||
}
|
||||
|
||||
$result = $this->_call('DELETE', $resource[0], $resource[1], $args);
|
||||
|
||||
if (!empty($this->changed)) {
|
||||
$this->setSettings();
|
||||
}
|
||||
|
||||
return $result;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets if we need to use https or http protocol while using API Url.
|
||||
*
|
||||
* @param bool|mixed $bIsSecured True use https / false use http
|
||||
*
|
||||
* @return bool true if we set value false otherwise
|
||||
*/
|
||||
public function setSecureProtocol($bIsSecured = null): bool
|
||||
{
|
||||
if (\is_bool($bIsSecured)) {
|
||||
$this->secure = $bIsSecured;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set HTTP request Timeout.
|
||||
* @param int $timeout
|
||||
*/
|
||||
public function setTimeout(int $timeout): void
|
||||
{
|
||||
$this->requestOptions[self::TIMEOUT] = $timeout;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set HTTP proxy options
|
||||
* See: http://docs.guzzlephp.org/en/stable/request-options.html#proxy.
|
||||
* @param array $proxyArray
|
||||
*/
|
||||
public function setHttpProxy(array $proxyArray): void
|
||||
{
|
||||
$this->requestOptions[self::PROXY] = $proxyArray;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set HTTP connection Timeout.
|
||||
* @param int $timeout
|
||||
*/
|
||||
public function setConnectionTimeout(int $timeout): void
|
||||
{
|
||||
$this->requestOptions[self::CONNECT_TIMEOUT] = $timeout;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get HTTP request Timeout
|
||||
* $return int|null.
|
||||
*/
|
||||
public function getTimeout(): ?int
|
||||
{
|
||||
return $this->requestOptions[self::TIMEOUT];
|
||||
}
|
||||
|
||||
/**
|
||||
* Get HTTP connection Timeout
|
||||
* $return int|null.
|
||||
*/
|
||||
public function getConnectionTimeout(): ?int
|
||||
{
|
||||
return $this->requestOptions[self::CONNECT_TIMEOUT];
|
||||
}
|
||||
|
||||
/**
|
||||
* Add a HTTP request option.
|
||||
*
|
||||
* @param string $key
|
||||
* @param mixed $value
|
||||
* [IMPORTANT]Default options will be overwritten
|
||||
* if such option is provided
|
||||
*
|
||||
* @see \GuzzleHttp\RequestOptions for a list of available request options.
|
||||
*/
|
||||
public function addRequestOption(string $key, $value): void
|
||||
{
|
||||
if ((null !== $key) && (null !== $value)) {
|
||||
$this->requestOptions[$key] = $value;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Get HTTP connection options
|
||||
* $return array.
|
||||
*/
|
||||
public function getRequestOptions(): array
|
||||
{
|
||||
return $this->requestOptions;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set auth.
|
||||
*
|
||||
* @param string $key
|
||||
* @param string|null $secret
|
||||
* @param bool $call
|
||||
* @param array $settings
|
||||
*/
|
||||
private function setAuthentication(string $key, string $secret, bool $call, array $settings = []): void
|
||||
{
|
||||
$isBasicAuth = $this->isBasicAuthentication($key, $secret);
|
||||
|
||||
if ($isBasicAuth) {
|
||||
$this->apikey = $key;
|
||||
$this->apisecret = $secret;
|
||||
} else {
|
||||
$this->apitoken = $key;
|
||||
$this->version = Config::SMS_VERSION;
|
||||
}
|
||||
|
||||
$this->initSettings($call, $settings);
|
||||
$this->setSettings();
|
||||
}
|
||||
|
||||
/**
|
||||
* Magic method to call a mailjet resource.
|
||||
*
|
||||
* @param string $method Http method
|
||||
* @param string $resource mailjet resource
|
||||
* @param string $action mailjet resource action
|
||||
* @param array $args Request arguments
|
||||
*
|
||||
* @return Response server response
|
||||
*/
|
||||
private function _call(string $method, string $resource, string $action, array $args): Response
|
||||
{
|
||||
$args = array_merge([
|
||||
'id' => '',
|
||||
'actionid' => '',
|
||||
'filters' => [],
|
||||
'body' => 'GET' === $method ? null : '{}',
|
||||
], array_change_key_case($args));
|
||||
|
||||
$url = $this->buildURL($resource, $action, (string) $args['id'], $args['actionid']);
|
||||
|
||||
$contentType = ('csvdata/text:plain' === $action || 'csverror/text:csv' === $action) ? 'text/plain' : 'application/json';
|
||||
|
||||
$isBasicAuth = $this->isBasicAuthentication($this->apikey, $this->apisecret);
|
||||
$auth = $isBasicAuth ? [$this->apikey, $this->apisecret] : [$this->apitoken];
|
||||
|
||||
$request = new Request(
|
||||
$auth,
|
||||
$method,
|
||||
$url,
|
||||
$args['filters'],
|
||||
$args['body'],
|
||||
$contentType,
|
||||
$this->requestOptions
|
||||
);
|
||||
|
||||
return $request->call($this->call);
|
||||
}
|
||||
|
||||
/**
|
||||
* Build the base API url depending on wether user need a secure connection
|
||||
* or not.
|
||||
*
|
||||
* @return string the API url;
|
||||
*/
|
||||
private function getApiUrl(): string
|
||||
{
|
||||
$h = true === $this->secure ? 'https' : 'http';
|
||||
|
||||
return sprintf('%s://%s/%s/', $h, $this->url, $this->version);
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks that both parameters are strings, which means
|
||||
* that basic authentication will be required.
|
||||
*
|
||||
* @param string $key
|
||||
* @param string $secret
|
||||
* @return bool flag
|
||||
*/
|
||||
private function isBasicAuthentication(string $key, string $secret): bool
|
||||
{
|
||||
return !empty($key) && !empty($secret);
|
||||
}
|
||||
|
||||
/**
|
||||
* Build the final call url without query strings.
|
||||
*
|
||||
* @param string $resource Mailjet resource
|
||||
* @param string $action Mailjet resource action
|
||||
* @param string $id mailjet resource id
|
||||
* @param string $actionid mailjet resource actionid
|
||||
*
|
||||
* @return string final call url
|
||||
*/
|
||||
private function buildURL(string $resource, string $action, string $id, string $actionid): string
|
||||
{
|
||||
$path = 'REST';
|
||||
|
||||
if (\in_array($resource, $this->smsResources, true)) {
|
||||
$path = '';
|
||||
} elseif (\in_array($action, $this->dataAction, true)) {
|
||||
$path = 'DATA';
|
||||
} elseif ('v4' === $this->version) {
|
||||
$path = '';
|
||||
}
|
||||
|
||||
$arrayFilter = [$path, $resource, $id, $action, $actionid];
|
||||
|
||||
return $this->getApiUrl().implode('/', array_filter($arrayFilter));
|
||||
}
|
||||
|
||||
/**
|
||||
* Temporary set the variables generating the url.
|
||||
*
|
||||
* @param array $options contain temporary modifications for the client
|
||||
* @param array $resource may contain the version linked to the resource
|
||||
*/
|
||||
private function setOptions(array $options, array $resource): void
|
||||
{
|
||||
$this->version = (string) ($options['version'] ?? $resource[2] ?? Config::MAIN_VERSION);
|
||||
$this->url = (string) ($options['url'] ?? Config::MAIN_URL);
|
||||
$this->secure = $options['secured'] ?? Config::SECURED;
|
||||
$this->call = $options['call'] ?? true;
|
||||
$this->changed = true;
|
||||
}
|
||||
|
||||
/**
|
||||
* set back the variables generating the url.
|
||||
*/
|
||||
private function setSettings(): void
|
||||
{
|
||||
if (!empty($this->settings['url']) && \is_string($this->settings['url'])) {
|
||||
$this->url = $this->settings['url'];
|
||||
}
|
||||
|
||||
if (!empty($this->settings['version']) && \is_string($this->settings['version'])) {
|
||||
$this->version = $this->settings['version'];
|
||||
}
|
||||
|
||||
if (isset($this->settings['call']) && \is_bool($this->settings['call'])) {
|
||||
$this->call = $this->settings['call'];
|
||||
}
|
||||
|
||||
if (isset($this->settings['secured']) && \is_bool($this->settings['secured'])) {
|
||||
$this->secure = $this->settings['secured'];
|
||||
}
|
||||
|
||||
$this->changed = false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set a backup if the variables generating the url are change during a call.
|
||||
* @param bool $call
|
||||
* @param array $settings
|
||||
*/
|
||||
private function initSettings(bool $call, array $settings = []): void
|
||||
{
|
||||
$this->settings['url'] = $settings['url'] ?? $this->url;
|
||||
$this->settings['version'] = $settings['version'] ?? $this->version;
|
||||
$this->settings['call'] = $call;
|
||||
$this->settings['secured'] = $settings['secured'] ?? $this->secure;
|
||||
|
||||
$this->changed = false;
|
||||
}
|
||||
}
|
||||
@@ -178,6 +178,7 @@ class Company
|
||||
|
||||
/**
|
||||
* @ORM\OneToMany(targetEntity="AppBundle\Entity\User", mappedBy="company", cascade={"persist"})
|
||||
* @Groups({"company_detail", "company_list", "ad_detail"})
|
||||
*/
|
||||
private $users;
|
||||
|
||||
|
||||
@@ -0,0 +1,22 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
/*
|
||||
* Copyright (C) 2013 Mailgun
|
||||
*
|
||||
* This software may be modified and distributed under the terms
|
||||
* of the MIT license. See the LICENSE file for details.
|
||||
*/
|
||||
|
||||
namespace AppBundle\Entity;
|
||||
|
||||
class Config
|
||||
{
|
||||
const WRAPPER_VERSION = 'v2.0.0';
|
||||
const USER_AGENT = 'mailjet-apiv3-php/';
|
||||
const MAIN_VERSION = 'v3';
|
||||
const MAIN_URL = 'api.mailjet.com';
|
||||
const SECURED = true;
|
||||
const SMS_VERSION = 'v4';
|
||||
}
|
||||
@@ -0,0 +1,593 @@
|
||||
<?php
|
||||
namespace AppBundle\Entity;
|
||||
/**
|
||||
* Mailjet Public API
|
||||
*
|
||||
* @package API v0.3
|
||||
* @author Mailjet
|
||||
* @link http://api.mailjet.com/
|
||||
*
|
||||
* For PHP v >= 5.3
|
||||
*
|
||||
*/
|
||||
|
||||
class Mailjet
|
||||
{
|
||||
# Wrapper version, changed for each release
|
||||
const WRAPPER_VERSION = '1.1.0';
|
||||
|
||||
# Mailjet API version
|
||||
var $version = 'v3';
|
||||
|
||||
# Connect with https protocol
|
||||
var $secure = true;
|
||||
|
||||
# Mode debug ? 0 : none; 1 : errors only; 2 : all
|
||||
var $debug = 0;
|
||||
|
||||
# Edit with your Mailjet API keys (you can find them here : https://app.mailjet.com/account/api_keys)
|
||||
var $apiKey = '';
|
||||
var $secretKey = '';
|
||||
|
||||
// Ressources arrays
|
||||
|
||||
/*
|
||||
* Newsletter resources
|
||||
*/
|
||||
private static $_newsletterResources = array(
|
||||
"newsletterDetailContent",
|
||||
"newsletterSend",
|
||||
"newsletterSchedule",
|
||||
"newsletterTest",
|
||||
"newsletterStatus"
|
||||
);
|
||||
|
||||
/*
|
||||
* Contact resources
|
||||
* "contactManageManyContacts" not in as it is a special case.
|
||||
*/
|
||||
private static $_contactResources = array(
|
||||
"contactManageContactsLists",
|
||||
"contactGetContactsLists"
|
||||
);
|
||||
|
||||
/*
|
||||
* Contactslist resources
|
||||
*/
|
||||
private static $_contactslistResources = array (
|
||||
"contactslistManageContact",
|
||||
"contactslistManageManyContacts"
|
||||
);
|
||||
|
||||
/*
|
||||
* Template resources
|
||||
*/
|
||||
private static $_templateResources = array (
|
||||
"templateDetailContent"
|
||||
);
|
||||
|
||||
/*
|
||||
* dns resources
|
||||
*/
|
||||
private static $_dnsResources = array (
|
||||
"dnsCheck"
|
||||
);
|
||||
|
||||
# Constructor function
|
||||
public function __construct($apiKey = false, $secretKey = false, $preprod = false)
|
||||
{
|
||||
if ($apiKey) {
|
||||
$this->apiKey = $apiKey;
|
||||
}
|
||||
if ($secretKey) {
|
||||
$this->secretKey = $secretKey;
|
||||
}
|
||||
$this->apiUrl = $this->getApiUrl($preprod);
|
||||
$this->wrapperVersion = $this->readWrapperVersion();
|
||||
}
|
||||
|
||||
private function getApiUrl ($preprod)
|
||||
{
|
||||
if ($preprod)
|
||||
{
|
||||
return (($this->secure) ? 'https' : 'http') . '://api.preprod.mailjet.com/' . $this->version . '0';
|
||||
}
|
||||
else
|
||||
{
|
||||
return (($this->secure) ? 'https' : 'http') . '://api.mailjet.com/' . $this->version;
|
||||
}
|
||||
}
|
||||
|
||||
public function curl_setopt_custom_postfields($curl_handle, $postfields, $headers = null) {
|
||||
$algos = hash_algos();
|
||||
$hashAlgo = null;
|
||||
|
||||
foreach (array('sha1', 'md5') as $preferred) {
|
||||
if (in_array($preferred, $algos)) {
|
||||
$hashAlgo = $preferred;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if ($hashAlgo === null) {
|
||||
list($hashAlgo) = $algos;
|
||||
}
|
||||
|
||||
$boundary =
|
||||
'----------------------------' .
|
||||
substr(hash($hashAlgo, 'cURL-php-multiple-value-same-key-support' . microtime()), 0, 12);
|
||||
|
||||
$body = array();
|
||||
$crlf = "\r\n";
|
||||
|
||||
foreach ($postfields as $key => $value) {
|
||||
if (is_array($value)) {
|
||||
foreach ($value as $filename => $path) {
|
||||
// attachment
|
||||
if (strpos($path, '@') === 0) {
|
||||
preg_match('/^@(.*?)$/', $path, $matches);
|
||||
list($dummy, $path) = $matches;
|
||||
|
||||
if (is_int($filename)) {
|
||||
$filename = basename($path);
|
||||
}
|
||||
|
||||
$body[] = '--' . $boundary;
|
||||
$body[] = 'Content-Disposition: form-data; name="' . $key . '"; filename="' . $filename . '"';
|
||||
$body[] = 'Content-Type: application/octet-stream';
|
||||
$body[] = '';
|
||||
$body[] = file_get_contents($path);
|
||||
}
|
||||
// Array of recipients
|
||||
else if ('to' == $key || 'cc' == $key || 'bcc' == $key) {
|
||||
$body[] = '--' . $boundary;
|
||||
$body[] = 'Content-Disposition: form-data; name="' . $key . '"';
|
||||
$body[] = '';
|
||||
$body[] = trim($path);
|
||||
}
|
||||
}
|
||||
}
|
||||
else {
|
||||
$body[] = '--' . $boundary;
|
||||
$body[] = 'Content-Disposition: form-data; name="' . $key . '"';
|
||||
$body[] = '';
|
||||
$body[] = $value;
|
||||
}
|
||||
}
|
||||
|
||||
$body[] = '--' . $boundary . '--';
|
||||
$body[] = '';
|
||||
$contentType = 'multipart/form-data; boundary=' . $boundary;
|
||||
$content = join($crlf, $body);
|
||||
$contentLength = strlen($content);
|
||||
|
||||
curl_setopt($curl_handle, CURLOPT_HTTPHEADER, array(
|
||||
'Content-Length: ' . $contentLength,
|
||||
'Expect: 100-continue',
|
||||
'Content-Type: ' . $contentType,
|
||||
));
|
||||
|
||||
curl_setopt($curl_handle, CURLOPT_POSTFIELDS, $content);
|
||||
}
|
||||
|
||||
public function __call($resource, $args)
|
||||
{
|
||||
# Parameters array
|
||||
$params = (sizeof($args) > 0) ? $args[0] : array();
|
||||
|
||||
# Request method, GET by default
|
||||
if (isset($params["method"]))
|
||||
{
|
||||
$request = strtoupper($params["method"]);
|
||||
unset($params['method']);
|
||||
}
|
||||
else
|
||||
{
|
||||
$request = 'GET';
|
||||
}
|
||||
|
||||
# Request ID, empty by default
|
||||
$id = isset($params["ID"]) ? $params["ID"] : '';
|
||||
|
||||
/*
|
||||
Using SendAPI without the "to" parameter but with "cc" AND/OR "bcc"
|
||||
Our API needs the "to" parameter filled to send email
|
||||
We give it a default value with an email @example.org. See http://en.wikipedia.org/wiki/Example.com
|
||||
*/
|
||||
if ($resource == "sendEmail" && (empty($params["to"]) && (!empty($params["cc"]) || !empty($params["bcc"])))) {
|
||||
$params["to"] = "mailjet@example.org";
|
||||
}
|
||||
|
||||
if ($id == '')
|
||||
{
|
||||
# Request Unique field, empty by default
|
||||
$unique = isset($params["unique"]) ? $params["unique"] : '';
|
||||
unset($params["unique"]);
|
||||
# Make request
|
||||
$result = $this->sendRequest($resource, $params, $request, $unique);
|
||||
}
|
||||
else
|
||||
{
|
||||
# Make request
|
||||
$result = $this->sendRequest($resource, $params, $request, $id);
|
||||
}
|
||||
|
||||
# Return result
|
||||
$return = ($result === true) ? $this->_response : false;
|
||||
if ($this->debug == 2 || ($this->debug == 1 && $return == false)) {
|
||||
$this->debug();
|
||||
}
|
||||
|
||||
return $return;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param string $method REST or DATA
|
||||
* @param string $resourceBase Base resource
|
||||
* @param int $resourceID Base resource ID
|
||||
* @param string $action Action on resource
|
||||
*
|
||||
* @return string Returns the call's url.
|
||||
*/
|
||||
private function makeUrl($method, $resourceBase, $resourceID, $action)
|
||||
{
|
||||
return $this->apiUrl.'/'.$method.'/'.$resourceBase.'/'.$resourceID.'/'.strtolower($action);
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param string $method REST or DATA
|
||||
* @param string $resourceBase Base resource
|
||||
* @param int $resourceID Base resource ID
|
||||
* @param string $resource The whole resource, before parsing
|
||||
*
|
||||
* @return string Returns the call's url.
|
||||
*/
|
||||
private function makeUrlFromFilter($method, $resourceBase, $resourceID, $resource)
|
||||
{
|
||||
$matches = array();
|
||||
preg_match('/'.$resourceBase.'([a-zA-Z]+)/', $resource, $matches);
|
||||
|
||||
$action = $matches[1];
|
||||
return $this->makeUrl($method, $resourceBase, $resourceID, $action);
|
||||
}
|
||||
|
||||
public function requestUrlBuilder($resource, $params = array(), $request, $id)
|
||||
{
|
||||
if ($resource == "sendEmail") {
|
||||
$this->call_url = $this->apiUrl."/send/message";
|
||||
}
|
||||
else if ($resource == "send") {
|
||||
$this->call_url = $this->apiUrl."/send"; //json support for SendAPI
|
||||
}
|
||||
else if ($resource == "uploadCSVContactslistData") {
|
||||
if (!empty($params['_contactslist_id'])) {
|
||||
$contactslist_id = $params['_contactslist_id'];
|
||||
}
|
||||
else if (!empty($params['ID'])) {
|
||||
$contactslist_id = $params['ID'];
|
||||
}
|
||||
$this->call_url = $this->makeUrl('DATA', 'Contactslist', $contactslist_id, 'CSVData/text:plain'); // Was $this->call_url = $this->apiUrl."/DATA/contactslist/". $contactslist_id ."/CSVData/text:plain";
|
||||
}
|
||||
else if (($resource == "addHTMLbody") || ($resource == "getHTMLbody")) {
|
||||
if (!empty($params['_newsletter_id'])) {
|
||||
$newsletter_id = $params['_newsletter_id'];
|
||||
}
|
||||
else if (!empty($params['ID'])) {
|
||||
$newsletter_id = $params['ID'];
|
||||
}
|
||||
$this->call_url = $this->makeUrl('DATA', 'NewsLetter', $newsletter_id, 'HTML/text/html/LAST');
|
||||
}
|
||||
else if (in_array($resource, self::$_newsletterResources))
|
||||
{
|
||||
$this->call_url = $this->makeUrlFromFilter('REST', 'newsletter', $params['ID'], $resource); // Was $this->call_url = $this->apiUrl."/REST/newsletter/". $newsletter_id ."/".strtolower($action);
|
||||
}
|
||||
else if (in_array($resource, self::$_templateResources))
|
||||
{
|
||||
$this->call_url = $this->makeUrlFromFilter('REST', 'template', $params['ID'], $resource);
|
||||
}
|
||||
else if (in_array($resource, self::$_dnsResources))
|
||||
{
|
||||
$this->call_url = $this->makeUrlFromFilter('REST', 'dns', $params['ID'], $resource);
|
||||
}
|
||||
else if (in_array($resource, self::$_contactResources))
|
||||
{
|
||||
$this->call_url = $this->makeUrlFromFilter('REST', 'contact', $params['ID'], $resource); // Was $this->call_url = $this->apiUrl."/REST/contact/". $contact_id . "/".strtolower($action);
|
||||
}
|
||||
else if ($resource == "contactManageManyContacts")
|
||||
{
|
||||
$this->call_url = $this->apiUrl."/REST/contact/managemanycontacts";
|
||||
}
|
||||
else if (in_array($resource, self::$_contactslistResources))
|
||||
{
|
||||
$this->call_url = $this->makeUrlFromFilter('REST', 'contactslist', $params['ID'], $resource); // Was $this->call_url = $this->apiUrl."/REST/contactslist/". $contactslist_id . "/".strtolower($action);
|
||||
}
|
||||
else {
|
||||
$this->call_url = $this->apiUrl . '/REST/' . $resource;
|
||||
}
|
||||
|
||||
if ($request == "GET" || $request == "POST") {
|
||||
if (count($params) > 0)
|
||||
{
|
||||
$this->call_url .= '?';
|
||||
|
||||
foreach ($params as $key => $value) {
|
||||
// In a GET request, put an underscore char in front of params to avoid it being treated as a filter
|
||||
$firstChar = substr($key, 0, -(strlen($key) - 1));
|
||||
|
||||
if ($request == "GET") {
|
||||
$okFirstChar = ($firstChar != "_");
|
||||
$queryStringKey = $key;
|
||||
}
|
||||
else {
|
||||
$okFirstChar = ($firstChar == "_");
|
||||
$queryStringKey = substr($key, 1);
|
||||
}
|
||||
|
||||
if ($okFirstChar && ($key != "ID"))
|
||||
{
|
||||
$query_string[$queryStringKey] = $queryStringKey . '=' . urlencode($value);
|
||||
$this->call_url .= $query_string[$queryStringKey] . '&';
|
||||
}
|
||||
}
|
||||
|
||||
$this->call_url = substr($this->call_url, 0, -1);
|
||||
}
|
||||
}
|
||||
|
||||
if (($request == "VIEW" || $request == "DELETE" || $request == "PUT") && $resource != "addHTMLbody" && $resource != "uploadCSVContactslistData")
|
||||
{
|
||||
if ($id != '')
|
||||
{
|
||||
if ($resource == "contactslistManageManyContacts")
|
||||
{
|
||||
$this->call_url .= '/' . $params["JobID"];
|
||||
}
|
||||
else
|
||||
{
|
||||
$this->call_url .= '/' . $id;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return $this->call_url;
|
||||
}
|
||||
|
||||
public function sendRequest($resource = false, $params = array(), $request = "GET", $id = '')
|
||||
{
|
||||
# Method
|
||||
$this->_method = $resource;
|
||||
$this->_request = $request;
|
||||
|
||||
# Build request URL
|
||||
$url = $this->requestUrlBuilder($resource, $params, $request, $id);
|
||||
|
||||
// fix bug for sort (ID+DESC), replace %2B in url by +
|
||||
$url = preg_replace('#Sort=(.+)%2B(DESC|ASC|)?#sUi', 'Sort=$1+$2', $url);
|
||||
|
||||
# Set up and execute the curl process
|
||||
$curl_handle = curl_init();
|
||||
curl_setopt($curl_handle, CURLOPT_URL, $url);
|
||||
curl_setopt($curl_handle, CURLOPT_USERAGENT, 'mailjet-api-v3-php-simple/' . $this->wrapperVersion . '; PHP v. ' . phpversion());
|
||||
curl_setopt($curl_handle, CURLOPT_RETURNTRANSFER, 1);
|
||||
curl_setopt($curl_handle, CURLOPT_SSL_VERIFYPEER, FALSE);
|
||||
curl_setopt($curl_handle, CURLOPT_SSL_VERIFYHOST, 2);
|
||||
curl_setopt($curl_handle, CURLOPT_USERPWD, $this->apiKey . ':' . $this->secretKey);
|
||||
|
||||
$this->_request_post = false;
|
||||
|
||||
if (($request == 'POST') || ($request == 'PUT')):
|
||||
curl_setopt($curl_handle, CURLOPT_POST, 1);
|
||||
|
||||
// Exclude filters from payload. See http://stackoverflow.com/questions/4260086/php-how-to-use-array-filter-to-filter-array-keys
|
||||
$paramsFiltered = array_filter(array_keys($params), function($k) {
|
||||
return substr($k, 0, 1) != '_';
|
||||
});
|
||||
$params = array_intersect_key($params, array_flip($paramsFiltered));
|
||||
|
||||
if ($this->debug == 2) {
|
||||
var_dump($params);
|
||||
}
|
||||
|
||||
if ($resource == "sendEmail") {
|
||||
$this->curl_setopt_custom_postfields($curl_handle, $params);
|
||||
}
|
||||
else if ($resource == "addHTMLbody")
|
||||
{
|
||||
curl_setopt($curl_handle, CURLOPT_POSTFIELDS, $params['html_content']);
|
||||
curl_setopt($curl_handle, CURLOPT_HTTPHEADER, array(
|
||||
'Content-Type: text/html'
|
||||
));
|
||||
}
|
||||
//
|
||||
else if ($resource == "uploadCSVContactslistData")
|
||||
{
|
||||
curl_setopt($curl_handle, CURLOPT_BINARYTRANSFER, TRUE);
|
||||
curl_setopt($curl_handle, CURLOPT_POSTFIELDS, $params['csv_content']);
|
||||
curl_setopt($curl_handle, CURLOPT_HTTPHEADER, array(
|
||||
'Content-Type: text/plain'
|
||||
));
|
||||
}
|
||||
//
|
||||
else
|
||||
{
|
||||
if ((in_array($resource, self::$_newsletterResources)) ||
|
||||
($resource == "contactManageContactsLists") ||
|
||||
($resource == "contactManageManyContacts") ||
|
||||
(in_array($resource, self::$_contactslistResources)) ||
|
||||
(in_array($resource, self::$_templateResources)) ||
|
||||
(in_array($resource, self::$_dnsResources)))
|
||||
{
|
||||
unset($params['ID']);
|
||||
}
|
||||
|
||||
$j_e = null;
|
||||
if (version_compare(phpversion(), '5.4.0', '<')) {
|
||||
$j_e = str_replace('\\/', '/', json_encode($params));
|
||||
} else {
|
||||
// 64 => unescaped_slashes
|
||||
$j_e = json_encode($params, 64);
|
||||
}
|
||||
|
||||
curl_setopt($curl_handle, CURLOPT_POSTFIELDS, $j_e);
|
||||
curl_setopt($curl_handle, CURLOPT_HTTPHEADER, array(
|
||||
'Content-Type: application/json'
|
||||
));
|
||||
}
|
||||
$this->_request_post = $params;
|
||||
endif;
|
||||
|
||||
if ($request == 'DELETE') {
|
||||
curl_setopt($curl_handle, CURLOPT_CUSTOMREQUEST, "DELETE");
|
||||
}
|
||||
|
||||
if ($request == 'PUT') {
|
||||
curl_setopt($curl_handle, CURLOPT_CUSTOMREQUEST, "PUT");
|
||||
}
|
||||
|
||||
$buffer = curl_exec($curl_handle);
|
||||
|
||||
if ($this->debug == 2) {
|
||||
var_dump($buffer);
|
||||
}
|
||||
|
||||
# Response code
|
||||
$this->_response_code = curl_getinfo($curl_handle, CURLINFO_HTTP_CODE);
|
||||
|
||||
# Close curl process
|
||||
curl_close($curl_handle);
|
||||
|
||||
# Return response
|
||||
if (($this->_response_code == 200) && ($resource == "getHTMLbody")) {
|
||||
$this->_response = $buffer;
|
||||
}
|
||||
else
|
||||
{
|
||||
/*
|
||||
* This prevents the rounding error on 32 bits systems with PHP version >= 5.4
|
||||
*/
|
||||
if (defined('JSON_BIGINT_AS_STRING'))
|
||||
{
|
||||
$this->_response = json_decode($buffer, false, 512, JSON_BIGINT_AS_STRING);
|
||||
}
|
||||
else
|
||||
{ // PHP v <= 5.3.* doens't support the fourth parameter of json_decode
|
||||
$this->_response = json_decode($buffer, false, 512);
|
||||
}
|
||||
}
|
||||
|
||||
if ($request == 'POST') {
|
||||
return ($this->_response_code == 201 || $this->_response_code == 200) ? true : false;
|
||||
}
|
||||
if ($request == 'DELETE') {
|
||||
return ($this->_response_code == 204) ? true : false;
|
||||
}
|
||||
return ($this->_response_code == 200) ? true : false;
|
||||
}
|
||||
|
||||
public function debug()
|
||||
{
|
||||
echo '<style type="text/css">';
|
||||
echo '
|
||||
#debugger {width: 100%; font-family: arial;}
|
||||
#debugger table {padding: 0; margin: 0 0 20px; width: 100%; font-size: 11px; text-align: left;border-collapse: collapse;}
|
||||
#debugger th, #debugger td {padding: 2px 4px;}
|
||||
#debugger tr.h {background: #999; color: #fff;}
|
||||
#debugger tr.Success {background:#90c306; color: #fff;}
|
||||
#debugger tr.Error {background:#c30029 ; color: #fff;}
|
||||
#debugger tr.Not-modified {background:orange ; color: #fff;}
|
||||
#debugger th {width: 20%; vertical-align:top; padding-bottom: 8px;}
|
||||
';
|
||||
echo '</style>';
|
||||
|
||||
echo '<div id="debugger">';
|
||||
|
||||
if (isset($this->_response_code)):
|
||||
if (($this->_response_code == 200) || ($this->_response_code == 201) || ($this->_response_code == 204)):
|
||||
echo '<table>';
|
||||
echo '<tr class="Success"><th>Success</th><td></td></tr>';
|
||||
echo '<tr><th>Status code</th><td>' . $this->_response_code . '</td></tr>';
|
||||
|
||||
if (isset($this->_response)):
|
||||
echo '<tr><th>Response</th><td><pre>' . utf8_decode(print_r($this->_response, 1)) . '</pre></td></tr>';
|
||||
endif;
|
||||
|
||||
echo '</table>';
|
||||
elseif ($this->_response_code == 304):
|
||||
echo '<table>';
|
||||
echo '<tr class="Not-modified"><th>Error</th><td></td></tr>';
|
||||
echo '<tr><th>Error no</th><td>' . $this->_response_code . '</td></tr>';
|
||||
echo '<tr><th>Message</th><td>Not Modified</td></tr>';
|
||||
echo '</table>';
|
||||
else:
|
||||
echo '<table>';
|
||||
echo '<tr class="Error"><th>Error</th><td></td></tr>';
|
||||
echo '<tr><th>Error no</th><td>' . $this->_response_code . '</td></tr>';
|
||||
if (isset($this->_response)):
|
||||
if (is_array($this->_response) OR is_object($this->_response)):
|
||||
echo '<tr><th>Status</th><td><pre>' . print_r($this->_response, true) . '</pre></td></tr>';
|
||||
else:
|
||||
echo '<tr><th>Status</th><td><pre>' . $this->_response . '</pre></td></tr>';
|
||||
endif;
|
||||
endif;
|
||||
echo '</table>';
|
||||
endif;
|
||||
endif;
|
||||
|
||||
$call_url = parse_url($this->call_url);
|
||||
|
||||
echo '<table>';
|
||||
echo '<tr class="h"><th>API config</th><td></td></tr>';
|
||||
echo '<tr><th>Protocole</th><td>' . $call_url['scheme'] . '</td></tr>';
|
||||
echo '<tr><th>Host</th><td>' . $call_url['host'] . '</td></tr>';
|
||||
echo '<tr><th>Version</th><td>' . $this->version . '</td></tr>';
|
||||
echo '<tr><th>Wrapper Version</th><td>' . $this->readWrapperVersion() . '</td></tr>';
|
||||
echo '</table>';
|
||||
|
||||
echo '<table>';
|
||||
echo '<tr class="h"><th>Call infos</th><td></td></tr>';
|
||||
echo '<tr><th>Resource</th><td>' . $this->_method . '</td></tr>';
|
||||
echo '<tr><th>Request type</th><td>' . $this->_request . '</td></tr>';
|
||||
echo '<tr><th>Get Arguments</th><td>';
|
||||
|
||||
if (isset($call_url['query'])) {
|
||||
$args = explode("&", $call_url['query']);
|
||||
foreach ($args as $arg) {
|
||||
$arg = explode("=", $arg);
|
||||
echo '' . $arg[0] . ' = <span style="color:#ff6e56;">' . $arg[1] . '</span><br/>';
|
||||
}
|
||||
}
|
||||
|
||||
echo '</td></tr>';
|
||||
|
||||
if ($this->_request_post) {
|
||||
echo '<tr><th>Post Arguments</th><td>';
|
||||
|
||||
foreach ($this->_request_post as $k => $v) {
|
||||
if (is_array($v))
|
||||
{
|
||||
foreach ($v as $key => $value)
|
||||
{
|
||||
echo $key . ' = <span style="color:#ff6e56;">' . $value . '</span><br/>';
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
echo $k . ' = <span style="color:#ff6e56;">' . $v . '</span><br/>';
|
||||
}
|
||||
}
|
||||
|
||||
echo '</td></tr>';
|
||||
}
|
||||
|
||||
echo '<tr><th>Call url</th><td>' . $this->call_url . '</td></tr>';
|
||||
echo '</table>';
|
||||
|
||||
echo '</div>';
|
||||
}
|
||||
|
||||
private function readWrapperVersion() {
|
||||
return Mailjet::WRAPPER_VERSION;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,189 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
/*
|
||||
* Copyright (C) 2013 Mailgun
|
||||
*
|
||||
* This software may be modified and distributed under the terms
|
||||
* of the MIT license. See the LICENSE file for details.
|
||||
*/
|
||||
|
||||
namespace AppBundle\Entity;
|
||||
|
||||
use GuzzleHttp\Client as GuzzleClient;
|
||||
use GuzzleHttp\Exception\ClientException;
|
||||
use GuzzleHttp\Exception\ServerException;
|
||||
|
||||
class Request extends GuzzleClient
|
||||
{
|
||||
/**
|
||||
* @var string
|
||||
*/
|
||||
private $method;
|
||||
|
||||
/**
|
||||
* @var string
|
||||
*/
|
||||
private $url;
|
||||
|
||||
/**
|
||||
* @var array
|
||||
*/
|
||||
private $filters;
|
||||
|
||||
/**
|
||||
* @var array
|
||||
*/
|
||||
private $body;
|
||||
|
||||
/**
|
||||
* @var array
|
||||
*/
|
||||
private $auth;
|
||||
|
||||
/**
|
||||
* @var string
|
||||
*/
|
||||
private $type;
|
||||
|
||||
/**
|
||||
* @var array
|
||||
*/
|
||||
private $requestOptions = [];
|
||||
|
||||
/**
|
||||
* Build a new Http request.
|
||||
*
|
||||
* @param array $auth [apikey, apisecret]
|
||||
* @param string $method http method
|
||||
* @param string $url call url
|
||||
* @param array $filters Mailjet resource filters
|
||||
* @param array|null $body Mailjet resource body
|
||||
* @param string $type Request Content-type
|
||||
* @param array $requestOptions
|
||||
*/
|
||||
public function __construct(
|
||||
array $auth,
|
||||
string $method,
|
||||
string $url,
|
||||
array $filters,
|
||||
?array $body,
|
||||
string $type,
|
||||
array $requestOptions = []
|
||||
) {
|
||||
parent::__construct(['defaults' => [
|
||||
'headers' => [
|
||||
'user-agent' => Config::USER_AGENT.PHP_VERSION.'/'.Client::WRAPPER_VERSION,
|
||||
],
|
||||
]]);
|
||||
|
||||
$this->type = $type;
|
||||
$this->auth = $auth;
|
||||
$this->method = $method;
|
||||
$this->url = $url;
|
||||
$this->filters = $filters;
|
||||
$this->body = $body;
|
||||
$this->requestOptions = $requestOptions;
|
||||
}
|
||||
|
||||
/**
|
||||
* Trigger the actual call
|
||||
* TODO: DATA API.
|
||||
*
|
||||
* @param $call
|
||||
*
|
||||
* @return Response the call response
|
||||
*/
|
||||
public function call($call)
|
||||
{
|
||||
$payload = [
|
||||
'query' => $this->filters,
|
||||
('application/json' === $this->type ? 'json' : 'body') => $this->body,
|
||||
];
|
||||
|
||||
$authArgsCount = \count($this->auth);
|
||||
$headers = [
|
||||
'content-type' => $this->type,
|
||||
];
|
||||
|
||||
if ($authArgsCount > 1) {
|
||||
$payload['auth'] = $this->auth;
|
||||
} else {
|
||||
$headers['Authorization'] = 'Bearer '.$this->auth[0];
|
||||
}
|
||||
|
||||
$payload['headers'] = $headers;
|
||||
|
||||
if ((!empty($this->requestOptions)) && (\is_array($this->requestOptions))) {
|
||||
$payload = array_merge_recursive($payload, $this->requestOptions);
|
||||
}
|
||||
|
||||
$response = null;
|
||||
|
||||
if ($call) {
|
||||
try {
|
||||
$response = \call_user_func_array(
|
||||
[$this, strtolower($this->method)],
|
||||
[$this->url, $payload]
|
||||
);
|
||||
} catch (ClientException $e) {
|
||||
$response = $e->getResponse();
|
||||
} catch (ServerException $e) {
|
||||
$response = $e->getResponse();
|
||||
}
|
||||
}
|
||||
|
||||
return new Response($this, $response);
|
||||
}
|
||||
|
||||
/**
|
||||
* Filters getters.
|
||||
*
|
||||
* @return array Request filters
|
||||
*/
|
||||
public function getFilters(): array
|
||||
{
|
||||
return $this->filters;
|
||||
}
|
||||
|
||||
/**
|
||||
* Http method getter.
|
||||
*
|
||||
* @return string Request method
|
||||
*/
|
||||
public function getMethod(): string
|
||||
{
|
||||
return $this->method;
|
||||
}
|
||||
|
||||
/**
|
||||
* Call Url getter.
|
||||
*
|
||||
* @return string Request Url
|
||||
*/
|
||||
public function getUrl(): string
|
||||
{
|
||||
return $this->url;
|
||||
}
|
||||
|
||||
/**
|
||||
* Request body getter.
|
||||
*
|
||||
* @return array request body
|
||||
*/
|
||||
public function getBody(): array
|
||||
{
|
||||
return $this->body;
|
||||
}
|
||||
|
||||
/**
|
||||
* Auth getter. to discuss.
|
||||
*
|
||||
* @return array Request auth
|
||||
*/
|
||||
public function getAuth(): array
|
||||
{
|
||||
return $this->auth;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,121 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
/*
|
||||
* Copyright (C) 2013 Mailgun
|
||||
*
|
||||
* This software may be modified and distributed under the terms
|
||||
* of the MIT license. See the LICENSE file for details.
|
||||
*/
|
||||
|
||||
namespace AppBundle\Entity;
|
||||
|
||||
/**
|
||||
* PHP version 7.2.
|
||||
*
|
||||
* This is the Mailjet Resources Class
|
||||
*
|
||||
* @category Mailjet_API
|
||||
*
|
||||
* @author Guillaume Badi <gbadi@mailjet.com>
|
||||
* @license MIT https://opensource.org/licenses/MIT
|
||||
*
|
||||
* @see dev.mailjet.com
|
||||
*/
|
||||
class Resources
|
||||
{
|
||||
public static $Email = ['send', ''/*, 'v3.1'*/];
|
||||
public static $Aggregategraphstatistics = ['aggregategraphstatistics', ''];
|
||||
public static $Apikey = ['apikey', ''];
|
||||
public static $Apikeyaccess = ['apikeyaccess', ''];
|
||||
public static $Apikeytotals = ['apikeytotals', ''];
|
||||
public static $Apitoken = ['apitoken', ''];
|
||||
public static $Axtesting = ['axtesting', ''];
|
||||
public static $Batchjob = ['batchjob', ''];
|
||||
public static $BatchjobCsverror = ['batchjob', 'csverror/text:csv'];
|
||||
public static $BatchjobJsonerror = ['batchjob', 'JSONError/application:json/LAST'];
|
||||
public static $Bouncestatistics = ['bouncestatistics', ''];
|
||||
public static $Campaign = ['campaign', ''];
|
||||
public static $Campaignaggregate = ['campaignaggregate', ''];
|
||||
public static $Campaigndraft = ['campaigndraft', ''];
|
||||
public static $CampaigndraftSchedule = ['campaigndraft', 'schedule'];
|
||||
public static $CampaigndraftStatus = ['campaigndraft', 'status'];
|
||||
public static $CampaigndraftSend = ['campaigndraft', 'send'];
|
||||
public static $CampaigndraftTest = ['campaigndraft', 'test'];
|
||||
public static $CampaigndraftDetailcontent = ['campaigndraft', 'detailcontent'];
|
||||
public static $Campaigngraphstatistics = ['campaigngraphstatistics', ''];
|
||||
public static $Campaignoverview = ['campaignoverview', ''];
|
||||
public static $Campaignstatistics = ['campaignstatistics', ''];
|
||||
public static $Clickstatistics = ['clickstatistics', ''];
|
||||
public static $Contact = ['contact', ''];
|
||||
public static $ContactManagecontactslists = ['contact', 'managecontactslists'];
|
||||
public static $ContactGetcontactslists = ['contact', 'getcontactslists'];
|
||||
public static $ContactManagemanycontacts = ['contact', 'managemanycontacts'];
|
||||
public static $Contactdata = ['contactdata', ''];
|
||||
public static $Contactfilter = ['contactfilter', ''];
|
||||
public static $Contacthistorydata = ['contacthistorydata', ''];
|
||||
public static $Contactmetadata = ['contactmetadata', ''];
|
||||
public static $Contactslist = ['contactslist', ''];
|
||||
public static $ContactslistCsvdata = ['contactslist', 'csvdata/text:plain'];
|
||||
public static $ContactslistManagecontact = ['contactslist', 'ManageContact'];
|
||||
public static $ContactslistManagemanycontacts = ['contactslist', 'ManageManyContacts'];
|
||||
public static $ContactslistImportlist = ['contactslist', 'ImportList'];
|
||||
public static $Contactslistsignup = ['contactslistsignup', ''];
|
||||
public static $Contactstatistics = ['contactstatistics', ''];
|
||||
public static $Csvimport = ['csvimport', ''];
|
||||
public static $Dns = ['dns', ''];
|
||||
public static $DnsCheck = ['dns', 'check'];
|
||||
public static $Domainstatistics = ['domainstatistics', ''];
|
||||
public static $Eventcallbackurl = ['eventcallbackurl', ''];
|
||||
public static $Geostatistics = ['geostatistics', ''];
|
||||
public static $Graphstatistics = ['graphstatistics', ''];
|
||||
public static $Listrecipient = ['listrecipient', ''];
|
||||
public static $Listrecipientstatistics = ['listrecipientstatistics', ''];
|
||||
public static $Liststatistics = ['liststatistics', ''];
|
||||
public static $Message = ['message', ''];
|
||||
public static $Messagehistory = ['messagehistory', ''];
|
||||
public static $Messageinformation = ['messageinformation', ''];
|
||||
public static $Messagesentstatistics = ['messagesentstatistics', ''];
|
||||
public static $Messagestate = ['messagestate', ''];
|
||||
public static $Messagestatistics = ['messagestatistics', ''];
|
||||
public static $Metadata = ['metadata', ''];
|
||||
public static $Metasender = ['metasender', ''];
|
||||
public static $Myprofile = ['myprofile', ''];
|
||||
public static $Newsletter = ['newsletter', ''];
|
||||
public static $NewsletterSchedule = ['newsletter', 'schedule'];
|
||||
public static $NewsletterStatus = ['newsletter', 'status'];
|
||||
public static $NewsletterSend = ['newsletter', 'send'];
|
||||
public static $NewsletterTest = ['newsletter', 'test'];
|
||||
public static $NewsletterDetailcontent = ['newsletter', 'detailcontent'];
|
||||
public static $Newslettertemplate = ['newslettertemplate', ''];
|
||||
public static $Newslettertemplatecategory = ['newslettertemplatecategory', ''];
|
||||
public static $Openinformation = ['openinformation', ''];
|
||||
public static $Openstatistics = ['openstatistics', ''];
|
||||
public static $Parseroute = ['parseroute', ''];
|
||||
public static $Preferences = ['preferences', ''];
|
||||
public static $Preset = ['preset', ''];
|
||||
public static $Sender = ['sender', ''];
|
||||
public static $SenderValidate = ['sender', 'validate'];
|
||||
public static $Senderstatistics = ['senderstatistics', ''];
|
||||
public static $Template = ['template', ''];
|
||||
public static $TemplateDetailcontent = ['template', 'detailcontent'];
|
||||
public static $TemplateDetailpreviews = ['template', 'detailpreviews'];
|
||||
public static $TemplateDisplaypreview = ['template', 'displaypreview'];
|
||||
public static $TemplateDetailthumbnail = ['template', 'detailthumbnail'];
|
||||
public static $TemplateDisplaythumbnail = ['template', 'displaythumbnail'];
|
||||
public static $Toplinkclicked = ['toplinkclicked', ''];
|
||||
public static $Trigger = ['trigger', ''];
|
||||
public static $User = ['user', ''];
|
||||
public static $UserActivate = ['user', 'activate'];
|
||||
public static $Useragentstatistics = ['useragentstatistics', ''];
|
||||
public static $Widget = ['widget', ''];
|
||||
public static $Widgetcustomvalue = ['widgetcustomvalue', ''];
|
||||
public static $Statcounters = ['statcounters', ''];
|
||||
public static $StatisticsLinkclick = ['statistics', 'link-click'];
|
||||
public static $StatisticsRecipientesp = ['statistics', 'recipient-esp'];
|
||||
public static $Sms = ['sms', ''];
|
||||
public static $SmsSend = ['sms-send', ''];
|
||||
public static $SmsExport = ['sms', 'export'];
|
||||
public static $SmsCount = ['sms', 'count'];
|
||||
}
|
||||
@@ -0,0 +1,147 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
/*
|
||||
* Copyright (C) 2013 Mailgun
|
||||
*
|
||||
* This software may be modified and distributed under the terms
|
||||
* of the MIT license. See the LICENSE file for details.
|
||||
*/
|
||||
|
||||
namespace AppBundle\Entity;
|
||||
|
||||
use Psr\Http\Message\ResponseInterface;
|
||||
|
||||
class Response
|
||||
{
|
||||
/**
|
||||
* @var int
|
||||
*/
|
||||
private $status;
|
||||
|
||||
/**
|
||||
* @var bool
|
||||
*/
|
||||
private $success;
|
||||
|
||||
/**
|
||||
* @var array
|
||||
*/
|
||||
private $body = [];
|
||||
|
||||
/**
|
||||
* @var ResponseInterface
|
||||
*/
|
||||
private $rawResponse;
|
||||
|
||||
/**
|
||||
* @var Request
|
||||
*/
|
||||
private $request;
|
||||
|
||||
/**
|
||||
* Construct a Mailjet response.
|
||||
*
|
||||
* @param Request $request Mailjet actual request
|
||||
* @param ResponseInterface $response Guzzle response
|
||||
*/
|
||||
public function __construct(Request $request, ResponseInterface $response)
|
||||
{
|
||||
$this->request = $request;
|
||||
|
||||
if ($response) {
|
||||
$this->rawResponse = $response;
|
||||
$this->status = $response->getStatusCode();
|
||||
$this->body = $this->decodeBody($response->getBody()->getContents());
|
||||
$this->success = 2 === floor($this->status / 100);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Status Getter
|
||||
* return the http status code.
|
||||
*
|
||||
* @return int status
|
||||
*/
|
||||
public function getStatus()
|
||||
{
|
||||
return $this->status;
|
||||
}
|
||||
|
||||
/**
|
||||
* Status Getter
|
||||
* return the entire response array.
|
||||
*/
|
||||
public function getBody(): array
|
||||
{
|
||||
return $this->body;
|
||||
}
|
||||
|
||||
/**
|
||||
* Data Getter
|
||||
* The data returned by the mailjet call.
|
||||
*
|
||||
* @return array data
|
||||
*/
|
||||
public function getData(): array
|
||||
{
|
||||
return $this->body['Data'] ?? $this->body;
|
||||
}
|
||||
|
||||
/**
|
||||
* Count getter
|
||||
* return the resulting array size.
|
||||
*/
|
||||
public function getCount(): ?int
|
||||
{
|
||||
return $this->body['Count'] ?? null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Error Reason getter
|
||||
* return the resulting error message.
|
||||
*/
|
||||
public function getReasonPhrase(): ?string
|
||||
{
|
||||
return $this->rawResponse->getReasonPhrase();
|
||||
}
|
||||
|
||||
/**
|
||||
* Total getter
|
||||
* return the total count of all results.
|
||||
*
|
||||
* @return int|null count
|
||||
*/
|
||||
public function getTotal(): ?int
|
||||
{
|
||||
return $this->body['Total'] ?? null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Success getter.
|
||||
*
|
||||
* @return bool true is return code is 2**
|
||||
*/
|
||||
public function success(): ?bool
|
||||
{
|
||||
return $this->success;
|
||||
}
|
||||
|
||||
public function getRequest(): Request
|
||||
{
|
||||
return $this->request;
|
||||
}
|
||||
|
||||
/**
|
||||
* Decodes a mailjet string response to an object representing that response.
|
||||
*
|
||||
* @param string $body The mailjet response as string
|
||||
*
|
||||
* @return array Object representing the mailjet response
|
||||
*/
|
||||
protected function decodeBody(string $body): array
|
||||
{
|
||||
return json_decode($body, true, 512, JSON_BIGINT_AS_STRING) ?: [];
|
||||
}
|
||||
}
|
||||
@@ -36,7 +36,7 @@ class User extends BaseUser
|
||||
*
|
||||
* @ORM\Column(name="firstname", type="string", length=255, nullable=true)
|
||||
* @Expose
|
||||
* @Groups({"answer_detail"})
|
||||
* @Groups({"answer_detail", "company_detail", "ad_detail"})
|
||||
*/
|
||||
private $firstname;
|
||||
|
||||
@@ -45,7 +45,7 @@ class User extends BaseUser
|
||||
*
|
||||
* @ORM\Column(name="lastname", type="string", length=255, nullable=true)
|
||||
* @Expose
|
||||
* @Groups({"answer_detail"})
|
||||
* @Groups({"answer_detail", "company_detail", "ad_detail"})
|
||||
*/
|
||||
private $lastname;
|
||||
|
||||
@@ -69,6 +69,7 @@ class User extends BaseUser
|
||||
*
|
||||
* @ORM\Column(name="gender", type="string", length=255, nullable=true)
|
||||
* @Expose
|
||||
* @Groups({"answer_detail", "company_detail"})
|
||||
*/
|
||||
private $gender;
|
||||
|
||||
@@ -79,6 +80,16 @@ class User extends BaseUser
|
||||
*/
|
||||
private $status;
|
||||
|
||||
|
||||
/**
|
||||
* @var array
|
||||
*
|
||||
* @ORM\Column(name="geoloc", type="json_document", nullable=true, options={"jsonb":true})
|
||||
* @Groups({"ad_detail", "ad_list", "answer_detail", "company_detail"})
|
||||
*/
|
||||
private $geoloc;
|
||||
private $geolocLocality;
|
||||
|
||||
/**
|
||||
* @ORM\ManyToOne(targetEntity="AppBundle\Entity\Company", inversedBy="users", cascade={"persist"})
|
||||
*/
|
||||
@@ -376,7 +387,7 @@ class User extends BaseUser
|
||||
$zipCode = "";
|
||||
$city = "";
|
||||
$country = "";
|
||||
|
||||
$type=null;
|
||||
if($this->getCompany()->getPresentationVideo())
|
||||
{
|
||||
$pres= $this->getCompany()->getPresentationVideo()->getCdnUrl();
|
||||
@@ -406,6 +417,8 @@ class User extends BaseUser
|
||||
$linkedin="";
|
||||
$twitter="";
|
||||
if($this->getCompany()->getExtra()){
|
||||
//19/01 j'ai eneleve le initExtra de ExtraJsonTrait
|
||||
$this->getCompany()->initExtra();
|
||||
if(array_key_exists("phoneTalent", $this->getCompany()->getExtra())){
|
||||
if($this->getCompany()->getExtra()["phoneTalent"]){
|
||||
$phone= $this->getCompany()->getExtra()["phoneTalent"];
|
||||
@@ -423,6 +436,10 @@ class User extends BaseUser
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if($this->getCompany()->getType()){
|
||||
$type=$this->getCompany()->getType();
|
||||
}
|
||||
}
|
||||
|
||||
$card = array(
|
||||
@@ -442,7 +459,9 @@ class User extends BaseUser
|
||||
"zipCode" => $zipCode,
|
||||
"city" => $city,
|
||||
"country" => $country,
|
||||
"type" => $type,
|
||||
"currentJob" => $this->getCompany()->getExtra()["titleTalent"],
|
||||
"geoloc" => $this->getGeoloc(),
|
||||
"website" => $this->getCompany()->getWebsite(),
|
||||
);
|
||||
return $card;
|
||||
@@ -609,6 +628,44 @@ class User extends BaseUser
|
||||
return $this->status;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Set Geoloc.
|
||||
*
|
||||
* @param json_document|null $geoloc
|
||||
*
|
||||
* @return User
|
||||
*/
|
||||
public function setGeoloc($geoloc = null)
|
||||
{
|
||||
$this->geoloc = $geoloc;
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get geoloc.
|
||||
*
|
||||
* @return json_document|null
|
||||
*/
|
||||
public function getGeoloc()
|
||||
{
|
||||
//19/01 : modif pour size et siren cote Symfony. Effet sur la web app?
|
||||
//$this->initExtra();
|
||||
return $this->geoloc;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get geolocLocality.
|
||||
*
|
||||
* @return json_document|null
|
||||
*/
|
||||
public function getGeolocLocality()
|
||||
{
|
||||
|
||||
$this->geolocLocality=$this->geoloc;
|
||||
return $this->geolocLocality;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set facebookId.
|
||||
*
|
||||
|
||||
@@ -29,9 +29,10 @@ class AdSearchType extends AbstractType
|
||||
'CDI' => 'CDI',
|
||||
'CDD' => 'CDD',
|
||||
'Apprentissage' => 'Apprentissage',
|
||||
'Professionnalisation' => 'Professionnalisation',
|
||||
'Professionnalisation' => 'Contrat de professionnalisation',
|
||||
'Stage' => 'Stage',
|
||||
'Indépendant' => 'Indépendant'
|
||||
'Indépendant' => 'Indépendant',
|
||||
'Interim' => 'Interim'
|
||||
)
|
||||
))
|
||||
->add('location_gmap', TextType::class, array(
|
||||
|
||||
@@ -8,6 +8,7 @@ use Symfony\Component\Form\Extension\Core\Type\TextareaType;
|
||||
use Symfony\Component\Form\Extension\Core\Type\TextType;
|
||||
use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
|
||||
use Symfony\Component\Form\FormBuilderInterface;
|
||||
use Symfony\Component\Form\Extension\Core\Type\IntegerType;
|
||||
|
||||
class AdSoftType extends AbstractType
|
||||
{
|
||||
@@ -19,11 +20,35 @@ class AdSoftType extends AbstractType
|
||||
$publicTags = implode(',', $publicTags);
|
||||
}
|
||||
}
|
||||
$competences = json_encode($options['data']->getCompetences());
|
||||
$contract_type = "";
|
||||
//US 380 : mise en place de la durée de contrat pour un CDD
|
||||
$duree_contrat="0";
|
||||
$temps_type = "";
|
||||
// US 488 : mise en place Télétravail
|
||||
$teletravail="";
|
||||
// * US 329 : mise en place du nombre d'heure
|
||||
$nombre_heure="0";
|
||||
$extra = $options['data']->getExtra();
|
||||
if ($extra != null) {
|
||||
if(is_array($extra)){
|
||||
$contract_type = $extra['contract_type'];
|
||||
if (array_key_exists("temps_type",$extra)){
|
||||
$temps_type = $extra['temps_type'];
|
||||
}
|
||||
// * US 380 : mise en place du nombre de mois de contrat de CDD
|
||||
if (array_key_exists("duree_contrat",$extra)){
|
||||
$duree_contrat = $extra['duree_contrat'];
|
||||
}
|
||||
// US 488 : mise en place Télétravail
|
||||
if (array_key_exists("teletravail",$extra)){
|
||||
$teletravail = $extra['teletravail'];
|
||||
}
|
||||
// * US 329 : mise en place du nombre d'heure
|
||||
if (array_key_exists("nombre_heure",$extra)){
|
||||
$nombre_heure = $extra['nombre_heure'];
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -40,8 +65,9 @@ class AdSoftType extends AbstractType
|
||||
$builder
|
||||
->add('location_gmap', TextType::class, array(
|
||||
'mapped' => false,
|
||||
'label' => 'Localisation de l\'annonce',
|
||||
'label' => 'Localisation du poste',
|
||||
'attr' => array(
|
||||
'placeholder' => 'Ex : 3 Rue Louis de Broglie, Vannes, France',
|
||||
'value' => $location_gmap,
|
||||
'class' => 'form-control'
|
||||
)
|
||||
@@ -53,18 +79,18 @@ class AdSoftType extends AbstractType
|
||||
)
|
||||
))
|
||||
->add('description', TextareaType::class, array(
|
||||
'label' => 'Description de l\'annonce',
|
||||
'label' => 'Description du poste',
|
||||
'attr' => array(
|
||||
'class' => 'materialize-textarea',
|
||||
'placeholder' => 'Décrire votre annonce',
|
||||
'class' => 'form-control'
|
||||
'placeholder' => 'Décrire le poste, les missions, le profil recherché...',
|
||||
'class' => 'form-control',
|
||||
'style' => 'min-height:250px;'
|
||||
)
|
||||
))
|
||||
->add('beneficiaire', TextType::class, array(
|
||||
'label' => 'Organisation cliente ',
|
||||
'label' => "Nom de l'organisation",
|
||||
'required' => false,
|
||||
'attr' => array(
|
||||
'placeholder' => 'Indiquer une organisation',
|
||||
'class' => 'form-control'
|
||||
)
|
||||
))
|
||||
@@ -76,31 +102,111 @@ class AdSoftType extends AbstractType
|
||||
'CDI' => 'CDI',
|
||||
'CDD' => 'CDD',
|
||||
'Apprentissage' => 'Apprentissage',
|
||||
'Professionalisation' => 'Professionalisation',
|
||||
'Contrat de professionnalisation' => 'professionnalisation',
|
||||
'Stage' => 'Stage',
|
||||
'Indépendant' => 'Indépendant'
|
||||
'Indépendant' => 'Indépendant',
|
||||
'Interim' => 'Interim'
|
||||
),
|
||||
'attr' => array(
|
||||
'class' => 'form-control'
|
||||
'class' => 'form-control',
|
||||
//'data-init-plugin' => 'cs-select'
|
||||
|
||||
)
|
||||
))
|
||||
->add('status', ChoiceType::class, array(
|
||||
->add('duree_contrat', IntegerType::class, array(
|
||||
'mapped' => false,
|
||||
'label' => 'Durée du contrat en mois',
|
||||
'empty_data' => "0",
|
||||
'required' => false,
|
||||
'attr' => array(
|
||||
'value' => $duree_contrat,
|
||||
'class' => 'form-control',
|
||||
'placeholder' => 'Ex : 6',
|
||||
'min' => '0',
|
||||
'max' => '36',
|
||||
)
|
||||
))
|
||||
->add('appellationId', HiddenType::class, array(
|
||||
'mapped' => true,
|
||||
'label' => 'Id de l appellation',
|
||||
'attr' => array(
|
||||
'class' => 'form-control',
|
||||
)
|
||||
))
|
||||
->add('appellationLibelle', HiddenType::class, array(
|
||||
'mapped' => true,
|
||||
'label' => 'Libellé de l appellation',
|
||||
'attr' => array(
|
||||
'class' => 'form-control',
|
||||
)
|
||||
))
|
||||
->add('codeRome', HiddenType::class, array(
|
||||
'mapped' => true,
|
||||
'label' => 'code ROME',
|
||||
'attr' => array(
|
||||
'class' => 'form-control',
|
||||
)
|
||||
))
|
||||
->add('temps_type', ChoiceType::class, array(
|
||||
'mapped' => false,
|
||||
'label' => 'Type d\'emploi ',
|
||||
'data' => $temps_type,
|
||||
'choices' => array(
|
||||
'Temps plein ' => 'FULL_TIME',
|
||||
'Temps partiel ' => 'PART_TIME',
|
||||
'Temps plein ou temps partiel' => 'MIX_TIME',
|
||||
),
|
||||
'attr' => array(
|
||||
'class' => 'form-control',
|
||||
//'data-init-plugin' => 'cs-select'
|
||||
|
||||
)
|
||||
))
|
||||
->add('nombre_heure', IntegerType::class, array(
|
||||
'mapped' => false,
|
||||
'label' => "Temps de travail (Le nombre saisi correspond au nombre d'heures/semaine.)",
|
||||
'empty_data' => "0",
|
||||
'required' => false,
|
||||
'attr' => array(
|
||||
'value' => $nombre_heure,
|
||||
'class' => 'form-control',
|
||||
'placeholder' => 'Ex : 20',
|
||||
'min' => '0',
|
||||
'max' => '35',
|
||||
)
|
||||
))
|
||||
->add('teletravail', ChoiceType::class, array(
|
||||
'mapped' => false,
|
||||
'label' => 'Possibilité de faire du Télétravail?',
|
||||
'data' => $teletravail,
|
||||
'choices' => array(
|
||||
'Occasionnel ' => 'tele_occasionel',
|
||||
'Partiel ' => 'tele_partiel',
|
||||
'Total' => 'tele_total',
|
||||
'Non' => 'tele_non',
|
||||
),
|
||||
'attr' => array(
|
||||
'class' => 'form-control',
|
||||
//'data-init-plugin' => 'cs-select'
|
||||
|
||||
)
|
||||
))
|
||||
->add('status', HiddenType::class, array(
|
||||
'label' =>'Statut',
|
||||
'choices' => array(
|
||||
'Brouillon' => 'DRAFT',
|
||||
'A publier' => 'TO_PUBLISH',
|
||||
),
|
||||
'attr' => array(
|
||||
'class' => 'form-control'
|
||||
'class' => 'form-control',
|
||||
'value' => 'TO_PUBLISH',
|
||||
)
|
||||
|
||||
))
|
||||
->add('publicTag', TextType::class, array(
|
||||
'label' => 'profile.company.tags',
|
||||
'data' => $publicTags,
|
||||
->add('competences', HiddenType::class, array(
|
||||
'mapped' => false,
|
||||
'label' => 'competences',
|
||||
'data' => $competences,
|
||||
'attr' => array(
|
||||
'class' => 'form-control'
|
||||
)
|
||||
)
|
||||
));
|
||||
)
|
||||
;
|
||||
}
|
||||
}
|
||||
@@ -7,6 +7,8 @@ use Symfony\Component\Form\Extension\Core\Type\HiddenType;
|
||||
use Symfony\Component\Form\Extension\Core\Type\TextareaType;
|
||||
use Symfony\Component\Form\Extension\Core\Type\TextType;
|
||||
use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
|
||||
use Symfony\Component\Form\Extension\Core\Type\IntegerType;
|
||||
|
||||
use Symfony\Component\Form\FormBuilderInterface;
|
||||
|
||||
class AdType extends AbstractType
|
||||
@@ -19,11 +21,39 @@ class AdType extends AbstractType
|
||||
$publicTags = implode(',', $publicTags);
|
||||
}
|
||||
}
|
||||
$competences = json_encode($options['data']->getCompetences());
|
||||
//dump($competences);
|
||||
$contract_type = "";
|
||||
//US 380 : mise en place de la durée de contrat pour un CDD
|
||||
$duree_contrat="0";
|
||||
$temps_type = "";
|
||||
// * US 295 : mise en place du champ télétravail
|
||||
$teletravail="";
|
||||
// * US 329 : mise en place du nombre d'heure
|
||||
$nombre_heure="0";
|
||||
$extra = $options['data']->getExtra();
|
||||
|
||||
if ($extra != null) {
|
||||
if(is_array($extra)){
|
||||
$contract_type = $extra['contract_type'];
|
||||
|
||||
if (array_key_exists("contract_type",$extra)){
|
||||
$contract_type = $extra['contract_type'];
|
||||
}
|
||||
// * US 380 : mise en place du nombre de mois de contrat de CDD
|
||||
if (array_key_exists("duree_contrat",$extra)){
|
||||
$duree_contrat = $extra['duree_contrat'];
|
||||
}
|
||||
if (array_key_exists("temps_type",$extra)){
|
||||
$temps_type = $extra['temps_type'];
|
||||
}
|
||||
// * US 329 : mise en place du nombre d'heure
|
||||
if (array_key_exists("nombre_heure",$extra)){
|
||||
$nombre_heure = $extra['nombre_heure'];
|
||||
}
|
||||
// * US 295 : mise en place du champ télétravail
|
||||
if (array_key_exists("teletravail",$extra)){
|
||||
$teletravail = $extra['teletravail'];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -41,42 +71,43 @@ class AdType extends AbstractType
|
||||
->add('reference', TextType::class, array(
|
||||
'label' => 'Référence de l\'annonce',
|
||||
'attr' => array(
|
||||
'placeholder' => 'Indiquer une référence',
|
||||
'placeholder' => 'Ex : OFFRE_521',
|
||||
'class' => 'form-control'
|
||||
)
|
||||
))
|
||||
->add('title', TextType::class, array(
|
||||
'label' => 'Titre de l\'annonce',
|
||||
'label' => 'Intitulé du poste',
|
||||
'attr' => array(
|
||||
'placeholder' => 'Indiquer un titre',
|
||||
'placeholder' => 'Ex : Commercial (H/F)',
|
||||
'class' => 'form-control'
|
||||
)
|
||||
))
|
||||
->add('beneficiaire', TextType::class, array(
|
||||
'label' => 'Organisation cliente ',
|
||||
'label' => "Nom de l'organisation",
|
||||
'required' => false,
|
||||
'attr' => array(
|
||||
'placeholder' => 'Indiquer une organisation',
|
||||
'class' => 'form-control'
|
||||
)
|
||||
))
|
||||
->add('location_gmap', TextType::class, array(
|
||||
'mapped' => false,
|
||||
'label' => 'Localisation de l\'annonce',
|
||||
'label' => 'Localisation du poste',
|
||||
'attr' => array(
|
||||
'value' => $location_gmap,
|
||||
'class' => 'form-control'
|
||||
'class' => 'form-control',
|
||||
'placeholder' => 'Ex : 3 Rue Louis de Broglie, Vannes, France',
|
||||
)
|
||||
))
|
||||
->add('location', HiddenType::class, array(
|
||||
'data' => $location,
|
||||
))
|
||||
->add('description', TextareaType::class, array(
|
||||
'label' => 'Description de l\'annonce',
|
||||
'label' => 'Description du poste',
|
||||
'attr' => array(
|
||||
'class' => 'materialize-textarea',
|
||||
'placeholder' => 'Décrire votre annonce',
|
||||
'class' => 'form-control'
|
||||
'placeholder' => 'Décrire le poste, les missions, le profil recherché...',
|
||||
'class' => 'form-control',
|
||||
'style' => 'min-height:250px;'
|
||||
)
|
||||
))
|
||||
->add('contract_type', ChoiceType::class, array(
|
||||
@@ -87,33 +118,104 @@ class AdType extends AbstractType
|
||||
'CDI' => 'CDI',
|
||||
'CDD' => 'CDD',
|
||||
'Apprentissage' => 'Apprentissage',
|
||||
'Professionalisation' => 'Professionalisation',
|
||||
'Contrat de professionnalisation' => 'professionnalisation',
|
||||
'Stage' => 'Stage',
|
||||
'Indépendant' => 'Indépendant'
|
||||
'Indépendant' => 'Indépendant',
|
||||
'Interim' => 'Interim'
|
||||
),
|
||||
'attr' => array(
|
||||
'class' => 'form-control'
|
||||
'class' => 'form-control',
|
||||
//'data-init-plugin' => 'cs-select'
|
||||
|
||||
)
|
||||
))
|
||||
->add('publicTag', TextType::class, array(
|
||||
'label' => 'profile.company.tags',
|
||||
'data' => $publicTags,
|
||||
->add('duree_contrat', IntegerType::class, array(
|
||||
'mapped' => false,
|
||||
'label' => 'Durée du contrat en mois',
|
||||
'empty_data' => "0",
|
||||
'required' => false,
|
||||
'attr' => array(
|
||||
'value' => $publicTags,
|
||||
'class' => 'form-control'
|
||||
'value' => $duree_contrat,
|
||||
'class' => 'form-control',
|
||||
'placeholder' => 'Ex : 6',
|
||||
'min' => '0',
|
||||
'max' => '36',
|
||||
)
|
||||
))
|
||||
->add('status', ChoiceType::class, array(
|
||||
'label' =>'Statut',
|
||||
'choices' => array(
|
||||
'Brouillon' => 'DRAFT',
|
||||
'A publier' => 'TO_PUBLISH',
|
||||
->add('appellationId', HiddenType::class, array(
|
||||
'mapped' => true,
|
||||
'label' => 'Id de l appellation',
|
||||
'attr' => array(
|
||||
'class' => 'form-control',
|
||||
)
|
||||
))
|
||||
->add('appellationLibelle', HiddenType::class, array(
|
||||
'mapped' => true,
|
||||
'label' => 'Libellé de l appellation',
|
||||
'attr' => array(
|
||||
'class' => 'form-control',
|
||||
)
|
||||
))
|
||||
->add('codeRome', HiddenType::class, array(
|
||||
'mapped' => true,
|
||||
'label' => 'code ROME',
|
||||
'attr' => array(
|
||||
'class' => 'form-control',
|
||||
)
|
||||
))
|
||||
->add('temps_type', ChoiceType::class, array(
|
||||
'mapped' => false,
|
||||
'label' => 'Type d\'emploi ',
|
||||
'data' => $temps_type,
|
||||
'choices' => array(
|
||||
'Temps plein ' => 'FULL_TIME',
|
||||
'Temps partiel ' => 'PART_TIME',
|
||||
'Temps plein ou temps partiel' => 'MIX_TIME',
|
||||
),
|
||||
'attr' => array(
|
||||
'class' => 'form-control'
|
||||
'class' => 'form-control',
|
||||
//'data-init-plugin' => 'cs-select'
|
||||
|
||||
)
|
||||
))
|
||||
->add('nombre_heure', IntegerType::class, array(
|
||||
'mapped' => false,
|
||||
'label' => "Temps de travail (Le nombre saisi correspond au nombre d'heures/semaine.)",
|
||||
'empty_data' => "0",
|
||||
'required' => false,
|
||||
'attr' => array(
|
||||
'value' => $nombre_heure,
|
||||
'class' => 'form-control',
|
||||
'placeholder' => 'Ex : 20',
|
||||
'min' => '0',
|
||||
'max' => '35',
|
||||
)
|
||||
))
|
||||
->add('teletravail', ChoiceType::class, array(
|
||||
'mapped' => false,
|
||||
'label' => 'Possibilité de faire du Télétravail?',
|
||||
'data' => $teletravail,
|
||||
'choices' => array(
|
||||
'Occasionnel ' => 'tele_occasionel',
|
||||
'Partiel ' => 'tele_partiel',
|
||||
'Total' => 'tele_total',
|
||||
'Non' => 'tele_non',
|
||||
),
|
||||
'attr' => array(
|
||||
'class' => 'form-control',
|
||||
//'data-init-plugin' => 'cs-select'
|
||||
)
|
||||
))
|
||||
->add('competences', HiddenType::class, array(
|
||||
'mapped' => false,
|
||||
'label' =>'Compétences',
|
||||
'data' => $competences,
|
||||
'attr' => array(
|
||||
'class' => 'form-control',
|
||||
)
|
||||
|
||||
));
|
||||
))
|
||||
;
|
||||
// ->add('privateTag', TextType::class, array(
|
||||
// 'label' => 'private Tags',
|
||||
// 'data' => $privateTags
|
||||
|
||||
@@ -39,7 +39,7 @@ class AdType extends AbstractType
|
||||
)
|
||||
))
|
||||
->add('title', TextType::class, array(
|
||||
'label' => 'Titre de l\'annonce',
|
||||
'label' => 'Intitulé du poste',
|
||||
'attr' => array(
|
||||
'placeholder' => 'Indiquer un titre',
|
||||
'class' => 'form-control'
|
||||
@@ -47,10 +47,11 @@ class AdType extends AbstractType
|
||||
))
|
||||
->add('location_gmap', TextType::class, array(
|
||||
'mapped' => false,
|
||||
'label' => 'Localisation de l\'annonce',
|
||||
'label' => 'Localisation du poste',
|
||||
'attr' => array(
|
||||
'value' => $location_gmap,
|
||||
'class' => 'form-control'
|
||||
'class' => 'form-control',
|
||||
'placeholder' => 'Ex : 3 Rue Louis de Broglie, Vannes, France',
|
||||
)
|
||||
))
|
||||
->add('location', HiddenType::class, array(
|
||||
@@ -60,7 +61,7 @@ class AdType extends AbstractType
|
||||
)
|
||||
))
|
||||
->add('beneficiaire', TextType::class, array(
|
||||
'label' => 'Organisation cliente ',
|
||||
'label' => 'Organisation cliente (facultatif)',
|
||||
'required' => false,
|
||||
'attr' => array(
|
||||
'placeholder' => 'Indiquer une organisation',
|
||||
@@ -68,24 +69,24 @@ class AdType extends AbstractType
|
||||
)
|
||||
))
|
||||
->add('description', TextareaType::class, array(
|
||||
'label' => 'Description de l\'annonce',
|
||||
'label' => 'Description du poste',
|
||||
'attr' => array(
|
||||
'placeholder' => 'Décrire votre annonce',
|
||||
'class' => 'form-control'
|
||||
)
|
||||
))
|
||||
->add('publicTag', TextType::class, array(
|
||||
'label' => 'Tags de l\'annonce (séparés par une virgules)',
|
||||
'data' => $publicTags,
|
||||
'attr' => array(
|
||||
'class' => 'form-control'
|
||||
)
|
||||
))
|
||||
// ->add('publicTag', TextType::class, array(
|
||||
// 'label' => 'Tags de l\'annonce (séparés par une virgules)',
|
||||
// 'data' => $publicTags,
|
||||
// 'attr' => array(
|
||||
// 'class' => 'form-control'
|
||||
// )
|
||||
// ))
|
||||
->add('status', ChoiceType::class, array(
|
||||
'label' =>'Statut',
|
||||
'choices' => array(
|
||||
'Brouillon' => 'DRAFT',
|
||||
'A publier' => 'TO_PUBLISH',
|
||||
'A publier (Validation par Talents Tube)' => 'TO_PUBLISH',
|
||||
'Validée' => 'VALIDATED',
|
||||
'Publiée' => 'PUBLISHED',
|
||||
'Fermée' => 'CLOSED',
|
||||
|
||||
@@ -9,6 +9,7 @@ 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\TextType;
|
||||
use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
|
||||
use Symfony\Component\Form\Extension\Core\Type\TextareaType;
|
||||
use Symfony\Component\Form\Extension\Core\Type\UrlType;
|
||||
use Symfony\Component\Form\FormBuilderInterface;
|
||||
@@ -36,8 +37,17 @@ class CompanyAdminType extends AbstractType
|
||||
->add('siren', TextType::class, array(
|
||||
'label' => 'profile.company.siren',
|
||||
))
|
||||
->add('size', TextType::class, array(
|
||||
// ->add('size', TextType::class, array(
|
||||
// 'label' => 'profile.company.size',
|
||||
// ))
|
||||
->add('size', ChoiceType::class, array(
|
||||
'label' => 'profile.company.size',
|
||||
'choices' => array(
|
||||
'TPE (1 à 9 salariés) ' => 1,
|
||||
'PME (10 à 249 salariés) ' => 10,
|
||||
'ETI (250 à 4 999 salariés)' =>250 ,
|
||||
'GE (à partir de 5 000 salariés)' => 5000,
|
||||
),
|
||||
))
|
||||
->add('isPrivate', CheckboxType::class, array(
|
||||
'label' => 'Page entreprise privé ( non listée en front )',
|
||||
|
||||
@@ -16,6 +16,7 @@ use Symfony\Component\Form\AbstractType;
|
||||
use Symfony\Component\Form\Extension\Core\Type\CountryType;
|
||||
use Symfony\Component\Form\Extension\Core\Type\FileType;
|
||||
use Symfony\Component\Form\Extension\Core\Type\TextType;
|
||||
use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
|
||||
use Symfony\Component\Form\Extension\Core\Type\TextareaType;
|
||||
use Symfony\Component\Form\Extension\Core\Type\UrlType;
|
||||
use Symfony\Component\Form\FormBuilderInterface;
|
||||
@@ -44,7 +45,8 @@ class CompanyProfileType extends AbstractType
|
||||
->add('description', TextareaType::class, array(
|
||||
'label' => 'profile.company.description',
|
||||
'attr' => array(
|
||||
'class' => 'form-control'
|
||||
'class' => 'form-control',
|
||||
'style'=>"min-height:250px;"
|
||||
)
|
||||
))
|
||||
->add('website', UrlType::class, array(
|
||||
@@ -62,12 +64,26 @@ class CompanyProfileType extends AbstractType
|
||||
'class' => 'form-control'
|
||||
)
|
||||
))
|
||||
->add('size', TextType::class, array(
|
||||
->add('size', ChoiceType::class, array(
|
||||
'label' => 'profile.company.size',
|
||||
'choices' => array(
|
||||
'TPE (1 à 9 salariés) ' => 1,
|
||||
'PME (10 à 249 salariés) ' => 10,
|
||||
'ETI (250 à 4 999 salariés)' =>250 ,
|
||||
'GE (à partir de 5 000 salariés)' => 5000,
|
||||
),
|
||||
'attr' => array(
|
||||
'class' => 'form-control'
|
||||
)
|
||||
));
|
||||
))
|
||||
// ->add('size', TextType::class, array(
|
||||
// 'label' => 'profile.company.size',
|
||||
// 'attr' => array(
|
||||
// 'class' => 'form-control'
|
||||
// )
|
||||
// ))
|
||||
;
|
||||
|
||||
// Addresses fields
|
||||
$builder
|
||||
->add('address', TextType::class, array(
|
||||
@@ -102,15 +118,15 @@ class CompanyProfileType extends AbstractType
|
||||
)
|
||||
));
|
||||
//Tags field
|
||||
$builder
|
||||
->add('tagsComma', TextType::class, array(
|
||||
'label' => 'profile.company.tags',
|
||||
'attr' => array(
|
||||
'data-role'=>"materialtags",
|
||||
'placeholder' => 'Insérez une virgule ou appuyez sur ENTRÉE pour séparer vos mots-clés.',
|
||||
'class' => 'form-control'
|
||||
)
|
||||
));
|
||||
// $builder
|
||||
// ->add('tagsComma', TextType::class, array(
|
||||
// 'label' => 'profile.company.tags',
|
||||
// 'attr' => array(
|
||||
// 'data-role'=>"materialtags",
|
||||
// 'placeholder' => 'Insérez une virgule ou appuyez sur ENTRÉE pour séparer vos mots-clés.',
|
||||
// 'class' => 'form-control'
|
||||
// )
|
||||
// ));
|
||||
// File fields
|
||||
/*$builder
|
||||
->add('file', FileType::class, array(
|
||||
|
||||
@@ -16,28 +16,29 @@ class ContactTalentType extends AbstractType
|
||||
'label' => false,
|
||||
'required' => true,
|
||||
'attr' => array(
|
||||
'placeholder' => 'Rédigez un message de réponse',
|
||||
'class' => 'form-control'
|
||||
'placeholder' => 'Rédigez un message de réponse.',
|
||||
'class' => 'form-control',
|
||||
'style'=>"min-height:250px;"
|
||||
)
|
||||
));
|
||||
if(!isset($options['data']['subject']) || ($options['data']['subject'] == true)){
|
||||
$arraySubjects = array(
|
||||
'Choisir un statut' => null,
|
||||
'POSITIVE' => 'POSITIVE',
|
||||
'INFOS' => 'INFOS',
|
||||
'CONTACTED.RDV' => 'CONTACTED.RDV',
|
||||
'NEGATIVE' => 'NEGATIVE'
|
||||
);
|
||||
$builder
|
||||
->add('status', ChoiceType::class, array(
|
||||
'label' => false,
|
||||
'required' => true,
|
||||
'choices' => $arraySubjects,
|
||||
'attr' => array(
|
||||
'id' => 'test',
|
||||
'class' => 'form-control'
|
||||
)
|
||||
));
|
||||
}
|
||||
// if(!isset($options['data']['subject']) || ($options['data']['subject'] == true)){
|
||||
// $arraySubjects = array(
|
||||
// 'Choisir un statut' => null,
|
||||
// 'POSITIVE' => 'POSITIVE',
|
||||
// 'INFOS' => 'INFOS',
|
||||
// 'CONTACTED.RDV' => 'CONTACTED.RDV',
|
||||
// 'NEGATIVE' => 'NEGATIVE'
|
||||
// );
|
||||
// $builder
|
||||
// ->add('status', ChoiceType::class, array(
|
||||
// 'label' => false,
|
||||
// 'required' => true,
|
||||
// 'choices' => $arraySubjects,
|
||||
// 'attr' => array(
|
||||
// 'id' => 'test',
|
||||
// 'class' => 'form-control'
|
||||
// )
|
||||
// ));
|
||||
// }
|
||||
}
|
||||
}
|
||||
@@ -3,7 +3,7 @@ namespace AppBundle\Form;
|
||||
|
||||
use AppBundle\Entity\Note;
|
||||
use Symfony\Component\Form\AbstractType;
|
||||
use Symfony\Component\Form\Extension\Core\Type\TextType;
|
||||
use Symfony\Component\Form\Extension\Core\Type\TextareaType;
|
||||
use Symfony\Component\Form\FormBuilderInterface;
|
||||
use Symfony\Component\OptionsResolver\OptionsResolver;
|
||||
|
||||
@@ -11,10 +11,15 @@ class NoteAjaxType extends AbstractType
|
||||
{
|
||||
public function buildForm(FormBuilderInterface $builder, array $options)
|
||||
{
|
||||
//
|
||||
$builder
|
||||
->add('content', TextType::class, array(
|
||||
->add('content', TextareaType::class, array(
|
||||
'label' => 'Note',
|
||||
'required' => true,
|
||||
'attr' => array(
|
||||
'class' => 'form-control',
|
||||
'rows' =>"5"
|
||||
)
|
||||
));
|
||||
}
|
||||
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user