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.

All other Modules

Discuss all other Modules here.

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

Event Calendar / Event Resources Help


Reply

2 Posts   443 Views

Avatar
redactuk

11 August 2011 at 12:17am Community Member, 117 Posts

I wonder if anyone could please give me some pointers as to how best to achieve this:

I'm using EventCalendar and EventResources modules. What I want to do is sort the order of calendar events displayed by Resource. For anyone not familiar with the eventresources a resource is stored for each CalendarDateTime record.

CREATE TABLE IF NOT EXISTS `CalendarDateTime_Resources` (
`ID` int(11) NOT NULL auto_increment,
`CalendarDateTimeID` int(11) NOT NULL default '0',
`EventResourceID` int(11) NOT NULL default '0',
`BookingQuantity` int(11) NOT NULL default '0',
PRIMARY KEY (`ID`),
KEY `CalendarDateTimeID` (`CalendarDateTimeID`),
KEY `EventResourceID` (`EventResourceID`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=3 ;

In a simple world I would simply join CalendarDateTime to CalendarDateTime_Resources to return a recordset and then sort by EventResourceID in my calendar display. My uncertaintly is how to approach this the Silverstripe way. Presumably I do not want to touch any of the existing code for EventCalendat or EventResouces, so I'm guessing I need to extend CalendarDateTime to return my joined CalendarDateTime and CalendarDateTime_Resources records?

Avatar
redactuk

12 August 2011 at 12:17am Community Member, 117 Posts

I'm going insane here. I can see how subclass any level of eventcalendar to add new fields, what i can't see is how to add new fields that already exist in a related table. Fof every CalendarDateTime record that is created a record is also created in CalendarDateTime_Resources, with the resource information held in table:

CREATE TABLE IF NOT EXISTS `EventResource` (
`ID` int(11) NOT NULL auto_increment,
`ClassName` enum('EventResource') character set utf8 default 'EventResource',
`Created` datetime default NULL,
`LastEdited` datetime default NULL,
`Title` varchar(255) character set utf8 default NULL,
`Description` mediumtext character set utf8,
`Type` enum('Single','Limited','Unlimited') character set utf8 default 'Single',
`Quantity` int(11) NOT NULL default '0',
PRIMARY KEY (`ID`),
KEY `ClassName` (`ClassName`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=6 ;

So in SQL what I want to do is instead of returning a CalendarDateTime record I was to return:

SELECT * FROM `CalendarDateTime`
LEFT JOIN `CalendarDateTime_Resources` ON `CalendarDateTime_Resources`.CalendarDateTimeID = `CalendarDateTime`.ID
LEFT JOIN `EventResource` ON `EventResource`.ID = `CalendarDateTime_Resources`.EventResourceID

So maybe I subclass Calendar and replace the function getDateJoin to include extended query? But i can't see that working as the fields in the additional tables are not defined anywhere. So maybe i need to subclass CalendarDatetime?