224 lines
7.0 KiB
Python
224 lines
7.0 KiB
Python
from django.shortcuts import render, redirect
|
|
from django.contrib.auth.decorators import login_required, permission_required
|
|
from django.db.models import CharField, Value
|
|
from authentication.models import User
|
|
from reviews.models import Ticket, Review, UserFollows
|
|
from reviews.forms import TicketForm, ReviewForm, ToFollowForm
|
|
from itertools import chain
|
|
|
|
|
|
@login_required
|
|
def home(request):
|
|
tickets = Ticket.objects.all()
|
|
return render(request,
|
|
'reviews/home.html',
|
|
{'tickets': tickets})
|
|
|
|
|
|
@login_required
|
|
def flux(request):
|
|
followed = UserFollows.objects.filter(user=request.user)
|
|
users_followed = []
|
|
for userf in followed:
|
|
users_followed.append(userf.followed_user)
|
|
tickets = Ticket.objects.filter(user__in=users_followed)
|
|
tickets = tickets.annotate(content_type=Value('TICKET', CharField()))
|
|
reviews = Review.objects.filter(user__in=users_followed)
|
|
reviews = reviews.annotate(content_type=Value('REVIEW', CharField()))
|
|
posts = sorted(
|
|
chain(reviews, tickets),
|
|
key=lambda post: post.time_created,
|
|
reverse=True)
|
|
return render(request,
|
|
'reviews/flux.html',
|
|
{'posts': posts})
|
|
|
|
|
|
@login_required
|
|
def posts(request):
|
|
tickets = Ticket.objects.filter(user=request.user)
|
|
reviews = Review.objects.filter(user=request.user)
|
|
return render(request,
|
|
'reviews/posts.html',
|
|
{'tickets': tickets, 'reviews': reviews})
|
|
|
|
|
|
@login_required
|
|
def ticket(request, ticket_id):
|
|
ticket = Ticket.objects.get(id=ticket_id)
|
|
return render(request,
|
|
'reviews/ticket.html',
|
|
{'ticket': ticket})
|
|
|
|
|
|
@login_required
|
|
def create_ticket(request):
|
|
tickets = Ticket.objects.all()
|
|
ticket_form = TicketForm()
|
|
if request.method == 'POST':
|
|
ticket_form = TicketForm(request.POST, request.FILES)
|
|
if ticket_form.is_valid():
|
|
ticket = ticket_form.save(commit=False)
|
|
ticket.user = request.user
|
|
ticket.save()
|
|
return redirect('flux')
|
|
return render(request,
|
|
'reviews/ticket_create.html',
|
|
context={'ticket_form': ticket_form, 'tickets': tickets})
|
|
|
|
|
|
@login_required
|
|
@permission_required('review.change_ticket', raise_exception=True)
|
|
def update_ticket(request, ticket_id):
|
|
ticket = Ticket.objects.get(id=ticket_id)
|
|
if request.method == 'POST':
|
|
ticket_form = TicketForm(request.POST, instance=ticket)
|
|
if ticket_form.is_valid():
|
|
ticket = ticket_form.save()
|
|
return redirect('flux')
|
|
else:
|
|
ticket_form = TicketForm(instance=ticket)
|
|
|
|
return render(request,
|
|
'reviews/ticket_update.html',
|
|
{'ticket_form': ticket_form})
|
|
|
|
|
|
@login_required
|
|
@permission_required('review.delete_ticket', raise_exception=True)
|
|
def delete_ticket(request, ticket_id):
|
|
ticket = Ticket.objects.get(id=ticket_id)
|
|
if request.method == 'POST':
|
|
ticket.delete()
|
|
return redirect('flux')
|
|
|
|
return render(request,
|
|
'reviews/ticket_delete.html',
|
|
{'ticket': ticket})
|
|
|
|
|
|
@login_required
|
|
def review(request, review_id):
|
|
review = Review.objects.get(id=review_id)
|
|
return render(request,
|
|
'reviews/review.html',
|
|
{'review': review})
|
|
|
|
|
|
@login_required
|
|
def create_review(request):
|
|
ticket_form = TicketForm()
|
|
review_form = ReviewForm()
|
|
if request.method == 'POST':
|
|
ticket_form = TicketForm(request.POST, request.FILES)
|
|
review_form = ReviewForm(request.POST)
|
|
print(request.POST)
|
|
|
|
if all([ticket_form.is_valid(), review_form.is_valid()]):
|
|
ticket = ticket_form.save(commit=False)
|
|
review = review_form.save(commit=False)
|
|
review.user = ticket.user = request.user
|
|
review.save()
|
|
ticket.save()
|
|
review.ticket = ticket
|
|
ticket.review = review
|
|
ticket.save()
|
|
review.save()
|
|
return redirect('posts')
|
|
|
|
context = {
|
|
'ticket_form': ticket_form,
|
|
'review_form': review_form,
|
|
}
|
|
return render(request,
|
|
'reviews/review_create.html', context)
|
|
|
|
|
|
@login_required
|
|
def ticket_review(request, ticket_id):
|
|
ticket = Ticket.objects.get(id=ticket_id)
|
|
review_form = ReviewForm()
|
|
if request.method == 'POST':
|
|
review_form = ReviewForm(request.POST)
|
|
print(request.POST)
|
|
if review_form.is_valid():
|
|
review = review_form.save(commit=False)
|
|
review.user = request.user
|
|
review.ticket = ticket
|
|
ticket.review = review
|
|
review.save()
|
|
ticket.review = review
|
|
ticket.save()
|
|
return redirect('posts')
|
|
context = {
|
|
'ticket': ticket,
|
|
'review_form': review_form,
|
|
}
|
|
return render(request,
|
|
'reviews/review_ticket.html', context)
|
|
|
|
|
|
@login_required
|
|
def update_review(request, review_id):
|
|
review = Review.objects.get(id=review_id)
|
|
if request.method == 'POST':
|
|
print(request.POST)
|
|
review_form = ReviewForm(request.POST, instance=review)
|
|
print(review_form.is_valid())
|
|
if review_form.is_valid():
|
|
review = review_form.save()
|
|
return redirect('posts')
|
|
else:
|
|
review_form = ReviewForm(instance=review)
|
|
return render(request,
|
|
'reviews/review_update.html',
|
|
{'review_form': review_form, 'review': review})
|
|
|
|
|
|
@login_required
|
|
def delete_review(request, review_id):
|
|
review = Review.objects.get(id=review_id)
|
|
if request.method == 'POST':
|
|
review.delete()
|
|
return redirect('posts')
|
|
return render(request,
|
|
'reviews/review_delete.html',
|
|
{'review': review})
|
|
|
|
|
|
@login_required
|
|
def subscribed(request):
|
|
follows = UserFollows()
|
|
user_form = ToFollowForm()
|
|
following = UserFollows.objects.filter(followed_user=request.user)
|
|
if request.method == 'POST':
|
|
user_form = ToFollowForm(request.POST)
|
|
if user_form.is_valid():
|
|
user = user_form.cleaned_data["user"]
|
|
user_followed = User.objects.filter(username=user)
|
|
follows.followed_user = user_followed[0]
|
|
follows.user = request.user
|
|
follows.save()
|
|
return redirect('subscribed')
|
|
followed = UserFollows.objects.filter(user=request.user)
|
|
context = {
|
|
'user_form': user_form,
|
|
'followed': followed,
|
|
'following': following
|
|
}
|
|
return render(request,
|
|
'reviews/subscribed.html', context)
|
|
|
|
|
|
@login_required
|
|
def unsubscribe(request, followed_user_id):
|
|
followed = UserFollows.objects.get(
|
|
user=request.user,
|
|
followed_user=followed_user_id)
|
|
if request.method == 'POST':
|
|
followed.delete()
|
|
return redirect('subscribed')
|
|
return render(request,
|
|
'reviews/unsubscribe.html',
|
|
{'followed': followed})
|