Compare commits
14 Commits
dc9f48cc1c
...
16269c8950
Author | SHA1 | Date | |
---|---|---|---|
16269c8950 | |||
c5c2b24cab | |||
7998490040 | |||
0db8c55675 | |||
1d25c819a1 | |||
ca0099063a | |||
6d09e89603 | |||
a1f9d2b065 | |||
95c5ec2a66 | |||
575b84f191 | |||
a405cf772d | |||
83ca3fdf1b | |||
b4c7cc1b0a | |||
213eec1813 |
@ -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__)
|
||||
|
||||
@ -18,11 +18,6 @@ def home():
|
||||
return render_template('home.html', posts=posts)
|
||||
|
||||
|
||||
@Login.route("/about")
|
||||
def about():
|
||||
return render_template('about.html', title='About')
|
||||
|
||||
|
||||
@Login.route("/login", methods=['GET', 'POST'])
|
||||
def login():
|
||||
if current_user.is_authenticated:
|
||||
@ -31,7 +26,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)
|
||||
|
@ -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)
|
||||
|
@ -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')
|
||||
|
119
aula/models.py
119
aula/models.py
@ -5,19 +5,24 @@ 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
|
||||
|
||||
def convert_role(role):
|
||||
if role == "student": return "Elev"
|
||||
elif role == "parent": return "Forældre"
|
||||
else: return "Lærer"
|
||||
|
||||
#
|
||||
# Models
|
||||
#
|
||||
@ -31,9 +36,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,10 +72,10 @@ 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],
|
||||
"role": convert_role(message_data[7]),
|
||||
}
|
||||
super().__init__()
|
||||
|
||||
@ -109,12 +114,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': convert_role(post_data[7]),
|
||||
}
|
||||
super().__init__()
|
||||
|
||||
@ -135,9 +138,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 ASC;
|
||||
"""
|
||||
cur.execute(sql_call, (self.thread_id,))
|
||||
messages = cur.fetchall()
|
||||
@ -150,24 +154,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 = convert_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_in_groups JOIN groups ON users_in_groups.group_id = groups.group_id WHERE users_in_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 +180,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_in_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_in_groups ON groups.group_id = users_in_groups.group_id WHERE users_in_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,18 +206,18 @@ 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_in_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()
|
||||
|
||||
def join_group(self, group_id):
|
||||
cur = conn.cursor()
|
||||
sql_call = """
|
||||
INSERT INTO users_groups VALUES (%s, %s)
|
||||
INSERT INTO users_in_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()
|
||||
|
||||
@ -231,12 +233,12 @@ class User(tuple, UserMixin):
|
||||
ON threads.thread_id = lm.thread_id
|
||||
WHERE g.group_id IN
|
||||
(
|
||||
SELECT group_id FROM users_groups
|
||||
WHERE user_id = %s
|
||||
SELECT group_id FROM users_in_groups
|
||||
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 +250,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
|
||||
SELECT g.group_id FROM users_in_groups
|
||||
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 +348,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()
|
||||
cur.close()
|
@ -1,12 +1,10 @@
|
||||
\i schema_drop.sql;
|
||||
|
||||
CREATE TABLE IF NOT EXISTS users (
|
||||
user_id SERIAL PRIMARY KEY,
|
||||
cpr_num INTEGER PRIMARY KEY,
|
||||
first_name varchar(64) NOT NULL,
|
||||
last_name varchar(64) NOT NULL,
|
||||
password varchar(120) NOT NULL,
|
||||
email varchar(64) NOT NULL UNIQUE,
|
||||
address varchar(64) NOT NULL,
|
||||
role varchar(64) NOT NULL CHECK ( role in ('student', 'parent', 'teacher') )
|
||||
);
|
||||
|
||||
@ -26,28 +24,22 @@ CREATE TABLE IF NOT EXISTS messages (
|
||||
message_id SERIAL PRIMARY KEY,
|
||||
content text NOT NULL,
|
||||
thread_id integer REFERENCES threads(thread_id) NOT NULL,
|
||||
author_id integer REFERENCES users(user_id) NOT NULL,
|
||||
author_cpr_num integer REFERENCES users(cpr_num) NOT NULL,
|
||||
created_date timestamp NOT NULL DEFAULT now()
|
||||
);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS posts (
|
||||
post_id SERIAL PRIMARY KEY,
|
||||
group_id integer REFERENCES groups(group_id) NOT NULL,
|
||||
author_id integer REFERENCES users(user_id) NOt NULL,
|
||||
author_cpr_num integer REFERENCES users(cpr_num) NOt NULL,
|
||||
title varchar(64) NOT NULL,
|
||||
content text NOT NULL,
|
||||
created_date timestamp NOT NULL DEFAULT now()
|
||||
);
|
||||
|
||||
-- Relationships
|
||||
CREATE TABLE IF NOT EXISTS users_threads (
|
||||
user_id integer REFERENCES users(user_id) NOT NULL,
|
||||
thread_id integer REFERENCES threads(thread_id) NOT NULL,
|
||||
PRIMARY KEY (user_id, thread_id)
|
||||
);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS users_groups (
|
||||
user_id integer REFERENCES users(user_id) NOT NULL,
|
||||
CREATE TABLE IF NOT EXISTS users_in_groups (
|
||||
cpr_num integer REFERENCES users(cpr_num) NOT NULL,
|
||||
group_id integer REFERENCES groups(group_id) NOT NULL,
|
||||
PRIMARY KEY (user_id, group_id)
|
||||
PRIMARY KEY (cpr_num, group_id)
|
||||
);
|
@ -1,5 +1,4 @@
|
||||
DROP TABLE IF EXISTS users_threads;
|
||||
DROP TABLE IF EXISTS users_groups;
|
||||
DROP TABLE IF EXISTS users_in_groups;
|
||||
DROP TABLE IF EXISTS messages;
|
||||
DROP TABLE IF EXISTS threads;
|
||||
DROP TABLE IF EXISTS posts;
|
||||
|
@ -1,39 +1,32 @@
|
||||
TRUNCATE users, groups, threads, messages, posts, users_groups, users_threads;
|
||||
TRUNCATE users, groups, threads, messages, posts, users_in_groups;
|
||||
|
||||
INSERT INTO public.users(user_id, first_name, last_name, password, email, address, role) VALUES
|
||||
(5000, 'Gordon', 'Freeman', '$2b$12$KFkp1IEMGT4QrWwjPGhE3ejOv6Z3pYhx/S4qOoFbanR2sMiZqgeJO', 'gordon@test.dk', 'Black Mesa', 'teacher'),
|
||||
(5001, 'Rachel', 'Green', '$2b$12$KFkp1IEMGT4QrWwjPGhE3ejOv6Z3pYhx/S4qOoFbanR2sMiZqgeJO', 'rachel@test.dk', 'Cnetral Park', 'parent'),
|
||||
(5002,'Joey', 'Trib', '$2b$12$KFkp1IEMGT4QrWwjPGhE3ejOv6Z3pYhx/S4qOoFbanR2sMiZqgeJO', 'joey@test.dk', 'New York', 'student'),
|
||||
(5003,'Chandler', 'Bing', '$2b$12$KFkp1IEMGT4QrWwjPGhE3ejOv6Z3pYhx/S4qOoFbanR2sMiZqgeJO', 'chandler@test.dk', 'Central Park', 'student'),
|
||||
(5004,'Phoebe', 'Buffay', '$2b$12$KFkp1IEMGT4QrWwjPGhE3ejOv6Z3pYhx/S4qOoFbanR2sMiZqgeJO', 'phoebe@test.dk', 'Central Perk', 'parent'),
|
||||
(5005,'Ross', 'Geller', '$2b$12$KFkp1IEMGT4QrWwjPGhE3ejOv6Z3pYhx/S4qOoFbanR2sMiZqgeJO', 'ross@test.dk', 'Central Perk', 'student');
|
||||
INSERT INTO public.users(cpr_num, first_name, last_name, password, role) VALUES
|
||||
(5000, 'Gordon', 'Freeman', '$2b$12$KFkp1IEMGT4QrWwjPGhE3ejOv6Z3pYhx/S4qOoFbanR2sMiZqgeJO', 'teacher'),
|
||||
(5001, 'Rachel', 'Green', '$2b$12$KFkp1IEMGT4QrWwjPGhE3ejOv6Z3pYhx/S4qOoFbanR2sMiZqgeJO', 'parent'),
|
||||
(5002,'Joey', 'Trib', '$2b$12$KFkp1IEMGT4QrWwjPGhE3ejOv6Z3pYhx/S4qOoFbanR2sMiZqgeJO', 'parent'),
|
||||
(5003,'Chandler', 'Bing', '$2b$12$KFkp1IEMGT4QrWwjPGhE3ejOv6Z3pYhx/S4qOoFbanR2sMiZqgeJO', 'parent'),
|
||||
(5004,'Phoebe', 'Buffay', '$2b$12$KFkp1IEMGT4QrWwjPGhE3ejOv6Z3pYhx/S4qOoFbanR2sMiZqgeJO', 'parent'),
|
||||
(5005,'Ross', 'Geller', '$2b$12$KFkp1IEMGT4QrWwjPGhE3ejOv6Z3pYhx/S4qOoFbanR2sMiZqgeJO', 'parent');
|
||||
|
||||
INSERT INTO public.groups(group_id, name, mandatory) VALUES
|
||||
(1000, 'fodbold', TRUE),
|
||||
(1001,'3a', FALSE);
|
||||
(1000, 'fodbold', FALSE),
|
||||
(1001,'3a', TRUE);
|
||||
|
||||
INSERT INTO users_groups (user_id, group_id) VALUES (5000, 1000), (5001, 1001);
|
||||
INSERT INTO users_in_groups (cpr_num, group_id) VALUES (5000, 1000), (5000, 1001), (5001, 1001), (5001, 1000), (5002, 1000);
|
||||
|
||||
INSERT INTO threads(thread_id ,title, group_id) VALUES
|
||||
(2000, 'Anbefalinger til fodboldsko?', 1000);
|
||||
|
||||
INSERT INTO messages (content, thread_id, author_id, created_date) VALUES
|
||||
INSERT INTO messages (content, thread_id, author_cpr_num, created_date) VALUES
|
||||
('Eleverne har ondt i fødderne når de spiller fodbild. Hvem kender et godt skomærke?', 2000, 5000, NOW() - INTERVAL '3.189 day'),
|
||||
('Jeg tror min søn har nogle han er glad for. Jeg spørger ham lige', 2000, 5002, NOW() - INTERVAL '2.951 day'),
|
||||
('Tak', 2000, 5000, NOW() - INTERVAL '1.894 day'),
|
||||
('Er det meningen vi skal give dem sko med????', 2000, 5001, NOW() - INTERVAL '1.05 hour'),
|
||||
('Rachel, giver du ikke dine børn sko med til fodbold?', 2000, 5002, NOW() - INTERVAL '0.95 hour'),
|
||||
('Hvad er der galt med dig?', 2000, 5003, NOW() - INTERVAL '0.94 hour'),
|
||||
('Jeg troede de lånte sko af skolen!', 2000, 5001, NOW() - INTERVAL '0.91 hour'),
|
||||
('Er det noget der nogensinde sket?', 2000, 5003, NOW() - INTERVAL '0.908 hour'),
|
||||
('Kan vi ikke godt komme tilbage til pointen?', 2000, 5000, NOW() - INTERVAL '0.9 hour'),
|
||||
('Hvorfor er det ligepludselig mig der skal holde styr på om skolen uddeler sko eller ej?', 2000, 5001, NOW() - INTERVAL '0.898 hour'),
|
||||
('Fordi du er dit barns mor?', 2000, 5003, NOW() - INTERVAL '0.89 hour');
|
||||
('Rachel, ja dine børn skal selv have sko med til fodbold?', 2000, 5002, NOW() - INTERVAL '0.95 hour'),
|
||||
('Okay, Det troede jeg lånte af skolen', 2000, 5001, NOW() - INTERVAL '0.91 hour'),
|
||||
('Det har jeg aldrig hørt om', 2000, 5003, NOW() - INTERVAL '0.908 hour'),
|
||||
('Lad os komme tilbage til pointen', 2000, 5000, NOW() - INTERVAL '0.9 hour'),
|
||||
('Okay', 2000, 5001, NOW() - INTERVAL '0.898 hour'),
|
||||
('Ja god ide', 2000, 5003, NOW() - INTERVAL '0.89 hour');
|
||||
|
||||
INSERT INTO users_threads (user_id, thread_id) VALUES
|
||||
(5000, 2000),
|
||||
(5001, 2000),
|
||||
(5002, 2000),
|
||||
(5003, 2000);
|
||||
|
||||
INSERT INTO posts (post_id, group_id, author_id, title, content) VALUES (6000, 1000, 5001, 'Fodbold på torsdag', 'HUSK BOLDEN DENNE GANG!!');
|
||||
INSERT INTO posts (post_id, group_id, author_cpr_num, title, content) VALUES (6000, 1000, 5001, 'Fodbold på torsdag', 'HUSK BOLDEN DENNE GANG!!');
|
||||
|
@ -1,30 +0,0 @@
|
||||
{% extends "layout.html" %}
|
||||
{% block content %}
|
||||
<h1>About Page</h1>
|
||||
<p>Dette er UIS-prototypen bragt til dig af UIS-holdet 2021/2022:</p>
|
||||
<ul>
|
||||
<li style="color: gray;">Ziming Lou</li>
|
||||
<li style="color: gray;">Lasse Pedersen</li>
|
||||
<li style="color: gray;">Jan Rolandsen</li>
|
||||
<li style="color: gray;">Marco Ugo Gambetta</li>
|
||||
<li>Hubert Dariusz Zajac</li>
|
||||
<li>Anders Lassen</li>
|
||||
<li>Finn Kensing</li>
|
||||
<li>Marcos Vas Salles</li>
|
||||
<li>Pax Ravn</li>
|
||||
<li>Nadja Petersen</li>
|
||||
<li>Rikke Vesterbæk Nielsen</li>
|
||||
</ul>
|
||||
|
||||
<p>I kan registrere nye kundekonti, men medarbejderkonti skal indtastes ved at foretage jeres ændringer i DML-scriptet schema_ins.sql. For at logge ind har vi oprettet nogle testkonti. Kunde-login kan tilgås ved hjælp af et kunde-cpr i intervallerne 5001 til 5007 med adgangskoden "UIS" med store bogstaver. Medarbejder-login kan tilgås ved hjælp af medarbejder-id 6001..6007 og samme adgangskode.</p>
|
||||
<p>For at tilføje flere eksempeldata skal du foretage dine ændringer i DML-scriptet schema_ins.sql.</p>
|
||||
<p>Prototypen er vertikal. Vi har implementeret nogle funktioner, men projektet er ufuldstændigt. Prototypen giver et udgangspunkt for jeres arbejde.</p>
|
||||
|
||||
<p><b>EN:</b></p>
|
||||
|
||||
<p>You can register new customer accounts, but employee accounts must be entered by making your changes to the DML-script schema_ins.sql. To log in we have created some test accounts. The customer login can be accesed using a customer cpr in ranges 5001 to 5007 with the password 'UIS' in uppercase. The employee login can be accessed using employee id 6001..6007 and the same password.</p>
|
||||
<p>To add more sample data make your changes to the DML-script schema_ins.sql.</p>
|
||||
<p>The prototype is vertical. We have implemented some functions and not completed. The prototype provides a starting point for your work.</p>
|
||||
<p>AL/PR 20220504</p>
|
||||
{% endblock content %}
|
||||
|
@ -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>
|
||||
|
@ -10,7 +10,7 @@
|
||||
<article class="media content-section">
|
||||
<div class="media-body">
|
||||
<div class="article-metadata">
|
||||
<a class="mr-2 author-name" href="#">{{ post.author.first_name }} {{ post.author.last_name }} </a>
|
||||
<a class="mr-2 author-name" href="#">{{ post.author.first_name }} {{ post.author.last_name }} ({{ post.author.role }})</a>
|
||||
<small class="text-muted float-right">{{ post.created_date.strftime('%H:%M %d-%m-%Y')}}</small>
|
||||
</div>
|
||||
<h2><a class="article-title" href="#">{{ post.title }}</a></h2>
|
||||
@ -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>
|
||||
|
@ -30,10 +30,14 @@
|
||||
|
||||
{% block sidebar %}
|
||||
<p style="font-weight: bold;">Opret gruppe</p>
|
||||
{% if current_user.role == "Lærer" %}
|
||||
<form method="POST" action="{{ url_for('Group.create')}}">
|
||||
<p>{{ form.title(class="form-control", placeholder="Gruppens navn") }}</p>
|
||||
|
||||
<p>{{ form.mandatory() }} {{ form.mandatory.label(class="form-check-label") }}</p>
|
||||
<p>{{ form.submit(class="btn btn-primary btn-block") }}</p>
|
||||
</form>
|
||||
{% else %}
|
||||
<p>Denne funktion er kun tilgængelig for lærer</p>
|
||||
{% endif %}
|
||||
{% endblock sidebar %}
|
||||
|
@ -20,5 +20,7 @@
|
||||
</article>
|
||||
{% endfor %}
|
||||
{% else %}
|
||||
<h1>Forside</h1>
|
||||
<p>Login <a href="{{ url_for('Login.login') }}">her</a></p>
|
||||
{% endif %}
|
||||
{% endblock content %}
|
||||
|
@ -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">
|
||||
@ -45,3 +45,15 @@
|
||||
</form>
|
||||
</div>
|
||||
{% endblock content %}
|
||||
|
||||
|
||||
{% block sidebar %}
|
||||
<h3>Login Information</h3>
|
||||
<p style="font-weight:bold">Lærer</p>
|
||||
<p> Brugernavne: 5000</p>
|
||||
<p> Kodeord: UIS</p>
|
||||
<p style="font-weight:bold">Forældre</p>
|
||||
<p> Brugernavne: 5001-5005</p>
|
||||
<p> Kodeord: UIS</p>
|
||||
|
||||
{% endblock sidebar %}
|
||||
|
@ -4,13 +4,13 @@
|
||||
<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">
|
||||
{% endif %}
|
||||
<div class="content-section message">
|
||||
<a class="author-name" href="#">{{ message.author.first_name }}</a>
|
||||
<a class="author-name" href="#">{{ message.author.first_name }} ({{ message.author.role }})</a>
|
||||
<p>{{ message.content }}</p>
|
||||
</div>
|
||||
<p class="timestamp">{{ message.created_date }}</p>
|
||||
|
Reference in New Issue
Block a user