Nettoyage, 1ère passe…
authorProgfou <jean-christophe.andre@auf.org>
Mon, 5 Nov 2012 03:47:15 +0000 (22:47 -0500)
committerProgfou <jean-christophe.andre@auf.org>
Mon, 5 Nov 2012 03:47:15 +0000 (22:47 -0500)
248 files changed:
.gitignore [new file with mode: 0644]
manage.py [new file with mode: 0755]
paf/__init__.py [new file with mode: 0644]
paf/admin.py [new file with mode: 0644]
paf/forms.py [new file with mode: 0644]
paf/migrations/0001_initial.py [new file with mode: 0644]
paf/migrations/0002_auto__add_linguisticlevel__add_student.py [new file with mode: 0644]
paf/migrations/0003_auto__del_field_student_user.py [new file with mode: 0644]
paf/migrations/0004_auto__add_field_student_identifier.py [new file with mode: 0644]
paf/migrations/0005_auto__add_field_student_user.py [new file with mode: 0644]
paf/migrations/0006_auto__del_field_student_user.py [new file with mode: 0644]
paf/migrations/0007_auto__add_faculty__add_university__add_currentacademic.py [new file with mode: 0644]
paf/migrations/0008_auto__add_country__add_continent__add_location.py [new file with mode: 0644]
paf/migrations/0009_auto__add_area__add_field_location_area__add_field_location_city__add_.py [new file with mode: 0644]
paf/migrations/0010_auto__add_field_currentacademic_university__add_field_currentacademic_.py [new file with mode: 0644]
paf/migrations/0011_auto__add_field_currentacademic_student.py [new file with mode: 0644]
paf/migrations/0012_auto__del_location__del_country__del_continent__del_area__add_level__c.py [new file with mode: 0644]
paf/migrations/0013_auto__add_field_currentacademic_entry_year__add_field_currentacademic_.py [new file with mode: 0644]
paf/migrations/0014_auto__add_diplomaobtained.py [new file with mode: 0644]
paf/migrations/0015_auto__add_country__add_employment__add_city__add_entreprise__add_field.py [new file with mode: 0644]
paf/migrations/__init__.py [new file with mode: 0644]
paf/models.py [new file with mode: 0644]
paf/templates/base_enseignant.html [new file with mode: 0644]
paf/templates/base_etudiant.html [new file with mode: 0644]
paf/templates/edit_info copy.html [new file with mode: 0644]
paf/templates/edit_info.html [new file with mode: 0644]
paf/templates/etablissement_detail.html [new file with mode: 0644]
paf/templates/etablissement_list.html [new file with mode: 0644]
paf/templates/personne_detail.html [new file with mode: 0644]
paf/templates/personne_list.html [new file with mode: 0644]
paf/templates/register.html [new file with mode: 0644]
paf/templates/register_success.html [new file with mode: 0644]
paf/templates/student_info.html [new file with mode: 0644]
paf/templates/student_list.html [new file with mode: 0644]
paf/tests.py [new file with mode: 0644]
paf/urls.py [new file with mode: 0644]
paf/util.py [new file with mode: 0644]
paf/views 2.py [new file with mode: 0644]
paf/views.py [new file with mode: 0644]
paf0/__init__.py [new file with mode: 0644]
paf0/manage.py [deleted file]
paf0/media/css/base.css [new file with mode: 0644]
paf0/media/css/changelists.css [new file with mode: 0644]
paf0/media/css/edit_info.css [new file with mode: 0644]
paf0/media/css/forms.css [new file with mode: 0644]
paf0/media/css/style.css [new file with mode: 0644]
paf0/media/css/style_student_list.css [new file with mode: 0644]
paf0/media/css/widgets.css [new file with mode: 0644]
paf0/media/images/459.gif [new file with mode: 0644]
paf0/media/images/boxy-ne.png [new file with mode: 0644]
paf0/media/images/boxy-nw.png [new file with mode: 0644]
paf0/media/images/boxy-se.png [new file with mode: 0644]
paf0/media/images/boxy-sw.png [new file with mode: 0644]
paf0/media/images/chart_bar_edit.png [new file with mode: 0644]
paf0/media/images/comment-actif.png [new file with mode: 0644]
paf0/media/images/comment-inactif.png [new file with mode: 0644]
paf0/media/images/document.png [new file with mode: 0644]
paf0/media/images/document.svg [new file with mode: 0644]
paf0/media/images/favicon.ico [new file with mode: 0644]
paf0/media/images/icones/indicateur.png [new file with mode: 0644]
paf0/media/images/icones/projet.png [new file with mode: 0644]
paf0/media/images/lightbulb.png [new file with mode: 0644]
paf0/media/images/loading.gif [new file with mode: 0644]
paf0/media/images/logo.gif [new file with mode: 0644]
paf0/media/images/menubck.png [new file with mode: 0644]
paf0/media/images/mnubck.png [new file with mode: 0644]
paf0/media/images/page_white_edit.png [new file with mode: 0644]
paf0/media/images/page_white_magnify.png [new file with mode: 0644]
paf0/media/images/page_white_medal.png [new file with mode: 0644]
paf0/media/images/pdf.png [new file with mode: 0644]
paf0/media/images/photo.png [new file with mode: 0644]
paf0/media/images/srcbck.png [new file with mode: 0644]
paf0/media/images/user.png [new file with mode: 0644]
paf0/media/images/zoom.png [new file with mode: 0644]
paf0/media/js/jquery-1.3.2.min.js [new file with mode: 0644]
paf0/paf/.DS_Store [deleted file]
paf0/paf/._.DS_Store [deleted file]
paf0/paf/._admin.py [deleted file]
paf0/paf/._forms.py [deleted file]
paf0/paf/._models.py [deleted file]
paf0/paf/._urls.py [deleted file]
paf0/paf/._util.py [deleted file]
paf0/paf/._views 2.py [deleted file]
paf0/paf/._views.py [deleted file]
paf0/paf/__init__.py [deleted file]
paf0/paf/__init__.pyc [deleted file]
paf0/paf/admin.py [deleted file]
paf0/paf/admin.pyc [deleted file]
paf0/paf/forms.py [deleted file]
paf0/paf/forms.pyc [deleted file]
paf0/paf/migrations/0001_initial.py [deleted file]
paf0/paf/migrations/0001_initial.pyc [deleted file]
paf0/paf/migrations/0002_auto__add_linguisticlevel__add_student.py [deleted file]
paf0/paf/migrations/0002_auto__add_linguisticlevel__add_student.pyc [deleted file]
paf0/paf/migrations/0003_auto__del_field_student_user.py [deleted file]
paf0/paf/migrations/0003_auto__del_field_student_user.pyc [deleted file]
paf0/paf/migrations/0004_auto__add_field_student_identifier.py [deleted file]
paf0/paf/migrations/0004_auto__add_field_student_identifier.pyc [deleted file]
paf0/paf/migrations/0005_auto__add_field_student_user.py [deleted file]
paf0/paf/migrations/0005_auto__add_field_student_user.pyc [deleted file]
paf0/paf/migrations/0006_auto__del_field_student_user.py [deleted file]
paf0/paf/migrations/0006_auto__del_field_student_user.pyc [deleted file]
paf0/paf/migrations/0007_auto__add_faculty__add_university__add_currentacademic.py [deleted file]
paf0/paf/migrations/0007_auto__add_faculty__add_university__add_currentacademic.pyc [deleted file]
paf0/paf/migrations/0008_auto__add_country__add_continent__add_location.py [deleted file]
paf0/paf/migrations/0008_auto__add_country__add_continent__add_location.pyc [deleted file]
paf0/paf/migrations/0009_auto__add_area__add_field_location_area__add_field_location_city__add_.py [deleted file]
paf0/paf/migrations/0009_auto__add_area__add_field_location_area__add_field_location_city__add_.pyc [deleted file]
paf0/paf/migrations/0010_auto__add_field_currentacademic_university__add_field_currentacademic_.py [deleted file]
paf0/paf/migrations/0010_auto__add_field_currentacademic_university__add_field_currentacademic_.pyc [deleted file]
paf0/paf/migrations/0011_auto__add_field_currentacademic_student.py [deleted file]
paf0/paf/migrations/0011_auto__add_field_currentacademic_student.pyc [deleted file]
paf0/paf/migrations/0012_auto__del_location__del_country__del_continent__del_area__add_level__c.py [deleted file]
paf0/paf/migrations/0012_auto__del_location__del_country__del_continent__del_area__add_level__c.pyc [deleted file]
paf0/paf/migrations/0013_auto__add_field_currentacademic_entry_year__add_field_currentacademic_.py [deleted file]
paf0/paf/migrations/0013_auto__add_field_currentacademic_entry_year__add_field_currentacademic_.pyc [deleted file]
paf0/paf/migrations/0014_auto__add_diplomaobtained.py [deleted file]
paf0/paf/migrations/0014_auto__add_diplomaobtained.pyc [deleted file]
paf0/paf/migrations/0015_auto__add_country__add_employment__add_city__add_entreprise__add_field.py [deleted file]
paf0/paf/migrations/0015_auto__add_country__add_employment__add_city__add_entreprise__add_field.pyc [deleted file]
paf0/paf/migrations/__init__.py [deleted file]
paf0/paf/migrations/__init__.pyc [deleted file]
paf0/paf/models.py [deleted file]
paf0/paf/models.pyc [deleted file]
paf0/paf/templates/.DS_Store [deleted file]
paf0/paf/templates/._.DS_Store [deleted file]
paf0/paf/templates/._base_enseignant.html [deleted file]
paf0/paf/templates/._base_etudiant.html [deleted file]
paf0/paf/templates/._edit_info copy.html [deleted file]
paf0/paf/templates/._edit_info.html [deleted file]
paf0/paf/templates/._register.html [deleted file]
paf0/paf/templates/._register_success.html [deleted file]
paf0/paf/templates/._student_info.html [deleted file]
paf0/paf/templates/._student_list.html [deleted file]
paf0/paf/templates/base_enseignant.html [deleted file]
paf0/paf/templates/base_etudiant.html [deleted file]
paf0/paf/templates/edit_info copy.html [deleted file]
paf0/paf/templates/edit_info.html [deleted file]
paf0/paf/templates/etablissement_detail.html [deleted file]
paf0/paf/templates/etablissement_list.html [deleted file]
paf0/paf/templates/personne_detail.html [deleted file]
paf0/paf/templates/personne_list.html [deleted file]
paf0/paf/templates/register.html [deleted file]
paf0/paf/templates/register_success.html [deleted file]
paf0/paf/templates/student_info.html [deleted file]
paf0/paf/templates/student_list.html [deleted file]
paf0/paf/tests.py [deleted file]
paf0/paf/urls.py [deleted file]
paf0/paf/urls.pyc [deleted file]
paf0/paf/util.py [deleted file]
paf0/paf/views 2.py [deleted file]
paf0/paf/views.py [deleted file]
paf0/paf/views.pyc [deleted file]
paf0/paf0/.DS_Store [deleted file]
paf0/paf0/._.DS_Store [deleted file]
paf0/paf0/._settings.py [deleted file]
paf0/paf0/._urls.py [deleted file]
paf0/paf0/._views.py [deleted file]
paf0/paf0/__init__.py [deleted file]
paf0/paf0/__init__.pyc [deleted file]
paf0/paf0/media/.DS_Store [deleted file]
paf0/paf0/media/._.DS_Store [deleted file]
paf0/paf0/media/css/._edit_info.css [deleted file]
paf0/paf0/media/css/._style.css [deleted file]
paf0/paf0/media/css/._style_student_list.css [deleted file]
paf0/paf0/media/css/base.css [deleted file]
paf0/paf0/media/css/changelists.css [deleted file]
paf0/paf0/media/css/edit_info.css [deleted file]
paf0/paf0/media/css/forms.css [deleted file]
paf0/paf0/media/css/style.css [deleted file]
paf0/paf0/media/css/style_student_list.css [deleted file]
paf0/paf0/media/css/widgets.css [deleted file]
paf0/paf0/media/images/459.gif [deleted file]
paf0/paf0/media/images/boxy-ne.png [deleted file]
paf0/paf0/media/images/boxy-nw.png [deleted file]
paf0/paf0/media/images/boxy-se.png [deleted file]
paf0/paf0/media/images/boxy-sw.png [deleted file]
paf0/paf0/media/images/chart_bar_edit.png [deleted file]
paf0/paf0/media/images/comment-actif.png [deleted file]
paf0/paf0/media/images/comment-inactif.png [deleted file]
paf0/paf0/media/images/document.png [deleted file]
paf0/paf0/media/images/document.svg [deleted file]
paf0/paf0/media/images/favicon.ico [deleted file]
paf0/paf0/media/images/icones/indicateur.png [deleted file]
paf0/paf0/media/images/icones/projet.png [deleted file]
paf0/paf0/media/images/lightbulb.png [deleted file]
paf0/paf0/media/images/loading.gif [deleted file]
paf0/paf0/media/images/logo.gif [deleted file]
paf0/paf0/media/images/menubck.png [deleted file]
paf0/paf0/media/images/mnubck.png [deleted file]
paf0/paf0/media/images/page_white_edit.png [deleted file]
paf0/paf0/media/images/page_white_magnify.png [deleted file]
paf0/paf0/media/images/page_white_medal.png [deleted file]
paf0/paf0/media/images/pdf.png [deleted file]
paf0/paf0/media/images/photo.png [deleted file]
paf0/paf0/media/images/srcbck.png [deleted file]
paf0/paf0/media/images/user.png [deleted file]
paf0/paf0/media/images/zoom.png [deleted file]
paf0/paf0/media/js/jquery-1.3.2.min.js [deleted file]
paf0/paf0/settings.py [deleted file]
paf0/paf0/settings.pyc [deleted file]
paf0/paf0/templates/.DS_Store [deleted file]
paf0/paf0/templates/._.DS_Store [deleted file]
paf0/paf0/templates/._base.html [deleted file]
paf0/paf0/templates/._connexion.html [deleted file]
paf0/paf0/templates/._home.html [deleted file]
paf0/paf0/templates/admin/._change_list.html [deleted file]
paf0/paf0/templates/admin/base_site.html [deleted file]
paf0/paf0/templates/admin/change_list.html [deleted file]
paf0/paf0/templates/base.html [deleted file]
paf0/paf0/templates/connexion.html [deleted file]
paf0/paf0/templates/deconnexion.html [deleted file]
paf0/paf0/templates/home.html [deleted file]
paf0/paf0/templates/registration/.DS_Store [deleted file]
paf0/paf0/templates/registration/._.DS_Store [deleted file]
paf0/paf0/templates/registration/._password_change_done.html [deleted file]
paf0/paf0/templates/registration/._password_change_done_student.html [deleted file]
paf0/paf0/templates/registration/._password_change_form.html [deleted file]
paf0/paf0/templates/registration/._password_change_form_admin.html [deleted file]
paf0/paf0/templates/registration/._password_change_form_student.html [deleted file]
paf0/paf0/templates/registration/password_change_done.html [deleted file]
paf0/paf0/templates/registration/password_change_done_admin.html [deleted file]
paf0/paf0/templates/registration/password_change_done_student.html [deleted file]
paf0/paf0/templates/registration/password_change_form.html [deleted file]
paf0/paf0/templates/registration/password_change_form_admin.html [deleted file]
paf0/paf0/templates/registration/password_change_form_student.html [deleted file]
paf0/paf0/urls.py [deleted file]
paf0/paf0/urls.pyc [deleted file]
paf0/paf0/views.py [deleted file]
paf0/paf0/views.pyc [deleted file]
paf0/paf0/wsgi.py [deleted file]
paf0/paf0/wsgi.pyc [deleted file]
paf0/settings.py [new file with mode: 0644]
paf0/templates/admin/base_site.html [new file with mode: 0644]
paf0/templates/admin/change_list.html [new file with mode: 0644]
paf0/templates/base.html [new file with mode: 0644]
paf0/templates/connexion.html [new file with mode: 0644]
paf0/templates/deconnexion.html [new file with mode: 0644]
paf0/templates/home.html [new file with mode: 0644]
paf0/templates/registration/password_change_done.html [new file with mode: 0644]
paf0/templates/registration/password_change_done_admin.html [new file with mode: 0644]
paf0/templates/registration/password_change_done_student.html [new file with mode: 0644]
paf0/templates/registration/password_change_form.html [new file with mode: 0644]
paf0/templates/registration/password_change_form_admin.html [new file with mode: 0644]
paf0/templates/registration/password_change_form_student.html [new file with mode: 0644]
paf0/urls.py [new file with mode: 0644]
paf0/views.py [new file with mode: 0644]
paf0/wsgi.py [new file with mode: 0644]

