Skip to content

Commit bb9b4ca

Browse files
authored
Merge branch 'main' into Feature-Publish-Assignment
2 parents 9a836db + 17d2466 commit bb9b4ca

File tree

6 files changed

+58
-35
lines changed

6 files changed

+58
-35
lines changed

app.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,11 +40,15 @@ def get_organization():
4040
return db.session.query(Organization).all()
4141

4242

43+
def is_researcher():
44+
return db.session.query(Researcher).filter_by(user_id=session['user_id']).first() is not None
45+
46+
4347
@app.context_processor
4448
def inject_configurations():
4549
return dict(configurations=get_configurations(), organizations_code=get_organization(), quadri=QUADRI,
4650
language=LANGUAGES, researcher_type=RESEARCHERS_TYPE, dynamic_year=get_current_year(),
47-
tasks=TASK, evaluation_hour=EVALUATION_HOUR, workloads=WORKLOAD)
51+
tasks=TASK, evaluation_hour=EVALUATION_HOUR, workloads=WORKLOAD, is_researcher=is_researcher())
4852

4953

5054
# Routes

course.py

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -57,8 +57,8 @@ def validate_form_data(form, extra_fields_needed=False):
5757
def assign_teachers_to_course(course_id, course_year, assigned_teachers):
5858
try:
5959
for teacher_id in assigned_teachers:
60-
new_teacher = Teacher(user_id=teacher_id, course_id=course_id, course_year=course_year)
61-
db.session.add(new_teacher)
60+
teacher = Teacher(user_id=teacher_id, course_id=course_id, course_year=course_year)
61+
db.session.add(teacher)
6262
db.session.commit()
6363
except Exception as e:
6464
db.session.rollback()
@@ -125,8 +125,10 @@ def search_teachers():
125125
if not validate_string_pattern(search_term):
126126
return make_response("Invalid search term", 400)
127127

128-
teachers = db.session.query(User).filter(User.active == True, User.is_teacher == True,
129-
User.name.ilike(f'%{search_term}%')).all()
128+
teachers = db.session.query(User).join(Teacher).filter(
129+
User.active == True,
130+
User.name.ilike(f'%{search_term}%')
131+
).all()
130132
results = [{'id': teacher.id, 'text': f'{teacher.name} {teacher.first_name}'} for teacher in teachers]
131133
return jsonify(results)
132134

@@ -178,9 +180,7 @@ def update_course_info():
178180

179181
# Remove all teachers assigned to the course
180182
try:
181-
db.session.query(Teacher).filter(Teacher.course_id == course_id,
182-
Teacher.course_year == year,
183-
Teacher.user_id.in_(assigned_teachers)).delete()
183+
db.session.query(Teacher).filter(Teacher.course_id == course_id, Teacher.course_year == year).delete()
184184
db.session.commit()
185185
except Exception as e:
186186
db.session.rollback()

db.py

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,6 @@ class User(db.Model):
2222
email = db.Column(db.String(200), nullable=True, unique=True)
2323
is_admin = db.Column(db.Boolean, default=False)
2424
is_teacher = db.Column(db.Boolean, default=False)
25-
is_researcher = db.Column(db.Boolean, default=False)
2625
active = db.Column(db.Boolean, default=True)
2726
supervisor_id = db.Column(db.Integer, db.ForeignKey('user.id'))
2827
organization_id = db.Column(db.Integer, db.ForeignKey('organization.id'))
@@ -42,7 +41,7 @@ def validate_active(self, key, value):
4241
def allowed(self, access_level):
4342
role_access = {
4443
Role.ADMIN: self.is_admin,
45-
Role.RESEARCHER: self.is_researcher,
44+
Role.RESEARCHER: self.researcher_profile is not None,
4645
Role.TEACHER: self.is_teacher
4746
}
4847

@@ -75,12 +74,11 @@ class Researcher(db.Model):
7574
__tablename__ = 'researcher'
7675
id = db.Column(db.Integer, primary_key=True)
7776
user_id = db.Column(db.Integer, db.ForeignKey('user.id'), nullable=False)
78-
research_field = db.Column(db.String(30))
7977
max_loads = db.Column(db.Integer)
8078
jokers = db.Column(db.Integer)
8179
researcher_type = db.Column(db.String(30))
8280

