From a71f6899508355e945b8f59720ff2b4b8d4b237f Mon Sep 17 00:00:00 2001
From: Bo-Chun Louis Chen <louistw@uab.edu>
Date: Thu, 24 May 2018 13:09:42 -0500
Subject: [PATCH] Added views for admin roles pages

---
 app/admin/views.py | 92 +++++++++++++++++++++++++++++++++++++++++++++-
 1 file changed, 90 insertions(+), 2 deletions(-)

diff --git a/app/admin/views.py b/app/admin/views.py
index af261a9..fe04ad1 100644
--- a/app/admin/views.py
+++ b/app/admin/views.py
@@ -2,9 +2,9 @@ from flask import abort, flash, redirect, render_template, url_for
 from flask_login import current_user, login_required
 
 from . import admin
-from forms import DepartmentForm
+from forms import DepartmentForm, RoleForm
 from .. import db
-from ..models import Department
+from ..models import Department, Role
 
 def check_admin():
     """
@@ -103,3 +103,91 @@ def delete_department(id):
 
     print("render template delete_department")
     return render_template(title="Delete Department")
+
+# Role views
+@admin.route('/roles')
+@login_required
+def list_roles():
+    check_admin()
+    """
+    List all roles
+    """
+    roles = Role.query.all()
+    return render_template('admin/roles/roles.html',
+                           roles=roles, title='Roles')
+
+@admin.route('/roles/add', methods=['GET', 'POST'])
+@login_required
+def add_role():
+    """
+    Add a role to the database
+    """
+    check_admin()
+
+    add_role = True
+
+    form = RoleForm()
+    if form.validate_on_submit():
+        role = Role(name=form.name.data,
+                    description=form.description.data)
+
+        try:
+            # add role to the database
+            db.session.add(role)
+            db.session.commit()
+            flash('You have successfully added a new role.')
+        except:
+            # in case role name already exists
+            flash('Error: role name already exists.')
+
+        # redirect to the roles page
+        return redirect(url_for('admin.list_roles'))
+
+    # load role template
+    return render_template('admin/roles/role.html', add_role=add_role,
+                           form=form, title='Add Role')
+
+@admin.route('/roles/edit/<int:id>', methods=['GET', 'POST'])
+@login_required
+def edit_role(id):
+    """
+    Edit a role
+    """
+    check_admin()
+
+    add_role = False
+
+    role = Role.query.get_or_404(id)
+    form = RoleForm(obj=role)
+    if form.validate_on_submit():
+        role.name = form.name.data
+        role.description = form.description.data
+        db.session.add(role)
+        db.session.commit()
+        flash('You have successfully edited the role.')
+
+        # redirect to the roles page
+        return redirect(url_for('admin.list_roles'))
+
+    form.description.data = role.description
+    form.name.data = role.name
+    return render_template('admin/roles/role.html', add_role=add_role,
+                           form=form, title="Edit Role")
+
+@admin.route('/roles/delete/<int:id>', methods=['GET', 'POST'])
+@login_required
+def delete_role(id):
+    """
+    Delete a role from the database
+    """
+    check_admin()
+
+    role = Role.query.get_or_404(id)
+    db.session.delete(role)
+    db.session.commit()
+    flash('You have successfully deleted the role.')
+
+    # redirect to the roles page
+    return redirect(url_for('admin.list_roles'))
+
+    return render_template(title="Delete Role")
-- 
GitLab