43 $this->sourcePoolDefinitions[ $sourcePoolDefinition->
getId() ] = $sourcePoolDefinition;
48 $this->lostPools[$lostPool->
getId()] = $lostPool;
53 return isset($this->lostPools[$poolId]);
58 return (
bool) count($this->lostPools);
69 return $this->lostPools[$poolId];
77 return isset($this->trashedPools[$poolId]);
82 return (
bool) count($this->trashedPools);
102 return $this->
getDefinition($sourcePoolDefinitionId) !== null;
107 if (isset($this->sourcePoolDefinitions[$sourcePoolDefinitionId])) {
108 return $this->sourcePoolDefinitions[$sourcePoolDefinitionId];
116 foreach ($this as $definition) {
117 if ($definition->getPoolId() != $sourcePoolId) {
129 return array_keys($this->sourcePoolDefinitions);
134 return count($this->sourcePoolDefinitions);
141 SELECT tst_rnd_quest_set_qpls.*, odat.obj_id pool_id, odat.title actual_pool_title, tree.child 142 FROM tst_rnd_quest_set_qpls 143 LEFT JOIN object_data odat 144 ON odat.obj_id = pool_fi 145 LEFT JOIN object_reference oref 146 ON oref.obj_id = pool_fi 149 AND child = oref.ref_id 151 ORDER BY sequence_pos ASC 154 $res = $this->db->queryF(
$query, array(
'integer',
'integer'), array(1, $this->testOBJ->getTestId()));
156 $handledDefinitions = array();
157 $trashedPools = array();
159 while ($row = $this->db->fetchAssoc(
$res)) {
160 $sourcePoolDefinition = $this->sourcePoolDefinitionFactory->getEmptySourcePoolDefinition();
161 $sourcePoolDefinition->initFromArray($row);
163 if (!isset($handledDefinitions[$sourcePoolDefinition->getId()])) {
165 $handledDefinitions[$sourcePoolDefinition->getId()] = $sourcePoolDefinition->getId();
168 $trashedPool->assignDbRow($row);
170 $trashedPool->setUnavailabilityStatus(
174 $trashedPools[$trashedPool->getId()] = $trashedPool;
178 && !$row[
'pool_id']) {
180 $lostPool->assignDbRow($row);
182 $lostPool->setUnavailabilityStatus(
188 if (isset($trashedPools[$lostPool->getId()])) {
189 unset($trashedPools[$lostPool->getId()]);
193 if (isset($row[
'actual_pool_title'])
194 && $sourcePoolDefinition->getPoolTitle() !== $row[
'actual_pool_title']) {
195 $sourcePoolDefinition->setPoolTitle($row[
'actual_pool_title']);
196 $sourcePoolDefinition->saveToDb();
200 unset($trashedPools[$row[
'pool_id']]);
207 public function saveDefinitions()
209 foreach ($this as $sourcePoolDefinition) {
211 $sourcePoolDefinition->saveToDb();
215 public function cloneDefinitionsForTestId($testId): array
217 $definitionIdMap = array();
219 foreach ($this as $definition) {
222 $originalId = $definition->getId();
223 $definition->cloneToDbForTestId($testId);
224 $cloneId = $definition->getId();
226 $definitionIdMap[$originalId] = $cloneId;
229 return $definitionIdMap;
234 $query =
"DELETE FROM tst_rnd_quest_set_qpls WHERE test_fi = %s";
235 $this->db->manipulateF(
$query, array(
'integer'), array($this->testOBJ->getTestId()));
238 public function reindexPositions()
240 $positionIndex = array();
242 foreach ($this as $definition) {
244 $positionIndex[ $definition->getId() ] = $definition->getSequencePosition();
247 asort($positionIndex);
251 foreach ($positionIndex as $definitionId => $definitionPosition) {
252 $positionIndex[$definitionId] =
$i++;
255 foreach ($this as $definition) {
256 $definition->setSequencePosition($positionIndex[$definition->getId()]);
262 return (count($this->sourcePoolDefinitions) + 1);
265 public function getInvolvedSourcePoolIds(): array
267 $involvedSourcePoolIds = array();
269 foreach ($this as $definition) {
271 $involvedSourcePoolIds[ $definition->getPoolId() ] = $definition->getPoolId();
274 return array_values($involvedSourcePoolIds);
277 public function getQuestionAmount(): ?
int 281 foreach ($this as $definition) {
283 $questionAmount += $definition->getQuestionAmount();
286 return $questionAmount;
294 $query =
"SELECT COUNT(*) cnt FROM tst_rnd_quest_set_qpls WHERE test_fi = %s";
295 $res = $this->db->queryF(
$query, array(
'integer'), array($this->testOBJ->getTestId()));
297 $row = $this->db->fetchAssoc(
$res);
299 return $row[
'cnt'] > 0;
302 public function hasTaxonomyFilters():
bool 304 foreach ($this as $definition) {
307 if (count($definition->getMappedTaxonomyFilter())) {
310 #if( $definition->getMappedFilterTaxId() && $definition->getMappedFilterTaxNodeId() ) 323 foreach ($this as $definition) {
324 if (count($definition->getTypeFilter())) {
350 return reset($this->sourcePoolDefinitions);
358 return current($this->sourcePoolDefinitions);
366 return key($this->sourcePoolDefinitions);
374 return next($this->sourcePoolDefinitions);
382 return key($this->sourcePoolDefinitions) !== null;
setTrashedPools($trashedPools)
__construct(ilDBInterface $db, ilObjTest $testOBJ, ilTestRandomQuestionSetSourcePoolDefinitionFactory $sourcePoolDefinitionFactory)
hasDefinition($sourcePoolDefinitionId)
ilTestRandomQuestionSetSourcePoolDefinitionFactory $sourcePoolDefinitionFactory
const UNAVAILABILITY_STATUS_LOST
areAllUsedPoolsAvailable()
const UNAVAILABILITY_STATUS_TRASHED
addDefinition(ilTestRandomQuestionSetSourcePoolDefinition $sourcePoolDefinition)
array $sourcePoolDefinitions
getDefinition($sourcePoolDefinitionId)
getDefinitionBySourcePoolId($sourcePoolId)
addLostPool(ilTestRandomQuestionSetNonAvailablePool $lostPool)