BaseEventTypeController::getElementsForElementType PHP Method

getElementsForElementType() protected method

Processes provided form data to create 1 or more elements of the provided type.
protected getElementsForElementType ( ElementType $element_type, $data ) : array
$element_type ElementType
$data
return array
    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;
    }

Usage Example

Esempio n. 1
0
 /**
  * Override to support the fact that users might not have permission to edit specific event elements.
  *
  * @param \ElementType $element_type
  * @param $data
  * @return array
  * @throws \Exception
  */
 protected function getElementsForElementType(\ElementType $element_type, $data)
 {
     $cls = $element_type->class_name;
     $map = array('OEModule\\OphCoCvi\\models\\Element_OphCoCvi_ClinicalInfo' => 'Clinical', 'OEModule\\OphCoCvi\\models\\Element_OphCoCvi_ClericalInfo' => 'Clerical');
     if (array_key_exists($cls, $map)) {
         $id = $map[$cls];
         $override = $this->{"getElementsFor{$id}"}();
         if ($override !== false) {
             return $override;
         }
     }
     return parent::getElementsForElementType($element_type, $data);
 }
BaseEventTypeController