Implement comments (#10)

Allow logged users to comment posts. Edition is not allowed via the API since it doesn't support auth yet.

Symfony UX is used with Turbo to avoid full pages reload, without JavaScript™.

Co-authored-by: clfreville2 <clement.freville2@etu.uca.fr>
Reviewed-on: https://codefirst.iut.uca.fr/git/clement.freville2/herbarium/pulls/10
This commit is contained in:
2024-06-11 17:17:24 +02:00
parent b4a1ae592f
commit 8859cd0000
20 changed files with 477 additions and 5 deletions

View File

@@ -12,7 +12,7 @@
{% block importmap %}{{ importmap('app') }}{% endblock %}
{% endblock %}
</head>
<body>
<body data-turbo="false">
<nav class="navbar navbar-expand-lg bg-body-tertiary">
<div class="container-fluid">
<a class="navbar-brand" href="{{ path('app_species_index') }}">Herbarium</a>

View File

@@ -0,0 +1,4 @@
<form method="post" action="{{ path('app_post_comment_delete', {'id': comment.id}) }}" onsubmit="return confirm('Are you sure you want to delete this comment?');">
<input type="hidden" name="_token" value="{{ csrf_token('delete' ~ comment.id) }}">
<button class="btn btn-danger">Delete</button>
</form>

View File

@@ -0,0 +1,17 @@
<turbo-frame id="comment_{{ comment.id }}">
<div class="card">
<div class="card-body">
<h5 class="card-title">
{{ comment.author.email }} le {{ comment.createdAt | date }}
{% if comment.createdAt != comment.editedAt %}
(modifié le {{ comment.editedAt | date }})
{% endif %}
</h5>
<p class="card-text">{{ comment.content }}</p>
{% if is_granted('COMMENT_EDIT', comment) %}
<a href="{{ path('app_post_comment_edit', {'id': comment.id}) }}" class="btn btn-primary">Modifier</a>
{{ include('comment/_delete_form.html.twig') }}
{% endif %}
</div>
</div>
</turbo-frame>

View File

@@ -0,0 +1,3 @@
{% block success_stream %}
<turbo-stream action="remove" target="comment_{{ comment }}"></turbo-stream>
{% endblock %}

View File

@@ -0,0 +1,11 @@
{% extends 'base.html.twig' %}
{% block title %}Edit Comment{% endblock %}
{% block body %}
<h1>Edit Comment</h1>
<turbo-frame id="comment_{{ comment.id }}">
{{ include('post/_form.html.twig', {'button_label': 'Update'}) }}
</turbo-frame>
{% endblock %}

View File

@@ -0,0 +1,7 @@
{% block success_stream %}
<turbo-stream action="append" targets="#comments">
<template>
{{ include('comment/comment.html.twig') }}
</template>
</turbo-stream>
{% endblock %}

View File

@@ -1,4 +1,4 @@
{{ form_start(form) }}
{{ form_widget(form) }}
<button class="btn">{{ button_label|default('Save') }}</button>
<button class="btn btn-primary">{{ button_label|default('Save') }}</button>
{{ form_end(form) }}

View File

@@ -4,16 +4,16 @@
{% block body %}
{% for post in posts.iterator %}
<div class="card" style="width: 42rem; margin: 20px 0 50px 100px;">
<div class="card mb-4">
<div class="card-body">
<h5 class="card-title">{{ post.species ? post.species.vernacularName : 'Post' }}</h5>
<h5 class="card-title"><a href="{{ path('app_post_show', {id: post.id}) }}">{{ post.species ? post.species.vernacularName : 'Post' }}</a></h5>
<h6 class="card-subtitle mb-2 text-muted">{{ post.foundDate | date("d/m/Y \\à H \\h") }}</h6>
<p class="card-subtitle mb-2 text-muted">{{ post.latitude }}, {{ post.longitude }}, {{ post.altitude }}m</p>
<p class="card-text">{{ post.commentary }}</p>
</div>
<div class="card-footer">
28 ❤️
128 💬
{{ post.comments.count() }} 💬
</div>
</div>
{% endfor %}

View File

@@ -43,4 +43,17 @@
<a href="{{ path('app_post_edit', {'id': post.id}) }}">edit</a>
{{ include('post/_delete_form.html.twig') }}
<div data-turbo="true">
<div id="comments">
{% for comment in post.comments %}
{{ include('/comment/comment.html.twig') }}
{% endfor %}
</div>
{{ form_start(form) }}
{{ form_widget(form) }}
<button type="submit" class="btn btn-primary">Comment</button>
{{ form_end(form) }}
</div>
{% endblock %}