mirror of
https://github.com/YunoHost-Apps/limesurvey_ynh.git
synced 2024-09-03 19:36:32 +02:00
2352 lines
115 KiB
PHP
2352 lines
115 KiB
PHP
|
<?PHP
|
||
|
/*
|
||
|
* LimeSurvey
|
||
|
* Copyright (C) 2007-2011 The LimeSurvey Project Team / Carsten Schmitz
|
||
|
* All rights reserved.
|
||
|
* License: GNU/GPL License v2 or later, see LICENSE.php
|
||
|
* LimeSurvey is free software. This version may have been modified pursuant
|
||
|
* to the GNU General Public License, and as distributed it includes or
|
||
|
* is derivative of works licensed under the GNU General Public License or
|
||
|
* other free or open source software licenses.
|
||
|
* See COPYRIGHT.php for copyright notices and details.
|
||
|
*
|
||
|
*/
|
||
|
|
||
|
// There will be a file for each database (accordingly named to the dbADO scheme)
|
||
|
// where based on the current database version the database is upgraded
|
||
|
// For this there will be a settings table which holds the last time the database was upgraded
|
||
|
|
||
|
function db_upgrade_all($iOldDBVersion) {
|
||
|
/// This function does anything necessary to upgrade
|
||
|
/// older versions to match current functionality
|
||
|
global $modifyoutput;
|
||
|
Yii::app()->loadHelper('database');
|
||
|
|
||
|
$sUserTemplateRootDir = Yii::app()->getConfig('usertemplaterootdir');
|
||
|
$sStandardTemplateRootDir = Yii::app()->getConfig('standardtemplaterootdir');
|
||
|
$oLang = Yii::app()->lang;
|
||
|
echo str_pad($oLang->gT('The LimeSurvey database is being upgraded').' ('.date('Y-m-d H:i:s').')',14096).".<br /><br />". $oLang->gT('Please be patient...')."<br /><br />\n";
|
||
|
|
||
|
$sDBDriverName=setsDBDriverName();
|
||
|
setVarchar($sDBDriverName);
|
||
|
$sVarchar = Yii::app()->getConfig('varchar');
|
||
|
$sAutoIncrement = Yii::app()->getConfig('autoincrement');
|
||
|
|
||
|
$oDB = Yii::app()->getDb();
|
||
|
$oDB->schemaCachingDuration=0; // Deactivate schema caching
|
||
|
$oTransaction = $oDB->beginTransaction();
|
||
|
try
|
||
|
{
|
||
|
if ($iOldDBVersion < 111)
|
||
|
{
|
||
|
// Language upgrades from version 110 to 111 because the language names did change
|
||
|
|
||
|
$aOldNewLanguages=array('german_informal'=>'german-informal',
|
||
|
'cns'=>'cn-Hans',
|
||
|
'cnt'=>'cn-Hant',
|
||
|
'pt_br'=>'pt-BR',
|
||
|
'gr'=>'el',
|
||
|
'jp'=>'ja',
|
||
|
'si'=>'sl',
|
||
|
'se'=>'sv',
|
||
|
'vn'=>'vi');
|
||
|
foreach ($aOldNewLanguages as $sOldLanguageCode=>$sNewLanguageCode)
|
||
|
{
|
||
|
alterLanguageCode($sOldLanguageCode,$sNewLanguageCode);
|
||
|
}
|
||
|
$oDB->createCommand()->update('{{settings_global}}',array('stg_value'=>111),"stg_name='DBVersion'");
|
||
|
}
|
||
|
|
||
|
if ($iOldDBVersion < 112) {
|
||
|
// New size of the username field (it was previously 20 chars wide)
|
||
|
$oDB->createCommand()->alterColumn('{{users}}','users_name',"{$sVarchar}(64) NOT NULL");
|
||
|
$oDB->createCommand()->update('{{settings_global}}',array('stg_value'=>112),"stg_name='DBVersion'");
|
||
|
}
|
||
|
|
||
|
if ($iOldDBVersion < 113) {
|
||
|
//Fixes the collation for the complete DB, tables and columns
|
||
|
|
||
|
if ($sDBDriverName=='mysql')
|
||
|
{
|
||
|
$sDatabaseName=getDBConnectionStringProperty('dbname');
|
||
|
fixMySQLCollations();
|
||
|
modifyDatabase("","ALTER DATABASE `$sDatabaseName` DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci;");echo $modifyoutput; flush();@ob_flush();
|
||
|
}
|
||
|
$oDB->createCommand()->update('{{settings_global}}',array('stg_value'=>113),"stg_name='DBVersion'");
|
||
|
}
|
||
|
|
||
|
if ($iOldDBVersion < 114) {
|
||
|
$oDB->createCommand()->alterColumn('{{saved_control}}','email',"{$sVarchar}(320) NOT NULL");
|
||
|
$oDB->createCommand()->alterColumn('{{surveys}}','adminemail',"{$sVarchar}(320) NOT NULL");
|
||
|
$oDB->createCommand()->alterColumn('{{users}}','email',"{$sVarchar}(320) NOT NULL");
|
||
|
$oDB->createCommand()->insert('{{settings_global}}',array('stg_name'=>'SessionName','stg_value'=>randomChars(64,'ABCDEFGHIJKLMNOPQRSTUVWXYZ!"$%&/()=?`+*~#",;.:abcdefghijklmnopqrstuvwxyz123456789')));
|
||
|
$oDB->createCommand()->update('{{settings_global}}',array('stg_value'=>114),"stg_name='DBVersion'");
|
||
|
}
|
||
|
|
||
|
if ($iOldDBVersion < 126) {
|
||
|
|
||
|
addColumn('{{surveys}}','printanswers',"{$sVarchar}(1) default 'N'");
|
||
|
addColumn('{{surveys}}','listpublic',"{$sVarchar}(1) default 'N'");
|
||
|
|
||
|
upgradeSurveyTables126();
|
||
|
upgradeTokenTables126();
|
||
|
|
||
|
// Create quota table
|
||
|
createTable('{{quota}}',array(
|
||
|
'id' => 'pk',
|
||
|
'sid' => 'integer',
|
||
|
'qlimit' => 'integer',
|
||
|
'name' => 'string',
|
||
|
'action' => 'integer',
|
||
|
'active' => 'integer NOT NULL DEFAULT 1'
|
||
|
));
|
||
|
|
||
|
// Create quota_members table
|
||
|
createTable('{{quota_members}}',array(
|
||
|
'id' => 'pk',
|
||
|
'sid' => 'integer',
|
||
|
'qid' => 'integer',
|
||
|
'quota_id' => 'integer',
|
||
|
'code' => $sVarchar.'(5)'
|
||
|
));
|
||
|
$oDB->createCommand()->createIndex('sid','{{quota_members}}','sid,qid,quota_id,code',true);
|
||
|
|
||
|
|
||
|
// Create templates_rights table
|
||
|
createTable('{{templates_rights}}',array(
|
||
|
'uid' => 'integer NOT NULL',
|
||
|
'folder' => 'string NOT NULL',
|
||
|
'use' => 'integer',
|
||
|
'PRIMARY KEY (uid, folder)'
|
||
|
));
|
||
|
|
||
|
// Create templates table
|
||
|
createTable('{{templates}}',array(
|
||
|
'folder' => 'string NOT NULL',
|
||
|
'creator' => 'integer NOT NULL',
|
||
|
'PRIMARY KEY (folder)'
|
||
|
));
|
||
|
|
||
|
// Rename Norwegian language codes
|
||
|
alterLanguageCode('no','nb');
|
||
|
|
||
|
addColumn('{{surveys}}','htmlemail',"{$sVarchar}(1) default 'N'");
|
||
|
addColumn('{{surveys}}','tokenanswerspersistence',"{$sVarchar}(1) default 'N'");
|
||
|
addColumn('{{surveys}}','usecaptcha',"{$sVarchar}(1) default 'N'");
|
||
|
addColumn('{{surveys}}','bounce_email','text');
|
||
|
addColumn('{{users}}','htmleditormode',"{$sVarchar}(7) default 'default'");
|
||
|
addColumn('{{users}}','superadmin',"integer NOT NULL default '0'");
|
||
|
addColumn('{{questions}}','lid1',"integer NOT NULL default '0'");
|
||
|
|
||
|
alterColumn('{{conditions}}','value',"string",false,'');
|
||
|
alterColumn('{{labels}}','title',"text");
|
||
|
|
||
|
$oDB->createCommand()->update('{{users}}',array('superadmin'=>1),"create_survey=1 AND create_user=1 AND move_user=1 AND delete_user=1 AND configurator=1");
|
||
|
$oDB->createCommand()->update('{{conditions}}',array('method'=>'=='),"(method is null) or method='' or method='0'");
|
||
|
|
||
|
dropColumn('{{users}}','move_user');
|
||
|
|
||
|
$oDB->createCommand()->update('{{settings_global}}',array('stg_value'=>126),"stg_name='DBVersion'");
|
||
|
}
|
||
|
|
||
|
if ($iOldDBVersion < 127) {
|
||
|
modifyDatabase("","create index answers_idx2 on {{answers}} (sortorder)"); echo $modifyoutput;
|
||
|
modifyDatabase("","create index assessments_idx2 on {{assessments}} (sid)"); echo $modifyoutput;
|
||
|
modifyDatabase("","create index assessments_idx3 on {{assessments}} (gid)"); echo $modifyoutput;
|
||
|
modifyDatabase("","create index conditions_idx2 on {{conditions}} (qid)"); echo $modifyoutput;
|
||
|
modifyDatabase("","create index conditions_idx3 on {{conditions}} (cqid)"); echo $modifyoutput;
|
||
|
modifyDatabase("","create index groups_idx2 on {{groups}} (sid)"); echo $modifyoutput;
|
||
|
modifyDatabase("","create index question_attributes_idx2 on {{question_attributes}} (qid)"); echo $modifyoutput;
|
||
|
modifyDatabase("","create index questions_idx2 on {{questions}} (sid)"); echo $modifyoutput;
|
||
|
modifyDatabase("","create index questions_idx3 on {{questions}} (gid)"); echo $modifyoutput;
|
||
|
modifyDatabase("","create index questions_idx4 on {{questions}} (type)"); echo $modifyoutput;
|
||
|
modifyDatabase("","create index quota_idx2 on {{quota}} (sid)"); echo $modifyoutput;
|
||
|
modifyDatabase("","create index saved_control_idx2 on {{saved_control}} (sid)"); echo $modifyoutput;
|
||
|
modifyDatabase("","create index user_in_groups_idx1 on {{user_in_groups}} (ugid, uid)"); echo $modifyoutput;
|
||
|
$oDB->createCommand()->update('{{settings_global}}',array('stg_value'=>127),"stg_name='DBVersion'");
|
||
|
}
|
||
|
|
||
|
if ($iOldDBVersion < 128) {
|
||
|
upgradeTokens128();
|
||
|
$oDB->createCommand()->update('{{settings_global}}',array('stg_value'=>128),"stg_name='DBVersion'");
|
||
|
}
|
||
|
|
||
|
if ($iOldDBVersion < 129) {
|
||
|
addColumn('{{surveys}}','startdate',"datetime");
|
||
|
addColumn('{{surveys}}','usestartdate',"{$sVarchar}(1) NOT NULL default 'N'");
|
||
|
$oDB->createCommand()->update('{{settings_global}}',array('stg_value'=>129),"stg_name='DBVersion'");
|
||
|
}
|
||
|
|
||
|
if ($iOldDBVersion < 130)
|
||
|
{
|
||
|
addColumn('{{conditions}}','scenario',"integer NOT NULL default '1'");
|
||
|
$oDB->createCommand()->update('{{conditions}}',array('scenario'=>'1'),"(scenario is null) or scenario=0");
|
||
|
$oDB->createCommand()->update('{{settings_global}}',array('stg_value'=>130),"stg_name='DBVersion'");
|
||
|
}
|
||
|
|
||
|
if ($iOldDBVersion < 131)
|
||
|
{
|
||
|
addColumn('{{surveys}}','publicstatistics',"{$sVarchar}(1) NOT NULL default 'N'");
|
||
|
$oDB->createCommand()->update('{{settings_global}}',array('stg_value'=>131),"stg_name='DBVersion'");
|
||
|
}
|
||
|
|
||
|
if ($iOldDBVersion < 132)
|
||
|
{
|
||
|
addColumn('{{surveys}}','publicgraphs',"{$sVarchar}(1) NOT NULL default 'N'");
|
||
|
$oDB->createCommand()->update('{{settings_global}}',array('stg_value'=>132),"stg_name='DBVersion'");
|
||
|
}
|
||
|
|
||
|
if ($iOldDBVersion < 133)
|
||
|
{
|
||
|
addColumn('{{users}}','one_time_pw','binary');
|
||
|
// Add new assessment setting
|
||
|
addColumn('{{surveys}}','assessments',"{$sVarchar}(1) NOT NULL default 'N'");
|
||
|
// add new assessment value fields to answers & labels
|
||
|
addColumn('{{answers}}','assessment_value',"integer NOT NULL default '0'");
|
||
|
addColumn('{{labels}}','assessment_value',"integer NOT NULL default '0'");
|
||
|
// copy any valid codes from code field to assessment field
|
||
|
switch ($sDBDriverName){
|
||
|
case 'mysql':
|
||
|
case 'mysqli':
|
||
|
$oDB->createCommand("UPDATE {{answers}} SET assessment_value=CAST(`code` as SIGNED) where `code` REGEXP '^-?[0-9]+$'")->execute();
|
||
|
$oDB->createCommand("UPDATE {{labels}} SET assessment_value=CAST(`code` as SIGNED) where `code` REGEXP '^-?[0-9]+$'")->execute();
|
||
|
// copy assessment link to message since from now on we will have HTML assignment messages
|
||
|
$oDB->createCommand("UPDATE {{assessments}} set message=concat(replace(message,'/''',''''),'<br /><a href=\"',link,'\">',link,'</a>')")->execute();
|
||
|
break;
|
||
|
case 'sqlsrv':
|
||
|
case 'dblib':
|
||
|
case 'mssql':
|
||
|
try{
|
||
|
$oDB->createCommand("UPDATE {{answers}} SET assessment_value=CAST([code] as int) WHERE ISNUMERIC([code])=1")->execute();
|
||
|
$oDB->createCommand("UPDATE {{labels}} SET assessment_value=CAST([code] as int) WHERE ISNUMERIC([code])=1")->execute();
|
||
|
} catch(Exception $e){};
|
||
|
// copy assessment link to message since from now on we will have HTML assignment messages
|
||
|
alterColumn('{{assessments}}','link',"varchar(max)",false);
|
||
|
alterColumn('{{assessments}}','message',"varchar(max)",false);
|
||
|
$oDB->createCommand("UPDATE {{assessments}} set message=replace(message,'/''','''')+'<br /><a href=\"'+link+'\">'+link+'</a>'")->execute();
|
||
|
break;
|
||
|
case 'pgsql':
|
||
|
$oDB->createCommand("UPDATE {{answers}} SET assessment_value=CAST(code as integer) where code ~ '^[0-9]+'")->execute();
|
||
|
$oDB->createCommand("UPDATE {{labels}} SET assessment_value=CAST(code as integer) where code ~ '^[0-9]+'")->execute();
|
||
|
// copy assessment link to message since from now on we will have HTML assignment messages
|
||
|
$oDB->createCommand("UPDATE {{assessments}} set message=replace(message,'/''','''')||'<br /><a href=\"'||link||'\">'||link||'</a>'")->execute();
|
||
|
break;
|
||
|
default: die('Unkown database type');
|
||
|
}
|
||
|
// activate assessment where assessment rules exist
|
||
|
$oDB->createCommand("UPDATE {{surveys}} SET assessments='Y' where sid in (SELECT sid FROM {{assessments}} group by sid)")->execute();
|
||
|
// add language field to assessment table
|
||
|
addColumn('{{assessments}}','language',"{$sVarchar}(20) NOT NULL default 'en'");
|
||
|
// update language field with default language of that particular survey
|
||
|
$oDB->createCommand("UPDATE {{assessments}} SET language=(select language from {{surveys}} where sid={{assessments}}.sid)")->execute();
|
||
|
// drop the old link field
|
||
|
dropColumn('{{assessments}}','link');
|
||
|
|
||
|
// Add new fields to survey language settings
|
||
|
addColumn('{{surveys_languagesettings}}','surveyls_url',"string");
|
||
|
addColumn('{{surveys_languagesettings}}','surveyls_endtext','text');
|
||
|
// copy old URL fields ot language specific entries
|
||
|
$oDB->createCommand("UPDATE {{surveys_languagesettings}} set surveyls_url=(select url from {{surveys}} where sid={{surveys_languagesettings}}.surveyls_survey_id)")->execute();
|
||
|
// drop old URL field
|
||
|
dropColumn('{{surveys}}','url');
|
||
|
$oDB->createCommand()->update('{{settings_global}}',array('stg_value'=>133),"stg_name='DBVersion'");
|
||
|
}
|
||
|
|
||
|
if ($iOldDBVersion < 134)
|
||
|
{
|
||
|
// Add new tokens setting
|
||
|
addColumn('{{surveys}}','usetokens',"{$sVarchar}(1) NOT NULL default 'N'");
|
||
|
addColumn('{{surveys}}','attributedescriptions','text');
|
||
|
dropColumn('{{surveys}}','attribute1');
|
||
|
dropColumn('{{surveys}}','attribute2');
|
||
|
upgradeTokenTables134();
|
||
|
$oDB->createCommand()->update('{{settings_global}}',array('stg_value'=>134),"stg_name='DBVersion'");
|
||
|
}
|
||
|
|
||
|
if ($iOldDBVersion < 135)
|
||
|
{
|
||
|
alterColumn('{{question_attributes}}','value','text');
|
||
|
$oDB->createCommand()->update('{{settings_global}}',array('stg_value'=>135),"stg_name='DBVersion'");
|
||
|
}
|
||
|
|
||
|
if ($iOldDBVersion < 136) //New Quota Functions
|
||
|
{
|
||
|
addColumn('{{quota}}','autoload_url',"integer NOT NULL default 0");
|
||
|
// Create quota table
|
||
|
$aFields = array(
|
||
|
'quotals_id' => 'pk',
|
||
|
'quotals_quota_id' => 'integer NOT NULL DEFAULT 0',
|
||
|
'quotals_language' => "{$sVarchar}(45) NOT NULL default 'en'",
|
||
|
'quotals_name' => 'string',
|
||
|
'quotals_message' => 'text NOT NULL',
|
||
|
'quotals_url' => 'string',
|
||
|
'quotals_urldescrip' => 'string',
|
||
|
);
|
||
|
createTable('{{quota_languagesettings}}',$aFields);
|
||
|
$oDB->createCommand()->update('{{settings_global}}',array('stg_value'=>136),"stg_name='DBVersion'");
|
||
|
}
|
||
|
|
||
|
if ($iOldDBVersion < 137) //New Quota Functions
|
||
|
{
|
||
|
addColumn('{{surveys_languagesettings}}','surveyls_dateformat',"integer NOT NULL default 1");
|
||
|
addColumn('{{users}}','dateformat',"integer NOT NULL default 1");
|
||
|
$oDB->createCommand()->update('{{surveys}}',array('startdate'=>NULL),"usestartdate='N'");
|
||
|
$oDB->createCommand()->update('{{surveys}}',array('expires'=>NULL),"useexpiry='N'");
|
||
|
dropColumn('{{surveys}}','useexpiry');
|
||
|
dropColumn('{{surveys}}','usestartdate');
|
||
|
$oDB->createCommand()->update('{{settings_global}}',array('stg_value'=>137),"stg_name='DBVersion'");
|
||
|
}
|
||
|
|
||
|
if ($iOldDBVersion < 138) //Modify quota field
|
||
|
{
|
||
|
alterColumn('{{quota_members}}','code',"{$sVarchar}(11)");
|
||
|
$oDB->createCommand()->update('{{settings_global}}',array('stg_value'=>138),"stg_name='DBVersion'");
|
||
|
}
|
||
|
|
||
|
if ($iOldDBVersion < 139) //Modify quota field
|
||
|
{
|
||
|
upgradeSurveyTables139();
|
||
|
$oDB->createCommand()->update('{{settings_global}}',array('stg_value'=>139),"stg_name='DBVersion'");
|
||
|
}
|
||
|
|
||
|
if ($iOldDBVersion < 140) //Modify surveys table
|
||
|
{
|
||
|
addColumn('{{surveys}}','emailresponseto','text');
|
||
|
$oDB->createCommand()->update('{{settings_global}}',array('stg_value'=>140),"stg_name='DBVersion'");
|
||
|
}
|
||
|
|
||
|
if ($iOldDBVersion < 141) //Modify surveys table
|
||
|
{
|
||
|
addColumn('{{surveys}}','tokenlength','integer NOT NULL default 15');
|
||
|
$oDB->createCommand()->update('{{settings_global}}',array('stg_value'=>141),"stg_name='DBVersion'");
|
||
|
}
|
||
|
|
||
|
if ($iOldDBVersion < 142) //Modify surveys table
|
||
|
{
|
||
|
upgradeQuestionAttributes142();
|
||
|
$oDB->createCommand()->alterColumn('{{surveys}}','expires',"datetime");
|
||
|
$oDB->createCommand()->alterColumn('{{surveys}}','startdate',"datetime");
|
||
|
$oDB->createCommand()->update('{{question_attributes}}',array('value'=>0),"value='false'");
|
||
|
$oDB->createCommand()->update('{{question_attributes}}',array('value'=>1),"value='true'");
|
||
|
$oDB->createCommand()->update('{{settings_global}}',array('stg_value'=>142),"stg_name='DBVersion'");
|
||
|
}
|
||
|
|
||
|
if ($iOldDBVersion < 143)
|
||
|
{
|
||
|
addColumn('{{questions}}','parent_qid','integer NOT NULL default 0');
|
||
|
addColumn('{{answers}}','scale_id','integer NOT NULL default 0');
|
||
|
addColumn('{{questions}}','scale_id','integer NOT NULL default 0');
|
||
|
addColumn('{{questions}}','same_default','integer NOT NULL default 0');
|
||
|
dropPrimaryKey('answers');
|
||
|
addPrimaryKey('answers', array('qid','code','language','scale_id'));
|
||
|
|
||
|
$aFields = array(
|
||
|
'qid' => "integer NOT NULL default 0",
|
||
|
'scale_id' => 'integer NOT NULL default 0',
|
||
|
'sqid' => 'integer NOT NULL default 0',
|
||
|
'language' => $sVarchar.'(20) NOT NULL',
|
||
|
'specialtype' => $sVarchar."(20) NOT NULL default ''",
|
||
|
'defaultvalue' => 'text',
|
||
|
);
|
||
|
createTable('{{defaultvalues}}',$aFields);
|
||
|
addPrimaryKey('defaultvalues', array('qid','specialtype','language','scale_id','sqid'));
|
||
|
|
||
|
// -Move all 'answers' that are subquestions to the questions table
|
||
|
// -Move all 'labels' that are answers to the answers table
|
||
|
// -Transscribe the default values where applicable
|
||
|
// -Move default values from answers to questions
|
||
|
upgradeTables143();
|
||
|
|
||
|
dropColumn('{{answers}}','default_value');
|
||
|
dropColumn('{{questions}}','lid');
|
||
|
dropColumn('{{questions}}','lid1');
|
||
|
|
||
|
$aFields = array(
|
||
|
'sesskey' => "{$sVarchar}(64) NOT NULL DEFAULT ''",
|
||
|
'expiry' => "datetime NOT NULL",
|
||
|
'expireref' => "{$sVarchar}(250) DEFAULT ''",
|
||
|
'created' => "datetime NOT NULL",
|
||
|
'modified' => "datetime NOT NULL",
|
||
|
'sessdata' => 'text'
|
||
|
);
|
||
|
createTable('{{sessions}}',$aFields);
|
||
|
addPrimaryKey('sessions',array('sesskey'));
|
||
|
$oDB->createCommand()->createIndex('sess2_expiry','{{sessions}}','expiry');
|
||
|
$oDB->createCommand()->createIndex('sess2_expireref','{{sessions}}','expireref');
|
||
|
// Move all user templates to the new user template directory
|
||
|
echo sprintf($oLang->gT("Moving user templates to new location at %s..."),$sUserTemplateRootDir)."<br />";
|
||
|
$hTemplateDirectory = opendir($sStandardTemplateRootDir);
|
||
|
$aFailedTemplates=array();
|
||
|
// get each entry
|
||
|
while($entryName = readdir($hTemplateDirectory)) {
|
||
|
if (!in_array($entryName,array('.','..','.svn')) && is_dir($sStandardTemplateRootDir.DIRECTORY_SEPARATOR.$entryName) && !isStandardTemplate($entryName))
|
||
|
{
|
||
|
if (!rename($sStandardTemplateRootDir.DIRECTORY_SEPARATOR.$entryName,$sUserTemplateRootDir.DIRECTORY_SEPARATOR.$entryName))
|
||
|
{
|
||
|
$aFailedTemplates[]=$entryName;
|
||
|
};
|
||
|
}
|
||
|
}
|
||
|
if (count($aFailedTemplates)>0)
|
||
|
{
|
||
|
echo "The following templates at {$sStandardTemplateRootDir} could not be moved to the new location at {$sUserTemplateRootDir}:<br /><ul>";
|
||
|
foreach ($aFailedTemplates as $sFailedTemplate)
|
||
|
{
|
||
|
echo "<li>{$sFailedTemplate}</li>";
|
||
|
}
|
||
|
echo "</ul>Please move these templates manually after the upgrade has finished.<br />";
|
||
|
}
|
||
|
// close directory
|
||
|
closedir($hTemplateDirectory);
|
||
|
$oDB->createCommand()->update('{{settings_global}}',array('stg_value'=>143),"stg_name='DBVersion'");
|
||
|
}
|
||
|
|
||
|
if ($iOldDBVersion < 145)
|
||
|
{
|
||
|
addColumn('{{surveys}}','savetimings',"{$sVarchar}(1) NULL default 'N'");
|
||
|
addColumn('{{surveys}}','showXquestions',"{$sVarchar}(1) NULL default 'Y'");
|
||
|
addColumn('{{surveys}}','showgroupinfo',"{$sVarchar}(1) NULL default 'B'");
|
||
|
addColumn('{{surveys}}','shownoanswer',"{$sVarchar}(1) NULL default 'Y'");
|
||
|
addColumn('{{surveys}}','showqnumcode',"{$sVarchar}(1) NULL default 'X'");
|
||
|
addColumn('{{surveys}}','bouncetime','integer');
|
||
|
addColumn('{{surveys}}','bounceprocessing',"{$sVarchar}(1) NULL default 'N'");
|
||
|
addColumn('{{surveys}}','bounceaccounttype',"{$sVarchar}(4)");
|
||
|
addColumn('{{surveys}}','bounceaccounthost',"{$sVarchar}(200)");
|
||
|
addColumn('{{surveys}}','bounceaccountpass',"{$sVarchar}(100)");
|
||
|
addColumn('{{surveys}}','bounceaccountencryption',"{$sVarchar}(3)");
|
||
|
addColumn('{{surveys}}','bounceaccountuser',"{$sVarchar}(200)");
|
||
|
addColumn('{{surveys}}','showwelcome',"{$sVarchar}(1) default 'Y'");
|
||
|
addColumn('{{surveys}}','showprogress',"{$sVarchar}(1) default 'Y'");
|
||
|
addColumn('{{surveys}}','allowjumps',"{$sVarchar}(1) default 'N'");
|
||
|
addColumn('{{surveys}}','navigationdelay',"integer default 0");
|
||
|
addColumn('{{surveys}}','nokeyboard',"{$sVarchar}(1) default 'N'");
|
||
|
addColumn('{{surveys}}','alloweditaftercompletion',"{$sVarchar}(1) default 'N'");
|
||
|
|
||
|
|
||
|
$aFields = array(
|
||
|
'sid' => "integer NOT NULL",
|
||
|
'uid' => "integer NOT NULL",
|
||
|
'permission' => $sVarchar.'(20) NOT NULL',
|
||
|
'create_p' => "integer NOT NULL default 0",
|
||
|
'read_p' => "integer NOT NULL default 0",
|
||
|
'update_p' => "integer NOT NULL default 0",
|
||
|
'delete_p' => "integer NOT NULL default 0",
|
||
|
'import_p' => "integer NOT NULL default 0",
|
||
|
'export_p' => "integer NOT NULL default 0"
|
||
|
);
|
||
|
createTable('{{survey_permissions}}',$aFields);
|
||
|
addPrimaryKey('survey_permissions', array('sid','uid','permission'));
|
||
|
|
||
|
upgradeSurveyPermissions145();
|
||
|
|
||
|
// drop the old survey rights table
|
||
|
$oDB->createCommand()->dropTable('{{surveys_rights}}');
|
||
|
|
||
|
// Add new fields for email templates
|
||
|
addColumn('{{surveys_languagesettings}}','email_admin_notification_subj',"string");
|
||
|
addColumn('{{surveys_languagesettings}}','email_admin_responses_subj',"string");
|
||
|
addColumn('{{surveys_languagesettings}}','email_admin_notification',"text");
|
||
|
addColumn('{{surveys_languagesettings}}','email_admin_responses',"text");
|
||
|
|
||
|
//Add index to questions table to speed up subquestions
|
||
|
$oDB->createCommand()->createIndex('parent_qid_idx','{{questions}}','parent_qid');
|
||
|
|
||
|
addColumn('{{surveys}}','emailnotificationto',"text");
|
||
|
|
||
|
upgradeSurveys145();
|
||
|
dropColumn('{{surveys}}','notification');
|
||
|
alterColumn('{{conditions}}','method',"{$sVarchar}(5)",false,'');
|
||
|
|
||
|
$oDB->createCommand()->renameColumn('{{surveys}}','private','anonymized');
|
||
|
$oDB->createCommand()->update('{{surveys}}',array('anonymized'=>'N'),"anonymized is NULL");
|
||
|
alterColumn('{{surveys}}','anonymized',"{$sVarchar}(1)",false,'N');
|
||
|
|
||
|
//now we clean up things that were not properly set in previous DB upgrades
|
||
|
$oDB->createCommand()->update('{{answers}}',array('answer'=>''),"answer is NULL");
|
||
|
$oDB->createCommand()->update('{{assessments}}',array('scope'=>''),"scope is NULL");
|
||
|
$oDB->createCommand()->update('{{assessments}}',array('name'=>''),"name is NULL");
|
||
|
$oDB->createCommand()->update('{{assessments}}',array('message'=>''),"message is NULL");
|
||
|
$oDB->createCommand()->update('{{assessments}}',array('minimum'=>''),"minimum is NULL");
|
||
|
$oDB->createCommand()->update('{{assessments}}',array('maximum'=>''),"maximum is NULL");
|
||
|
$oDB->createCommand()->update('{{groups}}',array('group_name'=>''),"group_name is NULL");
|
||
|
$oDB->createCommand()->update('{{labels}}',array('code'=>''),"code is NULL");
|
||
|
$oDB->createCommand()->update('{{labelsets}}',array('label_name'=>''),"label_name is NULL");
|
||
|
$oDB->createCommand()->update('{{questions}}',array('type'=>'T'),"type is NULL");
|
||
|
$oDB->createCommand()->update('{{questions}}',array('title'=>''),"title is NULL");
|
||
|
$oDB->createCommand()->update('{{questions}}',array('question'=>''),"question is NULL");
|
||
|
$oDB->createCommand()->update('{{questions}}',array('other'=>'N'),"other is NULL");
|
||
|
|
||
|
alterColumn('{{answers}}','answer',"text",false);
|
||
|
alterColumn('{{answers}}','assessment_value','integer',false , '0');
|
||
|
alterColumn('{{assessments}}','scope',"{$sVarchar}(5)",false , '');
|
||
|
alterColumn('{{assessments}}','name',"text",false);
|
||
|
alterColumn('{{assessments}}','message',"text",false);
|
||
|
alterColumn('{{assessments}}','minimum',"{$sVarchar}(50)",false , '');
|
||
|
alterColumn('{{assessments}}','maximum',"{$sVarchar}(50)",false , '');
|
||
|
// change the primary index to include language
|
||
|
if ($sDBDriverName=='mysql') // special treatment for mysql because this needs to be in one step since an AUTOINC field is involved
|
||
|
{
|
||
|
$oDB->createCommand("ALTER TABLE {{assessments}} DROP PRIMARY KEY, ADD PRIMARY KEY (`id`, `language`)")->execute();
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
dropPrimaryKey('assessments');
|
||
|
addPrimaryKey('assessments',array('id','language'));
|
||
|
}
|
||
|
|
||
|
|
||
|
alterColumn('{{conditions}}','cfieldname',"{$sVarchar}(50)",false , '');
|
||
|
dropPrimaryKey('defaultvalues');
|
||
|
alterColumn('{{defaultvalues}}','specialtype',"{$sVarchar}(20)",false , '');
|
||
|
addPrimaryKey('defaultvalues', array('qid','specialtype','language','scale_id','sqid'));
|
||
|
|
||
|
alterColumn('{{groups}}','group_name',"{$sVarchar}(100)",false , '');
|
||
|
alterColumn('{{labels}}','code',"{$sVarchar}(5)",false , '');
|
||
|
dropPrimaryKey('labels');
|
||
|
alterColumn('{{labels}}','language',"{$sVarchar}(20)",false , 'en');
|
||
|
addPrimaryKey('labels', array('lid', 'sortorder', 'language'));
|
||
|
alterColumn('{{labelsets}}','label_name',"{$sVarchar}(100)",false , '');
|
||
|
alterColumn('{{questions}}','parent_qid','integer',false ,'0');
|
||
|
alterColumn('{{questions}}','title',"{$sVarchar}(20)",false , '');
|
||
|
alterColumn('{{questions}}','question',"text",false);
|
||
|
try{ $oDB->createCommand()->dropIndex('questions_idx4','{{questions}}');} catch(Exception $e){};
|
||
|
alterColumn('{{questions}}','type',"{$sVarchar}(1)",false , 'T');
|
||
|
try{ $oDB->createCommand()->createIndex('questions_idx4','{{questions}}','type');} catch(Exception $e){};
|
||
|
alterColumn('{{questions}}','other',"{$sVarchar}(1)",false , 'N');
|
||
|
alterColumn('{{questions}}','mandatory',"{$sVarchar}(1)");
|
||
|
alterColumn('{{question_attributes}}','attribute',"{$sVarchar}(50)");
|
||
|
alterColumn('{{quota}}','qlimit','integer');
|
||
|
|
||
|
$oDB->createCommand()->update('{{saved_control}}',array('identifier'=>''),"identifier is NULL");
|
||
|
alterColumn('{{saved_control}}','identifier',"text",false);
|
||
|
$oDB->createCommand()->update('{{saved_control}}',array('access_code'=>''),"access_code is NULL");
|
||
|
alterColumn('{{saved_control}}','access_code',"text",false);
|
||
|
alterColumn('{{saved_control}}','email',"{$sVarchar}(320)");
|
||
|
$oDB->createCommand()->update('{{saved_control}}',array('ip'=>''),"ip is NULL");
|
||
|
alterColumn('{{saved_control}}','ip',"text",false);
|
||
|
$oDB->createCommand()->update('{{saved_control}}',array('saved_thisstep'=>''),"saved_thisstep is NULL");
|
||
|
alterColumn('{{saved_control}}','saved_thisstep',"text",false);
|
||
|
$oDB->createCommand()->update('{{saved_control}}',array('status'=>''),"status is NULL");
|
||
|
alterColumn('{{saved_control}}','status',"{$sVarchar}(1)",false , '');
|
||
|
$oDB->createCommand()->update('{{saved_control}}',array('saved_date'=>'1980-01-01 00:00:00'),"saved_date is NULL");
|
||
|
alterColumn('{{saved_control}}','saved_date',"datetime",false);
|
||
|
$oDB->createCommand()->update('{{settings_global}}',array('stg_value'=>''),"stg_value is NULL");
|
||
|
alterColumn('{{settings_global}}','stg_value',"string",false , '');
|
||
|
|
||
|
alterColumn('{{surveys}}','admin',"{$sVarchar}(50)");
|
||
|
$oDB->createCommand()->update('{{surveys}}',array('active'=>'N'),"active is NULL");
|
||
|
|
||
|
alterColumn('{{surveys}}','active',"{$sVarchar}(1)",false , 'N');
|
||
|
|
||
|
alterColumn('{{surveys}}','startdate',"datetime");
|
||
|
alterColumn('{{surveys}}','adminemail',"{$sVarchar}(320)");
|
||
|
alterColumn('{{surveys}}','anonymized',"{$sVarchar}(1)",false , 'N');
|
||
|
|
||
|
alterColumn('{{surveys}}','faxto',"{$sVarchar}(20)");
|
||
|
alterColumn('{{surveys}}','format',"{$sVarchar}(1)");
|
||
|
alterColumn('{{surveys}}','language',"{$sVarchar}(50)");
|
||
|
alterColumn('{{surveys}}','additional_languages',"string");
|
||
|
alterColumn('{{surveys}}','printanswers',"{$sVarchar}(1)",true , 'N');
|
||
|
alterColumn('{{surveys}}','publicstatistics',"{$sVarchar}(1)",true , 'N');
|
||
|
alterColumn('{{surveys}}','publicgraphs',"{$sVarchar}(1)",true , 'N');
|
||
|
alterColumn('{{surveys}}','assessments',"{$sVarchar}(1)",true , 'N');
|
||
|
alterColumn('{{surveys}}','usetokens',"{$sVarchar}(1)",true , 'N');
|
||
|
alterColumn('{{surveys}}','bounce_email',"{$sVarchar}(320)");
|
||
|
alterColumn('{{surveys}}','tokenlength','integer',true , 15);
|
||
|
|
||
|
$oDB->createCommand()->update('{{surveys_languagesettings}}',array('surveyls_title'=>''),"surveyls_title is NULL");
|
||
|
alterColumn('{{surveys_languagesettings}}','surveyls_title',"{$sVarchar}(200)",false);
|
||
|
alterColumn('{{surveys_languagesettings}}','surveyls_endtext',"text");
|
||
|
alterColumn('{{surveys_languagesettings}}','surveyls_url',"string");
|
||
|
alterColumn('{{surveys_languagesettings}}','surveyls_urldescription',"string");
|
||
|
alterColumn('{{surveys_languagesettings}}','surveyls_email_invite_subj',"string");
|
||
|
alterColumn('{{surveys_languagesettings}}','surveyls_email_remind_subj',"string");
|
||
|
alterColumn('{{surveys_languagesettings}}','surveyls_email_register_subj',"string");
|
||
|
alterColumn('{{surveys_languagesettings}}','surveyls_email_confirm_subj',"string");
|
||
|
alterColumn('{{surveys_languagesettings}}','surveyls_dateformat','integer',false , 1);
|
||
|
|
||
|
$oDB->createCommand()->update('{{users}}',array('users_name'=>''),"users_name is NULL");
|
||
|
$oDB->createCommand()->update('{{users}}',array('full_name'=>''),"full_name is NULL");
|
||
|
alterColumn('{{users}}','users_name',"{$sVarchar}(64)",false , '');
|
||
|
alterColumn('{{users}}','full_name',"{$sVarchar}(50)",false);
|
||
|
alterColumn('{{users}}','lang',"{$sVarchar}(20)");
|
||
|
alterColumn('{{users}}','email',"{$sVarchar}(320)");
|
||
|
alterColumn('{{users}}','superadmin','integer',false , 0);
|
||
|
alterColumn('{{users}}','htmleditormode',"{$sVarchar}(7)",true,'default');
|
||
|
alterColumn('{{users}}','dateformat','integer',false , 1);
|
||
|
try{
|
||
|
setTransactionBookmark();
|
||
|
$oDB->createCommand()->dropIndex('email','{{users}}');
|
||
|
}
|
||
|
catch(Exception $e)
|
||
|
{
|
||
|
// do nothing
|
||
|
rollBackToTransactionBookmark();
|
||
|
}
|
||
|
|
||
|
$oDB->createCommand()->update('{{user_groups}}',array('name'=>''),"name is NULL");
|
||
|
$oDB->createCommand()->update('{{user_groups}}',array('description'=>''),"description is NULL");
|
||
|
alterColumn('{{user_groups}}','name',"{$sVarchar}(20)",false);
|
||
|
alterColumn('{{user_groups}}','description',"text",false);
|
||
|
|
||
|
try { $oDB->createCommand()->dropIndex('user_in_groups_idx1','{{user_in_groups}}'); } catch(Exception $e) {}
|
||
|
try { addPrimaryKey('user_in_groups', array('ugid','uid')); } catch(Exception $e) {}
|
||
|
|
||
|
addColumn('{{surveys_languagesettings}}','surveyls_numberformat',"integer NOT NULL DEFAULT 0");
|
||
|
|
||
|
createTable('{{failed_login_attempts}}',array(
|
||
|
'id' => "pk",
|
||
|
'ip' => $sVarchar.'(37) NOT NULL',
|
||
|
'last_attempt' => $sVarchar.'(20) NOT NULL',
|
||
|
'number_attempts' => "integer NOT NULL"
|
||
|
));
|
||
|
upgradeTokens145();
|
||
|
$oDB->createCommand()->update('{{settings_global}}',array('stg_value'=>145),"stg_name='DBVersion'");
|
||
|
}
|
||
|
|
||
|
if ($iOldDBVersion < 146) //Modify surveys table
|
||
|
{
|
||
|
upgradeSurveyTimings146();
|
||
|
// Fix permissions for new feature quick-translation
|
||
|
try { setTransactionBookmark(); $oDB->createCommand("INSERT into {{survey_permissions}} (sid,uid,permission,read_p,update_p) SELECT sid,owner_id,'translations','1','1' from {{surveys}}")->execute(); echo $modifyoutput; flush();@ob_flush();} catch(Exception $e) { rollBackToTransactionBookmark();}
|
||
|
$oDB->createCommand()->update('{{settings_global}}',array('stg_value'=>146),"stg_name='DBVersion'");
|
||
|
}
|
||
|
|
||
|
if ($iOldDBVersion < 147)
|
||
|
{
|
||
|
addColumn('{{users}}','templateeditormode',"{$sVarchar}(7) NOT NULL default 'default'");
|
||
|
addColumn('{{users}}','questionselectormode',"{$sVarchar}(7) NOT NULL default 'default'");
|
||
|
$oDB->createCommand()->update('{{settings_global}}',array('stg_value'=>147),"stg_name='DBVersion'");
|
||
|
}
|
||
|
|
||
|
if ($iOldDBVersion < 148)
|
||
|
{
|
||
|
addColumn('{{users}}','participant_panel',"integer NOT NULL default 0");
|
||
|
|
||
|
createTable('{{participants}}',array(
|
||
|
'participant_id' => $sVarchar.'(50) NOT NULL',
|
||
|
'firstname' => $sVarchar.'(40) default NULL',
|
||
|
'lastname' => $sVarchar.'(40) default NULL',
|
||
|
'email' => $sVarchar.'(80) default NULL',
|
||
|
'language' => $sVarchar.'(40) default NULL',
|
||
|
'blacklisted' => $sVarchar.'(1) NOT NULL',
|
||
|
'owner_uid' => "integer NOT NULL"
|
||
|
));
|
||
|
addPrimaryKey('participants', array('participant_id'));
|
||
|
|
||
|
createTable('{{participant_attribute}}',array(
|
||
|
'participant_id' => $sVarchar.'(50) NOT NULL',
|
||
|
'attribute_id' => "integer NOT NULL",
|
||
|
'value' => $sVarchar.'(50) NOT NULL'
|
||
|
));
|
||
|
addPrimaryKey('participant_attribute', array('participant_id','attribute_id'));
|
||
|
|
||
|
createTable('{{participant_attribute_names}}',array(
|
||
|
'attribute_id' => $sAutoIncrement,
|
||
|
'attribute_type' => $sVarchar.'(4) NOT NULL',
|
||
|
'visible' => $sVarchar.'(5) NOT NULL',
|
||
|
'PRIMARY KEY (attribute_id,attribute_type)'
|
||
|
));
|
||
|
|
||
|
createTable('{{participant_attribute_names_lang}}',array(
|
||
|
'attribute_id' => 'integer NOT NULL',
|
||
|
'attribute_name' => $sVarchar.'(30) NOT NULL',
|
||
|
'lang' => $sVarchar.'(20) NOT NULL'
|
||
|
));
|
||
|
addPrimaryKey('participant_attribute_names_lang', array('attribute_id','lang'));
|
||
|
|
||
|
createTable('{{participant_attribute_values}}',array(
|
||
|
'attribute_id' => 'integer NOT NULL',
|
||
|
'value_id' => 'pk',
|
||
|
'value' => $sVarchar.'(20) NOT NULL'
|
||
|
));
|
||
|
|
||
|
createTable('{{participant_shares}}',array(
|
||
|
'participant_id' => $sVarchar.'(50) NOT NULL',
|
||
|
'share_uid' => 'integer NOT NULL',
|
||
|
'date_added' => 'datetime NOT NULL',
|
||
|
'can_edit' => $sVarchar.'(5) NOT NULL'
|
||
|
));
|
||
|
addPrimaryKey('participant_shares', array('participant_id','share_uid'));
|
||
|
|
||
|
createTable('{{survey_links}}',array(
|
||
|
'participant_id' => $sVarchar.'(50) NOT NULL',
|
||
|
'token_id' => 'integer NOT NULL',
|
||
|
'survey_id' => 'integer NOT NULL',
|
||
|
'date_created' => 'datetime NOT NULL'
|
||
|
));
|
||
|
addPrimaryKey('survey_links', array('participant_id','token_id','survey_id'));
|
||
|
|
||
|
// Add language field to question_attributes table
|
||
|
addColumn('{{question_attributes}}','language',"{$sVarchar}(20)");
|
||
|
|
||
|
upgradeQuestionAttributes148();
|
||
|
fixSubquestions();
|
||
|
$oDB->createCommand()->update('{{settings_global}}',array('stg_value'=>148),"stg_name='DBVersion'");
|
||
|
}
|
||
|
|
||
|
if ($iOldDBVersion < 149)
|
||
|
{
|
||
|
$aFields = array(
|
||
|
'id' => 'integer',
|
||
|
'sid' => 'integer',
|
||
|
'parameter' => $sVarchar.'(50)',
|
||
|
'targetqid' => 'integer',
|
||
|
'targetsqid' => 'integer'
|
||
|
);
|
||
|
createTable('{{survey_url_parameters}}',$aFields);
|
||
|
$oDB->createCommand()->update('{{settings_global}}',array('stg_value'=>149),"stg_name='DBVersion'");
|
||
|
}
|
||
|
|
||
|
if ($iOldDBVersion < 150)
|
||
|
{
|
||
|
addColumn('{{questions}}','relevance','TEXT');
|
||
|
$oDB->createCommand()->update('{{settings_global}}',array('stg_value'=>150),"stg_name='DBVersion'");
|
||
|
}
|
||
|
|
||
|
if ($iOldDBVersion < 151)
|
||
|
{
|
||
|
addColumn('{{groups}}','randomization_group',"{$sVarchar}(20) NOT NULL default ''");
|
||
|
$oDB->createCommand()->update('{{settings_global}}',array('stg_value'=>151),"stg_name='DBVersion'");
|
||
|
}
|
||
|
|
||
|
if ($iOldDBVersion < 152)
|
||
|
{
|
||
|
$oDB->createCommand()->createIndex('question_attributes_idx3','{{question_attributes}}','attribute');
|
||
|
$oDB->createCommand()->update('{{settings_global}}',array('stg_value'=>152),"stg_name='DBVersion'");
|
||
|
}
|
||
|
|
||
|
if ($iOldDBVersion < 153)
|
||
|
{
|
||
|
createTable('{{expression_errors}}',array(
|
||
|
'id' => 'pk',
|
||
|
'errortime' => $sVarchar.'(50)',
|
||
|
'sid' => 'integer',
|
||
|
'gid' => 'integer',
|
||
|
'qid' => 'integer',
|
||
|
'gseq' => 'integer',
|
||
|
'qseq' => 'integer',
|
||
|
'type' => $sVarchar.'(50)',
|
||
|
'eqn' => 'text',
|
||
|
'prettyprint' => 'text'
|
||
|
));
|
||
|
$oDB->createCommand()->update('{{settings_global}}',array('stg_value'=>153),"stg_name='DBVersion'");
|
||
|
}
|
||
|
|
||
|
if ($iOldDBVersion < 154)
|
||
|
{
|
||
|
$oDB->createCommand()->addColumn('{{groups}}','grelevance',"text");
|
||
|
$oDB->createCommand()->update('{{settings_global}}',array('stg_value'=>154),"stg_name='DBVersion'");
|
||
|
}
|
||
|
|
||
|
if ($iOldDBVersion < 155)
|
||
|
{
|
||
|
addColumn('{{surveys}}','googleanalyticsstyle',"{$sVarchar}(1)");
|
||
|
addColumn('{{surveys}}','googleanalyticsapikey',"{$sVarchar}(25)");
|
||
|
try { setTransactionBookmark(); $oDB->createCommand()->renameColumn('{{surveys}}','showXquestions','showxquestions');} catch(Exception $e) { rollBackToTransactionBookmark();}
|
||
|
$oDB->createCommand()->update('{{settings_global}}',array('stg_value'=>155),"stg_name='DBVersion'");
|
||
|
}
|
||
|
|
||
|
|
||
|
if ($iOldDBVersion < 156)
|
||
|
{
|
||
|
try
|
||
|
{
|
||
|
$oDB->createCommand()->dropTable('{{survey_url_parameters}}');
|
||
|
}
|
||
|
catch(Exception $e)
|
||
|
{
|
||
|
// do nothing
|
||
|
}
|
||
|
createTable('{{survey_url_parameters}}',array(
|
||
|
'id' => 'pk',
|
||
|
'sid' => 'integer NOT NULL',
|
||
|
'parameter' => $sVarchar.'(50) NOT NULL',
|
||
|
'targetqid' => 'integer',
|
||
|
'targetsqid' => 'integer'
|
||
|
));
|
||
|
|
||
|
$oDB->createCommand()->dropTable('{{sessions}}');
|
||
|
if ($sDBDriverName=='mysql')
|
||
|
{
|
||
|
createTable('{{sessions}}',array(
|
||
|
'id' => $sVarchar.'(32) NOT NULL',
|
||
|
'expire' => 'integer',
|
||
|
'data' => 'longtext'
|
||
|
));
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
createTable('{{sessions}}',array(
|
||
|
'id' => $sVarchar.'(32) NOT NULL',
|
||
|
'expire' => 'integer',
|
||
|
'data' => 'text'
|
||
|
));
|
||
|
}
|
||
|
|
||
|
addPrimaryKey('sessions', array('id'));
|
||
|
addColumn('{{surveys_languagesettings}}','surveyls_attributecaptions',"TEXT");
|
||
|
addColumn('{{surveys}}','sendconfirmation',"{$sVarchar}(1) default 'Y'");
|
||
|
|
||
|
upgradeSurveys156();
|
||
|
|
||
|
// If a survey has an deleted owner, re-own the survey to the superadmin
|
||
|
$oDB->schema->refresh();
|
||
|
Survey::model()->refreshMetaData();
|
||
|
$surveys = Survey::model();
|
||
|
$surveys = $surveys->with(array('owner'))->findAll();
|
||
|
foreach ($surveys as $row)
|
||
|
{
|
||
|
if (!isset($row->owner->attributes))
|
||
|
{
|
||
|
Survey::model()->updateByPk($row->sid,array('owner_id'=>1));
|
||
|
}
|
||
|
}
|
||
|
$oDB->createCommand()->update('{{settings_global}}',array('stg_value'=>156),"stg_name='DBVersion'");
|
||
|
$oTransaction->commit();
|
||
|
$oTransaction=$oDB->beginTransaction();
|
||
|
}
|
||
|
|
||
|
if ($iOldDBVersion < 157)
|
||
|
{
|
||
|
// MySQL DB corrections
|
||
|
try { setTransactionBookmark(); $oDB->createCommand()->dropIndex('questions_idx4','{{questions}}'); } catch(Exception $e) { rollBackToTransactionBookmark();}
|
||
|
|
||
|
alterColumn('{{answers}}','assessment_value','integer',false , '0');
|
||
|
dropPrimaryKey('answers');
|
||
|
alterColumn('{{answers}}','scale_id','integer',false , '0');
|
||
|
addPrimaryKey('answers', array('qid','code','language','scale_id'));
|
||
|
alterColumn('{{conditions}}','method',"{$sVarchar}(5)",false , '');
|
||
|
alterColumn('{{participants}}','owner_uid','integer',false);
|
||
|
alterColumn('{{participant_attribute_names}}','visible',$sVarchar.'(5)',false);
|
||
|
alterColumn('{{questions}}','type',"{$sVarchar}(1)",false , 'T');
|
||
|
alterColumn('{{questions}}','other',"{$sVarchar}(1)",false , 'N');
|
||
|
alterColumn('{{questions}}','mandatory',"{$sVarchar}(1)");
|
||
|
alterColumn('{{questions}}','scale_id','integer',false , '0');
|
||
|
alterColumn('{{questions}}','parent_qid','integer',false ,'0');
|
||
|
|
||
|
alterColumn('{{questions}}','same_default','integer',false , '0');
|
||
|
alterColumn('{{quota}}','qlimit','integer');
|
||
|
alterColumn('{{quota}}','action','integer');
|
||
|
alterColumn('{{quota}}','active','integer',false , '1');
|
||
|
alterColumn('{{quota}}','autoload_url','integer',false , '0');
|
||
|
alterColumn('{{saved_control}}','status',"{$sVarchar}(1)",false , '');
|
||
|
try { setTransactionBookmark(); alterColumn('{{sessions}}','id',"{$sVarchar}(32)",false); } catch(Exception $e) { rollBackToTransactionBookmark();}
|
||
|
alterColumn('{{surveys}}','active',"{$sVarchar}(1)",false , 'N');
|
||
|
alterColumn('{{surveys}}','anonymized',"{$sVarchar}(1)",false,'N');
|
||
|
alterColumn('{{surveys}}','format',"{$sVarchar}(1)");
|
||
|
alterColumn('{{surveys}}','savetimings',"{$sVarchar}(1)",false , 'N');
|
||
|
alterColumn('{{surveys}}','datestamp',"{$sVarchar}(1)",false , 'N');
|
||
|
alterColumn('{{surveys}}','usecookie',"{$sVarchar}(1)",false , 'N');
|
||
|
alterColumn('{{surveys}}','allowregister',"{$sVarchar}(1)",false , 'N');
|
||
|
alterColumn('{{surveys}}','allowsave',"{$sVarchar}(1)",false , 'Y');
|
||
|
alterColumn('{{surveys}}','autonumber_start','integer' ,false, '0');
|
||
|
alterColumn('{{surveys}}','autoredirect',"{$sVarchar}(1)",false , 'N');
|
||
|
alterColumn('{{surveys}}','allowprev',"{$sVarchar}(1)",false , 'N');
|
||
|
alterColumn('{{surveys}}','printanswers',"{$sVarchar}(1)",false , 'N');
|
||
|
alterColumn('{{surveys}}','ipaddr',"{$sVarchar}(1)",false , 'N');
|
||
|
alterColumn('{{surveys}}','refurl',"{$sVarchar}(1)",false , 'N');
|
||
|
alterColumn('{{surveys}}','publicstatistics',"{$sVarchar}(1)",false , 'N');
|
||
|
alterColumn('{{surveys}}','publicgraphs',"{$sVarchar}(1)",false , 'N');
|
||
|
alterColumn('{{surveys}}','listpublic',"{$sVarchar}(1)",false , 'N');
|
||
|
alterColumn('{{surveys}}','htmlemail',"{$sVarchar}(1)",false , 'N');
|
||
|
alterColumn('{{surveys}}','sendconfirmation',"{$sVarchar}(1)",false , 'Y');
|
||
|
alterColumn('{{surveys}}','tokenanswerspersistence',"{$sVarchar}(1)",false , 'N');
|
||
|
alterColumn('{{surveys}}','assessments',"{$sVarchar}(1)",false , 'N');
|
||
|
alterColumn('{{surveys}}','usecaptcha',"{$sVarchar}(1)",false , 'N');
|
||
|
alterColumn('{{surveys}}','usetokens',"{$sVarchar}(1)",false , 'N');
|
||
|
alterColumn('{{surveys}}','tokenlength','integer',false, '15');
|
||
|
alterColumn('{{surveys}}','showxquestions',"{$sVarchar}(1)", true , 'Y');
|
||
|
alterColumn('{{surveys}}','showgroupinfo',"{$sVarchar}(1) ", true , 'B');
|
||
|
alterColumn('{{surveys}}','shownoanswer',"{$sVarchar}(1) ", true , 'Y');
|
||
|
alterColumn('{{surveys}}','showqnumcode',"{$sVarchar}(1) ", true , 'X');
|
||
|
alterColumn('{{surveys}}','bouncetime','integer');
|
||
|
alterColumn('{{surveys}}','showwelcome',"{$sVarchar}(1)", true , 'Y');
|
||
|
alterColumn('{{surveys}}','showprogress',"{$sVarchar}(1)", true , 'Y');
|
||
|
alterColumn('{{surveys}}','allowjumps',"{$sVarchar}(1)", true , 'N');
|
||
|
alterColumn('{{surveys}}','navigationdelay','integer', false , '0');
|
||
|
alterColumn('{{surveys}}','nokeyboard',"{$sVarchar}(1)", true , 'N');
|
||
|
alterColumn('{{surveys}}','alloweditaftercompletion',"{$sVarchar}(1)", true , 'N');
|
||
|
alterColumn('{{surveys}}','googleanalyticsstyle',"{$sVarchar}(1)");
|
||
|
|
||
|
alterColumn('{{surveys_languagesettings}}','surveyls_dateformat','integer',false , 1);
|
||
|
try { setTransactionBookmark(); alterColumn('{{survey_permissions}}','sid',"integer",false); } catch(Exception $e) { rollBackToTransactionBookmark();}
|
||
|
try { setTransactionBookmark(); alterColumn('{{survey_permissions}}','uid',"integer",false); } catch(Exception $e) { rollBackToTransactionBookmark();}
|
||
|
alterColumn('{{survey_permissions}}','create_p', 'integer',false , '0');
|
||
|
alterColumn('{{survey_permissions}}','read_p', 'integer',false , '0');
|
||
|
alterColumn('{{survey_permissions}}','update_p','integer',false , '0');
|
||
|
alterColumn('{{survey_permissions}}','delete_p' ,'integer',false , '0');
|
||
|
alterColumn('{{survey_permissions}}','import_p','integer',false , '0');
|
||
|
alterColumn('{{survey_permissions}}','export_p' ,'integer',false , '0');
|
||
|
|
||
|
alterColumn('{{survey_url_parameters}}','targetqid' ,'integer');
|
||
|
alterColumn('{{survey_url_parameters}}','targetsqid' ,'integer');
|
||
|
|
||
|
alterColumn('{{templates_rights}}','use','integer',false );
|
||
|
|
||
|
alterColumn('{{users}}','create_survey','integer',false, '0');
|
||
|
alterColumn('{{users}}','create_user','integer',false, '0');
|
||
|
alterColumn('{{users}}','participant_panel','integer',false, '0');
|
||
|
alterColumn('{{users}}','delete_user','integer',false, '0');
|
||
|
alterColumn('{{users}}','superadmin','integer',false, '0');
|
||
|
alterColumn('{{users}}','configurator','integer',false, '0');
|
||
|
alterColumn('{{users}}','manage_template','integer',false, '0');
|
||
|
alterColumn('{{users}}','manage_label','integer',false, '0');
|
||
|
alterColumn('{{users}}','dateformat','integer',false, 1);
|
||
|
alterColumn('{{users}}','participant_panel','integer',false , '0');
|
||
|
alterColumn('{{users}}','parent_id','integer',false);
|
||
|
try { setTransactionBookmark(); alterColumn('{{surveys_languagesettings}}','surveyls_survey_id',"integer",false); } catch(Exception $e) { rollBackToTransactionBookmark(); }
|
||
|
alterColumn('{{user_groups}}','owner_id',"integer",false);
|
||
|
dropPrimaryKey('user_in_groups');
|
||
|
alterColumn('{{user_in_groups}}','ugid',"integer",false);
|
||
|
alterColumn('{{user_in_groups}}','uid',"integer",false);
|
||
|
|
||
|
// Additional corrections for Postgres
|
||
|
try{ setTransactionBookmark(); $oDB->createCommand()->createIndex('questions_idx3','{{questions}}','gid');} catch(Exception $e) { rollBackToTransactionBookmark(); };
|
||
|
try{ setTransactionBookmark(); $oDB->createCommand()->createIndex('conditions_idx3','{{conditions}}','cqid');} catch(Exception $e) { rollBackToTransactionBookmark(); };
|
||
|
try{ setTransactionBookmark(); $oDB->createCommand()->createIndex('questions_idx4','{{questions}}','type');} catch(Exception $e) { rollBackToTransactionBookmark(); };
|
||
|
try{ setTransactionBookmark(); $oDB->createCommand()->dropIndex('user_in_groups_idx1','{{user_in_groups}}');} catch(Exception $e) { rollBackToTransactionBookmark(); };
|
||
|
try{ setTransactionBookmark(); $oDB->createCommand()->dropIndex('{{user_name_key}}','{{users}}');} catch(Exception $e) { rollBackToTransactionBookmark(); };
|
||
|
try{ setTransactionBookmark(); $oDB->createCommand()->createIndex('users_name','{{users}}','users_name',true);} catch(Exception $e) { rollBackToTransactionBookmark(); };
|
||
|
try{ setTransactionBookmark(); addPrimaryKey('user_in_groups', array('ugid','uid'));} catch(Exception $e) { rollBackToTransactionBookmark(); };
|
||
|
|
||
|
alterColumn('{{participant_attribute}}','value',"{$sVarchar}(50)", false);
|
||
|
try{ setTransactionBookmark(); alterColumn('{{participant_attribute_names}}','attribute_type',"{$sVarchar}(4)", false);} catch(Exception $e) { rollBackToTransactionBookmark(); };
|
||
|
try{ setTransactionBookmark(); dropColumn('{{participant_attribute_names_lang}}','id');} catch(Exception $e) { rollBackToTransactionBookmark(); };
|
||
|
try{ setTransactionBookmark(); addPrimaryKey('participant_attribute_names_lang',array('attribute_id','lang'));} catch(Exception $e) { rollBackToTransactionBookmark(); };
|
||
|
try{ setTransactionBookmark(); $oDB->createCommand()->renameColumn('{{participant_shares}}','shared_uid','share_uid');} catch(Exception $e) { rollBackToTransactionBookmark(); };
|
||
|
alterColumn('{{participant_shares}}','date_added',"datetime", false);
|
||
|
alterColumn('{{participants}}','firstname',"{$sVarchar}(40)");
|
||
|
alterColumn('{{participants}}','lastname',"{$sVarchar}(40)");
|
||
|
alterColumn('{{participants}}','email',"{$sVarchar}(80)");
|
||
|
alterColumn('{{participants}}','language',"{$sVarchar}(40)");
|
||
|
alterColumn('{{quota_languagesettings}}','quotals_name',"string");
|
||
|
try{ setTransactionBookmark(); alterColumn('{{survey_permissions}}','sid','integer',false); } catch(Exception $e) { rollBackToTransactionBookmark(); };
|
||
|
try{ setTransactionBookmark(); alterColumn('{{survey_permissions}}','uid','integer',false); } catch(Exception $e) { rollBackToTransactionBookmark(); };
|
||
|
alterColumn('{{users}}','htmleditormode',"{$sVarchar}(7)",true,'default');
|
||
|
|
||
|
// Sometimes the survey_links table was deleted before this step, if so
|
||
|
// we recreate it (copied from line 663)
|
||
|
if (!tableExists('{survey_links}')) {
|
||
|
createTable('{{survey_links}}',array(
|
||
|
'participant_id' => $sVarchar.'(50) NOT NULL',
|
||
|
'token_id' => 'integer NOT NULL',
|
||
|
'survey_id' => 'integer NOT NULL',
|
||
|
'date_created' => 'datetime NOT NULL'
|
||
|
));
|
||
|
addPrimaryKey('survey_links', array('participant_id','token_id','survey_id'));
|
||
|
}
|
||
|
alterColumn('{{survey_links}}','date_created',"datetime",true);
|
||
|
alterColumn('{{saved_control}}','identifier',"text",false);
|
||
|
alterColumn('{{saved_control}}','email',"{$sVarchar}(320)");
|
||
|
alterColumn('{{surveys}}','adminemail',"{$sVarchar}(320)");
|
||
|
alterColumn('{{surveys}}','bounce_email',"{$sVarchar}(320)");
|
||
|
alterColumn('{{users}}','email',"{$sVarchar}(320)");
|
||
|
|
||
|
try{ setTransactionBookmark(); $oDB->createCommand()->dropIndex('assessments_idx','{{assessments}}');} catch(Exception $e) { rollBackToTransactionBookmark(); };
|
||
|
try{ setTransactionBookmark(); $oDB->createCommand()->createIndex('assessments_idx3','{{assessments}}','gid');} catch(Exception $e) { rollBackToTransactionBookmark(); };
|
||
|
|
||
|
try{ setTransactionBookmark(); $oDB->createCommand()->dropIndex('ixcode','{{labels}}');} catch(Exception $e) { rollBackToTransactionBookmark(); };
|
||
|
try{ setTransactionBookmark(); $oDB->createCommand()->dropIndex('{{labels_ixcode_idx}}','{{labels}}');} catch(Exception $e) { rollBackToTransactionBookmark(); };
|
||
|
try{ setTransactionBookmark(); $oDB->createCommand()->createIndex('labels_code_idx','{{labels}}','code');} catch(Exception $e) { rollBackToTransactionBookmark(); };
|
||
|
|
||
|
|
||
|
|
||
|
if ($sDBDriverName=='pgsql')
|
||
|
{
|
||
|
try{ setTransactionBookmark(); $oDB->createCommand("ALTER TABLE ONLY {{user_groups}} ADD PRIMARY KEY (ugid); ")->execute;} catch(Exception $e) { rollBackToTransactionBookmark(); };
|
||
|
try{ setTransactionBookmark(); $oDB->createCommand("ALTER TABLE ONLY {{users}} ADD PRIMARY KEY (uid); ")->execute;} catch(Exception $e) { rollBackToTransactionBookmark(); };
|
||
|
}
|
||
|
|
||
|
// Additional corrections for MSSQL
|
||
|
alterColumn('{{answers}}','answer',"text",false);
|
||
|
alterColumn('{{assessments}}','name',"text",false);
|
||
|
alterColumn('{{assessments}}','message',"text",false);
|
||
|
alterColumn('{{defaultvalues}}','defaultvalue',"text");
|
||
|
alterColumn('{{expression_errors}}','eqn',"text");
|
||
|
alterColumn('{{expression_errors}}','prettyprint',"text");
|
||
|
alterColumn('{{groups}}','description',"text");
|
||
|
alterColumn('{{groups}}','grelevance',"text");
|
||
|
alterColumn('{{labels}}','title',"text");
|
||
|
alterColumn('{{question_attributes}}','value',"text");
|
||
|
alterColumn('{{questions}}','preg',"text");
|
||
|
alterColumn('{{questions}}','help',"text");
|
||
|
alterColumn('{{questions}}','relevance',"text");
|
||
|
alterColumn('{{questions}}','question',"text",false);
|
||
|
alterColumn('{{quota_languagesettings}}','quotals_quota_id',"integer",false);
|
||
|
alterColumn('{{quota_languagesettings}}','quotals_message',"text",false);
|
||
|
alterColumn('{{saved_control}}','refurl',"text");
|
||
|
alterColumn('{{saved_control}}','access_code',"text",false);
|
||
|
alterColumn('{{saved_control}}','ip',"text",false);
|
||
|
alterColumn('{{saved_control}}','saved_thisstep',"text",false);
|
||
|
alterColumn('{{saved_control}}','saved_date',"datetime",false);
|
||
|
alterColumn('{{surveys}}','attributedescriptions',"text");
|
||
|
alterColumn('{{surveys}}','emailresponseto',"text");
|
||
|
alterColumn('{{surveys}}','emailnotificationto',"text");
|
||
|
|
||
|
alterColumn('{{surveys_languagesettings}}','surveyls_description',"text");
|
||
|
alterColumn('{{surveys_languagesettings}}','surveyls_welcometext',"text");
|
||
|
alterColumn('{{surveys_languagesettings}}','surveyls_email_invite',"text");
|
||
|
alterColumn('{{surveys_languagesettings}}','surveyls_email_remind',"text");
|
||
|
alterColumn('{{surveys_languagesettings}}','surveyls_email_register',"text");
|
||
|
alterColumn('{{surveys_languagesettings}}','surveyls_email_confirm',"text");
|
||
|
alterColumn('{{surveys_languagesettings}}','surveyls_attributecaptions',"text");
|
||
|
alterColumn('{{surveys_languagesettings}}','email_admin_notification',"text");
|
||
|
alterColumn('{{surveys_languagesettings}}','email_admin_responses',"text");
|
||
|
alterColumn('{{surveys_languagesettings}}','surveyls_endtext',"text");
|
||
|
alterColumn('{{user_groups}}','description',"text",false);
|
||
|
|
||
|
|
||
|
|
||
|
alterColumn('{{conditions}}','value','string',false,'');
|
||
|
alterColumn('{{participant_shares}}','can_edit',"{$sVarchar}(5)",false);
|
||
|
|
||
|
alterColumn('{{users}}','password',"binary",false);
|
||
|
dropColumn('{{users}}','one_time_pw');
|
||
|
addColumn('{{users}}','one_time_pw','binary');
|
||
|
|
||
|
|
||
|
$oDB->createCommand()->update('{{question_attributes}}',array('value'=>'1'),"attribute = 'random_order' and value = '2'");
|
||
|
|
||
|
$oDB->createCommand()->update('{{settings_global}}',array('stg_value'=>157),"stg_name='DBVersion'");
|
||
|
}
|
||
|
|
||
|
if ($iOldDBVersion < 158)
|
||
|
{
|
||
|
LimeExpressionManager::UpgradeConditionsToRelevance();
|
||
|
$oDB->createCommand()->update('{{settings_global}}',array('stg_value'=>158),"stg_name='DBVersion'");
|
||
|
}
|
||
|
if ($iOldDBVersion < 159)
|
||
|
{
|
||
|
alterColumn('{{failed_login_attempts}}', 'ip', "{$sVarchar}(40)",false);
|
||
|
$oDB->createCommand()->update('{{settings_global}}',array('stg_value'=>159),"stg_name='DBVersion'");
|
||
|
}
|
||
|
|
||
|
if ($iOldDBVersion < 160)
|
||
|
{
|
||
|
alterLanguageCode('it','it-informal');
|
||
|
alterLanguageCode('it-formal','it');
|
||
|
$oDB->createCommand()->update('{{settings_global}}',array('stg_value'=>160),"stg_name='DBVersion'");
|
||
|
}
|
||
|
if ($iOldDBVersion < 161)
|
||
|
{
|
||
|
addColumn('{{survey_links}}','date_invited','datetime NULL default NULL');
|
||
|
addColumn('{{survey_links}}','date_completed','datetime NULL default NULL');
|
||
|
$oDB->createCommand()->update('{{settings_global}}',array('stg_value'=>161),"stg_name='DBVersion'");
|
||
|
}
|
||
|
if ($iOldDBVersion < 162)
|
||
|
{
|
||
|
/* Fix participant db types */
|
||
|
alterColumn('{{participant_attribute}}', 'value', "text", false);
|
||
|
alterColumn('{{participant_attribute_names_lang}}', 'attribute_name', "{$sVarchar}(255)", false);
|
||
|
alterColumn('{{participant_attribute_values}}', 'value', "text", false);
|
||
|
$oDB->createCommand()->update('{{settings_global}}',array('stg_value'=>162),"stg_name='DBVersion'");
|
||
|
}
|
||
|
if ($iOldDBVersion < 163)
|
||
|
{
|
||
|
//Replace by <script type="text/javascript" src="{TEMPLATEURL}template.js"></script> by {TEMPLATEJS}
|
||
|
|
||
|
$replacedTemplate=replaceTemplateJS();
|
||
|
$oDB->createCommand()->update('{{settings_global}}',array('stg_value'=>163),"stg_name='DBVersion'");
|
||
|
|
||
|
}
|
||
|
|
||
|
if ($iOldDBVersion < 164)
|
||
|
{
|
||
|
upgradeTokens148(); // this should have bee done in 148 - that's why it is named this way
|
||
|
// fix survey tables for missing or incorrect token field
|
||
|
upgradeSurveyTables164();
|
||
|
$oDB->createCommand()->update('{{settings_global}}',array('stg_value'=>164),"stg_name='DBVersion'");
|
||
|
|
||
|
// Not updating settings table as upgrade process takes care of that step now
|
||
|
}
|
||
|
|
||
|
if ($iOldDBVersion < 165)
|
||
|
{
|
||
|
$oDB->createCommand()->createTable('{{plugins}}', array(
|
||
|
'id' => 'pk',
|
||
|
'name' => 'string NOT NULL',
|
||
|
'active' => 'boolean'
|
||
|
));
|
||
|
$oDB->createCommand()->createTable('{{plugin_settings}}', array(
|
||
|
'id' => 'pk',
|
||
|
'plugin_id' => 'integer NOT NULL',
|
||
|
'model' => 'string',
|
||
|
'model_id' => 'integer',
|
||
|
'key' => 'string',
|
||
|
'value' => 'text'
|
||
|
));
|
||
|
alterColumn('{{surveys_languagesettings}}','surveyls_url',"text");
|
||
|
$oDB->createCommand()->update('{{settings_global}}',array('stg_value'=>165),"stg_name='DBVersion'");
|
||
|
}
|
||
|
|
||
|
if ($iOldDBVersion < 166)
|
||
|
{
|
||
|
$oDB->createCommand()->renameTable('{{survey_permissions}}', '{{permissions}}');
|
||
|
dropPrimaryKey('permissions');
|
||
|
alterColumn('{{permissions}}', 'permission', "{$sVarchar}(100)", false);
|
||
|
$oDB->createCommand()->renameColumn('{{permissions}}','sid','entity_id');
|
||
|
alterColumn('{{permissions}}', 'entity_id', "{$sVarchar}(100)", false);
|
||
|
addColumn('{{permissions}}','entity',"{$sVarchar}(50)");
|
||
|
$oDB->createCommand("update {{permissions}} set entity='survey'")->query();
|
||
|
addColumn('{{permissions}}','id','pk');
|
||
|
$oDB->createCommand()->createIndex('idxPermissions','{{permissions}}','entity_id,entity,permission,uid',true);
|
||
|
|
||
|
upgradePermissions166();
|
||
|
dropColumn('{{users}}','create_survey');
|
||
|
dropColumn('{{users}}','create_user');
|
||
|
dropColumn('{{users}}','delete_user');
|
||
|
dropColumn('{{users}}','superadmin');
|
||
|
dropColumn('{{users}}','configurator');
|
||
|
dropColumn('{{users}}','manage_template');
|
||
|
dropColumn('{{users}}','manage_label');
|
||
|
dropColumn('{{users}}','participant_panel');
|
||
|
$oDB->createCommand()->dropTable('{{templates_rights}}');
|
||
|
$oDB->createCommand()->update('{{settings_global}}',array('stg_value'=>166),"stg_name='DBVersion'");
|
||
|
}
|
||
|
|
||
|
if ($iOldDBVersion < 167)
|
||
|
{
|
||
|
addColumn('{{surveys_languagesettings}}', 'attachments', 'text');
|
||
|
addColumn('{{users}}', 'created', 'datetime');
|
||
|
addColumn('{{users}}', 'modified', 'datetime');
|
||
|
$oDB->createCommand()->update('{{settings_global}}',array('stg_value'=>167),"stg_name='DBVersion'");
|
||
|
}
|
||
|
|
||
|
if ($iOldDBVersion < 168)
|
||
|
{
|
||
|
addColumn('{{participants}}', 'created', 'datetime');
|
||
|
addColumn('{{participants}}', 'modified', 'datetime');
|
||
|
addColumn('{{participants}}', 'created_by', 'integer');
|
||
|
$oDB->createCommand('update {{participants}} set created_by=owner_uid')->query();
|
||
|
alterColumn('{{participants}}', 'created_by', "integer", false);
|
||
|
$oDB->createCommand()->update('{{settings_global}}',array('stg_value'=>168),"stg_name='DBVersion'");
|
||
|
}
|
||
|
|
||
|
if ($iOldDBVersion < 169)
|
||
|
{
|
||
|
// Add new column for question index options.
|
||
|
addColumn('{{surveys}}', 'questionindex', 'integer not null default 0');
|
||
|
// Set values for existing surveys.
|
||
|
$oDB->createCommand("update {{surveys}} set questionindex = 0 where allowjumps <> 'Y'")->query();
|
||
|
$oDB->createCommand("update {{surveys}} set questionindex = 1 where allowjumps = 'Y'")->query();
|
||
|
|
||
|
// Remove old column.
|
||
|
dropColumn('{{surveys}}', 'allowjumps');
|
||
|
$oDB->createCommand()->update('{{settings_global}}',array('stg_value'=>169),"stg_name='DBVersion'");
|
||
|
}
|
||
|
|
||
|
if ($iOldDBVersion < 170)
|
||
|
{
|
||
|
// renamed advanced attributes fields dropdown_dates_year_min/max
|
||
|
$oDB->createCommand()->update('{{question_attributes}}',array('attribute'=>'date_min'),"attribute='dropdown_dates_year_min'");
|
||
|
$oDB->createCommand()->update('{{question_attributes}}',array('attribute'=>'date_max'),"attribute='dropdown_dates_year_max'");
|
||
|
$oDB->createCommand()->update('{{settings_global}}',array('stg_value'=>170),"stg_name='DBVersion'");
|
||
|
}
|
||
|
|
||
|
if ($iOldDBVersion < 171)
|
||
|
{
|
||
|
dropColumn('{{sessions}}','data');
|
||
|
switch ($sDBDriverName){
|
||
|
case 'mysql':
|
||
|
case 'mysqli':
|
||
|
addColumn('{{sessions}}', 'data', 'LONGBLOB');
|
||
|
break;
|
||
|
case 'sqlsrv':
|
||
|
case 'dblib':
|
||
|
case 'mssql':
|
||
|
addColumn('{{sessions}}', 'data', 'VARBINARY(MAX)');
|
||
|
break;
|
||
|
case 'pgsql':
|
||
|
addColumn('{{sessions}}', 'data', 'BYTEA');
|
||
|
break;
|
||
|
default: die('Unkown database type');
|
||
|
}
|
||
|
$oDB->createCommand()->update('{{settings_global}}',array('stg_value'=>171),"stg_name='DBVersion'");
|
||
|
}
|
||
|
if ($iOldDBVersion < 172)
|
||
|
{
|
||
|
switch ($sDBDriverName){
|
||
|
case 'pgsql':
|
||
|
// Special treatment for Postgres as it is too dumb to convert a string to a number without explicit being told to do so ... seriously?
|
||
|
alterColumn('{{permissions}}', 'entity_id', "INTEGER USING (entity_id::integer)", false);
|
||
|
break;
|
||
|
case 'sqlsrv':
|
||
|
case 'dblib':
|
||
|
case 'mssql':
|
||
|
try{ setTransactionBookmark(); $oDB->createCommand()->dropIndex('permissions_idx2','{{permissions}}');} catch(Exception $e) { rollBackToTransactionBookmark(); };
|
||
|
try{ setTransactionBookmark(); $oDB->createCommand()->dropIndex('idxPermissions','{{permissions}}');} catch(Exception $e) { rollBackToTransactionBookmark(); };
|
||
|
alterColumn('{{permissions}}', 'entity_id', "INTEGER", false);
|
||
|
$oDB->createCommand()->createIndex('permissions_idx2','{{permissions}}','entity_id,entity,permission,uid',true);
|
||
|
break;
|
||
|
default:
|
||
|
alterColumn('{{permissions}}', 'entity_id', "INTEGER", false);
|
||
|
}
|
||
|
$oDB->createCommand()->update('{{settings_global}}',array('stg_value'=>172),"stg_name='DBVersion'");
|
||
|
}
|
||
|
if ($iOldDBVersion < 173)
|
||
|
{
|
||
|
addColumn('{{participant_attribute_names}}','defaultname',"{$sVarchar}(50) NOT NULL default ''");
|
||
|
upgradeCPDBAttributeDefaultNames173();
|
||
|
$oDB->createCommand()->update('{{settings_global}}',array('stg_value'=>173),"stg_name='DBVersion'");
|
||
|
}
|
||
|
if ($iOldDBVersion < 174)
|
||
|
{
|
||
|
alterColumn('{{participants}}', 'email', "{$sVarchar}(254)");
|
||
|
alterColumn('{{saved_control}}', 'email', "{$sVarchar}(254)");
|
||
|
alterColumn('{{surveys}}', 'adminemail', "{$sVarchar}(254)");
|
||
|
alterColumn('{{surveys}}', 'bounce_email', "{$sVarchar}(254)");
|
||
|
switch ($sDBDriverName){
|
||
|
case 'sqlsrv':
|
||
|
case 'dblib':
|
||
|
case 'mssql': dropUniqueKeyMSSQL('email','{{users}}');
|
||
|
}
|
||
|
alterColumn('{{users}}', 'email', "{$sVarchar}(254)");
|
||
|
$oDB->createCommand()->update('{{settings_global}}',array('stg_value'=>174),"stg_name='DBVersion'");
|
||
|
}
|
||
|
if ($iOldDBVersion < 175)
|
||
|
{
|
||
|
switch ($sDBDriverName){
|
||
|
case 'pgsql':
|
||
|
// Special treatment for Postgres as it is too dumb to convert a boolean to a number without explicit being told to do so
|
||
|
alterColumn('{{plugins}}', 'active', "INTEGER USING (active::integer)", false);
|
||
|
break;
|
||
|
default:
|
||
|
alterColumn('{{plugins}}', 'active', "integer",false,'0');
|
||
|
}
|
||
|
$oDB->createCommand()->update('{{settings_global}}',array('stg_value'=>175),"stg_name='DBVersion'");
|
||
|
}
|
||
|
if ($iOldDBVersion < 176)
|
||
|
{
|
||
|
upgradeTokens176();
|
||
|
$oDB->createCommand()->update('{{settings_global}}',array('stg_value'=>176),"stg_name='DBVersion'");
|
||
|
}
|
||
|
if ($iOldDBVersion < 177)
|
||
|
{
|
||
|
if ( Yii::app()->getConfig('auth_webserver') === true ) {
|
||
|
// using auth webserver, now activate the plugin with default settings.
|
||
|
if (!class_exists('Authwebserver', false)) {
|
||
|
$plugin = Plugin::model()->findByAttributes(array('name'=>'Authwebserver'));
|
||
|
if (!$plugin) {
|
||
|
$plugin = new Plugin();
|
||
|
$plugin->name = 'Authwebserver';
|
||
|
$plugin->active = 1;
|
||
|
$plugin->save();
|
||
|
$plugin = App()->getPluginManager()->loadPlugin('Authwebserver', $plugin->id);
|
||
|
$aPluginSettings = $plugin->getPluginSettings(true);
|
||
|
$aDefaultSettings = array();
|
||
|
foreach ($aPluginSettings as $key => $settings) {
|
||
|
if (is_array($settings) && array_key_exists('current', $settings) ) {
|
||
|
$aDefaultSettings[$key] = $settings['current'];
|
||
|
}
|
||
|
}
|
||
|
$plugin->saveSettings($aDefaultSettings);
|
||
|
} else {
|
||
|
$plugin->active = 1;
|
||
|
$plugin->save();
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
upgradeSurveys177();
|
||
|
$oDB->createCommand()->update('{{settings_global}}',array('stg_value'=>177),"stg_name='DBVersion'");
|
||
|
}
|
||
|
|
||
|
|
||
|
$oTransaction->commit();
|
||
|
// Activate schema caching
|
||
|
$oDB->schemaCachingDuration=3600;
|
||
|
// Load all tables of the application in the schema
|
||
|
Yii::app()->db->schema->getTables();
|
||
|
// clear the cache of all loaded tables
|
||
|
Yii::app()->db->schema->refresh();
|
||
|
}
|
||
|
catch(Exception $e)
|
||
|
{
|
||
|
$oTransaction->rollback();
|
||
|
// Activate schema caching
|
||
|
$oDB->schemaCachingDuration=3600;
|
||
|
// Load all tables of the application in the schema
|
||
|
Yii::app()->db->schema->getTables();
|
||
|
// clear the cache of all loaded tables
|
||
|
Yii::app()->db->schema->refresh();
|
||
|
echo '<br /><br />'.$oLang->gT('An non-recoverable error happened during the update. Error details:')."<p>".htmlspecialchars($e->getMessage()).'</p><br />';
|
||
|
return false;
|
||
|
}
|
||
|
fixLanguageConsistencyAllSurveys();
|
||
|
echo '<br /><br />'.sprintf($oLang->gT('Database update finished (%s)'),date('Y-m-d H:i:s')).'<br /><br />';
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
|
||
|
function upgradeSurveys177()
|
||
|
{
|
||
|
$sSurveyQuery = "SELECT * FROM {{surveys_languagesettings}}";
|
||
|
$oSurveyResult = Yii::app()->db->createCommand($sSurveyQuery)->queryAll();
|
||
|
foreach ( $oSurveyResult as $aSurveyRow )
|
||
|
{
|
||
|
$aAttributeDescriptions=@unserialize($aSurveyRow['surveyls_attributecaptions']);
|
||
|
if ($aAttributeDescriptions==NULL) $aAttributeDescriptions=array();
|
||
|
$sSurveyLSUpdateQuery= "update {{surveys_languagesettings}} set surveyls_attributecaptions=:attributecaptions where surveyls_survey_id=".$aSurveyRow['surveyls_survey_id'].' and surveyls_language=:language';
|
||
|
Yii::app()->db->createCommand($sSurveyLSUpdateQuery)->execute(array(':language'=>$aSurveyRow['surveyls_language'],':attributecaptions'=>json_encode($aAttributeDescriptions)));
|
||
|
}
|
||
|
$sSurveyQuery = "SELECT * FROM {{surveys}}";
|
||
|
$oSurveyResult = Yii::app()->db->createCommand($sSurveyQuery)->queryAll();
|
||
|
foreach ( $oSurveyResult as $aSurveyRow )
|
||
|
{
|
||
|
$aAttributeDescriptions=@unserialize($aSurveyRow['attributedescriptions']);
|
||
|
if ($aAttributeDescriptions==NULL) $aAttributeDescriptions=array();
|
||
|
$sSurveyUpdateQuery= "update {{surveys}} set attributedescriptions=:attributedescriptions where sid=".$aSurveyRow['sid'];
|
||
|
Yii::app()->db->createCommand($sSurveyUpdateQuery)->execute(array(':attributedescriptions'=>json_encode($aAttributeDescriptions)));
|
||
|
}
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
/**
|
||
|
* This function removes the old CPDB fields in token tables
|
||
|
* replaces them with standard attribute fields
|
||
|
* and records the mapping information in the attributedescription field in the survey table instead
|
||
|
*/
|
||
|
function upgradeTokens176()
|
||
|
{
|
||
|
$arSurveys = Survey::model()->findAll();
|
||
|
// Fix any active token tables
|
||
|
foreach ( $arSurveys as $arSurvey )
|
||
|
{
|
||
|
$sTokenTableName='tokens_'.$arSurvey->sid;
|
||
|
if (tableExists($sTokenTableName))
|
||
|
{
|
||
|
$aColumnNames=$aColumnNamesIterator=Yii::app()->db->schema->getTable('{{'.$sTokenTableName.'}}')->columnNames;
|
||
|
$aAttributes = $arSurvey->tokenAttributes;
|
||
|
foreach($aColumnNamesIterator as $sColumnName)
|
||
|
{
|
||
|
// Check if an old atttribute_cpdb column exists in that token table
|
||
|
if (strpos($sColumnName,'attribute_cpdb')!==false)
|
||
|
{
|
||
|
$i=1;
|
||
|
// Look for a an attribute ID that is available
|
||
|
while (in_array('attribute_'.$i,$aColumnNames)) $i++;
|
||
|
$sNewName='attribute_'.$i;
|
||
|
$aColumnNames[]=$sNewName;
|
||
|
Yii::app()->db->createCommand()->renameColumn('{{'.$sTokenTableName.'}}',$sColumnName,$sNewName);
|
||
|
// Update attribute descriptions with the new mapping
|
||
|
if (isset($aAttributes[$sColumnName]))
|
||
|
{
|
||
|
$aAttributes[$sNewName]['cpdbmap']=substr($sColumnName,15);
|
||
|
unset($aAttributes[$sColumnName]);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
Survey::model()->updateByPk($arSurvey->sid, array('attributedescriptions' => serialize($aAttributes)));
|
||
|
}
|
||
|
}
|
||
|
// Now fix all 'old' token tables
|
||
|
$aTables = dbGetTablesLike("%old_tokens%");
|
||
|
foreach ( $aTables as $sTable )
|
||
|
{
|
||
|
$aColumnNames=$aColumnNamesIterator=Yii::app()->db->schema->getTable($sTable)->columnNames;
|
||
|
foreach($aColumnNamesIterator as $sColumnName)
|
||
|
{
|
||
|
// Check if an old atttribute_cpdb column exists in that token table
|
||
|
if (strpos($sColumnName,'attribute_cpdb')!==false)
|
||
|
{
|
||
|
$i=1;
|
||
|
// Look for a an attribute ID that is available
|
||
|
while (in_array('attribute_'.$i,$aColumnNames)) $i++;
|
||
|
$sNewName='attribute_'.$i;
|
||
|
$aColumnNames[]=$sNewName;
|
||
|
Yii::app()->db->createCommand()->renameColumn($sTable,$sColumnName,$sNewName);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
function upgradeCPDBAttributeDefaultNames173()
|
||
|
{
|
||
|
$sQuery = "SELECT attribute_id,attribute_name,COALESCE(lang,NULL)
|
||
|
FROM {{participant_attribute_names_lang}}
|
||
|
group by attribute_id, attribute_name, lang
|
||
|
order by attribute_id";
|
||
|
$oResult = Yii::app()->db->createCommand($sQuery)->queryAll();
|
||
|
foreach ( $oResult as $aAttribute )
|
||
|
{
|
||
|
Yii::app()->db->createCommand()->update('{{participant_attribute_names}}',array('defaultname'=>substr($aAttribute['attribute_name'],0,50)),"attribute_id={$aAttribute['attribute_id']}");
|
||
|
}
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Converts global permissions from users table to the new permission system,
|
||
|
* and converts template permissions from template_rights to new permission table
|
||
|
*/
|
||
|
function upgradePermissions166()
|
||
|
{
|
||
|
Permission::model()->refreshMetaData(); // Needed because otherwise Yii tries to use the outdate permission schema for the permission table
|
||
|
$oUsers=User::model()->findAll();
|
||
|
foreach($oUsers as $oUser)
|
||
|
{
|
||
|
if ($oUser->create_survey==1)
|
||
|
{
|
||
|
$oPermission=new Permission;
|
||
|
$oPermission->entity_id=0;
|
||
|
$oPermission->entity='global';
|
||
|
$oPermission->uid=$oUser->uid;
|
||
|
$oPermission->permission='surveys';
|
||
|
$oPermission->create_p=1;
|
||
|
$oPermission->save();
|
||
|
}
|
||
|
if ($oUser->create_user==1 || $oUser->delete_user==1)
|
||
|
{
|
||
|
$oPermission=new Permission;
|
||
|
$oPermission->entity_id=0;
|
||
|
$oPermission->entity='global';
|
||
|
$oPermission->uid=$oUser->uid;
|
||
|
$oPermission->permission='users';
|
||
|
$oPermission->create_p=$oUser->create_user;
|
||
|
$oPermission->delete_p=$oUser->delete_user;
|
||
|
$oPermission->update_p=1;
|
||
|
$oPermission->read_p=1;
|
||
|
$oPermission->save();
|
||
|
}
|
||
|
if ($oUser->superadmin==1)
|
||
|
{
|
||
|
$oPermission=new Permission;
|
||
|
$oPermission->entity_id=0;
|
||
|
$oPermission->entity='global';
|
||
|
$oPermission->uid=$oUser->uid;
|
||
|
$oPermission->permission='superadmin';
|
||
|
$oPermission->read_p=1;
|
||
|
$oPermission->save();
|
||
|
}
|
||
|
if ($oUser->configurator==1)
|
||
|
{
|
||
|
$oPermission=new Permission;
|
||
|
$oPermission->entity_id=0;
|
||
|
$oPermission->entity='global';
|
||
|
$oPermission->uid=$oUser->uid;
|
||
|
$oPermission->permission='settings';
|
||
|
$oPermission->update_p=1;
|
||
|
$oPermission->read_p=1;
|
||
|
$oPermission->save();
|
||
|
}
|
||
|
if ($oUser->manage_template==1)
|
||
|
{
|
||
|
$oPermission=new Permission;
|
||
|
$oPermission->entity_id=0;
|
||
|
$oPermission->entity='global';
|
||
|
$oPermission->uid=$oUser->uid;
|
||
|
$oPermission->permission='templates';
|
||
|
$oPermission->create_p=1;
|
||
|
$oPermission->read_p=1;
|
||
|
$oPermission->update_p=1;
|
||
|
$oPermission->delete_p=1;
|
||
|
$oPermission->import_p=1;
|
||
|
$oPermission->export_p=1;
|
||
|
$oPermission->save();
|
||
|
}
|
||
|
if ($oUser->manage_label==1)
|
||
|
{
|
||
|
$oPermission=new Permission;
|
||
|
$oPermission->entity_id=0;
|
||
|
$oPermission->entity='global';
|
||
|
$oPermission->uid=$oUser->uid;
|
||
|
$oPermission->permission='labelsets';
|
||
|
$oPermission->create_p=1;
|
||
|
$oPermission->read_p=1;
|
||
|
$oPermission->update_p=1;
|
||
|
$oPermission->delete_p=1;
|
||
|
$oPermission->import_p=1;
|
||
|
$oPermission->export_p=1;
|
||
|
$oPermission->save();
|
||
|
}
|
||
|
if ($oUser->participant_panel==1)
|
||
|
{
|
||
|
$oPermission=new Permission;
|
||
|
$oPermission->entity_id=0;
|
||
|
$oPermission->entity='global';
|
||
|
$oPermission->uid=$oUser->uid;
|
||
|
$oPermission->permission='participantpanel';
|
||
|
$oPermission->create_p=1;
|
||
|
$oPermission->save();
|
||
|
}
|
||
|
}
|
||
|
$sQuery = "SELECT * FROM {{templates_rights}}";
|
||
|
$oResult = Yii::app()->db->createCommand($sQuery)->queryAll();
|
||
|
foreach ( $oResult as $aRow )
|
||
|
{
|
||
|
$oPermission=new Permission;
|
||
|
$oPermission->entity_id=0;
|
||
|
$oPermission->entity='template';
|
||
|
$oPermission->uid=$aRow['uid'];
|
||
|
$oPermission->permission=$aRow['folder'];
|
||
|
$oPermission->read_p=1;
|
||
|
$oPermission->save();
|
||
|
}
|
||
|
}
|
||
|
|
||
|
|
||
|
function upgradeSurveys156()
|
||
|
{
|
||
|
global $modifyoutput;
|
||
|
$sSurveyQuery = "SELECT * FROM {{surveys_languagesettings}}";
|
||
|
$oSurveyResult = Yii::app()->db->createCommand($sSurveyQuery)->queryAll();
|
||
|
foreach ( $oSurveyResult as $aSurveyRow )
|
||
|
{
|
||
|
|
||
|
Yii::app()->loadLibrary('Limesurvey_lang',array("langcode"=>$aSurveyRow['surveyls_language']));
|
||
|
$oLanguage = Yii::app()->lang;
|
||
|
$aDefaultTexts=templateDefaultTexts($oLanguage,'unescaped');
|
||
|
unset($oLanguage);
|
||
|
|
||
|
if (trim(strip_tags($aSurveyRow['surveyls_email_confirm'])) == '')
|
||
|
{
|
||
|
$sSurveyUpdateQuery= "update {{surveys}} set sendconfirmation='N' where sid=".$aSurveyRow['surveyls_survey_id'];
|
||
|
Yii::app()->db->createCommand($sSurveyUpdateQuery)->execute();
|
||
|
|
||
|
$aValues=array('surveyls_email_confirm_subj'=>$aDefaultTexts['confirmation_subject'],
|
||
|
'surveyls_email_confirm'=>$aDefaultTexts['confirmation']);
|
||
|
SurveyLanguageSetting::model()->updateAll($aValues,'surveyls_survey_id=:sid',array(':sid'=>$aSurveyRow['surveyls_survey_id']));
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// 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;
|
||
|
$sSurveyQuery = "SELECT sid FROM {{surveys}}";
|
||
|
$oSurveyResult = dbExecuteAssoc($sSurveyQuery);
|
||
|
foreach ( $oSurveyResult->readAll() as $aSurveyRow)
|
||
|
{
|
||
|
$iSurveyID=$aSurveyRow['sid'];
|
||
|
$aLanguages=array_merge(array(Survey::model()->findByPk($iSurveyID)->language), Survey::model()->findByPk($iSurveyID)->additionalLanguages);
|
||
|
|
||
|
$sAttributeQuery = "select q.qid,attribute,value from {{question_attributes}} qa , {{questions}} q where q.qid=qa.qid and sid={$iSurveyID}";
|
||
|
$oAttributeResult = dbExecuteAssoc($sAttributeQuery);
|
||
|
$aAllAttributes=questionAttributes(true);
|
||
|
foreach ( $oAttributeResult->readAll() as $aAttributeRow)
|
||
|
{
|
||
|
if (isset($aAllAttributes[$aAttributeRow['attribute']]['i18n']) && $aAllAttributes[$aAttributeRow['attribute']]['i18n'])
|
||
|
{
|
||
|
Yii::app()->db->createCommand("delete from {{question_attributes}} where qid={$aAttributeRow['qid']} and attribute='{$aAttributeRow['attribute']}'")->execute();
|
||
|
foreach ($aLanguages as $sLanguage)
|
||
|
{
|
||
|
$sAttributeInsertQuery="insert into {{question_attributes}} (qid,attribute,value,language) VALUES({$aAttributeRow['qid']},'{$aAttributeRow['attribute']}','{$aAttributeRow['value']}','{$sLanguage}' )";
|
||
|
modifyDatabase("",$sAttributeInsertQuery); echo $modifyoutput; flush();@ob_flush();
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
|
||
|
function upgradeSurveyTimings146()
|
||
|
{
|
||
|
$aTables = dbGetTablesLike("%timings");
|
||
|
foreach ($aTables as $sTable) {
|
||
|
Yii::app()->db->createCommand()->renameColumn($sTable,'interviewTime','interviewtime');
|
||
|
}
|
||
|
}
|
||
|
|
||
|
|
||
|
// Add the usesleft field to all existing token tables
|
||
|
function upgradeTokens145()
|
||
|
{
|
||
|
$aTables = dbGetTablesLike("tokens%");
|
||
|
foreach ( $aTables as $sTable )
|
||
|
{
|
||
|
addColumn($sTable,'usesleft',"integer NOT NULL default 1");
|
||
|
Yii::app()->db->createCommand()->update($sTable,array('usesleft'=>'0'),"completed<>'N'");
|
||
|
}
|
||
|
}
|
||
|
|
||
|
|
||
|
function upgradeSurveys145()
|
||
|
{
|
||
|
global $modifyoutputt;
|
||
|
$sSurveyQuery = "SELECT * FROM {{surveys}} where notification<>'0'";
|
||
|
$oSurveyResult = dbExecuteAssoc($sSurveyQuery);
|
||
|
foreach ( $oSurveyResult->readAll() as $aSurveyRow )
|
||
|
{
|
||
|
if ($aSurveyRow['notification']=='1' && trim($aSurveyRow['adminemail'])!='')
|
||
|
{
|
||
|
$aEmailAddresses=explode(';',$aSurveyRow['adminemail']);
|
||
|
$sAdminEmailAddress=$aEmailAddresses[0];
|
||
|
$sEmailnNotificationAddresses=implode(';',$aEmailAddresses);
|
||
|
$sSurveyUpdateQuery= "update {{surveys}} set adminemail='{$sAdminEmailAddress}', emailnotificationto='{$sEmailnNotificationAddresses}' where sid=".$aSurveyRow['sid'];
|
||
|
Yii::app()->db->createCommand($sSurveyUpdateQuery)->execute();
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
$aEmailAddresses=explode(';',$aSurveyRow['adminemail']);
|
||
|
$sAdminEmailAddress=$aEmailAddresses[0];
|
||
|
$sEmailDetailedNotificationAddresses=implode(';',$aEmailAddresses);
|
||
|
if (trim($aSurveyRow['emailresponseto'])!='')
|
||
|
{
|
||
|
$sEmailDetailedNotificationAddresses=$sEmailDetailedNotificationAddresses.';'.trim($aSurveyRow['emailresponseto']);
|
||
|
}
|
||
|
$sSurveyUpdateQuery= "update {{surveys}} set adminemail='{$sAdminEmailAddress}', emailnotificationto='{$sEmailDetailedNotificationAddresses}' where sid=".$aSurveyRow['sid'];
|
||
|
Yii::app()->db->createCommand($sSurveyUpdateQuery)->execute();
|
||
|
}
|
||
|
}
|
||
|
$sSurveyQuery = "SELECT * FROM {{surveys_languagesettings}}";
|
||
|
$oSurveyResult = Yii::app()->db->createCommand($sSurveyQuery)->queryAll();
|
||
|
foreach ( $oSurveyResult as $aSurveyRow )
|
||
|
{
|
||
|
$oLanguage = new Limesurvey_lang($aSurveyRow['surveyls_language']);
|
||
|
$oLanguage = Yii::app()->lang;
|
||
|
$aDefaultTexts=templateDefaultTexts($oLanguage,'unescaped');
|
||
|
unset($oLanguage);
|
||
|
$aDefaultTexts['admin_detailed_notification']=$aDefaultTexts['admin_detailed_notification'].$aDefaultTexts['admin_detailed_notification_css'];
|
||
|
$sSurveyUpdateQuery = "update {{surveys_languagesettings}} set
|
||
|
email_admin_responses_subj=".$aDefaultTexts['admin_detailed_notification_subject'].",
|
||
|
email_admin_responses=".$aDefaultTexts['admin_detailed_notification'].",
|
||
|
email_admin_notification_subj=".$aDefaultTexts['admin_notification_subject'].",
|
||
|
email_admin_notification=".$aDefaultTexts['admin_notification']."
|
||
|
where surveyls_survey_id=".$aSurveyRow['surveyls_survey_id'];
|
||
|
Yii::app()->db->createCommand()->update('{{surveys_languagesettings}}',array('email_admin_responses_subj'=>$aDefaultTexts['admin_detailed_notification_subject'],
|
||
|
'email_admin_responses'=>$aDefaultTexts['admin_detailed_notification'],
|
||
|
'email_admin_notification_subj'=>$aDefaultTexts['admin_notification_subject'],
|
||
|
'email_admin_notification'=>$aDefaultTexts['admin_notification']
|
||
|
),"surveyls_survey_id={$aSurveyRow['surveyls_survey_id']}");
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
|
||
|
function upgradeSurveyPermissions145()
|
||
|
{
|
||
|
$sPermissionQuery = "SELECT * FROM {{surveys_rights}}";
|
||
|
$oPermissionResult = Yii::app()->db->createCommand($sPermissionQuery)->queryAll();
|
||
|
if (empty($oPermissionResult)) {return "Database Error";}
|
||
|
else
|
||
|
{
|
||
|
$sTableName = '{{survey_permissions}}';
|
||
|
foreach ( $oPermissionResult as $aPermissionRow )
|
||
|
{
|
||
|
|
||
|
$sPermissionInsertQuery=Yii::app()->db->createCommand()->insert($sTableName, array('permission'=>'assessments',
|
||
|
'create_p'=>$aPermissionRow['define_questions'],
|
||
|
'read_p'=>$aPermissionRow['define_questions'],
|
||
|
'update_p'=>$aPermissionRow['define_questions'],
|
||
|
'delete_p'=>$aPermissionRow['define_questions'],
|
||
|
'sid'=>$aPermissionRow['sid'],
|
||
|
'uid'=>$aPermissionRow['uid']));
|
||
|
|
||
|
$sPermissionInsertQuery=Yii::app()->db->createCommand()->insert($sTableName,array('permission'=>'quotas',
|
||
|
'create_p'=>$aPermissionRow['define_questions'],
|
||
|
'read_p'=>$aPermissionRow['define_questions'],
|
||
|
'update_p'=>$aPermissionRow['define_questions'],
|
||
|
'delete_p'=>$aPermissionRow['define_questions'],
|
||
|
'sid'=>$aPermissionRow['sid'],
|
||
|
'uid'=>$aPermissionRow['uid']));
|
||
|
|
||
|
$sPermissionInsertQuery=Yii::app()->db->createCommand()->insert($sTableName,array('permission'=>'responses',
|
||
|
'create_p'=>$aPermissionRow['browse_response'],
|
||
|
'read_p'=>$aPermissionRow['browse_response'],
|
||
|
'update_p'=>$aPermissionRow['browse_response'],
|
||
|
'delete_p'=>$aPermissionRow['delete_survey'],
|
||
|
'export_p'=>$aPermissionRow['export'],
|
||
|
'import_p'=>$aPermissionRow['browse_response'],
|
||
|
'sid'=>$aPermissionRow['sid'],
|
||
|
'uid'=>$aPermissionRow['uid']));
|
||
|
|
||
|
$sPermissionInsertQuery=Yii::app()->db->createCommand()->insert($sTableName,array('permission'=>'statistics',
|
||
|
'read_p'=>$aPermissionRow['browse_response'],
|
||
|
'sid'=>$aPermissionRow['sid'],
|
||
|
'uid'=>$aPermissionRow['uid']));
|
||
|
|
||
|
$sPermissionInsertQuery=Yii::app()->db->createCommand()->insert($sTableName,array('permission'=>'survey',
|
||
|
'read_p'=>1,
|
||
|
'delete_p'=>$aPermissionRow['delete_survey'],
|
||
|
'sid'=>$aPermissionRow['sid'],
|
||
|
'uid'=>$aPermissionRow['uid']));
|
||
|
|
||
|
$sPermissionInsertQuery=Yii::app()->db->createCommand()->insert($sTableName,array('permission'=>'surveyactivation',
|
||
|
'update_p'=>$aPermissionRow['activate_survey'],
|
||
|
'sid'=>$aPermissionRow['sid'],
|
||
|
'uid'=>$aPermissionRow['uid']));
|
||
|
|
||
|
$sPermissionInsertQuery=Yii::app()->db->createCommand()->insert($sTableName,array('permission'=>'surveycontent',
|
||
|
'create_p'=>$aPermissionRow['define_questions'],
|
||
|
'read_p'=>$aPermissionRow['define_questions'],
|
||
|
'update_p'=>$aPermissionRow['define_questions'],
|
||
|
'delete_p'=>$aPermissionRow['define_questions'],
|
||
|
'export_p'=>$aPermissionRow['export'],
|
||
|
'import_p'=>$aPermissionRow['define_questions'],
|
||
|
'sid'=>$aPermissionRow['sid'],
|
||
|
'uid'=>$aPermissionRow['uid']));
|
||
|
|
||
|
$sPermissionInsertQuery=Yii::app()->db->createCommand()->insert($sTableName,array('permission'=>'surveylocale',
|
||
|
'read_p'=>$aPermissionRow['edit_survey_property'],
|
||
|
'update_p'=>$aPermissionRow['edit_survey_property'],
|
||
|
'sid'=>$aPermissionRow['sid'],
|
||
|
'uid'=>$aPermissionRow['uid']));
|
||
|
|
||
|
$sPermissionInsertQuery=Yii::app()->db->createCommand()->insert($sTableName,array('permission'=>'surveysettings',
|
||
|
'read_p'=>$aPermissionRow['edit_survey_property'],
|
||
|
'update_p'=>$aPermissionRow['edit_survey_property'],
|
||
|
'sid'=>$aPermissionRow['sid'],
|
||
|
'uid'=>$aPermissionRow['uid']));
|
||
|
|
||
|
$sPermissionInsertQuery=Yii::app()->db->createCommand()->insert($sTableName,array('permission'=>'tokens',
|
||
|
'create_p'=>$aPermissionRow['activate_survey'],
|
||
|
'read_p'=>$aPermissionRow['activate_survey'],
|
||
|
'update_p'=>$aPermissionRow['activate_survey'],
|
||
|
'delete_p'=>$aPermissionRow['activate_survey'],
|
||
|
'export_p'=>$aPermissionRow['export'],
|
||
|
'import_p'=>$aPermissionRow['activate_survey'],
|
||
|
'sid'=>$aPermissionRow['sid'],
|
||
|
'uid'=>$aPermissionRow['uid']));
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
function upgradeTables143()
|
||
|
{
|
||
|
global $modifyoutput;
|
||
|
|
||
|
$aQIDReplacements=array();
|
||
|
$answerquery = "select a.*, q.sid, q.gid from {{answers}} a,{{questions}} q where a.qid=q.qid and q.type in ('L','O','!') and a.default_value='Y'";
|
||
|
$answerresult = Yii::app()->db->createCommand($answerquery)->queryAll();
|
||
|
foreach ( $answerresult as $row )
|
||
|
{
|
||
|
modifyDatabase("","INSERT INTO {{defaultvalues}} (qid, scale_id,language,specialtype,defaultvalue) VALUES ({$row['qid']},0,".dbQuoteAll($row['language']).",'',".dbQuoteAll($row['code']).")"); echo $modifyoutput; flush();@ob_flush();
|
||
|
}
|
||
|
|
||
|
// Convert answers to subquestions
|
||
|
|
||
|
$answerquery = "select a.*, q.sid, q.gid, q.type from {{answers}} a,{{questions}} q where a.qid=q.qid and a.language=q.language and q.type in ('1','A','B','C','E','F','H','K',';',':','M','P','Q')";
|
||
|
$answerresult = Yii::app()->db->createCommand($answerquery)->queryAll();
|
||
|
foreach ( $answerresult as $row )
|
||
|
{
|
||
|
|
||
|
$aInsert=array();
|
||
|
if (isset($aQIDReplacements[$row['qid'].'_'.$row['code']]))
|
||
|
{
|
||
|
$aInsert['qid']=$aQIDReplacements[$row['qid'].'_'.$row['code']];
|
||
|
}
|
||
|
$aInsert['sid']=$row['sid'];
|
||
|
$aInsert['gid']=$row['gid'];
|
||
|
$aInsert['parent_qid']=$row['qid'];
|
||
|
$aInsert['type']=$row['type'];
|
||
|
$aInsert['title']=$row['code'];
|
||
|
$aInsert['question']=$row['answer'];
|
||
|
$aInsert['question_order']=$row['sortorder'];
|
||
|
$aInsert['language']=$row['language'];
|
||
|
|
||
|
$iLastInsertID=Question::model()->insertRecords($aInsert);
|
||
|
if (!isset($aInsert['qid']))
|
||
|
{
|
||
|
$aQIDReplacements[$row['qid'].'_'.$row['code']]=$iLastInsertID;
|
||
|
$iSaveSQID=$aQIDReplacements[$row['qid'].'_'.$row['code']];
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
$iSaveSQID=$aInsert['qid'];
|
||
|
}
|
||
|
if (($row['type']=='M' || $row['type']=='P') && $row['default_value']=='Y')
|
||
|
{
|
||
|
modifyDatabase("","INSERT INTO {{defaultvalues}} (qid, sqid, scale_id,language,specialtype,defaultvalue) VALUES ({$row['qid']},{$iSaveSQID},0,".dbQuoteAll($row['language']).",'','Y')"); echo $modifyoutput; flush();@ob_flush();
|
||
|
}
|
||
|
}
|
||
|
// Sanitize data
|
||
|
$sDBDriverName=Yii::app()->db->getDriverName();
|
||
|
if ($sDBDriverName=='pgsql')
|
||
|
{
|
||
|
modifyDatabase("","delete from {{answers}} USING {{questions}} WHERE {{answers}}.qid={{questions}}.qid AND {{questions}}.type in ('1','F','H','M','P','W','Z')"); echo $modifyoutput; flush();@ob_flush();
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
modifyDatabase("","delete {{answers}} from {{answers}} LEFT join {{questions}} ON {{answers}}.qid={{questions}}.qid where {{questions}}.type in ('1','F','H','M','P','W','Z')"); echo $modifyoutput; flush();@ob_flush();
|
||
|
}
|
||
|
|
||
|
// Convert labels to answers
|
||
|
$answerquery = "select qid ,type ,lid ,lid1, language from {{questions}} where parent_qid=0 and type in ('1','F','H','M','P','W','Z')";
|
||
|
$answerresult = Yii::app()->db->createCommand($answerquery)->queryAll();
|
||
|
foreach ( $answerresult as $row )
|
||
|
{
|
||
|
$labelquery="Select * from {{labels}} where lid={$row['lid']} and language=".dbQuoteAll($row['language']);
|
||
|
$labelresult = Yii::app()->db->createCommand($labelquery)->queryAll();
|
||
|
foreach ( $labelresult as $lrow )
|
||
|
{
|
||
|
modifyDatabase("","INSERT INTO {{answers}} (qid, code, answer, sortorder, language, assessment_value) VALUES ({$row['qid']},".dbQuoteAll($lrow['code']).",".dbQuoteAll($lrow['title']).",{$lrow['sortorder']},".dbQuoteAll($lrow['language']).",{$lrow['assessment_value']})"); echo $modifyoutput; flush();@ob_flush();
|
||
|
//$labelids[]
|
||
|
}
|
||
|
if ($row['type']=='1')
|
||
|
{
|
||
|
$labelquery="Select * from {{labels}} where lid={$row['lid1']} and language=".dbQuoteAll($row['language']);
|
||
|
$labelresult = Yii::app()->db->createCommand($labelquery)->queryAll();
|
||
|
foreach ( $labelresult as $lrow )
|
||
|
{
|
||
|
modifyDatabase("","INSERT INTO {{answers}} (qid, code, answer, sortorder, language, scale_id, assessment_value) VALUES ({$row['qid']},".dbQuoteAll($lrow['code']).",".dbQuoteAll($lrow['title']).",{$lrow['sortorder']},".dbQuoteAll($lrow['language']).",1,{$lrow['assessment_value']})"); echo $modifyoutput; flush();@ob_flush();
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// Convert labels to subquestions
|
||
|
$answerquery = "select * from {{questions}} where parent_qid=0 and type in (';',':')";
|
||
|
$answerresult = Yii::app()->db->createCommand($answerquery)->queryAll();
|
||
|
foreach ( $answerresult as $row )
|
||
|
{
|
||
|
$labelquery="Select * from {{labels}} where lid={$row['lid']} and language=".dbQuoteAll($row['language']);
|
||
|
$labelresult = Yii::app()->db->createCommand($labelquery)->queryAll();
|
||
|
foreach ( $labelresult as $lrow )
|
||
|
{
|
||
|
$aInsert=array();
|
||
|
if (isset($aQIDReplacements[$row['qid'].'_'.$lrow['code'].'_1']))
|
||
|
{
|
||
|
$aInsert['qid']=$aQIDReplacements[$row['qid'].'_'.$lrow['code'].'_1'];
|
||
|
}
|
||
|
$aInsert['sid']=$row['sid'];
|
||
|
$aInsert['gid']=$row['gid'];
|
||
|
$aInsert['parent_qid']=$row['qid'];
|
||
|
$aInsert['type']=$row['type'];
|
||
|
$aInsert['title']=$lrow['code'];
|
||
|
$aInsert['question']=$lrow['title'];
|
||
|
$aInsert['question_order']=$lrow['sortorder'];
|
||
|
$aInsert['language']=$lrow['language'];
|
||
|
$aInsert['scale_id']=1;
|
||
|
$iLastInsertID=Question::model()->insertRecords($aInsert);
|
||
|
|
||
|
if (isset($aInsert['qid']))
|
||
|
{
|
||
|
$aQIDReplacements[$row['qid'].'_'.$lrow['code'].'_1']=$iLastInsertID;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
$updatequery = "update {{questions}} set type='!' where type='W'";
|
||
|
modifyDatabase("",$updatequery); echo $modifyoutput; flush();@ob_flush();
|
||
|
$updatequery = "update {{questions}} set type='L' where type='Z'";
|
||
|
modifyDatabase("",$updatequery); echo $modifyoutput; flush();@ob_flush();
|
||
|
|
||
|
// Now move all non-standard templates to the /upload dir
|
||
|
$usertemplaterootdir=Yii::app()->getConfig("usertemplaterootdir");
|
||
|
$standardtemplaterootdir = Yii::app()->getConfig('standardtemplaterootdir');
|
||
|
|
||
|
if (!$usertemplaterootdir) {die("getTemplateList() no template directory");}
|
||
|
if ($handle = opendir($standardtemplaterootdir))
|
||
|
{
|
||
|
while (false !== ($file = readdir($handle)))
|
||
|
{
|
||
|
if (!is_file("$standardtemplaterootdir/$file") && $file != "." && $file != ".." && $file!=".svn" && !isStandardTemplate($file))
|
||
|
{
|
||
|
if (!rename($standardtemplaterootdir.DIRECTORY_SEPARATOR.$file,$usertemplaterootdir.DIRECTORY_SEPARATOR.$file))
|
||
|
{
|
||
|
echo "There was a problem moving directory '".$standardtemplaterootdir.DIRECTORY_SEPARATOR.$file."' to '".$usertemplaterootdir.DIRECTORY_SEPARATOR.$file."' due to missing permissions. Please do this manually.<br />";
|
||
|
};
|
||
|
}
|
||
|
}
|
||
|
closedir($handle);
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
|
||
|
function upgradeQuestionAttributes142()
|
||
|
{
|
||
|
global $modifyoutput;
|
||
|
$attributequery="Select qid from {{question_attributes}} where attribute='exclude_all_other' group by qid having count(qid)>1 ";
|
||
|
$questionids = Yii::app()->db->createCommand($attributequery)->queryRow();
|
||
|
if(!is_array($questionids)) { return "Database Error"; }
|
||
|
else
|
||
|
{
|
||
|
foreach ($questionids as $questionid)
|
||
|
{
|
||
|
//Select all affected question attributes
|
||
|
$attributevalues=Yii::app()->db->createCommand("SELECT value from {{question_attributes}} where attribute='exclude_all_other' and qid=".$questionid)->queryColumn();
|
||
|
modifyDatabase("","delete from {{question_attributes}} where attribute='exclude_all_other' and qid=".$questionid); echo $modifyoutput; flush();@ob_flush();
|
||
|
$record['value']=implode(';',$attributevalues);
|
||
|
$record['attribute']='exclude_all_other';
|
||
|
$record['qid']=$questionid;
|
||
|
Yii::app()->db->createCommand()->insert('{{question_attributes}}', $record)->execute();
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
function upgradeSurveyTables139()
|
||
|
{
|
||
|
global $modifyoutput;
|
||
|
$dbprefix = Yii::app()->db->tablePrefix;
|
||
|
$aTables = dbGetTablesLike("survey\_%");
|
||
|
foreach ( $aTables as $sTable )
|
||
|
{
|
||
|
addColumn($sTable,'lastpage','integer');
|
||
|
}
|
||
|
}
|
||
|
|
||
|
|
||
|
// Add the reminders tracking fields
|
||
|
function upgradeTokenTables134()
|
||
|
{
|
||
|
global $modifyoutput;
|
||
|
$aTables = dbGetTablesLike("tokens%");
|
||
|
foreach ( $aTables as $sTable )
|
||
|
{
|
||
|
addColumn($sTable,'validfrom',"datetime");
|
||
|
addColumn($sTable,'validuntil',"datetime");
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// Add the reminders tracking fields
|
||
|
function upgradeTokens128()
|
||
|
{
|
||
|
global $modifyoutput;
|
||
|
$sVarchar=Yii::app()->getConfig('varchar');
|
||
|
$aTables = dbGetTablesLike("tokens%");
|
||
|
foreach ( $aTables as $sTable )
|
||
|
{
|
||
|
addColumn($sTable,'remindersent',"{$sVarchar}(17) DEFAULT 'N'");
|
||
|
addColumn($sTable,'remindercount',"integer DEFAULT '0'");
|
||
|
}
|
||
|
}
|
||
|
|
||
|
|
||
|
function fixMySQLCollations()
|
||
|
{
|
||
|
global $modifyoutput;
|
||
|
$sql = 'SHOW TABLE STATUS';
|
||
|
$dbprefix = Yii::app()->db->tablePrefix;
|
||
|
$result = Yii::app()->db->createCommand($sql)->queryAll();
|
||
|
foreach ( $result as $tables ) {
|
||
|
// Loop through all tables in this database
|
||
|
$table = $tables['Name'];
|
||
|
$tablecollation=$tables['Collation'];
|
||
|
if (strpos($table,'old_')===false && ($dbprefix=='' || ($dbprefix!='' && strpos($table,$dbprefix)!==false)))
|
||
|
{
|
||
|
if ($tablecollation!='utf8_unicode_ci')
|
||
|
{
|
||
|
modifyDatabase("","ALTER TABLE $table COLLATE utf8_unicode_ci");
|
||
|
echo $modifyoutput; flush();@ob_flush();
|
||
|
}
|
||
|
|
||
|
# Now loop through all the fields within this table
|
||
|
$result2 = Yii::app()->db->createCommand("SHOW FULL COLUMNS FROM ".$table)->queryAll();
|
||
|
foreach ( $result2 as $column )
|
||
|
{
|
||
|
if ($column['Collation']!= 'utf8_unicode_ci' )
|
||
|
{
|
||
|
$field_name = $column['Field'];
|
||
|
$field_type = $column['Type'];
|
||
|
$field_default = $column['Default'];
|
||
|
if ($field_default!='NULL') {$field_default="'".$field_default."'";}
|
||
|
# Change text based fields
|
||
|
$skipped_field_types = array('char', 'text', 'enum', 'set');
|
||
|
|
||
|
foreach ( $skipped_field_types as $type )
|
||
|
{
|
||
|
if ( strpos($field_type, $type) !== false )
|
||
|
{
|
||
|
$modstatement="ALTER TABLE $table CHANGE `$field_name` `$field_name` $field_type CHARACTER SET utf8 COLLATE utf8_unicode_ci";
|
||
|
if ($type!='text') {$modstatement.=" DEFAULT $field_default";}
|
||
|
modifyDatabase("",$modstatement);
|
||
|
echo $modifyoutput; flush();@ob_flush();
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
function upgradeSurveyTables126()
|
||
|
{
|
||
|
$surveyidquery = "SELECT sid FROM {{surveys}} WHERE active='Y' and datestamp='Y'";
|
||
|
$surveyidresult = Yii::app()->db->createCommand($surveyidquery)->queryAll();
|
||
|
if (!$surveyidresult) {return "Database Error";}
|
||
|
else
|
||
|
{
|
||
|
foreach ( $surveyidresult as $sv )
|
||
|
{
|
||
|
addColumn('{{survey_'.$sv['sid'].'}}','startdate','datetime');
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
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'");
|
||
|
}
|
||
|
}
|
||
|
|
||
|
function alterLanguageCode($sOldLanguageCode,$sNewLanguageCode)
|
||
|
{
|
||
|
Yii::app()->db->createCommand()->update('{{answers}}',array('language'=>$sNewLanguageCode),'language=:lang',array(':lang'=>$sOldLanguageCode));
|
||
|
Yii::app()->db->createCommand()->update('{{questions}}',array('language'=>$sNewLanguageCode),'language=:lang',array(':lang'=>$sOldLanguageCode));
|
||
|
Yii::app()->db->createCommand()->update('{{groups}}',array('language'=>$sNewLanguageCode),'language=:lang',array(':lang'=>$sOldLanguageCode));
|
||
|
Yii::app()->db->createCommand()->update('{{labels}}',array('language'=>$sNewLanguageCode),'language=:lang',array(':lang'=>$sOldLanguageCode));
|
||
|
Yii::app()->db->createCommand()->update('{{surveys}}',array('language'=>$sNewLanguageCode),'language=:lang',array(':lang'=>$sOldLanguageCode));
|
||
|
Yii::app()->db->createCommand()->update('{{surveys_languagesettings}}',array('surveyls_language'=>$sNewLanguageCode),'surveyls_language=:lang',array(':lang'=>$sOldLanguageCode));
|
||
|
Yii::app()->db->createCommand()->update('{{users}}',array('lang'=>$sNewLanguageCode),'lang=:language',array(':language'=>$sOldLanguageCode));
|
||
|
|
||
|
$resultdata=Yii::app()->db->createCommand("select * from {{labelsets}}");
|
||
|
foreach ($resultdata->queryAll() as $datarow){
|
||
|
$aLanguages=explode(' ',$datarow['languages']);
|
||
|
foreach ($aLanguages as &$sLanguage)
|
||
|
{
|
||
|
if ($sLanguage==$sOldLanguageCode) $sLanguage=$sNewLanguageCode;
|
||
|
}
|
||
|
$toreplace=implode(' ',$aLanguages);
|
||
|
Yii::app()->db->createCommand()->update('{{labelsets}}',array('languages'=>$toreplace),'lid=:lid',array(':lid'=>$datarow['lid']));
|
||
|
}
|
||
|
|
||
|
$resultdata=Yii::app()->db->createCommand("select * from {{surveys}}");
|
||
|
foreach ($resultdata->queryAll() as $datarow){
|
||
|
$aLanguages=explode(' ',$datarow['additional_languages']);
|
||
|
foreach ($aLanguages as &$sLanguage)
|
||
|
{
|
||
|
if ($sLanguage==$sOldLanguageCode) $sLanguage=$sNewLanguageCode;
|
||
|
}
|
||
|
$toreplace=implode(' ',$aLanguages);
|
||
|
Yii::app()->db->createCommand()->update('{{surveys}}',array('additional_languages'=>$toreplace),'sid=:sid',array(':sid'=>$datarow['sid']));
|
||
|
}
|
||
|
}
|
||
|
|
||
|
function addPrimaryKey($sTablename, $aColumns)
|
||
|
{
|
||
|
Yii::app()->db->createCommand("ALTER TABLE {{".$sTablename."}} ADD PRIMARY KEY (".implode(',',$aColumns).")")->execute();
|
||
|
}
|
||
|
|
||
|
|
||
|
function dropPrimaryKey($sTablename)
|
||
|
{
|
||
|
$sDBDriverName=Yii::app()->db->getDriverName();
|
||
|
if ($sDBDriverName=='mysqli') $sDBDriverName='mysql';
|
||
|
if ($sDBDriverName=='sqlsrv' || $sDBDriverName=='dblib') $sDBDriverName='mssql';
|
||
|
|
||
|
global $modifyoutput;
|
||
|
switch ($sDBDriverName){
|
||
|
case 'mysql':
|
||
|
$sQuery="ALTER TABLE {{".$sTablename."}} DROP PRIMARY KEY";
|
||
|
Yii::app()->db->createCommand($sQuery)->execute();
|
||
|
break;
|
||
|
case 'pgsql':
|
||
|
case 'mssql':
|
||
|
$pkquery = "SELECT CONSTRAINT_NAME "
|
||
|
."FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS "
|
||
|
."WHERE (TABLE_NAME = '{{{$sTablename}}}') AND (CONSTRAINT_TYPE = 'PRIMARY KEY')";
|
||
|
|
||
|
$primarykey = Yii::app()->db->createCommand($pkquery)->queryRow(false);
|
||
|
if ($primarykey!==false)
|
||
|
{
|
||
|
$sQuery="ALTER TABLE {{".$sTablename."}} DROP CONSTRAINT ".$primarykey[0];
|
||
|
Yii::app()->db->createCommand($sQuery)->execute();
|
||
|
}
|
||
|
break;
|
||
|
default: die('Unkown database type');
|
||
|
}
|
||
|
|
||
|
// find out the constraint name of the old primary key
|
||
|
}
|
||
|
|
||
|
function fixLanguageConsistencyAllSurveys()
|
||
|
{
|
||
|
$surveyidquery = "SELECT sid,additional_languages FROM ".dbQuoteID('{{surveys}}');
|
||
|
$surveyidresult = Yii::app()->db->createCommand($surveyidquery)->queryAll();
|
||
|
foreach ( $surveyidresult as $sv )
|
||
|
{
|
||
|
fixLanguageConsistency($sv['sid'],$sv['additional_languages']);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
function alterColumn($sTable, $sColumn, $sFieldType, $bAllowNull=true, $sDefault='NULL')
|
||
|
{
|
||
|
$sDBDriverName=Yii::app()->db->getDriverName();
|
||
|
if ($sDBDriverName=='mysqli') $sDBDriverName='mysql';
|
||
|
if ($sDBDriverName=='sqlsrv' || $sDBDriverName=='dblib') $sDBDriverName='mssql';
|
||
|
switch ($sDBDriverName){
|
||
|
case 'mysql':
|
||
|
$sType=$sFieldType;
|
||
|
if ($bAllowNull!=true)
|
||
|
{
|
||
|
$sType.=' NOT NULL';
|
||
|
}
|
||
|
if ($sDefault!='NULL')
|
||
|
{
|
||
|
$sType.=" DEFAULT '{$sDefault}'";
|
||
|
}
|
||
|
Yii::app()->db->createCommand()->alterColumn($sTable,$sColumn,$sType);
|
||
|
break;
|
||
|
case 'mssql':
|
||
|
dropDefaultValueMSSQL($sColumn,$sTable);
|
||
|
$sType=$sFieldType;
|
||
|
if ($sType=='text') {
|
||
|
$sType='varchar(max)';
|
||
|
}
|
||
|
if ($sType=='binary') {
|
||
|
$sType='text';
|
||
|
}
|
||
|
if ($bAllowNull!=true)
|
||
|
{
|
||
|
$sType.=' NOT NULL';
|
||
|
if ($sDefault!='NULL')
|
||
|
{
|
||
|
Yii::app()->db->createCommand("UPDATE {$sTable} SET [{$sColumn}]='{$sDefault}' where [{$sColumn}] is NULL;")->execute();
|
||
|
}
|
||
|
}
|
||
|
Yii::app()->db->createCommand()->alterColumn($sTable,$sColumn,$sType);
|
||
|
if ($sDefault!='NULL')
|
||
|
{
|
||
|
Yii::app()->db->createCommand("ALTER TABLE {$sTable} ADD default '{$sDefault}' FOR [{$sColumn}];")->execute();
|
||
|
}
|
||
|
break;
|
||
|
case 'pgsql':
|
||
|
$sType=$sFieldType;
|
||
|
Yii::app()->db->createCommand()->alterColumn($sTable,$sColumn,$sType);
|
||
|
try{ Yii::app()->db->createCommand("ALTER TABLE {$sTable} ALTER COLUMN {$sColumn} DROP DEFAULT")->execute();} catch(Exception $e) {};
|
||
|
try{ Yii::app()->db->createCommand("ALTER TABLE {$sTable} ALTER COLUMN {$sColumn} DROP NOT NULL")->execute();} catch(Exception $e) {};
|
||
|
|
||
|
if ($bAllowNull!=true)
|
||
|
{
|
||
|
Yii::app()->db->createCommand("ALTER TABLE {$sTable} ALTER COLUMN {$sColumn} SET NOT NULL")->execute();
|
||
|
}
|
||
|
if ($sDefault!='NULL')
|
||
|
{
|
||
|
Yii::app()->db->createCommand("ALTER TABLE {$sTable} ALTER COLUMN {$sColumn} SET DEFAULT '{$sDefault}'")->execute();
|
||
|
}
|
||
|
Yii::app()->db->createCommand()->alterColumn($sTable,$sColumn,$sType);
|
||
|
break;
|
||
|
default: die('Unkown database type');
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
|
||
|
function dropColumn($sTableName, $sColumnName)
|
||
|
{
|
||
|
$sDBDriverName=Yii::app()->db->getDriverName();
|
||
|
if ($sDBDriverName=='mysqli') $sDBDriverName='mysql';
|
||
|
if ($sDBDriverName=='sqlsrv' || $sDBDriverName=='dblib') $sDBDriverName='mssql';
|
||
|
|
||
|
if ($sDBDriverName=='mssql')
|
||
|
{
|
||
|
dropDefaultValueMSSQL($sColumnName,$sTableName);
|
||
|
}
|
||
|
Yii::app()->db->createCommand()->dropColumn($sTableName,$sColumnName);
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
function addColumn($sTableName, $sColumn, $sType)
|
||
|
{
|
||
|
$sDBDriverName=Yii::app()->db->getDriverName();
|
||
|
if ($sDBDriverName=='mysqli') $sDBDriverName='mysql';
|
||
|
if ($sDBDriverName=='sqlsrv' || $sDBDriverName=='dblib') $sDBDriverName='mssql';
|
||
|
if ($sDBDriverName=='mssql')
|
||
|
{
|
||
|
$sType=str_replace('text','varchar(max)',$sType);
|
||
|
$sType=str_replace('binary','text',$sType);
|
||
|
}
|
||
|
Yii::app()->db->createCommand()->addColumn($sTableName,$sColumn,$sType);
|
||
|
}
|
||
|
|
||
|
|
||
|
function setTransactionBookmark($sBookmark='limesurvey')
|
||
|
{
|
||
|
$sDBDriverName=Yii::app()->db->getDriverName();
|
||
|
if ($sDBDriverName=='pgsql')
|
||
|
{
|
||
|
Yii::app()->db->createCommand("SAVEPOINT {$sBookmark};")->execute();
|
||
|
}
|
||
|
}
|
||
|
|
||
|
function rollBackToTransactionBookmark($sBookmark='limesurvey')
|
||
|
{
|
||
|
$sDBDriverName=Yii::app()->db->getDriverName();
|
||
|
if ($sDBDriverName=='pgsql')
|
||
|
{
|
||
|
Yii::app()->db->createCommand("ROLLBACK TO SAVEPOINT {$sBookmark};")->execute();
|
||
|
}
|
||
|
}
|
||
|
|
||
|
|
||
|
function dropDefaultValueMSSQL($fieldname, $tablename)
|
||
|
{
|
||
|
// find out the name of the default constraint
|
||
|
// Did I already mention that this is the most suckiest thing I have ever seen in MSSQL database?
|
||
|
$dfquery ="SELECT c_obj.name AS constraint_name
|
||
|
FROM sys.sysobjects AS c_obj INNER JOIN
|
||
|
sys.sysobjects AS t_obj ON c_obj.parent_obj = t_obj.id INNER JOIN
|
||
|
sys.sysconstraints AS con ON c_obj.id = con.constid INNER JOIN
|
||
|
sys.syscolumns AS col ON t_obj.id = col.id AND con.colid = col.colid
|
||
|
WHERE (c_obj.xtype = 'D') AND (col.name = '$fieldname') AND (t_obj.name='{$tablename}')";
|
||
|
$defaultname = Yii::app()->db->createCommand($dfquery)->queryRow();
|
||
|
if ($defaultname!=false)
|
||
|
{
|
||
|
Yii::app()->db->createCommand("ALTER TABLE {$tablename} DROP CONSTRAINT {$defaultname['constraint_name']}")->execute();
|
||
|
}
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* This function drops a unique Key of an MSSQL database field by using the name of the field it lies upon and the table name
|
||
|
*
|
||
|
* @param mixed $sFieldName
|
||
|
* @param mixed $sTableName
|
||
|
*/
|
||
|
function dropUniqueKeyMSSQL($sFieldName, $sTableName)
|
||
|
{
|
||
|
$sQuery ="select TC.Constraint_Name, CC.Column_Name from information_schema.table_constraints TC
|
||
|
inner join information_schema.constraint_column_usage CC on TC.Constraint_Name = CC.Constraint_Name
|
||
|
where TC.constraint_type = 'Unique' and Column_name='{$sFieldName}' and TC.TABLE_NAME='{$sTableName}'";
|
||
|
$aUniqueKeyName = Yii::app()->db->createCommand($sQuery)->queryRow();
|
||
|
if ($aUniqueKeyName!=false)
|
||
|
{
|
||
|
Yii::app()->db->createCommand("ALTER TABLE {$sTableName} DROP CONSTRAINT {$aUniqueKeyName['Constraint_Name']}")->execute();
|
||
|
}
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
/**
|
||
|
* Returns the name of the DB Driver - used for other functions that make db specific calls
|
||
|
*
|
||
|
*/
|
||
|
function setsDBDriverName() {
|
||
|
$sDBDriverName=Yii::app()->db->getDriverName();
|
||
|
if ($sDBDriverName=='mysqli') $sDBDriverName='mysql';
|
||
|
if ($sDBDriverName=='sqlsrv' || $sDBDriverName=='dblib') $sDBDriverName='mssql';
|
||
|
return $sDBDriverName;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Special customisation because Yii is limited in its ability to handle varchar fields of lenghts other than 255 in a cross-db
|
||
|
* compatible way. see http://www.yiiframework.com/forum/index.php/topic/32289-cross-db-compatible-varchar-field-length-definitions/
|
||
|
* and http://github.com/yiisoft/yii/issues/765
|
||
|
*
|
||
|
* Note that it sets values for the config files for use later, and does not return any values.
|
||
|
* Access the set values using Yii::app()->getConfig('varchar') or Yii::app()->getConfigu('autoincrement');
|
||
|
*
|
||
|
* @param mixed $sDBDriverName The name of the db driver being used. If the parameter is forgotten, the
|
||
|
* function is capable of retrieving it itself.
|
||
|
*/
|
||
|
function setVarchar($sDBDriverName=null) {
|
||
|
|
||
|
if(!$sDBDriverName) {
|
||
|
$sDBDriverName=setsDBDriverName();
|
||
|
}
|
||
|
|
||
|
if ($sDBDriverName=='pgsql')
|
||
|
{
|
||
|
Yii::app()->setConfig('varchar',$sVarchar='character varying');
|
||
|
Yii::app()->setConfig('autoincrement', $sAutoIncrement='serial');
|
||
|
}
|
||
|
elseif ($sDBDriverName=='mssql')
|
||
|
{
|
||
|
Yii::app()->setConfig('varchar',$sVarchar='varchar');
|
||
|
Yii::app()->setConfig('autoincrement', $sAutoIncrement='integer NOT NULL IDENTITY (1,1)');
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
Yii::app()->setConfig('varchar',$sVarchar='varchar');
|
||
|
Yii::app()->setConfig('autoincrement', $sAutoIncrement='int(11) NOT NULL AUTO_INCREMENT');
|
||
|
}
|
||
|
}
|
||
|
|
||
|
function replaceTemplateJS(){
|
||
|
$usertemplaterootdir=Yii::app()->getConfig("usertemplaterootdir");
|
||
|
$clang = Yii::app()->lang;
|
||
|
if (!$usertemplaterootdir) {return false;}
|
||
|
$countstartpage=0;
|
||
|
$counterror=0;
|
||
|
$errortemplate=array();
|
||
|
if ($handle = opendir($usertemplaterootdir))
|
||
|
{
|
||
|
while (false !== ($file = readdir($handle)))
|
||
|
{
|
||
|
if ($file != "." && $file != ".." && is_dir("{$usertemplaterootdir}/{$file}")) {
|
||
|
$fname = "$usertemplaterootdir/$file/startpage.pstpl";
|
||
|
if (is_file($fname))
|
||
|
{
|
||
|
if(is_writable($fname)){
|
||
|
$fhandle = fopen($fname,"r");
|
||
|
$content = fread($fhandle,filesize($fname));
|
||
|
$content = str_replace("<script type=\"text/javascript\" src=\"{TEMPLATEURL}template.js\"></script>", "{TEMPLATEJS}", $content);
|
||
|
$fhandle = fopen($fname,"w");
|
||
|
fwrite($fhandle,$content);
|
||
|
fclose($fhandle);
|
||
|
if(strpos($content, "{TEMPLATEJS}")===false)
|
||
|
{
|
||
|
$counterror++;
|
||
|
$errortemplate[]=$file;
|
||
|
}
|
||
|
}else{
|
||
|
$counterror++;
|
||
|
}
|
||
|
$countstartpage++;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
closedir($handle);
|
||
|
}
|
||
|
if($counterror)
|
||
|
{
|
||
|
echo $clang->gT("Some user templates can not be updated, please add the placeholder {TEMPLATEJS} in your startpage.pstpl manually.");
|
||
|
echo "<br />";
|
||
|
echo $clang->gT("Template(s) to be verified :");
|
||
|
echo implode(",",$errortemplate);
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
if($countstartpage){
|
||
|
echo sprintf($clang->gT("All %s user templates updated."),$countstartpage);
|
||
|
}
|
||
|
}
|
||
|
if($counterror){
|
||
|
return false;
|
||
|
}else{
|
||
|
return $countstartpage;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Make sure all active tables have the right sized token field
|
||
|
*
|
||
|
* During a small period in the 2.0 cycle some survey tables got no
|
||
|
* token field or a token field that was too small. This patch makes
|
||
|
* sure all surveys that are not anonymous have a token field with the
|
||
|
* right size
|
||
|
*
|
||
|
* @return void
|
||
|
*/
|
||
|
function upgradeSurveyTables164()
|
||
|
{
|
||
|
$sQuery = "SELECT sid FROM {{surveys}} WHERE active='Y' and anonymized='N'";
|
||
|
$aResult = Yii::app()->db->createCommand($sQuery)->queryAll();
|
||
|
if (!$aResult) {
|
||
|
return "Database Error";
|
||
|
} else {
|
||
|
foreach ( $aResult as $sv )
|
||
|
{
|
||
|
$token = SurveyDynamic::model($sv['sid'])->getTableSchema()->getColumn('token');
|
||
|
if (is_null($token)) {
|
||
|
addColumn('{{survey_'.$sv['sid'].'}}','token','varchar(36)');
|
||
|
} elseif ($token->size < 36) {
|
||
|
alterColumn('{{survey_'.$sv['sid'].'}}','token','varchar(36)');
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|