Merge git://github.com/melinath/philo into melinath
[philo.git] / admin.py
index 506267d..0f34028 100644 (file)
--- a/admin.py
+++ b/admin.py
@@ -7,17 +7,20 @@ from django.utils.translation import ugettext as _
 from django.utils.safestring import mark_safe
 from django.utils.html import escape
 from django.utils.text import truncate_words
 from django.utils.safestring import mark_safe
 from django.utils.html import escape
 from django.utils.text import truncate_words
-from models import *
+from philo.models import *
 from django.core.exceptions import ValidationError, ObjectDoesNotExist
 from validators import TreeParentValidator, TreePositionValidator
 
 
 from django.core.exceptions import ValidationError, ObjectDoesNotExist
 from validators import TreeParentValidator, TreePositionValidator
 
 
+COLLAPSE_CLASSES = ('collapse', 'collapse-closed', 'closed',)
+
+
 class AttributeInline(generic.GenericTabularInline):
        ct_field = 'entity_content_type'
        ct_fk_field = 'entity_object_id'
        model = Attribute
        extra = 1
 class AttributeInline(generic.GenericTabularInline):
        ct_field = 'entity_content_type'
        ct_fk_field = 'entity_object_id'
        model = Attribute
        extra = 1
-       classes = ('collapse-closed',)
+       template = 'admin/philo/edit_inline/tabular_collapse.html'
        allow_add = True
 
 
        allow_add = True
 
 
@@ -26,7 +29,7 @@ class RelationshipInline(generic.GenericTabularInline):
        ct_fk_field = 'entity_object_id'
        model = Relationship
        extra = 1
        ct_fk_field = 'entity_object_id'
        model = Relationship
        extra = 1
-       classes = ('collapse-closed',)
+       template = 'admin/philo/edit_inline/tabular_collapse.html'
        allow_add = True
 
 
        allow_add = True
 
 
@@ -39,8 +42,9 @@ class CollectionMemberInline(admin.TabularInline):
        fk_name = 'collection'
        model = CollectionMember
        extra = 1
        fk_name = 'collection'
        model = CollectionMember
        extra = 1
-       classes = ('collapse-closed',)
+       classes = COLLAPSE_CLASSES
        allow_add = True
        allow_add = True
+       fields = ('member_content_type', 'member_object_id', 'index',)
 
 
 class CollectionAdmin(admin.ModelAdmin):
 
 
 class CollectionAdmin(admin.ModelAdmin):
@@ -90,14 +94,14 @@ class TemplateAdmin(admin.ModelAdmin):
                        'fields': ('parent', 'name', 'slug')
                }),
                ('Documentation', {
                        'fields': ('parent', 'name', 'slug')
                }),
                ('Documentation', {
-                       'classes': ('collapse', 'collapse-closed'),
+                       'classes': COLLAPSE_CLASSES,
                        'fields': ('documentation',)
                }),
                (None, {
                        'fields': ('code',)
                }),
                ('Advanced', {
                        'fields': ('documentation',)
                }),
                (None, {
                        'fields': ('code',)
                }),
                ('Advanced', {
-                       'classes': ('collapse','collapse-closed'),
+                       'classes': COLLAPSE_CLASSES,
                        'fields': ('mimetype',)
                }),
        )
                        'fields': ('mimetype',)
                }),
        )
@@ -157,15 +161,50 @@ class FileAdminForm(NodeForm):
                model=File
 
 
                model=File
 
 
-class PageAdmin(EntityAdmin):
+class NodeAdmin(EntityAdmin):
+       pass
+
+
+class RedirectAdmin(NodeAdmin):
+       fieldsets = (
+               (None, {
+                       'fields': ('slug', 'target', 'status_code')
+               }),
+               ('URL/Tree/Hierarchy', {
+                       'classes': COLLAPSE_CLASSES,
+                       'fields': ('parent',)
+               }),
+       )
+       list_display=('slug', 'target', 'path', 'status_code',)
+       list_filter=('status_code',)
+       form = RedirectAdminForm
+
+
+class FileAdmin(NodeAdmin):
+       prepopulated_fields = {'slug': ('file',)}
+       fieldsets = (
+               (None, {
+                       'fields': ('file', 'slug', 'mimetype')
+               }),
+               ('URL/Tree/Hierarchy', {
+                       'classes': COLLAPSE_CLASSES,
+                       'fields': ('parent',)
+               }),
+       )
+       form=FileAdminForm
+       list_display=('slug', 'mimetype', 'path', 'file',)
+
+
+class PageAdmin(NodeAdmin):
+       add_form_template = 'admin/philo/page/add_form.html'
        prepopulated_fields = {'slug': ('title',)}
        fieldsets = (
                (None, {
        prepopulated_fields = {'slug': ('title',)}
        fieldsets = (
                (None, {
-                       'fields': ('title', 'template')
+                       'fields': ('title', 'slug', 'template')
                }),
                ('URL/Tree/Hierarchy', {
                }),
                ('URL/Tree/Hierarchy', {
-                       'classes': ('collapse', 'collapse-closed'),
-                       'fields': ('parent', 'slug')
+                       'classes': COLLAPSE_CLASSES,
+                       'fields': ('parent',)
                }),
        )
        list_display = ('title', 'path', 'template')
                }),
        )
        list_display = ('title', 'path', 'template')
@@ -176,8 +215,11 @@ class PageAdmin(EntityAdmin):
        def get_fieldsets(self, request, obj=None, **kwargs):
                fieldsets = list(self.fieldsets)
                if obj: # if no obj, creating a new page, thus no template set, thus no containers
        def get_fieldsets(self, request, obj=None, **kwargs):
                fieldsets = list(self.fieldsets)
                if obj: # if no obj, creating a new page, thus no template set, thus no containers
-                       page = obj
-                       template = page.template
+                       template = obj.template
+                       if template.documentation:
+                               fieldsets.append(('Template Documentation', {
+                                       'description': template.documentation
+                               }))
                        contentlet_containers, contentreference_containers = template.containers
                        for container_name in contentlet_containers:
                                fieldsets.append((('Container: %s' % container_name), {
                        contentlet_containers, contentreference_containers = template.containers
                        for container_name in contentlet_containers:
                                fieldsets.append((('Container: %s' % container_name), {
@@ -231,6 +273,8 @@ class PageAdmin(EntityAdmin):
                for container_name, container_content_type in contentreference_containers:
                        if ('contentreference_container_%s' % container_name) in form.cleaned_data:
                                content = form.cleaned_data[('contentreference_container_%s' % container_name)]
                for container_name, container_content_type in contentreference_containers:
                        if ('contentreference_container_%s' % container_name) in form.cleaned_data:
                                content = form.cleaned_data[('contentreference_container_%s' % container_name)]
+                               if content == None:
+                                       continue
                                contentreference, created = page.contentreferences.get_or_create(name=container_name, defaults={'content': content})
                                if not created:
                                        contentreference.content = content
                                contentreference, created = page.contentreferences.get_or_create(name=container_name, defaults={'content': content})
                                if not created:
                                        contentreference.content = content