Index: openacs-4/packages/bug-tracker/tcl/bug-procs.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/bug-tracker/tcl/bug-procs.tcl,v diff -u -r1.25 -r1.26 --- openacs-4/packages/bug-tracker/tcl/bug-procs.tcl 15 Jun 2008 19:37:01 -0000 1.25 +++ openacs-4/packages/bug-tracker/tcl/bug-procs.tcl 29 Jun 2008 01:05:36 -0000 1.26 @@ -509,21 +509,30 @@ if { [empty_string_p $package_id] } { set package_id [ad_conn package_id] } - - return [workflow::get_id \ - -short_name [workflow_short_name] \ - -object_id $package_id] + return [db_string get_instance_workflow_id {}] } ad_proc -private bug_tracker::bug::instance_workflow_create { {-package_id:required} + -workflow_id } { - Creates a clone of the default bug-tracker package workflow for a - specific package instance + Creates a clone of the given workflow for a specific package instance, or reassign + an existing clone if it already exists. } { - set workflow_id [workflow::fsm::clone \ - -workflow_id [get_package_workflow_id] \ - -object_id $package_id] + if { ![info exists workflow_id] } { + set workflow_id [get_package_workflow_id] + } + + if { ![db_0or1row get_workflow_id {}] } { + # The workflow package only allows one instance of a workflow to be bound to + # a given object. If the workflow doesn't exist for this package instance, + # we clone the package workflow. If it does, we just reuse the existing clone. + set workflow_id [workflow::fsm::clone \ + -workflow_id $workflow_id \ + -object_id $package_id] + } + + db_dml update_project {} return $workflow_id } @@ -534,11 +543,10 @@ Deletes the instance workflow } { workflow::delete -workflow_id [get_instance_workflow_id -package_id $package_id] + db_dml update_project {} } - - ##### # # Capture resolution code