ILIAS  Release_5_0_x_branch Revision 61816
 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 {
23  function _deleteAllLinksOfSource($a_source_type, $a_source_id, $a_lang = "-")
24  {
25  global $ilias, $ilDB;
26 
27  $lang_where = "";
28  if ($a_lang != "")
29  {
30  $lang_where = " AND source_lang = ".$ilDB->quote($a_lang, "text");
31  }
32 
33  $q = "DELETE FROM int_link WHERE source_type = ".
34  $ilDB->quote($a_source_type, "text")." AND source_id=".
35  $ilDB->quote((int) $a_source_id, "integer").
36  $lang_where;
37  $ilDB->manipulate($q);
38  }
39 
47  function _deleteAllLinksToTarget($a_target_type, $a_target_id, $a_target_inst = 0)
48  {
49  global $ilias, $ilDB;
50 
51  $ilDB->manipulateF("DELETE FROM int_link WHERE target_type = %s ".
52  " AND target_id = %s AND target_inst = %s ",
53  array("text", "integer", "integer"),
54  array($a_target_type, (int) $a_target_id, (int) $a_target_inst));
55  }
56 
66  function _saveLink($a_source_type, $a_source_id, $a_target_type, $a_target_id, $a_target_inst = 0,
67  $a_source_lang = "-")
68  {
69  global $ilDB;
70 
71  $ilDB->replace("int_link",
72  array(
73  "source_type" => array("text", $a_source_type),
74  "source_id" => array("integer", (int) $a_source_id),
75  "source_lang" => array("text", $a_source_lang),
76  "target_type" => array("text", $a_target_type),
77  "target_id" => array("integer", (int) $a_target_id),
78  "target_inst" => array("integer", (int) $a_target_inst)
79  ),
80  array()
81  );
82  }
83 
93  function _getSourcesOfTarget($a_target_type, $a_target_id, $a_target_inst)
94  {
95  global $ilias, $ilDB;
96 
97  $q = "SELECT * FROM int_link WHERE ".
98  "target_type = ".$ilDB->quote($a_target_type, "text")." AND ".
99  "target_id = ".$ilDB->quote((int) $a_target_id, "integer")." AND ".
100  "target_inst = ".$ilDB->quote((int) $a_target_inst, "integer");
101  $source_set = $ilDB->query($q);
102  $sources = array();
103  while ($source_rec = $ilDB->fetchAssoc($source_set))
104  {
105  $sources[$source_rec["source_type"].":".$source_rec["source_id"].":".$source_rec["source_lang"]] =
106  array("type" => $source_rec["source_type"], "id" => $source_rec["source_id"],
107  "lang" => $source_rec["source_lang"]);
108  }
109 
110  return $sources;
111  }
112 
121  function _getTargetsOfSource($a_source_type, $a_source_id, $a_source_lang = "-")
122  {
123  global $ilDB;
124 
125  $lang_where = "";
126  if ($a_source_lang != "")
127  {
128  $lang_where = " AND source_lang = ".$ilDB->quote($a_source_lang, "text");
129  }
130 
131  $q = "SELECT * FROM int_link WHERE ".
132  "source_type = ".$ilDB->quote($a_source_type, "text")." AND ".
133  "source_id = ".$ilDB->quote((int) $a_source_id, "integer").
134  $lang_where;
135 
136  $target_set = $ilDB->query($q);
137  $targets = array();
138  while ($target_rec = $ilDB->fetchAssoc($target_set))
139  {
140  $targets[$target_rec["target_type"].":".$target_rec["target_id"].":".$target_rec["target_inst"]] =
141  array("type" => $target_rec["target_type"], "id" => $target_rec["target_id"],
142  "inst" => $target_rec["target_inst"]);
143  }
144 
145  return $targets;
146  }
147 
157  function _getIdForImportId($a_type, $a_target)
158  {
159  switch($a_type)
160  {
161  case "PageObject":
162  $id = ilLMObject::_getIdForImportId($a_target);
163  if($id > 0)
164  {
165  return "il__pg_".$id;
166  }
167  break;
168 
169  case "StructureObject":
170  $id = ilLMObject::_getIdForImportId($a_target);
171  if($id > 0)
172  {
173  return "il__st_".$id;
174  }
175  break;
176 
177  case "GlossaryItem":
178  $id = ilGlossaryTerm::_getIdForImportId($a_target);
179  if($id > 0)
180  {
181  return "il__git_".$id;
182  }
183  break;
184 
185  case "WikiPage":
186  // no import IDs for wiki pages (yet)
187  //$id = ilGlossaryTerm::_getIdForImportId($a_target);
188  $id = 0;
189  if($id > 0)
190  {
191  return "il__wpage_".$id;
192  }
193  break;
194 
195  case "MediaObject":
196  $id = ilObjMediaObject::_getIdForImportId($a_target);
197  if($id > 0)
198  {
199  return "il__mob_".$id;
200  }
201  break;
202 
203  case "RepositoryItem":
204 
205  $tarr = explode("_", $a_target);
206  $import_id = $a_target;
207 
208  // if a ref id part is given, strip this
209  // since this will not be part of an import id
210  if ($tarr[4] != "")
211  {
212  $import_id = $tarr[0]."_".$tarr[1]."_".$tarr[2]."_".$tarr[3];
213  }
214  if (ilInternalLink::_extractInstOfTarget($a_target) == IL_INST_ID
215  && IL_INST_ID > 0)
216  {
217  // does it have a ref id part?
218  if ($tarr[4] != "")
219  {
220  return "il__obj_".$tarr[4];
221  }
222  }
223 
224  $id = ilObject::_getIdForImportId($import_id);
225 //echo "-$a_target-$id-";
226  // get ref id for object id
227  // (see ilPageObject::insertInstIntoIDs for the export procedure)
228  if($id > 0)
229  {
230  $refs = ilObject::_getAllReferences($id);
231 //var_dump($refs);
232  foreach ($refs as $ref)
233  {
234  return "il__obj_".$ref;
235  }
236  }
237  break;
238 
239  }
240  return false;
241  }
242 
252  function _exists($a_type, $a_target)
253  {
254  global $tree;
255 
256  switch($a_type)
257  {
258  case "PageObject":
259  case "StructureObject":
260  return ilLMObject::_exists($a_target);
261  break;
262 
263  case "GlossaryItem":
264  return ilGlossaryTerm::_exists($a_target);
265  break;
266 
267  case "MediaObject":
268  return ilObjMediaObject::_exists($a_target);
269  break;
270 
271  case "WikiPage":
272  include_once("./Modules/Wiki/classes/class.ilWikiPage.php");
273  return ilWikiPage::_exists("wiki", (int)$a_target);
274  break;
275 
276  case "RepositoryItem":
277  if (is_int(strpos($a_target, "_")))
278  {
280  return $tree->isInTree($ref_id);
281  }
282  break;
283  }
284  return false;
285  }
286 
287 
293  function _extractInstOfTarget($a_target)
294  {
295  if (!is_int(strpos($a_target, "__")))
296  {
297  $target = explode("_", $a_target);
298  if ($target[1] > 0)
299  {
300  return $target[1];
301  }
302  }
303  return false;
304  }
305 
311  function _removeInstFromTarget($a_target)
312  {
313  if (!is_int(strpos($a_target, "__")))
314  {
315  $target = explode("_", $a_target);
316  if ($target[1] > 0)
317  {
318  return "il__".$target[2]."_".$target[3];
319  }
320  }
321  return false;
322  }
323 
329  function _extractObjIdOfTarget($a_target)
330  {
331  $target = explode("_", $a_target);
332  return $target[count($target) - 1];
333  }
334 
340  function _extractTypeOfTarget($a_target)
341  {
342  $target = explode("_", $a_target);
343  return $target[count($target) - 2];
344  }
345 }
346 ?>