def grant_exception_stage_2(pctx, participation_id, flow_id): # type: (CoursePageContext, Text, Text) -> http.HttpResponse if not pctx.has_permission(pperm.grant_exception): raise PermissionDenied(_("may not grant exceptions")) # {{{ get flow data participation = get_object_or_404(Participation, id=participation_id) form_text = ( string_concat( "<div class='well'>", ugettext("Granting exception to '%(participation)s' for " "'%(flow_id)s'."), "</div>") % { 'participation': participation, 'flow_id': flow_id}) from course.content import get_flow_desc try: flow_desc = get_flow_desc(pctx.repo, pctx.course, flow_id, pctx.course_commit_sha) except ObjectDoesNotExist: raise http.Http404() now_datetime = get_now_or_fake_time(pctx.request) if hasattr(flow_desc, "rules"): access_rules_tags = getattr(flow_desc.rules, "tags", []) else: access_rules_tags = [] NONE_SESSION_TAG = string_concat("<<<", _("NONE"), ">>>") # noqa session_tag_choices = [ (tag, tag) for tag in access_rules_tags] + [(NONE_SESSION_TAG, string_concat("(", _("NONE"), ")"))] from course.utils import get_session_start_rule session_start_rule = get_session_start_rule(pctx.course, participation, flow_id, flow_desc, now_datetime) create_session_is_override = False if not session_start_rule.may_start_new_session: create_session_is_override = True form_text += ("<div class='alert alert-info'>%s</div>" % ( string_concat( "<i class='fa fa-info-circle'></i> ", _("Creating a new session is (technically) not allowed " "by course rules. Clicking 'Create Session' anyway will " "override this rule.")))) default_tag = session_start_rule.tag_session if default_tag is None: default_tag = NONE_SESSION_TAG # }}} def find_sessions(): # type: () -> List[FlowSession] return list(FlowSession.objects .filter( participation=participation, flow_id=flow_id) .order_by("start_time")) exception_form = None request = pctx.request if request.method == "POST": exception_form = ExceptionStage2Form(find_sessions(), request.POST) create_session_form = CreateSessionForm( session_tag_choices, default_tag, create_session_is_override, request.POST) if "create_session" in request.POST or "next" in request.POST: pass else: raise SuspiciousOperation(_("invalid command")) if create_session_form.is_valid() and "create_session" in request.POST: from course.flow import start_flow access_rules_tag = ( create_session_form.cleaned_data[ "access_rules_tag_for_new_session"]) if access_rules_tag == NONE_SESSION_TAG: access_rules_tag = None start_flow(pctx.repo, pctx.course, participation, user=participation.user, flow_id=flow_id, flow_desc=flow_desc, session_start_rule=session_start_rule, now_datetime=now_datetime) exception_form = None elif exception_form.is_valid() and "next" in request.POST: # type: ignore return redirect( "relate-grant_exception_stage_3", pctx.course.identifier, participation.id, flow_id, exception_form.cleaned_data["session"]) # type: ignore else: create_session_form = CreateSessionForm( session_tag_choices, default_tag, create_session_is_override) if exception_form is None: exception_form = ExceptionStage2Form(find_sessions()) return render_course_page(pctx, "course/generic-course-form.html", { "forms": [exception_form, create_session_form], "form_text": form_text, "form_description": _("Grant Exception"), })
def grant_exception_stage_2(pctx, participation_id, flow_id): # type: (CoursePageContext, Text, Text) -> http.HttpResponse if not pctx.has_permission(pperm.grant_exception): raise PermissionDenied(_("may not grant exceptions")) # {{{ get flow data participation = get_object_or_404(Participation, id=participation_id) form_text = (string_concat( "<div class='well'>", ugettext("Granting exception to '%(participation)s' for " "'%(flow_id)s'."), "</div>") % { 'participation': participation, 'flow_id': flow_id }) from course.content import get_flow_desc try: flow_desc = get_flow_desc(pctx.repo, pctx.course, flow_id, pctx.course_commit_sha) except ObjectDoesNotExist: raise http.Http404() now_datetime = get_now_or_fake_time(pctx.request) if hasattr(flow_desc, "rules"): access_rules_tags = getattr(flow_desc.rules, "tags", []) else: access_rules_tags = [] NONE_SESSION_TAG = string_concat("<<<", _("NONE"), ">>>") # noqa session_tag_choices = [(tag, tag) for tag in access_rules_tags] + [ (NONE_SESSION_TAG, string_concat("(", _("NONE"), ")")) ] from course.utils import get_session_start_rule session_start_rule = get_session_start_rule(pctx.course, participation, flow_id, flow_desc, now_datetime) create_session_is_override = False if not session_start_rule.may_start_new_session: create_session_is_override = True form_text += ( "<div class='alert alert-info'>%s</div>" % (string_concat( "<i class='fa fa-info-circle'></i> ", _("Creating a new session is (technically) not allowed " "by course rules. Clicking 'Create Session' anyway will " "override this rule.")))) default_tag = session_start_rule.tag_session if default_tag is None: default_tag = NONE_SESSION_TAG # }}} def find_sessions(): # type: () -> List[FlowSession] return list( FlowSession.objects.filter(participation=participation, flow_id=flow_id).order_by("start_time")) exception_form = None request = pctx.request if request.method == "POST": exception_form = ExceptionStage2Form(find_sessions(), request.POST) create_session_form = CreateSessionForm(session_tag_choices, default_tag, create_session_is_override, request.POST) if "create_session" in request.POST or "next" in request.POST: pass else: raise SuspiciousOperation(_("invalid command")) if create_session_form.is_valid() and "create_session" in request.POST: from course.flow import start_flow access_rules_tag = ( create_session_form. cleaned_data["access_rules_tag_for_new_session"]) if access_rules_tag == NONE_SESSION_TAG: access_rules_tag = None start_flow(pctx.repo, pctx.course, participation, user=participation.user, flow_id=flow_id, flow_desc=flow_desc, session_start_rule=session_start_rule, now_datetime=now_datetime) exception_form = None elif exception_form.is_valid( ) and "next" in request.POST: # type: ignore return redirect( "relate-grant_exception_stage_3", pctx.course.identifier, participation.id, flow_id, exception_form.cleaned_data["session"]) # type: ignore else: create_session_form = CreateSessionForm(session_tag_choices, default_tag, create_session_is_override) if exception_form is None: exception_form = ExceptionStage2Form(find_sessions()) return render_course_page( pctx, "course/generic-course-form.html", { "forms": [exception_form, create_session_form], "form_text": form_text, "form_description": _("Grant Exception"), })
def grant_exception_stage_2(pctx, participation_id, flow_id): if pctx.role not in [ participation_role.instructor, participation_role.teaching_assistant]: raise PermissionDenied("must be instructor or TA to grant exceptions") # {{{ get flow data participation = get_object_or_404(Participation, id=participation_id) form_text = ("<div class='well'>Granting exception to '%s' for '%s'.</div>" % (participation, flow_id)) from course.content import get_flow_desc try: flow_desc = get_flow_desc(pctx.repo, pctx.course, flow_id, pctx.course_commit_sha) except ObjectDoesNotExist: raise http.Http404() now_datetime = get_now_or_fake_time(pctx.request) if hasattr(flow_desc, "rules"): access_rules_tags = getattr(flow_desc.rules, "tags", []) else: access_rules_tags = [] NONE_SESSION_TAG = "<<<NONE>>>" session_tag_choices = [ (tag, tag) for tag in access_rules_tags] + [(NONE_SESSION_TAG, "(None)")] from course.utils import get_session_start_rule session_start_rule = get_session_start_rule(pctx.course, participation, participation.role, flow_id, flow_desc, now_datetime) create_session_is_override = False if not session_start_rule.may_start_new_session: create_session_is_override = True form_text += ("<div class='alert alert-info'>%s</div>" % "Creating a new session is (technically) not allowed by course " "rules. Clicking 'Create Session' anyway will override this rule.") default_tag = session_start_rule.tag_session if default_tag is None: default_tag = NONE_SESSION_TAG # }}} def find_sessions(): return (FlowSession.objects .filter( participation=participation, flow_id=flow_id) .order_by("start_time")) form = None request = pctx.request if request.method == "POST": form = ExceptionStage2Form( session_tag_choices, default_tag, create_session_is_override, find_sessions(), request.POST) if "create_session" in request.POST or "next" in request.POST: pass else: raise SuspiciousOperation("invalid command") if form.is_valid() and "create_session" in request.POST: from course.flow import start_flow access_rules_tag = form.cleaned_data["access_rules_tag_for_new_session"] if access_rules_tag == NONE_SESSION_TAG: access_rules_tag = None start_flow(pctx.repo, pctx.course, participation, flow_id, flow_desc=flow_desc, access_rules_tag=access_rules_tag, now_datetime=now_datetime) form = None elif form.is_valid() and "next" in request.POST: return redirect( "course.views.grant_exception_stage_3", pctx.course.identifier, participation.id, flow_id, form.cleaned_data["session"]) if form is None: form = ExceptionStage2Form(session_tag_choices, default_tag, create_session_is_override, find_sessions()) return render_course_page(pctx, "course/generic-course-form.html", { "form": form, "form_text": form_text, "form_description": "Grant Exception", })