major update

This commit is contained in:
2025-08-25 12:26:58 +05:30
parent 7cdb1a0ac4
commit 0d6aa5ad02
17 changed files with 445 additions and 179 deletions
+60 -13
View File
@@ -1,12 +1,13 @@
from django.contrib import messages
from django.contrib.auth import authenticate, login
from django.contrib.auth.decorators import login_required
from django.contrib.auth.decorators import login_required, user_passes_test
from django.contrib.auth.forms import AuthenticationForm
from django.contrib.auth.hashers import make_password
from django.db.models import Exists, OuterRef
from django.http import JsonResponse
from django.shortcuts import render, redirect, get_object_or_404
from django.views.decorators.http import require_POST
from .models import Issue, IssueCategory, User, Vote, Comment
from .models import Issue, IssueCategory, User, Vote, Comment, Department
from .forms import CitizenRegistrationForm, IssueForm, CommentForm
def home(request):
@@ -165,11 +166,9 @@ def vote_issue(request, issue_id):
return JsonResponse({'success': False, 'error': str(e)})
@login_required
def add_comment(request, issue_id, parent_id=None):
issue = get_object_or_404(Issue, id=issue_id)
parent = None
if parent_id:
parent = get_object_or_404(Comment, id=parent_id)
def add_comment(request, pk, parent_id=None):
issue = get_object_or_404(Issue, pk=pk)
parent = get_object_or_404(Comment, pk=parent_id) if parent_id else None
if request.method == "POST":
form = CommentForm(request.POST)
@@ -179,11 +178,7 @@ def add_comment(request, issue_id, parent_id=None):
comment.user = request.user
comment.parent = parent
comment.save()
return redirect("issue_detail", issue_id=issue.id)
else:
form = CommentForm()
return render(request, "comments/add_comment.html", {"form": form, "issue": issue})
return redirect("issue_detail", pk=pk)
def issue_detail(request, pk):
issue = get_object_or_404(Issue, pk=pk)
@@ -198,4 +193,56 @@ def add_comment(request, pk, parent_id=None):
if content:
parent = Comment.objects.get(pk=parent_id) if parent_id else None
Comment.objects.create(issue=issue, user=request.user, content=content, parent=parent)
return redirect("issue_detail", pk=pk)
return redirect("issue_detail", pk=pk)
def superadmin_check(user):
return user.is_superuser
@login_required
@user_passes_test(superadmin_check)
def superadmin_dashboard(request):
return render(request, "core/superadmin_dashboard.html")
@login_required
@user_passes_test(superadmin_check)
def manage_departments(request):
departments = Department.objects.all().order_by("name")
if request.method == "POST":
name = request.POST.get("name")
description = request.POST.get("description")
if name:
Department.objects.create(name=name, description=description)
return redirect("manage_departments")
return render(request, "core/manage_departments.html", {
"departments": departments
})
@login_required
@user_passes_test(superadmin_check)
def department_detail(request, pk):
department = get_object_or_404(Department, pk=pk)
users = department.users.all()
if request.method == "POST":
username = request.POST.get("username")
email = request.POST.get("email")
password = request.POST.get("password")
if username and password:
user = User.objects.create(
username=username,
email=email,
password=make_password(password), # hash the password
is_staff=True # mark as staff
)
department.users.add(user)
return redirect("department_detail", pk=department.id)
return render(request, "core/department_detail.html", {
"department": department,
"users": users,
})