From 319845eaf588dc5cb8093940118c73d81bef7e7a Mon Sep 17 00:00:00 2001 From: azammitdcarf Date: Thu, 29 Nov 2012 01:55:33 +0000 Subject: [PATCH] Added queXS paradata and metadata export to Limesurvey data output including call attempts, number of answering machine messages, and all sample variables --- include/limesurvey/admin/exportresults.php | 102 ++++++++++++++------- 1 file changed, 69 insertions(+), 33 deletions(-) diff --git a/include/limesurvey/admin/exportresults.php b/include/limesurvey/admin/exportresults.php index 7a09a896..68c069b0 100644 --- a/include/limesurvey/admin/exportresults.php +++ b/include/limesurvey/admin/exportresults.php @@ -51,6 +51,10 @@ if (!$exportstyle) } $excesscols=array_keys($excesscols); + //queXS remove token from initial list + $t = array_search('token',$excesscols); + if ($t) + unset($excesscols[$t]); $afieldcount = count($excesscols); @@ -234,21 +238,31 @@ $quexsfilterstate = questionnaireSampleFilterstate(); // Find out if survey results are anonymous if ($thissurvey['anonymized'] == "N" && tableExists("tokens_$surveyid")) { - $exportoutput .= "
".$clang->gT("Token control")."\n" - .$clang->gT("Choose token fields").":" + $exportoutput .= "
".$clang->gT("queXS paradata/metadata")."\n" + .$clang->gT("Choose fields").":" ."".$clang->gT("Help")."
" ."
\n"; } @@ -267,12 +281,24 @@ $quexsfilterstate = questionnaireSampleFilterstate(); $tokenTableExists=tableExists('tokens_'.$surveyid); $aTokenFieldNames=array(); +$attributeFieldAndNames = array(); if ($tokenTableExists) { - $aTokenFieldNames=GetTokenFieldsAndNames($surveyid); - $attributeFieldAndNames=GetTokenFieldsAndNames($surveyid,true); - $attributeFields=array_keys($attributeFieldAndNames); + $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 + 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"; + + $attributeFields = $connect->GetAssoc($sql); + + + } switch ( $_POST["type"] ) { @@ -359,7 +385,7 @@ if (isset($_POST['colselect'])) foreach($_POST['colselect'] as $cs) { if (!isset($fieldmap[$cs]) && !isset($aTokenFieldNames[$cs]) && $cs != 'completed') continue; // skip invalid field names to prevent SQL injection - if ($tokenTableExists && $cs == 'token') + if ($tokenTableExists && $cs == 'token' && isset($_POST['attribute_select']) && is_array($_POST['attribute_select']) && in_array('token',$_POST['attribute_select'])) { // We shouldnt include the token field when we are joining with the token field } @@ -386,28 +412,38 @@ else $dquery = "SELECT $selectfields"; if ($tokenTableExists && $thissurvey['anonymized']=='N' && isset($_POST['attribute_select']) && is_array($_POST['attribute_select'])) { - if (in_array('first_name',$_POST['attribute_select'])) + if (in_array('callattempts',$_POST['attribute_select'])) { - $dquery .= ", {$dbprefix}tokens_$surveyid.firstname"; + $dquery .= ", (SELECT COUNT(c.call_attempt_id) + FROM call_attempt as c + WHERE c.case_id = {$dbprefix}survey_$surveyid.token) as callattempts "; } - if (in_array('last_name',$_POST['attribute_select'])) + if (in_array('messagesleft',$_POST['attribute_select'])) { - $dquery .= ", {$dbprefix}tokens_$surveyid.lastname"; - } - if (in_array('email_address',$_POST['attribute_select'])) - { - $dquery .= ", {$dbprefix}tokens_$surveyid.email"; + $dquery .= ", (SELECT COUNT(c2.call_id) + FROM `call` as c2 + WHERE c2.case_id = {$dbprefix}survey_$surveyid.token + AND c2.outcome_id = 23) as messagesleft "; } if (in_array('token',$_POST['attribute_select'])) { $dquery .= ", {$dbprefix}tokens_$surveyid.token"; } - foreach ($attributeFields as $attr_name) + $i =1; + foreach ($attributeFields as $attr_name => $attr_val) { - if (in_array($attr_name,$_POST['attribute_select'])) + if (in_array("SAMPLE:$attr_name",$_POST['attribute_select'])) { - $dquery .= ", {$dbprefix}tokens_$surveyid.$attr_name"; + $dquery .= ", ( SELECT sv.val + FROM sample_var as sv, `case` as c3 + WHERE c3.case_id = {$dbprefix}survey_$surveyid.token + AND c3.sample_id = sv.sample_id + AND sv.var LIKE '$attr_name') as attribute_$i "; + + $attributeFieldAndNames["attribute_$i"] = $attr_name; + + $i++; } } } @@ -444,15 +480,15 @@ for ($i=0; $i<$fieldcount; $i++) $field=$dresult->FetchField($i); $fieldinfo=$field->name; - if ($fieldinfo == "lastname") + if ($fieldinfo == "callattempts") { - if ($type == "csv") {$firstline .= "\"".$elang->gT("Last name")."\"$separator";} - else {$firstline .= $elang->gT("Last name")."$separator";} + if ($type == "csv") {$firstline .= "\"".$elang->gT("Number of call attempts")."\"$separator";} + else {$firstline .= $elang->gT("Number of call attempts")."$separator";} } - elseif ($fieldinfo == "firstname") + elseif ($fieldinfo == "messagesleft") { - if ($type == "csv") {$firstline .= "\"".$elang->gT("First name")."\"$separator";} - else {$firstline .= $elang->gT("First name")."$separator";} + if ($type == "csv") {$firstline .= "\"".$elang->gT("Number of answering machine messages left")."\"$separator";} + else {$firstline .= $elang->gT("Number of answering machine messages left")."$separator";} } elseif ($fieldinfo == "email") { @@ -461,8 +497,8 @@ for ($i=0; $i<$fieldcount; $i++) } elseif ($fieldinfo == "token") { - if ($type == "csv") {$firstline .= "\"".$elang->gT("Token")."\"$separator";} - else {$firstline .= $elang->gT("Token")."$separator";} + if ($type == "csv") {$firstline .= "\"".$elang->gT("Case ID")."\"$separator";} + else {$firstline .= $elang->gT("Case ID")."$separator";} } elseif (substr($fieldinfo,0,10)=="attribute_") {