Select Git revision
OpenGraph.php
Forked from
Stud.IP / Stud.IP
Source project has a limited visibility.
-
Jan-Hendrik Willms authoredJan-Hendrik Willms authored
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';
}
}