Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
85 changes: 85 additions & 0 deletions src/Controller/ProjectController.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,85 @@
<?php

namespace App\Controller;

use App\Entity\Project;
use App\Entity\Task;
use App\Type\ProjectType;
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", name="listProject")
*/
public function list(Request $request): Response
{
$user = $this->getUser();
if (in_array("ROLE_ADMIN", $user->getRoles())) {
$projects = $this->getDoctrine()->getManager()->getRepository(Project::class)->findAll();
} else {
$projects = $this->getDoctrine()->getManager()->getRepository(Project::class)->findBy(['owner' => $user]);
}
return $this->render('project/list.html.twig', [
'projects' => $projects
]);
}
/**
* @Route("/project/create", name="createProject")
*/
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->setKeyProject();
$this->getDoctrine()->getManager()->persist($project);
$this->getDoctrine()->getManager()->flush();

return $this->redirectToRoute('listProject');
}
return $this->render("project/add.html.twig", [
'form' => $form->createView()
]);
}

/**
* @Route("/project/{keyProject}/change", name="changeProject")
*/
public function change($keyProject, Request $request): Response
{
$project = $this->getDoctrine()->getRepository(Project::class)->findOneBy(["keyProject" => $keyProject]);
$form = $this->createForm(ProjectType::class, $project);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$this->getDoctrine()->getManager()->persist($project);
$this->getDoctrine()->getManager()->flush();
return $this->redirectToRoute("listProject");
}
return $this->render("project/change.html.twig", [
"keyProject" => $keyProject,
"form" => $form->createView()
]);
}

/**
* @Route("/project/{keyProject}", name="infoProject")
*/
public function projectInfo($keyProject): Response
{
$tasks = $this->getDoctrine()->getRepository(Task::class)
->findBy(['project' => $keyProject], []);
return $this->render('project/project.html.twig', [
'tasks' => $tasks,
'$keyProject' => $keyProject
]);
}




}
7 changes: 4 additions & 3 deletions src/Controller/TaskController.php
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
use App\Entity\Task;
use App\Type\TaskFilterType;
use App\Type\TaskType;
use App\Entity\Project;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\IsGranted;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
Expand All @@ -22,12 +23,12 @@ class TaskController extends AbstractController
public function create(Request $request): Response
{
$task = new Task();
$form = $this->createForm(TaskType::class, $task);

$form = $this->createForm(TaskType::class,$task);

$form->handleRequest($request);

if ($form->isSubmitted() && $form->isValid()) {

$task->setAuthor($this->getUser());

$this->getDoctrine()->getManager()->persist($task);
Expand All @@ -44,6 +45,7 @@ public function create(Request $request): Response

/**
* @Route("/tasks", name="task_list")
* @param Request $request
* @return Response
*/
public function list(Request $request): Response
Expand Down Expand Up @@ -74,7 +76,6 @@ public function list(Request $request): Response
}



return $this->render('task/list.html.twig', [
'tasks' => $tasks,
'filterForm' => $taskFilterForm->createView()
Expand Down
78 changes: 78 additions & 0 deletions src/Entity/Project.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,78 @@
<?php

namespace App\Entity;

use App\Repository\ProjectRepository;
use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Security\Core\User\UserInterface;
/**
* @ORM\Entity(repositoryClass=ProjectRepository::class)
*/
class Project
{
/**
* @ORM\Id
* @ORM\GeneratedValue
* @ORM\Column(type="integer")
*/
private $id;

/**
* @ORM\Column(type="string", length=6)
* @var
*/
private $keyProject;

/**
* @ORM\Column(type="string", length=255)
* @var
*/
private $name;

/**
* @ORM\ManyToOne(targetEntity="App\Entity\User", inversedBy="user")
* @var User
*/
private $owner;

public function getOwner(): ?User
{
return $this->owner;
}

public function setOwner(UserInterface $owner = null)
{
$this->owner = $owner;
}

public function getId()
{
return $this -> id;
}

public function getKeyproject(): ?string
{
return $this->keyProject;
}

public function setKeyProject(string $keyProject = null): self
{
$this->keyProject = $this->createKey();
return $this;
}

private function createKey(): string
{
return substr(str_shuffle(str_repeat('0123456789abcdefghijklmnopqrstuvwxyz-_', 1)), 1, 5);
}

public function getName()
{
return $this -> name;
}

public function setName($name): void
{
$this -> name = $name;
}
}
26 changes: 25 additions & 1 deletion src/Entity/Task.php
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,12 @@ class Task
*/
protected $author;

/**
* @ORM\ManyToOne(targetEntity="App\Entity\Project", inversedBy="project")
* @var Project
*/
protected $project;

/**
* Create empty task
*/
Expand All @@ -64,6 +70,24 @@ public function __construct()
$this->isCompleted = false;
}

/**
* @param Project|null $project
* @return void
*/
public function setProject(Project $project = null)
{
$this->project = $project;
}


/**
* @return Project|null
*/
public function getProject()
{
return $this->project;
}


/**
* Set task Author
Expand All @@ -80,7 +104,7 @@ public function setAuthor(UserInterface $author = null)
* Return task author
* @return User|null
*/
public function getAuthor()
public function getAuthor(): ?User
{
return $this->author;
}
Expand Down
17 changes: 17 additions & 0 deletions src/Repository/ProjectRepository.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
<?php

namespace App\Repository;

use App\Entity\Project;
use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository;
use Doctrine\ORM\EntityRepository;
use Doctrine\Persistence\ManagerRegistry;

class ProjectRepository extends ServiceEntityRepository
{
public function __construct(ManagerRegistry $registry)
{
parent::__construct($registry, Project::class);
}

}
19 changes: 19 additions & 0 deletions src/Type/ProjectType.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
<?php

namespace App\Type;

use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\Extension\Core\Type\SubmitType;
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)
;
}

}
6 changes: 6 additions & 0 deletions src/Type/TaskType.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@

