Skip to content
Snippets Groups Projects
Select Git revision
  • a3da1483a9e689846179159355badfec8073dbec
  • main default protected
  • step-3263
  • feature/plugins-cli
  • feature/vite
  • step-2484-peerreview
  • biest/issue-5051
  • tests/simplify-jsonapi-tests
  • fix/typo-in-1a70031
  • feature/broadcasting
  • database-seeders-and-factories
  • feature/peer-review-2
  • feature-feedback-jsonapi
  • feature/peerreview
  • feature/balloon-plus
  • feature/stock-images-unsplash
  • tic-2588
  • 5.0
  • 5.2
  • biest/unlock-blocks
  • biest-1514
21 results

OpenGraph.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.
    CoursewareModule.class.php 8.35 KiB
    <?php
    
    use Courseware\Instance;
    use Courseware\StructuralElement;
    
    class CoursewareModule extends CorePlugin implements SystemPlugin, StudipModule, PrivacyPlugin
    {
        /**
         * {@inheritdoc}
         */
        public function __construct()
        {
            parent::__construct();
    
            NotificationCenter::on('UserDidDelete', function ($event, $user) {
                Instance::deleteForRange($user);
            });
            NotificationCenter::on('CourseDidDelete', function ($event, $course) {
                Instance::deleteForRange($course);
            });
        }
    
        /**
         * {@inheritdoc}
         *
         * @SuppressWarnings(PHPMD.UnusedFormalParameter)
         */
        public function getInfoTemplate($courseId)
        {
            return null;
        }
    
        /**
         * {@inheritdoc}
         */
        public function getTabNavigation($courseId)
        {
            $navigation = new Navigation(
                _('Courseware'),
                URLHelper::getURL('dispatch.php/course/courseware/?cid='.$courseId)
            );
            $navigation->addSubNavigation(
                'content',
                new Navigation(_('Inhalt'), 'dispatch.php/course/courseware/?cid='.$courseId)
            );
            $navigation->addSubNavigation(
                'dashboard',
                new Navigation(_('Übersicht'), 'dispatch.php/course/courseware/dashboard?cid='.$courseId)
            );
    
            if ($GLOBALS['perm']->have_studip_perm('dozent', $courseId)) {
                $navigation->addSubNavigation(
                    'manager',
                    new Navigation(_('Verwaltung'), 'dispatch.php/course/courseware/manager?cid='.$courseId)
                );
            } else {
                $element = StructuralElement::getCoursewareCourse($courseId);
                if ($element !== null) {
                    $instance = new Instance($element);
                    if ($GLOBALS['perm']->have_studip_perm($instance->getEditingPermissionLevel(), $courseId)) {
                        $navigation->addSubNavigation(
                            'manager',
                            new Navigation(_('Verwaltung'), 'dispatch.php/course/courseware/manager?cid='.$courseId)
                        );
                    }
                }
            }
    
            return ['courseware' => $navigation];
        }
    
        /**
         * {@inheritdoc}
         */
        public function getIconNavigation($courseId, $last_visit, $user_id)
        {
            $new = 0;
            $course_elements = Courseware\StructuralElement::findBySQL(
                'range_type = ? AND range_id = ?',
                ['course', $courseId]
            );
            foreach($course_elements as $element) {
                $has_new_blocks = false;
                $containers = $element->containers->getArrayCopy();
                foreach($containers as $container) {
                    $blocks = $container->blocks->getArrayCopy();
                    foreach($blocks as $block) {
                        if (
                            $block->editor_id !== $user_id
                            &&
                            $block->chdate >= $last_visit
                            &&
                            $block->payload !== ''
                        ) {
                            $has_new_blocks = true;
                        }
                    }
                }
                if($has_new_blocks) {
                    $new++;
                }
            }
            $nav = new Navigation(_('Courseware'), 'dispatch.php/course/courseware');
            $nav->setImage(Icon::create('courseware', Icon::ROLE_CLICKABLE), [
                'title' => _('Courseware'),
            ]);
    
            if ($new > 0) {
                if ($new === 1) {
                    $text =  _('neue Seite');
    
                } else {
                    $text =  _('neue Seiten');
                }
                $nav->setImage(Icon::create('courseware', Icon::ROLE_ATTENTION), [
                    'title' => $new . ' ' . $text,
                ]);
                $nav->setBadgeNumber("$new");
            }
    
            return $nav;
        }
    
        /**
         * {@inheritdoc}
         */
        public function getMetadata()
        {
            return [
                'summary' => _('Lerninhalte erstellen, verteilen und erleben'),
                'description' => _('Mit Courseware können Sie interaktive multimediale Lerninhalte erstellen und nutzen. Die
                    Lerninhalte lassen sich hierarchisch unterteilen und können aus Texten, Videosequenzen, Aufgaben,
                    Kommunikationselementen und einer Vielzahl weiterer Elementen bestehen. Fertige Lerninhalte können exportiert
                    und in andere Kurse oder andere Installationen importiert werden. Courseware ist nicht nur für digitale Formate
                    geeignet, sondern kann auch genutzt werden, um klassische Präsenzveranstaltungen mit Online-Anteilen zu ergänzen.
                    Formate wie integriertes Lernen (Blended Learning) lassen sich mit Courseware ideal umsetzen. Kollaboratives Lernen
                    kann dank Schreibrechtevergabe und dem Einsatz von Courseware in Studiengruppen realisiert werden.'
                ),
                'displayname' => _('Courseware'),
                'category' => _('Lehr- und Lernorganisation'),
                // 'keywords' => '',
                'descriptionshort' => _('Lerninhalte erstellen, verteilen und erleben'),
                'descriptionlong' => _('Mit Courseware können Sie interaktive multimediale Lerninhalte erstellen und nutzen. Die
                    Lerninhalte lassen sich hierarchisch unterteilen und können aus Texten, Videosequenzen, Aufgaben, Kommunikationselementen
                    und einer Vielzahl weiterer Elementen bestehen. Fertige Lerninhalte können exportiert und in andere Kurse oder andere
                    Installationen importiert werden. Courseware ist nicht nur für digitale Formate geeignet, sondern kann auch genutzt werden,
                    um klassische Präsenzveranstaltungen mit Online-Anteilen zu ergänzen. Formate wie integriertes Lernen (Blended Learning)
                    lassen sich mit Courseware ideal umsetzen. Kollaboratives Lernen kann dank Schreibrechtevergabe und dem Einsatz von Courseware
                    in Studiengruppen realisiert werden.'
                ),
                'icon' => Icon::create('courseware', 'info'),
                'screenshots' => [
                    'path' => 'assets/images/plus/screenshots/Courseware',
                    'pictures' => [
                        0 => ['source' => 'preview.png', 'title' => _('Überssichtsseite der Courseware')],
                    ],
                ],
            ];
        }
    
        /**
         * {@inheritdoc}
         */
        public function exportUserData(StoredUserData $storage)
        {
            $db = DBManager::get();
    
            $structuralElements = $db->fetchAll(
                'SELECT * FROM cw_structural_elements WHERE owner_id = ? OR editor_id = ? OR range_id = ?',
                [$storage->user_id, $storage->user_id, $storage->user_id]
            );
            $storage->addTabularData(_('Courseware-Strukturelemente-Ergebnisse'), 'cw_structural_elements', $structuralElements);
    
            $containers = $db->fetchAll(
                'SELECT * FROM cw_containers WHERE owner_id = ? OR editor_id = ?',
                [$storage->user_id, $storage->user_id]
            );
            $storage->addTabularData(_('Courseware-Container-Ergebnisse'), 'cw_containers', $containers);
    
            $blocks = $db->fetchAll(
                'SELECT * FROM cw_blocks WHERE owner_id = ? OR editor_id = ?',
                [$storage->user_id, $storage->user_id]
            );
            $storage->addTabularData(_('Courseware-Blöcke-Ergebnisse'), 'cw_blocks', $blocks);
    
            $comments = $db->fetchAll(
                'SELECT * FROM cw_block_comments WHERE user_id = ?',
                [$storage->user_id]
            );
            $storage->addTabularData(_('Courseware-Kommentare-Ergebnisse'), 'cw_block_comments', $comments);
    
            $userData = $db->fetchAll(
                'SELECT * FROM cw_user_data_fields WHERE user_id = ?',
                [$storage->user_id]
            );
            $storage->addTabularData(_('Courseware-Nutzer-Daten-Ergebnisse'), 'cw_user_data_fields', $userData);
    
            $userProgresses = $db->fetchAll(
                'SELECT * FROM cw_user_progresses WHERE user_id = ?',
                [$storage->user_id]
            );
            $storage->addTabularData(_('Courseware-Nutzer-Fortschritt-Ergebnisse'), 'cw_user_progresses', $userProgresses);
    
            $bookmarks = $db->fetchAll(
                'SELECT * FROM cw_bookmarks WHERE user_id = ?',
                [$storage->user_id]
            );
            $storage->addTabularData(_('Courseware-Lesezeichen-Ergebnisse'), 'cw_bookmarks', $bookmarks);
    
    
        }
    
        public function isActivatableForContext(Range $context)
        {
            return $context->getRangeType() === 'course';
        }
    }