Ban refactoring

This commit is contained in:
slav0nic 2009-10-20 14:01:50 +03:00
parent 26e85e5af6
commit adbc29fdec
3 changed files with 25 additions and 23 deletions

View file

@ -50,4 +50,6 @@ admin.site.register(Profile, ProfileAdmin)
admin.site.register(Read, ReadAdmin)
admin.site.register(Reputation, ReputationAdmin)
admin.site.register(Report, ReportAdmin)
admin.site.register(Ban, BanAdmin)
admin.site.register(Ban, BanAdmin)
admin.site.disable_action('delete_selected') #disabled, because delete_selected ignoring delete model method

View file

@ -2,12 +2,12 @@ from optparse import make_option
from datetime import datetime
from django.core.management.base import BaseCommand, CommandError
from django.contrib.auth.models import User
from forum.models import Ban
class Command(BaseCommand):
option_list = BaseCommand.option_list + (
make_option('--all', action='store_true', dest='all', default=False,
help=u'Unban all users'),
@ -17,20 +17,15 @@ class Command(BaseCommand):
help = u'Unban users'
def handle(self, *args, **options):
if options['all']:
bans = Ban.objects.all()
for ban in bans:
ban.user.is_active = True
ban.user.save()
ban.delete()
elif options['in-time']:
bans = Ban.objects.all()
today = datetime.now()
for ban in bans:
ban_end = ban.ban_end.replace(hour=0, minute=0, second=0)
if today >= ban_end:
ban.user.is_active = True
ban.user.save()
ban.delete()
else:
print 'Invalid options'
if options['all']:
bans = Ban.objects.all()
user_ids = [i[0] for i in bans.values_list('user')]
users = User.objects.filter(id__in=user_ids).update(is_active=True)
bans.delete()
elif options['in-time']:
bans = Ban.objects.filter(ban_end__lte=datetime.now())
user_ids = [i[0] for i in bans.values_list('user')]
users = User.objects.filter(id__in=user_ids).update(is_active=True)
bans.delete()
else:
print 'Invalid options'

View file

@ -370,11 +370,11 @@ class PrivateMessage(models.Model):
class Ban(models.Model):
user = models.ForeignKey(User, verbose_name=_('Banned user'), related_name='ban_users')
user = models.OneToOneField(User, verbose_name=_('Banned user'), related_name='ban_users')
ban_start = models.DateTimeField(_('Ban start'), default=datetime.now)
ban_end = models.DateTimeField(_('Ban end'), blank=True, null=True)
reason = models.TextField(_('Reason'))
class Meta:
verbose_name = _('Ban')
verbose_name_plural = _('Bans')
@ -384,8 +384,13 @@ class Ban(models.Model):
self.user.save()
super(Ban, self).save(*args, **kwargs)
def delete(self, *args, **kwargs):
self.user.is_active = True
self.user.save()
super(Ban, self).delete(*args, **kwargs)
def __unicode__(self):
return self.user
return self.user.username
class Attachment(models.Model):