Skip to content
Snippets Groups Projects
Commit 7a7350f5 authored by Camille Simiand's avatar Camille Simiand
Browse files

Refacto

parent bfab37af
No related branches found
No related tags found
1 merge request!45tuleap-81-allow-a-new-user-to-access-the-capsule-edition-mode
......@@ -8,6 +8,9 @@ use App\Entity\CapsulePendingEditor;
use App\Entity\User;
use App\Form\CapsuleEditorsFormType;
use App\Repository\CapsulePendingEditorRepository;
use App\Repository\CapsuleRepository;
use App\Repository\UserRepository;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Bridge\Twig\Mime\TemplatedEmail;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
......@@ -20,11 +23,19 @@ class CapsuleEditorController extends AbstractController
{
private TranslatorInterface $translator;
private MailerInterface $mailer;
public function __construct(MailerInterface $mailer, TranslatorInterface $translator)
{
private CapsulePendingEditorRepository $capsule_pending_editor_repository;
private EntityManagerInterface $entity_manager;
public function __construct(
MailerInterface $mailer,
TranslatorInterface $translator,
CapsulePendingEditorRepository $capsule_pending_editor_repository,
EntityManagerInterface $entity_manager
) {
$this->mailer = $mailer;
$this->translator = $translator;
$this->capsule_pending_editor_repository = $capsule_pending_editor_repository;
$this->entity_manager = $entity_manager;
}
/**
......@@ -33,21 +44,15 @@ class CapsuleEditorController extends AbstractController
public function editCapsuleEditors(
Request $request,
int $capsule_id,
CapsulePendingEditorRepository $capsule_pending_editor_repository
CapsuleRepository $capsule_repository,
UserRepository $user_repository
): Response {
$current_user = $this->getUser();
if (! $current_user instanceof User) {
return $this->redirectToRoute('app_logout');
}
$form = $this->createForm(CapsuleEditorsFormType::class);
$form->handleRequest($request);
$entity_manager = $this->getDoctrine()->getManager();
$capsule_repository = $entity_manager->getRepository(Capsule::class);
$capsule = $capsule_repository->find($capsule_id);
if (! $capsule) {
throw $this->createNotFoundException(
'No capsule found for id ' . $capsule_id
......@@ -55,7 +60,6 @@ class CapsuleEditorController extends AbstractController
}
$current_capsule_editors_users = $capsule->getEditors()->toArray();
if (! in_array($current_user, $current_capsule_editors_users)) {
$this->addFlash(
'warning',
......@@ -70,17 +74,45 @@ class CapsuleEditorController extends AbstractController
return $this->redirectToRoute('capsule_list');
}
$pending_editors = $capsule_pending_editor_repository->findBy(['capsule_id' => $capsule_id]);
$pending_editors_emails = $capsule_pending_editor_repository->getPendingEditorsEmails($capsule_id);
$form = $this->createForm(CapsuleEditorsFormType::class);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$editor_email = $form->get('email')->getData();
$user_associated_with_email_address = $entity_manager
->getRepository(User::class)
$user_associated_with_email_address = $user_repository
->findOneBy(['email' => $editor_email]);
if (! $user_associated_with_email_address instanceof User) {
$this->addPendingEditor($editor_email, $capsule, $current_user);
} else {
$this->addEditor(
$editor_email,
$capsule,
$current_user,
$user_associated_with_email_address,
$current_capsule_editors_users
);
}
return $this->redirectToRoute('edit_capsule_editors', [
'capsule_id' => $capsule_id
]);
}
$pending_editors = $this->capsule_pending_editor_repository->findBy(['capsule_id' => $capsule_id]);
return $this->render('capsule/editors/list_editors.html.twig', [
'userPermissionsCapsuleForm' => $form->createView(),
'capsule_name' => $capsule->getName(),
'editors' => $current_capsule_editors_users,
'pending_editors' => $pending_editors
]);
}
private function addPendingEditor(string $editor_email, Capsule $capsule, User $current_user): void
{
$pending_editors_emails = $this->capsule_pending_editor_repository->getPendingEditorsEmails($capsule->getId());
if (in_array($editor_email, $pending_editors_emails)) {
$this->addFlash(
'warning',
......@@ -91,17 +123,14 @@ class CapsuleEditorController extends AbstractController
]
)
);
return $this->redirectToRoute('edit_capsule_editors', [
'capsule_id' => $capsule_id
]);
return;
}
$pending_editor = new CapsulePendingEditor();
$pending_editor->setCapsuleId($capsule_id);
$pending_editor->setCapsuleId($capsule->getId());
$pending_editor->setEmail($editor_email);
$entity_manager->persist($pending_editor);
$entity_manager->flush();
$this->entity_manager->persist($pending_editor);
$this->entity_manager->flush();
$email = (new TemplatedEmail())
->to($editor_email)
......@@ -123,12 +152,18 @@ class CapsuleEditorController extends AbstractController
]
)
);
return $this->redirectToRoute('edit_capsule_editors', [
'capsule_id' => $capsule_id
]);
}
/**
* @param array<User> $current_capsule_editors_users
*/
private function addEditor(
string $editor_email,
Capsule $capsule,
User $current_user,
User $user_associated_with_email_address,
array $current_capsule_editors_users
): void {
if (in_array($user_associated_with_email_address, $current_capsule_editors_users)) {
$this->addFlash(
'warning',
......@@ -139,16 +174,13 @@ class CapsuleEditorController extends AbstractController
]
)
);
return $this->redirectToRoute('edit_capsule_editors', [
'capsule_id' => $capsule_id
]);
return;
}
$capsule_editor = new CapsuleEditor();
$capsule_editor->setUserId($user_associated_with_email_address->getId());
$capsule_editor->setCapsuleId($capsule_id);
$entity_manager->persist($capsule_editor);
$entity_manager->flush();
$capsule_editor->setCapsuleId($capsule->getId());
$this->entity_manager->persist($capsule_editor);
$this->entity_manager->flush();
$email = (new TemplatedEmail())
->to($editor_email)
......@@ -171,17 +203,5 @@ class CapsuleEditorController extends AbstractController
]
)
);
return $this->redirectToRoute('edit_capsule_editors', [
'capsule_id' => $capsule_id
]);
}
return $this->render('capsule/editors/list_editors.html.twig', [
'userPermissionsCapsuleForm' => $form->createView(),
'capsule_name' => $capsule->getName(),
'editors' => $current_capsule_editors_users,
'pending_editors' => $pending_editors
]);
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment