From 042d0c86fa891c5ab747654e126f3f07d77ef402 Mon Sep 17 00:00:00 2001 From: Ulrich Knechtelsdorfer Date: Sat, 28 May 2016 17:10:07 +0200 Subject: [PATCH] - add: support for multible rfid tags --- app/database.py | 52 ++++++++++++++++++++++----- app/templates/manage_users.html | 2 +- app/templates/manage_users_add.html | 2 +- app/templates/manage_users_edit.html | 2 +- doc/database.sql | 10 ++++++ test/database.db | Bin 59392 -> 62464 bytes 6 files changed, 56 insertions(+), 12 deletions(-) diff --git a/app/database.py b/app/database.py index c4d677f..1076069 100644 --- a/app/database.py +++ b/app/database.py @@ -52,11 +52,11 @@ def get_user(u): u.password=row[2] u.longname=row[3] u.email=row[4] - u.rfid_id=row[5] u.isblack=row[6] u.isbaron=row[7] u.isshown=row[8] u.autoblack=row[9] + u.rfid_id = get_rfid_ids_by_userid(u.id) logging.info(u) return u @@ -70,29 +70,37 @@ def get_user_by_name(name): u.password=row[2] u.longname=row[3] u.email=row[4] - u.rfid_id=row[5] u.isblack=row[6] u.isbaron=row[7] u.isshown=row[8] u.autoblack=row[9] logging.debug(u) + u.rfid_id = get_rfid_ids_by_userid(u.id) return u -def get_user_by_rfid(rfidid): - row = query_db("SELECT * FROM USERS WHERE RFID_ID = ?", [rfidid], one=True) +def get_user_by_id(id): + row = query_db("SELECT * FROM USERS WHERE ID = ?", [id], one=True) u = User() if row is None: - return None + return None u.id=row[0] u.name=row[1] u.password=row[2] u.longname=row[3] u.email=row[4] - u.rfid_id=row[5] u.isblack=row[6] u.isbaron=row[7] u.isshown=row[8] u.autoblack=row[9] + u.rfid_id = get_rfid_ids_by_userid(u.id) + logging.debug(u) + return u + +def get_user_by_rfid(rfidid): + row = query_db("SELECT * FROM rfid WHERE RFID_ID = ?", [rfidid], one=True) + if row is None: + return None + u = get_user_by_id(row[1]) logging.debug(u) return u @@ -106,23 +114,49 @@ def get_users(): u.password=row[2] u.longname=row[3] u.email=row[4] - u.rfid_id=row[5] u.isblack=row[6] u.isbaron=row[7] u.isshown=row[8] u.autoblack=row[9] + u.rfid_id = get_rfid_ids_by_userid(u.id) users.append(u) return users def add_user(u): - query_db("INSERT INTO USERS (NAME, PASSWORD, LONGNAME, EMAIL, RFID_ID) VALUES (? ,? ,?, ?, ?)", (u.name, u.password, u.longname, u.email, u.rfid_id)) + query_db("INSERT INTO USERS (NAME, PASSWORD, LONGNAME, EMAIL) VALUES (? ,? ,?, ?)", (u.name, u.password, u.longname, u.email)) + user_id = get_user_by_name(u.name).id + set_rfid_to_userid(u.rfid_id, user_id) get_db().commit() +def get_rfid_ids_by_userid(user_id): + rows = query_db("SELECT * FROM Rfid WHERE userid = ?", [user_id]) + rfid_ids = [] + for row in rows: + rfid_ids.append(row[2]) + return rfid_ids + +def set_rfid_to_userid(rfid_ids, user_id): + new_rfids = rfid_ids.replace(" ","").split(";") + + for rfid_id in new_rfids: # add new rfid_ids + u = get_user_by_rfid(rfid_id) + if not u: #rfid id is not assigned to a user, so it should be added + add_rfid_id(rfid_id, user_id) + + for old_rfid in get_rfid_ids_by_userid(user_id): + if old_rfid not in new_rfids: + query_db("DELETE FROM Rfid WHERE rfid_id = ?", (old_rfid, )) + + +def add_rfid_id(rfid_id, userid): + rfid_id = rfid_id.lower(); + query_db("INSERT INTO Rfid (userid, rfid_id) values (?, ?)", (userid, rfid_id)) def update_user(u): #query_db("UPDATE users SET (NAME, LONGNAME, EMAIL, RFID_ID, ISBLACK, ISBARON, ISSHOWN) VALUES (?, ?, ?, ?, ?, ?, ?) WHERE ID=?", (u.name, u.longname, u.email, u.rfid_id, u.isblack, u.isbaron, u.isshown, u.id)) - query_db("UPDATE users SET NAME=?, LONGNAME=?, EMAIL=?, RFID_ID=?, ISBLACK=?, ISBARON=?, ISSHOWN=?, AUTOBLACK=? WHERE ID=?", (u.name, u.longname, u.email, u.rfid_id, u.isblack, u.isbaron, u.isshown, u.autoblack, u.id)) + query_db("UPDATE users SET NAME=?, LONGNAME=?, EMAIL=?, ISBLACK=?, ISBARON=?, ISSHOWN=?, AUTOBLACK=? WHERE ID=?", (u.name, u.longname, u.email, u.isblack, u.isbaron, u.isshown, u.autoblack, u.id)) + set_rfid_to_userid(u.rfid_id, u.id) get_db().commit() diff --git a/app/templates/manage_users.html b/app/templates/manage_users.html index 5316382..000e445 100644 --- a/app/templates/manage_users.html +++ b/app/templates/manage_users.html @@ -21,7 +21,7 @@ {{user.name}} {{user.longname}} {{user.email}} - {{user.rfid_id}} + {% if user.rfid_id %} {% for rfid_id in user.rfid_id %} {{rfid_id}};{% endfor %} {% endif %} {% if user.isblack %} ☑ {% else %} ☐ {% endif %} {% if user.isbaron %} ☑ {% else %} ☐ {% endif %} {% if user.isshown %} ☑ {% else %} ☐ {% endif %} diff --git a/app/templates/manage_users_add.html b/app/templates/manage_users_add.html index e414e66..9b7761e 100644 --- a/app/templates/manage_users_add.html +++ b/app/templates/manage_users_add.html @@ -15,7 +15,7 @@ Passwort wiederholen:

