Merged in Django-1.10 upgrade work from ^/personal/henrik/6.43.1-django-1.10
- Legacy-Id: 12881
This commit is contained in:
commit
8930d29a8e
|
@ -28,7 +28,7 @@ class CommunityList(models.Model):
|
|||
if self.user:
|
||||
return urlreverse(ietf.community.views.view_list, kwargs={ 'username': self.user.username })
|
||||
elif self.group:
|
||||
return urlreverse("group_docs", kwargs={ 'acronym': self.group.acronym })
|
||||
return urlreverse("ietf.group.views.group_documents", kwargs={ 'acronym': self.group.acronym })
|
||||
return ""
|
||||
|
||||
|
||||
|
|
|
@ -1,12 +1,14 @@
|
|||
from django.conf.urls import url
|
||||
|
||||
|
||||
from ietf.community import views
|
||||
from ietf.utils.urls import url
|
||||
|
||||
urlpatterns = [
|
||||
url(r'^personal/(?P<username>[^/]+)/$', 'ietf.community.views.view_list'),
|
||||
url(r'^personal/(?P<username>[^/]+)/manage/$', 'ietf.community.views.manage_list'),
|
||||
url(r'^personal/(?P<username>[^/]+)/trackdocument/(?P<name>[^/]+)/$', 'ietf.community.views.track_document'),
|
||||
url(r'^personal/(?P<username>[^/]+)/untrackdocument/(?P<name>[^/]+)/$', 'ietf.community.views.untrack_document'),
|
||||
url(r'^personal/(?P<username>[^/]+)/csv/$', 'ietf.community.views.export_to_csv'),
|
||||
url(r'^personal/(?P<username>[^/]+)/feed/$', 'ietf.community.views.feed'),
|
||||
url(r'^personal/(?P<username>[^/]+)/subscription/$', 'ietf.community.views.subscription'),
|
||||
url(r'^personal/(?P<username>[^/]+)/$', views.view_list),
|
||||
url(r'^personal/(?P<username>[^/]+)/manage/$', views.manage_list),
|
||||
url(r'^personal/(?P<username>[^/]+)/trackdocument/(?P<name>[^/]+)/$', views.track_document),
|
||||
url(r'^personal/(?P<username>[^/]+)/untrackdocument/(?P<name>[^/]+)/$', views.untrack_document),
|
||||
url(r'^personal/(?P<username>[^/]+)/csv/$', views.export_to_csv),
|
||||
url(r'^personal/(?P<username>[^/]+)/feed/$', views.feed),
|
||||
url(r'^personal/(?P<username>[^/]+)/subscription/$', views.subscription),
|
||||
]
|
||||
|
|
|
@ -1,5 +1,7 @@
|
|||
# Copyright The IETF Trust 2007, All Rights Reserved
|
||||
|
||||
import sys
|
||||
import django
|
||||
from django.conf import settings
|
||||
from ietf import __date__, __rev__, __version__, __patch__, __id__
|
||||
|
||||
|
@ -9,8 +11,20 @@ def server_mode(request):
|
|||
def rfcdiff_base_url(request):
|
||||
return {'rfcdiff_base_url': settings.RFCDIFF_BASE_URL}
|
||||
|
||||
def python_version():
|
||||
v = sys.version_info
|
||||
return "%s.%s.%s" % (v.major, v.minor, v.micro, )
|
||||
|
||||
def revision_info(request):
|
||||
return {'revision_time': __date__[7:32], 'revision_date': __date__[7:17], 'revision_num': __rev__[6:-2], "revision_id": __id__[5:-2], "version_num": __version__+__patch__ }
|
||||
return {
|
||||
'revision_time': __date__[7:32],
|
||||
'revision_date': __date__[7:17],
|
||||
'revision_num': __rev__[6:-2],
|
||||
'revision_id': __id__[5:-2],
|
||||
'version_num': __version__+__patch__,
|
||||
'django_version': django.get_version(),
|
||||
'python_version': python_version(),
|
||||
}
|
||||
|
||||
def debug_mark_queries_from_view(request):
|
||||
"Marks the queries which has occurred so far as coming from a view."
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
# Copyright The IETF Trust 2010, All Rights Reserved
|
||||
|
||||
from django.conf.urls import url
|
||||
from ietf.cookies import views
|
||||
from ietf.utils.urls import url
|
||||
|
||||
urlpatterns = [
|
||||
url(r'^$', views.preferences),
|
||||
|
|
|
@ -4,7 +4,7 @@ from docutils.core import publish_string
|
|||
from docutils.utils import SystemMessage
|
||||
import debug # pyflakes:ignore
|
||||
|
||||
from django.template import loaders
|
||||
from django.template.loaders.base import Loader as BaseLoader
|
||||
from django.template.base import Template as DjangoTemplate, TemplateEncodingError
|
||||
from django.template.exceptions import TemplateDoesNotExist
|
||||
from django.utils.encoding import smart_unicode
|
||||
|
@ -61,7 +61,7 @@ class RSTTemplate(PlainTemplate):
|
|||
e.args = tuple(args)
|
||||
raise e
|
||||
|
||||
class Loader(loaders.base.Loader):
|
||||
class Loader(BaseLoader):
|
||||
def __init__(self, engine):
|
||||
super(Loader, self).__init__(engine)
|
||||
self.is_usable = True
|
||||
|
|
|
@ -1,7 +1,9 @@
|
|||
from django.conf.urls import url
|
||||
|
||||
|
||||
from ietf.dbtemplate import views
|
||||
from ietf.utils.urls import url
|
||||
|
||||
urlpatterns = [
|
||||
url(r'^(?P<acronym>[-a-z0-9]+)/$', 'ietf.dbtemplate.views.template_list', name='template_list'),
|
||||
url(r'^(?P<acronym>[-a-z0-9]+)/(?P<template_id>[\d]+)/$', 'ietf.dbtemplate.views.template_edit', name='template_edit'),
|
||||
url(r'^(?P<acronym>[-a-z0-9]+)/$', views.template_list, name='template_list'),
|
||||
url(r'^(?P<acronym>[-a-z0-9]+)/(?P<template_id>[\d]+)/$', views.template_edit, name='template_edit'),
|
||||
]
|
||||
|
|
|
@ -1,11 +1,11 @@
|
|||
# Copyright The IETF Trust 2007, All Rights Reserved
|
||||
|
||||
from django.conf.urls import url
|
||||
from django.views.generic import RedirectView
|
||||
from django.http import HttpResponsePermanentRedirect
|
||||
from django.shortcuts import get_object_or_404
|
||||
|
||||
from ietf.group.models import Group
|
||||
from ietf.utils.urls import url
|
||||
|
||||
urlpatterns = [
|
||||
url(r'^$', RedirectView.as_view(url='/doc/', permanent=True)),
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
from django.conf.urls import url
|
||||
from django.views.generic import RedirectView
|
||||
|
||||
from ietf.utils.urls import url
|
||||
|
||||
urlpatterns = [
|
||||
url(r'^help/(?:sub)?state/(?:\d+/)?$', RedirectView.as_view(url='/doc/help/state/draft-iesg/', permanent=True)),
|
||||
url(r'^help/evaluation/$', RedirectView.as_view(url='https://www.ietf.org/iesg/voting-procedures.html', permanent=True)),
|
||||
|
|
|
@ -15,7 +15,6 @@ from django import template
|
|||
from django.conf import settings
|
||||
from django.utils.html import escape
|
||||
from django.template.defaultfilters import truncatewords_html, linebreaksbr, stringfilter, striptags, urlize
|
||||
from django.template import resolve_variable
|
||||
from django.utils.safestring import mark_safe, SafeData
|
||||
from django.utils.html import strip_tags
|
||||
|
||||
|
@ -396,17 +395,6 @@ def has_role(user, role_names):
|
|||
return False
|
||||
return has_role(user, role_names.split(','))
|
||||
|
||||
@register.filter
|
||||
def stable_dictsort(value, arg):
|
||||
"""
|
||||
Like dictsort, except it's stable (preserves the order of items
|
||||
whose sort key is the same). See also bug report
|
||||
http://code.djangoproject.com/ticket/12110
|
||||
"""
|
||||
decorated = [(resolve_variable('var.' + arg, {'var' : item}), item) for item in value]
|
||||
decorated.sort(lambda a, b: cmp(a[0], b[0]) if a[0] and b[0] else -1 if b[0] else 1 if a[0] else 0)
|
||||
return [item[1] for item in decorated]
|
||||
|
||||
@register.filter
|
||||
def ad_area(user):
|
||||
if user and user.is_authenticated():
|
||||
|
|
|
@ -559,7 +559,7 @@ class EditCharterTests(TestCase):
|
|||
self.assertTrue("approved" in outbox[0]['Subject'].lower())
|
||||
self.assertTrue("iesg-secretary" in outbox[0]['To'])
|
||||
body = outbox[0].get_payload()
|
||||
for word in ["WG", "/wg/ames/charter/",
|
||||
for word in ["WG", "/wg/ames/about/",
|
||||
"Charter", "/doc/charter-ietf-ames/", ]:
|
||||
self.assertIn(word, body)
|
||||
#
|
||||
|
|
|
@ -77,7 +77,7 @@ class StatusChangeTests(TestCase):
|
|||
def test_change_state(self):
|
||||
|
||||
doc = Document.objects.get(name='status-change-imaginary-mid-review')
|
||||
url = urlreverse('status_change_change_state',kwargs=dict(name=doc.name))
|
||||
url = urlreverse('ietf.doc.views_status_change.change_state',kwargs=dict(name=doc.name))
|
||||
|
||||
login_testing_unauthorized(self, "ad", url)
|
||||
|
||||
|
@ -432,7 +432,7 @@ class StatusChangeSubmitTests(TestCase):
|
|||
f.write('This is the old proposal.')
|
||||
f.close()
|
||||
# Put the old proposal into IESG review (exercises ballot tab when looking at an older revision below)
|
||||
state_change_url = urlreverse('status_change_change_state',kwargs=dict(name=doc.name))
|
||||
state_change_url = urlreverse('ietf.doc.views_status_change.change_state',kwargs=dict(name=doc.name))
|
||||
iesgeval_pk = str(State.objects.get(slug='iesgeval',type__slug='statchg').pk)
|
||||
r = self.client.post(state_change_url,dict(new_state=iesgeval_pk))
|
||||
self.assertEqual(r.status_code, 302)
|
||||
|
|
|
@ -30,11 +30,12 @@
|
|||
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
from django.conf.urls import url, include
|
||||
from django.conf.urls import include
|
||||
from django.views.generic import RedirectView
|
||||
from django.conf import settings
|
||||
|
||||
from ietf.doc import views_search, views_draft, views_ballot, views_status_change, views_doc, views_stats
|
||||
from ietf.doc import views_search, views_draft, views_ballot, views_status_change, views_doc, views_stats, views_help
|
||||
from ietf.utils.urls import url
|
||||
|
||||
session_patterns = [
|
||||
url(r'^add$', views_doc.add_sessionpresentation),
|
||||
|
@ -49,7 +50,7 @@ urlpatterns = [
|
|||
url(r'^in-last-call/$', views_search.drafts_in_last_call, name="drafts_in_last_call"),
|
||||
url(r'^ad/(?P<name>[\w.-]+)/$(?u)', views_search.docs_for_ad, name="docs_for_ad"),
|
||||
url(r'^ad2/(?P<name>[\w.-]+)/$(?u)', RedirectView.as_view(url='/doc/ad/%(name)s/', permanent=True)),
|
||||
url(r'^rfc-status-changes/$', views_status_change.rfc_status_changes, name='rfc_status_changes'),
|
||||
url(r'^rfc-status-changes/$', views_status_change.rfc_status_changes, name='ietf.doc.views_status_change.rfc_status_changes'),
|
||||
url(r'^start-rfc-status-change/(?:%(name)s/)?$' % settings.URL_REGEXPS, views_status_change.start_rfc_status_change, name='start_rfc_status_change'),
|
||||
url(r'^iesg/(?P<last_call_only>[A-Za-z0-9.-]+/)?$', views_search.drafts_in_iesg_process, name="drafts_in_iesg_process"),
|
||||
url(r'^email-aliases/$', views_doc.email_aliases),
|
||||
|
@ -67,19 +68,19 @@ urlpatterns = [
|
|||
url(r'^%(name)s/(?:%(rev)s/)?bibtex/$' % settings.URL_REGEXPS, views_doc.document_bibtex),
|
||||
url(r'^%(name)s/history/$' % settings.URL_REGEXPS, views_doc.document_history, name="doc_history"),
|
||||
url(r'^%(name)s/writeup/$' % settings.URL_REGEXPS, views_doc.document_writeup, name="doc_writeup"),
|
||||
url(r'^%(name)s/email/$' % settings.URL_REGEXPS, views_doc.document_email, name="doc_email"),
|
||||
url(r'^%(name)s/email/$' % settings.URL_REGEXPS, views_doc.document_email, name="ietf.doc.views_doc.document_email"),
|
||||
url(r'^%(name)s/shepherdwriteup/$' % settings.URL_REGEXPS, views_doc.document_shepherd_writeup, name="doc_shepherd_writeup"),
|
||||
url(r'^%(name)s/references/$' % settings.URL_REGEXPS, views_doc.document_references, name="doc_references"),
|
||||
url(r'^%(name)s/referencedby/$' % settings.URL_REGEXPS, views_doc.document_referenced_by, name="doc_referenced_by"),
|
||||
url(r'^%(name)s/ballot/$' % settings.URL_REGEXPS, views_doc.document_ballot, name="doc_ballot"),
|
||||
url(r'^%(name)s/ballot/(?P<ballot_id>[0-9]+)/$' % settings.URL_REGEXPS, views_doc.document_ballot, name="doc_ballot"),
|
||||
url(r'^%(name)s/ballot/$' % settings.URL_REGEXPS, views_doc.document_ballot),
|
||||
url(r'^%(name)s/ballot/(?P<ballot_id>[0-9]+)/$' % settings.URL_REGEXPS, views_doc.document_ballot),
|
||||
url(r'^%(name)s/ballot/(?P<ballot_id>[0-9]+)/position/$' % settings.URL_REGEXPS, views_ballot.edit_position),
|
||||
url(r'^%(name)s/ballot/(?P<ballot_id>[0-9]+)/emailposition/$' % settings.URL_REGEXPS, views_ballot.send_ballot_comment, name='doc_send_ballot_comment'),
|
||||
url(r'^%(name)s/(?:%(rev)s/)?doc.json$' % settings.URL_REGEXPS, views_doc.document_json),
|
||||
url(r'^%(name)s/ballotpopup/(?P<ballot_id>[0-9]+)/$' % settings.URL_REGEXPS, views_doc.ballot_popup),
|
||||
url(r'^(?P<name>[A-Za-z0-9._+-]+)/reviewrequest/', include("ietf.doc.urls_review")),
|
||||
|
||||
url(r'^%(name)s/email-aliases/$' % settings.URL_REGEXPS, RedirectView.as_view(pattern_name='doc_email', permanent=False),name='doc_specific_email_aliases'),
|
||||
url(r'^%(name)s/email-aliases/$' % settings.URL_REGEXPS, RedirectView.as_view(pattern_name='ietf.doc.views_doc.document_email', permanent=False),name='doc_specific_email_aliases'),
|
||||
|
||||
url(r'^%(name)s/edit/state/$' % settings.URL_REGEXPS, views_draft.change_state, name='doc_change_state'), # IESG state
|
||||
url(r'^%(name)s/edit/state/(?P<state_type>iana-action|iana-review)/$' % settings.URL_REGEXPS, views_draft.change_iana_state, name='doc_change_iana_state'),
|
||||
|
@ -116,9 +117,9 @@ urlpatterns = [
|
|||
url(r'^%(name)s/edit/approveballot/$' % settings.URL_REGEXPS, views_ballot.approve_ballot, name='doc_approve_ballot'),
|
||||
url(r'^%(name)s/edit/makelastcall/$' % settings.URL_REGEXPS, views_ballot.make_last_call, name='doc_make_last_call'),
|
||||
|
||||
url(r'^help/state/(?P<type>[\w-]+)/$', 'ietf.doc.views_help.state_help', name="state_help"),
|
||||
url(r'^help/relationships/$', 'ietf.doc.views_help.relationship_help', name="relationship_help"),
|
||||
url(r'^help/relationships/(?P<subset>\w+)/$', 'ietf.doc.views_help.relationship_help', name="relationship_subset_help"),
|
||||
url(r'^help/state/(?P<type>[\w-]+)/$', views_help.state_help, name="state_help"),
|
||||
url(r'^help/relationships/$', views_help.relationship_help, name="relationship_help"),
|
||||
url(r'^help/relationships/(?P<subset>\w+)/$', views_help.relationship_help, name="relationship_subset_help"),
|
||||
|
||||
url(r'^%(name)s/meetings/?$' % settings.URL_REGEXPS, views_doc.all_presentations),
|
||||
|
||||
|
|
|
@ -1,19 +1,21 @@
|
|||
# Copyright The IETF Trust 2011, All Rights Reserved
|
||||
|
||||
from django.conf.urls import url
|
||||
from django.conf import settings
|
||||
|
||||
from ietf.doc import views_charter, views_doc
|
||||
from ietf.utils.urls import url
|
||||
|
||||
urlpatterns = [
|
||||
url(r'^state/$', "ietf.doc.views_charter.change_state", name='charter_change_state'),
|
||||
url(r'^title/$', "ietf.doc.views_charter.change_title", name='charter_change_title'),
|
||||
url(r'^(?P<option>initcharter|recharter|abandon)/$', "ietf.doc.views_charter.change_state", name='charter_startstop_process'),
|
||||
url(r'^telechat/$', "ietf.doc.views_doc.telechat_date", name='charter_telechat_date'),
|
||||
url(r'^notify/$', "ietf.doc.views_doc.edit_notify", name='charter_edit_notify'),
|
||||
url(r'^ad/$', "ietf.doc.views_charter.edit_ad", name='charter_edit_ad'),
|
||||
url(r'^action/$', "ietf.doc.views_charter.action_announcement_text"),
|
||||
url(r'^review/$', "ietf.doc.views_charter.review_announcement_text"),
|
||||
url(r'^ballotwriteupnotes/$', "ietf.doc.views_charter.ballot_writeupnotes"),
|
||||
url(r'^approve/$', "ietf.doc.views_charter.approve", name='charter_approve'),
|
||||
url(r'^submit/(?:(?P<option>initcharter|recharter)/)?$', "ietf.doc.views_charter.submit", name='charter_submit'),
|
||||
url(r'^withmilestones-%(rev)s.txt$' % settings.URL_REGEXPS, "ietf.doc.views_charter.charter_with_milestones_txt", name='charter_with_milestones_txt'),
|
||||
url(r'^state/$', views_charter.change_state, name='charter_change_state'),
|
||||
url(r'^title/$', views_charter.change_title, name='charter_change_title'),
|
||||
url(r'^(?P<option>initcharter|recharter|abandon)/$', views_charter.change_state, name='charter_startstop_process'),
|
||||
url(r'^telechat/$', views_doc.telechat_date, name='charter_telechat_date'),
|
||||
url(r'^notify/$', views_doc.edit_notify, name='charter_edit_notify'),
|
||||
url(r'^ad/$', views_charter.edit_ad, name='charter_edit_ad'),
|
||||
url(r'^action/$', views_charter.action_announcement_text),
|
||||
url(r'^review/$', views_charter.review_announcement_text),
|
||||
url(r'^ballotwriteupnotes/$', views_charter.ballot_writeupnotes),
|
||||
url(r'^approve/$', views_charter.approve, name='charter_approve'),
|
||||
url(r'^submit/(?:(?P<option>initcharter|recharter)/)?$', views_charter.submit, name='charter_submit'),
|
||||
url(r'^withmilestones-%(rev)s.txt$' % settings.URL_REGEXPS, views_charter.charter_with_milestones_txt, name='charter_with_milestones_txt'),
|
||||
]
|
||||
|
|
|
@ -1,13 +1,15 @@
|
|||
from django.conf.urls import url
|
||||
|
||||
from ietf.doc import views_conflict_review, views_doc
|
||||
from ietf.utils.urls import url
|
||||
|
||||
urlpatterns = [
|
||||
url(r'^state/$', "ietf.doc.views_conflict_review.change_state", name='conflict_review_change_state'),
|
||||
url(r'^submit/$', "ietf.doc.views_conflict_review.submit", name='conflict_review_submit'),
|
||||
url(r'^ad/$', "ietf.doc.views_conflict_review.edit_ad", name='conflict_review_ad'),
|
||||
url(r'^approve/$', "ietf.doc.views_conflict_review.approve", name='conflict_review_approve'),
|
||||
url(r'^start_conflict_review/$', "ietf.doc.views_conflict_review.start_review", name='conflict_review_start'),
|
||||
url(r'^telechat/$', "ietf.doc.views_doc.telechat_date", name='conflict_review_telechat_date'),
|
||||
url(r'^notices/$', "ietf.doc.views_doc.edit_notify", name='conflict_review_notices'),
|
||||
url(r'^state/$', views_conflict_review.change_state, name='conflict_review_change_state'),
|
||||
url(r'^submit/$', views_conflict_review.submit, name='conflict_review_submit'),
|
||||
url(r'^ad/$', views_conflict_review.edit_ad, name='conflict_review_ad'),
|
||||
url(r'^approve/$', views_conflict_review.approve, name='conflict_review_approve'),
|
||||
url(r'^start_conflict_review/$', views_conflict_review.start_review, name='conflict_review_start'),
|
||||
url(r'^telechat/$', views_doc.telechat_date, name='conflict_review_telechat_date'),
|
||||
url(r'^notices/$', views_doc.edit_notify, name='conflict_review_notices'),
|
||||
]
|
||||
|
||||
|
||||
|
|
|
@ -1,6 +1,8 @@
|
|||
from django.conf.urls import url
|
||||
|
||||
from ietf.doc import views_material
|
||||
from ietf.utils.urls import url
|
||||
|
||||
urlpatterns = [
|
||||
url(r'^(?P<action>state|title|abstract|revise)/$', "ietf.doc.views_material.edit_material", name="material_edit"),
|
||||
url(r'^(?P<action>state|title|abstract|revise)/$', views_material.edit_material, name="material_edit"),
|
||||
]
|
||||
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
from django.conf.urls import url
|
||||
from ietf.doc import views_review
|
||||
from ietf.utils.urls import url
|
||||
|
||||
urlpatterns = [
|
||||
url(r'^$', views_review.request_review),
|
||||
|
|
|
@ -1,15 +1,17 @@
|
|||
from django.conf.urls import url
|
||||
|
||||
from ietf.doc import views_status_change, views_doc
|
||||
from ietf.utils.urls import url
|
||||
|
||||
urlpatterns = [
|
||||
url(r'^state/$', "ietf.doc.views_status_change.change_state", name='status_change_change_state'),
|
||||
url(r'^submit/$', "ietf.doc.views_status_change.submit", name='status_change_submit'),
|
||||
url(r'^ad/$', "ietf.doc.views_status_change.edit_ad", name='status_change_ad'),
|
||||
url(r'^title/$', "ietf.doc.views_status_change.edit_title", name='status_change_title'),
|
||||
url(r'^approve/$', "ietf.doc.views_status_change.approve", name='status_change_approve'),
|
||||
url(r'^relations/$', "ietf.doc.views_status_change.edit_relations", name='status_change_relations'),
|
||||
url(r'^last-call/$', "ietf.doc.views_status_change.last_call", name='status_change_last_call'),
|
||||
url(r'^telechat/$', "ietf.doc.views_doc.telechat_date", name='status_change_telechat_date'),
|
||||
url(r'^notices/$', "ietf.doc.views_doc.edit_notify", name='status_change_notices'),
|
||||
url(r'^state/$', views_status_change.change_state),
|
||||
url(r'^submit/$', views_status_change.submit, name='status_change_submit'),
|
||||
url(r'^ad/$', views_status_change.edit_ad, name='status_change_ad'),
|
||||
url(r'^title/$', views_status_change.edit_title, name='status_change_title'),
|
||||
url(r'^approve/$', views_status_change.approve, name='status_change_approve'),
|
||||
url(r'^relations/$', views_status_change.edit_relations, name='status_change_relations'),
|
||||
url(r'^last-call/$', views_status_change.last_call, name='status_change_last_call'),
|
||||
url(r'^telechat/$', views_doc.telechat_date, name='status_change_telechat_date'),
|
||||
url(r'^notices/$', views_doc.edit_notify, name='status_change_notices'),
|
||||
]
|
||||
|
||||
|
||||
|
|
|
@ -116,7 +116,7 @@ def edit_position(request, name, ballot_id):
|
|||
if 'ballot_edit_return_point' in request.session:
|
||||
return_to_url = request.session['ballot_edit_return_point']
|
||||
else:
|
||||
return_to_url = urlreverse("doc_ballot", kwargs=dict(name=doc.name, ballot_id=ballot_id))
|
||||
return_to_url = urlreverse("ietf.doc.views_doc.document_ballot", kwargs=dict(name=doc.name, ballot_id=ballot_id))
|
||||
|
||||
# if we're in the Secretariat, we can select an AD to act as stand-in for
|
||||
if has_role(request.user, "Secretariat"):
|
||||
|
@ -245,12 +245,12 @@ def send_ballot_comment(request, name, ballot_id):
|
|||
if 'ballot_edit_return_point' in request.session:
|
||||
return_to_url = request.session['ballot_edit_return_point']
|
||||
else:
|
||||
return_to_url = urlreverse("doc_ballot", kwargs=dict(name=doc.name, ballot_id=ballot_id))
|
||||
return_to_url = urlreverse("ietf.doc.views_doc.document_ballot", kwargs=dict(name=doc.name, ballot_id=ballot_id))
|
||||
|
||||
if 'HTTP_REFERER' in request.META:
|
||||
back_url = request.META['HTTP_REFERER']
|
||||
else:
|
||||
back_url = urlreverse("doc_ballot", kwargs=dict(name=doc.name, ballot_id=ballot_id))
|
||||
back_url = urlreverse("ietf.doc.views_doc.document_ballot", kwargs=dict(name=doc.name, ballot_id=ballot_id))
|
||||
|
||||
# if we're in the Secretariat, we can select an AD to act as stand-in for
|
||||
if not has_role(request.user, "Area Director"):
|
||||
|
|
|
@ -73,14 +73,14 @@ def render_document_top(request, doc, tab, name):
|
|||
|
||||
ballot = doc.latest_event(BallotDocEvent, type="created_ballot")
|
||||
if doc.type_id in ("draft","conflrev", "statchg"):
|
||||
tabs.append(("IESG Evaluation Record", "ballot", urlreverse("doc_ballot", kwargs=dict(name=name)), ballot, None if ballot else "IESG Evaluation Ballot has not been created yet"))
|
||||
tabs.append(("IESG Evaluation Record", "ballot", urlreverse("ietf.doc.views_doc.document_ballot", kwargs=dict(name=name)), ballot, None if ballot else "IESG Evaluation Ballot has not been created yet"))
|
||||
elif doc.type_id == "charter" and doc.group.type_id == "wg":
|
||||
tabs.append(("IESG Review", "ballot", urlreverse("doc_ballot", kwargs=dict(name=name)), ballot, None if ballot else "IESG Review Ballot has not been created yet"))
|
||||
tabs.append(("IESG Review", "ballot", urlreverse("ietf.doc.views_doc.document_ballot", kwargs=dict(name=name)), ballot, None if ballot else "IESG Review Ballot has not been created yet"))
|
||||
|
||||
if doc.type_id == "draft" or (doc.type_id == "charter" and doc.group.type_id == "wg"):
|
||||
tabs.append(("IESG Writeups", "writeup", urlreverse("doc_writeup", kwargs=dict(name=name)), True, None))
|
||||
|
||||
tabs.append(("Email expansions","email",urlreverse("doc_email", kwargs=dict(name=name)), True, None))
|
||||
tabs.append(("Email expansions","email",urlreverse("ietf.doc.views_doc.document_email", kwargs=dict(name=name)), True, None))
|
||||
tabs.append(("History", "history", urlreverse("doc_history", kwargs=dict(name=name)), True, None))
|
||||
|
||||
if name.startswith("rfc"):
|
||||
|
@ -260,7 +260,7 @@ def document_main(request, name, rev=None):
|
|||
elif group.type_id in ("rg", "wg"):
|
||||
submission = "%s %s" % (group.acronym, group.type)
|
||||
if group.type_id == "wg":
|
||||
submission = "<a href=\"%s\">%s</a>" % (urlreverse("group_home", kwargs=dict(group_type=group.type_id, acronym=group.acronym)), submission)
|
||||
submission = "<a href=\"%s\">%s</a>" % (urlreverse("ietf.group.views.group_home", kwargs=dict(group_type=group.type_id, acronym=group.acronym)), submission)
|
||||
if doc.stream_id and doc.get_state_slug("draft-stream-%s" % doc.stream_id) == "c-adopt":
|
||||
submission = "candidate for %s" % submission
|
||||
|
||||
|
|
|
@ -41,7 +41,7 @@ class GroupAdmin(admin.ModelAdmin):
|
|||
|
||||
# SDO reminder
|
||||
def get_urls(self):
|
||||
from django.conf.urls import url
|
||||
from ietf.utils.urls import url
|
||||
|
||||
def wrap(view):
|
||||
def wrapper(*args, **kwargs):
|
||||
|
|
|
@ -10,7 +10,7 @@ class GroupFeatures(object):
|
|||
has_reviews = False
|
||||
has_default_jabber = False
|
||||
customize_workflow = False
|
||||
about_page = "group_about"
|
||||
about_page = "ietf.group.views.group_about"
|
||||
default_tab = about_page
|
||||
material_types = ["slides"]
|
||||
admin_roles = ["chair"]
|
||||
|
@ -23,10 +23,10 @@ class GroupFeatures(object):
|
|||
self.customize_workflow = True
|
||||
self.has_default_jabber = True
|
||||
self.has_dependencies = True
|
||||
self.default_tab = "group_docs"
|
||||
self.default_tab = "ietf.group.views.group_documents"
|
||||
elif group.type_id in ("team",):
|
||||
self.has_materials = True
|
||||
self.default_tab = "group_about"
|
||||
self.default_tab = "ietf.group.views.group_about"
|
||||
elif group.type_id in ("program",):
|
||||
self.has_documents = True
|
||||
self.has_milestones = True
|
||||
|
@ -35,7 +35,7 @@ class GroupFeatures(object):
|
|||
self.admin_roles = ["chair", "secr"]
|
||||
|
||||
if self.has_chartering_process:
|
||||
self.about_page = "group_charter"
|
||||
self.about_page = "ietf.group.views.group_about"
|
||||
|
||||
from ietf.review.utils import active_review_teams
|
||||
if group in active_review_teams():
|
||||
|
|
|
@ -342,7 +342,7 @@ class GroupPagesTests(TestCase):
|
|||
self.assertTrue(doc.title in unicontent(r))
|
||||
self.assertTrue(doc.name in unicontent(r))
|
||||
|
||||
url = urlreverse("group_materials", kwargs={ 'acronym': group.acronym })
|
||||
url = urlreverse("ietf.group.views.materials", kwargs={ 'acronym': group.acronym })
|
||||
|
||||
# try deleting the document and check it's gone
|
||||
doc.set_state(State.objects.get(type="slides", slug="deleted"))
|
||||
|
@ -429,7 +429,7 @@ class GroupEditTests(TestCase):
|
|||
def test_create(self):
|
||||
make_test_data()
|
||||
|
||||
url = urlreverse('group_create', kwargs=dict(group_type="wg"))
|
||||
url = urlreverse('ietf.group.views_edit.edit', kwargs=dict(group_type="wg", action="charter"))
|
||||
login_testing_unauthorized(self, "secretary", url)
|
||||
|
||||
num_wgs = len(Group.objects.filter(type="wg"))
|
||||
|
@ -488,7 +488,7 @@ class GroupEditTests(TestCase):
|
|||
|
||||
make_test_data()
|
||||
|
||||
url = urlreverse('group_create', kwargs=dict(group_type="rg"))
|
||||
url = urlreverse('ietf.group.views_edit.edit', kwargs=dict(group_type="rg", action="charter"))
|
||||
login_testing_unauthorized(self, "secretary", url)
|
||||
|
||||
irtf = Group.objects.get(acronym='irtf')
|
||||
|
@ -513,7 +513,7 @@ class GroupEditTests(TestCase):
|
|||
def test_create_based_on_existing_bof(self):
|
||||
make_test_data()
|
||||
|
||||
url = urlreverse('group_create', kwargs=dict(group_type="wg"))
|
||||
url = urlreverse('ietf.group.views_edit.edit', kwargs=dict(group_type="wg", action="charter"))
|
||||
login_testing_unauthorized(self, "secretary", url)
|
||||
|
||||
group = Group.objects.get(acronym="mars")
|
||||
|
@ -548,7 +548,7 @@ class GroupEditTests(TestCase):
|
|||
make_test_data()
|
||||
group = Group.objects.get(acronym="mars")
|
||||
|
||||
url = urlreverse('group_edit', kwargs=dict(group_type=group.type_id, acronym=group.acronym))
|
||||
url = urlreverse('ietf.group.views_edit.edit', kwargs=dict(group_type=group.type_id, acronym=group.acronym, action="edit"))
|
||||
login_testing_unauthorized(self, "secretary", url)
|
||||
|
||||
# normal get
|
||||
|
@ -625,7 +625,7 @@ class GroupEditTests(TestCase):
|
|||
review_req = make_review_data(doc)
|
||||
group = review_req.team
|
||||
|
||||
url = urlreverse('group_edit', kwargs=dict(group_type=group.type_id, acronym=group.acronym))
|
||||
url = urlreverse('ietf.group.views_edit.edit', kwargs=dict(group_type=group.type_id, acronym=group.acronym, action="edit"))
|
||||
login_testing_unauthorized(self, "secretary", url)
|
||||
|
||||
# normal get
|
||||
|
|
|
@ -1,18 +1,21 @@
|
|||
# Copyright The IETF Trust 2007, All Rights Reserved
|
||||
|
||||
from django.conf.urls import url, include
|
||||
from django.conf.urls import include
|
||||
from django.conf import settings
|
||||
|
||||
urlpatterns = [
|
||||
url(r'^$', 'ietf.group.views.active_groups'),
|
||||
url(r'^groupmenu.json', 'ietf.group.views_ajax.group_menu_data', None, "group_menu_data"),
|
||||
url(r'^%(acronym)s.json$' % settings.URL_REGEXPS, 'ietf.group.views_ajax.group_json'),
|
||||
url(r'^chartering/$', 'ietf.group.views.chartering_groups'),
|
||||
url(r'^chartering/create/(?P<group_type>(wg|rg))/$', 'ietf.group.views_edit.edit', {'action': "charter"}, "group_create"),
|
||||
url(r'^concluded/$', 'ietf.group.views.concluded_groups'),
|
||||
url(r'^email-aliases/$', 'ietf.group.views.email_aliases'),
|
||||
url(r'^all-status/$', 'ietf.group.views.all_status'),
|
||||
from ietf.group import views, views_ajax, views_edit
|
||||
from ietf.utils.urls import url
|
||||
|
||||
url(r'^%(acronym)s/$' % settings.URL_REGEXPS, 'ietf.group.views.group_home', None, "group_home"),
|
||||
urlpatterns = [
|
||||
url(r'^$', views.active_groups),
|
||||
url(r'^groupmenu.json', views_ajax.group_menu_data, None, "group_menu_data"),
|
||||
url(r'^%(acronym)s.json$' % settings.URL_REGEXPS, views_ajax.group_json),
|
||||
url(r'^chartering/$', views.chartering_groups),
|
||||
url(r'^chartering/create/(?P<group_type>(wg|rg))/$', views_edit.edit, {'action': "charter"}),
|
||||
url(r'^concluded/$', views.concluded_groups),
|
||||
url(r'^email-aliases/$', views.email_aliases),
|
||||
url(r'^all-status/$', views.all_status),
|
||||
|
||||
url(r'^%(acronym)s/$' % settings.URL_REGEXPS, views.group_home),
|
||||
url(r'^%(acronym)s/' % settings.URL_REGEXPS, include('ietf.group.urls_info_details')),
|
||||
]
|
||||
|
|
|
@ -1,10 +1,11 @@
|
|||
# Copyright The IETF Trust 2008, All Rights Reserved
|
||||
|
||||
from django.conf.urls import url, include
|
||||
from django.conf.urls import include
|
||||
from django.views.generic import RedirectView
|
||||
from django.conf import settings
|
||||
|
||||
from ietf.group import views, views_edit
|
||||
from ietf.utils.urls import url
|
||||
|
||||
urlpatterns = [
|
||||
url(r'^$', views.active_groups),
|
||||
|
@ -18,8 +19,8 @@ urlpatterns = [
|
|||
url(r'^chartering/$', RedirectView.as_view(url='/group/chartering/', permanent=True)),
|
||||
url(r'^chartering/create/$', RedirectView.as_view(url='/group/chartering/create/%(group_type)s/', permanent=True)),
|
||||
url(r'^bofs/$', views.bofs),
|
||||
url(r'^email-aliases/$', 'ietf.group.views.email_aliases'),
|
||||
url(r'^bofs/create/$', views_edit.edit, {'action': "create", }, "bof_create"),
|
||||
url(r'^email-aliases/$', views.email_aliases),
|
||||
url(r'^bofs/create/$', views_edit.edit, {'action': "create", }),
|
||||
url(r'^photos/$', views.chair_photos),
|
||||
url(r'^%(acronym)s/' % settings.URL_REGEXPS, include('ietf.group.urls_info_details')),
|
||||
]
|
||||
|
|
|
@ -1,34 +1,37 @@
|
|||
from django.conf.urls import url
|
||||
from django.views.generic import RedirectView
|
||||
from ietf.group import views, views_review
|
||||
|
||||
from ietf.community import views as community_views
|
||||
from ietf.doc import views_material as material_views
|
||||
from ietf.group import views, views_edit, views_review, milestones as milestone_views
|
||||
from ietf.utils.urls import url
|
||||
|
||||
urlpatterns = [
|
||||
url(r'^$', 'ietf.group.views.group_home', None, "group_home"),
|
||||
url(r'^documents/txt/$', 'ietf.group.views.group_documents_txt'),
|
||||
url(r'^documents/$', 'ietf.group.views.group_documents', None, "group_docs"),
|
||||
url(r'^documents/manage/$', 'ietf.community.views.manage_list'),
|
||||
url(r'^documents/csv/$', 'ietf.community.views.export_to_csv'),
|
||||
url(r'^documents/feed/$', 'ietf.community.views.feed'),
|
||||
url(r'^documents/subscription/$', 'ietf.community.views.subscription'),
|
||||
url(r'^charter/$', 'ietf.group.views.group_about', None, 'group_charter'),
|
||||
url(r'^about/$', 'ietf.group.views.group_about', None, 'group_about'),
|
||||
url(r'^about/status/$', 'ietf.group.views.group_about_status'),
|
||||
url(r'^about/status/edit/$', 'ietf.group.views.group_about_status_edit'),
|
||||
url(r'^about/status/meeting/(?P<num>\d+)/$', 'ietf.group.views.group_about_status_meeting'),
|
||||
url(r'^history/$','ietf.group.views.history'),
|
||||
url(r'^email/$', 'ietf.group.views.email'),
|
||||
url(r'^deps/(?P<output_type>[\w-]+)/$', 'ietf.group.views.dependencies'),
|
||||
url(r'^meetings/$', 'ietf.group.views.meetings'),
|
||||
url(r'^edit/$', 'ietf.group.views_edit.edit', {'action': "edit"}, "group_edit"),
|
||||
url(r'^conclude/$', 'ietf.group.views_edit.conclude'),
|
||||
url(r'^milestones/$', 'ietf.group.milestones.edit_milestones', {'milestone_set': "current"}, "group_edit_milestones"),
|
||||
url(r'^milestones/charter/$', 'ietf.group.milestones.edit_milestones', {'milestone_set': "charter"}, "group_edit_charter_milestones"),
|
||||
url(r'^milestones/charter/reset/$', 'ietf.group.milestones.reset_charter_milestones', None, "group_reset_charter_milestones"),
|
||||
url(r'^workflow/$', 'ietf.group.views_edit.customize_workflow'),
|
||||
url(r'^materials/$', 'ietf.group.views.materials', None, "group_materials"),
|
||||
url(r'^materials/new/$', 'ietf.doc.views_material.choose_material_type'),
|
||||
url(r'^materials/new/(?P<doc_type>[\w-]+)/$', 'ietf.doc.views_material.edit_material', { 'action': "new" }, "group_new_material"),
|
||||
url(r'^archives/$', 'ietf.group.views.derived_archives'),
|
||||
url(r'^$', views.group_home),
|
||||
url(r'^documents/txt/$', views.group_documents_txt),
|
||||
url(r'^documents/$', views.group_documents),
|
||||
url(r'^documents/manage/$', community_views.manage_list),
|
||||
url(r'^documents/csv/$', community_views.export_to_csv),
|
||||
url(r'^documents/feed/$', community_views.feed),
|
||||
url(r'^documents/subscription/$', community_views.subscription),
|
||||
url(r'^charter/$', views.group_about),
|
||||
url(r'^about/$', views.group_about),
|
||||
url(r'^about/status/$', views.group_about_status),
|
||||
url(r'^about/status/edit/$', views.group_about_status_edit),
|
||||
url(r'^about/status/meeting/(?P<num>\d+)/$', views.group_about_status_meeting),
|
||||
url(r'^history/$',views.history),
|
||||
url(r'^email/$', views.email),
|
||||
url(r'^deps/(?P<output_type>[\w-]+)/$', views.dependencies),
|
||||
url(r'^meetings/$', views.meetings),
|
||||
url(r'^edit/$', views_edit.edit, {'action': "edit"}),
|
||||
url(r'^conclude/$', views_edit.conclude),
|
||||
url(r'^milestones/$', milestone_views.edit_milestones, {'milestone_set': "current"}, "group_edit_milestones"),
|
||||
url(r'^milestones/charter/$', milestone_views.edit_milestones, {'milestone_set': "charter"}, "group_edit_charter_milestones"),
|
||||
url(r'^milestones/charter/reset/$', milestone_views.reset_charter_milestones, None, "group_reset_charter_milestones"),
|
||||
url(r'^workflow/$', views_edit.customize_workflow),
|
||||
url(r'^materials/$', views.materials),
|
||||
url(r'^materials/new/$', material_views.choose_material_type),
|
||||
url(r'^materials/new/(?P<doc_type>[\w-]+)/$', material_views.edit_material, { 'action': "new" }, "group_new_material"),
|
||||
url(r'^archives/$', views.derived_archives),
|
||||
url(r'^photos/$', views.group_photos),
|
||||
url(r'^reviews/$', views_review.review_requests),
|
||||
url(r'^reviews/manage/(?P<assignment_status>assigned|unassigned)/$', views_review.manage_review_requests),
|
||||
|
@ -36,5 +39,5 @@ urlpatterns = [
|
|||
url(r'^reviewers/$', views_review.reviewer_overview),
|
||||
url(r'^reviewers/(?P<reviewer_email>[\w%+-.@]+)/settings/$', views_review.change_reviewer_settings),
|
||||
url(r'^secretarysettings/$', views_review.change_review_secretary_settings),
|
||||
url(r'^email-aliases/$', RedirectView.as_view(pattern_name='ietf.group.views.email',permanent=False),name='old_group_email_aliases'),
|
||||
url(r'^email-aliases/$', RedirectView.as_view(pattern_name=views.email,permanent=False),name='old_group_email_aliases'),
|
||||
]
|
||||
|
|
|
@ -1,9 +1,9 @@
|
|||
# Copyright The IETF Trust 2008, All Rights Reserved
|
||||
|
||||
from django.conf.urls import url
|
||||
from django.conf import settings
|
||||
|
||||
import views_stream
|
||||
from ietf.group import views_stream
|
||||
from ietf.utils.urls import url
|
||||
|
||||
urlpatterns = [
|
||||
url(r'^$', views_stream.streams),
|
||||
|
|
|
@ -169,9 +169,9 @@ def construct_group_menu_context(request, group, selected, group_type, others):
|
|||
if group.features.has_documents:
|
||||
entries.append(("Documents", urlreverse("ietf.group.views.group_documents", kwargs=kwargs)))
|
||||
if group.features.has_chartering_process:
|
||||
entries.append(("Charter", urlreverse("group_charter", kwargs=kwargs)))
|
||||
entries.append(("Charter", urlreverse("ietf.group.views.group_about", kwargs=kwargs)))
|
||||
else:
|
||||
entries.append(("About", urlreverse("group_about", kwargs=kwargs)))
|
||||
entries.append(("About", urlreverse("ietf.group.views.group_about", kwargs=kwargs)))
|
||||
if group.features.has_materials and get_group_materials(group).exists():
|
||||
entries.append(("Materials", urlreverse("ietf.group.views.materials", kwargs=kwargs)))
|
||||
if group.features.has_reviews:
|
||||
|
@ -220,7 +220,7 @@ def construct_group_menu_context(request, group, selected, group_type, others):
|
|||
|
||||
|
||||
if group.state_id != "conclude" and (is_admin or can_manage):
|
||||
actions.append((u"Edit group", urlreverse("group_edit", kwargs=kwargs)))
|
||||
actions.append((u"Edit group", urlreverse("ietf.group.views_edit.edit", kwargs=dict(kwargs, action="edit"))))
|
||||
|
||||
if group.features.customize_workflow and (is_admin or can_manage):
|
||||
actions.append((u"Customize workflow", urlreverse("ietf.group.views_edit.customize_workflow", kwargs=kwargs)))
|
||||
|
|
|
@ -1,8 +1,10 @@
|
|||
from django.conf.urls import url
|
||||
|
||||
from ietf.help import views
|
||||
from ietf.utils.urls import url
|
||||
|
||||
urlpatterns = [
|
||||
url(r'^state/(?P<doc>[-\w]+)/(?P<type>[-\w]+)/?$', 'ietf.help.views.state'),
|
||||
url(r'^state/(?P<doc>[-\w]+)/?$', 'ietf.help.views.state'),
|
||||
url(r'^state/?$', 'ietf.help.views.state_index'),
|
||||
url(r'^state/(?P<doc>[-\w]+)/(?P<type>[-\w]+)/?$', views.state),
|
||||
url(r'^state/(?P<doc>[-\w]+)/?$', views.state),
|
||||
url(r'^state/?$', views.state_index),
|
||||
]
|
||||
|
||||
|
|
|
@ -32,27 +32,29 @@
|
|||
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
from django.conf.urls import url
|
||||
from django.views.generic import RedirectView
|
||||
from django.conf import settings
|
||||
|
||||
from ietf.iesg import views
|
||||
from ietf.utils.urls import url
|
||||
|
||||
urlpatterns = [
|
||||
url(r'^telechat/.*$', RedirectView.as_view(url='https://www.ietf.org/iesg/minutes.html', permanent=True)),
|
||||
url(r'^ann/(?:ind|new|prev)/$', RedirectView.as_view(url="/iesg/decisions/", permanent=True)),
|
||||
url(r'^telechatdates/$', RedirectView.as_view(url='/admin/iesg/telechatdate/', permanent=True)),
|
||||
|
||||
url(r'^decisions/(?:(?P<year>[0-9]{4})/)?$', "ietf.iesg.views.review_decisions"),
|
||||
url(r'^agenda/(?:%(date)s/)?$' % settings.URL_REGEXPS, "ietf.iesg.views.agenda"),
|
||||
url(r'^agenda/(?:%(date)s/)?agenda.txt$' % settings.URL_REGEXPS, "ietf.iesg.views.agenda_txt"),
|
||||
url(r'^agenda/(?:%(date)s/)?agenda.json$' % settings.URL_REGEXPS, "ietf.iesg.views.agenda_json"),
|
||||
url(r'^agenda/(?:%(date)s/)?scribe_template.html$' % settings.URL_REGEXPS, "ietf.iesg.views.agenda_scribe_template"),
|
||||
url(r'^agenda/(?:%(date)s/)?moderator_package.html$' % settings.URL_REGEXPS, "ietf.iesg.views.agenda_moderator_package"),
|
||||
url(r'^agenda/(?:%(date)s/)?agenda_package.txt$' % settings.URL_REGEXPS, "ietf.iesg.views.agenda_package"),
|
||||
url(r'^decisions/(?:(?P<year>[0-9]{4})/)?$', views.review_decisions),
|
||||
url(r'^agenda/(?:%(date)s/)?$' % settings.URL_REGEXPS, views.agenda),
|
||||
url(r'^agenda/(?:%(date)s/)?agenda.txt$' % settings.URL_REGEXPS, views.agenda_txt),
|
||||
url(r'^agenda/(?:%(date)s/)?agenda.json$' % settings.URL_REGEXPS, views.agenda_json),
|
||||
url(r'^agenda/(?:%(date)s/)?scribe_template.html$' % settings.URL_REGEXPS, views.agenda_scribe_template),
|
||||
url(r'^agenda/(?:%(date)s/)?moderator_package.html$' % settings.URL_REGEXPS, views.agenda_moderator_package),
|
||||
url(r'^agenda/(?:%(date)s/)?agenda_package.txt$' % settings.URL_REGEXPS, views.agenda_package),
|
||||
|
||||
url(r'^agenda/documents.txt$', "ietf.iesg.views.agenda_documents_txt"),
|
||||
url(r'^agenda/documents/$', "ietf.iesg.views.agenda_documents"),
|
||||
url(r'^agenda/telechat-(?:%(date)s-)?docs.tgz' % settings.URL_REGEXPS, "ietf.iesg.views.telechat_docs_tarfile"),
|
||||
url(r'^discusses/$', "ietf.iesg.views.discusses"),
|
||||
url(r'^milestones/$', "ietf.iesg.views.milestones_needing_review"),
|
||||
url(r'^photos/$', "ietf.iesg.views.photos"),
|
||||
url(r'^agenda/documents.txt$', views.agenda_documents_txt),
|
||||
url(r'^agenda/documents/$', views.agenda_documents),
|
||||
url(r'^agenda/telechat-(?:%(date)s-)?docs.tgz' % settings.URL_REGEXPS, views.telechat_docs_tarfile),
|
||||
url(r'^discusses/$', views.discusses),
|
||||
url(r'^milestones/$', views.milestones_needing_review),
|
||||
url(r'^photos/$', views.photos),
|
||||
]
|
||||
|
|
|
@ -43,6 +43,11 @@ class PasswordForm(forms.Form):
|
|||
raise forms.ValidationError("The two password fields didn't match.")
|
||||
return password_confirmation
|
||||
|
||||
class PersonPasswordForm(forms.ModelForm, PasswordForm):
|
||||
class Meta:
|
||||
model = Person
|
||||
fields = ['name', 'ascii']
|
||||
|
||||
|
||||
def ascii_cleaner(supposedly_ascii):
|
||||
outside_printable_ascii_pattern = r'[^\x20-\x7F]'
|
||||
|
@ -173,7 +178,7 @@ from django import forms
|
|||
class ChangePasswordForm(forms.Form):
|
||||
current_password = forms.CharField(widget=forms.PasswordInput)
|
||||
|
||||
new_password = forms.CharField(widget=PasswordStrengthInput)
|
||||
new_password = forms.CharField(widget=PasswordStrengthInput(attrs={'class':'password_strength'}))
|
||||
new_password_confirmation = forms.CharField(widget=PasswordConfirmationInput)
|
||||
|
||||
def __init__(self, user, data=None):
|
||||
|
|
|
@ -1,9 +1,9 @@
|
|||
# Copyright The IETF Trust 2007, 2009, All Rights Reserved
|
||||
|
||||
from django.conf.urls import url
|
||||
from django.contrib.auth.views import login, logout
|
||||
|
||||
from ietf.ietfauth import views
|
||||
from ietf.utils.urls import url
|
||||
|
||||
urlpatterns = [
|
||||
url(r'^$', views.index),
|
||||
|
|
|
@ -10,7 +10,7 @@ from ietf.ipr.models import IprDisclosureBase
|
|||
class LatestIprDisclosuresFeed(Feed):
|
||||
feed_type = Atom1Feed
|
||||
title = "IPR Disclosures to the IETF"
|
||||
link = reverse_lazy('ipr_showlist')
|
||||
link = reverse_lazy('ietf.ipr.views.showlist')
|
||||
description = "Updates on new IPR Disclosures made to the IETF."
|
||||
language = "en"
|
||||
feed_url = "/feed/ipr/"
|
||||
|
|
|
@ -29,7 +29,7 @@ class IprDisclosureBase(models.Model):
|
|||
return self.title
|
||||
|
||||
def get_absolute_url(self):
|
||||
return settings.IDTRACKER_BASE_URL + reverse('ipr_show',kwargs={'id':self.id})
|
||||
return settings.IDTRACKER_BASE_URL + reverse('ietf.ipr.views.show',kwargs={'id':self.id})
|
||||
|
||||
def get_child(self):
|
||||
"""Returns the child instance"""
|
||||
|
|
|
@ -108,14 +108,14 @@ class IprTests(TestCase):
|
|||
def test_showlist(self):
|
||||
make_test_data()
|
||||
ipr = IprDisclosureBase.objects.get(title='Statement regarding rights')
|
||||
r = self.client.get(urlreverse("ipr_showlist"))
|
||||
r = self.client.get(urlreverse("ietf.ipr.views.showlist"))
|
||||
self.assertEqual(r.status_code, 200)
|
||||
self.assertTrue(ipr.title in unicontent(r))
|
||||
|
||||
def test_show_posted(self):
|
||||
make_test_data()
|
||||
ipr = IprDisclosureBase.objects.get(title='Statement regarding rights')
|
||||
r = self.client.get(urlreverse("ipr_show", kwargs=dict(id=ipr.pk)))
|
||||
r = self.client.get(urlreverse("ietf.ipr.views.show", kwargs=dict(id=ipr.pk)))
|
||||
self.assertEqual(r.status_code, 200)
|
||||
self.assertTrue(ipr.title in unicontent(r))
|
||||
|
||||
|
@ -123,28 +123,28 @@ class IprTests(TestCase):
|
|||
make_test_data()
|
||||
ipr = IprDisclosureBase.objects.get(title='Statement regarding rights')
|
||||
ipr.set_state('parked')
|
||||
r = self.client.get(urlreverse("ipr_show", kwargs=dict(id=ipr.pk)))
|
||||
r = self.client.get(urlreverse("ietf.ipr.views.show", kwargs=dict(id=ipr.pk)))
|
||||
self.assertEqual(r.status_code, 404)
|
||||
|
||||
def test_show_pending(self):
|
||||
make_test_data()
|
||||
ipr = IprDisclosureBase.objects.get(title='Statement regarding rights')
|
||||
ipr.set_state('pending')
|
||||
r = self.client.get(urlreverse("ipr_show", kwargs=dict(id=ipr.pk)))
|
||||
r = self.client.get(urlreverse("ietf.ipr.views.show", kwargs=dict(id=ipr.pk)))
|
||||
self.assertEqual(r.status_code, 404)
|
||||
|
||||
def test_show_rejected(self):
|
||||
make_test_data()
|
||||
ipr = IprDisclosureBase.objects.get(title='Statement regarding rights')
|
||||
ipr.set_state('rejected')
|
||||
r = self.client.get(urlreverse("ipr_show", kwargs=dict(id=ipr.pk)))
|
||||
r = self.client.get(urlreverse("ietf.ipr.views.show", kwargs=dict(id=ipr.pk)))
|
||||
self.assertEqual(r.status_code, 404)
|
||||
|
||||
def test_show_removed(self):
|
||||
make_test_data()
|
||||
ipr = IprDisclosureBase.objects.get(title='Statement regarding rights')
|
||||
ipr.set_state('removed')
|
||||
r = self.client.get(urlreverse("ipr_show", kwargs=dict(id=ipr.pk)))
|
||||
r = self.client.get(urlreverse("ietf.ipr.views.show", kwargs=dict(id=ipr.pk)))
|
||||
self.assertEqual(r.status_code, 200)
|
||||
self.assertTrue('This IPR disclosure was removed' in unicontent(r))
|
||||
|
||||
|
@ -176,7 +176,7 @@ class IprTests(TestCase):
|
|||
draft = make_test_data()
|
||||
ipr = IprDisclosureBase.objects.get(title="Statement regarding rights").get_child()
|
||||
|
||||
url = urlreverse("ipr_search")
|
||||
url = urlreverse("ietf.ipr.views.search")
|
||||
|
||||
r = self.client.get(url)
|
||||
self.assertEqual(r.status_code, 200)
|
||||
|
|
|
@ -1,28 +1,30 @@
|
|||
# Copyright The IETF Trust 2007, All Rights Reserved
|
||||
|
||||
from django.conf.urls import url
|
||||
from django.views.generic import RedirectView
|
||||
from django.core.urlresolvers import reverse_lazy
|
||||
|
||||
from ietf.ipr import views
|
||||
from ietf.utils.urls import url
|
||||
|
||||
urlpatterns = [
|
||||
url(r'^$', 'ietf.ipr.views.showlist', name='ipr_showlist'),
|
||||
url(r'^about/$', 'ietf.ipr.views.about'),
|
||||
url(r'^$', views.showlist),
|
||||
url(r'^about/$', views.about),
|
||||
url(r'^admin/$', RedirectView.as_view(url=reverse_lazy('ipr_admin',kwargs={'state':'pending'}), permanent=True),name="ipr_admin_main"),
|
||||
url(r'^admin/(?P<state>pending|removed|parked)/$', 'ietf.ipr.views.admin', name='ipr_admin'),
|
||||
url(r'^ajax/search/$', 'ietf.ipr.views.ajax_search', name='ipr_ajax_search'),
|
||||
url(r'^by-draft/$', 'ietf.ipr.views.by_draft_txt'),
|
||||
url(r'^by-draft-recursive/$', 'ietf.ipr.views.by_draft_recursive_txt'),
|
||||
url(r'^(?P<id>\d+)/$', 'ietf.ipr.views.show', name='ipr_show'),
|
||||
url(r'^(?P<id>\d+)/addcomment/$', 'ietf.ipr.views.add_comment', name='ipr_add_comment'),
|
||||
url(r'^(?P<id>\d+)/addemail/$', 'ietf.ipr.views.add_email', name='ipr_add_email'),
|
||||
url(r'^(?P<id>\d+)/edit/$', 'ietf.ipr.views.edit', name='ipr_edit'),
|
||||
url(r'^(?P<id>\d+)/email/$', 'ietf.ipr.views.email', name='ipr_email'),
|
||||
url(r'^(?P<id>\d+)/history/$', 'ietf.ipr.views.history', name='ipr_history'),
|
||||
url(r'^(?P<id>\d+)/notify/(?P<type>update|posted)/$', 'ietf.ipr.views.notify', name='ipr_notify'),
|
||||
url(r'^(?P<id>\d+)/post/$', 'ietf.ipr.views.post', name='ipr_post'),
|
||||
url(r'^(?P<id>\d+)/state/$', 'ietf.ipr.views.state', name='ipr_state'),
|
||||
url(r'^update/$', RedirectView.as_view(url=reverse_lazy('ipr_showlist'), permanent=True)),
|
||||
url(r'^update/(?P<id>\d+)/$', 'ietf.ipr.views.update', name='ipr_update'),
|
||||
url(r'^new-(?P<type>(specific|generic|third-party))/$', 'ietf.ipr.views.new', name='ipr_new'),
|
||||
url(r'^search/$', 'ietf.ipr.views.search', name="ipr_search"),
|
||||
url(r'^admin/(?P<state>pending|removed|parked)/$', views.admin, name='ipr_admin'),
|
||||
url(r'^ajax/search/$', views.ajax_search, name='ipr_ajax_search'),
|
||||
url(r'^by-draft/$', views.by_draft_txt),
|
||||
url(r'^by-draft-recursive/$', views.by_draft_recursive_txt),
|
||||
url(r'^(?P<id>\d+)/$', views.show),
|
||||
url(r'^(?P<id>\d+)/addcomment/$', views.add_comment, name='ipr_add_comment'),
|
||||
url(r'^(?P<id>\d+)/addemail/$', views.add_email, name='ipr_add_email'),
|
||||
url(r'^(?P<id>\d+)/edit/$', views.edit, name='ipr_edit'),
|
||||
url(r'^(?P<id>\d+)/email/$', views.email, name='ipr_email'),
|
||||
url(r'^(?P<id>\d+)/history/$', views.history, name='ipr_history'),
|
||||
url(r'^(?P<id>\d+)/notify/(?P<type>update|posted)/$', views.notify, name='ipr_notify'),
|
||||
url(r'^(?P<id>\d+)/post/$', views.post, name='ipr_post'),
|
||||
url(r'^(?P<id>\d+)/state/$', views.state, name='ipr_state'),
|
||||
url(r'^update/$', RedirectView.as_view(url=reverse_lazy('ietf.ipr.views.showlist'), permanent=True)),
|
||||
url(r'^update/(?P<id>\d+)/$', views.update),
|
||||
url(r'^new-(?P<type>(specific|generic|third-party))/$', views.new),
|
||||
url(r'^search/$', views.search),
|
||||
]
|
||||
|
|
|
@ -296,7 +296,7 @@ def edit(request, id, updates=None):
|
|||
desc="Changed disclosure metadata")
|
||||
|
||||
messages.success(request,'Disclosure modified')
|
||||
return redirect("ipr_show", id=ipr.id)
|
||||
return redirect("ietf.ipr.views.show", id=ipr.id)
|
||||
|
||||
else:
|
||||
if ipr.updates:
|
||||
|
@ -320,7 +320,7 @@ def email(request, id):
|
|||
if request.method == 'POST':
|
||||
button_text = request.POST.get('submit', '')
|
||||
if button_text == 'Cancel':
|
||||
return redirect("ipr_show", id=ipr.id)
|
||||
return redirect("ietf.ipr.views.show", id=ipr.id)
|
||||
|
||||
form = MessageModelForm(request.POST)
|
||||
if form.is_valid():
|
||||
|
@ -349,7 +349,7 @@ def email(request, id):
|
|||
send_mail_message(None,msg)
|
||||
|
||||
messages.success(request, 'Email sent.')
|
||||
return redirect('ipr_show', id=ipr.id)
|
||||
return redirect('ietf.ipr.views.show', id=ipr.id)
|
||||
|
||||
else:
|
||||
reply_to = get_reply_to()
|
||||
|
@ -455,7 +455,9 @@ def new(request, type, updates=None):
|
|||
valid_formsets = True
|
||||
|
||||
if form.is_valid() and valid_formsets:
|
||||
updates = form.cleaned_data.get('updates')
|
||||
if 'updates' in form.cleaned_data:
|
||||
updates = form.cleaned_data['updates']
|
||||
del form.cleaned_data['updates']
|
||||
disclosure = form.save(commit=False)
|
||||
disclosure.by = person
|
||||
disclosure.state = IprDisclosureStateName.objects.get(slug='pending')
|
||||
|
@ -528,7 +530,7 @@ def notify(request, id, type):
|
|||
message = message,
|
||||
)
|
||||
messages.success(request,'Notifications sent')
|
||||
return redirect("ipr_show", id=ipr.id)
|
||||
return redirect("ietf.ipr.views.show", id=ipr.id)
|
||||
|
||||
else:
|
||||
if type == 'update':
|
||||
|
@ -700,7 +702,7 @@ def get_details_tabs(ipr, selected):
|
|||
return [
|
||||
t + (t[0].lower() == selected.lower(),)
|
||||
for t in [
|
||||
('Disclosure', urlreverse('ipr_show', kwargs={ 'id': ipr.pk })),
|
||||
('Disclosure', urlreverse('ietf.ipr.views.show', kwargs={ 'id': ipr.pk })),
|
||||
('History', urlreverse('ipr_history', kwargs={ 'id': ipr.pk }))
|
||||
]]
|
||||
|
||||
|
@ -770,7 +772,7 @@ def state(request, id):
|
|||
desc=form.cleaned_data['comment']
|
||||
)
|
||||
messages.success(request, 'State Changed')
|
||||
return redirect("ipr_show", id=ipr.id)
|
||||
return redirect("ietf.ipr.views.show", id=ipr.id)
|
||||
else:
|
||||
form = StateForm(initial={'state':ipr.state.pk,'private':True})
|
||||
|
||||
|
|
|
@ -1,8 +1,10 @@
|
|||
# Copyright The IETF Trust 2007, All Rights Reserved
|
||||
|
||||
from django.conf.urls import url
|
||||
from django.views.generic import RedirectView, TemplateView
|
||||
|
||||
from ietf.liaisons import views
|
||||
from ietf.utils.urls import url
|
||||
|
||||
urlpatterns = [
|
||||
url(r'^help/$', TemplateView.as_view(template_name='liaisons/help.html')),
|
||||
url(r'^help/fields/$', TemplateView.as_view(template_name='liaisons/field_help.html'), name='liaisons_field_help'),
|
||||
|
@ -13,26 +15,26 @@ urlpatterns = [
|
|||
|
||||
# AJAX views
|
||||
urlpatterns += [
|
||||
url(r'^ajax/get_info/$', 'ietf.liaisons.views.ajax_get_liaison_info'),
|
||||
url(r'^ajax/select2search/$', 'ietf.liaisons.views.ajax_select2_search_liaison_statements'),
|
||||
url(r'^ajax/get_info/$', views.ajax_get_liaison_info),
|
||||
url(r'^ajax/select2search/$', views.ajax_select2_search_liaison_statements),
|
||||
]
|
||||
|
||||
# Views
|
||||
urlpatterns += [
|
||||
url(r'^$', 'ietf.liaisons.views.liaison_list'),
|
||||
url(r'^(?P<state>(posted|pending|dead))/', 'ietf.liaisons.views.liaison_list'),
|
||||
url(r'^(?P<object_id>\d+)/$', 'ietf.liaisons.views.liaison_detail'),
|
||||
url(r'^(?P<object_id>\d+)/addcomment/$', 'ietf.liaisons.views.add_comment'),
|
||||
url(r'^(?P<object_id>\d+)/edit/$', 'ietf.liaisons.views.liaison_edit'),
|
||||
url(r'^(?P<object_id>\d+)/edit-attachment/(?P<doc_id>[A-Za-z0-9._+-]+)$', 'ietf.liaisons.views.liaison_edit_attachment'),
|
||||
url(r'^(?P<object_id>\d+)/delete-attachment/(?P<attach_id>[A-Za-z0-9._+-]+)$', 'ietf.liaisons.views.liaison_delete_attachment'),
|
||||
url(r'^(?P<object_id>\d+)/history/$', 'ietf.liaisons.views.liaison_history'),
|
||||
url(r'^(?P<object_id>\d+)/reply/$', 'ietf.liaisons.views.liaison_reply'),
|
||||
url(r'^(?P<object_id>\d+)/resend/$', 'ietf.liaisons.views.liaison_resend'),
|
||||
url(r'^add/(?P<type>(incoming|outgoing))/$', 'ietf.liaisons.views.liaison_add'),
|
||||
url(r'^$', views.liaison_list),
|
||||
url(r'^(?P<state>(posted|pending|dead))/', views.liaison_list),
|
||||
url(r'^(?P<object_id>\d+)/$', views.liaison_detail),
|
||||
url(r'^(?P<object_id>\d+)/addcomment/$', views.add_comment),
|
||||
url(r'^(?P<object_id>\d+)/edit/$', views.liaison_edit),
|
||||
url(r'^(?P<object_id>\d+)/edit-attachment/(?P<doc_id>[A-Za-z0-9._+-]+)$', views.liaison_edit_attachment),
|
||||
url(r'^(?P<object_id>\d+)/delete-attachment/(?P<attach_id>[A-Za-z0-9._+-]+)$', views.liaison_delete_attachment),
|
||||
url(r'^(?P<object_id>\d+)/history/$', views.liaison_history),
|
||||
url(r'^(?P<object_id>\d+)/reply/$', views.liaison_reply),
|
||||
url(r'^(?P<object_id>\d+)/resend/$', views.liaison_resend),
|
||||
url(r'^add/(?P<type>(incoming|outgoing))/$', views.liaison_add),
|
||||
|
||||
# Redirects for backwards compatibility
|
||||
url(r'^add/$', 'ietf.liaisons.views.redirect_add'),
|
||||
url(r'^for_approval/$', 'ietf.liaisons.views.redirect_for_approval'),
|
||||
url(r'^for_approval/(?P<object_id>\d+)/$', 'ietf.liaisons.views.redirect_for_approval'),
|
||||
url(r'^add/$', views.redirect_add),
|
||||
url(r'^for_approval/$', views.redirect_for_approval),
|
||||
url(r'^for_approval/(?P<object_id>\d+)/$', views.redirect_for_approval),
|
||||
]
|
|
@ -1,10 +1,12 @@
|
|||
# Copyright The IETF Trust 2007, All Rights Reserved
|
||||
|
||||
from django.conf.urls import url
|
||||
from django.views.generic import RedirectView
|
||||
|
||||
from ietf.mailinglists import views
|
||||
from ietf.utils.urls import url
|
||||
|
||||
urlpatterns = [
|
||||
url(r'^wg/$', 'ietf.mailinglists.views.groups'),
|
||||
url(r'^wg/$', views.groups),
|
||||
url(r'^nonwg/$', RedirectView.as_view(url='https://www.ietf.org/list/nonwg.html', permanent=True)),
|
||||
url(r'^nonwg/update/$', RedirectView.as_view(url='https://www.ietf.org/list/nonwg.html', permanent=True)),
|
||||
url(r'^request/$', RedirectView.as_view(url='https://www.ietf.org/list/request.html', permanent=True)),
|
||||
|
|
|
@ -1,11 +1,13 @@
|
|||
from django.conf.urls import url
|
||||
from django.views.generic import RedirectView
|
||||
from django.core.urlresolvers import reverse_lazy
|
||||
|
||||
from ietf.mailtrigger import views
|
||||
from ietf.utils.urls import url
|
||||
|
||||
urlpatterns = [
|
||||
url(r'^$', RedirectView.as_view(url=reverse_lazy('mailtrigger_show_triggers'), permanent=True)),
|
||||
url(r'^name/$', 'ietf.mailtrigger.views.show_triggers', name='mailtrigger_show_triggers' ),
|
||||
url(r'^name/(?P<mailtrigger_slug>[-\w]+)/$', 'ietf.mailtrigger.views.show_triggers' ),
|
||||
url(r'^recipient/$', 'ietf.mailtrigger.views.show_recipients' ),
|
||||
url(r'^recipient/(?P<recipient_slug>[-\w]+)/$', 'ietf.mailtrigger.views.show_recipients' ),
|
||||
url(r'^$', RedirectView.as_view(url=reverse_lazy('ietf.mailtrigger.views.show_triggers'), permanent=True)),
|
||||
url(r'^name/$', views.show_triggers),
|
||||
url(r'^name/(?P<mailtrigger_slug>[-\w]+)/$', views.show_triggers ),
|
||||
url(r'^recipient/$', views.show_recipients ),
|
||||
url(r'^recipient/(?P<recipient_slug>[-\w]+)/$', views.show_recipients ),
|
||||
]
|
||||
|
|
|
@ -3,8 +3,6 @@ from __future__ import unicode_literals
|
|||
|
||||
from django.db import models, migrations
|
||||
import datetime
|
||||
import ietf.meeting.timedeltafield
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
|
@ -112,7 +110,7 @@ class Migration(migrations.Migration):
|
|||
('attendees', models.IntegerField(null=True, blank=True)),
|
||||
('agenda_note', models.CharField(max_length=255, blank=True)),
|
||||
('requested', models.DateTimeField(default=datetime.datetime.now)),
|
||||
('requested_duration', ietf.meeting.timedeltafield.TimedeltaField(default=0)),
|
||||
('requested_duration', models.IntegerField(default=0)),
|
||||
('comments', models.TextField(blank=True)),
|
||||
('scheduled', models.DateTimeField(null=True, blank=True)),
|
||||
('modified', models.DateTimeField(default=datetime.datetime.now)),
|
||||
|
@ -141,7 +139,7 @@ class Migration(migrations.Migration):
|
|||
('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
|
||||
('name', models.CharField(max_length=255)),
|
||||
('time', models.DateTimeField()),
|
||||
('duration', ietf.meeting.timedeltafield.TimedeltaField()),
|
||||
('duration', models.IntegerField()),
|
||||
('show_location', models.BooleanField(default=True, help_text=b'Show location in agenda')),
|
||||
('modified', models.DateTimeField(default=datetime.datetime.now)),
|
||||
('location', models.ForeignKey(blank=True, to='meeting.Room', null=True)),
|
||||
|
|
|
@ -2,8 +2,6 @@
|
|||
from __future__ import unicode_literals
|
||||
|
||||
from django.db import models, migrations
|
||||
import timedelta.fields
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
|
@ -27,13 +25,13 @@ class Migration(migrations.Migration):
|
|||
migrations.AddField(
|
||||
model_name='meeting',
|
||||
name='idsubmit_cutoff_time_utc',
|
||||
field=timedelta.fields.TimedeltaField(default=86399.0, help_text=b'The time of day (UTC) after which submission will be closed. Use for example 23 hours, 59 minutes, 59 seconds.'),
|
||||
field=models.CharField(max_length=20, default='86399.0', help_text=b'The time of day (UTC) after which submission will be closed. Use for example 23 hours, 59 minutes, 59 seconds.'),
|
||||
preserve_default=True,
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='meeting',
|
||||
name='idsubmit_cutoff_warning_days',
|
||||
field=timedelta.fields.TimedeltaField(default=1814400.0, help_text=b'How long before the 00 cutoff to start showing cutoff warnings. Use for example 21 days or 3 weeks.'),
|
||||
field=models.CharField(max_length=20, default='1814400.0', help_text=b'How long before the 00 cutoff to start showing cutoff warnings. Use for example 21 days or 3 weeks.'),
|
||||
preserve_default=True,
|
||||
),
|
||||
]
|
||||
|
|
|
@ -2,8 +2,6 @@
|
|||
from __future__ import unicode_literals
|
||||
|
||||
from django.db import models, migrations
|
||||
import timedelta.fields
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
|
@ -27,13 +25,13 @@ class Migration(migrations.Migration):
|
|||
migrations.AlterField(
|
||||
model_name='meeting',
|
||||
name='idsubmit_cutoff_time_utc',
|
||||
field=timedelta.fields.TimedeltaField(default=86399.0, help_text=b'The time of day (UTC) after which submission will be closed. Use for example 23 hours, 59 minutes, 59 seconds.', blank=True),
|
||||
field=models.CharField(max_length=20, default='86399.0', help_text=b'The time of day (UTC) after which submission will be closed. Use for example 23 hours, 59 minutes, 59 seconds.', blank=True),
|
||||
preserve_default=True,
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='meeting',
|
||||
name='idsubmit_cutoff_warning_days',
|
||||
field=timedelta.fields.TimedeltaField(default=1814400.0, help_text=b'How long before the 00 cutoff to start showing cutoff warnings. Use for example 21 days or 3 weeks.', blank=True),
|
||||
field=models.CharField(max_length=20, default='1814400.0', help_text=b'How long before the 00 cutoff to start showing cutoff warnings. Use for example 21 days or 3 weeks.', blank=True),
|
||||
preserve_default=True,
|
||||
),
|
||||
]
|
||||
|
|
|
@ -5,6 +5,7 @@ import time
|
|||
from pyquery import PyQuery
|
||||
from unittest import skipIf
|
||||
|
||||
import django.contrib.auth.views
|
||||
from django.contrib.staticfiles.testing import StaticLiveServerTestCase
|
||||
from django.core.urlresolvers import reverse as urlreverse
|
||||
#from django.test.utils import override_settings
|
||||
|
@ -126,7 +127,7 @@ class SlideReorderTests(StaticLiveServerTestCase):
|
|||
return '%s%s'%(self.live_server_url,urlreverse(*args,**kwargs))
|
||||
|
||||
def secr_login(self):
|
||||
url = '%s%s'%(self.live_server_url, urlreverse('django.contrib.auth.views.login'))
|
||||
url = '%s%s'%(self.live_server_url, urlreverse(django.contrib.auth.views.login))
|
||||
self.driver.get(url)
|
||||
self.driver.find_element_by_name('username').send_keys('secretary')
|
||||
self.driver.find_element_by_name('password').send_keys('secretary+password')
|
||||
|
|
|
@ -1,188 +0,0 @@
|
|||
# -*- coding: iso-8859-1 -*-
|
||||
# $Id: TimedeltaField.py 1787 2011-04-20 07:09:57Z tguettler $
|
||||
# $HeadURL: svn+ssh://svnserver/svn/djangotools/trunk/dbfields/TimedeltaField.py $
|
||||
|
||||
# from http://djangosnippets.org/snippets/1060/ with some fixes
|
||||
|
||||
# Python
|
||||
import datetime
|
||||
|
||||
# Django
|
||||
import django
|
||||
from django import forms
|
||||
from django.db import models
|
||||
from django.utils.safestring import mark_safe
|
||||
from django.utils.translation import ugettext_lazy as _
|
||||
|
||||
|
||||
SECS_PER_DAY=3600*24
|
||||
|
||||
class TimedeltaField(models.Field):
|
||||
u'''
|
||||
Store Python's datetime.timedelta in an integer column.
|
||||
Most database systems only support 32 bit integers by default.
|
||||
'''
|
||||
__metaclass__ = models.SubfieldBase
|
||||
empty_strings_allowed = False
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
super(TimedeltaField, self).__init__(*args, **kwargs)
|
||||
|
||||
def to_python(self, value):
|
||||
if (value is None) or isinstance(value, datetime.timedelta):
|
||||
return value
|
||||
|
||||
try:
|
||||
# else try to convert to int (e.g. from string)
|
||||
value = int(value)
|
||||
except (TypeError, ValueError):
|
||||
raise django.core.exceptions.ValidationError(
|
||||
_("This value must be an integer or a datetime.timedelta."))
|
||||
|
||||
return datetime.timedelta(seconds=value)
|
||||
|
||||
def get_internal_type(self):
|
||||
return 'IntegerField'
|
||||
|
||||
def get_db_prep_lookup(self, lookup_type, value, connection=None, prepared=False):
|
||||
raise NotImplementedError() # SQL WHERE
|
||||
|
||||
def get_db_prep_save(self, value, connection=None, prepared=False):
|
||||
if (value is None) or isinstance(value, int):
|
||||
return value
|
||||
return SECS_PER_DAY*value.days+value.seconds
|
||||
|
||||
def formfield(self, *args, **kwargs):
|
||||
defaults={'form_class': TimedeltaFormField}
|
||||
defaults.update(kwargs)
|
||||
return super(TimedeltaField, self).formfield(*args, **defaults)
|
||||
|
||||
def value_to_string(self, obj):
|
||||
value = self._get_val_from_obj(obj)
|
||||
return self.get_db_prep_value(value) # pylint: disable=no-value-for-parameter
|
||||
|
||||
|
||||
class TimedeltaFormField(forms.Field):
|
||||
default_error_messages = {
|
||||
'invalid': _(u'Enter a whole number.'),
|
||||
}
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
defaults={'widget': TimedeltaWidget}
|
||||
defaults.update(kwargs)
|
||||
super(TimedeltaFormField, self).__init__(*args, **defaults)
|
||||
|
||||
def clean(self, value):
|
||||
# value comes from Timedelta.Widget.value_from_datadict(): tuple of strings
|
||||
super(TimedeltaFormField, self).clean(value)
|
||||
assert len(value)==len(self.widget.inputs), (value, self.widget.inputs)
|
||||
i=0
|
||||
for value, multiply in zip(value, self.widget.multiply):
|
||||
try:
|
||||
i+=int(value)*multiply
|
||||
except (ValueError, TypeError):
|
||||
raise forms.ValidationError(self.error_messages['invalid'])
|
||||
return i
|
||||
|
||||
class TimedeltaWidget(forms.Widget):
|
||||
INPUTS=['days', 'hours', 'minutes', 'seconds']
|
||||
MULTIPLY=[60*60*24, 60*60, 60, 1]
|
||||
def __init__(self, attrs=None):
|
||||
self.widgets=[]
|
||||
if not attrs:
|
||||
attrs={}
|
||||
inputs=attrs.get('inputs', self.INPUTS)
|
||||
multiply=[]
|
||||
for input in inputs:
|
||||
assert input in self.INPUTS, (input, self.INPUT)
|
||||
self.widgets.append(forms.TextInput(attrs=attrs))
|
||||
multiply.append(self.MULTIPLY[self.INPUTS.index(input)])
|
||||
self.inputs=inputs
|
||||
self.multiply=multiply
|
||||
super(TimedeltaWidget, self).__init__(attrs)
|
||||
|
||||
def render(self, name, value, attrs):
|
||||
if value is None:
|
||||
values=[0 for i in self.inputs]
|
||||
elif isinstance(value, datetime.timedelta):
|
||||
values=split_seconds(value.days*SECS_PER_DAY+value.seconds, self.inputs, self.multiply)
|
||||
elif isinstance(value, int):
|
||||
# initial data from model
|
||||
values=split_seconds(value, self.inputs, self.multiply)
|
||||
else:
|
||||
assert isinstance(value, tuple), (value, type(value))
|
||||
assert len(value)==len(self.inputs), (value, self.inputs)
|
||||
values=value
|
||||
id=attrs.pop('id')
|
||||
assert not attrs, attrs
|
||||
rendered=[]
|
||||
for input, widget, val in zip(self.inputs, self.widgets, values):
|
||||
rendered.append(u'%s %s' % (_(input), widget.render('%s_%s' % (name, input), val)))
|
||||
return mark_safe('<div id="%s">%s</div>' % (id, ' '.join(rendered)))
|
||||
|
||||
def value_from_datadict(self, data, files, name):
|
||||
# Don't throw ValidationError here, just return a tuple of strings.
|
||||
ret=[]
|
||||
for input, multi in zip(self.inputs, self.multiply):
|
||||
ret.append(data.get('%s_%s' % (name, input), 0))
|
||||
return tuple(ret)
|
||||
|
||||
def _has_changed(self, initial_value, data_value):
|
||||
# data_value comes from value_from_datadict(): A tuple of strings.
|
||||
if initial_value is None:
|
||||
return bool(set(data_value)!=set([u'0']))
|
||||
assert isinstance(initial_value, datetime.timedelta), initial_value
|
||||
initial=tuple([unicode(i) for i in split_seconds(initial_value.days*SECS_PER_DAY+initial_value.seconds, self.inputs, self.multiply)])
|
||||
assert len(initial)==len(data_value), (initial, data_value)
|
||||
return bool(initial!=data_value)
|
||||
|
||||
def main():
|
||||
assert split_seconds(1000000)==[11, 13, 46, 40]
|
||||
|
||||
field=TimedeltaField()
|
||||
|
||||
td=datetime.timedelta(days=10, seconds=11)
|
||||
s=field.get_db_prep_save(td)
|
||||
assert isinstance(s, int), (s, type(s))
|
||||
td_again=field.to_python(s)
|
||||
assert td==td_again, (td, td_again)
|
||||
|
||||
td=datetime.timedelta(seconds=11)
|
||||
s=field.get_db_prep_save(td)
|
||||
td_again=field.to_python(s)
|
||||
assert td==td_again, (td, td_again)
|
||||
|
||||
field=TimedeltaFormField()
|
||||
assert field.widget._has_changed(datetime.timedelta(seconds=0), (u'0', u'0', u'0', u'0',)) is False
|
||||
assert field.widget._has_changed(None, (u'0', u'0', u'0', u'0',)) is False
|
||||
assert field.widget._has_changed(None, (u'0', u'0')) is False
|
||||
assert field.widget._has_changed(datetime.timedelta(days=1, hours=2, minutes=3, seconds=4), (u'1', u'2', u'3', u'4',)) is False
|
||||
|
||||
for secs, soll, kwargs in [
|
||||
(100, [0, 0, 1, 40], dict()),
|
||||
(100, ['0days', '0hours', '1minutes', '40seconds'], dict(with_unit=True)),
|
||||
(100, ['1minutes', '40seconds'], dict(with_unit=True, remove_leading_zeros=True)),
|
||||
(100000, ['1days', '3hours'], dict(inputs=['days', 'hours'], with_unit=True, remove_leading_zeros=True)),
|
||||
]:
|
||||
ist=split_seconds(secs, **kwargs)
|
||||
if ist!=soll:
|
||||
raise Exception('geg=%s soll=%s ist=%s kwargs=%s' % (secs, soll, ist, kwargs))
|
||||
|
||||
print "unittest OK"
|
||||
|
||||
def split_seconds(secs, inputs=TimedeltaWidget.INPUTS, multiply=TimedeltaWidget.MULTIPLY,
|
||||
with_unit=False, remove_leading_zeros=False):
|
||||
ret=[]
|
||||
assert len(inputs)<=len(multiply), (inputs, multiply)
|
||||
for input, multi in zip(inputs, multiply):
|
||||
count, secs = divmod(secs, multi)
|
||||
if remove_leading_zeros and not ret and not count:
|
||||
continue
|
||||
if with_unit:
|
||||
ret.append('%s%s' % (count, input))
|
||||
else:
|
||||
ret.append(count)
|
||||
return ret
|
||||
|
||||
if __name__=='__main__':
|
||||
main()
|
|
@ -1,11 +1,11 @@
|
|||
# Copyright The IETF Trust 2007, All Rights Reserved
|
||||
|
||||
from django.conf.urls import url, include
|
||||
from django.conf.urls import include
|
||||
from django.views.generic import RedirectView
|
||||
from django.conf import settings
|
||||
|
||||
from ietf.meeting import views
|
||||
from ietf.meeting import ajax
|
||||
from ietf.meeting import views, ajax
|
||||
from ietf.utils.urls import url
|
||||
|
||||
safe_for_all_meeting_types = [
|
||||
url(r'^session/(?P<acronym>[-a-z0-9]+)/?$', views.session_details),
|
||||
|
@ -38,8 +38,8 @@ type_ietf_only_patterns = [
|
|||
url(r'^agenda/by-type$', views.agenda_by_type),
|
||||
url(r'^agenda/by-type/(?P<type>[a-z]+)$', views.agenda_by_type),
|
||||
url(r'^agenda/by-type/(?P<type>[a-z]+)/ics$', views.agenda_by_type_ics),
|
||||
url(r'^agendas/list$', views.list_agendas, name='meeting_list_agendas'),
|
||||
url(r'^agendas/edit$', RedirectView.as_view(pattern_name='meeting_list_agendas', permanent=True)),
|
||||
url(r'^agendas/list$', views.list_agendas),
|
||||
url(r'^agendas/edit$', RedirectView.as_view(pattern_name='ietf.meeting.views.list_agendas', permanent=True)),
|
||||
url(r'^timeslots/edit$', views.edit_timeslots),
|
||||
url(r'^rooms$', ajax.timeslot_roomsurl),
|
||||
url(r'^room/(?P<roomid>\d+).json$', ajax.timeslot_roomurl),
|
||||
|
|
|
@ -1757,11 +1757,11 @@ def interim_request(request):
|
|||
meeting = form.save(date=get_earliest_session_date(formset))
|
||||
|
||||
# need to use curry here to pass custom variable to form init
|
||||
SessionFormset.form = staticmethod(curry(
|
||||
InterimSessionModelForm,
|
||||
SessionFormset.form.__init__ = curry(
|
||||
InterimSessionModelForm.__init__,
|
||||
user=request.user,
|
||||
group=group,
|
||||
is_approved_or_virtual=(is_approved or is_virtual)))
|
||||
is_approved_or_virtual=(is_approved or is_virtual))
|
||||
formset = SessionFormset(instance=meeting, data=request.POST)
|
||||
formset.is_valid()
|
||||
formset.save()
|
||||
|
@ -1777,11 +1777,11 @@ def interim_request(request):
|
|||
# subsequently dealt with individually
|
||||
elif meeting_type == 'series':
|
||||
series = []
|
||||
SessionFormset.form = staticmethod(curry(
|
||||
InterimSessionModelForm,
|
||||
SessionFormset.form.__init__ = curry(
|
||||
InterimSessionModelForm.__init__,
|
||||
user=request.user,
|
||||
group=group,
|
||||
is_approved_or_virtual=(is_approved or is_virtual)))
|
||||
is_approved_or_virtual=(is_approved or is_virtual))
|
||||
formset = SessionFormset(instance=Meeting(), data=request.POST)
|
||||
formset.is_valid() # re-validate
|
||||
for session_form in formset.forms:
|
||||
|
@ -1896,13 +1896,15 @@ def interim_request_edit(request, number):
|
|||
data=request.POST)
|
||||
group = Group.objects.get(pk=form.data['group'])
|
||||
is_approved = is_meeting_approved(meeting)
|
||||
SessionFormset.form = staticmethod(curry(
|
||||
InterimSessionModelForm,
|
||||
|
||||
SessionFormset.form.__init__ = curry(
|
||||
InterimSessionModelForm.__init__,
|
||||
user=request.user,
|
||||
group=group,
|
||||
is_approved_or_virtual=is_approved))
|
||||
formset = SessionFormset(instance=meeting,
|
||||
data=request.POST)
|
||||
is_approved_or_virtual=is_approved)
|
||||
|
||||
formset = SessionFormset(instance=meeting, data=request.POST)
|
||||
|
||||
if form.is_valid() and formset.is_valid():
|
||||
meeting = form.save(date=get_earliest_session_date(formset))
|
||||
formset.save()
|
||||
|
|
|
@ -26,7 +26,7 @@ class MessageTests(TestCase):
|
|||
)
|
||||
msg.related_groups.add(nomcom)
|
||||
|
||||
r = self.client.get(urlreverse("nomcom_announcement", kwargs=dict(message_id=msg.id)))
|
||||
r = self.client.get(urlreverse("ietf.message.views.message", kwargs=dict(message_id=msg.id)))
|
||||
self.assertEqual(r.status_code, 200)
|
||||
self.assertTrue(msg.subject in unicontent(r))
|
||||
self.assertTrue(msg.to in unicontent(r))
|
||||
|
|
|
@ -9,14 +9,21 @@ import re
|
|||
import smtplib
|
||||
import unicodedata
|
||||
|
||||
class SQLLogMiddleware(object):
|
||||
def process_response(self, request, response):
|
||||
|
||||
def sql_log_middleware(get_response):
|
||||
def sql_log(request):
|
||||
response = get_response(request)
|
||||
for q in connection.queries:
|
||||
if re.match('(update|insert)', q['sql'], re.IGNORECASE):
|
||||
log(q['sql'])
|
||||
return response
|
||||
return sql_log
|
||||
|
||||
class SMTPExceptionMiddleware(object):
|
||||
def __init__(self, get_response):
|
||||
self.get_response = get_response
|
||||
def __call__(self, request):
|
||||
return self.get_response(request)
|
||||
def process_exception(self, request, exception):
|
||||
if isinstance(exception, smtplib.SMTPException):
|
||||
(extype, value, tb) = log_smtp_exception(exception)
|
||||
|
@ -24,14 +31,16 @@ class SMTPExceptionMiddleware(object):
|
|||
{'exception': extype, 'args': value, 'traceback': "".join(tb)} )
|
||||
return None
|
||||
|
||||
class RedirectTrailingPeriod(object):
|
||||
def process_response(self, request, response):
|
||||
def redirect_trailing_period_middleware(get_response):
|
||||
def redirect_trailing_period(request):
|
||||
response = get_response(request)
|
||||
if response.status_code == 404 and request.path.endswith("."):
|
||||
return HttpResponsePermanentRedirect(request.path.rstrip("."))
|
||||
return response
|
||||
return redirect_trailing_period
|
||||
|
||||
class UnicodeNfkcNormalization(object):
|
||||
def process_request(self, request):
|
||||
def unicode_nfkc_normalization_middleware(get_response):
|
||||
def unicode_nfkc_normalization(request):
|
||||
"""Do Unicode NFKC normalization to turn ligatures into individual characters.
|
||||
This was prompted by somebody actually requesting an url for /wg/ipfix/charter
|
||||
where the 'fi' was composed of an \ufb01 ligature...
|
||||
|
@ -41,4 +50,7 @@ class UnicodeNfkcNormalization(object):
|
|||
"""
|
||||
request.META["PATH_INFO"] = unicodedata.normalize('NFKC', request.META["PATH_INFO"])
|
||||
request.path_info = unicodedata.normalize('NFKC', request.path_info)
|
||||
return None
|
||||
response = get_response(request)
|
||||
return response
|
||||
return unicode_nfkc_normalization
|
||||
|
|
@ -1,3 +1,5 @@
|
|||
import functools
|
||||
|
||||
from django.core.urlresolvers import reverse
|
||||
from django.http import HttpResponseRedirect
|
||||
from django.utils.http import urlquote
|
||||
|
@ -12,4 +14,4 @@ def nomcom_private_key_required(view_func):
|
|||
return HttpResponseRedirect('%s?back_to=%s' % (reverse('nomcom_private_key', None, args=(year, )), urlquote(request.get_full_path())))
|
||||
else:
|
||||
return view_func(request, *args, **kwargs)
|
||||
return inner
|
||||
return functools.update_wrapper(inner, view_func)
|
||||
|
|
|
@ -126,7 +126,7 @@ class PositionFactory(factory.DjangoModelFactory):
|
|||
class Meta:
|
||||
model = Position
|
||||
|
||||
name = factory.Faker('sentence',nb_words=10)
|
||||
name = factory.Faker('sentence',nb_words=5)
|
||||
is_open = True
|
||||
|
||||
class NomineeFactory(factory.DjangoModelFactory):
|
||||
|
|
|
@ -1,14 +1,17 @@
|
|||
from django.db import models
|
||||
from django.db.models.query import QuerySet
|
||||
|
||||
import debug # pyflakes:ignore
|
||||
|
||||
class MixinManager(object):
|
||||
def __getattr__(self, attr, *args):
|
||||
try:
|
||||
return getattr(self.__class__, attr, *args)
|
||||
except AttributeError:
|
||||
return getattr(self.get_queryset(), attr, *args)
|
||||
|
||||
if attr.startswith('__'):
|
||||
return getattr(self.__class__, attr, *args)
|
||||
else:
|
||||
try:
|
||||
return getattr(self.__class__, attr, *args)
|
||||
except AttributeError:
|
||||
return getattr(self.get_queryset(), attr, *args)
|
||||
|
||||
class NomineePositionQuerySet(QuerySet):
|
||||
|
||||
|
|
|
@ -150,7 +150,7 @@ class NomineePosition(models.Model):
|
|||
super(NomineePosition, self).save(**kwargs)
|
||||
|
||||
def __unicode__(self):
|
||||
return u"%s - %s" % (self.nominee, self.position)
|
||||
return u"%s - %s - %s" % (self.nominee, self.state, self.position)
|
||||
|
||||
@property
|
||||
def questionnaires(self):
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
from django.conf.urls import url
|
||||
from django.views.generic import RedirectView
|
||||
|
||||
from ietf.utils.urls import url
|
||||
|
||||
urlpatterns = [
|
||||
url(r'^nomcom/$', RedirectView.as_view(url="/nomcom/ann/", permanent=True)),
|
||||
url(r'^nomcom/(?P<message_id>\d+)/$', RedirectView.as_view(url="/nomcom/ann/%(message_id)s/", permanent=True)),
|
||||
|
|
|
@ -76,7 +76,7 @@ class NomcomViewsTest(TestCase):
|
|||
self.year = NOMCOM_YEAR
|
||||
|
||||
# private urls
|
||||
self.private_index_url = reverse('nomcom_private_index', kwargs={'year': self.year})
|
||||
self.private_index_url = reverse('ietf.nomcom.views.private_index', kwargs={'year': self.year})
|
||||
self.private_merge_person_url = reverse('ietf.nomcom.views.private_merge_person', kwargs={'year': self.year})
|
||||
self.private_merge_nominee_url = reverse('ietf.nomcom.views.private_merge_nominee', kwargs={'year': self.year})
|
||||
self.edit_members_url = reverse('nomcom_edit_members', kwargs={'year': self.year})
|
||||
|
@ -1103,7 +1103,7 @@ class InactiveNomcomTests(TestCase):
|
|||
def test_acceptance_closed(self):
|
||||
today = datetime.date.today().strftime('%Y%m%d')
|
||||
pid = self.nc.position_set.first().nomineeposition_set.order_by('pk').first().id
|
||||
url = reverse('nomcom_process_nomination_status', kwargs = {
|
||||
url = reverse('ietf.nomcom.views.process_nomination_status', kwargs = {
|
||||
'year' : self.nc.year(),
|
||||
'nominee_position_id' : pid,
|
||||
'state' : 'accepted',
|
||||
|
@ -1131,7 +1131,7 @@ class InactiveNomcomTests(TestCase):
|
|||
self.assertEqual(response.status_code, 403)
|
||||
|
||||
def test_cannot_modify_nominees(self):
|
||||
url = reverse('nomcom_private_index', kwargs={'year':self.nc.year()})
|
||||
url = reverse('ietf.nomcom.views.private_index', kwargs={'year':self.nc.year()})
|
||||
login_testing_unauthorized(self, self.chair.user.username, url)
|
||||
response = self.client.get(url)
|
||||
self.assertEqual(response.status_code, 200)
|
||||
|
@ -1287,7 +1287,7 @@ class FeedbackLastSeenTests(TestCase):
|
|||
self.assertEqual( len(q('.label-success')), 0 )
|
||||
|
||||
def test_feedback_nominee_badges(self):
|
||||
url = reverse('nomcom_view_feedback_nominee',kwargs={'year':self.nc.year(),'nominee_id':self.nominee.id})
|
||||
url = reverse('ietf.nomcom.views.view_feedback_nominee', kwargs={'year':self.nc.year(), 'nominee_id':self.nominee.id})
|
||||
login_testing_unauthorized(self, self.member.user.username, url)
|
||||
provide_private_key_to_test_client(self)
|
||||
response = self.client.get(url)
|
||||
|
@ -1330,16 +1330,15 @@ class NewActiveNomComTests(TestCase):
|
|||
self.assertEqual(response.status_code,200)
|
||||
|
||||
def test_accept_reject_nomination_edges(self):
|
||||
|
||||
self.client.logout()
|
||||
np = self.nc.nominee_set.order_by('pk').first().nomineeposition_set.order_by('pk').first()
|
||||
|
||||
kwargs={'year':self.nc.year(),
|
||||
'nominee_position_id':np.id,
|
||||
'state':'accepted',
|
||||
'date':np.time.strftime("%Y%m%d"),
|
||||
'hash':get_hash_nominee_position(np.time.strftime("%Y%m%d"),np.id),
|
||||
}
|
||||
url = reverse('nomcom_process_nomination_status', kwargs=kwargs)
|
||||
url = reverse('ietf.nomcom.views.process_nomination_status', kwargs=kwargs)
|
||||
response = self.client.get(url)
|
||||
self.assertEqual(response.status_code,403)
|
||||
self.assertTrue('already was' in unicontent(response))
|
||||
|
@ -1349,13 +1348,13 @@ class NewActiveNomComTests(TestCase):
|
|||
np.save()
|
||||
kwargs['date'] = np.time.strftime("%Y%m%d")
|
||||
kwargs['hash'] = get_hash_nominee_position(np.time.strftime("%Y%m%d"),np.id)
|
||||
url = reverse('nomcom_process_nomination_status', kwargs=kwargs)
|
||||
url = reverse('ietf.nomcom.views.process_nomination_status', kwargs=kwargs)
|
||||
response = self.client.get(url)
|
||||
self.assertEqual(response.status_code,403)
|
||||
self.assertTrue('Link expired' in unicontent(response))
|
||||
|
||||
kwargs['hash'] = 'bad'
|
||||
url = reverse('nomcom_process_nomination_status', kwargs=kwargs)
|
||||
url = reverse('ietf.nomcom.views.process_nomination_status', kwargs=kwargs)
|
||||
response = self.client.get(url)
|
||||
self.assertEqual(response.status_code,403)
|
||||
self.assertTrue('Bad hash!' in unicontent(response))
|
||||
|
@ -1363,7 +1362,7 @@ class NewActiveNomComTests(TestCase):
|
|||
def test_accept_reject_nomination_comment(self):
|
||||
np = self.nc.nominee_set.order_by('pk').first().nomineeposition_set.order_by('pk').first()
|
||||
hash = get_hash_nominee_position(np.time.strftime("%Y%m%d"),np.id)
|
||||
url = reverse('nomcom_process_nomination_status',
|
||||
url = reverse('ietf.nomcom.views.process_nomination_status',
|
||||
kwargs={'year':self.nc.year(),
|
||||
'nominee_position_id':np.id,
|
||||
'state':'accepted',
|
||||
|
|
|
@ -1,45 +1,46 @@
|
|||
from django.conf.urls import url
|
||||
|
||||
from ietf.nomcom.forms import EditMembersForm, EditMembersFormPreview
|
||||
from ietf.nomcom import views
|
||||
from ietf.message import views as message_views
|
||||
from ietf.utils.urls import url
|
||||
|
||||
urlpatterns = [
|
||||
url(r'^$', 'ietf.nomcom.views.index'),
|
||||
url(r'^ann/$', 'ietf.nomcom.views.announcements'),
|
||||
url(r'^(?P<year>\d{4})/private/$', 'ietf.nomcom.views.private_index', name='nomcom_private_index'),
|
||||
url(r'^(?P<year>\d{4})/private/key/$', 'ietf.nomcom.views.private_key', name='nomcom_private_key'),
|
||||
url(r'^(?P<year>\d{4})/private/help/$', 'ietf.nomcom.views.configuration_help', name='nomcom_chair_help'),
|
||||
url(r'^(?P<year>\d{4})/private/nominate/$', 'ietf.nomcom.views.private_nominate', name='nomcom_private_nominate'),
|
||||
url(r'^(?P<year>\d{4})/private/nominate/newperson$', 'ietf.nomcom.views.private_nominate_newperson', name='nomcom_private_nominate_newperson'),
|
||||
url(r'^(?P<year>\d{4})/private/feedback/$', 'ietf.nomcom.views.private_feedback', name='nomcom_private_feedback'),
|
||||
url(r'^(?P<year>\d{4})/private/feedback-email/$', 'ietf.nomcom.views.private_feedback_email', name='nomcom_private_feedback_email'),
|
||||
url(r'^(?P<year>\d{4})/private/questionnaire-response/$', 'ietf.nomcom.views.private_questionnaire', name='nomcom_private_questionnaire'),
|
||||
url(r'^(?P<year>\d{4})/private/view-feedback/$', 'ietf.nomcom.views.view_feedback', name='nomcom_view_feedback'),
|
||||
url(r'^(?P<year>\d{4})/private/view-feedback/unrelated/$', 'ietf.nomcom.views.view_feedback_unrelated', name='nomcom_view_feedback_unrelated'),
|
||||
url(r'^(?P<year>\d{4})/private/view-feedback/pending/$', 'ietf.nomcom.views.view_feedback_pending', name='nomcom_view_feedback_pending'),
|
||||
url(r'^(?P<year>\d{4})/private/view-feedback/nominee/(?P<nominee_id>\d+)$', 'ietf.nomcom.views.view_feedback_nominee', name='nomcom_view_feedback_nominee'),
|
||||
url(r'^(?P<year>\d{4})/private/edit/nominee/(?P<nominee_id>\d+)$', 'ietf.nomcom.views.edit_nominee', name='nomcom_edit_nominee'),
|
||||
url(r'^$', views.index),
|
||||
url(r'^ann/$', views.announcements),
|
||||
url(r'^(?P<year>\d{4})/private/$', views.private_index),
|
||||
url(r'^(?P<year>\d{4})/private/key/$', views.private_key, name='nomcom_private_key'),
|
||||
url(r'^(?P<year>\d{4})/private/help/$', views.configuration_help, name='nomcom_chair_help'),
|
||||
url(r'^(?P<year>\d{4})/private/nominate/$', views.private_nominate, name='nomcom_private_nominate'),
|
||||
url(r'^(?P<year>\d{4})/private/nominate/newperson$', views.private_nominate_newperson, name='nomcom_private_nominate_newperson'),
|
||||
url(r'^(?P<year>\d{4})/private/feedback/$', views.private_feedback, name='nomcom_private_feedback'),
|
||||
url(r'^(?P<year>\d{4})/private/feedback-email/$', views.private_feedback_email, name='nomcom_private_feedback_email'),
|
||||
url(r'^(?P<year>\d{4})/private/questionnaire-response/$', views.private_questionnaire, name='nomcom_private_questionnaire'),
|
||||
url(r'^(?P<year>\d{4})/private/view-feedback/$', views.view_feedback, name='nomcom_view_feedback'),
|
||||
url(r'^(?P<year>\d{4})/private/view-feedback/unrelated/$', views.view_feedback_unrelated, name='nomcom_view_feedback_unrelated'),
|
||||
url(r'^(?P<year>\d{4})/private/view-feedback/pending/$', views.view_feedback_pending, name='nomcom_view_feedback_pending'),
|
||||
url(r'^(?P<year>\d{4})/private/view-feedback/nominee/(?P<nominee_id>\d+)$', views.view_feedback_nominee),
|
||||
url(r'^(?P<year>\d{4})/private/edit/nominee/(?P<nominee_id>\d+)$', views.edit_nominee, name='nomcom_edit_nominee'),
|
||||
url(r'^(?P<year>\d{4})/private/merge-nominee/?$', views.private_merge_nominee),
|
||||
url(r'^(?P<year>\d{4})/private/merge-person/?$', views.private_merge_person),
|
||||
# url(r'^(?P<year>\d{4})/private/send-reminder-mail/$', RedirectView.as_view(url=reverse_lazy('nomcom_send_reminder_mail',kwargs={'year':year,'type':'accept'}))),
|
||||
url(r'^(?P<year>\d{4})/private/send-reminder-mail/(?P<type>\w+)/$', 'ietf.nomcom.views.send_reminder_mail', name='nomcom_send_reminder_mail'),
|
||||
url(r'^(?P<year>\d{4})/private/send-reminder-mail/(?P<type>\w+)/$', views.send_reminder_mail, name='nomcom_send_reminder_mail'),
|
||||
url(r'^(?P<year>\d{4})/private/edit-members/$', EditMembersFormPreview(EditMembersForm), name='nomcom_edit_members'),
|
||||
url(r'^(?P<year>\d{4})/private/edit-nomcom/$', 'ietf.nomcom.views.edit_nomcom', name='nomcom_edit_nomcom'),
|
||||
url(r'^(?P<year>\d{4})/private/chair/templates/$', 'ietf.nomcom.views.list_templates', name='nomcom_list_templates'),
|
||||
url(r'^(?P<year>\d{4})/private/chair/templates/(?P<template_id>\d+)/$', 'ietf.nomcom.views.edit_template', name='nomcom_edit_template'),
|
||||
url(r'^(?P<year>\d{4})/private/chair/position/$', 'ietf.nomcom.views.list_positions', name='nomcom_list_positions'),
|
||||
url(r'^(?P<year>\d{4})/private/chair/position/add/$', 'ietf.nomcom.views.edit_position', name='nomcom_add_position'),
|
||||
url(r'^(?P<year>\d{4})/private/chair/position/(?P<position_id>\d+)/$', 'ietf.nomcom.views.edit_position', name='nomcom_edit_position'),
|
||||
url(r'^(?P<year>\d{4})/private/chair/position/(?P<position_id>\d+)/remove/$', 'ietf.nomcom.views.remove_position', name='nomcom_remove_position'),
|
||||
url(r'^(?P<year>\d{4})/private/edit-nomcom/$', views.edit_nomcom, name='nomcom_edit_nomcom'),
|
||||
url(r'^(?P<year>\d{4})/private/chair/templates/$', views.list_templates, name='nomcom_list_templates'),
|
||||
url(r'^(?P<year>\d{4})/private/chair/templates/(?P<template_id>\d+)/$', views.edit_template, name='nomcom_edit_template'),
|
||||
url(r'^(?P<year>\d{4})/private/chair/position/$', views.list_positions, name='nomcom_list_positions'),
|
||||
url(r'^(?P<year>\d{4})/private/chair/position/add/$', views.edit_position, name='nomcom_add_position'),
|
||||
url(r'^(?P<year>\d{4})/private/chair/position/(?P<position_id>\d+)/$', views.edit_position, name='nomcom_edit_position'),
|
||||
url(r'^(?P<year>\d{4})/private/chair/position/(?P<position_id>\d+)/remove/$', views.remove_position, name='nomcom_remove_position'),
|
||||
|
||||
url(r'^(?P<year>\d{4})/$', 'ietf.nomcom.views.year_index', name='nomcom_year_index'),
|
||||
url(r'^(?P<year>\d{4})/requirements/$', 'ietf.nomcom.views.requirements', name='nomcom_requirements'),
|
||||
url(r'^(?P<year>\d{4})/expertise/$', 'ietf.nomcom.views.requirements', name='nomcom_requirements'),
|
||||
url(r'^(?P<year>\d{4})/questionnaires/$', 'ietf.nomcom.views.questionnaires', name='nomcom_questionnaires'),
|
||||
url(r'^(?P<year>\d{4})/feedback/$', 'ietf.nomcom.views.public_feedback', name='nomcom_public_feedback'),
|
||||
url(r'^(?P<year>\d{4})/nominate/$', 'ietf.nomcom.views.public_nominate', name='nomcom_public_nominate'),
|
||||
url(r'^(?P<year>\d{4})/nominate/newperson$', 'ietf.nomcom.views.public_nominate_newperson', name='nomcom_public_nominate_newperson'),
|
||||
url(r'^(?P<year>\d{4})/process-nomination-status/(?P<nominee_position_id>\d+)/(?P<state>[\w]+)/(?P<date>[\d]+)/(?P<hash>[a-f0-9]+)/$', 'ietf.nomcom.views.process_nomination_status', name='nomcom_process_nomination_status'),
|
||||
url(r'^(?P<year>\d{4})/$', views.year_index, name='nomcom_year_index'),
|
||||
url(r'^(?P<year>\d{4})/requirements/$', views.requirements, name='nomcom_requirements'),
|
||||
url(r'^(?P<year>\d{4})/expertise/$', views.requirements, name='nomcom_requirements'),
|
||||
url(r'^(?P<year>\d{4})/questionnaires/$', views.questionnaires, name='nomcom_questionnaires'),
|
||||
url(r'^(?P<year>\d{4})/feedback/$', views.public_feedback, name='nomcom_public_feedback'),
|
||||
url(r'^(?P<year>\d{4})/nominate/$', views.public_nominate, name='nomcom_public_nominate'),
|
||||
url(r'^(?P<year>\d{4})/nominate/newperson$', views.public_nominate_newperson, name='nomcom_public_nominate_newperson'),
|
||||
url(r'^(?P<year>\d{4})/process-nomination-status/(?P<nominee_position_id>\d+)/(?P<state>[\w]+)/(?P<date>[\d]+)/(?P<hash>[a-f0-9]+)/$', views.process_nomination_status),
|
||||
# use the generic view from message
|
||||
url(r'^ann/(?P<message_id>\d+)/$', 'ietf.message.views.message', {'group_type': "nomcom" }, "nomcom_announcement"),
|
||||
url(r'^ann/(?P<message_id>\d+)/$', message_views.message, {'group_type': "nomcom" }),
|
||||
]
|
||||
|
|
|
@ -211,14 +211,14 @@ def send_accept_reminder_to_nominee(nominee_position):
|
|||
(to_email, cc) = gather_address_lists('nomination_accept_reminder',nominee=nominee.email.address)
|
||||
|
||||
hash = get_hash_nominee_position(today, nominee_position.id)
|
||||
accept_url = reverse('nomcom_process_nomination_status',
|
||||
accept_url = reverse('ietf.nomcom.views.process_nomination_status',
|
||||
None,
|
||||
args=(get_year_by_nomcom(nomcom),
|
||||
nominee_position.id,
|
||||
'accepted',
|
||||
today,
|
||||
hash))
|
||||
decline_url = reverse('nomcom_process_nomination_status',
|
||||
decline_url = reverse('ietf.nomcom.views.process_nomination_status',
|
||||
None,
|
||||
args=(get_year_by_nomcom(nomcom),
|
||||
nominee_position.id,
|
||||
|
@ -290,14 +290,14 @@ def make_nomineeposition(nomcom, candidate, position, author):
|
|||
domain = Site.objects.get_current().domain
|
||||
today = datetime.date.today().strftime('%Y%m%d')
|
||||
hash = get_hash_nominee_position(today, nominee_position.id)
|
||||
accept_url = reverse('nomcom_process_nomination_status',
|
||||
accept_url = reverse('ietf.nomcom.views.process_nomination_status',
|
||||
None,
|
||||
args=(get_year_by_nomcom(nomcom),
|
||||
nominee_position.id,
|
||||
'accepted',
|
||||
today,
|
||||
hash))
|
||||
decline_url = reverse('nomcom_process_nomination_status',
|
||||
decline_url = reverse('ietf.nomcom.views.process_nomination_status',
|
||||
None,
|
||||
args=(get_year_by_nomcom(nomcom),
|
||||
nominee_position.id,
|
||||
|
|
|
@ -113,7 +113,7 @@ def private_key(request, year):
|
|||
else:
|
||||
messages.warning(request, "You don't have a private decryption key set for this session yet")
|
||||
|
||||
back_url = request.GET.get('back_to', reverse('nomcom_private_index', None, args=(year, )))
|
||||
back_url = request.GET.get('back_to', reverse('ietf.nomcom.views.private_index', None, args=(year, )))
|
||||
if request.method == 'POST':
|
||||
form = PrivateKeyForm(data=request.POST)
|
||||
if form.is_valid():
|
||||
|
@ -276,7 +276,7 @@ def private_merge_person(request, year):
|
|||
if form.is_valid():
|
||||
form.save()
|
||||
messages.success(request, 'A merge request has been sent to the secretariat.')
|
||||
return redirect('nomcom_private_index',year=year)
|
||||
return redirect('ietf.nomcom.views.private_index',year=year)
|
||||
else:
|
||||
form = MergePersonForm(nomcom=nomcom)
|
||||
|
||||
|
@ -301,7 +301,7 @@ def private_merge_nominee(request, year):
|
|||
if form.is_valid():
|
||||
form.save()
|
||||
messages.success(request, 'The Nominee records have been joined.')
|
||||
return redirect('nomcom_private_index',year=year)
|
||||
return redirect('ietf.nomcom.views.private_index',year=year)
|
||||
else:
|
||||
form = MergeNomineeForm(nomcom=nomcom)
|
||||
|
||||
|
@ -811,7 +811,7 @@ def edit_nominee(request, year, nominee_id):
|
|||
if form.is_valid():
|
||||
form.save()
|
||||
messages.success(request, 'The nomination address for %s has been changed to %s'%(nominee.name(),nominee.email.address))
|
||||
return redirect('nomcom_private_index', year=year)
|
||||
return redirect('ietf.nomcom.views.private_index', year=year)
|
||||
else:
|
||||
form = EditNomineeForm(instance=nominee)
|
||||
|
||||
|
|
|
@ -8,6 +8,7 @@ from unidecode import unidecode
|
|||
|
||||
from django.conf import settings
|
||||
from django.contrib.auth.models import User
|
||||
from django.utils.text import slugify
|
||||
|
||||
import debug # pyflakes:ignore
|
||||
|
||||
|
@ -24,7 +25,8 @@ class UserFactory(factory.DjangoModelFactory):
|
|||
locale = random.sample(faker.config.AVAILABLE_LOCALES, 1)[0]
|
||||
first_name = factory.Faker('first_name', locale)
|
||||
last_name = factory.Faker('last_name', locale)
|
||||
email = factory.LazyAttributeSequence(lambda u, n: '%s.%s_%d@%s'%(unidecode(u.first_name),unidecode(u.last_name),n, fake.domain_name()))
|
||||
email = factory.LazyAttributeSequence(lambda u, n: '%s.%s_%d@%s'%( slugify(unidecode(u.first_name)),
|
||||
slugify(unidecode(u.last_name)), n, fake.domain_name()))
|
||||
username = factory.LazyAttribute(lambda u: u.email)
|
||||
|
||||
@factory.post_generation
|
||||
|
@ -92,6 +94,7 @@ class EmailFactory(factory.DjangoModelFactory):
|
|||
model = Email
|
||||
django_get_or_create = ('address',)
|
||||
|
||||
address = factory.Sequence(lambda n:'%s.%s_%d@%s' % (fake.first_name(),fake.last_name(),n,fake.domain_name()))
|
||||
address = factory.Sequence(lambda n:'%s.%s_%d@%s' % ( slugify(unidecode(fake.first_name())),
|
||||
slugify(unidecode(fake.last_name())), n, fake.domain_name()))
|
||||
active = True
|
||||
primary = False
|
||||
|
|
|
@ -86,7 +86,7 @@ class SearchablePersonsField(forms.CharField):
|
|||
|
||||
# doing this in the constructor is difficult because the URL
|
||||
# patterns may not have been fully constructed there yet
|
||||
self.widget.attrs["data-ajax-url"] = urlreverse("ajax_select2_search_person_email", kwargs={ "model_name": self.model.__name__.lower() })
|
||||
self.widget.attrs["data-ajax-url"] = urlreverse("ietf.person.views.ajax_select2_search", kwargs={ "model_name": self.model.__name__.lower() })
|
||||
query_args = {}
|
||||
if self.only_users:
|
||||
query_args["user"] = "1"
|
||||
|
|
|
@ -10,8 +10,8 @@ import debug # pyflakes:ignore
|
|||
|
||||
from ietf.person.factories import EmailFactory,PersonFactory
|
||||
from ietf.person.models import Person
|
||||
from ietf.utils.test_utils import TestCase
|
||||
from ietf.utils.test_data import make_test_data
|
||||
from ietf.utils.test_utils import TestCase
|
||||
from ietf.utils.mail import outbox, empty_outbox
|
||||
|
||||
|
||||
|
@ -35,7 +35,7 @@ class PersonTests(TestCase):
|
|||
|
||||
def test_profile(self):
|
||||
person = PersonFactory(with_bio=True)
|
||||
|
||||
|
||||
self.assertTrue(person.photo is not None)
|
||||
self.assertTrue(person.photo.name is not None)
|
||||
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
from django.conf.urls import url
|
||||
from ietf.person import views, ajax
|
||||
from ietf.utils.urls import url
|
||||
|
||||
urlpatterns = [
|
||||
url(r'^search/(?P<model_name>(person|email))/$', "ietf.person.views.ajax_select2_search", None, 'ajax_select2_search_person_email'),
|
||||
url(r'^search/(?P<model_name>(person|email))/$', views.ajax_select2_search),
|
||||
url(r'^(?P<personid>[a-z0-9]+).json$', ajax.person_json),
|
||||
url(ur'^(?P<email_or_name>[-\w\s\']+)', views.profile),
|
||||
url(r'^(?P<email_or_name>[^/]+)$', views.profile),
|
||||
]
|
||||
|
|
|
@ -1,7 +1,9 @@
|
|||
# Copyright The IETF Trust 2007, All Rights Reserved
|
||||
|
||||
from django.conf.urls import url
|
||||
|
||||
from ietf.redirects import views
|
||||
from ietf.utils.urls import url
|
||||
|
||||
urlpatterns = [
|
||||
url(r'^(?P<script>.*?\.cgi)(/.*)?$', 'ietf.redirects.views.redirect'),
|
||||
url(r'^(?P<script>.*?\.cgi)(/.*)?$', views.redirect),
|
||||
]
|
||||
|
|
|
@ -1,9 +1,11 @@
|
|||
from django.conf.urls import url
|
||||
from django.views.generic import TemplateView
|
||||
|
||||
from ietf.release import views
|
||||
from ietf.utils.urls import url
|
||||
|
||||
urlpatterns = [
|
||||
url(r'^$', 'ietf.release.views.release'),
|
||||
url(r'^(?P<version>[0-9.]+.*)/$', 'ietf.release.views.release'),
|
||||
url(r'^$', views.release),
|
||||
url(r'^(?P<version>[0-9.]+.*)/$', views.release),
|
||||
url(r'^about/?$', TemplateView.as_view(template_name='release/about.html')),
|
||||
url(r'^todo/?$', TemplateView.as_view(template_name='release/todo.html')),
|
||||
]
|
||||
|
|
|
@ -1,6 +1,8 @@
|
|||
from django.conf.urls import url
|
||||
|
||||
from ietf.secr.announcement import views
|
||||
from ietf.utils.urls import url
|
||||
|
||||
urlpatterns = [
|
||||
url(r'^$', 'ietf.secr.announcement.views.main', name='announcement'),
|
||||
url(r'^confirm/$', 'ietf.secr.announcement.views.confirm', name='announcement_confirm'),
|
||||
url(r'^$', views.main, name='announcement'),
|
||||
url(r'^confirm/$', views.confirm, name='announcement_confirm'),
|
||||
]
|
||||
|
|
|
@ -19,7 +19,7 @@ class SecrAreasTestCase(TestCase):
|
|||
def test_main(self):
|
||||
"Main Test"
|
||||
make_test_data()
|
||||
url = reverse('areas')
|
||||
url = reverse('ietf.secr.areas.views.list_areas')
|
||||
self.client.login(username="secretary", password="secretary+password")
|
||||
response = self.client.get(url)
|
||||
self.assertEqual(response.status_code, 200)
|
||||
|
@ -29,7 +29,7 @@ class SecrAreasTestCase(TestCase):
|
|||
make_test_data()
|
||||
augment_data()
|
||||
areas = Group.objects.filter(type='area',state='active')
|
||||
url = reverse('areas_view', kwargs={'name':areas[0].acronym})
|
||||
url = reverse('ietf.secr.areas.views.view', kwargs={'name':areas[0].acronym})
|
||||
self.client.login(username="secretary", password="secretary+password")
|
||||
response = self.client.get(url)
|
||||
self.assertEqual(response.status_code, 200)
|
||||
|
|
|
@ -1,12 +1,14 @@
|
|||
from django.conf.urls import url
|
||||
|
||||
from ietf.secr.areas import views
|
||||
from ietf.utils.urls import url
|
||||
|
||||
urlpatterns = [
|
||||
url(r'^$', 'ietf.secr.areas.views.list_areas', name='areas'),
|
||||
url(r'^add/$', 'ietf.secr.areas.views.add', name='areas_add'),
|
||||
url(r'^getemails', 'ietf.secr.areas.views.getemails', name='areas_emails'),
|
||||
url(r'^getpeople', 'ietf.secr.areas.views.getpeople', name='areas_getpeople'),
|
||||
url(r'^(?P<name>[A-Za-z0-9.-]+)/$', 'ietf.secr.areas.views.view', name='areas_view'),
|
||||
url(r'^(?P<name>[A-Za-z0-9.-]+)/edit/$', 'ietf.secr.areas.views.edit', name='areas_edit'),
|
||||
url(r'^(?P<name>[A-Za-z0-9.-]+)/people/$', 'ietf.secr.areas.views.people', name='areas_people'),
|
||||
url(r'^(?P<name>[A-Za-z0-9.-]+)/people/modify/$', 'ietf.secr.areas.views.modify', name='areas_modify'),
|
||||
url(r'^$', views.list_areas),
|
||||
url(r'^add/$', views.add),
|
||||
url(r'^getemails', views.getemails),
|
||||
url(r'^getpeople', views.getpeople),
|
||||
url(r'^(?P<name>[A-Za-z0-9.-]+)/$', views.view),
|
||||
url(r'^(?P<name>[A-Za-z0-9.-]+)/edit/$', views.edit),
|
||||
url(r'^(?P<name>[A-Za-z0-9.-]+)/people/$', views.people),
|
||||
url(r'^(?P<name>[A-Za-z0-9.-]+)/people/modify/$', views.modify),
|
||||
]
|
||||
|
|
|
@ -144,9 +144,9 @@ def edit(request, name):
|
|||
time=new_area.time)
|
||||
|
||||
messages.success(request, 'The Area entry was changed successfully')
|
||||
return redirect('areas_view', name=name)
|
||||
return redirect('ietf.secr.areas.views.view', name=name)
|
||||
else:
|
||||
return redirect('areas_view', name=name)
|
||||
return redirect('ietf.secr.areas.views.view', name=name)
|
||||
else:
|
||||
form = AreaForm(instance=area)
|
||||
awp_formset = AWPFormSet(instance=area)
|
||||
|
@ -215,7 +215,7 @@ def people(request, name):
|
|||
Role.objects.create(name_id='pre-ad',group=area,email=email,person=person)
|
||||
|
||||
messages.success(request, 'New Area Director added successfully!')
|
||||
return redirect('areas_view', name=name)
|
||||
return redirect('ietf.secr.areas.views.view', name=name)
|
||||
else:
|
||||
form = AreaDirectorForm()
|
||||
|
||||
|
@ -279,7 +279,7 @@ def modify(request, name):
|
|||
|
||||
messages.success(request, 'Voting rights have been granted successfully!')
|
||||
|
||||
return redirect('areas_view', name=name)
|
||||
return redirect('ietf.secr.areas.views.view', name=name)
|
||||
|
||||
@role_required('Secretariat')
|
||||
def view(request, name):
|
||||
|
|
|
@ -1,5 +1,7 @@
|
|||
from django.conf.urls import url
|
||||
|
||||
from ietf.secr.console import views
|
||||
from ietf.utils.urls import url
|
||||
|
||||
urlpatterns = [
|
||||
url(r'^$', 'ietf.secr.console.views.main', name='console'),
|
||||
url(r'^$', views.main, name='console'),
|
||||
]
|
||||
|
|
|
@ -5,6 +5,8 @@ from StringIO import StringIO
|
|||
from django.conf import settings
|
||||
from django.core.urlresolvers import reverse as urlreverse
|
||||
|
||||
import debug # pyflakes:ignore
|
||||
|
||||
from ietf.doc.models import State
|
||||
from ietf.person.models import Person
|
||||
from ietf.submit.models import Preapproval
|
||||
|
@ -50,7 +52,7 @@ class SecrDraftsTestCase(TestCase):
|
|||
|
||||
def test_add(self):
|
||||
draft = make_test_data()
|
||||
url = urlreverse('drafts_add')
|
||||
url = urlreverse('ietf.secr.drafts.views.add')
|
||||
self.client.login(username="secretary", password="secretary+password")
|
||||
response = self.client.get(url)
|
||||
self.assertEqual(response.status_code, 200)
|
||||
|
@ -79,7 +81,7 @@ class SecrDraftsTestCase(TestCase):
|
|||
make_test_data()
|
||||
Preapproval.objects.create(name='draft-dummy',
|
||||
by=Person.objects.get(name="(System)"))
|
||||
url = urlreverse('drafts_approvals')
|
||||
url = urlreverse('ietf.secr.drafts.views.approvals')
|
||||
self.client.login(username="secretary", password="secretary+password")
|
||||
response = self.client.get(url)
|
||||
self.assertEqual(response.status_code, 200)
|
||||
|
@ -132,26 +134,26 @@ class SecrDraftsTestCase(TestCase):
|
|||
|
||||
def test_search(self):
|
||||
draft = make_test_data()
|
||||
url = urlreverse('drafts')
|
||||
url = urlreverse('ietf.secr.drafts.views.search')
|
||||
self.client.login(username="secretary", password="secretary+password")
|
||||
response = self.client.get(url)
|
||||
self.assertEqual(response.status_code, 200)
|
||||
|
||||
post = dict(filename='draft',state=1,submit='submit')
|
||||
response = self.client.post(url,post)
|
||||
response = self.client.post(url, post)
|
||||
self.assertEqual(response.status_code, 200)
|
||||
self.assertTrue(draft.name in response.content)
|
||||
|
||||
def test_update(self):
|
||||
draft = make_test_data()
|
||||
url = urlreverse('drafts_update', kwargs={'id':draft.name})
|
||||
url = urlreverse('ietf.secr.drafts.views.update', kwargs={'id':draft.name})
|
||||
self.client.login(username="secretary", password="secretary+password")
|
||||
response = self.client.get(url)
|
||||
self.assertEqual(response.status_code, 200)
|
||||
|
||||
def test_view(self):
|
||||
draft = make_test_data()
|
||||
url = urlreverse('drafts_view', kwargs={'id':draft.name})
|
||||
url = urlreverse('ietf.secr.drafts.views.view', kwargs={'id':draft.name})
|
||||
self.client.login(username="secretary", password="secretary+password")
|
||||
response = self.client.get(url)
|
||||
self.assertEqual(response.status_code, 200)
|
||||
|
|
|
@ -1,24 +1,26 @@
|
|||
from django.conf.urls import url
|
||||
|
||||
from ietf.secr.drafts import views
|
||||
from ietf.utils.urls import url
|
||||
|
||||
urlpatterns = [
|
||||
url(r'^$', 'ietf.secr.drafts.views.search', name='drafts'),
|
||||
url(r'^add/$', 'ietf.secr.drafts.views.add', name='drafts_add'),
|
||||
url(r'^approvals/$', 'ietf.secr.drafts.views.approvals', name='drafts_approvals'),
|
||||
url(r'^dates/$', 'ietf.secr.drafts.views.dates', name='drafts_dates'),
|
||||
url(r'^nudge-report/$', 'ietf.secr.drafts.views.nudge_report', name='drafts_nudge_report'),
|
||||
url(r'^(?P<id>[A-Za-z0-9._\-\+]+)/$', 'ietf.secr.drafts.views.view', name='drafts_view'),
|
||||
url(r'^(?P<id>[A-Za-z0-9._\-\+]+)/abstract/$', 'ietf.secr.drafts.views.abstract', name='drafts_abstract'),
|
||||
url(r'^(?P<id>[A-Za-z0-9._\-\+]+)/announce/$', 'ietf.secr.drafts.views.announce', name='drafts_announce'),
|
||||
url(r'^(?P<id>[A-Za-z0-9._\-\+]+)/authors/$', 'ietf.secr.drafts.views.authors', name='drafts_authors'),
|
||||
url(r'^(?P<id>[A-Za-z0-9._\-\+]+)/author_delete/(?P<oid>\d{1,6})$', 'ietf.secr.drafts.views.author_delete', name='drafts_author_delete'),
|
||||
url(r'^(?P<id>[A-Za-z0-9._\-\+]+)/confirm/$', 'ietf.secr.drafts.views.confirm', name='drafts_confirm'),
|
||||
url(r'^(?P<id>[A-Za-z0-9._\-\+]+)/edit/$', 'ietf.secr.drafts.views.edit', name='drafts_edit'),
|
||||
url(r'^(?P<id>[A-Za-z0-9._\-\+]+)/extend/$', 'ietf.secr.drafts.views.extend', name='drafts_extend'),
|
||||
url(r'^(?P<id>[A-Za-z0-9._\-\+]+)/email/$', 'ietf.secr.drafts.views.email', name='drafts_email'),
|
||||
url(r'^(?P<id>[A-Za-z0-9._\-\+]+)/makerfc/$', 'ietf.secr.drafts.views.makerfc', name='drafts_makerfc'),
|
||||
url(r'^(?P<id>[A-Za-z0-9._\-\+]+)/replace/$', 'ietf.secr.drafts.views.replace', name='drafts_replace'),
|
||||
url(r'^(?P<id>[A-Za-z0-9._\-\+]+)/resurrect/$', 'ietf.secr.drafts.views.resurrect', name='drafts_resurrect'),
|
||||
url(r'^(?P<id>[A-Za-z0-9._\-\+]+)/revision/$', 'ietf.secr.drafts.views.revision', name='drafts_revision'),
|
||||
url(r'^(?P<id>[A-Za-z0-9._\-\+]+)/update/$', 'ietf.secr.drafts.views.update', name='drafts_update'),
|
||||
url(r'^(?P<id>[A-Za-z0-9._\-\+]+)/withdraw/$', 'ietf.secr.drafts.views.withdraw', name='drafts_withdraw'),
|
||||
url(r'^$', views.search),
|
||||
url(r'^add/$', views.add),
|
||||
url(r'^approvals/$', views.approvals),
|
||||
url(r'^dates/$', views.dates, name='drafts_dates'),
|
||||
url(r'^nudge-report/$', views.nudge_report, name='drafts_nudge_report'),
|
||||
url(r'^(?P<id>[A-Za-z0-9._\-\+]+)/$', views.view),
|
||||
url(r'^(?P<id>[A-Za-z0-9._\-\+]+)/abstract/$', views.abstract, name='drafts_abstract'),
|
||||
url(r'^(?P<id>[A-Za-z0-9._\-\+]+)/announce/$', views.announce, name='drafts_announce'),
|
||||
url(r'^(?P<id>[A-Za-z0-9._\-\+]+)/authors/$', views.authors, name='drafts_authors'),
|
||||
url(r'^(?P<id>[A-Za-z0-9._\-\+]+)/author_delete/(?P<oid>\d{1,6})$', views.author_delete, name='drafts_author_delete'),
|
||||
url(r'^(?P<id>[A-Za-z0-9._\-\+]+)/confirm/$', views.confirm, name='drafts_confirm'),
|
||||
url(r'^(?P<id>[A-Za-z0-9._\-\+]+)/edit/$', views.edit, name='drafts_edit'),
|
||||
url(r'^(?P<id>[A-Za-z0-9._\-\+]+)/extend/$', views.extend, name='drafts_extend'),
|
||||
url(r'^(?P<id>[A-Za-z0-9._\-\+]+)/email/$', views.email, name='drafts_email'),
|
||||
url(r'^(?P<id>[A-Za-z0-9._\-\+]+)/makerfc/$', views.makerfc, name='drafts_makerfc'),
|
||||
url(r'^(?P<id>[A-Za-z0-9._\-\+]+)/replace/$', views.replace, name='drafts_replace'),
|
||||
url(r'^(?P<id>[A-Za-z0-9._\-\+]+)/resurrect/$', views.resurrect, name='drafts_resurrect'),
|
||||
url(r'^(?P<id>[A-Za-z0-9._\-\+]+)/revision/$', views.revision, name='drafts_revision'),
|
||||
url(r'^(?P<id>[A-Za-z0-9._\-\+]+)/update/$', views.update),
|
||||
url(r'^(?P<id>[A-Za-z0-9._\-\+]+)/withdraw/$', views.withdraw, name='drafts_withdraw'),
|
||||
]
|
|
@ -518,7 +518,7 @@ def announce(request, id):
|
|||
content_type='Multipart/Mixed; Boundary="NextPart"')
|
||||
|
||||
messages.success(request, 'Announcement scheduled successfully!')
|
||||
return redirect('drafts_view', id=id)
|
||||
return redirect('ietf.secr.drafts.views.view', id=id)
|
||||
|
||||
@role_required('Secretariat')
|
||||
def approvals(request):
|
||||
|
@ -568,7 +568,7 @@ def authors(request, id):
|
|||
del request.session['action']
|
||||
return redirect('drafts_announce', id=id)
|
||||
|
||||
return redirect('drafts_view', id=id)
|
||||
return redirect('ietf.secr.drafts.views.view', id=id)
|
||||
|
||||
if form.is_valid():
|
||||
author = form.cleaned_data['email']
|
||||
|
@ -605,7 +605,7 @@ def confirm(request, id):
|
|||
# TODO do cancel functions from session (ie remove uploaded files?)
|
||||
# clear session data
|
||||
clear_non_auth(request.session)
|
||||
return redirect('drafts_view', id=id)
|
||||
return redirect('ietf.secr.drafts.views.view', id=id)
|
||||
|
||||
action = request.session['action']
|
||||
if action == 'revision':
|
||||
|
@ -627,7 +627,7 @@ def confirm(request, id):
|
|||
clear_non_auth(request.session)
|
||||
|
||||
messages.success(request, '%s action performed successfully!' % action)
|
||||
return redirect('drafts_view', id=id)
|
||||
return redirect('ietf.secr.drafts.views.view', id=id)
|
||||
|
||||
details = get_action_details(draft, request.session)
|
||||
email = request.session.get('email','')
|
||||
|
@ -681,7 +681,7 @@ def edit(request, id):
|
|||
if request.method == 'POST':
|
||||
button_text = request.POST.get('submit', '')
|
||||
if button_text == 'Cancel':
|
||||
return redirect('drafts_view', id=id)
|
||||
return redirect('ietf.secr.drafts.views.view', id=id)
|
||||
|
||||
form = EditModelForm(request.POST, instance=draft)
|
||||
if form.is_valid():
|
||||
|
@ -696,7 +696,7 @@ def edit(request, id):
|
|||
|
||||
messages.success(request, 'Draft modified successfully!')
|
||||
|
||||
return redirect('drafts_view', id=id)
|
||||
return redirect('ietf.secr.drafts.views.view', id=id)
|
||||
else:
|
||||
#assert False, form.errors
|
||||
pass
|
||||
|
@ -724,7 +724,7 @@ def email(request, id):
|
|||
if button_text == 'Cancel':
|
||||
# clear session data
|
||||
clear_non_auth(request.session)
|
||||
return redirect('drafts_view', id=id)
|
||||
return redirect('ietf.secr.drafts.views.view', id=id)
|
||||
|
||||
form = EmailForm(request.POST)
|
||||
if form.is_valid():
|
||||
|
@ -768,7 +768,7 @@ def extend(request, id):
|
|||
if request.method == 'POST':
|
||||
button_text = request.POST.get('submit', '')
|
||||
if button_text == 'Cancel':
|
||||
return redirect('drafts_view', id=id)
|
||||
return redirect('ietf.secr.drafts.views.view', id=id)
|
||||
|
||||
form = ExtendForm(request.POST)
|
||||
if form.is_valid():
|
||||
|
@ -803,13 +803,13 @@ def makerfc(request, id):
|
|||
# raise error if draft intended standard is empty
|
||||
if not draft.intended_std_level:
|
||||
messages.error(request, 'ERROR: intended RFC status is not set')
|
||||
return redirect('drafts_view', id=id)
|
||||
return redirect('ietf.secr.drafts.views.view', id=id)
|
||||
|
||||
ObsFormset = formset_factory(RfcObsoletesForm, extra=15, max_num=15)
|
||||
if request.method == 'POST':
|
||||
button_text = request.POST.get('submit', '')
|
||||
if button_text == 'Cancel':
|
||||
return redirect('drafts_view', id=id)
|
||||
return redirect('ietf.secr.drafts.views.view', id=id)
|
||||
|
||||
form = RfcModelForm(request.POST, instance=draft)
|
||||
obs_formset = ObsFormset(request.POST, prefix='obs')
|
||||
|
@ -846,7 +846,7 @@ def makerfc(request, id):
|
|||
rfc.save_with_history([e])
|
||||
|
||||
messages.success(request, 'RFC created successfully!')
|
||||
return redirect('drafts_view', id=id)
|
||||
return redirect('ietf.secr.drafts.views.view', id=id)
|
||||
else:
|
||||
# assert False, (form.errors, obs_formset.errors)
|
||||
pass
|
||||
|
@ -888,7 +888,7 @@ def replace(request, id):
|
|||
if request.method == 'POST':
|
||||
button_text = request.POST.get('submit', '')
|
||||
if button_text == 'Cancel':
|
||||
return redirect('drafts_view', id=id)
|
||||
return redirect('ietf.secr.drafts.views.view', id=id)
|
||||
|
||||
form = ReplaceForm(request.POST, draft=draft)
|
||||
if form.is_valid():
|
||||
|
@ -927,7 +927,7 @@ def revision(request, id):
|
|||
if request.method == 'POST':
|
||||
button_text = request.POST.get('submit', '')
|
||||
if button_text == 'Cancel':
|
||||
return redirect('drafts_view', id=id)
|
||||
return redirect('ietf.secr.drafts.views.view', id=id)
|
||||
|
||||
upload_form = UploadForm(request.POST, request.FILES, draft=draft)
|
||||
form = RevisionModelForm(request.POST, instance=draft)
|
||||
|
@ -1015,7 +1015,7 @@ def search(request):
|
|||
|
||||
# if there's just one result go straight to view
|
||||
if len(results) == 1:
|
||||
return redirect('drafts_view', id=results[0].name)
|
||||
return redirect('ietf.secr.drafts.views.view', id=results[0].name)
|
||||
else:
|
||||
active_state = State.objects.get(type='draft',slug='active')
|
||||
form = SearchForm(initial={'state':active_state.pk})
|
||||
|
@ -1039,7 +1039,7 @@ def update(request, id):
|
|||
if request.method == 'POST':
|
||||
button_text = request.POST.get('submit', '')
|
||||
if button_text == 'Cancel':
|
||||
return redirect('drafts_view', id=id)
|
||||
return redirect('ietf.secr.drafts.views.view', id=id)
|
||||
|
||||
upload_form = UploadForm(request.POST, request.FILES, draft=draft)
|
||||
form = RevisionModelForm(request.POST, instance=draft)
|
||||
|
@ -1139,7 +1139,7 @@ def withdraw(request, id):
|
|||
if request.method == 'POST':
|
||||
button_text = request.POST.get('submit', '')
|
||||
if button_text == 'Cancel':
|
||||
return redirect('drafts_view', id=id)
|
||||
return redirect('ietf.secr.drafts.views.view', id=id)
|
||||
|
||||
form = WithdrawForm(request.POST)
|
||||
if form.is_valid():
|
||||
|
|
|
@ -1,17 +1,19 @@
|
|||
from django.conf.urls import url
|
||||
from django.conf import settings
|
||||
|
||||
from ietf.secr.groups import views
|
||||
from ietf.utils.urls import url
|
||||
|
||||
urlpatterns = [
|
||||
url(r'^$', 'ietf.secr.groups.views.search', name='groups'),
|
||||
url(r'^add/$', 'ietf.secr.groups.views.add', name='groups_add'),
|
||||
url(r'^blue-dot-report/$', 'ietf.secr.groups.views.blue_dot', name='groups_blue_dot'),
|
||||
url(r'^search/$', 'ietf.secr.groups.views.search', name='groups_search'),
|
||||
#(r'^ajax/get_ads/$', 'ietf.secr.groups.views.get_ads'),
|
||||
url(r'^%(acronym)s/$' % settings.URL_REGEXPS, 'ietf.secr.groups.views.view', name='groups_view'),
|
||||
url(r'^%(acronym)s/delete/(?P<id>\d{1,6})/$' % settings.URL_REGEXPS, 'ietf.secr.groups.views.delete_role', name='groups_delete_role'),
|
||||
url(r'^%(acronym)s/charter/$' % settings.URL_REGEXPS, 'ietf.secr.groups.views.charter', name='groups_charter'),
|
||||
url(r'^%(acronym)s/edit/$' % settings.URL_REGEXPS, 'ietf.secr.groups.views.edit', name='groups_edit'),
|
||||
url(r'^%(acronym)s/gm/$' % settings.URL_REGEXPS, 'ietf.secr.groups.views.view_gm', name='groups_view_gm'),
|
||||
url(r'^%(acronym)s/gm/edit/$' % settings.URL_REGEXPS, 'ietf.secr.groups.views.edit_gm', name='groups_edit_gm'),
|
||||
url(r'^%(acronym)s/people/$' % settings.URL_REGEXPS, 'ietf.secr.groups.views.people', name='groups_people'),
|
||||
url(r'^$', views.search, name='groups'),
|
||||
url(r'^add/$', views.add, name='groups_add'),
|
||||
url(r'^blue-dot-report/$', views.blue_dot),
|
||||
url(r'^search/$', views.search, name='groups_search'),
|
||||
#(r'^ajax/get_ads/$', views.get_ads),
|
||||
url(r'^%(acronym)s/$' % settings.URL_REGEXPS, views.view, name='groups_view'),
|
||||
url(r'^%(acronym)s/delete/(?P<id>\d{1,6})/$' % settings.URL_REGEXPS, views.delete_role, name='groups_delete_role'),
|
||||
url(r'^%(acronym)s/charter/$' % settings.URL_REGEXPS, views.charter, name='groups_charter'),
|
||||
url(r'^%(acronym)s/edit/$' % settings.URL_REGEXPS, views.edit, name='groups_edit'),
|
||||
url(r'^%(acronym)s/gm/$' % settings.URL_REGEXPS, views.view_gm),
|
||||
url(r'^%(acronym)s/gm/edit/$' % settings.URL_REGEXPS, views.edit_gm),
|
||||
url(r'^%(acronym)s/people/$' % settings.URL_REGEXPS, views.people, name='groups_people'),
|
||||
]
|
||||
|
|
|
@ -49,7 +49,7 @@ class SecrMeetingTestCase(TestCase):
|
|||
|
||||
def test_main(self):
|
||||
"Main Test"
|
||||
url = reverse('meetings')
|
||||
url = reverse('ietf.secr.meetings.views.main')
|
||||
self.client.login(username="secretary", password="secretary+password")
|
||||
response = self.client.get(url)
|
||||
self.assertEqual(response.status_code, 200)
|
||||
|
@ -57,7 +57,7 @@ class SecrMeetingTestCase(TestCase):
|
|||
def test_view(self):
|
||||
"View Test"
|
||||
meeting = make_meeting_test_data()
|
||||
url = reverse('meetings_view', kwargs={'meeting_id':meeting.number})
|
||||
url = reverse('ietf.secr.meetings.views.view', kwargs={'meeting_id':meeting.number})
|
||||
self.client.login(username="secretary", password="secretary+password")
|
||||
response = self.client.get(url)
|
||||
self.assertEqual(response.status_code, 200)
|
||||
|
@ -69,7 +69,7 @@ class SecrMeetingTestCase(TestCase):
|
|||
meeting = make_meeting_test_data()
|
||||
number = int(meeting.number) + 1
|
||||
count = Meeting.objects.count()
|
||||
url = reverse('meetings_add')
|
||||
url = reverse('ietf.secr.meetings.views.add')
|
||||
post_data = dict(number=number,city='Toronto',date='2014-07-20',country='CA',
|
||||
time_zone='America/New_York',venue_name='Hilton',
|
||||
venue_addr='100 First Ave',
|
||||
|
@ -92,7 +92,7 @@ class SecrMeetingTestCase(TestCase):
|
|||
type_id='ietf',
|
||||
date=datetime.datetime(2014,7,20),
|
||||
)
|
||||
url = reverse('meetings_edit_meeting',kwargs={'meeting_id':1})
|
||||
url = reverse('ietf.secr.meetings.views.edit_meeting',kwargs={'meeting_id':1})
|
||||
post_data = dict(number='1',date='2014-07-20',city='Toronto',
|
||||
idsubmit_cutoff_day_offset_00=13,
|
||||
idsubmit_cutoff_day_offset_01=20,
|
||||
|
@ -113,7 +113,7 @@ class SecrMeetingTestCase(TestCase):
|
|||
meeting = make_meeting_test_data()
|
||||
os.makedirs(os.path.join(self.proceedings_dir,str(meeting.number),'bluesheets'))
|
||||
|
||||
url = reverse('meetings_blue_sheet',kwargs={'meeting_id':meeting.number})
|
||||
url = reverse('ietf.secr.meetings.views.blue_sheet',kwargs={'meeting_id':meeting.number})
|
||||
self.client.login(username="secretary", password="secretary+password")
|
||||
response = self.client.get(url)
|
||||
self.assertEqual(response.status_code, 200)
|
||||
|
@ -130,7 +130,7 @@ class SecrMeetingTestCase(TestCase):
|
|||
|
||||
def test_blue_sheets_generate(self):
|
||||
meeting = make_meeting_test_data()
|
||||
url = reverse('meetings_blue_sheet_generate',kwargs={'meeting_id':meeting.number})
|
||||
url = reverse('ietf.secr.meetings.views.blue_sheet_generate',kwargs={'meeting_id':meeting.number})
|
||||
self.client.login(username="secretary", password="secretary+password")
|
||||
response = self.client.post(url)
|
||||
self.assertEqual(response.status_code, 302)
|
||||
|
@ -139,7 +139,7 @@ class SecrMeetingTestCase(TestCase):
|
|||
def test_notifications(self):
|
||||
"Test Notifications"
|
||||
meeting = make_meeting_test_data()
|
||||
url = reverse('meetings_notifications',kwargs={'meeting_id':42})
|
||||
url = reverse('ietf.secr.meetings.views.notifications',kwargs={'meeting_id':42})
|
||||
self.client.login(username="secretary", password="secretary+password")
|
||||
response = self.client.get(url)
|
||||
self.assertEqual(response.status_code, 200)
|
||||
|
@ -172,14 +172,14 @@ class SecrMeetingTestCase(TestCase):
|
|||
|
||||
def test_meetings_select(self):
|
||||
make_meeting_test_data()
|
||||
url = reverse('meetings_select',kwargs={'meeting_id':42,'schedule_name':'test-agenda'})
|
||||
url = reverse('ietf.secr.meetings.views.select',kwargs={'meeting_id':42,'schedule_name':'test-agenda'})
|
||||
self.client.login(username="secretary", password="secretary+password")
|
||||
response = self.client.get(url)
|
||||
self.assertEqual(response.status_code, 200)
|
||||
|
||||
def test_meetings_rooms(self):
|
||||
meeting = make_meeting_test_data()
|
||||
url = reverse('meetings_rooms',kwargs={'meeting_id':42,'schedule_name':'test-agenda'})
|
||||
url = reverse('ietf.secr.meetings.views.rooms',kwargs={'meeting_id':42,'schedule_name':'test-agenda'})
|
||||
self.client.login(username="secretary", password="secretary+password")
|
||||
response = self.client.get(url)
|
||||
self.assertEqual(response.status_code, 200)
|
||||
|
@ -205,7 +205,7 @@ class SecrMeetingTestCase(TestCase):
|
|||
|
||||
def test_meetings_times(self):
|
||||
make_meeting_test_data()
|
||||
url = reverse('meetings_times',kwargs={'meeting_id':42,'schedule_name':'test-agenda'})
|
||||
url = reverse('ietf.secr.meetings.views.times',kwargs={'meeting_id':42,'schedule_name':'test-agenda'})
|
||||
self.client.login(username="secretary", password="secretary+password")
|
||||
response = self.client.get(url)
|
||||
self.assertEqual(response.status_code, 200)
|
||||
|
@ -215,7 +215,7 @@ class SecrMeetingTestCase(TestCase):
|
|||
qs = TimeSlot.objects.filter(meeting=meeting,type='session')
|
||||
before = qs.count()
|
||||
expected_deletion_count = qs.filter(time=qs.first().time).count()
|
||||
url = reverse('meetings_times_delete',kwargs={
|
||||
url = reverse('ietf.secr.meetings.views.times_delete',kwargs={
|
||||
'meeting_id':42,
|
||||
'schedule_name':'test-agenda',
|
||||
'time':qs.first().time.strftime("%Y:%m:%d:%H:%M")
|
||||
|
@ -246,14 +246,14 @@ class SecrMeetingTestCase(TestCase):
|
|||
|
||||
def test_meetings_nonsession(self):
|
||||
make_meeting_test_data()
|
||||
url = reverse('meetings_non_session',kwargs={'meeting_id':42,'schedule_name':'test-agenda'})
|
||||
url = reverse('ietf.secr.meetings.views.non_session',kwargs={'meeting_id':42,'schedule_name':'test-agenda'})
|
||||
self.client.login(username="secretary", password="secretary+password")
|
||||
response = self.client.get(url)
|
||||
self.assertEqual(response.status_code, 200)
|
||||
|
||||
def test_meetings_select_group(self):
|
||||
make_meeting_test_data()
|
||||
url = reverse('meetings_select_group',kwargs={'meeting_id':42,'schedule_name':'test-agenda'})
|
||||
url = reverse('ietf.secr.meetings.views.select_group',kwargs={'meeting_id':42,'schedule_name':'test-agenda'})
|
||||
self.client.login(username="secretary", password="secretary+password")
|
||||
response = self.client.get(url)
|
||||
self.assertEqual(response.status_code, 200)
|
||||
|
|
|
@ -1,25 +1,27 @@
|
|||
from django.conf.urls import url
|
||||
|
||||
from ietf.secr.meetings import views
|
||||
from ietf.utils.urls import url
|
||||
|
||||
urlpatterns = [
|
||||
url(r'^$', 'ietf.secr.meetings.views.main', name='meetings'),
|
||||
url(r'^add/$', 'ietf.secr.meetings.views.add', name='meetings_add'),
|
||||
url(r'^ajax/get-times/(?P<meeting_id>\d{1,6})/(?P<day>\d)/$', 'ietf.secr.meetings.views.ajax_get_times', name='meetings_ajax_get_times'),
|
||||
url(r'^blue_sheet/$', 'ietf.secr.meetings.views.blue_sheet_redirect', name='meetings_blue_sheet_redirect'),
|
||||
url(r'^(?P<meeting_id>\d{1,6})/$', 'ietf.secr.meetings.views.view', name='meetings_view'),
|
||||
url(r'^(?P<meeting_id>\d{1,6})/blue_sheet/$', 'ietf.secr.meetings.views.blue_sheet', name='meetings_blue_sheet'),
|
||||
url(r'^(?P<meeting_id>\d{1,6})/blue_sheet/generate/$', 'ietf.secr.meetings.views.blue_sheet_generate', name='meetings_blue_sheet_generate'),
|
||||
url(r'^(?P<meeting_id>\d{1,6})/edit/$', 'ietf.secr.meetings.views.edit_meeting', name='meetings_edit_meeting'),
|
||||
url(r'^(?P<meeting_id>\d{1,6})/notifications/$', 'ietf.secr.meetings.views.notifications', name='meetings_notifications'),
|
||||
url(r'^(?P<meeting_id>\d{1,6})/(?P<schedule_name>[A-Za-z0-9_\-]+)/$', 'ietf.secr.meetings.views.select', name='meetings_select'),
|
||||
url(r'^(?P<meeting_id>\d{1,6})/(?P<schedule_name>[A-Za-z0-9_\-]+)/non_session/$', 'ietf.secr.meetings.views.non_session', name='meetings_non_session'),
|
||||
url(r'^(?P<meeting_id>\d{1,6})/(?P<schedule_name>[A-Za-z0-9_\-]+)/non_session/edit/(?P<slot_id>\d{1,6})/$', 'ietf.secr.meetings.views.non_session_edit', name='meetings_non_session_edit'),
|
||||
url(r'^(?P<meeting_id>\d{1,6})/(?P<schedule_name>[A-Za-z0-9_\-]+)/non_session/delete/(?P<slot_id>\d{1,6})/$', 'ietf.secr.meetings.views.non_session_delete', name='meetings_non_session_delete'),
|
||||
url(r'^(?P<meeting_id>\d{1,6})/(?P<schedule_name>[A-Za-z0-9_\-]+)/rooms/$', 'ietf.secr.meetings.views.rooms', name='meetings_rooms'),
|
||||
url(r'^(?P<meeting_id>\d{1,6})/(?P<schedule_name>[A-Za-z0-9_\-]+)/select/$', 'ietf.secr.meetings.views.select_group', name='meetings_select_group'),
|
||||
url(r'^(?P<meeting_id>\d{1,6})/(?P<schedule_name>[A-Za-z0-9_\-]+)/times/$', 'ietf.secr.meetings.views.times', name='meetings_times'),
|
||||
url(r'^(?P<meeting_id>\d{1,6})/(?P<schedule_name>[A-Za-z0-9_\-]+)/times/delete/(?P<time>[0-9\:]+)/$', 'ietf.secr.meetings.views.times_delete', name='meetings_times_delete'),
|
||||
url(r'^(?P<meeting_id>\d{1,6})/(?P<schedule_name>[A-Za-z0-9_\-]+)/times/edit/(?P<time>[0-9\:]+)/$', 'ietf.secr.meetings.views.times_edit', name='meetings_times_edit'),
|
||||
url(r'^(?P<meeting_id>\d{1,6})/(?P<schedule_name>[A-Za-z0-9_\-]+)/unschedule/(?P<session_id>\d{1,6})/$', 'ietf.secr.meetings.views.unschedule', name='meetings_unschedule'),
|
||||
url(r'^(?P<meeting_id>\d{1,6})/(?P<schedule_name>[A-Za-z0-9_\-]+)/(?P<acronym>[-a-z0-9]+)/schedule/$', 'ietf.secr.meetings.views.schedule', name='meetings_schedule'),
|
||||
url(r'^(?P<meeting_id>\d{1,6})/(?P<acronym>[-a-z0-9]+)/remove/$', 'ietf.secr.meetings.views.remove_session', name='meetings_remove_session'),
|
||||
url(r'^$', views.main),
|
||||
url(r'^add/$', views.add),
|
||||
url(r'^ajax/get-times/(?P<meeting_id>\d{1,6})/(?P<day>\d)/$', views.ajax_get_times),
|
||||
url(r'^blue_sheet/$', views.blue_sheet_redirect),
|
||||
url(r'^(?P<meeting_id>\d{1,6})/$', views.view),
|
||||
url(r'^(?P<meeting_id>\d{1,6})/blue_sheet/$', views.blue_sheet),
|
||||
url(r'^(?P<meeting_id>\d{1,6})/blue_sheet/generate/$', views.blue_sheet_generate),
|
||||
url(r'^(?P<meeting_id>\d{1,6})/edit/$', views.edit_meeting),
|
||||
url(r'^(?P<meeting_id>\d{1,6})/notifications/$', views.notifications),
|
||||
url(r'^(?P<meeting_id>\d{1,6})/(?P<schedule_name>[A-Za-z0-9_\-]+)/$', views.select),
|
||||
url(r'^(?P<meeting_id>\d{1,6})/(?P<schedule_name>[A-Za-z0-9_\-]+)/non_session/$', views.non_session),
|
||||
url(r'^(?P<meeting_id>\d{1,6})/(?P<schedule_name>[A-Za-z0-9_\-]+)/non_session/edit/(?P<slot_id>\d{1,6})/$', views.non_session_edit),
|
||||
url(r'^(?P<meeting_id>\d{1,6})/(?P<schedule_name>[A-Za-z0-9_\-]+)/non_session/delete/(?P<slot_id>\d{1,6})/$', views.non_session_delete),
|
||||
url(r'^(?P<meeting_id>\d{1,6})/(?P<schedule_name>[A-Za-z0-9_\-]+)/rooms/$', views.rooms),
|
||||
url(r'^(?P<meeting_id>\d{1,6})/(?P<schedule_name>[A-Za-z0-9_\-]+)/select/$', views.select_group),
|
||||
url(r'^(?P<meeting_id>\d{1,6})/(?P<schedule_name>[A-Za-z0-9_\-]+)/times/$', views.times),
|
||||
url(r'^(?P<meeting_id>\d{1,6})/(?P<schedule_name>[A-Za-z0-9_\-]+)/times/delete/(?P<time>[0-9\:]+)/$', views.times_delete),
|
||||
url(r'^(?P<meeting_id>\d{1,6})/(?P<schedule_name>[A-Za-z0-9_\-]+)/times/edit/(?P<time>[0-9\:]+)/$', views.times_edit),
|
||||
url(r'^(?P<meeting_id>\d{1,6})/(?P<schedule_name>[A-Za-z0-9_\-]+)/unschedule/(?P<session_id>\d{1,6})/$', views.unschedule),
|
||||
url(r'^(?P<meeting_id>\d{1,6})/(?P<schedule_name>[A-Za-z0-9_\-]+)/(?P<acronym>[-a-z0-9]+)/schedule/$', views.schedule),
|
||||
url(r'^(?P<meeting_id>\d{1,6})/(?P<acronym>[-a-z0-9]+)/remove/$', views.remove_session),
|
||||
]
|
||||
|
|
|
@ -295,7 +295,7 @@ def add(request):
|
|||
if request.method == 'POST':
|
||||
button_text = request.POST.get('submit', '')
|
||||
if button_text == 'Cancel':
|
||||
return redirect('meetings')
|
||||
return redirect('ietf.secr.meetings.views.main')
|
||||
|
||||
form = MeetingModelForm(request.POST)
|
||||
if form.is_valid():
|
||||
|
@ -317,7 +317,7 @@ def add(request):
|
|||
make_materials_directories(meeting)
|
||||
|
||||
messages.success(request, 'The Meeting was created successfully!')
|
||||
return redirect('meetings')
|
||||
return redirect('ietf.secr.meetings.views.main')
|
||||
else:
|
||||
# display initial forms
|
||||
max_number = Meeting.objects.filter(type='ietf').aggregate(Max('number'))['number__max']
|
||||
|
@ -348,7 +348,7 @@ def blue_sheet(request, meeting_id):
|
|||
file = request.FILES['file']
|
||||
handle_upload_file(file,file.name,meeting,'bluesheets')
|
||||
messages.success(request, 'File Uploaded')
|
||||
return redirect('meetings_blue_sheet', meeting_id=meeting.number)
|
||||
return redirect('ietf.secr.meetings.views.blue_sheet', meeting_id=meeting.number)
|
||||
else:
|
||||
form = UploadBlueSheetForm()
|
||||
|
||||
|
@ -374,7 +374,7 @@ def blue_sheet_generate(request, meeting_id):
|
|||
create_blue_sheets(meeting, groups)
|
||||
|
||||
messages.success(request, 'Blue Sheets generated')
|
||||
return redirect('meetings_blue_sheet', meeting_id=meeting.number)
|
||||
return redirect('ietf.secr.meetings.views.blue_sheet', meeting_id=meeting.number)
|
||||
|
||||
@role_required('Secretariat')
|
||||
def blue_sheet_redirect(request):
|
||||
|
@ -388,7 +388,7 @@ def blue_sheet_redirect(request):
|
|||
meeting = qs[0]
|
||||
else:
|
||||
meeting = Meeting.objects.filter(type='ietf').order_by('-date')[0]
|
||||
return redirect('meetings_blue_sheet', meeting_id=meeting.number)
|
||||
return redirect('ietf.secr.meetings.views.blue_sheet', meeting_id=meeting.number)
|
||||
|
||||
@role_required('Secretariat')
|
||||
def edit_meeting(request, meeting_id):
|
||||
|
@ -409,13 +409,13 @@ def edit_meeting(request, meeting_id):
|
|||
if request.method == 'POST':
|
||||
button_text = request.POST.get('submit','')
|
||||
if button_text == 'Cancel':
|
||||
return redirect('meetings_view', meeting_id=meeting_id)
|
||||
return redirect('ietf.secr.meetings.views.view', meeting_id=meeting_id)
|
||||
|
||||
form = MeetingModelForm(request.POST, instance=meeting)
|
||||
if form.is_valid():
|
||||
form.save()
|
||||
messages.success(request,'The meeting entry was changed successfully')
|
||||
return redirect('meetings_view', meeting_id=meeting_id)
|
||||
return redirect('ietf.secr.meetings.views.view', meeting_id=meeting_id)
|
||||
|
||||
else:
|
||||
form = MeetingModelForm(instance=meeting)
|
||||
|
@ -433,7 +433,7 @@ def main(request):
|
|||
meetings = Meeting.objects.filter(type='ietf').order_by('-number')
|
||||
|
||||
if request.method == 'POST':
|
||||
return redirect('meetings_view', meeting_id=request.POST['group'])
|
||||
return redirect('ietf.secr.meetings.views.view', meeting_id=request.POST['group'])
|
||||
|
||||
choices = [ (str(x.number),str(x.number)) for x in meetings ]
|
||||
form = GroupSelectForm(choices=choices)
|
||||
|
@ -499,7 +499,7 @@ def non_session(request, meeting_id, schedule_name):
|
|||
schedule=schedule)
|
||||
|
||||
messages.success(request, 'Non-Sessions updated successfully')
|
||||
return redirect('meetings_non_session', meeting_id=meeting_id, schedule_name=schedule_name)
|
||||
return redirect('ietf.secr.meetings.views.non_session', meeting_id=meeting_id, schedule_name=schedule_name)
|
||||
else:
|
||||
form = NonSessionForm(initial={'show_location':True})
|
||||
|
||||
|
@ -529,13 +529,13 @@ def non_session_delete(request, meeting_id, schedule_name, slot_id):
|
|||
for session in session_objects:
|
||||
if session.materials.exclude(states__slug='deleted'):
|
||||
messages.error(request, 'Materials have already been uploaded for "%s". You must delete those before deleting the timeslot.' % slot.name)
|
||||
return redirect('meetings_non_session', meeting_id=meeting_id, schedule_name=schedule_name)
|
||||
return redirect('ietf.secr.meetings.views.non_session', meeting_id=meeting_id, schedule_name=schedule_name)
|
||||
else:
|
||||
Session.objects.filter(pk__in=[ x.pk for x in session_objects ]).delete()
|
||||
slot.delete()
|
||||
|
||||
messages.success(request, 'Non-Session timeslot deleted successfully')
|
||||
return redirect('meetings_non_session', meeting_id=meeting_id, schedule_name=schedule_name)
|
||||
return redirect('ietf.secr.meetings.views.non_session', meeting_id=meeting_id, schedule_name=schedule_name)
|
||||
|
||||
@role_required('Secretariat')
|
||||
def non_session_edit(request, meeting_id, schedule_name, slot_id):
|
||||
|
@ -550,7 +550,7 @@ def non_session_edit(request, meeting_id, schedule_name, slot_id):
|
|||
if request.method == 'POST':
|
||||
button_text = request.POST.get('submit', '')
|
||||
if button_text == 'Cancel':
|
||||
return redirect('meetings_non_session', meeting_id=meeting_id, schedule_name=schedule_name)
|
||||
return redirect('ietf.secr.meetings.views.non_session', meeting_id=meeting_id, schedule_name=schedule_name)
|
||||
|
||||
form = NonSessionEditForm(request.POST,meeting=meeting, session=session)
|
||||
if form.is_valid():
|
||||
|
@ -568,7 +568,7 @@ def non_session_edit(request, meeting_id, schedule_name, slot_id):
|
|||
session.save()
|
||||
|
||||
messages.success(request, 'Location saved')
|
||||
return redirect('meetings_non_session', meeting_id=meeting_id, schedule_name=schedule_name)
|
||||
return redirect('ietf.secr.meetings.views.non_session', meeting_id=meeting_id, schedule_name=schedule_name)
|
||||
|
||||
else:
|
||||
# we need to pass the session to the form in order to disallow changing
|
||||
|
@ -613,7 +613,7 @@ def notifications(request, meeting_id):
|
|||
send_notifications(meeting,groups,request.user.person)
|
||||
|
||||
messages.success(request, "Notifications Sent")
|
||||
return redirect('meetings_view', meeting_id=meeting.number)
|
||||
return redirect('ietf.secr.meetings.views.view', meeting_id=meeting.number)
|
||||
|
||||
return render(request, 'meetings/notifications.html', {
|
||||
'meeting': meeting,
|
||||
|
@ -643,7 +643,7 @@ def remove_session(request, meeting_id, acronym):
|
|||
session.save()
|
||||
|
||||
messages.success(request, '%s Session removed from agenda' % (group.acronym))
|
||||
return redirect('meetings_select_group', meeting_id=meeting.number)
|
||||
return redirect('ietf.secr.meetings.views.select_group', meeting_id=meeting.number)
|
||||
|
||||
@role_required('Secretariat')
|
||||
def rooms(request, meeting_id, schedule_name):
|
||||
|
@ -661,7 +661,7 @@ def rooms(request, meeting_id, schedule_name):
|
|||
if request.method == 'POST':
|
||||
button_text = request.POST.get('submit', '')
|
||||
if button_text == 'Cancel':
|
||||
return redirect('meetings', meeting_id=meeting_id,schedule_name=schedule_name)
|
||||
return redirect('ietf.secr.meetings.views.main', meeting_id=meeting_id,schedule_name=schedule_name)
|
||||
|
||||
formset = RoomFormset(request.POST, instance=meeting, prefix='room')
|
||||
if formset.is_valid():
|
||||
|
@ -679,7 +679,7 @@ def rooms(request, meeting_id, schedule_name):
|
|||
build_timeslots(meeting,room=form.instance)
|
||||
|
||||
messages.success(request, 'Meeting Rooms changed successfully')
|
||||
return redirect('meetings_rooms', meeting_id=meeting_id, schedule_name=schedule_name)
|
||||
return redirect('ietf.secr.meetings.views.rooms', meeting_id=meeting_id, schedule_name=schedule_name)
|
||||
else:
|
||||
formset = RoomFormset(instance=meeting, prefix='room')
|
||||
|
||||
|
@ -726,7 +726,7 @@ def schedule(request, meeting_id, schedule_name, acronym):
|
|||
if request.method == 'POST':
|
||||
button_text = request.POST.get('submit', '')
|
||||
if button_text == 'Cancel':
|
||||
return redirect('meetings_select_group', meeting_id=meeting_id,schedule_name=schedule_name)
|
||||
return redirect('ietf.secr.meetings.views.select_group', meeting_id=meeting_id,schedule_name=schedule_name)
|
||||
|
||||
formset = NewSessionFormset(request.POST,initial=initial)
|
||||
|
||||
|
@ -788,7 +788,7 @@ def schedule(request, meeting_id, schedule_name, acronym):
|
|||
if has_changed:
|
||||
messages.success(request, 'Session(s) Scheduled for %s.' % group.acronym )
|
||||
|
||||
return redirect('meetings_select_group', meeting_id=meeting_id,schedule_name=schedule_name)
|
||||
return redirect('ietf.secr.meetings.views.select_group', meeting_id=meeting_id,schedule_name=schedule_name)
|
||||
|
||||
else:
|
||||
formset = NewSessionFormset(initial=initial)
|
||||
|
@ -829,9 +829,9 @@ def select_group(request, meeting_id, schedule_name):
|
|||
if request.method == 'POST':
|
||||
group = request.POST.get('group',None)
|
||||
if group:
|
||||
redirect_url = reverse('meetings_schedule', kwargs={'meeting_id':meeting_id,'acronym':group,'schedule_name':schedule_name})
|
||||
redirect_url = reverse('ietf.secr.meetings.views.schedule', kwargs={'meeting_id':meeting_id,'acronym':group,'schedule_name':schedule_name})
|
||||
else:
|
||||
redirect_url = reverse('meetings_select_group',kwargs={'meeting_id':meeting_id,'schedule_name':schedule_name})
|
||||
redirect_url = reverse('ietf.secr.meetings.views.select_group',kwargs={'meeting_id':meeting_id,'schedule_name':schedule_name})
|
||||
messages.error(request, 'No group selected')
|
||||
|
||||
return HttpResponseRedirect(redirect_url)
|
||||
|
@ -901,7 +901,7 @@ def times(request, meeting_id, schedule_name):
|
|||
# assert False, (new_time, time_seen)
|
||||
if new_time in time_seen:
|
||||
messages.error(request, 'There is already a timeslot for %s. To change you must delete the old one first.' % new_time.strftime('%a %H:%M'))
|
||||
return redirect('meetings_times', meeting_id=meeting_id,schedule_name=schedule_name)
|
||||
return redirect('ietf.secr.meetings.views.times', meeting_id=meeting_id,schedule_name=schedule_name)
|
||||
|
||||
for room in meeting.room_set.all():
|
||||
TimeSlot.objects.create(type_id='session',
|
||||
|
@ -912,7 +912,7 @@ def times(request, meeting_id, schedule_name):
|
|||
duration=duration)
|
||||
|
||||
messages.success(request, 'Timeslots created')
|
||||
return redirect('meetings_times', meeting_id=meeting_id,schedule_name=schedule_name)
|
||||
return redirect('ietf.secr.meetings.views.times', meeting_id=meeting_id,schedule_name=schedule_name)
|
||||
|
||||
else:
|
||||
form = TimeSlotForm()
|
||||
|
@ -939,7 +939,7 @@ def times_edit(request, meeting_id, schedule_name, time):
|
|||
if request.method == 'POST':
|
||||
button_text = request.POST.get('submit', '')
|
||||
if button_text == 'Cancel':
|
||||
return redirect('meetings_times', meeting_id=meeting_id,schedule_name=schedule_name)
|
||||
return redirect('ietf.secr.meetings.views.times', meeting_id=meeting_id,schedule_name=schedule_name)
|
||||
|
||||
form = TimeSlotForm(request.POST)
|
||||
if form.is_valid():
|
||||
|
@ -958,7 +958,7 @@ def times_edit(request, meeting_id, schedule_name, time):
|
|||
timeslot.save()
|
||||
|
||||
messages.success(request, 'TimeSlot saved')
|
||||
return redirect('meetings_times', meeting_id=meeting_id,schedule_name=schedule_name)
|
||||
return redirect('ietf.secr.meetings.views.times', meeting_id=meeting_id,schedule_name=schedule_name)
|
||||
|
||||
else:
|
||||
# we need to pass the session to the form in order to disallow changing
|
||||
|
@ -992,7 +992,7 @@ def times_delete(request, meeting_id, schedule_name, time):
|
|||
TimeSlot.objects.filter(meeting=meeting,time=dtime).delete()
|
||||
|
||||
messages.success(request, 'Timeslot deleted')
|
||||
return redirect('meetings_times', meeting_id=meeting_id,schedule_name=schedule_name)
|
||||
return redirect('ietf.secr.meetings.views.times', meeting_id=meeting_id,schedule_name=schedule_name)
|
||||
|
||||
@role_required('Secretariat')
|
||||
def unschedule(request, meeting_id, schedule_name, session_id):
|
||||
|
@ -1007,7 +1007,7 @@ def unschedule(request, meeting_id, schedule_name, session_id):
|
|||
# TODO: change session state?
|
||||
|
||||
messages.success(request, 'Session unscheduled')
|
||||
return redirect('meetings_select_group', meeting_id=meeting_id, schedule_name=schedule_name)
|
||||
return redirect('ietf.secr.meetings.views.select_group', meeting_id=meeting_id, schedule_name=schedule_name)
|
||||
|
||||
@role_required('Secretariat')
|
||||
def view(request, meeting_id):
|
||||
|
|
|
@ -1,16 +1,18 @@
|
|||
from django.conf.urls import url
|
||||
from django.conf import settings
|
||||
from ietf.meeting.views import OldUploadRedirect
|
||||
from ietf.utils.urls import url
|
||||
|
||||
from ietf.secr.proceedings import views
|
||||
|
||||
urlpatterns = [
|
||||
url(r'^$', 'ietf.secr.proceedings.views.main', name='proceedings'),
|
||||
url(r'^ajax/generate-proceedings/(?P<meeting_num>\d{1,3})/$', 'ietf.secr.proceedings.views.ajax_generate_proceedings', name='proceedings_ajax_generate_proceedings'),
|
||||
url(r'^$', views.main, name='proceedings'),
|
||||
url(r'^ajax/generate-proceedings/(?P<meeting_num>\d{1,3})/$', views.ajax_generate_proceedings),
|
||||
# special offline URL for testing proceedings build
|
||||
url(r'^process-pdfs/(?P<meeting_num>\d{1,3})/$', 'ietf.secr.proceedings.views.process_pdfs', name='proceedings_process_pdfs'),
|
||||
url(r'^progress-report/(?P<meeting_num>\d{1,3})/$', 'ietf.secr.proceedings.views.progress_report', name='proceedings_progress_report'),
|
||||
url(r'^(?P<meeting_num>\d{1,3})/$', 'ietf.secr.proceedings.views.select', name='proceedings_select'),
|
||||
url(r'^(?P<meeting_num>\d{1,3})/recording/$', 'ietf.secr.proceedings.views.recording', name='proceedings_recording'),
|
||||
url(r'^(?P<meeting_num>\d{1,3})/recording/edit/(?P<name>[A-Za-z0-9_\-\+]+)$', 'ietf.secr.proceedings.views.recording_edit', name='proceedings_recording_edit'),
|
||||
url(r'^process-pdfs/(?P<meeting_num>\d{1,3})/$', views.process_pdfs, name='proceedings_process_pdfs'),
|
||||
url(r'^progress-report/(?P<meeting_num>\d{1,3})/$', views.progress_report, name='proceedings_progress_report'),
|
||||
url(r'^(?P<meeting_num>\d{1,3})/$', views.select, name='proceedings_select'),
|
||||
url(r'^(?P<meeting_num>\d{1,3})/recording/$', views.recording, name='proceedings_recording'),
|
||||
url(r'^(?P<meeting_num>\d{1,3})/recording/edit/(?P<name>[A-Za-z0-9_\-\+]+)$', views.recording_edit, name='proceedings_recording_edit'),
|
||||
url(r'^(?P<num>\d{1,3}|interim-\d{4}-[A-Za-z0-9_\-\+]+)/%(acronym)s/$' % settings.URL_REGEXPS,
|
||||
OldUploadRedirect.as_view(permanent=True)),
|
||||
]
|
||||
|
|
|
@ -1,8 +1,10 @@
|
|||
from django.conf.urls import url
|
||||
from django.conf import settings
|
||||
|
||||
from ietf.secr.roles import views
|
||||
from ietf.utils.urls import url
|
||||
|
||||
urlpatterns = [
|
||||
url(r'^$', 'ietf.secr.roles.views.main', name='roles'),
|
||||
url(r'^ajax/get-roles/%(acronym)s/$' % settings.URL_REGEXPS, 'ietf.secr.roles.views.ajax_get_roles', name='roles_ajax_get_roles'),
|
||||
url(r'^%(acronym)s/delete/(?P<id>\d{1,6})/$' % settings.URL_REGEXPS, 'ietf.secr.roles.views.delete_role', name='roles_delete_role'),
|
||||
url(r'^$', views.main, name='roles'),
|
||||
url(r'^ajax/get-roles/%(acronym)s/$' % settings.URL_REGEXPS, views.ajax_get_roles),
|
||||
url(r'^%(acronym)s/delete/(?P<id>\d{1,6})/$' % settings.URL_REGEXPS, views.delete_role, name='roles_delete_role'),
|
||||
]
|
||||
|
|
|
@ -1,10 +1,12 @@
|
|||
from django.conf.urls import url
|
||||
|
||||
from ietf.secr.rolodex import views
|
||||
from ietf.utils.urls import url
|
||||
|
||||
urlpatterns = [
|
||||
url(r'^$', 'ietf.secr.rolodex.views.search', name='rolodex'),
|
||||
url(r'^add/$', 'ietf.secr.rolodex.views.add', name='rolodex_add'),
|
||||
url(r'^add-proceed/$', 'ietf.secr.rolodex.views.add_proceed', name='rolodex_add_proceed'),
|
||||
url(r'^(?P<id>\d{1,6})/edit/$', 'ietf.secr.rolodex.views.edit', name='rolodex_edit'),
|
||||
#url(r'^(?P<id>\d{1,6})/delete/$', 'ietf.secr.rolodex.views.delete', name='rolodex_delete'),
|
||||
url(r'^(?P<id>\d{1,6})/$', 'ietf.secr.rolodex.views.view', name='rolodex_view'),
|
||||
url(r'^$', views.search, name='rolodex'),
|
||||
url(r'^add/$', views.add, name='rolodex_add'),
|
||||
url(r'^add-proceed/$', views.add_proceed),
|
||||
url(r'^(?P<id>\d{1,6})/edit/$', views.edit),
|
||||
#url(r'^(?P<id>\d{1,6})/delete/$', views.delete, name='rolodex_delete'),
|
||||
url(r'^(?P<id>\d{1,6})/$', views.view, name='rolodex_view'),
|
||||
]
|
||||
|
|
|
@ -32,7 +32,7 @@ class SreqUrlTests(TestCase):
|
|||
class SessionRequestTestCase(TestCase):
|
||||
def test_main(self):
|
||||
make_meeting_test_data()
|
||||
url = reverse('sessions')
|
||||
url = reverse('ietf.secr.sreq.views.main')
|
||||
self.client.login(username="secretary", password="secretary+password")
|
||||
r = self.client.get(url)
|
||||
self.assertEqual(r.status_code, 200)
|
||||
|
@ -45,7 +45,7 @@ class SubmitRequestCase(TestCase):
|
|||
def test_submit_request(self):
|
||||
make_test_data()
|
||||
group = Group.objects.get(acronym='mars')
|
||||
url = reverse('sessions_new',kwargs={'acronym':group.acronym})
|
||||
url = reverse('ietf.secr.sreq.views.new',kwargs={'acronym':group.acronym})
|
||||
post_data = {'num_session':'1',
|
||||
'length_session1':'3600',
|
||||
'attendees':'10',
|
||||
|
@ -53,12 +53,12 @@ class SubmitRequestCase(TestCase):
|
|||
'comments':'need projector'}
|
||||
self.client.login(username="secretary", password="secretary+password")
|
||||
r = self.client.post(url,post_data)
|
||||
self.assertRedirects(r, reverse('sessions_confirm', kwargs={'acronym':group.acronym}))
|
||||
self.assertRedirects(r, reverse('ietf.secr.sreq.views.confirm', kwargs={'acronym':group.acronym}))
|
||||
|
||||
def test_submit_request_invalid(self):
|
||||
make_test_data()
|
||||
group = Group.objects.get(acronym='mars')
|
||||
url = reverse('sessions_new',kwargs={'acronym':group.acronym})
|
||||
url = reverse('ietf.secr.sreq.views.new',kwargs={'acronym':group.acronym})
|
||||
post_data = {'num_session':'2',
|
||||
'length_session1':'3600',
|
||||
'attendees':'10',
|
||||
|
@ -78,7 +78,7 @@ class SubmitRequestCase(TestCase):
|
|||
ad = group.parent.role_set.filter(name='ad').first().person
|
||||
resource = ResourceAssociation.objects.first()
|
||||
url = reverse('ietf.secr.sreq.views.new',kwargs={'acronym':group.acronym})
|
||||
confirm_url = reverse('sessions_confirm',kwargs={'acronym':group.acronym})
|
||||
confirm_url = reverse('ietf.secr.sreq.views.confirm',kwargs={'acronym':group.acronym})
|
||||
len_before = len(outbox)
|
||||
post_data = {'num_session':'1',
|
||||
'length_session1':'3600',
|
||||
|
@ -93,7 +93,7 @@ class SubmitRequestCase(TestCase):
|
|||
self.assertRedirects(r, confirm_url)
|
||||
# confirm
|
||||
r = self.client.post(confirm_url,{'submit':'Submit'})
|
||||
self.assertRedirects(r, reverse('sessions'))
|
||||
self.assertRedirects(r, reverse('ietf.secr.sreq.views.main'))
|
||||
self.assertEqual(len(outbox),len_before+1)
|
||||
notification = outbox[-1]
|
||||
notification_payload = unicode(notification.get_payload(decode=True),"utf-8","replace")
|
||||
|
@ -110,7 +110,7 @@ class LockAppTestCase(TestCase):
|
|||
meeting.session_request_lock_message='locked'
|
||||
meeting.save()
|
||||
group = Group.objects.get(acronym='mars')
|
||||
url = reverse('sessions_edit',kwargs={'acronym':group.acronym})
|
||||
url = reverse('ietf.secr.sreq.views.edit',kwargs={'acronym':group.acronym})
|
||||
self.client.login(username="secretary", password="secretary+password")
|
||||
r = self.client.get(url)
|
||||
self.assertEqual(r.status_code, 200)
|
||||
|
@ -122,7 +122,7 @@ class LockAppTestCase(TestCase):
|
|||
meeting.session_request_lock_message='locked'
|
||||
meeting.save()
|
||||
group = Group.objects.get(acronym='mars')
|
||||
url = reverse('sessions_view',kwargs={'acronym':group.acronym})
|
||||
url = reverse('ietf.secr.sreq.views.view',kwargs={'acronym':group.acronym})
|
||||
self.client.login(username="secretary", password="secretary+password")
|
||||
r = self.client.get(url,follow=True)
|
||||
self.assertEqual(r.status_code, 200)
|
||||
|
@ -134,11 +134,11 @@ class LockAppTestCase(TestCase):
|
|||
meeting.session_request_lock_message='locked'
|
||||
meeting.save()
|
||||
group = Group.objects.get(acronym='mars')
|
||||
url = reverse('sessions_new',kwargs={'acronym':group.acronym})
|
||||
url = reverse('ietf.secr.sreq.views.new',kwargs={'acronym':group.acronym})
|
||||
|
||||
# try as WG Chair
|
||||
self.client.login(username="marschairman", password="marschairman+password")
|
||||
r = self.client.get(url,follow=True)
|
||||
r = self.client.get(url, follow=True)
|
||||
self.assertEqual(r.status_code, 200)
|
||||
q = PyQuery(r.content)
|
||||
self.assertEqual(len(q('#session-request-form')),0)
|
||||
|
@ -158,7 +158,7 @@ class NotMeetingCase(TestCase):
|
|||
def test_not_meeting(self):
|
||||
make_meeting_test_data()
|
||||
group = Group.objects.get(acronym='mars')
|
||||
url = reverse('sessions_no_session',kwargs={'acronym':group.acronym})
|
||||
url = reverse('ietf.secr.sreq.views.no_session',kwargs={'acronym':group.acronym})
|
||||
self.client.login(username="secretary", password="secretary+password")
|
||||
|
||||
empty_outbox()
|
||||
|
|
|
@ -1,16 +1,18 @@
|
|||
from django.conf.urls import url
|
||||
from django.conf import settings
|
||||
|
||||
from ietf.secr.sreq import views
|
||||
from ietf.utils.urls import url
|
||||
|
||||
urlpatterns = [
|
||||
url(r'^$', 'ietf.secr.sreq.views.main', name='sessions'),
|
||||
url(r'^status/$', 'ietf.secr.sreq.views.tool_status', name='sessions_tool_status'),
|
||||
url(r'^%(acronym)s/$' % settings.URL_REGEXPS, 'ietf.secr.sreq.views.view', name='sessions_view'),
|
||||
url(r'^(?P<num>[A-Za-z0-9_\-\+]+)/%(acronym)s/view/$' % settings.URL_REGEXPS, 'ietf.secr.sreq.views.view', name='sessions_view'),
|
||||
url(r'^%(acronym)s/approve/$' % settings.URL_REGEXPS, 'ietf.secr.sreq.views.approve', name='sessions_approve'),
|
||||
url(r'^%(acronym)s/cancel/$' % settings.URL_REGEXPS, 'ietf.secr.sreq.views.cancel', name='sessions_cancel'),
|
||||
url(r'^%(acronym)s/confirm/$' % settings.URL_REGEXPS, 'ietf.secr.sreq.views.confirm', name='sessions_confirm'),
|
||||
url(r'^%(acronym)s/edit/$' % settings.URL_REGEXPS, 'ietf.secr.sreq.views.edit', name='sessions_edit'),
|
||||
url(r'^%(acronym)s/new/$' % settings.URL_REGEXPS, 'ietf.secr.sreq.views.new', name='sessions_new'),
|
||||
url(r'^%(acronym)s/no_session/$' % settings.URL_REGEXPS, 'ietf.secr.sreq.views.no_session', name='sessions_no_session'),
|
||||
url(r'^(?P<num>[A-Za-z0-9_\-\+]+)/%(acronym)s/edit/$' % settings.URL_REGEXPS, 'ietf.secr.sreq.views.edit_mtg', name='sessions_edit'),
|
||||
url(r'^$', views.main),
|
||||
url(r'^status/$', views.tool_status),
|
||||
url(r'^%(acronym)s/$' % settings.URL_REGEXPS, views.view),
|
||||
url(r'^(?P<num>[A-Za-z0-9_\-\+]+)/%(acronym)s/view/$' % settings.URL_REGEXPS, views.view),
|
||||
url(r'^%(acronym)s/approve/$' % settings.URL_REGEXPS, views.approve),
|
||||
url(r'^%(acronym)s/cancel/$' % settings.URL_REGEXPS, views.cancel),
|
||||
url(r'^%(acronym)s/confirm/$' % settings.URL_REGEXPS, views.confirm),
|
||||
url(r'^%(acronym)s/edit/$' % settings.URL_REGEXPS, views.edit),
|
||||
url(r'^%(acronym)s/new/$' % settings.URL_REGEXPS, views.new),
|
||||
url(r'^%(acronym)s/no_session/$' % settings.URL_REGEXPS, views.no_session),
|
||||
url(r'^(?P<num>[A-Za-z0-9_\-\+]+)/%(acronym)s/edit/$' % settings.URL_REGEXPS, views.edit_mtg),
|
||||
]
|
||||
|
|
|
@ -174,11 +174,11 @@ def approve(request, acronym):
|
|||
session_save(session)
|
||||
|
||||
messages.success(request, 'Third session approved')
|
||||
return redirect('sessions_view', acronym=acronym)
|
||||
return redirect('ietf.secr.sreq.views.view', acronym=acronym)
|
||||
else:
|
||||
# if an unauthorized user gets here return error
|
||||
messages.error(request, 'Not authorized to approve the third session')
|
||||
return redirect('sessions_view', acronym=acronym)
|
||||
return redirect('ietf.secr.sreq.views.view', acronym=acronym)
|
||||
|
||||
@check_permissions
|
||||
def cancel(request, acronym):
|
||||
|
@ -217,7 +217,7 @@ def cancel(request, acronym):
|
|||
'meeting':meeting}, cc=cc_list)
|
||||
|
||||
messages.success(request, 'The %s Session Request has been canceled' % group.acronym)
|
||||
return redirect('sessions')
|
||||
return redirect('ietf.secr.sreq.views.main')
|
||||
|
||||
@role_required(*AUTHORIZED_ROLES)
|
||||
def confirm(request, acronym):
|
||||
|
@ -246,7 +246,7 @@ def confirm(request, acronym):
|
|||
button_text = request.POST.get('submit', '')
|
||||
if button_text == 'Cancel':
|
||||
messages.success(request, 'Session Request has been canceled')
|
||||
return redirect('sessions')
|
||||
return redirect('ietf.secr.sreq.views.main')
|
||||
|
||||
# delete any existing session records with status = canceled or notmeet
|
||||
Session.objects.filter(group=group,meeting=meeting,status__in=('canceled','notmeet')).delete()
|
||||
|
@ -295,7 +295,7 @@ def confirm(request, acronym):
|
|||
|
||||
status_text = 'IETF Agenda to be scheduled'
|
||||
messages.success(request, 'Your request has been sent to %s' % status_text)
|
||||
return redirect('sessions')
|
||||
return redirect('ietf.secr.sreq.views.main')
|
||||
|
||||
# GET logic
|
||||
session_conflicts = session_conflicts_as_string(group, meeting)
|
||||
|
@ -353,7 +353,7 @@ def edit_mtg(request, num, acronym):
|
|||
if request.method == 'POST':
|
||||
button_text = request.POST.get('submit', '')
|
||||
if button_text == 'Cancel':
|
||||
return redirect('sessions_view', acronym=acronym)
|
||||
return redirect('ietf.secr.sreq.views.view', acronym=acronym)
|
||||
|
||||
form = SessionForm(request.POST,initial=initial)
|
||||
if form.is_valid():
|
||||
|
@ -453,11 +453,11 @@ def edit_mtg(request, num, acronym):
|
|||
session_constraint_expire(request,session)
|
||||
|
||||
messages.success(request, 'Session Request updated')
|
||||
return redirect('sessions_view', acronym=acronym)
|
||||
return redirect('ietf.secr.sreq.views.view', acronym=acronym)
|
||||
|
||||
else:
|
||||
if not sessions:
|
||||
return redirect('sessions_new', acronym=acronym)
|
||||
return redirect('ietf.secr.sreq.views.new', acronym=acronym)
|
||||
form = SessionForm(initial=initial)
|
||||
|
||||
return render(request, 'sreq/edit.html', {
|
||||
|
@ -491,9 +491,9 @@ def main(request):
|
|||
if request.method == 'POST':
|
||||
button_text = request.POST.get('submit', '')
|
||||
if button_text == 'Group will not meet':
|
||||
return redirect('sessions_no_session', acronym=request.POST['group'])
|
||||
return redirect('ietf.secr.sreq.views.no_session', acronym=request.POST['group'])
|
||||
else:
|
||||
return redirect('sessions_new', acronym=request.POST['group'])
|
||||
return redirect('ietf.secr.sreq.views.new', acronym=request.POST['group'])
|
||||
|
||||
meeting = get_meeting()
|
||||
scheduled_groups,unscheduled_groups = groups_by_session(request.user, meeting, types=['wg','rg','ag'])
|
||||
|
@ -542,24 +542,23 @@ def new(request, acronym):
|
|||
is_locked = check_app_locked()
|
||||
if is_locked and not has_role(request.user,'Secretariat'):
|
||||
messages.warning(request, "The Session Request Tool is closed")
|
||||
return redirect('sessions')
|
||||
return redirect('ietf.secr.sreq.views.main')
|
||||
|
||||
if request.method == 'POST':
|
||||
button_text = request.POST.get('submit', '')
|
||||
if button_text == 'Cancel':
|
||||
return redirect('sessions')
|
||||
return redirect('ietf.secr.sreq.views.main')
|
||||
|
||||
form = SessionForm(request.POST)
|
||||
if form.is_valid():
|
||||
# check if request already exists for this group
|
||||
if Session.objects.filter(group=group,meeting=meeting).exclude(status__in=('deleted','notmeet')):
|
||||
messages.warning(request, 'Sessions for working group %s have already been requested once.' % group.acronym)
|
||||
return redirect('sessions')
|
||||
return redirect('ietf.secr.sreq.views.main')
|
||||
|
||||
# save in user session
|
||||
request.session['session_form'] = form.data
|
||||
|
||||
return redirect('sessions_confirm',acronym=acronym)
|
||||
return redirect('ietf.secr.sreq.views.confirm',acronym=acronym)
|
||||
|
||||
# the "previous" querystring causes the form to be returned
|
||||
# pre-populated with data from last meeeting's session request
|
||||
|
@ -568,7 +567,7 @@ def new(request, acronym):
|
|||
previous_sessions = Session.objects.filter(meeting=previous_meeting,group=group).exclude(status__in=('notmeet','deleted')).order_by('id')
|
||||
if not previous_sessions:
|
||||
messages.warning(request, 'This group did not meet at %s' % previous_meeting)
|
||||
return redirect('sessions_new', acronym=acronym)
|
||||
return redirect('ietf.secr.sreq.views.new', acronym=acronym)
|
||||
|
||||
initial = get_initial_session(previous_sessions)
|
||||
add_essential_people(group,initial)
|
||||
|
@ -606,7 +605,7 @@ def no_session(request, acronym):
|
|||
# skip if state is already notmeet
|
||||
if Session.objects.filter(group=group,meeting=meeting,status='notmeet'):
|
||||
messages.info(request, 'The group %s is already marked as not meeting' % group.acronym)
|
||||
return redirect('sessions')
|
||||
return redirect('ietf.secr.sreq.views.main')
|
||||
|
||||
session = Session(group=group,
|
||||
meeting=meeting,
|
||||
|
@ -634,7 +633,7 @@ def no_session(request, acronym):
|
|||
|
||||
# redirect
|
||||
messages.success(request, 'A message was sent to notify not having a session at IETF %s' % meeting.number)
|
||||
return redirect('sessions')
|
||||
return redirect('ietf.secr.sreq.views.main')
|
||||
|
||||
@role_required('Secretariat')
|
||||
def tool_status(request):
|
||||
|
@ -647,7 +646,7 @@ def tool_status(request):
|
|||
if request.method == 'POST':
|
||||
button_text = request.POST.get('submit', '')
|
||||
if button_text == 'Back':
|
||||
return redirect('sessions')
|
||||
return redirect('ietf.secr.sreq.views.main')
|
||||
|
||||
form = ToolStatusForm(request.POST)
|
||||
|
||||
|
@ -656,13 +655,13 @@ def tool_status(request):
|
|||
meeting.session_request_lock_message = form.cleaned_data['message']
|
||||
meeting.save()
|
||||
messages.success(request, 'Session Request Tool is now Locked')
|
||||
return redirect('sessions')
|
||||
return redirect('ietf.secr.sreq.views.main')
|
||||
|
||||
elif button_text == 'Unlock':
|
||||
meeting.session_request_lock_message = ''
|
||||
meeting.save()
|
||||
messages.success(request, 'Session Request Tool is now Unlocked')
|
||||
return redirect('sessions')
|
||||
return redirect('ietf.secr.sreq.views.main')
|
||||
|
||||
else:
|
||||
if is_locked:
|
||||
|
@ -694,9 +693,9 @@ def view(request, acronym, num = None):
|
|||
# if there are no session requests yet, redirect to new session request page
|
||||
if not sessions:
|
||||
if is_locked:
|
||||
return redirect('sessions')
|
||||
return redirect('ietf.secr.sreq.views.main')
|
||||
else:
|
||||
return redirect('sessions_new', acronym=acronym)
|
||||
return redirect('ietf.secr.sreq.views.new', acronym=acronym)
|
||||
|
||||
# TODO simulate activity records
|
||||
activities = [{'act_date':sessions[0].requested.strftime('%b %d, %Y'),
|
||||
|
|
|
@ -1,14 +1,16 @@
|
|||
from django.conf.urls import url
|
||||
|
||||
from ietf.secr.telechat import views
|
||||
from ietf.utils.urls import url
|
||||
|
||||
urlpatterns = [
|
||||
url(r'^$', 'ietf.secr.telechat.views.main', name='telechat'),
|
||||
url(r'^(?P<date>[0-9\-]+)/bash/$', 'ietf.secr.telechat.views.bash', name='telechat_bash'),
|
||||
url(r'^(?P<date>[0-9\-]+)/doc/$', 'ietf.secr.telechat.views.doc', name='telechat_doc'),
|
||||
url(r'^(?P<date>[0-9\-]+)/doc/(?P<name>[A-Za-z0-9.-]+)/$', 'ietf.secr.telechat.views.doc_detail', name='telechat_doc_detail'),
|
||||
url(r'^(?P<date>[0-9\-]+)/doc/(?P<name>[A-Za-z0-9.-]+)/(?P<nav>next|previous)/$', 'ietf.secr.telechat.views.doc_navigate',
|
||||
url(r'^$', views.main, name='telechat'),
|
||||
url(r'^(?P<date>[0-9\-]+)/bash/$', views.bash, name='telechat_bash'),
|
||||
url(r'^(?P<date>[0-9\-]+)/doc/$', views.doc, name='telechat_doc'),
|
||||
url(r'^(?P<date>[0-9\-]+)/doc/(?P<name>[A-Za-z0-9.-]+)/$', views.doc_detail, name='telechat_doc_detail'),
|
||||
url(r'^(?P<date>[0-9\-]+)/doc/(?P<name>[A-Za-z0-9.-]+)/(?P<nav>next|previous)/$', views.doc_navigate,
|
||||
name='telechat_doc_navigate'),
|
||||
url(r'^(?P<date>[0-9\-]+)/management/$', 'ietf.secr.telechat.views.management', name='telechat_management'),
|
||||
url(r'^(?P<date>[0-9\-]+)/minutes/$', 'ietf.secr.telechat.views.minutes', name='telechat_minutes'),
|
||||
url(r'^(?P<date>[0-9\-]+)/roll-call/$', 'ietf.secr.telechat.views.roll_call', name='telechat_roll_call'),
|
||||
url(r'^new/$', 'ietf.secr.telechat.views.new', name='telechat_new'),
|
||||
url(r'^(?P<date>[0-9\-]+)/management/$', views.management, name='telechat_management'),
|
||||
url(r'^(?P<date>[0-9\-]+)/minutes/$', views.minutes, name='telechat_minutes'),
|
||||
url(r'^(?P<date>[0-9\-]+)/roll-call/$', views.roll_call, name='telechat_roll_call'),
|
||||
url(r'^new/$', views.new),
|
||||
]
|
||||
|
|
|
@ -25,7 +25,7 @@
|
|||
<tbody>
|
||||
{% for item in results %}
|
||||
<tr class="{% cycle 'row1' 'row2' %} {{ item.state|lower }}">
|
||||
<td><a href="{% url "areas_view" name=item.acronym %}">{{ item.name }}</a></td>
|
||||
<td><a href="{% url "ietf.secr.areas.views.view" name=item.acronym %}">{{ item.name }}</a></td>
|
||||
<td>{{ item.acronym }}</td>
|
||||
<td>{{ item.state }}</td>
|
||||
</tr>
|
||||
|
|
|
@ -21,7 +21,7 @@
|
|||
<h2>Draft - View</h2>
|
||||
<table class="full-width">
|
||||
<tr><td>Document Name:</td><td>{{ draft.title }}</td></tr>
|
||||
<tr><td>Area:</td><td>{% if draft.group.parent %}<a href="{% url "areas_view" name=draft.group.parent.acronym %}">{{ draft.group.parent }}{% endif %}</td></tr>
|
||||
<tr><td>Area:</td><td>{% if draft.group.parent %}<a href="{% url "ietf.secr.areas.views.view" name=draft.group.parent.acronym %}">{{ draft.group.parent }}{% endif %}</td></tr>
|
||||
<tr><td>Group:</td><td>{% if draft.group %}<a href="{% url "groups_view" acronym=draft.group.acronym %}">{{ draft.group.acronym }}{% endif %}</td></tr>
|
||||
<tr><td>Area Director:</td><td>{{ draft.ad }}</td></tr>
|
||||
<tr><td>Shepherd:</td><td>{% if draft.shepherd %}{{ draft.shepherd.person }} <{{ draft.shepherd.address }}>{% else %}None{% endif %}</td></tr>
|
||||
|
@ -56,8 +56,8 @@
|
|||
<tr><td>RFC Number:</td><td>{{ draft.rfc_number|default_if_none:"" }}</td></tr>
|
||||
<tr><td>Comments:</td><td>{{ draft.internal_comments|default_if_none:"" }}</td></tr>
|
||||
<tr><td>Last Modified Date:</td><td>{{ draft.time }}</td></tr>
|
||||
<tr><td>Replaced by:</td><td>{% if draft.replaced_by %}<a href="{% url "drafts_view" id=draft.replaced_by.name %}">{{ draft.replaced_by.name }}{% endif %}</td></tr>
|
||||
<tr><td>Related Documents:</td><td>{% for item in draft.relateddocument_set.all %}{% if not forloop.first %}, {% endif %}{{ item.relationship }} <a href="{% url "drafts_view" id=item.target.document.pk %}">{{ item.target.name }}</a>{% endfor %}</td></tr>
|
||||
<tr><td>Replaced by:</td><td>{% if draft.replaced_by %}<a href="{% url "ietf.secr.drafts.views.view" id=draft.replaced_by.name %}">{{ draft.replaced_by.name }}{% endif %}</td></tr>
|
||||
<tr><td>Related Documents:</td><td>{% for item in draft.relateddocument_set.all %}{% if not forloop.first %}, {% endif %}{{ item.relationship }} <a href="{% url "ietf.secr.drafts.views.view" id=item.target.document.pk %}">{{ item.target.name }}</a>{% endfor %}</td></tr>
|
||||
<tr><td>Tags:</td>
|
||||
<td>{% for tag in draft.tags.all %}
|
||||
{% if not forloop.first %}, {% endif %}
|
||||
|
|
|
@ -33,7 +33,7 @@
|
|||
{% endcomment %}
|
||||
<tr><td>Primary Area:</td>
|
||||
<td>{% if not group.parent %}(No Data){% else %}
|
||||
<a href="{% url "areas_view" name=group.parent.acronym %}">{{ group.parent }}</a>
|
||||
<a href="{% url "ietf.secr.areas.views.view" name=group.parent.acronym %}">{{ group.parent }}</a>
|
||||
{% endif %}
|
||||
</td>
|
||||
</tr>
|
||||
|
|
|
@ -10,7 +10,7 @@
|
|||
<tbody>
|
||||
{% for item in results %}
|
||||
<tr class="{% cycle 'row1' 'row2' %}">
|
||||
<td><a href="{% url "drafts_view" id=item.name %}">{{ item.name }}</a></td>
|
||||
<td><a href="{% url "ietf.secr.drafts.views.view" id=item.name %}">{{ item.name }}</a></td>
|
||||
<td>{{item.group.acronym}}</td>
|
||||
<td>{{item.get_state}}</td>
|
||||
<td>{{item.intended_std_level}}</td>
|
||||
|
|
|
@ -16,8 +16,8 @@
|
|||
</td>
|
||||
<td>
|
||||
<h3>IDs and WGs Process</h3>
|
||||
<li> <a href="{% url "drafts" %}"><b>Drafts</b></a></li><br>
|
||||
<li> <a href="{% url "areas" %}"><b>Areas</b></a></li><br>
|
||||
<li> <a href="{% url "ietf.secr.drafts.views.search" %}"><b>Drafts</b></a></li><br>
|
||||
<li> <a href="{% url "ietf.secr.areas.views.list_areas" %}"><b>Areas</b></a></li><br>
|
||||
<li> <a href="{% url "groups" %}"><b>Groups</b></a></li><br>
|
||||
<li> <a href="{% url "rolodex" %}"><b>Rolodex</b></a></li><br>
|
||||
<li> <a href="{% url "roles" %}"><b>Roles</b></a></li><br>
|
||||
|
@ -27,10 +27,10 @@
|
|||
<td>
|
||||
<h3>Meetings and Proceedings</h3>
|
||||
<li> <a href="{% url "drafts_dates" %}"><b>Draft Submission Dates</b></a></li><br>
|
||||
<li> <a href="{% url "sessions" %}"><b>Session Requests</b></a></li><br>
|
||||
<li> <a href="{% url "ietf.secr.sreq.views.main" %}"><b>Session Requests</b></a></li><br>
|
||||
<li> <a href="{% url "proceedings" %}"><b>Meeting Materials Manager (Proceedings)</b></a></li><br>
|
||||
<li> <a href="{% url "meetings" %}"><b>Meeting Manager</b></a></li><br>
|
||||
<li> <a href="{% url "meetings_blue_sheet_redirect" %}"><b>Blue Sheets</b></a></li><br>
|
||||
<li> <a href="{% url "ietf.secr.meetings.views.main" %}"><b>Meeting Manager</b></a></li><br>
|
||||
<li> <a href="{% url "ietf.secr.meetings.views.blue_sheet_redirect" %}"><b>Blue Sheets</b></a></li><br>
|
||||
</td>
|
||||
<td>
|
||||
<h3>IPR</h3>
|
||||
|
@ -45,7 +45,7 @@
|
|||
<tr valign="top">
|
||||
<td>
|
||||
<h3>Section 1</h3>
|
||||
<li> <a href="{% url "sessions" %}"><b>Session Requests</b></a></li><br>
|
||||
<li> <a href="{% url "ietf.secr.sreq.views.main" %}"><b>Session Requests</b></a></li><br>
|
||||
<li> <a href="{% url "proceedings" %}"><b>Meeting Material Manager</b></a></li><br>
|
||||
<li> <a href="{% url "announcement" %}"><b>Announcements</b></a></li><br>
|
||||
</td>
|
||||
|
|
|
@ -11,9 +11,9 @@
|
|||
{% endblock %}
|
||||
|
||||
{% block breadcrumbs %}{{ block.super }}
|
||||
» <a href="{% url "meetings" %}">Meetings</a>
|
||||
» <a href="{% url "meetings_view" meeting_id=meeting.number %}">{{ meeting.number }}</a>
|
||||
» <a href="{% url "meetings_select" meeting_id=meeting.number schedule_name=schedule.name %}">{{ schedule.name }}</a>
|
||||
» <a href="{% url "ietf.secr.meetings.views.main" %}">Meetings</a>
|
||||
» <a href="{% url "ietf.secr.meetings.views.view" meeting_id=meeting.number %}">{{ meeting.number }}</a>
|
||||
» <a href="{% url "ietf.secr.meetings.views.select" meeting_id=meeting.number schedule_name=schedule.name %}">{{ schedule.name }}</a>
|
||||
» Rooms and Times
|
||||
{% endblock %}
|
||||
|
||||
|
@ -22,9 +22,9 @@
|
|||
|
||||
<div id="nav" class="rooms-times-nav">
|
||||
<ul id="list-nav">
|
||||
<li id="nav-room" class="leftmost"><a href="{% url "meetings_rooms" meeting_id=meeting.number schedule_name=schedule.name %}">Rooms</a></li>
|
||||
<li id="nav-time"><a href="{% url "meetings_times" meeting_id=meeting.number schedule_name=schedule.name %}">Times</a></li>
|
||||
<li id="nav-non-session"><a href="{% url "meetings_non_session" meeting_id=meeting.number schedule_name=schedule.name %}">Non-Session</a></li>
|
||||
<li id="nav-room" class="leftmost"><a href="{% url "ietf.secr.meetings.views.rooms" meeting_id=meeting.number schedule_name=schedule.name %}">Rooms</a></li>
|
||||
<li id="nav-time"><a href="{% url "ietf.secr.meetings.views.times" meeting_id=meeting.number schedule_name=schedule.name %}">Times</a></li>
|
||||
<li id="nav-non-session"><a href="{% url "ietf.secr.meetings.views.non_session" meeting_id=meeting.number schedule_name=schedule.name %}">Non-Session</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
|
|
|
@ -21,7 +21,7 @@
|
|||
<p>Use this to generate blue sheets for meeting sessions.</p>
|
||||
<ul class="none">
|
||||
<li>
|
||||
<form style="display:inline" method="post" action="{% url "meetings_blue_sheet_generate" meeting_id=meeting.number%}">{% csrf_token %}
|
||||
<form style="display:inline" method="post" action="{% url "ietf.secr.meetings.views.blue_sheet_generate" meeting_id=meeting.number%}">{% csrf_token %}
|
||||
<input type="submit" value="Generate Blue Sheets">
|
||||
</form>
|
||||
Last run:
|
||||
|
|
|
@ -29,7 +29,7 @@
|
|||
</div> <!-- inline-related -->
|
||||
<div class="button-group">
|
||||
<ul id="proceedings-interim-buttons">
|
||||
<li><button onclick="window.location='{% url "meetings_add" %}'">Create New Meeting</button></li>
|
||||
<li><button onclick="window.location='{% url "ietf.secr.meetings.views.add" %}'">Create New Meeting</button></li>
|
||||
</ul>
|
||||
</div> <!-- button-group -->
|
||||
</div> <!-- module -->
|
||||
|
|
|
@ -29,13 +29,13 @@
|
|||
<td>{{ item.session.short }}</td>
|
||||
<td>{{ item.session.group.acronym }}</td>
|
||||
{% if item.type.slug != 'break' and item.type.slug != 'registration' %}
|
||||
<td><a href="{% url "meetings_non_session_edit" meeting_id=meeting.number schedule_name=schedule.name slot_id=item.id %}">{{ item.location }}</a></td>
|
||||
<td><a href="{% url "ietf.secr.meetings.views.non_session_edit" meeting_id=meeting.number schedule_name=schedule.name slot_id=item.id %}">{{ item.location }}</a></td>
|
||||
{% else %}
|
||||
<td>{{ item.location }}</td>
|
||||
{% endif %}
|
||||
<td>{{ item.show_location }}</td>
|
||||
<td>{{ item.type }}</td>
|
||||
<td><a href="{% url "meetings_non_session_delete" meeting_id=meeting.number schedule_name=schedule.name slot_id=item.id %}">Delete</a></td>
|
||||
<td><a href="{% url "ietf.secr.meetings.views.non_session_delete" meeting_id=meeting.number schedule_name=schedule.name slot_id=item.id %}">Delete</a></td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
</tbody>
|
||||
|
|
|
@ -36,10 +36,10 @@
|
|||
{% endblock %}
|
||||
|
||||
{% block breadcrumbs %}{{ block.super }}
|
||||
» <a href="{% url "meetings" %}">Meetings</a>
|
||||
» <a href="{% url "meetings_view" meeting_id=meeting.number %}">{{ meeting.number }}</a>
|
||||
» <a href="{% url "meetings_select" meeting_id=meeting.number schedule_name=schedule.name %}">{{ schedule.name }}</a>
|
||||
» <a href="{% url "meetings_select_group" meeting_id=meeting.number schedule_name=schedule.name %}">Select</a>
|
||||
» <a href="{% url "ietf.secr.meetings.views.main" %}">Meetings</a>
|
||||
» <a href="{% url "ietf.secr.meetings.views.view" meeting_id=meeting.number %}">{{ meeting.number }}</a>
|
||||
» <a href="{% url "ietf.secr.meetings.views.select" meeting_id=meeting.number schedule_name=schedule.name %}">{{ schedule.name }}</a>
|
||||
» <a href="{% url "ietf.secr.meetings.views.select_group" meeting_id=meeting.number schedule_name=schedule.name %}">Select</a>
|
||||
» {{ group.acronym }}
|
||||
{% endblock %}
|
||||
|
||||
|
@ -71,8 +71,8 @@
|
|||
<div class="button-group">
|
||||
<ul>
|
||||
<li><button type="submit" name="submit" value="Save">Save</button></li>
|
||||
<li><button type="button" onclick="if (window.confirm('This group will be permanently removed from the agenda and scheduling tool')) { window.location='{% url "meetings_remove_session" meeting_id=meeting.number acronym=group.acronym %}' };">Remove this group from agenda</button></li>
|
||||
<li><button type="button" onclick="window.location='{% url "meetings_select_group" meeting_id=meeting.number schedule_name=schedule.name %}'">Back</button></li>
|
||||
<li><button type="button" onclick="if (window.confirm('This group will be permanently removed from the agenda and scheduling tool')) { window.location='{% url "ietf.secr.meetings.views.remove_session" meeting_id=meeting.number acronym=group.acronym %}' };">Remove this group from agenda</button></li>
|
||||
<li><button type="button" onclick="window.location='{% url "ietf.secr.meetings.views.select_group" meeting_id=meeting.number schedule_name=schedule.name %}'">Back</button></li>
|
||||
</ul>
|
||||
</div> <!-- button-group -->
|
||||
|
||||
|
|
|
@ -20,8 +20,8 @@
|
|||
|
||||
<div class="button-group">
|
||||
<ul>
|
||||
<li><button onclick="window.location='{% url "meetings_rooms" meeting_id=meeting.number schedule_name=schedule.name %}'">Rooms and Times</button></li>
|
||||
<li><button onclick="window.location='{% url "meetings_select_group" meeting_id=meeting.number schedule_name=schedule.name %}'">Schedule WG Sessions</button></li>
|
||||
<li><button onclick="window.location='{% url "ietf.secr.meetings.views.rooms" meeting_id=meeting.number schedule_name=schedule.name %}'">Rooms and Times</button></li>
|
||||
<li><button onclick="window.location='{% url "ietf.secr.meetings.views.select_group" meeting_id=meeting.number schedule_name=schedule.name %}'">Schedule WG Sessions</button></li>
|
||||
<li><button type="button" onclick="window.location='../'">Back</button></li>
|
||||
</ul>
|
||||
</div> <!-- button-group -->
|
||||
|
|
|
@ -8,9 +8,9 @@
|
|||
{% endblock %}
|
||||
|
||||
{% block breadcrumbs %}{{ block.super }}
|
||||
» <a href="{% url "meetings" %}">Meetings</a>
|
||||
» <a href="{% url "meetings_view" meeting_id=meeting.number %}">{{ meeting.number }}</a>
|
||||
» <a href="{% url "meetings_select" meeting_id=meeting.number schedule_name=schedule.name %}">{{ schedule.name }}</a>
|
||||
» <a href="{% url "ietf.secr.meetings.views.main" %}">Meetings</a>
|
||||
» <a href="{% url "ietf.secr.meetings.views.view" meeting_id=meeting.number %}">{{ meeting.number }}</a>
|
||||
» <a href="{% url "ietf.secr.meetings.views.select" meeting_id=meeting.number schedule_name=schedule.name %}">{{ schedule.name }}</a>
|
||||
» Select Group
|
||||
{% endblock %}
|
||||
|
||||
|
@ -51,7 +51,7 @@
|
|||
<h2>Scheduled Sessions</h2>
|
||||
<ul id="id_scheduled_sessions">
|
||||
{% for group in scheduled_groups %}
|
||||
<li><a href="{% url "meetings_schedule" meeting_id=meeting.number schedule_name=schedule.name acronym=group.acronym %}">{{ group.acronym }}</a></li>
|
||||
<li><a href="{% url "ietf.secr.meetings.views.schedule" meeting_id=meeting.number schedule_name=schedule.name acronym=group.acronym %}">{{ group.acronym }}</a></li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
</div><!-- inline-related-->
|
||||
|
|
|
@ -22,8 +22,8 @@
|
|||
<td>{{ item.time|date:"D" }}</td>
|
||||
<td>{{ item.time|date:"H:i" }} - {{ item.end_time|date:"H:i" }}</td>
|
||||
<td>{{ item.name }}</td>
|
||||
<td><a href="{% url "meetings_times_edit" meeting_id=meeting.number schedule_name=schedule.name time=item.time|date:"Y:m:d:H:i" %}">Edit</a></td>
|
||||
<td><a href="{% url "meetings_times_delete" meeting_id=meeting.number schedule_name=schedule.name time=item.time|date:"Y:m:d:H:i" %}" onclick="return window.confirm('Are you sure you want to delete this timeslot? Any sessions assigned to this timeslot will be unscheduled.');">Delete</a></td>
|
||||
<td><a href="{% url "ietf.secr.meetings.views.times_edit" meeting_id=meeting.number schedule_name=schedule.name time=item.time|date:"Y:m:d:H:i" %}">Edit</a></td>
|
||||
<td><a href="{% url "ietf.secr.meetings.views.times_delete" meeting_id=meeting.number schedule_name=schedule.name time=item.time|date:"Y:m:d:H:i" %}" onclick="return window.confirm('Are you sure you want to delete this timeslot? Any sessions assigned to this timeslot will be unscheduled.');">Delete</a></td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
</tbody>
|
||||
|
|
|
@ -34,9 +34,9 @@
|
|||
|
||||
<div class="button-group">
|
||||
<ul>
|
||||
<li><button onclick="window.location='{% url "meetings_edit_meeting" meeting_id=meeting.number %}'">Edit</button></li>
|
||||
<li><button onclick="window.location='{% url "meetings_notifications" meeting_id=meeting.number %}'">Notifications</button></li>
|
||||
<li><button onclick="window.location='{% url "meetings_blue_sheet" meeting_id=meeting.number %}'">Blue Sheets</button></li>
|
||||
<li><button onclick="window.location='{% url "ietf.secr.meetings.views.edit_meeting" meeting_id=meeting.number %}'">Edit</button></li>
|
||||
<li><button onclick="window.location='{% url "ietf.secr.meetings.views.notifications" meeting_id=meeting.number %}'">Notifications</button></li>
|
||||
<li><button onclick="window.location='{% url "ietf.secr.meetings.views.blue_sheet" meeting_id=meeting.number %}'">Blue Sheets</button></li>
|
||||
<li><form id="id_schedule_selector">
|
||||
<select name="forma" onchange="location = this.options[this.selectedIndex].value;">
|
||||
<option value="">Select a schedule...</option>
|
||||
|
|
|
@ -35,7 +35,7 @@
|
|||
{% if user|has_role:"Secretariat" %}
|
||||
<div class="button-group">
|
||||
<ul id="proceedings-meeting-buttons">
|
||||
<li><button onclick="window.location='{% url "meetings_add" %}'">Add</button></li>
|
||||
<li><button onclick="window.location='{% url "ietf.secr.meetings.views.add" %}'">Add</button></li>
|
||||
</ul>
|
||||
</div> <!-- button-group -->
|
||||
{% endif %}
|
||||
|
|
|
@ -44,7 +44,7 @@
|
|||
<td>{{ role.name }} </td>
|
||||
<td>
|
||||
{% if role.group.type.slug == "area" %}
|
||||
<a href="{% url "areas_view" name=role.group.acronym %}">{{ role.group.acronym }}{% if role.group.state.slug == "conclude" %} (concluded){% endif %}</a>
|
||||
<a href="{% url "ietf.secr.areas.views.view" name=role.group.acronym %}">{{ role.group.acronym }}{% if role.group.state.slug == "conclude" %} (concluded){% endif %}</a>
|
||||
{% else %}
|
||||
<a href="{% url "groups_view" acronym=role.group.acronym %}">{{ role.group.acronym }}{% if role.group.state.slug == "conclude" %} (concluded){% endif %}</a>
|
||||
{% endif %}
|
||||
|
|
|
@ -8,7 +8,7 @@
|
|||
{% endblock %}
|
||||
|
||||
{% block breadcrumbs %}{{ block.super }}
|
||||
» <a href="{% url "sessions" %}">Sessions</a>
|
||||
» <a href="{% url "ietf.secr.sreq.views.main" %}">Sessions</a>
|
||||
» <a href="../">New</a>
|
||||
» Session Request Confirmation
|
||||
{% endblock %}
|
||||
|
|
|
@ -22,9 +22,9 @@
|
|||
Sessions Request Tool: IETF {{ meeting.number }}
|
||||
{% if user|has_role:"Secretariat" %}
|
||||
{% if is_locked %}
|
||||
<span class="locked"><a href="{% url "sessions_tool_status" %}">Tool Status: Locked</a></span>
|
||||
<span class="locked"><a href="{% url "ietf.secr.sreq.views.tool_status" %}">Tool Status: Locked</a></span>
|
||||
{% else %}
|
||||
<span class="unlocked"><a href="{% url "sessions_tool_status" %}">Tool Status: Unlocked</a></span>
|
||||
<span class="unlocked"><a href="{% url "ietf.secr.sreq.views.tool_status" %}">Tool Status: Unlocked</a></span>
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
</h2>
|
||||
|
@ -34,7 +34,7 @@
|
|||
<ul>
|
||||
{% for group in unscheduled_groups %}
|
||||
<li>
|
||||
<a href="{% url "sessions_new" acronym=group.acronym %}">{{ group.acronym }}</a>
|
||||
<a href="{% url "ietf.secr.sreq.views.new" acronym=group.acronym %}">{{ group.acronym }}</a>
|
||||
{% if group.not_meeting %}
|
||||
<span class="required"> (Currently, this group does not plan to hold a session at IETF {{ meeting.number }})</span>
|
||||
{% endif %}
|
||||
|
@ -49,7 +49,7 @@
|
|||
<p>The list below includes those working groups for which you or your co-chair has requested sessions at the upcoming IETF meeting. You can click on an acronym to initiate changes to a session, or cancel a session.</p>
|
||||
<ul>
|
||||
{% for group in scheduled_groups %}
|
||||
<li><a href="{% url "sessions_view" acronym=group.acronym %}">{{ group.acronym }} - {{ group.status_message }}</a></li>
|
||||
<li><a href="{% url "ietf.secr.sreq.views.view" acronym=group.acronym %}">{{ group.acronym }} - {{ group.status_message }}</a></li>
|
||||
{% empty %}
|
||||
<i>NONE</i>
|
||||
{% endfor %}
|
||||
|
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue