Skip to content

Commit

Permalink
Fixed issue #7247: Token related error after submitting a survey
Browse files Browse the repository at this point in the history
  • Loading branch information
c-schmitz committed Mar 2, 2013
1 parent 138242c commit 0a512cb
Show file tree
Hide file tree
Showing 3 changed files with 52 additions and 60 deletions.
33 changes: 15 additions & 18 deletions application/controllers/admin/dataentry.php
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,6 @@
* other free or open source software licenses.
* See COPYRIGHT.php for copyright notices and details.
*
* $Id$
*/

/**
Expand Down Expand Up @@ -334,24 +333,22 @@ function import($surveyid)
{
// show UI for choosing old table

$result = dbGetTablesLike("old\_survey\_%");
$aTables = dbGetTablesLike("old\_survey\_%");

$aOptionElements = array();
//$queryCheckColumnsActive = $schema->getTable($oldtable)->columnNames;
$resultActive = $schema->getTable("{{survey_{$surveyid}}}")->columnNames;
//$resultActive = dbExecuteAssoc($queryCheckColumnsActive) or show_error("Error:<br />$query<br />");
$countActive = count($resultActive);

foreach ($result as $row)
foreach ($aTables as $sTable)
{
$row = each($row);

//$resultOld = dbExecuteAssoc($queryCheckColumnsOld) or show_error("Error:<br />$query<br />");
$resultOld = $schema->getTable($row[1])->columnNames;
$resultOld = $schema->getTable($sTable)->columnNames;

if($countActive == count($resultOld)) //num_fields()
{
$aOptionElements[$row[1]] = $row[1];
$aOptionElements[$sTable] = $sTable;
}
}
$aHTMLOptions=array('empty'=>$clang->gT('Please select...'));
Expand Down Expand Up @@ -396,15 +393,15 @@ function import($surveyid)
$resultOldValues = dbExecuteAssoc($queryOldValues) or show_error("Error:<br />$queryOldValues<br />");
$iRecordCount = 0;
$aSRIDConversions=array();
foreach ($resultOldValues->readAll() as $row)
foreach ($resultOldValues->readAll() as $sTable)
{
$iOldID=$row['id'];
unset($row['id']);
$iOldID=$sTable['id'];
unset($sTable['id']);
// Remove NULL values
$row=array_filter($row, 'strlen');
$sTable=array_filter($sTable, 'strlen');
//$sInsertSQL=Yii::app()->db->GetInsertSQL($activetable, $row);
$sInsertSQL="INSERT into {$activetable} (".implode(",", array_map("dbQuoteID", array_keys($row))).") VALUES (".implode(",", array_map("dbQuoteAll",array_values($row))).")";
$result = dbExecuteAssoc($sInsertSQL) or show_error("Error:<br />$sInsertSQL<br />");
$sInsertSQL="INSERT into {$activetable} (".implode(",", array_map("dbQuoteID", array_keys($sTable))).") VALUES (".implode(",", array_map("dbQuoteAll",array_values($sTable))).")";
$aTables = dbExecuteAssoc($sInsertSQL) or show_error("Error:<br />$sInsertSQL<br />");

$aSRIDConversions[$iOldID] = getLastInsertID($activetable);
$iRecordCount++;
Expand All @@ -427,16 +424,16 @@ function import($surveyid)
$resultOldValues = dbExecuteAssoc($queryOldValues) or show_error("Error:<br />$queryOldValues<br />");
$iRecordCountT=0;
$aSRIDConversions=array();
foreach ($resultOldValues->readAll() as $row)
foreach ($resultOldValues->readAll() as $sTable)
{
if (isset($aSRIDConversions[$row['id']]))
if (isset($aSRIDConversions[$sTable['id']]))
{
$row['id']=$aSRIDConversions[$row['id']];
$sTable['id']=$aSRIDConversions[$sTable['id']];
}
else continue;
//$sInsertSQL=Yii::app()->db->GetInsertSQL($sNewTimingsTable,$row);
$sInsertSQL="INSERT into {$sNewTimingsTable} (".implode(",", array_map("dbQuoteID", array_keys($row))).") VALUES (".implode(",", array_map("dbQuoteAll", array_values($row))).")";
$result = dbExecuteAssoc($sInsertSQL) or show_error("Error:<br />$sInsertSQL<br />");
$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:<br />$sInsertSQL<br />");
$iRecordCountT++;
}
Yii::app()->session['flashmessage'] = sprintf($clang->gT("%s old response(s) and according timings were successfully imported."),$iRecordCount,$iRecordCountT);
Expand Down
2 changes: 1 addition & 1 deletion application/helpers/database_helper.php
Original file line number Diff line number Diff line change
Expand Up @@ -187,7 +187,7 @@ function dbSelectTablesLike($table)
*/
function dbGetTablesLike($table)
{
return (array) Yii::app()->db->createCommand(dbSelectTablesLike("{{{$table}}}"))->queryAll();
return (array) Yii::app()->db->createCommand(dbSelectTablesLike("{{{$table}}}"))->queryColumn();
}

