Index: lams_learning/src/java/org/lamsfoundation/lams/learning/export/service/ExportPortfolioService.java =================================================================== diff -u -r623a8b69a67eb91d7e0a31c5f4d15c4fabb9aa6f -rccf0c98665da622cc43ff39393de652596752cdf --- lams_learning/src/java/org/lamsfoundation/lams/learning/export/service/ExportPortfolioService.java (.../ExportPortfolioService.java) (revision 623a8b69a67eb91d7e0a31c5f4d15c4fabb9aa6f) +++ lams_learning/src/java/org/lamsfoundation/lams/learning/export/service/ExportPortfolioService.java (.../ExportPortfolioService.java) (revision ccf0c98665da622cc43ff39393de652596752cdf) @@ -337,7 +337,7 @@ //for security reasons, append the relative directory name to the end of the export url instead of the whole path String relativePath = activitySubDirectory.substring(FileUtil.TEMP_DIR.length()+1, activitySubDirectory.length()); - // Complex activities don't have export urls. + // Some activities (parallel, optional, sequence) don't have export urls. if ( activityPortfolio.getExportUrl() != null ) { activityPortfolio.setExportUrl( ExportPortfolioConstants.HOST + activityPortfolio.getExportUrl() ); activityPortfolio.setExportUrl( WebUtil.appendParameterToURL(activityPortfolio.getExportUrl(), AttributeNames.PARAM_DIRECTORY_NAME, relativePath) ); Index: lams_learning/src/java/org/lamsfoundation/lams/learning/export/service/PortfolioBuilder.java =================================================================== diff -u -re53268b2dfab47fefe05312674eb1533f03acf7f -rccf0c98665da622cc43ff39393de652596752cdf --- lams_learning/src/java/org/lamsfoundation/lams/learning/export/service/PortfolioBuilder.java (.../PortfolioBuilder.java) (revision e53268b2dfab47fefe05312674eb1533f03acf7f) +++ lams_learning/src/java/org/lamsfoundation/lams/learning/export/service/PortfolioBuilder.java (.../PortfolioBuilder.java) (revision ccf0c98665da622cc43ff39393de652596752cdf) @@ -32,14 +32,13 @@ import org.apache.log4j.Logger; import org.lamsfoundation.lams.learning.export.ActivityPortfolio; import org.lamsfoundation.lams.learning.export.NotebookPortfolio; -import org.lamsfoundation.lams.learning.export.ExportPortfolioConstants; import org.lamsfoundation.lams.learning.export.ExportPortfolioException; import org.lamsfoundation.lams.learningdesign.Activity; import org.lamsfoundation.lams.learningdesign.ComplexActivity; +import org.lamsfoundation.lams.learningdesign.ISystemToolActivity; import org.lamsfoundation.lams.learningdesign.LearningDesign; import org.lamsfoundation.lams.learningdesign.LearningDesignProcessor; import org.lamsfoundation.lams.learningdesign.SimpleActivity; -import org.lamsfoundation.lams.learningdesign.SystemToolActivity; import org.lamsfoundation.lams.learningdesign.ToolActivity; import org.lamsfoundation.lams.learningdesign.dao.IActivityDAO; import org.lamsfoundation.lams.learningdesign.exception.LearningDesignProcessorException; @@ -124,6 +123,12 @@ complexPortfolio.setChildPortfolios(currentPortfolioList); } + if ( activity.isSystemToolActivity() ) { + String exportURL = getExportURLForSystemTool(activity); + complexPortfolio = complexPortfolio == null ? createActivityPortfolio(activity) : complexPortfolio; + complexPortfolio.setExportUrl(exportURL); + } + currentPortfolioList = (ArrayList) activityListStack.pop(); if ( complexPortfolio != null ) currentPortfolioList.add(complexPortfolio); @@ -137,12 +142,9 @@ public void endSimpleActivity(SimpleActivity activity) throws LearningDesignProcessorException { // if learner only include the attempted and completed activities - // if learner don't include gates - if (accessMode == ToolAccessMode.LEARNER) { - if ( activity.isGateActivity() || - ! ( progress.getCompletedActivities().contains(activity) || progress.getAttemptedActivities().contains(activity)) ) { - return; - } + if (accessMode == ToolAccessMode.LEARNER && + ! ( progress.getCompletedActivities().contains(activity) || progress.getAttemptedActivities().contains(activity)) ) { + return; } ActivityPortfolio p = createActivityPortfolio(activity); @@ -179,37 +181,53 @@ } } else if ( activity.isSystemToolActivity() ) { - // only include the gates in the teacher version - learner gate has been avoided at the beginning of this method - // always include grouping - // system tools don't use the modes or the tool session id but need to add them or the validation fails in - // AbstractExportPortfolio servlet. So why leave the validation there - because system tools are the exception - // rather than the rule. In the future, they may need these parameters. - SystemToolActivity sysToolActivity = (SystemToolActivity) activity; - SystemTool tool = sysToolActivity.getSystemTool(); - if ( tool != null ) { - if (accessMode == ToolAccessMode.LEARNER) { - exportUrlForTool = tool.getExportPortfolioLearnerUrl(); - } else { - exportUrlForTool = tool.getExportPortfolioClassUrl(); - } - } - if ( exportUrlForTool != null ) { - if (accessMode == ToolAccessMode.LEARNER) { - exportUrlForTool = WebUtil.appendParameterToURL(exportUrlForTool, AttributeNames.PARAM_USER_ID, user.getUserId().toString()); - exportUrlForTool = WebUtil.appendParameterToURL(exportUrlForTool, AttributeNames.PARAM_TOOL_SESSION_ID, "0"); - } else { - exportUrlForTool = WebUtil.appendParameterToURL(exportUrlForTool, AttributeNames.PARAM_TOOL_CONTENT_ID, "0"); - } - exportUrlForTool = WebUtil.appendParameterToURL(exportUrlForTool, AttributeNames.PARAM_ACTIVITY_ID, activity.getActivityId().toString()); - exportUrlForTool = WebUtil.appendParameterToURL(exportUrlForTool, AttributeNames.PARAM_LESSON_ID, lesson.getLessonId().toString()); - } + exportUrlForTool = getExportURLForSystemTool(activity); } p.setExportUrl(exportUrlForTool); currentPortfolioList.add(p); } + + /** + * A system tool may be a simple or a complex activity, so the logic is in a method called by both endSimpleActivity() + * and endComplexActivity(). Only include the gates and branching in the teacher version, but always include grouping. This is + * controlled by the urls in the db - if there isn't a url in the system table then we assume that there shouldn't + * be a screen. + *

