/** * dataentry::import() * Function responsible to import responses from old survey table(s). * @param mixed $surveyid * @return void */ function import($surveyid) { $surveyid = sanitize_int($surveyid); $subaction = ''; $aData = array('clang' => Yii::app()->lang, 'surveyid' => $surveyid); if (hasSurveyPermission($surveyid, 'responses', 'create')) { //if (!isset($surveyid)) $surveyid = $this->input->post('sid'); if (!isset($oldtable) && isset($_POST['oldtable'])) { $oldtable = Yii::app()->request->getPost('oldtable'); $subaction = Yii::app()->request->getPost('subaction'); } $schema = Yii::app()->db->getSchema(); $clang = Yii::app()->lang; Yii::app()->loadHelper('database'); if (!$subaction == "import") { // show UI for choosing old table $result = 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) { $row = each($row); //$resultOld = dbExecuteAssoc($queryCheckColumnsOld) or show_error("Error:<br />$query<br />"); $resultOld = $schema->getTable($row[1])->columnNames; if ($countActive == count($resultOld)) { $aOptionElements[$row[1]] = $row[1]; } } $aHTMLOptions = array('empty' => $clang->gT('Please select...')); $aData['optionElements'] = CHtml::listOptions('', $aOptionElements, $aHTMLOptions); //Get the menubar $aData['display']['menu_bars']['browse'] = $clang->gT("Quick statistics"); $this->_renderWrappedTemplate('dataentry', 'import', $aData); } else { /* * TODO: * - mysql fit machen * -- quotes for mysql beachten --> ` * - warnmeldung mehrsprachig * - testen */ // if($aDatabasetype=="postgres") // { $activetable = "{{survey_{$surveyid}}}"; //Fields we don't want to import $dontimportfields = array(); //$aFieldsOldTable=array_values(Yii::app()->db->MetaColumnNames($oldtable, true)); //$aFieldsNewTable=array_values(Yii::app()->db->MetaColumnNames($activetable, true)); $aFieldsOldTable = array_values($schema->getTable($oldtable)->columnNames); $aFieldsNewTable = array_values($schema->getTable($activetable)->columnNames); // Only import fields where the fieldnames are matching $aValidFields = array_intersect($aFieldsOldTable, $aFieldsNewTable); // Only import fields not being in the $dontimportfields array $aValidFields = array_diff($aValidFields, $dontimportfields); $queryOldValues = "SELECT " . implode(", ", array_map("dbQuoteID", $aValidFields)) . " FROM {$oldtable} "; $resultOldValues = dbExecuteAssoc($queryOldValues) or show_error("Error:<br />{$queryOldValues}<br />"); $iRecordCount = 0; $aSRIDConversions = array(); foreach ($resultOldValues->readAll() as $row) { $iOldID = $row['id']; unset($row['id']); // Remove NULL values $row = array_filter($row, '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 />"); $aSRIDConversions[$iOldID] = Yii::app()->db->getCommandBuilder()->getLastInsertID($activetable); $iRecordCount++; } Yii::app()->session['flashmessage'] = sprintf($clang->gT("%s old response(s) were successfully imported."), $iRecordCount); $sOldTimingsTable = substr($oldtable, 0, strrpos($oldtable, '_')) . '_timings' . substr($oldtable, strrpos($oldtable, '_')); $sNewTimingsTable = "{{{$surveyid}_timings}}"; if (returnGlobal('importtimings') == 'Y' && tableExists($sOldTimingsTable) && tableExists($sNewTimingsTable)) { // Import timings $aFieldsOldTimingTable = array_values($schema->getTable($sOldTimingsTable)->columnNames); $aFieldsNewTimingTable = array_values($schema->getTable($sNewTimingsTable)->columnNames); $aValidTimingFields = array_intersect($aFieldsOldTimingTable, $aFieldsNewTimingTable); $queryOldValues = "SELECT " . implode(", ", $aValidTimingFields) . " FROM {$sOldTimingsTable} "; $resultOldValues = dbExecuteAssoc($queryOldValues) or show_error("Error:<br />{$queryOldValues}<br />"); $iRecordCountT = 0; $aSRIDConversions = array(); foreach ($resultOldValues->readAll() as $row) { if (isset($aSRIDConversions[$row['id']])) { $row['id'] = $aSRIDConversions[$row['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 />"); $iRecordCountT++; } Yii::app()->session['flashmessage'] = sprintf($clang->gT("%s old response(s) and according timings were successfully imported."), $iRecordCount, $iRecordCountT); } $this->getController()->redirect(Yii::app()->getController()->createUrl("/admin/responses/index/surveyid/{$surveyid}")); } } }
function upgradeTokenTables126() { global $modifyoutput; $aTables = dbGetTablesLike("tokens%"); foreach ($aTables as $sTable) { Yii::app()->getDb()->createCommand()->alterColumn($sTable, 'token', "string(15)"); addColumn($sTable, 'emailstatus', "string(300) NOT NULL DEFAULT 'OK'"); } }
function upgradeTokenTables126() { global $modifyoutput; $sVarchar = Yii::app()->getConfig('varchar'); $aTables = dbGetTablesLike("tokens%"); foreach ($aTables as $sTable) { Yii::app()->db->createCommand()->alterColumn($sTable, 'token', "{$sVarchar}(15)"); addColumn($sTable, 'emailstatus', "{$sVarchar}(300) NOT NULL DEFAULT 'OK'"); } }
public function run($sArgument) { if (!isset($sArgument) || !isset($sArgument[0]) || $sArgument[0] != 'yes') { die('This CLI command wipes a LimeSurvey installation clean (including all user except for the user ID 1 and user-uploaded content). For security reasons this command can only started if you add the parameter \'yes\' to the command line.'); } Yii::import('application.helpers.common_helper', true); Yii::import('application.helpers.database_helper', true); $actquery = "truncate table {{assessments}}"; Yii::app()->db->createCommand($actquery)->execute(); $actquery = "truncate table {{answers}}"; Yii::app()->db->createCommand($actquery)->execute(); $actquery = "truncate table {{conditions}}"; Yii::app()->db->createCommand($actquery)->execute(); $actquery = "truncate table {{defaultvalues}}"; Yii::app()->db->createCommand($actquery)->execute(); $actquery = "truncate table {{labels}}"; Yii::app()->db->createCommand($actquery)->execute(); $actquery = "truncate table {{labelsets}}"; Yii::app()->db->createCommand($actquery)->execute(); $actquery = "truncate table {{groups}}"; Yii::app()->db->createCommand($actquery)->execute(); $actquery = "truncate table {{questions}}"; Yii::app()->db->createCommand($actquery)->execute(); $actquery = "truncate table {{surveys}}"; Yii::app()->db->createCommand($actquery)->execute(); $actquery = "truncate table {{surveys_languagesettings}}"; Yii::app()->db->createCommand($actquery)->execute(); $actquery = "delete from {{permissions}} where uid<>1"; Yii::app()->db->createCommand($actquery)->execute(); $actquery = "truncate table {{quota}}"; Yii::app()->db->createCommand($actquery)->execute(); $actquery = "truncate table {{quota_members}}"; Yii::app()->db->createCommand($actquery)->execute(); $actquery = "truncate table {{quota_languagesettings}}"; Yii::app()->db->createCommand($actquery)->execute(); $actquery = "truncate table {{question_attributes}}"; Yii::app()->db->createCommand($actquery)->execute(); $actquery = "truncate table {{user_groups}}"; Yii::app()->db->createCommand($actquery)->execute(); $actquery = "truncate table {{user_in_groups}}"; Yii::app()->db->createCommand($actquery)->execute(); $actquery = "truncate table {{templates}}"; Yii::app()->db->createCommand($actquery)->execute(); $actquery = "truncate table {{participants}}"; Yii::app()->db->createCommand($actquery)->execute(); $actquery = "truncate table {{participant_attribute_names}}"; Yii::app()->db->createCommand($actquery)->execute(); $actquery = "truncate table {{participant_attribute_names_lang}}"; Yii::app()->db->createCommand($actquery)->execute(); $actquery = "truncate table {{participant_attribute_values}}"; Yii::app()->db->createCommand($actquery)->execute(); $actquery = "truncate table {{participant_shares}}"; Yii::app()->db->createCommand($actquery)->execute(); $actquery = "truncate table {{failed_login_attempts}}"; Yii::app()->db->createCommand($actquery)->execute(); $actquery = "truncate table {{saved_control}}"; Yii::app()->db->createCommand($actquery)->execute(); $actquery = "truncate table {{survey_links}}"; Yii::app()->db->createCommand($actquery)->execute(); $actquery = "delete from {{users}} where uid<>1"; Yii::app()->db->createCommand($actquery)->execute(); $actquery = "update {{users}} set lang='en'"; Yii::app()->db->createCommand($actquery)->execute(); $surveyidresult = dbGetTablesLike("tokens%"); foreach ($surveyidresult as $sv) { Yii::app()->db->createCommand("drop table " . $sv)->execute(); } $surveyidresult = dbGetTablesLike("old\\_%"); foreach ($surveyidresult as $sv) { Yii::app()->db->createCommand("drop table " . $sv)->execute(); } $surveyidresult = dbGetTablesLike("survey\\_%"); foreach ($surveyidresult as $sv) { if (strpos($sv, 'survey_links') === false && strpos($sv, 'survey_url_parameters') === false) { Yii::app()->db->createCommand("drop table " . $sv)->execute(); } } $sBaseUploadDir = dirname(dirname(dirname(__FILE__))) . DIRECTORY_SEPARATOR . 'upload'; SureRemoveDir($sBaseUploadDir . DIRECTORY_SEPARATOR . 'surveys', false); SureRemoveDir($sBaseUploadDir . DIRECTORY_SEPARATOR . 'templates', false); }
function upgradeTokenTables126() { global $modifyoutput; $sVarchar = Yii::app()->getConfig('varchar'); $surveyidresult = dbGetTablesLike("tokens%"); if (!$surveyidresult) { return "Database Error"; } else { foreach ($surveyidresult as $sv) { Yii::app()->db->createCommand()->alterColumn(reset($sv), 'token', "{$sVarchar}(15)"); addColumn(reset($sv), 'emailstatus', "{$sVarchar}(300) NOT NULL DEFAULT 'OK'"); } } }