Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Added API for Joining Club #32

Open
wants to merge 2 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 4 additions & 1 deletion Make_Tables/createdatabase.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@

#Creating the databases
mycursor.execute("create database sac_data")
print("Database sac_data created successfully")
print("Database sac_data created successfully")
mycursor.execute("use sac_data")

#Creating the tables
Expand All @@ -28,6 +28,9 @@
mycursor.execute("CREATE TABLE Events(eventID Integer(4) PRIMARY KEY, eventName varchar(30), about varchar(600), eventDate date, clubID char(6), registered varchar(3000), attended varchar(3000), FOREIGN KEY (clubID) REFERENCES Clubs(clubID));")
print("Successfully Created Events Table") #To store all the events

mycursor.execute("CREATE TABLE MemberRequests(userID char(6), requestMessage varchar(600), clubID char(6), reqStatus set('Accepted','Rejected','Pending') FOREIGN KEY (userID) REFERENCES Users(userID), FOREIGN KEY (clubID) REFERENCES Clubs(clubID));")
print("Successfully Created Table MemberRequests") #To store all join/leave/make admin requests.

print("Done Creating Tables")
mycursor.close()
mydb.close()
Expand Down
86 changes: 83 additions & 3 deletions app.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
from flask import url_for,render_template,redirect,Flask,flash
from flask import url_for,render_template,redirect,Flask,flash,request,session
from forms import LoginForm
from Make_Tables.mysqlconnect import mydb, mycursor, create_insert_statement #Imported the mysqlconnect.py file from Make_tables folder
import numpy as np

app=Flask(__name__,static_url_path='/public')
app.config['SECRET_KEY']='c828b6ff21f45063fd7860e5c1b1d233'
Expand All @@ -14,11 +15,90 @@ def Login():
form=LoginForm()
if form.validate_on_submit():
if form.email.data[1:6].isdecimal() and form.email.data[6:]=='@students.iitmandi.ac.in' :
flash('You have logged-in successfully!')
session['uid']=form.email.data[:6]
flash('You have logged-in successfully!',category='success')
return redirect(url_for('home'))
else:
flash('Login Unsuccessful. Invalid Email/Password')
flash('Login Unsuccessful. Invalid Email/Password',category='failure')
return render_template('login.html',title='Login | SAC Portal, IIT Mandi',form=form)

@app.route('/joinclub',methods=['GET','POST'])
def join():
try:
uid=session['uid']
except:
return redirect(url_for("Login"))
mycursor.execute('SELECT name FROM users WHERE userID="{0}"'.format(uid))
check=mycursor.fetchall()
if not len(check):
return("<title>404 Forbidden</title><h1>404 Forbidden : You don't have access to this page!</h1>")
mycursor.execute("SELECT MemberRequests.requestMessage,clubs.clubName FROM MemberRequests INNER JOIN clubs WHERE MemberRequests.reqStatus='Accepted' AND MemberRequests.clubID=clubs.clubID AND MemberRequests.userID='{0}'".format(uid))
mess=mycursor.fetchall()
if len(mess):
for i in mess:
flash('Your request to '+i[0]+' '+i[1]+' has been approved!',category='success')
mycursor.execute("SELECT MemberRequests.requestMessage,clubs.clubName FROM MemberRequests INNER JOIN clubs WHERE MemberRequests.reqStatus='Rejected' AND MemberRequests.clubID=clubs.clubID AND MemberRequests.userID='{0}'".format(uid))
mess=mycursor.fetchall()
if len(mess):
for i in mess:
flash('Your request to '+i[0]+' '+i[1]+' has been rejected!',category='failure')
mycursor.execute('DELETE FROM MemberRequests WHERE reqStatus!="Pending" AND userID="{0}"'.format(uid))
mydb.commit()

