view-month-display.tcl
Display one week calendar view Expects: date (empty string okay): YYYY-MM-DD show_calendar_name_p (optional): 0 or 1 calendar_id_list: optional list of calendar_ids export: may be "print"
- Location:
- /packages/calendar/www/view-month-display.tcl
Related Files
[ hide source ] | [ make this the default ]
File Contents
ad_include_contract { Display one week calendar view Expects: date (empty string okay): YYYY-MM-DD show_calendar_name_p (optional): 0 or 1 calendar_id_list: optional list of calendar_ids export: may be "print" } { {date ""} {show_calendar_name_p:boolean,notnull 1} {calendar_id_list ""} {export ""} {return_url:optional} } set system_type "" 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 "%x"] } if { $export ne "" } { set exporting_p 1 } else { set exporting_p 0 } if {![info exists return_url]} { set return_url [ad_urlencode "../"] } 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] } lassign [dt_ansi_to_list $date] this_year this_month this_day set dt_info [dt_get_info -dict $date] set prev_month [dict get $dt_info prev_month] set next_month [dict get $dt_info next_month] set first_julian_date_of_month [dict get $dt_info first_julian_date_of_month] set last_julian_date_in_month [dict get $dt_info last_julian_date_in_month] set first_day [dict get $dt_info first_day] set month_string [lindex [dt_month_names] $this_month-1] set package_id [ad_conn package_id] set user_id [ad_conn user_id] set today_date [dt_sysdate] set previous_month_url ?[export_vars {{view month} {date $prev_month} page_num}] set next_month_url ?[export_vars {{view month} {date $next_month} page_num}] set first_day_of_week [lc_get firstdayofweek] set last_day_of_week [expr {($first_day_of_week + 6) % 7}] set week_days [lc_get day] multirow create weekday_names weekday_num weekday_long for {set i 0} {$i < 7} {incr i} { set i_day [expr {($i + $first_day_of_week) % 7}] multirow append weekday_names $i_day [lindex $week_days $i_day] } # Get the beginning and end of the month in the system timezone set first_date_of_month [dt_julian_to_ansi $first_julian_date_of_month] set last_date_in_month [dt_julian_to_ansi $last_julian_date_in_month] set first_date_of_month_system "$first_date_of_month 00:00:00" set last_date_in_month_system "$last_date_in_month 23:59:59" set day_number $first_day set today_ansi_list [dt_ansi_to_list $today_date] set today_julian_date [dt_ansi_to_julian [lindex $today_ansi_list 0] [lindex $today_ansi_list 1] [lindex $today_ansi_list 2]] # Create the multirow that holds the calendar information multirow create items \ event_name \ event_url \ description \ calendar_name \ pretty_date \ start_date \ end_date \ start_time \ end_time \ status_summary \ day_number \ beginning_of_week_p \ end_of_week_p \ today_p \ outside_month_p \ time_p \ add_url \ day_url \ style_class \ num_attachments \ weekday_num \ id # Calculate number of greyed days and then add them to the calendar mulitrow set greyed_days_before_month [expr {[dt_first_day_of_month $this_year $this_month] - 1}] set greyed_days_before_month [expr {($greyed_days_before_month + 7 - $first_day_of_week) % 7}] if { !$exporting_p } { # These "items" are for used for display purposes only. for {set current_day 0} {$current_day < $greyed_days_before_month} {incr current_day} { if {$current_day == 0} { set beginning_of_week_p t } else { set beginning_of_week_p f } multirow append items \ "" \ "" \ "" \ "" \ "" \ "" \ "" \ "" \ "" \ "" \ "" \ $beginning_of_week_p \ f \ "" \ t \ "" \ "" \ "" \ "" \ "" \ "" \ "" } } set current_day $first_julian_date_of_month set order_by_clause " order by ansi_start_date, ansi_end_date" set additional_limitations_clause "" set additional_select_clause "" set interval_limitation_clause [db_map dbqd.calendar.www.views.month_interval_limitation] db_foreach dbqd.calendar.www.views.select_items {} { if { $ansi_start_date eq $ansi_end_date } { set time_p 0 } else { set time_p 1 # Convert from system timezone to user timezone 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 julian_start_date [dt_ansi_to_julian_single_arg $ansi_start_date] if {!$exporting_p && $current_day < $julian_start_date} { for {} {$current_day < $julian_start_date} {incr current_day} { array set display_information \ [calendar::get_month_multirow_information \ -current_day $current_day \ -today_julian_date $today_julian_date \ -first_julian_date_of_month $first_julian_date_of_month] set current_day_ansi [dt_julian_to_ansi $current_day] set add_url [export_vars -base ${calendar_url}cal-item-new { {date $current_day_ansi} {start_time ""} {end_time ""} }] multirow append items \ "" \ "" \ "" \ "" \ [lc_time_fmt [dt_julian_to_ansi $current_day] %Q] \ "" \ "" \ "" \ "" \ "" \ $display_information(day_number) \ $display_information(beginning_of_week_p) \ $display_information(end_of_week_p) \ $display_information(today_p) \ f \ 0 \ $add_url \ ?[export_vars {{view day} {date $current_day_ansi} page_num}] \ "calendar-${system_type}Item" \ $num_attachments \ [lc_time_fmt $current_day_ansi %w] \ month-calendar-$current_day_ansi add_body_script -script [subst { var e = document.getElementById('month-calendar-$current_day_ansi'); e.addEventListener('click', function (event) { if (event.target.className == 'cal-month-day') { location.href = '$add_url'; } }); e.addEventListener('keypress', function (event) { event.preventDefault(); acs_KeypressGoto('$add_url',event); }); }] } } array set display_information \ [calendar::get_month_multirow_information \ -current_day $current_day \ -today_julian_date $today_julian_date \ -first_julian_date_of_month $first_julian_date_of_month] set current_day_ansi [dt_julian_to_ansi $current_day] set add_url [export_vars -base ${calendar_url}cal-item-new { {date $current_day_ansi} {start_time ""} {end_time ""} }] multirow append items \ $name \ [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} }] \ $description \ $calendar_name \ [lc_time_fmt $current_day_ansi %Q] \ $pretty_start_date \ $pretty_end_date \ $pretty_start_time \ $pretty_end_time \ "" \ $display_information(day_number) \ $display_information(beginning_of_week_p) \ $display_information(end_of_week_p) \ $display_information(today_p) \ f \ $time_p \ $add_url \ ?[export_vars {{view day} {date $current_day_ansi} page_num}] \ "calendar-${system_type}Item" \ $num_attachments \ [lc_time_fmt $current_day_ansi %w] \ month-calendar-$current_day_ansi } if { !$exporting_p } { # These "items" are for used for display purposes only. # Add cells for remaining days inside the month for {} {$current_day <= $last_julian_date_in_month} {incr current_day} { array set display_information \ [calendar::get_month_multirow_information \ -current_day $current_day \ -today_julian_date $today_julian_date \ -first_julian_date_of_month $first_julian_date_of_month] set current_day_ansi [dt_julian_to_ansi $current_day] set add_url [export_vars -base ${calendar_url}cal-item-new { {date $current_day_ansi} {start_time ""} {end_time ""} }] multirow append items \ "" \ "" \ "" \ "" \ [lc_time_fmt $current_day_ansi %Q] \ "" \ "" \ "" \ "" \ "" \ $display_information(day_number) \ $display_information(beginning_of_week_p) \ $display_information(end_of_week_p) \ $display_information(today_p) \ f \ 0 \ $add_url \ ?[export_vars {{view day} {date $current_day_ansi} page_num}] \ "" \ "" \ [lc_time_fmt $current_day_ansi %w] \ month-calendar-$current_day_ansi add_body_script -script [subst { var e = document.getElementById('month-calendar-$current_day_ansi'); e.addEventListener('click', function (event) { location.href = '$add_url'; }); e.addEventListener('keypress', function (event) { event.preventDefault(); acs_KeypressGoto('$add_url',event); }); }] } # Add cells for remaining days outside the month set remaining_days [expr {($first_day_of_week + 6 - $current_day % 7) % 7}] if {$remaining_days > 0} { for {} {$current_day <= $last_julian_date_in_month + $remaining_days} {incr current_day} { multirow append items \ "" \ "" \ "" \ "" \ "" \ "" \ "" \ "" \ "" \ "" \ "" \ f \ f \ "" \ t \ "" \ "" \ "" \ "" \ "" \ "" \ "" } } } if { $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: