From a2c3fe32cdc130dbc86a284ce5b21f0301c4664c Mon Sep 17 00:00:00 2001 From: Carsten Schmitz Date: Fri, 8 May 2015 11:42:48 +0200 Subject: [PATCH] Fixed issue #9466: "Import response from deactivated table" doesn't import timing table --- application/controllers/admin/dataentry.php | 26 ++++++++++----------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/application/controllers/admin/dataentry.php b/application/controllers/admin/dataentry.php index 1d772fe6492..8c1f70d062a 100644 --- a/application/controllers/admin/dataentry.php +++ b/application/controllers/admin/dataentry.php @@ -292,6 +292,7 @@ public function import($surveyid) } else { + $aSRIDConversions=array(); $targetSchema = SurveyDynamic::model($iSurveyId)->getTableSchema(); $sourceTable = PluginDynamic::model($_POST['table']); $sourceSchema = $sourceTable->getTableSchema(); @@ -327,7 +328,7 @@ public function import($surveyid) $sourceResponses = new CDataProviderIterator(new CActiveDataProvider($sourceTable), 500); foreach ($sourceResponses as $sourceResponse) { - + $iOldID=$sourceResponse->id; // Using plugindynamic model because I dont trust surveydynamic. $targetResponse = new PluginDynamic("{{survey_$iSurveyId}}"); @@ -337,37 +338,36 @@ public function import($surveyid) } $imported++; $targetResponse->save(); + $aSRIDConversions[$iOldID]=$targetResponse->id; unset($targetResponse); } Yii::app()->session['flashmessage'] = sprintf(gT("%s old response(s) were successfully imported."), $imported); - $sOldTimingsTable=substr($sourceTable->tableName(),0,strrpos($sourceTable->tableName(),'_')).'_timings'.substr($sourceTable->tableName(),strrpos($sourceTable->tableName(),'_')); + $sOldTimingsTable=substr(substr($sourceTable->tableName(),0,strrpos($sourceTable->tableName(),'_')).'_timings'.substr($sourceTable->tableName(),strrpos($sourceTable->tableName(),'_')),strlen(Yii::app()->db->tablePrefix)); $sNewTimingsTable = "survey_{$surveyid}_timings"; if (isset($_POST['timings']) && $_POST['timings'] == 1 && tableExists($sOldTimingsTable) && tableExists($sNewTimingsTable)) { // Import timings - $aFieldsOldTimingTable=array_values($schema->getTable($sOldTimingsTable)->columnNames); - $aFieldsNewTimingTable=array_values($schema->getTable($sNewTimingsTable)->columnNames); + $arDestination=SurveyTimingDynamic::model($surveyid); + $aFieldsOldTimingTable=array_values(Yii::app()->db->schema->getTable('{{'.$sOldTimingsTable.'}}')->columnNames); + $aFieldsNewTimingTable=array_values(Yii::app()->db->schema->getTable('{{'.$sNewTimingsTable.'}}')->columnNames); $aValidTimingFields=array_intersect($aFieldsOldTimingTable,$aFieldsNewTimingTable); - $queryOldValues = "SELECT ".implode(", ",$aValidTimingFields)." FROM {$sOldTimingsTable} "; - $resultOldValues = dbExecuteAssoc($queryOldValues) or show_error("Error:
$queryOldValues
"); + $sQueryOldValues = "SELECT ".implode(", ",$aValidTimingFields)." FROM {{{$sOldTimingsTable}}} "; + $aQueryOldValues = Yii::app()->db->createCommand($sQueryOldValues)->query()->readAll(); //Checked $iRecordCountT=0; - $aSRIDConversions=array(); - foreach ($resultOldValues->readAll() as $sTable) + foreach ($aQueryOldValues as $sRecord) { - if (isset($aSRIDConversions[$sTable['id']])) + if (isset($aSRIDConversions[$sRecord['id']])) { - $sTable['id']=$aSRIDConversions[$sTable['id']]; + $sRecord['id']=$aSRIDConversions[$sRecord['id']]; } else continue; - //$sInsertSQL=Yii::app()->db->GetInsertSQL($sNewTimingsTable,$row); - $sInsertSQL="INSERT into {$sNewTimingsTable} (".implode(",", array_map("dbQuoteID", array_keys($sTable))).") VALUES (".implode(",", array_map("dbQuoteAll", array_values($sTable))).")"; - $aTables = dbExecuteAssoc($sInsertSQL) or show_error("Error:
$sInsertSQL
"); + Yii::app()->db->createCommand()->insert("{{{$sNewTimingsTable}}}",$sRecord); $iRecordCountT++; } Yii::app()->session['flashmessage'] = sprintf(gT("%s old response(s) and according timings were successfully imported."),$imported,$iRecordCountT);