83-
user = db.relationship('User', backref=db.backref('user_researcher', uselist=False))
81+
user = db.relationship('User', backref=db.backref('researcher_profile', uselist=False))
8482

8583

8684
class Teacher(db.Model):

templates/home.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
{% include "toast.html" %}
66
<h1>{{ session.first_name }} {{ session.name }}</h1>
77
<hr>
8-
{% if user.is_researcher %}
8+
{% if is_researcher %}
99
<h2 class="sub-header">Course(s) assigned this year ({{ dynamic_year }} - {{ dynamic_year + 1 }})</h2>
1010
<table class="table table-hover">
1111
<thead>

templates/user_profile.html

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ <h1>{{ requested_user.first_name }} {{ requested_user.name }}</h1>
2727
<ul class="nav nav-tabs">
2828
<li class="nav-item"><a class="nav-link active" data-bs-toggle="tab" href="#profile">My profile</a>
2929
</li>
30-
{% if requested_user.is_researcher == true %}
30+
{% if is_researcher %}
3131
<li class="nav-item"><a class="nav-link" data-bs-toggle="tab" href="#preferences">My
3232
preferences</a></li>
3333
{% endif %}
@@ -89,8 +89,8 @@ <h2>Your informations</h2>
8989

9090
<input type="checkbox" class="form-check-input" id="is_admin"
9191
name="is_admin"
92-
{% if requested_user.admin %}checked{% endif %}
93-
{% if current_user and not requested_user.admin %} disabled {% endif %}>
92+
{% if requested_user.is_admin %}checked{% endif %}
93+
{% if not session.is_admin %} disabled {% endif %}>
9494
<label class="form-check-label" for="is_admin">Admin</label>
9595
</div>
9696
{% endif %}
@@ -105,7 +105,7 @@ <h2>Your informations</h2>
105105
<div class="form-check">
106106
<input type="checkbox" class="form-check-input" id="is_researcher"
107107
name="is_researcher"
108-
{% if requested_user.is_researcher %}checked{% endif %}
108+
{% if researcher %}checked{% endif %}
109109
{% if not session.is_admin %} disabled {% endif %}>
110110
<label class="form-check-label" for="is_researcher">Researcher</label>
111111
</div>
@@ -133,7 +133,7 @@ <h2>Your informations</h2>
133133
<dd>
134134
<select class="form-select" id="researcher_type" name="researcher_type"
135135
{% if not session.is_admin %} disabled {% endif %}>
136-
{% if requested_user.is_researcher and not session.is_admin %}
136+
{% if is_researcher and not session.is_admin %}
137137
<option value="" selected>None</option>
138138
{% else %}
139139
{% for type in researcher_type %}
@@ -165,7 +165,7 @@ <h2>Your informations</h2>
165165
</div>
166166
</form>
167167
</div>
168-
{% if requested_user.is_researcher %}
168+
{% if is_researcher %}
169169
<div class="tab-pane" id="preferences">
170170
<div class="container-fluid">
171171
{% if current_user %}

user.py

Lines changed: 37 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -9,12 +9,25 @@
99
user_bp = Blueprint('user', __name__)
1010

1111

12+
def get_teachers():
13+
return db.session.query(User).filter(User.is_teacher == True, User.active == True).all()
14+
15+
16+
def create_researcher(user_id, researcher_type, max_loads):
17+
new_researcher = Researcher(user_id=user_id, researcher_type=researcher_type, max_loads=max_loads)
18+
db.session.add(new_researcher)
19+
db.session.commit()
20+
21+
22+
def get_researchers():
23+
return db.session.query(User).join(Researcher).filter(User.active == True).all()
24+
25+
1226
@user_bp.route('/register')
1327
@login_required
1428
@check_access_level(Role.ADMIN)
1529
def register():
16-
supervisors = db.session.query(User).filter(User.is_teacher == True, User.active == True).all()
17-
return render_template('register.html', supervisors=supervisors)
30+
return render_template('register.html', supervisors=get_teachers())
1831

1932

