Skip to content
Snippets Groups Projects
Select Git revision
  • 469621fec60954a736f1e7fc2c3611a29298e5f2
  • main default protected
  • studip-rector
  • ci-opt
  • course-members-export-as-word
  • data-vue-app
  • pipeline-improvements
  • webpack-optimizations
  • rector
  • icon-renewal
  • http-client-and-factories
  • jsonapi-atomic-operations
  • vueify-messages
  • tic-2341
  • 135-translatable-study-areas
  • extensible-sorm-action-parameters
  • sorm-configuration-trait
  • jsonapi-mvv-routes
  • docblocks-for-magic-methods
19 results

courseware.php

Blame
  • Forked from Stud.IP / Stud.IP
    Source project has a limited visibility.
    Code owners
    Assign users and groups as approvers for specific file changes. Learn more.
    courseware.php 3.85 KiB
    <?php
    
    require_once __DIR__.'/../courseware_controller.php';
    
    use Courseware\StructuralElement;
    use Courseware\Unit;
    
    /**
     * @property ?string $entry_element_id
     * @property int $last_visitdate
     * @property mixed $course_id
     * @property mixed $courseware_progress_data
     * @property mixed $courseware_chapter_counter
     */
    class Course_CoursewareController extends CoursewareController
    {
        protected $_autobind = true;
    
        public function before_filter(&$action, &$args): void
        {
            parent::before_filter($action, $args);
    
            PageLayout::setTitle(_('Courseware'));
            PageLayout::setHelpKeyword('Basis.Courseware');
    
            checkObject();
            if (!Context::isCourse()) {
                throw new CheckObjectException(_('Es wurde keine passende Veranstaltung gefunden.'));
            }
            $this->studip_module = checkObjectModule('CoursewareModule', true);
            object_set_visit_module($this->studip_module->getPluginId());
            $this->last_visitdate = object_get_visit(Context::getId(), $this->studip_module->getPluginId());
            $this->licenses = $this->getLicenses();
            $this->unitsNotFound = Unit::countBySql('range_id = ?', [Context::getId()]) === 0;
        }
    
        public function index_action(): void
        {
            Navigation::activateItem('course/courseware/shelf');
            $this->setIndexSidebar();
        }
    
        public function courseware_action($unit_id = null):  void
        {
            global $perm, $user;
            Navigation::activateItem('course/courseware/unit');
            if ($this->unitsNotFound) {
                PageLayout::postMessage(MessageBox::info(_('Es wurde kein Lernmaterial gefunden.')));
                return;
            }
            $this->setCoursewareSidebar();
    
            $this->user_id = $user->id;
            /** @var array<mixed> $last */
            $last = UserConfig::get($this->user_id)->getValue('COURSEWARE_LAST_ELEMENT');
    
            if ($unit_id === null) {
                $this->redirectToFirstUnit('course', Context::getId(), $last);
    
                return;
            }
    
            $this->entry_element_id = null;
            $this->unit_id = null;
            $unit = Unit::find($unit_id);
            if (isset($unit)) {
                $this->setEntryElement('course', $unit, $last, Context::getId());
            }
        }
    
        public function tasks_action(): void
        {
            global $perm, $user;
            $this->is_teacher = $perm->have_studip_perm('tutor', Context::getId(), $user->id);
            Navigation::activateItem('course/courseware/tasks');
            $this->setTasksSidebar();
        }
    
        public function activities_action(): void
        {
            global $perm, $user;
            $this->is_teacher = $perm->have_studip_perm('tutor', Context::getId(), $user->id);
            Navigation::activateItem('course/courseware/activities');
            $this->setActivitiesSidebar();
        }
    
        public function pdf_export_action($element_id, $with_children): void
        {
            $element = \Courseware\StructuralElement::findOneById($element_id);
            $user = User::find($GLOBALS['user']->id);
            $this->render_pdf($element->pdfExport($user, $with_children), trim($element->title).'.pdf');
        }
    
        private function setIndexSidebar(): void
        {
            $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
        {
            $sidebar = Sidebar::Get();
            $sidebar->addWidget(new VueWidget('courseware-action-widget'));
            SkipLinks::addIndex(_('Aktionen'), 'courseware-action-widget', 21);
        }
    
        private function setActivitiesSidebar(): void
        {
            $sidebar = Sidebar::Get();
            $sidebar->addWidget(new VueWidget('courseware-activities-widget-filter-type'));
            $sidebar->addWidget(new VueWidget('courseware-activities-widget-filter-unit'));
        }
    }