Reorganise the file structure into a project tree

This commit is contained in:
2011-03-11 12:58:50 +00:00
parent 58b1691638
commit 3686aa7523
226 changed files with 7 additions and 5 deletions

0
app/groups/__init__.py Normal file
View File

26
app/groups/admin.py Normal file
View File

@@ -0,0 +1,26 @@
from django.contrib import admin
from django.contrib.auth.models import Group
from django.contrib.auth.admin import GroupAdmin
from groups.models import GroupInformation, GroupRequest
class GroupRequestAdmin(admin.ModelAdmin):
pass
admin.site.register(GroupRequest, GroupRequestAdmin)
class SSOGroupInformationInline(admin.StackedInline):
model = GroupInformation
fk_name = 'group'
max_num = 1
readonly_fields = ('admins',)
# Define a new UserAdmin class
class SSOGroupAdmin(GroupAdmin):
inlines = [SSOGroupInformationInline, ]
# Re-register UserAdmin
admin.site.unregister(Group)
admin.site.register(Group, SSOGroupAdmin)

21
app/groups/app_defines.py Normal file
View File

@@ -0,0 +1,21 @@
# Group Types
GROUP_TYPE_BUILTIN = 0
GROUP_TYPE_MANAGED = 1
GROUP_TYPE_PERMISSION = 2
GROUP_TYPE_CHOICES = (
(GROUP_TYPE_BUILTIN, 'Built-In'),
(GROUP_TYPE_PERMISSION, 'Permission'),
(GROUP_TYPE_MANAGED, 'Managed'),
)
# Request Status Codes
REQUEST_PENDING = 0
REQUEST_ACCEPTED = 1
REQUEST_REJECTED = 2
REQUEST_STATUS_CHOICES = (
(REQUEST_PENDING, 'Pending'),
(REQUEST_ACCEPTED, 'Accepted'),
(REQUEST_REJECTED, 'Rejected'),
)

10
app/groups/forms.py Normal file
View File

@@ -0,0 +1,10 @@
from django import forms
from groups.models import GroupRequest
from groups.app_defines import *
class GroupRequestForm(forms.ModelForm):
class Meta:
model = GroupRequest
exclude = ('group', 'user', 'status', 'changed_by', 'changed_date', 'created_date')

View File

