? b ? bt-callbacks.diff Index: bug-tracker.info =================================================================== RCS file: /cvsroot/openacs-4/packages/bug-tracker/bug-tracker.info,v retrieving revision 1.23.2.1 diff -u -r1.23.2.1 bug-tracker.info --- bug-tracker.info 7 Nov 2005 19:40:53 -0000 1.23.2.1 +++ bug-tracker.info 11 Jun 2006 03:13:43 -0000 @@ -24,14 +24,24 @@ - - - + + + + Index: tcl/bug-tracker-procs.tcl =================================================================== RCS file: /cvsroot/openacs-4/packages/bug-tracker/tcl/bug-tracker-procs.tcl,v retrieving revision 1.32.2.3 diff -u -r1.32.2.3 bug-tracker-procs.tcl --- tcl/bug-tracker-procs.tcl 18 Nov 2005 15:00:29 -0000 1.32.2.3 +++ tcl/bug-tracker-procs.tcl 11 Jun 2006 03:13:46 -0000 @@ -10,6 +10,52 @@ namespace eval bug_tracker {} +ad_proc \ + -callback bug_tracker::bug__resource_discovery \ + {} \ + { + allow subscribing code to uncover their resources needed + for the bug page + } \ + - + +ad_proc \ + -callback bug_tracker::bug__evaluate_actions_state \ + {action_id workflow_id} \ + { + allow subscribing code to look at state of workflow actions. + usually you should set upvar-ed vars defined here or in prev + callback for this to have any effect. + } \ + - + +ad_proc \ + -callback bug_tracker::bug__form_append \ + {} \ + { + allows subscribing code to append form elements (only!!) + to the end of the form. + } \ + - + +ad_proc \ + -callback bug_tracker::bug__log_message \ + {} \ + { allows subscribing code to supply named pieces of the log message } \ + - + +ad_proc \ + -callback bug_tracker::bug__add_new_log_entry \ + {log_id user_id peeraddr context_id form_message message_mime_type} \ + { allows subscribing code to add db items associated with new log entry } \ + - + +ad_proc \ + -callback bug_tracker::bug__register_form_log_message \ + {message_from_form message_data_type log_message_revision_id} \ + { allows subscribing code to do something with description from form } \ + - + ad_proc bug_tracker::package_key {} { return "bug-tracker" } Index: www/bug.tcl =================================================================== RCS file: /cvsroot/openacs-4/packages/bug-tracker/www/bug.tcl,v retrieving revision 1.38 diff -u -r1.38 bug.tcl --- www/bug.tcl 1 Mar 2005 00:01:26 -0000 1.38 +++ www/bug.tcl 11 Jun 2006 03:13:48 -0000 @@ -24,6 +24,7 @@ set package_id [ad_conn package_id] set package_key [ad_conn package_key] +set peeraddr [ad_conn peeraddr] set user_id [ad_conn user_id] permission::require_permission -object_id $package_id -privilege read @@ -58,6 +59,13 @@ set workflow_id [bug_tracker::bug::get_instance_workflow_id ] +# (jim) this callback is for subscribing code to determine available +# resources. Haven't decided what the return values mean yet. + +set bug__resource_list \ + [callback \ + bug_tracker::bug__resource_discovery] + ##### # @@ -102,6 +110,12 @@ } } +set bug__evalactions_list \ + [callback \ + bug_tracker::bug__evaluate_actions_state \ + $action_id \ + $workflow_id] + ##### # # Create the form @@ -215,6 +229,10 @@ {entry_id:integer(hidden),optional} } +# (jim) this callback is for subscribing code to add elements to the form. + +set bug__formappend_list [callback bug_tracker::bug__form_append] + # TODO: Export filters set filters [list] foreach name [bug_tracker::get_export_variables] { @@ -254,15 +272,85 @@ } set description [element get_value bug description] - - bug_tracker::bug::edit \ + + db_transaction { + + set bug__description_list \ + [callback \ + bug_tracker::bug__log_message] + + set form_desc [template::util::richtext::get_property contents $description] + + # parse the list of name-value strings into an array + + foreach item $bug__description_list { + if {[regexp \ + {^([a-zA-Z_][a-zA-Z0-9_]*)=(.*)$} \ + $item \ + match \ + name \ + value]} { + set result_arr(@$name@) $value + } + # add else clause here to complain about item format error + } + + # form_desc is the description text from the bug form + set result_arr(@form_desc@) $form_desc + + # all the values are now in result_arr array + + # get the format string from the BugLogEntryFormatString parameter + set log_format_string \ + [parameter::get \ + -package_id $package_id \ + -parameter BugLogEntryFormatString \ + -default "@form_desc@"] + + # parsing approach suggested by Gustaf Neumann in + # http://openacs.org/forums/message-view?message%5fid=432195 + + set description_string \ + [string map \ + [array get result_arr] \ + $log_format_string] + + # (jim) will reuse these, so set them here + set entry_id [element get_value bug entry_id] + set desc_format \ + [template::util::richtext::get_property format $description] + + bug_tracker::bug::edit \ -bug_id $bug(bug_id) \ -enabled_action_id $enabled_action_id \ - -description [template::util::richtext::get_property contents $description] \ - -desc_format [template::util::richtext::get_property format $description] \ + -description $description_string \ + -desc_format $desc_format \ -array row \ - -entry_id [element get_value bug entry_id] + -entry_id $entry_id + set bt_rev_id \ + [content::item::get_live_revision -item_id $entry_id] + + set bug__addnewentry_list \ + [callback bug_tracker::bug__add_new_log_entry \ + $bt_rev_id \ + $user_id \ + $peeraddr \ + $package_id \ + $form_desc \ + $desc_format] + + # (but package_id might be wrong for the context id) + + # (jim) invoke callback to allow processing of the description + # text that actually came from the form (for example, to store it) + set bug__regmsg_list \ + [callback \ + bug_tracker::bug__register_form_log_message \ + $form_desc \ + $desc_format \ + $bt_rev_id] + } ad_returnredirect $return_url ad_script_abort