Esempio n. 1
0
 /**
  * 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);
 }
Esempio n. 5
0
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'");
        }
    }
}