Esempio n. 1
0
 private function parseData($data, $preset)
 {
     $model = $this->setModel($data);
     if ($model) {
         foreach ($preset as $col => $value) {
             $model->{$col} = $value;
         }
         $walked = [];
         foreach ($this->object->params as $param) {
             if ($model && $param->type && $param->type != 'item_key') {
                 if ($param->type == 'object') {
                     $object = \App::$cur->migrations->getMigrationObject($param->value);
                     $parser = new \Migrations\Parser\Object();
                     $parser->data =& $data[$param->code];
                     $parser->object = $object;
                     $parser->parentObject = $this;
                     $parser->parentModel = $model;
                     $parser->walker = $this->walker;
                     $parser->parse();
                 } else {
                     if ($param->type == 'custom') {
                         $parserName = $param->value;
                     } else {
                         $parserName = '\\Migrations\\Parser\\Object\\' . ucfirst($param->type);
                     }
                     $parser = new $parserName();
                     $parser->data =& $data[$param->code];
                     $parser->param = $param;
                     $parser->model = $model;
                     $parser->object = $this;
                     $parser->parse();
                 }
             }
             $walked[$param->code] = true;
         }
         //check unparsed params
         foreach ($data as $key => $item) {
             //skip parsed and attribtes
             if ($key == '@attributes' || !empty($walked[$key])) {
                 continue;
             }
             $param = new \Migrations\Migration\Object\Param();
             $param->object_id = $this->object->id;
             $param->code = $key;
             $param->save();
         }
         if ($model) {
             if (!$model->pk() || !empty($model->_changedParams)) {
                 $model->save();
             }
             return $model->pk();
         }
     }
     return 0;
 }
Esempio n. 2
0
 private function parseData(&$data, $params)
 {
     $objectParamValue = ['col' => '', 'value' => ''];
     $walked = [];
     foreach ($params as $param) {
         $objectParam = $data[$param->code];
         if ($this->model && $param->type) {
             switch ($param->type) {
                 case 'paramName':
                     $col = \Migrations\Migration\Object\Param\Value::get([['original', (string) $objectParam], ['param_id', $param->id]]);
                     if (!$col) {
                         $valueObject = new \Migrations\Migration\Object\Param\Value();
                         $valueObject->param_id = $param->id;
                         $valueObject->original = (string) $objectParam;
                         $valueObject->save();
                     } else {
                         $objectParamValue['col'] = $col->replace;
                     }
                     break;
                 case 'paramValue':
                     if ($objectParamValue['col']) {
                         $modelName = get_class($this->model);
                         $col = $modelName::$cols[$objectParamValue['col']];
                         if ($col['type'] == 'select' && $col['source'] == 'relation') {
                             $relation = $modelName::getRelation($col['relation']);
                             $item = $relation['model']::get((string) $objectParam, 'name');
                             if (!$item) {
                                 $item = new $relation['model']();
                                 $item->name = (string) $objectParam;
                                 $item->save();
                             }
                             $objectParamValue['value'] = $item->id;
                         }
                     }
                     break;
             }
         }
         $walked[$param->code] = true;
     }
     if ($objectParamValue['col']) {
         $this->model->{$objectParamValue['col']} = $objectParamValue['value'];
     }
     //check unparsed params
     foreach ($data as $key => $item) {
         //skip parsed and attribtes
         if ($key == '@attributes' || !empty($walked[$key])) {
             continue;
         }
         $param = new \Migrations\Migration\Object\Param();
         $param->parent_id = $this->param->id;
         $param->object_id = $this->object->object->id;
         $param->code = $key;
         $param->save();
     }
 }
Esempio n. 3
0
 public function parse()
 {
     $walked = [];
     $params = \Migrations\Migration\Object\Param::getList(['where' => [['parent_id', $this->param->id], ['object_id', $this->object->object->id]]]);
     foreach ($params as $param) {
         if ($this->model) {
             if ($param->type == 'custom') {
                 $parserName = $param->value;
             } else {
                 $parserName = '\\Migrations\\Parser\\Object\\' . ucfirst($param->type);
             }
             if (!\Tools::isAssoc($this->data)) {
                 foreach ($this->data as $data) {
                     $parser = new $parserName();
                     $parser->data =& $data;
                     $parser->param = $param;
                     $parser->model = $this->model;
                     $parser->object = $this->object;
                     $parser->parse();
                 }
             } else {
                 $parser = new $parserName();
                 $parser->data =& $this->data[$param->code];
                 $parser->param = $param;
                 $parser->model = $this->model;
                 $parser->object = $this->object;
                 $parser->parse();
             }
         }
         $walked[$param->code] = true;
     }
     //check unparsed params
     foreach ($this->data as $key => $data) {
         //skip parsed and attribtes
         if ($key == '@attributes' || !empty($walked[$key])) {
             continue;
         }
         $param = new \Migrations\Migration\Object\Param();
         $param->parent_id = $this->param->id;
         $param->object_id = $this->object->object->id;
         $param->code = $key;
         $param->type = 'param';
         $param->save();
     }
 }