Commit b19157cdf721099dff3c65ae02d2e56c749f77f1

Authored by Felipe Henrique de Almeida Bormann
2 parents 437e945c 391a1aeb

fixed conflict on view

amadeus/static/css/base/amadeus.css
... ... @@ -60,31 +60,51 @@
60 60 /* category app starts */
61 61  
62 62 .panel-invisible{
63   - background-color: #BDBDBD;
  63 + background-color: #BDBDBD;
  64 +}
  65 +
  66 +.category-panel > .panel-heading {
  67 + background-color: #0277BD !important;
  68 +}
  69 +.category-panel > .panel-heading, .subject-panel > .panel-heading, .special-panel > .panel-heading {
  70 + padding: 2px 0px;
  71 +}
  72 +
  73 +.subject-panel > .panel-heading {
  74 + background-color: #039BE5 !important;
  75 +}
  76 +
  77 +.subject-group {
  78 + margin-left: 20px;
64 79 }
65 80  
66 81 .category-header > h4{
67   - float:left;
68   - margin-top: 0.5%;
  82 + float:left;
  83 + margin-top: 5px;
  84 + margin-bottom: 2px;
69 85 }
70 86  
  87 +.category-header > h4 > a:focus {
  88 + text-decoration: none;
  89 +}
71 90  
  91 +.category-card-items {
  92 + padding-right: 0px;
  93 +}
72 94 .category-card-items i{
73 95 font-size: 25px !important;
74   - margin-right: 5%;
75   - margin-top: 1%;
  96 + margin-right: 10px;
  97 + margin-top: 6px;
76 98 }
  99 +
77 100 .category-header i{
78 101 color: white;
79   -
80 102 font-size: 20px;
81 103 float: right;
82   -
83   -
84 104 }
85 105  
86 106 .category-header i:hover{
87   - color: #90CAF9;
  107 + color: #90CAF9;
88 108 }
89 109  
90 110  
... ... @@ -94,6 +114,7 @@
94 114  
95 115 .cat-selector {
96 116 margin: 0;
  117 + top: -2px;
97 118 }
98 119  
99 120 #create-category{
... ... @@ -118,8 +139,8 @@
118 139  
119 140 #core-subjects-options-div{
120 141 width: 100%;
121   - margin-bottom: 2%;
122   - height: 30px;
  142 + margin-bottom: 10px;
  143 + height: 50px;
