"FL", "1X2X35"=>"Cork") * $responsestyle should be "full" - the alternative (which would just be the codes) is not yet coded * * This function will return a multi-level array. The first level is a numbered array with an * entry for every individual response. Within that array will be a further array, with an entry * for every possible answer to that question. Then, within each of those arrays will be * the question title, and the answer to that question for that record. * * As an example, a single answer type question (like a List, or Yes/No) * will look like this: * Array * ( * [0]=> Array * ( * [4X6X22] => Array * ( * [0] => What is your Employment Type? * [1] => Ongoing * ) * ) * [1]=> Array * ..... and so forth for each record in the responses table * * A multiple answer type question, such as "Multiple Choice" will look like this: * Array * ( * [0]=> Array * ( * [2X2X7C] => Array * ( * [0] => Choose your favourite foods [Cheese] * [1] => Yes * ) * [2X2X7I] => Array * ( * [0] => Choose your favourite foods [Ice Cream] * [1] => * ) * ) * * - makeSummaryFromRawData($results) * Feed this function the "raw results" string generated by the "giveMeRawDataFromFieldNames" * function and you'll be returned an array containing a summary/count of results * for every possible answer within that question. * * An example result for a single option question (ie: List or Yes/No) is: * * Array * ( * [4X6X22] => Array * ( * [question] => What is your Employment Type? * [summary] => Array * ( * [Ongoing] => 429 * [Fixed Term] => 61 * [None] => 4 * [Agency / Temp] => 4 * [Casual] => 1 * ) * * ) * ) * * An example result for a multiple answer type question is: * Array * ( * [2X2X7G] => Array * ( * [question] => Which of the following issues do you want addressed in negotiations for the next Enterprise Bargaining Agreement? [Accrual of Time In Lieu / Flex Time] * [summary] => Array * ( * [Yes] => 10 * [None] => 3 * ) * * ) * * [2X2X7K] => Array * ( * [question] => Which of the following issues do you want addressed in negotiations for the next Enterprise Bargaining Agreement? [Allowances / Reimbursement of Expenses] * [summary] => Array * ( * [Yes] => 5 * [None] => 8 * ) * * ) * ) * */ //THIS BIT IS JUST FOR DEBUGGING if (!empty($_GET['debug'])) { // $table = "survey_4"; // //$questionfields[]="4X6X22"; // //$questionfields[]="4X6X23"; // $limitby=array("4X6X22"=>"A", // "4X6X23"=>"B"); // $sql = buildSqlFromFieldnamesArray($limitby); // $questionfields=buildQuestionFields("4", "7", "29"); // if (!empty($questionfields)) { // $results = returnQuestionResults($table, $questionfields, $sql); // echo "TOTAL RESULTS: ".count($results); // echo "
";
    //		print_r($results);
    //		echo "
"; // } $surveyid=$_GET['sid']; $gid=$_GET['gid']; $qid=$_GET['qid']; //$results = giveMeRawDataFromFieldNames("4", "6", "22", array(), "full"); //$results = giveMeRawDataFromFieldNames("2", "2", "7", array(), "full"); //$results = giveMeRawDataFromFieldNames("8", "18", "66", array(), "full"); //$results = giveMeRawDataFromFieldNames("29", "89", "559", array(), "full"); $results = giveMeRawDataFromFieldNames($surveyid, $gid, $qid, array(), "full"); $summary = makeSummaryFromRawData($results); foreach ($results as $result) { foreach ($result as $answer) {echo $answer[1];} } echo "
";
    print_r($results);
    echo "
"; // // foreach ($summary as $sum) { // echo "\n"; // echo "\n"; // foreach ($sum['summary'] as $key=>$val) { // echo "\n"; // } // echo "
".$sum['question']."
$key$val

"; // } } function makeSummaryFromRawData($results, $surveyid=null, $gid=null, $qid=null) { //echo "
";print_r($results);echo "
"; if (empty($results)) { return array(); } if (!empty($qid)) { $thisquestion=getQuestionInfo($qid); } $rowcodes=array_keys($results[0]); // echo "
";print_r($rowcodes);echo "
"; $summary = array(); foreach ($results as $result) { foreach($rowcodes as $row) { //echo "
";print_r($result);echo "
"; if (is_array($result[$row])) { //echo "
";print_r($result);echo "
"; $summary[$row]['question']=$result[$row][0]; switch($thisquestion['type']) { case "T": case "S": case "H": if ($result[$row][1] != "") { if (!isset($summary[$row]['summary'][$clang->gT("Answered")])) { $summary[$row]['summary'][$clang->gT("Answered")]=1; } else { $summary[$row]['summary'][$clang->gT("Answered")]++; } } break; default: if (!isset($summary[$row]['summary'][$result[$row][1]])) { $summary[$row]['summary'][$result[$row][1]]=1; } else { $summary[$row]['summary'][$result[$row][1]]++; } break; } } if ($thisquestion['type'] == "N") { ksort($summary[$row]['summary'], SORT_NUMERIC); } } } //echo "
";print_r($summary);echo "
"; //fill in the blanks from answer table and sort if (isset($surveyid) && isset($qid) && $summary) { //$thissurvey=getSurveyInfo($surveyid); $rowcodes=array_keys($summary); switch($thisquestion['type']){ case "F": case "H": $answers=getLabelSet($thisquestion['lid']); break; case "!": case "L": case "O": $answers=getAnswersSingle($surveyid, $gid, $qid); $answers[]=array("code"=>"", "answer"=>$clang->gT("No answer")); break; case "1": $answers=getLabelSet($thisquestion['lid']); $answers[]=array("code"=>"", "answer"=>$clang->gT("No answer")); break; case "C": $answers[]=array("code"=>"Y", "answer"=>$clang->gT("Yes")); $answers[]=array("code"=>"U", "answer"=>$clang->gT("Uncertain")); $answers[]=array("code"=>"N", "answer"=>$clang->gT("No")); break; case "E": $answers[]=array("code"=>"I", "answer"=>$clang->gT("Increase")); $answers[]=array("code"=>"S", "answer"=>$clang->gT("Same")); $answers[]=array("code"=>"D", "answer"=>$clang->gT("Decrease")); $answers[]=array("code"=>"", "answer"=>$clang->gT("No answer")); break; case "M": case "P": $answers[]=array("code"=>"Y", "answer"=>$clang->gT("Yes")); $answers[]=array("code"=>"", "answer"=>$clang->gT("No answer")); break; case "Y": $answers[]=array("code"=>"Y", "answer"=>$clang->gT("Yes")); $answers[]=array("code"=>"N", "answer"=>$clang->gT("No")); $answers[]=array("code"=>"", "answer"=>$clang->gT("No answer")); break; case "G": $answers[]=array("code"=>"M", "answer"=>$clang->gT("Male")); $answers[]=array("code"=>"F", "answer"=>$clang->gT("Female")); $answers[]=array("code"=>"", "answer"=>$clang->gT("No answer")); break; case "T": case "S": case "U": $answers[]=array("code"=>$clang->gT("Answered"), "answer"=>$clang->gT("Answered")); $answers[]=array("code"=>"", "answer"=>$clang->gT("No answer")); break; } // switch if (isset($answers)) { foreach($rowcodes as $row) { $newarray[$row]['question']=$summary[$row]['question']; foreach($answers as $answer) { //echo "
";print_r($answer);echo "
"; if (isset($summary[$row]['summary'][$answer['answer']])) { $newarray[$row]['summary'][$answer['answer']]=$summary[$row]['summary'][$answer['answer']]; } else { $newarray[$row]['summary'][$answer['answer']]=0; } } } $summary=$newarray; } } //Fix the output for multiple if ($thisquestion['type'] == "M" || $thisquestion['type'] == "P" || $thisquestion['type'] == "^" || $thisquestion['type'] == "1") { if (isset($newarray)) {unset($newarray);} $newarray[$thisquestion['sid']."X".$thisquestion['gid']."X".$thisquestion['qid']]['question']=$thisquestion['question']; foreach ($summary as $sum) { preg_match("/\[(.*)\]/", $sum['question'], $regs); $newarray[$thisquestion['sid']."X".$thisquestion['gid']."X".$thisquestion['qid']]['summary'][$regs[1]]=$sum['summary'][$clang->gT("Yes")]; } $summary=$newarray; } // echo "
";print_r($summary);echo "
"; return $summary; } function giveMeRawDataFromFieldNames($surveyid, $gid, $qid, $fieldlimiters=array(), $output="full") { //Builds output data for question $surveyid$gid$qid, limiting with $fieldlimiters array $questionfields = buildQuestionFields($surveyid, $qid); $sql = buildSqlFromFieldnamesArray($fieldlimiters); $tablename = "survey_".$surveyid; $fieldmap=createFieldMap($surveyid, "full"); //echo "
"; print_r($answers); echo "
"; list($questioninfo, $results) = returnQuestionResults($surveyid, $questionfields, $sql); //echo "
"; print_r($questioninfo); echo "
"; if (count($results) < 1) { return array(); } foreach ($questioninfo as $qi) { $questiontype=$qi['type']; } // echo "[$questiontype]
"; if ($output == "full") { GetBaseLanguageFromSurveyID($surveyid); //echo "
"; print_r($answers); echo "
"; switch($questiontype) { case "L": case "!": case "O": case "D": case "E": case "M": case "P": case "C": case "B": case "A": case "F": case "H": case "1": $answers = getAnswersSingle($surveyid, $gid, $qid); break; case "Y": $answers[]=array("code"=>"Y", "answer"=>$clang->gT("Yes")); $answers[]=array("code"=>"N", "answer"=>$clang->gT("No")); break; case "G": $answers[]=array("code"=>"M", "answer"=>$clang->gT("Male")); $answers[]=array("code"=>"F", "answer"=>$clang->gT("Female")); break; } // switch $answers[]=array("code"=>"", "answer"=>$clang->gT("No answer")); $answers[]=array("code"=>"-oth-", "answer"=>$clang->gT("Other")); switch($questiontype) { case "A": for ($i=1; $i <= 5; $i++) { $values[]=array("code"=>$i, "answer"=>$i); } break; case "B": for ($i=1; $i<=10; $i++) { $values[]=array("code"=>$i, "answer"=>$i); } break; case "E": $values[]=array("code"=>"I", "answer"=>$clang->gT("Increase")); $values[]=array("code"=>"S", "answer"=>$clang->gT("Same")); $values[]=array("code"=>"D", "answer"=>$clang->gT("Decrease")); break; case "C": case "M": case "P": $values[]=array("code"=>"Y", "answer"=>$clang->gT("Yes")); $values[]=array("code"=>"U", "answer"=>$clang->gT("Uncertain")); $values[]=array("code"=>"N", "answer"=>$clang->gT("No")); break; case "F": case "H": $thisquestion=getQuestionInfo($qid); $values = getLabelSet($thisquestion['lid']); break; } $values[]=array("code"=>"", "answer"=>$clang->gT("No answer")); switch($questiontype) { case "L": case "!": case "O": case "Y": case "G": case "S": case "T": case "H": case "N": case "5": case "D": //The first key needs to be expanded $firstkey=array_keys($results[0]); $firstkey=$firstkey[0]; $questions=arraySearchByKey($firstkey, $fieldmap, "fieldname", 1); //echo $firstkey; $i=0; foreach($results as $result) { $results[$i][$firstkey]=array($questions['question'], arraySubstitute($result[$firstkey], $answers)); $i++; } break; case "A": case "B": case "C": case "E": case "F": case "H": case "M": case "P": case "Q": case "1": $i=0; foreach($results as $result) { foreach($result as $key=>$val) { $questions=arraySearchByKey($key, $fieldmap, "fieldname", 1); if (substr($key, -7, 7) != "comment") { $code=substr($key, strlen($surveyid."X".$gid."X".$qid), strlen($key)-strlen($surveyid."X".$gid."X".$qid)); //echo $code; $results[$i][$key]=array($questions['question'], arraySubstitute($val, $values)); } } $i++; } break; } // switch } return $results; } function buildSqlFromFieldnamesArray($fieldnamesarray) { //Expects an array like this: "1x2x3"=>"FL" //and builds SQL "where" statement out of it (without the "WHERE" at the front) if (count($fieldnamesarray)) { foreach ($fieldnamesarray as $key=>$val) { if ($val == "{NULL}") { $sql[] = "$key IS NULL"; } else { $sql[] = "$key = '$val'"; } } if (count($sql) > 1) { return implode(" AND\n", $sql); } else { return $sql[0]; } } } function buildQuestionFields($surveyid, $qid) { //Takes a specific question, and returns an array containing //all the possible fieldnames for responses to that question $fieldmap=createFieldMap($surveyid); foreach ($fieldmap as $fields) { if ($fields['sid'] == $surveyid && $fields['qid'] == $qid && $fields['aid'] != "comment") { $questionfields[]=$fields['fieldname']; } } if (!empty($questionfields)) { return $questionfields; } else { return array("id"); } } function returnQuestionResults($surveyid, $questionfields, $sql=null) { global $connect; //Returns uninterpreted raw results from survey table for question(s) //$table = survcey table name (ie: "survey_1") //$questionfields should contain an array of the question fields that are being returned //$sql is any additional "filtering" sql code $details=array(); $output=array(); foreach($questionfields as $questionfield) { $detailsarray=arraySearchByKey($questionfield, createFieldMap($surveyid), "fieldname"); foreach ($detailsarray as $dt) { $details[]=$dt; } } $table="survey_".$surveyid; if (count($questionfields) > 1) { $selects = "`".implode("`, `", $questionfields)."`"; } else { $selects = "`".$questionfields[0]."`"; } $query = "SELECT $selects FROM $table"; if (!empty($sql)) { $query .= "\nWHERE $sql"; } $result = db_execute_assoc($query) or safe_diee("error getting results in returnQuestionResults
$query
".$connect->ErrorMsg()); while($row=$result->FetchRow()) { $output[]=$row; } // while return array($details, $output); } function getAnswersSingle($surveyid, $gid, $qid) { global $dbprefix, $connect; $query = "SELECT * FROM ".db_table_name("answers")." WHERE qid=$qid ORDER BY sortorder, answer"; $result = db_execute_assoc($query); while($row = $result->FetchRow()) { $answer[]=array("code"=>$row['code'], "answer"=>$row['answer']); } // while return $answer; } function getLabelSet($lid) { global $dbprefix, $connect; $query = "SELECT * FROM ".db_table_name("labels")." WHERE lid=$lid ORDER BY sortorder"; $result = db_execute_assoc($query) or safe_die($connect->ErrorMsg()); while($row = $result->FetchRow()) { if ($row['title'] <> '') { $answer[]=array("code"=>$row['code'], "answer"=>$row['title']); } } // while return $answer; } function arraySubstitute($value, $substitutes) { foreach ($substitutes as $sub) { if ($value == $sub['code']) { return $sub['answer']; } } return $value; } ?>