X-Git-Url: https://git.openstreetmap.org./osqa.git/blobdiff_plain/51b7f4ab41479e5a0cbfc171a274a82fd4100140..6cd737751ed8356f2845aee6c195c8ef354d06fb:/forum/views/admin.py diff --git a/forum/views/admin.py b/forum/views/admin.py index 40a098a..6dffa51 100644 --- a/forum/views/admin.py +++ b/forum/views/admin.py @@ -13,6 +13,7 @@ from forum.settings.base import Setting from forum.forms import MaintenanceModeForm, PageForm, CreateUserForm from forum.settings.forms import SettingsSetForm from forum.utils import pagination, html +from forum.utils.mail import send_template_email from forum.models import Question, Answer, User, Node, Action, Page, NodeState, Tag from forum.models.node import NodeMetaClass @@ -30,28 +31,47 @@ def super_user_required(fn): return wrapper -def admin_page(fn): - @super_user_required +def staff_user_required(fn): def wrapper(request, *args, **kwargs): - res = fn(request, *args, **kwargs) - if isinstance(res, HttpResponse): - return res + if request.user.is_authenticated() and (request.user.is_staff or request.user.is_superuser): + return fn(request, *args, **kwargs) + else: + return HttpResponseUnauthorized(request) + + return wrapper + +def admin_page_wrapper(fn, request, *args, **kwargs): + res = fn(request, *args, **kwargs) + if isinstance(res, HttpResponse): + return res + + template, context = res + context['basetemplate'] = settings.DJSTYLE_ADMIN_INTERFACE and "osqaadmin/djstyle_base.html" or "osqaadmin/base.html" + context['allsets'] = Setting.sets + context['othersets'] = sorted( + [s for s in Setting.sets.values() if not s.name in + ('basic', 'users', 'email', 'paths', 'extkeys', 'repgain', 'minrep', 'voting', 'accept', 'badges', 'about', 'faq', 'sidebar', + 'form', 'moderation', 'css', 'headandfoot', 'head', 'view', 'urls')] + , lambda s1, s2: s1.weight - s2.weight) + + context['tools'] = [(name, fn.label) for name, fn in TOOLS.items()] + + unsaved = request.session.get('previewing_settings', {}) + context['unsaved'] = set([getattr(settings, s).set.name for s in unsaved.keys() if hasattr(settings, s)]) - template, context = res - context['basetemplate'] = settings.DJSTYLE_ADMIN_INTERFACE and "osqaadmin/djstyle_base.html" or "osqaadmin/base.html" - context['allsets'] = Setting.sets - context['othersets'] = sorted( - [s for s in Setting.sets.values() if not s.name in - ('basic', 'users', 'email', 'paths', 'extkeys', 'repgain', 'minrep', 'voting', 'accept', 'badges', 'about', 'faq', 'sidebar', - 'form', 'moderation', 'css', 'headandfoot', 'head', 'view', 'urls')] - , lambda s1, s2: s1.weight - s2.weight) + return render_to_response(template, context, context_instance=RequestContext(request)) - context['tools'] = TOOLS +def admin_page(fn): + @super_user_required + def wrapper(request, *args, **kwargs): + return admin_page_wrapper(fn, request, *args, **kwargs) - unsaved = request.session.get('previewing_settings', {}) - context['unsaved'] = set([getattr(settings, s).set.name for s in unsaved.keys() if hasattr(settings, s)]) + return wrapper - return render_to_response(template, context, context_instance=RequestContext(request)) +def moderation_page(fn): + @staff_user_required + def wrapper(request, *args, **kwargs): + return admin_page_wrapper(fn, request, *args, **kwargs) return wrapper @@ -327,7 +347,7 @@ def maintenance(request): }) -@admin_page +@moderation_page def flagged_posts(request): return ('osqaadmin/flagged_posts.html', { 'flagged_posts': get_flagged_posts(), @@ -381,6 +401,12 @@ def edit_page(request, id=None): 'published': published }) +@admin_page +def delete_page(request, id=None): + page = get_object_or_404(Page, id=id) + page.delete() + return HttpResponseRedirect(reverse('admin_static_pages')) + @admin_tools_page(_('createuser'), _("Create new user")) def create_user(request): if request.POST: @@ -548,7 +574,14 @@ def node_management(request): 'hide_menu': True })) +@super_user_required +def test_email_settings(request): + user = request.user + send_template_email([user,], 'osqaadmin/mail_test.html', { 'user' : user }) - - + return render_to_response( + 'osqaadmin/test_email_settings.html', + { 'user': user, }, + RequestContext(request) + ) \ No newline at end of file