OEModule\OphCiExamination\models\Element_OphCiExamination_VisualAcuity::getUnitValuesForForm PHP Method

getUnitValuesForForm() public method

public getUnitValuesForForm ( integer | null $unit_id = null, boolean $is_near = false ) : array
$unit_id integer | null
$is_near boolean
return array
    public function getUnitValuesForForm($unit_id = null, $is_near = false)
    {
        if ($unit_id) {
            $unit = OphCiExamination_VisualAcuityUnit::model()->findByPk($unit_id);
        } else {
            $unit = $this->unit;
        }
        $unit_values = $unit->selectableValues;
        $criteria = new \CDbCriteria();
        $criteria->condition = 'id <> :unit_id AND active = 1 AND is_near = :is_near';
        $criteria->params = array(':unit_id' => $unit->id, 'is_near' => $is_near);
        $criteria->order = 'name';
        $tooltip_units = OphCiExamination_VisualAcuityUnit::model()->findAll($criteria);
        $options = array();
        // getting the conversion values
        foreach ($unit_values as $uv) {
            $idx = (string) $uv->base_value;
            $options[$idx] = array('data-tooltip' => array());
            foreach ($tooltip_units as $tt) {
                $last = null;
                foreach ($tt->values as $tt_val) {
                    if ($tt_val->base_value <= $uv->base_value) {
                        $val = $tt_val->value;
                        if ($last != null && abs($uv->base_value - $tt_val->base_value) > abs($uv->base_value - $last->base_value)) {
                            $val = $last->value;
                        }
                        $map = array('name' => $tt->name, 'value' => $val, 'approx' => false);
                        if ($tt_val->base_value < $uv->base_value) {
                            $map['approx'] = true;
                        }
                        $options[$idx]['data-tooltip'][] = $map;
                        break;
                    }
                    $last = $tt_val;
                }
            }
            // need to JSONify the options data
            $options[$idx]['data-tooltip'] = \CJSON::encode($options[$idx]['data-tooltip']);
        }
        return array(\CHtml::listData($unit_values, 'base_value', 'value'), $options);
    }