Première version en Python-Django. master
authortech <tech@poste220.admin.kh.auf>
Wed, 14 Nov 2012 08:16:26 +0000 (15:16 +0700)
committertech <tech@poste220.admin.kh.auf>
Wed, 14 Nov 2012 08:16:26 +0000 (15:16 +0700)
165 files changed:
apache/wsgi.py [new file with mode: 0755]
paf/__init__.py [changed mode: 0644->0755]
paf/admin.py [changed mode: 0644->0755]
paf/forms.py [changed mode: 0644->0755]
paf/migrations/0001_initial.py [deleted file]
paf/migrations/0002_auto__add_linguisticlevel__add_student.py [deleted file]
paf/migrations/0003_auto__del_field_student_user.py [deleted file]
paf/migrations/0004_auto__add_field_student_identifier.py [deleted file]
paf/migrations/0005_auto__add_field_student_user.py [deleted file]
paf/migrations/0006_auto__del_field_student_user.py [deleted file]
paf/migrations/0007_auto__add_faculty__add_university__add_currentacademic.py [deleted file]
paf/migrations/0008_auto__add_country__add_continent__add_location.py [deleted file]
paf/migrations/0009_auto__add_area__add_field_location_area__add_field_location_city__add_.py [deleted file]
paf/migrations/0010_auto__add_field_currentacademic_university__add_field_currentacademic_.py [deleted file]
paf/migrations/0011_auto__add_field_currentacademic_student.py [deleted file]
paf/migrations/0012_auto__del_location__del_country__del_continent__del_area__add_level__c.py [deleted file]
paf/migrations/0013_auto__add_field_currentacademic_entry_year__add_field_currentacademic_.py [deleted file]
paf/migrations/0014_auto__add_diplomaobtained.py [deleted file]
paf/migrations/0015_auto__add_country__add_employment__add_city__add_entreprise__add_field.py [deleted file]
paf/migrations/__init__.py [deleted file]
paf/models.py [changed mode: 0644->0755]
paf/templates/base_enseignant.html [deleted file]
paf/templates/base_etudiant.html [deleted file]
paf/templates/edit_info copy.html [deleted file]
paf/templates/edit_info.html [changed mode: 0644->0755]
paf/templates/etablissement_detail.html [deleted file]
paf/templates/etablissement_list.html [deleted file]
paf/templates/personne_detail.html [deleted file]
paf/templates/personne_list.html [deleted file]
paf/templates/register.html [changed mode: 0644->0755]
paf/templates/register_success.html [changed mode: 0644->0755]
paf/templates/student_info.html [changed mode: 0644->0755]
paf/templates/student_list.html [changed mode: 0644->0755]
paf/tests.py [changed mode: 0644->0755]
paf/urls.py [changed mode: 0644->0755]
paf/util.py [changed mode: 0644->0755]
paf/views 2.py [deleted file]
paf/views.py [changed mode: 0644->0755]
paf0/__init__.py [changed mode: 0644->0755]
paf0/media/css/base.css [deleted file]
paf0/media/css/changelists.css [deleted file]
paf0/media/css/edit_info.css [deleted file]
paf0/media/css/forms.css [deleted file]
paf0/media/css/mystyle.css [new file with mode: 0755]
paf0/media/css/style.css [deleted file]
paf0/media/css/style_student_list.css [deleted file]
paf0/media/css/widgets.css [deleted file]
paf0/media/images/459.gif [changed mode: 0644->0755]
paf0/media/images/boxy-ne.png [changed mode: 0644->0755]
paf0/media/images/boxy-nw.png [changed mode: 0644->0755]
paf0/media/images/boxy-se.png [changed mode: 0644->0755]
paf0/media/images/boxy-sw.png [changed mode: 0644->0755]
paf0/media/images/chart_bar_edit.png [changed mode: 0644->0755]
paf0/media/images/comment-actif.png [changed mode: 0644->0755]
paf0/media/images/comment-inactif.png [changed mode: 0644->0755]
paf0/media/images/document.png [changed mode: 0644->0755]
paf0/media/images/document.svg [changed mode: 0644->0755]
paf0/media/images/favicon.ico [changed mode: 0644->0755]
paf0/media/images/icones/indicateur.png [changed mode: 0644->0755]
paf0/media/images/icones/projet.png [changed mode: 0644->0755]
paf0/media/images/lightbulb.png [changed mode: 0644->0755]
paf0/media/images/loading.gif [changed mode: 0644->0755]
paf0/media/images/logo.gif [changed mode: 0644->0755]
paf0/media/images/menubck.png [changed mode: 0644->0755]
paf0/media/images/mnubck.png [changed mode: 0644->0755]
paf0/media/images/page_white_edit.png [changed mode: 0644->0755]
paf0/media/images/page_white_magnify.png [changed mode: 0644->0755]
paf0/media/images/page_white_medal.png [changed mode: 0644->0755]
paf0/media/images/pdf.png [changed mode: 0644->0755]
paf0/media/images/photo.png [changed mode: 0644->0755]
paf0/media/images/srcbck.png [changed mode: 0644->0755]
paf0/media/images/user.png [changed mode: 0644->0755]
paf0/media/images/zoom.png [changed mode: 0644->0755]
paf0/media/js/jquery-1.3.2.min.js [changed mode: 0644->0755]
paf0/settings.py [changed mode: 0644->0755]
paf0/templates/admin/base_site.html [deleted file]
paf0/templates/admin/change_list.html [deleted file]
paf0/templates/base.html [changed mode: 0644->0755]
paf0/templates/connexion.html [changed mode: 0644->0755]
paf0/templates/deconnexion.html [changed mode: 0644->0755]
paf0/templates/home.html [changed mode: 0644->0755]
paf0/templates/registration/password_change_done.html [changed mode: 0644->0755]
paf0/templates/registration/password_change_done_admin.html [changed mode: 0644->0755]
paf0/templates/registration/password_change_done_student.html [changed mode: 0644->0755]
paf0/templates/registration/password_change_form.html [changed mode: 0644->0755]
paf0/templates/registration/password_change_form_admin.html [changed mode: 0644->0755]
paf0/templates/registration/password_change_form_student.html [changed mode: 0644->0755]
paf0/urls.py [changed mode: 0644->0755]
paf0/views.py [changed mode: 0644->0755]
paf0/wsgi.py [changed mode: 0644->0755]
paf0_db [new file with mode: 0755]
static/admin/css/base.css [new file with mode: 0755]
static/admin/css/changelists.css [new file with mode: 0755]
static/admin/css/dashboard.css [new file with mode: 0755]
static/admin/css/forms.css [new file with mode: 0755]
static/admin/css/ie.css [new file with mode: 0755]
static/admin/css/login.css [new file with mode: 0755]
static/admin/css/mystyle.css [new file with mode: 0755]
static/admin/css/rtl.css [new file with mode: 0755]
static/admin/css/widgets.css [new file with mode: 0755]
static/admin/img/changelist-bg.gif [new file with mode: 0755]
static/admin/img/changelist-bg_rtl.gif [new file with mode: 0755]
static/admin/img/chooser-bg.gif [new file with mode: 0755]
static/admin/img/chooser_stacked-bg.gif [new file with mode: 0755]
static/admin/img/default-bg-reverse.gif [new file with mode: 0755]
static/admin/img/default-bg.gif [new file with mode: 0755]
static/admin/img/deleted-overlay.gif [new file with mode: 0755]
static/admin/img/gis/move_vertex_off.png [new file with mode: 0755]
static/admin/img/gis/move_vertex_on.png [new file with mode: 0755]
static/admin/img/icon-no.gif [new file with mode: 0755]
static/admin/img/icon-unknown.gif [new file with mode: 0755]
static/admin/img/icon-yes.gif [new file with mode: 0755]
static/admin/img/icon_addlink.gif [new file with mode: 0755]
static/admin/img/icon_alert.gif [new file with mode: 0755]
static/admin/img/icon_calendar.gif [new file with mode: 0755]
static/admin/img/icon_changelink.gif [new file with mode: 0755]
static/admin/img/icon_clock.gif [new file with mode: 0755]
static/admin/img/icon_deletelink.gif [new file with mode: 0755]
static/admin/img/icon_error.gif [new file with mode: 0755]
static/admin/img/icon_searchbox.png [new file with mode: 0755]
static/admin/img/icon_success.gif [new file with mode: 0755]
static/admin/img/inline-delete-8bit.png [new file with mode: 0755]
static/admin/img/inline-delete.png [new file with mode: 0755]
static/admin/img/inline-restore-8bit.png [new file with mode: 0755]
static/admin/img/inline-restore.png [new file with mode: 0755]
static/admin/img/inline-splitter-bg.gif [new file with mode: 0755]
static/admin/img/logo.gif [new file with mode: 0755]
static/admin/img/nav-bg-grabber.gif [new file with mode: 0755]
static/admin/img/nav-bg-reverse.gif [new file with mode: 0755]
static/admin/img/nav-bg-selected.gif [new file with mode: 0755]
static/admin/img/nav-bg.gif [new file with mode: 0755]
static/admin/img/selector-icons.gif [new file with mode: 0755]
static/admin/img/selector-search.gif [new file with mode: 0755]
static/admin/img/sorting-icons.gif [new file with mode: 0755]
static/admin/img/tool-left.gif [new file with mode: 0755]
static/admin/img/tool-left_over.gif [new file with mode: 0755]
static/admin/img/tool-right.gif [new file with mode: 0755]
static/admin/img/tool-right_over.gif [new file with mode: 0755]
static/admin/img/tooltag-add.gif [new file with mode: 0755]
static/admin/img/tooltag-add_over.gif [new file with mode: 0755]
static/admin/img/tooltag-arrowright.gif [new file with mode: 0755]
static/admin/img/tooltag-arrowright_over.gif [new file with mode: 0755]
static/admin/js/LICENSE-JQUERY.txt [new file with mode: 0755]
static/admin/js/SelectBox.js [new file with mode: 0755]
static/admin/js/SelectFilter2.js [new file with mode: 0755]
static/admin/js/actions.js [new file with mode: 0755]
static/admin/js/actions.min.js [new file with mode: 0755]
static/admin/js/admin/DateTimeShortcuts.js [new file with mode: 0755]
static/admin/js/admin/RelatedObjectLookups.js [new file with mode: 0755]
static/admin/js/admin/ordering.js [new file with mode: 0755]
static/admin/js/calendar.js [new file with mode: 0755]
static/admin/js/collapse.js [new file with mode: 0755]
static/admin/js/collapse.min.js [new file with mode: 0755]
static/admin/js/compress.py [new file with mode: 0755]
static/admin/js/core.js [new file with mode: 0755]
static/admin/js/getElementsBySelector.js [new file with mode: 0755]
static/admin/js/inlines.js [new file with mode: 0755]
static/admin/js/inlines.min.js [new file with mode: 0755]
static/admin/js/jquery.init.js [new file with mode: 0755]
static/admin/js/jquery.js [new file with mode: 0755]
static/admin/js/jquery.min.js [new file with mode: 0755]
static/admin/js/prepopulate.js [new file with mode: 0755]
static/admin/js/prepopulate.min.js [new file with mode: 0755]
static/admin/js/timeparse.js [new file with mode: 0755]
static/admin/js/urlify.js [new file with mode: 0755]

diff --git a/apache/wsgi.py b/apache/wsgi.py
new file mode 100755 (executable)
index 0000000..98a9212
--- /dev/null
@@ -0,0 +1,11 @@
+import os
+import sys
+
+path = "/var/www/cgi-bin/paf-v1"
+if path not in sys.path:
+    sys.path.insert(0, path)
+    
+os.environ.setdefault("DJANGO_SETTINGS_MODULE", "paf0.settings")
+
+from django.core.wsgi import get_wsgi_application
+application = get_wsgi_application()
old mode 100644 (file)
new mode 100755 (executable)
old mode 100644 (file)
new mode 100755 (executable)
index 5d4cab3..347db0f
@@ -50,19 +50,19 @@ class EmploymentInline(admin.StackedInline):
             return ('entreprise', 'activity_sector', 'country', 'website', 'position', 'detail_position', 'observation')
         return ()
 
-class StudentForm(forms.ModelForm):
-    class Meta:
-        model = Student
-        widgets = {
-            'identifier': forms.TextInput(attrs={'readonly':'readonly'}),
-        }
+#class StudentForm(forms.ModelForm):
+#    class Meta:
+#        model = Student
+#        widgets = {
+#            'identifier': forms.TextInput(attrs={'readonly':'readonly'}),
+#        }
 
 
 class StudentAdmin(admin.ModelAdmin):
-    form = StudentForm
+#    form = StudentForm
     list_display = ('firstname', 'lastname', 'tel', 'email')
     search_fields = ('firstname', 'lastname')
-    list_filter = ('sex', 'linguisticlevel__delf_dalf', 'currentacademic__university__name',)
+    list_filter = ('sex', 'linguisticlevel__delf_dalf', 'currentacademic__university',)
     date_hierarchy = 'dob'
     ordering = ('-lastname',)
     inlines = [CurrentAcademicInline, LinguisticLevelInline, DiplomaObtainedInline, EmploymentInline]
@@ -73,7 +73,7 @@ class StudentAdmin(admin.ModelAdmin):
     def get_readonly_fields(self, request, obj=None):
         if request.user.username == 'enseignant':
             return ('identifier', 'firstname', 'lastname', 'nationality', 'sex', 'dob', 'email', 'tel', 'parent_tel', 'parent_address')
-        return ()
+        return ('identifier',)
     
     def queryset(self, request):
         qs = super(StudentAdmin, self).queryset(request)
@@ -86,11 +86,6 @@ class StudentAdmin(admin.ModelAdmin):
         if request.user.first_name == 'student':
             self.change_form_template = 'edit_info.html'
         elif request.user.username == 'enseignant':
-            #self.readonly_fields = list(self.fields)
-            #for inline in self.get_inline_instances(request):
-            #    inline.readonly_fields = list(inline.fields)
-            #self.readonly_fields = ('identifier', 'firstname', 'lastname', 'nationality', 'sex', 'dob', 'email', 'tel', 'parent_tel', 'parent_address')
-
             self.change_form_template = 'student_info.html'
         else:
             self.change_form_template = None
@@ -143,4 +138,4 @@ admin.site.register(University, UniversityAdmin)
 admin.site.register(Faculty, FacultyAdmin)
 admin.site.register(Level, LevelAdmin)
 admin.site.register(DiplomaObtained, DiplomaObtainedAdmin)
-admin.site.register(CurrentAcademic, CurrentAcademicAdmin)
\ No newline at end of file
+admin.site.register(CurrentAcademic, CurrentAcademicAdmin)
old mode 100644 (file)
new mode 100755 (executable)
index f752f87..2ac86ea
@@ -1,36 +1,47 @@
+# -*- coding: utf8 -*-
 from django import forms
 from captcha.fields import CaptchaField
 from paf.models import Student
 from django.contrib.auth.models import User, Group
 from string import zfill
+import re
 
 class RegistrationForm(forms.Form):
     NATIONALITY_CHOICES = (
         ('KH', 'Cambodgienne'),
         ('LA', 'Laotienne'),
-        ('AN', 'Vietnamienne'),
+        ('VN', 'Vietnamienne'),
         ('ZZ', 'Autre'),
     )
     GENDER_CHOICES = (
         ('M', 'Male'),
         ('F', 'Female'),
     )
-    lastname = forms.CharField()
-    firstname= forms.CharField()
-    nationality = forms.ChoiceField(choices=NATIONALITY_CHOICES)
-    sex = forms.ChoiceField(choices=GENDER_CHOICES)
-    dob = forms.DateField(label='date of birth', input_formats=('%d/%m/%Y',), help_text='input date of the form dd/mm/yyyy')
-    tel = forms.CharField()
-    parent_tel = forms.CharField(required=False)
-    parent_address = forms.CharField(max_length=120)
-    email = forms.EmailField(required=False)
-    captcha = CaptchaField()
-    password = forms.CharField(widget=forms.PasswordInput)
-    confirm_password = forms.CharField(widget=forms.PasswordInput)
+    lastname = forms.CharField(label=u"Nom")
+    firstname= forms.CharField(label=u"Prénom")
+    nationality = forms.ChoiceField(choices=NATIONALITY_CHOICES, label=u"Nationalité")
+    sex = forms.ChoiceField(choices=GENDER_CHOICES, label=u"Sexe")
+    dob = forms.DateField(label='Date de naissance', input_formats=('%d/%m/%Y',), help_text='Entrer la date sous forme jj/mm/aaaa')
+    tel = forms.CharField(label=u"Tél.")
+    parent_tel = forms.CharField(required=False,label=u"Tél. de parents")
+    parent_address = forms.CharField(max_length=120, label=u"Adresse de parents")
+    email = forms.EmailField(required=False, label=u"Email")
+    captcha = CaptchaField(help_text=u"Entrer les caractères dans l'image", label=u"Entrer le code affiché")
+    password = forms.CharField(widget=forms.PasswordInput, label=u"Mot de passe", min_length=6, help_text=u"Au moins 6 caractères contenant <br />([a..z], [A..Z], [0..9], [!, @, #, $, %, ^, &, *])")
+    confirm_password = forms.CharField(widget=forms.PasswordInput, label=u"Confirmation du mot de passe", min_length=6)
     
+    def clean_password(self):
+        pw = self.cleaned_data['password']
+        if not (re.match(r'.*[a-z].*', pw) and re.match(r'.*[A-Z].*', pw) and re.match(r'.*[0-9].*', pw) and re.match(r'.*[!@#$%^&*].*', pw) ):
+            raise forms.ValidationError(u"Mot de passe invalide!")
+
     def clean_confirm_password(self):
+#        if 'password' not in self.cleaned_data: return
+      try:
         if self.cleaned_data['password'] != self.cleaned_data['confirm_password']:
-            raise forms.ValidationError("Your confirm password is different from password!")
+            raise forms.ValidationError(u"Le mot de passe confirmé est différent du mot de passe!")
+      except:
+         pass
     
     def save(self):
         student = self.create_student()
@@ -76,4 +87,4 @@ class RegistrationForm(forms.Form):
         except:
             group = Group(name='student')
             group.save()
