Index: lams_central/.gitignore =================================================================== diff -u -r10afbb9a2d6f910c0f9131e82ebf2d3cb6ee359f -r7d7e4420720fa2caa466d0faa33f8a810c72af45 --- lams_central/.gitignore (.../.gitignore) (revision 10afbb9a2d6f910c0f9131e82ebf2d3cb6ee359f) +++ lams_central/.gitignore (.../.gitignore) (revision 7d7e4420720fa2caa466d0faa33f8a810c72af45) @@ -7,3 +7,4 @@ /web/css/orgGroup.css /web/css/orgGrouping.css /web/css/purple*.css +/web/css/outcome.css Index: lams_central/conf/language/lams/ApplicationResources.properties =================================================================== diff -u -rd8c249be8dea5cacef6ff99f85452c26ec2a5efb -r7d7e4420720fa2caa466d0faa33f8a810c72af45 --- lams_central/conf/language/lams/ApplicationResources.properties (.../ApplicationResources.properties) (revision d8c249be8dea5cacef6ff99f85452c26ec2a5efb) +++ lams_central/conf/language/lams/ApplicationResources.properties (.../ApplicationResources.properties) (revision 7d7e4420720fa2caa466d0faa33f8a810c72af45) @@ -844,9 +844,31 @@ authoring.error.application.exercise.not.blank.and.grade=Application Exercise {0} may not be blank and must have a grade. authoring.label.grade=Grade authoring.label.none=None -index.outcomes.manage =Outcomes -index.outcomes.manage.tooltip =Manage learning outcomes and scales - +index.outcome.manage =Outcomes +index.outcome.manage.tooltip =Manage learning outcomes and scales +outcome.manage.title =Course outcomes +outcome.manage.remove =Remove outcome +outcome.manage.remove.confirm =Are you sure you want to remove this outcome? +outcome.manage.add =Add outcome +outcome.manage.edit =Edit outcome +outcome.manage.view =View outcome +outcome.manage.add.name =Name +outcome.manage.add.code =Code +outcome.manage.add.description =Description +outcome.manage.add.global =Global +outcome.manage.add.scale =Scale +outcome.manage.add.scale.none =Choose a scale +outcome.manage.add.scale.button =Manage scales +outcome.manage.add.save =Save +outcome.manage.scope =Scope +outcome.manage.scope.global =global +outcome.manage.scope.course =course +outcome.manage.add.error =Error while saving an outcome +outcome.manage.add.error.name.blank =Name can not be blank +outcome.manage.add.error.code.blank =Code can not be blank +outcome.manage.add.error.scale.choose =You have to choose a scale +scale.manage.button =Manage scales + #=================== Specific to Team Based Learning (TBL) =========================# authoring.tbl.template.title=Team Based Learning authoring.tbl.template.description=Individual and Team Readiness Assessments followed by Application Exercises. Index: lams_central/src/java/org/lamsfoundation/lams/web/DisplayGroupAction.java =================================================================== diff -u -rd8c249be8dea5cacef6ff99f85452c26ec2a5efb -r7d7e4420720fa2caa466d0faa33f8a810c72af45 --- lams_central/src/java/org/lamsfoundation/lams/web/DisplayGroupAction.java (.../DisplayGroupAction.java) (revision d8c249be8dea5cacef6ff99f85452c26ec2a5efb) +++ lams_central/src/java/org/lamsfoundation/lams/web/DisplayGroupAction.java (.../DisplayGroupAction.java) (revision 7d7e4420720fa2caa466d0faa33f8a810c72af45) @@ -216,8 +216,9 @@ } if (roles.contains(Role.ROLE_AUTHOR) && orgBean.getType().equals(OrganisationType.COURSE_TYPE)) { - moreLinks.add(new IndexLinkBean("index.outcomes.manage", "javascript:showOutcomesDialog()", - "fa fa-fw fa-check-circle-o", "index.outcomes.manage.tooltip")); + moreLinks.add( + new IndexLinkBean("index.outcome.manage", "javascript:showOutcomeDialog(" + organisationId + ")", + "fa fa-fw fa-check-circle-o", "index.outcome.manage.tooltip")); } if (Configuration.getAsBoolean(ConfigurationKeys.ALLOW_KUMALIVE) && org.getEnableKumalive() Index: lams_central/src/java/org/lamsfoundation/lams/web/outcome/OutcomeAction.java =================================================================== diff -u --- lams_central/src/java/org/lamsfoundation/lams/web/outcome/OutcomeAction.java (revision 0) +++ lams_central/src/java/org/lamsfoundation/lams/web/outcome/OutcomeAction.java (revision 7d7e4420720fa2caa466d0faa33f8a810c72af45) @@ -0,0 +1,303 @@ +/**************************************************************** + * 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 + * **************************************************************** + */ + +package org.lamsfoundation.lams.web.outcome; + +import java.util.Date; +import java.util.List; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import javax.servlet.http.HttpSession; + +import org.apache.commons.lang.StringUtils; +import org.apache.log4j.Logger; +import org.apache.struts.action.ActionErrors; +import org.apache.struts.action.ActionForm; +import org.apache.struts.action.ActionForward; +import org.apache.struts.action.ActionMapping; +import org.apache.struts.action.ActionMessage; +import org.apache.struts.action.ActionMessages; +import org.apache.struts.actions.DispatchAction; +import org.lamsfoundation.lams.integration.service.IIntegrationService; +import org.lamsfoundation.lams.learning.service.ICoreLearnerService; +import org.lamsfoundation.lams.lesson.service.ILessonService; +import org.lamsfoundation.lams.outcome.Outcome; +import org.lamsfoundation.lams.outcome.OutcomeScale; +import org.lamsfoundation.lams.security.ISecurityService; +import org.lamsfoundation.lams.usermanagement.Organisation; +import org.lamsfoundation.lams.usermanagement.Role; +import org.lamsfoundation.lams.usermanagement.User; +import org.lamsfoundation.lams.usermanagement.dto.UserDTO; +import org.lamsfoundation.lams.usermanagement.service.IUserManagementService; +import org.lamsfoundation.lams.util.WebUtil; +import org.lamsfoundation.lams.web.session.SessionManager; +import org.lamsfoundation.lams.web.util.AttributeNames; +import org.springframework.web.context.WebApplicationContext; +import org.springframework.web.context.support.WebApplicationContextUtils; + +public class OutcomeAction extends DispatchAction { + + private static Logger log = Logger.getLogger(OutcomeAction.class); + + private static IUserManagementService userManagementService; + private static ICoreLearnerService learnerService; + private static ILessonService lessonService; + private static ISecurityService securityService; + private static IIntegrationService integrationService; + + @SuppressWarnings("unchecked") + public ActionForward outcomeManage(ActionMapping mapping, ActionForm form, HttpServletRequest request, + HttpServletResponse response) throws Exception { + Integer userId = getUserDTO().getUserID(); + Integer organisationId = WebUtil.readIntParam(request, AttributeNames.PARAM_ORGANISATION_ID, true); + + if (organisationId == null) { + // check if user is allowed to view and edit global outcomes + if (!getSecurityService().isSysadmin(userId, "manage global outcomes", false)) { + response.sendError(HttpServletResponse.SC_FORBIDDEN, "User is not a sysadmin"); + return null; + } + } else { + // check if user is allowed to view and edit course outcomes + if (!getSecurityService().hasOrgRole(organisationId, userId, new String[] { Role.AUTHOR }, + "manage course outcomes", false)) { + response.sendError(HttpServletResponse.SC_FORBIDDEN, "User is not an author in the organisation"); + return null; + } + } + List outcomes = getUserManagementService().findAll(Outcome.class); + request.setAttribute("outcomes", outcomes); + + request.setAttribute("canManageGlobal", getUserManagementService().isUserSysAdmin()); + return mapping.findForward("outcomeManage"); + } + + @SuppressWarnings("unchecked") + public ActionForward outcomeEdit(ActionMapping mapping, ActionForm form, HttpServletRequest request, + HttpServletResponse response) throws Exception { + Integer userId = getUserDTO().getUserID(); + Long outcomeId = WebUtil.readLongParam(request, "outcomeId", true); + Outcome outcome = null; + Integer organisationId = null; + if (outcomeId != null) { + outcome = (Outcome) getUserManagementService().findById(Outcome.class, outcomeId); + if (outcome != null && outcome.getOrganisation() != null) { + // get organisation ID from the outcome - the safest way + organisationId = outcome.getOrganisation().getOrganisationId(); + } + } + if (organisationId == null) { + organisationId = WebUtil.readIntParam(request, AttributeNames.PARAM_ORGANISATION_ID, true); + } + + if (organisationId == null) { + if (!getSecurityService().isSysadmin(userId, "add/edit global outcome", false)) { + response.sendError(HttpServletResponse.SC_FORBIDDEN, "User is not a sysadmin"); + return null; + } + } else { + if (!getSecurityService().hasOrgRole(organisationId, userId, new String[] { Role.AUTHOR }, + "add/edit course outcome", false)) { + response.sendError(HttpServletResponse.SC_FORBIDDEN, "User is not an author in the organisation"); + return null; + } + } + OutcomeForm outcomeForm = (OutcomeForm) form; + outcomeForm.setOrganisationId(outcome == null ? organisationId + : (outcome.getOrganisation() == null ? null : outcome.getOrganisation().getOrganisationId())); + if (outcome != null) { + outcomeForm.setOutcomeId(outcome.getOutcomeId()); + + outcomeForm.setName(outcome.getName()); + outcomeForm.setCode(outcome.getCode()); + outcomeForm.setDescription(outcome.getDescription()); + outcomeForm.setScaleId(outcome.getScale().getScaleId()); + } + + List scales = getUserManagementService().findAll(OutcomeScale.class); + request.setAttribute("scales", scales); + + request.setAttribute("canManageGlobal", getUserManagementService().isUserSysAdmin()); + return mapping.findForward("outcomeEdit"); + } + + @SuppressWarnings("unchecked") + public ActionForward outcomeSave(ActionMapping mapping, ActionForm form, HttpServletRequest request, + HttpServletResponse response) throws Exception { + OutcomeForm outcomeForm = (OutcomeForm) form; + Integer userId = getUserDTO().getUserID(); + Long outcomeId = WebUtil.readLongParam(request, "outcomeId", true); + Outcome outcome = null; + Integer organisationId = null; + if (outcomeId != null) { + outcome = (Outcome) getUserManagementService().findById(Outcome.class, outcomeId); + if (outcome != null) { + // get organisation ID from the outcome - the safest way + organisationId = outcome.getOrganisation().getOrganisationId(); + } + } + if (organisationId == null) { + organisationId = outcomeForm.getOrganisationId(); + } + + if (organisationId == null) { + if (!getSecurityService().isSysadmin(userId, "persist global outcome", false)) { + response.sendError(HttpServletResponse.SC_FORBIDDEN, "User is not a sysadmin"); + return null; + } + } else { + if (!getSecurityService().hasOrgRole(organisationId, userId, new String[] { Role.AUTHOR }, + "persist course outcome", false)) { + response.sendError(HttpServletResponse.SC_FORBIDDEN, "User is not an author in the organisation"); + return null; + } + } + + ActionErrors errors = validateOutcomeForm(outcomeForm); + if (!errors.isEmpty()) { + this.addErrors(request, errors); + } else { + try { + Organisation organisation = (Organisation) (organisationId == null ? null + : getUserManagementService().findById(Organisation.class, organisationId)); + if (outcome == null) { + outcome = new Outcome(); + outcome.setOrganisation(organisation); + User user = (User) getUserManagementService().findById(User.class, userId); + outcome.setCreateBy(user); + outcome.setCreateDateTime(new Date()); + } + + outcome.setName(outcomeForm.getName()); + outcome.setCode(outcomeForm.getCode()); + outcome.setDescription(outcomeForm.getDescription()); + outcomeForm.setOrganisationId(organisationId); + if (outcomeForm.getScaleId() != null) { + OutcomeScale scale = (OutcomeScale) getUserManagementService().findById(OutcomeScale.class, + outcomeForm.getScaleId()); + outcome.setScale(scale); + } + getUserManagementService().save(outcome); + request.setAttribute("saved", true); + } catch (Exception e) { + log.error("Exception while saving an outcome", e); + errors.add(ActionMessages.GLOBAL_MESSAGE, new ActionMessage("outcome.manage.add.error")); + this.addErrors(request, errors); + } + } + + List scales = getUserManagementService().findAll(OutcomeScale.class); + request.setAttribute("scales", scales); + return mapping.findForward("outcomeEdit"); + } + + public ActionForward outcomeRemove(ActionMapping mapping, ActionForm form, HttpServletRequest request, + HttpServletResponse response) throws Exception { + Long outcomeId = WebUtil.readLongParam(request, "outcomeId", false); + Outcome outcome = (Outcome) getUserManagementService().findById(Outcome.class, outcomeId); + if (outcome == null) { + throw new IllegalArgumentException("Can not find an outcome with ID " + outcomeId); + } + Integer organisationId = outcome.getOrganisation().getOrganisationId(); + Integer userId = getUserDTO().getUserID(); + + if (organisationId == null) { + if (!getSecurityService().isSysadmin(userId, "remove global outcome", false)) { + response.sendError(HttpServletResponse.SC_FORBIDDEN, "User is not a sysadmin"); + return null; + } + } else { + if (!getSecurityService().hasOrgRole(organisationId, userId, new String[] { Role.AUTHOR }, + "remove course outcome", false)) { + response.sendError(HttpServletResponse.SC_FORBIDDEN, "User is not an author in the organisation"); + return null; + } + } + getUserManagementService().delete(outcome); + return outcomeManage(mapping, form, request, response); + } + + private UserDTO getUserDTO() { + HttpSession ss = SessionManager.getSession(); + return (UserDTO) ss.getAttribute(AttributeNames.USER); + } + + private ActionErrors validateOutcomeForm(OutcomeForm outcomeForm) { + ActionErrors errors = new ActionErrors(); + if (StringUtils.isBlank(outcomeForm.getName())) { + errors.add(ActionMessages.GLOBAL_MESSAGE, new ActionMessage("outcome.manage.add.error.name.blank")); + } + if (StringUtils.isBlank(outcomeForm.getCode())) { + errors.add(ActionMessages.GLOBAL_MESSAGE, new ActionMessage("outcome.manage.add.error.code.blank")); + } + if (outcomeForm.getScaleId() == null || outcomeForm.getScaleId() == 0) { + errors.add(ActionMessages.GLOBAL_MESSAGE, new ActionMessage("outcome.manage.add.error.scale.choose")); + } + return errors; + } + + private IUserManagementService getUserManagementService() { + if (OutcomeAction.userManagementService == null) { + WebApplicationContext ctx = WebApplicationContextUtils + .getRequiredWebApplicationContext(getServlet().getServletContext()); + OutcomeAction.userManagementService = (IUserManagementService) ctx.getBean("userManagementService"); + } + return OutcomeAction.userManagementService; + } + + private ICoreLearnerService getLearnerService() { + if (OutcomeAction.learnerService == null) { + WebApplicationContext ctx = WebApplicationContextUtils + .getRequiredWebApplicationContext(getServlet().getServletContext()); + OutcomeAction.learnerService = (ICoreLearnerService) ctx.getBean("learnerService"); + } + return OutcomeAction.learnerService; + } + + private ILessonService getLessonService() { + if (OutcomeAction.lessonService == null) { + WebApplicationContext ctx = WebApplicationContextUtils + .getRequiredWebApplicationContext(getServlet().getServletContext()); + OutcomeAction.lessonService = (ILessonService) ctx.getBean("lessonService"); + } + return OutcomeAction.lessonService; + } + + private ISecurityService getSecurityService() { + if (OutcomeAction.securityService == null) { + WebApplicationContext ctx = WebApplicationContextUtils + .getRequiredWebApplicationContext(getServlet().getServletContext()); + OutcomeAction.securityService = (ISecurityService) ctx.getBean("securityService"); + } + return OutcomeAction.securityService; + } + + private IIntegrationService getIntegrationService() { + if (OutcomeAction.integrationService == null) { + WebApplicationContext ctx = WebApplicationContextUtils + .getRequiredWebApplicationContext(getServlet().getServletContext()); + OutcomeAction.integrationService = (IIntegrationService) ctx.getBean("integrationService"); + } + return OutcomeAction.integrationService; + } +} \ No newline at end of file Index: lams_central/src/java/org/lamsfoundation/lams/web/outcome/OutcomeForm.java =================================================================== diff -u --- lams_central/src/java/org/lamsfoundation/lams/web/outcome/OutcomeForm.java (revision 0) +++ lams_central/src/java/org/lamsfoundation/lams/web/outcome/OutcomeForm.java (revision 7d7e4420720fa2caa466d0faa33f8a810c72af45) @@ -0,0 +1,84 @@ +/**************************************************************** + * 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 + * **************************************************************** + */ + +package org.lamsfoundation.lams.web.outcome; + +import org.apache.struts.action.ActionForm; + +public class OutcomeForm extends ActionForm { + private static final long serialVersionUID = -3707697605837331410L; + + private Long outcomeId; + private Integer organisationId; + private Long scaleId; + private String name; + private String code; + private String description; + + public Long getOutcomeId() { + return outcomeId; + } + + public void setOutcomeId(Long outcomeId) { + this.outcomeId = outcomeId; + } + + public Integer getOrganisationId() { + return organisationId; + } + + public void setOrganisationId(Integer organisationId) { + this.organisationId = organisationId; + } + + public Long getScaleId() { + return scaleId; + } + + public void setScaleId(Long scaleId) { + this.scaleId = scaleId; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public String getDescription() { + return description; + } + + public void setDescription(String description) { + this.description = description; + } +} \ No newline at end of file Index: lams_central/web/WEB-INF/struts-config.xml =================================================================== diff -u -r7acb20e485013e119c7dfd90854f123c09f147cb -r7d7e4420720fa2caa466d0faa33f8a810c72af45 --- lams_central/web/WEB-INF/struts-config.xml (.../struts-config.xml) (revision 7acb20e485013e119c7dfd90854f123c09f147cb) +++ lams_central/web/WEB-INF/struts-config.xml (.../struts-config.xml) (revision 7d7e4420720fa2caa466d0faa33f8a810c72af45) @@ -34,14 +34,18 @@ type="org.lamsfoundation.lams.monitoring.web.FileUploadForm" /> - - + name="PedagogicalPlannerGroupingForm" + type="org.lamsfoundation.lams.web.planner.PedagogicalPlannerGroupingForm" + /> + + + @@ -866,9 +870,20 @@ > + + + + + - Index: lams_central/web/css/outcome.scss =================================================================== diff -u --- lams_central/web/css/outcome.scss (revision 0) +++ lams_central/web/css/outcome.scss (revision 7d7e4420720fa2caa466d0faa33f8a810c72af45) @@ -0,0 +1,32 @@ +@import "_lams_variables.scss"; + +div#titleDiv { + font-size: small; + font-weight: bold; + padding: 5px 0; + text-align: center; + border-bottom: $border-thin-dotted; +} + +.manageOutcomeButton { + cursor: pointer; + width: 16px; + height: 16px; +} + +#addOutcomeButton { + float: right; + margin: 20px 10px 10px 0; +} + +.outcomeContainer { + font-size: 1.3em; +} + +.outcomeContainer .row { + padding-top: 10px; +} + +.outcomeContainer .row:first-child { + border-bottom: $border-thin-solid; +} \ No newline at end of file Index: lams_central/web/includes/javascript/main.js =================================================================== diff -u -rd9e422c64e6e7f3b311e250aa896cb7e09e92098 -r7d7e4420720fa2caa466d0faa33f8a810c72af45 --- lams_central/web/includes/javascript/main.js (.../main.js) (revision d9e422c64e6e7f3b311e250aa896cb7e09e92098) +++ lams_central/web/includes/javascript/main.js (.../main.js) (revision 7d7e4420720fa2caa466d0faa33f8a810c72af45) @@ -569,7 +569,23 @@ }, false); } +function showOutcomeDialog(organisationID) { + showDialog("dialogOutcome", { + 'height': Math.max(380, Math.min(700, $(window).height() - 30)), + 'width' : Math.max(380, Math.min(850, $(window).width() - 60)), + 'title' : organisationID ? LABELS.OUTCOME_COURSE_MANAGE_TITLE : LABELS.OUTCOME_MANAGE_TITLE, + 'open' : function() { + var dialog = $(this); + // load contents after opening the dialog + $('iframe', dialog) + .attr('src', LAMS_URL + + 'outcome.do?method=outcomeManage&organisationID=' + + organisationID); + } + }); +} + function closeAddSingleActivityLessonDialog(action) { var id = 'dialogAddSingleActivityLesson', dialog = $('#' + id), Index: lams_central/web/includes/javascript/outcome.js =================================================================== diff -u --- lams_central/web/includes/javascript/outcome.js (revision 0) +++ lams_central/web/includes/javascript/outcome.js (revision 7d7e4420720fa2caa466d0faa33f8a810c72af45) @@ -0,0 +1,23 @@ +function removeOutcome(outcomeId) { + if (confirm(LABELS.REMOVE_OUTCOME_CONFIRM_LABEL)) { + document.location.href = "outcome.do?method=outcomeRemove&outcomeId=" + outcomeId + + '&organisationID=' + organisationId; + } +} + +function openEditOutcomeDialog(outcomeId) { + window.parent.showDialog("dialogOutcomeEdit", { + 'height': Math.max(380, Math.min(700, $(window).height() - 30)), + 'width' : Math.max(380, Math.min(850, $(window).width() - 60)), + 'title' : outcomeId ? LABELS.EDIT_OUTCOME_TITLE : LABELS.ADD_OUTCOME_TITLE, + 'open' : function() { + var dialog = $(this); + // load contents after opening the dialog + $('iframe', dialog) + .attr('src', LAMS_URL + + 'outcome.do?method=outcomeEdit&organisationID=' + + organisationId + + (outcomeId ? "&outcomeId=" + outcomeId : "")); + } + }); +} \ No newline at end of file Index: lams_central/web/main.jsp =================================================================== diff -u -r7acb20e485013e119c7dfd90854f123c09f147cb -r7d7e4420720fa2caa466d0faa33f8a810c72af45 --- lams_central/web/main.jsp (.../main.jsp) (revision 7acb20e485013e119c7dfd90854f123c09f147cb) +++ lams_central/web/main.jsp (.../main.jsp) (revision 7d7e4420720fa2caa466d0faa33f8a810c72af45) @@ -94,6 +94,10 @@ MARK_ORG_FAVORITE : '', KUMALIVE_TITLE : '', + + OUTCOME_MANAGE_TITLE : '', + + OUTCOME_COURSE_MANAGE_TITLE : '' }, activeOrgId = null${activeOrgId}; Index: lams_central/web/outcome/outcomeEdit.jsp =================================================================== diff -u --- lams_central/web/outcome/outcomeEdit.jsp (revision 0) +++ lams_central/web/outcome/outcomeEdit.jsp (revision 7d7e4420720fa2caa466d0faa33f8a810c72af45) @@ -0,0 +1,128 @@ +<%@ page contentType="text/html; charset=utf-8" language="java"%> +<%@ taglib uri="tags-lams" prefix="lams"%> +<%@ taglib uri="tags-fmt" prefix="fmt"%> +<%@ taglib uri="tags-core" prefix="c"%> +<%@ taglib uri="tags-html" prefix="html"%> +<%@ taglib uri="tags-logic" prefix="logic" %> +<%@ taglib uri="tags-function" prefix="fn" %> + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+
+ <%-- Error Messages --%> + + + +
+
+
+
+ +
+ +
+
+ +
+
+ : + + + + + + + + +
+
+ +
+
+ : + + +
+ +
+ + + +
+
+
+
+
+
+
+ + + + +
+ +
\ No newline at end of file Index: lams_central/web/outcome/outcomeManage.jsp =================================================================== diff -u --- lams_central/web/outcome/outcomeManage.jsp (revision 0) +++ lams_central/web/outcome/outcomeManage.jsp (revision 7d7e4420720fa2caa466d0faa33f8a810c72af45) @@ -0,0 +1,97 @@ +<%@ page contentType="text/html; charset=utf-8" language="java"%> +<%@ taglib uri="tags-lams" prefix="lams"%> +<%@ taglib uri="tags-fmt" prefix="fmt"%> +<%@ taglib uri="tags-core" prefix="c"%> + + + + + + + + + + + + + + + + +
+
+
+ +
+
+ +
+
+ +
+
+
+
+
+
+ +
+
+ +
+
+ +
+
+ + + + + + + + +
+
+ + + + + + + + + + +
+
+ + +
+
+
+
+ +
+ + +
+ + +
\ No newline at end of file Index: lams_common/src/java/org/lamsfoundation/lams/outcome/dao/IOutcomeDAO.java =================================================================== diff -u --- lams_common/src/java/org/lamsfoundation/lams/outcome/dao/IOutcomeDAO.java (revision 0) +++ lams_common/src/java/org/lamsfoundation/lams/outcome/dao/IOutcomeDAO.java (revision 7d7e4420720fa2caa466d0faa33f8a810c72af45) @@ -0,0 +1,29 @@ +/**************************************************************** + * 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 + * **************************************************************** + */ + +package org.lamsfoundation.lams.outcome.dao; + +import org.lamsfoundation.lams.dao.IBaseDAO; + +public interface IOutcomeDAO extends IBaseDAO { + +} \ No newline at end of file Index: lams_common/src/java/org/lamsfoundation/lams/outcome/dao/hibernate/OutcomeDAO.java =================================================================== diff -u --- lams_common/src/java/org/lamsfoundation/lams/outcome/dao/hibernate/OutcomeDAO.java (revision 0) +++ lams_common/src/java/org/lamsfoundation/lams/outcome/dao/hibernate/OutcomeDAO.java (revision 7d7e4420720fa2caa466d0faa33f8a810c72af45) @@ -0,0 +1,31 @@ +/**************************************************************** + * 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 + * **************************************************************** + */ + +package org.lamsfoundation.lams.outcome.dao.hibernate; + +import org.lamsfoundation.lams.dao.hibernate.LAMSBaseDAO; +import org.lamsfoundation.lams.outcome.dao.IOutcomeDAO; +import org.springframework.stereotype.Repository; + +@Repository +public class OutcomeDAO extends LAMSBaseDAO implements IOutcomeDAO { +}