ILIAS  trunk Revision v11.0_alpha-3011-gc6b235a2e85
class.ilObjGlossary.php
Go to the documentation of this file.
1<?php
2
23{
24 protected \ILIAS\Glossary\Term\TermManager $term_manager;
25 protected \ILIAS\Style\Content\DomainService $content_style_domain;
27 protected array $file_ids = [];
28 protected array $mob_ids = [];
29 protected bool $show_tax = false;
30 protected int $style_id = 0;
31 protected bool $glo_menu_active = false;
32 protected bool $online = false;
33 protected int $snippet_length = 0;
34 protected string $pres_mode = "";
35 protected bool $virtual = false;
36 protected string $virtual_mode = "";
37 protected bool $flashcards_active = false;
38 protected string $flashcards_mode = "";
40 public array $auto_glossaries = array();
41 protected ilObjUser $user;
42
43
44 public function __construct(
45 int $a_id = 0,
46 bool $a_call_by_reference = true
47 ) {
48 global $DIC;
49 $this->tpl = $DIC["tpl"];
50
51 $this->db = $DIC->database();
52 $this->user = $DIC->user();
53 $this->type = "glo";
54 parent::__construct($a_id, $a_call_by_reference);
55 $this->content_style_domain = $DIC
56 ->contentStyle()
57 ->domain();
58 $this->term_manager = $DIC->glossary()->internal()->domain()->term($this);
59 }
60
61 public function create(bool $a_upload = false): int
62 {
63 $id = parent::create();
64
65 // meta data will be created by
66 // import parser
67 if (!$a_upload) {
68 $this->createMetaData();
69 }
70 $this->db->insert(
71 'glossary',
72 array(
73 'id' => array('integer', $this->getId()),
74 'is_online' => array('text', 'n'),
75 'virtual' => array('text', $this->getVirtualMode()),
76 'pres_mode' => array('text', 'table'),
77 'snippet_length' => array('integer', 200)
78 )
79 );
80
81 $this->setPresentationMode("table");
82 $this->setSnippetLength(200);
83
84 $this->updateAutoGlossaries();
85
86 return $id;
87 }
88
89 public function read(): void
90 {
91 parent::read();
92
93 $q = "SELECT * FROM glossary WHERE id = " .
94 $this->db->quote($this->getId(), "integer");
95 $gl_set = $this->db->query($q);
96 $gl_rec = $this->db->fetchAssoc($gl_set);
97 $this->setOnline(ilUtil::yn2tf($gl_rec["is_online"]));
98 $this->setVirtualMode((string) ($gl_rec["virtual"] ?? ""));
99 $this->setActiveGlossaryMenu(ilUtil::yn2tf($gl_rec["glo_menu_active"]));
100 $this->setPresentationMode((string) $gl_rec["pres_mode"]);
101 $this->setSnippetLength((int) $gl_rec["snippet_length"]);
102 $this->setShowTaxonomy((bool) $gl_rec["show_tax"]);
103 $this->setActiveFlashcards(ilUtil::yn2tf($gl_rec["flash_active"]));
104 $this->setFlashcardsMode($gl_rec["flash_mode"]);
105
106 // read auto glossaries
107 $set = $this->db->query(
108 "SELECT * FROM glo_glossaries " .
109 " WHERE id = " . $this->db->quote($this->getId(), "integer")
110 );
111 $glos = array();
112 while ($rec = $this->db->fetchAssoc($set)) {
113 $glos[] = $rec["glo_id"];
114 }
115 $this->setAutoGlossaries($glos);
116 }
117
118 public function setVirtualMode(string $a_mode): void
119 {
120 switch ($a_mode) {
121 case "coll":
122 $this->virtual_mode = $a_mode;
123 $this->virtual = true;
124 break;
125
126 default:
127 $this->virtual_mode = "none";
128 $this->virtual = false;
129 break;
130 }
131 }
132
133 public function getVirtualMode(): string
134 {
135 return $this->virtual_mode;
136 }
137
138 public function isVirtual(): bool
139 {
140 return $this->virtual;
141 }
142
143 public function setPresentationMode(string $a_val): void
144 {
145 $this->pres_mode = $a_val;
146 }
147
148 public function getPresentationMode(): string
149 {
150 return $this->pres_mode;
151 }
152
154 public function setSnippetLength(int $a_val): void
155 {
156 $this->snippet_length = $a_val;
157 }
158
159 public function getSnippetLength(): int
160 {
161 return ($this->snippet_length > 0)
162 ? $this->snippet_length
163 : 200;
164 }
165
166 public function setOnline(bool $a_online): void
167 {
168 $this->online = $a_online;
169 }
170
171 public function getOnline(): bool
172 {
173 return $this->online;
174 }
175
176 public static function _lookupOnline(
177 int $a_id
178 ): bool {
179 global $DIC;
180
181 $db = $DIC->database();
182
183 $q = "SELECT is_online FROM glossary WHERE id = " .
184 $db->quote($a_id, "integer");
185 $lm_set = $db->query($q);
186 $lm_rec = $db->fetchAssoc($lm_set);
187
188 return ilUtil::yn2tf($lm_rec["is_online"]);
189 }
190
194 protected static function lookup(
195 int $a_id,
196 string $a_property
197 ): string {
198 global $DIC;
199
200 $db = $DIC->database();
201
202 $set = $db->query("SELECT $a_property FROM glossary WHERE id = " .
203 $db->quote($a_id, "integer"));
204 $rec = $db->fetchAssoc($set);
205
206 return $rec[$a_property];
207 }
208
209 public static function lookupSnippetLength(int $a_id): int
210 {
211 return (int) self::lookup($a_id, "snippet_length");
212 }
213
214
215 public function setActiveGlossaryMenu(bool $a_act_glo_menu): void
216 {
217 $this->glo_menu_active = $a_act_glo_menu;
218 }
219
220 public function isActiveGlossaryMenu(): bool
221 {
222 return $this->glo_menu_active;
223 }
224
225 public function setShowTaxonomy(bool $a_val): void
226 {
227 $this->show_tax = $a_val;
228 }
229
230 public function getShowTaxonomy(): bool
231 {
232 return $this->show_tax;
233 }
234
235 public function setActiveFlashcards(bool $a_flash): void
236 {
237 $this->flashcards_active = $a_flash;
238 }
239
240 public function isActiveFlashcards(): bool
241 {
242 return $this->flashcards_active;
243 }
244
245 public function setFlashcardsMode(string $a_flash): void
246 {
247 $this->flashcards_mode = $a_flash;
248 }
249
250 public function getFlashcardsMode(): string
251 {
252 return $this->flashcards_mode;
253 }
254
258 public function setAutoGlossaries(
259 array $a_val
260 ): void {
261 $this->auto_glossaries = array();
262 foreach ($a_val as $v) {
263 $this->addAutoGlossary($v);
264 }
265 }
266
267 public function addAutoGlossary(int $glo_id): void
268 {
269 if ($glo_id > 0 && ilObject::_lookupType($glo_id) == "glo" &&
270 !in_array($glo_id, $this->auto_glossaries)) {
271 $this->auto_glossaries[] = $glo_id;
272 }
273 }
274
278 public function getAutoGlossaries(): array
279 {
280 return $this->auto_glossaries;
281 }
282
283 public function removeAutoGlossary(
284 int $a_glo_id
285 ): void {
286 $glo_ids = array();
287 foreach ($this->getAutoGlossaries() as $g) {
288 if ($g != $a_glo_id) {
289 $glo_ids[] = $g;
290 }
291 }
292 $this->setAutoGlossaries($glo_ids);
293 }
294
295 public function update(): bool
296 {
297 $this->updateMetaData();
298
299 $this->db->update(
300 'glossary',
301 array(
302 'is_online' => array('text', ilUtil::tf2yn($this->getOnline())),
303 'virtual' => array('text', $this->getVirtualMode()),
304 'glo_menu_active' => array('text', ilUtil::tf2yn($this->isActiveGlossaryMenu())),
305 'pres_mode' => array('text', $this->getPresentationMode()),
306 'show_tax' => array('integer', $this->getShowTaxonomy()),
307 'snippet_length' => array('integer', $this->getSnippetLength()),
308 'flash_active' => array('text', ilUtil::tf2yn($this->isActiveFlashcards())),
309 'flash_mode' => array('text', $this->getFlashcardsMode())
310 ),
311 array(
312 'id' => array('integer', $this->getId())
313 )
314 );
315
316 $this->updateAutoGlossaries();
317 return parent::update();
318 }
319
320 public function updateAutoGlossaries(): void
321 {
322 // update auto glossaries
323 $this->db->manipulate(
324 "DELETE FROM glo_glossaries WHERE " .
325 " id = " . $this->db->quote($this->getId(), "integer")
326 );
327 foreach ($this->getAutoGlossaries() as $glo_id) {
328 $this->db->insert(
329 'glo_glossaries',
330 array(
331 'id' => array('integer', $this->getId()),
332 'glo_id' => array('integer', $glo_id)
333 )
334 );
335 }
336 }
337
338 public static function lookupAutoGlossaries(
339 int $a_id
340 ): array {
341 global $DIC;
342
343 $db = $DIC->database();
344
345 // read auto glossaries
346 $set = $db->query(
347 "SELECT * FROM glo_glossaries " .
348 " WHERE id = " . $db->quote($a_id, "integer")
349 );
350 $glos = array();
351 while ($rec = $db->fetchAssoc($set)) {
352 $glos[] = (int) $rec["glo_id"];
353 }
354 return $glos;
355 }
356
360 public function getGlossariesForCollection(): array
361 {
362 $set = $this->db->query(
363 "SELECT * FROM glossary_collection " .
364 " WHERE id = " . $this->db->quote($this->getId(), "integer")
365 );
366 $glos = [];
367 while ($rec = $this->db->fetchAssoc($set)) {
368 $glos[] = (int) $rec["glo_id"];
369 }
370
371 return $glos;
372 }
373
374 public function addGlossaryForCollection(int $glo_id): void
375 {
376 $this->db->replace(
377 "glossary_collection",
378 [
379 "id" => ["integer", $this->getId()],
380 "glo_id" => ["integer", $glo_id]
381 ],
382 []
383 );
384 }
385
386 public function removeGlossaryFromCollection(int $glo_id): void
387 {
388 $this->db->manipulate(
389 "DELETE FROM glossary_collection WHERE " .
390 " id = " . $this->db->quote($this->getId(), "integer") .
391 " AND glo_id = " . $this->db->quote($glo_id, "integer")
392 );
393 }
394
395 public function getTermList(
396 string $searchterm = "",
397 string $a_letter = "",
398 string $a_def = "",
399 int $a_tax_node = 0,
400 bool $a_include_offline_childs = false,
401 bool $a_add_amet_fields = false,
402 ?array $a_amet_filter = null,
403 bool $a_omit_virtual = false,
404 bool $a_include_references = false
405 ): array {
406 if ($a_omit_virtual) {
407 $glo_ref_ids[] = $this->getRefId();
408 } else {
409 $glo_ref_ids = $this->getAllGlossaryIds($a_include_offline_childs, true);
410 }
412 $glo_ref_ids,
413 $searchterm,
414 $a_letter,
415 $a_def,
416 $a_tax_node,
417 $a_add_amet_fields,
418 $a_amet_filter,
419 $a_include_references
420 );
421 return $list;
422 }
423
424 public function getFirstLetters(
425 int $a_tax_node = 0
426 ): array {
427 $glo_ids = $this->getAllGlossaryIds();
428 $first_letters = ilGlossaryTerm::getFirstLetters($glo_ids, $a_tax_node);
429 return $first_letters;
430 }
431
436 public function getAllGlossaryIds(
437 bool $a_include_offline_childs = false,
438 bool $ids_are_ref_ids = false
439 ): array {
440 global $DIC;
441
442 $tree = $DIC->repositoryTree();
443
444 if ($this->isVirtual()) {
445 $glo_ids = array();
446
447 $virtual_mode = $this->getRefId() ? $this->getVirtualMode() : '';
448 if ($virtual_mode === "coll") {
449 $glo_ids = $this->getGlossariesForCollection();
450 if ($ids_are_ref_ids) {
451 $glo_ref_ids = [];
452 foreach ($glo_ids as $obj_id) {
453 $glo_ref_ids[] = current(ilObject::_getAllReferences($obj_id));
454 }
455 $glo_ids = $glo_ref_ids;
456 }
457 }
458 if (!$a_include_offline_childs) {
459 $glo_ids = $this->removeOfflineGlossaries($glo_ids, $ids_are_ref_ids);
460 }
461 // always show entries of current glossary (if no permission is given, user will not come to the presentation screen)
462 // see bug #14477
463 if ($ids_are_ref_ids) {
464 if (!in_array($this->getRefId(), $glo_ids)) {
465 $glo_ids[] = $this->getRefId();
466 }
467 } elseif (!in_array($this->getId(), $glo_ids)) {
468 $glo_ids[] = $this->getId();
469 }
470 } elseif ($ids_are_ref_ids) {
471 $glo_ids = [$this->getRefId()];
472 } else {
473 $glo_ids = [$this->getId()];
474 }
475
476 return $glo_ids;
477 }
478
479 public function createExportDirectory(string $a_type = "xml"): string
480 {
481 return ilExport::_createExportDirectory($this->getId(), $a_type, $this->getType());
482 }
483
484 public function getExportDirectory(string $a_type = "xml"): string
485 {
486 return ilExport::_getExportDirectory($this->getId(), $a_type, $this->getType());
487 }
488
489 public function delete(): bool
490 {
491 // always call parent delete function first!!
492 if (!parent::delete()) {
493 return false;
494 }
495
496 // delete terms
497 if (!$this->isVirtual()) {
498 $terms = $this->getTermList();
499 foreach ($terms as $term) {
500 $this->term_manager->deleteTerm((int) $term["id"]);
501 }
502 }
503
504 // delete term references
505 $refs = new ilGlossaryTermReferences($this->getId());
506 $refs->delete();
507
508 // delete glossary data entry
509 $q = "DELETE FROM glossary WHERE id = " . $this->db->quote($this->getId());
510 $this->db->query($q);
511
512 // delete meta data
513 $this->deleteMetaData();
514
515 return true;
516 }
517
518 public static function getDeletionDependencies(int $obj_id): array
519 {
520 global $DIC;
521
522 $lng = $DIC->language();
523
524 $dep = array();
526 foreach ($sms as $sm) {
527 $lng->loadLanguageModule("content");
528 $dep[$sm] = $lng->txt("glo_used_in_scorm");
529 }
530 return $dep;
531 }
532
533 public function getTaxonomyId(): int
534 {
535 $tax_ids = ilObjTaxonomy::getUsageOfObject($this->getId());
536 if (count($tax_ids) > 0) {
537 // glossaries handle max. one taxonomy
538 return (int) $tax_ids[0];
539 }
540 return 0;
541 }
542
543
544 public function cloneObject(int $target_id, int $copy_id = 0, bool $omit_tree = false): ?ilObject
545 {
546 $new_obj = parent::cloneObject($target_id, $copy_id, $omit_tree);
547 $this->cloneMetaData($new_obj);
548
549 $tax_ass = null;
550 $new_tax_ass = null;
551 $map = [];
552
553 //copy online status if object is not the root copy object
554 $cp_options = ilCopyWizardOptions::_getInstance($copy_id);
555
556 if (!$cp_options->isRootNode($this->getRefId())) {
557 $new_obj->setOnline($this->getOnline());
558 }
559
560 // $new_obj->setTitle($this->getTitle());
561 $new_obj->setDescription($this->getDescription());
562 $new_obj->setVirtualMode($this->getVirtualMode());
563 $new_obj->setPresentationMode($this->getPresentationMode());
564 $new_obj->setSnippetLength($this->getSnippetLength());
565 $new_obj->setAutoGlossaries($this->getAutoGlossaries());
566 $new_obj->setActiveFlashcards($this->isActiveFlashcards());
567 $new_obj->setFlashcardsMode($this->getFlashcardsMode());
568 $new_obj->update();
569
570 // set/copy stylesheet
571 $this->content_style_domain->styleForRefId($this->getRefId())->cloneTo($new_obj->getId());
572
573 // copy taxonomy
574 if (($tax_id = $this->getTaxonomyId()) > 0) {
575 // clone it
576 $tax = new ilObjTaxonomy($tax_id);
577 $new_tax = $tax->cloneObject(0, 0, true);
578 $map = $tax->getNodeMapping();
579
580 // assign new taxonomy to new glossary
581 ilObjTaxonomy::saveUsage($new_tax->getId(), $new_obj->getId());
582
583 $tax_ass = new ilTaxNodeAssignment("glo", $this->getId(), "term", $tax_id);
584 $new_tax_ass = new ilTaxNodeAssignment("glo", $new_obj->getId(), "term", $new_tax->getId());
585 }
586
587 // copy terms
588 $term_mappings = array();
589 foreach (ilGlossaryTerm::getTermList([$this->getRefId()]) as $term) {
590 $new_term_id = ilGlossaryTerm::_copyTerm($term["id"], $new_obj->getId());
591 $term_mappings[$term["id"]] = $new_term_id;
592
593 // copy tax node assignments
594 if ($tax_id > 0) {
595 $assignmts = $tax_ass->getAssignmentsOfItem($term["id"]);
596 foreach ($assignmts as $a) {
597 if ($map[$a["node_id"]] > 0) {
598 $new_tax_ass->addAssignment($map[$a["node_id"]], $new_term_id);
599 }
600 }
601 }
602 }
603
604 // add mapping of term_ids to copy wizard options
605 if (!empty($term_mappings)) {
606 $cp_options->appendMapping($this->getRefId() . '_glo_terms', $term_mappings);
607 }
608
609 // copy collection glossaries
610 foreach ($this->getGlossariesForCollection() as $glo_id) {
611 $new_obj->addGlossaryForCollection($glo_id);
612 }
613
614 return $new_obj;
615 }
616
620 public function removeOfflineGlossaries(
621 array $a_glo_ids,
622 bool $ids_are_ref_ids = false
623 ): array {
624 $glo_ids = $a_glo_ids;
625 if ($ids_are_ref_ids) {
626 $glo_ids = array_map(static function ($id): int {
628 }, $a_glo_ids);
629 }
630
631 $set = $this->db->query(
632 "SELECT id FROM glossary " .
633 " WHERE " . $this->db->in("id", $glo_ids, false, "integer") .
634 " AND is_online = " . $this->db->quote("y", "text")
635 );
636 $online_glo_ids = array();
637 while ($rec = $this->db->fetchAssoc($set)) {
638 $online_glo_ids[] = $rec["id"];
639 }
640
641 if (!$ids_are_ref_ids) {
642 return $online_glo_ids;
643 }
644
645 $online_ref_ids = array_filter($a_glo_ids, static function ($ref_id) use ($online_glo_ids): bool {
646 return in_array(ilObject::_lookupObjectId($ref_id), $online_glo_ids);
647 });
648
649
650 return $online_ref_ids;
651 }
652
653 public static function getAdvMDSubItemTitle(int $a_obj_id, string $a_sub_type, int $a_sub_id): string
654 {
655 global $DIC;
656
657 $lng = $DIC->language();
658
659 if ($a_sub_type == "term") {
660 $lng->loadLanguageModule("glo");
661
662 return $lng->txt("glo_term") . ' "' . ilGlossaryTerm::_lookGlossaryTerm($a_sub_id) . '"';
663 }
664 return "";
665 }
666
670 public function autoLinkGlossaryTerms(
671 int $a_glo_ref_id
672 ): void {
673 // get terms of target glossary
674 $terms = ilGlossaryTerm::getTermList([$a_glo_ref_id]);
675
676 // for each get page: get content
677 $source_terms = ilGlossaryTerm::getTermList([$this->getRefId()]);
678 $found_pages = array();
679 foreach ($source_terms as $source_term) {
680 $pg = new ilGlossaryDefPage($source_term["id"]);
681 $c = $pg->getXMLContent();
682 foreach ($terms as $t) {
683 if (is_int(stripos($c, $t["term"]))) {
684 $found_pages[$source_term["id"]]["terms"][] = $t;
685 if (!isset($found_pages[$source_term["id"]]["page"])) {
686 $found_pages[$source_term["id"]]["page"] = $pg;
687 }
688 }
689 }
690 reset($terms);
691 }
692
693 // ilPCParagraph autoLinkGlossariesPage with page and terms
694 foreach ($found_pages as $id => $fp) {
695 ilPCParagraph::autoLinkGlossariesPage($fp["page"], $fp["terms"]);
696 }
697 }
698
702 public function supportsLongTextQuery(): bool
703 {
704 return true;
705 }
706}
$id
plugin.php for ilComponentBuildPluginInfoObjectiveTest::testAddPlugins
Definition: plugin.php:23
static _getInstance(int $a_copy_id)
static _createExportDirectory(int $a_obj_id, string $a_export_type="xml", string $a_obj_type="")
static _getExportDirectory(int $a_obj_id, string $a_type="xml", string $a_obj_type="", string $a_entity="")
@depricated Get export directory for an repository object
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
static _lookGlossaryTerm(int $term_id)
get glossary term
static getTermList(array $a_glo_ref_id, string $searchterm="", string $a_first_letter="", string $a_def="", int $a_tax_node=0, bool $a_add_amet_fields=false, ?array $a_amet_filter=null, bool $a_include_references=false)
Get all terms for given set of glossary ids.
static getFirstLetters(array $a_glo_id, int $a_tax_node=0)
static _copyTerm(int $a_term_id, int $a_glossary_id)
Copy a term to a glossary.
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
setSnippetLength(int $a_val)
Set definition snippet length (in overview)
static getAdvMDSubItemTitle(int $a_obj_id, string $a_sub_type, int $a_sub_id)
static lookupAutoGlossaries(int $a_id)
ILIAS Style Content DomainService $content_style_domain
static lookupSnippetLength(int $a_id)
removeAutoGlossary(int $a_glo_id)
ilGlossaryDefPage $page_object
getAllGlossaryIds(bool $a_include_offline_childs=false, bool $ids_are_ref_ids=false)
Get all glossary ids.
supportsLongTextQuery()
Is long text search supported.
setActiveGlossaryMenu(bool $a_act_glo_menu)
addGlossaryForCollection(int $glo_id)
setVirtualMode(string $a_mode)
getFirstLetters(int $a_tax_node=0)
setShowTaxonomy(bool $a_val)
ilGlobalTemplateInterface $tpl
ILIAS Glossary Term TermManager $term_manager
setPresentationMode(string $a_val)
removeOfflineGlossaries(array $a_glo_ids, bool $ids_are_ref_ids=false)
Remove offline glossaries from obj id array.
__construct(int $a_id=0, bool $a_call_by_reference=true)
cloneObject(int $target_id, int $copy_id=0, bool $omit_tree=false)
static getDeletionDependencies(int $obj_id)
Get deletion dependencies.
createExportDirectory(string $a_type="xml")
getTermList(string $searchterm="", string $a_letter="", string $a_def="", int $a_tax_node=0, bool $a_include_offline_childs=false, bool $a_add_amet_fields=false, ?array $a_amet_filter=null, bool $a_omit_virtual=false, bool $a_include_references=false)
setAutoGlossaries(array $a_val)
addAutoGlossary(int $glo_id)
static _lookupOnline(int $a_id)
removeGlossaryFromCollection(int $glo_id)
create(bool $a_upload=false)
setFlashcardsMode(string $a_flash)
autoLinkGlossaryTerms(int $a_glo_ref_id)
Auto link glossary terms.
setActiveFlashcards(bool $a_flash)
setOnline(bool $a_online)
static lookup(int $a_id, string $a_property)
Lookup glossary property.
getExportDirectory(string $a_type="xml")
static getScormModulesForGlossary(int $a_glo_id)
Get SCORM modules that assign a certain glossary.
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
static getUsageOfObject(int $a_obj_id, bool $a_include_titles=false)
static saveUsage(int $a_tax_id, int $a_obj_id)
User class.
Class ilObject Basic functions for all objects.
static _lookupObjectId(int $ref_id)
static _lookupType(int $id, bool $reference=false)
static _getAllReferences(int $id)
get all reference ids for object ID
ilDBInterface $db
static autoLinkGlossariesPage(ilPageObject $a_page, array $a_terms)
Auto link glossary of whole page.
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
static tf2yn(bool $a_tf)
static yn2tf(string $a_yn)
$c
Definition: deliver.php:25
Interface for repository objects to use adv md with subitems.
quote($value, string $type)
query(string $query)
Run a (read-only) Query on the database.
fetchAssoc(ilDBStatement $statement)
$ref_id
Definition: ltiauth.php:66
__construct(Container $dic, ilPlugin $plugin)
@inheritDoc
$a
thx to https://mlocati.github.io/php-cs-fixer-configurator for the examples
global $lng
Definition: privfeed.php:31
if(!file_exists('../ilias.ini.php'))
global $DIC
Definition: shib_login.php:26
$q
Definition: shib_logout.php:23
$lm_set