diff --git a/.gitignore b/.gitignore
new file mode 100644 (file)
index 0000000..bde241a
--- /dev/null
@@ -0,0 +1,7 @@
+# Python
+*.pyc
+*.pyo
+
+# MacOS
+.DS_Store
+._*
diff --git a/manage.py b/manage.py
new file mode 100755 (executable)
index 0000000..f3c330f
--- /dev/null
+++ b/manage.py
@@ -0,0 +1,10 @@
+#!/usr/bin/env python
+import os
+import sys
+
+if __name__ == "__main__":
+    os.environ.setdefault("DJANGO_SETTINGS_MODULE", "paf0.settings")
+
+    from django.core.management import execute_from_command_line
+
+    execute_from_command_line(sys.argv)
diff --git a/paf/__init__.py b/paf/__init__.py
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/paf/admin.py b/paf/admin.py
new file mode 100644 (file)
index 0000000..5d4cab3
--- /dev/null
@@ -0,0 +1,146 @@
+from django.contrib import admin
+from paf.models import Student, LinguisticLevel, CurrentAcademic, University, Faculty, Level, DiplomaObtained, City, Country, Employment, Entreprise
+from django.http import HttpResponseRedirect
+from django.core.urlresolvers import reverse
+from django.core.exceptions import PermissionDenied
+from django.contrib.auth.models import User
+from django import forms
+
+
+class LinguisticLevelAdmin(admin.ModelAdmin):
+    fieldsets = (
+        ('Delf/Dalf', {
+            'fields': ('delf_dalf', 'year_delf_dalf')
+        }),
+        ('Autre', {
+            'fields': ('other', 'year_other')
+        }),
+    )
+
+
+class LinguisticLevelInline(admin.TabularInline):
+    model = LinguisticLevel
+    
+    def get_readonly_fields(self, request, obj=None):
+        if request.user.username == 'enseignant':
+            return ('delf_dalf', 'year_delf_dalf', 'other', 'year_other')
+        return ()
+
+class CurrentAcademicInline(admin.TabularInline):
+    model = CurrentAcademic
+    
+    def get_readonly_fields(self, request, obj=None):
+        if request.user.username == 'enseignant':
+            return ('university', 'faculty', 'level', 'specialty', 'city', 'entry_year', 'end_year', 'certified')
+        return ()
+
+class DiplomaObtainedInline(admin.TabularInline):
+    model = DiplomaObtained
+    
+    def get_readonly_fields(self, request, obj=None):
+        if request.user.username == 'enseignant':
+            return ('university', 'entitle', 'level', 'year')
+        return ()
+
+class EmploymentInline(admin.StackedInline):
+    model = Employment
+    
+    def get_readonly_fields(self, request, obj=None):
+        if request.user.username == 'enseignant':
+            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 StudentAdmin(admin.ModelAdmin):
+    form = StudentForm
+    list_display = ('firstname', 'lastname', 'tel', 'email')
+    search_fields = ('firstname', 'lastname')
+    list_filter = ('sex', 'linguisticlevel__delf_dalf', 'currentacademic__university__name',)
+    date_hierarchy = 'dob'
+    ordering = ('-lastname',)
+    inlines = [CurrentAcademicInline, LinguisticLevelInline, DiplomaObtainedInline, EmploymentInline]
+    readonly_fields = ('identifier',)
+    fields = ('identifier', 'firstname', 'lastname', 'nationality', 'sex', 'dob', 'email', 'tel', 'parent_tel', 'parent_address')
+    
+    
+    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 ()
+    
+    def queryset(self, request):
+        qs = super(StudentAdmin, self).queryset(request)
+        if request.user.first_name == 'student':
+            return qs.filter(identifier=request.user.username)
+        else:
+            return qs
+
+    def change_view(self, request, object_id, form_url='', extra_context=None):
+        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
+        return super(StudentAdmin, self).change_view(request, object_id, form_url, extra_context)
+        
+    def changelist_view(self, request, extra_context=None):
+        if request.user.first_name == 'student':
+            student = Student.objects.get(identifier=request.user.username)
+            return HttpResponseRedirect(reverse('edit_info'))
+        elif request.user.username == 'enseignant':
+            self.change_list_template = 'student_list.html'
+        else:
+            self.change_list_template = None
+        return super(StudentAdmin, self).changelist_view(request, extra_context)
+
+    def delete_model(self, request, obj):
+        User.objects.filter(username=obj.identifier).delete()
+        obj.delete()
+    
+class CurrentAcademicAdmin(admin.ModelAdmin):
+    pass
+
+class FacultyAdmin(admin.ModelAdmin):
+    pass
+
+class UniversityAdmin(admin.ModelAdmin):
+    pass
+
+class LevelAdmin(admin.ModelAdmin):
+    pass
+
+class CityAdmin(admin.ModelAdmin):
+    pass
+
+class EntrepriseAdmin(admin.ModelAdmin):
+    pass
+
+class CountryAdmin(admin.ModelAdmin):
+    pass
+
+class DiplomaObtainedAdmin(admin.ModelAdmin):
+    pass
+
+
+admin.site.register(Entreprise, CityAdmin)
+admin.site.register(Country, CityAdmin)
+admin.site.register(City, CityAdmin)
+admin.site.register(Student, StudentAdmin)
+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
diff --git a/paf/forms.py b/paf/forms.py
new file mode 100644 (file)
index 0000000..f752f87
--- /dev/null
@@ -0,0 +1,79 @@
+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
+
+class RegistrationForm(forms.Form):
+    NATIONALITY_CHOICES = (
+        ('KH', 'Cambodgienne'),
+        ('LA', 'Laotienne'),
+        ('AN', '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)
+    
+    def clean_confirm_password(self):
+        if self.cleaned_data['password'] != self.cleaned_data['confirm_password']:
+            raise forms.ValidationError("Your confirm password is different from password!")
+    
+    def save(self):
+        student = self.create_student()
+        self.create_user(student)
+        return student
+            
+    def create_student(self):
+        cd = self.cleaned_data
+        student = Student(lastname=cd['lastname']
+                            , firstname=cd['firstname']
+                            , nationality=cd['nationality']
+                            , sex=cd['sex']
+                            , dob=cd['dob']
+                            , email=cd['email']
+                            , tel=cd['tel']
+                            , parent_tel=cd['parent_tel']
+                            , parent_address=cd['parent_address'])
+        student.identifier = self.calculate_identifier(student)
+        student.save()
+        return student
+        
+    def calculate_identifier(self, student):
+        try:
+            last_identifier = Student.objects.filter(nationality=student.nationality).order_by('-identifier')[0].identifier
+            tmp = int(last_identifier[2:]) + 1
+            return last_identifier[:2] + zfill(tmp, len(last_identifier)-2)
+        except:
+            return student.nationality + '0000001'
+
+    def create_user(self, student):
+        cd = self.cleaned_data
+        user = User(username=student.identifier, is_staff=1, first_name='student')
+        user.set_password(cd['password'])
+        user.save()
+        group = self.get_student_group()
+        user.groups = [group]
+        user.save()
+        return user
+        
+    def get_student_group(self):
+        try:
+            group = Group.objects.get(name='student')
+        except:
+            group = Group(name='student')
+            group.save()
+        return group
\ No newline at end of file
diff --git a/paf/migrations/0001_initial.py b/paf/migrations/0001_initial.py
new file mode 100644 (file)
index 0000000..616aefd
--- /dev/null
@@ -0,0 +1,20 @@
+# -*- 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
new file mode 100644 (file)
index 0000000..b98064e
--- /dev/null
@@ -0,0 +1,109 @@
+# -*- 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
new file mode 100644 (file)
index 0000000..52ac419
--- /dev/null
@@ -0,0 +1,47 @@
+# -*- 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
new file mode 100644 (file)
index 0000000..0b7d779
--- /dev/null
@@ -0,0 +1,48 @@
+# -*- 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
new file mode 100644 (file)
index 0000000..930a947
--- /dev/null
@@ -0,0 +1,85 @@
+# -*- 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
new file mode 100644 (file)
index 0000000..5cb350c
--- /dev/null
@@ -0,0 +1,48 @@
+# -*- 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
new file mode 100644 (file)
index 0000000..a95e251
--- /dev/null
@@ -0,0 +1,87 @@
+# -*- 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
new file mode 100644 (file)
index 0000000..c70396c
--- /dev/null
@@ -0,0 +1,105 @@
+# -*- 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
new file mode 100644 (file)
index 0000000..796cf70
--- /dev/null
@@ -0,0 +1,123 @@
+# -*- 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
new file mode 100644 (file)
index 0000000..6e75785
--- /dev/null
@@ -0,0 +1,115 @@
+# -*- 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
new file mode 100644 (file)
index 0000000..b291e55
--- /dev/null
@@ -0,0 +1,94 @@
+# -*- 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
new file mode 100644 (file)
index 0000000..2e3d597
--- /dev/null
@@ -0,0 +1,137 @@
+# -*- 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
new file mode 100644 (file)
index 0000000..51eba01
--- /dev/null
@@ -0,0 +1,92 @@
+# -*- 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
new file mode 100644 (file)
index 0000000..ea4b573
--- /dev/null
@@ -0,0 +1,91 @@
+# -*- 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
new file mode 100644 (file)
index 0000000..94ef28a
--- /dev/null
@@ -0,0 +1,160 @@
+# -*- 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
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/paf/models.py b/paf/models.py
new file mode 100644 (file)
index 0000000..047640a
--- /dev/null
@@ -0,0 +1,158 @@
+# -*- coding: utf8 -*-
+from django.db import models
+from django.contrib.auth.models import User
+from smart_selects.db_fields import ChainedForeignKey 
+
+class Student(models.Model):
+    GENDER_CHOICES = (
+        ('M', 'Male'),
+        ('F', 'Female'),
+    )
+    NATIONALITY_CHOICES = (
+        ('KH', 'Cambodgienne'),
+        ('LA', 'Laotienne'),
+        ('AN', 'Vietnamienne'),
+        ('ZZ', 'Autre'),
+    )
+    identifier = models.CharField('identifiant',max_length=9, blank=True)
+    lastname = models.CharField('nom', max_length=50)
+    firstname = models.CharField(u"prénom", max_length=50)
+    nationality = models.CharField(u"nationalité", max_length=2, choices=NATIONALITY_CHOICES)
+    sex = models.CharField('sexe', max_length=1, choices=GENDER_CHOICES)
+    dob = models.DateField('date de naissance', help_text='Enter la date sous forme dd/mm/yyyy')
+    email = models.EmailField('e-mail', blank=True)
+    tel = models.CharField('téléphone', max_length=20)
+    parent_tel = models.CharField('téléphone de parents', max_length=20, blank=True)
+    parent_address = models.CharField('adresse de parents', max_length=120)
+    
+    class Meta:
+        verbose_name = 'Etudiant'
+        
+    def __unicode__(self):
+        return u'%s %s' % (self.firstname, self.lastname)
+            
+class LinguisticLevel(models.Model):
+    DELF_DALF_CHOICES = (
+        ('A1', 'A1'),
+        ('A2', 'A2'),
+        ('B1', 'B1'),
+        ('B2', 'B2'),
+        ('C1', 'C1'),
+        ('C2', 'C2'),
+    )
+    OTHER_CHOICES = (
+        ('D', 'Debutant'),
+        ('I', 'Intermediare'),
+        ('A', 'Avance'),
+    )
+    delf_dalf = models.CharField('delf/dalf', max_length=2, choices=DELF_DALF_CHOICES, blank=True)
+    year_delf_dalf = models.PositiveIntegerField(u'année obtenue', blank=True, null=True)
+    other = models.CharField('autre', max_length=1, choices=OTHER_CHOICES, blank=True)
+    year_other = models.PositiveIntegerField(u'année obtenue', blank=True, null=True)
+    student = models.OneToOneField(Student)
+
+    class Meta:
+        verbose_name = 'Niveau linguistique'
+        
+    
+    def __unicode__(self):
+        return u''
+        
+class Level(models.Model):
+    name = models.CharField('nom', max_length=100)
+    
+    class Meta:
+        verbose_name = 'Niveau'
+        verbose_name_plural = 'Niveaux'
+        
+    def __unicode__(self):
+        return self.name
+    
+class University(models.Model):
+    name = models.CharField('nom', max_length=100)
+    
+    class Meta:
+        verbose_name = u"Université"
+        
+    def __unicode__(self):
+        return self.name
+    
+class Country(models.Model):
+    name = models.CharField('nom', max_length=100)
+    
+    class Meta:
+        verbose_name = 'Pays'
+        verbose_name_plural = 'Pays'
+        
+    def __unicode__(self):
+        return self.name
+
+class City(models.Model):
+    name = models.CharField('nom', max_length=100)
+    
+    class Meta:
+        verbose_name = 'Ville'
+        
+    def __unicode__(self):
+        return self.name
+
+class Entreprise(models.Model):
+    name = models.CharField('nom', max_length=100)
+    
+    def __unicode__(self):
+        return self.name
+    
+    
+class Faculty(models.Model):
+    name = models.CharField('nom', max_length=100)
+    university = models.ForeignKey(University)
+
+    class Meta:
+        verbose_name = u"Faculté"
+        
+    def __unicode__(self):
+        return self.name
+
+class CurrentAcademic(models.Model):
+    university = models.ForeignKey(University, verbose_name=u"université")
+    faculty = ChainedForeignKey(
+        Faculty, 
+        chained_field="university",
+        chained_model_field="university", 
+        show_all=False, 
+        auto_choose=True,
+        verbose_name=u"faculté"
+    )
+    city = models.ForeignKey(City, verbose_name='Ville')
+    level = models.ForeignKey(Level, verbose_name='Niveau')
+    specialty = models.CharField(max_length=200, verbose_name=u'Spécialité')
+    entry_year = models.PositiveIntegerField(verbose_name=u"Année d'entrée")
+    end_year = models.PositiveIntegerField(blank=True, null=True, verbose_name="année de sortie")
+    certified = models.NullBooleanField(verbose_name=u"Diplomé")
+    student = models.OneToOneField(Student)
+    
+    class Meta:
+        verbose_name = u"Parcous académique actuel"
+
+
+class DiplomaObtained(models.Model):
+    university = models.ForeignKey(University, verbose_name=u"Université")
+    level = models.ForeignKey(Level, verbose_name=u"Niveau")
+    entitle = models.CharField(max_length=200, verbose_name=u"Intitulé")
+    year = models.PositiveIntegerField(verbose_name=u"Année")
+    student = models.ForeignKey(Student)
+    class Meta:
+        verbose_name = u"Diplôme obtenu"
+        verbose_name_plural = u"Diplômes obtenus"
+
+class Employment(models.Model):
+    entreprise = models.ForeignKey(Entreprise)
+    activity_sector = models.CharField(max_length=200, verbose_name=u"Secteur d'activité")
+    country = models.ForeignKey(Country, verbose_name=u"pays")
+    website = models.URLField(verbose_name=u"site web")
+    position = models.CharField(max_length=200)
+    detail_position = models.TextField(verbose_name=u"Détail de responsabilité")
+    observation = models.CharField(max_length=200, blank=True)
+    student = models.OneToOneField(Student)
+    class Meta:
+        verbose_name = u"Emploiement"
diff --git a/paf/templates/base_enseignant.html b/paf/templates/base_enseignant.html
new file mode 100644 (file)
index 0000000..ca4d3c1
--- /dev/null
@@ -0,0 +1,68 @@
+{% 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
new file mode 100644 (file)
index 0000000..2de0ea4
--- /dev/null
@@ -0,0 +1,70 @@
+{% 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
new file mode 100644 (file)
index 0000000..17bdc1e
--- /dev/null
@@ -0,0 +1,59 @@
+{% 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 %}
diff --git a/paf/templates/edit_info.html b/paf/templates/edit_info.html
new file mode 100644 (file)
index 0000000..5cce60e
--- /dev/null
@@ -0,0 +1,69 @@
+{% extends "base_etudiant.html" %}
+{% load i18n admin_static admin_modify %}
+{% load url from future %}
+{% load admin_urls %}
+
+{% block extrahead %}{{ block.super }}
+{% url 'admin:jsi18n' as jsi18nurl %}
+<script type="text/javascript" src="{{ jsi18nurl|default:"../../../jsi18n/" }}"></script>
+{{ media }}
+{% endblock %}
+
+{% block extrastyle %}{{ block.super }}<link rel="stylesheet" type="text/css" href="{% static "admin/css/forms.css" %}" />{% endblock %}
+
+{% block coltype %}{% if ordered_objects %}colMS{% else %}colM{% endif %}{% endblock %}
+
+{% block bodyclass %}{{ opts.app_label }}-{{ opts.object_name.lower }} change-form{% 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=opts.app_label %}">{{ app_label|capfirst|escape }}</a>
+&rsaquo; {% if has_change_permission %}<a href="{% url opts|admin_urlname:'changelist' %}">{{ opts.verbose_name_plural|capfirst }}</a>{% else %}{{ opts.verbose_name_plural|capfirst }}{% endif %}
+&rsaquo; {% if add %}{% trans 'Add' %} {{ opts.verbose_name }}{% else %}{{ original|truncatewords:"18" }}{% endif %}
+</div>
+{% endblock %}
+{% endif %}
+{% block sous_titre %}Votre information en détail{% 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 %}
+    </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 %}
diff --git a/paf/templates/etablissement_detail.html b/paf/templates/etablissement_detail.html
new file mode 100644 (file)
index 0000000..f602ddb
--- /dev/null
@@ -0,0 +1,13 @@
+{% 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
new file mode 100644 (file)
index 0000000..90f07ce
--- /dev/null
@@ -0,0 +1,11 @@
+{% 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
new file mode 100644 (file)
index 0000000..f5d2e05
--- /dev/null
@@ -0,0 +1,10 @@
+{% 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
new file mode 100644 (file)
index 0000000..a2e994d
--- /dev/null
@@ -0,0 +1,11 @@
+{% 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 %}
diff --git a/paf/templates/register.html b/paf/templates/register.html
new file mode 100644 (file)
index 0000000..303caaa
--- /dev/null
@@ -0,0 +1,24 @@
+{% extends "base.html" %}
+
+{% block topmenu %}
+    <li><a href="{% url views.connexion %}">Connexion</a>
+{% endblock %}
+
+{% block main %}
+
+  <div class="zone-texte">
+    <h2>Enregistrement</h2>
+    {% if registration_form.errors %}
+        <p class="error">S'il vous plait corriger les erreurs suivantes:</p>
+    {% endif %}
+
+    <form method="post">{% csrf_token %}
+        <table class="lined">
+               {{ registration_form.as_table }}
+        </table>
+        <input type="submit" value="Enregistrer" />
+    </form>
+  </div>
+  
+{% endblock %}
+
diff --git a/paf/templates/register_success.html b/paf/templates/register_success.html
new file mode 100644 (file)
index 0000000..5a7f49f
--- /dev/null
@@ -0,0 +1,11 @@
+{% extends "base.html" %}
+
+{% block main %}
+
+    <div>
+        Enregistrement a été fait avec succès.<br />
+        Votre identifiant est: <em>{{ identifier }}</em>
+    </div>
+  
+{% endblock %}
+
diff --git a/paf/templates/student_info.html b/paf/templates/student_info.html
new file mode 100644 (file)
index 0000000..3b68a18
--- /dev/null
@@ -0,0 +1,68 @@
+{% extends "base_enseignant.html" %}
+{% load i18n admin_static admin_modify %}
+{% load url from future %}
+{% load admin_urls %}
+
+{% block extrahead %}{{ block.super }}
+{% url 'admin:jsi18n' as jsi18nurl %}
+<script type="text/javascript" src="{{ jsi18nurl|default:"../../../jsi18n/" }}"></script>
+{{ media }}
+{% endblock %}
+
+{% block extrastyle %}{{ block.super }}<link rel="stylesheet" type="text/css" href="{% static "admin/css/forms.css" %}" />{% endblock %}
+
+{% block coltype %}{% if ordered_objects %}colMS{% else %}colM{% endif %}{% endblock %}
+
+{% block bodyclass %}{{ opts.app_label }}-{{ opts.object_name.lower }} change-form{% 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=opts.app_label %}">{{ app_label|capfirst|escape }}</a>
+&rsaquo; {% if has_change_permission %}<a href="{% url opts|admin_urlname:'changelist' %}">{{ opts.verbose_name_plural|capfirst }}</a>{% else %}{{ opts.verbose_name_plural|capfirst }}{% endif %}
+&rsaquo; {% if add %}{% trans 'Add' %} {{ opts.verbose_name }}{% else %}{{ original|truncatewords:"18" }}{% endif %}
+</div>
+{% endblock %}
+{% endif %}
+
+
+{% 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 %}
+    </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 %}
+
+
+{% 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 %}
diff --git a/paf/templates/student_list.html b/paf/templates/student_list.html
new file mode 100644 (file)
index 0000000..0f66c10
--- /dev/null
@@ -0,0 +1,100 @@
+{% extends "base_enseignant.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 %}
diff --git a/paf/tests.py b/paf/tests.py
new file mode 100644 (file)
index 0000000..501deb7
--- /dev/null
@@ -0,0 +1,16 @@
+"""
+This file demonstrates writing tests using the unittest module. These will pass
+when you run "manage.py test".
+
+Replace this with more appropriate tests for your application.
+"""
+
+from django.test import TestCase
+
+
+class SimpleTest(TestCase):
+    def test_basic_addition(self):
+        """
+        Tests that 1 + 1 always equals 2.
+        """
+        self.assertEqual(1 + 1, 2)
diff --git a/paf/urls.py b/paf/urls.py
new file mode 100644 (file)
index 0000000..c07782c
--- /dev/null
@@ -0,0 +1,12 @@
+from django.conf.urls import patterns, include, url
+from paf.admin import StudentAdmin
+from paf.models import Student
+from paf.views import register, edit_info, student_list, student_info
+
+urlpatterns = patterns('',
+    url(r'^register/', register, name='register'),
+    url(r'^edit_info/$', edit_info, name='edit_info'),
+    url(r'^student_list/$', student_list, name='student_list'),
+    url(r'^student_list/(\d?)/$', student_info, name='student_info'),
+    url(r'^student_info/$', student_info, name='student_info2'),
+)
diff --git a/paf/util.py b/paf/util.py
new file mode 100644 (file)
index 0000000..f7c094d
--- /dev/null
@@ -0,0 +1,6 @@
+# -*- coding: utf8 -*-
+from django.contrib.auth.models import User, Group
+
+def user_is_student(user):
+    return user.groups.filter(name='student')
+    
\ No newline at end of file
diff --git a/paf/views 2.py b/paf/views 2.py
new file mode 100644 (file)
index 0000000..cf70622
--- /dev/null
@@ -0,0 +1,42 @@
+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
diff --git a/paf/views.py b/paf/views.py
new file mode 100644 (file)
index 0000000..0d1c841
--- /dev/null
@@ -0,0 +1,55 @@
+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
+from django.template import Context, RequestContext
+from django.http import HttpResponseRedirect
+
+
+def register(request):
+    if request.method == 'POST':
+        form = RegistrationForm(request.POST)
+        if form.is_valid():
+            student = form.save()
+            return render_to_response('register_success.html', {'identifier': student.identifier}, context_instance = RequestContext(request))
+    else:        
+        form = RegistrationForm()
+    c = {'registration_form': form}
+    c.update(csrf(request))
+    return render_to_response('register.html', c, context_instance = RequestContext(request))
+        
+def login(request):
+    return HttpResponse('login')
+    
+def edit_info(request):
+    user = request.user
+    student = Student.objects.get(identifier=user.username)
+    return StudentAdmin(Student, admin.site).change_view(request, str(student.id))
+
+def student_info(request, object_id=''):
+    return StudentAdmin(Student, admin.site).change_view(request, object_id)
+
+def student_list(request):
+    return StudentAdmin(Student, admin.site).changelist_view(request)
+
+def password_change(request):
+    return admin.site.password_change(request)
+
+def password_change_done(request):
+    return admin.site.password_change_done(request)
+
+def admin_home(request):
+    if request.user.is_superuser:
+        return admin.site.index(request)
+    return HttpResponseRedirect('/')
+
+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
diff --git a/paf0/__init__.py b/paf0/__init__.py
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/paf0/manage.py b/paf0/manage.py
deleted file mode 100755 (executable)
index f3c330f..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-#!/usr/bin/env python
-import os
-import sys
-
-if __name__ == "__main__":
-    os.environ.setdefault("DJANGO_SETTINGS_MODULE", "paf0.settings")
-
-    from django.core.management import execute_from_command_line
-
-    execute_from_command_line(sys.argv)
diff --git a/paf0/media/css/base.css b/paf0/media/css/base.css
new file mode 100644 (file)
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/paf0/media/css/changelists.css b/paf0/media/css/changelists.css
new file mode 100644 (file)
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/paf0/media/css/edit_info.css b/paf0/media/css/edit_info.css
new file mode 100644 (file)
index 0000000..3f195d2
--- /dev/null
@@ -0,0 +1,102 @@
+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
new file mode 100644 (file)
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/paf0/media/css/style.css b/paf0/media/css/style.css
new file mode 100644 (file)
index 0000000..9a64ed9
--- /dev/null
@@ -0,0 +1,591 @@
+/* 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
new file mode 100644 (file)
index 0000000..17bca6c
--- /dev/null
@@ -0,0 +1,69 @@
+#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
new file mode 100644 (file)
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/paf0/media/images/459.gif b/paf0/media/images/459.gif
new file mode 100644 (file)
index 0000000..c9df6c6
Binary files /dev/null and b/paf0/media/images/459.gif differ
diff --git a/paf0/media/images/boxy-ne.png b/paf0/media/images/boxy-ne.png
new file mode 100644 (file)
index 0000000..81e1e17
Binary files /dev/null and b/paf0/media/images/boxy-ne.png differ
diff --git a/paf0/media/images/boxy-nw.png b/paf0/media/images/boxy-nw.png
new file mode 100644 (file)
index 0000000..2b8016e
Binary files /dev/null and b/paf0/media/images/boxy-nw.png differ
diff --git a/paf0/media/images/boxy-se.png b/paf0/media/images/boxy-se.png
new file mode 100644 (file)
index 0000000..a42bdfb
Binary files /dev/null and b/paf0/media/images/boxy-se.png differ
diff --git a/paf0/media/images/boxy-sw.png b/paf0/media/images/boxy-sw.png
new file mode 100644 (file)
index 0000000..ecb504b
Binary files /dev/null and b/paf0/media/images/boxy-sw.png differ
diff --git a/paf0/media/images/chart_bar_edit.png b/paf0/media/images/chart_bar_edit.png
new file mode 100644 (file)
index 0000000..df64d97
Binary files /dev/null and b/paf0/media/images/chart_bar_edit.png differ
diff --git a/paf0/media/images/comment-actif.png b/paf0/media/images/comment-actif.png
new file mode 100644 (file)
index 0000000..aada743
Binary files /dev/null and b/paf0/media/images/comment-actif.png differ
diff --git a/paf0/media/images/comment-inactif.png b/paf0/media/images/comment-inactif.png
new file mode 100644 (file)
index 0000000..452e97d
Binary files /dev/null and b/paf0/media/images/comment-inactif.png differ
diff --git a/paf0/media/images/document.png b/paf0/media/images/document.png
new file mode 100644 (file)
index 0000000..37b4753
Binary files /dev/null and b/paf0/media/images/document.png differ
diff --git a/paf0/media/images/document.svg b/paf0/media/images/document.svg
new file mode 100644 (file)
index 0000000..532f98b
--- /dev/null
@@ -0,0 +1,548 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:xlink="http://www.w3.org/1999/xlink"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   inkscape:export-ydpi="240.00000"
+   inkscape:export-xdpi="240.00000"
+   inkscape:export-filename="/home/jimmac/gfx/novell/pdes/trunk/docs/BIGmime-text.png"
+   sodipodi:docname="text-x-generic.svg"
+   sodipodi:docbase="/home/jimmac/src/cvs/tango-icon-theme/scalable/mimetypes"
+   inkscape:version="0.46"
+   sodipodi:version="0.32"
+   id="svg249"
+   height="48.000000px"
+   width="48.000000px"
+   inkscape:output_extension="org.inkscape.output.svg.inkscape">
+  <defs
+     id="defs3">
+    <inkscape:perspective
+       sodipodi:type="inkscape:persp3d"
+       inkscape:vp_x="0 : 24 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_z="48 : 24 : 1"
+       inkscape:persp3d-origin="24 : 16 : 1"
+       id="perspective78" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient5060"
+       id="radialGradient6719"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-2.774389,0,0,1.969706,112.7623,-872.8854)"
+       cx="605.71429"
+       cy="486.64789"
+       fx="605.71429"
+       fy="486.64789"
+       r="117.14286" />
+    <linearGradient
+       inkscape:collect="always"
+       id="linearGradient5060">
+      <stop
+         style="stop-color:black;stop-opacity:1;"
+         offset="0"
+         id="stop5062" />
+      <stop
+         style="stop-color:black;stop-opacity:0;"
+         offset="1"
+         id="stop5064" />
+    </linearGradient>
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient5060"
+       id="radialGradient6717"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(2.774389,0,0,1.969706,-1891.633,-872.8854)"
+       cx="605.71429"
+       cy="486.64789"
+       fx="605.71429"
+       fy="486.64789"
+       r="117.14286" />
+    <linearGradient
+       id="linearGradient5048">
+      <stop
+         style="stop-color:black;stop-opacity:0;"
+         offset="0"
+         id="stop5050" />
+      <stop
+         id="stop5056"
+         offset="0.5"
+         style="stop-color:black;stop-opacity:1;" />
+      <stop
+         style="stop-color:black;stop-opacity:0;"
+         offset="1"
+         id="stop5052" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient5048"
+       id="linearGradient6715"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(2.774389,0,0,1.969706,-1892.179,-872.8854)"
+       x1="302.85715"
+       y1="366.64789"
+       x2="302.85715"
+       y2="609.50507" />
+    <linearGradient
+       inkscape:collect="always"
+       id="linearGradient4542">
+      <stop
+         style="stop-color:#000000;stop-opacity:1;"
+         offset="0"
+         id="stop4544" />
+      <stop
+         style="stop-color:#000000;stop-opacity:0;"
+         offset="1"
+         id="stop4546" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient15662">
+      <stop
+         id="stop15664"
+         offset="0.0000000"
+         style="stop-color:#ffffff;stop-opacity:1.0000000;" />
+      <stop
+         id="stop15666"
+         offset="1.0000000"
+         style="stop-color:#f8f8f8;stop-opacity:1.0000000;" />
+    </linearGradient>
+    <radialGradient
+       id="aigrd3"
+       cx="20.8921"
+       cy="64.5679"
+       r="5.257"
+       fx="20.8921"
+       fy="64.5679"
+       gradientUnits="userSpaceOnUse">
+      <stop
+         offset="0"
+         style="stop-color:#F0F0F0"
+         id="stop15573" />
+      <stop
+         offset="1.0000000"
+         style="stop-color:#9a9a9a;stop-opacity:1.0000000;"
+         id="stop15575" />
+    </radialGradient>
+    <radialGradient
+       id="aigrd2"
+       cx="20.8921"
+       cy="114.5684"
+       r="5.256"
+       fx="20.8921"
+       fy="114.5684"
+       gradientUnits="userSpaceOnUse">
+      <stop
+         offset="0"
+         style="stop-color:#F0F0F0"
+         id="stop15566" />
+      <stop
+         offset="1.0000000"
+         style="stop-color:#9a9a9a;stop-opacity:1.0000000;"
+         id="stop15568" />
+    </radialGradient>
+    <linearGradient
+       id="linearGradient269">
+      <stop
+         id="stop270"
+         offset="0.0000000"
+         style="stop-color:#a3a3a3;stop-opacity:1.0000000;" />
+      <stop
+         id="stop271"
+         offset="1.0000000"
+         style="stop-color:#4c4c4c;stop-opacity:1.0000000;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient259">
+      <stop
+         id="stop260"
+         offset="0.0000000"
+         style="stop-color:#fafafa;stop-opacity:1.0000000;" />
+      <stop
+         id="stop261"
+         offset="1.0000000"
+         style="stop-color:#bbbbbb;stop-opacity:1.0000000;" />
+    </linearGradient>
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient269"
+       id="radialGradient15656"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.968273,0.000000,0.000000,1.032767,3.353553,0.646447)"
+       cx="8.8244190"
+       cy="3.7561285"
+       fx="8.8244190"
+       fy="3.7561285"
+       r="37.751713" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient259"
+       id="radialGradient15658"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(0.960493,1.041132)"
+       cx="33.966679"
+       cy="35.736916"
+       fx="33.966679"
+       fy="35.736916"
+       r="86.708450" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient15662"
+       id="radialGradient15668"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.968273,0.000000,0.000000,1.032767,3.353553,0.646447)"
+       cx="8.1435566"
+       cy="7.2678967"
+       fx="8.1435566"
+       fy="7.2678967"
+       r="38.158695" />
+    <radialGradient
+       r="5.256"
+       fy="114.5684"
+       fx="20.8921"
+       cy="114.5684"
+       cx="20.8921"
+       gradientTransform="matrix(0.229703,0.000000,0.000000,0.229703,4.613529,3.979808)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient2283"
+       xlink:href="#aigrd2"
+       inkscape:collect="always" />
+    <radialGradient
+       r="5.257"
+       fy="64.5679"
+       fx="20.8921"
+       cy="64.5679"
+       cx="20.8921"
+       gradientTransform="matrix(0.229703,0.000000,0.000000,0.229703,4.613529,3.979808)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient2285"
+       xlink:href="#aigrd3"
+       inkscape:collect="always" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4542"
+       id="radialGradient4548"
+       cx="24.306795"
+       cy="42.07798"
+       fx="24.306795"
+       fy="42.07798"
+       r="15.821514"
+       gradientTransform="matrix(1.000000,0.000000,0.000000,0.284916,0.000000,30.08928)"
+       gradientUnits="userSpaceOnUse" />
+  </defs>
+  <sodipodi:namedview
+     inkscape:window-y="160"
+     inkscape:window-x="343"
+     inkscape:window-height="688"
+     inkscape:window-width="872"
+     inkscape:document-units="px"
+     inkscape:grid-bbox="true"
+     showgrid="false"
+     inkscape:current-layer="layer6"
+     inkscape:cy="24.318443"
+     inkscape:cx="25.938708"
+     inkscape:zoom="5.6568542"
+     inkscape:pageshadow="2"
+     inkscape:pageopacity="0.0"
+     borderopacity="0.25490196"
+     bordercolor="#666666"
+     pagecolor="#ffffff"
+     id="base"
+     inkscape:showpageshadow="false" />
+  <metadata
+     id="metadata4">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title>Generic Text</dc:title>
+        <dc:subject>
+          <rdf:Bag>
+            <rdf:li>text</rdf:li>
+            <rdf:li>plaintext</rdf:li>
+            <rdf:li>regular</rdf:li>
+            <rdf:li>document</rdf:li>
+          </rdf:Bag>
+        </dc:subject>
+        <cc:license
+           rdf:resource="http://creativecommons.org/licenses/publicdomain/" />
+        <dc:creator>
+          <cc:Agent>
+            <dc:title>Jakub Steiner</dc:title>
+          </cc:Agent>
+        </dc:creator>
+        <dc:source>http://jimmac.musichall.cz</dc:source>
+      </cc:Work>
+      <cc:License
+         rdf:about="http://creativecommons.org/licenses/publicdomain/">
+        <cc:permits
+           rdf:resource="http://creativecommons.org/ns#Reproduction" />
+        <cc:permits
+           rdf:resource="http://creativecommons.org/ns#Distribution" />
+        <cc:permits
+           rdf:resource="http://creativecommons.org/ns#DerivativeWorks" />
+      </cc:License>
+    </rdf:RDF>
+  </metadata>
+  <g
+     inkscape:groupmode="layer"
+     id="layer6"
+     inkscape:label="Shadow">
+    <g
+       style="display:inline"
+       transform="matrix(2.105461e-2,0,0,2.086758e-2,42.85172,41.1536)"
+       id="g6707">
+      <rect
+         style="opacity:0.40206185;color:black;fill:url(#linearGradient6715);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+         id="rect6709"
+         width="1339.6335"
+         height="478.35718"
+         x="-1559.2523"
+         y="-150.69685" />
+      <path
+         style="opacity:0.40206185;color:black;fill:url(#radialGradient6717);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+         d="M -219.61876,-150.68038 C -219.61876,-150.68038 -219.61876,327.65041 -219.61876,327.65041 C -76.744594,328.55086 125.78146,220.48075 125.78138,88.454235 C 125.78138,-43.572302 -33.655436,-150.68036 -219.61876,-150.68038 z "
+         id="path6711"
+         sodipodi:nodetypes="cccc" />
+      <path
+         sodipodi:nodetypes="cccc"
+         id="path6713"
+         d="M -1559.2523,-150.68038 C -1559.2523,-150.68038 -1559.2523,327.65041 -1559.2523,327.65041 C -1702.1265,328.55086 -1904.6525,220.48075 -1904.6525,88.454235 C -1904.6525,-43.572302 -1745.2157,-150.68036 -1559.2523,-150.68038 z "
+         style="opacity:0.40206185;color:black;fill:url(#radialGradient6719);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" />
+    </g>
+  </g>
+  <g
+     style="display:inline"
+     inkscape:groupmode="layer"
+     inkscape:label="Base"
+     id="layer1">
+    <rect
+       style="color:#000000;fill:url(#radialGradient15658);fill-opacity:1.0000000;fill-rule:nonzero;stroke:url(#radialGradient15656);stroke-width:1.0000000;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4.0000000;stroke-dashoffset:0.0000000;stroke-opacity:1.0000000;marker:none;marker-start:none;marker-mid:none;marker-end:none;visibility:visible;display:block;overflow:visible"
+       id="rect15391"
+       width="34.875000"
+       height="40.920494"
+       x="6.6035528"
+       y="3.6464462"
+       ry="1.1490486" />
+    <rect
+       style="color:#000000;fill:none;fill-opacity:1.0000000;fill-rule:nonzero;stroke:url(#radialGradient15668);stroke-width:1.0000000;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4.0000000;stroke-dashoffset:0.0000000;stroke-opacity:1.0000000;marker:none;marker-start:none;marker-mid:none;marker-end:none;visibility:visible;display:block;overflow:visible"
+       id="rect15660"
+       width="32.775887"
+       height="38.946384"
+       x="7.6660538"
+       y="4.5839462"
+       ry="0.14904857"
+       rx="0.14904857" />
+    <g
+       transform="translate(0.646447,-3.798933e-2)"
+       id="g2270">
+      <g
+         id="g1440"
+         style="fill:#ffffff;fill-opacity:1.0000000;fill-rule:nonzero;stroke:#000000;stroke-miterlimit:4.0000000"
+         transform="matrix(0.229703,0.000000,0.000000,0.229703,4.967081,4.244972)">
+        <radialGradient
+           id="radialGradient1442"
+           cx="20.892099"
+           cy="114.56840"
+           r="5.2560000"
+           fx="20.892099"
+           fy="114.56840"
+           gradientUnits="userSpaceOnUse">
+          <stop
+             offset="0"
+             style="stop-color:#F0F0F0"
+             id="stop1444" />
+          <stop
+             offset="1"
+             style="stop-color:#474747"
+             id="stop1446" />
+        </radialGradient>
+        <path
+           style="stroke:none"
+           d="M 23.428000,113.07000 C 23.428000,115.04300 21.828000,116.64200 19.855000,116.64200 C 17.881000,116.64200 16.282000,115.04200 16.282000,113.07000 C 16.282000,111.09600 17.882000,109.49700 19.855000,109.49700 C 21.828000,109.49700 23.428000,111.09700 23.428000,113.07000 z "
+           id="path1448" />
+        <radialGradient
+           id="radialGradient1450"
+           cx="20.892099"
+           cy="64.567902"
+           r="5.2570000"
+           fx="20.892099"
+           fy="64.567902"
+           gradientUnits="userSpaceOnUse">
+          <stop
+             offset="0"
+             style="stop-color:#F0F0F0"
+             id="stop1452" />
+          <stop
+             offset="1"
+             style="stop-color:#474747"
+             id="stop1454" />
+        </radialGradient>
+        <path
+           style="stroke:none"
+           d="M 23.428000,63.070000 C 23.428000,65.043000 21.828000,66.643000 19.855000,66.643000 C 17.881000,66.643000 16.282000,65.043000 16.282000,63.070000 C 16.282000,61.096000 17.882000,59.497000 19.855000,59.497000 C 21.828000,59.497000 23.428000,61.097000 23.428000,63.070000 z "
+           id="path1456" />
+      </g>
+      <path
+         style="fill:url(#radialGradient2283);fill-rule:nonzero;stroke:none;stroke-miterlimit:4.0000000"
+         d="M 9.9950109,29.952326 C 9.9950109,30.405530 9.6274861,30.772825 9.1742821,30.772825 C 8.7208483,30.772825 8.3535532,30.405301 8.3535532,29.952326 C 8.3535532,29.498892 8.7210780,29.131597 9.1742821,29.131597 C 9.6274861,29.131597 9.9950109,29.499122 9.9950109,29.952326 z "
+         id="path15570" />
+      <path
+         style="fill:url(#radialGradient2285);fill-rule:nonzero;stroke:none;stroke-miterlimit:4.0000000"
+         d="M 9.9950109,18.467176 C 9.9950109,18.920380 9.6274861,19.287905 9.1742821,19.287905 C 8.7208483,19.287905 8.3535532,18.920380 8.3535532,18.467176 C 8.3535532,18.013742 8.7210780,17.646447 9.1742821,17.646447 C 9.6274861,17.646447 9.9950109,18.013972 9.9950109,18.467176 z "
+         id="path15577" />
+    </g>
+    <path
+       style="fill:none;fill-opacity:0.75000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.98855311;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4.0000000;stroke-opacity:0.017543854"
+       d="M 11.505723,5.4942766 L 11.505723,43.400869"
+       id="path15672"
+       sodipodi:nodetypes="cc" />
+    <path
+       style="fill:none;fill-opacity:0.75000000;fill-rule:evenodd;stroke:#ffffff;stroke-width:1.0000000;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4.0000000;stroke-opacity:0.20467831"
+       d="M 12.500000,5.0205154 L 12.500000,43.038228"
+       id="path15674"
+       sodipodi:nodetypes="cc" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer5"
+     inkscape:label="Text"
+     style="display:inline">
+    <g
+       transform="matrix(0.909091,0.000000,0.000000,1.000000,2.363628,0.000000)"
+       id="g2253">
+      <rect
+         style="color:#000000;fill:#9b9b9b;fill-opacity:0.54970759;fill-rule:nonzero;stroke:none;stroke-width:1.0000000;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4.0000000;stroke-dashoffset:0.0000000;stroke-opacity:0.081871338;marker:none;marker-start:none;marker-mid:none;marker-end:none;visibility:visible;display:block;overflow:visible"
+         id="rect15686"
+         width="22.000004"
+         height="1.0000000"
+         x="15.000002"
+         y="9.0000000"
+         rx="0.15156493"
+         ry="0.065390877" />
+      <rect
+         style="color:#000000;fill:#9b9b9b;fill-opacity:0.54970759;fill-rule:nonzero;stroke:none;stroke-width:1.0000000;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4.0000000;stroke-dashoffset:0.0000000;stroke-opacity:0.081871338;marker:none;marker-start:none;marker-mid:none;marker-end:none;visibility:visible;display:block;overflow:visible"
+         id="rect15688"
+         width="22.000004"
+         height="1.0000000"
+         x="15.000002"
+         y="11.000000"
+         rx="0.15156493"
+         ry="0.065390877" />
+      <rect
+         style="color:#000000;fill:#9b9b9b;fill-opacity:0.54970759;fill-rule:nonzero;stroke:none;stroke-width:1.0000000;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4.0000000;stroke-dashoffset:0.0000000;stroke-opacity:0.081871338;marker:none;marker-start:none;marker-mid:none;marker-end:none;visibility:visible;display:block;overflow:visible"
+         id="rect15690"
+         width="22.000004"
+         height="1.0000000"
+         x="15.000002"
+         y="13.000000"
+         rx="0.15156493"
+         ry="0.065390877" />
+      <rect
+         style="color:#000000;fill:#9b9b9b;fill-opacity:0.54970759;fill-rule:nonzero;stroke:none;stroke-width:1.0000000;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4.0000000;stroke-dashoffset:0.0000000;stroke-opacity:0.081871338;marker:none;marker-start:none;marker-mid:none;marker-end:none;visibility:visible;display:block;overflow:visible"
+         id="rect15692"
+         width="22.000004"
+         height="1.0000000"
+         x="15.000002"
+         y="15.000000"
+         rx="0.15156493"
+         ry="0.065390877" />
+      <rect
+         style="color:#000000;fill:#9b9b9b;fill-opacity:0.54970759;fill-rule:nonzero;stroke:none;stroke-width:1.0000000;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4.0000000;stroke-dashoffset:0.0000000;stroke-opacity:0.081871338;marker:none;marker-start:none;marker-mid:none;marker-end:none;visibility:visible;display:block;overflow:visible"
+         id="rect15694"
+         width="22.000004"
+         height="1.0000000"
+         x="15.000002"
+         y="17.000000"
+         rx="0.15156493"
+         ry="0.065390877" />
+      <rect
+         style="color:#000000;fill:#9b9b9b;fill-opacity:0.54970759;fill-rule:nonzero;stroke:none;stroke-width:1.0000000;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4.0000000;stroke-dashoffset:0.0000000;stroke-opacity:0.081871338;marker:none;marker-start:none;marker-mid:none;marker-end:none;visibility:visible;display:block;overflow:visible"
+         id="rect15696"
+         width="22.000004"
+         height="1.0000000"
+         x="15.000002"
+         y="19.000000"
+         rx="0.15156493"
+         ry="0.065390877" />
+      <rect
+         style="color:#000000;fill:#9b9b9b;fill-opacity:0.54970759;fill-rule:nonzero;stroke:none;stroke-width:1.0000000;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4.0000000;stroke-dashoffset:0.0000000;stroke-opacity:0.081871338;marker:none;marker-start:none;marker-mid:none;marker-end:none;visibility:visible;display:block;overflow:visible"
+         id="rect15698"
+         width="22.000004"
+         height="1.0000000"
+         x="15.000002"
+         y="21.000000"
+         rx="0.15156493"
+         ry="0.065390877" />
+      <rect
+         style="color:#000000;fill:#9b9b9b;fill-opacity:0.54970759;fill-rule:nonzero;stroke:none;stroke-width:1.0000000;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4.0000000;stroke-dashoffset:0.0000000;stroke-opacity:0.081871338;marker:none;marker-start:none;marker-mid:none;marker-end:none;visibility:visible;display:block;overflow:visible"
+         id="rect15700"
+         width="22.000004"
+         height="1.0000000"
+         x="15.000002"
+         y="23.000000"
+         rx="0.15156493"
+         ry="0.065390877" />
+      <rect
+         style="color:#000000;fill:#9b9b9b;fill-opacity:0.54970759;fill-rule:nonzero;stroke:none;stroke-width:1.0000000;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4.0000000;stroke-dashoffset:0.0000000;stroke-opacity:0.081871338;marker:none;marker-start:none;marker-mid:none;marker-end:none;visibility:visible;display:block;overflow:visible"
+         id="rect15732"
+         width="9.9000053"
+         height="1.0000000"
+         x="14.999992"
+         y="25.000000"
+         rx="0.068204239"
+         ry="0.065390877" />
+      <rect
+         style="color:#000000;fill:#9b9b9b;fill-opacity:0.54970759;fill-rule:nonzero;stroke:none;stroke-width:1.0000000;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4.0000000;stroke-dashoffset:0.0000000;stroke-opacity:0.081871338;marker:none;marker-start:none;marker-mid:none;marker-end:none;visibility:visible;display:block;overflow:visible"
+         id="rect15736"
+         width="22.000004"
+         height="1.0000000"
+         x="14.999992"
+         y="29.000000"
+         rx="0.15156493"
+         ry="0.065390877" />
+      <rect
+         style="color:#000000;fill:#9b9b9b;fill-opacity:0.54970759;fill-rule:nonzero;stroke:none;stroke-width:1.0000000;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4.0000000;stroke-dashoffset:0.0000000;stroke-opacity:0.081871338;marker:none;marker-start:none;marker-mid:none;marker-end:none;visibility:visible;display:block;overflow:visible"
+         id="rect15738"
+         width="22.000004"
+         height="1.0000000"
+         x="14.999992"
+         y="31.000000"
+         rx="0.15156493"
+         ry="0.065390877" />
+      <rect
+         style="color:#000000;fill:#9b9b9b;fill-opacity:0.54970759;fill-rule:nonzero;stroke:none;stroke-width:1.0000000;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4.0000000;stroke-dashoffset:0.0000000;stroke-opacity:0.081871338;marker:none;marker-start:none;marker-mid:none;marker-end:none;visibility:visible;display:block;overflow:visible"
+         id="rect15740"
+         width="22.000004"
+         height="1.0000000"
+         x="14.999992"
+         y="33.000000"
+         rx="0.15156493"
+         ry="0.065390877" />
+      <rect
+         style="color:#000000;fill:#9b9b9b;fill-opacity:0.54970759;fill-rule:nonzero;stroke:none;stroke-width:1.0000000;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4.0000000;stroke-dashoffset:0.0000000;stroke-opacity:0.081871338;marker:none;marker-start:none;marker-mid:none;marker-end:none;visibility:visible;display:block;overflow:visible"
+         id="rect15742"
+         width="22.000004"
+         height="1.0000000"
+         x="14.999992"
+         y="35.000000"
+         rx="0.15156493"
+         ry="0.065390877" />
+      <rect
+         style="color:#000000;fill:#9b9b9b;fill-opacity:0.54970759;fill-rule:nonzero;stroke:none;stroke-width:1.0000000;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4.0000000;stroke-dashoffset:0.0000000;stroke-opacity:0.081871338;marker:none;marker-start:none;marker-mid:none;marker-end:none;visibility:visible;display:block;overflow:visible"
+         id="rect15744"
+         width="15.400014"
+         height="1.0000000"
+         x="14.999992"
+         y="37.000000"
+         rx="0.10609552"
+         ry="0.065390877" />
+    </g>
+  </g>
+</svg>
diff --git a/paf0/media/images/favicon.ico b/paf0/media/images/favicon.ico
new file mode 100644 (file)
index 0000000..33ba99a
Binary files /dev/null and b/paf0/media/images/favicon.ico differ
diff --git a/paf0/media/images/icones/indicateur.png b/paf0/media/images/icones/indicateur.png
new file mode 100644 (file)
index 0000000..ee6b488
Binary files /dev/null and b/paf0/media/images/icones/indicateur.png differ
diff --git a/paf0/media/images/icones/projet.png b/paf0/media/images/icones/projet.png
new file mode 100644 (file)
index 0000000..5949f9d
Binary files /dev/null and b/paf0/media/images/icones/projet.png differ
diff --git a/paf0/media/images/lightbulb.png b/paf0/media/images/lightbulb.png
new file mode 100644 (file)
index 0000000..d22fde8
Binary files /dev/null and b/paf0/media/images/lightbulb.png differ
diff --git a/paf0/media/images/loading.gif b/paf0/media/images/loading.gif
new file mode 100644 (file)
index 0000000..6bdc3b5
Binary files /dev/null and b/paf0/media/images/loading.gif differ
diff --git a/paf0/media/images/logo.gif b/paf0/media/images/logo.gif
new file mode 100644 (file)
index 0000000..86cfaf5
Binary files /dev/null and b/paf0/media/images/logo.gif differ
diff --git a/paf0/media/images/menubck.png b/paf0/media/images/menubck.png
new file mode 100644 (file)
index 0000000..94bddf1
Binary files /dev/null and b/paf0/media/images/menubck.png differ
diff --git a/paf0/media/images/mnubck.png b/paf0/media/images/mnubck.png
new file mode 100644 (file)
index 0000000..1225cb8
Binary files /dev/null and b/paf0/media/images/mnubck.png differ
diff --git a/paf0/media/images/page_white_edit.png b/paf0/media/images/page_white_edit.png
new file mode 100644 (file)
index 0000000..b93e776
Binary files /dev/null and b/paf0/media/images/page_white_edit.png differ
diff --git a/paf0/media/images/page_white_magnify.png b/paf0/media/images/page_white_magnify.png
new file mode 100644 (file)
index 0000000..f6b74cc
Binary files /dev/null and b/paf0/media/images/page_white_magnify.png differ
diff --git a/paf0/media/images/page_white_medal.png b/paf0/media/images/page_white_medal.png
new file mode 100644 (file)
index 0000000..d3fffb6
Binary files /dev/null and b/paf0/media/images/page_white_medal.png differ
diff --git a/paf0/media/images/pdf.png b/paf0/media/images/pdf.png
new file mode 100644 (file)
index 0000000..7962226
Binary files /dev/null and b/paf0/media/images/pdf.png differ
diff --git a/paf0/media/images/photo.png b/paf0/media/images/photo.png
new file mode 100644 (file)
index 0000000..abacc44
Binary files /dev/null and b/paf0/media/images/photo.png differ
diff --git a/paf0/media/images/srcbck.png b/paf0/media/images/srcbck.png
new file mode 100644 (file)
index 0000000..dcf1824
Binary files /dev/null and b/paf0/media/images/srcbck.png differ
diff --git a/paf0/media/images/user.png b/paf0/media/images/user.png
new file mode 100644 (file)
index 0000000..79f35cc
Binary files /dev/null and b/paf0/media/images/user.png differ
diff --git a/paf0/media/images/zoom.png b/paf0/media/images/zoom.png
new file mode 100644 (file)
index 0000000..908612e
Binary files /dev/null and b/paf0/media/images/zoom.png differ
diff --git a/paf0/media/js/jquery-1.3.2.min.js b/paf0/media/js/jquery-1.3.2.min.js
new file mode 100644 (file)
index 0000000..b1ae21d
--- /dev/null
@@ -0,0 +1,19 @@
+/*
+ * jQuery JavaScript Library v1.3.2
+ * http://jquery.com/
+ *
+ * Copyright (c) 2009 John Resig
+ * Dual licensed under the MIT and GPL licenses.
+ * http://docs.jquery.com/License
+ *
+ * Date: 2009-02-19 17:34:21 -0500 (Thu, 19 Feb 2009)
+ * Revision: 6246
+ */
+(function(){var l=this,g,y=l.jQuery,p=l.$,o=l.jQuery=l.$=function(E,F){return new o.fn.init(E,F)},D=/^[^<]*(<(.|\s)+>)[^>]*$|^#([\w-]+)$/,f=/^.[^:#\[\.,]*$/;o.fn=o.prototype={init:function(E,H){E=E||document;if(E.nodeType){this[0]=E;this.length=1;this.context=E;return this}if(typeof E==="string"){var G=D.exec(E);if(G&&(G[1]||!H)){if(G[1]){E=o.clean([G[1]],H)}else{var I=document.getElementById(G[3]);if(I&&I.id!=G[3]){return o().find(E)}var F=o(I||[]);F.context=document;F.selector=E;return F}}else{return o(H).find(E)}}else{if(o.isFunction(E)){return o(document).ready(E)}}if(E.selector&&E.context){this.selector=E.selector;this.context=E.context}return this.setArray(o.isArray(E)?E:o.makeArray(E))},selector:"",jquery:"1.3.2",size:function(){return this.length},get:function(E){return E===g?Array.prototype.slice.call(this):this[E]},pushStack:function(F,H,E){var G=o(F);G.prevObject=this;G.context=this.context;if(H==="find"){G.selector=this.selector+(this.selector?" ":"")+E}else{if(H){G.selector=this.selector+"."+H+"("+E+")"}}return G},setArray:function(E){this.length=0;Array.prototype.push.apply(this,E);return this},each:function(F,E){return o.each(this,F,E)},index:function(E){return o.inArray(E&&E.jquery?E[0]:E,this)},attr:function(F,H,G){var E=F;if(typeof F==="string"){if(H===g){return this[0]&&o[G||"attr"](this[0],F)}else{E={};E[F]=H}}return this.each(function(I){for(F in E){o.attr(G?this.style:this,F,o.prop(this,E[F],G,I,F))}})},css:function(E,F){if((E=="width"||E=="height")&&parseFloat(F)<0){F=g}return this.attr(E,F,"curCSS")},text:function(F){if(typeof F!=="object"&&F!=null){return this.empty().append((this[0]&&this[0].ownerDocument||document).createTextNode(F))}var E="";o.each(F||this,function(){o.each(this.childNodes,function(){if(this.nodeType!=8){E+=this.nodeType!=1?this.nodeValue:o.fn.text([this])}})});return E},wrapAll:function(E){if(this[0]){var F=o(E,this[0].ownerDocument).clone();if(this[0].parentNode){F.insertBefore(this[0])}F.map(function(){var G=this;while(G.firstChild){G=G.firstChild}return G}).append(this)}return this},wrapInner:function(E){return this.each(function(){o(this).contents().wrapAll(E)})},wrap:function(E){return this.each(function(){o(this).wrapAll(E)})},append:function(){return this.domManip(arguments,true,function(E){if(this.nodeType==1){this.appendChild(E)}})},prepend:function(){return this.domManip(arguments,true,function(E){if(this.nodeType==1){this.insertBefore(E,this.firstChild)}})},before:function(){return this.domManip(arguments,false,function(E){this.parentNode.insertBefore(E,this)})},after:function(){return this.domManip(arguments,false,function(E){this.parentNode.insertBefore(E,this.nextSibling)})},end:function(){return this.prevObject||o([])},push:[].push,sort:[].sort,splice:[].splice,find:function(E){if(this.length===1){var F=this.pushStack([],"find",E);F.length=0;o.find(E,this[0],F);return F}else{return this.pushStack(o.unique(o.map(this,function(G){return o.find(E,G)})),"find",E)}},clone:function(G){var E=this.map(function(){if(!o.support.noCloneEvent&&!o.isXMLDoc(this)){var I=this.outerHTML;if(!I){var J=this.ownerDocument.createElement("div");J.appendChild(this.cloneNode(true));I=J.innerHTML}return o.clean([I.replace(/ jQuery\d+="(?:\d+|null)"/g,"").replace(/^\s*/,"")])[0]}else{return this.cloneNode(true)}});if(G===true){var H=this.find("*").andSelf(),F=0;E.find("*").andSelf().each(function(){if(this.nodeName!==H[F].nodeName){return}var I=o.data(H[F],"events");for(var K in I){for(var J in I[K]){o.event.add(this,K,I[K][J],I[K][J].data)}}F++})}return E},filter:function(E){return this.pushStack(o.isFunction(E)&&o.grep(this,function(G,F){return E.call(G,F)})||o.multiFilter(E,o.grep(this,function(F){return F.nodeType===1})),"filter",E)},closest:function(E){var G=o.expr.match.POS.test(E)?o(E):null,F=0;return this.map(function(){var H=this;while(H&&H.ownerDocument){if(G?G.index(H)>-1:o(H).is(E)){o.data(H,"closest",F);return H}H=H.parentNode;F++}})},not:function(E){if(typeof E==="string"){if(f.test(E)){return this.pushStack(o.multiFilter(E,this,true),"not",E)}else{E=o.multiFilter(E,this)}}var F=E.length&&E[E.length-1]!==g&&!E.nodeType;return this.filter(function(){return F?o.inArray(this,E)<0:this!=E})},add:function(E){return this.pushStack(o.unique(o.merge(this.get(),typeof E==="string"?o(E):o.makeArray(E))))},is:function(E){return !!E&&o.multiFilter(E,this).length>0},hasClass:function(E){return !!E&&this.is("."+E)},val:function(K){if(K===g){var E=this[0];if(E){if(o.nodeName(E,"option")){return(E.attributes.value||{}).specified?E.value:E.text}if(o.nodeName(E,"select")){var I=E.selectedIndex,L=[],M=E.options,H=E.type=="select-one";if(I<0){return null}for(var F=H?I:0,J=H?I+1:M.length;F<J;F++){var G=M[F];if(G.selected){K=o(G).val();if(H){return K}L.push(K)}}return L}return(E.value||"").replace(/\r/g,"")}return g}if(typeof K==="number"){K+=""}return this.each(function(){if(this.nodeType!=1){return}if(o.isArray(K)&&/radio|checkbox/.test(this.type)){this.checked=(o.inArray(this.value,K)>=0||o.inArray(this.name,K)>=0)}else{if(o.nodeName(this,"select")){var N=o.makeArray(K);o("option",this).each(function(){this.selected=(o.inArray(this.value,N)>=0||o.inArray(this.text,N)>=0)});if(!N.length){this.selectedIndex=-1}}else{this.value=K}}})},html:function(E){return E===g?(this[0]?this[0].innerHTML.replace(/ jQuery\d+="(?:\d+|null)"/g,""):null):this.empty().append(E)},replaceWith:function(E){return this.after(E).remove()},eq:function(E){return this.slice(E,+E+1)},slice:function(){return this.pushStack(Array.prototype.slice.apply(this,arguments),"slice",Array.prototype.slice.call(arguments).join(","))},map:function(E){return this.pushStack(o.map(this,function(G,F){return E.call(G,F,G)}))},andSelf:function(){return this.add(this.prevObject)},domManip:function(J,M,L){if(this[0]){var I=(this[0].ownerDocument||this[0]).createDocumentFragment(),F=o.clean(J,(this[0].ownerDocument||this[0]),I),H=I.firstChild;if(H){for(var G=0,E=this.length;G<E;G++){L.call(K(this[G],H),this.length>1||G>0?I.cloneNode(true):I)}}if(F){o.each(F,z)}}return this;function K(N,O){return M&&o.nodeName(N,"table")&&o.nodeName(O,"tr")?(N.getElementsByTagName("tbody")[0]||N.appendChild(N.ownerDocument.createElement("tbody"))):N}}};o.fn.init.prototype=o.fn;function z(E,F){if(F.src){o.ajax({url:F.src,async:false,dataType:"script"})}else{o.globalEval(F.text||F.textContent||F.innerHTML||"")}if(F.parentNode){F.parentNode.removeChild(F)}}function e(){return +new Date}o.extend=o.fn.extend=function(){var J=arguments[0]||{},H=1,I=arguments.length,E=false,G;if(typeof J==="boolean"){E=J;J=arguments[1]||{};H=2}if(typeof J!=="object"&&!o.isFunction(J)){J={}}if(I==H){J=this;--H}for(;H<I;H++){if((G=arguments[H])!=null){for(var F in G){var K=J[F],L=G[F];if(J===L){continue}if(E&&L&&typeof L==="object"&&!L.nodeType){J[F]=o.extend(E,K||(L.length!=null?[]:{}),L)}else{if(L!==g){J[F]=L}}}}}return J};var b=/z-?index|font-?weight|opacity|zoom|line-?height/i,q=document.defaultView||{},s=Object.prototype.toString;o.extend({noConflict:function(E){l.$=p;if(E){l.jQuery=y}return o},isFunction:function(E){return s.call(E)==="[object Function]"},isArray:function(E){return s.call(E)==="[object Array]"},isXMLDoc:function(E){return E.nodeType===9&&E.documentElement.nodeName!=="HTML"||!!E.ownerDocument&&o.isXMLDoc(E.ownerDocument)},globalEval:function(G){if(G&&/\S/.test(G)){var F=document.getElementsByTagName("head")[0]||document.documentElement,E=document.createElement("script");E.type="text/javascript";if(o.support.scriptEval){E.appendChild(document.createTextNode(G))}else{E.text=G}F.insertBefore(E,F.firstChild);F.removeChild(E)}},nodeName:function(F,E){return F.nodeName&&F.nodeName.toUpperCase()==E.toUpperCase()},each:function(G,K,F){var E,H=0,I=G.length;if(F){if(I===g){for(E in G){if(K.apply(G[E],F)===false){break}}}else{for(;H<I;){if(K.apply(G[H++],F)===false){break}}}}else{if(I===g){for(E in G){if(K.call(G[E],E,G[E])===false){break}}}else{for(var J=G[0];H<I&&K.call(J,H,J)!==false;J=G[++H]){}}}return G},prop:function(H,I,G,F,E){if(o.isFunction(I)){I=I.call(H,F)}return typeof I==="number"&&G=="curCSS"&&!b.test(E)?I+"px":I},className:{add:function(E,F){o.each((F||"").split(/\s+/),function(G,H){if(E.nodeType==1&&!o.className.has(E.className,H)){E.className+=(E.className?" ":"")+H}})},remove:function(E,F){if(E.nodeType==1){E.className=F!==g?o.grep(E.className.split(/\s+/),function(G){return !o.className.has(F,G)}).join(" "):""}},has:function(F,E){return F&&o.inArray(E,(F.className||F).toString().split(/\s+/))>-1}},swap:function(H,G,I){var E={};for(var F in G){E[F]=H.style[F];H.style[F]=G[F]}I.call(H);for(var F in G){H.style[F]=E[F]}},css:function(H,F,J,E){if(F=="width"||F=="height"){var L,G={position:"absolute",visibility:"hidden",display:"block"},K=F=="width"?["Left","Right"]:["Top","Bottom"];function I(){L=F=="width"?H.offsetWidth:H.offsetHeight;if(E==="border"){return}o.each(K,function(){if(!E){L-=parseFloat(o.curCSS(H,"padding"+this,true))||0}if(E==="margin"){L+=parseFloat(o.curCSS(H,"margin"+this,true))||0}else{L-=parseFloat(o.curCSS(H,"border"+this+"Width",true))||0}})}if(H.offsetWidth!==0){I()}else{o.swap(H,G,I)}return Math.max(0,Math.round(L))}return o.curCSS(H,F,J)},curCSS:function(I,F,G){var L,E=I.style;if(F=="opacity"&&!o.support.opacity){L=o.attr(E,"opacity");return L==""?"1":L}if(F.match(/float/i)){F=w}if(!G&&E&&E[F]){L=E[F]}else{if(q.getComputedStyle){if(F.match(/float/i)){F="float"}F=F.replace(/([A-Z])/g,"-$1").toLowerCase();var M=q.getComputedStyle(I,null);if(M){L=M.getPropertyValue(F)}if(F=="opacity"&&L==""){L="1"}}else{if(I.currentStyle){var J=F.replace(/\-(\w)/g,function(N,O){return O.toUpperCase()});L=I.currentStyle[F]||I.currentStyle[J];if(!/^\d+(px)?$/i.test(L)&&/^\d/.test(L)){var H=E.left,K=I.runtimeStyle.left;I.runtimeStyle.left=I.currentStyle.left;E.left=L||0;L=E.pixelLeft+"px";E.left=H;I.runtimeStyle.left=K}}}}return L},clean:function(F,K,I){K=K||document;if(typeof K.createElement==="undefined"){K=K.ownerDocument||K[0]&&K[0].ownerDocument||document}if(!I&&F.length===1&&typeof F[0]==="string"){var H=/^<(\w+)\s*\/?>$/.exec(F[0]);if(H){return[K.createElement(H[1])]}}var G=[],E=[],L=K.createElement("div");o.each(F,function(P,S){if(typeof S==="number"){S+=""}if(!S){return}if(typeof S==="string"){S=S.replace(/(<(\w+)[^>]*?)\/>/g,function(U,V,T){return T.match(/^(abbr|br|col|img|input|link|meta|param|hr|area|embed)$/i)?U:V+"></"+T+">"});var O=S.replace(/^\s+/,"").substring(0,10).toLowerCase();var Q=!O.indexOf("<opt")&&[1,"<select multiple='multiple'>","</select>"]||!O.indexOf("<leg")&&[1,"<fieldset>","</fieldset>"]||O.match(/^<(thead|tbody|tfoot|colg|cap)/)&&[1,"<table>","</table>"]||!O.indexOf("<tr")&&[2,"<table><tbody>","</tbody></table>"]||(!O.indexOf("<td")||!O.indexOf("<th"))&&[3,"<table><tbody><tr>","</tr></tbody></table>"]||!O.indexOf("<col")&&[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"]||!o.support.htmlSerialize&&[1,"div<div>","</div>"]||[0,"",""];L.innerHTML=Q[1]+S+Q[2];while(Q[0]--){L=L.lastChild}if(!o.support.tbody){var R=/<tbody/i.test(S),N=!O.indexOf("<table")&&!R?L.firstChild&&L.firstChild.childNodes:Q[1]=="<table>"&&!R?L.childNodes:[];for(var M=N.length-1;M>=0;--M){if(o.nodeName(N[M],"tbody")&&!N[M].childNodes.length){N[M].parentNode.removeChild(N[M])}}}if(!o.support.leadingWhitespace&&/^\s/.test(S)){L.insertBefore(K.createTextNode(S.match(/^\s*/)[0]),L.firstChild)}S=o.makeArray(L.childNodes)}if(S.nodeType){G.push(S)}else{G=o.merge(G,S)}});if(I){for(var J=0;G[J];J++){if(o.nodeName(G[J],"script")&&(!G[J].type||G[J].type.toLowerCase()==="text/javascript")){E.push(G[J].parentNode?G[J].parentNode.removeChild(G[J]):G[J])}else{if(G[J].nodeType===1){G.splice.apply(G,[J+1,0].concat(o.makeArray(G[J].getElementsByTagName("script"))))}I.appendChild(G[J])}}return E}return G},attr:function(J,G,K){if(!J||J.nodeType==3||J.nodeType==8){return g}var H=!o.isXMLDoc(J),L=K!==g;G=H&&o.props[G]||G;if(J.tagName){var F=/href|src|style/.test(G);if(G=="selected"&&J.parentNode){J.parentNode.selectedIndex}if(G in J&&H&&!F){if(L){if(G=="type"&&o.nodeName(J,"input")&&J.parentNode){throw"type property can't be changed"}J[G]=K}if(o.nodeName(J,"form")&&J.getAttributeNode(G)){return J.getAttributeNode(G).nodeValue}if(G=="tabIndex"){var I=J.getAttributeNode("tabIndex");return I&&I.specified?I.value:J.nodeName.match(/(button|input|object|select|textarea)/i)?0:J.nodeName.match(/^(a|area)$/i)&&J.href?0:g}return J[G]}if(!o.support.style&&H&&G=="style"){return o.attr(J.style,"cssText",K)}if(L){J.setAttribute(G,""+K)}var E=!o.support.hrefNormalized&&H&&F?J.getAttribute(G,2):J.getAttribute(G);return E===null?g:E}if(!o.support.opacity&&G=="opacity"){if(L){J.zoom=1;J.filter=(J.filter||"").replace(/alpha\([^)]*\)/,"")+(parseInt(K)+""=="NaN"?"":"alpha(opacity="+K*100+")")}return J.filter&&J.filter.indexOf("opacity=")>=0?(parseFloat(J.filter.match(/opacity=([^)]*)/)[1])/100)+"":""}G=G.replace(/-([a-z])/ig,function(M,N){return N.toUpperCase()});if(L){J[G]=K}return J[G]},trim:function(E){return(E||"").replace(/^\s+|\s+$/g,"")},makeArray:function(G){var E=[];if(G!=null){var F=G.length;if(F==null||typeof G==="string"||o.isFunction(G)||G.setInterval){E[0]=G}else{while(F){E[--F]=G[F]}}}return E},inArray:function(G,H){for(var E=0,F=H.length;E<F;E++){if(H[E]===G){return E}}return -1},merge:function(H,E){var F=0,G,I=H.length;if(!o.support.getAll){while((G=E[F++])!=null){if(G.nodeType!=8){H[I++]=G}}}else{while((G=E[F++])!=null){H[I++]=G}}return H},unique:function(K){var F=[],E={};try{for(var G=0,H=K.length;G<H;G++){var J=o.data(K[G]);if(!E[J]){E[J]=true;F.push(K[G])}}}catch(I){F=K}return F},grep:function(F,J,E){var G=[];for(var H=0,I=F.length;H<I;H++){if(!E!=!J(F[H],H)){G.push(F[H])}}return G},map:function(E,J){var F=[];for(var G=0,H=E.length;G<H;G++){var I=J(E[G],G);if(I!=null){F[F.length]=I}}return F.concat.apply([],F)}});var C=navigator.userAgent.toLowerCase();o.browser={version:(C.match(/.+(?:rv|it|ra|ie)[\/: ]([\d.]+)/)||[0,"0"])[1],safari:/webkit/.test(C),opera:/opera/.test(C),msie:/msie/.test(C)&&!/opera/.test(C),mozilla:/mozilla/.test(C)&&!/(compatible|webkit)/.test(C)};o.each({parent:function(E){return E.parentNode},parents:function(E){return o.dir(E,"parentNode")},next:function(E){return o.nth(E,2,"nextSibling")},prev:function(E){return o.nth(E,2,"previousSibling")},nextAll:function(E){return o.dir(E,"nextSibling")},prevAll:function(E){return o.dir(E,"previousSibling")},siblings:function(E){return o.sibling(E.parentNode.firstChild,E)},children:function(E){return o.sibling(E.firstChild)},contents:function(E){return o.nodeName(E,"iframe")?E.contentDocument||E.contentWindow.document:o.makeArray(E.childNodes)}},function(E,F){o.fn[E]=function(G){var H=o.map(this,F);if(G&&typeof G=="string"){H=o.multiFilter(G,H)}return this.pushStack(o.unique(H),E,G)}});o.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(E,F){o.fn[E]=function(G){var J=[],L=o(G);for(var K=0,H=L.length;K<H;K++){var I=(K>0?this.clone(true):this).get();o.fn[F].apply(o(L[K]),I);J=J.concat(I)}return this.pushStack(J,E,G)}});o.each({removeAttr:function(E){o.attr(this,E,"");if(this.nodeType==1){this.removeAttribute(E)}},addClass:function(E){o.className.add(this,E)},removeClass:function(E){o.className.remove(this,E)},toggleClass:function(F,E){if(typeof E!=="boolean"){E=!o.className.has(this,F)}o.className[E?"add":"remove"](this,F)},remove:function(E){if(!E||o.filter(E,[this]).length){o("*",this).add([this]).each(function(){o.event.remove(this);o.removeData(this)});if(this.parentNode){this.parentNode.removeChild(this)}}},empty:function(){o(this).children().remove();while(this.firstChild){this.removeChild(this.firstChild)}}},function(E,F){o.fn[E]=function(){return this.each(F,arguments)}});function j(E,F){return E[0]&&parseInt(o.curCSS(E[0],F,true),10)||0}var h="jQuery"+e(),v=0,A={};o.extend({cache:{},data:function(F,E,G){F=F==l?A:F;var H=F[h];if(!H){H=F[h]=++v}if(E&&!o.cache[H]){o.cache[H]={}}if(G!==g){o.cache[H][E]=G}return E?o.cache[H][E]:H},removeData:function(F,E){F=F==l?A:F;var H=F[h];if(E){if(o.cache[H]){delete o.cache[H][E];E="";for(E in o.cache[H]){break}if(!E){o.removeData(F)}}}else{try{delete F[h]}catch(G){if(F.removeAttribute){F.removeAttribute(h)}}delete o.cache[H]}},queue:function(F,E,H){if(F){E=(E||"fx")+"queue";var G=o.data(F,E);if(!G||o.isArray(H)){G=o.data(F,E,o.makeArray(H))}else{if(H){G.push(H)}}}return G},dequeue:function(H,G){var E=o.queue(H,G),F=E.shift();if(!G||G==="fx"){F=E[0]}if(F!==g){F.call(H)}}});o.fn.extend({data:function(E,G){var H=E.split(".");H[1]=H[1]?"."+H[1]:"";if(G===g){var F=this.triggerHandler("getData"+H[1]+"!",[H[0]]);if(F===g&&this.length){F=o.data(this[0],E)}return F===g&&H[1]?this.data(H[0]):F}else{return this.trigger("setData"+H[1]+"!",[H[0],G]).each(function(){o.data(this,E,G)})}},removeData:function(E){return this.each(function(){o.removeData(this,E)})},queue:function(E,F){if(typeof E!=="string"){F=E;E="fx"}if(F===g){return o.queue(this[0],E)}return this.each(function(){var G=o.queue(this,E,F);if(E=="fx"&&G.length==1){G[0].call(this)}})},dequeue:function(E){return this.each(function(){o.dequeue(this,E)})}});
+/*
+ * Sizzle CSS Selector Engine - v0.9.3
+ *  Copyright 2009, The Dojo Foundation
+ *  Released under the MIT, BSD, and GPL Licenses.
+ *  More information: http://sizzlejs.com/
+ */
+(function(){var R=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^[\]]*\]|['"][^'"]*['"]|[^[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?/g,L=0,H=Object.prototype.toString;var F=function(Y,U,ab,ac){ab=ab||[];U=U||document;if(U.nodeType!==1&&U.nodeType!==9){return[]}if(!Y||typeof Y!=="string"){return ab}var Z=[],W,af,ai,T,ad,V,X=true;R.lastIndex=0;while((W=R.exec(Y))!==null){Z.push(W[1]);if(W[2]){V=RegExp.rightContext;break}}if(Z.length>1&&M.exec(Y)){if(Z.length===2&&I.relative[Z[0]]){af=J(Z[0]+Z[1],U)}else{af=I.relative[Z[0]]?[U]:F(Z.shift(),U);while(Z.length){Y=Z.shift();if(I.relative[Y]){Y+=Z.shift()}af=J(Y,af)}}}else{var ae=ac?{expr:Z.pop(),set:E(ac)}:F.find(Z.pop(),Z.length===1&&U.parentNode?U.parentNode:U,Q(U));af=F.filter(ae.expr,ae.set);if(Z.length>0){ai=E(af)}else{X=false}while(Z.length){var ah=Z.pop(),ag=ah;if(!I.relative[ah]){ah=""}else{ag=Z.pop()}if(ag==null){ag=U}I.relative[ah](ai,ag,Q(U))}}if(!ai){ai=af}if(!ai){throw"Syntax error, unrecognized expression: "+(ah||Y)}if(H.call(ai)==="[object Array]"){if(!X){ab.push.apply(ab,ai)}else{if(U.nodeType===1){for(var aa=0;ai[aa]!=null;aa++){if(ai[aa]&&(ai[aa]===true||ai[aa].nodeType===1&&K(U,ai[aa]))){ab.push(af[aa])}}}else{for(var aa=0;ai[aa]!=null;aa++){if(ai[aa]&&ai[aa].nodeType===1){ab.push(af[aa])}}}}}else{E(ai,ab)}if(V){F(V,U,ab,ac);if(G){hasDuplicate=false;ab.sort(G);if(hasDuplicate){for(var aa=1;aa<ab.length;aa++){if(ab[aa]===ab[aa-1]){ab.splice(aa--,1)}}}}}return ab};F.matches=function(T,U){return F(T,null,null,U)};F.find=function(aa,T,ab){var Z,X;if(!aa){return[]}for(var W=0,V=I.order.length;W<V;W++){var Y=I.order[W],X;if((X=I.match[Y].exec(aa))){var U=RegExp.leftContext;if(U.substr(U.length-1)!=="\\"){X[1]=(X[1]||"").replace(/\\/g,"");Z=I.find[Y](X,T,ab);if(Z!=null){aa=aa.replace(I.match[Y],"");break}}}}if(!Z){Z=T.getElementsByTagName("*")}return{set:Z,expr:aa}};F.filter=function(ad,ac,ag,W){var V=ad,ai=[],aa=ac,Y,T,Z=ac&&ac[0]&&Q(ac[0]);while(ad&&ac.length){for(var ab in I.filter){if((Y=I.match[ab].exec(ad))!=null){var U=I.filter[ab],ah,af;T=false;if(aa==ai){ai=[]}if(I.preFilter[ab]){Y=I.preFilter[ab](Y,aa,ag,ai,W,Z);if(!Y){T=ah=true}else{if(Y===true){continue}}}if(Y){for(var X=0;(af=aa[X])!=null;X++){if(af){ah=U(af,Y,X,aa);var ae=W^!!ah;if(ag&&ah!=null){if(ae){T=true}else{aa[X]=false}}else{if(ae){ai.push(af);T=true}}}}}if(ah!==g){if(!ag){aa=ai}ad=ad.replace(I.match[ab],"");if(!T){return[]}break}}}if(ad==V){if(T==null){throw"Syntax error, unrecognized expression: "+ad}else{break}}V=ad}return aa};var I=F.selectors={order:["ID","NAME","TAG"],match:{ID:/#((?:[\w\u00c0-\uFFFF_-]|\\.)+)/,CLASS:/\.((?:[\w\u00c0-\uFFFF_-]|\\.)+)/,NAME:/\[name=['"]*((?:[\w\u00c0-\uFFFF_-]|\\.)+)['"]*\]/,ATTR:/\[\s*((?:[\w\u00c0-\uFFFF_-]|\\.)+)\s*(?:(\S?=)\s*(['"]*)(.*?)\3|)\s*\]/,TAG:/^((?:[\w\u00c0-\uFFFF\*_-]|\\.)+)/,CHILD:/:(only|nth|last|first)-child(?:\((even|odd|[\dn+-]*)\))?/,POS:/:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^-]|$)/,PSEUDO:/:((?:[\w\u00c0-\uFFFF_-]|\\.)+)(?:\((['"]*)((?:\([^\)]+\)|[^\2\(\)]*)+)\2\))?/},attrMap:{"class":"className","for":"htmlFor"},attrHandle:{href:function(T){return T.getAttribute("href")}},relative:{"+":function(aa,T,Z){var X=typeof T==="string",ab=X&&!/\W/.test(T),Y=X&&!ab;if(ab&&!Z){T=T.toUpperCase()}for(var W=0,V=aa.length,U;W<V;W++){if((U=aa[W])){while((U=U.previousSibling)&&U.nodeType!==1){}aa[W]=Y||U&&U.nodeName===T?U||false:U===T}}if(Y){F.filter(T,aa,true)}},">":function(Z,U,aa){var X=typeof U==="string";if(X&&!/\W/.test(U)){U=aa?U:U.toUpperCase();for(var V=0,T=Z.length;V<T;V++){var Y=Z[V];if(Y){var W=Y.parentNode;Z[V]=W.nodeName===U?W:false}}}else{for(var V=0,T=Z.length;V<T;V++){var Y=Z[V];if(Y){Z[V]=X?Y.parentNode:Y.parentNode===U}}if(X){F.filter(U,Z,true)}}},"":function(W,U,Y){var V=L++,T=S;if(!U.match(/\W/)){var X=U=Y?U:U.toUpperCase();T=P}T("parentNode",U,V,W,X,Y)},"~":function(W,U,Y){var V=L++,T=S;if(typeof U==="string"&&!U.match(/\W/)){var X=U=Y?U:U.toUpperCase();T=P}T("previousSibling",U,V,W,X,Y)}},find:{ID:function(U,V,W){if(typeof V.getElementById!=="undefined"&&!W){var T=V.getElementById(U[1]);return T?[T]:[]}},NAME:function(V,Y,Z){if(typeof Y.getElementsByName!=="undefined"){var U=[],X=Y.getElementsByName(V[1]);for(var W=0,T=X.length;W<T;W++){if(X[W].getAttribute("name")===V[1]){U.push(X[W])}}return U.length===0?null:U}},TAG:function(T,U){return U.getElementsByTagName(T[1])}},preFilter:{CLASS:function(W,U,V,T,Z,aa){W=" "+W[1].replace(/\\/g,"")+" ";if(aa){return W}for(var X=0,Y;(Y=U[X])!=null;X++){if(Y){if(Z^(Y.className&&(" "+Y.className+" ").indexOf(W)>=0)){if(!V){T.push(Y)}}else{if(V){U[X]=false}}}}return false},ID:function(T){return T[1].replace(/\\/g,"")},TAG:function(U,T){for(var V=0;T[V]===false;V++){}return T[V]&&Q(T[V])?U[1]:U[1].toUpperCase()},CHILD:function(T){if(T[1]=="nth"){var U=/(-?)(\d*)n((?:\+|-)?\d*)/.exec(T[2]=="even"&&"2n"||T[2]=="odd"&&"2n+1"||!/\D/.test(T[2])&&"0n+"+T[2]||T[2]);T[2]=(U[1]+(U[2]||1))-0;T[3]=U[3]-0}T[0]=L++;return T},ATTR:function(X,U,V,T,Y,Z){var W=X[1].replace(/\\/g,"");if(!Z&&I.attrMap[W]){X[1]=I.attrMap[W]}if(X[2]==="~="){X[4]=" "+X[4]+" "}return X},PSEUDO:function(X,U,V,T,Y){if(X[1]==="not"){if(X[3].match(R).length>1||/^\w/.test(X[3])){X[3]=F(X[3],null,null,U)}else{var W=F.filter(X[3],U,V,true^Y);if(!V){T.push.apply(T,W)}return false}}else{if(I.match.POS.test(X[0])||I.match.CHILD.test(X[0])){return true}}return X},POS:function(T){T.unshift(true);return T}},filters:{enabled:function(T){return T.disabled===false&&T.type!=="hidden"},disabled:function(T){return T.disabled===true},checked:function(T){return T.checked===true},selected:function(T){T.parentNode.selectedIndex;return T.selected===true},parent:function(T){return !!T.firstChild},empty:function(T){return !T.firstChild},has:function(V,U,T){return !!F(T[3],V).length},header:function(T){return/h\d/i.test(T.nodeName)},text:function(T){return"text"===T.type},radio:function(T){return"radio"===T.type},checkbox:function(T){return"checkbox"===T.type},file:function(T){return"file"===T.type},password:function(T){return"password"===T.type},submit:function(T){return"submit"===T.type},image:function(T){return"image"===T.type},reset:function(T){return"reset"===T.type},button:function(T){return"button"===T.type||T.nodeName.toUpperCase()==="BUTTON"},input:function(T){return/input|select|textarea|button/i.test(T.nodeName)}},setFilters:{first:function(U,T){return T===0},last:function(V,U,T,W){return U===W.length-1},even:function(U,T){return T%2===0},odd:function(U,T){return T%2===1},lt:function(V,U,T){return U<T[3]-0},gt:function(V,U,T){return U>T[3]-0},nth:function(V,U,T){return T[3]-0==U},eq:function(V,U,T){return T[3]-0==U}},filter:{PSEUDO:function(Z,V,W,aa){var U=V[1],X=I.filters[U];if(X){return X(Z,W,V,aa)}else{if(U==="contains"){return(Z.textContent||Z.innerText||"").indexOf(V[3])>=0}else{if(U==="not"){var Y=V[3];for(var W=0,T=Y.length;W<T;W++){if(Y[W]===Z){return false}}return true}}}},CHILD:function(T,W){var Z=W[1],U=T;switch(Z){case"only":case"first":while(U=U.previousSibling){if(U.nodeType===1){return false}}if(Z=="first"){return true}U=T;case"last":while(U=U.nextSibling){if(U.nodeType===1){return false}}return true;case"nth":var V=W[2],ac=W[3];if(V==1&&ac==0){return true}var Y=W[0],ab=T.parentNode;if(ab&&(ab.sizcache!==Y||!T.nodeIndex)){var X=0;for(U=ab.firstChild;U;U=U.nextSibling){if(U.nodeType===1){U.nodeIndex=++X}}ab.sizcache=Y}var aa=T.nodeIndex-ac;if(V==0){return aa==0}else{return(aa%V==0&&aa/V>=0)}}},ID:function(U,T){return U.nodeType===1&&U.getAttribute("id")===T},TAG:function(U,T){return(T==="*"&&U.nodeType===1)||U.nodeName===T},CLASS:function(U,T){return(" "+(U.className||U.getAttribute("class"))+" ").indexOf(T)>-1},ATTR:function(Y,W){var V=W[1],T=I.attrHandle[V]?I.attrHandle[V](Y):Y[V]!=null?Y[V]:Y.getAttribute(V),Z=T+"",X=W[2],U=W[4];return T==null?X==="!=":X==="="?Z===U:X==="*="?Z.indexOf(U)>=0:X==="~="?(" "+Z+" ").indexOf(U)>=0:!U?Z&&T!==false:X==="!="?Z!=U:X==="^="?Z.indexOf(U)===0:X==="$="?Z.substr(Z.length-U.length)===U:X==="|="?Z===U||Z.substr(0,U.length+1)===U+"-":false},POS:function(X,U,V,Y){var T=U[2],W=I.setFilters[T];if(W){return W(X,V,U,Y)}}}};var M=I.match.POS;for(var O in I.match){I.match[O]=RegExp(I.match[O].source+/(?![^\[]*\])(?![^\(]*\))/.source)}var E=function(U,T){U=Array.prototype.slice.call(U);if(T){T.push.apply(T,U);return T}return U};try{Array.prototype.slice.call(document.documentElement.childNodes)}catch(N){E=function(X,W){var U=W||[];if(H.call(X)==="[object Array]"){Array.prototype.push.apply(U,X)}else{if(typeof X.length==="number"){for(var V=0,T=X.length;V<T;V++){U.push(X[V])}}else{for(var V=0;X[V];V++){U.push(X[V])}}}return U}}var G;if(document.documentElement.compareDocumentPosition){G=function(U,T){var V=U.compareDocumentPosition(T)&4?-1:U===T?0:1;if(V===0){hasDuplicate=true}return V}}else{if("sourceIndex" in document.documentElement){G=function(U,T){var V=U.sourceIndex-T.sourceIndex;if(V===0){hasDuplicate=true}return V}}else{if(document.createRange){G=function(W,U){var V=W.ownerDocument.createRange(),T=U.ownerDocument.createRange();V.selectNode(W);V.collapse(true);T.selectNode(U);T.collapse(true);var X=V.compareBoundaryPoints(Range.START_TO_END,T);if(X===0){hasDuplicate=true}return X}}}}(function(){var U=document.createElement("form"),V="script"+(new Date).getTime();U.innerHTML="<input name='"+V+"'/>";var T=document.documentElement;T.insertBefore(U,T.firstChild);if(!!document.getElementById(V)){I.find.ID=function(X,Y,Z){if(typeof Y.getElementById!=="undefined"&&!Z){var W=Y.getElementById(X[1]);return W?W.id===X[1]||typeof W.getAttributeNode!=="undefined"&&W.getAttributeNode("id").nodeValue===X[1]?[W]:g:[]}};I.filter.ID=function(Y,W){var X=typeof Y.getAttributeNode!=="undefined"&&Y.getAttributeNode("id");return Y.nodeType===1&&X&&X.nodeValue===W}}T.removeChild(U)})();(function(){var T=document.createElement("div");T.appendChild(document.createComment(""));if(T.getElementsByTagName("*").length>0){I.find.TAG=function(U,Y){var X=Y.getElementsByTagName(U[1]);if(U[1]==="*"){var W=[];for(var V=0;X[V];V++){if(X[V].nodeType===1){W.push(X[V])}}X=W}return X}}T.innerHTML="<a href='#'></a>";if(T.firstChild&&typeof T.firstChild.getAttribute!=="undefined"&&T.firstChild.getAttribute("href")!=="#"){I.attrHandle.href=function(U){return U.getAttribute("href",2)}}})();if(document.querySelectorAll){(function(){var T=F,U=document.createElement("div");U.innerHTML="<p class='TEST'></p>";if(U.querySelectorAll&&U.querySelectorAll(".TEST").length===0){return}F=function(Y,X,V,W){X=X||document;if(!W&&X.nodeType===9&&!Q(X)){try{return E(X.querySelectorAll(Y),V)}catch(Z){}}return T(Y,X,V,W)};F.find=T.find;F.filter=T.filter;F.selectors=T.selectors;F.matches=T.matches})()}if(document.getElementsByClassName&&document.documentElement.getElementsByClassName){(function(){var T=document.createElement("div");T.innerHTML="<div class='test e'></div><div class='test'></div>";if(T.getElementsByClassName("e").length===0){return}T.lastChild.className="e";if(T.getElementsByClassName("e").length===1){return}I.order.splice(1,0,"CLASS");I.find.CLASS=function(U,V,W){if(typeof V.getElementsByClassName!=="undefined"&&!W){return V.getElementsByClassName(U[1])}}})()}function P(U,Z,Y,ad,aa,ac){var ab=U=="previousSibling"&&!ac;for(var W=0,V=ad.length;W<V;W++){var T=ad[W];if(T){if(ab&&T.nodeType===1){T.sizcache=Y;T.sizset=W}T=T[U];var X=false;while(T){if(T.sizcache===Y){X=ad[T.sizset];break}if(T.nodeType===1&&!ac){T.sizcache=Y;T.sizset=W}if(T.nodeName===Z){X=T;break}T=T[U]}ad[W]=X}}}function S(U,Z,Y,ad,aa,ac){var ab=U=="previousSibling"&&!ac;for(var W=0,V=ad.length;W<V;W++){var T=ad[W];if(T){if(ab&&T.nodeType===1){T.sizcache=Y;T.sizset=W}T=T[U];var X=false;while(T){if(T.sizcache===Y){X=ad[T.sizset];break}if(T.nodeType===1){if(!ac){T.sizcache=Y;T.sizset=W}if(typeof Z!=="string"){if(T===Z){X=true;break}}else{if(F.filter(Z,[T]).length>0){X=T;break}}}T=T[U]}ad[W]=X}}}var K=document.compareDocumentPosition?function(U,T){return U.compareDocumentPosition(T)&16}:function(U,T){return U!==T&&(U.contains?U.contains(T):true)};var Q=function(T){return T.nodeType===9&&T.documentElement.nodeName!=="HTML"||!!T.ownerDocument&&Q(T.ownerDocument)};var J=function(T,aa){var W=[],X="",Y,V=aa.nodeType?[aa]:aa;while((Y=I.match.PSEUDO.exec(T))){X+=Y[0];T=T.replace(I.match.PSEUDO,"")}T=I.relative[T]?T+"*":T;for(var Z=0,U=V.length;Z<U;Z++){F(T,V[Z],W)}return F.filter(X,W)};o.find=F;o.filter=F.filter;o.expr=F.selectors;o.expr[":"]=o.expr.filters;F.selectors.filters.hidden=function(T){return T.offsetWidth===0||T.offsetHeight===0};F.selectors.filters.visible=function(T){return T.offsetWidth>0||T.offsetHeight>0};F.selectors.filters.animated=function(T){return o.grep(o.timers,function(U){return T===U.elem}).length};o.multiFilter=function(V,T,U){if(U){V=":not("+V+")"}return F.matches(V,T)};o.dir=function(V,U){var T=[],W=V[U];while(W&&W!=document){if(W.nodeType==1){T.push(W)}W=W[U]}return T};o.nth=function(X,T,V,W){T=T||1;var U=0;for(;X;X=X[V]){if(X.nodeType==1&&++U==T){break}}return X};o.sibling=function(V,U){var T=[];for(;V;V=V.nextSibling){if(V.nodeType==1&&V!=U){T.push(V)}}return T};return;l.Sizzle=F})();o.event={add:function(I,F,H,K){if(I.nodeType==3||I.nodeType==8){return}if(I.setInterval&&I!=l){I=l}if(!H.guid){H.guid=this.guid++}if(K!==g){var G=H;H=this.proxy(G);H.data=K}var E=o.data(I,"events")||o.data(I,"events",{}),J=o.data(I,"handle")||o.data(I,"handle",function(){return typeof o!=="undefined"&&!o.event.triggered?o.event.handle.apply(arguments.callee.elem,arguments):g});J.elem=I;o.each(F.split(/\s+/),function(M,N){var O=N.split(".");N=O.shift();H.type=O.slice().sort().join(".");var L=E[N];if(o.event.specialAll[N]){o.event.specialAll[N].setup.call(I,K,O)}if(!L){L=E[N]={};if(!o.event.special[N]||o.event.special[N].setup.call(I,K,O)===false){if(I.addEventListener){I.addEventListener(N,J,false)}else{if(I.attachEvent){I.attachEvent("on"+N,J)}}}}L[H.guid]=H;o.event.global[N]=true});I=null},guid:1,global:{},remove:function(K,H,J){if(K.nodeType==3||K.nodeType==8){return}var G=o.data(K,"events"),F,E;if(G){if(H===g||(typeof H==="string"&&H.charAt(0)==".")){for(var I in G){this.remove(K,I+(H||""))}}else{if(H.type){J=H.handler;H=H.type}o.each(H.split(/\s+/),function(M,O){var Q=O.split(".");O=Q.shift();var N=RegExp("(^|\\.)"+Q.slice().sort().join(".*\\.")+"(\\.|$)");if(G[O]){if(J){delete G[O][J.guid]}else{for(var P in G[O]){if(N.test(G[O][P].type)){delete G[O][P]}}}if(o.event.specialAll[O]){o.event.specialAll[O].teardown.call(K,Q)}for(F in G[O]){break}if(!F){if(!o.event.special[O]||o.event.special[O].teardown.call(K,Q)===false){if(K.removeEventListener){K.removeEventListener(O,o.data(K,"handle"),false)}else{if(K.detachEvent){K.detachEvent("on"+O,o.data(K,"handle"))}}}F=null;delete G[O]}}})}for(F in G){break}if(!F){var L=o.data(K,"handle");if(L){L.elem=null}o.removeData(K,"events");o.removeData(K,"handle")}}},trigger:function(I,K,H,E){var G=I.type||I;if(!E){I=typeof I==="object"?I[h]?I:o.extend(o.Event(G),I):o.Event(G);if(G.indexOf("!")>=0){I.type=G=G.slice(0,-1);I.exclusive=true}if(!H){I.stopPropagation();if(this.global[G]){o.each(o.cache,function(){if(this.events&&this.events[G]){o.event.trigger(I,K,this.handle.elem)}})}}if(!H||H.nodeType==3||H.nodeType==8){return g}I.result=g;I.target=H;K=o.makeArray(K);K.unshift(I)}I.currentTarget=H;var J=o.data(H,"handle");if(J){J.apply(H,K)}if((!H[G]||(o.nodeName(H,"a")&&G=="click"))&&H["on"+G]&&H["on"+G].apply(H,K)===false){I.result=false}if(!E&&H[G]&&!I.isDefaultPrevented()&&!(o.nodeName(H,"a")&&G=="click")){this.triggered=true;try{H[G]()}catch(L){}}this.triggered=false;if(!I.isPropagationStopped()){var F=H.parentNode||H.ownerDocument;if(F){o.event.trigger(I,K,F,true)}}},handle:function(K){var J,E;K=arguments[0]=o.event.fix(K||l.event);K.currentTarget=this;var L=K.type.split(".");K.type=L.shift();J=!L.length&&!K.exclusive;var I=RegExp("(^|\\.)"+L.slice().sort().join(".*\\.")+"(\\.|$)");E=(o.data(this,"events")||{})[K.type];for(var G in E){var H=E[G];if(J||I.test(H.type)){K.handler=H;K.data=H.data;var F=H.apply(this,arguments);if(F!==g){K.result=F;if(F===false){K.preventDefault();K.stopPropagation()}}if(K.isImmediatePropagationStopped()){break}}}},props:"altKey attrChange attrName bubbles button cancelable charCode clientX clientY ctrlKey currentTarget data detail eventPhase fromElement handler keyCode metaKey newValue originalTarget pageX pageY prevValue relatedNode relatedTarget screenX screenY shiftKey srcElement target toElement view wheelDelta which".split(" "),fix:function(H){if(H[h]){return H}var F=H;H=o.Event(F);for(var G=this.props.length,J;G;){J=this.props[--G];H[J]=F[J]}if(!H.target){H.target=H.srcElement||document}if(H.target.nodeType==3){H.target=H.target.parentNode}if(!H.relatedTarget&&H.fromElement){H.relatedTarget=H.fromElement==H.target?H.toElement:H.fromElement}if(H.pageX==null&&H.clientX!=null){var I=document.documentElement,E=document.body;H.pageX=H.clientX+(I&&I.scrollLeft||E&&E.scrollLeft||0)-(I.clientLeft||0);H.pageY=H.clientY+(I&&I.scrollTop||E&&E.scrollTop||0)-(I.clientTop||0)}if(!H.which&&((H.charCode||H.charCode===0)?H.charCode:H.keyCode)){H.which=H.charCode||H.keyCode}if(!H.metaKey&&H.ctrlKey){H.metaKey=H.ctrlKey}if(!H.which&&H.button){H.which=(H.button&1?1:(H.button&2?3:(H.button&4?2:0)))}return H},proxy:function(F,E){E=E||function(){return F.apply(this,arguments)};E.guid=F.guid=F.guid||E.guid||this.guid++;return E},special:{ready:{setup:B,teardown:function(){}}},specialAll:{live:{setup:function(E,F){o.event.add(this,F[0],c)},teardown:function(G){if(G.length){var E=0,F=RegExp("(^|\\.)"+G[0]+"(\\.|$)");o.each((o.data(this,"events").live||{}),function(){if(F.test(this.type)){E++}});if(E<1){o.event.remove(this,G[0],c)}}}}}};o.Event=function(E){if(!this.preventDefault){return new o.Event(E)}if(E&&E.type){this.originalEvent=E;this.type=E.type}else{this.type=E}this.timeStamp=e();this[h]=true};function k(){return false}function u(){return true}o.Event.prototype={preventDefault:function(){this.isDefaultPrevented=u;var E=this.originalEvent;if(!E){return}if(E.preventDefault){E.preventDefault()}E.returnValue=false},stopPropagation:function(){this.isPropagationStopped=u;var E=this.originalEvent;if(!E){return}if(E.stopPropagation){E.stopPropagation()}E.cancelBubble=true},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=u;this.stopPropagation()},isDefaultPrevented:k,isPropagationStopped:k,isImmediatePropagationStopped:k};var a=function(F){var E=F.relatedTarget;while(E&&E!=this){try{E=E.parentNode}catch(G){E=this}}if(E!=this){F.type=F.data;o.event.handle.apply(this,arguments)}};o.each({mouseover:"mouseenter",mouseout:"mouseleave"},function(F,E){o.event.special[E]={setup:function(){o.event.add(this,F,a,E)},teardown:function(){o.event.remove(this,F,a)}}});o.fn.extend({bind:function(F,G,E){return F=="unload"?this.one(F,G,E):this.each(function(){o.event.add(this,F,E||G,E&&G)})},one:function(G,H,F){var E=o.event.proxy(F||H,function(I){o(this).unbind(I,E);return(F||H).apply(this,arguments)});return this.each(function(){o.event.add(this,G,E,F&&H)})},unbind:function(F,E){return this.each(function(){o.event.remove(this,F,E)})},trigger:function(E,F){return this.each(function(){o.event.trigger(E,F,this)})},triggerHandler:function(E,G){if(this[0]){var F=o.Event(E);F.preventDefault();F.stopPropagation();o.event.trigger(F,G,this[0]);return F.result}},toggle:function(G){var E=arguments,F=1;while(F<E.length){o.event.proxy(G,E[F++])}return this.click(o.event.proxy(G,function(H){this.lastToggle=(this.lastToggle||0)%F;H.preventDefault();return E[this.lastToggle++].apply(this,arguments)||false}))},hover:function(E,F){return this.mouseenter(E).mouseleave(F)},ready:function(E){B();if(o.isReady){E.call(document,o)}else{o.readyList.push(E)}return this},live:function(G,F){var E=o.event.proxy(F);E.guid+=this.selector+G;o(document).bind(i(G,this.selector),this.selector,E);return this},die:function(F,E){o(document).unbind(i(F,this.selector),E?{guid:E.guid+this.selector+F}:null);return this}});function c(H){var E=RegExp("(^|\\.)"+H.type+"(\\.|$)"),G=true,F=[];o.each(o.data(this,"events").live||[],function(I,J){if(E.test(J.type)){var K=o(H.target).closest(J.data)[0];if(K){F.push({elem:K,fn:J})}}});F.sort(function(J,I){return o.data(J.elem,"closest")-o.data(I.elem,"closest")});o.each(F,function(){if(this.fn.call(this.elem,H,this.fn.data)===false){return(G=false)}});return G}function i(F,E){return["live",F,E.replace(/\./g,"`").replace(/ /g,"|")].join(".")}o.extend({isReady:false,readyList:[],ready:function(){if(!o.isReady){o.isReady=true;if(o.readyList){o.each(o.readyList,function(){this.call(document,o)});o.readyList=null}o(document).triggerHandler("ready")}}});var x=false;function B(){if(x){return}x=true;if(document.addEventListener){document.addEventListener("DOMContentLoaded",function(){document.removeEventListener("DOMContentLoaded",arguments.callee,false);o.ready()},false)}else{if(document.attachEvent){document.attachEvent("onreadystatechange",function(){if(document.readyState==="complete"){document.detachEvent("onreadystatechange",arguments.callee);o.ready()}});if(document.documentElement.doScroll&&l==l.top){(function(){if(o.isReady){return}try{document.documentElement.doScroll("left")}catch(E){setTimeout(arguments.callee,0);return}o.ready()})()}}}o.event.add(l,"load",o.ready)}o.each(("blur,focus,load,resize,scroll,unload,click,dblclick,mousedown,mouseup,mousemove,mouseover,mouseout,mouseenter,mouseleave,change,select,submit,keydown,keypress,keyup,error").split(","),function(F,E){o.fn[E]=function(G){return G?this.bind(E,G):this.trigger(E)}});o(l).bind("unload",function(){for(var E in o.cache){if(E!=1&&o.cache[E].handle){o.event.remove(o.cache[E].handle.elem)}}});(function(){o.support={};var F=document.documentElement,G=document.createElement("script"),K=document.createElement("div"),J="script"+(new Date).getTime();K.style.display="none";K.innerHTML='   <link/><table></table><a href="/a" style="color:red;float:left;opacity:.5;">a</a><select><option>text</option></select><object><param/></object>';var H=K.getElementsByTagName("*"),E=K.getElementsByTagName("a")[0];if(!H||!H.length||!E){return}o.support={leadingWhitespace:K.firstChild.nodeType==3,tbody:!K.getElementsByTagName("tbody").length,objectAll:!!K.getElementsByTagName("object")[0].getElementsByTagName("*").length,htmlSerialize:!!K.getElementsByTagName("link").length,style:/red/.test(E.getAttribute("style")),hrefNormalized:E.getAttribute("href")==="/a",opacity:E.style.opacity==="0.5",cssFloat:!!E.style.cssFloat,scriptEval:false,noCloneEvent:true,boxModel:null};G.type="text/javascript";try{G.appendChild(document.createTextNode("window."+J+"=1;"))}catch(I){}F.insertBefore(G,F.firstChild);if(l[J]){o.support.scriptEval=true;delete l[J]}F.removeChild(G);if(K.attachEvent&&K.fireEvent){K.attachEvent("onclick",function(){o.support.noCloneEvent=false;K.detachEvent("onclick",arguments.callee)});K.cloneNode(true).fireEvent("onclick")}o(function(){var L=document.createElement("div");L.style.width=L.style.paddingLeft="1px";document.body.appendChild(L);o.boxModel=o.support.boxModel=L.offsetWidth===2;document.body.removeChild(L).style.display="none"})})();var w=o.support.cssFloat?"cssFloat":"styleFloat";o.props={"for":"htmlFor","class":"className","float":w,cssFloat:w,styleFloat:w,readonly:"readOnly",maxlength:"maxLength",cellspacing:"cellSpacing",rowspan:"rowSpan",tabindex:"tabIndex"};o.fn.extend({_load:o.fn.load,load:function(G,J,K){if(typeof G!=="string"){return this._load(G)}var I=G.indexOf(" ");if(I>=0){var E=G.slice(I,G.length);G=G.slice(0,I)}var H="GET";if(J){if(o.isFunction(J)){K=J;J=null}else{if(typeof J==="object"){J=o.param(J);H="POST"}}}var F=this;o.ajax({url:G,type:H,dataType:"html",data:J,complete:function(M,L){if(L=="success"||L=="notmodified"){F.html(E?o("<div/>").append(M.responseText.replace(/<script(.|\s)*?\/script>/g,"")).find(E):M.responseText)}if(K){F.each(K,[M.responseText,L,M])}}});return this},serialize:function(){return o.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?o.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||/select|textarea/i.test(this.nodeName)||/text|hidden|password|search/i.test(this.type))}).map(function(E,F){var G=o(this).val();return G==null?null:o.isArray(G)?o.map(G,function(I,H){return{name:F.name,value:I}}):{name:F.name,value:G}}).get()}});o.each("ajaxStart,ajaxStop,ajaxComplete,ajaxError,ajaxSuccess,ajaxSend".split(","),function(E,F){o.fn[F]=function(G){return this.bind(F,G)}});var r=e();o.extend({get:function(E,G,H,F){if(o.isFunction(G)){H=G;G=null}return o.ajax({type:"GET",url:E,data:G,success:H,dataType:F})},getScript:function(E,F){return o.get(E,null,F,"script")},getJSON:function(E,F,G){return o.get(E,F,G,"json")},post:function(E,G,H,F){if(o.isFunction(G)){H=G;G={}}return o.ajax({type:"POST",url:E,data:G,success:H,dataType:F})},ajaxSetup:function(E){o.extend(o.ajaxSettings,E)},ajaxSettings:{url:location.href,global:true,type:"GET",contentType:"application/x-www-form-urlencoded",processData:true,async:true,xhr:function(){return l.ActiveXObject?new ActiveXObject("Microsoft.XMLHTTP"):new XMLHttpRequest()},accepts:{xml:"application/xml, text/xml",html:"text/html",script:"text/javascript, application/javascript",json:"application/json, text/javascript",text:"text/plain",_default:"*/*"}},lastModified:{},ajax:function(M){M=o.extend(true,M,o.extend(true,{},o.ajaxSettings,M));var W,F=/=\?(&|$)/g,R,V,G=M.type.toUpperCase();if(M.data&&M.processData&&typeof M.data!=="string"){M.data=o.param(M.data)}if(M.dataType=="jsonp"){if(G=="GET"){if(!M.url.match(F)){M.url+=(M.url.match(/\?/)?"&":"?")+(M.jsonp||"callback")+"=?"}}else{if(!M.data||!M.data.match(F)){M.data=(M.data?M.data+"&":"")+(M.jsonp||"callback")+"=?"}}M.dataType="json"}if(M.dataType=="json"&&(M.data&&M.data.match(F)||M.url.match(F))){W="jsonp"+r++;if(M.data){M.data=(M.data+"").replace(F,"="+W+"$1")}M.url=M.url.replace(F,"="+W+"$1");M.dataType="script";l[W]=function(X){V=X;I();L();l[W]=g;try{delete l[W]}catch(Y){}if(H){H.removeChild(T)}}}if(M.dataType=="script"&&M.cache==null){M.cache=false}if(M.cache===false&&G=="GET"){var E=e();var U=M.url.replace(/(\?|&)_=.*?(&|$)/,"$1_="+E+"$2");M.url=U+((U==M.url)?(M.url.match(/\?/)?"&":"?")+"_="+E:"")}if(M.data&&G=="GET"){M.url+=(M.url.match(/\?/)?"&":"?")+M.data;M.data=null}if(M.global&&!o.active++){o.event.trigger("ajaxStart")}var Q=/^(\w+:)?\/\/([^\/?#]+)/.exec(M.url);if(M.dataType=="script"&&G=="GET"&&Q&&(Q[1]&&Q[1]!=location.protocol||Q[2]!=location.host)){var H=document.getElementsByTagName("head")[0];var T=document.createElement("script");T.src=M.url;if(M.scriptCharset){T.charset=M.scriptCharset}if(!W){var O=false;T.onload=T.onreadystatechange=function(){if(!O&&(!this.readyState||this.readyState=="loaded"||this.readyState=="complete")){O=true;I();L();T.onload=T.onreadystatechange=null;H.removeChild(T)}}}H.appendChild(T);return g}var K=false;var J=M.xhr();if(M.username){J.open(G,M.url,M.async,M.username,M.password)}else{J.open(G,M.url,M.async)}try{if(M.data){J.setRequestHeader("Content-Type",M.contentType)}if(M.ifModified){J.setRequestHeader("If-Modified-Since",o.lastModified[M.url]||"Thu, 01 Jan 1970 00:00:00 GMT")}J.setRequestHeader("X-Requested-With","XMLHttpRequest");J.setRequestHeader("Accept",M.dataType&&M.accepts[M.dataType]?M.accepts[M.dataType]+", */*":M.accepts._default)}catch(S){}if(M.beforeSend&&M.beforeSend(J,M)===false){if(M.global&&!--o.active){o.event.trigger("ajaxStop")}J.abort();return false}if(M.global){o.event.trigger("ajaxSend",[J,M])}var N=function(X){if(J.readyState==0){if(P){clearInterval(P);P=null;if(M.global&&!--o.active){o.event.trigger("ajaxStop")}}}else{if(!K&&J&&(J.readyState==4||X=="timeout")){K=true;if(P){clearInterval(P);P=null}R=X=="timeout"?"timeout":!o.httpSuccess(J)?"error":M.ifModified&&o.httpNotModified(J,M.url)?"notmodified":"success";if(R=="success"){try{V=o.httpData(J,M.dataType,M)}catch(Z){R="parsererror"}}if(R=="success"){var Y;try{Y=J.getResponseHeader("Last-Modified")}catch(Z){}if(M.ifModified&&Y){o.lastModified[M.url]=Y}if(!W){I()}}else{o.handleError(M,J,R)}L();if(X){J.abort()}if(M.async){J=null}}}};if(M.async){var P=setInterval(N,13);if(M.timeout>0){setTimeout(function(){if(J&&!K){N("timeout")}},M.timeout)}}try{J.send(M.data)}catch(S){o.handleError(M,J,null,S)}if(!M.async){N()}function I(){if(M.success){M.success(V,R)}if(M.global){o.event.trigger("ajaxSuccess",[J,M])}}function L(){if(M.complete){M.complete(J,R)}if(M.global){o.event.trigger("ajaxComplete",[J,M])}if(M.global&&!--o.active){o.event.trigger("ajaxStop")}}return J},handleError:function(F,H,E,G){if(F.error){F.error(H,E,G)}if(F.global){o.event.trigger("ajaxError",[H,F,G])}},active:0,httpSuccess:function(F){try{return !F.status&&location.protocol=="file:"||(F.status>=200&&F.status<300)||F.status==304||F.status==1223}catch(E){}return false},httpNotModified:function(G,E){try{var H=G.getResponseHeader("Last-Modified");return G.status==304||H==o.lastModified[E]}catch(F){}return false},httpData:function(J,H,G){var F=J.getResponseHeader("content-type"),E=H=="xml"||!H&&F&&F.indexOf("xml")>=0,I=E?J.responseXML:J.responseText;if(E&&I.documentElement.tagName=="parsererror"){throw"parsererror"}if(G&&G.dataFilter){I=G.dataFilter(I,H)}if(typeof I==="string"){if(H=="script"){o.globalEval(I)}if(H=="json"){I=l["eval"]("("+I+")")}}return I},param:function(E){var G=[];function H(I,J){G[G.length]=encodeURIComponent(I)+"="+encodeURIComponent(J)}if(o.isArray(E)||E.jquery){o.each(E,function(){H(this.name,this.value)})}else{for(var F in E){if(o.isArray(E[F])){o.each(E[F],function(){H(F,this)})}else{H(F,o.isFunction(E[F])?E[F]():E[F])}}}return G.join("&").replace(/%20/g,"+")}});var m={},n,d=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]];function t(F,E){var G={};o.each(d.concat.apply([],d.slice(0,E)),function(){G[this]=F});return G}o.fn.extend({show:function(J,L){if(J){return this.animate(t("show",3),J,L)}else{for(var H=0,F=this.length;H<F;H++){var E=o.data(this[H],"olddisplay");this[H].style.display=E||"";if(o.css(this[H],"display")==="none"){var G=this[H].tagName,K;if(m[G]){K=m[G]}else{var I=o("<"+G+" />").appendTo("body");K=I.css("display");if(K==="none"){K="block"}I.remove();m[G]=K}o.data(this[H],"olddisplay",K)}}for(var H=0,F=this.length;H<F;H++){this[H].style.display=o.data(this[H],"olddisplay")||""}return this}},hide:function(H,I){if(H){return this.animate(t("hide",3),H,I)}else{for(var G=0,F=this.length;G<F;G++){var E=o.data(this[G],"olddisplay");if(!E&&E!=="none"){o.data(this[G],"olddisplay",o.css(this[G],"display"))}}for(var G=0,F=this.length;G<F;G++){this[G].style.display="none"}return this}},_toggle:o.fn.toggle,toggle:function(G,F){var E=typeof G==="boolean";return o.isFunction(G)&&o.isFunction(F)?this._toggle.apply(this,arguments):G==null||E?this.each(function(){var H=E?G:o(this).is(":hidden");o(this)[H?"show":"hide"]()}):this.animate(t("toggle",3),G,F)},fadeTo:function(E,G,F){return this.animate({opacity:G},E,F)},animate:function(I,F,H,G){var E=o.speed(F,H,G);return this[E.queue===false?"each":"queue"](function(){var K=o.extend({},E),M,L=this.nodeType==1&&o(this).is(":hidden"),J=this;for(M in I){if(I[M]=="hide"&&L||I[M]=="show"&&!L){return K.complete.call(this)}if((M=="height"||M=="width")&&this.style){K.display=o.css(this,"display");K.overflow=this.style.overflow}}if(K.overflow!=null){this.style.overflow="hidden"}K.curAnim=o.extend({},I);o.each(I,function(O,S){var R=new o.fx(J,K,O);if(/toggle|show|hide/.test(S)){R[S=="toggle"?L?"show":"hide":S](I)}else{var Q=S.toString().match(/^([+-]=)?([\d+-.]+)(.*)$/),T=R.cur(true)||0;if(Q){var N=parseFloat(Q[2]),P=Q[3]||"px";if(P!="px"){J.style[O]=(N||1)+P;T=((N||1)/R.cur(true))*T;J.style[O]=T+P}if(Q[1]){N=((Q[1]=="-="?-1:1)*N)+T}R.custom(T,N,P)}else{R.custom(T,S,"")}}});return true})},stop:function(F,E){var G=o.timers;if(F){this.queue([])}this.each(function(){for(var H=G.length-1;H>=0;H--){if(G[H].elem==this){if(E){G[H](true)}G.splice(H,1)}}});if(!E){this.dequeue()}return this}});o.each({slideDown:t("show",1),slideUp:t("hide",1),slideToggle:t("toggle",1),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"}},function(E,F){o.fn[E]=function(G,H){return this.animate(F,G,H)}});o.extend({speed:function(G,H,F){var E=typeof G==="object"?G:{complete:F||!F&&H||o.isFunction(G)&&G,duration:G,easing:F&&H||H&&!o.isFunction(H)&&H};E.duration=o.fx.off?0:typeof E.duration==="number"?E.duration:o.fx.speeds[E.duration]||o.fx.speeds._default;E.old=E.complete;E.complete=function(){if(E.queue!==false){o(this).dequeue()}if(o.isFunction(E.old)){E.old.call(this)}};return E},easing:{linear:function(G,H,E,F){return E+F*G},swing:function(G,H,E,F){return((-Math.cos(G*Math.PI)/2)+0.5)*F+E}},timers:[],fx:function(F,E,G){this.options=E;this.elem=F;this.prop=G;if(!E.orig){E.orig={}}}});o.fx.prototype={update:function(){if(this.options.step){this.options.step.call(this.elem,this.now,this)}(o.fx.step[this.prop]||o.fx.step._default)(this);if((this.prop=="height"||this.prop=="width")&&this.elem.style){this.elem.style.display="block"}},cur:function(F){if(this.elem[this.prop]!=null&&(!this.elem.style||this.elem.style[this.prop]==null)){return this.elem[this.prop]}var E=parseFloat(o.css(this.elem,this.prop,F));return E&&E>-10000?E:parseFloat(o.curCSS(this.elem,this.prop))||0},custom:function(I,H,G){this.startTime=e();this.start=I;this.end=H;this.unit=G||this.unit||"px";this.now=this.start;this.pos=this.state=0;var E=this;function F(J){return E.step(J)}F.elem=this.elem;if(F()&&o.timers.push(F)&&!n){n=setInterval(function(){var K=o.timers;for(var J=0;J<K.length;J++){if(!K[J]()){K.splice(J--,1)}}if(!K.length){clearInterval(n);n=g}},13)}},show:function(){this.options.orig[this.prop]=o.attr(this.elem.style,this.prop);this.options.show=true;this.custom(this.prop=="width"||this.prop=="height"?1:0,this.cur());o(this.elem).show()},hide:function(){this.options.orig[this.prop]=o.attr(this.elem.style,this.prop);this.options.hide=true;this.custom(this.cur(),0)},step:function(H){var G=e();if(H||G>=this.options.duration+this.startTime){this.now=this.end;this.pos=this.state=1;this.update();this.options.curAnim[this.prop]=true;var E=true;for(var F in this.options.curAnim){if(this.options.curAnim[F]!==true){E=false}}if(E){if(this.options.display!=null){this.elem.style.overflow=this.options.overflow;this.elem.style.display=this.options.display;if(o.css(this.elem,"display")=="none"){this.elem.style.display="block"}}if(this.options.hide){o(this.elem).hide()}if(this.options.hide||this.options.show){for(var I in this.options.curAnim){o.attr(this.elem.style,I,this.options.orig[I])}}this.options.complete.call(this.elem)}return false}else{var J=G-this.startTime;this.state=J/this.options.duration;this.pos=o.easing[this.options.easing||(o.easing.swing?"swing":"linear")](this.state,J,0,1,this.options.duration);this.now=this.start+((this.end-this.start)*this.pos);this.update()}return true}};o.extend(o.fx,{speeds:{slow:600,fast:200,_default:400},step:{opacity:function(E){o.attr(E.elem.style,"opacity",E.now)},_default:function(E){if(E.elem.style&&E.elem.style[E.prop]!=null){E.elem.style[E.prop]=E.now+E.unit}else{E.elem[E.prop]=E.now}}}});if(document.documentElement.getBoundingClientRect){o.fn.offset=function(){if(!this[0]){return{top:0,left:0}}if(this[0]===this[0].ownerDocument.body){return o.offset.bodyOffset(this[0])}var G=this[0].getBoundingClientRect(),J=this[0].ownerDocument,F=J.body,E=J.documentElement,L=E.clientTop||F.clientTop||0,K=E.clientLeft||F.clientLeft||0,I=G.top+(self.pageYOffset||o.boxModel&&E.scrollTop||F.scrollTop)-L,H=G.left+(self.pageXOffset||o.boxModel&&E.scrollLeft||F.scrollLeft)-K;return{top:I,left:H}}}else{o.fn.offset=function(){if(!this[0]){return{top:0,left:0}}if(this[0]===this[0].ownerDocument.body){return o.offset.bodyOffset(this[0])}o.offset.initialized||o.offset.initialize();var J=this[0],G=J.offsetParent,F=J,O=J.ownerDocument,M,H=O.documentElement,K=O.body,L=O.defaultView,E=L.getComputedStyle(J,null),N=J.offsetTop,I=J.offsetLeft;while((J=J.parentNode)&&J!==K&&J!==H){M=L.getComputedStyle(J,null);N-=J.scrollTop,I-=J.scrollLeft;if(J===G){N+=J.offsetTop,I+=J.offsetLeft;if(o.offset.doesNotAddBorder&&!(o.offset.doesAddBorderForTableAndCells&&/^t(able|d|h)$/i.test(J.tagName))){N+=parseInt(M.borderTopWidth,10)||0,I+=parseInt(M.borderLeftWidth,10)||0}F=G,G=J.offsetParent}if(o.offset.subtractsBorderForOverflowNotVisible&&M.overflow!=="visible"){N+=parseInt(M.borderTopWidth,10)||0,I+=parseInt(M.borderLeftWidth,10)||0}E=M}if(E.position==="relative"||E.position==="static"){N+=K.offsetTop,I+=K.offsetLeft}if(E.position==="fixed"){N+=Math.max(H.scrollTop,K.scrollTop),I+=Math.max(H.scrollLeft,K.scrollLeft)}return{top:N,left:I}}}o.offset={initialize:function(){if(this.initialized){return}var L=document.body,F=document.createElement("div"),H,G,N,I,M,E,J=L.style.marginTop,K='<div style="position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;"><div></div></div><table style="position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;" cellpadding="0" cellspacing="0"><tr><td></td></tr></table>';M={position:"absolute",top:0,left:0,margin:0,border:0,width:"1px",height:"1px",visibility:"hidden"};for(E in M){F.style[E]=M[E]}F.innerHTML=K;L.insertBefore(F,L.firstChild);H=F.firstChild,G=H.firstChild,I=H.nextSibling.firstChild.firstChild;this.doesNotAddBorder=(G.offsetTop!==5);this.doesAddBorderForTableAndCells=(I.offsetTop===5);H.style.overflow="hidden",H.style.position="relative";this.subtractsBorderForOverflowNotVisible=(G.offsetTop===-5);L.style.marginTop="1px";this.doesNotIncludeMarginInBodyOffset=(L.offsetTop===0);L.style.marginTop=J;L.removeChild(F);this.initialized=true},bodyOffset:function(E){o.offset.initialized||o.offset.initialize();var G=E.offsetTop,F=E.offsetLeft;if(o.offset.doesNotIncludeMarginInBodyOffset){G+=parseInt(o.curCSS(E,"marginTop",true),10)||0,F+=parseInt(o.curCSS(E,"marginLeft",true),10)||0}return{top:G,left:F}}};o.fn.extend({position:function(){var I=0,H=0,F;if(this[0]){var G=this.offsetParent(),J=this.offset(),E=/^body|html$/i.test(G[0].tagName)?{top:0,left:0}:G.offset();J.top-=j(this,"marginTop");J.left-=j(this,"marginLeft");E.top+=j(G,"borderTopWidth");E.left+=j(G,"borderLeftWidth");F={top:J.top-E.top,left:J.left-E.left}}return F},offsetParent:function(){var E=this[0].offsetParent||document.body;while(E&&(!/^body|html$/i.test(E.tagName)&&o.css(E,"position")=="static")){E=E.offsetParent}return o(E)}});o.each(["Left","Top"],function(F,E){var G="scroll"+E;o.fn[G]=function(H){if(!this[0]){return null}return H!==g?this.each(function(){this==l||this==document?l.scrollTo(!F?H:o(l).scrollLeft(),F?H:o(l).scrollTop()):this[G]=H}):this[0]==l||this[0]==document?self[F?"pageYOffset":"pageXOffset"]||o.boxModel&&document.documentElement[G]||document.body[G]:this[0][G]}});o.each(["Height","Width"],function(I,G){var E=I?"Left":"Top",H=I?"Right":"Bottom",F=G.toLowerCase();o.fn["inner"+G]=function(){return this[0]?o.css(this[0],F,false,"padding"):null};o.fn["outer"+G]=function(K){return this[0]?o.css(this[0],F,false,K?"margin":"border"):null};var J=G.toLowerCase();o.fn[J]=function(K){return this[0]==l?document.compatMode=="CSS1Compat"&&document.documentElement["client"+G]||document.body["client"+G]:this[0]==document?Math.max(document.documentElement["client"+G],document.body["scroll"+G],document.documentElement["scroll"+G],document.body["offset"+G],document.documentElement["offset"+G]):K===g?(this.length?o.css(this[0],J):null):this.css(J,typeof K==="string"?K:K+"px")}})})();
\ No newline at end of file
diff --git a/paf0/paf/.DS_Store b/paf0/paf/.DS_Store
deleted file mode 100755 (executable)
index 648dba8..0000000
Binary files a/paf0/paf/.DS_Store and /dev/null differ
diff --git a/paf0/paf/._.DS_Store b/paf0/paf/._.DS_Store
deleted file mode 100755 (executable)
index 941570a..0000000
Binary files a/paf0/paf/._.DS_Store and /dev/null differ
diff --git a/paf0/paf/._admin.py b/paf0/paf/._admin.py
deleted file mode 100755 (executable)
index 6dd3b92..0000000
Binary files a/paf0/paf/._admin.py and /dev/null differ
diff --git a/paf0/paf/._forms.py b/paf0/paf/._forms.py
deleted file mode 100755 (executable)
index fc1b80c..0000000
Binary files a/paf0/paf/._forms.py and /dev/null differ
diff --git a/paf0/paf/._models.py b/paf0/paf/._models.py
deleted file mode 100755 (executable)
index a3efe63..0000000
Binary files a/paf0/paf/._models.py and /dev/null differ
diff --git a/paf0/paf/._urls.py b/paf0/paf/._urls.py
deleted file mode 100755 (executable)
index a248731..0000000
Binary files a/paf0/paf/._urls.py and /dev/null differ
diff --git a/paf0/paf/._util.py b/paf0/paf/._util.py
deleted file mode 100755 (executable)
index e5ee075..0000000
Binary files a/paf0/paf/._util.py and /dev/null differ
diff --git a/paf0/paf/._views 2.py b/paf0/paf/._views 2.py
deleted file mode 100755 (executable)
index d3dce85..0000000
Binary files a/paf0/paf/._views 2.py and /dev/null differ
diff --git a/paf0/paf/._views.py b/paf0/paf/._views.py
deleted file mode 100755 (executable)
index 1c3a734..0000000
Binary files a/paf0/paf/._views.py and /dev/null differ
diff --git a/paf0/paf/__init__.py b/paf0/paf/__init__.py
deleted file mode 100755 (executable)
index e69de29..0000000
diff --git a/paf0/paf/__init__.pyc b/paf0/paf/__init__.pyc
deleted file mode 100755 (executable)
index c3854a5..0000000
Binary files a/paf0/paf/__init__.pyc and /dev/null differ
diff --git a/paf0/paf/admin.py b/paf0/paf/admin.py
deleted file mode 100755 (executable)
index 5d4cab3..0000000
+++ /dev/null
@@ -1,146 +0,0 @@
-from django.contrib import admin
-from paf.models import Student, LinguisticLevel, CurrentAcademic, University, Faculty, Level, DiplomaObtained, City, Country, Employment, Entreprise
-from django.http import HttpResponseRedirect
-from django.core.urlresolvers import reverse
-from django.core.exceptions import PermissionDenied
-from django.contrib.auth.models import User
-from django import forms
-
-
-class LinguisticLevelAdmin(admin.ModelAdmin):
-    fieldsets = (
-        ('Delf/Dalf', {
-            'fields': ('delf_dalf', 'year_delf_dalf')
-        }),
-        ('Autre', {
-            'fields': ('other', 'year_other')
-        }),
-    )
-
-
-class LinguisticLevelInline(admin.TabularInline):
-    model = LinguisticLevel
-    
-    def get_readonly_fields(self, request, obj=None):
-        if request.user.username == 'enseignant':
-            return ('delf_dalf', 'year_delf_dalf', 'other', 'year_other')
-        return ()
-
-class CurrentAcademicInline(admin.TabularInline):
-    model = CurrentAcademic
-    
-    def get_readonly_fields(self, request, obj=None):
-        if request.user.username == 'enseignant':
-            return ('university', 'faculty', 'level', 'specialty', 'city', 'entry_year', 'end_year', 'certified')
-        return ()
-
-class DiplomaObtainedInline(admin.TabularInline):
-    model = DiplomaObtained
-    
-    def get_readonly_fields(self, request, obj=None):
-        if request.user.username == 'enseignant':
-            return ('university', 'entitle', 'level', 'year')
-        return ()
-
-class EmploymentInline(admin.StackedInline):
-    model = Employment
-    
-    def get_readonly_fields(self, request, obj=None):
-        if request.user.username == 'enseignant':
-            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 StudentAdmin(admin.ModelAdmin):
-    form = StudentForm
-    list_display = ('firstname', 'lastname', 'tel', 'email')
-    search_fields = ('firstname', 'lastname')
-    list_filter = ('sex', 'linguisticlevel__delf_dalf', 'currentacademic__university__name',)
-    date_hierarchy = 'dob'
-    ordering = ('-lastname',)
-    inlines = [CurrentAcademicInline, LinguisticLevelInline, DiplomaObtainedInline, EmploymentInline]
-    readonly_fields = ('identifier',)
-    fields = ('identifier', 'firstname', 'lastname', 'nationality', 'sex', 'dob', 'email', 'tel', 'parent_tel', 'parent_address')
-    
-    
-    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 ()
-    
-    def queryset(self, request):
-        qs = super(StudentAdmin, self).queryset(request)
-        if request.user.first_name == 'student':
-            return qs.filter(identifier=request.user.username)
-        else:
-            return qs
-
-    def change_view(self, request, object_id, form_url='', extra_context=None):
-        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
-        return super(StudentAdmin, self).change_view(request, object_id, form_url, extra_context)
-        
-    def changelist_view(self, request, extra_context=None):
-        if request.user.first_name == 'student':
-            student = Student.objects.get(identifier=request.user.username)
-            return HttpResponseRedirect(reverse('edit_info'))
-        elif request.user.username == 'enseignant':
-            self.change_list_template = 'student_list.html'
-        else:
-            self.change_list_template = None
-        return super(StudentAdmin, self).changelist_view(request, extra_context)
-
-    def delete_model(self, request, obj):
-        User.objects.filter(username=obj.identifier).delete()
-        obj.delete()
-    
-class CurrentAcademicAdmin(admin.ModelAdmin):
-    pass
-
-class FacultyAdmin(admin.ModelAdmin):
-    pass
-
-class UniversityAdmin(admin.ModelAdmin):
-    pass
-
-class LevelAdmin(admin.ModelAdmin):
-    pass
-
-class CityAdmin(admin.ModelAdmin):
-    pass
-
-class EntrepriseAdmin(admin.ModelAdmin):
-    pass
-
-class CountryAdmin(admin.ModelAdmin):
-    pass
-
-class DiplomaObtainedAdmin(admin.ModelAdmin):
-    pass
-
-
-admin.site.register(Entreprise, CityAdmin)
-admin.site.register(Country, CityAdmin)
-admin.site.register(City, CityAdmin)
-admin.site.register(Student, StudentAdmin)
-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
diff --git a/paf0/paf/admin.pyc b/paf0/paf/admin.pyc
deleted file mode 100755 (executable)
index 908e7d9..0000000
Binary files a/paf0/paf/admin.pyc and /dev/null differ
diff --git a/paf0/paf/forms.py b/paf0/paf/forms.py
deleted file mode 100755 (executable)
index f752f87..0000000
+++ /dev/null
@@ -1,79 +0,0 @@
-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
-
-class RegistrationForm(forms.Form):
-    NATIONALITY_CHOICES = (
-        ('KH', 'Cambodgienne'),
-        ('LA', 'Laotienne'),
-        ('AN', '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)
-    
-    def clean_confirm_password(self):
-        if self.cleaned_data['password'] != self.cleaned_data['confirm_password']:
-            raise forms.ValidationError("Your confirm password is different from password!")
-    
-    def save(self):
-        student = self.create_student()
-        self.create_user(student)
-        return student
-            
-    def create_student(self):
-        cd = self.cleaned_data
-        student = Student(lastname=cd['lastname']
-                            , firstname=cd['firstname']
-                            , nationality=cd['nationality']
-                            , sex=cd['sex']
-                            , dob=cd['dob']
-                            , email=cd['email']
-                            , tel=cd['tel']
-                            , parent_tel=cd['parent_tel']
-                            , parent_address=cd['parent_address'])
-        student.identifier = self.calculate_identifier(student)
-        student.save()
-        return student
-        
-    def calculate_identifier(self, student):
-        try:
-            last_identifier = Student.objects.filter(nationality=student.nationality).order_by('-identifier')[0].identifier
-            tmp = int(last_identifier[2:]) + 1
-            return last_identifier[:2] + zfill(tmp, len(last_identifier)-2)
-        except:
-            return student.nationality + '0000001'
-
-    def create_user(self, student):
-        cd = self.cleaned_data
-        user = User(username=student.identifier, is_staff=1, first_name='student')
-        user.set_password(cd['password'])
-        user.save()
-        group = self.get_student_group()
-        user.groups = [group]
-        user.save()
-        return user
-        
-    def get_student_group(self):
-        try:
-            group = Group.objects.get(name='student')
-        except:
-            group = Group(name='student')
-            group.save()
-        return group
\ No newline at end of file
diff --git a/paf0/paf/forms.pyc b/paf0/paf/forms.pyc
deleted file mode 100755 (executable)
index 70da4d6..0000000
Binary files a/paf0/paf/forms.pyc and /dev/null differ
diff --git a/paf0/paf/migrations/0001_initial.py b/paf0/paf/migrations/0001_initial.py
deleted file mode 100755 (executable)
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/paf0/paf/migrations/0001_initial.pyc b/paf0/paf/migrations/0001_initial.pyc
deleted file mode 100755 (executable)
index a6c44a4..0000000
Binary files a/paf0/paf/migrations/0001_initial.pyc and /dev/null differ
diff --git a/paf0/paf/migrations/0002_auto__add_linguisticlevel__add_student.py b/paf0/paf/migrations/0002_auto__add_linguisticlevel__add_student.py
deleted file mode 100755 (executable)
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/paf0/paf/migrations/0002_auto__add_linguisticlevel__add_student.pyc b/paf0/paf/migrations/0002_auto__add_linguisticlevel__add_student.pyc
deleted file mode 100755 (executable)
index 16a4ee9..0000000
Binary files a/paf0/paf/migrations/0002_auto__add_linguisticlevel__add_student.pyc and /dev/null differ
diff --git a/paf0/paf/migrations/0003_auto__del_field_student_user.py b/paf0/paf/migrations/0003_auto__del_field_student_user.py
deleted file mode 100755 (executable)
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/paf0/paf/migrations/0003_auto__del_field_student_user.pyc b/paf0/paf/migrations/0003_auto__del_field_student_user.pyc
deleted file mode 100755 (executable)
index 8dd60d0..0000000
Binary files a/paf0/paf/migrations/0003_auto__del_field_student_user.pyc and /dev/null differ
diff --git a/paf0/paf/migrations/0004_auto__add_field_student_identifier.py b/paf0/paf/migrations/0004_auto__add_field_student_identifier.py
deleted file mode 100755 (executable)
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/paf0/paf/migrations/0004_auto__add_field_student_identifier.pyc b/paf0/paf/migrations/0004_auto__add_field_student_identifier.pyc
deleted file mode 100755 (executable)
index 29811ea..0000000
Binary files a/paf0/paf/migrations/0004_auto__add_field_student_identifier.pyc and /dev/null differ
diff --git a/paf0/paf/migrations/0005_auto__add_field_student_user.py b/paf0/paf/migrations/0005_auto__add_field_student_user.py
deleted file mode 100755 (executable)
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/paf0/paf/migrations/0005_auto__add_field_student_user.pyc b/paf0/paf/migrations/0005_auto__add_field_student_user.pyc
deleted file mode 100755 (executable)
index 998d546..0000000
Binary files a/paf0/paf/migrations/0005_auto__add_field_student_user.pyc and /dev/null differ
diff --git a/paf0/paf/migrations/0006_auto__del_field_student_user.py b/paf0/paf/migrations/0006_auto__del_field_student_user.py
deleted file mode 100755 (executable)
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/paf0/paf/migrations/0006_auto__del_field_student_user.pyc b/paf0/paf/migrations/0006_auto__del_field_student_user.pyc
deleted file mode 100755 (executable)
index 76aa033..0000000
Binary files a/paf0/paf/migrations/0006_auto__del_field_student_user.pyc and /dev/null differ
diff --git a/paf0/paf/migrations/0007_auto__add_faculty__add_university__add_currentacademic.py b/paf0/paf/migrations/0007_auto__add_faculty__add_university__add_currentacademic.py
deleted file mode 100755 (executable)
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/paf0/paf/migrations/0007_auto__add_faculty__add_university__add_currentacademic.pyc b/paf0/paf/migrations/0007_auto__add_faculty__add_university__add_currentacademic.pyc
deleted file mode 100755 (executable)
index cf955ab..0000000
Binary files a/paf0/paf/migrations/0007_auto__add_faculty__add_university__add_currentacademic.pyc and /dev/null differ
diff --git a/paf0/paf/migrations/0008_auto__add_country__add_continent__add_location.py b/paf0/paf/migrations/0008_auto__add_country__add_continent__add_location.py
deleted file mode 100755 (executable)
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/paf0/paf/migrations/0008_auto__add_country__add_continent__add_location.pyc b/paf0/paf/migrations/0008_auto__add_country__add_continent__add_location.pyc
deleted file mode 100755 (executable)
index 9210a07..0000000
Binary files a/paf0/paf/migrations/0008_auto__add_country__add_continent__add_location.pyc and /dev/null differ
diff --git a/paf0/paf/migrations/0009_auto__add_area__add_field_location_area__add_field_location_city__add_.py b/paf0/paf/migrations/0009_auto__add_area__add_field_location_area__add_field_location_city__add_.py
deleted file mode 100755 (executable)
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/paf0/paf/migrations/0009_auto__add_area__add_field_location_area__add_field_location_city__add_.pyc b/paf0/paf/migrations/0009_auto__add_area__add_field_location_area__add_field_location_city__add_.pyc
deleted file mode 100755 (executable)
index 0576575..0000000
Binary files a/paf0/paf/migrations/0009_auto__add_area__add_field_location_area__add_field_location_city__add_.pyc and /dev/null differ
diff --git a/paf0/paf/migrations/0010_auto__add_field_currentacademic_university__add_field_currentacademic_.py b/paf0/paf/migrations/0010_auto__add_field_currentacademic_university__add_field_currentacademic_.py
deleted file mode 100755 (executable)
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/paf0/paf/migrations/0010_auto__add_field_currentacademic_university__add_field_currentacademic_.pyc b/paf0/paf/migrations/0010_auto__add_field_currentacademic_university__add_field_currentacademic_.pyc
deleted file mode 100755 (executable)
index ac9e22b..0000000
Binary files a/paf0/paf/migrations/0010_auto__add_field_currentacademic_university__add_field_currentacademic_.pyc and /dev/null differ
diff --git a/paf0/paf/migrations/0011_auto__add_field_currentacademic_student.py b/paf0/paf/migrations/0011_auto__add_field_currentacademic_student.py
deleted file mode 100755 (executable)
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'},
-   &nbs