protected function getElementsForElementType(ElementType $element_type, $data)
{
$elements = array();
$el_cls_name = $element_type->class_name;
$f_key = CHtml::modelName($el_cls_name);
if (isset($data[$f_key])) {
$keys = array_keys($data[$f_key]);
if (is_array($data[$f_key][$keys[0]]) && !count(array_filter(array_keys($data[$f_key]), 'is_string'))) {
// there is more than one element of this type
$pk_field = $el_cls_name::model()->tableSchema->primaryKey;
foreach ($data[$f_key] as $i => $attrs) {
if (!$this->event->isNewRecord && !isset($attrs[$pk_field])) {
throw new Exception('missing primary key field for multiple elements for editing an event');
}
if ($pk = @$attrs[$pk_field]) {
$element = $el_cls_name::model()->findByPk($pk);
} else {
$element = $element_type->getInstance();
}
$element->attributes = Helper::convertNHS2MySQL($attrs);
$this->setElementComplexAttributesFromData($element, $data, $i);
$element->event = $this->event;
$elements[] = $element;
}
} else {
if ($this->event->isNewRecord || !($element = $el_cls_name::model()->find('event_id=?', array($this->event->id)))) {
$element = $element_type->getInstance();
}
$element->attributes = Helper::convertNHS2MySQL($data[$f_key]);
$this->setElementComplexAttributesFromData($element, $data);
$element->event = $this->event;
$elements[] = $element;
}
}
return $elements;
}