Added new community app. See #701

- Legacy-Id: 3319
This commit is contained in:
Emilio A. Sánchez López 2011-08-16 08:12:27 +00:00
parent 05929b2272
commit 3ae03b7899
13 changed files with 510 additions and 1 deletions

View file

View file

@ -0,0 +1,257 @@
from south.db import db
from django.db import models
from ietf.community.models import *
class Migration:
def forwards(self, orm):
# Adding model 'Rule'
db.create_table('community_rule', (
('id', orm['community.Rule:id']),
('community_list', orm['community.Rule:community_list']),
('rule_type', orm['community.Rule:rule_type']),
('value', orm['community.Rule:value']),
('last_updated', orm['community.Rule:last_updated']),
))
db.send_create_signal('community', ['Rule'])
# Adding model 'CommunityList'
db.create_table('community_communitylist', (
('id', orm['community.CommunityList:id']),
('user', orm['community.CommunityList:user']),
('group', orm['community.CommunityList:group']),
))
db.send_create_signal('community', ['CommunityList'])
# Adding ManyToManyField 'Rule.cached_ids'
db.create_table('community_rule_cached_ids', (
('id', models.AutoField(verbose_name='ID', primary_key=True, auto_created=True)),
('rule', models.ForeignKey(orm.Rule, null=False)),
('document', models.ForeignKey(orm['doc.Document'], null=False))
))
# Adding ManyToManyField 'CommunityList.added_ids'
db.create_table('community_communitylist_added_ids', (
('id', models.AutoField(verbose_name='ID', primary_key=True, auto_created=True)),
('communitylist', models.ForeignKey(orm.CommunityList, null=False)),
('document', models.ForeignKey(orm['doc.Document'], null=False))
))
def backwards(self, orm):
# Deleting model 'Rule'
db.delete_table('community_rule')
# Deleting model 'CommunityList'
db.delete_table('community_communitylist')
# Dropping ManyToManyField 'Rule.cached_ids'
db.delete_table('community_rule_cached_ids')
# Dropping ManyToManyField 'CommunityList.added_ids'
db.delete_table('community_communitylist_added_ids')
models = {
'auth.group': {
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}),
'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'blank': 'True'})
},
'auth.permission': {
'Meta': {'unique_together': "(('content_type', 'codename'),)"},
'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}),
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})
},
'auth.user': {
'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}),
'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Group']", 'blank': 'True'}),
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True', 'blank': 'True'}),
'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}),
'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}),
'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'blank': 'True'}),
'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'})
},
'community.communitylist': {
'added_ids': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['doc.Document']"}),
'group': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['group.Group']", 'null': 'True', 'blank': 'True'}),
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'null': 'True', 'blank': 'True'})
},
'community.rule': {
'cached_ids': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['doc.Document']"}),
'community_list': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['community.CommunityList']"}),
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'last_updated': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}),
'rule_type': ('django.db.models.fields.CharField', [], {'max_length': '30'}),
'value': ('django.db.models.fields.CharField', [], {'max_length': '255'})
},
'contenttypes.contenttype': {
'Meta': {'unique_together': "(('app_label', 'model'),)", 'db_table': "'django_content_type'"},
'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})
},
'doc.docalias': {
'document': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['doc.Document']"}),
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '255', 'db_index': 'True'})
},
'doc.document': {
'abstract': ('django.db.models.fields.TextField', [], {}),
'ad': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'ad_document_set'", 'null': 'True', 'to': "orm['person.Person']"}),
'authors': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['person.Email']", 'blank': 'True'}),
'external_url': ('django.db.models.fields.URLField', [], {'max_length': '200', 'blank': 'True'}),
'group': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['group.Group']", 'null': 'True', 'blank': 'True'}),
'iana_state': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['name.IanaDocStateName']", 'null': 'True', 'blank': 'True'}),
'iesg_state': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['name.IesgDocStateName']", 'null': 'True', 'blank': 'True'}),
'intended_std_level': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['name.IntendedStdLevelName']", 'null': 'True', 'blank': 'True'}),
'internal_comments': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '255', 'primary_key': 'True'}),
'note': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
'notify': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}),
'pages': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
'related': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['doc.DocAlias']", 'blank': 'True'}),
'rev': ('django.db.models.fields.CharField', [], {'max_length': '16', 'blank': 'True'}),
'rfc_state': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['name.RfcDocStateName']", 'null': 'True', 'blank': 'True'}),
'shepherd': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'shepherd_document_set'", 'null': 'True', 'to': "orm['person.Person']"}),
'state': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['name.DocStateName']", 'null': 'True', 'blank': 'True'}),
'std_level': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['name.StdLevelName']", 'null': 'True', 'blank': 'True'}),
'stream': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['name.DocStreamName']", 'null': 'True', 'blank': 'True'}),
'tags': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['name.DocInfoTagName']", 'null': 'True', 'blank': 'True'}),
'time': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
'title': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
'type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['name.DocTypeName']", 'null': 'True', 'blank': 'True'}),
'wg_state': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['name.WgDocStateName']", 'null': 'True', 'blank': 'True'})
},
'group.group': {
'acronym': ('django.db.models.fields.CharField', [], {'max_length': '16', 'db_index': 'True'}),
'ad': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['person.Person']", 'null': 'True', 'blank': 'True'}),
'charter': ('django.db.models.fields.related.OneToOneField', [], {'blank': 'True', 'related_name': "'chartered_group'", 'unique': 'True', 'null': 'True', 'to': "orm['doc.Document']"}),
'comments': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'list_archive': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}),
'list_email': ('django.db.models.fields.CharField', [], {'max_length': '64', 'blank': 'True'}),
'list_subscribe': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '80'}),
'parent': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['group.Group']", 'null': 'True', 'blank': 'True'}),
'state': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['name.GroupStateName']", 'null': 'True'}),
'time': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
'type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['name.GroupTypeName']", 'null': 'True'})
},
'name.docinfotagname': {
'desc': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '32'}),
'order': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
'slug': ('django.db.models.fields.CharField', [], {'max_length': '8', 'primary_key': 'True'}),
'used': ('django.db.models.fields.BooleanField', [], {'default': 'True', 'blank': 'True'})
},
'name.docstatename': {
'desc': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '32'}),
'order': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
'slug': ('django.db.models.fields.CharField', [], {'max_length': '8', 'primary_key': 'True'}),
'used': ('django.db.models.fields.BooleanField', [], {'default': 'True', 'blank': 'True'})
},
'name.docstreamname': {
'desc': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '32'}),
'order': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
'slug': ('django.db.models.fields.CharField', [], {'max_length': '8', 'primary_key': 'True'}),
'used': ('django.db.models.fields.BooleanField', [], {'default': 'True', 'blank': 'True'})
},
'name.doctypename': {
'desc': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '32'}),
'order': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
'slug': ('django.db.models.fields.CharField', [], {'max_length': '8', 'primary_key': 'True'}),
'used': ('django.db.models.fields.BooleanField', [], {'default': 'True', 'blank': 'True'})
},
'name.groupstatename': {
'desc': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '32'}),
'order': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
'slug': ('django.db.models.fields.CharField', [], {'max_length': '8', 'primary_key': 'True'}),
'used': ('django.db.models.fields.BooleanField', [], {'default': 'True', 'blank': 'True'})
},
'name.grouptypename': {
'desc': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '32'}),
'order': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
'slug': ('django.db.models.fields.CharField', [], {'max_length': '8', 'primary_key': 'True'}),
'used': ('django.db.models.fields.BooleanField', [], {'default': 'True', 'blank': 'True'})
},
'name.ianadocstatename': {
'desc': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '32'}),
'order': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
'slug': ('django.db.models.fields.CharField', [], {'max_length': '8', 'primary_key': 'True'}),
'used': ('django.db.models.fields.BooleanField', [], {'default': 'True', 'blank': 'True'})
},
'name.iesgdocstatename': {
'desc': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '32'}),
'order': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
'slug': ('django.db.models.fields.CharField', [], {'max_length': '8', 'primary_key': 'True'}),
'used': ('django.db.models.fields.BooleanField', [], {'default': 'True', 'blank': 'True'})
},
'name.intendedstdlevelname': {
'desc': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '32'}),
'order': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
'slug': ('django.db.models.fields.CharField', [], {'max_length': '8', 'primary_key': 'True'}),
'used': ('django.db.models.fields.BooleanField', [], {'default': 'True', 'blank': 'True'})
},
'name.rfcdocstatename': {
'desc': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '32'}),
'order': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
'slug': ('django.db.models.fields.CharField', [], {'max_length': '8', 'primary_key': 'True'}),
'used': ('django.db.models.fields.BooleanField', [], {'default': 'True', 'blank': 'True'})
},
'name.stdlevelname': {
'desc': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '32'}),
'order': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
'slug': ('django.db.models.fields.CharField', [], {'max_length': '8', 'primary_key': 'True'}),
'used': ('django.db.models.fields.BooleanField', [], {'default': 'True', 'blank': 'True'})
},
'name.wgdocstatename': {
'desc': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '32'}),
'order': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
'slug': ('django.db.models.fields.CharField', [], {'max_length': '8', 'primary_key': 'True'}),
'used': ('django.db.models.fields.BooleanField', [], {'default': 'True', 'blank': 'True'})
},
'person.email': {
'active': ('django.db.models.fields.BooleanField', [], {'default': 'True', 'blank': 'True'}),
'address': ('django.db.models.fields.CharField', [], {'max_length': '64', 'primary_key': 'True'}),
'person': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['person.Person']", 'null': 'True'}),
'time': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'})
},
'person.person': {
'address': ('django.db.models.fields.TextField', [], {'max_length': '255', 'blank': 'True'}),
'ascii': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
'ascii_short': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True', 'blank': 'True'}),
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '255', 'db_index': 'True'}),
'time': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
'user': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['auth.User']", 'unique': 'True', 'null': 'True', 'blank': 'True'})
}
}
complete_apps = ['community']

