Segelparade / www / symfonyproject / src / Controller / InsertController.php
InsertController.php
Raw
<?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', [
     ]);
    }
}