/
var
/
www
/
html
/
restaurants
/
src
/
Controller
/
Upload File
HOME
<?php namespace App\Controller; use App\Document\Place as PlaceDocument; use App\Document\Item as ItemDocument; use Knp\Component\Pager\PaginatorInterface; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\Routing\Annotation\Route; use App\Document\User as UserDocument; use App\Service\MailgunTransport; use Doctrine\ODM\MongoDB\DocumentManager; use Symfony\Component\Routing\Generator\UrlGeneratorInterface; class AdminController extends AbstractController { /** * @Route("/businesses", name="businesses") */ public function index(DocumentManager $dm, PaginatorInterface $paginator, Request $request) { $search = $request->query->get('search'); $query = $dm->getRepository(PlaceDocument::class)->findFirstTen($search); $pagination = $paginator->paginate( $query, /* query NOT result */ $request->query->getInt('page', 1), /*page number*/ 10 /*limit per page*/ ); return $this->render('admin/businesses.html.twig', [ 'places_paginated' => $pagination, 'title' => 'Places' ]); } /** * @Route("/admin/business/create", name="business_create", methods={"GET"}) */ public function create(Request $request) { return $this->render('admin/business_create.html.twig'); } /** * @Route("/admin/business/create", name="store", methods={"POST"}) */ public function store(Request $request) { // return $this->render('admin/business_create.html.twig'); } /** * @Route("/admin/business/claim/{slug}", name="register", methods={"GET"}) */ public function claimGet(DocumentManager $dm, Request $request, $slug) { $place = $dm->getRepository(PlaceDocument::class)->findOneBy(['slug' => $slug]); return $this->render('admin/business_start.html.twig', ['slug' => $slug, 'place' => $place]); } /** * @Route("/admin/business/claim/{slug}", name="claim", methods={"POST"}) */ public function claim(DocumentManager $dm, MailgunTransport $mailgun, UrlGeneratorInterface $urlGenerator, Request $request, string $slug) { $user = new UserDocument(); $email = $request->get('email'); $place = $dm->getRepository(PlaceDocument::class)->findOneBy(['slug' => $slug]); if (!$place){ return $this->render('Users/error.html.twig'); } $dm->createQueryBuilder(PlaceDocument::class) ->updateOne() ->field('slug')->equals($slug) ->field('owner')->set($email) ->getQuery() ->execute(); $dm->createQueryBuilder(ItemDocument::class) ->updateMany() ->field('place_slug')->equals($slug) ->field('owner')->set($email) ->getQuery() ->execute(); $token = $this->randomString(10); $user->setEmail($email); $user->setVerification($token); $dm->persist($user); $dm->flush(); $url = $urlGenerator->generate('start_business', ['slug' => $place->getSlug(), 'token' => $token], UrlGeneratorInterface::ABSOLUTE_URL); $messageHtml = $this->composeMessage('email.html.twig', $place, $url); $mailgun->send($email, 'Welcome to Cravvings', $messageHtml); return $this->redirectToRoute('businesses'); } /** * [composeMessage description] * @param string $view The view to render * @param string $rand Random string * @param string $subject Email subject */ private function composeMessage($view, $user, $link, $params = []) { $message = $this->renderView( "Users/$view", [ 'name' => $user->getName(), 'params' => $params, 'link' => $link ] ); return $message; } /** * Generate a random string for email verification * @param int $length * @return string **/ private function randomString($length = 32) { $characters = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'; $charactersLength = strlen($characters); $randomString = ''; for ($i = 0; $i < $length; $i++) { $randomString .= $characters[rand(0, $charactersLength - 1)]; } return $randomString; } }