View file

65
ietf/community/models.py Normal file
View file

@ -0,0 +1,65 @@
from django.contrib.auth.models import User
from django.core.urlresolvers import reverse
from django.db import models
from redesign.doc.models import Document
from redesign.group.models import Group
from ietf.community.rules import TYPES_OF_RULES
class CommunityList(models.Model):
user = models.ForeignKey(User, blank=True, null=True)
group = models.ForeignKey(Group, blank=True, null=True)
added_ids = models.ManyToManyField(Document)
def check_manager(self, user):
if user == self.user:
return True
if not self.group or self.group.type.slug not in ('area', 'wg'):
return False
try:
person = user.get_profile()
except:
return False
if self.group.type.slug == 'area':
return bool(Role.objects.filter(name__slug='ad', email__in=person.email_set.all()).count(), group=self.group)
elif self.group.type.slug == 'wg':
return bool(Role.objects.filter(name__slug='chair', email__in=person.email_set.all()).count(), group=self.group)
return False
def short_name(self):
if self.user:
return 'Personal list'
else:
return '%s list' % self.group.acronym
def long_name(self):
if self.user:
return 'Personal ID list of %s' % self.user.username
else:
return 'ID list for %s' % self.group.name
def __unicode__(self):
return self.long_name()
def get_manage_url(self):
if self.user:
return reverse('manage_personal_list', None, args=(self.user.username, ))
else:
return reverse('manage_group_list', None, args=(self.group.acronym, ))
class Rule(models.Model):
community_list = models.ForeignKey(CommunityList)
cached_ids = models.ManyToManyField(Document)
rule_type = models.CharField(
max_length=30,
choices=TYPES_OF_RULES)
value = models.CharField(
max_length=255)
last_updated = models.DateTimeField(
auto_now=True)

