Index: openacs-4/packages/logger/lib/entries.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/logger/lib/entries.tcl,v diff -u -r1.3 -r1.4 --- openacs-4/packages/logger/lib/entries.tcl 5 Jan 2004 21:05:27 -0000 1.3 +++ openacs-4/packages/logger/lib/entries.tcl 11 Jan 2004 17:52:40 -0000 1.4 @@ -27,6 +27,17 @@ set weekdayno [clock format [clock seconds] -format %w] set monthdayno [string trimleft [clock format [clock seconds] -format %d] 0] +# 1. get category-trees mapped to projects in this logger +set project_ids [logger::package::all_projects_in_package -package_id [ad_conn package_id]] +array set tree_id_array [list] +foreach id $project_ids { + foreach elm [category_tree::get_mapped_trees $id] { + set tree_id_array([lindex $elm 0]) . + } +} +set tree_ids [array names tree_id_array] + + # Projections set projection_values [list] if { [exists_and_not_null project_id] } { @@ -40,9 +51,79 @@ # Projects set project_values [db_list_of_lists select_projects {}] - # Define the list +set elements { + edit { + label {} + display_template { + + Edit + + } + } + project_id { + display_col project_name + label "Project" + hide_p {[ad_decode [exists_and_not_null project_id] 1 1 0]} + } + user_id { + label "User" + display_col user_name + link_url_eval {[acs_community_member_url -user_id $user_id]} + csv_col user_name + hide_p {[ad_decode [exists_and_not_null user_id] 1 1 0]} + } + time_stamp { + label "Date" + display_col time_stamp_pretty + aggregate_label {[ad_decode $variable(type) "additive" "Total" "Average"]} + aggregate_group_label {[ad_decode $variable(type) "additive" "Group total" "Group Average"]} + } + value { + label $variable(name) + link_url_eval {log?[export_vars { entry_id }]} + link_html { title "View this entry" } + aggregate {[ad_decode $variable(type) "additive" sum average]} + html { align right } + display_eval {[lc_numeric $value]} + } + description { + label "Description" + display_eval {[string_truncate -len 50 -- $description]} + link_url_eval {log?[export_vars { entry_id }]} + link_html { title "View this entry" } + } + description_long { + label "Description" + display_eval {[string_truncate -len 400 -- $description]} + hide_p 1 + link_url_eval {log?[export_vars { entry_id }]} + link_html { title "View this entry" } + } +} + +set normal_row { + checkbox {} + edit {} + project_id {} + user_id {} + time_stamp {} +} + +foreach id $tree_ids { + set id_var c_${id}_category_id + set cmd "join \[category::get_names \$$id_var\] \", \"" + lappend elements c_${id}_category_id \ + [list label \[[list category_tree::get_name $id]\] \ + display_eval \[$cmd\]] + lappend normal_row c_${id}_category_id {} +} + +lappend normal_row value {} description {} + list::create \ -name entries \ -multirow entries \ @@ -59,58 +140,8 @@ "Add Entry" "project-select" "Add new log entry" } -bulk_actions { "Delete" "log-delete" "Delete checked entries" - } -elements { - edit { - label {} - display_template { - - Edit - - } - } + } -elements $elements -filters { project_id { - display_col project_name - label "Project" - hide_p {[ad_decode [exists_and_not_null project_id] 1 1 0]} - } - user_id { - label "User" - display_col user_name - link_url_eval {[acs_community_member_url -user_id $user_id]} - csv_col user_name - hide_p {[ad_decode [exists_and_not_null user_id] 1 1 0]} - } - time_stamp { - label "Date" - display_col time_stamp_pretty - aggregate_label {[ad_decode $variable(type) "additive" "Total" "Average"]} - aggregate_group_label {[ad_decode $variable(type) "additive" "Group total" "Group Average"]} - } - value { - label $variable(name) - link_url_eval {log?[export_vars { entry_id }]} - link_html { title "View this entry" } - aggregate {[ad_decode $variable(type) "additive" sum average]} - html { align right } - display_eval {[lc_numeric $value]} - } - description { - label "Description" - display_eval {[string_truncate -len 50 -- $description]} - link_url_eval {log?[export_vars { entry_id }]} - link_html { title "View this entry" } - } - description_long { - label "Description" - display_eval {[string_truncate -len 400 -- $description]} - hide_p 1 - link_url_eval {log?[export_vars { entry_id }]} - link_html { title "View this entry" } - } - } -filters { - project_id { label "Projects" values $project_values where_clause { @@ -247,15 +278,7 @@ normal { label "Table" layout table - row { - checkbox {} - edit {} - project_id {} - user_id {} - time_stamp {} - value {} - description {} - } + row $normal_row } detailed { label "Detailed table" @@ -309,20 +332,71 @@ } } +# TODO: Filter by category +# TODO: Order by category tree -# This query will override the ad_page_contract value entry_id +# TODO: With multiple categories from the same tree, make sure they're listed in correct sort_order -db_multirow -extend { edit_url delete_url delete_onclick } -unclobber entries select_entries " + +# We add a virtual column per category tree + +set extend { edit_url delete_url delete_onclick time_stamp_pretty } +foreach id $tree_ids { + lappend extend c_${id}_category_id +} + +array set row_categories [list] + +db_multirow -extend $extend -unclobber entries select_entries2 " + select le.entry_id, + acs_permission__permission_p(le.entry_id, :current_user_id, 'delete') as delete_p, + acs_permission__permission_p(le.entry_id, :current_user_id, 'write') as edit_p, + le.time_stamp, + to_char(le.time_stamp, 'YYYY-MM-DD HH24:MI:SS') as time_stamp_ansi, + to_char(le.time_stamp, 'IW-YYYY') as time_stamp_week, + le.value, + le.description, + lp.project_id, + lp.name as project_name, + submitter.user_id, + submitter.first_names || ' ' || submitter.last_name as user_name, + c.category_id, + c.tree_id + from logger_entries le left outer join + category_object_map_tree c on (c.object_id = le.entry_id), + logger_projects lp, + acs_objects ao, + cc_users submitter + where le.project_id = lp.project_id + and ao.object_id = le.entry_id + and ao.creation_user = submitter.user_id + [list::filter_where_clauses -and -name "entries"] + [list::orderby_clause -orderby -name "entries"] " { - set selected_p [string equal [ns_queryget entry_id] $entry_id] - set edit_url "log?[export_vars { entry_id { edit t } }]" - set edit_p [ad_decode [expr [ad_decode $edit_p "t" 1 0] || ($user_id == [ad_conn user_id])] 1 "t" "f"] - if { $delete_p } { - set delete_onclick "return confirm('Are you sure you want to delete log entry with $value $variable(unit) $variable(name) on $time_stamp?');" - set delete_url "log-delete?[export_vars { entry_id }]" + if { ![empty_string_p $tree_id] && ![empty_string_p $category_id] } { + lappend row_categories($tree_id) $category_id + } + + if { ![db_multirow_group_last_row_p -column entry_id] } { + continue } else { - set delete_url "" + set selected_p [string equal [ns_queryget entry_id] $entry_id] + set edit_url [export_vars -base log { entry_id { edit t } { return_url [ad_return_url] } }] + set edit_p [ad_decode [expr [ad_decode $edit_p "t" 1 0] || ($user_id == [ad_conn user_id])] 1 "t" "f"] + if { $delete_p } { + set delete_onclick "return confirm('Are you sure you want to delete log entry with $value $variable(unit) $variable(name) on $time_stamp?');" + set delete_url [export_vars -base log-delete { entry_id }] + } else { + set delete_url {} + } + set time_stamp_pretty [lc_time_fmt $time_stamp_ansi "%x"] + + foreach tree_id [array names row_categories] { + set c_${tree_id}_category_id $row_categories($tree_id) + } + + array unset row_categories } } Index: openacs-4/packages/logger/tcl/package-procs.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/logger/tcl/package-procs.tcl,v diff -u -r1.5 -r1.6 --- openacs-4/packages/logger/tcl/package-procs.tcl 5 Jan 2004 20:54:25 -0000 1.5 +++ openacs-4/packages/logger/tcl/package-procs.tcl 11 Jan 2004 17:52:40 -0000 1.6 @@ -1,17 +1,13 @@ ad_library { -

