Merged in [11434] from rcross@amsl.com:

Remove legacy secretariat code for adding interim meetings in favor of new ietf.meeting interim features.
 - Legacy-Id: 11437
Note: SVN reference [11434] has been migrated to Git commit 98afcae63a752129c63f0d2e1824bbbb26dbf71f
This commit is contained in:
Henrik Levkowetz 2016-06-21 12:23:58 +00:00
parent e6a005dba6
commit 1e50d5dd44
10 changed files with 23 additions and 253 deletions

View file

@ -13,7 +13,7 @@ from ietf.doc.utils import get_document_content
from ietf.group.models import Group
from ietf.ietfauth.utils import has_role
from ietf.meeting.models import Session, Meeting, Schedule, countries, timezones
from ietf.meeting.helpers import get_next_interim_number
from ietf.meeting.helpers import get_next_interim_number, make_directories
from ietf.meeting.helpers import is_meeting_approved, get_next_agenda_name
from ietf.message.models import Message
from ietf.person.models import Person
@ -215,6 +215,9 @@ class InterimMeetingModelForm(forms.ModelForm):
meeting=meeting,
owner=Person.objects.get(name='(System)'))
meeting.save() # save with agenda
# create directories
make_directories(meeting)
return meeting

View file

@ -517,6 +517,18 @@ def get_next_agenda_name(meeting):
sequence=str(last_sequence + 1).zfill(2))
def make_directories(meeting):
'''
This function takes a meeting object and creates the appropriate materials directories
'''
path = meeting.get_materials_path()
os.umask(0)
for leaf in ('slides','agenda','minutes','id','rfc','bluesheets'):
target = os.path.join(path,leaf)
if not os.path.exists(target):
os.makedirs(target)
def send_interim_approval_request(meetings):
"""Sends an email to the secretariat, group chairs, and resposnible area
director or the IRTF chair noting that approval has been requested for a

View file

@ -16,7 +16,7 @@ from django.utils.functional import curry
from ietf.ietfauth.utils import role_required
from ietf.utils.mail import send_mail
from ietf.meeting.helpers import get_meeting
from ietf.meeting.helpers import get_meeting, make_directories
from ietf.meeting.models import Meeting, Session, Room, TimeSlot, SchedTimeSessAssignment, Schedule
from ietf.group.models import Group, GroupEvent
from ietf.person.models import Person
@ -24,7 +24,7 @@ from ietf.secr.meetings.blue_sheets import create_blue_sheets
from ietf.secr.meetings.forms import ( BaseMeetingRoomFormSet, MeetingModelForm,
MeetingRoomForm, NewSessionForm, NonSessionEditForm, NonSessionForm, TimeSlotForm,
UploadBlueSheetForm, get_next_slot )
from ietf.secr.proceedings.views import build_choices, handle_upload_file, make_directories
from ietf.secr.proceedings.views import build_choices, handle_upload_file
from ietf.secr.sreq.forms import GroupSelectForm
from ietf.secr.sreq.views import get_initial_session
from ietf.secr.utils.meeting import get_session, get_timeslot

View file

@ -6,7 +6,7 @@ from django.template.defaultfilters import filesizeformat
from ietf.doc.models import Document
from ietf.name.models import DocTypeName
from ietf.meeting.models import Meeting, Session
from ietf.meeting.models import Session
# ---------------------------------------------
@ -27,21 +27,6 @@ class EditSlideForm(forms.ModelForm):
model = Document
fields = ('title',)
class InterimMeetingForm(forms.Form):
date = forms.DateField(help_text="(YYYY-MM-DD Format, please)")
group_acronym_id = forms.CharField(widget=forms.HiddenInput())
def clean(self):
super(InterimMeetingForm, self).clean()
cleaned_data = self.cleaned_data
# need to use get() here, if the date field isn't valid it won't exist
date = cleaned_data.get('date','')
group_acronym_id = cleaned_data["group_acronym_id"]
qs = Meeting.objects.filter(type='interim',date=date,session__group__acronym=group_acronym_id)
if qs:
raise forms.ValidationError('A meeting already exists for this date.')
return cleaned_data
class RecordingForm(forms.Form):
external_url = forms.URLField(label='Url')
session = forms.ModelChoiceField(queryset=Session.objects,empty_label='')

View file

@ -22,9 +22,4 @@ urlpatterns = patterns('ietf.secr.proceedings.views',
'upload_unified', name='proceedings_upload_unified'),
url(r'^(?P<meeting_num>\d{1,3}|interim-\d{4}-[A-Za-z0-9_\-\+]+)/(?P<acronym>[A-Za-z0-9_\-\+]+)/$',
'upload_unified', name='proceedings_upload_unified'),
# interim stuff
url(r'^interim/$', 'select_interim', name='proceedings_select_interim'),
url(r'^interim/(?P<meeting_num>interim-\d{4}-[A-Za-z0-9_\-\+]+)/delete/$', 'delete_interim_meeting',
name='proceedings_delete_interim_meeting'),
url(r'^interim/(?P<acronym>[A-Za-z0-9_\-\+]+)/$', 'interim', name='proceedings_interim'),
)

View file

@ -2,7 +2,6 @@ import datetime
import glob
import itertools
import os
import shutil
import subprocess
import debug # pyflakes:ignore
@ -27,12 +26,11 @@ from ietf.doc.models import Document, DocAlias, DocEvent, State, NewRevisionDocE
from ietf.group.models import Group
from ietf.ietfauth.utils import has_role, role_required
from ietf.meeting.models import Meeting, Session, TimeSlot, SchedTimeSessAssignment
from ietf.meeting.helpers import get_next_interim_number
from ietf.secr.proceedings.forms import EditSlideForm, InterimMeetingForm, RecordingForm, RecordingEditForm, ReplaceSlideForm, UnifiedUploadForm
from ietf.secr.proceedings.forms import EditSlideForm, RecordingForm, RecordingEditForm, ReplaceSlideForm, UnifiedUploadForm
from ietf.secr.proceedings.proc_utils import ( gen_acknowledgement, gen_agenda, gen_areas,
gen_attendees, gen_group_pages, gen_index, gen_irtf, gen_overview, gen_plenaries,
gen_progress, gen_research, gen_training, create_proceedings, create_interim_directory,
create_recording )
gen_progress, gen_research, gen_training, create_proceedings, create_recording )
from ietf.utils.log import log
# -------------------------------------------------
@ -174,17 +172,6 @@ def handle_upload_file(file,filename,meeting,subdir):
os.chdir(path)
os.system('unzip %s' % filename)
def make_directories(meeting):
'''
This function takes a meeting object and creates the appropriate materials directories
'''
path = meeting.get_materials_path()
os.umask(0)
for leaf in ('slides','agenda','minutes','id','rfc','bluesheets'):
target = os.path.join(path,leaf)
if not os.path.exists(target):
os.makedirs(target)
def parsedate(d):
'''
This function takes a date object and returns a tuple of year,month,day
@ -349,33 +336,6 @@ def delete_material(request,slide_id):
return HttpResponseRedirect(url)
@role_required('Secretariat')
def delete_interim_meeting(request, meeting_num):
'''
This view deletes the specified Interim Meeting and any material that has been
uploaded for it. The pattern in urls.py ensures we don't call this with a regular
meeting number.
'''
meeting = get_object_or_404(Meeting, number=meeting_num)
sessions = Session.objects.filter(meeting=meeting)
group = sessions[0].group
# delete directories
path = meeting.get_materials_path()
# do a quick sanity check on this path before we go and delete it
parts = path.split('/')
assert parts[-1] == group.acronym
if os.path.exists(path):
shutil.rmtree(path)
meeting.delete()
sessions.delete()
url = reverse('proceedings_interim', kwargs={'acronym':group.acronym})
return HttpResponseRedirect(url)
@check_permissions
def edit_slide(request, slide_id):
'''
@ -415,55 +375,6 @@ def edit_slide(request, slide_id):
RequestContext(request, {}),
)
@role_required(*AUTHORIZED_ROLES)
def interim(request, acronym):
'''
This view presents the user with a list of interim meetings for the specified group.
The user can select a meeting to manage or create a new interim meeting by entering
a date.
'''
group = get_object_or_404(Group, acronym=acronym)
if request.method == 'POST': # If the form has been submitted...
button_text = request.POST.get('submit', '')
if button_text == 'Back':
url = reverse('proceedings_select_interim')
return HttpResponseRedirect(url)
form = InterimMeetingForm(request.POST) # A form bound to the POST data
if form.is_valid():
date = form.cleaned_data['date']
number = get_next_interim_number(acronym,date)
meeting=Meeting.objects.create(type_id='interim',
date=date,
number=number)
# create session to associate this meeting with a group and hold material
Session.objects.create(meeting=meeting,
group=group,
requested_by=request.user.person,
status_id='sched',
type_id='session',
)
create_interim_directory()
make_directories(meeting)
messages.success(request, 'Meeting created')
url = reverse('proceedings_interim', kwargs={'acronym':acronym})
return HttpResponseRedirect(url)
else:
form = InterimMeetingForm(initial={'group_acronym_id':acronym}) # An unbound form
meetings = Meeting.objects.filter(type='interim',session__group__acronym=acronym).order_by('date')
return render_to_response('proceedings/interim_meeting.html',{
'group': group,
'meetings':meetings,
'form':form},
RequestContext(request, {}),
)
@role_required(*AUTHORIZED_ROLES)
def main(request):
'''
@ -797,38 +708,6 @@ def select(request, meeting_num):
RequestContext(request,{}),
)
@role_required(*AUTHORIZED_ROLES)
def select_interim(request):
'''
A screen to select which group you want to upload Interim material for. Works for Secretariat staff
and external (ADs, chairs, etc)
'''
if request.method == 'POST':
redirect_url = reverse('proceedings_interim', kwargs={'acronym':request.POST['group']})
return HttpResponseRedirect(redirect_url)
if has_role(request.user, "Secretariat"):
# initialize working groups form
choices = build_choices(Group.objects.active_wgs())
group_form = GroupSelectForm(choices=choices)
# per Alexa, not supporting Interim IRTF meetings at this time
# intialize IRTF form
#choices = build_choices(Group.objects.filter(type='wg', state='active')
#irtf_form = GroupSelectForm(choices=choices)
else:
# these forms aren't used for non-secretariat
groups = get_my_groups(request.user)
choices = build_choices(groups)
group_form = GroupSelectForm(choices=choices)
return render_to_response('proceedings/interim_select.html', {
'group_form': group_form},
#'irtf_form': irtf_form,
RequestContext(request,{}),
)
@check_permissions
def upload_unified(request, meeting_num, acronym=None, session_id=None):
'''

View file

@ -1,48 +0,0 @@
{% extends "base_site.html" %}
{% load ietf_filters %}
{% load staticfiles %}
{% block title %}Interim Meetings{% endblock %}
{% block extrahead %}{{ block.super }}
<script type="text/javascript" src="{% static 'secr/js/utils.js' %}"></script>
{% endblock %}
{% block breadcrumbs %}{{ block.super }}
&raquo; <a href="../../">Proceedings</a>
&raquo; <a href="../">Interim Select Group</a>
&raquo; {{ group.acronym }}
{% endblock %}
{% block content %}
<div class="module interim-container">
<h2>Working Group - {{ group_name }}</h2>
<p><h3>Scheduled / Completed {{group.acronym}} Interim Meetings:</h3></p>
{% if meetings %}
<ul>
{% for meeting in meetings %}
<li><a href="{% url "proceedings_upload_unified" meeting_num=meeting.number acronym=group.acronym %}">{{meeting.date}}</a>
{% if user|has_role:"Secretariat" %}
&nbsp;-&nbsp;<a href="{% url "proceedings_delete_interim_meeting" meeting_num=meeting.number %}" onClick="javascript:return confirm('Are you sure you want to delete this meeting? Any uploaded material will be removed.')">[Delete]</a>
{% endif %}
</li>
{% endfor %}
</ul>
{% else %}
<p>No meetings.</p>
{% endif %}
<div class="inline-related">
<h2>New Meeting</h2>
<h3>Create a new {{ group.acronym }} Interim Meeting:</h3>
<form action="." method="post">{% csrf_token %}
{{ form.as_p }}
{% include "includes/buttons_submit_back.html" %}
</form>
</div> <!-- inline-group -->
</div> <!-- module -->
{% endblock %}

View file

@ -1,54 +0,0 @@
{% extends "base_site.html" %}
{% load ietf_filters %}
{% load staticfiles %}
{% block title %}Proceedings{% endblock %}
{% block extrahead %}{{ block.super }}
<script type="text/javascript" src="{% static 'secr/js/utils.js' %}"></script>
{% endblock %}
{% block breadcrumbs %}{{ block.super }}
&raquo; <a href="../">Proceedings</a>
&raquo; Interim Select Group
{% endblock %}
{% block instructions %}
<a href="https://www.ietf.org/instructions/meeting_materials_tool.html" target="_blank">Instructions</a>
{% endblock %}
{% block content %}
<div class="module interim-container">
<h2>Create or Manage Interim Meeting</h2>
<div class="inline-related">
<h3><b>Select Group</b></h3>
<p>You are authorized to manage interim meetings and meeting materials for the groups below.</p>
<form class="internal-form" action="" method="post">{% csrf_token %}
<label for="id_group">Working Groups</label>
{{ group_form.group }}
<input type="submit" name="submit" value="Select" />
</form>
{% comment %}
{% if user|has_role:"Secretariat" %}
<form class="internal-form" action="" method="post">{% csrf_token %}
<label for="id_group">IRTF Groups</label>
{{ irtf_form.group }}
<input type="submit" name="submit" value="Select" />
</form>
<form class="internal-form" action="" method="post">{% csrf_token %}
<label for="id_group">Training</label>
{{ training_form.group }}
<input type="submit" name="submit" value="Select" />
</form>
{% endif %}
{% endcomment %}
</div> <!-- inline-related -->
</div> <!-- module -->
{% endblock %}
{% block footer-extras %}
{% include "includes/upload_footer.html" %}
{% endblock %}

View file

@ -61,7 +61,7 @@
</div> <!-- scroll -->
<div class="button-group">
<ul id="proceedings-interim-buttons">
<li><button onclick="window.location='{% url "proceedings_select_interim" %}'">Create Interim Meeting</button></li>
<li><button onclick="window.location='{% url "ietf.meeting.views.interim_request" %}'">Request Interim Meeting</button></li>
</ul>
</div> <!-- button-group -->
</div>

View file

@ -16,8 +16,6 @@
{% if meeting.type_id == "interim" %}
&raquo; <a href="{% url "proceedings" %}">Proceedings</a>
&raquo; <a href="{% url "proceedings_select_interim" %}">Interim Select Group</a>
&raquo; <a href="{% url "proceedings_interim" acronym=group.acronym%}">{{ group.acronym }}</a>
&raquo; {{ meeting }}
{% else %}
&raquo; <a href="{% url "proceedings" %}">Proceedings</a>