From b36a271a549f3685fd2a08089e74f74f7d296962 Mon Sep 17 00:00:00 2001 From: yomguy Date: Sun, 8 Apr 2012 00:37:55 +0200 Subject: [PATCH] fix various styles, add chat rooms, begin user import script --- example/manage.py | 16 +- example/settings.py | 11 +- setup.py | 1 + teleforma/htdocs/css/teleforma_black.css | 60 ++- teleforma/locale/fr/LC_MESSAGES/django.po | 139 +++--- teleforma/management/__init__.py | 0 teleforma/management/commands/__init__.py | 0 .../commands/teleforma-import-users.py | 33 ++ teleforma/middleware.py | 25 ++ .../0003_auto__add_field_course_chat_room.py | 410 ++++++++++++++++++ teleforma/models.py | 10 + teleforma/templates/postman/base.html | 4 +- teleforma/templates/postman/view.html | 2 +- .../templates/teleforma/course_media.html | 53 ++- teleforma/templates/teleforma/courses.html | 31 +- .../teleforma/inc/document_list.html | 2 +- teleforma/templates/telemeta/base.html | 26 +- .../templates/telemeta/inc/user_list.html | 41 +- teleforma/urls.py | 5 +- teleforma/views.py | 10 +- 20 files changed, 740 insertions(+), 139 deletions(-) create mode 100644 teleforma/management/__init__.py create mode 100644 teleforma/management/commands/__init__.py create mode 100644 teleforma/management/commands/teleforma-import-users.py create mode 100644 teleforma/middleware.py create mode 100644 teleforma/migrations/0003_auto__add_field_course_chat_room.py diff --git a/example/manage.py b/example/manage.py index bcdd55e2..c632a8a3 100755 --- a/example/manage.py +++ b/example/manage.py @@ -1,11 +1,9 @@ -#!/usr/bin/python -from django.core.management import execute_manager -try: - import settings # Assumed to be in the same directory. -except ImportError: - import sys - sys.stderr.write("Error: Can't find the file 'settings.py' in the directory containing %r. It appears you've customized things.\nYou'll have to run django-admin.py, passing it your settings module.\n(If the file settings.py does indeed exist, it's causing an ImportError somehow.)\n" % __file__) - sys.exit(1) +#!/usr/bin/env python +import os, sys if __name__ == "__main__": - execute_manager(settings) + os.environ.setdefault("DJANGO_SETTINGS_MODULE", "settings") + + from django.core.management import execute_from_command_line + + execute_from_command_line(sys.argv) diff --git a/example/settings.py b/example/settings.py index e169232c..a1d627d0 100644 --- a/example/settings.py +++ b/example/settings.py @@ -111,7 +111,7 @@ MIDDLEWARE_CLASSES = ( 'pagination.middleware.PaginationMiddleware', ) -ROOT_URLCONF = 'example.urls' +ROOT_URLCONF = 'urls' TEMPLATE_DIRS = ( # Put strings here, like "/home/html/django_templates" or "C:/www/django/templates". @@ -136,7 +136,12 @@ INSTALLED_APPS = ( 'django_extensions', 'pagination', 'postman', - 'private_files', +# 'private_files', + 'markup_mixin', + 'notes', +# 'jquery', + 'jqchat', +# 'follow', ) TEMPLATE_CONTEXT_PROCESSORS = ( @@ -168,4 +173,4 @@ DEFAULT_FROM_EMAIL = 'webmaster@parisson.com' POSTMAN_AUTO_MODERATE_AS=True -FILE_PROTECTION_METHOD = 'basic' +FILE_PROTECTION_METHOD = 'xsendfile' diff --git a/setup.py b/setup.py index e9c06a92..d6afafb4 100644 --- a/setup.py +++ b/setup.py @@ -22,6 +22,7 @@ setup( 'django-pagination', 'django-postman', 'django-extensions', + 'django-notes', ], platforms=['OS Independent'], license='CeCILL v2', diff --git a/teleforma/htdocs/css/teleforma_black.css b/teleforma/htdocs/css/teleforma_black.css index a2aaeacb..783da0d6 100644 --- a/teleforma/htdocs/css/teleforma_black.css +++ b/teleforma/htdocs/css/teleforma_black.css @@ -464,7 +464,8 @@ form.login .submit { } #menu .darkblue { border-bottom-color: #0f3179; } -#menu .blue { border-bottom-color: #4f628a; } +/* #menu .blue { border-bottom-color: #357ae8; } */ +#menu .blue { border-bottom-color: #4f628a; } #menu .green { border-bottom-color: #92b220; } #menu .yellow { border-bottom-color: #f3ad17; } #menu .orange { border-bottom-color: #e65911; } @@ -924,7 +925,7 @@ img.align-left { border: 1px solid #000; background-image: url(../images/grid_bg_2.png); padding: 0.3em 0.4em 0.4em 0.4em; - margin: 3.5em 0em 1.5em 1.5em; + margin: 4em 1em 1em 0em; -moz-border-radius: 8px 0px 8px 8px; -webkit-border-radius: 8px 0px 8px 8px; border-radius: 8px 0px 8px 8px; @@ -934,6 +935,8 @@ img.align-left { color: #FFF; font-size: 1.1em; font-weight: bold; + -webkit-margin-before: 0.2em; + -webkit-margin-after: 0.2em; } #module-set .module a:hover { @@ -953,7 +956,7 @@ a.image-link { } .home-description { - padding-right: 15%; + padding-right: 33%; display: block; } @@ -1141,19 +1144,21 @@ a.image-link { color: #000; /*#6A0307;*/ } -#button_action_blue { - background-color: #4b8df8; +#action_blue { + background-color: #357ae8; color: #FFF; padding:0.8em 0.8em 0.8em 0.8em; } -#button_action_red { - background-color: #d34836; + +#action_red { + background-color: #dd4b39; color: #FFF; padding:0.8em 0.8em 0.8em 0.8em; } -#button_action_green { - background-color: #92b220; + +#action_green { + background-color: #3c9200; color: #FFF; padding:0.8em 0.8em 0.8em 0.8em; } @@ -1333,7 +1338,7 @@ input,textarea{ .desk_center { float: left; - width:60%; + width:58%; padding: 0em 0em 0em 1em; } @@ -1354,7 +1359,7 @@ input,textarea{ -moz-border-radius: 8px 0px 0px 0px; -webkit-border-radius: 8px 0px 0px 0px; border-radius: 8px 0px 0px 0px; - padding: 0em 0.8em 0.8em 0em; + padding: 0em 0.8em 0.3em 0em; font-weight: bold; font-size: 1.2em; } @@ -1383,10 +1388,10 @@ input,textarea{ /* border: 2px solid #CCC; */ } -.media_infos { +#media_infos { background-color: #FFF; padding: 0.3em 0.8em 0.3em 0.8em; - width: 100%; + width: 620px; } .video { @@ -1436,8 +1441,33 @@ input,textarea{ } -#pm_write { +.module_action { text-align: center; margin: 0em 0em 3em 0em; padding: 1em; -} \ No newline at end of file +} + + +#chatwindow { + height: 340px; + width: 187px; + border-bottom: 1px solid; + padding: 0.8em 2em 0em 0em; + overflow: auto; + background-color: white; +} + +#users { + padding: 0.8em 0em 0em 0em; + background-color: #FFF; + -moz-border-radius: 8px 0px 8px 8px; + -webkit-border-radius: 8px 0px 8px 8px; + border-radius: 8px 0px 8px 8px; + } + +#spacing td { + padding: 1em 1em 1em 0.3em; + font-size: 0.8em; + font-weight: normal; + } + diff --git a/teleforma/locale/fr/LC_MESSAGES/django.po b/teleforma/locale/fr/LC_MESSAGES/django.po index 2246d8a3..04325eec 100644 --- a/teleforma/locale/fr/LC_MESSAGES/django.po +++ b/teleforma/locale/fr/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2012-04-04 22:38+0200\n" +"POT-Creation-Date: 2012-04-05 11:53+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -18,200 +18,199 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n > 1)\n" -#: models.py:61 models.py:73 models.py:87 models.py:100 models.py:144 -#: models.py:257 models.py:272 models.py:289 models.py:302 models.py:315 +#: models.py:63 models.py:75 models.py:89 models.py:102 models.py:148 +#: models.py:261 models.py:276 models.py:293 models.py:306 models.py:319 msgid "name" msgstr "nom" -#: models.py:62 models.py:74 models.py:88 models.py:101 models.py:114 -#: models.py:145 models.py:202 models.py:258 +#: models.py:64 models.py:76 models.py:90 models.py:103 models.py:116 +#: models.py:149 models.py:206 models.py:262 msgid "description" msgstr "description" -#: models.py:69 models.py:75 models.py:143 +#: models.py:71 models.py:77 models.py:147 msgid "organization" msgstr "organisation" -#: models.py:82 models.py:112 +#: models.py:84 models.py:114 msgid "department" msgstr "département" -#: models.py:95 models.py:115 models.py:329 +#: models.py:97 models.py:117 models.py:333 msgid "category" msgstr "catégorie" -#: models.py:96 +#: models.py:98 msgid "categories" msgstr "catégories" -#: models.py:108 +#: models.py:110 #, fuzzy msgid "type" msgstr "type mime" -#: models.py:113 models.py:201 +#: models.py:115 models.py:205 msgid "title" msgstr "titre" -#: models.py:116 +#: models.py:118 msgid "course type" msgstr "type de matière" -#: models.py:117 models.py:203 models.py:271 models.py:290 models.py:303 -#: models.py:316 +#: models.py:119 models.py:207 models.py:275 models.py:294 models.py:307 +#: models.py:320 msgid "code" msgstr "cote" -#: models.py:124 models.py:157 +#: models.py:128 models.py:161 msgid "course" msgstr "matière" -#: models.py:129 models.py:328 models.py:355 +#: models.py:133 models.py:332 models.py:359 msgid "user" msgstr "utilisateur" -#: models.py:130 models.py:273 +#: models.py:134 models.py:277 msgid "courses" msgstr "matières" -#: models.py:138 models.py:158 +#: models.py:142 models.py:162 msgid "professor" msgstr "professeur" -#: models.py:152 models.py:161 +#: models.py:156 models.py:165 msgid "room" msgstr "salle" -#: models.py:159 +#: models.py:163 msgid "session" msgstr "session" -#: models.py:163 +#: models.py:167 msgid "comment" msgstr "" -#: models.py:164 +#: models.py:168 msgid "begin date" msgstr "date de début" -#: models.py:165 +#: models.py:169 msgid "end date" msgstr "date de fin" -#: models.py:178 models.py:205 models.py:236 +#: models.py:182 models.py:209 models.py:240 msgid "conference" msgstr "conférence" -#: models.py:184 +#: models.py:188 msgid "credits" msgstr "crédits" -#: models.py:185 +#: models.py:189 msgid "published" msgstr "publié" -#: models.py:186 +#: models.py:190 msgid "date added" msgstr "date d'ajout" -#: models.py:187 +#: models.py:191 msgid "date modified" msgstr "date de modification" -#: models.py:207 +#: models.py:211 msgid "annal" msgstr "annale" -#: models.py:208 +#: models.py:212 msgid "file" msgstr "fichier" -#: models.py:240 +#: models.py:244 msgid "is live" msgstr "en direct" -#: models.py:265 models.py:266 +#: models.py:269 models.py:270 msgid "IEJ" msgstr "IEJ" -#: models.py:275 +#: models.py:279 msgid "synthesis note" -msgstr "" +msgstr "note de synthèse" -#: models.py:276 -#, fuzzy +#: models.py:280 msgid "obligation" -msgstr "organisation" +msgstr "obligation" -#: models.py:284 models.py:332 +#: models.py:288 models.py:336 msgid "training" msgstr "formation" -#: models.py:297 models.py:334 +#: models.py:301 models.py:338 msgid "procedure" msgstr "procédure" -#: models.py:310 +#: models.py:314 msgid "speciality" msgstr "spécialité" -#: models.py:323 +#: models.py:327 msgid "oral" msgstr "" -#: models.py:330 +#: models.py:334 msgid "iej" msgstr "iej" -#: models.py:336 +#: models.py:340 msgid "oral speciality" msgstr "spécialité orale" -#: models.py:338 +#: models.py:342 msgid "written speciality" msgstr "spécialité écrit" -#: models.py:340 models.py:342 +#: models.py:344 models.py:346 msgid "oral 1" msgstr "" -#: models.py:349 +#: models.py:353 msgid "student" msgstr "étudiant" -#: models.py:356 +#: models.py:360 msgid "Address" msgstr "" -#: models.py:357 +#: models.py:361 msgid "Postal code" msgstr "Code postal" -#: models.py:358 +#: models.py:362 msgid "City" msgstr "Ville" -#: models.py:359 +#: models.py:363 msgid "Country" msgstr "Pays" -#: models.py:360 +#: models.py:364 msgid "Language" msgstr "Langue" -#: models.py:361 +#: models.py:365 msgid "Telephone" msgstr "Téléphone" -#: models.py:362 +#: models.py:366 msgid "Expiration_date" msgstr "Date d'expiration" -#: models.py:363 +#: models.py:367 msgid "Password initialization" msgstr "" -#: models.py:367 +#: models.py:371 msgid "profile" msgstr "profil" @@ -484,12 +483,21 @@ msgstr "Session" msgid "Professor" msgstr "Professeur" +#: templates/teleforma/course_detail.html:12 +msgid "My notes" +msgstr "Mes notes" + +#: templates/teleforma/course_detail.html:22 +#: templates/teleforma/courses.html:27 +msgid "New note" +msgstr "Nouvelle note" + #: templates/teleforma/course_media.html:48 #, fuzzy msgid "Recording date" msgstr "date de début" -#: templates/teleforma/courses.html:12 + #: templates/teleforma/courses.html:13 msgid "My courses" msgstr "Mes matières" @@ -546,29 +554,33 @@ msgstr "" msgid "Profile" msgstr "profil" -#: templates/telemeta/base.html:103 +#: templates/telemeta/base.html:104 +msgid "Lists" +msgstr "" + +#: templates/telemeta/base.html:106 msgid "Help" msgstr "" -#: templates/telemeta/base.html:104 +#: templates/telemeta/base.html:107 msgid "Sign out" msgstr "" -#: templates/telemeta/base.html:145 +#: templates/telemeta/base.html:148 msgid "Powered by" msgstr "" -#: templates/telemeta/base.html:146 +#: templates/telemeta/base.html:149 msgid "By" msgstr "" -#: templates/telemeta/base.html:151 +#: templates/telemeta/base.html:154 msgid "" "Usage of the archives in the respect of cultural heritage of the original " "communities." msgstr "" -#: templates/telemeta/base.html:157 +#: templates/telemeta/base.html:160 msgid "Legal notices" msgstr "" @@ -589,9 +601,8 @@ msgid "Last Name" msgstr "" #: templates/telemeta/inc/user_list.html:11 -#, fuzzy msgid "Training" -msgstr "formation" +msgstr "Formation" #, fuzzy #~ msgid "Last modification" diff --git a/teleforma/management/__init__.py b/teleforma/management/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/teleforma/management/commands/__init__.py b/teleforma/management/commands/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/teleforma/management/commands/teleforma-import-users.py b/teleforma/management/commands/teleforma-import-users.py new file mode 100644 index 00000000..aac7ae97 --- /dev/null +++ b/teleforma/management/commands/teleforma-import-users.py @@ -0,0 +1,33 @@ +from optparse import make_option +from django.conf import settings +from django.core.management.base import BaseCommand, CommandError +from telemeta.models import * +from telemeta.util.unaccent import unaccent +from teleforma.models import * +import logging +import codecs +import xlrd + + +class Command(BaseCommand): + help = "Import users from a XLS file (see an example in example/data/" + args = "path" + first_row = 2 + + def import_user(self, row): + last_name = row[0].value + first_name = row[1].value + print first_name, last_name + + def handle(self, *args, **options): + file = args[0] + book = xlrd.open_workbook(file) + sheet = book.sheet_by_index(0) + col = sheet.col(0) + for i in range(self.first_row, len(col)): + self.import_user(sheet.row(i)) + + print "Done, imported %s users" % str(i) + + + diff --git a/teleforma/middleware.py b/teleforma/middleware.py new file mode 100644 index 00000000..2dd2e6ec --- /dev/null +++ b/teleforma/middleware.py @@ -0,0 +1,25 @@ +from telemeta.models.system import * +from teleforma.models import * + + +class OnlyOneUserMiddleware(object): + + def process_request(self, request): + if not request.user.is_anonymous(): + profile = UserProfile.objects.get(user=request.user) + cur_session_key = profile.last_session_key + if cur_session_key and cur_session_key != request.session.session_key: + sessions = Session.objects.filter(session_key=cur_session_key) + if sessions: + for session in sessions: + Session.objects.get(session_key=cur_session_key).delete() + #the following can be optimized(do not save each time if value not changed) + profile.session_key = request.session.session_key + profile.save() + + +class ExportSecurity(object): + + def process_view(self, item_export): + pass + diff --git a/teleforma/migrations/0003_auto__add_field_course_chat_room.py b/teleforma/migrations/0003_auto__add_field_course_chat_room.py new file mode 100644 index 00000000..d13202e0 --- /dev/null +++ b/teleforma/migrations/0003_auto__add_field_course_chat_room.py @@ -0,0 +1,410 @@ +# -*- 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 'Course.chat_room' + db.add_column('teleforma_course', 'chat_room', + self.gf('django.db.models.fields.related.OneToOneField')(to=orm['jqchat.Room'], unique=True, null=True, blank=True), + keep_default=False) + + def backwards(self, orm): + # Deleting field 'Course.chat_room' + db.delete_column('teleforma_course', 'chat_room_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'}) + }, + 'jqchat.room': { + 'Meta': {'ordering': "['created']", 'object_name': 'Room'}, + 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']", 'null': 'True', 'blank': 'True'}), + 'created': ('django.db.models.fields.DateTimeField', [], {}), + 'description': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True', 'blank': 'True'}), + 'description_modified': ('django.db.models.fields.IntegerField', [], {'null': 'True'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'last_activity': ('django.db.models.fields.IntegerField', [], {}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '20', 'null': 'True', 'blank': 'True'}), + 'object_id': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True', 'blank': 'True'}) + }, + 'notes.note': { + 'Meta': {'object_name': 'Note'}, + 'author': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'null': 'True', 'blank': 'True'}), + 'content': ('django.db.models.fields.TextField', [], {}), + 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}), + 'created': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now', 'blank': 'True'}), + 'date': ('django.db.models.fields.DateField', [], {'default': 'datetime.datetime(2012, 4, 5, 0, 0)'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'markup': ('django.db.models.fields.CharField', [], {'default': "'m'", 'max_length': '1'}), + 'modified': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now', 'blank': 'True'}), + 'object_id': ('django.db.models.fields.PositiveIntegerField', [], {}), + 'public': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), + 'rendered_content': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}), + 'topic': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['notes.Topic']"}) + }, + 'notes.topic': { + 'Meta': {'object_name': 'Topic'}, + 'created': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now', 'blank': 'True'}), + 'description': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'modified': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now', 'blank': 'True'}), + 'slug': ('django_extensions.db.fields.AutoSlugField', [], {'allow_duplicates': 'False', 'max_length': '50', 'separator': "u'-'", 'blank': 'True', 'populate_from': "'title'", 'overwrite': 'False'}), + 'title': ('django.db.models.fields.CharField', [], {'max_length': '255'}) + }, + 'teleforma.category': { + 'Meta': {'object_name': 'Category'}, + 'description': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}) + }, + 'teleforma.conference': { + 'Meta': {'object_name': 'Conference'}, + 'comment': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}), + 'course': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'conference'", 'to': "orm['teleforma.Course']"}), + 'date_begin': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}), + 'date_end': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'professor': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'conference'", 'to': "orm['teleforma.Professor']"}), + 'room': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'conference'", 'null': 'True', 'to': "orm['teleforma.Room']"}), + 'session': ('django.db.models.fields.CharField', [], {'default': "'1'", 'max_length': '16'}) + }, + 'teleforma.course': { + 'Meta': {'object_name': 'Course'}, + 'category': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'course'", 'to': "orm['teleforma.Category']"}), + 'chat_room': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['jqchat.Room']", 'unique': 'True', 'null': 'True', 'blank': 'True'}), + 'code': ('django.db.models.fields.CharField', [], {'max_length': '255'}), + 'department': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'course'", 'to': "orm['teleforma.Department']"}), + 'description': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'title': ('django.db.models.fields.CharField', [], {'max_length': '255'}), + 'type': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'course'", 'to': "orm['teleforma.CourseType']"}) + }, + 'teleforma.coursetype': { + 'Meta': {'object_name': 'CourseType', 'db_table': "'teleforma_course_type'"}, + 'description': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}) + }, + 'teleforma.department': { + 'Meta': {'object_name': 'Department'}, + 'description': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}), + 'organization': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'department'", 'to': "orm['teleforma.Organization']"}) + }, + 'teleforma.document': { + 'Meta': {'object_name': 'Document'}, + 'code': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}), + 'conference': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'document'", 'null': 'True', 'to': "orm['teleforma.Conference']"}), + 'course': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'document'", 'to': "orm['teleforma.Course']"}), + 'credits': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}), + 'date_added': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), + 'date_modified': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}), + 'description': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}), + 'file': ('django.db.models.fields.files.FileField', [], {'max_length': '100', 'db_column': "'filename'", 'blank': 'True'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'is_annal': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'is_published': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'title': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}) + }, + 'teleforma.iej': { + 'Meta': {'object_name': 'IEJ'}, + 'description': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}) + }, + 'teleforma.media': { + 'Meta': {'object_name': 'Media'}, + 'conference': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'media'", 'null': 'True', 'to': "orm['teleforma.Conference']"}), + 'course': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'media'", 'to': "orm['teleforma.Course']"}), + 'credits': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}), + 'date_added': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), + 'date_modified': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'is_live': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'is_published': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'item': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'media'", 'null': 'True', 'to': "orm['telemeta.MediaItem']"}) + }, + 'teleforma.oral': { + 'Meta': {'object_name': 'Oral'}, + 'code': ('django.db.models.fields.CharField', [], {'max_length': '255'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}) + }, + 'teleforma.organization': { + 'Meta': {'object_name': 'Organization'}, + 'description': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}) + }, + 'teleforma.procedure': { + 'Meta': {'object_name': 'Procedure'}, + 'code': ('django.db.models.fields.CharField', [], {'max_length': '255'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}) + }, + 'teleforma.professor': { + 'Meta': {'object_name': 'Professor'}, + 'courses': ('django.db.models.fields.related.ManyToManyField', [], {'blank': 'True', 'related_name': "'professor'", 'null': 'True', 'symmetrical': 'False', 'to': "orm['teleforma.Course']"}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'user': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'professor'", 'unique': 'True', 'to': "orm['auth.User']"}) + }, + 'teleforma.profile': { + 'Meta': {'object_name': 'Profile', 'db_table': "'teleforma_profiles'"}, + 'address': ('django.db.models.fields.TextField', [], {}), + 'city': ('django.db.models.fields.CharField', [], {'max_length': '255'}), + 'country': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}), + 'expiration_date': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'init_password': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'language': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}), + 'postal_code': ('django.db.models.fields.CharField', [], {'max_length': '255'}), + 'telephone': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}), + 'user': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'profile'", 'unique': 'True', 'to': "orm['auth.User']"}) + }, + 'teleforma.room': { + 'Meta': {'object_name': 'Room'}, + 'description': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}), + 'organization': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'room'", 'to': "orm['teleforma.Organization']"}) + }, + 'teleforma.speciality': { + 'Meta': {'object_name': 'Speciality'}, + 'code': ('django.db.models.fields.CharField', [], {'max_length': '255'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}) + }, + 'teleforma.student': { + 'Meta': {'object_name': 'Student'}, + 'category': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'student'", 'to': "orm['teleforma.Category']"}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'iej': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'student'", 'to': "orm['teleforma.IEJ']"}), + 'oral_1': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'oral_1'", 'null': 'True', 'to': "orm['teleforma.Oral']"}), + 'oral_2': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'oral_2'", 'null': 'True', 'to': "orm['teleforma.Oral']"}), + 'oral_speciality': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'student_oral_spe'", 'null': 'True', 'to': "orm['teleforma.Speciality']"}), + 'procedure': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'student'", 'null': 'True', 'to': "orm['teleforma.Procedure']"}), + 'training': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'student'", 'null': 'True', 'to': "orm['teleforma.Training']"}), + 'user': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'student'", 'unique': 'True', 'to': "orm['auth.User']"}), + 'written_speciality': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'student_written_spe'", 'null': 'True', 'to': "orm['teleforma.Speciality']"}) + }, + 'teleforma.training': { + 'Meta': {'object_name': 'Training'}, + 'code': ('django.db.models.fields.CharField', [], {'max_length': '255'}), + 'courses': ('django.db.models.fields.related.ManyToManyField', [], {'blank': 'True', 'related_name': "'training'", 'null': 'True', 'symmetrical': 'False', 'to': "orm['teleforma.Course']"}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}), + 'obligation': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'synthesis_note': ('django.db.models.fields.BooleanField', [], {'default': 'False'}) + }, + 'telemeta.acquisitionmode': { + 'Meta': {'ordering': "['value']", 'object_name': 'AcquisitionMode', 'db_table': "'acquisition_modes'"}, + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'value': ('telemeta.models.core.CharField', [], {'unique': 'True', 'max_length': '250'}) + }, + 'telemeta.adconversion': { + 'Meta': {'ordering': "['value']", 'object_name': 'AdConversion', 'db_table': "'ad_conversions'"}, + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'value': ('telemeta.models.core.CharField', [], {'unique': 'True', 'max_length': '250'}) + }, + 'telemeta.ethnicgroup': { + 'Meta': {'ordering': "['value']", 'object_name': 'EthnicGroup', 'db_table': "'ethnic_groups'"}, + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'value': ('telemeta.models.core.CharField', [], {'unique': 'True', 'max_length': '250'}) + }, + 'telemeta.genericstyle': { + 'Meta': {'ordering': "['value']", 'object_name': 'GenericStyle', 'db_table': "'generic_styles'"}, + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'value': ('telemeta.models.core.CharField', [], {'unique': 'True', 'max_length': '250'}) + }, + 'telemeta.language': { + 'Meta': {'ordering': "['name']", 'object_name': 'Language', 'db_table': "'languages'"}, + 'comment': ('telemeta.models.core.TextField', [], {'default': "''", 'blank': 'True'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'identifier': ('telemeta.models.core.CharField', [], {'default': "''", 'max_length': '3', 'blank': 'True'}), + 'name': ('telemeta.models.core.CharField', [], {'default': "''", 'max_length': '250', 'blank': 'True'}), + 'part1': ('telemeta.models.core.CharField', [], {'default': "''", 'max_length': '1', 'blank': 'True'}), + 'part2B': ('telemeta.models.core.CharField', [], {'default': "''", 'max_length': '3', 'blank': 'True'}), + 'part2T': ('telemeta.models.core.CharField', [], {'default': "''", 'max_length': '3', 'blank': 'True'}), + 'scope': ('telemeta.models.core.CharField', [], {'default': "''", 'max_length': '1', 'blank': 'True'}), + 'type': ('telemeta.models.core.CharField', [], {'default': "''", 'max_length': '1', 'blank': 'True'}) + }, + 'telemeta.legalright': { + 'Meta': {'ordering': "['value']", 'object_name': 'LegalRight', 'db_table': "'legal_rights'"}, + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'value': ('telemeta.models.core.CharField', [], {'unique': 'True', 'max_length': '250'}) + }, + 'telemeta.location': { + 'Meta': {'ordering': "['name']", 'object_name': 'Location', 'db_table': "'locations'"}, + 'complete_type': ('telemeta.models.core.ForeignKey', [], {'related_name': "'locations'", 'to': "orm['telemeta.LocationType']"}), + 'current_location': ('telemeta.models.core.WeakForeignKey', [], {'default': 'None', 'related_name': "'past_names'", 'null': 'True', 'blank': 'True', 'to': "orm['telemeta.Location']"}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'is_authoritative': ('telemeta.models.core.BooleanField', [], {'default': 'False'}), + 'latitude': ('telemeta.models.core.FloatField', [], {'default': 'None', 'null': 'True', 'blank': 'True'}), + 'longitude': ('telemeta.models.core.FloatField', [], {'default': 'None', 'null': 'True', 'blank': 'True'}), + 'name': ('telemeta.models.core.CharField', [], {'unique': 'True', 'max_length': '150'}), + 'type': ('telemeta.models.core.IntegerField', [], {'default': '0', 'db_index': 'True', 'blank': 'True'}) + }, + 'telemeta.locationtype': { + 'Meta': {'ordering': "['name']", 'object_name': 'LocationType', 'db_table': "'location_types'"}, + 'code': ('telemeta.models.core.CharField', [], {'unique': 'True', 'max_length': '64'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('telemeta.models.core.CharField', [], {'max_length': '150'}) + }, + 'telemeta.mediacollection': { + 'Meta': {'ordering': "['code']", 'object_name': 'MediaCollection', 'db_table': "'media_collections'"}, + 'a_informer_07_03': ('telemeta.models.core.CharField', [], {'default': "''", 'max_length': '250', 'blank': 'True'}), + 'acquisition_mode': ('telemeta.models.core.WeakForeignKey', [], {'default': 'None', 'related_name': "'collections'", 'null': 'True', 'blank': 'True', 'to': "orm['telemeta.AcquisitionMode']"}), + 'ad_conversion': ('telemeta.models.core.WeakForeignKey', [], {'default': 'None', 'related_name': "'collections'", 'null': 'True', 'blank': 'True', 'to': "orm['telemeta.AdConversion']"}), + 'alt_ids': ('telemeta.models.core.CharField', [], {'default': "''", 'max_length': '250', 'blank': 'True'}), + 'alt_title': ('telemeta.models.core.CharField', [], {'default': "''", 'max_length': '250', 'blank': 'True'}), + 'approx_duration': ('telemeta.models.core.DurationField', [], {'default': "'0'", 'blank': 'True'}), + 'booklet_author': ('telemeta.models.core.CharField', [], {'default': "''", 'max_length': '250', 'blank': 'True'}), + 'booklet_description': ('telemeta.models.core.TextField', [], {'default': "''", 'blank': 'True'}), + 'cnrs_contributor': ('telemeta.models.core.CharField', [], {'default': "''", 'max_length': '250', 'blank': 'True'}), + 'code': ('telemeta.models.core.CharField', [], {'unique': 'True', 'max_length': '250'}), + 'collector': ('telemeta.models.core.CharField', [], {'default': "''", 'max_length': '250', 'blank': 'True'}), + 'collector_is_creator': ('telemeta.models.core.BooleanField', [], {'default': 'False'}), + 'comment': ('telemeta.models.core.TextField', [], {'default': "''", 'blank': 'True'}), + 'conservation_site': ('telemeta.models.core.CharField', [], {'default': "''", 'max_length': '250', 'blank': 'True'}), + 'creator': ('telemeta.models.core.CharField', [], {'default': "''", 'max_length': '250', 'blank': 'True'}), + 'doctype_code': ('telemeta.models.core.IntegerField', [], {'default': '0', 'blank': 'True'}), + 'external_references': ('telemeta.models.core.TextField', [], {'default': "''", 'blank': 'True'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'is_published': ('telemeta.models.core.BooleanField', [], {'default': 'False'}), + 'items_done': ('telemeta.models.core.CharField', [], {'default': "''", 'max_length': '250', 'blank': 'True'}), + 'legal_rights': ('telemeta.models.core.WeakForeignKey', [], {'default': 'None', 'related_name': "'collections'", 'null': 'True', 'blank': 'True', 'to': "orm['telemeta.LegalRight']"}), + 'metadata_author': ('telemeta.models.core.WeakForeignKey', [], {'default': 'None', 'related_name': "'collections'", 'null': 'True', 'blank': 'True', 'to': "orm['telemeta.MetadataAuthor']"}), + 'metadata_writer': ('telemeta.models.core.WeakForeignKey', [], {'default': 'None', 'related_name': "'collections'", 'null': 'True', 'blank': 'True', 'to': "orm['telemeta.MetadataWriter']"}), + 'old_code': ('telemeta.models.core.CharField', [], {'default': 'None', 'max_length': '250', 'null': 'True', 'blank': 'True'}), + 'physical_format': ('telemeta.models.core.WeakForeignKey', [], {'default': 'None', 'related_name': "'collections'", 'null': 'True', 'blank': 'True', 'to': "orm['telemeta.PhysicalFormat']"}), + 'physical_items_num': ('telemeta.models.core.IntegerField', [], {'default': '0', 'blank': 'True'}), + 'public_access': ('telemeta.models.core.CharField', [], {'default': "'metadata'", 'max_length': '16', 'blank': 'True'}), + 'publisher': ('telemeta.models.core.WeakForeignKey', [], {'default': 'None', 'related_name': "'collections'", 'null': 'True', 'blank': 'True', 'to': "orm['telemeta.Publisher']"}), + 'publisher_collection': ('telemeta.models.core.WeakForeignKey', [], {'default': 'None', 'related_name': "'collections'", 'null': 'True', 'blank': 'True', 'to': "orm['telemeta.PublisherCollection']"}), + 'publisher_serial': ('telemeta.models.core.CharField', [], {'default': "''", 'max_length': '250', 'blank': 'True'}), + 'publishing_status': ('telemeta.models.core.WeakForeignKey', [], {'default': 'None', 'related_name': "'collections'", 'null': 'True', 'blank': 'True', 'to': "orm['telemeta.PublishingStatus']"}), + 'recorded_from_year': ('telemeta.models.core.IntegerField', [], {'default': '0', 'blank': 'True'}), + 'recorded_to_year': ('telemeta.models.core.IntegerField', [], {'default': '0', 'blank': 'True'}), + 'recording_context': ('telemeta.models.core.WeakForeignKey', [], {'default': 'None', 'related_name': "'collections'", 'null': 'True', 'blank': 'True', 'to': "orm['telemeta.RecordingContext']"}), + 'reference': ('telemeta.models.core.CharField', [], {'default': 'None', 'max_length': '250', 'unique': 'True', 'null': 'True', 'blank': 'True'}), + 'state': ('telemeta.models.core.TextField', [], {'default': "''", 'blank': 'True'}), + 'title': ('telemeta.models.core.CharField', [], {'max_length': '250'}), + 'travail': ('telemeta.models.core.CharField', [], {'default': "''", 'max_length': '250', 'blank': 'True'}), + 'year_published': ('telemeta.models.core.IntegerField', [], {'default': '0', 'blank': 'True'}) + }, + 'telemeta.mediaitem': { + 'Meta': {'object_name': 'MediaItem', 'db_table': "'media_items'"}, + 'alt_title': ('telemeta.models.core.CharField', [], {'default': "''", 'max_length': '250', 'blank': 'True'}), + 'approx_duration': ('telemeta.models.core.DurationField', [], {'default': "'0'", 'blank': 'True'}), + 'author': ('telemeta.models.core.CharField', [], {'default': "''", 'max_length': '250', 'blank': 'True'}), + 'code': ('telemeta.models.core.CharField', [], {'default': "''", 'unique': 'True', 'max_length': '250', 'blank': 'True'}), + 'collection': ('telemeta.models.core.ForeignKey', [], {'related_name': "'items'", 'to': "orm['telemeta.MediaCollection']"}), + 'collector': ('telemeta.models.core.CharField', [], {'default': "''", 'max_length': '250', 'blank': 'True'}), + 'collector_from_collection': ('telemeta.models.core.BooleanField', [], {'default': 'False'}), + 'collector_selection': ('telemeta.models.core.CharField', [], {'default': "''", 'max_length': '250', 'blank': 'True'}), + 'comment': ('telemeta.models.core.TextField', [], {'default': "''", 'blank': 'True'}), + 'context_comment': ('telemeta.models.core.TextField', [], {'default': "''", 'blank': 'True'}), + 'copied_from_item': ('telemeta.models.core.WeakForeignKey', [], {'default': 'None', 'related_name': "'copies'", 'null': 'True', 'blank': 'True', 'to': "orm['telemeta.MediaItem']"}), + 'creator_reference': ('telemeta.models.core.CharField', [], {'default': "''", 'max_length': '250', 'blank': 'True'}), + 'cultural_area': ('telemeta.models.core.CharField', [], {'default': "''", 'max_length': '250', 'blank': 'True'}), + 'ethnic_group': ('telemeta.models.core.WeakForeignKey', [], {'default': 'None', 'related_name': "'items'", 'null': 'True', 'blank': 'True', 'to': "orm['telemeta.EthnicGroup']"}), + 'external_references': ('telemeta.models.core.TextField', [], {'default': "''", 'blank': 'True'}), + 'file': ('telemeta.models.core.FileField', [], {'default': "''", 'max_length': '100', 'db_column': "'filename'", 'blank': 'True'}), + 'generic_style': ('telemeta.models.core.WeakForeignKey', [], {'default': 'None', 'related_name': "'items'", 'null': 'True', 'blank': 'True', 'to': "orm['telemeta.GenericStyle']"}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'language': ('telemeta.models.core.CharField', [], {'default': "''", 'max_length': '250', 'blank': 'True'}), + 'language_iso': ('telemeta.models.core.ForeignKey', [], {'related_name': "'items'", 'on_delete': 'models.SET_NULL', 'default': 'None', 'to': "orm['telemeta.Language']", 'blank': 'True', 'null': 'True'}), + 'location': ('telemeta.models.core.WeakForeignKey', [], {'default': 'None', 'to': "orm['telemeta.Location']", 'null': 'True', 'blank': 'True'}), + 'location_comment': ('telemeta.models.core.CharField', [], {'default': "''", 'max_length': '250', 'blank': 'True'}), + 'moda_execut': ('telemeta.models.core.CharField', [], {'default': "''", 'max_length': '250', 'blank': 'True'}), + 'old_code': ('telemeta.models.core.CharField', [], {'default': "''", 'max_length': '250', 'blank': 'True'}), + 'public_access': ('telemeta.models.core.CharField', [], {'default': "'metadata'", 'max_length': '16', 'blank': 'True'}), + 'recorded_from_date': ('telemeta.models.core.DateField', [], {'default': 'None', 'null': 'True', 'blank': 'True'}), + 'recorded_to_date': ('telemeta.models.core.DateField', [], {'default': 'None', 'null': 'True', 'blank': 'True'}), + 'title': ('telemeta.models.core.CharField', [], {'default': "''", 'max_length': '250', 'blank': 'True'}), + 'track': ('telemeta.models.core.CharField', [], {'default': "''", 'max_length': '250', 'blank': 'True'}), + 'vernacular_style': ('telemeta.models.core.WeakForeignKey', [], {'default': 'None', 'related_name': "'items'", 'null': 'True', 'blank': 'True', 'to': "orm['telemeta.VernacularStyle']"}) + }, + 'telemeta.metadataauthor': { + 'Meta': {'ordering': "['value']", 'object_name': 'MetadataAuthor', 'db_table': "'metadata_authors'"}, + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'value': ('telemeta.models.core.CharField', [], {'unique': 'True', 'max_length': '250'}) + }, + 'telemeta.metadatawriter': { + 'Meta': {'ordering': "['value']", 'object_name': 'MetadataWriter', 'db_table': "'metadata_writers'"}, + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'value': ('telemeta.models.core.CharField', [], {'unique': 'True', 'max_length': '250'}) + }, + 'telemeta.physicalformat': { + 'Meta': {'ordering': "['value']", 'object_name': 'PhysicalFormat', 'db_table': "'physical_formats'"}, + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'value': ('telemeta.models.core.CharField', [], {'unique': 'True', 'max_length': '250'}) + }, + 'telemeta.publisher': { + 'Meta': {'ordering': "['value']", 'object_name': 'Publisher', 'db_table': "'publishers'"}, + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'value': ('telemeta.models.core.CharField', [], {'unique': 'True', 'max_length': '250'}) + }, + 'telemeta.publishercollection': { + 'Meta': {'ordering': "['value']", 'object_name': 'PublisherCollection', 'db_table': "'publisher_collections'"}, + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'publisher': ('telemeta.models.core.ForeignKey', [], {'related_name': "'publisher_collections'", 'to': "orm['telemeta.Publisher']"}), + 'value': ('telemeta.models.core.CharField', [], {'max_length': '250'}) + }, + 'telemeta.publishingstatus': { + 'Meta': {'ordering': "['value']", 'object_name': 'PublishingStatus', 'db_table': "'publishing_status'"}, + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'value': ('telemeta.models.core.CharField', [], {'unique': 'True', 'max_length': '250'}) + }, + 'telemeta.recordingcontext': { + 'Meta': {'ordering': "['value']", 'object_name': 'RecordingContext', 'db_table': "'recording_contexts'"}, + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'value': ('telemeta.models.core.CharField', [], {'unique': 'True', 'max_length': '250'}) + }, + 'telemeta.vernacularstyle': { + 'Meta': {'ordering': "['value']", 'object_name': 'VernacularStyle', 'db_table': "'vernacular_styles'"}, + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'value': ('telemeta.models.core.CharField', [], {'unique': 'True', 'max_length': '250'}) + } + } + + complete_apps = ['teleforma'] \ No newline at end of file diff --git a/teleforma/models.py b/teleforma/models.py index 7ca8f2dc..e8832803 100755 --- a/teleforma/models.py +++ b/teleforma/models.py @@ -49,6 +49,9 @@ from django.utils.translation import ugettext_lazy as _ from django.contrib.auth.models import User from django.core.exceptions import ValidationError from teleforma.fields import * +from django.contrib.contenttypes import generic +from notes.models import Note +import jqchat.models app_label = 'teleforma' @@ -115,6 +118,10 @@ class Course(Model): category = ForeignKey('Category', related_name='course', verbose_name=_('category')) type = ForeignKey('CourseType', related_name='course', verbose_name=_('course type')) code = CharField(_('code'), max_length=255) + chat_room = OneToOneField(jqchat.models.Room, help_text='Chat room to be used for this lobby.', + blank=True, null=True) + + notes = generic.GenericRelation(Note) def __unicode__(self): return ' - '.join([self.department.name, self.category.name, self.title, self.type.name]) @@ -186,6 +193,8 @@ class MediaBase(Model): date_added = DateTimeField(_('date added'), auto_now_add=True) date_modified = DateTimeField(_('date modified'), auto_now=True) + notes = generic.GenericRelation(Note) + def get_fields(self): return self._meta.fields @@ -239,6 +248,7 @@ class Media(MediaBase): verbose_name='item', blank=True, null=True) is_live = BooleanField(_('is live')) + def __unicode__(self): description = self.course.title if self.item: diff --git a/teleforma/templates/postman/base.html b/teleforma/templates/postman/base.html index d34d2fba..54e88b80 100644 --- a/teleforma/templates/postman/base.html +++ b/teleforma/templates/postman/base.html @@ -19,8 +19,8 @@ - diff --git a/teleforma/templates/postman/view.html b/teleforma/templates/postman/view.html index 56a1fd08..4e4899c1 100644 --- a/teleforma/templates/postman/view.html +++ b/teleforma/templates/postman/view.html @@ -17,7 +17,7 @@ {% if message.is_rejected %}
{% trans "Rejected" %}{% if message.moderation_reason %}{% trans ":" %} {{ message.moderation_reason }}{% endif %}
{% endif %}
-
{{ message.body|linebreaksbr }}
+
{{ message.body|urlize|linebreaksbr }}

