|
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153 |
- # -*- coding: utf-8 -*-
- from __future__ import unicode_literals
- from django import forms
- from django.db import models
- from django.contrib import admin
- from django.conf import settings
- from django.forms.widgets import TextInput
- from django.utils import six
- from django.utils.text import Truncator
- from django.utils.translation import ugettext_lazy as _
-
- from .fields import CommaSeparatedEmailField
- from .models import Attachment, Log, Email, EmailTemplate, STATUS
-
-
- def get_message_preview(instance):
- return (u'{0}...'.format(instance.message[:25]) if len(instance.message) > 25
- else instance.message)
-
- get_message_preview.short_description = 'Message'
-
-
- class LogInline(admin.StackedInline):
- model = Log
- extra = 0
-
-
- class CommaSeparatedEmailWidget(TextInput):
-
- def __init__(self, *args, **kwargs):
- super(CommaSeparatedEmailWidget, self).__init__(*args, **kwargs)
- self.attrs.update({'class': 'vTextField'})
-
- def _format_value(self, value):
- # If the value is a string wrap it in a list so it does not get sliced.
- if not value:
- return ''
- if isinstance(value, six.string_types):
- value = [value, ]
- return ','.join([item for item in value])
-
-
- def requeue(modeladmin, request, queryset):
- """An admin action to requeue emails."""
- queryset.update(status=STATUS.queued)
-
-
- requeue.short_description = 'Requeue selected emails'
-
-
- class EmailAdmin(admin.ModelAdmin):
- list_display = ('id', 'to_display', 'subject', 'template',
- 'status', 'last_updated')
- search_fields = ['to', 'subject']
- date_hierarchy = 'last_updated'
- inlines = [LogInline]
- list_filter = ['status']
- formfield_overrides = {
- CommaSeparatedEmailField: {'widget': CommaSeparatedEmailWidget}
- }
- actions = [requeue]
-
- def get_queryset(self, request):
- return super(EmailAdmin, self).get_queryset(request).select_related('template')
-
- def to_display(self, instance):
- return ', '.join(instance.to)
-
- to_display.short_description = 'to'
- to_display.admin_order_field = 'to'
-
-
- class LogAdmin(admin.ModelAdmin):
- list_display = ('date', 'email', 'status', get_message_preview)
-
-
- class SubjectField(TextInput):
- def __init__(self, *args, **kwargs):
- super(SubjectField, self).__init__(*args, **kwargs)
- self.attrs.update({'style': 'width: 610px;'})
-
-
- class EmailTemplateAdminForm(forms.ModelForm):
-
- language = forms.ChoiceField(choices=settings.LANGUAGES, required=False,
- help_text=_("Render template in alternative language"),
- label=_("Language"))
-
- class Meta:
- model = EmailTemplate
- fields = ('name', 'description', 'subject',
- 'content', 'html_content', 'language', 'default_template')
-
-
- class EmailTemplateInline(admin.StackedInline):
- form = EmailTemplateAdminForm
- model = EmailTemplate
- extra = 0
- fields = ('language', 'subject', 'content', 'html_content',)
- formfield_overrides = {
- models.CharField: {'widget': SubjectField}
- }
-
- def get_max_num(self, request, obj=None, **kwargs):
- return len(settings.LANGUAGES)
-
-
- class EmailTemplateAdmin(admin.ModelAdmin):
- form = EmailTemplateAdminForm
- list_display = ('name', 'description_shortened', 'subject', 'languages_compact', 'created')
- search_fields = ('name', 'description', 'subject')
- fieldsets = [
- (None, {
- 'fields': ('name', 'description'),
- }),
- (_("Default Content"), {
- 'fields': ('subject', 'content', 'html_content'),
- }),
- ]
- inlines = (EmailTemplateInline,) if settings.USE_I18N else ()
- formfield_overrides = {
- models.CharField: {'widget': SubjectField}
- }
-
- def get_queryset(self, request):
- return self.model.objects.filter(default_template__isnull=True)
-
- def description_shortened(self, instance):
- return Truncator(instance.description.split('\n')[0]).chars(200)
- description_shortened.short_description = _("Description")
- description_shortened.admin_order_field = 'description'
-
- def languages_compact(self, instance):
- languages = [tt.language for tt in instance.translated_templates.order_by('language')]
- return ', '.join(languages)
- languages_compact.short_description = _("Languages")
-
- def save_model(self, request, obj, form, change):
- obj.save()
-
- # if the name got changed, also change the translated templates to match again
- if 'name' in form.changed_data:
- obj.translated_templates.update(name=obj.name)
-
-
- class AttachmentAdmin(admin.ModelAdmin):
- list_display = ('name', 'file', )
-
-
- admin.site.register(Email, EmailAdmin)
- admin.site.register(Log, LogAdmin)
- admin.site.register(EmailTemplate, EmailTemplateAdmin)
- admin.site.register(Attachment, AttachmentAdmin)
|