Skip to content
Snippets Groups Projects
Commit b46ece81 authored by André Noack's avatar André Noack Committed by Jan-Hendrik Willms
Browse files

Resolve "Sichtbarkeit von Werkzeugen wirkt sich nur auf den Reiter aus"

parent f41d575d
No related branches found
No related tags found
No related merge requests found
...@@ -59,28 +59,9 @@ class PublicCoursesController extends AuthenticatedController ...@@ -59,28 +59,9 @@ class PublicCoursesController extends AuthenticatedController
$seminars = $statement->fetchGrouped(PDO::FETCH_ASSOC); $seminars = $statement->fetchGrouped(PDO::FETCH_ASSOC);
$seminars = $this->get_seminar_navigations($seminars); $seminars = $this->get_seminar_navigations($seminars);
$seminars = $this->get_plugin_navigations($seminars);
$this->seminars = $seminars; $this->seminars = $seminars;
} }
/**
* Loads all possible standard plugins for the given seminars and adds
* a navigation entry for each one.
*
* @param array $seminars List of seminars
* @return array Extended list of seminars
*/
protected function get_plugin_navigations($seminars)
{
foreach ($seminars as $id => $seminar) {
foreach (PluginEngine::getPlugins('StandardPlugin', $id) as $plugin) {
$seminars[$id]['navigations'][] = $plugin->getIconNavigation($id, time(), $GLOBALS['user']->id);
}
}
return $seminars;
}
/** /**
* Adds all navigation entries for each passed seminar. * Adds all navigation entries for each passed seminar.
* *
...@@ -95,11 +76,29 @@ class PublicCoursesController extends AuthenticatedController ...@@ -95,11 +76,29 @@ class PublicCoursesController extends AuthenticatedController
foreach ($seminars as $id => $seminar) { foreach ($seminars as $id => $seminar) {
$seminar['navigations'] = []; $seminar['navigations'] = [];
$seminar['tools'] = new SimpleCollection(ToolActivation::findByrange_id($id));
foreach (words('forum files news scm schedule wiki vote') as $key) { foreach (MyRealmModel::getDefaultModules() as $plugin_id => $plugin) {
$seminar['navigations'][$key] = false;
// Go to next module if current module is not available and not voting-module
if ($plugin !== 'vote' && !$seminar['tools']->findOneBy('plugin_id', $plugin_id)) {
$seminar['navigations'][get_class($plugin)] = null;
continue;
}
if (!Config::get()->VOTE_ENABLE && $plugin_id === 'vote') {
continue;
}
if ($plugin === 'vote') {
$seminar['navigations'][$plugin] = false;
} else if ($tool = $seminar['tools']->findOneBy('plugin_id', $plugin_id)) {
if ($tool->getVisibilityPermission() === 'nobody') {
$seminar['navigations'][get_class($plugin)] = false;
} else {
$seminar['navigations'][get_class($plugin)] = null;
}
}
} }
$seminars[$id] = $seminar; $seminars[$id] = $seminar;
} }
...@@ -115,9 +114,11 @@ class PublicCoursesController extends AuthenticatedController ...@@ -115,9 +114,11 @@ class PublicCoursesController extends AuthenticatedController
$statement = DBManager::get()->prepare($query); $statement = DBManager::get()->prepare($query);
$statement->execute([$seminar_ids]); $statement->execute([$seminar_ids]);
while ($row = $statement->fetch(PDO::FETCH_ASSOC)) { while ($row = $statement->fetch(PDO::FETCH_ASSOC)) {
$nav = new Navigation('files', 'dispatch.php/course/files/index'); if (isset($seminars[$row['range_id']]['navigations']['CoreDocuments'])) {
$nav->setImage(Icon::create('files', 'inactive', ["title" => sprintf(_('%s Dokumente'),$row['count'])])); $nav = new Navigation('files', 'dispatch.php/course/files/index');
$seminars[$row['range_id']]['navigations']['files'] = $nav; $nav->setImage(Icon::create('files', Icon::ROLE_CLICKABLE, ["title" => sprintf(_('%s Dokumente'), $row['count'])]));
$seminars[$row['range_id']]['navigations']['CoreDocuments'] = $nav;
}
} }
// News // News
...@@ -130,9 +131,11 @@ class PublicCoursesController extends AuthenticatedController ...@@ -130,9 +131,11 @@ class PublicCoursesController extends AuthenticatedController
$statement = DBManager::get()->prepare($query); $statement = DBManager::get()->prepare($query);
$statement->execute([$seminar_ids]); $statement->execute([$seminar_ids]);
while ($row = $statement->fetch(PDO::FETCH_ASSOC)) { while ($row = $statement->fetch(PDO::FETCH_ASSOC)) {
$nav = new Navigation('news', ''); if (isset($seminars[$row['range_id']]['navigations']['CoreOverview'])) {
$nav->setImage(Icon::create('news', 'inactive', ["title" => sprintf(_('%s Ankündigungen'),$row['count'])])); $nav = new Navigation('news', '');
$seminars[$row['range_id']]['navigations']['news'] = $nav; $nav->setImage(Icon::create('news', Icon::ROLE_CLICKABLE, ["title" => sprintf(_('%s Ankündigungen'),$row['count'])]));
$seminars[$row['range_id']]['navigations']['CoreOverview'] = $nav;
}
} }
// Information // Information
...@@ -143,9 +146,11 @@ class PublicCoursesController extends AuthenticatedController ...@@ -143,9 +146,11 @@ class PublicCoursesController extends AuthenticatedController
$statement = DBManager::get()->prepare($query); $statement = DBManager::get()->prepare($query);
$statement->execute([$seminar_ids]); $statement->execute([$seminar_ids]);
while ($row = $statement->fetch(PDO::FETCH_ASSOC)) { while ($row = $statement->fetch(PDO::FETCH_ASSOC)) {
$nav = new Navigation('scm', 'dispatch.php/course/scm'); if (isset($seminars[$row['range_id']]['navigations']['CoreScm'])) {
$nav->setImage(Icon::create('infopage', 'inactive', ["title" => sprintf(_('%s Einträge'),$row['count'])])); $nav = new Navigation('scm', 'dispatch.php/course/scm');
$seminars[$row['range_id']]['navigations']['scm'] = $nav; $nav->setImage(Icon::create('infopage', Icon::ROLE_CLICKABLE, ["title" => sprintf(_('%s Einträge'), $row['count'])]));
$seminars[$row['range_id']]['navigations']['CoreScm'] = $nav;
}
} }
// Appointments // Appointments
...@@ -156,9 +161,11 @@ class PublicCoursesController extends AuthenticatedController ...@@ -156,9 +161,11 @@ class PublicCoursesController extends AuthenticatedController
$statement = DBManager::get()->prepare($query); $statement = DBManager::get()->prepare($query);
$statement->execute([$seminar_ids]); $statement->execute([$seminar_ids]);
while ($row = $statement->fetch(PDO::FETCH_ASSOC)) { while ($row = $statement->fetch(PDO::FETCH_ASSOC)) {
$nav = new Navigation('schedule', 'dispatch.php/course/dates'); if (isset($seminars[$row['range_id']]['navigations']['CoreSchedule'])) {
$nav->setImage(Icon::create('schedule', 'inactive', ["title" => sprintf(_('%s Termine'),$row['count'])])); $nav = new Navigation('schedule', 'dispatch.php/course/dates');
$seminars[$row['range_id']]['navigations']['schedule'] = $nav; $nav->setImage(Icon::create('schedule', Icon::ROLE_CLICKABLE, ["title" => sprintf(_('%s Termine'), $row['count'])]));
$seminars[$row['range_id']]['navigations']['CoreSchedule'] = $nav;
}
} }
// Wiki // Wiki
...@@ -170,9 +177,11 @@ class PublicCoursesController extends AuthenticatedController ...@@ -170,9 +177,11 @@ class PublicCoursesController extends AuthenticatedController
$statement = DBManager::get()->prepare($query); $statement = DBManager::get()->prepare($query);
$statement->execute([$seminar_ids]); $statement->execute([$seminar_ids]);
while ($row = $statement->fetch(PDO::FETCH_ASSOC)) { while ($row = $statement->fetch(PDO::FETCH_ASSOC)) {
$nav = new Navigation('wiki', 'wiki.php'); if (isset($seminars[$row['range_id']]['navigations']['CoreWiki'])) {
$nav->setImage(Icon::create('wiki', 'inactive', ["title" => sprintf(_('%s WikiSeiten'),$row['count'])])); $nav = new Navigation('wiki', 'wiki.php');
$seminars[$row['range_id']]['navigations']['wiki'] = $nav; $nav->setImage(Icon::create('wiki', Icon::ROLE_CLICKABLE, ["title" => sprintf(_('%s WikiSeiten'), $row['count'])]));
$seminars[$row['range_id']]['navigations']['CoreWiki'] = $nav;
}
} }
} }
...@@ -187,12 +196,31 @@ class PublicCoursesController extends AuthenticatedController ...@@ -187,12 +196,31 @@ class PublicCoursesController extends AuthenticatedController
$statement = DBManager::get()->prepare($query); $statement = DBManager::get()->prepare($query);
$statement->execute([$seminar_ids]); $statement->execute([$seminar_ids]);
while ($row = $statement->fetch(PDO::FETCH_ASSOC)) { while ($row = $statement->fetch(PDO::FETCH_ASSOC)) {
$nav = new Navigation('vote', '#vote'); if (isset($seminars[$row['range_id']]['navigations']['vote'])) {
$nav->setImage(Icon::create('vote', 'inactive', ["title" => sprintf(_('%s Umfrage(n)'),$row['count'])])); $nav = new Navigation('vote', '#vote');
$seminars[$row['range_id']]['navigations']['vote'] = $nav; $nav->setImage(Icon::create('vote', Icon::ROLE_CLICKABLE, ["title" => sprintf(_('%s Umfrage(n)'), $row['count'])]));
$seminars[$row['range_id']]['navigations']['vote'] = $nav;
}
} }
} }
foreach ($seminars as $id => $seminar) {
foreach ($seminar['tools'] as $tool) {
$module = $tool->getStudipModule();
if (!$module || get_class($module) === 'CoreAdmin' || get_class($module) === 'CoreStudygroupAdmin') {
continue;
}
if (array_key_exists(get_class($module), $seminar['navigations'])) {
continue;
}
if ($tool->getVisibilityPermission() === 'nobody') {
$seminar['navigations'][get_class($module)] = $module->getIconNavigation($id, time(), 'nobody');
} else {
$seminar['navigations'][get_class($module)] = null;
}
}
$seminars[$id] = $seminar;
}
return $seminars; return $seminars;
} }
} }
...@@ -64,10 +64,10 @@ ...@@ -64,10 +64,10 @@
} }
?> ?>
<a href="<?= URLHelper::getLink('seminar_main.php?auswahl='. $id . '&redirect_to=' . str_replace('?', '&', $navigation->getURL())) ?>"<?= $badge ?>> <a href="<?= URLHelper::getLink('seminar_main.php?auswahl='. $id . '&redirect_to=' . str_replace('?', '&', $navigation->getURL())) ?>"<?= $badge ?>>
<?= $navigation->getImageTag() ?> <?= $navigation->getImage()->asImg(20, $navigation->getLinkAttributes()) ?>
</a> </a>
<? else: ?> <? else: ?>
<?= Assets::img('blank.gif', ['width' => 16, 'height' => 16]) ?> <?= Assets::img('blank.gif', ['width' => 20, 'height' => 20]) ?>
<? endif; ?> <? endif; ?>
<? endforeach; ?> <? endforeach; ?>
</td> </td>
......
...@@ -463,14 +463,14 @@ class MyRealmModel ...@@ -463,14 +463,14 @@ class MyRealmModel
} }
if ($plugin === 'vote') { if ($plugin === 'vote') {
$nav = self::checkVote($my_obj_values, $user_id, $object_id); $navigation[$plugin_id] = self::checkVote($my_obj_values, $user_id, $object_id);
} else if ($tool = $my_obj_values['tools']->findOneBy('plugin_id', $plugin_id)) { } else if ($tool = $my_obj_values['tools']->findOneBy('plugin_id', $plugin_id)) {
$nav = $plugin->getIconNavigation($object_id, $visit_data[$plugin_id]['visitdate'], $user_id) ?: false; if (Seminar_Perm::get()->have_studip_perm($tool->getVisibilityPermission(), $object_id, $user_id)) {
$navigation[$plugin_id] = $plugin->getIconNavigation($object_id, $visit_data[$plugin_id]['visitdate'], $user_id);
} else {
$navigation[$plugin_id] = null;
}
} }
// add the main navigation item to resultset
$navigation[$plugin_id] = $nav ?: null;
unset($nav);
} }
foreach ($my_obj_values['tools'] as $tool) { foreach ($my_obj_values['tools'] as $tool) {
if (array_key_exists($tool->plugin_id, $navigation)) { if (array_key_exists($tool->plugin_id, $navigation)) {
...@@ -480,7 +480,11 @@ class MyRealmModel ...@@ -480,7 +480,11 @@ class MyRealmModel
if (!$module || get_class($module) === 'CoreAdmin' || get_class($module) === 'CoreStudygroupAdmin') { if (!$module || get_class($module) === 'CoreAdmin' || get_class($module) === 'CoreStudygroupAdmin') {
continue; continue;
} }
$navigation[$tool->plugin_id] = $module->getIconNavigation($object_id, $visit_data[$tool->plugin_id]['visitdate'], $user_id); if (Seminar_Perm::get()->have_studip_perm($tool->getVisibilityPermission(), $object_id, $user_id)) {
$navigation[$tool->plugin_id] = $module->getIconNavigation($object_id, $visit_data[$tool->plugin_id]['visitdate'], $user_id);
} else {
$navigation[$tool->plugin_id] = null;
}
} }
return $navigation; return $navigation;
} }
......
...@@ -90,7 +90,7 @@ class ToolActivation extends SimpleORMap ...@@ -90,7 +90,7 @@ class ToolActivation extends SimpleORMap
if ($this->metadata['visibility'] === 'tutor') { if ($this->metadata['visibility'] === 'tutor') {
return 'tutor'; return 'tutor';
} else { } else {
return 'user'; return 'nobody';
} }
} }
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment