function get_recurrence_dates($event_start_date, $event_end_date, $recur_end_date = '', $recur_frequency = '', $recur_interval = '') { $recur_interval = strtolower($recur_interval); //echo "<br />Start Date: ".$event_start_date."<br />"; //echo "End Date: ".$event_end_date."<br />"; //echo "Recur Date: ".$recur_end_date."<br />"; //echo "Interval: ".$recur_interval."<br /><br />"; $days_span = days_span($event_start_date, $event_end_date); //echo "Days Span: ".$days_span."<br />"; // For each day we will attempt to determine the // recurrence dates for this event. $recur_days = array(); $recur_days[] = $event_start_date; // Define Date "Values" for Numeric Comparison $recur_end_date_value = implode("", explode("-", $recur_end_date)) + 0; $event_end_date_value = implode("", explode("-", $event_end_date)) + 0; // Define Variables for Recur Monthly by Weekday Occurence of the Month list($start_year, $start_month, $start_day) = explode("-", $event_start_date); $start_weekday = weekday_of_the_month($event_start_date); $start_weekday_occurrence = weekday_occurrence($event_start_date); $recur_date_value = 0; $i = 1; if ($recur_end_date_value > $event_end_date_value && $recur_interval != '' && $recur_interval != 'none' && $recur_end_date != '') { while ($recur_date_value < $recur_end_date_value && $i < 100) { // Recur Daily if ($recur_interval == 'day') { $recur_date = add_delta_ymd($event_start_date, 0, 0, $i * $recur_frequency); // Recur Weekly } elseif ($recur_interval == 'week') { $recur_date = add_delta_ymd($event_start_date, 0, 0, $i * 7 * $recur_frequency); // Recur Monthly by Day of the Month } elseif ($recur_interval == 'day-month') { $recur_date = add_delta_ymd($event_start_date, 0, $i * $recur_frequency, 0); // Recur Monthly by Weekday Occurence of the Month (The Difficult One!) } elseif ($recur_interval == 'weekday-month') { $new_month = $start_month + $i * $recur_frequency; $new_year = $start_year; while ($new_month > 12) { // Adjust so $new_month is between 1 and 12. $new_year++; $new_month -= 12; } $recur_date = xst_weekday_of_the_month($start_weekday_occurrence, $start_weekday, $new_year, $new_month); //echo "Weekday: ".weekday_of_the_month($event_start_date)."<br />"; //echo "Occurence: ".weekday_occurrence($event_start_date)."<br />"; //echo "Xst Recur Date: ".$recur_date."<br />"; //echo "Year: $new_year, Month: $new_month<br />"; } elseif ($recur_interval == 'year') { $recur_date = add_delta_ymd($event_start_date, $i, 0, 0); } $recur_date_value = implode("", explode("-", $recur_date)) + 0; if ($recur_date_value > $recur_end_date_value) { break; } if ($recur_date != '') { $recur_days[] = $recur_date; } $i++; } // end of while } // end of if // If the event spans more than 1 day then we need to // determine the dates of each of those days, for each recurrency. // We do this after, because of the last date of the month differences. $spanning_days = array(); if ($days_span > 1 && $recur_interval != 'day') { foreach ($recur_days as $recur_day) { for ($days = 1; $days < $days_span; $days++) { $spanning_days[] = add_delta_ymd($recur_day, 0, 0, $days); } // end of for $days_span } // end of foreach $recur_day } reset($spanning_days); // Merge the two arrays together and get the unique dates. @($all_days = array_merge($spanning_days, $recur_days)); @($all_days_assoc = array_count_values($all_days)); // dates assoc with counts/freq @ksort($all_days_assoc); return $all_days_assoc; }
// Find the beginning of the Week yyyy-mm-dd if (WEEK_START == 1) { // Starts on Monday $week_day_start = monday_before_date($_REQUEST['date']); } else { // Starts on Sunday $week_day_start = sunday_before_date($_REQUEST['date']); } // Define the 7 dates of the Week yyyy-mm-dd $week_dates = array(); for ($i = 0; $i <= 6; $i++) { $week_dates[] = add_delta_ymd($week_day_start, 0, 0, $i); } // Define Previous and Next Week Dates $previous_week_date = add_delta_ymd($_REQUEST['date'], 0, 0, -7); $next_week_date = add_delta_ymd($_REQUEST['date'], 0, 0, 7); // Define the $event_data object. $event_data = get_week_view_event_data(SELECTED_DATE, $_REQUEST['loc']); // Note $event_row_data is passed globally and contains the // 'db_row_id|row_span|start_time|end_time" data. // row_span: '' => no data, '1-up' => event, '0' => rowspan of event (no cell) // Time Display Cell Width $time_cell_width = 75; // Changed 'colors' to Style References for Odd and Even Rows $colors = array('BgcolorDull2', 'BgcolorNormal'); //multiply the allowed advance booking time (stored in the session on hours) by the number of seconds in an hour. //add this value to the current time to find the upper bookiung time limit. //3600 = 60 mins in an hour x 60 secs in a min $booking_limited_time = time() + $_SESSION['ADVANCE_BOOKING_LIMIT'] * 3600; ?>
// Saturday, January 25, 2003 // Selected Date Data @(list($sel_year, $sel_month, $sel_day) = explode("-", $_REQUEST['date'])); if (!checkdate($sel_month + 0, $sel_day + 0, $sel_year + 0)) { $_REQUEST['date'] = TODAYS_DATE; list($sel_year, $sel_month, $sel_day) = explode("-", $_REQUEST['date']); } if (strlen($sel_year) == 2 && $sel_year <= 69) { $sel_year += 2000; } define('SELECTED_DATE_YEAR', sprintf("%04d", $sel_year)); define('SELECTED_DATE_MONTH', sprintf("%02d", $sel_month)); define('SELECTED_DATE_DAY', sprintf("%02d", $sel_day)); define('SELECTED_DATE', SELECTED_DATE_YEAR . '-' . SELECTED_DATE_MONTH . '-' . SELECTED_DATE_DAY); $_REQUEST['date'] = SELECTED_DATE; $tmp_todays_dates = date("j M Y|l F j, Y", mktime(1, 0, 0, SELECTED_DATE_MONTH, SELECTED_DATE_DAY, SELECTED_DATE_YEAR)); list($tmp_shortstr, $tmp_longstr) = explode("|", $tmp_todays_dates); define('SELECTED_DATE_SHORTSTR', $tmp_shortstr); // 21 Mar 2003 define('SELECTED_DATE_LONGSTR', $tmp_longstr); // Saturday, January 25, 2003 // Selected Date Data - Previous/Next Day, Month, & Year Data define('PREVIOUS_DAY_DATE', add_delta_ymd(SELECTED_DATE, 0, 0, -1)); define('NEXT_DAY_DATE', add_delta_ymd(SELECTED_DATE, 0, 0, 1)); define('PREVIOUS_MONTH_DATE', add_delta_ymd(SELECTED_DATE, 0, -1, 0)); define('NEXT_MONTH_DATE', add_delta_ymd(SELECTED_DATE, 0, 1, 0)); define('PREVIOUS_YEAR_DATE', add_delta_ymd(SELECTED_DATE, -1, 0, 0)); define('NEXT_YEAR_DATE', add_delta_ymd(SELECTED_DATE, 1, 0, 0)); // Create the schedule table data for the selected month date (year and month). include_once "booking_db_fns.php"; $res = create_date_time_schedule_data(SELECTED_DATE, $_REQUEST['loc']);
function get_month_view_event_data($date, $location = DEFAULT_LOCATION_NAME) { // Get the event data for the selected month, year and location. global $location_db_name; // Sanitize for MySQL $date = wrap_db_escape_string($date); // Check Valid Date if (!check_valid_date($date)) { $date = '1970-01-01'; } list($year, $month, $day) = explode("-", $date); $date_month_end = add_delta_ymd(implode("-", array($year, $month, 0)), 0, 1, 0); $query = "SELECT * \r\n\t\t\tFROM " . DATE_TIME_SCHEDULE_TABLE . ", " . BOOKING_EVENT_TABLE . " WHERE \r\n\t\t\t" . DATE_TIME_SCHEDULE_TABLE . "." . $location_db_name[$location] . " != 0 AND \r\n\t\t\t" . DATE_TIME_SCHEDULE_TABLE . "." . $location_db_name[$location] . " = " . BOOKING_EVENT_TABLE . ".event_id AND \r\n\t\t\t" . DATE_TIME_SCHEDULE_TABLE . ".schedule_date_time >= '" . $year . "-" . $month . "-01 00:00:01' AND \r\n\t\t\t" . DATE_TIME_SCHEDULE_TABLE . ".schedule_date_time < '" . $date_month_end . " 00:00:00' \r\n\t\t\tORDER BY " . DATE_TIME_SCHEDULE_TABLE . ".schedule_date_time"; //echo $query."<br /><br />"; $result = wrap_db_query($query); $db_num_rows = wrap_db_num_rows($result); // Event Row Data Assoc. Array // $event_row_data['date']['event_id'] = 'db_row_id|row_span|start_time|end_time'; $event_row_data = array(array()); global $event_row_data; // Get the Display Times and Number of Rows $data_display_times = get_times_in_range(MIN_BOOKING_HOUR, MAX_BOOKING_HOUR, BOOKING_TIME_INTERVAL, true); $number_of_display_time_rows = count($data_display_times); // Get Month Information $number_of_days_in_the_month = number_of_days_in_month($year, $month); // Create an Assoc. Time array for index lookup. $display_time_lookup = array(); for ($i = 0; $i < $number_of_display_time_rows; $i++) { $display_time_lookup[$data_display_times[$i]] = $i; } // $event_row_data array - build out the schedule date blocks for ($day = 1; $day <= $number_of_days_in_the_month; $day++) { $for_date = $year . "-" . $month . "-" . sprintf("%02d", $day); $event_row_data[$for_date][0] = ''; } if (!$result) { return false; } // no database events // Go thru the database $result data and fill out the $event_row_data array. $previous_event_id = 0; $row_span = 0; $row = 0; $event = array(); //echo "<h1>TESTING</h1>"; for ($row = 0; $row <= $db_num_rows; $row++) { // define db variables $event = wrap_db_fetch_array($result); $db_event_id = $event['event_id']; //echo "ID: $db_event_id<br />"; list($db_starting_date, $db_starting_time) = explode(" ", $event['schedule_date_time']); list($db_hr, $db_min, $db_sec) = explode(":", $db_starting_time); $db_starting_time = sprintf("%02d", $db_hr) . ':' . sprintf("%02d", $db_min); if ($previous_event_id != $db_event_id || $previous_event_date != $db_starting_date || $previous_event_id == 0) { // event_id has changed / or first event_id if ($previous_event_id != 0) { // if not first id, then define $event_row_data array // place the event data into $event_row_data: 'db_row_id|row_span|start_time|end_time' $event_row_data[$event_start_date][$previous_event_id] = $event_start_db_row_id . "|" . $row_span . "|" . $event_start_time . "|" . $data_display_times[$display_time_lookup[$event_start_time] + $row_span]; // echo values for testing //echo "Define Event -> " . $event_start_date ."/" . $previous_event_id . " => " . $event_row_data[$event_start_date][$previous_event_id] . "<br />"; // initialize the row_span for the new event $row_span = 1; } // Mark the event starting time and db row id to be used to data_seeking //echo "<strong>Mark Start:</strong> ".$db_starting_date.", ".$row.", ".$db_event_id."<br />"; $event_start_time = $db_starting_time; // mark the starting time $event_start_date = $db_starting_date; // mark the starting date $event_start_db_row_id = $row; // mark the starting db row $row_span = 1; } else { // same event_id //echo "<strong>Same Event ID:</strong> ".$db_starting_time.", ".$row.", ".$db_event_id."<br />"; $row_span++; } $previous_event_id = $db_event_id; $previous_event_date = $db_starting_date; } // end of while // Display/Check the $event_row_data for errors //echo "<br />"; //for ($day=1; $day<=$number_of_days_in_the_month; $day++) { //$test_date = $year."-".$month."-".sprintf("%02d", $day); //echo "Test Date: ".$test_date."<br />"; //while (list($key, $value) = each($event_row_data[$test_date])) { //echo "Event ID: ".$key." Value: ".$value."<br />"; //} //} // return the resulting data object return $result; }