commit 58726968344ee812746929f59c89fece65325c1b Author: Henrik Levkowetz Date: Fri May 4 12:37:28 2007 +0000 Moving ietf to trunk/ietf [[Split portion of a mixed commit.]] - Legacy-Id: 96.1 diff --git a/.gitignore b/.gitignore new file mode 100644 index 000000000..674deb69e --- /dev/null +++ b/.gitignore @@ -0,0 +1,17 @@ +# A simulation of Subversion default ignores, generated by reposurgeon. +*.o +*.lo +*.la +*.al +*.libs +*.so +*.so.[0-9]* +*.a +*.pyc +*.pyo +*.rej +*~ +*.#* +.*.swp +.DS_store +# Simulated Subversion default ignores end here diff --git a/ietf/.gitignore b/ietf/.gitignore new file mode 100644 index 000000000..c7013ced9 --- /dev/null +++ b/ietf/.gitignore @@ -0,0 +1,2 @@ +/*.pyc +/settings_local.py diff --git a/ietf/__init__.py b/ietf/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/ietf/agenda/.gitignore b/ietf/agenda/.gitignore new file mode 100644 index 000000000..c7013ced9 --- /dev/null +++ b/ietf/agenda/.gitignore @@ -0,0 +1,2 @@ +/*.pyc +/settings_local.py diff --git a/ietf/agenda/__init__.py b/ietf/agenda/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/ietf/agenda/models.py b/ietf/agenda/models.py new file mode 100644 index 000000000..71a836239 --- /dev/null +++ b/ietf/agenda/models.py @@ -0,0 +1,3 @@ +from django.db import models + +# Create your models here. diff --git a/ietf/agenda/views.py b/ietf/agenda/views.py new file mode 100644 index 000000000..60f00ef0e --- /dev/null +++ b/ietf/agenda/views.py @@ -0,0 +1 @@ +# Create your views here. diff --git a/ietf/announcements/.gitignore b/ietf/announcements/.gitignore new file mode 100644 index 000000000..c7013ced9 --- /dev/null +++ b/ietf/announcements/.gitignore @@ -0,0 +1,2 @@ +/*.pyc +/settings_local.py diff --git a/ietf/announcements/__init__.py b/ietf/announcements/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/ietf/announcements/models.py b/ietf/announcements/models.py new file mode 100644 index 000000000..e4e20af08 --- /dev/null +++ b/ietf/announcements/models.py @@ -0,0 +1,83 @@ +from django.db import models +from ietf.idtracker.models import PersonOrOrgInfo, ChairsHistory + +# I don't know why the IETF database mostly stores times +# as char(N) instead of TIME. Until it's important, let's +# keep them as char here too. + +class AnnouncedFrom(models.Model): + announced_from_id = models.AutoField(primary_key=True) + announced_from_value = models.CharField(blank=True, maxlength=255) + announced_from_email = models.CharField(blank=True, maxlength=255) + def __str__(self): + return self.announced_from_value + class Meta: + db_table = 'announced_from' + class Admin: + pass + +class AnnouncedTo(models.Model): + announced_to_id = models.AutoField(primary_key=True) + announced_to_value = models.CharField(blank=True, maxlength=255) + announced_to_email = models.CharField(blank=True, maxlength=255) + def __str__(self): + return self.announced_to_value + class Meta: + db_table = 'announced_to' + class Admin: + pass + +class Announcement(models.Model): + announcement_id = models.AutoField(primary_key=True) + announced_by = models.ForeignKey(PersonOrOrgInfo, raw_id_admin=True, db_column='announced_by') + announced_date = models.DateField(null=True, blank=True) + announced_time = models.CharField(blank=True, maxlength=20) + text = models.TextField(blank=True, db_column='announcement_text') + announced_from = models.ForeignKey(AnnouncedFrom) + cc = models.CharField(blank=True, maxlength=255) + subject = models.CharField(blank=True, maxlength=255) + extra = models.TextField(blank=True) + announced_to = models.ForeignKey(AnnouncedTo) + nomcom = models.BooleanField() + nomcom_chair_id = models.IntegerField(null=True, blank=True) # ForeignKey to nomcom chairs + manually_added = models.BooleanField(db_column='manualy_added') + other_val = models.CharField(blank=True, maxlength=255) + def __str__(self): + return "Announcement from %s to %s on %s %s" % (self.announced_from, self.announced_to, self.announced_date, self.announced_time) + def from_name(self): + if self.announced_from_id == 99: + return self.other_val + if self.announced_from_id == 14: # sigh hardcoding + return ChairsHistory.objects.all().get(id=self.nomcom_chair_id).person + return self.announced_from + class Meta: + db_table = 'announcements' + class Admin: + pass + +class ScheduledAnnouncement(models.Model): + mail_sent = models.BooleanField() + to_be_sent_date = models.DateField(null=True, blank=True) + to_be_sent_time = models.CharField(blank=True, maxlength=50) + scheduled_by = models.CharField(blank=True, maxlength=100) + scheduled_date = models.DateField(null=True, blank=True) + scheduled_time = models.CharField(blank=True, maxlength=50) + subject = models.CharField(blank=True, maxlength=255) + to_val = models.CharField(blank=True, maxlength=255) + from_val = models.CharField(blank=True, maxlength=255) + cc_val = models.TextField(blank=True) + body = models.TextField(blank=True) + actual_sent_date = models.DateField(null=True, blank=True) + actual_sent_time = models.CharField(blank=True, maxlength=50) + first_q = models.IntegerField(null=True, blank=True) + second_q = models.IntegerField(null=True, blank=True) + note = models.TextField(blank=True) + content_type = models.CharField(blank=True, maxlength=255) + replyto = models.CharField(blank=True, maxlength=255) + bcc_val = models.CharField(blank=True, maxlength=255) + def __str__(self): + return "Scheduled Announcement from %s to %s on %s %s" % (self.from_val, self.to_val, self.to_be_sent_date, self.to_be_sent_time) + class Meta: + db_table = 'scheduled_announcements' + class Admin: + pass diff --git a/ietf/announcements/urls.py b/ietf/announcements/urls.py new file mode 100644 index 000000000..7b00235a0 --- /dev/null +++ b/ietf/announcements/urls.py @@ -0,0 +1,10 @@ +from django.conf.urls.defaults import * +from ietf.announcements.models import Announcement + +nomcom_dict = { + 'queryset': Announcement.objects.all().filter(nomcom=True) +} + +urlpatterns = patterns('', + (r'^nomcom/(?P\d+)/$', 'django.views.generic.list_detail.object_detail', nomcom_dict) +) diff --git a/ietf/announcements/views.py b/ietf/announcements/views.py new file mode 100644 index 000000000..60f00ef0e --- /dev/null +++ b/ietf/announcements/views.py @@ -0,0 +1 @@ +# Create your views here. diff --git a/ietf/bin/.gitignore b/ietf/bin/.gitignore new file mode 100644 index 000000000..c7013ced9 --- /dev/null +++ b/ietf/bin/.gitignore @@ -0,0 +1,2 @@ +/*.pyc +/settings_local.py diff --git a/ietf/bin/graphall b/ietf/bin/graphall new file mode 100755 index 000000000..eae75546b --- /dev/null +++ b/ietf/bin/graphall @@ -0,0 +1,17 @@ +#!/bin/sh +# +# Requires modelviz.py from +# http://code.djangoproject.com/wiki/DjangoGraphviz +# +PYTHONPATH=`dirname $PWD` +export PYTHONPATH +DJANGO_SETTINGS_MODULE=ietf/settings +export DJANGO_SETTINGS_MODULE +for d in * +do + if grep models.Model $d/models.py > /dev/null 2>&1 + then + python modelviz.py $d + fi +done > models.dot +unflatten -f -l 10 models.dot | dot -Tps -Gsize=10.5,8.0 -Gmargin=0.25 -Gratio=auto -Grotate=90 | sed -e 's/ Bold/-Bold/' > models.ps diff --git a/ietf/bin/redirect-dump b/ietf/bin/redirect-dump new file mode 100755 index 000000000..03fd2f2c3 --- /dev/null +++ b/ietf/bin/redirect-dump @@ -0,0 +1,2 @@ +#!/bin/sh +python manage.py dumpdata --format=xml redirects | xmllint --format - diff --git a/ietf/database-notes/.gitignore b/ietf/database-notes/.gitignore new file mode 100644 index 000000000..c7013ced9 --- /dev/null +++ b/ietf/database-notes/.gitignore @@ -0,0 +1,2 @@ +/*.pyc +/settings_local.py diff --git a/ietf/database-notes/generated-model b/ietf/database-notes/generated-model new file mode 100644 index 000000000..48ee1ca17 --- /dev/null +++ b/ietf/database-notes/generated-model @@ -0,0 +1,1440 @@ +# This is an auto-generated Django model module. +# You'll have to do the following manually to clean this up: +# * Rearrange models' order +# * Make sure each model has one field with primary_key=True +# Feel free to rename the models, but don't rename db_table values or field names. +# +# Also note: You'll have to insert the output of 'django-admin.py sqlcustom [appname]' +# into your database. + +from django.db import models + +class Acronym(models.Model): + acronym_id = models.IntegerField(primary_key=True) + acronym = models.CharField(blank=True, unique=True, maxlength=12) + name = models.CharField(unique=True, maxlength=100) + name_key = models.CharField(maxlength=50) + class Meta: + db_table = 'acronym' + +class AgendaCat(models.Model): + agenda_cat_id = models.IntegerField(primary_key=True) + agenda_cat_value = models.CharField(blank=True, maxlength=100) + class Meta: + db_table = 'agenda_cat' + +class AgendaItems(models.Model): + agenda_item_id = models.IntegerField(primary_key=True) + telechat_id = models.IntegerField() + agenda_cat_id = models.IntegerField(null=True, blank=True) + ballot_id = models.IntegerField() + group_acronym_id = models.IntegerField() + agenda_item_status_id = models.IntegerField(null=True, blank=True) + iana_note = models.TextField(blank=True) + other_note = models.TextField(blank=True) + agenda_note_cat_id = models.IntegerField(null=True, blank=True) + note_draft_by = models.IntegerField(null=True, blank=True) + item_num = models.IntegerField(null=True, blank=True) + total_num = models.IntegerField(null=True, blank=True) + agenda_item_gr_status_id = models.IntegerField(null=True, blank=True) + wg_action_status = models.IntegerField(null=True, blank=True) + wg_action_status_sub = models.IntegerField(null=True, blank=True) + class Meta: + db_table = 'agenda_items' + +class AllId(models.Model): + id_document_tag = models.IntegerField(primary_key=True) + filename = models.CharField(blank=True, maxlength=100) + last_active_revision = models.CharField(blank=True, maxlength=2) + class Meta: + db_table = 'all_id' + +class AnnouncedFrom(models.Model): + announced_from_id = models.IntegerField(primary_key=True) + announced_from_value = models.CharField(blank=True, maxlength=255) + announced_from_email = models.CharField(blank=True, maxlength=255) + class Meta: + db_table = 'announced_from' + +class AnnouncedTo(models.Model): + announced_to_id = models.IntegerField(primary_key=True) + announced_to_value = models.CharField(blank=True, maxlength=255) + announced_to_email = models.CharField(blank=True, maxlength=255) + class Meta: + db_table = 'announced_to' + +class Announcements(models.Model): + announcement_id = models.IntegerField(primary_key=True) + announced_by = models.IntegerField() + announced_date = models.DateField(null=True, blank=True) + announced_time = models.CharField(blank=True, maxlength=20) + announcement_text = models.TextField(blank=True) + announced_from_id = models.IntegerField(null=True, blank=True) + cc = models.CharField(blank=True, maxlength=255) + subject = models.CharField(blank=True, maxlength=255) + extra = models.TextField(blank=True) + announced_to_id = models.IntegerField(null=True, blank=True) + nomcom = models.IntegerField(null=True, blank=True) + nomcom_chair_id = models.IntegerField(null=True, blank=True) + manualy_added = models.IntegerField(null=True, blank=True) + other_val = models.CharField(blank=True, maxlength=255) + class Meta: + db_table = 'announcements' + +class AreaDirectors(models.Model): + id = models.IntegerField(primary_key=True) + area_acronym_id = models.IntegerField(unique=True) + person_or_org_tag = models.IntegerField(unique=True) + class Meta: + db_table = 'area_directors' + +class AreaGroup(models.Model): + id = models.IntegerField(primary_key=True) + area_acronym_id = models.IntegerField(unique=True) + group_acronym_id = models.IntegerField(unique=True) + class Meta: + db_table = 'area_group' + +class AreaStatus(models.Model): + status_id = models.IntegerField(primary_key=True) + status_value = models.CharField(maxlength=25) + class Meta: + db_table = 'area_status' + +class Areas(models.Model): + area_acronym_id = models.IntegerField(primary_key=True) + start_date = models.DateField() + concluded_date = models.DateField(null=True, blank=True) + status_id = models.IntegerField() + comments = models.TextField(blank=True) + last_modified_date = models.DateField() + extra_email_addresses = models.TextField(blank=True) + class Meta: + db_table = 'areas' + +class BallotInfo(models.Model): + ballot_id = models.IntegerField(primary_key=True) + active = models.IntegerField() + an_sent = models.IntegerField() + an_sent_date = models.DateField(null=True, blank=True) + an_sent_by = models.IntegerField(null=True, blank=True) + defer = models.IntegerField(null=True, blank=True) + defer_by = models.IntegerField(null=True, blank=True) + defer_date = models.DateField(null=True, blank=True) + approval_text = models.TextField(blank=True) + last_call_text = models.TextField(blank=True) + ballot_writeup = models.TextField(blank=True) + ballot_issued = models.IntegerField(null=True, blank=True) + class Meta: + db_table = 'ballot_info' + +class Ballots(models.Model): + ballot_id = models.IntegerField(primary_key=True) + ad_id = models.IntegerField(primary_key=True) + yes_col = models.IntegerField() + no_col = models.IntegerField() + abstain = models.IntegerField() + approve = models.IntegerField() + discuss = models.IntegerField() + recuse = models.IntegerField(null=True, blank=True) + class Meta: + db_table = 'ballots' + +class BallotsComment(models.Model): + ballot_id = models.IntegerField(primary_key=True) + ad_id = models.IntegerField(primary_key=True) + comment_date = models.DateField() + revision = models.CharField(maxlength=2) + active = models.IntegerField() + comment_text = models.TextField(blank=True) + class Meta: + db_table = 'ballots_comment' + +class BallotsDiscuss(models.Model): + ballot_id = models.IntegerField(primary_key=True) + ad_id = models.IntegerField(primary_key=True) + discuss_date = models.DateField() + revision = models.CharField(maxlength=2) + active = models.IntegerField() + discuss_text = models.TextField(blank=True) + class Meta: + db_table = 'ballots_discuss' + +class BashAgenda(models.Model): + telechat_id = models.IntegerField(primary_key=True) + bash_agenda_txt = models.TextField(blank=True) + change_agenda = models.IntegerField(null=True, blank=True) + change_agenda_note = models.TextField(blank=True) + class Meta: + db_table = 'bash_agenda' + +class Chairs(models.Model): + person_or_org_tag = models.IntegerField(primary_key=True) + chair_name = models.CharField(blank=True, maxlength=25) + class Meta: + db_table = 'chairs' + +class ChairsHistory(models.Model): + id = models.IntegerField(primary_key=True) + chair_type_id = models.IntegerField(null=True, blank=True) + present_chair = models.IntegerField(null=True, blank=True) + person_or_org_tag = models.IntegerField(null=True, blank=True) + start_year = models.IntegerField(null=True, blank=True) + end_year = models.IntegerField(null=True, blank=True) + class Meta: + db_table = 'chairs_history' + +class DocumentComments(models.Model): + id = models.IntegerField(primary_key=True) + document_id = models.IntegerField() + rfc_flag = models.IntegerField(null=True, blank=True) + public_flag = models.IntegerField(null=True, blank=True) + comment_date = models.DateField() + comment_time = models.CharField(maxlength=20) + version = models.CharField(blank=True, maxlength=3) + comment_text = models.TextField(blank=True) + created_by = models.IntegerField(null=True, blank=True) + result_state = models.IntegerField(null=True, blank=True) + origin_state = models.IntegerField(null=True, blank=True) + ballot = models.IntegerField(null=True, blank=True) + class Meta: + db_table = 'document_comments' + +class DtRequest(models.Model): + id = models.IntegerField(primary_key=True) + description = models.CharField(maxlength=255) + request_by = models.IntegerField() + request_date = models.DateField(null=True, blank=True) + cur_version = models.CharField(blank=True, maxlength=5) + status = models.TextField(blank=True) + done_flag = models.IntegerField(null=True, blank=True) + class Meta: + db_table = 'dt_request' + +class EmailAddresses(models.Model): + person_or_org_tag = models.IntegerField() + email_type = models.CharField(maxlength=4) + email_priority = models.IntegerField() + email_address = models.CharField(blank=True, maxlength=255) + email_comment = models.CharField(blank=True, maxlength=255) + class Meta: + db_table = 'email_addresses' + +class FromBodies(models.Model): + from_id = models.IntegerField(primary_key=True) + body_name = models.CharField(blank=True, maxlength=35) + poc = models.IntegerField(null=True, blank=True) + is_liaison_manager = models.IntegerField(null=True, blank=True) + other_sdo = models.IntegerField(null=True, blank=True) + email_priority = models.IntegerField(null=True, blank=True) + class Meta: + db_table = 'from_bodies' + +class GChairs(models.Model): + id = models.IntegerField(primary_key=True) + person_or_org_tag = models.IntegerField(unique=True) + group_acronym_id = models.IntegerField(unique=True) + class Meta: + db_table = 'g_chairs' + +class GEditors(models.Model): + id = models.IntegerField(primary_key=True) + group_acronym_id = models.IntegerField(unique=True) + person_or_org_tag = models.IntegerField(unique=True) + class Meta: + db_table = 'g_editors' + +class GSecretaries(models.Model): + id = models.IntegerField(primary_key=True) + group_acronym_id = models.IntegerField(null=True, blank=True) + person_or_org_tag = models.IntegerField(null=True, blank=True) + class Meta: + db_table = 'g_secretaries' + +class GSecretary(models.Model): + id = models.IntegerField(primary_key=True) + group_acronym_id = models.IntegerField() + person_or_org_tag = models.IntegerField() + class Meta: + db_table = 'g_secretary' + +class GStatus(models.Model): + status_id = models.IntegerField(primary_key=True) + status_value = models.CharField(maxlength=25) + class Meta: + db_table = 'g_status' + +class GTechAdvisors(models.Model): + id = models.IntegerField(primary_key=True) + group_acronym_id = models.IntegerField(unique=True) + person_or_org_tag = models.IntegerField(unique=True) + class Meta: + db_table = 'g_tech_advisors' + +class GType(models.Model): + group_type_id = models.IntegerField(primary_key=True) + group_type = models.CharField(maxlength=25) + class Meta: + db_table = 'g_type' + +class GeneralInfo(models.Model): + id = models.IntegerField(primary_key=True) + info_name = models.CharField(blank=True, maxlength=50) + info_text = models.TextField(blank=True) + info_header = models.CharField(blank=True, maxlength=255) + class Meta: + db_table = 'general_info' + +class GoalsMilestones(models.Model): + gm_id = models.IntegerField(primary_key=True) + group_acronym_id = models.IntegerField() + description = models.TextField(blank=True) + expected_due_date = models.DateField(null=True, blank=True) + done_date = models.DateField(null=True, blank=True) + done = models.CharField(blank=True, maxlength=4) + last_modified_date = models.DateField() + class Meta: + db_table = 'goals_milestones' + +class GroupFlag(models.Model): + group_flag = models.IntegerField(primary_key=True) + group_flag_val = models.CharField(blank=True, maxlength=30) + equiv_doc_state_id = models.IntegerField(null=True, blank=True) + class Meta: + db_table = 'group_flag' + +class GroupInternal(models.Model): + group_acronym_id = models.IntegerField(unique=True) + note = models.TextField(blank=True) + status_date = models.DateField(null=True, blank=True) + agenda = models.IntegerField(null=True, blank=True) + token_name = models.CharField(blank=True, maxlength=25) + pwg_cat_id = models.IntegerField(null=True, blank=True) + telechat_date = models.DateField(null=True, blank=True) + class Meta: + db_table = 'group_internal' + +class GroupsIetf(models.Model): + group_acronym_id = models.IntegerField(primary_key=True) + group_type_id = models.IntegerField() + proposed_date = models.DateField(null=True, blank=True) + start_date = models.DateField(null=True, blank=True) + dormant_date = models.DateField(null=True, blank=True) + concluded_date = models.DateField(null=True, blank=True) + status_id = models.IntegerField() + area_director_id = models.IntegerField() + meeting_scheduled = models.CharField(blank=True, maxlength=3) + email_address = models.CharField(blank=True, maxlength=60) + email_subscribe = models.CharField(blank=True, maxlength=120) + email_keyword = models.CharField(blank=True, maxlength=50) + email_archive = models.CharField(blank=True, maxlength=95) + comments = models.TextField(blank=True) + last_modified_date = models.DateField() + meeting_scheduled_old = models.CharField(blank=True, maxlength=3) + class Meta: + db_table = 'groups_ietf' + +class HitCounter(models.Model): + id = models.IntegerField(primary_key=True) + page_name = models.CharField(blank=True, maxlength=255) + hit_count = models.IntegerField(null=True, blank=True) + last_visitor = models.CharField(blank=True, maxlength=255) + last_visited_date = models.DateField(null=True, blank=True) + class Meta: + db_table = 'hit_counter' + +class IdAuthors(models.Model): + id = models.IntegerField(primary_key=True) + id_document_tag = models.IntegerField(unique=True) + person_or_org_tag = models.IntegerField(unique=True) + author_order = models.IntegerField(null=True, blank=True) + class Meta: + db_table = 'id_authors' + +class IdDates(models.Model): + id = models.IntegerField(primary_key=True) + id_date = models.DateField(null=True, blank=True) + date_name = models.CharField(blank=True, maxlength=255) + f_name = models.CharField(blank=True, maxlength=255) + class Meta: + db_table = 'id_dates' + +class IdIntendedStatus(models.Model): + intended_status_id = models.IntegerField(primary_key=True) + status_value = models.CharField(maxlength=25) + class Meta: + db_table = 'id_intended_status' + +class IdInternal(models.Model): + id_document_tag = models.IntegerField(unique=True) + rfc_flag = models.IntegerField(null=True, blank=True) + ballot_id = models.IntegerField() + primary_flag = models.IntegerField(null=True, blank=True) + group_flag = models.IntegerField() + token_name = models.CharField(blank=True, maxlength=25) + token_email = models.CharField(blank=True, maxlength=255) + note = models.TextField(blank=True) + status_date = models.DateField(null=True, blank=True) + email_display = models.CharField(blank=True, maxlength=50) + agenda = models.IntegerField(null=True, blank=True) + cur_state = models.IntegerField() + prev_state = models.IntegerField() + assigned_to = models.CharField(blank=True, maxlength=25) + mark_by = models.IntegerField() + job_owner = models.IntegerField() + event_date = models.DateField(null=True, blank=True) + area_acronym_id = models.IntegerField() + cur_sub_state_id = models.IntegerField() + prev_sub_state_id = models.IntegerField() + returning_item = models.IntegerField(null=True, blank=True) + telechat_date = models.DateField(null=True, blank=True) + via_rfc_editor = models.IntegerField(null=True, blank=True) + state_change_notice_to = models.CharField(blank=True, maxlength=255) + dnp = models.IntegerField(null=True, blank=True) + dnp_date = models.DateField(null=True, blank=True) + noproblem = models.IntegerField(null=True, blank=True) + resurrect_requested_by = models.IntegerField(null=True, blank=True) + approved_in_minute = models.IntegerField(null=True, blank=True) + class Meta: + db_table = 'id_internal' + +class IdRestrictedWord(models.Model): + id = models.IntegerField(primary_key=True) + restricted_word = models.CharField(maxlength=25) + class Meta: + db_table = 'id_restricted_word' + +class IdStatus(models.Model): + status_id = models.IntegerField(primary_key=True) + status_value = models.CharField(maxlength=25) + class Meta: + db_table = 'id_status' + +class IdSubmissionEnv(models.Model): + max_live = models.IntegerField(null=True, blank=True) + staging_path = models.CharField(blank=True, maxlength=255) + max_interval = models.IntegerField(null=True, blank=True) + current_manual_proc_date = models.IntegerField(null=True, blank=True) + init_rev_approved_msg = models.TextField(blank=True) + submitter_auth_msg = models.TextField(blank=True) + id_action_announcement = models.TextField(blank=True) + target_path_web = models.CharField(blank=True, maxlength=255) + target_path_ftp = models.CharField(blank=True, maxlength=255) + side_bar_html = models.TextField(blank=True) + staging_url = models.CharField(blank=True, maxlength=255) + top_bar_html = models.TextField(blank=True) + bottom_bar_html = models.TextField(blank=True) + id_approval_request_msg = models.TextField(blank=True) + emerg_auto_response = models.IntegerField(null=True, blank=True) + class Meta: + db_table = 'id_submission_env' + +class IesgHistory(models.Model): + meeting_num = models.IntegerField(primary_key=True) + area_acronym_id = models.IntegerField(primary_key=True) + person_or_org_tag = models.IntegerField(primary_key=True) + class Meta: + db_table = 'iesg_history' + +class IesgLogin(models.Model): + id = models.IntegerField(primary_key=True) + login_name = models.CharField(blank=True, maxlength=255) + password = models.CharField(maxlength=25) + user_level = models.IntegerField() + first_name = models.CharField(blank=True, maxlength=25) + last_name = models.CharField(blank=True, maxlength=25) + person_or_org_tag = models.IntegerField(null=True, blank=True) + pgp_id = models.CharField(blank=True, maxlength=20) + default_search = models.IntegerField(null=True, blank=True) + class Meta: + db_table = 'iesg_login' + +class IesgPassword(models.Model): + person_or_org_tag = models.IntegerField(primary_key=True) + login_name = models.CharField(blank=True, maxlength=255) + password = models.CharField(blank=True, maxlength=255) + class Meta: + db_table = 'iesg_password' + +class ImportedMailingList(models.Model): + id = models.IntegerField(primary_key=True) + group_acronym_id = models.IntegerField(null=True, blank=True) + list_acronym = models.CharField(blank=True, maxlength=255) + list_name = models.CharField(blank=True, maxlength=255) + list_domain = models.CharField(blank=True, maxlength=25) + class Meta: + db_table = 'imported_mailing_list' + +class InterimInfo(models.Model): + id = models.IntegerField(primary_key=True) + group_acronym_id = models.IntegerField(null=True, blank=True) + meeting_num = models.IntegerField(null=True, blank=True) + meeting_date = models.CharField(blank=True, maxlength=255) + message_body = models.TextField(blank=True) + class Meta: + db_table = 'interim_info' + +class InternetDrafts(models.Model): + id_document_tag = models.IntegerField(primary_key=True) + id_document_name = models.CharField(blank=True, maxlength=255) + id_document_key = models.CharField(blank=True, maxlength=255) + group_acronym_id = models.IntegerField(null=True, blank=True) + filename = models.CharField(blank=True, maxlength=255) + revision = models.CharField(maxlength=2) + revision_date = models.DateField(null=True, blank=True) + file_type = models.CharField(blank=True, maxlength=20) + txt_page_count = models.IntegerField(null=True, blank=True) + local_path = models.CharField(blank=True, maxlength=255) + start_date = models.DateField(null=True, blank=True) + expiration_date = models.DateField(null=True, blank=True) + abstract = models.TextField(blank=True) + dunn_sent_date = models.DateField(null=True, blank=True) + extension_date = models.DateField(null=True, blank=True) + status_id = models.IntegerField() + intended_status_id = models.IntegerField() + lc_sent_date = models.DateField(null=True, blank=True) + lc_changes = models.CharField(blank=True, maxlength=3) + lc_expiration_date = models.DateField(null=True, blank=True) + b_sent_date = models.DateField(null=True, blank=True) + b_discussion_date = models.DateField(null=True, blank=True) + b_approve_date = models.DateField(null=True, blank=True) + wgreturn_date = models.DateField(null=True, blank=True) + rfc_number = models.IntegerField(null=True, blank=True) + comments = models.TextField(blank=True) + last_modified_date = models.DateField() + replaced_by = models.IntegerField(null=True, blank=True) + review_by_rfc_editor = models.IntegerField(null=True, blank=True) + expired_tombstone = models.IntegerField(null=True, blank=True) + class Meta: + db_table = 'internet_drafts' + +class IprContacts(models.Model): + contact_id = models.IntegerField(primary_key=True) + ipr_id = models.IntegerField(null=True, blank=True) + contact_type = models.IntegerField(null=True, blank=True) + name = models.CharField(blank=True, maxlength=255) + title = models.CharField(blank=True, maxlength=255) + department = models.CharField(blank=True, maxlength=255) + telephone = models.CharField(blank=True, maxlength=25) + fax = models.CharField(blank=True, maxlength=25) + email = models.CharField(blank=True, maxlength=255) + address1 = models.CharField(blank=True, maxlength=255) + address2 = models.CharField(blank=True, maxlength=255) + class Meta: + db_table = 'ipr_contacts' + +class IprDetail(models.Model): + ipr_id = models.IntegerField(primary_key=True) + p_h_legal_name = models.CharField(blank=True, maxlength=255) + document_title = models.CharField(blank=True, maxlength=255) + rfc_number = models.IntegerField(null=True, blank=True) + id_document_tag = models.IntegerField(null=True, blank=True) + other_designations = models.CharField(blank=True, maxlength=255) + p_applications = models.CharField(blank=True, maxlength=255) + date_applied = models.CharField(blank=True, maxlength=255) + selecttype = models.CharField(blank=True, maxlength=3) + disclouser_identify = models.CharField(blank=True, maxlength=255) + licensing_option = models.IntegerField(null=True, blank=True) + other_notes = models.TextField(blank=True) + submitted_date = models.DateField(null=True, blank=True) + status = models.IntegerField(null=True, blank=True) + comments = models.TextField(blank=True) + old_ipr_url = models.CharField(blank=True, maxlength=255) + additional_old_title1 = models.CharField(blank=True, maxlength=255) + additional_old_url1 = models.CharField(blank=True, maxlength=255) + additional_old_title2 = models.CharField(blank=True, maxlength=255) + additional_old_url2 = models.CharField(blank=True, maxlength=255) + country = models.CharField(blank=True, maxlength=100) + p_notes = models.TextField(blank=True) + third_party = models.IntegerField(null=True, blank=True) + lic_opt_a_sub = models.IntegerField(null=True, blank=True) + lic_opt_b_sub = models.IntegerField(null=True, blank=True) + lic_opt_c_sub = models.IntegerField(null=True, blank=True) + generic = models.IntegerField(null=True, blank=True) + selectowned = models.CharField(blank=True, maxlength=3) + comply = models.IntegerField(null=True, blank=True) + lic_checkbox = models.IntegerField(null=True, blank=True) + update_notified_date = models.DateField(null=True, blank=True) + class Meta: + db_table = 'ipr_detail' + +class IprIds(models.Model): + id = models.IntegerField(primary_key=True) + id_document_tag = models.IntegerField(null=True, blank=True) + ipr_id = models.IntegerField(null=True, blank=True) + revision = models.CharField(blank=True, maxlength=2) + class Meta: + db_table = 'ipr_ids' + +class IprLicensing(models.Model): + licensing_option = models.IntegerField(primary_key=True) + licensing_option_value = models.CharField(blank=True, maxlength=255) + class Meta: + db_table = 'ipr_licensing' + +class IprNotifications(models.Model): + id = models.IntegerField(primary_key=True) + ipr_id = models.IntegerField(null=True, blank=True) + notification = models.TextField(blank=True) + date_sent = models.DateField(null=True, blank=True) + time_sent = models.CharField(blank=True, maxlength=25) + class Meta: + db_table = 'ipr_notifications' + +class IprRfcs(models.Model): + id = models.IntegerField(primary_key=True) + ipr_id = models.IntegerField(null=True, blank=True) + rfc_number = models.IntegerField(null=True, blank=True) + class Meta: + db_table = 'ipr_rfcs' + +class IprSelecttype(models.Model): + type_id = models.IntegerField(primary_key=True) + selecttype = models.IntegerField(null=True, blank=True) + type_display = models.CharField(blank=True, maxlength=15) + class Meta: + db_table = 'ipr_selecttype' + +class IprUpdates(models.Model): + id = models.IntegerField(primary_key=True) + ipr_id = models.IntegerField(null=True, blank=True) + updated = models.IntegerField(null=True, blank=True) + status_to_be = models.IntegerField(null=True, blank=True) + processed = models.IntegerField(null=True, blank=True) + class Meta: + db_table = 'ipr_updates' + +class Irtf(models.Model): + irtf_id = models.IntegerField(primary_key=True) + irtf_acronym = models.CharField(blank=True, maxlength=25) + irtf_name = models.CharField(blank=True, maxlength=255) + charter_text = models.TextField(blank=True) + meeting_scheduled = models.IntegerField(null=True, blank=True) + class Meta: + db_table = 'irtf' + +class IrtfChairs(models.Model): + id = models.IntegerField(primary_key=True) + irtf_id = models.IntegerField(null=True, blank=True) + person_or_org_tag = models.IntegerField(null=True, blank=True) + class Meta: + db_table = 'irtf_chairs' + +class LiaisonDetail(models.Model): + detail_id = models.IntegerField(primary_key=True) + person_or_org_tag = models.IntegerField(null=True, blank=True) + submitted_date = models.DateField(null=True, blank=True) + last_modified_date = models.DateField(null=True, blank=True) + from_id = models.IntegerField(null=True, blank=True) + to_body = models.CharField(blank=True, maxlength=255) + title = models.CharField(blank=True, maxlength=255) + response_contact = models.CharField(blank=True, maxlength=255) + technical_contact = models.CharField(blank=True, maxlength=255) + purpose = models.TextField(blank=True) + body = models.TextField(blank=True) + deadline_date = models.DateField(null=True, blank=True) + cc1 = models.TextField(blank=True) + cc2 = models.CharField(blank=True, maxlength=50) + submitter_name = models.CharField(blank=True, maxlength=255) + submitter_email = models.CharField(blank=True, maxlength=255) + by_secretariat = models.IntegerField(null=True, blank=True) + to_poc = models.CharField(blank=True, maxlength=255) + to_email = models.CharField(blank=True, maxlength=255) + purpose_id = models.IntegerField(null=True, blank=True) + replyto = models.CharField(blank=True, maxlength=255) + class Meta: + db_table = 'liaison_detail' + +class LiaisonDetailTemp(models.Model): + detail_id = models.IntegerField(primary_key=True) + person_or_org_tag = models.IntegerField(null=True, blank=True) + submitted_date = models.DateField(null=True, blank=True) + last_modified_date = models.DateField(null=True, blank=True) + from_id = models.IntegerField(null=True, blank=True) + to_body = models.CharField(blank=True, maxlength=255) + title = models.CharField(blank=True, maxlength=255) + response_contact = models.CharField(blank=True, maxlength=255) + technical_contact = models.CharField(blank=True, maxlength=255) + purpose = models.TextField(blank=True) + body = models.TextField(blank=True) + deadline_date = models.DateField(null=True, blank=True) + cc1 = models.TextField(blank=True) + cc2 = models.CharField(blank=True, maxlength=50) + to_poc = models.CharField(blank=True, maxlength=255) + to_email = models.CharField(blank=True, maxlength=255) + purpose_id = models.IntegerField(null=True, blank=True) + replyto = models.CharField(blank=True, maxlength=255) + class Meta: + db_table = 'liaison_detail_temp' + +class LiaisonManagers(models.Model): + id = models.IntegerField(primary_key=True) + person_or_org_tag = models.IntegerField(null=True, blank=True) + email_priority = models.IntegerField(null=True, blank=True) + sdo_id = models.IntegerField(null=True, blank=True) + class Meta: + db_table = 'liaison_managers' + +class LiaisonPurpose(models.Model): + purpose_id = models.IntegerField(primary_key=True) + purpose_text = models.CharField(blank=True, maxlength=50) + class Meta: + db_table = 'liaison_purpose' + +class LiaisonsInterim(models.Model): + id = models.IntegerField(primary_key=True) + title = models.CharField(blank=True, maxlength=255) + submitter_name = models.CharField(blank=True, maxlength=255) + submitter_email = models.CharField(blank=True, maxlength=255) + submitted_date = models.DateField(null=True, blank=True) + from_id = models.IntegerField(null=True, blank=True) + class Meta: + db_table = 'liaisons_interim' + +class LiaisonsMembers(models.Model): + id = models.IntegerField(primary_key=True) + person_or_org_tag = models.IntegerField(null=True, blank=True) + affiliation = models.CharField(blank=True, maxlength=255) + class Meta: + db_table = 'liaisons_members' + +class MailingList(models.Model): + mailing_list_id = models.CharField(primary_key=True, maxlength=25) + request_date = models.DateField(null=True, blank=True) + mlist_name = models.CharField(blank=True, maxlength=250) + short_desc = models.CharField(blank=True, maxlength=250) + long_desc = models.TextField(blank=True) + requestor = models.CharField(blank=True, maxlength=250) + requestor_email = models.CharField(blank=True, maxlength=250) + admins = models.CharField(blank=True, maxlength=250) + archive_remote = models.TextField(blank=True) + archive_private = models.IntegerField(null=True, blank=True) + initial = models.TextField(blank=True) + welcome_message = models.TextField(blank=True) + subscription = models.IntegerField(null=True, blank=True) + post_who = models.IntegerField(null=True, blank=True) + post_admin = models.IntegerField(null=True, blank=True) + add_comment = models.TextField(blank=True) + mail_type = models.IntegerField(null=True, blank=True) + mail_cat = models.IntegerField(null=True, blank=True) + auth_person_or_org_tag = models.IntegerField(null=True, blank=True) + welcome_new = models.TextField(blank=True) + approved = models.IntegerField(null=True, blank=True) + approved_date = models.DateField(null=True, blank=True) + reason_to_delete = models.TextField(blank=True) + domain_name = models.CharField(blank=True, maxlength=10) + class Meta: + db_table = 'mailing_list' + +class ManagementIssues(models.Model): + id = models.IntegerField(primary_key=True) + telechat_id = models.IntegerField(null=True, blank=True) + title = models.CharField(blank=True, maxlength=255) + issue = models.TextField(blank=True) + discussed_status_id = models.IntegerField(null=True, blank=True) + note = models.TextField(blank=True) + class Meta: + db_table = 'management_issues' + +class MeetingAgendaCount(models.Model): + hit_count = models.IntegerField(null=True, blank=True) + class Meta: + db_table = 'meeting_agenda_count' + +class MeetingAttendees(models.Model): + id = models.IntegerField(primary_key=True) + first_name = models.CharField(blank=True, maxlength=255) + last_name = models.CharField(blank=True, maxlength=255) + affiliated_company = models.CharField(blank=True, maxlength=255) + email_address = models.CharField(blank=True, maxlength=255) + meeting_num = models.IntegerField(null=True, blank=True) + class Meta: + db_table = 'meeting_attendees' + +class MeetingHours(models.Model): + hour_id = models.IntegerField(primary_key=True) + hour_desc = models.CharField(blank=True, maxlength=20) + class Meta: + db_table = 'meeting_hours' + +class MeetingRooms(models.Model): + room_id = models.IntegerField(primary_key=True) + meeting_num = models.IntegerField(null=True, blank=True) + room_name = models.CharField(blank=True, maxlength=255) + class Meta: + db_table = 'meeting_rooms' + +class MeetingTimes(models.Model): + time_id = models.IntegerField(primary_key=True) + time_desc = models.CharField(blank=True, maxlength=100) + meeting_num = models.IntegerField(null=True, blank=True) + day_id = models.IntegerField(null=True, blank=True) + session_name_id = models.IntegerField(null=True, blank=True) + class Meta: + db_table = 'meeting_times' + +class MeetingVenues(models.Model): + id = models.IntegerField(primary_key=True) + meeting_num = models.IntegerField(null=True, blank=True) + break_area_name = models.CharField(blank=True, maxlength=255) + reg_area_name = models.CharField(blank=True, maxlength=255) + class Meta: + db_table = 'meeting_venues' + +class Meetings(models.Model): + meeting_num = models.IntegerField(primary_key=True) + start_date = models.DateField(null=True, blank=True) + end_date = models.DateField(null=True, blank=True) + city = models.CharField(blank=True, maxlength=255) + state = models.CharField(blank=True, maxlength=255) + country = models.CharField(blank=True, maxlength=255) + ack = models.TextField(blank=True) + agenda_html = models.TextField(blank=True) + agenda_text = models.TextField(blank=True) + future_meeting = models.TextField(blank=True) + overview1 = models.TextField(blank=True) + overview2 = models.TextField(blank=True) + class Meta: + db_table = 'meetings' + +class Messages(models.Model): + id = models.IntegerField(primary_key=True) + message_name = models.CharField(maxlength=25) + message_content = models.TextField() + recipient = models.CharField(maxlength=100) + class Meta: + db_table = 'messages' + +class MigrateStat(models.Model): + id = models.IntegerField(primary_key=True) + new_script = models.CharField(maxlength=40) + old_script = models.CharField(blank=True, maxlength=40) + need_done = models.CharField(blank=True, maxlength=50) + how_to_test = models.CharField(blank=True, maxlength=100) + status = models.CharField(blank=True, maxlength=100) + done_flag = models.IntegerField(null=True, blank=True) + group_id = models.IntegerField(null=True, blank=True) + class Meta: + db_table = 'migrate_stat' + +class Minutes(models.Model): + id = models.IntegerField(primary_key=True) + meeting_num = models.IntegerField(null=True, blank=True) + group_acronym_id = models.IntegerField(null=True, blank=True) + filename = models.CharField(blank=True, maxlength=255) + irtf = models.IntegerField(null=True, blank=True) + interim = models.IntegerField(null=True, blank=True) + class Meta: + db_table = 'minutes' + +class Nomcom(models.Model): + person_or_org_tag = models.IntegerField(primary_key=True) + class Meta: + db_table = 'nomcom' + +class NomcomMembers(models.Model): + chair_id = models.IntegerField(primary_key=True) + voting_members = models.TextField(blank=True) + non_voting_members = models.TextField(blank=True) + class Meta: + db_table = 'nomcom_members' + +class NonSession(models.Model): + non_session_id = models.IntegerField(primary_key=True) + day_id = models.IntegerField(null=True, blank=True) + non_session_ref_id = models.IntegerField(null=True, blank=True) + meeting_num = models.IntegerField(null=True, blank=True) + time_desc = models.CharField(blank=True, maxlength=75) + class Meta: + db_table = 'non_session' + +class NonSessionRef(models.Model): + id = models.IntegerField(primary_key=True) + name = models.CharField(blank=True, maxlength=255) + class Meta: + db_table = 'non_session_ref' + +class NoneWgMailingList(models.Model): + id = models.CharField(primary_key=True, maxlength=35) + purpose = models.TextField(blank=True) + area_acronym_id = models.IntegerField(null=True, blank=True) + admin = models.TextField(blank=True) + list_url = models.CharField(maxlength=255) + s_name = models.CharField(blank=True, maxlength=255) + s_email = models.CharField(blank=True, maxlength=255) + status = models.IntegerField(null=True, blank=True) + list_name = models.CharField(blank=True, maxlength=255) + subscribe_url = models.CharField(blank=True, maxlength=255) + subscribe_other = models.TextField(blank=True) + ds_name = models.CharField(blank=True, maxlength=255) + ds_email = models.CharField(blank=True, maxlength=255) + msg_to_ad = models.TextField(blank=True) + class Meta: + db_table = 'none_wg_mailing_list' + +class NotMeetingGroups(models.Model): + group_acronym_id = models.IntegerField(null=True, blank=True) + meeting_num = models.IntegerField(null=True, blank=True) + class Meta: + db_table = 'not_meeting_groups' + +class OldDocumentComments(models.Model): + id = models.IntegerField(primary_key=True) + comment_text = models.TextField(blank=True) + class Meta: + db_table = 'old_document_comments' + +class OutstandingTasks(models.Model): + id = models.IntegerField(primary_key=True) + item_txt = models.CharField(blank=True, maxlength=255) + task_status_id = models.IntegerField(null=True, blank=True) + last_updated_date = models.DateField(null=True, blank=True) + class Meta: + db_table = 'outstanding_tasks' + +class PersonOrOrgInfo(models.Model): + person_or_org_tag = models.IntegerField(unique=True) + record_type = models.CharField(blank=True, maxlength=8) + name_prefix = models.CharField(blank=True, maxlength=10) + first_name = models.CharField(blank=True, maxlength=20) + first_name_key = models.CharField(blank=True, maxlength=20) + middle_initial = models.CharField(blank=True, maxlength=4) + middle_initial_key = models.CharField(blank=True, maxlength=4) + last_name = models.CharField(blank=True, maxlength=50) + last_name_key = models.CharField(blank=True, maxlength=50) + name_suffix = models.CharField(blank=True, maxlength=10) + date_modified = models.DateField(null=True, blank=True) + modified_by = models.CharField(blank=True, maxlength=8) + date_created = models.DateField(null=True, blank=True) + created_by = models.CharField(blank=True, maxlength=8) + address_type = models.CharField(blank=True, maxlength=4) + class Meta: + db_table = 'person_or_org_info' + +class PhoneNumbers(models.Model): + person_or_org_tag = models.IntegerField() + phone_type = models.CharField(maxlength=3) + phone_priority = models.IntegerField() + phone_number = models.CharField(blank=True, maxlength=255) + phone_comment = models.CharField(blank=True, maxlength=255) + class Meta: + db_table = 'phone_numbers' + +class PostalAddresses(models.Model): + address_type = models.CharField(maxlength=4) + address_priority = models.IntegerField(null=True, blank=True) + person_or_org_tag = models.IntegerField() + person_title = models.CharField(blank=True, maxlength=50) + affiliated_company = models.CharField(blank=True, maxlength=70) + aff_company_key = models.CharField(blank=True, maxlength=70) + department = models.CharField(blank=True, maxlength=100) + staddr1 = models.CharField(blank=True, maxlength=40) + staddr2 = models.CharField(blank=True, maxlength=40) + mail_stop = models.CharField(blank=True, maxlength=20) + city = models.CharField(blank=True, maxlength=20) + state_or_prov = models.CharField(blank=True, maxlength=20) + postal_code = models.CharField(blank=True, maxlength=20) + country = models.CharField(blank=True, maxlength=20) + class Meta: + db_table = 'postal_addresses' + +class PrintName(models.Model): + person_or_org_tag = models.IntegerField(primary_key=True) + firstname = models.CharField(blank=True, maxlength=50) + lastname = models.CharField(maxlength=50) + class Meta: + db_table = 'print_name' + +class PriorAddress(models.Model): + person_or_org_tag = models.IntegerField(unique=True) + address_type = models.CharField(blank=True, maxlength=4) + class Meta: + db_table = 'prior_address' + +class Proceedings(models.Model): + meeting_num = models.IntegerField(primary_key=True) + dir_name = models.CharField(blank=True, maxlength=25) + sub_begin_date = models.DateField(null=True, blank=True) + sub_cut_off_date = models.DateField(null=True, blank=True) + frozen = models.IntegerField(null=True, blank=True) + c_sub_cut_off_date = models.DateField(null=True, blank=True) + pr_from_date = models.DateField(null=True, blank=True) + pr_to_date = models.DateField(null=True, blank=True) + class Meta: + db_table = 'proceedings' + +class PwgCat(models.Model): + id = models.IntegerField(primary_key=True) + pwg_status_val = models.CharField(blank=True, maxlength=255) + class Meta: + db_table = 'pwg_cat' + +class RefDocStatesNew(models.Model): + document_state_id = models.IntegerField(primary_key=True) + document_state_val = models.CharField(blank=True, maxlength=50) + equiv_group_flag = models.IntegerField(null=True, blank=True) + document_desc = models.TextField(blank=True) + class Meta: + db_table = 'ref_doc_states_new' + +class RefNextStatesNew(models.Model): + id = models.IntegerField(primary_key=True) + cur_state_id = models.IntegerField() + next_state_id = models.IntegerField() + condition = models.CharField(blank=True, maxlength=255) + class Meta: + db_table = 'ref_next_states_new' + +class RefResp(models.Model): + ref_resp_id = models.IntegerField(primary_key=True) + ref_resp_val = models.CharField(blank=True, maxlength=50) + class Meta: + db_table = 'ref_resp' + +class ReplacedIds(models.Model): + id_document_tag = models.IntegerField(null=True, blank=True) + replaced_by = models.IntegerField(null=True, blank=True) + class Meta: + db_table = 'replaced_ids' + +class Request(models.Model): + id_document_tag = models.IntegerField(unique=True) + status_date = models.DateField(null=True, blank=True) + rfc_flag = models.IntegerField(null=True, blank=True) + intended_status_id = models.CharField(blank=True, maxlength=20) + area_acronym = models.CharField(blank=True, maxlength=3) + class Meta: + db_table = 'request' + +class RfcAuthors(models.Model): + id = models.IntegerField(primary_key=True) + rfc_number = models.IntegerField(unique=True) + person_or_org_tag = models.IntegerField(unique=True) + class Meta: + db_table = 'rfc_authors' + +class RfcIntendStatus(models.Model): + intended_status_id = models.IntegerField(primary_key=True) + status_value = models.CharField(maxlength=25) + class Meta: + db_table = 'rfc_intend_status' + +class RfcStatus(models.Model): + status_id = models.IntegerField(primary_key=True) + status_value = models.CharField(maxlength=25) + class Meta: + db_table = 'rfc_status' + +class Rfcs(models.Model): + rfc_number = models.IntegerField(primary_key=True) + rfc_name = models.CharField(maxlength=200) + rfc_name_key = models.CharField(maxlength=200) + group_acronym = models.CharField(blank=True, maxlength=8) + area_acronym = models.CharField(blank=True, maxlength=8) + status_id = models.IntegerField() + intended_status_id = models.IntegerField() + fyi_number = models.CharField(blank=True, maxlength=20) + std_number = models.CharField(blank=True, maxlength=20) + txt_page_count = models.IntegerField(null=True, blank=True) + online_version = models.CharField(blank=True, maxlength=3) + rfc_published_date = models.DateField(null=True, blank=True) + proposed_date = models.DateField(null=True, blank=True) + draft_date = models.DateField(null=True, blank=True) + standard_date = models.DateField(null=True, blank=True) + historic_date = models.DateField(null=True, blank=True) + lc_sent_date = models.DateField(null=True, blank=True) + lc_expiration_date = models.DateField(null=True, blank=True) + b_sent_date = models.DateField(null=True, blank=True) + b_approve_date = models.DateField(null=True, blank=True) + comments = models.TextField(blank=True) + last_modified_date = models.DateField() + class Meta: + db_table = 'rfcs' + +class RfcsObsolete(models.Model): + id = models.IntegerField(primary_key=True) + rfc_number = models.IntegerField(unique=True) + action = models.CharField(unique=True, maxlength=20) + rfc_acted_on = models.IntegerField(unique=True) + class Meta: + db_table = 'rfcs_obsolete' + +class RollCall(models.Model): + telechat_id = models.IntegerField(primary_key=True) + person_or_org_tag = models.IntegerField(primary_key=True) + attended = models.IntegerField(null=True, blank=True) + wg_spoken = models.IntegerField(null=True, blank=True) + class Meta: + db_table = 'roll_call' + +class ScheduledAnnouncements(models.Model): + id = models.IntegerField(primary_key=True) + mail_sent = models.IntegerField(null=True, blank=True) + to_be_sent_date = models.DateField(null=True, blank=True) + to_be_sent_time = models.CharField(blank=True, maxlength=50) + scheduled_by = models.CharField(blank=True, maxlength=100) + scheduled_date = models.DateField(null=True, blank=True) + scheduled_time = models.CharField(blank=True, maxlength=50) + subject = models.CharField(blank=True, maxlength=255) + to_val = models.CharField(blank=True, maxlength=255) + from_val = models.CharField(blank=True, maxlength=255) + cc_val = models.TextField(blank=True) + body = models.TextField(blank=True) + actual_sent_date = models.DateField(null=True, blank=True) + actual_sent_time = models.CharField(blank=True, maxlength=50) + first_q = models.IntegerField(null=True, blank=True) + second_q = models.IntegerField(null=True, blank=True) + note = models.TextField(blank=True) + content_type = models.CharField(blank=True, maxlength=255) + replyto = models.CharField(blank=True, maxlength=255) + bcc_val = models.CharField(blank=True, maxlength=255) + class Meta: + db_table = 'scheduled_announcements' + +class ScheduledAnnouncementsTemp(models.Model): + id = models.IntegerField(primary_key=True) + mail_sent = models.IntegerField(null=True, blank=True) + to_be_sent_date = models.DateField(null=True, blank=True) + to_be_sent_time = models.CharField(blank=True, maxlength=50) + scheduled_by = models.CharField(blank=True, maxlength=100) + scheduled_date = models.DateField(null=True, blank=True) + scheduled_time = models.CharField(blank=True, maxlength=50) + subject = models.CharField(blank=True, maxlength=255) + to_val = models.CharField(blank=True, maxlength=255) + from_val = models.CharField(blank=True, maxlength=255) + cc_val = models.CharField(blank=True, maxlength=255) + body = models.TextField(blank=True) + replyto = models.CharField(blank=True, maxlength=255) + bcc_val = models.CharField(blank=True, maxlength=255) + class Meta: + db_table = 'scheduled_announcements_temp' + +class SdoChairs(models.Model): + id = models.IntegerField(primary_key=True) + sdo_id = models.IntegerField(null=True, blank=True) + person_or_org_tag = models.IntegerField(null=True, blank=True) + email_priority = models.IntegerField(null=True, blank=True) + class Meta: + db_table = 'sdo_chairs' + +class Sdos(models.Model): + sdo_id = models.IntegerField(primary_key=True) + sdo_name = models.CharField(blank=True, maxlength=255) + class Meta: + db_table = 'sdos' + +class SecretariatStaff(models.Model): + person_or_org_tag = models.IntegerField(primary_key=True) + title = models.CharField(blank=True, maxlength=255) + class Meta: + db_table = 'secretariat_staff' + +class SessionConflicts(models.Model): + id = models.IntegerField(primary_key=True) + group_acronym_id = models.IntegerField(null=True, blank=True) + conflict_gid = models.IntegerField(null=True, blank=True) + meeting_num = models.IntegerField(null=True, blank=True) + class Meta: + db_table = 'session_conflicts' + +class SessionNames(models.Model): + session_name_id = models.IntegerField(primary_key=True) + session_name = models.CharField(blank=True, maxlength=255) + class Meta: + db_table = 'session_names' + +class SessionRequestActivities(models.Model): + id = models.IntegerField(primary_key=True) + group_acronym_id = models.IntegerField(null=True, blank=True) + meeting_num = models.IntegerField(null=True, blank=True) + activity = models.TextField(blank=True) + act_date = models.DateField(null=True, blank=True) + act_time = models.CharField(blank=True, maxlength=100) + act_by = models.IntegerField(null=True, blank=True) + class Meta: + db_table = 'session_request_activities' + +class SessionStatus(models.Model): + status_id = models.IntegerField(primary_key=True) + status = models.CharField(blank=True, maxlength=100) + class Meta: + db_table = 'session_status' + +class SlideTypes(models.Model): + type_id = models.IntegerField(primary_key=True) + type_name = models.CharField(blank=True, maxlength=255) + class Meta: + db_table = 'slide_types' + +class Slides(models.Model): + id = models.IntegerField(primary_key=True) + meeting_num = models.IntegerField(null=True, blank=True) + group_acronym_id = models.IntegerField(null=True, blank=True) + slide_num = models.IntegerField(null=True, blank=True) + slide_type_id = models.IntegerField(null=True, blank=True) + slide_name = models.CharField(blank=True, maxlength=255) + irtf = models.IntegerField(null=True, blank=True) + interim = models.IntegerField(null=True, blank=True) + order_num = models.IntegerField(null=True, blank=True) + in_q = models.IntegerField(null=True, blank=True) + class Meta: + db_table = 'slides' + +class StaffWorkDetail(models.Model): + id = models.IntegerField(primary_key=True) + name = models.CharField(blank=True, maxlength=255) + start_date = models.DateField(null=True, blank=True) + finish_date = models.DateField(null=True, blank=True) + actual_finish_date = models.DateField(null=True, blank=True) + duration = models.CharField(blank=True, maxlength=255) + percent_complete = models.CharField(blank=True, maxlength=255) + person_or_org_tag = models.IntegerField(null=True, blank=True) + class Meta: + db_table = 'staff_work_detail' + +class StaffWorkHistory(models.Model): + person_or_org_tag = models.IntegerField(primary_key=True) + history_text = models.TextField(blank=True) + class Meta: + db_table = 'staff_work_history' + +class SubState(models.Model): + sub_state_id = models.IntegerField(primary_key=True) + sub_state_val = models.CharField(blank=True, maxlength=55) + sub_state_desc = models.TextField(blank=True) + class Meta: + db_table = 'sub_state' + +class Switches(models.Model): + id = models.IntegerField(primary_key=True) + name = models.CharField(blank=True, maxlength=100) + val = models.IntegerField(null=True, blank=True) + updated_date = models.DateField(null=True, blank=True) + updated_time = models.TextField(blank=True) # This field type is a guess. + class Meta: + db_table = 'switches' + +class TaskStatus(models.Model): + task_status_id = models.IntegerField(primary_key=True) + task_status_value = models.CharField(blank=True, maxlength=75) + class Meta: + db_table = 'task_status' + +class Telechat(models.Model): + telechat_id = models.IntegerField(primary_key=True) + telechat_date = models.DateField(null=True, blank=True) + minute_approved = models.IntegerField(null=True, blank=True) + wg_news_txt = models.TextField(blank=True) + iab_news_txt = models.TextField(blank=True) + management_issue = models.TextField(blank=True) + frozen = models.IntegerField(null=True, blank=True) + mi_frozen = models.IntegerField(null=True, blank=True) + class Meta: + db_table = 'telechat' + +class TelechatDates(models.Model): + date1 = models.DateField(null=True, blank=True) + date2 = models.DateField(null=True, blank=True) + date3 = models.DateField(null=True, blank=True) + date4 = models.DateField(null=True, blank=True) + class Meta: + db_table = 'telechat_dates' + +class TelechatMinutes(models.Model): + id = models.IntegerField(primary_key=True) + telechat_date = models.DateField(null=True, blank=True) + telechat_minute = models.TextField(blank=True) + exported = models.IntegerField(null=True, blank=True) + class Meta: + db_table = 'telechat_minutes' + +class TelechatUsers(models.Model): + person_or_org_tag = models.IntegerField(primary_key=True) + is_iesg = models.IntegerField(null=True, blank=True) + affiliated_org = models.CharField(blank=True, maxlength=25) + class Meta: + db_table = 'telechat_users' + +class TempAdmins(models.Model): + name = models.CharField(blank=True, maxlength=255) + list_url = models.TextField(blank=True) + class Meta: + db_table = 'temp_admins' + +class TempTelechatAttendees(models.Model): + id = models.IntegerField(primary_key=True) + telechat_id = models.IntegerField(null=True, blank=True) + last_name = models.CharField(blank=True, maxlength=255) + first_name = models.CharField(blank=True, maxlength=255) + affiliation = models.CharField(blank=True, maxlength=255) + class Meta: + db_table = 'temp_telechat_attendees' + +class TempTxt(models.Model): + id = models.IntegerField(primary_key=True) + temp_txt = models.TextField(blank=True) + class Meta: + db_table = 'temp_txt' + +class Templates(models.Model): + template_id = models.IntegerField(primary_key=True) + template_text = models.TextField(blank=True) + template_type = models.IntegerField(null=True, blank=True) + template_title = models.CharField(blank=True, maxlength=255) + note = models.TextField(blank=True) + discussed_status_id = models.IntegerField(null=True, blank=True) + decision = models.TextField(blank=True) + class Meta: + db_table = 'templates' + +class UpdatedIpr(models.Model): + id = models.IntegerField(primary_key=True) + ipr_id = models.IntegerField(null=True, blank=True) + status_to_be = models.IntegerField(null=True, blank=True) + updated = models.IntegerField(null=True, blank=True) + class Meta: + db_table = 'updated_ipr' + +class Uploads(models.Model): + file_id = models.IntegerField(primary_key=True) + file_title = models.CharField(blank=True, maxlength=255) + person_or_org_tag = models.IntegerField(null=True, blank=True) + file_extension = models.CharField(blank=True, maxlength=10) + detail_id = models.IntegerField(null=True, blank=True) + class Meta: + db_table = 'uploads' + +class UploadsTemp(models.Model): + file_id = models.IntegerField(primary_key=True) + file_title = models.CharField(blank=True, maxlength=255) + file_extension = models.CharField(blank=True, maxlength=10) + detail_id = models.IntegerField(null=True, blank=True) + person_or_org_tag = models.IntegerField(null=True, blank=True) + class Meta: + db_table = 'uploads_temp' + +class Users(models.Model): + person_or_org_tag = models.IntegerField(primary_key=True) + login_name = models.CharField(blank=True, maxlength=255) + password = models.CharField(blank=True, maxlength=25) + user_level = models.IntegerField(null=True, blank=True) + comment = models.TextField(blank=True) + class Meta: + db_table = 'users' + +class WebGmChairs(models.Model): + id = models.IntegerField(primary_key=True) + username = models.CharField(maxlength=20) + ip_address = models.CharField(maxlength=15) + gm_id = models.IntegerField() + date = models.DateField() + class Meta: + db_table = 'web_gm_chairs' + +class WebLoginInfo(models.Model): + id = models.IntegerField(primary_key=True) + username = models.CharField(maxlength=20) + user_type = models.CharField(maxlength=25) + ip_address = models.CharField(maxlength=15) + date = models.DateField() + class Meta: + db_table = 'web_login_info' + +class WebUserInfo(models.Model): + id = models.IntegerField(primary_key=True) + user_type = models.CharField(maxlength=25) + password = models.CharField(maxlength=20) + class Meta: + db_table = 'web_user_info' + +class WgAgenda(models.Model): + id = models.IntegerField(primary_key=True) + meeting_num = models.IntegerField(null=True, blank=True) + group_acronym_id = models.IntegerField(null=True, blank=True) + filename = models.CharField(blank=True, maxlength=255) + irtf = models.IntegerField(null=True, blank=True) + interim = models.IntegerField(null=True, blank=True) + class Meta: + db_table = 'wg_agenda' + +class WgMeetingSessions(models.Model): + session_id = models.IntegerField(primary_key=True) + meeting_num = models.IntegerField(null=True, blank=True) + group_acronym_id = models.IntegerField(null=True, blank=True) + irtf = models.IntegerField(null=True, blank=True) + num_session = models.IntegerField(null=True, blank=True) + length_session1 = models.CharField(blank=True, maxlength=100) + length_session2 = models.CharField(blank=True, maxlength=100) + length_session3 = models.CharField(blank=True, maxlength=100) + conflict1 = models.CharField(blank=True, maxlength=255) + conflict2 = models.CharField(blank=True, maxlength=255) + conflict3 = models.CharField(blank=True, maxlength=255) + conflict_other = models.TextField(blank=True) + special_req = models.TextField(blank=True) + number_attendee = models.IntegerField(null=True, blank=True) + approval_ad = models.IntegerField(null=True, blank=True) + status_id = models.IntegerField(null=True, blank=True) + ts_status_id = models.IntegerField(null=True, blank=True) + requested_date = models.DateField(null=True, blank=True) + approved_date = models.DateField(null=True, blank=True) + requested_by = models.IntegerField(null=True, blank=True) + scheduled_date = models.DateField(null=True, blank=True) + last_modified_date = models.DateField(null=True, blank=True) + ad_comments = models.TextField(blank=True) + sched_room_id1 = models.IntegerField(null=True, blank=True) + sched_time_id1 = models.IntegerField(null=True, blank=True) + sched_date1 = models.DateField(null=True, blank=True) + sched_room_id2 = models.IntegerField(null=True, blank=True) + sched_time_id2 = models.IntegerField(null=True, blank=True) + sched_date2 = models.DateField(null=True, blank=True) + sched_room_id3 = models.IntegerField(null=True, blank=True) + sched_time_id3 = models.IntegerField(null=True, blank=True) + sched_date3 = models.DateField(null=True, blank=True) + special_agenda_note = models.CharField(blank=True, maxlength=255) + combined_room_id1 = models.IntegerField(null=True, blank=True) + combined_time_id1 = models.IntegerField(null=True, blank=True) + combined_room_id2 = models.IntegerField(null=True, blank=True) + combined_time_id2 = models.IntegerField(null=True, blank=True) + class Meta: + db_table = 'wg_meeting_sessions' + +class WgMeetingSessionsTemp(models.Model): + temp_id = models.IntegerField(primary_key=True) + group_acronym_id = models.IntegerField(null=True, blank=True) + irtf = models.IntegerField(null=True, blank=True) + num_session = models.IntegerField(null=True, blank=True) + length_session1 = models.CharField(blank=True, maxlength=100) + length_session2 = models.CharField(blank=True, maxlength=100) + length_session3 = models.CharField(blank=True, maxlength=100) + conflict1 = models.CharField(blank=True, maxlength=255) + conflict2 = models.CharField(blank=True, maxlength=255) + conflict3 = models.CharField(blank=True, maxlength=255) + conflict_other = models.TextField(blank=True) + special_req = models.TextField(blank=True) + number_attendee = models.IntegerField(null=True, blank=True) + class Meta: + db_table = 'wg_meeting_sessions_temp' + +class WgPassword(models.Model): + person_or_org_tag = models.IntegerField(primary_key=True) + password = models.CharField(blank=True, maxlength=255) + secrete_question_id = models.IntegerField(null=True, blank=True) + secrete_answer = models.CharField(blank=True, maxlength=255) + is_tut_resp = models.IntegerField(null=True, blank=True) + irtf_id = models.IntegerField(null=True, blank=True) + comment = models.TextField(blank=True) + login_name = models.CharField(blank=True, maxlength=100) + class Meta: + db_table = 'wg_password' + +class WgProceedingsActivities(models.Model): + id = models.IntegerField(primary_key=True) + group_acronym_id = models.IntegerField(null=True, blank=True) + meeting_num = models.IntegerField(null=True, blank=True) + activity = models.CharField(blank=True, maxlength=255) + act_date = models.DateField(null=True, blank=True) + act_time = models.CharField(blank=True, maxlength=100) + act_by = models.IntegerField(null=True, blank=True) + class Meta: + db_table = 'wg_proceedings_activities' + diff --git a/ietf/database-notes/idtracker.dump b/ietf/database-notes/idtracker.dump new file mode 100644 index 000000000..6fe31ddf1 --- /dev/null +++ b/ietf/database-notes/idtracker.dump @@ -0,0 +1,2161 @@ +-- MySQL dump 10.9 +-- +-- Host: localhost Database: idtracker +-- ------------------------------------------------------ +-- Server version 4.1.18 + +/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; +/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */; +/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */; +/*!40101 SET NAMES utf8 */; +/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */; +/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */; +/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */; +/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */; + +-- +-- Table structure for table `acronym` +-- + +DROP TABLE IF EXISTS `acronym`; +CREATE TABLE `acronym` ( + `acronym_id` int(11) NOT NULL auto_increment, + `acronym` char(12) default NULL, + `name` char(100) NOT NULL default '', + `name_key` char(50) NOT NULL default '', + PRIMARY KEY (`acronym_id`), + UNIQUE KEY `acronym` (`acronym`,`name`) +) ENGINE=MyISAM DEFAULT CHARSET=latin1; + +-- +-- Table structure for table `agenda_cat` +-- + +DROP TABLE IF EXISTS `agenda_cat`; +CREATE TABLE `agenda_cat` ( + `agenda_cat_id` int(2) NOT NULL auto_increment, + `agenda_cat_value` varchar(100) default NULL, + PRIMARY KEY (`agenda_cat_id`) +) ENGINE=MyISAM DEFAULT CHARSET=latin1; + +-- +-- Table structure for table `agenda_items` +-- + +DROP TABLE IF EXISTS `agenda_items`; +CREATE TABLE `agenda_items` ( + `agenda_item_id` int(11) NOT NULL auto_increment, + `telechat_id` int(4) NOT NULL default '0', + `agenda_cat_id` int(2) default NULL, + `ballot_id` int(11) NOT NULL default '0', + `group_acronym_id` int(11) NOT NULL default '0', + `agenda_item_status_id` int(1) default '0', + `iana_note` text, + `other_note` text, + `agenda_note_cat_id` int(1) default NULL, + `note_draft_by` int(2) default '0', + `item_num` int(2) default NULL, + `total_num` int(2) default NULL, + `agenda_item_gr_status_id` int(1) default NULL, + `wg_action_status` int(1) default '0', + `wg_action_status_sub` int(1) default '0', + PRIMARY KEY (`agenda_item_id`) +) ENGINE=MyISAM DEFAULT CHARSET=latin1; + +-- +-- Table structure for table `all_id` +-- + +DROP TABLE IF EXISTS `all_id`; +CREATE TABLE `all_id` ( + `id_document_tag` int(11) NOT NULL default '0', + `filename` varchar(100) default NULL, + `last_active_revision` char(2) default NULL, + PRIMARY KEY (`id_document_tag`) +) ENGINE=MyISAM DEFAULT CHARSET=latin1; + +-- +-- Table structure for table `announced_from` +-- + +DROP TABLE IF EXISTS `announced_from`; +CREATE TABLE `announced_from` ( + `announced_from_id` int(2) NOT NULL auto_increment, + `announced_from_value` varchar(255) default NULL, + `announced_from_email` varchar(255) default NULL, + PRIMARY KEY (`announced_from_id`) +) ENGINE=MyISAM DEFAULT CHARSET=latin1; + +-- +-- Table structure for table `announced_to` +-- + +DROP TABLE IF EXISTS `announced_to`; +CREATE TABLE `announced_to` ( + `announced_to_id` int(2) NOT NULL auto_increment, + `announced_to_value` varchar(255) default NULL, + `announced_to_email` varchar(255) default NULL, + PRIMARY KEY (`announced_to_id`) +) ENGINE=MyISAM DEFAULT CHARSET=latin1; + +-- +-- Table structure for table `announcements` +-- + +DROP TABLE IF EXISTS `announcements`; +CREATE TABLE `announcements` ( + `announcement_id` int(12) NOT NULL auto_increment, + `announced_by` int(2) NOT NULL default '0', + `announced_date` date default NULL, + `announced_time` varchar(20) default NULL, + `announcement_text` text, + `announced_from_id` int(1) default '1', + `cc` varchar(255) default NULL, + `subject` varchar(255) default NULL, + `extra` text, + `announced_to_id` int(2) default NULL, + `nomcom` int(1) default NULL, + `nomcom_chair_id` int(4) default NULL, + `manualy_added` int(1) default '0', + `other_val` varchar(255) default NULL, + PRIMARY KEY (`announcement_id`) +) ENGINE=MyISAM DEFAULT CHARSET=latin1; + +-- +-- Table structure for table `area_directors` +-- + +DROP TABLE IF EXISTS `area_directors`; +CREATE TABLE `area_directors` ( + `id` int(11) NOT NULL auto_increment, + `area_acronym_id` int(11) NOT NULL default '0', + `person_or_org_tag` int(11) NOT NULL default '0', + PRIMARY KEY (`id`), + UNIQUE KEY `area_acronym_id` (`area_acronym_id`,`person_or_org_tag`) +) ENGINE=MyISAM DEFAULT CHARSET=latin1; + +-- +-- Table structure for table `area_group` +-- + +DROP TABLE IF EXISTS `area_group`; +CREATE TABLE `area_group` ( + `id` int(11) NOT NULL auto_increment, + `area_acronym_id` int(11) NOT NULL default '0', + `group_acronym_id` int(11) NOT NULL default '0', + PRIMARY KEY (`id`), + UNIQUE KEY `area_acronym_id` (`area_acronym_id`,`group_acronym_id`) +) ENGINE=MyISAM DEFAULT CHARSET=latin1; + +-- +-- Table structure for table `area_status` +-- + +DROP TABLE IF EXISTS `area_status`; +CREATE TABLE `area_status` ( + `status_id` int(11) NOT NULL auto_increment, + `status_value` char(25) NOT NULL default '', + PRIMARY KEY (`status_id`) +) ENGINE=MyISAM DEFAULT CHARSET=latin1; + +-- +-- Table structure for table `areas` +-- + +DROP TABLE IF EXISTS `areas`; +CREATE TABLE `areas` ( + `area_acronym_id` int(11) NOT NULL default '0', + `start_date` date NOT NULL default '0000-00-00', + `concluded_date` date default NULL, + `status_id` int(11) NOT NULL default '0', + `comments` text, + `last_modified_date` date NOT NULL default '0000-00-00', + `extra_email_addresses` text, + PRIMARY KEY (`area_acronym_id`) +) ENGINE=MyISAM DEFAULT CHARSET=latin1; + +-- +-- Table structure for table `ballot_info` +-- + +DROP TABLE IF EXISTS `ballot_info`; +CREATE TABLE `ballot_info` ( + `ballot_id` int(8) NOT NULL default '0', + `active` int(1) NOT NULL default '0', + `an_sent` int(1) NOT NULL default '0', + `an_sent_date` date default NULL, + `an_sent_by` int(1) default NULL, + `defer` int(1) default '0', + `defer_by` int(2) default NULL, + `defer_date` date default NULL, + `approval_text` text, + `last_call_text` text, + `ballot_writeup` text, + `ballot_issued` int(1) default '0', + PRIMARY KEY (`ballot_id`) +) ENGINE=MyISAM DEFAULT CHARSET=latin1; + +-- +-- Table structure for table `ballots` +-- + +DROP TABLE IF EXISTS `ballots`; +CREATE TABLE `ballots` ( + `ballot_id` int(8) NOT NULL default '0', + `ad_id` int(8) NOT NULL default '0', + `yes_col` int(1) NOT NULL default '0', + `no_col` int(1) NOT NULL default '0', + `abstain` int(1) NOT NULL default '0', + `approve` int(1) NOT NULL default '0', + `discuss` int(1) NOT NULL default '0', + `recuse` int(1) default '0', + PRIMARY KEY (`ballot_id`,`ad_id`) +) ENGINE=MyISAM DEFAULT CHARSET=latin1; + +-- +-- Table structure for table `ballots_comment` +-- + +DROP TABLE IF EXISTS `ballots_comment`; +CREATE TABLE `ballots_comment` ( + `ballot_id` int(8) NOT NULL default '0', + `ad_id` int(8) NOT NULL default '0', + `comment_date` date NOT NULL default '0000-00-00', + `revision` char(2) NOT NULL default '', + `active` int(1) NOT NULL default '1', + `comment_text` text, + PRIMARY KEY (`ballot_id`,`ad_id`) +) ENGINE=MyISAM DEFAULT CHARSET=latin1; + +-- +-- Table structure for table `ballots_discuss` +-- + +DROP TABLE IF EXISTS `ballots_discuss`; +CREATE TABLE `ballots_discuss` ( + `ballot_id` int(8) NOT NULL default '0', + `ad_id` int(8) NOT NULL default '0', + `discuss_date` date NOT NULL default '0000-00-00', + `revision` char(2) NOT NULL default '', + `active` int(1) NOT NULL default '1', + `discuss_text` text, + PRIMARY KEY (`ballot_id`,`ad_id`) +) ENGINE=MyISAM DEFAULT CHARSET=latin1; + +-- +-- Table structure for table `bash_agenda` +-- + +DROP TABLE IF EXISTS `bash_agenda`; +CREATE TABLE `bash_agenda` ( + `telechat_id` int(11) NOT NULL default '0', + `bash_agenda_txt` text, + `change_agenda` int(1) default '0', + `change_agenda_note` text, + PRIMARY KEY (`telechat_id`) +) ENGINE=MyISAM DEFAULT CHARSET=latin1; + +-- +-- Table structure for table `chairs` +-- + +DROP TABLE IF EXISTS `chairs`; +CREATE TABLE `chairs` ( + `person_or_org_tag` int(11) NOT NULL default '0', + `chair_name` varchar(25) default NULL, + PRIMARY KEY (`person_or_org_tag`) +) ENGINE=MyISAM DEFAULT CHARSET=latin1; + +-- +-- Table structure for table `chairs_history` +-- + +DROP TABLE IF EXISTS `chairs_history`; +CREATE TABLE `chairs_history` ( + `id` int(4) NOT NULL auto_increment, + `chair_type_id` int(1) default NULL, + `present_chair` int(1) default NULL, + `person_or_org_tag` int(9) default NULL, + `start_year` int(4) default NULL, + `end_year` int(4) default NULL, + PRIMARY KEY (`id`) +) ENGINE=MyISAM DEFAULT CHARSET=latin1; + +-- +-- Table structure for table `document_comments` +-- + +DROP TABLE IF EXISTS `document_comments`; +CREATE TABLE `document_comments` ( + `id` int(11) NOT NULL auto_increment, + `document_id` int(11) NOT NULL default '0', + `rfc_flag` smallint(6) default NULL, + `public_flag` smallint(6) default NULL, + `comment_date` date NOT NULL default '0000-00-00', + `comment_time` varchar(20) NOT NULL default '', + `version` char(3) default NULL, + `comment_text` text, + `created_by` int(11) default NULL, + `result_state` smallint(6) default NULL, + `origin_state` smallint(6) default NULL, + `ballot` int(1) default '0', + PRIMARY KEY (`id`) +) ENGINE=MyISAM DEFAULT CHARSET=latin1; + +-- +-- Table structure for table `dt_request` +-- + +DROP TABLE IF EXISTS `dt_request`; +CREATE TABLE `dt_request` ( + `id` int(11) NOT NULL auto_increment, + `description` varchar(255) NOT NULL default '', + `request_by` smallint(6) NOT NULL default '0', + `request_date` date default NULL, + `cur_version` varchar(5) default NULL, + `status` text, + `done_flag` smallint(6) default NULL, + PRIMARY KEY (`id`) +) ENGINE=MyISAM DEFAULT CHARSET=latin1; + +-- +-- Table structure for table `email_addresses` +-- + +DROP TABLE IF EXISTS `email_addresses`; +CREATE TABLE `email_addresses` ( + `person_or_org_tag` int(11) NOT NULL default '0', + `email_type` varchar(4) NOT NULL default '', + `email_priority` smallint(6) NOT NULL default '0', + `email_address` varchar(255) default NULL, + `email_comment` varchar(255) default NULL, + KEY `email_index` (`person_or_org_tag`,`email_priority`), + KEY `etag_type` (`person_or_org_tag`,`email_type`), + KEY `ix101_4` (`email_address`) +) ENGINE=MyISAM DEFAULT CHARSET=latin1; + +-- +-- Table structure for table `from_bodies` +-- + +DROP TABLE IF EXISTS `from_bodies`; +CREATE TABLE `from_bodies` ( + `from_id` int(2) NOT NULL default '0', + `body_name` varchar(35) default NULL, + `poc` int(11) default NULL, + `is_liaison_manager` int(1) default '0', + `other_sdo` int(1) default '1', + `email_priority` int(1) default '1', + PRIMARY KEY (`from_id`) +) ENGINE=MyISAM DEFAULT CHARSET=latin1; + +-- +-- Table structure for table `g_chairs` +-- + +DROP TABLE IF EXISTS `g_chairs`; +CREATE TABLE `g_chairs` ( + `id` int(11) NOT NULL auto_increment, + `person_or_org_tag` int(11) NOT NULL default '0', + `group_acronym_id` int(11) NOT NULL default '0', + PRIMARY KEY (`id`), + UNIQUE KEY `group_acronym_id` (`group_acronym_id`,`person_or_org_tag`) +) ENGINE=MyISAM DEFAULT CHARSET=latin1; + +-- +-- Table structure for table `g_editors` +-- + +DROP TABLE IF EXISTS `g_editors`; +CREATE TABLE `g_editors` ( + `id` int(11) NOT NULL auto_increment, + `group_acronym_id` int(11) NOT NULL default '0', + `person_or_org_tag` int(11) NOT NULL default '0', + PRIMARY KEY (`id`), + UNIQUE KEY `group_acronym_id` (`group_acronym_id`,`person_or_org_tag`) +) ENGINE=MyISAM DEFAULT CHARSET=latin1; + +-- +-- Table structure for table `g_secretaries` +-- + +DROP TABLE IF EXISTS `g_secretaries`; +CREATE TABLE `g_secretaries` ( + `id` int(9) NOT NULL auto_increment, + `group_acronym_id` int(11) default NULL, + `person_or_org_tag` int(11) default NULL, + PRIMARY KEY (`id`) +) ENGINE=MyISAM DEFAULT CHARSET=latin1; + +-- +-- Table structure for table `g_secretary` +-- + +DROP TABLE IF EXISTS `g_secretary`; +CREATE TABLE `g_secretary` ( + `id` int(9) NOT NULL auto_increment, + `group_acronym_id` int(9) NOT NULL default '0', + `person_or_org_tag` int(11) NOT NULL default '0', + PRIMARY KEY (`id`) +) ENGINE=MyISAM DEFAULT CHARSET=latin1; + +-- +-- Table structure for table `g_status` +-- + +DROP TABLE IF EXISTS `g_status`; +CREATE TABLE `g_status` ( + `status_id` int(11) NOT NULL auto_increment, + `status_value` char(25) NOT NULL default '', + PRIMARY KEY (`status_id`) +) ENGINE=MyISAM DEFAULT CHARSET=latin1; + +-- +-- Table structure for table `g_tech_advisors` +-- + +DROP TABLE IF EXISTS `g_tech_advisors`; +CREATE TABLE `g_tech_advisors` ( + `id` int(11) NOT NULL auto_increment, + `group_acronym_id` int(11) NOT NULL default '0', + `person_or_org_tag` int(11) NOT NULL default '0', + PRIMARY KEY (`id`), + UNIQUE KEY `group_acronym_id` (`group_acronym_id`,`person_or_org_tag`) +) ENGINE=MyISAM DEFAULT CHARSET=latin1; + +-- +-- Table structure for table `g_type` +-- + +DROP TABLE IF EXISTS `g_type`; +CREATE TABLE `g_type` ( + `group_type_id` int(11) NOT NULL auto_increment, + `group_type` char(25) NOT NULL default '', + PRIMARY KEY (`group_type_id`) +) ENGINE=MyISAM DEFAULT CHARSET=latin1; + +-- +-- Table structure for table `general_info` +-- + +DROP TABLE IF EXISTS `general_info`; +CREATE TABLE `general_info` ( + `id` int(2) NOT NULL auto_increment, + `info_name` varchar(50) default NULL, + `info_text` text, + `info_header` varchar(255) default NULL, + PRIMARY KEY (`id`) +) ENGINE=MyISAM DEFAULT CHARSET=latin1; + +-- +-- Table structure for table `goals_milestones` +-- + +DROP TABLE IF EXISTS `goals_milestones`; +CREATE TABLE `goals_milestones` ( + `gm_id` int(11) NOT NULL auto_increment, + `group_acronym_id` int(11) NOT NULL default '0', + `description` text, + `expected_due_date` date default NULL, + `done_date` date default NULL, + `done` varchar(4) default NULL, + `last_modified_date` date NOT NULL default '0000-00-00', + PRIMARY KEY (`gm_id`) +) ENGINE=MyISAM DEFAULT CHARSET=latin1; + +-- +-- Table structure for table `group_flag` +-- + +DROP TABLE IF EXISTS `group_flag`; +CREATE TABLE `group_flag` ( + `group_flag` int(11) NOT NULL auto_increment, + `group_flag_val` char(30) default NULL, + `equiv_doc_state_id` smallint(6) default NULL, + PRIMARY KEY (`group_flag`) +) ENGINE=MyISAM DEFAULT CHARSET=latin1; + +-- +-- Table structure for table `group_internal` +-- + +DROP TABLE IF EXISTS `group_internal`; +CREATE TABLE `group_internal` ( + `group_acronym_id` int(11) NOT NULL default '0', + `note` text, + `status_date` date default NULL, + `agenda` smallint(1) default '1', + `token_name` varchar(25) default NULL, + `pwg_cat_id` int(1) default NULL, + `telechat_date` date default NULL, + PRIMARY KEY (`group_acronym_id`), + UNIQUE KEY `group_internal_idx` (`group_acronym_id`) +) ENGINE=MyISAM DEFAULT CHARSET=latin1; + +-- +-- Table structure for table `groups_ietf` +-- + +DROP TABLE IF EXISTS `groups_ietf`; +CREATE TABLE `groups_ietf` ( + `group_acronym_id` int(11) NOT NULL default '0', + `group_type_id` int(11) NOT NULL default '0', + `proposed_date` date default NULL, + `start_date` date default NULL, + `dormant_date` date default NULL, + `concluded_date` date default NULL, + `status_id` int(11) NOT NULL default '0', + `area_director_id` int(11) NOT NULL default '0', + `meeting_scheduled` char(3) default NULL, + `email_address` varchar(60) default NULL, + `email_subscribe` varchar(120) default NULL, + `email_keyword` varchar(50) default NULL, + `email_archive` varchar(95) default NULL, + `comments` text, + `last_modified_date` date NOT NULL default '0000-00-00', + `meeting_scheduled_old` char(3) default NULL, + PRIMARY KEY (`group_acronym_id`) +) ENGINE=MyISAM DEFAULT CHARSET=latin1; + +-- +-- Table structure for table `hit_counter` +-- + +DROP TABLE IF EXISTS `hit_counter`; +CREATE TABLE `hit_counter` ( + `id` int(2) NOT NULL auto_increment, + `page_name` varchar(255) default NULL, + `hit_count` int(8) default NULL, + `last_visitor` varchar(255) default NULL, + `last_visited_date` date default NULL, + PRIMARY KEY (`id`) +) ENGINE=MyISAM DEFAULT CHARSET=latin1; + +-- +-- Table structure for table `id_authors` +-- + +DROP TABLE IF EXISTS `id_authors`; +CREATE TABLE `id_authors` ( + `id` int(11) NOT NULL auto_increment, + `id_document_tag` int(11) NOT NULL default '0', + `person_or_org_tag` int(11) NOT NULL default '0', + `author_order` int(11) default NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `id_document_tag` (`id_document_tag`,`person_or_org_tag`) +) ENGINE=MyISAM DEFAULT CHARSET=latin1; + +-- +-- Table structure for table `id_dates` +-- + +DROP TABLE IF EXISTS `id_dates`; +CREATE TABLE `id_dates` ( + `id` int(1) NOT NULL auto_increment, + `id_date` date default NULL, + `date_name` varchar(255) default NULL, + `f_name` varchar(255) default NULL, + PRIMARY KEY (`id`) +) ENGINE=MyISAM DEFAULT CHARSET=latin1; + +-- +-- Table structure for table `id_intended_status` +-- + +DROP TABLE IF EXISTS `id_intended_status`; +CREATE TABLE `id_intended_status` ( + `intended_status_id` int(11) NOT NULL auto_increment, + `status_value` char(25) NOT NULL default '', + PRIMARY KEY (`intended_status_id`) +) ENGINE=MyISAM DEFAULT CHARSET=latin1; + +-- +-- Table structure for table `id_internal` +-- + +DROP TABLE IF EXISTS `id_internal`; +CREATE TABLE `id_internal` ( + `id_document_tag` int(11) NOT NULL default '0', + `rfc_flag` smallint(6) default NULL, + `ballot_id` int(11) NOT NULL default '0', + `primary_flag` smallint(6) default NULL, + `group_flag` smallint(6) NOT NULL default '0', + `token_name` varchar(25) default NULL, + `token_email` varchar(255) default NULL, + `note` text, + `status_date` date default NULL, + `email_display` varchar(50) default NULL, + `agenda` smallint(6) default NULL, + `cur_state` smallint(6) NOT NULL default '0', + `prev_state` smallint(6) NOT NULL default '0', + `assigned_to` varchar(25) default NULL, + `mark_by` smallint(6) NOT NULL default '0', + `job_owner` smallint(6) NOT NULL default '0', + `event_date` date default NULL, + `area_acronym_id` int(11) NOT NULL default '0', + `cur_sub_state_id` int(11) NOT NULL default '0', + `prev_sub_state_id` int(11) NOT NULL default '0', + `returning_item` int(1) default '0', + `telechat_date` date default NULL, + `via_rfc_editor` int(1) default '0', + `state_change_notice_to` varchar(255) default NULL, + `dnp` int(1) default '0', + `dnp_date` date default NULL, + `noproblem` int(1) default '0', + `resurrect_requested_by` int(9) default '0', + `approved_in_minute` int(1) default '1', + PRIMARY KEY (`id_document_tag`), + UNIQUE KEY `id_internal_idx` (`id_document_tag`), + KEY `id_internal_idx2` (`group_flag`), + KEY `id_internal_idx3` (`cur_state`), + KEY `id_internal_idx4` (`job_owner`), + KEY `id_internal_idx5` (`area_acronym_id`), + KEY `id_internal_idx6` (`ballot_id`) +) ENGINE=MyISAM DEFAULT CHARSET=latin1; + +-- +-- Table structure for table `id_restricted_word` +-- + +DROP TABLE IF EXISTS `id_restricted_word`; +CREATE TABLE `id_restricted_word` ( + `id` int(11) NOT NULL auto_increment, + `restricted_word` char(25) NOT NULL default '', + PRIMARY KEY (`id`) +) ENGINE=MyISAM DEFAULT CHARSET=latin1; + +-- +-- Table structure for table `id_status` +-- + +DROP TABLE IF EXISTS `id_status`; +CREATE TABLE `id_status` ( + `status_id` int(11) NOT NULL auto_increment, + `status_value` char(25) NOT NULL default '', + PRIMARY KEY (`status_id`) +) ENGINE=MyISAM DEFAULT CHARSET=latin1; + +-- +-- Table structure for table `id_submission_env` +-- + +DROP TABLE IF EXISTS `id_submission_env`; +CREATE TABLE `id_submission_env` ( + `max_live` int(4) default NULL, + `staging_path` varchar(255) default NULL, + `max_interval` int(4) default NULL, + `current_manual_proc_date` int(4) default NULL, + `init_rev_approved_msg` text, + `submitter_auth_msg` text, + `id_action_announcement` text, + `target_path_web` varchar(255) default NULL, + `target_path_ftp` varchar(255) default NULL, + `side_bar_html` text, + `staging_url` varchar(255) default NULL, + `top_bar_html` text, + `bottom_bar_html` text, + `id_approval_request_msg` text, + `emerg_auto_response` int(2) default NULL +) ENGINE=MyISAM DEFAULT CHARSET=latin1; + +-- +-- Table structure for table `iesg_history` +-- + +DROP TABLE IF EXISTS `iesg_history`; +CREATE TABLE `iesg_history` ( + `meeting_num` int(4) NOT NULL default '0', + `area_acronym_id` int(8) NOT NULL default '0', + `person_or_org_tag` int(9) NOT NULL default '0', + PRIMARY KEY (`meeting_num`,`area_acronym_id`,`person_or_org_tag`) +) ENGINE=MyISAM DEFAULT CHARSET=latin1; + +-- +-- Table structure for table `iesg_login` +-- + +DROP TABLE IF EXISTS `iesg_login`; +CREATE TABLE `iesg_login` ( + `id` int(11) NOT NULL auto_increment, + `login_name` varchar(255) default NULL, + `password` varchar(25) NOT NULL default '', + `user_level` smallint(6) NOT NULL default '0', + `first_name` varchar(25) default NULL, + `last_name` varchar(25) default NULL, + `person_or_org_tag` int(11) default NULL, + `pgp_id` varchar(20) default NULL, + `default_search` int(1) default NULL, + PRIMARY KEY (`id`) +) ENGINE=MyISAM DEFAULT CHARSET=latin1; + +-- +-- Table structure for table `iesg_password` +-- + +DROP TABLE IF EXISTS `iesg_password`; +CREATE TABLE `iesg_password` ( + `person_or_org_tag` int(8) NOT NULL default '0', + `login_name` varchar(255) default NULL, + `password` varchar(255) default NULL, + PRIMARY KEY (`person_or_org_tag`) +) ENGINE=MyISAM DEFAULT CHARSET=latin1; + +-- +-- Table structure for table `imported_mailing_list` +-- + +DROP TABLE IF EXISTS `imported_mailing_list`; +CREATE TABLE `imported_mailing_list` ( + `id` int(4) NOT NULL auto_increment, + `group_acronym_id` int(8) default '0', + `list_acronym` varchar(255) default NULL, + `list_name` varchar(255) default NULL, + `list_domain` varchar(25) default NULL, + PRIMARY KEY (`id`) +) ENGINE=MyISAM DEFAULT CHARSET=latin1; + +-- +-- Table structure for table `interim_info` +-- + +DROP TABLE IF EXISTS `interim_info`; +CREATE TABLE `interim_info` ( + `id` int(4) NOT NULL auto_increment, + `group_acronym_id` int(8) default NULL, + `meeting_num` int(4) default NULL, + `meeting_date` varchar(255) default NULL, + `message_body` text, + PRIMARY KEY (`id`) +) ENGINE=MyISAM DEFAULT CHARSET=latin1; + +-- +-- Table structure for table `internet_drafts` +-- + +DROP TABLE IF EXISTS `internet_drafts`; +CREATE TABLE `internet_drafts` ( + `id_document_tag` int(11) NOT NULL auto_increment, + `id_document_name` varchar(255) default NULL, + `id_document_key` varchar(255) default NULL, + `group_acronym_id` int(11) default NULL, + `filename` varchar(255) default NULL, + `revision` char(2) NOT NULL default '', + `revision_date` date default NULL, + `file_type` varchar(20) default NULL, + `txt_page_count` int(11) default NULL, + `local_path` varchar(255) default NULL, + `start_date` date default NULL, + `expiration_date` date default NULL, + `abstract` text, + `dunn_sent_date` date default NULL, + `extension_date` date default NULL, + `status_id` int(11) NOT NULL default '0', + `intended_status_id` int(11) NOT NULL default '0', + `lc_sent_date` date default NULL, + `lc_changes` char(3) default NULL, + `lc_expiration_date` date default NULL, + `b_sent_date` date default NULL, + `b_discussion_date` date default NULL, + `b_approve_date` date default NULL, + `wgreturn_date` date default NULL, + `rfc_number` int(11) default NULL, + `comments` text, + `last_modified_date` date NOT NULL default '0000-00-00', + `replaced_by` int(11) default '0', + `review_by_rfc_editor` int(1) default '0', + `expired_tombstone` int(1) default '0', + PRIMARY KEY (`id_document_tag`), + KEY `ix223_5` (`filename`) +) ENGINE=MyISAM DEFAULT CHARSET=latin1; + +-- +-- Table structure for table `ipr_contacts` +-- + +DROP TABLE IF EXISTS `ipr_contacts`; +CREATE TABLE `ipr_contacts` ( + `contact_id` int(9) NOT NULL auto_increment, + `ipr_id` int(9) default NULL, + `contact_type` int(1) default NULL, + `name` varchar(255) default NULL, + `title` varchar(255) default NULL, + `department` varchar(255) default NULL, + `telephone` varchar(25) default NULL, + `fax` varchar(25) default NULL, + `email` varchar(255) default NULL, + `address1` varchar(255) default NULL, + `address2` varchar(255) default NULL, + PRIMARY KEY (`contact_id`) +) ENGINE=MyISAM DEFAULT CHARSET=latin1; + +-- +-- Table structure for table `ipr_detail` +-- + +DROP TABLE IF EXISTS `ipr_detail`; +CREATE TABLE `ipr_detail` ( + `ipr_id` int(9) NOT NULL auto_increment, + `p_h_legal_name` varchar(255) default NULL, + `document_title` varchar(255) default NULL, + `rfc_number` int(9) default NULL, + `id_document_tag` int(10) default NULL, + `other_designations` varchar(255) default NULL, + `p_applications` varchar(255) default NULL, + `date_applied` varchar(255) default NULL, + `selecttype` char(3) default NULL, + `disclouser_identify` varchar(255) default NULL, + `licensing_option` int(1) default NULL, + `other_notes` text, + `submitted_date` date default NULL, + `status` int(1) default NULL, + `comments` text, + `old_ipr_url` varchar(255) default NULL, + `additional_old_title1` varchar(255) default NULL, + `additional_old_url1` varchar(255) default NULL, + `additional_old_title2` varchar(255) default NULL, + `additional_old_url2` varchar(255) default NULL, + `country` varchar(100) default NULL, + `p_notes` text, + `third_party` int(1) default '0', + `lic_opt_a_sub` int(1) default NULL, + `lic_opt_b_sub` int(1) default NULL, + `lic_opt_c_sub` int(1) default NULL, + `generic` int(1) default '0', + `selectowned` char(3) default NULL, + `comply` int(1) default '1', + `lic_checkbox` int(1) default '0', + `update_notified_date` date default NULL, + PRIMARY KEY (`ipr_id`) +) ENGINE=MyISAM DEFAULT CHARSET=latin1; + +-- +-- Table structure for table `ipr_ids` +-- + +DROP TABLE IF EXISTS `ipr_ids`; +CREATE TABLE `ipr_ids` ( + `id` int(9) NOT NULL auto_increment, + `id_document_tag` int(9) default NULL, + `ipr_id` int(9) default NULL, + `revision` char(2) default NULL, + PRIMARY KEY (`id`) +) ENGINE=MyISAM DEFAULT CHARSET=latin1; + +-- +-- Table structure for table `ipr_licensing` +-- + +DROP TABLE IF EXISTS `ipr_licensing`; +CREATE TABLE `ipr_licensing` ( + `licensing_option` int(1) NOT NULL default '0', + `licensing_option_value` varchar(255) default NULL, + PRIMARY KEY (`licensing_option`) +) ENGINE=MyISAM DEFAULT CHARSET=latin1; + +-- +-- Table structure for table `ipr_notifications` +-- + +DROP TABLE IF EXISTS `ipr_notifications`; +CREATE TABLE `ipr_notifications` ( + `id` int(8) NOT NULL auto_increment, + `ipr_id` int(8) default NULL, + `notification` text, + `date_sent` date default NULL, + `time_sent` varchar(25) default NULL, + PRIMARY KEY (`id`) +) ENGINE=MyISAM DEFAULT CHARSET=latin1; + +-- +-- Table structure for table `ipr_rfcs` +-- + +DROP TABLE IF EXISTS `ipr_rfcs`; +CREATE TABLE `ipr_rfcs` ( + `id` int(9) NOT NULL auto_increment, + `ipr_id` int(9) default NULL, + `rfc_number` int(9) default NULL, + PRIMARY KEY (`id`) +) ENGINE=MyISAM DEFAULT CHARSET=latin1; + +-- +-- Table structure for table `ipr_selecttype` +-- + +DROP TABLE IF EXISTS `ipr_selecttype`; +CREATE TABLE `ipr_selecttype` ( + `type_id` int(9) NOT NULL auto_increment, + `selecttype` int(1) default NULL, + `type_display` varchar(15) default NULL, + PRIMARY KEY (`type_id`) +) ENGINE=MyISAM DEFAULT CHARSET=latin1; + +-- +-- Table structure for table `ipr_updates` +-- + +DROP TABLE IF EXISTS `ipr_updates`; +CREATE TABLE `ipr_updates` ( + `id` int(8) NOT NULL auto_increment, + `ipr_id` int(8) default NULL, + `updated` int(8) default NULL, + `status_to_be` int(1) default NULL, + `processed` int(1) default NULL, + PRIMARY KEY (`id`) +) ENGINE=MyISAM DEFAULT CHARSET=latin1; + +-- +-- Table structure for table `irtf` +-- + +DROP TABLE IF EXISTS `irtf`; +CREATE TABLE `irtf` ( + `irtf_id` int(2) NOT NULL auto_increment, + `irtf_acronym` varchar(25) default NULL, + `irtf_name` varchar(255) default NULL, + `charter_text` text, + `meeting_scheduled` int(1) default NULL, + PRIMARY KEY (`irtf_id`) +) ENGINE=MyISAM DEFAULT CHARSET=latin1; + +-- +-- Table structure for table `irtf_chairs` +-- + +DROP TABLE IF EXISTS `irtf_chairs`; +CREATE TABLE `irtf_chairs` ( + `id` int(4) NOT NULL auto_increment, + `irtf_id` int(2) default NULL, + `person_or_org_tag` int(8) default NULL, + PRIMARY KEY (`id`) +) ENGINE=MyISAM DEFAULT CHARSET=latin1; + +-- +-- Table structure for table `liaison_detail` +-- + +DROP TABLE IF EXISTS `liaison_detail`; +CREATE TABLE `liaison_detail` ( + `detail_id` int(9) NOT NULL default '0', + `person_or_org_tag` int(11) default NULL, + `submitted_date` date default NULL, + `last_modified_date` date default NULL, + `from_id` int(2) default NULL, + `to_body` varchar(255) default NULL, + `title` varchar(255) default NULL, + `response_contact` varchar(255) default NULL, + `technical_contact` varchar(255) default NULL, + `purpose` text, + `body` text, + `deadline_date` date default NULL, + `cc1` text, + `cc2` varchar(50) default NULL, + `submitter_name` varchar(255) default NULL, + `submitter_email` varchar(255) default NULL, + `by_secretariat` int(1) default '0', + `to_poc` varchar(255) default NULL, + `to_email` varchar(255) default NULL, + `purpose_id` int(1) default NULL, + `replyto` varchar(255) default NULL, + PRIMARY KEY (`detail_id`) +) ENGINE=MyISAM DEFAULT CHARSET=latin1; + +-- +-- Table structure for table `liaison_detail_temp` +-- + +DROP TABLE IF EXISTS `liaison_detail_temp`; +CREATE TABLE `liaison_detail_temp` ( + `detail_id` int(9) NOT NULL auto_increment, + `person_or_org_tag` int(11) default NULL, + `submitted_date` date default NULL, + `last_modified_date` date default NULL, + `from_id` int(2) default NULL, + `to_body` varchar(255) default NULL, + `title` varchar(255) default NULL, + `response_contact` varchar(255) default NULL, + `technical_contact` varchar(255) default NULL, + `purpose` text, + `body` text, + `deadline_date` date default NULL, + `cc1` text, + `cc2` varchar(50) default NULL, + `to_poc` varchar(255) default NULL, + `to_email` varchar(255) default NULL, + `purpose_id` int(1) default NULL, + `replyto` varchar(255) default NULL, + PRIMARY KEY (`detail_id`) +) ENGINE=MyISAM DEFAULT CHARSET=latin1; + +-- +-- Table structure for table `liaison_managers` +-- + +DROP TABLE IF EXISTS `liaison_managers`; +CREATE TABLE `liaison_managers` ( + `id` int(4) NOT NULL auto_increment, + `person_or_org_tag` int(8) default NULL, + `email_priority` int(1) default NULL, + `sdo_id` int(4) default NULL, + PRIMARY KEY (`id`) +) ENGINE=MyISAM DEFAULT CHARSET=latin1; + +-- +-- Table structure for table `liaison_purpose` +-- + +DROP TABLE IF EXISTS `liaison_purpose`; +CREATE TABLE `liaison_purpose` ( + `purpose_id` int(1) NOT NULL default '0', + `purpose_text` varchar(50) default NULL, + PRIMARY KEY (`purpose_id`) +) ENGINE=MyISAM DEFAULT CHARSET=latin1; + +-- +-- Table structure for table `liaisons_interim` +-- + +DROP TABLE IF EXISTS `liaisons_interim`; +CREATE TABLE `liaisons_interim` ( + `id` int(4) NOT NULL auto_increment, + `title` varchar(255) default NULL, + `submitter_name` varchar(255) default NULL, + `submitter_email` varchar(255) default NULL, + `submitted_date` date default NULL, + `from_id` int(2) default NULL, + PRIMARY KEY (`id`) +) ENGINE=MyISAM DEFAULT CHARSET=latin1; + +-- +-- Table structure for table `liaisons_members` +-- + +DROP TABLE IF EXISTS `liaisons_members`; +CREATE TABLE `liaisons_members` ( + `id` int(4) NOT NULL auto_increment, + `person_or_org_tag` int(9) default NULL, + `affiliation` varchar(255) default NULL, + PRIMARY KEY (`id`) +) ENGINE=MyISAM DEFAULT CHARSET=latin1; + +-- +-- Table structure for table `mailing_list` +-- + +DROP TABLE IF EXISTS `mailing_list`; +CREATE TABLE `mailing_list` ( + `mailing_list_id` varchar(25) NOT NULL default '', + `request_date` date default NULL, + `mlist_name` varchar(250) default NULL, + `short_desc` varchar(250) default NULL, + `long_desc` text, + `requestor` varchar(250) default NULL, + `requestor_email` varchar(250) default NULL, + `admins` varchar(250) default NULL, + `archive_remote` text, + `archive_private` int(1) default NULL, + `initial` text, + `welcome_message` text, + `subscription` int(1) default NULL, + `post_who` int(1) default NULL, + `post_admin` int(1) default NULL, + `add_comment` text, + `mail_type` int(1) default NULL, + `mail_cat` int(1) default NULL, + `auth_person_or_org_tag` int(11) default NULL, + `welcome_new` text, + `approved` int(1) default '0', + `approved_date` date default NULL, + `reason_to_delete` text, + `domain_name` varchar(10) default NULL, + PRIMARY KEY (`mailing_list_id`) +) ENGINE=MyISAM DEFAULT CHARSET=latin1; + +-- +-- Table structure for table `management_issues` +-- + +DROP TABLE IF EXISTS `management_issues`; +CREATE TABLE `management_issues` ( + `id` int(11) NOT NULL auto_increment, + `telechat_id` int(4) default NULL, + `title` varchar(255) default NULL, + `issue` text, + `discussed_status_id` int(1) default '0', + `note` text, + PRIMARY KEY (`id`) +) ENGINE=MyISAM DEFAULT CHARSET=latin1; + +-- +-- Table structure for table `meeting_agenda_count` +-- + +DROP TABLE IF EXISTS `meeting_agenda_count`; +CREATE TABLE `meeting_agenda_count` ( + `hit_count` int(12) default NULL +) ENGINE=MyISAM DEFAULT CHARSET=latin1; + +-- +-- Table structure for table `meeting_attendees` +-- + +DROP TABLE IF EXISTS `meeting_attendees`; +CREATE TABLE `meeting_attendees` ( + `id` int(12) NOT NULL auto_increment, + `first_name` varchar(255) default NULL, + `last_name` varchar(255) default NULL, + `affiliated_company` varchar(255) default NULL, + `email_address` varchar(255) default NULL, + `meeting_num` int(4) default NULL, + PRIMARY KEY (`id`) +) ENGINE=MyISAM DEFAULT CHARSET=latin1; + +-- +-- Table structure for table `meeting_hours` +-- + +DROP TABLE IF EXISTS `meeting_hours`; +CREATE TABLE `meeting_hours` ( + `hour_id` int(4) NOT NULL auto_increment, + `hour_desc` varchar(20) default NULL, + PRIMARY KEY (`hour_id`) +) ENGINE=MyISAM DEFAULT CHARSET=latin1; + +-- +-- Table structure for table `meeting_rooms` +-- + +DROP TABLE IF EXISTS `meeting_rooms`; +CREATE TABLE `meeting_rooms` ( + `room_id` int(4) NOT NULL auto_increment, + `meeting_num` int(4) default NULL, + `room_name` varchar(255) default NULL, + PRIMARY KEY (`room_id`) +) ENGINE=MyISAM DEFAULT CHARSET=latin1; + +-- +-- Table structure for table `meeting_times` +-- + +DROP TABLE IF EXISTS `meeting_times`; +CREATE TABLE `meeting_times` ( + `time_id` int(4) NOT NULL auto_increment, + `time_desc` varchar(100) default NULL, + `meeting_num` int(4) default NULL, + `day_id` int(1) default NULL, + `session_name_id` int(1) default NULL, + PRIMARY KEY (`time_id`) +) ENGINE=MyISAM DEFAULT CHARSET=latin1; + +-- +-- Table structure for table `meeting_venues` +-- + +DROP TABLE IF EXISTS `meeting_venues`; +CREATE TABLE `meeting_venues` ( + `id` int(2) NOT NULL auto_increment, + `meeting_num` int(4) default NULL, + `break_area_name` varchar(255) default NULL, + `reg_area_name` varchar(255) default NULL, + PRIMARY KEY (`id`) +) ENGINE=MyISAM DEFAULT CHARSET=latin1; + +-- +-- Table structure for table `meetings` +-- + +DROP TABLE IF EXISTS `meetings`; +CREATE TABLE `meetings` ( + `meeting_num` int(3) NOT NULL default '0', + `start_date` date default NULL, + `end_date` date default NULL, + `city` varchar(255) default NULL, + `state` varchar(255) default NULL, + `country` varchar(255) default NULL, + `ack` text, + `agenda_html` text, + `agenda_text` text, + `future_meeting` text, + `overview1` text, + `overview2` text, + PRIMARY KEY (`meeting_num`) +) ENGINE=MyISAM DEFAULT CHARSET=latin1; + +-- +-- Table structure for table `messages` +-- + +DROP TABLE IF EXISTS `messages`; +CREATE TABLE `messages` ( + `id` int(11) NOT NULL auto_increment, + `message_name` varchar(25) NOT NULL default '', + `message_content` text NOT NULL, + `recipient` varchar(100) NOT NULL default '', + PRIMARY KEY (`id`) +) ENGINE=MyISAM DEFAULT CHARSET=latin1; + +-- +-- Table structure for table `migrate_stat` +-- + +DROP TABLE IF EXISTS `migrate_stat`; +CREATE TABLE `migrate_stat` ( + `id` int(11) NOT NULL auto_increment, + `new_script` char(40) NOT NULL default '', + `old_script` char(40) default NULL, + `need_done` char(50) default NULL, + `how_to_test` char(100) default NULL, + `status` char(100) default NULL, + `done_flag` smallint(6) default NULL, + `group_id` smallint(6) default NULL, + PRIMARY KEY (`id`) +) ENGINE=MyISAM DEFAULT CHARSET=latin1; + +-- +-- Table structure for table `minutes` +-- + +DROP TABLE IF EXISTS `minutes`; +CREATE TABLE `minutes` ( + `id` int(8) NOT NULL auto_increment, + `meeting_num` int(3) default NULL, + `group_acronym_id` int(8) default NULL, + `filename` varchar(255) default NULL, + `irtf` int(1) default '0', + `interim` int(1) default '0', + PRIMARY KEY (`id`) +) ENGINE=MyISAM DEFAULT CHARSET=latin1; + +-- +-- Table structure for table `nomcom` +-- + +DROP TABLE IF EXISTS `nomcom`; +CREATE TABLE `nomcom` ( + `person_or_org_tag` int(11) NOT NULL default '0', + PRIMARY KEY (`person_or_org_tag`) +) ENGINE=MyISAM DEFAULT CHARSET=latin1; + +-- +-- Table structure for table `nomcom_members` +-- + +DROP TABLE IF EXISTS `nomcom_members`; +CREATE TABLE `nomcom_members` ( + `chair_id` int(4) NOT NULL default '0', + `voting_members` text, + `non_voting_members` text, + PRIMARY KEY (`chair_id`) +) ENGINE=MyISAM DEFAULT CHARSET=latin1; + +-- +-- Table structure for table `non_session` +-- + +DROP TABLE IF EXISTS `non_session`; +CREATE TABLE `non_session` ( + `non_session_id` int(4) NOT NULL auto_increment, + `day_id` int(1) default NULL, + `non_session_ref_id` int(1) default NULL, + `meeting_num` int(4) default NULL, + `time_desc` varchar(75) default NULL, + PRIMARY KEY (`non_session_id`) +) ENGINE=MyISAM DEFAULT CHARSET=latin1; + +-- +-- Table structure for table `non_session_ref` +-- + +DROP TABLE IF EXISTS `non_session_ref`; +CREATE TABLE `non_session_ref` ( + `id` int(1) NOT NULL default '0', + `name` varchar(255) default NULL, + PRIMARY KEY (`id`) +) ENGINE=MyISAM DEFAULT CHARSET=latin1; + +-- +-- Table structure for table `none_wg_mailing_list` +-- + +DROP TABLE IF EXISTS `none_wg_mailing_list`; +CREATE TABLE `none_wg_mailing_list` ( + `id` varchar(35) NOT NULL default '', + `purpose` text, + `area_acronym_id` int(4) default NULL, + `admin` text, + `list_url` varchar(255) NOT NULL default '', + `s_name` varchar(255) default NULL, + `s_email` varchar(255) default NULL, + `status` int(1) default NULL, + `list_name` varchar(255) default NULL, + `subscribe_url` varchar(255) default NULL, + `subscribe_other` text, + `ds_name` varchar(255) default NULL, + `ds_email` varchar(255) default NULL, + `msg_to_ad` text, + PRIMARY KEY (`id`) +) ENGINE=MyISAM DEFAULT CHARSET=latin1; + +-- +-- Table structure for table `not_meeting_groups` +-- + +DROP TABLE IF EXISTS `not_meeting_groups`; +CREATE TABLE `not_meeting_groups` ( + `group_acronym_id` int(8) default NULL, + `meeting_num` int(4) default NULL +) ENGINE=MyISAM DEFAULT CHARSET=latin1; + +-- +-- Table structure for table `old_document_comments` +-- + +DROP TABLE IF EXISTS `old_document_comments`; +CREATE TABLE `old_document_comments` ( + `id` int(8) NOT NULL default '0', + `comment_text` text, + PRIMARY KEY (`id`) +) ENGINE=MyISAM DEFAULT CHARSET=latin1; + +-- +-- Table structure for table `outstanding_tasks` +-- + +DROP TABLE IF EXISTS `outstanding_tasks`; +CREATE TABLE `outstanding_tasks` ( + `id` int(11) NOT NULL auto_increment, + `item_txt` varchar(255) default NULL, + `task_status_id` int(2) default '4', + `last_updated_date` date default NULL, + PRIMARY KEY (`id`) +) ENGINE=MyISAM DEFAULT CHARSET=latin1; + +-- +-- Table structure for table `person_or_org_info` +-- + +DROP TABLE IF EXISTS `person_or_org_info`; +CREATE TABLE `person_or_org_info` ( + `person_or_org_tag` int(11) NOT NULL auto_increment, + `record_type` char(8) default NULL, + `name_prefix` char(10) default NULL, + `first_name` char(20) default NULL, + `first_name_key` char(20) default NULL, + `middle_initial` char(4) default NULL, + `middle_initial_key` char(4) default NULL, + `last_name` char(50) default NULL, + `last_name_key` char(50) default NULL, + `name_suffix` char(10) default NULL, + `date_modified` date default NULL, + `modified_by` char(8) default NULL, + `date_created` date default NULL, + `created_by` char(8) default NULL, + `address_type` char(4) default NULL, + PRIMARY KEY (`person_or_org_tag`), + UNIQUE KEY `ix100_1` (`person_or_org_tag`) +) ENGINE=MyISAM DEFAULT CHARSET=latin1; + +-- +-- Table structure for table `phone_numbers` +-- + +DROP TABLE IF EXISTS `phone_numbers`; +CREATE TABLE `phone_numbers` ( + `person_or_org_tag` int(11) NOT NULL default '0', + `phone_type` char(3) NOT NULL default '', + `phone_priority` int(11) NOT NULL default '0', + `phone_number` varchar(255) default NULL, + `phone_comment` varchar(255) default NULL, + KEY `phnumbers` (`person_or_org_tag`,`phone_priority`), + KEY `ttag_type` (`person_or_org_tag`,`phone_type`) +) ENGINE=MyISAM DEFAULT CHARSET=latin1; + +-- +-- Table structure for table `postal_addresses` +-- + +DROP TABLE IF EXISTS `postal_addresses`; +CREATE TABLE `postal_addresses` ( + `address_type` char(4) NOT NULL default '', + `address_priority` int(11) default NULL, + `person_or_org_tag` int(11) NOT NULL default '0', + `person_title` char(50) default NULL, + `affiliated_company` char(70) default NULL, + `aff_company_key` char(70) default NULL, + `department` char(100) default NULL, + `staddr1` char(40) default NULL, + `staddr2` char(40) default NULL, + `mail_stop` char(20) default NULL, + `city` char(20) default NULL, + `state_or_prov` char(20) default NULL, + `postal_code` char(20) default NULL, + `country` char(20) default NULL, + KEY `ix161_1` (`address_type`), + KEY `ix161_3` (`person_or_org_tag`), + KEY `ptag_type` (`person_or_org_tag`,`address_type`) +) ENGINE=MyISAM DEFAULT CHARSET=latin1; + +-- +-- Table structure for table `print_name` +-- + +DROP TABLE IF EXISTS `print_name`; +CREATE TABLE `print_name` ( + `person_or_org_tag` int(11) NOT NULL default '0', + `firstname` char(50) default NULL, + `lastname` char(50) NOT NULL default '', + PRIMARY KEY (`person_or_org_tag`) +) ENGINE=MyISAM DEFAULT CHARSET=latin1; + +-- +-- Table structure for table `prior_address` +-- + +DROP TABLE IF EXISTS `prior_address`; +CREATE TABLE `prior_address` ( + `person_or_org_tag` int(11) NOT NULL default '0', + `address_type` char(4) default NULL, + PRIMARY KEY (`person_or_org_tag`), + UNIQUE KEY `prior_address_idx` (`person_or_org_tag`) +) ENGINE=MyISAM DEFAULT CHARSET=latin1; + +-- +-- Table structure for table `proceedings` +-- + +DROP TABLE IF EXISTS `proceedings`; +CREATE TABLE `proceedings` ( + `meeting_num` int(3) NOT NULL default '0', + `dir_name` varchar(25) default NULL, + `sub_begin_date` date default NULL, + `sub_cut_off_date` date default NULL, + `frozen` int(1) default '0', + `c_sub_cut_off_date` date default NULL, + `pr_from_date` date default NULL, + `pr_to_date` date default NULL, + PRIMARY KEY (`meeting_num`) +) ENGINE=MyISAM DEFAULT CHARSET=latin1; + +-- +-- Table structure for table `pwg_cat` +-- + +DROP TABLE IF EXISTS `pwg_cat`; +CREATE TABLE `pwg_cat` ( + `id` int(1) NOT NULL default '0', + `pwg_status_val` varchar(255) default NULL, + PRIMARY KEY (`id`) +) ENGINE=MyISAM DEFAULT CHARSET=latin1; + +-- +-- Table structure for table `ref_doc_states_new` +-- + +DROP TABLE IF EXISTS `ref_doc_states_new`; +CREATE TABLE `ref_doc_states_new` ( + `document_state_id` int(11) NOT NULL auto_increment, + `document_state_val` varchar(50) default NULL, + `equiv_group_flag` smallint(6) default NULL, + `document_desc` text, + PRIMARY KEY (`document_state_id`) +) ENGINE=MyISAM DEFAULT CHARSET=latin1; + +-- +-- Table structure for table `ref_next_states_new` +-- + +DROP TABLE IF EXISTS `ref_next_states_new`; +CREATE TABLE `ref_next_states_new` ( + `id` int(11) NOT NULL auto_increment, + `cur_state_id` int(11) NOT NULL default '0', + `next_state_id` int(11) NOT NULL default '0', + `condition` char(255) default NULL, + PRIMARY KEY (`id`) +) ENGINE=MyISAM DEFAULT CHARSET=latin1; + +-- +-- Table structure for table `ref_resp` +-- + +DROP TABLE IF EXISTS `ref_resp`; +CREATE TABLE `ref_resp` ( + `ref_resp_id` int(11) NOT NULL auto_increment, + `ref_resp_val` char(50) default NULL, + PRIMARY KEY (`ref_resp_id`) +) ENGINE=MyISAM DEFAULT CHARSET=latin1; + +-- +-- Table structure for table `replaced_ids` +-- + +DROP TABLE IF EXISTS `replaced_ids`; +CREATE TABLE `replaced_ids` ( + `id_document_tag` int(11) default NULL, + `replaced_by` int(11) default NULL +) ENGINE=MyISAM DEFAULT CHARSET=latin1; + +-- +-- Table structure for table `request` +-- + +DROP TABLE IF EXISTS `request`; +CREATE TABLE `request` ( + `id_document_tag` int(11) NOT NULL default '0', + `status_date` date default NULL, + `rfc_flag` smallint(6) default NULL, + `intended_status_id` char(20) default NULL, + `area_acronym` char(3) default NULL, + PRIMARY KEY (`id_document_tag`), + UNIQUE KEY `request_idx` (`id_document_tag`) +) ENGINE=MyISAM DEFAULT CHARSET=latin1; + +-- +-- Table structure for table `rfc_authors` +-- + +DROP TABLE IF EXISTS `rfc_authors`; +CREATE TABLE `rfc_authors` ( + `id` int(11) NOT NULL auto_increment, + `rfc_number` int(11) NOT NULL default '0', + `person_or_org_tag` int(11) NOT NULL default '0', + PRIMARY KEY (`id`), + UNIQUE KEY `person_or_org_tag` (`person_or_org_tag`,`rfc_number`) +) ENGINE=MyISAM DEFAULT CHARSET=latin1; + +-- +-- Table structure for table `rfc_intend_status` +-- + +DROP TABLE IF EXISTS `rfc_intend_status`; +CREATE TABLE `rfc_intend_status` ( + `intended_status_id` int(11) NOT NULL auto_increment, + `status_value` char(25) NOT NULL default '', + PRIMARY KEY (`intended_status_id`) +) ENGINE=MyISAM DEFAULT CHARSET=latin1; + +-- +-- Table structure for table `rfc_status` +-- + +DROP TABLE IF EXISTS `rfc_status`; +CREATE TABLE `rfc_status` ( + `status_id` int(11) NOT NULL auto_increment, + `status_value` char(25) NOT NULL default '', + PRIMARY KEY (`status_id`) +) ENGINE=MyISAM DEFAULT CHARSET=latin1; + +-- +-- Table structure for table `rfcs` +-- + +DROP TABLE IF EXISTS `rfcs`; +CREATE TABLE `rfcs` ( + `rfc_number` int(11) NOT NULL default '0', + `rfc_name` varchar(200) NOT NULL default '', + `rfc_name_key` varchar(200) NOT NULL default '', + `group_acronym` varchar(8) default NULL, + `area_acronym` varchar(8) default NULL, + `status_id` int(11) NOT NULL default '0', + `intended_status_id` int(11) NOT NULL default '0', + `fyi_number` varchar(20) default NULL, + `std_number` varchar(20) default NULL, + `txt_page_count` int(11) default NULL, + `online_version` char(3) default NULL, + `rfc_published_date` date default NULL, + `proposed_date` date default NULL, + `draft_date` date default NULL, + `standard_date` date default NULL, + `historic_date` date default NULL, + `lc_sent_date` date default NULL, + `lc_expiration_date` date default NULL, + `b_sent_date` date default NULL, + `b_approve_date` date default NULL, + `comments` text, + `last_modified_date` date NOT NULL default '0000-00-00', + PRIMARY KEY (`rfc_number`) +) ENGINE=MyISAM DEFAULT CHARSET=latin1; + +-- +-- Table structure for table `rfcs_obsolete` +-- + +DROP TABLE IF EXISTS `rfcs_obsolete`; +CREATE TABLE `rfcs_obsolete` ( + `id` int(11) NOT NULL auto_increment, + `rfc_number` int(11) NOT NULL default '0', + `action` char(20) NOT NULL default '', + `rfc_acted_on` int(11) NOT NULL default '0', + PRIMARY KEY (`id`), + UNIQUE KEY `action` (`action`,`rfc_acted_on`,`rfc_number`) +) ENGINE=MyISAM DEFAULT CHARSET=latin1; + +-- +-- Table structure for table `roll_call` +-- + +DROP TABLE IF EXISTS `roll_call`; +CREATE TABLE `roll_call` ( + `telechat_id` int(4) NOT NULL default '0', + `person_or_org_tag` int(9) NOT NULL default '0', + `attended` int(1) default NULL, + `wg_spoken` int(1) default '0', + PRIMARY KEY (`telechat_id`,`person_or_org_tag`) +) ENGINE=MyISAM DEFAULT CHARSET=latin1; + +-- +-- Table structure for table `scheduled_announcements` +-- + +DROP TABLE IF EXISTS `scheduled_announcements`; +CREATE TABLE `scheduled_announcements` ( + `id` int(12) NOT NULL auto_increment, + `mail_sent` int(1) default '0', + `to_be_sent_date` date default NULL, + `to_be_sent_time` varchar(50) default NULL, + `scheduled_by` varchar(100) default NULL, + `scheduled_date` date default NULL, + `scheduled_time` varchar(50) default NULL, + `subject` varchar(255) default NULL, + `to_val` varchar(255) default NULL, + `from_val` varchar(255) default NULL, + `cc_val` text, + `body` text, + `actual_sent_date` date default NULL, + `actual_sent_time` varchar(50) default NULL, + `first_q` int(1) default '0', + `second_q` int(1) default '0', + `note` text, + `content_type` varchar(255) default '', + `replyto` varchar(255) default NULL, + `bcc_val` varchar(255) default NULL, + PRIMARY KEY (`id`) +) ENGINE=MyISAM DEFAULT CHARSET=latin1; + +-- +-- Table structure for table `scheduled_announcements_temp` +-- + +DROP TABLE IF EXISTS `scheduled_announcements_temp`; +CREATE TABLE `scheduled_announcements_temp` ( + `id` int(12) NOT NULL auto_increment, + `mail_sent` int(1) default '0', + `to_be_sent_date` date default NULL, + `to_be_sent_time` varchar(50) default NULL, + `scheduled_by` varchar(100) default NULL, + `scheduled_date` date default NULL, + `scheduled_time` varchar(50) default NULL, + `subject` varchar(255) default NULL, + `to_val` varchar(255) default NULL, + `from_val` varchar(255) default NULL, + `cc_val` varchar(255) default NULL, + `body` text, + `replyto` varchar(255) default NULL, + `bcc_val` varchar(255) default NULL, + PRIMARY KEY (`id`) +) ENGINE=MyISAM DEFAULT CHARSET=latin1; + +-- +-- Table structure for table `sdo_chairs` +-- + +DROP TABLE IF EXISTS `sdo_chairs`; +CREATE TABLE `sdo_chairs` ( + `id` int(4) NOT NULL auto_increment, + `sdo_id` int(4) default NULL, + `person_or_org_tag` int(8) default NULL, + `email_priority` int(1) default NULL, + PRIMARY KEY (`id`) +) ENGINE=MyISAM DEFAULT CHARSET=latin1; + +-- +-- Table structure for table `sdos` +-- + +DROP TABLE IF EXISTS `sdos`; +CREATE TABLE `sdos` ( + `sdo_id` int(4) NOT NULL auto_increment, + `sdo_name` varchar(255) default NULL, + PRIMARY KEY (`sdo_id`) +) ENGINE=MyISAM DEFAULT CHARSET=latin1; + +-- +-- Table structure for table `secretariat_staff` +-- + +DROP TABLE IF EXISTS `secretariat_staff`; +CREATE TABLE `secretariat_staff` ( + `person_or_org_tag` int(9) NOT NULL default '0', + `title` varchar(255) default NULL, + PRIMARY KEY (`person_or_org_tag`) +) ENGINE=MyISAM DEFAULT CHARSET=latin1; + +-- +-- Table structure for table `session_conflicts` +-- + +DROP TABLE IF EXISTS `session_conflicts`; +CREATE TABLE `session_conflicts` ( + `id` int(12) NOT NULL auto_increment, + `group_acronym_id` int(8) default NULL, + `conflict_gid` int(8) default NULL, + `meeting_num` int(4) default NULL, + PRIMARY KEY (`id`) +) ENGINE=MyISAM DEFAULT CHARSET=latin1; + +-- +-- Table structure for table `session_names` +-- + +DROP TABLE IF EXISTS `session_names`; +CREATE TABLE `session_names` ( + `session_name_id` int(1) NOT NULL auto_increment, + `session_name` varchar(255) default NULL, + PRIMARY KEY (`session_name_id`) +) ENGINE=MyISAM DEFAULT CHARSET=latin1; + +-- +-- Table structure for table `session_request_activities` +-- + +DROP TABLE IF EXISTS `session_request_activities`; +CREATE TABLE `session_request_activities` ( + `id` int(12) NOT NULL auto_increment, + `group_acronym_id` int(12) default NULL, + `meeting_num` int(4) default NULL, + `activity` text, + `act_date` date default NULL, + `act_time` varchar(100) default NULL, + `act_by` int(8) default NULL, + PRIMARY KEY (`id`) +) ENGINE=MyISAM DEFAULT CHARSET=latin1; + +-- +-- Table structure for table `session_status` +-- + +DROP TABLE IF EXISTS `session_status`; +CREATE TABLE `session_status` ( + `status_id` int(1) NOT NULL default '0', + `status` varchar(100) default NULL, + PRIMARY KEY (`status_id`) +) ENGINE=MyISAM DEFAULT CHARSET=latin1; + +-- +-- Table structure for table `slide_types` +-- + +DROP TABLE IF EXISTS `slide_types`; +CREATE TABLE `slide_types` ( + `type_id` int(1) NOT NULL auto_increment, + `type_name` varchar(255) default NULL, + PRIMARY KEY (`type_id`) +) ENGINE=MyISAM DEFAULT CHARSET=latin1; + +-- +-- Table structure for table `slides` +-- + +DROP TABLE IF EXISTS `slides`; +CREATE TABLE `slides` ( + `id` int(8) NOT NULL auto_increment, + `meeting_num` int(3) default NULL, + `group_acronym_id` int(8) default NULL, + `slide_num` int(2) default '0', + `slide_type_id` int(1) default NULL, + `slide_name` varchar(255) default NULL, + `irtf` int(1) default '0', + `interim` int(1) default '0', + `order_num` int(2) default NULL, + `in_q` int(1) default '0', + PRIMARY KEY (`id`) +) ENGINE=MyISAM DEFAULT CHARSET=latin1; + +-- +-- Table structure for table `staff_work_detail` +-- + +DROP TABLE IF EXISTS `staff_work_detail`; +CREATE TABLE `staff_work_detail` ( + `id` int(4) NOT NULL auto_increment, + `name` varchar(255) default NULL, + `start_date` date default NULL, + `finish_date` date default NULL, + `actual_finish_date` date default NULL, + `duration` varchar(255) default NULL, + `percent_complete` varchar(255) default NULL, + `person_or_org_tag` int(9) default NULL, + PRIMARY KEY (`id`) +) ENGINE=MyISAM DEFAULT CHARSET=latin1; + +-- +-- Table structure for table `staff_work_history` +-- + +DROP TABLE IF EXISTS `staff_work_history`; +CREATE TABLE `staff_work_history` ( + `person_or_org_tag` int(9) NOT NULL default '0', + `history_text` text, + PRIMARY KEY (`person_or_org_tag`) +) ENGINE=MyISAM DEFAULT CHARSET=latin1; + +-- +-- Table structure for table `sub_state` +-- + +DROP TABLE IF EXISTS `sub_state`; +CREATE TABLE `sub_state` ( + `sub_state_id` int(11) NOT NULL auto_increment, + `sub_state_val` varchar(55) default NULL, + `sub_state_desc` text, + PRIMARY KEY (`sub_state_id`) +) ENGINE=MyISAM DEFAULT CHARSET=latin1; + +-- +-- Table structure for table `switches` +-- + +DROP TABLE IF EXISTS `switches`; +CREATE TABLE `switches` ( + `id` int(4) NOT NULL auto_increment, + `name` varchar(100) default NULL, + `val` int(1) default '0', + `updated_date` date default NULL, + `updated_time` time default NULL, + PRIMARY KEY (`id`) +) ENGINE=MyISAM DEFAULT CHARSET=latin1; + +-- +-- Table structure for table `task_status` +-- + +DROP TABLE IF EXISTS `task_status`; +CREATE TABLE `task_status` ( + `task_status_id` int(2) NOT NULL auto_increment, + `task_status_value` varchar(75) default NULL, + PRIMARY KEY (`task_status_id`) +) ENGINE=MyISAM DEFAULT CHARSET=latin1; + +-- +-- Table structure for table `telechat` +-- + +DROP TABLE IF EXISTS `telechat`; +CREATE TABLE `telechat` ( + `telechat_id` int(4) NOT NULL auto_increment, + `telechat_date` date default NULL, + `minute_approved` int(1) default '0', + `wg_news_txt` text, + `iab_news_txt` text, + `management_issue` text, + `frozen` int(1) default '0', + `mi_frozen` int(1) default '0', + PRIMARY KEY (`telechat_id`) +) ENGINE=MyISAM DEFAULT CHARSET=latin1; + +-- +-- Table structure for table `telechat_dates` +-- + +DROP TABLE IF EXISTS `telechat_dates`; +CREATE TABLE `telechat_dates` ( + `date1` date default NULL, + `date2` date default NULL, + `date3` date default NULL, + `date4` date default NULL +) ENGINE=MyISAM DEFAULT CHARSET=latin1; + +-- +-- Table structure for table `telechat_minutes` +-- + +DROP TABLE IF EXISTS `telechat_minutes`; +CREATE TABLE `telechat_minutes` ( + `id` int(4) NOT NULL auto_increment, + `telechat_date` date default NULL, + `telechat_minute` text, + `exported` int(1) default '0', + PRIMARY KEY (`id`) +) ENGINE=MyISAM DEFAULT CHARSET=latin1; + +-- +-- Table structure for table `telechat_users` +-- + +DROP TABLE IF EXISTS `telechat_users`; +CREATE TABLE `telechat_users` ( + `person_or_org_tag` int(9) NOT NULL default '0', + `is_iesg` int(1) default NULL, + `affiliated_org` varchar(25) default NULL, + PRIMARY KEY (`person_or_org_tag`) +) ENGINE=MyISAM DEFAULT CHARSET=latin1; + +-- +-- Table structure for table `temp_admins` +-- + +DROP TABLE IF EXISTS `temp_admins`; +CREATE TABLE `temp_admins` ( + `name` varchar(255) default NULL, + `list_url` text +) ENGINE=MyISAM DEFAULT CHARSET=latin1; + +-- +-- Table structure for table `temp_telechat_attendees` +-- + +DROP TABLE IF EXISTS `temp_telechat_attendees`; +CREATE TABLE `temp_telechat_attendees` ( + `id` int(8) NOT NULL auto_increment, + `telechat_id` int(4) default NULL, + `last_name` varchar(255) default NULL, + `first_name` varchar(255) default NULL, + `affiliation` varchar(255) default NULL, + PRIMARY KEY (`id`) +) ENGINE=MyISAM DEFAULT CHARSET=latin1; + +-- +-- Table structure for table `temp_txt` +-- + +DROP TABLE IF EXISTS `temp_txt`; +CREATE TABLE `temp_txt` ( + `id` int(1) NOT NULL default '0', + `temp_txt` text, + PRIMARY KEY (`id`) +) ENGINE=MyISAM DEFAULT CHARSET=latin1; + +-- +-- Table structure for table `templates` +-- + +DROP TABLE IF EXISTS `templates`; +CREATE TABLE `templates` ( + `template_id` int(2) NOT NULL auto_increment, + `template_text` text, + `template_type` int(1) default NULL, + `template_title` varchar(255) default NULL, + `note` text, + `discussed_status_id` int(1) default '0', + `decision` text, + PRIMARY KEY (`template_id`) +) ENGINE=MyISAM DEFAULT CHARSET=latin1; + +-- +-- Table structure for table `updated_ipr` +-- + +DROP TABLE IF EXISTS `updated_ipr`; +CREATE TABLE `updated_ipr` ( + `id` int(8) NOT NULL auto_increment, + `ipr_id` int(8) default NULL, + `status_to_be` int(1) default NULL, + `updated` int(8) default '0', + PRIMARY KEY (`id`) +) ENGINE=MyISAM DEFAULT CHARSET=latin1; + +-- +-- Table structure for table `uploads` +-- + +DROP TABLE IF EXISTS `uploads`; +CREATE TABLE `uploads` ( + `file_id` int(9) NOT NULL auto_increment, + `file_title` varchar(255) default NULL, + `person_or_org_tag` int(11) default NULL, + `file_extension` varchar(10) default NULL, + `detail_id` int(9) default NULL, + PRIMARY KEY (`file_id`) +) ENGINE=MyISAM DEFAULT CHARSET=latin1; + +-- +-- Table structure for table `uploads_temp` +-- + +DROP TABLE IF EXISTS `uploads_temp`; +CREATE TABLE `uploads_temp` ( + `file_id` int(9) NOT NULL auto_increment, + `file_title` varchar(255) default NULL, + `file_extension` varchar(10) default NULL, + `detail_id` int(9) default NULL, + `person_or_org_tag` int(9) default NULL, + PRIMARY KEY (`file_id`) +) ENGINE=MyISAM DEFAULT CHARSET=latin1; + +-- +-- Table structure for table `users` +-- + +DROP TABLE IF EXISTS `users`; +CREATE TABLE `users` ( + `person_or_org_tag` int(11) NOT NULL default '0', + `login_name` varchar(255) default NULL, + `password` varchar(25) default NULL, + `user_level` int(1) default NULL, + `comment` text, + PRIMARY KEY (`person_or_org_tag`) +) ENGINE=MyISAM DEFAULT CHARSET=latin1; + +-- +-- Table structure for table `web_gm_chairs` +-- + +DROP TABLE IF EXISTS `web_gm_chairs`; +CREATE TABLE `web_gm_chairs` ( + `id` int(11) NOT NULL auto_increment, + `username` char(20) NOT NULL default '', + `ip_address` char(15) NOT NULL default '', + `gm_id` int(11) NOT NULL default '0', + `date` date NOT NULL default '0000-00-00', + PRIMARY KEY (`id`) +) ENGINE=MyISAM DEFAULT CHARSET=latin1; + +-- +-- Table structure for table `web_login_info` +-- + +DROP TABLE IF EXISTS `web_login_info`; +CREATE TABLE `web_login_info` ( + `id` int(11) NOT NULL auto_increment, + `username` char(20) NOT NULL default '', + `user_type` char(25) NOT NULL default '', + `ip_address` char(15) NOT NULL default '', + `date` date NOT NULL default '0000-00-00', + PRIMARY KEY (`id`) +) ENGINE=MyISAM DEFAULT CHARSET=latin1; + +-- +-- Table structure for table `web_user_info` +-- + +DROP TABLE IF EXISTS `web_user_info`; +CREATE TABLE `web_user_info` ( + `id` int(11) NOT NULL auto_increment, + `user_type` char(25) NOT NULL default '', + `password` char(20) NOT NULL default '', + PRIMARY KEY (`id`) +) ENGINE=MyISAM DEFAULT CHARSET=latin1; + +-- +-- Table structure for table `wg_agenda` +-- + +DROP TABLE IF EXISTS `wg_agenda`; +CREATE TABLE `wg_agenda` ( + `id` int(8) NOT NULL auto_increment, + `meeting_num` int(3) default NULL, + `group_acronym_id` int(8) default NULL, + `filename` varchar(255) default NULL, + `irtf` int(1) default '0', + `interim` int(1) default '0', + PRIMARY KEY (`id`) +) ENGINE=MyISAM DEFAULT CHARSET=latin1; + +-- +-- Table structure for table `wg_meeting_sessions` +-- + +DROP TABLE IF EXISTS `wg_meeting_sessions`; +CREATE TABLE `wg_meeting_sessions` ( + `session_id` int(8) NOT NULL auto_increment, + `meeting_num` int(4) default NULL, + `group_acronym_id` int(8) default NULL, + `irtf` int(1) default NULL, + `num_session` int(1) default NULL, + `length_session1` varchar(100) default NULL, + `length_session2` varchar(100) default NULL, + `length_session3` varchar(100) default NULL, + `conflict1` varchar(255) default NULL, + `conflict2` varchar(255) default NULL, + `conflict3` varchar(255) default NULL, + `conflict_other` text, + `special_req` text, + `number_attendee` int(4) default NULL, + `approval_ad` int(8) default NULL, + `status_id` int(1) default '0', + `ts_status_id` int(1) default '0', + `requested_date` date default NULL, + `approved_date` date default NULL, + `requested_by` int(8) default NULL, + `scheduled_date` date default NULL, + `last_modified_date` date default NULL, + `ad_comments` text, + `sched_room_id1` int(4) default NULL, + `sched_time_id1` int(4) default NULL, + `sched_date1` date default NULL, + `sched_room_id2` int(4) default NULL, + `sched_time_id2` int(4) default NULL, + `sched_date2` date default NULL, + `sched_room_id3` int(4) default NULL, + `sched_time_id3` int(4) default NULL, + `sched_date3` date default NULL, + `special_agenda_note` varchar(255) default NULL, + `combined_room_id1` int(4) default NULL, + `combined_time_id1` int(4) default NULL, + `combined_room_id2` int(4) default NULL, + `combined_time_id2` int(4) default NULL, + PRIMARY KEY (`session_id`) +) ENGINE=MyISAM DEFAULT CHARSET=latin1; + +-- +-- Table structure for table `wg_meeting_sessions_temp` +-- + +DROP TABLE IF EXISTS `wg_meeting_sessions_temp`; +CREATE TABLE `wg_meeting_sessions_temp` ( + `temp_id` int(8) NOT NULL auto_increment, + `group_acronym_id` int(8) default NULL, + `irtf` int(1) default NULL, + `num_session` int(1) default NULL, + `length_session1` varchar(100) default NULL, + `length_session2` varchar(100) default NULL, + `length_session3` varchar(100) default NULL, + `conflict1` varchar(255) default NULL, + `conflict2` varchar(255) default NULL, + `conflict3` varchar(255) default NULL, + `conflict_other` text, + `special_req` text, + `number_attendee` int(4) default NULL, + PRIMARY KEY (`temp_id`) +) ENGINE=MyISAM DEFAULT CHARSET=latin1; + +-- +-- Table structure for table `wg_password` +-- + +DROP TABLE IF EXISTS `wg_password`; +CREATE TABLE `wg_password` ( + `person_or_org_tag` int(11) NOT NULL default '0', + `password` varchar(255) default NULL, + `secrete_question_id` int(1) default NULL, + `secrete_answer` varchar(255) default NULL, + `is_tut_resp` int(1) default '0', + `irtf_id` int(4) default '0', + `comment` text, + `login_name` varchar(100) default NULL, + PRIMARY KEY (`person_or_org_tag`) +) ENGINE=MyISAM DEFAULT CHARSET=latin1; + +-- +-- Table structure for table `wg_proceedings_activities` +-- + +DROP TABLE IF EXISTS `wg_proceedings_activities`; +CREATE TABLE `wg_proceedings_activities` ( + `id` int(8) NOT NULL auto_increment, + `group_acronym_id` int(8) default NULL, + `meeting_num` int(4) default NULL, + `activity` varchar(255) default NULL, + `act_date` date default NULL, + `act_time` varchar(100) default NULL, + `act_by` int(4) default NULL, + PRIMARY KEY (`id`) +) ENGINE=MyISAM DEFAULT CHARSET=latin1; + +/*!40101 SET SQL_MODE=@OLD_SQL_MODE */; +/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */; +/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */; +/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */; +/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */; +/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; +/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */; + diff --git a/ietf/database-notes/pub-table-list.txt b/ietf/database-notes/pub-table-list.txt new file mode 100644 index 000000000..ed56e76a0 --- /dev/null +++ b/ietf/database-notes/pub-table-list.txt @@ -0,0 +1,207 @@ +all_id.cgi:id_internal +all_id.cgi:internet_drafts +all_id_html.cgi:id_internal +all_id_html.cgi:internet_drafts +area_mailing_list.cgi:acronym +area_mailing_list.cgi:general_info +idindex.cgi:acronym +idindex.cgi:g_status +idindex.cgi:general_info +idindex.cgi:groups_ietf +idindex.cgi:id_authors +idindex.cgi:id_internal +idindex.cgi:id_status +idindex.cgi:internet_drafts +idindex.cgi:ref_doc_states_new +idindex.cgi:rfcs +idindex.cgi:rfcs_obsolete +idindex.cgi:temp_id +imported_mailing_list +ipr.cgi:> +ipr.cgi:and +ipr.cgi:internet_drafts +ipr.cgi:ipr_contacts +ipr.cgi:ipr_detail +ipr.cgi:ipr_ids +ipr.cgi:ipr_rfcs +ipr.cgi:ipr_updates +ipr.cgi:rfcs +ipr.cgi:temp_txt +ipr.cgi:the +ipr.cgi:this +ipr_detail.cgi:internet_drafts +ipr_detail.cgi:ipr_contacts +ipr_detail.cgi:ipr_detail +ipr_detail.cgi:ipr_licensing +ipr_detail.cgi:ipr_selecttype +ipr_detail_show.cgi:internet_drafts +ipr_detail_show.cgi:ipr_contacts +ipr_detail_show.cgi:ipr_detail +ipr_detail_show.cgi:ipr_ids +ipr_detail_show.cgi:ipr_rfcs +ipr_detail_show.cgi:ipr_updates +ipr_detail_show.cgi:rfcs +ipr_detail_show.cgi:this +ipr_generic.cgi:> +ipr_generic.cgi:and +ipr_generic.cgi:ipr_contacts +ipr_generic.cgi:ipr_detail +ipr_generic.cgi:ipr_updates +ipr_generic.cgi:temp_txt +ipr_generic.cgi:the +ipr_generic.cgi:this +ipr_list.cgi:ipr_detail +ipr_list.cgi:ipr_updates +ipr_notify.cgi:> +ipr_notify.cgi:and +ipr_notify.cgi:internet_drafts +ipr_notify.cgi:ipr_contacts +ipr_notify.cgi:ipr_detail +ipr_notify.cgi:ipr_ids +ipr_notify.cgi:ipr_rfcs +ipr_notify.cgi:ipr_updates +ipr_notify.cgi:rfcs +ipr_notify.cgi:temp_txt +ipr_notify.cgi:the +ipr_notify.cgi:this +ipr_search.cgi:acronym +ipr_search.cgi:groups_ietf +ipr_search.cgi:internet_drafts +ipr_search.cgi:ipr_detail +ipr_search.cgi:ipr_ids +ipr_search.cgi:ipr_rfcs +ipr_search.cgi:ipr_updates +ipr_search.cgi:rfcs +ipr_search.cgi:rfcs_obsolete +ipr_update_list.cgi:ipr_detail +ipr_update_list.cgi:ipr_updates +lastcall.cgi:hit_counter +lastcall.cgi:id_internal +lastcall.cgi:internet_drafts +lastcall.cgi:rfcs +liaison_detail.cgi:from_bodies +liaison_detail.cgi:liaison_detail +liaison_detail.cgi:liaison_purpose +liaison_detail.cgi:uploads +liaison_field_help.cgi:general_info +liaison_guide_from_ietf.cgi:general_info +liaison_guide_to_ietf.cgi:general_info +liaison_managers_list.cgi:email_addresses +liaison_managers_list.cgi:general_info +liaison_managers_list.cgi:liaison_managers +liaisons.cgi:liaison_detail +liaisons.cgi:uploads +mailing_list +meeting_agenda_html.cgi:acronym +meeting_agenda_html.cgi:area_directors +meeting_agenda_html.cgi:areas +meeting_agenda_html.cgi:groups_ietf +meeting_agenda_html.cgi:irtf +meeting_agenda_html.cgi:meeting_agenda_count +meeting_agenda_html.cgi:meeting_venues +meeting_agenda_html.cgi:meetings +meeting_agenda_html.cgi:non_session +meeting_agenda_html.cgi:non_session_ref +meeting_agenda_html.cgi:proceedings +meeting_agenda_html.cgi:session_names +meeting_agenda_html.cgi:switches +meeting_agenda_html.cgi:temp_agenda$table_id +meeting_agenda_html.cgi:wg_agenda +meeting_agenda_html.cgi:wg_meeting_sessions +meeting_agenda_text.cgi:acronym +meeting_agenda_text.cgi:area_directors +meeting_agenda_text.cgi:areas +meeting_agenda_text.cgi:groups_ietf +meeting_agenda_text.cgi:irtf +meeting_agenda_text.cgi:meeting_agenda_count +meeting_agenda_text.cgi:meeting_venues +meeting_agenda_text.cgi:meetings +meeting_agenda_text.cgi:non_session +meeting_agenda_text.cgi:proceedings +meeting_agenda_text.cgi:session_names +meeting_agenda_text.cgi:temp_agenda$table_id +meeting_agenda_text.cgi:wg_agenda +meeting_agenda_text.cgi:wg_meeting_sessions +meeting_materials.cgi:acronym +meeting_materials.cgi:agenda +meeting_materials.cgi:groups_ietf +meeting_materials.cgi:irtf +meeting_materials.cgi:meetings +meeting_materials.cgi:minutes +meeting_materials.cgi:proceedings +meeting_materials.cgi:slides +meeting_materials.cgi:wg_agenda +meeting_materials.cgi:wg_meeting_sessions +nwg_list.cgi:acronym +nwg_list.cgi:none_wg_mailing_list +nwg_list.cgi:or +nwg_list_submit.cgi:acronym +nwg_list_submit.cgi:area_directors +nwg_list_submit.cgi:none_wg_mailing_list +nwg_list_submit.cgi:the +pidtracker.cgi:$table_name +pidtracker.cgi:a +pidtracker.cgi:acronym +pidtracker.cgi:any +pidtracker.cgi:area_group +pidtracker.cgi:ballot_info +pidtracker.cgi:discuss +pidtracker.cgi:document_comments +pidtracker.cgi:hit_counter +pidtracker.cgi:id_internal +pidtracker.cgi:id_status +pidtracker.cgi:iesg_login +pidtracker.cgi:internet_drafts +pidtracker.cgi:its +pidtracker.cgi:ref_doc_states_new +pidtracker.cgi:rfcs +pidtracker.cgi:sub_state +pidtracker.cgi:the +previous_announcement.cgi:ballot_info +previous_announcement.cgi:id_internal +previous_announcement.cgi:internet_drafts +recent_announcement.cgi:ballot_info +recent_announcement.cgi:id_internal +recent_announcement.cgi:internet_drafts +request_approve_mail.cgi:= +request_approve_mail.cgi:a +request_approve_mail.cgi:acronym +request_approve_mail.cgi:iesg_login +request_approve_mail.cgi:mailing_list +request_approve_mail.cgi:none_wg_mailing_list +request_area_confirm.cgi:a +request_area_confirm.cgi:mailing_list +request_area_confirm.cgi:person_or_org_info +request_confirm.cgi:a +request_confirm.cgi:ad_address +request_confirm.cgi:area_directors +request_confirm.cgi:chairs +request_confirm.cgi:email_addresses +request_confirm.cgi:g_chairs +request_confirm.cgi:imported_mailing_list +request_confirm.cgi:mailing_list +request_list.cgi:acronym +request_list.cgi:areas,acronym +request_list.cgi:imported_mailing_list +request_list.cgi:none_wg_mailing_list +request_mail.cgi:email_addresses +request_mail.cgi:iesg_login +request_mail.cgi:mailing_list +rfc_editor_announcement.cgi:ballot_info +rfc_editor_announcement.cgi:id_internal +rfc_editor_announcement.cgi:internet_drafts +show_nomcom_message.cgi:announced_from +show_nomcom_message.cgi:announcements +show_nomcom_message.cgi:chairs_history +states_table.cgi:ref_doc_states_new +states_table.cgi:sub_state +status_of_item.cgi:hit_counter +status_of_item.cgi:id_internal +status_of_item.cgi:internet_drafts +status_of_item.cgi:ref_doc_states_new +status_of_item.cgi:rfcs +upload.cgi:($sqlStr); +upload.cgi:uploads +view_meeting_agenda_html.cgi:meetings +view_meeting_agenda_text.cgi:meetings +view_telechat_minute.cgi:telechat_minutes diff --git a/ietf/idindex/.gitignore b/ietf/idindex/.gitignore new file mode 100644 index 000000000..c7013ced9 --- /dev/null +++ b/ietf/idindex/.gitignore @@ -0,0 +1,2 @@ +/*.pyc +/settings_local.py diff --git a/ietf/idindex/__init__.py b/ietf/idindex/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/ietf/idindex/forms.py b/ietf/idindex/forms.py new file mode 100644 index 000000000..3d6741412 --- /dev/null +++ b/ietf/idindex/forms.py @@ -0,0 +1,17 @@ +from django import newforms as forms +from itertools import chain +from ietf.idtracker.models import IDState, IDStatus, GroupIETF +from ietf.idindex.models import orgs + +class IDIndexSearchForm(forms.Form): + filename = forms.CharField(max_length=100, label='Filename (Full or Partial):', widget=forms.TextInput(attrs={'size': 30})) + id_tracker_state_id = forms.ChoiceField(choices=chain((('', 'All/Any'),), + [(state.document_state_id, state.state) for state in IDState.objects.all()]), label='I-D Tracker State:') + wg_id = forms.ChoiceField(choices=chain((('', 'All/Any'),), + [(wg.group_acronym_id, wg.group_acronym.acronym) for wg in GroupIETF.objects.all().select_related().order_by('acronym.acronym')]), label='Working Group:') + other_group = forms.ChoiceField(choices=chain((('', 'All/Any'),), + [(org['key'], org['name']) for org in orgs]), label='Other Group:') + status_id = forms.ChoiceField(choices=chain((('', 'All/Any'),), + [(status.status_id, status.status) for status in IDStatus.objects.all()]), label='I-D Status:') + last_name = forms.CharField(max_length=50) + first_name = forms.CharField(max_length=50) diff --git a/ietf/idindex/models.py b/ietf/idindex/models.py new file mode 100644 index 000000000..d15fc91b3 --- /dev/null +++ b/ietf/idindex/models.py @@ -0,0 +1,19 @@ +from django.db import models + +alphabet = [chr(65 + i) for i in range(0, 26)] +orgs_dict = { + 'iab': { 'name': 'IAB' }, + 'iana': { 'name': 'IANA' }, + 'iasa': { 'name': 'IASA' }, + 'iesg': { 'name': 'IESG' }, + 'irtf': { 'name': 'IRTF' }, + 'proto': { 'name': 'PROTO' }, + 'rfc-editor': { 'name': 'RFC Editor', 'prefixes': [ 'rfc-editor', 'rfced' ] }, + 'tools': { 'name': 'Tools' }, +} +orgs_keys = orgs_dict.keys() +for o in orgs_keys: + orgs_dict[o]['key'] = o +orgs_keys.sort() +orgs = [orgs_dict[o] for o in orgs_keys] + diff --git a/ietf/idindex/urls.py b/ietf/idindex/urls.py new file mode 100644 index 000000000..c28913b5e --- /dev/null +++ b/ietf/idindex/urls.py @@ -0,0 +1,28 @@ +from django.conf.urls.defaults import * +from ietf.idtracker.models import InternetDraft +from ietf.idindex import views +from ietf.idindex import forms +from ietf.idindex.views import alphabet, orgs + +info_dict = { + 'queryset': InternetDraft.objects.all(), + 'template_name': 'idindex/internetdraft_detail.html', + 'extra_context': { + 'alphabet': alphabet, + 'orgs': orgs, + } +} + +urlpatterns = patterns('', + (r'^wgdocs/(?P\d+)/$', views.wgdocs), + (r'^wgdocs/(?P[^/]+)/$', views.wgdocs), + (r'^wglist/(?P[^/]+)/$', views.wglist), + (r'^inddocs/(?P[^/]+)/$', views.inddocs), + (r'^otherdocs/(?P[^/]+)/$', views.otherdocs), + (r'^showdocs/(?P[^/]+)/((?P[^/]+)/)?$', views.showdocs), + (r'^(?P\d+)/$', 'django.views.generic.list_detail.object_detail', info_dict), + (r'^(?P[^/]+)/$', 'django.views.generic.list_detail.object_detail', dict(info_dict, slug_field='filename')), + (r'^all_id_txt.html$', views.all_id, { 'template_name': 'idindex/all_id_txt.html' }), + (r'^all_id.html$', views.all_id, { 'template_name': 'idindex/all_id.html' }), + (r'^$', views.search), +) diff --git a/ietf/idindex/views.py b/ietf/idindex/views.py new file mode 100644 index 000000000..7932ab11a --- /dev/null +++ b/ietf/idindex/views.py @@ -0,0 +1,152 @@ +from django.http import HttpResponse,HttpResponseRedirect +from django.views.generic.list_detail import object_list +from django.db.models import Q +from django.http import Http404 +from django.template import RequestContext, Context, loader +from django.shortcuts import render_to_response +from ietf.idtracker.models import Acronym, GroupIETF, InternetDraft +from ietf.idindex.forms import IDIndexSearchForm +from ietf.idindex.models import alphabet, orgs, orgs_dict +from ietf.utils import orl, flattenl + +base_extra = { 'alphabet': alphabet, 'orgs': orgs } + +def wglist(request, wg=None): + if wg == 'other': + queryset = GroupIETF.objects.filter( + orl([Q(group_acronym__acronym__istartswith="%d" % i) for i in range(0,10)]) + ) + else: + queryset = GroupIETF.objects.filter(group_acronym__acronym__istartswith=wg) + queryset = queryset.filter(group_type__type='WG').select_related().order_by('g_status.status', 'acronym.acronym') + return object_list(request, queryset=queryset, template_name='idindex/wglist.html', allow_empty=True, extra_context=base_extra) + +def wgdocs(request, **kwargs): + if kwargs.has_key('id'): + queryset = InternetDraft.objects.filter(group=kwargs['id']) + group = Acronym.objects.get(acronym_id=kwargs['id']) + else: + queryset = InternetDraft.objects.filter(group__acronym=kwargs['slug']) + group = Acronym.objects.get(acronym=kwargs['slug']) + queryset = queryset.order_by('status_id', 'filename') + extra = base_extra + extra['group'] = group + return object_list(request, queryset=queryset, template_name='idindex/wgdocs.html', allow_empty=True, extra_context=extra) + +def inddocs(request, filter=None): + ind_exception = orl( + [Q(filename__istartswith='draft-%s-' % e) for e in + flattenl([org.get('prefixes', [ org['key'] ]) for org in orgs]) + ['ietf']]) + if filter == 'other': + queryset = InternetDraft.objects.filter( + orl([Q(filename__istartswith="draft-%d" % i) for i in range(0,10)]) + ) + else: + queryset = InternetDraft.objects.filter(filename__istartswith='draft-' + filter) + queryset = queryset.exclude(ind_exception).filter(group__acronym='none').order_by('filename') + extra = base_extra + extra['filter'] = filter + return object_list(request, queryset=queryset, template_name='idindex/inddocs.html', allow_empty=True, extra_context=extra) + +def otherdocs(request, cat=None): + try: + org = orgs_dict[cat] + except KeyError: + raise Http404 + queryset = InternetDraft.objects.filter( + orl([Q(filename__istartswith="draft-%s-" % p)| + Q(filename__istartswith="draft-ietf-%s-" % p) + for p in org.get('prefixes', [ org['key'] ])])) + queryset = queryset.order_by('filename') + extra = base_extra + extra['category'] = cat + return object_list(request, queryset=queryset, template_name='idindex/otherdocs.html', allow_empty=True, extra_context=extra) + +def showdocs(request, cat=None, sortby=None): + catmap = { + 'all': { 'extra': { 'header': 'All' } }, + 'current': { 'extra': { 'header': 'Current', 'norfc': 1 }, + 'query': Q(status__status="Active") }, + 'rfc': { 'extra': { 'header': 'Published' }, + 'query': Q(status__status="RFC") }, + 'dead': { 'extra': { 'header': "Expired/Withdrawn/Replaced", 'norfc': 1 }, + 'query': Q(status__in=[2,4,5,6]) }, # Using the words seems fragile here for some reason + } + if not(catmap.has_key(cat)): + raise Http404 + sortmap = { 'date': { 'header': "Submission Date", + 'fields': ['revision_date','filename'] }, + 'name': { 'header': "Filename", + 'fields': ['filename'] }, + '': { 'header': "WHA?", + 'fields': ['filename'] }, + } + if sortby is None: + sortby = 'name' + queryset = InternetDraft.objects.all() + if catmap[cat].has_key('query'): + queryset = queryset.filter(catmap[cat]['query']) + queryset = queryset.order_by(*list(['status_id'] + sortmap[sortby]['fields'])) + extra = catmap[cat]['extra'] + extra['sort_header'] = sortmap[sortby]['header'] + extra.update(base_extra) + return object_list(request, queryset=queryset, template_name='idindex/showdocs.html', allow_empty=True, extra_context=extra) + + +def search(request): + form = IDIndexSearchForm() + t = loader.get_template('idindex/search.html') + # if there's a post, do the search and supply results to the template + # XXX should handle GET too + if request.method == 'POST': + qdict = { 'filename': 'filename__icontains', + 'id_tracker_state_id': 'idinternal__cur_state', + 'wg_id': 'group', + 'status_id': 'status', + 'last_name': 'authors__person__last_name__icontains', + 'first_name': 'authors__person__first_name__icontains', + } + q_objs = [Q(**{qdict[k]: request.POST[k]}) + for k in qdict.keys() + if request.POST[k] != ''] + try: + other = orgs_dict[request.POST['other_group']] + q_objs += [orl( + [Q(filename__istartswith="draft-%s-" % p)| + Q(filename__istartswith="draft-ietf-%s-" % p) + for p in other.get('prefixes', [ other['key'] ])])] + except KeyError: + pass # either no other_group arg or no orgs_dict entry + matches = InternetDraft.objects.all().filter(*q_objs) + matches = matches.order_by('filename') + searched = True + else: + matches = None + searched = False + + c = RequestContext(request, { + 'form': form, + 'object_list': matches, + 'didsearch': searched, + 'alphabet': alphabet, + 'orgs': orgs, + }) + return HttpResponse(t.render(c)) + +def all_id(request, template_name): + from django.db import connection + from ietf.utils import flattenl + cursor = connection.cursor() + # 99 = Dead + # 32 = RFC Published + cursor.execute("SELECT id_document_tag FROM id_internal WHERE rfc_flag=0 AND cur_state NOT IN (99,32)") + in_tracker = flattenl(cursor.fetchall()) + tracker_list = InternetDraft.objects.all().filter(id_document_tag__in=in_tracker).order_by('status_id','filename').select_related(depth=1) + object_list = [] + for o in tracker_list: + object_list.append({'tracker': True, 'id': o}) + notracker_list = InternetDraft.objects.all().exclude(id_document_tag__in=in_tracker).order_by('status_id','filename').select_related(depth=1) + for o in notracker_list: + object_list.append({'tracker': False, 'id': o}) + return render_to_response(template_name, {'object_list': object_list}, + context_instance=RequestContext(request)) diff --git a/ietf/idtracker/.gitignore b/ietf/idtracker/.gitignore new file mode 100644 index 000000000..c7013ced9 --- /dev/null +++ b/ietf/idtracker/.gitignore @@ -0,0 +1,2 @@ +/*.pyc +/settings_local.py diff --git a/ietf/idtracker/README b/ietf/idtracker/README new file mode 100644 index 000000000..815328d30 --- /dev/null +++ b/ietf/idtracker/README @@ -0,0 +1,56 @@ +form_for_model(IDInternal) will autogenerate form elemnts to edit the model + +class ImageAddForm(BaseForm): + + def __init__(self, *args, name=None, **kwargs): + super(ImageAddForm, self).__init__(*args, **kwargs) + self.fields['category'].choices=(('a','a'),) + # create filter based on name= + +ImageForm = form_for_model(Image, form=ImageAddForm) +foo = ImageForm(name='foo') + + + +To get from draft to author list: + +>>> d = a[5] +>>> print d +draft-fenner-zinin-rtg-standard-reqts +>>> print d.authors.all() +[, ] +>>> l=d.authors.all() +>>> print l[0].person +Bill Fenner +>>> print l[0].person.emailaddresses_set.filter(priority=d.id_document_tag) +[] +>>> print l[0].person.emailaddresses_set.filter(priority=d.id_document_tag)[0].ail_address +fenner@research.att.com + +IDAuthors should have an auxilliary function for this. +It's the one that has the person linkage and knows the document. + + +-- +we should use a variant of django-registration. +http://www.stonemind.net/blog/2007/04/13/django-registration-for-newbies/ + +1. verify email address with round trip +2. if there's a row in iesg_login, use that username + (? liaison tool logins ?) + otherwise, force the email address +3. get a password and create the user + (this is almost the same as resetting the password) +4. find the person_or_org_info row, associate that with + the user row + +-- + + Both the regular and date-base object_detail can take either an ++object_id, or a slug/slug_field combo. + So use the username as the "slug" and specify 'username' as the ++'slug_field' argument. + +http://www.b-list.org/weblog/2006/11/16/django-tips-get-most-out-generic-views + +newly learned: 'slug_field' just gets passed so can be otherdb__username diff --git a/ietf/idtracker/__init__.py b/ietf/idtracker/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/ietf/idtracker/change-schema b/ietf/idtracker/change-schema new file mode 100644 index 000000000..7d02b10fa --- /dev/null +++ b/ietf/idtracker/change-schema @@ -0,0 +1,10 @@ +ALTER TABLE `id_internal` CHANGE `cur_sub_state_id` `cur_sub_state_id` INT( 11 ) NULL DEFAULT NULL , +CHANGE `prev_sub_state_id` `prev_sub_state_id` INT( 11 ) NULL DEFAULT NULL ; + +update id_internal set cur_sub_state_id=NULL where cur_sub_state_id < 1; +update id_internal set prev_sub_state_id=NULL where prev_sub_state_id < 1; + +ALTER TABLE `email_addresses` ADD `id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY FIRST ; +ALTER TABLE `postal_addresses` ADD `id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY FIRST ; +ALTER TABLE `phone_numbers` ADD `id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY FIRST ; + diff --git a/ietf/idtracker/feeds.py b/ietf/idtracker/feeds.py new file mode 100644 index 000000000..3f0a3fcec --- /dev/null +++ b/ietf/idtracker/feeds.py @@ -0,0 +1,31 @@ +from django.contrib.syndication.feeds import Feed +from django.utils.feedgenerator import Atom1Feed +from ietf.idtracker.models import InternetDraft, DocumentComment +import datetime + +class DocumentComments(Feed): + feed_type = Atom1Feed + def get_object(self, bits): + if len(bits) != 1: + raise ObjectDoesNotExist + return InternetDraft.objects.get(filename=bits[0]) + + def title(self, obj): + return "I-D Tracker comments for %s" % obj.filename + + def link(self, obj): + return "/idtracker/%s" % obj.filename + # obj.get_absolute_url() ? + + def description(self, obj): + self.title(obj) + + def items(self, obj): + return DocumentComment.objects.filter(document=obj.id_document_tag).order_by("-date")[:15] + + def item_pubdate(self, item): + time = datetime.time(*[int(t) for t in item.time.split(":")]) + return datetime.datetime.combine(item.date, time) + + def item_author_name(self, item): + return item.get_author() diff --git a/ietf/idtracker/models.py b/ietf/idtracker/models.py new file mode 100644 index 000000000..78a4e133b --- /dev/null +++ b/ietf/idtracker/models.py @@ -0,0 +1,518 @@ +from django.db import models +from ietf.utils import FKAsOneToOne + +class Acronym(models.Model): + acronym_id = models.AutoField(primary_key=True) + acronym = models.CharField(maxlength=12) + name = models.CharField(maxlength=100) + name_key = models.CharField(maxlength=50, editable=False) + def save(self): + self.name_key = self.name.upper() + super(Acronym, self).save() + def __str__(self): + return self.acronym + class Meta: + db_table = "acronym" + class Admin: + list_display = ('acronym', 'name') + pass + +class AreaStatus(models.Model): + status_id = models.AutoField(primary_key=True) + status = models.CharField(maxlength=25, db_column='status_value') + def __str__(self): + return self.status + class Meta: + db_table = 'area_status' + class Admin: + pass + +# I think equiv_group_flag is historical. +class IDState(models.Model): + document_state_id = models.AutoField(primary_key=True) + state = models.CharField(maxlength=50, db_column='document_state_val') + equiv_group_flag = models.IntegerField(null=True, blank=True) + description = models.TextField(blank=True, db_column='document_desc') + def __str__(self): + return self.state + class Meta: + db_table = 'ref_doc_states_new' + class Admin: + pass + +class IDNextState(models.Model): + cur_state = models.ForeignKey(IDState, related_name='nextstate') + next_state = models.ForeignKey(IDState, related_name='prevstate', core=True) + condition = models.CharField(blank=True, maxlength=255) + def __str__(self): + return "%s -> %s" % (self.cur_state.state, self.next_state.state ) + class Meta: + db_table = 'ref_next_states_new' + class Admin: + pass + +class IDSubState(models.Model): + sub_state_id = models.AutoField(primary_key=True) + sub_state = models.CharField(maxlength=55, db_column='sub_state_val') + description = models.TextField(blank=True, db_column='sub_state_desc') + def __str__(self): + return self.sub_state + class Meta: + db_table = 'sub_state' + class Admin: + pass + +class Areas(models.Model): + area_acronym = models.ForeignKey(Acronym, primary_key=True, unique=True) + start_date = models.DateField(auto_now_add=True) + concluded_date = models.DateField(null=True, blank=True) + status = models.ForeignKey(AreaStatus) + comments = models.TextField(blank=True) + last_modified_date = models.DateField(auto_now=True) + extra_email_addresses = models.TextField(blank=True) + def __str__(self): + return self.area_acronym.acronym + class Meta: + db_table = 'areas' + #ordering = ['area_acronym_id'] + verbose_name="area" + class Admin: + list_display = ('area_acronym', 'status') + pass + +class IDStatus(models.Model): + status_id = models.AutoField(primary_key=True) + status = models.CharField(maxlength=25, db_column='status_value') + def __str__(self): + return self.status + class Meta: + db_table = "id_status" + verbose_name="I-D Status" + verbose_name_plural="I-D Statuses" + class Admin: + pass + +class IDIntendedStatus(models.Model): + intended_status_id = models.AutoField(primary_key=True) + intended_status = models.CharField(maxlength=25, db_column='status_value') + def __str__(self): + return self.intended_status + class Meta: + db_table = "id_intended_status" + verbose_name="I-D Intended Publication Status" + verbose_name_plural="I-D Intended Publication Statuses" + class Admin: + pass + +class InternetDraft(models.Model): + id_document_tag = models.AutoField(primary_key=True) + id_document_name = models.CharField(maxlength=255) + id_document_key = models.CharField(maxlength=255, editable=False) + group = models.ForeignKey(Acronym, db_column='group_acronym_id') + filename = models.CharField(maxlength=255, unique=True) + revision = models.CharField(maxlength=2) + revision_date = models.DateField() + file_type = models.CharField(maxlength=20) + txt_page_count = models.IntegerField() + local_path = models.CharField(maxlength=255, blank=True) + start_date = models.DateField() + expiration_date = models.DateField() + abstract = models.TextField() + dunn_sent_date = models.DateField() + extension_date = models.DateField(null=True, blank=True) + status = models.ForeignKey(IDStatus) + intended_status = models.ForeignKey(IDIntendedStatus) + lc_sent_date = models.DateField(null=True, blank=True) + lc_changes = models.CharField(maxlength=3) + lc_expiration_date = models.DateField(null=True, blank=True) + b_sent_date = models.DateField(null=True, blank=True) + b_discussion_date = models.DateField(null=True, blank=True) + b_approve_date = models.DateField(null=True, blank=True) + wgreturn_date = models.DateField(null=True, blank=True) + rfc_number = models.IntegerField(null=True, blank=True) + comments = models.TextField(blank=True) + last_modified_date = models.DateField() + replaced_by = models.ForeignKey('self', db_column='replaced_by', raw_id_admin=True, blank=True, null=True, related_name='replaces_set') + replaces = FKAsOneToOne('replaces', reverse=True) + review_by_rfc_editor = models.BooleanField() + expired_tombstone = models.BooleanField() + idinternal = FKAsOneToOne('idinternal', reverse=True, query=models.Q(rfc_flag = 0)) + def save(self): + self.id_document_key = self.id_document_name.upper() + super(InternetDraft, self).save() + def __str__(self): + return self.filename + def idstate(self): + idinternal = self.idinternal + if idinternal: + if idinternal.cur_sub_state: + return "%s :: %s" % ( idinternal.cur_state, idinternal.cur_sub_state ) + else: + return idinternal.cur_state + else: + return "I-D Exists" + def revision_display(self): + r = int(self.revision) + if self.status.status != 'Active' and not self.expired_tombstone: + r = max(r - 1, 0) + return "%02d" % r + class Meta: + db_table = "internet_drafts" + class Admin: + search_fields = ['filename'] + pass + #list_display = ('filename', 'revision', 'status') + #date_hierarchy = 'revision_date' + #list_filter = ['revision_date'] + +class PersonOrOrgInfo(models.Model): + person_or_org_tag = models.AutoField(primary_key=True) + record_type = models.CharField(blank=True, maxlength=8) + name_prefix = models.CharField(blank=True, maxlength=10) + first_name = models.CharField(blank=True, maxlength=20) + first_name_key = models.CharField(blank=True, maxlength=20, editable=False) + middle_initial = models.CharField(blank=True, maxlength=4) + middle_initial_key = models.CharField(blank=True, maxlength=4, editable=False) + last_name = models.CharField(blank=True, maxlength=50) + last_name_key = models.CharField(blank=True, maxlength=50, editable=False) + name_suffix = models.CharField(blank=True, maxlength=10) + date_modified = models.DateField(null=True, blank=True, auto_now=True) + modified_by = models.CharField(blank=True, maxlength=8) + date_created = models.DateField(auto_now_add=True) + created_by = models.CharField(blank=True, maxlength=8) + address_type = models.CharField(blank=True, maxlength=4) + def save(self): + self.first_name_key = self.first_name.upper() + self.middle_initial_key = self.middle_initial.upper() + self.last_name_key = self.last_name.upper() + super(PersonOrOrgInfo, self).save() + def __str__(self): + return "%s %s" % ( self.first_name or "", self.last_name or "") + class Meta: + db_table = 'person_or_org_info' + ordering = ['last_name'] + verbose_name="Rolodex Entry" + verbose_name_plural="Rolodex" + class Admin: + search_fields = ['first_name','last_name'] + pass + +# could use a mapping for user_level +class IESGLogin(models.Model): + USER_LEVEL_CHOICES = ( + ('0', 'Secretariat'), + ('1', 'IESG'), + ('2', 'ex-IESG'), + ('3', 'Level 3'), + ('4', 'Comment Only(?)'), + ) + id = models.AutoField(primary_key=True) + login_name = models.CharField(blank=True, maxlength=255) + password = models.CharField(maxlength=25) + user_level = models.IntegerField(choices=USER_LEVEL_CHOICES) + first_name = models.CharField(blank=True, maxlength=25) + last_name = models.CharField(blank=True, maxlength=25) + person = models.ForeignKey(PersonOrOrgInfo, db_column='person_or_org_tag', raw_id_admin=True, unique=True) + pgp_id = models.CharField(blank=True, maxlength=20) + default_search = models.IntegerField(null=True) + def __str__(self): + return "%s, %s" % ( self.last_name, self.first_name) + class Meta: + db_table = 'iesg_login' + class Admin: + list_display = ('login_name', 'first_name', 'last_name', 'user_level') + ordering = ['user_level','last_name'] + pass + +# No admin panel needed; this is edited in Areas. +class AreaDirectors(models.Model): + area = models.ForeignKey(Areas, db_column='area_acronym_id', edit_inline=models.STACKED, num_in_admin=2) + person = models.ForeignKey(PersonOrOrgInfo, db_column='person_or_org_tag', raw_id_admin=True, core=True) + def __str__(self): + return "(%s) %s" % ( self.area, self.person ) + class Meta: + db_table = 'area_directors' + +class IDInternal(models.Model): + draft = models.ForeignKey(InternetDraft, primary_key=True, unique=True, db_column='id_document_tag') + # the above ignores the possibility that it's an RFC. + rfc_flag = models.IntegerField(null=True) + ballot_id = models.IntegerField() + primary_flag = models.IntegerField(null=True, blank=True) + group_flag = models.IntegerField(blank=True) + token_name = models.CharField(blank=True, maxlength=25) + token_email = models.CharField(blank=True, maxlength=255) + note = models.TextField(blank=True) + status_date = models.DateField(null=True) + email_display = models.CharField(blank=True, maxlength=50) + agenda = models.IntegerField(null=True, blank=True) + cur_state = models.ForeignKey(IDState, db_column='cur_state', related_name='docs') + prev_state = models.ForeignKey(IDState, db_column='prev_state', related_name=None) + assigned_to = models.CharField(blank=True, maxlength=25) + mark_by = models.ForeignKey(IESGLogin, db_column='mark_by', related_name='marked') + job_owner = models.ForeignKey(IESGLogin, db_column='job_owner', related_name='documents') + event_date = models.DateField(null=True) + area_acronym = models.ForeignKey(Areas) + cur_sub_state = models.ForeignKey(IDSubState, related_name='docs', null=True, blank=True) + prev_sub_state = models.ForeignKey(IDSubState, related_name=None, null=True, blank=True) + returning_item = models.IntegerField(null=True, blank=True) + telechat_date = models.DateField(null=True, blank=True) + via_rfc_editor = models.IntegerField(null=True, blank=True) + state_change_notice_to = models.CharField(blank=True, maxlength=255) + dnp = models.IntegerField(null=True, blank=True) + dnp_date = models.DateField(null=True, blank=True) + noproblem = models.IntegerField(null=True, blank=True) + resurrect_requested_by = models.ForeignKey(IESGLogin, db_column='resurrect_requested_by', related_name='docsresurrected', null=True, blank=True) + approved_in_minute = models.IntegerField(null=True, blank=True) + def __str__(self): + if self.rfc_flag: + return "RFC%04d" % ( self.id_document_tag ) + else: + return self.id_document_tag.filename + class Meta: + db_table = 'id_internal' + verbose_name = 'IDTracker Draft' + class Admin: + pass + +class DocumentComment(models.Model): + BALLOT_CHOICES = ( + (1, 'discuss'), + (2, 'comment'), + ) + document = models.ForeignKey(IDInternal) + rfc_flag = models.IntegerField(null=True, blank=True) + public_flag = models.IntegerField() + date = models.DateField(db_column='comment_date') + time = models.CharField(db_column='comment_time', maxlength=20) + version = models.CharField(blank=True, maxlength=3) + comment_text = models.TextField(blank=True) + created_by = models.ForeignKey(IESGLogin, db_column='created_by', null=True) + result_state = models.ForeignKey(IDState, db_column='result_state', null=True, related_name=None) + origin_state = models.ForeignKey(IDState, db_column='origin_state', null=True, related_name=None) + ballot = models.IntegerField(null=True, choices=BALLOT_CHOICES) + def get_absolute_url(self): + if self.rfc_flag: + return "/idtracker/rfc%d/comment/%d/" % (self.document_id, self.id) + else: + return "/idtracker/%s/comment/%d/" % (self.document.draft.filename, self.id) + def get_author(self): + if self.created_by: + return self.created_by.__str__() + else: + return "system" + class Meta: + db_table = 'document_comments' + + +class IDAuthors(models.Model): + document = models.ForeignKey(InternetDraft, db_column='id_document_tag', related_name='authors', edit_inline=models.TABULAR) + person = models.ForeignKey(PersonOrOrgInfo, db_column='person_or_org_tag', raw_id_admin=True, core=True) + author_order = models.IntegerField(null=True, blank=True) + def __str__(self): + return "%s authors %s" % ( self.person, self.document.filename ) + def email(self): + try: + return self.person.emailaddress_set.filter(type='I-D').get(priority=self.document_id).address + except EmailAddress.DoesNotExist: + return None + class Meta: + db_table = 'id_authors' + verbose_name = "I-D Author" + ordering = ['document','author_order'] + class Admin: + pass + +# PostalAddress, EmailAddress and PhoneNumber are edited in +# the admin for the Rolodex. +# The unique_together constraint is commented out for now, because +# of a bug in oldforms and AutomaticManipulator which fails to +# create the isUniquefoo_bar method properly. Since django is +# moving away from oldforms, I have to assume that this is going +# to be fixed by moving admin to newforms. +# A table without a unique primary key! +# must decide which field is/are core. +class PostalAddress(models.Model): + address_type = models.CharField(maxlength=4) + address_priority = models.IntegerField(null=True) + person_or_org = models.ForeignKey(PersonOrOrgInfo, primary_key=True, db_column='person_or_org_tag', edit_inline=models.STACKED) + person_title = models.CharField(maxlength=50, blank=True) + affiliated_company = models.CharField(maxlength=70, blank=True) + # always uppercase(affiliated_company) + aff_company_key = models.CharField(maxlength=70, blank=True, editable=False) + department = models.CharField(maxlength=100, blank=True) + staddr1 = models.CharField(maxlength=40, core=True) + staddr2 = models.CharField(maxlength=40, blank=True) + mail_stop = models.CharField(maxlength=20, blank=True) + city = models.CharField(maxlength=20, blank=True) + state_or_prov = models.CharField(maxlength=20, blank=True) + postal_code = models.CharField(maxlength=20, blank=True) + country = models.CharField(maxlength=20, blank=True) + def save(self): + self.aff_company_key = self.affiliated_company.upper() + super(PostalAddress, self).save() + class Meta: + db_table = 'postal_addresses' + #unique_together = (('address_type', 'person_or_org'), ) + verbose_name_plural = 'Postal Addresses' + +class EmailAddress(models.Model): + person_or_org = models.ForeignKey(PersonOrOrgInfo, primary_key=True, db_column='person_or_org_tag', edit_inline=models.TABULAR) + type = models.CharField(maxlength=12, db_column='email_type') + priority = models.IntegerField(db_column='email_priority') + address = models.CharField(maxlength=255, core=True, db_column='email_address') + comment = models.CharField(blank=True, maxlength=255, db_column='email_comment') + def __str__(self): + return self.address + class Meta: + db_table = 'email_addresses' + #unique_together = (('email_priority', 'person_or_org'), ) + # with this, I get 'ChangeManipulator' object has no attribute 'isUniqueemail_priority_person_or_org' + +class PhoneNumber(models.Model): + person_or_org = models.ForeignKey(PersonOrOrgInfo, primary_key=True, db_column='person_or_org_tag', edit_inline=models.TABULAR) + phone_type = models.CharField(maxlength=3) + phone_priority = models.IntegerField() + phone_number = models.CharField(blank=True, maxlength=255, core=True) + phone_comment = models.CharField(blank=True, maxlength=255) + class Meta: + db_table = 'phone_numbers' + #unique_together = (('phone_priority', 'person_or_org'), ) + +### Working Groups + +class GType(models.Model): + group_type_id = models.AutoField(primary_key=True) + type = models.CharField(maxlength=25, db_column='group_type') + def __str__(self): + return self.type + class Meta: + db_table = 'g_type' + class Admin: + pass + +class GStatus(models.Model): + status_id = models.AutoField(primary_key=True) + status = models.CharField(maxlength=25, db_column='status_value') + def __str__(self): + return self.status + class Meta: + db_table = 'g_status' + class Admin: + pass + +class GroupIETF(models.Model): + group_acronym = models.ForeignKey(Acronym, primary_key=True, unique=True, editable=False) + group_type = models.ForeignKey(GType) + proposed_date = models.DateField(null=True, blank=True) + start_date = models.DateField(null=True, blank=True) + dormant_date = models.DateField(null=True, blank=True) + concluded_date = models.DateField(null=True, blank=True) + status = models.ForeignKey(GStatus) + area_director = models.ForeignKey(AreaDirectors, raw_id_admin=True) + meeting_scheduled = models.CharField(blank=True, maxlength=3) + email_address = models.CharField(blank=True, maxlength=60) + email_subscribe = models.CharField(blank=True, maxlength=120) + email_keyword = models.CharField(blank=True, maxlength=50) + email_archive = models.CharField(blank=True, maxlength=95) + comments = models.TextField(blank=True) + last_modified_date = models.DateField() + meeting_scheduled_old = models.CharField(blank=True, maxlength=3) + def __str__(self): + return self.group_acronym.acronym + def active_drafts(self): + return self.group_acronym.internetdraft_set.all().filter(status__status="Active") + class Meta: + db_table = 'groups_ietf' + ordering = ['?'] # workaround django wanting to sort by acronym but not joining with it + class Admin: + pass + +class GChairs(models.Model): + person = models.ForeignKey(PersonOrOrgInfo, db_column='person_or_org_tag', raw_id_admin=True, unique=True, core=True) + group_acronym = models.ForeignKey(GroupIETF, edit_inline=models.TABULAR) + class Meta: + db_table = 'g_chairs' + +class GEditors(models.Model): + group_acronym = models.ForeignKey(GroupIETF, edit_inline=models.TABULAR) + person = models.ForeignKey(PersonOrOrgInfo, db_column='person_or_org_tag', raw_id_admin=True, unique=True, core=True) + class Meta: + db_table = 'g_editors' + +# Which is right? Secretaries or Secretary? +class GSecretaries(models.Model): + group_acronym = models.ForeignKey(GroupIETF, edit_inline=models.TABULAR) + person = models.ForeignKey(PersonOrOrgInfo, db_column='person_or_org_tag', raw_id_admin=True, unique=True, core=True) + class Meta: + db_table = 'g_secretaries' + +#class GSecretary(models.Model): +# group_acronym = models.ForeignKey(GroupIETF, edit_inline=models.TABULAR) +# person = models.ForeignKey(PersonOrOrgInfo, db_column='person_or_org_tag', raw_id_admin=True, unique=True, core=True) +# class Meta: +# db_table = 'g_secretary' + +class GTechAdvisors(models.Model): + group_acronym = models.ForeignKey(GroupIETF, edit_inline=models.TABULAR) + person = models.ForeignKey(PersonOrOrgInfo, db_column='person_or_org_tag', raw_id_admin=True, core=True) + class Meta: + db_table = 'g_tech_advisors' + +class AreaGroup(models.Model): + area = models.ForeignKey(Areas, db_column='area_acronym_id', related_name='areagroup', core=True) + group = models.ForeignKey(GroupIETF, db_column='group_acronym_id', edit_inline=models.TABULAR, num_in_admin=1, unique=True) + class Meta: + db_table = 'area_group' + +class GoalsMilestones(models.Model): + gm_id = models.AutoField(primary_key=True) + group_acronym = models.ForeignKey(GroupIETF, raw_id_admin=True) + description = models.TextField() + expected_due_date = models.DateField() + done_date = models.DateField(null=True, blank=True) + done = models.CharField(blank=True, maxlength=4) + last_modified_date = models.DateField() + def __str__(self): + return self.description + class Meta: + db_table = 'goals_milestones' + class Admin: + pass + +#### end wg stuff + +class ChairsHistory(models.Model): + CHAIR_CHOICES = ( + ( '1', 'IETF' ), + ( '2', 'IAB' ), + ( '3', 'NOMCOM' ), + ) + chair_type_id = models.IntegerField(choices=CHAIR_CHOICES) + present_chair = models.BooleanField() + person = models.ForeignKey(PersonOrOrgInfo, db_column='person_or_org_tag', raw_id_admin=True) + start_year = models.IntegerField() + end_year = models.IntegerField(null=True, blank=True) + class Meta: + db_table = 'chairs_history' + +# +# IRTF RG info +class IRTF(models.Model): + irtf_id = models.AutoField(primary_key=True) + acronym = models.CharField(blank=True, maxlength=25, db_column='irtf_acronym') + name = models.CharField(blank=True, maxlength=255, db_column='irtf_name') + charter_text = models.TextField(blank=True) + meeting_scheduled = models.BooleanField(null=True, blank=True) + class Meta: + db_table = 'irtf' + class Admin: + pass + +class IRTFChairs(models.Model): + irtf = models.ForeignKey(IRTF) + person = models.ForeignKey(PersonOrOrgInfo, db_column='person_or_org_tag', raw_id_admin=True) + class Meta: + db_table = 'irtf_chairs' + class Admin: + pass diff --git a/ietf/idtracker/templatetags/.gitignore b/ietf/idtracker/templatetags/.gitignore new file mode 100644 index 000000000..c7013ced9 --- /dev/null +++ b/ietf/idtracker/templatetags/.gitignore @@ -0,0 +1,2 @@ +/*.pyc +/settings_local.py diff --git a/ietf/idtracker/templatetags/__init__.py b/ietf/idtracker/templatetags/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/ietf/idtracker/templatetags/ietf_filters.py b/ietf/idtracker/templatetags/ietf_filters.py new file mode 100644 index 000000000..9f138a313 --- /dev/null +++ b/ietf/idtracker/templatetags/ietf_filters.py @@ -0,0 +1,89 @@ +from django import template +from django.utils.html import escape, fix_ampersands, linebreaks +from django.template.defaultfilters import linebreaksbr +try: + from email import utils as emailutils +except ImportError: + from email import Utils as emailutils +import re + +register = template.Library() + +@register.filter(name='expand_comma') +def expand_comma(value): + """ + Adds a space after each comma, to allow word-wrapping of + long comma-separated lists.""" + return value.replace(",", ", ") + +@register.filter(name='parse_email_list') +def parse_email_list(value): + """ + Parse a list of comma-seperated email addresses into + a list of mailto: links.""" + addrs = re.split(", ?", value) + ret = [] + for addr in addrs: + (name, email) = emailutils.parseaddr(addr) + if not(name): + name = email + ret.append('%s' % ( fix_ampersands(email), escape(name) )) + return ", ".join(ret) + +# there's an "ahref -> a href" in GEN_UTIL +# but let's wait until we understand what that's for. +@register.filter(name='make_one_per_line') +def make_one_per_line(value): + """ + Turn a comma-separated list into a carraige-return-seperated list.""" + return re.sub(", ?", "\n", value) + +@register.filter(name='link_if_url') +def link_if_url(value): + """ + If the argument looks like a url, return a link; otherwise, just + return the argument.""" + if (re.match('(https?|mailto):', value)): + return "%s" % ( fix_ampersands(value), escape(value) ) + else: + return escape(value) + +# This replicates the nwg_list.cgi method. +# It'd probably be better to check for the presence of +# a scheme with a better RE. +@register.filter(name='add_scheme') +def add_scheme(value): + if (re.match('www', value)): + return "http://" + value + else: + return value + +@register.filter(name='timesum') +def timesum(value): + """ + Sum the times in a list of dicts; used for sql query debugging info""" + sum = 0.0 + for v in value: + sum += float(v['time']) + return sum + +@register.filter(name='text_to_html') +def text_to_html(value): + return keep_spacing(linebreaks(escape(value))) + +@register.filter(name='keep_spacing') +def keep_spacing(value): + """ + Replace any two spaces with one   and one space so that + HTML output doesn't collapse them.""" + return value.replace(' ', '  ') + +@register.filter(name='format_textarea') +def format_textarea(value): + """ + Escapes HTML, except for , ,
. + + Adds
at the end like the builtin linebreaksbr. + + Also calls keep_spacing.""" + return keep_spacing(linebreaksbr(escape(value).replace('<b>','').replace('</b>','').replace('<br>','
'))) diff --git a/ietf/idtracker/urls.py b/ietf/idtracker/urls.py new file mode 100644 index 000000000..a3ed27fee --- /dev/null +++ b/ietf/idtracker/urls.py @@ -0,0 +1,26 @@ +from django.conf.urls.defaults import * +from ietf.idtracker.models import InternetDraft, IDState, IDSubState, DocumentComment +from ietf.idtracker import views + +id_dict = { + 'queryset': InternetDraft.objects.all(), +} +comment_dict = { + 'queryset': DocumentComment.objects.all().filter(public_flag=1), +} + +urlpatterns = patterns('django.views.generic.simple', + (r'^states/$', 'direct_to_template', { 'template': 'idtracker/states.html', 'extra_context': { 'states': IDState.objects.all(), 'substates': IDSubState.objects.all() } }), +) +urlpatterns += patterns('django.views.generic.list_detail', + (r'^(?P\d+)/$', 'object_detail', id_dict), + (r'^(?P[^/]+)/$', 'object_detail', dict(id_dict, slug_field='filename')), + (r'^comment/(?P\d+)/$', 'object_detail', comment_dict), +) +urlpatterns += patterns('', + (r'^(?P[^/]+)/comment/(?P\d+)/$', views.comment, comment_dict), + (r'^states/(?P\d+)/$', views.state_desc), + (r'^states/substate/(?P\d+)/$', views.state_desc, { 'is_substate': 1 }), + (r'^(?P\d+)/edit/$', views.edit_idinternal), + (r'^$', views.search), +) diff --git a/ietf/idtracker/views.py b/ietf/idtracker/views.py new file mode 100644 index 000000000..fae65a2b7 --- /dev/null +++ b/ietf/idtracker/views.py @@ -0,0 +1,120 @@ +# Create your views here. +from django.http import HttpResponse,HttpResponseRedirect +from django import newforms as forms +from django.template import RequestContext, Context, loader +from django.shortcuts import get_object_or_404, render_to_response +from django.db.models import Q +from django.views.generic.list_detail import object_detail +from ietf.idtracker.models import InternetDraft, IDInternal, IDState, IDSubState + +# Override default form field mappings +# group_acronym: CharField(max_length=10) +# note: CharField(max_length=100) +def myfields(f): + if f.name == "group": + return forms.CharField(max_length=10, + widget=forms.TextInput(attrs={'size': 5})) + if f.name == "note": + return forms.CharField(max_length=100, + widget=forms.TextInput(attrs={'size': 100})) + return f.formfield() + +def search(request): + InternetDraftForm = forms.models.form_for_model(InternetDraft, formfield_callback=myfields) + idform = InternetDraftForm(request.POST) + InternalForm = forms.models.form_for_model(IDInternal, formfield_callback=myfields) + form = InternalForm(request.POST) + t = loader.get_template('idtracker/idtracker_search.html') + # if there's a post, do the search and supply results to the template + if request.method == 'POST': + qdict = { 'filename': 'draft__filename__contains', + 'job_owner': 'job_owner', + 'group': 'draft__group__acronym', + 'cur_state': 'cur_state', + 'cur_sub_state': 'cur_sub_state', + 'rfc_number': 'draft__rfc_number', + 'area_acronym': 'area_acronym', + 'note': 'note__contains', + } + q_objs = [Q(**{qdict[k]: request.POST[k]}) + for k in qdict.keys() + if request.POST[k] != ''] + matches = IDInternal.objects.all().filter(*q_objs) +# matches = IDInternal.objects.all() +# if request.POST['filename']: +# matches = matches.filter(draft__filename__contains=request.POST["filename"]) +# if request.POST['job_owner']: +# matches = matches.filter(job_owner=request.POST['job_owner']) +# if request.POST['group']: +# matches = matches.filter(draft__group__acronym=request.POST['group_acronym']) +# if request.POST['cur_state']: +# matches = matches.filter(cur_state=request.POST['cur_state']) +# if request.POST['cur_sub_state']: +# matches = matches.filter(cur_sub_state=request.POST['cur_sub_state']) +# if request.POST['rfc_number']: +# matches = matches.filter(draft__rfc_number=request.POST['rfc_number']) +# if request.POST['area_acronym']: +# matches = matches.filter(area_acronym=request.POST['area_acronym']) +# if request.POST['note']: +# matches = matches.filter(note__contains=request.POST['note']) + matches = matches.order_by('cur_state', 'cur_sub_state_id') + else: + matches = None + + c = RequestContext(request, { + 'form': form, + 'idform': idform, + 'matches': matches, + }) + return HttpResponse(t.render(c)) + +def edit_idinternal(request, id=None): + #draft = InternetDraft.objects.get(pk=id) + draft = get_object_or_404(InternetDraft.objects, pk=id) + IDEntryForm = forms.models.form_for_instance(draft) + # todo: POST handling for idform + idform = IDEntryForm() + idinternal = draft.idinternal() + if idinternal: + EntryForm = forms.models.form_for_instance(idinternal) + if request.method == 'POST': + form = EntryForm(request.POST) + if form.is_valid(): + form.save() + return HttpResponseRedirect("/") # really want here + else: + form = EntryForm() + else: + form = None + + t = loader.get_template('idtracker/idtracker_edit.html') + + c = RequestContext(request, { + 'form': form, + 'idform': idform, + 'draft': draft, + }) + return HttpResponse(t.render(c)) + +def state_desc(request, state, is_substate=0): + if int(state) == 100: + object = { + 'state': 'I-D Exists', + 'description': """ +Initial (default) state for all internet drafts. Such documents are +not being tracked by the IESG as no request has been made of the +IESG to do anything with the document. +""" + } + elif is_substate: + sub = get_object_or_404(IDSubState, pk=state) + object = { 'state': sub.sub_state, 'description': sub.description } + else: + object = get_object_or_404(IDState, pk=state) + return render_to_response('idtracker/state_desc.html', {'state': object}, + context_instance=RequestContext(request)) + +def comment(request, slug, object_id, queryset): + draft = get_object_or_404(InternetDraft, filename=slug) + queryset = queryset.filter(document=draft.id_document_tag) + return object_detail(request, queryset=queryset, object_id=object_id) diff --git a/ietf/iesg/.gitignore b/ietf/iesg/.gitignore new file mode 100644 index 000000000..c7013ced9 --- /dev/null +++ b/ietf/iesg/.gitignore @@ -0,0 +1,2 @@ +/*.pyc +/settings_local.py diff --git a/ietf/iesg/__init__.py b/ietf/iesg/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/ietf/iesg/feeds.py b/ietf/iesg/feeds.py new file mode 100644 index 000000000..443affd2e --- /dev/null +++ b/ietf/iesg/feeds.py @@ -0,0 +1,21 @@ +from django.contrib.syndication.feeds import Feed +from django.utils.feedgenerator import Atom1Feed +from ietf.iesg.models import TelechatMinutes + +class IESGMinutes(Feed): + title = "IESG Telechat Minutes" + link = "/iesg/telechat/" + subtitle = "Minutes from IESG Telechats." + feed_type = Atom1Feed + + def items(self): + return TelechatMinutes.objects.order_by('-telechat_date')[:10] + + def item_link(self, item): + return "/iesg/telechat/detail/%d/" % (item.id) + + # The approval date isn't stored, so let's just say they're + # published on the date of the telechat. + def item_pubdate(self, item): + # (slightly better would be 0900 Eastern on this date) + return item.telechat_date diff --git a/ietf/iesg/models.py b/ietf/iesg/models.py new file mode 100644 index 000000000..d38540778 --- /dev/null +++ b/ietf/iesg/models.py @@ -0,0 +1,9 @@ +from django.db import models + +class TelechatMinutes(models.Model): + telechat_date = models.DateField(null=True, blank=True) + telechat_minute = models.TextField(blank=True) + exported = models.IntegerField(null=True, blank=True) + class Meta: + db_table = 'telechat_minutes' + diff --git a/ietf/iesg/urls.py b/ietf/iesg/urls.py new file mode 100644 index 000000000..6350ca3f4 --- /dev/null +++ b/ietf/iesg/urls.py @@ -0,0 +1,25 @@ +from django.conf.urls.defaults import * +from ietf.iesg.models import TelechatMinutes + + +#urlpatterns = patterns('django.views.generic.list_detail', +# (r'^lastcall/$', 'object_list', { +# 'queryset': InternetDraft.objects.all() }), +#) + +queryset = TelechatMinutes.objects.all() +telechat_detail = { + 'queryset': queryset, + 'date_field': 'telechat_date', +} +telechat_archive = dict(telechat_detail, allow_empty=True) + +urlpatterns = patterns('django.views.generic.date_based', + (r'^telechat/$', 'archive_index', telechat_archive), + (r'^telechat/(?P\d{4})/$', 'archive_year', telechat_archive), + (r'^telechat/(?P\d{4})/(?P[a-z]{3})/$', 'archive_month', telechat_archive), +) + +urlpatterns += patterns('django.views.generic.list_detail', + (r'^telechat/detail/(?P\d+)/$', 'object_detail', { 'queryset': queryset }), +) diff --git a/ietf/iesg/views.py b/ietf/iesg/views.py new file mode 100644 index 000000000..60f00ef0e --- /dev/null +++ b/ietf/iesg/views.py @@ -0,0 +1 @@ +# Create your views here. diff --git a/ietf/ipr/.gitignore b/ietf/ipr/.gitignore new file mode 100644 index 000000000..c7013ced9 --- /dev/null +++ b/ietf/ipr/.gitignore @@ -0,0 +1,2 @@ +/*.pyc +/settings_local.py diff --git a/ietf/ipr/__init__.py b/ietf/ipr/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/ietf/ipr/models.py b/ietf/ipr/models.py new file mode 100644 index 000000000..8aef976d6 --- /dev/null +++ b/ietf/ipr/models.py @@ -0,0 +1,167 @@ +from django.db import models +from ietf.idtracker.views import InternetDraft +from ietf.rfcs.models import Rfc + +LICENSE_CHOICES = ( + (1, 'No License Required for Implementers.'), + (2, 'Royalty-Free, Reasonable and Non-Discriminatory License to All Implementers.'), + (3, 'Reasonable and Non-Discriminatory License to All Implementers with Possible Royalty/Fee.'), + (4, 'Licensing Declaration to be Provided Later.'), + (5, 'Unwilling to Commit to the Provisions.'), + (6, 'See Text Below for Licensing Declaration.'), +) +STDONLY_CHOICES = ( + (0, ""), + (1, "The licensing declaration is limited solely to standards-track IETF documents."), +) +SELECT_CHOICES = ( + ("0", 'NO'), + ("1", 'YES'), + ("2", 'NO'), +) + +# not clear why this has both an ID and selecttype +# Also not clear why a table for "YES" and "NO". +class IprSelecttype(models.Model): + type_id = models.AutoField(primary_key=True) + selecttype = models.IntegerField(unique=True) + type_display = models.CharField(blank=True, maxlength=15) + def __str__(self): + return self.type_display + class Meta: + db_table = 'ipr_selecttype' + class Admin: + pass + +class IprLicensing(models.Model): + licensing_option = models.AutoField(primary_key=True) + value = models.CharField(maxlength=255, db_column='licensing_option_value') + def __str__(self): + return self.value; + class Meta: + db_table = 'ipr_licensing' + class Admin: + pass + + +class IprDetail(models.Model): + ipr_id = models.AutoField(primary_key=True) + p_h_legal_name = models.CharField("Patent Holder's Legal Name", blank=True, maxlength=255) + document_title = models.CharField(blank=True, maxlength=255) + rfc_number = models.IntegerField(null=True, blank=True) # always NULL + id_document_tag = models.IntegerField(null=True, blank=True) # always NULL + other_designations = models.CharField(blank=True, maxlength=255) + p_applications = models.TextField(blank=True, maxlength=255) + date_applied = models.CharField(blank=True, maxlength=255) + #selecttype = models.ForeignKey(IprSelecttype, to_field='selecttype', db_column='selecttype') + selecttype = models.IntegerField(null=True, choices=SELECT_CHOICES) + discloser_identify = models.TextField(blank=True, maxlength=255, db_column='disclouser_identify') + #licensing_option = models.ForeignKey(IprLicensing, db_column='licensing_option') + licensing_option = models.IntegerField(null=True, blank=True, choices=LICENSE_CHOICES) + other_notes = models.TextField(blank=True) + submitted_date = models.DateField(null=True, blank=True) + status = models.IntegerField(null=True, blank=True) + comments = models.TextField(blank=True) + old_ipr_url = models.CharField(blank=True, maxlength=255) + additional_old_title1 = models.CharField(blank=True, maxlength=255) + additional_old_url1 = models.CharField(blank=True, maxlength=255) + additional_old_title2 = models.CharField(blank=True, maxlength=255) + additional_old_url2 = models.CharField(blank=True, maxlength=255) + country = models.CharField(blank=True, maxlength=100) + p_notes = models.TextField(blank=True) + third_party = models.BooleanField() + lic_opt_a_sub = models.IntegerField(choices=STDONLY_CHOICES) + lic_opt_b_sub = models.IntegerField(choices=STDONLY_CHOICES) + lic_opt_c_sub = models.IntegerField(choices=STDONLY_CHOICES) + generic = models.BooleanField() + # I don't understand selectowned, it looks like it should be a boolean field. + selectowned = models.IntegerField(null=True, blank=True, choices=SELECT_CHOICES) + comply = models.BooleanField() + lic_checkbox = models.BooleanField() + update_notified_date = models.DateField(null=True, blank=True) + def __str__(self): + return self.document_title + def selecttypetext(self): + if self.selecttype == "1": + return "YES" + else: + return "NO" + def selectownedtext(self): + if self.selectowned == "1": + return "YES" + else: + return "NO" + class Meta: + db_table = 'ipr_detail' + class Admin: + pass + +class IprContact(models.Model): + TYPE_CHOICES = ( + ('1', 'Patent Holder Contact'), + ('2', 'IETF Participant Contact'), + ('3', 'Submitter Contact'), + ) + contact_id = models.AutoField(primary_key=True) + ipr = models.ForeignKey(IprDetail, raw_id_admin=True, related_name="contact") + contact_type = models.IntegerField(choices=TYPE_CHOICES) + name = models.CharField(maxlength=255) + title = models.CharField(blank=True, maxlength=255) + department = models.CharField(blank=True, maxlength=255) + telephone = models.CharField(maxlength=25) + fax = models.CharField(blank=True, maxlength=25) + email = models.CharField(maxlength=255) + address1 = models.CharField(blank=True, maxlength=255) + address2 = models.CharField(blank=True, maxlength=255) + def __str__(self): + return self.name + class Meta: + db_table = 'ipr_contacts' + class Admin: + pass + + + +class IprDraft(models.Model): + document = models.ForeignKey(InternetDraft, db_column='id_document_tag', raw_id_admin=True) + ipr = models.ForeignKey(IprDetail, raw_id_admin=True, related_name='drafts') + revision = models.CharField(maxlength=2) + def __str__(self): + return "%s applies to %s-%s" % ( self.ipr, self.document, self.revision ) + class Meta: + db_table = 'ipr_ids' + class Admin: + pass + +class IprNotification(models.Model): + ipr = models.ForeignKey(IprDetail, raw_id_admin=True) + notification = models.TextField(blank=True) + date_sent = models.DateField(null=True, blank=True) + time_sent = models.CharField(blank=True, maxlength=25) + def __str__(self): + return "IPR notification for %s sent %s %s" % (self.ipr, self.date_sent, self.time_sent) + class Meta: + db_table = 'ipr_notifications' + class Admin: + pass + +class IprRfc(models.Model): + ipr = models.ForeignKey(IprDetail, raw_id_admin=True, related_name='rfcs') + rfc_number = models.ForeignKey(Rfc, db_column='rfc_number', raw_id_admin=True) + def __str__(self): + return "%s applies to RFC%04d" % ( self.ipr, self.rfc_number ) + class Meta: + db_table = 'ipr_rfcs' + class Admin: + pass + +class IprUpdate(models.Model): + id = models.IntegerField(primary_key=True) + ipr = models.ForeignKey(IprDetail, raw_id_admin=True, related_name='updates') + updated = models.ForeignKey(IprDetail, db_column='updated', raw_id_admin=True, related_name='updated_by') + status_to_be = models.IntegerField(null=True, blank=True) + processed = models.IntegerField(null=True, blank=True) + class Meta: + db_table = 'ipr_updates' + class Admin: + pass diff --git a/ietf/ipr/urls.py b/ietf/ipr/urls.py new file mode 100644 index 000000000..6cf1caccb --- /dev/null +++ b/ietf/ipr/urls.py @@ -0,0 +1,21 @@ +from django.conf.urls.defaults import * +from ietf.ipr import models, views + +urlpatterns = patterns('', + (r'^$', views.showlist), + (r'^about/?$', views.default), + (r'^ipr-(?P\d+)/$', views.show), + (r'^update/$', views.updatelist), + (r'^update/(?P\d+)/$', views.update), + (r'^new-(?P(specific|generic|thirdpty))/$', views.new), +) + +queryset = models.IprDetail.objects.all() +archive = {'queryset':queryset, 'date_field': 'submitted_date', 'allow_empty':True } + +urlpatterns += patterns('django.views.generic.date_based', + (r'^(?P\d{4})/$', 'archive_year', archive), + (r'^(?P\d{4})/(?P[a-z]{3})/$', 'archive_month', archive), +) + + diff --git a/ietf/ipr/views.py b/ietf/ipr/views.py new file mode 100644 index 000000000..2e34240cd --- /dev/null +++ b/ietf/ipr/views.py @@ -0,0 +1,112 @@ +import models +from django.shortcuts import render_to_response as render +import django.newforms as forms + +def default(request): + """Default page, with links to sub-pages""" + return render("ipr/disclosure.html", {}) + +def showlist(request): + """Display a list of existing disclosures""" + return list(request, 'ipr/list.html') + +def updatelist(request): + """Display a list of existing disclosures, with links to update forms""" + return list(request, 'ipr/update_list.html') + +def list(request, template): + """Display a list of existing disclosures, using the provided template""" + disclosures = models.IprDetail.objects.all() + generic_disclosures = disclosures.filter(status__in=[1,3], generic=1) + specific_disclosures = disclosures.filter(status__in=[1,3], generic=0, third_party=0) + thirdpty_disclosures = disclosures.filter(status__in=[1,3], generic=0, third_party=1) + + return render(template, + { + 'generic_disclosures' : generic_disclosures.order_by(* ['-submitted_date', ] ), + 'specific_disclosures': specific_disclosures.order_by(* ['-submitted_date', ] ), + 'thirdpty_disclosures': thirdpty_disclosures.order_by(* ['-submitted_date', ] ), + } ) + +def show(request, ipr_id=None): + """Show a specific IPR disclosure""" + assert ipr_id != None + ipr = models.IprDetail.objects.filter(ipr_id=ipr_id)[0] + ipr.disclosure_type = get_disclosure_type(ipr) + try: + ipr.holder_contact = ipr.contact.filter(contact_type=1)[0] + except IndexError: + ipr.holder_contact = "" + try: + ipr.ietf_contact = ipr.contact.filter(contact_type=2)[0] + except IndexError: + ipr.ietf_contact = "" + try: + ipr.submitter = ipr.contact.filter(contact_type=3)[0] + except IndexError: + ipr.submitter = "" + + if ipr.generic: + return render("ipr/details_generic.html", {"ipr": ipr}) + if ipr.third_party: + return render("ipr/details_thirdpty.html", {"ipr": ipr}) + else: + return render("ipr/details_specific.html", {"ipr": ipr}) + + +def update(request, ipr_id=None): + """Update a specific IPR disclosure""" + # TODO: replace the placeholder code with the appropriate update code + return show(request, ipr_id) + +def new(request, type): + """Form to make a new IPR disclosure""" + debug = "" + + IprForm = forms.form_for_model(models.IprDetail, formfield_callback=detail_field_fixup) + # Some extra fields which will get post-processing to generate the IprRfcs + # and IprDrafts entries which go into the database: + IprForm.base_fields["rfclist"] = forms.CharField(required=False) + IprForm.base_fields["draftlist"] = forms.CharField(required=False) + IprForm.base_fields["stdonly_license"] = forms.BooleanField(required=False) + + ContactForm = forms.form_for_model(models.IprContact) + + if request.method == 'POST': + form = IprForm(request.POST) + + form.holder_contact = ContactForm(request.POST, prefix="ph") + form.ietf_contact = ContactForm(request.POST, prefix="ietf") + form.submitter = ContactForm(request.POST, prefix="sub") + + if form.is_valid(): + form.save() + return HttpResponseRedirect("/ipr/") + else: + form = IprForm() + form.holder_contact = ContactForm(prefix="ph") + form.ietf_contact = ContactForm(prefix="ietf") + form.submitter = ContactForm(prefix="sub") + + form.unbound_form = not form.is_bound + form.disclosure_type = type.capitalize() + return render("ipr/new_%s.html" % type, {"ipr": form, "debug": debug, }) + +def detail_field_fixup(field): + if field.name == "licensing_option": + return forms.IntegerField(widget=forms.RadioSelect(choices=models.LICENSE_CHOICES)) + if field.name in ["selecttype", "selectowned"]: + return forms.IntegerField(widget=forms.RadioSelect(choices=((1, "YES"), (2, "NO")))) + return field.formfield() + + +# ---- Helper functions ------------------------------------------------------ + +def get_disclosure_type(ipr): + if ipr.generic: + assert not ipr.third_party + return "Generic" + if ipr.third_party: + return "Third Party" + else: + return "Specific" diff --git a/ietf/liaisons/.gitignore b/ietf/liaisons/.gitignore new file mode 100644 index 000000000..c7013ced9 --- /dev/null +++ b/ietf/liaisons/.gitignore @@ -0,0 +1,2 @@ +/*.pyc +/settings_local.py diff --git a/ietf/liaisons/__init__.py b/ietf/liaisons/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/ietf/liaisons/models.py b/ietf/liaisons/models.py new file mode 100644 index 000000000..5533ce44b --- /dev/null +++ b/ietf/liaisons/models.py @@ -0,0 +1,154 @@ +from django.db import models +from ietf.idtracker.models import Acronym,PersonOrOrgInfo +from django.core.exceptions import ObjectDoesNotExist + +class LiaisonPurpose(models.Model): + purpose_id = models.AutoField(primary_key=True) + purpose_text = models.CharField(blank=True, maxlength=50) + def __str__(self): + return self.purpose_text + class Meta: + db_table = 'liaison_purpose' + class Admin: + pass + +class FromBodies(models.Model): + from_id = models.AutoField(primary_key=True) + body_name = models.CharField(blank=True, maxlength=35) + poc = models.ForeignKey(PersonOrOrgInfo, db_column='poc', raw_id_admin=True, null=True) + is_liaison_manager = models.BooleanField() + other_sdo = models.BooleanField() + email_priority = models.IntegerField(null=True, blank=True) + def __str__(self): + return self.body_name + class Meta: + db_table = 'from_bodies' + class Admin: + pass + +class LiaisonDetail(models.Model): + detail_id = models.AutoField(primary_key=True) + person = models.ForeignKey(PersonOrOrgInfo, db_column='person_or_org_tag', raw_id_admin=True) + submitted_date = models.DateField(null=True, blank=True) + last_modified_date = models.DateField(null=True, blank=True) + from_id = models.IntegerField(null=True, blank=True) + to_body = models.CharField(blank=True, maxlength=255) + title = models.CharField(blank=True, maxlength=255) + response_contact = models.CharField(blank=True, maxlength=255) + technical_contact = models.CharField(blank=True, maxlength=255) + purpose_text = models.TextField(blank=True, db_column='purpose') + body = models.TextField(blank=True) + deadline_date = models.DateField(null=True, blank=True) + cc1 = models.TextField(blank=True) + # unclear why cc2 is a CharField, but it's always + # either NULL or blank. + cc2 = models.CharField(blank=True, maxlength=50) + submitter_name = models.CharField(blank=True, maxlength=255) + submitter_email = models.CharField(blank=True, maxlength=255) + by_secretariat = models.IntegerField(null=True, blank=True) + to_poc = models.CharField(blank=True, maxlength=255) + to_email = models.CharField(blank=True, maxlength=255) + purpose = models.ForeignKey(LiaisonPurpose) + replyto = models.CharField(blank=True, maxlength=255) + def __str__(self): + return self.title or "" + def from_body(self): + """The from_id field is a foreign key for either + FromBodies or Acronyms, depending on whether it's + the IETF or not. There is no flag field saying + which, so we just try it. If the index values + overlap, then this function will be ambiguous + and will return the value from FromBodies. Current + acronym IDs start at 925 so the day of reckoning + is not nigh.""" + try: + from_body = FromBodies.objects.get(pk=self.from_id) + return from_body.body_name + except ObjectDoesNotExist: + pass + try: + acronym = Acronym.objects.get(pk=self.from_id) + if acronym.areas_set.count(): + type = "AREA" + else: + type = "WG" + return "IETF %s %s" % ( acronym.acronym.upper(), type ) + except ObjectDoesNotExist: + pass + return "" % self.from_id + def from_email(self): + """If there is an entry in from_bodies, it has + the desired email priority. However, if it's from + an IETF WG, there is no entry in from_bodies, so + default to 1.""" + try: + from_body = FromBodies.objects.get(pk=self.from_id) + email_priority = from_body.email_priority + except FromBodies.DoesNotExist: + email_priority = 1 + return self.person.emailaddress_set.all().get(priority=email_priority) + class Meta: + db_table = 'liaison_detail' + class Admin: + pass + +class SDOs(models.Model): + sdo_id = models.AutoField(primary_key=True) + sdo_name = models.CharField(blank=True, maxlength=255) + def __str__(self): + return self.sdo_name + def liaisonmanager(self): + try: + return self.liaisonmanagers_set.all()[0] + except: + return None + class Meta: + db_table = 'sdos' + class Admin: + pass + +class LiaisonManagers(models.Model): + person = models.ForeignKey(PersonOrOrgInfo, db_column='person_or_org_tag', raw_id_admin=True) + email_priority = models.IntegerField(null=True, blank=True, core=True) + sdo = models.ForeignKey(SDOs, edit_inline=models.TABULAR, num_in_admin=1) + def email(self): + try: + return self.person.emailaddress_set.get(priority=self.email_priority) + except ObjectDoesNotExist: + return None + class Meta: + db_table = 'liaison_managers' + +class LiaisonsInterim(models.Model): + title = models.CharField(blank=True, maxlength=255) + submitter_name = models.CharField(blank=True, maxlength=255) + submitter_email = models.CharField(blank=True, maxlength=255) + submitted_date = models.DateField(null=True, blank=True) + from_id = models.IntegerField(null=True, blank=True) + def __str__(self): + return self.title + class Meta: + db_table = 'liaisons_interim' + class Admin: + pass + +class Uploads(models.Model): + file_id = models.AutoField(primary_key=True) + file_title = models.CharField(blank=True, maxlength=255, core=True) + person = models.ForeignKey(PersonOrOrgInfo, db_column='person_or_org_tag', raw_id_admin=True) + file_extension = models.CharField(blank=True, maxlength=10) + detail = models.ForeignKey(LiaisonDetail, raw_id_admin=True, edit_inline=models.TABULAR, num_in_admin=1) + def __str__(self): + return self.file_title + class Meta: + db_table = 'uploads' + +# empty table +#class SdoChairs(models.Model): +# sdo = models.ForeignKey(SDOs) +# person = models.ForeignKey(PersonOrOrgInfo, db_column='person_or_org_tag', raw_id_admin=True) +# email_priority = models.IntegerField(null=True, blank=True) +# class Meta: +# db_table = 'sdo_chairs' +# class Admin: +# pass diff --git a/ietf/liaisons/urls.py b/ietf/liaisons/urls.py new file mode 100644 index 000000000..62e1324d4 --- /dev/null +++ b/ietf/liaisons/urls.py @@ -0,0 +1,20 @@ +from django.conf.urls.defaults import * +from ietf.liaisons.models import LiaisonDetail, LiaisonManagers + +info_dict = { + 'queryset': LiaisonDetail.objects.all().order_by("-submitted_date"), +} + +# there's an opportunity for date-based filtering. +urlpatterns = patterns('django.views.generic.list_detail', + (r'^$', 'object_list', info_dict), + (r'^(?P\d+)/$', 'object_detail', info_dict), + (r'^managers/$', 'object_list', { 'queryset': LiaisonManagers.objects.all().select_related().order_by('sdos.sdo_name') }), #XXX order_by relies on select_related() +) + +urlpatterns += patterns('django.views.generic.simple', + (r'^help/$', 'direct_to_template', {'template': 'liaisons/help.html'}), + (r'^help/fields/', 'direct_to_template', {'template': 'liaisons/field_help.html'}), + (r'^help/from_ietf/', 'direct_to_template', {'template': 'liaisons/guide_from_ietf.html'}), + (r'^help/to_ietf/', 'direct_to_template', {'template': 'liaisons/guide_to_ietf.html'}), +) diff --git a/ietf/liaisons/views.py b/ietf/liaisons/views.py new file mode 100644 index 000000000..60f00ef0e --- /dev/null +++ b/ietf/liaisons/views.py @@ -0,0 +1 @@ +# Create your views here. diff --git a/ietf/mailinglists/.gitignore b/ietf/mailinglists/.gitignore new file mode 100644 index 000000000..c7013ced9 --- /dev/null +++ b/ietf/mailinglists/.gitignore @@ -0,0 +1,2 @@ +/*.pyc +/settings_local.py diff --git a/ietf/mailinglists/__init__.py b/ietf/mailinglists/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/ietf/mailinglists/models.py b/ietf/mailinglists/models.py new file mode 100644 index 000000000..1de3aa730 --- /dev/null +++ b/ietf/mailinglists/models.py @@ -0,0 +1,96 @@ +from django.db import models +from ietf.idtracker.models import Acronym, Areas, PersonOrOrgInfo + +class ImportedMailingList(models.Model): + group_acronym = models.ForeignKey(Acronym) + list_acronym = models.CharField(blank=True, maxlength=255) + list_name = models.CharField(blank=True, maxlength=255) + list_domain = models.CharField(blank=True, maxlength=25) + def __str__(self): + return self.list_name or self.group_acronym + class Meta: + db_table = 'imported_mailing_list' + class Admin: + pass + +class MailingList(models.Model): + SUBSCRIPTION_CHOICES = ( + ('1', 'Confirm'), + ('2', 'Approval'), + ('3', 'Confirm+Approval'), + ) + MAILTYPE_CHOICES = ( + ('1', 'Create new WG email list at ietf.org'), + ('2', 'Move existing WG email list to ietf.org'), + ('3', 'Move existing non-WG email list to selected domain'), + ('4', 'Create new non-WG email list at selected domain'), + ('5', 'Close existing WG email list at ietf.org'), + ('6', 'Close existing non-WG email list at selected domain'), + ) + # I don't understand the reasoning behind 2 vs 3. + # this is set in the javascript and not editable, + # so I think there's a 1:1 mapping from mail_type -> mail_cat. + # The existing database doesn't help much since many + # mail_cat values are NULL. + MAILCAT_CHOICES = ( + ('1', 'WG Mailing List'), + ('2', 'Non-WG Mailing List'), + ('3', 'Close Non-WG Mailing List'), + ) + mailing_list_id = models.CharField('Unique ID', primary_key=True, maxlength=25) + request_date = models.DateField() + mlist_name = models.CharField('Mailing list name', maxlength=250) + short_desc = models.CharField(maxlength=250) + long_desc = models.TextField(blank=True) + requestor = models.CharField(maxlength=250) + requestor_email = models.CharField(maxlength=250) + # admins is a VARCHAR but can have multiple lines + admins = models.TextField(blank=True, maxlength=250) + archive_remote = models.TextField(blank=True) + archive_private = models.BooleanField() + initial = models.TextField('Initial members',blank=True) + welcome_message = models.TextField(blank=True) + subscription = models.IntegerField(choices=SUBSCRIPTION_CHOICES) + post_who = models.BooleanField('Only members can post') + post_admin = models.BooleanField('Administrator approval required for posts') + add_comment = models.TextField(blank=True) + mail_type = models.IntegerField(choices=MAILTYPE_CHOICES) + mail_cat = models.IntegerField(choices=MAILCAT_CHOICES) + auth_person = models.ForeignKey(PersonOrOrgInfo, db_column='auth_person_or_org_tag', raw_id_admin=True) + welcome_new = models.TextField(blank=True) + approved = models.BooleanField() + approved_date = models.DateField(null=True, blank=True) + reason_to_delete = models.TextField(blank=True) + domain_name = models.CharField(blank=True, maxlength=10) + def __str__(self): + return self.mlist_name + class Meta: + db_table = 'mailing_list' + class Admin: + pass + +class NonWgMailingList(models.Model): + id = models.CharField(primary_key=True, maxlength=35) + purpose = models.TextField(blank=True) + area_acronym = models.ForeignKey(Areas) + admin = models.TextField(blank=True) + list_url = models.CharField(maxlength=255) + s_name = models.CharField(blank=True, maxlength=255) + s_email = models.CharField(blank=True, maxlength=255) + # Can be 0, 1, -1, or what looks like a person_or_org_tag, positive or neg. + # The values less than 1 don't get displayed on the list of lists. + status = models.IntegerField() + list_name = models.CharField(blank=True, maxlength=255) + subscribe_url = models.CharField(blank=True, maxlength=255) + subscribe_other = models.TextField(blank=True) + ds_name = models.CharField(blank=True, maxlength=255) + ds_email = models.CharField(blank=True, maxlength=255) + msg_to_ad = models.TextField(blank=True) + def __str__(self): + return self.list_name + class Meta: + db_table = 'none_wg_mailing_list' + ordering = ['list_name'] + class Admin: + pass + diff --git a/ietf/mailinglists/urls.py b/ietf/mailinglists/urls.py new file mode 100644 index 000000000..9d01a62c0 --- /dev/null +++ b/ietf/mailinglists/urls.py @@ -0,0 +1,8 @@ +from django.conf.urls.defaults import * +from ietf.idtracker.models import Areas +from ietf.mailinglists.models import NonWgMailingList + +urlpatterns = patterns('django.views.generic.list_detail', + (r'^area_lists/$', 'object_list', { 'queryset': Areas.objects.filter(status=1).select_related().order_by('acronym.acronym'), 'template_name': 'mailinglists/areas_list.html' }), + (r'^nonwg_lists/$', 'object_list', { 'queryset': NonWgMailingList.objects.filter(status__gt=0) }), +) diff --git a/ietf/mailinglists/views.py b/ietf/mailinglists/views.py new file mode 100644 index 000000000..60f00ef0e --- /dev/null +++ b/ietf/mailinglists/views.py @@ -0,0 +1 @@ +# Create your views here. diff --git a/ietf/manage.py b/ietf/manage.py new file mode 100644 index 000000000..5e78ea979 --- /dev/null +++ b/ietf/manage.py @@ -0,0 +1,11 @@ +#!/usr/bin/env python +from django.core.management import execute_manager +try: + import settings # Assumed to be in the same directory. +except ImportError: + import sys + sys.stderr.write("Error: Can't find the file 'settings.py' in the directory containing %r. It appears you've customized things.\nYou'll have to run django-admin.py, passing it your settings module.\n(If the file settings.py does indeed exist, it's causing an ImportError somehow.)\n" % __file__) + sys.exit(1) + +if __name__ == "__main__": + execute_manager(settings) diff --git a/ietf/my/.gitignore b/ietf/my/.gitignore new file mode 100644 index 000000000..c7013ced9 --- /dev/null +++ b/ietf/my/.gitignore @@ -0,0 +1,2 @@ +/*.pyc +/settings_local.py diff --git a/ietf/my/__init__.py b/ietf/my/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/ietf/my/models.py b/ietf/my/models.py new file mode 100644 index 000000000..71a836239 --- /dev/null +++ b/ietf/my/models.py @@ -0,0 +1,3 @@ +from django.db import models + +# Create your models here. diff --git a/ietf/my/urls.py b/ietf/my/urls.py new file mode 100644 index 000000000..2bc33532c --- /dev/null +++ b/ietf/my/urls.py @@ -0,0 +1,8 @@ +from django.conf.urls.defaults import * +from ietf.my import views + +urlpatterns = patterns('', + # this is for testing + (r'^(?P.+)/$', views.my), + (r'^$', views.my), +) diff --git a/ietf/my/views.py b/ietf/my/views.py new file mode 100644 index 000000000..44c4020e8 --- /dev/null +++ b/ietf/my/views.py @@ -0,0 +1,21 @@ +from django.http import HttpResponse,HttpResponseRedirect +from django import newforms as forms +from django.template import RequestContext, Context, loader +from django.shortcuts import get_object_or_404 +from ietf.idtracker.models import PersonOrOrgInfo, EmailAddress + +def my(request, addr=None): + if addr is None: + # get email address from logged in user + return + person = PersonOrOrgInfo.objects.filter(emailaddresses__email_address=addr).distinct() + if len(person) != 1: + if len(person) == 0: + raise Http404 + # multiple people matched! + return "Oops" + t = loader.get_template('my/my.html') + c = RequestContext(request, { + 'me': person[0], + }) + return HttpResponse(t.render(c)) diff --git a/ietf/proceedings/.gitignore b/ietf/proceedings/.gitignore new file mode 100644 index 000000000..c7013ced9 --- /dev/null +++ b/ietf/proceedings/.gitignore @@ -0,0 +1,2 @@ +/*.pyc +/settings_local.py diff --git a/ietf/proceedings/__init__.py b/ietf/proceedings/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/ietf/proceedings/models.py b/ietf/proceedings/models.py new file mode 100644 index 000000000..93eb6add9 --- /dev/null +++ b/ietf/proceedings/models.py @@ -0,0 +1,250 @@ +from django.db import models +from ietf.idtracker.models import Acronym, PersonOrOrgInfo, IRTF +import datetime + +# group_acronym is either an IETF Acronym +# or an IRTF one, depending on the value of irtf. +# Multiple inheritance to the rescue. +# +# interim = i prefix (complicated because you have to check if self has +# an interim attribute first) +class ResolveAcronym(object): + def acronym(self): + try: + interim = self.interim + except AttributeError: + interim = False + if self.irtf: + acronym = IRTF.objects.get(pk=self.group_acronym_id).acronym + else: + acronym = Acronym.objects.get(pk=self.group_acronym_id).acronym + if interim: + return "i" + acronym + return acronym + +class Meeting(models.Model): + meeting_num = models.IntegerField(primary_key=True) + start_date = models.DateField() + end_date = models.DateField() + city = models.CharField(blank=True, maxlength=255) + state = models.CharField(blank=True, maxlength=255) + country = models.CharField(blank=True, maxlength=255) + ack = models.TextField(blank=True) + agenda_html = models.TextField(blank=True) + agenda_text = models.TextField(blank=True) + future_meeting = models.TextField(blank=True) + overview1 = models.TextField(blank=True) + overview2 = models.TextField(blank=True) + def __str__(self): + return "IETF %d" % (self.meeting_num) + class Meta: + db_table = 'meetings' + class Admin: + pass + +class MeetingVenue(models.Model): + meeting_num = models.ForeignKey(Meeting, db_column='meeting_num', unique=True) + break_area_name = models.CharField(maxlength=255) + reg_area_name = models.CharField(maxlength=255) + def __str__(self): + return "IETF %d" % (self.meeting_num_id) + class Meta: + db_table = 'meeting_venues' + class Admin: + pass + +class NonSessionRef(models.Model): + name = models.CharField(maxlength=255) + class Meta: + db_table = 'non_session_ref' + +class NonSession(models.Model): + day_id = models.IntegerField() + non_session_ref = models.ForeignKey(NonSessionRef) + meeting_num = models.ForeignKey(Meeting, db_column='meeting_num', unique=True) + time_desc = models.CharField(blank=True, maxlength=75) + class Meta: + db_table = 'non_session' + +class Proceeding(models.Model): + meeting_num = models.ForeignKey(Meeting, db_column='meeting_num', unique=True, primary_key=True) + dir_name = models.CharField(blank=True, maxlength=25) + sub_begin_date = models.DateField(null=True, blank=True) + sub_cut_off_date = models.DateField(null=True, blank=True) + frozen = models.IntegerField(null=True, blank=True) + c_sub_cut_off_date = models.DateField(null=True, blank=True) + pr_from_date = models.DateField(null=True, blank=True) + pr_to_date = models.DateField(null=True, blank=True) + def __str__(self): + return "IETF %d" % (self.meeting_num_id) + class Meta: + db_table = 'proceedings' + ordering = ['?'] # workaround for FK primary key + #class Admin: + # pass # admin site doesn't like something about meeting_num + +class SessionConflict(models.Model): + group_acronym = models.ForeignKey(Acronym, raw_id_admin=True, related_name='conflicts_set') + conflict_gid = models.ForeignKey(Acronym, raw_id_admin=True, related_name='conflicts_with_set', db_column='conflict_gid') + meeting_num = models.ForeignKey(Meeting, db_column='meeting_num') + def __str__(self): + return "At IETF %d, %s conflicts with %s" % ( self.meeting_num_id, self.group_acronym.acronym, self.conflict_gid.acronym) + class Meta: + db_table = 'session_conflicts' + class Admin: + pass + +class SessionName(models.Model): + session_name_id = models.AutoField(primary_key=True) + session_name = models.CharField(blank=True, maxlength=255) + def __str__(self): + return self.session_name + class Meta: + db_table = 'session_names' + class Admin: + pass + +class MeetingTime(models.Model): + time_id = models.AutoField(primary_key=True) + time_desc = models.CharField(maxlength=100) + meeting = models.ForeignKey(Meeting, db_column='meeting_num', unique=True) + day_id = models.IntegerField() + session_name = models.ForeignKey(SessionName) + def __str__(self): + return "[%d] |%s| %s" % (self.meeting_id, (self.meeting.start_date + datetime.timedelta(self.day_id)).strftime('%A'), self.time_desc) + class Meta: + db_table = 'meeting_times' + class Admin: + pass + +class MeetingRoom(models.Model): + room_id = models.AutoField(primary_key=True) + meeting = models.ForeignKey(Meeting, db_column='meeting_num') + room_name = models.CharField(maxlength=255) + def __str__(self): + return "[%d] %s" % (self.meeting_id, self.room_name) + class Meta: + db_table = 'meeting_rooms' + class Admin: + pass + +class WgMeetingSession(models.Model, ResolveAcronym): + session_id = models.AutoField(primary_key=True) + meeting = models.ForeignKey(Meeting, db_column='meeting_num') + group_acronym_id = models.IntegerField() + irtf = models.BooleanField() + num_session = models.IntegerField() + length_session1 = models.CharField(blank=True, maxlength=100) + length_session2 = models.CharField(blank=True, maxlength=100) + length_session3 = models.CharField(blank=True, maxlength=100) + conflict1 = models.CharField(blank=True, maxlength=255) + conflict2 = models.CharField(blank=True, maxlength=255) + conflict3 = models.CharField(blank=True, maxlength=255) + conflict_other = models.TextField(blank=True) + special_req = models.TextField(blank=True) + number_attendee = models.IntegerField(null=True, blank=True) + approval_ad = models.IntegerField(null=True, blank=True) + status_id = models.IntegerField(null=True, blank=True) + ts_status_id = models.IntegerField(null=True, blank=True) + requested_date = models.DateField(null=True, blank=True) + approved_date = models.DateField(null=True, blank=True) + requested_by = models.ForeignKey(PersonOrOrgInfo, raw_id_admin=True, db_column='requested_by') + scheduled_date = models.DateField(null=True, blank=True) + last_modified_date = models.DateField(null=True, blank=True) + ad_comments = models.TextField(blank=True) + sched_room_id1 = models.ForeignKey(MeetingRoom, db_column='sched_room_id1', null=True, blank=True, related_name='here1') + sched_time_id1 = models.ForeignKey(MeetingTime, db_column='sched_time_id1', null=True, blank=True, related_name='now1') + sched_date1 = models.DateField(null=True, blank=True) + sched_room_id2 = models.ForeignKey(MeetingRoom, db_column='sched_room_id2', null=True, blank=True, related_name='here2') + sched_time_id2 = models.ForeignKey(MeetingTime, db_column='sched_time_id2', null=True, blank=True, related_name='now2') + sched_date2 = models.DateField(null=True, blank=True) + sched_room_id3 = models.ForeignKey(MeetingRoom, db_column='sched_room_id3', null=True, blank=True, related_name='here3') + sched_time_id3 = models.ForeignKey(MeetingTime, db_column='sched_time_id3', null=True, blank=True, related_name='now3') + sched_date3 = models.DateField(null=True, blank=True) + special_agenda_note = models.CharField(blank=True, maxlength=255) + combined_room_id1 = models.ForeignKey(MeetingRoom, db_column='combined_room_id1', null=True, blank=True, related_name='here4') + combined_time_id1 = models.ForeignKey(MeetingTime, db_column='combined_time_id1', null=True, blank=True, related_name='now4') + combined_room_id2 = models.ForeignKey(MeetingRoom, db_column='combined_room_id2', null=True, blank=True, related_name='here5') + combined_time_id2 = models.ForeignKey(MeetingTime, db_column='combined_time_id2', null=True, blank=True, related_name='now5') + def __str__(self): + return "%s at %s" % (self.acronym(), self.meeting) + class Meta: + db_table = 'wg_meeting_sessions' + class Admin: + pass + +class WgAgenda(models.Model, ResolveAcronym): + meeting = models.ForeignKey(Meeting, db_column='meeting_num') + group_acronym_id = models.IntegerField() + filename = models.CharField(maxlength=255) + irtf = models.BooleanField() + interim = models.BooleanField() + def __str__(self): + return "Agenda for %s at IETF %d" % (self.acronym(), self.meeting_id) + class Meta: + db_table = 'wg_agenda' + class Admin: + pass + +class Minute(models.Model, ResolveAcronym): + meeting = models.ForeignKey(Meeting, db_column='meeting_num') + group_acronym = models.ForeignKey(Acronym, raw_id_admin=True) + filename = models.CharField(blank=True, maxlength=255) + irtf = models.BooleanField() + interim = models.BooleanField() + def __str__(self): + return "Minutes for %s at IETF %d" % (self.acronym(), self.meeting_id) + class Meta: + db_table = 'minutes' + class Admin: + pass + +# It looks like Switches was meant for something bigger, but +# is only used for the agenda generation right now so we'll +# put it here. +class Switches(models.Model): + name = models.CharField(maxlength=100) + val = models.IntegerField(null=True, blank=True) + updated_date = models.DateField(null=True, blank=True) + updated_time = models.TimeField(null=True, blank=True) + def __str__(self): + return self.name + class Meta: + db_table = 'switches' + class Admin: + pass + +# Empty table, don't pretend that it exists. +#class SlideTypes(models.Model): +# type_id = models.AutoField(primary_key=True) +# type = models.CharField(maxlength=255, db_column='type_name') +# def __str__(self): +# return self.type +# class Meta: +# db_table = 'slide_types' +# class Admin: +# pass + +class Slide(models.Model, ResolveAcronym): + SLIDE_TYPE_CHOICES=( + ('1', '(converted) HTML'), + ('2', 'PDF'), + ('3', 'Text'), + ('4', 'PowerPoint'), + ('5', 'Microsoft Word'), + ) + meeting = models.ForeignKey(Meeting, db_column='meeting_num') + group_acronym_id = models.IntegerField(null=True, blank=True) + slide_num = models.IntegerField(null=True, blank=True) + slide_type_id = models.IntegerField(choices=SLIDE_TYPE_CHOICES) + slide_name = models.CharField(blank=True, maxlength=255) + irtf = models.BooleanField() + interim = models.BooleanField() + order_num = models.IntegerField(null=True, blank=True) + in_q = models.IntegerField(null=True, blank=True) + def __str__(self): + return "IETF%d: %s slides (%s)" % (self.meeting_id, self.acronym(), self.slide_name) + class Meta: + db_table = 'slides' + class Admin: + pass diff --git a/ietf/proceedings/views.py b/ietf/proceedings/views.py new file mode 100644 index 000000000..60f00ef0e --- /dev/null +++ b/ietf/proceedings/views.py @@ -0,0 +1 @@ +# Create your views here. diff --git a/ietf/redirects/.gitignore b/ietf/redirects/.gitignore new file mode 100644 index 000000000..c7013ced9 --- /dev/null +++ b/ietf/redirects/.gitignore @@ -0,0 +1,2 @@ +/*.pyc +/settings_local.py diff --git a/ietf/redirects/__init__.py b/ietf/redirects/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/ietf/redirects/fixtures/.gitignore b/ietf/redirects/fixtures/.gitignore new file mode 100644 index 000000000..c7013ced9 --- /dev/null +++ b/ietf/redirects/fixtures/.gitignore @@ -0,0 +1,2 @@ +/*.pyc +/settings_local.py diff --git a/ietf/redirects/fixtures/initial_data.xml b/ietf/redirects/fixtures/initial_data.xml new file mode 100644 index 000000000..b667ccfc2 --- /dev/null +++ b/ietf/redirects/fixtures/initial_data.xml @@ -0,0 +1,71 @@ + + + + public/liaisons.cgi + /liaisons + + + + + public/liaison_detail.cgi + /liaisons + %(detail_id)s/ + + + + public/liaison_managers_list.cgi + /liaisons/managers + + + + + public/liaison_guide_to_ietf.cgi + /liaisons/help/to_ietf + + + + + public/liaison_guide_from_ietf.cgi + /liaisons/help/from_ietf + + + + + public/liaison_field_help.cgi + /liaisons/help/field_help + + + + + public/idindex.cgi + /idindex + %(id)s/%(command)s + id_detail + + + show_ind_id + inddocs + 7 + 2 + + + show_wg + wglist + 7 + 2 + + + show_list + showdocs + 7 + 3 + + + %(fl)s + + + + %(cat)s/%(sort)s + + + diff --git a/ietf/redirects/models.py b/ietf/redirects/models.py new file mode 100644 index 000000000..ed701c5c6 --- /dev/null +++ b/ietf/redirects/models.py @@ -0,0 +1,50 @@ +from django.db import models + +class Redirect(models.Model): + """Mapping of CGI script to url. The "rest" is a + sprintf-style string with %(param)s entries to insert + parameters from the request, and is appended to the + url. An exception in formatting "rest" results in + just the bare url being used. "remove" is removed + from the end of the resulting url before redirecting, + in case some values of "rest" add too much. + + If there is a "command" parameter, a matching row is + searched for in the Command table to see if there + is a different value of rest= and remove=. + """ + cgi = models.CharField(maxlength=50, unique=True) + url = models.CharField(maxlength=255) + rest = models.CharField(maxlength=100, blank=True) + remove = models.CharField(maxlength=50, blank=True) + def __str__(self): + return "%s -> %s/%s" % (self.cgi, self.url, self.rest) + class Admin: + pass + +class Suffix(models.Model): + """This is a "rest" and "remove" (see Redirect class) + for requests with command=. + """ + rest = models.CharField(maxlength=100, blank=True) + remove = models.CharField(maxlength=50, blank=True) + def __str__(self): + return "-> %s - %s" % (self.rest, self.remove) + class Admin: + pass + +class Command(models.Model): + """When a request comes in with a command= argument, + the command is looked up in this table to see if there + are more specific "rest" and "remove" arguments to + use than those specified in the Redirect class that + matched. The optional "url" is prepended to the "rest". + """ + command = models.CharField(maxlength=50, core=True) + url = models.CharField(maxlength=50, blank=True) + script = models.ForeignKey(Redirect, edit_inline=models.TABULAR, related_name='commands') + suffix = models.ForeignKey(Suffix) + def __str__(self): + return "%s?command=%s %s" % (self.script.cgi, self.command, self.suffix) + class Admin: + pass diff --git a/ietf/redirects/urls.py b/ietf/redirects/urls.py new file mode 100644 index 000000000..60306b3c3 --- /dev/null +++ b/ietf/redirects/urls.py @@ -0,0 +1,5 @@ +from django.conf.urls.defaults import * + +urlpatterns = patterns('', + (r'^(?P