Skip to content

Commit

Permalink
Rework how SlideSuggestion objects name their files. Improve the UI w…
Browse files Browse the repository at this point in the history
…hen there are multiple pending suggestions for updating the same presentation. Commit ready for merge.

 - Legacy-Id: 16554
  • Loading branch information
rjsparks committed Jul 20, 2019
1 parent 3b26ade commit 1e8eb0e
Show file tree
Hide file tree
Showing 4 changed files with 27 additions and 13 deletions.
1 change: 1 addition & 0 deletions ietf/meeting/models.py
Expand Up @@ -1172,6 +1172,7 @@ def __str__(self):
return u'%s : %s : %s' % ( self.meeting, self.name, self.date )

class SlideSubmission(models.Model):
time = models.DateTimeField(auto_now=True)
session = ForeignKey(Session)
title = models.CharField(max_length=255)
filename = models.CharField(max_length=255)
Expand Down
18 changes: 14 additions & 4 deletions ietf/meeting/tests_views.py
Expand Up @@ -2131,22 +2131,32 @@ def test_submit_and_approve_multiple_versions(self):
test_file.name = 'not_really.txt'
r = self.client.post(propose_url,dict(file=test_file,title='a test slide file',apply_to_all=True))
self.assertEqual(r.status_code, 302)
self.client.logout()

submission = SlideSubmission.objects.get(session = session)
test_file = BytesIO(b'this is not really a slide, but it is third version of it')
test_file.name = 'not_really.txt'
r = self.client.post(propose_url,dict(file=test_file,title='a test slide file',apply_to_all=True))
self.assertEqual(r.status_code, 302)
self.client.logout()

approve_url = urlreverse('ietf.meeting.views.approve_proposed_slides', kwargs={'slidesubmission_id':submission.pk,'num':submission.session.meeting.number})
(first_submission, second_submission) = SlideSubmission.objects.filter(session=session).order_by('id')

approve_url = urlreverse('ietf.meeting.views.approve_proposed_slides', kwargs={'slidesubmission_id':second_submission.pk,'num':second_submission.session.meeting.number})
login_testing_unauthorized(self, chair.user.username, approve_url)
r = self.client.post(approve_url,dict(title=submission.title,approve='approve'))
self.assertEqual(r.status_code,302)

disapprove_url = urlreverse('ietf.meeting.views.approve_proposed_slides', kwargs={'slidesubmission_id':first_submission.pk,'num':first_submission.session.meeting.number})
r = self.client.post(disapprove_url,dict(title='some title',disapprove="disapprove"))
self.assertEqual(r.status_code,302)
self.client.logout()

self.assertEqual(SlideSubmission.objects.count(),0)
self.assertEqual(session.sessionpresentation_set.first().document.rev,'01')
path = os.path.join(submission.session.meeting.get_materials_path(),'slides')
filename = os.path.join(path,session.sessionpresentation_set.first().document.name+'-01.txt')
self.assertTrue(os.path.exists(filename))
contents = open(filename,'r').read()
self.assertIn('another version', contents)
self.assertIn('third version', contents)


class SessionTests(TestCase):
Expand Down
17 changes: 10 additions & 7 deletions ietf/meeting/views.py
Expand Up @@ -1580,6 +1580,9 @@ def propose_session_slides(request, session_id, num):
if show_apply_to_all_checkbox:
apply_to_all = form.cleaned_data['apply_to_all']
title = form.cleaned_data['title']

submission = SlideSubmission.objects.create(session = session, title = title, filename = '', apply_to_all = apply_to_all, submitter=request.user.person)

if session.meeting.type_id=='ietf':
name = 'slides-%s-%s' % (session.meeting.number,
session.group.acronym)
Expand All @@ -1588,15 +1591,15 @@ def propose_session_slides(request, session_id, num):
else:
name = 'slides-%s-%s' % (session.meeting.number, session.docname_token())
name = name + '-' + slugify(title).replace('_', '-')[:128]
rev = '00'
if Document.objects.filter(name=name).exists():
rev ='%02d' % (int(Document.objects.get(name=name).rev) + 1)
filename = '%s-%s%s'% (name, rev, ext)
filename = '%s-ss%d%s'% (name, submission.id, ext)
destination = io.open(os.path.join(settings.SLIDE_STAGING_PATH, filename),'wb+')
for chunk in file.chunks():
destination.write(chunk)
destination.close()
submission = SlideSubmission.objects.create(session = session, title = title, filename = filename, apply_to_all = apply_to_all, submitter=request.user.person)

submission.filename = filename
submission.save()

(to, cc) = gather_address_lists('slides_proposed', group=session.group).as_strings()
msg_txt = render_to_string("meeting/slides_proposed.txt", {
"to": to,
Expand Down Expand Up @@ -2436,7 +2439,7 @@ def approve_proposed_slides(request, slidesubmission_id, num):
if len(sessions) > 1:
session_number = 1 + sessions.index(submission.session)
name, _ = os.path.splitext(submission.filename)
name = name[:-3]
name = name[:name.rfind('-ss')]
existing_doc = Document.objects.filter(name=name).first()
if request.method == 'POST':
form = ApproveSlidesForm(show_apply_to_all_checkbox, request.POST)
Expand Down Expand Up @@ -2480,7 +2483,7 @@ def approve_proposed_slides(request, slidesubmission_id, num):
if not os.path.exists(path):
os.makedirs(path)
sub_name, sub_ext = os.path.splitext(submission.filename)
target_filename = '%s-%s%s' % (sub_name[:-3],doc.rev,sub_ext)
target_filename = '%s-%s%s' % (sub_name[:sub_name.rfind('-ss')],doc.rev,sub_ext)
os.rename(submission.staged_filepath(), os.path.join(path, target_filename))
acronym = submission.session.group.acronym
submission.delete()
Expand Down
4 changes: 2 additions & 2 deletions ietf/templates/meeting/session_details.html
Expand Up @@ -49,9 +49,9 @@ <h1>{{ meeting }} : {{ acronym }}
<div id="proposedslidelist" class="panel-body">
{% for s in pending_suggestions %}
{% if can_manage_materials %}
<p><a href="{% url "ietf.meeting.views.approve_proposed_slides" slidesubmission_id=s.pk num=s.session.meeting.number %}">{{s.submitter}} - {{s.title}}</a></p>
<p><a href="{% url "ietf.meeting.views.approve_proposed_slides" slidesubmission_id=s.pk num=s.session.meeting.number %}">{{s.submitter}} - {{s.title}} ({{s.time}})</a></p>
{% else %}
<p>{{s.title}}</p>
<p>{{s.title}} ({{s.time}})</p>
{% endif %}
{% endfor %}
</div>
Expand Down

0 comments on commit 1e8eb0e

Please sign in to comment.