diff --git a/amadeus/static/css/themes/green.css b/amadeus/static/css/themes/green.css index 256ca06..f7d7d1f 100644 --- a/amadeus/static/css/themes/green.css +++ b/amadeus/static/css/themes/green.css @@ -575,6 +575,10 @@ a.add-row { background: #FFFFFF; } +.mural-category { + background: #EEE; +} + .btn:not(.btn-raised):not(.btn-link):focus, .btn:not(.btn-raised):not(.btn-link):hover, .input-group-btn .btn:not(.btn-raised):not(.btn-link):focus, .input-group-btn .btn:not(.btn-raised):not(.btn-link):hover { background-color: initial; } diff --git a/amadeus/templatetags/permissions_tags.py b/amadeus/templatetags/permissions_tags.py index 005bf06..ab9d2ca 100644 --- a/amadeus/templatetags/permissions_tags.py +++ b/amadeus/templatetags/permissions_tags.py @@ -5,6 +5,10 @@ from amadeus import permissions register = template.Library() @register.assignment_tag +def category_permissions(user, category): + return permissions.has_category_permissions(user, category) + +@register.assignment_tag def subject_permissions(user, subject): return permissions.has_subject_permissions(user, subject) diff --git a/mural/templates/mural/list.html b/mural/templates/mural/list.html index d6eeb2e..260eedd 100644 --- a/mural/templates/mural/list.html +++ b/mural/templates/mural/list.html @@ -8,14 +8,14 @@ {% trans 'Mural: General' as general %} - {% breadcrumb general 'mural:manage_general' %} + {% breadcrumb general 'mural:manage_general' %} {% endblock %} {% block content %}
diff --git a/mural/templates/mural/list_category.html b/mural/templates/mural/list_category.html new file mode 100644 index 0000000..7c0db39 --- /dev/null +++ b/mural/templates/mural/list_category.html @@ -0,0 +1,113 @@ +{% extends 'base.html' %} + +{% load static i18n pagination permissions_tags mural_filters %} +{% load django_bootstrap_breadcrumbs %} + +{% block breadcrumbs %} + {{ block.super }} + + {% trans 'Mural: Per Category' as category %} + + {% breadcrumb category 'mural:manage_category' %} +{% endblock %} + +{% block content %} +
+ +
+ +
+ {% if categories.count > 0 %} +
+ {% for category in categories %} + {% category_permissions request.user category as has_category_permissions %} + + {% if category.visible %} +
+
+ {% elif has_category_permissions %} +
+
+ {% endif %} + +
+
+

+ + {{ category.name }} + + ({{ category|unviewed:request.user }}) + +

+ +
+ {% if has_category_permissions %} + + + {% endif %} +
+
+
+
+
+
+
+
+
+
+ +
+
+
+

{% trans 'Wish to make a new post?' %}

+
+
+
+
+ +
+
+
+
+

{% trans 'Filter' %}

+ +
+
+ +
+
+ +
+ + +
+
+
+
+
+ {% endfor %} + + {% pagination request paginator page_obj %} +
+ {% endif %} +
+ + +{% endblock %} \ No newline at end of file diff --git a/mural/templatetags/mural_filters.py b/mural/templatetags/mural_filters.py index bc5288d..70e2f12 100644 --- a/mural/templatetags/mural_filters.py +++ b/mural/templatetags/mural_filters.py @@ -1,7 +1,7 @@ from django import template from django.utils.translation import ugettext_lazy as _ -from mural.models import MuralFavorites +from mural.models import MuralFavorites, MuralVisualizations register = template.Library() @@ -42,4 +42,10 @@ def fav_class(post, user): if MuralFavorites.objects.filter(post = post, user = user).exists(): return "btn_unfav" - return "btn_fav" \ No newline at end of file + return "btn_fav" + +@register.filter(name = 'unviewed') +def unviewed(category, user): + count = MuralVisualizations.objects.filter(user = user, viewed = False, post__categorypost__space = category).count() + + return count \ No newline at end of file diff --git a/mural/urls.py b/mural/urls.py index b505c1f..b3b744a 100644 --- a/mural/urls.py +++ b/mural/urls.py @@ -3,6 +3,7 @@ from . import views urlpatterns = [ url(r'^$', views.GeneralIndex.as_view(), name='manage_general'), + url(r'^categories/$', views.CategoryIndex.as_view(), name='manage_category'), url(r'^create_gen/$', views.GeneralCreate.as_view(), name='create_general'), url(r'^update_gen/(?P[\w_-]+)/$', views.GeneralUpdate.as_view(), name='update_general'), url(r'^delete_gen/(?P[\w_-]+)/$', views.GeneralDelete.as_view(), name='delete_general'), diff --git a/mural/views.py b/mural/views.py index 39b26e0..1b54364 100644 --- a/mural/views.py +++ b/mural/views.py @@ -14,11 +14,16 @@ from django.db.models import Q, Count from channels import Group import json +from categories.models import Category +from subjects.models import Subject from users.models import User from .models import Mural, GeneralPost, CategoryPost, SubjectPost, MuralVisualizations, MuralFavorites, Comment from .forms import GeneralPostForm, CommentForm +""" + Section for GeneralPost classes +""" class GeneralIndex(LoginRequiredMixin, generic.ListView): login_url = reverse_lazy("users:login") redirect_field_name = 'next' @@ -201,7 +206,45 @@ class GeneralDelete(LoginRequiredMixin, generic.DeleteView): for user in users: Group("user-%s" % user.id).send({'text': json.dumps({"type": notify_type, "subtype": "delete", "pathname": pathname, "post_id": self.object.id})}) - return reverse_lazy('mural:deleted_post') + return reverse_lazy('mural:deleted_post') + +""" + Section for CategoryPost classes +""" +class CategoryIndex(LoginRequiredMixin, generic.ListView): + login_url = reverse_lazy("users:login") + redirect_field_name = 'next' + + template_name = 'mural/list_category.html' + context_object_name = "categories" + paginate_by = 10 + + totals = {} + + def get_queryset(self): + user = self.request.user + + if user.is_staff: + categories = Category.objects.all() + else: + categories = Category.objects.filter(Q(coordinators__pk = user.pk) | Q(subject_category__professor__pk = user.pk) | Q(subject_category__students__pk = user.pk, visible = True)).distinct() + + self.totals['general'] = MuralVisualizations.objects.filter(Q(user = user) & Q(viewed = False) & (Q(post__generalpost__isnull = False) | Q(comment__post__generalpost__isnull = False))).distinct().count() + self.totals['category'] = MuralVisualizations.objects.filter(Q(user = user) & Q(viewed = False) & (Q(post__categorypost__space__coordinators = user) | Q(comment__post__categorypost__space__coordinators = user) | Q(post__categorypost__space__subject_category__professor = user) | Q(post__categorypost__space__subject_category__students = user) | Q(comment__post__categorypost__space__subject_category__professor = user) | Q(comment__post__categorypost__space__subject_category__students = user))).distinct().count() + self.totals['subject'] = MuralVisualizations.objects.filter(Q(user = user) & Q(viewed = False) & (Q(post__subjectpost__space__professor = user) | Q(comment__post__subjectpost__space__professor = user) | Q(post__subjectpost__space__students = user) | Q(comment__post__subjectpost__space__students = user))).distinct().count() + + print(categories) + + return categories + + def get_context_data(self, **kwargs): + context = super(CategoryIndex, self).get_context_data(**kwargs) + + context['title'] = _('Mural - Per Category') + context['totals'] = self.totals + context['mural_menu_active'] = 'subjects_menu_active' + + return context def render_gen_post(request, post, msg): post = get_object_or_404(GeneralPost, id = post) -- libgit2 0.21.2