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:
parent
e6a005dba6
commit
1e50d5dd44
|
@ -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
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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='')
|
||||
|
|
|
@ -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'),
|
||||
)
|
||||
|
|
|
@ -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):
|
||||
'''
|
||||
|
|
|
@ -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 }}
|
||||
» <a href="../../">Proceedings</a>
|
||||
» <a href="../">Interim Select Group</a>
|
||||
» {{ 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" %}
|
||||
- <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 %}
|
|
@ -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 }}
|
||||
» <a href="../">Proceedings</a>
|
||||
» 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 %}
|
|
@ -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>
|
||||
|
|
|
@ -16,8 +16,6 @@
|
|||
|
||||
{% if meeting.type_id == "interim" %}
|
||||
» <a href="{% url "proceedings" %}">Proceedings</a>
|
||||
» <a href="{% url "proceedings_select_interim" %}">Interim Select Group</a>
|
||||
» <a href="{% url "proceedings_interim" acronym=group.acronym%}">{{ group.acronym }}</a>
|
||||
» {{ meeting }}
|
||||
{% else %}
|
||||
» <a href="{% url "proceedings" %}">Proceedings</a>
|
||||
|
|
Loading…
Reference in a new issue