Skip to content
Snippets Groups Projects
Commit a80c2a6d authored by uhensler's avatar uhensler
Browse files

OO-4080: Log to audit log when coach fills in the evaluation form

parent a54926bd
No related branches found
No related tags found
No related merge requests found
/**
* <a href="http://www.openolat.org">
* OpenOLAT - Online Learning and Training</a><br>
* <p>
* Licensed under the Apache License, Version 2.0 (the "License"); <br>
* you may not use this file except in compliance with the License.<br>
* You may obtain a copy of the License at the
* <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache homepage</a>
* <p>
* Unless required by applicable law or agreed to in writing,<br>
* software distributed under the License is distributed on an "AS IS" BASIS, <br>
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br>
* See the License for the specific language governing permissions and <br>
* limitations under the License.
* <p>
* Initial code contributed and copyrighted by<br>
* frentix GmbH, http://www.frentix.com
* <p>
*/
package org.olat.course.nodes.ms;
import org.olat.core.id.Identity;
import org.olat.course.auditing.UserNodeAuditManager;
import org.olat.course.nodes.CourseNode;
import org.olat.modules.assessment.Role;
/**
*
* Initial date: 18 Jun 2019<br>
* @author uhensler, urs.hensler@frentix.com, http://www.frentix.com
*
*/
public interface AuditEnv {
UserNodeAuditManager getAuditManager();
CourseNode getCourseNode();
Identity getAssessedIdentity();
Identity getIdentity();
Role getBy();
public static AuditEnv of(UserNodeAuditManager auditManager, CourseNode courseNode, Identity assessedIdentity,
Identity identity, Role by) {
return new AuditEnvImpl(auditManager, courseNode, assessedIdentity, identity, by);
}
static class AuditEnvImpl implements AuditEnv {
private final UserNodeAuditManager auditManager;
private final CourseNode courseNode;
private final Identity assessedIdentity;
private final Identity identity;
private final Role by;
private AuditEnvImpl(UserNodeAuditManager auditManager, CourseNode courseNode, Identity assessedIdentity,
Identity identity, Role by) {
this.auditManager = auditManager;
this.courseNode = courseNode;
this.assessedIdentity = assessedIdentity;
this.identity = identity;
this.by = by;
}
@Override
public UserNodeAuditManager getAuditManager() {
return auditManager;
}
@Override
public CourseNode getCourseNode() {
return courseNode;
}
@Override
public Identity getAssessedIdentity() {
return assessedIdentity;
}
@Override
public Identity getIdentity() {
return identity;
}
@Override
public Role getBy() {
return by;
}
}
}
...@@ -31,6 +31,7 @@ import org.olat.core.gui.control.controller.BasicController; ...@@ -31,6 +31,7 @@ import org.olat.core.gui.control.controller.BasicController;
import org.olat.core.id.Identity; import org.olat.core.id.Identity;
import org.olat.course.assessment.AssessmentManager; import org.olat.course.assessment.AssessmentManager;
import org.olat.course.assessment.ui.tool.AssessmentFormCallback; import org.olat.course.assessment.ui.tool.AssessmentFormCallback;
import org.olat.course.auditing.UserNodeAuditManager;
import org.olat.course.nodes.MSCourseNode; import org.olat.course.nodes.MSCourseNode;
import org.olat.course.run.userview.UserCourseEnvironment; import org.olat.course.run.userview.UserCourseEnvironment;
import org.olat.modules.ModuleConfiguration; import org.olat.modules.ModuleConfiguration;
...@@ -59,6 +60,7 @@ public class MSEvaluationFormExecutionController extends BasicController impleme ...@@ -59,6 +60,7 @@ public class MSEvaluationFormExecutionController extends BasicController impleme
private final ModuleConfiguration config; private final ModuleConfiguration config;
private final MSCourseNode msCourseNode; private final MSCourseNode msCourseNode;
private final AuditEnv auditEnv;
private EvaluationFormSession session; private EvaluationFormSession session;
private boolean assessmentDone; private boolean assessmentDone;
...@@ -72,11 +74,14 @@ public class MSEvaluationFormExecutionController extends BasicController impleme ...@@ -72,11 +74,14 @@ public class MSEvaluationFormExecutionController extends BasicController impleme
this.msCourseNode = msCourseNode; this.msCourseNode = msCourseNode;
this.config = msCourseNode.getModuleConfiguration(); this.config = msCourseNode.getModuleConfiguration();
Identity assessedIdentity = assessedUserCourseEnv.getIdentityEnvironment().getIdentity();
UserNodeAuditManager auditManager = assessedUserCourseEnv.getCourseEnvironment().getAuditManager();
this.auditEnv = AuditEnv.of(auditManager , msCourseNode, assessedIdentity, getIdentity(), Role.coach);
RepositoryEntry formEntry = MSCourseNode.getEvaluationForm(config); RepositoryEntry formEntry = MSCourseNode.getEvaluationForm(config);
RepositoryEntry ores = assessedUserCourseEnv.getCourseEnvironment().getCourseGroupManager().getCourseEntry(); RepositoryEntry ores = assessedUserCourseEnv.getCourseEnvironment().getCourseGroupManager().getCourseEntry();
String nodeIdent = msCourseNode.getIdent(); String nodeIdent = msCourseNode.getIdent();
Identity assessedIdentity = assessedUserCourseEnv.getIdentityEnvironment().getIdentity(); session = msService.getOrCreateSession(formEntry, ores, nodeIdent, assessedIdentity, auditEnv);
session = msService.getOrCreateSession(formEntry, ores, nodeIdent, assessedIdentity);
AssessmentManager am = assessedUserCourseEnv.getCourseEnvironment().getAssessmentManager(); AssessmentManager am = assessedUserCourseEnv.getCourseEnvironment().getAssessmentManager();
AssessmentEntry aEntry = am.getAssessmentEntry(msCourseNode, assessedIdentity); AssessmentEntry aEntry = am.getAssessmentEntry(msCourseNode, assessedIdentity);
...@@ -118,21 +123,21 @@ public class MSEvaluationFormExecutionController extends BasicController impleme ...@@ -118,21 +123,21 @@ public class MSEvaluationFormExecutionController extends BasicController impleme
@Override @Override
public void assessmentDone(UserRequest ureq) { public void assessmentDone(UserRequest ureq) {
assessmentDone = true; assessmentDone = true;
session = msService.closeSession(session); session = msService.closeSession(session, auditEnv);
updateUI(ureq); updateUI(ureq);
} }
@Override @Override
public void assessmentReopen(UserRequest ureq) { public void assessmentReopen(UserRequest ureq) {
assessmentDone = false; assessmentDone = false;
session = msService.reopenSession(session); session = msService.reopenSession(session, auditEnv);
updateUI(ureq); updateUI(ureq);
} }
@Override @Override
protected void event(UserRequest ureq, Component source, Event event) { protected void event(UserRequest ureq, Component source, Event event) {
if (source == reopenLink) { if (source == reopenLink) {
session = msService.reopenSession(session); session = msService.reopenSession(session, auditEnv);
updateUI(ureq); updateUI(ureq);
} }
} }
......
...@@ -35,9 +35,11 @@ import org.olat.core.gui.control.generic.closablewrapper.CloseableModalControlle ...@@ -35,9 +35,11 @@ import org.olat.core.gui.control.generic.closablewrapper.CloseableModalControlle
import org.olat.core.id.Identity; import org.olat.core.id.Identity;
import org.olat.core.util.StringHelper; import org.olat.core.util.StringHelper;
import org.olat.course.assessment.AssessmentHelper; import org.olat.course.assessment.AssessmentHelper;
import org.olat.course.auditing.UserNodeAuditManager;
import org.olat.course.nodes.MSCourseNode; import org.olat.course.nodes.MSCourseNode;
import org.olat.course.run.userview.UserCourseEnvironment; import org.olat.course.run.userview.UserCourseEnvironment;
import org.olat.modules.ModuleConfiguration; import org.olat.modules.ModuleConfiguration;
import org.olat.modules.assessment.Role;
import org.olat.modules.forms.EvaluationFormSession; import org.olat.modules.forms.EvaluationFormSession;
import org.olat.modules.forms.RubricStatistic; import org.olat.modules.forms.RubricStatistic;
import org.olat.modules.forms.model.xml.Rubric; import org.olat.modules.forms.model.xml.Rubric;
...@@ -74,7 +76,9 @@ public class MSResultDetailsController extends BasicController { ...@@ -74,7 +76,9 @@ public class MSResultDetailsController extends BasicController {
RepositoryEntry ores = assessedUserCourseEnv.getCourseEnvironment().getCourseGroupManager().getCourseEntry(); RepositoryEntry ores = assessedUserCourseEnv.getCourseEnvironment().getCourseGroupManager().getCourseEntry();
String nodeIdent = msCourseNode.getIdent(); String nodeIdent = msCourseNode.getIdent();
Identity assessedIdentity = assessedUserCourseEnv.getIdentityEnvironment().getIdentity(); Identity assessedIdentity = assessedUserCourseEnv.getIdentityEnvironment().getIdentity();
session = msService.getOrCreateSession(formEntry, ores, nodeIdent, assessedIdentity); UserNodeAuditManager auditManager = assessedUserCourseEnv.getCourseEnvironment().getAuditManager();
AuditEnv auditEnv = AuditEnv.of(auditManager , msCourseNode, assessedIdentity, getIdentity(), Role.coach);
session = msService.getOrCreateSession(formEntry, ores, nodeIdent, assessedIdentity, auditEnv);
List<RubricStatistic> statistics = msService.getRubricStatistics(session); List<RubricStatistic> statistics = msService.getRubricStatistics(session);
String scoreConfig = config.getStringValue(MSCourseNode.CONFIG_KEY_SCORE); String scoreConfig = config.getStringValue(MSCourseNode.CONFIG_KEY_SCORE);
......
...@@ -37,13 +37,13 @@ import org.olat.repository.RepositoryEntry; ...@@ -37,13 +37,13 @@ import org.olat.repository.RepositoryEntry;
public interface MSService { public interface MSService {
EvaluationFormSession getOrCreateSession(RepositoryEntry formEntry, RepositoryEntry ores, String nodeIdent, EvaluationFormSession getOrCreateSession(RepositoryEntry formEntry, RepositoryEntry ores, String nodeIdent,
Identity assessedIdentity); Identity assessedIdentity, AuditEnv auditEnv);
EvaluationFormSession getSession(EvaluationFormSessionRef sessionRef); EvaluationFormSession getSession(EvaluationFormSessionRef sessionRef);
EvaluationFormSession closeSession(EvaluationFormSession session); EvaluationFormSession closeSession(EvaluationFormSession session, AuditEnv auditEnv);
EvaluationFormSession reopenSession(EvaluationFormSession session); EvaluationFormSession reopenSession(EvaluationFormSession session, AuditEnv auditEnv);
boolean hasSessions(OLATResourceable ores, String nodeIdent); boolean hasSessions(OLATResourceable ores, String nodeIdent);
......
...@@ -26,6 +26,8 @@ import java.util.List; ...@@ -26,6 +26,8 @@ import java.util.List;
import org.olat.core.id.Identity; import org.olat.core.id.Identity;
import org.olat.core.id.OLATResourceable; import org.olat.core.id.OLATResourceable;
import org.olat.course.auditing.UserNodeAuditManager;
import org.olat.course.nodes.ms.AuditEnv;
import org.olat.course.nodes.ms.MSService; import org.olat.course.nodes.ms.MSService;
import org.olat.course.nodes.ms.MinMax; import org.olat.course.nodes.ms.MinMax;
import org.olat.modules.forms.EvaluationFormManager; import org.olat.modules.forms.EvaluationFormManager;
...@@ -61,11 +63,11 @@ public class MSServiceImpl implements MSService { ...@@ -61,11 +63,11 @@ public class MSServiceImpl implements MSService {
@Override @Override
public EvaluationFormSession getOrCreateSession(RepositoryEntry formEntry, RepositoryEntry ores, String nodeIdent, public EvaluationFormSession getOrCreateSession(RepositoryEntry formEntry, RepositoryEntry ores, String nodeIdent,
Identity assessedIdentity) { Identity assessedIdentity, AuditEnv auditEnv) {
EvaluationFormSurveyIdentifier surveyIdent = of(ores, nodeIdent, assessedIdentity.getKey().toString()); EvaluationFormSurveyIdentifier surveyIdent = of(ores, nodeIdent, assessedIdentity.getKey().toString());
EvaluationFormSurvey survey = loadOrCreateSurvey(formEntry, surveyIdent); EvaluationFormSurvey survey = loadOrCreateSurvey(formEntry, surveyIdent);
EvaluationFormParticipation participation = loadOrCreateParticipation(survey); EvaluationFormParticipation participation = loadOrCreateParticipation(survey);
return loadOrCreateSesssion(participation); return loadOrCreateSesssion(participation, auditEnv);
} }
private EvaluationFormSurvey loadOrCreateSurvey(RepositoryEntry formEntry, EvaluationFormSurveyIdentifier surveyIdent) { private EvaluationFormSurvey loadOrCreateSurvey(RepositoryEntry formEntry, EvaluationFormSurveyIdentifier surveyIdent) {
...@@ -86,10 +88,11 @@ public class MSServiceImpl implements MSService { ...@@ -86,10 +88,11 @@ public class MSServiceImpl implements MSService {
return loadedParticipation; return loadedParticipation;
} }
private EvaluationFormSession loadOrCreateSesssion(EvaluationFormParticipation participation) { private EvaluationFormSession loadOrCreateSesssion(EvaluationFormParticipation participation, AuditEnv auditEnv) {
EvaluationFormSession session = evaluationFormManager.loadSessionByParticipation(participation); EvaluationFormSession session = evaluationFormManager.loadSessionByParticipation(participation);
if (session == null) { if (session == null) {
session = evaluationFormManager.createSession(participation); session = evaluationFormManager.createSession(participation);
logAudit(auditEnv, "Completion of evaluation form started");
} }
return session; return session;
} }
...@@ -100,13 +103,17 @@ public class MSServiceImpl implements MSService { ...@@ -100,13 +103,17 @@ public class MSServiceImpl implements MSService {
} }
@Override @Override
public EvaluationFormSession closeSession(EvaluationFormSession session) { public EvaluationFormSession closeSession(EvaluationFormSession session, AuditEnv auditEnv) {
return evaluationFormManager.finishSession(session); EvaluationFormSession finishSession = evaluationFormManager.finishSession(session);
logAudit(auditEnv, "Completion of evaluation form finished");
return finishSession;
} }
@Override @Override
public EvaluationFormSession reopenSession(EvaluationFormSession session) { public EvaluationFormSession reopenSession(EvaluationFormSession session, AuditEnv auditEnv) {
return evaluationFormManager.reopenSession(session); EvaluationFormSession reopenSession = evaluationFormManager.reopenSession(session);
logAudit(auditEnv, "Evaluation form reopened");
return reopenSession;
} }
@Override @Override
...@@ -253,4 +260,14 @@ public class MSServiceImpl implements MSService { ...@@ -253,4 +260,14 @@ public class MSServiceImpl implements MSService {
return scale * score.floatValue(); return scale * score.floatValue();
} }
private void logAudit(AuditEnv auditEnv, String message) {
UserNodeAuditManager am = auditEnv.getAuditManager();
am.appendToUserNodeLog(
auditEnv.getCourseNode(),
auditEnv.getIdentity(),
auditEnv.getAssessedIdentity(),
message,
auditEnv.getBy());
}
} }
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment