Ændringer så prototype passer til 213eec1813

This commit is contained in:
Mikkel
2022-06-02 16:23:55 +02:00
parent 83ca3fdf1b
commit a405cf772d
8 changed files with 58 additions and 80 deletions

View File

@ -3,7 +3,7 @@ from flask_login import current_user, login_user, logout_user, login_required
from aula import bcrypt
from aula.forms import UserLoginForm
from aula.models import select_users_by_email, get_posts_for_user
from aula.models import select_users_by_cpr, get_posts_for_user
Login = Blueprint('Login', __name__)
@ -31,7 +31,7 @@ def login():
form = UserLoginForm()
# Først bekræft, at inputtet fra formen er gyldigt... (f.eks. ikke tomt)
if form.validate_on_submit():
user = select_users_by_email(form.email.data)
user = select_users_by_cpr(form.cpr_num.data)
# Derefter tjek om hashet af adgangskoden passer med det fra databasen...
if user != None and bcrypt.check_password_hash(user[3], form.password.data):
login_user(user, remember=form.remember.data)

View File

@ -23,7 +23,7 @@ def show(thread_id):
form = SendMessageForm()
if form.validate_on_submit():
insert_message(form.besked.data, thread_id, current_user.user_id)
insert_message(form.besked.data, thread_id, current_user.cpr_num)
return redirect(f"/threads/{thread_id}")
return render_template("thread_show.html", thread=thread, messages=thread.get_messages(), form=form)

View File

@ -11,7 +11,7 @@ class AddUserForm(FlaskForm):
submit = SubmitField('Add')
class UserLoginForm(FlaskForm):
email = StringField('Email', validators=[DataRequired()])
cpr_num = StringField('CPR Nummer', validators=[DataRequired()])
password = PasswordField('Password', validators=[DataRequired()])
remember = BooleanField('Remember Me')
submit = SubmitField('Login')

View File

