Skip to content
This repository has been archived by the owner on Jun 18, 2020. It is now read-only.

Commit

Permalink
Do not show teammates submission on profile page
Browse files Browse the repository at this point in the history
Thanks to @limbach for reporting.

They can still be seen on the assignment page when you are logged in.
Also, there are some further fixes regarding the teammate handling.
  • Loading branch information
moschlar committed Nov 14, 2013
1 parent e3a60dd commit 185183b
Show file tree
Hide file tree
Showing 8 changed files with 95 additions and 76 deletions.
36 changes: 21 additions & 15 deletions sauce/controllers/assignments.py
Original file line number Diff line number Diff line change
Expand Up @@ -32,13 +32,14 @@
# third party imports
from repoze.what.predicates import Any, not_anonymous, has_permission
from sqlalchemy.orm.exc import NoResultFound, MultipleResultsFound
from sqlalchemy.exc import SQLAlchemyError

# project specific imports
from sauce.lib.authz import is_public, has_teacher
from sauce.model import Assignment, Submission, DBSession
from sauce.lib.menu import menu
from sqlalchemy.exc import SQLAlchemyError
from sauce.controllers.lessons import SubmissionsController
from sauce.widgets import SubmissionTable, SubmissionTableFiller

try:
from sauce.controllers.similarity import SimilarityController
Expand Down Expand Up @@ -81,22 +82,27 @@ def _before(self, *args, **kwargs):
def index(self, page=1, *args, **kwargs):
'''Assignment detail page'''

values = []

if request.user:
submissions = set(Submission.by_assignment_and_user(self.assignment, request.user).all())
#submissions = Page(submissions, page=page, items_per_page=10)
if getattr(request.user, 'teams', False):
#TODO: Ugly.
teams = set()
for lesson in self.assignment.sheet.event.lessons:
teams |= set(lesson.teams)
teams &= set(request.user.teams)
for member in (member for team in teams for member in team.students):
submissions |= set(Submission.by_assignment_and_user(self.assignment, member).all())
submissions = sorted(list(submissions), key=lambda s: s.modified)
else:
submissions = []
c.table = SubmissionTable(DBSession)

values = SubmissionTableFiller(DBSession).get_value(assignment_id=self.assignment.id, user_id=request.user.id)

teams = set()
for lesson in self.assignment.sheet.event.lessons:
teams |= set(lesson.teams)
teams &= set(request.user.teams)

teammates = set()
for team in teams:
teammates |= set(team.members)
teammates.discard(request.user)

for teammate in teammates:
values.extend(SubmissionTableFiller(DBSession).get_value(assignment_id=self.assignment.id, user_id=teammate.id))

return dict(page='assignments', event=self.event, assignment=self.assignment, submissions=submissions)
return dict(page='assignments', event=self.event, assignment=self.assignment, values=values)

@expose()
@require(not_anonymous(msg=u'Only logged in users can create Submissions'))
Expand Down
15 changes: 7 additions & 8 deletions sauce/controllers/submissions.py
Original file line number Diff line number Diff line change
Expand Up @@ -393,19 +393,18 @@ def _before(self, *args, **kwargs):
def index(self, page=1, *args, **kwargs):
'''Submission listing page'''

#TODO: Ugly and stolen from controllers.user

c.table = SubmissionTable(DBSession)

teammates = set()
for team in request.user.teams:
teammates |= set(team.students)
teammates.discard(request.user)
#TODO: Ugly and stolen from controllers.user
# teammates = set()
# for team in request.user.teams:
# teammates |= set(team.students)
# teammates.discard(request.user)

values = SubmissionTableFiller(DBSession).get_value(user_id=request.user.id)

for teammate in teammates:
values.extend(SubmissionTableFiller(DBSession).get_value(user_id=teammate.id))
# for teammate in teammates:
# values.extend(SubmissionTableFiller(DBSession).get_value(user_id=teammate.id))

return dict(page='submissions', view=None, user=request.user, values=values)

Expand Down
12 changes: 6 additions & 6 deletions sauce/controllers/user.py
Original file line number Diff line number Diff line change
Expand Up @@ -66,15 +66,15 @@ def index(self, *args, **kwargs):
# for assignment in sheet.assignments:
# pass

teammates = set()
for team in memberships['teams']:
teammates |= set(team.students)
teammates.discard(request.user)
# teammates = set()
# for team in memberships['teams']:
# teammates |= set(team.students)
# teammates.discard(request.user)

values = SubmissionTableFiller(DBSession).get_value(user_id=request.user.id)

for teammate in teammates:
values.extend(SubmissionTableFiller(DBSession).get_value(user_id=teammate.id))
# for teammate in teammates:
# values.extend(SubmissionTableFiller(DBSession).get_value(user_id=teammate.id))

return dict(page='user', user=request.user, values=values, memberships=memberships)

Expand Down
64 changes: 25 additions & 39 deletions sauce/templates/assignment.mak
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,27 @@ ${self.details(assignment)}

${times_dl(assignment)}

% if request.allowance(assignment):
% if assignment.lti or assignment.event.lti:
<%
from tg import config
%>
% if config.features.get('lti', False):
<dl>
<dt>LTI tool provider URL:</dt>
<dd><pre>${tg.url('/lti/%d/' % assignment.id, qualified=True)}</pre></dd>
</dl>
% endif
% endif
% endif

