src/Controller/BusinessController.php line 37

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use App\Service\BusinessService;
  4. use App\Model\DataObject\Address;
  5. use App\Model\DataObject\Business;
  6. use App\Model\DataObject\User;
  7. use Carbon\Carbon;
  8. use Exception;
  9. use Pimcore\Controller\FrontendController;
  10. use Pimcore\Mail;
  11. use Pimcore\Model\Asset\Folder as AssetFolder;
  12. use Pimcore\Model\Asset\Image;
  13. use Pimcore\Model\DataObject\Business as DataObjectBusiness;
  14. use Pimcore\Model\DataObject\Folder;
  15. use Pimcore\Model\DataObject\Visite;
  16. use Pimcore\Model\Exception\NotFoundException;
  17. use Symfony\Component\HttpFoundation\Request;
  18. use Sensio\Bundle\FrameworkExtraBundle\Configuration\Template;
  19. use Symfony\Component\Routing\Annotation\Route;
  20. use Symfony\Component\HttpFoundation\JsonResponse;
  21. use Symfony\Component\Security\Core\Security as FrontSecurity;
  22. use Pimcore\File;
  23. class BusinessController extends FrontendController
  24. {
  25.     /**
  26.      * @Template
  27.      * @Route(
  28.      *      "/{_locale}/business/{slug}",
  29.      *      name="business_detail",
  30.      *      methods={"GET"}
  31.      * )
  32.      * @return array
  33.      */
  34.     public function detailAction(Request $request, FrontSecurity $security)
  35.     {
  36.         $securityUser = $security->getUser();
  37.         $user=null;
  38.         if($securityUser){
  39.             $user = User::getByUsername($securityUser->getUserIdentifier())->load()[0];
  40.         }
  41.         $check = Business::getBySlug($request->get('slug'))->load();
  42.         if(!$check) {
  43.             throw new NotFoundException("Business not found");
  44.         }
  45.         $business = $check[0];
  46.         $link = $business->getWebsite();
  47.         $scheme = parse_url($link, PHP_URL_SCHEME);
  48.         if (empty($scheme)){
  49.             $link = 'http://' . ltrim($link, '/');
  50.         }
  51.         $business->setWebsite($link);
  52.         $business->save();
  53.         if($business->getPremium()) {
  54.             $visFolder = \Pimcore\Model\DataObject\Folder::getByPath($business->getPath().$business->getKey().'/visites');
  55.             if (!$visFolder) {
  56.                 $visFolder = new \Pimcore\Model\DataObject\Folder();
  57.                 $visFolder->setKey('visites');
  58.                 $visFolder->setParent($business);
  59.                 $visFolder->save();
  60.             }
  61.             $visite = new Visite();
  62.             $visite->setKey(uniqid());
  63.             $visite->setParent($visFolder);
  64.             $visite->setPublished(true);
  65.             $visite->setUser($user);
  66.             $visite->setDateVisite(Carbon::now());
  67.             $visite->save();
  68.             $visites = $business->getVisites();
  69.             $visites[] = $visite;
  70.             $business->setVisites($visites);
  71.             $business->save();
  72.         }
  73.         if ($user) {
  74.             return ["business" =>$business, "bookmarked" => in_array($business, $user->getFavorites()), "seoBusiness" => true];
  75.         }else {
  76.             return ["business" =>$business, "bookmarked" => null, "seoBusiness" => true];
  77.         }
  78.     }
  79.     /**
  80.      *
  81.      * @Route(
  82.      *      "/businesses/refresh"
  83.      * )
  84.      * @return json
  85.      */
  86.     public function refreshSlug(){
  87.         $businesses = new DataObjectBusiness\Listing();
  88.         $businesses->load();
  89.         foreach($businesses as $bus ){
  90.             $bus->setName($bus->getName('en'), 'de');
  91.             $bus->save();
  92.         }
  93.         return $this->json('OK');
  94.     }
  95.     /**
  96.      *
  97.      * @Route(
  98.      *      "/api/{_locale}/unsub"
  99.      * )
  100.      * @return json
  101.      */
  102.     public function unsubAction(Request $request){
  103.         $locale = $request->getLocale();
  104.         $to = $request->get("email");
  105.         $email = new Mail();
  106.         $email->setDocument("/".$locale."/emails/map-unsubscribe");
  107.         $email->to($to);
  108.         $email->send();
  109.         return $this->json('OK');
  110.     }
  111.     /**
  112.      *
  113.      * @Route(
  114.      *      "/{_locale}/businesses/all"
  115.      * )
  116.      * @return json
  117.      */
  118.     public function listAll(Request $request, FrontSecurity $security) {
  119.         $securityUser = $security->getUser();
  120.         $user=null;
  121.         if($securityUser){
  122.             $user = User::getByUsername($securityUser->getUserIdentifier())->load()[0];
  123.         }
  124.         $json = file_get_contents('var/assets/business_'.$request->getLocale().'.json');
  125.         $businessesArray = \Safe\json_decode($json);
  126.         return new JsonResponse($businessesArray);
  127.     }
  128.     /**
  129.      * @Template
  130.      * @route("/{_locale}/pro/new",name="newBusiness",methods={"GET", "POST"})
  131.      * @return array
  132.      */
  133.     public function newBusinessAction(Request $request, FrontSecurity $security)
  134.     {
  135.         $securityUser = $security->getUser();
  136.         if (!$securityUser) {
  137.             return $this->redirect($this->generateUrl("login"));
  138.         }
  139.         $user = User::getByUsername($securityUser->getUserIdentifier())->load()[0];
  140.         $panier = count($user->getPanier());
  141.         if($panier == 50){
  142.             return $this->redirect($this->generateUrl("login"));
  143.         }
  144.         if($request->isMethod('POST')){
  145.             $datas = $request->get('business');
  146.             //TODO check required field
  147.             $folder = Folder::getByPath('/businesses');
  148.             if(!$folder){
  149.                 $folder = new Folder();
  150.                 $folder->setKey('businesses');
  151.                 $folder->setParentId(1);
  152.                 $folder->save();
  153.             }
  154.             foreach($datas as $key => $data){
  155.                 $province = BusinessService::getProvince($data['zip']);
  156.                 $folderProv = Folder::getByPath('/businesses/'.$province);
  157.                 if(!$folderProv){
  158.                     $folderProv = new Folder();
  159.                     $folderProv->setKey($province);
  160.                     $folderProv->setParent(Folder::getByPath('/businesses'));
  161.                     $folderProv->save();
  162.                 }
  163.                 $business = new Business();
  164.                 $business->setParent($folderProv);
  165.                 $business->setKey(\Pimcore\Model\Element\Service::getValidKey($data['name'], 'object').'-'.uniqid());
  166.                 $business->setPublished(true);
  167.                 $languages = \Pimcore\Tool::getValidLanguages();
  168.                 $presentation = $data['presentation'];
  169.                 foreach($languages as $lang) {
  170.                     $business->setName($data['name'], $lang);
  171.                     $business->setPresentation($presentation[$lang], $lang);
  172.                 }
  173.                 $business->setPhone($data['phone']);
  174.                 $business->setEmail($data['email']);
  175.                 $link = $data['website'];
  176.                 $scheme = parse_url($link, PHP_URL_SCHEME);
  177.                 if (empty($scheme)){
  178.                     $link = 'http://' . ltrim($link, '/');
  179.                 }
  180.                 $business->setWebsite($link);
  181.                 switch($data['nursery']){
  182.                     case "family":
  183.                         $business->setNursery(true);
  184.                         $business->setFrame("family");
  185.                         break;
  186.                     case "collective":
  187.                         $business->setNursery(true);
  188.                         $business->setFrame("collective");
  189.                         break;
  190.                     default:
  191.                         $business->setShopType($data['nursery']);
  192.                 }
  193.                 $business->setLocale($request->getLocale());
  194.                 $business->save();
  195.                 $Addressfolder = Folder::getByPath($business->getPath().$business->getKey().'/Addresses');
  196.                 if(!$Addressfolder){
  197.                     $Addressfolder = new Folder();
  198.                     $Addressfolder->setKey('Addresses');
  199.                     $Addressfolder->setParentId($business->getId());
  200.                     $Addressfolder->save();
  201.                 }
  202.                 $address = new Address();
  203.                 $address->setKey('operational');
  204.                 $address->setParent($Addressfolder);
  205.                 $address->setCompanyName($data['name']);
  206.                 $address->setContact($user->getFirstname(). ' '.$user->getLastname());
  207.                 $address->setStreet($data['street']);
  208.                 $address->setZip($data['zip']);
  209.                 $address->setCity($data['city']);
  210.                 $address->setCountry("BE");
  211.                 $address->setPublished(true);
  212.                 $address->save();
  213.                 $billing = new Address();
  214.                 $billing->setKey('billing');
  215.                 $billing->setParent($Addressfolder);
  216.                 $billing->setCompanyName($data['name']);
  217.                 $billing->setContact($user->getFirstname(). ' '.$user->getLastname());
  218.                 $billing->setStreet($data['street']);
  219.                 $billing->setZip($data['zip']);
  220.                 $billing->setCity($data['city']);
  221.                 $billing->setCountry("BE");
  222.                 $billing->setPublished(true);
  223.                 $billing->save();
  224.                 $business->setAddress($address);
  225.                 $business->setBilling($billing);
  226.                 $business->setLocale($request->getLocale());
  227.                 $business->save();
  228.                 //create asset folder if doesn't exist
  229.                 $provFolder = AssetFolder::getByPath($business->getPath());
  230.                 if(!$provFolder){
  231.                     $provFolder = new AssetFolder();
  232.                     $provFolder->setKey(BusinessService::getProvince($business->getAddress()->getZip()));
  233.                     $provFolder->setParentId(8);
  234.                     $provFolder->save();
  235.                 }
  236.                 $folder = AssetFolder::getByPath($business->getPath().$business->getId());
  237.                 if(!$folder){
  238.                     $folder = new AssetFolder();
  239.                     $folder->setKey($business->getId());
  240.                     $folder->setParent($provFolder);
  241.                     $folder->save();
  242.                 }
  243.                 //upload profile
  244.                 $imgMainFile = $request->files->get('img-main-'.$key);
  245.                 if($imgMainFile) {
  246.                     $imgMain = new Image();
  247.                     $imgMain->setKey(uniqid().'.'.$imgMainFile->getClientOriginalExtension());
  248.                     $imgMain->setParent($folder);
  249.                     $imgMain->setData(file_get_contents($imgMainFile->getPath().'/'.$imgMainFile->getFileName()));
  250.                     $imgMain->save();
  251.                     $business->setImage($imgMain);
  252.                 }
  253.                 $allBusinesses = [];
  254.                 if($user->getPanier()){
  255.                     $allBusinesses = [...$user->getPanier(), $business];
  256.                 }else {
  257.                     $allBusinesses = [$business];
  258.                 }
  259.                 $user->setPanier($allBusinesses);
  260.                 //$user->setLastBusinessUsed(count($allBusinesses)-1);
  261.                 $user->save();
  262.                 $address->geocode();
  263.                 $address->save();
  264.             }
  265.             return $this->redirectToRoute('panier');
  266.         }
  267.         return [];
  268.     }
  269. }