Function Reference: geodir_event_date_occurrences
Summary
This function has not been documented yet.
Source File
geodir_event_date_occurrences() is located in geodir_event_manager/gdevents_functions.php [Line: 1543]
Source Code
function geodir_event_date_occurrences( $type = 'year', $start_date, $end_date = '', $interval = 1, $limit = '', $repeat_end = '', $repeat_days = array(), $repeat_weeks = array() ) {
$dates = array();
$start_time = strtotime( $start_date );
$end_time = strtotime( $repeat_end );
switch ( $type ) {
case 'year': {
if ( $repeat_end != '' && geodir_event_is_date( $repeat_end ) ) {
for ( $time = $start_time; $time <= $end_time; $time = strtotime( date_i18n( 'Y-m-d', $time ) . '+' . $interval . ' year' ) ) {
$year = date_i18n( 'Y', $time );
$month = date_i18n( 'm', $time );
$day = date_i18n( 'd', $time );
$date_occurrence = $year . '-' . $month . '-' . $day;
$time_occurrence = strtotime( $date_occurrence );
if ( $time_occurrence <= $end_time ) {
$dates[] = $date_occurrence;
}
}
} else {
$dates[] = date_i18n( 'Y-m-d', $start_time );
if ( $limit > 0 ) {
for ( $i = 1; $i < $limit ; $i++ ) {
$every = $interval * $i;
$time = strtotime( $start_date . '+' . $every . ' year' );
$year = date_i18n( 'Y', $time );
$month = date_i18n( 'm', $time );
$day = date_i18n( 'd', $time );
$date_occurrence = $year . '-' . $month . '-' . $day;
$dates[] = $date_occurrence;
}
}
}
}
break;
case 'month': {
if ( $repeat_end != '' && geodir_event_is_date( $repeat_end ) ) {
for ( $time = $start_time; $time <= $end_time; $time = strtotime( date_i18n( 'Y-m-d', $time ) . '+' . $interval . ' month' ) ) {
$year = date_i18n( 'Y', $time );
$month = date_i18n( 'm', $time );
$day = date_i18n( 'd', $time );
$date_occurrence = $year . '-' . $month . '-' . $day;
$time_occurrence = strtotime( $date_occurrence );
if ( !empty( $repeat_days ) || !empty( $repeat_weeks ) ) {
$month_days = cal_days_in_month( CAL_GREGORIAN, $month, $year );
for ( $d = 1; $d <= $month_days; $d++ ) {
$recurr_time = strtotime( $year . '-' . $month . '-' . $d );
$week_day = date_i18n( 'w', $recurr_time );
$week_diff = ( $recurr_time - strtotime( $year . '-' . $month . '-01' ) );
$week_num = $week_diff > 0 ? (int)( $week_diff / ( DAY_IN_SECONDS * 7 ) ) : 0;
$week_num++;
if ( $recurr_time >= $start_time && $recurr_time <= $end_time ) {
if ( empty( $repeat_days ) && !empty( $repeat_weeks ) && in_array( $week_num, $repeat_weeks ) ) {
$dates[] = date_i18n( 'Y-m-d', $recurr_time );
} else if ( !empty( $repeat_days ) && empty( $repeat_weeks ) && in_array( $week_day, $repeat_days ) ) {
$dates[] = date_i18n( 'Y-m-d', $recurr_time );
} else if ( !empty( $repeat_weeks ) && in_array( $week_num, $repeat_weeks ) && !empty( $repeat_days ) && in_array( $week_day, $repeat_days ) ) {
$dates[] = date_i18n( 'Y-m-d', $recurr_time );
}
}
}
} else {
$dates[] = $date_occurrence;
}
}
} else {
$dates[] = date_i18n( 'Y-m-d', $start_time );
if ( $limit > 0 ) {
if ( !empty( $repeat_days ) || !empty( $repeat_weeks ) ) {
$dates = array();
$week_dates = array();
$days_limit = 0;
$i = 0;
while ( $days_limit <= $limit ) {
$time = strtotime( $start_date . '+' . ( $interval * $i ) . ' month' );
$year = date_i18n( 'Y', $time );
$month = date_i18n( 'm', $time );
$day = date_i18n( 'd', $time );
$month_days = cal_days_in_month( CAL_GREGORIAN, $month, $year );
for ( $d = 1; $d <= $month_days; $d++ ) {
$recurr_time = strtotime( $year . '-' . $month . '-' . $d );
$week_day = date_i18n( 'w', $recurr_time );
$week_diff = ( $recurr_time - strtotime( $year . '-' . $month . '-01' ) );
$week_num = $week_diff > 0 ? (int)( $week_diff / ( DAY_IN_SECONDS * 7 ) ) : 0;
$week_num++;
if ( $recurr_time >= $start_time && in_array( $week_day, $repeat_days ) ) {
$week_date = '';
if ( empty( $repeat_days ) && !empty( $repeat_weeks ) && in_array( $week_num, $repeat_weeks ) ) {
$week_date = date_i18n( 'Y-m-d', $recurr_time );
} else if ( !empty( $repeat_days ) && empty( $repeat_weeks ) && in_array( $week_day, $repeat_days ) ) {
$week_date = date_i18n( 'Y-m-d', $recurr_time );
} else if ( !empty( $repeat_weeks ) && in_array( $week_num, $repeat_weeks ) && !empty( $repeat_days ) && in_array( $week_day, $repeat_days ) ) {
$week_date = date_i18n( 'Y-m-d', $recurr_time );
}
if ( $week_date != '' ) {
$dates[] = $week_date;
$days_limit++;
}
if ( count( $dates ) == $limit ) {
break 2;
}
}
}
$i++;
}
$dates = !empty( $dates ) ? $dates : date_i18n( 'Y-m-d', $start_time );
} else {
for ( $i = 1; $i < $limit ; $i++ ) {
$every = $interval * $i;
$time = strtotime( $start_date . '+' . $every . ' month' );
$year = date_i18n( 'Y', $time );
$month = date_i18n( 'm', $time );
$day = date_i18n( 'd', $time );
$date_occurrence = $year . '-' . $month . '-' . $day;
$dates[] = $date_occurrence;
}
}
}
}
}
break;
case 'week': {
if ( $repeat_end != '' && geodir_event_is_date( $repeat_end ) ) {
for ( $time = $start_time; $time <= $end_time; $time = strtotime( date_i18n( 'Y-m-d', $time ) . '+' . $interval . ' week' ) ) {
$year = date_i18n( 'Y', $time );
$month = date_i18n( 'm', $time );
$day = date_i18n( 'd', $time );
$date_occurrence = $year . '-' . $month . '-' . $day;
$time_occurrence = strtotime( $date_occurrence );
if ( $time_occurrence <= $end_time ) {
if ( !empty( $repeat_days ) ) {
for ( $d = 0; $d <= 6; $d++ ) {
$recurr_time = strtotime( $date_occurrence . '+' . $d . ' day' );
$week_day = date_i18n( 'w', $recurr_time );
if ( in_array( $week_day, $repeat_days ) ) {
$dates[] = date_i18n( 'Y-m-d', $recurr_time );
}
}
} else {
$dates[] = $date_occurrence;
}
}
}
} else {
$dates[] = date_i18n( 'Y-m-d', $start_time );
if ( $limit > 0 ) {
if ( !empty( $repeat_days ) ) {
$dates = array();
$week_dates = array();
$days_limit = 0;
$i = 0;
while ( $days_limit <= $limit ) {
$time = strtotime( $start_date . '+' . $i . ' week' );
$year = date_i18n( 'Y', $time );
$month = date_i18n( 'm', $time );
$day = date_i18n( 'd', $time );
$date_occurrence = $year . '-' . $month . '-' . $day;
for ( $d = 0; $d <= 6; $d++ ) {
$recurr_time = strtotime( $date_occurrence . '+' . $d . ' day' );
$week_day = date_i18n( 'w', $recurr_time );
if ( in_array( $week_day, $repeat_days ) ) {
$week_dates[] = date_i18n( 'Y-m-d', $recurr_time );
$dates[] = date_i18n( 'Y-m-d', $recurr_time );
$days_limit++;
if ( count( $dates ) == $limit ) {
break 2;
}
}
}
$i++;
}
$dates = !empty( $dates ) ? $dates : date_i18n( 'Y-m-d', $start_time );
} else {
for ( $i = 1; $i < $limit ; $i++ ) {
$every = $interval * $i;
$time = strtotime( $start_date . '+' . $every . ' week' );
$year = date_i18n( 'Y', $time );
$month = date_i18n( 'm', $time );
$day = date_i18n( 'd', $time );
$date_occurrence = $year . '-' . $month . '-' . $day;
$dates[] = $date_occurrence;
}
}
}
}
}
break;
case 'day': {
if ( $repeat_end != '' && geodir_event_is_date( $repeat_end ) ) {
for ( $time = $start_time; $time <= $end_time; $time = strtotime( date_i18n( 'Y-m-d', $time ) . '+' . $interval . ' day' ) ) {
$year = date_i18n( 'Y', $time );
$month = date_i18n( 'm', $time );
$day = date_i18n( 'd', $time );
$date_occurrence = $year . '-' . $month . '-' . $day;
$time_occurrence = strtotime( $date_occurrence );
if ( $time_occurrence <= $end_time ) {
$dates[] = $date_occurrence;
}
}
} else {
$dates[] = date_i18n( 'Y-m-d', $start_time );
if ( $limit > 0 ) {
for ( $i = 1; $i < $limit ; $i++ ) {
$every = $interval * $i;
$time = strtotime( $start_date . '+' . $every . ' day' );
$year = date_i18n( 'Y', $time );
$month = date_i18n( 'm', $time );
$day = date_i18n( 'd', $time );
$date_occurrence = $year . '-' . $month . '-' . $day;
$dates[] = $date_occurrence;
}
}
}
}
break;
}
$dates = !empty( $dates ) ? array_unique( $dates ) : $dates;
return $dates;
}