2033
def is_valid_email(email):
@@ -56,18 +69,14 @@ def add_user():
5669
if db.session.query(User).filter(User.email == email).first():
5770
flash("Email already exists")
5871
else:
59-
new_user = User(name=name, first_name=first_name, email=email, is_teacher=is_teacher,
60-
is_researcher=is_researcher, supervisor_id=supervisor_id,
72+
new_user = User(name=name, first_name=first_name, email=email, supervisor_id=supervisor_id,
6173
organization_id=organization_code)
6274
db.session.add(new_user)
6375
db.session.commit()
6476
if is_researcher:
6577
all_loads = DEFAULT_MAX_LOAD
6678
max_load = all_loads.get(researcher_type, 0)
67-
new_researcher = Researcher(user_id=new_user.id, researcher_type=researcher_type,
68-
max_loads=max_load)
69-
db.session.add(new_researcher)
70-
db.session.commit()
79+
create_researcher(new_user.id, researcher_type, max_load)
7180
except:
7281
db.session.rollback()
7382
raise
@@ -83,16 +92,19 @@ def users(user_type):
8392
list_name = ''
8493

8594
if user_type == 'teacher':
86-
base_query = base_query.filter(User.is_teacher == True, User.active == True)
95+
base_query = base_query.filter(User.active == True, User.is_teacher == True)
8796
list_name = 'Teachers'
8897
elif user_type == 'researcher':
89-
base_query = base_query.filter(User.is_researcher == True, User.active == True)
98+
base_query = base_query.join(Researcher).filter(User.active == True)
9099
list_name = 'Researchers'
91100
elif user_type == 'archived':
92101
base_query = base_query.filter(User.active == False)
93102
list_name = 'Archived Users'
94103
elif user_type == 'other':
95-
base_query = base_query.filter(User.active == True, User.is_teacher == False, User.is_researcher == False)
104+
base_query = base_query.outerjoin(Researcher).filter(
105+
User.active == True,
106+
User.is_teacher == False
107+
)
96108
list_name = 'Other Users'
97109

98110
all_users = base_query.all()
@@ -110,7 +122,7 @@ def user_profile(user_id, current_year):
110122
flash("Permission denied. You do not have access to this page.", "error")
111123
return redirect(url_for("index"))
112124

113-
all_users = db.session.query(User).filter(User.is_admin == False, User.is_teacher == True, User.active == True).all()
125+
all_users = get_teachers()
114126
requested_user = db.session.query(User).filter_by(id=user_id).first()
115127
researcher = db.session.query(Researcher).filter(Researcher.user_id == requested_user.id).first()
116128
current_user = requested_user.email == session["email"]
@@ -130,6 +142,13 @@ def user_profile(user_id, current_year):
130142
current_year=current_year)
131143

132144

145+
def delete_researcher(user_id):
146+
researcher = db.session.query(Researcher).filter(Researcher.user_id == user_id).first()
147+
if researcher:
148+
db.session.delete(researcher)
149+
db.session.commit()
150+
151+
133152
@user_bp.route('/update_user_profile/<int:user_id>', methods=['POST'])
134153
@login_required
135154
def update_user_profile(user_id):
@@ -163,6 +182,7 @@ def update_user_profile(user_id):
163182

164183
user = db.session.query(User).filter(User.id == user_id).first()
165184
researcher = db.session.query(Researcher).filter(Researcher.user_id == user.id).first()
185+
teacher = db.session.query(Teacher).filter(Teacher.user_id == user.id).first()
166186
if user is None:
167187
return make_response("User not found", 404)
168188

@@ -172,17 +192,18 @@ def update_user_profile(user_id):
172192
if session["is_admin"]:
173193
user.email = email
174194
user.organization_id = organization_code
175-
user.admin = is_admin
195+
user.is_admin = is_admin
176196
user.is_teacher = is_teacher
177-
user.is_researcher = is_researcher
178197
user.supervisor_id = supervisor_id
179198
if is_researcher:
180199
if researcher is None:
181-
new_researcher = Researcher(user_id=user.id, researcher_type=researcher_type, max_loads=max_loads)
182-
db.session.add(new_researcher)
200+
create_researcher(user.id, researcher_type, max_loads)
183201
else:
184202
researcher.max_loads = max_loads
185203
researcher.researcher_type = researcher_type
204+
else:
205+
delete_researcher(user.id)
206+
186207
db.session.commit()
187208
except Exception as e:
188209
db.session.rollback()

0 commit comments

Comments
 (0)