]> git.parisson.com Git - teleforma.git/commitdiff
Add WebClass, add Training.parent
authorGuillaume Pellerin <guillaume.pellerin@ircam.fr>
Mon, 24 Apr 2017 12:17:11 +0000 (14:17 +0200)
committerGuillaume Pellerin <guillaume.pellerin@ircam.fr>
Mon, 24 Apr 2017 12:17:11 +0000 (14:17 +0200)
teleforma/models/core.py
teleforma/models/crfpa.py
teleforma/templates/teleforma/course_conference.html
teleforma/templates/teleforma/course_detail.html
teleforma/templates/teleforma/course_media.html
teleforma/views/core.py

index a6a92d60561851e1055203e9d8f9bcd38add4102..d6169320ab142834b132efa70511e4bf8811277e 100644 (file)
@@ -294,6 +294,8 @@ class Conference(Model):
     readers         = models.ManyToManyField(User, related_name="conference", verbose_name=_('readers'),
                                         blank=True, null=True)
     status          = models.IntegerField(_('status'), choices=STATUS_CHOICES, default=2)
+    web_class_group = models.ForeignKey('WebClassGroup', related_name='conferences', verbose_name=_('web class group'),
+                             blank=True, null=True, on_delete=models.SET_NULL)
 
     @property
     def description(self):
@@ -356,6 +358,7 @@ class Conference(Model):
                 'streams': [],
                 'date_begin': self.date_begin.strftime('%Y %m %d %H %M %S') if self.date_begin else 'None',
                 'date_end': self.date_end.strftime('%Y %m %d %H %M %S') if self.date_end else 'None',
+                'web_class_group': self.web_class_group.name if self.web_class_group else 'None',
                  }
 
         if self.room:
@@ -410,6 +413,11 @@ class Conference(Model):
             self.room, c = Room.objects.get_or_create(name=data['room'],
                                                    organization=organization)
 
+        if 'web_class_group' in data:
+            if data['web_class_group'] != 'None':
+                self.web_class_group = WebClassGroup.objet.get(name=data['web_class_group'])
+
+
     class Meta(MetaCore):
         db_table = app_label + '_' + 'conference'
         verbose_name = _('conference')
index a298e649d69a850088725c8f7a8a517056fd2fc6..87435c0dcc95103b25f78edce428fe4c3be326ba 100644 (file)
@@ -42,8 +42,8 @@ from teleforma.models.core import *
 
 class IEJ(Model):
 
-    name            = models.CharField(_('name'), max_length=255)
-    description     = models.CharField(_('description'), max_length=255, blank=True)
+    name = models.CharField(_('name'), max_length=255)
+    description = models.CharField(_('description'), max_length=255, blank=True)
 
     def __unicode__(self):
         return self.name
@@ -55,12 +55,31 @@ class IEJ(Model):
         ordering = ['name']
 
 
+class WebClassGroup(modles.Model):
+
+    name = models.CharField(_('name'), max_length=255)
+    iejs = models.ManyToManyField('IEJ', related_name="web_class_group", verbose_name=_('IEJ'),
+                                        blank=True, null=True)
+
+    class Meta(MetaCore):
+        verbose_name = _('web class group')
+        verbose_name_plural = _('web class group')
+        ordering = ['name']
+
+    def to_json_dict(self):
+        data = {'name': self.name,
+                'iejs': [iej.name for iej in self.iejs.all()],
+                 }
+        return data
+
+
 class Training(Model):
 
     code = models.CharField(_('code'), max_length=255)
     name = models.CharField(_('name'), max_length=255, blank=True)
     description = models.CharField(_('description'), max_length=512, blank=True)
     period = models.ForeignKey('Period', related_name='training', verbose_name=_('period'), blank=True, null=True)
