24 include_once
"./Modules/SurveyQuestionPool/classes/class.SurveyQuestion.php";
60 include_once
"./Modules/SurveyQuestionPool/classes/class.SurveyCategories.php";
81 return $ilDB->fetchAssoc(
$result);
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)
174 $affectedRows = $ilDB->manipulateF(
"DELETE FROM " . $this->
getAdditionalTableName() .
" WHERE question_fi = %s",
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",
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"];
526 $categorytext .= $material[
"text"];
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'));
getPreconditionOptions()
Returns the options for preconditions.
getQuestionType()
Returns the question type of the question.
saveCategoryToDb($categorytext, $neutral=0)
Saves a category to the database.
saveUserInput($post_data, $active_id, $a_return=false)
saveCompletionStatus($original_id="")
Saves the complete flag to the database.
importAdditionalMetadata($a_meta)
Import additional meta data from the question import file.
getAuthor()
Gets the authors name of the SurveyQuestion object.
getTitle()
Gets the title string of the SurveyQuestion object.
getObligatory($survey_id="")
Gets the obligatory state of the question.
setObligatory($obligatory=1)
Sets the obligatory state of the question.
setOrientation($orientation=0)
Sets the orientation of the question output.
& getWorkingDataFromUserInput($post_data)
Creates the user data of the svy_answer table from the POST data.
setId($id=-1)
Sets the id of the SurveyQuestion object.
loadFromDb($id)
Loads a SurveyMultipleChoiceQuestion object from the database.
getQuestionDataArray($id)
Returns the question data fields from the database.
getQuestiontext()
Gets the questiontext of the SurveyQuestion object.
getOrientation()
Gets the orientation of the question output.
checkUserInput($post_data, $survey_id)
Checks the input of the active user for obligatory status and entered values.
getAdditionalTableName()
Returns the name of the additional question data table in the database.
toXML($a_include_header=TRUE, $obligatory_state="")
Returns an xml representation 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...
setOwner($owner="")
Sets the creator/owner ID of the SurveyQuestion object.
setComplete($a_complete)
Sets the complete state of the question.
importResponses($a_data)
Import response 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...
setOriginalId($original_id)
setQuestiontext($questiontext="")
Sets the questiontext of the SurveyQuestion object.
if(!is_array($argv)) $options
getId()
Gets the id of the SurveyQuestion object.
insertXML(&$a_xml_writer, $a_include_header=TRUE)
Adds the question XML to a given XMLWriter object.
saveToDb($original_id="")
Saves a SurveyMultipleChoiceQuestion object to a database.
Basic class for all survey question types.
saveMaterial()
save material to db
xmlHeader()
Writes xml header public.
usableForPrecondition()
Returns if the question is usable for preconditions.
getPreconditionValueOutput($value)
Returns the output for a precondition value.
Create styles array
The data for the language used.
getAvailableRelations()
Returns the available relations for the question.
setAuthor($author="")
Sets the authors name of the SurveyQuestion object.
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.
setDescription($description="")
Sets the description string of the SurveyQuestion object.
getPreconditionSelectValue($default="", $title, $variable)
Creates a form property for the precondition value.
isComplete()
Returns true if the question is complete for use.
MultipleChoice survey question.
getDescription()
Gets the description string of the SurveyQuestion object.
Add data(end) time
Method that wraps PHPs time in order to allow simulations with the workflow.
setObjId($obj_id=0)
Set the reference id of the container object.
setTitle($title="")
Sets the title string of the SurveyQuestion object.