diff --git a/functions/functions.limesurvey.php b/functions/functions.limesurvey.php index 6327c4bb..fee499c5 100644 --- a/functions/functions.limesurvey.php +++ b/functions/functions.limesurvey.php @@ -283,11 +283,11 @@ function validate_email($email){ * @param int $questionnaire_id The questionnaire ID * @param int $sample_import_id The sample import ID * @param string $val The value to compare - * @param string $var The variable to compare + * --- changed @param string $var the variable to compare + * to @param string $var_id - ID for variable to compare * @return bool|int False if failed, otherwise the number of completions - * */ -function limesurvey_quota_replicate_completions($lime_sid,$questionnaire_id,$sample_import_id,$val,$var) +function limesurvey_quota_replicate_completions($lime_sid,$questionnaire_id,$sample_import_id,$val,$var_id) { global $db; @@ -305,7 +305,7 @@ function limesurvey_quota_replicate_completions($lime_sid,$questionnaire_id,$sam FROM " . LIME_PREFIX . "survey_$lime_sid as s JOIN `case` as c ON (c.questionnaire_id = '$questionnaire_id') JOIN `sample` as sam ON (c.sample_id = sam.sample_id AND sam.import_id = '$sample_import_id') - JOIN `sample_var` as sv ON (sv.sample_id = sam.sample_id AND sv.var LIKE '$var' AND sv.val LIKE '$val') + JOIN `sample_var` as sv ON (sv.sample_id = sam.sample_id AND sv.var_id = '$var_id' AND sv.val LIKE '$val') WHERE s.submitdate IS NOT NULL AND s.token = c.token"; @@ -355,14 +355,15 @@ function limesurvey_quota_match($lime_sgqa,$lime_sid,$case_id,$value,$comparison * @param int $lime_sid The Limesurvey survey id * @param int $case_id The case id * @param string $val The sample value to compare - * @param string $var The sample variable to compare + * --- changed @param string $var the variable to compare + * to @param string $var_id - ID for variable to compare * @param int $sample_import_id The sample import id we are looking at * * @return bool|int False if failed, otherwise 1 if matched, 0 if doesn't * @author Adam Zammit * @since 2012-04-30 */ -function limesurvey_quota_replicate_match($lime_sid,$case_id,$val,$var,$sample_import_id) +function limesurvey_quota_replicate_match($lime_sid,$case_id,$val,$var_id,$sample_import_id) { global $db; @@ -370,7 +371,7 @@ function limesurvey_quota_replicate_match($lime_sid,$case_id,$val,$var,$sample_i FROM " . LIME_PREFIX . "survey_$lime_sid as s JOIN `case` as c ON (c.case_id = '$case_id') JOIN `sample` as sam ON (c.sample_id = sam.sample_id and sam.import_id = $sample_import_id) - JOIN `sample_var` as sv ON (sv.sample_id = sam.sample_id AND sv.var LIKE '$var' AND sv.val LIKE '$val') + JOIN `sample_var` as sv ON (sv.sample_id = sam.sample_id AND sv.var_id = '$var_id' AND sv.val LIKE '$val') WHERE s.token = c.token"; $rs = $db->GetRow($sql); diff --git a/include/limesurvey/admin/exportresults.php b/include/limesurvey/admin/exportresults.php index ef0ebcb5..aff094f5 100644 --- a/include/limesurvey/admin/exportresults.php +++ b/include/limesurvey/admin/exportresults.php @@ -267,13 +267,13 @@ $quexsfilterstate = questionnaireSampleFilterstate(); ."\n"; - $sql = "SELECT sv.var,sv.val - FROM `questionnaire` as q, questionnaire_sample as qs, sample as s, sample_var as sv - WHERE q.lime_sid = $surveyid + $sql = "SELECT sivr.var,sv.val + FROM `questionnaire` as q, questionnaire_sample as qs, sample_var as sv, `sample_import_var_restrict` as sivr + WHERE q.lime_sid = $surveyid AND qs.questionnaire_id = q.questionnaire_id - AND s.import_id = qs.sample_import_id - AND sv.sample_id = s.sample_id - GROUP BY qs.sample_import_id,sv.var"; + AND sivr.sample_import_id = qs.sample_import_id + AND sv.var_id = sivr.var_id + GROUP BY qs.sample_import_id,sivr.var"; $queXSrs = $connect->GetAssoc($sql); @@ -305,13 +305,13 @@ if ($tokenTableExists) { $aTokenFieldNames=GetTokenFieldsAndNames($surveyid,false,true); - $sql = "SELECT sv.var,sv.val - FROM `questionnaire` as q, questionnaire_sample as qs, sample as s, sample_var as sv - WHERE q.lime_sid = $surveyid + $sql = "SELECT sivr.var,sv.val + FROM `questionnaire` as q, questionnaire_sample as qs, sample_var as sv, `sample_import_var_restrict` as sivr + WHERE q.lime_sid = $surveyid AND qs.questionnaire_id = q.questionnaire_id - AND s.import_id = qs.sample_import_id - AND sv.sample_id = s.sample_id - GROUP BY qs.sample_import_id,sv.var"; + AND sivr.sample_import_id = qs.sample_import_id + AND sv.var_id = sivr.var_id + GROUP BY qs.sample_import_id,sivr.var"; $attributeFields = $connect->GetAssoc($sql); @@ -554,10 +554,11 @@ if ($tokenTableExists && $thissurvey['anonymized']=='N' && isset($_POST['attribu if (in_array("SAMPLE:$attr_name",$_POST['attribute_select'])) { $dquery .= ", ( SELECT sv.val - FROM sample_var as sv, `case` as c3 + FROM sample_var as sv, `case` as c3,`sample_import_var_restrict` as sivr WHERE c3.token = {$dbprefix}survey_$surveyid.token AND c3.sample_id = sv.sample_id - AND sv.var LIKE '$attr_name') as attribute_$i "; + AND sivr.var_id = sv.var_id + AND sivr.var LIKE '$attr_name') as attribute_$i "; $attributeFieldAndNames["attribute_$i"] = $attr_name; @@ -1362,4 +1363,4 @@ function strip_tags_full($string) { $string=str_replace('-oth-','',$string); return FlattenText($string,true,'UTF-8',false); } -?> +?> \ No newline at end of file diff --git a/include/limesurvey/classes/expressions/LimeExpressionManager.php b/include/limesurvey/classes/expressions/LimeExpressionManager.php index 5d0709d5..4e55d0a0 100644 --- a/include/limesurvey/classes/expressions/LimeExpressionManager.php +++ b/include/limesurvey/classes/expressions/LimeExpressionManager.php @@ -3422,17 +3422,19 @@ if ($use_call) { - $sql = "SELECT sv.var,sv.val - FROM sample_var as sv, `case` as c, `call` as cl + $sql = "SELECT sivr.var,sv.val + FROM sample_var as sv, `case` as c, `call` as cl, `sample_import_var_restrict` as sivr WHERE c.sample_id = sv.sample_id AND c.case_id = cl.case_id + AND sv.var_id = sivr.var_id AND cl.call_id = '{$_SESSION['token']}'"; } else { - $sql = "SELECT sv.var,sv.val - FROM sample_var as sv, `case` as c + $sql = "SELECT sivr.var,sv.val + FROM sample_var as sv, `case` as c, `sample_import_var_restrict` as sivr WHERE c.sample_id = sv.sample_id + AND sv.var_id = sivr.var_id AND c.token = '{$_SESSION['token']}'"; } @@ -3504,10 +3506,6 @@ 'jsName'=>'', 'readWrite'=>'N', ); - - - - } else @@ -3535,13 +3533,13 @@ //Add all sample variables for this questionnaire global $connect; - $sql = "SELECT sv.var,sv.val - FROM `questionnaire` as q, questionnaire_sample as qs, sample as s, sample_var as sv - WHERE q.lime_sid = $surveyid - AND qs.questionnaire_id = q.questionnaire_id - AND s.import_id = qs.sample_import_id - AND sv.sample_id = s.sample_id - GROUP BY qs.sample_import_id,sv.var"; + $sql = "SELECT sivr.var,sv.val + FROM `questionnaire` as q, questionnaire_sample as qs, sample_var as sv, `sample_import_var_restrict` as sivr + WHERE q.lime_sid = $surveyid + AND qs.questionnaire_id = q.questionnaire_id + AND sivr.sample_import_id = qs.sample_import_id + AND sv.var_id = sivr.var_id + GROUP BY qs.sample_import_id,sivr.var"; $queXSrs = $connect->GetAssoc($sql); diff --git a/include/limesurvey/quexs.php b/include/limesurvey/quexs.php index 440a4b6a..ca7ef8b9 100644 --- a/include/limesurvey/quexs.php +++ b/include/limesurvey/quexs.php @@ -419,10 +419,11 @@ function quexs_update_sample($lime_sid,$id,$postedfieldnames) $sgqa = $r['sid'] . 'X' . $r['gid'] . 'X' . $r['qid'] . $r['title']; $var = $r['answer']; - $sql = "UPDATE sample_var as sv, ".LIME_PREFIX."survey_$lime_sid as ld + $sql = "UPDATE sample_var as sv, ".LIME_PREFIX."survey_$lime_sid as ld, `sample_import_var_restrict` as sivr SET sv.val = ld.$sgqa - WHERE sv.var LIKE '$var' + WHERE sivr.var LIKE '$var' AND sv.sample_id = '$sample_id' + AND sivr.var_id = sv.var_id AND ld.id = '$id'"; $db->Execute($sql); @@ -477,8 +478,9 @@ function get_sample_variable($variable,$case_id) $sql = "SELECT s.val as r FROM sample_var as s - JOIN `case` as c on (c.case_id = '$case_id' and s.sample_id = c.sample_id) - WHERE s.var = '$variable'"; + JOIN `case` as c on (c.case_id = '$case_id' and s.sample_id = c.sample_id), `sample_import_var_restrict` as sivr + WHERE sivr.var = '$variable' + AND s.var_id = sivr.var_id"; $rs = $db->GetRow($sql);