allow to edit notification

This commit is contained in:
Julien Fastré 2021-12-29 15:24:52 +01:00
parent 478c3b3247
commit 9d638fe897
5 changed files with 70 additions and 6 deletions

View File

@ -120,6 +120,36 @@ class NotificationController extends AbstractController
]);
}
/**
* @Route("/{id}/edit", name="chill_main_notification_edit")
*/
public function editAction(Notification $notification, Request $request): Response
{
$this->denyAccessUnlessGranted(NotificationVoter::UPDATE, $notification);
$form = $this->createForm(NotificationType::class, $notification);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$this->em->flush();
$this->addFlash('success', $this->translator->trans('notification.Notification updated'));
if ($request->query->has('returnPath')) {
return new RedirectResponse($request->query->get('returnPath'));
}
return $this->redirectToRoute('chill_main_notification_my');
}
return $this->render('@ChillMain/Notification/edit.html.twig', [
'form' => $form->createView(),
'handler' => $this->notificationHandlerManager->getHandler($notification),
'notification' => $notification,
]);
}
/**
* @Route("/inbox", name="chill_main_notification_my")
*/

View File

@ -12,7 +12,6 @@ declare(strict_types=1);
namespace Chill\MainBundle\Entity;
use Chill\MainBundle\Doctrine\Model\TrackUpdateInterface;
use Chill\MainBundle\Entity\Embeddable\CommentEmbeddable;
use DateTimeImmutable;
use DateTimeInterface;
use Doctrine\Common\Collections\ArrayCollection;

View File

@ -0,0 +1,25 @@
{% extends "@ChillMain/layout.html.twig" %}
{% block content %}
<div class="row">
<div class="col-md-10">
{% include handler.template(notification) with handler.templateData(notification) %}
{{ form_start(form, { 'attr': { 'id': 'notification' }}) }}
{{ form_row(form.addressees) }}
{{ form_row(form.message) }}
{{ form_end(form) }}
<ul class="record_actions sticky-form-buttons">
<li class="cancel">
<a href="{{ chill_return_path_or('chill_main_homepage') }}" class="btn btn-cancel">{{ 'Cancel'|trans|chill_return_path_label }}</a>
</li>
<li>
<button type="submit" form="notification" class="btn btn-save">{{ 'Save'|trans }}</button>
</li>
</ul>
</div>
</div>
{% endblock %}

View File

@ -66,9 +66,16 @@
</div>
<div class="item-row">
<ul class="record_actions">
<li>
<a href="{{ chill_path_add_return_path('chill_main_notification_show', {'id': notification.id}) }}" class="btn btn-show"></a>
</li>
{% if is_granted('CHILL_MAIN_NOTIFICATION_UPDATE', notification) %}
<li>
<a href="{{ chill_path_add_return_path('chill_main_notification_edit', {'id': notification.id}) }}" class="btn btn-edit"></a>
</li>
{% endif %}
{% if is_granted('CHILL_MAIN_NOTIFICATION_SEE', notification) %}
<li>
<a href="{{ chill_path_add_return_path('chill_main_notification_show', {'id': notification.id}) }}" class="btn btn-show"></a>
</li>
{% endif %}
</ul>
</div>
</div>

View File

@ -22,9 +22,9 @@ final class NotificationVoter extends Voter
{
public const COMMENT_EDIT = 'CHILL_MAIN_NOTIFICATION_COMMENT_EDIT';
public const SEE = 'chill_main_notification_see';
public const SEE = 'CHILL_MAIN_NOTIFICATION_SEE';
public const UPDATE = 'chill_main_notification_update';
public const UPDATE = 'CHILL_MAIN_NOTIFICATION_UPDATE';
protected function supports($attribute, $subject): bool
{
@ -48,6 +48,9 @@ final class NotificationVoter extends Voter
case self::SEE:
return $subject->getSender() === $user || $subject->getAddressees()->contains($user);
case self::UPDATE:
return $subject->getSender() === $user;
default:
throw new UnexpectedValueException("this subject {$attribute} is not implemented");
}