Skip to content

Commit 22471bb

Browse files
authored
Merge pull request #21 from devinmatte/master
Sorting in UI
2 parents cb0e1ff + f1d827d commit 22471bb

File tree

6 files changed

+89
-45
lines changed

6 files changed

+89
-45
lines changed

packet/packet.py

Lines changed: 21 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -2,17 +2,25 @@
22

33

44
def sign(signer_username, freshman_username):
5-
freshman = Freshman.query.filter_by(rit_username=freshman_username).first()
6-
if freshman is None:
5+
freshman_signed = Freshman.query.filter_by(rit_username=freshman_username).first()
6+
if freshman_signed is None:
77
return False
8-
packet = freshman.current_packet()
8+
packet = freshman_signed.current_packet()
99
if packet is None:
1010
return False
1111
if not packet.is_open():
1212
return False
1313

14-
upper_signature = UpperSignature.query.filter(UpperSignature.member == signer_username).first()
15-
fresh_signature = FreshSignature.query.filter(FreshSignature.freshman_username == signer_username).first()
14+
# Make sure only on floor freshmen can sign packets
15+
freshman_signer = Freshman.query.filter_by(rit_username=signer_username).first()
16+
if freshman_signer:
17+
if not freshman_signer.onfloor:
18+
return False
19+
20+
upper_signature = UpperSignature.query.filter(UpperSignature.member == signer_username,
21+
UpperSignature.packet == packet).first()
22+
fresh_signature = FreshSignature.query.filter(FreshSignature.freshman_username == signer_username,
23+
FreshSignature.packet == packet).first()
1624

1725
if upper_signature:
1826
upper_signature.signed = True
@@ -26,13 +34,16 @@ def sign(signer_username, freshman_username):
2634

2735

2836
def get_signatures(freshman_username):
29-
packet = Freshman.query.filter_by(rit_username=freshman_username)[0].current_packet()
30-
eboard = UpperSignature.query.filter_by(packet_id=packet.id, eboard=True)
31-
upper_signatures = UpperSignature.query.filter_by(packet_id=packet.id, eboard=False)
37+
packet = Freshman.query.filter_by(rit_username=freshman_username).first().current_packet()
38+
eboard = UpperSignature.query.filter_by(packet_id=packet.id, eboard=True).order_by(UpperSignature.signed.desc())
39+
upper_signatures = UpperSignature.query.filter_by(packet_id=packet.id, eboard=False).order_by(
40+
UpperSignature.signed.desc())
41+
fresh_signatures = FreshSignature.query.filter_by(packet_id=packet.id).order_by(FreshSignature.signed.desc())
42+
misc_signatures = MiscSignature.query.filter_by(packet_id=packet.id)
3243
return {'eboard': eboard,
3344
'upperclassmen': upper_signatures,
34-
'freshmen': FreshSignature.query.filter_by(packet_id=packet.id),
35-
'misc': MiscSignature.query.filter_by(packet_id=packet.id)}
45+
'freshmen': fresh_signatures,
46+
'misc': misc_signatures}
3647

3748

3849
def get_number_signed(freshman_username):

packet/routes/shared.py

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,19 +3,20 @@
33
from packet import auth, app
44
from packet.models import Freshman, Packet
55
from packet.packet import get_signatures, get_number_required, get_number_signed
6-
from packet.utils import before_request
6+
from packet.utils import before_request, signed_packet
77

88

99
@app.route("/packet/<uid>")
1010
@auth.oidc_auth
1111
@before_request
1212
def freshman_packet(uid, info=None):
13-
freshman = Freshman.query.filter_by(rit_username=uid)[0]
13+
freshman = Freshman.query.filter_by(rit_username=uid).first()
1414
signatures = get_signatures(uid)
1515
required = sum(get_number_required(uid).values())
1616
signed = sum(get_number_signed(uid).values())
17+
packet_signed = signed_packet(info['uid'], uid)
1718
return render_template("packet.html", info=info, signatures=signatures, uid=uid, required=required, signed=signed,
18-
freshman=freshman)
19+
freshman=freshman, packet_signed=packet_signed)
1920

