diff options
author | Étienne Loks <etienne.loks@iggdrasil.net> | 2016-05-22 16:08:55 +0200 |
---|---|---|
committer | Étienne Loks <etienne.loks@iggdrasil.net> | 2016-05-22 16:08:55 +0200 |
commit | 29e3e7daa64e573b7481db4c0c15f1c2bc8730d6 (patch) | |
tree | aec5bfabfb234821dee4233421d717eaf7c576f1 | |
parent | 0e93e02daa16c704e43ec19d5b4028e7a93968a5 (diff) | |
download | Ishtar-29e3e7daa64e573b7481db4c0c15f1c2bc8730d6.tar.bz2 Ishtar-29e3e7daa64e573b7481db4c0c15f1c2bc8730d6.zip |
Basket: manage deletion
-rw-r--r-- | archaeological_finds/urls.py | 7 | ||||
-rw-r--r-- | archaeological_finds/views.py | 38 | ||||
-rw-r--r-- | ishtar_common/static/js/ishtar.js | 12 | ||||
-rw-r--r-- | ishtar_common/templates/ishtar/basket_list.html | 13 |
4 files changed, 60 insertions, 10 deletions
diff --git a/archaeological_finds/urls.py b/archaeological_finds/urls.py index 4629a38a5..deaaaff18 100644 --- a/archaeological_finds/urls.py +++ b/archaeological_finds/urls.py @@ -63,7 +63,7 @@ urlpatterns = patterns( views.NewFindBasketView.as_view()), name='new_findbasket'), url(r'^find_basket_modification_add/$', check_rights(['change_find', 'change_own_find'])( - views.SelectBasketForAdd.as_view()), + views.SelectBasketForManagement.as_view()), name='select_findbasketforadd'), url(r'^find_basket_modification_add/(?P<pk>[0-9]+)?/$', check_rights(['change_find', 'change_own_find'])( @@ -73,6 +73,11 @@ urlpatterns = patterns( check_rights(['change_find', 'change_own_find'])( views.FindBasketAddItemView.as_view()), name='add_iteminbasket'), + url(r'^find_basket_modification_delete_item/(?P<basket>[0-9]+)?' + r'/(?P<find_pk>[0-9]+)?/$', + check_rights(['change_find', 'change_own_find'])( + views.FindBasketDeleteItemView.as_view()), + name='delete_iteminbasket'), url(r'^find_basket_list/(?P<pk>[0-9]+)?/$', check_rights(['change_find', 'change_own_find'])( views.FindBasketListView.as_view()), diff --git a/archaeological_finds/views.py b/archaeological_finds/views.py index a43ebaa12..851245201 100644 --- a/archaeological_finds/views.py +++ b/archaeological_finds/views.py @@ -182,13 +182,13 @@ class NewFindBasketView(IshtarMixin, LoginRequiredMixin, CreateView): return HttpResponseRedirect(self.get_success_url()) -class SelectBasketForAdd(IshtarMixin, LoginRequiredMixin, FormView): +class SelectBasketForManagement(IshtarMixin, LoginRequiredMixin, FormView): template_name = 'ishtar/form.html' form_class = SelectFindBasketForm - page_name = _(u"Add items to basket") + page_name = _(u"Manage items in basket") def get_form_kwargs(self): - kwargs = super(SelectBasketForAdd, self).get_form_kwargs() + kwargs = super(SelectBasketForManagement, self).get_form_kwargs() kwargs['user'] = IshtarUser.objects.get(pk=self.request.user.pk) if 'pk' in self.kwargs: kwargs['initial'].update({'basket': self.kwargs['pk']}) @@ -255,10 +255,40 @@ class FindBasketListView(IshtarMixin, LoginRequiredMixin, TemplateView): raise PermissionDenied context['basket'] = self.basket context['item_url'] = '/'.join( - reverse(models.Find.SHOW_URL, args=[1]).split('/')[:-2]) + reverse(models.Find.SHOW_URL, args=[1]).split('/')[:-1]) + context['delete_url'] = '/'.join( + reverse('delete_iteminbasket', args=[1, 1]).split('/')[:-3]) return context +class FindBasketDeleteItemView(IshtarMixin, LoginRequiredMixin, TemplateView): + template_name = 'ishtar/simple_form.html' + + def get_success_url(self, basket): + return reverse('list_iteminbasket', kwargs={'pk': basket.pk}) + + def get(self, *args, **kwargs): + user = self.request.user + ishtaruser = IshtarUser.objects.get(pk=self.request.user.pk) + try: + find = models.Find.objects.get( + pk=self.kwargs['find_pk']) + except models.Find.DoesNotExist: + raise PermissionDenied + try: + basket = models.FindBasket.objects.get( + pk=self.kwargs['basket'], user=ishtaruser) + except models.FindBasket.DoesNotExist: + raise PermissionDenied + if not user.is_superuser and \ + not ishtaruser.has_right('change_find') and \ + not (ishtaruser.has_right('change_own_find') + and find.is_own(user)): + raise PermissionDenied + basket.items.remove(find) + return HttpResponseRedirect(self.get_success_url(basket)) + + class DeleteFindBasketView(IshtarMixin, LoginRequiredMixin, FormView): template_name = 'ishtar/form_delete.html' form_class = DeleteFindBasketForm diff --git a/ishtar_common/static/js/ishtar.js b/ishtar_common/static/js/ishtar.js index 9af5cf2b0..f469fc546 100644 --- a/ishtar_common/static/js/ishtar.js +++ b/ishtar_common/static/js/ishtar.js @@ -23,6 +23,15 @@ beforeSend: function(xhr, settings) { } }}); +function manage_async_link(event){ + event.preventDefault(); + var url = $(this).attr('href'); + var target = $(this).attr('data-target'); + $.get(url, function(data) { + $(target).html(data); + }); +} + /* default function to prevent undefined */ function get_next_table_id(){} function get_previous_table_id(){} @@ -63,7 +72,8 @@ $(document).ready(function(){ } $('#current_items select').change(function(){ $(this).attr('class', $(this).children("option:selected").attr('class')); - }) + }); + $("a.async-link").click(manage_async_link); }); $(document).on("click", '#to_bottom_arrow', function(){ diff --git a/ishtar_common/templates/ishtar/basket_list.html b/ishtar_common/templates/ishtar/basket_list.html index 5a7af2bc6..a0a0e5d73 100644 --- a/ishtar_common/templates/ishtar/basket_list.html +++ b/ishtar_common/templates/ishtar/basket_list.html @@ -1,5 +1,10 @@ {% load i18n %} -<ul>{% for item in basket.items.all %} - <li> - <a class="display_details" href="#" onclick="load_window('/show-find/{{item.pk}}/');">{% trans 'Details' %}</a> {{item.full_label}}</li>{% endfor %} -</ul> +<table> +<tr>{% for item in basket.items.all %} + <td><a class="display_details" href="#" onclick="load_window('{{item_url}}/{{item.pk}}/');">{% trans 'Details' %}</a></td> + <td>{{item.full_label}}</td> + <td><a class='async-link' data-target='#basket-content' href='{{delete_url}}/{{basket.pk}}/{{item.pk}}/'>{% trans "remove" %}</a></td></tr>{% endfor %} +</table> +<script type='text/javascript'> + $("a.async-link").click(manage_async_link); +</script> |