]> git.parisson.com Git - teleforma.git/commitdiff
WIP for Webclass by Yoan webclasse-pb
authorGael Le Mignot <gael@pilotsystems.net>
Mon, 1 Jun 2020 07:39:39 +0000 (09:39 +0200)
committerGael Le Mignot <gael@pilotsystems.net>
Mon, 1 Jun 2020 07:39:39 +0000 (09:39 +0200)
teleforma/context_processors.py
teleforma/models/core.py
teleforma/static/teleforma/css/bbb.css [new file with mode: 0644]
teleforma/templates/teleforma/course_webclass.html
teleforma/templates/teleforma/inc/webclass.html [new file with mode: 0644]
teleforma/templates/teleforma/seminar_detail.html
teleforma/views/core.py

index 32383816d812ee3c0660c9f5e53946507f2356c0..2b210929fc48ca95296827862b35e7a74907721b 100644 (file)
@@ -62,10 +62,15 @@ def seminar_progress(user, seminar, more=False):
             'obj': seminar.docs_correct,
             'step': '5'
         }]
+    if seminar.conference and seminar.conference.webclass:
+        objects[2]['obj'] = seminar.conference
     for item in objects:
         obj = item['obj']
         step = item['step']
-        for item in obj.all():
+        items = [obj]
+        if hasattr(obj, 'all'):
+            items = obj.all()
+        for item in items:
             if item.weight:
                 total += item.weight
                 if user in item.readers.all():
index cd0d0b85f4e368389f89b731e62130cb66b63155..5b8a1a9fda31d830aa6026030626d3fb55f95f94 100755 (executable)
@@ -54,6 +54,7 @@ from django.utils.translation import ugettext_lazy as _
 from django.contrib.auth.models import User
 from django.core.exceptions import ValidationError
 from django.contrib.contenttypes import generic
+from django.contrib.sites.models import Site
 from notes.models import Note
 import jqchat.models
 from django.core.paginator import InvalidPage, EmptyPage
@@ -539,6 +540,10 @@ class WebclassMixin(Model):
     class Meta(MetaCore):
         abstract = True
 
