ILIAS  release_5-2 Revision v5.2.25-18-g3f80b828510
ilInternalLink Class Reference

Class ilInternalLink. More...

+ Collaboration diagram for ilInternalLink:

Static Public Member Functions

static _deleteAllLinksOfSource ($a_source_type, $a_source_id, $a_lang="-")
 Delete all links of a given source. More...
 
static _deleteAllLinksToTarget ($a_target_type, $a_target_id, $a_target_inst=0)
 Delete all links to a given target. More...
 
static _saveLink ($a_source_type, $a_source_id, $a_target_type, $a_target_id, $a_target_inst=0, $a_source_lang="-")
 save internal link information More...
 
static _getSourcesOfTarget ($a_target_type, $a_target_id, $a_target_inst)
 get all sources of a link target More...
 
static _getTargetsOfSource ($a_source_type, $a_source_id, $a_source_lang="-")
 Get all targets of a source object (e.g., a page) More...
 
static _getIdForImportId ($a_type, $a_target)
 Get current id for an import id. More...
 
static _exists ($a_type, $a_target)
 Check if internal link refers to a valid target. More...
 
static _extractInstOfTarget ($a_target)
 Extract installation id out of target. More...
 
static _removeInstFromTarget ($a_target)
 Removes installation id from target string. More...
 
static _extractObjIdOfTarget ($a_target)
 Extract object id out of target. More...
 
static _extractTypeOfTarget ($a_target)
 Extract type out of target. More...
 

Detailed Description

Class ilInternalLink.

Some methods to handle internal links

Author
Alex Killing alex..nosp@m.kill.nosp@m.ing@g.nosp@m.mx.d.nosp@m.e
Version
$Id$

Definition at line 14 of file class.ilInternalLink.php.

Member Function Documentation

◆ _deleteAllLinksOfSource()

static ilInternalLink::_deleteAllLinksOfSource (   $a_source_type,
  $a_source_id,
  $a_lang = "-" 
)
static

Delete all links of a given source.

Parameters
string$a_source_typesource type
int$a_source_ifsource id
int$a_langsource language

Definition at line 23 of file class.ilInternalLink.php.

References $ilDB.

Referenced by SurveyQuestion\_resolveIntLinks(), assQuestion\_resolveIntLinks(), assQuestion\copySuggestedSolutionFiles(), SurveyQuestion\delete(), ilPageObject\deleteInternalLinks(), assQuestion\deleteSuggestedSolutions(), SurveyQuestion\saveMaterial(), and SurveyQuestion\syncWithOriginal().

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  }
global $ilDB
+ Here is the caller graph for this function:

◆ _deleteAllLinksToTarget()

static ilInternalLink::_deleteAllLinksToTarget (   $a_target_type,
  $a_target_id,
  $a_target_inst = 0 
)
static

Delete all links to a given target.

Parameters
string$a_target_typetarget type
int$a_target_idtarget id
int$a_target_insttarget installation id

Definition at line 47 of file class.ilInternalLink.php.

References $ilDB, and array.

Referenced by ilPortfolioPage\delete(), and ilWikiPage\delete().

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  }
Create styles array
The data for the language used.
global $ilDB
+ Here is the caller graph for this function:

◆ _exists()

static ilInternalLink::_exists (   $a_type,
  $a_target 
)
static

Check if internal link refers to a valid target.

Parameters
string$a_typetarget type ("PageObject" | "StructureObject" | "GlossaryItem" | "MediaObject")
string$a_targettarget id, e.g. "il__pg_244")
Returns
boolean true/false

Definition at line 260 of file class.ilInternalLink.php.

References $a_type, $ref_id, ilObjMediaObject\_exists(), ilGlossaryTerm\_exists(), ilPageObject\_exists(), ilLMObject\_exists(), and _extractObjIdOfTarget().

Referenced by ilPageObject\resolveIntLinks().

261  {
262  global $tree;
263 
264  switch($a_type)
265  {
266  case "PageObject":
267  case "StructureObject":
268  include_once("./Modules/LearningModule/classes/class.ilLMObject.php");
269  return ilLMObject::_exists($a_target);
270  break;
271 
272  case "GlossaryItem":
273  include_once("./Modules/Glossary/classes/class.ilGlossaryTerm.php");
274  return ilGlossaryTerm::_exists($a_target);
275  break;
276 
277  case "MediaObject":
278  include_once("./Services/MediaObjects/classes/class.ilObjMediaObject.php");
279  return ilObjMediaObject::_exists($a_target);
280  break;
281 
282  case "WikiPage":
283  include_once("./Modules/Wiki/classes/class.ilWikiPage.php");
284  return ilWikiPage::_exists("wiki", (int)$a_target);
285  break;
286 
287  case "RepositoryItem":
288  if (is_int(strpos($a_target, "_")))
289  {
291  return $tree->isInTree($ref_id);
292  }
293  break;
294  }
295  return false;
296  }
static _exists($a_parent_type, $a_id, $a_lang="", $a_no_cache=false)
Checks whether page exists.
static _exists($a_id, $a_reference=false, $a_type=NULL)
checks wether a lm content object with specified id exists or not
static _exists($a_id)
checks wether a lm content object with specified id exists or not
static _exists($a_id)
checks wether a glossary term with specified id exists or not
$a_type
Definition: workflow.php:93
$ref_id
Definition: sahs_server.php:39
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ _extractInstOfTarget()

