src/Controller/RegionController.php line 48

Open in your IDE?
  1. <?php
  2. // src/Controller/LuckyController.php
  3. namespace App\Controller;
  4. use Symfony\Component\HttpFoundation\Response;
  5. use Symfony\Component\HttpFoundation\Request;
  6. use Symfony\Component\Routing\Annotation\Route;
  7. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  8. use Symfony\Contracts\Translation\TranslatorInterface;
  9. use Symfony\Component\Validator\Validator\ValidatorInterface;
  10. use Sensio\Bundle\FrameworkExtraBundle\Configuration\IsGranted;
  11. use Sensio\Bundle\FrameworkExtraBundle\Configuration\Method;
  12. use Symfony\Component\String\Slugger\SluggerInterface;
  13. use Symfony\Component\HttpKernel\KernelInterface;
  14. use Symfony\Contracts\HttpClient\HttpClientInterface;
  15. use FOS\RestBundle\Request\ParamFetcherInterface;
  16. use FOS\RestBundle\Controller\Annotations\QueryParam;
  17. use Doctrine\ORM\EntityManagerInterface;
  18. use PhpOffice\PhpSpreadsheet\Spreadsheet;
  19. use PhpOffice\PhpSpreadsheet\Writer\Xlsx;
  20. use App\Entity\Region;
  21. use App\Form\RegionType;
  22. class RegionController extends AbstractController
  23. {
  24.     protected $em;
  25.     
  26.     public function __construct(EntityManagerInterface $em){
  27.         $this->em $em;
  28.     }
  29.     /**
  30.     * @Route({
  31.      *     "en": "/regions/{regionDescription}",
  32.      *     "es": "/regiones/{regionDescription}",
  33.      *     "de": "/regionen/{regionDescription}",
  34.      *     "fr": "/regions_fr/{regionDescription}",
  35.      *     "it": "/regioni/{regionDescription}",
  36.      *     "pt": "/regioes/{regionDescription}",
  37.      *     "cn": "/regions_cn/{regionDescription}",
  38.      *     "cn2": "/regions_cn2/{regionDescription}",
  39.      * }, name="regions")
  40.      */           
  41.     public function regions(Request $requestParamFetcherInterface $paramFetcherstring $regionDescription)
  42.     {
  43.         
  44.         $repo $this->em->getRepository(Region::class);
  45.         $region $repo->findOneBy(['description' => $regionDescription]);
  46.         if(!$region || !$region->getIsEnabled())
  47.             throw $this->createNotFoundException('Region not found');
  48.         $regions $repo->findAllByAvailable(null$region->getId(), true$request->getLocale());
  49.         if(count($regions) == 1)
  50.             return $this->redirectToRoute('recharge_packs',['region_id' => $regions[0]->getId() ]);
  51.         return $this->render('jelly/regions/index.html.twig', [
  52.             'region' => $region,
  53.             'regions' => $regions,
  54.         ]);
  55.     }
  56.     /**
  57.     * @Route("/admin/regions", name="regions_list")
  58.      * @QueryParam(name="page", requirements="\d+", default=1, description="Page number.")
  59.      * @QueryParam(name="sort", requirements="e.iccid|u.amountGb|u.priceValue|u.reference|u.createdAt|u.transactedAt|us.lastName|u.customerSubscription|rp.amountGb|rp.priceValue", description="Sort.")
  60.      * @QueryParam(name="dir", requirements="asc|desc", default="asc", description="Sort direction.")         
  61.     * @IsGranted("ROLE_ADMIN")
  62.      */    
  63.     public function index(Request $requestParamFetcherInterface $paramFetcher)
  64.     {
  65.         // parameters
  66.         $page $paramFetcher->get('page');
  67.         $sort $paramFetcher->get('sort');
  68.         $dir $paramFetcher->get('dir');
  69.         // query
  70.         $results_per_page $this->getParameter('app.results_per_page');        
  71.         // filters
  72.         $currentFilters = [];
  73.         if($sort){
  74.             $currentFilters['sort'] = $sort;
  75.             $currentFilters['dir'] = $dir;          
  76.         } 
  77.         $repo $this->em->getRepository(Region::class);
  78.         $regions $repo->getList($sort$dir$page$results_per_page);
  79.         $totalPages ceil(count($regions) / $results_per_page);
  80.         
  81. //     * @IsGranted("ROLE_USER")
  82.         return $this->render('angle/regions/index.html.twig', [
  83.             'regions' => $regions,        
  84.             'page' => $page,
  85.             'totalPages' => $totalPages,
  86.             'totalResults' =>  count($regions),            
  87.             'currentFilters' => $currentFilters,
  88.             'results_per_page' => $results_per_page,
  89.         ]);
  90.     }    
  91.    /**
  92.      * @Route("/admin/region", name="regions_new", methods={"GET", "POST"})
  93.      * @Route("/admin/region/{regionId}", name="region_edit", methods={"GET", "POST"})
  94.      * @IsGranted("ROLE_ADMIN")
  95.     */    
  96.     public function detail(Request $requestParamFetcherInterface $paramFetcherSluggerInterface $sluggerKernelInterface $appKernelHttpClientInterface $httpClient$regionId null)
  97.     {
  98.         $repository $this->getDoctrine()->getRepository(Region::class);
  99.         if($regionId){
  100.             $region $repository->find($regionId);
  101.             $region->setTranslatableLocale($request->getSession()->get('locale'));
  102.             $this->em->refresh($region);
  103.         } else $region = new Region;
  104.         $repository $this->getDoctrine()->getRepository(Region::class);
  105.         $form $this->createForm(RegionType::class, $region);
  106.         $form->handleRequest($request);
  107.         if ($form->isSubmitted() && $form->isValid()) {
  108.             $region $form->getData();
  109.             $this->setOrder($region);
  110.             if(!$regionId){
  111.                 $slugIndex 0;
  112.                 do {
  113.                     $slug strtolower($slugger->slug($region->getDescriptionEs())) . ($slugIndex "-{$slugIndex}"");
  114.                     $existingRegion $repository->findOneBy(['description' => $slug]);
  115.                     $slugIndex++;
  116.                 } while ($existingRegion != null);
  117.                 $region->setDescription($slug);
  118.             } else {
  119.                 $slug strtolower($slugger->slug($region->getDescriptionEs()));
  120.             }
  121.             $image $form->get('image')->getData();
  122.             if ($image) {
  123.                 $imagePath $appKernel->getProjectDir() . "/public/imgs/regions/icons/{$slug}.jpg";
  124.                 \imagejpeg(\imagecreatefromstring(\file_get_contents($image->getRealPath())), $imagePath );
  125.             }
  126.             $imageBanner $form->get('imageBanner')->getData();
  127.             if ($imageBanner) {
  128.                 $imagePath $appKernel->getProjectDir() . "/public/imgs/regions/banners/{$slug}.jpg";
  129.                 \imagejpeg(\imagecreatefromstring(\file_get_contents($imageBanner->getRealPath())), $imagePath );
  130.             }
  131.             $em $this->getDoctrine()->getManager();
  132.             $region->setTranslatableLocale($request->getSession()->get('locale')); // change locale
  133.             $em->persist($region);
  134.             $em->flush();
  135.             $redirectToIndex true;
  136.             // foreach ($region->getRechargePacks() as &$rechargePack) {
  137.             //     if($rechargePack->getTugeDataPlan() !== null)
  138.             //         continue;
  139.             //     $clientResponse = $httpClient->request(
  140.             //                 'POST',
  141.             //                 "https://ws.telna.com/ds/u/distributorPPUService/v1/{$this->getParameter('telna_distributor_id')}/inventory/48096/packageType"
  142.             //                 , [ "headers" => ["RequestId" => time(), "Content-type" => "application/json"], "json" => 
  143.             //                     [
  144.             //                         'activationTimeAllowanceInSeconds' => 3600
  145.             //                         , 'activationType' => 'LU'
  146.             //                         , 'dataUsageAllowanceInBytes' => (int) round($rechargePack->getAmountGb() * 1024 * 1024 * 1024)
  147.             //                         , 'dataUsageAllowanceType' => 'LIMITED'
  148.             //                         , 'dateEarliestActivation' => (new \Datetime)->getTimestamp() * 1000
  149.             //                         , 'dateEarliestAvailable' => (new \Datetime)->getTimestamp() * 1000
  150.             //                         , 'dateLatestAvailable' => (new \Datetime)->modify('+10 year')->getTimestamp() * 1000
  151.             //                         , 'name' => "beconnected_REGION_{$rechargePack->getRegion()->getId()}_{$rechargePack->getAmountGb()}_GB_{$rechargePack->getLengthInDays()}_DAYS"
  152.             //                         , 'smsUsageAllowanceInNums' => 0
  153.             //                         , 'smsUsageAllowanceType' => 'LIMITED'
  154.             //                         , 'supportedCountries' => array_values(array_map(function(&$country){ return $country->getCountryCode(); }, $rechargePack->getRegion()->getCountries()->toArray() ))
  155.             //                         , 'timeAllowanceInSeconds' => $rechargePack->getLengthInDays() * 86400
  156.             //                         , 'voiceUsageAllowanceInSeconds' => 0
  157.             //                         , 'voiceUsageAllowanceType' => 'LIMITED'
  158.             //                     ] 
  159.             //                   ]
  160.             //             );
  161.         
  162.             //     $content = $clientResponse->toArray();
  163.             //     if(is_array($content) && array_key_exists("packageTypeId", $content)) {
  164.             //         $rechargePack->setPackageTypeId($content["packageTypeId"]);                    
  165.                     
  166.             //         $em = $this->getDoctrine()->getManager();
  167.             //         $em->persist($rechargePack);
  168.             //         $em->flush();
  169.             //     } else {
  170.             //         $redirectToIndex = false;
  171.             //         $form->addError(new FormError("Se produjo un error al crear el paquete en Cronus: {$e->getMessage()}"));                
  172.             //     }
  173.                 
  174.             // }
  175.             if($redirectToIndex) return $this->redirectToRoute('regions_list');
  176.         }
  177.         return $this->render('angle/regions/detail.html.twig', [
  178.             'form' => $form->createView(),
  179.             'region' => $region,
  180.         ]);
  181.     }       
  182.     /**
  183.      * @Route(
  184.      *     "/services/rearrange_regions.{_format}", 
  185.      *     name="regions_rearrange",
  186.      *     defaults={
  187.      *         "_format": "json",
  188.      *     }
  189.      * )
  190.      //* @Method({"POST"})     
  191.      * @IsGranted("ROLE_ADMIN")     
  192.      */
  193.     public function rearrangeAction(Request $request)
  194.     {
  195.         $id $request->request->get('id');
  196.         $order $request->request->get('order');
  197.         $repository $this->getDoctrine()->getRepository(Region::class);
  198.         
  199.         $repository->updateOrder($id$order);
  200.         return ['ok' => true];
  201.         
  202.     }     
  203.     
  204.      /**
  205.      * @IsGranted("ROLE_ADMIN")     
  206.      * @Route(
  207.      *    "/services/region.{_format}", 
  208.      *     name="regions_enable",
  209.      *     requirements={
  210.      *         "_format": "json"
  211.      *     },
  212.      *     methods={"POST"}
  213.      * )
  214.      */
  215.     public function enable(Request $request)
  216.     {        
  217.      
  218.         $repository $this->getDoctrine()->getRepository(Region::class);
  219.         $id $request->query->get('id');
  220.         $enable $request->query->get('enable') == "true";
  221.         
  222.         if($id){
  223.             $entity $repository->findOneById($id);
  224.             
  225.             $em $this->getDoctrine()->getManager();
  226.             $entity->setIsEnabled($enable);
  227.             $em->flush();
  228.         }
  229.         return ['ok' => true];
  230.     }    
  231.     private function setOrderRegion $region ){
  232.         if ( ! $region->getSortOrder() ) {
  233.             $repo $this->getDoctrine()->getRepository(Region::class);      
  234.             $region->setSortOrder$repo->findLastOrder() + );
  235.         }
  236.         return $region;
  237.     }    
  238. }