66
ietf/community/rules.py Normal file
View file

@ -0,0 +1,66 @@
class RuleManager(object):
codename = ''
description = ''
def __init__(self, value):
self.value = self.get_value(value)
def get_value(self, value):
return value
def get_documents(self):
return []
class WgAsociatedRule(RuleManager):
codename = 'wg_asociated'
description = 'All I-Ds associated with an particular WG'
class AreaAsociatedRule(RuleManager):
codename = 'area_asociated'
description = 'All I-Ds associated with all WGs in an particular Area'
class AdResponsibleRule(RuleManager):
codename = 'ad_responsible'
description = 'All I-Ds with a particular responsible AD'
class AuthorRule(RuleManager):
codename = 'author'
description = 'All I-Ds with a particular author'
class ShepherdRule(RuleManager):
codename = 'shepherd'
description = 'All I-Ds with a particular document shepherd'
class ReferenceToRFCRule(RuleManager):
codename = 'reference_to_rfc'
description = 'All I-Ds that have a reference to a particular RFC'
class ReferenceToIDRule(RuleManager):
codename = 'reference_to_id'
description = 'All I-Ds that have a reference to a particular I-D'
class ReferenceFromRFCRule(RuleManager):
codename = 'reference_from_rfc'
description = 'All I-Ds that are referenced by a particular RFC'
class ReferenceFromIDRule(RuleManager):
codename = 'reference_from_id'
description = 'All I-Ds that are referenced by a particular I-D'
class WithTextRule(RuleManager):
codename = 'with_text'
description = 'All I-Ds that contain a particular text string'
TYPES_OF_RULES = [(i.codename, i.description) for i in RuleManager.__subclasses__()]

