#[my object] mixin add ButtonCancelMixin my mixin add ::xowf::AssignmentSubmissionState [my object] mixin add ::xowf::AssignmentCoreWFprocs State parameter [list {"view_method" edit}] State initial -form_loader abgabe_initial -view_method "[::xo::cc query_parameter view_method edit]" initial proc actions {} { return [[my object] check_submittable] } Action initialize Action submit -label [_ tlf-assignments.abgabe_submit] \ -proc activate {obj} {$obj dosubmit} submit proc next_state {} { if {[SubmissionType=[[my object] get_property -name exercise_form] set rating_needed]} {return rate} else {return submitted} } Action cancel_grade -label [_ tlf-assignments.back] -next_state submitted -proc activate {obj} { $obj set_property -new 1 grade "" } Action cancel_resub -label [_ tlf-assignments.back] -next_state submitted -proc activate {obj} { $obj set_property -new 1 resubmissionff "" } Action cancel -proc activate {obj} {$obj delete} \ -label [_ tlf-assignments.abgabe_cancel] Action do_rating -next_state submitted \ -label [_ tlf-assignments.abgabe_do_rating] \ -proc activate {obj} {$obj do_rating} Action upload -next_state initial \ -label [_ tlf-assignments.abgabe_upload] \ -proc activate {obj} {$obj upload_done} Action grade_again -next_state grade_state \ -label [_ tlf-assignments.abgabe_grade_again] \ -proc activate {obj} { set ast [$obj get_property -name assignment_id] ::xo::db::CrClass get_instance_from_db -item_id $ast set package_id [$obj set package_id] set display_members [parameter::get -package_id $package_id -parameter member_display -default 0] set comm_clause [expr {$display_members ? "-community_id [dotlrn_community::get_community_id]" : "" }] } Action grade -next_state graded \ -label [_ tlf-assignments.abgabe_grade] \ -proc activate {obj} {$obj grading_done} Action returnforsubmission -next_state resubmission \ -label [_ tlf-assignments.abgabe_returnforsubmission] Action dograding -next_state grade_state \ -label [_ tlf-assignments.abgabe_dograding] Action doresubmission -next_state initial \ -label [_ tlf-assignments.abgabe_doresubmission] \ -proc activate {obj} {$obj do_resubmission} State submitted -in_role admin { } -form_loader {abgabe_submitted} submitted proc actions {} { if {![permission::permission_p -object_id [::xo::cc set package_id] -privilege "admin"]} {return ""} set ast [[my object] get_property -name assignment_id] ::xo::db::CrClass get_instance_from_db -item_id $ast return [subst { [expr {[$ast get_property -name modus] eq "no_grading" ? "" : "dograding"}] [expr {[SubmissionType=[[my object] get_property -name exercise_form] set allow_resub] ? "returnforsubmission" : ""}] }] } #disable grade_again for now # State graded -in_role admin { -actions {grade_again} } -form_loader {abgabe_graded} State resubmission -form_loader abgabe_submitted -in_role admin { -actions {doresubmission cancel_resub} -form_loader abgabe_resubmission } State grade_state -form_loader abgabe_submitted -in_role admin { -actions {grade cancel_grade} -form_loader abgabe_grade } State rate -actions {do_rating} -form_loader rating_form [my object] proc get_form_data args { lassign [next] validation_errors category_ids set error 0 set cc [${:package_id} context] foreach {name value} [$cc get_all_form_parameter] { if {[regexp {^__action_(.+)$} $name _ action]} { set ctx [::xowf::Context require [self]] set next_state [${ctx}::$action next_state] if {$next_state eq [$ctx get_current_state] && $next_state eq "submitted"} { util_user_message -message "#tlf-assignments.overwrite_warning#" set validation_errors 1 ad_returnredirect [my pretty_link] ad_script_abort } } } return [list $validation_errors $category_ids] } # # Local variables: # mode: tcl # tcl-indent-level: 4 # indent-tabs-mode: nil # End: