<%@ taglib uri="http://java.sun.com/jstl/core_rt" prefix="c" %>
<%--
  -	$RCSfile$
  -	$Revision$
  -	$Date$
  -
  - Copyright (C) 2004 Jive Software. All rights reserved.
  -
  - This software is published under the terms of the GNU Public License (GPL),
  - a copy of which is included in this distribution.
--%>
<%@ page import="org.jivesoftware.util.*,
                 java.util.HashMap,
                 java.util.Map,
                 org.jivesoftware.messenger.user.UserManager,
                 org.jivesoftware.messenger.user.*,
                 org.jivesoftware.messenger.user.spi.*,
                 java.util.*,
                 org.jivesoftware.messenger.*,
                 org.jivesoftware.admin.*,
                 java.io.StringWriter,
                 java.io.StringWriter,
                 java.io.IOException,
                 org.jivesoftware.messenger.auth.UnauthorizedException,
                 java.io.PrintStream,
                 org.dom4j.xpath.DefaultXPath,
                 org.dom4j.*"
    errorPage="error.jsp"
%>

<%@ taglib uri="http://java.sun.com/jstl/core_rt" prefix="c" %>

<jsp:useBean id="webManager" class="org.jivesoftware.util.WebManager"  />
<jsp:useBean id="errors" class="java.util.HashMap" />
<% webManager.init(request, response, session, application, out ); %>

<%  // Get parameters //
    boolean create = request.getParameter("create") != null;
    boolean cancel = request.getParameter("cancel") != null;
    String username = ParamUtils.getParameter(request,"username");
    String name = ParamUtils.getParameter(request,"name");
    String email = ParamUtils.getParameter(request,"email");
    String password = ParamUtils.getParameter(request,"password");
    String passwordConfirm = ParamUtils.getParameter(request,"passwordConfirm");

    // Handle a cancel
    if (cancel) {
        response.sendRedirect("user-summary.jsp");
        return;
    }

    // Handle a request to create a user:
    if (create) {
        // Validate
        if (username == null) {
            errors.put("username","");
        }
        if (password == null) {
            errors.put("password","");
        }
        if (passwordConfirm == null) {
            errors.put("passwordConfirm","");
        }
        if (password != null && passwordConfirm != null && !password.equals(passwordConfirm)) {
            errors.put("passwordMatch","");
        }

        // do a create if there were no errors
        if (errors.size() == 0) {
            try {
                User newUser = webManager.getUserManager().createUser(username, password, email);
                if (name != null) {
                    newUser.getInfo().setName(name);
                }
                newUser.saveInfo();
                
                // Successful, so redirect
                response.sendRedirect("user-properties.jsp?success=true&username=" + newUser.getUsername());
                return;
            }
            catch (UserAlreadyExistsException e) {
                e.printStackTrace();
                errors.put("usernameAlreadyExists","");
            }
            catch (Exception e) {
                e.printStackTrace();
                errors.put("general","");
                Log.error(e);
            }
        }
    }
%>
<jsp:useBean id="pageinfo" scope="request" class="org.jivesoftware.admin.AdminPageBean"/>
<%   // Title of this page and breadcrumbs
    String title = "Create User";
    pageinfo.setTitle(title);
    pageinfo.getBreadcrumbs().add(new AdminPageBean.Breadcrumb("Main", "index.jsp"));
    pageinfo.getBreadcrumbs().add(new AdminPageBean.Breadcrumb(title, "user-create.jsp"));
    pageinfo.setPageID("user-create");
%>
<jsp:include page="top.jsp" flush="true"/>
<jsp:include page="title.jsp" flush="true"/>
<c:set var="submit" value="${param.create}"/>
<c:set var="errors" value="${errors}"/>
<%   if (errors.get("general") != null) { %>
<div class="jive-success">
  <table cellpadding="0" cellspacing="0" border="0">
    <tbody>
      <tr>
        <td class="jive-icon">
          <img src="images/success-16x16.gif" width="16" height="16" border="0"/>
        </td>
        <td class="jive-icon-label">Error creating the user account. Please check your error logs.</td>
      </tr>
    </tbody>
  </table>
</div>
<br/>
<%   } %>
<form name="f" action="user-create.jsp" method="post">
<fieldset><legend>Create New User</legend>
<table  cellpadding="3" cellspacing="1" border="0">

   <tr><td class="c1">* Required fields</td></tr>
    <tr>
      <td width="1%" class="c1">Username: *</td>
      <td class="c2">
        <input type="text" name="username" size="30" maxlength="75" value="<%= ((username!=null) ? username : "") %>"/>
        <%   if (errors.get("username") != null) { %>
        <span class="jive-error-text">Invalid username. </span>
        <%   } else if (errors.get("usernameAlreadyExists") != null) { %>
        <span class="jive-error-text">Username already exists - please choose a different one. </span>
        <%   } %>
      </td>
    </tr>
    <tr>
      <td width="1%" class="c1">Name:</td>
      <td class="c2">
        <input type="text" name="name" size="30" maxlength="75" value="<%= ((name!=null) ? name : "") %>"/>
        <%   if (errors.get("name") != null) { %>
        <span class="jive-error-text">Invalid name. </span>
        <%   } %>
      </td>
    </tr>
    <tr>
      <td width="1%" class="c1">Email:</td>
      <td class="c2">
        <input type="text" name="email" size="30" maxlength="75" value="<%= ((email!=null) ? email : "") %>"/>
        <%   if (errors.get("email") != null) { %>
        <span class="jive-error-text">Invalid email. </span>
        <%   } %>
      </td>
    </tr>
    <tr>
      <td class="c1">Password: *</td>
      <td class="c2">
        <input type="password" name="password" value="" size="20" maxlength="75"/>
        <%   if (errors.get("password") != null) { %>
        <span class="jive-error-text">Invalid password. </span>
        <%   } else if (errors.get("passwordMatch") != null) { %>
        <span class="jive-error-text">Passwords don't match. </span>
        <%   } %>
      </td>
    </tr>
    <tr>
      <td width="1%" class="c1">Confirm Password: *</td>
      <td class="c2">
        <input type="password" name="passwordConfirm" value="" size="20" maxlength="75"/>
        <%   if (errors.get("passwordConfirm") != null) { %>
        <span class="jive-error-text">Invalid password confirmation. </span>
        <%   } %>
      </td>
    </tr>
    <tr>
      <td colspan="2" nowrap><input type="submit" name="create" value="Create User"/><input type="submit" name="cancel" value="Cancel"/>
      </tr></td></fieldset>
  </form>
  <script language="JavaScript" type="text/javascript">
     document.f.username.focus();
     function checkFields() {
     }
</script>

  <jsp:include page="bottom.jsp" flush="true"/>
</table>