src/Controller/PublicProfileController.php line 172

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use App\Aws\SESManager;
  4. use App\Aws\S3Manager;
  5. use App\Entity\Clinic\Person\ClinicUser;
  6. use App\Entity\Person\Admin;
  7. use App\Entity\Person\SuperClinicAdmin;
  8. use Symfony\Component\HttpFoundation\Cookie;
  9. use App\Entity\Clinic\Clinic;
  10. use App\Services\MediaManager;
  11. use App\Entity\Person\User;
  12. use App\Entity\Clinic\Stock\TreatmentClinic;
  13. use App\Entity\Media\Media;
  14. use Knp\Component\Pager\PaginatorInterface;
  15. use App\Services\UserManager;
  16. use App\Form\Model\SearchFilter;
  17. use App\Form\Type\Clinic\Person\ClinicUserType;
  18. use App\Form\Type\Clinic\Person;
  19. use Sensio\Bundle\FrameworkExtraBundle\Configuration\Template;
  20. use stdClass;
  21. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  22. use Symfony\Component\HttpFoundation\Request;
  23. use Symfony\Component\HttpFoundation\Response;
  24. use Symfony\Component\HttpFoundation\JsonResponse;
  25. use Symfony\Component\HttpFoundation\RedirectResponse;
  26. use Symfony\Component\Routing\Annotation\Route;
  27. use Symfony\Component\Security\Core\Encoder\UserPasswordEncoderInterface;
  28. use WhiteOctober\BreadcrumbsBundle\Model\Breadcrumbs;
  29. use Sensio\Bundle\FrameworkExtraBundle\Configuration\Security;
  30. use Symfony\Component\Security\Core\User\UserInterface\UserInterface;
  31. use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
  32. use Symfony\Component\Security\Core\Encoder\EncoderFactoryInterface;
  33. use App\Meeting\Ap;
  34. use Doctrine\Persistence\ManagerRegistry;
  35. use Psr\Log\LoggerInterface;
  36. use Symfony\Component\Filesystem\Filesystem;
  37. use Symfony\Component\HttpFoundation\File\UploadedFile;
  38. /**
  39.  * Class PublicProfileController.
  40.  */
  41. class PublicProfileController extends AbstractController
  42. {
  43.     /**
  44.      * @var Breadcrumbs
  45.      */
  46.     private $breadcrumbs;
  47.     /**
  48.      * @var UserPasswordEncoderInterface
  49.      */
  50.     private $userPasswordEncoder;
  51.     
  52.     /**
  53.      * @var PaginatorInterface
  54.      */
  55.     private $paginator;
  56.     
  57.     /**
  58.      * @var SESManager
  59.      */
  60.     private $SESManager;
  61.     /**
  62.      * @var ManagerRegistry
  63.      */
  64.     private $doctrine;
  65.     /**
  66.      * @var LoggerInterface
  67.      */
  68.     private $logger;
  69.     /**
  70.      * @var Filesystem
  71.      */
  72.     private $filesystem;
  73.     /**
  74.      * @var MediaManager
  75.      */
  76.     private $mediaManager;
  77.     /**
  78.      * @var string
  79.      */
  80.     /**
  81.      * @var S3Manager
  82.      */
  83.     private $s3Manager;
  84.     public function __construct(
  85.         Breadcrumbs $breadcrumbs,
  86.         PaginatorInterface $paginator,
  87.         UserPasswordEncoderInterface $userPasswordEncoder,
  88.         SESManager $SESManager,
  89.          ManagerRegistry $doctrine,
  90.           LoggerInterface $logger,
  91.           Filesystem $filesystem,
  92.           MediaManager $mediaManager,
  93.           S3Manager $s3Manager
  94.     ) {
  95.         $this->paginator $paginator;
  96.         $this->breadcrumbs $breadcrumbs;
  97.         $this->userPasswordEncoder $userPasswordEncoder;
  98.         $this->SESManager $SESManager;
  99.         $this->doctrine $doctrine;
  100.         $this->logger $logger;
  101.         $this->filesystem $filesystem;
  102.         $this->mediaManager $mediaManager;
  103.         $this->s3Manager $s3Manager;
  104.         date_default_timezone_set('UTC');
  105.     }
  106.     /**
  107.      * @Route("/admin/{subDomain}", name="profile_view")
  108.      */
  109.     public function publicProfile($subDomain): Response
  110.     {
  111.         /** @var User $user */
  112.         $user $this->getUser();
  113.         $currentUser $this->getUser();
  114.         if($user){
  115.             $em $this->getDoctrine()->getManager();
  116.             $token bin2hex(random_bytes(16).md5($user->getId()));
  117.             $sqlUpdate "UPDATE user SET login_token = ? WHERE id = ?";
  118.             $updateToken $em->getConnection()->prepare($sqlUpdate);
  119.             $updateToken->execute([$token$user->getId()]);
  120.             $response = new Response();
  121.             
  122.             $response->headers->setCookie(
  123.                 new Cookie('login_token'$tokenstrtotime('+1 day')) // Adjust the expiration time as needed
  124.             );
  125.         }
  126.         if(!$user){
  127.             $user '';
  128.         }
  129.         $clinic $this->getDoctrine()->getRepository(Clinic::class)
  130.         ->findOneBy(['sub_domain' => $subDomain]);
  131.         if (!$clinic){
  132.              return new JsonResponse(['status' => 'error','message' => 'Clinic Not Exist' ]);
  133.         }
  134.         $isPermission false;
  135.         if($user){
  136.             $isPermission $this->isGranted('edit'$clinic);
  137.         }  
  138.         $superClinincAdmin = new SuperClinicAdmin();
  139.         $appointment $superClinincAdmin->getAppointmentData($this->getDoctrine()->getManager(),$clinic->getId());
  140.         $isOnline null;
  141.         $filter = new SearchFilter();
  142.         $filter->setClinic($clinic);
  143.         $team =  $this->getDoctrine()->getManager()->getRepository('App:Clinic\Person\ClinicUser')->selectAllClinicActiveUsers($this->getUser(), $filter)->getQuery()->getResult();
  144.         return $this->render('publicProfile.html.twig', [
  145.             'clinic' => $clinic,
  146.             'isOnline' => $isOnline,
  147.             'currentUser' => $currentUser,
  148.             'user' => $user,
  149.             'isPermission' => $isPermission,
  150.             'treatments' => $appointment['treatments'],
  151.             'teamusers' =>$team,
  152.         ]);
  153.     }
  154.     /** 
  155.      * @Route("/booking/{subDomain}", name="open_profile")
  156.      */
  157.     public function newPublicProfile(Request $request,$subDomain): Response
  158.     {
  159.         /** @var User $user */
  160.         $newDomain 0;
  161.        if(isset($_SESSION['subDomain']) && $_SESSION['subDomain'] != $subDomain){
  162.         $loginToken $request->cookies->get('login_token');
  163.         $response = new Response();
  164.         if ($loginToken) {
  165.         $response->headers->setCookie(new Cookie('login_token'''));
  166.          $newDomain 1
  167.         }
  168.        }
  169.         $_SESSION['subDomain']=$subDomain;
  170.         $user $this->getUser();
  171.         $currentUser $this->getUser();
  172.         $clinic $this->getDoctrine()->getRepository(Clinic::class)
  173.         ->findOneBy(['sub_domain' => $subDomain]);
  174.         if (!$clinic){
  175.              return new JsonResponse(['status' => 'error','message' => 'Clinic Not Exist' ]);
  176.         }
  177.         $url = (isset($_GET['id']) && $_GET['id'])?$this->generateUrl('booking_view',['id'=>$_GET['id']]):"";
  178.         $isPermission false;
  179.         if($user){
  180.             $isPermission $this->isGranted('edit'$clinic);
  181.             $em $this->getDoctrine()->getManager();
  182.             $token bin2hex(random_bytes(16).md5($user->getId()));
  183.             $sqlUpdate "UPDATE user SET login_token = ? WHERE id = ?";
  184.             $updateToken $em->getConnection()->prepare($sqlUpdate);
  185.             $updateToken->execute([$token$user->getId()]);
  186.         } 
  187.         $superClinincAdmin = new SuperClinicAdmin();
  188.         $appointment $superClinincAdmin->getAppointmentData($this->getDoctrine()->getManager(),$clinic->getId());
  189.         $isOnline null;
  190.         $em=$this->getDoctrine()->getManager();
  191.         $repository $em->getRepository('App:Clinic\Person\ClinicUser');
  192.         $queryBuilder $repository->createQueryBuilder('user');
  193.         $queryBuilder->where('user.clinic = :clinicId')
  194.             ->andWhere('user.deleted = FALSE')
  195.             ->andWhere('user.locked = FALSE')
  196.             ->andWhere('user.visible = 1')
  197.             ->setParameter('clinicId'$clinic->getId())
  198.             ->orderBy('user.createdAt''DESC');
  199.         $team $queryBuilder->getQuery()->getResult();
  200.         $widget_settings = ($clinic->getWidgetSettings() != '')?json_decode($clinic->getWidgetSettings(),true):null;
  201.         $gmtOffset =  array_search($clinic->getTimezone(), Clinic::CLINIC_TIMEZONES) ;
  202.                if($user){
  203.             return  $this->render('publicProfile.html.twig', [
  204.                 'clinic' => $clinic,
  205.                 'isOnline' => $isOnline,
  206.                 'user' => $user,
  207.                 'currentUser' => $currentUser,
  208.                 'treatments' => $appointment['treatments'],
  209.                 'isPermission' => $isPermission,
  210.                 'teamusers' =>$team,
  211.                 'newDomain'=>$newDomain,
  212.                 'widget_settings' => $widget_settings,
  213.                 'tZone' =>$gmtOffset,
  214.             ]);
  215.         }else{
  216.             return $this->render('newPublicProfile.html.twig', [
  217.                 'clinic' => $clinic,
  218.                 'isOnline' => $isOnline,
  219.                 'user' => $user,
  220.                 'treatments' => $appointment['treatments'],
  221.                 'isPermission' => $isPermission,
  222.                 'teamusers' =>$team,
  223.                 'url' =>$url,
  224.                 'newDomain'=>$newDomain,
  225.                 'widget_settings' => $widget_settings,
  226.                 'tZone' =>$gmtOffset,
  227.  
  228.             ]);
  229.         }
  230.     }
  231.     
  232.     /**
  233.      * @Route("widget/iframe/test", name="widget_iframe_test")
  234.      */
  235.     public function checkWidgetIframe()
  236.     {
  237.        return $this->render('service/new.html.twig');
  238.     }
  239.     
  240.     /**
  241.      * @Route("/admin/save/{subDomain}", name="profile_save")
  242.      */
  243.     public function publicProfileSave(Request $request,$subDomainUrlGeneratorInterface $urlGenerator):Response
  244.     {
  245.         $redirectUrl $urlGenerator->generate('open_profile', ['subDomain' => $subDomain]);
  246.         if($request->getMethod() != "POST"){
  247.             throw $this->createNotFoundException('Only Post Method Allowed');
  248.         }
  249.         /** @var User $user */
  250.         $user $this->getUser();
  251.         $clinic $this->getDoctrine()->getRepository(Clinic::class)
  252.         ->findOneBy(['sub_domain' => $subDomain]);
  253.         if(!$user){
  254.             return new JsonResponse(['status' => 'error','message' => 'User Not Found' 'redirect' => $redirectUrl]); 
  255.         }
  256.         if(!$request->get('email')){
  257.             return new JsonResponse(['status' => 'error','message' => 'Email Can not be Null' 'redirect' => $redirectUrl]);
  258.         }
  259.         if(!$request->get('name')){
  260.             return new JsonResponse(['status' => 'error','message' => 'Name Can not be Null' 'redirect' => $redirectUrl]);
  261.         }
  262.         if (!filter_var($request->request->get('email'), FILTER_VALIDATE_EMAIL)) {
  263.             return new JsonResponse(['status' => 'error','message' => 'Invalid Email Format' 'redirect' => $redirectUrl]);
  264.         }
  265.         $name $request->get('name');
  266.         $email $request->get('email');
  267.         $showInPublicProfile $request->get('show_in_public_profile')?10;
  268.         $entityManager $this->getDoctrine()->getManager();
  269.         $clinic->setShowInPublicProfile($showInPublicProfile);
  270.         $clinic->setName($name);
  271.         $clinic->setEmail($email);
  272.         $entityManager->flush();
  273.         return new JsonResponse(['status' => 'success','message' => 'Data Updated successfully' 'redirect' => $redirectUrl]);
  274.     }
  275.     
  276.     /**
  277.      * @Route("/book-btn-save/{subDomain}", name="book_btn_save")
  278.      */
  279.     public function bookBtnSave(Request $request $subDomain UrlGeneratorInterface $urlGenerator)
  280.     {
  281.         $redirectUrl $urlGenerator->generate('open_profile', ['subDomain' => $subDomain]);
  282.         if($request->getMethod() != "POST"){
  283.             return new JsonResponse(['status' => 'error','message' => 'Only Post Method Allowed' 'redirect' => $redirectUrl]);
  284.         }
  285.         /** @var User $user */
  286.         $user $this->getUser();
  287.         if(!$user){
  288.            return new JsonResponse(['status' => 'error','message' => 'User Not Found' 'redirect' => $redirectUrl]); 
  289.         }
  290.         $clinic $this->getDoctrine()->getRepository(Clinic::class)
  291.             ->findOneBy(['sub_domain' => $subDomain]);
  292.         if (!$clinic){
  293.             return new JsonResponse(['status' => 'error','message' => 'Clinic Not Exist' ]);
  294.         }
  295.         $booking_btn_name $request->get('booking_btn_name');
  296.         $booking_btn_clr $request->get('booking_btn_clr');
  297.         $booking_btn_bg_clr $request->get('booking_btn_bg_clr');
  298.         $entityManager $this->getDoctrine()->getManager();
  299.         $clinic->setBookingBtnName($booking_btn_name);
  300.         $clinic->setBookingBtnClr($booking_btn_clr);
  301.         $clinic->setBookingBtnBgClr($booking_btn_bg_clr);
  302.         $entityManager->flush();
  303.         return new JsonResponse(['status' => 'success','message' => 'Data Updated successfully' 'redirect' => $redirectUrl]);
  304.     }
  305.     
  306.     /**
  307.      * @Route("/admin/background-data-save/{subDomain}", name="bg_data_save")
  308.      */
  309.     public function bgDataSave(Request $request $subDomain UrlGeneratorInterface $urlGenerator)
  310.     {
  311.         $file $request->files->get('file');
  312.         $redirectUrl $urlGenerator->generate('open_profile', ['subDomain' => $subDomain]);
  313.         if($request->getMethod() != "POST"){
  314.             return new JsonResponse(['status' => 'error','message' => 'Only Post Method Allowed' 'redirect' => $redirectUrl]);
  315.         }
  316.         /** @var User $user */
  317.         $user $this->getUser();
  318.         if(!$user){
  319.            return new JsonResponse(['status' => 'error','message' => 'User Not Found' 'redirect' => $redirectUrl]); 
  320.         }
  321.         $clinic $this->getDoctrine()->getRepository(Clinic::class)
  322.             ->findOneBy(['sub_domain' => $subDomain]);
  323.         if (!$clinic){
  324.             return new JsonResponse(['status' => 'error','message' => 'Clinic Not Exist' ]);
  325.         }
  326.         $inner_color $request->get('inner_color');
  327.         $outer_color $request->get('outer_color');
  328.         $entityManager $this->getDoctrine()->getManager();
  329.         $clinic->setInnerColor($inner_color);
  330.         $clinic->setOuterColor($outer_color);
  331.         if(isset($file) && $file){
  332.             $oldBackgroundImg $clinic->getBackgroundImg();
  333.             
  334.             $fileMimeType $file->getClientMimeType();
  335.                 $originalName $file->getClientOriginalName();
  336.                 $extension $file->getClientOriginalExtension();
  337.                 $uniqueFilename md5(uniqid()) . time() . '.' $extension;
  338.                 $filePath 'uploads/banners/';
  339.                 // dd($filePath);
  340.                 $entityManager $this->getDoctrine()->getManager();
  341.                 $media = new Media();
  342.                 $media->setFile($file);
  343.                 $media->setNameFile(Media::getPrefixName($media->getFile()->getClientOriginalName()));
  344.                 $media->setS3key('banners/' $uniqueFilename);
  345.                 $this->s3Manager->upload($media);
  346.                 if($media->getUrl() != null){
  347.                    $clinic->setBackgroundImg($media->getUrl());
  348.    
  349.                 }else{
  350.                     $s =  $file->move($filePath$uniqueFilename);
  351.                     $clinic->setBackgroundImg($_ENV['APP_URl'].'uploads/banners/'.$uniqueFilename);
  352.                     if ($oldBackgroundImg) {
  353.                         $oldImagePath $this->getParameter('kernel.project_dir') . '/public/' $oldBackgroundImg;
  354.                         if (file_exists($oldImagePath)) {
  355.                             unlink($oldImagePath);
  356.                         }
  357.                     }
  358.                 }
  359.         }
  360.         $entityManager->flush();
  361.         return new JsonResponse(['status' => 'success','message' => 'Data Updated successfully' 'redirect' => $redirectUrl]);
  362.     }
  363.       /**
  364.      * @Route("/admin/profile-image-save/{subDomain}", name="profile_image_save")
  365.      */
  366.     public function profileImageSave(Request $request$subDomain UrlGeneratorInterface $urlGenerator){
  367.         
  368.         $file $request->files->get('imgSrc');
  369.         $redirectUrl $urlGenerator->generate('open_profile', ['subDomain' => $subDomain]);
  370.         if($request->getMethod() != "POST"){
  371.             return new JsonResponse(['status' => 'error','message' => 'Only Post Method Allowed' 'redirect' => $redirectUrl]);
  372.         }
  373.         $user $this->getUser();
  374.         $clinic $this->getDoctrine()->getRepository(Clinic::class)
  375.             ->findOneBy(['sub_domain' => $subDomain]);
  376.         // dd($this->getParameter('kernel.project_dir').$user->getMedia()->getNameFile());
  377.         if (!$clinic){
  378.             return new JsonResponse(['status' => 'error','message' => 'Clinic Not Exist' ]);
  379.         }
  380.         if(!$user){
  381.             return new JsonResponse(['status' => 'error','message' => 'User Not Found' 'redirect' => $redirectUrl]); 
  382.         }
  383.         // dd($imgSrc);
  384.         if(isset($file) && $file){
  385.             // $oldBackgroundImg = $user->getMedia();
  386.              $fileMimeType $file->getClientMimeType();
  387.                 $originalName $file->getClientOriginalName();
  388.                 $extension $file->getClientOriginalExtension();
  389.                 $uniqueFilename md5(uniqid()) . time() . '.' $extension;
  390.                 $filePath 'uploads/profile/';
  391.                 // dd($filePath);
  392.                
  393.             $entityManager $this->getDoctrine()->getManager();
  394.              $media = new Media();
  395.              $media->setFile($file);
  396.              $media->setNameFile(Media::getPrefixName($media->getFile()->getClientOriginalName()));
  397.               $media->setS3key('users/clinicUsers/' $uniqueFilename);
  398.              $this->s3Manager->upload($media);
  399.              if($media->getUrl() != null){
  400.                 try{
  401.                     $url =  $clinic->getProfileImg();
  402.                     if(isset($url) && $url){
  403.                         $parsedUrl parse_url($url);
  404.                         $path $parsedUrl['path'];
  405.                         $path ltrim($parsedUrl['path'], '/');
  406.                         $this->s3Manager->removeImage($path);
  407.                     }
  408.                 }catch(\Exception $e){}
  409.                 $clinic->setProfileImg($media->getUrl());
  410.              }else{
  411.                 $s =  $file->move($filePath$uniqueFilename);
  412.            
  413.                 $directory $this->getParameter('kernel.project_dir') . '/public/uploads/profile/';
  414.                 $uploadPath $directory $uniqueFilename;
  415.                 $targetFileName md5(time());
  416.                 $targetFile $this->changeFilePermission($uploadPath);
  417.                 $file = new UploadedFile($targetFile$uniqueFilename'image/png');
  418.                  $hasProfile $clinic->getProfileImg();
  419.                  if(isset($hasProfile) && $hasProfile){
  420.                     try{
  421.                         $url =  $clinic->getProfileImg();
  422.                         $parsedUrl parse_url($url);
  423.                         $path $parsedUrl['path'];
  424.                         $path ltrim($parsedUrl['path'], '/');
  425.                         if(file_exists($this->getParameter('kernel.project_dir') . '/public/'.$path)){
  426.                             unlink($this->getParameter('kernel.project_dir') . '/public/'.$path);
  427.                         }
  428.                  }catch(\Exception $e){}
  429.                  }
  430.                  $clinic->setProfileImg($_ENV['APP_URl'].'uploads/profile/'.$uniqueFilename);
  431.              }
  432.              $entityManager->flush();
  433.             return new JsonResponse(['status' => 'success''message' => 'Uploaded successfully','data' => ['name'=>$uniqueFilename,'id'=>$user->getId()]]);
  434.         }
  435.     
  436.         
  437.     }
  438.           /**
  439.      * @Route("/admin/change-profile-user", name="changeProfileImage")
  440.      */
  441.     public function changeProfileImage(Request $request,  UrlGeneratorInterface $urlGenerator){
  442.         $file $request->files->get('file');
  443.         if($request->getMethod() != "POST"){
  444.             return new JsonResponse(['status' => 'error','message' => 'Only Post Method Allowed' 'redirect' => $redirectUrl]);
  445.         }
  446.         $user $this->getUser();
  447.         $entityManager $this->getDoctrine()->getManager();
  448.   
  449.            //  dd($media);
  450.     
  451.         if(!$user){
  452.             return new JsonResponse(['status' => 'error','message' => 'User Not Found']); 
  453.         }
  454.         // dd($imgSrc);
  455.         if(isset($file) && $file){
  456.             // $oldBackgroundImg = $user->getMedia();
  457.              $fileMimeType $file->getClientMimeType();
  458.                 $originalName $file->getClientOriginalName();
  459.                 $extension $file->getClientOriginalExtension();
  460.                 $uniqueFilename md5(uniqid()) . time() . '.' $extension;
  461.        
  462.              $media = new Media();
  463.              $media->setFile($file);
  464.              $media->setNameFile(Media::getPrefixName($media->getFile()->getClientOriginalName()));
  465.               $media->setS3key('users/clinicUsers/' $uniqueFilename);
  466.              $this->s3Manager->upload($media);
  467.              if($media->getUrl() != null){
  468.                
  469.                 try{
  470.                     $url =  $user->getProfileImg();
  471.                     if(isset($url) && $url){
  472.                     $parsedUrl parse_url($url);
  473.                     $path $parsedUrl['path'];
  474.                     $path ltrim($parsedUrl['path'], '/');
  475.                     $this->s3Manager->removeImage($path);
  476.                     }
  477.                 }catch(\Exception $e){}
  478.                 $user->setMedia($media);
  479.                 $user->setProfileImg($media->getUrl());
  480.                 $entityManager->persist($media);
  481.              }else{
  482.                 $filePath 'uploads/profile/';
  483.                 // dd($filePath);
  484.                 $s =  $file->move($filePath$uniqueFilename);
  485.            
  486.             $directory $this->getParameter('kernel.project_dir') . '/public/uploads/profile/';
  487.             $uploadPath $directory $uniqueFilename;
  488.             $targetFileName md5(time());
  489.             $targetFile $this->changeFilePermission($uploadPath);
  490.             $file = new UploadedFile($targetFile$uniqueFilename'image/png');
  491.              $entityManager $this->getDoctrine()->getManager();
  492.              $hasProfile $user->getProfileImg();
  493.              if(isset($hasProfile) && $hasProfile){
  494.                  try{
  495.                     $url =  $user->getProfileImg();
  496.                     $parsedUrl parse_url($url);
  497.                     $path $parsedUrl['path'];
  498.                     $path ltrim($parsedUrl['path'], '/');
  499.                     if(file_exists($this->getParameter('kernel.project_dir') . '/public/'.$path)){
  500.                         unlink($this->getParameter('kernel.project_dir') . '/public/'.$path);
  501.                     }
  502.              }catch(\Exception $e){}
  503.              }
  504.              $user->setProfileImg($_ENV['APP_URl'].'uploads/profile/'.$uniqueFilename);
  505.              }
  506.              $entityManager->flush();
  507.              
  508.             return new JsonResponse(['status' => 'success''message' => 'Uploaded successfully','data' => ['name'=>$uniqueFilename,'url'=>$user->getProfileImg(),'id'=>$user->getId()]]);
  509.         }
  510.     
  511.         
  512.     }
  513.    /**
  514.      * @Route("/admin/remove-profile-user", name="removeProfileImg")
  515.      */
  516.     public function removeProfileImg(Request $request){
  517.         if($request->getMethod() != "POST"){
  518.             return new JsonResponse(['status' => 'error','message' => 'Only Post Method Allowed']);
  519.         }
  520.         $user $this->getUser();
  521.         $entityManager $this->getDoctrine()->getManager();
  522.         $media $user->getMedia();
  523.         if($media){
  524.             try{
  525.                 $this->s3Manager->removeImage($media->getS3key());
  526.                 if($media){
  527.                     $entityManager->remove($media);
  528.                 }
  529.             }catch(\Exception $e){}
  530.         }
  531.         
  532.         if($user->getProfileImg() != ''){
  533.             $url =  $user->getProfileImg();
  534.             $parsedUrl parse_url($url);
  535.             $path $parsedUrl['path'];
  536.             $path ltrim($parsedUrl['path'], '/');
  537.             try{
  538.                 $this->s3Manager->removeImage($path);
  539.                 
  540.             }catch(\Exception $e){}
  541.             try{
  542.                 if(file_exists($this->getParameter('kernel.project_dir') . '/public/'.$path)){
  543.                     unlink($this->getParameter('kernel.project_dir') . '/public/'.$path);
  544.                 }
  545.          }catch(\Exception $e){}
  546.         }
  547.         $user->setMedia(NULL);
  548.         $user->setProfileImg(NULL);
  549.         $entityManager->flush();
  550.         return new JsonResponse(['status' => 'success''message' => 'Removed successfully']);
  551.     }
  552.     /**
  553.      * @Route("/admin/remove-clinicprofile-user/{subDomain}", name="removeClinicProfileImg")
  554.      */
  555.     public function removeClinicProfileImg(Request $request$subDomain){
  556.         if($request->getMethod() != "POST"){
  557.             return new JsonResponse(['status' => 'error','message' => 'Only Post Method Allowed']);
  558.         }
  559.         $user $this->getUser();
  560.         $clinic $this->getDoctrine()->getRepository(Clinic::class)
  561.             ->findOneBy(['sub_domain' => $subDomain]);
  562.         if (!$clinic){
  563.             return new JsonResponse(['status' => 'error','message' => 'Clinic Not Exist' ]);
  564.         }
  565.         if(!$user){
  566.             return new JsonResponse(['status' => 'error','message' => 'User Not Found']); 
  567.         }
  568.         $entityManager $this->getDoctrine()->getManager();
  569.   
  570.         if($clinic->getProfileImg() != ''){
  571.             $url =  $clinic->getProfileImg();
  572.             $parsedUrl parse_url($url);
  573.             $path $parsedUrl['path'];
  574.             $path ltrim($parsedUrl['path'], '/');
  575.             try{
  576.                 $this->s3Manager->removeImage($path);
  577.             }catch(\Exception $e){}
  578.             try{
  579.                 if(file_exists($this->getParameter('kernel.project_dir') . '/public/'.$path)){
  580.                     unlink($this->getParameter('kernel.project_dir') . '/public/'.$path);
  581.                 }
  582.          }catch(\Exception $e){}
  583.         }
  584.         $clinic->setProfileImg(NULL);
  585.         $entityManager->flush();
  586.         return new JsonResponse(['status' => 'success''message' => 'Remove clinic profile successfully']);
  587.     }
  588.     /**
  589.      * @Route("/admin/remove-clinicbanner-user/{subDomain}", name="removeClinicBanner")
  590.      */
  591.     public function removeClinicBanner(Request $request$subDomain){
  592.         if($request->getMethod() != "POST"){
  593.             return new JsonResponse(['status' => 'error','message' => 'Only Post Method Allowed']);
  594.         }
  595.         $user $this->getUser();
  596.         $clinic $this->getDoctrine()->getRepository(Clinic::class)
  597.             ->findOneBy(['sub_domain' => $subDomain]);
  598.         if (!$clinic){
  599.             return new JsonResponse(['status' => 'error','message' => 'Clinic Not Exist' ]);
  600.         }
  601.         if(!$user){
  602.             return new JsonResponse(['status' => 'error','message' => 'User Not Found']); 
  603.         }
  604.         $entityManager $this->getDoctrine()->getManager();
  605.         if($clinic->getBackgroundImg() != ''){
  606.             $url =  $clinic->getBackgroundImg();
  607.             $parsedUrl parse_url($url);
  608.             $path $parsedUrl['path'];
  609.             $path ltrim($parsedUrl['path'], '/');
  610.             if($path != 'images/banner.png'){
  611.             try{
  612.                 $this->s3Manager->removeImage($path);
  613.             }catch(\Exception $e){}
  614.             try{
  615.                 if(file_exists($this->getParameter('kernel.project_dir') . '/public/'.$path)){
  616.                     unlink($this->getParameter('kernel.project_dir') . '/public/'.$path);
  617.                 }
  618.          }catch(\Exception $e){}
  619.         }
  620.         }
  621.         $clinic->setBackgroundImg($_ENV['APP_URl'].'images/banner.png');
  622.         $entityManager->flush();
  623.         return new JsonResponse(['status' => 'success''message' => 'Remove clinic banner successfully']);
  624.     }
  625.     private function changeFilePermission($file)
  626.     {
  627.         if (!$this->filesystem->exists($file)) {
  628.             return false;
  629.         }
  630.         try {
  631.             $this->filesystem->chmod($file0777);
  632.         } catch (\Exception $e) {
  633.             $this->logger->error(
  634.                 'error change mod for file - ' $file,
  635.                 [
  636.                     'message' => $e->getMessage(),
  637.                 ]
  638.             );
  639.             return false;
  640.         }
  641.         return $file;
  642.     }
  643.     /**
  644.      * @Route("/get_subtreatments/{subDomain}", name="get_subtreatments")
  645.      */
  646.     public function getSubTreatments(Request $request): Response
  647.     {
  648.         $treatmentId $request->get('treatment');
  649.         $em $this->getDoctrine()->getManager();
  650.         $treatment =  $em->getRepository(TreatmentClinic::class)->find($treatmentId);
  651.         $query $query " SELECT * FROM price_list WHERE treatment_id = $treatmentId";
  652.         $data $em->getConnection()->prepare($query);
  653.         $data->execute();
  654.         $subTreatments $data->fetchAll();
  655.         if($subTreatments){
  656.             $html $this->render('sub_treatments.html.twig',[
  657.                 'subTreatments'=> $subTreatments,
  658.                 'treatment'=> $treatment,
  659.             ]);
  660.             return new JsonResponse(['status' => 'success','h'=>$html->getContent() ]);
  661.         }
  662.         else{
  663.             return new JsonResponse(['status' => 'success','treatment'=>$treatmentId ]);
  664.         }
  665.     }
  666.     
  667.     /**
  668.      * @Route("/get_doctor/{subDomain}", name="get_doctor")
  669.      */
  670.     public function getDoctor(Request $request,$subDomain): Response
  671.     {
  672.         $clinic $this->getDoctrine()->getRepository(Clinic::class)
  673.         ->findOneBy(['sub_domain' => $subDomain]);
  674.         if (!$clinic){
  675.              return new JsonResponse(['status' => 'error','message' => 'Clinic Not Exist' ]);
  676.         }
  677.         $timezone=$clinic->getTimezone();
  678.         date_default_timezone_set($timezone);
  679.         $appointmentDefaultTime $clinic->getAppointmentDefaultTime() ? $clinic->getAppointmentDefaultTime() : 60;
  680.         $clinicStartTime $clinic->getCalendarStartDay()->format('H:i');
  681.         $clinicEndTime $clinic->getCalendarEndDay()->format('H:i');
  682.         
  683.         $widget_settings=($clinic->getWidgetSettings() != '')?json_decode($clinic->getWidgetSettings(),true):null;
  684.         if (empty($widget_settings['enabled'])){
  685.             return new JsonResponse(['status' => 'success','r' => ' <div class="card"><div class="card-body p-50 text-center" > <h3 class="badge badge-blue m-0">Online Booking Disabled</h3>
  686.                                               </div></div>' ]);
  687.        }
  688.         $maxColumn $request->get('maxColumn');
  689.         $treatment $request->get('treatment');
  690.         $em $this->getDoctrine()->getManager();
  691.         $RAW_QUERY "
  692.             SELECT cutc.clinic_user_id,m.url as mediaurl, u.address1, u.town, u.state,u.country, u.postcode, u.qualification, u.username, u.first_name, u.last_name, GROUP_CONCAT(cr.name) AS room_names
  693.             FROM  clinic_user_treatment_clinic AS cutc
  694.             LEFT JOIN user AS u ON cutc.clinic_user_id = u.id 
  695.             LEFT JOIN rooms_treatments AS rt ON cutc.treatment_clinic_id = rt.treatment_clinic_id 
  696.             LEFT JOIN clinic_room AS cr ON rt.room_id = cr.id 
  697.             LEFT JOIN media AS m ON m.id = u.media_id
  698.             WHERE cutc.treatment_clinic_id = $treatment
  699.             AND u.role = 'ROLE_PRACTITIONER'
  700.             AND u.deleted = 0
  701.             AND u.online_booking_availability = 1
  702.             AND u.locked = 0
  703.             GROUP BY cutc.clinic_user_id, u.username, u.first_name, u.last_name
  704.             ";
  705.         $statement $em->getConnection()->prepare($RAW_QUERY);
  706.         $statement->execute();
  707.         $doctorTypes $statement->fetchAll();
  708.         $currentDate strtotime(date("Y-m-d")); 
  709.         $futureDate strtotime(date("Y-m-d"strtotime("+24 days"))); 
  710.         $bookedSlots = [];
  711.         
  712.         foreach($doctorTypes as $key => $doctor){
  713.             $doctorId $doctor['clinic_user_id'];
  714.             $query "
  715.                 SELECT day,start_time,end_time,enabled,location_id 
  716.                 FROM daily_schedule
  717.                 WHERE clinic_user_id = $doctorId 
  718.             ";
  719.             $schedule $em->getConnection()->prepare($query);
  720.             $schedule->execute();
  721.             $datas $schedule->fetchAll();
  722.             foreach($datas as $data){
  723.                 $doctorTypes[$key][substr($data['day'], 03)]=$data;
  724.             }
  725.             $query "
  726.                 SELECT start_time as start   FROM appointment WHERE start_time >= ? and end_time <= ? and payment_status= ? and clinic_user_id = ?";
  727.             $bookedSlot $em->getConnection()->prepare($query);
  728.             $bookedSlot->execute([date('Y-m-d H:i:s',$currentDate),date('Y-m-d H:i:s',$futureDate),'1',$doctorId]);
  729.             $bookedSlots $bookedSlot->fetchAll();
  730.             $barray = [];
  731.             foreach($bookedSlots as $bs){
  732.                 $barray[] = $bs['start'];
  733.             }
  734.             $doctorTypes[$key]['booked']= $barray;
  735.         }
  736.       // dd($doctorTypes);
  737.         $dateSliders = [];
  738.         $sumOfDays 0;
  739.         $keyDays 1;
  740.         $showsDays $maxColumn;
  741.         for ($date $currentDate$date <= $futureDate$date strtotime("+1 day"$date)) {
  742.             $formattedDate date("Y-m-d"$date); 
  743.             $dayName date("l"$date); 
  744.             $dateSliders[$keyDays][$sumOfDays]['date'] =date('M d',strtotime($formattedDate));
  745.             $dateSliders[$keyDays][$sumOfDays]['day'] =substr($dayName03);
  746.             $dateSliders[$keyDays][$sumOfDays]['mainDate'] =$formattedDate;   
  747.             $sumOfDays++;
  748.             if($sumOfDays $showsDays === 0){
  749.                 $keyDays++;
  750.             }
  751.         }
  752.         foreach($doctorTypes as $key => $doctorType)
  753.         { 
  754.             foreach($dateSliders as $dk => $ds)
  755.             {
  756.                 foreach($ds as  $d)
  757.                 {
  758.                     $slots = [];
  759.                     if($doctorType[$d['day']]['enabled'] == 1)
  760.                     { 
  761.                        //date_default_timezone_set('Asia/Kolkata');
  762.                        $startTime strtotime($d['mainDate'].' '.$doctorType[$d['day']]['start_time']); 
  763.                         $endTime strtotime($d['mainDate'].' '.$doctorType[$d['day']]['end_time']);
  764.                         for($i=$startTime;$i $endTime ;$i+=($appointmentDefaultTime*60))
  765.                         { 
  766.                             if(($i time()+$widget_settings['timeRequiredForBooking'])){
  767.                                
  768.                                 if(isset($doctorTypes[$key]['booked']) && $doctorTypes[$key]['booked'] && in_array($d['mainDate'].' '.date('H:i:s',$i),$doctorTypes[$key]['booked'])){
  769.                                 }else{
  770.                                     if(( date("H:i"$i) >= $clinicStartTime) && (date("H:i"$i) <= $clinicEndTime ))  {
  771.                                         $slots[]= ['i'=>date("h:i A"$i),'d'=>date("H:i",$i)];
  772.                                     }
  773.                                 }
  774.                             }
  775.                         } 
  776.                     }
  777.         
  778.                     $doctorTypes[$key]['slot'][$dk][$d['mainDate']]= $slots;
  779.                 }      
  780.             }
  781.         }
  782.         $html $this->render('calender_new.html.twig',[
  783.         'doctorTypes'=>$doctorTypes,
  784.         'dateSliders' =>$dateSliders,
  785.         'showsDays' =>  $showsDays
  786.         ]);
  787.         return new JsonResponse(['status' => 'success','r'=>$html->getContent() ]);     
  788.     }
  789.      /**
  790.      * @Route("/admin/change-password", name="changePassword")
  791.      */
  792.     public function changePassword(Request $request){
  793.         $user $this->getUser();
  794.         $currentUser $this->getUser();
  795.         $oldPassword=$user->getPassword();
  796.         $breadcrumbs $this->breadcrumbs;
  797.         $breadcrumbs->addItem($user->getUsername() . ' profile');
  798.         if ($user->getRole() != 'ROLE_CONSENTZ_ADMIN') {
  799.             return $this->render('changepassword.html.twig', [
  800.                 'breadcrumbs'=>$breadcrumbs,
  801.                 'clinic'=>$user->getClinic(),
  802.             'user' => $user,
  803.                 'currentUser'=>$currentUser
  804.             ]);
  805.         }else{
  806.             return $this->render('admin/changepassword.html.twig', [
  807.                 'breadcrumbs'=>$breadcrumbs,
  808.                   'user' => $user,
  809.                 'currentUser'=>$currentUser
  810.             ]);
  811.         }  
  812.     }
  813.      /**
  814.      * @Route("/admin/change-password-save", name="changePasswordSave")
  815.      */
  816.     public function changePasswordSave(Request $request,EncoderFactoryInterface $factory){
  817.         $user=$this->getUser();
  818.         $oldPassword=$request->get('old_password');
  819.         $user $this->getUser();
  820.             $encoder $factory->getEncoder($user);
  821.             if (!$encoder->isPasswordValid($user->getPassword(), $oldPasswordnull)) {
  822.                 $this->addFlash('danger''Password is incorrect.');
  823.                 return $this->redirectToRoute('changePassword');
  824.                 // dd(2);
  825.             }
  826.             $newPassword=$request->get('new_password');
  827.             $confirmPassword=$request->get('confirm_password');
  828.             if($newPassword !== $confirmPassword){
  829.                 $this->addFlash('danger'"New Password and Confirm Password does't match.");
  830.                 return $this->redirectToRoute('changePassword');
  831.                 // dd(3);
  832.              }
  833.              $em $this->getDoctrine()->getManager();
  834.             $user->setHash(md5($user->getUsername()));
  835.             $newpassword $this->userPasswordEncoder->encodePassword($user$newPassword);
  836.             $user->setPassword($newpassword);
  837.             $em->flush();
  838.             // dd(1);
  839.             $this->addFlash('success'"Password change successfully");
  840.             return $this->redirectToRoute('changePassword');
  841.     }
  842.      /**
  843.      * @Route("/admin/change-profile/{subDomain}", name="changeProfile")
  844.      */
  845.     public function changeProfile(){
  846.         dd(1);
  847.     }
  848.     /**
  849.      * @Route("/register", name="regis")
  850.      */
  851.     public function registerPat(Request $request)
  852.     {
  853.        return $this->render('register.html.twig');
  854.     }
  855.     /**
  856.      * @return array|Response
  857.      *
  858.      * @Route("/test", name="test")
  859.      * @Template()
  860.      */
  861.     public function test(): Response
  862.     {
  863.         session_start();
  864.         /** @var User $user */
  865.         $user $this->getUser();
  866.     }
  867. }