src/Controller/MasseurListController.php line 74

Open in your IDE?
  1. <?php
  2. /**
  3.  * Created by simpson <simpsonwork@gmail.com>
  4.  * Date: 2019-03-22
  5.  * Time: 15:26
  6.  */
  7. namespace App\Controller;
  8. use App\Entity\Location\City;
  9. use App\Entity\Profile\Genders;
  10. use App\Repository\ProfileRepository;
  11. use App\Repository\ServiceRepository;
  12. use App\Service\Features;
  13. use App\Service\ProfileList;
  14. use App\Service\ResponsiveAssetsService;
  15. use Flagception\Bundle\FlagceptionBundle\Annotations\Feature;
  16. use Happyr\DoctrineSpecification\Logic\OrX;
  17. use Porpaginas\Doctrine\ORM\ORMQueryResult;
  18. use Porpaginas\Page;
  19. use Sensio\Bundle\FrameworkExtraBundle\Configuration\Cache;
  20. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  21. use Symfony\Component\HttpFoundation\Request;
  22. use Sensio\Bundle\FrameworkExtraBundle\Configuration\ParamConverter;
  23. use Symfony\Component\HttpFoundation\RequestStack;
  24. use Symfony\Component\HttpFoundation\Response;
  25. #[Cache(maxage60, public: true)]
  26. class MasseurListController extends AbstractController
  27. {
  28.     use ExtendedPaginationTrait;
  29.     use SpecTrait;
  30.     const ENTRIES_ON_PAGE 36;
  31.     const RESULT_SOURCE_MASSEURS 'masseurs';
  32.     const RESULT_SOURCE_MASSAGE_SERVICE 'massage_service';
  33.     const RESULT_SOURCE_CITY 'city';
  34.     const RESULT_SOURCE_COUNTRY 'country';
  35.     private ?string $source null;
  36.     public function __construct(
  37.         private ProfileRepository $profileRepository,
  38.         private ProfileList $profileList,
  39.         private Features $features,
  40.         private ResponsiveAssetsService $responsiveAssetsService,
  41.         private RequestStack $requestStack
  42.     ) {}
  43.     /**
  44.      * @Feature("has_masseurs")
  45.      */
  46.     #[ParamConverter("city"converter"city_converter")]
  47.     public function page(Request $requestCity $cityServiceRepository $serviceRepository): Response
  48.     {
  49. /*
  50.         $result = $this->profileList->listActiveWithinCityOrderedByStatusWithSpec($city, new ProfileIsMasseur());
  51.         $massageGroupServices = $serviceRepository->findBy(['group' => ServiceGroups::MASSAGE]);
  52.         $orX = $this->getORSpecForItemsArray([$massageGroupServices], function($item) {
  53.             return new ProfileIsProvidingOneOfServices($item);
  54.         });
  55.         $result = $this->checkEmptyResultNotMasseur($result, $city, $orX, self::RESULT_SOURCE_MASSAGE_SERVICE);
  56.         return $this->render('ProfileList/list.html.twig', [
  57.             'profiles' => $result,
  58.             'source' => $this->source,
  59.             'source_default' => self::RESULT_SOURCE_MASSEURS,
  60.             'recommendationSpec' => \App\Specification\ElasticSearch\ProfileIsLocated::withinCity($city),
  61.         ]);
  62. */
  63.         return $this->forward('App\Controller\ProfileListController::listForMasseur', ['city' => $city]);
  64.     }
  65.     protected function checkCityAndCountrySource(Page $resultCity $city): array|Page {
  66.         if(($result && $result->count() != 0) || false == $this->features->fill_empty_profile_list())
  67.             return $result;
  68.         $this->source self::RESULT_SOURCE_CITY;
  69.         $result $this->profileList->listRandom($citynullnullnulltruefalse, [Genders::FEMALE], true);
  70.         if($result->count() == 0) {
  71.             $this->source self::RESULT_SOURCE_COUNTRY;
  72.             $result $this->profileList->listRandom($city$city->getCountryCode(), nullnulltruefalse, [Genders::FEMALE], true);
  73.         }
  74.         return $result;
  75.     }
  76.     
  77.     protected function checkEmptyResultNotMasseur(Page $resultCity $cityOrX $alternativeSpecstring $source): array|Page {
  78.         if($result->count() != || false == $this->features->fill_empty_profile_list())
  79.             return $result;
  80.         $this->source $source;
  81.         $result $this->profileList->listRandom($citynull$alternativeSpecnulltruefalse, [Genders::FEMALE], true);
  82.         if($result->count() == 0)
  83.             $result $this->checkCityAndCountrySource($result$city);
  84.         return $result;
  85.     }
  86.     protected function render(string $view, array $parameters = [], Response $response null): Response
  87.     {
  88.         if($this->requestStack->getCurrentRequest()->isXmlHttpRequest()) {
  89.             $response parent::render('ProfileList/list.profiles.html.twig'$parameters$response);
  90.             $content preg_replace('/\s{2,}/'' '$response->getContent());
  91.             $response->setContent($content);
  92.             return $response;
  93.         } else {
  94.             return parent::render($view$parameters$response);
  95.         }
  96.     }
  97. }