Exemplo n.º 1
0
 protected function createArray($defdetail, $model)
 {
     $array = array();
     foreach ($defdetail->sub_definition as $sub_def_detail) {
         if ($sub_def_detail->sub_definition->count() > 0) {
             $datamap = new DataMapping();
             $datamap->load($sub_def_detail->data_mapping_id);
             $hasMany = is_null($datamap->internal_attribute) ? '' : $model->getHasMany($datamap->internal_attribute);
             if (!empty($hasMany) && $model->{$datamap->internal_attribute}->count() > 0) {
                 foreach ($model->{$datamap->internal_attribute} as $submodel) {
                     $array[$sub_def_detail->element][] = $this->createArray($sub_def_detail, $submodel);
                 }
             } else {
                 $array[$sub_def_detail->element] = $this->createArray($sub_def_detail, $model);
             }
         } else {
             $datamap = new DataMapping();
             $datamap->load($sub_def_detail->data_mapping_id);
             $datamaprule = new DataMappingRule();
             $datamaprule->load($sub_def_detail->data_mapping_rule_id);
             $value = '';
             if ($datamap->isLoaded()) {
                 if ($datamaprule->isLoaded()) {
                     $datamapdetail = new DataMappingDetail();
                     $value = $datamapdetail->translateCode($datamaprule->id, $model->{$datamap->internal_attribute}, 'OUT');
                 } elseif (get_class($model) != $datamap->internal_type) {
                     if (method_exists($datamap->internal_type, $datamap->internal_attribute)) {
                         $value = call_user_func(array($datamap->internal_type, $datamap->internal_attribute));
                     } else {
                         $attr = (is_null($datamap->internal_type) ? '' : $datamap->internal_type . '::') . $datamap->internal_attribute;
                         eval("\$value= {$attr};");
                     }
                 } elseif (method_exists($model, $datamap->internal_attribute)) {
                     $value = call_user_func(array($model, $datamap->internal_attribute));
                 } elseif (is_object($model)) {
                     $attr = '$model->' . $datamap->internal_attribute;
                     eval("\$value= {$attr};");
                 }
             } elseif (!is_null($sub_def_detail->default_value)) {
                 $value = $sub_def_detail->default_value;
             }
             $array[$sub_def_detail->element] = !empty($value) ? str_replace("'", '', $value) : $value;
         }
     }
     return $array;
 }