abstract = True
def create_webclass_room(self):
- """ """
- if not self.webclass_id:
- meeting_id = self.slug + "-" + self.period
- # TODO : generate password
- password = 'pw'
+ """ create a BBB room and generate meeting id and moderator password """
+ if not self.webclass_id and self.webclass:
+ meeting_id = self.slug + "-" + str(self.period)
+ password = User.objects.make_random_password()
params = {
'moderatorPW':password,
# 'maxParticipants':self.webclass_max_participants + 1,
}
try:
- result = bbb.create_meeting(self.slug+'2', params=params)
+ result = bbb.create_meeting(meeting_id, params=params)
except BigBlueButton.BBBException:
raise
self.webclass_password = password
- def join_webclass(self, username):
- """ """
- print(bbb.get_join_meeting_url('user','fake2', 'pw'))
-
- def get_webclass_info(self):
- """ """
- info = bbb.get_meeting_info(self.webclass_id)
- import pdb;pdb.set_trace()
+ def get_join_webclass_url(self, request):
+ """
+ Get url to BBB meeting.
+ If user are professor or staff, provide the url with the moderator password
+ """
+ username = request.user.get_full_name()
+ is_professor = len(request.user.professor.all()) >= 1
+ is_staff = request.user.is_staff
+ password = (is_professor or is_staff) and self.webclass_password or ""
+ return bbb.get_join_meeting_url(username, self.webclass_id, password)
+
+ def is_webclass_running(self):
+ """ Is webclass currently running ? """
+ return bbb.is_meeting_running(self.webclass_id).get_field('running').decode() == 'true' or False
+
+ # def get_webclass_info(self):
+ # """ """
+ # return bbb.get_meeting_info(self.webclass_id)
{% load teleforma_tags %}
{% load i18n %}
+
+{% block infra_javascript %}
+
+<script type="text/javascript">
+{% if show_record %}
+$(document).ready(function(){
+ json(['{{seminar.id}}','{{user.username}}'],'teleforma.seminar_load', function(){return null;});
+});
+
+$(window).ready(function(){
+ $(window).bind('beforeunload', function(){
+ console.log('unload')
+ json_sync(['{{seminar.id}}','{{user.username}}'],'teleforma.seminar_unload',function(){return null;});
+ });
+});
+{% endif %}
+</script>
+
+{% endblock infra_javascript %}
+
+
{% block module-action %}
{% get_telecaster as telecaster %}
{% if telecaster %}
<div class="course_media">
<div class="course_title">
- <div style="float: right; font-size: 0.9em;">
- <a href="{% url teleforma-conference-audio conference.id %}" class="component_icon button icon_speaker"> {% trans "Audio" %}</a>
- </div>
-
-<a href="{% url teleforma-course-detail course.id %}" style="color: #000;">{{ course.title }}</a>{% if type.name != "None" %} - {{ type }}{% endif %}{% if conference.session %} - {% trans "Session" %} {{ conference.session }}{% endif %}
-
+ <a href="{% url teleforma-course-detail course.id %}" style="color: #000;">
+ {{ course.title }}
+ </a>{% if type.name != "None" %} - {{ type }}{% endif %}{% if conference.session %} - {% trans "Session" %} {{ conference.session }}{% endif %}
</div>
-<div class="media">
-{% for livestream in livestreams %}
-{% if "webm" == livestream.stream_type %}
-<div class="video">
-<video width="640" height="360" controls autoplay preload="auto">
-<!-- Hello Chrome and Firefox (and Opera?) -->
-<source src="{{ livestream.url }}" type="video/webm" />
-</video>
-</div>
-{% endif %}
-{% endfor %}
+Rejoindre la webclasse : <a href="{{ webclass_url }}">webclass_url</a>
+<div class="media">
+<!-- include iframe -->
</div>
{% block general_info %}
{% 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 conference.date_end %}<dt>{% trans "End date" %}</dt><dd>{{ conference.date_end }}</dd>{% endif %}
+<dt>{% trans "Live" %}</dt><dd>{% if is_webclass_running %}{% trans "Yes" %}{% else %}{% trans "No" %}{% endif %}</dd>
+{% comment %} {% if conference.room %}<dt>{% trans "Room" %}</dt><dd>{{ conference.room }}</dd>{% endif %} {% endcomment %}
{% if user.is_staff or user.is_superuser %}
-<dt>{% trans "Conference ID" %}</dt><dd>{{ conference.public_id }}</dd>
+<dt>{% trans "Conference ID" %}</dt><dd>{{ conference.webclass_id }}</dd>
{% endif %}
</dl>
def get_context_data(self, **kwargs):
context = super(ConferenceView, self).get_context_data(**kwargs)
conference = self.get_object()
- if conference.webclass:
- webclass_info = conference.get_webclass_info()
- context.update(webclass_info)
+ if conference.webclass:
+ context['is_webclass_running'] = conference.is_webclass_running()
+ context['webclass_url'] = conference.get_join_webclass_url(self.request)
+ context['show_record'] = True
+ context['seminar'] = conference.seminar.all()[0]
else:
- all_courses = get_courses(self.request.user)
- context['all_courses'] = all_courses
- context['course'] = conference.course
- context['type'] = conference.course_type
- context['notes'] = conference.notes.all().filter(author=self.request.user)
content_type = ContentType.objects.get(app_label="teleforma", model="conference")
- if settings.TELEFORMA_GLOBAL_TWEETER:
- context['room'] = get_room(name='site')
- else:
- context['room'] = get_room(name=conference.course.title, content_type=content_type,
- id=conference.id)
context['livestreams'] = conference.livestream.all()
context['host'] = get_host(self.request)
access = get_course_access(conference, all_courses)
if not access:
context['access_error'] = access_error
context['message'] = contact_message
- context['periods'] = get_periods(self.request.user)
- context['conferences'] = all_conferences(self.request)
+
+ all_courses = get_courses(self.request.user)
+ context['all_courses'] = all_courses
+ context['notes'] = conference.notes.all().filter(author=self.request.user)
+ context['type'] = conference.course_type
+ context['course'] = conference.course
+ context['periods'] = get_periods(self.request.user)
+ context['conferences'] = all_conferences(self.request)
+ if settings.TELEFORMA_GLOBAL_TWEETER:
+ context['room'] = get_room(name='site')
+ else:
+ context['room'] = get_room(name=conference.course.title, content_type=content_type,
+ id=conference.id)
return context
@jsonrpc_method('teleforma.stop_conference')
@jsonrpc_method('teleforma.seminar_unload')
def seminar_unload(request, id, username):
+ import pdb;pdb.set_trace()
seminar = Seminar.objects.get(id=id)
user = User.objects.get(username=username)
all_revisions = SeminarRevision.objects.filter(user=user, date__gte=REVISION_DATE_FILTER, date_modified=None)