<?php
/* Name: Insert-Controller
* Description:
* This controller takes data from the backend and updates the specfic-image-entry in the db
* */
namespace App\Controller;
use DateTime;
use App\Entity\Image;
use App\Entity\Tag;
use App\Entity\Processing;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Attribute\Route;
use Doctrine\ORM\EntityManagerInterface;
class InsertController extends AbstractController
{
public function index(EntityManagerInterface $entityManager): Response
{
$id = $_POST["id"];
// get current image
$image = $entityManager->getRepository(Image::class)->find($id);
if ($image) {
// get last saved tags
$db_tags = $image->getTag();
if (isset($_POST["del_tags"])) {
// tags which should be deleted
$del_tags = $_POST["del_tags"];
foreach ($db_tags as $tag) {
if (in_array($tag->getName(), $del_tags)) {
$image->removeTag($tag);
}
}
}
// creating new Tags if its not already existing
if (isset($_POST["tag"])) {
$db_tag_name = [];
foreach ($db_tags as $tag) {
$db_tag_name[] = $tag->getName();
}
$form_tags = $_POST["tag"];
foreach ($form_tags as $tag) {
if (!in_array($tag, $db_tag_name)) {
$new_tag = new Tag();
$new_tag->setName($tag);
$new_tag->setType("system");
$entityManager->persist($new_tag);
$image->addTag($new_tag);
}
}
}
// Set Accepted-Status
if(isset($_POST["accepted"])){
if($image->getAccepted()){
}
else{
$image->setAccepted(new DateTime("now"));
}
}
else{
$image->setAccepted(null);
}
// checking new-status
if($_POST["processing"]){
$currentProcessing = strval($_POST["processing"]);
}
$processing = $image->getProcessing();
$dbProcessing = strval($processing[0]->getType());
// change status from processing is user has changed
if($dbProcessing !== $currentProcessing){
$status = $entityManager->getRepository(Processing::class)->findByType($currentProcessing);
if(!$status){
$status = new Processing;
$status->setType($currentProcessing);
$status->setQuality(1);
$status->setDate(new DateTime("now"));
$entityManager->persist($status);
}
$image->addProcessing($status);
$old = $entityManager->getRepository(Processing::class)->findByType($dbProcessing);
$image->removeProcessing($old);
}
$entityManager->persist($image);
$entityManager->flush();
}
return $this->render('insert/index.html.twig', [
'controller_name' => 'InsertController',
]);
}
public function delete($id, EntityManagerInterface $entityManager){
$image = $entityManager->getRepository(Image::class)->find($id);
$delete = $entityManager->getRepository(Processing::class)->findByType("deleted");
if(!$delete){
$delete = new Processing;
$delete->setType("deleted");
$delete->setQuality(1);
$delete->setDate(new DateTime("now"));
$entityManager->persist($delete);
}
$image->addProcessing($delete);
$processing = $image->getProcessing();
$pre_processing = $entityManager->getRepository(Processing::class)->findByType($processing[0]->getType());
$image->removeProcessing($pre_processing);
$entityManager->persist($image);
$entityManager->flush();
return $this->render('insert/index.html.twig', [
]);
}
}