diff options
| author | Ron Lucke <lucke@elan-ev.de> | 2023-01-06 10:19:34 +0000 |
|---|---|---|
| committer | David Siegfried <david.siegfried@uni-vechta.de> | 2023-01-06 10:19:34 +0000 |
| commit | d436a45e1576a0080d8c966529095f8d187a5941 (patch) | |
| tree | dbef757dded6f78d2ce09638ca464d63213bfa3c /app/controllers/contents/courseware.php | |
| parent | b58dc13c73e267b55d15ec6436b0d83e3fff17e0 (diff) | |
Optimierung der Darstellungsstruktur mehrerer Lernmaterialien in Courseware
Closes #1599
Merge request studip/studip!1201
Diffstat (limited to 'app/controllers/contents/courseware.php')
| -rw-r--r-- | app/controllers/contents/courseware.php | 223 |
1 files changed, 37 insertions, 186 deletions
diff --git a/app/controllers/contents/courseware.php b/app/controllers/contents/courseware.php index a91569c..6ee2b78 100644 --- a/app/controllers/contents/courseware.php +++ b/app/controllers/contents/courseware.php @@ -1,8 +1,11 @@ <?php -use \Courseware\StructuralElement; +require_once __DIR__.'/../courseware_controller.php'; -class Contents_CoursewareController extends AuthenticatedController +use Courseware\StructuralElement; +use Courseware\Unit; + +class Contents_CoursewareController extends CoursewareController { /** * Callback function being called before an action is executed. @@ -10,7 +13,7 @@ class Contents_CoursewareController extends AuthenticatedController * @SuppressWarnings(PHPMD.CamelCaseMethodName) * @SuppressWarnings(PHPMD.Superglobals) */ - public function before_filter(&$action, &$args) + public function before_filter(&$action, &$args): void { parent::before_filter($action, $args); @@ -30,34 +33,20 @@ class Contents_CoursewareController extends AuthenticatedController * @SuppressWarnings(PHPMD.Superglobals) * @SuppressWarnings(PHPMD.UnusedFormalParameter) */ - public function index_action() + public function index_action(): void { - Navigation::activateItem('/contents/courseware/overview'); + Navigation::activateItem('/contents/courseware/shelf'); $this->user_id = $GLOBALS['user']->id; - $this->setOverviewSidebar(); - $this->courseware_root = \Courseware\StructuralElement::getCoursewareUser($this->user_id); - if (!$this->courseware_root) { - // create initial courseware dataset - $new = \Courseware\StructuralElement::createEmptyCourseware($this->user_id, 'user'); - $this->courseware_root = $new->getRoot(); - } - $this->licenses = $this->getLicences(); + $this->setShelfSidebar(); + + $this->licenses = $this->getLicenses(); } - private function setOverviewSidebar() + private function setShelfSidebar(): void { $sidebar = Sidebar::Get(); - $views = new TemplateWidget( - _('Aktionen'), - $this->get_template_factory()->open('contents/courseware/overview_action_widget') - ); - $sidebar->addWidget($views)->addLayoutCSSClass('courseware-overview-filter-widget'); - - $views = new TemplateWidget( - _('Filter'), - $this->get_template_factory()->open('contents/courseware/overview_filter_widget') - ); - $sidebar->addWidget($views)->addLayoutCSSClass('courseware-overview-filter-widget'); + $sidebar->addWidget(new VueWidget('courseware-action-widget')); + $sidebar->addWidget(new VueWidget('courseware-import-widget')); } /** @@ -69,90 +58,29 @@ class Contents_CoursewareController extends AuthenticatedController * @SuppressWarnings(PHPMD.Superglobals) * @SuppressWarnings(PHPMD.UnusedFormalParameter) */ - public function courseware_action($action = false, $widgetId = null) + public function courseware_action($unit_id = null): void { global $perm, $user; - Navigation::activateItem('/contents/courseware/courseware'); $this->user_id = $user->id; - + /** @var array<mixed> $last */ $last = UserConfig::get($this->user_id)->getValue('COURSEWARE_LAST_ELEMENT'); - if (!empty($last[$this->user_id])) { - $this->entry_element_id = $last['global']; - $struct = \Courseware\StructuralElement::findOneBySQL( - "id = ? AND range_id = ? AND range_type = 'user'", - [$this->entry_element_id, $this->user_id] - ); - } - - // load courseware for current user - if (!$this->entry_element_id || !$struct || !$struct->canRead($user)) { - - if (!$user->courseware) { - // create initial courseware dataset - $struct = StructuralElement::createEmptyCourseware($this->user_id, 'user'); - } - - $this->entry_element_id = $user->courseware->id; - } - - $last[$this->user_id] = $this->entry_element_id; - UserConfig::get($this->user_id)->store('COURSEWARE_LAST_ELEMENT', $last); + if ($unit_id === null) { + $this->redirectToFirstUnit('user', $this->user_id, $last); - $this->licenses = $this->getLicences(); - - $this->oer_enabled = Config::get()->OERCAMPUS_ENABLED && $perm->have_perm(Config::get()->OER_PUBLIC_STATUS); - - // Make sure struct has value., to evaluate the export (edit) capability. - if (!isset($struct)) { - $struct = \Courseware\StructuralElement::findOneBySQL( - "id = ? AND range_id = ? AND range_type = 'user'", - [$this->entry_element_id, $this->user_id] - ); + return; } - $this->setCoursewareSidebar(); - } - - private function setCoursewareSidebar() - { - $sidebar = \Sidebar::Get(); - $sidebar->addWidget(new VueWidget('courseware-action-widget')); - $views = new TemplateWidget( - _('Suche'), - $this->get_template_factory()->open('course/courseware/search_widget') - ); - $sidebar->addWidget($views)->addLayoutCSSClass('courseware-search-widget'); - - $sidebar->addWidget(new VueWidget('courseware-view-widget')); - $sidebar->addWidget(new VueWidget('courseware-export-widget')); - } - - private function getLicences() - { - $licenses = array(); - $sorm_licenses = License::findBySQL("1 ORDER BY name ASC"); - foreach($sorm_licenses as $license) { - array_push($licenses, $license->toArray()); + $this->entry_element_id = null; + $this->unit_id = null; + $unit = Unit::find($unit_id); + if (isset($unit)) { + $this->setEntryElement('user', $unit, $last, $this->user_id); + Navigation::activateItem('/contents/courseware/courseware'); + $this->licenses = $this->getLicenses(); + $this->setCoursewareSidebar(); } - return json_encode($licenses); - } - - /** - * displays the courseware manager - * - * @param string $action - * @param string $widgetId - * @SuppressWarnings(PHPMD.CamelCaseMethodName) - * @SuppressWarnings(PHPMD.Superglobals) - * @SuppressWarnings(PHPMD.UnusedFormalParameter) - */ - public function courseware_manager_action($action = false, $widgetId = null) - { - Navigation::activateItem('/contents/courseware/courseware_manager'); - - $this->user_id = $GLOBALS['user']->id; } /** @@ -165,7 +93,7 @@ class Contents_CoursewareController extends AuthenticatedController * @SuppressWarnings(PHPMD.UnusedFormalParameter) */ - public function bookmarks_action() + public function bookmarks_action(): void { Navigation::activateItem('/contents/courseware/bookmarks'); $this->user_id = $GLOBALS['user']->id; @@ -180,13 +108,13 @@ class Contents_CoursewareController extends AuthenticatedController * @SuppressWarnings(PHPMD.UnusedFormalParameter) */ - public function releases_action() + public function releases_action(): void { Navigation::activateItem('/contents/courseware/releases'); $this->user_id = $GLOBALS['user']->id; } - private function setBookmarkSidebar() + private function setBookmarkSidebar(): void { $sidebar = Sidebar::Get(); $views = new TemplateWidget( @@ -205,7 +133,7 @@ class Contents_CoursewareController extends AuthenticatedController * @SuppressWarnings(PHPMD.Superglobals) * @SuppressWarnings(PHPMD.UnusedFormalParameter) */ - public function courses_overview_action($action = false, $widgetId = null) + public function courses_overview_action($action = false, $widgetId = null): void { Navigation::activateItem('/contents/courseware/courses_overview'); @@ -244,7 +172,7 @@ class Contents_CoursewareController extends AuthenticatedController * * @return array */ - private function getCoursewareCourses($sem_key) + private function getCoursewareCourses($sem_key): array { $this->current_semester = Semester::findCurrent(); @@ -326,7 +254,7 @@ class Contents_CoursewareController extends AuthenticatedController * @param string $course_id the course to check * @return boolean true if courseware is enabled, false otherwise */ - private function isCoursewareEnabled($course_id) + private function isCoursewareEnabled($course_id): bool { $studip_module = PluginManager::getInstance()->getPlugin('CoursewareModule'); @@ -338,7 +266,7 @@ class Contents_CoursewareController extends AuthenticatedController } - private function getProjects($purpose) + private function getProjects($purpose): array { $elements = StructuralElement::findProjects($this->user->id, $purpose); foreach($elements as &$element) { @@ -348,85 +276,8 @@ class Contents_CoursewareController extends AuthenticatedController return $elements; } - public function create_project_action($action = false, $widgetId = null) - { - PageLayout::setTitle(_('Neues Lernmaterial')); - - if (!Request::submitted('create_project')) { - return; - } - - CSRFProtection::verifyUnsafeRequest(); - $this->user_id = $GLOBALS['user']->id; - - $structural_element = new StructuralElement(); - $structural_element->title = Request::get('title'); - $structural_element->purpose = Request::get('project_type'); - $structural_element->owner_id = $this->user_id; - $structural_element->editor_id = $this->user_id; - $structural_element->release_date = ""; - $structural_element->withdraw_date = ""; - $structural_element->range_id = $this->user_id; - $structural_element->range_type = 'user'; - $structural_element->parent_id = StructuralElement::getCoursewareUser($this->user_id)->id; - $structural_element->payload = json_encode([ - 'description' => Request::get('description'), - 'color' => Request::get('color'), - 'required_time' => Request::get('required_time'), - 'license_type' => Request::get('license_type'), - 'difficulty_start' => Request::get('difficulty_start'), - 'difficulty_end' => Request::get('difficulty_end'), - ]); - $structural_element->store(); - - // set image - if ($_FILES['previewfile'] && $_FILES['previewfile']['name']) { - $coursewareInstance = new Courseware\Instance($structural_element); - $publicFolder = Courseware\Filesystem\PublicFolder::findOrCreateTopFolder($coursewareInstance); - $fileRef = $this->handleUpload($publicFolder, $structural_element); - $structural_element->image_id = $fileRef->id; - $structural_element->store(); - } - - $this->redirect('contents/courseware/index'); - } - - private function handleUpload(Courseware\Filesystem\PublicFolder $folder, StructuralElement $structuralElement) - { - $file = $_FILES['previewfile']; - $upload = [ - 'tmp_name' => [$file['tmp_name']], - 'name' => [$file['name']], - 'size' => [$file['size']], - 'type' => [$file['type']], - 'error' => [$file['error']] - ]; - - $uploaded = FileManager::handleFileUpload( - $upload, - $folder - ); - - if ($uploaded['error']) { - throw new RuntimeException(implode("\n", $uploaded['error'])); - } - - if (count($uploaded['files'])) { - return $uploaded['files'][0]; - } - - throw new RuntimeException('Could not create preview image.'); - } - - private function setProjectsSidebar($action) - { - $sidebar = Sidebar::Get(); - $actions = new ActionsWidget(); - $actions->addLink(_('Neues Lernmaterial anlegen'), $this->url_for('contents/courseware/create_project'), Icon::create('add', 'clickable'))->asDialog('size=700'); - $sidebar->addWidget($actions); - } - public function pdf_export_action($element_id, $with_children) + public function pdf_export_action($element_id, $with_children): void { $element = \Courseware\StructuralElement::findOneById($element_id); @@ -438,7 +289,7 @@ class Contents_CoursewareController extends AuthenticatedController * * @param string $entry_element_id the shared struct element id */ - public function shared_content_courseware_action($entry_element_id) + public function shared_content_courseware_action($entry_element_id): void { global $perm, $user; @@ -463,7 +314,7 @@ class Contents_CoursewareController extends AuthenticatedController $this->user_id = $struct->owner_id; - $this->licenses = $this->getLicences(); + $this->licenses = $this->getLicenses(); $this->oer_enabled = Config::get()->OERCAMPUS_ENABLED && $perm->have_perm(Config::get()->OER_PUBLIC_STATUS); |
