X-Git-Url: https://git.openstreetmap.org./osqa.git/blobdiff_plain/1876ec0c8caf982704410cee305d0cde218421d4..cbbbe9e150dfe0f6b9bb47cb5b3f3ed071aca73a:/forum/views/admin.py diff --git a/forum/views/admin.py b/forum/views/admin.py index dd1f3f5..54cb5ff 100644 --- a/forum/views/admin.py +++ b/forum/views/admin.py @@ -8,9 +8,8 @@ from django.template import RequestContext from django.utils.translation import ugettext as _ from django.utils import simplejson from django.db.models import Sum - from forum.settings.base import Setting -from forum.settings.forms import SettingsSetForm +from forum.settings.forms import SettingsSetForm, MaintenanceModeForm from forum.models import Question, Answer, User, Node, Action from forum import settings @@ -49,6 +48,7 @@ def dashboard(request): 'settings_pack': unicode(settings.SETTINGS_PACK), 'statistics': get_statistics(), 'recent_activity': get_recent_activity(), + 'flagged_posts': get_flagged_posts(), }) @super_user_required @@ -63,10 +63,10 @@ def statistics(request): today = datetime.now() last_month = today - timedelta(days=30) - last_month_questions = Question.objects.filter(deleted=None, added_at__gt=last_month + last_month_questions = Question.objects.filter_state(deleted=False).filter(added_at__gt=last_month ).order_by('added_at').values_list('added_at', flat=True) - last_month_n_questions = Question.objects.filter(deleted=None, added_at__lt=last_month).count() + last_month_n_questions = Question.objects.filter_state(deleted=False).filter(added_at__lt=last_month).count() qgraph_data = simplejson.dumps([ (time.mktime(d.timetuple()) * 1000, i + last_month_n_questions) for i, d in enumerate(last_month_questions) @@ -114,7 +114,7 @@ def settings_set(request, set_name): if set_name in ('minrep', 'badges', 'repgain'): settings.SETTINGS_PACK.set_value("custom") - return HttpResponseRedirect(reverse('admin_set', args=[set_name])) + return HttpResponseRedirect(reverse('admin_set', args=[set_name])) else: form = SettingsSetForm(set) @@ -123,18 +123,36 @@ def settings_set(request, set_name): 'markdown': set.markdown, } +@super_user_required +def get_default(request, set_name, var_name): + set = Setting.sets.get(set_name, None) + if set is None: raise Http404 + + setting = dict([(s.name, s) for s in set]).get(var_name, None) + if setting is None: raise Http404 + + setting.to_default() + + if request.is_ajax(): + return HttpResponse(setting.default) + else: + return HttpResponseRedirect(reverse('admin_set', kwargs={'set_name': set_name})) + def get_recent_activity(): return Action.objects.order_by('-action_date')[0:30] +def get_flagged_posts(): + return Action.objects.filter(canceled=False, action_type="flag").order_by('-action_date')[0:30] + def get_statistics(): return { 'total_users': User.objects.all().count(), 'users_last_24': User.objects.filter(date_joined__gt=(datetime.now() - timedelta(days=1))).count(), - 'total_questions': Question.objects.filter(deleted=None).count(), - 'questions_last_24': Question.objects.filter(deleted=None, added_at__gt=(datetime.now() - timedelta(days=1))).count(), - 'total_answers': Answer.objects.filter(deleted=None).count(), - 'answers_last_24': Answer.objects.filter(deleted=None, added_at__gt=(datetime.now() - timedelta(days=1))).count(), + 'total_questions': Question.objects.filter_state(deleted=False).count(), + 'questions_last_24': Question.objects.filter_state(deleted=False).filter(added_at__gt=(datetime.now() - timedelta(days=1))).count(), + 'total_answers': Answer.objects.filter_state(deleted=False).count(), + 'answers_last_24': Answer.objects.filter_state(deleted=False).filter(added_at__gt=(datetime.now() - timedelta(days=1))).count(), } @super_user_required @@ -185,15 +203,10 @@ def go_bootstrap(request): settings.INITIAL_REP.set_value(1) settings.MAX_REP_BY_UPVOTE_DAY.set_value(300) settings.REP_GAIN_BY_UPVOTED.set_value(15) - settings.REP_LOST_BY_UPVOTE_CANCELED.set_value(15) settings.REP_LOST_BY_DOWNVOTED.set_value(1) settings.REP_LOST_BY_DOWNVOTING.set_value(0) - settings.REP_GAIN_BY_DOWNVOTE_CANCELED.set_value(1) - settings.REP_GAIN_BY_CANCELING_DOWNVOTE.set_value(0) settings.REP_GAIN_BY_ACCEPTED.set_value(25) - settings.REP_LOST_BY_ACCEPTED_CANCELED.set_value(25) settings.REP_GAIN_BY_ACCEPTING.set_value(5) - settings.REP_LOST_BY_CANCELING_ACCEPTED.set_value(5) settings.REP_LOST_BY_FLAGGED.set_value(2) settings.REP_LOST_BY_FLAGGED_3_TIMES.set_value(30) settings.REP_LOST_BY_FLAGGED_5_TIMES.set_value(100) @@ -233,3 +246,40 @@ def recalculate_denormalized(request): request.user.message_set.create(message=_('All values recalculated')) return HttpResponseRedirect(reverse('admin_index')) +@admin_page +def maintenance(request): + if request.POST: + if 'close' in request.POST or 'adjust' in request.POST: + form = MaintenanceModeForm(request.POST) + + if form.is_valid(): + settings.MAINTAINANCE_MODE.set_value({ + 'allow_ips': form.cleaned_data['ips'], + 'message': form.cleaned_data['message']}) + + if 'close' in request.POST: + message = _('Maintenance mode enabled') + else: + message = _('Settings adjusted') + + request.user.message_set.create(message=message) + + return HttpResponseRedirect(reverse('admin_maintenance')) + elif 'open' in request.POST: + settings.MAINTAINANCE_MODE.set_value(None) + request.user.message_set.create(message=_("Your site is now running normally")) + return HttpResponseRedirect(reverse('admin_maintenance')) + else: + form = MaintenanceModeForm(initial={'ips': request.META['REMOTE_ADDR'], + 'message': _('Currently down for maintenance. We\'ll be back soon')}) + + return ('osqaadmin/maintenance.html', {'form': form, 'in_maintenance': settings.MAINTAINANCE_MODE.value is not None}) + + +@admin_page +def flagged_posts(request): + return ('osqaadmin/flagged_posts.html', { + 'flagged_posts': get_flagged_posts(), + }) + +