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; + } } }