diff --git a/CHANGELOG b/CHANGELOG
index 1147f857..4cb807d3 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -1,3 +1,22 @@
+queXS 2.1.0 - Changes since 2.0.1
+
+Database changes required:
+
+CREATE TABLE IF NOT EXISTS `remote_sample_var` (
+ `id` int(11) NOT NULL AUTO_INCREMENT,
+ `var_id` bigint(20) NOT NULL,
+ `questionnaire_id` bigint(20) NOT NULL,
+ `field` text COLLATE utf8_unicode_ci NOT NULL,
+ PRIMARY KEY (`id`),
+ UNIQUE KEY `var_id` (`var_id`,`questionnaire_id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=1 ;
+
+INSERT INTO remote_sample_var (var_id,questionnaire_id,field)
+SELECT sv.var_id,qs.questionnaire_id,CASE WHEN sv.type = 6 THEN 'firstname' WHEN sv.type = 7 THEN 'lastname' WHEN sv.type = 8 THEN 'email' WHEN sv.type = 9 THEN 'token' END
+FROM questionnaire_sample as qs
+JOIN sample_import_var_restrict as sv ON (sv.sample_import_id = qs.sample_import_id AND sv.type IN (6,7,8,9));
+
+
queXS 2.0.1 - Changes since 2.0.0
This release includes fixes ported from the 1.x branch
diff --git a/admin/assignsample.php b/admin/assignsample.php
index 9f8b6349..bdb6b2e0 100644
--- a/admin/assignsample.php
+++ b/admin/assignsample.php
@@ -103,6 +103,22 @@ if (isset($_GET['questionnaire_id']) && isset($_GET['sample']) && isset($_GET['
$db->Execute($sql);
+ foreach($_GET as $key => $val) {
+ if (substr($key,0,2) == "sv") {
+ $varid = bigintval(substr($key,2));
+ if (empty($val)) {
+ $sql = "DELETE FROM remote_sample_var
+ WHERE questionnaire_id = $questionnaire_id
+ AND var_id = $varid";
+ } else {
+ $sql = "INSERT INTO remote_sample_var (questionnaire_id,var_id,field)
+ VALUES ($questionnaire_id,$varid," . $db->qstr($val) . ")
+ ON DUPLICATE KEY UPDATE field = " . $db->qstr($val);
+ }
+ $db->Execute($sql);
+ }
+ }
+
if (isset($_GET['generatecases']))
{
//find the number of sample variables required
@@ -210,7 +226,23 @@ if (isset($_POST['edit']))
WHERE questionnaire_id = '$questionnaire_id'
AND sample_import_id = '$sid'";
- $db->Execute($sql);
+ $db->Execute($sql);
+
+ foreach($_POST as $key => $val) {
+ if (substr($key,0,2) == "sv") {
+ $varid = bigintval(substr($key,2));
+ if (empty($val)) {
+ $sql = "DELETE FROM remote_sample_var
+ WHERE questionnaire_id = $questionnaire_id
+ AND var_id = $varid";
+ } else {
+ $sql = "INSERT INTO remote_sample_var (questionnaire_id,var_id,field)
+ VALUES ($questionnaire_id,$varid," . $db->qstr($val) . ")
+ ON DUPLICATE KEY UPDATE field = " . $db->qstr($val);
+ }
+ $db->Execute($sql);
+ }
+ }
}
@@ -245,6 +277,22 @@ if (isset($_GET['questionnaire_id']) && isset($_GET['rsid']))
" . T_("Sample") . ": " . $qs['description'] . "
";
+ //Get list of attributes in Limesurvey and how they link to this sample
+ //
+ $sql = "SELECT sv.var_id,sv.var,sv.type,rv.field
+ FROM sample_import_var_restrict as sv
+ LEFT JOIN remote_sample_var as rv ON (rv.var_id = sv.var_id AND rv.questionnaire_id = $questionnaire_id)
+ WHERE sv.sample_import_id = $sid";
+
+ $svars = $db->GetAll($sql);
+
+ include_once("../functions/functions.limesurvey.php");
+
+ $attributes = lime_get_token_attributes($questionnaire_id);
+
+
+
+
$allownew = $selected ="";
if ($qs['random_select'] == 1)
$selected = "checked=\"checked\"";
@@ -268,7 +316,33 @@ if (isset($_GET['questionnaire_id']) && isset($_GET['rsid']))
-
+
+ " . T_("Sample variables to copy to Limesurvey participant table") . "";
+
+ print "
" . T_("Sample variable") . "
" . T_("Limesurvey participant variable") . "
";
+ foreach($svars as $sv) {
+ print "
";
+ print "
";
+ }
+ print "
"
+
+?>
+
@@ -417,12 +491,35 @@ if ($questionnaire_id != false)
if (!empty($qs))
{
print "";
- print "
" . T_("Add a sample to this questionnaire:") . "
";
+ print "
" . T_("Add a sample to this questionnaire:") . "
";
+
+ $sample_import_id = $qs[0]['sample_import_id'];
+ if (isset($_GET['sample'])) {
+ $sample_import_id = bigintval($_GET['sample']);
+ }
+
+ //Get list of attributes in Limesurvey and how they link to this sample
+ //
+ $sql = "SELECT sv.var_id,sv.var,sv.type,rv.field
+ FROM sample_import_var_restrict as sv
+ LEFT JOIN remote_sample_var as rv ON (rv.var_id = sv.var_id AND rv.questionnaire_id = $questionnaire_id)
+ WHERE sv.sample_import_id = $sample_import_id";
+
+ $svars = $db->GetAll($sql);
+
+ include_once("../functions/functions.limesurvey.php");
+
+ $attributes = lime_get_token_attributes($questionnaire_id);
+
+ if ($attributes == false) {
+ print "
" . T_("Unable to access token/participants table in Limesurvey. Please confirm that this survey has a participant table created.") . "
";
+ } else {
+
?>
- add_participants($limeKey,$lime_id,array(array('firstname'=>$dtoken,'lastname'=>$dtoken)));
+ } catch (Exception $e) {
+ limerpc_close();
+ return false;
+ }
+
+ if (isset($np[0]['tid'])) {
+ $ret = array_keys($np[0]); //array of data
+ $limeRPC->delete_participants($limeKey,$lime_id,array($np[0]['tid']));
+ }
+ }
+
+ limerpc_close();
+ return $ret;
+}
function lime_add_token($qid,$params)
{
diff --git a/functions/functions.operator.php b/functions/functions.operator.php
index 28500b26..d5470e96 100644
--- a/functions/functions.operator.php
+++ b/functions/functions.operator.php
@@ -447,55 +447,28 @@ function add_case($sample_id,$questionnaire_id,$operator_id = "NULL",$testing =
if ($lime_sid)
{
- $lfirstname = "";
- $llastname = "";
- $lemail = "";
+ $params = array('token' => $token);
- $params = array('firstname' => "",
- 'lastname' => "",
- 'email' => "",
- 'token' => $token);
+ //get remote sample fields for this questionaire/sample only
+ $sql = "SELECT rv.var_id,rv.field
+ FROM remote_sample_var as rv
+ JOIN sample as s ON (s.sample_id = $sample_id)
+ JOIN sample_import_var_restrict as sv ON (s.import_id = sv.sample_import_id AND rv.var_id = sv.var_id)
+ WHERE questionnaire_id = $questionnaire_id";
- $params['firstname'] = ($db->GetOne("SELECT sv.val
- FROM sample_var as sv, sample_import_var_restrict as s
- WHERE sv.var_id = s.var_id
- AND sv.sample_id = '$sample_id'
- AND s.type = '6'"));
+ $ps = $db->GetAll($sql);
- $params['lastname'] = ($db->GetOne("SELECT sv.val
- FROM sample_var as sv, sample_import_var_restrict as s
- WHERE sv.var_id = s.var_id
- AND sv.sample_id = '$sample_id'
- AND s.type = '7'"));
-
- $params['email'] = ($db->GetOne("SELECT sv.val
- FROM sample_var as sv, sample_import_var_restrict as s
- WHERE sv.var_id = s.var_id
- AND sv.sample_id = '$sample_id'
- AND s.type = '8'"));
+ //copy across all selected variables to matching Limesurvey fields
+ foreach($ps as $p) {
+ $params[$p['field']] = $db->GetOne("SELECT val
+ FROM sample_var
+ WHERE var_id = {$p['var_id']}
+ AND sample_id = '$sample_id'");
+ }
//include limesurvey functions
include_once(dirname(__FILE__).'/functions.limesurvey.php');
- if ($addlimeattributes)
- {
- $sql = "SELECT sv.val
- FROM sample_var as sv, sample_import_var_restrict as s
- WHERE sv.var_id = s.var_id
- AND sv.sample_id = '$sample_id'
- AND s.type = '1'
- ORDER BY s.var_id ASC";
-
- $vars = $db->GetAll($sql);
-
- $att = 1;
-
- foreach($vars as $v) {
- $params['attribute_' . $att] = $v['val'];
- $att++;
- }
- }
-
$ret = lime_add_token($questionnaire_id,$params);
//fail to create case if can't add remote token