/** * Read the next object from the resource. In this case, the 'row' is the * row in the csv file, and 'line' returns the line number in the file that * the object STARTED on. (CSV objects may span multiple lines, if they * contain newlines). * * @return array|false */ protected function read_object() { $obj = fgetcsv($this->csv_fp, null, $this->csv_delim, $this->csv_encl); $num = $this->line_num; if (!$obj) { return false; } else { // optionally remove the last, probably blank, column if (count($obj) && $this->lastcol_skip) { array_pop($obj); } // Increment line number, including any newlines in the object. // Also check for UTF-8 encoding $this->line_num++; foreach ($obj as $i => $col) { $this->line_num += substr_count($col, "\n"); if (!Encoding::is_utf8($col)) { $obj[$i] = Encoding::convert_to_utf8($col); } } return array('row' => $this->position + ($this->csv_skip ? 2 : 1), 'data' => $obj, 'line' => $num); } }
/** * * * @param unknown $model */ function air2_model_prevalidate(&$model) { $table = $model->getTable(); $col_defs = $table->getColumns(); $now = air2_date(); foreach ($col_defs as $col => $def) { if (preg_match('/_uuid$/', $col) && isset($def['unique']) && $def['unique']) { if (!isset($model->{$col}) || !strlen($model->{$col})) { $model->{$col} = air2_generate_uuid(12); } } elseif (preg_match('/_cre_dtim$/', $col)) { if (!$model->exists() && !strlen($model->{$col})) { $model->{$col} = $now; } } elseif (preg_match('/_upd_dtim$/', $col)) { $model->{$col} = $now; } elseif (preg_match('/_cre_user$/', $col)) { if (!$model->exists() && !strlen($model->{$col})) { if (defined('AIR2_REMOTE_USER_ID')) { $model->{$col} = AIR2_REMOTE_USER_ID; } else { $model->{$col} = 1; //sysuser -- TODO: check for shell users } } } elseif (preg_match('/_upd_user$/', $col)) { if (defined('AIR2_REMOTE_USER_ID')) { $model->{$col} = AIR2_REMOTE_USER_ID; } else { $model->{$col} = 1; //sysuser -- TODO: check for shell users } } elseif ($def['type'] === 'timestamp') { // validate the string for non cre/upd timestamps if (isset($model->{$col}) && !is_null($model->{$col})) { //NOTE: whenever you set a column in Doctrine, it checks that //the value has changed. Since '2010-01-01 01:01:01' is equal //to '2010-01-01T01:01:01', we need to NULL it first if (strpos($model->{$col}, 'T') !== false) { $airformat = air2_date(strtotime($model->{$col})); $model->{$col} = null; $model->{$col} = $airformat; } } } elseif ($def['type'] === 'date') { // validate the string for non cre/upd timestamps if (isset($model->{$col}) && !is_null($model->{$col})) { //NOTE: whenever you set a column in Doctrine, it checks that //the value has changed. Since '2010-01-01 01:01:01' is equal //to '2010-01-01T01:01:01', we need to NULL it first if (strpos($model->{$col}, 'T') !== false) { $airformat = air2_date(strtotime($model->{$col})); $model->{$col} = null; $model->{$col} = $airformat; } } } // default values if (strlen($table->getDefaultValueOf($col)) && !strlen($model->{$col})) { $model->{$col} = $table->getDefaultValueOf($col); } // lastly, check strings for valid UTF8 chars if ($def['type'] === 'string' && !Encoding::is_utf8($model->{$col})) { $modelname = get_class($model); throw new Doctrine_Exception("non-UTF8 string found in {$modelname}->{$col}: " . $model->{$col}); } } }
/** * Convert non-UTF8 strings to UTF8. Strings already in UTF8 will be * returned intact. * * @param string $str * @return string */ public static function convert_to_utf8($str) { if (Encoding::is_ascii($str)) { // valid! nothing to do } elseif (Encoding::is_utf8($str)) { // valid! nothing to do } elseif (Encoding::is_cp1252($str)) { $str = utf8_encode($str); $str = Encoding::fix_cp1252_codepoints_in_utf8($str); } elseif (Encoding::is_latin1($str)) { $str = utf8_encode($str); } return $str; }