Skip to main content

This site requires you to update your browser. Your browsing experience maybe affected by not having the most up to date version.

We've moved the forum!

Please use forum.silverstripe.org for any new questions (announcement).
The forum archive will stick around, but will be read only.

You can also use our Slack channel or StackOverflow to ask for help.
Check out our community overview for more options to contribute.

All other Modules /

Discuss all other Modules here.

Moderators: martimiz, Sean, Ed, biapar, Willr, Ingo, swaiba

Event Calendar - Upcoming Events help!


Go to End


2 Posts   981 Views

Avatar
BG

Community Member, 3 Posts

26 March 2013 at 11:45pm

Edited: 27/03/2013 2:14am

Hi There,

I am trying to do a (basic?) thing with UpcomingEvents()...
I want it to display the current event, followed by 2 next events in the first calendar, although I have noticed that UpcomingEvents() only returns results based on dates rather than times...

Is there another way to do this? I have tried using ->filter("EndTime:GreaterThan", date("H:m:s")) to no avail, as it seems :GreaterThan doesn't work on time fields???.
Maybe there is an easier field to be filtering my dates from? (the "dtend" span in the $DateRange template variable would be good if it wasn't wrapped with HTML)

The end goal is to have a widget displaying "Now", "Next" and "Later" from the calendar.

I am currently resorting to this function that assumes all items are set to start and finish on the half hour.
I've made it so it can't collect anything past midnight, as unfortunately the Item List does not get ordered by the order of my $times array.

	public function UpcomingEvents() {
			
		//Get Current Date/Time
		$now = array(
			'date' => date("Y-m-d"),
			'time' => date("H:i:s"),
		);
		
		//Split and round up Current Time
		$ts = split(":",$now['time']);
		$ts[2] = "00";
		if($ts[1] < 31){
			$ts[1] = 30;
		}else{
			$ts[0]++;
			$ts[1] = "00";
		}
		//Create a list of half hour blocks in the next 24hrs
		$i = 0;
		$times = array();
		while($i < 48){
			if($ts[0] == 24){
				$ts[0] = "00";
				$i = 47;
			}
			$times[] = $ts[0].":".$ts[1].":".$ts[2];
			
			$ts[1] = $ts[1]+30;
			
			if($ts[1] == 60){
				$ts[0]++;
				$ts[1] = "00";
			}
			$i++;
		}
		
		//Return filtered Events
		$all = Calendar::get()->first()->UpcomingEvents(20);
		return $all->filter(array('EndTime' => $times))->limit(3);
	}

Hope you can help, and thanks :)

Avatar
BG

Community Member, 3 Posts

2 April 2013 at 3:51am

bump