Index: openacs-4/packages/workflow/tcl/action-procs-oracle.xql =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/workflow/tcl/action-procs-oracle.xql,v diff -u -r1.5 -r1.6 --- openacs-4/packages/workflow/tcl/action-procs-oracle.xql 16 Dec 2003 18:18:49 -0000 1.5 +++ openacs-4/packages/workflow/tcl/action-procs-oracle.xql 9 Jan 2004 10:27:24 -0000 1.6 @@ -44,7 +44,9 @@ fa.new_state as new_state_id, (select short_name from workflow_fsm_states where state_id = fa.new_state) as new_state, a.description, - a.description_mime_type + a.description_mime_type, + a.child_workflow_id, + (select short_name from workflows where workflow_id = a.child_workflow_id) as child_workflow from workflow_actions a, workflow_fsm_actions fa where a.workflow_id = :workflow_id Index: openacs-4/packages/workflow/tcl/action-procs-postgresql.xql =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/workflow/tcl/action-procs-postgresql.xql,v diff -u -r1.7 -r1.8 --- openacs-4/packages/workflow/tcl/action-procs-postgresql.xql 8 Jan 2004 16:00:41 -0000 1.7 +++ openacs-4/packages/workflow/tcl/action-procs-postgresql.xql 9 Jan 2004 10:27:24 -0000 1.8 @@ -35,7 +35,8 @@ (select short_name from workflow_fsm_states where state_id = fa.new_state) as new_state, a.description, a.description_mime_type, - a.child_workflow_id + a.child_workflow_id, + (select short_name from workflows where workflow_id = a.child_workflow_id) as child_workflow from workflow_actions a left outer join workflow_fsm_actions fa on (a.action_id = fa.action_id) where a.workflow_id = :workflow_id Index: openacs-4/packages/workflow/tcl/action-procs.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/workflow/tcl/action-procs.tcl,v diff -u -r1.23 -r1.24 --- openacs-4/packages/workflow/tcl/action-procs.tcl 9 Jan 2004 09:41:42 -0000 1.23 +++ openacs-4/packages/workflow/tcl/action-procs.tcl 9 Jan 2004 10:27:24 -0000 1.24 @@ -143,7 +143,8 @@ allowed_roles initial_action_p callbacks - child_workflow_ids + child_workflow + child_workflow_id child_role_map @param operation insert, update, delete @@ -216,6 +217,33 @@ # Parse column values switch $operation { insert - update { + # Special-case: array entry child_workflow (short_name) and child_workflow_id (state_id) -- + # DB column is child_workflow_id (workflow_id) + if { [info exists row(child_workflow)] } { + if { [info exists row(child_worklfow_id)] } { + error "You cannot supply both child_workflow (takes short_name) and child_workflow_id (workflow_id)" + } + if { ![empty_string_p $row(child_workflow)] } { + workflow::get -workflow_id $workflow_id -array this_workflow + # TODO: Think about what's appropriate - object_id/package_key ... + + set object_id $this_workflow(object_id) + if { [empty_string_p $object_id] } { + set package_key $this_workflow(package_key) + } else { + set package_key {} + } + set row(child_workflow_id) [workflow::get_id \ + -object_id $object_id \ + -package_key $package_key \ + -short_name $row(child_workflow)] + } else { + set row(child_workflow_id) [db_null] + } + unset row(child_workflow) + unset missing_elm(child_workflow) + } + set update_clauses [list] set insert_names [list] set insert_values [list] @@ -396,7 +424,13 @@ } foreach { child_role_short_name spec } $row(child_role_map) { - foreach { parent_role_short_name mapping_type } $spec {} + # Allow simple list of short_name -> short_name + if { [llength $spec] == 1 } { + set parent_role_short_name $spec + set mapping_type "per_role" + } else { + foreach { parent_role_short_name mapping_type } $spec {} + } set child_role_id [workflow::role::get_id \ -workflow_id $row(child_workflow_id) \ @@ -1217,6 +1251,7 @@ array unset row allowed_role_ids array unset row enabled_state_ids array unset row assigned_state_ids + array unset row child_workflow_id if { ![exists_and_not_null row(description)] } { array unset row description_mime_type @@ -1419,7 +1454,13 @@ where m.action_id = a.action_id and a.workflow_id = :workflow_id } { - lappend child_role_map($action_id) $child_role_short_name [list $parent_role_short_name [string trim $mapping_type]] + set mapping_type [string trim $mapping_type] + # Short-cut when mapping_type is per_role + if { [string equal $mapping_type "per_role"] } { + lappend child_role_map($action_id) $child_role_short_name $parent_role_short_name + } else { + lappend child_role_map($action_id) $child_role_short_name [list $parent_role_short_name $mapping_type] + } } # For each action_id, add to the array of that action the contents of the