Your IP : 216.73.216.95


Current Path : /var/test/www/mainsite/wp-content/plugins/bears-church/includes/
Upload File :
Current File : /var/test/www/mainsite/wp-content/plugins/bears-church/includes/schedule.php

<?php
/**
 * Scheduled Functions
 *
 * Schedule functions to run at certain times using the WordPress "cron" functions.
 *
 * @package    Church_Theme_Content
 * @subpackage Functions
 * @copyright  Copyright (c) 2013 - 2017, churchthemes.com
 * @link       https://github.com/churchthemes/church-theme-content
 * @license    GPLv2 or later
 * @since      0.9
 */

// No direct access
if ( ! defined( 'ABSPATH' ) ) exit;

/*************************************************
 * RECURRING EVENTS
 *************************************************/

/**
 * Schedule weekly, monthly and yearly events
 *
 * Move recurring event dates forward after they end.
 *
 * @since 0.9
 */
function ctc_schedule_recurring_events() {

	// Schedule if not already scheduled
	if ( ! wp_next_scheduled( 'ctc_update_recurring_event_dates' ) ) {
		wp_schedule_event( time(), 'hourly', 'ctc_update_recurring_event_dates' ); // hourly so happens as soon as possible after event ends the day before
	}

}

add_action( 'wp', 'ctc_schedule_recurring_events' );

/**
 * Update recurring event dates
 *
 * @since 0.9
 */
function ctc_update_recurring_event_dates() {

	// Get all events with end date in past and have valid recurring value
	$events_query = new WP_Query( array(
		'post_type'	=> 'ctc_event',
		'nopaging'	=> true,
		'meta_query' => array(
			'relation' => 'AND',
			array(
				'key' => '_ctc_event_end_date',
				'value' => date_i18n( 'Y-m-d' ), // today localized
		 		'compare' => '<', // earlier than today
				'type' => 'DATE',
		   ),
			array(
				'key' => '_ctc_event_recurrence',
				'value' => array( 'weekly', 'monthly', 'yearly' ),
		 		'compare' => 'IN',
		   )
		)
	) );

	// Loop events
	if ( ! empty( $events_query->posts ) ) {

		// Instantiate recurrence class
		$ctc_recurrence = new CT_Recurrence();

		// Loop events to modify dates
		foreach ( $events_query->posts as $post ) {

			// Get start and end date
			$start_date = get_post_meta( $post->ID, '_ctc_event_start_date', true );
			$end_date = get_post_meta( $post->ID, '_ctc_event_end_date', true );

		 	// Get recurrence
		 	$recurrence = get_post_meta( $post->ID, '_ctc_event_recurrence', true );
			$recurrence_end_date = get_post_meta( $post->ID, '_ctc_event_recurrence_end_date', true );

			// Difference between start and end date in seconds
			$time_difference = strtotime( $end_date ) - strtotime( $start_date );

			// Get soonest occurence that is today or later
			$args = array(
				'start_date'			=> $start_date, // first day of event, YYYY-mm-dd (ie. 2015-07-20 for July 15, 2015)
				'frequency'				=> $recurrence, // weekly, monthly, yearly
			);
			$args = apply_filters( 'ctc_event_recurrence_args', $args, $post ); // Custom Recurring Events add-on uses this
			$new_start_date = $ctc_recurrence->calc_next_future_date( $args );

			// If no new start date gotten, set it to current start date
			// This could be because recurrence ended, arguments are invalid, etc.
			if ( ! $new_start_date ) {
				$new_start_date = $start_date;
			}

			// Add difference between original start/end date to new start date to get new end date
			$new_end_date = date( 'Y-m-d', ( strtotime( $new_start_date ) + $time_difference ) );

			// Has recurrence ended?
			// Recurrence end date exists and is earlier than new start date
			if ( $recurrence_end_date && strtotime( $recurrence_end_date ) < strtotime( $new_start_date ) ) {

				// Unset recurrence option to keep dates from being moved forward
				update_post_meta( $post->ID, '_ctc_event_recurrence', 'none' );

			}

			// No recurrence or recurrence end date is still future
			else {

				// Update start and end dates
				update_post_meta( $post->ID, '_ctc_event_start_date', $new_start_date );
				update_post_meta( $post->ID, '_ctc_event_end_date', $new_end_date );

				// Update the hidden datetime fields for ordering
				ctc_update_event_date_time( $post->ID );

			}

		}

	}

}

add_action( 'ctc_update_recurring_event_dates', 'ctc_update_recurring_event_dates' );

// Uncomment for debugging. Recurrence will run on every page load.
//add_action( 'admin_init', 'ctc_update_recurring_event_dates' );