static ilInternalLink::_extractInstOfTarget (   $a_target)
static

Extract installation id out of target.

Parameters
string$a_targetimport target id (e.g. "il_2_pg_22")

Definition at line 304 of file class.ilInternalLink.php.

References $target.

Referenced by _getIdForImportId(), ilPageObject\_handleImportRepositoryLinks(), ilPCQuestion\afterPageUpdate(), ilPCQuestionGUI\edit(), ilQuestionExporter\exportQuestion(), ilPCQuestionGUI\feedback(), ilPageObject\getQuestionIds(), ilPageObject\newIIMCopies(), ilPageObject\newMobCopies(), ilPageObject\newQuestionCopies(), ilPageObject\resolveIntLinks(), ilPCQuestionGUI\setTabs(), and ilLMObject\updateInternalLinks().

305  {
306  if (!is_int(strpos($a_target, "__")))
307  {
308  $target = explode("_", $a_target);
309  if ($target[1] > 0)
310  {
311  return $target[1];
312  }
313  }
314  return false;
315  }
+ Here is the caller graph for this function:

◆ _extractObjIdOfTarget()

◆ _extractTypeOfTarget()

static ilInternalLink::_extractTypeOfTarget (   $a_target)
static

Extract type out of target.

Parameters
string$a_targetimport target id (e.g. "il_2_pg_22")

Definition at line 351 of file class.ilInternalLink.php.

References $target.

Referenced by ilLMObject\updateInternalLinks().

352  {
353  $target = explode("_", $a_target);
354  return $target[count($target) - 2];
355  }
+ Here is the caller graph for this function:

◆ _getIdForImportId()

static ilInternalLink::_getIdForImportId (   $a_type,
  $a_target 
)
static

Get current id for an import id.

Parameters
string$a_typetarget type ("PageObject" | "StructureObject" | "GlossaryItem" | "MediaObject")
string$a_targetimport target id (e.g. "il_2_pg_22")
Returns
string current target id (e.g. "il__pg_244")

Definition at line 157 of file class.ilInternalLink.php.

References $a_type, _extractInstOfTarget(), ilObject\_getAllReferences(), ilGlossaryTerm\_getIdForImportId(), ilLMObject\_getIdForImportId(), and ilObject\_getIdForImportId().

Referenced by SurveyQuestion\_resolveInternalLink(), assQuestion\_resolveInternalLink(), ilMapArea\_resolveIntLinks(), and ilPageObject\resolveIntLinks().

158  {
159  include_once("./Modules/LearningModule/classes/class.ilLMObject.php");
160  switch($a_type)
161  {
162  case "PageObject":
163  $id = ilLMObject::_getIdForImportId($a_target);
164  if($id > 0)
165  {
166  return "il__pg_".$id;
167  }
168  break;
169 
170  case "StructureObject":
171  $id = ilLMObject::_getIdForImportId($a_target);
172  if($id > 0)
173  {
174  return "il__st_".$id;
175  }
176  break;
177 
178  case "GlossaryItem":
179  include_once("./Modules/Glossary/classes/class.ilGlossaryTerm.php");
180  $id = ilGlossaryTerm::_getIdForImportId($a_target);
181  //echo "+".$id."+".$a_target."+";
182  if($id > 0)
183  {
184  return "il__git_".$id;
185  }
186  break;
187 
188  case "WikiPage":
189  // no import IDs for wiki pages (yet)
190  //$id = ilGlossaryTerm::_getIdForImportId($a_target);
191  $id = 0;
192  if($id > 0)
193  {
194  return "il__wpage_".$id;
195  }
196  break;
197 
198  case "MediaObject":
199  $id = ilObjMediaObject::_getIdForImportId($a_target);
200  if($id > 0)
201  {
202  return "il__mob_".$id;
203  }
204  break;
205 
206  case "RepositoryItem":
207 
208  $tarr = explode("_", $a_target);
209  $import_id = $a_target;
210 
211  // if a ref id part is given, strip this
212  // since this will not be part of an import id
213  // see also bug #6685
214  if ($tarr[4] != "")
215  {
216  $import_id = $tarr[0]."_".$tarr[1]."_".$tarr[2]."_".$tarr[3];
217  }
218 
219  $id = ilObject::_getIdForImportId($import_id);
220 
221  // get ref id for object id
222  // (see ilPageObject::insertInstIntoIDs for the export procedure)
223  if($id > 0)
224  {
225  $refs = ilObject::_getAllReferences($id);
226  foreach ($refs as $ref)
227  {
228  return "il__obj_".$ref;
229  }
230  }
231 
232  // 26 Sep 2018: moved this under the import id handling above
233  // If an imported object is found, this is always preferred.
234  // see also bug #23324
235  if (ilInternalLink::_extractInstOfTarget($a_target) == IL_INST_ID
236  && IL_INST_ID > 0)
237  {
238  // does it have a ref id part?
239  if ($tarr[4] != "")
240  {
241  return "il__obj_".$tarr[4];
242  }
243  }
244 
245  break;
246 
247  }
248  return false;
249  }
static _getIdForImportId($a_import_id)
get current object id for import id (static)
static _getIdForImportId($a_import_id)
get current term id for import id (static)
static _getAllReferences($a_id)
get all reference ids of object
$a_type
Definition: workflow.php:93
static _getIdForImportId($a_import_id)
get current object id for import id (static)
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ _getSourcesOfTarget()

