From 9da159cf2cb977e13eb9760a3bfa66eec33eeab3 Mon Sep 17 00:00:00 2001 From: Ron Lucke Date: Tue, 12 Dec 2023 10:57:51 +0000 Subject: TIC #3258 Merge request studip/studip!2342 --- app/controllers/contents/courseware.php | 1 - app/controllers/course/courseware.php | 1 - app/controllers/courseware_controller.php | 1 - .../JsonApi/Routes/Courseware/UnitsCreate.php | 4 + lib/models/Courseware/StructuralElement.php | 22 ++ resources/vue/components/StudipSquareButton.vue | 1 + resources/vue/components/courseware/IndexApp.vue | 5 - resources/vue/components/courseware/ShelfApp.vue | 23 +- .../CoursewareStructuralElement.vue | 7 +- ...CoursewareStructuralElementDialogAddChooser.vue | 92 ++++++++ .../courseware/unit/CoursewareShelfDialogAdd.vue | 6 +- .../unit/CoursewareShelfDialogAddChooser.vue | 91 ++++++++ .../unit/CoursewareShelfDialogTopics.vue | 232 +++++++++++++++++++++ .../courseware/unit/CoursewareUnitItems.vue | 17 +- .../courseware/widgets/CoursewareActionWidget.vue | 3 +- .../store/courseware/courseware-shelf.module.js | 20 ++ .../vue/store/courseware/courseware.module.js | 12 ++ 17 files changed, 500 insertions(+), 38 deletions(-) create mode 100644 resources/vue/components/courseware/structural-element/CoursewareStructuralElementDialogAddChooser.vue create mode 100644 resources/vue/components/courseware/unit/CoursewareShelfDialogAddChooser.vue create mode 100644 resources/vue/components/courseware/unit/CoursewareShelfDialogTopics.vue diff --git a/app/controllers/contents/courseware.php b/app/controllers/contents/courseware.php index 1551fbd..f0d5023 100644 --- a/app/controllers/contents/courseware.php +++ b/app/controllers/contents/courseware.php @@ -48,7 +48,6 @@ class Contents_CoursewareController extends CoursewareController $sidebar = Sidebar::Get(); $sidebar->addWidget(new VueWidget('courseware-action-widget')); SkipLinks::addIndex(_('Aktionen'), 'courseware-action-widget', 21); - $sidebar->addWidget(new VueWidget('courseware-import-widget')); } /** diff --git a/app/controllers/course/courseware.php b/app/controllers/course/courseware.php index 401ab17..f8e721e 100644 --- a/app/controllers/course/courseware.php +++ b/app/controllers/course/courseware.php @@ -285,7 +285,6 @@ class Course_CoursewareController extends CoursewareController $sidebar = Sidebar::Get(); $sidebar->addWidget(new VueWidget('courseware-action-widget')); SkipLinks::addIndex(_('Aktionen'), 'courseware-action-widget', 21); - $sidebar->addWidget(new VueWidget('courseware-import-widget')); } private function setTasksSidebar(): void diff --git a/app/controllers/courseware_controller.php b/app/controllers/courseware_controller.php index 91fc9c8..eaec609 100644 --- a/app/controllers/courseware_controller.php +++ b/app/controllers/courseware_controller.php @@ -82,6 +82,5 @@ abstract class CoursewareController extends AuthenticatedController SkipLinks::addIndex(_('Aktionen'), 'courseware-action-widget', 21); $sidebar->addWidget(new VueWidget('courseware-search-widget')); $sidebar->addWidget(new VueWidget('courseware-view-widget')); - $sidebar->addWidget(new VueWidget('courseware-import-widget')); } } diff --git a/lib/classes/JsonApi/Routes/Courseware/UnitsCreate.php b/lib/classes/JsonApi/Routes/Courseware/UnitsCreate.php index f55fd6a..a6159e3 100644 --- a/lib/classes/JsonApi/Routes/Courseware/UnitsCreate.php +++ b/lib/classes/JsonApi/Routes/Courseware/UnitsCreate.php @@ -117,6 +117,10 @@ class UnitsCreate extends JsonApiController $instance->getUnit()->store(); + if (self::arrayGet($json, 'data.template.type') === 'topics') { + $struct->createChildrenFromCourseTopics(); + } + return $unit; } diff --git a/lib/models/Courseware/StructuralElement.php b/lib/models/Courseware/StructuralElement.php index bb325db..34cef80 100644 --- a/lib/models/Courseware/StructuralElement.php +++ b/lib/models/Courseware/StructuralElement.php @@ -1168,4 +1168,26 @@ SQL; } } + + public function createChildrenFromCourseTopics() + { + if ($this->range_type === 'user') { + return null; + } + $topics = \CourseTopic::findBySeminar_id($this->course->id); + foreach($topics as $key => $topic) { + self::create([ + 'parent_id' => $this->id, + 'range_id' => $this->range_id, + 'range_type' => $this->range_type, + 'owner_id' => $this->owner_id, + 'editor_id' => $this->editor_id, + 'edit_blocker_id' => '', + 'title' => $topic->title, + 'purpose' => $this->purpose, + 'payload' => '', + 'position' => $key + ]); + } + } } diff --git a/resources/vue/components/StudipSquareButton.vue b/resources/vue/components/StudipSquareButton.vue index b7ae400..04d7813 100644 --- a/resources/vue/components/StudipSquareButton.vue +++ b/resources/vue/components/StudipSquareButton.vue @@ -46,6 +46,7 @@ $size: 130px; } span { color: var(--base-color); + min-width: 110px; } &:hover span { color: var(--red); diff --git a/resources/vue/components/courseware/IndexApp.vue b/resources/vue/components/courseware/IndexApp.vue index 8b6f59d..2ac86c2 100644 --- a/resources/vue/components/courseware/IndexApp.vue +++ b/resources/vue/components/courseware/IndexApp.vue @@ -18,9 +18,6 @@ - - - - + + + - - - diff --git a/resources/vue/components/courseware/structural-element/CoursewareStructuralElement.vue b/resources/vue/components/courseware/structural-element/CoursewareStructuralElement.vue index 03b2cec..9c93d17 100644 --- a/resources/vue/components/courseware/structural-element/CoursewareStructuralElement.vue +++ b/resources/vue/components/courseware/structural-element/CoursewareStructuralElement.vue @@ -569,6 +569,7 @@ +
+ + + + + + + diff --git a/resources/vue/components/courseware/unit/CoursewareShelfDialogAdd.vue b/resources/vue/components/courseware/unit/CoursewareShelfDialogAdd.vue index ea738a6..43163ec 100644 --- a/resources/vue/components/courseware/unit/CoursewareShelfDialogAdd.vue +++ b/resources/vue/components/courseware/unit/CoursewareShelfDialogAdd.vue @@ -6,7 +6,7 @@ :slots="wizardSlots" :lastRequiredSlotId="1" :requirements="requirements" - @close="setShowUnitAddDialog(false)" + @close="setShowUnitNewDialog(false)" @confirm="createUnit" >