-        return group
\ No newline at end of file
+        return group
diff --git a/paf/migrations/0001_initial.py b/paf/migrations/0001_initial.py
deleted file mode 100644 (file)
index 616aefd..0000000
+++ /dev/null
@@ -1,20 +0,0 @@
-# -*- coding: utf-8 -*-
-import datetime
-from south.db import db
-from south.v2 import SchemaMigration
-from django.db import models
-
-
-class Migration(SchemaMigration):
-
-    def forwards(self, orm):
-        pass
-
-    def backwards(self, orm):
-        pass
-
-    models = {
-        
-    }
-
-    complete_apps = ['paf']
\ No newline at end of file
diff --git a/paf/migrations/0002_auto__add_linguisticlevel__add_student.py b/paf/migrations/0002_auto__add_linguisticlevel__add_student.py
deleted file mode 100644 (file)
index b98064e..0000000
+++ /dev/null
@@ -1,109 +0,0 @@
-# -*- coding: utf-8 -*-
-import datetime
-from south.db import db
-from south.v2 import SchemaMigration
-from django.db import models
-
-
-class Migration(SchemaMigration):
-
-    def forwards(self, orm):
-        # Adding model 'LinguisticLevel'
-        db.create_table('paf_linguisticlevel', (
-            ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
-            ('delf_dalf', self.gf('django.db.models.fields.CharField')(max_length=2, blank=True)),
-            ('year_delf_dalf', self.gf('django.db.models.fields.PositiveIntegerField')(null=True, blank=True)),
-            ('other', self.gf('django.db.models.fields.CharField')(max_length=1, blank=True)),
-            ('year_other', self.gf('django.db.models.fields.PositiveIntegerField')(null=True, blank=True)),
-            ('student', self.gf('django.db.models.fields.related.OneToOneField')(to=orm['paf.Student'], unique=True)),
-        ))
-        db.send_create_signal('paf', ['LinguisticLevel'])
-
-        # Adding model 'Student'
-        db.create_table('paf_student', (
-            ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
-            ('lastname', self.gf('django.db.models.fields.CharField')(max_length=50)),
-            ('firstname', self.gf('django.db.models.fields.CharField')(max_length=50)),
-            ('nationality', self.gf('django.db.models.fields.CharField')(max_length=2)),
-            ('sex', self.gf('django.db.models.fields.CharField')(max_length=1)),
-            ('dob', self.gf('django.db.models.fields.DateField')()),
-            ('email', self.gf('django.db.models.fields.EmailField')(max_length=75, blank=True)),
-            ('tel', self.gf('django.db.models.fields.CharField')(max_length=20)),
-            ('parent_tel', self.gf('django.db.models.fields.CharField')(max_length=20, blank=True)),
-            ('parent_address', self.gf('django.db.models.fields.CharField')(max_length=120)),
-            ('user', self.gf('django.db.models.fields.related.OneToOneField')(to=orm['auth.User'], unique=True)),
-        ))
-        db.send_create_signal('paf', ['Student'])
-
-
-    def backwards(self, orm):
-        # Deleting model 'LinguisticLevel'
-        db.delete_table('paf_linguisticlevel')
-
-        # Deleting model 'Student'
-        db.delete_table('paf_student')
-
-
-    models = {
-        'auth.group': {
-            'Meta': {'object_name': 'Group'},
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}),
-            'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'})
-        },
-        'auth.permission': {
-            'Meta': {'ordering': "('content_type__app_label', 'content_type__model', 'codename')", 'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'},
-            'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
-            'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})
-        },
-        'auth.user': {
-            'Meta': {'object_name': 'User'},
-            'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
-            'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}),
-            'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
-            'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
-            'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
-            'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
-            'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
-            'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
-            'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
-            'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}),
-            'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'})
-        },
-        'contenttypes.contenttype': {
-            'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"},
-            'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
-            'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})
-        },
-        'paf.linguisticlevel': {
-            'Meta': {'object_name': 'LinguisticLevel'},
-            'delf_dalf': ('django.db.models.fields.CharField', [], {'max_length': '2', 'blank': 'True'}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'other': ('django.db.models.fields.CharField', [], {'max_length': '1', 'blank': 'True'}),
-            'student': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['paf.Student']", 'unique': 'True'}),
-            'year_delf_dalf': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True', 'blank': 'True'}),
-            'year_other': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True', 'blank': 'True'})
-        },
-        'paf.student': {
-            'Meta': {'object_name': 'Student'},
-            'dob': ('django.db.models.fields.DateField', [], {}),
-            'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}),
-            'firstname': ('django.db.models.fields.CharField', [], {'max_length': '50'}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'lastname': ('django.db.models.fields.CharField', [], {'max_length': '50'}),
-            'nationality': ('django.db.models.fields.CharField', [], {'max_length': '2'}),
-            'parent_address': ('django.db.models.fields.CharField', [], {'max_length': '120'}),
-            'parent_tel': ('django.db.models.fields.CharField', [], {'max_length': '20', 'blank': 'True'}),
-            'sex': ('django.db.models.fields.CharField', [], {'max_length': '1'}),
-            'tel': ('django.db.models.fields.CharField', [], {'max_length': '20'}),
-            'user': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['auth.User']", 'unique': 'True'})
-        }
-    }
-
-    complete_apps = ['paf']
\ No newline at end of file
diff --git a/paf/migrations/0003_auto__del_field_student_user.py b/paf/migrations/0003_auto__del_field_student_user.py
deleted file mode 100644 (file)
index 52ac419..0000000
+++ /dev/null
@@ -1,47 +0,0 @@
-# -*- coding: utf-8 -*-
-import datetime
-from south.db import db
-from south.v2 import SchemaMigration
-from django.db import models
-
-
-class Migration(SchemaMigration):
-
-    def forwards(self, orm):
-        # Deleting field 'Student.user'
-        db.delete_column('paf_student', 'user_id')
-
-
-    def backwards(self, orm):
-        # Adding field 'Student.user'
-        db.add_column('paf_student', 'user',
-                      self.gf('django.db.models.fields.related.OneToOneField')(default=1, to=orm['auth.User'], unique=True),
-                      keep_default=False)
-
-
-    models = {
-        'paf.linguisticlevel': {
-            'Meta': {'object_name': 'LinguisticLevel'},
-            'delf_dalf': ('django.db.models.fields.CharField', [], {'max_length': '2', 'blank': 'True'}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'other': ('django.db.models.fields.CharField', [], {'max_length': '1', 'blank': 'True'}),
-            'student': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['paf.Student']", 'unique': 'True'}),
-            'year_delf_dalf': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True', 'blank': 'True'}),
-            'year_other': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True', 'blank': 'True'})
-        },
-        'paf.student': {
-            'Meta': {'object_name': 'Student'},
-            'dob': ('django.db.models.fields.DateField', [], {}),
-            'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}),
-            'firstname': ('django.db.models.fields.CharField', [], {'max_length': '50'}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'lastname': ('django.db.models.fields.CharField', [], {'max_length': '50'}),
-            'nationality': ('django.db.models.fields.CharField', [], {'max_length': '2'}),
-            'parent_address': ('django.db.models.fields.CharField', [], {'max_length': '120'}),
-            'parent_tel': ('django.db.models.fields.CharField', [], {'max_length': '20', 'blank': 'True'}),
-            'sex': ('django.db.models.fields.CharField', [], {'max_length': '1'}),
-            'tel': ('django.db.models.fields.CharField', [], {'max_length': '20'})
-        }
-    }
-
-    complete_apps = ['paf']
\ No newline at end of file
diff --git a/paf/migrations/0004_auto__add_field_student_identifier.py b/paf/migrations/0004_auto__add_field_student_identifier.py
deleted file mode 100644 (file)
index 0b7d779..0000000
+++ /dev/null
@@ -1,48 +0,0 @@
-# -*- coding: utf-8 -*-
-import datetime
-from south.db import db
-from south.v2 import SchemaMigration
-from django.db import models
-
-
-class Migration(SchemaMigration):
-
-    def forwards(self, orm):
-        # Adding field 'Student.identifier'
-        db.add_column('paf_student', 'identifier',
-                      self.gf('django.db.models.fields.CharField')(default='', max_length=9, blank=True),
-                      keep_default=False)
-
-
-    def backwards(self, orm):
-        # Deleting field 'Student.identifier'
-        db.delete_column('paf_student', 'identifier')
-
-
-    models = {
-        'paf.linguisticlevel': {
-            'Meta': {'object_name': 'LinguisticLevel'},
-            'delf_dalf': ('django.db.models.fields.CharField', [], {'max_length': '2', 'blank': 'True'}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'other': ('django.db.models.fields.CharField', [], {'max_length': '1', 'blank': 'True'}),
-            'student': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['paf.Student']", 'unique': 'True'}),
-            'year_delf_dalf': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True', 'blank': 'True'}),
-            'year_other': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True', 'blank': 'True'})
-        },
-        'paf.student': {
-            'Meta': {'object_name': 'Student'},
-            'dob': ('django.db.models.fields.DateField', [], {}),
-            'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}),
-            'firstname': ('django.db.models.fields.CharField', [], {'max_length': '50'}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'identifier': ('django.db.models.fields.CharField', [], {'max_length': '9', 'blank': 'True'}),
-            'lastname': ('django.db.models.fields.CharField', [], {'max_length': '50'}),
-            'nationality': ('django.db.models.fields.CharField', [], {'max_length': '2'}),
-            'parent_address': ('django.db.models.fields.CharField', [], {'max_length': '120'}),
-            'parent_tel': ('django.db.models.fields.CharField', [], {'max_length': '20', 'blank': 'True'}),
-            'sex': ('django.db.models.fields.CharField', [], {'max_length': '1'}),
-            'tel': ('django.db.models.fields.CharField', [], {'max_length': '20'})
-        }
-    }
-
-    complete_apps = ['paf']
\ No newline at end of file
diff --git a/paf/migrations/0005_auto__add_field_student_user.py b/paf/migrations/0005_auto__add_field_student_user.py
deleted file mode 100644 (file)
index 930a947..0000000
+++ /dev/null
@@ -1,85 +0,0 @@
-# -*- coding: utf-8 -*-
-import datetime
-from south.db import db
-from south.v2 import SchemaMigration
-from django.db import models
-
-
-class Migration(SchemaMigration):
-
-    def forwards(self, orm):
-        # Adding field 'Student.user'
-        db.add_column('paf_student', 'user',
-                      self.gf('django.db.models.fields.related.OneToOneField')(default=1, to=orm['auth.User'], unique=True),
-                      keep_default=False)
-
-
-    def backwards(self, orm):
-        # Deleting field 'Student.user'
-        db.delete_column('paf_student', 'user_id')
-
-
-    models = {
-        'auth.group': {
-            'Meta': {'object_name': 'Group'},
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}),
-            'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'})
-        },
-        'auth.permission': {
-            'Meta': {'ordering': "('content_type__app_label', 'content_type__model', 'codename')", 'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'},
-            'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
-            'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})
-        },
-        'auth.user': {
-            'Meta': {'object_name': 'User'},
-            'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
-            'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}),
-            'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
-            'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
-            'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
-            'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
-            'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
-            'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
-            'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
-            'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}),
-            'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'})
-        },
-        'contenttypes.contenttype': {
-            'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"},
-            'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
-            'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})
-        },
-        'paf.linguisticlevel': {
-            'Meta': {'object_name': 'LinguisticLevel'},
-            'delf_dalf': ('django.db.models.fields.CharField', [], {'max_length': '2', 'blank': 'True'}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'other': ('django.db.models.fields.CharField', [], {'max_length': '1', 'blank': 'True'}),
-            'student': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['paf.Student']", 'unique': 'True'}),
-            'year_delf_dalf': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True', 'blank': 'True'}),
-            'year_other': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True', 'blank': 'True'})
-        },
-        'paf.student': {
-            'Meta': {'object_name': 'Student'},
-            'dob': ('django.db.models.fields.DateField', [], {}),
-            'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}),
-            'firstname': ('django.db.models.fields.CharField', [], {'max_length': '50'}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'identifier': ('django.db.models.fields.CharField', [], {'max_length': '9', 'blank': 'True'}),
-            'lastname': ('django.db.models.fields.CharField', [], {'max_length': '50'}),
-            'nationality': ('django.db.models.fields.CharField', [], {'max_length': '2'}),
-            'parent_address': ('django.db.models.fields.CharField', [], {'max_length': '120'}),
-            'parent_tel': ('django.db.models.fields.CharField', [], {'max_length': '20', 'blank': 'True'}),
-            'sex': ('django.db.models.fields.CharField', [], {'max_length': '1'}),
-            'tel': ('django.db.models.fields.CharField', [], {'max_length': '20'}),
-            'user': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['auth.User']", 'unique': 'True'})
-        }
-    }
-
-    complete_apps = ['paf']
\ No newline at end of file
diff --git a/paf/migrations/0006_auto__del_field_student_user.py b/paf/migrations/0006_auto__del_field_student_user.py
deleted file mode 100644 (file)
index 5cb350c..0000000
+++ /dev/null
@@ -1,48 +0,0 @@
-# -*- coding: utf-8 -*-
-import datetime
-from south.db import db
-from south.v2 import SchemaMigration
-from django.db import models
-
-
-class Migration(SchemaMigration):
-
-    def forwards(self, orm):
-        # Deleting field 'Student.user'
-        db.delete_column('paf_student', 'user_id')
-
-
-    def backwards(self, orm):
-        # Adding field 'Student.user'
-        db.add_column('paf_student', 'user',
-                      self.gf('django.db.models.fields.related.OneToOneField')(default=1, to=orm['auth.User'], unique=True),
-                      keep_default=False)
-
-
-    models = {
-        'paf.linguisticlevel': {
-            'Meta': {'object_name': 'LinguisticLevel'},
-            'delf_dalf': ('django.db.models.fields.CharField', [], {'max_length': '2', 'blank': 'True'}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'other': ('django.db.models.fields.CharField', [], {'max_length': '1', 'blank': 'True'}),
-            'student': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['paf.Student']", 'unique': 'True'}),
-            'year_delf_dalf': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True', 'blank': 'True'}),
-            'year_other': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True', 'blank': 'True'})
-        },
-        'paf.student': {
-            'Meta': {'object_name': 'Student'},
-            'dob': ('django.db.models.fields.DateField', [], {}),
-            'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}),
-            'firstname': ('django.db.models.fields.CharField', [], {'max_length': '50'}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'identifier': ('django.db.models.fields.CharField', [], {'max_length': '9', 'blank': 'True'}),
-            'lastname': ('django.db.models.fields.CharField', [], {'max_length': '50'}),
-            'nationality': ('django.db.models.fields.CharField', [], {'max_length': '2'}),
-            'parent_address': ('django.db.models.fields.CharField', [], {'max_length': '120'}),
-            'parent_tel': ('django.db.models.fields.CharField', [], {'max_length': '20', 'blank': 'True'}),
-            'sex': ('django.db.models.fields.CharField', [], {'max_length': '1'}),
-            'tel': ('django.db.models.fields.CharField', [], {'max_length': '20'})
-        }
-    }
-
-    complete_apps = ['paf']
\ No newline at end of file
diff --git a/paf/migrations/0007_auto__add_faculty__add_university__add_currentacademic.py b/paf/migrations/0007_auto__add_faculty__add_university__add_currentacademic.py
deleted file mode 100644 (file)
index a95e251..0000000
+++ /dev/null
@@ -1,87 +0,0 @@
-# -*- coding: utf-8 -*-
-import datetime
-from south.db import db
-from south.v2 import SchemaMigration
-from django.db import models
-
-
-class Migration(SchemaMigration):
-
-    def forwards(self, orm):
-        # Adding model 'Faculty'
-        db.create_table('paf_faculty', (
-            ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
-            ('name', self.gf('django.db.models.fields.CharField')(max_length=100)),
-            ('university', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['paf.University'])),
-        ))
-        db.send_create_signal('paf', ['Faculty'])
-
-        # Adding model 'University'
-        db.create_table('paf_university', (
-            ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
-            ('name', self.gf('django.db.models.fields.CharField')(max_length=100)),
-        ))
-        db.send_create_signal('paf', ['University'])
-
-        # Adding model 'CurrentAcademic'
-        db.create_table('paf_currentacademic', (
-            ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
-            ('faculty', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['paf.Faculty'])),
-        ))
-        db.send_create_signal('paf', ['CurrentAcademic'])
-
-
-    def backwards(self, orm):
-        # Deleting model 'Faculty'
-        db.delete_table('paf_faculty')
-
-        # Deleting model 'University'
-        db.delete_table('paf_university')
-
-        # Deleting model 'CurrentAcademic'
-        db.delete_table('paf_currentacademic')
-
-
-    models = {
-        'paf.currentacademic': {
-            'Meta': {'object_name': 'CurrentAcademic'},
-            'faculty': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['paf.Faculty']"}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'})
-        },
-        'paf.faculty': {
-            'Meta': {'object_name': 'Faculty'},
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
-            'university': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['paf.University']"})
-        },
-        'paf.linguisticlevel': {
-            'Meta': {'object_name': 'LinguisticLevel'},
-            'delf_dalf': ('django.db.models.fields.CharField', [], {'max_length': '2', 'blank': 'True'}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'other': ('django.db.models.fields.CharField', [], {'max_length': '1', 'blank': 'True'}),
-            'student': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['paf.Student']", 'unique': 'True'}),
-            'year_delf_dalf': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True', 'blank': 'True'}),
-            'year_other': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True', 'blank': 'True'})
-        },
-        'paf.student': {
-            'Meta': {'object_name': 'Student'},
-            'dob': ('django.db.models.fields.DateField', [], {}),
-            'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}),
-            'firstname': ('django.db.models.fields.CharField', [], {'max_length': '50'}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'identifier': ('django.db.models.fields.CharField', [], {'max_length': '9', 'blank': 'True'}),
-            'lastname': ('django.db.models.fields.CharField', [], {'max_length': '50'}),
-            'nationality': ('django.db.models.fields.CharField', [], {'max_length': '2'}),
-            'parent_address': ('django.db.models.fields.CharField', [], {'max_length': '120'}),
-            'parent_tel': ('django.db.models.fields.CharField', [], {'max_length': '20', 'blank': 'True'}),
-            'sex': ('django.db.models.fields.CharField', [], {'max_length': '1'}),
-            'tel': ('django.db.models.fields.CharField', [], {'max_length': '20'})
-        },
-        'paf.university': {
-            'Meta': {'object_name': 'University'},
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})
-        }
-    }
-
-    complete_apps = ['paf']
\ No newline at end of file
diff --git a/paf/migrations/0008_auto__add_country__add_continent__add_location.py b/paf/migrations/0008_auto__add_country__add_continent__add_location.py
deleted file mode 100644 (file)
index c70396c..0000000
+++ /dev/null
@@ -1,105 +0,0 @@
-# -*- coding: utf-8 -*-
-import datetime
-from south.db import db
-from south.v2 import SchemaMigration
-from django.db import models
-
-
-class Migration(SchemaMigration):
-
-    def forwards(self, orm):
-        # Adding model 'Country'
-        db.create_table('paf_country', (
-            ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
-            ('name', self.gf('django.db.models.fields.CharField')(max_length=100)),
-            ('continent', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['paf.Continent'])),
-        ))
-        db.send_create_signal('paf', ['Country'])
-
-        # Adding model 'Continent'
-        db.create_table('paf_continent', (
-            ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
-            ('name', self.gf('django.db.models.fields.CharField')(max_length=100)),
-        ))
-        db.send_create_signal('paf', ['Continent'])
-
-        # Adding model 'Location'
-        db.create_table('paf_location', (
-            ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
-            ('continent', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['paf.Continent'])),
-            ('country', self.gf('smart_selects.db_fields.GroupedForeignKey')(to=orm['paf.Country'], group_field='continent')),
-        ))
-        db.send_create_signal('paf', ['Location'])
-
-
-    def backwards(self, orm):
-        # Deleting model 'Country'
-        db.delete_table('paf_country')
-
-        # Deleting model 'Continent'
-        db.delete_table('paf_continent')
-
-        # Deleting model 'Location'
-        db.delete_table('paf_location')
-
-
-    models = {
-        'paf.continent': {
-            'Meta': {'object_name': 'Continent'},
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})
-        },
-        'paf.country': {
-            'Meta': {'object_name': 'Country'},
-            'continent': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['paf.Continent']"}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})
-        },
-        'paf.currentacademic': {
-            'Meta': {'object_name': 'CurrentAcademic'},
-            'faculty': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['paf.Faculty']"}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'})
-        },
-        'paf.faculty': {
-            'Meta': {'object_name': 'Faculty'},
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
-            'university': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['paf.University']"})
-        },
-        'paf.linguisticlevel': {
-            'Meta': {'object_name': 'LinguisticLevel'},
-            'delf_dalf': ('django.db.models.fields.CharField', [], {'max_length': '2', 'blank': 'True'}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'other': ('django.db.models.fields.CharField', [], {'max_length': '1', 'blank': 'True'}),
-            'student': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['paf.Student']", 'unique': 'True'}),
-            'year_delf_dalf': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True', 'blank': 'True'}),
-            'year_other': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True', 'blank': 'True'})
-        },
-        'paf.location': {
-            'Meta': {'object_name': 'Location'},
-            'continent': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['paf.Continent']"}),
-            'country': ('smart_selects.db_fields.GroupedForeignKey', [], {'to': "orm['paf.Country']", 'group_field': "'continent'"}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'})
-        },
-        'paf.student': {
-            'Meta': {'object_name': 'Student'},
-            'dob': ('django.db.models.fields.DateField', [], {}),
-            'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}),
-            'firstname': ('django.db.models.fields.CharField', [], {'max_length': '50'}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'identifier': ('django.db.models.fields.CharField', [], {'max_length': '9', 'blank': 'True'}),
-            'lastname': ('django.db.models.fields.CharField', [], {'max_length': '50'}),
-            'nationality': ('django.db.models.fields.CharField', [], {'max_length': '2'}),
-            'parent_address': ('django.db.models.fields.CharField', [], {'max_length': '120'}),
-            'parent_tel': ('django.db.models.fields.CharField', [], {'max_length': '20', 'blank': 'True'}),
-            'sex': ('django.db.models.fields.CharField', [], {'max_length': '1'}),
-            'tel': ('django.db.models.fields.CharField', [], {'max_length': '20'})
-        },
-        'paf.university': {
-            'Meta': {'object_name': 'University'},
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})
-        }
-    }
-
-    complete_apps = ['paf']
\ No newline at end of file
diff --git a/paf/migrations/0009_auto__add_area__add_field_location_area__add_field_location_city__add_.py b/paf/migrations/0009_auto__add_area__add_field_location_area__add_field_location_city__add_.py
deleted file mode 100644 (file)
index 796cf70..0000000
+++ /dev/null
@@ -1,123 +0,0 @@
-# -*- coding: utf-8 -*-
-import datetime
-from south.db import db
-from south.v2 import SchemaMigration
-from django.db import models
-
-
-class Migration(SchemaMigration):
-
-    def forwards(self, orm):
-        # Adding model 'Area'
-        db.create_table('paf_area', (
-            ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
-            ('name', self.gf('django.db.models.fields.CharField')(max_length=100)),
-            ('country', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['paf.Country'])),
-        ))
-        db.send_create_signal('paf', ['Area'])
-
-        # Adding field 'Location.area'
-        db.add_column('paf_location', 'area',
-                      self.gf('smart_selects.db_fields.ChainedForeignKey')(default=1, to=orm['paf.Area']),
-                      keep_default=False)
-
-        # Adding field 'Location.city'
-        db.add_column('paf_location', 'city',
-                      self.gf('django.db.models.fields.CharField')(default=2, max_length=50),
-                      keep_default=False)
-
-        # Adding field 'Location.street'
-        db.add_column('paf_location', 'street',
-                      self.gf('django.db.models.fields.CharField')(default=2, max_length=100),
-                      keep_default=False)
-
-
-        # Changing field 'Location.country'
-        db.alter_column('paf_location', 'country_id', self.gf('smart_selects.db_fields.ChainedForeignKey')(to=orm['paf.Country']))
-
-    def backwards(self, orm):
-        # Deleting model 'Area'
-        db.delete_table('paf_area')
-
-        # Deleting field 'Location.area'
-        db.delete_column('paf_location', 'area_id')
-
-        # Deleting field 'Location.city'
-        db.delete_column('paf_location', 'city')
-
-        # Deleting field 'Location.street'
-        db.delete_column('paf_location', 'street')
-
-
-        # Changing field 'Location.country'
-        db.alter_column('paf_location', 'country_id', self.gf('smart_selects.db_fields.GroupedForeignKey')(to=orm['paf.Country'], group_field='continent'))
-
-    models = {
-        'paf.area': {
-            'Meta': {'object_name': 'Area'},
-            'country': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['paf.Country']"}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})
-        },
-        'paf.continent': {
-            'Meta': {'object_name': 'Continent'},
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})
-        },
-        'paf.country': {
-            'Meta': {'object_name': 'Country'},
-            'continent': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['paf.Continent']"}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})
-        },
-        'paf.currentacademic': {
-            'Meta': {'object_name': 'CurrentAcademic'},
-            'faculty': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['paf.Faculty']"}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'})
-        },
-        'paf.faculty': {
-            'Meta': {'object_name': 'Faculty'},
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
-            'university': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['paf.University']"})
-        },
-        'paf.linguisticlevel': {
-            'Meta': {'object_name': 'LinguisticLevel'},
-            'delf_dalf': ('django.db.models.fields.CharField', [], {'max_length': '2', 'blank': 'True'}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'other': ('django.db.models.fields.CharField', [], {'max_length': '1', 'blank': 'True'}),
-            'student': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['paf.Student']", 'unique': 'True'}),
-            'year_delf_dalf': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True', 'blank': 'True'}),
-            'year_other': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True', 'blank': 'True'})
-        },
-        'paf.location': {
-            'Meta': {'object_name': 'Location'},
-            'area': ('smart_selects.db_fields.ChainedForeignKey', [], {'to': "orm['paf.Area']"}),
-            'city': ('django.db.models.fields.CharField', [], {'max_length': '50'}),
-            'continent': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['paf.Continent']"}),
-            'country': ('smart_selects.db_fields.ChainedForeignKey', [], {'to': "orm['paf.Country']"}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'street': ('django.db.models.fields.CharField', [], {'max_length': '100'})
-        },
-        'paf.student': {
-            'Meta': {'object_name': 'Student'},
-            'dob': ('django.db.models.fields.DateField', [], {}),
-            'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}),
-            'firstname': ('django.db.models.fields.CharField', [], {'max_length': '50'}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'identifier': ('django.db.models.fields.CharField', [], {'max_length': '9', 'blank': 'True'}),
-            'lastname': ('django.db.models.fields.CharField', [], {'max_length': '50'}),
-            'nationality': ('django.db.models.fields.CharField', [], {'max_length': '2'}),
-            'parent_address': ('django.db.models.fields.CharField', [], {'max_length': '120'}),
-            'parent_tel': ('django.db.models.fields.CharField', [], {'max_length': '20', 'blank': 'True'}),
-            'sex': ('django.db.models.fields.CharField', [], {'max_length': '1'}),
-            'tel': ('django.db.models.fields.CharField', [], {'max_length': '20'})
-        },
-        'paf.university': {
-            'Meta': {'object_name': 'University'},
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})
-        }
-    }
-
-    complete_apps = ['paf']
\ No newline at end of file
diff --git a/paf/migrations/0010_auto__add_field_currentacademic_university__add_field_currentacademic_.py b/paf/migrations/0010_auto__add_field_currentacademic_university__add_field_currentacademic_.py
deleted file mode 100644 (file)
index 6e75785..0000000
+++ /dev/null
@@ -1,115 +0,0 @@
-# -*- coding: utf-8 -*-
-import datetime
-from south.db import db
-from south.v2 import SchemaMigration
-from django.db import models
-
-
-class Migration(SchemaMigration):
-
-    def forwards(self, orm):
-        # Adding field 'CurrentAcademic.university'
-        db.add_column('paf_currentacademic', 'university',
-                      self.gf('django.db.models.fields.related.ForeignKey')(default=1, to=orm['paf.University']),
-                      keep_default=False)
-
-        # Adding field 'CurrentAcademic.level'
-        db.add_column('paf_currentacademic', 'level',
-                      self.gf('django.db.models.fields.CharField')(default=1, max_length=200),
-                      keep_default=False)
-
-        # Adding field 'CurrentAcademic.specialty'
-        db.add_column('paf_currentacademic', 'specialty',
-                      self.gf('django.db.models.fields.CharField')(default=1, max_length=200),
-                      keep_default=False)
-
-
-        # Changing field 'CurrentAcademic.faculty'
-        db.alter_column('paf_currentacademic', 'faculty_id', self.gf('smart_selects.db_fields.ChainedForeignKey')(to=orm['paf.Faculty']))
-
-    def backwards(self, orm):
-        # Deleting field 'CurrentAcademic.university'
-        db.delete_column('paf_currentacademic', 'university_id')
-
-        # Deleting field 'CurrentAcademic.level'
-        db.delete_column('paf_currentacademic', 'level')
-
-        # Deleting field 'CurrentAcademic.specialty'
-        db.delete_column('paf_currentacademic', 'specialty')
-
-
-        # Changing field 'CurrentAcademic.faculty'
-        db.alter_column('paf_currentacademic', 'faculty_id', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['paf.Faculty']))
-
-    models = {
-        'paf.area': {
-            'Meta': {'object_name': 'Area'},
-            'country': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['paf.Country']"}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})
-        },
-        'paf.continent': {
-            'Meta': {'object_name': 'Continent'},
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})
-        },
-        'paf.country': {
-            'Meta': {'object_name': 'Country'},
-            'continent': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['paf.Continent']"}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})
-        },
-        'paf.currentacademic': {
-            'Meta': {'object_name': 'CurrentAcademic'},
-            'faculty': ('smart_selects.db_fields.ChainedForeignKey', [], {'to': "orm['paf.Faculty']"}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'level': ('django.db.models.fields.CharField', [], {'max_length': '200'}),
-            'specialty': ('django.db.models.fields.CharField', [], {'max_length': '200'}),
-            'university': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['paf.University']"})
-        },
-        'paf.faculty': {
-            'Meta': {'object_name': 'Faculty'},
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
-            'university': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['paf.University']"})
-        },
-        'paf.linguisticlevel': {
-            'Meta': {'object_name': 'LinguisticLevel'},
-            'delf_dalf': ('django.db.models.fields.CharField', [], {'max_length': '2', 'blank': 'True'}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'other': ('django.db.models.fields.CharField', [], {'max_length': '1', 'blank': 'True'}),
-            'student': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['paf.Student']", 'unique': 'True'}),
-            'year_delf_dalf': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True', 'blank': 'True'}),
-            'year_other': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True', 'blank': 'True'})
-        },
-        'paf.location': {
-            'Meta': {'object_name': 'Location'},
-            'area': ('smart_selects.db_fields.ChainedForeignKey', [], {'to': "orm['paf.Area']"}),
-            'city': ('django.db.models.fields.CharField', [], {'max_length': '50'}),
-            'continent': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['paf.Continent']"}),
-            'country': ('smart_selects.db_fields.ChainedForeignKey', [], {'to': "orm['paf.Country']"}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'street': ('django.db.models.fields.CharField', [], {'max_length': '100'})
-        },
-        'paf.student': {
-            'Meta': {'object_name': 'Student'},
-            'dob': ('django.db.models.fields.DateField', [], {}),
-            'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}),
-            'firstname': ('django.db.models.fields.CharField', [], {'max_length': '50'}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'identifier': ('django.db.models.fields.CharField', [], {'max_length': '9', 'blank': 'True'}),
-            'lastname': ('django.db.models.fields.CharField', [], {'max_length': '50'}),
-            'nationality': ('django.db.models.fields.CharField', [], {'max_length': '2'}),
-            'parent_address': ('django.db.models.fields.CharField', [], {'max_length': '120'}),
-            'parent_tel': ('django.db.models.fields.CharField', [], {'max_length': '20', 'blank': 'True'}),
-            'sex': ('django.db.models.fields.CharField', [], {'max_length': '1'}),
-            'tel': ('django.db.models.fields.CharField', [], {'max_length': '20'})
-        },
-        'paf.university': {
-            'Meta': {'object_name': 'University'},
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})
-        }
-    }
-
-    complete_apps = ['paf']
\ No newline at end of file
diff --git a/paf/migrations/0011_auto__add_field_currentacademic_student.py b/paf/migrations/0011_auto__add_field_currentacademic_student.py
deleted file mode 100644 (file)
index b291e55..0000000
+++ /dev/null
@@ -1,94 +0,0 @@
-# -*- coding: utf-8 -*-
-import datetime
-from south.db import db
-from south.v2 import SchemaMigration
-from django.db import models
-
-
-class Migration(SchemaMigration):
-
-    def forwards(self, orm):
-        # Adding field 'CurrentAcademic.student'
-        db.add_column('paf_currentacademic', 'student',
-                      self.gf('django.db.models.fields.related.OneToOneField')(default=6, to=orm['paf.Student'], unique=True),
-                      keep_default=False)
-
-
-    def backwards(self, orm):
-        # Deleting field 'CurrentAcademic.student'
-        db.delete_column('paf_currentacademic', 'student_id')
-
-
-    models = {
-        'paf.area': {
-            'Meta': {'object_name': 'Area'},
-            'country': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['paf.Country']"}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})
-        },
-        'paf.continent': {
-            'Meta': {'object_name': 'Continent'},
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})
-        },
-        'paf.country': {
-            'Meta': {'object_name': 'Country'},
-            'continent': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['paf.Continent']"}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})
-        },
-        'paf.currentacademic': {
-            'Meta': {'object_name': 'CurrentAcademic'},
-            'faculty': ('smart_selects.db_fields.ChainedForeignKey', [], {'to': "orm['paf.Faculty']"}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'level': ('django.db.models.fields.CharField', [], {'max_length': '200'}),
-            'specialty': ('django.db.models.fields.CharField', [], {'max_length': '200'}),
-            'student': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['paf.Student']", 'unique': 'True'}),
-            'university': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['paf.University']"})
-        },
-        'paf.faculty': {
-            'Meta': {'object_name': 'Faculty'},
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
-            'university': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['paf.University']"})
-        },
-        'paf.linguisticlevel': {
-            'Meta': {'object_name': 'LinguisticLevel'},
-            'delf_dalf': ('django.db.models.fields.CharField', [], {'max_length': '2', 'blank': 'True'}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'other': ('django.db.models.fields.CharField', [], {'max_length': '1', 'blank': 'True'}),
-            'student': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['paf.Student']", 'unique': 'True'}),
-            'year_delf_dalf': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True', 'blank': 'True'}),
-            'year_other': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True', 'blank': 'True'})
-        },
-        'paf.location': {
-            'Meta': {'object_name': 'Location'},
-            'area': ('smart_selects.db_fields.ChainedForeignKey', [], {'to': "orm['paf.Area']"}),
-            'city': ('django.db.models.fields.CharField', [], {'max_length': '50'}),
-            'continent': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['paf.Continent']"}),
-            'country': ('smart_selects.db_fields.ChainedForeignKey', [], {'to': "orm['paf.Country']"}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'street': ('django.db.models.fields.CharField', [], {'max_length': '100'})
-        },
-        'paf.student': {
-            'Meta': {'object_name': 'Student'},
-            'dob': ('django.db.models.fields.DateField', [], {}),
-            'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}),
-            'firstname': ('django.db.models.fields.CharField', [], {'max_length': '50'}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'identifier': ('django.db.models.fields.CharField', [], {'max_length': '9', 'blank': 'True'}),
-            'lastname': ('django.db.models.fields.CharField', [], {'max_length': '50'}),
-            'nationality': ('django.db.models.fields.CharField', [], {'max_length': '2'}),
-            'parent_address': ('django.db.models.fields.CharField', [], {'max_length': '120'}),
-            'parent_tel': ('django.db.models.fields.CharField', [], {'max_length': '20', 'blank': 'True'}),
-            'sex': ('django.db.models.fields.CharField', [], {'max_length': '1'}),
-            'tel': ('django.db.models.fields.CharField', [], {'max_length': '20'})
-        },
-        'paf.university': {
-            'Meta': {'object_name': 'University'},
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})
-        }
-    }
-
-    complete_apps = ['paf']
\ No newline at end of file
diff --git a/paf/migrations/0012_auto__del_location__del_country__del_continent__del_area__add_level__c.py b/paf/migrations/0012_auto__del_location__del_country__del_continent__del_area__add_level__c.py
deleted file mode 100644 (file)
index 2e3d597..0000000
+++ /dev/null
@@ -1,137 +0,0 @@
-# -*- coding: utf-8 -*-
-import datetime
-from south.db import db
-from south.v2 import SchemaMigration
-from django.db import models
-
-
-class Migration(SchemaMigration):
-
-    def forwards(self, orm):
-        # Deleting model 'Location'
-        db.delete_table('paf_location')
-
-        # Deleting model 'Country'
-        db.delete_table('paf_country')
-
-        # Deleting model 'Continent'
-        db.delete_table('paf_continent')
-
-        # Deleting model 'Area'
-        db.delete_table('paf_area')
-
-        # Adding model 'Level'
-        db.create_table('paf_level', (
-            ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
-            ('name', self.gf('django.db.models.fields.CharField')(max_length=100)),
-        ))
-        db.send_create_signal('paf', ['Level'])
-
-
-        # Renaming column for 'CurrentAcademic.level' to match new field type.
-        db.rename_column('paf_currentacademic', 'level', 'level_id')
-        # Changing field 'CurrentAcademic.level'
-        db.alter_column('paf_currentacademic', 'level_id', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['paf.Level']))
-        # Adding index on 'CurrentAcademic', fields ['level']
-        db.create_index('paf_currentacademic', ['level_id'])
-
-
-    def backwards(self, orm):
-        # Removing index on 'CurrentAcademic', fields ['level']
-        db.delete_index('paf_currentacademic', ['level_id'])
-
-        # Adding model 'Location'
-        db.create_table('paf_location', (
-            ('city', self.gf('django.db.models.fields.CharField')(max_length=50)),
-            ('street', self.gf('django.db.models.fields.CharField')(max_length=100)),
-            ('area', self.gf('smart_selects.db_fields.ChainedForeignKey')(to=orm['paf.Area'])),
-            ('country', self.gf('smart_selects.db_fields.ChainedForeignKey')(to=orm['paf.Country'])),
-            ('continent', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['paf.Continent'])),
-            ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
-        ))
-        db.send_create_signal('paf', ['Location'])
-
-        # Adding model 'Country'
-        db.create_table('paf_country', (
-            ('continent', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['paf.Continent'])),
-            ('name', self.gf('django.db.models.fields.CharField')(max_length=100)),
-            ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
-        ))
-        db.send_create_signal('paf', ['Country'])
-
-        # Adding model 'Continent'
-        db.create_table('paf_continent', (
-            ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
-            ('name', self.gf('django.db.models.fields.CharField')(max_length=100)),
-        ))
-        db.send_create_signal('paf', ['Continent'])
-
-        # Adding model 'Area'
-        db.create_table('paf_area', (
-            ('country', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['paf.Country'])),
-            ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
-            ('name', self.gf('django.db.models.fields.CharField')(max_length=100)),
-        ))
-        db.send_create_signal('paf', ['Area'])
-
-        # Deleting model 'Level'
-        db.delete_table('paf_level')
-
-
-        # Renaming column for 'CurrentAcademic.level' to match new field type.
-        db.rename_column('paf_currentacademic', 'level_id', 'level')
-        # Changing field 'CurrentAcademic.level'
-        db.alter_column('paf_currentacademic', 'level', self.gf('django.db.models.fields.CharField')(max_length=200))
-
-    models = {
-        'paf.currentacademic': {
-            'Meta': {'object_name': 'CurrentAcademic'},
-            'faculty': ('smart_selects.db_fields.ChainedForeignKey', [], {'to': "orm['paf.Faculty']"}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'level': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['paf.Level']"}),
-            'specialty': ('django.db.models.fields.CharField', [], {'max_length': '200'}),
-            'student': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['paf.Student']", 'unique': 'True'}),
-            'university': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['paf.University']"})
-        },
-        'paf.faculty': {
-            'Meta': {'object_name': 'Faculty'},
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
-            'university': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['paf.University']"})
-        },
-        'paf.level': {
-            'Meta': {'object_name': 'Level'},
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})
-        },
-        'paf.linguisticlevel': {
-            'Meta': {'object_name': 'LinguisticLevel'},
-            'delf_dalf': ('django.db.models.fields.CharField', [], {'max_length': '2', 'blank': 'True'}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'other': ('django.db.models.fields.CharField', [], {'max_length': '1', 'blank': 'True'}),
-            'student': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['paf.Student']", 'unique': 'True'}),
-            'year_delf_dalf': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True', 'blank': 'True'}),
-            'year_other': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True', 'blank': 'True'})
-        },
-        'paf.student': {
-            'Meta': {'object_name': 'Student'},
-            'dob': ('django.db.models.fields.DateField', [], {}),
-            'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}),
-            'firstname': ('django.db.models.fields.CharField', [], {'max_length': '50'}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'identifier': ('django.db.models.fields.CharField', [], {'max_length': '9', 'blank': 'True'}),
-            'lastname': ('django.db.models.fields.CharField', [], {'max_length': '50'}),
-            'nationality': ('django.db.models.fields.CharField', [], {'max_length': '2'}),
-            'parent_address': ('django.db.models.fields.CharField', [], {'max_length': '120'}),
-            'parent_tel': ('django.db.models.fields.CharField', [], {'max_length': '20', 'blank': 'True'}),
-            'sex': ('django.db.models.fields.CharField', [], {'max_length': '1'}),
-            'tel': ('django.db.models.fields.CharField', [], {'max_length': '20'})
-        },
-        'paf.university': {
-            'Meta': {'object_name': 'University'},
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})
-        }
-    }
-
-    complete_apps = ['paf']
\ No newline at end of file
diff --git a/paf/migrations/0013_auto__add_field_currentacademic_entry_year__add_field_currentacademic_.py b/paf/migrations/0013_auto__add_field_currentacademic_entry_year__add_field_currentacademic_.py
deleted file mode 100644 (file)
index 51eba01..0000000
+++ /dev/null
@@ -1,92 +0,0 @@
-# -*- coding: utf-8 -*-
-import datetime
-from south.db import db
-from south.v2 import SchemaMigration
-from django.db import models
-
-
-class Migration(SchemaMigration):
-
-    def forwards(self, orm):
-        # Adding field 'CurrentAcademic.entry_year'
-        db.add_column('paf_currentacademic', 'entry_year',
-                      self.gf('django.db.models.fields.PositiveIntegerField')(default=2012),
-                      keep_default=False)
-
-        # Adding field 'CurrentAcademic.end_year'
-        db.add_column('paf_currentacademic', 'end_year',
-                      self.gf('django.db.models.fields.PositiveIntegerField')(null=True, blank=True),
-                      keep_default=False)
-
-        # Adding field 'CurrentAcademic.certified'
-        db.add_column('paf_currentacademic', 'certified',
-                      self.gf('django.db.models.fields.NullBooleanField')(null=True, blank=True),
-                      keep_default=False)
-
-
-    def backwards(self, orm):
-        # Deleting field 'CurrentAcademic.entry_year'
-        db.delete_column('paf_currentacademic', 'entry_year')
-
-        # Deleting field 'CurrentAcademic.end_year'
-        db.delete_column('paf_currentacademic', 'end_year')
-
-        # Deleting field 'CurrentAcademic.certified'
-        db.delete_column('paf_currentacademic', 'certified')
-
-
-    models = {
-        'paf.currentacademic': {
-            'Meta': {'object_name': 'CurrentAcademic'},
-            'certified': ('django.db.models.fields.NullBooleanField', [], {'null': 'True', 'blank': 'True'}),
-            'end_year': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True', 'blank': 'True'}),
-            'entry_year': ('django.db.models.fields.PositiveIntegerField', [], {}),
-            'faculty': ('smart_selects.db_fields.ChainedForeignKey', [], {'to': "orm['paf.Faculty']"}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'level': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['paf.Level']"}),
-            'specialty': ('django.db.models.fields.CharField', [], {'max_length': '200'}),
-            'student': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['paf.Student']", 'unique': 'True'}),
-            'university': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['paf.University']"})
-        },
-        'paf.faculty': {
-            'Meta': {'object_name': 'Faculty'},
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
-            'university': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['paf.University']"})
-        },
-        'paf.level': {
-            'Meta': {'object_name': 'Level'},
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})
-        },
-        'paf.linguisticlevel': {
-            'Meta': {'object_name': 'LinguisticLevel'},
-            'delf_dalf': ('django.db.models.fields.CharField', [], {'max_length': '2', 'blank': 'True'}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'other': ('django.db.models.fields.CharField', [], {'max_length': '1', 'blank': 'True'}),
-            'student': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['paf.Student']", 'unique': 'True'}),
-            'year_delf_dalf': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True', 'blank': 'True'}),
-            'year_other': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True', 'blank': 'True'})
-        },
-        'paf.student': {
-            'Meta': {'object_name': 'Student'},
-            'dob': ('django.db.models.fields.DateField', [], {}),
-            'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}),
-            'firstname': ('django.db.models.fields.CharField', [], {'max_length': '50'}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'identifier': ('django.db.models.fields.CharField', [], {'max_length': '9', 'blank': 'True'}),
-            'lastname': ('django.db.models.fields.CharField', [], {'max_length': '50'}),
-            'nationality': ('django.db.models.fields.CharField', [], {'max_length': '2'}),
-            'parent_address': ('django.db.models.fields.CharField', [], {'max_length': '120'}),
-            'parent_tel': ('django.db.models.fields.CharField', [], {'max_length': '20', 'blank': 'True'}),
-            'sex': ('django.db.models.fields.CharField', [], {'max_length': '1'}),
-            'tel': ('django.db.models.fields.CharField', [], {'max_length': '20'})
-        },
-        'paf.university': {
-            'Meta': {'object_name': 'University'},
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})
-        }
-    }
-
-    complete_apps = ['paf']
\ No newline at end of file
diff --git a/paf/migrations/0014_auto__add_diplomaobtained.py b/paf/migrations/0014_auto__add_diplomaobtained.py
deleted file mode 100644 (file)
index ea4b573..0000000
+++ /dev/null
@@ -1,91 +0,0 @@
-# -*- coding: utf-8 -*-
-import datetime
-from south.db import db
-from south.v2 import SchemaMigration
-from django.db import models
-
-
-class Migration(SchemaMigration):
-
-    def forwards(self, orm):
-        # Adding model 'DiplomaObtained'
-        db.create_table('paf_diplomaobtained', (
-            ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
-            ('university', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['paf.University'])),
-            ('level', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['paf.Level'])),
-            ('entitle', self.gf('django.db.models.fields.CharField')(max_length=200)),
-            ('year', self.gf('django.db.models.fields.PositiveIntegerField')()),
-            ('student', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['paf.Student'])),
-        ))
-        db.send_create_signal('paf', ['DiplomaObtained'])
-
-
-    def backwards(self, orm):
-        # Deleting model 'DiplomaObtained'
-        db.delete_table('paf_diplomaobtained')
-
-
-    models = {
-        'paf.currentacademic': {
-            'Meta': {'object_name': 'CurrentAcademic'},
-            'certified': ('django.db.models.fields.NullBooleanField', [], {'null': 'True', 'blank': 'True'}),
-            'end_year': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True', 'blank': 'True'}),
-            'entry_year': ('django.db.models.fields.PositiveIntegerField', [], {}),
-            'faculty': ('smart_selects.db_fields.ChainedForeignKey', [], {'to': "orm['paf.Faculty']"}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'level': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['paf.Level']"}),
-            'specialty': ('django.db.models.fields.CharField', [], {'max_length': '200'}),
-            'student': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['paf.Student']", 'unique': 'True'}),
-            'university': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['paf.University']"})
-        },
-        'paf.diplomaobtained': {
-            'Meta': {'object_name': 'DiplomaObtained'},
-            'entitle': ('django.db.models.fields.CharField', [], {'max_length': '200'}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'level': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['paf.Level']"}),
-            'student': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['paf.Student']"}),
-            'university': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['paf.University']"}),
-            'year': ('django.db.models.fields.PositiveIntegerField', [], {})
-        },
-        'paf.faculty': {
-            'Meta': {'object_name': 'Faculty'},
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
-            'university': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['paf.University']"})
-        },
-        'paf.level': {
-            'Meta': {'object_name': 'Level'},
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})
-        },
-        'paf.linguisticlevel': {
-            'Meta': {'object_name': 'LinguisticLevel'},
-            'delf_dalf': ('django.db.models.fields.CharField', [], {'max_length': '2', 'blank': 'True'}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'other': ('django.db.models.fields.CharField', [], {'max_length': '1', 'blank': 'True'}),
-            'student': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['paf.Student']", 'unique': 'True'}),
-            'year_delf_dalf': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True', 'blank': 'True'}),
-            'year_other': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True', 'blank': 'True'})
-        },
-        'paf.student': {
-            'Meta': {'object_name': 'Student'},
-            'dob': ('django.db.models.fields.DateField', [], {}),
-            'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}),
-            'firstname': ('django.db.models.fields.CharField', [], {'max_length': '50'}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'identifier': ('django.db.models.fields.CharField', [], {'max_length': '9', 'blank': 'True'}),
-            'lastname': ('django.db.models.fields.CharField', [], {'max_length': '50'}),
-            'nationality': ('django.db.models.fields.CharField', [], {'max_length': '2'}),
-            'parent_address': ('django.db.models.fields.CharField', [], {'max_length': '120'}),
-            'parent_tel': ('django.db.models.fields.CharField', [], {'max_length': '20', 'blank': 'True'}),
-            'sex': ('django.db.models.fields.CharField', [], {'max_length': '1'}),
-            'tel': ('django.db.models.fields.CharField', [], {'max_length': '20'})
-        },
-        'paf.university': {
-            'Meta': {'object_name': 'University'},
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})
-        }
-    }
-
-    complete_apps = ['paf']
\ No newline at end of file
diff --git a/paf/migrations/0015_auto__add_country__add_employment__add_city__add_entreprise__add_field.py b/paf/migrations/0015_auto__add_country__add_employment__add_city__add_entreprise__add_field.py
deleted file mode 100644 (file)
index 94ef28a..0000000
+++ /dev/null
@@ -1,160 +0,0 @@
-# -*- coding: utf-8 -*-
-import datetime
-from south.db import db
-from south.v2 import SchemaMigration
-from django.db import models
-
-
-class Migration(SchemaMigration):
-
-    def forwards(self, orm):
-        # Adding model 'Country'
-        db.create_table('paf_country', (
-            ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
-            ('name', self.gf('django.db.models.fields.CharField')(max_length=100)),
-        ))
-        db.send_create_signal('paf', ['Country'])
-
-        # Adding model 'Employment'
-        db.create_table('paf_employment', (
-            ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
-            ('entreprise', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['paf.Entreprise'])),
-            ('activity_sector', self.gf('django.db.models.fields.CharField')(max_length=200)),
-            ('country', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['paf.Country'])),
-            ('website', self.gf('django.db.models.fields.URLField')(max_length=200)),
-            ('position', self.gf('django.db.models.fields.CharField')(max_length=200)),
-            ('detail_position', self.gf('django.db.models.fields.TextField')()),
-            ('observation', self.gf('django.db.models.fields.CharField')(max_length=200, blank=True)),
-            ('student', self.gf('django.db.models.fields.related.OneToOneField')(to=orm['paf.Student'], unique=True)),
-        ))
-        db.send_create_signal('paf', ['Employment'])
-
-        # Adding model 'City'
-        db.create_table('paf_city', (
-            ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
-            ('name', self.gf('django.db.models.fields.CharField')(max_length=100)),
-        ))
-        db.send_create_signal('paf', ['City'])
-
-        # Adding model 'Entreprise'
-        db.create_table('paf_entreprise', (
-            ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
-            ('name', self.gf('django.db.models.fields.CharField')(max_length=100)),
-        ))
-        db.send_create_signal('paf', ['Entreprise'])
-
-        # Adding field 'CurrentAcademic.city'
-        db.add_column('paf_currentacademic', 'city',
-                      self.gf('django.db.models.fields.related.ForeignKey')(default=2, to=orm['paf.City']),
-                      keep_default=False)
-
-
-    def backwards(self, orm):
-        # Deleting model 'Country'
-        db.delete_table('paf_country')
-
-        # Deleting model 'Employment'
-        db.delete_table('paf_employment')
-
-        # Deleting model 'City'
-        db.delete_table('paf_city')
-
-        # Deleting model 'Entreprise'
-        db.delete_table('paf_entreprise')
-
-        # Deleting field 'CurrentAcademic.city'
-        db.delete_column('paf_currentacademic', 'city_id')
-
-
-    models = {
-        'paf.city': {
-            'Meta': {'object_name': 'City'},
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})
-        },
-        'paf.country': {
-            'Meta': {'object_name': 'Country'},
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})
-        },
-        'paf.currentacademic': {
-            'Meta': {'object_name': 'CurrentAcademic'},
-            'certified': ('django.db.models.fields.NullBooleanField', [], {'null': 'True', 'blank': 'True'}),
-            'city': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['paf.City']"}),
-            'end_year': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True', 'blank': 'True'}),
-            'entry_year': ('django.db.models.fields.PositiveIntegerField', [], {}),
-            'faculty': ('smart_selects.db_fields.ChainedForeignKey', [], {'to': "orm['paf.Faculty']"}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'level': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['paf.Level']"}),
-            'specialty': ('django.db.models.fields.CharField', [], {'max_length': '200'}),
-            'student': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['paf.Student']", 'unique': 'True'}),
-            'university': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['paf.University']"})
-        },
-        'paf.diplomaobtained': {
-            'Meta': {'object_name': 'DiplomaObtained'},
-            'entitle': ('django.db.models.fields.CharField', [], {'max_length': '200'}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'level': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['paf.Level']"}),
-            'student': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['paf.Student']"}),
-            'university': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['paf.University']"}),
-            'year': ('django.db.models.fields.PositiveIntegerField', [], {})
-        },
-        'paf.employment': {
-            'Meta': {'object_name': 'Employment'},
-            'activity_sector': ('django.db.models.fields.CharField', [], {'max_length': '200'}),
-            'country': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['paf.Country']"}),
-            'detail_position': ('django.db.models.fields.TextField', [], {}),
-            'entreprise': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['paf.Entreprise']"}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'observation': ('django.db.models.fields.CharField', [], {'max_length': '200', 'blank': 'True'}),
-            'position': ('django.db.models.fields.CharField', [], {'max_length': '200'}),
-            'student': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['paf.Student']", 'unique': 'True'}),
-            'website': ('django.db.models.fields.URLField', [], {'max_length': '200'})
-        },
-        'paf.entreprise': {
-            'Meta': {'object_name': 'Entreprise'},
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})
-        },
-        'paf.faculty': {
-            'Meta': {'object_name': 'Faculty'},
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
-            'university': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['paf.University']"})
-        },
-        'paf.level': {
-            'Meta': {'object_name': 'Level'},
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})
-        },
-        'paf.linguisticlevel': {
-            'Meta': {'object_name': 'LinguisticLevel'},
-            'delf_dalf': ('django.db.models.fields.CharField', [], {'max_length': '2', 'blank': 'True'}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'other': ('django.db.models.fields.CharField', [], {'max_length': '1', 'blank': 'True'}),
-            'student': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['paf.Student']", 'unique': 'True'}),
-            'year_delf_dalf': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True', 'blank': 'True'}),
-            'year_other': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True', 'blank': 'True'})
-        },
-        'paf.student': {
-            'Meta': {'object_name': 'Student'},
-            'dob': ('django.db.models.fields.DateField', [], {}),
-            'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}),
-            'firstname': ('django.db.models.fields.CharField', [], {'max_length': '50'}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'identifier': ('django.db.models.fields.CharField', [], {'max_length': '9', 'blank': 'True'}),
-            'lastname': ('django.db.models.fields.CharField', [], {'max_length': '50'}),
-            'nationality': ('django.db.models.fields.CharField', [], {'max_length': '2'}),
-            'parent_address': ('django.db.models.fields.CharField', [], {'max_length': '120'}),
-            'parent_tel': ('django.db.models.fields.CharField', [], {'max_length': '20', 'blank': 'True'}),
-            'sex': ('django.db.models.fields.CharField', [], {'max_length': '1'}),
-            'tel': ('django.db.models.fields.CharField', [], {'max_length': '20'})
-        },
-        'paf.university': {
-            'Meta': {'object_name': 'University'},
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})
-        }
-    }
-
-    complete_apps = ['paf']
\ No newline at end of file
diff --git a/paf/migrations/__init__.py b/paf/migrations/__init__.py
deleted file mode 100644 (file)
index e69de29..0000000
old mode 100644 (file)
new mode 100755 (executable)
index 047640a..56725ab
@@ -11,7 +11,7 @@ class Student(models.Model):
     NATIONALITY_CHOICES = (
         ('KH', 'Cambodgienne'),
         ('LA', 'Laotienne'),
-        ('AN', 'Vietnamienne'),
+        ('VN', 'Vietnamienne'),
         ('ZZ', 'Autre'),
     )
     identifier = models.CharField('identifiant',max_length=9, blank=True)
