1 from datetime import datetime, timedelta
3 from django.shortcuts import render_to_response
4 from django.core.urlresolvers import reverse
5 from django.http import HttpResponseRedirect, HttpResponse, HttpResponseForbidden, Http404
6 from django.template import RequestContext
7 from django.utils.translation import ugettext as _
9 from forum.settings.base import Setting
10 from forum.settings.forms import SettingsSetForm
12 from forum.models import Activity, Question, Answer, User
13 from forum import const
14 from forum import settings
16 def super_user_required(fn):
17 def wrapper(request, *args, **kwargs):
18 if request.user.is_authenticated() and request.user.is_superuser:
19 return fn(request, *args, **kwargs)
27 return render_to_response('osqaadmin/index.html', {
28 'sets': get_all_sets(),
29 'settings_pack': settings.SETTINGS_PACK,
30 'statistics': get_statistics(),
31 'recent_activity': get_recent_activity(),
32 }, context_instance=RequestContext(request))
35 def settings_set(request, set_name):
36 set = Setting.sets.get(set_name, None)
42 form = SettingsSetForm(set, data=request.POST, files=request.FILES)
46 request.user.message_set.create(message=_("'%s' settings saved succesfully") % set_name)
48 if set_name in ('minrep', 'badges', 'repgain'):
49 settings.SETTINGS_PACK.set_value("custom")
51 form = SettingsSetForm(set)
53 return render_to_response('osqaadmin/set.html', {
55 'sets': get_all_sets(),
56 }, context_instance=RequestContext(request))
59 return sorted(Setting.sets.values(), lambda s1, s2: s1.weight - s2.weight)
61 def get_recent_activity():
62 return Activity.objects.filter(activity_type__in=(
63 const.TYPE_ACTIVITY_ASK_QUESTION, const.TYPE_ACTIVITY_ANSWER,
64 const.TYPE_ACTIVITY_COMMENT_QUESTION, const.TYPE_ACTIVITY_COMMENT_ANSWER,
65 const.TYPE_ACTIVITY_MARK_ANSWER)).order_by('-active_at')[0:10]
69 'total_users': User.objects.all().count(),
70 'users_last_24': User.objects.filter(date_joined__gt=(datetime.now() - timedelta(days=1))).count(),
71 'total_questions': Question.objects.filter(deleted=False).count(),
72 'questions_last_24': Question.objects.filter(deleted=False, added_at__gt=(datetime.now() - timedelta(days=1))).count(),
73 'total_answers': Answer.objects.filter(deleted=False).count(),
74 'answers_last_24': Answer.objects.filter(deleted=False, added_at__gt=(datetime.now() - timedelta(days=1))).count(),
78 def go_bootstrap(request):
79 #todo: this is the quick and dirty way of implementing a bootstrap mode
81 from forum_modules.default_badges import settings as dbsets
82 dbsets.POPULAR_QUESTION_VIEWS.set_value(100)
83 dbsets.NOTABLE_QUESTION_VIEWS.set_value(200)
84 dbsets.FAMOUS_QUESTION_VIEWS.set_value(300)
85 dbsets.NICE_ANSWER_VOTES_UP.set_value(2)
86 dbsets.NICE_QUESTION_VOTES_UP.set_value(2)
87 dbsets.GOOD_ANSWER_VOTES_UP.set_value(4)
88 dbsets.GOOD_QUESTION_VOTES_UP.set_value(4)
89 dbsets.GREAT_ANSWER_VOTES_UP.set_value(8)
90 dbsets.GREAT_QUESTION_VOTES_UP.set_value(8)
91 dbsets.FAVORITE_QUESTION_FAVS.set_value(1)
92 dbsets.STELLAR_QUESTION_FAVS.set_value(3)
93 dbsets.DISCIPLINED_MIN_SCORE.set_value(3)
94 dbsets.PEER_PRESSURE_MAX_SCORE.set_value(-3)
95 dbsets.CIVIC_DUTY_VOTES.set_value(15)
96 dbsets.PUNDIT_COMMENT_COUNT.set_value(10)
97 dbsets.SELF_LEARNER_UP_VOTES.set_value(2)
98 dbsets.STRUNK_AND_WHITE_EDITS.set_value(10)
99 dbsets.ENLIGHTENED_UP_VOTES.set_value(2)
100 dbsets.GURU_UP_VOTES.set_value(4)
101 dbsets.NECROMANCER_UP_VOTES.set_value(2)
102 dbsets.NECROMANCER_DIF_DAYS.set_value(30)
103 dbsets.TAXONOMIST_USE_COUNT.set_value(5)
107 settings.REP_TO_VOTE_UP.set_value(0)
108 settings.REP_TO_VOTE_DOWN.set_value(15)
109 settings.REP_TO_FLAG.set_value(15)
110 settings.REP_TO_COMMENT.set_value(0)
111 settings.REP_TO_LIKE_COMMENT.set_value(0)
112 settings.REP_TO_UPLOAD.set_value(0)
113 settings.REP_TO_CLOSE_OWN.set_value(60)
114 settings.REP_TO_REOPEN_OWN.set_value(120)
115 settings.REP_TO_RETAG.set_value(150)
116 settings.REP_TO_EDIT_WIKI.set_value(200)
117 settings.REP_TO_EDIT_OTHERS.set_value(400)
118 settings.REP_TO_CLOSE_OTHERS.set_value(600)
119 settings.REP_TO_DELETE_COMMENTS.set_value(400)
120 settings.REP_TO_VIEW_FLAGS.set_value(30)
122 settings.INITIAL_REP.set_value(1)
123 settings.MAX_REP_BY_UPVOTE_DAY.set_value(300)
124 settings.REP_GAIN_BY_UPVOTED.set_value(15)
125 settings.REP_LOST_BY_UPVOTE_CANCELED.set_value(15)
126 settings.REP_LOST_BY_DOWNVOTED.set_value(1)
127 settings.REP_LOST_BY_DOWNVOTING.set_value(0)
128 settings.REP_GAIN_BY_DOWNVOTE_CANCELED.set_value(1)
129 settings.REP_GAIN_BY_CANCELING_DOWNVOTE.set_value(0)
130 settings.REP_GAIN_BY_ACCEPTED.set_value(25)
131 settings.REP_LOST_BY_ACCEPTED_CANCELED.set_value(25)
132 settings.REP_GAIN_BY_ACCEPTING.set_value(5)
133 settings.REP_LOST_BY_CANCELING_ACCEPTED.set_value(5)
134 settings.REP_LOST_BY_FLAGGED.set_value(2)
135 settings.REP_LOST_BY_FLAGGED_3_TIMES.set_value(30)
136 settings.REP_LOST_BY_FLAGGED_5_TIMES.set_value(100)
138 settings.SETTINGS_PACK.set_value("bootstrap")
140 request.user.message_set.create(message=_('Bootstrap mode enabled'))
141 return HttpResponseRedirect(reverse('admin_index'))
144 def go_defaults(request):
145 for setting in Setting.sets['badges']:
147 for setting in Setting.sets['minrep']:
149 for setting in Setting.sets['repgain']:
152 settings.SETTINGS_PACK.set_value("default")
154 request.user.message_set.create(message=_('All values reverted to defaults'))
155 return HttpResponseRedirect(reverse('admin_index'))