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; }
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(); } }
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(); } }