X-Git-Url: https://git.openstreetmap.org./osqa.git/blobdiff_plain/1a949f7c97dc2f34c135f5cdf088df2927d3d652..485b15b2138e19fc32b0d48a654c56d18b1f0af6:/forum/views/admin.py?ds=sidebyside diff --git a/forum/views/admin.py b/forum/views/admin.py index bd8a565..126a348 100644 --- a/forum/views/admin.py +++ b/forum/views/admin.py @@ -5,12 +5,12 @@ from django.core.urlresolvers import reverse from django.http import HttpResponseRedirect, HttpResponse, HttpResponseForbidden, Http404 from django.template import RequestContext from django.utils.translation import ugettext as _ +from django.db.models import Sum from forum.settings.base import Setting from forum.settings.forms import SettingsSetForm -from forum.models import Activity, Question, Answer, User -from forum import const +from forum.models import Question, Answer, User, Node, Action from forum import settings def super_user_required(fn): @@ -26,7 +26,7 @@ def super_user_required(fn): def index(request): return render_to_response('osqaadmin/index.html', { 'sets': get_all_sets(), - 'settings_pack': settings.SETTINGS_PACK, + 'settings_pack': unicode(settings.SETTINGS_PACK), 'statistics': get_statistics(), 'recent_activity': get_recent_activity(), }, context_instance=RequestContext(request)) @@ -47,11 +47,14 @@ 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])) else: form = SettingsSetForm(set) return render_to_response('osqaadmin/set.html', { 'form': form, + 'markdown': set.markdown, 'sets': get_all_sets(), }, context_instance=RequestContext(request)) @@ -59,19 +62,16 @@ def get_all_sets(): return sorted(Setting.sets.values(), lambda s1, s2: s1.weight - s2.weight) def get_recent_activity(): - return Activity.objects.filter(activity_type__in=( - const.TYPE_ACTIVITY_ASK_QUESTION, const.TYPE_ACTIVITY_ANSWER, - const.TYPE_ACTIVITY_COMMENT_QUESTION, const.TYPE_ACTIVITY_COMMENT_ANSWER, - const.TYPE_ACTIVITY_MARK_ANSWER)).order_by('-active_at')[0:10] + return Action.objects.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=False).count(), - 'questions_last_24': Question.objects.filter(deleted=False, added_at__gt=(datetime.now() - timedelta(days=1))).count(), - 'total_answers': Answer.objects.filter(deleted=False).count(), - 'answers_last_24': Answer.objects.filter(deleted=False, added_at__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(), } @super_user_required @@ -154,3 +154,19 @@ def go_defaults(request): request.user.message_set.create(message=_('All values reverted to defaults')) return HttpResponseRedirect(reverse('admin_index')) + +@super_user_required +def recalculate_denormalized(request): + for n in Node.objects.all(): + n = n.leaf + n.score = n.votes.aggregate(score=Sum('value'))['score'] + if not n.score: n.score = 0 + n.save() + + for u in User.objects.all(): + u.reputation = u.reputes.aggregate(reputation=Sum('value'))['reputation'] + u.save() + + request.user.message_set.create(message=_('All values recalculated')) + return HttpResponseRedirect(reverse('admin_index')) +