ILIAS  release_7 Revision v7.30-3-g800a261c036
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 {
253 $ilCtrl = $this->ctrl;
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;
290 $ilCtrl = $this->ctrl;
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(
318 $lng->txt("back"),
319 $this->ctrl->getLinkTargetByClass("ilcontainerpagegui", "edit")
320 );
321 }
322
323 // page object
324 include_once("./Services/Container/classes/class.ilContainerPage.php");
325 include_once("./Services/Container/classes/class.ilContainerPageGUI.php");
326
327 $lng->loadLanguageModule("content");
328
329 include_once("./Services/Style/Content/classes/class.ilObjStyleSheet.php");
330 $this->tpl->addCss(ilObjStyleSheet::getContentStylePath($this->object->getStyleSheetId()));
331 // $this->tpl->setCurrentBlock("SyntaxStyle");
332 $this->tpl->addCss(ilObjStyleSheet::getSyntaxStylePath());
333 // $this->tpl->parseCurrentBlock();
334
336 "cont",
337 $this->object->getId()
338 )) {
339 // doesn't exist -> create new one
340 $new_page_object = new ilContainerPage();
341 $new_page_object->setParentId($this->object->getId());
342 $new_page_object->setId($this->object->getId());
343 $new_page_object->createFromXML();
344 }
345
346 // get page object
347 $this->ctrl->setReturnByClass("ilcontainerpagegui", "edit");
348 $page_gui = new ilContainerPageGUI($this->object->getId());
349 include_once("./Services/Style/Content/classes/class.ilObjStyleSheet.php");
351 $this->object->getStyleSheetId(),
352 $this->object->getType()
353 ));
354
355 $page_gui->setTemplateTargetVar("ADM_CONTENT");
356 $page_gui->setFileDownloadLink("");
357 //$page_gui->setLinkParams($this->ctrl->getUrlParameterString()); // todo
358 $page_gui->setPresentationTitle("");
359 $page_gui->setTemplateOutput(false);
360
361 // old editor information text
363 $this->object->getId(),
364 "xhtml_page"
365 );
366 if ($xpage_id > 0) {
367 $wtpl = new ilTemplate(
368 "tpl.cntr_old_editor_message.html",
369 true,
370 true,
371 "Services/Container"
372 );
373 $wtpl->setVariable("ALT_WARNING", $lng->txt("warning"));
374 $wtpl->setVariable(
375 "IMG_WARNING",
376 ilUtil::getImagePath("icon_alert.svg")
377 );
378 $wtpl->setVariable("TXT_MIGRATION_INFO", $lng->txt("cntr_switch_to_new_editor_message"));
379 $wtpl->setVariable("TXT_MIGRATION_INFO", $lng->txt("cntr_switch_to_new_editor_message"));
380 $wtpl->setVariable(
381 "HREF_SWITCH_TO_NEW_EDITOR",
382 $ilCtrl->getLinkTarget($this, "useNewEditor")
383 );
384 $wtpl->setVariable(
385 "TXT_MIGRATION_SWITCH",
386 $lng->txt("cntr_switch_to_new_editor_cmd")
387 );
388 $page_gui->setPrependingHtml($wtpl->get());
389 }
390
391 // style tab
392 $page_gui->setTabHook($this, "addPageTabs");
393
394 $ret = $this->ctrl->forwardCommand($page_gui);
395
396 //$ret =& $page_gui->executeCommand();
397 return $ret;
398 }
399
403 public function addPageTabs()
404 {
405 $ilTabs = $this->tabs;
406 $ilCtrl = $this->ctrl;
407
408 $ilTabs->addTarget(
409 "obj_sty",
410 $ilCtrl->getLinkTarget($this, 'editStyleProperties'),
411 "editStyleProperties"
412 );
413 }
414
418 public function getContainerPageHTML()
419 {
422
423 if (!$ilSetting->get("enable_cat_page_edit") || $this->object->filteredSubtree()) {
424 return;
425 }
426
427 // old page editor content
429 $this->object->getId(),
430 "xhtml_page"
431 );
432 if ($xpage_id > 0) {
433 include_once("Services/XHTMLPage/classes/class.ilXHTMLPage.php");
434 $xpage = new ilXHTMLPage($xpage_id);
435 return $xpage->getContent();
436 }
437
438
439 // page object
440
441
442 // if page does not exist, return nothing
443 include_once("./Services/COPage/classes/class.ilPageUtil.php");
445 "cont",
446 $this->object->getId()
447 )) {
448 return "";
449 }
450 include_once("./Services/Container/classes/class.ilContainerPage.php");
451 include_once("./Services/Container/classes/class.ilContainerPageGUI.php");
452
453 include_once("./Services/Style/Content/classes/class.ilObjStyleSheet.php");
454 $this->tpl->setVariable(
455 "LOCATION_CONTENT_STYLESHEET",
456 ilObjStyleSheet::getContentStylePath($this->object->getStyleSheetId())
457 );
458 $this->tpl->setCurrentBlock("SyntaxStyle");
459 $this->tpl->setVariable(
460 "LOCATION_SYNTAX_STYLESHEET",
462 );
463 $this->tpl->parseCurrentBlock();
464
465 // get page object
466 include_once("./Services/Object/classes/class.ilObjectTranslation.php");
467 $ot = ilObjectTranslation::getInstance($this->object->getId());
468 $lang = $ot->getEffectiveContentLang($ilUser->getCurrentLanguage(), "cont");
469 $page_gui = new ilContainerPageGUI($this->object->getId(), 0, $lang);
470 include_once("./Services/Style/Content/classes/class.ilObjStyleSheet.php");
472 $this->object->getStyleSheetId(),
473 $this->object->getType()
474 ));
475
476 $page_gui->setPresentationTitle("");
477 $page_gui->setTemplateOutput(false);
478 $page_gui->setHeader("");
479 $ret = $page_gui->showPage();
480
481 //$ret = "<div style='background-color: white; padding:5px; margin-bottom: 30px;'>".$ret."</div>";
482
483 //$ret =& $page_gui->executeCommand();
484 return $ret;
485 }
486
490 public function prepareOutput($a_show_subobjects = true)
491 {
492 if (parent::prepareOutput($a_show_subobjects)) { // return false in admin mode
493 if ($this->getCreationMode() != true && $a_show_subobjects) {
494 // This method is called directly from ilContainerGUI::renderObject
495 #$this->showPossibleSubObjects();
496 $this->showTreeFlatIcon();
497
498 // Member view
499 include_once './Services/Container/classes/class.ilMemberViewGUI.php';
500 ilMemberViewGUI::showMemberViewSwitch($this->object->getRefId());
501 }
502 }
503 }
504
505 public function showTreeFlatIcon()
506 {
508
509 // dont show icon, if role (permission gui->rolegui) is edited
510 if ($_GET["obj_id"] != "") {
511 return;
512 }
513 // hide for member view
514 include_once './Services/Container/classes/class.ilMemberViewSettings.php';
515 if (ilMemberViewSettings::getInstance()->isActive()) {
516 return;
517 }
518
519 $mode = ($_SESSION["il_rep_mode"] == "flat")
520 ? "tree"
521 : "flat";
522 $link = "ilias.php?baseClass=ilRepositoryGUI&amp;cmd=frameset&amp;set_mode=" . $mode . "&amp;ref_id=" . $this->object->getRefId();
523 $tpl->setTreeFlatIcon($link, $mode);
524 }
525
529 public function setTitleAndDescription()
530 {
531 if (ilContainer::_lookupContainerSetting($this->object->getId(), "hide_header_icon_and_title")) {
532 $this->tpl->setTitle((string) $this->object->getTitle(), true);
533 } else {
534 $this->tpl->setTitle((string) $this->object->getTitle());
535 $this->tpl->setDescription($this->object->getLongDescription());
536
537 // set tile icon
538 $icon = ilObject::_getIcon($this->object->getId(), "big", $this->object->getType());
539 $this->tpl->setTitleIcon($icon, $this->lng->txt("obj_" . $this->object->getType()));
540
541 include_once './Services/Object/classes/class.ilObjectListGUIFactory.php';
542 $lgui = ilObjectListGUIFactory::_getListGUIByType($this->object->getType());
543 $lgui->initItem($this->object->getRefId(), $this->object->getId(), $this->object->getType());
544 $this->tpl->setAlertProperties($lgui->getAlertProperties());
545 }
546 }
547
551 public function showPossibleSubObjects()
552 {
553 if ($this->isActiveAdministrationPanel() || $this->isActiveOrdering()) {
554 return;
555 }
556 include_once "Services/Object/classes/class.ilObjectAddNewItemGUI.php";
557 $gui = new ilObjectAddNewItemGUI($this->object->getRefId());
558 $gui->render();
559 }
560
567 public function getContentGUI()
568 {
569 $view_mode = $this->object->getViewMode();
570 if ($this->object->filteredSubtree()) {
571 $view_mode = ilContainer::VIEW_SIMPLE;
572 }
573 switch ($view_mode) {
574 // all items in one block
576 include_once("./Services/Container/classes/class.ilContainerSimpleContentGUI.php");
577 $container_view = new ilContainerSimpleContentGUI($this);
578 break;
579
581 include_once('./Services/Container/classes/class.ilContainerObjectiveGUI.php');
582 $container_view = new ilContainerObjectiveGUI($this);
583 break;
584
585 // all items in one block
587 case ilCourseConstants::IL_CRS_VIEW_TIMING: // not nice this workaround
588 include_once("./Services/Container/classes/class.ilContainerSessionsContentGUI.php");
589 $container_view = new ilContainerSessionsContentGUI($this);
590 break;
591
592 // all items in one block
594 default:
595 include_once("./Services/Container/classes/class.ilContainerByTypeContentGUI.php");
596 $container_view = new ilContainerByTypeContentGUI($this, $this->container_user_filter);
597 break;
598 }
599 return $container_view;
600 }
601
602
603
607 public function renderObject()
608 {
609 $ilTabs = $this->tabs;
610 $ilCtrl = $this->ctrl;
615
616 $container_view = $this->getContentGUI();
617
618 $this->setContentSubTabs();
619 if ($this->isActiveAdministrationPanel()) {
620 $ilTabs->activateSubTab("manage");
621 } else {
622 $ilTabs->activateSubTab("view_content");
623 }
624
625 $container_view->setOutput();
626
627 $this->adminCommands = $container_view->adminCommands;
628
629 // it is important not to show the subobjects/admin panel here, since
630 // we will create nested forms in case, e.g. a news/calendar item is added
631 if ($ilCtrl->getNextClass() != "ilcolumngui") {
633 $this->showPossibleSubObjects();
634
635 if ($user->getId() != ANONYMOUS_USER_ID &&
636 is_object($this->object) &&
637 $this->rbacsystem->checkAccess("write", $this->object->getRefId())
638 ) {
639 if ($ilSetting->get("enable_cat_page_edit")) {
640 if (!$this->isActiveAdministrationPanel() &&
641 !$this->isActiveOrdering() &&
642 $this->supportsPageEditor()) {
643 $toolbar->addButton(
644 $lng->txt("cntr_text_media_editor"),
645 $ilCtrl->getLinkTarget($this, "editPageFrame")
646 );
647 }
648 }
649 }
650 }
651
652 $this->showContainerFilter();
653
654 $this->showPermanentLink();
655
656 // add tree updater javascript
657 if ((int) $_GET["ref_id"] > 1 && $ilSetting->get("rep_tree_synchronize")) {
658 $ilCtrl->setParameter($this, "active_node", (int) $_GET["ref_id"]);
659 }
660 }
661
662 protected function supportsPageEditor() : bool
663 {
664 return true;
665 }
666
670 public function renderBlockAsynchObject()
671 {
672 $container_view = $this->getContentGUI();
673 echo $container_view->getSingleTypeBlockAsynch($_GET["type"]);
674 exit;
675 }
676
677
681 public function setContentSubTabs()
682 {
684 }
685
689 public function showAdministrationPanel()
690 {
691 global $DIC;
692
693 $ilAccess = $this->access;
695
696 $main_tpl = $DIC->ui()->mainTemplate();
697
698 $lng->loadLanguageModule('cntr');
699
700 if ($_SESSION["clipboard"] && !$this->edit_order) {
701 // #11545
702 $main_tpl->setPageFormAction($this->ctrl->getFormAction($this));
703
704 include_once './Services/UIComponent/Toolbar/classes/class.ilToolbarGUI.php';
705 $toolbar = new ilToolbarGUI();
706 $toolbar->setId("admclip");
707 $this->ctrl->setParameter($this, "type", "");
708 $this->ctrl->setParameter($this, "item_ref_id", "");
709
710 $toolbar->addFormButton(
711 $this->lng->txt('paste_clipboard_items'),
712 'paste'
713 );
714
715 $toolbar->addFormButton(
716 $this->lng->txt('clear_clipboard'),
717 'clear'
718 );
719
720 $main_tpl->addAdminPanelToolbar($toolbar, true, false);
721 } elseif ($this->isActiveAdministrationPanel()) {
722 // #11545
723 $main_tpl->setPageFormAction($this->ctrl->getFormAction($this));
724
725 include_once './Services/UIComponent/Toolbar/classes/class.ilToolbarGUI.php';
726 $toolbar = new ilToolbarGUI();
727 $toolbar->setId("adm");
728 $this->ctrl->setParameter($this, "type", "");
729 $this->ctrl->setParameter($this, "item_ref_id", "");
730
731 // if (!$_SESSION["clipboard"])
732 // {
733 if ($this->object->gotItems()) {
734 $toolbar->setLeadingImage(
735 ilUtil::getImagePath("arrow_upright.svg"),
736 $lng->txt("actions")
737 );
738 $toolbar->addFormButton(
739 $this->lng->txt('delete_selected_items'),
740 'delete'
741 );
742 $toolbar->addFormButton(
743 $this->lng->txt('move_selected_items'),
744 'cut'
745 );
746 $toolbar->addFormButton(
747 $this->lng->txt('copy_selected_items'),
748 'copy'
749 );
750 $toolbar->addFormButton(
751 $this->lng->txt('link_selected_items'),
752 'link'
753 );
754 // add download button if multi download enabled
755 $folder_set = new ilSetting('fold');
756 if ((bool) $folder_set->get('enable_multi_download') === true) {
757 $toolbar->addSeparator();
758 $toolbar->addFormButton(
759 $this->lng->txt('download_selected_items'),
760 'download'
761 );
762 }
763 }
764 if ($this->object->getType() == 'crs' or $this->object->getType() == 'grp') {
765 if ($this->object->gotItems()) {
766 $toolbar->addSeparator();
767 }
768
769 $toolbar->addButton(
770 $this->lng->txt('cntr_adopt_content'),
771 $this->ctrl->getLinkTargetByClass(
772 'ilObjectCopyGUI',
773 'adoptContent'
774 )
775 );
776 }
777 // }
778 /*else
779 {
780
781 if ($this->isMultiDownloadEnabled())
782 {
783 $toolbar->addSeparator();
784 $toolbar->addFormButton(
785 $this->lng->txt('download_selected_items'),
786 'download'
787 );
788 }
789 }*/
790
791 $main_tpl->addAdminPanelToolbar(
792 $toolbar,
793 ($this->object->gotItems() && !$_SESSION["clipboard"]) ? true : false,
794 ($this->object->gotItems() && !$_SESSION["clipboard"]) ? true : false
795 );
796
797 // form action needed, see http://www.ilias.de/mantis/view.php?id=9630
798 if ($this->object->gotItems()) {
799 $main_tpl->setPageFormAction($this->ctrl->getFormAction($this));
800 }
801 } else {
802 if ($this->edit_order) {
803 if ($this->object->gotItems() and $ilAccess->checkAccess("write", "", $this->object->getRefId())) {
804 include_once('./Services/Container/classes/class.ilContainer.php');
805
806 if ($this->isActiveOrdering()) {
807 // #11843
808 $main_tpl->setPageFormAction($this->ctrl->getFormAction($this));
809
810 include_once './Services/UIComponent/Toolbar/classes/class.ilToolbarGUI.php';
811 $toolbar = new ilToolbarGUI();
812 $this->ctrl->setParameter($this, "type", "");
813 $this->ctrl->setParameter($this, "item_ref_id", "");
814
815 $toolbar->addFormButton(
816 $this->lng->txt('sorting_save'),
817 'saveSorting'
818 );
819
820 $main_tpl->addAdminPanelToolbar($toolbar, true, false);
821 }
822 }
823 }
824
825 // bugfix mantis 24559
826 // undoing an erroneous change inside mantis 23516 by adding "Download Multiple Objects"-functionality for non-admins
827 // as they don't have the possibility to use the multi-download-capability of the manage-tab
828 elseif ($this->isMultiDownloadEnabled()) {
829 // bugfix mantis 0021272
830 $ref_id = $_GET['ref_id'];
831 $num_files = $this->tree->getChildsByType($ref_id, "file");
832 $num_folders = $this->tree->getChildsByType($ref_id, "fold");
833 if (count($num_files) > 0 or count($num_folders) > 0) {
834 // #11843
835 $GLOBALS['tpl']->setPageFormAction($this->ctrl->getFormAction($this));
836
837 include_once './Services/UIComponent/Toolbar/classes/class.ilToolbarGUI.php';
838 $toolbar = new ilToolbarGUI();
839 $this->ctrl->setParameter($this, "type", "");
840 $this->ctrl->setParameter($this, "item_ref_id", "");
841
842 $toolbar->addFormButton(
843 $this->lng->txt('download_selected_items'),
844 'download'
845 );
846
847 $GLOBALS['tpl']->addAdminPanelToolbar(
848 $toolbar,
849 $this->object->gotItems() ? true : false,
850 $this->object->gotItems() ? true : false
851 );
852 } else {
853 ilUtil::sendInfo($this->lng->txt('msg_no_downloadable_objects'), true);
854 }
855 }
856 }
857 }
858
859 public function __showTimingsButton(&$tpl)
860 {
862
863 if (!$tree->checkForParentType($this->object->getRefId(), 'crs')) {
864 return false;
865 }
866 $tpl->setCurrentBlock("custom_button");
867 $tpl->setVariable("ADMIN_MODE_LINK", $this->ctrl->getLinkTargetByClass('ilcoursecontentgui', 'editTimings'));
868 $tpl->setVariable("TXT_ADMIN_MODE", $this->lng->txt('timings_edit'));
869 $tpl->parseCurrentBlock();
870 return true;
871 }
875 public function showPermanentLink()
876 {
877 global $DIC;
878
879 $tpl = $DIC->ui()->mainTemplate();
880
881 $tpl->setPermanentLink(
882 $this->object->getType(),
883 $this->object->getRefId(),
884 "",
885 "_top"
886 );
887 }
888
892 public function switchToStdEditorObject()
893 {
894 $ilCtrl = $this->ctrl;
895
896 $_SESSION["il_cntr_editor"] = "std";
897 $ilCtrl->redirect($this, "editPageFrame");
898 }
899
903 public function switchToOldEditorObject()
904 {
905 $ilCtrl = $this->ctrl;
906
907 $_SESSION["il_cntr_editor"] = "old";
908 $ilCtrl->redirect($this, "editPageFrame");
909 }
910
914 public function useNewEditorObject()
915 {
916 $ilCtrl = $this->ctrl;
917 $ilAccess = $this->access;
919 $ilCtrl = $this->ctrl;
920
921 if ($ilAccess->checkAccess("write", "", $this->object->getRefId())) {
922 include_once("./Services/XHTMLPage/classes/class.ilXHTMLPage.php");
923
924 /* keep old page content for now...
925 $xpage_id = ilContainer::_lookupContainerSetting($this->object->getId(),
926 "xhtml_page");
927 if ($xpage_id)
928 {
929 $xpage = new ilXHTMLPage($xpage_id);
930 }
931 */
932
934 $this->object->getId(),
935 "xhtml_page",
936 0
937 );
938
939 ilUtil::sendSuccess($lng->txt("cntr_switched_editor"), true);
940 }
941
942 $ilCtrl->redirect($this, "editPageFrame");
943 }
944
948 public function editPageFrameObject()
949 {
950 // old tiny stuff
952 $this->object->getId(),
953 "xhtml_page"
954 );
955 if ($xpage_id > 0 && $_SESSION["il_cntr_editor"] != "std") {
956 $this->ctrl->redirect($this, "editPageContent");
957 } else {
958 $this->ctrl->redirectByClass(array("ilcontainerpagegui"), "edit");
959 }
960 }
961
967 public function editPageContentObject()
968 {
972 $ilCtrl = $this->ctrl;
974
975 if (!$rbacsystem->checkAccess("write", $this->ref_id)) {
976 $ilErr->raiseError($this->lng->txt("msg_no_perm_write"), $ilErr->MESSAGE);
977 }
978
980 $this->object->getId(),
981 "xhtml_page"
982 );
983 if ($xpage_id > 0) {
984 include_once("Services/XHTMLPage/classes/class.ilXHTMLPage.php");
985 $xpage = new ilXHTMLPage($xpage_id);
986 $content = $xpage->getContent();
987 }
988
989 // get template
990 $tpl->addBlockFile(
991 "ADM_CONTENT",
992 "adm_content",
993 "tpl.container_edit_page_content.html",
994 "Services/Container"
995 );
996 $tpl->setVariable("VAL_CONTENT", ilUtil::prepareFormOutput($content));
997 $tpl->setVariable("FORMACTION", $this->ctrl->getFormAction($this));
998 $tpl->setVariable(
999 "TXT_EDIT_PAGE_CONTENT",
1000 $this->lng->txt("edit_page_content")
1001 );
1002 $tpl->setVariable("TXT_SAVE", $this->lng->txt("save"));
1003 $tpl->setVariable("TXT_CANCEL", $this->lng->txt("cancel"));
1004 $tpl->setVariable("TXT_MIGRATION_INFO", $lng->txt("cntr_old_editor_warning"));
1005 $tpl->setVariable("TXT_MIGRATION_OPEN_STD_EDITOR", $lng->txt("cntr_old_editor_open_standard_editor"));
1006 $tpl->setVariable("IMG_WARNING", ilUtil::getImagePath("icon_alert.svg"));
1007 $tpl->setVariable("HREF_OPEN_STD_EDITOR", $ilCtrl->getLinkTarget($this, "switchToStdEditor"));
1008 $tpl->setVariable("ALT_WARNING", $lng->txt("warning"));
1009
1010 include_once("./Services/Form/classes/class.ilFormPropertyGUI.php");
1011 include_once("./Services/Form/classes/class.ilTextAreaInputGUI.php");
1012 //$ta = new ilTextAreaInputGUI();
1013 //$tags = $ta->getRteTagSet("extended_table_img");
1014
1015 // add rte support
1016 include_once "./Services/RTE/classes/class.ilRTE.php";
1017 $rtestring = ilRTE::_getRTEClassname();
1018 include_once "./Services/RTE/classes/class.$rtestring.php";
1019 $rte = new $rtestring();
1020 //$rte->addPlugin("latex");
1021 include_once "./Services/Object/classes/class.ilObject.php";
1023 $obj_type = ilObject::_lookupType($_GET["ref_id"], true);
1024 $rte->addRTESupport($obj_id, $obj_type);
1025 //$rte->setStyleSelect(true);
1026 //$rte->addCustomRTESupport($obj_id, $obj_type, $tags);
1027 }
1028
1029 public function savePageContentObject()
1030 {
1031 include_once("Services/XHTMLPage/classes/class.ilXHTMLPage.php");
1032 include_once "./Services/AdvancedEditing/classes/class.ilObjAdvancedEditing.php";
1034 $this->object->getId(),
1035 "xhtml_page"
1036 );
1037
1038 /*include_once("./Services/Form/classes/class.ilFormPropertyGUI.php");
1039 include_once("./Services/Form/classes/class.ilTextAreaInputGUI.php");
1040 $ta = new ilTextAreaInputGUI();
1041 $ta->setRteTagSet("extended_table_img");
1042 $tags = $ta->getRteTagString();*/
1043
1044 //$text = ilUtil::stripSlashes($_POST["page_content"],
1045 // true,
1046 // $tags);
1047
1048 $text = ilUtil::stripSlashes(
1049 $_POST["page_content"],
1050 true,
1052 );
1053 if ($xpage_id > 0) {
1054 $xpage = new ilXHTMLPage($xpage_id);
1055 $xpage->setContent($text);
1056 $xpage->save();
1057 } else {
1058 $xpage = new ilXHTMLPage();
1059 $xpage->setContent($text);
1060 $xpage->save();
1062 $this->object->getId(),
1063 "xhtml_page",
1064 $xpage->getId()
1065 );
1066 }
1067
1068 include_once("Services/RTE/classes/class.ilRTE.php");
1070 $text,
1071 $this->object->getType() . ":html",
1072 $this->object->getId()
1073 );
1074
1075 ilUtil::sendSuccess($this->lng->txt("msg_obj_modified"), true);
1076 $this->ctrl->redirect($this, "");
1077 }
1078
1079 public function cancelPageContentObject()
1080 {
1081 $this->ctrl->redirect($this, "");
1082 }
1083
1084 public function showLinkListObject()
1085 {
1086 $lng = $this->lng;
1088
1089 $tpl = new ilGlobalTemplate(
1090 "tpl.container_link_help.html",
1091 true,
1092 true,
1093 "Services/Container"
1094 );
1095
1096 $type_ordering = array(
1097 "cat", "fold", "crs", "grp", "chat", "frm", "lres",
1098 "glo", "webr", "file", "exc",
1099 "tst", "svy", "mep", "qpl", "spl");
1100
1101 $childs = $tree->getChilds($_GET["ref_id"]);
1102 foreach ($childs as $child) {
1103 if (in_array($child["type"], array("lm", "sahs", "htlm"))) {
1104 $cnt["lres"]++;
1105 } else {
1106 $cnt[$child["type"]]++;
1107 }
1108 }
1109
1110 $tpl->setVariable("LOCATION_STYLESHEET", ilUtil::getStyleSheetLocation());
1111 $tpl->setVariable("TXT_HELP_HEADER", $lng->txt("help"));
1112 foreach ($type_ordering as $type) {
1113 $tpl->setCurrentBlock("row");
1114 $tpl->setVariable("ROWCOL", "tblrow" . ((($i++) % 2) + 1));
1115 if ($type != "lres") {
1116 $tpl->setVariable("TYPE", $lng->txt("objs_" . $type) .
1117 " (" . ((int) $cnt[$type]) . ")");
1118 } else {
1119 $tpl->setVariable("TYPE", $lng->txt("obj_lrss") .
1120 " (" . ((int) $cnt["lres"]) . ")");
1121 }
1122 $tpl->setVariable("TXT_LINK", "[list-" . $type . "]");
1123 $tpl->parseCurrentBlock();
1124 }
1125 $tpl->printToStdout();
1126 exit;
1127 }
1128
1133 {
1134 $this->adminCommands = false;
1135 }
1136
1140 /* function determineAdminCommands($a_ref_id, $a_admin_com_included_in_list = false)
1141 {
1142 if (!$this->adminCommands)
1143 {
1144 if (!$this->isActiveAdministrationPanel())
1145 {
1146 if ($this->rbacsystem->checkAccess("delete", $a_ref_id))
1147 {
1148 $this->adminCommands = true;
1149 }
1150 }
1151 else
1152 {
1153 $this->adminCommands = $a_admin_com_included_in_list;
1154 }
1155 }
1156 }*/
1157
1164 public function &newBlockTemplate()
1165 {
1166 $tpl = new ilTemplate(
1167 "tpl.container_list_block.html",
1168 true,
1169 true,
1170 "Services/Container"
1171 );
1172 $this->cur_row_type = "row_type_1";
1173 return $tpl;
1174 }
1175
1183 public function addHeaderRow(&$a_tpl, $a_type, $a_show_image = true)
1184 {
1185 $icon = ilUtil::getImagePath("icon_" . $a_type . ".svg");
1186 $title = $this->lng->txt("objs_" . $a_type);
1187
1188 if ($a_show_image) {
1189 $a_tpl->setCurrentBlock("container_header_row_image");
1190 $a_tpl->setVariable("HEADER_IMG", $icon);
1191 $a_tpl->setVariable("HEADER_ALT", $title);
1192 } else {
1193 $a_tpl->setCurrentBlock("container_header_row");
1194 }
1195
1196 $a_tpl->setVariable("BLOCK_HEADER_CONTENT", $title);
1197 $a_tpl->parseCurrentBlock();
1198 //$a_tpl->touchBlock("container_row");
1199 }
1200
1208 public function addStandardRow(
1209 &$a_tpl,
1210 $a_html,
1211 $a_item_ref_id = "",
1212 $a_item_obj_id = "",
1213 $a_image_type = ""
1214 ) {
1216
1217 $this->cur_row_type = ($this->cur_row_type == "row_type_1")
1218 ? "row_type_2"
1219 : "row_type_1";
1220
1221 $a_tpl->touchBlock($this->cur_row_type);
1222
1223 $nbsp = true;
1224 if ($ilSetting->get("icon_position_in_lists") == "item_rows") {
1225 $icon = ilUtil::getImagePath("icon_" . $a_image_type . ".svg");
1226 $alt = $this->lng->txt("obj_" . $a_image_type);
1227
1228 if ($ilSetting->get('custom_icons')) {
1229 global $DIC;
1231 $customIconFactory = $DIC['object.customicons.factory'];
1232 $customIcon = $customIconFactory->getPresenterByObjId($a_item_obj_id, $a_image_type);
1233
1234 if ($customIcon->exists()) {
1235 $icon = $customIcon->getFullPath();
1236 }
1237 }
1238
1239 $a_tpl->setCurrentBlock("block_row_image");
1240 $a_tpl->setVariable("ROW_IMG", $icon);
1241 $a_tpl->setVariable("ROW_ALT", $alt);
1242 $a_tpl->parseCurrentBlock();
1243 $nbsp = false;
1244 }
1245
1246 if ($this->isActiveAdministrationPanel()) {
1247 $a_tpl->setCurrentBlock("block_row_check");
1248 $a_tpl->setVariable("ITEM_ID", $a_item_ref_id);
1249 $a_tpl->parseCurrentBlock();
1250 $nbsp = false;
1251 }
1252 include_once('Services/Container/classes/class.ilContainerSortingSettings.php');
1253 if ($this->isActiveAdministrationPanel() &&
1255 $a_tpl->setCurrentBlock('block_position');
1256 $a_tpl->setVariable('POS_TYPE', $a_image_type);
1257 $a_tpl->setVariable('POS_ID', $a_item_ref_id);
1258 $a_tpl->setVariable('POSITION', sprintf('%.1f', $this->current_position++));
1259 $a_tpl->parseCurrentBlock();
1260 }
1261 if ($nbsp) {
1262 $a_tpl->setVariable("ROW_NBSP", "&nbsp;");
1263 }
1264 $a_tpl->setCurrentBlock("container_standard_row");
1265 $a_tpl->setVariable("BLOCK_ROW_CONTENT", $a_html);
1266 $a_tpl->parseCurrentBlock();
1267 $a_tpl->touchBlock("container_row");
1268 }
1269
1273 public function addMessageRow(&$a_tpl, $a_message, $a_type)
1274 {
1275 $this->cur_row_type = ($this->cur_row_type == "row_type_1")
1276 ? "row_type_2"
1277 : "row_type_1";
1278
1279 $a_tpl->touchBlock($this->cur_row_type);
1280
1281 $type = $this->lng->txt("obj_" . $a_type);
1282 $a_message = str_replace("[type]", $type, $a_message);
1283
1284 $a_tpl->setVariable("ROW_NBSP", "&nbsp;");
1285
1286 $a_tpl->setCurrentBlock("container_standard_row");
1287 $a_tpl->setVariable(
1288 "BLOCK_ROW_CONTENT",
1289 $a_message
1290 );
1291 $a_tpl->parseCurrentBlock();
1292 $a_tpl->touchBlock("container_row");
1293 }
1294
1295 public function resetRowType()
1296 {
1297 $this->cur_row_type = "";
1298 }
1299
1300
1304 public function setPageEditorTabs()
1305 {
1306 $lng = $this->lng;
1307
1308 if (!$this->isActiveAdministrationPanel()
1309 || strtolower($this->ctrl->getCmdClass()) != "ilcontainerpagegui") {
1310 return;
1311 }
1312
1313 $lng->loadLanguageModule("content");
1314 //$tabs_gui = new ilTabsGUI();
1315 //$tabs_gui->setSubTabs();
1316
1317 // back to upper context
1318 $this->tabs_gui->setBackTarget(
1319 $this->lng->txt("obj_cat"),
1320 $this->ctrl->getLinkTarget($this, "frameset"),
1321 ilFrameTargetInfo::_getFrame("MainContent")
1322 );
1323
1324 $this->tabs_gui->addTarget("edit", $this->ctrl->getLinkTargetByClass("ilcontainerpagegui", "view"), array("", "view"), "ilcontainerpagegui");
1325
1326 //$this->tpl->setTabs($tabs_gui->getHTML());
1327 }
1328
1332 public function addStandardContainerSubTabs($a_include_view = true)
1333 {
1334 $ilTabs = $this->tabs;
1335 $ilAccess = $this->access;
1336 $lng = $this->lng;
1337 $ilCtrl = $this->ctrl;
1340
1341 if (!is_object($this->object)) {
1342 return;
1343 }
1344
1345 if ($a_include_view && $this->rbacsystem->checkAccess("visible,read", $this->object->getRefId())) {
1346 if (!$this->isActiveAdministrationPanel()) {
1347 $ilTabs->addSubTab("view_content", $lng->txt("view"), $ilCtrl->getLinkTarget($this, "view"));
1348 } else {
1349 $ilTabs->addSubTab("view_content", $lng->txt("view"), $ilCtrl->getLinkTarget($this, "disableAdministrationPanel"));
1350 }
1351 }
1352
1353 if ($ilUser->getId() != ANONYMOUS_USER_ID &&
1354 (
1355 $this->adminCommands ||
1356 (is_object($this->object) &&
1357 ($this->rbacsystem->checkAccess("write", $this->object->getRefId())))
1358 ||
1359 (is_object($this->object) &&
1360 ($this->object->getHiddenFilesFound())) ||
1361 $_SESSION["clipboard"]
1362 )
1363 ) {
1364 if ($this->isActiveAdministrationPanel()) {
1365 $ilTabs->addSubTab("manage", $lng->txt("cntr_manage"), $ilCtrl->getLinkTarget($this, ""));
1366 } else {
1367 $ilTabs->addSubTab("manage", $lng->txt("cntr_manage"), $ilCtrl->getLinkTarget($this, "enableAdministrationPanel"));
1368 }
1369 }
1370 if ($ilUser->getId() != ANONYMOUS_USER_ID &&
1371 is_object($this->object) &&
1372 $this->rbacsystem->checkAccess("write", $this->object->getRefId()) /* &&
1373 $this->object->getOrderType() == ilContainer::SORT_MANUAL */ // always on because of custom block order
1374 ) {
1375 $ilTabs->addSubTab("ordering", $lng->txt("cntr_ordering"), $ilCtrl->getLinkTarget($this, "editOrder"));
1376 }
1377 }
1378
1379
1384 public function getTabs()
1385 {
1387 $ilCtrl = $this->ctrl;
1388
1389 // edit permissions
1390 if ($rbacsystem->checkAccess('edit_permission', $this->ref_id)) {
1391 $this->tabs_gui->addTarget(
1392 "perm_settings",
1393 $this->ctrl->getLinkTargetByClass(array(get_class($this),'ilpermissiongui'), "perm"),
1394 array("perm","info","owner"),
1395 'ilpermissiongui'
1396 );
1397 if ($ilCtrl->getNextClass() == "ilpermissiongui") {
1398 $this->tabs_gui->activateTab("perm_settings");
1399 }
1400 }
1401
1402 // show clipboard
1403 if (strtolower($_GET["baseClass"]) == "ilrepositorygui" && !empty($_SESSION["clipboard"])) {
1404 $this->tabs_gui->addTarget(
1405 "clipboard",
1406 $this->ctrl->getLinkTarget($this, "clipboard"),
1407 "clipboard",
1408 get_class($this)
1409 );
1410 }
1411 }
1412
1413 //*****************
1414 // COMMON METHODS (may be overwritten in derived classes
1415 // if special handling is necessary)
1416 //*****************
1417
1422 {
1423 $_SESSION["il_cont_admin_panel"] = true;
1424 $this->ctrl->redirect($this, "render");
1425 }
1426
1431 {
1432 $_SESSION["il_cont_admin_panel"] = false;
1433 $this->ctrl->redirect($this, "render");
1434 }
1435
1439 public function editOrderObject()
1440 {
1441 $ilTabs = $this->tabs;
1442
1443 $this->edit_order = true;
1444 $_SESSION["il_cont_admin_panel"] = false;
1445 $this->renderObject();
1446
1447 $ilTabs->activateSubTab("ordering");
1448 }
1449
1454 public function isActiveOrdering()
1455 {
1456 return $this->edit_order ? true : false;
1457 }
1458
1463 public function isActiveItemOrdering()
1464 {
1465 if ($this->isActiveOrdering()) {
1467 }
1468 return false;
1469 }
1470
1471
1472 // bugfix mantis 24559
1473 // undoing an erroneous change inside mantis 23516 by adding "Download Multiple Objects"-functionality for non-admins
1474 // as they don't have the possibility to use the multi-download-capability of the manage-tab
1476 {
1477 $this->multi_download_enabled = true;
1478 $this->renderObject();
1479 }
1480
1481 public function isMultiDownloadEnabled()
1482 {
1484 }
1485
1492 public function cutObject()
1493 {
1495 $ilCtrl = $this->ctrl;
1497
1498 if ($_GET["item_ref_id"] != "") {
1499 $_POST["id"] = array($_GET["item_ref_id"]);
1500 }
1501
1502 $no_cut = [];
1503
1504 if (!isset($_POST["id"])) {
1505 $ilErr->raiseError($this->lng->txt("no_checkbox"), $ilErr->MESSAGE);
1506 }
1507
1508 // FOR ALL OBJECTS THAT SHOULD BE COPIED
1509 foreach ($_POST["id"] as $ref_id) {
1510 // GET COMPLETE NODE_DATA OF ALL SUBTREE NODES
1511 $node_data = $this->tree->getNodeData($ref_id);
1512 $subtree_nodes = $this->tree->getSubTree($node_data);
1513
1514 $all_node_data[] = $node_data;
1515 $all_subtree_nodes[] = $subtree_nodes;
1516
1517 // CHECK DELETE PERMISSION OF ALL OBJECTS IN ACTUAL SUBTREE
1518 foreach ($subtree_nodes as $node) {
1519 if ($node['type'] == 'rolf') {
1520 continue;
1521 }
1522
1523 if (!$rbacsystem->checkAccess('delete', $node["ref_id"])) {
1524 $no_cut[] = $node["ref_id"];
1525 }
1526 }
1527 }
1528 // IF THERE IS ANY OBJECT WITH NO PERMISSION TO 'delete'
1529 if (count($no_cut)) {
1530 $titles = array();
1531 foreach ((array) $no_cut as $cut_id) {
1532 $titles[] = ilObject::_lookupTitle(ilObject::_lookupObjId($cut_id));
1533 }
1534 $ilErr->raiseError(
1535 $this->lng->txt("msg_no_perm_cut") . " " . implode(',', (array) $titles),
1536 $ilErr->MESSAGE
1537 );
1538 }
1539 $_SESSION["clipboard"]["parent"] = $_GET["ref_id"];
1540 $_SESSION["clipboard"]["cmd"] = $ilCtrl->getCmd();
1541 $_SESSION["clipboard"]["ref_ids"] = $_POST["id"];
1542
1543 ilUtil::sendInfo($this->lng->txt("msg_cut_clipboard"), true);
1544
1545 return $this->initAndDisplayMoveIntoObjectObject();
1546 } // END CUT
1547
1555 public function copyObject()
1556 {
1558 $ilCtrl = $this->ctrl;
1561
1562 $no_copy = [];
1563
1564 if ($_GET["item_ref_id"] != "") {
1565 $_POST["id"] = array($_GET["item_ref_id"]);
1566 }
1567
1568 if (!isset($_POST["id"])) {
1569 $ilErr->raiseError($this->lng->txt("no_checkbox"), $ilErr->MESSAGE);
1570 }
1571
1572 // FOR ALL OBJECTS THAT SHOULD BE COPIED
1573 $containers = 0;
1574 foreach ($_POST["id"] as $ref_id) {
1575 // GET COMPLETE NODE_DATA OF ALL SUBTREE NODES
1576 $node_data = $this->tree->getNodeData($ref_id);
1577
1578 // count containers
1579 if ($objDefinition->isContainer($node_data["type"])) {
1580 $containers++;
1581 }
1582
1583 $subtree_nodes = $this->tree->getSubTree($node_data);
1584
1585 $all_node_data[] = $node_data;
1586 $all_subtree_nodes[] = $subtree_nodes;
1587
1588 // CHECK COPY PERMISSION OF ALL OBJECTS IN ACTUAL SUBTREE
1589 foreach ($subtree_nodes as $node) {
1590 if ($node['type'] == 'rolf') {
1591 continue;
1592 }
1593
1594 if (!$rbacsystem->checkAccess('visible,read,copy', $node["ref_id"])) {
1595 $no_copy[] = $node["ref_id"];
1596 }
1597 }
1598 }
1599
1600 if ($containers > 0 && count($_POST["id"]) > 1) {
1601 $ilErr->raiseError($this->lng->txt("cntr_container_only_on_their_own"), $ilErr->MESSAGE);
1602 }
1603
1604 // IF THERE IS ANY OBJECT WITH NO PERMISSION TO 'delete'
1605 if (is_array($no_copy) && count($no_copy)) {
1606 $titles = array();
1607 foreach ((array) $no_copy as $copy_id) {
1608 $titles[] = ilObject::_lookupTitle(ilObject::_lookupObjId($copy_id));
1609 }
1610 $ilErr->raiseError(
1611 $this->lng->txt("msg_no_perm_copy") . " " . implode(',', $titles),
1612 $ilErr->MESSAGE
1613 );
1614 }
1615
1616 // if we have a single container, set it as source id and redirect to ilObjectCopyGUI
1617 if (count($_POST["id"]) == 1) {
1618 $ilCtrl->setParameterByClass("ilobjectcopygui", "source_id", $_POST["id"][0]);
1619 $ilCtrl->redirectByClass("ilobjectcopygui", "initTargetSelection");
1620 } else {
1621 $ilCtrl->setParameterByClass("ilobjectcopygui", "source_ids", implode("_", $_POST["id"]));
1622 $ilCtrl->redirectByClass("ilobjectcopygui", "initTargetSelection");
1623 }
1624
1625 $_SESSION["clipboard"]["parent"] = $_GET["ref_id"];
1626 $_SESSION["clipboard"]["cmd"] = $ilCtrl->getCmd();
1627 $_SESSION["clipboard"]["ref_ids"] = $_POST["id"];
1628
1629 ilUtil::sendInfo($this->lng->txt("msg_copy_clipboard"), true);
1630
1632 } // END COPY
1633
1634 public function downloadObject()
1635 {
1637 // This variable determines whether the task has been initiated by a folder's action drop-down to prevent a folder
1638 // duplicate inside the zip.
1639 $initiated_by_folder_action = false;
1640
1641 if ($_GET["item_ref_id"] != "") {
1642 $_POST["id"] = array($_GET["item_ref_id"]);
1643 }
1644
1645 if (!isset($_POST["id"])) {
1647 $object_type = $object->getType();
1648 if ($object_type == "fold") {
1649 $_POST["id"] = array($_GET['ref_id']);
1650 $initiated_by_folder_action = true;
1651 } else {
1652 $ilErr->raiseError($this->lng->txt("no_checkbox"), $ilErr->MESSAGE);
1653 }
1654 }
1655
1656 include_once './Services/Container/classes/BackgroundTasks/class.ilDownloadContainerFilesBackgroundTask.php';
1657 $download_job = new ilDownloadContainerFilesBackgroundTask($GLOBALS['DIC']->user()->getId(), $_POST["id"], $initiated_by_folder_action);
1658
1659 $download_job->setBucketTitle($this->getBucketTitle());
1660 if ($download_job->run()) {
1661 ilUtil::sendSuccess($this->lng->txt('msg_bt_download_started'), true);
1662 }
1663 $GLOBALS['DIC']->ctrl()->redirect($this);
1664 }
1665
1670 public function getBucketTitle()
1671 {
1672 return $bucket_title = ilUtil::getAsciiFilename($this->object->getTitle());
1673 }
1674
1681 public function linkObject()
1682 {
1684 $ilCtrl = $this->ctrl;
1686
1687 $no_cut = [];
1688 $no_link = [];
1689
1690 if ($_GET["item_ref_id"] != "") {
1691 $_POST["id"] = array($_GET["item_ref_id"]);
1692 }
1693
1694 if (!isset($_POST["id"])) {
1695 $ilErr->raiseError($this->lng->txt("no_checkbox"), $ilErr->MESSAGE);
1696 }
1697
1698 // CHECK ACCESS
1699 foreach ($_POST["id"] as $ref_id) {
1700 if (!$rbacsystem->checkAccess('delete', $ref_id)) {
1701 $no_cut[] = $ref_id;
1702 }
1703
1705
1706 if (!$this->objDefinition->allowLink($object->getType())) {
1707 $no_link[] = $object->getType();
1708 }
1709 }
1710
1711 // NO ACCESS
1712 if (count($no_cut)) {
1713 $ilErr->raiseError($this->lng->txt("msg_no_perm_link") . " " .
1714 implode(',', $no_cut), $ilErr->MESSAGE);
1715 }
1716
1717 if (count($no_link)) {
1718 //#12203
1719 $ilErr->raiseError($this->lng->txt("msg_obj_no_link"), $ilErr->MESSAGE);
1720 }
1721
1722 // WRITE TO CLIPBOARD
1723 $clipboard["parent"] = $_GET["ref_id"];
1724 $clipboard["cmd"] = $ilCtrl->getCmd();
1725
1726 foreach ($_POST["id"] as $ref_id) {
1727 $clipboard["ref_ids"][] = $ref_id;
1728 }
1729
1730 $_SESSION["clipboard"] = $clipboard;
1731
1732 $suffix = 'p';
1733 if (count($clipboard["ref_ids"]) == 1) {
1734 $suffix = 's';
1735 }
1736 ilUtil::sendInfo($this->lng->txt("msg_link_clipboard_" . $suffix), true);
1737
1739 } // END LINK
1740
1741
1747 public function clearObject()
1748 {
1749 unset($_SESSION["clipboard"]);
1750 unset($_SESSION["il_rep_clipboard"]);
1751
1752 //var_dump($this->getReturnLocation("clear",$this->ctrl->getLinkTarget($this)),get_class($this));
1753
1754 // only redirect if clipboard was cleared
1755 if (isset($_POST["cmd"]["clear"])) {
1756 ilUtil::sendSuccess($this->lng->txt("msg_clear_clipboard"), true);
1757 // fixed mantis 0018474: Clear Clipboard redirects to Subtab View, instead of Subtab "Edit Multiple"
1758 $this->ctrl->redirect($this, 'render');
1759 }
1760 }
1761
1763 {
1767 $ilLog = $this->log;
1769 $ilObjDataCache = $this->obj_data_cache;
1772 $lng = $this->lng;
1774 $ui = $this->ui;
1775
1776 $exists = [];
1777 $is_child = [];
1778 $not_allowed_subobject = [];
1779 $no_paste = [];
1780
1781 $command = $_SESSION['clipboard']['cmd'];
1782 if (!in_array($command, array('cut', 'link', 'copy'))) {
1783 $message = __METHOD__ . ": cmd was neither 'cut', 'link' nor 'copy'; may be a hack attempt!";
1784 $ilErr->raiseError($message, $ilErr->WARNING);
1785 }
1786
1787 if ($command == 'cut') {
1788 if (isset($_POST['node']) && (int) $_POST['node']) {
1789 $_POST['nodes'] = array($_POST['node']);
1790 }
1791 }
1792
1793 if (!is_array($_POST['nodes']) || !count($_POST['nodes'])) {
1794 ilUtil::sendFailure($this->lng->txt('select_at_least_one_object'));
1795 switch ($command) {
1796 case 'cut':
1797 $this->showPasteTreeObject();
1798 break;
1799 case 'copy':
1800 $this->showPasteTreeObject();
1801 break;
1802 case 'link':
1803 $this->showPasteTreeObject();
1804 break;
1805 }
1806 return;
1807 }
1808
1809 // this loop does all checks
1810 $folder_objects_cache = array();
1811 foreach ($_SESSION['clipboard']['ref_ids'] as $ref_id) {
1813 $current_parent_id = $tree->getParentId($obj_data->getRefId());
1814
1815 foreach ($_POST['nodes'] as $folder_ref_id) {
1816 if (!array_key_exists($folder_ref_id, $folder_objects_cache)) {
1817 $folder_objects_cache[$folder_ref_id] = ilObjectFactory::getInstanceByRefId($folder_ref_id);
1818 }
1819
1820 // CHECK ACCESS
1821 if (!$rbacsystem->checkAccess('create', $folder_ref_id, $obj_data->getType())) {
1822 $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() . ']');
1823 }
1824
1825 // CHECK IF REFERENCE ALREADY EXISTS
1826 if ($folder_ref_id == $current_parent_id) {
1827 $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() . ']');
1828 }
1829
1830 // CHECK IF PASTE OBJECT SHALL BE CHILD OF ITSELF
1831 if ($tree->isGrandChild($ref_id, $folder_ref_id) ||
1832 $ref_id == $folder_ref_id) {
1833 $is_child[] = sprintf($this->lng->txt('msg_paste_object_not_in_itself'), $obj_data->getTitle() . ' [' . $obj_data->getRefId() . ']');
1834 }
1835
1836 // CHECK IF OBJECT IS ALLOWED TO CONTAIN PASTED OBJECT AS SUBOBJECT
1837 if (!in_array($obj_data->getType(), array_keys($folder_objects_cache[$folder_ref_id]->getPossibleSubObjects()))) {
1838 $not_allowed_subobject[] = sprintf(
1839 $this->lng->txt('msg_obj_may_not_contain_objects_of_type'),
1840 $folder_objects_cache[$folder_ref_id]->getTitle() . ' [' . $folder_objects_cache[$folder_ref_id]->getRefId() . ']',
1841 $lng->txt('obj_' . $obj_data->getType())
1842 );
1843 }
1844 }
1845 }
1846
1848 // process checking results
1849 if (count($exists) && $command != "copy") {
1850 $error .= implode('<br />', $exists);
1851 }
1852
1853 if (count($is_child)) {
1854 $error .= $error != '' ? '<br />' : '';
1855 $error .= implode('<br />', $is_child);
1856 }
1857
1858 if (count($not_allowed_subobject)) {
1859 $error .= $error != '' ? '<br />' : '';
1860 $error .= implode('<br />', $not_allowed_subobject);
1861 }
1862
1863 if (count($no_paste)) {
1864 $error .= $error != '' ? '<br />' : '';
1865 $error .= implode('<br />', $no_paste);
1866 }
1867
1868 if ($error != '') {
1870 switch ($command) {
1871 case 'cut':
1872 $this->showPasteTreeObject();
1873 break;
1874 case 'copy':
1875 $this->showPasteTreeObject();
1876 break;
1877 case 'link':
1878 $this->showPasteTreeObject();
1879 break;
1880 }
1881 return;
1882 }
1883
1884 // log pasteObject call
1885 $ilLog->write(__METHOD__ . ", cmd: " . $command);
1886
1888 // everything ok: now paste the objects to new location
1889
1890 // to prevent multiple actions via back/reload button
1891 $ref_ids = $_SESSION['clipboard']['ref_ids'];
1892 unset($_SESSION['clipboard']['ref_ids']);
1893
1894 // BEGIN ChangeEvent: Record paste event.
1895 require_once('Services/Tracking/classes/class.ilChangeEvent.php');
1896 // END ChangeEvent: Record paste event.
1897
1898 // process COPY command
1899 if ($command == 'copy') {
1900 foreach ($_POST['nodes'] as $folder_ref_id) {
1901 foreach ($ref_ids as $ref_id) {
1902 $revIdMapping = array();
1903
1904 $oldNode_data = $tree->getNodeData($ref_id);
1905 if ($oldNode_data['parent'] == $folder_ref_id) {
1906 require_once 'Modules/File/classes/class.ilObjFileAccess.php';
1907 $newTitle = ilObjFileAccess::_appendNumberOfCopyToFilename($oldNode_data['title'], null);
1908 $newRef = $this->cloneNodes($ref_id, $folder_ref_id, $refIdMapping, $newTitle);
1909 } else {
1910 $newRef = $this->cloneNodes($ref_id, $folder_ref_id, $refIdMapping, null);
1911 }
1912
1913 // BEGIN ChangeEvent: Record copy event.
1914 $old_parent_data = $tree->getParentNodeData($ref_id);
1915 $newNode_data = $tree->getNodeData($newRef);
1917 $oldNode_data['type'],
1918 $ref_id,
1919 $oldNode_data['obj_id'],
1920 $ilUser->getId()
1921 );
1923 $newNode_data['obj_id'],
1924 $ilUser->getId(),
1925 'add',
1926 $ilObjDataCache->lookupObjId($folder_ref_id)
1927 );
1928 ilChangeEvent::_catchupWriteEvents($newNode_data['obj_id'], $ilUser->getId());
1929 // END PATCH ChangeEvent: Record cut event.
1930 }
1931 }
1932
1933 ilUtil::sendSuccess($this->lng->txt('msg_cloned'), true);
1934 } // END COPY
1935
1936 // process CUT command
1937 if ($command == 'cut') {
1938 foreach ($_POST['nodes'] as $folder_ref_id) {
1939 foreach ($ref_ids as $ref_id) {
1940 // Store old parent
1941 $old_parent = $tree->getParentId($ref_id);
1942 $tree->moveTree($ref_id, $folder_ref_id);
1943 $rbacadmin->adjustMovedObjectPermissions($ref_id, $old_parent);
1944
1945 include_once('./Services/Conditions/classes/class.ilConditionHandler.php');
1947
1948 // BEGIN ChangeEvent: Record cut event.
1949 $node_data = $tree->getNodeData($ref_id);
1950 $old_parent_data = $tree->getNodeData($old_parent);
1952 $node_data['obj_id'],
1953 $ilUser->getId(),
1954 'remove',
1955 $old_parent_data['obj_id']
1956 );
1958 $node_data['obj_id'],
1959 $ilUser->getId(),
1960 'add',
1961 $ilObjDataCache->lookupObjId($folder_ref_id)
1962 );
1963 ilChangeEvent::_catchupWriteEvents($node_data['obj_id'], $ilUser->getId());
1964 // END PATCH ChangeEvent: Record cut event.
1965 }
1966
1967 // prevent multiple iterations for cut cmommand
1968 break;
1969 }
1970
1971 ilUtil::sendSuccess($this->lng->txt('msg_cut_copied'), true);
1972 } // END CUT
1973
1974 // process LINK command
1975 if ($command == 'link') {
1976 $linked_to_folders = array();
1977
1978 include_once "Services/AccessControl/classes/class.ilRbacLog.php";
1979 $rbac_log_active = ilRbacLog::isActive();
1980
1981 foreach ($_POST['nodes'] as $folder_ref_id) {
1982 $linked_to_folders[$folder_ref_id] = $ilObjDataCache->lookupTitle($ilObjDataCache->lookupObjId($folder_ref_id));
1983
1984 foreach ($ref_ids as $ref_id) {
1985 // get node data
1986 $top_node = $tree->getNodeData($ref_id);
1987
1988 // get subnodes of top nodes
1989 $subnodes[$ref_id] = $tree->getSubtree($top_node);
1990 }
1991
1992 // now move all subtrees to new location
1993 foreach ($subnodes as $key => $subnode) {
1994 // first paste top_node....
1995 $obj_data = ilObjectFactory::getInstanceByRefId($key);
1996 $new_ref_id = $obj_data->createReference();
1997 $obj_data->putInTree($folder_ref_id);
1998 $obj_data->setPermissions($folder_ref_id);
1999
2000 // rbac log
2001 if ($rbac_log_active) {
2002 $rbac_log_roles = $rbacreview->getParentRoleIds($new_ref_id, false);
2003 $rbac_log = ilRbacLog::gatherFaPa($new_ref_id, array_keys($rbac_log_roles), true);
2004 ilRbacLog::add(ilRbacLog::LINK_OBJECT, $new_ref_id, $rbac_log, $key);
2005 }
2006
2007 // BEGIN ChangeEvent: Record link event.
2008 $node_data = $tree->getNodeData($new_ref_id);
2010 $node_data['obj_id'],
2011 $ilUser->getId(),
2012 'add',
2013 $ilObjDataCache->lookupObjId($folder_ref_id)
2014 );
2015 ilChangeEvent::_catchupWriteEvents($node_data['obj_id'], $ilUser->getId());
2016 // END PATCH ChangeEvent: Record link event.
2017 }
2018
2019 $ilLog->write(__METHOD__ . ', link finished');
2020 }
2021
2022 $linked_targets = array();
2023 $links = [];
2024 if (count($linked_to_folders)) {
2025 require_once 'Services/Link/classes/class.ilLink.php';
2026 foreach ($linked_to_folders as $ref_id => $title) {
2027 $linked_targets[] = '<a href="' . ilLink::_getLink($ref_id) . '">' . $title . '</a>';
2028 $links[] = $ui->factory()->link()->standard($title, ilLink::_getLink($ref_id));
2029 }
2030 }
2031
2032 $suffix = 'p';
2033 if (count($ref_ids) == 1) {
2034 $suffix = 's';
2035 }
2036
2037 $mbox = $ui->factory()->messageBox()->success($this->lng->txt('mgs_objects_linked_to_the_following_folders_' . $suffix))
2038 ->withLinks($links);
2039
2040 ilUtil::sendSuccess($ui->renderer()->render($mbox), true);
2041 } // END LINK
2042
2043 // clear clipboard
2044 $this->clearObject();
2045
2046 $this->ctrl->returnToParent($this);
2047 }
2048
2050 {
2052
2053 // empty session on init
2054 $_SESSION['paste_linked_repexpand'] = array();
2055
2056 // copy opend nodes from repository explorer
2057 $_SESSION['paste_linked_repexpand'] = is_array($_SESSION['repexpand']) ? $_SESSION['repexpand'] : array();
2058
2059 // open current position
2060 $path = $tree->getPathId((int) $_GET['ref_id']);
2061 foreach ((array) $path as $node_id) {
2062 if (!in_array($node_id, $_SESSION['paste_linked_repexpand'])) {
2063 $_SESSION['paste_linked_repexpand'][] = $node_id;
2064 }
2065 }
2066
2067 return $this->showPasteTreeObject();
2068 }
2069
2073 public function showPasteTreeObject()
2074 {
2075 $ilTabs = $this->tabs;
2076 $ilToolbar = $this->toolbar;
2078
2079 $ilTabs->setTabActive('view_content');
2080
2081 if (!in_array($_SESSION['clipboard']['cmd'], array('link', 'copy', 'cut'))) {
2082 $message = __METHOD__ . ": Unknown action.";
2083 $ilErr->raiseError($message, $ilErr->WARNING);
2084 }
2085 $cmd = $_SESSION['clipboard']['cmd'];
2086
2087 //
2088 $exp = $this->getTreeSelectorGUI($cmd);
2089 if ($exp->handleCommand()) {
2090 return;
2091 }
2092 $output = $exp->getHTML();
2093
2094 $txt_var = ($cmd == "copy")
2095 ? "copy"
2096 : "paste";
2097
2098 // toolbars
2099 $t = new ilToolbarGUI();
2100 $t->setFormAction($this->ctrl->getFormAction($this, "performPasteIntoMultipleObjects"));
2101
2102 include_once("./Services/UIComponent/Button/classes/class.ilSubmitButton.php");
2104 $b->setCaption($txt_var);
2105 $b->setCommand("performPasteIntoMultipleObjects");
2106
2107 //$t->addFormButton($this->lng->txt($txt_var), "performPasteIntoMultipleObjects");
2108 $t->addStickyItem($b);
2109
2110 $t->addSeparator();
2111 $this->lng->loadLanguageModule('obj');
2112 $t->addFormButton($this->lng->txt("obj_insert_into_clipboard"), "keepObjectsInClipboard");
2113
2114 $t->addFormButton($this->lng->txt("cancel"), "cancelMoveLink");
2115 $t->setCloseFormTag(false);
2116 $t->setLeadingImage(ilUtil::getImagePath("arrow_upright.svg"), " ");
2117 $output = $t->getHTML() . $output;
2118 $t->setLeadingImage(ilUtil::getImagePath("arrow_downright.svg"), " ");
2119 $t->setCloseFormTag(true);
2120 $t->setOpenFormTag(false);
2121 $output .= "<br />" . $t->getHTML();
2122
2123 $this->tpl->setContent($output);
2124 }
2125
2126
2131 public function cancelMoveLinkObject()
2132 {
2133 $ilCtrl = $this->ctrl;
2134
2135 unset($_SESSION['clipboard']);
2136 $ilCtrl->returnToParent($this);
2137 }
2138
2143 {
2144 $ilCtrl = $this->ctrl;
2145
2146 ilUtil::sendSuccess($this->lng->txt("obj_inserted_clipboard"), true);
2147 $ilCtrl->returnToParent($this);
2148 }
2149
2150
2152 {
2154
2155 // empty session on init
2156 $_SESSION['paste_copy_repexpand'] = array();
2157
2158 // copy opend nodes from repository explorer
2159 $_SESSION['paste_copy_repexpand'] = is_array($_SESSION['repexpand']) ? $_SESSION['repexpand'] : array();
2160
2161 // open current position
2162 $path = $tree->getPathId((int) $_GET['ref_id']);
2163 foreach ((array) $path as $node_id) {
2164 if (!in_array($node_id, $_SESSION['paste_copy_repexpand'])) {
2165 $_SESSION['paste_copy_repexpand'][] = $node_id;
2166 }
2167 }
2168
2169 return $this->showPasteTreeObject();
2170 }
2171
2172
2174 {
2176
2177 // empty session on init
2178 $_SESSION['paste_cut_repexpand'] = array();
2179
2180 // copy opend nodes from repository explorer
2181 $_SESSION['paste_cut_repexpand'] = is_array($_SESSION['repexpand']) ? $_SESSION['repexpand'] : array();
2182
2183 // open current position
2184 $path = $tree->getPathId((int) $_GET['ref_id']);
2185 foreach ((array) $path as $node_id) {
2186 if (!in_array($node_id, $_SESSION['paste_cut_repexpand'])) {
2187 $_SESSION['paste_cut_repexpand'][] = $node_id;
2188 }
2189 }
2190
2191 return $this->showPasteTreeObject();
2192 }
2193
2194
2201 public function pasteObject()
2202 {
2205 $ilLog = $this->log;
2208 $ilCtrl = $this->ctrl;
2210
2211 $exists = [];
2212 $no_paste = [];
2213 $is_child = [];
2214 $not_allowed_subobject = [];
2215
2216 // BEGIN ChangeEvent: Record paste event.
2217 require_once('Services/Tracking/classes/class.ilChangeEvent.php');
2218 // END ChangeEvent: Record paste event.
2219
2220 //var_dump($_SESSION["clipboard"]);exit;
2221 if (!in_array($_SESSION["clipboard"]["cmd"], array("cut","link","copy"))) {
2222 $message = get_class($this) . "::pasteObject(): cmd was neither 'cut','link' or 'copy'; may be a hack attempt!";
2223 $ilErr->raiseError($message, $ilErr->WARNING);
2224 }
2225
2226 // this loop does all checks
2227 foreach ($_SESSION["clipboard"]["ref_ids"] as $ref_id) {
2229
2230 // CHECK ACCESS
2231 if (!$rbacsystem->checkAccess('create', $this->object->getRefId(), $obj_data->getType())) {
2232 $no_paste[] = $ref_id;
2233 $no_paste_titles[] = $obj_data->getTitle();
2234 }
2235
2236 // CHECK IF REFERENCE ALREADY EXISTS
2237 if ($this->object->getRefId() == $this->tree->getParentId($obj_data->getRefId())) {
2238 $exists[] = $ref_id;
2239 break;
2240 }
2241
2242 // CHECK IF PASTE OBJECT SHALL BE CHILD OF ITSELF
2243 if ($this->tree->isGrandChild($ref_id, $this->object->getRefId())) {
2245 }
2246
2247 if ($ref_id == $this->object->getRefId()) {
2249 }
2250
2251 // CHECK IF OBJECT IS ALLOWED TO CONTAIN PASTED OBJECT AS SUBOBJECT
2252 $obj_type = $obj_data->getType();
2253
2254 if (!in_array($obj_type, array_keys($this->object->getPossibleSubObjects()))) {
2255 $not_allowed_subobject[] = $obj_data->getType();
2256 }
2257 }
2258
2260 // process checking results
2261 // BEGIN WebDAV: Copying an object into the same container is allowed
2262 if (count($exists) > 0 && $_SESSION["clipboard"]["cmd"] != "copy") {
2263 // END WebDAV: Copying an object into the same container is allowed
2264 $ilErr->raiseError($this->lng->txt("msg_obj_exists"), $ilErr->MESSAGE);
2265 }
2266
2267 if (count($is_child) > 0) {
2268 $ilErr->raiseError(
2269 $this->lng->txt("msg_not_in_itself") . " " . implode(',', $is_child),
2270 $ilErr->MESSAGE
2271 );
2272 }
2273
2274 if (count($not_allowed_subobject) > 0) {
2275 $ilErr->raiseError(
2276 $this->lng->txt("msg_may_not_contain") . " " . implode(',', $not_allowed_subobject),
2277 $ilErr->MESSAGE
2278 );
2279 }
2280
2281 if (count($no_paste) > 0) {
2282 $ilErr->raiseError($this->lng->txt("msg_no_perm_paste") . " " .
2283 implode(',', $no_paste), $ilErr->MESSAGE);
2284 }
2285
2286 // log pasteObject call
2287 $ilLog->write("ilObjectGUI::pasteObject(), cmd: " . $_SESSION["clipboard"]["cmd"]);
2288
2290 // everything ok: now paste the objects to new location
2291
2292 // to prevent multiple actions via back/reload button
2293 $ref_ids = $_SESSION["clipboard"]["ref_ids"];
2294 unset($_SESSION["clipboard"]["ref_ids"]);
2295
2296 // BEGIN WebDAV: Support a copy command in the repository
2297 // process COPY command
2298 if ($_SESSION["clipboard"]["cmd"] == "copy") {
2299 unset($_SESSION["clipboard"]["cmd"]);
2300
2301 // new implementation, redirects to ilObjectCopyGUI
2302 if (count($ref_ids) == 1) {
2303 $ilCtrl->setParameterByClass("ilobjectcopygui", "target", $this->object->getRefId());
2304 $ilCtrl->setParameterByClass("ilobjectcopygui", "source_id", $ref_ids[0]);
2305 $ilCtrl->redirectByClass("ilobjectcopygui", "saveTarget");
2306 } else {
2307 $ilCtrl->setParameterByClass("ilobjectcopygui", "target", $this->object->getRefId());
2308 $ilCtrl->setParameterByClass("ilobjectcopygui", "source_ids", implode("_", $ref_ids));
2309 $ilCtrl->redirectByClass("ilobjectcopygui", "saveTarget");
2310 }
2311
2312
2313
2314 /* old implementation
2315
2316 foreach($ref_ids as $ref_id)
2317 {
2318 $revIdMapping = array();
2319
2320 $oldNode_data = $tree->getNodeData($ref_id);
2321 if ($oldNode_data['parent'] == $this->object->getRefId())
2322 {
2323 require_once 'Modules/File/classes/class.ilObjFileAccess.php';
2324 $newTitle = ilObjFileAccess::_appendNumberOfCopyToFilename($oldNode_data['title'],null);
2325 $newRef = $this->cloneNodes($ref_id, $this->object->getRefId(), $refIdMapping, $newTitle);
2326 }
2327 else
2328 {
2329 $newRef = $this->cloneNodes($ref_id, $this->object->getRefId(), $refIdMapping, null);
2330 }
2331
2332 // BEGIN ChangeEvent: Record copy event.
2333 $old_parent_data = $tree->getParentNodeData($ref_id);
2334 $newNode_data = $tree->getNodeData($newRef);
2335 ilChangeEvent::_recordReadEvent($oldNode_data['type'], $ref_id,
2336 $oldNode_data['obj_id'], $ilUser->getId());
2337 ilChangeEvent::_recordWriteEvent($newNode_data['obj_id'], $ilUser->getId(), 'add',
2338 $this->object->getId());
2339 ilChangeEvent::_catchupWriteEvents($newNode_data['obj_id'], $ilUser->getId());
2340 // END ChangeEvent: Record copy event.
2341 }*/
2342
2343 $ilLog->write("ilObjectGUI::pasteObject(), copy finished");
2344 }
2345 // END WebDAV: Support a Copy command in the repository
2346
2347 // process CUT command
2348 if ($_SESSION["clipboard"]["cmd"] == "cut") {
2349 foreach ($ref_ids as $ref_id) {
2350 // Store old parent
2351 $old_parent = $tree->getParentId($ref_id);
2352 $this->tree->moveTree($ref_id, $this->object->getRefId());
2353 $rbacadmin->adjustMovedObjectPermissions($ref_id, $old_parent);
2354
2355 include_once('./Services/Conditions/classes/class.ilConditionHandler.php');
2357
2358 // BEGIN ChangeEvent: Record cut event.
2359 $node_data = $tree->getNodeData($ref_id);
2360 $old_parent_data = $tree->getNodeData($old_parent);
2362 $node_data['obj_id'],
2363 $ilUser->getId(),
2364 'remove',
2365 $old_parent_data['obj_id']
2366 );
2368 $node_data['obj_id'],
2369 $ilUser->getId(),
2370 'add',
2371 $this->object->getId()
2372 );
2373 ilChangeEvent::_catchupWriteEvents($node_data['obj_id'], $ilUser->getId());
2374 // END PATCH ChangeEvent: Record cut event.
2375 }
2376 } // END CUT
2377
2378 // process LINK command
2379 if ($_SESSION["clipboard"]["cmd"] == "link") {
2380 foreach ($ref_ids as $ref_id) {
2381 // get node data
2382 $top_node = $this->tree->getNodeData($ref_id);
2383
2384 // get subnodes of top nodes
2385 $subnodes[$ref_id] = $this->tree->getSubtree($top_node);
2386 }
2387
2388 // now move all subtrees to new location
2389 foreach ($subnodes as $key => $subnode) {
2390 // first paste top_node....
2392 $new_ref_id = $obj_data->createReference();
2393 $obj_data->putInTree($_GET["ref_id"]);
2394 $obj_data->setPermissions($_GET["ref_id"]);
2395
2396 // BEGIN ChangeEvent: Record link event.
2397 $node_data = $tree->getNodeData($new_ref_id);
2399 $node_data['obj_id'],
2400 $ilUser->getId(),
2401 'add',
2402 $this->object->getId()
2403 );
2404 ilChangeEvent::_catchupWriteEvents($node_data['obj_id'], $ilUser->getId());
2405 // END PATCH ChangeEvent: Record link event.
2406 }
2407
2408 $ilLog->write("ilObjectGUI::pasteObject(), link finished");
2409 } // END LINK
2410
2411 // save cmd for correct message output after clearing the clipboard
2412 $last_cmd = $_SESSION["clipboard"]["cmd"];
2413
2414
2415 // clear clipboard
2416 $this->clearObject();
2417
2418 if ($last_cmd == "cut") {
2419 ilUtil::sendSuccess($this->lng->txt("msg_cut_copied"), true);
2420 }
2421 // BEGIN WebDAV: Support a copy command in repository
2422 elseif ($last_cmd == "copy") {
2423 ilUtil::sendSuccess($this->lng->txt("msg_cloned"), true);
2424 } elseif ($last_cmd == 'link') {
2425 // END WebDAV: Support copy command in repository
2426 ilUtil::sendSuccess($this->lng->txt("msg_linked"), true);
2427 }
2428
2429 $this->ctrl->returnToParent($this);
2430 } // END PASTE
2431
2432
2436 public function clipboardObject()
2437 {
2439 $ilLog = $this->log;
2440 $ilTabs = $this->tabs;
2441 $tpl = $this->tpl;
2442 $ilToolbar = $this->toolbar;
2443 $ilCtrl = $this->ctrl;
2444 $lng = $this->lng;
2445
2446 $ilTabs->activateTab("clipboard");
2447
2448 // function should not be called if clipboard is empty
2449 if (empty($_SESSION['clipboard']) or !is_array($_SESSION['clipboard'])) {
2450 $message = sprintf('%s::clipboardObject(): Illegal access. Clipboard variable is empty!', get_class($this));
2451 $ilLog->write($message, $ilLog->FATAL);
2452 $ilErr->raiseError($this->lng->txt("permission_denied"), $ilErr->WARNING);
2453 }
2454
2455 $data = array();
2456 foreach ($_SESSION["clipboard"]["ref_ids"] as $ref_id) {
2457 if (!$tmp_obj = ilObjectFactory::getInstanceByRefId($ref_id, false)) {
2458 continue;
2459 }
2460
2461 $data[] = array(
2462 "type" => $tmp_obj->getType(),
2463 "type_txt" => $this->lng->txt("obj_" . $tmp_obj->getType()),
2464 "title" => $tmp_obj->getTitle(),
2465 "cmd" => ($_SESSION["clipboard"]["cmd"] == "cut") ? $this->lng->txt("move") :$this->lng->txt($_SESSION["clipboard"]["cmd"]),
2466 "ref_id" => $ref_id,
2467 "obj_id" => $tmp_obj->getId()
2468 );
2469
2470 unset($tmp_obj);
2471 }
2472
2473 include_once("./Services/Object/classes/class.ilObjClipboardTableGUI.php");
2474 $tab = new ilObjClipboardTableGUI($this, "clipboard");
2475 $tab->setData($data);
2476 $tpl->setContent($tab->getHTML());
2477
2478 if (count($data) > 0) {
2479 $ilToolbar->setFormAction($ilCtrl->getFormAction($this));
2480 $ilToolbar->addFormButton(
2481 $lng->txt("insert_object_here"),
2482 "paste"
2483 );
2484 $ilToolbar->addFormButton(
2485 $lng->txt("clear_clipboard"),
2486 "clear"
2487 );
2488 }
2489
2490 return true;
2491 }
2492
2494 {
2495 // #10081
2496 if ($_SESSION["il_cont_admin_panel"] &&
2497 $this->object->getRefId() &&
2498 !$this->rbacsystem->checkAccess("visible,read", $this->object->getRefId())) {
2499 return false;
2500 }
2501
2502 return $_SESSION["il_cont_admin_panel"];
2503 }
2504
2508 public function setColumnSettings(ilColumnGUI $column_gui)
2509 {
2510 $ilAccess = $this->access;
2511 parent::setColumnSettings($column_gui);
2512
2513 $column_gui->setRepositoryItems(
2514 $this->object->getSubItems($this->isActiveAdministrationPanel(), true)
2515 );
2516
2517 //if ($ilAccess->checkAccess("write", "", $this->object->getRefId())
2518 // && $this->allowBlocksConfigure())
2519 if ($ilAccess->checkAccess("write", "", $this->object->getRefId())) {
2520 $column_gui->setBlockProperty("news", "settings", true);
2521 //$column_gui->setBlockProperty("news", "public_notifications_option", true);
2522 $column_gui->setBlockProperty("news", "default_visibility_option", true);
2523 $column_gui->setBlockProperty("news", "hide_news_block_option", true);
2524 }
2525
2526 if ($this->isActiveAdministrationPanel()) {
2527 $column_gui->setAdminCommands(true);
2528 }
2529 }
2530
2534 public function allowBlocksMoving()
2535 {
2536 return true;
2537 }
2538
2542 public function allowBlocksConfigure()
2543 {
2544 return true;
2545 }
2546
2555 {
2556 $this->cloneWizardPageObject(true);
2557 }
2558
2567 {
2568 $this->cloneWizardPageObject(false);
2569 }
2570
2577 public function cloneWizardPageObject($a_tree_view = true)
2578 {
2579 include_once('Services/CopyWizard/classes/class.ilCopyWizardPageFactory.php');
2580
2581 $ilObjDataCache = $this->obj_data_cache;
2583
2584 if (!$_REQUEST['clone_source']) {
2585 ilUtil::sendFailure($this->lng->txt('select_one'));
2586 if (isset($_SESSION['wizard_search_title'])) {
2587 $this->searchCloneSourceObject();
2588 } else {
2589 $this->createObject();
2590 }
2591 return false;
2592 }
2593 $source_id = $_REQUEST['clone_source'];
2594 $new_type = $_REQUEST['new_type'];
2595 $this->ctrl->setParameter($this, 'clone_source', (int) $_REQUEST['clone_source']);
2596 $this->ctrl->setParameter($this, 'new_type', $new_type);
2597
2598
2599 // Generell JavaScript
2600 $this->tpl->addJavaScript('./Services/CopyWizard/js/ilContainer.js');
2601 $this->tpl->setVariable('BODY_ATTRIBUTES', 'onload="ilDisableChilds(\'cmd\');"');
2602
2603
2604 $this->tpl->addBlockFile(
2605 'ADM_CONTENT',
2606 'adm_content',
2607 'tpl.container_wizard_page.html',
2608 "Services/Container"
2609 );
2610 $this->tpl->setVariable('FORMACTION', $this->ctrl->getFormAction($this));
2611 $this->tpl->setVariable('TYPE_IMG', ilUtil::getImagePath('icon_' . $new_type . '.svg'));
2612 $this->tpl->setVariable('ALT_IMG', $this->lng->txt('obj_' . $new_type));
2613 $this->tpl->setVariable('TXT_DUPLICATE', $this->lng->txt($new_type . '_wizard_page'));
2614 $this->tpl->setVariable('INFO_DUPLICATE', $this->lng->txt($new_type . '_copy_threads_info'));
2615 $this->tpl->setVariable('BTN_COPY', $this->lng->txt('obj_' . $new_type . '_duplicate'));
2616 $this->tpl->setVariable('BTN_BACK', $this->lng->txt('btn_back'));
2617 if (isset($_SESSION['wizard_search_title'])) {
2618 $this->tpl->setVariable('CMD_BACK', 'searchCloneSource');
2619 } else {
2620 $this->tpl->setVariable('CMD_BACK', 'create');
2621 }
2622
2623 $this->tpl->setVariable('BTN_TREE', $this->lng->txt('treeview'));
2624 $this->tpl->setVariable('BTN_LIST', $this->lng->txt('flatview'));
2625
2626 // Fill item rows
2627 // tree view
2628 if ($a_tree_view) {
2629 $first = true;
2630 $has_items = false;
2631 foreach ($subnodes = $tree->getSubtree($source_node = $tree->getNodeData($source_id), true) as $node) {
2632 if ($first == true) {
2633 $first = false;
2634 continue;
2635 }
2636
2637 if ($node['type'] == 'rolf') {
2638 continue;
2639 }
2640
2641 $has_items = true;
2642
2643 for ($i = $source_node['depth'];$i < $node['depth']; $i++) {
2644 $this->tpl->touchBlock('padding');
2645 $this->tpl->touchBlock('end_padding');
2646 }
2647 // fill options
2648 $copy_wizard_page = ilCopyWizardPageFactory::_getInstanceByType($source_id, $node['type']);
2649 $copy_wizard_page->fillTreeSelection($node['ref_id'], $node['type'], $node['depth']);
2650
2651 $this->tpl->setCurrentBlock('tree_row');
2652 $this->tpl->setVariable('TREE_IMG', ilUtil::getImagePath('icon_' . $node['type'] . '.svg'));
2653 $this->tpl->setVariable('TREE_ALT_IMG', $this->lng->txt('obj_' . $node['type']));
2654 $this->tpl->setVariable('TREE_TITLE', $node['title']);
2655 $this->tpl->parseCurrentBlock();
2656 }
2657 if (!$has_items) {
2658 $this->tpl->setCurrentBlock('no_content');
2659 $this->tpl->setVariable('TXT_NO_CONTENT', $this->lng->txt('container_no_items'));
2660 $this->tpl->parseCurrentBlock();
2661 } else {
2662 $this->tpl->setCurrentBlock('tree_footer');
2663 $this->tpl->setVariable('TXT_COPY_ALL', $this->lng->txt('copy_all'));
2664 $this->tpl->setVariable('TXT_LINK_ALL', $this->lng->txt('link_all'));
2665 $this->tpl->setVariable('TXT_OMIT_ALL', $this->lng->txt('omit_all'));
2666 $this->tpl->parseCurrentBlock();
2667 }
2668 } else {
2669 foreach ($tree->getSubTreeTypes($source_id, array('rolf','crs')) as $type) {
2670 $copy_wizard_page = ilCopyWizardPageFactory::_getInstanceByType($source_id, $type);
2671 if (strlen($html = $copy_wizard_page->getWizardPageBlockHTML())) {
2672 $this->tpl->setCurrentBlock('obj_row');
2673 $this->tpl->setVariable('ITEM_BLOCK', $html);
2674 $this->tpl->parseCurrentBlock();
2675 }
2676 }
2677 }
2678 }
2679
2687 public function cloneAllObject()
2688 {
2689 $ilLog = $this->log;
2690 $ilCtrl = $this->ctrl;
2691
2692 include_once('./Services/Link/classes/class.ilLink.php');
2693 include_once('Services/CopyWizard/classes/class.ilCopyWizardOptions.php');
2694
2695 $ilAccess = $this->access;
2700
2701 $new_type = $_REQUEST['new_type'];
2702 $ref_id = (int) $_GET['ref_id'];
2703 $clone_source = (int) $_REQUEST['clone_source'];
2704
2705 if (!$rbacsystem->checkAccess('create', $ref_id, $new_type)) {
2706 $ilErr->raiseError($this->lng->txt('permission_denied'));
2707 }
2708 if (!$clone_source) {
2709 ilUtil::sendFailure($this->lng->txt('select_one'));
2710 $this->createObject();
2711 return false;
2712 }
2713 if (!$ilAccess->checkAccess('write', '', $clone_source, $new_type)) {
2714 $ilErr->raiseError($this->lng->txt('permission_denied'));
2715 }
2716
2717 $options = $_POST['cp_options'] ? $_POST['cp_options'] : array();
2718 $orig = ilObjectFactory::getInstanceByRefId($clone_source);
2719 $result = $orig->cloneAllObject($_COOKIE[session_name()], $_COOKIE['ilClientId'], $new_type, $ref_id, $clone_source, $options);
2720
2721 include_once './Services/CopyWizard/classes/class.ilCopyWizardOptions.php';
2722 if (ilCopyWizardOptions::_isFinished($result['copy_id'])) {
2723 ilUtil::sendSuccess($this->lng->txt("object_duplicated"), true);
2724 $ilCtrl->setParameterByClass("ilrepositorygui", "ref_id", $result['ref_id']);
2725 $ilCtrl->redirectByClass("ilrepositorygui", "");
2726 } else {
2727 ilUtil::sendInfo($this->lng->txt("object_copy_in_progress"), true);
2728 $ilCtrl->setParameterByClass("ilrepositorygui", "ref_id", $ref_id);
2729 $ilCtrl->redirectByClass("ilrepositorygui", "");
2730 }
2731 }
2732
2733
2741 public function saveSortingObject()
2742 {
2743 include_once('Services/Container/classes/class.ilContainerSorting.php');
2744 $sorting = ilContainerSorting::_getInstance($this->object->getId());
2745
2746 // Allow comma
2747 $positions = str_replace(',', '.', $_POST['position']);
2748
2749 $sorting->savePost($positions);
2750 ilUtil::sendSuccess($this->lng->txt('cntr_saved_sorting'), true);
2751 $this->ctrl->redirect($this, "editOrder");
2752 }
2753
2754 // BEGIN WebDAV: Support a copy command in the repository
2765 public function cloneNodes($srcRef, $dstRef, &$mapping, $newName = null)
2766 {
2768
2769 // clone the source node
2770 $srcObj = ilObjectFactory::getInstanceByRefId($srcRef);
2771 error_log(__METHOD__ . ' cloning srcRef=' . $srcRef . ' dstRef=' . $dstRef . '...');
2772 $newRef = $srcObj->cloneObject($dstRef)->getRefId();
2773 error_log(__METHOD__ . ' ...cloning... newRef=' . $newRef . '...');
2774
2775 // We must immediately apply a new name to the object, to
2776 // prevent confusion of WebDAV clients about having two objects with identical
2777 // name in the repository.
2778 if (!is_null($newName)) {
2779 $newObj = ilObjectFactory::getInstanceByRefId($newRef);
2780 $newObj->setTitle($newName);
2781 $newObj->update();
2782 unset($newObj);
2783 }
2784 unset($srcObj);
2785 $mapping[$newRef] = $srcRef;
2786
2787 // clone all children of the source node
2788 $children = $tree->getChilds($srcRef);
2789 foreach ($tree->getChilds($srcRef) as $child) {
2790 // Don't clone role folders, because it does not make sense to clone local roles
2791 // FIXME - Maybe it does make sense (?)
2792 if ($child["type"] != 'rolf') {
2793 $this->cloneNodes($child["ref_id"], $newRef, $mapping);
2794 } else {
2795 if (count($rolf = $tree->getChildsByType($newRef, "rolf"))) {
2796 $mapping[$rolf[0]["ref_id"]] = $child["ref_id"];
2797 }
2798 }
2799 }
2800 error_log(__METHOD__ . ' ...cloned srcRef=' . $srcRef . ' dstRef=' . $dstRef . ' newRef=' . $newRef);
2801 return $newRef;
2802 }
2803 // END PATCH WebDAV: Support a copy command in the repository
2804
2811 public function modifyItemGUI($a_item_list_gui, $a_item_data, $a_show_path)
2812 {
2813 $lng = $this->lng;
2814
2815 if ($a_show_path) {
2816 $a_item_list_gui->addCustomProperty(
2817 $lng->txt('path'),
2818 ilContainer::buildPath($a_item_data['ref_id'], $this->object->getRefId()),
2819 false,
2820 true
2821 );
2822 }
2823 }
2824
2828 public static function _buildPath($a_ref_id, $a_course_ref_id)
2829 {
2830 global $DIC;
2831
2832 $tree = $DIC->repositoryTree();
2833
2834 $path_arr = $tree->getPathFull($a_ref_id, $a_course_ref_id);
2835 $counter = 0;
2836 foreach ($path_arr as $data) {
2837 if ($counter++) {
2838 $path .= " > ";
2839 }
2840 $path .= $data['title'];
2841 }
2842
2843 return $path;
2844 }
2845
2846 //
2847 // Style editing
2848 //
2849
2854 {
2855 $ilTabs = $this->tabs;
2856 $tpl = $this->tpl;
2857
2858 $this->checkPermission("write");
2859
2860 $this->initStylePropertiesForm();
2861 $tpl->setContent($this->form->getHTML());
2862
2863 $ilTabs->activateTab("obj_sty");
2864 }
2865
2869 public function initStylePropertiesForm()
2870 {
2871 $ilCtrl = $this->ctrl;
2872 $lng = $this->lng;
2873 $ilTabs = $this->tabs;
2875 $tpl = $this->tpl;
2876
2877 $tpl->setTreeFlatIcon("", "");
2878 $ilTabs->clearTargets();
2880 $this->object->getId(),
2881 "xhtml_page"
2882 );
2883 if ($xpage_id > 0) {
2884 $ilTabs->setBackTarget(
2885 $lng->txt("cntr_back_to_old_editor"),
2886 $ilCtrl->getLinkTarget($this, "switchToOldEditor"),
2887 "_top"
2888 );
2889 } else {
2890 $ilTabs->setBackTarget(
2891 $lng->txt("back"),
2892 $this->ctrl->getLinkTargetByClass("ilcontainerpagegui", "edit")
2893 );
2894 }
2895
2896 include_once("./Services/Container/classes/class.ilContainerPageGUI.php");
2897 $page_gui = new ilContainerPageGUI($this->object->getId());
2898 $style_id = $this->object->getStyleSheetId();
2899 if (ilObject::_lookupType($style_id) == "sty") {
2900 $page_gui->setStyleId($style_id);
2901 } else {
2902 $style_id = 0;
2903 }
2904 $page_gui->setTabHook($this, "addPageTabs");
2905 $ilCtrl->getHTML($page_gui);
2906 $ilTabs->setTabActive("obj_sty");
2907
2908 include_once("./Services/Style/Content/classes/class.ilObjStyleSheet.php");
2909 $lng->loadLanguageModule("style");
2910
2911 include_once("./Services/Form/classes/class.ilPropertyFormGUI.php");
2912 $this->form = new ilPropertyFormGUI();
2913
2914 $fixed_style = $ilSetting->get("fixed_content_style_id");
2915 // $style_id = $this->object->getStyleSheetId();
2916
2917 if ($fixed_style > 0) {
2918 $st = new ilNonEditableValueGUI($lng->txt("wiki_current_style"));
2919 $st->setValue(ilObject::_lookupTitle($fixed_style) . " (" .
2920 $this->lng->txt("global_fixed") . ")");
2921 $this->form->addItem($st);
2922 } else {
2924 true,
2925 false,
2926 $_GET["ref_id"]
2927 );
2928
2929 $st_styles[0] = $this->lng->txt("default");
2930 ksort($st_styles);
2931
2932 if ($style_id > 0) {
2933 // individual style
2934 if (!ilObjStyleSheet::_lookupStandard($style_id)) {
2935 $st = new ilNonEditableValueGUI($lng->txt("style_current_style"));
2936 $st->setValue(ilObject::_lookupTitle($style_id));
2937 $this->form->addItem($st);
2938
2939 //$this->ctrl->getLinkTargetByClass("ilObjStyleSheetGUI", "edit"));
2940
2941 // delete command
2942 $this->form->addCommandButton(
2943 "editStyle",
2944 $lng->txt("style_edit_style")
2945 );
2946 $this->form->addCommandButton(
2947 "deleteStyle",
2948 $lng->txt("style_delete_style")
2949 );
2950 //$this->ctrl->getLinkTargetByClass("ilObjStyleSheetGUI", "delete"));
2951 }
2952 }
2953
2954 if ($style_id <= 0 || ilObjStyleSheet::_lookupStandard($style_id)) {
2955 $style_sel = ilUtil::formSelect(
2956 $style_id,
2957 "style_id",
2958 $st_styles,
2959 false,
2960 true
2961 );
2962 $style_sel = new ilSelectInputGUI($lng->txt("style_current_style"), "style_id");
2963 $style_sel->setOptions($st_styles);
2964 $style_sel->setValue($style_id);
2965 $this->form->addItem($style_sel);
2966 //$this->ctrl->getLinkTargetByClass("ilObjStyleSheetGUI", "create"));
2967 $this->form->addCommandButton(
2968 "saveStyleSettings",
2969 $lng->txt("save")
2970 );
2971 $this->form->addCommandButton(
2972 "createStyle",
2973 $lng->txt("sty_create_ind_style")
2974 );
2975 }
2976 }
2977 $this->form->setTitle($lng->txt("obj_sty"));
2978 $this->form->setFormAction($ilCtrl->getFormAction($this));
2979 }
2980
2984 public function createStyleObject()
2985 {
2986 $ilCtrl = $this->ctrl;
2987
2988 $ilCtrl->redirectByClass("ilobjstylesheetgui", "create");
2989 }
2990
2994 public function editStyleObject()
2995 {
2996 $ilCtrl = $this->ctrl;
2997
2998 $ilCtrl->redirectByClass("ilobjstylesheetgui", "edit");
2999 }
3000
3004 public function deleteStyleObject()
3005 {
3006 $ilCtrl = $this->ctrl;
3007
3008 $ilCtrl->redirectByClass("ilobjstylesheetgui", "delete");
3009 }
3010
3014 public function saveStyleSettingsObject()
3015 {
3017
3018 include_once("./Services/Style/Content/classes/class.ilObjStyleSheet.php");
3019 if ($ilSetting->get("fixed_content_style_id") <= 0 &&
3020 (ilObjStyleSheet::_lookupStandard($this->object->getStyleSheetId())
3021 || $this->object->getStyleSheetId() == 0)) {
3022 $this->object->setStyleSheetId(ilUtil::stripSlashes($_POST["style_id"]));
3023 $this->object->update();
3024 ilUtil::sendSuccess($this->lng->txt("msg_obj_modified"), true);
3025 }
3026 $this->ctrl->redirect($this, "editStyleProperties");
3027 }
3028
3032 public function getAsynchItemListObject()
3033 {
3034 $ilCtrl = $this->ctrl;
3035
3036 $ref_id = $_GET["cmdrefid"];
3039
3040 // this should be done via container-object->getSubItem in the future
3041 $data = array("child" => $ref_id, "ref_id" => $ref_id, "obj_id" => $obj_id,
3042 "type" => $type);
3043 include_once 'Services/Object/classes/class.ilObjectListGUIFactory.php';
3045 $item_list_gui->setContainerObject($this);
3046
3047 $item_list_gui->enableComments(true);
3048 $item_list_gui->enableNotes(true);
3049 $item_list_gui->enableTags(true);
3050
3051 $this->modifyItemGUI($item_list_gui, $data, false);
3052 $html = $item_list_gui->getListItemHTML(
3053 $ref_id,
3054 $obj_id,
3055 "",
3056 "",
3057 true,
3058 true
3059 );
3060
3061 // include plugin slot for async item list
3062 $ilPluginAdmin = $this->plugin_admin;
3063 $pl_names = $ilPluginAdmin->getActivePluginsForSlot(IL_COMP_SERVICE, "UIComponent", "uihk");
3064 foreach ($pl_names as $pl) {
3065 $ui_plugin = ilPluginAdmin::getPluginObject(IL_COMP_SERVICE, "UIComponent", "uihk", $pl);
3066 $gui_class = $ui_plugin->getUIClassInstance();
3067 $resp = $gui_class->getHTML("Services/Container", "async_item_list", array("html" => $html));
3068 if ($resp["mode"] != ilUIHookPluginGUI::KEEP) {
3069 $html = $gui_class->modifyHTML($html, $resp);
3070 }
3071 }
3072
3073 echo $html;
3074 exit;
3075 }
3076
3081 protected function showPasswordInstructionObject($a_init = true)
3082 {
3083 global $DIC;
3084 $tpl = $this->tpl;
3085 $ilToolbar = $this->toolbar;
3086
3087 if ($a_init) {
3088 ilUtil::sendInfo($this->lng->txt('webdav_pwd_instruction'));
3090 }
3091
3092 $uri_builder = new ilWebDAVUriBuilder($DIC->http()->request());
3093 $href = $uri_builder->getUriToMountInstructionModalByRef($this->object->getRefId());
3094
3095 $btn = ilButton::getInstance();
3096 $btn->setCaption('mount_webfolder');
3097 $btn->setOnClick("triggerWebDAVModal('$href')");
3098 $ilToolbar->addButtonInstance($btn);
3099
3100 $tpl->setContent($this->form->getHTML());
3101 }
3102
3107 protected function initFormPasswordInstruction()
3108 {
3109 include_once("Services/Form/classes/class.ilPropertyFormGUI.php");
3110 $this->form = new ilPropertyFormGUI();
3111 $this->form->setFormAction($this->ctrl->getFormAction($this));
3112
3113 // new password
3114 $ipass = new ilPasswordInputGUI($this->lng->txt("desired_password"), "new_password");
3115 $ipass->setRequired(true);
3116
3117 $this->form->addItem($ipass);
3118 $this->form->addCommandButton("savePassword", $this->lng->txt("save"));
3119 $this->form->addCommandButton('cancel', $this->lng->txt('cancel'));
3120
3121 $this->form->setTitle($this->lng->txt("chg_ilias_and_webfolder_password"));
3122 $this->form->setFormAction($this->ctrl->getFormAction($this));
3123
3124 return $this->form;
3125 }
3126
3131 protected function savePasswordObject()
3132 {
3134
3135 $form = $this->initFormPasswordInstruction();
3136 if ($form->checkInput()) {
3137 $ilUser->resetPassword($this->form->getInput('new_password'), $this->form->getInput('new_password'));
3138 ilUtil::sendSuccess($this->lng->txt('webdav_pwd_instruction_success'), true);
3139 $this->showPasswordInstructionObject(false);
3140 return true;
3141 }
3142 $form->setValuesByPost();
3144 }
3145
3152 public function redrawListItemObject()
3153 {
3154 $tpl = $this->tpl;
3155
3156 $html = null;
3157
3158 $item_data = $this->object->getSubItems(false, false, (int) $_GET["child_ref_id"]);
3159 $container_view = $this->getContentGUI();
3160
3161 // list item is session material (not part of "_all"-items - see below)
3162 include_once './Modules/Session/classes/class.ilEventItems.php';
3163 $event_items = ilEventItems::_getItemsOfContainer($this->object->getRefId());
3164 if (in_array((int) $_GET["child_ref_id"], $event_items)) {
3165 include_once('./Services/Object/classes/class.ilObjectActivation.php');
3166 foreach ($this->object->items["sess"] as $id) {
3167 $items = ilObjectActivation::getItemsByEvent($id['obj_id']);
3168 foreach ($items as $event_item) {
3169 if ($event_item["child"] == (int) $_GET["child_ref_id"]) {
3170 // sessions
3171 if ((int) $_GET["parent_ref_id"]) {
3172 $event_item["parent"] = (int) $_GET["parent_ref_id"];
3173 }
3174 $html = $container_view->renderItem($event_item);
3175 }
3176 }
3177 }
3178 }
3179
3180 // "normal" list item
3181 if (!$html) {
3182 foreach ($this->object->items["_all"] as $id) {
3183 if ($id["child"] == (int) $_GET["child_ref_id"]) {
3184 $html = $container_view->renderItem($id);
3185 }
3186 }
3187 }
3188
3189 if ($html) {
3190 echo $html;
3191
3192 // we need to add onload code manually (rating, comments, etc.)
3193 echo $tpl->getOnLoadCodeForAsynch();
3194 }
3195
3196 exit;
3197 }
3198
3199 // begin-patch fm
3206 protected function initHeaderAction($a_sub_type = null, $a_sub_id = null)
3207 {
3208 $lg = parent::initHeaderAction($a_sub_type, $a_sub_id);
3209
3210 return $lg;
3211 }
3212
3216 protected function fileManagerLaunchObject()
3217 {
3219
3220 $tpl = new ilTemplate('tpl.fm_launch_ws.html', false, false, 'Services/WebServices/FileManager');
3221 $tpl->setVariable('JNLP_URL', ILIAS_HTTP_PATH . '/Services/WebServices/FileManager/lib/dist/FileManager.jnlp');
3222 $tpl->setVariable('SESSION_ID', $_COOKIE[session_name()] . '::' . CLIENT_ID);
3223 $tpl->setVariable('UID', $ilUser->getId());
3224 $tpl->setVariable('REF_ID', $this->object->getRefId());
3225 $tpl->setVariable('WSDL_URI', ILIAS_HTTP_PATH . '/webservice/soap/server.php?wsdl');
3226 $tpl->setVariable('LOCAL_FRAME', ilFMSettings::getInstance()->isLocalFSEnabled() ? 1 : 0);
3227 $tpl->setVariable('REST_URI', ILIAS_HTTP_PATH . '/Services/WebServices/Rest/server.php');
3228 $tpl->setVariable('FILE_LOCKS', 0);
3229 $tpl->setVariable('UPLOAD_FILESIZE', ilFMSettings::getInstance()->getMaxFileSize());
3230
3231 include_once("./Modules/SystemFolder/classes/class.ilObjSystemFolder.php");
3232 $header_top_title = ilObjSystemFolder::_getHeaderTitle();
3233 $tpl->setVariable('HEADER_TITLE', $header_top_title ? $header_top_title : '');
3234 echo $tpl->get();
3235 exit;
3236 }
3237 // begin-patch fm
3238
3244 protected function initEditForm()
3245 {
3246 $lng = $this->lng;
3247 $ilCtrl = $this->ctrl;
3248
3249 $lng->loadLanguageModule($this->object->getType());
3250
3251 include_once("Services/Form/classes/class.ilPropertyFormGUI.php");
3252 $form = new ilPropertyFormGUI();
3253 $form->setFormAction($this->ctrl->getFormAction($this, "update"));
3254 $form->setTitle($this->lng->txt($this->object->getType() . "_edit"));
3255
3256 $this->initFormTitleDescription($form);
3257
3258 $this->initEditCustomForm($form);
3259
3260 $form->addCommandButton("update", $this->lng->txt("save"));
3261 //$this->form->addCommandButton("cancelUpdate", $lng->txt("cancel"));
3262
3263 return $form;
3264 }
3265
3270 public function initFormTitleDescription(ilPropertyFormGUI $form)
3271 {
3272 if ($this->getCreationMode() != true) {
3274 $trans = $this->object->getObjectTranslation();
3275 }
3276 $title = new ilTextInputGUI($this->lng->txt("title"), "title");
3277 $title->setRequired(true);
3278 $title->setSize(min(40, ilObject::TITLE_LENGTH));
3279 $title->setMaxLength(ilObject::TITLE_LENGTH);
3280 $form->addItem($title);
3281
3282 if ($this->getCreationMode() != true && sizeof($trans->getLanguages()) > 1) {
3283 include_once('Services/MetaData/classes/class.ilMDLanguageItem.php');
3284 $languages = ilMDLanguageItem::_getLanguages();
3285 $title->setInfo($this->lng->txt("language") . ": " . $languages[$trans->getDefaultLanguage()] .
3286 ' <a href="' . $this->ctrl->getLinkTargetByClass("ilobjecttranslationgui", "") .
3287 '">&raquo; ' . $this->lng->txt("obj_more_translations") . '</a>');
3288
3289 unset($languages);
3290 }
3291 $desc = new ilTextAreaInputGUI($this->lng->txt("description"), "desc");
3292 $desc->setRows(2);
3293 $desc->setCols(40);
3294 $form->addItem($desc);
3295
3296 if ($this->getCreationMode() != true) {
3297 $title->setValue($trans->getDefaultTitle());
3298 $desc->setValue($trans->getDefaultDescription());
3299 }
3300 }
3301
3302
3308 protected function initSortingForm(ilPropertyFormGUI $form, array $a_sorting_settings)
3309 {
3310 include_once('Services/Container/classes/class.ilContainerSortingSettings.php');
3311 include_once './Services/Container/classes/class.ilContainer.php';
3312
3313 $settings = new ilContainerSortingSettings($this->object->getId());
3314 $sort = new ilRadioGroupInputGUI($this->lng->txt('sorting_header'), "sorting");
3315
3316 if (in_array(ilContainer::SORT_INHERIT, $a_sorting_settings)) {
3317 $sort_inherit = new ilRadioOption();
3318 $sort_inherit->setTitle(
3319 $this->lng->txt('sort_inherit_prefix') .
3322 $this->object->getId()
3323 )
3324 ) . ') '
3325 );
3326 $sort_inherit->setValue(ilContainer::SORT_INHERIT);
3327 $sort_inherit->setInfo($this->lng->txt('sorting_info_inherit'));
3328 $sort->addOption($sort_inherit);
3329 }
3330 if (in_array(ilContainer::SORT_TITLE, $a_sorting_settings)) {
3331 $sort_title = new ilRadioOption(
3332 $this->lng->txt('sorting_title_header'),
3334 );
3335 $sort_title->setInfo($this->lng->txt('sorting_info_title'));
3336
3337 $this->initSortingDirectionForm($settings, $sort_title, 'title');
3338 $sort->addOption($sort_title);
3339 }
3340 if (in_array(ilContainer::SORT_CREATION, $a_sorting_settings)) {
3341 $sort_activation = new ilRadioOption($this->lng->txt('sorting_creation_header'), ilContainer::SORT_CREATION);
3342 $sort_activation->setInfo($this->lng->txt('sorting_creation_info'));
3343 $this->initSortingDirectionForm($settings, $sort_activation, 'creation');
3344 $sort->addOption($sort_activation);
3345 }
3346 if (in_array(ilContainer::SORT_ACTIVATION, $a_sorting_settings)) {
3347 $sort_activation = new ilRadioOption($this->lng->txt('crs_sort_activation'), ilContainer::SORT_ACTIVATION);
3348 $sort_activation->setInfo($this->lng->txt('crs_sort_timing_info'));
3349 $this->initSortingDirectionForm($settings, $sort_activation, 'activation');
3350 $sort->addOption($sort_activation);
3351 }
3352 if (in_array(ilContainer::SORT_MANUAL, $a_sorting_settings)) {
3353 $sort_manual = new ilRadioOption(
3354 $this->lng->txt('sorting_manual_header'),
3356 );
3357 $sort_manual->setInfo($this->lng->txt('sorting_info_manual'));
3358 $this->initManualSortingOptionForm($settings, $sort_manual, "manual", $a_sorting_settings);
3359 $sort->addOption($sort_manual);
3360 }
3361
3362 // Handle moved containers and there possibly invalid values
3363 if (in_array($settings->getSortMode(), $a_sorting_settings)) {
3364 $sort->setValue($settings->getSortMode());
3365 } else {
3366 $sort->setValue(ilContainer::SORT_TITLE);
3367 }
3368 $form->addItem($sort);
3369
3370 return $form;
3371 }
3372
3379 {
3380 $lpres = new ilRadioGroupInputGUI($this->lng->txt('cont_list_presentation'), "list_presentation");
3381
3382 $item_list = new ilRadioOption($this->lng->txt('cont_item_list'), "");
3383 $item_list->setInfo($this->lng->txt('cont_item_list_info'));
3384 $lpres->addOption($item_list);
3385
3386 $tile_view = new ilRadioOption($this->lng->txt('cont_tile_view'), "tile");
3387 $tile_view->setInfo($this->lng->txt('cont_tile_view_info'));
3388 $lpres->addOption($tile_view);
3389
3390 $lpres->setValue(
3391 ilContainer::_lookupContainerSetting($this->object->getId(), "list_presentation")
3392 );
3393
3394 $form->addItem($lpres);
3395
3396 return $form;
3397 }
3398
3403 protected function saveListPresentation(ilPropertyFormGUI $form)
3404 {
3405 $val = ($form->getInput('list_presentation') == "tile")
3406 ? "tile"
3407 : "";
3408 ilContainer::_writeContainerSetting($this->object->getId(), "list_presentation", $val);
3409 }
3410
3411
3416 protected function initSortingDirectionForm(ilContainerSortingSettings $sorting_settings, $element, $a_prefix)
3417 {
3418 if ($a_prefix == 'manual') {
3419 $txt = $this->lng->txt('sorting_new_items_direction');
3420 } else {
3421 $txt = $this->lng->txt('sorting_direction');
3422 }
3423
3424 $direction = new ilRadioGroupInputGUI($txt, $a_prefix . '_sorting_direction');
3425 $direction->setValue($sorting_settings->getSortDirection());
3426 $direction->setRequired(true);
3427
3428 // asc
3429 $asc = new ilRadioOption(
3430 $this->lng->txt('sorting_asc'),
3432 );
3433 $direction->addOption($asc);
3434
3435 // desc
3436 $desc = new ilRadioOption(
3437 $this->lng->txt('sorting_desc'),
3439 );
3440 $direction->addOption($desc);
3441
3442 $element->addSubItem($direction);
3443
3444 return $element;
3445 }
3446
3453 $element,
3454 $a_prefix,
3455 $a_sorting_settings
3456 ) {
3457 $position = new ilRadioGroupInputGUI($this->lng->txt('sorting_new_items_position'), $a_prefix . '_new_items_position');
3458 $position->setValue($settings->getSortNewItemsPosition());
3459 $position->setRequired(true);
3460
3461 //new items insert on top
3462 $new_top = new ilRadioOption(
3463 $this->lng->txt('sorting_new_items_at_top'),
3465 );
3466
3467 $position->addOption($new_top);
3468
3469 //new items insert at bottom
3470 $new_bottom = new ilRadioOption(
3471 $this->lng->txt('sorting_new_items_at_bottom'),
3473 );
3474
3475 $position->addOption($new_bottom);
3476
3477 $element->addSubItem($position);
3478
3479 $order = new ilRadioGroupInputGUI($this->lng->txt('sorting_new_items_order'), $a_prefix . '_new_items_order');
3480 $order->setValue($settings->getSortNewItemsOrder());
3481 $order->setRequired(true);
3482
3483 if (in_array(ilContainer::SORT_TITLE, $a_sorting_settings)) {
3484 //new items sort in alphabetical order
3485 $new_title = new ilRadioOption(
3486 $this->lng->txt('sorting_title_header'),
3488 );
3489
3490 $order->addOption($new_title);
3491 }
3492
3493 if (in_array(ilContainer::SORT_CREATION, $a_sorting_settings)) {
3494 //new items sort by creation date
3495 $new_creation = new ilRadioOption(
3496 $this->lng->txt('sorting_creation_header'),
3498 );
3499
3500 $order->addOption($new_creation);
3501 }
3502
3503
3504 if (in_array(ilContainer::SORT_ACTIVATION, $a_sorting_settings)) {
3505 //new items by activation
3506 $new_activation = new ilRadioOption(
3507 $this->lng->txt('crs_sort_activation'),
3509 );
3510
3511 $order->addOption($new_activation);
3512 }
3513
3514 $element->addSubItem($order);
3515
3516 $this->initSortingDirectionForm($settings, $element, 'manual');
3517
3518 return $element;
3519 }
3520
3525 protected function saveSortingSettings(ilPropertyFormGUI $form)
3526 {
3527 include_once('Services/Container/classes/class.ilContainerSortingSettings.php');
3528 $settings = new ilContainerSortingSettings($this->object->getId());
3529 $settings->setSortMode($form->getInput("sorting"));
3530
3531 switch ($form->getInput('sorting')) {
3533 $settings->setSortDirection($form->getInput('title_sorting_direction'));
3534 break;
3536 $settings->setSortDirection($form->getInput('activation_sorting_direction'));
3537 break;
3539 $settings->setSortDirection($form->getInput('creation_sorting_direction'));
3540 break;
3542 $settings->setSortNewItemsPosition($form->getInput('manual_new_items_position'));
3543 $settings->setSortNewItemsOrder($form->getInput('manual_new_items_order'));
3544 $settings->setSortDirection($form->getInput('manual_sorting_direction'));
3545 break;
3546 }
3547
3548 $settings->update();
3549 }
3550
3556 public function trashObject()
3557 {
3558 $this->checkPermission("write");
3559 $tpl = $this->tpl;
3560
3561 $this->tabs_gui->activateTab('trash');
3562
3563 $trash_table = new \ilTrashTableGUI($this, 'trash', $this->object->getRefId());
3564 $trash_table->init();
3565 $trash_table->parse();
3566
3567 $trash_table->setFilterCommand('trashApplyFilter');
3568 $trash_table->setResetCommand('trashResetFilter');
3569
3570 $tpl->setContent($trash_table->getHTML());
3571 }
3572
3576 public function trashApplyFilterObject()
3577 {
3578 $this->trashHandleFilter(true, false);
3579 }
3580
3584 public function trashResetFilterObject()
3585 {
3586 $this->trashHandleFilter(false, true);
3587 }
3588
3592 protected function trashHandleFilter(bool $action_apply, bool $action_reset)
3593 {
3594 $trash_table = new \ilTrashTableGUI($this, 'trash', $this->object->getRefId());
3595 $trash_table->init();
3596 $trash_table->resetOffset();
3597 if ($action_reset) {
3598 $trash_table->resetFilter();
3599 }
3600 if ($action_apply) {
3601 $trash_table->writeFilterToSession();
3602 }
3603 $this->trashObject();
3604 }
3605
3611 public function removeFromSystemObject()
3612 {
3613 $this->checkPermission("write");
3614 $ru = new ilRepUtilGUI($this);
3615 $ru->removeObjectsFromSystem($_POST["trash_id"]);
3616 $this->ctrl->redirect($this, "trash");
3617 }
3618
3622 protected function restoreToNewLocationObject(\ilPropertyFormGUI $form = null)
3623 {
3624 $this->tabs_gui->activateTab('trash');
3625
3626 $ru = new \ilRepUtilGUI($this);
3627 $ru->restoreToNewLocation();
3628 }
3629
3630
3634 public function undeleteObject()
3635 {
3636 $ru = new ilRepUtilGUI($this);
3637 $ru->restoreObjects($_GET["ref_id"], $_POST["trash_id"]);
3638 $this->ctrl->redirect($this, "trash");
3639 }
3640
3645 {
3646 $lng = $this->lng;
3647 $this->checkPermission("write");
3648 include_once("./Services/Repository/classes/class.ilRepUtilGUI.php");
3649
3650 if (!isset($_POST["trash_id"])) {
3651 ilUtil::sendFailure($lng->txt("no_checkbox"), true);
3652 $this->ctrl->redirect($this, "trash");
3653 }
3654
3655 $ru = new ilRepUtilGUI($this);
3656 $ru->confirmRemoveFromSystemObject($_POST["trash_id"]);
3657 }
3658
3663 protected function getTreeSelectorGUI($cmd)
3664 {
3665 include_once("./Services/Repository/classes/class.ilRepositorySelectorExplorerGUI.php");
3666 $exp = new ilRepositorySelectorExplorerGUI($this, "showPasteTree");
3667 // TODO: The study programme 'prg' is not included here, as the
3668 // ilRepositorySelectorExplorerGUI only handles static rules for
3669 // parent-child-relations and not the dynamic relationsships
3670 // required for the SP (see #16909).
3671 $exp->setTypeWhiteList(array("root", "cat", "grp", "crs", "fold"));
3672
3673 // Not all types are allowed in the LearningSequence
3674 // Extend whitelist, if all selected types are possible subojects of LSO
3675 if (in_array($_SESSION["clipboard"]["cmd"], ["link", "cut"])) {
3676 $lso_types = array_keys($this->obj_definition->getSubObjects('lso'));
3677 $refs = $_SESSION["clipboard"]["ref_ids"];
3678 $allow_lso = true;
3679 foreach ($refs as $item_ref_id) {
3680 $type = ilObject::_lookupType($item_ref_id, true);
3681 if (!in_array($type, $lso_types)) {
3682 $allow_lso = false;
3683 }
3684 }
3685 if ($allow_lso) {
3686 $whitelist = $exp->getTypeWhiteList();
3687 $whitelist[] = 'lso';
3688 $exp->setTypeWhiteList($whitelist);
3689 }
3690 }
3691
3692 if ($cmd == "link") {
3693 $exp->setSelectMode("nodes", true);
3694 return $exp;
3695 } else {
3696 $exp->setSelectMode("nodes[]", false);
3697 return $exp;
3698 }
3699 }
3700
3704 public function setSideColumnReturn()
3705 {
3706 $this->ctrl->setReturn($this, "");
3707 }
3708
3712 protected function initFilter()
3713 {
3714 global $DIC;
3715
3716
3717 if (!$this->object || !ilContainer::_lookupContainerSetting($this->object->getId(), "filter", false)) {
3718 return;
3719 }
3720
3721 $filter_service = $this->container_filter_service;
3722 $request = $DIC->http()->request();
3723
3724 $filter = $filter_service->util()->getFilterForRefId(
3725 $this->ref_id,
3726 $DIC->ctrl()->getLinkTarget($this, "render", "", true),
3727 (bool) $this->isActiveAdministrationPanel()
3728 );
3729
3730
3731 $filter_data = $DIC->uiService()->filter()->getData($filter);
3732
3733
3734 $this->container_user_filter = $filter_service->userFilter($filter_data);
3735 $this->ui_filter = $filter;
3736 }
3737
3738
3742 protected function showContainerFilter()
3743 {
3744 global $DIC;
3745
3746 if (!is_null($this->ui_filter)) {
3747 $renderer = $DIC->ui()->renderer();
3748
3750 $main_tpl = $this->tpl;
3751 $main_tpl->setFilter($renderer->render($this->ui_filter));
3752
3753 if ($this->container_user_filter->isEmpty() && !ilContainer::_lookupContainerSetting($this->object->getId(), "filter_show_empty", false)) {
3754 ilUtil::sendInfo($this->lng->txt("cont_filter_empty"));
3755 }
3756 }
3757 }
3758
3759
3763 public function getAdminTabs()
3764 {
3766
3767 if ($this->checkPermissionBool("visible,read")) {
3768 $this->tabs_gui->addTab(
3769 'view',
3770 $this->lng->txt('view'),
3771 $this->ctrl->getLinkTarget($this, 'view')
3772 );
3773 }
3774
3775 // Always show container trash
3776 $this->tabs_gui->addTab(
3777 'trash',
3778 $this->lng->txt('trash'),
3779 $this->ctrl->getLinkTarget($this, 'trash')
3780 );
3781
3782 if ($this->checkPermissionBool("edit_permission")) {
3783 $this->tabs_gui->addTab(
3784 'perm_settings',
3785 $this->lng->txt('perm_settings'),
3786 $this->ctrl->getLinkTargetByClass(
3787 [
3788 get_class($this),
3789 'ilpermissiongui'
3790 ],
3791 'perm'
3792 )
3793 );
3794 }
3795 }
3796
3800 public function competencesObject()
3801 {
3803
3804 $ctrl->redirectByClass(["ilContainerSkillGUI", "ilContSkillPresentationGUI"]);
3805 }
3806}
$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
return true
Flag indicating whether or not HTTP headers will be sent when outputting captcha image/audio.
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
competencesObject()
Redirect to competences.
showPasteTreeObject()
Show paste tree.
getContentGUI()
Get content gui object.
initSortingForm(ilPropertyFormGUI $form, array $a_sorting_settings)
Append sorting settings to property form.
initFilter()
Init filter.
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 _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( $type, $context=ilObjectListGUI::CONTEXT_REPOSITORY)
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 _getIcon( $a_obj_id="", $a_size="big", $a_type="", $a_offline=false)
Get icon for repository item.
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.
const CLIENT_ID
Definition: constants.php:39
const ANONYMOUS_USER_ID
Definition: constants.php:25
$txt
Definition: error.php:13
global $DIC
Definition: goto.php:24
$ilUser
Definition: imgupload.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
ui()
Definition: ui.php:5
$lang
Definition: xapiexit.php:8
$message
Definition: xapiexit.php:14
$_COOKIE[session_name()]
Definition: xapitoken.php:37