From 17547403cfb2b3b765ebb4c5f2afda365cb17673 Mon Sep 17 00:00:00 2001 From: Bobby Date: Fri, 9 Sep 2022 04:36:00 -0400 Subject: Added user interactivity as per roles --- blog_admin/urls.py | 1 + blog_admin/views.py | 57 +++++++++++++++--- templates/blog/partials/sidebar.html | 6 +- templates/blog_admin/edit_user.html | 66 +++++++++++++++++++++ templates/blog_admin/new_user.html | 22 +++---- templates/blog_admin/users.html | 109 +++++++++++------------------------ 6 files changed, 167 insertions(+), 94 deletions(-) create mode 100644 templates/blog_admin/edit_user.html diff --git a/blog_admin/urls.py b/blog_admin/urls.py index 84d61bbc..2862db88 100644 --- a/blog_admin/urls.py +++ b/blog_admin/urls.py @@ -5,6 +5,7 @@ app_name = 'blog-admin' urlpatterns = [ path('users', views.users, name='users'), path('users/new', views.new_user, name='new-user'), + path('users//edit', views.edit_user, name='edit-user'), path('posts', views.posts, name='posts'), path('comments', views.comments, name='comments'), path('categories', views.categories, name='categories'), diff --git a/blog_admin/views.py b/blog_admin/views.py index 34b4176b..372ac1e2 100644 --- a/blog_admin/views.py +++ b/blog_admin/views.py @@ -11,12 +11,11 @@ def users(request): page = int(page) except: page = 1 - superusers = User.objects.filter(is_superuser=True) users = User.objects.filter(is_superuser=False)[(page-1)*50:page*50] num_pages = User.objects.filter(is_superuser=False).count() // 50 + 1 print(num_pages) url_to_render = 'blog_admin/users.html?page={}'.format(page) if int(page) and int(page) > 1 else 'blog_admin/users.html' - return render(request, url_to_render, { 'title': 'Manage Users', 'super_users': superusers, 'normal_users': users, 'num_pages': num_pages, 'page': page }) + return render(request, url_to_render, { 'title': 'Manage Users', 'normal_users': users, 'num_pages': num_pages, 'page': page }) else: return redirect('blog:home') @@ -40,17 +39,13 @@ def search(request): if request.user.is_authenticated and (request.user.is_superuser or request.user.is_staff): if q: try: - # Get the superusers where username or email or first_name or last_name contains q or the user id is int(q) - superusers = User.objects.filter(is_superuser=True).filter(username__icontains=q) | User.objects.filter(is_superuser=True).filter(email__icontains=q) | User.objects.filter(is_superuser=True).filter(first_name__icontains=q) | User.objects.filter(is_superuser=True).filter(last_name__icontains=q) | User.objects.filter(is_superuser=True).filter(id = int(q)) # Get the normal users where username or email or first_name or last_name contains q or the user id is int(q) users = User.objects.filter(is_superuser=False).filter(username__icontains=q) | User.objects.filter(is_superuser=False).filter(email__icontains=q) | User.objects.filter(is_superuser=False).filter(first_name__icontains=q) | User.objects.filter(is_superuser=False).filter(last_name__icontains=q) | User.objects.filter(is_superuser=False).filter(id = int(q)) except: - # Get the superusers where username or email or first_name or last_name contains q - superusers = User.objects.filter(is_superuser=True).filter(username__icontains=q) | User.objects.filter(is_superuser=True).filter(email__icontains=q) | User.objects.filter(is_superuser=True).filter(first_name__icontains=q) | User.objects.filter(is_superuser=True).filter(last_name__icontains=q) # Get the normal users where username or email or first_name or last_name contains q users = User.objects.filter(is_superuser=False).filter(username__icontains=q) | User.objects.filter(is_superuser=False).filter(email__icontains=q) | User.objects.filter(is_superuser=False).filter(first_name__icontains=q) | User.objects.filter(is_superuser=False).filter(last_name__icontains=q) - return render(request, 'blog_admin/users.html', { 'title': 'Search Results for "{}"'.format(q), 'super_users': superusers, 'normal_users': users }) + return render(request, 'blog_admin/users.html', { 'title': 'Search Results for "{}"'.format(q), 'normal_users': users }) else: return redirect('blog-admin:users') else: @@ -92,4 +87,50 @@ def new_user(request): return redirect('blog-admin:new-user') else: - return render(request, 'blog_admin/new_user.html', { 'title': 'Create New User' }) \ No newline at end of file + return render(request, 'blog_admin/new_user.html', { 'title': 'Create New User' }) + else: + return redirect('blog:home') + +def edit_user(request, user_id): + if request.user.is_authenticated and (request.user.is_superuser or request.user.is_staff): + if request.method == 'POST': + request_user = request.user + user = User.objects.get(id=user_id) + user.username = request.POST.get('username') + user.email = request.POST.get('email') + user.first_name = request.POST.get('first_name') + user.last_name = request.POST.get('last_name') + user.is_superuser = True if request_user.is_superuser and request.POST.get('is_superuser') == 'on' else False + user.is_staff = True if request_user.is_superuser and request.POST.get('is_staff') == 'on' else False + user.is_active = True if request.POST.get('is_active') == 'on' else False + + # User Profile Data + try: + user_profile = UserProfile.objects.get(user=user) + except: + user_profile = UserProfile(user=user) + user_profile.bio = request.POST.get('bio') + user_profile.location = request.POST.get('location') + user_profile.gravatar_email = request.POST.get('gravatar_email') + user_profile.email_verified = True if request.POST.get('email_verified') == 'on' else False + + # Save the user + try: + user.save() + user_profile.save() + messages.success(request, 'User updated successfully!') + return redirect('blog-admin:users') + # maybe user name is taken + except Exception as e: + messages.error(request, 'Error: {}'.format(e), extra_tags='edit_user_update_error') + return redirect('blog-admin:edit-user', user_id=user_id) + + else: + user = User.objects.get(id=user_id) + try: + user_profile = UserProfile.objects.get(user=user) + except: + user_profile = None + return render(request, 'blog_admin/edit_user.html', { 'title': 'Edit User', 'edit_user': user, 'edit_user_profile': user_profile }) + else: + return redirect('blog:home') \ No newline at end of file diff --git a/templates/blog/partials/sidebar.html b/templates/blog/partials/sidebar.html index 3d49239b..0891ad41 100644 --- a/templates/blog/partials/sidebar.html +++ b/templates/blog/partials/sidebar.html @@ -59,12 +59,14 @@
- {% if user.is_superuser %} + {% if user.is_staff %}
Admin