\n"));
printf(sprintf("\n"));
}
//output a line break if this field is a multiple iteration, single question format
if(($heading_format == "single_quest") && ($num_iterations > 1))
printf(sprintf("\n \n"));
//if revisiting this form because of an error, the previously entered fields are re-entered via GET
(!is_null($_GET[$html_fieldname])) ? $selected_answer = htmlspecialchars(stripslashes(urldecode($_GET[$html_fieldname]))) : $selected_answer = $row_form_questions['default'];
//now create the form fields! The form field type will vary based on the data type of the response.
switch($row_form_questions['type']) {
case "text":
if($heading_format == "multi-question" && ($row_form_questions['subquestion'] > 1))
printf("\n");
break;
case "varchar":
$maxlength = (integer) $row_form_questions['range'];
if(is_null($maxlength) || ($maxlength < 1)) { //if there is a maxlength (range), then limit the field entry
$fieldsize=30;
printf(sprintf("\n",$html_fieldname,$html_fieldname,$fieldsize,$selected_answer));
}
else {
$fieldsize=$maxlength;
printf(sprintf("\n",$html_fieldname,$html_fieldname,$fieldsize,$maxlength,$selected_answer));
}
break;
case "enum":
unset($options);
$options = enumstr2array($row_form_questions['enum_values']);
$num_options = sizeof($options);
$html_field_type = ($row_form_questions['html_field_type'] != NULL || $row_form_questions['html_field_type'] != "")? $row_form_questions['html_field_type'] : "radiogroup";
//check the html_field_type to determine the type of form field to use
switch($html_field_type) {
case "checkbox":
//this is a "check all that apply" html field type
printf("\n\n");
$mask = strrev(decbin($selected_answer));
$pos = 0;
$idx = 0;
unset($mask_array);
while(($idx < strlen($mask)) && ($pos !== false)) {
$pos = strpos($mask,'1',$idx);
if($pos !== false) {
$mask_array[] = $pos;
$idx = $pos + 1;
}
}
$num_row_cells = 1;
for($enum_ind = 0;$enum_ind < sizeof($options);$enum_ind++) {
if($num_row_cells / $checkbox_cells_in_row > 1.0) { //start a new row after every 8 cells
printf(" \n");
printf("\n");
$num_row_cells = 1;
}
$enum_fieldname = $html_fieldname."_enum_".$enum_ind;
if(strlen($options[$enum_ind]) > 25)
$checkbox_text_align = "left";
else
$checkbox_text_align = "right";
if($options[$enum_ind] != "") {
if(!is_null($mask_array) && (in_array(strval($enum_ind),$mask_array)))
printf(sprintf(" | | \n",$enum_fieldname,$enum_fieldname,$enum_ind,$enum_fieldname,$options[$enum_ind]));
else
printf(sprintf(" | | \n",$enum_fieldname,$enum_fieldname,$enum_ind,$enum_fieldname,$options[$enum_ind]));
}
$num_row_cells++;
}
printf(" \n \n");
break;
case "menu":
$enum_fieldname = $html_fieldname."_enum_0"; //this enum type only allows one selection at a time, so just append "_enum_0" to enable type conversion
printf("\n");
printf(sprintf("\n"));
printf("\n | \n");
break;
case "radiogroup":
default:
printf("\n");
printf("\t\n");
$enum_fieldname = $html_fieldname."_enum_0"; //this enum type only allows one selection at a time, so just append "_enum_0" to enable type conversion
$enum_ind = 0;
while($enum_ind < sizeof($options)) {
$row_count = $enum_ind % $num_cell_width + 1;
$row_enum_ind = $enum_ind;
while(($row_count <= $num_cell_width) && ($row_enum_ind < sizeof($options)) ) {
$radiobutton_id = $enum_fieldname . "_" . $row_enum_ind;
printf(sprintf("\n\t | \n",$radiobutton_id,$options[$row_enum_ind]));
$row_enum_ind++;
$row_count++;
}
printf(" \n\n");
$row_enum_ind = $enum_ind;
$row_count = $enum_ind % $num_cell_width + 1;
while( ($row_count <= $num_cell_width) && ($row_enum_ind < sizeof($options)) ) {
$radiobutton_id = $enum_fieldname . "_" . $row_enum_ind;
if(pow(2,$row_enum_ind) != $selected_answer)
printf(sprintf("\n\t | \n",$enum_fieldname,$radiobutton_id,$row_enum_ind));
else
printf(sprintf("\n\t | \n",$enum_fieldname,$radiobutton_id,$row_enum_ind));
$row_enum_ind++;
$row_count++;
}
//start a new row if we have exceeded the row width
if($row_count > $num_cell_width)
printf("\n \n\n");
$enum_ind = $row_enum_ind;
}
printf("\n ");
printf("\n ");
break;
} //end switch html_field_type
break;
case "int16":
case "int32":
case "int64":
//set the low and high limits for a range
//and assign numbers to an array
unset($options);
if(!is_null($row_form_questions['range'])) {
$low = ((integer) strtok($row_form_questions['range'],"-"));
$high = ((integer) strtok("-"));
for($range = $low;$range <= $high;$range++) {
$options[] = $range;
} //for
} //if we have a range
else { //we don't have a range
$low = NULL;
$high = NULL;
}
if($row_form_questions['type'] = "int16")
$fieldsize = 6;
elseif($row_form_questions['type'] = "int32")
$fieldsize = 11;
elseif($row_form_questions['type'] = "int64")
$fieldsize = 20;
//if radiogroup html field type was selected, use it only if the range of numbers <= 30
//otherwise the default field type (text) is used.
switch($row_form_questions['html_field_type']) {
case "radiogroup":
if(is_int($low) && is_int($high) && (abs($high - $low) <= 30)) {
printf("\n");
}
else { //use default text type since range is too large
printf(sprintf("\n",
$html_fieldname,$html_fieldname,$selected_answer,$fieldsize,$fieldsize));
}
break;
case "menu":
if(is_int($low) && is_int($high) && (abs($high - $low) <= 30)) {
printf(sprintf("\n"));
}
else { //use default text type since range is too large
printf(sprintf("\n",
$html_fieldname,$html_fieldname,$selected_answer,$fieldsize,$fieldsize));
}
break;
case "text":
default:
printf("");
break;
} //inner switch
break;
case "double":
$fieldsize = 30;
printf(sprintf("\n",
$html_fieldname,$html_fieldname,$selected_answer,$fieldsize));
break;
case "date":
if($heading_format == "multi-question" && ($row_form_questions['subquestion'] > 1))
printf("\n");
break;
case "time":
$fieldsize = 10;
printf(sprintf("\n",
$html_fieldname,$html_fieldname,$selected_answer,$fieldsize,$fieldsize));
break;
case "year":
$fieldsize = 4;
printf(sprintf("\n",
$html_fieldname,$html_fieldname,$selected_answer,$fieldsize,$fieldsize));
break;
case "null": //null response
printf(sprintf("\n",$html_fieldname));
break;
default:
//an unsupported or not yet defined data type
$fieldsize = 30;
printf(sprintf("\n",
$html_fieldname,$html_fieldname,$selected_answer,$fieldsize,$fieldsize));
break;
} //switch data type
//if format is multi-title, write a end of column tag after the field
//additionally, if that field was the last subquestion, write an end of row tag
// and if this was the last subqestion of the last iteration, write an end of table tag
if($heading_format == "multi-title") {
printf(sprintf(" | \n"));
if($trial_form || $row_form_questions['subquestion'] == $num_subquestions) {
printf(sprintf("\n
\n"));
if($current_iteration == $num_iterations)
printf(sprintf("