@@ -0,0 +1,116 @@
# encoding: utf-8
import datetime
from south.db import db
from south.v2 import SchemaMigration
from django.db import models
class Migration(SchemaMigration):
def forwards(self, orm):
# Adding model 'GroupInformation'
db.create_table('groups_groupinformation', (
('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
('group', self.gf('django.db.models.fields.related.OneToOneField')(to=orm['auth.Group'], unique=True)),
('type', self.gf('django.db.models.fields.IntegerField')()),
('public', self.gf('django.db.models.fields.BooleanField')(default=False, blank=True)),
('requestable', self.gf('django.db.models.fields.BooleanField')(default=False, blank=True)),
('description', self.gf('django.db.models.fields.TextField')()),
))
db.send_create_signal('groups', ['GroupInformation'])
# Adding M2M table for field admins on 'GroupInformation'
db.create_table('groups_groupinformation_admins', (
('id', models.AutoField(verbose_name='ID', primary_key=True, auto_created=True)),
('groupinformation', models.ForeignKey(orm['groups.groupinformation'], null=False)),
('user', models.ForeignKey(orm['auth.user'], null=False))
))
db.create_unique('groups_groupinformation_admins', ['groupinformation_id', 'user_id'])
# Adding model 'GroupRequest'
db.create_table('groups_grouprequest', (
('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
('group', self.gf('django.db.models.fields.related.ForeignKey')(related_name='requests', to=orm['auth.Group'])),
('user', self.gf('django.db.models.fields.related.ForeignKey')(related_name='grouprequests', to=orm['auth.User'])),
('reason', self.gf('django.db.models.fields.TextField')()),
('status', self.gf('django.db.models.fields.IntegerField')()),
('changed_by', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['auth.User'])),
('changed_date', self.gf('django.db.models.fields.DateTimeField')(auto_now=True, blank=True)),
('created_date', self.gf('django.db.models.fields.DateTimeField')(auto_now_add=True, blank=True)),
))
db.send_create_signal('groups', ['GroupRequest'])
def backwards(self, orm):
# Deleting model 'GroupInformation'
db.delete_table('groups_groupinformation')
# Removing M2M table for field admins on 'GroupInformation'
db.delete_table('groups_groupinformation_admins')
# Deleting model 'GroupRequest'
db.delete_table('groups_grouprequest')
models = {
'auth.group': {
'Meta': {'object_name': 'Group'},
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '80', 'unique': 'True'}),
'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'})
},
'auth.permission': {
'Meta': {'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'},
'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': {
'Meta': {'object_name': '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']", 'symmetrical': 'False', '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']", 'symmetrical': 'False', 'blank': 'True'}),
'username': ('django.db.models.fields.CharField', [], {'max_length': '30', 'unique': 'True'})
},
'contenttypes.contenttype': {
'Meta': {'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', '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'})
},
'groups.groupinformation': {
'Meta': {'object_name': 'GroupInformation'},
'admins': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.User']", 'symmetrical': 'False'}),
'description': ('django.db.models.fields.TextField', [], {}),
'group': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['auth.Group']", 'unique': 'True'}),
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'public': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}),
'requestable': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}),
'type': ('django.db.models.fields.IntegerField', [], {})
},
'groups.grouprequest': {
'Meta': {'object_name': 'GroupRequest'},
'changed_by': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"}),
'changed_date': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}),
'created_date': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
'group': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'requests'", 'to': "orm['auth.Group']"}),
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'reason': ('django.db.models.fields.TextField', [], {}),
'status': ('django.db.models.fields.IntegerField', [], {}),
'user': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'grouprequests'", 'to': "orm['auth.User']"})
}
}
complete_apps = ['groups']

View File

@@ -0,0 +1,80 @@
# encoding: utf-8
import datetime
from south.db import db
from south.v2 import DataMigration
from django.db import models
class Migration(DataMigration):
def forwards(self, orm):
for group in orm['auth.Group'].objects.all():
try:
obj = orm.GroupInformation.objects.get(group=group)
except orm.GroupInformation.DoesNotExist:
obj = orm.GroupInformation(group=group)
obj.save()
def backwards(self, orm):
orm.GroupInformation.objects.all().delete()
models = {
'auth.group': {
'Meta': {'object_name': 'Group'},
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '80', 'unique': 'True'}),
'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'})
},
'auth.permission': {
'Meta': {'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'},
'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': {
'Meta': {'object_name': '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']", 'symmetrical': 'False', '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']", 'symmetrical': 'False', 'blank': 'True'}),
'username': ('django.db.models.fields.CharField', [], {'max_length': '30', 'unique': 'True'})
},
'contenttypes.contenttype': {
'Meta': {'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', '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'})
},
'groups.groupinformation': {
'Meta': {'object_name': 'GroupInformation'},
'admins': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.User']", 'symmetrical': 'False'}),
'description': ('django.db.models.fields.TextField', [], {}),
'group': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['auth.Group']", 'unique': 'True'}),
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'public': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}),
'requestable': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}),
'type': ('django.db.models.fields.IntegerField', [], {'default': '0'})
},
'groups.grouprequest': {
'Meta': {'object_name': 'GroupRequest'},
'changed_by': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"}),
'changed_date': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}),
'created_date': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
'group': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'requests'", 'to': "orm['auth.Group']"}),
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'reason': ('django.db.models.fields.TextField', [], {}),
'status': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
'user': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'grouprequests'", 'to': "orm['auth.User']"})
}
}
complete_apps = ['groups']

View File

