Compare commits
33 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 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 |
@@ -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;
|
||||
@@ -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,12 @@
|
||||
<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>{% if m.answerid %}({{ m.adtitle }}){% else %}<b>Vidéo orpheline</b>{% endif %}</td>
|
||||
<td>
|
||||
<span class="label pull-right bg-orange">{{ m.status }}</span>
|
||||
<span class="label pull-right bg-orange">{{ m.sendtime }}</span>
|
||||
</td>
|
||||
<td>
|
||||
<a href="{{ path('admin_video_moderation',{'id':m.id}) }}">
|
||||
@@ -67,9 +69,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>
|
||||
|
||||
@@ -32,7 +32,7 @@
|
||||
<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>
|
||||
|
||||
@@ -49,7 +49,7 @@
|
||||
<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>
|
||||
<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>
|
||||
@@ -64,7 +64,7 @@
|
||||
<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();">Remplacer</button>
|
||||
onclick="chargerCompetences();">Sélectionner</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -44,7 +44,7 @@
|
||||
<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>
|
||||
<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>
|
||||
@@ -59,7 +59,7 @@
|
||||
<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();">Remplacer</button>
|
||||
onclick="chargerCompetences();">Sélectionner</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -131,7 +131,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>
|
||||
|
||||
@@ -89,46 +89,89 @@ Afin de créer votre annonce, renseignez l’ensemble des champs relatifs au pos
|
||||
</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-6 b-r b-dashed b-grey ">
|
||||
<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éos à 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éos 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-primary" type="submit" onClick='$("#encours").show();'>Envoyer les séquences vidéos</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éos 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-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/>
|
||||
<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>
|
||||
</div>
|
||||
</div>
|
||||
<div id="tab-video-select" class="col s12">
|
||||
<div class="row">
|
||||
@@ -243,6 +286,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,10 +49,230 @@
|
||||
<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">
|
||||
<!-- START BREADCRUMB -->
|
||||
<ol class="breadcrumb">
|
||||
<li class="breadcrumb-item"><a href="/entreprise/me/">Accueil</a></li>
|
||||
</ol>
|
||||
<!-- END BREADCRUMB -->
|
||||
<div class="row">
|
||||
<div class="col-xl-12 col-lg-12 ">
|
||||
<!-- START card -->
|
||||
<div class="card card-transparent">
|
||||
<div class="card-header ">
|
||||
</div>
|
||||
<div class="card-body">
|
||||
|
||||
<a class="btn-square" target="_self" href="{{ path('company_ad_create') }}">
|
||||
<button aria-label=""
|
||||
class="btn btn-primary btn-cons">{{ 'ad.company.add.label'|trans }}</button>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
<!-- END card -->
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!-- END JUMBOTRON -->
|
||||
|
||||
|
||||
|
||||
<!-- 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 %}
|
||||
|
||||
@@ -61,178 +281,192 @@
|
||||
{# <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 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;
|
||||
}
|
||||
});
|
||||
} 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);
|
||||
{
|
||||
#
|
||||
function loadChartData() {
|
||||
setArrayValues();
|
||||
myChart.update();
|
||||
myDoughnutChart.update();
|
||||
}#
|
||||
}
|
||||
|
||||
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"
|
||||
}]
|
||||
};
|
||||
{
|
||||
#
|
||||
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();
|
||||
}
|
||||
});
|
||||
}#
|
||||
}
|
||||
|
||||
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 %}
|
||||
@@ -19,7 +19,8 @@
|
||||
<!-- Title -->
|
||||
<header class="text-center mb-5">
|
||||
<h2 class="h4 mb-0">Connexion</h2>
|
||||
<p>Connectez-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>
|
||||
|
||||
|
||||
@@ -143,4 +144,4 @@
|
||||
<!-- End Content -->
|
||||
</div>
|
||||
<!-- End Signup Modal Window -->
|
||||
<!-- ========== END SECONDARY CONTENTS ========== -->
|
||||
<!-- ========== END SECONDARY CONTENTS ========== -->
|
||||
|
||||
@@ -36,8 +36,7 @@
|
||||
<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>
|
||||
<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>
|
||||
|
||||
@@ -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="https://recruteur.talentstube.com/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="https://recruteur.talentstube.com/img/mail/facebook.png" alt="Facebook"></a>
|
||||
<a style="margin:10px 20px 22px 20px;" href="https://twitter.com/TalentsTuber"><img src="https://recruteur.talentstube.com/img/mail/twitter.png" alt="Twitter"></a>
|
||||
<a style="margin:10px 20px 22px 20px;" href="https://www.linkedin.com/company/talentstube"><img src="https://recruteur.talentstube.com/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>Village By CA - 3 rue Louis de Broglie - PIBS - 56000 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>
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -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 ignorer 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 ignorer 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 %}
|
||||
@@ -80,7 +80,8 @@ twig:
|
||||
globals:
|
||||
push_public_key: "%push_params.public_key%"
|
||||
fairlane_cookie_consent: '@fairlane_cookie_consent.twig'
|
||||
version: '%app.version%'
|
||||
version: '2.5.4'
|
||||
|
||||
|
||||
|
||||
# Swiftmailer Configuration
|
||||
|
||||
@@ -1,6 +1,8 @@
|
||||
# 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
|
||||
@@ -25,8 +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
|
||||
app.version: 2.3.4
|
||||
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,4 +1,6 @@
|
||||
parameters:
|
||||
mailjet_public: 355697fac93fca865660734b4fdffaeb
|
||||
mailjet_private : ddecf75321ca89c09e561857b13534c8
|
||||
mailer_transport: smtp
|
||||
mailer_host: mail.gandi.net
|
||||
# mailer_user: noreply@talentstube.io
|
||||
@@ -30,8 +32,8 @@ parameters:
|
||||
|
||||
elastic_host: tt-website.elasticsearch.preprod
|
||||
elastic_port: 9200
|
||||
delivery_addresses: l.laniau@talentstube.com
|
||||
app.version: 2.3.4
|
||||
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,4 +1,6 @@
|
||||
parameters:
|
||||
mailjet_public: 355697fac93fca865660734b4fdffaeb
|
||||
mailjet_private : ddecf75321ca89c09e561857b13534c8
|
||||
mailer_transport: smtp
|
||||
mailer_host: mail.gandi.net
|
||||
#mailer_user: noreply@talentstube.com
|
||||
@@ -22,15 +24,15 @@ 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
|
||||
app.version: 2.3.4
|
||||
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,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",
|
||||
|
||||
@@ -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,12 +108,16 @@ class UserController extends Controller
|
||||
}
|
||||
|
||||
\assert(!\is_null($user));
|
||||
// $company = $user->getCompany();
|
||||
$company = $user->getCompany();
|
||||
// if ($company) {
|
||||
// $company->setPresentationVideo(null);
|
||||
// $em->persist($company);
|
||||
// $em->flush();
|
||||
// $em->remove($company);
|
||||
// $em->flush();
|
||||
// }
|
||||
if ($company) {
|
||||
$company->setPresentationVideo(null);
|
||||
$em->persist($company);
|
||||
$em->flush();
|
||||
}
|
||||
$this->deleteRelation($user);
|
||||
$em->remove($user);
|
||||
$em->flush();
|
||||
@@ -125,7 +129,7 @@ class UserController extends Controller
|
||||
// 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);
|
||||
}
|
||||
|
||||
@@ -18,7 +18,12 @@ 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
|
||||
{
|
||||
/**
|
||||
@@ -379,34 +384,94 @@ 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 = $user->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,
|
||||
]
|
||||
]
|
||||
]
|
||||
];
|
||||
}
|
||||
$response = $mj->post(Resources::$Email, ['body' => $body]);
|
||||
$response->success() && var_dump($response->getData());
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
$messageText = $form['message']->getData();
|
||||
if(!$messageText){
|
||||
$messageText = "";
|
||||
}
|
||||
$mediaManager = $this->get('media_manager');
|
||||
$mediaManager->getThumbnails($message);
|
||||
$htmlView = $this->renderView('email/contact_talent.html.twig', array(
|
||||
'type' => 'html',
|
||||
'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'))
|
||||
->setReplyTo($this->getParameter('mailer_user'))
|
||||
->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);
|
||||
|
||||
@@ -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';
|
||||
@@ -160,35 +166,68 @@ class AnswerController extends FOSRestController
|
||||
$message->setVideo($video);
|
||||
$em->persist($message);
|
||||
$em->flush();*/
|
||||
if ($this->container->get( 'kernel' )->getEnvironment() != "dev") {
|
||||
|
||||
|
||||
//if ($this->container->get( 'kernel' )->getEnvironment() != "dev") {
|
||||
|
||||
|
||||
$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' => $answer->getId()), UrlGeneratorInterface::ABSOLUTE_URL);
|
||||
$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>
|
||||
$contactMail = $user->getEmail();
|
||||
if ($this->container->get( 'kernel' )->getEnvironment() == "dev") {
|
||||
$contactMail = "dev@talentstube.com";
|
||||
}
|
||||
$body = [
|
||||
'FromEmail' => "noreply@talentstube.io",
|
||||
'FromName' => "Talents Tube",
|
||||
'Subject' => "Une nouvelle candidature reçue sur Talents Tube",
|
||||
'MJ-TemplateID' =>2164146 ,
|
||||
'MJ-TemplateLanguage' => true,
|
||||
'Recipients' => [
|
||||
[
|
||||
'Email' => $contactMail,
|
||||
'Vars' => [
|
||||
'prenomRecruteur' => $user->getFirstname(),
|
||||
'nomRecruteur' => $user->getLastname(),
|
||||
'prenom' => $answer->getUser()->getFirstname(),
|
||||
'nom' => $answer->getUser()->getLastname(),
|
||||
'imgCandidature' => $img,
|
||||
'urlCandidature' => $link,
|
||||
]
|
||||
]
|
||||
]
|
||||
];
|
||||
$response = $mj->post(Resources::$Email, ['body' => $body]);
|
||||
$response->success() && var_dump($response->getData());
|
||||
|
||||
<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>
|
||||
|
||||
// $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 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'
|
||||
);
|
||||
// <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 {
|
||||
@@ -322,6 +361,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');
|
||||
@@ -388,30 +428,59 @@ class AnswerController extends FOSRestController
|
||||
$em->flush();*/
|
||||
$mailManager = $this->get('app.mail_manager');
|
||||
foreach ($usersCompany as $user){
|
||||
$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>
|
||||
$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]);
|
||||
|
||||
|
||||
<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'
|
||||
);
|
||||
// $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'
|
||||
// );
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -400,6 +400,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));
|
||||
@@ -408,6 +409,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"));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -17,6 +17,12 @@ 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
|
||||
{
|
||||
@@ -30,9 +36,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'],
|
||||
]);
|
||||
}
|
||||
@@ -211,27 +235,68 @@ class CompanyController extends Controller
|
||||
// $user,
|
||||
// 'contact_default'
|
||||
// );
|
||||
$message=$company->getBrandName()." vous invite à rejoindre la plateforme de recrutement vidéo Talents Tube.<br/>
|
||||
$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 ="";
|
||||
$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);
|
||||
// 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{
|
||||
|
||||
@@ -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")
|
||||
*/
|
||||
@@ -69,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'));
|
||||
@@ -111,14 +145,20 @@ class DefaultController extends Controller
|
||||
$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,
|
||||
@@ -331,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');
|
||||
|
||||
}
|
||||
|
||||
|
||||
@@ -14,11 +14,19 @@ 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
|
||||
{
|
||||
@@ -102,7 +110,15 @@ 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');
|
||||
|
||||
$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() == 'DECLINED' or ad.getStatus() == 'TO_PUBLISH'")
|
||||
@@ -115,6 +131,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()));
|
||||
@@ -141,11 +158,182 @@ class MediaController extends Controller
|
||||
$em->flush();
|
||||
}
|
||||
|
||||
|
||||
$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éos. 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,
|
||||
));
|
||||
}
|
||||
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
@@ -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) ?: [];
|
||||
}
|
||||
}
|
||||
@@ -377,7 +377,7 @@ class User extends BaseUser
|
||||
$zipCode = "";
|
||||
$city = "";
|
||||
$country = "";
|
||||
|
||||
$type=null;
|
||||
if($this->getCompany()->getPresentationVideo())
|
||||
{
|
||||
$pres= $this->getCompany()->getPresentationVideo()->getCdnUrl();
|
||||
@@ -407,6 +407,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"];
|
||||
@@ -424,6 +426,10 @@ class User extends BaseUser
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if($this->getCompany()->getType()){
|
||||
$type=$this->getCompany()->getType();
|
||||
}
|
||||
}
|
||||
|
||||
$card = array(
|
||||
@@ -443,6 +449,7 @@ class User extends BaseUser
|
||||
"zipCode" => $zipCode,
|
||||
"city" => $city,
|
||||
"country" => $country,
|
||||
"type" => $type,
|
||||
"currentJob" => $this->getCompany()->getExtra()["titleTalent"],
|
||||
"website" => $this->getCompany()->getWebsite(),
|
||||
);
|
||||
|
||||
@@ -179,7 +179,7 @@ class AdSoftType extends AbstractType
|
||||
'label' => 'Possibilité de faire du Télétravail?',
|
||||
'data' => $teletravail,
|
||||
'choices' => array(
|
||||
'Occasionnel ' => 'tele_occassionel',
|
||||
'Occasionnel ' => 'tele_occasionel',
|
||||
'Partiel ' => 'tele_partiel',
|
||||
'Total' => 'tele_total',
|
||||
'Non' => 'tele_non',
|
||||
|
||||
@@ -196,7 +196,7 @@ class AdType extends AbstractType
|
||||
'label' => 'Possibilité de faire du Télétravail?',
|
||||
'data' => $teletravail,
|
||||
'choices' => array(
|
||||
'Occasionnel ' => 'tele_occassionel',
|
||||
'Occasionnel ' => 'tele_occasionel',
|
||||
'Partiel ' => 'tele_partiel',
|
||||
'Total' => 'tele_total',
|
||||
'Non' => 'tele_non',
|
||||
|
||||
@@ -113,6 +113,26 @@ class AnswerRepository extends AbstractRepository
|
||||
->getResult();
|
||||
}
|
||||
|
||||
public function getAnswerByCompanyStatus($id, $status)
|
||||
{
|
||||
$qb = $this
|
||||
->createQueryBuilder('a')
|
||||
->select('a')
|
||||
->where('a.ad IN (
|
||||
SELECT p.id
|
||||
FROM AppBundle:Ad p
|
||||
WHERE p.company = :id
|
||||
)')
|
||||
->setParameter(':id', $id)
|
||||
->andWhere('a.status = :status')
|
||||
->setParameter(':status', $status)
|
||||
->orderBy('a.uTime','DESC');
|
||||
|
||||
return $qb
|
||||
->getQuery()
|
||||
->getResult();
|
||||
}
|
||||
|
||||
|
||||
public function getAnswerByAdsShare( $adId)
|
||||
{
|
||||
@@ -318,4 +338,26 @@ class AnswerRepository extends AbstractRepository
|
||||
"countResult" => $countResult
|
||||
);
|
||||
}
|
||||
|
||||
public function getMedias()
|
||||
{
|
||||
$qb = $this
|
||||
->createQueryBuilder('a')
|
||||
->select(['a','video'])
|
||||
->leftJoin('a.video', 'video')
|
||||
->andWhere('video.status = :status')
|
||||
->setParameter(':status', "TO_MODERATE")
|
||||
->orderBy('video.id', 'DESC');
|
||||
|
||||
|
||||
$medias = $qb->getQuery()->getResult();
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
return $medias;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2,12 +2,44 @@
|
||||
|
||||
namespace AppBundle\Repository;
|
||||
|
||||
use Doctrine\ORM\EntityRepository;
|
||||
|
||||
/**
|
||||
* MediaRepository
|
||||
*
|
||||
* This class was generated by the Doctrine ORM. Add your own custom
|
||||
* repository methods below.
|
||||
*/
|
||||
class MediaRepository extends \Doctrine\ORM\EntityRepository
|
||||
class MediaRepository extends AbstractRepository
|
||||
{
|
||||
public function getMedias()
|
||||
{
|
||||
$qb = $this
|
||||
->createQueryBuilder('m')
|
||||
->andWhere('m.status = :status')
|
||||
->setParameter(':status', "TO_MODERATE")
|
||||
->orderBy('m.id', 'DESC');
|
||||
|
||||
|
||||
$medias = $qb->getQuery()->getResult();
|
||||
$rawSql = "SELECT m.id as mediaid, m.title as title, m.original_url as original_url , u.* , a.id as answerId, a.send_time as sendtime, ad.title as adTitle
|
||||
FROM media AS m
|
||||
JOIN fos_user AS u ON (u.id=m.creator_id)
|
||||
LEFT JOIN answer AS a ON (a.video_id=m.id)
|
||||
LEFT JOIN ad AS ad ON (ad.id=a.ad_id)
|
||||
WHERE m.status='TO_MODERATE'
|
||||
ORDER by m.id DESC";
|
||||
|
||||
$stmt = $this->getEntityManager()->getConnection()->prepare($rawSql);
|
||||
$stmt->execute([]);
|
||||
|
||||
return $stmt->fetchAll();
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
//return $medias;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -77,8 +77,12 @@ class CompanyManager
|
||||
);
|
||||
}
|
||||
|
||||
$company->setExtra(null);
|
||||
$this->em->persist($company);
|
||||
$this->em->flush();
|
||||
$company->setExtra($extra);
|
||||
$company->upload();
|
||||
|
||||
//$company->uploadCv();
|
||||
}
|
||||
$this->em->persist($company);
|
||||
|
||||
@@ -96,12 +96,12 @@ class MailManager
|
||||
$email = \Swift_Message::newInstance()
|
||||
->setSubject($subject)
|
||||
->setFrom('noreply@talentstube.io')
|
||||
->setTo('c.leveque@talentstube.com')
|
||||
->setTo('dev@talentstube.com')
|
||||
->setBody($message, 'text/html')
|
||||
;
|
||||
if ($this->mailer->send($email)) {
|
||||
// $spool = $this->mailer->getTransport()->getSpool();
|
||||
// $spool->flushQueue($this->transport);
|
||||
// $spool = $this->mailer->getTransport()->getSpool();
|
||||
// $spool->flushQueue($this->transport);
|
||||
$message = array('success' => 200);
|
||||
} else {
|
||||
$message = array('success' => 500);
|
||||
|
||||
@@ -40,7 +40,7 @@ trait ExtraJsonTrait
|
||||
$extra = $this->extra;
|
||||
isset($extra['twitter']) ? $this->twitter = $extra['twitter'] : null;
|
||||
isset($extra['linkedin']) ? $this->linkedin = $extra['linkedin'] : null;
|
||||
isset($extra['size']) ? $this->size = $extra['size'] : null;
|
||||
isset($extra['size']) ? $this->size = $extra['size'] : 1;
|
||||
isset($extra['siren']) ? $this->siren = $extra['siren'] : null;
|
||||
isset($extra['phoneTalent']) ? $this->phoneTalent = $extra['phoneTalent'] : null;
|
||||
isset($extra['titleTalent']) ? $this->titleTalent = $extra['titleTalent'] : null;
|
||||
@@ -66,6 +66,8 @@ trait ExtraJsonTrait
|
||||
*/
|
||||
public function getExtra()
|
||||
{
|
||||
//19/01 : modif pour size et siren cote Symfony. Effet sur la web app?
|
||||
//$this->initExtra();
|
||||
return $this->extra;
|
||||
}
|
||||
|
||||
|
||||
+2
-2
@@ -35,7 +35,7 @@ abstract class AbstractFactory implements SecurityFactoryInterface
|
||||
protected $defaultSuccessHandlerOptions = [
|
||||
'always_use_default_target_path' => false,
|
||||
'default_target_path' => '/',
|
||||
'login_path' => '/login',
|
||||
'login_path' => '/',
|
||||
'target_path_parameter' => '_target_path',
|
||||
'use_referer' => false,
|
||||
];
|
||||
@@ -43,7 +43,7 @@ abstract class AbstractFactory implements SecurityFactoryInterface
|
||||
protected $defaultFailureHandlerOptions = [
|
||||
'failure_path' => null,
|
||||
'failure_forward' => false,
|
||||
'login_path' => '/login',
|
||||
'login_path' => '/?erreur=1',
|
||||
'failure_path_parameter' => '_failure_path',
|
||||
];
|
||||
|
||||
|
||||
@@ -35,4 +35,96 @@
|
||||
.font-2 {
|
||||
font-family: "Varela Round", sans-serif; }
|
||||
|
||||
.container-envoi-videos{
|
||||
width:100%;
|
||||
height:auto;
|
||||
border:1px solid #1689FB;
|
||||
border-radius:5px;
|
||||
margin-bottom:30px;
|
||||
}
|
||||
|
||||
.titre-bloc-envoi-videos{
|
||||
background-color:#1689FB;
|
||||
padding:15px;
|
||||
}
|
||||
|
||||
.image-envoi-video{
|
||||
display:inline-block;
|
||||
width:60px;
|
||||
height:60px;
|
||||
vertical-align: baseline;
|
||||
margin-right:20px;
|
||||
}
|
||||
|
||||
.texte-envoi-video{
|
||||
display:inline-block;
|
||||
}
|
||||
|
||||
.container-envoi-videos h4,.container-envoi-videos h5 {
|
||||
color:#fff;
|
||||
}
|
||||
|
||||
.container-envoi-videos h4{
|
||||
font-size:1.250em;
|
||||
}
|
||||
|
||||
.container-envoi-videos h5{
|
||||
font-size:1em;
|
||||
}
|
||||
|
||||
.contenu-bloc-envoi-videos{
|
||||
padding:15px;
|
||||
}
|
||||
|
||||
.contenu-bloc-envoi-videos p, .contenu-bloc-envoi-videos label{
|
||||
color:#000;
|
||||
font-weight: bold;
|
||||
font-size:1em;
|
||||
margin:10px 0;
|
||||
}
|
||||
|
||||
.contenu-bloc-envoi-videos button{
|
||||
display:block;
|
||||
margin :20px 0;
|
||||
}
|
||||
|
||||
.contenu-bloc-envoi-videos input{
|
||||
display:block;
|
||||
}
|
||||
|
||||
.underline{
|
||||
text-decoration : underline;
|
||||
|
||||
}
|
||||
|
||||
.text-card h3, .text-card span, .text-card h4{
|
||||
color:#fff;
|
||||
}
|
||||
|
||||
.card-background-1{
|
||||
background-color:#25D89A !important;
|
||||
border-radius:3px !important;
|
||||
padding:20px;
|
||||
min-height:180px;
|
||||
|
||||
}
|
||||
|
||||
.card-background-2{
|
||||
background-color:#1689fb !important;
|
||||
border-radius:3px !important;
|
||||
|
||||
padding:20px;
|
||||
min-height:180px;
|
||||
}
|
||||
|
||||
.card-background-3{
|
||||
background-color:#FF5A5F !important;
|
||||
border-radius:3px !important;
|
||||
padding:20px;
|
||||
min-height:180px;
|
||||
}
|
||||
|
||||
.vertical-border{
|
||||
border-right: 1px solid white;
|
||||
}
|
||||
|
||||
@@ -0,0 +1,62 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<urlset
|
||||
xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://www.sitemaps.org/schemas/sitemap/0.9
|
||||
http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd">
|
||||
<!-- created with Free Online Sitemap Generator www.xml-sitemaps.com -->
|
||||
|
||||
|
||||
<url>
|
||||
<loc>https://recruteur.talentstube.com/</loc>
|
||||
<lastmod>2020-11-18T16:05:39+00:00</lastmod>
|
||||
<priority>1.00</priority>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://recruteur.talentstube.com/offre-emploi-video</loc>
|
||||
<lastmod>2020-11-18T16:05:39+00:00</lastmod>
|
||||
<priority>0.80</priority>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://recruteur.talentstube.com/marque-employeur-video</loc>
|
||||
<lastmod>2020-11-18T16:05:39+00:00</lastmod>
|
||||
<priority>0.80</priority>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://recruteur.talentstube.com/candidatures-video</loc>
|
||||
<lastmod>2020-11-18T16:05:39+00:00</lastmod>
|
||||
<priority>0.80</priority>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://recruteur.talentstube.com/mentions-legales</loc>
|
||||
<lastmod>2020-11-18T16:05:39+00:00</lastmod>
|
||||
<priority>0.80</priority>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://recruteur.talentstube.com/cgu</loc>
|
||||
<lastmod>2020-11-18T16:05:39+00:00</lastmod>
|
||||
<priority>0.80</priority>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://recruteur.talentstube.com/politique-confidentialite</loc>
|
||||
<lastmod>2020-11-18T16:05:39+00:00</lastmod>
|
||||
<priority>0.80</priority>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://recruteur.talentstube.com/abonnement</loc>
|
||||
<lastmod>2020-11-18T16:05:39+00:00</lastmod>
|
||||
<priority>0.80</priority>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://recruteur.talentstube.com/resetting/request</loc>
|
||||
<lastmod>2020-11-18T16:05:39+00:00</lastmod>
|
||||
<priority>0.80</priority>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://recruteur.talentstube.com/register/</loc>
|
||||
<lastmod>2020-11-18T16:05:39+00:00</lastmod>
|
||||
<priority>0.80</priority>
|
||||
</url>
|
||||
|
||||
|
||||
</urlset>
|
||||
Reference in New Issue
Block a user