view-one-day-display.tcl
Display one day calendar view Expects: date (required but empty string okay): YYYY-MM-DD show_calendar_name_p (optional): 0 or 1 start_display_hour (optional): 0-23 end_display_hour (optional): 0-23 calendar_id_list: optional list of calendar_ids export: may be "print"
- Location:
- /packages/calendar/www/view-one-day-display.tcl
Related Files
[ hide source ] | [ make this the default ]
File Contents
ad_include_contract { Display one day calendar view Expects: date (required but empty string okay): YYYY-MM-DD show_calendar_name_p (optional): 0 or 1 start_display_hour (optional): 0-23 end_display_hour (optional): 0-23 calendar_id_list: optional list of calendar_ids export: may be "print" } { {date} {show_calendar_name_p:boolean,notnull 1} {start_display_hour:integer,notnull 0} {end_display_hour:integer,notnull 23} {calendar_id_list ""} {cal_system_type ""} {export ""} {return_url:optional} } # FIXME from sloanspace calendar, they have added a system_type attribute to # cal_items table, which can be null, class, community, or personal # this is used to figure out which CSS class to use, for now we set to # empty string to use generic cal-Item css class DAVEB 20070121 set system_type "" #Display constants, should match up with default styles in calendar.css. set hour_height_inside 43 set hour_height_sep 3 set hour_height_units px set bump_right_base 0 set bump_right_delta 155 set bump_right_units px if {$calendar_id_list ne ""} { set calendars_clause [db_map dbqd.calendar.www.views.openacs_in_portal_calendar] } else { set calendars_clause [db_map dbqd.calendar.www.views.openacs_calendar] } if {$date eq ""} { # Default to today's date in the users (the connection) timezone set server_now_time [dt_systime] set user_now_time [lc_time_system_to_conn $server_now_time] set date [lc_time_fmt $user_now_time "%F"] } set current_date $date set pretty_date [lc_time_fmt $current_date %Q] set package_id [ad_conn package_id] set user_id [ad_conn user_id] multirow create items \ all_day_p \ style_class \ event_name \ event_span \ event_url \ description \ calendar_name \ weekday \ start_date \ end_date \ start_time \ end_time \ top \ height \ style \ num_attachments set previous_intervals [list] # Loop through the items without time set additional_limitations_clause " and to_char(start_date, 'HH24:MI') = to_char(end_date, 'HH24:MI')" if { $cal_system_type ne "" } { append additional_limitations_clause " and system_type = :cal_system_type " } set additional_select_clause "" set order_by_clause " order by name" set interval_limitation_clause [db_map dbqd.calendar.www.views.day_interval_limitation] #AG: the "select_all_day_items" query is identical to "select_items" #just without the Oracle +ORDERED hint, which speeds every other #query but slows this one. db_foreach dbqd.calendar.www.views.select_all_day_items {} { # Localize set pretty_weekday [lc_time_fmt $ansi_start_date "%A"] set pretty_start_date [lc_time_fmt $ansi_start_date "%x"] set pretty_end_date [lc_time_fmt $ansi_end_date "%x"] set pretty_start_time [lc_time_fmt $ansi_start_date "%X"] set pretty_end_time [lc_time_fmt $ansi_end_date "%X"] set event_url [export_vars -base [site_node::get_url_from_object_id -object_id $cal_package_id]cal-item-view { return_url {cal_item_id $item_id} }] #height will be overwritten once we know how the vertical hour span. multirow append items 1 "calendar-${system_type}Item" \ $name \ "" \ $event_url \ $description \ $calendar_name \ $pretty_weekday \ $pretty_start_date \ $pretty_end_date \ $pretty_start_time \ $pretty_end_time \ 0 \ 0 \ "left: ${bump_right_base}${bump_right_units};" \ $num_attachments incr bump_right_base $bump_right_delta } set additional_limitations_clause " and to_char(start_date, 'HH24:MI') <> to_char(end_date, 'HH24:MI')" if { $cal_system_type ne "" } { append additional_limitations_clause " and system_type = :cal_system_type " } set order_by_clause " order by to_char(start_date,'HH24:MI')" set day_items_per_hour {} set adjusted_start_display_hour $start_display_hour set adjusted_end_display_hour $end_display_hour db_foreach dbqd.calendar.www.views.select_items {} { set ansi_start_date [lc_time_system_to_conn $ansi_start_date] set ansi_end_date [lc_time_system_to_conn $ansi_end_date] # Localize set pretty_weekday [lc_time_fmt $ansi_start_date "%A"] set pretty_start_date [lc_time_fmt $ansi_start_date "%x"] set pretty_end_date [lc_time_fmt $ansi_end_date "%x"] set pretty_start_time [lc_time_fmt $ansi_start_date "%X"] set pretty_end_time [lc_time_fmt $ansi_end_date "%X"] set start_time [lc_time_fmt $ansi_start_date "%X"] set end_time [lc_time_fmt $ansi_end_date "%X"] scan [lc_time_fmt $ansi_start_date "%H"] %d start_hour scan [lc_time_fmt $ansi_end_date "%H"] %d end_hour if { $start_hour < $adjusted_start_display_hour && [string range $ansi_start_date 0 9] eq [string range $ansi_end_date 0 9] } { set adjusted_start_display_hour $start_hour } if { $end_hour > $adjusted_end_display_hour && [string range $ansi_start_date 0 9] eq [string range $ansi_end_date 0 9] } { set adjusted_end_display_hour $end_hour } set top [expr {($start_hour * ($hour_height_inside+$hour_height_sep)) + ($start_minutes*$hour_height_inside/60)}] set bottom [expr {($end_hour * ($hour_height_inside+$hour_height_sep)) + ($end_minutes*$hour_height_inside/60)}] set height [expr {$bottom - $top - 2}] set bump_right $bump_right_base foreach {previous_start previous_end} $previous_intervals { if { ($start_seconds >= $previous_start && $start_seconds < $previous_end) || ($previous_start >= $start_seconds && $previous_start < $end_seconds) } { incr bump_right $bump_right_delta } } set event_url [export_vars \ -base [site_node::get_url_from_object_id \ -object_id $cal_package_id]cal-item-view { return_url {cal_item_id $item_id} }] multirow append items 0 "calendar-${system_type}Item" \ $name \ "($start_time - $end_time)" \ $event_url \ $description \ $calendar_name \ $pretty_weekday \ $pretty_start_date \ $pretty_end_date \ $pretty_start_time \ $pretty_end_time \ $top \ $height \ "left: ${bump_right}${bump_right_units};" \ $num_attachments lappend previous_intervals $start_seconds $end_seconds } #Now correct the top attribute for the adjusted start. set num_items [multirow size items] for {set i 1} {$i <= $num_items } {incr i} { if { [multirow get items $i all_day_p] } { multirow set items $i height \ [expr {($adjusted_end_display_hour - $adjusted_start_display_hour + 1) * ($hour_height_inside + $hour_height_sep)}] } else { set currval [multirow get items $i top] multirow set items $i top \ [expr {$currval - ($adjusted_start_display_hour*($hour_height_inside+$hour_height_sep))}] } } db_1row dbqd.calendar.www.views.select_day_info {} set dates [lc_time_fmt $date "%q"] set curr_day_name [lc_time_fmt $date "%A"] set curr_month [lc_time_fmt $date "%B"] set curr_day [lc_time_fmt $date "%d"] set curr_year [lc_time_fmt $date "%Y"] #Calendar grid. set return_url [ad_return_url] set grid_start $adjusted_start_display_hour set grid_first_hour [lc_time_fmt "$current_date $grid_start:00:00" "%X"] set grid_hour $grid_start set start_time [ad_pad -left $grid_hour 2 0]:00 set grid_first_add_url [export_vars -base ${calendar_url}cal-item-new { {date $current_date} start_time return_url }] incr grid_start multirow create grid hour add_url for { set grid_hour $grid_start } { $grid_hour <= $adjusted_end_display_hour } { incr grid_hour } { set localized_grid_hour [lc_time_fmt "$current_date $grid_hour:00:00" "%X"] set start_time [ad_pad -left $grid_hour 2 0]:00 multirow append grid $localized_grid_hour \ [export_vars -base ${calendar_url}cal-item-new { {date $current_date} start_time return_url }] } if { [info exists export] && $export eq "print" } { set print_html [template::adp_parse [acs_root_dir]/packages/calendar/www/view-print-display [list &items items show_calendar_name_p $show_calendar_name_p]] ns_return 200 text/html $print_html ad_script_abort } # Local variables: # mode: tcl # tcl-indent-level: 4 # indent-tabs-mode: nil # End: