Commit 29448ed5630d0d557beac079b1bb32d04f9964fb
1 parent
02e08c20
Exists in
master
and in
3 other branches
Adding webpage deletion
Showing
5 changed files
with
75 additions
and
5 deletions
Show diff stats
topics/views.py
@@ -131,6 +131,18 @@ class DeleteView(LoginRequiredMixin, generic.DeleteView): | @@ -131,6 +131,18 @@ class DeleteView(LoginRequiredMixin, generic.DeleteView): | ||
131 | 131 | ||
132 | return super(DeleteView, self).dispatch(request, *args, **kwargs) | 132 | return super(DeleteView, self).dispatch(request, *args, **kwargs) |
133 | 133 | ||
134 | + def delete(self, request, *args, **kwargs): | ||
135 | + self.object = self.get_object() | ||
136 | + | ||
137 | + if self.object.resource_topic.count() > 0: | ||
138 | + messages.error(self.request, _('Could not remove this topic. It has on or more resources attached.')) | ||
139 | + | ||
140 | + return redirect(reverse_lazy('subjects:view', kwargs = {'slug': self.object.subject.slug})) | ||
141 | + else: | ||
142 | + self.object.delete() | ||
143 | + | ||
144 | + return redirect(self.get_success_url()) | ||
145 | + | ||
134 | def get_success_url(self): | 146 | def get_success_url(self): |
135 | messages.success(self.request, _('Topic "%s" was removed from virtual enviroment "%s" successfully!')%(self.object.name, self.object.subject.name)) | 147 | messages.success(self.request, _('Topic "%s" was removed from virtual enviroment "%s" successfully!')%(self.object.name, self.object.subject.name)) |
136 | 148 |
@@ -0,0 +1,22 @@ | @@ -0,0 +1,22 @@ | ||
1 | +{% load i18n %} | ||
2 | + | ||
3 | +<div class="modal fade" id="topic" tabindex="-1" role="dialog" aria-labelledby="myModalLabel"> | ||
4 | + <div class="modal-dialog" role="document"> | ||
5 | + <div class="modal-content"> | ||
6 | + <div class="modal-body"> | ||
7 | + <form id="delete_form" action="{% url 'webpages:delete' webpage.slug %}" method="post"> | ||
8 | + {% csrf_token %} | ||
9 | + <h4>{% trans 'Are you sure you want delete the webpage' %}: {{ webpage }}?</h4> | ||
10 | + </form> | ||
11 | + </div> | ||
12 | + <div class="modal-footer"> | ||
13 | + <div class="pull-right"> | ||
14 | + <button type="button" class="btn btn-default btn-raised" data-dismiss="modal">{% trans "Close" %}</button> | ||
15 | + </div> | ||
16 | + <div class="pull-left"> | ||
17 | + <button type="submit" form="delete_form" class="btn btn-success btn-raised">{% trans "Delete" %}</button> | ||
18 | + </div> | ||
19 | + </div> | ||
20 | + </div> | ||
21 | + </div> | ||
22 | +</div> | ||
0 | \ No newline at end of file | 23 | \ No newline at end of file |
webpage/templates/webpages/list.html
@@ -25,8 +25,8 @@ | @@ -25,8 +25,8 @@ | ||
25 | <i class="fa fa-ellipsis-v" aria-hidden="true"></i> | 25 | <i class="fa fa-ellipsis-v" aria-hidden="true"></i> |
26 | </a> | 26 | </a> |
27 | <ul class="dropdown-menu pull-right" role="menu" aria-labelledby="moreResources"> | 27 | <ul class="dropdown-menu pull-right" role="menu" aria-labelledby="moreResources"> |
28 | - <li><a href="{% url 'webpages:update' topic.slug resource.slug %}"><i class="fa fa-pencil fa-fw" aria-hidden="true"></i>{% trans 'Edit' %}</a></li> | ||
29 | - <li><a href="javascript:delete_topic('{% url 'topics:delete' topic.slug %}')"><i class="fa fa-trash fa-fw" aria-hidden="true"></i>{% trans 'Remove' %}</a></li> | 28 | + <li><a href="{% url 'webpages:update' topic.slug resource.slug %}" class="edit"><i class="fa fa-pencil fa-fw" aria-hidden="true"></i>{% trans 'Edit' %}</a></li> |
29 | + <li><a href="javascript:delete_resource('{% url 'webpages:delete' resource.slug %}')" class="delete"><i class="fa fa-trash fa-fw" aria-hidden="true"></i>{% trans 'Remove' %}</a></li> | ||
30 | </ul> | 30 | </ul> |
31 | </span> | 31 | </span> |
32 | </div> | 32 | </div> |
@@ -40,11 +40,24 @@ | @@ -40,11 +40,24 @@ | ||
40 | {% endfor %} | 40 | {% endfor %} |
41 | </div> | 41 | </div> |
42 | <script type="text/javascript"> | 42 | <script type="text/javascript"> |
43 | + function delete_resource(url) { | ||
44 | + $('.modal').remove(); | ||
45 | + | ||
46 | + $.get(url, function (modal) { | ||
47 | + $("#resource_{{ topic.slug }}").parent().after(modal); | ||
48 | + | ||
49 | + $('.modal').modal('show'); | ||
50 | + }); | ||
51 | + } | ||
52 | + | ||
43 | $(".list-group-item").unbind().on('click', function (e) { | 53 | $(".list-group-item").unbind().on('click', function (e) { |
44 | var arrow = $(this).find('i.fa-arrows').is(e.target), | 54 | var arrow = $(this).find('i.fa-arrows').is(e.target), |
45 | - menu = $(this).find('i.fa-ellipsis-v').is(e.target); | 55 | + menu = $(this).find('i.fa-ellipsis-v').is(e.target), |
56 | + del = $(this).find('a.delete').is(e.target), | ||
57 | + upd = $(this).find('a.edit').is(e.target); | ||
46 | 58 | ||
47 | - if (!arrow && !menu) { | 59 | + |
60 | + if (!arrow && !menu && !del && !upd) { | ||
48 | var link = $(this).find('.resource_link').attr('href'), | 61 | var link = $(this).find('.resource_link').attr('href'), |
49 | target = $(this).find('.resource_link').attr('target'); | 62 | target = $(this).find('.resource_link').attr('target'); |
50 | 63 |
webpage/urls.py
@@ -6,6 +6,7 @@ from . import views | @@ -6,6 +6,7 @@ from . import views | ||
6 | urlpatterns = [ | 6 | urlpatterns = [ |
7 | url(r'^create/(?P<slug>[\w_-]+)/$', views.CreateView.as_view(), name = 'create'), | 7 | url(r'^create/(?P<slug>[\w_-]+)/$', views.CreateView.as_view(), name = 'create'), |
8 | url(r'^update/(?P<topic_slug>[\w_-]+)/(?P<slug>[\w_-]+)/$', views.UpdateView.as_view(), name = 'update'), | 8 | url(r'^update/(?P<topic_slug>[\w_-]+)/(?P<slug>[\w_-]+)/$', views.UpdateView.as_view(), name = 'update'), |
9 | + url(r'^delete/(?P<slug>[\w_-]+)/$', views.DeleteView.as_view(), name = 'delete'), | ||
9 | url(r'^window_view/(?P<slug>[\w_-]+)/$', views.NewWindowView.as_view(), name = 'window_view'), | 10 | url(r'^window_view/(?P<slug>[\w_-]+)/$', views.NewWindowView.as_view(), name = 'window_view'), |
10 | url(r'^view/(?P<slug>[\w_-]+)/$', views.InsideView.as_view(), name = 'view'), | 11 | url(r'^view/(?P<slug>[\w_-]+)/$', views.InsideView.as_view(), name = 'view'), |
11 | ] | 12 | ] |
webpage/views.py
@@ -242,4 +242,26 @@ class UpdateView(LoginRequiredMixin, generic.UpdateView): | @@ -242,4 +242,26 @@ class UpdateView(LoginRequiredMixin, generic.UpdateView): | ||
242 | 242 | ||
243 | success_url = reverse_lazy('subjects:view', kwargs = {'slug': self.object.topic.subject.slug}) | 243 | success_url = reverse_lazy('subjects:view', kwargs = {'slug': self.object.topic.subject.slug}) |
244 | 244 | ||
245 | - return success_url | ||
246 | \ No newline at end of file | 245 | \ No newline at end of file |
246 | + return success_url | ||
247 | + | ||
248 | +class DeleteView(LoginRequiredMixin, generic.DeleteView): | ||
249 | + login_url = reverse_lazy("users:login") | ||
250 | + redirect_field_name = 'next' | ||
251 | + | ||
252 | + template_name = 'webpages/delete.html' | ||
253 | + model = Webpage | ||
254 | + context_object_name = 'webpage' | ||
255 | + | ||
256 | + def dispatch(self, request, *args, **kwargs): | ||
257 | + slug = self.kwargs.get('slug', '') | ||
258 | + webpage = get_object_or_404(Webpage, slug = slug) | ||
259 | + | ||
260 | + if not has_subject_permissions(request.user, webpage.topic.subject): | ||
261 | + return redirect(reverse_lazy('subjects:home')) | ||
262 | + | ||
263 | + return super(DeleteView, self).dispatch(request, *args, **kwargs) | ||
264 | + | ||
265 | + def get_success_url(self): | ||
266 | + messages.success(self.request, _('The webpage "%s" was removed successfully from virtual environment "%s"!')%(self.object.name, self.object.topic.subject.name)) | ||
267 | + | ||
268 | + return reverse_lazy('subjects:view', kwargs = {'slug': self.object.topic.subject.slug}) | ||
247 | \ No newline at end of file | 269 | \ No newline at end of file |