% if assignment.timeout:
<dl>
<dt>General test timeout:</dt>
<dd>${assignment.timeout} seconds</dd>
</dl>
% endif

% if request.user and (assignment.is_active or request.allowance(assignment)):
<p>
% if submissions:
Expand All @@ -64,45 +85,10 @@ ${times_dl(assignment)}
</p>
% endif


##% if request.student:
% if submissions:
<h2>Your Submissions <span class="badge">${len(submissions)}</span></h2>
<ul>
% for submission in reversed(submissions):
<li>${submission.link}
% if submission.user != request.user:
<i>(${submission.user.display_name})</i>
% endif
% if submission.result is not None:
% if submission.result:
<span class="label label-success">Success</span>
% else:
<span class="label label-important">Failed</span>
% endif
% else:
##<span class="label">None</span>
&nbsp;
% endif
</li>
% endfor
</ul>
% endif


% if request.allowance(assignment):
% if assignment.lti or assignment.event.lti:
<%
from tg import config
%>
% if config.features.get('lti', False):
LTI tool provider URL: <pre>${tg.url('/lti/%d/' % assignment.id, qualified=True)}</pre>
% endif
% endif
% endif

% if assignment.timeout:
<p>General timeout: ${assignment.timeout} seconds</p>
% if request.user:
<div class="crud_table">
${c.table(value=values, attrs=dict(style="height:200px; border:solid black 3px;")) | n}
</div>
% endif

% if assignment.visible_tests:
Expand Down
22 changes: 18 additions & 4 deletions sauce/templates/user.mak
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,9 @@
<h1>${user} <small>Profile page</small></h1>
</div>

<p><a href="${tg.url('/user/profile')}" class="btn btn-primary"><i class="icon-user icon-white"></i>&nbsp;Edit profile</a></p>
<p><a href="${tg.url('/user/profile')}" class="btn btn-primary">
<i class="icon-user icon-white"></i>&nbsp;Edit profile
</a></p>

% if memberships['teams']:
<h4>Your teams:</h4>
Expand Down Expand Up @@ -59,11 +61,23 @@
% endif

<h3>Your
% if memberships['teams']:
(and your teammates)
% endif
##% if memberships['teams']:
## (and your teammates)
##% endif
submissions:</h3>

<div class="crud_table">
${c.table(value=values, attrs=dict(style="height:200px; border:solid black 3px;")) | n}
</div>

<div class="alert alert-info alert-block">
<h4 class="alert-heading">Note: Teammates submissions</h4>
<p>
In previous versions of <strong>SAUCE</strong>, you used to see the
<strong>submissions of your teammates</strong> listed here, too.<br />
They are not shown here anymore since there was a bug in the listing anyways,
but you can still see them on the corresponding assignment pages.<br />
If you really liked having the submissions in the listing here,
please <a href="${tg.url('/contact')}">drop a note to the developer</a>.
</p>
</div>
4 changes: 2 additions & 2 deletions sauce/websetup/data/040events.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,7 @@
lesson_id: 1
event: "*past"
tutors: ["*teacher_2"]
_members: ["*student_e1", "*student_old_2"]
_members: ["*student_e1"]
flush: True

- Team:
Expand All @@ -78,5 +78,5 @@
- "&team_old_a":
name: Team Old A
lesson: "*lesson_old_a"
members: ["*student_old_1"]
members: ["*student_old_1", "*student_old_2"]
flush: True
10 changes: 10 additions & 0 deletions sauce/websetup/data/080submissions.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,16 @@
language: "*lj"
filename: Hello.java
source: *hello_java_1
- user: "*student_old_1"
assignment: "*assignment_old_1_1"
language: "*lj"
filename: Hello.java
source: *hello_java_1
- user: "*student_old_2"
assignment: "*assignment_old_1_1"
language: "*lj"
filename: Hello.java
source: *hello_java_1

# Submissions for the second Assignment
- Submission:
Expand Down
8 changes: 6 additions & 2 deletions sauce/widgets/submission_table.py
Original file line number Diff line number Diff line change
Expand Up @@ -94,7 +94,7 @@ class SubmissionTable(TableBase):
__xml_fields__ = ['assignment', 'user', 'result', 'judgement', 'grade', 'public']
__headers__ = {'public': u''}
__base_widget_type__ = JSSortableDataGrid
__base_widget_args__ = {'sortList': [[4, 0], [3, 0], [9, 1]],
__base_widget_args__ = {'sortList': [[4, 0], [3, 0], [8, 1]],
'headers': {0: {'sorter': False}, 6: {'sorter': False}}}


Expand All @@ -107,7 +107,11 @@ class SubmissionTableFiller(TableFiller):

def assignment(self, obj):
try:
return obj.assignment.link
a = obj.assignment
l = h.link(obj.assignment.name, obj.assignment.url)
if not a.is_active:
l = literal('<i title="Assignment not active">') + l + literal('</i>')
return l
except AttributeError:
log.warn('Submission %d has no assignment', obj.id)
return u'<span class="label label-inverse">None</a>'
Expand Down

0 comments on commit 185183b

Please sign in to comment.