<?php
namespace App\Controller;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Session\SessionInterface;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Method;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Component\HttpFoundation\Request;
use JMS\Serializer\SerializerBuilder;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\RouterInterface;
use App\Entity\LocationsFossil;
use App\Entity\Countries;
use App\Entity\Newsfeed;
use App\Entity\User;
use App\Entity\UserProfile;
use App\Entity\LocationsGIS;
use App\Entity\LocationsGISNearby;
use App\Entity\Spool;
use App\Entity\SearchItems;
use App\Repository\LocationsFossilRepository;
use App\Form\LocationsFossilFormType;
use App\Form\LocationsUserFossilFormType;
use App\Form\LocationFilterSearchFormType;
use Symfony\Contracts\Translation\TranslatorInterface;
class LocationsFossilController extends AbstractController
{
private $session;
private $em;
private $translator;
private $router;
public function __construct(EntityManagerInterface $em, TranslatorInterface $translator, RouterInterface $router, SessionInterface $session)
{
$this->em = $em;
$this->translator = $translator;
$this->router = $router;
$this->session = $session;
}
private function get_locations_fossil_new(TranslatorInterface $translator) {
$repository = $this->getDoctrine()->getRepository(LocationsFossil::class);
$new = $repository->findBy(array('approved' => 0),array('num_new_photos' => 'DESC', 'num_reviews' => 'DESC', 'location' => 'ASC'));
return $new;
}
private function get_locations_fossil_approved(TranslatorInterface $translator) {
$repository = $this->getDoctrine()->getRepository(LocationsFossil::class);
$approved = $repository->findBy(array('approved' => 1),array('num_new_photos' => 'DESC', 'num_reviews' => 'DESC', 'location' => 'ASC'));
return $approved;
}
private function get_locations_fossil_filtered($filter) {
$qb = $this->em->createQueryBuilder('l')
->from('App\Entity\LocationsFossil', 'l')
->addSelect('l')
->orderBy('l.id','DESC')
->AddOrderBy('l.approved','DESC')
->AddOrderBy('l.num_new_photos','DESC')
->AddOrderBy('l.num_reviews','ASC')
;
if($filter['property'] == 'new') {
$qb->andWhere("l.approved = 0");
}
elseif($filter['property'] == 'reviews') {
$qb->andWhere("l.num_reviews > 0");
}
elseif($filter['property'] == 'photos') {
$qb->andWhere("l.num_new_photos > 0");
}
$result = $qb->getQuery()->getResult();
return $result;
}
private function get_locations_fossil_by_id(int $id) {
$repository = $this->getDoctrine()->getRepository(LocationsFossil::class);
$item = $repository->findOneBy(array('id'=>$id));
return $item;
}
/**
* @Route("/locations/fossil/{id}" , name="locations_fossil")
*/
public function index(LocationsFossil $fossil, TranslatorInterface $translator, EntityManagerInterface $em)
{
if($this->getUser() == null){
$filterby['vulnerability'] = array('public');
} else {
$vulnerability = $this->getUser()->getCanSeeVulnerability();
if($vulnerability == 'very') { $filterby['vulnerability'] = array('public','slightly','moderate','very'); }
elseif($vulnerability == 'moderate') { $filterby['vulnerability'] = array('public','slightly','moderate'); }
elseif($vulnerability == 'slightly') { $filterby['vulnerability'] = array('public','slightly'); }
else { $filterby['vulnerability'] = array('public'); }
}
$filterby['approved'] = 1;
$filterby['fossil'] = $fossil;
$repository = $this->getDoctrine()->getRepository(LocationsGIS::class);
$gis = $repository->findBy($filterby);
if($fossil->getApproved() == 0 || empty($gis) ) {
return $this->render('error_message.html.twig', [
'error_title' => $translator->trans("Fout"),
'error_message' => $translator->trans("Deze locatie bestaat niet of je hebt geen rechten deze in te zien."),
]);
}
#ToDo-Ante: alleen voor deze locatie, niet voor allen
$qb = $em->createQueryBuilder('f')
->from('App\Entity\FossildbFossil', 'f')
->select('count(f.id)')
->andWhere('f.location_fossil = (:fossil_id)')
->andWhere('f.approved = 1')
->setParameter('fossil_id', $fossil->getId());
$fossils_found = $qb->getQuery()->getSingleScalarResult();
/*$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
$query->setParameter('find_latmin', $gis[0]->getCenterLat()-0.5);
$query->setParameter('find_latmax', $gis[0]->getCenterLat()+0.5);
$query->setParameter('find_lngmin', $gis[0]->getCenterLng()-0.5);
$query->setParameter('find_lngmax', $gis[0]->getCenterLng()+0.5);
//$query->setParameter('fossil_id', $fossil->getId());
$gis_locations_nearby = $query->getResult();
dd($gis_locations_nearby);*/
$locations_nearby=array();
$repository = $this->getDoctrine()->getRepository(LocationsGISNearby::class);
$gis_nearby = $repository->findBy(array('gis' => $gis[0]->getId()),array('type' => 'ASC'));
if(count($gis_nearby) == 0) {
$locations = $fossil->getLocationsGIS()->toArray();
$this->forward('App\Controller\LocationsController:find_nearby', [
'item' => $locations[0],
'em' => $em,
]);
$gis_nearby = $repository->findBy(array('gis' => $gis[0]->getId()),array('type' => 'ASC'));
}
foreach ($gis_nearby as $key => $location) {
$repository = $this->getDoctrine()->getRepository(LocationsGIS::class);
$filternearby['vulnerability']=$filterby['vulnerability'];
$filternearby['approved']=$filterby['approved'];
$filternearby['id']=$location->getNearbyGIS()->getId();
$locations_nearby[] = $repository->findOneBy($filternearby);
}
return $this->render('locations_fossil.html.twig', [
'fossil' => $fossil,
//'gis' => $gis,
'locations_nearby' => $locations_nearby,
'type' => 'fossil',
'id' => $fossil->getId(),
'all_locations' => false,
'filterby' => $filterby,
'types' => array('fossil'),
'country' => null,
'fossils_found' => $fossils_found,
]);
}
/**
* @Route("/moderate/fossils", name="locations_fossil_moderate")
*/
public function moderate(Request $request, TranslatorInterface $translator)
{
$this->denyAccessUnlessGranted('ROLE_MOD_LOCATIONS');
$form = $this->createForm(LocationFilterSearchFormType::class);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()){
$filter = $form->getData();
} else {
$filter=array('property' => array());
}
$locations = $this->get_locations_fossil_filtered($filter);
return $this->render('locations_fossil_moderate.html.twig', [
'items' => $locations,
'form' => $form->createView()
]);
}
/**
* @Route("/fossil/add", name="locations_fossil_user_add")
*/
public function user_add(EntityManagerInterface $em, Request $request, TranslatorInterface $translator)
{
$this->denyAccessUnlessGranted('ROLE_USER');
if($_ENV['DISABLE_FORMS'] == "true") { return $this->render('maintenance_form_disabled.html.twig'); }
$repository = $this->getDoctrine()->getRepository(Countries::class);
$countries = $repository->findAll();
$form = $this->createForm(LocationsUserFossilFormType::class);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()){
$form_data = $form->getData();
$fossil = new LocationsFossil();
$fossil->setNameNl($form_data["name_nl"]);
$fossil->setNameEn($form_data["name_en"]);
$fossil->setDescriptionEn($form_data["description_en"]);
$fossil->getLocation($form_data["location"]);
$fossil->setDescriptionNl($form_data["description_nl"]);
$fossil->setDescriptionEn($form_data["description_en"]);
$fossil->setLocation($form_data["location"]);
$fossil->setCountry($form_data["country"]);
$fossil->setClosed($form_data["closed"]);
$fossil->setIsQuaternary($form_data["is_quaternary"]);
$fossil->setIsNeogene($form_data["is_neogene"]);
$fossil->setIsPaleogene($form_data["is_paleogene"]);
$fossil->setIsCretaceous($form_data["is_cretaceous"]);
$fossil->setIsJurassic($form_data["is_jurassic"]);
$fossil->setIsTriassic($form_data["is_triassic"]);
$fossil->setIsPermian($form_data["is_permian"]);
$fossil->setIsCarboniferous($form_data["is_carboniferous"]);
$fossil->setIsDevonian($form_data["is_devonian"]);
$fossil->setIsSilurian($form_data["is_silurian"]);
$fossil->setIsOrdovician($form_data["is_ordovician"]);
$fossil->setIsCambrian($form_data["is_cambrian"]);
$fossil->setIsPrecambrian($form_data["is_precambrian"]);
$fossil->setHasDinosauria($form_data["has_dinosauria"]);
$fossil->setHasChlorophyta($form_data["has_chlorophyta"]);
$fossil->setHasBelemnoidea($form_data["has_belemnoidea"]);
$fossil->setHasBivalvia($form_data["has_bivalvia"]);
$fossil->setHasBrachiopoda($form_data["has_brachiopoda"]);
$fossil->setHasBryozoa($form_data["has_bryozoa"]);
$fossil->setHasAmmonitida($form_data["has_ammonitida"]);
$fossil->setHasNautiloidea($form_data["has_nautiloidea"]);
$fossil->setHasCrinoidea($form_data["has_crinoidea"]);
$fossil->setHasForaminifera($form_data["has_foraminifera"]);
$fossil->setHasGastropoda($form_data["has_gastropoda"]);
$fossil->setHasHemichordata($form_data["has_hemichordata"]);
$fossil->setHasHexapoda($form_data["has_hexapoda"]);
$fossil->setHasAnthozoa($form_data["has_anthozoa"]);
$fossil->setHasCrustacea($form_data["has_crustacea"]);
$fossil->setHasMammaliaterrestrium($form_data["has_mammaliaterrestrium"]);
$fossil->setHasOstracoda($form_data["has_ostracoda"]);
$fossil->setHasAngiospermae($form_data["has_angiospermae"]);
$fossil->setHasConiferophyta($form_data["has_coniferophyta"]);
$fossil->setHasCycadophyta($form_data["has_cycadophyta"]);
$fossil->setHasLycophyta($form_data["has_lycophyta"]);
$fossil->setHasPteridophyta($form_data["has_pteridophyta"]);
$fossil->setHasPteridospermophyta($form_data["has_pteridospermophyta"]);
$fossil->setHasSphenophyta($form_data["has_sphenophyta"]);
$fossil->setHasRudista($form_data["has_rudista"]);
$fossil->setHasPolychaeta($form_data["has_polychaeta"]);
$fossil->setHasPorifera($form_data["has_porifera"]);
$fossil->setHasIchnofossilia($form_data["has_ichnofossilia"]);
$fossil->setHasTrilobita($form_data["has_trilobita"]);
$fossil->setHasElasmobranchii($form_data["has_elasmobranchii"]);
$fossil->setHasBatoidea($form_data["has_batoidea"]);
$fossil->setHasAves($form_data["has_aves"]);
$fossil->setHasEchinoidea($form_data["has_echinoidea"]);
$fossil->setHasMammaliamarinis($form_data["has_mammaliamarinis"]);
$fossil->setHasBacteria($form_data["has_bacteria"]);
$fossil->setHasArchaebacteria($form_data["has_archaebacteria"]);
$fossil->setHasPhaeophyceae($form_data["has_phaeophyceae"]);
$fossil->setHasDiatomophyceae($form_data["has_diatomophyceae"]);
$fossil->setHasRadiolaria($form_data["has_radiolaria"]);
$fossil->setHasChoanoflagellata($form_data["has_choanoflagellata"]);
$fossil->setHasMedusozoa($form_data["has_medusozoa"]);
$fossil->setHasAsterozoa($form_data["has_asterozoa"]);
$fossil->setHasBlastoidea($form_data["has_blastoidea"]);
$fossil->setHasCystoidea($form_data["has_cystoidea"]);
$fossil->setHasAgnatha($form_data["has_agnatha"]);
$fossil->setHasPlacodermi($form_data["has_placodermi"]);
$fossil->setHasChimaeriformes($form_data["has_chimaeriformes"]);
$fossil->setHasActinopterygii($form_data["has_actinopterygii"]);
$fossil->setHasSarcopterygii($form_data["has_sarcopterygii"]);
$fossil->setHasDipnoi($form_data["has_dipnoi"]);
$fossil->setHasAmphibia($form_data["has_amphibia"]);
$fossil->setHasAnapsida($form_data["has_anapsida"]);
$fossil->setHasSquamata($form_data["has_squamata"]);
$fossil->setHasSauropterygia($form_data["has_sauropterygia"]);
$fossil->setHasIchthyosauria($form_data["has_ichthyosauria"]);
$fossil->setHasCrocodylomorpha($form_data["has_crocodylomorpha"]);
$fossil->setHasPterosauria($form_data["has_pterosauria"]);
$fossil->setHasPlatyzoa($form_data["has_platyzoa"]);
$fossil->setHasAnnelida($form_data["has_annelida"]);
$fossil->setHasPolyplacophora($form_data["has_polyplacophora"]);
$fossil->setHasScaphopoda($form_data["has_scaphopoda"]);
$fossil->setHasNautilida($form_data["has_nautilida"]);
$fossil->setHasGoniatitida($form_data["has_goniatitida"]);
$fossil->setHasCeratitida($form_data["has_ceratitida"]);
$fossil->setHasNeocoleoidea($form_data["has_neocoleoidea"]);
$fossil->setHasArachnida($form_data["has_arachnida"]);
$fossil->setHasMerostomata($form_data["has_merostomata"]);
$fossil->setHasMyriapoda($form_data["has_myriapoda"]);
$fossil->setHasFungi($form_data["has_fungi"]);
$fossil->setHasMycetozoa($form_data["has_mycetozoa"]);
$fossil->setHasGinkgophyta($form_data["has_ginkgophyta"]);
$fossil->setHasBryophyta($form_data["has_bryophyta"]);
$fossil->setHasIncertaesedis($form_data["has_incertaesedis"]);
$fossil->setVulnerability($form_data["vulnerability"]);
$fossil->setUserId($this->getUser()->getId());
$fossil->setUsername($this->getUser()->getUsername());
$fossil->setDateAdded(new \DateTime());
$fossil->setApproved(0);
$fossil->setNumReviews(0);
$fossil->setNumNewPhotos(0);
$em->persist($fossil);
$em->flush();
$gis = new LocationsGIS();
$gis->setNameNl($fossil->getLocation());
$gis->setNameEn($fossil->getLocation());
$gis->setShape($form_data["shape"]);
$gis->setData($form_data["data"]);
$gis->setRadius($form_data["radius"]);
$gis->setCenterLat($form_data["center_lat"]);
$gis->setCenterLng($form_data["center_lng"]);
$gis->setVulnerability($form_data["vulnerability"]);
$gis->setCountry($fossil->getCountry());
$gis->setUserId($this->getUser()->getId());
$gis->setUsername($this->getUser()->getUsername());
$gis->setApproved('0');
$gis->setType('fossil');
$gis->setFossil($fossil);
$em->persist($gis);
$em->flush();
$this->addFlash('success', $translator->trans("Fossielenlocatie toegevoegd aan de wachtlijst voor goedkeuring."));
return $this->redirectToRoute('locations_user_add');
}
return $this->render('locations_add_location_fossil.html.twig', [
'title' => $translator->trans("Fossielenlocatie toevoegen"),
'form' => $form->createView(),
'gis' => array(),
'countries' => $countries,
'type' => 'user_fossil',
'form_name' => 'locations_user_fossil',
'show_map' => true
]);
}
/**
* @Route("/moderate/fossil/add", name="locations_fossil_moderate_add")
*/
public function add( EntityManagerInterface $em, Request $request, TranslatorInterface $translator)
{
$this->denyAccessUnlessGranted('ROLE_MOD_LOCATIONS');
$form = $this->createForm(LocationsFossilFormType::class);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()){
$fossil = $form->getData();
$fossil->setUserId($this->getUser()->getId());
$fossil->setUsername($this->getUser()->getUsername());
$fossil->setDateAdded(new \DateTime());
$fossil->setApproved(0);
$fossil->setNumReviews(0);
$fossil->setNumNewPhotos(0);
$em->persist($fossil);
$em->flush();
$this->addFlash('success', $translator->trans("Fossielenlocatie toegevoegd"));
return $this->redirectToRoute('locations_gis_item_moderate', array('type' => 'fossil', 'id' => $fossil->getId()));
}
return $this->render('locations_add_location_fossil.html.twig', [
'title' => $translator->trans("Fossielenlocatie toevoegen"),
'form' => $form->createView(),
'gis' => array(),
'countries' => array(),
'type' => 'fossil',
'form_name' => 'location_fossil',
'button_text' => $translator->trans("Toevoegen")
]);
}
/**
* @Route("/moderate/fossil/{id}/edit", name="locations_fossil_moderate_edit")
*/
public function edit(int $id, LocationsFossil $fossil, EntityManagerInterface $em, Request $request, TranslatorInterface $translator)
{
$this->denyAccessUnlessGranted('ROLE_MOD_LOCATIONS');
$fossil = $this->get_locations_fossil_by_id($id);
$old_vulnerability = $fossil->getVulnerability();
$form = $this->createForm(LocationsFossilFormType::class, $fossil);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$fossil = $form->getData();
$fossil->setDateReviewed(new \DateTime());
$em->persist($fossil);
$em->flush();
$spool = new Spool();
$spool->setCommand("geojson:locations");
$spool->setArguments(serialize(array('vulnerability' => $fossil->getVulnerability(), 'type' => 'fossil')));
$em->persist($spool);
$em->flush();
if($fossil->getVulnerability() != $old_vulnerability) {
$vulnerability = '';
$spool = new Spool();
$spool->setCommand("geojson:locations");
$spool->setArguments(serialize(array('vulnerability' => $old_vulnerability, 'type' => 'fossil')));
$em->persist($spool);
$em->flush();
}
if ($fossil->getApproved() == 1){
$fossil->setApprovedUserId($this->getUser()->getId());
$fossil->setApprovedUsername($this->getUser()->getUsername());
$newsfeed = new Newsfeed();
$newsfeed->setTitleNl($fossil->getLocation());
$newsfeed->setTitleEn($fossil->getLocation());
$newsfeed->setRemoteId($fossil->getId());
$newsfeed->setType('locations_fossil');
$newsfeed->setIsUpdate(1);
$newsfeed->setTime(new \DateTime());
$em = $this->getDoctrine()->getManager();
$em->persist($newsfeed);
$em->flush();
$repository = $em->getRepository(SearchItems::class);
$searchitem = $repository->findOneBy(array('path' => $this->router->generate('locations_fossil', [ 'id' => $fossil->getId()]) ));
if(!$searchitem) {
$searchitem = new SearchItems();
}
$searchitem->setType('locations_fossil');
$searchitem->setPath($this->router->generate('locations_fossil', [ 'id' => $fossil->getId()]));
$searchitem->setNameNl($fossil->getNameNl());
$searchitem->setNameEn($fossil->getNameEn());
$searchitem->setKeywordsNl($fossil->getNameNl());
$searchitem->setKeywordsEn($fossil->getNameEn());
if(empty($fossil->getDateReviewed())) {
$searchitem->setLastUpdateTime($fossil->getDateAdded());
} else {
$searchitem->setLastUpdateTime($fossil->getDateReviewed());
}
$this->em->persist($searchitem);
$repository = $em->getRepository(LocationsFossil::class);
$totalsubmissions = $repository->createQueryBuilder('a')
->select('count(a.id)')
->andWhere("a.user_id = (:user)")
->andWhere("a.approved = 1")
->setParameter('user', $fossil->getUserId())
->getQuery()
->getSingleScalarResult();
$repository = $em->getRepository(User::class);
$user = $repository->findOneBy(array('id' => $fossil->getUserId()));
$repository = $this->getDoctrine()->getRepository(UserProfile::class);
$userprofile = $repository->findOneBy(array('user' => $user));
if(!$userprofile) {
$userprofile = new UserProfile();
$userprofile->setUser($user);
}
$userprofile->setLocationFossilSubmissions($totalsubmissions);
$em->persist($userprofile);
$em->flush();
}
$this->addFlash('success', $translator->trans("Fossielenlocatie bijgewerkt"));
return $this->redirectToRoute('locations_fossil_moderate');
}
return $this->render('locations_add_location_fossil.html.twig', [
'title' => $translator->trans("Fossielenlocatie bewerken"),
'form' => $form->createView(),
'gis' => array(),
'countries' => array(),
'type' => 'fossil',
'form_name' => 'locations_fossil',
'button_text' => $translator->trans("Bewerken")
]);
}
/**
* @Route("/moderate/fossil/{id}/revoke", name="locations_fossil_moderate_revoke")
*/
public function moderate_revoke(int $id, LocationsFossil $fossil, EntityManagerInterface $em, TranslatorInterface $translator)
{
$this->denyAccessUnlessGranted('ROLE_MOD_LOCATIONS');
$fossil->setApprovedUserId($this->getUser()->getId());
$fossil->setApprovedUsername($this->getUser()->getUsername());
$fossil->setApproved('0');
$em->persist($fossil);
$em->flush();
$repository = $this->getDoctrine()->getRepository(LocationsGIS::class);
$gis = $repository->findBy(array('fossil' => $fossil));
foreach ($gis as $key => $location) {
$this->forward('App\Controller\LocationsController:remove_nearby', [
'item' => $location,
'em' => $em,
]);
$location->setApproved('0');
$em->persist($location);
$em->flush();
}
$spool = new Spool();
$spool->setCommand("geojson:locations");
$spool->setArguments(serialize(array('vulnerability' => $fossil->getVulnerability(), 'type' => 'fossil')));
$em->persist($spool);
$em->flush();
$repository = $em->getRepository(SearchItems::class);
$searchitem = $repository->findOneBy(array('path' => $this->router->generate('locations_fossil', [ 'id' => $fossil->getId()]) ));
if($searchitem){
$em->remove($searchitem);
$em->flush();
}
$repository = $em->getRepository(LocationsFossil::class);
$totalsubmissions = $repository->createQueryBuilder('a')
->select('count(a.id)')
->andWhere("a.user_id = (:user)")
->andWhere("a.approved = 1")
->setParameter('user', $fossil->getUserId())
->getQuery()
->getSingleScalarResult();
$repository = $em->getRepository(User::class);
$user = $repository->findOneBy(array('id' => $fossil->getUserId()));
$repository = $this->getDoctrine()->getRepository(UserProfile::class);
$userprofile = $repository->findOneBy(array('user' => $user));
if(!$userprofile) {
$userprofile = new UserProfile();
$userprofile->setUser($user);
}
$userprofile->setLocationFossilSubmissions($totalsubmissions);
$em->persist($userprofile);
$em->flush();
$this->addFlash('success', $translator->trans("Fossielenlocatie ingetrokken"));
return $this->redirectToRoute('locations_fossil_moderate');
}
/**
* @Route("/moderate/fossil/{id}/approve", name="locations_fossil_moderate_approve")
*/
public function moderate_approve(int $id, LocationsFossil $fossil, EntityManagerInterface $em, TranslatorInterface $translator)
{
$this->denyAccessUnlessGranted('ROLE_MOD_LOCATIONS');
$LocationsGIS = $fossil->getLocationsGIS()->toArray();
$has_approved_locations=0;
foreach ($LocationsGIS as $key => $item) {
if($item->getApproved() == true ){
$has_approved_locations++;
}
}
if (count($fossil->getLocationsGIS()) <= 0) {
$this->addFlash('error', $translator->trans("Locatie heeft geen coördinaten en kan daarom niet goedgekeurd worden"));
return $this->redirectToRoute('locations_fossil_moderate');
} elseif ($has_approved_locations <= 0) {
$this->addFlash('error', $translator->trans("Locatie heeft geen goedgekeurde coördinaten en kan daarom niet goedgekeurd worden"));
return $this->redirectToRoute('locations_fossil_moderate');
} else {
$fossil->setApprovedUserId($this->getUser()->getId());
$fossil->setApprovedUsername($this->getUser()->getUsername());
$fossil->setApproved('1');
$em->persist($fossil);
$em->flush();
$spool = new Spool();
$spool->setCommand("geojson:locations");
$spool->setArguments(serialize(array('vulnerability' => $fossil->getVulnerability(), 'type' => 'fossil')));
$em->persist($spool);
$em->flush();
$newsfeed = new Newsfeed();
$newsfeed->setTitleNl($fossil->getLocation());
$newsfeed->setTitleEn($fossil->getLocation());
$newsfeed->setRemoteId($fossil->getId());
$newsfeed->setType('locations_fossil');
$newsfeed->setTime(new \DateTime());
$newsfeed->setIsUpdate(0);
$em = $this->getDoctrine()->getManager();
$em->persist($newsfeed);
$em->flush();
$repository = $em->getRepository(SearchItems::class);
$searchitem = $repository->findOneBy(array('path' => $this->router->generate('locations_fossil', [ 'id' => $fossil->getId()]) ));
if(!$searchitem) {
$searchitem = new SearchItems();
}
$searchitem->setType('locations_fossil');
$searchitem->setPath($this->router->generate('locations_fossil', [ 'id' => $fossil->getId()]));
$searchitem->setNameNl($fossil->getNameNl());
$searchitem->setNameEn($fossil->getNameEn());
$searchitem->setKeywordsNl($fossil->getNameNl());
$searchitem->setKeywordsEn($fossil->getNameEn());
if(empty($fossil->getDateReviewed())) {
$searchitem->setLastUpdateTime($fossil->getDateAdded());
} else {
$searchitem->setLastUpdateTime($fossil->getDateReviewed());
}
$this->em->persist($searchitem);
$repository = $em->getRepository(LocationsFossil::class);
$totalsubmissions = $repository->createQueryBuilder('a')
->select('count(a.id)')
->andWhere("a.user_id = (:user)")
->andWhere("a.approved = 1")
->setParameter('user', $fossil->getUserId())
->getQuery()
->getSingleScalarResult();
$repository = $em->getRepository(User::class);
$user = $repository->findOneBy(array('id' => $fossil->getUserId()));
$repository = $this->getDoctrine()->getRepository(UserProfile::class);
$userprofile = $repository->findOneBy(array('user' => $user));
if(!$userprofile) {
$userprofile = new UserProfile();
$userprofile->setUser($user);
}
$userprofile->setLocationFossilSubmissions($totalsubmissions);
$em->persist($userprofile);
$em->flush();
$locations = $fossil->getLocationsGIS()->toArray();
$this->forward('App\Controller\LocationsController:find_nearby', [
'item' => $locations[0],
'em' => $em,
]);
$this->addFlash('success', $translator->trans("Fossielenlocatie goedgekeurd"));
return $this->redirectToRoute('locations_fossil_moderate');
}
}
/**
* @Route("/moderate/fossil/{id}/delete", name="locations_fossil_moderate_delete")
*/
public function moderate_delete(int $id, LocationsFossil $fossil, EntityManagerInterface $em, TranslatorInterface $translator)
{
$this->denyAccessUnlessGranted('ROLE_MOD_LOCATIONS');
$old_vulnerability = $fossil->getVulnerability();
$repository = $em->getRepository(SearchItems::class);
$searchitem = $repository->findOneBy(array('path' => $this->router->generate('locations_fossil', [ 'id' => $fossil->getId()]) ));
if($searchitem){
$em->remove($searchitem);
$em->flush();
}
$repository = $this->getDoctrine()->getRepository(LocationsGIS::class);
$gis = $repository->findBy(array('fossil' => $fossil));
foreach ($gis as $key => $location) {
$this->forward('App\Controller\LocationsController:remove_nearby', [
'item' => $location,
'em' => $em,
]);
$em->remove($location);
$em->flush();
}
$em->remove($fossil);
$em->flush();
$spool = new Spool();
$spool->setCommand("geojson:locations");
$spool->setArguments(serialize(array('vulnerability' => $old_vulnerability, 'type' => 'fossil')));
$em->persist($spool);
$em->flush();
$repository = $em->getRepository(LocationsFossil::class);
$totalsubmissions = $repository->createQueryBuilder('a')
->select('count(a.id)')
->andWhere("a.user_id = (:user)")
->andWhere("a.approved = 1")
->setParameter('user', $fossil->getUserId())
->getQuery()
->getSingleScalarResult();
$repository = $em->getRepository(User::class);
$user = $repository->findOneBy(array('id' => $fossil->getUserId()));
$repository = $this->getDoctrine()->getRepository(UserProfile::class);
$userprofile = $repository->findOneBy(array('user' => $user));
if(!$userprofile) {
$userprofile = new UserProfile();
$userprofile->setUser($user);
}
$userprofile->setLocationFossilSubmissions($totalsubmissions);
$em->persist($userprofile);
$em->flush();
$this->addFlash('success', $translator->trans("Fossielenlocatie en coördinaten verwijderd"));
return $this->redirectToRoute('locations_fossil_moderate');
}
/**
* @Route("/api/v1/locations/fossil", methods="GET", name="api_locations_fossil")
*/
public function api_locations_fossil(LocationsFossilRepository $LocationsFossilRepository, Request $request, TranslatorInterface $translator)
{
$articles = $LocationsFossilRepository->findAllMatching($request->query->get('query'));
$return = array();
foreach($articles as $item) {
if($translator->getLocale() == 'nl') {
$name = $item->getNameNl();
} else {
$name = $item->getNameEn();
}
$return[] = array(
'id' => $item->getId(),
'value' => $name,
);
}
return $this->json($return, 200, [], ['groups' => ['main']]);
}
}