diff --git a/app/controllers/contents/courseware.php b/app/controllers/contents/courseware.php index e509a6bd1ec53ce049fe923bcf5afee49d2a8c3d..fa70db633a94cb1dec4d2687fbc4736ff23e0553 100755 --- a/app/controllers/contents/courseware.php +++ b/app/controllers/contents/courseware.php @@ -188,8 +188,10 @@ class Contents_CoursewareController extends AuthenticatedController if ($sem_key === '0' || $sem_key === null) { $sem_key = 'all'; $this->all_semesters = true; + $this->semesters = Semester::getAll(); } else { $this->all_semesters = false; + $this->semesters = [Semester::find($sem_key)]; } $params = [ 'order_by' => null, @@ -198,36 +200,109 @@ class Contents_CoursewareController extends AuthenticatedController 'deputies_enabled' => Config::get()->DEPUTIES_ENABLE, ]; - $sem_courses = MyRealmModel::getPreparedCourses($sem_key, $params); + $this->sem_courses = $this->getCoursewareCourses($sem_key); + } + + /** + * Return list of coursewares grouped by semester_id + * + * @param string $sem_key currently selected semester or all (for all semesters) + * + * @return array + */ + private function getCoursewareCourses($sem_key) + { + $this->current_semester = Semester::findCurrent(); + + $courses = Course::findThru($this->user_id, [ + 'thru_table' => 'seminar_user', + 'thru_key' => 'user_id', + 'thru_assoc_key' => 'seminar_id', + 'assoc_foreign_key' => 'seminar_id' + ]); + + if (Config::get()->DEPUTIES_ENABLE) { + $deputy_courses = Deputy::findDeputyCourses($GLOBALS['user']->id)->pluck('course'); + if (!empty($deputy_courses)) { + $courses = array_merge($courses, $deputy_courses); + } + } - $this->semesters = []; + $courses = new SimpleCollection($courses); - if ($sem_courses) { - $i = 0; - foreach ($sem_courses as $sem) { - $this->semesters[$i]['semester_name'] = array_values($sem)[0]['start_semester']; - $this->semesters[$i]['coursewares'] = []; - $this->semesters[$i]['empty_courses'] = []; + if (!Config::get()->MY_COURSES_ENABLE_STUDYGROUPS) { + $courses = $courses->filter(function ($a) { + return !$a->isStudygroup(); + }); + } + + if ($sem_key != 'all') { + $semester = Semester::find($sem_key); + + $courses = $courses->filter(function ($a) use ($semester) { + if ($a->isInSemester($semester)) { + return true; + } + return false; + }); + + $coursewares = []; + + foreach ($courses as $course) { + $element = StructuralElement::getCoursewareCourse($course->id); + if (!empty($element) && $this->isCoursewareEnabled($course->id)) { + $element['payload'] = json_decode($element['payload'], true); + $coursewares[] = $element; + } + } - foreach ($sem as $cid => $course) { - $element = StructuralElement::getCoursewareCourse($cid); - if($element) { - $element['payload'] = json_decode($element['payload'], true); - array_push($this->semesters[$i]['coursewares'], $element); + if (empty($coursewares)) { + return []; + } + + return [$semester->id => [ + 'semester_name' => $semester->name, + 'coursewares' => $coursewares + ]]; + } else { + $all_semesters = Semester::getAll(); + $sem_courses = []; + + foreach ($courses as $course) { + $element = StructuralElement::getCoursewareCourse($course->id); + if (!empty($element) && $this->isCoursewareEnabled($course->id)) { + $element['payload'] = json_decode($element['payload'], true); + + if ($course->duration_time == -1) { + $sem_courses[$this->current_semester->id]['coursewares'][] = $element; } else { - array_push($this->semesters[$i]['empty_courses'], $course); + $end_semester = $course->getEndSemester(); + $sem_courses[$end_semester->id]['coursewares'][] = $element; } } - $i++; } - } else { - $semester = Semester::find($sem_key); - $this->semesters[0]['semester_name'] = $semester->name; - $this->semesters[0]['coursewares'] = []; - $this->semesters[0]['empty_courses'] = []; + + return $sem_courses; } } + /** + * Returns true if the courseware module is enabled for the passed course + * + * @param string $course_id the course to check + * @return boolean true if courseware is enabled, false otherwise + */ + private function isCoursewareEnabled($course_id) + { + $studip_module = PluginManager::getInstance()->getPlugin('CoursewareModule'); + + if (!$studip_module || !$studip_module->isActivated($course_id)) { + return false; + } + + return true; + } + private function getProjects($purpose) { diff --git a/app/views/contents/courseware/courses_overview.php b/app/views/contents/courseware/courses_overview.php index 7699c08ad5f43e3baa44404621b092cf25b86a92..7ae6cadd4ae4a1445b610be8dd1c9edcda8bfa94 100644 --- a/app/views/contents/courseware/courses_overview.php +++ b/app/views/contents/courseware/courses_overview.php @@ -1,9 +1,27 @@ <div class="cw-content-projects"> + <? if (empty($sem_courses)) : ?> + <? if (!$all_semesters) : ?> + <h2> + <?= htmlReady($semesters[0]->name) ?> + <? if ($current_semester->id == $semesters[0]->id) : ?> + (<?= _('Aktuelles Semester') ?> ) + <? endif ?> + </h2> + <? endif ?> + + <?= MessageBox::info(_('Keine der Veranstaltungen auf die sie Zugriff ' + . 'haben hat eine Courseware mit Inhalten.')); ?> + <? else : ?> <? foreach($semesters as $semester) :?> - <h2><?= htmlReady($semester['semester_name']) ?></h2> - <? if (!empty($semester['coursewares'])): ?> + <? if (!empty($sem_courses[$semester->id]['coursewares'])): ?> + <h2> + <?= htmlReady($semester->name) ?> + <? if ($current_semester->id == $semester->id) : ?> + (<?= _('Aktuelles Semester') ?> ) + <? endif ?> + </h2> <ul class="cw-tiles"> - <? foreach($semester['coursewares'] as $element) :?> + <? foreach($sem_courses[$semester->id]['coursewares'] as $element) :?> <li class="tile <?= htmlReady($element['payload']['color'])?>"> <a href="<?= URLHelper::getLink('dispatch.php/course/courseware/?cid='.$element['range_id'].'#/structural_element/'.$element['id']) ?>"> <div class="preview-image" style="background-image: url(<?= htmlReady($element->getImageUrl()) ?>)" ></div> @@ -23,11 +41,6 @@ <? endforeach; ?> </ul> <? endif; ?> - <? if (empty($semester['coursewares']) && !empty($empty_courses)): ?> - <?= MessageBox::info(_('Es wurden noch keine Lernunterlagen angelegt.')); ?> - <? endif; ?> - <? if (empty($semester['coursewares']) && empty($empty_courses)): ?> - <?= MessageBox::info(_('Es wurden keine Veranstaltungen gefunden.')); ?> - <? endif; ?> <? endforeach; ?> + <? endif; ?> </div>