<?php
namespace App\Controller;
use App\Aws\SESManager;
use App\Aws\S3Manager;
use App\Entity\Clinic\Person\ClinicUser;
use App\Entity\Person\Admin;
use App\Entity\Person\SuperClinicAdmin;
use Symfony\Component\HttpFoundation\Cookie;
use App\Entity\Clinic\Clinic;
use App\Services\MediaManager;
use App\Entity\Person\User;
use App\Entity\Clinic\Stock\TreatmentClinic;
use App\Entity\Media\Media;
use Knp\Component\Pager\PaginatorInterface;
use App\Services\UserManager;
use App\Form\Model\SearchFilter;
use App\Form\Type\Clinic\Person\ClinicUserType;
use App\Form\Type\Clinic\Person;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Template;
use stdClass;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpFoundation\RedirectResponse;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\Security\Core\Encoder\UserPasswordEncoderInterface;
use WhiteOctober\BreadcrumbsBundle\Model\Breadcrumbs;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Security;
use Symfony\Component\Security\Core\User\UserInterface\UserInterface;
use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
use Symfony\Component\Security\Core\Encoder\EncoderFactoryInterface;
use App\Meeting\Ap;
use Doctrine\Persistence\ManagerRegistry;
use Psr\Log\LoggerInterface;
use Symfony\Component\Filesystem\Filesystem;
use Symfony\Component\HttpFoundation\File\UploadedFile;
/**
* Class PublicProfileController.
*/
class PublicProfileController extends AbstractController
{
/**
* @var Breadcrumbs
*/
private $breadcrumbs;
/**
* @var UserPasswordEncoderInterface
*/
private $userPasswordEncoder;
/**
* @var PaginatorInterface
*/
private $paginator;
/**
* @var SESManager
*/
private $SESManager;
/**
* @var ManagerRegistry
*/
private $doctrine;
/**
* @var LoggerInterface
*/
private $logger;
/**
* @var Filesystem
*/
private $filesystem;
/**
* @var MediaManager
*/
private $mediaManager;
/**
* @var string
*/
/**
* @var S3Manager
*/
private $s3Manager;
public function __construct(
Breadcrumbs $breadcrumbs,
PaginatorInterface $paginator,
UserPasswordEncoderInterface $userPasswordEncoder,
SESManager $SESManager,
ManagerRegistry $doctrine,
LoggerInterface $logger,
Filesystem $filesystem,
MediaManager $mediaManager,
S3Manager $s3Manager
) {
$this->paginator = $paginator;
$this->breadcrumbs = $breadcrumbs;
$this->userPasswordEncoder = $userPasswordEncoder;
$this->SESManager = $SESManager;
$this->doctrine = $doctrine;
$this->logger = $logger;
$this->filesystem = $filesystem;
$this->mediaManager = $mediaManager;
$this->s3Manager = $s3Manager;
date_default_timezone_set('UTC');
}
/**
* @Route("/admin/{subDomain}", name="profile_view")
*/
public function publicProfile($subDomain): Response
{
/** @var User $user */
$user = $this->getUser();
$currentUser = $this->getUser();
if($user){
$em = $this->getDoctrine()->getManager();
$token = bin2hex(random_bytes(16).md5($user->getId()));
$sqlUpdate = "UPDATE user SET login_token = ? WHERE id = ?";
$updateToken = $em->getConnection()->prepare($sqlUpdate);
$updateToken->execute([$token, $user->getId()]);
$response = new Response();
$response->headers->setCookie(
new Cookie('login_token', $token, strtotime('+1 day')) // Adjust the expiration time as needed
);
}
if(!$user){
$user = '';
}
$clinic = $this->getDoctrine()->getRepository(Clinic::class)
->findOneBy(['sub_domain' => $subDomain]);
if (!$clinic){
return new JsonResponse(['status' => 'error','message' => 'Clinic Not Exist' ]);
}
$isPermission = false;
if($user){
$isPermission = $this->isGranted('edit', $clinic);
}
$superClinincAdmin = new SuperClinicAdmin();
$appointment = $superClinincAdmin->getAppointmentData($this->getDoctrine()->getManager(),$clinic->getId());
$isOnline = null;
$filter = new SearchFilter();
$filter->setClinic($clinic);
$team = $this->getDoctrine()->getManager()->getRepository('App:Clinic\Person\ClinicUser')->selectAllClinicActiveUsers($this->getUser(), $filter)->getQuery()->getResult();
return $this->render('publicProfile.html.twig', [
'clinic' => $clinic,
'isOnline' => $isOnline,
'currentUser' => $currentUser,
'user' => $user,
'isPermission' => $isPermission,
'treatments' => $appointment['treatments'],
'teamusers' =>$team,
]);
}
/**
* @Route("/booking/{subDomain}", name="open_profile")
*/
public function newPublicProfile(Request $request,$subDomain): Response
{
/** @var User $user */
$newDomain = 0;
if(isset($_SESSION['subDomain']) && $_SESSION['subDomain'] != $subDomain){
$loginToken = $request->cookies->get('login_token');
$response = new Response();
if ($loginToken) {
$response->headers->setCookie(new Cookie('login_token', ''));
$newDomain = 1;
}
}
$_SESSION['subDomain']=$subDomain;
$user = $this->getUser();
$currentUser = $this->getUser();
$clinic = $this->getDoctrine()->getRepository(Clinic::class)
->findOneBy(['sub_domain' => $subDomain]);
if (!$clinic){
return new JsonResponse(['status' => 'error','message' => 'Clinic Not Exist' ]);
}
$url = (isset($_GET['id']) && $_GET['id'])?$this->generateUrl('booking_view',['id'=>$_GET['id']]):"";
$isPermission = false;
if($user){
$isPermission = $this->isGranted('edit', $clinic);
$em = $this->getDoctrine()->getManager();
$token = bin2hex(random_bytes(16).md5($user->getId()));
$sqlUpdate = "UPDATE user SET login_token = ? WHERE id = ?";
$updateToken = $em->getConnection()->prepare($sqlUpdate);
$updateToken->execute([$token, $user->getId()]);
}
$superClinincAdmin = new SuperClinicAdmin();
$appointment = $superClinincAdmin->getAppointmentData($this->getDoctrine()->getManager(),$clinic->getId());
$isOnline = null;
$em=$this->getDoctrine()->getManager();
$repository = $em->getRepository('App:Clinic\Person\ClinicUser');
$queryBuilder = $repository->createQueryBuilder('user');
$queryBuilder->where('user.clinic = :clinicId')
->andWhere('user.deleted = FALSE')
->andWhere('user.locked = FALSE')
->andWhere('user.visible = 1')
->setParameter('clinicId', $clinic->getId())
->orderBy('user.createdAt', 'DESC');
$team = $queryBuilder->getQuery()->getResult();
$widget_settings = ($clinic->getWidgetSettings() != '')?json_decode($clinic->getWidgetSettings(),true):null;
$gmtOffset = array_search($clinic->getTimezone(), Clinic::CLINIC_TIMEZONES) ;
if($user){
return $this->render('publicProfile.html.twig', [
'clinic' => $clinic,
'isOnline' => $isOnline,
'user' => $user,
'currentUser' => $currentUser,
'treatments' => $appointment['treatments'],
'isPermission' => $isPermission,
'teamusers' =>$team,
'newDomain'=>$newDomain,
'widget_settings' => $widget_settings,
'tZone' =>$gmtOffset,
]);
}else{
return $this->render('newPublicProfile.html.twig', [
'clinic' => $clinic,
'isOnline' => $isOnline,
'user' => $user,
'treatments' => $appointment['treatments'],
'isPermission' => $isPermission,
'teamusers' =>$team,
'url' =>$url,
'newDomain'=>$newDomain,
'widget_settings' => $widget_settings,
'tZone' =>$gmtOffset,
]);
}
}
/**
* @Route("widget/iframe/test", name="widget_iframe_test")
*/
public function checkWidgetIframe()
{
return $this->render('service/new.html.twig');
}
/**
* @Route("/admin/save/{subDomain}", name="profile_save")
*/
public function publicProfileSave(Request $request,$subDomain, UrlGeneratorInterface $urlGenerator):Response
{
$redirectUrl = $urlGenerator->generate('open_profile', ['subDomain' => $subDomain]);
if($request->getMethod() != "POST"){
throw $this->createNotFoundException('Only Post Method Allowed');
}
/** @var User $user */
$user = $this->getUser();
$clinic = $this->getDoctrine()->getRepository(Clinic::class)
->findOneBy(['sub_domain' => $subDomain]);
if(!$user){
return new JsonResponse(['status' => 'error','message' => 'User Not Found' , 'redirect' => $redirectUrl]);
}
if(!$request->get('email')){
return new JsonResponse(['status' => 'error','message' => 'Email Can not be Null' , 'redirect' => $redirectUrl]);
}
if(!$request->get('name')){
return new JsonResponse(['status' => 'error','message' => 'Name Can not be Null' , 'redirect' => $redirectUrl]);
}
if (!filter_var($request->request->get('email'), FILTER_VALIDATE_EMAIL)) {
return new JsonResponse(['status' => 'error','message' => 'Invalid Email Format' , 'redirect' => $redirectUrl]);
}
$name = $request->get('name');
$email = $request->get('email');
$showInPublicProfile = $request->get('show_in_public_profile')?1: 0;
$entityManager = $this->getDoctrine()->getManager();
$clinic->setShowInPublicProfile($showInPublicProfile);
$clinic->setName($name);
$clinic->setEmail($email);
$entityManager->flush();
return new JsonResponse(['status' => 'success','message' => 'Data Updated successfully' , 'redirect' => $redirectUrl]);
}
/**
* @Route("/book-btn-save/{subDomain}", name="book_btn_save")
*/
public function bookBtnSave(Request $request , $subDomain , UrlGeneratorInterface $urlGenerator)
{
$redirectUrl = $urlGenerator->generate('open_profile', ['subDomain' => $subDomain]);
if($request->getMethod() != "POST"){
return new JsonResponse(['status' => 'error','message' => 'Only Post Method Allowed' , 'redirect' => $redirectUrl]);
}
/** @var User $user */
$user = $this->getUser();
if(!$user){
return new JsonResponse(['status' => 'error','message' => 'User Not Found' , 'redirect' => $redirectUrl]);
}
$clinic = $this->getDoctrine()->getRepository(Clinic::class)
->findOneBy(['sub_domain' => $subDomain]);
if (!$clinic){
return new JsonResponse(['status' => 'error','message' => 'Clinic Not Exist' ]);
}
$booking_btn_name = $request->get('booking_btn_name');
$booking_btn_clr = $request->get('booking_btn_clr');
$booking_btn_bg_clr = $request->get('booking_btn_bg_clr');
$entityManager = $this->getDoctrine()->getManager();
$clinic->setBookingBtnName($booking_btn_name);
$clinic->setBookingBtnClr($booking_btn_clr);
$clinic->setBookingBtnBgClr($booking_btn_bg_clr);
$entityManager->flush();
return new JsonResponse(['status' => 'success','message' => 'Data Updated successfully' , 'redirect' => $redirectUrl]);
}
/**
* @Route("/admin/background-data-save/{subDomain}", name="bg_data_save")
*/
public function bgDataSave(Request $request , $subDomain , UrlGeneratorInterface $urlGenerator)
{
$file = $request->files->get('file');
$redirectUrl = $urlGenerator->generate('open_profile', ['subDomain' => $subDomain]);
if($request->getMethod() != "POST"){
return new JsonResponse(['status' => 'error','message' => 'Only Post Method Allowed' , 'redirect' => $redirectUrl]);
}
/** @var User $user */
$user = $this->getUser();
if(!$user){
return new JsonResponse(['status' => 'error','message' => 'User Not Found' , 'redirect' => $redirectUrl]);
}
$clinic = $this->getDoctrine()->getRepository(Clinic::class)
->findOneBy(['sub_domain' => $subDomain]);
if (!$clinic){
return new JsonResponse(['status' => 'error','message' => 'Clinic Not Exist' ]);
}
$inner_color = $request->get('inner_color');
$outer_color = $request->get('outer_color');
$entityManager = $this->getDoctrine()->getManager();
$clinic->setInnerColor($inner_color);
$clinic->setOuterColor($outer_color);
if(isset($file) && $file){
$oldBackgroundImg = $clinic->getBackgroundImg();
$fileMimeType = $file->getClientMimeType();
$originalName = $file->getClientOriginalName();
$extension = $file->getClientOriginalExtension();
$uniqueFilename = md5(uniqid()) . time() . '.' . $extension;
$filePath = 'uploads/banners/';
// dd($filePath);
$entityManager = $this->getDoctrine()->getManager();
$media = new Media();
$media->setFile($file);
$media->setNameFile(Media::getPrefixName($media->getFile()->getClientOriginalName()));
$media->setS3key('banners/' . $uniqueFilename);
$this->s3Manager->upload($media);
if($media->getUrl() != null){
$clinic->setBackgroundImg($media->getUrl());
}else{
$s = $file->move($filePath, $uniqueFilename);
$clinic->setBackgroundImg($_ENV['APP_URl'].'uploads/banners/'.$uniqueFilename);
if ($oldBackgroundImg) {
$oldImagePath = $this->getParameter('kernel.project_dir') . '/public/' . $oldBackgroundImg;
if (file_exists($oldImagePath)) {
unlink($oldImagePath);
}
}
}
}
$entityManager->flush();
return new JsonResponse(['status' => 'success','message' => 'Data Updated successfully' , 'redirect' => $redirectUrl]);
}
/**
* @Route("/admin/profile-image-save/{subDomain}", name="profile_image_save")
*/
public function profileImageSave(Request $request, $subDomain , UrlGeneratorInterface $urlGenerator){
$file = $request->files->get('imgSrc');
$redirectUrl = $urlGenerator->generate('open_profile', ['subDomain' => $subDomain]);
if($request->getMethod() != "POST"){
return new JsonResponse(['status' => 'error','message' => 'Only Post Method Allowed' , 'redirect' => $redirectUrl]);
}
$user = $this->getUser();
$clinic = $this->getDoctrine()->getRepository(Clinic::class)
->findOneBy(['sub_domain' => $subDomain]);
// dd($this->getParameter('kernel.project_dir').$user->getMedia()->getNameFile());
if (!$clinic){
return new JsonResponse(['status' => 'error','message' => 'Clinic Not Exist' ]);
}
if(!$user){
return new JsonResponse(['status' => 'error','message' => 'User Not Found' , 'redirect' => $redirectUrl]);
}
// dd($imgSrc);
if(isset($file) && $file){
// $oldBackgroundImg = $user->getMedia();
$fileMimeType = $file->getClientMimeType();
$originalName = $file->getClientOriginalName();
$extension = $file->getClientOriginalExtension();
$uniqueFilename = md5(uniqid()) . time() . '.' . $extension;
$filePath = 'uploads/profile/';
// dd($filePath);
$entityManager = $this->getDoctrine()->getManager();
$media = new Media();
$media->setFile($file);
$media->setNameFile(Media::getPrefixName($media->getFile()->getClientOriginalName()));
$media->setS3key('users/clinicUsers/' . $uniqueFilename);
$this->s3Manager->upload($media);
if($media->getUrl() != null){
try{
$url = $clinic->getProfileImg();
if(isset($url) && $url){
$parsedUrl = parse_url($url);
$path = $parsedUrl['path'];
$path = ltrim($parsedUrl['path'], '/');
$this->s3Manager->removeImage($path);
}
}catch(\Exception $e){}
$clinic->setProfileImg($media->getUrl());
}else{
$s = $file->move($filePath, $uniqueFilename);
$directory = $this->getParameter('kernel.project_dir') . '/public/uploads/profile/';
$uploadPath = $directory . $uniqueFilename;
$targetFileName = md5(time());
$targetFile = $this->changeFilePermission($uploadPath);
$file = new UploadedFile($targetFile, $uniqueFilename, 'image/png');
$hasProfile = $clinic->getProfileImg();
if(isset($hasProfile) && $hasProfile){
try{
$url = $clinic->getProfileImg();
$parsedUrl = parse_url($url);
$path = $parsedUrl['path'];
$path = ltrim($parsedUrl['path'], '/');
if(file_exists($this->getParameter('kernel.project_dir') . '/public/'.$path)){
unlink($this->getParameter('kernel.project_dir') . '/public/'.$path);
}
}catch(\Exception $e){}
}
$clinic->setProfileImg($_ENV['APP_URl'].'uploads/profile/'.$uniqueFilename);
}
$entityManager->flush();
return new JsonResponse(['status' => 'success', 'message' => 'Uploaded successfully','data' => ['name'=>$uniqueFilename,'id'=>$user->getId()]]);
}
}
/**
* @Route("/admin/change-profile-user", name="changeProfileImage")
*/
public function changeProfileImage(Request $request, UrlGeneratorInterface $urlGenerator){
$file = $request->files->get('file');
if($request->getMethod() != "POST"){
return new JsonResponse(['status' => 'error','message' => 'Only Post Method Allowed' , 'redirect' => $redirectUrl]);
}
$user = $this->getUser();
$entityManager = $this->getDoctrine()->getManager();
// dd($media);
if(!$user){
return new JsonResponse(['status' => 'error','message' => 'User Not Found']);
}
// dd($imgSrc);
if(isset($file) && $file){
// $oldBackgroundImg = $user->getMedia();
$fileMimeType = $file->getClientMimeType();
$originalName = $file->getClientOriginalName();
$extension = $file->getClientOriginalExtension();
$uniqueFilename = md5(uniqid()) . time() . '.' . $extension;
$media = new Media();
$media->setFile($file);
$media->setNameFile(Media::getPrefixName($media->getFile()->getClientOriginalName()));
$media->setS3key('users/clinicUsers/' . $uniqueFilename);
$this->s3Manager->upload($media);
if($media->getUrl() != null){
try{
$url = $user->getProfileImg();
if(isset($url) && $url){
$parsedUrl = parse_url($url);
$path = $parsedUrl['path'];
$path = ltrim($parsedUrl['path'], '/');
$this->s3Manager->removeImage($path);
}
}catch(\Exception $e){}
$user->setMedia($media);
$user->setProfileImg($media->getUrl());
$entityManager->persist($media);
}else{
$filePath = 'uploads/profile/';
// dd($filePath);
$s = $file->move($filePath, $uniqueFilename);
$directory = $this->getParameter('kernel.project_dir') . '/public/uploads/profile/';
$uploadPath = $directory . $uniqueFilename;
$targetFileName = md5(time());
$targetFile = $this->changeFilePermission($uploadPath);
$file = new UploadedFile($targetFile, $uniqueFilename, 'image/png');
$entityManager = $this->getDoctrine()->getManager();
$hasProfile = $user->getProfileImg();
if(isset($hasProfile) && $hasProfile){
try{
$url = $user->getProfileImg();
$parsedUrl = parse_url($url);
$path = $parsedUrl['path'];
$path = ltrim($parsedUrl['path'], '/');
if(file_exists($this->getParameter('kernel.project_dir') . '/public/'.$path)){
unlink($this->getParameter('kernel.project_dir') . '/public/'.$path);
}
}catch(\Exception $e){}
}
$user->setProfileImg($_ENV['APP_URl'].'uploads/profile/'.$uniqueFilename);
}
$entityManager->flush();
return new JsonResponse(['status' => 'success', 'message' => 'Uploaded successfully','data' => ['name'=>$uniqueFilename,'url'=>$user->getProfileImg(),'id'=>$user->getId()]]);
}
}
/**
* @Route("/admin/remove-profile-user", name="removeProfileImg")
*/
public function removeProfileImg(Request $request){
if($request->getMethod() != "POST"){
return new JsonResponse(['status' => 'error','message' => 'Only Post Method Allowed']);
}
$user = $this->getUser();
$entityManager = $this->getDoctrine()->getManager();
$media = $user->getMedia();
if($media){
try{
$this->s3Manager->removeImage($media->getS3key());
if($media){
$entityManager->remove($media);
}
}catch(\Exception $e){}
}
if($user->getProfileImg() != ''){
$url = $user->getProfileImg();
$parsedUrl = parse_url($url);
$path = $parsedUrl['path'];
$path = ltrim($parsedUrl['path'], '/');
try{
$this->s3Manager->removeImage($path);
}catch(\Exception $e){}
try{
if(file_exists($this->getParameter('kernel.project_dir') . '/public/'.$path)){
unlink($this->getParameter('kernel.project_dir') . '/public/'.$path);
}
}catch(\Exception $e){}
}
$user->setMedia(NULL);
$user->setProfileImg(NULL);
$entityManager->flush();
return new JsonResponse(['status' => 'success', 'message' => 'Removed successfully']);
}
/**
* @Route("/admin/remove-clinicprofile-user/{subDomain}", name="removeClinicProfileImg")
*/
public function removeClinicProfileImg(Request $request, $subDomain){
if($request->getMethod() != "POST"){
return new JsonResponse(['status' => 'error','message' => 'Only Post Method Allowed']);
}
$user = $this->getUser();
$clinic = $this->getDoctrine()->getRepository(Clinic::class)
->findOneBy(['sub_domain' => $subDomain]);
if (!$clinic){
return new JsonResponse(['status' => 'error','message' => 'Clinic Not Exist' ]);
}
if(!$user){
return new JsonResponse(['status' => 'error','message' => 'User Not Found']);
}
$entityManager = $this->getDoctrine()->getManager();
if($clinic->getProfileImg() != ''){
$url = $clinic->getProfileImg();
$parsedUrl = parse_url($url);
$path = $parsedUrl['path'];
$path = ltrim($parsedUrl['path'], '/');
try{
$this->s3Manager->removeImage($path);
}catch(\Exception $e){}
try{
if(file_exists($this->getParameter('kernel.project_dir') . '/public/'.$path)){
unlink($this->getParameter('kernel.project_dir') . '/public/'.$path);
}
}catch(\Exception $e){}
}
$clinic->setProfileImg(NULL);
$entityManager->flush();
return new JsonResponse(['status' => 'success', 'message' => 'Remove clinic profile successfully']);
}
/**
* @Route("/admin/remove-clinicbanner-user/{subDomain}", name="removeClinicBanner")
*/
public function removeClinicBanner(Request $request, $subDomain){
if($request->getMethod() != "POST"){
return new JsonResponse(['status' => 'error','message' => 'Only Post Method Allowed']);
}
$user = $this->getUser();
$clinic = $this->getDoctrine()->getRepository(Clinic::class)
->findOneBy(['sub_domain' => $subDomain]);
if (!$clinic){
return new JsonResponse(['status' => 'error','message' => 'Clinic Not Exist' ]);
}
if(!$user){
return new JsonResponse(['status' => 'error','message' => 'User Not Found']);
}
$entityManager = $this->getDoctrine()->getManager();
if($clinic->getBackgroundImg() != ''){
$url = $clinic->getBackgroundImg();
$parsedUrl = parse_url($url);
$path = $parsedUrl['path'];
$path = ltrim($parsedUrl['path'], '/');
if($path != 'images/banner.png'){
try{
$this->s3Manager->removeImage($path);
}catch(\Exception $e){}
try{
if(file_exists($this->getParameter('kernel.project_dir') . '/public/'.$path)){
unlink($this->getParameter('kernel.project_dir') . '/public/'.$path);
}
}catch(\Exception $e){}
}
}
$clinic->setBackgroundImg($_ENV['APP_URl'].'images/banner.png');
$entityManager->flush();
return new JsonResponse(['status' => 'success', 'message' => 'Remove clinic banner successfully']);
}
private function changeFilePermission($file)
{
if (!$this->filesystem->exists($file)) {
return false;
}
try {
$this->filesystem->chmod($file, 0777);
} catch (\Exception $e) {
$this->logger->error(
'error change mod for file - ' . $file,
[
'message' => $e->getMessage(),
]
);
return false;
}
return $file;
}
/**
* @Route("/get_subtreatments/{subDomain}", name="get_subtreatments")
*/
public function getSubTreatments(Request $request): Response
{
$treatmentId = $request->get('treatment');
$em = $this->getDoctrine()->getManager();
$treatment = $em->getRepository(TreatmentClinic::class)->find($treatmentId);
$query = $query = " SELECT * FROM price_list WHERE treatment_id = $treatmentId";
$data = $em->getConnection()->prepare($query);
$data->execute();
$subTreatments = $data->fetchAll();
if($subTreatments){
$html = $this->render('sub_treatments.html.twig',[
'subTreatments'=> $subTreatments,
'treatment'=> $treatment,
]);
return new JsonResponse(['status' => 'success','h'=>$html->getContent() ]);
}
else{
return new JsonResponse(['status' => 'success','treatment'=>$treatmentId ]);
}
}
/**
* @Route("/get_doctor/{subDomain}", name="get_doctor")
*/
public function getDoctor(Request $request,$subDomain): Response
{
$clinic = $this->getDoctrine()->getRepository(Clinic::class)
->findOneBy(['sub_domain' => $subDomain]);
if (!$clinic){
return new JsonResponse(['status' => 'error','message' => 'Clinic Not Exist' ]);
}
$timezone=$clinic->getTimezone();
date_default_timezone_set($timezone);
$appointmentDefaultTime = $clinic->getAppointmentDefaultTime() ? $clinic->getAppointmentDefaultTime() : 60;
$clinicStartTime = $clinic->getCalendarStartDay()->format('H:i');
$clinicEndTime = $clinic->getCalendarEndDay()->format('H:i');
$widget_settings=($clinic->getWidgetSettings() != '')?json_decode($clinic->getWidgetSettings(),true):null;
if (empty($widget_settings['enabled'])){
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>
</div></div>' ]);
}
$maxColumn = $request->get('maxColumn');
$treatment = $request->get('treatment');
$em = $this->getDoctrine()->getManager();
$RAW_QUERY = "
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
FROM clinic_user_treatment_clinic AS cutc
LEFT JOIN user AS u ON cutc.clinic_user_id = u.id
LEFT JOIN rooms_treatments AS rt ON cutc.treatment_clinic_id = rt.treatment_clinic_id
LEFT JOIN clinic_room AS cr ON rt.room_id = cr.id
LEFT JOIN media AS m ON m.id = u.media_id
WHERE cutc.treatment_clinic_id = $treatment
AND u.role = 'ROLE_PRACTITIONER'
AND u.deleted = 0
AND u.online_booking_availability = 1
AND u.locked = 0
GROUP BY cutc.clinic_user_id, u.username, u.first_name, u.last_name
";
$statement = $em->getConnection()->prepare($RAW_QUERY);
$statement->execute();
$doctorTypes = $statement->fetchAll();
$currentDate = strtotime(date("Y-m-d"));
$futureDate = strtotime(date("Y-m-d", strtotime("+24 days")));
$bookedSlots = [];
foreach($doctorTypes as $key => $doctor){
$doctorId = $doctor['clinic_user_id'];
$query = "
SELECT day,start_time,end_time,enabled,location_id
FROM daily_schedule
WHERE clinic_user_id = $doctorId
";
$schedule = $em->getConnection()->prepare($query);
$schedule->execute();
$datas = $schedule->fetchAll();
foreach($datas as $data){
$doctorTypes[$key][substr($data['day'], 0, 3)]=$data;
}
$query = "
SELECT start_time as start FROM appointment WHERE start_time >= ? and end_time <= ? and payment_status= ? and clinic_user_id = ?";
$bookedSlot = $em->getConnection()->prepare($query);
$bookedSlot->execute([date('Y-m-d H:i:s',$currentDate),date('Y-m-d H:i:s',$futureDate),'1',$doctorId]);
$bookedSlots = $bookedSlot->fetchAll();
$barray = [];
foreach($bookedSlots as $bs){
$barray[] = $bs['start'];
}
$doctorTypes[$key]['booked']= $barray;
}
// dd($doctorTypes);
$dateSliders = [];
$sumOfDays = 0;
$keyDays = 1;
$showsDays = $maxColumn;
for ($date = $currentDate; $date <= $futureDate; $date = strtotime("+1 day", $date)) {
$formattedDate = date("Y-m-d", $date);
$dayName = date("l", $date);
$dateSliders[$keyDays][$sumOfDays]['date'] =date('M d',strtotime($formattedDate));
$dateSliders[$keyDays][$sumOfDays]['day'] =substr($dayName, 0, 3);
$dateSliders[$keyDays][$sumOfDays]['mainDate'] =$formattedDate;
$sumOfDays++;
if($sumOfDays % $showsDays === 0){
$keyDays++;
}
}
foreach($doctorTypes as $key => $doctorType)
{
foreach($dateSliders as $dk => $ds)
{
foreach($ds as $d)
{
$slots = [];
if($doctorType[$d['day']]['enabled'] == 1)
{
//date_default_timezone_set('Asia/Kolkata');
$startTime = strtotime($d['mainDate'].' '.$doctorType[$d['day']]['start_time']);
$endTime = strtotime($d['mainDate'].' '.$doctorType[$d['day']]['end_time']);
for($i=$startTime;$i < $endTime ;$i+=($appointmentDefaultTime*60))
{
if(($i > time()+$widget_settings['timeRequiredForBooking'])){
if(isset($doctorTypes[$key]['booked']) && $doctorTypes[$key]['booked'] && in_array($d['mainDate'].' '.date('H:i:s',$i),$doctorTypes[$key]['booked'])){
}else{
if(( date("H:i", $i) >= $clinicStartTime) && (date("H:i", $i) <= $clinicEndTime )) {
$slots[]= ['i'=>date("h:i A", $i),'d'=>date("H:i",$i)];
}
}
}
}
}
$doctorTypes[$key]['slot'][$dk][$d['mainDate']]= $slots;
}
}
}
$html = $this->render('calender_new.html.twig',[
'doctorTypes'=>$doctorTypes,
'dateSliders' =>$dateSliders,
'showsDays' => $showsDays
]);
return new JsonResponse(['status' => 'success','r'=>$html->getContent() ]);
}
/**
* @Route("/admin/change-password", name="changePassword")
*/
public function changePassword(Request $request){
$user = $this->getUser();
$currentUser = $this->getUser();
$oldPassword=$user->getPassword();
$breadcrumbs = $this->breadcrumbs;
$breadcrumbs->addItem($user->getUsername() . ' profile');
if ($user->getRole() != 'ROLE_CONSENTZ_ADMIN') {
return $this->render('changepassword.html.twig', [
'breadcrumbs'=>$breadcrumbs,
'clinic'=>$user->getClinic(),
'user' => $user,
'currentUser'=>$currentUser
]);
}else{
return $this->render('admin/changepassword.html.twig', [
'breadcrumbs'=>$breadcrumbs,
'user' => $user,
'currentUser'=>$currentUser
]);
}
}
/**
* @Route("/admin/change-password-save", name="changePasswordSave")
*/
public function changePasswordSave(Request $request,EncoderFactoryInterface $factory){
$user=$this->getUser();
$oldPassword=$request->get('old_password');
$user = $this->getUser();
$encoder = $factory->getEncoder($user);
if (!$encoder->isPasswordValid($user->getPassword(), $oldPassword, null)) {
$this->addFlash('danger', 'Password is incorrect.');
return $this->redirectToRoute('changePassword');
// dd(2);
}
$newPassword=$request->get('new_password');
$confirmPassword=$request->get('confirm_password');
if($newPassword !== $confirmPassword){
$this->addFlash('danger', "New Password and Confirm Password does't match.");
return $this->redirectToRoute('changePassword');
// dd(3);
}
$em = $this->getDoctrine()->getManager();
$user->setHash(md5($user->getUsername()));
$newpassword = $this->userPasswordEncoder->encodePassword($user, $newPassword);
$user->setPassword($newpassword);
$em->flush();
// dd(1);
$this->addFlash('success', "Password change successfully");
return $this->redirectToRoute('changePassword');
}
/**
* @Route("/admin/change-profile/{subDomain}", name="changeProfile")
*/
public function changeProfile(){
dd(1);
}
/**
* @Route("/register", name="regis")
*/
public function registerPat(Request $request)
{
return $this->render('register.html.twig');
}
/**
* @return array|Response
*
* @Route("/test", name="test")
* @Template()
*/
public function test(): Response
{
session_start();
/** @var User $user */
$user = $this->getUser();
}
}