24include_once
"./Modules/SurveyQuestionPool/classes/class.SurveyQuestion.php";
60 include_once
"./Modules/SurveyQuestionPool/classes/class.SurveyCategories.php";
108 $this->label =
$data[
'label'];
113 include_once(
"./Services/RTE/classes/class.ilRTE.php");
119 $this->use_min_answers = (
$data[
'use_min_answers']) ?
true :
false;
120 $this->nr_min_answers =
$data[
'nr_min_answers'];
121 $this->nr_max_answers =
$data[
'nr_max_answers'];
123 $this->categories->flushCategories();
124 $result =
$ilDB->queryF(
"SELECT svy_variable.*, svy_category.title, svy_category.neutral FROM svy_variable, svy_category WHERE svy_variable.question_fi = %s AND svy_variable.category_fi = svy_category.category_id ORDER BY sequence ASC",
132 $this->categories->addCategory(
$data[
"title"],
$data[
"other"],
$data[
"neutral"],
null, (
$data[
'scale']) ?
$data[
'scale'] : (
$data[
'sequence'] + 1));
136 parent::loadFromDb(
$id);
151 $this->categories->getCategoryCount()
171 $affectedRows = parent::saveToDb($original_id);
172 if ($affectedRows == 1)
176 array($this->
getId())
178 $affectedRows =
$ilDB->manipulateF(
"INSERT INTO " . $this->
getAdditionalTableName() .
" (question_fi, orientation, use_min_answers, nr_min_answers, nr_max_answers) VALUES (%s, %s, %s, %s, %s)",
179 array(
'integer',
'text',
'integer',
'integer',
'integer'),
183 ($this->use_min_answers) ? 1 : 0,
184 ($this->nr_min_answers > 0) ? $this->nr_min_answers :
null,
185 ($this->nr_max_answers > 0) ? $this->nr_max_answers :
null
199 $affectedRows =
$ilDB->manipulateF(
"DELETE FROM svy_variable WHERE question_fi = %s",
201 array($this->
getId())
204 for ($i = 0; $i < $this->categories->getCategoryCount(); $i++)
206 $cat = $this->categories->getCategory($i);
208 $next_id =
$ilDB->nextId(
'svy_variable');
209 $affectedRows =
$ilDB->manipulateF(
"INSERT INTO svy_variable (variable_id, category_fi, question_fi, value1, other, sequence, scale, tstamp) VALUES (%s, %s, %s, %s, %s, %s, %s, %s)",
210 array(
'integer',
'integer',
'integer',
'float',
'integer',
'integer',
'integer',
'integer'),
211 array($next_id, $category_id, $this->
getId(), ($i + 1), $cat->other, $i, ($cat->scale > 0) ? $cat->scale :
null, time())
223 function toXML($a_include_header = TRUE, $obligatory_state =
"")
225 include_once(
"./Services/Xml/classes/class.ilXmlWriter.php");
228 $this->
insertXML($a_xml_writer, $a_include_header, $obligatory_state);
229 $xml = $a_xml_writer->xmlDumpMem(FALSE);
230 if (!$a_include_header)
232 $pos = strpos($xml,
"?>");
233 $xml = substr($xml, $pos + 2);
245 function insertXML(&$a_xml_writer, $a_include_header = TRUE)
248 "id" => $this->
getId(),
250 "type" => $this->getQuestiontype(),
253 $a_xml_writer->xmlStartTag(
"question", $attrs);
255 $a_xml_writer->xmlElement(
"description", NULL, $this->
getDescription());
256 $a_xml_writer->xmlElement(
"author", NULL, $this->
getAuthor());
257 if (strlen($this->label))
260 "label" => $this->label,
267 $a_xml_writer->xmlStartTag(
"questiontext", $attrs);
269 $a_xml_writer->xmlEndTag(
"questiontext");
271 $a_xml_writer->xmlStartTag(
"responses");
273 for ($i = 0; $i < $this->categories->getCategoryCount(); $i++)
278 if (strlen($this->categories->getCategory($i)->other)) $attrs[
'other'] = $this->categories->getCategory($i)->other;
279 if (strlen($this->categories->getCategory($i)->neutral)) $attrs[
'neutral'] = $this->categories->getCategory($i)->neutral;
280 if (strlen($this->categories->getCategory($i)->label)) $attrs[
'label'] = $this->categories->getCategory($i)->label;
281 if (strlen($this->categories->getCategory($i)->scale)) $attrs[
'scale'] = $this->categories->getCategory($i)->scale;
282 $a_xml_writer->xmlStartTag(
"response_multiple", $attrs);
283 $this->
addMaterialTag($a_xml_writer, $this->categories->getCategory($i)->title);
284 $a_xml_writer->xmlEndTag(
"response_multiple");
287 $a_xml_writer->xmlEndTag(
"responses");
289 if (count($this->material))
291 if (preg_match(
"/il_(\d*?)_(\w+)_(\d+)/", $this->material[
"internal_link"], $matches))
294 "label" => $this->material[
"title"]
296 $a_xml_writer->xmlStartTag(
"material", $attrs);
297 $intlink =
"il_" . IL_INST_ID .
"_" . $matches[2] .
"_" . $matches[3];
298 if (strcmp($matches[1],
"") != 0)
300 $intlink = $this->material[
"internal_link"];
302 $a_xml_writer->xmlElement(
"mattext", NULL, $intlink);
303 $a_xml_writer->xmlEndTag(
"material");
307 $a_xml_writer->xmlStartTag(
"metadata");
308 $a_xml_writer->xmlStartTag(
"metadatafield");
309 $a_xml_writer->xmlElement(
"fieldlabel", NULL,
"orientation");
310 $a_xml_writer->xmlElement(
"fieldentry", NULL, $this->
getOrientation());
311 $a_xml_writer->xmlEndTag(
"metadatafield");
312 $a_xml_writer->xmlStartTag(
"metadatafield");
313 $a_xml_writer->xmlElement(
"fieldlabel", NULL,
"use_min_answers");
314 $a_xml_writer->xmlElement(
"fieldentry", NULL, $this->use_min_answers);
315 $a_xml_writer->xmlEndTag(
"metadatafield");
316 $a_xml_writer->xmlStartTag(
"metadatafield");
317 $a_xml_writer->xmlElement(
"fieldlabel", NULL,
"nr_min_answers");
318 $a_xml_writer->xmlElement(
"fieldentry", NULL, $this->nr_min_answers);
319 $a_xml_writer->xmlEndTag(
"metadatafield");
320 $a_xml_writer->xmlStartTag(
"metadatafield");
321 $a_xml_writer->xmlElement(
"fieldlabel", NULL,
"nr_max_answers");
322 $a_xml_writer->xmlElement(
"fieldentry", NULL, $this->nr_max_answers);
323 $a_xml_writer->xmlEndTag(
"metadatafield");
324 $a_xml_writer->xmlEndTag(
"metadata");
326 $a_xml_writer->xmlEndTag(
"question");
337 return "SurveyMultipleChoiceQuestion";
359 $entered_value = $post_data[$this->
getId() .
"_value"];
361 if (is_array($entered_value))
363 foreach ($entered_value as $idx => $value)
365 array_push(
$data, array(
"value" => $value,
"textanswer" => $post_data[$this->
getId() .
'_' . $value .
'_other']));
368 for ($i = 0; $i < $this->categories->getCategoryCount(); $i++)
370 $cat = $this->categories->getCategory($i);
374 if (!is_array($entered_value) || !in_array($i, $entered_value))
376 if (strlen($post_data[$this->
getId() .
"_" . $i .
"_other"]))
378 array_push(
$data, array(
"value" => $i,
"textanswer" => $post_data[$this->
getId() .
'_' . $i .
'_other'],
"uncheck" =>
true));
397 $entered_value = $post_data[$this->
getId() .
"_value"];
400 if ($this->use_min_answers && $this->nr_min_answers > 0 && $this->nr_max_answers > 0 && $this->nr_min_answers == $this->nr_max_answers && count($entered_value) != $this->nr_max_answers)
402 return sprintf($this->lng->txt(
"err_no_exact_answers"), $this->nr_min_answers);
404 if ($this->use_min_answers && $this->nr_min_answers > 0 && count($entered_value) < $this->nr_min_answers)
406 return sprintf($this->lng->txt(
"err_no_min_answers"), $this->nr_min_answers);
408 if ($this->use_min_answers && $this->nr_max_answers > 0 && count($entered_value) > $this->nr_max_answers)
410 return sprintf($this->lng->txt(
"err_no_max_answers"), $this->nr_max_answers);
412 if (!is_array($entered_value))
414 return $this->lng->txt(
"question_mr_not_checked");
416 for ($i = 0; $i < $this->categories->getCategoryCount(); $i++)
418 $cat = $this->categories->getCategory($i);
421 if (in_array($i, $entered_value))
423 if (array_key_exists($this->
getId() .
"_" . $i .
"_other", $post_data) && !strlen($post_data[$this->
getId() .
"_" . $i .
"_other"]))
425 return $this->lng->txt(
"question_mr_no_other_answer");
430 if (strlen($post_data[$this->
getId() .
"_" . $i .
"_other"]))
432 return $this->lng->txt(
"question_mr_no_other_answer_checked");
446 $return_data = array();
448 if (is_array($post_data[$this->
getId() .
"_value"]))
450 foreach ($post_data[$this->
getId() .
"_value"] as $entered_value)
452 if (strlen($entered_value) > 0)
456 $next_id =
$ilDB->nextId(
'svy_answer');
460 $fields[
'answer_id'] = array(
"integer", $next_id);
461 $fields[
'question_fi'] = array(
"integer", $this->
getId());
462 $fields[
'active_fi'] = array(
"integer", $active_id);
463 $fields[
'value'] = array(
"float", (strlen($entered_value)) ? $entered_value : NULL);
464 $fields[
'textanswer'] = array(
"clob", ($post_data[$this->
getId() .
"_" . $entered_value .
"_other"]) ? $post_data[$this->
getId() .
"_" . $entered_value .
"_other"] :
null);
465 $fields[
'tstamp'] = array(
"integer", time());
467 $affectedRows =
$ilDB->insert(
"svy_answer", $fields);
471 $return_data[] = array(
"value"=>$entered_value,
472 "textanswer"=>$post_data[$this->
getId() .
"_" . $entered_value .
"_other"]);
493 foreach ($a_meta as $key => $value)
495 switch ($value[
"label"])
500 case "use_min_answers":
501 $this->use_min_answers = $value[
"entry"];
503 case "nr_min_answers":
504 $this->nr_min_answers = $value[
"entry"];
506 case "nr_max_answers":
507 $this->nr_max_answers = $value[
"entry"];
528 $this->categories->addCategory(
531 strlen(
$data[
'neutral']) ?
$data[
'neutral'] : 0,
532 strlen(
$data[
'label']) ?
$data[
'label'] :
null,
533 strlen(
$data[
'scale']) ?
$data[
'scale'] :
null
557 return array(
"=",
"<>");
570 for ($i = 0; $i < $this->categories->getCategoryCount(); $i++)
572 $category = $this->categories->getCategory($i);
573 $options[$category->scale-1] = $category->scale .
" - " . $category->title;
586 include_once
"./Services/Form/classes/class.ilSelectInputGUI.php";
590 $step3->setValue($default);
604 $category = $this->categories->getCategoryForScale($value+1);
607 return $category->scale .
609 ((strlen($category->title)) ? $category->title : $this->lng->txt(
'other_answer'));
sprintf('%.4f', $callTime)
An exception for terminatinating execution or to throw for unit testing.
MultipleChoice survey question.
getPreconditionValueOutput($value)
Returns the output for a precondition value.
getAvailableRelations()
Returns the available relations for the question.
getPreconditionSelectValue($default="", $title, $variable)
Creates a form property for the precondition value.
checkUserInput($post_data, $survey_id)
Checks the input of the active user for obligatory status and entered values.
saveUserInput($post_data, $active_id, $a_return=false)
importResponses($a_data)
Import response data from the question import file.
isComplete()
Returns true if the question is complete for use.
getQuestionType()
Returns the question type of the question.
loadFromDb($id)
Loads a SurveyMultipleChoiceQuestion object from the database.
usableForPrecondition()
Returns if the question is usable for preconditions.
getAdditionalTableName()
Returns the name of the additional question data table in the database.
getQuestionDataArray($id)
Returns the question data fields from the database.
saveToDb($original_id="")
Saves a SurveyMultipleChoiceQuestion object to a database.
insertXML(&$a_xml_writer, $a_include_header=TRUE)
Adds the question XML to a given XMLWriter object.
toXML($a_include_header=TRUE, $obligatory_state="")
Returns an xml representation of the question.
getPreconditionOptions()
Returns the options for preconditions.
importAdditionalMetadata($a_meta)
Import additional meta data from the question import file.
__construct($title="", $description="", $author="", $questiontext="", $owner=-1, $orientation=0)
The constructor takes possible arguments an creates an instance of the SurveyMultipleChoiceQuestion o...
& getWorkingDataFromUserInput($post_data)
Creates the user data of the svy_answer table from the POST data.
Basic class for all survey question types.
setQuestiontext($questiontext="")
Sets the questiontext of the SurveyQuestion object.
setId($id=-1)
Sets the id of the SurveyQuestion object.
setAuthor($author="")
Sets the authors name of the SurveyQuestion object.
getDescription()
Gets the description string of the SurveyQuestion object.
getId()
Gets the id of the SurveyQuestion object.
setDescription($description="")
Sets the description string of the SurveyQuestion object.
setObjId($obj_id=0)
Set the reference id of the container object.
getAuthor()
Gets the authors name of the SurveyQuestion object.
setOriginalId($original_id)
getQuestiontext()
Gets the questiontext of the SurveyQuestion object.
getObligatory($survey_id="")
Gets the obligatory state of the question.
setOrientation($orientation=0)
Sets the orientation of the question output.
saveCategoryToDb($categorytext, $neutral=0)
Saves a category to the database.
getTitle()
Gets the title string of the SurveyQuestion object.
setComplete($a_complete)
Sets the complete state of the question.
saveMaterial()
save material to db
setOwner($owner="")
Sets the creator/owner ID of the SurveyQuestion object.
setTitle($title="")
Sets the title string of the SurveyQuestion object.
saveCompletionStatus($original_id="")
Saves the complete flag to the database.
addMaterialTag(&$a_xml_writer, $a_material, $close_material_tag=TRUE, $add_mobs=TRUE, $a_attrs=null)
Creates an XML material tag from a plain text or xhtml text.
getOrientation()
Gets the orientation of the question output.
setObligatory($obligatory=1)
Sets the obligatory state of the question.
static _replaceMediaObjectImageSrc($a_text, $a_direction=0, $nic=IL_INST_ID)
Replaces image source from mob image urls with the mob id or replaces mob id with the correct image s...
xmlHeader()
Writes xml header @access public.
if(!is_array($argv)) $options