]> git.parisson.com Git - teleforma.git/commitdiff
update answer management
authoryomguy <yomguy@parisson.com>
Mon, 17 Dec 2012 16:24:03 +0000 (17:24 +0100)
committeryomguy <yomguy@parisson.com>
Mon, 17 Dec 2012 16:24:03 +0000 (17:24 +0100)
13 files changed:
teleforma/static/teleforma/css/teleforma.css
teleforma/static/teleforma/js/application.js
teleforma/templates/teleforma/answer_detail.html [new file with mode: 0644]
teleforma/templates/teleforma/answer_form.html
teleforma/templates/teleforma/answers.html [new file with mode: 0644]
teleforma/templates/teleforma/inc/answer_list.html [new file with mode: 0644]
teleforma/templates/teleforma/seminar_detail.html
teleforma/templates/teleforma/seminar_media_video.html
teleforma/templates/teleforma/seminars.html
teleforma/templates/telemeta/base.html
teleforma/templatetags/teleforma_tags.py
teleforma/urls.py
teleforma/views/pro.py

index 03cb3fb573e6c272c8cca6707f7c437d30b3010e..bb473a957dc87efbd59a6c3bce718bc8a11800f4 100644 (file)
@@ -1488,7 +1488,7 @@ input,textarea{
 
 .course_description {
     background-color: #FFF;
-    padding: 0em 1em 1em 1em;
+    padding: 0em 1em 0.5em 1em;
         -moz-border-radius: 8px 0px 8px 8px;
     -webkit-border-radius: 8px 0px 8px 8px;
     border-radius: 8px 0px 8px 8px;
index 4187e27ab7640bf04a5d2fe3249fed8312c732aa..6d1a9478b9834a49840ab0c3f538907ec6834101 100644 (file)
@@ -28,3 +28,4 @@
 
 var rainbow = new Rainbow();
 rainbow.setSpectrum('#bb0000', '#e65911', '#f3ad17', 'green');
+
diff --git a/teleforma/templates/teleforma/answer_detail.html b/teleforma/templates/teleforma/answer_detail.html
new file mode 100644 (file)
index 0000000..68a1b39
--- /dev/null
@@ -0,0 +1,47 @@
+{% extends "teleforma/seminar_detail.html" %}
+{% load teleforma_tags %}
+{% load i18n %}
+
+{% block extra_javascript %}
+<script src="{{ STATIC_URL }}teleforma/js/charCount.js" type="text/javascript"></script>
+<script type="text/javascript">
+
+</script>
+{% endblock extra_javascript %}
+
+
+{% block course_content %}
+
+<div class="course_content">
+  <div class="course_subtitle">
+   <h3><img src="{{ STATIC_URL }}telemeta/images/item_title.png" width="10px" alt="" /> {{ answer.question|safe }}</h3>
+  </div>
+  <div style="text-align: justify;">
+    {{ answer.question.question|safe }}
+  </div>
+</div>
+
+<br />
+
+<div class="course_content">
+<div class="course_subtitle">
+   <h3><img src="{{ STATIC_URL }}telemeta/images/item_title.png" width="10px" alt="" /> {% trans "Answer" %}</h3>
+  </div>
+  <div style="text-align: justify;">
+    {{ answer.answer|safe }}
+  </div>
+</div>
+
+<br />
+
+{% if user.is_staff %}
+<a id="validate" href="#" class="component_icon button icon_ok" onclick="var f = answerUtils; f.validate('{{answer.id}}')">{% trans " validate" %}</a> 
+<a id="reject" href="#" class="component_icon button icon_delete" onclick="var f = answerUtils; f.reject('{{answer.id}}')">{% trans " reject" %}</a>
+{% endif %}
+
+{% endblock course_content %}
+
+
+{% block progress %}
+{% endblock progress %}
+
index 14e4f9fcb73e8983c519700c10139dd8ad2fdfcd..e1e704dc406822e7f32fc881a3ee841690649e3b 100644 (file)
@@ -55,11 +55,12 @@ $(document).ready(function(){
 {{ form }}
 </form>
 
+{% if status != 3 %}
 <br />
 <a href="#" class="component_icon button icon_save"
    onclick="document.getElementById('_AnswerForm').submit();">{% trans "Save" %}</a>
-
 <a href="#" id="submit_button" class="component_icon button icon_ok">{% trans "Submit it" %}</a>
+{% endif %}
 
 {% endblock course_content %}
 
diff --git a/teleforma/templates/teleforma/answers.html b/teleforma/templates/teleforma/answers.html
new file mode 100644 (file)
index 0000000..b9bd6e7
--- /dev/null
@@ -0,0 +1,70 @@
+{% extends "telemeta/base.html" %}
+{% load i18n %}
+{% load telemeta_utils %}
+{% load teleforma_tags %}
+
+{% block head_title %}{% trans "Answers" %} - {{ block.super }}{% endblock %}
+
+{% block title %}
+{% endblock %}
+
+
+{% block infra_javascript %}
+<script type="text/javascript">
+
+var answerUtils = {
+        validate : function(id, a){
+            json([id],'teleforma.validate_answer',function(){
+                a.removeClass('icon_delete').addClass('icon_ok')
+                a.html('{% trans " validated" %}')
+                });
+         },
+        reject : function(id, a){
+            json([id],'teleforma.reject_answer',function(){
+                a.removeClass('icon_ok').addClass('icon_delete')
+                a.html('{% trans " rejected" %}')
+                });
+         }
+        }
+
+</script>
+{% endblock infra_javascript %}
+
+{% block content %}
+
+<div id="module-set-left" style="width: 18%">
+
+{% block modules %}
+<div class="module">
+
+<h3><a href="{% url teleforma-desk %}"><img src="{{ STATIC_URL }}telemeta/images/module_playlist.png" alt="playlists" style="vertical-align:middle" />{% trans "My seminars" %}</a></h3>
+<div style="background: white;">
+<ul>
+{% block courses %}
+{% for seminar in all_seminars %}
+   <li><a href="{% url teleforma-seminar-detail seminar.id %}">{{ seminar.title }}</a></li>
+ {% endfor %}
+{% endblock courses %}
+</ul>
+</div>
+</div>
+
+</div>
+{% endblock modules %}
+
+<div class="desk_messages">
+
+{% if user.is_staff %}
+<div style="float:right;">
+</div>
+{% endif %}
+
+<div class="course_title">{% trans "Answers" %}</div>
+<br />
+ {% if object_list %}
+  {% include "teleforma/inc/answer_list.html" %}
+ {% else %}
+    <p class="help">{% trans "No answer" %}</p>
+ {% endif %}
+</div>
+{% endblock %}
diff --git a/teleforma/templates/teleforma/inc/answer_list.html b/teleforma/templates/teleforma/inc/answer_list.html
new file mode 100644 (file)
index 0000000..5ef4a36
--- /dev/null
@@ -0,0 +1,48 @@
+{% load i18n %}
+{% load telemeta_utils %}
+{% load teleforma_tags %}
+{% load pagination_tags %}
+
+<div class="pagination">
+    {% for p in page.paginator.pages %}
+      {% if p == page %}
+       <span class="selected">{{ page }}</span>
+      {% else %}
+       <a href="?page={{ p.number }}">{{ p }}</a>
+      {% endif %}
+    {% endfor %}
+</div>
+
+<div id="users">
+  <table class="listing" width="100%">
+   <thead>
+   <tr><th>{% trans "Last Name"%}</th>
+    <th>{% trans "First Name"%}</th>
+    <th>{% trans "Seminar"%}</th>
+    <th>{% trans "Date submitted"%}</th>
+    <th>{% trans "Summary"%}</th>
+    <th>{% trans "Action / status"%}</th>
+    </tr>
+    </thead>
+    <tbody id="spacing">
+    {% for answer in page.object_list %}
+    <tr>
+     <td><a href="{% url teleforma-profile-detail answer.user.username %}">{{ answer.user.last_name }}</a></td>
+     <td><a href="{% url teleforma-profile-detail answer.user.username %}">{{ answer.user.first_name }}</a></td>
+
+     <td>{{ answer.question.seminar }}</td>
+     <td>{{ answer.date_submitted }}</td>
+     <td><a href="{% url teleforma-answer-detail answer.id %}">{{ answer.answer|summary:120 }}</a></td>
+     <td>{% if user.is_staff %}
+        <a id="validate" href="#" class="{% if answer.validated %}component_icon button icon_ok{% else %}component_icon button icon_delete{% endif %}" 
+        onclick="var f = answerUtils;
+            if ($(this).hasClass('icon_ok')) {f.reject('{{answer.id}}', $(this)); return false;}
+            if ($(this).hasClass('icon_delete')) {f.validate('{{answer.id}}', $(this)); return false;}">
+            {% if answer.validated %}{% trans " validated" %}{% else %}{% trans " rejected" %}{% endif %}</a>
+        {% endif %}
+     </td>
+    </tr>
+    {% endfor %}
+    </tbody>
+  </table>
+</div>
index 75b64b418c4ca40c9fada356b2f2df236cb35e10..8f57d6b6a1ded1877450f4d122d1a6bd80d18962 100644 (file)
@@ -23,7 +23,6 @@ $(function() {
         $('#progressbar-seminar div').css({"background": color});
     });
 </script>
-
 {% endblock infra_javascript %}
 
 
@@ -38,7 +37,7 @@ $(function() {
 
           <div style="float: right; font-size: 0.9em;">
           {% if seminar_progress == 100 %}
-          <a id="validated" href="#" class="component_icon button icon_ok">{% trans " validated" %}</a>
+          <img src="{{ STATIC_URL }}telemeta/images/ok.png" title="{% trans "validated" %}" alt="{% trans "validated" %}"/>
           {% endif %}
           </div>
 
@@ -51,8 +50,8 @@ $(function() {
           <div class="course_subtitle">
              <h3><img src="{{ STATIC_URL }}telemeta/images/item_title.png" width="10px" alt="" /> {% trans "Informations" %}</h3>
             </div>
-            <div style="padding-left: 1em;">
-              <dl class="listing" style="font-size: 1em;">
+            <div class="course_description">
+              <dl class="listing" style="font-size: 1.1em;">
               {% if seminar.keywords.all %}<dt>{% trans "keywords" %}</dt><dd>{% for kw in seminar.keywords.all %}{{ kw }}, {% endfor %}</dd>{% endif %}
               <dt>{% trans "level" %}</dt><dd>{{ seminar.level }}</dd>
               <dt>{% trans "public concerned" %}</dt><dd>{{ seminar.concerned }}</dd>
@@ -114,6 +113,8 @@ $(function() {
              {% include "teleforma/inc/question_list.html" %}
             {% endwith %}
            {% else %}
+
+
             {% with _("Step 4 : answer to the following question") as title %}
              {% include "teleforma/inc/question_list.html" %}
             {% endwith %}
index 55973787f887fa79fdce8e692ea37ee57753fefe..af88f02a8aa5da112112d5997ea993afacaa0018 100644 (file)
 
 {% if user.is_staff %}
 <script type="text/javascript">
-    var mediaUtils = {
+
+var mediaUtils = {
         publish : function(id){
-            var p = jQuery('#publish');
+            var p = $('#publish');
             json([id],'teleforma.publish_media_package',function(){
                 p.removeClass('icon_delete').addClass('icon_ok')
                 p.html('{% trans " published" %}')
                 });
          },
         unpublish : function(id){
-            var p = jQuery('#publish');
+            var p = $('#publish');
             json([id],'teleforma.unpublish_media_package',function(){
                 p.removeClass('icon_ok').addClass('icon_delete')
                 p.html('{% trans " rejected" %}')
          }
         }
 
-    jQuery(window).ready(function(){
-        var p = jQuery('#publish');
-        var f = mediaUtils;
-        p.unbind('click').click(function() {
-            if (p.hasClass('icon_ok')){
-                f.unpublish('{{media_package.id}}');
-                return false;
-                }
-            if (p.hasClass('icon_delete')) {
-                f.publish('{{media_package.id}}');
-                return false;
-                }
+$(window).ready(function(){
+    var p = jQuery('#publish');
+    var f = mediaUtils;
+    p.unbind('click').click(function() {
+        if (p.hasClass('icon_ok')){
+            f.unpublish('{{media_package.id}}');
+            return false;
+            }
+        if (p.hasClass('icon_delete')) {
+            f.publish('{{media_package.id}}');
+            return false;
             }
-            );
-        });
+        }
+        );
+    });
+
 </script>
 {% endif %}
 
index 945295842e6819c0d5abe0d4b2bf8d405448318b..f8717681a0faac7afd46c842150d349caa864e69 100644 (file)
@@ -7,7 +7,7 @@
 <script type="text/javascript">
 $(function () {
     $('div.description').expander({
-        slicePoint: 120,
+        slicePoint: 60,
         expandText: 'Lire plus',
         userCollapseText: 'Cacher le texte',
     });
@@ -87,8 +87,8 @@ $(function() {
         <div class="course_content">
             <div class="course_subtitle">
             </div>
-            <div style="padding-left: 1em;">
-              <dl class="listing" style="font-size: 1em;">
+            <div class="course_description">
+              <dl class="listing" style="font-size: 1.1em;">
               {% if seminar.keywords.all %}<dt>{% trans "keywords" %}</dt><dd>{% for kw in seminar.keywords.all %}{{ kw }}, {% endfor %}</dd>{% endif %}
               <dt>{% trans "level" %}</dt><dd>{{ seminar.level }}</dd>
               <dt>{% trans "public concerned" %}</dt><dd>{{ seminar.concerned }}</dd>
index c06b35399fe340bd25f58c1715fb34348ce5f865..80363321af48a7e8bd0bec089d4f0ef05b392cc0 100644 (file)
@@ -108,13 +108,7 @@ alt="logo" />
 
  {% if user.is_authenticated %}
   {% if user.is_staff %}
-   <li><a href="#archives#" class="green">{% trans "Archives" %}</a>
- <ul>
- <li><a href="{% url telemeta-search-criteria %}">{% trans "Search" %}</a></li>
- <li><a href="{% url telemeta-collections %}">{% trans "Collections" %}</a></li>
- <li><a href="{% url telemeta-items %}">{% trans "Items" %}</a></li>
- </ul>
- </li>
+   <li><a href="{% url teleforma-answers %}" class="green">{% trans "Answers" %}</a></li>
  <li><a href="{% url telemeta-admin-general %}" class="blue">{% trans "Admin" %}</a></li>
   {% else %}
    <li><a href="{% url teleforma-help %}" class="green">{% trans "Help" %}</a></li>
index f325bc45a5c73900d70a11b1f754726ea9948c79..7be93e379717a31b6e0e86d6d947000e784e1f85 100644 (file)
@@ -232,3 +232,7 @@ def saved(question, user):
     else:
         return ''
 
+@register.filter
+def summary(text, N):
+    return text[:N] + '...'
+    
index 82894f1ee5ec8600ec5dae3d39b1129a82cdd2bc..2838817e57fba92b4cbd6dedd814288bbdeea189 100644 (file)
@@ -95,6 +95,8 @@ urlpatterns = patterns('',
     # Questions
     url(r'^desk/questions/(?P<pk>.*)/$', AnswerView.as_view(),
         name="teleforma-question-answer"),
+    url(r'^desk/answers/$', AnswersView.as_view(), name="teleforma-answers"),
+    url(r'^desk/answers/(?P<pk>.*)/$', AnswerDetailView.as_view(), name="teleforma-answer-detail"),
 
     # Postman
     url(r'^messages/', include('postman.urls')),
index 7bde06011b870b93be9fc13290688e5182391ce4..36a2d4e0512e4204ca87d68421a580ce7ac8d3f0 100644 (file)
@@ -200,6 +200,7 @@ class AnswerView(FormView):
             answer = Answer()
         initial['answer'] = answer.answer
         initial['status'] = answer.status
+        self.status = answer.status
         return initial
 
     def form_valid(self, form):
@@ -224,6 +225,7 @@ class AnswerView(FormView):
         context = super(AnswerView, self).get_context_data(**kwargs)
         context['all_seminars'] = get_seminars(self.request.user)
         context['question'] = self.question
+        context['status'] = self.status
         context['seminar'] = self.question.seminar
         context['seminar_progress'] = seminar_progress(self.request.user, self.question.seminar)
         context['total_progress'] = total_progress(self.request.user)
@@ -278,5 +280,64 @@ class MediaPackageView(DetailView):
         for media in media_package.audio.all():
             media.is_published = False
             media.save()
+
                 
+class AnswersView(ListView):
+
+    model = Answer
+    template_name='teleforma/answers.html'
+
+    def get_queryset(self):
+        return Answer.objects.filter(status=3)
+
+    def get_context_data(self, **kwargs):
+        context = super(AnswersView, self).get_context_data(**kwargs)
+        all_seminars = get_seminars(self.request.user)
+        context['all_seminars'] = all_seminars
+        
+        paginator = Paginator(self.object_list, per_page=12)
+        try:
+            page = int(self.request.GET.get('page', '1'))
+        except ValueError:
+            page = 1
+
+        try:
+            page = paginator.page(page)
+        except (InvalidPage):
+            page = paginator.page(paginator.num_pages)
+        context['page'] = page
+        return context
+
+    @method_decorator(login_required)
+    def dispatch(self, *args, **kwargs):
+        return super(AnswersView, self).dispatch(*args, **kwargs)
+
+
+    @jsonrpc_method('teleforma.validate_answer')
+    def validate(request, id):
+        answer = Answer.objects.get(id=id)
+        answer.validated = True
+        answer.save()
+
+    @jsonrpc_method('teleforma.reject_answer')
+    def reject(request, id):
+        answer = Answer.objects.get(id=id)
+        answer.validated = False
+        answer.status = 2
+        answer.save()
+
+
+class AnswerDetailView(DetailView):
+
+    model = Answer
+    template_name='teleforma/answer_detail.html'
+
+    @method_decorator(login_required)
+    def dispatch(self, *args, **kwargs):
+        return super(AnswerDetailView, self).dispatch(*args, **kwargs)
+
+    def get_context_data(self, **kwargs):
+        context = super(AnswerDetailView, self).get_context_data(**kwargs)
+        context['all_seminars'] = get_seminars(self.request.user)
+        return context