" . T_("Any collected data and the limesurvey instrument will NOT be deleted") . "
";
- print "
" . T_("The questionnaire will be deleted from queXS including call history, cases, case notes, respondent details, appointments and the links between operators, clients and the questionnaire") . "
";
- print "
" . T_("Please confirm you wish to delete the questionnaire") . "
') as description,
- CASE WHEN enabled = 0 THEN
- CONCAT(' " . TQ_("Disabled") . " ')
- ELSE
- CONCAT(' " . TQ_("Enabled") . " ')
- END as status,
- CASE WHEN enabled = 0 THEN
- CONCAT(' ')
- ELSE
- CONCAT(' ')
- END as enabledisable,
- CONCAT('') as modify,
- CONCAT('') as inlime,
- CASE WHEN enabled = 0 THEN
- CONCAT('')
- ELSE
- CONCAT('')
- END as shifts,
- CASE WHEN enabled = 0 THEN
- CONCAT('')
- ELSE
- CONCAT('')
- END as prefill,
- CASE WHEN enabled = 1 THEN
- CONCAT('')
- ELSE
- CONCAT('')
- END as deletee,
- CASE WHEN enabled = 0 THEN
- CONCAT('')
- ELSE
- CONCAT('')
- END as outcomes,
- CONCAT('') as calls,
- CASE WHEN enabled = 0 THEN
- CONCAT('')
- ELSE
- CONCAT('')
- END as dataout,
- CASE WHEN enabled = 0 THEN
- CONCAT('')
- ELSE
- CONCAT('')
- END as assample,
- CASE WHEN enabled = 0 THEN
- CONCAT('')
- ELSE
- CONCAT('')
- END as casestatus
- FROM questionnaire";
- $rs = $db->GetAll($sql);
-
- $columns = array("qid","description","status","enabledisable","outcomes","calls","casestatus","shifts","assample","dataout","modify","inlime","prefill","deletee");
- xhtml_table($rs,$columns,false,"table-hover table-condensed ");
-
-print "
";
+
+$sql = "SELECT questionnaire_id as value,description, CASE WHEN questionnaire_id = '$questionnaire_id' THEN 'selected=\'selected\'' ELSE '' END AS selected
+ FROM questionnaire
+ WHERE enabled = 1";
+display_chooser($db->GetAll($sql),"questionnaire","questionnaire_id", true,false,true,true,false,true,"form-inline pull-left ");
+
+
+if ($questionnaire_id != false)
+{
+ $sample_import_id = false;
+ if (isset($_GET['sample_import_id'])) $sample_import_id = bigintval($_GET['sample_import_id']);
+
+
+
+ $sql = "SELECT s.sample_import_id as value,s.description, CASE WHEN s.sample_import_id = '$sample_import_id' THEN 'selected=\'selected\'' ELSE '' END AS selected
+ FROM sample_import as s, questionnaire_sample as q
+ WHERE q.questionnaire_id = $questionnaire_id
+ AND q.sample_import_id = s.sample_import_id";
+ $s = $db->GetAll($sql);
+ if (!empty($s)){
+ print "
";
+
+ ?>
+
+ " . TQ_("Delete") . "') as qdelete
+ FROM qsqr_question
+ WHERE questionnaire_sample_quota_row_id = $qsqri";
+
+
+ $rs = $db->GetAll($sql);
+
+ if (empty($rs))
+ {
+ print "
" . T_("All completed responses that match the sample criteria below will be counted towards the quota") . "
";
+ }
+ else
+ {
+ print "
" . T_("Only completed responses that have answered the following will be counted") . "
";
+ xhtml_table($rs,array('lime_sgqa','comparison','value','qdelete'),array(T_("Question"),T_("Comparison"),T_("Value"),T_("Delete")));
+ }
+
+ //add questionnaire references if any (refer to sample only or count completions based on responses to questions)
+
+ $sql = "SELECT lime_sid
+ FROM questionnaire
+ WHERE questionnaire_id = $questionnaire_id";
+
+ $lime_sid = $db->GetOne($sql);
+
+ $ssgqa = "''";
+ if (isset($_GET['sgqa']))
+ $ssgqa = $db->qstr($_GET['sgqa']);
+
+ //select question
+ $sql = "SELECT CONCAT( lq.sid, 'X', lq.gid, 'X', CASE WHEN lq.parent_qid = 0 THEN lq.qid ELSE CONCAT(lq.parent_qid, lq.title) END) as value, CASE WHEN lq.parent_qid = 0 THEN lq.question ELSE CONCAT(lq2.question, ': ', lq.question) END as description, CASE WHEN $ssgqa LIKE CONCAT( lq.sid, 'X', lq.gid, 'X', CASE WHEN lq.parent_qid = 0 THEN lq.qid ELSE CONCAT(lq.parent_qid, lq.title) END) THEN 'selected=\'selected\'' ELSE '' END AS selected
+ FROM `" . LIME_PREFIX . "questions` AS lq
+ LEFT JOIN `" . LIME_PREFIX . "questions` AS lq2 ON ( lq2.qid = lq.parent_qid )
+ JOIN `" . LIME_PREFIX . "groups` as g ON (g.gid = lq.gid)
+ WHERE lq.sid = '$lime_sid'
+ ORDER BY g.group_order ASC, lq.question_order ASC";
+
+ $rs = $db->GetAll($sql);
+
+ if (!empty($rs))
+ {
+ print "
+ " . TQ_("Delete") . "') as sdelete
+ FROM qsqr_sample
+ WHERE questionnaire_sample_quota_row_id = $qsqri";
+
+ $rs = $db->GetAll($sql);
+
+ if (empty($rs))
+ {
+ print "
" . T_("All sample records will be excluded") . "
";
+ }
+ else
+ {
+ print "
" . T_("Completed responses that have the following sample details will be counted towards the quota and excluded when the quota is reached") . "
";
+ xhtml_table($rs,array('exclude_var','comparison','exclude_val','sdelete'),array(T_("Sample record"),T_("Comparison"),T_("Value"),T_("Delete")));
+ }
+
+
+ $ssample_var = "''";
+ if (isset($_GET['sample_var']))
+ $ssample_var = $db->qstr($_GET['sample_var']);
+
+ //add sample references (records from sample to exclude when quota reached)
+ $sql = "SELECT sv.var as value, sv.var as description, CASE WHEN sv.var LIKE $ssample_var THEN 'selected=\'selected\'' ELSE '' END AS selected
+ FROM sample_var AS sv, sample AS s
+ WHERE s.import_id = $sample_import_id
+ AND s.sample_id = sv.sample_id
+ GROUP BY sv.var";
+
+ $rs = $db->GetAll($sql);
+
+ if (!empty($rs))
+ {
+ if ($ssample_var == "''")
+ $ssample_var = "'" . $rs[0]['value']. "'";
+
+ print "
" . T_("Add restriction based on sample records") . "
";
+ print "
+ " . T_("Current row quotas (click to edit)") . "";
+
+
+ $sql = "SELECT questionnaire_sample_quota_row_id,qsq.description,
+ CONCAT('', qsq.description, '') as qedit,
+ CONCAT('') as qselect,
+ qsq.completions,qsq.quota_reached,qsq.current_completions,
+ CASE WHEN qsq.autoprioritise = 1 THEN '" . TQ_("Yes") . "' ELSE '" . TQ_("No") . "' END AS ap, qsq.priority,
+ CASE WHEN qsq.quota_reached = 1 THEN '" . TQ_("closed") . "' ELSE '" . TQ_("open") . "' END AS status
+ FROM questionnaire_sample_quota_row as qsq, questionnaire as q
+ WHERE qsq.questionnaire_id = '$questionnaire_id'
+ AND qsq.sample_import_id = '$sample_import_id'
+ AND q.questionnaire_id = '$questionnaire_id'";
+
+ $r = $db->GetAll($sql);
+
+ print "";
+ print "
";
+ $sample_import_id = false;
+ if (isset($_GET['sample_import_id'])) $sample_import_id = bigintval($_GET['sample_import_id']);
+ display_sample_chooser($questionnaire_id,$sample_import_id,false,"form-inline form-group clearfix", "form-control");
+
+ if ($sample_import_id)
+ {
+ if (isset($_GET['rowquota']))
+ {
+ $qsq = bigintval($_GET['rowquota']);
+ $qr = 0;
+ if (isset($_GET['close'])) $qr = 1;
+ $sql = "UPDATE questionnaire_sample_quota_row
+ SET quota_reached = $qr
+ WHERE questionnaire_sample_quota_row_id = '$qsq'";
+ $db->Execute($sql);
+ if ($qr == 1)
+ close_row_quota($qsq);
+ else
+ open_row_quota($qsq,false);
+ }
+
+ //Display report of quotas
+ $report = array();
+
+ //Rows to display: Strata Status Quota Sample Sample Used Sample Remaining Completes % Complete
+
+
+
+ //a. (Standard quota) Monitor outcomes of questions in completed questionnaires, and exclude selected sample records when completion limit is reached
+ //b. (Replicate quota) Exclude selected sample records (where no qsqr_question rows)
+ $sql = "SELECT qsq.questionnaire_sample_quota_row_id,completions,quota_reached,lime_sid,qsq.description,current_completions, priority, autoprioritise
+ FROM questionnaire_sample_quota_row as qsq, questionnaire as q
+ WHERE qsq.questionnaire_id = '$questionnaire_id'
+ AND qsq.sample_import_id = '$sample_import_id'
+ AND q.questionnaire_id = '$questionnaire_id'";
+
+ $r = $db->GetAll($sql);
+
+ foreach ($r as $v)
+ {
+ $completions = $v['current_completions'];
+ $priority = $v['priority'];
+ $autoprioritise = $v['autoprioritise'];
+ $checked = "";
+ if ($autoprioritise) $checked = "checked='checked'";
+ $qsqr = $v['questionnaire_sample_quota_row_id'];
+
+
+ $perc = ($v['completions'] <= 0 ? 0 : ROUND(($completions / ($v['completions'])) * 100,2));
+
+ //We need to calc Sample size, Sample drawn, Sample remain
+ $sql = "SELECT (c.sample_id is not null) as type, count(*) as count
+ FROM sample as s
+ JOIN questionnaire_sample as qs ON (qs.questionnaire_id = '$questionnaire_id' and qs.sample_import_id = s.import_id) ";
+
+ $sql2 = "SELECT exclude_val,exclude_var,exclude_var_id,comparison
+ FROM qsqr_sample
+ WHERE questionnaire_sample_quota_row_id = {$v['questionnaire_sample_quota_row_id']}";
+
+ $rev = $db->GetAll($sql2);
+
+ //reduce sample by every item in the qsqr_sample table
+ $x = 1;
+ foreach($rev as $ev)
+ {
+ $sql .= " JOIN sample_var as sv$x ON (sv$x.sample_id = s.sample_id AND sv$x.var_id = '{$ev['exclude_var_id']}' AND sv$x.val {$ev['comparison']} '{$ev['exclude_val']}') ";
+ $x++;
+ }
+
+ $sql .= " LEFT JOIN `case` as c ON (c.questionnaire_id = qs.questionnaire_id and c.sample_id = s.sample_id)
+ WHERE s.import_id = '$sample_import_id'
+ GROUP BY (c.sample_id is not null)";
+
+ $rs = $db->GetAll($sql);
+ //type == 1 is drawn from sample, type == 0 is remains in sample
+ $drawn = 0;
+ $remain = 0;
+
+ foreach ($rs as $r)
+ {
+ if ($r['type'] == 1) $drawn = $r['count'];
+ if ($r['type'] == 0) $remain = $r['count'];
+ }
+
+ if ($completions < $v['completions']) //if completions less than the quota, allow for closing/opening
+ {
+ if ($v['quota_reached'] == 1)
+ $status = "" . T_("closed") . "";
+ else
+ $status = "" . T_("open") . "";
+ }
+ else
+ {
+ if ($v['quota_reached'] == 1)
+ $status = T_("closed");
+ else
+ $status = T_("open");
+ }
+
+ $report[] = array("strata" => "" . $v['description'] . "", "status" => $status, "quota" => $v['completions'], "sample" => $drawn + $remain, "sampleused" => $drawn, "sampleremain" => $remain, "completions" => $completions, "perc" => $perc, "priority" => "", "autoprioritise" => "");
+ }
+
+ //c. (Questionnaire quota) Monitor outcomes of questions in completed questionnaires, and abort interview when completion limit is reached
+ $sql = "SELECT *
+ FROM " . LIME_PREFIX . "quota as qu, questionnaire as q
+ WHERE qu.sid = q.lime_sid
+ AND qu.active = 1
+ AND q.questionnaire_id = '$questionnaire_id'";
+
+ $rs = $db->GetAll($sql);
+
+ //for each limesurvey quota
+ foreach($rs as $r)
+ {
+ //limesurvey quotas for this question
+ $quotas = (get_limesurvey_quota_info($r['id']));
+ $sqlq = array();
+
+ foreach ($quotas as $q)
+ $sqlq[] = "s." . $q['fieldname'] . " = '" . $q['value'] . "'";
+
+ $sql = "SELECT COUNT(id) as count
+ FROM ".LIME_PREFIX."survey_{$r['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')
+ WHERE ".implode(' AND ',$sqlq)." "."
+ AND submitdate IS NOT NULL
+ AND s.token = c.token";
+
+ $rs = $db->GetRow($sql);
+
+ $completions = $rs['count'];
+ $perc = ROUND(($completions / $r['qlimit']) * 100,2);
+
+ $report[] = array("strata" => "" . $r['name'] . "", "quota" => $r['qlimit'], "completions" => $completions, "perc" => $perc);
+ }
+
+
+ // At the end - > the entire sample
+
+ //We need to calc Sample size, Sample drawn, Sample remain, Completions, %complete
+ $sql = "SELECT (c.sample_id is not null) as type, count(*) as count
+ FROM sample as s
+ JOIN questionnaire_sample as qs ON (qs.questionnaire_id = '$questionnaire_id' and qs.sample_import_id = s.import_id)
+ LEFT JOIN `case` as c ON (c.questionnaire_id = qs.questionnaire_id and c.sample_id = s.sample_id)
+ WHERE s.import_id = '$sample_import_id'
+ GROUP BY (c.sample_id is not null)";
+
+ $rs = $db->GetAll($sql);
+
+ //type == 1 is drawn from sample, type == 0 is remains in sample
+ $drawn = 0;
+ $remain = 0;
+
+ foreach ($rs as $r)
+ {
+ if ($r['type'] == 1) $drawn = $r['count'];
+ if ($r['type'] == 0) $remain = $r['count'];
+ }
+
+ $sql = "SELECT count(*) as count
+ FROM `case` as c, sample as s
+ WHERE c.current_outcome_id = 10
+ AND s.import_id = '$sample_import_id'
+ AND s.sample_id = c.sample_id
+ AND c.questionnaire_id = '$questionnaire_id'";
+
+ $rs = $db->GetRow($sql);
+
+ $completions = $rs['count'];
+
+ $report[] = array("strata" => T_("Total sample"), "quota" => $drawn + $remain, "sample" => $drawn + $remain, "sampleused" => $drawn, "sampleremain" => $remain, "completions" => $completions, "perc" => ROUND(($completions / ($drawn + $remain)) * 100,2));
+
+ print "";
+ }
+
+}
+
+xhtml_foot();
+
+?>
diff --git a/admin/quotarow.php b/admin/quotarow.php
index bdc83378..0b6393c0 100755
--- a/admin/quotarow.php
+++ b/admin/quotarow.php
@@ -1,386 +1,575 @@
-
- * @copyright Deakin University 2007,2008,2009
- * @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");
-
-/**
- * XHTML functions
- */
-include("../functions/functions.xhtml.php");
-
-/**
- * Display functions
- */
-include("../functions/functions.display.php");
-
-/**
- * Input functions
- */
-include("../functions/functions.input.php");
-
-/**
- * Limesurvey functions
- */
-include("../functions/functions.limesurvey.php");
-
-/**
- * Operator functions
- */
-include("../functions/functions.operator.php");
-
-
-global $db;
-
-if (isset($_GET['questionnaire_id']) && isset($_GET['sgqa']) && isset($_GET['value']) && isset($_GET['completions']) && isset($_GET['sample_import_id']) && isset($_GET['comparison']) && isset($_GET['exclude_var_id']) && isset($_GET['exclude_var']) && isset($_GET['exclude_val']))
-{
- //need to add quota
- $value = -1;
- $comparison = -1;
- $completions = -1;
- $sgqa = -1;
- $autoprioritise = 0;
-
- if (isset($_GET['autoprioritise'])) $autoprioritise = 1;
-
- $priority = intval($_GET['priority']);
- $questionnaire_id = bigintval($_GET['questionnaire_id']);
- $sample_import_id = bigintval($_GET['sample_import_id']);
- if ($_GET['sgqa'] != -1)
- {
- if ($_GET['sgqa'] != -2)
- {
- $comparison = $db->quote($_GET['comparison']);
- $value = $db->quote($_GET['value']);
- $sgqa = $db->quote($_GET['sgqa']);
- }
- else
- {
- $sgqa = -2;
- }
- $completions = $db->quote($_GET['completions']);
- }
- $exclude_var_id = $db->quote($_GET['exclude_var_id']);
- $exclude_val = $db->quote($_GET['exclude_val']);
- $exclude_var = $db->quote($_GET['exclude_var']);
- $description = $db->quote($_GET['description']);
-
- $sql = "INSERT INTO questionnaire_sample_quota_row(questionnaire_id, sample_import_id, lime_sgqa,value,completions,comparison,exclude_var_id,exclude_var,exclude_val,description, priority, autoprioritise)
- VALUES ($questionnaire_id, $sample_import_id, $sgqa, $value, $completions, $comparison, $exclude_var_id, $exclude_var, $exclude_val, $description, $priority, $autoprioritise)";
-
- $db->Execute($sql);
-
- //Make sure to calculate on the spot
- update_quotas($questionnaire_id);
-}
-
-if (isset($_GET['questionnaire_id']) && isset($_GET['questionnaire_sample_quota_row_id']))
-{
- //need to remove quota
-
- $questionnaire_id = bigintval($_GET['questionnaire_id']);
- $questionnaire_sample_quota_row_id = bigintval($_GET['questionnaire_sample_quota_row_id']);
-
- open_row_quota($questionnaire_sample_quota_row_id);
-}
-
-$questionnaire_id = false;
-if (isset($_GET['questionnaire_id'])) $questionnaire_id = bigintval($_GET['questionnaire_id']);
-
-xhtml_head(T_("Quota row management"),true,array("../include/bootstrap-3.3.2/css/bootstrap.min.css","../include/bootstrap-toggle/css/bootstrap-toggle.min.css","../css/custom.css"),array("../js/jquery-2.1.3.min.js","../include/bootstrap-toggle/js/bootstrap-toggle.min.js","../js/window.js"));
-print "
" . T_("Questionnaire") . ":
";
-
-$sql = "SELECT questionnaire_id as value,description, CASE WHEN questionnaire_id = '$questionnaire_id' THEN 'selected=\'selected\'' ELSE '' END AS selected
- FROM questionnaire
- WHERE enabled = 1";
-display_chooser($db->GetAll($sql),"questionnaire","questionnaire_id", true,false,true,true,false,true,"form-inline pull-left ");
-
-
-if ($questionnaire_id != false)
-{
- $sample_import_id = false;
- if (isset($_GET['sample_import_id'])) $sample_import_id = bigintval($_GET['sample_import_id']);
-
-
-
- $sql = "SELECT s.sample_import_id as value,s.description, CASE WHEN s.sample_import_id = '$sample_import_id' THEN 'selected=\'selected\'' ELSE '' END AS selected
- FROM sample_import as s, questionnaire_sample as q
- WHERE q.questionnaire_id = $questionnaire_id
- AND q.sample_import_id = s.sample_import_id";
- $s = $db->GetAll($sql);
- if (!empty($s)){
- print "
";
- }
- }
- }
-}
-
-xhtml_foot();
-
-?>
\ No newline at end of file
+
+ * @copyright Deakin University 2007,2008,2009
+ * @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");
+
+/**
+ * XHTML functions
+ */
+include("../functions/functions.xhtml.php");
+
+/**
+ * Display functions
+ */
+include("../functions/functions.display.php");
+
+/**
+ * Input functions
+ */
+include("../functions/functions.input.php");
+
+/**
+ * Limesurvey functions
+ */
+include("../functions/functions.limesurvey.php");
+
+/**
+ * Operator functions
+ */
+include("../functions/functions.operator.php");
+
+
+global $db;
+
+
+if (isset($_POST['submitdelete']))
+{
+ foreach($_POST as $key => $val)
+ {
+ if (substr($key,0,7) == "select_")
+ {
+ $tmp = bigintval(substr($key,7));
+ open_row_quota($tmp);
+ }
+ }
+}
+
+if (isset($_POST['submitexport']))
+{
+ $csv = array();
+ foreach($_POST as $key => $val)
+ {
+ if (substr($key,0,7) == "select_")
+ {
+ $tmp = bigintval(substr($key,7));
+
+ $sql = "SELECT description,completions,autoprioritise
+ FROM questionnaire_sample_quota_row
+ WHERE questionnaire_sample_quota_row_id = $tmp";
+
+ $rs = $db->GetRow($sql);
+
+ $sql = "SELECT lime_sgqa,comparison,value
+ FROM qsqr_question
+ WHERE questionnaire_sample_quota_row_id = $tmp";
+
+ $q2 = $db->GetAll($sql);
+
+ $sql = "SELECT exclude_var as samplerecord,comparison,exclude_val as value
+ FROM qsqr_sample
+ WHERE questionnaire_sample_quota_row_id = $tmp";
+
+ $q3 = $db->GetAll($sql);
+
+ $ta = array($rs['description'],$rs['completions'],$rs['autoprioritise']);
+
+ //just search where col 1 looks like 333X2X2 and assume it is a question
+
+ foreach($q2 as $qr)
+ foreach($qr as $qe => $val)
+ $ta[] = $val;
+
+ foreach($q3 as $qr)
+ foreach($qr as $qe => $val)
+ $ta[] = $val;
+
+ $csv[] = $ta;
+ }
+ }
+ if (!empty($csv))
+ {
+ $fn = T_("Quota") .".csv";
+
+ header("Content-Type: text/csv");
+ header("Content-Disposition: attachment; filename=$fn");
+ header("Expires: Mon, 26 Jul 1997 05:00:00 GMT"); // Date in the past
+ header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
+ Header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
+ header("Pragma: no-cache"); // HTTP/1.0
+
+ foreach($csv as $cr)
+ {
+ for ($i = 0; $i < count($cr); $i++)
+ {
+ echo str_replace(","," ",$cr[$i]);
+ if ($i < (count($cr) - 1))
+ echo ",";
+ }
+ echo "\n";
+ }
+ die();
+ }
+}
+
+if (isset($_GET['delete']))
+{
+ $qsqri = bigintval($_GET['qsqri']);
+
+ if (isset($_GET['qsqrqi']))
+ {
+ $qsqrqi = bigintval($_GET['qsqrqi']);
+ $sql = "DELETE FROM qsqr_question
+ WHERE qsqr_question_id = $qsqrqi";
+ $db->Execute($sql);
+
+ //Make sure to calculate on the spot
+ update_single_row_quota($qsqri);
+ }
+ if (isset($_GET['qsqrsi']))
+ {
+ $qsqrsi = bigintval($_GET['qsqrsi']);
+ $sql = "DELETE FROM qsqr_sample
+ WHERE qsqr_sample_id = $qsqrsi";
+ $db->Execute($sql);
+
+ //Make sure to calculate on the spot
+ update_single_row_quota($qsqri);
+ }
+}
+
+
+if (isset($_POST['add_quota']))
+/* if (isset($_GET['questionnaire_id']) && isset($_GET['sgqa']) && isset($_GET['value']) && isset($_GET['completions']) && isset($_GET['sample_import_id']) && isset($_GET['comparison']) && isset($_GET['exclude_var_id']) && isset($_GET['exclude_var']) && isset($_GET['exclude_val'])) */
+{
+ //need to add quota
+ $completions = intval($_POST['completions']);
+ $autoprioritise = 0;
+ if (isset($_POST['autoprioritise'])) $autoprioritise = 1;
+ $priority = intval($_POST['priority']);
+ $questionnaire_id = bigintval($_GET['questionnaire_id']);
+ $sample_import_id = bigintval($_GET['sample_import_id']);
+ $description = $db->quote($_POST['description']);
+
+ $sql = "INSERT INTO questionnaire_sample_quota_row(questionnaire_id, sample_import_id, completions, description, priority, autoprioritise)
+ VALUES ($questionnaire_id, $sample_import_id, $completions, $description, $priority, $autoprioritise)";
+
+ $db->Execute($sql);
+
+ $qq = $db->Insert_ID();
+
+ //Make sure to calculate on the spot
+ update_single_row_quota($qq);
+}
+
+if (isset($_POST['edit_quota']))
+{
+ $completions = intval($_POST['completions']);
+ $autoprioritise = 0;
+ if (isset($_POST['autoprioritise'])) $autoprioritise = 1;
+ $priority = intval($_POST['priority']);
+ $description = $db->quote($_POST['description']);
+ $qsqri = bigintval($_POST['qsqri']);
+
+ $sql = "UPDATE questionnaire_sample_quota_row
+ SET completions = $completions,
+ autoprioritise = $autoprioritise,
+ priority = $priority,
+ description = $description
+ WHERE questionnaire_sample_quota_row_id = $qsqri";
+
+ $db->Execute($sql);
+
+ $_GET['qsqri'] = $qsqri;
+ $_GET['edit'] = "edit";
+
+ //Make sure to calculate on the spot
+ update_single_row_quota($qsqri);
+}
+
+
+$qsqri = false;
+$qsqrid = false;
+if (isset($_GET['qsqri']) & isset($_GET['edit']))
+{
+ $qsqri = bigintval($_GET['qsqri']);
+
+ $sql = "SELECT questionnaire_id,sample_import_id,description,autoprioritise,priority,completions
+ FROM questionnaire_sample_quota_row
+ WHERE questionnaire_sample_quota_row_id = $qsqri";
+
+ $rs = $db->GetRow($sql);
+
+ $_GET['questionnaire_id'] = $rs['questionnaire_id'];
+ $_GET['sample_import_id'] = $rs['sample_import_id'];
+ $qsqrid = $rs['description'];
+ $qsqrich = "";
+ if ($rs['autoprioritise'] == 1)
+ $qsqrich = "checked=\"checked\"";
+ $qsqric = $rs['completions'];
+ $qsqrip = $rs['priority'];
+
+ if (isset($_POST['adds']))
+ {
+ $comparison = $db->qstr($_POST['comparisons']);
+ $exvar = $db->qstr(substr($_POST['sample_var'],12,strpos($_POST['sample_var'],'&')-12));
+ $exval = $db->qstr($_POST['exclude_val']);
+ //add ssample
+ $sql = "INSERT INTO qsqr_sample (questionnaire_sample_quota_row_id,exclude_var,exclude_val,comparison)
+ VALUES ($qsqri,$exvar,$exval,$comparison)";
+
+ $db->Execute($sql);
+
+ //Make sure to calculate on the spot
+ update_single_row_quota($qsqri);
+ }
+
+ if (isset($_POST['addq']))
+ {
+ $comparison = $db->qstr($_POST['comparison']);
+ $value = $db->qstr($_POST['value']);
+ $sgqa = $db->qstr(substr($_POST['sgqa'],6,strpos($_POST['sgqa'],'&')-6));
+ //add ssample
+ $sql = "INSERT INTO qsqr_question (questionnaire_sample_quota_row_id,lime_sgqa,value,comparison)
+ VALUES ($qsqri,$sgqa,$value,$comparison)";
+
+ $db->Execute($sql);
+
+ //Make sure to calculate on the spot
+ update_single_row_quota($qsqri);
+ }
+}
+
+$questionnaire_id = false;
+if (isset($_GET['questionnaire_id'])) $questionnaire_id = bigintval($_GET['questionnaire_id']);
+
+xhtml_head(T_("Quota row management"),true,array("../include/bootstrap-3.3.2/css/bootstrap.min.css","../include/bootstrap-toggle/css/bootstrap-toggle.min.css","../css/custom.css"),array("../js/jquery-2.1.3.min.js","../include/bootstrap-toggle/js/bootstrap-toggle.min.js","../js/window.js"));
+print "
" . T_("Questionnaire") . ":
";
+
+$sql = "SELECT questionnaire_id as value,description, CASE WHEN questionnaire_id = '$questionnaire_id' THEN 'selected=\'selected\'' ELSE '' END AS selected
+ FROM questionnaire
+ WHERE enabled = 1";
+display_chooser($db->GetAll($sql),"questionnaire","questionnaire_id", true,false,true,true,false,true,"form-inline pull-left ");
+
+
+if ($questionnaire_id != false)
+{
+ $sample_import_id = false;
+ if (isset($_GET['sample_import_id'])) $sample_import_id = bigintval($_GET['sample_import_id']);
+
+ print "
" . T_("Select a sample from the list below") . "
";
+
+ $sql = "SELECT s.sample_import_id as value,s.description, CASE WHEN s.sample_import_id = '$sample_import_id' THEN 'selected=\'selected\'' ELSE '' END AS selected
+ FROM sample_import as s, questionnaire_sample as q
+ WHERE q.questionnaire_id = $questionnaire_id
+ AND q.sample_import_id = s.sample_import_id";
+ $s = $db->GetAll($sql);
+ if (!empty($s)){
+ print "
";
+
+ ?>
+
+ " . TQ_("Delete") . "') as qdelete
+ FROM qsqr_question
+ WHERE questionnaire_sample_quota_row_id = $qsqri";
+
+
+ $rs = $db->GetAll($sql);
+
+ if (empty($rs))
+ {
+ print "
" . T_("All completed responses that match the sample criteria below will be counted towards the quota") . "
";
+ }
+ else
+ {
+ print "
" . T_("Only completed responses that have answered the following will be counted") . "
";
+ xhtml_table($rs,array('lime_sgqa','comparison','value','qdelete'),array(T_("Question"),T_("Comparison"),T_("Value"),T_("Delete")));
+ }
+
+ //add questionnaire references if any (refer to sample only or count completions based on responses to questions)
+
+ $sql = "SELECT lime_sid
+ FROM questionnaire
+ WHERE questionnaire_id = $questionnaire_id";
+
+ $lime_sid = $db->GetOne($sql);
+
+ $ssgqa = "''";
+ if (isset($_GET['sgqa']))
+ $ssgqa = $db->qstr($_GET['sgqa']);
+
+ //select question
+ $sql = "SELECT CONCAT( lq.sid, 'X', lq.gid, 'X', CASE WHEN lq.parent_qid = 0 THEN lq.qid ELSE CONCAT(lq.parent_qid, lq.title) END) as value, CASE WHEN lq.parent_qid = 0 THEN lq.question ELSE CONCAT(lq2.question, ': ', lq.question) END as description, CASE WHEN $ssgqa LIKE CONCAT( lq.sid, 'X', lq.gid, 'X', CASE WHEN lq.parent_qid = 0 THEN lq.qid ELSE CONCAT(lq.parent_qid, lq.title) END) THEN 'selected=\'selected\'' ELSE '' END AS selected
+ FROM `" . LIME_PREFIX . "questions` AS lq
+ LEFT JOIN `" . LIME_PREFIX . "questions` AS lq2 ON ( lq2.qid = lq.parent_qid )
+ JOIN `" . LIME_PREFIX . "groups` as g ON (g.gid = lq.gid)
+ WHERE lq.sid = '$lime_sid'
+ ORDER BY g.group_order ASC, lq.question_order ASC";
+
+ $rs = $db->GetAll($sql);
+
+ if (!empty($rs))
+ {
+ print "
+ " . TQ_("Delete") . "') as sdelete
+ FROM qsqr_sample
+ WHERE questionnaire_sample_quota_row_id = $qsqri";
+
+ $rs = $db->GetAll($sql);
+
+ if (empty($rs))
+ {
+ print "
" . T_("All sample records will be excluded") . "
";
+ }
+ else
+ {
+ print "
" . T_("Completed responses that have the following sample details will be counted towards the quota and excluded when the quota is reached") . "
";
+ xhtml_table($rs,array('exclude_var','comparison','exclude_val','sdelete'),array(T_("Sample record"),T_("Comparison"),T_("Value"),T_("Delete")));
+ }
+
+
+ $ssample_var = "''";
+ if (isset($_GET['sample_var']))
+ $ssample_var = $db->qstr($_GET['sample_var']);
+
+ //add sample references (records from sample to exclude when quota reached)
+ $sql = "SELECT sv.var as value, sv.var as description, CASE WHEN sv.var LIKE $ssample_var THEN 'selected=\'selected\'' ELSE '' END AS selected
+ FROM sample_var AS sv, sample AS s
+ WHERE s.import_id = $sample_import_id
+ AND s.sample_id = sv.sample_id
+ GROUP BY sv.var";
+
+ $rs = $db->GetAll($sql);
+
+ if (!empty($rs))
+ {
+ if ($ssample_var == "''")
+ $ssample_var = "'" . $rs[0]['value']. "'";
+
+ print "
" . T_("Add restriction based on sample records") . "
";
+ print "
+ " . T_("Current row quotas (click to edit)") . "";
+
+
+ $sql = "SELECT questionnaire_sample_quota_row_id,qsq.description,
+ CONCAT('', qsq.description, '') as qedit,
+ CONCAT('') as qselect,
+ qsq.completions,qsq.quota_reached,qsq.current_completions,
+ CASE WHEN qsq.autoprioritise = 1 THEN '" . TQ_("Yes") . "' ELSE '" . TQ_("No") . "' END AS ap, qsq.priority,
+ CASE WHEN qsq.quota_reached = 1 THEN '" . TQ_("closed") . "' ELSE '" . TQ_("open") . "' END AS status
+ FROM questionnaire_sample_quota_row as qsq, questionnaire as q
+ WHERE qsq.questionnaire_id = '$questionnaire_id'
+ AND qsq.sample_import_id = '$sample_import_id'
+ AND q.questionnaire_id = '$questionnaire_id'";
+
+ $r = $db->GetAll($sql);
+
+ print "";
+ print "
" . T_("Add row quota") . "
";
+ ?>
+
+ " . T_("Import row quota") . "";
+ ?>
+
+
diff --git a/admin/samplecallattempts.php b/admin/samplecallattempts.php
index 2928e425..0757ca08 100644
--- a/admin/samplecallattempts.php
+++ b/admin/samplecallattempts.php
@@ -1,216 +1,230 @@
-
- * @copyright Australian Consortium for Social and Political Research Incorporated (ACSPRI) 2009
- * @package queXS
- * @subpackage admin
- * @link http://www.acspri.org.au/ queXS was writen for ACSPRI
- * @license http://opensource.org/licenses/gpl-2.0.php The GNU General Public License (GPL) Version 2
- *
- */
-
-/**
- * Configuration file
- */
-include_once(dirname(__FILE__).'/../config.inc.php');
-
-/**
- * Database file
- */
-include ("../db.inc.php");
-
-/**
- * XHTML functions
- */
-include ("../functions/functions.xhtml.php");
-
-/**
- * Display functions
- */
-include("../functions/functions.display.php");
-
-/**
- * Input functions
- */
-include("../functions/functions.input.php");
-
-/**
- * Generate the sample call attempt report
- *
- * @param mixed $questionnaire_id The quesitonnaire, if specified
- * @param string $sample_id The sample, if speified
- * @param mixed $qsqri THe questionnaire sample quota row id, if specified
- *
- * @return false if empty otherwise true if table drawn
- * @author Adam Zammit
- * @since 2012-10-02
- */
-function sample_call_attempt_report($questionnaire_id = false, $sample_id = false, $qsqri = false)
-{
- global $db;
-
- $q = "";
- if ($questionnaire_id !== false && $questionnaire_id != -1)
- $q = "AND c.questionnaire_id = $questionnaire_id";
-
- $s = "";
- if ($sample_id !== false)
- $s = "JOIN sample as s ON (s.sample_id = c.sample_id AND s.import_id = '$sample_id')";
-
- $qs = "";
- if ($qsqri !== false)
- $qs = "JOIN questionnaire_sample_quota_row as q ON (q.questionnaire_sample_quota_row_id = '$qsqri')
- JOIN sample_var ON (sample_var.sample_id = c.sample_id AND sample_var.var_id = q.exclude_var_id AND sample_var.val LIKE q.exclude_val)";
-
- $sql = "SELECT ca1 AS callattempts, COUNT( ca1 ) AS sample
- FROM ( SELECT count( ca.call_attempt_id ) AS ca1
- FROM call_attempt as ca
- JOIN `case` as c ON (c.case_id = ca.case_id $q)
- $s
- $qs
- GROUP BY ca.case_id) AS t1
- GROUP BY ca1";
-
- $overall = $db->GetAll($sql);
-
- if (empty($overall))
- return false;
-
-
- $sql = "SELECT outcome_id,description
- FROM outcome";
-
- $outcomes = $db->GetAssoc($sql);
-
- translate_array($outcomes,array("description"));
-
- $rep = array("callattempts","sample");
- $rept = array(T_("Call attempts made"),T_("Number of cases"));
- $totals = array("sample");
-
- $outcomesfilled = array();
-
- foreach($outcomes as $key => $val)
- {
- $rep[] = $key;
- $rept[] = $val;
- $outcomesfilled[$key] = 0;
- }
-
- //Add breakdown by call attempt
- for ($i = 0; $i < count($overall); $i++)
- {
- //break down by outcome
- $sql = "SELECT oi1, ca1 as callattempts, count(ca1) as sample
- FROM ( SELECT count( ca.call_attempt_id ) AS ca1, ca.case_id, c.current_outcome_id as oi1
- FROM call_attempt AS ca
- JOIN `case` AS c ON ( c.case_id = ca.case_id $q)
- $s
- $qs
- GROUP BY ca.case_id
- ) as t1
- GROUP BY ca1,oi1
- HAVING ca1 = {$overall[$i]['callattempts']}";
-
- $byoutcome = $db->GetAssoc($sql);
-
- foreach($outcomes as $key => $val)
- {
- $sample = 0;
- if (isset($byoutcome[$key]))
- {
- $outcomesfilled[$key] = 1;
- $sample = $byoutcome[$key]['sample'];
- }
-
- $overall[$i][$key] = $sample;
- }
- }
-
- //Remove columns that are empty
- $count = 2;
- foreach ($outcomesfilled as $key => $val)
- {
- if ($val == 0)
- {
- unset($rep[$count]);
- unset($rept[$count]);
- }
- else
- $totals[] = $key;
-
- $count++;
- }
-
- xhtml_table($overall,$rep,$rept,"tclass",false,$totals);
- print "";
- return true;
-}
-
-
-xhtml_head(T_("Sample call attempt"),true,array("../include/bootstrap-3.3.2/css/bootstrap.min.css","../css/custom.css"),array("../js/window.js"));
-
-print "