src/Controller/DefaultController.php line 39

Open in your IDE?
  1. <?php
  2. /**
  3. * Created by PhpStorm.
  4. * User: grego
  5. * Date: 31/05/2022
  6. * Time: 16:00
  7. */
  8. namespace App\Controller;
  9. use App\Entity\Badge;
  10. use App\Entity\Feedback;
  11. use App\Entity\HierarchicalList;
  12. use App\Entity\SharedFeedback;
  13. use App\Entity\Skill;
  14. use App\Entity\User;
  15. use App\Manager\ImportExportManager;
  16. use App\Manager\MailerManager;
  17. use App\Manager\UserManager;
  18. use App\Repository\FeedbackRepository;
  19. use App\Repository\HierarchicalListRepository;
  20. use Doctrine\ORM\EntityManagerInterface;
  21. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  22. use Symfony\Component\Form\Extension\Core\Type\EmailType;
  23. use Symfony\Component\Form\Extension\Core\Type\SubmitType;
  24. use Symfony\Component\Form\Extension\Core\Type\TextType;
  25. use Symfony\Component\HttpFoundation\JsonResponse;
  26. use Symfony\Component\HttpFoundation\Request;
  27. use Symfony\Component\HttpFoundation\Response;
  28. use Symfony\Component\PasswordHasher\Hasher\UserPasswordHasherInterface;
  29. use Symfony\Component\Routing\Annotation\Route;
  30. use Symfony\Contracts\Translation\TranslatorInterface;
  31. class DefaultController extends AbstractController
  32. {
  33. /**
  34. * @Route("/", name="app_home")
  35. */
  36. public function indexAction(Request $request, TranslatorInterface $translator)
  37. {
  38. $user = $this->getUser();
  39. if($user && (in_array('ROLE_SUPER_ADMIN', $user->getRoles())
  40. || in_array('ROLE_ADMIN', $user->getRoles())
  41. || in_array('ROLE_BUSINESS_ADMIN', $user->getRoles())
  42. || in_array('ROLE_TECHNICAL_ADMIN', $user->getRoles())
  43. || in_array('ROLE_SBM', $user->getRoles())
  44. || in_array('ROLE_ADMIN_COMPANY_ACCESS', $user->getRoles())
  45. || in_array('ROLE_AMBASSADEUR', $user->getRoles())
  46. ||in_array('ROLE_MANAGER', $user->getRoles()) )) {
  47. return $this->redirectToRoute('client_user_list');
  48. } else {
  49. // Remove access to admin client
  50. /*
  51. if ($user) {
  52. $msg = $translator->trans(
  53. "Vous n'avez pas accès à l'interface Client",
  54. array(), 'client_bo'
  55. );
  56. $this->addFlash("error", $msg);
  57. }
  58. return $this->redirectToRoute("login");
  59. */
  60. return $this->render('ClientBOBundle/Common/forbidden_access.html.twig');
  61. }
  62. }
  63. /**
  64. * @Route("/shared-feedback/{token}/{status}")
  65. */
  66. public function sharedFeedbackAction(Request $request, EntityManagerInterface $entityManager, $token, $status=false)
  67. {
  68. $shared = $entityManager->getRepository(SharedFeedback::class)->findOneByToken($token);
  69. if($shared){
  70. $canAccessFeedback = false;
  71. $errorMessage = "";
  72. switch($shared->getType()) {
  73. case 'email':
  74. $canAccessFeedback = $shared->getAnswers() < 25; //Si moins de 25 personnes ont répondu
  75. $errorMessage = "Nombre de réponses maximal atteint.";
  76. break;
  77. case 'gmail':
  78. $canAccessFeedback = $shared->getAnswers() < 25; //Si moins de 25 personnes ont répondu
  79. $errorMessage = "Nombre de réponses maximal atteint.";
  80. break;
  81. case 'sms':
  82. $canAccessFeedback = $shared->getAnswers() < 25; //Si moins de 25 personnes ont répondu
  83. $errorMessage = "Nombre de réponses maximal atteint.";
  84. break;
  85. case 'link':
  86. $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
  87. $errorMessage = "Délai maximal de réponse dépassé.";
  88. break;
  89. }
  90. if($canAccessFeedback){
  91. $feedback = new Feedback();
  92. $feedback->setSkill($shared->getSkill());
  93. $feedback->setSender($shared->getSender());
  94. $feedback->setStatus(FeedbackRepository::STATUS_PENDING);
  95. if($shared->getEventTitle()){
  96. $feedback->setEventTitle($shared->getEventTitle());
  97. }
  98. $entityManager->persist($feedback);
  99. $entityManager->flush();
  100. $shared->setAnswers( $shared->getAnswers() + 1);
  101. $entityManager->persist($shared);
  102. $entityManager->flush();
  103. } else {
  104. return new Response($errorMessage, 401);
  105. }
  106. }else{
  107. if(!$status){
  108. return $this->redirect("https://manager.globalcoss.com/shared-feedback/".$token."/true");
  109. } else {
  110. return $this->redirect("https://www.5feedback.com/feedback/?code=invalid");
  111. }
  112. }
  113. switch($shared->getType()) {
  114. case 'sms':
  115. return $this->redirect($feedback->getGuestUrl());
  116. break;
  117. case 'email':
  118. return $this->redirect($feedback->getGuestUrl());
  119. break;
  120. case 'gmail':
  121. return $this->redirect($feedback->getGuestUrl());
  122. break;
  123. case 'link':
  124. return $this->redirect($feedback->getGuestUrl()."?guest=true");
  125. break;
  126. default:
  127. return new Response($errorMessage, 401);
  128. break;
  129. }
  130. }
  131. /**
  132. * @Route("/badges/{token}", name="badges_detail")
  133. */
  134. public function detailAction(Request $request, $token, EntityManagerInterface $entityManager, UserManager $userManager){
  135. $badges = $entityManager->getRepository(Badge::class)->findBy(array('token' => $token));
  136. if(!$badges){
  137. return $this->render('AdminBundle/Badge/error.html.twig');
  138. } else {
  139. $badges = $badges[0];
  140. }
  141. //$request->setLocale($badges->getLocale());
  142. $skillStats = array();
  143. foreach ($badges->getSkillIds() as $skillId){
  144. $skill = $entityManager->getRepository(Skill::class)->find($skillId);
  145. $firstFeedback = $entityManager->getRepository(Feedback::class)->getFirstFeedbackOnSkill($badges->getUser(), $skill, $badges->getCreatedAt());
  146. $lastFeedback = $entityManager->getRepository(Feedback::class)->getLastFeedbackOnSkill($badges->getUser(), $skill, $badges->getCreatedAt());
  147. $skillStats[] = $userManager->getSkillStatisticsByDate($badges->getUser(), $skillId, $firstFeedback->getCreatedAt(), $lastFeedback->getAnsweredAt(), $request->getLocale());
  148. }
  149. foreach ($skillStats as &$skillStat){
  150. usort($skillStat['strengths'], function($a, $b)
  151. {
  152. return ($a['count'] <= $b['count']);
  153. });
  154. }
  155. if($badges->getUser()->getCompany() && $badges->getUser()->getCompany()->getBadgesActive()
  156. && $badges->getUser()->getHierarchicalList() &&
  157. ($badges->getUser()->getHierarchicalList()->getStatus() == HierarchicalListRepository::STATUS_VALIDATED
  158. || $badges->getUser()->getHierarchicalList()->getStatus() == HierarchicalListRepository::STATUS_MODIFIED_WAITING_APPROVAL )){
  159. $badgesActive = true;
  160. } else {
  161. $badgesActive = false;
  162. }
  163. return $this->render('AdminBundle/Badge/detail.html.twig', array(
  164. 'user' => $badges->getUser(),
  165. 'badgesActive' => $badgesActive,
  166. 'badges' => $badges,
  167. 'stats' => $skillStats,
  168. ));
  169. }
  170. /**
  171. * @Route("/hierarchical/{token}/{id}", name="hierarchical_list_validation")
  172. */
  173. public function hierarchicalListAction(Request $request, $token, $id, EntityManagerInterface $entityManager, MailerManager $mailerManager)
  174. {
  175. $hierarchicalList = $entityManager->getRepository(HierarchicalList::class)->find($id);
  176. if($hierarchicalList->getGuestToken() == $token || $hierarchicalList->getNoManagerToken() == $token) {
  177. $superiorUsers = $entityManager->getRepository(User::class)->findBy(array('id' => $hierarchicalList->getSuperiorUsers(), 'deletedAt' => null));
  178. $equalUsers = $entityManager->getRepository(User::class)->findBy(array('id' => $hierarchicalList->getEqualUsers(), 'deletedAt' => null));
  179. $lowerUsers = $entityManager->getRepository(User::class)->findBy(array('id' => $hierarchicalList->getLowerUsers(), 'deletedAt' => null));
  180. $coworkerUsers = $entityManager->getRepository(User::class)->findBy(array('id' => $hierarchicalList->getCoworkerUsers(), 'deletedAt' => null));
  181. $outsideUsers = $entityManager->getRepository(User::class)->findBy(array('id' => $hierarchicalList->getOutsideUsers(), 'deletedAt' => null));
  182. $allCompanyUsers = $entityManager->getRepository(User::class)->findBy(array("company" => $hierarchicalList->getUser()->getCompany(), "deletedAt" => NULL));
  183. foreach($superiorUsers as $u){
  184. if(in_array($u, $allCompanyUsers)) {
  185. //exists
  186. } else {
  187. $allCompanyUsers[] = $u;
  188. }
  189. }
  190. foreach($equalUsers as $u){
  191. if(in_array($u, $allCompanyUsers)) {
  192. //exists
  193. } else {
  194. $allCompanyUsers[] = $u;
  195. }
  196. }
  197. foreach($lowerUsers as $u){
  198. if(in_array($u, $allCompanyUsers)) {
  199. //exists
  200. } else {
  201. $allCompanyUsers[] = $u;
  202. }
  203. }
  204. foreach($coworkerUsers as $u){
  205. if(in_array($u, $allCompanyUsers)) {
  206. //exists
  207. } else {
  208. $allCompanyUsers[] = $u;
  209. }
  210. }
  211. foreach($outsideUsers as $u){
  212. if(in_array($u, $allCompanyUsers)) {
  213. //exists
  214. } else {
  215. $allCompanyUsers[] = $u;
  216. }
  217. }
  218. $hierarchicalListForm = $this->createFormBuilder()
  219. ->add('superiorIds', TextType::class, array('label' => false, 'mapped' => false))
  220. ->add('equalIds', TextType::class, array('label' => false, 'mapped' => false))
  221. ->add('lowerIds', TextType::class, array('label' => false, 'mapped' => false))
  222. ->add('coworkerIds', TextType::class, array('label' => false, 'mapped' => false))
  223. ->add('outsideIds', TextType::class, array('label' => false, 'mapped' => false))
  224. ->add('save', SubmitType::class, array('label' => false))
  225. ->getForm();
  226. $hierarchicalListForm->handleRequest($request);
  227. if ($hierarchicalListForm->isSubmitted() && $hierarchicalListForm->isValid()) {
  228. $superiorIds = $hierarchicalListForm->get('superiorIds')->getData();
  229. $equalIds = $hierarchicalListForm->get('equalIds')->getData();
  230. $lowerIds = $hierarchicalListForm->get('lowerIds')->getData();
  231. $coworkerIds = $hierarchicalListForm->get('coworkerIds')->getData();
  232. $outsideIds = $hierarchicalListForm->get('outsideIds')->getData();
  233. $superior = explode(";", $superiorIds);
  234. $superiorArray = array();
  235. foreach ($superior as $uId){
  236. $superiorArray[] = $uId;
  237. }
  238. $equal = explode(";", $equalIds);
  239. $equalArray = array();
  240. foreach ($equal as $uId){
  241. $equalArray[] = $uId;
  242. }
  243. $lower = explode(";", $lowerIds);
  244. $lowerArray = array();
  245. foreach ($lower as $uId){
  246. $lowerArray[] = $uId;
  247. }
  248. $coworker = explode(";", $coworkerIds);
  249. $coworkerArray = array();
  250. foreach ($coworker as $uId){
  251. $coworkerArray[] = $uId;
  252. }
  253. $outside = explode(";", $outsideIds);
  254. $outsideArray = array();
  255. foreach ($outside as $uId){
  256. $outsideArray[] = $uId;
  257. }
  258. $hierarchicalList->setSuperiorUsers($superiorArray);
  259. $hierarchicalList->setEqualUsers($equalArray);
  260. $hierarchicalList->setLowerUsers($lowerArray);
  261. $hierarchicalList->setCoworkerUsers($coworkerArray);
  262. $hierarchicalList->setOutsideUsers($outsideArray);
  263. $hierarchicalList->setStatus(HierarchicalListRepository::STATUS_VALIDATED);
  264. $entityManager->persist($hierarchicalList);
  265. $entityManager->flush();
  266. if($hierarchicalList->getUser()->getLastLogin() == NULL || $hierarchicalList->getUser()->getPlatform() == 'browser'){
  267. $mailerManager->sendHierarchicalListValidated($hierarchicalList->getUser());
  268. } else {
  269. $mailerManager->sendHierarchicalListValidated($hierarchicalList->getUser());
  270. }
  271. return $this->render('AdminBundle/Hierarchical/success.html.twig');
  272. }
  273. $allCompanyUsersArray = array();
  274. $formattedUsersIds = array();
  275. $formattedUsersFirstname = array();
  276. $formattedUsersLastname = array();
  277. foreach ($allCompanyUsers as $u){
  278. $allCompanyUsersArray[] = $u->getEmail();
  279. $formattedUsersIds[$u->getEmail()] = $u->getId();
  280. $formattedUsersFirstname[$u->getEmail()] = $u->getFirstname();
  281. $formattedUsersLastname[$u->getEmail()] = $u->getLastname();
  282. }
  283. $superiorUsersArray = array();
  284. foreach($superiorUsers as $u){
  285. $superiorUsersArray[] = $u->getEmail();
  286. }
  287. $equalUsersArray = array();
  288. foreach($equalUsers as $u){
  289. $equalUsersArray[] = $u->getEmail();
  290. }
  291. $lowerUsersArray = array();
  292. foreach($lowerUsers as $u){
  293. $lowerUsersArray[] = $u->getEmail();
  294. }
  295. $coworkerUsersArray = array();
  296. foreach($coworkerUsers as $u){
  297. $coworkerUsersArray[] = $u->getEmail();
  298. }
  299. $outsideUsersArray = array();
  300. foreach($outsideUsers as $u){
  301. $outsideUsersArray[] = $u->getEmail();
  302. }
  303. return $this->render('AdminBundle/Hierarchical/index.html.twig', array(
  304. 'hierarchicalList' => $hierarchicalList,
  305. 'superiorUsers' => $superiorUsers,
  306. 'equalUsers' => $equalUsers,
  307. 'lowerUsers' => $lowerUsers,
  308. 'coworkerUsers' => $coworkerUsers,
  309. 'outsideUsers' => $outsideUsers,
  310. 'allCompanyUsersArray' => $allCompanyUsersArray,
  311. 'superiorUsersArray' => $superiorUsersArray,
  312. 'equalUsersArray' => $equalUsersArray,
  313. 'lowerUsersArray' => $lowerUsersArray,
  314. 'coworkerUsersArray' => $coworkerUsersArray,
  315. 'outsideUsersArray' => $outsideUsersArray,
  316. 'formattedUsersIds' => $formattedUsersIds,
  317. 'formattedUsersFirstname' => $formattedUsersFirstname,
  318. 'formattedUsersLastname' => $formattedUsersLastname,
  319. 'form' => $hierarchicalListForm->createView(),
  320. 'token' => $token,
  321. 'list_id' => $id
  322. ));
  323. } else {
  324. return $this->render('AdminBundle/Hierarchical/error.html.twig');
  325. }
  326. }
  327. /**
  328. * @Route("client/hierarchical/{token}/{id}", name="client_hierarchical_list_validation")
  329. */
  330. public function clientHierarchicalListAction (Request $request, $token, $id, EntityManagerInterface $entityManager, MailerManager $mailerManager)
  331. {
  332. $hierarchicalList = $entityManager->getRepository(HierarchicalList::class)->find($id);
  333. if($hierarchicalList->getGuestToken() == $token || $hierarchicalList->getNoManagerToken() == $token) {
  334. if(!$hierarchicalList->getManagerUser()){
  335. return $this->redirectToRoute('client_hierarchical_list_add_manager', array('token' => $token, 'id' => $id));
  336. }
  337. $superiorUsers = $entityManager->getRepository(User::class)->findBy(array('id' => $hierarchicalList->getSuperiorUsers(), 'deletedAt' => null));
  338. $equalUsers = $entityManager->getRepository(User::class)->findBy(array('id' => $hierarchicalList->getEqualUsers(), 'deletedAt' => null));
  339. $lowerUsers = $entityManager->getRepository(User::class)->findBy(array('id' => $hierarchicalList->getLowerUsers(), 'deletedAt' => null));
  340. $coworkerUsers = $entityManager->getRepository(User::class)->findBy(array('id' => $hierarchicalList->getCoworkerUsers(), 'deletedAt' => null));
  341. $outsideUsers = $entityManager->getRepository(User::class)->findBy(array('id' => $hierarchicalList->getOutsideUsers(), 'deletedAt' => null));
  342. $allCompanyUsers = $entityManager->getRepository(User::class)->findBy(array("company" => $hierarchicalList->getUser()->getCompany(), "deletedAt" => NULL));
  343. foreach($superiorUsers as $u){
  344. if(in_array($u, $allCompanyUsers)) {
  345. //exists
  346. } else {
  347. $allCompanyUsers[] = $u;
  348. }
  349. }
  350. foreach($equalUsers as $u){
  351. if(in_array($u, $allCompanyUsers)) {
  352. //exists
  353. } else {
  354. $allCompanyUsers[] = $u;
  355. }
  356. }
  357. foreach($lowerUsers as $u){
  358. if(in_array($u, $allCompanyUsers)) {
  359. //exists
  360. } else {
  361. $allCompanyUsers[] = $u;
  362. }
  363. }
  364. foreach($coworkerUsers as $u){
  365. if(in_array($u, $allCompanyUsers)) {
  366. //exists
  367. } else {
  368. $allCompanyUsers[] = $u;
  369. }
  370. }
  371. foreach($outsideUsers as $u){
  372. if(in_array($u, $allCompanyUsers)) {
  373. //exists
  374. } else {
  375. $allCompanyUsers[] = $u;
  376. }
  377. }
  378. $hierarchicalListForm = $this->createFormBuilder()
  379. ->add('superiorIds', TextType::class, array('label' => false, 'mapped' => false))
  380. ->add('equalIds', TextType::class, array('label' => false, 'mapped' => false))
  381. ->add('lowerIds', TextType::class, array('label' => false, 'mapped' => false))
  382. ->add('coworkerIds', TextType::class, array('label' => false, 'mapped' => false))
  383. ->add('outsideIds', TextType::class, array('label' => false, 'mapped' => false))
  384. ->add('save', SubmitType::class, array('label' => false))
  385. ->getForm();
  386. $hierarchicalListForm->handleRequest($request);
  387. if ($hierarchicalListForm->isSubmitted() && $hierarchicalListForm->isValid()) {
  388. $superiorIds = $hierarchicalListForm->get('superiorIds')->getData();
  389. $equalIds = $hierarchicalListForm->get('equalIds')->getData();
  390. $lowerIds = $hierarchicalListForm->get('lowerIds')->getData();
  391. $coworkerIds = $hierarchicalListForm->get('coworkerIds')->getData();
  392. $outsideIds = $hierarchicalListForm->get('outsideIds')->getData();
  393. $superior = explode(";", $superiorIds);
  394. $superiorArray = array();
  395. foreach ($superior as $uId){
  396. $superiorArray[] = $uId;
  397. }
  398. $equal = explode(";", $equalIds);
  399. $equalArray = array();
  400. foreach ($equal as $uId){
  401. $equalArray[] = $uId;
  402. }
  403. $lower = explode(";", $lowerIds);
  404. $lowerArray = array();
  405. foreach ($lower as $uId){
  406. $lowerArray[] = $uId;
  407. }
  408. $coworker = explode(";", $coworkerIds);
  409. $coworkerArray = array();
  410. foreach ($coworker as $uId){
  411. $coworkerArray[] = $uId;
  412. }
  413. $outside = explode(";", $outsideIds);
  414. $outsideArray = array();
  415. foreach ($outside as $uId){
  416. $outsideArray[] = $uId;
  417. }
  418. $hierarchicalList->setSuperiorUsers($superiorArray);
  419. $hierarchicalList->setEqualUsers($equalArray);
  420. $hierarchicalList->setLowerUsers($lowerArray);
  421. $hierarchicalList->setCoworkerUsers($coworkerArray);
  422. $hierarchicalList->setOutsideUsers($outsideArray);
  423. $oldStatus = $hierarchicalList->getStatus();
  424. if($oldStatus == HierarchicalListRepository::STATUS_TODO || $oldStatus == HierarchicalListRepository::STATUS_WAITING_APPROVAL){
  425. $hierarchicalList->setStatus(HierarchicalListRepository::STATUS_WAITING_APPROVAL);
  426. }
  427. if($oldStatus == HierarchicalListRepository::STATUS_MODIFIED_WAITING_APPROVAL || $oldStatus == HierarchicalListRepository::STATUS_VALIDATED){
  428. $hierarchicalList->setStatus(HierarchicalListRepository::STATUS_MODIFIED_WAITING_APPROVAL);
  429. }
  430. $entityManager->persist($hierarchicalList);
  431. $entityManager->flush();
  432. if($oldStatus == HierarchicalListRepository::STATUS_TODO){
  433. $mailerManager->sendHierarchicalListManagerNew($hierarchicalList);
  434. } elseif ($oldStatus == HierarchicalListRepository::STATUS_WAITING_APPROVAL){
  435. // Nothing to do
  436. } elseif ($oldStatus == HierarchicalListRepository::STATUS_MODIFIED_WAITING_APPROVAL) {
  437. // Nothing to do
  438. } elseif ($oldStatus == HierarchicalListRepository::STATUS_VALIDATED){
  439. $mailerManager->sendHierarchicalListManagerModified($hierarchicalList);
  440. }
  441. return $this->render('AdminBundle/Hierarchical/client_success.html.twig');
  442. }
  443. $allCompanyUsersArray = array();
  444. $formattedUsersIds = array();
  445. $formattedUsersFirstname = array();
  446. $formattedUsersLastname = array();
  447. foreach ($allCompanyUsers as $u){
  448. $allCompanyUsersArray[] = $u->getEmail();
  449. $formattedUsersIds[$u->getEmail()] = $u->getId();
  450. $formattedUsersFirstname[$u->getEmail()] = $u->getFirstname();
  451. $formattedUsersLastname[$u->getEmail()] = $u->getLastname();
  452. }
  453. $superiorUsersArray = array();
  454. foreach($superiorUsers as $u){
  455. $superiorUsersArray[] = $u->getEmail();
  456. }
  457. $equalUsersArray = array();
  458. foreach($equalUsers as $u){
  459. $equalUsersArray[] = $u->getEmail();
  460. }
  461. $lowerUsersArray = array();
  462. foreach($lowerUsers as $u){
  463. $lowerUsersArray[] = $u->getEmail();
  464. }
  465. $coworkerUsersArray = array();
  466. foreach($coworkerUsers as $u){
  467. $coworkerUsersArray[] = $u->getEmail();
  468. }
  469. $outsideUsersArray = array();
  470. foreach($outsideUsers as $u){
  471. $outsideUsersArray[] = $u->getEmail();
  472. }
  473. return $this->render('AdminBundle/Hierarchical/client_index.html.twig', array(
  474. 'hierarchicalList' => $hierarchicalList,
  475. 'superiorUsers' => $superiorUsers,
  476. 'equalUsers' => $equalUsers,
  477. 'lowerUsers' => $lowerUsers,
  478. 'coworkerUsers' => $coworkerUsers,
  479. 'outsideUsers' => $outsideUsers,
  480. 'allCompanyUsersArray' => $allCompanyUsersArray,
  481. 'superiorUsersArray' => $superiorUsersArray,
  482. 'equalUsersArray' => $equalUsersArray,
  483. 'lowerUsersArray' => $lowerUsersArray,
  484. 'coworkerUsersArray' => $coworkerUsersArray,
  485. 'outsideUsersArray' => $outsideUsersArray,
  486. 'formattedUsersIds' => $formattedUsersIds,
  487. 'formattedUsersFirstname' => $formattedUsersFirstname,
  488. 'formattedUsersLastname' => $formattedUsersLastname,
  489. 'form' => $hierarchicalListForm->createView(),
  490. 'token' => $token,
  491. 'list_id' => $id,
  492. 'hierarchicalListStatus' => $hierarchicalList->getStatus()
  493. ));
  494. } else {
  495. return $this->render('AdminBundle/Hierarchical/client_error.html.twig');
  496. }
  497. }
  498. /**
  499. * @Route("client/hierarchical/manager/{token}/{id}", name="client_hierarchical_list_add_manager")
  500. */
  501. public function clientHierarchicalListAddManagerAction (Request $request, $token, $id, EntityManagerInterface $entityManager, ImportExportManager $importExportManager, TranslatorInterface $translator)
  502. {
  503. $hierarchicalList = $entityManager->getRepository(HierarchicalList::class)->find($id);
  504. if($hierarchicalList->getGuestToken() == $token || $hierarchicalList->getNoManagerToken() == $token) {
  505. if(!$hierarchicalList->getManagerUser()){
  506. $managerForm = $this->createFormBuilder()
  507. ->add('firstname', TextType::class, array('label' => false, 'mapped' => false, 'required' => true))
  508. ->add('lastname', TextType::class, array('label' => false, 'mapped' => false, 'required' => true))
  509. ->add('email', EmailType::class, array('label' => false, 'mapped' => false, 'required' => true))
  510. ->add('save', SubmitType::class, array('label' => false))
  511. ->getForm();
  512. $managerForm->handleRequest($request);
  513. if ($managerForm->isSubmitted() && $managerForm->isValid()) {
  514. $firstname = $managerForm->get('firstname')->getData();
  515. $lastname = $managerForm->get('lastname')->getData();
  516. $email = $managerForm->get('email')->getData();
  517. if(!filter_var($email, FILTER_VALIDATE_EMAIL)){
  518. $msg = $translator->trans(
  519. "Merci de saisir un email valide.",
  520. array(), 'client_bo'
  521. );
  522. $this->addFlash("error", $msg);
  523. return $this->redirectToRoute('client_hierarchical_list_add_manager', array('token' => $token, 'id' => $id));
  524. } else {
  525. if($email && is_string($email) && $firstname && is_string($firstname) && $lastname && is_string($lastname)){
  526. $manager = $entityManager->getRepository(User::class)->findOneBy(array('email'=>$email));
  527. if(!$manager){
  528. // if the manager does not exist, we create it
  529. $manager = new User();
  530. $passwords = $importExportManager->generatePassword($manager);
  531. $manager->setPassword($passwords['password']);
  532. $manager->setEnabled(true);
  533. $manager->setLastname($lastname);
  534. $manager->setFirstname($firstname);
  535. $manager->setEmail($email);
  536. $manager->setLocale($hierarchicalList->getUser()->getLocale());
  537. $manager->setCompany($hierarchicalList->getUser()->getCompany());
  538. $manager->setUsername($email);
  539. if($importExportManager->checkUserValid($manager)){
  540. $entityManager->persist($manager);
  541. $entityManager->flush();
  542. } else{
  543. $msg = $translator->trans(
  544. "Merci de saisir des données valides.",
  545. array(), 'client_bo'
  546. );
  547. $this->addFlash("error", $msg);
  548. return $this->redirectToRoute('client_hierarchical_list_add_manager', array('token' => $token, 'id' => $id));
  549. }
  550. }
  551. $hierarchicalList->setManagerUser($manager);
  552. $hierarchicalList->setSuperiorUsers([$manager->getId()]);
  553. $entityManager->persist($manager);
  554. $entityManager->persist($hierarchicalList);
  555. $entityManager->flush();
  556. $msg = $translator->trans(
  557. "Votre manager a bien été ajouté, vous pouvez désormais saisir votre liste",
  558. array(), 'client_bo'
  559. );
  560. $this->addFlash("success", $msg);
  561. return $this->redirectToRoute('client_hierarchical_list_validation', array('token' => $token, 'id' => $id));
  562. } else {
  563. $msg = $translator->trans(
  564. "Merci de saisir des données valides.",
  565. array(), 'client_bo'
  566. );
  567. $this->addFlash("error", $msg);
  568. return $this->redirectToRoute('client_hierarchical_list_add_manager', array('token' => $token, 'id' => $id));
  569. }
  570. }
  571. }
  572. return $this->render('AdminBundle/Hierarchical/client_add_manager.html.twig', array(
  573. 'hierarchicalList' => $hierarchicalList,
  574. 'managerForm' => $managerForm->createView(),
  575. ));
  576. } else {
  577. return $this->render('AdminBundle/Hierarchical/manager_already_added.html.twig', array('token' => $token, 'id' => $id));
  578. }
  579. } else {
  580. return $this->render('AdminBundle/Hierarchical/client_error.html.twig');
  581. }
  582. }
  583. /**
  584. * @Route("/hierarchical/add-user/{token}/{id}", name="hierarchical_list_add_user_validation")
  585. */
  586. public function hierarchicalListAddUserAction(Request $request, $token, $id, EntityManagerInterface $entityManager, UserManager $userManager, UserPasswordHasherInterface $passwordHasher)
  587. {
  588. if ($request->isXmlHttpRequest()) {
  589. $hierarchicalList = $entityManager->getRepository(HierarchicalList::class)->find($id);
  590. if($hierarchicalList->getGuestToken() == $token || $hierarchicalList->getNoManagerToken() == $token) {
  591. $lastname = $request->get('lastname');
  592. $firstname = $request->get('firstname');
  593. $email = $request->get('email');
  594. $u = $entityManager->getRepository(User::class)->findOneBy(array('email' => $email));
  595. if (!$u) {
  596. $u = new User();
  597. $u->setFirstname($firstname);
  598. $u->setLastname($lastname);
  599. $u->setEmail($email);
  600. $u->setUsername($email);
  601. $u->setLocale($request->getLocale());
  602. $plainpassword = substr(str_shuffle(str_repeat($x='0123456789abcdefghjklmnopqrstuvwxyzABCDEFGHJKLMNOPQRSTUVWXYZ', ceil(12/strlen($x)) )),1,12);
  603. $password = $passwordHasher->hashPassword(
  604. $u,
  605. $plainpassword
  606. );
  607. $u->setPassword($password);
  608. $entityManager->persist($u);
  609. $entityManager->flush();
  610. $userManager->createHierarchicalList($u);
  611. return new JsonResponse(array('status' => 'ok', 'user' => array('id' => $u->getId(), 'firstname' => $firstname, 'lastname' => $lastname, 'email' => $email)));
  612. } else {
  613. return new JsonResponse(array('status' => 'ok', 'user' => array('id' => $u->getId(), 'firstname' => $firstname, 'lastname' => $lastname, 'email' => $email)));
  614. }
  615. } else {
  616. return new JsonResponse(array('status' => 'error'));
  617. }
  618. } else {
  619. return New Response("", 401);
  620. }
  621. }
  622. }