ILIAS  release_5-3 Revision v5.3.23-19-g915713cf615
All Data Structures Namespaces Files Functions Variables Typedefs Modules Pages
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 {
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  {
384  return $this->auto_glossaries;
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();
427  parent::update();
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 
673  public function getPublicExportFile($a_type)
674  {
675  return $this->public_export_file[$a_type];
676  }
677 
681  public function exportHTML($a_target_dir, $log)
682  {
683  $tpl = $this->tpl;
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  {
880  $tpl = $this->tpl;
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 
969  $defs = ilGlossaryDefinition::getDefinitionList($term[id]);
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 }
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.
global $ilErr
Definition: raiseError.php:16
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
if(isset($_REQUEST['delete'])) $list
Definition: registry.php:41
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
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.
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.
global $DIC
Definition: saml.php:7
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
exportHTML($a_target_dir, $log)
export html package
autoLinkGlossaryTerms($a_glo_ref_id)
Auto link glossary terms.
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.
user()
Definition: user.php:4
createExportDirectory($a_type="xml")
Creates export directory.
setActiveGlossaryMenu($a_act_glo_menu)
static _lookupObjectId($a_ref_id)
lookup object id
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.
getAllGlossaryIds($a_include_offline_childs=false, $ids_are_ref_ids=false)
Get all glossary ids.
$a_type
Definition: workflow.php:92
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())
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)
getXMLZip()
Get zipped xml file for glossary.
updateAutoGlossaries()
Update auto glossaries.
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.
removeOfflineGlossaries($a_glo_ids, $ids_are_ref_ids=false)
Remove offline glossaries from obj id array.
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.
static getInstanceByObjId($a_obj_id, $stop_on_error=true)
get an instance of an Ilias object by object id
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.
update($pash, $contents, Config $config)
create($a_upload=false)
create glossary object
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.
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.
$def
Definition: croninfo.php:21
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
supportsLongTextQuery()
Is long text search supported.
static lookupAutoGlossaries($a_id)
Lookup auto glossaries.
static _lookupOnline($a_id)
check wether content object is online
static lookupSnippetLength($a_id)
Lookup snippet length.