diff --git a/CHANGELOG b/CHANGELOG index 93dc3425..4f2371b0 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -52,8 +52,8 @@ WHERE 1; DROP TABLE `sessions2`; /* Add sort order feature to questionnaire sample table */ -ALTER TABLE `questionnaire_sample` ADD `sort_order` INT( 11 ) NOT NULL DEFAULT '0'; -UPDATE `questionnaire_sample` SET sort_order = sample_import_id; +/* after update just open "Assign & Sort questionnaire samples" admin page (assignsample.php) and set required sort_order*/ +ALTER TABLE `questionnaire_sample` ADD `sort_order` INT( 11 ) NOT NULL DEFAULT '1'; /* Add default outcomes feature */ @@ -70,6 +70,14 @@ ALTER TABLE `questionnaire` ADD `outcomes` VARCHAR(256) NULL DEFAULT '1,2,3,7,9, UPDATE `questionnaire` SET `outcomes` = '1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,40,41,42,43,44,45' ; +!!-- IMPORTANT --!! +If you had more than 1 sample assigned to a questionaire before "samplesort" update, you'll need to have different sort_order values (llike 0,1,2 e.t.c.)for each sample per questionnaire to make "samplesort" feature work. + +Easy way: unassign samples from quesionnaires (no more than 1 could be left per questionnaire) and reassign them back. + +Check that you have different "Sort order" values for each sample per questionnaire, test order change with up/down arrows. +!! + queXS 1.13.1 - Changes since 1.13.0 Fixed Bug: Remove references to old DEFAULT_TIME_ZONE config constant (use get_settings instead) diff --git a/admin/assignsample.php b/admin/assignsample.php index 7d9eaa94..a848d041 100644 --- a/admin/assignsample.php +++ b/admin/assignsample.php @@ -93,11 +93,8 @@ if (isset($_GET['questionnaire_id']) && isset($_GET['sample']) && isset($_GET[' $an = 0; if (isset($_GET['allownew'])) $an = 1; - $sql = "SELECT MAX(sort_order) + 1 - FROM questionnaire_sample - WHERE questionnaire_id = '$questionnaire_id'"; - - $so = $db->GetOne($sql); + $sql = "SELECT MAX(sort_order) + 1 FROM questionnaire_sample"; + if(!$so = $db->GetOne($sql)) $so = 1; $sql = "INSERT INTO questionnaire_sample(questionnaire_id,sample_import_id,call_max,call_attempt_max,random_select,answering_machine_messages,allow_new,sort_order) VALUES('$questionnaire_id','$sid','$cm','$cam','$selecttype','$am', '$an', '$so')"; @@ -191,15 +188,15 @@ if (isset($_GET['questionnaire_id']) && isset($_GET['rsid'])) if (isset($_GET['edit'])) { $subtitle = T_("Edit assignment parameters"); - xhtml_head(T_("Assign samples to questionnaire: "),true,$css,$js_head,false,false,false,$subtitle);//array("../css/table.css"),array("../js/window.js") + xhtml_head(T_("Assign samples to questionnaire: "),true,$css,$js_head,false,false,false,$subtitle); $sql = "SELECT si.description as description, qr.description as qdescription, q.call_max, q.call_attempt_max, q.random_select, - q.answering_machine_messages, - q.allow_new + q.answering_machine_messages, + q.allow_new FROM questionnaire_sample as q, sample_import as si, questionnaire as qr WHERE q.sample_import_id = si.sample_import_id AND q.questionnaire_id = '$questionnaire_id' @@ -210,9 +207,9 @@ if (isset($_GET['questionnaire_id']) && isset($_GET['rsid'])) //print "

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

"; print "

 " . T_("Go back") . "

-

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

-

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

-
"; +

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

+

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

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

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

"; -display_questionnaire_chooser($questionnaire_id,false, "pull-left", "form-control"); + + +$questionnaire_id = false; +if (isset($_GET['questionnaire_id'])) $questionnaire_id = bigintval($_GET['questionnaire_id']); + +print "

 " . T_("Assign samples to questionnaire: ") . "

"; +display_questionnaire_chooser($questionnaire_id,false, "pull-left btn", "form-control "); +print "
"; if ($questionnaire_id != false) { - print "
-

". T_("Samples selected for this questionnaire") .":

"; + print "
+

 ". T_("Samples assigned to questionnaire") ." " . $db->GetOne("SELECT description from questionnaire WHERE questionnaire_id = $questionnaire_id") . "

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

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

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

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

"; + print "

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

"; ?>
- -
{$q['description']}"; } ?>


- +


- +


- +


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


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



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


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



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

-
+
diff --git a/database/quexs.sql b/database/quexs.sql index 59270888..66cb3f7c 100644 --- a/database/quexs.sql +++ b/database/quexs.sql @@ -1266,7 +1266,7 @@ CREATE TABLE `questionnaire_sample` ( `random_select` tinyint(1) NOT NULL DEFAULT '0', `answering_machine_messages` int(11) NOT NULL DEFAULT '1', `allow_new` tinyint(1) NOT NULL DEFAULT '1', - `sort_order` int(11) NOT NULL DEFAULT '0', + `sort_order` int(11) NOT NULL DEFAULT '1', PRIMARY KEY (`questionnaire_id`,`sample_import_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;