@ -5,15 +5,15 @@ from flask_login import UserMixin
from aula import conn, login_manager
@login_manager.user_loader
def load_user(user_id):
def load_user(cpr_num):
cur = conn.cursor()
user_sql = """
SELECT * FROM users
WHERE user_id = %s
WHERE cpr_num = %s
"""
cur.execute(user_sql, (user_id,))
cur.execute(user_sql, (cpr_num,))
user = User(cur.fetchone()) if cur.rowcount > 0 else None
cur.close()
return user
@ -31,9 +31,9 @@ class Group(tuple):
def get_posts(self):
cur = conn.cursor()
sql_call = """
SELECT post_id, title, content, created_date, g.group_id, g.name, g.mandatory, u.user_id, u.first_name, u.last_name, u.email, u.address, u.role FROM posts as p
SELECT post_id, title, content, created_date, g.group_id, g.name, g.mandatory, u.cpr_num, u.first_name, u.last_name, u.role FROM posts as p
INNER JOIN groups g on g.group_id = p.group_id
INNER JOIN users u on u.user_id = p.author_id
INNER JOIN users u on u.cpr_num = p.author_cpr_num
WHERE p.group_id = %s
ORDER BY created_date DESC;
"""
@ -67,7 +67,7 @@ class Message(tuple):
self.thread_id = message_data[2]
self._created_date = message_data[3]
self.author = {
"user_id": message_data[4],
"cpr_num": message_data[4],
"first_name": message_data[5],
"last_name": message_data[6],
"role": message_data[7],
@ -109,12 +109,10 @@ class Post(tuple):
'mandatory': post_data[6],
}
self.author = {
'user_id': post_data[7],
'cpr_num': post_data[7],
'first_name': post_data[8],
'last_name': post_data[9],
'email': post_data[10],
'address': post_data[11],
'role': post_data[12],
'role': post_data[10],
}
super().__init__()
@ -135,9 +133,10 @@ class Thread(tuple):
def get_messages(self):
cur = conn.cursor()
sql_call = """
SELECT message_id, content, thread_id, created_date ,u.user_id, u.first_name, u.last_name, u.role FROM messages
INNER JOIN users u on u.user_id = messages.author_id
WHERE messages.thread_id = %s;
SELECT message_id, content, thread_id, created_date ,u.cpr_num, u.first_name, u.last_name, u.role FROM messages
INNER JOIN users u on u.cpr_num = messages.author_cpr_num
WHERE messages.thread_id = %s
ORDER BY created_date DESC;
"""
cur.execute(sql_call, (self.thread_id,))
messages = cur.fetchall()
@ -150,24 +149,22 @@ class Thread(tuple):
class User(tuple, UserMixin):
def __init__(self, user_data):
self.user_id = user_data[0]
self.cpr_num = user_data[0]
self.first_name = user_data[1]
self.last_name = user_data[2]
self.password = user_data[3]
self.email = user_data[4]
self.address = user_data[5]
self.role = user_data[6]
self.role = user_data[4]
super().__init__()
def get_id(self):
return self.user_id
return self.cpr_num
def get_groups(self):
cur = conn.cursor()
sql_call = """
SELECT groups.* FROM users_groups JOIN groups ON users_groups.group_id = groups.group_id WHERE users_groups.user_id = %s
SELECT groups.* FROM users_groups JOIN groups ON users_groups.group_id = groups.group_id WHERE users_groups.cpr_num = %s
"""
cur.execute(sql_call, (self.user_id,))
cur.execute(sql_call, (self.cpr_num,))
groups = cur.fetchall()
result = []
for group_data in groups:
@ -178,21 +175,21 @@ class User(tuple, UserMixin):
def is_member_of_group(self, group_id):
cur = conn.cursor()
sql_call = """
SELECT * FROM users_groups WHERE user_id = %s AND group_id = %s
SELECT * FROM users_groups WHERE cpr_num = %s AND group_id = %s
"""
cur.execute(sql_call, (self.user_id, group_id))
cur.execute(sql_call, (self.cpr_num, group_id))
return cur.rowcount > 0
def get_groups_joinable(self):
cur = conn.cursor()
sql_call = """
SELECT groups.* FROM groups INNER JOIN users_groups ON groups.group_id = users_groups.group_id WHERE users_groups.user_id = %s
SELECT groups.* FROM groups INNER JOIN users_groups ON groups.group_id = users_groups.group_id WHERE users_groups.cpr_num = %s
UNION
SELECT groups.* FROM groups WHERE groups.mandatory = FALSE
ORDER BY mandatory ASC, name DESC
"""
cur.execute(sql_call, (self.user_id,))
cur.execute(sql_call, (self.cpr_num,))
groups = cur.fetchall()
result = []
for group_data in groups:
@ -204,9 +201,9 @@ class User(tuple, UserMixin):
# TODO: Tjek om brugeren må forlade gruppen
cur = conn.cursor()
sql_call = """
DELETE FROM users_groups WHERE user_id = %s AND group_id = %s
DELETE FROM users_groups WHERE cpr_num = %s AND group_id = %s
"""
cur.execute(sql_call, (self.user_id, group_id))
cur.execute(sql_call, (self.cpr_num, group_id))
conn.commit()
cur.close()
@ -215,7 +212,7 @@ class User(tuple, UserMixin):
sql_call = """
INSERT INTO users_groups VALUES (%s, %s)
"""
cur.execute(sql_call, (self.user_id, group_id))
cur.execute(sql_call, (self.cpr_num, group_id))
conn.commit()
cur.close()
@ -232,11 +229,11 @@ class User(tuple, UserMixin):
WHERE g.group_id IN
(
SELECT group_id FROM users_groups
WHERE user_id = %s
WHERE cpr_num = %s
)
ORDER BY last_message_date DESC NULLS LAST;
"""
cur.execute(sql_call, (self.user_id,))
cur.execute(sql_call, (self.cpr_num,))
threads = cur.fetchall()
result = []
for thread_data in threads:
@ -248,58 +245,47 @@ class User(tuple, UserMixin):
cur = conn.cursor()
sql_call = """
SELECT * FROM users_threads WHERE
user_id = %s AND
cpr_num = %s AND
thread_id = %s
"""
cur.execute(sql_call, (self.user_id, thread_id))
cur.execute(sql_call, (self.cpr_num, thread_id))
return cur.rowcount > 0
def insert_users(user_id, first_name, last_name, password, email, adresse, role):
def insert_users(cpr_num, first_name, last_name, password, email, adresse, role):
cur = conn.cursor()
sql_call = """
INSERT INTO users(user_id, first_name, last_name, password, email, adresse, role)
INSERT INTO users(cpr_num, first_name, last_name, password, email, adresse, role)
VALUES (%s, %s, %s, %s, %s, %s, %s)
"""
cur.execute(sql_call, (user_id, first_name, last_name, password, email, adresse, role))
cur.execute(sql_call, (cpr_num, first_name, last_name, password, email, adresse, role))
# Husk commit() for INSERT og UPDATE, men ikke til SELECT!
conn.commit()
cur.close()
def select_users_by_id(user_id):
def select_users_by_cpr(cpr_num):
cur = conn.cursor()
sql_call = """
SELECT * FROM users
WHERE user_id = %s
WHERE cpr_num = %s
"""
cur.execute(sql_call, (user_id,))
cur.execute(sql_call, (cpr_num,))
user = User(cur.fetchone()) if cur.rowcount > 0 else None
cur.close()
return user
def select_users_by_email(email):
def get_posts_for_user(cpr_num):
cur = conn.cursor()
sql_call = """
SELECT * FROM users
WHERE email = %s
"""
cur.execute(sql_call, (email,))
user = User(cur.fetchone()) if cur.rowcount > 0 else None
cur.close()
return user
def get_posts_for_user(user_id):
cur = conn.cursor()
sql_call = """
SELECT post_id, title, content, created_date, g.group_id, g.name, g.mandatory, u.user_id, u.first_name, u.last_name, u.email, u.address, u.role FROM posts as p
SELECT post_id, title, content, created_date, g.group_id, g.name, g.mandatory, u.cpr_num, u.first_name, u.last_name, u.role FROM posts as p
INNER JOIN groups g on g.group_id = p.group_id
INNER JOIN users u on u.user_id = p.author_id
INNER JOIN users u on u.cpr_num = p.author_cpr_num
WHERE g.group_id in (
SELECT g.group_id FROM users_groups
WHERE user_id = %s
WHERE cpr_num = %s
)
ORDER BY created_date DESC
"""
cur.execute(sql_call, (user_id,))
cur.execute(sql_call, (cpr_num,))
user = [Post(i) for i in cur.fetchmany(50)] if cur.rowcount > 0 else []
cur.close()
return user
@ -357,22 +343,22 @@ def insert_group(name, mandatory):
cur.close()
return result
def insert_post(group_id, author_id, title, content):
def insert_post(group_id, author_cpr_num, title, content):
cur = conn.cursor()
sql = """
INSERT INTO posts(group_id, author_id, title, content) VALUES (%s, %s, %s, %s)
INSERT INTO posts(group_id, author_cpr_num, title, content) VALUES (%s, %s, %s, %s)
"""
cur.execute(sql, (group_id, author_id, title, content))
cur.execute(sql, (group_id, author_cpr_num, title, content))
conn.commit()
cur.close()
def insert_message(content, thread_id, author_id):
def insert_message(content, thread_id, author_cpr_num):
cur = conn.cursor()
sql_call = """
INSERT INTO messages(content, thread_id, author_id, created_date)
INSERT INTO messages(content, thread_id, author_cpr_num, created_date)
VALUES (%s, %s, %s, NOW())
"""
cur.execute(sql_call, (content, thread_id, author_id))
cur.execute(sql_call, (content, thread_id, author_cpr_num))
# Husk commit() for INSERT og UPDATE, men ikke til SELECT!
conn.commit()
cur.close()

View File

@ -10,8 +10,8 @@
</thead>
<tbody>
<tr>
<th scope="row">user_id</th>
<td>{{ current_user.user_id }}</td>
<th scope="row">cpr_num</th>
<td>{{ current_user.cpr_num }}</td>
</tr>
<tr>
<th scope="row">first_name</th>
@ -21,14 +21,6 @@
<th scope="row">last_name</th>
<td>{{ current_user.last_name }}</td>
</tr>
<tr>
<th scope="row">email</th>
<td>{{ current_user.email }}</td>
</tr>
<tr>
<th scope="row">address</th>
<td>{{ current_user.address }}</td>
</tr>
<tr>
<th scope="row">role</th>
<td>{{ current_user.role }}</td>

View File

@ -25,7 +25,7 @@
<p style="font-weight: bold;">Skriv opslag</p>
<form method="POST" action="{{ url_for('Post.create')}}">
{{ formpost.group_id(value=group.group_id) }}
{{ formpost.author_id(value=current_user.user_id) }}
{{ formpost.author_id(value=current_user.cpr_num) }}
<div class="row">
<div class="col-md-4">{{ formpost.title(class="form-control", placeholder="Title") }}</div>
<div class="col-md-8">{{ formpost.content(class="form-control", placeholder="Indhold") }}</div>

View File

@ -6,16 +6,16 @@
<fieldset class="form-group">
<legend class="border-bottom mb-4">Log In</legend>
<div class="form-group">
{{ form.email.label(class="form-control-label") }}
{% if form.email.errors %}
{{ form.email(class="form-control form-control-lg is-invalid") }}
{{ form.cpr_num.label(class="form-control-label") }}
{% if form.cpr_num.errors %}
{{ form.cpr_num(class="form-control form-control-lg is-invalid") }}
<div class="invalid-feedback">
{% for error in form.email.errors %}
{% for error in form.cpr_num.errors %}
<span>{{ error }}</span>
{% endfor %}
</div>
{% else %}
{{ form.email(class="form-control form-control-lg") }}
{{ form.cpr_num(class="form-control form-control-lg") }}
{% endif %}
</div>
<div class="form-group">

View File

@ -4,7 +4,7 @@
<h1>{{ thread.title }}</h1>
<div id="messages" class="messages">
{% for message in messages %}
{% if message.author.user_id == current_user.user_id %}
{% if message.author.cpr_num == current_user.cpr_num %}
<div class="message-container self">
{% else %}
<div class="message-container">