adding user management
This commit is contained in:
parent
f27769e177
commit
75511b96d1
4 changed files with 96 additions and 15 deletions
14
TODO.txt
14
TODO.txt
|
|
@ -1,4 +1,5 @@
|
|||
v1.1
|
||||
[ ] get stickies working
|
||||
[ ] polls
|
||||
[ ] watch forum, get email notifications when someone replies
|
||||
[ ] @ replies?
|
||||
|
|
@ -7,19 +8,6 @@ v1.1
|
|||
[ ] chat room? IRC?
|
||||
|
||||
ACTION ITEMS:
|
||||
DOMINIC ---
|
||||
[x] join option without member area access
|
||||
[x] NAV BAR
|
||||
[x] list user api endpoint
|
||||
[x] CSS
|
||||
[x] Assets
|
||||
[x] Pick better anonymous avatar
|
||||
[x] figure out backing up DB
|
||||
[x] soft-release
|
||||
[x] GET Domain
|
||||
[ ] email notifications when user signs up: disroot email
|
||||
[ ] maybe start sending emails to users automatically too
|
||||
[ ] full-release
|
||||
|
||||
KYRIE ----
|
||||
[x] Welcome message
|
||||
|
|
|
|||
17
cwr/urls.py
17
cwr/urls.py
|
|
@ -1,15 +1,28 @@
|
|||
from django.contrib import admin
|
||||
from django.urls import path, include
|
||||
|
||||
from web.views import signup, forum_threads, thread, custom_logout, profile, user_profile, denied, users, code_of_ethics, test_email
|
||||
from web.views import (
|
||||
signup,
|
||||
forum_threads,
|
||||
thread,
|
||||
custom_logout,
|
||||
profile,
|
||||
user_profile,
|
||||
denied,
|
||||
users,
|
||||
code_of_ethics,
|
||||
# test_email,
|
||||
manage_users
|
||||
)
|
||||
|
||||
urlpatterns = [
|
||||
path('markdownx/', include('markdownx.urls')),
|
||||
path('admin/', admin.site.urls),
|
||||
path('api/users/', users, name='users'),
|
||||
path("accounts/", include("django.contrib.auth.urls")),
|
||||
path("accounts/signup/", signup, name="signup"),
|
||||
path("accounts/profile/", profile, name="profile"),
|
||||
path("accounts/signup/", signup, name="signup"),
|
||||
path('accounts/user_management/', manage_users, name="user_management"),
|
||||
path("accounts/user/<user_id>", user_profile, name="user"),
|
||||
path("accounts/denied/", denied, name="denied"),
|
||||
path("code_of_ethics", code_of_ethics, name="code_of_ethics"),
|
||||
|
|
|
|||
34
web/templates/user_management.html
Normal file
34
web/templates/user_management.html
Normal file
|
|
@ -0,0 +1,34 @@
|
|||
<!DOCTYPE html>
|
||||
{% extends "base.html" %}
|
||||
{% block content %}
|
||||
<table>
|
||||
<tr>
|
||||
<th>User ID</th>
|
||||
<th>UserName</th>
|
||||
<th>User Email</th>
|
||||
<th>User Website</th>
|
||||
<th>Is Member</th>
|
||||
<th>Actions</th>
|
||||
</tr>
|
||||
{% for user in parsed_users %}
|
||||
<tr>
|
||||
<td>{{ user.id }}</td>
|
||||
<td>{{ user.username }}</td>
|
||||
<td>{{ user.email }}</td>
|
||||
<td>
|
||||
<a href="{{ user.url }}">link</a>
|
||||
</td>
|
||||
<td>{{ user.is_member }}</td>
|
||||
<td>
|
||||
<form method="post">
|
||||
{% csrf_token %}
|
||||
<a href="{% url 'admin:web_customuser_change' user.id %}">
|
||||
<button>View Details</button>
|
||||
</a>
|
||||
<button type="submit" value="{{ user.id }}" name='make_member'>Make Member</button>
|
||||
</form>
|
||||
</td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
</table>
|
||||
{% endblock %}
|
||||
46
web/views.py
46
web/views.py
|
|
@ -3,6 +3,7 @@ from io import BytesIO
|
|||
from PIL import Image
|
||||
|
||||
from django.contrib.auth import login, logout
|
||||
from django.contrib.auth.models import Group
|
||||
from django.contrib.auth.decorators import login_required, user_passes_test
|
||||
from django.contrib import messages
|
||||
from django.core.mail import send_mail
|
||||
|
|
@ -16,6 +17,7 @@ from web.models.forum_subcategory import ForumSubcategory
|
|||
from web.models.forum_post import ForumPost
|
||||
from web.models.custom_user import CustomUser
|
||||
|
||||
|
||||
def test_email(request):
|
||||
send_mail(
|
||||
subject='test email',
|
||||
|
|
@ -37,12 +39,19 @@ def send_email(subject, message, recipients=None):
|
|||
)
|
||||
|
||||
|
||||
def is_superuser(user):
|
||||
if user.is_authenticated:
|
||||
return user.is_superuser
|
||||
return False
|
||||
|
||||
|
||||
def is_member(user):
|
||||
if user.is_authenticated:
|
||||
return user.groups.filter(name='Member').exists()
|
||||
return False
|
||||
|
||||
|
||||
|
||||
# ACCOUNT MANAGEMENT ######################################
|
||||
def signup(request):
|
||||
if request.method == 'POST':
|
||||
|
|
@ -128,6 +137,43 @@ def code_of_ethics(request):
|
|||
return render(request, 'code_of_ethics.html')
|
||||
|
||||
|
||||
# ADMIN UTILS #############################################
|
||||
|
||||
@login_required
|
||||
@user_passes_test(is_superuser, login_url='/accounts/denied/')
|
||||
def manage_users(request):
|
||||
context = {}
|
||||
|
||||
if request.method == 'POST':
|
||||
if 'make_member' in request.POST:
|
||||
user_id = request.POST.get('make_member')
|
||||
user = CustomUser.objects.filter(id=user_id).first()
|
||||
member_group = Group.objects.get(name='Member')
|
||||
user.groups.add(member_group)
|
||||
send_email(
|
||||
subject='Christian Webring - You have been added as a member!',
|
||||
message=f'Hello {user.username},\n\nYou have been added as a member to the christian webring, please login here: https://members.christian-webring.org \n\n Thanks, \n the Christian Webring Team',
|
||||
recipients=[user.email]
|
||||
)
|
||||
messages.success(request, f"You added {user.username} as a member!")
|
||||
|
||||
non_members = []
|
||||
members = []
|
||||
users = CustomUser.objects.all()
|
||||
for user in users:
|
||||
if user.groups.filter(name='Member').exists():
|
||||
user.is_member = True
|
||||
members.append(user)
|
||||
else:
|
||||
user.is_member = False
|
||||
non_members.append(user)
|
||||
|
||||
non_members.extend(members)
|
||||
|
||||
context['parsed_users'] = non_members
|
||||
|
||||
return render(request, 'user_management.html', context)
|
||||
|
||||
# FORUM ###################################################
|
||||
@login_required
|
||||
@user_passes_test(is_member, login_url='/accounts/denied/')
|
||||
|
|
|
|||
Loading…
Reference in a new issue