ILIAS  release_6 Revision v6.24-5-g0c8bfefb3b8
class.ilContainerGUI.php
Go to the documentation of this file.
1<?php
2/* Copyright (c) 1998-2010 ILIAS open source, Extended GPL, see docs/LICENSE */
3
5
6require_once "./Services/Object/classes/class.ilObjectGUI.php";
7require_once "./Services/Container/classes/class.ilContainer.php";
8
22{
26 protected $rbacsystem;
27
31 protected $tabs;
32
36 protected $settings;
37
41 protected $user;
42
46 protected $db;
47
51 protected $access;
52
56 protected $error;
57
61 protected $obj_definition;
62
66 protected $rbacadmin;
67
71 protected $rbacreview;
72
76 protected $log;
77
81 protected $obj_data_cache;
82
86 protected $toolbar;
87
91 protected $plugin_admin;
95 protected $global_screen;
96
101
102 public $bl_cnt = 1; // block counter
104
108 protected $ui;
109
114
118 protected $container_user_filter = null;
119
123 protected $ui_filter;
124
129 public function __construct($a_data, $a_id, $a_call_by_reference = true, $a_prepare_output = true)
130 {
131 global $DIC;
132
133 $this->lng = $DIC->language();
134 $this->tpl = $DIC["tpl"];
135 $this->ctrl = $DIC->ctrl();
136 $this->tabs = $DIC->tabs();
137 $this->settings = $DIC->settings();
138 $this->user = $DIC->user();
139 $this->db = $DIC->database();
140 $this->access = $DIC->access();
141 $this->tree = $DIC->repositoryTree();
142 $this->error = $DIC["ilErr"];
143 $this->obj_definition = $DIC["objDefinition"];
144 $this->rbacadmin = $DIC->rbac()->admin();
145 $this->rbacreview = $DIC->rbac()->review();
146 $this->log = $DIC["ilLog"];
147 $this->obj_data_cache = $DIC["ilObjDataCache"];
148 $this->toolbar = $DIC->toolbar();
149 $this->plugin_admin = $DIC["ilPluginAdmin"];
150 $this->app_event_handler = $DIC["ilAppEventHandler"];
151 $this->ui = $DIC->ui();
152 $this->global_screen = $DIC->globalScreen();
153 $rbacsystem = $DIC->rbac()->system();
154 $lng = $DIC->language();
155
156 $this->rbacsystem = $rbacsystem;
157
158 $lng->loadLanguageModule("cntr");
159 $lng->loadLanguageModule('cont');
160
161 // prepare output things should generally be made in executeCommand
162 // method (maybe dependent on current class/command
163 parent::__construct($a_data, $a_id, $a_call_by_reference, false);
164
165 $this->container_filter_service = new ilContainerFilterService();
166 $this->initFilter();
167 }
168
173 public function executeCommand()
174 {
176
177 $next_class = $this->ctrl->getNextClass();
178 $cmd = $this->ctrl->getCmd("render");
179
180
181 switch ($next_class) {
182 // page editing
183 case "ilcontainerpagegui":
184 if ($_GET["redirectSource"] != "ilinternallinkgui") {
185 $ret = $this->forwardToPageObject();
186 $tpl->setContent($ret);
187 } else {
188 return "";
189 }
190 break;
191
192 case "ilobjstylesheetgui":
193 $this->forwardToStyleSheet();
194 break;
195
196 default:
197 $this->prepareOutput();
198 $cmd .= "Object";
199 $this->$cmd();
200 break;
201 }
202 return true;
203 }
204
210 protected function getEditFormValues()
211 {
212 $values = parent::getEditFormValues();
213
214 include_once './Services/DidacticTemplate/classes/class.ilDidacticTemplateObjSettings.php';
215 $values['didactic_type'] =
216 'dtpl_' . ilDidacticTemplateObjSettings::lookupTemplateId($this->object->getRefId());
217
218 return $values;
219 }
220
224 protected function afterUpdate()
225 {
226 // check if template is changed
227 include_once './Services/DidacticTemplate/classes/class.ilDidacticTemplateObjSettings.php';
229 $this->object->getRefId()
230 );
231 $new_tpl_id = (int) $this->getDidacticTemplateVar('dtpl');
232
233 if ($new_tpl_id != $current_tpl_id) {
234 $_REQUEST['tplid'] = $new_tpl_id;
235
236 // redirect to didactic template confirmation
237 include_once './Services/DidacticTemplate/classes/class.ilDidacticTemplateGUI.php';
238 $this->ctrl->setReturn($this, 'edit');
239 $this->ctrl->setCmdClass('ildidactictemplategui');
240 $this->ctrl->setCmd('confirmTemplateSwitch');
241 $dtpl_gui = new ilDidacticTemplateGUI($this);
242 return $this->ctrl->forwardCommand($dtpl_gui);
243 }
244 parent::afterUpdate();
245 }
246
247
251 public function forwardToStyleSheet()
252 {
254 $ilTabs = $this->tabs;
255
256 $ilTabs->clearTargets();
257
258 $cmd = $ilCtrl->getCmd();
259 include_once("./Services/Style/Content/classes/class.ilObjStyleSheetGUI.php");
260 $this->ctrl->setReturn($this, "editStyleProperties");
261 $style_gui = new ilObjStyleSheetGUI("", $this->object->getStyleSheetId(), false, false);
262 $style_gui->omitLocator();
263 if ($cmd == "create" || $_GET["new_type"] == "sty") {
264 $style_gui->setCreationMode(true);
265 }
266
267 if ($cmd == "confirmedDelete") {
268 $this->object->setStyleSheetId(0);
269 $this->object->update();
270 }
271
272 $ret = $this->ctrl->forwardCommand($style_gui);
273
274 if ($cmd == "save" || $cmd == "copyStyle" || $cmd == "importStyle") {
275 $style_id = $ret;
276 $this->object->setStyleSheetId($style_id);
277 $this->object->update();
278 $this->ctrl->redirectByClass("ilobjstylesheetgui", "edit");
279 }
280 }
281
282
286 public function &forwardToPageObject()
287 {
289 $ilTabs = $this->tabs;
291
292 $cmd = $ilCtrl->getCmd();
293
294 if (in_array($cmd, array("displayMediaFullscreen", "downloadFile", "displayMedia"))) {
295 $this->checkPermission("read");
296 } else {
297 $this->checkPermission("write");
298 }
299
300 $ilTabs->clearTargets();
301
302 if ($_GET["redirectSource"] == "ilinternallinkgui") {
303 exit;
304 }
305
307 $this->object->getId(),
308 "xhtml_page"
309 );
310 if ($xpage_id > 0) {
311 $ilTabs->setBackTarget(
312 $lng->txt("cntr_back_to_old_editor"),
313 $ilCtrl->getLinkTarget($this, "switchToOldEditor"),
314 "_top"
315 );
316 } else {
317 $ilTabs->setBackTarget($lng->txt("back"), "./goto.php?target=" . $this->object->getType() . "_" .
318 $this->object->getRefId(), "_top");
319 }
320
321 // page object
322 include_once("./Services/Container/classes/class.ilContainerPage.php");
323 include_once("./Services/Container/classes/class.ilContainerPageGUI.php");
324
325 $lng->loadLanguageModule("content");
326
327 include_once("./Services/Style/Content/classes/class.ilObjStyleSheet.php");
328 $this->tpl->addCss(ilObjStyleSheet::getContentStylePath($this->object->getStyleSheetId()));
329 // $this->tpl->setCurrentBlock("SyntaxStyle");
330 $this->tpl->addCss(ilObjStyleSheet::getSyntaxStylePath());
331 // $this->tpl->parseCurrentBlock();
332
334 "cont",
335 $this->object->getId()
336 )) {
337 // doesn't exist -> create new one
338 $new_page_object = new ilContainerPage();
339 $new_page_object->setParentId($this->object->getId());
340 $new_page_object->setId($this->object->getId());
341 $new_page_object->createFromXML();
342 }
343
344 // get page object
345 $this->ctrl->setReturnByClass("ilcontainerpagegui", "edit");
346 $page_gui = new ilContainerPageGUI($this->object->getId());
347 include_once("./Services/Style/Content/classes/class.ilObjStyleSheet.php");
349 $this->object->getStyleSheetId(),
350 $this->object->getType()
351 ));
352
353 $page_gui->setTemplateTargetVar("ADM_CONTENT");
354 $page_gui->setFileDownloadLink("");
355 //$page_gui->setLinkParams($this->ctrl->getUrlParameterString()); // todo
356 $page_gui->setPresentationTitle("");
357 $page_gui->setTemplateOutput(false);
358
359 // old editor information text
361 $this->object->getId(),
362 "xhtml_page"
363 );
364 if ($xpage_id > 0) {
365 $wtpl = new ilTemplate(
366 "tpl.cntr_old_editor_message.html",
367 true,
368 true,
369 "Services/Container"
370 );
371 $wtpl->setVariable("ALT_WARNING", $lng->txt("warning"));
372 $wtpl->setVariable(
373 "IMG_WARNING",
374 ilUtil::getImagePath("icon_alert.svg")
375 );
376 $wtpl->setVariable("TXT_MIGRATION_INFO", $lng->txt("cntr_switch_to_new_editor_message"));
377 $wtpl->setVariable("TXT_MIGRATION_INFO", $lng->txt("cntr_switch_to_new_editor_message"));
378 $wtpl->setVariable(
379 "HREF_SWITCH_TO_NEW_EDITOR",
380 $ilCtrl->getLinkTarget($this, "useNewEditor")
381 );
382 $wtpl->setVariable(
383 "TXT_MIGRATION_SWITCH",
384 $lng->txt("cntr_switch_to_new_editor_cmd")
385 );
386 $page_gui->setPrependingHtml($wtpl->get());
387 }
388
389 // style tab
390 $page_gui->setTabHook($this, "addPageTabs");
391
392 $ret = $this->ctrl->forwardCommand($page_gui);
393
394 //$ret =& $page_gui->executeCommand();
395 return $ret;
396 }
397
401 public function addPageTabs()
402 {
403 $ilTabs = $this->tabs;
405
406 $ilTabs->addTarget(
407 "obj_sty",
408 $ilCtrl->getLinkTarget($this, 'editStyleProperties'),
409 "editStyleProperties"
410 );
411 }
412
416 public function getContainerPageHTML()
417 {
420
421 if (!$ilSetting->get("enable_cat_page_edit") || $this->object->filteredSubtree()) {
422 return;
423 }
424
425 // old page editor content
427 $this->object->getId(),
428 "xhtml_page"
429 );
430 if ($xpage_id > 0) {
431 include_once("Services/XHTMLPage/classes/class.ilXHTMLPage.php");
432 $xpage = new ilXHTMLPage($xpage_id);
433 return $xpage->getContent();
434 }
435
436
437 // page object
438
439
440 // if page does not exist, return nothing
441 include_once("./Services/COPage/classes/class.ilPageUtil.php");
443 "cont",
444 $this->object->getId()
445 )) {
446 return "";
447 }
448 include_once("./Services/Container/classes/class.ilContainerPage.php");
449 include_once("./Services/Container/classes/class.ilContainerPageGUI.php");
450
451 include_once("./Services/Style/Content/classes/class.ilObjStyleSheet.php");
452 $this->tpl->setVariable(
453 "LOCATION_CONTENT_STYLESHEET",
454 ilObjStyleSheet::getContentStylePath($this->object->getStyleSheetId())
455 );
456 $this->tpl->setCurrentBlock("SyntaxStyle");
457 $this->tpl->setVariable(
458 "LOCATION_SYNTAX_STYLESHEET",
460 );
461 $this->tpl->parseCurrentBlock();
462
463 // get page object
464 include_once("./Services/Object/classes/class.ilObjectTranslation.php");
465 $ot = ilObjectTranslation::getInstance($this->object->getId());
466 $lang = $ot->getEffectiveContentLang($ilUser->getCurrentLanguage(), "cont");
467 $page_gui = new ilContainerPageGUI($this->object->getId(), 0, $lang);
468 include_once("./Services/Style/Content/classes/class.ilObjStyleSheet.php");
470 $this->object->getStyleSheetId(),
471 $this->object->getType()
472 ));
473
474 $page_gui->setPresentationTitle("");
475 $page_gui->setTemplateOutput(false);
476 $page_gui->setHeader("");
477 $ret = $page_gui->showPage();
478
479 //$ret = "<div style='background-color: white; padding:5px; margin-bottom: 30px;'>".$ret."</div>";
480
481 //$ret =& $page_gui->executeCommand();
482 return $ret;
483 }
484
488 public function prepareOutput($a_show_subobjects = true)
489 {
490 if (parent::prepareOutput($a_show_subobjects)) { // return false in admin mode
491 if ($this->getCreationMode() != true && $a_show_subobjects) {
492 // This method is called directly from ilContainerGUI::renderObject
493 #$this->showPossibleSubObjects();
494 $this->showTreeFlatIcon();
495
496 // Member view
497 include_once './Services/Container/classes/class.ilMemberViewGUI.php';
498 ilMemberViewGUI::showMemberViewSwitch($this->object->getRefId());
499 }
500 }
501 }
502
503 public function showTreeFlatIcon()
504 {
506
507 // dont show icon, if role (permission gui->rolegui) is edited
508 if ($_GET["obj_id"] != "") {
509 return;
510 }
511 // hide for member view
512 include_once './Services/Container/classes/class.ilMemberViewSettings.php';
513 if (ilMemberViewSettings::getInstance()->isActive()) {
514 return;
515 }
516
517 $mode = ($_SESSION["il_rep_mode"] == "flat")
518 ? "tree"
519 : "flat";
520 $link = "ilias.php?baseClass=ilRepositoryGUI&amp;cmd=frameset&amp;set_mode=" . $mode . "&amp;ref_id=" . $this->object->getRefId();
521 $tpl->setTreeFlatIcon($link, $mode);
522 }
523
527 public function setTitleAndDescription()
528 {
529 if (ilContainer::_lookupContainerSetting($this->object->getId(), "hide_header_icon_and_title")) {
530 $this->tpl->setTitle((string) $this->object->getTitle(), true);
531 } else {
532 $this->tpl->setTitle((string) $this->object->getTitle());
533 $this->tpl->setDescription($this->object->getLongDescription());
534
535 // set tile icon
536 $icon = ilObject::_getIcon($this->object->getId(), "big", $this->object->getType());
537 $this->tpl->setTitleIcon($icon, $this->lng->txt("obj_" . $this->object->getType()));
538
539 include_once './Services/Object/classes/class.ilObjectListGUIFactory.php';
540 $lgui = ilObjectListGUIFactory::_getListGUIByType($this->object->getType());
541 $lgui->initItem($this->object->getRefId(), $this->object->getId(), $this->object->getType());
542 $this->tpl->setAlertProperties($lgui->getAlertProperties());
543 }
544 }
545
549 public function showPossibleSubObjects()
550 {
551 include_once "Services/Object/classes/class.ilObjectAddNewItemGUI.php";
552 $gui = new ilObjectAddNewItemGUI($this->object->getRefId());
553 $gui->render();
554 }
555
562 public function getContentGUI()
563 {
564 $view_mode = $this->object->getViewMode();
565 if ($this->object->filteredSubtree()) {
566 $view_mode = ilContainer::VIEW_SIMPLE;
567 }
568 switch ($view_mode) {
569 // all items in one block
571 include_once("./Services/Container/classes/class.ilContainerSimpleContentGUI.php");
572 $container_view = new ilContainerSimpleContentGUI($this);
573 break;
574
576 include_once('./Services/Container/classes/class.ilContainerObjectiveGUI.php');
577 $container_view = new ilContainerObjectiveGUI($this);
578 break;
579
580 // all items in one block
582 case ilCourseConstants::IL_CRS_VIEW_TIMING: // not nice this workaround
583 include_once("./Services/Container/classes/class.ilContainerSessionsContentGUI.php");
584 $container_view = new ilContainerSessionsContentGUI($this);
585 break;
586
587 // all items in one block
589 default:
590 include_once("./Services/Container/classes/class.ilContainerByTypeContentGUI.php");
591 $container_view = new ilContainerByTypeContentGUI($this, $this->container_user_filter);
592 break;
593 }
594 return $container_view;
595 }
596
597
598
602 public function renderObject()
603 {
606 $ilTabs = $this->tabs;
609
610 $container_view = $this->getContentGUI();
611
612 $this->setContentSubTabs();
613 if ($this->isActiveAdministrationPanel()) {
614 $ilTabs->activateSubTab("manage");
615 } else {
616 $ilTabs->activateSubTab("view_content");
617 }
618
619 $container_view->setOutput();
620
621 $this->adminCommands = $container_view->adminCommands;
622
623 // it is important not to show the subobjects/admin panel here, since
624 // we will create nested forms in case, e.g. a news/calendar item is added
625 if ($ilCtrl->getNextClass() != "ilcolumngui") {
627 $this->showPossibleSubObjects();
628 }
629
630 $this->showContainerFilter();
631
632 $this->showPermanentLink();
633
634 // add tree updater javascript
635 if ((int) $_GET["ref_id"] > 1 && $ilSetting->get("rep_tree_synchronize")) {
636 $ilCtrl->setParameter($this, "active_node", (int) $_GET["ref_id"]);
637 }
638 }
639
643 public function renderBlockAsynchObject()
644 {
645 $container_view = $this->getContentGUI();
646 echo $container_view->getSingleTypeBlockAsynch($_GET["type"]);
647 exit;
648 }
649
650
654 public function setContentSubTabs()
655 {
657 }
658
662 public function showAdministrationPanel()
663 {
664 global $DIC;
665
666 $ilAccess = $this->access;
668
669 $main_tpl = $DIC->ui()->mainTemplate();
670
671 $lng->loadLanguageModule('cntr');
672
673 if ($_SESSION["clipboard"]) {
674 // #11545
675 $main_tpl->setPageFormAction($this->ctrl->getFormAction($this));
676
677 include_once './Services/UIComponent/Toolbar/classes/class.ilToolbarGUI.php';
678 $toolbar = new ilToolbarGUI();
679 $this->ctrl->setParameter($this, "type", "");
680 $this->ctrl->setParameter($this, "item_ref_id", "");
681
682 $toolbar->addFormButton(
683 $this->lng->txt('paste_clipboard_items'),
684 'paste'
685 );
686
687 $toolbar->addFormButton(
688 $this->lng->txt('clear_clipboard'),
689 'clear'
690 );
691
692 $main_tpl->addAdminPanelToolbar($toolbar, true, false);
693 } elseif ($this->isActiveAdministrationPanel()) {
694 // #11545
695 $main_tpl->setPageFormAction($this->ctrl->getFormAction($this));
696
697 include_once './Services/UIComponent/Toolbar/classes/class.ilToolbarGUI.php';
698 $toolbar = new ilToolbarGUI();
699 $this->ctrl->setParameter($this, "type", "");
700 $this->ctrl->setParameter($this, "item_ref_id", "");
701
702 // if (!$_SESSION["clipboard"])
703 // {
704 if ($this->object->gotItems()) {
705 $toolbar->setLeadingImage(
706 ilUtil::getImagePath("arrow_upright.svg"),
707 $lng->txt("actions")
708 );
709 $toolbar->addFormButton(
710 $this->lng->txt('delete_selected_items'),
711 'delete'
712 );
713 $toolbar->addFormButton(
714 $this->lng->txt('move_selected_items'),
715 'cut'
716 );
717 $toolbar->addFormButton(
718 $this->lng->txt('copy_selected_items'),
719 'copy'
720 );
721 $toolbar->addFormButton(
722 $this->lng->txt('link_selected_items'),
723 'link'
724 );
725 // add download button if multi download enabled
726 $folder_set = new ilSetting('fold');
727 if ((bool) $folder_set->get('enable_multi_download') === true) {
728 $toolbar->addSeparator();
729 $toolbar->addFormButton(
730 $this->lng->txt('download_selected_items'),
731 'download'
732 );
733 }
734 }
735 if ($this->object->getType() == 'crs' or $this->object->getType() == 'grp') {
736 if ($this->object->gotItems()) {
737 $toolbar->addSeparator();
738 }
739
740 $toolbar->addButton(
741 $this->lng->txt('cntr_adopt_content'),
742 $this->ctrl->getLinkTargetByClass(
743 'ilObjectCopyGUI',
744 'adoptContent'
745 )
746 );
747 }
748 // }
749 /*else
750 {
751
752 if ($this->isMultiDownloadEnabled())
753 {
754 $toolbar->addSeparator();
755 $toolbar->addFormButton(
756 $this->lng->txt('download_selected_items'),
757 'download'
758 );
759 }
760 }*/
761
762 $main_tpl->addAdminPanelToolbar(
763 $toolbar,
764 ($this->object->gotItems() && !$_SESSION["clipboard"]) ? true : false,
765 ($this->object->gotItems() && !$_SESSION["clipboard"]) ? true : false
766 );
767
768 // form action needed, see http://www.ilias.de/mantis/view.php?id=9630
769 if ($this->object->gotItems()) {
770 $main_tpl->setPageFormAction($this->ctrl->getFormAction($this));
771 }
772 } else {
773 if ($this->edit_order) {
774 if ($this->object->gotItems() and $ilAccess->checkAccess("write", "", $this->object->getRefId())) {
775 include_once('./Services/Container/classes/class.ilContainer.php');
776
777 if ($this->isActiveOrdering()) {
778 // #11843
779 $main_tpl->setPageFormAction($this->ctrl->getFormAction($this));
780
781 include_once './Services/UIComponent/Toolbar/classes/class.ilToolbarGUI.php';
782 $toolbar = new ilToolbarGUI();
783 $this->ctrl->setParameter($this, "type", "");
784 $this->ctrl->setParameter($this, "item_ref_id", "");
785
786 $toolbar->addFormButton(
787 $this->lng->txt('sorting_save'),
788 'saveSorting'
789 );
790
791 $main_tpl->addAdminPanelToolbar($toolbar, true, false);
792 }
793 }
794 }
795
796 // bugfix mantis 24559
797 // undoing an erroneous change inside mantis 23516 by adding "Download Multiple Objects"-functionality for non-admins
798 // as they don't have the possibility to use the multi-download-capability of the manage-tab
799 elseif ($this->isMultiDownloadEnabled()) {
800 // bugfix mantis 0021272
801 $ref_id = $_GET['ref_id'];
802 $num_files = $this->tree->getChildsByType($ref_id, "file");
803 $num_folders = $this->tree->getChildsByType($ref_id, "fold");
804 if (count($num_files) > 0 or count($num_folders) > 0) {
805 // #11843
806 $GLOBALS['tpl']->setPageFormAction($this->ctrl->getFormAction($this));
807
808 include_once './Services/UIComponent/Toolbar/classes/class.ilToolbarGUI.php';
809 $toolbar = new ilToolbarGUI();
810 $this->ctrl->setParameter($this, "type", "");
811 $this->ctrl->setParameter($this, "item_ref_id", "");
812
813 $toolbar->addFormButton(
814 $this->lng->txt('download_selected_items'),
815 'download'
816 );
817
818 $GLOBALS['tpl']->addAdminPanelToolbar(
819 $toolbar,
820 $this->object->gotItems() ? true : false,
821 $this->object->gotItems() ? true : false
822 );
823 } else {
824 ilUtil::sendInfo($this->lng->txt('msg_no_downloadable_objects'), true);
825 }
826 }
827 }
828 }
829
830 public function __showTimingsButton(&$tpl)
831 {
833
834 if (!$tree->checkForParentType($this->object->getRefId(), 'crs')) {
835 return false;
836 }
837 $tpl->setCurrentBlock("custom_button");
838 $tpl->setVariable("ADMIN_MODE_LINK", $this->ctrl->getLinkTargetByClass('ilcoursecontentgui', 'editTimings'));
839 $tpl->setVariable("TXT_ADMIN_MODE", $this->lng->txt('timings_edit'));
840 $tpl->parseCurrentBlock();
841 return true;
842 }
846 public function showPermanentLink()
847 {
848 global $DIC;
849
850 $tpl = $DIC->ui()->mainTemplate();
851
852 $tpl->setPermanentLink(
853 $this->object->getType(),
854 $this->object->getRefId(),
855 "",
856 "_top"
857 );
858 }
859
863 public function switchToStdEditorObject()
864 {
866
867 $_SESSION["il_cntr_editor"] = "std";
868 $ilCtrl->redirect($this, "editPageFrame");
869 }
870
874 public function switchToOldEditorObject()
875 {
877
878 $_SESSION["il_cntr_editor"] = "old";
879 $ilCtrl->redirect($this, "editPageFrame");
880 }
881
885 public function useNewEditorObject()
886 {
888 $ilAccess = $this->access;
891
892 if ($ilAccess->checkAccess("write", "", $this->object->getRefId())) {
893 include_once("./Services/XHTMLPage/classes/class.ilXHTMLPage.php");
894
895 /* keep old page content for now...
896 $xpage_id = ilContainer::_lookupContainerSetting($this->object->getId(),
897 "xhtml_page");
898 if ($xpage_id)
899 {
900 $xpage = new ilXHTMLPage($xpage_id);
901 }
902 */
903
905 $this->object->getId(),
906 "xhtml_page",
907 0
908 );
909
910 ilUtil::sendSuccess($lng->txt("cntr_switched_editor"), true);
911 }
912
913 $ilCtrl->redirect($this, "editPageFrame");
914 }
915
919 public function editPageFrameObject()
920 {
921 // old tiny stuff
923 $this->object->getId(),
924 "xhtml_page"
925 );
926 if ($xpage_id > 0 && $_SESSION["il_cntr_editor"] != "std") {
927 $this->ctrl->redirect($this, "editPageContent");
928 } else {
929 $this->ctrl->redirectByClass(array("ilcontainerpagegui"), "edit");
930 }
931 }
932
938 public function editPageContentObject()
939 {
945
946 if (!$rbacsystem->checkAccess("write", $this->ref_id)) {
947 $ilErr->raiseError($this->lng->txt("msg_no_perm_write"), $ilErr->MESSAGE);
948 }
949
951 $this->object->getId(),
952 "xhtml_page"
953 );
954 if ($xpage_id > 0) {
955 include_once("Services/XHTMLPage/classes/class.ilXHTMLPage.php");
956 $xpage = new ilXHTMLPage($xpage_id);
957 $content = $xpage->getContent();
958 }
959
960 // get template
961 $tpl->addBlockFile(
962 "ADM_CONTENT",
963 "adm_content",
964 "tpl.container_edit_page_content.html",
965 "Services/Container"
966 );
967 $tpl->setVariable("VAL_CONTENT", ilUtil::prepareFormOutput($content));
968 $tpl->setVariable("FORMACTION", $this->ctrl->getFormAction($this));
969 $tpl->setVariable(
970 "TXT_EDIT_PAGE_CONTENT",
971 $this->lng->txt("edit_page_content")
972 );
973 $tpl->setVariable("TXT_SAVE", $this->lng->txt("save"));
974 $tpl->setVariable("TXT_CANCEL", $this->lng->txt("cancel"));
975 $tpl->setVariable("TXT_MIGRATION_INFO", $lng->txt("cntr_old_editor_warning"));
976 $tpl->setVariable("TXT_MIGRATION_OPEN_STD_EDITOR", $lng->txt("cntr_old_editor_open_standard_editor"));
977 $tpl->setVariable("IMG_WARNING", ilUtil::getImagePath("icon_alert.svg"));
978 $tpl->setVariable("HREF_OPEN_STD_EDITOR", $ilCtrl->getLinkTarget($this, "switchToStdEditor"));
979 $tpl->setVariable("ALT_WARNING", $lng->txt("warning"));
980
981 include_once("./Services/Form/classes/class.ilFormPropertyGUI.php");
982 include_once("./Services/Form/classes/class.ilTextAreaInputGUI.php");
983 //$ta = new ilTextAreaInputGUI();
984 //$tags = $ta->getRteTagSet("extended_table_img");
985
986 // add rte support
987 include_once "./Services/RTE/classes/class.ilRTE.php";
988 $rtestring = ilRTE::_getRTEClassname();
989 include_once "./Services/RTE/classes/class.$rtestring.php";
990 $rte = new $rtestring();
991 //$rte->addPlugin("latex");
992 include_once "./Services/Object/classes/class.ilObject.php";
994 $obj_type = ilObject::_lookupType($_GET["ref_id"], true);
995 $rte->addRTESupport($obj_id, $obj_type);
996 //$rte->setStyleSelect(true);
997 //$rte->addCustomRTESupport($obj_id, $obj_type, $tags);
998 }
999
1000 public function savePageContentObject()
1001 {
1002 include_once("Services/XHTMLPage/classes/class.ilXHTMLPage.php");
1003 include_once "./Services/AdvancedEditing/classes/class.ilObjAdvancedEditing.php";
1005 $this->object->getId(),
1006 "xhtml_page"
1007 );
1008
1009 /*include_once("./Services/Form/classes/class.ilFormPropertyGUI.php");
1010 include_once("./Services/Form/classes/class.ilTextAreaInputGUI.php");
1011 $ta = new ilTextAreaInputGUI();
1012 $ta->setRteTagSet("extended_table_img");
1013 $tags = $ta->getRteTagString();*/
1014
1015 //$text = ilUtil::stripSlashes($_POST["page_content"],
1016 // true,
1017 // $tags);
1018
1019 $text = ilUtil::stripSlashes(
1020 $_POST["page_content"],
1021 true,
1023 );
1024 if ($xpage_id > 0) {
1025 $xpage = new ilXHTMLPage($xpage_id);
1026 $xpage->setContent($text);
1027 $xpage->save();
1028 } else {
1029 $xpage = new ilXHTMLPage();
1030 $xpage->setContent($text);
1031 $xpage->save();
1033 $this->object->getId(),
1034 "xhtml_page",
1035 $xpage->getId()
1036 );
1037 }
1038
1039 include_once("Services/RTE/classes/class.ilRTE.php");
1041 $text,
1042 $this->object->getType() . ":html",
1043 $this->object->getId()
1044 );
1045
1046 ilUtil::sendSuccess($this->lng->txt("msg_obj_modified"), true);
1047 $this->ctrl->redirect($this, "");
1048 }
1049
1050 public function cancelPageContentObject()
1051 {
1052 $this->ctrl->redirect($this, "");
1053 }
1054
1055 public function showLinkListObject()
1056 {
1057 $lng = $this->lng;
1059
1060 $tpl = new ilGlobalTemplate(
1061 "tpl.container_link_help.html",
1062 true,
1063 true,
1064 "Services/Container"
1065 );
1066
1067 $type_ordering = array(
1068 "cat", "fold", "crs", "grp", "chat", "frm", "lres",
1069 "glo", "webr", "file", "exc",
1070 "tst", "svy", "mep", "qpl", "spl");
1071
1072 $childs = $tree->getChilds($_GET["ref_id"]);
1073 foreach ($childs as $child) {
1074 if (in_array($child["type"], array("lm", "sahs", "htlm"))) {
1075 $cnt["lres"]++;
1076 } else {
1077 $cnt[$child["type"]]++;
1078 }
1079 }
1080
1081 $tpl->setVariable("LOCATION_STYLESHEET", ilUtil::getStyleSheetLocation());
1082 $tpl->setVariable("TXT_HELP_HEADER", $lng->txt("help"));
1083 foreach ($type_ordering as $type) {
1084 $tpl->setCurrentBlock("row");
1085 $tpl->setVariable("ROWCOL", "tblrow" . ((($i++) % 2) + 1));
1086 if ($type != "lres") {
1087 $tpl->setVariable("TYPE", $lng->txt("objs_" . $type) .
1088 " (" . ((int) $cnt[$type]) . ")");
1089 } else {
1090 $tpl->setVariable("TYPE", $lng->txt("obj_lrss") .
1091 " (" . ((int) $cnt["lres"]) . ")");
1092 }
1093 $tpl->setVariable("TXT_LINK", "[list-" . $type . "]");
1094 $tpl->parseCurrentBlock();
1095 }
1096 $tpl->printToStdout();
1097 exit;
1098 }
1099
1104 {
1105 $this->adminCommands = false;
1106 }
1107
1111 /* function determineAdminCommands($a_ref_id, $a_admin_com_included_in_list = false)
1112 {
1113 if (!$this->adminCommands)
1114 {
1115 if (!$this->isActiveAdministrationPanel())
1116 {
1117 if ($this->rbacsystem->checkAccess("delete", $a_ref_id))
1118 {
1119 $this->adminCommands = true;
1120 }
1121 }
1122 else
1123 {
1124 $this->adminCommands = $a_admin_com_included_in_list;
1125 }
1126 }
1127 }*/
1128
1135 public function &newBlockTemplate()
1136 {
1137 $tpl = new ilTemplate(
1138 "tpl.container_list_block.html",
1139 true,
1140 true,
1141 "Services/Container"
1142 );
1143 $this->cur_row_type = "row_type_1";
1144 return $tpl;
1145 }
1146
1154 public function addHeaderRow(&$a_tpl, $a_type, $a_show_image = true)
1155 {
1156 $icon = ilUtil::getImagePath("icon_" . $a_type . ".svg");
1157 $title = $this->lng->txt("objs_" . $a_type);
1158
1159 if ($a_show_image) {
1160 $a_tpl->setCurrentBlock("container_header_row_image");
1161 $a_tpl->setVariable("HEADER_IMG", $icon);
1162 $a_tpl->setVariable("HEADER_ALT", $title);
1163 } else {
1164 $a_tpl->setCurrentBlock("container_header_row");
1165 }
1166
1167 $a_tpl->setVariable("BLOCK_HEADER_CONTENT", $title);
1168 $a_tpl->parseCurrentBlock();
1169 //$a_tpl->touchBlock("container_row");
1170 }
1171
1179 public function addStandardRow(
1180 &$a_tpl,
1181 $a_html,
1182 $a_item_ref_id = "",
1183 $a_item_obj_id = "",
1184 $a_image_type = ""
1185 ) {
1187
1188 $this->cur_row_type = ($this->cur_row_type == "row_type_1")
1189 ? "row_type_2"
1190 : "row_type_1";
1191
1192 $a_tpl->touchBlock($this->cur_row_type);
1193
1194 $nbsp = true;
1195 if ($ilSetting->get("icon_position_in_lists") == "item_rows") {
1196 $icon = ilUtil::getImagePath("icon_" . $a_image_type . ".svg");
1197 $alt = $this->lng->txt("obj_" . $a_image_type);
1198
1199 if ($ilSetting->get('custom_icons')) {
1200 global $DIC;
1202 $customIconFactory = $DIC['object.customicons.factory'];
1203 $customIcon = $customIconFactory->getPresenterByObjId($a_item_obj_id, $a_image_type);
1204
1205 if ($customIcon->exists()) {
1206 $icon = $customIcon->getFullPath();
1207 }
1208 }
1209
1210 $a_tpl->setCurrentBlock("block_row_image");
1211 $a_tpl->setVariable("ROW_IMG", $icon);
1212 $a_tpl->setVariable("ROW_ALT", $alt);
1213 $a_tpl->parseCurrentBlock();
1214 $nbsp = false;
1215 }
1216
1217 if ($this->isActiveAdministrationPanel()) {
1218 $a_tpl->setCurrentBlock("block_row_check");
1219 $a_tpl->setVariable("ITEM_ID", $a_item_ref_id);
1220 $a_tpl->parseCurrentBlock();
1221 $nbsp = false;
1222 }
1223 include_once('Services/Container/classes/class.ilContainerSortingSettings.php');
1224 if ($this->isActiveAdministrationPanel() &&
1226 $a_tpl->setCurrentBlock('block_position');
1227 $a_tpl->setVariable('POS_TYPE', $a_image_type);
1228 $a_tpl->setVariable('POS_ID', $a_item_ref_id);
1229 $a_tpl->setVariable('POSITION', sprintf('%.1f', $this->current_position++));
1230 $a_tpl->parseCurrentBlock();
1231 }
1232 if ($nbsp) {
1233 $a_tpl->setVariable("ROW_NBSP", "&nbsp;");
1234 }
1235 $a_tpl->setCurrentBlock("container_standard_row");
1236 $a_tpl->setVariable("BLOCK_ROW_CONTENT", $a_html);
1237 $a_tpl->parseCurrentBlock();
1238 $a_tpl->touchBlock("container_row");
1239 }
1240
1244 public function addMessageRow(&$a_tpl, $a_message, $a_type)
1245 {
1246 $this->cur_row_type = ($this->cur_row_type == "row_type_1")
1247 ? "row_type_2"
1248 : "row_type_1";
1249
1250 $a_tpl->touchBlock($this->cur_row_type);
1251
1252 $type = $this->lng->txt("obj_" . $a_type);
1253 $a_message = str_replace("[type]", $type, $a_message);
1254
1255 $a_tpl->setVariable("ROW_NBSP", "&nbsp;");
1256
1257 $a_tpl->setCurrentBlock("container_standard_row");
1258 $a_tpl->setVariable(
1259 "BLOCK_ROW_CONTENT",
1260 $a_message
1261 );
1262 $a_tpl->parseCurrentBlock();
1263 $a_tpl->touchBlock("container_row");
1264 }
1265
1266 public function resetRowType()
1267 {
1268 $this->cur_row_type = "";
1269 }
1270
1271
1275 public function setPageEditorTabs()
1276 {
1277 $lng = $this->lng;
1278
1279 if (!$this->isActiveAdministrationPanel()
1280 || strtolower($this->ctrl->getCmdClass()) != "ilcontainerpagegui") {
1281 return;
1282 }
1283
1284 $lng->loadLanguageModule("content");
1285 //$tabs_gui = new ilTabsGUI();
1286 //$tabs_gui->setSubTabs();
1287
1288 // back to upper context
1289 $this->tabs_gui->setBackTarget(
1290 $this->lng->txt("obj_cat"),
1291 $this->ctrl->getLinkTarget($this, "frameset"),
1292 ilFrameTargetInfo::_getFrame("MainContent")
1293 );
1294
1295 $this->tabs_gui->addTarget("edit", $this->ctrl->getLinkTargetByClass("ilcontainerpagegui", "view"), array("", "view"), "ilcontainerpagegui");
1296
1297 //$this->tpl->setTabs($tabs_gui->getHTML());
1298 }
1299
1303 public function addStandardContainerSubTabs($a_include_view = true)
1304 {
1305 $ilTabs = $this->tabs;
1306 $ilAccess = $this->access;
1307 $lng = $this->lng;
1311
1312 if (!is_object($this->object)) {
1313 return;
1314 }
1315
1316 if ($a_include_view && $this->rbacsystem->checkAccess("visible,read", $this->object->getRefId())) {
1317 if (!$this->isActiveAdministrationPanel()) {
1318 $ilTabs->addSubTab("view_content", $lng->txt("view"), $ilCtrl->getLinkTarget($this, "view"));
1319 } else {
1320 $ilTabs->addSubTab("view_content", $lng->txt("view"), $ilCtrl->getLinkTarget($this, "disableAdministrationPanel"));
1321 }
1322 }
1323
1324 if ($ilUser->getId() != ANONYMOUS_USER_ID &&
1325 (
1326 $this->adminCommands ||
1327 (is_object($this->object) &&
1328 ($this->rbacsystem->checkAccess("write", $this->object->getRefId())))
1329 ||
1330 (is_object($this->object) &&
1331 ($this->object->getHiddenFilesFound())) ||
1332 $_SESSION["clipboard"]
1333 )
1334 ) {
1335 if ($this->isActiveAdministrationPanel()) {
1336 $ilTabs->addSubTab("manage", $lng->txt("cntr_manage"), $ilCtrl->getLinkTarget($this, ""));
1337 } else {
1338 $ilTabs->addSubTab("manage", $lng->txt("cntr_manage"), $ilCtrl->getLinkTarget($this, "enableAdministrationPanel"));
1339 }
1340 }
1341 if ($ilUser->getId() != ANONYMOUS_USER_ID &&
1342 is_object($this->object) &&
1343 $this->rbacsystem->checkAccess("write", $this->object->getRefId()) /* &&
1344 $this->object->getOrderType() == ilContainer::SORT_MANUAL */ // always on because of custom block order
1345 ) {
1346 $ilTabs->addSubTab("ordering", $lng->txt("cntr_ordering"), $ilCtrl->getLinkTarget($this, "editOrder"));
1347 }
1348 if ($ilUser->getId() != ANONYMOUS_USER_ID &&
1349 is_object($this->object) &&
1350 $this->rbacsystem->checkAccess("write", $this->object->getRefId())
1351 ) {
1352 if ($ilSetting->get("enable_cat_page_edit")) {
1353 $ilTabs->addSubTab(
1354 "page_editor",
1355 $lng->txt("cntr_text_media_editor"),
1356 $ilCtrl->getLinkTarget($this, "editPageFrame"),
1357 ilFrameTargetInfo::_getFrame("MainContent")
1358 );
1359 }
1360 }
1361 }
1362
1363
1368 public function getTabs()
1369 {
1372
1373 // edit permissions
1374 if ($rbacsystem->checkAccess('edit_permission', $this->ref_id)) {
1375 $this->tabs_gui->addTarget(
1376 "perm_settings",
1377 $this->ctrl->getLinkTargetByClass(array(get_class($this),'ilpermissiongui'), "perm"),
1378 array("perm","info","owner"),
1379 'ilpermissiongui'
1380 );
1381 if ($ilCtrl->getNextClass() == "ilpermissiongui") {
1382 $this->tabs_gui->activateTab("perm_settings");
1383 }
1384 }
1385
1386 // show clipboard
1387 if (strtolower($_GET["baseClass"]) == "ilrepositorygui" && !empty($_SESSION["clipboard"])) {
1388 $this->tabs_gui->addTarget(
1389 "clipboard",
1390 $this->ctrl->getLinkTarget($this, "clipboard"),
1391 "clipboard",
1392 get_class($this)
1393 );
1394 }
1395 }
1396
1397 //*****************
1398 // COMMON METHODS (may be overwritten in derived classes
1399 // if special handling is necessary)
1400 //*****************
1401
1406 {
1407 $_SESSION["il_cont_admin_panel"] = true;
1408 $this->ctrl->redirect($this, "render");
1409 }
1410
1415 {
1416 $_SESSION["il_cont_admin_panel"] = false;
1417 $this->ctrl->redirect($this, "render");
1418 }
1419
1423 public function editOrderObject()
1424 {
1425 $ilTabs = $this->tabs;
1426
1427 $this->edit_order = true;
1428 $_SESSION["il_cont_admin_panel"] = false;
1429 $this->renderObject();
1430
1431 $ilTabs->activateSubTab("ordering");
1432 }
1433
1438 public function isActiveOrdering()
1439 {
1440 return $this->edit_order ? true : false;
1441 }
1442
1447 public function isActiveItemOrdering()
1448 {
1449 if ($this->isActiveOrdering()) {
1451 }
1452 return false;
1453 }
1454
1455
1456 // bugfix mantis 24559
1457 // undoing an erroneous change inside mantis 23516 by adding "Download Multiple Objects"-functionality for non-admins
1458 // as they don't have the possibility to use the multi-download-capability of the manage-tab
1460 {
1461 $this->multi_download_enabled = true;
1462 $this->renderObject();
1463 }
1464
1465 public function isMultiDownloadEnabled()
1466 {
1468 }
1469
1476 public function cutObject()
1477 {
1481
1482 if ($_GET["item_ref_id"] != "") {
1483 $_POST["id"] = array($_GET["item_ref_id"]);
1484 }
1485
1486 $no_cut = [];
1487
1488 if (!isset($_POST["id"])) {
1489 $ilErr->raiseError($this->lng->txt("no_checkbox"), $ilErr->MESSAGE);
1490 }
1491
1492 // FOR ALL OBJECTS THAT SHOULD BE COPIED
1493 foreach ($_POST["id"] as $ref_id) {
1494 // GET COMPLETE NODE_DATA OF ALL SUBTREE NODES
1495 $node_data = $this->tree->getNodeData($ref_id);
1496 $subtree_nodes = $this->tree->getSubTree($node_data);
1497
1498 $all_node_data[] = $node_data;
1499 $all_subtree_nodes[] = $subtree_nodes;
1500
1501 // CHECK DELETE PERMISSION OF ALL OBJECTS IN ACTUAL SUBTREE
1502 foreach ($subtree_nodes as $node) {
1503 if ($node['type'] == 'rolf') {
1504 continue;
1505 }
1506
1507 if (!$rbacsystem->checkAccess('delete', $node["ref_id"])) {
1508 $no_cut[] = $node["ref_id"];
1509 }
1510 }
1511 }
1512 // IF THERE IS ANY OBJECT WITH NO PERMISSION TO 'delete'
1513 if (count($no_cut)) {
1514 $titles = array();
1515 foreach ((array) $no_cut as $cut_id) {
1516 $titles[] = ilObject::_lookupTitle(ilObject::_lookupObjId($cut_id));
1517 }
1518 $ilErr->raiseError(
1519 $this->lng->txt("msg_no_perm_cut") . " " . implode(',', (array) $titles),
1520 $ilErr->MESSAGE
1521 );
1522 }
1523 $_SESSION["clipboard"]["parent"] = $_GET["ref_id"];
1524 $_SESSION["clipboard"]["cmd"] = $ilCtrl->getCmd();
1525 $_SESSION["clipboard"]["ref_ids"] = $_POST["id"];
1526
1527 ilUtil::sendInfo($this->lng->txt("msg_cut_clipboard"), true);
1528
1529 return $this->initAndDisplayMoveIntoObjectObject();
1530 } // END CUT
1531
1539 public function copyObject()
1540 {
1545
1546 $no_copy = [];
1547
1548 if ($_GET["item_ref_id"] != "") {
1549 $_POST["id"] = array($_GET["item_ref_id"]);
1550 }
1551
1552 if (!isset($_POST["id"])) {
1553 $ilErr->raiseError($this->lng->txt("no_checkbox"), $ilErr->MESSAGE);
1554 }
1555
1556 // FOR ALL OBJECTS THAT SHOULD BE COPIED
1557 $containers = 0;
1558 foreach ($_POST["id"] as $ref_id) {
1559 // GET COMPLETE NODE_DATA OF ALL SUBTREE NODES
1560 $node_data = $this->tree->getNodeData($ref_id);
1561
1562 // count containers
1563 if ($objDefinition->isContainer($node_data["type"])) {
1564 $containers++;
1565 }
1566
1567 $subtree_nodes = $this->tree->getSubTree($node_data);
1568
1569 $all_node_data[] = $node_data;
1570 $all_subtree_nodes[] = $subtree_nodes;
1571
1572 // CHECK COPY PERMISSION OF ALL OBJECTS IN ACTUAL SUBTREE
1573 foreach ($subtree_nodes as $node) {
1574 if ($node['type'] == 'rolf') {
1575 continue;
1576 }
1577
1578 if (!$rbacsystem->checkAccess('visible,read,copy', $node["ref_id"])) {
1579 $no_copy[] = $node["ref_id"];
1580 }
1581 }
1582 }
1583
1584 if ($containers > 0 && count($_POST["id"]) > 1) {
1585 $ilErr->raiseError($this->lng->txt("cntr_container_only_on_their_own"), $ilErr->MESSAGE);
1586 }
1587
1588 // IF THERE IS ANY OBJECT WITH NO PERMISSION TO 'delete'
1589 if (is_array($no_copy) && count($no_copy)) {
1590 $titles = array();
1591 foreach ((array) $no_copy as $copy_id) {
1592 $titles[] = ilObject::_lookupTitle(ilObject::_lookupObjId($copy_id));
1593 }
1594 $ilErr->raiseError(
1595 $this->lng->txt("msg_no_perm_copy") . " " . implode(',', $titles),
1596 $ilErr->MESSAGE
1597 );
1598 }
1599
1600 // if we have a single container, set it as source id and redirect to ilObjectCopyGUI
1601 if (count($_POST["id"]) == 1) {
1602 $ilCtrl->setParameterByClass("ilobjectcopygui", "source_id", $_POST["id"][0]);
1603 $ilCtrl->redirectByClass("ilobjectcopygui", "initTargetSelection");
1604 } else {
1605 $ilCtrl->setParameterByClass("ilobjectcopygui", "source_ids", implode("_", $_POST["id"]));
1606 $ilCtrl->redirectByClass("ilobjectcopygui", "initTargetSelection");
1607 }
1608
1609 $_SESSION["clipboard"]["parent"] = $_GET["ref_id"];
1610 $_SESSION["clipboard"]["cmd"] = $ilCtrl->getCmd();
1611 $_SESSION["clipboard"]["ref_ids"] = $_POST["id"];
1612
1613 ilUtil::sendInfo($this->lng->txt("msg_copy_clipboard"), true);
1614
1616 } // END COPY
1617
1618 public function downloadObject()
1619 {
1621 // This variable determines whether the task has been initiated by a folder's action drop-down to prevent a folder
1622 // duplicate inside the zip.
1623 $initiated_by_folder_action = false;
1624
1625 if ($_GET["item_ref_id"] != "") {
1626 $_POST["id"] = array($_GET["item_ref_id"]);
1627 }
1628
1629 if (!isset($_POST["id"])) {
1631 $object_type = $object->getType();
1632 if ($object_type == "fold") {
1633 $_POST["id"] = array($_GET['ref_id']);
1634 $initiated_by_folder_action = true;
1635 } else {
1636 $ilErr->raiseError($this->lng->txt("no_checkbox"), $ilErr->MESSAGE);
1637 }
1638 }
1639
1640 include_once './Services/Container/classes/BackgroundTasks/class.ilDownloadContainerFilesBackgroundTask.php';
1641 $download_job = new ilDownloadContainerFilesBackgroundTask($GLOBALS['DIC']->user()->getId(), $_POST["id"], $initiated_by_folder_action);
1642
1643 $download_job->setBucketTitle($this->getBucketTitle());
1644 if ($download_job->run()) {
1645 ilUtil::sendSuccess($this->lng->txt('msg_bt_download_started'), true);
1646 }
1647 $GLOBALS['DIC']->ctrl()->redirect($this);
1648 }
1649
1654 public function getBucketTitle()
1655 {
1656 return $bucket_title = ilUtil::getAsciiFilename($this->object->getTitle());
1657 }
1658
1665 public function linkObject()
1666 {
1670
1671 $no_cut = [];
1672 $no_link = [];
1673
1674 if ($_GET["item_ref_id"] != "") {
1675 $_POST["id"] = array($_GET["item_ref_id"]);
1676 }
1677
1678 if (!isset($_POST["id"])) {
1679 $ilErr->raiseError($this->lng->txt("no_checkbox"), $ilErr->MESSAGE);
1680 }
1681
1682 // CHECK ACCESS
1683 foreach ($_POST["id"] as $ref_id) {
1684 if (!$rbacsystem->checkAccess('delete', $ref_id)) {
1685 $no_cut[] = $ref_id;
1686 }
1687
1689
1690 if (!$this->objDefinition->allowLink($object->getType())) {
1691 $no_link[] = $object->getType();
1692 }
1693 }
1694
1695 // NO ACCESS
1696 if (count($no_cut)) {
1697 $ilErr->raiseError($this->lng->txt("msg_no_perm_link") . " " .
1698 implode(',', $no_cut), $ilErr->MESSAGE);
1699 }
1700
1701 if (count($no_link)) {
1702 //#12203
1703 $ilErr->raiseError($this->lng->txt("msg_obj_no_link"), $ilErr->MESSAGE);
1704 }
1705
1706 // WRITE TO CLIPBOARD
1707 $clipboard["parent"] = $_GET["ref_id"];
1708 $clipboard["cmd"] = $ilCtrl->getCmd();
1709
1710 foreach ($_POST["id"] as $ref_id) {
1711 $clipboard["ref_ids"][] = $ref_id;
1712 }
1713
1714 $_SESSION["clipboard"] = $clipboard;
1715
1716 $suffix = 'p';
1717 if (count($clipboard["ref_ids"]) == 1) {
1718 $suffix = 's';
1719 }
1720 ilUtil::sendInfo($this->lng->txt("msg_link_clipboard_" . $suffix), true);
1721
1723 } // END LINK
1724
1725
1731 public function clearObject()
1732 {
1733 unset($_SESSION["clipboard"]);
1734 unset($_SESSION["il_rep_clipboard"]);
1735
1736 //var_dump($this->getReturnLocation("clear",$this->ctrl->getLinkTarget($this)),get_class($this));
1737
1738 // only redirect if clipboard was cleared
1739 if (isset($_POST["cmd"]["clear"])) {
1740 ilUtil::sendSuccess($this->lng->txt("msg_clear_clipboard"), true);
1741 // fixed mantis 0018474: Clear Clipboard redirects to Subtab View, instead of Subtab "Edit Multiple"
1742 $this->ctrl->redirect($this, 'render');
1743 }
1744 }
1745
1747 {
1753 $ilObjDataCache = $this->obj_data_cache;
1756 $lng = $this->lng;
1758 $ui = $this->ui;
1759
1760 $exists = [];
1761 $is_child = [];
1762 $not_allowed_subobject = [];
1763 $no_paste = [];
1764
1765 $command = $_SESSION['clipboard']['cmd'];
1766 if (!in_array($command, array('cut', 'link', 'copy'))) {
1767 $message = __METHOD__ . ": cmd was neither 'cut', 'link' nor 'copy'; may be a hack attempt!";
1768 $ilErr->raiseError($message, $ilErr->WARNING);
1769 }
1770
1771 if ($command == 'cut') {
1772 if (isset($_POST['node']) && (int) $_POST['node']) {
1773 $_POST['nodes'] = array($_POST['node']);
1774 }
1775 }
1776
1777 if (!is_array($_POST['nodes']) || !count($_POST['nodes'])) {
1778 ilUtil::sendFailure($this->lng->txt('select_at_least_one_object'));
1779 switch ($command) {
1780 case 'cut':
1781 $this->showPasteTreeObject();
1782 break;
1783 case 'copy':
1784 $this->showPasteTreeObject();
1785 break;
1786 case 'link':
1787 $this->showPasteTreeObject();
1788 break;
1789 }
1790 return;
1791 }
1792
1793 // this loop does all checks
1794 $folder_objects_cache = array();
1795 foreach ($_SESSION['clipboard']['ref_ids'] as $ref_id) {
1797 $current_parent_id = $tree->getParentId($obj_data->getRefId());
1798
1799 foreach ($_POST['nodes'] as $folder_ref_id) {
1800 if (!array_key_exists($folder_ref_id, $folder_objects_cache)) {
1801 $folder_objects_cache[$folder_ref_id] = ilObjectFactory::getInstanceByRefId($folder_ref_id);
1802 }
1803
1804 // CHECK ACCESS
1805 if (!$rbacsystem->checkAccess('create', $folder_ref_id, $obj_data->getType())) {
1806 $no_paste[] = sprintf($this->lng->txt('msg_no_perm_paste_object_in_folder'), $obj_data->getTitle() . ' [' . $obj_data->getRefId() . ']', $folder_objects_cache[$folder_ref_id]->getTitle() . ' [' . $folder_objects_cache[$folder_ref_id]->getRefId() . ']');
1807 }
1808
1809 // CHECK IF REFERENCE ALREADY EXISTS
1810 if ($folder_ref_id == $current_parent_id) {
1811 $exists[] = sprintf($this->lng->txt('msg_obj_exists_in_folder'), $obj_data->getTitle() . ' [' . $obj_data->getRefId() . ']', $folder_objects_cache[$folder_ref_id]->getTitle() . ' [' . $folder_objects_cache[$folder_ref_id]->getRefId() . ']');
1812 }
1813
1814 // CHECK IF PASTE OBJECT SHALL BE CHILD OF ITSELF
1815 if ($tree->isGrandChild($ref_id, $folder_ref_id) ||
1816 $ref_id == $folder_ref_id) {
1817 $is_child[] = sprintf($this->lng->txt('msg_paste_object_not_in_itself'), $obj_data->getTitle() . ' [' . $obj_data->getRefId() . ']');
1818 }
1819
1820 // CHECK IF OBJECT IS ALLOWED TO CONTAIN PASTED OBJECT AS SUBOBJECT
1821 if (!in_array($obj_data->getType(), array_keys($folder_objects_cache[$folder_ref_id]->getPossibleSubObjects()))) {
1822 $not_allowed_subobject[] = sprintf(
1823 $this->lng->txt('msg_obj_may_not_contain_objects_of_type'),
1824 $folder_objects_cache[$folder_ref_id]->getTitle() . ' [' . $folder_objects_cache[$folder_ref_id]->getRefId() . ']',
1825 $lng->txt('obj_' . $obj_data->getType())
1826 );
1827 }
1828 }
1829 }
1830
1832 // process checking results
1833 if (count($exists) && $command != "copy") {
1834 $error .= implode('<br />', $exists);
1835 }
1836
1837 if (count($is_child)) {
1838 $error .= $error != '' ? '<br />' : '';
1839 $error .= implode('<br />', $is_child);
1840 }
1841
1842 if (count($not_allowed_subobject)) {
1843 $error .= $error != '' ? '<br />' : '';
1844 $error .= implode('<br />', $not_allowed_subobject);
1845 }
1846
1847 if (count($no_paste)) {
1848 $error .= $error != '' ? '<br />' : '';
1849 $error .= implode('<br />', $no_paste);
1850 }
1851
1852 if ($error != '') {
1854 switch ($command) {
1855 case 'cut':
1856 $this->showPasteTreeObject();
1857 break;
1858 case 'copy':
1859 $this->showPasteTreeObject();
1860 break;
1861 case 'link':
1862 $this->showPasteTreeObject();
1863 break;
1864 }
1865 return;
1866 }
1867
1868 // log pasteObject call
1869 $ilLog->write(__METHOD__ . ", cmd: " . $command);
1870
1872 // everything ok: now paste the objects to new location
1873
1874 // to prevent multiple actions via back/reload button
1875 $ref_ids = $_SESSION['clipboard']['ref_ids'];
1876 unset($_SESSION['clipboard']['ref_ids']);
1877
1878 // BEGIN ChangeEvent: Record paste event.
1879 require_once('Services/Tracking/classes/class.ilChangeEvent.php');
1880 // END ChangeEvent: Record paste event.
1881
1882 // process COPY command
1883 if ($command == 'copy') {
1884 foreach ($_POST['nodes'] as $folder_ref_id) {
1885 foreach ($ref_ids as $ref_id) {
1886 $revIdMapping = array();
1887
1888 $oldNode_data = $tree->getNodeData($ref_id);
1889 if ($oldNode_data['parent'] == $folder_ref_id) {
1890 require_once 'Modules/File/classes/class.ilObjFileAccess.php';
1891 $newTitle = ilObjFileAccess::_appendNumberOfCopyToFilename($oldNode_data['title'], null);
1892 $newRef = $this->cloneNodes($ref_id, $folder_ref_id, $refIdMapping, $newTitle);
1893 } else {
1894 $newRef = $this->cloneNodes($ref_id, $folder_ref_id, $refIdMapping, null);
1895 }
1896
1897 // BEGIN ChangeEvent: Record copy event.
1898 $old_parent_data = $tree->getParentNodeData($ref_id);
1899 $newNode_data = $tree->getNodeData($newRef);
1901 $oldNode_data['type'],
1902 $ref_id,
1903 $oldNode_data['obj_id'],
1904 $ilUser->getId()
1905 );
1907 $newNode_data['obj_id'],
1908 $ilUser->getId(),
1909 'add',
1910 $ilObjDataCache->lookupObjId($folder_ref_id)
1911 );
1912 ilChangeEvent::_catchupWriteEvents($newNode_data['obj_id'], $ilUser->getId());
1913 // END PATCH ChangeEvent: Record cut event.
1914 }
1915 }
1916
1917 ilUtil::sendSuccess($this->lng->txt('msg_cloned'), true);
1918 } // END COPY
1919
1920 // process CUT command
1921 if ($command == 'cut') {
1922 foreach ($_POST['nodes'] as $folder_ref_id) {
1923 foreach ($ref_ids as $ref_id) {
1924 // Store old parent
1925 $old_parent = $tree->getParentId($ref_id);
1926 $tree->moveTree($ref_id, $folder_ref_id);
1927 $rbacadmin->adjustMovedObjectPermissions($ref_id, $old_parent);
1928
1929 include_once('./Services/Conditions/classes/class.ilConditionHandler.php');
1931
1932 // BEGIN ChangeEvent: Record cut event.
1933 $node_data = $tree->getNodeData($ref_id);
1934 $old_parent_data = $tree->getNodeData($old_parent);
1936 $node_data['obj_id'],
1937 $ilUser->getId(),
1938 'remove',
1939 $old_parent_data['obj_id']
1940 );
1942 $node_data['obj_id'],
1943 $ilUser->getId(),
1944 'add',
1945 $ilObjDataCache->lookupObjId($folder_ref_id)
1946 );
1947 ilChangeEvent::_catchupWriteEvents($node_data['obj_id'], $ilUser->getId());
1948 // END PATCH ChangeEvent: Record cut event.
1949 }
1950
1951 // prevent multiple iterations for cut cmommand
1952 break;
1953 }
1954
1955 ilUtil::sendSuccess($this->lng->txt('msg_cut_copied'), true);
1956 } // END CUT
1957
1958 // process LINK command
1959 if ($command == 'link') {
1960 $linked_to_folders = array();
1961
1962 include_once "Services/AccessControl/classes/class.ilRbacLog.php";
1963 $rbac_log_active = ilRbacLog::isActive();
1964
1965 foreach ($_POST['nodes'] as $folder_ref_id) {
1966 $linked_to_folders[$folder_ref_id] = $ilObjDataCache->lookupTitle($ilObjDataCache->lookupObjId($folder_ref_id));
1967
1968 foreach ($ref_ids as $ref_id) {
1969 // get node data
1970 $top_node = $tree->getNodeData($ref_id);
1971
1972 // get subnodes of top nodes
1973 $subnodes[$ref_id] = $tree->getSubtree($top_node);
1974 }
1975
1976 // now move all subtrees to new location
1977 foreach ($subnodes as $key => $subnode) {
1978 // first paste top_node....
1979 $obj_data = ilObjectFactory::getInstanceByRefId($key);
1980 $new_ref_id = $obj_data->createReference();
1981 $obj_data->putInTree($folder_ref_id);
1982 $obj_data->setPermissions($folder_ref_id);
1983
1984 // rbac log
1985 if ($rbac_log_active) {
1986 $rbac_log_roles = $rbacreview->getParentRoleIds($new_ref_id, false);
1987 $rbac_log = ilRbacLog::gatherFaPa($new_ref_id, array_keys($rbac_log_roles), true);
1988 ilRbacLog::add(ilRbacLog::LINK_OBJECT, $new_ref_id, $rbac_log, $key);
1989 }
1990
1991 // BEGIN ChangeEvent: Record link event.
1992 $node_data = $tree->getNodeData($new_ref_id);
1994 $node_data['obj_id'],
1995 $ilUser->getId(),
1996 'add',
1997 $ilObjDataCache->lookupObjId($folder_ref_id)
1998 );
1999 ilChangeEvent::_catchupWriteEvents($node_data['obj_id'], $ilUser->getId());
2000 // END PATCH ChangeEvent: Record link event.
2001 }
2002
2003 $ilLog->write(__METHOD__ . ', link finished');
2004 }
2005
2006 $linked_targets = array();
2007 $links = [];
2008 if (count($linked_to_folders)) {
2009 require_once 'Services/Link/classes/class.ilLink.php';
2010 foreach ($linked_to_folders as $ref_id => $title) {
2011 $linked_targets[] = '<a href="' . ilLink::_getLink($ref_id) . '">' . $title . '</a>';
2012 $links[] = $ui->factory()->link()->standard($title, ilLink::_getLink($ref_id));
2013 }
2014 }
2015
2016 $suffix = 'p';
2017 if (count($ref_ids) == 1) {
2018 $suffix = 's';
2019 }
2020
2021 $mbox = $ui->factory()->messageBox()->success($this->lng->txt('mgs_objects_linked_to_the_following_folders_' . $suffix))
2022 ->withLinks($links);
2023
2024 ilUtil::sendSuccess($ui->renderer()->render($mbox), true);
2025 } // END LINK
2026
2027 // clear clipboard
2028 $this->clearObject();
2029
2030 $this->ctrl->returnToParent($this);
2031 }
2032
2034 {
2036
2037 // empty session on init
2038 $_SESSION['paste_linked_repexpand'] = array();
2039
2040 // copy opend nodes from repository explorer
2041 $_SESSION['paste_linked_repexpand'] = is_array($_SESSION['repexpand']) ? $_SESSION['repexpand'] : array();
2042
2043 // open current position
2044 $path = $tree->getPathId((int) $_GET['ref_id']);
2045 foreach ((array) $path as $node_id) {
2046 if (!in_array($node_id, $_SESSION['paste_linked_repexpand'])) {
2047 $_SESSION['paste_linked_repexpand'][] = $node_id;
2048 }
2049 }
2050
2051 return $this->showPasteTreeObject();
2052 }
2053
2057 public function showPasteTreeObject()
2058 {
2059 $ilTabs = $this->tabs;
2060 $ilToolbar = $this->toolbar;
2062
2063 $ilTabs->setTabActive('view_content');
2064
2065 if (!in_array($_SESSION['clipboard']['cmd'], array('link', 'copy', 'cut'))) {
2066 $message = __METHOD__ . ": Unknown action.";
2067 $ilErr->raiseError($message, $ilErr->WARNING);
2068 }
2069 $cmd = $_SESSION['clipboard']['cmd'];
2070
2071 //
2072 $exp = $this->getTreeSelectorGUI($cmd);
2073 if ($exp->handleCommand()) {
2074 return;
2075 }
2076 $output = $exp->getHTML();
2077
2078 $txt_var = ($cmd == "copy")
2079 ? "copy"
2080 : "paste";
2081
2082 // toolbars
2083 $t = new ilToolbarGUI();
2084 $t->setFormAction($this->ctrl->getFormAction($this, "performPasteIntoMultipleObjects"));
2085
2086 include_once("./Services/UIComponent/Button/classes/class.ilSubmitButton.php");
2088 $b->setCaption($txt_var);
2089 $b->setCommand("performPasteIntoMultipleObjects");
2090
2091 //$t->addFormButton($this->lng->txt($txt_var), "performPasteIntoMultipleObjects");
2092 $t->addStickyItem($b);
2093
2094 $t->addSeparator();
2095 $this->lng->loadLanguageModule('obj');
2096 $t->addFormButton($this->lng->txt("obj_insert_into_clipboard"), "keepObjectsInClipboard");
2097
2098 $t->addFormButton($this->lng->txt("cancel"), "cancelMoveLink");
2099 $t->setCloseFormTag(false);
2100 $t->setLeadingImage(ilUtil::getImagePath("arrow_upright.svg"), " ");
2101 $output = $t->getHTML() . $output;
2102 $t->setLeadingImage(ilUtil::getImagePath("arrow_downright.svg"), " ");
2103 $t->setCloseFormTag(true);
2104 $t->setOpenFormTag(false);
2105 $output .= "<br />" . $t->getHTML();
2106
2107 $this->tpl->setContent($output);
2108 }
2109
2110
2115 public function cancelMoveLinkObject()
2116 {
2118
2119 unset($_SESSION['clipboard']);
2120 $ilCtrl->returnToParent($this);
2121 }
2122
2127 {
2129
2130 ilUtil::sendSuccess($this->lng->txt("obj_inserted_clipboard"), true);
2131 $ilCtrl->returnToParent($this);
2132 }
2133
2134
2136 {
2138
2139 // empty session on init
2140 $_SESSION['paste_copy_repexpand'] = array();
2141
2142 // copy opend nodes from repository explorer
2143 $_SESSION['paste_copy_repexpand'] = is_array($_SESSION['repexpand']) ? $_SESSION['repexpand'] : array();
2144
2145 // open current position
2146 $path = $tree->getPathId((int) $_GET['ref_id']);
2147 foreach ((array) $path as $node_id) {
2148 if (!in_array($node_id, $_SESSION['paste_copy_repexpand'])) {
2149 $_SESSION['paste_copy_repexpand'][] = $node_id;
2150 }
2151 }
2152
2153 return $this->showPasteTreeObject();
2154 }
2155
2156
2158 {
2160
2161 // empty session on init
2162 $_SESSION['paste_cut_repexpand'] = array();
2163
2164 // copy opend nodes from repository explorer
2165 $_SESSION['paste_cut_repexpand'] = is_array($_SESSION['repexpand']) ? $_SESSION['repexpand'] : array();
2166
2167 // open current position
2168 $path = $tree->getPathId((int) $_GET['ref_id']);
2169 foreach ((array) $path as $node_id) {
2170 if (!in_array($node_id, $_SESSION['paste_cut_repexpand'])) {
2171 $_SESSION['paste_cut_repexpand'][] = $node_id;
2172 }
2173 }
2174
2175 return $this->showPasteTreeObject();
2176 }
2177
2178
2185 public function pasteObject()
2186 {
2194
2195 $exists = [];
2196 $no_paste = [];
2197 $is_child = [];
2198 $not_allowed_subobject = [];
2199
2200 // BEGIN ChangeEvent: Record paste event.
2201 require_once('Services/Tracking/classes/class.ilChangeEvent.php');
2202 // END ChangeEvent: Record paste event.
2203
2204 //var_dump($_SESSION["clipboard"]);exit;
2205 if (!in_array($_SESSION["clipboard"]["cmd"], array("cut","link","copy"))) {
2206 $message = get_class($this) . "::pasteObject(): cmd was neither 'cut','link' or 'copy'; may be a hack attempt!";
2207 $ilErr->raiseError($message, $ilErr->WARNING);
2208 }
2209
2210 // this loop does all checks
2211 foreach ($_SESSION["clipboard"]["ref_ids"] as $ref_id) {
2213
2214 // CHECK ACCESS
2215 if (!$rbacsystem->checkAccess('create', $this->object->getRefId(), $obj_data->getType())) {
2216 $no_paste[] = $ref_id;
2217 $no_paste_titles[] = $obj_data->getTitle();
2218 }
2219
2220 // CHECK IF REFERENCE ALREADY EXISTS
2221 if ($this->object->getRefId() == $this->tree->getParentId($obj_data->getRefId())) {
2222 $exists[] = $ref_id;
2223 break;
2224 }
2225
2226 // CHECK IF PASTE OBJECT SHALL BE CHILD OF ITSELF
2227 if ($this->tree->isGrandChild($ref_id, $this->object->getRefId())) {
2229 }
2230
2231 if ($ref_id == $this->object->getRefId()) {
2233 }
2234
2235 // CHECK IF OBJECT IS ALLOWED TO CONTAIN PASTED OBJECT AS SUBOBJECT
2236 $obj_type = $obj_data->getType();
2237
2238 if (!in_array($obj_type, array_keys($this->object->getPossibleSubObjects()))) {
2239 $not_allowed_subobject[] = $obj_data->getType();
2240 }
2241 }
2242
2244 // process checking results
2245 // BEGIN WebDAV: Copying an object into the same container is allowed
2246 if (count($exists) > 0 && $_SESSION["clipboard"]["cmd"] != "copy") {
2247 // END WebDAV: Copying an object into the same container is allowed
2248 $ilErr->raiseError($this->lng->txt("msg_obj_exists"), $ilErr->MESSAGE);
2249 }
2250
2251 if (count($is_child) > 0) {
2252 $ilErr->raiseError(
2253 $this->lng->txt("msg_not_in_itself") . " " . implode(',', $is_child),
2254 $ilErr->MESSAGE
2255 );
2256 }
2257
2258 if (count($not_allowed_subobject) > 0) {
2259 $ilErr->raiseError(
2260 $this->lng->txt("msg_may_not_contain") . " " . implode(',', $not_allowed_subobject),
2261 $ilErr->MESSAGE
2262 );
2263 }
2264
2265 if (count($no_paste) > 0) {
2266 $ilErr->raiseError($this->lng->txt("msg_no_perm_paste") . " " .
2267 implode(',', $no_paste), $ilErr->MESSAGE);
2268 }
2269
2270 // log pasteObject call
2271 $ilLog->write("ilObjectGUI::pasteObject(), cmd: " . $_SESSION["clipboard"]["cmd"]);
2272
2274 // everything ok: now paste the objects to new location
2275
2276 // to prevent multiple actions via back/reload button
2277 $ref_ids = $_SESSION["clipboard"]["ref_ids"];
2278 unset($_SESSION["clipboard"]["ref_ids"]);
2279
2280 // BEGIN WebDAV: Support a copy command in the repository
2281 // process COPY command
2282 if ($_SESSION["clipboard"]["cmd"] == "copy") {
2283 unset($_SESSION["clipboard"]["cmd"]);
2284
2285 // new implementation, redirects to ilObjectCopyGUI
2286 if (count($ref_ids) == 1) {
2287 $ilCtrl->setParameterByClass("ilobjectcopygui", "target", $this->object->getRefId());
2288 $ilCtrl->setParameterByClass("ilobjectcopygui", "source_id", $ref_ids[0]);
2289 $ilCtrl->redirectByClass("ilobjectcopygui", "saveTarget");
2290 } else {
2291 $ilCtrl->setParameterByClass("ilobjectcopygui", "target", $this->object->getRefId());
2292 $ilCtrl->setParameterByClass("ilobjectcopygui", "source_ids", implode("_", $ref_ids));
2293 $ilCtrl->redirectByClass("ilobjectcopygui", "saveTarget");
2294 }
2295
2296
2297
2298 /* old implementation
2299
2300 foreach($ref_ids as $ref_id)
2301 {
2302 $revIdMapping = array();
2303
2304 $oldNode_data = $tree->getNodeData($ref_id);
2305 if ($oldNode_data['parent'] == $this->object->getRefId())
2306 {
2307 require_once 'Modules/File/classes/class.ilObjFileAccess.php';
2308 $newTitle = ilObjFileAccess::_appendNumberOfCopyToFilename($oldNode_data['title'],null);
2309 $newRef = $this->cloneNodes($ref_id, $this->object->getRefId(), $refIdMapping, $newTitle);
2310 }
2311 else
2312 {
2313 $newRef = $this->cloneNodes($ref_id, $this->object->getRefId(), $refIdMapping, null);
2314 }
2315
2316 // BEGIN ChangeEvent: Record copy event.
2317 $old_parent_data = $tree->getParentNodeData($ref_id);
2318 $newNode_data = $tree->getNodeData($newRef);
2319 ilChangeEvent::_recordReadEvent($oldNode_data['type'], $ref_id,
2320 $oldNode_data['obj_id'], $ilUser->getId());
2321 ilChangeEvent::_recordWriteEvent($newNode_data['obj_id'], $ilUser->getId(), 'add',
2322 $this->object->getId());
2323 ilChangeEvent::_catchupWriteEvents($newNode_data['obj_id'], $ilUser->getId());
2324 // END ChangeEvent: Record copy event.
2325 }*/
2326
2327 $ilLog->write("ilObjectGUI::pasteObject(), copy finished");
2328 }
2329 // END WebDAV: Support a Copy command in the repository
2330
2331 // process CUT command
2332 if ($_SESSION["clipboard"]["cmd"] == "cut") {
2333 foreach ($ref_ids as $ref_id) {
2334 // Store old parent
2335 $old_parent = $tree->getParentId($ref_id);
2336 $this->tree->moveTree($ref_id, $this->object->getRefId());
2337 $rbacadmin->adjustMovedObjectPermissions($ref_id, $old_parent);
2338
2339 include_once('./Services/Conditions/classes/class.ilConditionHandler.php');
2341
2342 // BEGIN ChangeEvent: Record cut event.
2343 $node_data = $tree->getNodeData($ref_id);
2344 $old_parent_data = $tree->getNodeData($old_parent);
2346 $node_data['obj_id'],
2347 $ilUser->getId(),
2348 'remove',
2349 $old_parent_data['obj_id']
2350 );
2352 $node_data['obj_id'],
2353 $ilUser->getId(),
2354 'add',
2355 $this->object->getId()
2356 );
2357 ilChangeEvent::_catchupWriteEvents($node_data['obj_id'], $ilUser->getId());
2358 // END PATCH ChangeEvent: Record cut event.
2359 }
2360 } // END CUT
2361
2362 // process LINK command
2363 if ($_SESSION["clipboard"]["cmd"] == "link") {
2364 foreach ($ref_ids as $ref_id) {
2365 // get node data
2366 $top_node = $this->tree->getNodeData($ref_id);
2367
2368 // get subnodes of top nodes
2369 $subnodes[$ref_id] = $this->tree->getSubtree($top_node);
2370 }
2371
2372 // now move all subtrees to new location
2373 foreach ($subnodes as $key => $subnode) {
2374 // first paste top_node....
2376 $new_ref_id = $obj_data->createReference();
2377 $obj_data->putInTree($_GET["ref_id"]);
2378 $obj_data->setPermissions($_GET["ref_id"]);
2379
2380 // BEGIN ChangeEvent: Record link event.
2381 $node_data = $tree->getNodeData($new_ref_id);
2383 $node_data['obj_id'],
2384 $ilUser->getId(),
2385 'add',
2386 $this->object->getId()
2387 );
2388 ilChangeEvent::_catchupWriteEvents($node_data['obj_id'], $ilUser->getId());
2389 // END PATCH ChangeEvent: Record link event.
2390 }
2391
2392 $ilLog->write("ilObjectGUI::pasteObject(), link finished");
2393 } // END LINK
2394
2395 // save cmd for correct message output after clearing the clipboard
2396 $last_cmd = $_SESSION["clipboard"]["cmd"];
2397
2398
2399 // clear clipboard
2400 $this->clearObject();
2401
2402 if ($last_cmd == "cut") {
2403 ilUtil::sendSuccess($this->lng->txt("msg_cut_copied"), true);
2404 }
2405 // BEGIN WebDAV: Support a copy command in repository
2406 elseif ($last_cmd == "copy") {
2407 ilUtil::sendSuccess($this->lng->txt("msg_cloned"), true);
2408 } elseif ($last_cmd == 'link') {
2409 // END WebDAV: Support copy command in repository
2410 ilUtil::sendSuccess($this->lng->txt("msg_linked"), true);
2411 }
2412
2413 $this->ctrl->returnToParent($this);
2414 } // END PASTE
2415
2416
2420 public function clipboardObject()
2421 {
2424 $ilTabs = $this->tabs;
2425 $tpl = $this->tpl;
2426 $ilToolbar = $this->toolbar;
2428 $lng = $this->lng;
2429
2430 $ilTabs->activateTab("clipboard");
2431
2432 // function should not be called if clipboard is empty
2433 if (empty($_SESSION['clipboard']) or !is_array($_SESSION['clipboard'])) {
2434 $message = sprintf('%s::clipboardObject(): Illegal access. Clipboard variable is empty!', get_class($this));
2435 $ilLog->write($message, $ilLog->FATAL);
2436 $ilErr->raiseError($this->lng->txt("permission_denied"), $ilErr->WARNING);
2437 }
2438
2439 $data = array();
2440 foreach ($_SESSION["clipboard"]["ref_ids"] as $ref_id) {
2441 if (!$tmp_obj = ilObjectFactory::getInstanceByRefId($ref_id, false)) {
2442 continue;
2443 }
2444
2445 $data[] = array(
2446 "type" => $tmp_obj->getType(),
2447 "type_txt" => $this->lng->txt("obj_" . $tmp_obj->getType()),
2448 "title" => $tmp_obj->getTitle(),
2449 "cmd" => ($_SESSION["clipboard"]["cmd"] == "cut") ? $this->lng->txt("move") :$this->lng->txt($_SESSION["clipboard"]["cmd"]),
2450 "ref_id" => $ref_id,
2451 "obj_id" => $tmp_obj->getId()
2452 );
2453
2454 unset($tmp_obj);
2455 }
2456
2457 include_once("./Services/Object/classes/class.ilObjClipboardTableGUI.php");
2458 $tab = new ilObjClipboardTableGUI($this, "clipboard");
2459 $tab->setData($data);
2460 $tpl->setContent($tab->getHTML());
2461
2462 if (count($data) > 0) {
2463 $ilToolbar->setFormAction($ilCtrl->getFormAction($this));
2464 $ilToolbar->addFormButton(
2465 $lng->txt("insert_object_here"),
2466 "paste"
2467 );
2468 $ilToolbar->addFormButton(
2469 $lng->txt("clear_clipboard"),
2470 "clear"
2471 );
2472 }
2473
2474 return true;
2475 }
2476
2478 {
2479 // #10081
2480 if ($_SESSION["il_cont_admin_panel"] &&
2481 $this->object->getRefId() &&
2482 !$this->rbacsystem->checkAccess("visible,read", $this->object->getRefId())) {
2483 return false;
2484 }
2485
2486 return $_SESSION["il_cont_admin_panel"];
2487 }
2488
2492 public function setColumnSettings(ilColumnGUI $column_gui)
2493 {
2494 $ilAccess = $this->access;
2495 parent::setColumnSettings($column_gui);
2496
2497 $column_gui->setRepositoryItems(
2498 $this->object->getSubItems($this->isActiveAdministrationPanel(), true)
2499 );
2500
2501 //if ($ilAccess->checkAccess("write", "", $this->object->getRefId())
2502 // && $this->allowBlocksConfigure())
2503 if ($ilAccess->checkAccess("write", "", $this->object->getRefId())) {
2504 $column_gui->setBlockProperty("news", "settings", true);
2505 //$column_gui->setBlockProperty("news", "public_notifications_option", true);
2506 $column_gui->setBlockProperty("news", "default_visibility_option", true);
2507 $column_gui->setBlockProperty("news", "hide_news_block_option", true);
2508 }
2509
2510 if ($this->isActiveAdministrationPanel()) {
2511 $column_gui->setAdminCommands(true);
2512 }
2513 }
2514
2518 public function allowBlocksMoving()
2519 {
2520 return true;
2521 }
2522
2526 public function allowBlocksConfigure()
2527 {
2528 return true;
2529 }
2530
2539 {
2540 $this->cloneWizardPageObject(true);
2541 }
2542
2551 {
2552 $this->cloneWizardPageObject(false);
2553 }
2554
2561 public function cloneWizardPageObject($a_tree_view = true)
2562 {
2563 include_once('Services/CopyWizard/classes/class.ilCopyWizardPageFactory.php');
2564
2565 $ilObjDataCache = $this->obj_data_cache;
2567
2568 if (!$_REQUEST['clone_source']) {
2569 ilUtil::sendFailure($this->lng->txt('select_one'));
2570 if (isset($_SESSION['wizard_search_title'])) {
2571 $this->searchCloneSourceObject();
2572 } else {
2573 $this->createObject();
2574 }
2575 return false;
2576 }
2577 $source_id = $_REQUEST['clone_source'];
2578 $new_type = $_REQUEST['new_type'];
2579 $this->ctrl->setParameter($this, 'clone_source', (int) $_REQUEST['clone_source']);
2580 $this->ctrl->setParameter($this, 'new_type', $new_type);
2581
2582
2583 // Generell JavaScript
2584 $this->tpl->addJavaScript('./Services/CopyWizard/js/ilContainer.js');
2585 $this->tpl->setVariable('BODY_ATTRIBUTES', 'onload="ilDisableChilds(\'cmd\');"');
2586
2587
2588 $this->tpl->addBlockFile(
2589 'ADM_CONTENT',
2590 'adm_content',
2591 'tpl.container_wizard_page.html',
2592 "Services/Container"
2593 );
2594 $this->tpl->setVariable('FORMACTION', $this->ctrl->getFormAction($this));
2595 $this->tpl->setVariable('TYPE_IMG', ilUtil::getImagePath('icon_' . $new_type . '.svg'));
2596 $this->tpl->setVariable('ALT_IMG', $this->lng->txt('obj_' . $new_type));
2597 $this->tpl->setVariable('TXT_DUPLICATE', $this->lng->txt($new_type . '_wizard_page'));
2598 $this->tpl->setVariable('INFO_DUPLICATE', $this->lng->txt($new_type . '_copy_threads_info'));
2599 $this->tpl->setVariable('BTN_COPY', $this->lng->txt('obj_' . $new_type . '_duplicate'));
2600 $this->tpl->setVariable('BTN_BACK', $this->lng->txt('btn_back'));
2601 if (isset($_SESSION['wizard_search_title'])) {
2602 $this->tpl->setVariable('CMD_BACK', 'searchCloneSource');
2603 } else {
2604 $this->tpl->setVariable('CMD_BACK', 'create');
2605 }
2606
2607 $this->tpl->setVariable('BTN_TREE', $this->lng->txt('treeview'));
2608 $this->tpl->setVariable('BTN_LIST', $this->lng->txt('flatview'));
2609
2610 // Fill item rows
2611 // tree view
2612 if ($a_tree_view) {
2613 $first = true;
2614 $has_items = false;
2615 foreach ($subnodes = $tree->getSubtree($source_node = $tree->getNodeData($source_id), true) as $node) {
2616 if ($first == true) {
2617 $first = false;
2618 continue;
2619 }
2620
2621 if ($node['type'] == 'rolf') {
2622 continue;
2623 }
2624
2625 $has_items = true;
2626
2627 for ($i = $source_node['depth'];$i < $node['depth']; $i++) {
2628 $this->tpl->touchBlock('padding');
2629 $this->tpl->touchBlock('end_padding');
2630 }
2631 // fill options
2632 $copy_wizard_page = ilCopyWizardPageFactory::_getInstanceByType($source_id, $node['type']);
2633 $copy_wizard_page->fillTreeSelection($node['ref_id'], $node['type'], $node['depth']);
2634
2635 $this->tpl->setCurrentBlock('tree_row');
2636 $this->tpl->setVariable('TREE_IMG', ilUtil::getImagePath('icon_' . $node['type'] . '.svg'));
2637 $this->tpl->setVariable('TREE_ALT_IMG', $this->lng->txt('obj_' . $node['type']));
2638 $this->tpl->setVariable('TREE_TITLE', $node['title']);
2639 $this->tpl->parseCurrentBlock();
2640 }
2641 if (!$has_items) {
2642 $this->tpl->setCurrentBlock('no_content');
2643 $this->tpl->setVariable('TXT_NO_CONTENT', $this->lng->txt('container_no_items'));
2644 $this->tpl->parseCurrentBlock();
2645 } else {
2646 $this->tpl->setCurrentBlock('tree_footer');
2647 $this->tpl->setVariable('TXT_COPY_ALL', $this->lng->txt('copy_all'));
2648 $this->tpl->setVariable('TXT_LINK_ALL', $this->lng->txt('link_all'));
2649 $this->tpl->setVariable('TXT_OMIT_ALL', $this->lng->txt('omit_all'));
2650 $this->tpl->parseCurrentBlock();
2651 }
2652 } else {
2653 foreach ($tree->getSubTreeTypes($source_id, array('rolf','crs')) as $type) {
2654 $copy_wizard_page = ilCopyWizardPageFactory::_getInstanceByType($source_id, $type);
2655 if (strlen($html = $copy_wizard_page->getWizardPageBlockHTML())) {
2656 $this->tpl->setCurrentBlock('obj_row');
2657 $this->tpl->setVariable('ITEM_BLOCK', $html);
2658 $this->tpl->parseCurrentBlock();
2659 }
2660 }
2661 }
2662 }
2663
2671 public function cloneAllObject()
2672 {
2675
2676 include_once('./Services/Link/classes/class.ilLink.php');
2677 include_once('Services/CopyWizard/classes/class.ilCopyWizardOptions.php');
2678
2679 $ilAccess = $this->access;
2684
2685 $new_type = $_REQUEST['new_type'];
2686 $ref_id = (int) $_GET['ref_id'];
2687 $clone_source = (int) $_REQUEST['clone_source'];
2688
2689 if (!$rbacsystem->checkAccess('create', $ref_id, $new_type)) {
2690 $ilErr->raiseError($this->lng->txt('permission_denied'));
2691 }
2692 if (!$clone_source) {
2693 ilUtil::sendFailure($this->lng->txt('select_one'));
2694 $this->createObject();
2695 return false;
2696 }
2697 if (!$ilAccess->checkAccess('write', '', $clone_source, $new_type)) {
2698 $ilErr->raiseError($this->lng->txt('permission_denied'));
2699 }
2700
2701 $options = $_POST['cp_options'] ? $_POST['cp_options'] : array();
2702 $orig = ilObjectFactory::getInstanceByRefId($clone_source);
2703 $result = $orig->cloneAllObject($_COOKIE[session_name()], $_COOKIE['ilClientId'], $new_type, $ref_id, $clone_source, $options);
2704
2705 include_once './Services/CopyWizard/classes/class.ilCopyWizardOptions.php';
2706 if (ilCopyWizardOptions::_isFinished($result['copy_id'])) {
2707 ilUtil::sendSuccess($this->lng->txt("object_duplicated"), true);
2708 $ilCtrl->setParameterByClass("ilrepositorygui", "ref_id", $result['ref_id']);
2709 $ilCtrl->redirectByClass("ilrepositorygui", "");
2710 } else {
2711 ilUtil::sendInfo($this->lng->txt("object_copy_in_progress"), true);
2712 $ilCtrl->setParameterByClass("ilrepositorygui", "ref_id", $ref_id);
2713 $ilCtrl->redirectByClass("ilrepositorygui", "");
2714 }
2715 }
2716
2717
2725 public function saveSortingObject()
2726 {
2727 include_once('Services/Container/classes/class.ilContainerSorting.php');
2728 $sorting = ilContainerSorting::_getInstance($this->object->getId());
2729
2730 // Allow comma
2731 $positions = str_replace(',', '.', $_POST['position']);
2732
2733 $sorting->savePost($positions);
2734 ilUtil::sendSuccess($this->lng->txt('cntr_saved_sorting'), true);
2735 $this->ctrl->redirect($this, "editOrder");
2736 }
2737
2738 // BEGIN WebDAV: Support a copy command in the repository
2749 public function cloneNodes($srcRef, $dstRef, &$mapping, $newName = null)
2750 {
2752
2753 // clone the source node
2754 $srcObj = ilObjectFactory::getInstanceByRefId($srcRef);
2755 error_log(__METHOD__ . ' cloning srcRef=' . $srcRef . ' dstRef=' . $dstRef . '...');
2756 $newRef = $srcObj->cloneObject($dstRef)->getRefId();
2757 error_log(__METHOD__ . ' ...cloning... newRef=' . $newRef . '...');
2758
2759 // We must immediately apply a new name to the object, to
2760 // prevent confusion of WebDAV clients about having two objects with identical
2761 // name in the repository.
2762 if (!is_null($newName)) {
2763 $newObj = ilObjectFactory::getInstanceByRefId($newRef);
2764 $newObj->setTitle($newName);
2765 $newObj->update();
2766 unset($newObj);
2767 }
2768 unset($srcObj);
2769 $mapping[$newRef] = $srcRef;
2770
2771 // clone all children of the source node
2772 $children = $tree->getChilds($srcRef);
2773 foreach ($tree->getChilds($srcRef) as $child) {
2774 // Don't clone role folders, because it does not make sense to clone local roles
2775 // FIXME - Maybe it does make sense (?)
2776 if ($child["type"] != 'rolf') {
2777 $this->cloneNodes($child["ref_id"], $newRef, $mapping);
2778 } else {
2779 if (count($rolf = $tree->getChildsByType($newRef, "rolf"))) {
2780 $mapping[$rolf[0]["ref_id"]] = $child["ref_id"];
2781 }
2782 }
2783 }
2784 error_log(__METHOD__ . ' ...cloned srcRef=' . $srcRef . ' dstRef=' . $dstRef . ' newRef=' . $newRef);
2785 return $newRef;
2786 }
2787 // END PATCH WebDAV: Support a copy command in the repository
2788
2795 public function modifyItemGUI($a_item_list_gui, $a_item_data, $a_show_path)
2796 {
2797 $lng = $this->lng;
2798
2799 if ($a_show_path) {
2800 $a_item_list_gui->addCustomProperty(
2801 $lng->txt('path'),
2802 ilContainer::buildPath($a_item_data['ref_id'], $this->object->getRefId()),
2803 false,
2804 true
2805 );
2806 }
2807 }
2808
2812 public static function _buildPath($a_ref_id, $a_course_ref_id)
2813 {
2814 global $DIC;
2815
2816 $tree = $DIC->repositoryTree();
2817
2818 $path_arr = $tree->getPathFull($a_ref_id, $a_course_ref_id);
2819 $counter = 0;
2820 foreach ($path_arr as $data) {
2821 if ($counter++) {
2822 $path .= " > ";
2823 }
2824 $path .= $data['title'];
2825 }
2826
2827 return $path;
2828 }
2829
2830 //
2831 // Style editing
2832 //
2833
2838 {
2839 $ilTabs = $this->tabs;
2840 $tpl = $this->tpl;
2841
2842 $this->checkPermission("write");
2843
2844 $this->initStylePropertiesForm();
2845 $tpl->setContent($this->form->getHTML());
2846
2847 $ilTabs->activateTab("obj_sty");
2848 }
2849
2853 public function initStylePropertiesForm()
2854 {
2856 $lng = $this->lng;
2857 $ilTabs = $this->tabs;
2859 $tpl = $this->tpl;
2860
2861 $tpl->setTreeFlatIcon("", "");
2862 $ilTabs->clearTargets();
2864 $this->object->getId(),
2865 "xhtml_page"
2866 );
2867 if ($xpage_id > 0) {
2868 $ilTabs->setBackTarget(
2869 $lng->txt("cntr_back_to_old_editor"),
2870 $ilCtrl->getLinkTarget($this, "switchToOldEditor"),
2871 "_top"
2872 );
2873 } else {
2874 $ilTabs->setBackTarget($lng->txt("back"), "./goto.php?target=" . $this->object->getType() . "_" .
2875 $this->object->getRefId(), "_top");
2876 }
2877
2878 include_once("./Services/Container/classes/class.ilContainerPageGUI.php");
2879 $page_gui = new ilContainerPageGUI($this->object->getId());
2880 $style_id = $this->object->getStyleSheetId();
2881 if (ilObject::_lookupType($style_id) == "sty") {
2882 $page_gui->setStyleId($style_id);
2883 } else {
2884 $style_id = 0;
2885 }
2886 $page_gui->setTabHook($this, "addPageTabs");
2887 $ilCtrl->getHTML($page_gui);
2888 $ilTabs->setTabActive("obj_sty");
2889
2890 include_once("./Services/Style/Content/classes/class.ilObjStyleSheet.php");
2891 $lng->loadLanguageModule("style");
2892
2893 include_once("./Services/Form/classes/class.ilPropertyFormGUI.php");
2894 $this->form = new ilPropertyFormGUI();
2895
2896 $fixed_style = $ilSetting->get("fixed_content_style_id");
2897 // $style_id = $this->object->getStyleSheetId();
2898
2899 if ($fixed_style > 0) {
2900 $st = new ilNonEditableValueGUI($lng->txt("wiki_current_style"));
2901 $st->setValue(ilObject::_lookupTitle($fixed_style) . " (" .
2902 $this->lng->txt("global_fixed") . ")");
2903 $this->form->addItem($st);
2904 } else {
2906 true,
2907 false,
2908 $_GET["ref_id"]
2909 );
2910
2911 $st_styles[0] = $this->lng->txt("default");
2912 ksort($st_styles);
2913
2914 if ($style_id > 0) {
2915 // individual style
2916 if (!ilObjStyleSheet::_lookupStandard($style_id)) {
2917 $st = new ilNonEditableValueGUI($lng->txt("style_current_style"));
2918 $st->setValue(ilObject::_lookupTitle($style_id));
2919 $this->form->addItem($st);
2920
2921 //$this->ctrl->getLinkTargetByClass("ilObjStyleSheetGUI", "edit"));
2922
2923 // delete command
2924 $this->form->addCommandButton(
2925 "editStyle",
2926 $lng->txt("style_edit_style")
2927 );
2928 $this->form->addCommandButton(
2929 "deleteStyle",
2930 $lng->txt("style_delete_style")
2931 );
2932 //$this->ctrl->getLinkTargetByClass("ilObjStyleSheetGUI", "delete"));
2933 }
2934 }
2935
2936 if ($style_id <= 0 || ilObjStyleSheet::_lookupStandard($style_id)) {
2937 $style_sel = ilUtil::formSelect(
2938 $style_id,
2939 "style_id",
2940 $st_styles,
2941 false,
2942 true
2943 );
2944 $style_sel = new ilSelectInputGUI($lng->txt("style_current_style"), "style_id");
2945 $style_sel->setOptions($st_styles);
2946 $style_sel->setValue($style_id);
2947 $this->form->addItem($style_sel);
2948 //$this->ctrl->getLinkTargetByClass("ilObjStyleSheetGUI", "create"));
2949 $this->form->addCommandButton(
2950 "saveStyleSettings",
2951 $lng->txt("save")
2952 );
2953 $this->form->addCommandButton(
2954 "createStyle",
2955 $lng->txt("sty_create_ind_style")
2956 );
2957 }
2958 }
2959 $this->form->setTitle($lng->txt("obj_sty"));
2960 $this->form->setFormAction($ilCtrl->getFormAction($this));
2961 }
2962
2966 public function createStyleObject()
2967 {
2969
2970 $ilCtrl->redirectByClass("ilobjstylesheetgui", "create");
2971 }
2972
2976 public function editStyleObject()
2977 {
2979
2980 $ilCtrl->redirectByClass("ilobjstylesheetgui", "edit");
2981 }
2982
2986 public function deleteStyleObject()
2987 {
2989
2990 $ilCtrl->redirectByClass("ilobjstylesheetgui", "delete");
2991 }
2992
2996 public function saveStyleSettingsObject()
2997 {
2999
3000 include_once("./Services/Style/Content/classes/class.ilObjStyleSheet.php");
3001 if ($ilSetting->get("fixed_content_style_id") <= 0 &&
3002 (ilObjStyleSheet::_lookupStandard($this->object->getStyleSheetId())
3003 || $this->object->getStyleSheetId() == 0)) {
3004 $this->object->setStyleSheetId(ilUtil::stripSlashes($_POST["style_id"]));
3005 $this->object->update();
3006 ilUtil::sendSuccess($this->lng->txt("msg_obj_modified"), true);
3007 }
3008 $this->ctrl->redirect($this, "editStyleProperties");
3009 }
3010
3014 public function getAsynchItemListObject()
3015 {
3017
3018 $ref_id = $_GET["cmdrefid"];
3021
3022 // this should be done via container-object->getSubItem in the future
3023 $data = array("child" => $ref_id, "ref_id" => $ref_id, "obj_id" => $obj_id,
3024 "type" => $type);
3025 include_once 'Services/Object/classes/class.ilObjectListGUIFactory.php';
3027 $item_list_gui->setContainerObject($this);
3028
3029 $item_list_gui->enableComments(true);
3030 $item_list_gui->enableNotes(true);
3031 $item_list_gui->enableTags(true);
3032
3033 $this->modifyItemGUI($item_list_gui, $data, false);
3034 $html = $item_list_gui->getListItemHTML(
3035 $ref_id,
3036 $obj_id,
3037 "",
3038 "",
3039 true,
3040 true
3041 );
3042
3043 // include plugin slot for async item list
3044 $ilPluginAdmin = $this->plugin_admin;
3045 $pl_names = $ilPluginAdmin->getActivePluginsForSlot(IL_COMP_SERVICE, "UIComponent", "uihk");
3046 foreach ($pl_names as $pl) {
3047 $ui_plugin = ilPluginAdmin::getPluginObject(IL_COMP_SERVICE, "UIComponent", "uihk", $pl);
3048 $gui_class = $ui_plugin->getUIClassInstance();
3049 $resp = $gui_class->getHTML("Services/Container", "async_item_list", array("html" => $html));
3050 if ($resp["mode"] != ilUIHookPluginGUI::KEEP) {
3051 $html = $gui_class->modifyHTML($html, $resp);
3052 }
3053 }
3054
3055 echo $html;
3056 exit;
3057 }
3058
3063 protected function showPasswordInstructionObject($a_init = true)
3064 {
3065 global $DIC;
3066 $tpl = $this->tpl;
3067 $ilToolbar = $this->toolbar;
3068
3069 if ($a_init) {
3070 ilUtil::sendInfo($this->lng->txt('webdav_pwd_instruction'));
3072 }
3073
3074 $uri_builder = new ilWebDAVUriBuilder($DIC->http()->request());
3075 $href = $uri_builder->getUriToMountInstructionModalByRef($this->object->getRefId());
3076
3077 $btn = ilButton::getInstance();
3078 $btn->setCaption('mount_webfolder');
3079 $btn->setOnClick("triggerWebDAVModal('$href')");
3080 $ilToolbar->addButtonInstance($btn);
3081
3082 $tpl->setContent($this->form->getHTML());
3083 }
3084
3089 protected function initFormPasswordInstruction()
3090 {
3091 include_once("Services/Form/classes/class.ilPropertyFormGUI.php");
3092 $this->form = new ilPropertyFormGUI();
3093 $this->form->setFormAction($this->ctrl->getFormAction($this));
3094
3095 // new password
3096 $ipass = new ilPasswordInputGUI($this->lng->txt("desired_password"), "new_password");
3097 $ipass->setRequired(true);
3098
3099 $this->form->addItem($ipass);
3100 $this->form->addCommandButton("savePassword", $this->lng->txt("save"));
3101 $this->form->addCommandButton('cancel', $this->lng->txt('cancel'));
3102
3103 $this->form->setTitle($this->lng->txt("chg_ilias_and_webfolder_password"));
3104 $this->form->setFormAction($this->ctrl->getFormAction($this));
3105
3106 return $this->form;
3107 }
3108
3113 protected function savePasswordObject()
3114 {
3116
3117 $form = $this->initFormPasswordInstruction();
3118 if ($form->checkInput()) {
3119 $ilUser->resetPassword($this->form->getInput('new_password'), $this->form->getInput('new_password'));
3120 ilUtil::sendSuccess($this->lng->txt('webdav_pwd_instruction_success'), true);
3121 $this->showPasswordInstructionObject(false);
3122 return true;
3123 }
3124 $form->setValuesByPost();
3126 }
3127
3134 public function redrawListItemObject()
3135 {
3136 $tpl = $this->tpl;
3137
3138 $html = null;
3139
3140 $item_data = $this->object->getSubItems(false, false, (int) $_GET["child_ref_id"]);
3141 $container_view = $this->getContentGUI();
3142
3143 // list item is session material (not part of "_all"-items - see below)
3144 include_once './Modules/Session/classes/class.ilEventItems.php';
3145 $event_items = ilEventItems::_getItemsOfContainer($this->object->getRefId());
3146 if (in_array((int) $_GET["child_ref_id"], $event_items)) {
3147 include_once('./Services/Object/classes/class.ilObjectActivation.php');
3148 foreach ($this->object->items["sess"] as $id) {
3149 $items = ilObjectActivation::getItemsByEvent($id['obj_id']);
3150 foreach ($items as $event_item) {
3151 if ($event_item["child"] == (int) $_GET["child_ref_id"]) {
3152 // sessions
3153 if ((int) $_GET["parent_ref_id"]) {
3154 $event_item["parent"] = (int) $_GET["parent_ref_id"];
3155 }
3156 $html = $container_view->renderItem($event_item);
3157 }
3158 }
3159 }
3160 }
3161
3162 // "normal" list item
3163 if (!$html) {
3164 foreach ($this->object->items["_all"] as $id) {
3165 if ($id["child"] == (int) $_GET["child_ref_id"]) {
3166 $html = $container_view->renderItem($id);
3167 }
3168 }
3169 }
3170
3171 if ($html) {
3172 echo $html;
3173
3174 // we need to add onload code manually (rating, comments, etc.)
3175 echo $tpl->getOnLoadCodeForAsynch();
3176 }
3177
3178 exit;
3179 }
3180
3181 // begin-patch fm
3188 protected function initHeaderAction($a_sub_type = null, $a_sub_id = null)
3189 {
3190 $lg = parent::initHeaderAction($a_sub_type, $a_sub_id);
3191
3192 // begin-patch fm
3193 include_once './Services/WebServices/FileManager/classes/class.ilFMSettings.php';
3194 if (ilFMSettings::getInstance()->isEnabled()) {
3195 if ($lg instanceof ilObjectListGUI) {
3196 $lg->addCustomCommand($this->ctrl->getLinkTarget($this, 'fileManagerLaunch'), 'fm_start', '_blank');
3197 }
3198 }
3199 // end-patch fm
3200 return $lg;
3201 }
3202
3206 protected function fileManagerLaunchObject()
3207 {
3209
3210 $tpl = new ilTemplate('tpl.fm_launch_ws.html', false, false, 'Services/WebServices/FileManager');
3211 $tpl->setVariable('JNLP_URL', ILIAS_HTTP_PATH . '/Services/WebServices/FileManager/lib/dist/FileManager.jnlp');
3212 $tpl->setVariable('SESSION_ID', $_COOKIE[session_name()] . '::' . CLIENT_ID);
3213 $tpl->setVariable('UID', $ilUser->getId());
3214 $tpl->setVariable('REF_ID', $this->object->getRefId());
3215 $tpl->setVariable('WSDL_URI', ILIAS_HTTP_PATH . '/webservice/soap/server.php?wsdl');
3216 $tpl->setVariable('LOCAL_FRAME', ilFMSettings::getInstance()->isLocalFSEnabled() ? 1 : 0);
3217 $tpl->setVariable('REST_URI', ILIAS_HTTP_PATH . '/Services/WebServices/Rest/server.php');
3218 $tpl->setVariable('FILE_LOCKS', 0);
3219 $tpl->setVariable('UPLOAD_FILESIZE', ilFMSettings::getInstance()->getMaxFileSize());
3220
3221 include_once("./Modules/SystemFolder/classes/class.ilObjSystemFolder.php");
3222 $header_top_title = ilObjSystemFolder::_getHeaderTitle();
3223 $tpl->setVariable('HEADER_TITLE', $header_top_title ? $header_top_title : '');
3224 echo $tpl->get();
3225 exit;
3226 }
3227 // begin-patch fm
3228
3234 protected function initEditForm()
3235 {
3236 $lng = $this->lng;
3238
3239 $lng->loadLanguageModule($this->object->getType());
3240
3241 include_once("Services/Form/classes/class.ilPropertyFormGUI.php");
3242 $form = new ilPropertyFormGUI();
3243 $form->setFormAction($this->ctrl->getFormAction($this, "update"));
3244 $form->setTitle($this->lng->txt($this->object->getType() . "_edit"));
3245
3246 $this->initFormTitleDescription($form);
3247
3248 $this->initEditCustomForm($form);
3249
3250 $form->addCommandButton("update", $this->lng->txt("save"));
3251 //$this->form->addCommandButton("cancelUpdate", $lng->txt("cancel"));
3252
3253 return $form;
3254 }
3255
3260 public function initFormTitleDescription(ilPropertyFormGUI $form)
3261 {
3262
3263 if ($this->getCreationMode() != true) {
3265 $trans = $this->object->getObjectTranslation();
3266 }
3267 $title = new ilTextInputGUI($this->lng->txt("title"), "title");
3268 $title->setRequired(true);
3269 $title->setSize(min(40, ilObject::TITLE_LENGTH));
3270 $title->setMaxLength(ilObject::TITLE_LENGTH);
3271 $form->addItem($title);
3272
3273 if ($this->getCreationMode() != true && sizeof($trans->getLanguages()) > 1) {
3274 include_once('Services/MetaData/classes/class.ilMDLanguageItem.php');
3275 $languages = ilMDLanguageItem::_getLanguages();
3276 $title->setInfo($this->lng->txt("language") . ": " . $languages[$trans->getDefaultLanguage()] .
3277 ' <a href="' . $this->ctrl->getLinkTargetByClass("ilobjecttranslationgui", "") .
3278 '">&raquo; ' . $this->lng->txt("obj_more_translations") . '</a>');
3279
3280 unset($languages);
3281 }
3282 $desc = new ilTextAreaInputGUI($this->lng->txt("description"), "desc");
3283 $desc->setRows(2);
3284 $desc->setCols(40);
3285 $form->addItem($desc);
3286
3287 if ($this->getCreationMode() != true) {
3288 $title->setValue($trans->getDefaultTitle());
3289 $desc->setValue($trans->getDefaultDescription());
3290 }
3291 }
3292
3293
3299 protected function initSortingForm(ilPropertyFormGUI $form, array $a_sorting_settings)
3300 {
3301 include_once('Services/Container/classes/class.ilContainerSortingSettings.php');
3302 include_once './Services/Container/classes/class.ilContainer.php';
3303
3304 $settings = new ilContainerSortingSettings($this->object->getId());
3305 $sort = new ilRadioGroupInputGUI($this->lng->txt('sorting_header'), "sorting");
3306
3307 if (in_array(ilContainer::SORT_INHERIT, $a_sorting_settings)) {
3308 $sort_inherit = new ilRadioOption();
3309 $sort_inherit->setTitle(
3310 $this->lng->txt('sort_inherit_prefix') .
3313 $this->object->getId()
3314 )
3315 ) . ') '
3316 );
3317 $sort_inherit->setValue(ilContainer::SORT_INHERIT);
3318 $sort_inherit->setInfo($this->lng->txt('sorting_info_inherit'));
3319 $sort->addOption($sort_inherit);
3320 }
3321 if (in_array(ilContainer::SORT_TITLE, $a_sorting_settings)) {
3322 $sort_title = new ilRadioOption(
3323 $this->lng->txt('sorting_title_header'),
3325 );
3326 $sort_title->setInfo($this->lng->txt('sorting_info_title'));
3327
3328 $this->initSortingDirectionForm($settings, $sort_title, 'title');
3329 $sort->addOption($sort_title);
3330 }
3331 if (in_array(ilContainer::SORT_CREATION, $a_sorting_settings)) {
3332 $sort_activation = new ilRadioOption($this->lng->txt('sorting_creation_header'), ilContainer::SORT_CREATION);
3333 $sort_activation->setInfo($this->lng->txt('sorting_creation_info'));
3334 $this->initSortingDirectionForm($settings, $sort_activation, 'creation');
3335 $sort->addOption($sort_activation);
3336 }
3337 if (in_array(ilContainer::SORT_ACTIVATION, $a_sorting_settings)) {
3338 $sort_activation = new ilRadioOption($this->lng->txt('crs_sort_activation'), ilContainer::SORT_ACTIVATION);
3339 $sort_activation->setInfo($this->lng->txt('crs_sort_timing_info'));
3340 $this->initSortingDirectionForm($settings, $sort_activation, 'activation');
3341 $sort->addOption($sort_activation);
3342 }
3343 if (in_array(ilContainer::SORT_MANUAL, $a_sorting_settings)) {
3344 $sort_manual = new ilRadioOption(
3345 $this->lng->txt('sorting_manual_header'),
3347 );
3348 $sort_manual->setInfo($this->lng->txt('sorting_info_manual'));
3349 $this->initManualSortingOptionForm($settings, $sort_manual, "manual", $a_sorting_settings);
3350 $sort->addOption($sort_manual);
3351 }
3352
3353 // Handle moved containers and there possibly invalid values
3354 if (in_array($settings->getSortMode(), $a_sorting_settings)) {
3355 $sort->setValue($settings->getSortMode());
3356 } else {
3357 $sort->setValue(ilContainer::SORT_TITLE);
3358 }
3359 $form->addItem($sort);
3360
3361 return $form;
3362 }
3363
3370 {
3371 $lpres = new ilRadioGroupInputGUI($this->lng->txt('cont_list_presentation'), "list_presentation");
3372
3373 $item_list = new ilRadioOption($this->lng->txt('cont_item_list'), "");
3374 //$item_list->setInfo($this->lng->txt('cont_item_list_info'));
3375 $lpres->addOption($item_list);
3376
3377 $tile_view = new ilRadioOption($this->lng->txt('cont_tile_view'), "tile");
3378 //$tile_view->setInfo($this->lng->txt('cont_tile_view_info'));
3379 $lpres->addOption($tile_view);
3380
3381 $lpres->setValue(
3382 ilContainer::_lookupContainerSetting($this->object->getId(), "list_presentation")
3383 );
3384
3385 $form->addItem($lpres);
3386
3387 return $form;
3388 }
3389
3394 protected function saveListPresentation(ilPropertyFormGUI $form)
3395 {
3396 $val = ($form->getInput('list_presentation') == "tile")
3397 ? "tile"
3398 : "";
3399 ilContainer::_writeContainerSetting($this->object->getId(), "list_presentation", $val);
3400 }
3401
3402
3407 protected function initSortingDirectionForm(ilContainerSortingSettings $sorting_settings, $element, $a_prefix)
3408 {
3409 if ($a_prefix == 'manual') {
3410 $txt = $this->lng->txt('sorting_new_items_direction');
3411 } else {
3412 $txt = $this->lng->txt('sorting_direction');
3413 }
3414
3415 $direction = new ilRadioGroupInputGUI($txt, $a_prefix . '_sorting_direction');
3416 $direction->setValue($sorting_settings->getSortDirection());
3417 $direction->setRequired(true);
3418
3419 // asc
3420 $asc = new ilRadioOption(
3421 $this->lng->txt('sorting_asc'),
3423 );
3424 $direction->addOption($asc);
3425
3426 // desc
3427 $desc = new ilRadioOption(
3428 $this->lng->txt('sorting_desc'),
3430 );
3431 $direction->addOption($desc);
3432
3433 $element->addSubItem($direction);
3434
3435 return $element;
3436 }
3437
3444 $element,
3445 $a_prefix,
3446 $a_sorting_settings
3447 ) {
3448 $position = new ilRadioGroupInputGUI($this->lng->txt('sorting_new_items_position'), $a_prefix . '_new_items_position');
3449 $position->setValue($settings->getSortNewItemsPosition());
3450 $position->setRequired(true);
3451
3452 //new items insert on top
3453 $new_top = new ilRadioOption(
3454 $this->lng->txt('sorting_new_items_at_top'),
3456 );
3457
3458 $position->addOption($new_top);
3459
3460 //new items insert at bottom
3461 $new_bottom = new ilRadioOption(
3462 $this->lng->txt('sorting_new_items_at_bottom'),
3464 );
3465
3466 $position->addOption($new_bottom);
3467
3468 $element->addSubItem($position);
3469
3470 $order = new ilRadioGroupInputGUI($this->lng->txt('sorting_new_items_order'), $a_prefix . '_new_items_order');
3471 $order->setValue($settings->getSortNewItemsOrder());
3472 $order->setRequired(true);
3473
3474 if (in_array(ilContainer::SORT_TITLE, $a_sorting_settings)) {
3475 //new items sort in alphabetical order
3476 $new_title = new ilRadioOption(
3477 $this->lng->txt('sorting_title_header'),
3479 );
3480
3481 $order->addOption($new_title);
3482 }
3483
3484 if (in_array(ilContainer::SORT_CREATION, $a_sorting_settings)) {
3485 //new items sort by creation date
3486 $new_creation = new ilRadioOption(
3487 $this->lng->txt('sorting_creation_header'),
3489 );
3490
3491 $order->addOption($new_creation);
3492 }
3493
3494
3495 if (in_array(ilContainer::SORT_ACTIVATION, $a_sorting_settings)) {
3496 //new items by activation
3497 $new_activation = new ilRadioOption(
3498 $this->lng->txt('crs_sort_activation'),
3500 );
3501
3502 $order->addOption($new_activation);
3503 }
3504
3505 $element->addSubItem($order);
3506
3507 $this->initSortingDirectionForm($settings, $element, 'manual');
3508
3509 return $element;
3510 }
3511
3516 protected function saveSortingSettings(ilPropertyFormGUI $form)
3517 {
3518 include_once('Services/Container/classes/class.ilContainerSortingSettings.php');
3519 $settings = new ilContainerSortingSettings($this->object->getId());
3520 $settings->setSortMode($form->getInput("sorting"));
3521
3522 switch ($form->getInput('sorting')) {
3524 $settings->setSortDirection($form->getInput('title_sorting_direction'));
3525 break;
3527 $settings->setSortDirection($form->getInput('activation_sorting_direction'));
3528 break;
3530 $settings->setSortDirection($form->getInput('creation_sorting_direction'));
3531 break;
3533 $settings->setSortNewItemsPosition($form->getInput('manual_new_items_position'));
3534 $settings->setSortNewItemsOrder($form->getInput('manual_new_items_order'));
3535 $settings->setSortDirection($form->getInput('manual_sorting_direction'));
3536 break;
3537 }
3538
3539 $settings->update();
3540 }
3541
3547 public function trashObject()
3548 {
3549 $tpl = $this->tpl;
3550
3551 $this->tabs_gui->activateTab('trash');
3552
3553 $trash_table = new \ilTrashTableGUI($this, 'trash', $this->object->getRefId());
3554 $trash_table->init();
3555 $trash_table->parse();
3556
3557 $trash_table->setFilterCommand('trashApplyFilter');
3558 $trash_table->setResetCommand('trashResetFilter');
3559
3560 $tpl->setContent($trash_table->getHTML());
3561 }
3562
3566 public function trashApplyFilterObject()
3567 {
3568 $this->trashHandleFilter(true, false);
3569 }
3570
3574 public function trashResetFilterObject()
3575 {
3576 $this->trashHandleFilter(false, true);
3577 }
3578
3582 protected function trashHandleFilter(bool $action_apply, bool $action_reset)
3583 {
3584 $trash_table = new \ilTrashTableGUI($this, 'trash', $this->object->getRefId());
3585 $trash_table->init();
3586 $trash_table->resetOffset();
3587 if ($action_reset) {
3588 $trash_table->resetFilter();
3589 }
3590 if ($action_apply) {
3591 $trash_table->writeFilterToSession();
3592 }
3593 $this->trashObject();
3594 }
3595
3601 public function removeFromSystemObject()
3602 {
3603 $ru = new ilRepUtilGUI($this);
3604 $ru->removeObjectsFromSystem($_POST["trash_id"]);
3605 $this->ctrl->redirect($this, "trash");
3606 }
3607
3611 protected function restoreToNewLocationObject(\ilPropertyFormGUI $form = null)
3612 {
3613 $this->tabs_gui->activateTab('trash');
3614
3615 $ru = new \ilRepUtilGUI($this);
3616 $ru->restoreToNewLocation();
3617 }
3618
3619
3623 public function undeleteObject()
3624 {
3625 $ru = new ilRepUtilGUI($this);
3626 $ru->restoreObjects($_GET["ref_id"], $_POST["trash_id"]);
3627 $this->ctrl->redirect($this, "trash");
3628 }
3629
3634 {
3635 $lng = $this->lng;
3636 include_once("./Services/Repository/classes/class.ilRepUtilGUI.php");
3637
3638 if (!isset($_POST["trash_id"])) {
3639 ilUtil::sendFailure($lng->txt("no_checkbox"), true);
3640 $this->ctrl->redirect($this, "trash");
3641 }
3642
3643 $ru = new ilRepUtilGUI($this);
3644 $ru->confirmRemoveFromSystemObject($_POST["trash_id"]);
3645 }
3646
3651 protected function getTreeSelectorGUI($cmd)
3652 {
3653 include_once("./Services/Repository/classes/class.ilRepositorySelectorExplorerGUI.php");
3654 $exp = new ilRepositorySelectorExplorerGUI($this, "showPasteTree");
3655 // TODO: The study programme 'prg' is not included here, as the
3656 // ilRepositorySelectorExplorerGUI only handles static rules for
3657 // parent-child-relations and not the dynamic relationsships
3658 // required for the SP (see #16909).
3659 $exp->setTypeWhiteList(array("root", "cat", "grp", "crs", "fold"));
3660
3661 // Not all types are allowed in the LearningSequence
3662 // Extend whitelist, if all selected types are possible subojects of LSO
3663 if (in_array($_SESSION["clipboard"]["cmd"], ["link", "cut"])) {
3664 $lso_types = array_keys($this->obj_definition->getSubObjects('lso'));
3665 $refs = $_SESSION["clipboard"]["ref_ids"];
3666 $allow_lso = true;
3667 foreach ($refs as $item_ref_id) {
3668 $type = ilObject::_lookupType($item_ref_id, true);
3669 if (!in_array($type, $lso_types)) {
3670 $allow_lso = false;
3671 }
3672 }
3673 if ($allow_lso) {
3674 $whitelist = $exp->getTypeWhiteList();
3675 $whitelist[] = 'lso';
3676 $exp->setTypeWhiteList($whitelist);
3677 }
3678 }
3679
3680 if ($cmd == "link") {
3681 $exp->setSelectMode("nodes", true);
3682 return $exp;
3683 } else {
3684 $exp->setSelectMode("nodes[]", false);
3685 return $exp;
3686 }
3687 }
3688
3692 public function setSideColumnReturn()
3693 {
3694 $this->ctrl->setReturn($this, "");
3695 }
3696
3700 protected function initFilter()
3701 {
3702 global $DIC;
3703
3704
3705 if (!$this->object || !ilContainer::_lookupContainerSetting($this->object->getId(), "filter", false)) {
3706 return;
3707 }
3708
3709 $filter_service = $this->container_filter_service;
3710 $request = $DIC->http()->request();
3711
3712 $filter = $filter_service->util()->getFilterForRefId(
3713 $this->ref_id,
3714 $DIC->ctrl()->getLinkTarget($this, "render", "", true),
3715 (bool) $this->isActiveAdministrationPanel()
3716 );
3717
3718
3719 $filter_data = [];
3720
3721 // @todo: this is something we need to do better
3722 if ($request->getMethod() == "POST" && $_GET["cmd"] == "render") {
3723 $filter_data = $DIC->uiService()->filter()->getData($filter);
3724 } else {
3726 foreach ($filter->getInputs() as $k => $i) {
3727 $filter_data[$k] = $i->getValue();
3728 }
3729 }
3730
3731
3732 $this->container_user_filter = $filter_service->userFilter($filter_data);
3733 $this->ui_filter = $filter;
3734 }
3735
3736
3740 protected function showContainerFilter()
3741 {
3742 global $DIC;
3743
3744 if (!is_null($this->ui_filter)) {
3745 $renderer = $DIC->ui()->renderer();
3746
3748 $main_tpl = $this->tpl;
3749 $main_tpl->setFilter($renderer->render($this->ui_filter));
3750
3751 if ($this->container_user_filter->isEmpty() && !ilContainer::_lookupContainerSetting($this->object->getId(), "filter_show_empty", false)) {
3752 ilUtil::sendInfo($this->lng->txt("cont_filter_empty"));
3753 }
3754 }
3755 }
3756
3757
3761 public function getAdminTabs()
3762 {
3764
3765 if ($this->checkPermissionBool("visible,read")) {
3766 $this->tabs_gui->addTab(
3767 'view',
3768 $this->lng->txt('view'),
3769 $this->ctrl->getLinkTarget($this, 'view')
3770 );
3771 }
3772
3773 // Always show container trash
3774 $this->tabs_gui->addTab(
3775 'trash',
3776 $this->lng->txt('trash'),
3777 $this->ctrl->getLinkTarget($this, 'trash')
3778 );
3779
3780 if ($this->checkPermissionBool("edit_permission")) {
3781 $this->tabs_gui->addTab(
3782 'perm_settings',
3783 $this->lng->txt('perm_settings'),
3784 $this->ctrl->getLinkTargetByClass(
3785 [
3786 get_class($this),
3787 'ilpermissiongui'
3788 ],
3789 'perm'
3790 )
3791 );
3792 }
3793 }
3794}
$result
user()
Definition: user.php:4
if(!defined('PATH_SEPARATOR')) $GLOBALS['_PEAR_default_error_mode']
Definition: PEAR.php:64
$_GET["client_id"]
$_POST["username"]
$_SESSION["AccountId"]
An exception for terminatinating execution or to throw for unit testing.
const IL_COMP_SERVICE
error($a_errmsg)
set error message @access public
static getInstance()
static _recordReadEvent( $a_type, $a_ref_id, $obj_id, $usr_id, $isCatchupWriteEvents=true, $a_ext_rc=false, $a_ext_time=false)
Records a read event and catches up with write events.
static _catchupWriteEvents($obj_id, $usr_id, $timestamp=null)
Catches up with all write events which occured before the specified timestamp.
static _recordWriteEvent($obj_id, $usr_id, $action, $parent_obj_id=null)
Records a write event.
Column user interface class.
setBlockProperty($a_block_type, $a_property, $a_value)
This function is supposed to be used for block type specific properties, that should be passed to ilB...
setRepositoryItems($a_repositoryitems)
Set Repository Items.
setAdminCommands($a_admincommands)
Set Administration Commmands.
static _adjustMovedObjectConditions($a_ref_id)
In the moment it is not allowed to create preconditions on objects that are located outside of a cour...
Container filter service factory.
Class ilContainerGUI.
clearObject()
clear clipboard and go back to last object
saveSortingObject()
Save Sorting.
afterUpdate()
Post (successful) object update hook.
trashApplyFilterObject()
trash table apply filter
editPageFrameObject()
show page editor frameset
clipboardObject()
show clipboard
getAsynchItemListObject()
Get item list command drop down asynchronously.
savePasswordObject()
Save password.
cloneWizardPageTreeObject()
@access public
restoreToNewLocationObject(\ilPropertyFormGUI $form=null)
setContentSubTabs()
Set content sub tabs.
setSideColumnReturn()
Set return point for side column actions.
getBucketTitle()
get proper label to add in the background task popover
initFormPasswordInstruction()
Init password form.
initEditForm()
Init object edit form.
& forwardToPageObject()
forward command to page object
getEditFormValues()
Get values for edit form.
disableAdministrationPanelObject()
enable administration panel
trashObject()
Show trash content of object.
static _buildPath($a_ref_id, $a_course_ref_id)
build path
initStylePropertiesForm()
Init style properties form.
__construct($a_data, $a_id, $a_call_by_reference=true, $a_prepare_output=true)
Constructor @access public.
cutObject()
cut object(s) out from a container and write the information to clipboard
confirmRemoveFromSystemObject()
confirmation screen remove from system
showPasteTreeObject()
Show paste tree.
getContentGUI()
Get content gui object.
initSortingForm(ilPropertyFormGUI $form, array $a_sorting_settings)
Append sorting settings to property form.
addHeaderRow(&$a_tpl, $a_type, $a_show_image=true)
adds a header row to a block template
cancelMoveLinkObject()
Cancel move|link empty clipboard and return to parent.
allowBlocksConfigure()
Standard is to allow blocks configuration.
isActiveOrdering()
Check if ordering is enabled.
cloneNodes($srcRef, $dstRef, &$mapping, $newName=null)
Recursively clones all nodes of the RBAC tree.
getContainerPageHTML()
Get container page HTML.
trashHandleFilter(bool $action_apply, bool $action_reset)
initManualSortingOptionForm(ilContainerSortingSettings $settings, $element, $a_prefix, $a_sorting_settings)
Add manual sorting options.
clearAdminCommandsDetermination()
cleaer administration commands determination
switchToOldEditorObject()
Switch to old page editor.
addStandardContainerSubTabs($a_include_view=true)
Add standar container subtabs for view, manage, oderdering and text/media editor link.
renderBlockAsynchObject()
render the object
& newBlockTemplate()
determin admin commands
showPermanentLink()
show permanent link
redrawListItemObject()
Redraw a list item (ajax)
undeleteObject()
Get objects back from trash.
prepareOutput($a_show_subobjects=true)
prepare output
showPasswordInstructionObject($a_init=true)
Show webdav password instruction.
fileManagerLaunchObject()
Launch jnlp.
pasteObject()
paste object from clipboard to current place Depending on the chosen command the object(s) are linked...
editStylePropertiesObject()
Edit style properties.
editStyleObject()
Edit Style.
saveStyleSettingsObject()
Save style settings.
modifyItemGUI($a_item_list_gui, $a_item_data, $a_show_path)
Modify list gui for presentation in container.
setPageEditorTabs()
Add page editor tabs.
useNewEditorObject()
Use new editor (-> delete xhtml content page)
initSortingDirectionForm(ilContainerSortingSettings $sorting_settings, $element, $a_prefix)
Add sorting direction.
renderObject()
render the object
addPageTabs()
Add page tabs.
cloneWizardPageObject($a_tree_view=true)
Show clone wizard page for container objects.
addMessageRow(&$a_tpl, $a_message, $a_type)
add message row
editOrderObject()
Edit order.
setTitleAndDescription()
called by prepare output
saveListPresentation(ilPropertyFormGUI $form)
Save list presentation setting.
initHeaderAction($a_sub_type=null, $a_sub_id=null)
Add file manager link.
forwardToStyleSheet()
Forward to style object.
isActiveItemOrdering()
Check if item ordering is enabled.
getAdminTabs()
administration tabs show only permissions and trash folder
initListPresentationForm(ilPropertyFormGUI $form)
Add list presentation settings to form.
allowBlocksMoving()
Standard is to allow blocks moving.
enableAdministrationPanelObject()
enable administration panel
copyObject()
Copy object(s) out from a container and write the information to clipboard It is not possible to copy...
setColumnSettings(ilColumnGUI $column_gui)
May be overwritten in subclasses.
showPossibleSubObjects()
show possible sub objects selection list
linkObject()
create an new reference of an object in tree it's like a hard link of unix
trashResetFilterObject()
trash table reset filter
deleteStyleObject()
Delete Style.
cloneWizardPageListObject()
@access public
switchToStdEditorObject()
Switch to standard page editor.
createStyleObject()
Create Style.
editPageContentObject()
edit page content (for repository root node and categories)
keepObjectsInClipboardObject()
Keep objects in the clipboard.
showAdministrationPanel()
show administration panel
saveSortingSettings(ilPropertyFormGUI $form)
Save sorting settings.
removeFromSystemObject()
remove objects from trash bin and all entries therefore every object needs a specific deleteObject() ...
executeCommand()
execute command note: this method is overwritten in all container objects
cloneAllObject()
Clone all object Overwritten method for copying container objects.
getTabs()
common tabs for all container objects (should be called at the end of child getTabs() method
GUI class for course objective view.
Container page GUI class.
Container page object.
static lookupSortModeFromParentContainer($a_obj_id)
Lookup sort mode from parent container.
static _lookupSortMode($a_obj_id)
lookup sort mode
static sortModeToString($a_sort_mode)
get String representation of sort mode
static _getInstance($a_obj_id)
get instance by obj_id
static _lookupContainerSetting($a_id, $a_keyword, $a_default_value=null)
Lookup a container setting.
const SORT_NEW_ITEMS_ORDER_ACTIVATION
const SORT_NEW_ITEMS_ORDER_TITLE
const SORT_NEW_ITEMS_ORDER_CREATION
static _writeContainerSetting($a_id, $a_keyword, $a_value)
const SORT_NEW_ITEMS_POSITION_BOTTOM
const SORT_NEW_ITEMS_POSITION_TOP
static _isFinished($a_copy_id)
check if copy is finished
static _getInstanceByType($a_source_id, $a_item_type)
Get instance by type.
GUI class for didactic template settings inside repository objects.
static lookupTemplateId($a_ref_id)
Lookup template id @global ilDB $ilDB.
static _getItemsOfContainer($a_ref_id)
static getInstance()
Get singleton instance.
static _getFrame($a_class, $a_type='')
Get content frame name.
special template class to simplify handling of ITX/PEAR
static showMemberViewSwitch($a_ref_id)
Show member view switch.
This class represents a non editable value in a property form.
static _getUsedHTMLTagsAsString($a_module="")
Returns a string of all allowed HTML tags for text editing.
static _appendNumberOfCopyToFilename($a_file_name, $nth_copy=null, $a_handle_extension=false)
Appends the text " - Copy" to a filename in the language of the current user.
Class ilObjStyleSheetGUI.
static _lookupStandard($a_id)
Lookup standard flag.
static getSyntaxStylePath()
get syntax style path
static _getStandardStyles( $a_exclude_default_style=false, $a_include_deactivated=false, $a_scope=0)
Get standard styles.
static getEffectiveContentStyleId($a_style_id, $a_type="")
Get effective Style Id.
static getContentStylePath($a_style_id, $add_random=true, $add_token=true)
get content style path
static getItemsByEvent($a_event_id)
Get session material / event items.
Render add new item selector.
static getInstanceByRefId($a_ref_id, $stop_on_error=true)
get an instance of an Ilias object by reference id
Class ilObjectGUI Basic methods of all Output classes.
checkPermission($a_perm, $a_cmd="", $a_type="", $a_ref_id=null)
Check permission and redirect on error.
getDidacticTemplateVar($a_type)
Get didactic template setting from creation screen.
getCreationMode()
get creation mode
checkPermissionBool($a_perm, $a_cmd="", $a_type="", $a_ref_id=null)
Check permission.
createObject()
create new object form
initEditCustomForm(ilPropertyFormGUI $a_form)
Add custom fields to update form.
static _getListGUIByType($a_type, $a_context=ilObjectListGUI::CONTEXT_REPOSITORY)
Class ilObjectListGUI.
static getInstance($a_obj_id)
Get instance.
static _lookupObjId($a_id)
const TITLE_LENGTH
max length of object title
static _lookupTitle($a_id)
lookup object title
static _lookupObjectId($a_ref_id)
lookup object id
static _lookupType($a_id, $a_reference=false)
lookup object type
static _exists($a_parent_type, $a_id, $a_lang="", $a_no_cache=false)
Checks whether page exists.
static _existsAndNotEmpty($a_parent_type, $a_id, $a_lang="-")
checks whether page exists and is not empty (may return true on some empty pages)
This class represents a password property in a property form.
static getPluginObject($a_ctype, $a_cname, $a_slot_id, $a_pname)
Get Plugin Object.
This class represents a property form user interface.
addItem($a_item)
Add Item (Property, SectionHeader).
getInput($a_post_var, $ensureValidation=true)
Returns the value of a HTTP-POST variable, identified by the passed id.
static _getRTEClassname()
static _cleanupMediaObjectUsage($a_text, $a_usage_type, $a_usage_id)
Synchronises appearances of media objects in $a_text with media object usage table.
This class represents a property in a property form.
This class represents an option in a radio group.
static add($a_action, $a_ref_id, array $a_diff, $a_source_ref_id=false)
const LINK_OBJECT
static gatherFaPa($a_ref_id, array $a_role_ids, $a_add_action=false)
static isActive()
Repository GUI Utilities.
Explorer for selecting repository items.
This class represents a selection list property in a property form.
ILIAS Setting Class.
static getInstance()
Factory.
special template class to simplify handling of ITX/PEAR
This class represents a text area property in a property form.
This class represents a text property in a property form.
static getStyleSheetLocation($mode="output", $a_css_name="", $a_css_location="")
get full style sheet file name (path inclusive) of current user
static sendFailure($a_info="", $a_keep=false)
Send Failure Message to Screen.
static stripSlashes($a_str, $a_strip_html=true, $a_allow="")
strip slashes if magic qoutes is enabled
static formSelect( $selected, $varname, $options, $multiple=false, $direct_text=false, $size="0", $style_class="", $attribs="", $disabled=false)
Builds a select form field with options and shows the selected option first.
static sendInfo($a_info="", $a_keep=false)
Send Info Message to Screen.
static getImagePath($img, $module_path="", $mode="output", $offline=false)
get image path (for images located in a template directory)
static prepareFormOutput($a_str, $a_strip=false)
prepares string output for html forms @access public
XHTML Page class.
$txt
Definition: error.php:13
global $ilCtrl
Definition: ilias.php:18
Interface for gui classes (e.g ilLuceneSearchGUI) that offer add/remove to/from desktop.
exit
Definition: login.php:29
$i
Definition: metadata.php:24
__construct(Container $dic, ilPlugin $plugin)
@inheritDoc
$ret
Definition: parser.php:6
global $ilSetting
Definition: privfeed.php:17
$type
settings()
Definition: settings.php:2
global $ilDB
$ilUser
Definition: imgupload.php:18
ui()
Definition: ui.php:5
$a_type
Definition: workflow.php:92
$lang
Definition: xapiexit.php:8
$message
Definition: xapiexit.php:14
$DIC
Definition: xapitoken.php:46
$_COOKIE[session_name()]
Definition: xapitoken.php:39