src/Controller/Etudiant/SessionController.php line 47

Open in your IDE?
  1. <?php
  2. namespace App\Controller\Etudiant;
  3. use App\Entity\User;
  4. use Symfony\Component\Mime\Email;
  5. use App\Entity\EnseignantSemestre;
  6. use App\Controller\DatatablesController;
  7. use Doctrine\Persistence\ManagerRegistry;
  8. use PHPUnit\Util\Json;
  9. use Symfony\Component\HttpFoundation\Request;
  10. use Symfony\Component\Mailer\MailerInterface;
  11. use Symfony\Component\HttpFoundation\Response;
  12. use Symfony\Component\Routing\Annotation\Route;
  13. use Symfony\Component\HttpFoundation\JsonResponse;
  14. use Symfony\Contracts\HttpClient\HttpClientInterface;
  15. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  16. use Symfony\Component\String\Slugger\SluggerInterface;
  17. use PhpOffice\PhpSpreadsheet\Reader\Xlsx as reader;
  18. use Symfony\Component\PasswordHasher\Hasher\UserPasswordHasherInterface;
  19. #[Route('/etudiant/session')]
  20. class SessionController extends AbstractController
  21. {
  22.     private $client;
  23.     private $em;
  24.     private UserPasswordHasherInterface $passwordEncoder;
  25.     public function __construct(HttpClientInterface $clientManagerRegistry $em,UserPasswordHasherInterface $passwordEncoder)
  26.     {
  27.         $this->client $client;
  28.         $this->em $em->getManager();
  29.         $this->passwordEncoder $passwordEncoder;
  30.     }
  31.     #[Route('/'name'session_index')]
  32.     public function index(): Response
  33.     {
  34.         $response $this->client->request('GET'$this->getParameter("api")."/getetablissement");
  35.         $etablissements $response->toArray();
  36.         $enseignants $this->em->getRepository(User::class)->findUsersByRole('ROLE_ENSEIGNANT');
  37.         // dd($enseignants);
  38.         return $this->render('session/index.html.twig', [
  39.             'etablissements' => $etablissements,
  40.             'enseignants' => $enseignants
  41.         ]);
  42.     }
  43.     #[Route('/list'name'session_list')]
  44.     public function list(Request $request): Response
  45.     {
  46.         $params $request->query;
  47.         // dd($params);
  48.         $where $totalRows $sqlRequest "";
  49.         $filtre "where 1 = 1";   
  50.         // dd($params->get('columns')[0]);
  51.             
  52.         $columns = array(
  53.             array( 'db' => 'es.id','dt' => 0),
  54.             array( 'db' => 'es.session','dt' => 1),
  55.             array( 'db' => 'DATE_FORMAT(es.close_date, "%d-%m-%Y")','dt' => 2),
  56.             array( 'db' => 'u.username','dt' => 3),
  57.             array( 'db' => 'u.nom','dt' => 4),
  58.             array( 'db' => 'u.prenom','dt' => 5),
  59.             array( 'db' => 'es.niveau','dt' => 6), 
  60.             array( 'db' => 'u.enable','dt' => 7),  
  61.         );
  62.         $sql "SELECT " implode(", "DatatablesController::Pluck($columns'db')) . "
  63.         
  64.         FROM user u 
  65.         inner join enseignant_semestre es on es.user_id = u.id
  66.         
  67.         $filtre "
  68.         ;
  69.         // dd($sql);
  70.         $totalRows .= $sql;
  71.         $sqlRequest .= $sql;
  72.         $stmt $this->em->getConnection()->prepare($sql);
  73.         $newstmt $stmt->executeQuery();
  74.         $totalRecords count($newstmt->fetchAll());
  75.         // dd($sql);
  76.             
  77.         // search 
  78.         $where DatatablesController::Search($request$columns);
  79.         // dd($where);
  80.         if (isset($where) && $where != '') {
  81.             $sqlRequest .= $where;
  82.         }
  83.         // dd($sqlRequest);
  84.         $sqlRequest .= DatatablesController::Order($request$columns);
  85.         // dd($sqlRequest);
  86.         $stmt $this->em->getConnection()->prepare($sqlRequest);
  87.         $resultSet $stmt->executeQuery();
  88.         $result $resultSet->fetchAll();
  89.         
  90.         
  91.         $data = array();
  92.         // dd($result);
  93.         $i 1;
  94.         foreach ($result as $key => $row) {
  95.             $nestedData = array();
  96.             $cd $row['id'];
  97.             // dd($row);
  98.             
  99.             foreach (array_values($row) as $key => $value) {
  100.                 $nestedData[] = $value;                
  101.             }
  102.             $nestedData["DT_RowId"] = $cd;
  103.             $nestedData["DT_RowClass"] = '';
  104.             $data[] = $nestedData;
  105.             $i++;
  106.         }
  107.         // dd($data);
  108.         $json_data = array(
  109.             "draw" => intval($params->get('draw')),
  110.             "recordsTotal" => intval($totalRecords),
  111.             "recordsFiltered" => intval($totalRecords),
  112.             "data" => $data   
  113.         );
  114.         // die;
  115.         return new Response(json_encode($json_data));
  116.     }
  117.     #[Route('/generer'name'session_generer')]
  118.     public function generer(Request $requestMailerInterface $mailer): Response
  119.     {
  120.         $codeSession $this->generateRandomString();
  121.         $user $this->em->getRepository(User::class)->find($request->get('enseignant'));
  122.         // $session = $this->em->getRepository(EnseignantSemestre::class)->findByUserAndSemestre($user, $request->get("semestre"), $request->get("niveau"));
  123.         // if(count($session) > 2){
  124.         //     return new JsonResponse("Session déja crée pour cette semestre",500);
  125.         // }
  126.         $session = new EnseignantSemestre();
  127.         $session->setSemestre($request->get("semestre"));
  128.         $session->setNiveau($request->get("niveau"));
  129.         $session->setSession($codeSession);
  130.         $session->setDesignation($request->get("designation"));
  131.         $stop_date = new \DateTime('now');
  132.         $stop_date->modify('+14 day');
  133.         $session->setCloseDate($stop_date);
  134.         $session->setUser($user);
  135.         $this->em->persist($session);
  136.         $this->em->flush();
  137.         if($user->getEmail() != "" and $user->getEmail() != null){
  138.             $email = (new Email())
  139.                 ->from('[email protected]')
  140.                 ->to($user->getEmail())
  141.                 //->cc('[email protected]')
  142.                 //->bcc('[email protected]')
  143.                 //->replyTo('[email protected]')
  144.                 //->priority(Email::PRIORITY_HIGH)
  145.                 ->subject('Nouvelle Session!')
  146.                 // ->text('
  147.                     
  148.     
  149.                 // ');
  150.                 ->html('
  151.                 <p>
  152.                 Bonjour '.$user->getNom() .' '.$user->getPrenom().',
  153.                 </p>
  154.                 <p>
  155.                     Vous avez une nouvelle session à corriger.
  156.                     Consulter le lien suivant <a href="https://jdb-correction.mtsi-test.com" >Lien</a>
  157.                 </p>');
  158.     
  159.             $mailer->send($email);
  160.         }
  161.         return new JsonResponse("Bien Enregistre");
  162.     }
  163.     public function generateRandomString($length 6) {
  164.         $characters '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
  165.         $charactersLength strlen($characters);
  166.         $randomString '';
  167.         for ($i 0$i $length$i++) {
  168.             $randomString .= $characters[rand(0$charactersLength 1)];
  169.         }
  170.         return $randomString;
  171.     }
  172.     
  173.     
  174.     #[Route('/addEnseignants'name'addEnseignants')]
  175.     // public function addEnseignants(Request $request): Response
  176.     public function addEnseignants(Request $requestSluggerInterface $slugger): Response
  177.     {
  178.         // dd('test');
  179.         $file $request->files->get('file');
  180.         if(!$file){
  181.             return new JsonResponse('Prière d\'importer le fichier',500);
  182.         }
  183.         if($file->guessExtension() !== 'xlsx'){
  184.             return new JsonResponse('Prière d\'enregister un fichier xlsx'500);            
  185.         }
  186.         $originalFilename pathinfo($file->getClientOriginalName(), PATHINFO_FILENAME);
  187.         // this is needed to safely include the file name as part of the URL
  188.         $safeFilename $slugger->slug($originalFilename);
  189.         $newFilename $safeFilename.'-'.uniqid().'_'.$this->getUser()->getUsername().'.'.$file->guessExtension();
  190.         // Move the file to the directory where brochures are stored
  191.         try {
  192.             $file->move(
  193.                 $this->getParameter('enseignants_directory'),
  194.                 $newFilename
  195.             );
  196.         } catch (FileException $e) {
  197.             throw new \Exception($e);
  198.         }
  199.         $reader = new reader();
  200.         $spreadsheet $reader->load($this->getParameter('enseignants_directory').'/'.$newFilename);
  201.         $worksheet $spreadsheet->getActiveSheet();
  202.         $spreadSheetArys $worksheet->toArray();
  203.         unset($spreadSheetArys[0]);
  204.         $sheetCount count($spreadSheetArys);
  205.         // dd($spreadSheetArys);
  206.         foreach ($spreadSheetArys as $value) {
  207.             $userExist $this->em->getRepository(User::class)->findBy(['username'=>$value[0]]);
  208.             if (count($userExist) == 0) {
  209.                 $user = new User();
  210.                 $user->SetUsername($value[0]);
  211.                 $user->SetNom($value[1]);
  212.                 $user->SetPrenom($value[2]);
  213.                 $user->SetEmail($value[3]);
  214.                 $user->SetPhone($value[4]);
  215.                 $user->SetRoles(["ROLE_ENSEIGNANT"]);
  216.                 $user->SetEnable(1);
  217.                 $user->setPassword($this->passwordEncoder->hashPassword(
  218.                     $user,
  219.                     '0123456789'
  220.                 ));
  221.                 $this->em->persist($user);
  222.             }
  223.         }
  224.         $this->em->flush();
  225.         return new JsonResponse("Bien Ajouter");
  226.     }
  227. }