123 144 }
124 145  
125 146 .core-subjects-options li{
... ...
amadeus/templates/base.html
... ... @@ -70,7 +70,7 @@
70 70 <span class="icon-bar"></span>
71 71 <span class="icon-bar"></span>
72 72 </button>
73   - <a class="navbar-brand" href="{% url 'categories:index' %}">
  73 + <a class="navbar-brand" href="{% url 'subjects:home' %}">
74 74 <img class="logo pull-left" src="{% static 'img/topo-amadeus-white.png' %}" alt="Logo" />
75 75 <span class="pull-right project_name">Projeto Amadeus</span>
76 76 </a>
... ...
amadeus/templates/pagination.html
1   -<div class="row-fluid">
2   - <div class="col-md-12 col-lg-12 col-sm-12 col-xs-12 text-center">
3   - <ul class="pagination">
4   - {% for page_number in paginator.page_range %}
5   - <li{% if page_obj.number == page_number %} class="active"{% endif %}>
6   - <a href="?page={{ page_number }}{{ getvars }}">{{ page_number }}</a>
7   - </li>
8   - {% endfor %}
9   - </ul>
  1 +{% if paginator.count > 0 %}
  2 + <div class="row-fluid">
  3 + <div class="col-md-12 col-lg-12 col-sm-12 col-xs-12 text-center">
  4 + <ul class="pagination">
  5 + {% for page_number in paginator.page_range %}
  6 + <li{% if page_obj.number == page_number %} class="active"{% endif %}>
  7 + <a href="?page={{ page_number }}{{ getvars }}">{{ page_number }}</a>
  8 + </li>
  9 + {% endfor %}
  10 + </ul>
  11 + </div>
10 12 </div>
11   -</div>
12 13 \ No newline at end of file
  14 +{% endif %}
13 15 \ No newline at end of file
... ...
categories/templates/categories/list.html
1 1 {% extends 'categories/home.html' %}
2 2  
3   -{% load static i18n permission_tags %}
  3 +{% load static i18n pagination %}
4 4 {% load django_bootstrap_breadcrumbs %}
5 5  
6 6 {% block javascript%}
... ... @@ -38,24 +38,22 @@
38 38 <div class="col-md-12 cards-content">
39 39 <div class="panel-group" id="accordion" role="tablist" aria-multiselectable="true">
40 40 {% for category in categories %}
41   - {% if category.visible %}
42   -
43   -
44   - <div class="panel panel-info">
45   - <div class="panel-heading">
46   - <div class="row">
47   - <div class="col-md-12 category-header">
48   - <h4 class="panel-title">
49   - <a class="category-course-link pull-left" data-parent="#accordion" data-toggle="collapse" href="#{{category.slug}}">
50   - <button class="btn btn-default btn-xs text-center cat-selector"><i class="fa fa-angle-right fa-2x" aria-hidden="true"></i></button> {{category.name}}
51   - </a>
52   - </h4>
53   - {% if user.is_staff or user in category.coordinators.all %}
54   - <div class=" divMoreActions">
55   - <div class="btn-group">
56   - <button class="btn btn-default btn-sm dropdown-toggle" type="button" id="moreActions" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
57   - <i class="fa fa-ellipsis-v fa-2x" aria-hidden="true"></i>
58   - </button>
  41 + {% if category.visible %}
  42 + <div class="panel panel-info category-panel">
  43 + <div class="panel-heading">
  44 + <div class="row">
  45 + <div class="col-md-12 category-header">
  46 + <h4 class="panel-title">
  47 + <a class="category-course-link pull-left" data-parent="#accordion" data-toggle="collapse" href="#{{category.slug}}">
  48 + <button class="btn btn-default btn-xs text-center cat-selector"><i class="fa fa-angle-right fa-2x" aria-hidden="true"></i></button> {{category.name}}
  49 + </a>
  50 + </h4>
  51 +
  52 + <div class="col-md-5 pull-right category-card-items">
  53 + {% if user.is_staff or user in category.coordinators.all %}
  54 + <a href="" id="moreActions" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
  55 + <i class="fa fa-ellipsis-v" aria-hidden="true"></i>
  56 + </a>
59 57 <ul class="dropdown-menu pull-right" aria-labelledby="moreActions">
60 58 {% if user.is_staff %}
61 59 <li><a href="{% url 'categories:replicate' category.slug %}"><i class="fa fa-files-o fa-fw" aria-hidden="true"></i>{% trans 'Replicate' %}</a></li>
... ... @@ -63,79 +61,56 @@
63 61 <li><a href="{% url 'categories:update' category.slug %}"><i class="fa fa-pencil fa-fw" aria-hidden="true"></i>{% trans 'Edit' %}</a></li>
64 62 <li><a href="javascript:delete_course.get('{% url 'categories:delete' category.slug %}?view=index','#category','#modal_course')"><i class="fa fa-trash fa-fw" aria-hidden="true"></i>&nbsp;{% trans 'Remove' %}</a></li>
65 63 </ul>
66   - </div>
67   - </div>
68   - {% else %}
69   - <div class=" divMoreActions">
70   - </div>
71   - {% endif %}
72   -
73   - <div class="col-md-5 pull-right category-card-items">
  64 + {% endif %}
74 65 <a href="" ><i class="fa fa-list" aria-hidden="true"></i></a>
75 66 <a href=""><i class="fa fa-envelope-o" aria-hidden="true"></i></a>
76 67 <a href=""><i class="fa fa-exclamation-triangle" aria-hidden="true"></i></a>
77 68 <a href=""><i class="fa fa-bar-chart" aria-hidden="true"></i></a>
78 69 </div>
79   -
  70 + </div>
80 71 </div>
81 72 </div>
82   - </div>
83   - <div id="{{category.slug}}" class="panel-collapse panel-body collapse category-panel-content">
84   - <input type="hidden" class="log_url" value="{% url 'categories:view_log' category.id %}" />
85   - <input type="hidden" class="log_id" value="" />
86   - {% if category.coordinators.all|length > 0 %}
87   - <h4><b>{% trans "Coordinator(s) " %}: </b>
88   - {{ category.coordinators.all|join:', ' }}
89   - </h4>
90   - {% else %}
91   - <h4> {% trans "It doesn't possess coordinators" %} </h4>
92   - {% endif %}
93   -
94   - {{category.description|safe}}
95   -
96   - {% if user in category.coordinators.all %}
97   - <a href="{% url 'subjects:create' category.slug %}"><button class="create-subject-btn"> {% trans "Create new subject" %} </button></a>
98   - {% endif %}
99   - <div class="panel-group" id="subject-accordion" role="tablist" aria-multiselectable="true">
100   - {% for subject in category.subjects %}
101   - {% include "subjects/subject_card.html" %}
102   - {% endfor %}
103   - </div>
104   -
105   -
106   - </div>
  73 + <div id="{{category.slug}}" class="panel-collapse panel-body collapse category-panel-content">
  74 + <input type="hidden" class="log_url" value="{% url 'categories:view_log' category.id %}" />
  75 + <input type="hidden" class="log_id" value="" />
  76 +
  77 + {% if category.coordinators.all|length > 0 %}
  78 + <h4><b>{% trans "Coordinator(s) " %}: </b>
  79 + {{ category.coordinators.all|join:', ' }}
  80 + </h4>
  81 + {% else %}
  82 + <h4> {% trans "It doesn't possess coordinators" %} </h4>
  83 + {% endif %}
  84 +
  85 + {{category.description|safe}}
  86 +
  87 + {% if user in category.coordinators.all %}
  88 + <a href="{% url 'subjects:create' category.slug %}"><button class="create-subject-btn"> {% trans "Create new subject" %} </button></a>
  89 + {% endif %}
107 90  
108   -
109   -
110   -
111   - {% comment %}
112   - <div id="{{category.slug}}" class="panel-collapse collapse">
113   - {% for subject in subjects %}
114   - {% include "categories/category_card.html" %}
115   - {% endfor %}
  91 + <div class="panel-group subject-group" id="{{ category.slug }}-accordion" role="tablist" aria-multiselectable="true">
  92 + {% for subject in category.subject_category.all %}
  93 + {% include "subjects/subject_card.html" %}
  94 + {% endfor %}
  95 + </div>
116 96 </div>
117   - {% endcomment %}
118   - </div>
119   -
  97 + </div>
120 98 {% elif request.user in category.coordinators.all or request.user.is_staff %}
  99 + <div class="panel panel-invisible special-panel">
  100 + <div class="panel-heading">
  101 + <div class="row">
  102 + <div class="col-md-12 category-header">
  103 + <h4 class="panel-title">
  104 + <a class="category-course-link pull-left" data-parent="#accordion" data-toggle="collapse" href="#{{category.slug}}">
  105 + <button class="btn btn-default btn-xs text-center cat-selector"><i class="fa fa-angle-right fa-2x" aria-hidden="true"></i></button> {{category.name}}
  106 + </a>
  107 + </h4>
121 108  
122   -
123   -
124   - <div class="panel panel-invisible">
125   - <div class="panel-heading">
126   - <div class="row">
127   - <div class="col-md-12 category-header">
128   - <h4 class="panel-title">
129   - <a class="category-course-link pull-left" data-parent="#accordion" data-toggle="collapse" href="#{{category.slug}}">
130   - <button class="btn btn-default btn-xs text-center cat-selector"><i class="fa fa-angle-right fa-2x" aria-hidden="true"></i></button> {{category.name}}
131   - </a>
132   - </h4>
133   - {% if user.is_staff or user in category.coordinators.all %}
134   - <div class=" divMoreActions">
135   - <div class="btn-group">
136   - <button class="btn btn-default btn-sm dropdown-toggle" type="button" id="moreActions" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
137   - <i class="fa fa-ellipsis-v fa-2x" aria-hidden="true"></i>
138   - </button>
  109 + <div class="col-md-5 pull-right category-card-items">
  110 + {% if user.is_staff or user in category.coordinators.all %}
  111 + <a href="" id="moreActions" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
  112 + <i class="fa fa-ellipsis-v" aria-hidden="true"></i>
  113 + </a>
139 114 <ul class="dropdown-menu pull-right" aria-labelledby="moreActions">
140 115 {% if user.is_staff %}
141 116 <li><a href="{% url 'categories:replicate' category.slug %}"><i class="fa fa-files-o fa-fw" aria-hidden="true"></i>{% trans 'Replicate' %}</a></li>
... ... @@ -143,62 +118,43 @@
143 118 <li><a href="{% url 'categories:update' category.slug %}"><i class="fa fa-pencil fa-fw" aria-hidden="true"></i>{% trans 'Edit' %}</a></li>
144 119 <li><a href="javascript:delete_course.get('{% url 'categories:delete' category.slug %}?view=index','#category','#modal_course')"><i class="fa fa-trash fa-fw" aria-hidden="true"></i>&nbsp;{% trans 'Remove' %}</a></li>
145 120 </ul>
146   - </div>
147   - </div>
148   - {% else %}
149   - <div class=" divMoreActions">
150   - </div>
151   - {% endif %}
152   -
153   - <div class="col-md-5 pull-right category-card-items">
  121 + {% endif %}
154 122 <a href="" ><i class="fa fa-list" aria-hidden="true"></i></a>
155 123 <a href=""><i class="fa fa-envelope-o" aria-hidden="true"></i></a>
156 124 <a href=""><i class="fa fa-exclamation-triangle" aria-hidden="true"></i></a>
157 125 <a href=""><i class="fa fa-bar-chart" aria-hidden="true"></i></a>
158 126 </div>
159   -
  127 + </div>
160 128 </div>
161 129 </div>
162   - </div>
163   - <div id="{{category.slug}}" class="panel-collapse panel-body collapse category-panel-content">
164   - <input type="hidden" class="log_url" value="{% url 'categories:view_log' category.id %}" />
165   - <input type="hidden" class="log_id" value="" />
166   - {% if category.coordinators.all|length > 0 %}
167   - <h4><b>{% trans "Coordinator(s) " %}: </b>
168   - {{ category.coordinators.all|join:', ' }}
169   - </h4>
170   - {% else %}
171   - <h4> {% trans "It doesn't possess coordinators" %} </h4>
172   - {% endif %}
173   -
174   - {{category.description|safe}}
175   -
176   - {% if user in category.coordinators.all %}
177   - <a href="{% url 'subjects:create' category.slug %}"><button class="create-subject-btn"> {% trans "Create new subject" %} </button></a>
178   - {% endif %}
179   - <div class="panel-group" id="subject-accordion" role="tablist" aria-multiselectable="true">
180   - {% for subject in category.subjects %}
181   - {% include "subjects/subject_card.html" %}
182   - {% endfor %}
  130 + <div id="{{category.slug}}" class="panel-collapse panel-body collapse category-panel-content">
  131 + <input type="hidden" class="log_url" value="{% url 'categories:view_log' category.id %}" />
  132 + <input type="hidden" class="log_id" value="" />
  133 +
  134 + {% if category.coordinators.all|length > 0 %}
  135 + <h4><b>{% trans "Coordinator(s) " %}: </b>
  136 + {{ category.coordinators.all|join:', ' }}
  137 + </h4>
  138 + {% else %}
  139 + <h4> {% trans "It doesn't possess coordinators" %} </h4>
  140 + {% endif %}
  141 +
  142 + {{category.description|safe}}
  143 +
  144 + {% if user in category.coordinators.all %}
  145 + <a href="{% url 'subjects:create' category.slug %}"><button class="create-subject-btn"> {% trans "Create new subject" %} </button></a>
  146 + {% endif %}
  147 +
  148 + <div class="panel-group subject-group" id="{{ category.slug }}-accordion" role="tablist" aria-multiselectable="true">
  149 + {% for subject in category.subject_category.all %}
  150 + {% include "subjects/subject_card.html" %}
  151 + {% endfor %}
  152 + </div>
183 153 </div>
184   -
185   -
186 154 </div>
187   -
188   -
189   -
190   -
191   - {% comment %}
192   - <div id="{{category.slug}}" class="panel-collapse collapse">
193   - {% for subject in subjects %}
194   - {% include "categories/category_card.html" %}
195   - {% endfor %}
196   - </div>
197   - {% endcomment %}
198   - </div>
199   -
200 155 {% endif %}
201 156 {% endfor %}
  157 + {% pagination request paginator page_obj %}
202 158 </div>
203 159 </div>
204 160 <div id="modal_course">
... ...
categories/views.py
... ... @@ -31,11 +31,11 @@ class IndexView(views.SuperuserRequiredMixin, LoginRequiredMixin, ListView):
31 31 queryset = Category.objects.all()
32 32 template_name = 'categories/list.html'
33 33 context_object_name = 'categories'
  34 + paginate_by = 10
34 35  
35 36 def get_queryset(self):
36 37 result = super(IndexView, self).get_queryset()
37 38  
38   -
39 39 return result
40 40  
41 41 def render_to_response(self, context, **response_kwargs):
... ...
log/admin.py
... ... @@ -3,7 +3,7 @@ from django.contrib import admin
3 3 from .models import Log
4 4  
5 5 class LogAdmin(admin.ModelAdmin):
6   - list_display = ['datetime', 'user', 'action', 'resource', 'context']
  6 + list_display = ['datetime', 'user', 'user_email', 'action', 'resource', 'context']
7 7 search_fields = ['user', 'action', 'resource']
8 8  
9 9 admin.site.register(Log, LogAdmin)
10 10 \ No newline at end of file
... ...
log/decorators.py
... ... @@ -16,7 +16,9 @@ def log_decorator(log_component = &#39;&#39;, log_action = &#39;&#39;, log_resource = &#39;&#39;):
16 16 if request.user.is_authenticated:
17 17  
18 18 log = Log()
19   - log.user = request.user
  19 + log.user = str(request.user)
  20 + log.user_id = request.user.id
  21 + log.user_email = request.user.email
20 22 log.component = log_component
21 23 log.context = request.log_context
22 24 log.action = log_action
... ... @@ -41,7 +43,9 @@ def log_decorator_ajax(log_component = &#39;&#39;, log_action = &#39;&#39;, log_resource = &#39;&#39;):
41 43 if request.user.is_authenticated:
42 44  
43 45 log = Log()
44   - log.user = request.user
  46 + log.user = str(request.user)
  47 + log.user_id = request.user.id
  48 + log.user_email = request.user.email
45 49 log.component = log_component
46 50 log.context = ""
47 51 log.action = log_action
... ...
log/migrations/0001_initial.py
1 1 # -*- coding: utf-8 -*-
2   -# Generated by Django 1.10 on 2016-12-29 20:07
  2 +# Generated by Django 1.10 on 2017-01-04 21:26
3 3 from __future__ import unicode_literals
4 4  
5   -from django.conf import settings
6 5 import django.contrib.postgres.fields.jsonb
7 6 from django.db import migrations, models
8   -import django.db.models.deletion
9 7  
10 8  
11 9 class Migration(migrations.Migration):
... ... @@ -13,7 +11,6 @@ class Migration(migrations.Migration):
13 11 initial = True
14 12  
15 13 dependencies = [
16   - migrations.swappable_dependency(settings.AUTH_USER_MODEL),
17 14 ]
18 15  
19 16 operations = [
... ... @@ -25,12 +22,14 @@ class Migration(migrations.Migration):
25 22 ('context', django.contrib.postgres.fields.jsonb.JSONField(blank=True, verbose_name='Context')),
26 23 ('action', models.TextField(verbose_name='Action')),
27 24 ('resource', models.TextField(verbose_name='Resource')),
  25 + ('user', models.CharField(max_length=100, verbose_name='Actor')),
  26 + ('user_id', models.IntegerField(verbose_name='Actor id')),
  27 + ('user_email', models.EmailField(max_length=254, verbose_name='Actor Mail')),
28 28 ('datetime', models.DateTimeField(auto_now_add=True, verbose_name='Date and Time of action')),
29   - ('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL, verbose_name='Actor')),
30 29 ],
31 30 options={
32   - 'verbose_name_plural': 'Logs',
33 31 'verbose_name': 'Log',
  32 + 'verbose_name_plural': 'Logs',
34 33 },
35 34 ),
36 35 ]
... ...
log/mixins.py
... ... @@ -12,7 +12,9 @@ class LogMixin(object):
12 12  
13 13 def createLog(self, actor = None, component = '', log_action = '', log_resource = '', context = {}):
14 14 log = Log()
15   - log.user = actor
  15 + log.user = str(actor)
  16 + log.user_id = actor.id
  17 + log.user_email = actor.email
16 18 log.context = context
17 19 log.component = component
18 20 log.action = log_action
... ...
log/models.py
... ... @@ -9,7 +9,9 @@ class Log(models.Model):
9 9 context = JSONField(_('Context'), blank = True)
10 10 action = models.TextField(_('Action'))
11 11 resource = models.TextField(_('Resource'))
12   - user = models.ForeignKey(User, verbose_name = _('Actor'))
  12 + user = models.CharField(_('Actor'), max_length = 100)
  13 + user_id = models.IntegerField(_('Actor id'))
  14 + user_email = models.EmailField(_('Actor Mail'))
13 15 datetime = models.DateTimeField(_("Date and Time of action"), auto_now_add = True)
14 16  
15 17 class Meta:
... ...
subjects/templates/subjects/initial.html
1 1 {% extends "categories/home.html" %}
2 2  
  3 +{% load pagination %}
  4 +
3 5 {% block content %}
4 6  
5 7 <div id="" class="col-md-12">
6 8 <div class="users-cloud">
7   - <ul class=" users-cloud">
8   - {% for user in users %}
9   - <li>{{user.social_name}}</li>
10   - {% endfor %}
11   - </ul>
  9 + <ul class=" users-cloud">
  10 + {% for user in users %}
  11 + <li>{{user.social_name}}</li>
  12 + {% endfor %}
  13 + </ul>
12 14 </div>
13 15 </div>
  16 +
14 17 <div class="col-md-12 cards-content">
15 18 <div class="panel-group" id="subject-accordion" role="tablist" aria-multiselectable="true">
16   - {% for subject in subjects %}
17   - {% include "subjects/subject_card.html" %}
18   - {% endfor %}
  19 + {% for subject in subjects %}
  20 + {% include "subjects/subject_card.html" with accordion_id="subject-accordion" %}
  21 + {% endfor %}
19 22 </div>
20 23 </div>
21 24  
22   -
23   - <div class="pagination">
24   - <span class="page-links">
25   - {% if subjects.has_previous %}
26   - <a href="?page={{ subjects.previous_page_number }}">previous</a>
27   - {% endif %}
28   - <span class="page-current">
29   - Page {{ subjects.number }} of {{ subjects.paginator.num_pages }}.
30   - </span>
31   - {% if subjects.has_next %}
32   - <a href="?page={{ subjects.next_page_number }}">next</a>
33   - {% endif %}
34   - </span>
35   - </div>
  25 + {% pagination request paginator page_obj %}
36 26  
37 27 {% endblock content %}
38 28 \ No newline at end of file
... ...
subjects/templates/subjects/list.html
1 1 {% extends 'categories/home.html' %}
2 2  
3   -{% load static i18n permission_tags %}
  3 +{% load static i18n pagination %}
4 4 {% load django_bootstrap_breadcrumbs %}
5 5  
6 6 {% block javascript%}
... ... @@ -42,7 +42,7 @@
42 42 <div class="panel-group" id="accordion" role="tablist" aria-multiselectable="true">
43 43 {% for category in categories %}
44 44 {% if category.visible %}
45   - <div class="panel panel-info">
  45 + <div class="panel panel-info category-panel">
46 46 <div class="panel-heading">
47 47 <div class="row">
48 48 <div class="col-md-12 category-header">
... ... @@ -51,27 +51,20 @@
51 51 <button class="btn btn-default btn-xs text-center cat-selector"><i class="fa fa-angle-right fa-2x" aria-hidden="true"></i></button> {{category.name}}
52 52 </a>
53 53 </h4>
54   - {% if user.is_staff or user in category.coordinators.all %}
55   - <div class=" divMoreActions">
56   - <div class="btn-group">
57   - <button class="btn btn-default btn-sm dropdown-toggle" type="button" id="moreActions" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
58   - <i class="fa fa-ellipsis-v fa-2x" aria-hidden="true"></i>
59   - </button>
60   - <ul class="dropdown-menu pull-right" aria-labelledby="moreActions">
61   - {% if user.is_staff %}
62   - <li><a href="{% url 'categories:replicate' category.slug %}"><i class="fa fa-files-o fa-fw" aria-hidden="true"></i>{% trans 'Replicate' %}</a></li>
63   - {% endif %}
64   - <li><a href="{% url 'categories:update' category.slug %}"><i class="fa fa-pencil fa-fw" aria-hidden="true"></i>{% trans 'Edit' %}</a></li>
65   - <li><a href="javascript:delete_course.get('{% url 'categories:delete' category.slug %}?view=index','#category','#modal_course')"><i class="fa fa-trash fa-fw" aria-hidden="true"></i>&nbsp;{% trans 'Remove' %}</a></li>
66   - </ul>
67   - </div>
68   - </div>
69   - {% else %}
70   - <div class=" divMoreActions">
71   - </div>
72   - {% endif %}
73 54  
74 55 <div class="col-md-5 pull-right category-card-items">
  56 + {% if user.is_staff or user in category.coordinators.all %}
  57 + <a href="" id="moreActions" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
  58 + <i class="fa fa-ellipsis-v" aria-hidden="true"></i>
  59 + </a>
  60 + <ul class="dropdown-menu pull-right" aria-labelledby="moreActions">
  61 + {% if user.is_staff %}
  62 + <li><a href="{% url 'categories:replicate' category.slug %}"><i class="fa fa-files-o fa-fw" aria-hidden="true"></i>{% trans 'Replicate' %}</a></li>
  63 + {% endif %}
  64 + <li><a href="{% url 'categories:update' category.slug %}"><i class="fa fa-pencil fa-fw" aria-hidden="true"></i>{% trans 'Edit' %}</a></li>
  65 + <li><a href="javascript:delete_course.get('{% url 'categories:delete' category.slug %}?view=index','#category','#modal_course')"><i class="fa fa-trash fa-fw" aria-hidden="true"></i>&nbsp;{% trans 'Remove' %}</a></li>
  66 + </ul>
  67 + {% endif %}
75 68 <a href="" ><i class="fa fa-list" aria-hidden="true"></i></a>
76 69 <a href=""><i class="fa fa-envelope-o" aria-hidden="true"></i></a>
77 70 <a href=""><i class="fa fa-exclamation-triangle" aria-hidden="true"></i></a>
... ... @@ -97,7 +90,7 @@
97 90 <a href="{% url 'subjects:create' category.slug %}"><button class="create-subject-btn"> {% trans "Create new subject" %} </button></a>
98 91 {% endif %}
99 92  
100   - <div class="panel-group" id="{{ category.slug }}-accordion" role="tablist" aria-multiselectable="true">
  93 + <div class="panel-group subject-group" id="{{ category.slug }}-accordion" role="tablist" aria-multiselectable="true">
101 94 {% for subject in category.subject_category.all %}
102 95 {% include "subjects/subject_card.html" %}
103 96 {% endfor %}
... ... @@ -105,7 +98,7 @@
105 98 </div>
106 99 </div>
107 100 {% elif request.user in category.coordinators.all %}
108   - <div class="panel panel-danger">
  101 + <div class="panel panel-danger special-panel">
109 102 <div class="panel-heading">
110 103 <div class="row">
111 104 <div class="col-md-12 category-header">
... ... @@ -114,27 +107,20 @@
114 107 <button class="btn btn-default btn-xs text-center cat-selector"><i class="fa fa-angle-right fa-2x" aria-hidden="true"></i></button> {{category.name}}
115 108 </a>
116 109 </h4>
117   - {% if user.is_staff or user in category.coordinators.all %}
118   - <div class=" divMoreActions">
119   - <div class="btn-group">
120   - <button class="btn btn-default btn-sm dropdown-toggle" type="button" id="moreActions" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
121   - <i class="fa fa-ellipsis-v fa-2x" aria-hidden="true"></i>
122   - </button>
123   - <ul class="dropdown-menu pull-right" aria-labelledby="moreActions">
124   - {% if user.is_staff %}
125   - <li><a href="{% url 'categories:replicate' category.slug %}"><i class="fa fa-files-o fa-fw" aria-hidden="true"></i>{% trans 'Replicate' %}</a></li>
126   - {% endif %}
127   - <li><a href="{% url 'categories:update' category.slug %}"><i class="fa fa-pencil fa-fw" aria-hidden="true"></i>{% trans 'Edit' %}</a></li>
128   - <li><a href="javascript:delete_course.get('{% url 'categories:delete' category.slug %}?view=index','#category','#modal_course')"><i class="fa fa-trash fa-fw" aria-hidden="true"></i>&nbsp;{% trans 'Remove' %}</a></li>
129   - </ul>
130   - </div>
131   - </div>
132   - {% else %}
133   - <div class=" divMoreActions">
134   - </div>
135   - {% endif %}
136 110  
137 111 <div class="col-md-5 pull-right category-card-items">
  112 + {% if user.is_staff or user in category.coordinators.all %}
  113 + <a href="" id="moreActions" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
  114 + <i class="fa fa-ellipsis-v" aria-hidden="true"></i>
  115 + </a>
  116 + <ul class="dropdown-menu pull-right" aria-labelledby="moreActions">
  117 + {% if user.is_staff %}
  118 + <li><a href="{% url 'categories:replicate' category.slug %}"><i class="fa fa-files-o fa-fw" aria-hidden="true"></i>{% trans 'Replicate' %}</a></li>
  119 + {% endif %}
  120 + <li><a href="{% url 'categories:update' category.slug %}"><i class="fa fa-pencil fa-fw" aria-hidden="true"></i>{% trans 'Edit' %}</a></li>
  121 + <li><a href="javascript:delete_course.get('{% url 'categories:delete' category.slug %}?view=index','#category','#modal_course')"><i class="fa fa-trash fa-fw" aria-hidden="true"></i>&nbsp;{% trans 'Remove' %}</a></li>
  122 + </ul>
  123 + {% endif %}
138 124 <a href="" ><i class="fa fa-list" aria-hidden="true"></i></a>
139 125 <a href=""><i class="fa fa-envelope-o" aria-hidden="true"></i></a>
140 126 <a href=""><i class="fa fa-exclamation-triangle" aria-hidden="true"></i></a>
... ... @@ -160,7 +146,7 @@
160 146 <a href="{% url 'subjects:create' category.slug %}"><button class="create-subject-btn"> {% trans "Create new subject" %} </button></a>
161 147 {% endif %}
162 148  
163   - <div class="panel-group" id="{{ category.slug }}-accordion" role="tablist" aria-multiselectable="true">
  149 + <div class="panel-group subject-group" id="{{ category.slug }}-accordion" role="tablist" aria-multiselectable="true">
164 150 {% for subject in category.subject_category.all %}
165 151 {% include "subjects/subject_card.html" %}
166 152 {% endfor %}
... ... @@ -169,6 +155,7 @@
169 155 </div>
170 156 {% endif %}
171 157 {% endfor %}
  158 + {% pagination request paginator page_obj %}
172 159 </div>
173 160 </div>
174 161 <div id="modal_course">
... ...
subjects/templates/subjects/subject_card.html
1 1 {% load static i18n permission_tags %}
2 2  
3   -<div class="panel panel-info">
  3 +<div class="panel panel-info subject-panel">
4 4 <div class="panel-heading">
5 5 <div class="row">
6 6 <div class="col-md-12 category-header">
7 7 <h4 class="panel-title">
8   - <a class="category-course-link pull-left" data-parent="#{{ subject.category.slug }}-accordion" data-toggle="collapse" href="#{{subject.slug}}">
  8 + <a class="category-course-link pull-left" data-parent="#{% if accordion_id %}{{ accordion_id }}{% else %}{{ subject.category.slug }}-accordion{% endif %}" data-toggle="collapse" href="#{{subject.slug}}">
9 9 <button class="btn btn-default btn-xs text-center cat-selector"><i class="fa fa-angle-right fa-2x" aria-hidden="true"></i></button> {{subject.name}}
10 10 </a>
11 11 </h4>
12   - {% if request.user in subject.professor.all or request.user in category.coordinators.all %}
13   - <div class="divMoreActions" >
14   - <div class="btn-group">
15   - <button class="btn btn-default btn-sm dropdown-toggle" type="button" id="moreActions" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
16   - <i class="fa fa-ellipsis-v fa-2x" aria-hidden="true"></i>
17   - </button>
18   - <ul class="dropdown-menu pull-right" aria-labelledby="moreActions">
19   - <li><a href="#"><i class="fa fa-files-o fa-fw" aria-hidden="true"></i>{% trans 'Replicate' %}</a></li>
20   - <li><a href="#"><i class="fa fa-pencil fa-fw" aria-hidden="true"></i>{% trans 'Edit' %}</a></li>
21   - <li><a href="#"><i class="fa fa-trash fa-fw" aria-hidden="true"></i>&nbsp;{% trans 'Remove' %}</a></li>
22   - </ul>
23   - </div>
24   - </div>
25   - {% endif %}
  12 +
26 13 <div class="col-md-5 pull-right category-card-items">
  14 + {% if request.user in subject.professor.all or request.user in category.coordinators.all %}
  15 + <a href="" id="moreActions" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
  16 + <i class="fa fa-ellipsis-v" aria-hidden="true"></i>
  17 + </a>
  18 + <ul class="dropdown-menu pull-right" aria-labelledby="moreActions">
  19 + <li><a href="#"><i class="fa fa-files-o fa-fw" aria-hidden="true"></i>{% trans 'Replicate' %}</a></li>
  20 + <li><a href="#"><i class="fa fa-pencil fa-fw" aria-hidden="true"></i>{% trans 'Edit' %}</a></li>
  21 + <li><a href="#"><i class="fa fa-trash fa-fw" aria-hidden="true"></i>&nbsp;{% trans 'Remove' %}</a></li>
  22 + </ul>
  23 + {% endif %}
27 24 <a href="" ><i class="fa fa-list" aria-hidden="true"></i></a>
28 25 <a href=""><i class="fa fa-envelope-o" aria-hidden="true"></i></a>
29 26 <a href=""><i class="fa fa-exclamation-triangle" aria-hidden="true"></i></a>
... ...
subjects/views.py
... ... @@ -32,30 +32,26 @@ class HomeView(LoginRequiredMixin, ListView):
32 32 redirect_field_name = 'next'
33 33 queryset = Subject.objects.all()
34 34 template_name = 'subjects/initial.html'
35   -
  35 + context_object_name = 'subjects'
  36 + paginate_by = 10
36 37  
37   - def get_context_data(self, **kwargs):
38   - context = super(HomeView, self).get_context_data(**kwargs)
  38 + def get_queryset(self):
39 39 if self.request.user.is_staff:
40 40 subjects = Subject.objects.all()
41 41 else:
42 42 subjects = Subject.objects.all()
43 43 subjects = [subject for subject in subjects if self.request.user in subject.students.all() or self.request.user in subject.professor.all()]
  44 +
44 45  
45 46 paginator = Paginator(subjects, 10)
46 47  
47   - page = self.request.GET.get('page')
48   - try:
49   - subjects = paginator.page(page)
50   - except PageNotAnInteger:
51   - # If page is not an integer, deliver first page.
52   - subjects = paginator.page(1)
53 48  
54   - except EmptyPage:
55   - # If page is out of range (e.g. 9999), deliver last page of results.
56   - subjects = paginator.page(paginator.num_pages)
  49 + return subjects
57 50  
58   - context['subjects'] = subjects
  51 + def get_context_data(self, **kwargs):
  52 + context = super(HomeView, self).get_context_data(**kwargs)
  53 + context['title'] = _('Home')
  54 +
59 55 #bringing users
60 56 users = User.objects.all()
61 57 context['users'] = users
... ... @@ -69,11 +65,22 @@ class IndexView(LoginRequiredMixin, ListView):
69 65 queryset = Category.objects.all()
70 66 template_name = 'subjects/list.html'
71 67 context_object_name = 'categories'
72   -
  68 + paginate_by = 10
73 69  
74 70 def get_queryset(self):
75   - result = super(IndexView, self).get_queryset()
76   - return result
  71 + categories = Category.objects.all().order_by('name')
  72 +
  73 + if not self.request.user.is_staff:
  74 + if not self.kwargs.get('option'):
  75 + categories = Category.objects.filter(visible=True)
  76 +
  77 + for category in categories:
  78 + category.subjects = Subject.objects.filter(category= category)
  79 +
  80 + categories = [category for category in categories if category.subjects.count() > 0 or self.request.user in category.coordinators.all()]
  81 + #So I remove all categories that doesn't have the possibility for the user to be on
  82 +
  83 + return categories
77 84  
78 85 def render_to_response(self, context, **response_kwargs):
79 86 if self.request.user.is_staff:
... ... @@ -81,8 +88,6 @@ class IndexView(LoginRequiredMixin, ListView):
81 88 else:
82 89 context['page_template'] = "categories/home_teacher_student.html"
83 90  
84   -
85   -
86 91 if self.request.is_ajax():
87 92 if self.request.user.is_staff:
88 93 self.template_name = "categories/home_admin_content.html"
... ... @@ -101,22 +106,6 @@ class IndexView(LoginRequiredMixin, ListView):
101 106 context['all'] = True
102 107 context['title'] = _('All Subjects')
103 108  
104   - if self.request.user.is_staff:
105   - categories = self.get_queryset().order_by('name')
106   - else:
107   - if self.kwargs.get('option'):
108   - categories = self.get_queryset().order_by('name')
109   - for category in categories:
110   - category.subjects = Subject.objects.filter(category= category)
111   - else:
112   - categories = self.get_queryset().filter(visible=True)
113   - for category in categories:
114   - category.subjects = Subject.objects.filter(category= category)
115   -
116   - categories = [category for category in categories if category.subjects.count() > 0 or self.request.user in category.coordinators.all()]
117   - #So I remove all categories that doesn't have the possibility for the user to be on
118   -
119   - context['categories'] = categories
120 109 context['subjects_menu_active'] = 'subjects_menu_active'
121 110  
122 111 return context
... ...