* @copyright Deakin University 2007,2008 * @package queXS * @subpackage admin * @link http://www.deakin.edu.au/dcarf/ queXS was writen for DCARF - Deakin Computer Assisted Research Facility * @license http://opensource.org/licenses/gpl-2.0.php The GNU General Public License (GPL) Version 2 * * */ /** * Configuration file */ include("../config.inc.php"); /** * Database file */ include ("../db.inc.php"); /** * Authentication */ require ("auth-admin.php"); /** * XHTML functions */ include("../functions/functions.xhtml.php"); /** * Display functions */ include("../functions/functions.display.php"); /** * Input functions */ include("../functions/functions.input.php"); $css = array( "../include/bootstrap/css/bootstrap.min.css", "../include/bootstrap/css/bootstrap-theme.min.css", "../include/font-awesome/css/font-awesome.css", "../include/bootstrap-toggle/css/bootstrap-toggle.min.css", "../css/custom.css" ); $js_head = array( "../include/jquery/jquery.min.js", "../include/bootstrap/js/bootstrap.min.js", "../include/bootstrap-toggle/js/bootstrap-toggle.min.js", "../js/window.js" ); $js_foot = array( "../js/bootstrap-confirmation.js", "../js/custom.js" ); 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 $questionnaire_id = bigintval($_GET['questionnaire_id']); $sid = bigintval($_GET['sample']); $cm = bigintval($_GET['call_max']); $cam = bigintval($_GET['call_attempt_max']); $am = bigintval($_GET['answering_machine_messages']); $selecttype = 0; if (isset($_GET['selecttype'])) $selecttype = 1; $an = 0; if (isset($_GET['allownew'])) $an = 1; $sql = "SELECT MAX(sort_order) + 1 FROM questionnaire_sample"; if(!$so = $db->GetOne($sql)) $so = 1; $sql = "INSERT INTO questionnaire_sample(questionnaire_id,sample_import_id,call_max,call_attempt_max,random_select,answering_machine_messages,allow_new,sort_order) VALUES('$questionnaire_id','$sid','$cm','$cam','$selecttype','$am', '$an', '$so')"; $db->Execute($sql); if (isset($_GET['generatecases'])) { include_once("../functions/functions.operator.php"); include_once("../functions/functions.limesurvey.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'"); //add limesurvey attribute for each sample var record $sql = "SELECT var,type FROM sample_import_var_restrict WHERE sample_import_id = '$sid'"; $rs = $db->GetAll($sql); $i = 1; $fields = array(); $fieldcontents=''; foreach($rs as $r) { $fields[]=array('attribute_'.$i,'C','255'); $fieldcontents.='attribute_'.$i.'='.$r['var']."\n"; $i++; } $dict = NewDataDictionary($db); $sqlarray = $dict->ChangeTableSQL(LIME_PREFIX ."tokens_$lime_sid", $fields); $execresult=$dict->ExecuteSQLArray($sqlarray, false); $sql = "UPDATE " . LIME_PREFIX . "surveys SET attributedescriptions = " . $db->qstr($fieldcontents) . " WHERE sid='$lime_sid'"; $db->Execute($sql); //generate one case for each sample record and set outcome to 41 (where an email address provided) $sql = "SELECT s.sample_id, sv.val as email FROM sample as s LEFT JOIN (sample_var as sv, sample_import_var_restrict as sivr) ON (sv.sample_id = s.sample_id and sv.var_id = sivr.var_id and sivr.type = 8) WHERE s.import_id = '$sid'"; $rs = $db->GetAll($sql); $count = 0; foreach($rs as $r) { $count++; set_time_limit(30); //only if a valid email if (validate_email($r['email'])) { $case_id = add_case($r['sample_id'],$questionnaire_id,"NULL",$testing,41, true); if ($case_id === false) { $error .= "
Failed to add case for record #$count"; } else { //add call and call attempt records $resp_id = 0; $sql = "SELECT respondent_id FROM respondent WHERE case_id = $case_id"; $rsp = $db->GetOne($sql); if (!empty($rsp)) { $resp_id = $rsp; } $sql = "INSERT INTO call_attempt (case_id,operator_id,respondent_id,start,end) VALUES ($case_id, 1, $resp_id, NOW(), NOW())"; $db->Execute($sql); $call_attempt_id = $db->Insert_ID(); $sql = "INSERT INTO `call` (operator_id,respondent_id,case_id,contact_phone_id,call_attempt_id,start,end,outcome_id,state) VALUES (1,$resp_id,$case_id,0,$call_attempt_id,NOW(),NOW(),41,5)"; $db->Execute($sql); $call_id = $db->Insert_ID(); $sql = "UPDATE `case` SET last_call_id = $call_id WHERE case_id = $case_id"; $db->Execute($sql); } } } $db->CompleteTrans(); } } if (isset($_POST['edit'])) { //need to add sample to questionnaire $questionnaire_id = bigintval($_POST['questionnaire_id']); $sid = bigintval($_POST['sample_import_id']); $cm = bigintval($_POST['call_max']); $cam = bigintval($_POST['call_attempt_max']); $am = bigintval($_POST['answering_machine_messages']); $selecttype = 0; if (isset($_POST['selecttype'])) $selecttype = 1; $an = 0; if (isset($_POST['allownew'])) $an = 1; $sql = "UPDATE questionnaire_sample SET call_max = '$cm', call_attempt_max = '$cam', random_select = '$selecttype', answering_machine_messages = '$am', allow_new = '$an' WHERE questionnaire_id = '$questionnaire_id' AND sample_import_id = '$sid'"; $db->Execute($sql); } if (isset($_GET['questionnaire_id']) && isset($_GET['rsid'])) { $questionnaire_id = bigintval($_GET['questionnaire_id']); $sid = bigintval($_GET['rsid']); if (isset($_GET['edit'])) { $subtitle = T_("Edit assignment parameters"); xhtml_head(T_("Assign samples to questionnaire: "),true,$css,$js_head,false,false,false,$subtitle); $sql = "SELECT si.description as description, qr.description as qdescription, q.call_max, q.call_attempt_max, q.random_select, q.answering_machine_messages, q.allow_new FROM questionnaire_sample as q, sample_import as si, questionnaire as qr WHERE q.sample_import_id = si.sample_import_id AND q.questionnaire_id = '$questionnaire_id' AND si.sample_import_id = '$sid' AND qr.questionnaire_id = q.questionnaire_id"; $qs = $db->GetRow($sql); //print "

