Subversion Repositories general

Compare Revisions

Ignore whitespace Rev 949 → Rev 950

/sun/hostadmiral/trunk/src/ak/hostadmiral/core/action/LoginAction.java
3,6 → 3,7
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
 
import org.apache.struts.Globals;
import org.apache.struts.action.Action;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.action.ActionForm;
39,6 → 40,7
}
else {
request.getSession().setAttribute("user", user);
request.getSession().setAttribute(Globals.LOCALE_KEY, user.getLocale());
 
String origin = BackPath.findBackPath(request).getBackwardUrl();
if(origin == null || origin.length() <= 0) {
/sun/hostadmiral/trunk/src/ak/hostadmiral/core/action/UserAction.java
89,6 → 89,7
if(u.getBoss() != null)
showForm.set("boss", StringConverter.toString(u.getBoss().getId()));
showForm.set("superuser", u.getSuperuser());
showForm.set("locale", u.getLocale().toString());
showForm.set("enabled", u.getEnabled());
showForm.set("comment", u.getComment());
}
100,6 → 101,18
else
return mapping.findForward("view");
}
else if("partedit".equals(mapping.getParameter())) {
DynaActionForm theForm = (DynaActionForm)form;
Long userId = StringConverter.parseLong(theForm.get("id"));
User u = UserManager.getInstance().get(user, userId);
DynaActionForm showForm = (DynaActionForm)RequestUtilsX.populateActionForm(
this, request, "ak.hostadmiral.core.form.UserPartEditForm");
 
showForm.set("locale", u.getLocale().toString());
initUserList(request, user);
request.setAttribute("u", u);
return mapping.findForward("default");
}
else if("deleting".equals(mapping.getParameter())) {
DynaActionForm theForm = (DynaActionForm)form;
Long userId = StringConverter.parseLong(theForm.get("id"));
163,6 → 176,7
else
u.setBoss(user, UserManager.getInstance().get(user, bossId));
 
u.setLocaleName(user, (String)theForm.get("locale"));
u.setEnabled(user, (Boolean)theForm.get("enabled"));
u.setComment(user, (String)theForm.get("comment"));
}
172,7 → 186,7
 
if(password != null && !password.equals("")
&& u.editableBy(user) // more strong condition, because normal
&& u.mayChangePassword(user)) // user have to enter first the old password
&& u.partEditableBy(user)) // user have to enter first the old password
{
u.setPassword(user, password);
}
181,6 → 195,16
response.sendRedirect(BackPath.findBackPath(request).getBackwardUrl());
return null;
}
else if("partsubmit".equals(mapping.getParameter())) {
DynaActionForm theForm = (DynaActionForm)form;
Long userId = StringConverter.parseLong(theForm.get("id"));
User u = UserManager.getInstance().get(user, userId);
 
u.setLocaleName(user, (String)theForm.get("locale"));
UserManager.getInstance().save(user, u);
response.sendRedirect(BackPath.findBackPath(request).getBackwardUrl());
return null;
}
else {
throw new Exception("unknown mapping parameter");
}
/sun/hostadmiral/trunk/src/ak/hostadmiral/core/CoreResources.properties
25,6 → 25,7
ak.hostadmiral.core.user.id.wrong=Please select an user from the list
ak.hostadmiral.core.user.deletemeself=Can not delete the user you are logged in
ak.hostadmiral.core.user.boss.id.wrong=Please select a boss from the list
ak.hostadmiral.core.user.locale.wrong=Please select a locale from the list
ak.hostadmiral.core.user.system.uid.nonunique=The UID already exists
ak.hostadmiral.core.user.system.name.nonunique=The user name already exists
ak.hostadmiral.core.domain.name.nonunique=The domain name already exists
73,6 → 74,7
ak.hostadmiral.page.index.mail_box_list=mail boxes
ak.hostadmiral.page.index.logout=logout
ak.hostadmiral.page.index.login=Logged in as
ak.hostadmiral.page.index.locale=Locale
 
