]> git.parisson.com Git - teleforma.git/commitdiff
WIP
authorYoan Le Clanche <yoanl@pilotsystems.net>
Tue, 5 May 2020 08:40:45 +0000 (10:40 +0200)
committerYoan Le Clanche <yoanl@pilotsystems.net>
Tue, 5 May 2020 08:40:45 +0000 (10:40 +0200)
teleforma/models/core.py
teleforma/templates/teleforma/course_webclass.html
teleforma/views/core.py
teleforma/views/pro.py

index 5e897b218a9ee4bb8d763fb1dfbb68855849ba46..784b9f04ad09f483bb376049dca29dd61cdd33f6 100644 (file)
@@ -536,11 +536,10 @@ class WebclassMixin(Model):
         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,
@@ -553,7 +552,7 @@ class WebclassMixin(Model):
             }
             
             try:
-                result = bbb.create_meeting(self.slug+'2', params=params)
+                result = bbb.create_meeting(meeting_id, params=params)
             except BigBlueButton.BBBException:
                 raise
 
@@ -562,14 +561,24 @@ class WebclassMixin(Model):
             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)
 
 
 
index 318fb445ee350b89d9de6245517558b07a05b8e7..a154f53774c9a77921f1c99c1674891eb47d3d51 100644 (file)
@@ -3,6 +3,27 @@
 {% 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">&nbsp;{% 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>
index c2fc5df1d8b95bb0bab5ee65a41e3e22f4c92567..0f4ec004418feda5080a02b5c142d4a9405acd99 100644 (file)
@@ -446,30 +446,33 @@ class ConferenceView(DetailView):
     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')
index f93dfacd6b7bfcd3716aadf12520dc0ffb8ab02e..d521c73e1142b84728e45ba6c82ee6bb6615cade 100644 (file)
@@ -168,6 +168,7 @@ class SeminarRevisionMixin(object):
 
     @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)