Skip to content

Commit 04076c3

Browse files
authored
Merge pull request #407 from knatten/editors
Editors
2 parents 418c30e + 5925aed commit 04076c3

File tree

3 files changed

+44
-7
lines changed

3 files changed

+44
-7
lines changed

cppquiz/local_settings_example.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,3 +29,6 @@
2929
settings.STATIC_URL = '/static/'
3030

3131
settings.EMAIL_BACKEND = 'django.core.mail.backends.console.EmailBackend'
32+
33+
settings.DEFAULT_FROM_EMAIL = ''
34+
settings.SERVER_EMAIL = ''

quiz/admin.py

Lines changed: 18 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,18 @@ def result_short(obj):
1515
return obj.result
1616

1717

18+
def _is_editor(request):
19+
return not request.user.is_superuser and request.user.groups.filter(name='Editors').exists()
20+
21+
22+
def _is_published(obj):
23+
return obj is not None and getattr(obj, "state", None) == "PUB"
24+
25+
26+
editor_fields = ['question', 'result', 'answer', 'hint', 'explanation', 'difficulty',
27+
'state', 'publish_time', 'socials_text', 'author_email', 'retraction_message']
28+
29+
1830
class QuestionAdmin(VersionAdmin):
1931
list_display = ('pk', 'state', 'author_email', 'reserved', 'reservation_message', question_part,
2032
result_short, 'answer', 'difficulty', 'date_time', 'publish_time')
@@ -24,17 +36,19 @@ class QuestionAdmin(VersionAdmin):
2436

2537
def get_queryset(self, request):
2638
qs = super().get_queryset(request)
27-
if not request.user.is_superuser and request.user.groups.filter(name='Editors').exists():
39+
if _is_editor(request):
2840
return qs.exclude(state='DRA')
2941
return qs
3042

3143
def get_fields(self, request, obj=None):
32-
if not request.user.is_superuser and request.user.groups.filter(name='Editors').exists():
33-
return ['question', 'result', 'answer', 'hint', 'explanation', 'difficulty', 'state', 'publish_time', 'socials_text', 'author_email', 'retraction_message']
44+
if _is_editor(request):
45+
return editor_fields
3446
return super().get_fields(request, obj)
3547

3648
def get_readonly_fields(self, request, obj=None):
37-
if not request.user.is_superuser and request.user.groups.filter(name='Editors').exists():
49+
if _is_editor(request):
50+
if _is_published(obj):
51+
return editor_fields
3852
return ['state', 'publish_time', 'socials_text', 'author_email', 'retraction_message']
3953
return super().get_readonly_fields(request, obj)
4054

quiz/views.py

Lines changed: 23 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,8 @@
22
import random
33

44
from django.contrib.admin.views.decorators import staff_member_required
5-
from django.core.mail import mail_admins
5+
from django.contrib.auth.models import Group
6+
from django.core.mail import mail_admins, send_mail
67
from django.db.models import Count, Q
78
from django.http import Http404, HttpResponse, HttpResponseRedirect
89
from django.shortcuts import get_object_or_404, render
@@ -70,15 +71,34 @@ def create(request):
7071
with reversion.create_revision():
7172
form.save()
7273
reversion.set_comment("User contribution")
73-
mail_admins('Someone made a question!', 'https://' +
74-
request.get_host() + '/admin/quiz/question/?state=NEW')
74+
mail_about_new_question(request)
7575
return HttpResponseRedirect('/quiz/created')
7676
else:
7777
form = QuestionForm()
7878
return render(request, 'quiz/create.html',
7979
{'form': form, 'title': 'Create question'})
8080

8181

82+
def mail_about_new_question(request):
83+
subject = 'Someone made a question!'
84+
body = 'https://' + request.get_host() + '/admin/quiz/question/?state=NEW'
85+
mail_admins(subject, body)
86+
87+
try:
88+
editors = Group.objects.get(name='Editors').user_set.all()
89+
except Group.DoesNotExist:
90+
editors = []
91+
92+
editor_emails = [u.email for u in editors if u.email]
93+
if editor_emails:
94+
send_mail(
95+
subject,
96+
body,
97+
None,
98+
editor_emails,
99+
)
100+
101+
82102
def preview_with_key(request, question_id):
83103
key = request.GET.get('preview_key')
84104
d = {}

0 commit comments

Comments
 (0)