diff options
| author | Étienne Loks <etienne.loks@iggdrasil.net> | 2017-11-24 19:39:06 +0100 | 
|---|---|---|
| committer | Étienne Loks <etienne.loks@iggdrasil.net> | 2017-11-24 19:39:06 +0100 | 
| commit | a1c527975f9be70e5d3807f072a05a52c35b7c8e (patch) | |
| tree | 3eab6d3ab5f8da3f4cb7c803b2237928b27b9d74 /ishtar_common/admin.py | |
| parent | 5d8a340c76470f47c45dd944a28f01b752ce6e98 (diff) | |
| parent | b1897e55f28e9c3f56c41ae90067ad9890598b4c (diff) | |
| download | Ishtar-a1c527975f9be70e5d3807f072a05a52c35b7c8e.tar.bz2 Ishtar-a1c527975f9be70e5d3807f072a05a52c35b7c8e.zip | |
Merge branch 'develop' into develop-bootstrap
Diffstat (limited to 'ishtar_common/admin.py')
| -rw-r--r-- | ishtar_common/admin.py | 127 | 
1 files changed, 126 insertions, 1 deletions
| diff --git a/ishtar_common/admin.py b/ishtar_common/admin.py index c3ad21710..189a02c05 100644 --- a/ishtar_common/admin.py +++ b/ishtar_common/admin.py @@ -31,6 +31,8 @@ from django.contrib.contenttypes.models import ContentType  from django.contrib.sites.admin import SiteAdmin  from django.contrib.sites.models import Site  from django.contrib.gis.forms import PointField, OSMWidget, MultiPolygonField +from django.core.cache import cache +from django.forms import BaseInlineFormSet  from django.http import HttpResponseRedirect, HttpResponse  from django.shortcuts import render  from django.template.defaultfilters import slugify @@ -38,8 +40,22 @@ from django.utils.translation import ugettext_lazy as _  from django import forms -from ishtar_common.apps import admin_site  from ishtar_common import models +from ishtar_common.apps import admin_site +from ishtar_common.utils import get_cache + +from ishtar_common import forms as common_forms +from archaeological_files import forms as file_forms +from archaeological_operations import forms as operation_forms +from archaeological_context_records import forms as context_record_forms +from archaeological_finds import forms as find_forms, \ +    forms_treatments as treatment_forms +from archaeological_warehouse import forms as warehouse_forms + + +ISHTAR_FORMS = [common_forms, file_forms, operation_forms, +                context_record_forms, find_forms, treatment_forms, +                warehouse_forms]  class ImportGenericForm(forms.Form): @@ -76,6 +92,7 @@ def gen_import_generic(self, request, queryset):                       request.POST.getlist(admin.ACTION_CHECKBOX_NAME)})      return render(request, 'admin/import_from_csv.html', {'csv_form': form}) +  gen_import_generic.short_description = "Import from a CSV file" @@ -151,6 +168,7 @@ class IshtarSiteProfileAdmin(admin.ModelAdmin):                      'find', 'warehouse', 'mapping', 'preservation')      model = models.IshtarSiteProfile +  admin_site.register(models.IshtarSiteProfile, IshtarSiteProfileAdmin) @@ -158,6 +176,7 @@ class DepartmentAdmin(admin.ModelAdmin):      list_display = ('number', 'label',)      model = models.Department +  admin_site.register(models.Department, DepartmentAdmin) @@ -168,6 +187,7 @@ class OrganizationAdmin(HistorizedObjectAdmin):      exclude = ('merge_key', 'merge_exclusion', 'merge_candidate', )      model = models.Organization +  admin_site.register(models.Organization, OrganizationAdmin) @@ -179,6 +199,7 @@ class PersonAdmin(HistorizedObjectAdmin):      form = make_ajax_form(models.Person, {'attached_to': 'organization'})      model = models.Person +  admin_site.register(models.Person, PersonAdmin) @@ -236,6 +257,7 @@ class AuthorAdmin(admin.ModelAdmin):      model = models.Author      form = make_ajax_form(models.Author, {'person': 'person'}) +  admin_site.register(models.Author, AuthorAdmin) @@ -244,11 +266,14 @@ class PersonTypeAdmin(admin.ModelAdmin):      model = models.PersonType      filter_vertical = ('groups',) +  admin_site.register(models.PersonType, PersonTypeAdmin)  class GlobalVarAdmin(admin.ModelAdmin):      list_display = ['slug', 'description', 'value'] + +  admin_site.register(models.GlobalVar, GlobalVarAdmin) @@ -275,16 +300,22 @@ class ImporterDefaultAdmin(admin.ModelAdmin):      list_display = ('importer_type', 'target')      model = models.ImporterDefault      inlines = (ImporterDefaultValuesInline,) + +  admin_site.register(models.ImporterDefault, ImporterDefaultAdmin)  class ImporterTypeAdmin(admin.ModelAdmin):      list_display = ('name', 'associated_models', 'available') + +  admin_site.register(models.ImporterType, ImporterTypeAdmin)  class RegexpAdmin(admin.ModelAdmin):      list_display = ('name', 'description', "regexp") + +  admin_site.register(models.Regexp, RegexpAdmin) @@ -312,6 +343,8 @@ class ImporterColumnAdmin(admin.ModelAdmin):                      'targets_lbl', 'duplicate_fields_lbl', 'required')      list_filter = ('importer_type',)      inlines = (ImportTargetInline, ImporterDuplicateFieldInline) + +  admin_site.register(models.ImporterColumn, ImporterColumnAdmin) @@ -319,11 +352,14 @@ class ImporterModelAdmin(admin.ModelAdmin):      list_display = ('name', 'klass')      model = models.ImporterModel +  admin_site.register(models.ImporterModel, ImporterModelAdmin)  class FormaterTypeAdmin(admin.ModelAdmin):      list_display = ('formater_type', 'options') + +  admin_site.register(models.FormaterType, FormaterTypeAdmin) @@ -331,6 +367,8 @@ class ImportAdmin(admin.ModelAdmin):      list_display = ('name', 'importer_type', 'imported_file', 'user', 'state',                      'creation_date')      form = make_ajax_form(models.Import, {'user': 'ishtaruser'}) + +  admin_site.register(models.Import, ImportAdmin) @@ -338,6 +376,8 @@ class TargetKeyGroupAdmin(admin.ModelAdmin):      list_display = ('name', 'all_user_can_use', 'all_user_can_modify',                      'available')      search_fields = ('name',) + +  admin_site.register(models.TargetKeyGroup, TargetKeyGroupAdmin) @@ -346,6 +386,8 @@ class TargetKeyAdmin(admin.ModelAdmin):                      'value', 'is_set')      list_filter = ("is_set", "target__column__importer_type")      search_fields = ('target__target', 'value', 'key') + +  admin_site.register(models.TargetKey, TargetKeyAdmin) @@ -353,18 +395,23 @@ class OperationTypeAdmin(GeneralTypeAdmin):      list_display = GeneralTypeAdmin.list_display + ['order', 'preventive']      model = models.OperationType +  admin_site.register(models.OperationType, OperationTypeAdmin)  class SpatialReferenceSystemAdmin(GeneralTypeAdmin):      list_display = GeneralTypeAdmin.list_display + ['order', 'srid']      model = models.SpatialReferenceSystem + +  admin_site.register(models.SpatialReferenceSystem, SpatialReferenceSystemAdmin)  class ItemKeyAdmin(admin.ModelAdmin):      list_display = ('content_type', 'key', 'content_object', 'importer')      search_fields = ('key', ) + +  admin_site.register(models.ItemKey, ItemKeyAdmin) @@ -418,6 +465,83 @@ class JsonDataFieldAdmin(admin.ModelAdmin):  admin_site.register(models.JsonDataField, JsonDataFieldAdmin) +def get_choices_form(): +    cache_key, value = get_cache(models.CustomForm, ['associated-forms']) +    if value: +        return value +    forms = [] +    for slug in models.CustomForm.register(): +        forms.append((slug, models.CustomForm._register[slug].form_admin_name)) +    forms = sorted(forms, key=lambda x: x[1]) +    cache.set(cache_key, forms, settings.CACHE_TIMEOUT) +    return forms + + +class CustomFormForm(forms.ModelForm): +    class Meta: +        model = models.CustomForm +        exclude = [] +    form = forms.ChoiceField(label=_(u"Form"), choices=get_choices_form) +    users = AutoCompleteSelectMultipleField('ishtaruser', required=False, +                                            label=_(u"Users")) + + +class ExcludeFieldFormset(BaseInlineFormSet): +    def get_form_kwargs(self, index): +        kwargs = super(ExcludeFieldFormset, self).get_form_kwargs(index) +        if not self.instance or not self.instance.pk: +            return kwargs +        form = self.instance.get_form_class() +        if not form: +            kwargs['choices'] = [] +            return kwargs +        kwargs['choices'] = [('', '--')] + form.get_custom_fields() +        return kwargs + + +class ExcludeFieldForm(forms.ModelForm): +    class Meta: +        model = models.ExcludedField +        exclude = [] +    field = forms.ChoiceField(label=_(u"Field")) + +    def __init__(self, *args, **kwargs): +        choices = kwargs.pop('choices') +        super(ExcludeFieldForm, self).__init__(*args, **kwargs) +        self.fields['field'].choices = choices + + +class ExcludeFieldInline(admin.TabularInline): +    model = models.ExcludedField +    extra = 2 +    form = ExcludeFieldForm +    formset = ExcludeFieldFormset + + +class CustomFormAdmin(admin.ModelAdmin): +    list_display = ['name', 'form', 'available', 'enabled', 'apply_to_all', +                    'users_lbl', 'user_types_lbl'] +    fields = ('name', 'form', 'available', 'enabled', 'apply_to_all', 'users', +              'user_types') +    form = CustomFormForm +    inlines = [ExcludeFieldInline] + +    def get_inline_instances(self, request, obj=None): +        # no inline on creation +        if not obj: +            return [] +        return super(CustomFormAdmin, self).get_inline_instances(request, +                                                                 obj=obj) + +    def get_readonly_fields(self, request, obj=None): +        if obj: +            return ('form',) +        return [] + + +admin_site.register(models.CustomForm, CustomFormAdmin) + +  class AdministrationScriptAdmin(admin.ModelAdmin):      list_display = ['name', 'path'] @@ -451,6 +575,7 @@ class AdministrationTaskAdmin(admin.ModelAdmin):              return ("script", ) + self.readonly_fields          return self.readonly_fields +  admin_site.register(models.AdministrationTask, AdministrationTaskAdmin) | 
