Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
19 changes: 19 additions & 0 deletions corpus/accounts/forms.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,8 @@
from django.forms.widgets import ClearableFileInput

from .models import ExecutiveMember
from .models import Faculty
from .models import Post
from .models import User
from corpus.forms import CorpusModelForm

Expand Down Expand Up @@ -102,3 +104,20 @@ class Meta:
"hide_github",
"hide_linkedin",
]


class FacultyForm(CorpusModelForm):
class Meta:
model = Faculty
fields = [
"linkedin",
"website",
]


class PostForm(CorpusModelForm):
class Meta:
model = Post
fields = [
"name",
]
2 changes: 1 addition & 1 deletion corpus/accounts/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -204,7 +204,7 @@ class Meta:
society = models.ForeignKey(
Society, blank=True, null=True, on_delete=models.CASCADE
)
post = models.ForeignKey(Post, null=True, blank=True, on_delete=models.CASCADE)
post = models.OneToOneField(Post, null=True, blank=True, on_delete=models.CASCADE)
website = models.URLField(max_length=200, null=True, blank=True)
linkedin = models.URLField(
blank=True, null=True, verbose_name="Linkedin Profile URL"
Expand Down
4 changes: 2 additions & 2 deletions corpus/accounts/urls.py
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,6 @@
PasswordResetCompleteView.as_view(),
name="password_reset_complete",
),
path("profile/<roll_no>", profile, name="accounts_profile"),
path("profile/<roll_no>/edit", edit_profile, name="edit_profile"),
path("profile/<int:pk>", profile, name="accounts_profile"),
path("profile/<int:pk>/edit", edit_profile, name="edit_profile"),
]
112 changes: 92 additions & 20 deletions corpus/accounts/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
from constants import MAX_IMAGE_SIZE
from django.contrib import messages
from django.contrib.auth import authenticate
from django.contrib.auth import get_user_model
from django.contrib.auth import login
from django.contrib.auth import logout
from django.contrib.auth.decorators import login_required
Expand All @@ -15,8 +16,13 @@
from .forms import CorpusCreationForm
from .forms import CorpusLoginForm
from .forms import ExecutiveMemberForm
from .forms import FacultyForm
from .forms import PostForm
from .forms import UserForm
from .models import ExecutiveMember
from .models import Faculty

User = get_user_model()


# Create your views here.
Expand Down Expand Up @@ -90,18 +96,31 @@ def signout(request):
return redirect("index")


def profile(request, roll_no):
exec_member = get_object_or_404(ExecutiveMember, roll_number=roll_no)
profile_user = exec_member.user
def profile(request, pk):
profile_user = get_object_or_404(User, pk=pk)

# Get Virtual Expo Reports
reports = Report.objects.filter(reportmember__member=exec_member)
try:
exec_member = ExecutiveMember.objects.get(user=profile_user)
faculty = None
except ExecutiveMember.DoesNotExist:
exec_member = None
try:
faculty = Faculty.objects.get(user=profile_user)
except Faculty.DoesNotExist:
faculty = None

# Get Blogs written by the Executive Member
blogs = Post.objects.filter(author=exec_member)
# Get Virtual Expo Reports
if exec_member:
reports = Report.objects.filter(reportmember__member=exec_member)
# Get Blogs written by the Executive Member
blogs = Post.objects.filter(author=exec_member)
else:
reports = None
blogs = None

args = {
"exec_member": exec_member,
"faculty": faculty,
"profile_user": profile_user,
"curr_user": request.user,
"reports": reports,
Expand All @@ -112,37 +131,90 @@ def profile(request, roll_no):


@login_required
def edit_profile(request, roll_no):
user = request.user # Get the currently logged-in user
def edit_profile(request, pk):
user = get_object_or_404(User, pk=pk) # Get the user explicitly by ID

# Authorization check: Ensure logged-in user can only edit their own profile
if request.user != user:
messages.warning(request, "You are not authorized to edit this profile.")
return redirect("index")

# Check if the user has an associated ExecutiveMember record
try:
executive_member = ExecutiveMember.objects.get(roll_number=roll_no, user=user)
executive_member = ExecutiveMember.objects.get(user=user)
faculty = None
post = None
except ExecutiveMember.DoesNotExist:
messages.warning(request, "You are not authorized to edit this profile.")
return redirect("index")
executive_member = None
try:
faculty = Faculty.objects.get(user=user)
post = faculty.post
except Faculty.DoesNotExist:
faculty = None
post = None

if request.method == "POST":
user_form = UserForm(request.POST, request.FILES, instance=user)
executive_member_form = ExecutiveMemberForm(
request.POST, instance=executive_member
)
if executive_member:
executive_member_form = ExecutiveMemberForm(
request.POST, instance=executive_member
)
faculty_form = None
post_form = None
if user_form.is_valid() and executive_member_form.is_valid():
user_form.save()
executive_member_form.save()
return redirect("accounts_profile", pk=pk)

else:
if faculty and post:
faculty_form = FacultyForm(request.POST, instance=faculty)
post_form = PostForm(request.POST, instance=post)
executive_member_form = None
if (
user_form.is_valid()
and faculty_form.is_valid()
and post_form.is_valid()
):
user_form.save()
faculty_form.save()
post_form.save()
return redirect("accounts_profile", pk=pk)
if not faculty_form.is_valid():
return render(
request,
"accounts/edit_profile.html",
{"form": faculty_form, "errors": faculty_form.errors},
)

if user_form.is_valid() and executive_member_form.is_valid():
user_form.save()
executive_member_form.save()
return redirect("accounts_profile", roll_no=roll_no)
else:
if user_form.is_valid():
user_form.save()
return redirect("accounts_profile", pk=pk)

else:
user_form = UserForm(instance=user)
executive_member_form = ExecutiveMemberForm(instance=executive_member)
if executive_member:
executive_member_form = ExecutiveMemberForm(instance=executive_member)
faculty_form = None
post_form = None
else:
executive_member_form = None
if faculty:
faculty_form = FacultyForm(instance=faculty)
post_form = PostForm(instance=faculty.post)
else:
faculty_form = None
post_form = None

return render(
request,
"accounts/edit_profile.html",
{
"user_form": user_form,
"executive_member_form": executive_member_form,
"faculty_form": faculty_form,
"post_form": post_form,
"exec_member": executive_member,
"max_image_size": MAX_IMAGE_SIZE,
},
Expand Down
1 change: 1 addition & 0 deletions corpus/corpus/settings.py
Original file line number Diff line number Diff line change
Expand Up @@ -67,6 +67,7 @@
"farewell.apps.FarewellConfig",
"virtual_expo.apps.VirtualExpoConfig",
"blog",
'django_extensions',
"smp.apps.SmpConfig",
"codeRed.apps.CoderedConfig",
"chimera.apps.ChimeraConfig",
Expand Down
2 changes: 2 additions & 0 deletions corpus/pages/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -191,6 +191,8 @@ def team(request):
"sac_core": sac_core,
"faculty": faculty,
}

print(context)
return render(request, "pages/team.html", context)


Expand Down
1 change: 1 addition & 0 deletions corpus/requirements.txt
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@ typing_extensions==4.8.0
urllib3==2.2.1
virtualenv==20.25.0
wheel==0.41.2
django-extensions
celery
dotenv
redis
Loading