diff --git a/src/Controller/FindingController.php b/src/Controller/FindingController.php index 7360bee..e56b2ed 100644 --- a/src/Controller/FindingController.php +++ b/src/Controller/FindingController.php @@ -17,7 +17,7 @@ class FindingController extends AbstractController { $repo = $em->getRepository(Finding::class); - $findings = $repo->findAll(); + $findings = $repo->findBy([], ['label' => 'ASC']); foreach($findings as $key => $finding) { $coords = $repo->coordinates($finding->getId()); diff --git a/src/Controller/NotConservedController.php b/src/Controller/NotConservedController.php index 9db20f1..71518b8 100644 --- a/src/Controller/NotConservedController.php +++ b/src/Controller/NotConservedController.php @@ -20,7 +20,7 @@ class NotConservedController extends AbstractController //$repoBib = $em->getRepository(Bibliography::class); $repoImg = $em->getRepository(Image::class); - $records = $repo->findBy([], ['id' => 'ASC']); + $records = $repo->findBy([], ['label' => 'ASC']); // Terrible? N+1.. foreach ($records as $key => $record) { diff --git a/src/Controller/PrehistoricController.php b/src/Controller/PrehistoricController.php index 25fb1cb..3f6727e 100644 --- a/src/Controller/PrehistoricController.php +++ b/src/Controller/PrehistoricController.php @@ -18,7 +18,7 @@ class PrehistoricController extends AbstractController $repo = $em->getRepository(Prehistoric::class); //$repoBib = $em->getRepository(Bibliography::class); - $records = $repo->findBy([], ['id' => 'ASC']); + $records = $repo->findBy([], ['label' => 'ASC']); // Terrible? N+1.. foreach ($records as $key => $record) { diff --git a/src/Controller/SiteController.php b/src/Controller/SiteController.php index ccea64f..f430412 100644 --- a/src/Controller/SiteController.php +++ b/src/Controller/SiteController.php @@ -20,30 +20,30 @@ class SiteController extends AbstractController { $repo = $em->getRepository(Site::class); - $sites = $repo->findAll(); + $sites = $repo->findBy([], ['label' => 'ASC']); // TODO N+1... foreach($sites as $key => $site) { $coords = $repo->coordinates($site->getId()); $site->setLat($coords['lat']); $site->setLng($coords['lng']); - $sites[$key] = $site; - $repo = $em->getRepository(Image::class); + $repoImg = $em->getRepository(Image::class); $images = new ArrayCollection( - $repo->findBy( + $repoImg->findBy( ['site' => $site->getId()], ['sequence' => 'ASC'] ) ); - $repo = $em->getRepository(Document::class); - $documents = $repo->findBySite($site->getId()); - $repo = $em->getRepository(Bibliography::class); - $bibliography = $repo->findAllBySite($site->getId()); + $repoDocs = $em->getRepository(Document::class); + $documents = $repoDocs->findBySite($site->getId()); + $repoBib = $em->getRepository(Bibliography::class); + $bibliography = $repoBib->findAllBySite($site->getId()); $site->setImages($images); $site->setDocuments($documents); $site->setBibliography($bibliography); - $repo = $em->getRepository(Site::class); + + $sites[$key] = $site; } return $this->json($sites); diff --git a/src/Entity/Finding.php b/src/Entity/Finding.php index b4b61b0..99aecae 100644 --- a/src/Entity/Finding.php +++ b/src/Entity/Finding.php @@ -49,6 +49,12 @@ class Finding implements \JsonSerializable #[ORM\Column(length: 40, nullable: true, name: 'misure')] private ?string $measurements = null; + #[ORM\Column(name: 'comune', length: 10, nullable: false)] + private ?string $municipality = null; + + #[ORM\Column(name: 'etichetta', length: 150, nullable: false)] + private ?string $label = null; + private ?float $lat = null; private ?float $lng = null; @@ -207,6 +213,30 @@ class Finding implements \JsonSerializable return $this; } + public function getLabel(): ?string + { + return $this->label; + } + + public function setLabel(?string $label): static + { + $this->label = $label; + + return $this; + } + + public function getMunicipality(): ?string + { + return $this->municipality; + } + + public function setMunicipality(?string $municipality): static + { + $this->municipality = $municipality; + + return $this; + } + public function getLat(): ?float { return $this->lat; @@ -269,6 +299,8 @@ class Finding implements \JsonSerializable 'conservationPlace' => $this->conservationPlace, 'description' => $this->description, 'author' => $this->author, + 'label' => $this->label, + 'municipality' => $this->municipality, 'coordinates' => [$this->lat, $this->lng], 'bibliography' => $this->bibliography, 'images' => $this->images, diff --git a/src/Entity/NotConserved.php b/src/Entity/NotConserved.php index 730ebe0..d99352c 100644 --- a/src/Entity/NotConserved.php +++ b/src/Entity/NotConserved.php @@ -45,6 +45,12 @@ class NotConserved implements \JsonSerializable #[ORM\Column(name: 'autore_scheda', length: 100, nullable: true)] private ?string $author = null; + #[ORM\Column(name: 'comune', length: 10, nullable: false)] + private ?string $municipality = null; + + #[ORM\Column(name: 'etichetta', length: 100, nullable: false)] + private ?string $label = null; + /** * @var Image[] $images */ @@ -170,6 +176,30 @@ class NotConserved implements \JsonSerializable return $this; } + public function getLabel(): ?string + { + return $this->label; + } + + public function setLabel(?string $label): static + { + $this->label = $label; + + return $this; + } + + public function getMunicipality(): ?string + { + return $this->municipality; + } + + public function setMunicipality(?string $municipality): static + { + $this->municipality = $municipality; + + return $this; + } + /** * @return Image[] */ @@ -198,6 +228,8 @@ class NotConserved implements \JsonSerializable 'period' => $this->period, 'shortDescription' => $this->shortDescription, 'author' => $this->author, + 'municipality' => $this->municipality, + 'label' => $this->label, 'bibliography' => $this->bibliographies, 'documents' => $this->documents, 'images' => $this->images, diff --git a/src/Entity/Prehistoric.php b/src/Entity/Prehistoric.php index 7f43b9d..3645660 100644 --- a/src/Entity/Prehistoric.php +++ b/src/Entity/Prehistoric.php @@ -33,6 +33,12 @@ class Prehistoric implements \JsonSerializable #[ORM\Column(length: 255, nullable: true, name: 'autore_scheda')] private ?string $author = null; + #[ORM\Column(name: 'comune', length: 10, nullable: false)] + private ?string $municipality = null; + + #[ORM\Column(name: 'etichetta', length: 150, nullable: false)] + private ?string $label = null; + private ?float $lat; private ?float $lng; @@ -167,6 +173,30 @@ class Prehistoric implements \JsonSerializable return $this; } + + public function getLabel(): ?string + { + return $this->label; + } + + public function setLabel(?string $label): static + { + $this->label = $label; + + return $this; + } + + public function getMunicipality(): ?string + { + return $this->municipality; + } + + public function setMunicipality(?string $municipality): static + { + $this->municipality = $municipality; + + return $this; + } public function jsonSerialize(): array { @@ -178,6 +208,8 @@ class Prehistoric implements \JsonSerializable 'conservation' => $this->conservation, 'author' => $this->author, 'description' => $this->description, + 'label' => $this->label, + 'municipality' => $this->municipality, 'coordinates' => [$this->lat, $this->lng], 'images' => $this->images, ]; diff --git a/src/Entity/Underwater.php b/src/Entity/Underwater.php index e391cdc..1835d8d 100644 --- a/src/Entity/Underwater.php +++ b/src/Entity/Underwater.php @@ -33,6 +33,9 @@ class Underwater implements JsonSerializable #[ORM\Column(length: 80, nullable: true, name: 'autore_scheda')] private ?string $author = null; + + #[ORM\Column(length: 80, nullable: false, name: 'etichetta')] + private ?string $label = null; private ?float $lat = null; @@ -122,6 +125,18 @@ class Underwater implements JsonSerializable return $this; } + public function getLabel(): ?string + { + return $this->label; + } + + public function setLabel(?string $label): static + { + $this->label = $label; + + return $this; + } + public function getLat(): ?float { return $this->lat; @@ -157,6 +172,7 @@ class Underwater implements JsonSerializable 'conservationState' => $this->conservationState, 'shortDescription' => $this->shortDescription, 'author' => $this->author, + 'label' => $this->label, ]; } } diff --git a/src/Repository/BibliographyRepository.php b/src/Repository/BibliographyRepository.php index 9d75107..736cd24 100644 --- a/src/Repository/BibliographyRepository.php +++ b/src/Repository/BibliographyRepository.php @@ -22,74 +22,104 @@ class BibliographyRepository extends ServiceEntityRepository */ public function findAllBySite(int $siteId): array { - $rsm = new ResultSetMappingBuilder($this->getEntityManager()); - $rsm->addRootEntityFromClassMetadata('App\Entity\Bibliography', 'b'); - $query = $this->getEntityManager()->createNativeQuery( - 'SELECT - id, - citazione, - riferimento, - pagine + $conn = $this->getEntityManager()->getConnection(); + + $sql = ' + SELECT + b.id, + b.citazione, + b.riferimento, + bs.pagine FROM bibliografia b - JOIN bibliografia_sito - ON id_bibliografia = b.id - WHERE id_sito = :id - ORDER BY ordine ASC', - $rsm - ); + INNER JOIN bibliografia_sito bs ON bs.id_bibliografia = b.id + WHERE bs.id_sito = :siteId + ORDER BY bs.ordine ASC + '; - $query->setParameter('id', $siteId); + $stmt = $conn->prepare($sql); + $results = $stmt->executeQuery(['siteId' => $siteId])->fetchAllAssociative(); - return $query->getResult(); + $entities = []; + + foreach ($results as $row) { + $biblio = new Bibliography(); + $biblio->setId($row['id']); + $biblio->setCitation($row['citazione']); + $biblio->setReference($row['riferimento']); + $biblio->setPages($row['pagine']); + $entities[] = $biblio; + } + + return $entities; } /** * @return Bibliography[] */ - public function findAllByNotConserved(int $notConserId): array + public function findAllByNotConserved(int $notConservedId): array { - $rsm = new ResultSetMappingBuilder($this->getEntityManager()); - $rsm->addRootEntityFromClassMetadata('App\Entity\Bibliography', 'b'); - $query = $this->getEntityManager()->createNativeQuery( - 'SELECT - id, - citazione, - riferimento, - pagine + $conn = $this->getEntityManager()->getConnection(); + + $sql = ' + SELECT + b.id, + b.citazione, + b.riferimento, + bs.pagine FROM bibliografia b - JOIN bibliografia_non_conser - ON id_bibliografia = b.id - WHERE id_non_conser = :id - ORDER BY ordine ASC', - $rsm - ); + INNER JOIN bibliografia_non_conser bs ON bs.id_bibliografia = b.id + WHERE bs.id_non_conser = :notConservedId + ORDER BY bs.ordine ASC + '; - $query->setParameter('id', $notConserId); + $stmt = $conn->prepare($sql); + $results = $stmt->executeQuery(['notConservedId' => $notConservedId])->fetchAllAssociative(); - return $query->getResult(); + $entities = []; + + foreach ($results as $row) { + $biblio = new Bibliography(); + $biblio->setId($row['id']); + $biblio->setCitation($row['citazione']); + $biblio->setReference($row['riferimento']); + $biblio->setPages($row['pagine']); + $entities[] = $biblio; + } + + return $entities; } /** * @return Bibliography[] */ public function findAllByFinding(int $findingId): array { - $rsm = new ResultSetMappingBuilder($this->getEntityManager()); - $rsm->addRootEntityFromClassMetadata('App\Entity\Bibliography', 'b'); - $query = $this->getEntityManager()->createNativeQuery( - 'SELECT - id, - citazione, - riferimento, - pagine + $conn = $this->getEntityManager()->getConnection(); + + $sql = ' + SELECT + b.id, + b.citazione, + b.riferimento, + bs.pagine FROM bibliografia b - JOIN bibliografia_rinvenim - ON id_bibliografia = b.id - WHERE id_rinvenimento = :id - ORDER BY ordine ASC', - $rsm - ); + INNER JOIN bibliografia_rinvenim bs ON bs.id_bibliografia = b.id + WHERE bs.id_rinvenimento = :findingId + ORDER BY bs.ordine ASC + '; - $query->setParameter('id', $findingId); + $stmt = $conn->prepare($sql); + $results = $stmt->executeQuery(['findingId' => $findingId])->fetchAllAssociative(); - return $query->getResult(); + $entities = []; + + foreach ($results as $row) { + $biblio = new Bibliography(); + $biblio->setId($row['id']); + $biblio->setCitation($row['citazione']); + $biblio->setReference($row['riferimento']); + $biblio->setPages($row['pagine']); + $entities[] = $biblio; + } + + return $entities; } } diff --git a/src/Repository/DocumentRepository.php b/src/Repository/DocumentRepository.php index 8a86209..1eff53f 100644 --- a/src/Repository/DocumentRepository.php +++ b/src/Repository/DocumentRepository.php @@ -22,28 +22,41 @@ class DocumentRepository extends ServiceEntityRepository */ public function findBySite(int $siteId): array { - $rsm = new ResultSetMappingBuilder($this->getEntityManager()); - $rsm->addRootEntityFromClassMetadata('App\Entity\Document', 'd'); - $query = $this->getEntityManager()->createNativeQuery( - 'SELECT - id, - titolo, - filename, - descrizione, - autori, - luogo, - tipo - FROM documento d - JOIN sito_documento - ON id_documento = d.id - WHERE id_sito = :id - ', - $rsm - ); + $conn = $this->getEntityManager()->getConnection(); - $query->setParameter('id', $siteId); + $sql = ' + SELECT + d.id, + d.titolo, + d.filename, + d.descrizione, + d.autori, + d.tipo, + d.luogo + FROM documento d + INNER JOIN sito_documento sd ON sd.id_documento = d.id + WHERE sd.id_sito = :siteId + ORDER BY d.titolo ASC + '; - return $query->getResult(); + $stmt = $conn->prepare($sql); + $results = $stmt->executeQuery(['siteId' => $siteId])->fetchAllAssociative(); + + $entities = []; + + foreach ($results as $row) { + $document = new Document(); + $document->setId($row['id']); + $document->setTitle($row['titolo']); + $document->setFilename($row['filename']); + $document->setDescription($row['descrizione']); + $document->setConservationPlace($row['luogo']); + $document->setType($row['tipo']); + $document->setAuthors($row['autori']); + $entities[] = $document; + } + + return $entities; } /** @@ -51,28 +64,41 @@ class DocumentRepository extends ServiceEntityRepository */ public function findByNotConserved(int $notConservedId): array { - $rsm = new ResultSetMappingBuilder($this->getEntityManager()); - $rsm->addRootEntityFromClassMetadata('App\Entity\Document', 'd'); - $query = $this->getEntityManager()->createNativeQuery( - 'SELECT - id, - titolo, - filename, - descrizione, - autori, - luogo, - tipo - FROM documento d - JOIN non_conserv_documento - ON id_documento = d.id - WHERE id_non_conserv = :id - ', - $rsm - ); + $conn = $this->getEntityManager()->getConnection(); - $query->setParameter('id', $notConservedId); + $sql = ' + SELECT + d.id, + d.titolo, + d.filename, + d.descrizione, + d.autori, + d.tipo, + d.luogo + FROM documento d + INNER JOIN non_conserv_documento sd ON sd.id_documento = d.id + WHERE sd.id_non_conserv = :notConservedId + ORDER BY d.titolo ASC + '; - return $query->getResult(); + $stmt = $conn->prepare($sql); + $results = $stmt->executeQuery(['notConservedId' => $notConservedId])->fetchAllAssociative(); + + $entities = []; + + foreach ($results as $row) { + $document = new Document(); + $document->setId($row['id']); + $document->setTitle($row['titolo']); + $document->setFilename($row['filename']); + $document->setDescription($row['descrizione']); + $document->setConservationPlace($row['luogo']); + $document->setType($row['tipo']); + $document->setAuthors($row['autori']); + $entities[] = $document; + } + + return $entities; } // /** // * @return Document[] Returns an array of Document objects