4 require_once
'Services/Taxonomy/interfaces/interface.ilTaxAssignedItemInfo.php';
161 $this->fieldFilters[$fieldName] = $fieldValue;
166 $this->taxFilters[$taxId] = $taxNodes;
217 $expressions = array();
219 foreach($this->fieldFilters as $fieldName => $fieldValue)
227 $expressions[] = $this->db->like(
'qpl_questions.' . $fieldName,
'text',
"%%$fieldValue%%");
232 $expressions[] =
"qpl_qst_type.type_tag = {$this->db->quote($fieldValue, 'text')}";
236 if ($fieldValue !=
"" && !is_array($fieldValue))
238 $fieldValue = array($fieldValue);
240 $expressions[] = $this->db->in(
"qpl_questions.question_id", $fieldValue,
false,
"integer");
250 $expressions = array();
252 require_once
'Services/Taxonomy/classes/class.ilTaxonomyTree.php';
253 require_once
'Services/Taxonomy/classes/class.ilTaxNodeAssignment.php';
255 foreach($this->taxFilters as $taxId => $taxNodes)
257 $questionIds = array();
261 foreach($taxNodes as $taxNode)
263 $forceBypass =
false;
267 $taxNodeAssignment =
new ilTaxNodeAssignment($this->parentObjType, $this->parentObjId,
'quest', $taxId);
269 $subNodes = $taxTree->getSubTreeIds($taxNode);
270 $subNodes[] = $taxNode;
272 $taxItems = $taxNodeAssignment->getAssignmentsOfNode($subNodes);
274 foreach($taxItems as $taxItem)
276 $questionIds[$taxItem[
'item_id']] = $taxItem[
'item_id'];
282 $expressions[] = $this->db->in(
'question_id', $questionIds,
false,
'integer');
293 case self::QUESTION_INSTANCE_TYPE_ORIGINALS:
295 return 'qpl_questions.original_id IS NULL';
297 case self::QUESTION_INSTANCE_TYPE_DUPLICATES:
299 return 'qpl_questions.original_id IS NOT NULL';
309 return $this->db->in(
'qpl_questions.question_id', $this->
getQuestionIdsFilter(),
false,
'integer');
317 if( $this->parentObjId )
319 return "qpl_questions.obj_fi = {$this->db->quote($this->parentObjId, 'integer')}";
327 $expressions = array();
331 case self::ANSWER_STATUS_FILTER_ALL_NON_CORRECT:
334 (tst_test_result.question_fi IS NULL OR tst_test_result.points < qpl_questions.points) 338 case self::ANSWER_STATUS_FILTER_NON_ANSWERED_ONLY:
340 $expressions[] =
'tst_test_result.question_fi IS NULL';
343 case self::ANSWER_STATUS_FILTER_WRONG_ANSWERED_ONLY:
345 $expressions[] =
'tst_test_result.question_fi IS NOT NULL';
346 $expressions[] =
'tst_test_result.points < qpl_questions.points';
356 INNER JOIN qpl_qst_type 357 ON qpl_qst_type.question_type_id = qpl_questions.question_type_fi 363 LEFT JOIN tst_test_result 364 ON tst_test_result.question_fi = qpl_questions.question_id 365 AND tst_test_result.active_fi = {$this->db->quote($this->getAnswerStatusActiveId(), 'integer')} 374 $CONDITIONS = array();
391 $CONDITIONS = array_merge($CONDITIONS,
397 $CONDITIONS = implode(
' AND ', $CONDITIONS);
399 return strlen($CONDITIONS) ?
'AND '.$CONDITIONS :
'';
404 $selectFields = array(
406 'qpl_qst_type.type_tag',
407 'qpl_qst_type.plugin',
408 'qpl_questions.points max_points' 413 $selectFields[] =
'tst_test_result.points reached_points';
414 $selectFields[] =
"CASE 415 WHEN tst_test_result.points IS NULL THEN '".self::QUESTION_ANSWER_STATUS_NON_ANSWERED.
"' 416 WHEN tst_test_result.points < qpl_questions.points THEN '".self::QUESTION_ANSWER_STATUS_WRONG_ANSWERED.
"' 417 ELSE '".self::QUESTION_ANSWER_STATUS_CORRECT_ANSWERED.
"' 418 END question_answer_status 422 $selectFields = implode(
",\n\t\t\t\t", $selectFields);
425 SELECT {$selectFields} 432 {$this->getSelectFieldsExpression()} 436 {$this->getTableJoinExpression()} 438 WHERE qpl_questions.tstamp > 0 445 {$this->getConditionalFilterExpression()} 451 UNION {$this->buildBasicQuery()} 452 AND {$this->db->in('qpl_questions.question_id', $this->getForcedQuestionIds(), false, 'integer')} 471 #vd($this->db->db->last_query); 473 while(
$row = $this->db->fetchAssoc(
$res) )
482 $row[
'ttype'] = $this->lng->txt(
$row[
'type_tag']);
484 $this->questions[
$row[
'question_id'] ] =
$row;
490 $taxAssignmentData = array();
494 require_once
'Services/Taxonomy/classes/class.ilTaxonomyTree.php';
495 require_once
'Services/Taxonomy/classes/class.ilTaxNodeAssignment.php';
501 $assignments = $taxAssignment->getAssignmentsOfItem($questionId);
503 foreach($assignments as $assData)
505 if( !isset($taxAssignmentData[ $assData[
'tax_id'] ]) )
507 $taxAssignmentData[ $assData[
'tax_id'] ] = array();
510 $nodeData = $taxTree->getNodeData($assData[
'node_id']);
512 $assData[
'node_lft'] = $nodeData[
'lft'];
514 $taxAssignmentData[ $assData[
'tax_id'] ][ $assData[
'node_id'] ] = $assData;
518 return $taxAssignmentData;
523 if( !isset($questionData[
'plugin']) )
528 if( !$questionData[
'plugin'] )
533 return $this->pluginAdmin->isActive(
IL_COMP_MODULE,
'TestQuestionPool',
'qst', $questionData[
'type_tag']);
543 return isset($this->questions[$questionId]);
555 public function getTitle($a_comp_id, $a_item_type, $a_item_id)
557 if( $a_comp_id !=
'qpl' || $a_item_type !=
'quest' || !(
int)$a_item_id )
562 if( !isset($this->questions[$a_item_id]) )
567 return $this->questions[$a_item_id][
'title'];
574 require_once
'Modules/TestQuestionPool/exceptions/class.ilTestQuestionPoolException.php';
577 'No active id given! You cannot use the answer status filter without giving an active id.'
setAnswerStatusFilter($answerStatusFilter)
Taxonomy node <-> item assignment.
getAnswerStatusActiveId()
getSelectFieldsExpression()
$questionInstanceTypeFilter
const QUESTION_INSTANCE_TYPE_DUPLICATES
getConditionalFilterExpression()
isActiveQuestionType($questionData)
addTaxonomyFilter($taxId, $taxNodes)
setAnswerStatusActiveId($answerStatusActiveId)
Administration class for plugins.
const ANSWER_STATUS_FILTER_NON_ANSWERED_ONLY
getQuestionIdsFilterExpression()
getAvailableTaxonomyIds()
getTaxonomyFilterExpressions()
getAnswerStatusFilterExpressions()
setParentObjectType($parentObjType)
getParentObjectIdFilterExpression()
getFieldFilterExpressions()
getQuestionInstanceTypeFilter()
const ANSWER_STATUS_FILTER_WRONG_ANSWERED_ONLY
getQuestionInstanceTypeFilterExpression()
setQuestionInstanceTypeFilter($questionInstanceTypeFilter)
const ANSWER_STATUS_FILTER_ALL_NON_CORRECT
answer status filter value domain
Interface for assigned items of taxonomies.
setForcedQuestionIds($forcedQuestionIds)
const QUESTION_ANSWER_STATUS_CORRECT_ANSWERED
const QUESTION_ANSWER_STATUS_WRONG_ANSWERED
getTitle($a_comp_id, $a_item_type, $a_item_id)
Get title of an assigned item.
addFieldFilter($fieldName, $fieldValue)
loadTaxonomyAssignmentData($questionId)
__construct(ilDB $db, ilLanguage $lng, ilPluginAdmin $pluginAdmin, $parentObjId)
Constructor.
const QUESTION_INSTANCE_TYPE_ORIGINALS
const QUESTION_ANSWER_STATUS_NON_ANSWERED
answer status domain for single questions
setAvailableTaxonomyIds($availableTaxonomyIds)
setQuestionIdsFilter($questionIdsFilter)