{% if forloop.last %} diff --git a/teleforma/templates/teleforma/course_media.html b/teleforma/templates/teleforma/course_media.html index 2ff34b49..0efe8449 100644 --- a/teleforma/templates/teleforma/course_media.html +++ b/teleforma/templates/teleforma/course_media.html @@ -4,10 +4,19 @@ {% block extra_javascript %} + {% if "video" in mime_type %} - - + + {% endif %} + + + + {% endblock extra_javascript %} {% block course %} @@ -21,39 +30,55 @@ {% if "video" in mime_type %}
-
- {% elif "audio" in mime_type %} -
- {% endif %} -
- {% block general_info %} +
{% dl_field item "title" placeholder %} -
{% field_label item "collection" %}
-
{{ item.collection }}
+
{% field_label item "approx_duration" %}
+
{{ item.approx_duration }}
{% trans "Recording date" %}
-
{% if item.recorded_from_date %}{{ item.recorded_from_date }}{% endif %}{% if item.recorded_from_date and item.recorded_to_date%} - {% endif %}{% if item.recorded_to_date %}{{ item.recorded_to_date}}{% endif %}
-
+
{% endblock general_info %}
+{% endblock course %} - +{% block chat %} +{% if room %} + +
+ +
+

rss{% trans "Questions" %}