ak.hostadmiral.page.system.login.title=Host Admiral - login
ak.hostadmiral.page.system.login.login=Login
99,6 → 101,7
ak.hostadmiral.page.user.list.enabled=Enabled
ak.hostadmiral.page.user.list.delete=delete
ak.hostadmiral.page.user.list.edit=edit
ak.hostadmiral.page.user.list.partedit=edit
ak.hostadmiral.page.user.list.view=view
ak.hostadmiral.page.user.list.add=add new user
ak.hostadmiral.page.user.list.back=back
128,6 → 131,7
ak.hostadmiral.page.user.edit.superuser=Superuser
ak.hostadmiral.page.user.edit.superuser.true=yes
ak.hostadmiral.page.user.edit.superuser.false=no
ak.hostadmiral.page.user.edit.locale=Locale
ak.hostadmiral.page.user.edit.enabled=Enabled
ak.hostadmiral.page.user.edit.comment=Comment
ak.hostadmiral.page.user.edit.submit=submit
141,6 → 145,7
ak.hostadmiral.page.user.view.superuser=Superuser
ak.hostadmiral.page.user.view.superuser.true=yes
ak.hostadmiral.page.user.view.superuser.false=no
ak.hostadmiral.page.user.view.locale=Locale
ak.hostadmiral.page.user.view.enabled=Enabled
ak.hostadmiral.page.user.view.enabled.true=yes
ak.hostadmiral.page.user.view.enabled.false=no
148,6 → 153,22
ak.hostadmiral.page.user.view.back=back
ak.hostadmiral.page.user.view.logins=login history
 
ak.hostadmiral.page.user.partedit.title=Host Admiral - user - edit
ak.hostadmiral.page.user.partedit.login=Login
ak.hostadmiral.page.user.partedit.boss=Boss
ak.hostadmiral.page.user.partedit.boss.empty=[no boss]
ak.hostadmiral.page.user.partedit.superuser=Superuser
ak.hostadmiral.page.user.partedit.superuser.true=yes
ak.hostadmiral.page.user.partedit.superuser.false=no
ak.hostadmiral.page.user.partedit.locale=Locale
ak.hostadmiral.page.user.partedit.enabled=Enabled
ak.hostadmiral.page.user.partedit.enabled.true=yes
ak.hostadmiral.page.user.partedit.enabled.false=no
ak.hostadmiral.page.user.partedit.comment=Comment
ak.hostadmiral.page.user.partedit.submit=submit
ak.hostadmiral.page.user.partedit.back=back
ak.hostadmiral.page.user.partedit.logins=login history
 
ak.hostadmiral.page.user.system.list.title=Host Admiral - system users - list
ak.hostadmiral.page.user.system.list.uid=System ID
ak.hostadmiral.page.user.system.list.name=User name
/sun/hostadmiral/trunk/src/ak/hostadmiral/core/model/InetDomainManager.java
26,7 → 26,7
registered = true;
try {
HibernateUtil.getConfiguration().addResource(
"/ak/hostadmiral/core/model/InetDomain.hbm.xml");
"ak/hostadmiral/core/model/InetDomain.hbm.xml");
 
inetDomainManager = new InetDomainManager();
}
/sun/hostadmiral/trunk/src/ak/hostadmiral/core/model/MailboxManager.java
29,7 → 29,7
registered = true;
try {
HibernateUtil.getConfiguration().addResource(
"/ak/hostadmiral/core/model/Mailbox.hbm.xml");
"ak/hostadmiral/core/model/Mailbox.hbm.xml");
 
