ILIAS  release_5-2 Revision v5.2.25-18-g3f80b828510
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{
22
26 var $auto_glossaries = array();
27
32 function __construct($a_id = 0,$a_call_by_reference = true)
33 {
34 $this->type = "glo";
35 parent::__construct($a_id,$a_call_by_reference);
36 }
37
41 function create($a_upload = false)
42 {
43 global $ilDB;
44
45 parent::create();
46
47 // meta data will be created by
48 // import parser
49 if (!$a_upload)
50 {
51 $this->createMetaData();
52 }
53
54 $ilDB->manipulate("INSERT INTO glossary (id, is_online, glossary.virtual, pres_mode, snippet_length) VALUES (".
55 $ilDB->quote($this->getId(), "integer").",".
56 $ilDB->quote("n", "text").",".
57 $ilDB->quote($this->getVirtualMode(), "text").",".
58 $ilDB->quote("table", "text").",".
59 $ilDB->quote(200, "integer").
60 ")");
61 $this->setPresentationMode("table");
62 $this->setSnippetLength(200);
63
64 $this->updateAutoGlossaries();
65
66 if (((int) $this->getStyleSheetId()) > 0)
67 {
68 include_once("./Services/Style/Content/classes/class.ilObjStyleSheet.php");
70 }
71
72 }
73
77 function read()
78 {
79 global $ilDB;
80
81 parent::read();
82# echo "Glossary<br>\n";
83
84 $q = "SELECT * FROM glossary WHERE id = ".
85 $ilDB->quote($this->getId(), "integer");
86 $gl_set = $ilDB->query($q);
87 $gl_rec = $ilDB->fetchAssoc($gl_set);
88 $this->setOnline(ilUtil::yn2tf($gl_rec["is_online"]));
89 $this->setVirtualMode($gl_rec["virtual"]);
90 $this->setPublicExportFile("xml", $gl_rec["public_xml_file"]);
91 $this->setPublicExportFile("html", $gl_rec["public_html_file"]);
92 $this->setActiveGlossaryMenu(ilUtil::yn2tf($gl_rec["glo_menu_active"]));
93 $this->setActiveDownloads(ilUtil::yn2tf($gl_rec["downloads_active"]));
94 $this->setPresentationMode($gl_rec["pres_mode"]);
95 $this->setSnippetLength($gl_rec["snippet_length"]);
96 $this->setShowTaxonomy($gl_rec["show_tax"]);
97
98 include_once("./Services/Style/Content/classes/class.ilObjStyleSheet.php");
100
101 // read auto glossaries
102 $set = $ilDB->query("SELECT * FROM glo_glossaries ".
103 " WHERE id = ".$ilDB->quote($this->getId(), "integer")
104 );
105 $glos = array();
106 while ($rec = $ilDB->fetchAssoc($set))
107 {
108 $glos[] = $rec["glo_id"];
109 }
110 $this->setAutoGlossaries($glos);
111
112
113 }
114
120 function getDescription()
121 {
122 return parent::getDescription();
123 }
124
128 function setDescription($a_description)
129 {
130 parent::setDescription($a_description);
131 }
132
133
137 function setVirtualMode($a_mode)
138 {
139 switch ($a_mode)
140 {
141 case "level":
142 case "subtree":
143 // case "fixed":
144 $this->virtual_mode = $a_mode;
145 $this->virtual = true;
146 break;
147
148 default:
149 $this->virtual_mode = "none";
150 $this->virtual = false;
151 break;
152 }
153 }
154
158 function getVirtualMode()
159 {
160 return $this->virtual_mode;
161 }
162
166 function isVirtual()
167 {
168 return $this->virtual;
169 }
170
176 function getTitle()
177 {
178 return parent::getTitle();
179 }
180
184 function setTitle($a_title)
185 {
186 parent::setTitle($a_title);
187// $this->meta_data->setTitle($a_title);
188 }
189
195 function setPresentationMode($a_val)
196 {
197 $this->pres_mode = $a_val;
198 }
199
206 {
207 return $this->pres_mode;
208 }
209
215 function setSnippetLength($a_val)
216 {
217 $this->snippet_length = $a_val;
218 }
219
226 {
227 return ($this->snippet_length > 0)
228 ? $this->snippet_length
229 : null;
230 }
231
232 function setOnline($a_online)
233 {
234 $this->online = $a_online;
235 }
236
237 function getOnline()
238 {
239 return $this->online;
240 }
241
245 static function _lookupOnline($a_id)
246 {
247 global $ilDB;
248
249 $q = "SELECT is_online FROM glossary WHERE id = ".
250 $ilDB->quote($a_id, "integer");
251 $lm_set = $ilDB->query($q);
252 $lm_rec = $ilDB->fetchAssoc($lm_set);
253
254 return ilUtil::yn2tf($lm_rec["is_online"]);
255 }
256
263 static protected function lookup($a_id, $a_property)
264 {
265 global $ilDB;
266
267 $set = $ilDB->query("SELECT $a_property FROM glossary WHERE id = ".
268 $ilDB->quote($a_id, "integer"));
269 $rec = $ilDB->fetchAssoc($set);
270
271 return $rec[$a_property];
272 }
273
280 static function lookupSnippetLength($a_id)
281 {
282 return ilObjGlossary::lookup($a_id, "snippet_length");
283 }
284
285
286 function setActiveGlossaryMenu($a_act_glo_menu)
287 {
288 $this->glo_menu_active = $a_act_glo_menu;
289 }
290
292 {
293 return $this->glo_menu_active;
294 }
295
296 function setActiveDownloads($a_down)
297 {
298 $this->downloads_active = $a_down;
299 }
300
302 {
303 return $this->downloads_active;
304 }
305
310 {
311 return $this->style_id;
312 }
313
317 function setStyleSheetId($a_style_id)
318 {
319 $this->style_id = $a_style_id;
320 }
321
322
328 function setShowTaxonomy($a_val)
329 {
330 $this->show_tax = $a_val;
331 }
332
339 {
340 return $this->show_tax;
341 }
342
348 function setAutoGlossaries($a_val)
349 {
350 $this->auto_glossaries = array();
351 if (is_array($a_val))
352 {
353 foreach ($a_val as $v)
354 {
355 $v = (int) $v;
356 if ($v > 0 && ilObject::_lookupType($v) == "glo" &&
357 !in_array($v, $this->auto_glossaries))
358 {
359 $this->auto_glossaries[] = $v;
360 }
361 }
362 }
363 }
364
371 {
373 }
374
381 function removeAutoGlossary($a_glo_id)
382 {
383 $glo_ids = array();
384 foreach($this->getAutoGlossaries() as $g)
385 {
386 if ($g != $a_glo_id)
387 {
388 $glo_ids[] = $g;
389 }
390 }
391 $this->setAutoGlossaries($glo_ids);
392 }
393
397 function update()
398 {
399 global $ilDB;
400
401 $this->updateMetaData();
402
403 $ilDB->manipulate("UPDATE glossary SET ".
404 " is_online = ".$ilDB->quote(ilUtil::tf2yn($this->getOnline()), "text").",".
405 " glossary.virtual = ".$ilDB->quote($this->getVirtualMode(), "text").",".
406 " public_xml_file = ".$ilDB->quote($this->getPublicExportFile("xml"), "text").",".
407 " public_html_file = ".$ilDB->quote($this->getPublicExportFile("html"), "text").",".
408 " glo_menu_active = ".$ilDB->quote(ilUtil::tf2yn($this->isActiveGlossaryMenu()), "text").",".
409 " downloads_active = ".$ilDB->quote(ilUtil::tf2yn($this->isActiveDownloads()), "text").", ".
410 " pres_mode = ".$ilDB->quote($this->getPresentationMode(), "text").", ".
411 " show_tax = ".$ilDB->quote((int) $this->getShowTaxonomy(), "integer").", ".
412 " snippet_length = ".$ilDB->quote((int)$this->getSnippetLength(), "integer")." ".
413 " WHERE id = ".$ilDB->quote($this->getId(), "integer"));
414
415 include_once("./Services/Style/Content/classes/class.ilObjStyleSheet.php");
417
418 $this->updateAutoGlossaries();
419 parent::update();
420 }
421
422
430 {
431 global $ilDB;
432
433 // update auto glossaries
434 $ilDB->manipulate("DELETE FROM glo_glossaries WHERE ".
435 " id = ".$ilDB->quote($this->getId(), "integer")
436 );
437 foreach ($this->getAutoGlossaries() as $glo_id)
438 {
439 $ilDB->manipulate("INSERT INTO glo_glossaries ".
440 "(id, glo_id) VALUES (".
441 $ilDB->quote($this->getId(), "integer").",".
442 $ilDB->quote($glo_id, "integer").
443 ")");
444 }
445 }
446
453 static function lookupAutoGlossaries($a_id)
454 {
455 global $ilDB;
456
457 // read auto glossaries
458 $set = $ilDB->query("SELECT * FROM glo_glossaries ".
459 " WHERE id = ".$ilDB->quote($a_id, "integer")
460 );
461 $glos = array();
462 while ($rec = $ilDB->fetchAssoc($set))
463 {
464 $glos[] = $rec["glo_id"];
465 }
466 return $glos;
467 }
468
472 function getTermList($searchterm = "", $a_letter = "", $a_def = "", $a_tax_node = 0, $a_include_offline_childs = false,
473 $a_add_amet_fields = false, array $a_amet_filter = null, $a_omit_virtual = false, $a_include_references = false)
474 {
475 if ($a_omit_virtual)
476 {
477 $glo_ids[] = $this->getId();
478 }
479 else
480 {
481 $glo_ids = $this->getAllGlossaryIds($a_include_offline_childs);
482 }
483 $list = ilGlossaryTerm::getTermList($glo_ids, $searchterm, $a_letter, $a_def, $a_tax_node,
484 $a_add_amet_fields, $a_amet_filter, $a_include_references);
485 return $list;
486 }
487
491 function getFirstLetters($a_tax_node = 0)
492 {
493 $glo_ids = $this->getAllGlossaryIds();
494 $first_letters = ilGlossaryTerm::getFirstLetters($glo_ids, $a_tax_node);
495 return $first_letters;
496 }
497
504 function getAllGlossaryIds($a_include_offline_childs = false)
505 {
506 global $tree;
507
508 if ($this->isVirtual())
509 {
510 $glo_ids = array();
511
512 $virtual_mode = $this->getRefId() ? $this->getVirtualMode() : '';
513 switch ($virtual_mode)
514 {
515 case "level":
516 $glo_arr = $tree->getChildsByType($tree->getParentId($this->getRefId()),"glo");
517 $glo_ids[] = $this->getId();
518 foreach ($glo_arr as $glo)
519 {
520 {
521 $glo_ids[] = $glo['obj_id'];
522 }
523 }
524 if (!$a_include_offline_childs)
525 {
526 $glo_ids = ilObjGlossary::removeOfflineGlossaries($glo_ids);
527 }
528 // always show entries of current glossary (if no permission is given, user will not come to the presentation screen)
529 // see bug #14477
530 if (!in_array($this->getId(), $glo_ids))
531 {
532 $glo_ids[] = $this->getId();
533 }
534 break;
535
536 case "subtree":
537 $subtree_nodes = $tree->getSubTree($tree->getNodeData($tree->getParentId($this->getRefId())));
538
539 foreach ($subtree_nodes as $node)
540 {
541 if ($node['type'] == 'glo')
542 {
543 $glo_ids[] = $node['obj_id'];
544 }
545 }
546 if (!$a_include_offline_childs)
547 {
548 $glo_ids = ilObjGlossary::removeOfflineGlossaries($glo_ids);
549 }
550 // always show entries of current glossary (if no permission is given, user will not come to the presentation screen)
551 // see bug #14477
552 if (!in_array($this->getId(), $glo_ids))
553 {
554 $glo_ids[] = $this->getId();
555 }
556 break;
557
558 // fallback to none virtual mode in case of error
559 default:
560 $glo_ids[] = $this->getId();
561 break;
562 }
563 }
564 else
565 {
566 $glo_ids = $this->getId();
567 }
568
569 return $glo_ids;
570 }
571
578 {
579 $glo_data_dir = ilUtil::getDataDir()."/glo_data";
580 ilUtil::makeDir($glo_data_dir);
581 if(!is_writable($glo_data_dir))
582 {
583 $this->ilias->raiseError("Glossary Data Directory (".$glo_data_dir
584 .") not writeable.",$this->ilias->error_obj->FATAL);
585 }
586
587 // create glossary directory (data_dir/glo_data/glo_<id>)
588 $glo_dir = $glo_data_dir."/glo_".$this->getId();
589 ilUtil::makeDir($glo_dir);
590 if(!@is_dir($glo_dir))
591 {
592 $this->ilias->raiseError("Creation of Glossary Directory failed.",$this->ilias->error_obj->FATAL);
593 }
594 // create Import subdirectory (data_dir/glo_data/glo_<id>/import)
595 $import_dir = $glo_dir."/import";
596 ilUtil::makeDir($import_dir);
597 if(!@is_dir($import_dir))
598 {
599 $this->ilias->raiseError("Creation of Export Directory failed.",$this->ilias->error_obj->FATAL);
600 }
601 }
602
607 {
608 $export_dir = ilUtil::getDataDir()."/glo_data"."/glo_".$this->getId()."/import";
609
610 return $export_dir;
611 }
612
617 {
618 include_once("./Services/Export/classes/class.ilExport.php");
619 return ilExport::_createExportDirectory($this->getId(), $a_type, $this->getType());
620 }
621
625 function getExportDirectory($a_type = "xml")
626 {
627 include_once("./Services/Export/classes/class.ilExport.php");
628 return ilExport::_getExportDirectory($this->getId(), $a_type, $this->getType());
629 }
630
634 function getExportFiles()
635 {
636 include_once("./Services/Export/classes/class.ilExport.php");
637 return ilExport::_getExportFiles($this->getId(), array("xml", "html"), $this->getType());
638 }
639
646 function setPublicExportFile($a_type, $a_file)
647 {
648 $this->public_export_file[$a_type] = $a_file;
649 }
650
659 {
660 return $this->public_export_file[$a_type];
661 }
662
666 function exportHTML($a_target_dir, $log)
667 {
668 global $ilias, $tpl;
669
670 // initialize temporary target directory
671 ilUtil::delDir($a_target_dir);
672 ilUtil::makeDir($a_target_dir);
673
674 // init mathjax rendering for export
675 include_once './Services/MathJax/classes/class.ilMathJax.php';
677
678 include_once("./Services/COPage/classes/class.ilCOPageHTMLExport.php");
679 $this->co_page_html_export = new ilCOPageHTMLExport($a_target_dir);
680 $this->co_page_html_export->createDirectories();
681
682 // export system style sheet
683 $location_stylesheet = ilUtil::getStyleSheetLocation("filesystem");
684 $style_name = $ilias->account->prefs["style"].".css";
685 copy($location_stylesheet, $a_target_dir."/".$style_name);
686 $location_stylesheet = ilUtil::getStyleSheetLocation();
687
688 if ($this->getStyleSheetId() < 1)
689 {
690 $cont_stylesheet = "Services/COPage/css/content.css";
691 copy($cont_stylesheet, $a_target_dir."/content.css");
692 }
693 else
694 {
695 $content_style_img_dir = $a_target_dir."/images";
696 ilUtil::makeDir($content_style_img_dir);
697 $style = new ilObjStyleSheet($this->getStyleSheetId());
698 $style->writeCSSFile($a_target_dir."/content.css", "images");
699 $style->copyImagesToDir($content_style_img_dir);
700 }
701
702 // export syntax highlighting style
703 $syn_stylesheet = ilObjStyleSheet::getSyntaxStylePath();
704 copy($syn_stylesheet, $a_target_dir."/syntaxhighlight.css");
705
706 // get glossary presentation gui class
707 include_once("./Modules/Glossary/classes/class.ilGlossaryPresentationGUI.php");
708 $_GET["cmd"] = "nop";
709 $glo_gui = new ilGlossaryPresentationGUI();
710 $glo_gui->setOfflineMode(true);
711 $glo_gui->setOfflineDirectory($a_target_dir);
712
713 // could be implemented in the future if other export
714 // formats are supported (e.g. scorm)
715 //$glo_gui->setExportFormat($a_export_format);
716
717 // export terms
718 $this->exportHTMLGlossaryTerms($glo_gui, $a_target_dir);
719
720 // export all media objects
721 foreach ($this->offline_mobs as $mob)
722 {
723 $this->exportHTMLMOB($a_target_dir, $glo_gui, $mob, "_blank");
724 }
725 $_GET["obj_type"] = "MediaObject";
726 $_GET["obj_id"] = $a_mob_id;
727 $_GET["cmd"] = "";
728
729 // export all file objects
730 foreach ($this->offline_files as $file)
731 {
732 $this->exportHTMLFile($a_target_dir, $file);
733 }
734
735 // export images
736 $image_dir = $a_target_dir."/images";
737 ilUtil::makeDir($image_dir);
738 ilUtil::makeDir($image_dir."/browser");
739 copy(ilUtil::getImagePath("enlarge.svg", false, "filesystem"),
740 $image_dir."/enlarge.svg");
741 copy(ilUtil::getImagePath("browser/blank.png", false, "filesystem"),
742 $image_dir."/browser/plus.png");
743 copy(ilUtil::getImagePath("browser/blank.png", false, "filesystem"),
744 $image_dir."/browser/minus.png");
745 copy(ilUtil::getImagePath("browser/blank.png", false, "filesystem"),
746 $image_dir."/browser/blank.png");
747 copy(ilUtil::getImagePath("icon_st.svg", false, "filesystem"),
748 $image_dir."/icon_st.svg");
749 copy(ilUtil::getImagePath("icon_pg.svg", false, "filesystem"),
750 $image_dir."/icon_pg.svg");
751 copy(ilUtil::getImagePath("nav_arr_L.png", false, "filesystem"),
752 $image_dir."/nav_arr_L.png");
753 copy(ilUtil::getImagePath("nav_arr_R.png", false, "filesystem"),
754 $image_dir."/nav_arr_R.png");
755
756 // template workaround: reset of template
757 $tpl = new ilTemplate("tpl.main.html", true, true);
758 $tpl->setVariable("LOCATION_STYLESHEET",$location_stylesheet);
759 $tpl->addBlockFile("CONTENT", "content", "tpl.adm_content.html");
760
761 // zip everything
762 if (true)
763 {
764 // zip it all
765 $date = time();
766 $zip_file = $this->getExportDirectory("html")."/".$date."__".IL_INST_ID."__".
767 $this->getType()."_".$this->getId().".zip";
768//echo "zip-".$a_target_dir."-to-".$zip_file;
769 ilUtil::zip($a_target_dir, $zip_file);
770 ilUtil::delDir($a_target_dir);
771 }
772 }
773
774
778 function exportHTMLGlossaryTerms(&$a_glo_gui, $a_target_dir)
779 {
780 global $ilUser;
781
782 include_once("./Services/COPage/classes/class.ilCOPageHTMLExport.php");
783 $copage_export = new ilCOPageHTMLExport($a_target_dir);
784 $copage_export->exportSupportScripts();
785
786 // index.html file
787 $a_glo_gui->tpl = new ilTemplate("tpl.main.html", true, true);
788 $style_name = $ilUser->prefs["style"].".css";;
789 $a_glo_gui->tpl->setVariable("LOCATION_STYLESHEET","./".$style_name);
790 $a_glo_gui->tpl->addBlockFile("CONTENT", "content", "tpl.adm_content.html");
791 $a_glo_gui->tpl->setTitle($this->getTitle());
792
793 $content = $a_glo_gui->listTerms();
794 $file = $a_target_dir."/index.html";
795
796 // open file
797 if (!($fp = @fopen($file,"w+")))
798 {
799 die ("<b>Error</b>: Could not open \"".$file."\" for writing".
800 " in <b>".__FILE__."</b> on line <b>".__LINE__."</b><br />");
801 }
802 chmod($file, 0770);
803 fwrite($fp, $content);
804 fclose($fp);
805
806 $terms = $this->getTermList();
807
808 $this->offline_mobs = array();
809 $this->offline_files = array();
810
811 foreach($terms as $term)
812 {
813 $a_glo_gui->tpl = new ilTemplate("tpl.main.html", true, true);
814 $a_glo_gui->tpl = $copage_export->getPreparedMainTemplate();
815 //$tpl->addBlockFile("CONTENT", "content", "tpl.adm_content.html");
816
817 // set style
818 $style_name = $ilUser->prefs["style"].".css";;
819 $a_glo_gui->tpl->setVariable("LOCATION_STYLESHEET","./".$style_name);
820
821 $_GET["term_id"] = $term["id"];
822 $_GET["frame"] = "_blank";
823 $content = $a_glo_gui->listDefinitions($_GET["ref_id"],$term["id"],false);
824 $file = $a_target_dir."/term_".$term["id"].".html";
825
826 // open file
827 if (!($fp = @fopen($file,"w+")))
828 {
829 die ("<b>Error</b>: Could not open \"".$file."\" for writing".
830 " in <b>".__FILE__."</b> on line <b>".__LINE__."</b><br />");
831 }
832 chmod($file, 0770);
833 fwrite($fp, $content);
834 fclose($fp);
835
836 // store linked/embedded media objects of glosssary term
837 include_once("./Modules/Glossary/classes/class.ilGlossaryDefinition.php");
838 $defs = ilGlossaryDefinition::getDefinitionList($term["id"]);
839 foreach($defs as $def)
840 {
841 $def_mobs = ilObjMediaObject::_getMobsOfObject("gdf:pg", $def["id"]);
842 foreach($def_mobs as $def_mob)
843 {
844 $this->offline_mobs[$def_mob] = $def_mob;
845 }
846
847 // get all files of page
848 include_once("./Modules/File/classes/class.ilObjFile.php");
849 $def_files = ilObjFile::_getFilesOfObject("gdf:pg", $def["id"]);
850 $this->offline_files = array_merge($this->offline_files, $def_files);
851
852 }
853 }
854 }
855
859 function exportHTMLMOB($a_target_dir, &$a_glo_gui, $a_mob_id)
860 {
861 global $tpl;
862
863 $mob_dir = $a_target_dir."/mobs";
864
865 $source_dir = ilUtil::getWebspaceDir()."/mobs/mm_".$a_mob_id;
866 if (@is_dir($source_dir))
867 {
868 ilUtil::makeDir($mob_dir."/mm_".$a_mob_id);
869 ilUtil::rCopy($source_dir, $mob_dir."/mm_".$a_mob_id);
870 }
871
872 $tpl = new ilTemplate("tpl.main.html", true, true);
873 $tpl->addBlockFile("CONTENT", "content", "tpl.adm_content.html");
874 $_GET["obj_type"] = "MediaObject";
875 $_GET["mob_id"] = $a_mob_id;
876 $_GET["cmd"] = "";
877 $content = $a_glo_gui->media();
878 $file = $a_target_dir."/media_".$a_mob_id.".html";
879
880 // open file
881 if (!($fp = @fopen($file,"w+")))
882 {
883 die ("<b>Error</b>: Could not open \"".$file."\" for writing".
884 " in <b>".__FILE__."</b> on line <b>".__LINE__."</b><br />");
885 }
886 chmod($file, 0770);
887 fwrite($fp, $content);
888 fclose($fp);
889
890 // fullscreen
891 include_once("./Services/MediaObjects/classes/class.ilObjMediaObject.php");
892 $mob_obj = new ilObjMediaObject($a_mob_id);
893 if ($mob_obj->hasFullscreenItem())
894 {
895 $tpl = new ilTemplate("tpl.main.html", true, true);
896 $tpl->addBlockFile("CONTENT", "content", "tpl.adm_content.html");
897 $_GET["mob_id"] = $a_mob_id;
898 $_GET["cmd"] = "fullscreen";
899 $content = $a_glo_gui->fullscreen();
900 $file = $a_target_dir."/fullscreen_".$a_mob_id.".html";
901
902 // open file
903 if (!($fp = @fopen($file,"w+")))
904 {
905 die ("<b>Error</b>: Could not open \"".$file."\" for writing".
906 " in <b>".__FILE__."</b> on line <b>".__LINE__."</b><br />");
907 }
908 chmod($file, 0770);
909 fwrite($fp, $content);
910 fclose($fp);
911 }
912 }
913
917 function exportHTMLFile($a_target_dir, $a_file_id)
918 {
919 $file_dir = $a_target_dir."/files/file_".$a_file_id;
920 ilUtil::makeDir($file_dir);
921 include_once("./Modules/File/classes/class.ilObjFile.php");
922 $file_obj = new ilObjFile($a_file_id, false);
923 $source_file = $file_obj->getDirectory($file_obj->getVersion())."/".$file_obj->getFileName();
924 if (!is_file($source_file))
925 {
926 $source_file = $file_obj->getDirectory()."/".$file_obj->getFileName();
927 }
928 copy($source_file, $file_dir."/".$file_obj->getFileName());
929 }
930
931
938 function exportXML(&$a_xml_writer, $a_inst, $a_target_dir, &$expLog)
939 {
940 global $ilBench;
941
942 // export glossary
943 $attrs = array();
944 $attrs["Type"] = "Glossary";
945 $a_xml_writer->xmlStartTag("ContentObject", $attrs);
946
947 // MetaData
948 $this->exportXMLMetaData($a_xml_writer);
949
950 // collect media objects
951 $terms = $this->getTermList();
952 $this->mob_ids = array();
953 $this->file_ids = array();
954 foreach ($terms as $term)
955 {
956 include_once "./Modules/Glossary/classes/class.ilGlossaryDefinition.php";
957
959
960 foreach($defs as $def)
961 {
962 $this->page_object = new ilGlossaryDefPage($def["id"]);
963 $this->page_object->buildDom();
964 $this->page_object->insertInstIntoIDs(IL_INST_ID);
965 $mob_ids = $this->page_object->collectMediaObjects(false);
966 include_once("./Services/COPage/classes/class.ilPCFileList.php");
967 $file_ids = ilPCFileList::collectFileItems($this->page_object, $this->page_object->getDomDoc());
968 foreach($mob_ids as $mob_id)
969 {
970 $this->mob_ids[$mob_id] = $mob_id;
971 }
972 foreach($file_ids as $file_id)
973 {
974 $this->file_ids[$file_id] = $file_id;
975 }
976 }
977 }
978
979 // export media objects
980 $expLog->write(date("[y-m-d H:i:s] ")."Start Export Media Objects");
981 $ilBench->start("GlossaryExport", "exportMediaObjects");
982 $this->exportXMLMediaObjects($a_xml_writer, $a_inst, $a_target_dir, $expLog);
983 $ilBench->stop("GlossaryExport", "exportMediaObjects");
984 $expLog->write(date("[y-m-d H:i:s] ")."Finished Export Media Objects");
985
986 // FileItems
987 $expLog->write(date("[y-m-d H:i:s] ")."Start Export File Items");
988 $ilBench->start("ContentObjectExport", "exportFileItems");
989 $this->exportFileItems($a_target_dir, $expLog);
990 $ilBench->stop("ContentObjectExport", "exportFileItems");
991 $expLog->write(date("[y-m-d H:i:s] ")."Finished Export File Items");
992
993 // Glossary
994 $expLog->write(date("[y-m-d H:i:s] ")."Start Export Glossary Items");
995 $ilBench->start("GlossaryExport", "exportGlossaryItems");
996 $this->exportXMLGlossaryItems($a_xml_writer, $a_inst, $expLog);
997 $ilBench->stop("GlossaryExport", "exportGlossaryItems");
998 $expLog->write(date("[y-m-d H:i:s] ")."Finished Export Glossary Items");
999
1000 $a_xml_writer->xmlEndTag("ContentObject");
1001 }
1002
1009 function exportXMLGlossaryItems(&$a_xml_writer, $a_inst, &$expLog)
1010 {
1011 global $ilBench;
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 {
1025 $ilBench->start("GlossaryExport", "exportGlossaryItem");
1026 $expLog->write(date("[y-m-d H:i:s] ")."Page Object ".$page["obj_id"]);
1027
1028 // export xml to writer object
1029 $ilBench->start("GlossaryExport", "exportGlossaryItem_getGlossaryTerm");
1030 $glo_term = new ilGlossaryTerm($term["id"]);
1031 $ilBench->stop("GlossaryExport", "exportGlossaryItem_getGlossaryTerm");
1032 $ilBench->start("GlossaryExport", "exportGlossaryItem_XML");
1033 $glo_term->exportXML($a_xml_writer, $a_inst);
1034 $ilBench->stop("GlossaryExport", "exportGlossaryItem_XML");
1035
1036 unset($glo_term);
1037
1038 $ilBench->stop("GlossaryExport", "exportGlossaryItem");
1039 }
1040
1041 $a_xml_writer->xmlEndTag("Glossary");
1042 }
1043
1050 function exportXMLMetaData(&$a_xml_writer)
1051 {
1052 include_once("Services/MetaData/classes/class.ilMD2XML.php");
1053 $md2xml = new ilMD2XML($this->getId(), 0, $this->getType());
1054 $md2xml->setExportMode(true);
1055 $md2xml->startExport();
1056 $a_xml_writer->appendXML($md2xml->getXML());
1057 }
1058
1065 function exportXMLMediaObjects(&$a_xml_writer, $a_inst, $a_target_dir, &$expLog)
1066 {
1067 include_once("./Services/MediaObjects/classes/class.ilObjMediaObject.php");
1068
1069 foreach ($this->mob_ids as $mob_id)
1070 {
1071 $expLog->write(date("[y-m-d H:i:s] ")."Media Object ".$mob_id);
1072 $media_obj = new ilObjMediaObject($mob_id);
1073 $media_obj->exportXML($a_xml_writer, $a_inst);
1074 $media_obj->exportFiles($a_target_dir);
1075 unset($media_obj);
1076 }
1077 }
1078
1083 function exportFileItems($a_target_dir, &$expLog)
1084 {
1085 include_once("./Modules/File/classes/class.ilObjFile.php");
1086
1087 foreach ($this->file_ids as $file_id)
1088 {
1089 $expLog->write(date("[y-m-d H:i:s] ")."File Item ".$file_id);
1090 $file_obj = new ilObjFile($file_id, false);
1091 $file_obj->export($a_target_dir);
1092 unset($file_obj);
1093 }
1094 }
1095
1096
1097
1101 function modifyExportIdentifier($a_tag, $a_param, $a_value)
1102 {
1103 if ($a_tag == "Identifier" && $a_param == "Entry")
1104 {
1105 $a_value = "il_".IL_INST_ID."_glo_".$this->getId();
1106 }
1107
1108 return $a_value;
1109 }
1110
1111
1112
1113
1124 function delete()
1125 {
1126 global $ilDB;
1127
1128 // always call parent delete function first!!
1129 if (!parent::delete())
1130 {
1131 return false;
1132 }
1133
1134 // delete terms
1135 if (!$this->isVirtual())
1136 {
1137 $terms = $this->getTermList();
1138 foreach ($terms as $term)
1139 {
1140 $term_obj = new ilGlossaryTerm($term["id"]);
1141 $term_obj->delete();
1142 }
1143 }
1144
1145 // delete term references
1146 include_once("./Modules/Glossary/classes/class.ilGlossaryTermReferences.php");
1147 $refs = new ilGlossaryTermReferences($this->getId());
1148 $refs->delete();
1149
1150 // delete glossary data entry
1151 $q = "DELETE FROM glossary WHERE id = ".$ilDB->quote($this->getId());
1152 $ilDB->query($q);
1153
1154 // delete meta data
1155 $this->deleteMetaData();
1156
1157 return true;
1158 }
1159
1163 function getXMLZip()
1164 {
1165 include_once("./Modules/Glossary/classes/class.ilGlossaryExport.php");
1166 $glo_exp = new ilGlossaryExport($this);
1167 return $glo_exp->buildExportFile();
1168 }
1169
1174 static function getDeletionDependencies($a_obj_id)
1175 {
1176 global $lng;
1177
1178 $dep = array();
1179 include_once("./Modules/ScormAicc/classes/class.ilObjSAHSLearningModule.php");
1181 foreach ($sms as $sm)
1182 {
1183 $lng->loadLanguageModule("content");
1184 $dep[$sm] = $lng->txt("glo_used_in_scorm");
1185 }
1186//echo "-".$a_obj_id."-";
1187//var_dump($dep);
1188 return $dep;
1189 }
1190
1196 function getTaxonomyId()
1197 {
1198 include_once("./Services/Taxonomy/classes/class.ilObjTaxonomy.php");
1199 $tax_ids = ilObjTaxonomy::getUsageOfObject($this->getId());
1200 if (count($tax_ids) > 0)
1201 {
1202 // glossaries handle max. one taxonomy
1203 return $tax_ids[0];
1204 }
1205 return 0;
1206 }
1207
1208
1215 public function cloneObject($a_target_id,$a_copy_id = 0, $a_omit_tree = false)
1216 {
1217 global $ilDB, $ilUser, $ilias;
1218
1219 $new_obj = parent::cloneObject($a_target_id,$a_copy_id, $a_omit_tree);
1220 $this->cloneMetaData($new_obj);
1221
1222 //copy online status if object is not the root copy object
1223 $cp_options = ilCopyWizardOptions::_getInstance($a_copy_id);
1224
1225 if(!$cp_options->isRootNode($this->getRefId()))
1226 {
1227 $new_obj->setOnline($this->getOnline());
1228 }
1229
1230// $new_obj->setTitle($this->getTitle());
1231 $new_obj->setDescription($this->getDescription());
1232 $new_obj->setVirtualMode($this->getVirtualMode());
1233 $new_obj->setPresentationMode($this->getPresentationMode());
1234 $new_obj->setSnippetLength($this->getSnippetLength());
1235 $new_obj->setAutoGlossaries($this->getAutoGlossaries());
1236 $new_obj->update();
1237
1238 // set/copy stylesheet
1239 include_once("./Services/Style/Content/classes/class.ilObjStyleSheet.php");
1240 $style_id = $this->getStyleSheetId();
1241 if ($style_id > 0 && !ilObjStyleSheet::_lookupStandard($style_id))
1242 {
1243 $style_obj = $ilias->obj_factory->getInstanceByObjId($style_id);
1244 $new_id = $style_obj->ilClone();
1245 $new_obj->setStyleSheetId($new_id);
1246 $new_obj->update();
1247 }
1248
1249 // copy taxonomy
1250 if (($tax_id = $this->getTaxonomyId()) > 0)
1251 {
1252 // clone it
1253 include_once("./Services/Taxonomy/classes/class.ilObjTaxonomy.php");
1254 $tax = new ilObjTaxonomy($tax_id);
1255 $new_tax = $tax->cloneObject(0,0,true);
1256 $map = $tax->getNodeMapping();
1257
1258 // assign new taxonomy to new glossary
1259 ilObjTaxonomy::saveUsage($new_tax->getId(), $new_obj->getId());
1260 }
1261
1262 // assign new tax/new glossary
1263 // handle mapping
1264
1265 // prepare tax node assignments objects
1266 include_once("./Services/Taxonomy/classes/class.ilTaxNodeAssignment.php");
1267 if ($tax_id > 0)
1268 {
1269 $tax_ass = new ilTaxNodeAssignment("glo", $this->getId(), "term", $tax_id);
1270 $new_tax_ass = new ilTaxNodeAssignment("glo", $new_obj->getId(), "term", $new_tax->getId());
1271 }
1272
1273 // copy terms
1274 $term_mappings = array();
1275 foreach (ilGlossaryTerm::getTermList($this->getId()) as $term)
1276 {
1277 $new_term_id = ilGlossaryTerm::_copyTerm($term["id"], $new_obj->getId());
1278 $term_mappings[$term["id"]] = $new_term_id;
1279
1280 // copy tax node assignments
1281 if ($tax_id > 0)
1282 {
1283 $assignmts = $tax_ass->getAssignmentsOfItem($term["id"]);
1284 foreach ($assignmts as $a)
1285 {
1286 if ($map[$a["node_id"]] > 0)
1287 {
1288 $new_tax_ass->addAssignment($map[$a["node_id"]] ,$new_term_id);
1289 }
1290 }
1291 }
1292 }
1293
1294 // add mapping of term_ids to copy wizard options
1295 if (!empty($term_mappings))
1296 {
1297 $cp_options->appendMapping($this->getRefId().'_glo_terms', (array) $term_mappings);
1298 }
1299
1300
1301 return $new_obj;
1302 }
1303
1310 function removeOfflineGlossaries($a_glo_ids)
1311 {
1312 global $ilDB;
1313
1314 $set = $ilDB->query("SELECT id FROM glossary ".
1315 " WHERE ".$ilDB->in("id", $a_glo_ids, false, "integer").
1316 " AND is_online = ".$ilDB->quote("y", "text")
1317 );
1318 $glo_ids = array();
1319 while ($rec = $ilDB->fetchAssoc($set))
1320 {
1321 $glo_ids[] = $rec["id"];
1322 }
1323 return $glo_ids;
1324 }
1325
1326 public static function getAdvMDSubItemTitle($a_obj_id, $a_sub_type, $a_sub_id)
1327 {
1328 global $lng;
1329
1330 if($a_sub_type == "term")
1331 {
1332 $lng->loadLanguageModule("glo");
1333
1334 include_once "Modules/Glossary/classes/class.ilGlossaryTerm.php";
1335 return $lng->txt("glo_term").' "'. ilGlossaryTerm::_lookGlossaryTerm($a_sub_id).'"';
1336 }
1337 }
1338
1345 function autoLinkGlossaryTerms($a_glo_id)
1346 {
1347 // get terms of target glossary
1348 include_once("./Modules/Glossary/classes/class.ilGlossaryTerm.php");
1349 $terms = ilGlossaryTerm::getTermList($a_glo_id);
1350
1351 // for each get page: get content
1352 $source_terms = ilGlossaryTerm::getTermList($this->getId());
1353 $found_pages = array();
1354 foreach($source_terms as $source_term)
1355 {
1356 $source_defs = ilGlossaryDefinition::getDefinitionList($source_term["id"]);
1357
1358 for ($j = 0; $j < count($source_defs); $j++)
1359 {
1360 $def = $source_defs[$j];
1361 $pg = new ilGlossaryDefPage($def["id"]);
1362
1363 $c = $pg->getXMLContent();
1364 foreach ($terms as $t)
1365 {
1366 if (is_int(stripos($c, $t["term"])))
1367 {
1368 $found_pages[$def["id"]]["terms"][] = $t;
1369 if (!is_object($found_pages[$def["id"]]["page"]))
1370 {
1371 $found_pages[$def["id"]]["page"] = $pg;
1372 }
1373 }
1374 }
1375 reset($terms);
1376 }
1377 }
1378
1379 // ilPCParagraph autoLinkGlossariesPage with page and terms
1380 include_once("./Services/COPage/classes/class.ilPCParagraph.php");
1381 foreach ($found_pages as $id => $fp)
1382 {
1383 ilPCParagraph::autoLinkGlossariesPage($fp["page"], $fp["terms"]);
1384 }
1385
1386
1387 }
1388
1389}
1390
1391?>
date( 'd-M-Y', $objPHPExcel->getProperties() ->getCreated())
global $tpl
Definition: ilias.php:8
$_GET["client_id"]
An exception for terminatinating execution or to throw for unit testing.
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_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
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.
setStyleSheetId($a_style_id)
Set ID of assigned style sheet object.
removeOfflineGlossaries($a_glo_ids)
Remove offline glossaries from obj id array.
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.
autoLinkGlossaryTerms($a_glo_id)
Auto link glossary terms.
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
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.
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.
getAllGlossaryIds($a_include_offline_childs=false)
Get all glossary ids.
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.
Class ilObject Basic functions for all objects.
getType()
get object type @access public
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)
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 ...
$style
Definition: example_012.php:70
global $ilBench
Definition: ilias.php:18
Interface for repository objects to use adv md with subitems.
redirection script todo: (a better solution should control the processing via a xml file)
if(!file_exists("$old.txt")) if( $old===$new) if(file_exists("$new.txt")) $file
global $ilDB
$lm_set
$ilUser
Definition: imgupload.php:18
$a_type
Definition: workflow.php:93