]> git.parisson.com Git - teleforma.git/commitdiff
add multiple period management for the desk, update login procedure
authorGuillaume Pellerin <yomguy@parisson.com>
Thu, 4 Jul 2013 12:38:45 +0000 (14:38 +0200)
committerGuillaume Pellerin <yomguy@parisson.com>
Thu, 4 Jul 2013 12:38:45 +0000 (14:38 +0200)
teleforma/context_processors.py [new file with mode: 0644]
teleforma/templates/teleforma/inc/conference_list.html
teleforma/templates/teleforma/inc/document_list.html
teleforma/templates/teleforma/inc/media_list.html
teleforma/templates/telemeta/base.html
teleforma/templates/telemeta/login.html
teleforma/templatetags/teleforma_tags.py
teleforma/urls.py
teleforma/views/core.py
teleforma/views/crfpa.py

diff --git a/teleforma/context_processors.py b/teleforma/context_processors.py
new file mode 100644 (file)
index 0000000..94fadbb
--- /dev/null
@@ -0,0 +1,47 @@
+# -*- coding: utf-8 -*-
+# Copyright (c) 2013 Parisson SARL
+
+# This software is a computer program whose purpose is to backup, analyse,
+# transcode and stream any audio content with its metadata over a web frontend.
+
+# This software is governed by the CeCILL  license under French law and
+# abiding by the rules of distribution of free software.  You can  use,
+# modify and/ or redistribute the software under the terms of the CeCILL
+# license as circulated by CEA, CNRS and INRIA at the following URL
+# "http://www.cecill.info".
+
+# As a counterpart to the access to the source code and  rights to copy,
+# modify and redistribute granted by the license, users are provided only
+# with a limited warranty  and the software's author,  the holder of the
+# economic rights,  and the successive licensors  have only  limited
+# liability.
+
+# In this respect, the user's attention is drawn to the risks associated
+# with loading,  using,  modifying and/or developing or reproducing the
+# software by the user in light of its specific status of free software,
+# that may mean  that it is complicated to manipulate,  and  that  also
+# therefore means  that it is reserved for developers  and  experienced
+# professionals having in-depth computer knowledge. Users are therefore
+# encouraged to load and test the software's suitability as regards their
+# requirements in conditions enabling the security of their systems and/or
+# data to be ensured and,  more generally, to use and operate it in the
+# same conditions as regards security.
+
+# The fact that you are presently reading this means that you have had
+# knowledge of the CeCILL license and that you accept its terms.
+#
+# Authors: Guillaume Pellerin <yomguy@parisson.com>
+
+
+from teleforma.views.core import *
+
+
+def periods(request):
+    """return the periods assigned to the user """
+
+    user = request.user
+
+    if not user.is_authenticated():
+        return {'periods': None}
+    else:
+        return {'periods': get_periods(user)}
index 57840dc4c04141badbf29014a41d22f4eee5fe01..453bf8fb0373c5d234339e97b417164a7d79b43c 100644 (file)
@@ -9,7 +9,7 @@
 </div>
     <table class="listing" width="100%">
     <tbody>
-       {% for conference in conferences|from_periods:periods %}
+       {% for conference in conferences|from_period:period %}
         {% for stream in conference.livestream.all %}
          {% if stream.stream_type == 'webm' %}
             <tr>
index 0982c352a0be5f5b75b0bda29bfb084e50197b02..4d86e25010dca067cf4f9b8966d6138ca4cd4a73 100644 (file)
@@ -13,7 +13,7 @@
 <span class="doc_type_title">{{ doc_type }}</span>
 <table class="listing" width="100%">
     <tbody>
-        {% for doc in docs|from_course_type:type|from_doc_type:doc_type|from_periods:periods %}
+        {% for doc in docs|from_course_type:type|from_doc_type:doc_type|from_period:period %}
         {% if doc.course_type.all|length > 1 and type_counter > 1 %}
         {% else %}
         <tr>
index e0770566484312fc36bec913bce450f0e563d324..bc1eb967da2c91a5c673f01c3a27238fe0e13f19 100644 (file)
@@ -9,7 +9,7 @@
 </div>
     <table class="listing" width="100%">
     <tbody>
-        {% for media in course.media.all|from_course_type:type|from_periods:periods %}
+        {% for media in course.media.all|from_course_type:type|from_period:period %}
          {% if media.is_published or user.is_staff %}
           {% if media.type == 'webm' %}
             <tr>