mailboxManager = new MailboxManager();
}
/sun/hostadmiral/trunk/src/ak/hostadmiral/core/model/MailAliasManager.java
18,7 → 18,7
registered = true;
try {
HibernateUtil.getConfiguration().addResource(
"/ak/hostadmiral/core/model/MailAlias.hbm.xml");
"ak/hostadmiral/core/model/MailAlias.hbm.xml");
}
catch(Exception ex) {
ex.printStackTrace();
/sun/hostadmiral/trunk/src/ak/hostadmiral/core/model/MailAliasDestinationManager.java
17,7 → 17,7
registered = true;
try {
HibernateUtil.getConfiguration().addResource(
"/ak/hostadmiral/core/model/MailAliasDestination.hbm.xml");
"ak/hostadmiral/core/model/MailAliasDestination.hbm.xml");
}
catch(Exception ex) {
ex.printStackTrace();
/sun/hostadmiral/trunk/src/ak/hostadmiral/core/model/UserManager.java
26,9 → 26,9
registered = true;
try {
HibernateUtil.getConfiguration().addResource(
"/ak/hostadmiral/core/model/User.hbm.xml");
"ak/hostadmiral/core/model/User.hbm.xml");
HibernateUtil.getConfiguration().addResource(
"/ak/hostadmiral/core/model/UserLogin.hbm.xml");
"ak/hostadmiral/core/model/UserLogin.hbm.xml");
 
userManager = new UserManager();
}
44,6 → 44,7
}
 
private Collection beforeDeleteListeners = new ArrayList();
private Map loggedinUsers = new WeakHashMap();
 
private UserManager()
{
128,7 → 129,7
public void save(User editor, User user)
throws ModelException
{
if(!user.editableBy(editor) && !user.mayChangePassword(editor)
if(!user.editableBy(editor) && !user.partEditableBy(editor)
&& !user.mayChangeSuperuser(editor))
{
throw new ModelSecurityException();
143,6 → 144,13
{
throw new ModelException(ex);
}
 
// update user if he is logged in
for(Iterator i = loggedinUsers.keySet().iterator(); i.hasNext(); ) {
User u = (User)i.next();
if(u.equals(user))
u.update(user);
}
}
 
public void addBeforeDeleteListener(UserBeforeDeleteListener listener)
242,10 → 250,13
throw new ModelException(ex);
}
 
if(success)
if(success) {
loggedinUsers.put(user, Boolean.TRUE);
return user;
else
}
else {
return null; // wrong login or password
}
}
 
public Collection listFailedLogins(User editor)
/sun/hostadmiral/trunk/src/ak/hostadmiral/core/model/SystemUserManager.java
26,7 → 26,7
registered = true;
try {
HibernateUtil.getConfiguration().addResource(
"/ak/hostadmiral/core/model/SystemUser.hbm.xml");
"ak/hostadmiral/core/model/SystemUser.hbm.xml");
 
systemUserManager = new SystemUserManager();
}
/sun/hostadmiral/trunk/src/ak/hostadmiral/core/model/User.java
2,6 → 2,8
 
import java.util.Collection;
import java.util.Collections;
import java.util.Locale;
import java.util.StringTokenizer;
 
import ak.hostadmiral.util.Digest;
import ak.hostadmiral.util.ModelException;
18,6 → 20,7
private String password;
private User boss;
private Boolean superuser;
private Locale locale = Locale.getDefault();
private Collection loginHistory;
 
