im_force_user_to_log_hours conn args whyWhat it does:
If a user is not on vacation and has not logged hours since yesterday midnight, we ask them to log hours before using the intranet. Sets state in session so user is only asked once per session.Defined in: /web/philip/tcl/intranet-defs.tcl
Source code:
if { ![im_enabled_p] || ![ad_parameter TrackHours intranet 0] } {
# intranet or hours-logging not turned on. Do nothing
return filter_ok
}
set last_prompted_time [ad_get_client_property intranet user_asked_to_log_hours_p]
if { ![empty_string_p $last_prompted_time] && $last_prompted_time > [expr [ns_time] - 60*60*24] } {
# We have already asked the user in this session, within the last 24 hours,
# to log their hours
return filter_ok
}
# Let's see if the user has logged hours since
# yesterday midnight.
#
set user_id [ad_get_user_id]
if { $user_id == 0 } {
# This can't happen on standard acs installs since intranet is protected
# But we check any way to prevent bugs on other installations
return filter_ok
}
set db [ns_db gethandle]
set selection [ns_db 1row $db "select decode(count(1),0,0,1) as logged_hours_p,
to_char(sysdate - 1,'J') as julian_date
from im_hours h, users u
where h.user_id = '$user_id'
and h.user_id = u.user_id
and h.hours > 0
and h.day <= sysdate
and (u.on_vacation_until >= sysdate
or h.day >= trunc(u.second_to_last_visit-1))"]
set_variables_after_query
ns_db releasehandle $db
# Let's make a note that the user has been prompted
# to update hours or is okay. This saves us the database
# hit next time.
ad_set_client_property -persistent f intranet user_asked_to_log_hours_p [ns_time]
if { $logged_hours_p } {
# The user has either logged their hours or
# is on vacation right now
return filter_ok
}
# Pull up the screen to log hours for yesterday
set return_url [im_url_with_query]
ad_returnredirect "[im_url_stub]/hours/ae?[export_url_vars return_url julian_date]"
return filter_return