src/Controller/LocationsFossilController.php line 92

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use Symfony\Component\Routing\Annotation\Route;
  4. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  5. use Symfony\Component\HttpFoundation\Session\SessionInterface;
  6. use Sensio\Bundle\FrameworkExtraBundle\Configuration\Method;
  7. use Doctrine\ORM\EntityManagerInterface;
  8. use Symfony\Component\HttpFoundation\Request;
  9. use JMS\Serializer\SerializerBuilder;
  10. use Symfony\Component\HttpFoundation\Response;
  11. use Symfony\Component\Routing\RouterInterface;
  12. use App\Entity\LocationsFossil;
  13. use App\Entity\Countries;
  14. use App\Entity\Newsfeed;
  15. use App\Entity\User;
  16. use App\Entity\UserProfile;
  17. use App\Entity\LocationsGIS;
  18. use App\Entity\LocationsGISNearby;
  19. use App\Entity\Spool;
  20. use App\Entity\SearchItems;
  21. use App\Repository\LocationsFossilRepository;
  22. use App\Form\LocationsFossilFormType;
  23. use App\Form\LocationsUserFossilFormType;
  24. use App\Form\LocationFilterSearchFormType;
  25. use Symfony\Contracts\Translation\TranslatorInterface;
  26. class LocationsFossilController extends AbstractController 
  27. {
  28.     private $session;
  29.     private $em;
  30.     private $translator;
  31.     private $router;
  32.     public function __construct(EntityManagerInterface $emTranslatorInterface $translatorRouterInterface $routerSessionInterface $session)
  33.     {
  34.         $this->em $em;
  35.         $this->translator $translator;
  36.         $this->router $router;
  37.         $this->session $session;
  38.     }
  39.     private function get_locations_fossil_new(TranslatorInterface $translator) {
  40.         $repository $this->getDoctrine()->getRepository(LocationsFossil::class);
  41.         $new $repository->findBy(array('approved' => 0),array('num_new_photos' => 'DESC''num_reviews' => 'DESC''location' => 'ASC'));
  42.         return $new;
  43.     }
  44.     private function get_locations_fossil_approved(TranslatorInterface $translator) {
  45.         $repository $this->getDoctrine()->getRepository(LocationsFossil::class);
  46.         $approved $repository->findBy(array('approved' => 1),array('num_new_photos' => 'DESC''num_reviews' => 'DESC''location' => 'ASC'));
  47.         return $approved;
  48.     }
  49.     private function get_locations_fossil_filtered($filter) {
  50.         $qb $this->em->createQueryBuilder('l')
  51.             ->from('App\Entity\LocationsFossil''l')
  52.             ->addSelect('l')
  53.             ->orderBy('l.id','DESC')
  54.             ->AddOrderBy('l.approved','DESC')
  55.             ->AddOrderBy('l.num_new_photos','DESC')
  56.             ->AddOrderBy('l.num_reviews','ASC')
  57.         ;
  58.         if($filter['property'] == 'new') {
  59.             $qb->andWhere("l.approved = 0");
  60.         }
  61.         elseif($filter['property'] == 'reviews') {
  62.             $qb->andWhere("l.num_reviews > 0");
  63.         }
  64.         elseif($filter['property'] == 'photos') {
  65.             $qb->andWhere("l.num_new_photos > 0");
  66.         }
  67.         $result $qb->getQuery()->getResult();
  68.         return $result;
  69.     }
  70.     private function get_locations_fossil_by_id(int $id) {
  71.         $repository $this->getDoctrine()->getRepository(LocationsFossil::class);
  72.         $item $repository->findOneBy(array('id'=>$id));
  73.         return $item;
  74.     }
  75.     /**
  76.      * @Route("/locations/fossil/{id}" , name="locations_fossil")
  77.      */
  78.     public function index(LocationsFossil $fossilTranslatorInterface $translatorEntityManagerInterface $em)
  79.     {
  80.         if($this->getUser() == null){
  81.             $filterby['vulnerability'] = array('public');
  82.         } else {
  83.             $vulnerability $this->getUser()->getCanSeeVulnerability();
  84.             if($vulnerability == 'very') { $filterby['vulnerability'] = array('public','slightly','moderate','very'); }
  85.             elseif($vulnerability == 'moderate') { $filterby['vulnerability'] = array('public','slightly','moderate'); }
  86.             elseif($vulnerability == 'slightly') { $filterby['vulnerability'] = array('public','slightly'); }
  87.             else { $filterby['vulnerability'] = array('public'); }
  88.         }
  89.         $filterby['approved'] = 1;
  90.         $filterby['fossil'] = $fossil;
  91.         $repository $this->getDoctrine()->getRepository(LocationsGIS::class);
  92.         $gis $repository->findBy($filterby);
  93.         if($fossil->getApproved() == || empty($gis) ) {
  94.             return $this->render('error_message.html.twig', [
  95.                 'error_title' => $translator->trans("Fout"),
  96.                 'error_message' => $translator->trans("Deze locatie bestaat niet of je hebt geen rechten deze in te zien."),
  97.             ]);
  98.         }
  99.         #ToDo-Ante: alleen voor deze locatie, niet voor allen
  100.         $qb $em->createQueryBuilder('f')
  101.             ->from('App\Entity\FossildbFossil''f')
  102.             ->select('count(f.id)')
  103.             ->andWhere('f.location_fossil = (:fossil_id)')
  104.             ->andWhere('f.approved = 1')
  105.             ->setParameter('fossil_id'$fossil->getId());
  106.         $fossils_found $qb->getQuery()->getSingleScalarResult();
  107.         /*$query = $em->createQuery('SELECT lg FROM App\Entity\LocationsGIS lg WHERE lg.center_lat BETWEEN :find_latmin AND :find_latmax AND lg.center_lng BETWEEN :find_lngmin AND :find_lngmax ORDER BY lg.type'); //AND lg.fossil != :fossil_id
  108.         $query->setParameter('find_latmin', $gis[0]->getCenterLat()-0.5);
  109.         $query->setParameter('find_latmax', $gis[0]->getCenterLat()+0.5);
  110.         $query->setParameter('find_lngmin', $gis[0]->getCenterLng()-0.5);
  111.         $query->setParameter('find_lngmax', $gis[0]->getCenterLng()+0.5);
  112.         //$query->setParameter('fossil_id', $fossil->getId());
  113.         $gis_locations_nearby = $query->getResult();
  114.         dd($gis_locations_nearby);*/
  115.         
  116.         $locations_nearby=array();
  117.         $repository $this->getDoctrine()->getRepository(LocationsGISNearby::class);
  118.         $gis_nearby $repository->findBy(array('gis' => $gis[0]->getId()),array('type' => 'ASC'));
  119.         if(count($gis_nearby) == 0) {
  120.             $locations $fossil->getLocationsGIS()->toArray();
  121.             $this->forward('App\Controller\LocationsController:find_nearby', [
  122.                 'item' => $locations[0],
  123.                 'em' => $em,
  124.                 ]);
  125.             $gis_nearby $repository->findBy(array('gis' => $gis[0]->getId()),array('type' => 'ASC'));
  126.         }
  127.         foreach ($gis_nearby as $key => $location) {
  128.             $repository $this->getDoctrine()->getRepository(LocationsGIS::class);
  129.             $filternearby['vulnerability']=$filterby['vulnerability'];
  130.             $filternearby['approved']=$filterby['approved'];
  131.             $filternearby['id']=$location->getNearbyGIS()->getId();
  132.             $locations_nearby[] = $repository->findOneBy($filternearby);
  133.         }
  134.         return $this->render('locations_fossil.html.twig', [
  135.             'fossil' => $fossil,
  136.             //'gis' => $gis,
  137.             'locations_nearby' => $locations_nearby,
  138.             'type' => 'fossil',
  139.             'id' => $fossil->getId(),
  140.             'all_locations' => false,
  141.             'filterby' => $filterby,
  142.             'types' => array('fossil'),
  143.             'country' => null,
  144.             'fossils_found' => $fossils_found,
  145.         ]);
  146.     }
  147.     /**
  148.      * @Route("/moderate/fossils", name="locations_fossil_moderate")
  149.      */
  150.     public function moderate(Request $requestTranslatorInterface $translator)
  151.     {
  152.         $this->denyAccessUnlessGranted('ROLE_MOD_LOCATIONS');
  153.         $form $this->createForm(LocationFilterSearchFormType::class);
  154.         $form->handleRequest($request);
  155.         if ($form->isSubmitted() && $form->isValid()){
  156.             $filter $form->getData();
  157.         } else {
  158.             $filter=array('property' => array());
  159.         }
  160.         $locations $this->get_locations_fossil_filtered($filter);
  161.         return $this->render('locations_fossil_moderate.html.twig', [
  162.             'items' => $locations,
  163.             'form' => $form->createView()
  164.         ]);
  165.     }
  166.     /**
  167.      * @Route("/fossil/add", name="locations_fossil_user_add")
  168.      */
  169.     public function user_add(EntityManagerInterface $emRequest $requestTranslatorInterface $translator)
  170.     {
  171.         $this->denyAccessUnlessGranted('ROLE_USER');
  172.         if($_ENV['DISABLE_FORMS'] == "true") { return $this->render('maintenance_form_disabled.html.twig'); }
  173.         $repository $this->getDoctrine()->getRepository(Countries::class);
  174.         $countries $repository->findAll();
  175.         $form $this->createForm(LocationsUserFossilFormType::class);
  176.         
  177.         $form->handleRequest($request);
  178.         if ($form->isSubmitted() && $form->isValid()){
  179.             $form_data $form->getData();
  180.             $fossil = new LocationsFossil();
  181.             $fossil->setNameNl($form_data["name_nl"]);
  182.             $fossil->setNameEn($form_data["name_en"]);
  183.             $fossil->setDescriptionEn($form_data["description_en"]);
  184.             $fossil->getLocation($form_data["location"]);
  185.             $fossil->setDescriptionNl($form_data["description_nl"]);
  186.             $fossil->setDescriptionEn($form_data["description_en"]);
  187.             $fossil->setLocation($form_data["location"]);
  188.             $fossil->setCountry($form_data["country"]);
  189.             $fossil->setClosed($form_data["closed"]);
  190.             $fossil->setIsQuaternary($form_data["is_quaternary"]);
  191.             $fossil->setIsNeogene($form_data["is_neogene"]);
  192.             $fossil->setIsPaleogene($form_data["is_paleogene"]);
  193.             $fossil->setIsCretaceous($form_data["is_cretaceous"]);
  194.             $fossil->setIsJurassic($form_data["is_jurassic"]);
  195.             $fossil->setIsTriassic($form_data["is_triassic"]);
  196.             $fossil->setIsPermian($form_data["is_permian"]);
  197.             $fossil->setIsCarboniferous($form_data["is_carboniferous"]);
  198.             $fossil->setIsDevonian($form_data["is_devonian"]);
  199.             $fossil->setIsSilurian($form_data["is_silurian"]);
  200.             $fossil->setIsOrdovician($form_data["is_ordovician"]);
  201.             $fossil->setIsCambrian($form_data["is_cambrian"]);
  202.             $fossil->setIsPrecambrian($form_data["is_precambrian"]);
  203.             $fossil->setHasDinosauria($form_data["has_dinosauria"]);
  204.             $fossil->setHasChlorophyta($form_data["has_chlorophyta"]);
  205.             $fossil->setHasBelemnoidea($form_data["has_belemnoidea"]);
  206.             $fossil->setHasBivalvia($form_data["has_bivalvia"]);
  207.             $fossil->setHasBrachiopoda($form_data["has_brachiopoda"]);
  208.             $fossil->setHasBryozoa($form_data["has_bryozoa"]);
  209.             $fossil->setHasAmmonitida($form_data["has_ammonitida"]);
  210.             $fossil->setHasNautiloidea($form_data["has_nautiloidea"]);
  211.             $fossil->setHasCrinoidea($form_data["has_crinoidea"]);
  212.             $fossil->setHasForaminifera($form_data["has_foraminifera"]);
  213.             $fossil->setHasGastropoda($form_data["has_gastropoda"]);
  214.             $fossil->setHasHemichordata($form_data["has_hemichordata"]);
  215.             $fossil->setHasHexapoda($form_data["has_hexapoda"]);
  216.             $fossil->setHasAnthozoa($form_data["has_anthozoa"]);
  217.             $fossil->setHasCrustacea($form_data["has_crustacea"]);
  218.             $fossil->setHasMammaliaterrestrium($form_data["has_mammaliaterrestrium"]);
  219.             $fossil->setHasOstracoda($form_data["has_ostracoda"]);
  220.             $fossil->setHasAngiospermae($form_data["has_angiospermae"]);
  221.             $fossil->setHasConiferophyta($form_data["has_coniferophyta"]);
  222.             $fossil->setHasCycadophyta($form_data["has_cycadophyta"]);
  223.             $fossil->setHasLycophyta($form_data["has_lycophyta"]);
  224.             $fossil->setHasPteridophyta($form_data["has_pteridophyta"]);
  225.             $fossil->setHasPteridospermophyta($form_data["has_pteridospermophyta"]);
  226.             $fossil->setHasSphenophyta($form_data["has_sphenophyta"]);
  227.             $fossil->setHasRudista($form_data["has_rudista"]);
  228.             $fossil->setHasPolychaeta($form_data["has_polychaeta"]);
  229.             $fossil->setHasPorifera($form_data["has_porifera"]);
  230.             $fossil->setHasIchnofossilia($form_data["has_ichnofossilia"]);
  231.             $fossil->setHasTrilobita($form_data["has_trilobita"]);
  232.             $fossil->setHasElasmobranchii($form_data["has_elasmobranchii"]);
  233.             $fossil->setHasBatoidea($form_data["has_batoidea"]);
  234.             $fossil->setHasAves($form_data["has_aves"]);
  235.             $fossil->setHasEchinoidea($form_data["has_echinoidea"]);
  236.             $fossil->setHasMammaliamarinis($form_data["has_mammaliamarinis"]);
  237.             $fossil->setHasBacteria($form_data["has_bacteria"]);
  238.             $fossil->setHasArchaebacteria($form_data["has_archaebacteria"]);
  239.             $fossil->setHasPhaeophyceae($form_data["has_phaeophyceae"]);
  240.             $fossil->setHasDiatomophyceae($form_data["has_diatomophyceae"]);
  241.             $fossil->setHasRadiolaria($form_data["has_radiolaria"]);
  242.             $fossil->setHasChoanoflagellata($form_data["has_choanoflagellata"]);
  243.             $fossil->setHasMedusozoa($form_data["has_medusozoa"]);
  244.             $fossil->setHasAsterozoa($form_data["has_asterozoa"]);
  245.             $fossil->setHasBlastoidea($form_data["has_blastoidea"]);
  246.             $fossil->setHasCystoidea($form_data["has_cystoidea"]);
  247.             $fossil->setHasAgnatha($form_data["has_agnatha"]);
  248.             $fossil->setHasPlacodermi($form_data["has_placodermi"]);
  249.             $fossil->setHasChimaeriformes($form_data["has_chimaeriformes"]);
  250.             $fossil->setHasActinopterygii($form_data["has_actinopterygii"]);
  251.             $fossil->setHasSarcopterygii($form_data["has_sarcopterygii"]);
  252.             $fossil->setHasDipnoi($form_data["has_dipnoi"]);
  253.             $fossil->setHasAmphibia($form_data["has_amphibia"]);
  254.             $fossil->setHasAnapsida($form_data["has_anapsida"]);
  255.             $fossil->setHasSquamata($form_data["has_squamata"]);
  256.             $fossil->setHasSauropterygia($form_data["has_sauropterygia"]);
  257.             $fossil->setHasIchthyosauria($form_data["has_ichthyosauria"]);
  258.             $fossil->setHasCrocodylomorpha($form_data["has_crocodylomorpha"]);
  259.             $fossil->setHasPterosauria($form_data["has_pterosauria"]);
  260.             $fossil->setHasPlatyzoa($form_data["has_platyzoa"]);
  261.             $fossil->setHasAnnelida($form_data["has_annelida"]);
  262.             $fossil->setHasPolyplacophora($form_data["has_polyplacophora"]);
  263.             $fossil->setHasScaphopoda($form_data["has_scaphopoda"]);
  264.             $fossil->setHasNautilida($form_data["has_nautilida"]);
  265.             $fossil->setHasGoniatitida($form_data["has_goniatitida"]);
  266.             $fossil->setHasCeratitida($form_data["has_ceratitida"]);
  267.             $fossil->setHasNeocoleoidea($form_data["has_neocoleoidea"]);
  268.             $fossil->setHasArachnida($form_data["has_arachnida"]);
  269.             $fossil->setHasMerostomata($form_data["has_merostomata"]);
  270.             $fossil->setHasMyriapoda($form_data["has_myriapoda"]);
  271.             $fossil->setHasFungi($form_data["has_fungi"]);
  272.             $fossil->setHasMycetozoa($form_data["has_mycetozoa"]);
  273.             $fossil->setHasGinkgophyta($form_data["has_ginkgophyta"]);
  274.             $fossil->setHasBryophyta($form_data["has_bryophyta"]);
  275.             $fossil->setHasIncertaesedis($form_data["has_incertaesedis"]);
  276.             $fossil->setVulnerability($form_data["vulnerability"]);
  277.             $fossil->setUserId($this->getUser()->getId());
  278.             $fossil->setUsername($this->getUser()->getUsername());
  279.             $fossil->setDateAdded(new \DateTime());
  280.             $fossil->setApproved(0);
  281.             $fossil->setNumReviews(0);
  282.             $fossil->setNumNewPhotos(0);
  283.             $em->persist($fossil);
  284.             $em->flush();
  285.             $gis = new LocationsGIS();
  286.             $gis->setNameNl($fossil->getLocation());
  287.             $gis->setNameEn($fossil->getLocation());
  288.             $gis->setShape($form_data["shape"]);
  289.             $gis->setData($form_data["data"]);
  290.             $gis->setRadius($form_data["radius"]);
  291.             $gis->setCenterLat($form_data["center_lat"]);
  292.             $gis->setCenterLng($form_data["center_lng"]);
  293.             $gis->setVulnerability($form_data["vulnerability"]);
  294.             $gis->setCountry($fossil->getCountry());
  295.             $gis->setUserId($this->getUser()->getId());
  296.             $gis->setUsername($this->getUser()->getUsername());
  297.             $gis->setApproved('0');
  298.             $gis->setType('fossil');
  299.             $gis->setFossil($fossil);
  300.             $em->persist($gis);
  301.             $em->flush();
  302.             $this->addFlash('success'$translator->trans("Fossielenlocatie toegevoegd aan de wachtlijst voor goedkeuring."));
  303.             return $this->redirectToRoute('locations_user_add');
  304.         }
  305.         return $this->render('locations_add_location_fossil.html.twig', [
  306.             'title' => $translator->trans("Fossielenlocatie toevoegen"),
  307.             'form' => $form->createView(),
  308.             'gis' => array(),
  309.             'countries' => $countries,
  310.             'type' => 'user_fossil',
  311.             'form_name' => 'locations_user_fossil',
  312.             'show_map' => true
  313.         ]);
  314.     }
  315.     /**
  316.      * @Route("/moderate/fossil/add", name="locations_fossil_moderate_add")
  317.      */
  318.     public function addEntityManagerInterface $emRequest $requestTranslatorInterface $translator)
  319.     {
  320.         $this->denyAccessUnlessGranted('ROLE_MOD_LOCATIONS');
  321.         $form $this->createForm(LocationsFossilFormType::class);
  322.         $form->handleRequest($request);
  323.         if ($form->isSubmitted() && $form->isValid()){
  324.             $fossil $form->getData();
  325.             $fossil->setUserId($this->getUser()->getId());
  326.             $fossil->setUsername($this->getUser()->getUsername());
  327.             $fossil->setDateAdded(new \DateTime());
  328.             $fossil->setApproved(0);
  329.             $fossil->setNumReviews(0);
  330.             $fossil->setNumNewPhotos(0);
  331.             $em->persist($fossil);
  332.             $em->flush();
  333.             $this->addFlash('success'$translator->trans("Fossielenlocatie toegevoegd"));
  334.             return $this->redirectToRoute('locations_gis_item_moderate',  array('type' => 'fossil''id' => $fossil->getId()));
  335.         }
  336.         return $this->render('locations_add_location_fossil.html.twig', [
  337.             'title' => $translator->trans("Fossielenlocatie toevoegen"),
  338.             'form' => $form->createView(),
  339.             'gis' => array(),
  340.             'countries' => array(),
  341.             'type' => 'fossil',
  342.             'form_name' => 'location_fossil',
  343.             'button_text' => $translator->trans("Toevoegen")
  344.         ]);
  345.     }
  346.     /**
  347.      * @Route("/moderate/fossil/{id}/edit", name="locations_fossil_moderate_edit")
  348.      */
  349.     public function edit(int $idLocationsFossil $fossilEntityManagerInterface $emRequest $requestTranslatorInterface $translator)
  350.     {
  351.         $this->denyAccessUnlessGranted('ROLE_MOD_LOCATIONS');
  352.         $fossil $this->get_locations_fossil_by_id($id);
  353.         $old_vulnerability $fossil->getVulnerability();
  354.         $form $this->createForm(LocationsFossilFormType::class, $fossil);
  355.         $form->handleRequest($request);
  356.         if ($form->isSubmitted() && $form->isValid()) {
  357.             $fossil $form->getData();
  358.             $fossil->setDateReviewed(new \DateTime());
  359.             $em->persist($fossil);
  360.             $em->flush();
  361.             $spool = new Spool();
  362.             $spool->setCommand("geojson:locations");
  363.             $spool->setArguments(serialize(array('vulnerability' => $fossil->getVulnerability(), 'type' => 'fossil')));
  364.             $em->persist($spool);
  365.             $em->flush();
  366.             if($fossil->getVulnerability() != $old_vulnerability) {
  367.                 $vulnerability '';
  368.                 $spool = new Spool();
  369.                 $spool->setCommand("geojson:locations");
  370.                 $spool->setArguments(serialize(array('vulnerability' => $old_vulnerability'type' => 'fossil')));
  371.                 $em->persist($spool);
  372.                 $em->flush();
  373.             }
  374.             if ($fossil->getApproved() == 1){
  375.                 $fossil->setApprovedUserId($this->getUser()->getId());
  376.                 $fossil->setApprovedUsername($this->getUser()->getUsername());
  377.                 $newsfeed = new Newsfeed();
  378.                 $newsfeed->setTitleNl($fossil->getLocation());
  379.                 $newsfeed->setTitleEn($fossil->getLocation());
  380.                 $newsfeed->setRemoteId($fossil->getId());
  381.                 $newsfeed->setType('locations_fossil');
  382.                 $newsfeed->setIsUpdate(1);
  383.                 $newsfeed->setTime(new \DateTime());
  384.                 $em $this->getDoctrine()->getManager();
  385.                 $em->persist($newsfeed);
  386.                 $em->flush();
  387.                 $repository $em->getRepository(SearchItems::class);
  388.                 $searchitem $repository->findOneBy(array('path' => $this->router->generate('locations_fossil', [ 'id' => $fossil->getId()]) ));
  389.                 if(!$searchitem) {
  390.                     $searchitem = new SearchItems();
  391.                 }
  392.     
  393.                 $searchitem->setType('locations_fossil');
  394.                 $searchitem->setPath($this->router->generate('locations_fossil', [ 'id' => $fossil->getId()]));
  395.                 $searchitem->setNameNl($fossil->getNameNl());
  396.                 $searchitem->setNameEn($fossil->getNameEn());
  397.                 $searchitem->setKeywordsNl($fossil->getNameNl());
  398.                 $searchitem->setKeywordsEn($fossil->getNameEn());
  399.                 if(empty($fossil->getDateReviewed())) {
  400.                     $searchitem->setLastUpdateTime($fossil->getDateAdded());
  401.                 } else {
  402.                     $searchitem->setLastUpdateTime($fossil->getDateReviewed());
  403.                 }
  404.                 $this->em->persist($searchitem);
  405.                 $repository $em->getRepository(LocationsFossil::class);
  406.                 $totalsubmissions $repository->createQueryBuilder('a')
  407.                     ->select('count(a.id)')
  408.                     ->andWhere("a.user_id = (:user)")
  409.                     ->andWhere("a.approved = 1")
  410.                     ->setParameter('user'$fossil->getUserId())
  411.                     ->getQuery()
  412.                     ->getSingleScalarResult();
  413.         
  414.                 $repository $em->getRepository(User::class);
  415.                 $user $repository->findOneBy(array('id' => $fossil->getUserId()));
  416.         
  417.                 $repository $this->getDoctrine()->getRepository(UserProfile::class);
  418.                 $userprofile $repository->findOneBy(array('user' => $user));
  419.                 if(!$userprofile) {
  420.                     $userprofile = new UserProfile();
  421.                     $userprofile->setUser($user);
  422.                 }
  423.                 $userprofile->setLocationFossilSubmissions($totalsubmissions);
  424.                 $em->persist($userprofile);
  425.                 $em->flush();
  426.             }
  427.             $this->addFlash('success'$translator->trans("Fossielenlocatie bijgewerkt"));
  428.             return $this->redirectToRoute('locations_fossil_moderate');
  429.         }
  430.         return $this->render('locations_add_location_fossil.html.twig', [
  431.             'title' => $translator->trans("Fossielenlocatie bewerken"),
  432.             'form' => $form->createView(),
  433.             'gis' => array(),
  434.             'countries' => array(),
  435.             'type' => 'fossil',
  436.             'form_name' => 'locations_fossil',
  437.             'button_text' => $translator->trans("Bewerken")
  438.         ]);
  439.     }
  440.     /**
  441.      * @Route("/moderate/fossil/{id}/revoke", name="locations_fossil_moderate_revoke")
  442.      */
  443.     public function moderate_revoke(int $idLocationsFossil $fossilEntityManagerInterface $emTranslatorInterface $translator)
  444.     {
  445.         $this->denyAccessUnlessGranted('ROLE_MOD_LOCATIONS');
  446.         $fossil->setApprovedUserId($this->getUser()->getId());
  447.         $fossil->setApprovedUsername($this->getUser()->getUsername());
  448.         $fossil->setApproved('0');
  449.         $em->persist($fossil);
  450.         $em->flush();
  451.         $repository $this->getDoctrine()->getRepository(LocationsGIS::class);
  452.         $gis $repository->findBy(array('fossil' => $fossil));
  453.         foreach ($gis as $key => $location) {
  454.             $this->forward('App\Controller\LocationsController:remove_nearby', [
  455.                 'item' => $location,
  456.                 'em' => $em,
  457.                 ]);
  458.                 
  459.             $location->setApproved('0');
  460.             $em->persist($location);
  461.             $em->flush();
  462.         }
  463.         $spool = new Spool();
  464.         $spool->setCommand("geojson:locations");
  465.         $spool->setArguments(serialize(array('vulnerability' => $fossil->getVulnerability(), 'type' => 'fossil')));
  466.         $em->persist($spool);
  467.         $em->flush();
  468.         $repository $em->getRepository(SearchItems::class);
  469.         $searchitem $repository->findOneBy(array('path' => $this->router->generate('locations_fossil', [ 'id' => $fossil->getId()]) ));
  470.         if($searchitem){
  471.             $em->remove($searchitem);
  472.             $em->flush();
  473.         }
  474.         $repository $em->getRepository(LocationsFossil::class);
  475.         $totalsubmissions $repository->createQueryBuilder('a')
  476.             ->select('count(a.id)')
  477.             ->andWhere("a.user_id = (:user)")
  478.             ->andWhere("a.approved = 1")
  479.             ->setParameter('user'$fossil->getUserId())
  480.             ->getQuery()
  481.             ->getSingleScalarResult();
  482.         $repository $em->getRepository(User::class);
  483.         $user $repository->findOneBy(array('id' => $fossil->getUserId()));
  484.         $repository $this->getDoctrine()->getRepository(UserProfile::class);
  485.         $userprofile $repository->findOneBy(array('user' => $user));
  486.         if(!$userprofile) {
  487.             $userprofile = new UserProfile();
  488.             $userprofile->setUser($user);
  489.         }
  490.         $userprofile->setLocationFossilSubmissions($totalsubmissions);
  491.         $em->persist($userprofile);
  492.         $em->flush();
  493.         $this->addFlash('success'$translator->trans("Fossielenlocatie ingetrokken"));
  494.         return $this->redirectToRoute('locations_fossil_moderate');
  495.     }
  496.     /**
  497.      * @Route("/moderate/fossil/{id}/approve", name="locations_fossil_moderate_approve")
  498.      */
  499.     public function moderate_approve(int $idLocationsFossil $fossilEntityManagerInterface $emTranslatorInterface $translator)
  500.     {
  501.         $this->denyAccessUnlessGranted('ROLE_MOD_LOCATIONS');
  502.         $LocationsGIS $fossil->getLocationsGIS()->toArray();
  503.         $has_approved_locations=0;
  504.         foreach ($LocationsGIS as $key => $item) {
  505.             if($item->getApproved() == true ){
  506.                 $has_approved_locations++;
  507.             }
  508.         }
  509.         if (count($fossil->getLocationsGIS()) <= 0) {
  510.             $this->addFlash('error'$translator->trans("Locatie heeft geen coördinaten en kan daarom niet goedgekeurd worden"));
  511.             return $this->redirectToRoute('locations_fossil_moderate');
  512.         } elseif ($has_approved_locations <= 0) {
  513.             $this->addFlash('error'$translator->trans("Locatie heeft geen goedgekeurde coördinaten en kan daarom niet goedgekeurd worden"));
  514.             return $this->redirectToRoute('locations_fossil_moderate');
  515.         } else {
  516.             $fossil->setApprovedUserId($this->getUser()->getId());
  517.             $fossil->setApprovedUsername($this->getUser()->getUsername());
  518.             $fossil->setApproved('1');
  519.             $em->persist($fossil);
  520.             $em->flush();
  521.             $spool = new Spool();
  522.             $spool->setCommand("geojson:locations");
  523.             $spool->setArguments(serialize(array('vulnerability' => $fossil->getVulnerability(), 'type' => 'fossil')));
  524.             $em->persist($spool);
  525.             $em->flush();
  526.             
  527.             $newsfeed = new Newsfeed();
  528.             $newsfeed->setTitleNl($fossil->getLocation());
  529.             $newsfeed->setTitleEn($fossil->getLocation());
  530.             $newsfeed->setRemoteId($fossil->getId());
  531.             $newsfeed->setType('locations_fossil');
  532.             $newsfeed->setTime(new \DateTime());
  533.             $newsfeed->setIsUpdate(0);
  534.             $em $this->getDoctrine()->getManager();
  535.             $em->persist($newsfeed);
  536.             $em->flush();
  537.             $repository $em->getRepository(SearchItems::class);
  538.             $searchitem $repository->findOneBy(array('path' => $this->router->generate('locations_fossil', [ 'id' => $fossil->getId()]) ));
  539.             if(!$searchitem) {
  540.                 $searchitem = new SearchItems();
  541.             }
  542.             $searchitem->setType('locations_fossil');
  543.             $searchitem->setPath($this->router->generate('locations_fossil', [ 'id' => $fossil->getId()]));
  544.             $searchitem->setNameNl($fossil->getNameNl());
  545.             $searchitem->setNameEn($fossil->getNameEn());
  546.             $searchitem->setKeywordsNl($fossil->getNameNl());
  547.             $searchitem->setKeywordsEn($fossil->getNameEn());
  548.             if(empty($fossil->getDateReviewed())) {
  549.                 $searchitem->setLastUpdateTime($fossil->getDateAdded());
  550.             } else {
  551.                 $searchitem->setLastUpdateTime($fossil->getDateReviewed());
  552.             }
  553.             $this->em->persist($searchitem);
  554.             $repository $em->getRepository(LocationsFossil::class);
  555.             $totalsubmissions $repository->createQueryBuilder('a')
  556.                 ->select('count(a.id)')
  557.                 ->andWhere("a.user_id = (:user)")
  558.                 ->andWhere("a.approved = 1")
  559.                 ->setParameter('user'$fossil->getUserId())
  560.                 ->getQuery()
  561.                 ->getSingleScalarResult();
  562.     
  563.             $repository $em->getRepository(User::class);
  564.             $user $repository->findOneBy(array('id' => $fossil->getUserId()));
  565.     
  566.             $repository $this->getDoctrine()->getRepository(UserProfile::class);
  567.             $userprofile $repository->findOneBy(array('user' => $user));
  568.             if(!$userprofile) {
  569.                 $userprofile = new UserProfile();
  570.                 $userprofile->setUser($user);
  571.             }
  572.             $userprofile->setLocationFossilSubmissions($totalsubmissions);
  573.             $em->persist($userprofile);
  574.             $em->flush();
  575.             $locations $fossil->getLocationsGIS()->toArray();
  576.             $this->forward('App\Controller\LocationsController:find_nearby', [
  577.                 'item' => $locations[0],
  578.                 'em' => $em,
  579.                 ]);
  580.             
  581.             $this->addFlash('success'$translator->trans("Fossielenlocatie goedgekeurd"));
  582.             return $this->redirectToRoute('locations_fossil_moderate');
  583.         }
  584.     }
  585.     /**
  586.      * @Route("/moderate/fossil/{id}/delete", name="locations_fossil_moderate_delete")
  587.      */
  588.     public function moderate_delete(int $idLocationsFossil $fossilEntityManagerInterface $emTranslatorInterface $translator)
  589.     {
  590.         $this->denyAccessUnlessGranted('ROLE_MOD_LOCATIONS');
  591.         $old_vulnerability $fossil->getVulnerability();
  592.         $repository $em->getRepository(SearchItems::class);
  593.         $searchitem $repository->findOneBy(array('path' => $this->router->generate('locations_fossil', [ 'id' => $fossil->getId()]) ));
  594.         if($searchitem){
  595.             $em->remove($searchitem);
  596.             $em->flush();
  597.         }
  598.         $repository $this->getDoctrine()->getRepository(LocationsGIS::class);
  599.         $gis $repository->findBy(array('fossil' => $fossil));
  600.         foreach ($gis as $key => $location) {
  601.             $this->forward('App\Controller\LocationsController:remove_nearby', [
  602.                 'item' => $location,
  603.                 'em' => $em,
  604.                 ]);
  605.                 
  606.             $em->remove($location);
  607.             $em->flush();
  608.         }
  609.         $em->remove($fossil);
  610.         $em->flush();
  611.         $spool = new Spool();
  612.         $spool->setCommand("geojson:locations");
  613.         $spool->setArguments(serialize(array('vulnerability' => $old_vulnerability'type' => 'fossil')));
  614.         $em->persist($spool);
  615.         $em->flush();
  616.         $repository $em->getRepository(LocationsFossil::class);
  617.         $totalsubmissions $repository->createQueryBuilder('a')
  618.             ->select('count(a.id)')
  619.             ->andWhere("a.user_id = (:user)")
  620.             ->andWhere("a.approved = 1")
  621.             ->setParameter('user'$fossil->getUserId())
  622.             ->getQuery()
  623.             ->getSingleScalarResult();
  624.         $repository $em->getRepository(User::class);
  625.         $user $repository->findOneBy(array('id' => $fossil->getUserId()));
  626.         $repository $this->getDoctrine()->getRepository(UserProfile::class);
  627.         $userprofile $repository->findOneBy(array('user' => $user));
  628.         if(!$userprofile) {
  629.             $userprofile = new UserProfile();
  630.             $userprofile->setUser($user);
  631.         }
  632.         $userprofile->setLocationFossilSubmissions($totalsubmissions);
  633.         $em->persist($userprofile);
  634.         $em->flush();
  635.         $this->addFlash('success'$translator->trans("Fossielenlocatie en coördinaten verwijderd"));
  636.         return $this->redirectToRoute('locations_fossil_moderate');
  637.     }
  638.     /**
  639.      * @Route("/api/v1/locations/fossil", methods="GET", name="api_locations_fossil")
  640.      */
  641.     public function api_locations_fossil(LocationsFossilRepository $LocationsFossilRepositoryRequest $requestTranslatorInterface $translator)
  642.     {
  643.         $articles $LocationsFossilRepository->findAllMatching($request->query->get('query'));
  644.         $return = array();
  645.         foreach($articles as $item) {
  646.             if($translator->getLocale() == 'nl') {
  647.                 $name $item->getNameNl();
  648.             } else {
  649.                 $name $item->getNameEn();
  650.             }
  651.             $return[] = array(
  652.                 'id' => $item->getId(),
  653.                 'value' => $name,
  654.             );
  655.         }
  656.         return $this->json($return200, [], ['groups' => ['main']]);
  657.     }
  658. }