index eb907b00852cf4646aaf65e70289d71d22501de3..7dd8c6a60eda472c24304315d2a83e5e38aab91b 100644 (file)
@@ -86,8 +86,19 @@ alt="logo" />
 <ul id="nav">
 
  {% if user.is_authenticated %}
- <li><a href="{% url teleforma-desk %}" class="red">{% trans "Desk" %}</a>
- </li>
+
+  {% if periods|length > 1 %}
+    <li><a href="#desk#" class="red">&nbsp;{% trans "Desk" %}&nbsp;</a>
+      <ul>
+       {% for period in periods %}
+        <li><a href="{% url teleforma-desk-period period.id %}" class="red">{{ period.name }}</a></li>
+       {% endfor %}
+      </ul>
+    </li>
+  {% else %}
+   <li><a href="{% url teleforma-desk %}" class="red">{% trans "Desk" %}</a></li>
+  {% endif %}
+
  {% else %}
   <li><a href="{% url teleforma-login %}" class="red">{% trans "Home" %}</a></li>
  {% endif %}
index 911529855225a38ee8393d51cc04052549d109b4..e883f5c029ad652c7c6480b7669b47632b17ef1a 100644 (file)
@@ -5,6 +5,16 @@
 {% endblock %}
 
 {% block content %}
+<script>
+$(document).ready(function() {
+    $(this).keydown(function(e) {
+        if (e.keyCode == '13') {
+            $("#_loginForm").submit();
+        }
+    });
+});
+</script>
+
 {% if form.errors %}
 <p class="login-error">{% trans "Your username and password didn't match. Please try again." %}</p>
 {% endif %}
 {{ form.password.label_tag }}
 {{ form.password }}
 </p>
-<span style="align: right; font-weight: bold;"><a href="{% url telemeta-password-reset %}">{% trans "Password forgotten" %} ?</a></span>
-<input class="submit" type="submit" value="{% trans "Sign in" %}" />
+<div style="margin-top: 2em;">
+<span style="align: right; font-weight: bold; margin-right: 2em;"><a href="{% url telemeta-password-reset %}">{% trans "Password forgotten" %} ?</a></span>
+<a href="#" class="component_icon button" id="action_red" onclick="$('#_loginForm').submit();"><img src="{{STATIC_URL}}telemeta/images/password.png" alt="" style="vertical-align:middle" />&nbsp;{% trans "Sign in" %}</a>
 <input type="hidden" name="next" value="{{ next }}" />
+</div>
 </form>
 {% endblock %}
index d88e9a187744d58e80a3ed30c2bbe6265c64e3cd..871f574f0c888b2c87c5f7da555be9bb1e148bf7 100644 (file)
@@ -137,17 +137,17 @@ def yes_no(bool):
 def from_course_type(contents, type):
     if contents:
         return contents.filter(course_type=type)
-    
+
 @register.filter
 def from_doc_type(contents, type):
     if contents:
         return contents.filter(type=type)
-    
+
 @register.filter
-def from_periods(contents, periods):
+def from_period(contents, period):
     if contents:
-        return contents.filter(period__in=periods)
-    
+        return contents.filter(period=period)
+
 @register.assignment_tag
 def get_all_professors():
     return Professor.objects.all().order_by('user__first_name')
