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 
5 require_once("./Services/Object/classes/class.ilObject.php");
6 require_once("./Modules/Glossary/classes/class.ilGlossaryTerm.php");
7 include_once("./Services/AdvancedMetaData/interfaces/interface.ilAdvancedMetaDataSubItems.php");
8 
21 {
22 
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 
225  function getSnippetLength()
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 
301  function isActiveDownloads()
302  {
303  return $this->downloads_active;
304  }
305 
309  function getStyleSheetId()
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 
338  function getShowTaxonomy()
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 
370  function getAutoGlossaries()
371  {
372  return $this->auto_glossaries;
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 
616  function createExportDirectory($a_type = "xml")
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 
958  $defs = ilGlossaryDefinition::getDefinitionList($term[id]);
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 ?>
static _createExportDirectory($a_obj_id, $a_export_type="xml", $a_obj_type="")
setStyleSheetId($a_style_id)
Set ID of assigned style sheet object.
read()
read data of content object
getAssignmentsOfItem($a_item_id)
Get assignments for item.
setAutoGlossaries($a_val)
Set auto glossaries.
static tf2yn($a_tf)
convert true/false to "y"/"n"
static _getMobsOfObject($a_type, $a_id, $a_usage_hist_nr=0, $a_lang="-")
get mobs of object
static getDefinitionList($a_term_id)
static
exportXMLGlossaryItems(&$a_xml_writer, $a_inst, &$expLog)
export page objects to xml (see ilias_co.dtd)
$style
Definition: example_012.php:70
Class ilGlossaryPresentationGUI.
Taxonomy node <-> item assignment.
static getUsageOfObject($a_obj_id, $a_include_titles=false)
Get usage of object.
getDescription()
get description of glossary object
removeOfflineGlossaries($a_glo_ids)
Remove offline glossaries from obj id array.
static getAdvMDSubItemTitle($a_obj_id, $a_sub_type, $a_sub_id)
setShowTaxonomy($a_val)
Set show taxonomy.
static rCopy($a_sdir, $a_tdir, $preserveTimeAttributes=false)
Copies content of a directory $a_sdir recursively to a directory $a_tdir.
HTML export class for pages.
setPresentationMode($a_val)
Set presentation mode.
static getStyleSheetLocation($mode="output", $a_css_name="", $a_css_location="")
get full style sheet file name (path inclusive) of current user
$_GET["client_id"]
Class ilGlossaryTerm.
Class ilObjGlossary.
static _getExportFiles($a_obj_id, $a_export_types="", $a_obj_type="")
Get Export Files for a repository object.
updateMetaData()
update meta data entry
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.
Class ilObject Basic functions for all objects.
exportHTML($a_target_dir, $log)
export html package
createMetaData()
create meta data entry
getPublicExportFile($a_type)
get public export file
setDescription($a_description)
set description of glossary object
setPublicExportFile($a_type, $a_file)
specify public export file for type
static lookupObjectStyle($a_obj_id)
Lookup object style.
createExportDirectory($a_type="xml")
Creates export directory.
global $tpl
Definition: ilias.php:8
setActiveGlossaryMenu($a_act_glo_menu)
static _lookupStandard($a_id)
Lookup standard flag.
getFirstLetters($a_tax_node=0)
Get term list.
getTitle()
get title of glossary object
static writeStyleUsage($a_obj_id, $a_style_id)
Write style usage.
$a_type
Definition: workflow.php:93
static autoLinkGlossariesPage($a_page, $a_terms)
Auto link glossary of whole page.
getExportDirectory($a_type="xml")
Get export directory of glossary.
exportXMLMetaData(&$a_xml_writer)
export content objects meta data to xml (see ilias_co.dtd)
getVirtualMode()
get glossary type (normal or virtual)
static _getInstance($a_copy_id)
Get instance of copy wizard options.
Interface for repository objects to use adv md with subitems.
setVirtualMode($a_mode)
set glossary type (virtual: fixed/level/subtree, normal:none)
createImportDirectory()
creates data directory for import files (data_dir/glo_data/glo_<id>/import, depending on data directo...
getId()
get object id public
static getImagePath($img, $module_path="", $mode="output", $offline=false)
get image path (for images located in a template directory)
cloneObject($a_target_id, $a_copy_id=0, $a_omit_tree=false)
Clone glossary.
exportXMLMediaObjects(&$a_xml_writer, $a_inst, $a_target_dir, &$expLog)
export media objects to xml (see ilias_co.dtd)
static getFirstLetters($a_glo_id, $a_tax_node=0)
Get all terms for given set of glossary ids.
getTaxonomyId()
Get taxonomy.
__construct($a_id=0, $a_call_by_reference=true)
Constructor public.
date( 'd-M-Y', $objPHPExcel->getProperties() ->getCreated())
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.
special template class to simplify handling of ITX/PEAR
static collectFileItems($a_page, $a_domdoc)
Get all file items that are used within the page.
exportXML(&$a_xml_writer, $a_inst, $a_target_dir, &$expLog)
export object to xml (see ilias_co.dtd)
Class ilObjFile.
getXMLZip()
Get zipped xml file for glossary.
updateAutoGlossaries()
Update auto glossaries.
$ilUser
Definition: imgupload.php:18
redirection script todo: (a better solution should control the processing via a xml file) ...
cloneMetaData($target_obj)
Copy meta data.
getPresentationMode()
Get presentation mode.
Class ilObjMediaObject.
static getSyntaxStylePath()
get syntax style path
getSnippetLength()
Get snippet length.
static zip($a_dir, $a_file, $compress_content=false)
zips given directory/file into given zip.file
getType()
get object type public
static _getFilesOfObject($a_type, $a_id, $a_usage_hist_nr=0, $a_usage_lang="-")
get all files of an object
Glossary definition page object.
const PURPOSE_EXPORT
Create styles array
The data for the language used.
static _lookupType($a_id, $a_reference=false)
lookup object type
getShowTaxonomy()
Get show taxonomy.
static makeDir($a_dir)
creates a new directory and inherits all filesystem permissions of the parent directory You may pass ...
getImportDirectory()
get import directory of glossary
getAutoGlossaries()
Get auto glossaries.
getAllGlossaryIds($a_include_offline_childs=false)
Get all glossary ids.
create($a_upload=false)
create glossary object
autoLinkGlossaryTerms($a_glo_id)
Auto link glossary terms.
removeAutoGlossary($a_glo_id)
Remove auto glossary.
static _copyTerm($a_term_id, $a_glossary_id)
Copy a term to a glossary.
exportHTMLMOB($a_target_dir, &$a_glo_gui, $a_mob_id)
export media object to html
static lookup($a_id, $a_property)
Lookup glossary property.
static getScormModulesForGlossary($a_glo_id)
Get SCORM modules that assign a certain glossary.
static getDataDir()
get data directory (outside webspace)
getStyleSheetId()
Get ID of assigned style sheet object.
$lm_set
static saveUsage($a_tax_id, $a_obj_id)
Save Usage.
static getInstance()
Singleton: get instance.
global $ilBench
Definition: ilias.php:18
global $ilDB
Class ilObjStyleSheet.
modifyExportIdentifier($a_tag, $a_param, $a_value)
getRefId()
get reference id public
exportFileItems($a_target_dir, &$expLog)
export files of file itmes
static _getExportDirectory($a_obj_id, $a_type="xml", $a_obj_type="", $a_entity="")
Get export directory for an repository object.
deleteMetaData()
delete meta data entry
isVirtual()
returns true if glossary type is virtual (any mode)
Add data(end) time
Method that wraps PHPs time in order to allow simulations with the workflow.
if(!file_exists("$old.txt")) if($old===$new) if(file_exists("$new.txt")) $file
Export class for content objects.
static getDeletionDependencies($a_obj_id)
Get deletion dependencies.
setTitle($a_title)
set title of glossary object
getExportFiles()
Get export files.
static yn2tf($a_yn)
convert "y"/"n" to true/false
setSnippetLength($a_val)
Set snippet length.
static delDir($a_dir, $a_clean_only=false)
removes a dir and all its content (subdirs and files) recursively
static getWebspaceDir($mode="filesystem")
get webspace directory
update()
Update object.
exportHTMLGlossaryTerms(&$a_glo_gui, $a_target_dir)
export glossary terms
static _lookGlossaryTerm($term_id)
get glossary term
static lookupAutoGlossaries($a_id)
Lookup auto glossaries.
static _lookupOnline($a_id)
check wether content object is online
static lookupSnippetLength($a_id)
Lookup snippet length.