Commit 2146f0a66bf5f1cb3a4c82dfc0617c6068cd8dc6
1 parent
e05c0b18
Exists in
master
and in
3 other branches
Adding general post deletion
Showing
7 changed files
with
100 additions
and
4 deletions
Show diff stats
amadeus/static/css/base/amadeus.css
| @@ -1018,6 +1018,10 @@ li.item .notify_badge { | @@ -1018,6 +1018,10 @@ li.item .notify_badge { | ||
| 1018 | margin: 0; | 1018 | margin: 0; |
| 1019 | } | 1019 | } |
| 1020 | 1020 | ||
| 1021 | +.post .post-user .btn-group .dropdown-menu a { | ||
| 1022 | + cursor: pointer; | ||
| 1023 | +} | ||
| 1024 | + | ||
| 1021 | .post .post-user .btn-group .btn_menu i { | 1025 | .post .post-user .btn-group .btn_menu i { |
| 1022 | font-size: 18px; | 1026 | font-size: 18px; |
| 1023 | } | 1027 | } |
mural/models.py
| @@ -30,18 +30,28 @@ class Mural(KnowsChild): | @@ -30,18 +30,28 @@ class Mural(KnowsChild): | ||
| 30 | def update_link(self): | 30 | def update_link(self): |
| 31 | pass | 31 | pass |
| 32 | 32 | ||
| 33 | + @always_as_child | ||
| 34 | + def delete_link(self): | ||
| 35 | + pass | ||
| 36 | + | ||
| 33 | class GeneralPost(Mural): | 37 | class GeneralPost(Mural): |
| 34 | space = models.IntegerField(_('Space'), default = 0, blank = True) | 38 | space = models.IntegerField(_('Space'), default = 0, blank = True) |
| 35 | 39 | ||
| 36 | def update_link(self): | 40 | def update_link(self): |
| 37 | return "mural:update_general" | 41 | return "mural:update_general" |
| 38 | 42 | ||
| 43 | + def delete_link(self): | ||
| 44 | + return "mural:delete_general" | ||
| 45 | + | ||
| 39 | class CategoryPost(Mural): | 46 | class CategoryPost(Mural): |
| 40 | space = models.ForeignKey(Category, verbose_name = ('Category'), related_name = 'post_category') | 47 | space = models.ForeignKey(Category, verbose_name = ('Category'), related_name = 'post_category') |
| 41 | 48 | ||
| 42 | def update_link(self): | 49 | def update_link(self): |
| 43 | return "" | 50 | return "" |
| 44 | 51 | ||
| 52 | + def delete_link(self): | ||
| 53 | + return "" | ||
| 54 | + | ||
| 45 | class SubjectPost(Mural): | 55 | class SubjectPost(Mural): |
| 46 | space = models.ForeignKey(Subject, verbose_name = _('Subject'), related_name = 'post_subject') | 56 | space = models.ForeignKey(Subject, verbose_name = _('Subject'), related_name = 'post_subject') |
| 47 | resource = models.ForeignKey(Resource, verbose_name = _('Resource'), related_name = 'post_resource', null = True) | 57 | resource = models.ForeignKey(Resource, verbose_name = _('Resource'), related_name = 'post_resource', null = True) |
| @@ -49,6 +59,9 @@ class SubjectPost(Mural): | @@ -49,6 +59,9 @@ class SubjectPost(Mural): | ||
| 49 | def update_link(self): | 59 | def update_link(self): |
| 50 | return "" | 60 | return "" |
| 51 | 61 | ||
| 62 | + def delete_link(self): | ||
| 63 | + return "" | ||
| 64 | + | ||
| 52 | class Comment(models.Model): | 65 | class Comment(models.Model): |
| 53 | comment = models.TextField(_('Comment'), blank = True) | 66 | comment = models.TextField(_('Comment'), blank = True) |
| 54 | image = models.ImageField(verbose_name = _('Image'), null=True, blank = True, upload_to = 'posts/comments/', validators = [validate_img_extension]) | 67 | image = models.ImageField(verbose_name = _('Image'), null=True, blank = True, upload_to = 'posts/comments/', validators = [validate_img_extension]) |
mural/templates/mural/_view.html
| @@ -20,7 +20,7 @@ | @@ -20,7 +20,7 @@ | ||
| 20 | <ul class="dropdown-menu pull-right" aria-labelledby="moreActions"> | 20 | <ul class="dropdown-menu pull-right" aria-labelledby="moreActions"> |
| 21 | <li><a onclick="editPost($(this));" data-url="{% url post.update_link post.id %}" data-post="{{ post.id }}"><i class="fa fa-pencil fa-fw" aria-hidden="true"></i> {% trans 'Edit' %}</a></li> | 21 | <li><a onclick="editPost($(this));" data-url="{% url post.update_link post.id %}" data-post="{{ post.id }}"><i class="fa fa-pencil fa-fw" aria-hidden="true"></i> {% trans 'Edit' %}</a></li> |
| 22 | <li> | 22 | <li> |
| 23 | - <a href="" aria-hidden="true"><i class="fa fa-trash fa-fw" aria-hidden="true"></i> {% trans 'Remove' %}</a></li> | 23 | + <a onclick="deletePost($(this))" data-url="{% url post.delete_link post.id %}" data-post="{{ post.id }}" aria-hidden="true"><i class="fa fa-trash fa-fw" aria-hidden="true"></i> {% trans 'Remove' %}</a></li> |
| 24 | </ul> | 24 | </ul> |
| 25 | </span> | 25 | </span> |
| 26 | {% endif %} | 26 | {% endif %} |
| @@ -0,0 +1,20 @@ | @@ -0,0 +1,20 @@ | ||
| 1 | +{% load i18n %} | ||
| 2 | + | ||
| 3 | +<div class="modal-dialog" role="document"> | ||
| 4 | + <div class="modal-content"> | ||
| 5 | + <div class="modal-body"> | ||
| 6 | + <form id="delete_form" action="{{ form_url }}" method="post"> | ||
| 7 | + {% csrf_token %} | ||
| 8 | + <h4>{% trans 'Are you sure you want to delete this post' %}?</h4> | ||
| 9 | + </form> | ||
| 10 | + </div> | ||
| 11 | + <div class="modal-footer"> | ||
| 12 | + <div class="pull-right"> | ||
| 13 | + <button type="button" class="btn btn-default btn-raised" data-dismiss="modal">{% trans "Close" %}</button> | ||
| 14 | + </div> | ||
| 15 | + <div class="pull-left"> | ||
| 16 | + <button type="submit" form="delete_form" class="btn btn-success btn-raised">{% trans "Delete" %}</button> | ||
| 17 | + </div> | ||
| 18 | + </div> | ||
| 19 | + </div> | ||
| 20 | +</div> | ||
| 0 | \ No newline at end of file | 21 | \ No newline at end of file |
mural/templates/mural/list.html
| @@ -136,20 +136,57 @@ | @@ -136,20 +136,57 @@ | ||
| 136 | function editPost(btn) { | 136 | function editPost(btn) { |
| 137 | var url = btn.data('url'); | 137 | var url = btn.data('url'); |
| 138 | var post = btn.data('post'); | 138 | var post = btn.data('post'); |
| 139 | + | ||
| 140 | + $.ajax({ | ||
| 141 | + url: url, | ||
| 142 | + success: function (data) { | ||
| 143 | + $('#post-modal-form').html(data); | ||
| 139 | 144 | ||
| 140 | - console.log(url); | ||
| 141 | - console.log(post); | 145 | + setPostFormSubmit(post); |
| 146 | + | ||
| 147 | + $('#post-modal-form').modal('show'); | ||
| 148 | + } | ||
| 149 | + }); | ||
| 150 | + } | ||
| 151 | + | ||
| 152 | + function deletePost(btn) { | ||
| 153 | + var url = btn.data('url'); | ||
| 154 | + var post = btn.data('post'); | ||
| 142 | 155 | ||
| 143 | $.ajax({ | 156 | $.ajax({ |
| 144 | url: url, | 157 | url: url, |
| 145 | success: function (data) { | 158 | success: function (data) { |
| 146 | $('#post-modal-form').html(data); | 159 | $('#post-modal-form').html(data); |
| 147 | 160 | ||
| 148 | - setPostFormSubmit(post); | 161 | + setPostDeleteSubmit(post); |
| 149 | 162 | ||
| 150 | $('#post-modal-form').modal('show'); | 163 | $('#post-modal-form').modal('show'); |
| 151 | } | 164 | } |
| 152 | }); | 165 | }); |
| 153 | } | 166 | } |
| 167 | + | ||
| 168 | + function setPostDeleteSubmit (post) { | ||
| 169 | + var frm = $("#delete_form"); | ||
| 170 | + | ||
| 171 | + frm.submit(function () { | ||
| 172 | + $.ajax({ | ||
| 173 | + type: frm.attr('method'), | ||
| 174 | + url: frm.attr('action'), | ||
| 175 | + data: frm.serialize(), | ||
| 176 | + success: function (response) { | ||
| 177 | + $("#post-" + post).remove(); | ||
| 178 | + | ||
| 179 | + $('#post-modal-form').modal('hide'); | ||
| 180 | + | ||
| 181 | + alertify.success(response.msg); | ||
| 182 | + }, | ||
| 183 | + error: function (data) { | ||
| 184 | + console.log(data); | ||
| 185 | + } | ||
| 186 | + }); | ||
| 187 | + | ||
| 188 | + return false; | ||
| 189 | + }); | ||
| 190 | + } | ||
| 154 | </script> | 191 | </script> |
| 155 | {% endblock %} | 192 | {% endblock %} |
| 156 | \ No newline at end of file | 193 | \ No newline at end of file |
mural/urls.py
| @@ -5,6 +5,8 @@ urlpatterns = [ | @@ -5,6 +5,8 @@ urlpatterns = [ | ||
| 5 | url(r'^$', views.GeneralIndex.as_view(), name='manage_general'), | 5 | url(r'^$', views.GeneralIndex.as_view(), name='manage_general'), |
| 6 | url(r'^create_gen/$', views.GeneralCreate.as_view(), name='create_general'), | 6 | url(r'^create_gen/$', views.GeneralCreate.as_view(), name='create_general'), |
| 7 | url(r'^update_gen/(?P<pk>[\w_-]+)/$', views.GeneralUpdate.as_view(), name='update_general'), | 7 | url(r'^update_gen/(?P<pk>[\w_-]+)/$', views.GeneralUpdate.as_view(), name='update_general'), |
| 8 | + url(r'^delete_gen/(?P<pk>[\w_-]+)/$', views.GeneralDelete.as_view(), name='delete_general'), | ||
| 8 | url(r'^render_post/([\w_-]+)/([\w_-]+)/$', views.render_gen_post, name='render_post_general'), | 9 | url(r'^render_post/([\w_-]+)/([\w_-]+)/$', views.render_gen_post, name='render_post_general'), |
| 9 | url(r'^favorite/([\w_-]+)/$', views.favorite, name='favorite'), | 10 | url(r'^favorite/([\w_-]+)/$', views.favorite, name='favorite'), |
| 11 | + url(r'^deleted/$', views.deleted_post, name='deleted_post'), | ||
| 10 | ] | 12 | ] |
| 11 | \ No newline at end of file | 13 | \ No newline at end of file |
mural/views.py
| @@ -132,6 +132,23 @@ class GeneralUpdate(LoginRequiredMixin, generic.UpdateView): | @@ -132,6 +132,23 @@ class GeneralUpdate(LoginRequiredMixin, generic.UpdateView): | ||
| 132 | def get_success_url(self): | 132 | def get_success_url(self): |
| 133 | return reverse_lazy('mural:render_post_general', args = (self.object.id, 'update', )) | 133 | return reverse_lazy('mural:render_post_general', args = (self.object.id, 'update', )) |
| 134 | 134 | ||
| 135 | +class GeneralDelete(LoginRequiredMixin, generic.DeleteView): | ||
| 136 | + login_url = reverse_lazy("users:login") | ||
| 137 | + redirect_field_name = 'next' | ||
| 138 | + | ||
| 139 | + template_name = 'mural/delete.html' | ||
| 140 | + model = GeneralPost | ||
| 141 | + | ||
| 142 | + def get_context_data(self, *args, **kwargs): | ||
| 143 | + context = super(GeneralDelete, self).get_context_data(*args, **kwargs) | ||
| 144 | + | ||
| 145 | + context['form_url'] = reverse_lazy("mural:delete_general", args = (), kwargs = {'pk': self.object.id}) | ||
| 146 | + | ||
| 147 | + return context | ||
| 148 | + | ||
| 149 | + def get_success_url(self): | ||
| 150 | + return reverse_lazy('mural:deleted_post') | ||
| 151 | + | ||
| 135 | def render_gen_post(request, post, msg): | 152 | def render_gen_post(request, post, msg): |
| 136 | post = get_object_or_404(GeneralPost, id = post) | 153 | post = get_object_or_404(GeneralPost, id = post) |
| 137 | 154 | ||
| @@ -149,6 +166,9 @@ def render_gen_post(request, post, msg): | @@ -149,6 +166,9 @@ def render_gen_post(request, post, msg): | ||
| 149 | 166 | ||
| 150 | return JsonResponse({'message': msg, 'view': html}) | 167 | return JsonResponse({'message': msg, 'view': html}) |
| 151 | 168 | ||
| 169 | +def deleted_post(request): | ||
| 170 | + return JsonResponse({'msg': _('Post deleted successfully!')}) | ||
| 171 | + | ||
| 152 | @login_required | 172 | @login_required |
| 153 | def favorite(request, post): | 173 | def favorite(request, post): |
| 154 | action = request.GET.get('action', '') | 174 | action = request.GET.get('action', '') |