ILIAS  release_4-3 Revision
 All Data Structures Namespaces Files Functions Variables Groups Pages
class.ilInternalLink.php
Go to the documentation of this file.
1 <?php
2 /* Copyright (c) 1998-2009 ILIAS open source, Extended GPL, see docs/LICENSE */
3 
15 {
22  function _deleteAllLinksOfSource($a_source_type, $a_source_id)
23  {
24  global $ilias, $ilDB;
25 
26  $q = "DELETE FROM int_link WHERE source_type = ".
27  $ilDB->quote($a_source_type, "text")." AND source_id=".
28  $ilDB->quote((int) $a_source_id, "integer");
29  $ilDB->manipulate($q);
30  }
31 
39  function _deleteAllLinksToTarget($a_target_type, $a_target_id, $a_target_inst = 0)
40  {
41  global $ilias, $ilDB;
42 
43  $ilDB->manipulateF("DELETE FROM int_link WHERE target_type = %s ".
44  " AND target_id = %s AND target_inst = %s ",
45  array("text", "integer", "integer"),
46  array($a_target_type, (int) $a_target_id, (int) $a_target_inst));
47  }
48 
58  function _saveLink($a_source_type, $a_source_id, $a_target_type, $a_target_id, $a_target_inst = 0)
59  {
60  global $ilias, $ilDB;
61 
62  $ilDB->manipulate("DELETE FROM int_link WHERE ".
63  "source_type = ".$ilDB->quote($a_source_type, "text")." AND ".
64  "source_id = ".$ilDB->quote((int) $a_source_id, "integer")." AND ".
65  "target_type = ".$ilDB->quote($a_target_type, "text")." AND ".
66  "target_id = ".$ilDB->quote((int) $a_target_id, "integer")." AND ".
67  "target_inst = ".$ilDB->quote((int) $a_target_inst, "integer"));
68  $ilDB->manipulate("INSERT INTO int_link ".
69  "(source_type, source_id, target_type, target_id, target_inst) VALUES (".
70  $ilDB->quote($a_source_type, "text").",".
71  $ilDB->quote((int) $a_source_id, "integer").",".
72  $ilDB->quote($a_target_type, "text").",".
73  $ilDB->quote((int) $a_target_id, "integer").",".
74  $ilDB->quote((int) $a_target_inst, "integer").")");
75  }
76 
86  function _getSourcesOfTarget($a_target_type, $a_target_id, $a_target_inst)
87  {
88  global $ilias, $ilDB;
89 
90  $q = "SELECT * FROM int_link WHERE ".
91  "target_type = ".$ilDB->quote($a_target_type, "text")." AND ".
92  "target_id = ".$ilDB->quote((int) $a_target_id, "integer")." AND ".
93  "target_inst = ".$ilDB->quote((int) $a_target_inst, "integer");
94  $source_set = $ilDB->query($q);
95  $sources = array();
96  while ($source_rec = $ilDB->fetchAssoc($source_set))
97  {
98  $sources[$source_rec["source_type"].":".$source_rec["source_id"]] =
99  array("type" => $source_rec["source_type"], "id" => $source_rec["source_id"]);
100  }
101 
102  return $sources;
103  }
104 
113  function _getTargetsOfSource($a_source_type, $a_source_id)
114  {
115  global $ilDB;
116 
117  $q = "SELECT * FROM int_link WHERE ".
118  "source_type = ".$ilDB->quote($a_source_type, "text")." AND ".
119  "source_id = ".$ilDB->quote((int) $a_source_id, "integer");
120 
121  $target_set = $ilDB->query($q);
122  $targets = array();
123  while ($target_rec = $ilDB->fetchAssoc($target_set))
124  {
125  $targets[$target_rec["target_type"].":".$target_rec["target_id"].":".$target_rec["target_inst"]] =
126  array("type" => $target_rec["target_type"], "id" => $target_rec["target_id"],
127  "inst" => $target_rec["target_inst"]);
128  }
129 
130  return $targets;
131  }
132 
142  function _getIdForImportId($a_type, $a_target)
143  {
144  switch($a_type)
145  {
146  case "PageObject":
147  $id = ilLMObject::_getIdForImportId($a_target);
148  if($id > 0)
149  {
150  return "il__pg_".$id;
151  }
152  break;
153 
154  case "StructureObject":
155  $id = ilLMObject::_getIdForImportId($a_target);
156  if($id > 0)
157  {
158  return "il__st_".$id;
159  }
160  break;
161 
162  case "GlossaryItem":
163  $id = ilGlossaryTerm::_getIdForImportId($a_target);
164  if($id > 0)
165  {
166  return "il__git_".$id;
167  }
168  break;
169 
170  case "MediaObject":
171  $id = ilObjMediaObject::_getIdForImportId($a_target);
172  if($id > 0)
173  {
174  return "il__mob_".$id;
175  }
176  break;
177 
178  case "RepositoryItem":
179 
180  $tarr = explode("_", $a_target);
181  $import_id = $a_target;
182 
183  // if a ref id part is given, strip this
184  // since this will not be part of an import id
185  if ($tarr[4] != "")
186  {
187  $import_id = $tarr[0]."_".$tarr[1]."_".$tarr[2]."_".$tarr[3];
188  }
189  if (ilInternalLink::_extractInstOfTarget($a_target) == IL_INST_ID
190  && IL_INST_ID > 0)
191  {
192  // does it have a ref id part?
193  if ($tarr[4] != "")
194  {
195  return "il__obj_".$tarr[4];
196  }
197  }
198 
199  $id = ilObject::_getIdForImportId($import_id);
200 //echo "-$a_target-$id-";
201  // get ref id for object id
202  // (see ilPageObject::insertInstIntoIDs for the export procedure)
203  if($id > 0)
204  {
205  $refs = ilObject::_getAllReferences($id);
206 //var_dump($refs);
207  foreach ($refs as $ref)
208  {
209  return "il__obj_".$ref;
210  }
211  }
212  break;
213 
214  }
215  return false;
216  }
217 
227  function _exists($a_type, $a_target)
228  {
229  global $tree;
230 
231  switch($a_type)
232  {
233  case "PageObject":
234  case "StructureObject":
235  return ilLMObject::_exists($a_target);
236  break;
237 
238  case "GlossaryItem":
239  return ilGlossaryTerm::_exists($a_target);
240  break;
241 
242  case "MediaObject":
243  return ilObjMediaObject::_exists($a_target);
244  break;
245 
246  case "RepositoryItem":
247  if (is_int(strpos($a_target, "_")))
248  {
250  return $tree->isInTree($ref_id);
251  }
252  break;
253  }
254  return false;
255  }
256 
257 
263  function _extractInstOfTarget($a_target)
264  {
265  if (!is_int(strpos($a_target, "__")))
266  {
267  $target = explode("_", $a_target);
268  if ($target[1] > 0)
269  {
270  return $target[1];
271  }
272  }
273  return false;
274  }
275 
281  function _removeInstFromTarget($a_target)
282  {
283  if (!is_int(strpos($a_target, "__")))
284  {
285  $target = explode("_", $a_target);
286  if ($target[1] > 0)
287  {
288  return "il__".$target[2]."_".$target[3];
289  }
290  }
291  return false;
292  }
293 
299  function _extractObjIdOfTarget($a_target)
300  {
301  $target = explode("_", $a_target);
302  return $target[count($target) - 1];
303  }
304 
310  function _extractTypeOfTarget($a_target)
311  {
312  $target = explode("_", $a_target);
313  return $target[count($target) - 2];
314  }
315 }
316 ?>