+    @property
+    def weight(self):
+        return 50
+
     def prepare_webclass(self):
         """
         generate room id and moderator password 
@@ -551,25 +556,32 @@ class WebclassMixin(Model):
             self.webclass_password = password
 
 
-    def create_webclass_room(self):
+    def create_webclass_room(self, request):
         """ create a BBB room and generate meeting id and moderator password """
         if self.webclass_id and self.webclass:
             try:
                 # check if meeting already exists
                 self.get_webclass_info()
             except BBBException:
+                year = datetime.datetime.now().year
+                # site_url = 'https://' + request.get_host()
                 params = {
                     'moderatorPW':self.webclass_password,
                     'attendeePW':'pwattendee',
                     # 'maxParticipants':self.webclass_max_participants + 1,
-                    'welcome':"Bienvenue sur la conférence \"%s\"." % (self.title.encode('utf-8'),),
+                    'welcome':"Pro-Barreau : Bienvenue sur la conférence \"%s\"." % (self.title.encode('utf-8'),),
                     'record':True,
                     # 'autoStartRecording':True,
                     'muteOnStart':True,
                     'allowModsToUnmuteUsers':True,
+                    'logo':'https://www.pro-barreau.com/static/img/logo_probarreau.png',
+                    'copyright': "© %d Pro-Barreau" % year,
                     # 'guestPolicy':'ALWAYS_ACCEPT'
+                    'bannerText': "Pro-Barreau",
+                    'bannerColor': "#003768",
+                    # 'customStyleUrl': site_url+"/static/teleforma/css/bbb.css"
                 }
-             
+                print params
                 try:
                     result = bbb.create_meeting(self.webclass_id, params=params)
                     register_web_hook()
@@ -578,12 +590,12 @@ class WebclassMixin(Model):
                     raise
             
     
-    def get_join_webclass_url(self, user, username=None):
+    def get_join_webclass_url(self, request, user, username=None):
         """ 
         Get url to BBB meeting.
         If user are professor or staff, provide the url with the moderator password
         """
-        self.create_webclass_room()
+        self.create_webclass_room(request)
         username = user.get_full_name()
         is_professor = len(user.professor.all()) >= 1
         is_staff = user.is_staff or user.is_superuser
@@ -591,7 +603,6 @@ class WebclassMixin(Model):
         if is_professor or is_staff:
             password = self.webclass_password
         params = {'userID': user.username}
-        print(bbb.get_join_meeting_url(username, self.webclass_id, password, params))
         return bbb.get_join_meeting_url(username, self.webclass_id, password, params)
 
     def get_fake_join_webclass_url(self, username):
@@ -658,6 +669,14 @@ class WebclassMixin(Model):
             return auditors < self.webclass_max_participants
         return True
     
+    @property
+    def webclass_duration(self):
+        if self.webclass_hours_complementary:
+            seconds = self.duration.as_seconds() - self.webclass_hours_complementary.as_seconds()
+        else:
+            seconds = self.duration.as_seconds()
+        return datetime.timedelta(seconds=seconds)
+
     # def clean(self):
     #     if self.start_date > self.end_date::
     #         raise ValidationError("Dates are incorrect")
@@ -799,6 +818,12 @@ class Conference(Displayable, WebclassMixin):
     def suggestions(self):
         return (list(self.suggested_seminars.all()) + list(self.suggested_conferences.all()))[:3]
 
+    def set_as_read(self, user):
+        """ set as read for user """
+        if user not in self.readers.all():
+            self.readers.add(user)
+            self.save()
+
     class Meta(MetaCore):
         db_table = app_label + '_' + 'conference'
         verbose_name = _('conference')
diff --git a/teleforma/static/teleforma/css/bbb.css b/teleforma/static/teleforma/css/bbb.css
new file mode 100644 (file)
index 0000000..a92fb6b
--- /dev/null
@@ -0,0 +1,3 @@
+body {
+    background-color:red;
+}
\ No newline at end of file
index 74268c72f7598712ffbe575fba463a5698812dc9..3d4469619abaed6c900da6373b6ff89512089df2 100644 (file)
 
 {% if webclass_status == 'past' %}
     {% if record %}
-        <p>La conférence est terminée, vous pouvez la revoir ci-dessous.
+        <p>La conférence est terminée, vous pouvez la revoir ci-dessous.</p>
         <a href="{% url teleforma-conference-webclass-record conference.id%}" class="conference-big-button component_icon button icon_next">Voir l'enregistrement</a>
     {% else %}
-        <p>La conférence est terminée. L'enregistrement n'est pas encore ligne.
+        <p>La conférence est terminée. L'enregistrement n'est pas encore ligne.</p>
     {% endif %}
 {% elif webclass_status == 'ingoing' %}
     <p>La conférence est en cours.</p>
     <a href="{% url teleforma-conference-join conference.id %}" target="_blank" class="conference-big-button component_icon button icon_next">Cliquez ici pour rejoindre la conférence</a>
 {% elif webclass_status == 'almost' %}
-    <p>La conférence va bientôt démarrer. </p>
-    <a href="{% url teleforma-conference-join conference.id %}" target="_blank" class="conference-big-buttoncomponent_icon button icon_next">Cliquez ici pour rejoindre la conférence</a>
+    <p>Le salon « Pro-Barreau Live » est accessible.</p>
+    <a href="{% url teleforma-conference-join conference.id %}" target="_blank" class="conference-big-button component_icon button icon_next">Cliquez ici pour rejoindre la conférence</a>
 {% elif webclass_status == 'future' %}
-    <p>La conférence est prévue pour le {{ conference.date_begin }}. Revenez ici à ce moment là pour pouvoir la rejoindre.</p>
+    <p>
+        Votre Webconférence débutera le <strong>{{ conference.date_begin|date:"d/m/Y" }} à {{ conference.date_begin|time:"H\hi" }}</strong>. 
+        Vous pourrez accéder au salon « Pro-Barreau Live » dès {{ begin_minus_1_hour|time:"H\hi" }} en cliquant sur le lien qui apparaitra ci-dessous.
+    </p>
 {% endif %}
 
 
 {% if user.is_superuser %}
 <div style="border:1px solid grey">
-<h3>Liens de test</h3>
+<h3>Liens d'invitation</h3>
 <p>
-Utilisateur courant : <a href="{% url teleforma-conference-join conference.id %}" target="_blank">Cliquez ici pour rejoindre la conférence en tant que <strong>{{ request.user.username }}</strong></a>
+Se connecter en tant qu'admin : <a href="{% url teleforma-conference-join conference.id %}" target="_blank">Cliquez ici pour rejoindre la conférence en tant que <strong>{{ request.user.username }}</strong></a>
 </p>
 <ul>
 {% for i in range %}
-<li><a href="{% url teleforma-conference-join conference.id %}?username=test{{i}}" target="_blank">Cliquez ici pour rejoindre la conférence en tant que <strong>test{{i}}</strong></a></li>
+<li><a href="{% url teleforma-conference-join conference.id %}?username=utilisateur{{i}}" target="_blank">Cliquez ici pour rejoindre la conférence en tant que <strong>utilisateur{{i}}</strong></a></li>
 {% endfor %}
 </ul>
 </div>
@@ -70,6 +73,7 @@ Utilisateur courant : <a href="{% url teleforma-conference-join conference.id %}
 <dt>{% trans "Begin date" %}</dt><dd>{{ conference.date_begin }}</dd>
 {% if conference.date_end %}<dt>{% trans "End date" %}</dt><dd>{{ conference.date_end }}</dd>{% endif %}
 {% comment %} <dt>{% trans "Live" %}</dt><dd>{% if is_webclass_running %}{% trans "Yes" %}{% else %}{% trans "No" %}{% endif %}</dd> {% endcomment %}
+<dt>{% trans "Duration" %}</dt><dd>{{ conference.webclass_duration|hours }} {% trans "hours" %}</dd>
 <dt>{% trans "Live" %}</dt><dd>{% trans "Yes" %}</dd>
 {% comment %} {% if conference.room %}<dt>{% trans "Room" %}</dt><dd>{{ conference.room }}</dd>{% endif %} {% endcomment %}
 {% if user.is_staff or user.is_superuser %}
diff --git a/teleforma/templates/teleforma/inc/webclass.html b/teleforma/templates/teleforma/inc/webclass.html
new file mode 100644 (file)
index 0000000..01e6ff0
--- /dev/null
@@ -0,0 +1,20 @@
+{% load teleforma_tags %}
+{% load thumbnail %}
+{% load i18n %}
+
+<table class="listing" width="100%">
+    <tbody>
+          <tr>
+          <td class="border-top" width="90%">
+            <a href="{% url teleforma-conference-detail webclass.id %}">Voir la conférence</a>  
+          </td>
+          <td class="border-top" width="10%" align="center">
+            {% if user in webclass.readers.all %}
+              <img src="{{ STATIC_URL }}telemeta/images/ok.png" style="vertical-align:middle" alt="" title="{% trans ' viewed' %}" />
+            {% else %}
+              <img src="{{ STATIC_URL }}telemeta/images/delete.png" style="vertical-align:middle" alt="" title="{% trans ' not viewed yet' %}" />
+            {% endif %}
+          </td>
+          </tr>
+    </tbody>
+</table>
index 003eafb039fda1892b01aaae33440bee11183447..b30114d11a8864f80f7078d4c9ba2672f4bc6c2a 100644 (file)
@@ -138,14 +138,27 @@ $(window).ready(function( ){
        </div>
       {% endwith %}
 
-      {% with seminar.medias as medias %}
-       <div class="course_content">
-        <div class="course_subtitle">
-          <h3><img src="{{ STATIC_URL }}/telemeta/images/item_title.png" width="10px" alt="" /> {% trans "Step" %} 2 : {% if medias.all.count > 1 %}{% trans "view these conferences" %}{% else %}{% trans "view this conference" %}{% endif %}</h3>
+      {% if seminar.conference.webclass %} 
+        {% with seminar.conference as webclass %}
+        <div class="course_content">
+          <div class="course_subtitle">
+            <h3><img src="{{ STATIC_URL }}/telemeta/images/item_title.png" width="10px" alt="" /> {% trans "Step" %} 2 : {% trans "view this conference" %}</h3>
+          </div>
+          {% include "teleforma/inc/webclass.html" %}
         </div>
-        {% include "teleforma/inc/media_package_list.html" %}
-       </div>
-      {% endwith %}
+        {% endwith %}
+      {% else %}
+        {% with seminar.medias as medias %}
+        <div class="course_content">
+          <div class="course_subtitle">
+            <h3><img src="{{ STATIC_URL }}/telemeta/images/item_title.png" width="10px" alt="" /> {% trans "Step" %} 2 : {% if medias.all.count > 1 %}{% trans "view these conferences" %}{% else %}{% trans "view this conference" %}{% endif %}</h3>
+          </div>
+          {% include "teleforma/inc/media_package_list.html" %}
+        </div>
+        {% endwith %}
+      {% endif %}
+
+
 
       {% if seminar.quiz %}
       <div class="course_content">
index 787f560e8023f226dffd3aa307adc820e5f67c40..e5d3561c1b43d75573f02e27dc3c1344f1aab2f5 100644 (file)
@@ -67,6 +67,7 @@ from django.contrib.auth.forms import UserChangeForm
 from django.core.exceptions import ObjectDoesNotExist
 from django.contrib.syndication.views import Feed
 from django.core.paginator import Paginator
+from django.core.urlresolvers import resolve
 from django.contrib.auth.decorators import login_required
 from django.contrib.contenttypes.models import ContentType
 from django.views.generic.edit import FormView
@@ -462,20 +463,28 @@ class ConferenceView(DetailView):
             webclass_status = ""
 
             now = datetime.datetime.now()
-            if conference.date_begin - timedelta(hours=1) > now:
+
+            begin_minus_1_hour = conference.date_begin - timedelta(hours=1)
+            if now < begin_minus_1_hour:
                 # conference not yet started
                 webclass_status = "future"
-            elif conference.date_end < now:
+            elif conference.date_end + timedelta(hours=1) < now:
                 # conference expired
                 webclass_status = "past"
                 context['record'] = conference.get_record()
-            elif conference.date_begin - timedelta(hours=1) < now < conference.date_begin:
+            elif begin_minus_1_hour < now < conference.date_begin:
                 # conference can be joined
                 webclass_status = "almost"
             else:
                 webclass_status = "ingoing"
+            context['begin_minus_1_hour'] = begin_minus_1_hour
             context['record'] = conference.get_record()
             context['webclass_status'] = webclass_status
+
+            # set conf as read when user navigate to the record page
+            if resolve(self.request.path).url_name == "teleforma-conference-webclass-record":
+                conference.set_as_read(self.request.user)
+            
         else:
             content_type = ContentType.objects.get(app_label="teleforma", model="conference")
             context['livestreams'] = conference.livestream.all()
@@ -529,7 +538,7 @@ def join_webclass(request, pk):
     # fake debug links
     username = request.GET.get('username')
     if username:
-        return redirect(conference.get_fake_join_webclass_url(username))
+        return redirect(conference.get_fake_join_webclass_url(request, username))
     user = request.user
     authorized = False
 
@@ -546,7 +555,8 @@ def join_webclass(request, pk):
             authorized = True
 
     if authorized:
-        return redirect(conference.get_join_webclass_url(user))
+        conference.set_as_read(user)
+        return redirect(conference.get_join_webclass_url(request, user))
     else:
         return HttpResponse('Unauthorized', status=401)