Index: idea_project/.idea/inspectionProfiles/Project_Default.xml =================================================================== diff -u -reccd6838790a4369b6788e48fb5ae5851622fe35 -ra5caeb34843b9f5ac91452490ec06d411e0e968a --- idea_project/.idea/inspectionProfiles/Project_Default.xml (.../Project_Default.xml) (revision eccd6838790a4369b6788e48fb5ae5851622fe35) +++ idea_project/.idea/inspectionProfiles/Project_Default.xml (.../Project_Default.xml) (revision a5caeb34843b9f5ac91452490ec06d411e0e968a) @@ -2,6 +2,9 @@ \ No newline at end of file Index: lams_central/conf/language/lams/ApplicationResources.properties =================================================================== diff -u -r15d4338b7ff28f2d39b08f091a8f408378fee502 -ra5caeb34843b9f5ac91452490ec06d411e0e968a --- lams_central/conf/language/lams/ApplicationResources.properties (.../ApplicationResources.properties) (revision 15d4338b7ff28f2d39b08f091a8f408378fee502) +++ lams_central/conf/language/lams/ApplicationResources.properties (.../ApplicationResources.properties) (revision a5caeb34843b9f5ac91452490ec06d411e0e968a) @@ -73,6 +73,7 @@ index.addlesson = Add Lesson index.monitor = Monitor index.dummymonitor = Dummy Monitor +index.teamwork = Teamwork title.import.result = Import tool content result title.import = Import tool content title.import.instruction = Please choose LAMS design to import. @@ -1148,4 +1149,4 @@ label.questions.choice.collection.new.option = [Add new collection] label.questions.choice.collection.new.prompt = Enter a name for the new collection: label.questions.choice.generate.more = Generate more questions -label.questions.choice.generate.more.error = Error while generating more questions +label.questions.choice.generate.more.error = Error while generating more questions \ No newline at end of file Index: lams_central/src/java/org/lamsfoundation/lams/web/DisplayGroupController.java =================================================================== diff -u -rb6d55d571ea99a87a367fec36df40ec45627b0ea -ra5caeb34843b9f5ac91452490ec06d411e0e968a --- lams_central/src/java/org/lamsfoundation/lams/web/DisplayGroupController.java (.../DisplayGroupController.java) (revision b6d55d571ea99a87a367fec36df40ec45627b0ea) +++ lams_central/src/java/org/lamsfoundation/lams/web/DisplayGroupController.java (.../DisplayGroupController.java) (revision a5caeb34843b9f5ac91452490ec06d411e0e968a) @@ -22,20 +22,6 @@ package org.lamsfoundation.lams.web; -import java.sql.SQLException; -import java.util.ArrayList; -import java.util.Collections; -import java.util.Iterator; -import java.util.LinkedList; -import java.util.List; -import java.util.Map; -import java.util.Map.Entry; -import java.util.Set; - -import javax.naming.NamingException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - import org.lamsfoundation.lams.index.IndexLessonBean; import org.lamsfoundation.lams.index.IndexLinkBean; import org.lamsfoundation.lams.index.IndexOrgBean; @@ -44,13 +30,7 @@ import org.lamsfoundation.lams.lesson.Lesson; import org.lamsfoundation.lams.lesson.service.LessonService; import org.lamsfoundation.lams.security.ISecurityService; -import org.lamsfoundation.lams.usermanagement.Organisation; -import org.lamsfoundation.lams.usermanagement.OrganisationState; -import org.lamsfoundation.lams.usermanagement.OrganisationType; -import org.lamsfoundation.lams.usermanagement.Role; -import org.lamsfoundation.lams.usermanagement.User; -import org.lamsfoundation.lams.usermanagement.UserOrganisationCollapsed; -import org.lamsfoundation.lams.usermanagement.UserOrganisationRole; +import org.lamsfoundation.lams.usermanagement.*; import org.lamsfoundation.lams.usermanagement.service.IUserManagementService; import org.lamsfoundation.lams.util.Configuration; import org.lamsfoundation.lams.util.ConfigurationKeys; @@ -61,6 +41,13 @@ import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; +import javax.naming.NamingException; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.sql.SQLException; +import java.util.*; +import java.util.Map.Entry; + /** * @author jliew */ @@ -106,8 +93,8 @@ request.isUserInRole(Role.APPADMIN) || request.isUserInRole(Role.SYSADMIN)); request.setAttribute("orgBean", iob); - if (org.getEnableSingleActivityLessons() - && (roles.contains(Role.ROLE_GROUP_MANAGER) || roles.contains(Role.ROLE_MONITOR))) { + if (org.getEnableSingleActivityLessons() && (roles.contains(Role.ROLE_GROUP_MANAGER) || roles.contains( + Role.ROLE_MONITOR))) { // if single activity lessons are enabled, put sorted list of tools request.setAttribute("tools", learningDesignService.getToolDTOs(false, false, request.getRemoteUser())); } @@ -132,10 +119,19 @@ // First, populate header part List links = new ArrayList<>(); List moreLinks = new ArrayList<>(); + + boolean isSpTeamworkEnabled = Configuration.isLamsModuleAvailable(Configuration.TEAMWORK_MODULE_CLASS); + if (isSpTeamworkEnabled) { + moreLinks.add( + new IndexLinkBean("index.teamwork", "javascript:openTeamworkWindow()", "fa fa-fw fa-handshake", + null)); + } + if (isAppAdmin) { if (orgBean.getType().equals(OrganisationType.COURSE_TYPE)) { - moreLinks.add(new IndexLinkBean("index.classman", - "javascript:openOrgManagement(" + organisationId + ")", "fa fa-fw fa-users", null)); + moreLinks.add( + new IndexLinkBean("index.classman", "javascript:openOrgManagement(" + organisationId + ")", + "fa fa-fw fa-users", null)); } } @@ -147,11 +143,13 @@ if (roles.contains(Role.ROLE_GROUP_MANAGER) || roles.contains(Role.ROLE_MONITOR)) { if (orgBean.getType().equals(OrganisationType.COURSE_TYPE)) { if ((!isAppAdmin) && (roles.contains(Role.ROLE_GROUP_MANAGER))) { - moreLinks.add(new IndexLinkBean("index.classman", - "javascript:openOrgManagement(" + organisationId + ")", "fa fa-fw fa-ellipsis-v", null)); + moreLinks.add( + new IndexLinkBean("index.classman", "javascript:openOrgManagement(" + organisationId + ")", + "fa fa-fw fa-ellipsis-v", null)); } - moreLinks.add(new IndexLinkBean("index.orggroup", - "javascript:showOrgGroupingDialog(" + organisationId + ")", "fa fa-fw fa-users", null)); + moreLinks.add( + new IndexLinkBean("index.orggroup", "javascript:showOrgGroupingDialog(" + organisationId + ")", + "fa fa-fw fa-users", null)); String name = org.getEnableSingleActivityLessons() ? "index.addlesson.single" : "index.addlesson"; links.add(new IndexLinkBean(name, "javascript:showAddLessonDialog(" + organisationId + ")", @@ -185,14 +183,16 @@ "index.coursegradebook.tooltip")); if (Configuration.getAsBoolean(ConfigurationKeys.ALLOW_DIRECT_LESSON_LAUNCH)) { - String orgUrl = Configuration.get(ConfigurationKeys.SERVER_URL) + "r/" - + WebUtil.ORG_SHORTENING_PREFIX + WebUtil.encodeIdForDirectLaunch(organisationId); + String orgUrl = + Configuration.get(ConfigurationKeys.SERVER_URL) + "r/" + WebUtil.ORG_SHORTENING_PREFIX + + WebUtil.encodeIdForDirectLaunch(organisationId); link = "javascript:copyOrgUrlToClipboard('" + orgUrl + "')"; moreLinks.add(new IndexLinkBean("index.organisation.link", link, "fa fa-fw fa-clipboard", "index.organisation.link.tooltip")); } } else {// CLASS_TYPE - String name = org.getParentOrganisation().getEnableSingleActivityLessons() ? "index.addlesson.single" + String name = org.getParentOrganisation().getEnableSingleActivityLessons() + ? "index.addlesson.single" : "index.addlesson"; links.add(new IndexLinkBean(name, "javascript:showAddLessonDialog(" + organisationId + ")", "fa fa-fw fa-plus", null)); @@ -202,11 +202,11 @@ } } - if (Configuration.getAsBoolean(ConfigurationKeys.ALLOW_KUMALIVE) && org.getEnableKumalive() - && (roles.contains(Role.ROLE_GROUP_MANAGER) || roles.contains(Role.ROLE_MONITOR) - || roles.contains(Role.ROLE_LEARNER))) { - boolean isKumaliveDisabledForOrganisation = learnerService - .isKumaliveDisabledForOrganisation(organisationId); + if (Configuration.getAsBoolean(ConfigurationKeys.ALLOW_KUMALIVE) && org.getEnableKumalive() && ( + roles.contains(Role.ROLE_GROUP_MANAGER) || roles.contains(Role.ROLE_MONITOR) || roles.contains( + Role.ROLE_LEARNER))) { + boolean isKumaliveDisabledForOrganisation = learnerService.isKumaliveDisabledForOrganisation( + organisationId); boolean isMonitor = roles.contains(Role.ROLE_GROUP_MANAGER) || roles.contains(Role.ROLE_MONITOR); boolean disabled = !isMonitor && isKumaliveDisabledForOrganisation; links.add(new IndexLinkBean(isMonitor ? "index.kumalive.teacher" : "index.kumalive", @@ -233,19 +233,19 @@ // create subgroup beans if (orgBean.getType().equals(OrganisationType.COURSE_TYPE)) { Set childOrganisations = org.getChildOrganisations(); - boolean isCollapsingSubcoursesEnabled = Configuration - .getAsBoolean(ConfigurationKeys.ENABLE_COLLAPSING_SUBCOURSES); + boolean isCollapsingSubcoursesEnabled = Configuration.getAsBoolean( + ConfigurationKeys.ENABLE_COLLAPSING_SUBCOURSES); List userOrganisationsCollapsed = isCollapsingSubcoursesEnabled ? userManagementService.getChildOrganisationsCollapsedByUser(org.getOrganisationId(), userId) : null; List childOrgBeans = new ArrayList<>(); for (Organisation childOrganisation : childOrganisations) { - if (OrganisationState.ACTIVE - .equals(childOrganisation.getOrganisationState().getOrganisationStateId())) { + if (OrganisationState.ACTIVE.equals( + childOrganisation.getOrganisationState().getOrganisationStateId())) { List classRoles = new ArrayList<>(); - List userOrganisationRoles = userManagementService - .getUserOrganisationRoles(childOrganisation.getOrganisationId(), username); + List userOrganisationRoles = userManagementService.getUserOrganisationRoles( + childOrganisation.getOrganisationId(), username); // don't list the subgroup if user is not a member, and not a group admin/manager if (((userOrganisationRoles == null) || userOrganisationRoles.isEmpty()) && !isAppAdmin && !roles.contains(Role.ROLE_GROUP_MANAGER)) { @@ -300,8 +300,8 @@ LinkedList lessonLinks = new LinkedList<>(); String url = null; Integer lessonStateId = bean.getState(); - if (roles.contains(Role.ROLE_LEARNER) - && (lessonStateId.equals(Lesson.STARTED_STATE) || lessonStateId.equals(Lesson.FINISHED_STATE))) { + if (roles.contains(Role.ROLE_LEARNER) && (lessonStateId.equals(Lesson.STARTED_STATE) + || lessonStateId.equals(Lesson.FINISHED_STATE))) { url = "javascript:openLearner(" + bean.getId() + ")"; } @@ -327,8 +327,9 @@ } if (isGroupManagerOrMonitor) { - lessonLinks.addFirst(new IndexLinkBean("index.monitor", - "javascript:openMonitorLesson(" + bean.getId() + ")", "fa fa-fw fa-heartbeat", null)); + lessonLinks.addFirst( + new IndexLinkBean("index.monitor", "javascript:openMonitorLesson(" + bean.getId() + ")", + "fa fa-fw fa-heartbeat", null)); } // Adding lesson notifications links if enabled @@ -364,4 +365,4 @@ private User getUser(String login) { return (User) userManagementService.findByProperty(User.class, "login", login).get(0); } -} +} \ No newline at end of file Index: lams_central/web/includes/javascript/openUrls.js =================================================================== diff -u -r024ce0c12173cc7513122f539368873c52b03540 -ra5caeb34843b9f5ac91452490ec06d411e0e968a --- lams_central/web/includes/javascript/openUrls.js (.../openUrls.js) (revision 024ce0c12173cc7513122f539368873c52b03540) +++ lams_central/web/includes/javascript/openUrls.js (.../openUrls.js) (revision a5caeb34843b9f5ac91452490ec06d411e0e968a) @@ -204,4 +204,8 @@ customWin.focus(); } } +} + +function openTeamworkWindow (){ + window.open('teamwork/show.do', '_blank'); } \ No newline at end of file Index: lams_common/src/java/org/lamsfoundation/lams/util/Configuration.java =================================================================== diff -u -r784731558fee35bec1bcb6ce76ecf352b5856db5 -ra5caeb34843b9f5ac91452490ec06d411e0e968a --- lams_common/src/java/org/lamsfoundation/lams/util/Configuration.java (.../Configuration.java) (revision 784731558fee35bec1bcb6ce76ecf352b5856db5) +++ lams_common/src/java/org/lamsfoundation/lams/util/Configuration.java (.../Configuration.java) (revision a5caeb34843b9f5ac91452490ec06d411e0e968a) @@ -23,17 +23,6 @@ package org.lamsfoundation.lams.util; -import java.io.IOException; -import java.net.ConnectException; -import java.util.ArrayList; -import java.util.Collections; -import java.util.HashMap; -import java.util.Iterator; -import java.util.LinkedHashMap; -import java.util.List; -import java.util.Locale; -import java.util.Map; - import org.apache.commons.lang.StringUtils; import org.apache.log4j.Logger; import org.jboss.as.controller.client.ModelControllerClient; @@ -42,17 +31,13 @@ import org.lamsfoundation.lams.config.ConfigurationItem; import org.lamsfoundation.lams.config.dao.IConfigurationDAO; import org.lamsfoundation.lams.usermanagement.WorkspaceFolder; -import org.quartz.JobBuilder; -import org.quartz.JobDetail; -import org.quartz.JobKey; -import org.quartz.Scheduler; -import org.quartz.SchedulerException; -import org.quartz.SimpleScheduleBuilder; -import org.quartz.Trigger; -import org.quartz.TriggerBuilder; -import org.quartz.TriggerKey; +import org.quartz.*; import org.springframework.beans.factory.InitializingBean; +import java.io.IOException; +import java.net.ConnectException; +import java.util.*; + /** * Configuration Object * @@ -71,6 +56,7 @@ public static final String LTI_ADVANTAGE_MODULE_CLASS = "org.lamsfoundation.lams.lti.advantage.util.LtiAdvantageUtil"; public static final String AI_MODULE_CLASS = "org.lamsfoundation.lams.ai.util.QuestionOpenAiParser"; + public static final String TEAMWORK_MODULE_CLASS = "org.lamsfoundation.lams.teamwork.TeamworkConstants"; private static Map items = null;