Index: openacs.org-dev/packages/bug-tracker/www/index.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs.org-dev/packages/bug-tracker/www/index.tcl,v diff -u -r1.1.1.1 -r1.1.1.2 --- openacs.org-dev/packages/bug-tracker/www/index.tcl 9 Jul 2002 17:35:01 -0000 1.1.1.1 +++ openacs.org-dev/packages/bug-tracker/www/index.tcl 8 Oct 2002 15:46:57 -0000 1.1.1.2 @@ -2,28 +2,32 @@ Bug listing page. @author Lars Pind (lars@pinds.com) - @date 2002-03-20 + @creation-date 2002-03-20 @cvs-id $Id$ } { - {status:optional "open"} - bug_type:optional - fix_for_version:integer,optional - severity:integer,optional - priority:integer,optional - assignee:integer,optional - component_id:integer,optional + filter:optional,array } ad_require_permission [ad_conn package_id] read -set project_name [bt_conn project_name] +set project_name [bug_tracker::conn project_name] set package_id [ad_conn package_id] set package_key [ad_conn package_key] -set context_bar [ad_context_bar] +if { [info exists filter] } { + if { [array names filter] == [list "actionby"] && $filter(actionby) == [ad_conn user_id] } { + set context_bar [bug_tracker::context_bar "My bugs"] + } else { + set context_bar [bug_tracker::context_bar "Filtered bug list"] + } +} else { + set context_bar [bug_tracker::context_bar] +} set admin_p [ad_permission_p [ad_conn package_id] admin] +set return_url "[ad_conn url][ad_decode [ad_conn query] "" "" "?[ad_conn query]"]" + set num_components [db_string num_components { select count(component_id) from bt_components where project_id = :package_id }] if { $num_components == 0 } { @@ -38,66 +42,59 @@ return } +set user_id [ad_conn user_id] +# Notifications for a project. Provide a link for logged in users +set notification_link [bug_tracker::get_notification_link \ + -type bug_tracker_project_notif \ + -object_id $package_id \ + -url $return_url \ + -pretty_name "project"] + # # Filter management # -set where_clauses [list] +set filter_parsed [bug_tracker::parse_filters filter] -set filter_vars { status fix_for_vresion assignee component_id } +set human_readable_filter [bug_tracker::conn filter_human_readable] +set where_clauses [bug_tracker::conn filter_where_clauses] +set order_by_clause [bug_tracker::conn filter_order_by_clause] -if { [info exists status] } { - lappend where_clauses "b.status = :status" - set human_readable_filter "All $status bugs" -} else { - set human_readable_filter "All bugs" -} +lappend where_clauses "b.project_id = :package_id" -if { [info exists bug_type] } { - lappend where_clauses "b.bug_type = :bug_type" - append human_readable_filter " of type [bt_bug_type_pretty $bug_type]" +if { [llength [array names filter]] > 0 } { + set clear_url [ad_conn package_url] } -if { [info exists assignee] } { - if { [empty_string_p $assignee] } { - lappend where_clauses "b.assignee is null" - append human_readable_filter " that are unassigned" - } else { - lappend where_clauses "b.assignee = :assignee" - if { $assignee == [ad_conn user_id] } { - append human_readable_filter " assigned to me" - } else { - append human_readable_filter " assigned to [db_string assignee_name { select first_names || ' ' || last_name from cc_users where user_id = :assignee }]" - } - } -} +# +# Order by +# -if { [info exists severity] } { - lappend where_clauses "b.severity = :severity" - append human_readable_filter " where severity is [db_string severity_name { select severity_name from bt_severity_codes where severity_id = :severity }]" +if { [info exists filter(orderby)] } { + set save_orderby $filter(orderby) + unset filter(orderby) } - -if { [info exists priority] } { - lappend where_clauses "b.priority = :priority" - append human_readable_filter " with a priority of [db_string priority_name { select priority_name from bt_priority_codes where priority_id = :priority }]" +set displaymode_form_export_vars [export_vars -form { filter:array }] +if { [info exists save_orderby] } { + set filter(orderby) $save_orderby + unset save_orderby } -if { [info exists component_id] } { - lappend where_clauses "b.component_id = :component_id" - append human_readable_filter " in [db_string component_name { select component_name from bt_components where component_id = :component_id }]" -} - -if { [info exists fix_for_version] } { - if { [empty_string_p $fix_for_version] } { - lappend where_clauses "b.fix_for_version is null" - append human_readable_filter " where fix for version is undecided" +multirow create orderby value label selected_p +foreach value { "" severity priority } label { "Bug number" "Severity" "Priority" } { + if { [info exists filter(orderby)] && [string equal $filter(orderby) $value] } { + set selected_p 1 } else { - lappend where_clauses "b.fix_for_version = :fix_for_version" - append human_readable_filter " to be fixed in version [db_string version_name { select version_name from bt_versions where version_id = :fix_for_version }]" + set selected_p 0 } + multirow append orderby $value $label $selected_p } +# +# Get bug list +# + set truncate_len [ad_parameter "TruncateDescriptionLength" -default 200] db_multirow -extend { description_short submitter_url status_pretty resolution_pretty bug_type_pretty original_esimate_pretty latest_estimate_pretty elapsed_time_pretty assignee_url bug_url } bugs bugs " @@ -152,28 +149,27 @@ and o.object_id = b.bug_id and pc.priority_id = b.priority and sc.severity_id = b.severity - and b.project_id = :package_id and submitter.user_id = o.creation_user - [ad_decode $where_clauses "" "" "and [join $where_clauses " and "]"] - order by b.bug_number desc + and [join $where_clauses " and "] + order by $order_by_clause " { - set desc_as_text [bt_bug_convert_comment_to_text -comment $description -format $desc_format] - if { [string length $desc_as_text] > $truncate_len } { - set description_short "[util_close_html_tags [string range $desc_as_text 0 $truncate_len]]..." - } else { - set description_short [util_close_html_tags $desc_as_text] - } + set description_short [string_truncate -len $truncate_len -format $desc_format $description] + set summary [ad_quotehtml $summary] set submitter_url [acs_community_member_url -user_id $submitter_user_id] - set status_pretty [bt_status_pretty $status] - set resolution_pretty [bt_resolution_pretty $resolution] - set bug_type_pretty [bt_bug_type_pretty $bug_type] + set status_pretty [bug_tracker::status_pretty $status] + set resolution_pretty [bug_tracker::resolution_pretty $resolution] + set bug_type_pretty [bug_tracker::bug_type_pretty $bug_type] set original_estimate_pretty [ad_decode $original_estimate_minutes "" "" 0 "" "$original_estimate_minutes minutes"] set latest_estimate_pretty [ad_decode $latest_estimate_minutes "" "" 0 "" "$latest_estimate_minutes minutes"] set elapsed_time_pretty [ad_decode $elapsed_time_minutes "" "" 0 "" "$elapsed_time_minutes minutes"] set assignee_url [acs_community_member_url -user_id $assignee_user_id] - set bug_url "bug?[export_vars -url { bug_number }]" + set bug_url "bug?[export_vars { bug_number filter:array }]" } +# +# Get stats +# + db_multirow -extend { name name_url } by_status by_status { select b.status as unique_id, count(b.bug_id) as num_bugs @@ -182,11 +178,11 @@ group by unique_id order by bt_bug__status_sort_order(b.status) } { - set name "[bt_status_pretty $unique_id] Bugs" - set name_url "?[export_vars -url { { status $unique_id } }]" + set name "[bug_tracker::status_pretty $unique_id] Bugs" + set name_url "?[export_vars { { filter.status $unique_id } }]" } -db_multirow -extend { name name_url stat_name } stats stats { +db_multirow -extend { name name_url stat_name } stats stats_by_bug_type { select b.bug_type as unique_id, count(b.bug_id) as num_bugs from bt_bugs b @@ -196,11 +192,11 @@ order by bt_bug__bug_type_sort_order(b.bug_type) } { set stat_name "Type of bug" - set name [bt_bug_type_pretty $unique_id] - set name_url "?[export_vars -url { { bug_type $unique_id } }]" + set name [bug_tracker::bug_type_pretty $unique_id] + set name_url "?[export_vars { { filter.bug_type $unique_id } }]" } -db_multirow -extend { name_url stat_name } -append stats stats { +db_multirow -extend { name_url stat_name } -append stats stats_by_fix_for_version { select b.fix_for_version as unique_id, v.version_name as name, count(b.bug_id) as num_bugs @@ -215,10 +211,12 @@ if { [empty_string_p $unique_id] } { set name "Undecided" } - set name_url "?[export_vars -url { { fix_for_version $unique_id } }]" + set name_url "?[export_vars { { filter.fix_for_version $unique_id } }]" } -db_multirow -extend { name_url stat_name } -append stats stats { +set stat_name_val "Severity" + +db_multirow -extend { name_url stat_name } -append stats stats_by_severity { select b.severity as unique_id, p.sort_order || ' - ' || p.severity_name as name, count(b.bug_id) as num_bugs @@ -229,11 +227,13 @@ group by unique_id, name order by name } { - set stat_name "Severity" - set name_url "?[export_vars -url { { severity $unique_id } }]" + set stat_name $stat_name_val + set name_url "?[export_vars { { filter.severity $unique_id } }]" } -db_multirow -extend { name_url stat_name } -append stats stats { +set stat_name_val "Priority" + +db_multirow -extend { name_url stat_name } -append stats stats_by_priority { select b.priority as unique_id, p.sort_order || ' - ' || p.priority_name as name, count(b.bug_id) as num_bugs @@ -244,11 +244,11 @@ group by unique_id, name order by name } { - set stat_name "Priority" - set name_url "?[export_vars -url { { priority $unique_id } }]" + set stat_name $stat_name_val + set name_url "?[export_vars { { filter.priority $unique_id } }]" } -db_multirow -extend { name_url stat_name } -append stats stats { +db_multirow -extend { name_url stat_name } -append stats stats_by_assignee { select b.assignee as unique_id, assignee.first_names || ' ' || assignee.last_name as name, count(b.bug_id) as num_bugs @@ -263,11 +263,27 @@ if { [empty_string_p $unique_id] } { set name "Unassigned" } - set name_url "?[export_vars -url { { assignee $unique_id } }]" + set name_url "?[export_vars -url { { filter.assignee $unique_id } }]" } -db_multirow -extend { name_url stat_name } -append stats stats { - select b.component_id as unique_id, +db_multirow -extend { name_url stat_name } -append stats stats_by_actionby { + select o.creation_user as unique_id, + submitter.first_names || ' ' || submitter.last_name as name, + count(b.bug_id) as num_bugs + from bt_bugs b join + acs_objects o on (object_id = bug_id) join + cc_users submitter on (submitter.user_id = o.creation_user) + where b.project_id = :package_id + and b.status = 'resolved' + group by unique_id, name + order by name +} { + set stat_name "To Be Verified By" + set name_url "?[export_vars -url { { filter.status resolved } { filter.actionby $unique_id } }]" +} + +db_multirow -extend { name_url stat_name } -append stats stats_by_component { + select coalesce('com/'||c.url_name||'/', trim(to_char(c.component_id,'99999999'))) as unique_id, c.component_name as name, count(b.bug_id) as num_bugs from bt_bugs b left join @@ -278,7 +294,11 @@ order by name } { set stat_name "Components" - set name_url "?[export_vars -url { { component_id $unique_id } }]" + if { [string match "com/*" $unique_id] } { + set name_url "[ad_conn package_url]$unique_id" + } else { + set name_url "[ad_conn package_url]?[export_vars -url { { filter.component_id $unique_id } }]" + } } ad_return_template