" . T_("Edit sample details") . "

"; print "

 " . T_("Go back") . "

" . T_("Questionnaire") . ": " . $qs['qdescription'] . "

" . T_("Sample") . ": " . $qs['description'] . "

"; $allownew = $selected =""; if ($qs['random_select'] == 1) $selected = "checked=\"checked\""; if ($qs['allow_new'] == 1) $allownew = "checked=\"checked\""; ?>






data-toggle="toggle" data-size="small" data-on="" data-off="" data-width="85"/>


class="col-sm-1" data-toggle="toggle" data-size="small" data-on="" data-off="" data-width="85"/>



GetOne(" SELECT sort_order FROM questionnaire_sample WHERE questionnaire_id = $questionnaire_id AND sample_import_id = $sid"); if ($_GET['sort'] == "up") { //find previous in sort order $dir = "<"; } else if ($_GET['sort'] == "down") { //find next in sort order $dir = ">"; } $sql = "SELECT sample_import_id,sort_order FROM questionnaire_sample WHERE questionnaire_id = $questionnaire_id AND sort_order $dir $cso ORDER BY sort_order DESC LIMIT 1"; $rs = $db->GetRow($sql); //do a swap $ssid = $rs['sample_import_id']; $sso = $rs['sort_order']; $sql = "UPDATE questionnaire_sample SET sort_order = $sso WHERE sample_import_id = $sid AND questionnaire_id = $questionnaire_id"; $db->Execute($sql); $sql = "UPDATE questionnaire_sample SET sort_order = $cso WHERE sample_import_id = $ssid AND questionnaire_id = $questionnaire_id"; $db->Execute($sql); unset($_GET['sort']); } else { //need to remove rsid from questionnaire $sql = "DELETE FROM questionnaire_sample WHERE questionnaire_id = '$questionnaire_id' AND sample_import_id = '$sid'"; $db->Execute($sql); // update sort_order after unassigning $db->Execute("SELECT @i := 0"); $db->Execute("UPDATE `questionnaire_sample` SET sort_order = @i:=@i+1 WHERE 1=1 ORDER BY sort_order ASC"); } } $subtitle = T_("List & Add Sample"); xhtml_head(T_("Assign samples to questionnaires"),true,$css,$js_head,false,false,false,$subtitle);//array("../css/table.css"),array("../js/window.js") print " " . T_("Go back") . ""; if (!empty($error)) { print "
$error
"; } $questionnaire_id = false; if (isset($_GET['questionnaire_id'])) $questionnaire_id = bigintval($_GET['questionnaire_id']); print "

 " . T_("Select a questionnaire") . "

"; display_questionnaire_chooser($questionnaire_id,false, "pull-left btn", "form-control "); print "
"; if ($questionnaire_id != false) { 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, CASE WHEN q.call_max = 0 THEN '". TQ_("Unlimited") ."' ELSE q.call_max END as call_max, CASE WHEN q.call_attempt_max = 0 THEN '". TQ_("Unlimited") . "' ELSE q.call_attempt_max END AS call_attempt_max, CASE WHEN q.random_select = 0 THEN '". TQ_("Sequential") ."' ELSE '". TQ_("Random") . "' END as random_select, CASE WHEN q.answering_machine_messages = 0 THEN '". TQ_("Never") . "' ELSE q.answering_machine_messages END as answering_machine_messages, CASE WHEN q.allow_new = 0 THEN '". TQ_("No") ."' ELSE '".TQ_("Yes")."' END as allow_new, CONCAT('') as edit, CONCAT('') as unassign FROM questionnaire_sample as q, sample_import as si WHERE q.sample_import_id = si.sample_import_id AND q.questionnaire_id = '$questionnaire_id' ORDER BY q.sort_order ASC"; $qs = $db->GetAll($sql); if (!empty($qs)) { $co = count($qs); if ($co > 1) { for($i = 0; $i < $co; $i++) { $down = ""; $up = ""; if ($i == 0) //down only { $qs[$i]['sort_order'] = "
   " . $qs[$i]['sort_order'] . " " . $down . "
"; } else if ($i == ($co - 1)) //up only { $qs[$i]['sort_order'] = "
" .$up . " " . $qs[$i]['sort_order'] . ""; } else { $qs[$i]['sort_order'] = "
" . $up . " " . $qs[$i]['sort_order'] . " " . $down . "
"; } } } else $qs[0]['sort_order'] = " " . $qs[0]['sort_order'] . " "; xhtml_table($qs,array("sort_order","description","call_max","call_attempt_max","answering_machine_messages","random_select","allow_new","edit","unassign"),array(T_("Sort order"),T_("Sample"), T_("Max calls"), T_("Max call attempts"), T_("Answering machine messages"), T_("Selection type"), T_("Allow new numbers to be drawn?"), T_("Edit"), T_("Unassign sample"))); } else print "

". T_("No samples selected for this questionnaire") ."

"; print"
"; $sql = "SELECT si.sample_import_id,si.description FROM sample_import as si LEFT JOIN questionnaire_sample as q ON (q.questionnaire_id = '$questionnaire_id' AND q.sample_import_id = si.sample_import_id) WHERE q.questionnaire_id is NULL AND si.enabled = 1"; $qs = $db->GetAll($sql); if (!empty($qs)) { print "
"; print "

" . T_("Add a sample to this questionnaire:") . "

"; ?>








" data-off="" data-width="85"/>


" data-off="" data-width="85"/>



GetOne("SELECT self_complete FROM questionnaire WHERE questionnaire_id = '$questionnaire_id'"); if ($self_complete) {?>
" data-off="" data-width="85"/>
*