View file

View file

@ -0,0 +1,46 @@
from django import template
from ietf.community.models import CommunityList
from redesign.group.models import Role
register = template.Library()
class CommunityListNode(template.Node):
def __init__(self, user, var_name):
self.user = user
self.var_name = var_name
def render(self, context):
user = self.user.resolve(context)
if not user or not user.is_authenticated():
return ''
lists = {'personal': CommunityList.objects.get_or_create(user=user)[0]}
try:
person = user.get_profile()
groups = []
managed_areas = [i.group for i in Role.objects.filter(name__slug='ad', email__in=person.email_set.all())]
groups += list(CommunityList.objects.filter(group__in=managed_areas))
managed_wg = [i.group for i in Role.objects.filter(name__slug='chair', group__type__slug='wg', email__in=person.email_set.all())]
groups += list(CommunityList.objects.filter(group__in=managed_wg))
lists['group'] = groups
except:
pass
context.update({self.var_name: lists})
return ''
@register.tag
def get_user_managed_lists(parser, token):
firstbits = token.contents.split(None, 2)
if len(firstbits) != 3:
raise TemplateSyntaxError("'get_user_managed_lists' tag takes three arguments")
user = parser.compile_filter(firstbits[1])
lastbits_reversed = firstbits[2][::-1].split(None, 2)
if lastbits_reversed[1][::-1] != 'as':
raise TemplateSyntaxError("next-to-last argument to 'get_user_managed_lists' tag must"
" be 'as'")
var_name = lastbits_reversed[0][::-1]
return CommunityListNode(user, var_name)

7
ietf/community/urls.py Normal file
View file

@ -0,0 +1,7 @@
from django.conf.urls.defaults import patterns, url
urlpatterns = patterns('ietf.community.views',
url(r'^personal/(?P<username>[\w.@+-]+)/$', 'manage_personal_list', name='manage_personal_list'),
url(r'^group/(?P<acronym>[\w.@+-]+)/$', 'manage_group_list', name='manage_group_list'),
)

