parent
05929b2272
commit
3ae03b7899
0
ietf/community/__init__.py
Normal file
0
ietf/community/__init__.py
Normal file
257
ietf/community/migrations/0001_initial_migration.py
Normal file
257
ietf/community/migrations/0001_initial_migration.py
Normal 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']
|
0
ietf/community/migrations/__init__.py
Normal file
0
ietf/community/migrations/__init__.py
Normal file
65
ietf/community/models.py
Normal file
65
ietf/community/models.py
Normal 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
66
ietf/community/rules.py
Normal 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__()]
|
0
ietf/community/templatetags/__init__.py
Normal file
0
ietf/community/templatetags/__init__.py
Normal file
46
ietf/community/templatetags/community_tags.py
Normal file
46
ietf/community/templatetags/community_tags.py
Normal 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
7
ietf/community/urls.py
Normal 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
37
ietf/community/views.py
Normal 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)
|
|
@ -139,6 +139,7 @@ INSTALLED_APPS = (
|
|||
'ietf.redirects',
|
||||
'ietf.idrfc',
|
||||
'ietf.wginfo',
|
||||
'ietf.community',
|
||||
)
|
||||
|
||||
INTERNAL_IPS = (
|
||||
|
|
|
@ -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 & 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>
|
||||
|
|
20
ietf/templates/community/manage_clist.html
Normal file
20
ietf/templates/community/manage_clist.html
Normal 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 %}
|
|
@ -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)),
|
||||
|
|
Loading…
Reference in a new issue