Compare commits

...

11 Commits

Author SHA1 Message Date
Thomas MONCHICOURT 0d7c6466ec Fix : header et footer tuto 2018-09-19 11:24:37 +02:00
Thomas MONCHICOURT 68802a2a4d Feat : ajout de fonctionnalité admin #7249 @0h15 2018-09-12 15:15:03 +02:00
Thomas MONCHICOURT ceb2f7f7ce Feat : correction mineur #7244 @0h20 2018-09-12 14:22:02 +02:00
Thomas MONCHICOURT 49d47b70f6 Feat : ajout d’un status visionnée candidature talent #7229 @0h15 2018-09-10 15:56:01 +02:00
Thomas MONCHICOURT 49cc496661 Feat : changer les photos de temoignages #7220 @0h10 2018-09-10 15:13:01 +02:00
Thomas MONCHICOURT a46d69f190 Feat : mise en place suppression d’une candidature 2018-09-07 13:35:12 +02:00
Thomas MONCHICOURT 26a41d4eb6 Fix : modal tuto #7202 @1h 2018-09-06 16:52:39 +02:00
Thomas MONCHICOURT feca14ae4d Fix : ajouter au menu et changement status direct #7177 @0h10 2018-09-05 12:26:58 +02:00
Thomas MONCHICOURT 33c1221cb2 Feat : lister les candidatures en admin #7177 @1h 2018-09-05 12:16:56 +02:00
Thomas MONCHICOURT b13ebb9d0f Fix: birtday date error on save 2018-08-29 14:20:53 +02:00
Maxime Thévenot 76f557501e Fix : update registration template to fix button 2018-08-28 15:27:09 +02:00
26 changed files with 401 additions and 102 deletions
@@ -15,7 +15,7 @@
</p>
{% endif %}
<br/><br/>
{% if app.request.cookies.get('redirect_register')is defined %}
{% if app.request.cookies.get('redirect_register') is defined and app.request.cookies.get('redirect_register') is not null %}
<div class="center">
<a href="{{ app.request.cookies.get('redirect_register') }}" class="btn btn-default">Poursuivre votre candidature</a>
</div>
@@ -552,8 +552,20 @@
<source>label.answer.history.title</source>
<target>Historique des messages envoyés</target>
</trans-unit>
<!-- Territoires -->
<trans-unit id="message.territory.list.ads">
<source>message.territory.list.ads</source>
<target>offres d'emploi en cours sur ce territoire</target>
</trans-unit>
<trans-unit id="message.territory.list.ad">
<source>message.territory.list.ad</source>
<target>offre d'emploi en cours sur ce territoire</target>
</trans-unit>
<trans-unit id="message.territory.list.noads">
<source>message.territory.list.noads</source>
<target>Découvrez les entreprises qui recrutent sur ce territoire</target>
</trans-unit>
</body>
</file>
</xliff>
@@ -0,0 +1,134 @@
{% extends 'admin/base_admin.html.twig' %}
{% block contentHeader %}
<h1>
Liste des Candidatures
</h1>
<ol class="breadcrumb">
<li><a href="{{ path('admin_dashboard') }}"><i class="fa fa-dashboard"></i> Dashboard</a></li>
<li class="active">Annonces</li>
</ol>
{% endblock %}
{% block content %}
<div class="box box-primary">
<div class="box-body">
<table id="answer_list_table" class="table table-hover table-bordered">
<thead>
<tr>
<th class="col-xs-2">Date d'envoi</th>
<th>Utilisateur</th>
<th>Annonce / Entreprise</th>
<th>video</th>
<th>Status</th>
<th>action</th>
</tr>
</thead>
<tbody>
{% for answer in answers if answer.status != "DRAFT" %}
<tr>
<td data-order="{{ answer.sendTime|date('U') }}">{{ answer.sendTime|date('d/m/Y') }}</td>
<td>{{ answer.user.firstname }} {{ answer.user.lastname }}</td>
{% if answer.ad %}
<td>{{ answer.ad.company.brandname }} - {{ answer.ad.title }}</td>
{% else %}
<td>{{ answer.company.brandname }}</td>
{% endif %}
<td>
ID Candidature : {{ answer.id }}<br />
{% if answer.video.cdnUrl is defined %}
<iframe src="https://player.vimeo.com/video/{{ answer.video.cdnUrl|replace({ "/videos/": ""}) }}"
width="auto" height="auto" frameborder="0" webkitallowfullscreen mozallowfullscreen
allowfullscreen></iframe>
{% endif %}
</td>
<td class="status">{{ answer.status }}</td>
<td>
Actions :
<select class="changeStatus" name="changeStatus" data-id="{{ answer.id }}">
<option value="null">choisir</option>
<option value="SENDED">Envoyé</option>
<option value="DRAFT">Brouillon</option>
<option value="REFUSED">Refuser</option>
</select>
<br />
<a class="delete-answer" href='{{ path("admin_answer_delete",{'id':answer.id }) }}' data-toggle="tooltip" title="Supprimer">
Supprimer <i class="fa fa-trash"></i>
</a>
</td>
</tr>
{% endfor %}
</tbody>
</table>
</div>
</div>
{% endblock %}
{% block javascripts %}
<script>
$(function () {
$('.changeStatus').change(function(e){
e.preventDefault();
var idAnswer = $(this).data('id');
var value = $(this).val();
var route = '/app_dev.php/admin/config/answer/' + idAnswer + '/status/' + value;
var select = $(this);
$.ajax({
type: "POST",
url: route,
dataType: "json",
success: function (msg) {
console.log("ok");
select.parent().prev('.status').html(value);
}
});
});
$('#answer_list_table').DataTable({
"paging": true,
"lengthChange": true,
"searching": true,
"ordering": true,
"info": true,
"autoWidth": false,
"language": {
"url": "http://cdn.datatables.net/plug-ins/1.10.11/i18n/French.json"
},
"columnDefs": [
{"targets": 1, "searchable": true, "orderable": true},
{"targets": 2, "searchable": true, "orderable": true},
{"targets": 4, "searchable": true, "orderable": true, "className": "text-center"},
],
"order": [[ 0, "desc" ]]
});
$(".delete-answer").confirm({
title: "Êtes vous sûr de supprimer cette candidature ?",
content: "Supprimer cette candidature supprimera le média associé",
type: 'red',
boxWidth: '30%',
useBootstrap: false,
buttons: {
confirm: {
text: 'Confirmer',
action: function () {
console.log(this.$target);
location.href = this.$target.attr('href');
return true;
}
},
cancel: {
text: 'Annuler'
}
}
});
});
</script>
{% endblock %}
@@ -28,6 +28,11 @@
<i class="fa fa-file-video-o" aria-hidden="true"></i> <span>Vidéos Talent</span>
</a>
</li>
<li>
<a href="{{ path('admin_anwser_moderation_list') }}">
<i class="fa fa-file-video-o" aria-hidden="true"></i> <span>Candidatures</span>
</a>
</li>
</ul>
<ul class="sidebar-menu">
<li class="header">ENTITEES</li>
@@ -28,6 +28,7 @@
<i class="fa fa-star color-gold" aria-hidden="true"></i>
</span>
{% endif %}
<br/><i class="fa fa-link"></i>Url :<br /> https://www.talentstube.com{{ path("talent_show",{'alias':user.company.alias})}}<br />
</h3>
<br>
<span><a href="mailto:{{ user.email }}">{{ user.email }}</a></span>
@@ -1,13 +1,13 @@
<div id="modal-tuto" class="modal">
<div id="modal-tuto" class="modal modal-fixed-footer">
<div class="modal-content">
<div class="row">
<div class="col s12">
<h3 class="color-blue1 center-align title-tuto">Les conseils de Talents Tube</h3>
<div class="col-content">
<h3 class="color-blue1 center-align">Les conseils de Talents Tube</h3>
<div class="owl-carousel tuto-carousel">
<div class="item-tuto-webcam carousel-item">
<div class="row">
<div class="col s4 offset-s1 hide-on-med-and-down">
<div class="col s3 offset-s1 hide-on-med-and-down">
<img class="responsive-img" src="{{ asset('img/img_popupcv/cv_video_step_1.svg')}}" alt="">
</div>
<div class="col s11 m11 l6 offset-s1 left-align">
@@ -31,7 +31,7 @@
</div>
<div class="item-tuto-webcam carousel-item">
<div class="row">
<div class="col s4 offset-s1 hide-on-med-and-down">
<div class="col s3 offset-s1 hide-on-med-and-down">
<img class="responsive-img" src="{{ asset('img/img_popupcv/cv_video_step_2.svg')}}" alt="">
</div>
<div class="col s11 m11 l6 offset-s1 left-align">
@@ -51,7 +51,7 @@
</div>
<div class="item-tuto-webcam carousel-item">
<div class="row">
<div class="col s4 offset-s1 hide-on-med-and-down">
<div class="col s3 offset-s1 hide-on-med-and-down">
<img class="responsive-img" src="{{ asset('img/img_popupcv/cv_video_step_3.svg')}}" alt="">
</div>
<div class="col s11 m11 l6 offset-s1 left-align">
@@ -73,12 +73,15 @@
</div>
</div>
</div>
<div class="carousel-fixed-item right">
<a class="text close-tuto">Passer l'intro</a>
<a class="btn btn-default next-slide">suivant</a>
</div>
</div>
</div>
</div>
</div>
<div class="modal-footer">
<div id="customDots" class="owl-dots"></div>
<div class="carousel-fixed-item right">
<a class="text close-tuto">Passer l'intro</a>
<a class="btn btn-default next-slide">suivant</a>
</div>
</div>
</div>
@@ -32,15 +32,22 @@
<div class="row row-tags row-noMargin">
<div class="col s11 col-noPadding" style="position:relative;">
<div class="chip center-align">
{% set nbAds = c.getPublishedAds|length %}
{% set fragment = "" %}
{% if nbAds > 0 %}
{% set fragment = "offers" %}
{% endif %}
<a class="td-none color-grey3"
href="{{ path('company_show',{'alias': c.alias, '_fragment':'offers' }) }}">
href="{{ path('company_show',{'alias': c.alias, '_fragment': fragment }) }}">
{% set nbAds = c.getPublishedAds|length %}
{% if nbAds > 1 %}
<strong>{{ c.getPublishedAds|length }} offres d'emploi en
cours</strong>
{% else %}
{% elseif nbAds == 1 %}
<strong>{{ c.getPublishedAds|length }} offre d'emploi en
cours</strong>
{% else %}
<strong>candidature spontanée</strong>
{% endif %}
</a>
</div>
@@ -12,12 +12,12 @@
<div class="row">
<div class="col s12">
{% if medias|length == 0 and is_granted('ROLE_TALENT') %}
<div class="col s12 col-actions center-align">
<div class="col s12 center-align">
<br/><br/>
<strong class="color-grey3">Vous ne possédez pas encore de CV vidéo!</strong><br/>
<span class="color-grey2">Cliquez sur le bouton pour ajouter votre première vidéo.</span>
<br/><br/>
<a class="waves-effect waves-light btn btn-default modal-trigger" href="#addVideo">Ajouter une
<a class="btn btn-default modal-trigger" href="#addVideo">Ajouter une
vidéo</a>
</div>
{% else %}
@@ -38,7 +38,14 @@
<a href="{{ path('talent_answer_create',{id:a.ad.id}) }}">
<i class="fa fa-pencil-square-o" aria-hidden="true"></i>
</a>
{% endif %}{{ a.status|trans }}
{% endif %}
{% if a.isViewed %}
{% if a.isViewed.status == "DRAFT" %}
{{ 'VIEWED'|trans }}
{% endif %}
{% else %}
{{ a.status|trans }}
{% endif %}
</td>
</tr>
{% endfor %}
@@ -24,7 +24,7 @@
'@vendors'
'@global'
'@talents'
output='assetic/main.dash.talent.js' filter='?uglifyjs2' %}
output='assetic/main.dashboard.talent.js' filter='?uglifyjs2' %}
<script src="{{ asset_url }}"></script>
{% endjavascripts %}
<script type="text/javascript">
@@ -165,7 +165,6 @@
{% endblock %}
{% block javascripts %}
{{ parent() }}
<script type="text/javascript">
var urlDropzone = '{{ path("upload_media_presentation") }}';
@@ -65,18 +65,21 @@
<div class="col s11 col-noPadding" style="position:relative;">
<div class="chip center-align">
<p class="m-0">
{% set nbAds = 0 %}
{% set fragment = "companies" %}
{% for territoryAd in c.getTerritoryAds if territoryAd.ad != null %}
{% set nbAds = nbAds + 1 %}
{% set fragment = "offers" %}
{% endfor %}
<a class="td-none color-grey3"
href="{{ path('territory_show',{'alias': c.alias, '_fragment':'offers' }) }}">
{% set nbAds = 0 %}
{% for territoryAd in c.getTerritoryAds if territoryAd.ad != null %}
{% set nbAds = nbAds + 1 %}
{% endfor %}
href="{{ path('territory_show',{'alias': c.alias, '_fragment': fragment }) }}">
{% if nbAds > 1 %}
<strong>{{ nbAds }} offres d'emploi en
cours sur ce territoire</strong>
<strong>{{ nbAds }} {{ 'message.territory.list.ads'|trans }}</strong>
{% elseif nbAds == 1 %}
<strong>{{ nbAds }} {{ 'message.territory.list.ad'|trans }}</strong>
{% else %}
<strong>{{ nbAds }} offre d'emploi en
cours sur ce territoire</strong>
<strong>{{ 'message.territory.list.noads'|trans }}</strong>
{% endif %}
</a>
</p>
@@ -0,0 +1,68 @@
<?php
namespace AppBundle\Controller\Admin;
use AppBundle\Entity\Answer;
use AppBundle\Entity\Ad;
use AppBundle\Form\Admin\AdType;
use AppBundle\Form\Admin\ModerationDeclineType;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Security;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\JsonResponse;
class AnswerController extends Controller
{
/***********************
* MODERATION
***********************/
/**
* @Route("/admin/moderation/anwser/list", name="admin_anwser_moderation_list")
*/
public function adminAnswerModerationListAction()
{
$em = $this->getDoctrine()->getManager();
$answers = $em->getRepository('AppBundle:Answer')->findAll();
return $this->render('admin/answer_list_moderation.html.twig', array(
'answers' => $answers,
));
}
/**
* @Route("/admin/config/answer/{id}/status/{status}", name="admin_answer_status")
*/
public function adminStatusAnswerAction(Answer $answer, $status)
{
$em = $this->getDoctrine()->getManager();
$answer->setStatus($status);
$em->persist($answer);
$em->flush();
$result = array("msg" => "toggle ok");
return new JsonResponse($result);
}
/**
* @Route("/admin/config/answer/{id}/delete", name="admin_answer_delete")
*/
public function adminAnswerDeleteAction(Answer $answer)
{
$em = $this->getDoctrine()->getManager();
$t = $em->getRepository('AppBundle:User')->findByRole('ROLE_TALENT');
$media = $answer->getVideo();
$answer->setVideo(null);
$em->remove($answer);
$mediaManager = $this->get('media_manager');
if($media){
$mediaManager->delete($media);
$em->remove($media);
}
$em->flush();
return $this->redirectToRoute('admin_anwser_moderation_list');
}
}
@@ -18,7 +18,7 @@ class DefaultController extends Controller
if (!$ads) {
$ads = $em->getRepository('AppBundle:Ad')->findBy(array("status" => "PUBLISHED", "isPromoted" => false), array('id' => 'DESC'));
}
$talents = $em->getRepository('AppBundle:Company')->findBy(array("type" => "TALENT", "emphasis" => true), array('emphasisOrder' => 'ASC'));
$talents = $em->getRepository('AppBundle:Company')->findBy(array("type" => "TALENT", "emphasis" => true), array('emphasisOrder' => 'DESC'));
$companies = $em->getRepository('AppBundle:Company')->findBy(array("type" => "COMPANY", "emphasis" => true), array('emphasisOrder' => 'ASC'));
$territories = $em->getRepository('AppBundle:Company')->findBy(array("type" => "TERRITORY", "emphasis" => true), array('emphasisOrder' => 'ASC'));
@@ -56,7 +56,7 @@ class TalentController extends Controller
$form = $this->createForm(TalentProfileType::class, $user);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$birthday = new \DateTime($form->getData()->getBirthday());
$birthday = \DateTime::createFromFormat('d/m/Y', $form->getData()->getBirthday());
$user->setBirthday($birthday);
$companyManager = $this->get('app.company_manager');
$companyManager->updateTalent($user);
@@ -84,17 +84,20 @@ class MediaManager
*/
public function delete($entity)
{
$video = $entity;
if (unlink($this->mediaVideoDir . $video->getOriginalUrl())) {
if ($this->env != "dev") {
if ($this->env != "dev") {
$video = $entity;
if (unlink($this->mediaVideoDir . $video->getOriginalUrl())) {
$response = $this->vimeo->request($video->getCdnUrl(), [], 'DELETE');
}
$this->em->remove($video);
$this->em->flush();
$this->em->remove($video);
$this->em->flush();
return array('success' => "true");
return array('success' => "true");
} else {
return array('success' => "false");
}
} else {
return array('success' => "false");
return array('success' => "true");
}
}
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
+48 -23
View File
@@ -16181,33 +16181,17 @@ tbody td {
display: none; }
.tuto-carousel .item-tuto-webcam {
height: 385px; }
.tuto-carousel .owl-dots {
margin-top: 30px;
text-align: center;
-webkit-tap-highlight-color: transparent; }
.tuto-carousel .owl-dots .owl-dot {
display: inline-block;
zoom: 1; }
.tuto-carousel .owl-dots .owl-dot span {
width: 10px;
height: 10px;
margin: 5px 7px;
background: #D6D6D6;
display: block;
-webkit-backface-visibility: visible;
transition: opacity .2s ease;
border-radius: 30px; }
.tuto-carousel .owl-dots .owl-dot.active span, .tuto-carousel .owl-dots .owl-dot:hover span {
background: #155EE5; }
.tuto-carousel .owl-nav {
width: 103%;
z-index: 10; }
.carousel-fixed-item {
margin-right: 45px;
margin-top: -40px;
position: relative;
z-index: 100; }
z-index: 100;
display: flex;
justify-items: center;
align-items: center; }
.title-bubble {
display: inline-block;
@@ -16231,7 +16215,44 @@ tbody td {
width: 80%;
min-height: 540px;
background: #FFFFFF; }
#answerPage #modal-tuto .title-tuto {
position: fixed;
width: 100%;
background: #FFF;
display: block;
z-index: 2;
height: 60px;
top: 0;
left: 0;
padding: 15px 0; }
#answerPage #modal-tuto .modal-footer {
height: 70px;
background: #FFFFFF;
border: none;
z-index: 10; }
#answerPage #modal-tuto .modal-footer .owl-dots {
margin-top: 30px;
text-align: center;
-webkit-tap-highlight-color: transparent;
position: absolute;
left: 50%;
bottom: 15px; }
#answerPage #modal-tuto .modal-footer .owl-dots .owl-dot {
display: inline-block;
zoom: 1; }
#answerPage #modal-tuto .modal-footer .owl-dots .owl-dot span {
width: 10px;
height: 10px;
margin: 5px 7px;
background: #D6D6D6;
display: block;
-webkit-backface-visibility: visible;
transition: opacity .2s ease;
border-radius: 30px; }
#answerPage #modal-tuto .modal-footer .owl-dots .owl-dot.active span, #answerPage #modal-tuto .modal-footer .owl-dots .owl-dot:hover span {
background: #155EE5; }
#answerPage #modal-tuto .col-content {
margin-top: 50px;
margin-bottom: 0; }
#answerPage #modal-tuto .close-tuto {
margin-right: 60px;
@@ -16273,17 +16294,19 @@ tbody td {
color: #FFF;
text-decoration: none; }
@media only screen and (max-width: 800px) {
@media only screen and (max-width: 1000px) {
#modal-tuto {
width: 98%; }
#modal-tuto .modal-footer .owl-dots {
display: none; }
#modal-tuto .modal-footer .close-tuto {
font-size: 12px; }
#modal-tuto .modal-content {
padding: 10px; }
#modal-tuto .modal-content h3 {
font-size: 1.5rem; }
#modal-tuto .modal-content .col {
padding: 0; }
#modal-tuto .modal-content .owl-dots {
display: none; }
#modal-tuto .modal-content .carousel-fixed-item {
margin-top: 0;
margin-right: 0;
@@ -16661,3 +16684,5 @@ tbody td {
#talent-show .recommendation-user-infos .recommendation-date {
font-size: 14px;
color: #1E2327; }
/*# sourceMappingURL=styles.css.map */
File diff suppressed because one or more lines are too long
Binary file not shown.

Before

Width:  |  Height:  |  Size: 107 KiB

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 107 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 214 KiB

After

Width:  |  Height:  |  Size: 9.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 214 KiB

+2 -1
View File
@@ -32,7 +32,8 @@ $(document).ready(function(){
margin: 50,
stagePadding: padding,
navRewind:false,
navText: ['<span class="left-arrow"></span>', '<span class="right-arrow"></span>']
navText: ['<span class="left-arrow"></span>', '<span class="right-arrow"></span>'],
dotsContainer: '#customDots',
});
$(".tuto-carousel").trigger('refresh.owl.carousel');
$(".tuto-carousel").on('changed.owl.carousel', function(event) {
@@ -22,25 +22,6 @@
.item-tuto-webcam{
height: 385px;
}
.owl-dots{
margin-top: 30px;
text-align:center;
-webkit-tap-highlight-color:transparent;
}
.owl-dots .owl-dot{display:inline-block;zoom:1}
.owl-dots .owl-dot span{
width:10px;
height:10px;
margin:5px 7px;
background:#D6D6D6;
display:block;
-webkit-backface-visibility:visible;
transition:opacity .2s ease;
border-radius:30px;
}
.owl-dots .owl-dot.active span,.owl-dots .owl-dot:hover span{
background:#155EE5;
}
.owl-nav{
width:103%;
z-index: 10;
@@ -48,9 +29,11 @@
}
.carousel-fixed-item{
margin-right: 45px;
margin-top:-40px;
position: relative;
z-index: 100;
display: flex;
justify-items: center;
align-items: center;
}
.title-bubble{
@@ -74,10 +57,51 @@
background: url(/img/img_popupcv/step_arrow.svg) 40px no-repeat #FFFFFF;;
}
#modal-tuto{
.title-tuto{
position: fixed;
width: 100%;
background: #FFF;
display: block;
z-index: 2;
height: 60px;
top: 0;
left: 0;
padding: 15px 0;
}
.modal-footer{
height: 70px;
background: $white;
border: none;
z-index: 10;
.owl-dots{
margin-top: 30px;
text-align:center;
-webkit-tap-highlight-color:transparent;
position: absolute;
left: 50%;
bottom: 15px;
}
.owl-dots .owl-dot{display:inline-block;zoom:1}
.owl-dots .owl-dot span{
width:10px;
height:10px;
margin:5px 7px;
background:#D6D6D6;
display:block;
-webkit-backface-visibility:visible;
transition:opacity .2s ease;
border-radius:30px;
}
.owl-dots .owl-dot.active span,.owl-dots .owl-dot:hover span{
background:#155EE5;
}
}
width: 80%;
min-height: 540px;
background: $white;
.col-content{
margin-top: 50px;
margin-bottom: 0;
}
.close-tuto{
@@ -144,9 +168,17 @@
}
}
@media only screen and (max-width: 800px) {
@media only screen and (max-width: 1000px) {
#modal-tuto {
width: 98%;
.modal-footer{
.owl-dots{
display: none;
}
.close-tuto{
font-size: 12px;
}
}
.modal-content{
h3{
font-size: 1.5rem;
@@ -155,9 +187,6 @@
.col{
padding: 0;
}
.owl-dots{
display: none;
}
.carousel-fixed-item{
margin-top:0;
margin-right:0;
@@ -166,4 +195,4 @@
}
}
}
}
}