Name:

Email:

- Euml ID:

+ Euml ID (falls mehrere durch ; trennen):

{% endblock %} diff --git a/app/templates/manage_users_edit.html b/app/templates/manage_users_edit.html index 0868f60..dd89fc2 100644 --- a/app/templates/manage_users_edit.html +++ b/app/templates/manage_users_edit.html @@ -13,7 +13,7 @@ Username:

Name:

Email:

- Euml ID:

+ Euml ID: (falls mehrere durch ; trennen)

Geschwärzt:
Baron:
Angezeigt:
diff --git a/doc/database.sql b/doc/database.sql index 0111873..5ee4653 100644 --- a/doc/database.sql +++ b/doc/database.sql @@ -75,6 +75,16 @@ CREATE TABLE Deposits( FOREIGN KEY(userid) REFERENCES USERS(id) ); +CREATE TABLE Rfid( + di INTEGER PRIMARY KEY, + userid INTEGER NOT NULL, + rfid_id TEXT, + is_valid BOOLEAN DEFAULT 1, + + FOREIGN KEY(userid) REFERENCES USERS(id) +); + + -- The table Config stores basic config data, this is for the admins and the barons diff --git a/test/database.db b/test/database.db index b0b2db7820a641ed81e5f4a6cb84f7ff6294b52f..8b3a0ef1abbf51509c043e5d9457e38068ac5f30 100644 GIT binary patch delta 1068 zcmYk5PfR0K9LL|x&wEdm;f=jr7 zb2#fdUU>qYWFP6D>7MtGnQSElC#VDi?_<_ivvrc8pazvWZNSkuGr%fhWn;iP6 z`)n{wX#0Z=ZPr#WAA=b=+LU*88oOWF>fMu})=$SYnn0wVd_?>R69f;Rp>uSECG_Ep z0UL2345L-0EDBCma5Aj35>Lm4XmMvPn~f)g%)TcW$))Gj@H)fGdmECEjjOxG>fUa1 zQ_2=t_r|8WSW#j+;6Pdys-iqER1c;NI^#Yz@cYVMLAl0!oNWf5gTyK#)|yzJ;SK9}1#@T+S|Ga7AElP;rTO{&(ULnoUuj4(E->+-)nCSRk;O9ap1d-xhYg*-%I z9&F_0Y2{aPVvME`L3rT}*28cvkI%*W?F_Tz^DeOqn(f)&Rv=~(`7LpU!wyOzZKwBM zr}DHr`}`?6V*v-E!3vA-F7RRkhiJXG zP`?>lR(ghmBZMETA-;I^>3?UTr>!OmnH=x4+jMAj1#jxH5b03B1acp}$J|BmW zw*19tCpn-6b5jwt{68K-EVA10$2v>T^l^*az)j2=p}|lrgLpGeQ`fcyCzGU#fFae> z%6*b)uTcFX!^6ZU`I@k+N-0?p_4Ur3R4B-Y?0j$~7P9NgTQ}@@h>G_6A7k2SZ*uMs zi}w`K&WCdRoM9@}dksOw(n=x`3k5gqtD$f(9pmkc_D_%1KIlEUq1PwiA%cha-hB!8 z@7^+_;Wjn?rqMWh17COQ`z22)+}f2RTS~*ztgWxC%ke@YlWmme{UYycHtK1iz_PW~ Zh~N!uyYpMoWJJ*$&t8*sjL|QW{4XRu5Ssu1 delta 243 zcmZp8!Q60xd4jYc69WT-6%fM!&qN(#prGzEZdQ;G3s~H0vm(m`W)YAG3-cS0kOlK^ z=5Nd&nco0qPBKrNAhh{CyEunXE(3E9vmnz%CQXK1#)FJO438%^hECQMD%<>Az>RV8 zVxbJ~I%aML#YR?RO;wJ`;=-jol}y|W;*G4j`l=iplPd)BH}?ovoDg7R3}IlhU|Pj^ zj9G>;gt>2HqXXmSkh>e0L^zm*7?__jA7Y-*+{~QL?9HslEVQxl7t>^+$DjCF7@`=M amNEWj)C4jZ7$zIOcL(D0n>C+aX957$OFlLL