Index: openacs-4/packages/simulation/www/siminst/map-tasks.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/simulation/www/siminst/map-tasks.tcl,v diff -u -r1.5 -r1.6 --- openacs-4/packages/simulation/www/siminst/map-tasks.tcl 5 Jan 2004 10:31:41 -0000 1.5 +++ openacs-4/packages/simulation/www/siminst/map-tasks.tcl 6 Jan 2004 14:56:42 -0000 1.6 @@ -6,50 +6,124 @@ workflow_id:integer } -workflow::get -workflow_id $workflow_id -array workflow_array -set page_title "Tasks for $workflow_array(pretty_name)" -set context [list [list "." "SimInst" ] $page_title] +set user_id [auth::require_login] -db_multirow -extend { description_html prop_missing_count } tasks select_taks { +ad_form \ + -name tasks \ + -form { + {workflow_id:integer(hidden) {value $workflow_id}} + } + +set prop_options [simulation::object::get_object_type_options -object_type "sim_prop"] + +set actions [list] + +db_foreach tasks { select a.action_id, - a.short_name, a.pretty_name, a.description, a.description_mime_type, st.attachment_num, - (select count(*) - from sim_task_object_map stom - where stom.task_id = st.task_id) as prop_not_empty_count + (select pretty_name from workflow_roles where role_id = a.assigned_role) as assigned_role_pretty, + (select pretty_name from workflow_roles where role_id = st.recipient) as recipient_role_pretty, + (select count(*) from workflow_initial_action where action_id = a.action_id) as initial_p from workflow_actions a, sim_tasks st where a.workflow_id = :workflow_id and st.task_id = a.action_id order by a.sort_order -} { - set description_html [ad_html_text_convert -maxlen 100 -from $description_mime_type -- $description] - set prop_missing_count [expr $attachment_num - $prop_not_empty_count] +} -column_array row { + if { !$row(initial_p) } { + set section_name "Task $row(pretty_name)" + if { ![empty_string_p $row(assigned_role_pretty)] || ![empty_string_p $row(recipient_role_pretty)] } { + append section_name " (" + if { ![empty_string_p $row(assigned_role_pretty)] } { + append section_name $row(assigned_role_pretty) + } + if { ![empty_string_p $row(recipient_role_pretty)] } { + append section_name "-> $row(recipient_role_pretty))" + } + } + + ad_form -extend -name tasks -form \ + [list [list description_$row(action_id):richtext,optional \ + {label "Task Description"} \ + {html {cols 60 rows 4}} \ + {section $section_name}]] + + set description_$row(action_id) [template::util::richtext::create $row(description) $row(description_mime_type)] + + # Save attachment_num for later + ad_form -extend -name tasks -form \ + [list [list attachment_num_$row(action_id):integer(hidden),optional \ + {value $row(attachment_num)}]] + + for { set i 1 } { $i <= $row(attachment_num) } { incr i } { + ad_form -extend -name tasks -form \ + [list [list attachment_$row(action_id)_$i:integer(select),optional \ + {label "Attachment $i"} \ + {options $prop_options}]] + } + + lappend actions $row(action_id) + } } -template::list::create \ - -name "tasks" \ - -elements { - pretty_name { - label "Name" - link_url_eval {[export_vars -base task-edit { action_id }]} +wizard submit tasks -buttons { back next } + +ad_form \ + -extend \ + -name tasks \ + -form { + {actions:text(hidden) {value $actions}} + } \ + -on_request { + db_foreach attachments { + select a.action_id, + m.object_id, + m.order_n + from workflow_actions a, + sim_task_object_map m + where a.workflow_id = :workflow_id + and m.task_id = a.action_id + and m.relation_tag = 'attachment' + } { + set attachment_${action_id}_${order_n} $object_id } - description { - label "Description" - display_template {@tasks.description_html;noquote@} + } -on_submit { + + db_transaction { + + foreach action_id $actions { + + array unset row + set row(description_mime_type) [template::util::richtext::get_property format [set description_${action_id}]] + set row(description) [template::util::richtext::get_property contents [set description_${action_id}]] + + simulation::action::edit \ + -action_id $action_id \ + -workflow_id $workflow_id \ + -array row + + # TODO B: The way we do this update is not very pretty: Delete all relations and re-add the new ones + db_dml delete_all_relations { + delete from sim_task_object_map + where task_id = :action_id + } + + for { set i 1 } { $i <= [set attachment_num_${action_id}] } { incr i } { + set elm "attachment_${action_id}_$i" + set related_object_id [set $elm] + + if { ![empty_string_p $related_object_id] } { + db_dml insert_rel { + insert into sim_task_object_map (task_id, object_id, order_n, relation_tag) + values (:action_id, :related_object_id, :i, 'attachment') + } + } + } + } } - attachment_num { - label "Number of attachments" - display_template {@tasks.attachment_num@} - hide_p 1 - html { align right } - } - prop_missing_count { - label "Missing attachments" - display_template {@tasks.prop_missing_count@} - html { align center } - } + } -after_submit { + wizard forward }