From 9369255764530f0fb027f4a0ea2b76ebfe08de96 Mon Sep 17 00:00:00 2001
From: Henrik Levkowetz <henrik@levkowetz.com>
Date: Mon, 6 Nov 2017 17:20:21 +0000
Subject: [PATCH] In order to make it possible to enter meeting important dates
 and have the IESG see and approve them before they are generally visible, a
 flag has been added to the Meeting model, and code has been added to show the
 important dates as appropriate.  A menu link to the important dates has also
 been added.  - Legacy-Id: 14315

---
 .../0059_meeting_show_important_dates.py      | 34 +++++++++++++++++++
 ietf/meeting/models.py                        |  1 +
 ietf/meeting/views.py                         | 10 ++++--
 ietf/templates/base/menu.html                 |  3 +-
 4 files changed, 45 insertions(+), 3 deletions(-)
 create mode 100644 ietf/meeting/migrations/0059_meeting_show_important_dates.py

diff --git a/ietf/meeting/migrations/0059_meeting_show_important_dates.py b/ietf/meeting/migrations/0059_meeting_show_important_dates.py
new file mode 100644
index 000000000..5016ce251
--- /dev/null
+++ b/ietf/meeting/migrations/0059_meeting_show_important_dates.py
@@ -0,0 +1,34 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.10.8 on 2017-11-06 08:26
+from __future__ import unicode_literals
+
+import datetime
+
+from django.db import migrations, models
+
+def forwards(apps, schema_editor):
+    Meeting = apps.get_model('meeting', 'Meeting')
+    stop_date = datetime.date.today() + datetime.timedelta(days=180)
+    for m in Meeting.objects.filter(show_important_dates=False):
+        if m.date < today:
+            m.show_important_dates = True
+            m.save()
+
+def backwards(apps, schema_editor):
+    pass
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('meeting', '0058_set_new_field_meeting_days_values'),
+    ]
+
+    operations = [
+        migrations.AddField(
+            model_name='meeting',
+            name='show_important_dates',
+            field=models.BooleanField(default=False),
+        ),
+        migrations.RunPython(forwards, backwards),
+    ]
diff --git a/ietf/meeting/models.py b/ietf/meeting/models.py
index f294c7cd4..d293b8441 100644
--- a/ietf/meeting/models.py
+++ b/ietf/meeting/models.py
@@ -93,6 +93,7 @@ class Meeting(models.Model):
     proceedings_final = models.BooleanField(default=False, help_text=u"Are the proceedings for this meeting complete?")
     acknowledgements = models.TextField(blank=True, help_text="Acknowledgements for use in meeting proceedings.  Use ReStructuredText markup.")
     overview = models.ForeignKey(DBTemplate, related_name='overview', null=True, editable=False)
+    show_important_dates = models.BooleanField(default=False)
 
     def __unicode__(self):
         if self.type_id == "ietf":
diff --git a/ietf/meeting/views.py b/ietf/meeting/views.py
index 41114b500..08829d182 100644
--- a/ietf/meeting/views.py
+++ b/ietf/meeting/views.py
@@ -2181,16 +2181,22 @@ def api_import_recordings(request, number):
 
 def important_dates(request, num=None):
     assert num is None or num.isdigit()
+    preview_roles = ['Area Director', 'Secretariat', 'IETF Chair', 'IAD', ]
 
     meeting = get_ietf_meeting(num)
     if not meeting:
         raise Http404
     base_num = int(meeting.number)
 
-    meetings=[meeting]
+    user = request.user
+    today = datetime.date.today()
+    meetings = []
+    if meeting.show_important_dates or meeting.date < today:
+        meetings.append(meeting)
     for i in range(1,3):
         future_meeting = get_ietf_meeting(base_num+i)
-        if future_meeting:
+        if future_meeting and ( future_meeting.show_important_dates
+            or (user and user.is_authenticated and has_role(user, preview_roles))):
             meetings.append(future_meeting)
 
     context={'meetings':meetings}
diff --git a/ietf/templates/base/menu.html b/ietf/templates/base/menu.html
index 9b9078b2b..5cb4a9bf8 100644
--- a/ietf/templates/base/menu.html
+++ b/ietf/templates/base/menu.html
@@ -96,7 +96,8 @@
 
   <li><a href="/meeting/agenda/">Agenda</a></li>
   <li><a href="/meeting/materials/">Materials</a></li>
-  <li><a href="/meeting/floor-plan/">Floor Plan</a></li>
+  <li><a href="/meeting/floor-plan/">Floor plan</a></li>
+  <li><a href="{% url 'ietf.meeting.views.important_dates' %}">Important dates</a></li>
   <li><a href="https://www.ietf.org/meeting/proceedings.html">Past proceedings</a></li>
   <li><a href="/meeting/upcoming">Upcoming</a></li>
   <li><a href="/meeting/past">Past</a></li>