<?php
namespace App\Controller;
use App\Service\BusinessService;
use App\Model\DataObject\Address;
use App\Model\DataObject\Business;
use App\Model\DataObject\User;
use Carbon\Carbon;
use Exception;
use Pimcore\Controller\FrontendController;
use Pimcore\Mail;
use Pimcore\Model\Asset\Folder as AssetFolder;
use Pimcore\Model\Asset\Image;
use Pimcore\Model\DataObject\Business as DataObjectBusiness;
use Pimcore\Model\DataObject\Folder;
use Pimcore\Model\DataObject\Visite;
use Pimcore\Model\Exception\NotFoundException;
use Symfony\Component\HttpFoundation\Request;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Template;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\Security\Core\Security as FrontSecurity;
use Pimcore\File;
class BusinessController extends FrontendController
{
/**
* @Template
* @Route(
* "/{_locale}/business/{slug}",
* name="business_detail",
* methods={"GET"}
* )
* @return array
*/
public function detailAction(Request $request, FrontSecurity $security)
{
$securityUser = $security->getUser();
$user=null;
if($securityUser){
$user = User::getByUsername($securityUser->getUserIdentifier())->load()[0];
}
$check = Business::getBySlug($request->get('slug'))->load();
if(!$check) {
throw new NotFoundException("Business not found");
}
$business = $check[0];
$link = $business->getWebsite();
$scheme = parse_url($link, PHP_URL_SCHEME);
if (empty($scheme)){
$link = 'http://' . ltrim($link, '/');
}
$business->setWebsite($link);
$business->save();
if($business->getPremium()) {
$visFolder = \Pimcore\Model\DataObject\Folder::getByPath($business->getPath().$business->getKey().'/visites');
if (!$visFolder) {
$visFolder = new \Pimcore\Model\DataObject\Folder();
$visFolder->setKey('visites');
$visFolder->setParent($business);
$visFolder->save();
}
$visite = new Visite();
$visite->setKey(uniqid());
$visite->setParent($visFolder);
$visite->setPublished(true);
$visite->setUser($user);
$visite->setDateVisite(Carbon::now());
$visite->save();
$visites = $business->getVisites();
$visites[] = $visite;
$business->setVisites($visites);
$business->save();
}
if ($user) {
return ["business" =>$business, "bookmarked" => in_array($business, $user->getFavorites()), "seoBusiness" => true];
}else {
return ["business" =>$business, "bookmarked" => null, "seoBusiness" => true];
}
}
/**
*
* @Route(
* "/businesses/refresh"
* )
* @return json
*/
public function refreshSlug(){
$businesses = new DataObjectBusiness\Listing();
$businesses->load();
foreach($businesses as $bus ){
$bus->setName($bus->getName('en'), 'de');
$bus->save();
}
return $this->json('OK');
}
/**
*
* @Route(
* "/api/{_locale}/unsub"
* )
* @return json
*/
public function unsubAction(Request $request){
$locale = $request->getLocale();
$to = $request->get("email");
$email = new Mail();
$email->setDocument("/".$locale."/emails/map-unsubscribe");
$email->to($to);
$email->send();
return $this->json('OK');
}
/**
*
* @Route(
* "/{_locale}/businesses/all"
* )
* @return json
*/
public function listAll(Request $request, FrontSecurity $security) {
$securityUser = $security->getUser();
$user=null;
if($securityUser){
$user = User::getByUsername($securityUser->getUserIdentifier())->load()[0];
}
$json = file_get_contents('var/assets/business_'.$request->getLocale().'.json');
$businessesArray = \Safe\json_decode($json);
return new JsonResponse($businessesArray);
}
/**
* @Template
* @route("/{_locale}/pro/new",name="newBusiness",methods={"GET", "POST"})
* @return array
*/
public function newBusinessAction(Request $request, FrontSecurity $security)
{
$securityUser = $security->getUser();
if (!$securityUser) {
return $this->redirect($this->generateUrl("login"));
}
$user = User::getByUsername($securityUser->getUserIdentifier())->load()[0];
$panier = count($user->getPanier());
if($panier == 50){
return $this->redirect($this->generateUrl("login"));
}
if($request->isMethod('POST')){
$datas = $request->get('business');
//TODO check required field
$folder = Folder::getByPath('/businesses');
if(!$folder){
$folder = new Folder();
$folder->setKey('businesses');
$folder->setParentId(1);
$folder->save();
}
foreach($datas as $key => $data){
$province = BusinessService::getProvince($data['zip']);
$folderProv = Folder::getByPath('/businesses/'.$province);
if(!$folderProv){
$folderProv = new Folder();
$folderProv->setKey($province);
$folderProv->setParent(Folder::getByPath('/businesses'));
$folderProv->save();
}
$business = new Business();
$business->setParent($folderProv);
$business->setKey(\Pimcore\Model\Element\Service::getValidKey($data['name'], 'object').'-'.uniqid());
$business->setPublished(true);
$languages = \Pimcore\Tool::getValidLanguages();
$presentation = $data['presentation'];
foreach($languages as $lang) {
$business->setName($data['name'], $lang);
$business->setPresentation($presentation[$lang], $lang);
}
$business->setPhone($data['phone']);
$business->setEmail($data['email']);
$link = $data['website'];
$scheme = parse_url($link, PHP_URL_SCHEME);
if (empty($scheme)){
$link = 'http://' . ltrim($link, '/');
}
$business->setWebsite($link);
switch($data['nursery']){
case "family":
$business->setNursery(true);
$business->setFrame("family");
break;
case "collective":
$business->setNursery(true);
$business->setFrame("collective");
break;
default:
$business->setShopType($data['nursery']);
}
$business->setLocale($request->getLocale());
$business->save();
$Addressfolder = Folder::getByPath($business->getPath().$business->getKey().'/Addresses');
if(!$Addressfolder){
$Addressfolder = new Folder();
$Addressfolder->setKey('Addresses');
$Addressfolder->setParentId($business->getId());
$Addressfolder->save();
}
$address = new Address();
$address->setKey('operational');
$address->setParent($Addressfolder);
$address->setCompanyName($data['name']);
$address->setContact($user->getFirstname(). ' '.$user->getLastname());
$address->setStreet($data['street']);
$address->setZip($data['zip']);
$address->setCity($data['city']);
$address->setCountry("BE");
$address->setPublished(true);
$address->save();
$billing = new Address();
$billing->setKey('billing');
$billing->setParent($Addressfolder);
$billing->setCompanyName($data['name']);
$billing->setContact($user->getFirstname(). ' '.$user->getLastname());
$billing->setStreet($data['street']);
$billing->setZip($data['zip']);
$billing->setCity($data['city']);
$billing->setCountry("BE");
$billing->setPublished(true);
$billing->save();
$business->setAddress($address);
$business->setBilling($billing);
$business->setLocale($request->getLocale());
$business->save();
//create asset folder if doesn't exist
$provFolder = AssetFolder::getByPath($business->getPath());
if(!$provFolder){
$provFolder = new AssetFolder();
$provFolder->setKey(BusinessService::getProvince($business->getAddress()->getZip()));
$provFolder->setParentId(8);
$provFolder->save();
}
$folder = AssetFolder::getByPath($business->getPath().$business->getId());
if(!$folder){
$folder = new AssetFolder();
$folder->setKey($business->getId());
$folder->setParent($provFolder);
$folder->save();
}
//upload profile
$imgMainFile = $request->files->get('img-main-'.$key);
if($imgMainFile) {
$imgMain = new Image();
$imgMain->setKey(uniqid().'.'.$imgMainFile->getClientOriginalExtension());
$imgMain->setParent($folder);
$imgMain->setData(file_get_contents($imgMainFile->getPath().'/'.$imgMainFile->getFileName()));
$imgMain->save();
$business->setImage($imgMain);
}
$allBusinesses = [];
if($user->getPanier()){
$allBusinesses = [...$user->getPanier(), $business];
}else {
$allBusinesses = [$business];
}
$user->setPanier($allBusinesses);
//$user->setLastBusinessUsed(count($allBusinesses)-1);
$user->save();
$address->geocode();
$address->save();
}
return $this->redirectToRoute('panier');
}
return [];
}
}