diff --git a/admin/index.php b/admin/index.php index 8eff4a55..52ab1155 100644 --- a/admin/index.php +++ b/admin/index.php @@ -55,6 +55,7 @@ print "
" . T_("Currently no row quotas") . "
"; + } + else + { + foreach($r as $v) + { + print "" . T_("No labels defined for this question") ."
"; + else + xhtml_table($rs,array('code','title'),array(T_("Code value"), T_("Description"))); + + + ?> + + + } + } + } +} +xhtml_foot(); + + +?> diff --git a/database/quexs.sql b/database/quexs.sql index f8a8759b..1b152414 100644 --- a/database/quexs.sql +++ b/database/quexs.sql @@ -518,6 +518,27 @@ CREATE TABLE IF NOT EXISTS `questionnaire_sample_quota` ( ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +-- +-- Table structure for table `questionnaire_sample_quota_row` +-- + +CREATE TABLE IF NOT EXISTS `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', + PRIMARY KEY (`questionnaire_sample_quota_row_id`), + KEY `questionnaire_id` (`questionnaire_id`), + KEY `sample_import_id` (`sample_import_id`), + KEY `exclude_var` (`exclude_var`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + -- -------------------------------------------------------- diff --git a/functions/functions.operator.php b/functions/functions.operator.php index 364381f0..b2a2e114 100644 --- a/functions/functions.operator.php +++ b/functions/functions.operator.php @@ -302,6 +302,7 @@ function get_case_id($operator_id, $create = false) AND ((apn.appointment_id IS NOT NULL) or qs.call_attempt_max = 0 or ((SELECT count(*) FROM call_attempt WHERE case_id = c.case_id) < qs.call_attempt_max)) AND ((apn.appointment_id IS NOT NULL) or qs.call_max = 0 or ((SELECT count(*) FROM `call` WHERE case_id = c.case_id) < qs.call_max)) AND (SELECT count(*) FROM `questionnaire_sample_quota` WHERE questionnaire_id = c.questionnaire_id AND sample_import_id = s.import_id AND quota_reached = 1) = 0 + AND (SELECT count(*) FROM `questionnaire_sample_quota_row` as qsqr, sample_var as sv WHERE qsqr.questionnaire_id = c.questionnaire_id AND qsqr.sample_import_id = s.import_id AND qsqr.quota_reached = 1 and sv.sample_id = s.sample_id AND sv.var = qsqr.exclude_var AND qsqr.exclude_val LIKE sv.val) = 0 ORDER BY apn.start DESC, a.start ASC LIMIT 1"; @@ -336,6 +337,7 @@ function get_case_id($operator_id, $create = false) AND !(q.restrict_work_shifts = 1 AND sh.shift_id IS NULL) AND !(si.call_restrict = 1 AND cr.day_of_week IS NULL) AND (SELECT count(*) FROM `questionnaire_sample_quota` WHERE questionnaire_id = qs.questionnaire_id AND sample_import_id = s.import_id AND quota_reached = 1) = 0 + AND (SELECT count(*) FROM `questionnaire_sample_quota_row` as qsqr, sample_var as sv WHERE qsqr.questionnaire_id = qs.questionnaire_id AND qsqr.sample_import_id = s.import_id AND qsqr.quota_reached = 1 AND sv.sample_id = s.sample_id AND sv.var = qsqr.exclude_var AND qsqr.exclude_val LIKE sv.val) = 0 ORDER BY rand() * qs.random_select, s.sample_id LIMIT 1"; @@ -959,13 +961,11 @@ function missed_appointment($call_attempt_id) } /** - * Check if any quotas apply to this questionnaire - * and if so, update them - * - * @param int $questionnaire_id The questionnaire id + * Update the quota table (sample wide) * + * @param int $questionnaire_id The questionnaire ID to update */ -function update_quotas($questionnaire_id) +function update_quota($questionnaire_id) { global $db; @@ -999,6 +999,63 @@ function update_quotas($questionnaire_id) } return false; + +} + + +/** + * Update the row quota table + * + * @param int $questionnaire_id The questionnaire ID to update + */ +function update_row_quota($questionnaire_id) +{ + global $db; + + $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 + WHERE qsq.questionnaire_id = '$questionnaire_id' + AND q.questionnaire_id = '$questionnaire_id'"; + + $rs = $db->GetAll($sql); + + if (isset($rs) && !empty($rs)) + { + //include limesurvey functions + include_once(dirname(__FILE__).'/functions.limesurvey.php'); + + //update all row quotas for this questionnaire + foreach($rs as $r) + { + $completions = limesurvey_quota_completions($r['lime_sgqa'],$r['lime_sid'],$r['questionnaire_id'],$r['sample_import_id'],$r['value'],$r['comparison']); + + if ($completions >= $r['completions']) + { + //set row quota to reached + $sql = "UPDATE questionnaire_sample_quota_row + SET quota_reached = '1' + WHERE questionnaire_sample_quota_row_id = {$r['questionnaire_sample_quota_row_id']}"; + + $db->Execute($sql); + } + } + } + + return false; + +} + +/** + * Check if any quotas apply to this questionnaire + * and if so, update them + * + * @param int $questionnaire_id The questionnaire id + * + */ +function update_quotas($questionnaire_id) +{ + update_quota($questionnaire_id); + update_row_quota($questionnaire_id); } diff --git a/functions/functions.xhtml.php b/functions/functions.xhtml.php index 946a5984..b8d1d385 100644 --- a/functions/functions.xhtml.php +++ b/functions/functions.xhtml.php @@ -135,11 +135,13 @@ function xhtml_table($content,$fields,$head = false,$class = "tclass",$highlight * @param bool $useblank Add a blank element to the start of the list * @param string|bool $pass Anything to pass along in the return string (remember to separate with &) * @param bool $js Whether to use JS or not + * @param bool $indiv Whether to display in a div or not * */ -function display_chooser($elements, $selectid, $var, $useblank = true, $pass = false, $js = true) +function display_chooser($elements, $selectid, $var, $useblank = true, $pass = false, $js = true, $indiv = true) { - print ""; - + print ""; + if ($indiv) print ""; }