Forked from
Stud.IP / Stud.IP
4207 commits behind the upstream repository.
-
Thomas Hackl authoredThomas Hackl authored
Code owners
Assign users and groups as approvers for specific file changes. Learn more.
IliasInterfaceModule.class.php 6.99 KiB
<?php
/**
* Ilias Interface - navigation and meta data
*
* @author André Noack <noack@data-quest.de>
* @copyright 2019 Stud.IP Core-Group
* @license GPL version 2 or any later version
* @since 4.3
*/
class IliasInterfaceModule extends CorePlugin implements StudipModule, SystemPlugin
{
public function __construct()
{
parent::__construct();
if (Config::get()->ILIAS_INTERFACE_ENABLE) {
$ilias_interface_config = Config::get()->ILIAS_INTERFACE_BASIC_SETTINGS;
if (Seminar_Perm::get()->have_perm('root')) {
Navigation::addItem('/admin/config/ilias_interface',
new Navigation(_('ILIAS-Schnittstelle'), 'dispatch.php/admin/ilias_interface'));
}
if (Seminar_Perm::get()->have_perm('tutor') || (Seminar_Perm::get()->have_perm('autor') && array_key_exists('show_tools_page', $ilias_interface_config) && $ilias_interface_config['show_tools_page'])) {
$ilias = new Navigation(_('ILIAS'), 'dispatch.php/my_ilias_accounts');
$ilias->setImage(Icon::create('ilias'));
$ilias->setDescription(_('Schnittstelle zu ILIAS'));
Navigation::addItem('/contents/my_ilias_accounts', $ilias);
}
}
}
public function isActivatableForContext(Range $context)
{
return Config::get()->ILIAS_INTERFACE_ENABLE && $context->getRangeType() === 'course';
}
public function getInfoTemplate($course_id)
{
return null;
}
public function getIconNavigation($course_id, $last_visit, $user_id)
{
if (!Config::get()->ILIAS_INTERFACE_ENABLE) {
return;
}
$sql = "SELECT COUNT(IF(a.module_type != 'crs', module_id, NULL)) AS count_modules,
COUNT(IF(a.module_type = 'crs', module_id, NULL)) AS count_courses,
COUNT(IF((chdate > IFNULL(b.visitdate, :threshold) AND a.module_type != 'crs'), module_id, NULL)) AS neue
FROM object_contentmodules AS a
LEFT JOIN object_user_visits AS b
ON b.object_id = a.object_id
AND b.user_id = :user_id
AND b.plugin_id = :plugin_id
WHERE a.object_id = :course_id
GROUP BY a.object_id";
$statement = DBManager::get()->prepare($sql);
$statement->bindValue(':user_id', $user_id);
$statement->bindValue(':course_id', $course_id);
$statement->bindValue(':threshold', $last_visit);
$statement->bindValue(':plugin_id', $this->getPluginId());
$statement->execute();
$result = $statement->fetch(PDO::FETCH_ASSOC);
if (!$result) {
return null;
}
$title = CourseConfig::get($course_id)->getValue('ILIAS_INTERFACE_MODULETITLE');
$nav = new Navigation($title, 'dispatch.php/course/ilias_interface/index');
if ($result['neue']) {
$nav->setImage(Icon::create('learnmodule+new', Icon::ROLE_ATTENTION), [
'title' => sprintf(
ngettext(
'%1$d Lernobjekt, %2$d neues',
'%1$d Lernobjekte, %2$d neue',
$result['count_modules']
),
$result['count_modules'],
$result['neue']
)
]);
} elseif ($result['count_modules']) {
$nav->setImage(Icon::create('learnmodule', Icon::ROLE_INACTIVE), [
'title' => sprintf(
ngettext(
'%d Lernobjekt',
'%d Lernobjekte',
$result['count_modules']
),
$result['count_modules']
)
]);
} elseif ($result['count_courses']) {
$nav->setImage(Icon::create('learnmodule', Icon::ROLE_INACTIVE), [
'title' => sprintf(
ngettext(
'%d ILIAS-Kurs',
'%d ILIAS-Kurse',
$result['count_courses']
),
$result['count_courses']
)
]);
}
return $nav;
}
public function getTabNavigation($course_id)
{
if (!Config::get()->ILIAS_INTERFACE_ENABLE) {
return null;
}
$ilias_interface_config = Config::get()->ILIAS_INTERFACE_BASIC_SETTINGS;
if (count($ilias_interface_config) === 0) {
return null;
}
$moduletitle = Config::get()->ILIAS_INTERFACE_MODULETITLE;
if ($ilias_interface_config['edit_moduletitle']) {
$moduletitle = CourseConfig::get($course_id)->ILIAS_INTERFACE_MODULETITLE;
}
$navigation = new Navigation($moduletitle);
$navigation->setImage(Icon::create('learnmodule', Icon::ROLE_INFO_ALT));
$navigation->setActiveImage(Icon::create('learnmodule', Icon::ROLE_INFO));
if ($GLOBALS['perm']->have_studip_perm('tutor', $course_id) || ($GLOBALS['perm']->have_studip_perm('autor', $course_id) && IliasObjectConnections::isCourseConnected($course_id))) {
if (get_object_type($course_id, ['inst'])) {
$navigation->addSubNavigation('view', new Navigation(_('Lernobjekte dieser Einrichtung'), 'dispatch.php/course/ilias_interface/index/' . $course_id));
} else {
$navigation->addSubNavigation('view', new Navigation(_('Lernobjekte dieser Veranstaltung'), 'dispatch.php/course/ilias_interface/index/' . $course_id));
}
}
return ['ilias_interface' => $navigation];
}
/**
* @see StudipModule::getMetadata()
*/
public function getMetadata()
{
return [
'summary' => _('Zugang zu extern erstellten ILIAS-Lernobjekten'),
'description' => _('Über diese Schnittstelle ist es möglich, Lernobjekte aus ' .
'einer ILIAS-Installation (ILIAS-Version >= 5.3.8) in Stud.IP zur Verfügung ' .
'zu stellen. Lehrende haben die Möglichkeit, in ' .
'ILIAS Selbstlerneinheiten zu erstellen und in Stud.IP bereit zu stellen.'),
'displayname' => _('ILIAS-Schnittstelle'),
'category' => _('Inhalte und Aufgabenstellungen'),
'keywords' => _('Einbindung von ILIAS-Lernobjekten;
Zugang zu ILIAS;
Aufgaben- und Test-Erstellung'),
'icon' => Icon::create('learnmodule', Icon::ROLE_INFO),
'descriptionshort' => _('Zugang zu extern erstellten ILIAS-Lernobjekten'),
'descriptionlong' => _('Über diese Schnittstelle ist es möglich, Lernobjekte aus ' .
'einer ILIAS-Installation (> 5.3.8) in Stud.IP zur Verfügung ' .
'zu stellen. Lehrende haben die Möglichkeit, in ' .
'ILIAS Selbstlerneinheiten zu erstellen und in Stud.IP bereit zu stellen.'),
];
}
}