@@ -0,0 +1,82 @@
# encoding: utf-8
import datetime
from south.db import db
from south.v2 import SchemaMigration
from django.db import models
class Migration(SchemaMigration):
def forwards(self, orm):
# Adding field 'GroupInformation.parent'
db.add_column('groups_groupinformation', 'parent', self.gf('django.db.models.fields.related.ForeignKey')(related_name='children', null=True, to=orm['auth.Group']), keep_default=False)
def backwards(self, orm):
# Deleting field 'GroupInformation.parent'
db.delete_column('groups_groupinformation', 'parent_id')
models = {
'auth.group': {
'Meta': {'object_name': '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']", 'symmetrical': 'False', 'blank': 'True'})
},
'auth.permission': {
'Meta': {'ordering': "('content_type__app_label', 'content_type__model', 'codename')", 'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'},
'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': {
'Meta': {'object_name': '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']", 'symmetrical': 'False', 'blank': 'True'}),
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
'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']", 'symmetrical': 'False', 'blank': 'True'}),
'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'})
},
'contenttypes.contenttype': {
'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', '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'})
},
'groups.groupinformation': {
'Meta': {'ordering': "['group']", 'object_name': 'GroupInformation'},
'admins': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.User']", 'symmetrical': 'False', 'blank': 'True'}),
'description': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
'group': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['auth.Group']", 'unique': 'True'}),
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'parent': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'children'", 'null': 'True', 'to': "orm['auth.Group']"}),
'public': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
'requestable': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
'type': ('django.db.models.fields.IntegerField', [], {'default': '2'})
},
'groups.grouprequest': {
'Meta': {'ordering': "['created_date']", 'object_name': 'GroupRequest'},
'changed_by': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"}),
'changed_date': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}),
'created_date': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
'group': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'requests'", 'to': "orm['auth.Group']"}),
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'reason': ('django.db.models.fields.TextField', [], {}),
'status': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
'user': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'grouprequests'", 'to': "orm['auth.User']"})
}
}
complete_apps = ['groups']

View File

55
app/groups/models.py Normal file
View File

@@ -0,0 +1,55 @@
from django.db import models
from django.db.models import signals
from django.contrib.auth.models import Group, User
from groups.app_defines import *
class GroupInformation(models.Model):
""" Extended group information """
group = models.OneToOneField(Group)
type = models.IntegerField("Group Type", choices=GROUP_TYPE_CHOICES, default=GROUP_TYPE_PERMISSION)
admins = models.ManyToManyField(User, blank=True)
public = models.BooleanField("Public", default=False, help_text="Indicates if the group is visible to all")
requestable = models.BooleanField("Requestable", default=False, help_text="Indicates if people can request to join this group")
parent = models.ForeignKey(Group, related_name="children", null=True, blank=True)
description = models.TextField(help_text="Description of the group and its permissions", blank=True)
def save(self, *args, **kwargs):
if self.group and (self.group.eveplayercorporation_set.count() or self.group.eveplayeralliance_set.count()):
self.type = GROUP_TYPE_MANAGED
models.Model.save(self, *args, **kwargs)
@staticmethod
def create_group(sender, instance, created, **kwargs):
if created:
profile, created = GroupInformation.objects.get_or_create(group=instance)
class Meta:
verbose_name = 'Group Information'
verbose_name_plural = 'Group Information'
ordering = ['group']
signals.post_save.connect(GroupInformation.create_group, sender=Group)
class GroupRequest(models.Model):
""" Join requests for a group """
group = models.ForeignKey(Group, null=False, related_name='requests')
user = models.ForeignKey(User, null=False, related_name='grouprequests')
reason = models.TextField("Reason")
status = models.IntegerField("Request Status", choices=REQUEST_STATUS_CHOICES, null=False, default=REQUEST_PENDING)
changed_by = models.ForeignKey(User)
changed_date = models.DateTimeField("Changed Date/Time", auto_now=True)
created_date = models.DateTimeField("Created Date/Time", auto_now_add=True)
class Meta:
verbose_name = 'Group Access Request'
verbose_name_plural = 'Group Access Requests'
ordering = ['created_date']

