Merge branch 'MultiLists' into 'master'
Multi lists See merge request benjamyn/shoplist2!2
This commit is contained in:
commit
3d454b8e35
BIN
__pycache__/shop.cpython-38.pyc
Normal file
BIN
__pycache__/shop.cpython-38.pyc
Normal file
Binary file not shown.
1
config
1
config
@ -1,4 +1,5 @@
|
|||||||
[mysql]
|
[mysql]
|
||||||
|
Host = localhost
|
||||||
Username = SQLUsernam
|
Username = SQLUsernam
|
||||||
Password = SQLPassword
|
Password = SQLPassword
|
||||||
Database = DBNAME
|
Database = DBNAME
|
||||||
66
shop.py
66
shop.py
@ -14,7 +14,7 @@ except Exception as E:
|
|||||||
|
|
||||||
def dbConnect():
|
def dbConnect():
|
||||||
mydb = mysql.connector.connect(
|
mydb = mysql.connector.connect(
|
||||||
host="localhost",
|
host=config["mysql"]["Host"],
|
||||||
user=config["mysql"]["Username"],
|
user=config["mysql"]["Username"],
|
||||||
passwd=config["mysql"]["Password"],
|
passwd=config["mysql"]["Password"],
|
||||||
database=config["mysql"]["Database"]
|
database=config["mysql"]["Database"]
|
||||||
@ -28,9 +28,12 @@ def doesTableExist():
|
|||||||
mycursor.execute('''SHOW TABLES''')
|
mycursor.execute('''SHOW TABLES''')
|
||||||
tables = mycursor.fetchall()
|
tables = mycursor.fetchall()
|
||||||
if len(tables) == 0:
|
if len(tables) == 0:
|
||||||
mycursor.execute('''CREATE TABLE SHOPLIST (id INT AUTO_INCREMENT PRIMARY KEY, item VARCHAR(255), gotten BOOLEAN, user_id INT, FOREIGN KEY (`user_id`) REFERENCES `USERS`(`id`)
|
|
||||||
ON DELETE CASCADE)''')
|
|
||||||
mycursor.execute('''CREATE TABLE USERS (id INT AUTO_INCREMENT PRIMARY KEY, username VARCHAR(255), password VARCHAR(255), admin BOOLEAN)''')
|
mycursor.execute('''CREATE TABLE USERS (id INT AUTO_INCREMENT PRIMARY KEY, username VARCHAR(255), password VARCHAR(255), admin BOOLEAN)''')
|
||||||
|
mycursor.execute('''CREATE TABLE LISTS (id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(255))''')
|
||||||
|
mycursor.execute('''CREATE TABLE SHOPLIST (id INT AUTO_INCREMENT PRIMARY KEY, item VARCHAR(255), gotten BOOLEAN, user_id INT, list_id INT, FOREIGN KEY (`list_id`) REFERENCES `LISTS`(`id`), FOREIGN KEY (`user_id`) REFERENCES `USERS`(`id`)
|
||||||
|
ON DELETE CASCADE)''')
|
||||||
|
mycursor.execute('''CREATE TABLE USER_META (user_id INT, list_id INT, FOREIGN KEY (`list_id`) REFERENCES `LISTS`(`id`), FOREIGN KEY (`user_id`) REFERENCES `USERS`(`id`)
|
||||||
|
ON DELETE CASCADE)''')
|
||||||
mydb.close()
|
mydb.close()
|
||||||
|
|
||||||
def runQuery(query, data=None):
|
def runQuery(query, data=None):
|
||||||
@ -49,29 +52,29 @@ def runQuery(query, data=None):
|
|||||||
return ret
|
return ret
|
||||||
|
|
||||||
def readFromDB():
|
def readFromDB():
|
||||||
# query = '''select * from SHOPLIST'''
|
# By default load all shopping lists the user is a part of (Most users will only have one so this this fine)
|
||||||
query = '''select SHOPLIST.id, SHOPLIST.item, SHOPLIST.gotten, USERS.username from SHOPLIST inner join USERS on SHOPLIST.user_id = USERS.id'''
|
query = '''select SHOPLIST.id, SHOPLIST.item, SHOPLIST.gotten, USERS.username, SHOPLIST.list_id from SHOPLIST inner join USERS on SHOPLIST.user_id = USERS.id inner join USER_META on SHOPLIST.list_id = USER_META.list_id'''
|
||||||
return runQuery(query)
|
return runQuery(query)
|
||||||
|
|
||||||
def insertToDB(data):
|
def insertToDB(data):
|
||||||
query = f"INSERT INTO SHOPLIST (item, gotten, user_id) VALUES (%s, 0, %s)"
|
query = "INSERT INTO SHOPLIST (item, gotten, user_id, list_id) VALUES (%s, 0, %s, %s)"
|
||||||
data = (data['item'], data['name'])
|
data = (data['item'], data['name'], data["list_id"])
|
||||||
# print(query)
|
# print(query)
|
||||||
runQuery(query, data)
|
runQuery(query, data)
|
||||||
|
|
||||||
|
|
||||||
def deleteRow(rowID):
|
def deleteRow(rowID):
|
||||||
query = f"DELETE FROM SHOPLIST WHERE id = %s"
|
query = "DELETE FROM SHOPLIST WHERE id = %s"
|
||||||
data = (rowID, )
|
data = (rowID, )
|
||||||
runQuery(query, data)
|
runQuery(query, data)
|
||||||
|
|
||||||
def getItem(rowID):
|
def getItem(rowID):
|
||||||
query = f"UPDATE SHOPLIST set gotten = 1 where id = %s"
|
query = "UPDATE SHOPLIST set gotten = 1 where id = %s"
|
||||||
data = (rowID, )
|
data = (rowID, )
|
||||||
runQuery(query, data)
|
runQuery(query, data)
|
||||||
|
|
||||||
def unGetItem(rowID):
|
def unGetItem(rowID):
|
||||||
query = f"UPDATE SHOPLIST set gotten = 0 where id = %s"
|
query = "UPDATE SHOPLIST set gotten = 0 where id = %s"
|
||||||
data = (rowID, )
|
data = (rowID, )
|
||||||
runQuery(query, data)
|
runQuery(query, data)
|
||||||
|
|
||||||
@ -80,22 +83,40 @@ def get_users(username=None):
|
|||||||
#return all users
|
#return all users
|
||||||
query = "select username, admin, id from USERS"
|
query = "select username, admin, id from USERS"
|
||||||
return runQuery(query)
|
return runQuery(query)
|
||||||
query = f"select username, admin from USERS where username like %s"
|
query = "select username, admin from USERS where username like %s"
|
||||||
data = (username, )
|
data = (username, )
|
||||||
return runQuery(query, data)
|
return runQuery(query, data)
|
||||||
|
|
||||||
def add_user(userData):
|
def add_user(userData):
|
||||||
username = userData["username"]
|
username = userData["username"]
|
||||||
password = userData["password"]
|
password = userData["password"]
|
||||||
query = f"insert into USERS (username, password, admin) values (%s, md5(%s), False)"
|
query = "insert into USERS (username, password, admin) values (%s, md5(%s), False)"
|
||||||
data = (username, password)
|
data = (username, password)
|
||||||
runQuery(query, data)
|
runQuery(query, data)
|
||||||
|
|
||||||
def update_pass(user_id, newpass):
|
def update_pass(user_id, newpass):
|
||||||
query = f"update USERS set password=md5(%s) where id=%s"
|
query = "update USERS set password=md5(%s) where id=%s"
|
||||||
data = (newpass, user_id)
|
data = (newpass, user_id)
|
||||||
runQuery(query, data)
|
runQuery(query, data)
|
||||||
|
|
||||||
|
def get_items(user_id, list_id=None):
|
||||||
|
if list_id != None:
|
||||||
|
query = "select SHOPLIST.id, SHOPLIST.item, SHOPLIST.gotten, USERS.username from SHOPLIST inner join USERS on SHOPLIST.user_id = USERS.id inner join USER_META on SHOPLIST.list_id = USER_META.list_id where USER_META.user_id = %s and SHOPLIST.list_id = %s"
|
||||||
|
data = (user_id, list_id)
|
||||||
|
return runQuery(query, data)
|
||||||
|
query = "select SHOPLIST.id, SHOPLIST.item, SHOPLIST.gotten, USERS.username from SHOPLIST inner join USERS on SHOPLIST.user_id = USERS.id inner join USER_META on SHOPLIST.list_id = USER_META.list_id where USER_META.user_id = %s"
|
||||||
|
data = (user_id,)
|
||||||
|
return runQuery(query, data)
|
||||||
|
|
||||||
|
def get_list_ids(user_id):
|
||||||
|
ret = {}
|
||||||
|
query = "select USER_META.list_id, LISTS.name from USER_META inner join LISTS on LISTS.id = USER_META.list_id where USER_META.user_id = %s"
|
||||||
|
data = (user_id,)
|
||||||
|
res = runQuery(query, data)
|
||||||
|
for lid, name in res:
|
||||||
|
ret[lid] = name
|
||||||
|
return ret
|
||||||
|
|
||||||
app = Flask(__name__)
|
app = Flask(__name__)
|
||||||
app.config["DEBUG"] = True
|
app.config["DEBUG"] = True
|
||||||
app.secret_key = b'*$#@U9423jr92jioJKL_)_;dasfj()12'
|
app.secret_key = b'*$#@U9423jr92jioJKL_)_;dasfj()12'
|
||||||
@ -106,8 +127,12 @@ def index():
|
|||||||
data = {"title":"Login"}
|
data = {"title":"Login"}
|
||||||
return render_template("auth.html", data=data)
|
return render_template("auth.html", data=data)
|
||||||
|
|
||||||
query = readFromDB()
|
if session.get("active_id") == "0":
|
||||||
data = {"title": "Shopping List", "results": query, "username": session["username"]}
|
res = get_items(session["id"])
|
||||||
|
else:
|
||||||
|
res = get_items(session["id"], session["active_id"])
|
||||||
|
data = {"title": "Shopping List", "results": res, "session": session, "list_ids": session["list_ids"]}
|
||||||
|
|
||||||
for device in MOBILES:
|
for device in MOBILES:
|
||||||
if device in request.user_agent.platform:
|
if device in request.user_agent.platform:
|
||||||
return render_template('mobile.html', data=data)
|
return render_template('mobile.html', data=data)
|
||||||
@ -119,7 +144,7 @@ def handle_data():
|
|||||||
for x in request.form:
|
for x in request.form:
|
||||||
if request.form[x] == '':
|
if request.form[x] == '':
|
||||||
return redirect(url_for('index'))
|
return redirect(url_for('index'))
|
||||||
insertToDB({"item": request.form["item"], "name": session["id"]})
|
insertToDB({"item": request.form["item"], "name": session["id"], "list_id": request.form["add2list"]})
|
||||||
if "rem" in request.form:
|
if "rem" in request.form:
|
||||||
deleteRow(request.form["rem"])
|
deleteRow(request.form["rem"])
|
||||||
|
|
||||||
@ -132,17 +157,18 @@ def handle_data():
|
|||||||
if "loginform" in request.form:
|
if "loginform" in request.form:
|
||||||
query = "select id, username, admin from USERS where username = %s and password = md5(%s)"
|
query = "select id, username, admin from USERS where username = %s and password = md5(%s)"
|
||||||
data = (request.form["username"].lower(), request.form["password"])
|
data = (request.form["username"].lower(), request.form["password"])
|
||||||
|
|
||||||
res = runQuery(query, data)
|
res = runQuery(query, data)
|
||||||
if len(res) != 0:
|
if len(res) != 0:
|
||||||
|
list_ids = get_list_ids(res[0][0])
|
||||||
session["id"] = res[0][0]
|
session["id"] = res[0][0]
|
||||||
session["username"] = res[0][1]
|
session["username"] = res[0][1]
|
||||||
session["isAdmin"] = res[0][2]
|
session["isAdmin"] = res[0][2]
|
||||||
|
session["list_ids"] = list_ids
|
||||||
|
session["active_id"] = "0"
|
||||||
|
|
||||||
if "newuser" in request.form:
|
if "newuser" in request.form:
|
||||||
#first check if the user exists
|
#first check if the user exists
|
||||||
usrCheck = get_users(request.form["username"])
|
usrCheck = get_users(request.form["username"])
|
||||||
print(usrCheck)
|
|
||||||
if len(usrCheck) != 0:
|
if len(usrCheck) != 0:
|
||||||
return "Username Exists"
|
return "Username Exists"
|
||||||
userData = {"username": request.form["username"], "password": request.form["password"]}
|
userData = {"username": request.form["username"], "password": request.form["password"]}
|
||||||
@ -157,6 +183,10 @@ def handle_data():
|
|||||||
|
|
||||||
if "logout" in request.form:
|
if "logout" in request.form:
|
||||||
session.clear()
|
session.clear()
|
||||||
|
|
||||||
|
if "list" in request.form:
|
||||||
|
session["active_id"] = request.form['list']
|
||||||
|
|
||||||
return redirect(url_for('index'))
|
return redirect(url_for('index'))
|
||||||
|
|
||||||
@app.route("/admin")
|
@app.route("/admin")
|
||||||
|
|||||||
@ -2,6 +2,11 @@
|
|||||||
<form action="/post" method="post">
|
<form action="/post" method="post">
|
||||||
<p style="display: inline">Item: </p>
|
<p style="display: inline">Item: </p>
|
||||||
<input class="form-control" id="addbox" style="display: inline" type="text" name="item" value=""><br><br>
|
<input class="form-control" id="addbox" style="display: inline" type="text" name="item" value=""><br><br>
|
||||||
|
<select id="addbox" name="add2list" class="custom-select custom-select-lg mb-3">
|
||||||
|
{% for listid in data["list_ids"] %}
|
||||||
|
<option type="submit" value="{{listid}}" id="addbox" name="list">{{id[listid]}}</option>
|
||||||
|
{% endfor %}
|
||||||
|
</select>
|
||||||
<div style="text-align: center; padding-bottom: 2px"><input class="btn btn-secondary" type="submit" style="text-align: center" name="addValue" value="Submit"></form>
|
<div style="text-align: center; padding-bottom: 2px"><input class="btn btn-secondary" type="submit" style="text-align: center" name="addValue" value="Submit"></form>
|
||||||
</form>
|
</form>
|
||||||
</div>
|
</div>
|
||||||
@ -1,7 +1,27 @@
|
|||||||
{% include "header.html" %}
|
{% include "header.html" %}
|
||||||
|
|
||||||
<body>
|
<body>
|
||||||
<h1 class="container" style="text-align: center">{{ data["title"] }}, {{data["username"].title()}}</h1>
|
<h1 class="container" style="text-align: center">{{ data["title"] }}, {{data["session"]["username"].title()}}
|
||||||
|
<div class="dropdown">
|
||||||
|
<form action="/post" method="post" id="test">
|
||||||
|
<button class="btn btn-secondary dropdown-toggle" type="button" id="dropdownMenu2" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
|
||||||
|
{% set id = session["list_ids"] %}
|
||||||
|
{% set actid = session["active_id"] %}
|
||||||
|
{% if actid == "0" %}
|
||||||
|
ALL
|
||||||
|
{% else %}
|
||||||
|
{{ id[actid] }}
|
||||||
|
{% endif %}
|
||||||
|
</button>
|
||||||
|
<div class="dropdown-menu" aria-labelledby="dropdownMenu2">
|
||||||
|
<button class="dropdown-item" type="submit" value="0" id="" name="list">All</button>
|
||||||
|
{% for listid in data["list_ids"] %}
|
||||||
|
<button class="dropdown-item" type="submit" value="{{listid}}" id="{{id}}" name="list">{{id[listid]}}</button>
|
||||||
|
{% endfor %}
|
||||||
|
</div>
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
</h1>
|
||||||
<!-- <aside> -->
|
<!-- <aside> -->
|
||||||
<div id="addForm">
|
<div id="addForm">
|
||||||
{% include "addForm.html" %}
|
{% include "addForm.html" %}
|
||||||
@ -25,6 +45,9 @@
|
|||||||
vpn_key
|
vpn_key
|
||||||
</i></button></a>
|
</i></button></a>
|
||||||
</div>
|
</div>
|
||||||
|
<div>
|
||||||
|
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<!-- jQuery library -->
|
<!-- jQuery library -->
|
||||||
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
|
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
|
||||||
|
|||||||
@ -21,7 +21,7 @@
|
|||||||
{% endif %}</td>
|
{% endif %}</td>
|
||||||
<td>
|
<td>
|
||||||
<form>
|
<form>
|
||||||
{% if data["username"] == x[3] %}
|
{% if data["session"]["username"] == x[3] %}
|
||||||
<button class="btn btn-secondary" type="submit" formaction="/post" formmethod="POST" name="rem"
|
<button class="btn btn-secondary" type="submit" formaction="/post" formmethod="POST" name="rem"
|
||||||
value="{{x[0]}}">Remove</button>
|
value="{{x[0]}}">Remove</button>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|||||||
@ -1,6 +1,24 @@
|
|||||||
{% include "header.html" %}
|
{% include "header.html" %}
|
||||||
<body>
|
<body>
|
||||||
<h1 class="container" style="text-align: center">{{ data["title"] }}</h1>
|
<h1 class="container" style="text-align: center">{{ data["title"] }}</h1>
|
||||||
|
<div class="dropdown">
|
||||||
|
<form action="/post" method="post" id="test">
|
||||||
|
<button class="btn btn-secondary dropdown-toggle" type="button" id="dropdownMenu2" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
|
||||||
|
{% set id = session["list_ids"] %}
|
||||||
|
{% set actid = session["active_id"] %}
|
||||||
|
{% if actid == "0" %}
|
||||||
|
ALL
|
||||||
|
{% else %}
|
||||||
|
{{ id[actid] }}
|
||||||
|
{% endif %}
|
||||||
|
</button>
|
||||||
|
<div class="dropdown-menu" aria-labelledby="dropdownMenu2">
|
||||||
|
<button class="dropdown-item" type="submit" value="0" id="" name="list">All</button>
|
||||||
|
{% for listid in data["list_ids"] %}
|
||||||
|
<button class="dropdown-item" type="submit" value="{{listid}}" id="{{id}}" name="list">{{id[listid]}}</button>
|
||||||
|
{% endfor %}
|
||||||
|
</div>
|
||||||
|
</form>
|
||||||
<div class="" >
|
<div class="" >
|
||||||
{% include "addForm.html" %}
|
{% include "addForm.html" %}
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user