public function saveEvent($data)
{
if (!$this->event->isNewRecord) {
// this is an edit, so need to work out what we are deleting
$oe_ids = array();
foreach ($this->open_elements as $o_e) {
if ($o_e->id) {
if (isset($oe_ids[get_class($o_e)])) {
$oe_ids[get_class($o_e)][] = $o_e->id;
} else {
$oe_ids[get_class($o_e)] = array($o_e->id);
}
}
}
// delete any elements that are no longer required for the event
foreach ($this->event->getElements() as $curr_element) {
if (!isset($oe_ids[get_class($curr_element)]) || !in_array($curr_element->id, $oe_ids[get_class($curr_element)])) {
// make sure that the element have a primary key (it tried to delete null elements before!)
if ($curr_element->getPrimaryKey() !== null) {
$curr_element->delete();
}
}
}
} else {
if (!$this->event->save()) {
OELog::log("Failed to create new event for episode_id={$this->episode->id}, event_type_id=" . $this->event_type->id);
throw new Exception('Unable to save event.');
}
OELog::log("Created new event for episode_id={$this->episode->id}, event_type_id=" . $this->event_type->id);
}
foreach ($this->open_elements as $element) {
$element->event_id = $this->event->id;
// No need to validate as it has already been validated and the event id was just generated.
if (!$element->save(false)) {
throw new Exception('Unable to save element ' . get_class($element) . '.');
}
}
// ensure any complex data is saved to the elements
$this->saveEventComplexAttributesFromData($data);
// update the information attribute on the event
$this->updateEventInfo();
return true;
}