diff options
-rw-r--r-- | sbhs/admin.py | 3 | ||||
-rw-r--r-- | sbhs/management/__init__.py | 0 | ||||
-rw-r--r-- | sbhs/management/commands/__init__.py | 0 | ||||
-rw-r--r-- | sbhs/management/commands/create_moderator.py | 44 | ||||
-rw-r--r-- | sbhs/models.py | 67 |
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) |