<?php



	class UniteEmRev{

		

		const DEFAULT_FILTER = "none";

		

		/**

		 * 

		 * check if events class exists

		 */

		public static function isEventsExists(){

			if(defined("EM_VERSION") && defined("EM_PRO_MIN_VERSION"))

				return(true);

				

			return(false);

		}

		

		

		/**

		 * 

		 * get sort by list

		 */

		public static function getArrFilterTypes(){

			

				$arrEventsSort = array("none" => __ug("All Events",REVSLIDER_TEXTDOMAIN),

									   "today" => __ug("Today",REVSLIDER_TEXTDOMAIN),

									   "tomorrow"=>__ug("Tomorrow",REVSLIDER_TEXTDOMAIN),

									   "future"=>__ug("Future",REVSLIDER_TEXTDOMAIN),

									   "past"=>__ug("Past",REVSLIDER_TEXTDOMAIN),

									   "month"=>__ug("This Month",REVSLIDER_TEXTDOMAIN),

									   "nextmonth"=>__ug("Next Month",REVSLIDER_TEXTDOMAIN)

				);

				

			return($arrEventsSort);

		}

		

		

		/**

		 * 

		 * get meta query

		 */

		public static function getWPQuery($filterType, $sortBy){

			

			

			$dayMs = 60*60*24;

			

			$time = current_time('timestamp');

			$todayStart = strtotime(date('Y-m-d', $time));

			$todayEnd = $todayStart + $dayMs-1;

			$tomorrowStart = $todayEnd+1;

			$tomorrowEnd = $tomorrowStart + $dayMs-1;

			

			//dmp(UniteFunctionsRev::timestamp2DateTime($tomorrowStart));exit();

			

			$start_month = strtotime(date('Y-m-1',$time));

			$end_month = strtotime(date('Y-m-t',$time)) + 86399;

			$next_month_middle = strtotime('+1 month', $time); //get the end of this month + 1 day

			$start_next_month = strtotime(date('Y-m-1',$next_month_middle));

			$end_next_month = strtotime(date('Y-m-t',$next_month_middle)) + 86399;

			

			$query = array();

			

			switch($filterType){

				case self::DEFAULT_FILTER:	//none

				break;

				case "today":

					$query[] = array( 'key' => '_start_ts', 'value' => $todayEnd, 'compare' => '<=' );

					$query[] = array( 'key' => '_end_ts', 'value' => $todayStart, 'compare' => '>=' );

				break;

				case "future":

					$query[] = array( 'key' => '_start_ts', 'value' => $time, 'compare' => '>' );

				break;

				case "tomorrow":

					$query[] = array( 'key' => '_start_ts', 'value' => $tomorrowEnd, 'compare' => '<=' );

					$query[] = array( 'key' => '_end_ts', 'value' => $todayStart, 'compare' => '>=' );	

				break;

				case "past":

					$query[] = array( 'key' => '_end_ts', 'value' => $todayStart, 'compare' => '<' );

				break;

				case "month":

					$query[] = array( 'key' => '_start_ts', 'value' => $end_month, 'compare' => '<=' );

					$query[] = array( 'key' => '_end_ts', 'value' => $start_month, 'compare' => '>=' );					

				break;

				case "nextmonth":

					$query[] = array( 'key' => '_start_ts', 'value' => $end_next_month, 'compare' => '<=' );

					$query[] = array( 'key' => '_end_ts', 'value' => $start_next_month, 'compare' => '>=' );

				break;

				default:

					UniteFunctionsRev::throwError("Wrong event filter");

				break;

			} 

			

			if(!empty($query))

				$response["meta_query"] = $query;

			

			//convert sortby

			switch($sortBy){

				case "event_start_date":

					$response["orderby"] = "meta_value_num";

					$response["meta_key"] = "_start_ts";

				break;

				case "event_end_date":

					$response["orderby"] = "meta_value_num";

					$response["meta_key"] = "_end_ts";

				break;

			}			

			

			return($response);

		}

		

		/**

		 * 

		 * get event post data in array. 

		 * if the post is not event, return empty array

		 */

		public static function getEventPostData($postID){

			if(self::isEventsExists() == false)

				return(array());

							

			$postType = get_post_type($postID);

			if($postType != EM_POST_TYPE_EVENT)

				return(array());

			

			$event = new EM_Event($postID, 'post_id');

			$location = $event->get_location();

			

			$arrEvent = $event->to_array();

			$arrLocation = $location->to_array();

			
			$date_format = get_option('date_format');
			$time_format = get_option('time_format');
			
			$arrEvent["event_start_date"] = date_format(date_create_from_format('Y-m-d', $arrEvent["event_start_date"]), $date_format);
			$arrEvent["event_end_date"] = date_format(date_create_from_format('Y-m-d', $arrEvent["event_end_date"]), $date_format);
			$arrEvent["event_start_time"] = date_format(date_create_from_format('H:i:s', $arrEvent["event_start_time"]), $time_format);
			$arrEvent["event_end_time"] = date_format(date_create_from_format('H:i:s', $arrEvent["event_end_time"]), $time_format);
			

			$response = array();

			$response["start_date"] = $arrEvent["event_start_date"];

			$response["end_date"] = $arrEvent["event_end_date"];

			$response["start_time"] = $arrEvent["event_start_time"];

			$response["end_time"] = $arrEvent["event_end_time"];

			$response["id"] = $arrEvent["event_id"];

			$response["location_name"] = $arrLocation["location_name"];

			$response["location_address"] = $arrLocation["location_address"];

			$response["location_slug"] = $arrLocation["location_slug"];

			$response["location_town"] = $arrLocation["location_town"];

			$response["location_state"] = $arrLocation["location_state"];

			$response["location_postcode"] = $arrLocation["location_postcode"];

			$response["location_region"] = $arrLocation["location_region"];

			$response["location_country"] = $arrLocation["location_country"];

			$response["location_latitude"] = $arrLocation["location_latitude"];

			$response["location_longitude"] = $arrLocation["location_longitude"];

			

			return($response);

		}

		

		/**

		 * 

		 * get events sort by array

		 */

		public static function getArrSortBy(){

			$arrSortBy = array();

			$arrSortBy["event_start_date"] = __ug("Event Start Date",REVSLIDER_TEXTDOMAIN);

			$arrSortBy["event_end_date"] = __ug("Event End Date",REVSLIDER_TEXTDOMAIN);

			return($arrSortBy);			

		}

		

	}

?>