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):
'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:
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')
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
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",
<div style="float: right; font-size: 0.9em;">
<a href="{% url teleforma-conference-audio period.id conference.id %}" class="component_icon button icon_speaker"> {% 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>
</div>
{% endblock course %}
-
{% endif %}
{% endif %}
{% endif %}
-{% endblock chat %}
\ No newline at end of file
+{% endblock chat %}
{% 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 %}
{% 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 %}
<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 %}
room = rooms[0]
return room
+
def get_access(obj, courses):
access = False
for course in courses:
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)
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'])
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'
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'