diff options
Diffstat (limited to 'ishtar_common')
| -rw-r--r-- | ishtar_common/admin.py | 79 | ||||
| -rw-r--r-- | ishtar_common/templates/admin/change_form.html | 39 | 
2 files changed, 117 insertions, 1 deletions
| diff --git a/ishtar_common/admin.py b/ishtar_common/admin.py index 95115860a..b8f3df637 100644 --- a/ishtar_common/admin.py +++ b/ishtar_common/admin.py @@ -26,6 +26,7 @@ from ajax_select.fields import AutoCompleteSelectField, \  from django.conf import settings  from django.conf.urls import url  from django.contrib import admin +from django.contrib.admin.views.main import ChangeList  from django.contrib.auth.admin import GroupAdmin, UserAdmin  from django.contrib.auth.models import Group, User  from django.contrib.contenttypes.models import ContentType @@ -39,8 +40,9 @@ from django.db.models.fields.related import ForeignKey  from django.forms import BaseInlineFormSet  from django.http import HttpResponseRedirect, HttpResponse  from django.shortcuts import render -from django.template.defaultfilters import slugify +from django.utils.decorators import method_decorator  from django.utils.translation import ugettext_lazy as _ +from django.views.decorators.csrf import csrf_protect  from django import forms @@ -57,6 +59,8 @@ from archaeological_finds import forms as find_forms, \      forms_treatments as treatment_forms  from archaeological_warehouse import forms as warehouse_forms +csrf_protect_m = method_decorator(csrf_protect) +  ISHTAR_FORMS = [common_forms, file_pdl_forms, file_forms, operation_forms,                  context_record_forms, find_forms, treatment_forms, @@ -254,9 +258,27 @@ class GlobalVarAdmin(admin.ModelAdmin):  admin_site.register(models.GlobalVar, GlobalVarAdmin) +class ChangeListForChangeView(ChangeList): +    def get_filters_params(self, params=None): +        """ +        Get the current list queryset parameters from _changelist_filters +        """ +        filtered_params = {} +        lookup_params = super( +            ChangeListForChangeView, self).get_filters_params(params) +        if '_changelist_filters' in lookup_params: +            params = lookup_params.pop('_changelist_filters') +            for param in params.split("&"): +                key, value = param.split("=") +                filtered_params[key] = value +        return filtered_params + +  class GeneralTypeAdmin(admin.ModelAdmin):      list_display = ['label', 'txt_idx', 'available', 'comment']      search_fields = ('label', 'txt_idx', 'comment',) +    list_filter = ('available',) +    save_on_top = True      actions = [export_as_csv_action()]      prepopulated_fields = {"txt_idx": ("label",)}      change_list_template = "admin/gen_change_list.html" @@ -268,6 +290,61 @@ class GeneralTypeAdmin(admin.ModelAdmin):          ]          return my_urls + urls +    @csrf_protect_m +    def get_changelist_queryset(self, request): +        """ +        Get the changelist queryset to be used in the change view. +        Used by previous and next button. +        Mainly a copy from: +        django/contrib/admin/options.py ModelAdmin->changelist_view +        """ +        list_display = self.get_list_display(request) +        list_display_links = self.get_list_display_links(request, list_display) +        list_filter = self.get_list_filter(request) +        search_fields = self.get_search_fields(request) +        list_select_related = self.get_list_select_related(request) + +        cl = ChangeListForChangeView( +            request, self.model, list_display, +            list_display_links, list_filter, self.date_hierarchy, +            search_fields, list_select_related, self.list_per_page, +            self.list_max_show_all, self.list_editable, self, +        ) +        return cl.get_queryset(request) + +    def change_view(self, request, object_id, form_url='', extra_context=None): +        """ +        Next and previous button on the change view +        """ +        if not extra_context: +            extra_context = {} +        ids = list(self.get_changelist_queryset(request).values('pk')) +        previous, current_is_reached, first = None, False, None +        extra_context['get_attr'] = "" +        if request.GET: +            extra_context['get_attr'] = "?" + request.GET.urlencode() +        for v in ids: +            pk = str(v['pk']) +            if pk == object_id: +                current_is_reached = True +                if previous: +                    extra_context['previous_item'] = previous +            elif current_is_reached: +                extra_context['next_item'] = pk +                break +            else: +                if not first: +                    first = pk +                previous = pk +        if 'previous_item' not in extra_context and \ +                'next_item' not in extra_context and first: +            # on modify current object do not match current criteria +            # next is the first item +            extra_context['next_item'] = first + +        return super(GeneralTypeAdmin, self).change_view( +            request, object_id, form_url, extra_context) +      def import_generic(self, request):          form = None diff --git a/ishtar_common/templates/admin/change_form.html b/ishtar_common/templates/admin/change_form.html new file mode 100644 index 000000000..f5c83faa6 --- /dev/null +++ b/ishtar_common/templates/admin/change_form.html @@ -0,0 +1,39 @@ +{% extends "admin/change_form.html" %} +{% load i18n admin_urls static admin_list %} + +{% block extrahead %} +{{ block.super }} +<style> +.object-tools a.disabled:link, .object-tools a.disabled:visited, +.object-tools a.disabled:focus, .object-tools a.disabled:hover { +    background: #ccc; +    color: #eee; +    pointer-events: none; +} +</style> +{% endblock %} + +    {% block object-tools-items %} +    <li> +        {% url opts|admin_urlname:'history' original.pk|admin_urlquote as history_url %} +        <a href="{% add_preserved_filters history_url %}" class="historylink">{% trans "History" %}</a> +    </li> +    {% if has_absolute_url %}<li><a href="{{ absolute_url }}" class="viewsitelink">{% trans "View on site" %}</a></li>{% endif %} +    <li>{% if previous_item %} +        <a href="{% url opts|admin_urlname:'change' previous_item %}{{get_attr}}"> +            {% trans "Previous" %} +        </a>{% else %} +        <a href="#" class="disabled"> +            {% trans "Previous" %} +        </a> +    {% endif %}</li> +    <li>{% if next_item %} +        <a href="{% url opts|admin_urlname:'change' next_item %}{{get_attr}}"> +            {% trans "Next" %} +        </a>{% else %} +        <a href="#" class="disabled"> +            {% trans "Next" %} +        </a> +    {% endif %} +    </li> +    {% endblock %} | 
