private function _handleFileUpload($surveyid, $aData) { $vvoutput = ''; $donotimport = array(); $clang = $this->getController()->lang; $filePath = $this->_moveUploadedFile($aData); $aFileContents = $this->_readFile($filePath); unlink($filePath); //delete the uploaded file unset($aFileContents[0]); //delete the first line Survey_dynamic::sid($surveyid); $survey = new Survey_dynamic(); list($aFieldnames, $nbOfFields) = $this->_getFieldInfo($aFileContents); $aRealFieldNames = Yii::app()->db->getSchema()->getTable($survey->tableName())->getColumnNames(); if (Yii::app()->request->getPost('noid') == "noid") { unset($aRealFieldNames[0]); } if (Yii::app()->request->getPost('finalized') == "notfinalized") { unset($aRealFieldNames[1]); } unset($aFileContents[1]); //delete the second line //See if any fields in the import file don't exist in the active survey $missing = array_diff($aFieldnames, $aRealFieldNames); if (is_array($missing) && count($missing) > 0) { foreach ($missing as $key => $val) { $donotimport[] = $key; unset($aFieldnames[$key]); } } if (Yii::app()->request->getPost('finalized') == "notfinalized") { $donotimport[] = 1; unset($aFieldnames[1]); } $importcount = 0; $recordcount = 0; $aFieldnames = array_map('dbQuoteID', $aFieldnames); // Find out which fields are datefields, these have to be null if the imported string is empty $fieldmap = createFieldMap($surveyid, 'full', false, false, getBaseLanguageFromSurveyID($surveyid)); $datefields = array(); $numericfields = array(); foreach ($fieldmap as $field) { if ($field['type'] == 'D') { $datefields[] = $field['fieldname']; } if ($field['type'] == 'N' || $field['type'] == 'K') { $numericfields[] = $field['fieldname']; } } foreach ($aFileContents as $row) { if (trim($row) != "") { $recordcount++; $fieldvalues = $this->_prepFieldValues($aFieldnames, $row, $nbOfFields, $donotimport); $fielddata = $aFieldnames === array() && $fieldvalues === array() ? array() : array_combine($aFieldnames, $fieldvalues); foreach ($datefields as $datefield) { if (@$fielddata["'" . $datefield . "'"] == '') { unset($fielddata["'" . $datefield . "'"]); } } foreach ($numericfields as $numericfield) { if ($fielddata["`" . $numericfield . "`"] == '') { unset($fielddata["`" . $numericfield . "`"]); } } if (isset($fielddata['`submitdate`']) && $fielddata['`submitdate`'] == 'NULL') { unset($fielddata['`submitdate`']); } if ($fielddata['`lastpage`'] == '') { $fielddata['`lastpage`'] = '0'; } $recordexists = false; if (isset($fielddata['`id`'])) { $result = $survey->findAllByAttributes(array('id' => $fielddata['`id`'])); $recordexists = $result > 0; // Check if record with same id exists if ($recordexists) { if (Yii::app()->request->getPost('insert') == "ignore") { $aData['msgs'][] .= sprintf($clang->gT("Record ID %s was skipped because of duplicate ID."), $fielddata['`id`']); continue; } if (Yii::app()->request->getPost('insert') == "replace") { $result = $survey->deleteSomeRecords(array('id' => $fielddata['`id`'])); $recordexists = false; } } } if (Yii::app()->request->getPost('insert') == "renumber") { unset($fielddata['`id`']); } if (isset($fielddata['`id`'])) { switchMSSQLIdentityInsert("survey_{$surveyid}", true); } $result = $survey->insertRecords($fielddata); if (isset($fielddata['id'])) { switchMSSQLIdentityInsert("survey_{$surveyid}", false); } if (!$result) { $aData['error_msg'] = sprintf($clang->gT("Import failed on record %d"), $recordcount); $this->_renderWrappedTemplate('dataentry', 'warning_header', $aData); die; } else { $importcount++; } $aData['importcount'] = $importcount; } } $aData['noid'] = Yii::app()->request->getPost('noid'); $aData['insertstyle'] = Yii::app()->request->getPost('insertstyle'); $this->_renderWrappedTemplate('dataentry', 'vvimport_upload', $aData); }