summaryrefslogtreecommitdiff
path: root/ishtar_common/admin.py
diff options
context:
space:
mode:
Diffstat (limited to 'ishtar_common/admin.py')
-rw-r--r--ishtar_common/admin.py127
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)