Commit e6a71c4c authored by François Agneray's avatar François Agneray
Browse files

Edition de son profil par le participant

parent 3c01063b
......@@ -108,6 +108,9 @@ $container[App\Action\DashboardAdminGenCodeFormationAction::class] = function ($
return new App\Action\DashboardAdminGenCodeFormationAction($c->get('logger'), $c->get('em'));
};
$container[App\Action\DashboardEditProfilFormAction::class] = function ($c) {
return new App\Action\DashboardEditProfilFormAction($c->get('view'), $c->get('logger'), $c->get('em'), $c->get('settings'));
};
// =============================================================
// Dashboard Admin
......
......@@ -89,6 +89,10 @@ $app->map(['GET', 'POST'],'/dashboard-participant-presence', App\Action\Dashboar
->add(App\Middleware\TokenMiddleware::class)
->setName('dashboard_participant_presence');
$app->map(['GET', 'POST'],'/dashboard-edit-profil-form', App\Action\DashboardEditProfilFormAction::class)
->add(App\Middleware\TokenMiddleware::class)
->setName('dashboard_edit_profil_form');
// =============================================================
// Dashboard Admin
// =============================================================
......
<?php
namespace App\Action;
use Slim\Views\Twig;
use Psr\Log\LoggerInterface;
use Doctrine\ORM\EntityManagerInterface;
use Psr\Http\Message\ServerRequestInterface as Request;
use Psr\Http\Message\ResponseInterface as Response;
final class DashboardEditProfilFormAction
{
private $view;
private $logger;
private $em;
private $settings;
public function __construct(Twig $view, LoggerInterface $logger, EntityManagerInterface $em, $settings)
{
$this->view = $view;
$this->logger = $logger;
$this->em = $em;
$this->settings = $settings;
}
public function __invoke(Request $request, Response $response, $args)
{
$this->logger->info("dashboard edit profil form action dispatched");
$params = $request->getQueryParams();
$token = $params['token'];
$email = $request->getAttribute('email');
$participant = $this->getParticipant($email);
if($request->isGet()) {
$organismesRepository = $this->em->getRepository('App\Entity\Organisme');
$organismes = $organismesRepository->findAll();
$reseauxRepository = $this->em->getRepository('App\Entity\Reseau');
$reseaux1 = $reseauxRepository->findBy(array('display' => 1));
$reseaux2 = $reseauxRepository->findBy(array('display' => 2));
$reseaux3 = $reseauxRepository->findBy(array('display' => 3));
$communauteRepository = $this->em->getRepository('App\Entity\Communaute');
$communaute1 = $communauteRepository->findBy(array('display' => 1));
$communaute2 = $communauteRepository->findBy(array('display' => 2));
$communaute3 = $communauteRepository->findBy(array('display' => 3));
$this->view->render($response, 'dashboard_edit_profil_form.twig', [
'page' => 'dashboard',
'token' => $token,
'participant' => $participant,
'organismes' => $organismes,
'reseaux1' => $reseaux1,
'reseaux2' => $reseaux2,
'reseaux3' => $reseaux3,
'communaute1' => $communaute1,
'communaute2' => $communaute2,
'communaute3' => $communaute3,
'jdev' => $this->settings['jdev']
]);
}
if($request->isPost()) {
$parsedBody = $request->getParsedBody();
$error = false;
$code = 200;
$messages = array();
$mandatoryFields = array(
'nom',
'prenom',
'emploi',
'unite',
'region'
);
foreach ($mandatoryFields as $a) {
if ($this->isEmptyField($a, $parsedBody)) {
$error = true;
$code = 400;
$messages[] = 'Champ ' . $a . ' vide';
}
}
if (!$this->verifEmploi($parsedBody)) {
$error = true;
$code = 400;
$messages[] = 'L\'emploi ' . $parsedBody['emploi'] . ' selectionné n\'est pas valide';
}
if (!$this->verifRegion($parsedBody)) {
$error = true;
$code = 400;
$messages[] = 'La région ' . $parsedBody['region'] . ' selectionnée n\'est pas valide';
}
if ($error) {
$response = $response->write(implode(PHP_EOL, $messages))->withStatus($code);
} else {
$participant = $this->editParticipant($participant, $parsedBody);
$response = $response->write('Edition du participant ok')->withStatus(200);
}
}
return $response;
}
private function isEmptyField($field, $parsedBody)
{
if(!isset($parsedBody[$field]) || empty($parsedBody[$field])) {
return true;
} else {
return false;
}
}
private function verifEmploi($parsedBody)
{
switch($parsedBody['emploi']) {
case 'Doctorant':
case 'Technicien':
case 'Ingénieur':
case 'Chercheur':
case 'Enseignant-Chercheur':
case 'Post-Doctorant':
case 'Stagiaire':
case 'Autre':
$bool = true;
break;
default:
$bool = false;
}
return $bool;
}
private function verifRegion($parsedBody)
{
switch($parsedBody['region']) {
case 'Auvergne-Rhône-Alpes':
case 'Bourgogne-Franche-Comté':
case 'Bretagne':
case 'Centre-Val-de-Loire':
case 'Corse':
case 'Grand-Est':
case 'Hauts-de-France':
case 'Ile-de-France':
case 'Nouvelle-Aquitaine':
case 'Normandie':
case 'Occitanie':
case 'Outre-Mer':
case 'Pays-de-la-Loire':
case 'Provence-Alpes-Côte d\'Azur':
$bool = true;
break;
default:
$bool = false;
}
return $bool;
}
private function getParticipant($email)
{
$participant = $this->em->getRepository('App\Entity\Participant')->findOneBy(array('email' => $email));
if(isset($participant)) {
return $participant;
} else {
return false;
}
}
private function editParticipant($participant, $parsedBody)
{
$participant->setNom($parsedBody['nom']);
$participant->setPrenom($parsedBody['prenom']);
$participant->setEmploi($parsedBody['emploi']);
$participant->setUnite($parsedBody['unite']);
$participant->setRegion($parsedBody['region']);
$participant->setRegimeAlimentaire($parsedBody['regime_alimentaire']);
// Si le participant est une personne à mobilité reduite
if (isset($parsedBody['mobilite_reduite']) && $parsedBody['mobilite_reduite'] == 'on') {
$participant->setMobiliteReduite(true);
} else {
$participant->setMobiliteReduite(false);
}
// Si le participant demande un code wi-fi
if (isset($parsedBody['acces_wifi']) && $parsedBody['acces_wifi'] == 'on') {
$participant->setCodeWifi(true);
} else {
$participant->setCodeWifi(false);
}
// Si le participant veut être inscrit à la mailing list
if (isset($parsedBody['mailing_list']) && $parsedBody['mailing_list'] == 'on') {
$participant->setMailingList(true);
} else {
$participant->setMailingList(false);
}
// Si le participant veut se rendre à l'événement social
if (isset($parsedBody['evenement_social']) && $parsedBody['evenement_social'] == 'on') {
$participant->setEvenementSocial(true);
} else {
$participant->setEvenementSocial(false);
}
$this->deleteAllReseaux($participant);
$this->createReseaux($parsedBody, $participant);
$this->deleteAllCommunautes($participant);
$this->createCommunautes($parsedBody, $participant);
$this->em->flush();
return $participant;
}
private function deleteAllReseaux($participant)
{
foreach($participant->getReseaux() as $reseau) {
$this->em->remove($reseau);
}
$this->em->flush();
}
private function createReseaux($parsedBody, $participant)
{
for ($i = 1; $i <= 39; $i++) {
if (isset($parsedBody['reseau_' . $i]) && $parsedBody['reseau_' . $i] == 'on') {
$reseau = $this->em->find('App\Entity\Reseau', $i);
$participantReseau = new \App\Entity\ParticipantReseau();
$participantReseau->setParticipant($participant);
$participantReseau->setReseau($reseau);
$this->em->persist($participantReseau);
}
}
}
private function deleteAllCommunautes($participant)
{
foreach($participant->getCommuanutes() as $communaute) {
$this->em->remove($communaute);
}
$this->em->flush();
}
private function createCommunautes($parsedBody, $participant)
{
for ($i = 1; $i <= 16; $i++) {
if (isset($parsedBody['communaute_' . $i]) && $parsedBody['communaute_' . $i] == 'on') {
$communaute = $this->em->find('App\Entity\Communaute', $i);
$participantCommuanute = new \App\Entity\ParticipantCommunaute();
$participantCommuanute->setParticipant($participant);
$participantCommuanute->setCommunaute($communaute);
$this->em->persist($participantCommuanute);
}
}
}
}
......@@ -18,6 +18,11 @@ class Communaute
* @Column(type="string")
**/
private $label;
/**
* @Column(type="integer", nullable=true)
**/
private $display;
public function getId()
{
......@@ -33,4 +38,14 @@ class Communaute
{
$this->label = $label;
}
public function getDisplay()
{
return $this->display;
}
public function setDisplay($display)
{
$this->display = $display;
}
}
......@@ -18,6 +18,11 @@ class Reseau
* @Column(type="string")
**/
private $label;
/**
* @Column(type="integer", nullable=true)
**/
private $display;
public function getId()
{
......@@ -33,4 +38,14 @@ class Reseau
{
$this->label = $label;
}
public function getDisplay()
{
return $this->display;
}
public function setDisplay($display)
{
$this->display = $display;
}
}
{% extends "base_dashboard.twig" %}
{% block title %}Participant{% endblock %}
{% block content_dashboard %}
<div class="content-dashboard">
<div class="title-main">
<div class="title-main-content">Editer mon profil</div>
</div>
<div>
<h4><i class="fa fa-id-card-o"></i> Votre inscription</h4>
<form id="editProfilForm" role="form" data-toggle="validator">
<input type="hidden" id="token" value="{{token}}">
<div class="form-group">
<label for="nom">Nom</label> <span style="color: red;">*</span>
<input type="text" class="form-control" name="nom" id="nom" value="{{participant.getNom()}}" placeholder="Nom" required>
</div>
<div class="form-group">
<label for="prenom">Prénom</label> <span style="color: red;">*</span>
<input type="text" class="form-control" name="prenom" id="prenom" value="{{participant.getPrenom()}}" placeholder="Prénom" required>
</div>
<div class="form-group">
<label for="email" class="control-label">E-mail (professionnel)</label> <span style="color: red;">*</span>
<input style="width: 100%" type="email" name="email" class="form-control" id="email" value="{{participant.getEmail()}}" disabled placeholder="E-mail (professionnel)" required>
</div>
<div class="form-group">
<label for="statut">Statut</label> <span style="color: red;">*</span>
<input style="width: 100%" type="text" name="statut" class="form-control" id="statut" value="{{participant.getStatut()}}" disabled>
</div>
<div class="form-group">
<label for="emploi">Emploi</label> <span style="color: red;">*</span>
<select class="form-control" name="emploi" id="emploi">
{% if participant.getStatut() == 'ACADEMIQUE' %}
<option value="Chercheur" {% if participant.getEmploi() == 'Chercheur' %}selected{% endif %}>Chercheur</option>
<option value="Enseignant-Chercheur" {% if participant.getEmploi() == 'Enseignant-Chercheur' %}selected{% endif %}>Enseignant-Chercheur</option>
<option value="Ingénieur" {% if participant.getEmploi() == 'Ingénieur' %}selected{% endif %}>Ingénieur</option>
<option value="Post-Doctorant" {% if participant.getEmploi() == 'Post-Doctorant' %}selected{% endif %}>Post-Doctorant</option>
<option value="Stagiaire" {% if participant.getEmploi() == 'Stagiaire' %}selected{% endif %}>Stagiaire</option>
<option value="Technicien" {% if participant.getEmploi() == 'Technicien' %}selected{% endif %}>Technicien</option>
{% elseif participant.getStatut() == 'ETUDIANT' %}
<option value="Doctorant" {% if participant.getEmploi() == 'Doctorant' %}selected{% endif %}>Doctorant</option>
<option value="Autre" {% if participant.getEmploi() == 'Autre' %}selected{% endif %}>Autre</option>
{% else %}
<option value="Ingénieur" {% if participant.getEmploi() == 'Ingénieur' %}selected{% endif %}>Ingénieur</option>
<option value="Technicien" {% if participant.getEmploi() == 'Technicien' %}selected{% endif %}>Technicien</option>
<option value="Autre" {% if participant.getEmploi() == 'Autre' %}selected{% endif %}>Autre</option>
{% endif %}
</select>
</div>
<div class="form-group">
<label for="organisme">Organisme de tutelle</label> <span style="color: red;">*</span>
<input style="width: 100%" type="text" name="organisme" class="form-control" id="organisme" value="{{participant.getOrganisme().getLabel()}}" disabled>
</div>
<div class="form-group">
<label for="unite">Nom unité/Entreprise</label> <span style="color: red;">*</span>
<input type="text" class="form-control" name="unite" id="unite" value="{{participant.getUnite()}}" placeholder="Ex: UMRxxx, UMSccc, UPRfff, UPSggg" required>
</div>
<div class="form-group">
<label for="region">Région</label> <span style="color: red;">*</span>
<select class="form-control" name="region" id="region" required>
<option></option>
<option {% if participant.getRegion() == 'Auvergne-Rhône-Alpes' %}selected{% endif %}>Auvergne-Rhône-Alpes</option>
<option {% if participant.getRegion() == 'Bourgogne-Franche-Comté' %}selected{% endif %}>Bourgogne-Franche-Comté</option>
<option {% if participant.getRegion() == 'Bretagne' %}selected{% endif %}>Bretagne</option>
<option {% if participant.getRegion() == 'Centre-Val-de-Loire' %}selected{% endif %}>Centre-Val-de-Loire</option>
<option {% if participant.getRegion() == 'Corse' %}selected{% endif %}>Corse</option>
<option {% if participant.getRegion() == 'Grand-Est' %}selected{% endif %}>Grand-Est</option>
<option {% if participant.getRegion() == 'Hauts-de-France' %}selected{% endif %}>Hauts-de-France</option>
<option {% if participant.getRegion() == 'Ile-de-France' %}selected{% endif %}>Ile-de-France</option>
<option {% if participant.getRegion() == 'Nouvelle-Aquitaine' %}selected{% endif %}>Nouvelle-Aquitaine</option>
<option {% if participant.getRegion() == 'Normandie' %}selected{% endif %}>Normandie</option>
<option {% if participant.getRegion() == 'Occitanie' %}selected{% endif %}>Occitanie</option>
<option {% if participant.getRegion() == 'Outre-Mer' %}selected{% endif %}>Outre-Mer</option>
<option {% if participant.getRegion() == 'Pays-de-la-Loire' %}selected{% endif %}>Pays-de-la-Loire</option>
<option {% if participant.getRegion() == "Provence-Alpes-Côte d'Azur" %}selected{% endif %}>Provence-Alpes-Côte d'Azur</option>
</select>
</div>
<div class="form-group">
<label>Appartenance à un/des réseau(x) métier(s)/technologique(s)/IT</label>
<div class="row">
<div class="col-xs-4">
{% for reseau in reseaux1 %}
<div class="checkbox">
<label>
<input type="checkbox" name="reseau_{{reseau.getId()}}" id="reseau_{{reseau.getId()}}" {% for reseauSelected in participant.getReseaux() %} {% if reseauSelected.getReseau().getId() == reseau.getId() %}checked{% endif %} {% endfor %}> {{reseau.getLabel()}}
</label>
</div>
{% endfor %}
</div>
<div class="col-xs-4">
{% for reseau in reseaux2 %}
<div class="checkbox">
<label>
<input type="checkbox" name="reseau_{{reseau.getId()}}" id="reseau_{{reseau.getId()}}" {% for reseauSelected in participant.getReseaux() %} {% if reseauSelected.getReseau().getId() == reseau.getId() %}checked{% endif %} {% endfor %}> {{reseau.getLabel()}}
</label>
</div>
{% endfor %}
</div>
<div class="col-xs-4">
{% for reseau in reseaux3 %}
<div class="checkbox">
<label>
<input type="checkbox" name="reseau_{{reseau.getId()}}" id="reseau_{{reseau.getId()}}" {% for reseauSelected in participant.getReseaux() %} {% if reseauSelected.getReseau().getId() == reseau.getId() %}checked{% endif %} {% endfor %}> {{reseau.getLabel()}}
</label>
</div>
{% endfor %}
</div>
</div>
</div>
<div class="form-group">
<label>Appartenance à une/des communauté(s) thématique(s)/scientifique(s)</label>
<div class="row">
<div class="col-xs-4">
{% for communaute in communaute1 %}
<div class="checkbox">
<label>
<input type="checkbox" name="communaute_{{communaute.getId()}}" id="communaute_{{communaute.getId()}}" {% for communauteSelected in participant.getCommuanutes() %} {% if communauteSelected.getCommuanute().getId() == communaute.getId() %}checked{% endif %} {% endfor %}> {{communaute.getLabel()}}
</label>
</div>
{% endfor %}
</div>
<div class="col-xs-4">
{% for communaute in communaute2 %}
<div class="checkbox">
<label>
<input type="checkbox" name="communaute_{{communaute.getId()}}" id="communaute_{{communaute.getId()}}" {% for communauteSelected in participant.getCommuanutes() %} {% if communauteSelected.getCommuanute().getId() == communaute.getId() %}checked{% endif %} {% endfor %}> {{communaute.getLabel()}}
</label>
</div>
{% endfor %}
</div>
<div class="col-xs-4">
{% for communaute in communaute3 %}
<div class="checkbox">
<label>
<input type="checkbox" name="communaute_{{communaute.getId()}}" id="communaute_{{communaute.getId()}}" {% for communauteSelected in participant.getCommuanutes() %} {% if communauteSelected.getCommuanute().getId() == communaute.getId() %}checked{% endif %} {% endfor %}> {{communaute.getLabel()}}
</label>
</div>
{% endfor %}
</div>
</div>
</div>
<div class="form-group">
<label for="regime_alimentaire">Régime alimentaire</label>
<select class="form-control" name="regime_alimentaire" id="regime_alimentaire">
<option>Aucun</option>
<option {% if participant.getRegimeAlimentaire() == 'Végétarien' %}selected{% endif %}>Végétarien</option>
</select>
</div>
<div class="checkbox">
<label>
<input type="checkbox" name="mobilite_reduite" id="mobilite_reduite" {% if participant.getMobiliteReduite() %}checked{% endif %}> Personne à mobilité réduite ?
</label>
</div>
<div class="checkbox">
<label>
<input type="checkbox" name="acces_wifi" id="acces_wifi" {% if participant.getCodeWifi() %}checked{% endif %}> Besoin d'un accès wi-fi ?
</label>
</div>
<div class="checkbox">
<label>
<input type="checkbox" name="mailing_list" id="mailing_list" {% if participant.getMailingList() %}checked{% endif %}> S'inscrire à la mailing liste des JDEV-2017
</label>
</div>
<div class="checkbox">
<label>
<input type="checkbox" name="evenement_social" id="evenement_social" {% if participant.getEvenementSocial() %}checked{% endif %}> S'inscrire à <a href="http://devlog.cnrs.fr/jdev2017#evenement-social" target="_blank">l'évenement social</a> des JDEV-2017
</label>
</div>
<button type="submit" id="btn-edit-profil-submit" class="btn btn-sea" value="Envoyer">Enregistrer mes modifications</button>
<a href="dashboard-home?token={{token}}" id="btn-inscription-annuler" class="btn btn-danger">Annuler mes modifications</a>
</form>
<br>
</div>
</div>
{% endblock %}
\ No newline at end of file
......@@ -15,6 +15,7 @@
<p>
<b>NOM <i class="fa fa-arrow-circle-right"></i></b> {{ participant.getNom() }}<br>
<b>PRENOM <i class="fa fa-arrow-circle-right"></i></b> {{ participant.getPrenom() }}<br>
<b>E-MAIL <i class="fa fa-arrow-circle-right"></i></b> {{ participant.getEmail() }}<br>
<b>STATUT <i class="fa fa-arrow-circle-right"></i></b> {{ participant.getStatut() }}<br>
<b>EMPLOI <i class="fa fa-arrow-circle-right"></i></b> {{ participant.getEmploi() }}<br>
<b>ROLE <i class="fa fa-arrow-circle-right"></i></b> {{ participant.getRole() }}<br>
......@@ -24,9 +25,30 @@
</p>
<hr>
<p>
<b>Appartenance à un/des réseau(x) métier(s)/technologique(s)/IT <i class="fa fa-arrow-circle-right"></i></b> <br>
{% for reseau in participant.getReseaux() %}
- {{ reseau.getReseau().getLabel() }}<br>
{% endfor %}
</p>
<p>
<p>
<b>Appartenance à une/des communauté(s) thématique(s)/scientifique(s) <i class="fa fa-arrow-circle-right"></i></b> <br>
{% for communaute in participant.getCommuanutes() %}
- {{ communaute.getCommuanute().getLabel() }}<br>
{% endfor %}
</p>
<hr>
<p>
<b>Régime alimentaire :</b>{{ participant.getRegimeAlimentaire() }}<br>
<b>Etes-vous une personne à mobilité réduite ? :</b> {% if participant.getMobiliteReduite() %} oui {% else %} non {% endif %}<br>
<b>Avez-vous besoin de code wifi ? :</b> {% if participant.getCodeWifi() %} oui {% else %} non {% endif %}<br>
<b>Inscrit sur la mailing-liste :</b> {% if participant.getMailingList() %} oui {% else %} non {% endif %}<br>
<b>Inscrit à l'évènement social :</b> {% if participant.getEvenementSocial() %} oui {% else %} non {% endif %}<br>
</p>
<p>
<a href="dashboard-edit-profil-form?token={{ token }}" class="btn btn-treehouse">Editer mon profil</a>
</p>
</div>
<hr>
......
......@@ -4,6 +4,34 @@ var jdev_annee='2017';
$(document).ready(function(){
// ======================================================================
// Gestion edition du profil
// ======================================================================
$('#editProfilForm').validator().on('submit', function(e) {
if (e.isDefaultPrevented())
{
alert('Veuillez remplir tous les champs obligatoires');
}
else
{
e.preventDefault();
var form = $(this);
var token = $("#token").val();
$.ajax({
url: 'dashboard-edit-profil-form?token=' + token,
type: 'POST',
data: form.serialize(),
success: function(text) {
document.location.href = 'dashboard-home?token=' + token;
},
error: function() {
alert('La modification de votre profil n\'a pas pu être effectué!');
form.trigger('reset');
}
});
}
});
// ======================================================================
// Gestion du sondage
// ======================================================================
......