- Procedures in the logger::package namespace. Those procedures + Procedures the logger::package namespace. Those procedures operate on logger package objects. -

-

- Unlike many other -procs.tcl files in the logger package this - file contains no ::new and ::delete procedures. The reason - is that packages are created by the APM proc apm_package_instance_new. - When the logger application needs extra data to be setup for package - instances this would be done in an after-instantiate callback in - the file apm-callback-procs.tcl. -

+ Unlike many other -procs.tcl files in the logger package this + file contains no ::new and ::delete procedures. The reason + is that packages are created by the APM proc apm_package_instance_new. + When the logger application needs extra data to be setup for package + instances this would be done in an after-instantiate callback in + the file apm-callback-procs.tcl. @creation-date 4:th of April 2003 @author Peter Marklund (peter@collaboraid.biz) @@ -39,7 +35,7 @@ ad_proc -public logger::package::all_projects_in_package { {-package_id:required} } { - Return a list of ids for all logger projects mapped to the given package.x + Return a list of ids for all logger projects mapped to the given package. @param package_id The id of the package to return projects for Index: openacs-4/packages/logger/www/log.adp =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/logger/www/log.adp,v diff -u -r1.11 -r1.12 --- openacs-4/packages/logger/www/log.adp 5 Jan 2004 20:23:50 -0000 1.11 +++ openacs-4/packages/logger/www/log.adp 11 Jan 2004 17:52:40 -0000 1.12 @@ -1,7 +1,7 @@ @page_title;noquote@ @context;noquote@ -log_entry_form.value +log_entry_form.category_id