src/Controller/SecurityController.php line 33

Open in your IDE?
  1. <?php
  2. /**
  3.  * Created by PhpStorm.
  4.  * User: jhonn
  5.  * Date: 8/24/2018
  6.  * Time: 2:35 PM
  7.  */
  8. namespace App\Controller;
  9. use App\Entity\Answers;
  10. use App\Entity\Company;
  11. use App\Entity\Ebook;
  12. use App\Entity\Group;
  13. use App\Entity\Question;
  14. use App\Entity\Role;
  15. use App\Entity\Student;
  16. use App\Entity\Survey;
  17. use App\Entity\SurveySent;
  18. use App\Entity\Team;
  19. use App\Entity\Trainer;
  20. use App\Entity\Users;
  21. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  22. use Symfony\Component\HttpFoundation\JsonResponse;
  23. use Symfony\Component\HttpFoundation\Request;
  24. use Symfony\Component\HttpFoundation\Response;
  25. use Symfony\Component\Security\Core\Encoder\UserPasswordEncoderInterface;
  26. use Symfony\Component\Security\Http\Authentication\AuthenticationUtils;
  27. class SecurityController extends AbstractController
  28. {
  29.     public function login(AuthenticationUtils $authenticationUtilsRequest $request)
  30.     {
  31.         // get the login error if there is one
  32.         $error $authenticationUtils->getLastAuthenticationError();
  33.         // last username entered by the user
  34.         $lastUsername $authenticationUtils->getLastUsername();
  35.         return $this->render('security/login.html.twig', array(
  36.             'last_username' => $lastUsername,
  37.             'error'         => $error,
  38.         ));
  39.     }
  40.     public function register(UserPasswordEncoderInterface $encoderRequest $request)
  41.     {
  42.         $entityManager $this->getDoctrine()->getManager();
  43. //        if($request->request->get('id')!=0){
  44. //
  45. //            $user = $entityManager->getRepository(AdminUsers::class)
  46. //                ->find($request->request->get('id'));;
  47. //        }else{
  48. //
  49. //        }
  50. //        $plainPassword = $request->request->get('password');
  51. //        $name=  $request->request->get('name');
  52. //        $email =  $request->request->get('email');
  53.         $plainPassword '123qwe!@#QWE';
  54.         $name=  'admin';
  55.         $email =  'admin@grid.com';
  56.         $user = new Users();
  57.         $user->setUsername($email);
  58.         $user->setName($name);
  59.         if($plainPassword!=""){
  60.             $encoded $encoder->encodePassword($user$plainPassword);
  61.             $user->setPassword($encoded);
  62.         }
  63.         elseif ($user->getId()==null){
  64.             return "error";
  65.         }
  66.         // whatever *your* User object is
  67.         $user->setIsActive(true);
  68.         $roleId $request->request->get('role');
  69.         $roleId 1;
  70.             $role $entityManager->getRepository(Role::class)
  71.                 ->find($roleId);;
  72.             $user->addRole($role);
  73.         $entityManager->persist($user);
  74.         $entityManager->flush();
  75.         return $this->redirectToRoute('users_list');
  76.     }
  77.     public function deleteTrainerRequest $request){
  78.         $id =  $request->request->get('id');
  79.         $entityManager $this->getDoctrine()->getManager();
  80.         $trainer =  $entityManager->getRepository(Users::class)
  81.             ->find($id);;
  82.         $entityManager->remove($trainer);
  83.         $entityManager->flush();
  84.         return new Response('success',200);
  85.     }
  86.     public function registerTrainer(UserPasswordEncoderInterface $encoderRequest $request,\Swift_Mailer $mailer)
  87.     {
  88.         $entityManager $this->getDoctrine()->getManager();
  89. //        if($request->request->get('id')!=0){
  90. //
  91. //            $user = $entityManager->getRepository(AdminUsers::class)
  92. //                ->find($request->request->get('id'));;
  93. //        }else{
  94. //
  95. //        }
  96. //        $plainPassword = $request->request->get('password');
  97.         $name=  $request->request->get('name');
  98.         $email =  $request->request->get('email');
  99.         $plainPassword '123qwe!@#QWE';
  100.         $user = new Users();
  101.         $user->setUsername($email);
  102.         $user->setName($name);
  103.         if($plainPassword!=""){
  104.             $encoded $encoder->encodePassword($user$plainPassword);
  105.             $user->setPassword($encoded);
  106.         }
  107.         elseif ($user->getId()==null){
  108.             return "error";
  109.         }
  110.         // whatever *your* User object is
  111.         $user->setIsActive(true);
  112. //        $roleId = $request->request->get('role');
  113.         $roleId 2;
  114.             $role $entityManager->getRepository(Role::class)
  115.                 ->find($roleId);;
  116.             $user->addRole($role);
  117.         $entityManager->persist($user);
  118.         $entityManager->flush();
  119.         $trainer = new Trainer();
  120.         $trainer->setFirstName($name);
  121.         $trainer->setId($user);
  122.         $entityManager->persist($trainer);
  123.         $entityManager->flush();
  124.         $message = (new \Swift_Message('Your Password Have been successfully changed '))
  125.             ->setFrom('gridsurvey@Gridinternational.com')
  126.             ->setTo($user->getUsername())
  127.             ->setBody(
  128.                 $this->renderView(
  129.                 // templates/emails/registration.html.twig
  130.                     'emails/trainerChangePassword.html.twig',
  131.                     ['user' => $user]
  132.                 ),
  133.                 'text/html'
  134.             )
  135.         ;
  136.         $mailer->send($message);
  137.         return $this->redirectToRoute('trainer-list');
  138.     }
  139.      public function studentCreatePost(UserPasswordEncoderInterface $encoderRequest $request,\Swift_Mailer $mailer)
  140.      {
  141.          $name=  $request->request->get('name');
  142.          $email =  $request->request->get('email');
  143.          $company =  $request->request->get('company');
  144.          $manager =  $request->request->get('manager');
  145.          $secondManager =  $request->request->get('secondManager');
  146.          $student=  $this->registerStudentIfNotExist($encoder,$email,$name);
  147.          $entityManager $this->getDoctrine()->getManager();
  148.          if($company!=0){
  149.              $company $entityManager->getRepository(Company::class)
  150.                  ->find($company);
  151.              $student->setCompany($company);
  152.          }
  153.          $teamid =  $request->request->get('team');
  154.          if($teamid!=0){
  155.              $team $entityManager->getRepository(Team::class)
  156.                  ->find($teamid);
  157.              $student->setTeam($team);
  158.          }
  159.          if($manager!=0){
  160.              $manager $entityManager->getRepository(Users::class)
  161.                      ->find($manager);
  162.              $student->setManagerId($manager);
  163.          } if($secondManager!=0){
  164.          $secondManager $entityManager->getRepository(Users::class)
  165.                      ->find($secondManager);
  166.              $student->setSecondManagerId($secondManager);
  167.          }
  168.         $entityManager->persist($student);
  169.          $entityManager->flush();
  170.         $this->sendRegistrationEmailToStudent($student,$mailer);
  171.          return $this->redirectToRoute('Student-list');
  172.      }
  173.      public function studentCreateBulkPost(UserPasswordEncoderInterface $encoderRequest $request,\Swift_Mailer $mailer)
  174.      {
  175.          $entityManager $this->getDoctrine()->getManager();
  176.          $file $request->files->get('students');
  177.          $language $request->request->get('lang');
  178.          $extension $file->guessExtension();
  179.          if('csv' == $extension) {
  180.              $reader = new \PhpOffice\PhpSpreadsheet\Reader\Csv();
  181.          } elseif('xls'==$extension) {
  182.              $reader = new \PhpOffice\PhpSpreadsheet\Reader\Xls();
  183.          }
  184.         else {
  185.              $reader = new \PhpOffice\PhpSpreadsheet\Reader\Xlsx();
  186.          }
  187.          $spreadsheet $reader->load($file);
  188.          $students $spreadsheet->getActiveSheet()->toArray();
  189.          $companyid =  $request->request->get('company');
  190.          if($companyid!=0){
  191.              $company $entityManager->getRepository(Company::class)
  192.                  ->find($companyid);
  193.          }
  194.          $teamid =  $request->request->get('team');
  195.          if($teamid!=0){
  196.              $team $entityManager->getRepository(Team::class)
  197.                  ->find($teamid);
  198.          }
  199.          $i 0;
  200.          foreach ($students as $student){
  201.              $i++;
  202.              if($student[0]!="email" && $student[0]!="Email" && $student[0]!=null){
  203.                  $studentId  =  $this->registerStudentIfNotExist($encoder,$student[0],$student[1]);
  204.                  if($studentId!=false){
  205.                      if($studentId->getCompany()!=null){
  206.                          $itIsOldUser  true;
  207.                      }
  208.                      else{
  209.                          $itIsOldUser  false;
  210.                      }
  211.                      if($companyid!=0){
  212.                          $studentId->setCompany($company);
  213.                          $entityManager->persist($studentId);
  214.                          $entityManager->flush();
  215.                      }
  216.                     if($teamid!=0){
  217.                          $studentId->setTeam($team);
  218.                          $entityManager->persist($studentId);
  219.                          $entityManager->flush();
  220.                      }
  221.                     if(!$itIsOldUser){
  222.                         $this->sendRegistrationEmailToStudent($studentId,$mailer);
  223.                     }
  224.                  }
  225.              }
  226.          }
  227.          return $this->redirectToRoute('Student-list');
  228.      }
  229.     public function registerStudentIfNotExist(UserPasswordEncoderInterface $encoder,
  230.                 $email,$name,$id=0)
  231.     {
  232.         $entityManager $this->getDoctrine()->getManager();
  233.         if($id!=0){
  234.             $studentObj $entityManager->getRepository(Users::class)
  235.                 ->find($id);
  236.         }else{
  237.             $studentObj $entityManager->getRepository(Users::class)
  238.                 ->findOneBy(array('username'=>$email));
  239.         }
  240.         if($studentObj!=null){
  241.             $student $entityManager->getRepository(Student::class)
  242.                 ->findOneBy(array('id'=>$studentObj));
  243.             return $student;
  244.         }
  245.         else{
  246.             if($name==null){
  247.                 return false;
  248.             }
  249.             $token $this->generateRandomString(10);
  250.             $plainPassword $token;
  251.             $user = new Users();
  252.             $user->setUsername($email);
  253.             $user->setName($email);
  254.             $user->setToken($token);
  255.             $user->setOuthtoken(md5(uniqid(rand())));
  256.             if($plainPassword!=""){
  257.                 $encoded $encoder->encodePassword($user$plainPassword);
  258.                 $user->setPassword($encoded);
  259.             }
  260.             elseif ($user->getId()==null){
  261.                 return "error";
  262.             }
  263.             // whatever *your* User object is
  264.             $user->setIsActive(true);
  265. //        $roleId = $request->request->get('role');
  266.             $roleId 2;
  267.             $role $entityManager->getRepository(Role::class)->find($roleId);;
  268.             $user->addRole($role);
  269.             $entityManager->persist($user);
  270.             $entityManager->flush();
  271.             $studentObj = new Student();
  272.             $studentObj->setFirstName($name);
  273.             $studentObj->setId($user);
  274.             $entityManager->persist($studentObj);
  275.             $entityManager->flush();
  276.             return $studentObj;
  277.         }
  278.     }
  279.     public function createClass(UserPasswordEncoderInterface $encoder,Request $request){
  280.         $entityManager $this->getDoctrine()->getManager();
  281.          $id $request->request->get('id');
  282.          if($id==null || $id==0)
  283.              $class = new Group();
  284.          else
  285.              $class $entityManager->getRepository(Group::class)
  286.             ->find($id);
  287.             $class->setName$request->request->get('name'))  ;
  288.             $class->setStartDay(new \DateTime($request->request->get('start')));
  289.             $class->setEndDay(new \DateTime($request->request->get('end')));
  290.         $entityManager->persist($class);
  291.         $entityManager->flush();
  292.         foreach ( $class->getTrainer() as $trainer){
  293.             $class->removeTrainer($trainer);
  294.         }
  295.          $trainers =     $request->request->get('trainers');
  296.          foreach ( $trainers as $trainer){
  297.              $trainer $entityManager->getRepository(Trainer::class)
  298.                  ->find($trainer);;
  299.              $class->addTrainer($trainer);
  300.          }
  301.         foreach ( $class->getBook() as $book){
  302.             $class->removeBook($book);
  303.         }
  304.          $books =     $request->request->get('books');
  305.          foreach ( $books as $book){
  306.              $book $entityManager->getRepository(Ebook::class)
  307.                  ->find($book);;
  308.              $class->addBook($book);
  309.          }
  310.         foreach ( $class->getStudent() as $student){
  311.             $class->removeStudent($student);
  312.         }
  313.          $students $request->request->get('students');
  314.             foreach ( $students as $student){
  315.                 $name"";
  316.                 $studentId $this->registerStudentIfNotExist($encoder,"","",$student);
  317.                 $class->addStudent($studentId);
  318.             }
  319.         $entityManager->persist($class);
  320.         $entityManager->flush();
  321.         return $this->redirectToRoute('class-list');
  322.     }
  323.     public function CreateSurvey(UserPasswordEncoderInterface $encoderRequest $request,\Swift_Mailer $mailer){
  324.         $entityManager $this->getDoctrine()->getManager();
  325.         $id =$request->request->get('id');
  326.          if ($id==0) {
  327.              $survey= new Survey();
  328.          }
  329.          else{
  330.              $survey $entityManager->getRepository(Survey::class)
  331.                  ->find($id);
  332.          }
  333.         $survey->setName($request->request->get('name'));
  334.         $survey->setStartDate(new \DateTime($request->request->get('start')));
  335.         $survey->setEndDate(new \DateTime($request->request->get('end')));
  336.         $survey->setType($request->request->get('type'));
  337.         $removedStudentIdArray = array();
  338.         foreach ( $survey->getStudent() as $student){
  339.             $removedStudentIdArray[]=$student->getId()->getId();
  340.         }
  341.         iF($request->request->has('students')){
  342.             $students $request->request->get('students');
  343.         }
  344.         else{
  345.             $students =array();
  346.         }
  347.         $IdsToRemove array_diff($removedStudentIdArray$students);
  348.         foreach ($IdsToRemove as $stuendIdRemove){
  349.             $student $this->registerStudentIfNotExist($encoder,"","",$stuendIdRemove);
  350.             $survey->removeStudent($student);
  351.         }
  352.         $IdsToAdd array_diff($students,$removedStudentIdArray );
  353.         foreach ($IdsToAdd as $stuendIdAdd){
  354.             $student $this->registerStudentIfNotExist($encoder,"","",$stuendIdAdd);
  355.             $survey->addStudent($student);
  356.         }
  357.         $importError false;
  358.         $listOfFalseEmail ="" ;
  359.         if( $request->files->has('students-xls')) {
  360.         //this is only on create
  361.         $file $request->files->get('students-xls');
  362.             if($file!=null){
  363.                 $extension $file->guessExtension();
  364.                 if('csv' == $extension) {
  365.                     $reader = new \PhpOffice\PhpSpreadsheet\Reader\Csv();
  366.                 } else {
  367.                     $reader = new \PhpOffice\PhpSpreadsheet\Reader\Xlsx();
  368.                 }
  369.                 $spreadsheet $reader->load($file);
  370.                 $students $spreadsheet->getActiveSheet()->toArray();
  371.                 $i 0;
  372.                 foreach ($students as $student){
  373.                     $i++;
  374.                     if($student[0]!="email" && $student[0]!=null){
  375.                         $studentId  =  $this->registerStudentIfNotExist($encoder,$student[0],null);
  376.                         if($studentId!=false){
  377.                             $survey->addStudent($studentId);
  378.                         }else{
  379.                             $importError true;
  380.                             $listOfFalseEmail $listOfFalseEmail." ".$student[0]." , ";
  381.                         }
  382.                     }
  383.                 }
  384.             }
  385.         }
  386.         if(!$importError){
  387.             $entityManager->persist($survey);
  388.             $entityManager->flush();
  389.             foreach ( $survey->getStudent() as $student){
  390.                 if(!in_array($student->getId()->getId(),$removedStudentIdArray)){
  391.                     $this->sendSurveyEmailToStudent($student,$survey,$mailer);
  392.                 }
  393.             }
  394.             if($request->request->get('type')==0){
  395.                 return $this->redirectToRoute('General-survey-survey-list');
  396.             }
  397.             else if($request->request->get('type')==1){
  398.                 return $this->redirectToRoute('teams-survey-survey-list');
  399.             }  else if($request->request->get('type')==2){
  400.                 return $this->redirectToRoute('managment-survey-survey-list');
  401.             } else if($request->request->get('type')==3){
  402.                 return $this->redirectToRoute('General-survey-survey-list_arabic');
  403.             }else if($request->request->get('type')==4){
  404.                 return $this->redirectToRoute('Small-general-survey-survey-list');
  405.             }else if($request->request->get('type')==5){
  406.                 return $this->redirectToRoute('Small-teams-survey-list');
  407.             }else if($request->request->get('type')==6){
  408.                 return $this->redirectToRoute('Small-management-survey-list');
  409.             }
  410.         }
  411.         else{
  412.             $companies $this->getDoctrine()
  413.                 ->getRepository(Company::class)
  414.                 ->findAll();
  415.             $students $this->getDoctrine()
  416.                 ->getRepository(Student::class)
  417.                 ->findAll();
  418.             return $this->render('admin/survey-create.html.twig',array('survey'=>$survey,'type'=>$survey->getType(),
  419.                 'companies'=>$companies,'students'=>$students,'error_list'=>$listOfFalseEmail));
  420.         }
  421.     }
  422.     public function sendSurveyEmailToStudent($student,$survey,\Swift_Mailer $mailer)
  423.     {
  424.         $entityManager $this->getDoctrine()->getManager();
  425.         $message = (new \Swift_Message('Survey email '))
  426.             ->setFrom('gridsurvey@Gridinternational.com')
  427.             ->setTo($student->getId()->getUsername())
  428.             ->setBody(
  429.                 $this->renderView(
  430.                     // templates/emails/registration.html.twig
  431.                     'emails/survey-email-type-'.$survey->getType().'.html.twig',
  432.                     ['student' => $student,'survey'=>$survey]
  433.                 ),
  434.                 'text/html'
  435.             );
  436.         return $mailer->send($message);
  437.         return true;
  438.     }
  439.     public function sendSurveyReminderEmailToStudent($student,$survey,\Swift_Mailer $mailer)
  440.     {
  441.         $entityManager $this->getDoctrine()->getManager();
  442.         $surveyNotSubmited $entityManager->getRepository(SurveySent::class)
  443.             ->findOneBy(
  444.                 array('userid' => $student->getId(),
  445.                     'status' => 0,'surveyid'=>$survey->getId()
  446.                 )
  447.             );
  448.         if($surveyNotSubmited){
  449.             $message = (new \Swift_Message('Survey Reminder '))
  450.                 ->setFrom('gridsurvey@Gridinternational.com')
  451.                 ->setTo($student->getId()->getUsername())
  452.                 ->setBody(
  453.                     $this->renderView(
  454.                     // templates/emails/registration.html.twig
  455.                         'emails/survey-email-type-'.$survey->getType().'-reminder.html.twig',
  456.                         ['student' => $student,'survey'=>$survey]
  457.                     ),
  458.                     'text/html'
  459.                 );
  460.             return $mailer->send($message);
  461.         }
  462.         return false;
  463.     }
  464.     public function sendRegistrationEmailToStudent($student,\Swift_Mailer $mailer)
  465.     {
  466.         $entityManager $this->getDoctrine()->getManager();
  467.         $message = (new \Swift_Message('GRID; workshop subscription '))
  468.             ->setFrom('gridsurvey@Gridinternational.com')
  469.             ->setTo(trim($student->getId()->getUsername()))
  470.             ->setBody(
  471.                 $this->renderView(
  472.                 // templates/emails/registration.html.twig
  473.                     'emails/student-registered-email.html.twig',
  474.                     ['student' => $student]
  475.                 ),
  476.                 'text/html'
  477.             )
  478.         ;
  479.         return $mailer->send($message);
  480.         return true;
  481.     }
  482.     public function testSendSurveyEmail($id,\Swift_Mailer $mailer){
  483.         $entityManager $this->getDoctrine()->getManager();
  484.         $counter0;
  485.         $Survey $entityManager->getRepository(Survey::class)
  486.                     ->find($id);
  487.         foreach ($Survey->getStudent() as $studentObj){
  488.            $result$this->sendSurveyReminderEmailToStudent($studentObj,$Survey,$mailer);
  489.            if($result!=false){
  490.                $counter++;
  491.            }
  492.         }
  493.         return new \Symfony\Component\HttpFoundation\Response(
  494.             $counter ,200
  495.         );
  496.     }
  497.     function generateRandomString($length 10) {
  498.         $characters '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
  499.         $charactersLength strlen($characters);
  500.         $randomString '';
  501.         for ($i 0$i $length$i++) {
  502.             $randomString .= $characters[rand(0$charactersLength 1)];
  503.         }
  504.         return $randomString;
  505.     }
  506.     public function testSendPasswordEmailBySurvey($id,\Swift_Mailer $mailer)
  507.     {
  508.         $entityManager $this->getDoctrine()->getManager();
  509.         $counter 0;
  510.         $Survey $entityManager->getRepository(Survey::class)
  511.             ->find($id);
  512.         foreach ($Survey->getStudent() as $studentObj) {
  513.             $this->sendRegistrationEmailToStudent($studentObj$mailer);
  514.             $counter++;
  515.         }
  516.         return new \Symfony\Component\HttpFoundation\Response(
  517.             $counter ,200
  518.         );    }
  519.     public function resetPassword(Request $request){
  520.         $token $request->query->get('token');
  521.         $entityManager $this->getDoctrine()->getManager();
  522.         $user $entityManager
  523.             ->getRepository(Users::class)
  524.             ->findOneBy(array('token'=>$token));
  525.         if($user==null){
  526.             return $this->redirectToRoute('login');
  527.         }
  528.         return $this->render('security/change-password.html.twig',array('user'=>$user));
  529.     }
  530.     public function changePassword(UserPasswordEncoderInterface $encoderRequest $request , \Swift_Mailer $mailer)
  531.     {
  532.         $entityManager $this->getDoctrine()->getManager();
  533.         $user $entityManager
  534.             ->getRepository(Users::class)
  535.             ->findOneBy(array('token'=>$request->request->get('token')));
  536.         if($user==null)
  537.         {
  538.             return $this->redirectToRoute('home');
  539.         }
  540.         $plainPassword $request->request->get('password');
  541.         if($plainPassword!=""){
  542.             $encoded $encoder->encodePassword($user$plainPassword);
  543.             $user->setPassword($encoded);
  544.         }
  545.         $user->setToken(md5(uniqid(rand())));
  546.         $entityManager->persist($user);
  547.         $entityManager->flush();
  548.         return $this->redirectToRoute('home');
  549.     }
  550.     public function sendRestPassEmail(UserPasswordEncoderInterface $encoderRequest $request , \Swift_Mailer $mailer)
  551.     {
  552.         $entityManager $this->getDoctrine()->getManager();
  553.         $user $entityManager
  554.             ->getRepository(Users::class)
  555.             ->findOneBy(array('username'=>$request->request->get('email')));
  556.         if($user==null)
  557.         {
  558.             $msg=  'Email not registered please contact the admin ';
  559.             return $this->render('security/resetPassResponse.html.twig',array('msg'=>$msg));
  560.         }
  561.         $user->setToken(md5(uniqid(rand())));
  562.         $entityManager->persist($user);
  563.         $entityManager->flush();
  564.         $message = (new \Swift_Message('Reset Password  '))
  565.             ->setFrom('gridsurvey@Gridinternational.com')
  566.             ->setTo($user->getUsername())
  567.             ->setBody(
  568.                 $this->renderView(
  569.                 // templates/emails/registration.html.twig
  570.                     'emails/passwordResetEmail.html.twig',
  571.                     ['user' => $user]
  572.                 ),
  573.                 'text/html'
  574.             )
  575.         ;
  576.         $mailer->send($message);
  577.         $msg=  'Reset password email sent to your inbox ';
  578.         return $this->render('security/resetPassResponse.html.twig',array('msg'=>$msg));
  579.     }
  580. }