1 # -*- encoding: utf-8 -*-
4 from django
.contrib
import admin
5 from django
.utils
.safestring
import mark_safe
6 from django
.http
import HttpResponseRedirect
8 from models
import SourceActualite
, Actualite
, Discipline
, Evenement
, Record
, ListSet
, HarvestLog
9 from savoirs
.globals import META
10 from savoirs
.lib
.backend
import Backend
12 admin
.site
.register(Actualite
)
13 admin
.site
.register(SourceActualite
)
14 admin
.site
.register(Discipline
)
15 admin
.site
.register(Evenement
)
17 # Ces deux classes permettent d'implémenter la possibilité d'avoir un champs readonly_fields
18 # dans l.administration.
19 # Ce champs est devenu natif à partir de la version 1.2
20 # http://docs.djangoproject.com/en/dev/ref/contrib/admin/#django.contrib.admin.ModelAdmin.readonly_fields
21 from django
import forms
22 class ReadOnlyWidget(forms
.Widget
):
23 def __init__(self
, original_value
, display_value
):
24 self
.original_value
= original_value
25 self
.display_value
= display_value
27 super(ReadOnlyWidget
, self
).__init__()
29 def render(self
, name
, value
, attrs
=None):
30 if self
.display_value
is not None:
31 output
= self
.display_value
33 output
= unicode(self
.original_value
)
37 output
= ", ".join([ls
.name
for ls
in self
.original_value
.get_query_set()])
41 is_url
= re
.match('http[s]?://(?:[a-zA-Z]|[0-9]|[$-_@.&+]|[!*\(\),]|(?:%[0-9a-fA-F][0-9a-fA-F]))+', output
)
43 output
= "<a target='_blank' href='%s'>%s</a>" % (output
, output
)
45 return mark_safe(output
)
47 def value_from_datadict(self
, data
, files
, name
):
48 return self
.original_value
50 class ReadOnlyAdminFields(object):
51 def get_form(self
, request
, obj
=None):
52 form
= super(ReadOnlyAdminFields
, self
).get_form(request
, obj
)
54 if hasattr(self
, 'readonly_fields'):
55 for field_name
in self
.readonly_fields
:
56 if field_name
in form
.base_fields
:
58 if hasattr(obj
, 'get_%s_display' % field_name
):
59 display_value
= getattr(obj
, 'get_%s_display' % field_name
)()
63 form
.base_fields
[field_name
].widget
= ReadOnlyWidget(getattr(obj
, field_name
, ''), display_value
)
64 form
.base_fields
[field_name
].required
= False
68 class RecordAdmin(ReadOnlyAdminFields
, admin
.ModelAdmin
):
93 list_filter
= ('server', 'validated', 'pays', 'regions')
111 #SEP 2 (aucune données récoltées)
120 actions
= ['assigner_pays',
122 'assigner_disciplines',
123 'assigner_thematiques']
125 # fonctions pour présenter l'information
126 def __init__(self
, *args
, **kwargs
):
127 """Surcharge l'initialisation pour définir les champs de recherche dynamiquement,
128 et les champs en lecture seule uniquement."""
129 self
.search_fields
= META
.keys()
130 self
.readonly_fields
= META
.keys()
131 self
.readonly_fields
.append('listsets')
132 super(RecordAdmin
, self
).__init__(*args
, **kwargs
)
136 return "<a target='_blank' href='%s'>%s</a>" % (obj
.uri
, obj
.uri
)
137 _uri
.allow_tags
= True
139 def _description(self
, obj
):
142 if obj
.description
is not None and len(obj
.description
) > max:
143 return "%s..." % obj
.description
[:max]
145 return obj
.description
148 def assigner_pays(self
, request
, queryset
):
149 selected
= request
.POST
.getlist(admin
.ACTION_CHECKBOX_NAME
)
150 return HttpResponseRedirect("/admin/assigner_%s?ids=%s" % ('pays', ",".join(selected
)))
152 def assigner_regions(self
, request
, queryset
):
153 selected
= request
.POST
.getlist(admin
.ACTION_CHECKBOX_NAME
)
154 return HttpResponseRedirect("/admin/assigner_%s?ids=%s" % ('regions', ",".join(selected
)))
156 def assigner_thematiques(self
, request
, queryset
):
157 selected
= request
.POST
.getlist(admin
.ACTION_CHECKBOX_NAME
)
158 return HttpResponseRedirect("/admin/assigner_%s?ids=%s" % ('thematiques', ",".join(selected
)))
160 def assigner_disciplines(self
, request
, queryset
):
161 selected
= request
.POST
.getlist(admin
.ACTION_CHECKBOX_NAME
)
162 return HttpResponseRedirect("/admin/assigner_%s?ids=%s" % ('disciplines', ",".join(selected
)))
164 admin
.site
.register(Record
, RecordAdmin
)
166 class ListSetAdmin(ReadOnlyAdminFields
, admin
.ModelAdmin
):
167 fields
= ['spec', 'name', 'server', 'validated' ]
168 list_display
= fields
169 readonly_fields
= ['spec', 'name', 'server',]
170 list_filter
= ('server',)
172 admin
.site
.register(ListSet
, ListSetAdmin
)
174 class HarvestLogAdmin(ReadOnlyAdminFields
, admin
.ModelAdmin
):
175 fields
= ['context', 'name', 'added', 'updated', 'processed', 'record']
176 list_display
= fields
+ ['date']
177 admin_order_fields
= ['date']
178 search_fields
= fields
179 readonly_fields
= fields
180 list_filter
= ('context',)
182 admin
.site
.register(HarvestLog
, HarvestLogAdmin
)