From 7b3ba6561ec81ddcd1dee0d16dca817e1c458b05 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Andr=C3=A9=20Anjos?= <andre.anjos@idiap.ch>
Date: Fri, 3 Jun 2016 14:18:51 +0200
Subject: [PATCH] Merge branch 'plotters' into 'master'

[plotters/ui/common] Multiple fixes

- [x] StoredContributionManager now delivers ordered json (according to database) => ordered Plotter parameters
- [x] Ordered Plotter parameters
- [x] Reports number added as action tabs for list
- [x] Plotter moved to System Resources
- [x] added space between Reports title and count

See merge request !190
---
 beat/web/common/models.py                                | 3 ++-
 beat/web/plotters/templates/plotters/panels/actions.html | 6 ++++++
 beat/web/plotters/templates/plotters/panels/table.html   | 4 ----
 beat/web/plotters/templates/plotters/view.html           | 2 +-
 beat/web/plotters/templatetags/plotter_tags.py           | 9 ++++++++-
 beat/web/ui/templatetags/ui_tags.py                      | 4 +---
 6 files changed, 18 insertions(+), 10 deletions(-)

diff --git a/beat/web/common/models.py b/beat/web/common/models.py
index a43a41083..66e680a07 100644
--- a/beat/web/common/models.py
+++ b/beat/web/common/models.py
@@ -45,6 +45,7 @@ from .signals import shared
 import os
 import re
 import simplejson
+from collections import OrderedDict
 
 
 #----------------------------------------------------------
@@ -635,7 +636,7 @@ def set_declaration(instance, value):
 
 
 def get_declaration(instance):
-    return simplejson.loads(storage.get_file_content(instance, 'declaration_file'))
+    return simplejson.loads(storage.get_file_content(instance, 'declaration_file'), object_pairs_hook=OrderedDict)
 
 
 def get_declaration_string(instance):
diff --git a/beat/web/plotters/templates/plotters/panels/actions.html b/beat/web/plotters/templates/plotters/panels/actions.html
index 6dcaf415d..3381aea68 100644
--- a/beat/web/plotters/templates/plotters/panels/actions.html
+++ b/beat/web/plotters/templates/plotters/panels/actions.html
@@ -23,6 +23,12 @@
 
 <div class="btn-group btn-group-sm action-buttons pull-right">
 
+  {% if display_count %}
+  <!-- Report count, works for all -->
+  {% visible_reports object as reports %}
+  <a class="btn btn-default btn-references" href="{{ object.get_absolute_url }}#reports" data-toggle="tooltip" data-placement="bottom" title="Reports using this plotter"><span class="badge">{{ reports.count }}</span></a>
+  {% endif %}
+
   <!-- Edit, as admin -->
   {% if request.user.is_staff %}
   <a class="btn btn-default btn-edit" href="{% url 'admin:plotters_plotter_change' object.id %}" data-toggle="tooltip" data-placement="bottom" title="Edit as admin"><i class="fa fa-cogs fa-lg"></i></a>
diff --git a/beat/web/plotters/templates/plotters/panels/table.html b/beat/web/plotters/templates/plotters/panels/table.html
index 270291653..24a99db88 100644
--- a/beat/web/plotters/templates/plotters/panels/table.html
+++ b/beat/web/plotters/templates/plotters/panels/table.html
@@ -68,9 +68,7 @@
             <th class="privacy"></th>
             <th class="date">Updated</th>
             <th>Name</th>
-            {% if request.user.is_staff %}
             <th class="actions">Actions</th>
-            {% endif %}
           </tr>
         </thead>
         <tbody>
@@ -89,11 +87,9 @@
             </td>
             <td class="date">{{ obj.creation_date|date }}</td>
             <td class="name"><a href="{{ obj.get_absolute_url }}" data-toggle="tooltip" data-placement="top" title="Click to view">{{ obj.fullname }}{% if obj.short_description %} <span class='help'>({{ obj.short_description }})</span>{% endif %}</a></td>
-            {% if request.user.is_staff %}
             <td class="actions">
               {% plotter_actions obj True %}
             </td>
-            {% endif %}
           </tr>
           {% endfor %}
         </tbody>
diff --git a/beat/web/plotters/templates/plotters/view.html b/beat/web/plotters/templates/plotters/view.html
index d570e41f7..260400e04 100644
--- a/beat/web/plotters/templates/plotters/view.html
+++ b/beat/web/plotters/templates/plotters/view.html
@@ -91,7 +91,7 @@
       {% if owner %}
       <li role="presentation"><a href="#sharing" role="tab" data-toggle="tab" aria-controls="sharing">Sharing</a></li>
       {% endif %}
-      <li role="presentation"><a href="#reports" role="tab" data-toggle="tab" aria-controls="reports">Reports<span class="badge">{{ reports.count }}</span></a></li>
+      <li role="presentation"><a href="#reports" role="tab" data-toggle="tab" aria-controls="reports">Reports <span class="badge">{{ reports.count }}</span></a></li>
       <li role="presentation"><a href="#history" role="tab" data-toggle="tab" aria-controls="history">History</a></li>
     </ul>
 
diff --git a/beat/web/plotters/templatetags/plotter_tags.py b/beat/web/plotters/templatetags/plotter_tags.py
index 1cad189f0..71f9ec97f 100644
--- a/beat/web/plotters/templatetags/plotter_tags.py
+++ b/beat/web/plotters/templatetags/plotter_tags.py
@@ -30,6 +30,7 @@ import random
 
 from django import template
 from django.conf import settings
+from django.db.models import Q
 
 from ..models import Plotter
 
@@ -144,7 +145,13 @@ def visible_plotters(context):
 def visible_reports(context, object):
     '''Calculates the visible experiments for a given plotter and requestor'''
 
-    return object.reports.for_user(context['request'].user, True)
+    from ...reports.models import Report
+
+    if context['request'].user.is_anonymous():
+        return object.reports.filter(Q(status=Report.PUBLISHED))
+    else:
+        return object.reports.filter(Q(author=context['request'].user) |
+            Q(status=Report.PUBLISHED))
 
 
 #----------------------------------------------------------------
diff --git a/beat/web/ui/templatetags/ui_tags.py b/beat/web/ui/templatetags/ui_tags.py
index 1fd42d26f..318b2788a 100644
--- a/beat/web/ui/templatetags/ui_tags.py
+++ b/beat/web/ui/templatetags/ui_tags.py
@@ -58,7 +58,6 @@ def navbar(context):
           (False, ''),
           ('databases', 'databases:list'),
           ('environments', 'backend:list-environments'),
-          (False, ''),
           ('plotters', 'plotters:plotter-public-list'),
           #('plotterparameters', 'plotters:plotterparameter-public-list'),
           ],
@@ -77,7 +76,6 @@ def navbar(context):
           (False, '', False),
           ('databases', 'databases:list', False),
           ('environments', 'backend:list-environments', False),
-          (False, '', False),
           ('plotters', 'plotters:plotter-list', True),
           #('plotterparameters', 'plotters:plotterparameter-list', True),
           ],
@@ -161,11 +159,11 @@ def list_tabs(context, user, tab):
               ('reports', 'reports:' + name),
               ('searches', 'search:' + name),
               ('teams', 'teams:' + name),
-              ('plotters', 'plotters:plotter-' + name),
               ]),
             system_tabs=OrderedDict([
               ('databases', 'databases:list'),
               ('environments', 'backend:list-environments'),
+              ('plotters', 'plotters:plotter-public-list'),
               ]),
             )
 
-- 
GitLab