+
+
Loading...
+
{% csrf_token %} + +
+
+
+
-{% endblock course %} +
+
+ + + +{% endif %} +{% endblock chat %} diff --git a/teleforma/templates/teleforma/courses.html b/teleforma/templates/teleforma/courses.html index 5144f3c0..1fc6c6c0 100644 --- a/teleforma/templates/teleforma/courses.html +++ b/teleforma/templates/teleforma/courses.html @@ -8,9 +8,9 @@ {% block content %}
+

playlists{% trans "My courses" %}

-
    {% block courses %} @@ -21,13 +21,29 @@
+ +{% block notes %} +
+

playlists{% trans "My notes" %}

+
+
    +{% for note in notes %} +
  • {{ note.content }}
  • +{% endfor %} +
+
+
+ +{% endblock notes %} +
-
- {% block course %} +
+ {% block course %} {% for course in object_list %}
{{ course.title }}{% if course.description %} - {{ course.description }}{% endif %} @@ -52,15 +68,14 @@ {% endblock %}
- {% endfor %} {% endblock course %} -
+
+{% block chat %} +{% endblock chat %} - -
-{% endblock %} +{% endblock content %} diff --git a/teleforma/templates/teleforma/inc/document_list.html b/teleforma/templates/teleforma/inc/document_list.html index f5d010d8..79ccc43c 100644 --- a/teleforma/templates/teleforma/inc/document_list.html +++ b/teleforma/templates/teleforma/inc/document_list.html @@ -13,7 +13,7 @@ {% for document in course.document.all %} - {{ document.title }} + {{ document.title }} {{ document.description }} {{ document.date_added }} diff --git a/teleforma/templates/telemeta/base.html b/teleforma/templates/telemeta/base.html index 0214d9f3..edf7fc28 100644 --- a/teleforma/templates/telemeta/base.html +++ b/teleforma/templates/telemeta/base.html @@ -120,21 +120,23 @@ alt="Telemeta Powered"/>--> {% endblock header %}
- - - -

{% block title %}{% endblock %}

{% block title_buttons %}{% endblock %}
-{% block postman_menu %} -{% endblock postman_menu %} + + + +

{% block title %}{% endblock %}

{% block title_buttons %}{% endblock %}
-{% block content %}{% endblock %} -
-{% block delete %}{% endblock %} -
+ {% block postman_menu %} + {% endblock postman_menu %} + + {% block content %} + {% endblock %} -{% block body %} -{% endblock body %} +
+ {% block delete %} + {% endblock %} + + {% block footer %}