/**
Expand Down
77 changes: 36 additions & 41 deletions application/helpers/update/updatedb_helper.php
Original file line number Diff line number Diff line change
Expand Up @@ -671,6 +671,7 @@ function db_upgrade_all($oldversion) {
addColumn('{{question_attributes}}','language',"{$sVarchar}(20)");

upgradeQuestionAttributes148();
upgradeTokens148();
fixSubquestions();
Yii::app()->db->createCommand()->update('{{settings_global}}',array('stg_value'=>148),"stg_name='DBVersion'");
}
Expand Down Expand Up @@ -1246,6 +1247,20 @@ function upgradeSurveys156()
}
}

// Add the usesleft field to all existing token tables
function upgradeTokens148()
{
$aTables = dbGetTablesLike("tokens%");
$sVarchar=Yii::app()->getConfig('varchar');
foreach ( $aTables as $sTable )
{
addColumn($sTable, 'participant_id', "{$sVarchar}(50)");
addColumn($sTable, 'blacklisted', "{$sVarchar}(17)");
}
}



function upgradeQuestionAttributes148()
{
global $modifyoutput;
Expand Down Expand Up @@ -1278,8 +1293,8 @@ function upgradeQuestionAttributes148()
function upgradeSurveyTimings146()
{
global $modifyoutput;
$aTimingTables = dbGetTablesLike("%timings");
foreach ($aTimingTables as $sTable) {
$aTables = dbGetTablesLike("%timings");
foreach ($aTables as $sTable) {
Yii::app()->db->createCommand()->renameColumn($sTable,'interviewTime','interviewtime');
}
}
Expand All @@ -1289,15 +1304,11 @@ function upgradeSurveyTimings146()
function upgradeTokens145()
{
global $modifyoutput;
$surveyidresult = dbGetTablesLike("tokens%");
if (!$surveyidresult) {return "Database Error";}
else
$aTables = dbGetTablesLike("tokens%");
foreach ( $aTables as $sTable )
{
foreach ( $surveyidresult as $sv )
{
addColumn(reset($sv),'usesleft',"integer NOT NULL default 1");
Yii::app()->db->createCommand()->update(reset($sv),array('usesleft'=>'0'),"completed<>'N'");
}
addColumn($sTable,'usesleft',"integer NOT NULL default 1");
Yii::app()->db->createCommand()->update($sTable,array('usesleft'=>'0'),"completed<>'N'");
}
}

Expand Down Expand Up @@ -1612,14 +1623,10 @@ function upgradeSurveyTables139()
{
global $modifyoutput;
$dbprefix = Yii::app()->db->tablePrefix;
$surveyidresult = dbGetTablesLike("survey\_%");
if (empty($surveyidresult)) {return "Database Error";}
else
$aTables = dbGetTablesLike("survey\_%");
foreach ( $aTables as $sTable )
{
foreach ( $surveyidresult as $sv )
{
addColumn(reset($sv),'lastpage','integer');
}
addColumn($sTable,'lastpage','integer');
}
}

Expand All @@ -1628,15 +1635,11 @@ function upgradeSurveyTables139()
function upgradeTokenTables134()
{
global $modifyoutput;
$surveyidresult = dbGetTablesLike("tokens%");
if (!$surveyidresult) {return "Database Error";}
else
$aTables = dbGetTablesLike("tokens%");
foreach ( $aTables as $sTable )
{
foreach ( $surveyidresult as $sv )
{
addColumn(reset($sv),'validfrom',"datetime");
addColumn(reset($sv),'validuntil',"datetime");
}
addColumn($sTable,'validfrom',"datetime");
addColumn($sTable,'validuntil',"datetime");
}
}

Expand All @@ -1645,15 +1648,11 @@ function upgradeTokens128()
{
global $modifyoutput;
$sVarchar=Yii::app()->getConfig('varchar');
$surveyidresult = dbGetTablesLike("tokens%");
if (!$surveyidresult) {return "Database Error";}
else
$aTables = dbGetTablesLike("tokens%");
foreach ( $aTables as $sTable )
{
foreach ( $surveyidresult as $sv )
{
addColumn(reset($sv),'remindersent',"{$sVarchar}(17) DEFAULT 'N'");
addColumn(reset($sv),'remindercount',"integer DEFAULT '0'");
}
addColumn($sTable,'remindersent',"{$sVarchar}(17) DEFAULT 'N'");
addColumn($sTable,'remindercount',"integer DEFAULT '0'");
}
}

Expand Down Expand Up @@ -1723,15 +1722,11 @@ function upgradeTokenTables126()
{
global $modifyoutput;
$sVarchar=Yii::app()->getConfig('varchar');
$surveyidresult = dbGetTablesLike("tokens%");
if (!$surveyidresult) {return "Database Error";}
else
$aTables = dbGetTablesLike("tokens%");
foreach ( $aTables as $sTable )
{
foreach ( $surveyidresult as $sv )
{
Yii::app()->db->createCommand()->alterColumn(reset($sv),'token',"{$sVarchar}(15)");
addColumn(reset($sv),'emailstatus',"{$sVarchar}(300) NOT NULL DEFAULT 'OK'");
}
Yii::app()->db->createCommand()->alterColumn($sTable,'token',"{$sVarchar}(15)");
addColumn($sTable,'emailstatus',"{$sVarchar}(300) NOT NULL DEFAULT 'OK'");
}
}

Expand Down

0 comments on commit 0a512cb

Please sign in to comment.