BaseEventTypeController::saveEvent PHP Method

saveEvent() public method

Save the event for this controller - will create or update the event, create and update the elements, delete any elements that are no longer required. Note that $data is provided for the purposes of any extensions to this behaviour that might be required.
public saveEvent ( $data ) : boolean
$data
return boolean
    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;
    }
BaseEventTypeController