diff --git a/admin/database.php b/admin/database.php
index ea81fd868c9..cc417b52903 100644
--- a/admin/database.php
+++ b/admin/database.php
@@ -1072,6 +1072,7 @@ function get_max_question_order($gid)
'listpublic'=>$_POST['public'],
'htmlemail'=>$_POST['htmlemail'],
'tokenanswerspersistence'=>$_POST['tokenanswerspersistence'],
+ 'alloweditaftercompletion'=>$_POST['alloweditaftercompletion'],
'usecaptcha'=>$_POST['usecaptcha'],
'emailresponseto'=>trim($_POST['emailresponseto']),
'emailnotificationto'=>trim($_POST['emailnotificationto']),
@@ -1373,6 +1374,7 @@ function get_max_question_order($gid)
'public'=>$_POST['public'],
'htmlemail'=>$_POST['htmlemail'],
'tokenanswerspersistence'=>$_POST['tokenanswerspersistence'],
+ 'alloweditaftercompletion'=>$_POST['alloweditaftercompletion'],
'usecaptcha'=>$_POST['usecaptcha'],
'publicstatistics'=>$_POST['publicstatistics'],
'publicgraphs'=>$_POST['publicgraphs'],
diff --git a/admin/editsurveysettings.php b/admin/editsurveysettings.php
index d9365a438f8..51ddb8e8e71 100644
--- a/admin/editsurveysettings.php
+++ b/admin/editsurveysettings.php
@@ -51,6 +51,7 @@
$esrow['ipaddr'] = 'N';
$esrow['refurl'] = 'N';
$esrow['tokenanswerspersistence'] = 'N';
+ $esrow['alloweditaftercompletion'] = 'N';
$esrow['assesments'] = 'N';
$esrow['startdate'] = '';
$esrow['savetimings'] = 'N';
@@ -866,6 +867,16 @@
$editsurvey .= ">".$clang->gT("No")."\n"
. "\n";
+ // Allow editing answers after completion
+ $editsurvey .= "
\n"
+ . "\n";
// Save timings
$editsurvey .= "\n";
diff --git a/admin/install/create-mssql.sql b/admin/install/create-mssql.sql
index c2abedb3c97..b4fe6972102 100644
--- a/admin/install/create-mssql.sql
+++ b/admin/install/create-mssql.sql
@@ -292,6 +292,7 @@ CREATE TABLE [prefix_surveys] (
[allowjumps] char(1) default 'N',
[navigationdelay] tinyint default '0',
[nokeyboard] char(1) default 'N',
+ [alloweditaftercompletion] char(1) default 'N',
PRIMARY KEY ([sid])
)
@@ -318,11 +319,11 @@ CREATE TABLE [prefix_surveys_languagesettings] (
[surveyls_email_register] TEXT NULL,
[surveyls_email_confirm_subj] VARCHAR(255) NULL,
[surveyls_email_confirm] TEXT NULL,
+ [surveyls_dateformat] INT NOT NULL DEFAULT 1,
[email_admin_notification_subj] VARCHAR(255) NULL,
[email_admin_notification] TEXT NULL,
[email_admin_responses_subj] VARCHAR(255) NULL,
[email_admin_responses] TEXT NULL,
- [surveyls_dateformat] INT NOT NULL DEFAULT 1,
[surveyls_numberformat] INT NOT NULL DEFAULT 0,
PRIMARY KEY ([surveyls_survey_id],[surveyls_language])
)
diff --git a/admin/install/create-mssqlnative.sql b/admin/install/create-mssqlnative.sql
index 5d2f9f0fa94..ac402fe60f8 100644
--- a/admin/install/create-mssqlnative.sql
+++ b/admin/install/create-mssqlnative.sql
@@ -301,6 +301,7 @@ CREATE TABLE [prefix_surveys] (
[allowjumps] char(1) default 'N',
[navigationdelay] tinyint default '0',
[nokeyboard] char(1) default 'N',
+ [alloweditaftercompletion] char(1) default 'N',
PRIMARY KEY ([sid])
)
@@ -327,11 +328,11 @@ CREATE TABLE [prefix_surveys_languagesettings] (
[surveyls_email_register] varchar(max) NULL,
[surveyls_email_confirm_subj] VARCHAR(255) NULL,
[surveyls_email_confirm] varchar(max) NULL,
+ [surveyls_dateformat] INT NOT NULL DEFAULT 1,
[email_admin_notification_subj] VARCHAR(255) NULL,
[email_admin_notification] varchar(max) NULL,
[email_admin_responses_subj] VARCHAR(255) NULL,
[email_admin_responses] varchar(max) NULL,
- [surveyls_dateformat] INT NOT NULL DEFAULT 1,
[surveyls_numberformat] INT NOT NULL DEFAULT 0,
PRIMARY KEY ([surveyls_survey_id],[surveyls_language])
)
@@ -423,7 +424,6 @@ CREATE TABLE [prefix_templates] (
);
-
--
-- Create failed_login_attempts
--
diff --git a/admin/install/create-mysql.sql b/admin/install/create-mysql.sql
index b17f024724f..cdaa1ee5333 100644
--- a/admin/install/create-mysql.sql
+++ b/admin/install/create-mysql.sql
@@ -281,6 +281,7 @@ CREATE TABLE `prefix_surveys` (
`allowjumps` char(1) default 'N',
`navigationdelay` tinyint(2) default '0',
`nokeyboard` char(1) default 'N',
+ `alloweditaftercompletion` char(1) default 'N',
PRIMARY KEY(`sid`)
) ENGINE=$databasetabletype CHARACTER SET utf8 COLLATE utf8_unicode_ci;
@@ -306,11 +307,11 @@ CREATE TABLE `prefix_surveys_languagesettings` (
`surveyls_email_confirm_subj` VARCHAR(255) NULL,
`surveyls_email_confirm` TEXT NULL,
`surveyls_dateformat` INT UNSIGNED NOT NULL DEFAULT 1,
- `surveyls_numberformat` INT NOT NULL DEFAULT 0,
`email_admin_notification_subj` VARCHAR(255) NULL,
`email_admin_notification` TEXT NULL,
`email_admin_responses_subj` VARCHAR(255) NULL,
`email_admin_responses` TEXT NULL,
+ `surveyls_numberformat` INT NOT NULL DEFAULT 0,
PRIMARY KEY (`surveyls_survey_id`, `surveyls_language`)
) ENGINE = $databasetabletype CHARACTER SET utf8 COLLATE utf8_unicode_ci;
diff --git a/admin/install/create-postgres.sql b/admin/install/create-postgres.sql
index b93cab28200..4d4c6e4cf87 100644
--- a/admin/install/create-postgres.sql
+++ b/admin/install/create-postgres.sql
@@ -305,7 +305,8 @@ CREATE TABLE prefix_surveys (
showprogress character(1) DEFAULT 'N'::bpchar,
allowjumps character(1) DEFAULT 'N'::bpchar,
navigationdelay smallint DEFAULT '0',
- nokeyboard character(1) DEFAULT 'N'::bpchar
+ nokeyboard character(1) DEFAULT 'N'::bpchar,
+ alloweditaftercompletion character(1) DEFAULT 'N'::bpchar
);
ALTER TABLE ONLY prefix_surveys ADD CONSTRAINT prefix_surveys_pkey PRIMARY KEY (sid);
@@ -331,11 +332,11 @@ CREATE TABLE prefix_surveys_languagesettings (
surveyls_email_register text,
surveyls_email_confirm_subj character varying(255),
surveyls_email_confirm text,
+ surveyls_dateformat integer DEFAULT 1 NOT NULL,
email_admin_notification_subj character varying(255),
email_admin_notification text,
email_admin_responses_subj character varying(255),
email_admin_responses text,
- surveyls_dateformat integer DEFAULT 1 NOT NULL,
surveyls_numberformat integer NOT NULL DEFAULT 1
);
diff --git a/admin/update/upgrade-mssql.php b/admin/update/upgrade-mssql.php
index 9870581c556..4f863feceea 100644
--- a/admin/update/upgrade-mssql.php
+++ b/admin/update/upgrade-mssql.php
@@ -424,8 +424,9 @@ function db_upgrade($oldversion) {
modify_database("", "ALTER TABLE [prefix_surveys] ADD showwelcome CHAR(1) NULL default 'Y'"); echo $modifyoutput; flush();
modify_database("", "ALTER TABLE [prefix_surveys] ADD showprogress CHAR(1) NULL default 'Y'"); echo $modifyoutput; flush();
modify_database("", "ALTER TABLE [prefix_surveys] ADD allowjumps CHAR(1) NULL default 'N'"); echo $modifyoutput; flush();
- modify_database("", "ALTER TABLE [prefix_surveys] ADD navigationdelay tinyint default '0'"); echo $modifyoutput; flush();
+ modify_database("", "ALTER TABLE [prefix_surveys] ADD navigationdelay tinyint NOT NULL default '0'"); echo $modifyoutput; flush();
modify_database("", "ALTER TABLE [prefix_surveys] ADD nokeyboard CHAR(1) NULL default 'N'"); echo $modifyoutput; flush();
+ modify_database("", "ALTER TABLE [prefix_surveys] ADD alloweditaftercompletion CHAR(1) NULL default 'N'"); echo $modifyoutput; flush();
modify_database("", "CREATE TABLE [prefix_survey_permissions] (
[sid] INT NOT NULL,
[uid] INT NOT NULL,
@@ -464,21 +465,23 @@ function db_upgrade($oldversion) {
modify_database("","EXEC sp_rename 'prefix_surveys.private','anonymized'"); echo $modifyoutput; flush();
modify_database("","ALTER TABLE [prefix_surveys] ALTER COLUMN [anonymized] char(1) NOT NULL default 'N';"); echo $modifyoutput; flush();
-
-
- modify_database("", "UPDATE [prefix_settings_global] SET stg_value='145' WHERE stg_name='DBVersion'"); echo $modifyoutput; flush();
modify_database("", "CREATE TABLE [prefix_failed_login_attempts] (
[id] int(11) NOT NULL AUTO_INCREMENT,
[ip] varchar(37) NOT NULL,
[last_attempt] varchar(20) NOT NULL,
[number_attempts] int(11) NOT NULL,
- PRIMARY KEY ([id]));"); echo $modifyoutput; flush();
+ PRIMARY KEY ([id])
+ );"); echo $modifyoutput; flush();
+
+ modify_database("", "ALTER TABLE [prefix_surveys_languagesettings] ADD [surveyls_numberformat] INT default 0 NOT NULL"); echo $modifyoutput; flush();
+
+
+ modify_database("", "UPDATE [prefix_settings_global] SET stg_value='145' WHERE stg_name='DBVersion'"); echo $modifyoutput; flush();
+
}
- modify_database("", "ALTER TABLE [prefix_surveys_languagesettings] ADD [surveyls_numberformat] int(11) default 0 NOT NULL AFTER [surveyls_dateformat]"); echo $modifyoutput; flush();
-
echo '
Database update finished ('.date('Y-m-d H:i:s').')
';
return true;
}
diff --git a/admin/update/upgrade-mssqlnative.php b/admin/update/upgrade-mssqlnative.php
index 271375fc712..a31f3660772 100644
--- a/admin/update/upgrade-mssqlnative.php
+++ b/admin/update/upgrade-mssqlnative.php
@@ -423,6 +423,7 @@ function db_upgrade($oldversion) {
modify_database("", "ALTER TABLE [prefix_surveys] ADD allowjumps CHAR(1) NULL default 'N'"); echo $modifyoutput; flush();
modify_database("", "ALTER TABLE [prefix_surveys] ADD navigationdelay tinyint NOT NULL default '0'"); echo $modifyoutput; flush();
modify_database("", "ALTER TABLE [prefix_surveys] ADD nokeyboard CHAR(1) NULL default 'N'"); echo $modifyoutput; flush();
+ modify_database("", "ALTER TABLE [prefix_surveys] ADD alloweditaftercompletion CHAR(1) NULL default 'N'"); echo $modifyoutput; flush();
modify_database("", "CREATE TABLE [prefix_survey_permissions] (
[sid] INT NOT NULL,
[uid] INT NOT NULL,
@@ -461,20 +462,22 @@ function db_upgrade($oldversion) {
modify_database("","EXEC sp_rename 'prefix_surveys.private','anonymized'"); echo $modifyoutput; flush();
modify_database("","ALTER TABLE [prefix_surveys] ALTER COLUMN [anonymized] char(1) NOT NULL default 'N';"); echo $modifyoutput; flush();
+
+ modify_database("", "CREATE TABLE [prefix_failed_login_attempts] (
+ [id] int(11) NOT NULL AUTO_INCREMENT,
+ [ip] varchar(37) NOT NULL,
+ [last_attempt] varchar(20) NOT NULL,
+ [number_attempts] int(11) NOT NULL,
+ PRIMARY KEY ([id])
+ );"); echo $modifyoutput; flush();
+
+ modify_database("", "ALTER TABLE [prefix_surveys_languagesettings] ADD [surveyls_numberformat] INT default 0 NOT NULL"); echo $modifyoutput; flush();
modify_database("", "UPDATE [prefix_settings_global] SET stg_value='145' WHERE stg_name='DBVersion'"); echo $modifyoutput; flush();
- modify_database("", "CREATE TABLE [prefix_failed_login_attempts] (
- [id] int(11) NOT NULL AUTO_INCREMENT,
- [ip] varchar(37) NOT NULL,
- [last_attempt] varchar(20) NOT NULL,
- [number_attempts] int(11) NOT NULL,
- PRIMARY KEY ([id])
- );"); echo $modifyoutput; flush();
}
- modify_database("", "ALTER TABLE [prefix_surveys_languagesettings] ADD [surveyls_numberformat] int(11) default 0 NOT NULL AFTER [surveyls_dateformat]"); echo $modifyoutput; flush();
echo '
Database update finished ('.date('Y-m-d H:i:s').')
';
return true;
diff --git a/admin/update/upgrade-mysql.php b/admin/update/upgrade-mysql.php
index 3402e60bf78..a782ae88567 100644
--- a/admin/update/upgrade-mysql.php
+++ b/admin/update/upgrade-mysql.php
@@ -408,6 +408,7 @@ function db_upgrade($oldversion) {
modify_database("", "ALTER TABLE `prefix_surveys` ADD `allowjumps` char(1) default 'N'"); echo $modifyoutput; flush();
modify_database("", "ALTER TABLE `prefix_surveys` ADD `navigationdelay` tinyint(2) default '0'"); echo $modifyoutput; flush();
modify_database("", "ALTER TABLE `prefix_surveys` ADD `nokeyboard` char(1) default 'N'"); echo $modifyoutput; flush();
+ modify_database("", "ALTER TABLE `prefix_surveys` ADD `alloweditaftercompletion` char(1) default 'N'"); echo $modifyoutput; flush();
modify_database("", "CREATE TABLE `prefix_survey_permissions` (
`sid` int(10) unsigned NOT NULL,
`uid` int(10) unsigned NOT NULL,
@@ -562,9 +563,7 @@ function db_upgrade($oldversion) {
modify_database("","ALTER TABLE `prefix_user_in_groups` DROP INDEX `user_in_groups_idx1`"); echo $modifyoutput; flush();
modify_database("","ALTER TABLE `prefix_user_in_groups` ADD PRIMARY KEY (`ugid`, `uid`)"); echo $modifyoutput; flush();
-
- modify_database("", "UPDATE `prefix_settings_global` SET `stg_value`='145' WHERE stg_name='DBVersion'"); echo $modifyoutput; flush();
-
+ modify_database("", "ALTER TABLE `prefix_surveys_languagesettings` ADD `surveyls_numberformat` int(11) NOT NULL DEFAULT 0 AFTER `surveyls_dateformat`"); echo $modifyoutput; flush();
modify_database("", "CREATE TABLE `prefix_failed_login_attempts` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`ip` varchar(37) NOT NULL,
@@ -573,12 +572,9 @@ function db_upgrade($oldversion) {
PRIMARY KEY (`id`)
) ENGINE=$databasetabletype CHARACTER SET utf8 COLLATE utf8_unicode_ci;"); echo $modifyoutput; flush();
-
-
-
+ modify_database("", "UPDATE `prefix_settings_global` SET `stg_value`='145' WHERE stg_name='DBVersion'"); echo $modifyoutput; flush();
}
- modify_database("", "ALTER TABLE `prefix_surveys_languagesettings` ADD `surveyls_numberformat` int(11) NOT NULL DEFAULT 0 AFTER `surveyls_dateformat`"); echo $modifyoutput; flush();
echo '
Database update finished ('.date('Y-m-d H:i:s').')
';
return true;
diff --git a/admin/update/upgrade-postgres.php b/admin/update/upgrade-postgres.php
index 14ed2699a4c..05e0cb4734b 100644
--- a/admin/update/upgrade-postgres.php
+++ b/admin/update/upgrade-postgres.php
@@ -250,6 +250,7 @@ function db_upgrade($oldversion) {
modify_database("", "ALTER TABLE prefix_surveys ADD allowjumps CHAR(1) NULL default 'N'"); echo $modifyoutput; flush();
modify_database("", "ALTER TABLE prefix_surveys ADD navigationdelay smallint NOT NULL default '0'"); echo $modifyoutput; flush();
modify_database("", "ALTER TABLE prefix_surveys ADD nokeyboard char(1) default 'N'"); echo $modifyoutput; flush();
+ modify_database("", "ALTER TABLE prefix_surveys ADD alloweditaftercompletion char(1) default 'N'"); echo $modifyoutput; flush();
modify_database("", "CREATE TABLE prefix_survey_permissions (
sid integer DEFAULT 0 NOT NULL,
uid integer DEFAULT 0 NOT NULL,
@@ -284,9 +285,6 @@ function db_upgrade($oldversion) {
modify_database("","ALTER TABLE prefix_surveys RENAME COLUMN private TO anonymized;"); echo $modifyoutput; flush();
modify_database("","ALTER TABLE prefix_surveys ALTER COLUMN anonymized TYPE char(1) Default 'N' NOT NULL ;"); echo $modifyoutput; flush();
-
- modify_database("", "UPDATE prefix_settings_global SET stg_value='145' WHERE stg_name='DBVersion'"); echo $modifyoutput; flush();
-
modify_database("", "CREATE TABLE prefix_failed_login_attempts (
id integer NOT NULL AUTO_INCREMENT,
ip character varying(37) NOT NULL,
@@ -294,10 +292,10 @@ function db_upgrade($oldversion) {
number_attempts integer NOT NULL
);"); echo $modifyoutput; flush();
modify_database("", "ALTER TABLE ONLY prefix_failed_login_attempts ADD CONSTRAINT prefix_failed_login_attempts_pkey PRIMARY KEY (\"id\");"); echo $modifyoutput; flush();
-
-
+ modify_database("", "ALTER TABLE prefix_surveys_languagesettings ADD surveyls_numberformat integer default 0 NOT NULL"); echo $modifyoutput; flush();
+
+ modify_database("", "UPDATE prefix_settings_global SET stg_value='145' WHERE stg_name='DBVersion'"); echo $modifyoutput; flush();
}
- modify_database("", "ALTER TABLE prefix_surveys_languagesettings ADD surveyls_numberformat integer default 0 NOT NULL AFTER surveyls_dateformat"); echo $modifyoutput; flush();
echo '
Database update finished ('.date('Y-m-d H:i:s').')
';
diff --git a/index.php b/index.php
index 2e5edda040d..5ff1adf20d8 100644
--- a/index.php
+++ b/index.php
@@ -655,8 +655,12 @@
{
//check if tokens actually haven't been already used
$areTokensUsed = usedTokens(db_quote(trim(strip_tags(returnglobal('token')))));
-
- $tkquery = "SELECT * FROM ".db_table_name('tokens_'.$surveyid)." WHERE token='".db_quote($token)."' AND (completed = 'N' or completed='')";
+ // check if token actually does exist
+ // check also if it is allowed to change survey after completion
+ if ($thissurvey['alloweditaftercompletion'] == 'Y' ) {
+ $tkquery = "SELECT * FROM ".db_table_name('tokens_'.$surveyid)." WHERE token='".db_quote($token)."' ";
+ } else {
+ $tkquery = "SELECT * FROM ".db_table_name('tokens_'.$surveyid)." WHERE token='".db_quote($token)."' AND (completed = 'N' or completed='')";
$tkresult = db_execute_num($tkquery); //Checked
$tokendata = $tkresult->FetchRow();
if ($tkresult->RecordCount()==0 || $areTokensUsed)
@@ -681,7 +685,13 @@
}
if ($tokensexist == 1 && isset($token) && $token && db_tables_exist($dbprefix.'tokens_'.$surveyid)) //check if token is in a valid time frame
{
+
+ // check also if it is allowed to change survey after completion
+ if ($thissurvey['alloweditaftercompletion'] == 'Y' ) {
+ $tkquery = "SELECT * FROM ".db_table_name('tokens_'.$surveyid)." WHERE token='".db_quote($token)."' ";
+} else {
$tkquery = "SELECT * FROM ".db_table_name('tokens_'.$surveyid)." WHERE token='".db_quote($token)."' AND (completed = 'N' or completed='')";
+}
$tkresult = db_execute_assoc($tkquery); //Checked
$tokendata = $tkresult->FetchRow();
if ((trim($tokendata['validfrom'])!='' && $tokendata['validfrom']>date_shift(date("Y-m-d H:i:s"), "Y-m-d H:i:s", $timeadjust)) ||
@@ -922,12 +932,12 @@ function loadanswers()
$clienttoken=$value;
$token=$value;
}
- elseif ($column == "saved_thisstep")
+ elseif ($column == "saved_thisstep" && $thissurvey['alloweditaftercompletion'] != 'Y' )
{
$_SESSION['step']=$value;
$thisstep=$value-1;
}
- elseif ($column =='lastpage' && isset($_GET['token']))
+ elseif ($column =='lastpage' && isset($_GET['token']) && $thissurvey['alloweditaftercompletion'] != 'Y' )
{
if ($value<1) $value=1;
$_SESSION['step']=$value;
@@ -2409,7 +2419,13 @@ function buildsurveysession()
//check if tokens actually haven't been already used
$areTokensUsed = usedTokens(db_quote(trim(strip_tags(returnglobal('token')))));
//check if token actually does exist
- $tkquery = "SELECT COUNT(*) FROM ".db_table_name('tokens_'.$surveyid)." WHERE token='".db_quote(trim(strip_tags(returnglobal('token'))))."' AND (completed = 'N' or completed='')";
+ // check also if it is allowed to change survey after completion (patch by johannes.klug@silverage.de)
+ if ($thissurvey['alloweditaftercompletion'] == 'Y' ) {
+ $tkquery = "SELECT COUNT(*) FROM ".db_table_name('tokens_'.$surveyid)." WHERE token='".db_quote(trim(strip_tags(returnglobal('token'))))."' ";
+ } else {
+ $tkquery = "SELECT COUNT(*) FROM ".db_table_name('tokens_'.$surveyid)." WHERE token='".db_quote(trim(strip_tags(returnglobal('token'))))."' AND (completed = 'N' or completed='')";
+ }
+
$tkresult = db_execute_num($tkquery); //Checked
list($tkexist) = $tkresult->FetchRow();
if (!$tkexist || $areTokensUsed)