Index: lams_admin/conf/xdoclet/struts-forms.xml
===================================================================
diff -u -rcb6d628cd53fe3d51e4f67cbaff7390651a048da -r2b88dada3266a4b0f83f4b5c4cf617553496ca59
--- lams_admin/conf/xdoclet/struts-forms.xml (.../struts-forms.xml) (revision cb6d628cd53fe3d51e4f67cbaff7390651a048da)
+++ lams_admin/conf/xdoclet/struts-forms.xml (.../struts-forms.xml) (revision 2b88dada3266a4b0f83f4b5c4cf617553496ca59)
@@ -106,4 +106,18 @@
\ No newline at end of file
+ />
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
Index: lams_admin/src/java/org/lamsfoundation/lams/admin/web/action/SignupManagementAction.java
===================================================================
diff -u
--- lams_admin/src/java/org/lamsfoundation/lams/admin/web/action/SignupManagementAction.java (revision 0)
+++ lams_admin/src/java/org/lamsfoundation/lams/admin/web/action/SignupManagementAction.java (revision 2b88dada3266a4b0f83f4b5c4cf617553496ca59)
@@ -0,0 +1,175 @@
+package org.lamsfoundation.lams.admin.web.action;
+
+import java.util.Date;
+import java.util.List;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.apache.commons.lang.StringUtils;
+import org.apache.log4j.Logger;
+import org.apache.struts.action.Action;
+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.action.DynaActionForm;
+import org.lamsfoundation.lams.signup.model.SignupOrganisation;
+import org.lamsfoundation.lams.signup.service.ISignupService;
+import org.lamsfoundation.lams.usermanagement.Organisation;
+import org.lamsfoundation.lams.usermanagement.service.IUserManagementService;
+import org.lamsfoundation.lams.util.WebUtil;
+import org.springframework.web.context.WebApplicationContext;
+import org.springframework.web.context.support.WebApplicationContextUtils;
+
+/**
+ * @struts:action path="/signupManagement" name="SignupManagementForm" scope="request" validate="false"
+ * parameter="method"
+ *
+ * @struts:action-forward name="signupPageList" path=".signupPageList"
+ * @struts:action-forward name="addSignupPage" path=".addSignupPage"
+ * @struts:action-forward name="signupPageListMethod" path="/signupManagement.do?method=list"
+ */
+public class SignupManagementAction extends Action {
+
+ private static Logger log = Logger.getLogger(SignupManagementAction.class);
+ private static ISignupService signupService = null;
+ private static IUserManagementService userManagementService = null;
+
+ public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request,
+ HttpServletResponse response) {
+
+ try {
+ if (signupService == null) {
+ WebApplicationContext wac = WebApplicationContextUtils.getRequiredWebApplicationContext(getServlet()
+ .getServletContext());
+ signupService = (ISignupService) wac.getBean("signupService");
+ }
+ if (userManagementService == null) {
+ WebApplicationContext wac = WebApplicationContextUtils.getRequiredWebApplicationContext(getServlet()
+ .getServletContext());
+ userManagementService = (IUserManagementService) wac.getBean("userManagementService");
+ }
+
+ String method = WebUtil.readStrParam(request, "method", true);
+
+ if (StringUtils.equals(method, "edit")) {
+ return edit(mapping, form, request, response);
+ } else if (StringUtils.equals(method, "add")) {
+ return add(mapping, form, request, response);
+ } else if (StringUtils.equals(method, "delete")) {
+ return delete(mapping, form, request, response);
+ } else if (StringUtils.equals(method, "list")) {
+ // do nothing
+ }
+
+ List signupOrganisations = signupService.getSignupOrganisations();
+ request.setAttribute("signupOrganisations", signupOrganisations);
+ } catch (Exception e) {
+ log.error(e.getMessage(), e);
+ request.setAttribute("error", e.getMessage());
+ }
+
+ return mapping.findForward("signupPageList");
+ }
+
+ public ActionForward edit(ActionMapping mapping, ActionForm form, HttpServletRequest request,
+ HttpServletResponse response) throws Exception {
+
+ Integer soid = WebUtil.readIntParam(request, "soid", false);
+
+ if (soid != null && soid > 0) {
+ SignupOrganisation signup = (SignupOrganisation) userManagementService.findById(SignupOrganisation.class,
+ soid);
+ if (signup != null) {
+ DynaActionForm signupForm = (DynaActionForm) form;
+ signupForm.set("signupOrganisationId", signup.getSignupOrganisationId());
+ signupForm.set("organisationId", signup.getOrganisation().getOrganisationId());
+ signupForm.set("addToLessons", signup.getAddToLessons());
+ signupForm.set("addAsStaff", signup.getAddAsStaff());
+ signupForm.set("addWithAuthor", signup.getAddWithAuthor());
+ signupForm.set("addWithMonitor", signup.getAddWithMonitor());
+ signupForm.set("courseKey", signup.getCourseKey());
+ signupForm.set("blurb", signup.getBlurb());
+ signupForm.set("disabled", signup.getDisabled());
+ signupForm.set("context", signup.getContext());
+
+ List organisations = signupService.getOrganisationCandidates();
+ request.setAttribute("organisations", organisations);
+
+ return mapping.findForward("addSignupPage");
+ }
+ }
+ return null;
+ }
+
+ public ActionForward add(ActionMapping mapping, ActionForm form, HttpServletRequest request,
+ HttpServletResponse response) throws Exception {
+
+ DynaActionForm signupForm = (DynaActionForm) form;
+
+ // check if form submitted
+ if (signupForm.get("organisationId") != null && (Integer) signupForm.get("organisationId") > 0) {
+ ActionMessages errors = new ActionMessages();
+
+ // validate
+ if (!StringUtils.equals(signupForm.getString("courseKey"), signupForm.getString("confirmCourseKey"))) {
+ errors.add("courseKey", new ActionMessage("error.course.keys.unequal"));
+ }
+ if (signupService.contextExists((Integer) signupForm.get("signupOrganisationId"),
+ signupForm.getString("context"))) {
+ errors.add("context", new ActionMessage("error.context.exists"));
+ }
+
+ if (!errors.isEmpty()) {
+ saveErrors(request, errors);
+ } else {
+ // proceed
+ SignupOrganisation signup;
+ if (signupForm.get("signupOrganisationId") != null
+ && (Integer) signupForm.get("signupOrganisationId") > 0) {
+ // form was editing existing
+ signup = (SignupOrganisation) userManagementService.findById(SignupOrganisation.class,
+ (Integer) signupForm.get("signupOrganisationId"));
+ } else {
+ signup = new SignupOrganisation();
+ signup.setCreateDate(new Date());
+ }
+ signup.setAddToLessons((Boolean) signupForm.get("addToLessons"));
+ signup.setAddAsStaff((Boolean) signupForm.get("addAsStaff"));
+ signup.setAddWithAuthor((Boolean) signupForm.get("addWithAuthor"));
+ signup.setAddWithMonitor((Boolean) signupForm.get("addWithMonitor"));
+ signup.setDisabled((Boolean) signupForm.get("disabled"));
+ signup.setOrganisation((Organisation) userManagementService.findById(Organisation.class,
+ (Integer) signupForm.get("organisationId")));
+ signup.setCourseKey(signupForm.getString("courseKey"));
+ signup.setBlurb(signupForm.getString("blurb"));
+ signup.setContext(signupForm.getString("context"));
+ userManagementService.save(signup);
+
+ return mapping.findForward("signupPageListMethod");
+ }
+ } else {
+ // form not submitted, default values
+ signupForm.set("blurb", "Register your LAMS account for this group using the form below.");
+ }
+
+ List organisations = signupService.getOrganisationCandidates();
+ request.setAttribute("organisations", organisations);
+
+ return mapping.findForward("addSignupPage");
+ }
+
+ public ActionForward delete(ActionMapping mapping, ActionForm form, HttpServletRequest request,
+ HttpServletResponse response) throws Exception {
+
+ Integer soid = WebUtil.readIntParam(request, "soid");
+
+ if (soid != null && soid > 0) {
+ userManagementService.deleteById(SignupOrganisation.class, soid);
+ }
+
+ return mapping.findForward("signupPageListMethod");
+ }
+}
Index: lams_admin/src/java/org/lamsfoundation/lams/admin/web/action/SysAdminStartAction.java
===================================================================
diff -u -rd5655905b56e2063bc3854df756ef16572d2c745 -r2b88dada3266a4b0f83f4b5c4cf617553496ca59
--- lams_admin/src/java/org/lamsfoundation/lams/admin/web/action/SysAdminStartAction.java (.../SysAdminStartAction.java) (revision d5655905b56e2063bc3854df756ef16572d2c745)
+++ lams_admin/src/java/org/lamsfoundation/lams/admin/web/action/SysAdminStartAction.java (.../SysAdminStartAction.java) (revision 2b88dada3266a4b0f83f4b5c4cf617553496ca59)
@@ -74,6 +74,7 @@
links.add(new LinkBean("statistics.do", "admin.statistics.title"));
links.add(new LinkBean("themeManagement.do", "admin.themes.title"));
links.add(new LinkBean("timezonemanagement.do", "admin.timezone.title"));
+ links.add(new LinkBean("signupManagement.do", "admin.signup.title"));
OpenIDConfig openIDEnabled = (OpenIDConfig)service.findById(OpenIDConfig.class, OpenIDConfig.KEY_ENABLED);
if (openIDEnabled != null && Boolean.parseBoolean(openIDEnabled.getConfigValue()) == Boolean.TRUE) {
Index: lams_admin/web/WEB-INF/tiles-defs.xml
===================================================================
diff -u -rd56929f06ad90a63082d514e6521adc175f3de27 -r2b88dada3266a4b0f83f4b5c4cf617553496ca59
--- lams_admin/web/WEB-INF/tiles-defs.xml (.../tiles-defs.xml) (revision d56929f06ad90a63082d514e6521adc175f3de27)
+++ lams_admin/web/WEB-INF/tiles-defs.xml (.../tiles-defs.xml) (revision 2b88dada3266a4b0f83f4b5c4cf617553496ca59)
@@ -201,4 +201,14 @@
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
Index: lams_admin/web/signupmanagement/add.jsp
===================================================================
diff -u
--- lams_admin/web/signupmanagement/add.jsp (revision 0)
+++ lams_admin/web/signupmanagement/add.jsp (revision 2b88dada3266a4b0f83f4b5c4cf617553496ca59)
@@ -0,0 +1,67 @@
+<%@ include file="/taglibs.jsp"%>
+
+
+ :
+
+
+
+
+
+
+
+
+
+
+
+ : |
+
+
+
+
+
+
+ |
+ |
+
+
+ : |
+ |
+ |
+
+
+ : |
+ |
+ |
+
+
+ : |
+ |
+ |
+
+
+ : |
+ |
+ |
+
+
+ : |
+ |
+ |
+
+
+ : |
+ |
+ |
+
+
+ : |
+ |
+ |
+
+
+ |
+ |
+
+
+
+
\ No newline at end of file
Index: lams_admin/web/signupmanagement/list.jsp
===================================================================
diff -u
--- lams_admin/web/signupmanagement/list.jsp (revision 0)
+++ lams_admin/web/signupmanagement/list.jsp (revision 2b88dada3266a4b0f83f4b5c4cf617553496ca59)
@@ -0,0 +1,56 @@
+<%@ include file="/taglibs.jsp"%>
+
+
+
+
+
+
+
+
+
+
+
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+
+
+
+
+
+ |
+
+
+ |
+
+
+ |
+
+
+ |
+
+
+ |
+
+
+ |
+
+
+ |
+
+
+
+
+ |
+
+
+
+
+
+
+
\ No newline at end of file
Index: lams_build/conf/j2ee/lams.application.xml
===================================================================
diff -u -rd51d35acd1a906f5361d7ecdfb25aeec84efafa6 -r2b88dada3266a4b0f83f4b5c4cf617553496ca59
--- lams_build/conf/j2ee/lams.application.xml (.../lams.application.xml) (revision d51d35acd1a906f5361d7ecdfb25aeec84efafa6)
+++ lams_build/conf/j2ee/lams.application.xml (.../lams.application.xml) (revision 2b88dada3266a4b0f83f4b5c4cf617553496ca59)
@@ -59,18 +59,6 @@
SAML Integration - do not uncomment manually-->
-
-
-
-
+
+
+ Open access content
+ /signup/*
+
+
+
FORM
Index: lams_central/src/java/org/lamsfoundation/lams/web/action/SignupAction.java
===================================================================
diff -u
--- lams_central/src/java/org/lamsfoundation/lams/web/action/SignupAction.java (revision 0)
+++ lams_central/src/java/org/lamsfoundation/lams/web/action/SignupAction.java (revision 2b88dada3266a4b0f83f4b5c4cf617553496ca59)
@@ -0,0 +1,227 @@
+package org.lamsfoundation.lams.web.action;
+
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.apache.catalina.authenticator.Constants;
+import org.apache.commons.lang.StringUtils;
+import org.apache.log4j.Logger;
+import org.apache.struts.action.Action;
+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.action.DynaActionForm;
+import org.lamsfoundation.lams.signup.model.SignupOrganisation;
+import org.lamsfoundation.lams.signup.service.ISignupService;
+import org.lamsfoundation.lams.usermanagement.User;
+import org.lamsfoundation.lams.util.Configuration;
+import org.lamsfoundation.lams.util.ConfigurationKeys;
+import org.lamsfoundation.lams.util.Emailer;
+import org.lamsfoundation.lams.util.HashUtil;
+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;
+
+/**
+ * @struts:action path="/signup/signup" name="SignupForm" scope="request"
+ * validate="false" parameter="method"
+ *
+ * @struts:action-forward name="signup" path=".signup"
+ * @struts:action-forward name="index" path="/"
+ * @struts:action-forward name="success" path=".successfulSignup"
+ */
+public class SignupAction extends Action {
+
+ private static Logger log = Logger.getLogger(SignupAction.class);
+ private static ISignupService signupService = null;
+
+ public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request,
+ HttpServletResponse response) {
+
+ if (signupService == null) {
+ WebApplicationContext wac = WebApplicationContextUtils.getRequiredWebApplicationContext(getServlet()
+ .getServletContext());
+ signupService = (ISignupService) wac.getBean("signupService");
+ }
+
+ String context = WebUtil.readStrParam(request, "context", true);
+ if (StringUtils.isNotBlank(context)) {
+ SignupOrganisation signupOrganisation = signupService.getSignupOrganisation(context);
+ request.setAttribute("signupOrganisation", signupOrganisation);
+ }
+
+ String selectedTab = WebUtil.readStrParam(request, "selectedTab", true);
+ if (StringUtils.isNotBlank(selectedTab)) {
+ request.setAttribute("selectedTab", selectedTab);
+ }
+
+ DynaActionForm signupForm = (DynaActionForm) form;
+ String method = WebUtil.readStrParam(request, "method", true);
+
+ if (signupForm.get("submitted") == null || !((Boolean) signupForm.get("submitted"))) {
+ // no context and unsubmitted form means it's the initial request
+ return mapping.findForward("signup");
+ } else if (StringUtils.equals(method, "register")) {
+ return signUp(mapping, form, request, response);
+ } else {
+ return signIn(mapping, form, request, response);
+ }
+ }
+
+ private ActionForward signUp(ActionMapping mapping, ActionForm form, HttpServletRequest request,
+ HttpServletResponse response) {
+
+ try {
+
+ DynaActionForm signupForm = (DynaActionForm) form;
+
+ // validation
+ ActionMessages errors = validateSignup(signupForm);
+ if (!errors.isEmpty()) {
+ saveErrors(request, errors);
+ return mapping.findForward("signup");
+ } else {
+ // proceed with signup
+ User user = new User();
+ user.setLogin(signupForm.getString("username"));
+ user.setFirstName(signupForm.getString("firstName"));
+ user.setLastName(signupForm.getString("lastName"));
+ user.setEmail(signupForm.getString("email"));
+ user.setPassword(HashUtil.sha1(signupForm.getString("password")));
+ signupService.signupUser(user, signupForm.getString("context"));
+
+ // send email
+ try {
+ String subject = "Your LAMS account details";
+ String body = "Hi there,\n\n";
+ body += "You've successfully registered an account with username " + user.getLogin();
+ body += " on the LAMS server at " + Configuration.get(ConfigurationKeys.SERVER_URL);
+ body += ". If you ever forget your password, you can reset it via this URL "
+ + Configuration.get(ConfigurationKeys.SERVER_URL) + "/forgotPassword.jsp.";
+ body += "\n\n";
+ body += "Regards,\n";
+ body += "LAMS Signup System";
+
+ Emailer.sendFromSupportEmail(subject, user.getEmail(), body);
+ } catch (Exception e) {
+ log.error(e.getMessage(), e);
+ request.setAttribute("error", e.getMessage());
+ }
+
+ return mapping.findForward("success");
+ }
+ } catch (Exception e) {
+ log.error(e.getMessage(), e);
+ request.setAttribute("error", e.getMessage());
+ }
+
+ return mapping.findForward("index");
+ }
+
+ private ActionForward signIn(ActionMapping mapping, ActionForm form, HttpServletRequest request,
+ HttpServletResponse response) {
+
+ try {
+ DynaActionForm signupForm = (DynaActionForm) form;
+
+ // validation
+ ActionMessages errors = validateSignin(signupForm);
+ if (!errors.isEmpty()) {
+ saveErrors(request, errors);
+ return mapping.findForward("signup");
+ } else {
+ String login = signupForm.getString("usernameTab2");
+ String password = HashUtil.sha1(signupForm.getString("passwordTab2"));
+ String context = signupForm.getString("context");
+ signupService.signinUser(login, context);
+
+ String redirectUrl = request.getScheme() + "://" + request.getServerName() + ":"
+ + request.getServerPort() + "/lams/";
+
+ //check if user is logged in already
+ if (SessionManager.getSession() == null || SessionManager.getSession().getAttribute(AttributeNames.USER) == null) {
+ redirectUrl += "/j_security_check?" + Constants.FORM_USERNAME + "=" + login + "&"
+ + Constants.FORM_PASSWORD + "=" + password;
+ }
+
+ response.sendRedirect(redirectUrl);
+ return null;
+ }
+ } catch (Exception e) {
+ log.error(e.getMessage(), e);
+ request.setAttribute("error", e.getMessage());
+ }
+
+ return mapping.findForward("index");
+ }
+
+ private ActionMessages validateSignup(DynaActionForm signupForm) {
+ ActionMessages errors = new ActionMessages();
+ if (StringUtils.isBlank(signupForm.getString("username"))) {
+ errors.add("username", new ActionMessage("error.username.blank"));
+ } else if (signupService.usernameExists(signupForm.getString("username"))) {
+ errors.add("username", new ActionMessage("error.username.exists"));
+ }
+ if (StringUtils.isBlank(signupForm.getString("firstName"))) {
+ errors.add("firstName", new ActionMessage("error.first.name.blank"));
+ }
+ if (StringUtils.isBlank(signupForm.getString("lastName"))) {
+ errors.add("lastName", new ActionMessage("error.last.name.blank"));
+ }
+ if (StringUtils.isBlank(signupForm.getString("password"))) {
+ errors.add("password", new ActionMessage("error.password.blank"));
+ } else if (!StringUtils.equals(signupForm.getString("password"), signupForm.getString("confirmPassword"))) {
+ errors.add("password", new ActionMessage("error.passwords.unequal"));
+ }
+ if (StringUtils.isBlank(signupForm.getString("email"))) {
+ errors.add("email", new ActionMessage("error.email.blank"));
+ } else {
+ if (!StringUtils.equals(signupForm.getString("email"), signupForm.getString("confirmEmail"))) {
+ errors.add("email", new ActionMessage("error.emails.unequal"));
+ }
+ Pattern p = Pattern.compile(".+@.+\\.[a-z]+");
+ Matcher m = p.matcher(signupForm.getString("email"));
+ if (!m.matches()) {
+ errors.add("email", new ActionMessage("error.email.invalid.format"));
+ }
+ }
+ if (!signupService.courseKeyIsValid(signupForm.getString("context"),
+ signupForm.getString("courseKey"))) {
+ errors.add("courseKey", new ActionMessage("error.course.key.invalid"));
+ }
+ return errors;
+ }
+
+ private ActionMessages validateSignin(DynaActionForm signupForm) {
+ ActionMessages errors = new ActionMessages();
+ if (StringUtils.isBlank(signupForm.getString("usernameTab2"))) {
+ errors.add("usernameTab2", new ActionMessage("error.username.blank"));
+ }
+ if (StringUtils.isBlank(signupForm.getString("passwordTab2"))) {
+ errors.add("passwordTab2", new ActionMessage("error.password.blank"));
+ }
+ if (!signupService.courseKeyIsValid(signupForm.getString("context"),
+ signupForm.getString("courseKeyTab2"))) {
+ errors.add("courseKeyTab2", new ActionMessage("error.course.key.invalid"));
+ }
+
+ if (errors.isEmpty()) {
+ String login = signupForm.getString("usernameTab2");
+ String password = HashUtil.sha1(signupForm.getString("passwordTab2"));
+ User user = signupService.getUserByLogin(login);
+
+ if ((user == null) || !user.getPassword().equals(password)) {
+ errors.add("usernameTab2", new ActionMessage("error.login.or.password.incorrect", "", ""));
+ }
+ }
+
+ return errors;
+ }
+}
Index: lams_central/web/WEB-INF/tiles-defs.xml
===================================================================
diff -u -rd56929f06ad90a63082d514e6521adc175f3de27 -r2b88dada3266a4b0f83f4b5c4cf617553496ca59
--- lams_central/web/WEB-INF/tiles-defs.xml (.../tiles-defs.xml) (revision d56929f06ad90a63082d514e6521adc175f3de27)
+++ lams_central/web/WEB-INF/tiles-defs.xml (.../tiles-defs.xml) (revision 2b88dada3266a4b0f83f4b5c4cf617553496ca59)
@@ -61,4 +61,14 @@
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
Fisheye: Tag 686aaadbd3281ec37fcb113927961b09bed4455c refers to a dead (removed) revision in file `lams_central/web/WEB-INF/urlrewrite.xml'.
Fisheye: No comparison available. Pass `N' to diff?
Index: lams_central/web/signup/loginTab.jsp
===================================================================
diff -u
--- lams_central/web/signup/loginTab.jsp (revision 0)
+++ lams_central/web/signup/loginTab.jsp (revision 2b88dada3266a4b0f83f4b5c4cf617553496ca59)
@@ -0,0 +1,32 @@
+
\ No newline at end of file
Index: lams_central/web/signup/signup.jsp
===================================================================
diff -u
--- lams_central/web/signup/signup.jsp (revision 0)
+++ lams_central/web/signup/signup.jsp (revision 2b88dada3266a4b0f83f4b5c4cf617553496ca59)
@@ -0,0 +1,82 @@
+<%@ taglib uri="tags-lams" prefix="lams" %>
+<%@ taglib uri="tags-fmt" prefix="fmt" %>
+<%@ taglib uri="tags-core" prefix="c" %>
+<%@ taglib uri="tags-html" prefix="html" %>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ()
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ <%@ include file="singupTab.jsp"%>
+
+
+
+
+ <%@ include file="loginTab.jsp"%>
+
+
+
\ No newline at end of file
Index: lams_central/web/signup/singupTab.jsp
===================================================================
diff -u
--- lams_central/web/signup/singupTab.jsp (revision 0)
+++ lams_central/web/signup/singupTab.jsp (revision 2b88dada3266a4b0f83f4b5c4cf617553496ca59)
@@ -0,0 +1,57 @@
+
+
+
+
+
+
+
+
+
+ : |
+ |
+ |
+
+
+ : |
+ |
+ |
+
+
+ : |
+ |
+ |
+
+
+ : |
+ |
+ |
+
+
+ : |
+ |
+ |
+
+
+ : |
+ |
+ |
+
+
+ : |
+ |
+ |
+
+
+ : |
+ |
+ |
+
+
+ |
+ |
+ |
+
+
+
+
+
\ No newline at end of file
Index: lams_central/web/signup/successfulSignup.jsp
===================================================================
diff -u
--- lams_central/web/signup/successfulSignup.jsp (revision 0)
+++ lams_central/web/signup/successfulSignup.jsp (revision 2b88dada3266a4b0f83f4b5c4cf617553496ca59)
@@ -0,0 +1,19 @@
+<%@ taglib uri="tags-lams" prefix="lams" %>
+<%@ taglib uri="tags-fmt" prefix="fmt" %>
+<%@ taglib uri="tags-core" prefix="c" %>
+<%@ taglib uri="tags-html" prefix="html" %>
+
+
+
+
+
+
+
+
+ ,
+
+
+
+ : .
+
\ No newline at end of file
Index: lams_common/build.xml
===================================================================
diff -u -r73963b896de9269e9c4e5a5c229159588eb18c75 -r2b88dada3266a4b0f83f4b5c4cf617553496ca59
--- lams_common/build.xml (.../build.xml) (revision 73963b896de9269e9c4e5a5c229159588eb18c75)
+++ lams_common/build.xml (.../build.xml) (revision 2b88dada3266a4b0f83f4b5c4cf617553496ca59)
@@ -23,6 +23,8 @@
+
+
Index: lams_common/conf/hibernate/mappings/org/lamsfoundation/lams/signup/model/SignupOrganisation.hbm.xml
===================================================================
diff -u
--- lams_common/conf/hibernate/mappings/org/lamsfoundation/lams/signup/model/SignupOrganisation.hbm.xml (revision 0)
+++ lams_common/conf/hibernate/mappings/org/lamsfoundation/lams/signup/model/SignupOrganisation.hbm.xml (revision 2b88dada3266a4b0f83f4b5c4cf617553496ca59)
@@ -0,0 +1,132 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Index: lams_common/src/java/org/lamsfoundation/lams/commonContext.xml
===================================================================
diff -u -radbeef28588d85020fca6e9d949a17bd09e960a7 -r2b88dada3266a4b0f83f4b5c4cf617553496ca59
--- lams_common/src/java/org/lamsfoundation/lams/commonContext.xml (.../commonContext.xml) (revision adbeef28588d85020fca6e9d949a17bd09e960a7)
+++ lams_common/src/java/org/lamsfoundation/lams/commonContext.xml (.../commonContext.xml) (revision 2b88dada3266a4b0f83f4b5c4cf617553496ca59)
@@ -116,6 +116,23 @@
+
+
+
+
+
+
+
+
+
+
+ true
+
+
+ PROPAGATION_REQUIRED
+
+
+
@@ -335,6 +352,11 @@
+
+
+
+
+
Index: lams_common/src/java/org/lamsfoundation/lams/dbupdates/patch02040013.sql
===================================================================
diff -u
--- lams_common/src/java/org/lamsfoundation/lams/dbupdates/patch02040013.sql (revision 0)
+++ lams_common/src/java/org/lamsfoundation/lams/dbupdates/patch02040013.sql (revision 2b88dada3266a4b0f83f4b5c4cf617553496ca59)
@@ -0,0 +1,25 @@
+-- Turn off autocommit, so nothing is committed if there is an error
+SET AUTOCOMMIT = 0;
+
+-- LDEV-2905 Integrate lams_signup to LAMS core
+CREATE TABLE IF NOT EXISTS lams_signup_organisation (
+ signup_organisation_id BIGINT(20) NOT NULL auto_increment,
+ organisation_id BIGINT(20) NOT NULL,
+ add_to_lessons TINYINT(1) DEFAULT 1,
+ add_as_staff TINYINT(1) DEFAULT 0,
+ add_with_author TINYINT(1) DEFAULT 0,
+ add_with_monitor TINYINT(1) DEFAULT 0,
+ course_key VARCHAR(255),
+ blurb TEXT,
+ create_date DATETIME,
+ disabled TINYINT(1) DEFAULT 0,
+ context VARCHAR(255) UNIQUE,
+ PRIMARY KEY (signup_organisation_id),
+ INDEX (organisation_id)
+)ENGINE=InnoDB;
+
+DROP TABLE IF EXISTS lams_signup_user;
+
+-- If there were no errors, commit and restore autocommit to on
+COMMIT;
+SET AUTOCOMMIT = 1;
\ No newline at end of file
Index: lams_common/src/java/org/lamsfoundation/lams/signup/dao/ISignupDAO.java
===================================================================
diff -u
--- lams_common/src/java/org/lamsfoundation/lams/signup/dao/ISignupDAO.java (revision 0)
+++ lams_common/src/java/org/lamsfoundation/lams/signup/dao/ISignupDAO.java (revision 2b88dada3266a4b0f83f4b5c4cf617553496ca59)
@@ -0,0 +1,44 @@
+/****************************************************************
+ * 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.signup.dao;
+
+import java.util.List;
+
+import org.lamsfoundation.lams.signup.model.SignupOrganisation;
+
+public interface ISignupDAO {
+
+ SignupOrganisation getSignupOrganisation(String context);
+
+ boolean usernameExists(String username);
+
+ boolean courseKeyIsValid(String context, String courseKey);
+
+ List getSignupOrganisations();
+
+ List getOrganisationCandidates();
+
+ boolean contextExists(Integer soid, String context);
+
+}
Index: lams_common/src/java/org/lamsfoundation/lams/signup/dao/hibernate/SignupDAO.java
===================================================================
diff -u
--- lams_common/src/java/org/lamsfoundation/lams/signup/dao/hibernate/SignupDAO.java (revision 0)
+++ lams_common/src/java/org/lamsfoundation/lams/signup/dao/hibernate/SignupDAO.java (revision 2b88dada3266a4b0f83f4b5c4cf617553496ca59)
@@ -0,0 +1,70 @@
+package org.lamsfoundation.lams.signup.dao.hibernate;
+
+import java.util.List;
+
+import org.lamsfoundation.lams.dao.hibernate.BaseDAO;
+import org.lamsfoundation.lams.signup.dao.ISignupDAO;
+import org.lamsfoundation.lams.signup.model.SignupOrganisation;
+import org.lamsfoundation.lams.usermanagement.OrganisationState;
+import org.lamsfoundation.lams.usermanagement.OrganisationType;
+import org.lamsfoundation.lams.usermanagement.User;
+
+public class SignupDAO extends BaseDAO implements ISignupDAO {
+
+ @Override
+ public SignupOrganisation getSignupOrganisation(String context) {
+ List list = getHibernateTemplate().find(
+ "from SignupOrganisation s where s.disabled=" + Boolean.FALSE + " and s.context=?", context);
+ if (list != null && list.size() > 0) {
+ return (SignupOrganisation) list.get(0);
+ }
+ return null;
+ }
+
+ @Override
+ public List getSignupOrganisations() {
+ return super.findAll(SignupOrganisation.class);
+ }
+
+ @Override
+ public List getOrganisationCandidates() {
+ String query = "from Organisation o where o.organisationState.organisationStateId=" + OrganisationState.ACTIVE;
+ query += " and o.organisationType.organisationTypeId!=" + OrganisationType.ROOT_TYPE;
+ return getHibernateTemplate().find(query);
+ }
+
+ @Override
+ public boolean usernameExists(String username) {
+ List list = super.findByProperty(User.class, "login", username);
+ if (list != null && list.size() > 0)
+ return true;
+ else
+ return false;
+ }
+
+ @Override
+ public boolean contextExists(Integer soid, String context) {
+ String query = "from SignupOrganisation s where s.signupOrganisationId!=? and s.context=?";
+ Object[] values = new Object[2];
+ values[0] = soid;
+ values[1] = context;
+ List list = getHibernateTemplate().find(query, values);
+ if (list != null && list.size() > 0)
+ return true;
+ else
+ return false;
+ }
+
+ @Override
+ public boolean courseKeyIsValid(String context, String courseKey) {
+ String query = "from SignupOrganisation s where s.context=? and s.courseKey=?";
+ Object[] values = new Object[2];
+ values[0] = context;
+ values[1] = courseKey;
+ List list = getHibernateTemplate().find(query, values);
+ if (list != null && list.size() > 0)
+ return true;
+ else
+ return false;
+ }
+}
Index: lams_common/src/java/org/lamsfoundation/lams/signup/model/SignupOrganisation.java
===================================================================
diff -u
--- lams_common/src/java/org/lamsfoundation/lams/signup/model/SignupOrganisation.java (revision 0)
+++ lams_common/src/java/org/lamsfoundation/lams/signup/model/SignupOrganisation.java (revision 2b88dada3266a4b0f83f4b5c4cf617553496ca59)
@@ -0,0 +1,154 @@
+package org.lamsfoundation.lams.signup.model;
+
+import java.util.Date;
+
+import org.lamsfoundation.lams.usermanagement.Organisation;
+
+/**
+ * SignupOrganisation.
+ *
+ * @hibernate.class table="lams_signup_organisation"
+ */
+public class SignupOrganisation {
+
+ /**
+ * Link on Lams wiki signup help page.
+ */
+ public static String SIGNUP_HELP_PAGE = "LAMS+Configuration";
+
+ /** identifier field */
+ private Integer signupOrganisationId;
+ private Organisation organisation;
+ private Boolean addToLessons;
+ private Boolean addAsStaff;
+ private Boolean addWithAuthor;
+ private Boolean addWithMonitor;
+ private String courseKey;
+ private String blurb;
+ private Date createDate;
+ private Boolean disabled;
+ private String context;
+
+ /**
+ * @hibernate.id generator-class="native" type="java.lang.Integer" column="signup_organisation_id"
+ */
+ public Integer getSignupOrganisationId() {
+ return signupOrganisationId;
+ }
+
+ public void setSignupOrganisationId(Integer signupOrganisationId) {
+ this.signupOrganisationId = signupOrganisationId;
+ }
+
+ /**
+ * @hibernate.many-to-one not-null="true" cascade="all-delete-orphan" lazy="false"
+ * @hibernate.column name="organisation_id"
+ */
+ public Organisation getOrganisation() {
+ return organisation;
+ }
+
+ public void setOrganisation(Organisation organisation) {
+ this.organisation = organisation;
+ }
+
+ /**
+ * @hibernate.property column="add_to_lessons" length="1"
+ */
+ public Boolean getAddToLessons() {
+ return addToLessons;
+ }
+
+ public void setAddToLessons(Boolean addToLessons) {
+ this.addToLessons = addToLessons;
+ }
+
+ /**
+ * @hibernate.property column="add_as_staff" length="1"
+ */
+ public Boolean getAddAsStaff() {
+ return addAsStaff;
+ }
+
+ public void setAddAsStaff(Boolean addAsStaff) {
+ this.addAsStaff = addAsStaff;
+ }
+
+ /**
+ * @hibernate.property column="add_with_author" length="1"
+ */
+ public Boolean getAddWithAuthor() {
+ return addWithAuthor;
+ }
+
+ public void setAddWithAuthor(Boolean addWithAuthor) {
+ this.addWithAuthor = addWithAuthor;
+ }
+
+ /**
+ * @hibernate.property column="add_with_monitor" length="1"
+ */
+ public Boolean getAddWithMonitor() {
+ return addWithMonitor;
+ }
+
+ public void setAddWithMonitor(Boolean addWithMonitor) {
+ this.addWithMonitor = addWithMonitor;
+ }
+
+ /**
+ * @hibernate.property column="course_key" length="255"
+ */
+ public String getCourseKey() {
+ return courseKey;
+ }
+
+ public void setCourseKey(String courseKey) {
+ this.courseKey = courseKey;
+ }
+
+ /**
+ * @hibernate.property column="blurb" length="2147483647"
+ */
+ public String getBlurb() {
+ return blurb;
+ }
+
+ public void setBlurb(String blurb) {
+ this.blurb = blurb;
+ }
+
+ /**
+ * @hibernate.property column="create_date" length="19" not-null="true"
+ */
+ public Date getCreateDate() {
+ return createDate;
+ }
+
+ public void setCreateDate(Date createDate) {
+ this.createDate = createDate;
+ }
+
+ /**
+ * @hibernate.property column="disabled" length="1"
+ */
+ public Boolean getDisabled() {
+ return disabled;
+ }
+
+ public void setDisabled(Boolean disabled) {
+ this.disabled = disabled;
+ }
+
+ /**
+ * @hibernate.property column="context" length="255"
+ */
+ public String getContext() {
+ return context;
+ }
+
+ public void setContext(String context) {
+ this.context = context;
+ }
+
+}
Index: lams_common/src/java/org/lamsfoundation/lams/signup/service/ISignupService.java
===================================================================
diff -u
--- lams_common/src/java/org/lamsfoundation/lams/signup/service/ISignupService.java (revision 0)
+++ lams_common/src/java/org/lamsfoundation/lams/signup/service/ISignupService.java (revision 2b88dada3266a4b0f83f4b5c4cf617553496ca59)
@@ -0,0 +1,50 @@
+/****************************************************************
+ * 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.signup.service;
+
+import java.util.List;
+
+import org.lamsfoundation.lams.signup.model.SignupOrganisation;
+import org.lamsfoundation.lams.usermanagement.User;
+
+public interface ISignupService {
+
+ void signupUser(User user, String context);
+
+ SignupOrganisation getSignupOrganisation(String context);
+
+ boolean usernameExists(String username);
+
+ boolean courseKeyIsValid(String context, String courseKey);
+
+ List getSignupOrganisations();
+
+ List getOrganisationCandidates();
+
+ boolean contextExists(Integer soid, String context);
+
+ void signinUser(String login, String context);
+
+ User getUserByLogin(String login);
+}
Index: lams_common/src/java/org/lamsfoundation/lams/signup/service/SignupService.java
===================================================================
diff -u
--- lams_common/src/java/org/lamsfoundation/lams/signup/service/SignupService.java (revision 0)
+++ lams_common/src/java/org/lamsfoundation/lams/signup/service/SignupService.java (revision 2b88dada3266a4b0f83f4b5c4cf617553496ca59)
@@ -0,0 +1,209 @@
+package org.lamsfoundation.lams.signup.service;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+import org.apache.commons.lang.StringUtils;
+import org.lamsfoundation.lams.lesson.Lesson;
+import org.lamsfoundation.lams.lesson.service.ILessonService;
+import org.lamsfoundation.lams.signup.dao.ISignupDAO;
+import org.lamsfoundation.lams.signup.model.SignupOrganisation;
+import org.lamsfoundation.lams.usermanagement.AuthenticationMethod;
+import org.lamsfoundation.lams.usermanagement.Role;
+import org.lamsfoundation.lams.usermanagement.SupportedLocale;
+import org.lamsfoundation.lams.usermanagement.User;
+import org.lamsfoundation.lams.usermanagement.service.IUserManagementService;
+import org.lamsfoundation.lams.util.Configuration;
+import org.lamsfoundation.lams.util.ConfigurationKeys;
+import org.lamsfoundation.lams.util.LanguageUtil;
+
+public class SignupService implements ISignupService {
+
+ private ISignupDAO signupDAO;
+ private IUserManagementService userManagementService;
+ private ILessonService lessonService;
+
+ @Override
+ public void signupUser(User user, String context) {
+ // save User
+ user.setFlashTheme(userManagementService.getDefaultFlashTheme());
+ user.setHtmlTheme(userManagementService.getDefaultHtmlTheme());
+ user.setDisabledFlag(false);
+ user.setAuthenticationMethod(getAuthenticationMethod(AuthenticationMethod.DB));
+ user.setLocale(getDefaultLocale());
+ user.setCreateDate(new Date());
+ user.setEnableFlash(true);
+ userManagementService.save(user);
+
+ // add to org
+ SignupOrganisation signup = signupDAO.getSignupOrganisation(context);
+
+ ArrayList rolesList = new ArrayList();
+ rolesList.add(Role.ROLE_LEARNER.toString());
+ if (signup.getAddAsStaff()) {
+ rolesList.add(Role.ROLE_MONITOR.toString());
+ rolesList.add(Role.ROLE_AUTHOR.toString());
+ } else if (signup.getAddWithAuthor()) {
+ rolesList.add(Role.ROLE_AUTHOR.toString());
+ } else if (signup.getAddWithMonitor()) {
+ rolesList.add(Role.ROLE_MONITOR.toString());
+ }
+
+ userManagementService
+ .setRolesForUserOrganisation(user, signup.getOrganisation().getOrganisationId(), rolesList);
+
+ if (signup.getAddToLessons()) {
+ // add to lessons
+ user = userManagementService.getUserByLogin(user.getLogin());
+
+ Set lessonSet = signup.getOrganisation().getLessons();
+ Iterator lessonIterator = lessonSet.iterator();
+ while (lessonIterator.hasNext()) {
+ Lesson lesson = (Lesson) lessonIterator.next();
+ lessonService.addLearner(lesson.getLessonId(), user.getUserId());
+ if (signup.getAddAsStaff()) {
+ lessonService.addStaffMember(lesson.getLessonId(), user.getUserId());
+ }
+ }
+ }
+ }
+
+ @Override
+ public void signinUser(String login, String context) {
+ User user = userManagementService.getUserByLogin(login);
+
+ // add to org
+ SignupOrganisation signup = signupDAO.getSignupOrganisation(context);
+
+ ArrayList rolesList = new ArrayList();
+ rolesList.add(Role.ROLE_LEARNER.toString());
+ if (signup.getAddAsStaff()) {
+ rolesList.add(Role.ROLE_MONITOR.toString());
+ rolesList.add(Role.ROLE_AUTHOR.toString());
+ } else if (signup.getAddWithAuthor()) {
+ rolesList.add(Role.ROLE_AUTHOR.toString());
+ } else if (signup.getAddWithMonitor()) {
+ rolesList.add(Role.ROLE_MONITOR.toString());
+ }
+
+ userManagementService.setRolesForUserOrganisation(user, signup.getOrganisation().getOrganisationId(), rolesList);
+
+ if (signup.getAddToLessons()) {
+ // add to lessons
+ Set lessonSet = signup.getOrganisation().getLessons();
+ Iterator lessonIterator = lessonSet.iterator();
+ while (lessonIterator.hasNext()) {
+ Lesson lesson = (Lesson) lessonIterator.next();
+ lessonService.addLearner(lesson.getLessonId(), user.getUserId());
+ if (signup.getAddAsStaff()) {
+ lessonService.addStaffMember(lesson.getLessonId(), user.getUserId());
+ }
+ }
+ }
+ }
+
+ @Override
+ public User getUserByLogin(String login) {
+ return userManagementService.getUserByLogin(login);
+ }
+
+ @Override
+ public SignupOrganisation getSignupOrganisation(String context) {
+ return signupDAO.getSignupOrganisation(context);
+ }
+
+ @Override
+ public boolean usernameExists(String username) {
+ return signupDAO.usernameExists(username);
+ }
+
+ @Override
+ public boolean courseKeyIsValid(String context, String courseKey) {
+ return signupDAO.courseKeyIsValid(context, courseKey);
+ }
+
+ @Override
+ public List getSignupOrganisations() {
+ return signupDAO.getSignupOrganisations();
+ }
+
+ @Override
+ public List getOrganisationCandidates() {
+ return signupDAO.getOrganisationCandidates();
+ }
+
+ @Override
+ public boolean contextExists(Integer soid, String context) {
+ return signupDAO.contextExists(soid, context);
+ }
+
+ public void setSignupDAO(ISignupDAO signupDAO) {
+ this.signupDAO = signupDAO;
+ }
+
+ public void setUserManagementService(IUserManagementService userManagementService) {
+ this.userManagementService = userManagementService;
+ }
+
+ public void setLessonService(ILessonService lessonService) {
+ this.lessonService = lessonService;
+ }
+
+ private AuthenticationMethod getAuthenticationMethod(Integer id) {
+ return (AuthenticationMethod) userManagementService.findById(AuthenticationMethod.class, id);
+ }
+
+ // replicating LanguageUtil method here because it's service bean injection
+ // method doesn't work from here
+ private SupportedLocale getDefaultLocale() {
+ String localeName = Configuration.get(ConfigurationKeys.SERVER_LANGUAGE);
+ String langIsoCode = LanguageUtil.DEFAULT_LANGUAGE;
+ String countryIsoCode = LanguageUtil.DEFAULT_COUNTRY;
+ if (StringUtils.isNotBlank(localeName) && localeName.length() > 2) {
+ langIsoCode = localeName.substring(0, 2);
+ countryIsoCode = localeName.substring(3);
+ }
+
+ SupportedLocale locale = null;
+ locale = getSupportedLocaleOrNull(langIsoCode, countryIsoCode);
+ if (locale == null) {
+ locale = getSupportedLocaleOrNull(LanguageUtil.DEFAULT_LANGUAGE, LanguageUtil.DEFAULT_COUNTRY);
+ }
+
+ return locale;
+ }
+
+ // replicating LanguageUtil method here because it's service bean injection
+ // method doesn't work from here
+ private SupportedLocale getSupportedLocaleOrNull(String langIsoCode, String countryIsoCode) {
+ SupportedLocale locale = null;
+
+ Map properties = new HashMap();
+
+ if (StringUtils.isNotBlank(countryIsoCode)) {
+ properties.put("countryIsoCode", countryIsoCode.trim());
+ }
+ if (StringUtils.isNotBlank(langIsoCode)) {
+ properties.put("languageIsoCode", langIsoCode.trim());
+ }
+
+ if (properties.isEmpty()) {
+ return null;
+ }
+
+ List list = userManagementService.findByProperties(SupportedLocale.class, properties);
+ if (list != null && list.size() > 0) {
+ Collections.sort(list);
+ locale = (SupportedLocale) list.get(0);
+ } else {
+ locale = null;
+ }
+ return locale;
+ }
+}