Merged origin/master
authormelinath <stephen.r.burrows@gmail.com>
Wed, 16 Jun 2010 15:29:22 +0000 (11:29 -0400)
committermelinath <stephen.r.burrows@gmail.com>
Wed, 16 Jun 2010 15:29:22 +0000 (11:29 -0400)
1  2 
admin.py

diff --combined admin.py
+++ b/admin.py
@@@ -8,8 -8,6 +8,8 @@@ from django.utils.safestring import mar
  from django.utils.html import escape
  from django.utils.text import truncate_words
  from philo.models import *
 +from django.core.exceptions import ValidationError, ObjectDoesNotExist
 +from validators import TreeParentValidator, TreePositionValidator
  
  
  class AttributeInline(generic.GenericTabularInline):
@@@ -17,7 -15,7 +17,7 @@@
        ct_fk_field = 'entity_object_id'
        model = Attribute
        extra = 1
-       classes = ('collapse-closed',)
+       template = 'admin/philo/edit_inline/tabular_collapse.html'
        allow_add = True
  
  
@@@ -26,7 -24,7 +26,7 @@@ class RelationshipInline(generic.Generi
        ct_fk_field = 'entity_object_id'
        model = Relationship
        extra = 1
-       classes = ('collapse-closed',)
+       template = 'admin/philo/edit_inline/tabular_collapse.html'
        allow_add = True
  
  
@@@ -41,71 -39,14 +41,71 @@@ class CollectionMemberInline(admin.Tabu
        extra = 1
        classes = ('collapse-closed',)
        allow_add = True
 +      fields = ('member_content_type', 'member_object_id', 'index',)
  
  
  class CollectionAdmin(admin.ModelAdmin):
        inlines = [CollectionMemberInline]
 +      list_display = ('name', 'description', 'get_count')
  
  
 -class NodeAdmin(EntityAdmin):
 -      pass
 +class TreeForm(forms.ModelForm):
 +      def __init__(self, *args, **kwargs):
 +              super(TreeForm, self).__init__(*args, **kwargs)
 +              instance = self.instance
 +              instance_class=self.get_instance_class()
 +              
 +              if instance_class is not None:
 +                      try:
 +                              self.fields['parent'].queryset = instance_class.objects.exclude(id=instance.id)
 +                      except ObjectDoesNotExist:
 +                              pass
 +                      
 +              self.fields['parent'].validators = [TreeParentValidator(*self.get_validator_args())]
 +      
 +      def get_instance_class(self):
 +              return self.instance.__class__
 +              
 +      def get_validator_args(self):
 +              return [self.instance]
 +      
 +      def clean(self):
 +              cleaned_data = self.cleaned_data
 +              
 +              try:
 +                      parent = cleaned_data['parent']
 +                      slug = cleaned_data['slug']
 +                      obj_class = self.get_instance_class()
 +                      tpv = TreePositionValidator(parent, slug, obj_class)
 +                      tpv(self.instance)
 +              except KeyError:
 +                      pass
 +              
 +              return cleaned_data
 +
 +
 +class TemplateAdmin(admin.ModelAdmin):
 +      prepopulated_fields = {'slug': ('name',)}
 +      fieldsets = (
 +              (None, {
 +                      'fields': ('parent', 'name', 'slug')
 +              }),
 +              ('Documentation', {
 +                      'classes': ('collapse', 'collapse-closed'),
 +                      'fields': ('documentation',)
 +              }),
 +              (None, {
 +                      'fields': ('code',)
 +              }),
 +              ('Advanced', {
 +                      'classes': ('collapse','collapse-closed'),
 +                      'fields': ('mimetype',)
 +              }),
 +      )
 +      save_on_top = True
 +      save_as = True
 +      list_display = ('__unicode__', 'slug', 'get_path',)
 +      form = TreeForm
  
  
  class ModelLookupWidget(forms.TextInput):
                return mark_safe(output)
  
  
- class PageAdmin(EntityAdmin):
 +class NodeForm(TreeForm):
 +      def get_instance_class(self):
 +              return Node
 +              
 +      def get_validator_args(self):
 +              return [self.instance, 'instance']
 +
 +
 +class PageAdminForm(NodeForm):
 +      class Meta:
 +              model=Page
 +
 +
 +class RedirectAdminForm(NodeForm):
 +      class Meta:
 +              model=Redirect
 +
 +
 +class FileAdminForm(NodeForm):
 +      class Meta:
 +              model=File
 +
 +
++class NodeAdmin(EntityAdmin):
++      pass
++
++
+ class RedirectAdmin(NodeAdmin):
+       fieldsets = (
+               (None, {
+                       'fields': ('slug', 'target', 'status_code')
+               }),
+               ('URL/Tree/Hierarchy', {
+                       'classes': ('collapse', 'collapse-closed'),
+                       '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', 'collapse-closed'),
+                       '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, {
-                       'fields': ('title', 'template')
+                       'fields': ('title', 'slug', 'template')
                }),
                ('URL/Tree/Hierarchy', {
                        'classes': ('collapse', 'collapse-closed'),
-                       'fields': ('parent', 'slug')
+                       'fields': ('parent',)
                }),
        )
        list_display = ('title', 'path', 'template')
        list_filter = ('template',)
        search_fields = ['title', 'slug', 'contentlets__content']
 +      form = PageAdminForm
        
        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), {
                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.save()
  
  
- class RedirectAdmin(admin.ModelAdmin):
-       list_display=('slug', 'target', 'path', 'status_code',)
-       list_filter=('status_code',)
-       form = RedirectAdminForm
- class FileAdmin(admin.ModelAdmin):
-       form=FileAdminForm
-       list_display=('slug', 'mimetype', 'path', 'file',)
 -class TemplateAdmin(admin.ModelAdmin):
 -      prepopulated_fields = {'slug': ('name',)}
 -      fieldsets = (
 -              (None, {
 -                      'fields': ('parent', 'name', 'slug')
 -              }),
 -              ('Documentation', {
 -                      'classes': ('collapse', 'collapse-closed'),
 -                      'fields': ('documentation',)
 -              }),
 -              (None, {
 -                      'fields': ('code',)
 -              }),
 -              ('Advanced', {
 -                      'classes': ('collapse','collapse-closed'),
 -                      'fields': ('mimetype',)
 -              }),
 -      )
 -      save_on_top = True
 -      save_as = True
--
--
  admin.site.register(Collection, CollectionAdmin)
  admin.site.register(Redirect, RedirectAdmin)
  admin.site.register(File, FileAdmin)