<?php
/*
* This file is part of the Symfony package.
*
* (c) Fabien Potencier <fabien@symfony.com>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace App\Controller\Dashboard\Admin;
use App\Entity\Country;
use App\Entity\Destination;
use App\Entity\Experience;
use App\Entity\Hebergement;
use App\Entity\Media;
use App\Entity\Program;
use App\Entity\Subcategory;
use Doctrine\Persistence\ManagerRegistry;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\Routing\Annotation\Route;
//use App\Entity\Experience;
/**
* Controller used to manage current user.
*
* @author Romain Monteil <monteil.romain@gmail.com>
*/
#[Route('/admin/experience')]
class EditexperienceController extends AbstractController {
#[Route('/edit/exp-{id}/general-info', methods: ['GET', 'POST'], name: 'edit_general_info')]
public function editGeneralinfo(Request $request, $id, ManagerRegistry $doctrine) {
$em = $doctrine->getManager();
$experience = $em->getRepository(Experience::class)->find($id);
if ($request->isMethod('post')) {
$experience = $em->getRepository(Experience::class)->find($id);
$experience->setTitle($request->get('title'));
$experience->setResume($request->get('resume'));
$experience->setPublished(0);
$experience->setEnabled(1);
$experience->setCoachingtype($request->get('coachingtype'));
$experience->setSteps('1');
$destination = $em->getRepository(Destination::class)->find($request->get('destination'));
if (!$destination) {
$destination = new Destination();
$destination->setName($request->get('destination'));
$em->persist($destination);
$em->flush();
$country = $em->getRepository(Country::class)->find($request->get('country'));
$country->addDestination($destination);
$em->persist($country);
}
$destination->addExperience($experience);
$subcategories = $em->getRepository(Subcategory::class)->findBy(array('id' => $request->get('subcategories')));
foreach ($subcategories as $subcategory) {
$experience->addSubcategory($subcategory);
}
foreach ($experience->getSubcategories() as $sub) {
if (!in_array($sub->getId(), $request->get('subcategories'))) {
$experience->removeSubcategory($sub);
}
}
$em->persist($experience);
$em->flush();
$this->addFlash('success', 'Informations générale enregistrées avec succes, continuer a remplir les informations suivantes');
return $this->redirectToRoute('exp_overview', [
'id' => $experience->getId(),
]);
}
return $this->render('admin/experience/edit/editGeneralinfo.html.twig', [
'experience' => $experience,
]);
}
#[Route('/exp-{id}/edit-highlights', methods: ['GET', 'POST'], name: 'edit_highlights')]
public function editHighlights(Request $request, $id, ManagerRegistry $doctrine) {
$em = $doctrine->getManager();
$experience = $em->getRepository(Experience::class)->find($id);
if ($request->isMethod('post')) {
$experience->setHighlights($request->get('highlights'));
$em->persist($experience);
$em->flush();
$this->addFlash('success', 'Les grandes lignes enregistrées avec succes, continuer a remplir les informations suivantes');
return $this->redirectToRoute('exp_overview', [
'id' => $experience->getId(),
]);
}
return $this->render('admin/experience/edit/editHighlights.html.twig', [
'experience' => $experience,
]);
}
#[Route('/exp-{id}-{p}/edit-program', methods: ['GET', 'POST'], name: 'edit_program')]
public function editProgram(Request $request, $id, $p, ManagerRegistry $doctrine) {
$em = $doctrine->getManager();
$experience = $em->getRepository(Experience::class)->find($id);
$program = $em->getRepository(Program::class)->find($p);
if ($request->isMethod('post')) {
$program->setDay($request->get('day'));
$program->setDescription($request->get('description'));
$experience->setSteps('3');
$em->persist($program);
$em->flush();
$em->persist($experience);
$em->flush();
$this->addFlash('success', 'Programme enregistrées avec succes, continuer a remplir les informations suivantes');
return $this->redirectToRoute('exp_overview', [
'id' => $experience->getId(),
]);
}
return $this->render('admin/experience/edit/editProgram.html.twig', [
'experience' => $experience,
'program' => $program,
]);
}
#[Route('/exp-{id}-{p}/remove-program', methods: ['GET', 'POST'], name: 'remove_program')]
public function removeProgram(Request $request, $id, $p, ManagerRegistry $doctrine) {
$em = $doctrine->getManager();
$experience = $em->getRepository(Experience::class)->find($id);
$program = $em->getRepository(Program::class)->find($p);
$experience->removeProgram($program);
$em->persist($experience);
$em->flush();
$this->addFlash('danger', 'Programme suprimé avec succes, continuer a remplir les informations suivantes');
return $this->redirectToRoute('exp_overview', [
'id' => $experience->getId(),
]);
}
#[Route('/exp-{id}-{p}/remove-hebergement', methods: ['GET', 'POST'], name: 'remove_hebergement')]
public function removeHebregement(Request $request, $id, $h, ManagerRegistry $doctrine) {
$em = $doctrine->getManager();
$experience = $em->getRepository(Experience::class)->find($id);
$hebergement = $em->getRepository(Hebergement::class)->find($h);
$experience->removeHebergement($hebergement);
$em->persist($hebergement);
$em->flush();
$this->addFlash('danger', 'Hebergement suprimé avec succes, continuer a remplir les informations suivantes');
return $this->redirectToRoute('exp_overview', [
'id' => $experience->getId(),
]);
}
#[Route('/exp-{id}/edit-description', methods: ['GET', 'POST'], name: 'edit_description')]
public function editDescription(Request $request, $id, ManagerRegistry $doctrine) {
$em = $doctrine->getManager();
$experience = $em->getRepository(Experience::class)->find($id);
if ($request->isMethod('post')) {
$experience->setDescription($request->get('description'));
$experience->setIncluded($request->get('included'));
$experience->setNotincluded($request->get('notincluded'));
$experience->setSteps('2');
$em->persist($experience);
$em->flush();
$this->addFlash('success', 'Description enregistrées avec succes, continuer a remplir les informations restantes');
return $this->redirectToRoute('exp_overview', [
'id' => $experience->getId(),
]);
}
return $this->render('admin/experience/edit/editDescription.html.twig', [
'experience' => $experience,
]);
}
#[Route('/exp-{id}/h-{heber}/edit-hebergement', methods: ['GET', 'POST'], name: 'edit_hebergement')]
public function editHebergement(Request $request, $id, $heber, ManagerRegistry $doctrine) {
$em = $doctrine->getManager();
$experience = $em->getRepository(Experience::class)->find($id);
$hebergement = $em->getRepository(Hebergement::class)->find($heber);
if ($request->isMethod('post')) {
$hebergement->setDescription($request->get('description'));
$hebergement->setName($request->get('name'));
$hebergement->setPrice($request->get('price'));
$em->persist($hebergement);
$em->flush();
if ($request->files->get('image')) {
$file = $request->files->get('image');
$hebergement->setImage("uploads/medias/experiences/" . $hebergement->getId() . "/" . $file->getClientOriginalName());
$file->move("uploads/medias/experiences/" . $hebergement->getId() . "/", $file->getClientOriginalName());
}
if ($request->files->get('medias')) {
$i = 0;
foreach ($request->files->get('medias') as $file) {
$media = new Media();
$media->setPath("uploads/medias/experiences/rooms" . $experience->getId() . "/" . $file->getClientOriginalName());
$media->setOrdre('1');
$media->setEnabled('1');
$file->move("uploads/medias/experiences/rooms" . $experience->getId() . "/", $file->getClientOriginalName());
$em->persist($media);
$hebergement->addMedia($media);
$i++;
}
$experience->setSteps('4');
$em->persist($experience);
$em->flush();
}
$this->addFlash('success', "Informations d'hebergement enregistrées avec succes, continuer a remplir les informations restantes");
return $this->redirectToRoute('exp_overview', [
'id' => $experience->getId(),
]);
}
return $this->render('admin/experience/edit/editHebergement.html.twig', [
'experience' => $experience,
'hebergement' => $hebergement,
]);
}
#[Route('/exp-{id}/edit-media', methods: ['GET', 'POST'], name: 'edit_media')]
public function editMedia(Request $request, $id, ManagerRegistry $doctrine) {
$em = $doctrine->getManager();
$experience = $em->getRepository(Experience::class)->find($id);
if ($request->isMethod('post')) {
if ($request->files->get('image')) {
$file = $request->files->get('image');
$experience->setImage("uploads/medias/experiences/" . $experience->getId() . "/" . $file->getClientOriginalName());
$file->move("uploads/medias/experiences/" . $experience->getId() . "/", $file->getClientOriginalName());
}
if ($request->files->get('medias')) {
$i = 0;
foreach ($request->files->get('medias') as $file) {
$media = new Media();
$media->setPath("uploads/medias/experiences/" . $experience->getId() . "/" . $file->getClientOriginalName());
$media->setOrdre('1');
$media->setEnabled('1');
$file->move("uploads/medias/experiences/" . $experience->getId() . "/", $file->getClientOriginalName());
$em->persist($media);
$experience->addMedia($media);
$i++;
}
$experience->setSteps('5');
$em->persist($experience);
$em->flush();
}
$this->addFlash('success', 'Média enregistrées avec succes, continuer a remplir les informations restantes');
return $this->redirectToRoute('exp_overview', [
'id' => $experience->getId(),
]);
}
return $this->render('admin/experience/add/addMedia.html.twig', [
'experience' => $experience,
]);
}
#[Route('/exp-{id}/edit-price', methods: ['GET', 'POST'], name: 'edit_price')]
public function editPrice(Request $request, $id, ManagerRegistry $doctrine) {
$em = $doctrine->getManager();
$experience = $em->getRepository(Experience::class)->find($id);
if ($request->isMethod('post')) {
if ($request->get('onpromo') == "on") {
$experience->setOnpromo(1);
$promotion = $experience->getPromotion();
$promotion->setPercent($request->get('percent'));
$promotion->setDateend(new \DateTime($request->get('dateend')));
$promotion->setDatestart(new \DateTime($request->get('datestart')));
$em->persist($promotion);
}
if ($request->get('hashebergement') == "on") {
$experience->setHashebergement(1);
$i = 0;
foreach ($request->get('idhebergements') as $c) {
$hebergement = $em->getRepository(Hebergement::class)->find($request->get('idhebergements')[$i]);
$hebergement->setPrice($request->get('pricehebergements')[$i]);
$em->persist($hebergement);
$em->flush();
$i++;
}
}
$experience->setCancellation($request->get('cancellation'));
$experience->setCurrency($request->get('currency'));
$experience->setPrice($request->get('price'));
$experience->setSteps('6');
$em->persist($experience);
$em->flush();
$this->addFlash('success', 'Tarification enregistrées avec succes, continuer a remplir les informations restantes');
return $this->redirectToRoute('exp_overview', [
'id' => $experience->getId(),
]);
}
return $this->render('admin/experience/edit/editPrice.html.twig', [
'experience' => $experience,
]);
}
#[Route('/exp-{id}/edit-availability', methods: ['GET', 'POST'], name: 'edit_availability')]
public function editAvailability(Request $request, $id, ManagerRegistry $doctrine) {
$em = $doctrine->getManager();
$experience = $em->getRepository(Experience::class)->find($id);
if ($request->isMethod('post')) {
$availability = $experience->getAvailability();
$availability->setDuration($request->get('duration'));
$availability->setAvailabilitytype($request->get('availabilitytype'));
// avalabilty = 1 - unavalibility = 2
$availability->setDaysbefore($request->get('daysbefore'));
$availability->setDatesstart($request->get('availabilities'));
$availability->setUnavailabilities($request->get('unavailabilities'));
$em->persist($availability);
$em->flush();
$this->addFlash('success', 'Disponibilité enregistrées avec succes, continuer a remplir les informations restantes');
return $this->redirectToRoute('exp_overview', [
'id' => $experience->getId(),
]);
}
return $this->render('admin/experience/edit/editAvailability.html.twig', [
'experience' => $experience,
]);
}
}