src/Controller/Webservice/WebserviceController.php line 1332

Open in your IDE?
  1. <?php
  2. namespace App\Controller\Webservice;
  3. use App\Entity\Category;
  4. use App\Entity\User;
  5. use App\Entity\EventReport;
  6. use App\Entity\BlogReport;
  7. use App\Entity\Appointment;
  8. use App\Entity\NotificationReport;
  9. use App\Entity\VoiceExercise;
  10. use App\Repository\UserRepository;
  11. use App\Repository\UserRoleRepository;
  12. use App\Repository\BlogRepository;
  13. use App\Repository\BlogReportRepository;
  14. use App\Repository\OrganizationRepository;
  15. use App\Repository\HomeSettingRepository;
  16. use App\Repository\AppointmentStatusRepository;
  17. use App\Repository\AppointmentRepository;
  18. use App\Repository\NotificationReportRepository;
  19. use App\Repository\EventListRepository;
  20. use App\Repository\EventReportRepository;
  21. use App\Repository\NotificationRepository;
  22. use App\Repository\NotificationPushReportRepository;
  23. use App\Repository\BibleListRepository;
  24. use App\Repository\ConferenceCategoryRepository;
  25. use App\Repository\BlogCategoryRepository;
  26. use Doctrine\ORM\EntityManagerInterface;
  27. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  28. use Symfony\Component\Security\Core\Encoder\UserPasswordEncoderInterface// @dth: to encode the pass
  29. use Symfony\Component\HttpFoundation\Request;
  30. use Symfony\Component\HttpFoundation\Response;
  31. use Symfony\Component\Routing\Annotation\Route;
  32. use Symfony\Component\HttpFoundation\JsonResponse;
  33. use Symfony\Component\HttpKernel\KernelInterface;
  34. use App\Service\HelperService;
  35. /**
  36.  * @Route("ws")
  37.  */
  38. class WebserviceController extends AbstractController
  39. {
  40.     
  41.     
  42.     private $passwordEncoder;
  43.     private $environment;
  44.     
  45.     public function __construct(UserPasswordEncoderInterface $passwordEncoderKernelInterface $kernel)
  46.     {
  47.         $this->passwordEncoder $passwordEncoder;
  48.         $this->environment     $kernel->getEnvironment();
  49.     }
  50.     
  51.     
  52.    
  53.    
  54.         
  55.     /**
  56.      * @Route("/check_user", name="ws_login", methods={"GET", "POST"})
  57.      */
  58.     public function checkUser(UserRepository $userRepositoryRequest $requestEntityManagerInterface $entityManagerHelperService $helperService): Response
  59.     {
  60.        
  61.        $data json_decode(file_get_contents("php://input"));
  62.         
  63.        if($data)
  64.        {
  65.            $user  $data->user;
  66.            $pass  $data->pwd;
  67.            $token $data->token;           
  68.            $paths $helperService->getPaths();                      
  69.            
  70.            $userObj $userRepository->findOneBy(['email' => $user]);
  71.            if($userObj)
  72.            {
  73.                if(!$this->passwordEncoder->isPasswordValid($userObj$pass))
  74.                {
  75.                        
  76.                        return new JsonResponse(array('status' => 'invalid'));           
  77.                        
  78.                } else {                                     
  79.                                       
  80.                    $data = array(
  81.                          'id'         => $userObj->getId(),
  82.                          'name'       => $userObj->getFirstName()." ".$userObj->getLastName(),
  83.                          'first_name' => $userObj->getFirstName(),
  84.                          'last_name'  => $userObj->getLastName(),                         
  85.                       'email'      => $userObj->getEmail(),
  86.                       'status'     => $userObj->getStatus(),
  87.                       'role_id'       => $userObj->getUserRole()->getId(),
  88.                          'token'      => md5($userObj->getId()),
  89.                          'organization_id'   => $userObj->getOrganization()->getOrganizationId(),
  90.                          'organization_bkg'  => $paths['uploads_path']."/".$userObj->getOrganization()->getBkgImage(),
  91.                          'organization_logo' => $paths['uploads_path']."/".$userObj->getOrganization()->getLogoPath(),
  92.                          'organization_name' => $userObj->getOrganization()->getName(),
  93.                       'has_help'          => $userObj->getOrganization()->getHasHelp()
  94.                    );
  95.                    $userObj->setToken($token);
  96.                    $entityManager->persist($userObj);
  97.                    $entityManager->flush();
  98.                
  99.                    return new JsonResponse(array('status' => 'success''data' => $data ));                              
  100.                                   
  101.                }
  102.                
  103.            }
  104.            
  105.        }
  106.            
  107.        return new JsonResponse(array('status' => 'error'));           
  108.   
  109.     }
  110.      /**
  111.      * @Route("/check_activation", name="ws_check_activation", methods={"GET", "POST"})
  112.      */
  113.     public function checkActivation(UserRepository $userRepositoryRequest $requestEntityManagerInterface $entityManagerUserRoleRepository $userRoleRepository,OrganizationRepository $organizationRepositoryHelperService $helperService): Response
  114.     {
  115.        
  116.         $data json_decode(file_get_contents("php://input"));
  117.         
  118.            if($data)
  119.            {
  120.             $user  $data->token;
  121.             $userObj $userRepository->findOneBy(['id' => $user->id]);
  122.             if($userObj)
  123.             {
  124.                 $paths $helperService->getPaths();        
  125.                 $data = array(
  126.                     'id'         => $userObj->getId(),
  127.                     'name'       => $userObj->getFirstName()." ".$userObj->getLastName(),
  128.                     'first_name' => $userObj->getFirstName(),
  129.                     'last_name'  => $userObj->getLastName(),                         
  130.                     'email'      => $userObj->getEmail(),
  131.                      'status'     => $userObj->getStatus(),
  132.                      'role_id'     => $userObj->getUserRole()->getId(),
  133.                     'token'      => md5($userObj->getId()),
  134.                     'organization_id'   => $userObj->getOrganization()->getOrganizationId(),
  135.                     'organization_bkg'  => $paths['uploads_path']."/".$userObj->getOrganization()->getBkgImage(),
  136.                     'organization_logo' => $paths['uploads_path']."/".$userObj->getOrganization()->getLogoPath(),
  137.                     'organization_name' => $userObj->getOrganization()->getName(),
  138.                      'has_help'            => $userObj->getOrganization()->getHasHelp()
  139.                   );
  140.                 
  141.                 return new JsonResponse(array('status' => 'success''data' => $data ));           
  142.                 
  143.             }    
  144.         }    
  145.         return new JsonResponse(array('status' => 'error'));
  146.     }
  147.     /**
  148.      * @Route("/register_user", name="ws_register", methods={"GET", "POST"})
  149.      */
  150.     public function registerUser(UserRepository $userRepositoryRequest $requestEntityManagerInterface $entityManagerUserRoleRepository $userRoleRepository,OrganizationRepository $organizationRepositoryHelperService $helperService): Response
  151.     {
  152.        
  153.        $data json_decode(file_get_contents("php://input"));
  154.         
  155.        if($data)
  156.        {
  157.             $user  $data->register;
  158.             $paths $helperService->getPaths();                      
  159.            
  160.             $userObj $userRepository->findOneBy(['email' => $user->email'status'=>'ACTIVO']);
  161.             if($userObj)
  162.             {
  163.                 
  164.                 return new JsonResponse(array('status' => 'duplicate'));           
  165.                
  166.             } else {   
  167.                 
  168.                 
  169.                 $userRole $userRoleRepository->findOneBy(['id'=>2]);
  170.                 $orgObj   $organizationRepository->findOneBy(['organizationId' => $user->organization_id]);
  171.                 $register = new User();   
  172.                 
  173.                 $encoded  $this->passwordEncoder->encodePassword($register$user->password);
  174.                                                    
  175.                 $register->setFirstName($user->first_name);
  176.                 $register->setLastName($user->last_name);                
  177.                 $register->setEmail($user->email);                                
  178.                 $register->setGender($user->gender);
  179.                 $register->setPassword($encoded);    
  180.                 $register->setOrganization($orgObj);                                
  181.                 $register->setPhonePrimary($user->phone);                
  182.                 $register->setStatus("ESPERANDO");                    
  183.                 $register->setBirthdate(substr($user->birthdate,0,10));
  184.                 $register->setUserRole($userRole);                
  185.                 $entityManager->persist($register);
  186.                 $entityManager->flush();                                
  187.                                 
  188.                 return new JsonResponse(array('status' => 'success'));                                                                               
  189.                
  190.             }              
  191.            
  192.         }
  193.            
  194.         return new JsonResponse(array('status' => 'error'));           
  195.   
  196.     }
  197.     /**
  198.      * @Route("/download-bible-list", name="ws_download_bible_list", methods={"GET", "POST"})
  199.      */
  200.     public function downloadBibleList(BibleListRepository $bibleListRepositoryRequest $requestEntityManagerInterface $entityManager): Response
  201.     {
  202.                      
  203.                   
  204.        $data json_decode(file_get_contents("php://input"));        
  205.        if(true)
  206.        {
  207.                
  208.             $token      "aa";//$data->token;
  209.             
  210.             $arrayEsp   = [];                 
  211.             $arrayEng   = [];                 
  212.             $arrayOther = [];             
  213.             
  214.             $list $bibleListRepository->findBy(["is_active" => 1]);       
  215.             foreach($list as $item)
  216.             {
  217.                 
  218.                 $testaments = [];
  219.                 foreach(explode(",",$item->getBibleGroup()) as $group)
  220.                 {
  221.                     if($group == 'OT')
  222.                     {
  223.                         $testaments[] = "Antiguo Testamento";
  224.                     }                    
  225.                     if($group == 'NT')
  226.                     {
  227.                         $testaments[] = "Nuevo Testamento";
  228.                     }
  229.                     if($group == 'AP')
  230.                     {
  231.                         $testaments[] = "Libros Apócrifos";
  232.                     }                                                
  233.                 }
  234.                 
  235.                 if($item->getLanguageName() == 'Spanish')
  236.                 {
  237.                     $language 'Español';
  238.                 } else if($item->getLanguageName() == 'English')
  239.                 {
  240.                     $language 'Inglés';
  241.                 } else {
  242.                     $language $item->getLanguageName();
  243.                 }
  244.                 
  245.                 if($item->getLanguageName() == 'Spanish')
  246.                 {
  247.                     $arrayEsp[] = [
  248.                         'bible_list_id' => $item->getBibleListId(),
  249.                         'bible_code'    => $item->getBibleCode(),
  250.                         'name'            => $item->getName(),
  251.                         'testaments'    => $testaments,
  252.                         'language'      => $language,
  253.                         'filepath'      => $item->getFilePath(),
  254.                         'is_visible'    => 1
  255.                     ];
  256.                 } else if($item->getLanguageName() == 'English')
  257.                 {
  258.                     $arrayEng[] = [
  259.                         'bible_list_id' => $item->getBibleListId(),
  260.                         'bible_code'    => $item->getBibleCode(),
  261.                         'name'            => $item->getName(),
  262.                         'testaments'    => $testaments,
  263.                         'language'      => $language,
  264.                         'filepath'      => $item->getFilePath(),
  265.                         'is_visible'    => 1                                                
  266.                     ];
  267.                 } else {
  268.                     $arrayOther[] = [
  269.                         'bible_list_id' => $item->getBibleListId(),
  270.                         'bible_code'    => $item->getBibleCode(),
  271.                         'name'            => $item->getName(),
  272.                         'testaments'    => $testaments,
  273.                         'language'      => $language,
  274.                         'filepath'      => $item->getFilePath(),
  275.                         'is_visible'    => 1                                                
  276.                     ];                    
  277.                 }            
  278.             }
  279.             
  280.             
  281.             return new JsonResponse(array('status' => 'success''spanish' => $arrayEsp'english' => $arrayEng'other' => $arrayOther));      
  282.                                                 
  283.            
  284.        }
  285.            
  286.        return new JsonResponse(array('status' => 'error'));           
  287.   
  288.     }    
  289.     /**
  290.      * @Route("/download-bible", name="ws_download_bible", methods={"GET", "POST"})
  291.      */
  292.     public function downloadBible(BibleListRepository $bibleListRepositoryRequest $requestEntityManagerInterface $entityManagerHelperService $helperService): Response
  293.     {
  294.        
  295.        
  296.        $paths $helperService->getPaths();
  297.                   
  298.        $data json_decode(file_get_contents("php://input"));        
  299.        if($data)
  300.        {
  301.                
  302.                $bibleId $data->bid;
  303.                if($bibleId)
  304.                {
  305.                 //$token          = $data->token;
  306.                 //$category       = $data->category;
  307.                
  308.                 $array = [];                 
  309.                 $item $bibleListRepository->findOneBy(["bibleListId" => $bibleId]);       
  310.                 if($item)
  311.                 {
  312.                     
  313.                     $content file_get_contents($paths['bibles_path'].$item->getFilePath());
  314.                     
  315.                     $array = [
  316.                         'path'     => $paths['bibles_path'].$item->getFilePath(),
  317.                         'content'  => $content,
  318.                         'filename' => $item->getFilePath()
  319.                     ];
  320.                     
  321.                     return new JsonResponse(array('status' => 'success''data' => $array));      
  322.                     
  323.                 }
  324.                         
  325.                 
  326.             }
  327.            
  328.        }
  329.            
  330.        return new JsonResponse(array('status' => 'error'));           
  331.   
  332.     }    
  333.     /**
  334.      * @Route("/get-blogs", name="ws_get_blogs", methods={"GET", "POST"})
  335.      */
  336.     public function getBlogs(BlogRepository $blogRepositoryRequest $requestEntityManagerInterface $entityManagerHelperService $helperService): Response
  337.     {
  338.        
  339.        $data json_decode(file_get_contents("php://input"));        
  340.        if($data)
  341.        {
  342.                
  343.                $oid   $data->oid;
  344.                
  345.                $paths $helperService->getPaths();
  346.                $array = [];                 
  347.                $blogs $blogRepository->findBy(["is_active" => 1"is_publish" => 1"Organization" => $oid], ["created_at" => "DESC"], 5);
  348.                foreach($blogs as $blog)
  349.                {
  350.                    $automaticVoice strip_tags($blog->getLargeContent());
  351.                    $automaticVoice str_replace("&nbsp;"" "$automaticVoice);
  352.                    $organizationId $blog->getOrganization()->getOrganizationId();
  353.                    
  354.                    /*
  355.                 es-es-x-eee-local
  356.                 es-es-x-eef-local
  357.                 es-es-x-eea-local
  358.                 es-es-x-eec-network                
  359.                 es-es-x-eed-network   
  360.                 es-es-x-eea-network
  361.                 es-es-x-eed-local
  362.                 es-es-x-eec-local
  363.                 es-ES-language
  364.                 es-US-language
  365.                 es-us-x-esd-network
  366.                 es-us-x-esf-network
  367.                 es-us-x-esc-network                
  368.                 es-us-x-esc-local
  369.                 es-us-x-esf-local
  370.                 es-us-x-esd-local*/
  371.                    
  372.                    
  373.                    $filePath str_replace("?dl=0""?raw=1"$blog->getFilePath());
  374.                    
  375.                    $array[] = [
  376.                            'blog_id'           => $blog->getBlogId(),
  377.                         'title'           => $blog->getName(),
  378.                         'short_content'   => $blog->getShortContent(),
  379.                         'large_content'   => $blog->getLargeContent(),
  380.                         'file_path'         => $filePath,     
  381.                         'file_extension'  => $blog->getFileExtension(),                                                
  382.                         'striped_content' => $automaticVoice,                    
  383.                         'bkg_image'       => $paths['uploads_path']."/".$organizationId."/".$blog->getBkgImage(),
  384.                         'category_name'   => $blog->getBlogCategory()->getName(),
  385.                         'created_at'      => $blog->getCreatedAt()->format("Y/m/d"),
  386.                         'created_by'      => $blog->getCreatedBy()->getFirstName()." ".$blog->getCreatedBy()->getLastName(),
  387.                         'voice_options'   => ["identifier" =>'es-us-x-esd-network'"rate" => 1.04"pitch" => 0.99"cancel" => true]
  388.                     ];
  389.             
  390.             }
  391.                         
  392.             return new JsonResponse(array('status' => 'success''data' => $array));          
  393.             
  394.        }
  395.            
  396.        return new JsonResponse(array('status' => 'error'));           
  397.   
  398.     }
  399.     
  400.     
  401.     /**
  402.      * @Route("/get-organization-info", name="ws_get_organization_info", methods={"GET", "POST"})
  403.      */
  404.     public function getOrganizationInfo(UserRepository $userRepositoryOrganizationRepository $organizationRepositoryRequest $requestEntityManagerInterface $entityManagerHelperService $helperServiceHomeSettingRepository $homeSettingRepository): Response
  405.     {
  406.        
  407.        $data json_decode(file_get_contents("php://input"));        
  408.        if($data)
  409.        {
  410.               $organizationId  $data->oid;
  411.             $token           $data->token;
  412.             $object $organizationRepository->findOneBy(['organizationId' => $organizationId]);
  413.                
  414.                if($object)
  415.                {
  416.                               
  417.                 $userObj $userRepository->findOneBy(array('id' => $token->id));        
  418.                    $paths $helperService->getPaths();               
  419.                    
  420.                
  421.                    $bible_bkg $paths['assets_path']."img/bkg_bible.jpg";
  422.                    $blog_bkg  $paths['assets_path']."img/bkg_blog.jpg";
  423.                    $event_bkg $paths['assets_path']."img/bkg_event.jpg";    
  424.                    $help_bkg  $paths['assets_path']."img/bkg_help.jpg";        
  425.                    $design    1;
  426.                    
  427.                    $homeSetting $homeSettingRepository->findOneBy(['Organization' => $organizationId]);                                      
  428.                    if($homeSetting)
  429.                    {
  430.                        if(strlen($homeSetting->getBibleBkg())>0)
  431.                        {
  432.                         $bible_bkg   $paths['uploads_path'].$organizationId."/".$homeSetting->getBibleBkg();    
  433.                     }
  434.                     if(strlen($homeSetting->getBlogBkg())>0)
  435.                     {
  436.                         $blog_bkg    $paths['uploads_path'].$organizationId."/".$homeSetting->getBlogBkg();                                            
  437.                     }
  438.                     if(strlen($homeSetting->getEventBkg())>0)
  439.                     {
  440.                         $event_bkg   $paths['uploads_path'].$organizationId."/".$homeSetting->getEventBkg();
  441.                     }
  442.                     if(strlen($homeSetting->getHelpBkg())>0)
  443.                     {
  444.                         $help_bkg    $paths['uploads_path'].$organizationId."/".$homeSetting->getHelpBkg();                                                                
  445.                     }    
  446.                     
  447.                     if($homeSetting->getHomeTemplate())
  448.                     {
  449.                         $design $homeSetting->getHomeTemplate()->getHomeTemplateId();                
  450.                     }
  451.                 }
  452.                 
  453.                 $has_help  0;
  454.                 $bible_col 12;
  455.                 if($object->getHasHelp() == 1)
  456.                 {
  457.                     $has_help  1;
  458.                     $bible_col 6;
  459.                 }
  460.                 
  461.     
  462.                    $array = [
  463.                     'name'          => $object->getName(),
  464.                     'about_us'         => $object->getAboutUs(),
  465.                     'logo_path'     => $paths['uploads_path'].$object->getLogoPath(),
  466.                     'bkg_image'     => $paths['uploads_path'].$object->getBkgImage(),
  467.                     'bible_bkg'     => $bible_bkg,
  468.                     'blog_bkg'      => $blog_bkg,
  469.                     'event_bkg'     => $event_bkg,
  470.                     'help_bkg'      => $help_bkg,
  471.                     'has_help'      => $has_help,
  472.                     'bible_col'     => $bible_col,
  473.                     'design'        => $design,
  474.                     'user_status'   => $userObj->getStatus()
  475.                 ];
  476.                    
  477.                }
  478.                
  479.                         
  480.             return new JsonResponse(array('status' => 'success''data' => $array));  
  481.            
  482.        }
  483.            
  484.        return new JsonResponse(array('status' => 'error'));           
  485.   
  486.     }    
  487.     
  488.     
  489.     
  490.     /**
  491.      * @Route("/get-blog-category", name="ws_get_blog_category", methods={"GET", "POST"})
  492.      */
  493.     public function getBlogCategories(BlogCategoryRepository $blogCategoryRepositoryBlogRepository $blogRepositoryRequest $requestEntityManagerInterface $entityManagerHelperService $helperService): Response
  494.     {
  495.        
  496.        $data json_decode(file_get_contents("php://input"));        
  497.        if($data)
  498.        {                           
  499.         
  500.             $user $data->token;
  501.            
  502.                $paths $helperService->getPaths();           
  503.                $array = [];                                
  504.                
  505.             $blogsCategory $blogCategoryRepository->findBy([
  506.                 "is_active"    => 1,
  507.                 "Organization" => $user->organization_id,
  508.             ], ["name" => "ASC"]);
  509.                foreach($blogsCategory as $object)
  510.                {                
  511.                    
  512.                    $arrayBlogs = [];
  513.                    $blogs $blogRepository->findBy([
  514.                     "BlogCategory" => $object->getBlogCategoryId(), 
  515.                     "is_active"    => 1
  516.                     "is_publish"   => 1
  517.                 ], ["created_at"   => "DESC"]);
  518.                    foreach($blogs as $blog)
  519.                    {
  520.                        
  521.                        $organizationId $blog->getOrganization()->getOrganizationId();
  522.                        $filePath str_replace("?dl=0""?raw=1"$blog->getFilePath());                            
  523.                        
  524.                        $arrayBlogs[] = [
  525.                            'blog_id'          => $blog->getBlogId(),
  526.                          'title'             => $blog->getName(),
  527.                         'short_content'  => $blog->getShortContent(),
  528.                         'large_content'  => $blog->getLargeContent(),
  529.                         'file_path'        => $filePath,
  530.                         'file_extension' => $blog->getFileExtension(),                            
  531.                         'bkg_image'      => $paths['uploads_path']."/".$organizationId."/".$blog->getBkgImage(),
  532.                         'category_name'  => $blog->getBlogCategory()->getName(),
  533.                         'created_at'     => $blog->getCreatedAt()->format("Y/m/d"),
  534.                         'created_by'     => $blog->getCreatedBy()->getFirstName()." ".$blog->getCreatedBy()->getLastName(),
  535.                         'visible'        => 1                        
  536.                        ];
  537.                    }
  538.                    
  539.                    $array[] = [
  540.                     'title'       => $object->getName(),
  541.                     'description' => $object->getDescription(),
  542.                     'blogs'       => $arrayBlogs,
  543.                     'visible'     => 1
  544.                    ];
  545.                }
  546.                         
  547.             return new JsonResponse(array('status' => 'success''data' => $array));  
  548.            
  549.        }
  550.            
  551.        return new JsonResponse(array('status' => 'error'));           
  552.   
  553.     }
  554.     
  555.     
  556.     
  557.     /**
  558.      * @Route("/get-schedule", name="/ws_get_schedule")
  559.      */
  560.     public function scheduleUserAction(UserRepository $userRepositoryRequest $requestEntityManagerInterface $entityManager): Response
  561.     {
  562.         $em $this->getDoctrine()->getManager();        
  563.         $data json_decode(file_get_contents("php://input"));
  564.         
  565.         $schedule = array();
  566.         if($data)
  567.         {
  568.             $professional_id $data->professionalId;
  569.             $category_id     $data->categoryId;
  570.             $date_to_search  $data->selectedDate;
  571.             $organizationId  $data->oid;            
  572.             
  573.             //$professional_id = 40;
  574.             //$category_id     = 1;//$data->categoryId;
  575.             //$date_to_search  = '2022-01-28';//$data->selectedDate;
  576.                     
  577.             $scheduleRaw $userRepository->scheduleUser($professional_id,$category_id,$date_to_search$organizationId);        
  578.             //if($schedule == 'error')
  579.             //{
  580.             //} else {
  581.                 $schedule $scheduleRaw;                
  582.             //}
  583.         }
  584.         
  585.         
  586.         return new JsonResponse(array('data' => $schedule));                
  587.         
  588.     }    
  589.     
  590.     
  591.     /**
  592.      * @Route("/register-schedule", name="/ws_register_schedule")
  593.      */
  594.     public function registerAction(UserRepository $userRepositoryConferenceCategoryRepository $conferenceCategoryRepositoryAppointmentStatusRepository $appointmentStatusRepositoryRequest $requestEntityManagerInterface $entityManager): Response
  595.     {
  596.         $data json_decode(file_get_contents("php://input"));
  597.         
  598.         if($data)
  599.         {
  600.                 
  601.             $token          $data->token;
  602.             $professionalId $data->professionalId;
  603.             $category       $data->category;
  604.             $schedule       $data->schedule;            
  605.             
  606.             $user         $userRepository->findOneBy(array("status" => 'ACTIVO''id' => $token->id));        
  607.             $professional $userRepository->findOneBy(array("status" => 'ACTIVO''id' => $professionalId));        
  608.             $categoryObj  $conferenceCategoryRepository->findOneBy(array("is_active" => 1"conferenceCategoryId" => $category));
  609.             $status       $appointmentStatusRepository->findOneBy(array("appointmentStatusId" => 1));
  610.                         
  611.             $appointment = new Appointment();    
  612.             $appointment->setOrganization($user->getOrganization());        
  613.             $appointment->setConferenceCategory($categoryObj);
  614.             $appointment->setUser($professional);
  615.             $appointment->setAppointmentConsumeMinutes($categoryObj->getAppointmentConsumeMinutes());
  616.             $appointment->setAppointmentStatus($status);            
  617.             $appointment->setScheduledAt($schedule);
  618.             $appointment->setCreatedBy($user);
  619.             $appointment->setCreatedAt(new \DateTime());
  620.             $entityManager->persist($appointment);
  621.             $entityManager->flush();
  622.             
  623.             if($appointment->getAppointmentId())
  624.             {
  625.                 return new JsonResponse(array('status' => "success"'appointment' => $appointment->getAppointmentId()));                
  626.             } else {
  627.                 
  628.                 return new JsonResponse(array('status' => "error"));                
  629.                 
  630.             }
  631.             
  632.         }
  633.         
  634.         return new JsonResponse(array('status' => "error"));                
  635.         
  636.     }
  637.            
  638.     /**
  639.      * @Route("/get-conference-categories", name="ws_get_conference_categories", methods={"GET", "POST"})
  640.      */
  641.     public function getConferenceCategories(ConferenceCategoryRepository $conferenceCategoryRepositoryRequest $requestEntityManagerInterface $entityManagerHelperService $helperService): Response
  642.     {
  643.        
  644.        $data json_decode(file_get_contents("php://input"));        
  645.        if($data)
  646.        {
  647.             $user $data->token;
  648.                
  649.                $paths $helperService->getPaths();
  650.                $array = [];                 
  651.                
  652.             $list $conferenceCategoryRepository->findBy([
  653.                 "is_active"    => 1
  654.                 "is_publish"   => 1,
  655.                 "Organization" => $user->organization_id
  656.             ], ["created_at" => "DESC"], 5);
  657.                foreach($list as $item)
  658.                {
  659.                    $array[] = [
  660.                     'category_id'   => $item->getConferenceCategoryId(),
  661.                     'title'         => $item->getName(),
  662.                     'description'   => $item->getDescription(),
  663.                     'bkg_image'     => $paths['uploads_path']."/".$item->getBackgroundPath(),
  664.                     'created_at'    => $item->getCreatedAt()->format("Y/m/d"),
  665.                     'created_by'    => $item->getCreatedBy()->getFirstName()." ".$item->getCreatedBy()->getLastName()
  666.                    ];
  667.                }
  668.                         
  669.             return new JsonResponse(array('status' => 'success''data' => $array));  
  670.            
  671.        }
  672.            
  673.        return new JsonResponse(array('status' => 'error'));           
  674.   
  675.     }
  676.     
  677.     
  678.     
  679.     /**
  680.      * @Route("/report-bulletin", name="ws_report_bulletin", methods={"GET", "POST"})
  681.      */
  682.     public function reportBulletin(UserRepository $userRepositoryNotificationRepository $notificationRepositoryNotificationReportRepository $notificationReportRepositoryRequest $requestEntityManagerInterface $entityManager): Response
  683.     {
  684.        
  685.        $data json_decode(file_get_contents("php://input"));        
  686.        if($data)
  687.        {
  688.                
  689.                if($notificationReportRepository->findOneBy(['user' => $data->token->id'notification' => $data->notification_id]))               
  690.                {
  691.                    
  692.                } else {
  693.                    $notificationObj $notificationRepository->findOneBy(["notificationId" => $data->notification_id]);
  694.                    $userObj         $userRepository->findOneBy(["id" => $data->token->id]);
  695.                    
  696.                    $obj = new NotificationReport();
  697.                    $obj->setUser($userObj);
  698.                    $obj->setNotification($notificationObj);
  699.                    $obj->setCreatedAt(new \DateTime());
  700.                 $entityManager->persist($obj);
  701.                 $entityManager->flush();
  702.             
  703.             }
  704.                         
  705.             return new JsonResponse(array('status' => 'success'));  
  706.            
  707.        }
  708.            
  709.        return new JsonResponse(array('status' => 'error'));           
  710.   
  711.     }
  712.     
  713.     
  714.     
  715.     /**
  716.      * @Route("/report-event", name="ws_report_event", methods={"GET", "POST"})
  717.      */
  718.     public function reportEvent(UserRepository $userRepositoryEventListRepository $eventListRepositoryEventReportRepository $eventReportRepositoryRequest $requestEntityManagerInterface $entityManager): Response
  719.     {
  720.        
  721.        $data json_decode(file_get_contents("php://input"));        
  722.        if($data)
  723.        {
  724.                
  725.                if($eventReportRepository->findOneBy(['user' => $data->token->id'eventList' => $data->event_id]))               
  726.                {
  727.                    
  728.                } else {
  729.                    $eventObj $eventListRepository->findOneBy(["eventListId" => $data->event_id]);
  730.                    $userObj  $userRepository->findOneBy(["id" => $data->token->id]);
  731.                    
  732.                    $obj = new EventReport();
  733.                    $obj->setUser($userObj);
  734.                    $obj->setEventList($eventObj);
  735.                    $obj->setCreatedAt(new \DateTime());
  736.                 $entityManager->persist($obj);
  737.                 $entityManager->flush();
  738.             
  739.             }
  740.                         
  741.             return new JsonResponse(array('status' => 'success'));  
  742.            
  743.        }
  744.            
  745.        return new JsonResponse(array('status' => 'error'));           
  746.   
  747.     }
  748.         
  749.   /**
  750.      * @Route("/cancel-appointment", name="ws_cancel_appointment", methods={"GET", "POST"})
  751.      */
  752.     public function cancelAppointment(UserRepository $userRepositoryAppointmentRepository $appointmentRepositoryAppointmentStatusRepository $appointmentStatusRepositoryRequest $requestEntityManagerInterface $entityManager): Response
  753.     {
  754.        
  755.        $data json_decode(file_get_contents("php://input"));        
  756.        if($data)
  757.        {
  758.                $obj $appointmentRepository->findOneBy(['appointmentId' => $data->appointment_id]);
  759.                if($obj)               
  760.                {
  761.                    
  762.                    $status $appointmentStatusRepository->findOneBy(['appointmentStatusId' => 3]);
  763.                    $user   $userRepository->findOneBy(array("status" => 'ACTIVO''id' => $data->token->id));                                
  764.                    
  765.                    $obj->setAppointmentStatus($status);
  766.                    $obj->setUpdatedBy($user);
  767.                    $obj->setUpdatedAt(new \DateTime());
  768.                 $entityManager->persist($obj);
  769.                 $entityManager->flush();                        
  770.                         
  771.                 return new JsonResponse(array('status' => 'success'));  
  772.             } else {
  773.                 
  774.                 return new JsonResponse(array('status' => 'invalid'));                           
  775.                 
  776.             }
  777.            
  778.        }
  779.            
  780.        return new JsonResponse(array('status' => 'error'));           
  781.   
  782.     }
  783.         
  784.     /**
  785.      * @Route("/report-blog", name="ws_report_blog", methods={"GET", "POST"})
  786.      */
  787.     public function reportBlog(UserRepository $userRepositoryBlogRepository $blogRepositoryBlogReportRepository $blogReportRepositoryRequest $requestEntityManagerInterface $entityManager): Response
  788.     {
  789.        
  790.        $data json_decode(file_get_contents("php://input"));        
  791.        if($data)
  792.        {
  793.                
  794.                if($blogReportRepository->findOneBy(['user' => $data->token->id'blog' => $data->blog_id]))               
  795.                {
  796.                    
  797.                } else {
  798.                    $blogObj $blogRepository->findOneBy(["blogId" => $data->blog_id]);
  799.                    $userObj $userRepository->findOneBy(["id" => $data->token->id]);
  800.                    
  801.                    $obj = new BlogReport();
  802.                    $obj->setUser($userObj);
  803.                    $obj->setBlog($blogObj);
  804.                    $obj->setCreatedAt(new \DateTime());
  805.                 $entityManager->persist($obj);
  806.                 $entityManager->flush();
  807.             
  808.             }
  809.                         
  810.             return new JsonResponse(array('status' => 'success'));  
  811.            
  812.        }
  813.            
  814.        return new JsonResponse(array('status' => 'error'));           
  815.   
  816.     }
  817.             
  818.     
  819.     /**
  820.      * @Route("/push-test", name="ws_push_test", methods={"GET", "POST"})
  821.      */
  822.     public function pushTest(HelperService $helperService): Response
  823.     {
  824.         return new JsonResponse(['status' => 'false']);
  825.         $serviceAccountFile $this->getParameter('kernel.project_dir') . '/src/Service/n0bd2-db37748d66.json';        
  826.         // Obtén el token de acceso generando manualmente un JWT.
  827.         $accessToken $this->getAccessToken($serviceAccountFile);
  828.         // Lee el archivo de credenciales para obtener el project_id.
  829.         $credentials json_decode(file_get_contents($serviceAccountFile), true);
  830.         $projectId $credentials['project_id'];
  831.         // Construye el mensaje FCM. Se utiliza el token del dispositivo al que enviar la notificación.
  832.         $deviceToken "dDSaIz4TRfSmSmR5IhzoVD:APA91bG8ruNpuGqjUpyxkBlJhcIU7gHteHBi2nmEhqxu-ai9VigFRqwwcL9H_HgvYmlBWWib088YGWQiIgNclzEP-VgTLYgGIaq-uQKDxGVjGrfTztvbSwQ";
  833.         $message = [
  834.             "message" => [
  835.                 "token" => $deviceToken,
  836.                 "notification" => [
  837.                     "title" => "Title",
  838.                     "body"  => "Test Body"
  839.                 ]
  840.                 // Puedes agregar "data" u otros campos si es necesario.
  841.             ]
  842.         ];
  843.         // Endpoint de la API HTTP v1 de FCM. Reemplaza {projectId} por el valor obtenido.
  844.         $url "https://fcm.googleapis.com/v1/projects/{$projectId}/messages:send";
  845.         // Cabeceras de la petición, incluyendo el token de acceso OAuth obtenido.
  846.         $headers = [
  847.             "Authorization: Bearer " $accessToken,
  848.             "Content-Type: application/json"
  849.         ];
  850.         // Enviar la petición POST usando cURL.
  851.         $ch curl_init();
  852.         curl_setopt($chCURLOPT_URL$url);
  853.         curl_setopt($chCURLOPT_POSTtrue);
  854.         curl_setopt($chCURLOPT_HTTPHEADER$headers);
  855.         curl_setopt($chCURLOPT_RETURNTRANSFERtrue);
  856.         curl_setopt($chCURLOPT_SSL_VERIFYPEERfalse);
  857.         curl_setopt($chCURLOPT_POSTFIELDSjson_encode($message));
  858.         $result curl_exec($ch);
  859.         if(curl_errno($ch)) {
  860.             return new JsonResponse([
  861.                 'status'  => 'error',
  862.                 'message' => curl_error($ch)
  863.             ]);
  864.         }
  865.         curl_close($ch);
  866.         return new JsonResponse([
  867.             'status' => 'success',
  868.             'result' => $result
  869.         ]);
  870.     }
  871.     private function getAccessToken($serviceAccountFile)
  872.     {
  873.         // Lee las credenciales desde el archivo JSON.
  874.         $credentials json_decode(file_get_contents($serviceAccountFile), true);
  875.         $privateKey  $credentials['private_key'];
  876.         $clientEmail $credentials['client_email'];
  877.         $tokenUri    $credentials['token_uri']; // Normalmente "https://oauth2.googleapis.com/token"
  878.         // Construir el header del JWT.
  879.         $header json_encode([
  880.             'alg' => 'RS256',
  881.             'typ' => 'JWT'
  882.         ]);
  883.         // Construir el payload (claims).
  884.         $now time();
  885.         $claims json_encode([
  886.             'iss'   => $clientEmail,
  887.             'scope' => 'https://www.googleapis.com/auth/firebase.messaging',
  888.             'aud'   => $tokenUri,
  889.             'iat'   => $now,
  890.             'exp'   => $now 3600  // El token es válido por 1 hora.
  891.         ]);
  892.         // Función anónima para hacer Base64URL encoding.
  893.         $base64UrlEncode = function($data) {
  894.             return rtrim(strtr(base64_encode($data), '+/''-_'), '=');
  895.         };
  896.         $base64UrlHeader $base64UrlEncode($header);
  897.         $base64UrlClaims $base64UrlEncode($claims);
  898.         // Crear la cadena a firmar: header.claims.
  899.         $signatureInput $base64UrlHeader '.' $base64UrlClaims;
  900.         // Firmar la cadena usando la clave privada con SHA256.
  901.         $signature '';
  902.         openssl_sign($signatureInput$signature$privateKey'SHA256');
  903.         $base64UrlSignature $base64UrlEncode($signature);
  904.         // Construir el JWT completo.
  905.         $jwt $signatureInput '.' $base64UrlSignature;
  906.         // Preparar la petición POST para intercambiar el JWT por un token de acceso.
  907.         $postFields http_build_query([
  908.             'grant_type' => 'urn:ietf:params:oauth:grant-type:jwt-bearer',
  909.             'assertion'  => $jwt
  910.         ]);
  911.         $ch curl_init();
  912.         curl_setopt($chCURLOPT_URL$tokenUri);
  913.         curl_setopt($chCURLOPT_POSTtrue);
  914.         curl_setopt($chCURLOPT_POSTFIELDS$postFields);
  915.         curl_setopt($chCURLOPT_RETURNTRANSFERtrue);
  916.         curl_setopt($chCURLOPT_SSL_VERIFYPEERfalse);
  917.         $response curl_exec($ch);
  918.         if(curl_errno($ch)) {
  919.             die('Curl error: ' curl_error($ch));
  920.         }
  921.         curl_close($ch);
  922.         $responseData json_decode($responsetrue);
  923.         if(isset($responseData['access_token'])){
  924.             return $responseData['access_token'];
  925.         } else {
  926.             die('Error al obtener el token de acceso: ' $response);
  927.         }
  928.     }
  929.         
  930.     /**
  931.      * @Route("/get-bulletin", name="ws_get_bulletin", methods={"GET", "POST"})
  932.      */
  933.     public function getBulletin(NotificationRepository $notificationRepositoryNotificationReportRepository $notificationReportRepository,  NotificationPushReportRepository $notificationPushReportRepositoryRequest $requestEntityManagerInterface $entityManagerHelperService $helperService): Response
  934.     {
  935.        
  936.        $data json_decode(file_get_contents("php://input"));        
  937.        if($data)
  938.        {
  939.                
  940.                $paths $helperService->getPaths();               
  941.             $token $data->token;               
  942.             
  943.                $array = [];                 
  944.                $totalUnread 0;
  945.                
  946.                $notifications $notificationRepository->findBy(["is_active" => 1'notification_type' => 'notification''Organization' => $token->organization_id], ["created_at" => "DESC"]);
  947.             foreach($notifications as $noti)
  948.             {
  949.                 
  950.                 if($noti->getScheduledAt() <= date("Y-m-d H:i:s"))
  951.                 {
  952.                     
  953.                     //Buscamos usuarios a quienes se les enviara la notificación                   
  954.                     $array_filters = [
  955.                         "filter_age_from" => $noti->getFilterAgeFrom(),
  956.                         "filter_age_to"   => $noti->getFilterAgeTo(),
  957.                         "filter_gender"   => $noti->getFilterGender(),
  958.                         "filter_user_id"  => ($noti->getFilterUserId() != "" $noti->getFilterUserId()->getId() : '')
  959.                     ];                                              
  960.                     
  961.                                                   
  962.                     $users $notificationPushReportRepository->getUsersNotifications($array_filters$token->organization_id); 
  963.                     foreach($users as $user)
  964.                     {
  965.                         //$output->writeln([$user['id']]);
  966.                         if($noti->getFilterAgeFrom() != '' || $noti->getFilterAgeTo() != '')
  967.                         {
  968.                             //calculamos edad en base a fecha de nacimiento
  969.                             if($user['birthdate'] == '')
  970.                             {                            
  971.                                 continue;
  972.                             }
  973.                             
  974.                             $age $this->search_age($user['birthdate']);
  975.         
  976.                             if($noti->getFilterAgeFrom() != '' &&  intval($age) < intval($noti->getFilterAgeFrom()))
  977.                             {  
  978.                                 continue;
  979.                             }
  980.         
  981.                             if($noti->getFilterAgeTo() != '' && $age $noti->getFilterAgeTo())
  982.                             {                       
  983.                                 continue;
  984.                             }
  985.                             
  986.                         }
  987.                             
  988.                         if($token->id == $user['id'])
  989.                         {
  990.                             
  991.                                $imagePath "";
  992.                                if($noti->getImagePath() != '')
  993.                                {
  994.                                    $imagePath $paths['uploads_path']."/".$noti->getImagePath();
  995.                                }                        
  996.                             
  997.                             
  998.                             $wasRead 0;                            
  999.                             $checkRead $notificationReportRepository->findOneBy(['user'=>$token->id'notification'=>$noti->getNotificationId()]);
  1000.                             if($checkRead)
  1001.                             {
  1002.                                 $wasRead 1;                                
  1003.                             } else {
  1004.                                 $totalUnread++;
  1005.                             }
  1006.                             
  1007.                             $array[] = [
  1008.                                 'notification_id' => $noti->getNotificationId(),
  1009.                                 'title'           => $noti->getTitle(),
  1010.                                 'short_content'   => $noti->getShortContent(),
  1011.                                 'large_content'   => $noti->getTextContent(),                          
  1012.                                 'image_path'      => $imagePath,
  1013.                                 'created_at'      => $noti->getCreatedAt()->format("Y/m/d"),
  1014.                                 'scheduled_at'    => $noti->getScheduledAt(),   
  1015.                                 'is_scheduled'    => $noti->getIsScheduled(),    
  1016.                                 'was_read'        => $wasRead,
  1017.                                 'created_by'      => $noti->getCreatedBy()->getFirstName()." ".$noti->getCreatedBy()->getLastName()
  1018.                                ];
  1019.                         }    
  1020.                         
  1021.                     }
  1022.                 
  1023.                 }
  1024.                                 
  1025.                 
  1026.             }               
  1027.                               
  1028.                /*$list = $notificationRepository->findBy(["is_active" => 1, 'Organization' => $token->organization_id], ["created_at" => "DESC"]);
  1029.                foreach($list as $item)
  1030.                {
  1031.                    
  1032.                    $imagePath = "";
  1033.                    if($item->getImagePath() != '')
  1034.                    {
  1035.                        $imagePath = $paths['uploads_path']."/".$item->getImagePath();
  1036.                    }
  1037.                    
  1038.                    $array[] = [
  1039.                     'notification_id' => $item->getNotificationId(),
  1040.                     'title'           => $item->getTitle(),
  1041.                     'short_content'   => $item->getShortContent(),
  1042.                     'large_content'   => $item->getTextContent(),                          
  1043.                     'image_path'      => $imagePath,
  1044.                     'created_at'      => $item->getCreatedAt()->format("Y/m/d"),
  1045.                     'scheduled_at'    => $item->getScheduledAt(),   
  1046.                     'is_scheduled'    => $item->getIsScheduled(),                        
  1047.                     'created_by'      => $item->getCreatedBy()->getFirstName()." ".$item->getCreatedBy()->getLastName()
  1048.                    ];
  1049.                }*/
  1050.                         
  1051.             return new JsonResponse(array('status' => 'success''data' => $array'total_unread' => $totalUnread));  
  1052.            
  1053.        }
  1054.            
  1055.        return new JsonResponse(array('status' => 'error''total_unread' => 0));           
  1056.   
  1057.     }    
  1058.     
  1059.     
  1060.     
  1061.     /**
  1062.      * @Route("/get-events", name="ws_get_events", methods={"GET", "POST"})
  1063.      */
  1064.     public function getEvents(EventListRepository $eventListRepositoryRequest $requestEntityManagerInterface $entityManagerHelperService $helperService): Response
  1065.     {
  1066.        
  1067.        $data json_decode(file_get_contents("php://input"));        
  1068.        if($data)
  1069.        {
  1070.                
  1071.                $paths $helperService->getPaths();               
  1072.             $token $data->token;               
  1073.             
  1074.             $monthN=array(1=>"Enero","Febrero","Marzo","Abril","Mayo","Junio","Julio","Agosto","Septiembre","Octubre","Noviembre","Diciembre");
  1075.             
  1076.                $array = [];                 
  1077.                $list $eventListRepository->findBy(["is_active" => 1"is_publish" => 1'Organization' => $token->organization_id], ["created_at" => "ASC"]);
  1078.                foreach($list as $item)
  1079.                {
  1080.                    
  1081.                    if($item->getScheduledAt() >= date("Y-m-d H:i:s"))
  1082.                    {
  1083.                        $explodeScheduled explode("-",$item->getScheduledAt());
  1084.                        $month            str_replace("0","",$explodeScheduled[1]);
  1085.                     $monthNumber      $monthN[$month];                               
  1086.                     
  1087.                     $bkg_img "";
  1088.                     if($item->getBkgImage())
  1089.                     {
  1090.                         $bkg_img $paths['uploads_path']."/".$item->getOrganization()->getOrganizationId()."/".$item->getBkgImage();
  1091.                     }                
  1092.                     
  1093.                        $array[] = [
  1094.                         'event_list_id' => $item->getEventListId(),
  1095.                         'title'         => $item->getName(),
  1096.                         'description'   => $item->getDescription(),
  1097.                         'bkg_image'     => $bkg_img,
  1098.                         'created_at'    => $item->getCreatedAt()->format("Y-m-d"),
  1099.                         'scheduled_at'  => $item->getScheduledAt(),   
  1100.                         'month_name'    => substr($monthNumber,0,3),
  1101.                         'month_full'    => $monthNumber,       
  1102.                         'created_by'    => $item->getCreatedBy()->getFirstName()." ".$item->getCreatedBy()->getLastName()
  1103.                        ];
  1104.                    }
  1105.                }
  1106.                         
  1107.             return new JsonResponse(array('status' => 'success''data' => $array));  
  1108.            
  1109.        }
  1110.            
  1111.        return new JsonResponse(array('status' => 'error'));           
  1112.   
  1113.     }    
  1114.     
  1115.     
  1116.     /**
  1117.      * @Route("/get-my-appointments", name="ws_get_my_appointments", methods={"GET", "POST"})
  1118.      */
  1119.     public function getMyAppointments(AppointmentRepository $appointmentRepositoryRequest $requestEntityManagerInterface $entityManager): Response
  1120.     {
  1121.        
  1122.        $data json_decode(file_get_contents("php://input"));        
  1123.        if($data)
  1124.        {
  1125.                
  1126.             $token          $data->token;
  1127.             $category       $data->category;
  1128.                
  1129.                $array = [];                 
  1130.                $item $appointmentRepository->findOneBy(["AppointmentStatus" => 1'created_by' => $token->id'ConferenceCategory' => $category]);
  1131.                if($item)
  1132.                {
  1133.                    
  1134.                    $to_time strtotime($item->getScheduledAt());
  1135.                 $from_time strtotime(date("Y-m-d H:i:s"));
  1136.                 $minutes_to_start round(abs($to_time $from_time) / 60,2). " minute";
  1137.                    
  1138.                    $array = [
  1139.                     'appointment_id'    => $item->getAppointmentId(),
  1140.                     'professional_id'   => $item->getUser()->getId(),
  1141.                     'professional_name' => $item->getUser()->getFirstName()." ".$item->getUser()->getLastName(),   
  1142.                     'scheduled_at'      => $item->getScheduledAt(),
  1143.                     'minutes_to_start'  => (int)$minutes_to_start,
  1144.                     'url'               => "https://meet.jit.si/iglesiavirtual123435444".$item->getAppointmentId()                
  1145.                    ];
  1146.                }
  1147.                         
  1148.             return new JsonResponse(array('status' => 'success''data' => $array));  
  1149.            
  1150.        }
  1151.            
  1152.        return new JsonResponse(array('status' => 'error'));           
  1153.   
  1154.     }    
  1155.     /**
  1156.      * @Route("/change_password", name="ws_change_password", methods={"GET", "POST", "OPTIONS"})
  1157.      */
  1158.     public function changePasswordAction(Request $requestEntityManagerInterface $entityManagerHelperService $helperService): Response {
  1159.         $data json_decode(file_get_contents("php://input"));
  1160.         if($data)
  1161.         {
  1162.             
  1163.             $user    $data->token;
  1164.             $new     $data->new;
  1165.             $em $this->getDoctrine()->getManager();
  1166.             $userObj $entityManager->getRepository(\App\Entity\User::class)->findOneBy([
  1167.                 'id' => $user->id
  1168.             ]);
  1169.             
  1170.             if($userObj//&& $this->passwordEncoder->isPasswordValid($userObj, $current))
  1171.             {
  1172.                 $new $this->passwordEncoder->encodePassword($userObj$new);
  1173.                 $userObj->setPassword($new);
  1174.                 $entityManager->persist($userObj);
  1175.                 $entityManager->flush();
  1176.                 if($userObj->getEmail())
  1177.                 {
  1178.                     $organizationName $userObj->getOrganization()->getName();                                          
  1179.                    
  1180.                     $message "<h1>Tu password ha cambiado</h1><p>Tu password ha sido cambiado correctamente. Si esta acción no fue realizada por tí, ponte en contacto con soporte ténico para reportar el incidente.</p>";
  1181.                                 
  1182.                     $mailTo  $userObj->getEmail();
  1183.                     $subject "Cambio de Password";
  1184.                     
  1185.                     $paths $helperService->getPaths();
  1186.                     $logo  $paths['uploads_path'].$userObj->getOrganization()->getLogoPath();
  1187.                     
  1188.                     if($helperService->sendEmail($mailTo$subject$messagefalse$organizationName$logo))
  1189.                     {
  1190.                         return new JsonResponse(array('status' => 'success''msg' => ''));                      
  1191.                     } else {
  1192.                         return new JsonResponse(array('status' => 'error''msg' => 'No se pudo enviar el email de recuperación. Contacte con soporte técnico.'));                                          
  1193.                     }                    
  1194.                 } else {
  1195.                     return new JsonResponse(array('status' => 'error'));
  1196.                 }
  1197.                 
  1198.             } else {
  1199.                 return new JsonResponse(array('status' => 'invalid'));
  1200.             }
  1201.         }
  1202.         return new JsonResponse(array('status' => 'error'));
  1203.     }   
  1204.     
  1205.     
  1206.     /**
  1207.      * @Route("/get-conference-status", name="/ws_get_conference_status")
  1208.      */
  1209.     public function getConferenceStatusAction(AppointmentRepository $appointmentRepositoryRequest $requestEntityManagerInterface $entityManager): Response
  1210.     {
  1211.        
  1212.        $list = array();
  1213.        $status 0;
  1214.        $rating 0;
  1215.        $data json_decode(file_get_contents("php://input"));
  1216.        if($data)
  1217.        {
  1218.             $aid $data->aid;
  1219.             $uid $data->uid;
  1220.                         
  1221.             $appointment $appointmentRepository->findOneBy(['appointmentId' => $aid]);            
  1222.             if($appointment)
  1223.             {
  1224.                 $userRating 0;
  1225.                 $status $appointment->getAppointmentStatus()->getAppointmentStatusId();                    
  1226.             }
  1227.         }
  1228.         
  1229.         $url "https://meet.jit.si";
  1230.                 
  1231.         return new JsonResponse(array('aid_status' => $status'rating' => 0'url' => $url));
  1232.         
  1233.     }    
  1234.     
  1235.     
  1236.     
  1237.     /**
  1238.      * @Route("/get-events-list", name="ws_get_events_list", methods={"GET", "POST"})
  1239.      */
  1240.     public function getEventsList(EventListRepository $eventListRepositoryRequest $requestEntityManagerInterface $entityManagerHelperService $helperService): Response
  1241.     {
  1242.        
  1243.                
  1244.            $paths $helperService->getPaths();               
  1245.            $organizationId $request->get("oid");
  1246.         $limit          $request->get("limit");           
  1247.         
  1248.         $monthN = array(1=>"Enero","Febrero","Marzo","Abril","Mayo","Junio","Julio","Agosto","Septiembre","Octubre","Noviembre","Diciembre");
  1249.         
  1250.            $array = [];                 
  1251.            $list $eventListRepository->findBy(["is_active" => 1"is_publish" => 1'Organization' => $organizationId], ["created_at" => "ASC"], $limit);
  1252.            foreach($list as $item)
  1253.            {
  1254.                
  1255.                if($item->getScheduledAt() >= date("Y-m-d H:i:s"))
  1256.                {
  1257.                    
  1258.                    $scheduled = new \DateTime($item->getScheduledAt());
  1259.                    $final_scheduled $this->spanish_date($scheduled->format('D M j, H:i'));
  1260.                    
  1261.                    $explodeScheduled explode("-",$item->getScheduledAt());
  1262.                    $month            str_replace("0","",$explodeScheduled[1]);
  1263.                 $monthNumber      $monthN[$month];                               
  1264.                 
  1265.                 $bkg_img "";
  1266.                 if($item->getBkgImage())
  1267.                 {
  1268.                     $bkg_img $paths['uploads_path']."/".$item->getBkgImage();
  1269.                 }                
  1270.                 
  1271.                    $array[] = [
  1272.                     'event_list_id' => $item->getEventListId(),
  1273.                     'title'         => $item->getName(),
  1274.                     'description'   => $item->getDescription(),
  1275.                     'bkg_image'     => $bkg_img,
  1276.                     'created_at'    => $item->getCreatedAt()->format("Y-m-d"),
  1277.                     'scheduled_at'  => $final_scheduled,   
  1278.                     'month_name'    => substr($monthNumber,0,3),
  1279.                     'month_full'    => $monthNumber,       
  1280.                     'created_by'    => $item->getCreatedBy()->getFirstName()." ".$item->getCreatedBy()->getLastName()
  1281.                    ];
  1282.                }
  1283.            }
  1284.                     
  1285.         return new JsonResponse(array('status' => 'success''data' => $array));  
  1286.                  
  1287.     }        
  1288.     
  1289.     
  1290.     /**
  1291.      * @Route("/get-blog-list", name="/ws_get_blog_list")
  1292.      */
  1293.     public function getBlogListAction(BlogRepository $blogRepositoryRequest $requestEntityManagerInterface $entityManagerHelperService $helperService): Response
  1294.     {
  1295.        
  1296.        $list = [];
  1297.        //$data = json_decode(file_get_contents("php://input"));
  1298.        if(true)//$data)
  1299.        {
  1300.            
  1301.             $organizationId $request->get("oid");
  1302.             $limit          $request->get("limit");
  1303.             $id             $request->get("bid"0);    
  1304.             $cid            $request->get("cid"0);                        
  1305.             $next           = ["title"=>"","bid"=>0];
  1306.             $previous       = ["title"=>"","bid"=>0];
  1307.             
  1308.             if($id <> 0)
  1309.             {                                
  1310.                 
  1311.                 $nextObjects     $blogRepository->findBlogCompanion($id'next'$organizationId);
  1312.                 $previousObjects $blogRepository->findBlogCompanion($id'previous'$organizationId);                                
  1313.                 
  1314.                 if($nextObjects)
  1315.                 {
  1316.                     $next     = ["title" => $nextObjects['name'], "bid" => $nextObjects['blog_id']];
  1317.                 }
  1318.                 
  1319.                 if($previousObjects)
  1320.                 {
  1321.                     $previous = ["title" => $previousObjects['name'], "bid" => $previousObjects['blog_id']];
  1322.                 }
  1323.                 
  1324.                 $blogs $blogRepository->findBy(['is_active' => 1'is_publish' => 1'Organization' => $organizationId'blogId' => $id]);            
  1325.                 
  1326.             } else {
  1327.                 
  1328.                 if($cid 0)
  1329.                 {
  1330.                     $blogs $blogRepository->findBy([
  1331.                         'is_active' => 1
  1332.                         'is_publish' => 1
  1333.                         'BlogCategory' => $cid,
  1334.                         'Organization' => $organizationId], 
  1335.                     ['created_at' => 'DESC'], $limit);                                
  1336.                 } else {
  1337.                     $blogs $blogRepository->findBy([
  1338.                         'is_active' => 1
  1339.                         'is_publish' => 1
  1340.                         'Organization' => $organizationId], 
  1341.                     ['created_at' => 'DESC'], $limit);            
  1342.                     
  1343.                 }
  1344.                 
  1345.             }
  1346.                 
  1347.             if($blogs)
  1348.             {
  1349.                 
  1350.                 $paths $helperService->getPaths();
  1351.                 foreach($blogs as $blog)
  1352.                 {
  1353.                     
  1354.                     $creation = new \DateTime($blog->getCreatedAt()->format("Y-m-d H:i:s"));
  1355.                     $final_creation $this->spanish_date($creation->format('D M j, H:i'));
  1356.                     $bkg $paths['uploads_path'].$blog->getOrganization()->getOrganizationId()."/".$blog->getBkgImage();
  1357.                 
  1358.                     $list[] = [
  1359.                         'blog_id'       => $blog->getBlogId(),
  1360.                         'name'           => $blog->getName(),
  1361.                         'short_content' => $blog->getShortContent(),
  1362.                         'category_id'   => $blog->getBlogCategory()->getBlogCategoryId(),
  1363.                         'large_content' => $blog->getLargeContent(),
  1364.                         'category'      => $blog->getBlogCategory()->getName(),
  1365.                         'bkg_image'     => $bkg,                        
  1366.                         'creator_name'  => $blog->getCreatedBy()->getFirstName()." ".$blog->getCreatedBy()->getLastName(),
  1367.                         'created_at'    => $final_creation
  1368.                     ];
  1369.                     
  1370.                 }
  1371.                 
  1372.             }
  1373.             
  1374.         }
  1375.                         
  1376.         return new JsonResponse(array('status' => "success"'data' => $list'next' => $next'previous' => $previous));
  1377.         
  1378.     } 
  1379.     
  1380.     
  1381.     /**
  1382.      * @Route("/get-blog-categories", name="/ws_get_blog_categories")
  1383.      */
  1384.     public function getBlogCategoriesAction(BlogCategoryRepository $blogCategoryRepository,BlogRepository $blogRepositoryRequest $requestEntityManagerInterface $entityManagerHelperService $helperService): Response
  1385.     {
  1386.         
  1387.        $list = []; 
  1388.        $organizationId $request->get("oid");            
  1389.        $total 0;
  1390.        
  1391.        if($organizationId)
  1392.        {        
  1393.            
  1394.            $blogs $blogCategoryRepository->findBy(['is_active' => 1'Organization' => $organizationId], ['name' => 'ASC']);                                                  
  1395.             if($blogs)
  1396.             {
  1397.                 
  1398.                 foreach($blogs as $blog)
  1399.                 {
  1400.                     
  1401.                     $results $blogRepository->findBy(['BlogCategory' => $blog->getBlogCategoryId(), 'is_active' => 1]);
  1402.                     if($results)
  1403.                     {
  1404.                         $count count($results);
  1405.                         $list[] = [
  1406.                             'blog_category_id' => $blog->getBlogCategoryId(),
  1407.                             'name'              => $blog->getName(),
  1408.                             'description'       => $blog->getDescription(),
  1409.                             'count'            => $count
  1410.                         ];
  1411.                         
  1412.                         $total $total+$count;
  1413.                     }                    
  1414.                 }                
  1415.             }            
  1416.         }
  1417.                         
  1418.         return new JsonResponse(array('status' => "success"'data' => $list'total_blogs' => $total));
  1419.         
  1420.     }        
  1421.         
  1422.     
  1423.     
  1424.    /**
  1425.      * @Route("/pass-recovery", name="ws_pass_recovery")
  1426.      */
  1427.     public function recoverPassword(Request $requestHelperService $helperServiceUserRepository $userRepositoryEntityManagerInterface $entityManager): Response
  1428.     {
  1429.         $data json_decode(file_get_contents("php://input"));
  1430.         if($data)
  1431.         {
  1432.             
  1433.             $email $data->email;
  1434.             $organizacionId $data->organization_id;
  1435.             
  1436.                $userCheck $userRepository->findOneBy(['email' => $email'status' => 'ACTIVO''Organization' => $organizacionId]);
  1437.                if($userCheck)
  1438.                {                   
  1439.                    
  1440.                    $plainpwd substr(md5(microtime()),rand(0,26),8)."*";
  1441.                 $encoded  $this->passwordEncoder->encodePassword($userCheck$plainpwd);
  1442.                 $userCheck->setPassword($encoded);     
  1443.                 $entityManager->persist($userCheck);
  1444.                 $entityManager->flush();                
  1445.                 
  1446.                 $organizationName $userCheck->getOrganization()->getName();                                          
  1447.                    
  1448.                 $message "<p>Ha solicitado recuperar la contraseña para su cuenta en la Plataforma de $organizationName. Puede utilizar el siguiente password para iniciar sesión.</p>";
  1449.                 $message .= "<p><b>Contraseña temporal:</b> $plainpwd</p>";            
  1450.                 $message .= "<p>Una vez dentro de su cuenta, no olvide cambiar su contraseña.</p>";
  1451.                             
  1452.                 $mailTo  $data->email;
  1453.                 $subject "Recuperación de contraseña";
  1454.                 
  1455.                 $paths $helperService->getPaths();
  1456.                 $logo  $paths['uploads_path'].$userCheck->getOrganization()->getLogoPath();
  1457.                 
  1458.                 if($helperService->sendEmail($mailTo$subject$messagefalse$organizationName$logo))
  1459.                 {
  1460.                     return new JsonResponse(array('status' => 'success''msg' => ''));                      
  1461.                 } else {
  1462.                     return new JsonResponse(array('status' => 'error''msg' => 'No se pudo enviar el email de recuperación. Contacte con soporte técnico.'));                                          
  1463.                 }
  1464.                     
  1465.             } else {
  1466.                 return new JsonResponse(array('status' => 'error''msg' => 'El email no se encuentra registrado.'));                    
  1467.                 
  1468.             }
  1469.         }
  1470.         
  1471.         return new JsonResponse(array('status' => 'invalid''msg' => ''));                                                          
  1472.     }    
  1473.     /**
  1474.      * @Route("/voice_trainer_list", name="/ws_voice-trainer-list", methods={"GET", "POST"})
  1475.      */
  1476.     public function getVoiceTrainerList(Request $requestEntityManagerInterface $entityManagerHelperService $helperService): Response
  1477.     {
  1478.         
  1479.        $list = []; 
  1480.        $data json_decode(file_get_contents("php://input"));
  1481.         
  1482.        if($data)
  1483.        {        
  1484.            $type $data->type;
  1485.            $objs $entityManager->getRepository(VoiceExercise::class)->findBy(['is_active' => 1,'exercise_type' => $type]);                                                  
  1486.             if($objs)
  1487.             {
  1488.                 
  1489.                 foreach($objs as $obj)
  1490.                 {
  1491.                     $paths     $helperService->getPaths();    
  1492.                     $voicePath $paths['uploads_path']."voice/";
  1493.                     $list[] = [
  1494.                         'voice_exercise_id' => $obj->getVoiceExerciseId(),
  1495.                         'name'               => $obj->getName(),
  1496.                         'image'             => $voicePath.$obj->getImagePath(),
  1497.                         'description'        => $obj->getDescription(),
  1498.                         'file_path'         => $voicePath.$obj->getFilePath(),
  1499.                         'task_id'            => '',
  1500.                         'task_detail_id'    => ''
  1501.                     ];                                                
  1502.                                     
  1503.                 }                
  1504.             }            
  1505.         }
  1506.                         
  1507.         return new JsonResponse(array('status' => "success"'data' => $list));
  1508.         
  1509.     }        
  1510.             
  1511.      /**
  1512.      * @Route("/voice_trainer_save_record", name="ws_voice_trainer_save_record", methods={"GET", "POST"})
  1513.      */
  1514.     public function voiceTrainerSaveRecord(UserRepository $userRepositoryRequest $requestEntityManagerInterface $entityManagerUserRoleRepository $userRoleRepository,OrganizationRepository $organizationRepositoryHelperService $helperService): Response
  1515.     {
  1516.        
  1517.        $data json_decode(file_get_contents("php://input"));
  1518.         
  1519.        if($data)
  1520.        {
  1521.             $record     $data->record;
  1522.             $token      $data->token;
  1523.             $exerciseId $data->exercise->voice_exercise_id;
  1524.             $userId     $token->id;
  1525.             $paths     $helperService->getPaths();    
  1526.             $voicePath $paths['uploads_path']."voice/";
  1527.             $dir_path "uploads/voice/$userId/";
  1528.             if(!is_dir($dir_path))
  1529.             {
  1530.                 mkdir($dir_path0777true);
  1531.             }    
  1532.             
  1533.             $hashName  date("YmdHis").rand(1,10);
  1534.             $fileName $hashName."_voice_only.acc";            
  1535.             $accFile  $dir_path.$fileName;
  1536.             file_put_contents($accFilebase64_decode($record));
  1537.             $exerciseObj $entityManager->getRepository(VoiceExercise::class)->findOneBy(['voiceExerciseId' => $exerciseId]);
  1538.             $uri $paths['uri'];
  1539.             // Rutas de los archivos de entrada            
  1540.             $mp3File $uri.'uploads/voice/'.$exerciseObj->getFilePath();
  1541.             // Ruta del archivo de salida combinado
  1542.             $outputFile $uri.'uploads/voice/'.$userId."/".$hashName."_merged.mp3";
  1543.             // Convertir el archivo ACC a MP3
  1544.             $wavFile $uri."uploads/voice/".$userId."/".$hashName.'_temp.wav';
  1545.                         
  1546.             // Ruta del archivo de salida combinado
  1547.             $outputFile $uri."uploads/voice/".$userId."/".$hashName."_combinado.mp3";
  1548.             
  1549.             $fullAccFile $uri.$accFile;
  1550.             // Convertir el archivo ACC a MP3
  1551.             $convertedAccFile $uri."uploads/voice/".$userId."/".$hashName."_convertido.mp3";
  1552.             $shell1 "ffmpeg -i $fullAccFile $convertedAccFile";
  1553.             exec($shell1);
  1554.             
  1555.             // Combinar los archivos MP3
  1556.             $shell2 "ffmpeg -i 'concat:$mp3File|$convertedAccFile' -c copy $outputFile";
  1557.             exec($shell2);
  1558.             
  1559.             // Eliminar el archivo convertido ACC a MP3
  1560.             //unlink($convertedAccFile);
  1561.             $extra = [
  1562.                 'shell1' => $shell1,
  1563.                 'shell2' => $shell2
  1564.             ];
  1565.             
  1566.                         
  1567.             return new JsonResponse(array('status' => 'success','data' => $extra));    
  1568.            
  1569.         }
  1570.            
  1571.         return new JsonResponse(array('status' => 'error'));           
  1572.   
  1573.     }
  1574.     
  1575.     
  1576.     function search_age($birthdate)
  1577.     {
  1578.         
  1579.         $day   date("d");
  1580.         $month date("m");
  1581.         $year  date("Y");
  1582.         $daynaz   date("d",strtotime($birthdate));
  1583.         $monthnaz date("m",strtotime($birthdate));
  1584.         $yearnaz  date("Y",strtotime($birthdate));
  1585.         //si el mes es el mismo pero el día inferior aun no ha cumplido años, le quitaremos un año al actual
  1586.         if (($monthnaz == $month) && ($daynaz $day)) {
  1587.         $year=($year-1); }
  1588.         //si el mes es superior al actual tampoco habrá cumplido años, por eso le quitamos un año al actual
  1589.         if ($monthnaz $month) {
  1590.         $year=($year-1);}
  1591.         //ya no habría mas condiciones, ahora simplemente restamos los años y mostramos el resultado como su edad
  1592.         $age=($year-$yearnaz);
  1593.         return $age;
  1594.     }
  1595.     
  1596.     
  1597.     public function spanish_date($date)
  1598.     {
  1599.        $arr explode(" "$date);
  1600.        $day      $arr[0];
  1601.        $month    $arr[1];  
  1602.        $num      $arr[2];              
  1603.        $hour     $arr[3];                     
  1604.        $day_name $day;
  1605.        $mon_name $month;       
  1606.        
  1607.        switch($day)
  1608.        {
  1609.            case "Mon":
  1610.                 $day_name "Lun";
  1611.            break;
  1612.            case "Tue":
  1613.                 $day_name "Mar";
  1614.            break;           
  1615.            case "Wed":
  1616.                 $day_name "Mie";
  1617.            break;           
  1618.            case "Thu":
  1619.                 $day_name "Jue";
  1620.            break;                  
  1621.            case "Fri":
  1622.                 $day_name "Vie";
  1623.            break;               
  1624.            case "Sat":
  1625.                 $day_name "Sab";
  1626.            break;                
  1627.            case "Sun":
  1628.                 $day_name "Dom";
  1629.            break;                                       
  1630.        }
  1631.        
  1632.        switch($mon_name)
  1633.        {
  1634.            case "Jan":
  1635.                 $mon_name "Ene";
  1636.            break;
  1637.            case "Feb":
  1638.                 $mon_name "Feb";
  1639.            break;           
  1640.            case "Mar":
  1641.                 $mon_name "Mar";
  1642.            break;           
  1643.            case "Apr":
  1644.                 $mon_name "Abr";
  1645.            break;                  
  1646.            case "May":
  1647.                 $mon_name "May";
  1648.            break;               
  1649.            case "Jun":
  1650.                 $mon_name "Jun";
  1651.            break;                
  1652.            case "Jul":
  1653.                 $mon_name "Jul";
  1654.            break;                                       
  1655.            case "Aug":
  1656.                 $mon_name "Ago";
  1657.            break;           
  1658.            case "Sep":
  1659.                 $mon_name "Sep";
  1660.            break;                
  1661.            case "Oct":
  1662.                 $mon_name "Oct";
  1663.            break;               
  1664.            case "Nov":
  1665.                 $mon_name "Nov";
  1666.            break;               
  1667.            case "Dec":
  1668.                 $mon_name "Dic";
  1669.            break;                                          
  1670.        }       
  1671.        
  1672.        
  1673.        return $day_name." ".$mon_name." ".$num." ".$hour;
  1674.        
  1675.     }
  1676. }