Newer
Older
activity-manager / src / Controller / ProjectController.php
@Kilian Riou Kilian Riou on 11 Oct 2021 3 KB Project edit
<?php
namespace App\Controller;

use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use App\Repository\ProjectRepository;
use App\Entity\ProjectEntity;
use App\Form\Project\ProjectAddForm;
use Symfony\Component\Routing\Exception\ResourceNotFoundException;
use App\Form\Project\ProjectEditForm;

class ProjectController extends AbstractExtendedController
{

    /**
     * Projects list
     *
     * @param Request $request
     * @return Response
     */
    public function projects(Request $request): Response
    {
        // Get repositories
        $entityManager = $this->getDoctrine()->getManager();
        /** @var ProjectRepository $projectRepository */
        $projectRepository = $entityManager->getRepository(ProjectEntity::class);

        // Project add form
        /** @var ProjectAddForm $projectAddForm */
        $projectAddForm = $this->createNamedCustomForm('projectAdd', ProjectAddForm::class);
        $projectAddForm->handleRequest($request);
        if ($projectAddForm->isSubmitted() && $projectAddForm->isSubmitted()) {
            $errors = $projectAddForm->validate();
            if (empty($errors)) {
                $project = $projectAddForm->getProject();
                $entityManager->persist($project);
                $entityManager->flush();

                return $this->ajaxFormAnswer([
                    'refresh' => true,
                    'reset' => true
                ]);
            }
            return $this->ajaxFormAnswer([
                'error' => join('<br/>', $errors),
                'code' => Response::HTTP_BAD_REQUEST,
            ]);
        }

        // Get projects
        $projects = $projectRepository->findAll();

        return $this->render("project/projects.html.twig", [
            'projects' => $projects,
            'projectAddForm' => $projectAddForm,
        ]);
    }

    /**
     * Project edit page
     *
     * @param string $id
     * @param Request $request
     * @return Response
     */
    public function project(string $id, Request $request): Response
    {
        // Get repositories
        $entityManager = $this->getDoctrine()->getManager();
        /** @var ProjectRepository $projectRepository */
        $projectRepository = $entityManager->getRepository(ProjectEntity::class);
        
        // Get project
        $project = $projectRepository->find($id);
        if(is_null($project)) {
            throw new ResourceNotFoundException();
        }
        
        // Project edit form
        /** @var ProjectEditForm $projectEditForm */
        $projectEditForm = $this->createNamedCustomForm('projectEdit', ProjectEditForm::class);
        $projectEditForm->handleRequest($request);
        if($projectEditForm->isSubmitted() && $projectEditForm->isValid()) {
            $errors = $projectEditForm->validate();
            if (empty($errors)) {
                $projectEditForm->updateProject($project);
                $entityManager->persist($project);
                $entityManager->flush();
                
                return $this->ajaxFormAnswer([
                    'refresh' => true,
                ]);
            }
            return $this->ajaxFormAnswer([
                'error' => join('<br/>', $errors),
                'code' => Response::HTTP_BAD_REQUEST,
            ]);
        }
        
        // Update form
        $projectEditForm->updateFields($project);
        
        return $this->render("project/project.html.twig", [
            'project' => $project,
            'projectEditForm' => $projectEditForm,
        ]);
    }
}