mirror of
https://github.com/ACSPRI/queXS
synced 2024-04-02 12:12:16 +00:00
merged rev.448
!! requires check and update to operate with samle_var_id, exclude_var_id, Required layout rework to prev. model + bootstrap
This commit is contained in:
41
CHANGELOG
41
CHANGELOG
@@ -7,6 +7,46 @@ CREATE TABLE `questionnaire_sample_timeslot` (
|
||||
PRIMARY KEY ( `questionnaire_id` , `availability_group_id` , `sample_import_id` )
|
||||
) ENGINE = InnoDB DEFAULT CHARSET = utf8 COLLATE = utf8_unicode_ci;
|
||||
|
||||
CREATE TABLE `qsqr_question` (
|
||||
`qsqr_question_id` bigint(20) NOT NULL AUTO_INCREMENT,
|
||||
`questionnaire_sample_quota_row_id` bigint(20) NOT NULL,
|
||||
`lime_sgqa` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
|
||||
`value` varchar(2048) COLLATE utf8_unicode_ci NOT NULL,
|
||||
`comparison` varchar(15) COLLATE utf8_unicode_ci NOT NULL,
|
||||
`description` text COLLATE utf8_unicode_ci NOT NULL,
|
||||
PRIMARY KEY (`qsqr_question_id`),
|
||||
KEY `questionnaire_sample_quota_row_id` (`questionnaire_sample_quota_row_id`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=1 ;
|
||||
|
||||
CREATE TABLE `qsqr_sample` (
|
||||
`qsqr_sample_id` bigint(20) NOT NULL AUTO_INCREMENT,
|
||||
`questionnaire_sample_quota_row_id` bigint(20) NOT NULL,
|
||||
`exclude_var` char(128) COLLATE utf8_unicode_ci NOT NULL,
|
||||
`exclude_val` varchar(256) COLLATE utf8_unicode_ci NOT NULL,
|
||||
`comparison` varchar(15) COLLATE utf8_unicode_ci NOT NULL,
|
||||
`description` text COLLATE utf8_unicode_ci NOT NULL,
|
||||
PRIMARY KEY (`qsqr_sample_id`),
|
||||
KEY `questionnaire_sample_quota_row_id` (`questionnaire_sample_quota_row_id`),
|
||||
KEY `exclude_var` (`exclude_var`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=1 ;
|
||||
|
||||
|
||||
INSERT INTO qsqr_question (questionnaire_sample_quota_row_id,lime_sgqa,value,comparison)
|
||||
SELECT questionnaire_sample_quota_row_id, lime_sgqa, value, comparison
|
||||
FROM questionnaire_sample_quota_row
|
||||
WHERE lime_sgqa != -1 AND lime_sgqa != -2;
|
||||
|
||||
INSERT INTO qsqr_sample (questionnaire_sample_quota_row_id,exclude_var,exclude_val,comparison)
|
||||
SELECT questionnaire_sample_quota_row_id, exclude_var,exclude_val, 'LIKE'
|
||||
FROM questionnaire_sample_quota_row;
|
||||
|
||||
ALTER TABLE `questionnaire_sample_quota_row`
|
||||
DROP `lime_sgqa`,
|
||||
DROP `value`,
|
||||
DROP `comparison`,
|
||||
DROP `exclude_var`,
|
||||
DROP `exclude_val`;
|
||||
|
||||
queXS 1.11.1 - Changes since 1.11.0
|
||||
|
||||
Fixed Bug: Quota priority not able to override sort of last call made
|
||||
@@ -47,7 +87,6 @@ PRIMARY KEY ( `questionnaire_id` , `availability_group_id` )
|
||||
INSERT INTO `setting` (`setting_id`,`field`,`value`)
|
||||
VALUES (NULL , 'DEFAULT_TIME_ZONE', 's:18:"Australia/Victoria";');
|
||||
|
||||
|
||||
queXS 1.10.4 - Changes since 1.10.3
|
||||
|
||||
Fixed bug: Quota priority could get below 0
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -144,13 +144,14 @@ if ($questionnaire_id)
|
||||
//Rows to display: Strata Status Quota Sample Sample Used Sample Remaining Completes % Complete
|
||||
|
||||
|
||||
//We need to calc Sample size, Sample drawn, Sample remain, Completions, %complete
|
||||
//b. (Replicate quota) Exclude selected sample records (where lime_sgqa == -1)
|
||||
$sql = "SELECT questionnaire_sample_quota_row_id,lime_sgqa,value,completions,quota_reached,lime_sid,comparison,exclude_var_id,exclude_var,exclude_val,qsq.description,current_completions, priority, autoprioritise
|
||||
FROM questionnaire_sample_quota_row as qsq, questionnaire as q
|
||||
WHERE qsq.questionnaire_id = '$questionnaire_id'
|
||||
|
||||
//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'";
|
||||
AND q.questionnaire_id = '$questionnaire_id'";
|
||||
|
||||
$r = $db->GetAll($sql);
|
||||
|
||||
@@ -164,24 +165,28 @@ if ($questionnaire_id)
|
||||
$qsqr = $v['questionnaire_sample_quota_row_id'];
|
||||
|
||||
|
||||
if ($v['lime_sgqa'] == -1)
|
||||
{
|
||||
$v['completions'] = "";
|
||||
$perc = "";
|
||||
}
|
||||
else
|
||||
{
|
||||
$perc = ($v['completions'] <= 0 ? 0 : ROUND(($completions / ($v['completions'])) * 100,2));
|
||||
}
|
||||
|
||||
if($v['exclude_var_id'] > 0) $excl = "sv.var_id = '{$v['exclude_var_id']}'"; else $excl = "sv.var LIKE '{$v['exclude_var']}'";
|
||||
$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)
|
||||
JOIN sample_var as sv ON (sv.sample_id = s.sample_id AND sv.val LIKE '{$v['exclude_val']}' AND $excl )
|
||||
LEFT JOIN `case` as c ON (c.questionnaire_id = qs.questionnaire_id and c.sample_id = s.sample_id)
|
||||
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)";
|
||||
|
||||
@@ -196,7 +201,7 @@ if ($questionnaire_id)
|
||||
if ($r['type'] == 0) $remain = $r['count'];
|
||||
}
|
||||
|
||||
if ($completions < $v['completions'] || $v['lime_sgqa'] == -1) //if completions less than the quota, allow for closing/opening
|
||||
if ($completions < $v['completions']) //if completions less than the quota, allow for closing/opening
|
||||
{
|
||||
if ($v['quota_reached'] == 1)
|
||||
$status = "<a href='?questionnaire_id=$questionnaire_id&sample_import_id=$sample_import_id&rowquota=$qsqr&open=open'>" . T_("closed") . "</a>";
|
||||
@@ -211,7 +216,7 @@ if ($questionnaire_id)
|
||||
$status = T_("open");
|
||||
}
|
||||
|
||||
$report[] = array("strata" => "<a href='quotarow.php?questionnaire_id=$questionnaire_id&sample_import_id=$sample_import_id'>" . $v['description'] . "</a>", "status" => $status, "quota" => $v['completions'], "sample" => $drawn + $remain, "sampleused" => $drawn, "sampleremain" => $remain, "completions" => $completions, "perc" => $perc, "priority" => "<input type='number' maxlength='3' min='0' max='100' size='3' style='width:6em;' value='$priority' id='p$qsqr' name='p$qsqr' class='form-control'/>", "autoprioritise" => "<input type='checkbox' id='a$qsqr' name='a$qsqr' $checked />");
|
||||
$report[] = array("strata" => "<a href='quotarow.php?qsqri=$qsqr&edit=edit&questionnaire_id=$questionnaire_id&sample_import_id=$sample_import_id'>" . $v['description'] . "</a>", "status" => $status, "quota" => $v['completions'], "sample" => $drawn + $remain, "sampleused" => $drawn, "sampleremain" => $remain, "completions" => $completions, "perc" => $perc, "priority" => "<input type='number' maxlength='3' min='0' max='100' size='3' style='width:6em;' value='$priority' id='p$qsqr' name='p$qsqr' class='form-control'/>", "autoprioritise" => "<input type='checkbox' id='a$qsqr' name='a$qsqr' $checked />");
|
||||
}
|
||||
|
||||
//c. (Questionnaire quota) Monitor outcomes of questions in completed questionnaires, and abort interview when completion limit is reached
|
||||
|
||||
@@ -69,56 +69,212 @@ 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']))
|
||||
|
||||
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
|
||||
$value = -1;
|
||||
$comparison = -1;
|
||||
$completions = -1;
|
||||
$sgqa = -1;
|
||||
$completions = intval($_POST['completions']);
|
||||
$autoprioritise = 0;
|
||||
|
||||
if (isset($_GET['autoprioritise'])) $autoprioritise = 1;
|
||||
|
||||
$priority = intval($_GET['priority']);
|
||||
if (isset($_POST['autoprioritise'])) $autoprioritise = 1;
|
||||
$priority = intval($_POST['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']);
|
||||
$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, 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)";
|
||||
$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_quotas($questionnaire_id);
|
||||
update_single_row_quota($qsqri);
|
||||
}
|
||||
|
||||
if (isset($_GET['questionnaire_id']) && isset($_GET['questionnaire_sample_quota_row_id']))
|
||||
|
||||
$qsqri = false;
|
||||
$qsqrid = false;
|
||||
if (isset($_GET['qsqri']) & isset($_GET['edit']))
|
||||
{
|
||||
//need to remove quota
|
||||
$qsqri = bigintval($_GET['qsqri']);
|
||||
|
||||
$questionnaire_id = bigintval($_GET['questionnaire_id']);
|
||||
$questionnaire_sample_quota_row_id = bigintval($_GET['questionnaire_sample_quota_row_id']);
|
||||
$sql = "SELECT questionnaire_id,sample_import_id,description,autoprioritise,priority,completions
|
||||
FROM questionnaire_sample_quota_row
|
||||
WHERE questionnaire_sample_quota_row_id = $qsqri";
|
||||
|
||||
open_row_quota($questionnaire_sample_quota_row_id);
|
||||
$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;
|
||||
@@ -138,7 +294,7 @@ if ($questionnaire_id != false)
|
||||
$sample_import_id = false;
|
||||
if (isset($_GET['sample_import_id'])) $sample_import_id = bigintval($_GET['sample_import_id']);
|
||||
|
||||
|
||||
print "<h1>" . T_("Select a sample from the list below") . "</h1>";
|
||||
|
||||
$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
|
||||
@@ -147,240 +303,273 @@ if ($questionnaire_id != false)
|
||||
$s = $db->GetAll($sql);
|
||||
if (!empty($s)){
|
||||
print "<h3 class='form-inline pull-left'>   " . T_("Sample") . ": </h3>";
|
||||
display_chooser($s,"sample","sample_import_id",true,"questionnaire_id=$questionnaire_id",true,true,false,true,"pull-left");
|
||||
|
||||
display_chooser($s,"sample","sample_import_id",true,"questionnaire_id=$questionnaire_id",true,true,false,true,"pull-left");
|
||||
} else {
|
||||
print "<div class='clearfix'></div><div class='well text-info'>" . T_("No samples assigned to this questionnaire.") . "</div>";
|
||||
}
|
||||
print "<div class='clearfix'></div>";
|
||||
|
||||
|
||||
if ($sample_import_id != false)
|
||||
{
|
||||
if (isset($_POST['copy_sample_import_id']))
|
||||
{
|
||||
copy_row_quota($questionnaire_id,$sample_import_id,bigintval($_POST['copy_sample_import_id']));
|
||||
print "<h3>" . T_("Copied quotas") . ":</h3>";
|
||||
}
|
||||
{
|
||||
if (isset($_POST['import_quota']))
|
||||
{
|
||||
if (isset($_FILES['file']['tmp_name']))
|
||||
{
|
||||
$handle = fopen($_FILES['file']['tmp_name'], "r");
|
||||
while (($data = fgetcsv($handle)) !== FALSE)
|
||||
{
|
||||
if (count($data) > 2)
|
||||
{
|
||||
//one quota record per row
|
||||
$completions = intval($data[1]);
|
||||
$autoprioritise = 0;
|
||||
if ($data[2] != 0) $autoprioritise = 1;
|
||||
$description = $db->quote($data[0]);
|
||||
|
||||
if (isset($_POST['copy_sample_import_id_with_adjustment']))
|
||||
{
|
||||
copy_row_quota_with_adjusting($questionnaire_id,$sample_import_id,bigintval($_POST['copy_sample_import_id_with_adjustment']));
|
||||
print "<h3>" . T_("Copied quotas with adjustment") . ":</h3>";
|
||||
}
|
||||
$sql = "INSERT INTO questionnaire_sample_quota_row(questionnaire_id, sample_import_id, completions, description, priority, autoprioritise)
|
||||
VALUES ($questionnaire_id, $sample_import_id, $completions, $description, 50, $autoprioritise)";
|
||||
|
||||
print "<h2>" . T_("Current row quotas ") . ":</h2>"; //(click to delete)
|
||||
$db->Execute($sql);
|
||||
|
||||
$sql = "SELECT questionnaire_sample_quota_row_id, lime_sgqa, value, completions, quota_reached, lime_sid, comparison, exclude_var, exclude_val, current_completions
|
||||
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'";
|
||||
$qq = $db->Insert_ID();
|
||||
|
||||
$r = $db->GetAll($sql);
|
||||
if (count($data) > 5) //also some other records
|
||||
{
|
||||
//check if records exist (come in triplets
|
||||
for ($i = 1; isset($data[$i * 3]) && !empty($data[$i*3]); $i++)
|
||||
{
|
||||
if (preg_match("/\d+X\d+X.+/",$data[$i*3]))
|
||||
{
|
||||
//is a limesurvey question
|
||||
$comparison = $db->qstr($data[($i*3) + 1]);
|
||||
$value = $db->qstr($data[($i*3) + 2]);
|
||||
$sgqa = $db->qstr($data[$i*3]);
|
||||
|
||||
if (empty($r))
|
||||
{
|
||||
print "<p class='well text-info'>" . T_("Currently no row quotas") . "</p>";
|
||||
}
|
||||
else
|
||||
{
|
||||
foreach($r as $v)
|
||||
{
|
||||
if ($v['lime_sgqa'] == -1)
|
||||
print "<div><a href='?questionnaire_id=$questionnaire_id&sample_import_id=$sample_import_id&questionnaire_sample_quota_row_id={$v['questionnaire_sample_quota_row_id']}'>" . T_("Replicate: Where") . " " . $v['exclude_var'] . " " . T_("like") . " " . $v['exclude_val'] . "</a> - ";
|
||||
else if ($v['lime_sgqa'] == -2)
|
||||
print "<div><a href='?questionnaire_id=$questionnaire_id&sample_import_id=$sample_import_id&questionnaire_sample_quota_row_id={$v['questionnaire_sample_quota_row_id']}'>" . T_("Sample only. Stop calling where") . " " . $v['exclude_var'] . " " . T_("like") . " " . $v['exclude_val'] . " " . T_("rows from this sample when:") . " {$v['completions']} " . T_("completions") . "</a> - ";
|
||||
$sql = "INSERT INTO qsqr_question (questionnaire_sample_quota_row_id,lime_sgqa,value,comparison)
|
||||
VALUES ($qq,$sgqa,$value,$comparison)";
|
||||
|
||||
else
|
||||
print "<div><a href='?questionnaire_id=$questionnaire_id&sample_import_id=$sample_import_id&questionnaire_sample_quota_row_id={$v['questionnaire_sample_quota_row_id']}'>" . T_("Stop calling") . " " . $v['exclude_var'] . " " . T_("like") . " " . $v['exclude_val'] . " " . T_("rows from this sample when:") . " {$v['lime_sgqa']} {$v['comparison']} {$v['value']} " . T_("for") . ": {$v['completions']} " . T_("completions") ."</a> - ";
|
||||
$db->Execute($sql);
|
||||
}
|
||||
else
|
||||
{
|
||||
//is a sample variable
|
||||
$comparison = $db->qstr($data[($i*3) + 1]);
|
||||
$value = $db->qstr($data[($i*3) + 2]);
|
||||
$var = $db->qstr($data[$i*3]);
|
||||
|
||||
if ($v['quota_reached'] == 1)
|
||||
print T_("Row quota reached (Closed)");
|
||||
else
|
||||
print T_("Row quota not yet reached (Open)");
|
||||
$sql = "INSERT INTO qsqr_sample (questionnaire_sample_quota_row_id,exclude_var,exclude_val,comparison)
|
||||
VALUES ($qq,$var,$value,$comparison)";
|
||||
|
||||
if ($v['lime_sgqa'] != -1)
|
||||
print " - " . T_("Current completions: ") . $v['current_completions'] . ":" . limesurvey_quota_completions($v['lime_sgqa'],$v['lime_sid'],$questionnaire_id,$sample_import_id,$v['value'],$v['comparison']);
|
||||
$db->Execute($sql);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
print "</div>";
|
||||
|
||||
}
|
||||
|
||||
$sql = "SELECT s.sample_import_id as value,s.description, '' 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
|
||||
AND s.sample_import_id != '$sample_import_id'";
|
||||
|
||||
$ss = $db->GetAll($sql);
|
||||
|
||||
if (!empty($ss))
|
||||
{
|
||||
print "<form action='?questionnaire_id=$questionnaire_id&sample_import_id=$sample_import_id' method='post'>
|
||||
<p>" . T_("Copy quotas for this sample to (No error/duplicate checking): ");
|
||||
display_chooser($ss,"copy_sample_import_id","copy_sample_import_id",false,false,false,false);
|
||||
print "<input type='submit' id='submit' value=\"" . T_("Copy") . "\"/></p></form>";
|
||||
|
||||
print "<form action='?questionnaire_id=$questionnaire_id&sample_import_id=$sample_import_id' method='post'>
|
||||
<p>" . T_("Copy quotas for this sample to (No error/duplicate checking) with adjusting: ");
|
||||
display_chooser($ss,"copy_sample_import_id_with_adjustment","copy_sample_import_id_with_adjustment",false,false,false,false);
|
||||
print "<input type='submit' id='submit' value=\"" . T_("Copy adjustments") . "\"/></p></form>";
|
||||
}
|
||||
|
||||
}
|
||||
//Make sure to calculate on the spot
|
||||
update_single_row_quota($qq);
|
||||
}
|
||||
}
|
||||
fclose($handle);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
print "<h3>" . T_("Select a question for the row quota") . ": </h3>";
|
||||
|
||||
$sql = "SELECT lime_sid
|
||||
FROM questionnaire
|
||||
WHERE questionnaire_id = '$questionnaire_id'";
|
||||
if ($qsqri != false)
|
||||
{
|
||||
print "<h2>" . T_("Quota") . ": $qsqrid</h2>";
|
||||
print "<p><a href='?questionnaire_id=$questionnaire_id&sample_import_id=$sample_import_id'>" . T_("Go back") . "</a></p>";
|
||||
|
||||
$r = $db->GetRow($sql);
|
||||
?>
|
||||
<form action="?<?php echo "questionnaire_id=$questionnaire_id&sample_import_id=$sample_import_id"; ?>" method="post">
|
||||
<p>
|
||||
<label for="description"><?php echo T_("Describe this quota"); ?> </label><input type="text" name="description" id="description" value="<?php echo $qsqrid;?>"/> <br/>
|
||||
<label for="priority"><?php echo T_("Quota priority (50 is default, 100 highest, 0 lowest)"); ?> </label><input type="text" name="priority" id="priority" value="<?php echo $qsqrip;?>"/> <br/>
|
||||
<label for="autoprioritise"><?php echo T_("Should the priority be automatically updated based on the number of completions in this quota?"); ?> </label><input type="checkbox" name="autoprioritise" id="autoprioritise" <?php echo $qsqrich; ?>/> <br/>
|
||||
<label for="completions"><?php echo T_("The number of completions to stop calling at"); ?> </label><input type="text" name="completions" id="completions" value="<?php echo $qsqric; ?>"/> <br/>
|
||||
<input type="hidden" name="qsqri" value="<?php echo $qsqri; ?>"/>
|
||||
<input type="submit" name="edit_quota" value="<?php print(T_("Edit row quota")); ?>"/></p>
|
||||
</form>
|
||||
<?php
|
||||
|
||||
$lime_sid = $r['lime_sid'];
|
||||
//display questionnaire references
|
||||
$sql = "SELECT qsqr_question_id,lime_sgqa,value,comparison,description,
|
||||
CONCAT('<a href=\'?edit=edit&qsqri=$qsqri&delete=delete&qsqrqi=', qsqr_question_id, '\'>" . TQ_("Delete") . "</a>') as qdelete
|
||||
FROM qsqr_question
|
||||
WHERE questionnaire_sample_quota_row_id = $qsqri";
|
||||
|
||||
$sgqa = false;
|
||||
if (isset($_GET['sgqa'])) $sgqa = $_GET['sgqa'];
|
||||
|
||||
$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 CONCAT( lq.sid, 'X', lq.gid, 'X', CASE WHEN lq.parent_qid = 0 THEN lq.qid ELSE CONCAT(lq.parent_qid, lq.title) END) = '$sgqa' 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 CASE WHEN lq2.question_order IS NULL THEN lq.question_order ELSE lq2.question_order + (lq.question_order / 1000) END ASC";
|
||||
$rs = $db->GetAll($sql);
|
||||
|
||||
$rs = $db->GetAll($sql);
|
||||
if (empty($rs))
|
||||
{
|
||||
print "<h3>" . T_("All completed responses that match the sample criteria below will be counted towards the quota") . "</h3>";
|
||||
}
|
||||
else
|
||||
{
|
||||
print "<h3>" . T_("Only completed responses that have answered the following will be counted") . "</h3>";
|
||||
xhtml_table($rs,array('lime_sgqa','comparison','value','qdelete'),array(T_("Question"),T_("Comparison"),T_("Value"),T_("Delete")));
|
||||
}
|
||||
|
||||
$selected = "";
|
||||
if ($sgqa == -1) $selected = "selected='selected'";
|
||||
array_unshift($rs,array("value" => -1, "description" => T_("No question (Replicate)"), "selected" => $selected));
|
||||
//add questionnaire references if any (refer to sample only or count completions based on responses to questions)
|
||||
|
||||
$selected = "";
|
||||
if ($sgqa == -2) $selected = "selected='selected'";
|
||||
array_unshift($rs,array("value" => -2, "description" => T_("Sample only quota"), "selected" => $selected));
|
||||
$sql = "SELECT lime_sid
|
||||
FROM questionnaire
|
||||
WHERE questionnaire_id = $questionnaire_id";
|
||||
|
||||
display_chooser($rs,"sgqa","sgqa",true,"questionnaire_id=$questionnaire_id&sample_import_id=$sample_import_id");
|
||||
$lime_sid = $db->GetOne($sql);
|
||||
|
||||
print "</br>";
|
||||
$ssgqa = "''";
|
||||
if (isset($_GET['sgqa']))
|
||||
$ssgqa = $db->qstr($_GET['sgqa']);
|
||||
|
||||
if ($sgqa != false)
|
||||
{
|
||||
$sample_var_id = false;
|
||||
if (isset($_GET['sample_var_id']))
|
||||
$sample_var_id = $_GET['sample_var_id'];
|
||||
//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";
|
||||
|
||||
print "<h3 class='form-inline pull-left'>" . T_("Select the sample variable to exclude") . ": </h3>";
|
||||
$rs = $db->GetAll($sql);
|
||||
|
||||
$sql = "SELECT sivr.var_id as value, sivr.var as description,
|
||||
CASE WHEN sivr.var_id = '$sample_var_id' THEN 'selected=\'selected\'' ELSE '' END AS selected
|
||||
FROM `sample_import_var_restrict` as sivr
|
||||
WHERE sivr.sample_import_id = '$sample_import_id'";
|
||||
if (!empty($rs))
|
||||
{
|
||||
print "<form method='post' action='?qsqri=$qsqri&edit=edit'>";
|
||||
print "<h4>" . T_("Add restriction based on answered questions") . "</h4>";
|
||||
print "<label for='sgqa'>" . T_("Question") . "</label>";
|
||||
display_chooser($rs,"sgqa","sgqa",false,"edit=edit&qsqri=$qsqri",true,false);
|
||||
?>
|
||||
<br/><label for="comparison"><?php echo T_("The type of comparison"); ?></label><select name="comparison" id="comparison"><option value="LIKE">LIKE</option><option value="NOT LIKE">NOT LIKE</option><option value="=">=</option><option value="!=">!=</option><option value="<"><</option><option value=">">></option><option value="<="><=</option><option value=">=">>=</option></select><br/>
|
||||
<label for="value"><?php echo T_("The code value to compare"); ?> </label><input type="text" name="value" id="value"/> <br/>
|
||||
<input type="submit" name="addq" value="<?php echo TQ_("Add restriction") ?>"/>
|
||||
</form>
|
||||
<?php
|
||||
}
|
||||
|
||||
$rsv = $db->GetAll($sql);
|
||||
//list sample records to exclude
|
||||
|
||||
$sample_var = $rsv[0]['description'];
|
||||
$sql = "SELECT qsqr_sample_id,exclude_var,exclude_val,comparison,description,
|
||||
CONCAT('<a href=\'?qsqri=$qsqri&edit=edit&delete=delete&qsqrsi=',qsqr_sample_id,'\'>" . TQ_("Delete") . "</a>') as sdelete
|
||||
FROM qsqr_sample
|
||||
WHERE questionnaire_sample_quota_row_id = $qsqri";
|
||||
|
||||
display_chooser($rsv,"sample_var_id","sample_var_id",true,"questionnaire_id=$questionnaire_id&sample_import_id=$sample_import_id&sgqa=$sgqa",true,true,false,true,"pull-left");
|
||||
$rs = $db->GetAll($sql);
|
||||
|
||||
print "<div class='clearfix form-group'></div>";
|
||||
if (empty($rs))
|
||||
{
|
||||
print "<h3>" . T_("All sample records will be excluded") . "</h3>";
|
||||
}
|
||||
else
|
||||
{
|
||||
print "<h3>" . T_("Completed responses that have the following sample details will be counted towards the quota and excluded when the quota is reached") . "</h3>";
|
||||
xhtml_table($rs,array('exclude_var','comparison','exclude_val','sdelete'),array(T_("Sample record"),T_("Comparison"),T_("Value"),T_("Delete")));
|
||||
}
|
||||
|
||||
if ($sample_var_id != false)
|
||||
{
|
||||
|
||||
print "<div class='col-sm-6 panel-body'><h3>" . T_("Enter the details for creating the row quota:") . "</h3>";
|
||||
$ssample_var = "''";
|
||||
if (isset($_GET['sample_var']))
|
||||
$ssample_var = $db->qstr($_GET['sample_var']);
|
||||
|
||||
?>
|
||||
<form action="" method="get" class="form-inline table">
|
||||
//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";
|
||||
|
||||
<p><label for="description"><?php echo T_("Describe this quota"); ?>: </label>
|
||||
<input type="text" class="form-control" name="description" id="description" required size="60"/></p>
|
||||
$rs = $db->GetAll($sql);
|
||||
|
||||
<p><label for="priority"><?php echo T_("Quota priority (50 is default, 100 highest, 0 lowest)"); ?>: </label>
|
||||
<input type="number" class="form-control" name="priority" id="priority" value="50" min="0" max="100" style="width:5em;"/></p>
|
||||
if (!empty($rs))
|
||||
{
|
||||
if ($ssample_var == "''")
|
||||
$ssample_var = "'" . $rs[0]['value']. "'";
|
||||
|
||||
<p><label for="autoprioritise"><?php echo T_("Should the priority be automatically updated ?</br> (based on the number of completions in this quota)"); ?> </label>
|
||||
<input type="checkbox" name="autoprioritise" id="autoprioritise" data-toggle="toggle" data-on="<?php echo T_("Yes"); ?>" data-off="<?php echo T_("No"); ?>" data-offstyle="warning"/></p>
|
||||
<?php if ($sgqa != -1) { if ($sgqa != -2) { ?>
|
||||
|
||||
<p><label for="comparison"><?php echo T_("The type of comparison"); ?>: </label>
|
||||
<select name="comparison" class="form-control" id="comparison">
|
||||
<option value="LIKE">LIKE</option>
|
||||
<option value="NOT LIKE">NOT LIKE</option>
|
||||
<option value="=">=</option><option value="!=">!=</option>
|
||||
<option value="<"><</option><option value=">">></option>
|
||||
<option value="<="><=</option><option value=">=">>=</option>
|
||||
</select></p>
|
||||
|
||||
<p><label for="value"><?php echo T_("The code value to compare"); ?>: </label>
|
||||
<input type="text" class="form-control" name="value" id="value" required /></p>
|
||||
|
||||
<?php } else { ?>
|
||||
<input type="hidden" name="value" value="-2"/>
|
||||
<input type="hidden" name="comparison" value="-2"/>
|
||||
<?php } ?>
|
||||
|
||||
<p><label for="completions"><?php echo T_("The number of completions to stop calling at"); ?>: </label>
|
||||
<input type="number" class="form-control" name="completions" id="completions" size="6" maxlength="6" style="width:6em;" required/></p>
|
||||
|
||||
<?php } else { ?>
|
||||
<input type="hidden" name="value" value="-1"/>
|
||||
<input type="hidden" name="comparison" value="-1"/>
|
||||
<input type="hidden" name="completions" value="-1"/>
|
||||
<?php } ?>
|
||||
|
||||
<p><label for="exclude_val"><?php echo T_("Exclude from the sample where the value is like"); ?>: </label>
|
||||
print "<h4>" . T_("Add restriction based on sample records") . "</h4>";
|
||||
print "<form method='post' action='?edit=edit&qsqri=$qsqri'>";
|
||||
print "<label for='sample_var'>" . T_("Sample record") . "</label>";
|
||||
display_chooser($rs,"sample_var","sample_var",false,"edit=edit&qsqri=$qsqri",true,false);
|
||||
?>
|
||||
<br/><label for="comparisons"><?php echo T_("The type of comparison"); ?></label><select name="comparisons" id="comparisons"><option value="LIKE">LIKE</option><option value="NOT LIKE">NOT LIKE</option><option value="=">=</option><option value="!=">!=</option><option value="<"><</option><option value=">">></option><option value="<="><=</option><option value=">=">>=</option></select><br/>
|
||||
<label for="exclude_val"><?php echo T_("Value"); ?></label>
|
||||
<?php
|
||||
|
||||
$sql = "SELECT sv.val as value, sv.val as description, '' AS selected
|
||||
FROM sample_var AS sv, sample AS s
|
||||
WHERE s.import_id = $sample_import_id
|
||||
AND s.sample_id = sv.sample_id
|
||||
AND sv.var_id = '$sample_var_id'
|
||||
AND sv.var = $ssample_var
|
||||
GROUP BY sv.val";
|
||||
|
||||
display_chooser($db->GetAll($sql),"exclude_val","exclude_val",false,false,false,false);
|
||||
flush();
|
||||
?>
|
||||
</p>
|
||||
<input type="hidden" name="exclude_var" value="<?php print($sample_var); ?>"/>
|
||||
<input type="hidden" name="exclude_var_id" value="<?php print($sample_var_id); ?>"/>
|
||||
<input type="hidden" name="questionnaire_id" value="<?php print($questionnaire_id); ?>"/>
|
||||
<input type="hidden" name="sample_import_id" value="<?php print($sample_import_id); ?>"/>
|
||||
<input type="hidden" name="sgqa" value="<?php print($sgqa); ?>"/>
|
||||
?>
|
||||
<br/><input type="submit" name="adds" value="<?php echo TQ_("Add restriction") ?>"/>
|
||||
</form>
|
||||
<?php
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
<input type="submit" name="add_quota" value="<?php print(T_("Add row quota")); ?>" class="btn btn-primary fa"/>
|
||||
</form>
|
||||
<?php
|
||||
|
||||
print "</div>";
|
||||
print "<h1>" . T_("Current row quotas (click to edit)") . "</h1>";
|
||||
|
||||
print "<div class='col-sm-6 panel-body'><h3>" . T_("Code values for this question") . ":</h3>";
|
||||
|
||||
$rs = "";
|
||||
$sql = "SELECT questionnaire_sample_quota_row_id,qsq.description,
|
||||
CONCAT('<a href=\'?edit=edit&qsqri=',questionnaire_sample_quota_row_id,'\'>', qsq.description, '</a>') as qedit,
|
||||
CONCAT('<input type=\'checkbox\' name=\'select_',questionnaire_sample_quota_row_id,'\'/>') 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'";
|
||||
|
||||
if ($sgqa != -2 && $sgqa != -1 && !empty($sgqa))
|
||||
{
|
||||
$qid = explode("X", $sgqa);
|
||||
$qid = $qid[2];
|
||||
$r = $db->GetAll($sql);
|
||||
|
||||
$sql = "SELECT CONCAT('<b class=\'fa\'> ', l.code , '</b>')as code, l.answer as title
|
||||
FROM `" . LIME_PREFIX . "answers` as l
|
||||
WHERE l.qid = '$qid'";
|
||||
|
||||
$rs = $db->GetAll($sql);
|
||||
}
|
||||
|
||||
if (!isset($rs) || empty($rs))
|
||||
print "<p class='well text-info'>" . T_("No labels defined for this question") ."</p>";
|
||||
else
|
||||
xhtml_table($rs,array('code','title'),array(T_("Code value"), T_("Description")));
|
||||
|
||||
print "</div>";
|
||||
}
|
||||
print "<form method='post' action='?questionnaire_id=$questionnaire_id&sample_import_id=$sample_import_id'>";
|
||||
if (empty($r))
|
||||
{
|
||||
print "<p>" . T_("Currently no row quotas") . "</p>";
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
xhtml_table($r,array('qedit','completions','current_completions','status','priority','ap','qselect'),array(T_("Description"),T_("Quota"),T_("Completions"),T_("Status"),T_("Priority"),T_("Auto prioritise"),T_("Select")));
|
||||
print "<input type='submit' name='submitdelete' value='" . TQ_("Delete selected") . "'/>";
|
||||
print "<input type='submit' name='submitexport' value='" . TQ_("Export selected") . "'/>";
|
||||
|
||||
//select sample
|
||||
|
||||
}
|
||||
print "</form>";
|
||||
print "<h2>" . T_("Add row quota") . "</h2>";
|
||||
?>
|
||||
<form action="?<?php echo "questionnaire_id=$questionnaire_id&sample_import_id=$sample_import_id"; ?>" method="post">
|
||||
<p>
|
||||
<label for="description"><?php echo T_("Describe this quota"); ?> </label><input type="text" name="description" id="description"/> <br/>
|
||||
<label for="priority"><?php echo T_("Quota priority (50 is default, 100 highest, 0 lowest)"); ?> </label><input type="text" name="priority" id="priority" value="50"/> <br/>
|
||||
<label for="autoprioritise"><?php echo T_("Should the priority be automatically updated based on the number of completions in this quota?"); ?> </label><input type="checkbox" name="autoprioritise" id="autoprioritise"/> <br/>
|
||||
<label for="completions"><?php echo T_("The number of completions to stop calling at"); ?> </label><input type="text" name="completions" id="completions"/> <br/>
|
||||
<input type="submit" name="add_quota" value="<?php print(T_("Add row quota")); ?>"/></p>
|
||||
</form>
|
||||
<?php
|
||||
|
||||
print "<h2>" . T_("Import row quota") . "</h2>";
|
||||
?>
|
||||
<form enctype="multipart/form-data" action="<?php echo "?questionnaire_id=$questionnaire_id&sample_import_id=$sample_import_id"; ?>" method="post">
|
||||
<p><input type="hidden" name="MAX_FILE_SIZE" value="1000000000" /></p>
|
||||
<p><?php echo T_("Choose the CSV row quota file to import:"); ?><input name="file" type="file" /></p>
|
||||
<p><input type="submit" name="import_quota" value="<?php print(T_("Import row quota")); ?>"/></p>
|
||||
</form>
|
||||
<?php
|
||||
}
|
||||
}
|
||||
}
|
||||
xhtml_foot();
|
||||
|
||||
|
||||
?>
|
||||
@@ -77,9 +77,23 @@ function sample_call_attempt_report($questionnaire_id = false, $sample_id = fals
|
||||
$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)";
|
||||
|
||||
if ($qsqri !== false)
|
||||
{
|
||||
$sql2 = "SELECT exclude_val,exclude_var,exclude_var_id,comparison
|
||||
FROM qsqr_sample
|
||||
WHERE questionnaire_sample_quota_row_id = $qsqri";
|
||||
|
||||
$rev = $db->GetAll($sql2);
|
||||
|
||||
//reduce sample by every item in the qsqr_sample table
|
||||
$x = 1;
|
||||
foreach($rev as $ev)
|
||||
{
|
||||
$qs .= " JOIN sample_var_id as sv$x ON (sv$x.sample_id = c.sample_id AND sv$x.var_id = '{$ev['exclude_var_id']}' AND sv$x.val {$ev['comparison']} '{$ev['exclude_val']}') ";
|
||||
$x++;
|
||||
}
|
||||
}
|
||||
|
||||
$sql = "SELECT ca1 AS callattempts, COUNT( ca1 ) AS sample
|
||||
FROM ( SELECT count( ca.call_attempt_id ) AS ca1
|
||||
|
||||
@@ -1362,8 +1362,40 @@ CREATE TABLE `process_log` (
|
||||
--
|
||||
|
||||
|
||||
-- Table structure for table `qsqr_question`
|
||||
--
|
||||
--
|
||||
|
||||
CREATE TABLE `qsqr_question` (
|
||||
`qsqr_question_id` bigint(20) NOT NULL AUTO_INCREMENT,
|
||||
`questionnaire_sample_quota_row_id` bigint(20) NOT NULL,
|
||||
`lime_sgqa` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
|
||||
`value` varchar(2048) COLLATE utf8_unicode_ci NOT NULL,
|
||||
`comparison` varchar(15) COLLATE utf8_unicode_ci NOT NULL,
|
||||
`description` text COLLATE utf8_unicode_ci NOT NULL,
|
||||
PRIMARY KEY (`qsqr_question_id`),
|
||||
KEY `questionnaire_sample_quota_row_id` (`questionnaire_sample_quota_row_id`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=1 ;
|
||||
|
||||
-- --------------------------------------------------------
|
||||
|
||||
--
|
||||
-- Table structure for table `qsqr_sample`
|
||||
--
|
||||
|
||||
CREATE TABLE `qsqr_sample` (
|
||||
`qsqr_sample_id` bigint(20) NOT NULL AUTO_INCREMENT,
|
||||
`questionnaire_sample_quota_row_id` bigint(20) NOT NULL,
|
||||
`exclude_var` char(128) COLLATE utf8_unicode_ci NOT NULL,
|
||||
`exclude_val` varchar(256) COLLATE utf8_unicode_ci NOT NULL,
|
||||
`comparison` varchar(15) COLLATE utf8_unicode_ci NOT NULL,
|
||||
`description` text COLLATE utf8_unicode_ci NOT NULL,
|
||||
PRIMARY KEY (`qsqr_sample_id`),
|
||||
KEY `questionnaire_sample_quota_row_id` (`questionnaire_sample_quota_row_id`),
|
||||
KEY `exclude_var` (`exclude_var`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=1 ;
|
||||
|
||||
|
||||
--
|
||||
-- Table structure for table `questionnaire`
|
||||
--
|
||||
@@ -1513,12 +1545,7 @@ CREATE TABLE `questionnaire_sample_quota_row` (
|
||||
`questionnaire_sample_quota_row_id` bigint(20) NOT NULL auto_increment,
|
||||
`questionnaire_id` bigint(20) NOT NULL,
|
||||
`sample_import_id` bigint(20) NOT NULL,
|
||||
`lime_sgqa` varchar(255) collate utf8_unicode_ci NOT NULL,
|
||||
`value` varchar(2048) collate utf8_unicode_ci NOT NULL,
|
||||
`comparison` varchar(15) collate utf8_unicode_ci NOT NULL default 'LIKE',
|
||||
`completions` int(11) NOT NULL,
|
||||
`exclude_var` char(128) collate utf8_unicode_ci NOT NULL,
|
||||
`exclude_val` varchar(256) collate utf8_unicode_ci NOT NULL,
|
||||
`quota_reached` tinyint(1) NOT NULL default '0',
|
||||
`current_completions` int(11) NOT NULL default '0',
|
||||
`description` text collate utf8_unicode_ci NOT NULL,
|
||||
@@ -1526,8 +1553,7 @@ CREATE TABLE `questionnaire_sample_quota_row` (
|
||||
`autoprioritise` tinyint(1) NOT NULL default '0' COMMENT 'Should this row have it''s priority automatically adjusted to 100 - (completions %)',
|
||||
PRIMARY KEY (`questionnaire_sample_quota_row_id`),
|
||||
KEY `questionnaire_id` (`questionnaire_id`),
|
||||
KEY `sample_import_id` (`sample_import_id`),
|
||||
KEY `exclude_var` (`exclude_var`)
|
||||
KEY `sample_import_id` (`sample_import_id`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
|
||||
|
||||
--
|
||||
|
||||
@@ -1466,6 +1466,17 @@ function open_row_quota($questionnaire_sample_quota_row_id,$delete = true)
|
||||
WHERE questionnaire_sample_quota_row_id = '$questionnaire_sample_quota_row_id'";
|
||||
|
||||
$db->Execute($sql);
|
||||
|
||||
$sql = "DELETE FROM qsqr_sample
|
||||
WHERE questionnaire_sample_quota_row_id = '$questionnaire_sample_quota_row_id'";
|
||||
|
||||
$db->Execute($sql);
|
||||
|
||||
$sql = "DELETE FROM qsqr_question
|
||||
WHERE questionnaire_sample_quota_row_id = '$questionnaire_sample_quota_row_id'";
|
||||
|
||||
$db->Execute($sql);
|
||||
|
||||
}
|
||||
|
||||
$sql = "DELETE FROM questionnaire_sample_quota_row_exclude
|
||||
@@ -1506,16 +1517,28 @@ function close_row_quota($questionnaire_sample_quota_row_id,$update = true)
|
||||
$rs = $db->GetRow($sql);
|
||||
|
||||
if (isset($coun['c']) && $coun['c'] == 0)
|
||||
{
|
||||
//store list of sample records to exclude
|
||||
$sql = "INSERT INTO questionnaire_sample_quota_row_exclude (questionnaire_sample_quota_row_id,questionnaire_id,sample_id)
|
||||
SELECT $questionnaire_sample_quota_row_id,qs.questionnaire_id,s.sample_id
|
||||
FROM sample as s, sample_var as sv, questionnaire_sample_quota_row as qs
|
||||
WHERE s.import_id = qs.sample_import_id
|
||||
AND qs.questionnaire_sample_quota_row_id = $questionnaire_sample_quota_row_id
|
||||
AND s.sample_id = sv.sample_id
|
||||
AND sv.var_id = qs.exclude_var_id
|
||||
AND qs.exclude_val LIKE sv.val";
|
||||
{
|
||||
$sql2 = "SELECT exclude_val,exclude_var,exclude_var_id,comparison
|
||||
FROM qsqr_sample
|
||||
WHERE questionnaire_sample_quota_row_id = $questionnaire_sample_quota_row_id";
|
||||
|
||||
$rev = $db->GetAll($sql2);
|
||||
|
||||
//store list of sample records to exclude
|
||||
$sql = "INSERT INTO questionnaire_sample_quota_row_exclude (questionnaire_sample_quota_row_id,questionnaire_id,sample_id)
|
||||
SELECT $questionnaire_sample_quota_row_id,qs.questionnaire_id,s.sample_id
|
||||
FROM sample as s ";
|
||||
|
||||
//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 = "JOIN questionnaire_sample_quota_row as qs ON (qs.questionnaire_sample_quota_row_id = $questionnaire_sample_quota_row_id)
|
||||
WHERE s.import_id = qs.sample_import_id";
|
||||
|
||||
$db->Execute($sql);
|
||||
|
||||
@@ -1539,22 +1562,35 @@ function close_row_quota($questionnaire_sample_quota_row_id,$update = true)
|
||||
* @param int $questionnaire_id
|
||||
* @param int $sample_import_id
|
||||
* @param int $copy_sample_import_id The sample_import_id to copy to
|
||||
* @param bool $blocking Block (copy quota)?
|
||||
*/
|
||||
function copy_row_quota($questionnaire_id,$sample_import_id,$copy_sample_import_id)
|
||||
function copy_row_quota($questionnaire_id,$sample_import_id,$copy_sample_import_id, $block = false)
|
||||
{
|
||||
global $db;
|
||||
|
||||
$db->StartTrans();
|
||||
|
||||
//Set quota_reached to 0 always
|
||||
//Set quota_reached to 0 always if not blocking
|
||||
$b = 0;
|
||||
if ($block == true)
|
||||
$b = "quota_reached";
|
||||
|
||||
$sql = "INSERT INTO questionnaire_sample_quota_row (questionnaire_id,sample_import_id,lime_sgqa,value,comparison,completions,exclude_var_id,exclude_var,exclude_val,quota_reached,description)
|
||||
SELECT questionnaire_id, $copy_sample_import_id, lime_sgqa,value,comparison,completions,exclude_var_id,exclude_var,exclude_val,0,description
|
||||
$sql = "INSERT INTO questionnaire_sample_quota_row (questionnaire_id,sample_import_id,completions,quota_reached,description)
|
||||
SELECT questionnaire_id, $copy_sample_import_id, completions,$b,description
|
||||
FROM questionnaire_sample_quota_row
|
||||
WHERE questionnaire_id = '$questionnaire_id'
|
||||
AND sample_import_id = '$sample_import_id'";
|
||||
|
||||
$db->Execute($sql);
|
||||
$db->Execute($sql);
|
||||
|
||||
$nqsqr = $db->Insert_ID();
|
||||
|
||||
$sql = "INSERT INTO qsqr_sample (questionnaire_sample_quota_row_id,exclude_var_id,exclude_var,exclude_val,comparison,description)
|
||||
SELECT $nqsqr, qs.exclude_var_id, qs.exclude_var, qs.exclude_val, qs.comparison, qs.description
|
||||
FROM qsqr_sample as qs, questionnaire_sample_quota_row as q
|
||||
WHERE qs.questionnaire_sample_quota_row_id = q.questionnaire_sample_quota_row_id
|
||||
AND q.questionnaire_id = '$questionnaire_id'
|
||||
AND q.sample_import_id = '$sample_import_id'";
|
||||
|
||||
update_quotas($questionnaire_id);
|
||||
|
||||
@@ -1571,22 +1607,7 @@ function copy_row_quota($questionnaire_id,$sample_import_id,$copy_sample_import_
|
||||
*/
|
||||
function copy_row_quota_with_blocking($questionnaire_id,$sample_import_id,$copy_sample_import_id)
|
||||
{
|
||||
global $db;
|
||||
|
||||
$db->StartTrans();
|
||||
|
||||
//Set quota_reached to 0 always
|
||||
|
||||
$sql = "INSERT INTO questionnaire_sample_quota_row (questionnaire_id,sample_import_id,lime_sgqa,value,comparison,completions,exclude_var_id,exclude_var,exclude_val,quota_reached,description)
|
||||
SELECT questionnaire_id, $copy_sample_import_id, lime_sgqa,value,comparison,completions, exclude_var_id,exclude_var,exclude_val, quota_reached,description
|
||||
FROM questionnaire_sample_quota_row
|
||||
WHERE questionnaire_id = '$questionnaire_id'
|
||||
AND sample_import_id = '$sample_import_id'";
|
||||
|
||||
$db->Execute($sql);
|
||||
|
||||
|
||||
update_quotas($questionnaire_id);
|
||||
copy_row_quota($questionnaire_id,$sample_import_id,$copy_sample_import_id,true);
|
||||
|
||||
$db->CompleteTrans();
|
||||
}
|
||||
@@ -1605,6 +1626,7 @@ function copy_row_quota_with_adjusting($questionnaire_id,$sample_import_id,$copy
|
||||
// Copy quotas (defalt Quexs function)
|
||||
copy_row_quota_with_blocking($questionnaire_id,$sample_import_id,$copy_sample_import_id);
|
||||
|
||||
/*
|
||||
$db->StartTrans();
|
||||
|
||||
// Select quotas from the old sample rows and calculate
|
||||
@@ -1645,7 +1667,186 @@ function copy_row_quota_with_adjusting($questionnaire_id,$sample_import_id,$copy
|
||||
}
|
||||
}
|
||||
|
||||
$db->CompleteTrans();
|
||||
$db->CompleteTrans();
|
||||
*/
|
||||
}
|
||||
|
||||
/**
|
||||
* Update a single row quota
|
||||
*
|
||||
* @param int $qsqri The quota row id
|
||||
* @param int|bool $case_id The case id if known to limit the scope of the search
|
||||
* @return bool If priorities need to be updated or not
|
||||
*/
|
||||
function update_single_row_quota($qsqri,$case_id = false)
|
||||
{
|
||||
global $db;
|
||||
|
||||
$sql = "SELECT q.lime_sid, qs.questionnaire_id, qs.sample_import_id, qs.completions, qs.autoprioritise
|
||||
FROM questionnaire as q, questionnaire_sample_quota_row as qs
|
||||
WHERE q.questionnaire_id = qs.questionnaire_id
|
||||
AND qs.questionnaire_sample_quota_row_id = $qsqri";
|
||||
|
||||
$rs = $db->GetRow($sql);
|
||||
|
||||
$lime_sid = $rs['lime_sid'];
|
||||
$questionnaire_id = $rs['questionnaire_id'];
|
||||
$sample_import_id = $rs['sample_import_id'];
|
||||
$target_completions = $rs['completions'];
|
||||
$autoprioritise = $rs['autoprioritise'];
|
||||
|
||||
//all variables to exclude for this row quota
|
||||
$sql2 = "SELECT exclude_val,exclude_var,exclude_var_id,comparison
|
||||
FROM qsqr_sample
|
||||
WHERE questionnaire_sample_quota_row_id = $qsqri";
|
||||
|
||||
$rev = $db->GetAll($sql2);
|
||||
|
||||
//all variables to check in limesurvey for this row quota
|
||||
$sql2 = "SELECT lime_sgqa,value,comparison
|
||||
FROM qsqr_question
|
||||
WHERE questionnaire_sample_quota_row_id = $qsqri";
|
||||
|
||||
$qev = $db->GetAll($sql2);
|
||||
|
||||
//whether a completion was changed for this quota
|
||||
$updatequota = false;
|
||||
//whether priorites need to be updated
|
||||
$update = false;
|
||||
//default completions at 0
|
||||
$completions = 0;
|
||||
|
||||
//if a case_Id is specified, we can just check if this case matches
|
||||
//the quota criteria, and if so, increment the quota completions counter
|
||||
if ($case_id != false)
|
||||
{
|
||||
if (empty($qev))
|
||||
{
|
||||
//just determine if this case is linked to a matching sample record
|
||||
$sql2 = "SELECT count(*) as c
|
||||
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) ";
|
||||
|
||||
$x = 1;
|
||||
foreach($rev as $ev)
|
||||
{
|
||||
$sql2 .= " JOIN sample_var as sv$x ON (sv$x.sample_id = sam.sample_id AND sv$x.var_id = '{$ev['exclude_var_id']}' AND sv$x.val {$ev['comparison']} '{$ev['exclude_val']}') ";
|
||||
$x++;
|
||||
}
|
||||
|
||||
$sql2 .= " WHERE s.token = c.token";
|
||||
|
||||
$match = $db->GetOne($sql2);
|
||||
}
|
||||
else
|
||||
{
|
||||
//determine if the case is linked to a matching limesurvey record
|
||||
$sql2 = "SELECT count(*) as c
|
||||
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)
|
||||
WHERE s.token = c.token
|
||||
";
|
||||
|
||||
foreach($qev as $ev)
|
||||
$sql2 .= " AND s.`{$ev['lime_sgqa']}` {$ev['comparison']} '{$ev['value']}' ";
|
||||
|
||||
$match = $db->GetOne($sql2);
|
||||
}
|
||||
|
||||
if ($match == 1)
|
||||
{
|
||||
//increment completions
|
||||
$sql = "SELECT (current_completions + 1) as c
|
||||
FROM questionnaire_sample_quota_row
|
||||
WHERE questionnaire_sample_quota_row_id = '$qsqri'";
|
||||
$cc = $db->GetRow($sql);
|
||||
|
||||
$completions = $cc['c'];
|
||||
|
||||
$updatequota = true;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (empty($qev))
|
||||
{
|
||||
//find all completions from cases with matching sample records
|
||||
|
||||
$sql2 = "SELECT count(*) as c
|
||||
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')";
|
||||
|
||||
$x = 1;
|
||||
foreach($rev as $ev)
|
||||
{
|
||||
$sql2 .= " JOIN sample_var as sv$x ON (sv$x.sample_id = sam.sample_id AND sv$x.var_id = '{$ev['exclude_var_id']}' AND sv$x.val {$ev['comparison']} '{$ev['exclude_val']}') ";
|
||||
$x++;
|
||||
}
|
||||
|
||||
$sql2 .= " WHERE s.submitdate IS NOT NULL
|
||||
AND s.token = c.token";
|
||||
|
||||
$completions = $db->GetOne($sql2);
|
||||
}
|
||||
else
|
||||
{
|
||||
//find all completions from cases with matching limesurvey records
|
||||
$sql2 = "SELECT count(*) as c
|
||||
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')
|
||||
WHERE s.submitdate IS NOT NULL
|
||||
AND s.token = c.token ";
|
||||
|
||||
foreach($qev as $ev)
|
||||
$sql2 .= " AND s.`{$ev['lime_sgqa']}` {$ev['comparison']} '{$ev['value']}' ";
|
||||
|
||||
$completions = $db->GetOne($sql2);
|
||||
}
|
||||
|
||||
$updatequota = true;
|
||||
}
|
||||
|
||||
if ($updatequota)
|
||||
{
|
||||
if ($completions >= $target_completions)
|
||||
{
|
||||
//set row quota to reached
|
||||
$sql = "UPDATE questionnaire_sample_quota_row
|
||||
SET quota_reached = '1', current_completions = '$completions'
|
||||
WHERE questionnaire_sample_quota_row_id = '$qsqri'";
|
||||
|
||||
$db->Execute($sql);
|
||||
|
||||
close_row_quota($qsqri,false); //don't update priorires just yet
|
||||
$update = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
$sql = "UPDATE questionnaire_sample_quota_row
|
||||
SET current_completions = '$completions' ";
|
||||
|
||||
//If autopriority is set update it here
|
||||
if ($autoprioritise == 1)
|
||||
{
|
||||
//priority is 100 - the percentage of completions
|
||||
$pr = 100 - round(100 * ($completions / $target_completions));
|
||||
$sql .= ", priority = '$pr' ";
|
||||
|
||||
//need to update quotas now
|
||||
$update = true;
|
||||
}
|
||||
|
||||
$sql .= " WHERE questionnaire_sample_quota_row_id = '$qsqri'";
|
||||
|
||||
$db->Execute($sql);
|
||||
|
||||
}
|
||||
}
|
||||
return $update;
|
||||
}
|
||||
|
||||
|
||||
@@ -1663,106 +1864,30 @@ function update_row_quota($questionnaire_id,$case_id = false)
|
||||
|
||||
$db->StartTrans();
|
||||
|
||||
$sql = "SELECT questionnaire_sample_quota_row_id,q.questionnaire_id,sample_import_id,lime_sgqa,value,comparison,completions,quota_reached,q.lime_sid, qsq.exclude_var_id,qsq.exclude_var,qsq.exclude_val,qsq.current_completions,qsq.priority,qsq.autoprioritise
|
||||
FROM questionnaire_sample_quota_row as qsq, questionnaire as q
|
||||
$sql = "SELECT qsq.questionnaire_sample_quota_row_id
|
||||
FROM questionnaire_sample_quota_row as qsq
|
||||
WHERE qsq.questionnaire_id = '$questionnaire_id'
|
||||
AND q.questionnaire_id = '$questionnaire_id'
|
||||
AND qsq.lime_sgqa != -1";
|
||||
AND qsq.quota_reached != '1'
|
||||
GROUP BY qsq.questionnaire_sample_quota_row_id";
|
||||
|
||||
$rs = $db->GetAll($sql);
|
||||
|
||||
if (isset($rs) && !empty($rs))
|
||||
{
|
||||
//include limesurvey functions
|
||||
include_once(dirname(__FILE__).'/functions.limesurvey.php');
|
||||
if (isset($rs) && !empty($rs))
|
||||
{
|
||||
foreach ($rs as $r)
|
||||
{
|
||||
$tmp = update_single_row_quota($r['questionnaire_sample_quota_row_id'],$case_id);
|
||||
if ($tmp)
|
||||
$update = true;
|
||||
}
|
||||
}
|
||||
|
||||
//update all row quotas for this questionnaire
|
||||
foreach($rs as $r)
|
||||
{
|
||||
//whether a completion was changed for this quota
|
||||
$updatequota = false;
|
||||
|
||||
//if a case_Id is specified, we can just check if this case matches
|
||||
//the quota criteria, and if so, increment the quota completions counter
|
||||
if ($case_id != false)
|
||||
{
|
||||
if ($r['lime_sgqa'] == -2)
|
||||
$match = limesurvey_quota_replicate_match($r['lime_sid'],$case_id,$r['exclude_val'],$r['exclude_var_id'],$r['sample_import_id']);
|
||||
else
|
||||
$match = limesurvey_quota_match($r['lime_sgqa'],$r['lime_sid'],$case_id,$r['value'],$r['comparison'],$r['sample_import_id']);
|
||||
|
||||
if ($match == 1)
|
||||
{
|
||||
//increment completions
|
||||
$sql = "SELECT (current_completions + 1) as c
|
||||
FROM questionnaire_sample_quota_row
|
||||
WHERE questionnaire_sample_quota_row_id = {$r['questionnaire_sample_quota_row_id']}";
|
||||
$cc = $db->GetRow($sql);
|
||||
|
||||
$completions = $cc['c'];
|
||||
|
||||
$updatequota = true;
|
||||
}
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
if ($r['lime_sgqa'] == -2)
|
||||
$completions = limesurvey_quota_replicate_completions($r['lime_sid'],$r['questionnaire_id'],$r['sample_import_id'],$r['exclude_val'],$r['exclude_var_id']);
|
||||
else
|
||||
$completions = limesurvey_quota_completions($r['lime_sgqa'],$r['lime_sid'],$r['questionnaire_id'],$r['sample_import_id'],$r['value'],$r['comparison']);
|
||||
$updatequota = true;
|
||||
}
|
||||
|
||||
if ($updatequota)
|
||||
{
|
||||
if ($completions >= $r['completions'])
|
||||
{
|
||||
//set row quota to reached
|
||||
$sql = "UPDATE questionnaire_sample_quota_row
|
||||
SET quota_reached = '1', current_completions = '$completions'
|
||||
WHERE questionnaire_sample_quota_row_id = {$r['questionnaire_sample_quota_row_id']}";
|
||||
|
||||
$db->Execute($sql);
|
||||
|
||||
close_row_quota($r['questionnaire_sample_quota_row_id'],false); //don't update priorires just yet
|
||||
$update = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
$sql = "UPDATE questionnaire_sample_quota_row
|
||||
SET current_completions = '$completions' ";
|
||||
|
||||
//If autopriority is set update it here
|
||||
if ($r['autoprioritise'] == 1)
|
||||
{
|
||||
//priority is 100 - the percentage of completions
|
||||
$pr = 100 - round(100 * ($completions / $r['completions']));
|
||||
if ($pr < 0)
|
||||
$pr = 0;
|
||||
$sql .= ", priority = '$pr' ";
|
||||
|
||||
//need to update quotas now
|
||||
$update = true;
|
||||
}
|
||||
|
||||
$sql .= " WHERE questionnaire_sample_quota_row_id = {$r['questionnaire_sample_quota_row_id']}";
|
||||
|
||||
$db->Execute($sql);
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
if ($update) update_quota_priorities($questionnaire_id);
|
||||
}
|
||||
if ($update)
|
||||
update_quota_priorities($questionnaire_id);
|
||||
|
||||
$db->CompleteTrans();
|
||||
|
||||
return false;
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -1825,16 +1950,39 @@ function update_quota_priorities($questionnaire_id)
|
||||
$qsqri = $r['questionnaire_sample_quota_row_id'];
|
||||
$priority = $r['priority'];
|
||||
|
||||
$sql2 = "SELECT exclude_val,exclude_var,exclude_var_id,comparison
|
||||
FROM qsqr_sample
|
||||
WHERE questionnaire_sample_quota_row_id = $qsqri";
|
||||
|
||||
$rev = $db->GetAll($sql2);
|
||||
|
||||
|
||||
//find all cases that match this quota, and update it to the new priority
|
||||
$sql = "UPDATE sample as s, sample_var as sv, questionnaire_sample_quota_row as qs, questionnaire_sample_exclude_priority as qsep
|
||||
$sql = "UPDATE sample as s, questionnaire_sample_quota_row as qs, questionnaire_sample_exclude_priority as qsep ";
|
||||
|
||||
//reduce sample by every item in the qsqr_sample table
|
||||
$x = 1;
|
||||
foreach ($rev as $ev)
|
||||
{
|
||||
$sql .= ", sample_var as sv$x";
|
||||
$x++;
|
||||
}
|
||||
|
||||
$sql .= "
|
||||
SET qsep.priority = '$priority'
|
||||
WHERE s.import_id = qs.sample_import_id
|
||||
AND qs.questionnaire_sample_quota_row_id = '$qsqri'
|
||||
AND s.sample_id = sv.sample_id
|
||||
AND sv.var_id = qs.exclude_var_id
|
||||
AND qs.exclude_val LIKE sv.val
|
||||
AND s.sample_id = sv$x.sample_id
|
||||
AND sv$x.var_id = qs.exclude_var_id
|
||||
AND qsep.questionnaire_id = qs.questionnaire_id
|
||||
AND qsep.sample_id = s.sample_id";
|
||||
AND qsep.sample_id = s.sample_id ";
|
||||
|
||||
$x = 1;
|
||||
foreach ($rev as $ev)
|
||||
{
|
||||
$sql .= " AND 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++;
|
||||
}
|
||||
|
||||
|
||||
$db->Execute($sql);
|
||||
|
||||
@@ -226,11 +226,10 @@ if (isset($rs) && !empty($rs))
|
||||
}
|
||||
|
||||
//quota row's full
|
||||
$sql = "SELECT questionnaire_sample_quota_row_id,q.questionnaire_id,sample_import_id,lime_sgqa,value,comparison,completions,quota_reached,q.lime_sid
|
||||
FROM questionnaire_sample_quota_row as qsq, questionnaire as q, operator_questionnaire as oq
|
||||
$sql = "SELECT qsq.questionnaire_sample_quota_row_id,qsq.quota_reached,qsq.description
|
||||
FROM questionnaire_sample_quota_row as qsq, operator_questionnaire as oq
|
||||
WHERE oq.operator_id = '$operator_id'
|
||||
AND qsq.questionnaire_id = oq.questionnaire_id
|
||||
AND q.questionnaire_id = oq.questionnaire_id";
|
||||
AND qsq.questionnaire_id = oq.questionnaire_id";
|
||||
|
||||
$rs = $db->GetAll($sql);
|
||||
|
||||
@@ -240,7 +239,7 @@ if (isset($rs) && !empty($rs))
|
||||
{
|
||||
if ($r['quota_reached'] == 1)
|
||||
{
|
||||
print "<p class='error'>" . T_("POSSIBLE ERROR: Row quota reached for this question") . " - " . $r['lime_sgqa'];
|
||||
print "<p class='error'>" . T_("POSSIBLE ERROR: Row quota reached for this quota") . " - " . $r['description'];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user