Ban refactoring
This commit is contained in:
parent
26e85e5af6
commit
adbc29fdec
3 changed files with 25 additions and 23 deletions
|
@ -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
|
|
@ -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'
|
||||
|
|
|
@ -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):
|
||||
|
|
Reference in a new issue