mycursor.execute("SELECT clubName,type,clubID FROM clubs WHERE clubID NOT IN (SELECT clubID FROM clubmembers WHERE userID='{0}') AND clubID NOT IN (SELECT clubID FROM MemberRequests WHERE requestMessage='Join' AND userID='{0}'); ".format(uid))
notjoined=np.array(mycursor.fetchall())
mycursor.execute("SELECT clubName,type,clubID FROM clubs WHERE clubID IN (SELECT clubID FROM clubmembers WHERE userID='{0}') ; ".format(uid))
joined=mycursor.fetchall()
clubsnotjoined=[]
clubsjoined=[]
for i in range(len(notjoined)):
clubsnotjoined.append(notjoined[i][0])
for i in range(len(joined)):
clubsjoined.append(joined[i][0])

if request.method=='POST':
data=request.form
for club in data:
i=clubsnotjoined.index(club)
if notjoined[i][1]=={'open'}:
mycursor.execute("INSERT INTO clubmembers VALUES('{0}','{1}')".format(uid,notjoined[i][2]))
mydb.commit()
flash('You have successfully joined '+notjoined[i][0],category="success")
return redirect('/joinclub')
else:
print('Inside',notjoined[i][0])
mycursor.execute("INSERT INTO MemberRequests VALUES('{0}','{1}','{2}','Pending')".format(uid,'Join',notjoined[i][2]))
mydb.commit()
flash('Your request has been sent. It will be approved/dissaproved by the Club Coordinator',category="success")
return redirect('/joinclub')
return render_template('joinclub.html',notjoined=clubsnotjoined,joined=clubsjoined,title='Join a Club! | SAC Portal')

@app.route('/requests',methods=['GET','POST'])
def approve():
try:
uid=session['uid']
except:
return redirect(url_for("Login"))
mycursor.execute("SELECT clubID FROM coordinators WHERE userID='{0}' ".format(uid))
clubs=mycursor.fetchall()
if request.method=='POST':
user,clubid,status=list(request.form.to_dict().keys())[0].split()
print('User : ',user)
if status=='accept':
mycursor.execute('INSERT INTO ClubMembers VALUES ("{0}","{1}")'.format(user,clubid))
mycursor.execute('UPDATE MemberRequests SET reqStatus="Accepted" WHERE clubID="{0}" AND userID="{1}"; '.format(clubid,user))
mydb.commit()
else:
mycursor.execute('UPDATE MemberRequests SET reqStatus="Rejected" WHERE clubID="{0}" AND userID="{1}";'.format(clubid,user))
mydb.commit()
if len(clubs):
reqList=[]
for i in clubs:
mycursor.execute("SELECT MemberRequests.userID,MemberRequests.requestMessage,clubs.clubName,MemberRequests.clubID FROM MemberRequests INNER JOIN clubs WHERE MemberRequests.clubID='{0}' AND reqStatus='Pending' AND MemberRequests.clubID=clubs.clubID;".format(i[0]))
reqList.extend(mycursor.fetchall())
return render_template("approve.html",reqList=reqList,title='Approve Requests | SAC-Portal')
else:
return("<title>404 Forbidden</title><h1>404 Forbidden : You don't have access to this page!</h1>")

