Index: openacs-4/packages/logger/www/log.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/logger/www/log.tcl,v diff -u -r1.9 -r1.10 --- openacs-4/packages/logger/www/log.tcl 9 May 2003 15:07:48 -0000 1.9 +++ openacs-4/packages/logger/www/log.tcl 28 Aug 2003 09:45:30 -0000 1.10 @@ -8,6 +8,8 @@ entry_id:integer,optional project_id:integer,optional variable_id:integer,optional + {edit:boolean "f"} + {return_url "."} } -validate { project_id_required_in_add_mode { # For the sake of simplicity of the form @@ -29,41 +31,10 @@ if { [string equal [form get_action log_entry_form] "done"] } { # User is done editing - redirect back to index page - ad_returnredirect . + ad_returnredirect $return_url ad_script_abort } -# Different page title and form mode when adding a log entry -# versus displaying/editing one -if { [exists_and_not_null entry_id] } { - # Initial request in display or edit mode or a submit of the form - set page_title "Edit Log Entry" - set ad_form_mode edit -} else { - # Initial request in add mode - set page_title "Add Log Entry" - set ad_form_mode edit -} - -set context [list $page_title] - -# Build the log entry form elements -set actions [list] -if { $entry_exists_p && [permission::permission_p -object_id $entry_id -privilege write] } { - lappend actions { Edit formbuilder::edit } -} -lappend actions { Done done } - -ad_form -name log_entry_form -cancel_url index -mode $ad_form_mode \ - -actions $actions -form { - entry_id:key(acs_object_id_seq) -} - -# On various occasions we need to know if we are dealing with a submit with the -# form or an initial request (could also be with error message after unaccepted submit) -set submit_p [form is_valid log_entry_form] - - ########### # # Get project and variable info @@ -102,6 +73,49 @@ # ########### +# The creator of a log entry can always edit it +if { $entry_exists_p } { + set edit_p [expr [permission::permission_p -object_id $entry_id -privilege write] || \ + $current_user_id == $entry_array(creation_user)] +} else { + set edit_p 0 +} + +# Different page title and form mode when adding a log entry +# versus displaying/editing one +if { [exists_and_not_null entry_id] } { + # Initial request in display or edit mode or a submit of the form + set page_title "Edit Log Entry" + if { [string equal $edit "t"] && $edit_p } { + set ad_form_mode edit + } else { + set ad_form_mode display + } +} else { + # Initial request in add mode + set page_title "Add Log Entry" + set ad_form_mode edit +} + +set context [list $page_title] + + +# Build the log entry form elements +set actions [list] +if { $edit_p } { + lappend actions { Edit formbuilder::edit } +} +lappend actions { Done done } + +ad_form -name log_entry_form -cancel_url $return_url -mode $ad_form_mode \ + -actions $actions -form { + entry_id:key(acs_object_id_seq) +} + +# On various occasions we need to know if we are dealing with a submit with the +# form or an initial request (could also be with error message after unaccepted submit) +set submit_p [form is_valid log_entry_form] + ad_form -extend -name log_entry_form -form { {project:text(inform) {label Project} @@ -115,6 +129,8 @@ {variable_id:integer(hidden) {value $variable_id} } + + {return_url:text(hidden) {value $return_url}} } # Add form elements common to all modes @@ -194,8 +210,7 @@ -time_stamp $time_stamp_ansi \ -description $description } -after_submit { - - ad_returnredirect "[ad_conn url]?[export_vars { project_id variable_id }]" + ad_returnredirect "[ad_conn url]?[export_vars { project_id variable_id return_url }]" ad_script_abort } @@ -215,12 +230,41 @@ set show_log_history_p [expr $entry_edited_by_owner_p || ! $entry_exists_p] -set log_history_n_days 31 -set seconds_per_day [expr 60*60*24] -set start_date_seconds [expr [clock seconds] - $log_history_n_days * $seconds_per_day] -set start_date_ansi [clock format $start_date_seconds \ - -format "%Y-%m-%d"] +if { $show_log_history_p } { + # Show N number of days previous to the last logged entry by the user + set ansi_format_string "%Y-%m-%d" + set last_logged_date [db_string last_logged_date { + select to_char(le.time_stamp, 'YYYY-MM-DD') + from logger_entries le, + acs_objects ao + where le.entry_id = ao.object_id + and le.variable_id = :variable_id + and le.project_id = :project_id + and ao.creation_user = :current_user_id + and ao.creation_date = (select max(ao.creation_date) + from logger_entries le, + acs_objects ao + where le.entry_id = ao.object_id + and le.variable_id = :variable_id + and le.project_id = :project_id + and ao.creation_user = :current_user_id + ) + } -default ""] + if { ![empty_string_p $last_logged_date] } { + set end_date_ansi $last_logged_date + set end_date_seconds [clock scan $end_date_ansi] + } else { + # Default end date to now + set end_date_seconds [clock seconds] + set end_date_ansi [clock format $end_date_seconds -format $ansi_format_string] + } + set log_history_n_days 31 + set seconds_per_day [expr 60*60*24] + set start_date_seconds [expr $end_date_seconds - $log_history_n_days * $seconds_per_day] + set start_date_ansi [clock format $start_date_seconds \ + -format $ansi_format_string] +} set add_entry_url "log?[export_vars { project_id variable_id }]"