From d472b4da3833c7622abbdf20840e17bf84e10779 Mon Sep 17 00:00:00 2001 From: Ethan-clay03 <ethanclay2017@gmail.com> Date: Tue, 7 Jan 2025 18:33:00 +0000 Subject: [PATCH] Make admin only page, to begin manage booking UI next --- app/__init__.py | 4 +- app/admin/routes.py | 29 +++++++++++-- app/profile/routes.py | 7 --- app/templates/admin/index.html | 78 ++++++++++++++++++---------------- app/templates/base.html | 2 +- 5 files changed, 68 insertions(+), 52 deletions(-) diff --git a/app/__init__.py b/app/__init__.py index 7daa6ca..82aaa5b 100644 --- a/app/__init__.py +++ b/app/__init__.py @@ -71,8 +71,7 @@ def create_app(config_class=Config): if user and user.role: identity.provides.add(RoleNeed(user.role.name)) if user.role.name == 'super-admin': - identity.provides.add(RoleNeed('admin')) # Super admin should also inherit admin permissions - auth_logger.debug(f'Roles provided to identity for {current_user}: {identity.provides}') + identity.provides.add(RoleNeed('admin')) else: auth_logger.debug(f'No role found for user {identity.user.username}.') @@ -121,7 +120,6 @@ def create_app(config_class=Config): elif role.name == 'admin': g.admin_permission = admin_permission g.is_admin = True - auth_logger.debug(f'Permissions for {current_user}: Admin: {g.admin_permission}, User: {g.user_permission}, Super Admin: {g.super_admin_permission}') login_manager.login_view = 'profile.login' diff --git a/app/admin/routes.py b/app/admin/routes.py index 64218ae..59f7115 100644 --- a/app/admin/routes.py +++ b/app/admin/routes.py @@ -1,8 +1,29 @@ from flask import render_template, redirect, url_for +from app import admin_permission, permission_required, super_admin_permission from app.admin import bp -from app.models import Listings, ListingImages -@bp.route('/manage_listings') -def manage_listings(): - return render_template('admin/index.html', top_listings=top_listings, top_listing_images=top_listing_images) \ No newline at end of file +@bp.route('/home') +@permission_required(admin_permission) +def index(): + return render_template('admin/index.html') + +@bp.route('/') +@permission_required(admin_permission) +def home(): + return redirect(url_for('admin.home')) + +@bp.route('/manage_bookings') +@permission_required(admin_permission) +def manage_bookings(): + return render_template('admin/index.html') + +@bp.route('/manage_users') +@permission_required(super_admin_permission) +def manage_users(): + return render_template('admin/index.html') + +@bp.route('/manage_user_bookings') +@permission_required(admin_permission) +def manage_user_bookings(): + return render_template('admin/index.html') \ No newline at end of file diff --git a/app/profile/routes.py b/app/profile/routes.py index 2678dcb..f6a5ebb 100644 --- a/app/profile/routes.py +++ b/app/profile/routes.py @@ -6,9 +6,7 @@ from werkzeug.security import check_password_hash from app.profile import bp from app.models import User from app.logger import auth_logger -from app import admin_permission, permission_required, super_admin_permission from app import db -from flask_principal import Principal, Permission, RoleNeed, identity_loaded @bp.route('/signup', methods=['GET', 'POST']) def signup(): @@ -87,11 +85,6 @@ def login_post(): return redirect(url_for('profile.index')) -@bp.route('/admin/index') -@permission_required(admin_permission) -def admin_index(): - return render_template('profile/admin-index.html') - @bp.route('/check-username', methods=['POST']) def check_username(): diff --git a/app/templates/admin/index.html b/app/templates/admin/index.html index 511b121..f08f398 100644 --- a/app/templates/admin/index.html +++ b/app/templates/admin/index.html @@ -1,44 +1,48 @@ {% extends 'base.html' %} {% block content %} -<head> - <link rel="stylesheet" type="text/css" href="{{ url_for('static', filename='listings.css')}}"> - <script src="https://cdn.jsdelivr.net/npm/swiffy-slider@1.6.0/dist/js/swiffy-slider.min.js" crossorigin="anonymous" defer></script> - <link href="https://cdn.jsdelivr.net/npm/swiffy-slider@1.6.0/dist/css/swiffy-slider.min.css" rel="stylesheet" crossorigin="anonymous"> -</head> + + <div class="content"> - <div class="deals_text"><span class="deals_underline">Deals for you</span></div> - <div class="swiffy-slider slider-item-show2 slider-item-reveal slider-nav-outside slider-nav-round slider-nav-visible slider-indicators-outside slider-indicators-round slider-indicators-dark slider-nav-animation slider-nav-animation-fadein slider-item-first-visible"> - <ul class="slider-container py-4"> - {% for listing in top_listings %} - <li class="slide-visible"> - <div class="card shadow h-100"> - <div class="ratio ratio-16x9"> - <th>{{top_listing_images[listing.id]}}</th> - <img src="{{ url_for('main.upload_file', filename=top_listing_images[listing.id]) }}" class="card-img-top" loading="lazy" alt="Main Image"> - </div> - <div class="card-body p-3 p-xl-4"> - <h3 class="card-title h5">{{listing.destination_location}}</h3> - <p class="card-text">Add Location description here once implemented</p> - <div><a href="#" class="btn btn-primary">Book now</a> - </div> - </div> - </div> - </li> - {% endfor %} - </ul> + <h2>Admin Panel</h2> - <button type="button" class="slider-nav" aria-label="Go left"></button> - <button type="button" class="slider-nav slider-nav-next" aria-label="Go left"></button> - - <div class="slider-indicators"> - <button class="active" aria-label="Go to slide"></button> - <button aria-label="Go to slide" class=""></button> - <button aria-label="Go to slide" class=""></button> - <button aria-label="Go to slide" class=""></button> - </div> - </div> + <ul class="center"> + <li><a class="button_1" href="{{ url_for('admin.manage_bookings') }}">Manage Bookings</a></li> + <li><a class="button_1" href="{{ url_for('admin.manage_user_bookings') }}">Manage User Bookings</a></li> + {% if g.is_super_admin %} + <li><a class="button_1" href="{{ url_for('admin.manage_users') }}">Manage Users</a></li> + {% endif %} + </ul> </div> -<div style="margin-left:50px"> <a href= "{{ url_for('bookings.listings') }}" class="button_1">View All Deals</a></div> -{% endblock %} \ No newline at end of file +<style> + .content { + text-align: center; + margin-top: 20px; + display: flex; + flex-direction: column; + align-items: center; + } + + .center { + list-style-type: none; + padding: 0; + margin: 0; + } + + .center li { + margin: 10px 0; + } + + .button_1 { + font-size: 26px; + } + + @media (max-width: 500px) { + .button_1 { + font-size: 18px; + } + } +</style> + +{% endblock %} diff --git a/app/templates/base.html b/app/templates/base.html index e2c7912..2c7b1c3 100644 --- a/app/templates/base.html +++ b/app/templates/base.html @@ -40,7 +40,7 @@ <ul class="dropdown-menu" aria-labelledby="navbarDropdownMenuLink"> {% if user_in_session %} {% if g.is_admin %} - <li><a class="dropdown-item" href="{{ url_for('profile.admin_index') }}">Admin Options</a></li> + <li><a class="dropdown-item" href="{{ url_for('admin.index') }}">Admin Options</a></li> {% endif %} <li><a class="dropdown-item" href="{{ url_for('profile.index') }}">Account Details</a></li> <li><a class="dropdown-item" href="{{ url_for('profile.manage_bookings')}}">My Bookings</a></li> -- GitLab