- add: support for multible rfid tags

This commit is contained in:
Ulrich Knechtelsdorfer
2016-05-28 17:10:07 +02:00
parent 33676b6c94
commit 042d0c86fa
6 changed files with 56 additions and 12 deletions

View File

@@ -52,11 +52,11 @@ def get_user(u):
u.password=row[2] u.password=row[2]
u.longname=row[3] u.longname=row[3]
u.email=row[4] u.email=row[4]
u.rfid_id=row[5]
u.isblack=row[6] u.isblack=row[6]
u.isbaron=row[7] u.isbaron=row[7]
u.isshown=row[8] u.isshown=row[8]
u.autoblack=row[9] u.autoblack=row[9]
u.rfid_id = get_rfid_ids_by_userid(u.id)
logging.info(u) logging.info(u)
return u return u
@@ -70,16 +70,16 @@ def get_user_by_name(name):
u.password=row[2] u.password=row[2]
u.longname=row[3] u.longname=row[3]
u.email=row[4] u.email=row[4]
u.rfid_id=row[5]
u.isblack=row[6] u.isblack=row[6]
u.isbaron=row[7] u.isbaron=row[7]
u.isshown=row[8] u.isshown=row[8]
u.autoblack=row[9] u.autoblack=row[9]
logging.debug(u) logging.debug(u)
u.rfid_id = get_rfid_ids_by_userid(u.id)
return u return u
def get_user_by_rfid(rfidid): def get_user_by_id(id):
row = query_db("SELECT * FROM USERS WHERE RFID_ID = ?", [rfidid], one=True) row = query_db("SELECT * FROM USERS WHERE ID = ?", [id], one=True)
u = User() u = User()
if row is None: if row is None:
return None return None
@@ -88,11 +88,19 @@ def get_user_by_rfid(rfidid):
u.password=row[2] u.password=row[2]
u.longname=row[3] u.longname=row[3]
u.email=row[4] u.email=row[4]
u.rfid_id=row[5]
u.isblack=row[6] u.isblack=row[6]
u.isbaron=row[7] u.isbaron=row[7]
u.isshown=row[8] u.isshown=row[8]
u.autoblack=row[9] 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) logging.debug(u)
return u return u
@@ -106,23 +114,49 @@ def get_users():
u.password=row[2] u.password=row[2]
u.longname=row[3] u.longname=row[3]
u.email=row[4] u.email=row[4]
u.rfid_id=row[5]
u.isblack=row[6] u.isblack=row[6]
u.isbaron=row[7] u.isbaron=row[7]
u.isshown=row[8] u.isshown=row[8]
u.autoblack=row[9] u.autoblack=row[9]
u.rfid_id = get_rfid_ids_by_userid(u.id)
users.append(u) users.append(u)
return users return users
def add_user(u): 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() 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): 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) 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() get_db().commit()

View File

@@ -21,7 +21,7 @@
<td>{{user.name}}</td> <td>{{user.name}}</td>
<td>{{user.longname}}</td> <td>{{user.longname}}</td>
<td>{{user.email}}</td> <td>{{user.email}}</td>
<td>{{user.rfid_id}}</td> <td>{% if user.rfid_id %} {% for rfid_id in user.rfid_id %} {{rfid_id}};{% endfor %} {% endif %}</td>
<td>{% if user.isblack %} &#9745; {% else %} &#9744; {% endif %} </td> <td>{% if user.isblack %} &#9745; {% else %} &#9744; {% endif %} </td>
<td>{% if user.isbaron %} &#9745; {% else %} &#9744; {% endif %} </td> <td>{% if user.isbaron %} &#9745; {% else %} &#9744; {% endif %} </td>
<td>{% if user.isshown %} &#9745; {% else %} &#9744; {% endif %} </td> <td>{% if user.isshown %} &#9745; {% else %} &#9744; {% endif %} </td>

View File

@@ -15,7 +15,7 @@
Passwort wiederholen:<br><input type="password" name=password2 required placeholder="Password"><br> Passwort wiederholen:<br><input type="password" name=password2 required placeholder="Password"><br>
Name:<br><input type="text" name=longname required placeholder="Vorname Nachname"><br> Name:<br><input type="text" name=longname required placeholder="Vorname Nachname"><br>
Email:<br><input type="email" name=email required placeholder="petra@fet.at"><br> Email:<br><input type="email" name=email required placeholder="petra@fet.at"><br>
Euml ID:<br><input type="text" name=rfid_id required placeholder="0xDEADBEEF"><br> Euml ID (falls mehrere durch ; trennen):<br><input type="text" name=rfid_id placeholder="0xDEADBEEF"><br>
<input type="submit" value="Hinzufügen"> <input type="submit" value="Hinzufügen">
</form> </form>
{% endblock %} {% endblock %}

View File

@@ -13,7 +13,7 @@
Username:<br><input type="text" name="username" required value="{{user_to_edit.name}}" /> <br> Username:<br><input type="text" name="username" required value="{{user_to_edit.name}}" /> <br>
Name:<br><input type="text" name="longname" required value="{{user_to_edit.longname}}" /><br> Name:<br><input type="text" name="longname" required value="{{user_to_edit.longname}}" /><br>
Email:<br><input type="email" name="email" required value="{{user_to_edit.email}}" /><br> Email:<br><input type="email" name="email" required value="{{user_to_edit.email}}" /><br>
Euml ID:<br><input type="text" name="rfid_id" required value="{{user_to_edit.rfid_id}}" /><br> Euml ID: (falls mehrere durch ; trennen)<br><input type="text" name="rfid_id" value="{% if user_to_edit.rfid_id %}{% for rfid_id in user_to_edit.rfid_id %}{{rfid_id}};{% endfor %}{% endif %}" /><br>
Geschwärzt: <input type="checkbox" name="isblack" {% if user_to_edit.isblack %} checked {% endif %} /> <br> Geschwärzt: <input type="checkbox" name="isblack" {% if user_to_edit.isblack %} checked {% endif %} /> <br>
Baron: <input type="checkbox" name="isbaron" {% if user_to_edit.isbaron %} checked {% endif %} /> <br> Baron: <input type="checkbox" name="isbaron" {% if user_to_edit.isbaron %} checked {% endif %} /> <br>
Angezeigt: <input type="checkbox" name="isshown" {% if user_to_edit.isshown %} checked {% endif %} /><br> Angezeigt: <input type="checkbox" name="isshown" {% if user_to_edit.isshown %} checked {% endif %} /><br>

View File

@@ -75,6 +75,16 @@ CREATE TABLE Deposits(
FOREIGN KEY(userid) REFERENCES USERS(id) 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 -- The table Config stores basic config data, this is for the admins and the barons

Binary file not shown.