diff --git a/components/ILIAS/ILIASObject/src/Creation/AddNewItemGUI.php b/components/ILIAS/ILIASObject/src/Creation/AddNewItemGUI.php index d5f26b53029a..ea72747975ae 100755 --- a/components/ILIAS/ILIASObject/src/Creation/AddNewItemGUI.php +++ b/components/ILIAS/ILIASObject/src/Creation/AddNewItemGUI.php @@ -20,6 +20,11 @@ namespace ILIAS\ILIASObject\Creation; +use Closure; +use ILIAS\UI\Component\Clickable; +use ILIAS\UI\Component\Divider\Horizontal; +use ILIAS\UI\Component\Menu\Sub; +use ILIAS\UI\Component\Modal\RoundTrip; use ILIAS\UI\Factory as UIFactory; use ILIAS\UI\Renderer as UIRenderer; @@ -31,10 +36,6 @@ class AddNewItemGUI { private \ilLanguage $lng; - private \ilObjectDefinition $obj_definition; - private \ilSetting $settings; - private \ilAccessHandler $access; - private \ilCtrl $ctrl; private \ilToolbarGUI $toolbar; private \ilGlobalTemplateInterface $tpl; @@ -42,7 +43,7 @@ class AddNewItemGUI private UIRenderer $ui_renderer; /** - * @param array $elements + * @param array $elements * The Key MUST contain the object type or the */ public function __construct( @@ -60,8 +61,9 @@ public function __construct( /** * Add new item selection to current page incl. toolbar (trigger) and overlay + * @param ?Closure(RoundTrip):RoundTrip $modal_manipulation_callback */ - public function render(): void + public function render(?Closure $modal_manipulation_callback = null): void { if ($this->elements === []) { return; @@ -74,6 +76,10 @@ public function render(): void ) ); + if ($modal_manipulation_callback !== null) { + $modal = $modal_manipulation_callback($modal); + } + $this->toolbar->addComponent( $this->ui_factory->button()->primary( $this->lng->txt('cntr_add_new_item'), @@ -87,7 +93,8 @@ public function render(): void } /** - * @return array + * @param array $elements + * @return ?array */ private function buildAddNewItemsMenu(array $elements): ?array { @@ -99,6 +106,7 @@ private function buildAddNewItemsMenu(array $elements): ?array $element->getLabel(), $this->buildAddNewItemsMenu($element->getSubElements()) ); + continue; } if ($element->getType() === AddNewItemElementTypes::Object) { $sub_menu[] = $this->ui_factory->link()->bulky( @@ -106,7 +114,6 @@ private function buildAddNewItemsMenu(array $elements): ?array $element->getLabel(), $element->getCreationUri() ); - continue; } } diff --git a/components/ILIAS/ItemGroup/classes/class.ilObjItemGroupAccess.php b/components/ILIAS/ItemGroup/classes/class.ilObjItemGroupAccess.php index bf1dcd297b75..fd8ea4242117 100755 --- a/components/ILIAS/ItemGroup/classes/class.ilObjItemGroupAccess.php +++ b/components/ILIAS/ItemGroup/classes/class.ilObjItemGroupAccess.php @@ -42,13 +42,13 @@ public static function _getCommands(): array global $DIC; $DIC->language()->loadLanguageModule("itgr"); - $commands = array( - array("permission" => "read", "cmd" => "gotoParent", "lang_var" => "", "default" => true), - array("permission" => "write", "cmd" => "listMaterials", "lang_var" => "itgr_assign_materials", "default" => false), - array("permission" => "write", "cmd" => "edit", "lang_var" => "settings", "default" => false) - ); - return $commands; + return [ + ["permission" => "read", "cmd" => "gotoParent", "lang_var" => "", "default" => true], + ["permission" => "write", "cmd" => "addOrAssignObject", "lang_var" => "itgr_create_and_assign_object", "default" => false], + ["permission" => "write", "cmd" => "listMaterials", "lang_var" => "itgr_assign_materials", "default" => false], + ["permission" => "write", "cmd" => "edit", "lang_var" => "settings", "default" => false] + ]; } public function _checkAccess(string $cmd, string $permission, int $ref_id, int $obj_id, ?int $user_id = null): bool diff --git a/components/ILIAS/ItemGroup/classes/class.ilObjItemGroupGUI.php b/components/ILIAS/ItemGroup/classes/class.ilObjItemGroupGUI.php index 96e79d84cd10..bede0d960ef8 100755 --- a/components/ILIAS/ItemGroup/classes/class.ilObjItemGroupGUI.php +++ b/components/ILIAS/ItemGroup/classes/class.ilObjItemGroupGUI.php @@ -16,8 +16,10 @@ * *********************************************************************/ +use ILIAS\ILIASObject\Creation\AddNewItemGUI; use ILIAS\ItemGroup\StandardGUIRequest; use ILIAS\ILIASObject\Properties\Translations\TranslationGUI; +use ILIAS\UI\Component\Modal\RoundTrip; /** * User Interface class for item groups @@ -223,32 +225,37 @@ protected function afterUpdate(): void parent::afterUpdate(); } - public function listMaterials(): void + public function addOrAssignObject(): void { - $tree = $this->tree; - $ilTabs = $this->tabs; - $tpl = $this->tpl; + $this->listMaterials(true); + } + public function listMaterials(bool $show_add_or_assign_modal = false): void + { $this->checkPermission("write"); - $ilTabs->activateTab("materials"); + $this->tabs->activateTab("materials"); - $parent_ref_id = $tree->getParentId($this->object->getRefId()); + $parent_ref_id = $this->tree->getParentId($this->object->getRefId()); $parent_type = ilObject::_lookupType($parent_ref_id, true); - $parent_gui_class = 'ilObj' . $this->obj_definition->getClassName($parent_type) . 'GUI'; + $parent_gui_class = "ilObj{$this->obj_definition->getClassName($parent_type)}GUI"; $this->ctrl->setParameterByClass($parent_gui_class, 'ref_id', $parent_ref_id); - $gui = new ILIAS\ILIASObject\Creation\AddNewItemGUI( + $gui = new AddNewItemGUI( $this->buildAddNewItemElements( $this->getCreatableObjectTypes(), $parent_gui_class, $this->object->getRefId() ) ); - $gui->render(); + $gui->render( + static fn(RoundTrip $modal) => $show_add_or_assign_modal + ? $modal->withOnLoad($modal->getShowSignal()) + : $modal + ); $this->ctrl->clearParameterByClass($parent_gui_class, 'ref_id'); $tab = new ilItemGroupItemsTableGUI($this->gui, $this, "listMaterials"); - $tpl->setContent($tab->getHTML()); + $this->tpl->setContent($tab->getHTML()); } public function getCreatableObjectTypes(): array diff --git a/lang/ilias_de.lang b/lang/ilias_de.lang index aa93b38588d9..966456c9e0d8 100644 --- a/lang/ilias_de.lang +++ b/lang/ilias_de.lang @@ -10770,6 +10770,7 @@ itgr#:#itgr_assigned_materials#:#Objekte im Objekteblock itgr#:#itgr_assignment#:#Eingebunden itgr#:#itgr_behaviour#:#Verhalten itgr#:#itgr_behaviour_info#:#Das System merkt sich den Zustand (geöffnet/geschlossen) je Benutzer bis zur Abmeldung (Logout). +itgr#:#itgr_create_and_assign_object#:#Objekt erstellen und zuweisen itgr#:#itgr_desc_info#:#Die Beschreibung wird bei der Anzeige des Objekteblocks nicht mit ausgegeben. itgr#:#itgr_edit#:#Einstellungen des Objekteblocks itgr#:#itgr_expandable_closed#:#Ausklappbar (zunächst geschlossen) @@ -10780,6 +10781,7 @@ itgr#:#itgr_list_default#:#Standard itgr#:#itgr_list_default_info#:#Übernimmt die Einstellung des übergeordneten Containers. itgr#:#itgr_list_presentation#:#Präsentationsansicht für Inhalte itgr#:#itgr_materials#:#Objekte +itgr#:#itgr_organise_objects#:#Objekte verwalten itgr#:#itgr_show_title#:#Titel anzeigen itgr#:#itgr_show_title_info#:#Der Titel des Objekteblocks wird angezeigt. itgr#:#itgr_tile#:#Kacheln diff --git a/lang/ilias_en.lang b/lang/ilias_en.lang index fec96911362f..59464acd8ea4 100644 --- a/lang/ilias_en.lang +++ b/lang/ilias_en.lang @@ -10739,11 +10739,12 @@ irss#:#type#:#File Type irss#:#upload_field_title#:#Selected Files irss#:#upload_modal_title#:#Add Files itgr#:#itgr_always_open#:#Always Open -itgr#:#itgr_assign_materials#:#Assign Materials +itgr#:#itgr_assign_materials#:#Organize Objects itgr#:#itgr_assigned_materials#:#Assigned Materials itgr#:#itgr_assignment#:#Assigned itgr#:#itgr_behaviour#:#Block Behaviour itgr#:#itgr_behaviour_info#:#The system will store the opened/closed state for the current user until logout. +itgr#:#itgr_create_and_assign_object#:#Create and Assign Object itgr#:#itgr_desc_info#:#The description will not be a part of the item group's presentation in its container. itgr#:#itgr_edit#:#Edit Item Groups itgr#:#itgr_expandable_closed#:#Expandable (initially closed) @@ -10754,6 +10755,7 @@ itgr#:#itgr_list_default#:#Default itgr#:#itgr_list_default_info#:#Inherits value from upper container. itgr#:#itgr_list_presentation#:#Item Presentation itgr#:#itgr_materials#:#Materials +itgr#:#itgr_organise_objects#:#Manage Objects itgr#:#itgr_show_title#:#Show Title itgr#:#itgr_show_title_info#:#Shows title of item group in presentation for learner. itgr#:#itgr_tile#:#Tiles