23
app/groups/tests.py Normal file
View File

@@ -0,0 +1,23 @@
"""
This file demonstrates two different styles of tests (one doctest and one
unittest). These will both pass when you run "manage.py test".
Replace these with more appropriate tests for your application.
"""
from django.test import TestCase
class SimpleTest(TestCase):
def test_basic_addition(self):
"""
Tests that 1 + 1 always equals 2.
"""
self.failUnlessEqual(1 + 1, 2)
__test__ = {"doctest": """
Another way to test that 1 + 1 is equal to 2.
>>> 1 + 1 == 2
True
"""}

18
app/groups/urls.py Normal file
View File

@@ -0,0 +1,18 @@
from django.conf.urls.defaults import *
from django.core.urlresolvers import reverse
from groups import views
urlpatterns = patterns('',
(r'^list/$', views.group_list),
(r'^request/(?P<groupid>\d+)/$', views.create_request),
(r'^kick/(?P<groupid>\d+)/(?P<userid>\d+)/$', views.kick_member),
(r'^promote/(?P<groupid>\d+)/(?P<userid>\d+)/$', views.promote_member),
(r'^admin/(?P<groupid>\d+)/$', views.admin_group),
(r'^accept/(?P<requestid>\d+)/$', views.accept_request),
(r'^reject/(?P<requestid>\d+)/$', views.reject_request),
)
urlpatterns += patterns('django.views.generic.simple',
('^$', 'redirect_to', {'url': reverse('groups.views.group_list')}),
)

180
app/groups/views.py Normal file
View File

