From 7997e47633cd8507bfbe03255dd7da61053def8e Mon Sep 17 00:00:00 2001 From: Antonoix Date: Sat, 4 Jun 2022 11:24:00 +0500 Subject: [PATCH 1/3] commit init --- src/Controller/ProjectController.php | 8 ++++++++ src/Entity/Project.php | 8 ++++++++ src/Repository/ProjectRepository.php | 8 ++++++++ src/Type/ProjectType.php | 8 ++++++++ templates/project/create.html.twig | 0 templates/project/projectsList.html.twig | 0 6 files changed, 32 insertions(+) create mode 100644 src/Controller/ProjectController.php create mode 100644 src/Entity/Project.php create mode 100644 src/Repository/ProjectRepository.php create mode 100644 src/Type/ProjectType.php create mode 100644 templates/project/create.html.twig create mode 100644 templates/project/projectsList.html.twig diff --git a/src/Controller/ProjectController.php b/src/Controller/ProjectController.php new file mode 100644 index 0000000..4aa4082 --- /dev/null +++ b/src/Controller/ProjectController.php @@ -0,0 +1,8 @@ + Date: Sat, 4 Jun 2022 12:11:38 +0500 Subject: [PATCH 2/3] generator --- src/Controller/ProjectController.php | 52 ++++++++++++++++- src/Entity/Project.php | 84 ++++++++++++++++++++++++++++ 2 files changed, 135 insertions(+), 1 deletion(-) diff --git a/src/Controller/ProjectController.php b/src/Controller/ProjectController.php index 4aa4082..e81c38d 100644 --- a/src/Controller/ProjectController.php +++ b/src/Controller/ProjectController.php @@ -2,7 +2,57 @@ namespace App\Controller; -class ProjectController +use App\Entity\Project; +use App\Type\ProjectType; +use Sensio\Bundle\FrameworkExtraBundle\Configuration\IsGranted; +use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; +use Symfony\Component\HttpFoundation\Response; +use Symfony\Component\Routing\Annotation\Route; +use Symfony\Component\HttpFoundation\Request; + +class ProjectController extends AbstractController { + /** + * + * @Route("/projects/create", name="project_create") + * @param Request $request + * @return Response + */ + public function create(Request $request): Response + { + $project = new Project(); + $form = $this->createForm(ProjectType::class, $project); + + $form->handleRequest($request); + + if ($form->isSubmitted() && $form->isValid()) { + + $project->setOwner($this->getUser()); + $project->setGeneratedKey(); + + $this->getDoctrine()->getManager()->persist($project); + $this->getDoctrine()->getManager()->flush(); + + return $this->redirectToRoute('projects_show'); + } + + return $this->render("project/create.html.twig", [ + 'form' => $form->createView() + ]); + } + + /** + * + * @Route("/projects", name="projects_show") + * @return Response + */ + public function show(Request $request): Response + { + $projects = $this->getDoctrine()->getRepository(Project::class) + ->findBy([]); + return $this->render("project/projectsList.html.twig", [ + 'projects' => $projects + ]); + } } \ No newline at end of file diff --git a/src/Entity/Project.php b/src/Entity/Project.php index 9fec39e..5c67d42 100644 --- a/src/Entity/Project.php +++ b/src/Entity/Project.php @@ -2,7 +2,91 @@ namespace App\Entity; +use Symfony\Component\Security\Core\User\UserInterface; +use App\Repository\ProjectRepository; +use Symfony\Component\Validator\Constraints as Assert; +use Doctrine\ORM\Mapping as ORM; +use function Sodium\add; + +/** + * @ORM\Entity(repositoryClass=ProjectRepository::class) + */ class Project { + private static $generatedKeys = []; + + /** + * @ORM\Column(type="string", length=255) + */ + private $name; + + /** + * @ORM\Id + * @ORM\GeneratedValue + * @ORM\Column(type="integer") + */ + private $id; + + /** + * @ORM\Column(type="string", length=6) + */ + private $generatedKey; + + /** + * @ORM\ManyToOne(targetEntity="App\Entity\User", inversedBy="user") + */ + private $owner; + + public function getName(): ?string + { + return $this->name; + } + + public function setName($name): void + { + $this->name = $name; + } + + public function getId(): ?int + { + return $this->id; + } + + public function getGeneratedKey(): ?string + { + return $this->generatedKey; + } + + public function setGeneratedKey(): void + { + $isUnique = true; + $newKey = strval(random_int(100000, 999999)); + foreach (self::$generatedKeys as $key) + { + if ($key === $newKey) + { + $isUnique = false; + break; + } + } + if ($isUnique) + { + $this->generatedKey = $newKey; + self::$generatedKeys[] = $newKey; + } + else + { + $this->setGeneratedKey(); + } + } + + public function getOwner() + { + return $this->owner; + } + public function setOwner(UserInterface $owner): void + { + $this->owner = $owner; + } } \ No newline at end of file From b1fed99d6095168f067e7179b2804a0ef461f50a Mon Sep 17 00:00:00 2001 From: Antonoix Date: Sat, 4 Jun 2022 12:14:01 +0500 Subject: [PATCH 3/3] generator --- src/Repository/ProjectRepository.php | 14 ++++++++-- src/Type/ProjectType.php | 17 ++++++++++-- templates/project/create.html.twig | 16 +++++++++++ templates/project/projectsList.html.twig | 35 ++++++++++++++++++++++++ 4 files changed, 77 insertions(+), 5 deletions(-) diff --git a/src/Repository/ProjectRepository.php b/src/Repository/ProjectRepository.php index c553eeb..5ae1268 100644 --- a/src/Repository/ProjectRepository.php +++ b/src/Repository/ProjectRepository.php @@ -2,7 +2,15 @@ namespace App\Repository; -class ProjectRepository -{ +use App\Entity\Project; +use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository; +use Doctrine\ORM\EntityRepository; +use Doctrine\Persistence\ManagerRegistry; -} \ No newline at end of file +class ProjectRepository extends ServiceEntityRepository +{ + public function __construct(ManagerRegistry $registry) + { + parent::__construct($registry, Project::class); + } +} diff --git a/src/Type/ProjectType.php b/src/Type/ProjectType.php index d6dc12a..dd51f72 100644 --- a/src/Type/ProjectType.php +++ b/src/Type/ProjectType.php @@ -2,7 +2,20 @@ namespace App\Type; -class ProjectType -{ +use Symfony\Component\Form\AbstractType; +use Symfony\Component\Form\Extension\Core\Type\DateType; +use Symfony\Component\Form\Extension\Core\Type\IntegerType; +use Symfony\Component\Form\Extension\Core\Type\SubmitType; +use Symfony\Component\Form\Extension\Core\Type\TextareaType; +use Symfony\Component\Form\Extension\Core\Type\TextType; +use Symfony\Component\Form\FormBuilderInterface; +class ProjectType extends AbstractType +{ + public function buildForm(FormBuilderInterface $builder, array $options) + { + $builder + ->add('name', TextType::class) + ->add('save', SubmitType::class); + } } \ No newline at end of file diff --git a/templates/project/create.html.twig b/templates/project/create.html.twig index e69de29..e2b7544 100644 --- a/templates/project/create.html.twig +++ b/templates/project/create.html.twig @@ -0,0 +1,16 @@ +{% extends 'base.html.twig' %} + +{% block body %} + +
+
+
+
+
+ {{ form(form, {'action': path('project_create'), 'method': 'POST'}) }} +
+
+
+
+
+{% endblock %} diff --git a/templates/project/projectsList.html.twig b/templates/project/projectsList.html.twig index e69de29..053b50b 100644 --- a/templates/project/projectsList.html.twig +++ b/templates/project/projectsList.html.twig @@ -0,0 +1,35 @@ +{% extends 'base.html.twig' %} + +{% block body %} +
+
+
+
+
+ + + + + + + + + + {% for project in projects %} + + + + + + {% endfor %} + +
#KeyName
{{ project.id }}{{ project.generatedKey }}{{ project.name }}
+ + Create project + +
+
+
+
+
+{% endblock %} \ No newline at end of file