Skip to content
Snippets Groups Projects
Commit 9a4ceda6 authored by mrschnei's avatar mrschnei
Browse files

Added UI for the view Requests page. Updated UI for profile and manage org...

Added UI for the view Requests page. Updated UI for profile and manage org pages. Deleted the delete page since it is no longer used
parent 59f00564
No related branches found
No related tags found
No related merge requests found
<!DOCTYPE html>
<html>
<head>
<link rel="stylesheet" type="text/css" href="/css/style.css">
<title>ServicePoints</title>
</head>
<body>
<h1>
<a href="/">Back to Homepage</a>
</h1>
<p>{{username}}</p>
<form action="/accounts/delete/" method="post" enctype="multipart/form-data">
<input type="submit" name="delete" value="confirm delete account"/>
</form>
</body>
</html>
......@@ -7,6 +7,23 @@
<!-- Bootstrap CSS -->
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.0/css/bootstrap.min.css" integrity="sha384-9aIt2nRpC12Uk9gS9baDl411NQApFmC26EwAOH8WgZl5MYYxFfc+NcPb1dKGj7Sk" crossorigin="anonymous">
<style>
.listing {
padding: 14px 16px;
margin: 10px 0px;
border-radius: 7px;
border: 3px solid black;
width:100%;
}
.members {
padding: 20px 16px;
margin: 10px 0px 50px 0px;
border-radius: 7px;
border: 3px solid black;
float:left;
}
</style>
<title>Manage Org</title>
</head>
......@@ -62,43 +79,44 @@
<h4>Pending Member Requests:</h4>
{% for member in pending %}
<form action="/accounts/manageOrg/" method="post" enctype="multipart/form-data">
Name: {{member.fullname}}
<br>Username: {{member.username}}
<br>Email: {{member.email}}
<br>Pre-Existing Hours: {{member.hours}}
<input type="hidden" name="user" value="{{member.username}}" />
<input type="submit" name="add" value="Add Member" />
<input type="submit" name="deny" value="Deny Member" />
</form>
<div class="listing">
<form action="/accounts/manageOrg/" method="post" enctype="multipart/form-data">
Name: {{member.fullname}}
<br>Username: {{member.username}}
<br>Email: {{member.email}}
<br>Pre-Existing Hours: {{member.hours}}
<input type="hidden" name="user" value="{{member.username}}" />
<input type="submit" name="add" value="Add Member" />
<input type="submit" name="deny" value="Deny Member" />
</form>
</div>
{% endfor %}
{% if not pending %}
No pending memberships
{% endif %}
<h4 style="margin-top:25px;">Current Members:</h4>
{% for member in members %}
{% if username == member.username %}
{{member.fullname}} ({{member.username}})
{% else %}
<form action="/accounts/manageOrg/" method="post" enctype="multipart/form-data">
<div class="members">
{% for member in members %}
{% if username == member.username %}
{{member.fullname}} ({{member.username}})
<input type="hidden" name="user" value="{{member.username}}" />
<input type="submit" name="remove" value="remove from org" />
</form>
{% endif %}
{% endfor %}
{% else %}
<form action="/accounts/manageOrg/" method="post" enctype="multipart/form-data">
{{member.fullname}} ({{member.username}})
<input type="hidden" name="user" value="{{member.username}}" />
<input type="submit" name="remove" value="remove from org" />
</form>
{% endif %}
{% endfor %}
</div>
</div>
<div class="col-sm-4">
<div>
<h2>Your Info: </h2>
<p>Full Name: {{fullname}}</p>
<p>Username: {{username}}</p>
<p>Organization: {{org}}</p>
<p>Email: {{email}}</p>
<p>Hours: {{hours}}</p>
<hr class="d-sm-none">
</div>
......
......@@ -60,15 +60,15 @@
<div class="row">
<div class="col-sm-8">
<h2>Profile</h2>
{% if pending == 0 %}
<p>
Student Organization: {{org}}
</p>
{%endif%}
{% if pending == 1 %}
<p>
Student Organization: Your request is pending. Requesting to join another organization while your request is pending will cancel your original request.
</p>
{% if pending != '' %}
<div class="alert alert-warning alert-dismissible fade show" role="alert">
<strong>
Your request to join {{pending}} is pending. Requesting to join another organization while your request is pending will cancel your original request.
</strong>
<button type="button" class="close" data-dismiss="alert" aria-label="Close">
<span aria-hidden="true">&times;</span>
</button>
</div>
{%endif%}
{% if leader == 0 %}
......
<!DOCTYPE html>
<html>
<head>
<a href="/">Home</a>
</head>
<head>
<!-- Required meta tags -->
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<!-- Bootstrap CSS -->
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.0/css/bootstrap.min.css" integrity="sha384-9aIt2nRpC12Uk9gS9baDl411NQApFmC26EwAOH8WgZl5MYYxFfc+NcPb1dKGj7Sk" crossorigin="anonymous">
<style>
.listing {
padding: 14px 16px;
margin: 10px 0px;
border-radius: 7px;
border: 3px solid black;
width: 100%;
}
</style>
<title>View Requests</title>
</head>
<body>
<title>ServicePoints</title>
<p>
{{org}} members' requests:
</p>
{% for request in requests %}
<p>
{{request.member}} is requesting ServicePoints for ({{request.service}}):
</p>
<p>
<img src=/images/{{request.filename}} alt="img">
</p>
<p>
Enter the number of hours you'd like to assign in it's numerical form (1, 2, 3...):
<form action="/accounts/viewRequests/" method="post" enctype="multipart/form-data">
<input type="hidden" name="postid" value="{{request.postid}}"/>
<input type="hidden" name="user" value="{{request.member}}"/>
<input type="hidden" name="filename" value="{{request.filename}}"/>
<input type="text" name="numHours" />
<input type="submit" name="confirm" value="confirm"/>
</form>
Please give an explanation as to why you're denying this request:
<form action="/accounts/viewRequests/" method="post" enctype="multipart/form-data">
<input type="hidden" name="postid" value="{{request.postid}}"/>
<input type="hidden" name="filename" value="{{request.filename}}"/>
<input type="text" name="reason" />
<input type="submit" name = "deny" value="deny" />
</form>
</p>
{% endfor %}
<div class="jumbotron text-center" style="margin-bottom:0; ">
<h1>ServicePoints!</h1>
<p>Connect with your Org</p>
</div>
<nav class="navbar navbar-expand-sm navbar-dark" style="background-color:#7952b3;">
<a class="navbar-brand" href="/">Home</a>
<button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#collapsibleNavbar">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="collapsibleNavbar">
<ul class="navbar-nav mr-auto">
<li class="nav-item">
<a class="nav-link" href="/accounts/blood/">Blood Drives</a>
</li>
<li class="nav-item">
<a class="nav-link" href="/accounts/food/">Food Drives</a>
</li>
<li class="nav-item">
<a class="nav-link" href="/accounts/mask/">Mask Making</a>
</li>
<li class="nav-item">
<a class="nav-link" href="/accounts/tutorsu/">Tutoring</a>
</li>
</ul>
<ul class="navbar-nav">
<li class="nav-item dropdown">
<a class="nav-link dropdown-toggle" href="#" id="navbarDropdown" role="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
Settings
</a>
<div class="dropdown-menu dropdown-menu-right" aria-labelledby="navbarDropdown">
<a class="dropdown-item" href="/accounts/profile/">View Profile</a>
<a class="dropdown-item" href="/accounts/manageOrg/">Manage Org</a>
<div class="dropdown-divider"></div>
<a class="dropdown-item" href="/accounts/logout/">Logout</a>
</div>
</li>
</ul>
</div>
</nav>
<div class="container" style="margin-top:30px">
<div class="row">
<div class="col-sm-8">
<h2>Manage Your Organization Member's Requests: </h2>
{% for request in requests %}
<div class="listing">
<h6>
{{request.member}} is requesting ServicePoints for ({{request.service}}):
</h6>
<p>
{{request.description}}
</p>
<p>
<img src=/images/{{request.filename}} alt="img">
</p>
Enter the number of hours you'd like to assign:
<form action="/accounts/viewRequests/" method="post" enctype="multipart/form-data">
<input type="hidden" name="postid" value="{{request.postid}}" />
<input type="hidden" name="user" value="{{request.member}}" />
<input type="hidden" name="filename" value="{{request.filename}}" />
<input type="number" name="numHours" required />
<input type="submit" name="confirm" value="confirm" />
</form>
Or give an explanation as to why you're denying this request:
<form action="/accounts/viewRequests/" method="post" enctype="multipart/form-data">
<input type="hidden" name="postid" value="{{request.postid}}" />
<input type="hidden" name="filename" value="{{request.filename}}" />
<textarea class="form-control" name="reason" rows="2" placeholder="Enter a Description" required></textarea>
<input type="submit" name="deny" value="deny" />
</form>
</div>
{% endfor %}
{% if not requests %}
No pending Service Requests
{% endif %}
</div>
<div class="col-sm-4">
<div>
<h2>Your Info: </h2>
<p>Username: {{username}}</p>
<p>Organization: {{org}}</p>
<p>Hours: {{hours}}</p>
<hr class="d-sm-none">
</div>
</div>
</div>
</div>
<div class="jumbotron text-center" style="margin-bottom:0; ">
</div>
<!-- Optional JavaScript -->
<!-- jQuery first, then Popper.js, then Bootstrap JS -->
<script src="https://code.jquery.com/jquery-3.5.1.slim.min.js" integrity="sha384-DfXdz2htPH0lsSSs5nCTpuj/zy4C+OGpamoFVy38MVBnE+IbbVYUew+OrCXaRkfj" crossorigin="anonymous"></script>
<script src="https://cdn.jsdelivr.net/npm/popper.js@1.16.0/dist/umd/popper.min.js" integrity="sha384-Q6E9RHvbIyZFJoft+2mJbHaEWldlvI9IOYy5n3zV9zzTtmI3UksdQRVvoxMfooAo" crossorigin="anonymous"></script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.5.0/js/bootstrap.min.js" integrity="sha384-OgVRvuATP1z7JjHLkuOU7Xw704+h835Lr+6QL9UvYjZE3Ipu6Tp75j7Bh/kR0JKI" crossorigin="anonymous"></script>
</body>
</html>
......@@ -196,11 +196,11 @@ def viewRequests():
username = flask.session["username"]
cursor = servicePoints.model.get_db()
leaderCur = cursor.execute('SELECT postid, member, service, filename FROM requests WHERE '
leaderCur = cursor.execute('SELECT postid, member, service, description, filename FROM requests WHERE '
'leader =:who',
{"who": username})
results = leaderCur.fetchall()
context = {'requests': results}
context = {'requests': results,'username': username, 'org': flask.session["orgName"], 'hours': flask.session["hours"]}
return render_template('viewRequests.html', **context)
return flask.redirect(flask.url_for('login'))
......@@ -242,18 +242,28 @@ def hash_pass(password_in):
@servicePoints.app.route('/accounts/delete/', methods=['GET', 'POST'])
def delete():
"""Render delete page."""
# Delete Account
name = (flask.session['username'])
to_add = (name,)
cur = servicePoints.model.get_db()
#if flask.session["leader"] == 1:
# leaderCur = cursor.execute('SELECT orgName FROM orgs WHERE '
# 'username =:who',d
# {"who": username})
# results = leaderCur.fetchone()
# orgName = results["orgName"]
# cursor.execute("DELETE from orgs WHERE orgName = ?", (orgName,))
# cursor.execute("UPDATE users SET orgName = 'NONE' WHERE orgName = ?", (orgName,))
# cursor.execute("UPDATE requests SET leader = 'pending' WHERE leader = ?", (username,))
flask.session.clear()
cur.execute('DELETE FROM users WHERE username=?', to_add)
return flask.redirect(flask.url_for('login'))
@servicePoints.app.route('/accounts/deleteOrg/', methods=['GET', 'POST'])
def deleteOrg():
"""Render delete page."""
# Delete Organization
username = flask.session["username"]
cursor = servicePoints.model.get_db()
leaderCur = cursor.execute('SELECT orgName FROM orgs WHERE '
......@@ -411,11 +421,11 @@ def profile():
leader = 1
cur = cursor.execute('SELECT * FROM pendingOrgs WHERE username =:who', {"who": username})
tryfetch = cur.fetchone()
if tryfetch is None:
pending = 0
trypending = cur.fetchone()
if trypending is None:
pending = ''
else:
pending = 1
pending = trypending["orgName"]
context = {"orgs": orgs, "fullname": user["fullname"], "email": user["email"], "username": username, "hours": results["hours"],
"org": user["orgName"], "leader": leader, "pending": pending}
......@@ -498,6 +508,7 @@ def submitPoints():
dummy, temp_filename = tempfile.mkstemp()
file = flask.request.files["file"]
serviceType = flask.request.form["service"]
description = flask.request.form["description"]
file.save(temp_filename)
# Compute filename
......@@ -524,8 +535,8 @@ def submitPoints():
{"who": orgName})
results = studentOrgLeader.fetchone()
leader = results["username"]
cursor.execute('INSERT INTO requests(member, leader, service, filename) VALUES '
'(:one,:two,:three,:four)', {"one": username, "two": leader, "three": serviceType, "four": hash_filename_basename})
cursor.execute('INSERT INTO requests(member, leader, service, description, filename) VALUES '
'(:one,:two,:three,:four,:five)', {"one": username, "two": leader, "three": serviceType, "four": description, "five": hash_filename_basename})
context = {'username': flask.session["username"], 'org': flask.session['orgName'], 'hours': flask.session["hours"],
'leader': flask.session["leader"], 'serviceMsg' :'', 'submitMsg':'Your Service has been submitted'}
......@@ -614,7 +625,7 @@ def manageOrg():
'orgName =:who',
{"who": orgName})
pending = pendingCur.fetchall()
context = {'org': orgName, 'members': members, 'username': username, 'pending': pending}
context = {'org': orgName, 'members': members, 'username': username, 'pending': pending, 'hours': flask.session["hours"]}
return render_template('manageOrg.html', **context)
return flask.redirect(flask.url_for('login'))
......
......@@ -41,6 +41,7 @@ CREATE TABLE requests(
member VARCHAR(20) NOT NULL,
leader VARCHAR(40) NOT NULL,
service VARCHAR(40) NOT NULL,
description VARCHAR(128) NOT NULL,
filename VARCHAR(64) NOT NULL,
PRIMARY KEY(postid)
FOREIGN KEY(member) REFERENCES users(username) ON UPDATE CASCADE
......
No preview for this file type
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment