Skip to content

Proper setup with rollover access rules #877

@davis68

Description

@davis68

I recently changed my class' grading structure to allow for early completion of assignments.

The desired behavior is for students to be able to start an assignment early (tag early) for full credit; after the official release date they can continue to complete it under regular rules. I am using the roll_over​ setting to handle access before the official release date so that they can continue to work.

Some students at least are reporting that after the official release (regular tag) they are no longer able to work on early​ sessions.

Can you tell me if these rules are wrong for this use case?

{# {{{ lesson submission header #}

{% macro lesson_header(nr, title="", release_offset=-2, due_offset=7, due_late_days=0) %}

title: "{{title}} lesson {{"{0}".format(nr).rjust(2)}}"
description: |
    # {{title}} lesson {{"{0}".format(nr).rjust(2)}}
rules:
    tags:
    -   regular
    -   approved
    -   notforcredit
    -   early
    -   late

    start:
    -
        if_has_role: [instructor, ta, course_aide]
        may_start_new_session: True
        may_list_existing_sessions: True
        tag_session: notforcredit
    -
        if_before: lesson {{nr}} - {{release_offset}} days @ 00:00
        if_has_role: [student]
        if_has_fewer_sessions_than: 1
        may_start_new_session: True
        may_list_existing_sessions: True
        default_expiration_mode: roll_over
        tag_session: early
    -
        if_after: lesson {{nr}} - {{release_offset}} days @ 00:00
        if_before: lesson {{nr}} + {{due_offset}} days @ 23:59
        if_has_role: [student]
        if_has_fewer_sessions_than: 1
        may_start_new_session: True
        may_list_existing_sessions: True
        default_expiration_mode: roll_over
        tag_session: regular
    -
        if_after: lesson {{nr}} + {{due_offset}} days @ 23:59
        if_before: lesson {{nr}}  + {{due_offset+due_late_days}} days @ 23:59
        if_has_role: [student]
        if_has_fewer_sessions_than: 2
        may_start_new_session: True
        may_list_existing_sessions: True
        default_expiration_mode: roll_over
        tag_session: late
    -
        if_after: lesson {{nr}} + {{due_offset+due_late_days}} days @ 23:59
        if_before: course_end @ 23:59
        if_has_role: [student]
        if_has_fewer_sessions_than: 3
        may_start_new_session: True
        may_list_existing_sessions: True
        default_expiration_mode: end
        tag_session: notforcredit
    -
        may_start_new_session: False
        may_list_existing_sessions: True

    access:
    # Instructor view
    -
        if_has_role: [instructor, ta, course_aide]
        permissions: [view, submit_answer, change_answer, see_answer_before_submission, end_session, see_correctness]
    # Unenrolled view
    -
        if_has_role: [unenrolled]
        message: |
            You do not seem to be enrolled in the course website, which is why
            you cannot make changes below. Please verify that you are signed in,
            and then return to the class web page and find the big blue "Enroll"
            button near the top.
        permissions: [view]
    # Unfinished full-credit session marked 'roll_over' before due date.
    -
        if_has_tag: early
        if_in_progress: True
        if_expiration_mode: roll_over
        message: |
          You have started an early session.  It will roll over to a regular
          session when the official lesson release date happens.
        permissions: [view, submit_answer, end_session, see_correctness, change_answer, set_roll_over_expiration_mode]
    # Unfinished full-credit session marked 'end' after due date.
    -
        if_has_tag: regular
        if_in_progress: True
        if_after: lesson {{nr}} - {{release_offset}} days @ 00:00
        if_expiration_mode: end
        message: |
          The due date has passed. If you have marked your session to end at the
          deadline, it will receive full credit, but it will end automatically
          fairly soon. If you would like to continue working, please mark your
          session to roll over into 50% credit by selecting 'Keep session and
          apply new rules'.
        permissions: [view, submit_answer, end_session, see_correctness, change_answer, set_roll_over_expiration_mode]
    # Unfinished full-credit session marked 'roll_over' before due date.
    -
        if_has_tag: regular
        if_in_progress: True
        if_expiration_mode: roll_over
        message: |
          You have marked your session to roll over to 50% credit at the due
          date. If you would like to have your current answers graded as-is
          (and receive full credit for them), please select 'End session
          and grade'.
        permissions: [view, submit_answer, end_session, see_correctness, change_answer, set_roll_over_expiration_mode]
    # Finished full-credit session before due date.  Don't show answer.
    -
        if_has_tag: regular
        if_after: lesson {{nr}} @ 00:00
        if_before: lesson {{nr}} + {{due_offset}} days @ 23:59
        permissions: [view, see_correctness]
    # Practice session after due date.
    -
        if_has_tag: notforcredit
        if_after: lesson {{nr}} + {{due_offset}} days @ 23:59
        permissions: [view, submit_answer, see_correctness, change_answer, see_answer_after_submission]
    # Any other fallback case.
    -
        permissions: [view, see_correctness]

    grade_identifier: lesson{{"{0}".format(nr).zfill(2)}}
    grade_aggregation_strategy: max_grade

    grading:
    # Full-credit deadlines
    -
        if_has_tag: early
        description: "Full Credit (Early Start)"
        due: lesson {{nr}} + {{due_offset}} days @ 23:59
        generates_grade: True
        credit_percent: 100
    -
        if_has_tag: regular
        description: "Full Credit (Regular)"
        due: lesson {{nr}} + {{due_offset}} days @ 23:59
        generates_grade: True
        credit_percent: 100
    # Late deadline
    -
        if_has_tag: late
        description: "50% Credit (Late Start)"
        due: lesson {{nr}} + {{due_offset+due_late_days}} days @ 23:59
        generates_grade: True
        credit_percent: 50
    # No-credit viewing
    -
        if_has_tag: notforcredit
        description: "Study Only (No Credit Available)"
        due: course_end @ 23:59
        generates_grade: true
        credit_percent: 0
    # Approved late take
    -
        if_has_tag: approved
        description: "Full Credit (Approved Exception)"
        generates_grade: true
        credit_percent: 100
    -
        credit_percent: 0

{% endmacro %}

{# }}} #}

They are invoked in a flow file as:

{{ lesson_header(0, title="lesson 00 computation/intro", release_offset=0, due_offset=16) }}

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions