Przeglądaj źródła

Added delete functionality for facebook/google reviews

Mohidul Islam 3 lat temu
rodzic
commit
1f0b2eb4a1

+ 18 - 0
dashboard/static/main.css

@@ -106,3 +106,21 @@ a.article-title:hover {
     margin-left: 2px;
     padding: 2px 10px;
 }
+
+.review-content{
+  display: flex;
+  flex-direction: row;
+}
+
+.review__remove-btn{
+  float: right;
+}
+.review__description{
+  margin: auto;
+  text-align: center;
+}
+
+.review__content-detail{
+  display: flex;
+  flex-direction: column;
+}

+ 2 - 2
dashboard/templates/dashboard.html

@@ -8,8 +8,8 @@
     <img class="rounded-circle article-img" src="{{ review.reviewer_photo }}">
     <div class="media-body">
         <div class="article-metadata">
-            <span class="mr-2"><b>{{ review.reviewer_name }}</b></span>
-            <small class="text-muted">{{ review.update_time|date:"F d, Y" }}</small>
+          <a class="mr-2" href="{% url 'detail-review' review.review_id %}"><b>{{ review.reviewer_name }}</b></a>
+          <small class="text-muted">{{ review.update_time|date:"F d, Y" }}</small>
             <small class="text-muted"> at <b>{{ review.location.care_name }}</b></small>
             <span style="color: #a41515; float: right">{{ review.star_rating }} X &#9733</span>
         </div>

+ 48 - 0
dashboard/templates/review_details.html

@@ -0,0 +1,48 @@
+{% extends 'base.html' %}
+{% load crispy_forms_tags %}
+
+{% block content %}
+<div class="review__content-detail">
+    <div>
+        <a class="review__remove-btn" type="button" data-toggle="modal" data-target="#exampleModal">
+            <i class="fa fa-trash fa-3x" aria-hidden="true"></i>
+        </a>
+    </div>
+    <div class="review-content">
+        <div><img src="{{ review.reviewer_photo }}" alt="" height="144px"></div>
+        <div class="review__description">
+            <h3>{{ review.reviewer_name }}</h3>
+            <span>Posted on {{ review.location.care_name }}</span> <br>
+            <span>Posted at {{ review.create_time | date:"M dS, Y" }}</span>
+            <div>
+                {% for i in "x"|rjust:review.star_rating %}
+                    <span style="color: #a41515;">&#9733</span>
+                {% endfor %}
+            </div>
+        </div>
+    </div>
+    <p class="mt-5">{{ review.comment }}</p>
+    <p class="mt-5">{{ review.reply.replied_text }}</p>
+
+<!-- Modal -->
+<div class="modal fade" id="exampleModal" tabindex="-1" role="dialog" aria-labelledby="exampleModalLabel" aria-hidden="true">
+    <div class="modal-dialog" role="document">
+        <div class="modal-content">
+        <div class="modal-header">
+            <h5 class="modal-title" id="exampleModalLabel">Do you want to remove this reivew?</h5>
+            <button type="button" class="close" data-dismiss="modal" aria-label="Close">
+            <span aria-hidden="true">&times;</span>
+            </button>
+        </div>
+        <div class="modal-body">
+            This will delete the review from the database and might add it while syncing with the google review API.
+        </div>
+        <div class="modal-footer">
+            <button type="button" class="btn btn-secondary" data-dismiss="modal">Close</button>
+            <a type="button" class="btn btn-primary" href="{% url 'delete-review' review.review_id %}">Remove</a>
+        </div>
+        </div>
+    </div>
+</div>
+</div> 
+{% endblock content %}

+ 3 - 1
dashboard/urls.py

@@ -1,8 +1,10 @@
 from django.urls import path
-from .views import ReviewListByLocationView, UnRepliedReviewList, ReviewListView
+from .views import ReviewListByLocationView, UnRepliedReviewList, ReviewListView, DeleteReview, ReviewDetails
 
 urlpatterns = [
     path('', UnRepliedReviewList.as_view(), name='un-replied-review'),
     path('list/', ReviewListView.as_view(), name='review-list'),
     path('list/<location_id>/', ReviewListByLocationView.as_view(), name='review-list-by-location'),
+    path('delete/<review_id>/', DeleteReview.as_view(), name='delete-review'),
+    path('details/<pk>/', ReviewDetails.as_view(), name='detail-review'),
 ]

+ 19 - 1
dashboard/views.py

@@ -1,7 +1,8 @@
+from django.db import models
 from django.utils import timezone
 from django.shortcuts import render, redirect
 from django.contrib import messages
-from django.views.generic import View
+from django.views.generic import View, DetailView
 from django.shortcuts import get_object_or_404
 from review.models import Review, Reply
 from review.forms import ReplyForm
@@ -103,3 +104,20 @@ class UnRepliedReviewList(LoginRequiredMixin, PermissionRequiredMixin, View):
             reviews = paginator.page(paginator.num_pages)
         context = {'reviews': reviews, 'form': form}
         return render(request, 'dashboard.html', context=context)