index d09d8bf8e7973b94e787bd8f09a0e5402e6aa708..6f2d7acef2d2414e6a8658036adbed7d29ca685e 100644 (file)
@@ -48,18 +48,24 @@ document = DocumentView()
 media = MediaView()
 
 urlpatterns = patterns('',
-#    url(r'^$', HomeView.as_view(), name='teleforma-home'),
-    url(r'^$', 'django.contrib.auth.views.login', {'template_name': 'telemeta/login.html'},
-        name="teleforma-login"),
 
-    # Telemeta
-    url(r'^', include('telemeta.urls')),
+
+    # login
+    url(r'^login/$', 'django.contrib.auth.views.login', {'template_name': 'telemeta/login.html'},
+        name="teleforma-login"),
 
     # Help
     url(r'^help/$', HelpView.as_view(), name="teleforma-help"),
 
+    # Home
+    url(r'^$', HomeRedirectView.as_view(), name="teleforma-home"),
+
+    # Telemeta
+    url(r'^', include('telemeta.urls')),
+
     # Desk
     url(r'^desk/$', CoursesView.as_view(), name="teleforma-desk"),
+    url(r'^desk/periods/(?P<period_id>.*)/$', PeriodView.as_view(), name="teleforma-desk-period"),
     url(r'^desk/courses/(?P<pk>.*)/$', CourseView.as_view(), name="teleforma-course-detail"),
 
     url(r'^desk/medias/(?P<pk>.*)/detail/$', MediaView.as_view(), name="teleforma-media-detail"),
@@ -108,18 +114,6 @@ urlpatterns = patterns('',
     url(r'^users/by_course/(?P<id>.*)/export/$', user_export.by_course,
         name="teleforma-course-users-export"),
 
-
-# CSS+Images (FIXME: for developement only)
-    url(r'^teleforma/css/(?P<path>.*)$', 'django.views.static.serve',
-        {'document_root': htdocs_forma+'css'},
-        name="teleforma-css"),
-    url(r'images/(?P<path>.*)$', 'django.views.static.serve',
-        {'document_root': htdocs_forma+'images'},
-        name="teleforma-images"),
-    url(r'^js/(?P<path>.*)$', 'django.views.static.serve',
-        {'document_root': htdocs_forma+'js'},
-        name="teleforma-js"),
-
     # JSON RPC
     url(r'json/$', jsonrpc_site.dispatch, name='jsonrpc_mountpoint'),
 
index 77b61fbb145c8735c514127d51a2c5839e858a08..114afa7822ce4565c6655dae8bb5c1a01f32239d 100644 (file)
@@ -99,14 +99,14 @@ def format_courses(courses, course=None, queryset=None, types=None):
     return courses
 
 
-def get_courses(user, date_order=False, num_order=False, num_courses=False):
+def get_courses(user, date_order=False, num_order=False, num_courses=False, period=None):
     if settings.TELEFORMA_E_LEARNING_TYPE == 'CRFPA':
         from teleforma.views.crfpa import get_crfpa_courses
-        return get_crfpa_courses(user, date_order, num_order)
+        return get_crfpa_courses(user, date_order, num_order, period)
 
     elif settings.TELEFORMA_E_LEARNING_TYPE == 'AE':
         from teleforma.views.ae import get_ae_courses
-        return get_ae_courses(user, date_order, num_order)
+        return get_ae_courses(user, date_order, num_order, period)
 
 
 def stream_from_file(__file):
@@ -175,6 +175,19 @@ def get_periods(user):
     return periods
 
 
+class HomeRedirectView(View):
+
+    def get(self, request):
+        if request.user.is_authenticated():
+            periods = get_periods(request.user)
+            if len(periods) > 1:
+                return HttpResponseRedirect(reverse('teleforma-desk-period', kwargs={'period_id': periods[0].id}))
+            else:
+                return HttpResponseRedirect(reverse('teleforma-desk'))
+        else:
+            return HttpResponseRedirect(reverse('teleforma-login'))
+
+
 class CourseView(DetailView):
 
     model = Course
@@ -194,7 +207,6 @@ class CourseView(DetailView):
         context['room'] = get_room(name=course.title, content_type=content_type,
                                    id=course.id)
         context['doc_types'] = DocumentType.objects.all()
-        context['periods'] = get_periods(self.request.user)
         return context
 
     @method_decorator(login_required)
@@ -217,7 +229,7 @@ class CoursesView(ListView):
         context['room'] = get_room(name='site')
         context['doc_types'] = DocumentType.objects.all()
         context['all_courses'] = sorted(self.all_courses, key=lambda k: k['number'])
-        context['periods'] = get_periods(self.request.user)
+        context['period'] = get_periods(self.request.user)[0]
         return context
 
     @method_decorator(login_required)
@@ -225,6 +237,19 @@ class CoursesView(ListView):
         return super(CoursesView, self).dispatch(*args, **kwargs)
 
 
+class PeriodView(CoursesView):
+
+    def get_queryset(self):
+        self.period = Period.objects.get(id=int(self.kwargs['period_id']))
+        self.all_courses = get_courses(self.request.user, date_order=True, period=self.period)
+        return self.all_courses[:5]
+
+    def get_context_data(self, **kwargs):
+        context = super(PeriodView, self).get_context_data(**kwargs)
+        context['period'] = self.period
+        return context
+
+
 class MediaView(DetailView):
 
     model = Media
index f653f6d80707cbe29bc9316b21b160709523593c..2dbb1563c69cc71112440e0ac6b7aa10a7e032b8 100644 (file)
@@ -36,7 +36,7 @@
 from teleforma.views.core import *
 
 
-def get_crfpa_courses(user, date_order=False, num_order=False):
+def get_crfpa_courses(user, date_order=False, num_order=False, period=None):
     courses = []
 
     if not user.is_authenticated():