ILIAS  release_5-0 Revision 5.0.0-1144-gc4397b1f870
All Data Structures Namespaces Files Functions Variables Modules Pages
class.ilQuestionPoolTaxonomiesDuplicator.php
Go to the documentation of this file.
1 <?php
2 /* Copyright (c) 1998-2013 ILIAS open source, Extended GPL, see docs/LICENSE */
3 
4 require_once 'Services/Taxonomy/classes/class.ilObjTaxonomy.php';
5 require_once 'Services/Taxonomy/classes/class.ilTaxonomyTree.php';
6 require_once 'Services/Taxonomy/classes/class.ilTaxNodeAssignment.php';
7 require_once 'Modules/TestQuestionPool/classes/class.ilQuestionPoolDuplicatedTaxonomiesKeysMap.php';
8 
16 {
17  private $sourceObjId = null;
18 
19  private $sourceObjType = null;
20 
21  private $targetObjId = null;
22 
23  private $targetObjType = null;
24 
28  private $questionIdMapping = null;
29 
34 
35  public function __construct()
36  {
37  $this->duplicatedTaxonomiesKeysMap = new ilQuestionPoolDuplicatedTaxonomiesKeysMap();
38  }
39 
40  public function setSourceObjId($sourceObjId)
41  {
42  $this->sourceObjId = $sourceObjId;
43  }
44 
45  public function getSourceObjId()
46  {
47  return $this->sourceObjId;
48  }
49 
50  public function getSourceObjType()
51  {
52  return $this->sourceObjType;
53  }
54 
56  {
57  $this->sourceObjType = $sourceObjType;
58  }
59 
60  public function getTargetObjId()
61  {
62  return $this->targetObjId;
63  }
64 
65  public function setTargetObjId($targetObjId)
66  {
67  $this->targetObjId = $targetObjId;
68  }
69 
70  public function getTargetObjType()
71  {
72  return $this->targetObjType;
73  }
74 
76  {
77  $this->targetObjType = $targetObjType;
78  }
79 
81  {
82  $this->questionIdMapping = $questionIdMapping;
83  }
84 
85  public function getQuestionIdMapping()
86  {
88  }
89 
90  public function duplicate()
91  {
92  $poolTaxonomyIds = ilObjTaxonomy::getUsageOfObject($this->getSourceObjId());
93 
94  foreach($poolTaxonomyIds as $poolTaxId)
95  {
96  $this->duplicateTaxonomyFromPoolToTest($poolTaxId);
97 
99  $poolTaxId, $this->duplicatedTaxonomiesKeysMap->getMappedTaxonomyId($poolTaxId)
100  );
101  }
102  }
103 
104  private function duplicateTaxonomyFromPoolToTest($poolTaxonomyId)
105  {
106  $testTaxonomy = new ilObjTaxonomy();
107  $testTaxonomy->create();
108 
109  $poolTaxonomy = new ilObjTaxonomy($poolTaxonomyId);
110  $poolTaxonomy->doCloneObject($testTaxonomy, null, null);
111 
112  $poolTaxonomy->getTree()->readRootId();
113  $testTaxonomy->getTree()->readRootId();
114 
115  $testTaxonomy->update();
116 
117  ilObjTaxonomy::saveUsage( $testTaxonomy->getId(), $this->getTargetObjId() );
118 
119  $this->duplicatedTaxonomiesKeysMap->addDuplicatedTaxonomy($poolTaxonomy, $testTaxonomy);
120  }
121 
122  private function transferAssignmentsFromOriginalToDuplicatedTaxonomy($originalTaxonomyId, $mappedTaxonomyId)
123  {
124  $originalTaxAssignment = new ilTaxNodeAssignment($this->getSourceObjType(), $this->getSourceObjId(), 'quest', $originalTaxonomyId);
125 
126  $duplicatedTaxAssignment = new ilTaxNodeAssignment($this->getTargetObjType(), $this->getTargetObjId(), 'quest', $mappedTaxonomyId);
127 
128  foreach($this->getQuestionIdMapping() as $originalQuestionId => $duplicatedQuestionId)
129  {
130  $assignments = $originalTaxAssignment->getAssignmentsOfItem($originalQuestionId);
131 
132  foreach($assignments as $assData)
133  {
134  $mappedNodeId = $this->duplicatedTaxonomiesKeysMap->getMappedTaxNodeId($assData['node_id']);
135 
136  $duplicatedTaxAssignment->addAssignment($mappedNodeId, $duplicatedQuestionId);
137  }
138  }
139  }
140 
145  {
147  }
148 }
Taxonomy node <-> item assignment.
static getUsageOfObject($a_obj_id, $a_include_titles=false)
Get usage of object.
transferAssignmentsFromOriginalToDuplicatedTaxonomy($originalTaxonomyId, $mappedTaxonomyId)
static saveUsage($a_tax_id, $a_obj_id)
Save Usage.