protected User()
64,7 → 67,7
public void setPassword(User editor, String password)
throws ModelException
{
if(!mayChangePassword(editor))
if(!partEditableBy(editor))
throw new ModelSecurityException();
 
if(password == null)
139,6 → 142,57
 
/**
*
* @hibernate.property column="locale"
*/
protected String getLocaleName()
{
return locale.toString();
}
 
protected void setLocaleName(String localeName)
{
String language = null;
String country = null;
 
if(localeName != null) {
StringTokenizer t = new StringTokenizer(localeName, "_");
if(t.hasMoreTokens()) language = t.nextToken();
if(t.hasMoreTokens()) country = t.nextToken();
}
 
if(language == null)
this.locale = Locale.getDefault();
else if(country == null)
this.locale = new Locale(language);
else
this.locale = new Locale(language, country);
}
 
public void setLocaleName(User editor, String localeName)
throws ModelException
{
if(!partEditableBy(editor))
throw new ModelSecurityException();
 
setLocaleName(localeName);
}
 
public Locale getLocale()
{
return locale;
}
 
public void setLocale(User editor, Locale locale)
throws ModelException
{
if(!partEditableBy(editor))
throw new ModelSecurityException();
 
this.locale = locale;
}
 
/**
*
* @hibernate.set lazy="true"
* @hibernate.collection-key column="usr"
* @hibernate.collection-one-to-many class="ak.hostadmiral.core.model.UserLogin"
166,6 → 220,14
return (getId() != null) && (u.getId() != null) && (getId().equals(u.getId()));
}
 
protected void update(User origin)
{
this.login = origin.login;
this.boss = origin.boss;
this.superuser = origin.superuser;
this.locale = origin.locale;
}
 
public int hashCode()
{
if(getId() == null)
204,7 → 266,8
return !user.equals(this) && (user.isSuperuser() || user.equals(boss));
}
 
public boolean mayChangePassword(User user)
// editor is allowed to change some additional properties
public boolean partEditableBy(User user)
{
return user.isSuperuser() || user.equals(boss) || user.equals(this);
}
/sun/hostadmiral/trunk/src/ak/hostadmiral/core/taglib/LocaleOptionsTag.java
0,0 → 1,49
// based on jakarta struts taglib
package ak.hostadmiral.core.taglib;
 
import java.util.Locale;
import javax.servlet.jsp.JspException;
 
import org.apache.struts.taglib.html.Constants;
import org.apache.struts.taglib.html.SelectTag;
import org.apache.struts.taglib.html.OptionsTag;
import org.apache.struts.util.MessageResources;
import org.apache.struts.util.ResponseUtils;
 
import ak.hostadmiral.core.Locales;
import ak.hostadmiral.core.model.User;
 
public class LocaleOptionsTag extends OptionsTag
{
protected static MessageResources coreMessages =
MessageResources.getMessageResources("ak.hostadmiral.core.CoreResources");
 
public int doEndTag() throws JspException
{
SelectTag selectTag = (SelectTag) pageContext.getAttribute(Constants.SELECT_KEY);
if (selectTag == null) {
throw new JspException(messages.getMessage("optionsTag.select"));
}
 
User user = (User)pageContext.getSession().getAttribute("user");
if(user == null) throw new JspException("no user found");
Locale userLocale = user.getLocale();
 
StringBuffer sb = new StringBuffer();
Locale[] locales = Locales.getLocales();
for(int i = 0; i < locales.length; i++) {
Locale locale = locales[i];
String stringValue = locale.toString();
String label = locale.getDisplayLanguage(userLocale);
String country = locale.getDisplayCountry(userLocale);
 
if(country != null && !country.equals(""))
label += " / " + country; // FIXME: move the slash to JSP?
 
addOption(sb, stringValue, label, selectTag.isMatched(stringValue));
}
 
ResponseUtils.write(pageContext, sb.toString());
return EVAL_PAGE;
}
}
/sun/hostadmiral/trunk/src/ak/hostadmiral/core/taglib/CountryTag.java
0,0 → 1,29
package ak.hostadmiral.core.taglib;
 
import java.io.IOException;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.tagext.TagSupport;
 
import ak.hostadmiral.core.model.User;
 
public class CountryTag
extends TagSupport
{
public int doStartTag()
throws JspException
{
User user = (User)pageContext.getSession().getAttribute("user");
 
if(user == null)
throw new JspException("no user found");
 
try {
pageContext.getOut().print(user.getLocale().getDisplayCountry(user.getLocale()));
}
catch(IOException ex) {
throw new JspException("Cannot write out: " + ex.getMessage());
}
 
return SKIP_BODY;
}
}
/sun/hostadmiral/trunk/src/ak/hostadmiral/core/taglib/LanguageTag.java
0,0 → 1,29
package ak.hostadmiral.core.taglib;
 
import java.io.IOException;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.tagext.TagSupport;
 
import ak.hostadmiral.core.model.User;
 
public class LanguageTag
extends TagSupport
{
public int doStartTag()
throws JspException
{
User user = (User)pageContext.getSession().getAttribute("user");
 
if(user == null)
throw new JspException("no user found");
 
try {
pageContext.getOut().print(user.getLocale().getDisplayLanguage(user.getLocale()));
}
catch(IOException ex) {
throw new JspException("Cannot write out: " + ex.getMessage());
}
 
return SKIP_BODY;
}
}
/sun/hostadmiral/trunk/src/ak/hostadmiral/core/Locales.java
0,0 → 1,17
package ak.hostadmiral.core;
 
import java.util.Locale;
 
public abstract class Locales
{
private static final Locale[] locales = {
new Locale("en"),
new Locale("de"),
new Locale("ru")
};
 
public static Locale[] getLocales()
{
return locales;
}
}
/sun/hostadmiral/trunk/webapp/index.jsp
35,7 → 35,17
<li><backpath:link action="/system/logout"><bean:message key="ak.hostadmiral.page.index.logout" /></backpath:link></li>
</ul>
 
<p><bean:message key="ak.hostadmiral.page.index.login" />: <bean:write name="user" property="login" /></p>
<p>
<bean:message key="ak.hostadmiral.page.index.login" />:
<bean:write name="user" property="login" />
</p>
<p>
<bean:message key="ak.hostadmiral.page.index.locale" />:
<core:language />
<logic:notEmpty name="user" property="locale.displayCountry">
/ <core:country />
</logic:notEmpty>
</p>
 
</body>
 
/sun/hostadmiral/trunk/webapp/WEB-INF/hostadmiral-core.tld
183,4 → 183,20
<rtexprvalue>true</rtexprvalue>
</attribute>
</tag>
 
<tag>
<name>language</name>
<tagclass>ak.hostadmiral.core.taglib.LanguageTag</tagclass>
<bodycontent>empty</bodycontent>
</tag>
<tag>
<name>country</name>
<tagclass>ak.hostadmiral.core.taglib.CountryTag</tagclass>
<bodycontent>empty</bodycontent>
</tag>
<tag>
<name>localeOptions</name>
<tagclass>ak.hostadmiral.core.taglib.LocaleOptionsTag</tagclass>
<bodycontent>empty</bodycontent>
</tag>
</taglib>
/sun/hostadmiral/trunk/webapp/WEB-INF/struts-config.xml
42,11 → 42,19
<form-property name="password2" type="java.lang.String" />
<form-property name="boss" type="java.lang.String" />
<form-property name="superuser" type="java.lang.Boolean" />
<form-property name="locale" type="java.lang.String" />
<form-property name="enabled" type="java.lang.Boolean" />
<form-property name="comment" type="java.lang.String" />
</form-bean>
 
<form-bean
name="ak.hostadmiral.core.form.UserPartEditForm"
type="org.apache.struts.validator.DynaValidatorForm">
<form-property name="id" type="java.lang.String" />
<form-property name="locale" type="java.lang.String" />
</form-bean>
 
<form-bean
name="ak.hostadmiral.core.form.SystemUserForm"
type="org.apache.struts.validator.DynaValidatorForm">
<form-property name="id" type="java.lang.String" />
250,8 → 258,8
validate="true"
scope="request"
>
<forward name="default" path="/user/edit.jsp" />
<forward name="view" path="/user/view.jsp" />
<forward name="default" path="/user/edit.jsp" />
<forward name="view" path="/user/view.jsp" />
</action>
 
<action
265,6 → 273,28
>
</action>
 
<action
path="/user/partedit"
type="ak.hostadmiral.core.action.UserAction"
parameter="partedit"
name="ak.hostadmiral.core.form.UserForm"
validate="true"
scope="request"
>
<forward name="default" path="/user/partedit.jsp" />
</action>
 
<action
path="/user/partsubmit"
type="ak.hostadmiral.core.action.UserAction"
parameter="partsubmit"
name="ak.hostadmiral.core.form.UserPartEditForm"
validate="true"
scope="request"
input="/user/partedit.jsp"
>
</action>
 
<!-- == system user ======================================================================= -->
 
<action
/sun/hostadmiral/trunk/webapp/WEB-INF/validation.xml
32,7 → 32,7
 
<form name="ak.hostadmiral.core.form.UserForm">
<field property="id" depends="long">
<msg name="long" key="ak.hostadmiral.core.user.id.wrong" />
<msg name="long" key="ak.hostadmiral.core.user.id.wrong" />
</field>
</form>
 
45,29 → 45,42
 
<form name="ak.hostadmiral.core.form.UserEditForm">
<field property="id" depends="long">
<msg name="long" key="ak.hostadmiral.core.user.id.wrong" />
<msg name="long" key="ak.hostadmiral.core.user.id.wrong" />
</field>
<field property="login" depends="required">
<msg name="required" key="ak.hostadmiral.core.login.required" />
</field>
<field property="boss" depends="long">
<msg name="long" key="ak.hostadmiral.core.user.boss.id.wrong" />
<msg name="long" key="ak.hostadmiral.core.user.boss.id.wrong" />
</field>
<field property="locale" depends="required">
<msg name="long" key="ak.hostadmiral.core.user.locale.wrong" />
</field>
</form>
 
<form name="ak.hostadmiral.core.form.UserPartEditForm">
<field property="id" depends="long,required">
<msg name="required" key="ak.hostadmiral.core.user.id.wrong" />
<msg name="long" key="ak.hostadmiral.core.user.id.wrong" />
</field>
<field property="locale" depends="required">
<msg name="long" key="ak.hostadmiral.core.user.locale.wrong" />
</field>
</form>
 
<form name="ak.hostadmiral.core.form.SystemUserForm">
<field property="id" depends="long">
<msg name="long" key="ak.hostadmiral.core.user.system.edit.id.wrong" />
<msg name="long" key="ak.hostadmiral.core.user.system.edit.id.wrong" />
</field>
</form>
 
<form name="ak.hostadmiral.core.form.SystemUserEditForm">
<field property="id" depends="long">
<msg name="long" key="ak.hostadmiral.core.user.system.edit.id.wrong" />
<msg name="long" key="ak.hostadmiral.core.user.system.edit.id.wrong" />
</field>
<field property="uid" depends="required,integer">
<msg name="required" key="ak.hostadmiral.core.user.system.edit.uid.wrong" />
<msg name="integer" key="ak.hostadmiral.core.user.system.edit.uid.wrong" />
<msg name="integer" key="ak.hostadmiral.core.user.system.edit.uid.wrong" />
</field>
<field property="name" depends="required">
<msg name="required" key="ak.hostadmiral.core.user.system.edit.name.required" />
79,43 → 92,43
 
<form name="ak.hostadmiral.core.form.InetDomainForm">
<field property="id" depends="long">
<msg name="long" key="ak.hostadmiral.core.domain.edit.id.wrong" />
<msg name="long" key="ak.hostadmiral.core.domain.edit.id.wrong" />
</field>
</form>
 
<form name="ak.hostadmiral.core.form.InetDomainEditForm">
<field property="id" depends="long">
<msg name="long" key="ak.hostadmiral.core.domain.edit.id.wrong" />
<msg name="long" key="ak.hostadmiral.core.domain.edit.id.wrong" />
</field>
<field property="name" depends="required">
<msg name="required" key="ak.hostadmiral.core.domain.edit.name.empty" />
</field>
<field property="owner" depends="required,long">
<msg name="required" key="ak.hostadmiral.core.domain.edit.owner.wrong" />
<msg name="long" key="ak.hostadmiral.core.domain.edit.owner.wrong" />
<msg name="required" key="ak.hostadmiral.core.domain.edit.owner.wrong" />
</field>
</form>
 
<form name="ak.hostadmiral.core.form.MailboxForm">
<field property="id" depends="long">
<msg name="long" key="ak.hostadmiral.core.mailbox.edit.id.wrong" />
<msg name="long" key="ak.hostadmiral.core.mailbox.edit.id.wrong" />
</field>
</form>
 
<form name="ak.hostadmiral.core.form.MailboxEditForm">
<field property="id" depends="long">
<msg name="long" key="ak.hostadmiral.core.mailbox.edit.id.wrong" />
<msg name="long" key="ak.hostadmiral.core.mailbox.edit.id.wrong" />
</field>
<field property="login" depends="required">
<msg name="required" key="ak.hostadmiral.core.mailbox.edit.login.empty" />
</field>
<field property="domain" depends="required,long">
<msg name="required" key="ak.hostadmiral.core.mailbox.edit.domain.wrong" />
<msg name="long" key="ak.hostadmiral.core.mailbox.edit.domain.wrong" />
<msg name="required" key="ak.hostadmiral.core.mailbox.edit.domain.wrong" />
</field>
<field property="owner" depends="required,long">
<msg name="required" key="ak.hostadmiral.core.mailbox.edit.owner.wrong" />
<msg name="long" key="ak.hostadmiral.core.mailbox.edit.owner.wrong" />
<msg name="required" key="ak.hostadmiral.core.mailbox.edit.owner.wrong" />
</field>
<field property="systemuser" depends="long">
<msg name="long" key="ak.hostadmiral.core.mailbox.edit.systemuser.wrong" />
124,13 → 137,13
 
<form name="ak.hostadmiral.core.form.MailAliasForm">
<field property="id" depends="long">
<msg name="long" key="ak.hostadmiral.core.mail.alias.edit.id.wrong" />
<msg name="long" key="ak.hostadmiral.core.mail.alias.edit.id.wrong" />
</field>
</form>
 
<form name="ak.hostadmiral.core.form.MailAliasEditForm">
<field property="id" depends="long">
<msg name="long" key="ak.hostadmiral.core.mail.alias.edit.id.wrong" />
<msg name="long" key="ak.hostadmiral.core.mail.alias.edit.id.wrong" />
</field>
<field property="domain" depends="long">
<msg name="long" key="ak.hostadmiral.core.mail.alias.edit.domain.wrong" />
/sun/hostadmiral/trunk/webapp/user/edit.jsp
60,6 → 60,14
</td>
</tr>
<tr>
<th><bean:message key="ak.hostadmiral.page.user.edit.locale" /></th>
<td>
<html:select property="locale">
<core:localeOptions />
</html:select>
</td>
</tr>
<tr>
<th><bean:message key="ak.hostadmiral.page.user.edit.enabled" /></th>
<td><html:checkbox property="enabled" /></td>
</tr>
/sun/hostadmiral/trunk/webapp/user/list.jsp
51,12 → 51,17
<backpath:link action="/user/edit" paramId="id" paramName="u" paramProperty="id"><bean:message key="ak.hostadmiral.page.user.list.edit" /></backpath:link>
</core:editable>
<core:notEditable name="u">
<core:viewable name="u">
<backpath:link action="/user/edit" paramId="id" paramName="u" paramProperty="id"><bean:message key="ak.hostadmiral.page.user.list.view" /></backpath:link>
</core:viewable>
<core:notViewable name="u">
&nbsp;
</core:notViewable>
<core:rights name="u" method="partEditableBy">
<backpath:link action="/user/partedit" paramId="id" paramName="u" paramProperty="id"><bean:message key="ak.hostadmiral.page.user.list.partedit" /></backpath:link>
</core:rights>
<core:noRights name="u" method="partEditableBy">
<core:viewable name="u">
<backpath:link action="/user/edit" paramId="id" paramName="u" paramProperty="id"><bean:message key="ak.hostadmiral.page.user.list.view" /></backpath:link>
</core:viewable>
<core:notViewable name="u">
&nbsp;
</core:notViewable>
</core:noRights>
</core:notEditable>
</td>
<td>
/sun/hostadmiral/trunk/webapp/user/partedit.jsp
0,0 → 1,90
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %>
<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %>
<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %>
<%@ taglib uri="/WEB-INF/ak-backpath.tld" prefix="backpath" %>
<%@ taglib uri="/WEB-INF/hostadmiral-core.tld" prefix="core" %>
<html>
 
<head>
<meta http-equiv="expires" content="0">
<title><bean:message key="ak.hostadmiral.page.user.partedit.title" /></title>
</head>
 
<body>
 
<h1><bean:message key="ak.hostadmiral.page.user.partedit.title" /></h1>
 
<html:errors/>
 
<html:form action="/user/partsubmit">
<backpath:current />
<html:hidden property="id" />
 
<table border=1>
<tr>
<th><bean:message key="ak.hostadmiral.page.user.partedit.login" /></th>
<td><bean:write name="u" property="login" /></td>
</tr>
<tr>
<th><bean:message key="ak.hostadmiral.page.user.partedit.boss" /></th>
<td>
<logic:present name="u" property="boss">
<bean:write name="u" property="boss.login" />
</logic:present>
<logic:notPresent name="u" property="boss">
<bean:message key="ak.hostadmiral.page.user.partedit.boss.empty" />
</logic:notPresent>
</td>
</tr>
<tr>
<th><bean:message key="ak.hostadmiral.page.user.partedit.superuser" /></th>
<td>
<logic:equal name="u" property="superuser" value="true">
<bean:message key="ak.hostadmiral.page.user.partedit.superuser.true" />
</logic:equal>
<logic:notEqual name="u" property="superuser" value="true">
<bean:message key="ak.hostadmiral.page.user.partedit.superuser.false" />
</logic:notEqual>
</td>
</tr>
<tr>
<th><bean:message key="ak.hostadmiral.page.user.partedit.locale" /></th>
<td>
<html:select property="locale">
<core:localeOptions />
</html:select>
</td>
</tr>
<tr>
<th><bean:message key="ak.hostadmiral.page.user.partedit.enabled" /></th>
<td>
<logic:equal name="u" property="enabled" value="true">
<bean:message key="ak.hostadmiral.page.user.partedit.enabled.true" />
</logic:equal>
<logic:notEqual name="u" property="enabled" value="true">
<bean:message key="ak.hostadmiral.page.user.partedit.enabled.false" />
</logic:notEqual>
</td>
</tr>
<tr>
<th><bean:message key="ak.hostadmiral.page.user.partedit.comment" /></th>
<td><bean:write name="u" property="comment" />&nbsp;</td>
</tr>
<tr>
<td colspan=2>
<html:submit><bean:message key="ak.hostadmiral.page.user.partedit.submit" /></html:submit>
<backpath:backlink><bean:message key="ak.hostadmiral.page.user.partedit.back" /></backpath:backlink>
</td>
</tr>
</table>
 
</html:form>
 
<p>
<backpath:link action="/user/logins" paramId="id" paramName="u" paramProperty="id"><bean:message key="ak.hostadmiral.page.user.partedit.logins" /></backpath:link>
</p>
 
</body>
 
</html>
/sun/hostadmiral/trunk/sql/00.tables.sql
18,6 → 18,7
password varchar(255) not null,
boss integer,
superuser char(1) default ' ' check (superuser = '1' or superuser = ' '),
locale varchar(5) default 'en', -- language_country
enabled char(1) default '1' check (enabled = '1' or enabled = ' '),
comment text,
mod_stamp timestamp,
/sun/hostadmiral/trunk/doc/features.txt
28,3 → 28,5
 
Hosting plans management, billing, resellers level
 
Firewall control to open ports to listen
 
/sun/hostadmiral/trunk/doc/todo.txt
28,7 → 28,7
 
Multi-page lists.
 
Sort options for lists.
Sort options for lists.
 
Different user name schemes, not only user@domain. Define an interface to allow admin
implement an own one. Implement a few common ones.
38,7 → 38,8
Allow to use existing system users: enter uid or name only, check in system for full
information.
 
I18n. Switch language of page on the fly. Save selection in DB for each user.
+ I18n. Switch language of page on the fly. Save selection in DB for each user.
 
Allow admin to define default language for server and domain.
 
Split CoreResources.properties to several files.
64,4 → 65,4
 
Basic scripts to push changes to the system.
 
If mailbox is created, create an user and a mail alias for it in one step - as option.
If mailbox is created, create an user and a mail alias for it in one step - as option.