diff --git a/lib/modules/CoursewareModule.class.php b/lib/modules/CoursewareModule.class.php index 76280e602e0f594e53331007aecb850b6a7b5b52..7b96c55a5f0717be8d111f2d7e900d5b9039cfca 100644 --- a/lib/modules/CoursewareModule.class.php +++ b/lib/modules/CoursewareModule.class.php @@ -65,32 +65,26 @@ class CoursewareModule extends CorePlugin implements SystemPlugin, StudipModule, */ 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++; - } - } + $statement = DBManager::get()->prepare(" + SELECT COUNT(DISTINCT elem.id) + FROM `cw_structural_elements` AS elem + INNER JOIN `cw_containers` as container ON (elem.id = container.structural_element_id) + INNER JOIN `cw_blocks` as blocks ON (container.id = blocks.container_id) + WHERE elem.range_type = 'course' + AND elem.range_id = :range_id + AND blocks.payload != '' + AND blocks.chdate > :last_visit + AND blocks.editor_id != :user_id + "); + + $statement->execute([ + 'range_id' => $courseId, + 'last_visit' => $last_visit, + 'user_id' => $user_id + ]); + + $new = $statement->fetchColumn(); + $nav = new Navigation(_('Courseware'), 'dispatch.php/course/courseware'); $nav->setImage(Icon::create('courseware', Icon::ROLE_CLICKABLE), [ 'title' => _('Courseware'),