+    parent = models.ForeignKey('Training', related_name='parent', verbose_name=_('children'), blank=True, null=True)
     synthesis_note  = models.ManyToManyField('CourseType', related_name="training_synthesis_note", verbose_name=_('synthesis note'),
                                         blank=True, null=True)
     obligation = models.ManyToManyField('CourseType', related_name="training_obligation",
index bbdd17edc3139864465af7465618b7d72d3ec7c9..99a0c5273fd9153039c2d4ddaa15dbbed4ddacff 100644 (file)
     <div style="float: right; font-size: 0.9em;">
         <a href="{% url teleforma-conference-audio period.id conference.id %}" class="component_icon button icon_speaker">&nbsp;{% trans "Audio" %}</a>
     </div>
-
-<a href="{% url teleforma-desk-period-course period.id course.id %}" style="color: #000;">{{ course.title }}</a> - {{ type }} - {% trans "Session" %} {{ conference.session }}
-
+    <a href="{% url teleforma-desk-period-course period.id course.id %}" style="color: #000;">{{ course.title }}</a> - {{ type }} - {% trans "Session" %} {{ conference.session }}
 </div>
 
 <div class="media">
+
 {% if access_error %}
   <p>{{ access_error }}</p>
   <p>{{ message }}</p>
-
 {% else %}
-
-{% for livestream in livestreams %}
-{% if "webm" == livestream.stream_type %}
-<div class="video">
-<video width="864" height="480" controls autoplay preload="auto">
-<!-- Hello Chrome and Firefox (and Opera?) -->
-<source src="{{ livestream.url|get_host:host }}" type="video/webm" />
-</video>
-</div>
+    {% for livestream in livestreams %}
+        {% if "webm" == livestream.stream_type %}
+            <div class="video">
+                <video id="video" width="864" height="480" controls autoplay preload="auto">
+                    <source src="{{ livestream.url|get_host:host }}" type="video/webm" />
+                </video>
+            </div>
+        {% endif %}
+    {% endfor %}
 {% endif %}
-{% endfor %}
 
-{% endif %}
 </div>
 
 {% block general_info %}
 <dl class="listing">
 
 {% if conference.professor %}
-<dt>{% trans "Course" %}</dt><dd><a href="{% url teleforma-desk-period-course period.id course.id %}">{{ conference.course.title }} - {{ conference.course_type }}</a></dd>
-<dt>{% trans "Session" %}</dt><dd>{{ conference.session }}</dd>
-<dt>{% trans "Professor" %}</dt>
-    <dd><a href="{% url telemeta-profile-detail conference.professor.user.username %}" target="_blank">{{ conference.professor }}</a></dd>
+    <dt>{% trans "Course" %}</dt><dd><a href="{% url teleforma-desk-period-course period.id course.id %}">{{ conference.course.title }} - {{ conference.course_type }}</a></dd>
+    <dt>{% trans "Session" %}</dt><dd>{{ conference.session }}</dd>
+    <dt>{% trans "Professor" %}</dt>
+        <dd><a href="{% url telemeta-profile-detail conference.professor.user.username %}" target="_blank">{{ conference.professor }}</a></dd>
 {% endif %}
+
 {% if conference.comment %}<dt>{% trans "Comment" %}</dt><dd>{{ conference.comment }}</dd>{% endif %}
-<dt>{% trans "Begin date" %}</dt><dd>{{ conference.date_begin }}</dd>
-{% if conference.date_end %}<dt>{% trans "End date" %}</dt><dd>{{ conference.date_end|yes_no }}</dd>{% endif %}
-<dt>{% trans "Live" %}</dt><dd>{% trans "Yes" %}</dd>
-{% if conference.room %}<dt>{% trans "Room" %}</dt><dd>{{ conference.room }}</dd>{% endif %}
-{% if user.is_staff or user.is_superuser %}
-<dt>{% trans "Conference ID" %}</dt><dd>{{ conference.public_id }}</dd>
+    <dt>{% trans "Begin date" %}</dt><dd>{{ conference.date_begin }}</dd>
+    {% if conference.date_end %}<dt>{% trans "End date" %}</dt><dd>{{ conference.date_end|yes_no }}</dd>{% endif %}
+    <dt>{% trans "Live" %}</dt><dd>{% trans "Yes" %}</dd>
+    {% if conference.room %}<dt>{% trans "Room" %}</dt><dd>{{ conference.room }}</dd>{% endif %}
+    {% if user.is_staff or user.is_superuser %}
+    <dt>{% trans "Conference ID" %}</dt><dd>{{ conference.public_id }}</dd>
 {% endif %}
 
 </dl>
@@ -87,4 +84,3 @@
 
 </div>
 {% endblock course %}
-
index 07ae0873dcaa061dfb2ec015bf18637615869414..fe86cb0cb0e7a382a94f12efc050df1a282e5f89 100644 (file)
@@ -63,4 +63,4 @@ $(document).ready(function(){
  {% endif %}
 {% endif %}
 {% endif %}
-{% endblock chat %}
\ No newline at end of file
+{% endblock chat %}
index 2f0ae74477701b51baa79ef13b726eec6e5ca24b..8eeabde36911104ad7e622a3deca9199368011cb 100644 (file)
@@ -96,15 +96,16 @@ $(document).ready(function(){
 
 {% if "video" in media.mime_type %}
 <div class="video">
-<video id="my_video_1" class="video-js vjs-default-skin" width="864" height="480" controls preload="auto" data-setup='{}' {% if media.item.related.all %}{% for related in media.item.related.all %}{% if related.title == "preview" %}{% thumbnail related.file "640" as im %}poster="{{ im.url }}"{% endthumbnail %}{% endif %}{% endfor %}{% endif %}>
-<source src="{{ MEDIA_URL }}{{ media.item.file }}" type="{{ media.mime_type }}" />
-</video>
+    <video id="my_video_1" class="video-js vjs-default-skin" width="864" height="480" controls preload="auto" data-setup='{}' {% if media.item.related.all %}{% for related in media.item.related.all %}{% if related.title == "preview" %}{% thumbnail related.file "640" as im %}poster="{{ im.url }}"{% endthumbnail %}{% endif %}{% endfor %}{% endif %}>
+        <source src="{{ MEDIA_URL }}{{ media.item.file }}" type="{{ media.mime_type }}" />
+    </video>
 </div>
 
 {% elif "audio" in media.mime_type %}
 
 <div style="margin-top:1em;">
 {% if media.item.related.all %}
+
  {% for related in media.item.related.all %}
   {% if related.title == "preview" %}
    {% thumbnail related.file "300" as im %}
@@ -112,14 +113,16 @@ $(document).ready(function(){
    {% endthumbnail %}
   {% endif %}
  {% endfor %}
+
 {% else %}
  snapshot
 {% endif %}
+
 </div>
 <div class="audio">
-<audio controls preload="auto">
-<source src="{{ MEDIA_URL }}{{ media.item.file }}" type="{{ media.mime_type }}" />
-</audio>
+    <audio controls preload="auto">
+        <source src="{{ MEDIA_URL }}{{ media.item.file }}" type="{{ media.mime_type }}" />
+    </audio>
 </div>
 {% endif %}
 
@@ -147,6 +150,7 @@ $(document).ready(function(){
 <dt>{% trans "Date modified" %}</dt><dd>{{ media.date_modified }}</dd>
 <dt>{% trans "Media ID" %}</dt><dd>{{ media.id }}</dd>
 <dt>{% trans "Conference ID" %}</dt><dd>{{ media.conference.public_id }}</dd>
+<dt>{% trans "Web class group" %}</dt><dd>{{ media.conference.web_class_group }}</dd>
 {% endif %}
 {% endif %}
 
index 380e5d4f1884008c542758394382fccc5829b746..cb18088aef3f2c167f4621a1f8f60152ec762add 100644 (file)
@@ -145,6 +145,7 @@ def get_room(content_type=None, id=None, name=None, period=None):
         room = rooms[0]
     return room
 
+
 def get_access(obj, courses):
     access = False
     for course in courses:
@@ -394,7 +395,12 @@ class MediaView(CourseAccessMixin, DetailView):
         context['type'] = media.course_type
         # context['notes'] = media.notes.all().filter(author=self.request.user)
         content_type = ContentType.objects.get(app_label="teleforma", model="course")
-        context['room'] = get_room(name=media.course.code,period=context['period'].name,
+
+        room_name = media.course.code
+        if media.conference.web_class_group:
+            room_name += '_' + media.conference.public_id
+
+        context['room'] = get_room(name=room_name,period=context['period'].name,
                                    content_type=content_type,
                                    id=media.course.id)
 
@@ -527,9 +533,15 @@ class ConferenceView(CourseAccessMixin, DetailView):
         context['type'] = conference.course_type
         # context['notes'] = conference.notes.all().filter(author=self.request.user)
         content_type = ContentType.objects.get(app_label="teleforma", model="course")
-        context['room'] = get_room(name=conference.course.code, period=context['period'].name,
+
+        room_name = conference.course.code
+        if conference.web_class_group:
+            room_name += '_' + conference.public_id
+
+        context['room'] = get_room(name=room_name, period=context['period'].name,
                                    content_type=content_type,
                                    id=conference.course.id)
+
         context['livestreams'] = conference.livestream.all()
         context['host'] = get_host(self.request)
         access = get_access(conference, context['all_courses'])
@@ -709,10 +721,12 @@ class ConferenceRecordView(FormView):
                     stream = LiveStream(conference=conference, server=server,
                                         stream_type=stream_type, streaming=True)
                     stream.save()
-                try:
-                    live_message(conference)
-                except:
-                    pass
+
+                if not conference.web_class_group:
+                    try:
+                        live_message(conference)
+                    except:
+                        pass
         else:
             raise 'Error : input must be a conference dictionnary'
 
@@ -753,6 +767,25 @@ class ProfessorListView(View):
             professor.save()
 
 
+class WebClassGroupView(View):
+
+    @jsonrpc_method('teleforma.get_web_class_group_list')
+    def get_web_class_group_list(request):
+        web_class_groups = WebClassGroup.objects.all()
+        return [w.to_json_dict() for w in web_class_groups]
+
+    def pull(request, host=None):
+        if host:
+            url = 'http://' + host + '/json/'
+        else:
+            url = 'http://' + settings.TELECASTER_MASTER_SERVER + '/json/'
+        s = ServiceProxy(url)
+
+        remote_list = s.teleforma.get_web_class_group_list()
+        for web_class_group_dict in remote_list['result']:
+            web_class_group, c = WebClassGroup.objects.get_or_create(name=web_class_group_dict['name'])
+
+
 class HelpView(TemplateView):
 
     template_name='teleforma/help.html'