Beispiel #1
0
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;
}
Beispiel #2
0
// 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']);
Beispiel #4
0
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;
}