ILIAS  release_5-3 Revision v5.3.23-19-g915713cf615
class.ilObjGlossary.php
Go to the documentation of this file.
1<?php
2
3/* Copyright (c) 1998-2010 ILIAS open source, Extended GPL, see docs/LICENSE */
4
5require_once("./Services/Object/classes/class.ilObject.php");
6require_once("./Modules/Glossary/classes/class.ilGlossaryTerm.php");
7include_once("./Services/AdvancedMetaData/interfaces/interface.ilAdvancedMetaDataSubItems.php");
8
21{
25 protected $tpl;
26
27
31 protected $db;
32
36 public $auto_glossaries = array();
37
41 protected $user;
42
47 public function __construct($a_id = 0, $a_call_by_reference = true)
48 {
49 global $DIC;
50 $this->error = $DIC["ilErr"];
51 $this->tpl = $DIC["tpl"];
52
53 $this->db = $DIC->database();
54 $this->user = $DIC->user();
55 $this->type = "glo";
56 parent::__construct($a_id, $a_call_by_reference);
57 }
58
62 public function create($a_upload = false)
63 {
64 parent::create();
65
66 // meta data will be created by
67 // import parser
68 if (!$a_upload) {
69 $this->createMetaData();
70 }
71
72 $this->db->manipulate("INSERT INTO glossary (id, is_online, glossary.virtual, pres_mode, snippet_length) VALUES (" .
73 $this->db->quote($this->getId(), "integer") . "," .
74 $this->db->quote("n", "text") . "," .
75 $this->db->quote($this->getVirtualMode(), "text") . "," .
76 $this->db->quote("table", "text") . "," .
77 $this->db->quote(200, "integer") .
78 ")");
79 $this->setPresentationMode("table");
80 $this->setSnippetLength(200);
81
82 $this->updateAutoGlossaries();
83
84 if (((int) $this->getStyleSheetId()) > 0) {
85 include_once("./Services/Style/Content/classes/class.ilObjStyleSheet.php");
87 }
88 }
89
93 public function read()
94 {
95 parent::read();
96 # echo "Glossary<br>\n";
97
98 $q = "SELECT * FROM glossary WHERE id = " .
99 $this->db->quote($this->getId(), "integer");
100 $gl_set = $this->db->query($q);
101 $gl_rec = $this->db->fetchAssoc($gl_set);
102 $this->setOnline(ilUtil::yn2tf($gl_rec["is_online"]));
103 $this->setVirtualMode($gl_rec["virtual"]);
104 $this->setPublicExportFile("xml", $gl_rec["public_xml_file"]);
105 $this->setPublicExportFile("html", $gl_rec["public_html_file"]);
106 $this->setActiveGlossaryMenu(ilUtil::yn2tf($gl_rec["glo_menu_active"]));
107 $this->setActiveDownloads(ilUtil::yn2tf($gl_rec["downloads_active"]));
108 $this->setPresentationMode($gl_rec["pres_mode"]);
109 $this->setSnippetLength($gl_rec["snippet_length"]);
110 $this->setShowTaxonomy($gl_rec["show_tax"]);
111
112 include_once("./Services/Style/Content/classes/class.ilObjStyleSheet.php");
114
115 // read auto glossaries
116 $set = $this->db->query(
117 "SELECT * FROM glo_glossaries " .
118 " WHERE id = " . $this->db->quote($this->getId(), "integer")
119 );
120 $glos = array();
121 while ($rec = $this->db->fetchAssoc($set)) {
122 $glos[] = $rec["glo_id"];
123 }
124 $this->setAutoGlossaries($glos);
125 }
126
132 public function getDescription()
133 {
134 return parent::getDescription();
135 }
136
140 public function setDescription($a_description)
141 {
142 parent::setDescription($a_description);
143 }
144
145
149 public function setVirtualMode($a_mode)
150 {
151 switch ($a_mode) {
152 case "level":
153 case "subtree":
154 // case "fixed":
155 $this->virtual_mode = $a_mode;
156 $this->virtual = true;
157 break;
158
159 default:
160 $this->virtual_mode = "none";
161 $this->virtual = false;
162 break;
163 }
164 }
165
169 public function getVirtualMode()
170 {
171 return $this->virtual_mode;
172 }
173
177 public function isVirtual()
178 {
179 return $this->virtual;
180 }
181
187 public function getTitle()
188 {
189 return parent::getTitle();
190 }
191
195 public function setTitle($a_title)
196 {
197 parent::setTitle($a_title);
198 // $this->meta_data->setTitle($a_title);
199 }
200
206 public function setPresentationMode($a_val)
207 {
208 $this->pres_mode = $a_val;
209 }
210
216 public function getPresentationMode()
217 {
218 return $this->pres_mode;
219 }
220
226 public function setSnippetLength($a_val)
227 {
228 $this->snippet_length = $a_val;
229 }
230
236 public function getSnippetLength()
237 {
238 return ($this->snippet_length > 0)
239 ? $this->snippet_length
240 : null;
241 }
242
243 public function setOnline($a_online)
244 {
245 $this->online = $a_online;
246 }
247
248 public function getOnline()
249 {
250 return $this->online;
251 }
252
256 public static function _lookupOnline($a_id)
257 {
258 global $DIC;
259
260 $db = $DIC->database();
261
262 $q = "SELECT is_online FROM glossary WHERE id = " .
263 $db->quote($a_id, "integer");
264 $lm_set = $db->query($q);
265 $lm_rec = $db->fetchAssoc($lm_set);
266
267 return ilUtil::yn2tf($lm_rec["is_online"]);
268 }
269
276 protected static function lookup($a_id, $a_property)
277 {
278 global $DIC;
279
280 $db = $DIC->database();
281
282 $set = $db->query("SELECT $a_property FROM glossary WHERE id = " .
283 $db->quote($a_id, "integer"));
284 $rec = $db->fetchAssoc($set);
285
286 return $rec[$a_property];
287 }
288
295 public static function lookupSnippetLength($a_id)
296 {
297 return ilObjGlossary::lookup($a_id, "snippet_length");
298 }
299
300
301 public function setActiveGlossaryMenu($a_act_glo_menu)
302 {
303 $this->glo_menu_active = $a_act_glo_menu;
304 }
305
306 public function isActiveGlossaryMenu()
307 {
308 return $this->glo_menu_active;
309 }
310
311 public function setActiveDownloads($a_down)
312 {
313 $this->downloads_active = $a_down;
314 }
315
316 public function isActiveDownloads()
317 {
318 return $this->downloads_active;
319 }
320
324 public function getStyleSheetId()
325 {
326 return $this->style_id;
327 }
328
332 public function setStyleSheetId($a_style_id)
333 {
334 $this->style_id = $a_style_id;
335 }
336
337
343 public function setShowTaxonomy($a_val)
344 {
345 $this->show_tax = $a_val;
346 }
347
353 public function getShowTaxonomy()
354 {
355 return $this->show_tax;
356 }
357
363 public function setAutoGlossaries($a_val)
364 {
365 $this->auto_glossaries = array();
366 if (is_array($a_val)) {
367 foreach ($a_val as $v) {
368 $v = (int) $v;
369 if ($v > 0 && ilObject::_lookupType($v) == "glo" &&
370 !in_array($v, $this->auto_glossaries)) {
371 $this->auto_glossaries[] = $v;
372 }
373 }
374 }
375 }
376
382 public function getAutoGlossaries()
383 {
385 }
386
393 public function removeAutoGlossary($a_glo_id)
394 {
395 $glo_ids = array();
396 foreach ($this->getAutoGlossaries() as $g) {
397 if ($g != $a_glo_id) {
398 $glo_ids[] = $g;
399 }
400 }
401 $this->setAutoGlossaries($glo_ids);
402 }
403
407 public function update()
408 {
409 $this->updateMetaData();
410
411 $this->db->manipulate("UPDATE glossary SET " .
412 " is_online = " . $this->db->quote(ilUtil::tf2yn($this->getOnline()), "text") . "," .
413 " glossary.virtual = " . $this->db->quote($this->getVirtualMode(), "text") . "," .
414 " public_xml_file = " . $this->db->quote($this->getPublicExportFile("xml"), "text") . "," .
415 " public_html_file = " . $this->db->quote($this->getPublicExportFile("html"), "text") . "," .
416 " glo_menu_active = " . $this->db->quote(ilUtil::tf2yn($this->isActiveGlossaryMenu()), "text") . "," .
417 " downloads_active = " . $this->db->quote(ilUtil::tf2yn($this->isActiveDownloads()), "text") . ", " .
418 " pres_mode = " . $this->db->quote($this->getPresentationMode(), "text") . ", " .
419 " show_tax = " . $this->db->quote((int) $this->getShowTaxonomy(), "integer") . ", " .
420 " snippet_length = " . $this->db->quote((int) $this->getSnippetLength(), "integer") . " " .
421 " WHERE id = " . $this->db->quote($this->getId(), "integer"));
422
423 include_once("./Services/Style/Content/classes/class.ilObjStyleSheet.php");
425
426 $this->updateAutoGlossaries();
428 }
429
430
437 public function updateAutoGlossaries()
438 {
439 // update auto glossaries
440 $this->db->manipulate(
441 "DELETE FROM glo_glossaries WHERE " .
442 " id = " . $this->db->quote($this->getId(), "integer")
443 );
444 foreach ($this->getAutoGlossaries() as $glo_id) {
445 $this->db->manipulate("INSERT INTO glo_glossaries " .
446 "(id, glo_id) VALUES (" .
447 $this->db->quote($this->getId(), "integer") . "," .
448 $this->db->quote($glo_id, "integer") .
449 ")");
450 }
451 }
452
459 public static function lookupAutoGlossaries($a_id)
460 {
461 global $DIC;
462
463 $db = $DIC->database();
464
465 // read auto glossaries
466 $set = $db->query(
467 "SELECT * FROM glo_glossaries " .
468 " WHERE id = " . $db->quote($a_id, "integer")
469 );
470 $glos = array();
471 while ($rec = $db->fetchAssoc($set)) {
472 $glos[] = $rec["glo_id"];
473 }
474 return $glos;
475 }
476
480 public function getTermList(
481 $searchterm = "",
482 $a_letter = "",
483 $a_def = "",
484 $a_tax_node = 0,
485 $a_include_offline_childs = false,
486 $a_add_amet_fields = false,
487 array $a_amet_filter = null,
488 $a_omit_virtual = false,
489 $a_include_references = false
490 ) {
491 if ($a_omit_virtual) {
492 $glo_ref_ids[] = $this->getRefId();
493 } else {
494 $glo_ref_ids = $this->getAllGlossaryIds($a_include_offline_childs, true);
495 }
497 $glo_ref_ids,
498 $searchterm,
499 $a_letter,
500 $a_def,
501 $a_tax_node,
502 $a_add_amet_fields,
503 $a_amet_filter,
504 $a_include_references
505 );
506 return $list;
507 }
508
512 public function getFirstLetters($a_tax_node = 0)
513 {
514 $glo_ids = $this->getAllGlossaryIds();
515 $first_letters = ilGlossaryTerm::getFirstLetters($glo_ids, $a_tax_node);
516 return $first_letters;
517 }
518
525 public function getAllGlossaryIds($a_include_offline_childs = false, $ids_are_ref_ids = false)
526 {
527 global $DIC;
528
529 $tree = $DIC->repositoryTree();
530
531 if ($this->isVirtual()) {
532 $glo_ids = array();
533
534 $virtual_mode = $this->getRefId() ? $this->getVirtualMode() : '';
535 switch ($virtual_mode) {
536 case "level":
537 $glo_arr = $tree->getChildsByType($tree->getParentId($this->getRefId()), "glo");
538 foreach ($glo_arr as $glo) {
539 {
540 if ($ids_are_ref_ids) {
541 $glo_ids[] = $glo['child'];
542 } else {
543 $glo_ids[] = $glo['obj_id'];
544 }
545 }
546 }
547 break;
548
549 case "subtree":
550 $subtree_nodes = $tree->getSubTree($tree->getNodeData($tree->getParentId($this->getRefId())));
551
552 foreach ($subtree_nodes as $node) {
553 if ($node['type'] == 'glo') {
554 if ($ids_are_ref_ids) {
555 $glo_ids[] = $node['child'];
556 } else {
557 $glo_ids[] = $node['obj_id'];
558 }
559 }
560 }
561 break;
562 }
563 if (!$a_include_offline_childs) {
564 $glo_ids = ilObjGlossary::removeOfflineGlossaries($glo_ids, $ids_are_ref_ids);
565 }
566 // always show entries of current glossary (if no permission is given, user will not come to the presentation screen)
567 // see bug #14477
568 if ($ids_are_ref_ids) {
569 if (!in_array($this->getRefId(), $glo_ids)) {
570 $glo_ids[] = $this->getRefId();
571 }
572 } else {
573 if (!in_array($this->getId(), $glo_ids)) {
574 $glo_ids[] = $this->getId();
575 }
576 }
577 } else {
578 if ($ids_are_ref_ids) {
579 $glo_ids = $this->getRefId();
580 } else {
581 $glo_ids = $this->getId();
582 }
583 }
584
585 return $glo_ids;
586 }
587
593 public function createImportDirectory()
594 {
596
597 $glo_data_dir = ilUtil::getDataDir() . "/glo_data";
598 ilUtil::makeDir($glo_data_dir);
599 if (!is_writable($glo_data_dir)) {
600 $ilErr->raiseError("Glossary Data Directory (" . $glo_data_dir
601 . ") not writeable.", $ilErr->error_obj->FATAL);
602 }
603
604 // create glossary directory (data_dir/glo_data/glo_<id>)
605 $glo_dir = $glo_data_dir . "/glo_" . $this->getId();
606 ilUtil::makeDir($glo_dir);
607 if (!@is_dir($glo_dir)) {
608 $ilErr->raiseError("Creation of Glossary Directory failed.", $ilErr->FATAL);
609 }
610 // create Import subdirectory (data_dir/glo_data/glo_<id>/import)
611 $import_dir = $glo_dir . "/import";
612 ilUtil::makeDir($import_dir);
613 if (!@is_dir($import_dir)) {
614 $ilErr->raiseError("Creation of Export Directory failed.", $ilErr->FATAL);
615 }
616 }
617
621 public function getImportDirectory()
622 {
623 $export_dir = ilUtil::getDataDir() . "/glo_data" . "/glo_" . $this->getId() . "/import";
624
625 return $export_dir;
626 }
627
631 public function createExportDirectory($a_type = "xml")
632 {
633 include_once("./Services/Export/classes/class.ilExport.php");
634 return ilExport::_createExportDirectory($this->getId(), $a_type, $this->getType());
635 }
636
640 public function getExportDirectory($a_type = "xml")
641 {
642 include_once("./Services/Export/classes/class.ilExport.php");
643 return ilExport::_getExportDirectory($this->getId(), $a_type, $this->getType());
644 }
645
649 public function getExportFiles()
650 {
651 include_once("./Services/Export/classes/class.ilExport.php");
652 return ilExport::_getExportFiles($this->getId(), array("xml", "html"), $this->getType());
653 }
654
661 public function setPublicExportFile($a_type, $a_file)
662 {
663 $this->public_export_file[$a_type] = $a_file;
664 }
665
674 {
675 return $this->public_export_file[$a_type];
676 }
677
681 public function exportHTML($a_target_dir, $log)
682 {
684
685 // initialize temporary target directory
686 ilUtil::delDir($a_target_dir);
687 ilUtil::makeDir($a_target_dir);
688
689 // init mathjax rendering for export
690 include_once './Services/MathJax/classes/class.ilMathJax.php';
692
693 include_once("./Services/COPage/classes/class.ilCOPageHTMLExport.php");
694 $this->co_page_html_export = new ilCOPageHTMLExport($a_target_dir);
695 $this->co_page_html_export->createDirectories();
696
697 // export system style sheet
698 $location_stylesheet = ilUtil::getStyleSheetLocation("filesystem");
699 $style_name = $this->user->prefs["style"] . ".css";
700 copy($location_stylesheet, $a_target_dir . "/" . $style_name);
701 $location_stylesheet = ilUtil::getStyleSheetLocation();
702
703 if ($this->getStyleSheetId() < 1) {
704 $cont_stylesheet = "Services/COPage/css/content.css";
705 copy($cont_stylesheet, $a_target_dir . "/content.css");
706 } else {
707 $content_style_img_dir = $a_target_dir . "/images";
708 ilUtil::makeDir($content_style_img_dir);
709 $style = new ilObjStyleSheet($this->getStyleSheetId());
710 $style->writeCSSFile($a_target_dir . "/content.css", "images");
711 $style->copyImagesToDir($content_style_img_dir);
712 }
713
714 // export syntax highlighting style
715 $syn_stylesheet = ilObjStyleSheet::getSyntaxStylePath();
716 copy($syn_stylesheet, $a_target_dir . "/syntaxhighlight.css");
717
718 // get glossary presentation gui class
719 include_once("./Modules/Glossary/classes/class.ilGlossaryPresentationGUI.php");
720 $_GET["cmd"] = "nop";
721 $glo_gui = new ilGlossaryPresentationGUI();
722 $glo_gui->setOfflineMode(true);
723 $glo_gui->setOfflineDirectory($a_target_dir);
724
725 // could be implemented in the future if other export
726 // formats are supported (e.g. scorm)
727 //$glo_gui->setExportFormat($a_export_format);
728
729 // export terms
730 $this->exportHTMLGlossaryTerms($glo_gui, $a_target_dir);
731
732 // export all media objects
733 foreach ($this->offline_mobs as $mob) {
734 $this->exportHTMLMOB($a_target_dir, $glo_gui, $mob, "_blank");
735 }
736 $_GET["obj_type"] = "MediaObject";
737 $_GET["obj_id"] = $a_mob_id;
738 $_GET["cmd"] = "";
739
740 // export all file objects
741 foreach ($this->offline_files as $file) {
742 $this->exportHTMLFile($a_target_dir, $file);
743 }
744
745 // export images
746 $image_dir = $a_target_dir . "/images";
747 ilUtil::makeDir($image_dir);
748 ilUtil::makeDir($image_dir . "/browser");
749 copy(
750 ilUtil::getImagePath("enlarge.svg", false, "filesystem"),
751 $image_dir . "/enlarge.svg"
752 );
753 copy(
754 ilUtil::getImagePath("browser/blank.png", false, "filesystem"),
755 $image_dir . "/browser/plus.png"
756 );
757 copy(
758 ilUtil::getImagePath("browser/blank.png", false, "filesystem"),
759 $image_dir . "/browser/minus.png"
760 );
761 copy(
762 ilUtil::getImagePath("browser/blank.png", false, "filesystem"),
763 $image_dir . "/browser/blank.png"
764 );
765 copy(
766 ilUtil::getImagePath("icon_st.svg", false, "filesystem"),
767 $image_dir . "/icon_st.svg"
768 );
769 copy(
770 ilUtil::getImagePath("icon_pg.svg", false, "filesystem"),
771 $image_dir . "/icon_pg.svg"
772 );
773 copy(
774 ilUtil::getImagePath("nav_arr_L.png", false, "filesystem"),
775 $image_dir . "/nav_arr_L.png"
776 );
777 copy(
778 ilUtil::getImagePath("nav_arr_R.png", false, "filesystem"),
779 $image_dir . "/nav_arr_R.png"
780 );
781
782 // template workaround: reset of template
783 $tpl = new ilTemplate("tpl.main.html", true, true);
784 $tpl->setVariable("LOCATION_STYLESHEET", $location_stylesheet);
785 $tpl->addBlockFile("CONTENT", "content", "tpl.adm_content.html");
786
787 // zip everything
788 if (true) {
789 // zip it all
790 $date = time();
791 $zip_file = $this->getExportDirectory("html") . "/" . $date . "__" . IL_INST_ID . "__" .
792 $this->getType() . "_" . $this->getId() . ".zip";
793 //echo "zip-".$a_target_dir."-to-".$zip_file;
794 ilUtil::zip($a_target_dir, $zip_file);
795 ilUtil::delDir($a_target_dir);
796 }
797 }
798
799
803 public function exportHTMLGlossaryTerms(&$a_glo_gui, $a_target_dir)
804 {
805 include_once("./Services/COPage/classes/class.ilCOPageHTMLExport.php");
806 $copage_export = new ilCOPageHTMLExport($a_target_dir);
807 $copage_export->exportSupportScripts();
808
809 // index.html file
810 $a_glo_gui->tpl = new ilTemplate("tpl.main.html", true, true);
811 $style_name = $this->user->prefs["style"] . ".css";
812 ;
813 $a_glo_gui->tpl->setVariable("LOCATION_STYLESHEET", "./" . $style_name);
814 $a_glo_gui->tpl->addBlockFile("CONTENT", "content", "tpl.adm_content.html");
815 $a_glo_gui->tpl->setTitle($this->getTitle());
816
817 $content = $a_glo_gui->listTerms();
818 $file = $a_target_dir . "/index.html";
819
820 // open file
821 if (!($fp = @fopen($file, "w+"))) {
822 die("<b>Error</b>: Could not open \"" . $file . "\" for writing" .
823 " in <b>" . __FILE__ . "</b> on line <b>" . __LINE__ . "</b><br />");
824 }
825 chmod($file, 0770);
826 fwrite($fp, $content);
827 fclose($fp);
828
829 $terms = $this->getTermList();
830
831 $this->offline_mobs = array();
832 $this->offline_files = array();
833
834 foreach ($terms as $term) {
835 $a_glo_gui->tpl = new ilTemplate("tpl.main.html", true, true);
836 $a_glo_gui->tpl = $copage_export->getPreparedMainTemplate();
837 //$tpl->addBlockFile("CONTENT", "content", "tpl.adm_content.html");
838
839 // set style
840 $style_name = $this->user->prefs["style"] . ".css";
841 ;
842 $a_glo_gui->tpl->setVariable("LOCATION_STYLESHEET", "./" . $style_name);
843
844 $_GET["term_id"] = $term["id"];
845 $_GET["frame"] = "_blank";
846 $content = $a_glo_gui->listDefinitions($_GET["ref_id"], $term["id"], false);
847 $file = $a_target_dir . "/term_" . $term["id"] . ".html";
848
849 // open file
850 if (!($fp = @fopen($file, "w+"))) {
851 die("<b>Error</b>: Could not open \"" . $file . "\" for writing" .
852 " in <b>" . __FILE__ . "</b> on line <b>" . __LINE__ . "</b><br />");
853 }
854 chmod($file, 0770);
855 fwrite($fp, $content);
856 fclose($fp);
857
858 // store linked/embedded media objects of glosssary term
859 include_once("./Modules/Glossary/classes/class.ilGlossaryDefinition.php");
860 $defs = ilGlossaryDefinition::getDefinitionList($term["id"]);
861 foreach ($defs as $def) {
862 $def_mobs = ilObjMediaObject::_getMobsOfObject("gdf:pg", $def["id"]);
863 foreach ($def_mobs as $def_mob) {
864 $this->offline_mobs[$def_mob] = $def_mob;
865 }
866
867 // get all files of page
868 include_once("./Modules/File/classes/class.ilObjFile.php");
869 $def_files = ilObjFile::_getFilesOfObject("gdf:pg", $def["id"]);
870 $this->offline_files = array_merge($this->offline_files, $def_files);
871 }
872 }
873 }
874
878 public function exportHTMLMOB($a_target_dir, &$a_glo_gui, $a_mob_id)
879 {
881
882 $mob_dir = $a_target_dir . "/mobs";
883
884 $source_dir = ilUtil::getWebspaceDir() . "/mobs/mm_" . $a_mob_id;
885 if (@is_dir($source_dir)) {
886 ilUtil::makeDir($mob_dir . "/mm_" . $a_mob_id);
887 ilUtil::rCopy($source_dir, $mob_dir . "/mm_" . $a_mob_id);
888 }
889
890 $tpl = new ilTemplate("tpl.main.html", true, true);
891 $tpl->addBlockFile("CONTENT", "content", "tpl.adm_content.html");
892 $_GET["obj_type"] = "MediaObject";
893 $_GET["mob_id"] = $a_mob_id;
894 $_GET["cmd"] = "";
895 $content = $a_glo_gui->media();
896 $file = $a_target_dir . "/media_" . $a_mob_id . ".html";
897
898 // open file
899 if (!($fp = @fopen($file, "w+"))) {
900 die("<b>Error</b>: Could not open \"" . $file . "\" for writing" .
901 " in <b>" . __FILE__ . "</b> on line <b>" . __LINE__ . "</b><br />");
902 }
903 chmod($file, 0770);
904 fwrite($fp, $content);
905 fclose($fp);
906
907 // fullscreen
908 include_once("./Services/MediaObjects/classes/class.ilObjMediaObject.php");
909 $mob_obj = new ilObjMediaObject($a_mob_id);
910 if ($mob_obj->hasFullscreenItem()) {
911 $tpl = new ilTemplate("tpl.main.html", true, true);
912 $tpl->addBlockFile("CONTENT", "content", "tpl.adm_content.html");
913 $_GET["mob_id"] = $a_mob_id;
914 $_GET["cmd"] = "fullscreen";
915 $content = $a_glo_gui->fullscreen();
916 $file = $a_target_dir . "/fullscreen_" . $a_mob_id . ".html";
917
918 // open file
919 if (!($fp = @fopen($file, "w+"))) {
920 die("<b>Error</b>: Could not open \"" . $file . "\" for writing" .
921 " in <b>" . __FILE__ . "</b> on line <b>" . __LINE__ . "</b><br />");
922 }
923 chmod($file, 0770);
924 fwrite($fp, $content);
925 fclose($fp);
926 }
927 }
928
932 public function exportHTMLFile($a_target_dir, $a_file_id)
933 {
934 $file_dir = $a_target_dir . "/files/file_" . $a_file_id;
935 ilUtil::makeDir($file_dir);
936 include_once("./Modules/File/classes/class.ilObjFile.php");
937 $file_obj = new ilObjFile($a_file_id, false);
938 $source_file = $file_obj->getDirectory($file_obj->getVersion()) . "/" . $file_obj->getFileName();
939 if (!is_file($source_file)) {
940 $source_file = $file_obj->getDirectory() . "/" . $file_obj->getFileName();
941 }
942 copy($source_file, $file_dir . "/" . $file_obj->getFileName());
943 }
944
945
952 public function exportXML(&$a_xml_writer, $a_inst, $a_target_dir, &$expLog)
953 {
954 // export glossary
955 $attrs = array();
956 $attrs["Type"] = "Glossary";
957 $a_xml_writer->xmlStartTag("ContentObject", $attrs);
958
959 // MetaData
960 $this->exportXMLMetaData($a_xml_writer);
961
962 // collect media objects
963 $terms = $this->getTermList();
964 $this->mob_ids = array();
965 $this->file_ids = array();
966 foreach ($terms as $term) {
967 include_once "./Modules/Glossary/classes/class.ilGlossaryDefinition.php";
968
970
971 foreach ($defs as $def) {
972 $this->page_object = new ilGlossaryDefPage($def["id"]);
973 $this->page_object->buildDom();
974 $this->page_object->insertInstIntoIDs(IL_INST_ID);
975 $mob_ids = $this->page_object->collectMediaObjects(false);
976 include_once("./Services/COPage/classes/class.ilPCFileList.php");
977 $file_ids = ilPCFileList::collectFileItems($this->page_object, $this->page_object->getDomDoc());
978 foreach ($mob_ids as $mob_id) {
979 $this->mob_ids[$mob_id] = $mob_id;
980 }
981 foreach ($file_ids as $file_id) {
982 $this->file_ids[$file_id] = $file_id;
983 }
984 }
985 }
986
987 // export media objects
988 $expLog->write(date("[y-m-d H:i:s] ") . "Start Export Media Objects");
989 $this->exportXMLMediaObjects($a_xml_writer, $a_inst, $a_target_dir, $expLog);
990 $expLog->write(date("[y-m-d H:i:s] ") . "Finished Export Media Objects");
991
992 // FileItems
993 $expLog->write(date("[y-m-d H:i:s] ") . "Start Export File Items");
994 $this->exportFileItems($a_target_dir, $expLog);
995 $expLog->write(date("[y-m-d H:i:s] ") . "Finished Export File Items");
996
997 // Glossary
998 $expLog->write(date("[y-m-d H:i:s] ") . "Start Export Glossary Items");
999 $this->exportXMLGlossaryItems($a_xml_writer, $a_inst, $expLog);
1000 $expLog->write(date("[y-m-d H:i:s] ") . "Finished Export Glossary Items");
1001
1002 $a_xml_writer->xmlEndTag("ContentObject");
1003 }
1004
1011 public function exportXMLGlossaryItems(&$a_xml_writer, $a_inst, &$expLog)
1012 {
1013 $attrs = array();
1014 $a_xml_writer->xmlStartTag("Glossary", $attrs);
1015
1016 // MetaData
1017 $this->exportXMLMetaData($a_xml_writer);
1018
1019 $terms = $this->getTermList();
1020
1021 // export glossary terms
1022 reset($terms);
1023 foreach ($terms as $term) {
1024 $expLog->write(date("[y-m-d H:i:s] ") . "Page Object " . $page["obj_id"]);
1025
1026 // export xml to writer object
1027 $glo_term = new ilGlossaryTerm($term["id"]);
1028 $glo_term->exportXML($a_xml_writer, $a_inst);
1029
1030 unset($glo_term);
1031 }
1032
1033 $a_xml_writer->xmlEndTag("Glossary");
1034 }
1035
1042 public function exportXMLMetaData(&$a_xml_writer)
1043 {
1044 include_once("Services/MetaData/classes/class.ilMD2XML.php");
1045 $md2xml = new ilMD2XML($this->getId(), 0, $this->getType());
1046 $md2xml->setExportMode(true);
1047 $md2xml->startExport();
1048 $a_xml_writer->appendXML($md2xml->getXML());
1049 }
1050
1057 public function exportXMLMediaObjects(&$a_xml_writer, $a_inst, $a_target_dir, &$expLog)
1058 {
1059 include_once("./Services/MediaObjects/classes/class.ilObjMediaObject.php");
1060
1061 foreach ($this->mob_ids as $mob_id) {
1062 $expLog->write(date("[y-m-d H:i:s] ") . "Media Object " . $mob_id);
1063 $media_obj = new ilObjMediaObject($mob_id);
1064 $media_obj->exportXML($a_xml_writer, $a_inst);
1065 $media_obj->exportFiles($a_target_dir);
1066 unset($media_obj);
1067 }
1068 }
1069
1074 public function exportFileItems($a_target_dir, &$expLog)
1075 {
1076 include_once("./Modules/File/classes/class.ilObjFile.php");
1077
1078 foreach ($this->file_ids as $file_id) {
1079 $expLog->write(date("[y-m-d H:i:s] ") . "File Item " . $file_id);
1080 $file_obj = new ilObjFile($file_id, false);
1081 $file_obj->export($a_target_dir);
1082 unset($file_obj);
1083 }
1084 }
1085
1086
1087
1091 public function modifyExportIdentifier($a_tag, $a_param, $a_value)
1092 {
1093 if ($a_tag == "Identifier" && $a_param == "Entry") {
1094 $a_value = "il_" . IL_INST_ID . "_glo_" . $this->getId();
1095 }
1096
1097 return $a_value;
1098 }
1099
1100
1101
1102
1113 public function delete()
1114 {
1115 // always call parent delete function first!!
1116 if (!parent::delete()) {
1117 return false;
1118 }
1119
1120 // delete terms
1121 if (!$this->isVirtual()) {
1122 $terms = $this->getTermList();
1123 foreach ($terms as $term) {
1124 $term_obj = new ilGlossaryTerm($term["id"]);
1125 $term_obj->delete();
1126 }
1127 }
1128
1129 // delete term references
1130 include_once("./Modules/Glossary/classes/class.ilGlossaryTermReferences.php");
1131 $refs = new ilGlossaryTermReferences($this->getId());
1132 $refs->delete();
1133
1134 // delete glossary data entry
1135 $q = "DELETE FROM glossary WHERE id = " . $this->db->quote($this->getId());
1136 $this->db->query($q);
1137
1138 // delete meta data
1139 $this->deleteMetaData();
1140
1141 return true;
1142 }
1143
1147 public function getXMLZip()
1148 {
1149 include_once("./Modules/Glossary/classes/class.ilGlossaryExport.php");
1150 $glo_exp = new ilGlossaryExport($this);
1151 return $glo_exp->buildExportFile();
1152 }
1153
1158 public static function getDeletionDependencies($a_obj_id)
1159 {
1160 global $DIC;
1161
1162 $lng = $DIC->language();
1163
1164 $dep = array();
1165 include_once("./Modules/ScormAicc/classes/class.ilObjSAHSLearningModule.php");
1167 foreach ($sms as $sm) {
1168 $lng->loadLanguageModule("content");
1169 $dep[$sm] = $lng->txt("glo_used_in_scorm");
1170 }
1171 //echo "-".$a_obj_id."-";
1172 //var_dump($dep);
1173 return $dep;
1174 }
1175
1181 public function getTaxonomyId()
1182 {
1183 include_once("./Services/Taxonomy/classes/class.ilObjTaxonomy.php");
1184 $tax_ids = ilObjTaxonomy::getUsageOfObject($this->getId());
1185 if (count($tax_ids) > 0) {
1186 // glossaries handle max. one taxonomy
1187 return $tax_ids[0];
1188 }
1189 return 0;
1190 }
1191
1192
1199 public function cloneObject($a_target_id, $a_copy_id = 0, $a_omit_tree = false)
1200 {
1201 $new_obj = parent::cloneObject($a_target_id, $a_copy_id, $a_omit_tree);
1202 $this->cloneMetaData($new_obj);
1203
1204 //copy online status if object is not the root copy object
1205 $cp_options = ilCopyWizardOptions::_getInstance($a_copy_id);
1206
1207 if (!$cp_options->isRootNode($this->getRefId())) {
1208 $new_obj->setOnline($this->getOnline());
1209 }
1210
1211 // $new_obj->setTitle($this->getTitle());
1212 $new_obj->setDescription($this->getDescription());
1213 $new_obj->setVirtualMode($this->getVirtualMode());
1214 $new_obj->setPresentationMode($this->getPresentationMode());
1215 $new_obj->setSnippetLength($this->getSnippetLength());
1216 $new_obj->setAutoGlossaries($this->getAutoGlossaries());
1217 $new_obj->update();
1218
1219 // set/copy stylesheet
1220 include_once("./Services/Style/Content/classes/class.ilObjStyleSheet.php");
1221 $style_id = $this->getStyleSheetId();
1222 if ($style_id > 0 && !ilObjStyleSheet::_lookupStandard($style_id)) {
1223 include_once("./Services/Object/classes/class.ilObjectFactory.php");
1224 $style_obj = ilObjectFactory::getInstanceByObjId($style_id);
1225 $new_id = $style_obj->ilClone();
1226 $new_obj->setStyleSheetId($new_id);
1227 $new_obj->update();
1228 }
1229
1230 // copy taxonomy
1231 if (($tax_id = $this->getTaxonomyId()) > 0) {
1232 // clone it
1233 include_once("./Services/Taxonomy/classes/class.ilObjTaxonomy.php");
1234 $tax = new ilObjTaxonomy($tax_id);
1235 $new_tax = $tax->cloneObject(0, 0, true);
1236 $map = $tax->getNodeMapping();
1237
1238 // assign new taxonomy to new glossary
1239 ilObjTaxonomy::saveUsage($new_tax->getId(), $new_obj->getId());
1240 }
1241
1242 // assign new tax/new glossary
1243 // handle mapping
1244
1245 // prepare tax node assignments objects
1246 include_once("./Services/Taxonomy/classes/class.ilTaxNodeAssignment.php");
1247 if ($tax_id > 0) {
1248 $tax_ass = new ilTaxNodeAssignment("glo", $this->getId(), "term", $tax_id);
1249 $new_tax_ass = new ilTaxNodeAssignment("glo", $new_obj->getId(), "term", $new_tax->getId());
1250 }
1251
1252 // copy terms
1253 $term_mappings = array();
1254 foreach (ilGlossaryTerm::getTermList($this->getRefId()) as $term) {
1255 $new_term_id = ilGlossaryTerm::_copyTerm($term["id"], $new_obj->getId());
1256 $term_mappings[$term["id"]] = $new_term_id;
1257
1258 // copy tax node assignments
1259 if ($tax_id > 0) {
1260 $assignmts = $tax_ass->getAssignmentsOfItem($term["id"]);
1261 foreach ($assignmts as $a) {
1262 if ($map[$a["node_id"]] > 0) {
1263 $new_tax_ass->addAssignment($map[$a["node_id"]], $new_term_id);
1264 }
1265 }
1266 }
1267 }
1268
1269 // add mapping of term_ids to copy wizard options
1270 if (!empty($term_mappings)) {
1271 $cp_options->appendMapping($this->getRefId() . '_glo_terms', (array) $term_mappings);
1272 }
1273
1274
1275 return $new_obj;
1276 }
1277
1284 public function removeOfflineGlossaries($a_glo_ids, $ids_are_ref_ids = false)
1285 {
1286 $glo_ids = $a_glo_ids;
1287 if ($ids_are_ref_ids) {
1288 $glo_ids = array_map(function ($id) {
1290 }, $a_glo_ids);
1291 }
1292
1293 $set = $this->db->query(
1294 "SELECT id FROM glossary " .
1295 " WHERE " . $this->db->in("id", $glo_ids, false, "integer") .
1296 " AND is_online = " . $this->db->quote("y", "text")
1297 );
1298 $online_glo_ids = array();
1299 while ($rec = $this->db->fetchAssoc($set)) {
1300 $online_glo_ids[] = $rec["id"];
1301 }
1302
1303 if (!$ids_are_ref_ids) {
1304 return $online_glo_ids;
1305 }
1306
1307 $online_ref_ids = array_filter($a_glo_ids, function ($ref_id) use ($online_glo_ids) {
1308 return in_array(ilObject::_lookupObjectId($ref_id), $online_glo_ids);
1309 });
1310
1311
1312 return $online_ref_ids;
1313 }
1314
1315 public static function getAdvMDSubItemTitle($a_obj_id, $a_sub_type, $a_sub_id)
1316 {
1317 global $DIC;
1318
1319 $lng = $DIC->language();
1320
1321 if ($a_sub_type == "term") {
1322 $lng->loadLanguageModule("glo");
1323
1324 include_once "Modules/Glossary/classes/class.ilGlossaryTerm.php";
1325 return $lng->txt("glo_term") . ' "' . ilGlossaryTerm::_lookGlossaryTerm($a_sub_id) . '"';
1326 }
1327 }
1328
1335 public function autoLinkGlossaryTerms($a_glo_ref_id)
1336 {
1337 // get terms of target glossary
1338 include_once("./Modules/Glossary/classes/class.ilGlossaryTerm.php");
1339 $terms = ilGlossaryTerm::getTermList($a_glo_ref_id);
1340
1341 // for each get page: get content
1342 $source_terms = ilGlossaryTerm::getTermList($this->getRefId());
1343 $found_pages = array();
1344 foreach ($source_terms as $source_term) {
1345 $source_defs = ilGlossaryDefinition::getDefinitionList($source_term["id"]);
1346
1347 for ($j = 0; $j < count($source_defs); $j++) {
1348 $def = $source_defs[$j];
1349 $pg = new ilGlossaryDefPage($def["id"]);
1350
1351 $c = $pg->getXMLContent();
1352 foreach ($terms as $t) {
1353 if (is_int(stripos($c, $t["term"]))) {
1354 $found_pages[$def["id"]]["terms"][] = $t;
1355 if (!is_object($found_pages[$def["id"]]["page"])) {
1356 $found_pages[$def["id"]]["page"] = $pg;
1357 }
1358 }
1359 }
1360 reset($terms);
1361 }
1362 }
1363
1364 // ilPCParagraph autoLinkGlossariesPage with page and terms
1365 include_once("./Services/COPage/classes/class.ilPCParagraph.php");
1366 foreach ($found_pages as $id => $fp) {
1367 ilPCParagraph::autoLinkGlossariesPage($fp["page"], $fp["terms"]);
1368 }
1369 }
1370
1376 public function supportsLongTextQuery()
1377 {
1378 if ($this->db->getDBType() == "oracle") {
1379 return false;
1380 }
1381 return true;
1382 }
1383}
date( 'd-M-Y', $objPHPExcel->getProperties() ->getCreated())
user()
Definition: user.php:4
$_GET["client_id"]
An exception for terminatinating execution or to throw for unit testing.
error($a_errmsg)
set error message @access public
HTML export class for pages.
static _getInstance($a_copy_id)
Get instance of copy wizard options.
static _getExportFiles($a_obj_id, $a_export_types="", $a_obj_type="")
Get Export Files for a repository object.
static _getExportDirectory($a_obj_id, $a_type="xml", $a_obj_type="", $a_entity="")
Get export directory for an repository object.
static _createExportDirectory($a_obj_id, $a_export_type="xml", $a_obj_type="")
Glossary definition page object.
static getDefinitionList($a_term_id)
static
Export class for content objects.
Class ilGlossaryPresentationGUI.
Class ilGlossaryTerm.
static getTermList( $a_glo_ref_id, $searchterm="", $a_first_letter="", $a_def="", $a_tax_node=0, $a_add_amet_fields=false, array $a_amet_filter=null, $a_include_references=false)
Get all terms for given set of glossary ids.
static _copyTerm($a_term_id, $a_glossary_id)
Copy a term to a glossary.
static _lookGlossaryTerm($term_id)
get glossary term
static getFirstLetters($a_glo_id, $a_tax_node=0)
Get all terms for given set of glossary ids.
static getInstance()
Singleton: get instance.
const PURPOSE_EXPORT
Class ilObjFile.
static _getFilesOfObject($a_type, $a_id, $a_usage_hist_nr=0, $a_usage_lang="-")
get all files of an object
Class ilObjGlossary.
getImportDirectory()
get import directory of glossary
setVirtualMode($a_mode)
set glossary type (virtual: fixed/level/subtree, normal:none)
exportHTML($a_target_dir, $log)
export html package
removeOfflineGlossaries($a_glo_ids, $ids_are_ref_ids=false)
Remove offline glossaries from obj id array.
setPublicExportFile($a_type, $a_file)
specify public export file for type
getAutoGlossaries()
Get auto glossaries.
setTitle($a_title)
set title of glossary object
getPublicExportFile($a_type)
get public export file
getExportFiles()
Get export files.
getTermList( $searchterm="", $a_letter="", $a_def="", $a_tax_node=0, $a_include_offline_childs=false, $a_add_amet_fields=false, array $a_amet_filter=null, $a_omit_virtual=false, $a_include_references=false)
Get term list.
setStyleSheetId($a_style_id)
Set ID of assigned style sheet object.
supportsLongTextQuery()
Is long text search supported.
getAllGlossaryIds($a_include_offline_childs=false, $ids_are_ref_ids=false)
Get all glossary ids.
removeAutoGlossary($a_glo_id)
Remove auto glossary.
getSnippetLength()
Get snippet length.
exportFileItems($a_target_dir, &$expLog)
export files of file itmes
static lookupAutoGlossaries($a_id)
Lookup auto glossaries.
exportHTMLMOB($a_target_dir, &$a_glo_gui, $a_mob_id)
export media object to html
exportXML(&$a_xml_writer, $a_inst, $a_target_dir, &$expLog)
export object to xml (see ilias_co.dtd)
create($a_upload=false)
create glossary object
getShowTaxonomy()
Get show taxonomy.
createExportDirectory($a_type="xml")
Creates export directory.
exportXMLGlossaryItems(&$a_xml_writer, $a_inst, &$expLog)
export page objects to xml (see ilias_co.dtd)
cloneObject($a_target_id, $a_copy_id=0, $a_omit_tree=false)
Clone glossary.
getXMLZip()
Get zipped xml file for glossary.
getTaxonomyId()
Get taxonomy.
update()
Update object.
__construct($a_id=0, $a_call_by_reference=true)
Constructor @access public.
read()
read data of content object
setSnippetLength($a_val)
Set snippet length.
getPresentationMode()
Get presentation mode.
getStyleSheetId()
Get ID of assigned style sheet object.
isVirtual()
returns true if glossary type is virtual (any mode)
static getDeletionDependencies($a_obj_id)
Get deletion dependencies.
static getAdvMDSubItemTitle($a_obj_id, $a_sub_type, $a_sub_id)
static lookupSnippetLength($a_id)
Lookup snippet length.
setShowTaxonomy($a_val)
Set show taxonomy.
exportHTMLGlossaryTerms(&$a_glo_gui, $a_target_dir)
export glossary terms
createImportDirectory()
creates data directory for import files (data_dir/glo_data/glo_<id>/import, depending on data directo...
exportHTMLFile($a_target_dir, $a_file_id)
export file object
autoLinkGlossaryTerms($a_glo_ref_id)
Auto link glossary terms.
getDescription()
get description of glossary object
updateAutoGlossaries()
Update auto glossaries.
exportXMLMediaObjects(&$a_xml_writer, $a_inst, $a_target_dir, &$expLog)
export media objects to xml (see ilias_co.dtd)
getExportDirectory($a_type="xml")
Get export directory of glossary.
modifyExportIdentifier($a_tag, $a_param, $a_value)
static lookup($a_id, $a_property)
Lookup glossary property.
exportXMLMetaData(&$a_xml_writer)
export content objects meta data to xml (see ilias_co.dtd)
static _lookupOnline($a_id)
check wether content object is online
getFirstLetters($a_tax_node=0)
Get term list.
getVirtualMode()
get glossary type (normal or virtual)
getTitle()
get title of glossary object
setAutoGlossaries($a_val)
Set auto glossaries.
setPresentationMode($a_val)
Set presentation mode.
setActiveGlossaryMenu($a_act_glo_menu)
setDescription($a_description)
set description of glossary object
Class ilObjMediaObject.
static _getMobsOfObject($a_type, $a_id, $a_usage_hist_nr=0, $a_lang="-")
get mobs of object
static getScormModulesForGlossary($a_glo_id)
Get SCORM modules that assign a certain glossary.
Class ilObjStyleSheet.
static _lookupStandard($a_id)
Lookup standard flag.
static lookupObjectStyle($a_obj_id)
Lookup object style.
static getSyntaxStylePath()
get syntax style path
static writeStyleUsage($a_obj_id, $a_style_id)
Write style usage.
static getUsageOfObject($a_obj_id, $a_include_titles=false)
Get usage of object.
static saveUsage($a_tax_id, $a_obj_id)
Save Usage.
static getInstanceByObjId($a_obj_id, $stop_on_error=true)
get an instance of an Ilias object by object id
Class ilObject Basic functions for all objects.
getType()
get object type @access public
static _lookupObjectId($a_ref_id)
lookup object id
deleteMetaData()
delete meta data entry
updateMetaData()
update meta data entry
createMetaData()
create meta data entry
getRefId()
get reference id @access public
cloneMetaData($target_obj)
Copy meta data.
getId()
get object id @access public
static _lookupType($a_id, $a_reference=false)
lookup object type
static collectFileItems($a_page, $a_domdoc)
Get all file items that are used within the page.
static autoLinkGlossariesPage($a_page, $a_terms)
Auto link glossary of whole page.
Taxonomy node <-> item assignment.
special template class to simplify handling of ITX/PEAR
static getDataDir()
get data directory (outside webspace)
static delDir($a_dir, $a_clean_only=false)
removes a dir and all its content (subdirs and files) recursively
static tf2yn($a_tf)
convert true/false to "y"/"n"
static getWebspaceDir($mode="filesystem")
get webspace directory
static rCopy($a_sdir, $a_tdir, $preserveTimeAttributes=false)
Copies content of a directory $a_sdir recursively to a directory $a_tdir.
static getStyleSheetLocation($mode="output", $a_css_name="", $a_css_location="")
get full style sheet file name (path inclusive) of current user
static zip($a_dir, $a_file, $compress_content=false)
zips given directory/file into given zip.file
static yn2tf($a_yn)
convert "y"/"n" to true/false
static getImagePath($img, $module_path="", $mode="output", $offline=false)
get image path (for images located in a template directory)
static makeDir($a_dir)
creates a new directory and inherits all filesystem permissions of the parent directory You may pass ...
$def
Definition: croninfo.php:21
$style
Definition: example_012.php:70
Interface for repository objects to use adv md with subitems.
static getDescription()
Definition: Php.php:51
update($pash, $contents, Config $config)
global $ilErr
Definition: raiseError.php:16
if(isset($_REQUEST['delete'])) $list
Definition: registry.php:41
if(!file_exists("$old.txt")) if( $old===$new) if(file_exists("$new.txt")) $file
global $DIC
Definition: saml.php:7
$lm_set
$a_type
Definition: workflow.php:92