diff --git a/admin/assignsample.php b/admin/assignsample.php
index eec75a46..0a3c6cb4 100644
--- a/admin/assignsample.php
+++ b/admin/assignsample.php
@@ -79,6 +79,9 @@ $js_foot = array(
);
global $db;
+$error = "";
+
+
if (isset($_GET['questionnaire_id']) && isset($_GET['sample']) && isset($_GET['call_max']) && isset($_GET['call_attempt_max']))
{
//need to add sample to questionnaire
@@ -103,51 +106,46 @@ if (isset($_GET['questionnaire_id']) && isset($_GET['sample']) && isset($_GET['
if (isset($_GET['generatecases']))
{
- include_once("../functions/functions.operator.php");
-
- //TODO: check here if attributes available for assigning sample variables
- //if not - fail
- $db->StartTrans();
-
- $lime_sid = $db->GetOne("SELECT lime_sid FROM questionnaire WHERE questionnaire_id = '$questionnaire_id'");
- $testing = $db->GetOne("SELECT testing FROM questionnaire WHERE questionnaire_id = '$questionnaire_id'");
-
- //add limesurvey attribute for each sample var record
- $sql = "SELECT var,type
- FROM sample_import_var_restrict
+ //find the number of sample variables required
+ $sql = "SELECT count(*)
+ FROM sample_import_var_restrict
WHERE sample_import_id = '$sid'
- ORDER BY var_id ASC";
+ AND type = 1";
- $rs = $db->GetAll($sql);
+ $varsrequired = $db->GetOne($sql);
- $i = 1;
+ $addsample = false;
- $fields = array();
- $fieldcontents='';
- foreach($rs as $r)
- {
- $fields[]=array('attribute_'.$i,'C','255');
- $fieldcontents.='attribute_'.$i.'='.$r['var']."\n";
- $i++;
- }
+ if ($varsrequired > 0) {
+ $addsample = true;
+ }
+ include_once("../functions/functions.operator.php");
+
+ $db->StartTrans();
+
+ $lime_sid = $db->GetOne("SELECT lime_sid FROM questionnaire WHERE questionnaire_id = '$questionnaire_id'");
+ $testing = $db->GetOne("SELECT testing FROM questionnaire WHERE questionnaire_id = '$questionnaire_id'");
+
//generate one case for each sample record and set outcome to 41
- $sql = "SELECT sample_id
- FROM sample
- WHERE import_id = '$sid'";
+ $sql = "SELECT sample_id
+ FROM sample
+ WHERE import_id = '$sid'";
- $rs = $db->GetAll($sql);
+ $rs = $db->GetAll($sql);
- foreach($rs as $r)
- {
- set_time_limit(30);
- //TODO : update add_case function to include attributes based on var_id ASC
- add_case($r['sample_id'],$questionnaire_id,"NULL",$testing,41, true);
- }
+ foreach($rs as $r)
+ {
+ set_time_limit(30);
+ if (add_case($r['sample_id'],$questionnaire_id,"NULL",$testing,41, $addsample) === false) {
+ $error = "Could not add case - please ensure there enough additional attributes available in your Limesurvey participant table";
+ break;
+ }
+ }
- $db->CompleteTrans();
- }
+ $db->CompleteTrans();
+ }
}
if (isset($_POST['edit']))
@@ -312,8 +310,11 @@ print "";
if ($questionnaire_id != false)
{
-
- print "
+ if ($error != "") {
+ print "
$error
";
+ }
+
+ print "
". T_("Samples assigned to questionnaire") ." " . $db->GetOne("SELECT description from questionnaire WHERE questionnaire_id = $questionnaire_id") . "
";
$sql = "SELECT q.sort_order, si.description as description,si.sample_import_id,
diff --git a/functions/functions.limesurvey.php b/functions/functions.limesurvey.php
index 4502000c..c301a521 100644
--- a/functions/functions.limesurvey.php
+++ b/functions/functions.limesurvey.php
@@ -234,7 +234,6 @@ function lime_add_token($qid,$params)
return $ret;
}
-
function get_token_value($questionnaire_id,$token, $value = 'sent')
{
global $limeKey;
diff --git a/functions/functions.operator.php b/functions/functions.operator.php
index 02128c97..c3d673df 100644
--- a/functions/functions.operator.php
+++ b/functions/functions.operator.php
@@ -436,19 +436,24 @@ function add_case($sample_id,$questionnaire_id,$operator_id = "NULL",$testing =
$llastname = "";
$lemail = "";
- $lfirstname = ($db->GetOne("SELECT sv.val
+ $params = array('firstname' => "",
+ 'lastname' => "",
+ 'email' => "",
+ 'token' => $token);
+
+ $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'"));
- $llastname = ($db->GetOne("SELECT sv.val
+ $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'"));
- $lemail = ($db->GetOne("SELECT sv.val
+ $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'
@@ -457,19 +462,32 @@ function add_case($sample_id,$questionnaire_id,$operator_id = "NULL",$testing =
//include limesurvey functions
include_once(dirname(__FILE__).'/functions.limesurvey.php');
- $ret = lime_add_token($questionnaire_id,array( 'firstname' => $lfirstname,
- 'lastname' => $llastname,
- 'email' => $lemail,
- 'token' => $token));
-
- //fail to create case if can't add remote token
- if ($ret === false)
- $db->FailTrans();
-
- if ($addlimeattributes)
+ if ($addlimeattributes)
{
- //TODO: Add attributes from sample
+ $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
+ if ($ret === false) {
+ $db->FailTrans();
+ $case_id = false;
+ }
}
}