docbow/docbow_project/docbow/admin.py

146 lines
5.2 KiB
Python

import django.contrib.admin as admin
from django.utils.translation import ugettext as _
from django.contrib.auth import admin as auth_admin
from django.conf.urls.defaults import patterns
import models
import forms
import views
import signals
from docbow_project.log import models as log_models, admin as log_admin
import docbow_project.actions as actions
class DocbowAdminSite(admin.AdminSite):
pass
site = DocbowAdminSite('docbow_admin')
class DocumentAdmin(admin.ModelAdmin):
list_display = [ 'date', 'sender', 'recipients', 'filetype', 'filename_links', 'comment' ]
list_filter = [ 'sender', 'to_user', 'to_list', 'filetype' ]
fields = [ 'date', 'sender', 'recipients', 'filetype', 'filename_links', 'comment']
readonly_fields = [ 'sender', 'filetype', 'date', 'recipients', 'filename_links', 'comment' ]
filter_horizontal = [ 'to_user', 'to_list' ]
date_hierarchy = 'date'
class SendingLimitationAdmin(admin.ModelAdmin):
list_display = [ 'mailing_list', 'filetypes_list', 'lists_list' ]
filter_horizontal = [ 'filetypes', 'lists' ]
actions = [ actions.export_as_csv ]
def lists_list(self, obj):
return ', '.join(obj.lists.values_list('name', flat=True))
lists_list.short_description = _('Limitation des destinataires')
def filetypes_list(self, obj):
return ', '.join(obj.filetypes.values_list('name', flat=True))
filetypes_list.short_description = _('Limitation des types de fichier')
class MailingListAdmin(admin.ModelAdmin):
list_display = [ 'name' ]
search_fields = [ 'name', 'members__username', 'members__first_name',
'members__last_name']
ordering = ['name']
form = forms.MailingListForm
actions = [ actions.export_as_csv ]
class Media:
js = ('docbow/js/SelectBox-count.js',)
class AttachedFileAdmin(admin.ModelAdmin):
def get_model_perms(self, request):
return {}
def get_urls(self):
urls = super(AttachedFileAdmin, self).get_urls()
attached_file_urls = patterns('',
(r'^(.+)/download/$', self.download)
)
return attached_file_urls + urls
def download(self, request, object_id):
attached_file = models.AttachedFile.objects.get(pk=object_id)
return views.upload(request, attached_file)
class DocbowUserAdmin(auth_admin.UserAdmin):
fieldsets = (
(None, {'fields': ('username', 'password')}),
(_('Personal info'), {'fields': ('first_name', 'last_name', 'email')}),
(_('Permissions'), {'fields': ('is_active', 'is_staff')}),
(_('Important dates'), {'fields': ('last_login', 'date_joined')}),
(_('Groups'), {'fields': ('groups',)}),
)
readonly_fields = [ 'last_login', 'date_joined' ]
exclude = [ 'user_permissions' ]
actions = [ actions.export_as_csv ]
class DocbowGroupAdmin(auth_admin.GroupAdmin):
exclude = [ 'permissions' ]
class MailboxAdmin(admin.ModelAdmin):
list_display = [ 'owner', 'document', 'date', 'seen' ]
list_filter = [ 'owner', 'outbox' ]
def queryset(self, request):
qs = super(MailboxAdmin, self).queryset(request)
return qs
def lookup_allowed(self, *args, **kwargs):
return True
class InboxAdmin(MailboxAdmin):
list_display = [ 'date', 'owner', 'document', 'seen', 'deleted' ]
fields = [ 'date', 'owner', 'document', 'seen', 'deleted' ]
readonly_fields = [ 'date', 'owner', 'document', 'seen' ]
def queryset(self, request):
qs = super(InboxAdmin, self).queryset(request)
qs = qs.filter(outbox=False)
return qs
class OutboxAdmin(MailboxAdmin):
list_display = [ 'date', 'owner', 'document' ]
fields = list_display
readonly_fields = list_display
def queryset(self, request):
qs = super(OutboxAdmin, self).queryset(request)
qs = qs.filter(outbox=True)
return qs
class ContentAdmin(admin.ModelAdmin):
verbose_name = _('Predefined content description')
actions = [ actions.export_as_csv ]
class AutomaticForwardingAdmin(admin.ModelAdmin):
filter_horizontal = [ 'filetypes', 'originaly_to_user', 'forward_to_user',
'forward_to_list' ]
form = forms.AutomaticForwardingForm
actions = [ actions.export_as_csv ]
class FileTypeAdmin(admin.ModelAdmin):
actions = [ actions.export_as_csv ]
# Docbow Admin Site
site.register(models.DocbowUser, DocbowUserAdmin)
site.register(models.DocbowGroup, DocbowGroupAdmin)
site.register(models.FileType, FileTypeAdmin)
site.register(models.Content, ContentAdmin)
site.register(models.Document, DocumentAdmin)
site.register(models.MailingList, MailingListAdmin)
site.register(models.Delegation)
site.register(models.Inbox, InboxAdmin)
site.register(models.Outbox, OutboxAdmin)
site.register(log_models.LogLine, log_admin.LogLineAdmin)
site.register(models.AttachedFile, AttachedFileAdmin)
site.register(models.SendingLimitation, SendingLimitationAdmin)
site.register(models.AutomaticForwarding, AutomaticForwardingAdmin)
# Superadmin Admin Site
admin.site.register(models.FileType)
admin.site.register(models.Content, ContentAdmin)
admin.site.register(models.Document)
admin.site.register(models.AttachedFile)
admin.site.register(models.MailingList, MailingListAdmin)
admin.site.register(models.Delegation)
admin.site.register(models.Mailbox, MailboxAdmin)