2021

2122
@app.route("/packets")

packet/templates/active_packets.html

Lines changed: 21 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -28,23 +28,31 @@ <h3 class="page-title">Active Packets</h3>
2828
{% if packet.is_open() %}
2929
<tr>
3030
<td>
31-
{{ packet.freshman.name }}
31+
<a href="/packet/{{ packet.freshman.rit_username }}">
32+
<img class="eval-user-img"
33+
alt="{{ packet.freshman.name }}"
34+
src="https://profiles.csh.rit.edu/image/{{ packet.freshman.rit_username }}"
35+
width="30"
36+
height="30"/> {{ get_freshman_name(packet.freshman.rit_username) }}
37+
</a>
3238
</td>
3339
<td>
3440
{{ packet.signatures_received() }}
3541
</td>
36-
<td class="sign-packet" align="right">
37-
{# if not signed #}
38-
<button class="btn btn-primary sign-button"
39-
data-freshman_uid="{{ packet.freshman.rit_username }}"
40-
data-freshman_name="{{ packet.freshman.name }}">Sign
41-
</button>
42-
{# else if signed #}
43-
<button class="btn btn-primary" disabled="disabled"><i
44-
class="fa fa-check"></i>&nbsp;Signed
45-
</button>
46-
{# endif #}
47-
</td>
42+
{% if info.onfloor or info.realm == "csh" %}
43+
<td class="sign-packet" align="right">
44+
{% if not packet_signed %}
45+
<button class="btn btn-primary sign-button"
46+
data-freshman_uid="{{ packet.freshman.rit_username }}"
47+
data-freshman_name="{{ packet.freshman.name }}">Sign
48+
</button>
49+
{% else %}
50+
<button class="btn btn-primary" disabled="disabled"><i
51+
class="fa fa-check"></i>&nbsp;Signed
52+
</button>
53+
{% endif %}
54+
</td>
55+
{% endif %}
4856
</tr>
4957
{% endif %}
5058
{% endfor %}

packet/templates/packet.html

Lines changed: 16 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -9,16 +9,18 @@ <h3 class="page-title">{{ freshman.name }}</h3>
99
</div>
1010
<div>
1111
Signatures: {{ signed }}/{{ required }}
12-
{# if not signed #}
13-
<button class="btn btn-primary sign-button"
14-
data-freshman_uid="{{ freshman.rit_username }}"
15-
data-freshman_name="{{ freshman.name }}">Sign
16-
</button>
17-
{# else if signed #}
18-
<button class="btn btn-primary" disabled="disabled"><i
19-
class="fa fa-check"></i>&nbsp;Signed
20-
</button>
21-
{# endif #}
12+
{% if info.onfloor or info.realm == "csh" %}
13+
{% if not packet_signed %}
14+
<button class="btn btn-primary sign-button"
15+
data-freshman_uid="{{ freshman.rit_username }}"
16+
data-freshman_name="{{ freshman.name }}">Sign
17+
</button>
18+
{% else %}
19+
<button class="btn btn-primary" disabled="disabled"><i
20+
class="fa fa-check"></i>&nbsp;Signed
21+
</button>
22+
{% endif %}
23+
{% endif %}
2224
</div>
2325
<div id="eval-blocks">
2426
<div id="eval-table">
@@ -37,7 +39,7 @@ <h3 class="page-title">{{ freshman.name }}</h3>
3739
</thead>
3840
<tbody>
3941
{% for m in signatures.eboard %}
40-
<tr>
42+
<tr {% if m.signed %}style="background-color: #4caf505e" {% endif %}>
4143
<td>
4244
<img class="eval-user-img" alt="{{ m['member'] }}"
4345
src="https://profiles.csh.rit.edu/image/{{ m['member'] }}"
@@ -74,7 +76,7 @@ <h3 class="page-title">{{ freshman.name }}</h3>
7476
</thead>
7577
<tbody>
7678
{% for m in signatures.upperclassmen %}
77-
<tr>
79+
<tr {% if m.signed %}style="background-color: #4caf505e" {% endif %}>
7880
<td>
7981
<img class="eval-user-img" alt="{{ m['member'] }}"
8082
src="https://profiles.csh.rit.edu/image/{{ m['member'] }}"
@@ -111,7 +113,7 @@ <h3 class="page-title">{{ freshman.name }}</h3>
111113
</thead>
112114
<tbody>
113115
{% for m in signatures.freshmen %}
114-
<tr>
116+
<tr {% if m.signed %}style="background-color: #4caf505e" {% endif %}>
115117
<td>
116118
<a href="/packet/{{ m.freshman.rit_username }}">
117119
<img class="eval-user-img" alt="{{ m.freshman.rit_username }}"
@@ -150,7 +152,7 @@ <h3 class="page-title">{{ freshman.name }}</h3>
150152
</thead>
151153
<tbody>
152154
{% for m in signatures.misc %}
153-
<tr>
155+
<tr {% if m.signed %}style="background-color: #4caf505e" {% endif %}>
154156
<td>
155157
<img class="eval-user-img" alt="{{ m['member'] }}"
156158
src="https://profiles.csh.rit.edu/image/{{ m['member'] }}"

packet/templates/upperclassman.html

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ <h3 class="page-title">{{ get_display_name(member) }}</h3>
2929
<td>
3030
<a href="/packet/{{ m.packet.freshman.rit_username }}">
3131
<img class="eval-user-img"
32-
alt="{{ m.packet.freshman.rit_username }}"
32+
alt="{{ m.packet.freshman.name }}"
3333
src="https://profiles.csh.rit.edu/image/{{ m.packet.freshman.rit_username }}"
3434
width="30"
3535
height="30"/> {{ get_freshman_name(m.packet.freshman.name) }}
@@ -53,4 +53,4 @@ <h3 class="page-title">{{ get_display_name(member) }}</h3>
5353
</div>
5454
</div>
5555
</div>
56-
{% endblock %}
56+
{% endblock %}

packet/utils.py

Lines changed: 25 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# Credit to Liam Middlebrook and Ram Zallan
22
# https://github.com/liam-middlebrook/gallery
3-
from functools import wraps
3+
from functools import wraps, lru_cache
44

55
import requests
66
from flask import session
@@ -11,7 +11,7 @@
1111
ldap_is_onfloor,
1212
ldap_get_roomnumber,
1313
ldap_get_groups)
14-
from packet.models import Freshman
14+
from packet.models import Freshman, FreshSignature, Packet, UpperSignature, MiscSignature
1515

1616
INTRO_REALM = "https://sso.csh.rit.edu/auth/realms/intro"
1717

@@ -24,7 +24,8 @@ def wrapped_function(*args, **kwargs):
2424
if session["id_token"]["iss"] == INTRO_REALM:
2525
info = {
2626
"realm": "intro",
27-
"uid": uid
27+
"uid": uid,
28+
"onfloor": is_on_floor(uid)
2829
}
2930
else:
3031
uuid = str(session["userinfo"].get("sub", ""))
@@ -93,6 +94,27 @@ def parse_account_year(date):
9394
return None
9495

9596

97+
@lru_cache(maxsize=2048)
98+
def is_on_floor(uid):
99+
return (Freshman.query.filter_by(rit_username=uid)).first().onfloor
100+
101+
102+
@lru_cache(maxsize=4096)
103+
def signed_packet(signer, freshman):
104+
packet = Packet.query.filter_by(freshman_username=freshman).first()
105+
freshman_signature = FreshSignature.query.filter_by(packet=packet, freshman_username=signer, signed=True).first()
106+
upper_signature = UpperSignature.query.filter_by(packet=packet, member=signer, signed=True).first()
107+
misc_signature = MiscSignature.query.filter_by(packet=packet, member=signer).first()
108+
109+
if freshman_signature is not None:
110+
return freshman_signature.signed
111+
if upper_signature is not None:
112+
return upper_signature.signed
113+
if misc_signature is not None:
114+
return misc_signature
115+
return False
116+
117+
96118
@app.context_processor
97119
def utility_processor():
98120
# pylint: disable=bare-except

0 commit comments

Comments
 (0)