+ * System tools don't use the modes or the tool session id but need to add them or the validation fails in + * AbstractExportPortfolio servlet. So why leave the validation there - because system tools are the exception rather than the rule. + * In the future, they may need these parameters. + * + * @param activity: an activity which also meets the ISystemToolActivity interface + * @param exportUrlForTool + */ + private String getExportURLForSystemTool(Activity activity) { + + String exportUrlForTool = null; + ISystemToolActivity sysToolActivity = (ISystemToolActivity) activity; + SystemTool tool = sysToolActivity.getSystemTool(); + + if ( tool != null ) { + if (accessMode == ToolAccessMode.LEARNER) { + exportUrlForTool = tool.getExportPortfolioLearnerUrl(); + } else { + exportUrlForTool = tool.getExportPortfolioClassUrl(); + } + } + if ( exportUrlForTool != null ) { + if (accessMode == ToolAccessMode.LEARNER) { + exportUrlForTool = WebUtil.appendParameterToURL(exportUrlForTool, AttributeNames.PARAM_USER_ID, user.getUserId().toString()); + exportUrlForTool = WebUtil.appendParameterToURL(exportUrlForTool, AttributeNames.PARAM_TOOL_SESSION_ID, "0"); + } else { + exportUrlForTool = WebUtil.appendParameterToURL(exportUrlForTool, AttributeNames.PARAM_TOOL_CONTENT_ID, "0"); + } + exportUrlForTool = WebUtil.appendParameterToURL(exportUrlForTool, AttributeNames.PARAM_ACTIVITY_ID, activity.getActivityId().toString()); + exportUrlForTool = WebUtil.appendParameterToURL(exportUrlForTool, AttributeNames.PARAM_LESSON_ID, lesson.getLessonId().toString()); + } + return exportUrlForTool; + } /** * Process all Notebook (Scratchpad) entries into portfolio objects. Index: lams_learning/src/java/org/lamsfoundation/lams/learning/web/action/BranchingActivityAction.java =================================================================== diff -u -r5863520d75343b47f77b05ad3bd7045a9a39af49 -rccf0c98665da622cc43ff39393de652596752cdf --- lams_learning/src/java/org/lamsfoundation/lams/learning/web/action/BranchingActivityAction.java (.../BranchingActivityAction.java) (revision 5863520d75343b47f77b05ad3bd7045a9a39af49) +++ lams_learning/src/java/org/lamsfoundation/lams/learning/web/action/BranchingActivityAction.java (.../BranchingActivityAction.java) (revision ccf0c98665da622cc43ff39393de652596752cdf) @@ -49,7 +49,7 @@ * * XDoclet definition: * - * @struts:action path="/Branching" + * @struts:action path="/branching" * name="BranchingForm" * parameter="method" * validate="false" Index: lams_learning/src/java/org/lamsfoundation/lams/learning/web/util/ActivityMappingStrategy.java =================================================================== diff -u -r5863520d75343b47f77b05ad3bd7045a9a39af49 -rccf0c98665da622cc43ff39393de652596752cdf --- lams_learning/src/java/org/lamsfoundation/lams/learning/web/util/ActivityMappingStrategy.java (.../ActivityMappingStrategy.java) (revision 5863520d75343b47f77b05ad3bd7045a9a39af49) +++ lams_learning/src/java/org/lamsfoundation/lams/learning/web/util/ActivityMappingStrategy.java (.../ActivityMappingStrategy.java) (revision ccf0c98665da622cc43ff39393de652596752cdf) @@ -50,26 +50,23 @@ if ( activity == null ) { strutsAction = PROGRESS_BROKEN_ACTION; } - else if ( activity.isComplexActivity() ) - { - if ( activity.isParallelActivity() ) - strutsAction = "/DisplayParallelActivity.do"; - else if (activity.isOptionsActivity()) - strutsAction = "/DisplayOptionsActivity.do"; - else if (activity.isBranchingActivity()){ - strutsAction = "/Branching.do?method=performBranching"; - } else if ( activity.isSequenceActivity() ) { - strutsAction = "/SequenceActivity.do"; - } else { - // unexpected type - log.error("Unexpected complex activity type "+activity); - strutsAction = PROGRESS_BROKEN_ACTION; - } - } - else // should be a simple activity - can handle tool, gates and grouping - { + else if ( activity.isSystemToolActivity() || activity.isToolActivity() ) { strutsAction = "/LoadToolActivity.do"; } + else if ( activity.isParallelActivity() ) { + strutsAction = "/DisplayParallelActivity.do"; + } + else if (activity.isOptionsActivity()) { + strutsAction = "/DisplayOptionsActivity.do"; + } + else if ( activity.isSequenceActivity() ) { + strutsAction = "/SequenceActivity.do"; + } + else { + // unexpected type + log.error("Unexpected activity type "+activity); + strutsAction = PROGRESS_BROKEN_ACTION; + } return strutsAction; } Index: lams_learning/web/WEB-INF/struts/struts-config.xml =================================================================== diff -u -r5863520d75343b47f77b05ad3bd7045a9a39af49 -rccf0c98665da622cc43ff39393de652596752cdf --- lams_learning/web/WEB-INF/struts/struts-config.xml (.../struts-config.xml) (revision 5863520d75343b47f77b05ad3bd7045a9a39af49) +++ lams_learning/web/WEB-INF/struts/struts-config.xml (.../struts-config.xml) (revision ccf0c98665da622cc43ff39393de652596752cdf) @@ -210,7 +210,7 @@ /> <%@ taglib uri="tags-lams" prefix="lams" %> - /Branching.do?type=${BranchingForm.map.type}&activityID=${BranchingForm.map.activityID}&progressID=${BranchingForm.map.progressID} + /branching.do?method=performBranching&type=${BranchingForm.map.type}&activityID=${BranchingForm.map.activityID}&progressID=${BranchingForm.map.progressID} Index: lams_learning/web/layout/branchingWaitLayout.jsp =================================================================== diff -u -r5863520d75343b47f77b05ad3bd7045a9a39af49 -rccf0c98665da622cc43ff39393de652596752cdf --- lams_learning/web/layout/branchingWaitLayout.jsp (.../branchingWaitLayout.jsp) (revision 5863520d75343b47f77b05ad3bd7045a9a39af49) +++ lams_learning/web/layout/branchingWaitLayout.jsp (.../branchingWaitLayout.jsp) (revision ccf0c98665da622cc43ff39393de652596752cdf) @@ -33,7 +33,7 @@ <fmt:message key="${label.branching.title}"/> - /Branching.do?method=performBranching&type=${BranchingForm.map.type}&activityID=${BranchingForm.map.activityID}&progressID=${BranchingForm.map.progressID} + /branching.do?method=performBranching&type=${BranchingForm.map.type}&activityID=${BranchingForm.map.activityID}&progressID=${BranchingForm.map.progressID} &force=true Index: lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/web/BranchingExportPortfolioServlet.java =================================================================== diff -u --- lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/web/BranchingExportPortfolioServlet.java (revision 0) +++ lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/web/BranchingExportPortfolioServlet.java (revision ccf0c98665da622cc43ff39393de652596752cdf) @@ -0,0 +1,69 @@ +/**************************************************************** + * Copyright (C) 2005 LAMS Foundation (http://lamsfoundation.org) + * ============================================================= + * License Information: http://lamsfoundation.org/licensing/lams/2.0/ + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2.0 + * as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 + * USA + * + * http://www.gnu.org/licenses/gpl.txt + * **************************************************************** + */ + +/* $Id$ */ + +package org.lamsfoundation.lams.monitoring.web; + +import javax.servlet.http.Cookie; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import org.lamsfoundation.lams.util.WebUtil; +import org.lamsfoundation.lams.web.servlet.AbstractExportPortfolioServlet; +import org.lamsfoundation.lams.web.util.AttributeNames; + + +/** + * Export portfolio page for the branching. Only the teacher gets portfolio pages for gates - learners + * do not see a page in their portfolio. Uses the normal branching "view" page, which lists which + * learner is in which branch. + * + * @web:servlet name="branchingExportPortfolio" + * @web:servlet-mapping url-pattern="/branchingExportPortfolio" + * + */ +public class BranchingExportPortfolioServlet extends AbstractExportPortfolioServlet { + + //private static final long serialVersionUID = -5262996309778140432L; + + //--------------------------------------------------------------------- + // Class level constants - Session Attributes + //--------------------------------------------------------------------- + private final String FILENAME = "branching.html"; + + public String doExport(HttpServletRequest request, HttpServletResponse response, String directoryName, Cookie[] cookies) + { + Long lessonId = WebUtil.readLongParam(request,AttributeNames.PARAM_LESSON_ID); + Long gateId = WebUtil.readLongParam(request, AttributeNames.PARAM_ACTIVITY_ID); + + String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+request.getContextPath(); + writeResponseToFile( + basePath+"/branching.do?method=exportPortfolio&lessonID="+lessonId+"&activityID="+gateId, + directoryName,FILENAME,cookies); + return FILENAME; + } + + + +} Index: lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/web/ChosenBranchingAJAXAction.java =================================================================== diff -u -rae679fd2cd995020670af485a110f19e84b117e9 -rccf0c98665da622cc43ff39393de652596752cdf --- lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/web/ChosenBranchingAJAXAction.java (.../ChosenBranchingAJAXAction.java) (revision ae679fd2cd995020670af485a110f19e84b117e9) +++ lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/web/ChosenBranchingAJAXAction.java (.../ChosenBranchingAJAXAction.java) (revision ccf0c98665da622cc43ff39393de652596752cdf) @@ -39,20 +39,13 @@ import org.apache.struts.action.ActionForm; import org.apache.struts.action.ActionForward; import org.apache.struts.action.ActionMapping; -import org.lamsfoundation.lams.learning.web.util.LearningWebUtil; import org.lamsfoundation.lams.learningdesign.Activity; import org.lamsfoundation.lams.learningdesign.ActivityTitleComparator; import org.lamsfoundation.lams.learningdesign.BranchingActivity; -import org.lamsfoundation.lams.learningdesign.ChosenBranchingActivity; -import org.lamsfoundation.lams.learningdesign.ChosenGrouping; import org.lamsfoundation.lams.learningdesign.Group; import org.lamsfoundation.lams.learningdesign.GroupBranchActivityEntry; -import org.lamsfoundation.lams.learningdesign.GroupComparator; -import org.lamsfoundation.lams.learningdesign.Grouping; -import org.lamsfoundation.lams.learningdesign.GroupingActivity; import org.lamsfoundation.lams.learningdesign.SequenceActivity; import org.lamsfoundation.lams.lesson.service.LessonServiceException; -import org.lamsfoundation.lams.monitoring.BranchDTO; import org.lamsfoundation.lams.monitoring.BranchingDTO; import org.lamsfoundation.lams.monitoring.service.IMonitoringService; import org.lamsfoundation.lams.monitoring.service.MonitoringServiceException; @@ -70,6 +63,7 @@ *