@@ -0,0 +1,180 @@
from django.db.models import Q
from django.http import HttpResponseRedirect
from django.shortcuts import render_to_response, get_object_or_404
from django.template import RequestContext
from django.core.urlresolvers import reverse
from django.contrib import messages
from django.contrib.auth.models import Group, User
from django.contrib.auth.decorators import login_required
from groups.models import GroupInformation, GroupRequest
from groups.app_defines import *
from groups.forms import GroupRequestForm
from sso.tasks import update_user_access
@login_required
def group_list(request):
""" View all groups, for users only public ones """
if request.user.is_superuser:
groups = Group.objects.select_related('groupinformation').all()
else:
groups = Group.objects.select_related('groupinformation').filter(Q(groupinformation__type=GROUP_TYPE_PERMISSION) |
Q(groupinformation__public=True) |
Q(groupinformation__admins__in=[request.user]) |
Q(user__in=[request.user]))
# Process the query into a list of tuples including status
group_list = []
for group in set(groups):
if not group.groupinformation:
g, c = GroupInformation.objects.get_or_create(group=group)
if group.groupinformation and request.user in group.groupinformation.admins.all():
status = "Admin"
elif request.user in group.user_set.all():
status = "Member"
else:
status = None
requestable = False
if group.groupinformation and group.groupinformation.requestable and not group.groupinformation.type == GROUP_TYPE_MANAGED:
if not group.groupinformation.parent or group.groupinformation.parent in request.user.groups.all():
requestable = True
fixed = not group.groupinformation.type == GROUP_TYPE_PERMISSION
pending = group.requests.filter(status=REQUEST_PENDING,user=request.user).count()
group_list.append((group.id, group.name, group.groupinformation.description, status, requestable, fixed, pending))
group_list = sorted(group_list, key=lambda name: name[1].lower())
return render_to_response('groups/group_list.html', locals(), context_instance=RequestContext(request))
@login_required
def create_request(request, groupid):
group = get_object_or_404(Group, id=groupid)
if not group.groupinformation.requestable and not request.user in group.user_set.all():
return HttpResponseRedirect(reverse('groups.views.group_list'))
if group.requests.filter(status=REQUEST_PENDING,user=request.user).count():
messages.add_message(request, messages.INFO, "You already have a pending request for %s" % group.name)
return HttpResponseRedirect(reverse('groups.views.group_list'))
if request.method == 'POST':
form = GroupRequestForm(request.POST)
if form.is_valid():
obj = form.save(commit=False)
obj.user = request.user
obj.group = group
obj.changed_by = request.user
obj.save()
messages.add_message(request, messages.INFO, "You membership request has been created.")
return HttpResponseRedirect(reverse('groups.views.group_list')) # Redirect after POST
else:
form = GroupRequestForm() # An unbound form
return render_to_response('groups/create_request.html', locals(), context_instance=RequestContext(request))
@login_required
def accept_request(request, requestid):
requestobj = get_object_or_404(GroupRequest, id=requestid)
if request.user in requestobj.group.groupinformation.admins.all() or request.user.is_superuser:
requestobj.status = REQUEST_ACCEPTED
requestobj.user.groups.add(requestobj.group)
requestobj.changed_by = request.user
requestobj.save()
update_user_access.delay(requestobj.user.id)
messages.add_message(request, messages.INFO, "%s has been accepted into %s" % (requestobj.user, requestobj.group))
return HttpResponseRedirect(reverse('groups.views.admin_group', args=[requestobj.group.id]))
@login_required
def reject_request(request, requestid):
requestobj = get_object_or_404(GroupRequest, id=requestid)
if request.user in requestobj.group.groupinformation.admins.all() or request.user.is_superuser:
requestobj.status = REQUEST_REJECTED
requestobj.changed_by = request.user
requestobj.save()
messages.add_message(request, messages.INFO, "%s has been rejected for %s" % (requestobj.user, requestobj.group))
return HttpResponseRedirect(reverse('groups.views.admin_group', args=[requestobj.group.id]))
@login_required
def admin_group(request, groupid):
group = get_object_or_404(Group, id=groupid)
if group.groupinformation and request.user in group.groupinformation.admins.all() or request.user.is_superuser:
member_list = []
for member in set(group.user_set.all()):
if group.groupinformation and member in group.groupinformation.admins.all():
status = "Admin"
else:
status = "Member"
chars = []
for acc in member.eveaccount_set.all():
chars.extend(acc.characters.all().values_list('name', flat=True))
member_list.append((member, ', '.join(chars), status))
requests = group.requests.filter(status=REQUEST_PENDING)
return render_to_response('groups/group_admin.html', locals(), context_instance=RequestContext(request))
return HttpResponseRedirect(reverse('groups.views.group_list'))
@login_required
def promote_member(request, groupid, userid):
if request.user.is_superuser:
user = get_object_or_404(User, id=userid)
group = get_object_or_404(Group, id=groupid)
if not user in group.groupinformation.admins.all():
group.groupinformation.admins.add(user)
messages.add_message(request, messages.INFO, "%s is now a admin of %s" % (user.username, group.name))
else:
group.groupinformation.admins.remove(user)
messages.add_message(request, messages.INFO, "%s is no longer a admin of %s" % (user.username, group.name))
return HttpResponseRedirect(reverse('groups.views.admin_group', args=[groupid]))
@login_required
def kick_member(request, groupid, userid):
group = get_object_or_404(Group, id=groupid)
user = get_object_or_404(User, id=userid)
if user == request.user:
if user in group.groupinformation.admins.all():
group.groupinformation.admins.remove(user)
user.groups.remove(group)
update_user_access.delay(user.id)
messages.add_message(request, messages.INFO, "You have left the group %s" % group.name)
elif request.user in group.groupinformation.admins.all() or request.user.is_superuser:
if not user in group.groupinformation.admins.all():
user.groups.remove(group)
update_user_access.delay(user.id)
messages.add_message(request, messages.INFO, "%s has been removed from %s." % (user.username, group.name))
else:
messages.add_message(request, messages.INFO, "%s is a admin of %s and cannot be removed." % (user.username, group.name))
return HttpResponseRedirect(reverse('groups.views.admin_group', args=[groupid]))
return HttpResponseRedirect(reverse('groups.views.group_list'))