Source code for dashboard.views
""" views for dashboard """
from django.http import Http404
from django.shortcuts import render
from django.contrib.auth.decorators import login_required
from masterpoints.views import get_masterpoints
from payments.views.core import get_balance_detail, get_user_pending_payments
from events.views.core import get_events
from results.views.core import get_recent_results
from utils.models import Slug
from organisations.club_admin_core import user_has_outstanding_membership_fees
from utils.utils import cobalt_paginator
from forums.models import Post, ForumFollow
from rbac.core import rbac_user_blocked_for_model
from django.shortcuts import redirect
import logging
logger = logging.getLogger("cobalt")
[docs]
@login_required()
def dashboard(request):
"""view to force the login prompt to come up"""
return home(request)
[docs]
def home(request):
"""Home page"""
if request.user.is_authenticated:
system_number = request.user.system_number
masterpoints = get_masterpoints(system_number)
payments = get_balance_detail(request.user)
posts = get_posts(request)
posts2 = get_announcements(request)
events, unpaid, more_events, total_events = get_events(request.user)
recent_results, more_results = get_recent_results(request.user)
user_pending_payments = get_user_pending_payments(system_number)
pending_memberships = user_has_outstanding_membership_fees(request.user)
# Show tour for this page?
tour = request.GET.get("tour", None)
return render(
request,
"dashboard/home.html",
{
"mp": masterpoints,
"payments": payments,
"posts": posts,
"posts2": posts2,
"events": events,
"unpaid": unpaid,
"more_events": more_events,
"total_events": total_events,
"recent_results": recent_results,
"user_pending_payments": user_pending_payments,
"tour": tour,
"pending_memberships": pending_memberships,
},
)
else: # not logged in
return redirect("logged_out")
[docs]
def logged_out(request):
"""Home screen for logged out users"""
# Check if user should be here
if request.user.is_authenticated:
return redirect("/")
posts = get_announcements_logged_out()
return render(request, "dashboard/logged_out.html", {"posts": posts})
[docs]
def help(request):
"""
help page for new bridge users
"""
return render(request, "dashboard/help.html")
[docs]
def get_announcements(request):
"""internal function to get Posts for forum_type="Announcements" """
# TODO: Add clubs
posts_list = (
Post.objects.filter(forum__forum_type="Announcement")
.select_related("author", "forum")
.order_by("-created_date")
)
return cobalt_paginator(request, posts_list, 20)
[docs]
def get_posts(request):
"""internal function to get Posts"""
# Get users preferences plus default Forums
# TODO: ADD EVERYONE
forum_list = list(
ForumFollow.objects.filter(user=request.user).values_list("forum", flat=True)
)
# get list of forums user cannot access
blocked = rbac_user_blocked_for_model(
user=request.user, app="forums", model="forum", action="view"
)
# Remove anything blocked
if forum_list:
forum_list_allowed = [item for item in forum_list if item not in blocked]
posts_list = (
Post.objects.filter(forum__in=forum_list_allowed)
.filter(forum__forum_type="Discussion")
.select_related("author", "forum")
.order_by("-created_date")
)
# Otherwise load everything not blocked
else:
posts_list = (
Post.objects.exclude(forum__in=blocked)
.filter(forum__forum_type="Discussion")
.select_related("author", "forum")
.order_by("-created_date")
)
return cobalt_paginator(request, posts_list, 20)
[docs]
def get_announcements_logged_out():
"""internal function to get Posts for logged out users
For now just return the latest 3 posts in Forum id=1
"""
return Post.objects.all().order_by("-created_date")[:3]
[docs]
def slug(request, slug_name):
"""Try to convert the slug to a redirected path"""
slug_item = Slug.objects.filter(slug=slug_name).first()
if slug_item:
return redirect("/" + slug_item.redirect_path)
raise Http404()