* * @author Fiona Malikoff @@ -96,14 +90,9 @@ public static final String PARAM_MAY_DELETE = "mayDelete"; public static final String PARAM_MEMBERS = "members"; public static final String PARAM_SHOW_GROUP_NAME = "showGroupName"; + /** If localFiles = true will be written to a local file for export portfolio */ + public static final String PARAM_LOCAL_FILES= "localFiles"; - private Integer getUserId(HttpServletRequest request) { - HttpSession ss = SessionManager.getSession(); - UserDTO user = (UserDTO) ss.getAttribute(AttributeNames.USER); - return user != null ? user.getUserID() : null; - } - - private void writeAJAXResponse(HttpServletResponse response, String output) throws IOException { response.setContentType("text/html"); PrintWriter writer = response.getWriter(); @@ -137,14 +126,15 @@ throw new MonitoringServiceException(error); } - // in general the progress engine expects the activity and lesson id to be in the request, - // so follow that standard. - request.setAttribute(AttributeNames.PARAM_ACTIVITY_ID, activityID); - request.setAttribute(AttributeNames.PARAM_LESSON_ID, lessonId); - request.setAttribute(AttributeNames.PARAM_TITLE, activity.getTitle()); if ( activity.isChosenBranchingActivity() ) { + // in general the progress engine expects the activity and lesson id to be in the request, + // so follow that standard. + request.setAttribute(AttributeNames.PARAM_ACTIVITY_ID, activityID); + request.setAttribute(AttributeNames.PARAM_LESSON_ID, lessonId); + request.setAttribute(AttributeNames.PARAM_TITLE, activity.getTitle()); + // can we still move users? check each group for tool sessions. Iterator iter = ((BranchingActivity)activity).getActivities().iterator(); boolean mayMoveUser = true; @@ -161,20 +151,62 @@ } else { // go to a view only screen for group based and tool based grouping - // only show the group names if this is a group based branching activity - the names - // are meaningless for tool based branching - BranchingDTO dto = new BranchingDTO((BranchingActivity) activity); - request.setAttribute(PARAM_BRANCHING_DTO, dto); - request.setAttribute(PARAM_SHOW_GROUP_NAME, activity.isGroupBranchingActivity()); - if ( log.isDebugEnabled() ) { - log.debug("assignBranch: Branching activity "+dto); - } - return mapping.findForward(VIEW_BRANCHES_SCREEN); + return viewBranching((BranchingActivity) activity, lessonId, false, mapping, request); } } + /** + * Export Portfolio Page + */ + public ActionForward exportPortfolio(ActionMapping mapping, + ActionForm form, + HttpServletRequest request, + HttpServletResponse response) throws IOException, + ServletException + { + long lessonId = WebUtil.readLongParam(request,AttributeNames.PARAM_LESSON_ID); + long activityId = WebUtil.readLongParam(request, AttributeNames.PARAM_ACTIVITY_ID); + + IMonitoringService monitoringService = MonitoringServiceProxy.getMonitoringService(getServlet().getServletContext()); + Activity activity = monitoringService.getActivityById(activityId); + if ( activity == null || !activity.isBranchingActivity() ) { + String error = "Activity is not a branching activity. Activity was "+activity; + log.error(error); + throw new MonitoringServiceException(error); + } + + return viewBranching((BranchingActivity) activity, lessonId, true, mapping, request); + } + + /** + * Display the view screen, irrespective of the branching type. + * + * Input parameters: activityID + */ + private ActionForward viewBranching(BranchingActivity activity, Long lessonId, boolean useLocalFiles, + ActionMapping mapping, HttpServletRequest request) throws IOException, ServletException { + + // in general the progress engine expects the activity and lesson id to be in the request, + // so follow that standard. + request.setAttribute(AttributeNames.PARAM_ACTIVITY_ID, activity.getActivityId()); + request.setAttribute(AttributeNames.PARAM_LESSON_ID, lessonId); + request.setAttribute(AttributeNames.PARAM_TITLE, activity.getTitle()); + request.setAttribute(PARAM_LOCAL_FILES, useLocalFiles); + + // only show the group names if this is a group based branching activity - the names + // are meaningless for chosen and tool based branching + BranchingDTO dto = new BranchingDTO((BranchingActivity) activity); + request.setAttribute(PARAM_BRANCHING_DTO, dto); + request.setAttribute(PARAM_SHOW_GROUP_NAME, activity.isGroupBranchingActivity()); + if ( log.isDebugEnabled() ) { + log.debug("viewBranching: Branching activity "+dto); + } + return mapping.findForward(VIEW_BRANCHES_SCREEN); + } + + /** * Get a list of branch names, their associated group id and the number of users in the group. Designed to respond to an AJAX call. * * Input parameters: activityID (which is the branching activity id) @@ -351,4 +383,4 @@ return null; } -} + } Index: lams_monitoring/web/WEB-INF/web.xml =================================================================== diff -u -r0bfbd454a2a5cdf2886e453cecb081379f32f670 -rccf0c98665da622cc43ff39393de652596752cdf --- lams_monitoring/web/WEB-INF/web.xml (.../web.xml) (revision 0bfbd454a2a5cdf2886e453cecb081379f32f670) +++ lams_monitoring/web/WEB-INF/web.xml (.../web.xml) (revision ccf0c98665da622cc43ff39393de652596752cdf) @@ -83,6 +83,11 @@ + branchingExportPortfolio + org.lamsfoundation.lams.monitoring.web.BranchingExportPortfolioServlet + + + gateExportPortfolio org.lamsfoundation.lams.monitoring.web.GateExportPortfolioServlet @@ -128,6 +133,10 @@ /createLessonClass + branchingExportPortfolio + /branchingExportPortfolio + + gateExportPortfolio /gateExportPortfolio Index: lams_monitoring/web/branching/viewBranches.jsp =================================================================== diff -u -rae679fd2cd995020670af485a110f19e84b117e9 -rccf0c98665da622cc43ff39393de652596752cdf --- lams_monitoring/web/branching/viewBranches.jsp (.../viewBranches.jsp) (revision ae679fd2cd995020670af485a110f19e84b117e9) +++ lams_monitoring/web/branching/viewBranches.jsp (.../viewBranches.jsp) (revision ccf0c98665da622cc43ff39393de652596752cdf) @@ -61,8 +61,9 @@ - <%@ include file="../template/finishbutton.jsp" %> - + + <%@ include file="../template/finishbutton.jsp" %> + Index: lams_monitoring/web/template/template.jsp =================================================================== diff -u -r64938df458cbab9999f9a826ef2902d061648d7d -rccf0c98665da622cc43ff39393de652596752cdf --- lams_monitoring/web/template/template.jsp (.../template.jsp) (revision 64938df458cbab9999f9a826ef2902d061648d7d) +++ lams_monitoring/web/template/template.jsp (.../template.jsp) (revision ccf0c98665da622cc43ff39393de652596752cdf) @@ -31,17 +31,19 @@ - <%-- if localFiles == true then wanted for export portfolio and must run offline --%> + <%-- if localFiles == true then wanted for export portfolio and must run offline. Gates put the value in the form, branching in the request --%> + + + - + -