# Create your views here. from django.contrib.auth.decorators import login_required from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger from django.shortcuts import get_object_or_404, render, redirect from django.template.context import RequestContext from django.conf import settings from .utils import slug2id from .models import Notification @login_required def all(request): """ Index page for authenticated user """ if getattr(settings, 'NOTIFICATIONS_SOFT_DELETE', False): qs = request.user.notifications.active() else: qs = request.user.notifications.all() return render(request, 'notifications/list.html', { 'notifications': qs }) actions = request.user.notifications.all() paginator = Paginator(actions, 16) # Show 16 notifications per page page = request.GET.get('p') try: action_list = paginator.page(page) except PageNotAnInteger: # If page is not an integer, deliver first page. action_list = paginator.page(1) except EmptyPage: # If page is out of range (e.g. 9999), deliver last page of results. action_list = paginator.page(paginator.num_pages) return render_to_response('notifications/list.html', { 'member': request.user, 'action_list': action_list, }, context_instance=RequestContext(request)) @login_required def unread(request): return render(request, 'notifications/list.html', { 'notifications': request.user.notifications.unread() }) @login_required def mark_all_as_read(request): request.user.notifications.mark_all_as_read() _next = request.GET.get('next') if _next: return redirect(_next) return redirect('notifications:all') @login_required def mark_as_read(request, slug=None): id = slug2id(slug) notification = get_object_or_404(Notification, recipient=request.user, id=id) notification.mark_as_read() _next = request.GET.get('next') if _next: return redirect(_next) return redirect('notifications:all') @login_required def mark_as_unread(request, slug=None): id = slug2id(slug) notification = get_object_or_404(Notification, recipient=request.user, id=id) notification.mark_as_unread() _next = request.GET.get('next') if _next: return redirect(_next) return redirect('notifications:all') @login_required def delete(request, slug=None): _id = slug2id(slug) notification = get_object_or_404(Notification, recipient=request.user, id=_id) if getattr(settings, 'NOTIFICATIONS_SOFT_DELETE', False): notification.deleted = True notification.save() else: notification.delete() _next = request.GET.get('next') if _next: return redirect(_next) return redirect('notifications:all')