ILIAS  Release_4_4_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 $ilias, $ilDB;
70 
71  $ilDB->manipulate("DELETE FROM int_link WHERE ".
72  "source_type = ".$ilDB->quote($a_source_type, "text")." AND ".
73  "source_id = ".$ilDB->quote((int) $a_source_id, "integer")." AND ".
74  "target_type = ".$ilDB->quote($a_target_type, "text")." AND ".
75  "target_id = ".$ilDB->quote((int) $a_target_id, "integer")." AND ".
76  "target_inst = ".$ilDB->quote((int) $a_target_inst, "integer")." AND ".
77  "source_lang = ".$ilDB->quote($a_source_lang, "text"));
78  $ilDB->manipulate("INSERT INTO int_link ".
79  "(source_type, source_id, target_type, target_id, target_inst, source_lang) VALUES (".
80  $ilDB->quote($a_source_type, "text").",".
81  $ilDB->quote((int) $a_source_id, "integer").",".
82  $ilDB->quote($a_target_type, "text").",".
83  $ilDB->quote((int) $a_target_id, "integer").",".
84  $ilDB->quote((int) $a_target_inst, "integer").",".
85  $ilDB->quote($a_source_lang, "text").")");
86  }
87 
97  function _getSourcesOfTarget($a_target_type, $a_target_id, $a_target_inst)
98  {
99  global $ilias, $ilDB;
100 
101  $q = "SELECT * FROM int_link WHERE ".
102  "target_type = ".$ilDB->quote($a_target_type, "text")." AND ".
103  "target_id = ".$ilDB->quote((int) $a_target_id, "integer")." AND ".
104  "target_inst = ".$ilDB->quote((int) $a_target_inst, "integer");
105  $source_set = $ilDB->query($q);
106  $sources = array();
107  while ($source_rec = $ilDB->fetchAssoc($source_set))
108  {
109  $sources[$source_rec["source_type"].":".$source_rec["source_id"].":".$source_rec["source_lang"]] =
110  array("type" => $source_rec["source_type"], "id" => $source_rec["source_id"],
111  "lang" => $source_rec["source_lang"]);
112  }
113 
114  return $sources;
115  }
116 
125  function _getTargetsOfSource($a_source_type, $a_source_id, $a_source_lang = "-")
126  {
127  global $ilDB;
128 
129  $lang_where = "";
130  if ($a_source_lang != "")
131  {
132  $lang_where = " AND source_lang = ".$ilDB->quote($a_source_lang, "text");
133  }
134 
135  $q = "SELECT * FROM int_link WHERE ".
136  "source_type = ".$ilDB->quote($a_source_type, "text")." AND ".
137  "source_id = ".$ilDB->quote((int) $a_source_id, "integer").
138  $lang_where;
139 
140  $target_set = $ilDB->query($q);
141  $targets = array();
142  while ($target_rec = $ilDB->fetchAssoc($target_set))
143  {
144  $targets[$target_rec["target_type"].":".$target_rec["target_id"].":".$target_rec["target_inst"]] =
145  array("type" => $target_rec["target_type"], "id" => $target_rec["target_id"],
146  "inst" => $target_rec["target_inst"]);
147  }
148 
149  return $targets;
150  }
151 
161  function _getIdForImportId($a_type, $a_target)
162  {
163  switch($a_type)
164  {
165  case "PageObject":
166  $id = ilLMObject::_getIdForImportId($a_target);
167  if($id > 0)
168  {
169  return "il__pg_".$id;
170  }
171  break;
172 
173  case "StructureObject":
174  $id = ilLMObject::_getIdForImportId($a_target);
175  if($id > 0)
176  {
177  return "il__st_".$id;
178  }
179  break;
180 
181  case "GlossaryItem":
182  $id = ilGlossaryTerm::_getIdForImportId($a_target);
183  if($id > 0)
184  {
185  return "il__git_".$id;
186  }
187  break;
188 
189  case "WikiPage":
190  // no import IDs for wiki pages (yet)
191  //$id = ilGlossaryTerm::_getIdForImportId($a_target);
192  $id = 0;
193  if($id > 0)
194  {
195  return "il__wpage_".$id;
196  }
197  break;
198 
199  case "MediaObject":
200  $id = ilObjMediaObject::_getIdForImportId($a_target);
201  if($id > 0)
202  {
203  return "il__mob_".$id;
204  }
205  break;
206 
207  case "RepositoryItem":
208 
209  $tarr = explode("_", $a_target);
210  $import_id = $a_target;
211 
212  // if a ref id part is given, strip this
213  // since this will not be part of an import id
214  if ($tarr[4] != "")
215  {
216  $import_id = $tarr[0]."_".$tarr[1]."_".$tarr[2]."_".$tarr[3];
217  }
218  if (ilInternalLink::_extractInstOfTarget($a_target) == IL_INST_ID
219  && IL_INST_ID > 0)
220  {
221  // does it have a ref id part?
222  if ($tarr[4] != "")
223  {
224  return "il__obj_".$tarr[4];
225  }
226  }
227 
228  $id = ilObject::_getIdForImportId($import_id);
229 //echo "-$a_target-$id-";
230  // get ref id for object id
231  // (see ilPageObject::insertInstIntoIDs for the export procedure)
232  if($id > 0)
233  {
234  $refs = ilObject::_getAllReferences($id);
235 //var_dump($refs);
236  foreach ($refs as $ref)
237  {
238  return "il__obj_".$ref;
239  }
240  }
241  break;
242 
243  }
244  return false;
245  }
246 
256  function _exists($a_type, $a_target)
257  {
258  global $tree;
259 
260  switch($a_type)
261  {
262  case "PageObject":
263  case "StructureObject":
264  return ilLMObject::_exists($a_target);
265  break;
266 
267  case "GlossaryItem":
268  return ilGlossaryTerm::_exists($a_target);
269  break;
270 
271  case "MediaObject":
272  return ilObjMediaObject::_exists($a_target);
273  break;
274 
275  case "WikiPage":
276  include_once("./Modules/Wiki/classes/class.ilWikiPage.php");
277  return ilWikiPage::_exists("wiki", (int)$a_target);
278  break;
279 
280  case "RepositoryItem":
281  if (is_int(strpos($a_target, "_")))
282  {
284  return $tree->isInTree($ref_id);
285  }
286  break;
287  }
288  return false;
289  }
290 
291 
297  function _extractInstOfTarget($a_target)
298  {
299  if (!is_int(strpos($a_target, "__")))
300  {
301  $target = explode("_", $a_target);
302  if ($target[1] > 0)
303  {
304  return $target[1];
305  }
306  }
307  return false;
308  }
309 
315  function _removeInstFromTarget($a_target)
316  {
317  if (!is_int(strpos($a_target, "__")))
318  {
319  $target = explode("_", $a_target);
320  if ($target[1] > 0)
321  {
322  return "il__".$target[2]."_".$target[3];
323  }
324  }
325  return false;
326  }
327 
333  function _extractObjIdOfTarget($a_target)
334  {
335  $target = explode("_", $a_target);
336  return $target[count($target) - 1];
337  }
338 
344  function _extractTypeOfTarget($a_target)
345  {
346  $target = explode("_", $a_target);
347  return $target[count($target) - 2];
348  }
349 }
350 ?>