namespace App\Type;

use App\Entity\Project;
use Symfony\Bridge\Doctrine\Form\Type\EntityType;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\Extension\Core\Type\DateType;
use Symfony\Component\Form\Extension\Core\Type\SubmitType;
Expand All @@ -19,6 +21,10 @@ public function buildForm(FormBuilderInterface $builder, array $options)
->add('dueDate', DateType::class, [
'years' => range(2022,2023)
])
->add('project', EntityType::class, [
'class' => Project::class
])

->add('save', SubmitType::class)
;
}
Expand Down
16 changes: 16 additions & 0 deletions templates/project/add.html.twig
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
{% extends 'base.html.twig' %}

{% block body %}

<div class="container">
<div class="row">
<div class="col">
</div>
<div class="col">
{{ form(form, {'action': path("createProject"), 'method': 'POST'}) }}
</div>
<div class="col">
</div>
</div>
</div>
{% endblock %}
16 changes: 16 additions & 0 deletions templates/project/change.html.twig
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
{% extends 'base.html.twig' %}

{% block body %}

<div class="container">
<div class="row">
<div class="col">
</div>
<div class="col">
{{form(form,{'action':path('changeProject',{"keyProject": keyProject}),'method':'POST'})}}
</div>
<div class="col">
</div>
</div>
</div>
{% endblock %}
39 changes: 39 additions & 0 deletions templates/project/list.html.twig
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
{% extends 'base.html.twig' %}

{% block body %}
<div class="container">
<div class="row">
<div class="col">
</div>
<div class="col">
<table class="table">

<thead>
<tr>
<th scope="col">Ключ проекта</th>
<th scope="col">Название проекта</th>
<th scope="col">Автор проекта</th>
<th scope="col">Изменить</th>
</tr>
</thead>

<tbody>
{% for project in projects %}
<tr>
<td><a href="{{ path("infoProject",{"keyProject": project.keyProject})}}">{{project.keyProject}}</a></td>
{# <td>{{ project.keyProject }}</td>#}
<td>{{ project.name }}</td>
<td>{{ project.owner }}</td>
<td><a href="{{ path("changeProject",{"keyProject": project.keyProject})}}">X</a></td>
</tr>
{% endfor %}
</tbody>
</table>
<p><a href="{{ path("createProject") }}" title="Создать проект">Создать проект</a></p>
<p><a href="{{ path("task_list") }}" title="Список задач">Список задач</a> <br></p>
</div>
<div class="col">
</div>
</div>
</div>
{% endblock %}
Loading