<?php
/**
* Created by PhpStorm.
* User: grego
* Date: 31/05/2022
* Time: 16:00
*/
namespace App\Controller;
use App\Entity\Badge;
use App\Entity\Feedback;
use App\Entity\HierarchicalList;
use App\Entity\SharedFeedback;
use App\Entity\Skill;
use App\Entity\User;
use App\Manager\ImportExportManager;
use App\Manager\MailerManager;
use App\Manager\UserManager;
use App\Repository\FeedbackRepository;
use App\Repository\HierarchicalListRepository;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\Form\Extension\Core\Type\EmailType;
use Symfony\Component\Form\Extension\Core\Type\SubmitType;
use Symfony\Component\Form\Extension\Core\Type\TextType;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\PasswordHasher\Hasher\UserPasswordHasherInterface;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Contracts\Translation\TranslatorInterface;
class DefaultController extends AbstractController
{
/**
* @Route("/", name="app_home")
*/
public function indexAction(Request $request, TranslatorInterface $translator)
{
$user = $this->getUser();
if($user && (in_array('ROLE_SUPER_ADMIN', $user->getRoles())
|| in_array('ROLE_ADMIN', $user->getRoles())
|| in_array('ROLE_BUSINESS_ADMIN', $user->getRoles())
|| in_array('ROLE_TECHNICAL_ADMIN', $user->getRoles())
|| in_array('ROLE_SBM', $user->getRoles())
|| in_array('ROLE_ADMIN_COMPANY_ACCESS', $user->getRoles())
|| in_array('ROLE_AMBASSADEUR', $user->getRoles())
||in_array('ROLE_MANAGER', $user->getRoles()) )) {
return $this->redirectToRoute('client_user_list');
} else {
// Remove access to admin client
/*
if ($user) {
$msg = $translator->trans(
"Vous n'avez pas accès à l'interface Client",
array(), 'client_bo'
);
$this->addFlash("error", $msg);
}
return $this->redirectToRoute("login");
*/
return $this->render('ClientBOBundle/Common/forbidden_access.html.twig');
}
}
/**
* @Route("/shared-feedback/{token}/{status}")
*/
public function sharedFeedbackAction(Request $request, EntityManagerInterface $entityManager, $token, $status=false)
{
$shared = $entityManager->getRepository(SharedFeedback::class)->findOneByToken($token);
if($shared){
$canAccessFeedback = false;
$errorMessage = "";
switch($shared->getType()) {
case 'email':
$canAccessFeedback = $shared->getAnswers() < 25; //Si moins de 25 personnes ont répondu
$errorMessage = "Nombre de réponses maximal atteint.";
break;
case 'gmail':
$canAccessFeedback = $shared->getAnswers() < 25; //Si moins de 25 personnes ont répondu
$errorMessage = "Nombre de réponses maximal atteint.";
break;
case 'sms':
$canAccessFeedback = $shared->getAnswers() < 25; //Si moins de 25 personnes ont répondu
$errorMessage = "Nombre de réponses maximal atteint.";
break;
case 'link':
$canAccessFeedback = (strtotime($shared->getCreatedAt()->format("Y-m-d H:i:s")) > time() - 604800) && $shared->getAnswers() < 100; //Si la date de création du feedback est supérieure à il y a 7j et qu'il y a moins de 100 réponses
$errorMessage = "Délai maximal de réponse dépassé.";
break;
}
if($canAccessFeedback){
$feedback = new Feedback();
$feedback->setSkill($shared->getSkill());
$feedback->setSender($shared->getSender());
$feedback->setStatus(FeedbackRepository::STATUS_PENDING);
if($shared->getEventTitle()){
$feedback->setEventTitle($shared->getEventTitle());
}
$entityManager->persist($feedback);
$entityManager->flush();
$shared->setAnswers( $shared->getAnswers() + 1);
$entityManager->persist($shared);
$entityManager->flush();
} else {
return new Response($errorMessage, 401);
}
}else{
if(!$status){
return $this->redirect("https://manager.globalcoss.com/shared-feedback/".$token."/true");
} else {
return $this->redirect("https://www.5feedback.com/feedback/?code=invalid");
}
}
switch($shared->getType()) {
case 'sms':
return $this->redirect($feedback->getGuestUrl());
break;
case 'email':
return $this->redirect($feedback->getGuestUrl());
break;
case 'gmail':
return $this->redirect($feedback->getGuestUrl());
break;
case 'link':
return $this->redirect($feedback->getGuestUrl()."?guest=true");
break;
default:
return new Response($errorMessage, 401);
break;
}
}
/**
* @Route("/badges/{token}", name="badges_detail")
*/
public function detailAction(Request $request, $token, EntityManagerInterface $entityManager, UserManager $userManager){
$badges = $entityManager->getRepository(Badge::class)->findBy(array('token' => $token));
if(!$badges){
return $this->render('AdminBundle/Badge/error.html.twig');
} else {
$badges = $badges[0];
}
//$request->setLocale($badges->getLocale());
$skillStats = array();
foreach ($badges->getSkillIds() as $skillId){
$skill = $entityManager->getRepository(Skill::class)->find($skillId);
$firstFeedback = $entityManager->getRepository(Feedback::class)->getFirstFeedbackOnSkill($badges->getUser(), $skill, $badges->getCreatedAt());
$lastFeedback = $entityManager->getRepository(Feedback::class)->getLastFeedbackOnSkill($badges->getUser(), $skill, $badges->getCreatedAt());
$skillStats[] = $userManager->getSkillStatisticsByDate($badges->getUser(), $skillId, $firstFeedback->getCreatedAt(), $lastFeedback->getAnsweredAt(), $request->getLocale());
}
foreach ($skillStats as &$skillStat){
usort($skillStat['strengths'], function($a, $b)
{
return ($a['count'] <= $b['count']);
});
}
if($badges->getUser()->getCompany() && $badges->getUser()->getCompany()->getBadgesActive()
&& $badges->getUser()->getHierarchicalList() &&
($badges->getUser()->getHierarchicalList()->getStatus() == HierarchicalListRepository::STATUS_VALIDATED
|| $badges->getUser()->getHierarchicalList()->getStatus() == HierarchicalListRepository::STATUS_MODIFIED_WAITING_APPROVAL )){
$badgesActive = true;
} else {
$badgesActive = false;
}
return $this->render('AdminBundle/Badge/detail.html.twig', array(
'user' => $badges->getUser(),
'badgesActive' => $badgesActive,
'badges' => $badges,
'stats' => $skillStats,
));
}
/**
* @Route("/hierarchical/{token}/{id}", name="hierarchical_list_validation")
*/
public function hierarchicalListAction(Request $request, $token, $id, EntityManagerInterface $entityManager, MailerManager $mailerManager)
{
$hierarchicalList = $entityManager->getRepository(HierarchicalList::class)->find($id);
if($hierarchicalList->getGuestToken() == $token || $hierarchicalList->getNoManagerToken() == $token) {
$superiorUsers = $entityManager->getRepository(User::class)->findBy(array('id' => $hierarchicalList->getSuperiorUsers(), 'deletedAt' => null));
$equalUsers = $entityManager->getRepository(User::class)->findBy(array('id' => $hierarchicalList->getEqualUsers(), 'deletedAt' => null));
$lowerUsers = $entityManager->getRepository(User::class)->findBy(array('id' => $hierarchicalList->getLowerUsers(), 'deletedAt' => null));
$coworkerUsers = $entityManager->getRepository(User::class)->findBy(array('id' => $hierarchicalList->getCoworkerUsers(), 'deletedAt' => null));
$outsideUsers = $entityManager->getRepository(User::class)->findBy(array('id' => $hierarchicalList->getOutsideUsers(), 'deletedAt' => null));
$allCompanyUsers = $entityManager->getRepository(User::class)->findBy(array("company" => $hierarchicalList->getUser()->getCompany(), "deletedAt" => NULL));
foreach($superiorUsers as $u){
if(in_array($u, $allCompanyUsers)) {
//exists
} else {
$allCompanyUsers[] = $u;
}
}
foreach($equalUsers as $u){
if(in_array($u, $allCompanyUsers)) {
//exists
} else {
$allCompanyUsers[] = $u;
}
}
foreach($lowerUsers as $u){
if(in_array($u, $allCompanyUsers)) {
//exists
} else {
$allCompanyUsers[] = $u;
}
}
foreach($coworkerUsers as $u){
if(in_array($u, $allCompanyUsers)) {
//exists
} else {
$allCompanyUsers[] = $u;
}
}
foreach($outsideUsers as $u){
if(in_array($u, $allCompanyUsers)) {
//exists
} else {
$allCompanyUsers[] = $u;
}
}
$hierarchicalListForm = $this->createFormBuilder()
->add('superiorIds', TextType::class, array('label' => false, 'mapped' => false))
->add('equalIds', TextType::class, array('label' => false, 'mapped' => false))
->add('lowerIds', TextType::class, array('label' => false, 'mapped' => false))
->add('coworkerIds', TextType::class, array('label' => false, 'mapped' => false))
->add('outsideIds', TextType::class, array('label' => false, 'mapped' => false))
->add('save', SubmitType::class, array('label' => false))
->getForm();
$hierarchicalListForm->handleRequest($request);
if ($hierarchicalListForm->isSubmitted() && $hierarchicalListForm->isValid()) {
$superiorIds = $hierarchicalListForm->get('superiorIds')->getData();
$equalIds = $hierarchicalListForm->get('equalIds')->getData();
$lowerIds = $hierarchicalListForm->get('lowerIds')->getData();
$coworkerIds = $hierarchicalListForm->get('coworkerIds')->getData();
$outsideIds = $hierarchicalListForm->get('outsideIds')->getData();
$superior = explode(";", $superiorIds);
$superiorArray = array();
foreach ($superior as $uId){
$superiorArray[] = $uId;
}
$equal = explode(";", $equalIds);
$equalArray = array();
foreach ($equal as $uId){
$equalArray[] = $uId;
}
$lower = explode(";", $lowerIds);
$lowerArray = array();
foreach ($lower as $uId){
$lowerArray[] = $uId;
}
$coworker = explode(";", $coworkerIds);
$coworkerArray = array();
foreach ($coworker as $uId){
$coworkerArray[] = $uId;
}
$outside = explode(";", $outsideIds);
$outsideArray = array();
foreach ($outside as $uId){
$outsideArray[] = $uId;
}
$hierarchicalList->setSuperiorUsers($superiorArray);
$hierarchicalList->setEqualUsers($equalArray);
$hierarchicalList->setLowerUsers($lowerArray);
$hierarchicalList->setCoworkerUsers($coworkerArray);
$hierarchicalList->setOutsideUsers($outsideArray);
$hierarchicalList->setStatus(HierarchicalListRepository::STATUS_VALIDATED);
$entityManager->persist($hierarchicalList);
$entityManager->flush();
if($hierarchicalList->getUser()->getLastLogin() == NULL || $hierarchicalList->getUser()->getPlatform() == 'browser'){
$mailerManager->sendHierarchicalListValidated($hierarchicalList->getUser());
} else {
$mailerManager->sendHierarchicalListValidated($hierarchicalList->getUser());
}
return $this->render('AdminBundle/Hierarchical/success.html.twig');
}
$allCompanyUsersArray = array();
$formattedUsersIds = array();
$formattedUsersFirstname = array();
$formattedUsersLastname = array();
foreach ($allCompanyUsers as $u){
$allCompanyUsersArray[] = $u->getEmail();
$formattedUsersIds[$u->getEmail()] = $u->getId();
$formattedUsersFirstname[$u->getEmail()] = $u->getFirstname();
$formattedUsersLastname[$u->getEmail()] = $u->getLastname();
}
$superiorUsersArray = array();
foreach($superiorUsers as $u){
$superiorUsersArray[] = $u->getEmail();
}
$equalUsersArray = array();
foreach($equalUsers as $u){
$equalUsersArray[] = $u->getEmail();
}
$lowerUsersArray = array();
foreach($lowerUsers as $u){
$lowerUsersArray[] = $u->getEmail();
}
$coworkerUsersArray = array();
foreach($coworkerUsers as $u){
$coworkerUsersArray[] = $u->getEmail();
}
$outsideUsersArray = array();
foreach($outsideUsers as $u){
$outsideUsersArray[] = $u->getEmail();
}
return $this->render('AdminBundle/Hierarchical/index.html.twig', array(
'hierarchicalList' => $hierarchicalList,
'superiorUsers' => $superiorUsers,
'equalUsers' => $equalUsers,
'lowerUsers' => $lowerUsers,
'coworkerUsers' => $coworkerUsers,
'outsideUsers' => $outsideUsers,
'allCompanyUsersArray' => $allCompanyUsersArray,
'superiorUsersArray' => $superiorUsersArray,
'equalUsersArray' => $equalUsersArray,
'lowerUsersArray' => $lowerUsersArray,
'coworkerUsersArray' => $coworkerUsersArray,
'outsideUsersArray' => $outsideUsersArray,
'formattedUsersIds' => $formattedUsersIds,
'formattedUsersFirstname' => $formattedUsersFirstname,
'formattedUsersLastname' => $formattedUsersLastname,
'form' => $hierarchicalListForm->createView(),
'token' => $token,
'list_id' => $id
));
} else {
return $this->render('AdminBundle/Hierarchical/error.html.twig');
}
}
/**
* @Route("client/hierarchical/{token}/{id}", name="client_hierarchical_list_validation")
*/
public function clientHierarchicalListAction (Request $request, $token, $id, EntityManagerInterface $entityManager, MailerManager $mailerManager)
{
$hierarchicalList = $entityManager->getRepository(HierarchicalList::class)->find($id);
if($hierarchicalList->getGuestToken() == $token || $hierarchicalList->getNoManagerToken() == $token) {
if(!$hierarchicalList->getManagerUser()){
return $this->redirectToRoute('client_hierarchical_list_add_manager', array('token' => $token, 'id' => $id));
}
$superiorUsers = $entityManager->getRepository(User::class)->findBy(array('id' => $hierarchicalList->getSuperiorUsers(), 'deletedAt' => null));
$equalUsers = $entityManager->getRepository(User::class)->findBy(array('id' => $hierarchicalList->getEqualUsers(), 'deletedAt' => null));
$lowerUsers = $entityManager->getRepository(User::class)->findBy(array('id' => $hierarchicalList->getLowerUsers(), 'deletedAt' => null));
$coworkerUsers = $entityManager->getRepository(User::class)->findBy(array('id' => $hierarchicalList->getCoworkerUsers(), 'deletedAt' => null));
$outsideUsers = $entityManager->getRepository(User::class)->findBy(array('id' => $hierarchicalList->getOutsideUsers(), 'deletedAt' => null));
$allCompanyUsers = $entityManager->getRepository(User::class)->findBy(array("company" => $hierarchicalList->getUser()->getCompany(), "deletedAt" => NULL));
foreach($superiorUsers as $u){
if(in_array($u, $allCompanyUsers)) {
//exists
} else {
$allCompanyUsers[] = $u;
}
}
foreach($equalUsers as $u){
if(in_array($u, $allCompanyUsers)) {
//exists
} else {
$allCompanyUsers[] = $u;
}
}
foreach($lowerUsers as $u){
if(in_array($u, $allCompanyUsers)) {
//exists
} else {
$allCompanyUsers[] = $u;
}
}
foreach($coworkerUsers as $u){
if(in_array($u, $allCompanyUsers)) {
//exists
} else {
$allCompanyUsers[] = $u;
}
}
foreach($outsideUsers as $u){
if(in_array($u, $allCompanyUsers)) {
//exists
} else {
$allCompanyUsers[] = $u;
}
}
$hierarchicalListForm = $this->createFormBuilder()
->add('superiorIds', TextType::class, array('label' => false, 'mapped' => false))
->add('equalIds', TextType::class, array('label' => false, 'mapped' => false))
->add('lowerIds', TextType::class, array('label' => false, 'mapped' => false))
->add('coworkerIds', TextType::class, array('label' => false, 'mapped' => false))
->add('outsideIds', TextType::class, array('label' => false, 'mapped' => false))
->add('save', SubmitType::class, array('label' => false))
->getForm();
$hierarchicalListForm->handleRequest($request);
if ($hierarchicalListForm->isSubmitted() && $hierarchicalListForm->isValid()) {
$superiorIds = $hierarchicalListForm->get('superiorIds')->getData();
$equalIds = $hierarchicalListForm->get('equalIds')->getData();
$lowerIds = $hierarchicalListForm->get('lowerIds')->getData();
$coworkerIds = $hierarchicalListForm->get('coworkerIds')->getData();
$outsideIds = $hierarchicalListForm->get('outsideIds')->getData();
$superior = explode(";", $superiorIds);
$superiorArray = array();
foreach ($superior as $uId){
$superiorArray[] = $uId;
}
$equal = explode(";", $equalIds);
$equalArray = array();
foreach ($equal as $uId){
$equalArray[] = $uId;
}
$lower = explode(";", $lowerIds);
$lowerArray = array();
foreach ($lower as $uId){
$lowerArray[] = $uId;
}
$coworker = explode(";", $coworkerIds);
$coworkerArray = array();
foreach ($coworker as $uId){
$coworkerArray[] = $uId;
}
$outside = explode(";", $outsideIds);
$outsideArray = array();
foreach ($outside as $uId){
$outsideArray[] = $uId;
}
$hierarchicalList->setSuperiorUsers($superiorArray);
$hierarchicalList->setEqualUsers($equalArray);
$hierarchicalList->setLowerUsers($lowerArray);
$hierarchicalList->setCoworkerUsers($coworkerArray);
$hierarchicalList->setOutsideUsers($outsideArray);
$oldStatus = $hierarchicalList->getStatus();
if($oldStatus == HierarchicalListRepository::STATUS_TODO || $oldStatus == HierarchicalListRepository::STATUS_WAITING_APPROVAL){
$hierarchicalList->setStatus(HierarchicalListRepository::STATUS_WAITING_APPROVAL);
}
if($oldStatus == HierarchicalListRepository::STATUS_MODIFIED_WAITING_APPROVAL || $oldStatus == HierarchicalListRepository::STATUS_VALIDATED){
$hierarchicalList->setStatus(HierarchicalListRepository::STATUS_MODIFIED_WAITING_APPROVAL);
}
$entityManager->persist($hierarchicalList);
$entityManager->flush();
if($oldStatus == HierarchicalListRepository::STATUS_TODO){
$mailerManager->sendHierarchicalListManagerNew($hierarchicalList);
} elseif ($oldStatus == HierarchicalListRepository::STATUS_WAITING_APPROVAL){
// Nothing to do
} elseif ($oldStatus == HierarchicalListRepository::STATUS_MODIFIED_WAITING_APPROVAL) {
// Nothing to do
} elseif ($oldStatus == HierarchicalListRepository::STATUS_VALIDATED){
$mailerManager->sendHierarchicalListManagerModified($hierarchicalList);
}
return $this->render('AdminBundle/Hierarchical/client_success.html.twig');
}
$allCompanyUsersArray = array();
$formattedUsersIds = array();
$formattedUsersFirstname = array();
$formattedUsersLastname = array();
foreach ($allCompanyUsers as $u){
$allCompanyUsersArray[] = $u->getEmail();
$formattedUsersIds[$u->getEmail()] = $u->getId();
$formattedUsersFirstname[$u->getEmail()] = $u->getFirstname();
$formattedUsersLastname[$u->getEmail()] = $u->getLastname();
}
$superiorUsersArray = array();
foreach($superiorUsers as $u){
$superiorUsersArray[] = $u->getEmail();
}
$equalUsersArray = array();
foreach($equalUsers as $u){
$equalUsersArray[] = $u->getEmail();
}
$lowerUsersArray = array();
foreach($lowerUsers as $u){
$lowerUsersArray[] = $u->getEmail();
}
$coworkerUsersArray = array();
foreach($coworkerUsers as $u){
$coworkerUsersArray[] = $u->getEmail();
}
$outsideUsersArray = array();
foreach($outsideUsers as $u){
$outsideUsersArray[] = $u->getEmail();
}
return $this->render('AdminBundle/Hierarchical/client_index.html.twig', array(
'hierarchicalList' => $hierarchicalList,
'superiorUsers' => $superiorUsers,
'equalUsers' => $equalUsers,
'lowerUsers' => $lowerUsers,
'coworkerUsers' => $coworkerUsers,
'outsideUsers' => $outsideUsers,
'allCompanyUsersArray' => $allCompanyUsersArray,
'superiorUsersArray' => $superiorUsersArray,
'equalUsersArray' => $equalUsersArray,
'lowerUsersArray' => $lowerUsersArray,
'coworkerUsersArray' => $coworkerUsersArray,
'outsideUsersArray' => $outsideUsersArray,
'formattedUsersIds' => $formattedUsersIds,
'formattedUsersFirstname' => $formattedUsersFirstname,
'formattedUsersLastname' => $formattedUsersLastname,
'form' => $hierarchicalListForm->createView(),
'token' => $token,
'list_id' => $id,
'hierarchicalListStatus' => $hierarchicalList->getStatus()
));
} else {
return $this->render('AdminBundle/Hierarchical/client_error.html.twig');
}
}
/**
* @Route("client/hierarchical/manager/{token}/{id}", name="client_hierarchical_list_add_manager")
*/
public function clientHierarchicalListAddManagerAction (Request $request, $token, $id, EntityManagerInterface $entityManager, ImportExportManager $importExportManager, TranslatorInterface $translator)
{
$hierarchicalList = $entityManager->getRepository(HierarchicalList::class)->find($id);
if($hierarchicalList->getGuestToken() == $token || $hierarchicalList->getNoManagerToken() == $token) {
if(!$hierarchicalList->getManagerUser()){
$managerForm = $this->createFormBuilder()
->add('firstname', TextType::class, array('label' => false, 'mapped' => false, 'required' => true))
->add('lastname', TextType::class, array('label' => false, 'mapped' => false, 'required' => true))
->add('email', EmailType::class, array('label' => false, 'mapped' => false, 'required' => true))
->add('save', SubmitType::class, array('label' => false))
->getForm();
$managerForm->handleRequest($request);
if ($managerForm->isSubmitted() && $managerForm->isValid()) {
$firstname = $managerForm->get('firstname')->getData();
$lastname = $managerForm->get('lastname')->getData();
$email = $managerForm->get('email')->getData();
if(!filter_var($email, FILTER_VALIDATE_EMAIL)){
$msg = $translator->trans(
"Merci de saisir un email valide.",
array(), 'client_bo'
);
$this->addFlash("error", $msg);
return $this->redirectToRoute('client_hierarchical_list_add_manager', array('token' => $token, 'id' => $id));
} else {
if($email && is_string($email) && $firstname && is_string($firstname) && $lastname && is_string($lastname)){
$manager = $entityManager->getRepository(User::class)->findOneBy(array('email'=>$email));
if(!$manager){
// if the manager does not exist, we create it
$manager = new User();
$passwords = $importExportManager->generatePassword($manager);
$manager->setPassword($passwords['password']);
$manager->setEnabled(true);
$manager->setLastname($lastname);
$manager->setFirstname($firstname);
$manager->setEmail($email);
$manager->setLocale($hierarchicalList->getUser()->getLocale());
$manager->setCompany($hierarchicalList->getUser()->getCompany());
$manager->setUsername($email);
if($importExportManager->checkUserValid($manager)){
$entityManager->persist($manager);
$entityManager->flush();
} else{
$msg = $translator->trans(
"Merci de saisir des données valides.",
array(), 'client_bo'
);
$this->addFlash("error", $msg);
return $this->redirectToRoute('client_hierarchical_list_add_manager', array('token' => $token, 'id' => $id));
}
}
$hierarchicalList->setManagerUser($manager);
$hierarchicalList->setSuperiorUsers([$manager->getId()]);
$entityManager->persist($manager);
$entityManager->persist($hierarchicalList);
$entityManager->flush();
$msg = $translator->trans(
"Votre manager a bien été ajouté, vous pouvez désormais saisir votre liste",
array(), 'client_bo'
);
$this->addFlash("success", $msg);
return $this->redirectToRoute('client_hierarchical_list_validation', array('token' => $token, 'id' => $id));
} else {
$msg = $translator->trans(
"Merci de saisir des données valides.",
array(), 'client_bo'
);
$this->addFlash("error", $msg);
return $this->redirectToRoute('client_hierarchical_list_add_manager', array('token' => $token, 'id' => $id));
}
}
}
return $this->render('AdminBundle/Hierarchical/client_add_manager.html.twig', array(
'hierarchicalList' => $hierarchicalList,
'managerForm' => $managerForm->createView(),
));
} else {
return $this->render('AdminBundle/Hierarchical/manager_already_added.html.twig', array('token' => $token, 'id' => $id));
}
} else {
return $this->render('AdminBundle/Hierarchical/client_error.html.twig');
}
}
/**
* @Route("/hierarchical/add-user/{token}/{id}", name="hierarchical_list_add_user_validation")
*/
public function hierarchicalListAddUserAction(Request $request, $token, $id, EntityManagerInterface $entityManager, UserManager $userManager, UserPasswordHasherInterface $passwordHasher)
{
if ($request->isXmlHttpRequest()) {
$hierarchicalList = $entityManager->getRepository(HierarchicalList::class)->find($id);
if($hierarchicalList->getGuestToken() == $token || $hierarchicalList->getNoManagerToken() == $token) {
$lastname = $request->get('lastname');
$firstname = $request->get('firstname');
$email = $request->get('email');
$u = $entityManager->getRepository(User::class)->findOneBy(array('email' => $email));
if (!$u) {
$u = new User();
$u->setFirstname($firstname);
$u->setLastname($lastname);
$u->setEmail($email);
$u->setUsername($email);
$u->setLocale($request->getLocale());
$plainpassword = substr(str_shuffle(str_repeat($x='0123456789abcdefghjklmnopqrstuvwxyzABCDEFGHJKLMNOPQRSTUVWXYZ', ceil(12/strlen($x)) )),1,12);
$password = $passwordHasher->hashPassword(
$u,
$plainpassword
);
$u->setPassword($password);
$entityManager->persist($u);
$entityManager->flush();
$userManager->createHierarchicalList($u);
return new JsonResponse(array('status' => 'ok', 'user' => array('id' => $u->getId(), 'firstname' => $firstname, 'lastname' => $lastname, 'email' => $email)));
} else {
return new JsonResponse(array('status' => 'ok', 'user' => array('id' => $u->getId(), 'firstname' => $firstname, 'lastname' => $lastname, 'email' => $email)));
}
} else {
return new JsonResponse(array('status' => 'error'));
}
} else {
return New Response("", 401);
}
}
}