Skip to content
Snippets Groups Projects
Commit 72480a2e authored by Hangzhi Yu's avatar Hangzhi Yu
Browse files

Add check for allowed time range preference when creating docs from dummy

parent 18ec1a4f
No related branches found
No related tags found
2 merge requests!352Draft: Resolve "Add dialog with each lesson's students",!350Resolve "Add simple course book list"
from datetime import datetime, timezone from datetime import datetime, timezone
from django.core.exceptions import PermissionDenied from django.core.exceptions import PermissionDenied
from django.utils.timezone import localdate, localtime
import graphene import graphene
from graphene_django.types import DjangoObjectType from graphene_django.types import DjangoObjectType
...@@ -22,6 +23,7 @@ from aleksis.core.schema.base import ( ...@@ -22,6 +23,7 @@ from aleksis.core.schema.base import (
PermissionBatchPatchMixin, PermissionBatchPatchMixin,
PermissionsTypeMixin, PermissionsTypeMixin,
) )
from aleksis.core.util.core_helpers import get_site_preferences
from ..models import Documentation from ..models import Documentation
...@@ -170,32 +172,50 @@ class DocumentationBatchCreateOrUpdateMutation(graphene.Mutation): ...@@ -170,32 +172,50 @@ class DocumentationBatchCreateOrUpdateMutation(graphene.Mutation):
# Sadly, we can't use the update_or_create method since create_defaults # Sadly, we can't use the update_or_create method since create_defaults
# is only introduced in Django 5.0 # is only introduced in Django 5.0
if _id.startswith("DUMMY"): if _id.startswith("DUMMY"):
dummy, lesson_event_id, datetime_start, datetime_end = _id.split(";") dummy, lesson_event_id, datetime_start_iso, datetime_end_iso = _id.split(";")
lesson_event = LessonEvent.objects.get(id=lesson_event_id) lesson_event = LessonEvent.objects.get(id=lesson_event_id)
if not info.context.user.has_perm( datetime_start = datetime.fromisoformat(datetime_start_iso).astimezone(
lesson_event.timezone
)
datetime_end = datetime.fromisoformat(datetime_end_iso).astimezone(
lesson_event.timezone
)
if info.context.user.has_perm(
"alsijil.add_documentation_for_lesson_event_rule", lesson_event "alsijil.add_documentation_for_lesson_event_rule", lesson_event
) and (
get_site_preferences()["alsijil__allow_edit_future_documentations"] == "all"
or (
get_site_preferences()["alsijil__allow_edit_future_documentations"]
== "current_day"
and datetime_start.date() <= localdate()
)
or (
get_site_preferences()["alsijil__allow_edit_future_documentations"]
== "current_time"
and datetime_start <= localtime()
)
): ):
raise PermissionDenied() # Timezone removal is necessary due to ISO style offsets are no valid timezones.
# Instead, we take the timezone from the lesson_event and save it in a dedicated field.
# Timezone removal is necessary due to ISO style offsets are no valid timezones. obj = Documentation.objects.create(
# Instead, we take the timezone from the lesson_event and save it in a dedicated field. datetime_start=datetime_start,
obj = Documentation.objects.create( datetime_end=datetime_end,
datetime_start=datetime.fromisoformat(datetime_start).astimezone(lesson_event.timezone), lesson_event=lesson_event,
datetime_end=datetime.fromisoformat(datetime_end).astimezone(lesson_event.timezone), course=lesson_event.course,
lesson_event=lesson_event, subject=lesson_event.subject,
course=lesson_event.course, topic=doc.topic or "",
subject=lesson_event.subject, homework=doc.homework or "",
topic=doc.topic or "", group_note=doc.group_note or "",
homework=doc.homework or "", )
group_note=doc.group_note or "", if doc.teachers is not None:
) obj.teachers.add(*doc.teachers)
if doc.teachers is not None: else:
obj.teachers.add(*doc.teachers) obj.teachers.set(lesson_event.teachers.all())
else: obj.save()
obj.teachers.set(lesson_event.teachers.all()) return obj
obj.save() raise PermissionDenied()
return obj
else: else:
obj = Documentation.objects.get(id=_id) obj = Documentation.objects.get(id=_id)
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment