entityManager = $entityManager; } #[Route('/offers', name: 'offers')] public function index(Environment $twig, OfferingRepository $offerRepository): Response { return new Response($twig->render('offer/index.html.twig', [ 'offers' => $offerRepository->findAll(), ])); } #[Route('/new', name: 'new_offer')] public function newOffer(Request $request, string $photoDir, OfferPhotoHelper $offerPhotoHelper): Response { $offer = new Offering(); $form = $this->createForm(OfferingFormType::class, $offer); $user = $this->getUser(); $form->handleRequest($request); if ($form->isSubmitted() && $form->isValid()) { $offer->setByUser($user); $offer->setCreatedAt(new \DateTime()); if ($photo = $form['photo']->getData()) { $offerPhotoHelper->uploadOfferPhoto($photoDir, $photo, $offer); } $this->entityManager->persist($offer); $this->entityManager->flush(); $this->addFlash("success", "Successfully added the new offer!"); return $this->redirectToRoute('offers'); } return $this->render('app/new_offer.html.twig', [ 'user' => $this->getUser(), 'offer_form' => $form->createView(), ]); } #[Route('/offer/{id}', name: 'show_offer')] public function showOffer(Offering $offer, WishRepository $wishRepository, PlzToCoordinate $plzconverter, DistanceCalculator $distanceCalculator): Response { $distance = null; $user = $this->getUser(); $offerPlz = $offer->getZipCode(); if (isset($user)) { $userPlz = $user->getZipCode(); } if (isset($userPlz)) { $distance = $distanceCalculator->calculateDistance($plzconverter->getCoordinates($offerPlz), $plzconverter->getCoordinates($userPlz)); } return $this->render('app/offer.html.twig', [ 'user' => $user, 'offer' => $offer, 'wishes' => $wishRepository->findByUser($offer->getByUser()), 'distance' => $distance, ]); } #[Route('/offer/edit/{id}', name: 'edit_offer')] public function editOffer(Offering $offer, OfferingRepository $offerRepository, Request $request, string $photoDir, OfferPhotoHelper $offerPhotoHelper): Response { $form = $this->createForm(OfferingFormType::class, $offer); $user = $this->getUser(); if ($offer->getByUser() === $user) { $form->handleRequest($request); if ($form->isSubmitted() && $form->isValid()) { $offer->setByUser($user); $offer->setCreatedAt(new \DateTime()); if ($photo = $form['photo']->getData()) { $oldFilename = $offer->getPhotoFilename(); $offerPhotoHelper->uploadOfferPhoto($photoDir, $photo, $offer); $offerPhotoHelper->deleteOfferPhoto($photoDir, $oldFilename); } $this->entityManager->persist($offer); $this->entityManager->flush(); } return $this->render('offer/edit.html.twig', [ 'user' => $this->getUser(), 'offer' => $offer, 'offer_form' => $form->createView(), ]); } throw new HttpException(403, "No permission"); } #[Route('/offer/delete/{id}', name: 'delete_offer')] public function deleteOffer(Offering $offer, string $photoDir, OfferPhotoHelper $offerPhotoHelper): Response { $user = $this->getUser(); if ($offer->getByUser() === $user) { $offerPhotoHelper->deleteOfferPhoto($photoDir, $offer->getPhotoFilename()); $this->entityManager->remove($offer); $this->entityManager->flush(); $this->addFlash( 'success','Successfully removed offer!' ); return $this->redirectToRoute('own_offers'); } throw new HttpException(403); } #[Route('/myoffers', name: 'own_offers')] public function ownOffers(OfferingRepository $offeringRepository): Response { $user = $this->getUser(); return $this->render('user/offers.html.twig', [ 'user' => $user, 'offers' => $offeringRepository->findByUser($user), ]); } }