summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sbhs/admin.py3
-rw-r--r--sbhs/management/__init__.py0
-rw-r--r--sbhs/management/commands/__init__.py0
-rw-r--r--sbhs/management/commands/create_moderator.py44
-rw-r--r--sbhs/models.py67
5 files changed, 100 insertions, 14 deletions
diff --git a/sbhs/admin.py b/sbhs/admin.py
index b13f52c..43c0f60 100644
--- a/sbhs/admin.py
+++ b/sbhs/admin.py
@@ -1,8 +1,7 @@
from django.contrib import admin
-from sbhs.models import (Board, Profile, Slot, Booking, Experiment)
+from sbhs.models import (Board, Slot, Experiment, Profile)
admin.site.register(Board)
admin.site.register(Profile)
admin.site.register(Slot)
-admin.site.register(Booking)
admin.site.register(Experiment) \ No newline at end of file
diff --git a/sbhs/management/__init__.py b/sbhs/management/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/sbhs/management/__init__.py
diff --git a/sbhs/management/commands/__init__.py b/sbhs/management/commands/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/sbhs/management/commands/__init__.py
diff --git a/sbhs/management/commands/create_moderator.py b/sbhs/management/commands/create_moderator.py
new file mode 100644
index 0000000..2b4fc57
--- /dev/null
+++ b/sbhs/management/commands/create_moderator.py
@@ -0,0 +1,44 @@
+'''
+ This command creates a moderator group and adds users to the moderator group
+ with permissions to add, change and delete
+ the objects in the exam app.
+'''
+
+# django imports
+from django.core.management.base import BaseCommand, CommandError
+from django.contrib.auth.models import User, Group, Permission
+
+# local imports
+from sbhs.models import create_group
+
+class Command(BaseCommand):
+ help = 'Adds users to the moderator group'
+
+ def add_arguments(self, parser):
+ # Positional arguments
+ parser.add_argument('usernames', nargs='*', type=str)
+
+ def handle(self, *args, **options):
+ app_label = 'sbhs'
+ group_name = 'moderator'
+ group = create_group(group_name, app_label)
+ if group and isinstance(group, Group):
+ self.stdout.write('Moderator group added successfully')
+
+ if options['usernames']:
+ for uname in options['usernames']:
+ try:
+ user = User.objects.get(username=uname)
+ except User.DoesNotExist:
+ raise CommandError('User "{0}" does not exist'.format(
+ uname)
+ )
+ if user in group.user_set.all():
+ self.stdout.write('User "{0}" is '
+ 'already a Moderator'.format(uname)
+ )
+ else:
+ group.user_set.add(user)
+ self.stdout.write('Successfully added User "{0}"'
+ ' to Moderator group'.format(uname)
+ ) \ No newline at end of file
diff --git a/sbhs/models.py b/sbhs/models.py
index 024c56c..4c1205a 100644
--- a/sbhs/models.py
+++ b/sbhs/models.py
@@ -1,8 +1,28 @@
-from django.db import models
-from django.contrib.auth.models import User, Group
import random, datetime, os
+
+from django.db import models
+from django.contrib.auth.models import User, Group, Permission
+from django.contrib.auth.models import ContentType
+
from sbhs_server import settings
+MOD_GROUP_NAME = 'moderator'
+
+
+def create_group(group_name, app_label):
+ try:
+ group=Group.objects.get(name=group_name)
+ except Group.DoesNotExist:
+ group = Group(name=group_name)
+ group.save()
+ # Get the models for the given app
+ content_types = ContentType.objects.filter(app_label=app_label)
+ permission_list = Permission.objects.filter(
+ content_type__in=content_types
+ )
+ group.permissions.add(*permission_list)
+ group.save()
+ return group
class Board(models.Model):
""" SBHS Board attributes"""
@@ -39,25 +59,48 @@ class Board(models.Model):
# """
# return settings.WEBCAM_STATIC_DIR + "image" + '0'+str(self.mid) + ".jpeg"
-
class Profile(models.Model):
- user = models.ForeignKey(User)
- is_verified = models.BooleanField(default=False)
- is_admin = models.BooleanField(default=False)
-
+ """
+ Profile model to store user details.
+ """
+ user=models.OneToOneField(User)
+ roll_number = models.CharField(max_length=20)
+ institute = models.CharField(max_length=128)
+ department=models.CharField(max_length=64)
+ position=models.CharField(max_length=64)
+ is_moderator=models.BooleanField(default=False)
+ is_email_verified=models.BooleanField(default=False)
+ activation_key=models.CharField(max_length=255,blank=True,null=True)
+ key_expiry_time=models.DateTimeField(blank=True,null=True)
+
+ def _toggle_moderator_group(self, group_name):
+ group = Group.objects.get(name=group_name)
+ if self.is_moderator:
+ self.user.groups.add(group)
+ else:
+ self.user.groups.remove(group)
+
+ def save(self, *args, **kwargs):
+ if self.pk is not None:
+ old_profile = Profile.objects.get(pk=self.pk)
+ if old_profile.is_moderator != self.is_moderator:
+ self._toggle_moderator_group(group_name=MOD_GROUP_NAME)
+ super(Profile, self).save(*args, **kwargs)
+
+ def __str__(self):
+ return '%s' % (self.user)
class Slot(models.Model):
+ user = models.ForeignKey(User)
start_time = models.DateTimeField("Start time of a slot")
duration = models.IntegerField(default=settings.SLOT_DURATION)
-
-class Booking(models.Model):
- user = models.ForeignKey(User)
- slot = models.ForeignKey(Slot)
+ def __str__(self):
+ return '{} {}'.format(self.start_time, self.duration)
class Experiment(models.Model):
- booking = models.ForeignKey("Booking")
+ slot = models.ForeignKey("Slot")
log = models.CharField(max_length=255)
checksum = models.CharField(max_length=255, null=True, blank=True)