static ilInternalLink::_getSourcesOfTarget (   $a_target_type,
  $a_target_id,
  $a_target_inst 
)
static

get all sources of a link target

Parameters
string$a_target_typetarget type
int$a_target_idtarget id
int$a_target_insttarget installation id
Returns
array sources (array of array("type", "id"))

Definition at line 93 of file class.ilInternalLink.php.

References $ilDB, and array.

Referenced by ilPageObject\_handleImportRepositoryLinks(), ilObjMediaObjectAccess\checkAccessGlossaryTerm(), ilWikiPage\getLinksToPage(), ilWikiPage\getOrphanedPages(), ilGlossaryTerm\getUsages(), ilGlossaryPresentationGUI\listDefinitions(), ilContObjParser\processPagesToParse(), ilWikiPage\rename(), and ilLMObject\updateInternalLinks().

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  }
Create styles array
The data for the language used.
global $ilDB
+ Here is the caller graph for this function:

◆ _getTargetsOfSource()

static ilInternalLink::_getTargetsOfSource (   $a_source_type,
  $a_source_id,
  $a_source_lang = "-" 
)
static

Get all targets of a source object (e.g., a page)

Parameters
string$a_source_typesource type (e.g. "lm:pg" | "dbk:pg")
int$a_source_idsource id
Returns
array targets (array of array("type", "id", "inst"))

Definition at line 121 of file class.ilInternalLink.php.

References $ilDB, and array.

Referenced by ilObjContentObject\exportHTMLPages(), ilSCORM2004Asset\getGlossaryTermIds(), ilPageObjectGUI\showPage(), and ilLMPresentationGUI\showPrintView().

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  }
Create styles array
The data for the language used.
global $ilDB
+ Here is the caller graph for this function:

◆ _removeInstFromTarget()

static ilInternalLink::_removeInstFromTarget (   $a_target)
static

Removes installation id from target string.

Parameters
string$a_targetimport target id (e.g. "il_2_pg_22")

Definition at line 322 of file class.ilInternalLink.php.

References $target.

Referenced by ilPageObject\resolveIntLinks().

323  {
324  if (!is_int(strpos($a_target, "__")))
325  {
326  $target = explode("_", $a_target);
327  if ($target[1] > 0)
328  {
329  return "il__".$target[2]."_".$target[3];
330  }
331  }
332  return false;
333  }
+ Here is the caller graph for this function:

◆ _saveLink()

static ilInternalLink::_saveLink (   $a_source_type,
  $a_source_id,
  $a_target_type,
  $a_target_id,
  $a_target_inst = 0,
  $a_source_lang = "-" 
)
static

save internal link information

Parameters
string$a_source_typesource type
int$a_source_ifsource id
string$a_target_typetarget type
int$a_target_idtarget id
int$a_target_insttarget installation id

Definition at line 66 of file class.ilInternalLink.php.

References $ilDB, and array.

Referenced by SurveyQuestion\_resolveIntLinks(), assQuestion\_resolveIntLinks(), assQuestion\copySuggestedSolutionFiles(), ilWikiPage\saveInternalLinks(), ilPageObject\saveInternalLinks(), SurveyQuestion\saveMaterial(), and SurveyQuestion\syncWithOriginal().

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  }
Create styles array
The data for the language used.
global $ilDB
+ Here is the caller graph for this function:

The documentation for this class was generated from the following file: