range_id = Context::getId(); $this->course = Course::find($this->range_id); $this->isModerator = LtiToolModule::isModerator($this->range_id); } /** * Display the list of LTI Resources. */ public function index_action(): void { if (Navigation::hasItem('/course/lti/index')) { Navigation::activateItem('/course/lti/index'); } PageLayout::setTitle(_('LTI-Ressourcen')); Helpbar::get()->addPlainText('', _('Auf dieser Seite können Sie externe Anwendungen einbinden, sofern diese den LTI-Standard (Version 1.x order 1.3a) unterstützen.')); if ($this->isModerator) { $widget = Sidebar::get()->addWidget(new ActionsWidget()); $widget->addLink( _('LTI-Ressource hinzufügen'), $this->url_for('admin/lti/resources/create'), Icon::create('add') ); } //Check for error messages: if (Request::get('resource_link_id') && (Request::submitted('lti_msg') || Request::submitted('lti_errormsg'))) { $resourceLink = ResourceLink::findOneBySQL( "`id` = :id AND `course_id` = :course_id", [ 'id' => Request::get('resource_link_id'), 'course_id' => $this->range_id ] ); if ($resourceLink) { if (Request::get('lti_msg')) { PageLayout::postInfo(htmlReady($resourceLink->title), [Request::get('lti_msg')]); } if (Request::get('lti_errormsg')) { PageLayout::postError(htmlReady($resourceLink->title), [Request::get('lti_errormsg')]); } } } $this->render_vue_app( Studip\VueApp::create('lti/resources/Index') ); } /** * Display the (simple) LTI grade book. */ public function grades_action(): void { if (Navigation::hasItem('/course/lti/grades')) { Navigation::activateItem('/course/lti/grades'); } $this->lti_data_array = ResourceLink::findBySQL( "`course_id` = :course_id ORDER BY `position`", ['course_id' => $this->range_id] ); if ($this->isModerator) { $this->desc = Request::int('desc'); $this->members = CourseMember::findByCourseAndStatus($this->range_id, 'autor'); if ($this->desc) { $this->members = array_reverse($this->members); } $widget = Sidebar::get()->addWidget(new ExportWidget()); $widget->addLink( _('Ergebnisse exportieren'), $this->url_for('course/lti/export_grades'), Icon::create('download') ); } else { $this->render_action('grades_user'); } Helpbar::get()->addPlainText('', _('Auf dieser Seite können Sie die Ergebnisse sehen, die von LTI-Tools zurückgemeldet wurden.')); } /** * Export grades from the gradebook in CSV format. */ public function export_grades_action(): void { $lti_data_array = ResourceLink::findByCourse_id($this->range_id, 'ORDER BY position'); $columns = [_('Nachname'), _('Vorname')]; // add one column for each LTI tool block foreach ($lti_data_array as $lti_data) { $columns[] = $lti_data->title; } $data = [$columns]; foreach (CourseMember::findByCourseAndStatus($this->range_id, 'autor') as $member) { $row = [$member->nachname, $member->vorname]; foreach ($lti_data_array as $lti_data) { if ($grade = $lti_data->grades->findOneBy('user_id', $member->user_id)) { $row[] = (float) $grade->score; } else { $row[] = ''; } } $data[] = $row; } $filename = Context::get()->name . ' - ' . _('Ergebnisse') . '.csv'; $this->render_csv($data, $filename); } }