diff --git a/admin/operatorlist.php b/admin/operatorlist.php
index 415640b6..002466f1 100644
--- a/admin/operatorlist.php
+++ b/admin/operatorlist.php
@@ -108,6 +108,9 @@ if (isset($_POST['submit']))
$htp->deleteUser($_POST["existing_username"]);
$htp->deleteUser($_POST["username"]);
$htp->addUser($_POST["username"],$_POST["password"]);
+ $htg = New Htgroup(HTGROUP_PATH);
+ $htg->deleteUserFromGroup($_POST["existing_username"],HTGROUP_INTERVIEWER);
+ $htg->addUserToGroup($_POST["username"],HTGROUP_INTERVIEWER);
}
$msg = T_("Successfully updated user");
diff --git a/include/limesurvey/admin/exportresults.php b/include/limesurvey/admin/exportresults.php
index f03897d7..357fa226 100644
--- a/include/limesurvey/admin/exportresults.php
+++ b/include/limesurvey/admin/exportresults.php
@@ -263,7 +263,8 @@ $quexsfilterstate = questionnaireSampleFilterstate();
."".$clang->gT("Total interview time over all calls (mins)")."\n"
."".$clang->gT("Interview time for last call (mins)")."\n"
."".$clang->gT("Last number dialled")."\n"
- ."".$clang->gT("Operator username for last call")."\n";
+ ."".$clang->gT("Operator username for last call")."\n"
+ ."".$clang->gT("Shift report")."\n";
$sql = "SELECT sv.var,sv.val
@@ -500,6 +501,18 @@ if ($tokenTableExists && $thissurvey['anonymized']=='N' && isset($_POST['attribu
ORDER BY cl5.call_id DESC
LIMIT 1) as operatoru ";
}
+ if (in_array('shiftr',$_POST['attribute_select']))
+ {
+ $dquery .= ", (SELECT GROUP_CONCAT(DISTINCT sr1.report SEPARATOR '|')
+ FROM `call` as cl6, `case` as ca8, `shift` as sh1, `shift_report` as sr1
+ WHERE cl6.case_id = ca8.case_id
+ AND ca8.token = {$dbprefix}survey_$surveyid.token
+ AND sr1.shift_id = sh1.shift_id
+ AND sh1.questionnaire_id = ca8.questionnaire_id
+ AND cl6.start >= sh1.start
+ AND cl6.end < sh1.end
+ GROUP BY sr1.shift_id) as shiftr ";
+ }
if (in_array('token',$_POST['attribute_select']))
{
$dquery .= ", {$dbprefix}tokens_$surveyid.token";
@@ -620,6 +633,11 @@ for ($i=0; $i<$fieldcount; $i++)
if ($type == "csv") {$firstline .= "\"".$elang->gT("Operator username for last call")."\"$separator";}
else {$firstline .= $elang->gT("Operator username for last call")."$separator";}
}
+ elseif ($fieldinfo == "shiftr")
+ {
+ if ($type == "csv") {$firstline .= "\"".$elang->gT("Shift report")."\"$separator";}
+ else {$firstline .= $elang->gT("Shift report")."$separator";}
+ }
elseif ($fieldinfo == "caseid")
{
if ($type == "csv") {$firstline .= "\"".$elang->gT("Case ID")."\"$separator";}
@@ -923,7 +941,7 @@ elseif ($answers == "long") //chose complete answers
$fqid=0; // By default fqid is set to zero
$field=$dresult->FetchField($i);
$fieldinfo=$field->name;
- if ($fieldinfo != "startlanguage" && $fieldinfo != "id" && $fieldinfo != "datestamp" && $fieldinfo != "startdate" && $fieldinfo != "ipaddr" && $fieldinfo != "refurl" && $fieldinfo != "token" && $fieldinfo != "firstname" && $fieldinfo != "lastname" && $fieldinfo != "email" && (substr($fieldinfo,0,10)!="attribute_") && $fieldinfo != "completed" && $fieldinfo != "caseoutcome"&& $fieldinfo != "caseid" && $fieldinfo != "callattempts" && $fieldinfo != "messagesleft"&& $fieldinfo != "casenotes"&& $fieldinfo != "interviewtimec"&& $fieldinfo != "interviewtimel"&& $fieldinfo != "lastnumber"&& $fieldinfo != "operatoru")
+ if ($fieldinfo != "startlanguage" && $fieldinfo != "id" && $fieldinfo != "datestamp" && $fieldinfo != "startdate" && $fieldinfo != "ipaddr" && $fieldinfo != "refurl" && $fieldinfo != "token" && $fieldinfo != "firstname" && $fieldinfo != "lastname" && $fieldinfo != "email" && (substr($fieldinfo,0,10)!="attribute_") && $fieldinfo != "completed" && $fieldinfo != "caseoutcome"&& $fieldinfo != "caseid" && $fieldinfo != "callattempts" && $fieldinfo != "messagesleft"&& $fieldinfo != "casenotes"&& $fieldinfo != "interviewtimec"&& $fieldinfo != "interviewtimel"&& $fieldinfo != "lastnumber"&& $fieldinfo != "operatoru"&& $fieldinfo != "shiftr")
{
$fielddata=$fieldmap[$fieldinfo];
$fqid=$fielddata['qid'];
@@ -971,6 +989,9 @@ elseif ($answers == "long") //chose complete answers
case "operatoru":
$ftitle=$elang->gT("Operator username for last call").":";
break;
+ case "shiftr":
+ $ftitle=$elang->gT("Shift report").":";
+ break;
case "datestamp":
$ftitle=$elang->gT("Date Last Action").":";
break;
diff --git a/include/limesurvey/classes/expressions/LimeExpressionManager.php b/include/limesurvey/classes/expressions/LimeExpressionManager.php
index 659e125b..5d0709d5 100644
--- a/include/limesurvey/classes/expressions/LimeExpressionManager.php
+++ b/include/limesurvey/classes/expressions/LimeExpressionManager.php
@@ -3416,10 +3416,25 @@
//Add all sample variables for this case
global $connect;
- $sql = "SELECT sv.var,sv.val
- FROM sample_var as sv, `case` as c
- WHERE c.sample_id = sv.sample_id
- AND c.token = '{$_SESSION['token']}'";
+ $use_call = true;
+ if (strlen($_SESSION['token']) == 15)
+ $use_call = false;
+
+ if ($use_call)
+ {
+ $sql = "SELECT sv.var,sv.val
+ FROM sample_var as sv, `case` as c, `call` as cl
+ WHERE c.sample_id = sv.sample_id
+ AND c.case_id = cl.case_id
+ AND cl.call_id = '{$_SESSION['token']}'";
+ }
+ else
+ {
+ $sql = "SELECT sv.var,sv.val
+ FROM sample_var as sv, `case` as c
+ WHERE c.sample_id = sv.sample_id
+ AND c.token = '{$_SESSION['token']}'";
+ }
$queXSrs = $connect->GetAssoc($sql);
@@ -3434,46 +3449,57 @@
);
}
+ if ($use_call)
+ {
+ $osql = "FROM operator as o, `call` as cl
+ WHERE o.operator_id = cl.operator_id
+ AND cl.call_id = '{$_SESSION['token']}'";
+
+ $rsql = "FROM respondent as r, `call` as cl
+ WHERE cl.call_id = '{$_SESSION['token']}'
+ AND r.respondent_id = cl.respondent_id";
+ }
+ else
+ {
+ $osql = "FROM operator as o, `case` as c
+ WHERE c.token = '{$_SESSION['token']}'
+ AND o.operator_id = c.current_operator_id";
+
+ $rsql = "FROM respondent as r, `case` as c, call_attempt as ca
+ WHERE c.token = '{$_SESSION['token']}'
+ AND ca.case_id = c.case_id
+ AND ca.end IS NULL
+ AND r.respondent_id = ca.respondent_id";
+ }
+
//add operator and respondent details
$this->knownVars["OPERATOR:FIRSTNAME"] =
- array('code' => $connect->GetOne(" SELECT o.firstName
- FROM operator as o, `case` as c
- WHERE c.token = '{$_SESSION['token']}'
- AND o.operator_id = c.current_operator_id"),
+ array('code' => $connect->GetOne(" SELECT o.firstName " . $osql
+ ),
'jsName_on'=>'',
'jsName'=>'',
'readWrite'=>'N',
);
$this->knownVars["OPERATOR:LASTNAME"] =
- array('code' => $connect->GetOne(" SELECT o.lastName
- FROM operator as o, `case` as c
- WHERE c.token = '{$_SESSION['token']}'
- AND o.operator_id = c.current_operator_id"),
+ array('code' => $connect->GetOne(" SELECT o.lastName " . $osql
+ ),
'jsName_on'=>'',
'jsName'=>'',
'readWrite'=>'N',
);
$this->knownVars["RESPONDENT:FIRSTNAME"] =
- array('code' => $connect->GetOne(" SELECT r.firstName
- FROM respondent as r, `case` as c, call_attempt as ca
- WHERE c.token = '{$_SESSION['token']}'
- AND ca.case_id = c.case_id
- AND ca.end IS NULL
- AND r.respondent_id = ca.respondent_id"),
+ array('code' => $connect->GetOne(" SELECT r.firstName " . $rsql
+ ),
'jsName_on'=>'',
'jsName'=>'',
'readWrite'=>'N',
);
$this->knownVars["RESPONDENT:LASTNAME"] =
- array('code' => $connect->GetOne(" SELECT r.lastName
- FROM respondent as r, `case` as c, call_attempt as ca
- WHERE c.token = '{$_SESSION['token']}'
- AND ca.case_id = c.case_id
- AND ca.end IS NULL
- AND r.respondent_id = ca.respondent_id"),
+ array('code' => $connect->GetOne(" SELECT r.lastName " . $rsql
+ ),
'jsName_on'=>'',
'jsName'=>'',
'readWrite'=>'N',