/** * <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.gta.ui; import java.util.List; import org.olat.basesecurity.GroupRoles; import org.olat.core.gui.UserRequest; import org.olat.core.gui.components.Component; import org.olat.core.gui.components.link.Link; import org.olat.core.gui.components.link.LinkFactory; import org.olat.core.gui.components.velocity.VelocityContainer; import org.olat.core.gui.control.Controller; import org.olat.core.gui.control.Event; import org.olat.core.gui.control.WindowControl; import org.olat.core.gui.control.controller.BasicController; import org.olat.core.gui.control.generic.messages.MessageUIFactory; import org.olat.core.id.Identity; import org.olat.core.id.Roles; import org.olat.course.assessment.ui.tool.AssessmentFormCallback; import org.olat.course.nodes.GTACourseNode; import org.olat.course.nodes.gta.GTAManager; import org.olat.course.nodes.gta.GTAType; import org.olat.course.nodes.gta.ui.events.SelectBusinessGroupEvent; import org.olat.course.run.environment.CourseEnvironment; import org.olat.course.run.userview.UserCourseEnvironment; import org.olat.group.BusinessGroup; import org.olat.modules.ModuleConfiguration; import org.olat.repository.RepositoryEntry; import org.olat.repository.RepositoryManager; import org.olat.repository.RepositoryService; import org.springframework.beans.factory.annotation.Autowired; /** * * Initial date: 09.03.2015<br> * @author srosse, stephane.rosse@frentix.com, http://www.frentix.com * */ public class GTAAssessmentDetailsController extends BasicController implements AssessmentFormCallback { private GTACoachController coachingCtrl; private GTACoachedGroupListController groupListCtrl; private final Link backLink; private final VelocityContainer mainVC; private final GTACourseNode gtaNode; private final CourseEnvironment courseEnv; private final Identity assessedIdentity; private final UserCourseEnvironment coachCourseEnv; @Autowired private GTAManager gtaManager; @Autowired private RepositoryService repositoryService; @Autowired private RepositoryManager repositoryManager; public GTAAssessmentDetailsController(UserRequest ureq, WindowControl wControl, UserCourseEnvironment coachCourseEnv, UserCourseEnvironment assessedUserCourseEnv, GTACourseNode gtaNode) { super(ureq, wControl); this.gtaNode = gtaNode; this.courseEnv = assessedUserCourseEnv.getCourseEnvironment(); this.coachCourseEnv = coachCourseEnv; mainVC = createVelocityContainer("assessment_details"); backLink = LinkFactory.createLinkBack(mainVC, this); assessedIdentity = assessedUserCourseEnv.getIdentityEnvironment().getIdentity(); ModuleConfiguration config = gtaNode.getModuleConfiguration(); if(GTAType.group.name().equals(config.getStringValue(GTACourseNode.GTASK_TYPE))) { List<BusinessGroup> participatingGroups = gtaManager.getParticipatingBusinessGroups(assessedIdentity, gtaNode); //filters by coaching habilities if(participatingGroups.size() > 1) { String msg = translate("error.duplicate.coaching"); mainVC.contextPut("multipleGroupsWarning", msg); } Roles roles = ureq.getUserSession().getRoles(); RepositoryEntry courseRe = courseEnv.getCourseGroupManager().getCourseEntry(); if(!roles.isOLATAdmin() && !repositoryManager.isInstitutionalRessourceManagerFor(getIdentity(), roles, courseRe)) { List<String> reRoles = repositoryService.getRoles(getIdentity(), courseRe); if(reRoles.contains(GroupRoles.owner.name())) { //view all groups; } else if(reRoles.contains(GroupRoles.coach.name())) { List<BusinessGroup> coachedGroups = gtaManager.getCoachedBusinessGroups(getIdentity(), gtaNode); participatingGroups.retainAll(coachedGroups); } else { participatingGroups.clear(); } } if(participatingGroups.isEmpty()) { String title = translate("error.not.member.title"); String message = translate("error.not.member.message"); Controller msgCtrl = MessageUIFactory.createInfoMessage(ureq, wControl, title, message); listenTo(msgCtrl); mainVC.put("list", msgCtrl.getInitialComponent()); } else if(participatingGroups.size() == 1) { doSelectBusinessGroup(ureq, participatingGroups.get(0)); } else { groupListCtrl = new GTACoachedGroupListController(ureq, getWindowControl(), null, coachCourseEnv, gtaNode, participatingGroups); listenTo(groupListCtrl); mainVC.put("list", groupListCtrl.getInitialComponent()); } } else { doSelectParticipant(ureq, assessedIdentity); } putInitialPanel(mainVC); } @Override protected void doDispose() { // } @Override public void assessmentDone(UserRequest ureq) { if(coachingCtrl != null) { coachingCtrl.assessmentDone(ureq); } } @Override public void assessmentReopen(UserRequest ureq) { if(coachingCtrl != null) { coachingCtrl.assessmentReopen(ureq); } } @Override protected void event(UserRequest ureq, Controller source, Event event) { if(groupListCtrl == source) { if(event instanceof SelectBusinessGroupEvent) { SelectBusinessGroupEvent selectEvent = (SelectBusinessGroupEvent)event; doSelectBusinessGroup(ureq, selectEvent.getBusinessGroup()); backLink.setVisible(true); } } super.event(ureq, source, event); } @Override protected void event(UserRequest ureq, Component source, Event event) { if(backLink == source) { back(); } } private void back() { if(coachingCtrl != null) { mainVC.remove(coachingCtrl.getInitialComponent()); removeAsListenerAndDispose(coachingCtrl); coachingCtrl = null; } backLink.setVisible(false); } private void doSelectBusinessGroup(UserRequest ureq, BusinessGroup group) { removeAsListenerAndDispose(coachingCtrl); coachingCtrl = new GTACoachController(ureq, getWindowControl(), courseEnv, gtaNode, coachCourseEnv, group, true, true, true); listenTo(coachingCtrl); mainVC.put("selection", coachingCtrl.getInitialComponent()); } private void doSelectParticipant(UserRequest ureq, Identity identity) { removeAsListenerAndDispose(coachingCtrl); coachingCtrl = new GTACoachController(ureq, getWindowControl(), courseEnv, gtaNode, coachCourseEnv, identity, false, false, true); listenTo(coachingCtrl); mainVC.put("selection", coachingCtrl.getInitialComponent()); } }