Index: openacs-4/packages/bug-tracker/www/patch.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/bug-tracker/www/patch.tcl,v diff -u -r1.1 -r1.1.2.1 --- openacs-4/packages/bug-tracker/www/patch.tcl 11 Sep 2002 14:03:25 -0000 1.1 +++ openacs-4/packages/bug-tracker/www/patch.tcl 5 Mar 2003 18:13:52 -0000 1.1.2.1 @@ -25,13 +25,19 @@ set user_id [ad_conn user_id] # Does the user have write privilege on the project? set write_p [ad_permission_p $package_id write] -set user_is_submitter_p [expr $user_id == [bug_tracker::get_patch_submitter -patch_number $patch_number]] + +set submitter_id [bug_tracker::get_patch_submitter -patch_number $patch_number] + +set user_is_submitter_p [expr { ![empty_string_p $submitter_id] && $user_id == $submitter_id }] set write_or_submitter_p [expr $write_p || $user_is_submitter_p] set project_name [bug_tracker::conn project_name] set package_key [ad_conn package_key] set view_patch_url "[ad_conn url]?[export_vars -url { patch_number }]" -set patch_status [db_string patch_status "select status from bt_patches where patch_number = :patch_number and project_id = :package_id"] +set patch_status [db_string patch_status {}] +# Is this project using multiple versions? +set versions_p [bug_tracker::versions_p] + # Abort editing and return to view mode if the user hit cancel on the edit form if { [exists_and_not_null cancel_edit] } { ad_returnredirect $view_patch_url @@ -41,7 +47,7 @@ # If the download link was clicked - return the text content of the patch if { [exists_and_not_null download] } { - set patch_content [db_string get_patch_content "select content from bt_patches where patch_number = :patch_number and project_id = :package_id"] + set patch_content [db_string get_patch_content {}] doc_return 200 "text/plain" $patch_content ad_script_abort @@ -125,13 +131,15 @@ ad_maybe_redirect_for_registration } +# XXX FIXME TODO editing a patch invokes filename::validate, which is too paranoid... + # Create the form switch -- $mode { view { - form create patch -has_submit 1 + form create patch -has_submit 1 -cancel_url "[ad_conn url]?[export_vars -url { patch_number }]" } default { - form create patch -html { enctype multipart/form-data } + form create patch -html { enctype multipart/form-data } -cancel_url "[ad_conn url]?[export_vars -url { patch_number }]" } } @@ -252,47 +260,12 @@ if { [form is_request patch] } { # The form was requested - db_1row patch { - select bt_patches.patch_id, - bt_patches.patch_number, - bt_patches.project_id, - bt_patches.component_id, - bt_patches.summary, - bt_patches.content, - bt_patches.generated_from_version, - bt_patches.apply_to_version, - bt_patches.applied_to_version, - bt_patches.status, - bt_components.component_name, - acs_objects.creation_user as submitter_user_id, - submitter.first_names as submitter_first_names, - submitter.last_name as submitter_last_name, - submitter.email as submitter_email, - acs_objects.creation_date, - to_char(acs_objects.creation_date, 'fmMM/DDfm/YYYY') as creation_date_pretty, - coalesce((select version_name - from bt_versions - where bt_versions.version_id = bt_patches.generated_from_version), 'Unknown') as generated_from_version_name, - coalesce((select version_name - from bt_versions - where bt_versions.version_id = bt_patches.apply_to_version), 'Unknown') as apply_to_version_name, - coalesce((select version_name - from bt_versions - where bt_versions.version_id = bt_patches.applied_to_version), 'Unknown') as applied_to_version_name, - to_char(now(), 'fmMM/DDfm/YYYY') as now_pretty - from bt_patches, - acs_objects, - cc_users submitter, - bt_components - - where bt_patches.patch_number = :patch_number - and bt_patches.project_id = :package_id - and bt_patches.patch_id = acs_objects.object_id - and bt_patches.component_id = bt_components.component_id - and submitter.user_id = acs_objects.creation_user - - } -column_array patch + db_1row patch {} -column_array patch + set patch(generated_from_version_name) [ad_decode $patch(generated_from_version) "" "Unknown" [bug_tracker::version_get_name -version_id $patch(generated_from_version)]] + set patch(apply_to_version_name) [ad_decode $patch(apply_to_version) "" "Undecided" [bug_tracker::version_get_name -version_id $patch(apply_to_version)]] + set patch(applied_to_version_name) [bug_tracker::version_get_name -version_id $patch(applied_to_version)] + # When the user is taking an action that should change the status of the patch # - update the status (the new status will show up in the form) switch -- $mode { @@ -319,7 +292,7 @@ if { [string equal $mode "view"] } { set map_new_bug_link [ad_decode $write_or_submitter_p "1" "\[ Map to bugs \]" ""] element set_properties patch fixes_bugs \ - -value "[bug_tracker::get_bug_links -patch_id $patch(patch_id) -patch_number $patch(patch_number) -write_or_submitter_p $write_or_submitter_p] $map_new_bug_link" + -value "[bug_tracker::get_bug_links -patch_id $patch(patch_id) -patch_number $patch(patch_number) -write_or_submitter_p $write_or_submitter_p]
$map_new_bug_link" } element set_properties patch summary \ -value [ad_decode [info exists field_editable_p(summary)] 1 $patch(summary) "$patch(summary)"] @@ -331,7 +304,6 @@ element set_properties patch status \ -value [ad_decode [info exists field_editable_p(status)] 1 $patch(status) [bug_tracker::patch_status_pretty $patch(status)]] - element set_properties patch generated_from_version \ -value [ad_decode [info exists field_editable_p(generated_from_version)] 1 $patch(generated_from_version) $patch(generated_from_version_name)] element set_properties patch apply_to_version \ @@ -346,23 +318,8 @@ # Description/Actions/History set patch_id $patch(patch_id) set action_html "" - db_foreach actions { - select bt_patch_actions.action_id, - bt_patch_actions.action, - bt_patch_actions.actor as actor_user_id, - actor.first_names as actor_first_names, - actor.last_name as actor_last_name, - actor.email as actor_email, - bt_patch_actions.action_date, - to_char(bt_patch_actions.action_date, 'fmMM/DDfm/YYYY') as action_date_pretty, - bt_patch_actions.comment, - bt_patch_actions.comment_format - from bt_patch_actions, - cc_users actor - where bt_patch_actions.patch_id = :patch_id - and actor.user_id = bt_patch_actions.actor - order by action_date - } { + db_foreach actions {} { + set comment $comment_text append action_html "$action_date_pretty [bug_tracker::patch_action_pretty $action] by $actor_first_names $actor_last_name
[bug_tracker::bug_convert_comment_to_html -comment $comment -format $comment_format]
" } @@ -431,6 +388,10 @@ " ad_script_abort } + + if { !$versions_p } { + element set_properties patch generated_from_version -widget hidden + } } if { [form is_valid patch] } { @@ -473,10 +434,10 @@ } db_transaction { - set patch_id [db_string patch_id "select patch_id from bt_patches where patch_number = :patch_number and project_id = :package_id"] + set patch_id [db_string patch_id {}] if { [llength $update_exprs] > 0 } { - db_dml update_patch "update bt_patches \n set [join $update_exprs ",\n "] \n where patch_id = :patch_id" + db_dml update_patch {} } set action_id [db_nextval "acs_object_id_seq"] @@ -485,39 +446,27 @@ set $column [element get_value patch $column] } - db_dml patch_action { - insert into bt_patch_actions - (action_id, patch_id, action, actor, comment, comment_format) - values - (:action_id, :patch_id, :mode, :user_id, :description, :desc_format) - } + set action $mode + db_dml patch_action {} if { [string equal $mode "accept"] } { # Resolve any bugs that the user selected set resolve_bugs [element get_values patch resolve_bugs] foreach bug_number $resolve_bugs { - db_transaction { - set bug_id [bug_tracker::get_bug_id -bug_number $bug_number -project_id $package_id] - - db_dml resolve_bug { - update bt_bugs - set status = 'resolved' - where bug_id = :bug_id - } - - set bug_action_id [db_nextval "acs_object_id_seq"] - - set resolve_description "Fixed by patch #$patch_number" - - db_dml bug_action_resolve { - insert into bt_bug_actions - (action_id, bug_id, action, resolution, actor, comment, comment_format) - values - (:bug_action_id, :bug_id, 'resolve', 'fixed', :user_id, :resolve_description, 'html') - } - } + set resolve_description "Fixed by patch #$patch_number" + + set workflow_id [bug_tracker::bug::get_instance_workflow_id] + set bug_id [bug_tracker::get_bug_id -bug_number $bug_number -project_id $package_id] + set action_id [workflow::action::get_id -workflow_id $workflow_id -short_name "resolve"] + + bug_tracker::bug::edit \ + -bug_id $bug_id \ + -action_id $action_id \ + -description $resolve_description \ + -desc_format "text/html" \ + -array bug_row } } }