+
+
+
+class DeleteReview(LoginRequiredMixin, PermissionRequiredMixin, View):
+    permission_required = 'is_admin'
+    
+    def get(self, requset, review_id, *args, **kwargs):
+        review = Review.objects.filter(review_id=review_id).first()
+        res = review.delete()
+        return redirect('un-replied-review')
+
+
+class ReviewDetails(LoginRequiredMixin, PermissionRequiredMixin, DetailView):
+    permission_required = 'is_admin'
+    model = Review
+    template_name='review_details.html'
+    context_object_name='review'

+ 7 - 5
facebook_app/templates/facebook-reviews.html

@@ -9,11 +9,13 @@
         <div class="article-metadata">
             <small class="text-muted">{{ review.create_time|date:"F d, Y" }}</small>
             <small class="text-muted"> at <b>{{ review.page }}</b></small>
-            {% if review.recommendation_type %}
-                <span style="color: green; float: right">Recommended</span>
-            {% else %}
-                <span style="color: red; float: right">Not Recommended</span>
-            {% endif %}
+            <a href="{% url 'facebook-reviews-details' review.id %}">
+              {% if review.recommendation_type %}
+                  <span style="color: green; float: right">Recommended</span>
+              {% else %}
+                  <span style="color: red; float: right">Not Recommended</span>
+              {% endif %}
+            </a>
           <button class="btn btn-link"><a href="https://facebook.com/{{ review.id }}" target="_blank">Link</a></button>
         </div>
         {% if review.review_text %}

+ 38 - 0
facebook_app/templates/facebook_review_details.html

@@ -0,0 +1,38 @@
+{% extends 'base.html' %}
+{% load crispy_forms_tags %}
+
+{% block content %}
+<div class="review__content-detail">
+    <div>
+        <a class="review__remove-btn" type="button" data-toggle="modal" data-target="#exampleModal">
+            <i class="fa fa-trash fa-3x" aria-hidden="true"></i>
+        </a>
+    </div>
+    <div class="review-content">
+            <span>A facebook user: Posted at {{ review.create_time | date:"M dS, Y" }}</span> <br>
+    </div>
+    <p class="mt-5">{{ review.review_text }}</p>
+    <p class="mt-5">{{ review.facebookreviewreply.replied_text }}</p>
+
+<!-- Modal -->
+<div class="modal fade" id="exampleModal" tabindex="-1" role="dialog" aria-labelledby="exampleModalLabel" aria-hidden="true">
+    <div class="modal-dialog" role="document">
+        <div class="modal-content">
+        <div class="modal-header">
+            <h5 class="modal-title" id="exampleModalLabel">Do you want to remove this reivew?</h5>
+            <button type="button" class="close" data-dismiss="modal" aria-label="Close">
+            <span aria-hidden="true">&times;</span>
+            </button>
+        </div>
+        <div class="modal-body">
+            This will delete the review from the database and might add it while syncing with the google review API.
+        </div>
+        <div class="modal-footer">
+            <button type="button" class="btn btn-secondary" data-dismiss="modal">Close</button>
+            <a type="button" class="btn btn-primary" href="{% url 'facebook-reviews-delete' review.id %}">Remove</a>
+        </div>
+        </div>
+    </div>
+</div>
+</div> 
+{% endblock content %}

+ 3 - 1
facebook_app/urls.py

@@ -1,7 +1,9 @@
 from django.urls import path
-from .views import FacebookReviews, FacebookReviewPrediction
+from .views import FacebookReviews, FacebookReviewPrediction, ReviewDetails, DeleteReview
 
 urlpatterns = [
     path('', FacebookReviews.as_view(), name='facebook-reviews'),
     path('prediction/<id>', FacebookReviewPrediction.as_view(), name='facebook-reviews-prediction'),
+    path('details/<pk>', ReviewDetails.as_view(), name='facebook-reviews-details'),
+    path('delete/<review_id>', DeleteReview.as_view(), name='facebook-reviews-delete'),
 ]

+ 16 - 1
facebook_app/views.py

@@ -1,6 +1,6 @@
 from django.shortcuts import render
 from django.shortcuts import redirect
-from django.views.generic import View
+from django.views.generic import View, DetailView
 from django.contrib import messages
 from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger
 from django.contrib.auth.mixins import LoginRequiredMixin, PermissionRequiredMixin
@@ -107,3 +107,18 @@ class FacebookReviewPrediction(LoginRequiredMixin, PermissionRequiredMixin, View
 
         }
         return render(request, 'facebook-reviews.html', context=context)
+
+
+class ReviewDetails(LoginRequiredMixin, PermissionRequiredMixin, DetailView):
+    permission_required = 'is_admin'
+    model = FacebookReview
+    template_name='facebook_review_details.html'
+    context_object_name='review'
+
+class DeleteReview(LoginRequiredMixin, PermissionRequiredMixin, View):
+    permission_required = 'is_admin'
+    
+    def get(self, requset, review_id, *args, **kwargs):
+        review = FacebookReview.objects.filter(id=review_id).first()
+        res = review.delete()
+        return redirect('facebook-reviews')