/** * import a table as flexiobject * @param String $sName table * @return FlexiObject */ public function getImport($sName, $sTable) { $bExists = $this->exists($sTable); if (empty($sName) || empty($sTable)) { throw new Exception("Name or table not specified: " . $sName . ", " . $sTable); } $aField = FlexiModelUtil::getTableSchema($sTable); $oObject = $bExists ? $this->load($sName) : new FlexiTableObject($sName, $sTable); $this->doLog("Importing: " . $sName); foreach ($aField as $oField) { $sFieldName = $oField["Field"]; $oFieldObject = $oObject->existsField($sFieldName) ? $oObject->aChild["field"][$sFieldName] : new FlexiTableFieldObject($sFieldName); $aType = FlexiModelUtil::parseFieldType($oField["Type"]); $sType = $oFieldObject->type; $sPrecision = $aType["precision"]; $sDBType = $aType["type"]; $aOptions = $aType["option"]; $bUnsigned = $aType["unsigned"]; //$this->doLog("Field2: " . $sFieldName . ", type:" . $sDBType. ",option:" . print_r($aOptions,true)); if (!empty($sType)) { $sDefaultType = $this->getFieldInputTypeByDBType($sDBType); //check on existing type // only special type cannot change to default type switch ($sType) { case "select-tinyint": case "select-smallint": case "select-int": case "select-text": case "select-enum": case "select-bigint": case "select-char": switch ($sDBType) { case "int": case "smallint": case "tinyint": case "text": case "enum": case "bigint": case "char": $sType = "select-" . $sDBType; break; case "varchar": $sType = "select-text"; break; default: $sType = $sDefaultType; $this->doLog("Field: " . $sFieldName . ",unsupported select for type: " . $sDBType . ", using: " . $sType); //throw new Exception ("Unsupported select for type: " . $sDBType); } break; case "check-text": case "check-varchar": case "check-char": switch ($sDBType) { case "text": case "varchar": case "char": $sType = "check-" . $sDBType; break; default: $sType = $sDefaultType; $this->doLog("Field: " . $sFieldName . ",unsupported select for type: " . $sDBType . ", using: " . $sType); //throw new Exception ("Unsupported select for type: " . $sDBType); } break; case "html": case "html-tiny": case "html-medium": case "html-long": switch ($sDBType) { case "tinytext": $sType = "html-tiny"; break; case "mediumtext": $sType = "html-medium"; break; case "longtext": $sType = "html-long"; break; case "text": case "varchar": $sType = "html"; break; default: $sType = $sDefaultType; $this->doLog("Field: " . $sFieldName . ",unsupported html for type: " . $sDBType . ", using: " . $sType); //throw new Exception ("Unsupported html for type: " . $sDBType); } break; case "json": case "json-tiny": case "json-medium": case "json-long": switch ($sDBType) { case "tinytext": $sType = "json-tiny"; break; case "mediumtext": $sType = "json-medium"; break; case "longtext": $sType = "json-long"; break; case "text": case "varchar": $sType = "json"; break; default: $sType = $sDefaultType; $this->doLog("Field: " . $sFieldName . ",unsupported JSON for type: " . $sDBType . ", using: " . $sType); //throw new Exception ("Unsupported json for type: " . $sDBType); } break; case "money": switch ($sDBType) { case "decimal": case "float": case "double": $sType = "money"; break; default: $sType = $sDefaultType; $this->doLog("Field: " . $sFieldName . ",unsupported money for type: " . $sDBType . ", using: " . $sType); //throw new Exception ("Unsupported money for type: " . $sDBType); } break; case "email": switch ($sDBType) { case "text": case "tinytext": case "varchar": case "char": $sType = "email"; break; default: $sType = $sDefaultType; $this->doLog("Field: " . $sFieldName . ",unsupported select for type: " . $sDBType . ", using: " . $sType); //throw new Exception ("Unsupported select for type: " . $sDBType); } case "timestamp-int": if ($sDBType == "int") { $sType = "timestamp-int"; } else { $sType = $sDefaultType; $this->doLog("Field: " . $sFieldName . ",unsupported timestamp for type: " . $sDBType . ", using: " . $sType); } break; //default to direct field form input = dbtype //default to direct field form input = dbtype default: $sType = $sDefaultType; } //existing type } else { $sType = $this->getFieldInputTypeByDBType($sDBType); } //$this->doLog($sFieldName . ", type: " . $sDBType); //set precision 1st $oFieldObject->precision = $sPrecision; $oFieldObject->type = $sType; $oFieldObject->unsigned = $bUnsigned; if ($sDBType == "enum" && count($aOptions) > 0) { $aEnum = array(); foreach ($aOptions as $sValue) { //remove start and tailing ' $sOption = substr($sValue, 1, -1); $aEnum[] = $sOption; $oFieldObject->addOption($sOption); //$this->doLog("added: " . $sValue . "[" . $oFieldObject->options. "]"); } $oFieldObject->clearOtherOption($aEnum); //$this->doLog("options: " . $oFieldObject->options); } $this->doLog($sFieldName . ", type: " . $oFieldObject->type . ", dbtype:" . $oFieldObject->dbtype); $oFieldObject->cannull = $oField["Null"] == "YES"; $oFieldObject->primary = $oField["Key"] == "PRI"; $oFieldObject->default = is_null($oField["Default"]) ? $oFieldObject->cannull ? null : "" : "'" . $oField["Default"] . "'"; $oFieldObject->autonumber = strpos($oField["Extra"], "auto_increment") !== false; $oObject->aChild["field"][$sFieldName] = $oFieldObject; } return $oObject; }