diff options
| -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> | 