37
ietf/community/views.py Normal file
View file

@ -0,0 +1,37 @@
import datetime
import hashlib
from django.conf import settings
from django.contrib.auth.models import User
from django.http import HttpResponse, Http404, HttpResponseForbidden
from django.shortcuts import get_object_or_404, render_to_response
from django.template import RequestContext
from django.utils import simplejson
from django.utils.translation import ugettext as _
from ietf.community.models import CommunityList
from redesign.group.models import Group
def _manage_list(request, clist):
return render_to_response('community/manage_clist.html',
{'cl': clist},
context_instance=RequestContext(request))
def manage_personal_list(request, username):
user = get_object_or_404(User, username=username)
clist = CommunityList.objects.get_or_create(user=request.user)[0]
if not clist.check_manager(request.user):
return HttpResponseForbidden('You have no permission to access this view')
return _manage_list(request, clist)
def manage_group_list(request, acronym):
group = get_object_or_404(Group, acronym=acronym)
if group.type.slug not in ('area', 'wg'):
raise Http404
clist = CommunityList.objects.get_or_create(group=group)[0]
if not clist.check_manager(request.user):
return HttpResponseForbidden('You have no permission to access this view')
return _manage_list(request, clist)

View file

@ -139,6 +139,7 @@ INSTALLED_APPS = (
'ietf.redirects',
'ietf.idrfc',
'ietf.wginfo',
'ietf.community',
)
INTERNAL_IPS = (

View file

@ -33,7 +33,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
{% endcomment %}
{% load wg_menu %}
{% load ietf_filters %}
{% load ietf_filters community_tags %}
<ul>
{% if user|in_group:"Area_Director" %}
<li class="sect first">AD Dashboard</li>
@ -61,6 +61,15 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
<li><a href="http://tools.ietf.org/wg/concluded">Concluded WGs</a></li>
<li><a href="http://www.ietf.org/list/nonwg.html">Non-WG Lists</a></li>
{% get_user_managed_lists user as community_lists %}
{% if community_lists %}
<li class="sect">Community ID lists</li>
<li><a href="{{ community_lists.personal.get_manage_url }}">{{ community_lists.personal.short_name }}</a>
{% for cl in community_lists.group %}
<li><a href="{{ cl.get_manage_url }}">{{ cl.short_name }}</a>
{% endfor %}
{% endif %}
<li class="sect">Drafts&nbsp;&amp;&nbsp;RFCs</li>
<li><a href="/doc/">Search</a></li>
<li><form action="/doc/search/" method="post" style="padding-bottom:0;margin-bottom:0;"><input type="text" style="margin-left:10px; width:100px; border:1px solid #89d;" name="name" /><input type="hidden" name="activeDrafts" value="on"/><input type="hidden" name="rfcs" value="on"/></form></li>

View file

@ -0,0 +1,20 @@
{% extends "base.html" %}
{% block title %}{{ cl.long_name }}{% endblock %}
{% block content %}
<h1>{{ cl.long_name }}</h1>
<p>Feel free to share the following links if you need it.</p>
<ul>
<li><a href="">Read only view for {{ cl.long_name }}</a></li>
<li><a href="">Feed for {{ cl.long_name }}</a></li>
</ul>
<h2>Rules added to this list</h2>
<h2>Documents added to this list</h2>
{% for doc in cl.added_ids.all %}
{{ doc }}
{% endfor %}
{% endblock %}

View file

@ -59,6 +59,7 @@ urlpatterns = patterns('',
(r'^doc/', include('ietf.idrfc.urls')),
(r'^wg/', include('ietf.wginfo.urls')),
(r'^registration/', include('ietf.registration.urls')),
(r'^community/', include('ietf.community.urls')),
(r'^$', 'ietf.idrfc.views.main'),
('^admin/', include(admin.site.urls)),