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 -r1.2
--- openacs.org-dev/packages/bug-tracker/www/index.tcl 9 Jul 2002 17:35:01 -0000 1.1
+++ openacs.org-dev/packages/bug-tracker/www/index.tcl 4 Dec 2002 16:13:28 -0000 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 "
@@ -139,41 +136,40 @@
assignee.last_name as assignee_last_name,
assignee.email as assignee_email
from bt_bugs b left outer join
- cc_users assignee on (assignee.user_id = b.assignee),
+ dir_all_users assignee on (assignee.user_id = b.assignee),
bt_bug_actions bact,
bt_components c,
acs_objects o,
bt_priority_codes pc,
bt_severity_codes sc,
- cc_users submitter
+ dir_all_users submitter
where c.component_id = b.component_id
and bact.bug_id = b.bug_id
and bact.action = 'open'
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,30 +244,52 @@
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 {
- select b.assignee as unique_id,
- assignee.first_names || ' ' || assignee.last_name as name,
- count(b.bug_id) as num_bugs
- from bt_bugs b left outer join
- cc_users assignee on (assignee.user_id = b.assignee)
- where b.project_id = :package_id
- and b.status = 'open'
- group by unique_id, name
- order by name
+db_multirow -extend { name_url stat_name } -append stats stats_by_assignee {
+SELECT bc.unique_id,cc.first_names || ' ' || cc.last_name as name, bc.num_bugs
+ FROM (SELECT b.assignee as unique_id,count(b.bug_id) as num_bugs
+ FROM bt_bugs b
+ WHERE b.project_id = :package_id
+ and b.status = 'open'
+ and b.assignee is not null
+ GROUP BY b.assignee) as bc,
+ persons cc
+ WHERE bc.unique_id = cc.person_id
+UNION
+SELECT null,null,count(*)
+ FROM bt_bugs where assignee is null
+ and project_id = :package_id
+ and status = 'open'
+ORDER BY name
} {
set stat_name "Assigned To"
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
+ dir_all_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 +300,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