if __name__=="__main__":
app.run(debug=True)
33 changes: 33 additions & 0 deletions templates/approve.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
{% extends "layout.html" %}
{% block css %}
<style>
th,td{
padding:5px 10px;
}
</style>
{% endblock %}
{% block content %}
{% if reqList %}
<div style="margin:2% 0 0 35%;">
<table style="text-align:center;">
<tr>
<th>Requests</th>
<th>Action</th>
</tr>
{% for req in reqList %}
<form action="" method="POST">
<tr>
<td>{{req[0]}} wants to join {{req[2]}}</td>
<td>
<input type="submit" value="Accept" name="{{req[0]+' '+req[3]}} accept">&nbsp
<input type="submit" value="Reject" name="{{req[0]+' '+req[3]}} reject">
</td>
</tr>
</form>
{% endfor %}
</table>
</div>
{% else %}
<h3 style="text-align:center;">You currently don't have any requests from anyone to join your club!</h3>
{% endif %}
{% endblock %}
16 changes: 11 additions & 5 deletions templates/index.html
Original file line number Diff line number Diff line change
@@ -1,11 +1,17 @@
{% extends "layout.html" %}
{% block content %}
{% with messages = get_flashed_messages() %}
{% with messages = get_flashed_messages(with_categories=True) %}
{% if messages %}
{% for i in messages %}
<p style="text-align:center;margin:2% 0 -1% 32.5%;padding:6px 0;width:35%;border-radius:7px;color:rgb(0,136,0);background:rgba(0,170, 0, 0.3);">
{{ i }}
</p>
{% for category,i in messages %}
{% if category=='success' %}
<p style="text-align:center;margin:2% 0 -1% 32.5%;padding:6px 0;width:35%;border-radius:7px;color:rgb(0,136,0);background:rgba(0,170, 0, 0.3);">
{{ i }}
</p>
{% else %}
<p class="alc" style="margin:2% 0 -1% 32.5%;padding:6px 0;width:35%;border-radius:7px;color:rgb(136, 0, 0);background:rgba(170, 0, 0, 0.3);">
{{ i }}
</p>
{% endif %}
{% endfor %}
{% endif %}
{% endwith %}
Expand Down
56 changes: 56 additions & 0 deletions templates/joinclub.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
{% extends "layout.html" %}
{% block css %}
<style>
td,th{
padding:5px 10px;
}
</style>
{% endblock %}
{% block content %}
{% with messages = get_flashed_messages(with_categories=True) %}
{% if messages %}
{% for category,i in messages %}
{% if category=='success' %}
<p style="text-align:center;margin:2% 0 -1% 32.5%;padding:6px 0;width:35%;border-radius:7px;color:rgb(0,136,0);background:rgba(0,170,0, 0.3);">
{{ i }}
</p>
{% else %}
<p style="text-align:center;margin:2% 0 -1% 32.5%;padding:6px 0;width:35%;border-radius:7px;color:rgb(136, 0, 0);background:rgba(170, 0, 0, 0.3);">
{{ i }}
</p>
{% endif %}`
{% endfor %}
{% endif %}
{% endwith %}
{% if notjoined|length %}
<div style="margin:20px 0 0 35%;">
<h3>Clubs You Have Not Joined</h3><br>
<table style="margin-left:6%;">
<tr>
<th>Clubs</th>
<th>Join</th>
</tr>
{% for club in notjoined %}
<form method="POST">
<tr>
<td>{{club}}</td>
<td><input type="submit" value="Join" name="{{club}}"><br></td>
</tr>
</form>
{% endfor %}
</table>
</div>
{% else %}
<p>You have already joined all clubs!</p>
{% endif %}
{% if joined|length %}
<div style="margin:20px 0 0 34%;">
<h3>Clubs You Have Already Joined</h3>
<div style="margin-left:10%;">
{% for club in joined %}
{{ club }}<br><br>
{% endfor %}
</div>
</div>
{% endif %}
{% endblock %}
16 changes: 11 additions & 5 deletions templates/login.html
Original file line number Diff line number Diff line change
Expand Up @@ -7,12 +7,18 @@
<h1 class="alc" style="margin-top:20px;">Placeholder Text for SAC Logo</h1>
</div>
<div>
{% with messages = get_flashed_messages() %}
{% with messages = get_flashed_messages(with_categories=True) %}
{% if messages %}
{% for i in messages %}
<p class="alc" style="margin:2% 0 -1% 32.5%;padding:6px 0;width:35%;border-radius:7px;color:rgb(136, 0, 0);background:rgba(170, 0, 0, 0.3);">
{{ i }}
</p>
{% for category,i in messages %}
{% if category=='success' %}
<p class="alc" style="margin:2% 0 -1% 32.5%;padding:6px 0;width:35%;border-radius:7px;color:rgb(0,136,0);background:rgba(0,170,0, 0.3);">
{{ i }}
</p>
{% else %}
<p class="alc" style="margin:2% 0 -1% 32.5%;padding:6px 0;width:35%;border-radius:7px;color:rgb(136, 0, 0);background:rgba(170, 0, 0, 0.3);">
{{ i }}
</p>
{% endif %}
{% endfor %}
{% endif %}
{% endwith %}
Expand Down