diff --git a/paf/templates/base_enseignant.html b/paf/templates/base_enseignant.html
deleted file mode 100644 (file)
index ca4d3c1..0000000
+++ /dev/null
@@ -1,68 +0,0 @@
-{% load admin_static %}{% load url from future %}<!DOCTYPE html>
-<html lang="{{ LANGUAGE_CODE|default:"en-us" }}" {% if LANGUAGE_BIDI %}dir="rtl"{% endif %}>
-<head>
-<title>{% block title %}{% endblock %}</title>
-<link rel="stylesheet" type="text/css" href="{% block stylesheet %}{% static "admin/css/base.css" %}{% endblock %}" />
-{% block extrastyle %}{% endblock %}
-<!--[if lte IE 7]><link rel="stylesheet" type="text/css" href="{% block stylesheet_ie %}{% static "admin/css/ie.css" %}{% endblock %}" /><![endif]-->
-{% if LANGUAGE_BIDI %}<link rel="stylesheet" type="text/css" href="{% block stylesheet_rtl %}{% static "admin/css/rtl.css" %}{% endblock %}" />{% endif %}
-<script type="text/javascript">window.__admin_media_prefix__ = "{% filter escapejs %}{% static "admin/" %}{% endfilter %}";</script>
-{% block extrahead %}{% endblock %}
-{% block blockbots %}<meta name="robots" content="NONE,NOARCHIVE" />{% endblock %}
-
-    <link rel="icon" type="image/png" href="{{ MEDIA_URL }}images/favicon.ico" />
-    <link rel="stylesheet" type="text/css" href="{{ MEDIA_URL }}css/style_student_list.css" media="all"/>
-
-
-
-</head>
-{% load i18n %}
-
-<body class="{% if is_popup %}popup {% endif %}{% block bodyclass %}{% endblock %}">
-
-
-
-
-<!-- Container -->
-<div id="container">
-
-
-    <div id="header">
-
-      <div id="banner">
-        <img src="{{ MEDIA_URL }}images/logo.gif" alt="logo AUF"/>
-        <h1>Passeport Académique Francophone (PAF)</h1>
-        <h2>{% block sous_titre %}Liste des étudiants{% endblock %}</h2>
-        {% block chapeau %}{% endblock %}
-      </div>
-
-      <ul id="user-actions">
-          {% if user.is_authenticated %}
-          <li class="username">{{ user }}</li>
-            <li class="link"><a href="{% url "deconnexion" %}">Déconnexion</a></li>
-          {% else %}
-            <li class="link"><a href="{% url connexion %}">Connexion</a></li>
-            <li class="link"><a href="{% url register %}">Enregistrer</a></li>
-          {% endif %}
-      </ul>
-
-    </div>
-
-
-    <!-- Content -->
-    <div id="content" class="{% block coltype %}colM{% endblock %}">
-        {% block content %}
-        {% block object-tools %}{% endblock %}
-        {{ content }}
-        {% endblock %}
-        {% block sidebar %}{% endblock %}
-        <br class="clear" />
-    </div>
-    <!-- END Content -->
-
-    {% block footer %}<div id="footer"></div>{% endblock %}
-</div>
-<!-- END Container -->
-
-</body>
-</html>
diff --git a/paf/templates/base_etudiant.html b/paf/templates/base_etudiant.html
deleted file mode 100644 (file)
index 2de0ea4..0000000
+++ /dev/null
@@ -1,70 +0,0 @@
-{% load admin_static %}{% load url from future %}<!DOCTYPE html>
-<html lang="{{ LANGUAGE_CODE|default:"en-us" }}" {% if LANGUAGE_BIDI %}dir="rtl"{% endif %}>
-<head>
-<title>{% block title %}{% endblock %}</title>
-<link rel="stylesheet" type="text/css" href="{% block stylesheet %}{% static "admin/css/base.css" %}{% endblock %}" />
-{% block extrastyle %}{% endblock %}
-<!--[if lte IE 7]><link rel="stylesheet" type="text/css" href="{% block stylesheet_ie %}{% static "admin/css/ie.css" %}{% endblock %}" /><![endif]-->
-{% if LANGUAGE_BIDI %}<link rel="stylesheet" type="text/css" href="{% block stylesheet_rtl %}{% static "admin/css/rtl.css" %}{% endblock %}" />{% endif %}
-<script type="text/javascript">window.__admin_media_prefix__ = "{% filter escapejs %}{% static "admin/" %}{% endfilter %}";</script>
-{% block extrahead %}{% endblock %}
-{% block blockbots %}<meta name="robots" content="NONE,NOARCHIVE" />{% endblock %}
-
-    <link rel="icon" type="image/png" href="{{ MEDIA_URL }}images/favicon.ico" />
-    <link rel="stylesheet" type="text/css" href="{{ MEDIA_URL }}css/style_student_list.css" media="all"/>
-
-
-
-</head>
-{% load i18n %}
-
-<body class="{% if is_popup %}popup {% endif %}{% block bodyclass %}{% endblock %}">
-
-
-
-
-<!-- Container -->
-<div id="container">
-
-
-    <div id="header">
-
-      <div id="banner">
-        <img src="{{ MEDIA_URL }}images/logo.gif" alt="logo AUF"/>
-        <h1>Passeport Académique Francophone</h1>
-        <h2>{% block sous_titre %}{% endblock %}</h2>
-        {% block chapeau %}{% endblock %}
-      </div>
-
-      <ul id="user-actions">
-          {% if user.is_authenticated %}
-          <li class="username">{{ user }}</li>
-            <li class="link"><a href="{% url "deconnexion" %}">Déconnexion</a></li>
-            <li class="link"><a href="{%  url "edit_info" %}">Changer votre information</a></li>
-            <li class="link"><a href="{%  url "change_password" %}">Changer le mot de passe</a></li>
-          {% else %}
-            <li class="link"><a href="{% url connexion %}">Connexion</a></li>
-            <li class="link"><a href="{% url register %}">Enregistrer</a></li>
-          {% endif %}
-      </ul>
-
-    </div>
-
-
-    <!-- Content -->
-    <div id="content" class="{% block coltype %}colM{% endblock %}">
-        {% block content %}
-        {% block object-tools %}{% endblock %}
-        {{ content }}
-        {% endblock %}
-        {% block sidebar %}{% endblock %}
-        <br class="clear" />
-    </div>
-    <!-- END Content -->
-
-    {% block footer %}<div id="footer"></div>{% endblock %}
-</div>
-<!-- END Container -->
-
-</body>
-</html>
diff --git a/paf/templates/edit_info copy.html b/paf/templates/edit_info copy.html
deleted file mode 100644 (file)
index 17bdc1e..0000000
+++ /dev/null
@@ -1,59 +0,0 @@
-{% extends "base.html" %}
-{% load i18n admin_static admin_modify %}
-{% load url from future %}
-{% load admin_urls %}
-
-{% block css %}
-<link rel="stylesheet" type="text/css" href="{{ MEDIA_URL }}css/edit_info.css" media="all"/>
-{% endblock %}
-
-{% block main %}
-
-{% if messages %}
-    {% for message in messages %}{%endfor%}
-    <ul class="messagelist">
-        <li class="info">Vos informations ont été modifiées avec succès.</li>
-    </ul>
-{% endif %}
-
-<div id="content-main">
-<h1>Edit info</h1>
-<form {% if has_file_field %}enctype="multipart/form-data" {% endif %}action="{{ form_url }}" method="post" id="{{ opts.module_name }}_form">{% csrf_token %}{% block form_top %}{% endblock %}
-<div>
-{% if is_popup %}<input type="hidden" name="_popup" value="1" />{% endif %}
-{% if save_on_top %}{% block submit_buttons_top %}{% submit_row %}{% endblock %}{% endif %}
-{% if errors %}
-    <p class="errornote">
-    {% blocktrans count counter=errors|length %}Please correct the error below.{% plural %}Please correct the errors below.{% endblocktrans %}
-    </p>
-    {{ adminform.form.non_field_errors }}
-{% endif %}
-
-{% block field_sets %}
-{% for fieldset in adminform %}
-  {% include "admin/includes/fieldset.html" %}
-{% endfor %}
-{% endblock %}
-
-{% block after_field_sets %}{% endblock %}
-
-{% block inline_field_sets %}
-{% for inline_admin_formset in inline_admin_formsets %}
-    {% include inline_admin_formset.opts.template %}
-{% endfor %}
-{% endblock %}
-
-{% block after_related_objects %}{% endblock %}
-
-{% block submit_buttons_bottom %}{% submit_row %}{% endblock %}
-
-{% if adminform and add %}
-   <script type="text/javascript">document.getElementById("{{ adminform.first_field.id_for_label }}").focus();</script>
-{% endif %}
-
-{# JavaScript for prepopulated fields #}
-{% prepopulated_fields_js %}
-
-</div>
-</form></div>
-{% endblock %}
old mode 100644 (file)
new mode 100755 (executable)
index 5cce60e..11ee3f1
@@ -1,8 +1,10 @@
-{% extends "base_etudiant.html" %}
+{% extends "base.html" %}
 {% load i18n admin_static admin_modify %}
 {% load url from future %}
 {% load admin_urls %}
 
+{% block edit_info %}{% endblock %}
+
 {% block extrahead %}{{ block.super }}
 {% url 'admin:jsi18n' as jsi18nurl %}
 <script type="text/javascript" src="{{ jsi18nurl|default:"../../../jsi18n/" }}"></script>
 </div>
 {% endblock %}
 {% endif %}
-{% block sous_titre %}Votre information en détail{% endblock %}
+
+{% block content_title %}<h1>Modification de votre information</h1>{% endblock %}
 
 {% block content %}<div id="content-main">
 <form {% if has_file_field %}enctype="multipart/form-data" {% endif %}action="{{ form_url }}" method="post" id="{{ opts.module_name }}_form">{% csrf_token %}{% block form_top %}{% endblock %}
 <div>
 {% if is_popup %}<input type="hidden" name="_popup" value="1" />{% endif %}
-{% if save_on_top %}{% block submit_buttons_top %}{% submit_row %}{% endblock %}{% endif %}
 {% if errors %}
     <p class="errornote">
     {% blocktrans count counter=errors|length %}Please correct the error below.{% plural %}Please correct the errors below.{% endblocktrans %}
 
 {% block after_related_objects %}{% endblock %}
 
-{% block submit_buttons_bottom %}{% submit_row %}{% endblock %}
+{% block submit_buttons_bottom %}
+<div class="submit-row">
+<input type="submit" value="Enregistrer" class="default" name="_save" />
+</div>
+{% endblock %}
 
 {% if adminform and add %}
    <script type="text/javascript">document.getElementById("{{ adminform.first_field.id_for_label }}").focus();</script>
diff --git a/paf/templates/etablissement_detail.html b/paf/templates/etablissement_detail.html
deleted file mode 100644 (file)
index f602ddb..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-{% extends "base.html" %}
-
-{% block main %}
-<h1>{{ etablissement }}</h1>
-
-<h2>Professeurs ({{ etablissement.personnes.count }})</h2>
-
-<ul>
-{% for p in etablissement.personnes.all %}
-    <li><a href="{% url personne p.id %}">{{ p }}</a></li>
-{% endfor %}
-</ul>
-{% endblock %}
diff --git a/paf/templates/etablissement_list.html b/paf/templates/etablissement_list.html
deleted file mode 100644 (file)
index 90f07ce..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-{% extends "base.html" %}
-
-{% block main %}
-<h1>Établissements ({{ etablissements.count }})</h1>
-
-<ul>
-{% for e in etablissements %}
-    <li><a href="{% url etablissement e.id %}">{{ e }}</a></li>
-{% endfor %}
-</ul>
-{% endblock %}
diff --git a/paf/templates/personne_detail.html b/paf/templates/personne_detail.html
deleted file mode 100644 (file)
index f5d2e05..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-{% extends "base.html" %}
-
-{% block main %}
-<h1>{{ personne }}</h1>
-
-<p>
-Établissement : <a href="{% url etablissement personne.universite.id %}">{{ personne.universite }}</a>
-</p>
-
-{% endblock %}
diff --git a/paf/templates/personne_list.html b/paf/templates/personne_list.html
deleted file mode 100644 (file)
index a2e994d..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-{% extends "base.html" %}
-
-{% block main %}
-<h1>Personnes ({{ personnes.count }})</h1>
-
-<ul>
-{% for p in personnes %}
-    <li><a href="{% url personne p.id %}">{{ p }} ({{ p.universite }})</a></li>
-{% endfor %}
-</ul>
-{% endblock %}
old mode 100644 (file)
new mode 100755 (executable)
index 303caaa..7da8ac6
@@ -4,7 +4,7 @@
     <li><a href="{% url views.connexion %}">Connexion</a>
 {% endblock %}
 
-{% block main %}
+{% block content %}
 
   <div class="zone-texte">
     <h2>Enregistrement</h2>
old mode 100644 (file)
new mode 100755 (executable)
index 5a7f49f..29fa935
@@ -1,11 +1,14 @@
 {% extends "base.html" %}
 
-{% block main %}
+{% block content %}
 
-    <div>
+    <p>
         Enregistrement a été fait avec succès.<br />
         Votre identifiant est: <em>{{ identifier }}</em>
-    </div>
+    </p>
+    <p>
+       Vous pouvez maintenant utiliser cet identifiant avec le mot de passe que vous avez entré dans le formulaire d'enregistrement pour vous connecter au site web pour changer votre information en cliquant sur le lien "Connexion".
+    </p>
   
 {% endblock %}
 
old mode 100644 (file)
new mode 100755 (executable)
index 3b68a18..22e5996
@@ -1,4 +1,4 @@
-{% extends "base_enseignant.html" %}
+{% extends "base.html" %}
 {% load i18n admin_static admin_modify %}
 {% load url from future %}
 {% load admin_urls %}
@@ -26,6 +26,7 @@
 {% endblock %}
 {% endif %}
 
+{% block content_title %}<h1>Information en détail de l'étudiant</h1>{% endblock %}
 
 {% block content %}<div id="content-main">
 <form {% if has_file_field %}enctype="multipart/form-data" {% endif %}action="{{ form_url }}" method="post" id="{{ opts.module_name }}_form">{% csrf_token %}{% block form_top %}{% endblock %}
old mode 100644 (file)
new mode 100755 (executable)
index 0f66c10..43a1607
@@ -1,4 +1,4 @@
-{% extends "base_enseignant.html" %}
+{% extends "base.html" %}
 {% load i18n admin_static admin_list %}
 {% load url from future %}
 {% load admin_urls %}
@@ -49,6 +49,8 @@
 
 {% block coltype %}flex{% endblock %}
 
+{% block content_title %}<h1>Liste des étudiants</h1>{% endblock %}
+
 {% block content %}
   <div id="content-main">
     {% block object-tools %}
@@ -89,9 +91,7 @@
       {% endif %}
 
       {% block result_list %}
-          {% if action_form and actions_on_top and cl.full_result_count %}{% admin_actions %}{% endif %}
           {% result_list cl %}
-          {% if action_form and actions_on_bottom and cl.full_result_count %}{% admin_actions %}{% endif %}
       {% endblock %}
       {% block pagination %}{% pagination cl %}{% endblock %}
       </form>
old mode 100644 (file)
new mode 100755 (executable)
old mode 100644 (file)
new mode 100755 (executable)
old mode 100644 (file)
new mode 100755 (executable)
diff --git a/paf/views 2.py b/paf/views 2.py
deleted file mode 100644 (file)
index cf70622..0000000
+++ /dev/null
@@ -1,42 +0,0 @@
-from django.shortcuts import render_to_response
-from paf.forms import RegistrationForm
-from django.core.context_processors import csrf
-from django.http import HttpResponse
-from paf.admin import StudentAdmin
-from paf.models import Student
-from django.contrib import admin
-from django.contrib.auth.models import User, Group
-
-def register(request):
-    if request.method == 'POST':
-        form = RegistrationForm(request.POST)
-        if form.is_valid():
-            cd = form.cleaned_data
-            if User.objects.filter(username=cd['username']):
-                #return HttpResponse("Username already exists")
-                c = {'registration_form': form, 'user_exist': True}
-                c.update(csrf(request))
-                return render_to_response('register.html', c)
-            else:
-                user = User(username=cd['username'], first_name=cd['firstname'], last_name=cd['lastname'])
-                user.set_password(cd['password'])
-                user.save()
-                group = Group.objects.get(name='student')
-                user.groups = [group]
-                user.save()
-                return HttpResponse("<a href='/paf/login/'>Login</a>")
-    else:        
-        form = RegistrationForm()
-    c = {'registration_form': form}
-    c.update(csrf(request))
-    return render_to_response('register.html', c)
-    
-def login(request):
-    return HttpResponse('login')
-    
-def change_student(request, id):
-    user = request.user
-    if user.is_superuser:
-        return StudentAdmin(Student, admin.site).change_view(request, id)
-    else:
-        return HttpResponse("Change student: user = " + user.username)
\ No newline at end of file
old mode 100644 (file)
new mode 100755 (executable)
index 0d1c841..7a0e623
@@ -45,11 +45,11 @@ def password_change_done(request):
 def admin_home(request):
     if request.user.is_superuser:
         return admin.site.index(request)
-    return HttpResponseRedirect('/')
+    return HttpResponseRedirect('/paf-v1/')
 
 def change_student(request, id):
     user = request.user
     if user.is_superuser:
         return StudentAdmin(Student, admin.site).change_view(request, id)
     else:
-        return HttpResponse("Change student: user = " + user.username)
\ No newline at end of file
+        return HttpResponse("Change student: user = " + user.username)
old mode 100644 (file)
new mode 100755 (executable)
diff --git a/paf0/media/css/base.css b/paf0/media/css/base.css
deleted file mode 100644 (file)
index 5e5fc58..0000000
+++ /dev/null
@@ -1,835 +0,0 @@
-/*
-    DJANGO Admin styles
-*/
-
-body {
-    margin: 0;
-    padding: 0;
-    font-size: 12px;
-    font-family: "Lucida Grande","DejaVu Sans","Bitstream Vera Sans",Verdana,Arial,sans-serif;
-    color: #333;
-    background: #fff;
-}
-
-/* LINKS */
-
-a:link, a:visited {
-    color: #5b80b2;
-    text-decoration: none;
-}
-
-a:hover {
-    color: #036;
-}
-
-a img {
-    border: none;
-}
-
-a.section:link, a.section:visited {
-    color: white;
-    text-decoration: none;
-}
-
-/* GLOBAL DEFAULTS */
-
-p, ol, ul, dl {
-    margin: .2em 0 .8em 0;
-}
-
-p {
-    padding: 0;
-    line-height: 140%;
-}
-
-h1,h2,h3,h4,h5 {
-    font-weight: bold;
-}
-
-h1 {
-    font-size: 18px;
-    color: #666;
-    padding: 0 6px 0 0;
-    margin: 0 0 .2em 0;
-}
-
-h2 {
-    font-size: 16px;
-    margin: 1em 0 .5em 0;
-}
-
-h2.subhead {
-    font-weight: normal;
-    margin-top: 0;
-}
-
-h3 {
-    font-size: 14px;
-    margin: .8em 0 .3em 0;
-    color: #666;
-    font-weight: bold;
-}
-
-h4 {
-    font-size: 12px;
-    margin: 1em 0 .8em 0;
-    padding-bottom: 3px;
-}
-
-h5 {
-    font-size: 10px;
-    margin: 1.5em 0 .5em 0;
-    color: #666;
-    text-transform: uppercase;
-    letter-spacing: 1px;
-}
-
-ul li {
-    list-style-type: square;
-    padding: 1px 0;
-}
-
-ul.plainlist {
-    margin-left: 0 !important;
-}
-
-ul.plainlist li {
-    list-style-type: none;
-}
-
-li ul {
-    margin-bottom: 0;
-}
-
-li, dt, dd {
-    font-size: 11px;
-    line-height: 14px;
-}
-
-dt {
-    font-weight: bold;
-    margin-top: 4px;
-}
-
-dd {
-    margin-left: 0;
-}
-
-form {
-    margin: 0;
-    padding: 0;
-}
-
-fieldset {
-    margin: 0;
-    padding: 0;
-}
-
-blockquote {
-    font-size: 11px;
-    color: #777;
-    margin-left: 2px;
-    padding-left: 10px;
-    border-left: 5px solid #ddd;
-}
-
-code, pre {
-    font-family: "Bitstream Vera Sans Mono", Monaco, "Courier New", Courier, monospace;
-    background: inherit;
-    color: #666;
-    font-size: 11px;
-}
-
-pre.literal-block {
-    margin: 10px;
-    background: #eee;
-    padding: 6px 8px;
-}
-
-code strong {
-    color: #930;
-}
-
-hr {
-    clear: both;
-    color: #eee;
-    background-color: #eee;
-    height: 1px;
-    border: none;
-    margin: 0;
-    padding: 0;
-    font-size: 1px;
-    line-height: 1px;
-}
-
-/* TEXT STYLES & MODIFIERS */
-
-.small {
-    font-size: 11px;
-}
-
-.tiny {
-    font-size: 10px;
-}
-
-p.tiny {
-    margin-top: -2px;
-}
-
-.mini {
-    font-size: 9px;
-}
-
-p.mini {
-    margin-top: -3px;
-}
-
-.help, p.help {
-    font-size: 10px !important;
-    color: #999;
-}
-
-img.help-tooltip {
-    cursor: help;
-}
-
-p img, h1 img, h2 img, h3 img, h4 img, td img {
-    vertical-align: middle;
-}
-
-.quiet, a.quiet:link, a.quiet:visited {
-    color: #999 !important;
-    font-weight: normal !important;
-}
-
-.quiet strong {
-    font-weight: bold !important;
-}
-
-.float-right {
-    float: right;
-}
-
-.float-left {
-    float: left;
-}
-
-.clear {
-    clear: both;
-}
-
-.align-left {
-    text-align: left;
-}
-
-.align-right {
-    text-align: right;
-}
-
-.example {
-    margin: 10px 0;
-    padding: 5px 10px;
-    background: #efefef;
-}
-
-.nowrap {
-    white-space: nowrap;
-}
-
-/* TABLES */
-
-table {
-    border-collapse: collapse;
-    border-color: #ccc;
-}
-
-td, th {
-    font-size: 11px;
-    line-height: 13px;
-    border-bottom: 1px solid #eee;
-    vertical-align: top;
-    padding: 5px;
-    font-family: "Lucida Grande", Verdana, Arial, sans-serif;
-}
-
-th {
-    text-align: left;
-    font-size: 12px;
-    font-weight: bold;
-}
-
-thead th,
-tfoot td {
-    color: #666;
-    padding: 2px 5px;
-    font-size: 11px;
-    background: #e1e1e1 url(../img/nav-bg.gif) top left repeat-x;
-    border-left: 1px solid #ddd;
-    border-bottom: 1px solid #ddd;
-}
-
-tfoot td {
-    border-bottom: none;
-    border-top: 1px solid #ddd;
-}
-
-thead th:first-child,
-tfoot td:first-child {
-    border-left: none !important;
-}
-
-thead th.optional {
-    font-weight: normal !important;
-}
-
-fieldset table {
-    border-right: 1px solid #eee;
-}
-
-tr.row-label td {
-    font-size: 9px;
-    padding-top: 2px;
-    padding-bottom: 0;
-    border-bottom: none;
-    color: #666;
-    margin-top: -1px;
-}
-
-tr.alt {
-    background: #f6f6f6;
-}
-
-.row1 {
-    background: #EDF3FE;
-}
-
-.row2 {
-    background: white;
-}
-
-/* SORTABLE TABLES */
-
-thead th {
-    padding: 2px 5px;
-    line-height: normal;
-}
-
-thead th a:link, thead th a:visited {
-    color: #666;
-}
-
-thead th.sorted {
-    background: #c5c5c5 url(../img/nav-bg-selected.gif) top left repeat-x;
-}
-
-table thead th .text span {
-    padding: 2px 5px;
-    display:block;
-}
-
-table thead th .text a {
-    display: block;
-    cursor: pointer;
-    padding: 2px 5px;
-}
-
-table thead th.sortable:hover {
-    background: white url(../img/nav-bg-reverse.gif) 0 -5px repeat-x;
-}
-
-thead th.sorted a.sortremove {
-    visibility: hidden;
-}
-
-table thead th.sorted:hover a.sortremove {
-    visibility: visible;
-}
-
-table thead th.sorted .sortoptions {
-    display: block;
-    padding: 4px 5px 0 5px;
-    float: right;
-    text-align: right;
-}
-
-table thead th.sorted .sortpriority {
-    font-size: .8em;
-    min-width: 12px;
-    text-align: center;
-    vertical-align: top;
-}
-
-table thead th.sorted .sortoptions a {
-    width: 14px;
-    height: 12px;
-    display: inline-block;
-}
-
-table thead th.sorted .sortoptions a.sortremove {
-    background: url(../img/sorting-icons.gif) -4px -5px no-repeat;
-}
-
-table thead th.sorted .sortoptions a.sortremove:hover {
-    background: url(../img/sorting-icons.gif) -4px -27px no-repeat;
-}
-
-table thead th.sorted .sortoptions a.ascending {
-    background: url(../img/sorting-icons.gif) -5px -50px no-repeat;
-}
-
-table thead th.sorted .sortoptions a.ascending:hover {
-    background: url(../img/sorting-icons.gif) -5px -72px no-repeat;
-}
-
-table thead th.sorted .sortoptions a.descending {
-    background: url(../img/sorting-icons.gif) -5px -94px no-repeat;
-}
-
-table thead th.sorted .sortoptions a.descending:hover {
-    background: url(../img/sorting-icons.gif) -5px -115px no-repeat;
-}
-
-/* ORDERABLE TABLES */
-
-table.orderable tbody tr td:hover {
-    cursor: move;
-}
-
-table.orderable tbody tr td:first-child {
-    padding-left: 14px;
-    background-image: url(../img/nav-bg-grabber.gif);
-    background-repeat: repeat-y;
-}
-
-table.orderable-initalized .order-cell, body>tr>td.order-cell {
-    display: none;
-}
-
-/* FORM DEFAULTS */
-
-input, textarea, select, .form-row p {
-    margin: 2px 0;
-    padding: 2px 3px;
-    vertical-align: middle;
-    font-family: "Lucida Grande", Verdana, Arial, sans-serif;
-    font-weight: normal;
-    font-size: 11px;
-}
-
-textarea {
-    vertical-align: top !important;
-}
-
-input[type=text], input[type=password], textarea, select, .vTextField {
-    border: 1px solid #ccc;
-}
-
-/* FORM BUTTONS */
-
-.button, input[type=submit], input[type=button], .submit-row input {
-    background: white url(../img/nav-bg.gif) bottom repeat-x;
-    padding: 3px 5px;
-    color: black;
-    border: 1px solid #bbb;
-    border-color: #ddd #aaa #aaa #ddd;
-}
-
-.button:active, input[type=submit]:active, input[type=button]:active {
-    background-image: url(../img/nav-bg-reverse.gif);
-    background-position: top;
-}
-
-.button[disabled], input[type=submit][disabled], input[type=button][disabled] {
-       background-image: url(../img/nav-bg.gif);
-       background-position: bottom;
-       opacity: 0.4;
-}
-
-.button.default, input[type=submit].default, .submit-row input.default {
-    border: 2px solid #5b80b2;
-    background: #7CA0C7 url(../img/default-bg.gif) bottom repeat-x;
-    font-weight: bold;
-    color: white;
-    float: right;
-}
-
-.button.default:active, input[type=submit].default:active {
-    background-image: url(../img/default-bg-reverse.gif);
-    background-position: top;
-}
-
-.button[disabled].default, input[type=submit][disabled].default, input[type=button][disabled].default {
-       background-image: url(../img/default-bg.gif);
-       background-position: bottom;
-       opacity: 0.4;
-}
-
-
-/* MODULES */
-
-.module {
-    border: 1px solid #ccc;
-    margin-bottom: 5px;
-    background: white;
-}
-
-.module p, .module ul, .module h3, .module h4, .module dl, .module pre {
-    padding-left: 10px;
-    padding-right: 10px;
-}
-
-.module blockquote {
-    margin-left: 12px;
-}
-
-.module ul, .module ol {
-    margin-left: 1.5em;
-}
-
-.module h3 {
-    margin-top: .6em;
-}
-
-.module h2, .module caption, .inline-group h2 {
-    margin: 0;
-    padding: 2px 5px 3px 5px;
-    font-size: 11px;
-    text-align: left;
-    font-weight: bold;
-    background: #7CA0C7 url(../img/default-bg.gif) top left repeat-x;
-    color: white;
-}
-
-.module table {
-    border-collapse: collapse;
-}
-
-/* MESSAGES & ERRORS */
-
-ul.messagelist {
-    padding: 0 0 5px 0;
-    margin: 0;
-}
-
-ul.messagelist li {
-    font-size: 12px;
-    display: block;
-    padding: 4px 5px 4px 25px;
-    margin: 0 0 3px 0;
-    border-bottom: 1px solid #ddd;
-    color: #666;
-    background: #ffc url(../img/icon_success.gif) 5px .3em no-repeat;
-}
-
-ul.messagelist li.warning{
-    background-image: url(../img/icon_alert.gif);
-}
-
-ul.messagelist li.error{
-    background-image: url(../img/icon_error.gif);
-}
-
-.errornote {
-    font-size: 12px !important;
-    display: block;
-    padding: 4px 5px 4px 25px;
-    margin: 0 0 3px 0;
-    border: 1px solid red;
-    color: red;
-    background: #ffc url(../img/icon_error.gif) 5px .3em no-repeat;
-}
-
-ul.errorlist {
-    margin: 0 !important;
-    padding: 0 !important;
-}
-
-.errorlist li {
-    font-size: 12px !important;
-    display: block;
-    padding: 4px 5px 4px 25px;
-    margin: 0 0 3px 0;
-    border: 1px solid red;
-    color: white;
-    background: red url(../img/icon_alert.gif) 5px .3em no-repeat;
-}
-
-.errorlist li a {
-       color: white;
-    text-decoration: underline;
-}
-
-td ul.errorlist {
-    margin: 0 !important;
-    padding: 0 !important;
-}
-
-td ul.errorlist li {
-    margin: 0 !important;
-}
-
-.errors {
-    background: #ffc;
-}
-
-.errors input, .errors select, .errors textarea {
-    border: 1px solid red;
-}
-
-div.system-message {
-    background: #ffc;
-    margin: 10px;
-    padding: 6px 8px;
-    font-size: .8em;
-}
-
-div.system-message p.system-message-title {
-    padding: 4px 5px 4px 25px;
-    margin: 0;
-    color: red;
-    background: #ffc url(../img/icon_error.gif) 5px .3em no-repeat;
-}
-
-.description {
-    font-size: 12px;
-    padding: 5px 0 0 12px;
-}
-
-/* BREADCRUMBS */
-
-div.breadcrumbs {
-    background: white url(../img/nav-bg-reverse.gif) 0 -10px repeat-x;
-    padding: 2px 8px 3px 8px;
-    font-size: 11px;
-    color: #999;
-    border-top: 1px solid white;
-    border-bottom: 1px solid #ccc;
-    text-align: left;
-}
-
-/* ACTION ICONS */
-
-.addlink {
-    padding-left: 12px;
-    background: url(../img/icon_addlink.gif) 0 .2em no-repeat;
-}
-
-.changelink {
-    padding-left: 12px;
-    background: url(../img/icon_changelink.gif) 0 .2em no-repeat;
-}
-
-.deletelink {
-    padding-left: 12px;
-    background: url(../img/icon_deletelink.gif) 0 .25em no-repeat;
-}
-
-a.deletelink:link, a.deletelink:visited {
-    color: #CC3434;
-}
-
-a.deletelink:hover {
-    color: #993333;
-}
-
-/* OBJECT TOOLS */
-
-.object-tools {
-    font-size: 10px;
-    font-weight: bold;
-    font-family: Arial,Helvetica,sans-serif;
-    padding-left: 0;
-    float: right;
-    position: relative;
-    margin-top: -2.4em;
-    margin-bottom: -2em;
-}
-
-.form-row .object-tools {
-    margin-top: 5px;
-    margin-bottom: 5px;
-    float: none;
-    height: 2em;
-    padding-left: 3.5em;
-}
-
-.object-tools li {
-    display: block;
-    float: left;
-    background: url(../img/tool-left.gif) 0 0 no-repeat;
-    padding: 0 0 0 8px;
-    margin-left: 2px;
-    height: 16px;
-}
-
-.object-tools li:hover {
-    background: url(../img/tool-left_over.gif) 0 0 no-repeat;
-}
-
-.object-tools a:link, .object-tools a:visited {
-    display: block;
-    float: left;
-    color: white;
-    padding: .1em 14px .1em 8px;
-    height: 14px;
-    background: #999 url(../img/tool-right.gif) 100% 0 no-repeat;
-}
-
-.object-tools a:hover, .object-tools li:hover a {
-    background: #5b80b2 url(../img/tool-right_over.gif) 100% 0 no-repeat;
-}
-
-.object-tools a.viewsitelink, .object-tools a.golink {
-    background: #999 url(../img/tooltag-arrowright.gif) top right no-repeat;
-    padding-right: 28px;
-}
-
-.object-tools a.viewsitelink:hover, .object-tools a.golink:hover {
-    background: #5b80b2 url(../img/tooltag-arrowright_over.gif) top right no-repeat;
-}
-
-.object-tools a.addlink {
-    background: #999 url(../img/tooltag-add.gif) top right no-repeat;
-    padding-right: 28px;
-}
-
-.object-tools a.addlink:hover {
-    background: #5b80b2 url(../img/tooltag-add_over.gif) top right no-repeat;
-}
-
-/* OBJECT HISTORY */
-
-table#change-history {
-    width: 100%;
-}
-
-table#change-history tbody th {
-    width: 16em;
-}
-
-/* PAGE STRUCTURE */
-
-#container {
-    position: relative;
-    width: 100%;
-    min-width: 760px;
-    padding: 0;
-}
-
-#content {
-    margin: 10px 15px;
-}
-
-#header {
-    width: 100%;
-}
-
-#content-main {
-    float: left;
-    width: 100%;
-}
-
-#content-related {
-    float: right;
-    width: 18em;
-    position: relative;
-    margin-right: -19em;
-}
-
-#footer {
-    clear: both;
-    padding: 10px;
-}
-
-/* COLUMN TYPES */
-
-.colMS {
-    margin-right: 20em !important;
-}
-
-.colSM {
-    margin-left: 20em !important;
-}
-
-.colSM #content-related {
-    float: left;
-    margin-right: 0;
-    margin-left: -19em;
-}
-
-.colSM #content-main {
-    float: right;
-}
-
-.popup .colM {
-    width: 95%;
-}
-
-.subcol {
-    float: left;
-    width: 46%;
-    margin-right: 15px;
-}
-
-.dashboard #content {
-    width: 500px;
-}
-
-/* HEADER */
-
-#header {
-    background: #417690;
-    color: #ffc;
-    overflow: hidden;
-}
-
-#header a:link, #header a:visited {
-    color: white;
-}
-
-#header a:hover {
-    text-decoration: underline;
-}
-
-#branding h1 {
-    padding: 0 10px;
-    font-size: 18px;
-    margin: 8px 0;
-    font-weight: normal;
-    color: #f4f379;
-}
-
-#branding h2 {
-    padding: 0 10px;
-    font-size: 14px;
-    margin: -8px 0 8px 0;
-    font-weight: normal;
-    color: #ffc;
-}
-
-#user-tools {
-    position: absolute;
-    top: 0;
-    right: 0;
-    padding: 1.2em 10px;
-    font-size: 11px;
-    text-align: right;
-}
-
-/* SIDEBAR */
-
-#content-related h3 {
-    font-size: 12px;
-    color: #666;
-    margin-bottom: 3px;
-}
-
-#content-related h4 {
-    font-size: 11px;
-}
-
-#content-related .module h2 {
-    background: #eee url(../img/nav-bg.gif) bottom left repeat-x;
-    color: #666;
-}
-
diff --git a/paf0/media/css/changelists.css b/paf0/media/css/changelists.css
deleted file mode 100644 (file)
index 3c1a8c1..0000000
+++ /dev/null
@@ -1,289 +0,0 @@
-/* CHANGELISTS */
-
-#changelist {
-    position: relative;
-    width: 100%;
-}
-
-#changelist table {
-    width: 100%;
-}
-
-.change-list .hiddenfields { display:none; }
-
-.change-list .filtered table {
-    border-right: 1px solid #ddd;
-}
-
-.change-list .filtered {
-    min-height: 400px;
-}
-
-.change-list .filtered {
-    background: white url(../img/changelist-bg.gif) top right repeat-y !important;
-}
-
-.change-list .filtered .results, .change-list .filtered .paginator, .filtered #toolbar, .filtered div.xfull {
-    margin-right: 160px !important;
-    width: auto !important;
-}
-
-.change-list .filtered table tbody th {
-    padding-right: 1em;
-}
-
-#changelist .toplinks {
-    border-bottom: 1px solid #ccc !important;
-}
-
-#changelist .paginator {
-    color: #666;
-    border-top: 1px solid #eee;
-    border-bottom: 1px solid #eee;
-    background: white url(../img/nav-bg.gif) 0 180% repeat-x;
-    overflow: hidden;
-}
-
-.change-list .filtered .paginator {
-    border-right: 1px solid #ddd;
-}
-
-/* CHANGELIST TABLES */
-
-#changelist table thead th {
-    padding: 0;
-    white-space: nowrap;
-    vertical-align: middle;
-}
-
-#changelist table thead th.action-checkbox-column {
-    width: 1.5em;
-    text-align: center;
-}
-
-#changelist table tbody td, #changelist table tbody th {
-    border-left: 1px solid #ddd;
-}
-
-#changelist table tbody td:first-child, #changelist table tbody th:first-child {
-    border-left: 0;
-    border-right: 1px solid #ddd;
-}
-
-#changelist table tbody td.action-checkbox {
-    text-align:center;
-}
-
-#changelist table tfoot {
-    color: #666;
-}
-
-/* TOOLBAR */
-
-#changelist #toolbar {
-    padding: 3px;
-    border-bottom: 1px solid #ddd;
-    background: #e1e1e1 url(../img/nav-bg.gif) top left repeat-x;
-    color: #666;
-}
-
-#changelist #toolbar form input {
-    font-size: 11px;
-    padding: 1px 2px;
-}
-
-#changelist #toolbar form #searchbar {
-    padding: 2px;
-}
-
-#changelist #changelist-search img {
-    vertical-align: middle;
-}
-
-/* FILTER COLUMN */
-
-#changelist-filter {
-    position: absolute;
-    top: 0;
-    right: 0;
-    z-index: 1000;
-    width: 160px;
-    border-left: 1px solid #ddd;
-    background: #efefef;
-    margin: 0;
-}
-
-#changelist-filter h2 {
-    font-size: 11px;
-    padding: 2px 5px;
-    border-bottom: 1px solid #ddd;
-}
-
-#changelist-filter h3 {
-    font-size: 12px;
-    margin-bottom: 0;
-}
-
-#changelist-filter ul {
-    padding-left: 0;
-    margin-left: 10px;
-}
-
-#changelist-filter li {
-    list-style-type: none;
-    margin-left: 0;
-    padding-left: 0;
-}
-
-#changelist-filter a {
-    color: #999;
-}
-
-#changelist-filter a:hover {
-    color: #036;
-}
-
-#changelist-filter li.selected {
-    border-left: 5px solid #ccc;
-    padding-left: 5px;
-    margin-left: -10px;
-}
-
-#changelist-filter li.selected a {
-    color: #5b80b2 !important;
-}
-
-/* DATE DRILLDOWN */
-
-.change-list ul.toplinks {
-    display: block;
-    background: white url(../img/nav-bg-reverse.gif) 0 -10px repeat-x;
-    border-top: 1px solid white;
-    float: left;
-    padding: 0 !important;
-    margin: 0 !important;
-    width: 100%;
-}
-
-.change-list ul.toplinks li {
-    padding: 3px 6px;
-    font-weight: bold;
-    list-style-type: none;
-    display: inline-block;
-}
-
-.change-list ul.toplinks .date-back a {
-    color: #999;
-}
-
-.change-list ul.toplinks .date-back a:hover {
-    color: #036;
-}
-
-/* PAGINATOR */
-
-.paginator {
-    font-size: 11px;
-    padding-top: 10px;
-    padding-bottom: 10px;
-    line-height: 22px;
-    margin: 0;
-    border-top: 1px solid #ddd;
-}
-
-.paginator a:link, .paginator a:visited {
-    padding: 2px 6px;
-    border: solid 1px #ccc;
-    background: white;
-    text-decoration: none;
-}
-
-.paginator a.showall {
-    padding: 0 !important;
-    border: none !important;
-}
-
-.paginator a.showall:hover {
-    color: #036 !important;
-    background: transparent !important;
-}
-
-.paginator .end {
-    border-width: 2px !important;
-    margin-right: 6px;
-}
-
-.paginator .this-page {
-    padding: 2px 6px;
-    font-weight: bold;
-    font-size: 13px;
-    vertical-align: top;
-}
-
-.paginator a:hover {
-    color: white;
-    background: #5b80b2;
-    border-color: #036;
-}
-
-/* ACTIONS */
-
-.filtered .actions {
-    margin-right: 160px !important;
-    border-right: 1px solid #ddd;
-}
-
-#changelist table input {
-    margin: 0;
-}
-
-#changelist table tbody tr.selected {
-    background-color: #FFFFCC;
-}
-
-#changelist .actions {
-    color: #999;
-    padding: 3px;
-    border-top: 1px solid #fff;
-    border-bottom: 1px solid #ddd;
-    background: white url(../img/nav-bg-reverse.gif) 0 -10px repeat-x;
-}
-
-#changelist .actions.selected {
-    background: #fffccf;
-    border-top: 1px solid #fffee8;
-    border-bottom: 1px solid #edecd6;
-}
-
-#changelist .actions span.all,
-#changelist .actions span.action-counter,
-#changelist .actions span.clear,
-#changelist .actions span.question {
-    font-size: 11px;
-    margin: 0 0.5em;
-    display: none;
-}
-
-#changelist .actions:last-child {
-    border-bottom: none;
-}
-
-#changelist .actions select {
-    border: 1px solid #aaa;
-    margin-left: 0.5em;
-    padding: 1px 2px;
-}
-
-#changelist .actions label {
-    font-size: 11px;
-    margin-left: 0.5em;
-}
-
-#changelist #action-toggle {
-    display: none;
-}
-
-#changelist .actions .button {
-    font-size: 11px;
-    padding: 1px 2px;
-}
diff --git a/paf0/media/css/edit_info.css b/paf0/media/css/edit_info.css
deleted file mode 100644 (file)
index 3f195d2..0000000
+++ /dev/null
@@ -1,102 +0,0 @@
-div.form-row {
-    border-bottom: 1px solid rgba(0,0,0,0.1);
-}
-div.form-row label {
-    display: inline-block;
-    width: 170px;
-    
-}
-tr.empty-form {
-    display: none;
-}
-
-/* MESSAGES & ERRORS */
-
-ul.messagelist {
-    padding: 0 0 5px 0;
-    margin: 0;
-}
-
-ul.messagelist li {
-    font-size: 12px;
-    display: block;
-    padding: 4px 5px 4px 25px;
-    margin: 0 0 3px 0;
-    border-bottom: 1px solid #ddd;
-    color: #666;
-    background: #ffc url(../img/icon_success.gif) 5px .3em no-repeat;
-}
-
-ul.messagelist li.warning{
-    background-image: url(../img/icon_alert.gif);
-}
-
-ul.messagelist li.error{
-    background-image: url(../img/icon_error.gif);
-}
-
-.errornote {
-    font-size: 12px !important;
-    display: block;
-    padding: 4px 5px 4px 25px;
-    margin: 0 0 3px 0;
-    border: 1px solid red;
-    color: red;
-    background: #ffc url(../img/icon_error.gif) 5px .3em no-repeat;
-}
-
-ul.errorlist {
-    margin: 0 !important;
-    padding: 0 !important;
-}
-
-.errorlist li {
-    font-size: 12px !important;
-    display: block;
-    padding: 4px 5px 4px 25px;
-    margin: 0 0 3px 0;
-    border: 1px solid red;
-    color: white;
-    background: red url(../img/icon_alert.gif) 5px .3em no-repeat;
-}
-
-.errorlist li a {
-       color: white;
-    text-decoration: underline;
-}
-
-td ul.errorlist {
-    margin: 0 !important;
-    padding: 0 !important;
-}
-
-td ul.errorlist li {
-    margin: 0 !important;
-}
-
-.errors {
-    background: #ffc;
-}
-
-.errors input, .errors select, .errors textarea {
-    border: 1px solid red;
-}
-
-div.system-message {
-    background: #ffc;
-    margin: 10px;
-    padding: 6px 8px;
-    font-size: .8em;
-}
-
-div.system-message p.system-message-title {
-    padding: 4px 5px 4px 25px;
-    margin: 0;
-    color: red;
-    background: #ffc url(../img/icon_error.gif) 5px .3em no-repeat;
-}
-
-.description {
-    font-size: 12px;
-    padding: 5px 0 0 12px;
-}
diff --git a/paf0/media/css/forms.css b/paf0/media/css/forms.css
deleted file mode 100644 (file)
index 0ecfca7..0000000
+++ /dev/null
@@ -1,358 +0,0 @@
-@import url('widgets.css');
-
-/* FORM ROWS */
-
-.form-row {
-    overflow: hidden;
-    padding: 8px 12px;
-    font-size: 11px;
-    border-bottom: 1px solid #eee;
-}
-
-.form-row img, .form-row input {
-    vertical-align: middle;
-}
-
-form .form-row p {
-    padding-left: 0;
-    font-size: 11px;
-}
-
-/* FORM LABELS */
-
-form h4 {
-    margin: 0 !important;
-    padding: 0 !important;
-    border: none !important;
-}
-
-label {
-    font-weight: normal !important;
-    color: #666;
-    font-size: 12px;
-}
-
-.required label, label.required {
-    font-weight: bold !important;
-    color: #333 !important;
-}
-
-/* RADIO BUTTONS */
-
-form ul.radiolist li {
-    list-style-type: none;
-}
-
-form ul.radiolist label {
-    float: none;
-    display: inline;
-}
-
-form ul.inline {
-    margin-left: 0;
-    padding: 0;
-}
-
-form ul.inline li {
-    float: left;
-    padding-right: 7px;
-}
-
-/* ALIGNED FIELDSETS */
-
-.aligned label {
-    display: block;
-    padding: 3px 10px 0 0;
-    float: left;
-    width: 8em;
-}
-
-.aligned ul label {
-    display: inline;
-    float: none;
-    width: auto;
-}
-
-.colMS .aligned .vLargeTextField, .colMS .aligned .vXMLLargeTextField {
-    width: 350px;
-}
-
-form .aligned p, form .aligned ul {
-    margin-left: 7em;
-    padding-left: 30px;
-}
-
-form .aligned table p {
-    margin-left: 0;
-    padding-left: 0;
-}
-
-form .aligned p.help {
-    padding-left: 38px;
-}
-
-.aligned .vCheckboxLabel {
-    float: none !important;
-    display: inline;
-    padding-left: 4px;
-}
-
-.colM .aligned .vLargeTextField, .colM .aligned .vXMLLargeTextField {
-    width: 610px;
-}
-
-.checkbox-row p.help {
-    margin-left: 0;
-    padding-left: 0 !important;
-}
-
-fieldset .field-box {
-    float: left;
-    margin-right: 20px;
-}
-
-/* WIDE FIELDSETS */
-
-.wide label {
-    width: 15em !important;
-}
-
-form .wide p {
-    margin-left: 15em;
-}
-
-form .wide p.help {
-    padding-left: 38px;
-}
-
-.colM fieldset.wide .vLargeTextField, .colM fieldset.wide .vXMLLargeTextField {
-    width: 450px;
-}
-
-/* COLLAPSED FIELDSETS */
-
-fieldset.collapsed * {
-    display: none;
-}
-
-fieldset.collapsed h2, fieldset.collapsed {
-    display: block !important;
-}
-
-fieldset.collapsed h2 {
-    background-image: url(../img/nav-bg.gif);
-    background-position: bottom left;
-    color: #999;
-}
-
-fieldset.collapsed .collapse-toggle {
-    background: transparent;
-    display: inline !important;
-}
-
-/* MONOSPACE TEXTAREAS */
-
-fieldset.monospace textarea {
-    font-family: "Bitstream Vera Sans Mono",Monaco,"Courier New",Courier,monospace;
-}
-
-/* SUBMIT ROW */
-
-.submit-row {
-    padding: 5px 7px;
-    text-align: right;
-    background: white url(../img/nav-bg.gif) 0 100% repeat-x;
-    border: 1px solid #ccc;
-    margin: 5px 0;
-    overflow: hidden;
-}
-
-body.popup .submit-row {
-    overflow: auto;
-}
-
-.submit-row input {
-    margin: 0 0 0 5px;
-}
-
-.submit-row p {
-    margin: 0.3em;
-}
-
-.submit-row p.deletelink-box {
-    float: left;
-}
-
-.submit-row .deletelink {
-    background: url(../img/icon_deletelink.gif) 0 50% no-repeat;
-    padding-left: 14px;
-}
-
-/* CUSTOM FORM FIELDS */
-
-.vSelectMultipleField {
-    vertical-align: top !important;
-}
-
-.vCheckboxField {
-    border: none;
-}
-
-.vDateField, .vTimeField {
-    margin-right: 2px;
-}
-
-.vURLField {
-    width: 30em;
-}
-
-.vLargeTextField, .vXMLLargeTextField {
-    width: 48em;
-}
-
-.flatpages-flatpage #id_content {
-    height: 40.2em;
-}
-
-.module table .vPositiveSmallIntegerField {
-    width: 2.2em;
-}
-
-.vTextField {
-    width: 20em;
-}
-
-.vIntegerField {
-    width: 5em;
-}
-
-.vForeignKeyRawIdAdminField {
-    width: 5em;
-}
-
-/* INLINES */
-
-.inline-group {
-    padding: 0;
-    border: 1px solid #ccc;
-    margin: 10px 0;
-}
-
-.inline-group .aligned label {
-    width: 8em;
-}
-
-.inline-related {
-    position: relative;
-}
-
-.inline-related h3 {
-    margin: 0;
-    color: #666;
-    padding: 3px 5px;
-    font-size: 11px;
-    background: #e1e1e1 url(../img/nav-bg.gif) top left repeat-x;
-    border-bottom: 1px solid #ddd;
-}
-
-.inline-related h3 span.delete {
-    float: right;
-}
-
-.inline-related h3 span.delete label {
-    margin-left: 2px;
-    font-size: 11px;
-}
-
-.inline-related fieldset {
-    margin: 0;
-    background: #fff;
-    border: none;
-}
-
-.inline-related fieldset.module h3 {
-    margin: 0;
-    padding: 2px 5px 3px 5px;
-    font-size: 11px;
-    text-align: left;
-    font-weight: bold;
-    background: #bcd;
-    color: #fff;
-}
-
-.inline-group .tabular fieldset.module {
-    border: none;
-    border-bottom: 1px solid #ddd;
-}
-
-.inline-related.tabular fieldset.module table {
-    width: 100%;
-}
-
-.last-related fieldset {
-    border: none;
-}
-
-.inline-group .tabular tr.has_original td {
-    padding-top: 2em;
-}
-
-.inline-group .tabular tr td.original {
-    padding: 2px 0 0 0;
-    width: 0;
-    _position: relative;
-}
-
-.inline-group .tabular th.original {
-    width: 0px;
-    padding: 0;
-}
-
-.inline-group .tabular td.original p {
-    position: absolute;
-    left: 0;
-    height: 1.1em;
-    padding: 2px 7px;
-    overflow: hidden;
-    font-size: 9px;
-    font-weight: bold;
-    color: #666;
-    _width: 700px;
-}
-
-.inline-group ul.tools {
-    padding: 0;
-    margin: 0;
-    list-style: none;
-}
-
-.inline-group ul.tools li {
-    display: inline;
-    padding: 0 5px;
-}
-
-.inline-group div.add-row,
-.inline-group .tabular tr.add-row td {
-    color: #666;
-    padding: 3px 5px;
-    border-bottom: 1px solid #ddd;
-    background: #e1e1e1 url(../img/nav-bg.gif) top left repeat-x;
-}
-
-.inline-group .tabular tr.add-row td {
-    padding: 4px 5px 3px;
-    border-bottom: none;
-}
-
-.inline-group ul.tools a.add,
-.inline-group div.add-row a,
-.inline-group .tabular tr.add-row td a {
-    background: url(../img/icon_addlink.gif) 0 50% no-repeat;
-    padding-left: 14px;
-    font-size: 11px;
-    outline: 0; /* Remove dotted border around link */
-}
-
-.empty-form {
-    display: none;
-}
diff --git a/paf0/media/css/mystyle.css b/paf0/media/css/mystyle.css
new file mode 100755 (executable)
index 0000000..7e3162c
--- /dev/null
@@ -0,0 +1,61 @@
+/* elements */
+#banner {
+  float:left;
+  width:70%;
+  padding: 5px;
+}
+#banner img {
+  float:left;
+  margin-right:2%;
+  /*border:1px solid #BBD8EC;*/
+}
+#banner h1 {
+  margin:0;
+  padding:0;
+  font:normal 220% "trebuchet ms", verdana, arial, helvetica, sans-serif;
+  color: aqua;
+}
+#banner h1 a, h1 a:visited {
+  background:inherit;
+  color:#5f5f5f;
+  text-decoration:none;
+}
+#banner h1 a:hover {
+  background:inherit;
+  color:#d15517;
+  text-decoration:none;
+}
+#banner h2 {
+  margin:0;
+  padding:0;
+}
+
+#chapeau {
+    display: block;
+    clear: both;
+    font-style: italic;
+    border: #DEDEDE 1px solid;
+    padding: 8px 4px;
+    margin: 10px;
+}
+
+#user-actions {
+    float: right;
+    padding: 5px;
+}
+
+#user-actions .username {
+    color: #D15517;
+}
+
+#user-actions li {
+    list-style-type: none;
+    text-align: right;
+    font-size: 1em;
+    line-height: 1.6em;
+}
+
+#user-actions a {
+    text-decoration: none;
+}
+
diff --git a/paf0/media/css/style.css b/paf0/media/css/style.css
deleted file mode 100644 (file)
index 9a64ed9..0000000
+++ /dev/null
@@ -1,591 +0,0 @@
-/* elements */
-body {
-  margin:0;
-  padding:0;
-  background:#fff;
-  color:#454545;
-  font:0.8em verdana, arial, helvetica, sans-serif;
-}
-
-h2 {
-  margin:0px;
-  padding:0;
-  background:inherit;
-  color:#d15517;
-  font:normal 190% "trebuchet ms", verdana, arial, helvetica, sans-serif;
-}
-h3 {
-  margin:10px 0 0 10px;
-  padding:0;
-  background:inherit;
-  color:#5f5f5f;
-  font:normal 170% "trebuchet ms", verdana, arial, helvetica, sans-serif;
-}
-h4 {
-  margin:10px 0 0 10px;
-  padding:0;
-  background:inherit;
-  color:#5f5f5f;
-  font:normal 150% "trebuchet ms", verdana, arial, helvetica, sans-serif;
-}
-h5 {
-  margin:10px 0 0 10px;
-  padding:0;
-  background:inherit;
-  color:#5f5f5f;
-  font:normal 130% "trebuchet ms", verdana, arial, helvetica, sans-serif;
-}
-
-p.error {
-  color: red;
-}
-ul.errorlist {
-  color: red;
-  list-style-type:none;
-  margin: 0px;
-  padding: 0px;
-  font-size: 11px;
-}
-
-a:link, a:visited {
-  background:inherit;
-  color:#0643bb;
-  text-decoration:none;
-}
-a:active {
-  background:inherit;
-  color:#990000;
-  text-decoration:none;
-}
-a:hover {
-  background:inherit;
-  color:#d15517;
-  text-decoration:none;
-}
-
-a img {
-  border:none;
-}
-
-form {
-  margin:8px 17px 0 0;
-  padding:0px;
-}
-table {
-  margin:10px;
-  border-collapse:collapse;
-  padding:5px;
-}
-th {
-  height:28px;
-  border-top:2px solid #d0e8f8;
-  padding:0 10px;
-  background-color:#e7f1f8;
-  font-size:14px;
-  text-align:left;
-}
-table.lined th, table.lined td{
-  font-size: 14px;
-  border-top:1px solid #d0e8f8;
-  border-left:1px solid #d0e8f8;
-  padding: 5px;
-}
-table.lined {
-  border-bottom:1px solid #d0e8f8;
-  border-right:1px solid #d0e8f8;
-}
-table.lined td.spacer {
-  height: 5px;
-}
-th.nombre, td.nombre {
-  padding-right:0px;
-  text-align:right;
-}
-
-.row1, table.sortable .even {}
-.row2, table.sortable .odd, table.lined .line_1 {
-  background-color:#EFEFEF;
-}
-
-td {
-  vertical-align: top;
-}
-
-fieldset {border: 1px solid #EEEEEE; margin: 1em;}
-label {font-weight: bold;}
-.form-row {margin: 1em 0px;}
-
-/* id */
-.coldroite h3 {margin-left: 0;}
-.coldroite {font-size: 80%; width: 20%;}
-.coldroite {float: right; padding:2%; border-left: 1px solid #EEEEEE;}
-.coldroite ul, li {margin: 0; padding: 0;}
-.coldroite li {margin: 4px 0px; list-style-type: none;}
-.coldroite a {color: grey; text-decoration: none;}
-.coldroite li:hover, .coldroite a:hover, .coldroite a.selectionne {color: #D15517;}
-.filtre {margin-bottom: 2em;}
-
-#loadingbox {
-  display:none;
-  position:absolute;
-  width:100%;
-}
-#loading {
-  width:200px;
-  margin:auto;
-  background:#f5e86e;
-  text-align:center;
-}
-
-#wrapper {
-  float:left;
-  width:100%;
-  margin:0 auto 0 auto;
-  padding:0;
-}
-
-#header {
-  float:left;
-  width:96%;
-  padding:2%;
-  background:#f8fbfd;
-  color:#5f5f5f;
-  border-bottom: 1px dotted  #bbd8ec;
-}
-#banner {
-  float:left;
-  width:80%;
-}
-#banner img {
-  float:left;
-  margin-right:2%;
-  /*border:1px solid #BBD8EC;*/
-}
-#banner h1 {
-  margin:0;
-  padding:0;
-  font:normal 220% "trebuchet ms", verdana, arial, helvetica, sans-serif;
-}
-#banner h1 a, h1 a:visited {
-  background:inherit;
-  color:#5f5f5f;
-  text-decoration:none;
-}
-#banner h1 a:hover {
-  background:inherit;
-  color:#d15517;
-  text-decoration:none;
-}
-#banner h2 {
-  margin:0;
-  padding:0;
-}
-
-#chapeau {
-    display: block;
-    clear: both;
-    font-style: italic;
-    border: #DEDEDE 1px solid;
-    padding: 8px 4px;
-    margin: 10px;
-}
-
-#user-actions {
-    float: right;
-}
-
-#user-actions .username {
-    color: #D15517;
-}
-
-#user-actions li {
-    list-style-type: none;
-    text-align: right;
-    font-size: 1em;
-    line-height: 1.6em;
-}
-
-#user-actions a {
-    text-decoration: none;
-}
-
-#menu {
-  float:left;
-  width:20%;
-  text-align:right;
-  font:bold 120% "trebuchet ms", verdana, arial, helvetica, sans-serif;
-}
-#menu ul {
-  list-style-type:none;
-}
-#menu li {
-  list-style-type:none;
-}
-#menu a {
-  text-decoration:none;
-}
-#topmenu {
-  float:left;
-  width:100%;
-  border-bottom:1px dotted  #bbd8ec;
-  background:#e7f1f8 url(/static/images/menubck.png);
-  color:#000;
-  text-align:left;
-
-}
-
-#topmenu ul {
-  margin:0 0 0 14px;
-  padding:0;
-  list-style: none;
-}
-#topmenu ul li {
-  display: block;
-  position: relative;
-  float: left;
-}
-#topmenu li ul { display: none; }
-#topmenu ul li:first-child a {border-left:1px dotted #bbd8ec;}
-#topmenu ul li a {
-  font:bold 130% "trebuchet ms", verdana, arial, helvetica, sans-serif;
-  display: block;
-  text-decoration: none;
-  white-space: nowrap;
-  border-right:1px dotted #bbd8ec;
-  padding:8px 20px 8px 20px;
-
-  background:#e7f1f8 url(/static/images/menubck.png);
-
-  color:#5f5f5f;
-  text-align:center;
-  text-decoration:none;
-
-}
-#topmenu ul li.actif a, #topmenu ul li a:hover { color:#d15517; }
-#topmenu li:hover ul {
-  display: block;
-  position: absolute;
-}
-#topmenu li:hover li {
-  float: none;
-  font-size: 11px;
-}
-#topmenu li:hover a {color:#5f5f5f;}
-#topmenu li:hover li a:hover {color:#d15517;}
-
-#topmenu li:hover li:first-child a {border-top: 1px dotted #bbd8ec;}
-#topmenu li:hover li:last-child a {border-bottom: 1px dotted #bbd8ec;}
-
-
-#main {
-  float:left;
-  padding:2%;
-  padding-bottom: 0px;
-  min-height:300px;
-  width: 70%;
-}
-#main p {
-  margin:0;
-  padding:4px 10px 0 17px;
-  line-height:1.4em;
-  text-align: justify;
-}
-#main .gauche {
-  float:left;
-  width:50%;
-}
-#main .droite {
-  float:left;
-  width:50%;
-}
-#main .clear {
-  clear:both;
-}
-#projet .gauche {
-  float:left;
-  width:80%;
-}
-#projet .droite {
-  float:left;
-  width:20%;
-}
-
-#footer {
-
-  clear:both;
-  float:left;
-  width:100%;
-  margin:20px 0 0 0;
-  border-top: 1px dotted #bbd8ec;
-  border-bottom: 1px dotted #bbd8ec;
-  padding: 10px 0 6px 0;
-
-  background: #e7f1f8 url(/static/images/menubck.png);
-  color:#404040;
-  text-align:center;
-
-}
-#footer p {
-  margin:0;
-  padding:0 0 3px 0;
-  font:normal 100% "trebuchet ms", verdana, arial, helvetica, sans-serif;
-}
-
-#username, #password {
-  margin:5px;
-  border:1px solid #CCC;
-  padding:2px;
-  background:#FAFAFA;
-  font-weight:bold;
-}
-
-#recherche {
-  margin:auto;
-  margin:5px;
-  text-align:center;
-}
-#recherche input {
-  margin:5px;
-  border:1px solid #CCC;
-  padding-left:25px;
-  background:#FAFAFA url(/static/images/zoom.png) no-repeat;
-  background-position:3px 3px;
-  font-size:16px;
-  font-weight:bold;
-  text-align:left;
-}
-
-#brdcrmb {
-  float:left;
-  width:98%;
-  margin:20px 0 50px 16px;
-  padding:0;
-  background:inherit;
-  color:#4d4d4d;
-  font:normal 100%  verdana, arial, helvetica, sans-serif;
-}
-#brdcrmb a, #brdcrmb a:visited {
-  background:inherit;
-  color:#0643bb;
-  text-decoration:underline;
-}
-#brdcrmb a:hover, .bxtitle a:hover {
-  background:inherit;
-  color:#d15517;
-  text-decoration:none;
-}
-
-/* class */
-.img {
-  float:left;
-  margin:4px 6px 3px 4px;
-  padding:2px;
-}
-.subtitle {
-  margin:12px 0 0 17px;
-  padding:0;
-  background:inherit;
-  color:#5f5f5f;
-  font:normal 1.4em verdana, arial, helvetica, sans-serif;
-}
-.red {
-  background: inherit;
-  color: #d15517;
-}
-.search {
-  margin:0;
-  border:1px dotted #e1e1e1;
-  padding:2px;
-  background:#fcfcfc;
-  color:#7d7d7d;
-}
-.button {
-  cursor:pointer;
-  border:solid 1px #e1e1e1;
-  background: #e7f1f8 url(/static/images/srcbck.png);
-  color: #5f5f5f;
-  font:bold 120% "trebuchet ms",verdana, arial, helvetica, sans-serif;
-}
-
-.pagebox {
-  float:left;
-  width:100%;
-  margin:30px 0 0 0;
-  padding:8px 0 8px 0;
-  background:inherit;
-  color:#fff;
-  text-align:right;
-}
-.pagebox a, .buttonbox a {
-  margin:0 2px 0 0;
-  border:1px dotted #bbd8ec;
-  padding:4px 8px 4px 8px;
-  background: #e7f1f8  url(/static/images/srcbck.png);
-  color:#5f5f5f;
-
-  font:bold 120% "trebuchet ms", verdana, arial, helvetica, sans-serif;
-  text-decoration:none;
-
-}
-.pagebox a:hover, .buttonbox a:hover {
-  background: #fff;
-  color:#d15517;
-  text-decoration:none;
-}
-
-.menubox {
-  float:left;
-  width:100%;
-  margin: 30px 0 40px 0;
-  padding:6px 0 6px 0;
-}
-.menu1 {
-  display:inline;
-  float:left;
-  width:31%;
-  margin-left:1.7%;
-  padding:2px 0 6px 0;
-  background:#e7f1f8 url(/static/images/mnubck.png);
-  color: #454545;
-}
-.menu2, .menu3 {
-  float:left;
-  width:31%;
-  margin-left:1.6%;
-  padding:2px 0 6px 0;
-  background:#e7f1f8  url(/static/images/mnubck.png);
-  color: #454545;
-}
-.menu1 p, .menu2 p, .menu3 p {
-  margin:0;
-  padding:0 6px 0 6px;
-  font:normal 90% verdana, arial, helvetica, sans-serif;
-}
-
-.bxtitle {
-  margin:0 0 0 6px;
-  padding: 2px 0 0 0;
-  background:inherit;
-  color:#454545;
-  font:normal 140% "trebuchet ms", verdana, arial, helvetica, sans-serif;
-}
-.liste td {
-  padding:5px;
-  border-top:1px solid #d0e8f8;
-}
-.pair td {
-  background-color:#e7f1f8}
-
-.groupWrapper {
-  float:left;
-  width:100%;
-  min-height:400px;
-  margin:auto;
-}
-.groupWrapper p {
-  height:1px;
-  margin:0;
-  padding:0;
-  overflow:hidden;
-}
-.groupItem {
-  margin-bottom:20px;
-}
-.groupItem .itemHeader {
-  cursor:move;
-  position:relative;
-  height:28px;
-  border-top:2px solid #d0e8f8;
-  padding:0 10px;
-  background-color:#e7f1f8;
-
-  color:#000;
-  font-weight:bold;
-  font-size:16px;
-  line-height:28px;
-
-}
-.groupItem .itemHeader a {
-  position:absolute;
-  top:0px;
-  right:10px;
-  font-weight:normal;
-  font-size:11px;
-  text-decoration:none;
-}
-
-.sortHelper {
-  width:auto !important;
-  border:3px dashed #666;
-}
-.itemContent {
-  padding:10px;
-}
-
-.verticaltext{
-  -moz-transform: rotate(90deg);
-}
-
-.participants li {
-  list-style-type:none;
-}
-.participants li>img {
-  float:left;
-  margin-right:8px;
-  border:1px solid #999}
-
-.iconeSQI {
-  width:16px;
-  padding:0px 2px;
-}
-.commentSQI {
-   width:100%;
-  margin-right:5px;
-  text-align:right;
-  font-size:8px;
-}
-.descriptionSQI {
-  width:45%;
-  padding:10px;
-}
-
-#main p.information {
-    font-size: 1.4em;
-    color: #D15517;
-    padding: 4px;
-}
-
-
-.width50 {width:40%;}
-
-a.downloadpdf {
-    background: transparent url(/static/images/pdf.png) no-repeat;
-    height:126px;
-    text-indent:-9999px;
-    height: 32px;
-    width: 32px;
-    display: block;
-    margin-right: 6px;
-    float: right;
-    display: none;
-}
-
-.composante .nom {
-    font-weight: bold;
-}
-
-.composante .resume {
-    font-size:0.9em;
-    font-style:italic;
-}
-
-.liste {border:1px solid #CCCCCC;}
-.liste td {padding: 4px; border: none;} 
-.liste a {text-decoration: none;}
-
-.liste.inline tr {border-bottom:1px solid #CCCCCC;}
-.liste.inline th {border:none;}
-
-.liste ul, .liste li {padding:0; margin: 0; list-style-type: none;}
-.negatif { color:red; }
-
diff --git a/paf0/media/css/style_student_list.css b/paf0/media/css/style_student_list.css
deleted file mode 100644 (file)
index 17bca6c..0000000
+++ /dev/null
@@ -1,69 +0,0 @@
-#header {
-  float:left;
-  width:96%;
-  padding:2%;
-  background:#f8fbfd;
-  color:#5f5f5f;
-  border-bottom: 1px dotted  #bbd8ec;
-}
-#banner {
-  float:left;
-  width:80%;
-}
-#banner img {
-  float:left;
-  margin-right:2%;
-  /*border:1px solid #BBD8EC;*/
-}
-#banner h1 {
-  margin:0;
-  padding:0;
-  font:normal 220% "trebuchet ms", verdana, arial, helvetica, sans-serif;
-}
-#banner h1 a, h1 a:visited {
-  background:inherit;
-  color:#5f5f5f;
-  text-decoration:none;
-}
-#banner h1 a:hover {
-  background:inherit;
-  color:#d15517;
-  text-decoration:none;
-}
-#banner h2 {
-  margin:0;
-  padding:0;
-}
-
-#chapeau {
-    display: block;
-    clear: both;
-    font-style: italic;
-    border: #DEDEDE 1px solid;
-    padding: 8px 4px;
-    margin: 10px;
-}
-
-#user-actions {
-    float: right;
-}
-
-#user-actions .username {
-    color: #D15517;
-}
-
-#user-actions .link a {
-    color: blue !important;
-}
-
-#user-actions li {
-    list-style-type: none;
-    text-align: right;
-    font-size: 1em;
-    line-height: 1.6em;
-}
-
-#user-actions a {
-    text-decoration: none;
-}
-
diff --git a/paf0/media/css/widgets.css b/paf0/media/css/widgets.css
deleted file mode 100644 (file)
index 2989f2f..0000000
+++ /dev/null
@@ -1,562 +0,0 @@
-/* SELECTOR (FILTER INTERFACE) */
-
-.selector {
-    width: 580px;
-    float: left;
-}
-
-.selector select {
-    width: 270px;
-    height: 17.2em;
-}
-
-.selector-available, .selector-chosen {
-    float: left;
-    width: 270px;
-    text-align: center;
-    margin-bottom: 5px;
-}
-
-.selector-chosen select {
-    border-top: none;
-}
-
-.selector-available h2, .selector-chosen h2 {
-    border: 1px solid #ccc;
-}
-
-.selector .selector-available h2 {
-    background: white url(../img/nav-bg.gif) bottom left repeat-x;
-    color: #666;
-}
-
-.selector .selector-filter {
-    background: white;
-    border: 1px solid #ccc;
-    border-width: 0 1px;
-    padding: 3px;
-    color: #999;
-    font-size: 10px;
-    margin: 0;
-    text-align: left;
-}
-
-.selector .selector-filter label {
-    width: 16px;
-    padding: 2px;
-}
-
-.selector .selector-available input {
-    width: 230px;
-}
-
-.selector ul.selector-chooser {
-    float: left;
-    width: 22px;
-    height: 50px;
-    background: url(../img/chooser-bg.gif) top center no-repeat;
-    margin: 10em 5px 0 5px;
-    padding: 0;
-}
-
-.selector-chooser li {
-    margin: 0;
-    padding: 3px;
-    list-style-type: none;
-}
-
-.selector select {
-    margin-bottom: 10px;
-    margin-top: 0;
-}
-
-.selector-add, .selector-remove {
-    width: 16px;
-    height: 16px;
-    display: block;
-    text-indent: -3000px;
-    overflow: hidden;
-}
-
-.selector-add {
-    background: url(../img/selector-icons.gif) 0 -161px no-repeat;
-    cursor: default;
-    margin-bottom: 2px;
-}
-
-.active.selector-add {
-    background: url(../img/selector-icons.gif) 0 -187px no-repeat;
-    cursor: pointer;
-}
-
-.selector-remove {
-    background: url(../img/selector-icons.gif) 0 -109px no-repeat;
-    cursor: default;
-}
-
-.active.selector-remove {
-    background: url(../img/selector-icons.gif) 0 -135px no-repeat;
-    cursor: pointer;
-}
-
-a.selector-chooseall, a.selector-clearall {
-    display: inline-block;
-    text-align: left;
-    margin-left: auto;
-    margin-right: auto;
-    font-weight: bold;
-    color: #666;
-}
-
-a.selector-chooseall {
-    padding: 3px 18px 3px 0;
-}
-
-a.selector-clearall {
-    padding: 3px 0 3px 18px;
-}
-
-a.active.selector-chooseall:hover, a.active.selector-clearall:hover {
-    color: #036;
-}
-
-a.selector-chooseall {
-    background: url(../img/selector-icons.gif) right -263px no-repeat;
-    cursor: default;
-}
-
-a.active.selector-chooseall {
-    background: url(../img/selector-icons.gif) right -289px no-repeat;
-    cursor: pointer;
-}
-
-a.selector-clearall {
-    background: url(../img/selector-icons.gif) left -211px no-repeat;
-    cursor: default;
-}
-
-a.active.selector-clearall {
-    background: url(../img/selector-icons.gif) left -237px no-repeat;
-    cursor: pointer;
-}
-
-/* STACKED SELECTORS */
-
-.stacked {
-    float: left;
-    width: 500px;
-}
-
-.stacked select {
-    width: 480px;
-    height: 10.1em;
-}
-
-.stacked .selector-available, .stacked .selector-chosen {
-    width: 480px;
-}
-
-.stacked .selector-available {
-    margin-bottom: 0;
-}
-
-.stacked .selector-available input {
-    width: 442px;
-}
-
-.stacked ul.selector-chooser {
-    height: 22px;
-    width: 50px;
-    margin: 0 0 3px 40%;
-    background: url(../img/chooser_stacked-bg.gif) top center no-repeat;
-}
-
-.stacked .selector-chooser li {
-    float: left;
-    padding: 3px 3px 3px 5px;
-}
-
-.stacked .selector-chooseall, .stacked .selector-clearall {
-    display: none;
-}
-
-.stacked .selector-add {
-    background: url(../img/selector-icons.gif) 0 -57px no-repeat;
-    cursor: default;
-}
-
-.stacked .active.selector-add {
-    background: url(../img/selector-icons.gif) 0 -83px no-repeat;
-    cursor: pointer;
-}
-
-.stacked .selector-remove {
-    background: url(../img/selector-icons.gif) 0 -5px no-repeat;
-    cursor: default;
-}
-
-.stacked .active.selector-remove {
-    background: url(../img/selector-icons.gif) 0 -31px no-repeat;
-    cursor: pointer;
-}
-
-/* DATE AND TIME */
-
-p.datetime {
-    line-height: 20px;
-    margin: 0;
-    padding: 0;
-    color: #666;
-    font-size: 11px;
-    font-weight: bold;
-}
-
-.datetime span {
-    font-size: 11px;
-    color: #ccc;
-    font-weight: normal;
-    white-space: nowrap;
-}
-
-table p.datetime {
-    font-size: 10px;
-    margin-left: 0;
-    padding-left: 0;
-}
-
-/* FILE UPLOADS */
-
-p.file-upload {
-    line-height: 20px;
-    margin: 0;
-    padding: 0;
-    color: #666;
-    font-size: 11px;
-    font-weight: bold;
-}
-
-.file-upload a {
-    font-weight: normal;
-}
-
-.file-upload .deletelink {
-    margin-left: 5px;
-}
-
-span.clearable-file-input label {
-    color: #333;
-    font-size: 11px;
-    display: inline;
-    float: none;
-}
-
-/* CALENDARS & CLOCKS */
-
-.calendarbox, .clockbox {
-    margin: 5px auto;
-    font-size: 11px;
-    width: 16em;
-    text-align: center;
-    background: white;
-    position: relative;
-}
-
-.clockbox {
-    width: auto;
-}
-
-.calendar {
-    margin: 0;
-    padding: 0;
-}
-
-.calendar table {
-    margin: 0;
-    padding: 0;
-    border-collapse: collapse;
-    background: white;
-    width: 100%;
-}
-
-.calendar caption, .calendarbox h2 {
-    margin: 0;
-    font-size: 11px;
-    text-align: center;
-    border-top: none;
-}
-
-.calendar th {
-    font-size: 10px;
-    color: #666;
-    padding: 2px 3px;
-    text-align: center;
-    background: #e1e1e1 url(../img/nav-bg.gif) 0 50% repeat-x;
-    border-bottom: 1px solid #ddd;
-}
-
-.calendar td {
-    font-size: 11px;
-    text-align: center;
-    padding: 0;
-    border-top: 1px solid #eee;
-    border-bottom: none;
-}
-
-.calendar td.selected a {
-    background: #C9DBED;
-}
-
-.calendar td.nonday {
-    background: #efefef;
-}
-
-.calendar td.today a {
-    background: #ffc;
-}
-
-.calendar td a, .timelist a {
-    display: block;
-    font-weight: bold;
-    padding: 4px;
-    text-decoration: none;
-    color: #444;
-}
-
-.calendar td a:hover, .timelist a:hover {
-    background: #5b80b2;
-    color: white;
-}
-
-.calendar td a:active, .timelist a:active {
-    background: #036;
-    color: white;
-}
-
-.calendarnav {
-    font-size: 10px;
-    text-align: center;
-    color: #ccc;
-    margin: 0;
-    padding: 1px 3px;
-}
-
-.calendarnav a:link, #calendarnav a:visited, #calendarnav a:hover {
-    color: #999;
-}
-
-.calendar-shortcuts {
-    background: white;
-    font-size: 10px;
-    line-height: 11px;
-    border-top: 1px solid #eee;
-    padding: 3px 0 4px;
-    color: #ccc;
-}
-
-.calendarbox .calendarnav-previous, .calendarbox .calendarnav-next {
-    display: block;
-    position: absolute;
-    font-weight: bold;
-    font-size: 12px;
-    background: #C9DBED url(../img/default-bg.gif) bottom left repeat-x;
-    padding: 1px 4px 2px 4px;
-    color: white;
-}
-
-.calendarnav-previous:hover, .calendarnav-next:hover {
-    background: #036;
-}
-
-.calendarnav-previous {
-    top: 0;
-    left: 0;
-}
-
-.calendarnav-next {
-    top: 0;
-    right: 0;
-}
-
-.calendar-cancel {
-    margin: 0 !important;
-    padding: 0 !important;
-    font-size: 10px;
-    background: #e1e1e1 url(../img/nav-bg.gif) 0 50% repeat-x;
-    border-top: 1px solid #ddd;
-}
-
-.calendar-cancel:hover {
-    background: #e1e1e1 url(../img/nav-bg-reverse.gif) 0 50% repeat-x;
-}
-
-.calendar-cancel a {
-    color: black;
-    display: block;
-}
-
-ul.timelist, .timelist li {
-    list-style-type: none;
-    margin: 0;
-    padding: 0;
-}
-
-.timelist a {
-    padding: 2px;
-}
-
-/* INLINE ORDERER */
-
-ul.orderer {
-    position: relative;
-    padding: 0 !important;
-    margin: 0 !important;
-    list-style-type: none;
-}
-
-ul.orderer li {
-    list-style-type: none;
-    display: block;
-    padding: 0;
-    margin: 0;
-    border: 1px solid #bbb;
-    border-width: 0 1px 1px 0;
-    white-space: nowrap;
-    overflow: hidden;
-    background: #e2e2e2 url(../img/nav-bg-grabber.gif) repeat-y;
-}
-
-ul.orderer li:hover {
-    cursor: move;
-    background-color: #ddd;
-}
-
-ul.orderer li a.selector {
-    margin-left: 12px;
-    overflow: hidden;
-    width: 83%;
-    font-size: 10px !important;
-    padding: 0.6em 0;
-}
-
-ul.orderer li a:link, ul.orderer li a:visited {
-    color: #333;
-}
-
-ul.orderer li .inline-deletelink {
-    position: absolute;
-    right: 4px;
-    margin-top: 0.6em;
-}
-
-ul.orderer li.selected {
-    background-color: #f8f8f8;
-    border-right-color: #f8f8f8;
-}
-
-ul.orderer li.deleted {
-    background: #bbb url(../img/deleted-overlay.gif);
-}
-
-ul.orderer li.deleted a:link, ul.orderer li.deleted a:visited {
-    color: #888;
-}
-
-ul.orderer li.deleted .inline-deletelink {
-    background-image: url(../img/inline-restore.png);
-}
-
-ul.orderer li.deleted:hover, ul.orderer li.deleted a.selector:hover {
-    cursor: default;
-}
-
-/* EDIT INLINE */
-
-.inline-deletelink {
-    float: right;
-    text-indent: -9999px;
-    background: transparent url(../img/inline-delete.png) no-repeat;
-    width: 15px;
-    height: 15px;
-    border: 0px none;
-    outline: 0; /* Remove dotted border around link */
-}
-
-.inline-deletelink:hover {
-    background-position: -15px 0;
-    cursor: pointer;
-}
-
-.editinline button.addlink {
-    border: 0px none;
-    color: #5b80b2;
-    font-size: 100%;
-    cursor: pointer;
-}
-
-.editinline button.addlink:hover {
-    color: #036;
-    cursor: pointer;
-}
-
-.editinline table .help {
-    text-align: right;
-    float: right;
-    padding-left: 2em;
-}
-
-.editinline tfoot .addlink {
-    white-space: nowrap;
-}
-
-.editinline table thead th:last-child {
-    border-left: none;
-}
-
-.editinline tr.deleted {
-    background: #ddd url(../img/deleted-overlay.gif);
-}
-
-.editinline tr.deleted .inline-deletelink {
-    background-image: url(../img/inline-restore.png);
-}
-
-.editinline tr.deleted td:hover {
-    cursor: default;
-}
-
-.editinline tr.deleted td:first-child {
-    background-image: none !important;
-}
-
-/* EDIT INLINE - STACKED */
-
-.editinline-stacked {
-    min-width: 758px;
-}
-
-.editinline-stacked .inline-object {
-    margin-left: 210px;
-    background: white;
-}
-
-.editinline-stacked .inline-source {
-    float: left;
-    width: 200px;
-    background: #f8f8f8;
-}
-
-.editinline-stacked .inline-splitter {
-    float: left;
-    width: 9px;
-    background: #f8f8f8 url(../img/inline-splitter-bg.gif) 50% 50% no-repeat;
-    border-right: 1px solid #ccc;
-}
-
-.editinline-stacked .controls {
-    clear: both;
-    background: #e1e1e1 url(../img/nav-bg.gif) top left repeat-x;
-    padding: 3px 4px;
-    font-size: 11px;
-    border-top: 1px solid #ddd;
-}
-
old mode 100644 (file)
new mode 100755 (executable)
old mode 100644 (file)
new mode 100755 (executable)
old mode 100644 (file)
new mode 100755 (executable)
old mode 100644 (file)
new mode 100755 (executable)
old mode 100644 (file)
new mode 100755 (executable)
old mode 100644 (file)
new mode 100755 (executable)
old mode 100644 (file)
new mode 100755 (executable)
old mode 100644 (file)
new mode 100755 (executable)
old mode 100644 (file)
new mode 100755 (executable)
old mode 100644 (file)
new mode 100755 (executable)
old mode 100644 (file)
new mode 100755 (executable)
old mode 100644 (file)
new mode 100755 (executable)
old mode 100644 (file)
new mode 100755 (executable)
old mode 100644 (file)
new mode 100755 (executable)
old mode 100644 (file)
new mode 100755 (executable)
old mode 100644 (file)
new mode 100755 (executable)
old mode 100644 (file)
new mode 100755 (executable)
old mode 100644 (file)
new mode 100755 (executable)
old mode 100644 (file)
new mode 100755 (executable)
old mode 100644 (file)
new mode 100755 (executable)
old mode 100644 (file)
new mode 100755 (executable)
old mode 100644 (file)
new mode 100755 (executable)
old mode 100644 (file)
new mode 100755 (executable)
old mode 100644 (file)
new mode 100755 (executable)
old mode 100644 (file)
new mode 100755 (executable)
old mode 100644 (file)
new mode 100755 (executable)
old mode 100644 (file)
new mode 100755 (executable)
old mode 100644 (file)
new mode 100755 (executable)
index 8072871..b704670
@@ -12,9 +12,9 @@ MANAGERS = ADMINS
 
 DATABASES = {
     'default': {
-        'ENGINE': 'django.db.backends.mysql', # Add 'postgresql_psycopg2', 'mysql', 'sqlite3' or 'oracle'.
-        'NAME': 'paf0',                      # Or path to database file if using sqlite3.
-        'USER': 'root',                      # Not used with sqlite3.
+        'ENGINE': 'django.db.backends.sqlite3', # Add 'postgresql_psycopg2', 'mysql', 'sqlite3' or 'oracle'.
+        'NAME': '/var/www/cgi-bin/paf-v1/paf0_db',                      # Or path to database file if using sqlite3.
+        'USER': '',                      # Not used with sqlite3.
         'PASSWORD': '',                  # Not used with sqlite3.
         'HOST': '',                      # Set to empty string for localhost. Not used with sqlite3.
         'PORT': '',                      # Set to empty string for default. Not used with sqlite3.
@@ -60,13 +60,18 @@ MEDIA_URL = '/media/'
 # Don't put anything in this directory yourself; store your static files
 # in apps' "static/" subdirectories and in STATICFILES_DIRS.
 # Example: "/home/media/media.lawrence.com/static/"
-STATIC_ROOT = ''
+STATIC_ROOT = '/Users/seangmeng/Dropbox/itc/2012-2013/Python/djcode/sample2/static/'
 
 # URL prefix for static files.
 # Example: "http://media.lawrence.com/static/"
 STATIC_URL = '/static/'
 
-# Additional locations of static files
+
+#i prefix for admin static files -- CSS, JavaScript and images.
+# Make sure to use a trailing slash.
+# Examples: "http://foo.com/static/admin/", "/static/admin/".
+ADMIN_MEDIA_PREFIX = '/static/admin/'
+
 STATICFILES_DIRS = (
     # Put strings here, like "/home/html/static" or "C:/www/django/static".
     # Always use forward slashes, even on Windows.
@@ -161,4 +166,4 @@ LOGGING = {
     }
 }
 
-LOGIN_REDIRECT_URL = "/"
+LOGIN_REDIRECT_URL = "/paf-v1/"
diff --git a/paf0/templates/admin/base_site.html b/paf0/templates/admin/base_site.html
deleted file mode 100644 (file)
index b867bd2..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-{% extends "admin/base.html" %}
-{% load i18n %}
-
-{% block title %}{{ title }} | {% trans 'Django site admin' %}{% endblock %}
-
-{% block branding %}
-<h1 id="site-name">{% trans 'Django administration' %}</h1>
-{% endblock %}
-
-{% block nav-global %}{% endblock %}
diff --git a/paf0/templates/admin/change_list.html b/paf0/templates/admin/change_list.html
deleted file mode 100644 (file)
index 98869cf..0000000
+++ /dev/null
@@ -1,100 +0,0 @@
-{% extends "admin/base_site.html" %}
-{% load i18n admin_static admin_list %}
-{% load url from future %}
-{% load admin_urls %}
-
-{% block extrastyle %}
-  {{ block.super }}
-  <link rel="stylesheet" type="text/css" href="{% static "admin/css/changelists.css" %}" />
-  {% if cl.formset %}
-    <link rel="stylesheet" type="text/css" href="{% static "admin/css/forms.css" %}" />
-  {% endif %}
-  {% if cl.formset or action_form %}
-    {% url 'admin:jsi18n' as jsi18nurl %}
-    <script type="text/javascript" src="{{ jsi18nurl|default:'../../jsi18n/' }}"></script>
-  {% endif %}
-  {{ media.css }}
-  {% if not actions_on_top and not actions_on_bottom %}
-    <style>
-      #changelist table thead th:first-child {width: inherit}
-    </style>
-  {% endif %}
-{% endblock %}
-
-{% block extrahead %}
-{{ block.super }}
-{{ media.js }}
-{% if action_form %}{% if actions_on_top or actions_on_bottom %}
-<script type="text/javascript">
-(function($) {
-    $(document).ready(function($) {
-        $("tr input.action-select").actions();
-    });
-})(django.jQuery);
-</script>
-{% endif %}{% endif %}
-{% endblock %}
-
-{% block bodyclass %}change-list{% endblock %}
-
-{% if not is_popup %}
-{% block breadcrumbs %}
-<div class="breadcrumbs">
-<a href="{% url 'admin:index' %}">{% trans 'Home' %}</a>
-&rsaquo; <a href="{% url 'admin:app_list' app_label=cl.opts.app_label %}">{{ app_label|capfirst|escape }}</a>
-&rsaquo; {{ cl.opts.verbose_name_plural|capfirst }}
-</div>
-{% endblock %}
-{% endif %}
-
-{% block coltype %}flex{% endblock %}
-
-{% block content %}
-  <div id="content-main">
-    {% block object-tools %}
-      {% if has_add_permission %}
-        <ul class="object-tools">
-          {% block object-tools-items %}
-            <li>
-              <a href="{% url cl.opts|admin_urlname:'add' %}{% if is_popup %}?_popup=1{% endif %}" class="addlink">
-                {% blocktrans with cl.opts.verbose_name as name %}Add {{ name }}{% endblocktrans %}
-              </a>
-            </li>
-          {% endblock %}
-        </ul>
-      {% endif %}
-    {% endblock %}
-    {% if cl.formset.errors %}
-        <p class="errornote">
-        {% blocktrans count cl.formset.errors|length as counter %}Please correct the error below.{% plural %}Please correct the errors below.{% endblocktrans %}
-        </p>
-        {{ cl.formset.non_form_errors }}
-    {% endif %}
-    <div class="module{% if cl.has_filters %} filtered{% endif %}" id="changelist">
-      {% block search %}{% search_form cl %}{% endblock %}
-      {% block date_hierarchy %}{% date_hierarchy cl %}{% endblock %}
-
-      {% block filters %}
-        {% if cl.has_filters %}
-          <div id="changelist-filter">
-            <h2>{% trans 'Filter' %}</h2>
-            {% for spec in cl.filter_specs %}{% admin_list_filter cl spec %}{% endfor %}
-          </div>
-        {% endif %}
-      {% endblock %}
-
-      <form id="changelist-form" action="" method="post"{% if cl.formset.is_multipart %} enctype="multipart/form-data"{% endif %}>{% csrf_token %}
-      {% if cl.formset %}
-        <div>{{ cl.formset.management_form }}</div>
-      {% endif %}
-
-      {% block result_list %}
-          {% if action_form and actions_on_top and cl.full_result_count %}{% admin_actions %}{% endif %}
-          {% result_list cl %}
-          {% if action_form and actions_on_bottom and cl.full_result_count %}{% admin_actions %}{% endif %}
-      {% endblock %}
-      {% block pagination %}{% pagination cl %}{% endblock %}
-      </form>
-    </div>
-  </div>
-{% endblock %}
old mode 100644 (file)
new mode 100755 (executable)
index 7da9e42..30ce26b
@@ -1,22 +1,30 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xmlns:svg="http://www.w3.org/2000/svg" xml:lang="fr">
-  <head>
-    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
-    <title>{% block title %}Passport Académique Francophone (PAF){% endblock %}</title>
-    <link rel="icon" type="image/png" href="{{ MEDIA_URL }}images/favicon.ico" />
-    <link rel="stylesheet" type="text/css" href="{{ MEDIA_URL }}css/style.css" media="all"/>
-    {% block css %}{% endblock %}
-    {% block js %}{% endblock %}
-    {% block extrahead %}{% endblock %}    
-    
-  </head>
+{% load admin_static %}{% load url from future %}<!DOCTYPE html>
+<html lang="{{ LANGUAGE_CODE|default:"en-us" }}" {% if LANGUAGE_BIDI %}dir="rtl"{% endif %}>
+<head>
+<title>{% block title %}{% endblock %}</title>
+<link rel="stylesheet" type="text/css" href="{% block stylesheet %}{% static "admin/css/base.css" %}{% endblock %}" />
+<link rel="stylesheet" type="text/css" href="{% static "admin/css/mystyle.css" %}" media="all"/>
 
-  <body>
+{% block extrastyle %}{% endblock %}
+<!--[if lte IE 7]><link rel="stylesheet" type="text/css" href="{% block stylesheet_ie %}{% static "admin/css/ie.css" %}{% endblock %}" /><![endif]-->
+{% if LANGUAGE_BIDI %}<link rel="stylesheet" type="text/css" href="{% block stylesheet_rtl %}{% static "admin/css/rtl.css" %}{% endblock %}" />{% endif %}
+<script type="text/javascript">window.__admin_media_prefix__ = "{% filter escapejs %}{% static "admin/" %}{% endfilter %}";</script>
+{% block extrahead %}{% endblock %}
+{% block blockbots %}<meta name="robots" content="NONE,NOARCHIVE" />{% endblock %}
+</head>
+{% load i18n %}
+
+<body class="{% if is_popup %}popup {% endif %}{% block bodyclass %}{% endblock %}">
+
+<!-- Container -->
+<div id="container">
+
+    <!-- Header -->
     <div id="header">
 
       <div id="banner">
-        <img src="{{ MEDIA_URL }}images/logo.gif" alt="logo AUF"/>
-        <h1>Passport Académique Francophone (PAF)</h1>
+        <img src="{% static "admin/img/logo.gif" %}" alt="logo AUF"/>
+        <h1>Passeport Académique Francophone (PAF)</h1>
         <h2>{% block sous_titre %}{% endblock %}</h2>
         {% block chapeau %}{% endblock %}
       </div>
       <ul id="user-actions">
           {% if user.is_authenticated %}
           <li class="username">{{ user }}</li>
-            <li><a href="{% url deconnexion %}">Déconnexion</a></li>
+            <li><a href="{% url 'deconnexion' %}">Déconnexion</a></li>
             {% if user.is_superuser %}
-                <li><a href="{% url admin:index %}">Administration</a></li>
+                <li><a href="{% url 'admin:index' %}">Administration</a></li>
             {% endif %}
             {% ifequal user.first_name 'student' %}
-                <li><a href="{%  url edit_info %}">Modifier votre information</a></li>
-                <li><a href="{%  url change_password %}">Changer le mot de passe</a></li>
+                {% block edit_info %}<li><a href="{%  url 'edit_info' %}">Modifier votre information</a></li>{% endblock %}
+                {% block edit_passwd %}<li><a href="{%  url 'change_password' %}">Changer le mot de passe</a></li>{% endblock %}
             {% endifequal %}
             {% ifequal user.username 'enseignant' %}
-                <li><a href="/admin/paf/student/">Liste des étudiants</a></li>
+                <li><a href="/paf-v1/admin/paf/student/">Liste des étudiants</a></li>
             {% endifequal %}
           {% else %}
-            <li><a href="{% url connexion %}">Connexion</a></li>
-            <li><a href="{% url register %}">Enregistrer</a></li>
+            <li><a href="{% url 'connexion' %}">Connexion</a></li>
+            <li><a href="{% url 'register' %}">Enregistrer</a></li>
           {% endif %}
       </ul>
 
     </div>
-<!--
-    <div id="topmenu">
-        <ul class="menu">
-          <li><a href="{% url home %}">Accueil</a>
-          <li><a href="{% url home %}">Établissements</a></li>
-          <li><a href="{% url home %}">Personnes</a></li>
-        </ul>
-    </div>
--->
-    {% block droite %}
-    {% endblock %}
+    <!-- END Header -->
 
+    {% block messages %}
+        {% if messages %}
+        <ul class="messagelist">{% for message in messages %}
+          <li{% if message.tags %} class="{{ message.tags }}"{% endif %}>{{ message }}</li>
+        {% endfor %}</ul>
+        {% endif %}
+    {% endblock messages %}
 
-    <div id="main">
-      {% block main %}
-      {% endblock %}
+    <!-- Content -->
+    <div id="content" class="{% block coltype %}colM{% endblock %}">
+        {% block pretitle %}{% endblock %}
+        {% block content_title %}{% endblock %}
+        {% block content %}
+        {% block object-tools %}{% endblock %}
+        {{ content }}
+        {% endblock %}
+        {% block sidebar %}{% endblock %}
+        <br class="clear" />
     </div>
+    <!-- END Content -->
 
-    <div id="footer">
-      {% block footer %}
-      {% endblock %}
-    </div>
+    {% block footer %}<div id="footer"></div>{% endblock %}
+</div>
+<!-- END Container -->
 
 </body>
 </html>
old mode 100644 (file)
new mode 100755 (executable)
index b98994c..404c1e7
@@ -4,7 +4,7 @@
     <li><a href="{% url views.connexion %}">Connexion</a>
 {% endblock %}
 
-{% block main %}
+{% block content %}
 
   <div class="zone-texte">
     <h2>Connexion</h2>
old mode 100644 (file)
new mode 100755 (executable)
index 71bcf3e..fbe0d6a
@@ -4,7 +4,7 @@
     <li><a href="{% url views.connexion %}">Connexion</a>
 {% endblock %}
 
-{% block main %}
+{% block content %}
 
   <div class="zone-texte">
     <h2>Déconnexion</h2>
old mode 100644 (file)
new mode 100755 (executable)
index 156cb62..d1ca40b
@@ -1,6 +1,6 @@
 {% extends "base.html" %}
 
-{% block main %}
+{% block content %}
 
 {% if edit_info %}
 <div class="message info">
@@ -21,7 +21,7 @@ Vous êtes sur le site du Passeport Académique Francophone (PAF).
     <p>
     Vous pouvez:
     <ul>
-        <li>Changer votre information en cliquant sur le lien "Changer votre information".</li>
+        <li>Modifier votre information en cliquant sur le lien "Modifier votre information".</li>
         <li>Changer le mot de passe en cliquant sur le lien "Changer le mot de passe".</li>
         <li>Vous déconnecter en cliquant sur le lien "Déconnexion".</li>
     </ul>
old mode 100644 (file)
new mode 100755 (executable)
index ebb3483..3ec97c4
@@ -3,7 +3,7 @@
 {% load url from future %}
 
 
-{% block main %}
+{% block content %}
 
 <h1>{% trans 'Password change successful' %}</h1>
 
old mode 100644 (file)
new mode 100755 (executable)
index 043054c..f4438fe
@@ -1,8 +1,20 @@
 {% extends "base.html" %}
 {% load i18n static %}
 {% load url from future %}
+{% block extrastyle %}{{ block.super }}<link rel="stylesheet" type="text/css" href="{% static "admin/css/forms.css" %}" />{% endblock %}
+{% block userlinks %}{% url 'django-admindocs-docroot' as docsroot %}{% if docsroot %}<a href="{{ docsroot }}">{% trans 'Documentation' %}</a> / {% endif %} {% trans 'Change password' %} / <a href="{% url 'admin:logout' %}">{% trans 'Log out' %}</a>{% endblock %}
+{% block breadcrumbs %}
+<div class="breadcrumbs">
+<a href="{% url 'admin:index' %}">{% trans 'Home' %}</a>
+&rsaquo; {% trans 'Password change' %}
+</div>
+{% endblock %}
+
+{% block edit_passwd %}{% endblock %}
+
+{% block title %}{% trans 'Password change' %}{% endblock %}
 
-{% block main %}<div id="content-main">
+{% block content %}<div id="content-main">
 
 <form action="" method="post">{% csrf_token %}
 <div>
old mode 100644 (file)
new mode 100755 (executable)
index 9b91a7b..d82270e
@@ -24,7 +24,7 @@ urlpatterns = patterns('',
     ), 'deconnexion'),
     url(r'^change_password/$', password_change, name='change_password'),
     url(r'^change_password/done/$', password_change_done, name='change_password_done'),
-    url(r'^admin/password_change/done/$',  lambda x: HttpResponseRedirect('/change_password/done/')),
+    url(r'^admin/password_change/done/$',  lambda x: HttpResponseRedirect('/paf-v1/change_password/done/')),
     url(r'^admin/$', admin_home, name='admin_home'),
     
     #url(r'^admin/paf/student/(\d+)/', 'paf.views.change_student', name='test_change_student'),
old mode 100644 (file)
new mode 100755 (executable)
old mode 100644 (file)
new mode 100755 (executable)
diff --git a/paf0_db b/paf0_db
new file mode 100755 (executable)
index 0000000..1481b52
Binary files /dev/null and b/paf0_db differ
diff --git a/static/admin/css/base.css b/static/admin/css/base.css
new file mode 100755 (executable)
index 0000000..5e5fc58
--- /dev/null
@@ -0,0 +1,835 @@
+/*
+    DJANGO Admin styles
+*/
+
+body {
+    margin: 0;
+    padding: 0;
+    font-size: 12px;
+    font-family: "Lucida Grande","DejaVu Sans","Bitstream Vera Sans",Verdana,Arial,sans-serif;
+    color: #333;
+    background: #fff;
+}
+
+/* LINKS */
+
+a:link, a:visited {
+    color: #5b80b2;
+    text-decoration: none;
+}
+
+a:hover {
+    color: #036;
+}
+
+a img {
+    border: none;
+}
+
+a.section:link, a.section:visited {
+    color: white;
+    text-decoration: none;
+}
+
+/* GLOBAL DEFAULTS */
+
+p, ol, ul, dl {
+    margin: .2em 0 .8em 0;
+}
+
+p {
+    padding: 0;
+    line-height: 140%;
+}
+
+h1,h2,h3,h4,h5 {
+    font-weight: bold;
+}
+
+h1 {
+    font-size: 18px;
+    color: #666;
+    padding: 0 6px 0 0;
+    margin: 0 0 .2em 0;
+}
+
+h2 {
+    font-size: 16px;
+    margin: 1em 0 .5em 0;
+}
+
+h2.subhead {
+    font-weight: normal;
+    margin-top: 0;
+}
+
+h3 {
+    font-size: 14px;
+    margin: .8em 0 .3em 0;
+    color: #666;
+    font-weight: bold;
+}
+
+h4 {
+    font-size: 12px;
+    margin: 1em 0 .8em 0;
+    padding-bottom: 3px;
+}
+
+h5 {
+    font-size: 10px;
+    margin: 1.5em 0 .5em 0;
+    color: #666;
+    text-transform: uppercase;
+    letter-spacing: 1px;
+}
+
+ul li {
+    list-style-type: square;
+    padding: 1px 0;
+}
+
+ul.plainlist {
+    margin-left: 0 !important;
+}
+
+ul.plainlist li {
+    list-style-type: none;
+}
+
+li ul {
+    margin-bottom: 0;
+}
+
+li, dt, dd {
+    font-size: 11px;
+    line-height: 14px;
+}
+
+dt {
+    font-weight: bold;
+    margin-top: 4px;
+}
+
+dd {
+    margin-left: 0;
+}
+
+form {
+    margin: 0;
+    padding: 0;
+}
+
+fieldset {
+    margin: 0;
+    padding: 0;
+}
+
+blockquote {
+    font-size: 11px;
+    color: #777;
+    margin-left: 2px;
+    padding-left: 10px;
+    border-left: 5px solid #ddd;
+}
+
+code, pre {
+    font-family: "Bitstream Vera Sans Mono", Monaco, "Courier New", Courier, monospace;
+    background: inherit;
+    color: #666;
+    font-size: 11px;
+}
+
+pre.literal-block {
+    margin: 10px;
+    background: #eee;
+    padding: 6px 8px;
+}
+
+code strong {
+    color: #930;
+}
+
+hr {
+    clear: both;
+    color: #eee;
+    background-color: #eee;
+    height: 1px;
+    border: none;
+    margin: 0;
+    padding: 0;
+    font-size: 1px;
+    line-height: 1px;
+}
+
+/* TEXT STYLES & MODIFIERS */
+
+.small {
+    font-size: 11px;
+}
+
+.tiny {
+    font-size: 10px;
+}
+
+p.tiny {
+    margin-top: -2px;
+}
+
+.mini {
+    font-size: 9px;
+}
+
+p.mini {
+    margin-top: -3px;
+}
+
+.help, p.help {
+    font-size: 10px !important;
+    color: #999;
+}
+
+img.help-tooltip {
+    cursor: help;
+}
+
+p img, h1 img, h2 img, h3 img, h4 img, td img {
+    vertical-align: middle;
+}
+
+.quiet, a.quiet:link, a.quiet:visited {
+    color: #999 !important;
+    font-weight: normal !important;
+}
+
+.quiet strong {
+    font-weight: bold !important;
+}
+
+.float-right {
+    float: right;
+}
+
+.float-left {
+    float: left;
+}
+
+.clear {
+    clear: both;
+}
+
+.align-left {
+    text-align: left;
+}
+
+.align-right {
+    text-align: right;
+}
+
+.example {
+    margin: 10px 0;
+    padding: 5px 10px;
+    background: #efefef;
+}
+
+.nowrap {
+    white-space: nowrap;
+}
+
+/* TABLES */
+
+table {
+    border-collapse: collapse;
+    border-color: #ccc;
+}
+
+td, th {
+    font-size: 11px;
+    line-height: 13px;
+    border-bottom: 1px solid #eee;
+    vertical-align: top;
+    padding: 5px;
+    font-family: "Lucida Grande", Verdana, Arial, sans-serif;
+}
+
+th {
+    text-align: left;
+    font-size: 12px;
+    font-weight: bold;
+}
+
+thead th,
+tfoot td {
+    color: #666;
+    padding: 2px 5px;
+    font-size: 11px;
+    background: #e1e1e1 url(../img/nav-bg.gif) top left repeat-x;
+    border-left: 1px solid #ddd;
+    border-bottom: 1px solid #ddd;
+}
+
+tfoot td {
+    border-bottom: none;
+    border-top: 1px solid #ddd;
+}
+
+thead th:first-child,
+tfoot td:first-child {
+    border-left: none !important;
+}
+
+thead th.optional {
+    font-weight: normal !important;
+}
+
+fieldset table {
+    border-right: 1px solid #eee;
+}
+
+tr.row-label td {
+    font-size: 9px;
+    padding-top: 2px;
+    padding-bottom: 0;
+    border-bottom: none;
+    color: #666;
+    margin-top: -1px;
+}
+
+tr.alt {
+    background: #f6f6f6;
+}
+
+.row1 {
+    background: #EDF3FE;
+}
+
+.row2 {
+    background: white;
+}
+
+/* SORTABLE TABLES */
+
+thead th {
+    padding: 2px 5px;
+    line-height: normal;
+}
+
+thead th a:link, thead th a:visited {
+    color: #666;
+}
+
+thead th.sorted {
+    background: #c5c5c5 url(../img/nav-bg-selected.gif) top left repeat-x;
+}
+
+table thead th .text span {
+    padding: 2px 5px;
+    display:block;
+}
+
+table thead th .text a {
+    display: block;
+    cursor: pointer;
+    padding: 2px 5px;
+}
+
+table thead th.sortable:hover {
+    background: white url(../img/nav-bg-reverse.gif) 0 -5px repeat-x;
+}
+
+thead th.sorted a.sortremove {
+    visibility: hidden;
+}
+
+table thead th.sorted:hover a.sortremove {
+    visibility: visible;
+}
+
+table thead th.sorted .sortoptions {
+    display: block;
+    padding: 4px 5px 0 5px;
+    float: right;
+    text-align: right;
+}
+
+table thead th.sorted .sortpriority {
+    font-size: .8em;
+    min-width: 12px;
+    text-align: center;
+    vertical-align: top;
+}
+
+table thead th.sorted .sortoptions a {
+    width: 14px;
+    height: 12px;
+    display: inline-block;
+}
+
+table thead th.sorted .sortoptions a.sortremove {
+    background: url(../img/sorting-icons.gif) -4px -5px no-repeat;
+}
+
+table thead th.sorted .sortoptions a.sortremove:hover {
+    background: url(../img/sorting-icons.gif) -4px -27px no-repeat;
+}
+
+table thead th.sorted .sortoptions a.ascending {
+    background: url(../img/sorting-icons.gif) -5px -50px no-repeat;
+}
+
+table thead th.sorted .sortoptions a.ascending:hover {
+    background: url(../img/sorting-icons.gif) -5px -72px no-repeat;
+}
+
+table thead th.sorted .sortoptions a.descending {
+    background: url(../img/sorting-icons.gif) -5px -94px no-repeat;
+}
+
+table thead th.sorted .sortoptions a.descending:hover {
+    background: url(../img/sorting-icons.gif) -5px -115px no-repeat;
+}
+
+/* ORDERABLE TABLES */
+
+table.orderable tbody tr td:hover {
+    cursor: move;
+}
+
+table.orderable tbody tr td:first-child {
+    padding-left: 14px;
+    background-image: url(../img/nav-bg-grabber.gif);
+    background-repeat: repeat-y;
+}
+
+table.orderable-initalized .order-cell, body>tr>td.order-cell {
+    display: none;
+}
+
+/* FORM DEFAULTS */
+
+input, textarea, select, .form-row p {
+    margin: 2px 0;
+    padding: 2px 3px;
+    vertical-align: middle;
+    font-family: "Lucida Grande", Verdana, Arial, sans-serif;
+    font-weight: normal;
+    font-size: 11px;
+}
+
+textarea {
+    vertical-align: top !important;
+}
+
+input[type=text], input[type=password], textarea, select, .vTextField {
+    border: 1px solid #ccc;
+}
+
+/* FORM BUTTONS */
+
+.button, input[type=submit], input[type=button], .submit-row input {
+    background: white url(../img/nav-bg.gif) bottom repeat-x;
+    padding: 3px 5px;
+    color: black;
+    border: 1px solid #bbb;
+    border-color: #ddd #aaa #aaa #ddd;
+}
+
+.button:active, input[type=submit]:active, input[type=button]:active {
+    background-image: url(../img/nav-bg-reverse.gif);
+    background-position: top;
+}
+
+.button[disabled], input[type=submit][disabled], input[type=button][disabled] {
+       background-image: url(../img/nav-bg.gif);
+       background-position: bottom;
+       opacity: 0.4;
+}
+
+.button.default, input[type=submit].default, .submit-row input.default {
+    border: 2px solid #5b80b2;
+    background: #7CA0C7 url(../img/default-bg.gif) bottom repeat-x;
+    font-weight: bold;
+    color: white;
+    float: right;
+}
+
+.button.default:active, input[type=submit].default:active {
+    background-image: url(../img/default-bg-reverse.gif);
+    background-position: top;
+}
+
+.button[disabled].default, input[type=submit][disabled].default, input[type=button][disabled].default {
+       background-image: url(../img/default-bg.gif);
+       background-position: bottom;
+       opacity: 0.4;
+}
+
+
+/* MODULES */
+
+.module {
+    border: 1px solid #ccc;
+    margin-bottom: 5px;
+    background: white;
+}
+
+.module p, .module ul, .module h3, .module h4, .module dl, .module pre {
+    padding-left: 10px;
+    padding-right: 10px;
+}
+
+.module blockquote {
+    margin-left: 12px;
+}
+
+.module ul, .module ol {
+    margin-left: 1.5em;
+}
+
+.module h3 {
+    margin-top: .6em;
+}
+
+.module h2, .module caption, .inline-group h2 {
+    margin: 0;
+    padding: 2px 5px 3px 5px;
+    font-size: 11px;
+    text-align: left;
+    font-weight: bold;
+    background: #7CA0C7 url(../img/default-bg.gif) top left repeat-x;
+    color: white;
+}
+
+.module table {
+    border-collapse: collapse;
+}
+
+/* MESSAGES & ERRORS */
+
+ul.messagelist {
+    padding: 0 0 5px 0;
+    margin: 0;
+}
+
+ul.messagelist li {
+    font-size: 12px;
+    display: block;
+    padding: 4px 5px 4px 25px;
+    margin: 0 0 3px 0;
+    border-bottom: 1px solid #ddd;
+    color: #666;
+    background: #ffc url(../img/icon_success.gif) 5px .3em no-repeat;
+}
+
+ul.messagelist li.warning{
+    background-image: url(../img/icon_alert.gif);
+}
+
+ul.messagelist li.error{
+    background-image: url(../img/icon_error.gif);
+}
+
+.errornote {
+    font-size: 12px !important;
+    display: block;
+    padding: 4px 5px 4px 25px;
+    margin: 0 0 3px 0;
+    border: 1px solid red;
+    color: red;
+    background: #ffc url(../img/icon_error.gif) 5px .3em no-repeat;
+}
+
+ul.errorlist {
+    margin: 0 !important;
+    padding: 0 !important;
+}
+
+.errorlist li {
+    font-size: 12px !important;
+    display: block;
+    padding: 4px 5px 4px 25px;
+    margin: 0 0 3px 0;
+    border: 1px solid red;
+    color: white;
+    background: red url(../img/icon_alert.gif) 5px .3em no-repeat;
+}
+
+.errorlist li a {
+       color: white;
+    text-decoration: underline;
+}
+
+td ul.errorlist {
+    margin: 0 !important;
+    padding: 0 !important;
+}
+
+td ul.errorlist li {
+    margin: 0 !important;
+}
+
+.errors {
+    background: #ffc;
+}
+
+.errors input, .errors select, .errors textarea {
+    border: 1px solid red;
+}
+
+div.system-message {
+    background: #ffc;
+    margin: 10px;
+    padding: 6px 8px;
+    font-size: .8em;
+}
+
+div.system-message p.system-message-title {
+    padding: 4px 5px 4px 25px;
+    margin: 0;
+    color: red;
+    background: #ffc url(../img/icon_error.gif) 5px .3em no-repeat;
+}
+
+.description {
+    font-size: 12px;
+    padding: 5px 0 0 12px;
+}
+
+/* BREADCRUMBS */
+
+div.breadcrumbs {
+    background: white url(../img/nav-bg-reverse.gif) 0 -10px repeat-x;
+    padding: 2px 8px 3px 8px;
+    font-size: 11px;
+    color: #999;
+    border-top: 1px solid white;
+    border-bottom: 1px solid #ccc;
+    text-align: left;
+}
+
+/* ACTION ICONS */
+
+.addlink {
+    padding-left: 12px;
+    background: url(../img/icon_addlink.gif) 0 .2em no-repeat;
+}
+
+.changelink {
+    padding-left: 12px;
+    background: url(../img/icon_changelink.gif) 0 .2em no-repeat;
+}
+
+.deletelink {
+    padding-left: 12px;
+    background: url(../img/icon_deletelink.gif) 0 .25em no-repeat;
+}
+
+a.deletelink:link, a.deletelink:visited {
+    color: #CC3434;
+}
+
+a.deletelink:hover {
+    color: #993333;
+}
+
+/* OBJECT TOOLS */
+
+.object-tools {
+    font-size: 10px;
+    font-weight: bold;
+    font-family: Arial,Helvetica,sans-serif;
+    padding-left: 0;
+    float: right;
+    position: relative;
+    margin-top: -2.4em;
+    margin-bottom: -2em;
+}
+
+.form-row .object-tools {
+    margin-top: 5px;
+    margin-bottom: 5px;
+    float: none;
+    height: 2em;
+    padding-left: 3.5em;
+}
+
+.object-tools li {
+    display: block;
+    float: left;
+    background: url(../img/tool-left.gif) 0 0 no-repeat;
+    padding: 0 0 0 8px;
+    margin-left: 2px;
+    height: 16px;
+}
+
+.object-tools li:hover {
+    background: url(../img/tool-left_over.gif) 0 0 no-repeat;
+}
+
+.object-tools a:link, .object-tools a:visited {
+    display: block;
+    float: left;
+    color: white;
+    padding: .1em 14px .1em 8px;
+    height: 14px;
+    background: #999 url(../img/tool-right.gif) 100% 0 no-repeat;
+}
+
+.object-tools a:hover, .object-tools li:hover a {
+    background: #5b80b2 url(../img/tool-right_over.gif) 100% 0 no-repeat;
+}
+
+.object-tools a.viewsitelink, .object-tools a.golink {
+    background: #999 url(../img/tooltag-arrowright.gif) top right no-repeat;
+    padding-right: 28px;
+}
+
+.object-tools a.viewsitelink:hover, .object-tools a.golink:hover {
+    background: #5b80b2 url(../img/tooltag-arrowright_over.gif) top right no-repeat;
+}
+
+.object-tools a.addlink {
+    background: #999 url(../img/tooltag-add.gif) top right no-repeat;
+    padding-right: 28px;
+}
+
+.object-tools a.addlink:hover {
+    background: #5b80b2 url(../img/tooltag-add_over.gif) top right no-repeat;
+}
+
+/* OBJECT HISTORY */
+
+table#change-history {
+    width: 100%;
+}
+
+table#change-history tbody th {
+    width: 16em;
+}
+
+/* PAGE STRUCTURE */
+
+#container {
+    position: relative;
+    width: 100%;
+    min-width: 760px;
+    padding: 0;
+}
+
+#content {
+    margin: 10px 15px;
+}
+
+#header {
+    width: 100%;
+}
+
+#content-main {
+    float: left;
+    width: 100%;
+}
+
+#content-related {
+    float: right;
+    width: 18em;
+    position: relative;
+    margin-right: -19em;
+}
+
+#footer {
+    clear: both;
+    padding: 10px;
+}
+
+/* COLUMN TYPES */
+
+.colMS {
+    margin-right: 20em !important;
+}
+
+.colSM {
+    margin-left: 20em !important;
+}
+
+.colSM #content-related {
+    float: left;
+    margin-right: 0;
+    margin-left: -19em;
+}
+
+.colSM #content-main {
+    float: right;
+}
+
+.popup .colM {
+    width: 95%;
+}
+
+.subcol {
+    float: left;
+    width: 46%;
+    margin-right: 15px;
+}
+
+.dashboard #content {
+    width: 500px;
+}
+
+/* HEADER */
+
+#header {
+    background: #417690;
+    color: #ffc;
+    overflow: hidden;
+}
+
+#header a:link, #header a:visited {
+    color: white;
+}
+
+#header a:hover {
+    text-decoration: underline;
+}
+
+#branding h1 {
+    padding: 0 10px;
+    font-size: 18px;
+    margin: 8px 0;
+    font-weight: normal;
+    color: #f4f379;
+}
+
+#branding h2 {
+    padding: 0 10px;
+    font-size: 14px;
+    margin: -8px 0 8px 0;
+    font-weight: normal;
+    color: #ffc;
+}
+
+#user-tools {
+    position: absolute;
+    top: 0;
+    right: 0;
+    padding: 1.2em 10px;
+    font-size: 11px;
+    text-align: right;
+}
+
+/* SIDEBAR */
+
+#content-related h3 {
+    font-size: 12px;
+    color: #666;
+    margin-bottom: 3px;
+}
+
+#content-related h4 {
+    font-size: 11px;
+}
+
+#content-related .module h2 {
+    background: #eee url(../img/nav-bg.gif) bottom left repeat-x;
+    color: #666;
+}
+
diff --git a/static/admin/css/changelists.css b/static/admin/css/changelists.css
new file mode 100755 (executable)
index 0000000..3c1a8c1
--- /dev/null
@@ -0,0 +1,289 @@
+/* CHANGELISTS */
+
+#changelist {
+    position: relative;
+    width: 100%;
+}
+
+#changelist table {
+    width: 100%;
+}
+
+.change-list .hiddenfields { display:none; }
+
+.change-list .filtered table {
+    border-right: 1px solid #ddd;
+}
+
+.change-list .filtered {
+    min-height: 400px;
+}
+
+.change-list .filtered {
+    background: white url(../img/changelist-bg.gif) top right repeat-y !important;
+}
+
+.change-list .filtered .results, .change-list .filtered .paginator, .filtered #toolbar, .filtered div.xfull {
+    margin-right: 160px !important;
+    width: auto !important;
+}
+
+.change-list .filtered table tbody th {
+    padding-right: 1em;
+}
+
+#changelist .toplinks {
+    border-bottom: 1px solid #ccc !important;
+}
+
+#changelist .paginator {
+    color: #666;
+    border-top: 1px solid #eee;
+    border-bottom: 1px solid #eee;
+    background: white url(../img/nav-bg.gif) 0 180% repeat-x;
+    overflow: hidden;
+}
+
+.change-list .filtered .paginator {
+    border-right: 1px solid #ddd;
+}
+
+/* CHANGELIST TABLES */
+
+#changelist table thead th {
+    padding: 0;
+    white-space: nowrap;
+    vertical-align: middle;
+}
+
+#changelist table thead th.action-checkbox-column {
+    width: 1.5em;
+    text-align: center;
+}
+
+#changelist table tbody td, #changelist table tbody th {
+    border-left: 1px solid #ddd;
+}
+
+#changelist table tbody td:first-child, #changelist table tbody th:first-child {
+    border-left: 0;
+    border-right: 1px solid #ddd;
+}
+
+#changelist table tbody td.action-checkbox {
+    text-align:center;
+}
+
+#changelist table tfoot {
+    color: #666;
+}
+
+/* TOOLBAR */
+
+#changelist #toolbar {
+    padding: 3px;
+    border-bottom: 1px solid #ddd;
+    background: #e1e1e1 url(../img/nav-bg.gif) top left repeat-x;
+    color: #666;
+}
+
+#changelist #toolbar form input {
+    font-size: 11px;
+    padding: 1px 2px;
+}
+
+#changelist #toolbar form #searchbar {
+    padding: 2px;
+}
+
+#changelist #changelist-search img {
+    vertical-align: middle;
+}
+
+/* FILTER COLUMN */
+
+#changelist-filter {
+    position: absolute;
+    top: 0;
+    right: 0;
+    z-index: 1000;
+    width: 160px;
+    border-left: 1px solid #ddd;
+    background: #efefef;
+    margin: 0;
+}
+
+#changelist-filter h2 {
+    font-size: 11px;
+    padding: 2px 5px;
+    border-bottom: 1px solid #ddd;
+}
+
+#changelist-filter h3 {
+    font-size: 12px;
+    margin-bottom: 0;
+}
+
+#changelist-filter ul {
+    padding-left: 0;
+    margin-left: 10px;
+}
+
+#changelist-filter li {
+    list-style-type: none;
+    margin-left: 0;
+    padding-left: 0;
+}
+
+#changelist-filter a {
+    color: #999;
+}
+
+#changelist-filter a:hover {
+    color: #036;
+}
+
+#changelist-filter li.selected {
+    border-left: 5px solid #ccc;
+    padding-left: 5px;
+    margin-left: -10px;
+}
+
+#changelist-filter li.selected a {
+    color: #5b80b2 !important;
+}
+
+/* DATE DRILLDOWN */
+
+.change-list ul.toplinks {
+    display: block;
+    background: white url(../img/nav-bg-reverse.gif) 0 -10px repeat-x;
+    border-top: 1px solid white;
+    float: left;
+    padding: 0 !important;
+    margin: 0 !important;
+    width: 100%;
+}
+
+.change-list ul.toplinks li {
+    padding: 3px 6px;
+    font-weight: bold;
+    list-style-type: none;
+    display: inline-block;
+}
+
+.change-list ul.toplinks .date-back a {
+    color: #999;
+}
+
+.change-list ul.toplinks .date-back a:hover {
+    color: #036;
+}
+
+/* PAGINATOR */
+
+.paginator {
+    font-size: 11px;
+    padding-top: 10px;
+    padding-bottom: 10px;
+    line-height: 22px;
+    margin: 0;
+    border-top: 1px solid #ddd;
+}
+
+.paginator a:link, .paginator a:visited {
+    padding: 2px 6px;
+    border: solid 1px #ccc;
+    background: white;
+    text-decoration: none;
+}
+
+.paginator a.showall {
+    padding: 0 !important;
+    border: none !important;
+}
+
+.paginator a.showall:hover {
+    color: #036 !important;
+    background: transparent !important;
+}
+
+.paginator .end {
+    border-width: 2px !important;
+    margin-right: 6px;
+}
+
+.paginator .this-page {
+    padding: 2px 6px;
+    font-weight: bold;
+    font-size: 13px;
+    vertical-align: top;
+}
+
+.paginator a:hover {
+    color: white;
+    background: #5b80b2;
+    border-color: #036;
+}
+
+/* ACTIONS */
+
+.filtered .actions {
+    margin-right: 160px !important;
+    border-right: 1px solid #ddd;
+}
+
+#changelist table input {
+    margin: 0;
+}
+
+#changelist table tbody tr.selected {
+    background-color: #FFFFCC;
+}
+
+#changelist .actions {
+    color: #999;
+    padding: 3px;
+    border-top: 1px solid #fff;
+    border-bottom: 1px solid #ddd;
+    background: white url(../img/nav-bg-reverse.gif) 0 -10px repeat-x;
+}
+
+#changelist .actions.selected {
+    background: #fffccf;
+    border-top: 1px solid #fffee8;
+    border-bottom: 1px solid #edecd6;
+}
+
+#changelist .actions span.all,
+#changelist .actions span.action-counter,
+#changelist .actions span.clear,
+#changelist .actions span.question {
+    font-size: 11px;
+    margin: 0 0.5em;
+    display: none;
+}
+
+#changelist .actions:last-child {
+    border-bottom: none;
+}
+
+#changelist .actions select {
+    border: 1px solid #aaa;
+    margin-left: 0.5em;
+    padding: 1px 2px;
+}
+
+#changelist .actions label {
+    font-size: 11px;
+    margin-left: 0.5em;
+}
+
+#changelist #action-toggle {
+    display: none;
+}
+
+#changelist .actions .button {
+    font-size: 11px;
+    padding: 1px 2px;
+}
diff --git a/static/admin/css/dashboard.css b/static/admin/css/dashboard.css
new file mode 100755 (executable)
index 0000000..ceefe15
--- /dev/null
@@ -0,0 +1,30 @@
+/* DASHBOARD */
+
+.dashboard .module table th {
+    width: 100%;
+}
+
+.dashboard .module table td {
+    white-space: nowrap;
+}
+
+.dashboard .module table td a {
+    display: block;
+    padding-right: .6em;
+}
+
+/* RECENT ACTIONS MODULE */
+
+.module ul.actionlist {
+    margin-left: 0;
+}
+
+ul.actionlist li {
+    list-style-type: none;
+}
+
+ul.actionlist li.changelink {
+    overflow: hidden;
+    text-overflow: ellipsis;
+    -o-text-overflow: ellipsis;
+}
\ No newline at end of file
diff --git a/static/admin/css/forms.css b/static/admin/css/forms.css
new file mode 100755 (executable)
index 0000000..0ecfca7
--- /dev/null
@@ -0,0 +1,358 @@
+@import url('widgets.css');
+
+/* FORM ROWS */
+
+.form-row {
+    overflow: hidden;
+    padding: 8px 12px;
+    font-size: 11px;
+    border-bottom: 1px solid #eee;
+}
+
+.form-row img, .form-row input {
+    vertical-align: middle;
+}
+
+form .form-row p {
+    padding-left: 0;
+    font-size: 11px;
+}
+
+/* FORM LABELS */
+
+form h4 {
+    margin: 0 !important;
+    padding: 0 !important;
+    border: none !important;
+}
+
+label {
+    font-weight: normal !important;
+    color: #666;
+    font-size: 12px;
+}
+
+.required label, label.required {
+    font-weight: bold !important;
+    color: #333 !important;
+}
+
+/* RADIO BUTTONS */
+
+form ul.radiolist li {
+    list-style-type: none;
+}
+
+form ul.radiolist label {
+    float: none;
+    display: inline;
+}
+
+form ul.inline {
+    margin-left: 0;
+    padding: 0;
+}
+
+form ul.inline li {
+    float: left;
+    padding-right: 7px;
+}
+
+/* ALIGNED FIELDSETS */
+
+.aligned label {
+    display: block;
+    padding: 3px 10px 0 0;
+    float: left;
+    width: 8em;
+}
+
+.aligned ul label {
+    display: inline;
+    float: none;
+    width: auto;
+}
+
+.colMS .aligned .vLargeTextField, .colMS .aligned .vXMLLargeTextField {
+    width: 350px;
+}
+
+form .aligned p, form .aligned ul {
+    margin-left: 7em;
+    padding-left: 30px;
+}
+
+form .aligned table p {
+    margin-left: 0;
+    padding-left: 0;
+}
+
+form .aligned p.help {
+    padding-left: 38px;
+}
+
+.aligned .vCheckboxLabel {
+    float: none !important;
+    display: inline;
+    padding-left: 4px;
+}
+
+.colM .aligned .vLargeTextField, .colM .aligned .vXMLLargeTextField {
+    width: 610px;
+}
+
+.checkbox-row p.help {
+    margin-left: 0;
+    padding-left: 0 !important;
+}
+
+fieldset .field-box {
+    float: left;
+    margin-right: 20px;
+}
+
+/* WIDE FIELDSETS */
+
+.wide label {
+    width: 15em !important;
+}
+
+form .wide p {
+    margin-left: 15em;
+}
+
+form .wide p.help {
+    padding-left: 38px;
+}
+
+.colM fieldset.wide .vLargeTextField, .colM fieldset.wide .vXMLLargeTextField {
+    width: 450px;
+}
+
+/* COLLAPSED FIELDSETS */
+
+fieldset.collapsed * {
+    display: none;
+}
+
+fieldset.collapsed h2, fieldset.collapsed {
+    display: block !important;
+}
+
+fieldset.collapsed h2 {
+    background-image: url(../img/nav-bg.gif);
+    background-position: bottom left;
+    color: #999;
+}
+
+fieldset.collapsed .collapse-toggle {
+    background: transparent;
+    display: inline !important;
+}
+
+/* MONOSPACE TEXTAREAS */
+
+fieldset.monospace textarea {
+    font-family: "Bitstream Vera Sans Mono",Monaco,"Courier New",Courier,monospace;
+}
+
+/* SUBMIT ROW */
+
+.submit-row {
+    padding: 5px 7px;
+    text-align: right;
+    background: white url(../img/nav-bg.gif) 0 100% repeat-x;
+    border: 1px solid #ccc;
+    margin: 5px 0;
+    overflow: hidden;
+}
+
+body.popup .submit-row {
+    overflow: auto;
+}
+
+.submit-row input {
+    margin: 0 0 0 5px;
+}
+
+.submit-row p {
+    margin: 0.3em;
+}
+
+.submit-row p.deletelink-box {
+    float: left;
+}
+
+.submit-row .deletelink {
+    background: url(../img/icon_deletelink.gif) 0 50% no-repeat;
+    padding-left: 14px;
+}
+
+/* CUSTOM FORM FIELDS */
+
+.vSelectMultipleField {
+    vertical-align: top !important;
+}
+
+.vCheckboxField {
+    border: none;
+}
+
+.vDateField, .vTimeField {
+    margin-right: 2px;
+}
+
+.vURLField {
+    width: 30em;
+}
+
+.vLargeTextField, .vXMLLargeTextField {
+    width: 48em;
+}
+
+.flatpages-flatpage #id_content {
+    height: 40.2em;
+}
+
+.module table .vPositiveSmallIntegerField {
+    width: 2.2em;
+}
+
+.vTextField {
+    width: 20em;
+}
+
+.vIntegerField {
+    width: 5em;
+}
+
+.vForeignKeyRawIdAdminField {
+    width: 5em;
+}
+
+/* INLINES */
+
+.inline-group {
+    padding: 0;
+    border: 1px solid #ccc;
+    margin: 10px 0;
+}
+
+.inline-group .aligned label {
+    width: 8em;
+}
+
+.inline-related {
+    position: relative;
+}
+
+.inline-related h3 {
+    margin: 0;
+    color: #666;
+    padding: 3px 5px;
+    font-size: 11px;
+    background: #e1e1e1 url(../img/nav-bg.gif) top left repeat-x;
+    border-bottom: 1px solid #ddd;
+}
+
+.inline-related h3 span.delete {
+    float: right;
+}
+
+.inline-related h3 span.delete label {
+    margin-left: 2px;
+    font-size: 11px;
+}
+
+.inline-related fieldset {
+    margin: 0;
+    background: #fff;
+    border: none;
+}
+
+.inline-related fieldset.module h3 {
+    margin: 0;
+    padding: 2px 5px 3px 5px;
+    font-size: 11px;
+    text-align: left;
+    font-weight: bold;
+    background: #bcd;
+    color: #fff;
+}
+
+.inline-group .tabular fieldset.module {
+    border: none;
+    border-bottom: 1px solid #ddd;
+}
+
+.inline-related.tabular fieldset.module table {
+    width: 100%;
+}
+
+.last-related fieldset {
+    border: none;
+}
+
+.inline-group .tabular tr.has_original td {
+    padding-top: 2em;
+}
+
+.inline-group .tabular tr td.original {
+    padding: 2px 0 0 0;
+    width: 0;
+    _position: relative;
+}
+
+.inline-group .tabular th.original {
+    width: 0px;
+    padding: 0;
+}
+
+.inline-group .tabular td.original p {
+    position: absolute;
+    left: 0;
+    height: 1.1em;
+    padding: 2px 7px;
+    overflow: hidden;
+    font-size: 9px;
+    font-weight: bold;
+    color: #666;
+    _width: 700px;
+}
+
+.inline-group ul.tools {
+    padding: 0;
+    margin: 0;
+    list-style: none;
+}
+
+.inline-group ul.tools li {
+    display: inline;
+    padding: 0 5px;
+}
+
+.inline-group div.add-row,
+.inline-group .tabular tr.add-row td {
+    color: #666;
+    padding: 3px 5px;
+    border-bottom: 1px solid #ddd;
+    background: #e1e1e1 url(../img/nav-bg.gif) top left repeat-x;
+}
+
+.inline-group .tabular tr.add-row td {
+    padding: 4px 5px 3px;
+    border-bottom: none;
+}
+
+.inline-group ul.tools a.add,
+.inline-group div.add-row a,
+.inline-group .tabular tr.add-row td a {
+    background: url(../img/icon_addlink.gif) 0 50% no-repeat;
+    padding-left: 14px;
+    font-size: 11px;
+    outline: 0; /* Remove dotted border around link */
+}
+
+.empty-form {
+    display: none;
+}
diff --git a/static/admin/css/ie.css b/static/admin/css/ie.css
new file mode 100755 (executable)
index 0000000..fd00f7f
--- /dev/null
@@ -0,0 +1,63 @@
+/* IE 6 & 7 */
+
+/* Proper fixed width for dashboard in IE6 */
+
+.dashboard #content {
+    *width: 768px;
+}
+
+.dashboard #content-main {
+    *width: 535px;
+}
+
+/* IE 6 ONLY */
+
+/* Keep header from flowing off the page */
+
+#container {
+    _position: static;
+}
+
+/* Put the right sidebars back on the page */
+
+.colMS #content-related {
+    _margin-right: 0;
+    _margin-left: 10px;
+    _position: static;
+}
+
+/* Put the left sidebars back on the page */
+
+.colSM #content-related {
+    _margin-right: 10px;
+    _margin-left: -115px;
+    _position: static;
+}
+
+.form-row {
+    _height: 1%;
+}
+
+/* Fix right margin for changelist filters in IE6 */
+
+#changelist-filter ul {
+    _margin-right: -10px;
+}
+
+/* IE ignores min-height, but treats height as if it were min-height */
+
+.change-list .filtered {
+    _height: 400px;
+}
+
+/* IE doesn't know alpha transparency in PNGs */
+
+.inline-deletelink {
+    background: transparent url(../img/inline-delete-8bit.png) no-repeat;
+}
+
+/* IE7 doesn't support inline-block */
+.change-list ul.toplinks li {
+    zoom: 1;
+    *display: inline;
+}
\ No newline at end of file
diff --git a/static/admin/css/login.css b/static/admin/css/login.css
new file mode 100755 (executable)
index 0000000..8872ade
--- /dev/null
@@ -0,0 +1,57 @@
+/* LOGIN FORM */
+
+body.login {
+    background: #eee;
+}
+
+.login #container {
+    background: white;
+    border: 1px solid #ccc;
+    width: 28em;
+    min-width: 300px;
+    margin-left: auto;
+    margin-right: auto;
+    margin-top: 100px;
+}
+
+.login #content-main {
+    width: 100%;
+}
+
+.login form {
+    margin-top: 1em;
+}
+
+.login .form-row {
+    padding: 4px 0;
+    float: left;
+    width: 100%;
+}
+
+.login .form-row label {
+    float: left;
+    width: 9em;
+    padding-right: 0.5em;
+    line-height: 2em;
+    text-align: right;
+    font-size: 1em;
+    color: #333;
+}
+
+.login .form-row #id_username, .login .form-row #id_password {
+    width: 14em;
+}
+
+.login span.help {
+    font-size: 10px;
+    display: block;
+}
+
+.login .submit-row {
+    clear: both;
+    padding: 1em 0 0 9.4em;
+}
+
+.login .password-reset-link {
+    text-align: center;
+}
diff --git a/static/admin/css/mystyle.css b/static/admin/css/mystyle.css
new file mode 100755 (executable)
index 0000000..7e3162c
--- /dev/null
@@ -0,0 +1,61 @@
+/* elements */
+#banner {
+  float:left;
+  width:70%;
+  padding: 5px;
+}
+#banner img {
+  float:left;
+  margin-right:2%;
+  /*border:1px solid #BBD8EC;*/
+}
+#banner h1 {
+  margin:0;
+  padding:0;
+  font:normal 220% "trebuchet ms", verdana, arial, helvetica, sans-serif;
+  color: aqua;
+}
+#banner h1 a, h1 a:visited {
+  background:inherit;
+  color:#5f5f5f;
+  text-decoration:none;
+}
+#banner h1 a:hover {
+  background:inherit;
+  color:#d15517;
+  text-decoration:none;
+}
+#banner h2 {
+  margin:0;
+  padding:0;
+}
+
+#chapeau {
+    display: block;
+    clear: both;
+    font-style: italic;
+    border: #DEDEDE 1px solid;
+    padding: 8px 4px;
+    margin: 10px;
+}
+
+#user-actions {
+    float: right;
+    padding: 5px;
+}
+
+#user-actions .username {
+    color: #D15517;
+}
+
+#user-actions li {
+    list-style-type: none;
+    text-align: right;
+    font-size: 1em;
+    line-height: 1.6em;
+}
+
+#user-actions a {
+    text-decoration: none;
+}
+
diff --git a/static/admin/css/rtl.css b/static/admin/css/rtl.css
new file mode 100755 (executable)
index 0000000..82d1602
--- /dev/null
@@ -0,0 +1,245 @@
+body {
+    direction: rtl;
+}
+
+/* LOGIN */
+
+.login .form-row {
+    float: right;
+}
+
+.login .form-row label {
+    float: right;
+    padding-left: 0.5em;
+    padding-right: 0;
+    text-align: left;
+}
+
+.login .submit-row {
+    clear: both;
+    padding: 1em 9.4em 0 0;
+}
+
+/* GLOBAL */
+
+th {
+    text-align: right;
+}
+
+.module h2, .module caption {
+    text-align: right;
+}
+
+.addlink, .changelink {
+    padding-left: 0px;
+    padding-right: 12px;
+    background-position: 100% 0.2em;
+}
+
+.deletelink {
+    padding-left: 0px;
+    padding-right: 12px;
+    background-position: 100% 0.25em;
+}
+
+.object-tools {
+    float: left;
+}
+
+thead th:first-child,
+tfoot td:first-child {
+    border-left: 1px solid #ddd !important;
+}
+
+/* LAYOUT */
+
+#user-tools {
+    right: auto;
+    left: 0;
+    text-align: left;
+}
+
+div.breadcrumbs {
+    text-align: right;
+}
+
+#content-main {
+    float: right;
+}
+
+#content-related {
+    float: left;
+    margin-left: -19em;
+    margin-right: auto;
+}
+
+.colMS {
+    margin-left: 20em !important;
+    margin-right: 10px !important;
+}
+
+/* SORTABLE TABLES */
+
+table thead th.sorted .sortoptions {
+   float: left;
+}
+
+/* dashboard styles */
+
+.dashboard .module table td a {
+    padding-left: .6em;
+    padding-right: 12px;
+}
+
+/* changelists styles */
+
+.change-list .filtered {
+    background: white url(../img/changelist-bg_rtl.gif) top left repeat-y !important;
+}
+
+.change-list .filtered table {
+    border-left: 1px solid #ddd;
+    border-right: 0px none;
+}
+
+#changelist-filter {
+    right: auto;
+    left: 0;
+    border-left: 0px none;
+    border-right: 1px solid #ddd;
+}
+
+.change-list .filtered .results, .change-list .filtered .paginator, .filtered #toolbar, .filtered div.xfull {
+    margin-right: 0px !important;
+    margin-left: 160px !important;
+}
+
+#changelist-filter li.selected {
+    border-left: 0px none;
+    padding-left: 0px;
+    margin-left: 0;
+    border-right: 5px solid #ccc;
+    padding-right: 5px;
+    margin-right: -10px;
+}
+
+.filtered .actions {
+    border-left:1px solid #DDDDDD;
+    margin-left:160px !important;
+    border-right: 0 none;
+    margin-right:0 !important;
+}
+
+#changelist table tbody td:first-child, #changelist table tbody th:first-child {
+    border-right: 0;
+    border-left: 1px solid #ddd;
+}
+
+/* FORMS */
+
+.aligned label {
+    padding: 0 0 3px 1em;
+    float: right;
+}
+
+.submit-row {
+    text-align: left
+}
+
+.submit-row p.deletelink-box {
+    float: right;
+}
+
+.submit-row .deletelink {
+    background: url(../img/icon_deletelink.gif) 0 50% no-repeat;
+    padding-right: 14px;
+}
+
+.vDateField, .vTimeField {
+    margin-left: 2px;
+}
+
+form ul.inline li {
+    float: right;
+    padding-right: 0;
+    padding-left: 7px;
+}
+
+input[type=submit].default, .submit-row input.default {
+    float: left;
+}
+
+fieldset .field-box {
+    float: right;
+    margin-left: 20px;
+    margin-right: 0;
+}
+
+.errorlist li {
+    background-position: 100% .3em;
+    padding: 4px 25px 4px 5px;
+}
+
+.errornote {
+    background-position: 100% .3em;
+    padding: 4px 25px 4px 5px;
+}
+
+/* WIDGETS */
+
+.calendarnav-previous {
+    top: 0;
+    left: auto;
+    right: 0;
+}
+
+.calendarnav-next {
+    top: 0;
+    right: auto;
+    left: 0;
+}
+
+.calendar caption, .calendarbox h2 {
+    text-align: center;
+}
+
+.selector {
+    float: right;
+}
+
+.selector .selector-filter {
+    text-align: right;
+}
+
+.inline-deletelink {
+    float: left;
+}
+
+/* MISC */
+
+.inline-related h2, .inline-group h2 {
+    text-align: right
+}
+
+.inline-related h3 span.delete {
+    padding-right: 20px;
+    padding-left: inherit;
+    left: 10px;
+    right: inherit;
+    float:left;
+}
+
+.inline-related h3 span.delete label {
+    margin-left: inherit;
+    margin-right: 2px;
+}
+
+/* IE7 specific bug fixes */
+
+div.colM {
+    position: relative;
+}
+
+.submit-row input {
+    float: left;
+}
\ No newline at end of file
diff --git a/static/admin/css/widgets.css b/static/admin/css/widgets.css
new file mode 100755 (executable)
index 0000000..2989f2f
--- /dev/null
@@ -0,0 +1,562 @@
+/* SELECTOR (FILTER INTERFACE) */
+
+.selector {
+    width: 580px;
+    float: left;
+}
+
+.selector select {
+    width: 270px;
+    height: 17.2em;
+}
+
+.selector-available, .selector-chosen {
+    float: left;
+    width: 270px;
+    text-align: center;
+    margin-bottom: 5px;
+}
+
+.selector-chosen select {
+    border-top: none;
+}
+
+.selector-available h2, .selector-chosen h2 {
+    border: 1px solid #ccc;
+}
+
+.selector .selector-available h2 {
+    background: white url(../img/nav-bg.gif) bottom left repeat-x;
+    color: #666;
+}
+
+.selector .selector-filter {
+    background: white;
+    border: 1px solid #ccc;
+    border-width: 0 1px;
+    padding: 3px;
+    color: #999;
+    font-size: 10px;
+    margin: 0;
+    text-align: left;
+}
+
+.selector .selector-filter label {
+    width: 16px;
+    padding: 2px;
+}
+
+.selector .selector-available input {
+    width: 230px;
+}
+
+.selector ul.selector-chooser {
+    float: left;
+    width: 22px;
+    height: 50px;
+    background: url(../img/chooser-bg.gif) top center no-repeat;
+    margin: 10em 5px 0 5px;
+    padding: 0;
+}
+
+.selector-chooser li {
+    margin: 0;
+    padding: 3px;
+    list-style-type: none;
+}
+
+.selector select {
+    margin-bottom: 10px;
+    margin-top: 0;
+}
+
+.selector-add, .selector-remove {
+    width: 16px;
+    height: 16px;
+    display: block;
+    text-indent: -3000px;
+    overflow: hidden;
+}
+
+.selector-add {
+    background: url(../img/selector-icons.gif) 0 -161px no-repeat;
+    cursor: default;
+    margin-bottom: 2px;
+}
+
+.active.selector-add {
+    background: url(../img/selector-icons.gif) 0 -187px no-repeat;
+    cursor: pointer;
+}
+
+.selector-remove {
+    background: url(../img/selector-icons.gif) 0 -109px no-repeat;
+    cursor: default;
+}
+
+.active.selector-remove {
+    background: url(../img/selector-icons.gif) 0 -135px no-repeat;
+    cursor: pointer;
+}
+
+a.selector-chooseall, a.selector-clearall {
+    display: inline-block;
+    text-align: left;
+    margin-left: auto;
+    margin-right: auto;
+    font-weight: bold;
+    color: #666;
+}
+
+a.selector-chooseall {
+    padding: 3px 18px 3px 0;
+}
+
+a.selector-clearall {
+    padding: 3px 0 3px 18px;
+}
+
+a.active.selector-chooseall:hover, a.active.selector-clearall:hover {
+    color: #036;
+}
+
+a.selector-chooseall {
+    background: url(../img/selector-icons.gif) right -263px no-repeat;
+    cursor: default;
+}
+
+a.active.selector-chooseall {
+    background: url(../img/selector-icons.gif) right -289px no-repeat;
+    cursor: pointer;
+}
+
+a.selector-clearall {
+    background: url(../img/selector-icons.gif) left -211px no-repeat;
+    cursor: default;
+}
+
+a.active.selector-clearall {
+    background: url(../img/selector-icons.gif) left -237px no-repeat;
+    cursor: pointer;
+}
+
+/* STACKED SELECTORS */
+
+.stacked {
+    float: left;
+    width: 500px;
+}
+
+.stacked select {
+    width: 480px;
+    height: 10.1em;
+}
+
+.stacked .selector-available, .stacked .selector-chosen {
+    width: 480px;
+}
+
+.stacked .selector-available {
+    margin-bottom: 0;
+}
+
+.stacked .selector-available input {
+    width: 442px;
+}
+
+.stacked ul.selector-chooser {
+    height: 22px;
+    width: 50px;
+    margin: 0 0 3px 40%;
+    background: url(../img/chooser_stacked-bg.gif) top center no-repeat;
+}
+
+.stacked .selector-chooser li {
+    float: left;
+    padding: 3px 3px 3px 5px;
+}
+
+.stacked .selector-chooseall, .stacked .selector-clearall {
+    display: none;
+}
+
+.stacked .selector-add {
+    background: url(../img/selector-icons.gif) 0 -57px no-repeat;
+    cursor: default;
+}
+
+.stacked .active.selector-add {
+    background: url(../img/selector-icons.gif) 0 -83px no-repeat;
+    cursor: pointer;
+}
+
+.stacked .selector-remove {
+    background: url(../img/selector-icons.gif) 0 -5px no-repeat;
+    cursor: default;
+}
+
+.stacked .active.selector-remove {
+    background: url(../img/selector-icons.gif) 0 -31px no-repeat;
+    cursor: pointer;
+}
+
+/* DATE AND TIME */
+
+p.datetime {
+    line-height: 20px;
+    margin: 0;
+    padding: 0;
+    color: #666;
+    font-size: 11px;
+    font-weight: bold;
+}
+
+.datetime span {
+    font-size: 11px;
+    color: #ccc;
+    font-weight: normal;
+    white-space: nowrap;
+}
+
+table p.datetime {
+    font-size: 10px;
+    margin-left: 0;
+    padding-left: 0;
+}
+
+/* FILE UPLOADS */
+
+p.file-upload {
+    line-height: 20px;
+    margin: 0;
+    padding: 0;
+    color: #666;
+    font-size: 11px;
+    font-weight: bold;
+}
+
+.file-upload a {
+    font-weight: normal;
+}
+
+.file-upload .deletelink {
+    margin-left: 5px;
+}
+
+span.clearable-file-input label {
+    color: #333;
+    font-size: 11px;
+    display: inline;
+    float: none;
+}
+
+/* CALENDARS & CLOCKS */
+
+.calendarbox, .clockbox {
+    margin: 5px auto;
+    font-size: 11px;
+    width: 16em;
+    text-align: center;
+    background: white;
+    position: relative;
+}
+
+.clockbox {
+    width: auto;
+}
+
+.calendar {
+    margin: 0;
+    padding: 0;
+}
+
+.calendar table {
+    margin: 0;
+    padding: 0;
+    border-collapse: collapse;
+    background: white;
+    width: 100%;
+}
+
+.calendar caption, .calendarbox h2 {
+    margin: 0;
+    font-size: 11px;
+    text-align: center;
+    border-top: none;
+}
+
+.calendar th {
+    font-size: 10px;
+    color: #666;
+    padding: 2px 3px;
+    text-align: center;
+    background: #e1e1e1 url(../img/nav-bg.gif) 0 50% repeat-x;
+    border-bottom: 1px solid #ddd;
+}
+
+.calendar td {
+    font-size: 11px;
+    text-align: center;
+    padding: 0;
+    border-top: 1px solid #eee;
+    border-bottom: none;
+}
+
+.calendar td.selected a {
+    background: #C9DBED;
+}
+
+.calendar td.nonday {
+    background: #efefef;
+}
+
+.calendar td.today a {
+    background: #ffc;
+}
+
+.calendar td a, .timelist a {
+    display: block;
+    font-weight: bold;
+    padding: 4px;
+    text-decoration: none;
+    color: #444;
+}
+
+.calendar td a:hover, .timelist a:hover {
+    background: #5b80b2;
+    color: white;
+}
+
+.calendar td a:active, .timelist a:active {
+    background: #036;
+    color: white;
+}
+
+.calendarnav {
+    font-size: 10px;
+    text-align: center;
+    color: #ccc;
+    margin: 0;
+    padding: 1px 3px;
+}
+
+.calendarnav a:link, #calendarnav a:visited, #calendarnav a:hover {
+    color: #999;
+}
+
+.calendar-shortcuts {
+    background: white;
+    font-size: 10px;
+    line-height: 11px;
+    border-top: 1px solid #eee;
+    padding: 3px 0 4px;
+    color: #ccc;
+}
+
+.calendarbox .calendarnav-previous, .calendarbox .calendarnav-next {
+    display: block;
+    position: absolute;
+    font-weight: bold;
+    font-size: 12px;
+    background: #C9DBED url(../img/default-bg.gif) bottom left repeat-x;
+    padding: 1px 4px 2px 4px;
+    color: white;
+}
+
+.calendarnav-previous:hover, .calendarnav-next:hover {
+    background: #036;
+}
+
+.calendarnav-previous {
+    top: 0;
+    left: 0;
+}
+
+.calendarnav-next {
+    top: 0;
+    right: 0;
+}
+
+.calendar-cancel {
+    margin: 0 !important;
+    padding: 0 !important;
+    font-size: 10px;
+    background: #e1e1e1 url(../img/nav-bg.gif) 0 50% repeat-x;
+    border-top: 1px solid #ddd;
+}
+
+.calendar-cancel:hover {
+    background: #e1e1e1 url(../img/nav-bg-reverse.gif) 0 50% repeat-x;
+}
+
+.calendar-cancel a {
+    color: black;
+    display: block;
+}
+
+ul.timelist, .timelist li {
+    list-style-type: none;
+    margin: 0;
+    padding: 0;
+}
+
+.timelist a {
+    padding: 2px;
+}
+
+/* INLINE ORDERER */
+
+ul.orderer {
+    position: relative;
+    padding: 0 !important;
+    margin: 0 !important;
+    list-style-type: none;
+}
+
+ul.orderer li {
+    list-style-type: none;
+    display: block;
+    padding: 0;
+    margin: 0;
+    border: 1px solid #bbb;
+    border-width: 0 1px 1px 0;
+    white-space: nowrap;
+    overflow: hidden;
+    background: #e2e2e2 url(../img/nav-bg-grabber.gif) repeat-y;
+}
+
+ul.orderer li:hover {
+    cursor: move;
+    background-color: #ddd;
+}
+
+ul.orderer li a.selector {
+    margin-left: 12px;
+    overflow: hidden;
+    width: 83%;
+    font-size: 10px !important;
+    padding: 0.6em 0;
+}
+
+ul.orderer li a:link, ul.orderer li a:visited {
+    color: #333;
+}
+
+ul.orderer li .inline-deletelink {
+    position: absolute;
+    right: 4px;
+    margin-top: 0.6em;
+}
+
+ul.orderer li.selected {
+    background-color: #f8f8f8;
+    border-right-color: #f8f8f8;
+}
+
+ul.orderer li.deleted {
+    background: #bbb url(../img/deleted-overlay.gif);
+}
+
+ul.orderer li.deleted a:link, ul.orderer li.deleted a:visited {
+    color: #888;
+}
+
+ul.orderer li.deleted .inline-deletelink {
+    background-image: url(../img/inline-restore.png);
+}
+
+ul.orderer li.deleted:hover, ul.orderer li.deleted a.selector:hover {
+    cursor: default;
+}
+
+/* EDIT INLINE */
+
+.inline-deletelink {
+    float: right;
+    text-indent: -9999px;
+    background: transparent url(../img/inline-delete.png) no-repeat;
+    width: 15px;
+    height: 15px;
+    border: 0px none;
+    outline: 0; /* Remove dotted border around link */
+}
+
+.inline-deletelink:hover {
+    background-position: -15px 0;
+    cursor: pointer;
+}
+
+.editinline button.addlink {
+    border: 0px none;
+    color: #5b80b2;
+    font-size: 100%;
+    cursor: pointer;
+}
+
+.editinline button.addlink:hover {
+    color: #036;
+    cursor: pointer;
+}
+
+.editinline table .help {
+    text-align: right;
+    float: right;
+    padding-left: 2em;
+}
+
+.editinline tfoot .addlink {
+    white-space: nowrap;
+}
+
+.editinline table thead th:last-child {
+    border-left: none;
+}
+
+.editinline tr.deleted {
+    background: #ddd url(../img/deleted-overlay.gif);
+}
+
+.editinline tr.deleted .inline-deletelink {
+    background-image: url(../img/inline-restore.png);
+}
+
+.editinline tr.deleted td:hover {
+    cursor: default;
+}
+
+.editinline tr.deleted td:first-child {
+    background-image: none !important;
+}
+
+/* EDIT INLINE - STACKED */
+
+.editinline-stacked {
+    min-width: 758px;
+}
+
+.editinline-stacked .inline-object {
+    margin-left: 210px;
+    background: white;
+}
+
+.editinline-stacked .inline-source {
+    float: left;
+    width: 200px;
+    background: #f8f8f8;
+}
+
+.editinline-stacked .inline-splitter {
+    float: left;
+    width: 9px;
+    background: #f8f8f8 url(../img/inline-splitter-bg.gif) 50% 50% no-repeat;
+    border-right: 1px solid #ccc;
+}
+
+.editinline-stacked .controls {
+    clear: both;
+    background: #e1e1e1 url(../img/nav-bg.gif) top left repeat-x;
+    padding: 3px 4px;
+    font-size: 11px;
+    border-top: 1px solid #ddd;
+}
+
diff --git a/static/admin/img/changelist-bg.gif b/static/admin/img/changelist-bg.gif
new file mode 100755 (executable)
index 0000000..7f46994
Binary files /dev/null and b/static/admin/img/changelist-bg.gif differ
diff --git a/static/admin/img/changelist-bg_rtl.gif b/static/admin/img/changelist-bg_rtl.gif
new file mode 100755 (executable)
index 0000000..2379712
Binary files /dev/null and b/static/admin/img/changelist-bg_rtl.gif differ
diff --git a/static/admin/img/chooser-bg.gif b/static/admin/img/chooser-bg.gif
new file mode 100755 (executable)
index 0000000..30e83c2
Binary files /dev/null and b/static/admin/img/chooser-bg.gif differ
diff --git a/static/admin/img/chooser_stacked-bg.gif b/static/admin/img/chooser_stacked-bg.gif
new file mode 100755 (executable)
index 0000000..5d104b6
Binary files /dev/null and b/static/admin/img/chooser_stacked-bg.gif differ
diff --git a/static/admin/img/default-bg-reverse.gif b/static/admin/img/default-bg-reverse.gif
new file mode 100755 (executable)
index 0000000..0873281
Binary files /dev/null and b/static/admin/img/default-bg-reverse.gif differ
diff --git a/static/admin/img/default-bg.gif b/static/admin/img/default-bg.gif
new file mode 100755 (executable)
index 0000000..003aeca
Binary files /dev/null and b/static/admin/img/default-bg.gif differ
diff --git a/static/admin/img/deleted-overlay.gif b/static/admin/img/deleted-overlay.gif
new file mode 100755 (executable)
index 0000000..dc3828f
Binary files /dev/null and b/static/admin/img/deleted-overlay.gif differ
diff --git a/static/admin/img/gis/move_vertex_off.png b/static/admin/img/gis/move_vertex_off.png
new file mode 100755 (executable)
index 0000000..296b2e2
Binary files /dev/null and b/static/admin/img/gis/move_vertex_off.png differ
diff --git a/static/admin/img/gis/move_vertex_on.png b/static/admin/img/gis/move_vertex_on.png
new file mode 100755 (executable)
index 0000000..21f4758
Binary files /dev/null and b/static/admin/img/gis/move_vertex_on.png differ
diff --git a/static/admin/img/icon-no.gif b/static/admin/img/icon-no.gif
new file mode 100755 (executable)
index 0000000..1b4ee58
Binary files /dev/null and b/static/admin/img/icon-no.gif differ
diff --git a/static/admin/img/icon-unknown.gif b/static/admin/img/icon-unknown.gif
new file mode 100755 (executable)
index 0000000..cfd2b02
Binary files /dev/null and b/static/admin/img/icon-unknown.gif differ
diff --git a/static/admin/img/icon-yes.gif b/static/admin/img/icon-yes.gif
new file mode 100755 (executable)
index 0000000..7399282
Binary files /dev/null and b/static/admin/img/icon-yes.gif differ
diff --git a/static/admin/img/icon_addlink.gif b/static/admin/img/icon_addlink.gif
new file mode 100755 (executable)
index 0000000..ee70e1a
Binary files /dev/null and b/static/admin/img/icon_addlink.gif differ
diff --git a/static/admin/img/icon_alert.gif b/static/admin/img/icon_alert.gif
new file mode 100755 (executable)
index 0000000..a1dde26
Binary files /dev/null and b/static/admin/img/icon_alert.gif differ
diff --git a/static/admin/img/icon_calendar.gif b/static/admin/img/icon_calendar.gif
new file mode 100755 (executable)
index 0000000..7587b30
Binary files /dev/null and b/static/admin/img/icon_calendar.gif differ
diff --git a/static/admin/img/icon_changelink.gif b/static/admin/img/icon_changelink.gif
new file mode 100755 (executable)
index 0000000..e1b9afd
Binary files /dev/null and b/static/admin/img/icon_changelink.gif differ
diff --git a/static/admin/img/icon_clock.gif b/static/admin/img/icon_clock.gif
new file mode 100755 (executable)
index 0000000..ff2d57e
Binary files /dev/null and b/static/admin/img/icon_clock.gif differ
diff --git a/static/admin/img/icon_deletelink.gif b/static/admin/img/icon_deletelink.gif
new file mode 100755 (executable)
index 0000000..72523e3
Binary files /dev/null and b/static/admin/img/icon_deletelink.gif differ
diff --git a/static/admin/img/icon_error.gif b/static/admin/img/icon_error.gif
new file mode 100755 (executable)
index 0000000..3730a00
Binary files /dev/null and b/static/admin/img/icon_error.gif differ
diff --git a/static/admin/img/icon_searchbox.png b/static/admin/img/icon_searchbox.png
new file mode 100755 (executable)
index 0000000..8ab579e
Binary files /dev/null and b/static/admin/img/icon_searchbox.png differ
diff --git a/static/admin/img/icon_success.gif b/static/admin/img/icon_success.gif
new file mode 100755 (executable)
index 0000000..5cf90a1
Binary files /dev/null and b/static/admin/img/icon_success.gif differ
diff --git a/static/admin/img/inline-delete-8bit.png b/static/admin/img/inline-delete-8bit.png
new file mode 100755 (executable)
index 0000000..95caf59
Binary files /dev/null and b/static/admin/img/inline-delete-8bit.png differ
diff --git a/static/admin/img/inline-delete.png b/static/admin/img/inline-delete.png
new file mode 100755 (executable)
index 0000000..d59bcd2
Binary files /dev/null and b/static/admin/img/inline-delete.png differ
diff --git a/static/admin/img/inline-restore-8bit.png b/static/admin/img/inline-restore-8bit.png
new file mode 100755 (executable)
index 0000000..e087c8e
Binary files /dev/null and b/static/admin/img/inline-restore-8bit.png differ
diff --git a/static/admin/img/inline-restore.png b/static/admin/img/inline-restore.png
new file mode 100755 (executable)
index 0000000..efdd92a
Binary files /dev/null and b/static/admin/img/inline-restore.png differ
diff --git a/static/admin/img/inline-splitter-bg.gif b/static/admin/img/inline-splitter-bg.gif
new file mode 100755 (executable)
index 0000000..32ac5b3
Binary files /dev/null and b/static/admin/img/inline-splitter-bg.gif differ
diff --git a/static/admin/img/logo.gif b/static/admin/img/logo.gif
new file mode 100755 (executable)
index 0000000..86cfaf5
Binary files /dev/null and b/static/admin/img/logo.gif differ
diff --git a/static/admin/img/nav-bg-grabber.gif b/static/admin/img/nav-bg-grabber.gif
new file mode 100755 (executable)
index 0000000..0a784fa
Binary files /dev/null and b/static/admin/img/nav-bg-grabber.gif differ
diff --git a/static/admin/img/nav-bg-reverse.gif b/static/admin/img/nav-bg-reverse.gif
new file mode 100755 (executable)
index 0000000..f11029f
Binary files /dev/null and b/static/admin/img/nav-bg-reverse.gif differ
diff --git a/static/admin/img/nav-bg-selected.gif b/static/admin/img/nav-bg-selected.gif
new file mode 100755 (executable)
index 0000000..98c5672
Binary files /dev/null and b/static/admin/img/nav-bg-selected.gif differ
diff --git a/static/admin/img/nav-bg.gif b/static/admin/img/nav-bg.gif
new file mode 100755 (executable)
index 0000000..f8402b8
Binary files /dev/null and b/static/admin/img/nav-bg.gif differ
diff --git a/static/admin/img/selector-icons.gif b/static/admin/img/selector-icons.gif
new file mode 100755 (executable)
index 0000000..8809c4f
Binary files /dev/null and b/static/admin/img/selector-icons.gif differ
diff --git a/static/admin/img/selector-search.gif b/static/admin/img/selector-search.gif
new file mode 100755 (executable)
index 0000000..6d5f4c7
Binary files /dev/null and b/static/admin/img/selector-search.gif differ
diff --git a/static/admin/img/sorting-icons.gif b/static/admin/img/sorting-icons.gif
new file mode 100755 (executable)
index 0000000..451aae5
Binary files /dev/null and b/static/admin/img/sorting-icons.gif differ
diff --git a/static/admin/img/tool-left.gif b/static/admin/img/tool-left.gif
new file mode 100755 (executable)
index 0000000..011490f
Binary files /dev/null and b/static/admin/img/tool-left.gif differ
diff --git a/static/admin/img/tool-left_over.gif b/static/admin/img/tool-left_over.gif
new file mode 100755 (executable)
index 0000000..937e07b
Binary files /dev/null and b/static/admin/img/tool-left_over.gif differ
diff --git a/static/admin/img/tool-right.gif b/static/admin/img/tool-right.gif
new file mode 100755 (executable)
index 0000000..cdc140c
Binary files /dev/null and b/static/admin/img/tool-right.gif differ
diff --git a/static/admin/img/tool-right_over.gif b/static/admin/img/tool-right_over.gif
new file mode 100755 (executable)
index 0000000..4db977e
Binary files /dev/null and b/static/admin/img/tool-right_over.gif differ
diff --git a/static/admin/img/tooltag-add.gif b/static/admin/img/tooltag-add.gif
new file mode 100755 (executable)
index 0000000..8b53d49
Binary files /dev/null and b/static/admin/img/tooltag-add.gif differ
diff --git a/static/admin/img/tooltag-add_over.gif b/static/admin/img/tooltag-add_over.gif
new file mode 100755 (executable)
index 0000000..bfc52f1
Binary files /dev/null and b/static/admin/img/tooltag-add_over.gif differ
diff --git a/static/admin/img/tooltag-arrowright.gif b/static/admin/img/tooltag-arrowright.gif
new file mode 100755 (executable)
index 0000000..cdaaae7
Binary files /dev/null and b/static/admin/img/tooltag-arrowright.gif differ
diff --git a/static/admin/img/tooltag-arrowright_over.gif b/static/admin/img/tooltag-arrowright_over.gif
new file mode 100755 (executable)
index 0000000..7163189
Binary files /dev/null and b/static/admin/img/tooltag-arrowright_over.gif differ
diff --git a/static/admin/js/LICENSE-JQUERY.txt b/static/admin/js/LICENSE-JQUERY.txt
new file mode 100755 (executable)
index 0000000..a4c5bd7
--- /dev/null
@@ -0,0 +1,20 @@
+Copyright (c) 2010 John Resig, http://jquery.com/
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of this software and associated documentation files (the
+"Software"), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject to
+the following conditions:
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
\ No newline at end of file
diff --git a/static/admin/js/SelectBox.js b/static/admin/js/SelectBox.js
new file mode 100755 (executable)
index 0000000..f28c861
--- /dev/null
@@ -0,0 +1,111 @@
+var SelectBox = {
+    cache: new Object(),
+    init: function(id) {
+        var box = document.getElementById(id);
+        var node;
+        SelectBox.cache[id] = new Array();
+        var cache = SelectBox.cache[id];
+        for (var i = 0; (node = box.options[i]); i++) {
+            cache.push({value: node.value, text: node.text, displayed: 1});
+        }
+    },
+    redisplay: function(id) {
+        // Repopulate HTML select box from cache
+        var box = document.getElementById(id);
+        box.options.length = 0; // clear all options
+        for (var i = 0, j = SelectBox.cache[id].length; i < j; i++) {
+            var node = SelectBox.cache[id][i];
+            if (node.displayed) {
+                box.options[box.options.length] = new Option(node.text, node.value, false, false);
+            }
+        }
+    },
+    filter: function(id, text) {
+        // Redisplay the HTML select box, displaying only the choices containing ALL
+        // the words in text. (It's an AND search.)
+        var tokens = text.toLowerCase().split(/\s+/);
+        var node, token;
+        for (var i = 0; (node = SelectBox.cache[id][i]); i++) {
+            node.displayed = 1;
+            for (var j = 0; (token = tokens[j]); j++) {
+                if (node.text.toLowerCase().indexOf(token) == -1) {
+                    node.displayed = 0;
+                }
+            }
+        }
+        SelectBox.redisplay(id);
+    },
+    delete_from_cache: function(id, value) {
+        var node, delete_index = null;
+        for (var i = 0; (node = SelectBox.cache[id][i]); i++) {
+            if (node.value == value) {
+                delete_index = i;
+                break;
+            }
+        }
+        var j = SelectBox.cache[id].length - 1;
+        for (var i = delete_index; i < j; i++) {
+            SelectBox.cache[id][i] = SelectBox.cache[id][i+1];
+        }
+        SelectBox.cache[id].length--;
+    },
+    add_to_cache: function(id, option) {
+        SelectBox.cache[id].push({value: option.value, text: option.text, displayed: 1});
+    },
+    cache_contains: function(id, value) {
+        // Check if an item is contained in the cache
+        var node;
+        for (var i = 0; (node = SelectBox.cache[id][i]); i++) {
+            if (node.value == value) {
+                return true;
+            }
+        }
+        return false;
+    },
+    move: function(from, to) {
+        var from_box = document.getElementById(from);
+        var to_box = document.getElementById(to);
+        var option;
+        for (var i = 0; (option = from_box.options[i]); i++) {
+            if (option.selected && SelectBox.cache_contains(from, option.value)) {
+                SelectBox.add_to_cache(to, {value: option.value, text: option.text, displayed: 1});
+                SelectBox.delete_from_cache(from, option.value);
+            }
+        }
+        SelectBox.redisplay(from);
+        SelectBox.redisplay(to);
+    },
+    move_all: function(from, to) {
+        var from_box = document.getElementById(from);
+        var to_box = document.getElementById(to);
+        var option;
+        for (var i = 0; (option = from_box.options[i]); i++) {
+            if (SelectBox.cache_contains(from, option.value)) {
+                SelectBox.add_to_cache(to, {value: option.value, text: option.text, displayed: 1});
+                SelectBox.delete_from_cache(from, option.value);
+            }
+        }
+        SelectBox.redisplay(from);
+        SelectBox.redisplay(to);
+    },
+    sort: function(id) {
+        SelectBox.cache[id].sort( function(a, b) {
+            a = a.text.toLowerCase();
+            b = b.text.toLowerCase();
+            try {
+                if (a > b) return 1;
+                if (a < b) return -1;
+            }
+            catch (e) {
+                // silently fail on IE 'unknown' exception
+            }
+            return 0;
+        } );
+    },
+    select_all: function(id) {
+        var box = document.getElementById(id);
+        for (var i = 0; i < box.options.length; i++) {
+            box.options[i].selected = 'selected';
+        }
+    }
+}
diff --git a/static/admin/js/SelectFilter2.js b/static/admin/js/SelectFilter2.js
new file mode 100755 (executable)
index 0000000..0accd08
--- /dev/null
@@ -0,0 +1,161 @@
+/*
+SelectFilter2 - Turns a multiple-select box into a filter interface.
+
+Requires core.js, SelectBox.js and addevent.js.
+*/
+(function($) {
+function findForm(node) {
+    // returns the node of the form containing the given node
+    if (node.tagName.toLowerCase() != 'form') {
+        return findForm(node.parentNode);
+    }
+    return node;
+}
+
+window.SelectFilter = {
+    init: function(field_id, field_name, is_stacked, admin_media_prefix) {
+        if (field_id.match(/__prefix__/)){
+            // Don't intialize on empty forms.
+            return;
+        }
+        var from_box = document.getElementById(field_id);
+        from_box.id += '_from'; // change its ID
+        from_box.className = 'filtered';
+
+        var ps = from_box.parentNode.getElementsByTagName('p');
+        for (var i=0; i<ps.length; i++) {
+            if (ps[i].className.indexOf("info") != -1) {
+                // Remove <p class="info">, because it just gets in the way.
+                from_box.parentNode.removeChild(ps[i]);
+            } else if (ps[i].className.indexOf("help") != -1) {
+                // Move help text up to the top so it isn't below the select
+                // boxes or wrapped off on the side to the right of the add
+                // button:
+                from_box.parentNode.insertBefore(ps[i], from_box.parentNode.firstChild);
+            }
+        }
+
+        // <div class="selector"> or <div class="selector stacked">
+        var selector_div = quickElement('div', from_box.parentNode);
+        selector_div.className = is_stacked ? 'selector stacked' : 'selector';
+
+        // <div class="selector-available">
+        var selector_available = quickElement('div', selector_div, '');
+        selector_available.className = 'selector-available';
+        var title_available = quickElement('h2', selector_available, interpolate(gettext('Available %s') + ' ', [field_name]));
+        quickElement('img', title_available, '', 'src', admin_media_prefix + 'img/icon-unknown.gif', 'width', '10', 'height', '10', 'class', 'help help-tooltip', 'title', interpolate(gettext('This is the list of available %s. You may choose some by selecting them in the box below and then clicking the "Choose" arrow between the two boxes.'), [field_name]));
+
+        var filter_p = quickElement('p', selector_available, '', 'id', field_id + '_filter');
+        filter_p.className = 'selector-filter';
+
+        var search_filter_label = quickElement('label', filter_p, '', 'for', field_id + "_input");
+
+        var search_selector_img = quickElement('img', search_filter_label, '', 'src', admin_media_prefix + 'img/selector-search.gif', 'class', 'help-tooltip', 'alt', '', 'title', interpolate(gettext("Type into this box to filter down the list of available %s."), [field_name]));
+
+        filter_p.appendChild(document.createTextNode(' '));
+
+        var filter_input = quickElement('input', filter_p, '', 'type', 'text', 'placeholder', gettext("Filter"));
+        filter_input.id = field_id + '_input';
+
+        selector_available.appendChild(from_box);
+        var choose_all = quickElement('a', selector_available, gettext('Choose all'), 'title', interpolate(gettext('Click to choose all %s at once.'), [field_name]), 'href', 'javascript: (function(){ SelectBox.move_all("' + field_id + '_from", "' + field_id + '_to"); SelectFilter.refresh_icons("' + field_id + '");})()', 'id', field_id + '_add_all_link');
+        choose_all.className = 'selector-chooseall';
+
+        // <ul class="selector-chooser">
+        var selector_chooser = quickElement('ul', selector_div, '');
+        selector_chooser.className = 'selector-chooser';
+        var add_link = quickElement('a', quickElement('li', selector_chooser, ''), gettext('Choose'), 'title', gettext('Choose'), 'href', 'javascript: (function(){ SelectBox.move("' + field_id + '_from","' + field_id + '_to"); SelectFilter.refresh_icons("' + field_id + '");})()', 'id', field_id + '_add_link');
+        add_link.className = 'selector-add';
+        var remove_link = quickElement('a', quickElement('li', selector_chooser, ''), gettext('Remove'), 'title', gettext('Remove'), 'href', 'javascript: (function(){ SelectBox.move("' + field_id + '_to","' + field_id + '_from"); SelectFilter.refresh_icons("' + field_id + '");})()', 'id', field_id + '_remove_link');
+        remove_link.className = 'selector-remove';
+
+        // <div class="selector-chosen">
+        var selector_chosen = quickElement('div', selector_div, '');
+        selector_chosen.className = 'selector-chosen';
+        var title_chosen = quickElement('h2', selector_chosen, interpolate(gettext('Chosen %s') + ' ', [field_name]));
+        quickElement('img', title_chosen, '', 'src', admin_media_prefix + 'img/icon-unknown.gif', 'width', '10', 'height', '10', 'class', 'help help-tooltip', 'title', interpolate(gettext('This is the list of chosen %s. You may remove some by selecting them in the box below and then clicking the "Remove" arrow between the two boxes.'), [field_name]));
+
+        var to_box = quickElement('select', selector_chosen, '', 'id', field_id + '_to', 'multiple', 'multiple', 'size', from_box.size, 'name', from_box.getAttribute('name'));
+        to_box.className = 'filtered';
+        var clear_all = quickElement('a', selector_chosen, gettext('Remove all'), 'title', interpolate(gettext('Click to remove all chosen %s at once.'), [field_name]), 'href', 'javascript: (function() { SelectBox.move_all("' + field_id + '_to", "' + field_id + '_from"); SelectFilter.refresh_icons("' + field_id + '");})()', 'id', field_id + '_remove_all_link');
+        clear_all.className = 'selector-clearall';
+
+        from_box.setAttribute('name', from_box.getAttribute('name') + '_old');
+
+        // Set up the JavaScript event handlers for the select box filter interface
+        addEvent(filter_input, 'keyup', function(e) { SelectFilter.filter_key_up(e, field_id); });
+        addEvent(filter_input, 'keydown', function(e) { SelectFilter.filter_key_down(e, field_id); });
+        addEvent(from_box, 'change', function(e) { SelectFilter.refresh_icons(field_id) });
+        addEvent(to_box, 'change', function(e) { SelectFilter.refresh_icons(field_id) });
+        addEvent(from_box, 'dblclick', function() { SelectBox.move(field_id + '_from', field_id + '_to'); SelectFilter.refresh_icons(field_id); });
+        addEvent(to_box, 'dblclick', function() { SelectBox.move(field_id + '_to', field_id + '_from'); SelectFilter.refresh_icons(field_id); });
+        addEvent(findForm(from_box), 'submit', function() { SelectBox.select_all(field_id + '_to'); });
+        SelectBox.init(field_id + '_from');
+        SelectBox.init(field_id + '_to');
+        // Move selected from_box options to to_box
+        SelectBox.move(field_id + '_from', field_id + '_to');
+
+        if (!is_stacked) {
+            // In horizontal mode, give the same height to the two boxes.
+            var j_from_box = $(from_box);
+            var j_to_box = $(to_box);
+            var resize_filters = function() { j_to_box.height($(filter_p).outerHeight() + j_from_box.outerHeight()); }
+            if (j_from_box.outerHeight() > 0) {
+                resize_filters(); // This fieldset is already open. Resize now.
+            } else {
+                // This fieldset is probably collapsed. Wait for its 'show' event.
+                j_to_box.closest('fieldset').one('show.fieldset', resize_filters);
+            }
+        }
+
+        // Initial icon refresh
+        SelectFilter.refresh_icons(field_id);
+    },
+    refresh_icons: function(field_id) {
+        var from = $('#' + field_id + '_from');
+        var to = $('#' + field_id + '_to');
+        var is_from_selected = from.find('option:selected').length > 0;
+        var is_to_selected = to.find('option:selected').length > 0;
+        // Active if at least one item is selected
+        $('#' + field_id + '_add_link').toggleClass('active', is_from_selected);
+        $('#' + field_id + '_remove_link').toggleClass('active', is_to_selected);
+        // Active if the corresponding box isn't empty
+        $('#' + field_id + '_add_all_link').toggleClass('active', from.find('option').length > 0);
+        $('#' + field_id + '_remove_all_link').toggleClass('active', to.find('option').length > 0);
+    },
+    filter_key_up: function(event, field_id) {
+        var from = document.getElementById(field_id + '_from');
+        // don't submit form if user pressed Enter
+        if ((event.which && event.which == 13) || (event.keyCode && event.keyCode == 13)) {
+            from.selectedIndex = 0;
+            SelectBox.move(field_id + '_from', field_id + '_to');
+            from.selectedIndex = 0;
+            return false;
+        }
+        var temp = from.selectedIndex;
+        SelectBox.filter(field_id + '_from', document.getElementById(field_id + '_input').value);
+        from.selectedIndex = temp;
+        return true;
+    },
+    filter_key_down: function(event, field_id) {
+        var from = document.getElementById(field_id + '_from');
+        // right arrow -- move across
+        if ((event.which && event.which == 39) || (event.keyCode && event.keyCode == 39)) {
+            var old_index = from.selectedIndex;
+            SelectBox.move(field_id + '_from', field_id + '_to');
+            from.selectedIndex = (old_index == from.length) ? from.length - 1 : old_index;
+            return false;
+        }
+        // down arrow -- wrap around
+        if ((event.which && event.which == 40) || (event.keyCode && event.keyCode == 40)) {
+            from.selectedIndex = (from.length == from.selectedIndex + 1) ? 0 : from.selectedIndex + 1;
+        }
+        // up arrow -- wrap around
+        if ((event.which && event.which == 38) || (event.keyCode && event.keyCode == 38)) {
+            from.selectedIndex = (from.selectedIndex == 0) ? from.length - 1 : from.selectedIndex - 1;
+        }
+        return true;
+    }
+}
+
+})(django.jQuery);
diff --git a/static/admin/js/actions.js b/static/admin/js/actions.js
new file mode 100755 (executable)
index 0000000..94aa6db
--- /dev/null
@@ -0,0 +1,139 @@
+(function($) {
+       $.fn.actions = function(opts) {
+               var options = $.extend({}, $.fn.actions.defaults, opts);
+               var actionCheckboxes = $(this);
+               var list_editable_changed = false;
+               checker = function(checked) {
+                       if (checked) {
+                               showQuestion();
+                       } else {
+                               reset();
+                       }
+                       $(actionCheckboxes).attr("checked", checked)
+                               .parent().parent().toggleClass(options.selectedClass, checked);
+               }
+               updateCounter = function() {
+                       var sel = $(actionCheckboxes).filter(":checked").length;
+                       $(options.counterContainer).html(interpolate(
+                       ngettext('%(sel)s of %(cnt)s selected', '%(sel)s of %(cnt)s selected', sel), {
+                               sel: sel,
+                               cnt: _actions_icnt
+                       }, true));
+                       $(options.allToggle).attr("checked", function() {
+                               if (sel == actionCheckboxes.length) {
+                                       value = true;
+                                       showQuestion();
+                               } else {
+                                       value = false;
+                                       clearAcross();
+                               }
+                               return value;
+                       });
+               }
+               showQuestion = function() {
+                       $(options.acrossClears).hide();
+                       $(options.acrossQuestions).show();
+                       $(options.allContainer).hide();
+               }
+               showClear = function() {
+                       $(options.acrossClears).show();
+                       $(options.acrossQuestions).hide();
+                       $(options.actionContainer).toggleClass(options.selectedClass);
+                       $(options.allContainer).show();
+                       $(options.counterContainer).hide();
+               }
+               reset = function() {
+                       $(options.acrossClears).hide();
+                       $(options.acrossQuestions).hide();
+                       $(options.allContainer).hide();
+                       $(options.counterContainer).show();
+               }
+               clearAcross = function() {
+                       reset();
+                       $(options.acrossInput).val(0);
+                       $(options.actionContainer).removeClass(options.selectedClass);
+               }
+               // Show counter by default
+               $(options.counterContainer).show();
+               // Check state of checkboxes and reinit state if needed
+               $(this).filter(":checked").each(function(i) {
+                       $(this).parent().parent().toggleClass(options.selectedClass);
+                       updateCounter();
+                       if ($(options.acrossInput).val() == 1) {
+                               showClear();
+                       }
+               });
+               $(options.allToggle).show().click(function() {
+                       checker($(this).attr("checked"));
+                       updateCounter();
+               });
+               $("div.actions span.question a").click(function(event) {
+                       event.preventDefault();
+                       $(options.acrossInput).val(1);
+                       showClear();
+               });
+               $("div.actions span.clear a").click(function(event) {
+                       event.preventDefault();
+                       $(options.allToggle).attr("checked", false);
+                       clearAcross();
+                       checker(0);
+                       updateCounter();
+               });
+               lastChecked = null;
+               $(actionCheckboxes).click(function(event) {
+                       if (!event) { var event = window.event; }
+                       var target = event.target ? event.target : event.srcElement;
+                       if (lastChecked && $.data(lastChecked) != $.data(target) && event.shiftKey == true) {
+                               var inrange = false;
+                               $(lastChecked).attr("checked", target.checked)
+                                       .parent().parent().toggleClass(options.selectedClass, target.checked);
+                               $(actionCheckboxes).each(function() {
+                                       if ($.data(this) == $.data(lastChecked) || $.data(this) == $.data(target)) {
+                                               inrange = (inrange) ? false : true;
+                                       }
+                                       if (inrange) {
+                                               $(this).attr("checked", target.checked)
+                                                       .parent().parent().toggleClass(options.selectedClass, target.checked);
+                                       }
+                               });
+                       }
+                       $(target).parent().parent().toggleClass(options.selectedClass, target.checked);
+                       lastChecked = target;
+                       updateCounter();
+               });
+               $('form#changelist-form table#result_list tr').find('td:gt(0) :input').change(function() {
+                       list_editable_changed = true;
+               });
+               $('form#changelist-form button[name="index"]').click(function(event) {
+                       if (list_editable_changed) {
+                               return confirm(gettext("You have unsaved changes on individual editable fields. If you run an action, your unsaved changes will be lost."));
+                       }
+               });
+               $('form#changelist-form input[name="_save"]').click(function(event) {
+                       var action_changed = false;
+                       $('div.actions select option:selected').each(function() {
+                               if ($(this).val()) {
+                                       action_changed = true;
+                               }
+                       });
+                       if (action_changed) {
+                               if (list_editable_changed) {
+                                       return confirm(gettext("You have selected an action, but you haven't saved your changes to individual fields yet. Please click OK to save. You'll need to re-run the action."));
+                               } else {
+                                       return confirm(gettext("You have selected an action, and you haven't made any changes on individual fields. You're probably looking for the Go button rather than the Save button."));
+                               }
+                       }
+               });
+       }
+       /* Setup plugin defaults */
+       $.fn.actions.defaults = {
+               actionContainer: "div.actions",
+               counterContainer: "span.action-counter",
+               allContainer: "div.actions span.all",
+               acrossInput: "div.actions input.select-across",
+               acrossQuestions: "div.actions span.question",
+               acrossClears: "div.actions span.clear",
+               allToggle: "#action-toggle",
+               selectedClass: "selected"
+       }
+})(django.jQuery);
diff --git a/static/admin/js/actions.min.js b/static/admin/js/actions.min.js
new file mode 100755 (executable)
index 0000000..c4a01e4
--- /dev/null
@@ -0,0 +1,7 @@
+(function(a){a.fn.actions=function(g){var b=a.extend({},a.fn.actions.defaults,g),f=a(this),e=!1;checker=function(c){c?showQuestion():reset();a(f).attr("checked",c).parent().parent().toggleClass(b.selectedClass,c)};updateCounter=function(){var c=a(f).filter(":checked").length;a(b.counterContainer).html(interpolate(ngettext("%(sel)s of %(cnt)s selected","%(sel)s of %(cnt)s selected",c),{sel:c,cnt:_actions_icnt},!0));a(b.allToggle).attr("checked",function(){c==f.length?(value=!0,showQuestion()):(value=
+!1,clearAcross());return value})};showQuestion=function(){a(b.acrossClears).hide();a(b.acrossQuestions).show();a(b.allContainer).hide()};showClear=function(){a(b.acrossClears).show();a(b.acrossQuestions).hide();a(b.actionContainer).toggleClass(b.selectedClass);a(b.allContainer).show();a(b.counterContainer).hide()};reset=function(){a(b.acrossClears).hide();a(b.acrossQuestions).hide();a(b.allContainer).hide();a(b.counterContainer).show()};clearAcross=function(){reset();a(b.acrossInput).val(0);a(b.actionContainer).removeClass(b.selectedClass)};
+a(b.counterContainer).show();a(this).filter(":checked").each(function(){a(this).parent().parent().toggleClass(b.selectedClass);updateCounter();1==a(b.acrossInput).val()&&showClear()});a(b.allToggle).show().click(function(){checker(a(this).attr("checked"));updateCounter()});a("div.actions span.question a").click(function(c){c.preventDefault();a(b.acrossInput).val(1);showClear()});a("div.actions span.clear a").click(function(c){c.preventDefault();a(b.allToggle).attr("checked",!1);clearAcross();checker(0);
+updateCounter()});lastChecked=null;a(f).click(function(c){if(!c)c=window.event;var d=c.target?c.target:c.srcElement;if(lastChecked&&a.data(lastChecked)!=a.data(d)&&!0==c.shiftKey){var e=!1;a(lastChecked).attr("checked",d.checked).parent().parent().toggleClass(b.selectedClass,d.checked);a(f).each(function(){if(a.data(this)==a.data(lastChecked)||a.data(this)==a.data(d))e=e?!1:!0;e&&a(this).attr("checked",d.checked).parent().parent().toggleClass(b.selectedClass,d.checked)})}a(d).parent().parent().toggleClass(b.selectedClass,
+d.checked);lastChecked=d;updateCounter()});a("form#changelist-form table#result_list tr").find("td:gt(0) :input").change(function(){e=!0});a('form#changelist-form button[name="index"]').click(function(){if(e)return confirm(gettext("You have unsaved changes on individual editable fields. If you run an action, your unsaved changes will be lost."))});a('form#changelist-form input[name="_save"]').click(function(){var b=!1;a("div.actions select option:selected").each(function(){a(this).val()&&(b=!0)});
+if(b)return e?confirm(gettext("You have selected an action, but you haven't saved your changes to individual fields yet. Please click OK to save. You'll need to re-run the action.")):confirm(gettext("You have selected an action, and you haven't made any changes on individual fields. You're probably looking for the Go button rather than the Save button."))})};a.fn.actions.defaults={actionContainer:"div.actions",counterContainer:"span.action-counter",allContainer:"div.actions span.all",acrossInput:"div.actions input.select-across",
+acrossQuestions:"div.actions span.question",acrossClears:"div.actions span.clear",allToggle:"#action-toggle",selectedClass:"selected"}})(django.jQuery);
diff --git a/static/admin/js/admin/DateTimeShortcuts.js b/static/admin/js/admin/DateTimeShortcuts.js
new file mode 100755 (executable)
index 0000000..3ecc06f
--- /dev/null
@@ -0,0 +1,288 @@
+// Inserts shortcut buttons after all of the following:
+//     <input type="text" class="vDateField">
+//     <input type="text" class="vTimeField">
+
+var DateTimeShortcuts = {
+    calendars: [],
+    calendarInputs: [],
+    clockInputs: [],
+    calendarDivName1: 'calendarbox', // name of calendar <div> that gets toggled
+    calendarDivName2: 'calendarin',  // name of <div> that contains calendar
+    calendarLinkName: 'calendarlink',// name of the link that is used to toggle
+    clockDivName: 'clockbox',        // name of clock <div> that gets toggled
+    clockLinkName: 'clocklink',      // name of the link that is used to toggle
+    shortCutsClass: 'datetimeshortcuts', // class of the clock and cal shortcuts
+    admin_media_prefix: '',
+    init: function() {
+        // Get admin_media_prefix by grabbing it off the window object. It's
+        // set in the admin/base.html template, so if it's not there, someone's
+        // overridden the template. In that case, we'll set a clearly-invalid
+        // value in the hopes that someone will examine HTTP requests and see it.
+        if (window.__admin_media_prefix__ != undefined) {
+            DateTimeShortcuts.admin_media_prefix = window.__admin_media_prefix__;
+        } else {
+            DateTimeShortcuts.admin_media_prefix = '/missing-admin-media-prefix/';
+        }
+
+        var inputs = document.getElementsByTagName('input');
+        for (i=0; i<inputs.length; i++) {
+            var inp = inputs[i];
+            if (inp.getAttribute('type') == 'text' && inp.className.match(/vTimeField/)) {
+                DateTimeShortcuts.addClock(inp);
+            }
+            else if (inp.getAttribute('type') == 'text' && inp.className.match(/vDateField/)) {
+                DateTimeShortcuts.addCalendar(inp);
+            }
+        }
+    },
+    // Add clock widget to a given field
+    addClock: function(inp) {
+        var num = DateTimeShortcuts.clockInputs.length;
+        DateTimeShortcuts.clockInputs[num] = inp;
+
+        // Shortcut links (clock icon and "Now" link)
+        var shortcuts_span = document.createElement('span');
+        shortcuts_span.className = DateTimeShortcuts.shortCutsClass;
+        inp.parentNode.insertBefore(shortcuts_span, inp.nextSibling);
+        var now_link = document.createElement('a');
+        now_link.setAttribute('href', "javascript:DateTimeShortcuts.handleClockQuicklink(" + num + ", new Date().strftime('" + get_format('TIME_INPUT_FORMATS')[0] + "'));");
+        now_link.appendChild(document.createTextNode(gettext('Now')));
+        var clock_link = document.createElement('a');
+        clock_link.setAttribute('href', 'javascript:DateTimeShortcuts.openClock(' + num + ');');
+        clock_link.id = DateTimeShortcuts.clockLinkName + num;
+        quickElement('img', clock_link, '', 'src', DateTimeShortcuts.admin_media_prefix + 'img/icon_clock.gif', 'alt', gettext('Clock'));
+        shortcuts_span.appendChild(document.createTextNode('\240'));
+        shortcuts_span.appendChild(now_link);
+        shortcuts_span.appendChild(document.createTextNode('\240|\240'));
+        shortcuts_span.appendChild(clock_link);
+
+        // Create clock link div
+        //
+        // Markup looks like:
+        // <div id="clockbox1" class="clockbox module">
+        //     <h2>Choose a time</h2>
+        //     <ul class="timelist">
+        //         <li><a href="#">Now</a></li>
+        //         <li><a href="#">Midnight</a></li>
+        //         <li><a href="#">6 a.m.</a></li>
+        //         <li><a href="#">Noon</a></li>
+        //     </ul>
+        //     <p class="calendar-cancel"><a href="#">Cancel</a></p>
+        // </div>
+
+        var clock_box = document.createElement('div');
+        clock_box.style.display = 'none';
+        clock_box.style.position = 'absolute';
+        clock_box.className = 'clockbox module';
+        clock_box.setAttribute('id', DateTimeShortcuts.clockDivName + num);
+        document.body.appendChild(clock_box);
+        addEvent(clock_box, 'click', DateTimeShortcuts.cancelEventPropagation);
+
+        quickElement('h2', clock_box, gettext('Choose a time'));
+        var time_list = quickElement('ul', clock_box, '');
+        time_list.className = 'timelist';
+        var time_format = get_format('TIME_INPUT_FORMATS')[0];
+        quickElement("a", quickElement("li", time_list, ""), gettext("Now"), "href", "javascript:DateTimeShortcuts.handleClockQuicklink(" + num + ", new Date().strftime('" + time_format + "'));");
+        quickElement("a", quickElement("li", time_list, ""), gettext("Midnight"), "href", "javascript:DateTimeShortcuts.handleClockQuicklink(" + num + ", new Date(1970,1,1,0,0,0,0).strftime('" + time_format + "'));");
+        quickElement("a", quickElement("li", time_list, ""), gettext("6 a.m."), "href", "javascript:DateTimeShortcuts.handleClockQuicklink(" + num + ", new Date(1970,1,1,6,0,0,0).strftime('" + time_format + "'));");
+        quickElement("a", quickElement("li", time_list, ""), gettext("Noon"), "href", "javascript:DateTimeShortcuts.handleClockQuicklink(" + num + ", new Date(1970,1,1,12,0,0,0).strftime('" + time_format + "'));");
+
+        var cancel_p = quickElement('p', clock_box, '');
+        cancel_p.className = 'calendar-cancel';
+        quickElement('a', cancel_p, gettext('Cancel'), 'href', 'javascript:DateTimeShortcuts.dismissClock(' + num + ');');
+        django.jQuery(document).bind('keyup', function(event) {
+            if (event.which == 27) {
+                // ESC key closes popup
+                DateTimeShortcuts.dismissClock(num);
+                event.preventDefault();
+            }
+        });
+    },
+    openClock: function(num) {
+        var clock_box = document.getElementById(DateTimeShortcuts.clockDivName+num)
+        var clock_link = document.getElementById(DateTimeShortcuts.clockLinkName+num)
+
+        // Recalculate the clockbox position
+        // is it left-to-right or right-to-left layout ?
+        if (getStyle(document.body,'direction')!='rtl') {
+            clock_box.style.left = findPosX(clock_link) + 17 + 'px';
+        }
+        else {
+            // since style's width is in em, it'd be tough to calculate
+            // px value of it. let's use an estimated px for now
+            // TODO: IE returns wrong value for findPosX when in rtl mode
+            //       (it returns as it was left aligned), needs to be fixed.
+            clock_box.style.left = findPosX(clock_link) - 110 + 'px';
+        }
+        clock_box.style.top = Math.max(0, findPosY(clock_link) - 30) + 'px';
+
+        // Show the clock box
+        clock_box.style.display = 'block';
+        addEvent(window.document, 'click', function() { DateTimeShortcuts.dismissClock(num); return true; });
+    },
+    dismissClock: function(num) {
+       document.getElementById(DateTimeShortcuts.clockDivName + num).style.display = 'none';
+       window.document.onclick = null;
+    },
+    handleClockQuicklink: function(num, val) {
+       DateTimeShortcuts.clockInputs[num].value = val;
+       DateTimeShortcuts.clockInputs[num].focus();
+       DateTimeShortcuts.dismissClock(num);
+    },
+    // Add calendar widget to a given field.
+    addCalendar: function(inp) {
+        var num = DateTimeShortcuts.calendars.length;
+
+        DateTimeShortcuts.calendarInputs[num] = inp;
+
+        // Shortcut links (calendar icon and "Today" link)
+        var shortcuts_span = document.createElement('span');
+        shortcuts_span.className = DateTimeShortcuts.shortCutsClass;
+        inp.parentNode.insertBefore(shortcuts_span, inp.nextSibling);
+        var today_link = document.createElement('a');
+        today_link.setAttribute('href', 'javascript:DateTimeShortcuts.handleCalendarQuickLink(' + num + ', 0);');
+        today_link.appendChild(document.createTextNode(gettext('Today')));
+        var cal_link = document.createElement('a');
+        cal_link.setAttribute('href', 'javascript:DateTimeShortcuts.openCalendar(' + num + ');');
+        cal_link.id = DateTimeShortcuts.calendarLinkName + num;
+        quickElement('img', cal_link, '', 'src', DateTimeShortcuts.admin_media_prefix + 'img/icon_calendar.gif', 'alt', gettext('Calendar'));
+        shortcuts_span.appendChild(document.createTextNode('\240'));
+        shortcuts_span.appendChild(today_link);
+        shortcuts_span.appendChild(document.createTextNode('\240|\240'));
+        shortcuts_span.appendChild(cal_link);
+
+        // Create calendarbox div.
+        //
+        // Markup looks like:
+        //
+        // <div id="calendarbox3" class="calendarbox module">
+        //     <h2>
+        //           <a href="#" class="link-previous">&lsaquo;</a>
+        //           <a href="#" class="link-next">&rsaquo;</a> February 2003
+        //     </h2>
+        //     <div class="calendar" id="calendarin3">
+        //         <!-- (cal) -->
+        //     </div>
+        //     <div class="calendar-shortcuts">
+        //          <a href="#">Yesterday</a> | <a href="#">Today</a> | <a href="#">Tomorrow</a>
+        //     </div>
+        //     <p class="calendar-cancel"><a href="#">Cancel</a></p>
+        // </div>
+        var cal_box = document.createElement('div');
+        cal_box.style.display = 'none';
+        cal_box.style.position = 'absolute';
+        cal_box.className = 'calendarbox module';
+        cal_box.setAttribute('id', DateTimeShortcuts.calendarDivName1 + num);
+        document.body.appendChild(cal_box);
+        addEvent(cal_box, 'click', DateTimeShortcuts.cancelEventPropagation);
+
+        // next-prev links
+        var cal_nav = quickElement('div', cal_box, '');
+        var cal_nav_prev = quickElement('a', cal_nav, '<', 'href', 'javascript:DateTimeShortcuts.drawPrev('+num+');');
+        cal_nav_prev.className = 'calendarnav-previous';
+        var cal_nav_next = quickElement('a', cal_nav, '>', 'href', 'javascript:DateTimeShortcuts.drawNext('+num+');');
+        cal_nav_next.className = 'calendarnav-next';
+
+        // main box
+        var cal_main = quickElement('div', cal_box, '', 'id', DateTimeShortcuts.calendarDivName2 + num);
+        cal_main.className = 'calendar';
+        DateTimeShortcuts.calendars[num] = new Calendar(DateTimeShortcuts.calendarDivName2 + num, DateTimeShortcuts.handleCalendarCallback(num));
+        DateTimeShortcuts.calendars[num].drawCurrent();
+
+        // calendar shortcuts
+        var shortcuts = quickElement('div', cal_box, '');
+        shortcuts.className = 'calendar-shortcuts';
+        quickElement('a', shortcuts, gettext('Yesterday'), 'href', 'javascript:DateTimeShortcuts.handleCalendarQuickLink(' + num + ', -1);');
+        shortcuts.appendChild(document.createTextNode('\240|\240'));
+        quickElement('a', shortcuts, gettext('Today'), 'href', 'javascript:DateTimeShortcuts.handleCalendarQuickLink(' + num + ', 0);');
+        shortcuts.appendChild(document.createTextNode('\240|\240'));
+        quickElement('a', shortcuts, gettext('Tomorrow'), 'href', 'javascript:DateTimeShortcuts.handleCalendarQuickLink(' + num + ', +1);');
+
+        // cancel bar
+        var cancel_p = quickElement('p', cal_box, '');
+        cancel_p.className = 'calendar-cancel';
+        quickElement('a', cancel_p, gettext('Cancel'), 'href', 'javascript:DateTimeShortcuts.dismissCalendar(' + num + ');');
+        django.jQuery(document).bind('keyup', function(event) {
+            if (event.which == 27) {
+                // ESC key closes popup
+                DateTimeShortcuts.dismissCalendar(num);
+                event.preventDefault();
+            }
+        });
+    },
+    openCalendar: function(num) {
+        var cal_box = document.getElementById(DateTimeShortcuts.calendarDivName1+num)
+        var cal_link = document.getElementById(DateTimeShortcuts.calendarLinkName+num)
+        var inp = DateTimeShortcuts.calendarInputs[num];
+
+        // Determine if the current value in the input has a valid date.
+        // If so, draw the calendar with that date's year and month.
+        if (inp.value) {
+            var date_parts = inp.value.split('-');
+            var year = date_parts[0];
+            var month = parseFloat(date_parts[1]);
+            if (year.match(/\d\d\d\d/) && month >= 1 && month <= 12) {
+                DateTimeShortcuts.calendars[num].drawDate(month, year);
+            }
+        }
+
+        // Recalculate the clockbox position
+        // is it left-to-right or right-to-left layout ?
+        if (getStyle(document.body,'direction')!='rtl') {
+            cal_box.style.left = findPosX(cal_link) + 17 + 'px';
+        }
+        else {
+            // since style's width is in em, it'd be tough to calculate
+            // px value of it. let's use an estimated px for now
+            // TODO: IE returns wrong value for findPosX when in rtl mode
+            //       (it returns as it was left aligned), needs to be fixed.
+            cal_box.style.left = findPosX(cal_link) - 180 + 'px';
+        }
+        cal_box.style.top = Math.max(0, findPosY(cal_link) - 75) + 'px';
+
+        cal_box.style.display = 'block';
+        addEvent(window.document, 'click', function() { DateTimeShortcuts.dismissCalendar(num); return true; });
+    },
+    dismissCalendar: function(num) {
+        document.getElementById(DateTimeShortcuts.calendarDivName1+num).style.display = 'none';
+        window.document.onclick = null;
+    },
+    drawPrev: function(num) {
+        DateTimeShortcuts.calendars[num].drawPreviousMonth();
+    },
+    drawNext: function(num) {
+        DateTimeShortcuts.calendars[num].drawNextMonth();
+    },
+    handleCalendarCallback: function(num) {
+        format = get_format('DATE_INPUT_FORMATS')[0];
+        // the format needs to be escaped a little
+        format = format.replace('\\', '\\\\');
+        format = format.replace('\r', '\\r');
+        format = format.replace('\n', '\\n');
+        format = format.replace('\t', '\\t');
+        format = format.replace("'", "\\'");
+        return ["function(y, m, d) { DateTimeShortcuts.calendarInputs[",
+               num,
+               "].value = new Date(y, m-1, d).strftime('",
+               format,
+               "');DateTimeShortcuts.calendarInputs[",
+               num,
+               "].focus();document.getElementById(DateTimeShortcuts.calendarDivName1+",
+               num,
+               ").style.display='none';}"].join('');
+    },
+    handleCalendarQuickLink: function(num, offset) {
+       var d = new Date();
+       d.setDate(d.getDate() + offset)
+       DateTimeShortcuts.calendarInputs[num].value = d.strftime(get_format('DATE_INPUT_FORMATS')[0]);
+       DateTimeShortcuts.calendarInputs[num].focus();
+       DateTimeShortcuts.dismissCalendar(num);
+    },
+    cancelEventPropagation: function(e) {
+        if (!e) e = window.event;
+        e.cancelBubble = true;
+        if (e.stopPropagation) e.stopPropagation();
+    }
+}
+
+addEvent(window, 'load', DateTimeShortcuts.init);
diff --git a/static/admin/js/admin/RelatedObjectLookups.js b/static/admin/js/admin/RelatedObjectLookups.js
new file mode 100755 (executable)
index 0000000..0b79833
--- /dev/null
@@ -0,0 +1,102 @@
+// Handles related-objects functionality: lookup link for raw_id_fields
+// and Add Another links.
+
+function html_unescape(text) {
+    // Unescape a string that was escaped using django.utils.html.escape.
+    text = text.replace(/&lt;/g, '<');
+    text = text.replace(/&gt;/g, '>');
+    text = text.replace(/&quot;/g, '"');
+    text = text.replace(/&#39;/g, "'");
+    text = text.replace(/&amp;/g, '&');
+    return text;
+}
+
+// IE doesn't accept periods or dashes in the window name, but the element IDs
+// we use to generate popup window names may contain them, therefore we map them
+// to allowed characters in a reversible way so that we can locate the correct 
+// element when the popup window is dismissed.
+function id_to_windowname(text) {
+    text = text.replace(/\./g, '__dot__');
+    text = text.replace(/\-/g, '__dash__');
+    return text;
+}
+
+function windowname_to_id(text) {
+    text = text.replace(/__dot__/g, '.');
+    text = text.replace(/__dash__/g, '-');
+    return text;
+}
+
+function showRelatedObjectLookupPopup(triggeringLink) {
+    var name = triggeringLink.id.replace(/^lookup_/, '');
+    name = id_to_windowname(name);
+    var href;
+    if (triggeringLink.href.search(/\?/) >= 0) {
+        href = triggeringLink.href + '&pop=1';
+    } else {
+        href = triggeringLink.href + '?pop=1';
+    }
+    var win = window.open(href, name, 'height=500,width=800,resizable=yes,scrollbars=yes');
+    win.focus();
+    return false;
+}
+
+function dismissRelatedLookupPopup(win, chosenId) {
+    var name = windowname_to_id(win.name);
+    var elem = document.getElementById(name);
+    if (elem.className.indexOf('vManyToManyRawIdAdminField') != -1 && elem.value) {
+        elem.value += ',' + chosenId;
+    } else {
+        document.getElementById(name).value = chosenId;
+    }
+    win.close();
+}
+
+function showAddAnotherPopup(triggeringLink) {
+    var name = triggeringLink.id.replace(/^add_/, '');
+    name = id_to_windowname(name);
+    href = triggeringLink.href
+    if (href.indexOf('?') == -1) {
+        href += '?_popup=1';
+    } else {
+        href  += '&_popup=1';
+    }
+    var win = window.open(href, name, 'height=500,width=800,resizable=yes,scrollbars=yes');
+    win.focus();
+    return false;
+}
+
+function dismissAddAnotherPopup(win, newId, newRepr) {
+    // newId and newRepr are expected to have previously been escaped by
+    // django.utils.html.escape.
+    newId = html_unescape(newId);
+    newRepr = html_unescape(newRepr);
+    var name = windowname_to_id(win.name);
+    var elem = document.getElementById(name);
+    if (elem) {
+        var elemName = elem.nodeName.toUpperCase();
+        if (elemName == 'SELECT') {
+            var o = new Option(newRepr, newId);
+            elem.options[elem.options.length] = o;
+            o.selected = true;
+        } else if (elemName == 'INPUT') {
+            if (elem.className.indexOf('vManyToManyRawIdAdminField') != -1 && elem.value) {
+                elem.value += ',' + newId;
+            } else {
+                elem.value = newId;
+            }
+        }
+    } else {
+        var toId = name + "_to";
+        elem = document.getElementById(toId);
+        var o = new Option(newRepr, newId);
+        SelectBox.add_to_cache(toId, o);
+        SelectBox.redisplay(toId);
+    }
+    var model_name = name.split('-')[2];
+    if (name.substring(3,18) == 'currentacademic' && (model_name == 'university' || model_name == 'level')) {
+       document.location.reload(true);
+    }
+               
+    win.close();
+}
diff --git a/static/admin/js/admin/ordering.js b/static/admin/js/admin/ordering.js
new file mode 100755 (executable)
index 0000000..595be4d
--- /dev/null
@@ -0,0 +1,137 @@
+addEvent(window, 'load', reorder_init);
+
+var lis;
+var top = 0;
+var left = 0;
+var height = 30;
+
+function reorder_init() {
+    lis = document.getElementsBySelector('ul#orderthese li');
+    var input = document.getElementsBySelector('input[name=order_]')[0];
+    setOrder(input.value.split(','));
+    input.disabled = true;
+    draw();
+    // Now initialize the dragging behavior
+    var limit = (lis.length - 1) * height;
+    for (var i = 0; i < lis.length; i++) {
+        var li = lis[i];
+        var img = document.getElementById('handle'+li.id);
+        li.style.zIndex = 1;
+        Drag.init(img, li, left + 10, left + 10, top + 10, top + 10 + limit);
+        li.onDragStart = startDrag;
+        li.onDragEnd = endDrag;
+        img.style.cursor = 'move';
+    }
+}
+
+function submitOrderForm() {
+    var inputOrder = document.getElementsBySelector('input[name=order_]')[0];
+    inputOrder.value = getOrder();
+    inputOrder.disabled=false;
+}
+
+function startDrag() {
+    this.style.zIndex = '10';
+    this.className = 'dragging';
+}
+
+function endDrag(x, y) {
+    this.style.zIndex = '1';
+    this.className = '';
+    // Work out how far along it has been dropped, using x co-ordinate
+    var oldIndex = this.index;
+    var newIndex = Math.round((y - 10 - top) / height);
+    // 'Snap' to the correct position
+    this.style.top = (10 + top + newIndex * height) + 'px';
+    this.index = newIndex;
+    moveItem(oldIndex, newIndex);
+}
+
+function moveItem(oldIndex, newIndex) {
+    // Swaps two items, adjusts the index and left co-ord for all others
+    if (oldIndex == newIndex) {
+        return; // Nothing to swap;
+    }
+    var direction, lo, hi;
+    if (newIndex > oldIndex) {
+        lo = oldIndex;
+        hi = newIndex;
+        direction = -1;
+    } else {
+        direction = 1;
+        hi = oldIndex;
+        lo = newIndex;
+    }
+    var lis2 = new Array(); // We will build the new order in this array
+    for (var i = 0; i < lis.length; i++) {
+        if (i < lo || i > hi) {
+            // Position of items not between the indexes is unaffected
+            lis2[i] = lis[i];
+            continue;
+        } else if (i == newIndex) {
+            lis2[i] = lis[oldIndex];
+            continue;
+        } else {
+            // Item is between the two indexes - move it along 1
+            lis2[i] = lis[i - direction];
+        }
+    }
+    // Re-index everything
+    reIndex(lis2);
+    lis = lis2;
+    draw();
+//    document.getElementById('hiddenOrder').value = getOrder();
+    document.getElementsBySelector('input[name=order_]')[0].value = getOrder();
+}
+
+function reIndex(lis) {
+    for (var i = 0; i < lis.length; i++) {
+        lis[i].index = i;
+    }
+}
+
+function draw() {
+    for (var i = 0; i < lis.length; i++) {
+        var li = lis[i];
+        li.index = i;
+        li.style.position = 'absolute';
+        li.style.left = (10 + left) + 'px';
+        li.style.top = (10 + top + (i * height)) + 'px';
+    }
+}
+
+function getOrder() {
+    var order = new Array(lis.length);
+    for (var i = 0; i < lis.length; i++) {
+        order[i] = lis[i].id.substring(1, 100);
+    }
+    return order.join(',');
+}
+
+function setOrder(id_list) {
+    /* Set the current order to match the lsit of IDs */
+    var temp_lis = new Array();
+    for (var i = 0; i < id_list.length; i++) {
+        var id = 'p' + id_list[i];
+        temp_lis[temp_lis.length] = document.getElementById(id);
+    }
+    reIndex(temp_lis);
+    lis = temp_lis;
+    draw();
+}
+
+function addEvent(elm, evType, fn, useCapture)
+// addEvent and removeEvent
+// cross-browser event handling for IE5+,  NS6 and Mozilla
+// By Scott Andrew
+{
+  if (elm.addEventListener){
+    elm.addEventListener(evType, fn, useCapture);
+    return true;
+  } else if (elm.attachEvent){
+    var r = elm.attachEvent("on"+evType, fn);
+    return r;
+  } else {
+    elm['on'+evType] = fn;
+  }
+}
diff --git a/static/admin/js/calendar.js b/static/admin/js/calendar.js
new file mode 100755 (executable)
index 0000000..c95a95d
--- /dev/null
@@ -0,0 +1,156 @@
+/*
+calendar.js - Calendar functions by Adrian Holovaty
+*/
+
+function removeChildren(a) { // "a" is reference to an object
+    while (a.hasChildNodes()) a.removeChild(a.lastChild);
+}
+
+// quickElement(tagType, parentReference, textInChildNode, [, attribute, attributeValue ...]);
+function quickElement() {
+    var obj = document.createElement(arguments[0]);
+    if (arguments[2] != '' && arguments[2] != null) {
+        var textNode = document.createTextNode(arguments[2]);
+        obj.appendChild(textNode);
+    }
+    var len = arguments.length;
+    for (var i = 3; i < len; i += 2) {
+        obj.setAttribute(arguments[i], arguments[i+1]);
+    }
+    arguments[1].appendChild(obj);
+    return obj;
+}
+
+// CalendarNamespace -- Provides a collection of HTML calendar-related helper functions
+var CalendarNamespace = {
+    monthsOfYear: gettext('January February March April May June July August September October November December').split(' '),
+    daysOfWeek: gettext('S M T W T F S').split(' '),
+    firstDayOfWeek: parseInt(get_format('FIRST_DAY_OF_WEEK')),
+    isLeapYear: function(year) {
+        return (((year % 4)==0) && ((year % 100)!=0) || ((year % 400)==0));
+    },
+    getDaysInMonth: function(month,year) {
+        var days;
+        if (month==1 || month==3 || month==5 || month==7 || month==8 || month==10 || month==12) {
+            days = 31;
+        }
+        else if (month==4 || month==6 || month==9 || month==11) {
+            days = 30;
+        }
+        else if (month==2 && CalendarNamespace.isLeapYear(year)) {
+            days = 29;
+        }
+        else {
+            days = 28;
+        }
+        return days;
+    },
+    draw: function(month, year, div_id, callback) { // month = 1-12, year = 1-9999
+        var today = new Date();
+        var todayDay = today.getDate();
+        var todayMonth = today.getMonth()+1;
+        var todayYear = today.getFullYear();
+        var todayClass = '';
+
+        month = parseInt(month);
+        year = parseInt(year);
+        var calDiv = document.getElementById(div_id);
+        removeChildren(calDiv);
+        var calTable = document.createElement('table');
+        quickElement('caption', calTable, CalendarNamespace.monthsOfYear[month-1] + ' ' + year);
+        var tableBody = quickElement('tbody', calTable);
+
+        // Draw days-of-week header
+        var tableRow = quickElement('tr', tableBody);
+        for (var i = 0; i < 7; i++) {
+            quickElement('th', tableRow, CalendarNamespace.daysOfWeek[(i + CalendarNamespace.firstDayOfWeek) % 7]);
+        }
+
+        var startingPos = new Date(year, month-1, 1 - CalendarNamespace.firstDayOfWeek).getDay();
+        var days = CalendarNamespace.getDaysInMonth(month, year);
+
+        // Draw blanks before first of month
+        tableRow = quickElement('tr', tableBody);
+        for (var i = 0; i < startingPos; i++) {
+            var _cell = quickElement('td', tableRow, ' ');
+            _cell.style.backgroundColor = '#f3f3f3';
+        }
+
+        // Draw days of month
+        var currentDay = 1;
+        for (var i = startingPos; currentDay <= days; i++) {
+            if (i%7 == 0 && currentDay != 1) {
+                tableRow = quickElement('tr', tableBody);
+            }
+            if ((currentDay==todayDay) && (month==todayMonth) && (year==todayYear)) {
+                todayClass='today';
+            } else {
+                todayClass='';
+            }
+            var cell = quickElement('td', tableRow, '', 'class', todayClass);
+
+            quickElement('a', cell, currentDay, 'href', 'javascript:void(' + callback + '('+year+','+month+','+currentDay+'));');
+            currentDay++;
+        }
+
+        // Draw blanks after end of month (optional, but makes for valid code)
+        while (tableRow.childNodes.length < 7) {
+            var _cell = quickElement('td', tableRow, ' ');
+            _cell.style.backgroundColor = '#f3f3f3';
+        }
+
+        calDiv.appendChild(calTable);
+    }
+}
+
+// Calendar -- A calendar instance
+function Calendar(div_id, callback) {
+    // div_id (string) is the ID of the element in which the calendar will
+    //     be displayed
+    // callback (string) is the name of a JavaScript function that will be
+    //     called with the parameters (year, month, day) when a day in the
+    //     calendar is clicked
+    this.div_id = div_id;
+    this.callback = callback;
+    this.today = new Date();
+    this.currentMonth = this.today.getMonth() + 1;
+    this.currentYear = this.today.getFullYear();
+}
+Calendar.prototype = {
+    drawCurrent: function() {
+        CalendarNamespace.draw(this.currentMonth, this.currentYear, this.div_id, this.callback);
+    },
+    drawDate: function(month, year) {
+        this.currentMonth = month;
+        this.currentYear = year;
+        this.drawCurrent();
+    },
+    drawPreviousMonth: function() {
+        if (this.currentMonth == 1) {
+            this.currentMonth = 12;
+            this.currentYear--;
+        }
+        else {
+            this.currentMonth--;
+        }
+        this.drawCurrent();
+    },
+    drawNextMonth: function() {
+        if (this.currentMonth == 12) {
+            this.currentMonth = 1;
+            this.currentYear++;
+        }
+        else {
+            this.currentMonth++;
+        }
+        this.drawCurrent();
+    },
+    drawPreviousYear: function() {
+        this.currentYear--;
+        this.drawCurrent();
+    },
+    drawNextYear: function() {
+        this.currentYear++;
+        this.drawCurrent();
+    }
+}
diff --git a/static/admin/js/collapse.js b/static/admin/js/collapse.js
new file mode 100755 (executable)
index 0000000..889e1a5
--- /dev/null
@@ -0,0 +1,24 @@
+(function($) {
+       $(document).ready(function() {
+               // Add anchor tag for Show/Hide link
+               $("fieldset.collapse").each(function(i, elem) {
+                       // Don't hide if fields in this fieldset have errors
+                       if ($(elem).find("div.errors").length == 0) {
+                               $(elem).addClass("collapsed").find("h2").first().append(' (<a id="fieldsetcollapser' +
+                                       i +'" class="collapse-toggle" href="#">' + gettext("Show") +
+                                       '</a>)');
+                       }
+               });
+               // Add toggle to anchor tag
+               $("fieldset.collapse a.collapse-toggle").toggle(
+                       function() { // Show
+                               $(this).text(gettext("Hide")).closest("fieldset").removeClass("collapsed").trigger("show.fieldset", [$(this).attr("id")]);
+                               return false;
+                       },
+                       function() { // Hide
+                               $(this).text(gettext("Show")).closest("fieldset").addClass("collapsed").trigger("hide.fieldset", [$(this).attr("id")]);
+                               return false;
+                       }
+               );
+       });
+})(django.jQuery);
diff --git a/static/admin/js/collapse.min.js b/static/admin/js/collapse.min.js
new file mode 100755 (executable)
index 0000000..5e41b3c
--- /dev/null
@@ -0,0 +1,2 @@
+(function(a){a(document).ready(function(){a("fieldset.collapse").each(function(c,b){0==a(b).find("div.errors").length&&a(b).addClass("collapsed").find("h2").first().append(' (<a id="fieldsetcollapser'+c+'" class="collapse-toggle" href="#">'+gettext("Show")+"</a>)")});a("fieldset.collapse a.collapse-toggle").toggle(function(){a(this).text(gettext("Hide")).closest("fieldset").removeClass("collapsed").trigger("show.fieldset",[a(this).attr("id")]);return!1},function(){a(this).text(gettext("Show")).closest("fieldset").addClass("collapsed").trigger("hide.fieldset",
+[a(this).attr("id")]);return!1})})})(django.jQuery);
diff --git a/static/admin/js/compress.py b/static/admin/js/compress.py
new file mode 100755 (executable)
index 0000000..8d2caa2
--- /dev/null
@@ -0,0 +1,47 @@
+#!/usr/bin/env python
+import os
+import optparse
+import subprocess
+import sys
+
+here = os.path.dirname(__file__)
+
+def main():
+    usage = "usage: %prog [file1..fileN]"
+    description = """With no file paths given this script will automatically
+compress all jQuery-based files of the admin app. Requires the Google Closure
+Compiler library and Java version 6 or later."""
+    parser = optparse.OptionParser(usage, description=description)
+    parser.add_option("-c", dest="compiler", default="~/bin/compiler.jar",
+                      help="path to Closure Compiler jar file")
+    parser.add_option("-v", "--verbose",
+                      action="store_true", dest="verbose")
+    parser.add_option("-q", "--quiet",
+                      action="store_false", dest="verbose")
+    (options, args) = parser.parse_args()
+
+    compiler = os.path.expanduser(options.compiler)
+    if not os.path.exists(compiler):
+        sys.exit("Google Closure compiler jar file %s not found. Please use the -c option to specify the path." % compiler)
+
+    if not args:
+        if options.verbose:
+            sys.stdout.write("No filenames given; defaulting to admin scripts\n")
+        args = [os.path.join(here, f) for f in [
+            "actions.js", "collapse.js", "inlines.js", "prepopulate.js"]]
+
+    for arg in args:
+        if not arg.endswith(".js"):
+            arg = arg + ".js"
+        to_compress = os.path.expanduser(arg)
+        if os.path.exists(to_compress):
+            to_compress_min = "%s.min.js" % "".join(arg.rsplit(".js"))
+            cmd = "java -jar %s --js %s --js_output_file %s" % (compiler, to_compress, to_compress_min)
+            if options.verbose:
+                sys.stdout.write("Running: %s\n" % cmd)
+            subprocess.call(cmd.split())
+        else:
+            sys.stdout.write("File %s not found. Sure it exists?\n" % to_compress)
+
+if __name__ == '__main__':
+    main()
diff --git a/static/admin/js/core.js b/static/admin/js/core.js
new file mode 100755 (executable)
index 0000000..ab77650
--- /dev/null
@@ -0,0 +1,211 @@
+// Core javascript helper functions
+
+// basic browser identification & version
+var isOpera = (navigator.userAgent.indexOf("Opera")>=0) && parseFloat(navigator.appVersion);
+var isIE = ((document.all) && (!isOpera)) && parseFloat(navigator.appVersion.split("MSIE ")[1].split(";")[0]);
+
+// Cross-browser event handlers.
+function addEvent(obj, evType, fn) {
+    if (obj.addEventListener) {
+        obj.addEventListener(evType, fn, false);
+        return true;
+    } else if (obj.attachEvent) {
+        var r = obj.attachEvent("on" + evType, fn);
+        return r;
+    } else {
+        return false;
+    }
+}
+
+function removeEvent(obj, evType, fn) {
+    if (obj.removeEventListener) {
+        obj.removeEventListener(evType, fn, false);
+        return true;
+    } else if (obj.detachEvent) {
+        obj.detachEvent("on" + evType, fn);
+        return true;
+    } else {
+        return false;
+    }
+}
+
+// quickElement(tagType, parentReference, textInChildNode, [, attribute, attributeValue ...]);
+function quickElement() {
+    var obj = document.createElement(arguments[0]);
+    if (arguments[2] != '' && arguments[2] != null) {
+        var textNode = document.createTextNode(arguments[2]);
+        obj.appendChild(textNode);
+    }
+    var len = arguments.length;
+    for (var i = 3; i < len; i += 2) {
+        obj.setAttribute(arguments[i], arguments[i+1]);
+    }
+    arguments[1].appendChild(obj);
+    return obj;
+}
+
+// ----------------------------------------------------------------------------
+// Cross-browser xmlhttp object
+// from http://jibbering.com/2002/4/httprequest.html
+// ----------------------------------------------------------------------------
+var xmlhttp;
+/*@cc_on @*/
+/*@if (@_jscript_version >= 5)
+    try {
+        xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
+    } catch (e) {
+        try {
+            xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
+        } catch (E) {
+            xmlhttp = false;
+        }
+    }
+@else
+    xmlhttp = false;
+@end @*/
+if (!xmlhttp && typeof XMLHttpRequest != 'undefined') {
+  xmlhttp = new XMLHttpRequest();
+}
+
+// ----------------------------------------------------------------------------
+// Find-position functions by PPK
+// See http://www.quirksmode.org/js/findpos.html
+// ----------------------------------------------------------------------------
+function findPosX(obj) {
+    var curleft = 0;
+    if (obj.offsetParent) {
+        while (obj.offsetParent) {
+            curleft += obj.offsetLeft - ((isOpera) ? 0 : obj.scrollLeft);
+            obj = obj.offsetParent;
+        }
+        // IE offsetParent does not include the top-level
+        if (isIE && obj.parentElement){
+            curleft += obj.offsetLeft - obj.scrollLeft;
+        }
+    } else if (obj.x) {
+        curleft += obj.x;
+    }
+    return curleft;
+}
+
+function findPosY(obj) {
+    var curtop = 0;
+    if (obj.offsetParent) {
+        while (obj.offsetParent) {
+            curtop += obj.offsetTop - ((isOpera) ? 0 : obj.scrollTop);
+            obj = obj.offsetParent;
+        }
+        // IE offsetParent does not include the top-level
+        if (isIE && obj.parentElement){
+            curtop += obj.offsetTop - obj.scrollTop;
+        }
+    } else if (obj.y) {
+        curtop += obj.y;
+    }
+    return curtop;
+}
+
+//-----------------------------------------------------------------------------
+// Date object extensions
+// ----------------------------------------------------------------------------
+
+Date.prototype.getTwelveHours = function() {
+    hours = this.getHours();
+    if (hours == 0) {
+        return 12;
+    }
+    else {
+        return hours <= 12 ? hours : hours-12
+    }
+}
+
+Date.prototype.getTwoDigitMonth = function() {
+    return (this.getMonth() < 9) ? '0' + (this.getMonth()+1) : (this.getMonth()+1);
+}
+
+Date.prototype.getTwoDigitDate = function() {
+    return (this.getDate() < 10) ? '0' + this.getDate() : this.getDate();
+}
+
+Date.prototype.getTwoDigitTwelveHour = function() {
+    return (this.getTwelveHours() < 10) ? '0' + this.getTwelveHours() : this.getTwelveHours();
+}
+
+Date.prototype.getTwoDigitHour = function() {
+    return (this.getHours() < 10) ? '0' + this.getHours() : this.getHours();
+}
+
+Date.prototype.getTwoDigitMinute = function() {
+    return (this.getMinutes() < 10) ? '0' + this.getMinutes() : this.getMinutes();
+}
+
+Date.prototype.getTwoDigitSecond = function() {
+    return (this.getSeconds() < 10) ? '0' + this.getSeconds() : this.getSeconds();
+}
+
+Date.prototype.getHourMinute = function() {
+    return this.getTwoDigitHour() + ':' + this.getTwoDigitMinute();
+}
+
+Date.prototype.getHourMinuteSecond = function() {
+    return this.getTwoDigitHour() + ':' + this.getTwoDigitMinute() + ':' + this.getTwoDigitSecond();
+}
+
+Date.prototype.strftime = function(format) {
+    var fields = {
+        c: this.toString(),
+        d: this.getTwoDigitDate(),
+        H: this.getTwoDigitHour(),
+        I: this.getTwoDigitTwelveHour(),
+        m: this.getTwoDigitMonth(),
+        M: this.getTwoDigitMinute(),
+        p: (this.getHours() >= 12) ? 'PM' : 'AM',
+        S: this.getTwoDigitSecond(),
+        w: '0' + this.getDay(),
+        x: this.toLocaleDateString(),
+        X: this.toLocaleTimeString(),
+        y: ('' + this.getFullYear()).substr(2, 4),
+        Y: '' + this.getFullYear(),
+        '%' : '%'
+    };
+    var result = '', i = 0;
+    while (i < format.length) {
+        if (format.charAt(i) === '%') {
+            result = result + fields[format.charAt(i + 1)];
+            ++i;
+        }
+        else {
+            result = result + format.charAt(i);
+        }
+        ++i;
+    }
+    return result;
+}
+
+// ----------------------------------------------------------------------------
+// String object extensions
+// ----------------------------------------------------------------------------
+String.prototype.pad_left = function(pad_length, pad_string) {
+    var new_string = this;
+    for (var i = 0; new_string.length < pad_length; i++) {
+        new_string = pad_string + new_string;
+    }
+    return new_string;
+}
+
+// ----------------------------------------------------------------------------
+// Get the computed style for and element
+// ----------------------------------------------------------------------------
+function getStyle(oElm, strCssRule){
+    var strValue = "";
+    if(document.defaultView && document.defaultView.getComputedStyle){
+        strValue = document.defaultView.getComputedStyle(oElm, "").getPropertyValue(strCssRule);
+    }
+    else if(oElm.currentStyle){
+        strCssRule = strCssRule.replace(/\-(\w)/g, function (strMatch, p1){
+            return p1.toUpperCase();
+        });
+        strValue = oElm.currentStyle[strCssRule];
+    }
+    return strValue;
+}
diff --git a/static/admin/js/getElementsBySelector.js b/static/admin/js/getElementsBySelector.js
new file mode 100755 (executable)
index 0000000..15b57a1
--- /dev/null
@@ -0,0 +1,167 @@
+/* document.getElementsBySelector(selector)
+   - returns an array of element objects from the current document
+     matching the CSS selector. Selectors can contain element names, 
+     class names and ids and can be nested. For example:
+     
+       elements = document.getElementsBySelect('div#main p a.external')
+     
+     Will return an array of all 'a' elements with 'external' in their 
+     class attribute that are contained inside 'p' elements that are 
+     contained inside the 'div' element which has id="main"
+
+   New in version 0.4: Support for CSS2 and CSS3 attribute selectors:
+   See http://www.w3.org/TR/css3-selectors/#attribute-selectors
+
+   Version 0.4 - Simon Willison, March 25th 2003
+   -- Works in Phoenix 0.5, Mozilla 1.3, Opera 7, Internet Explorer 6, Internet Explorer 5 on Windows
+   -- Opera 7 fails 
+*/
+
+function getAllChildren(e) {
+  // Returns all children of element. Workaround required for IE5/Windows. Ugh.
+  return e.all ? e.all : e.getElementsByTagName('*');
+}
+
+document.getElementsBySelector = function(selector) {
+  // Attempt to fail gracefully in lesser browsers
+  if (!document.getElementsByTagName) {
+    return new Array();
+  }
+  // Split selector in to tokens
+  var tokens = selector.split(' ');
+  var currentContext = new Array(document);
+  for (var i = 0; i < tokens.length; i++) {
+    token = tokens[i].replace(/^\s+/,'').replace(/\s+$/,'');;
+    if (token.indexOf('#') > -1) {
+      // Token is an ID selector
+