diff --git a/migration/360lts-release/oracle/871_IDEMPIERE_358.sql b/migration/360lts-release/oracle/871_IDEMPIERE_358.sql new file mode 100644 index 0000000000..8d499ebb4b --- /dev/null +++ b/migration/360lts-release/oracle/871_IDEMPIERE_358.sql @@ -0,0 +1,19 @@ +-- Aug 8, 2012 9:58:31 AM COT +-- IDEMPIERE-358 Login- how to make unique and safe +INSERT INTO AD_SysConfig (AD_SysConfig_ID,EntityType,ConfigurationLevel,Value,Description,AD_SysConfig_UU,Created,Updated,AD_Client_ID,AD_Org_ID,CreatedBy,IsActive,UpdatedBy,Name) VALUES (200014,'D','S','N','Use email for login multitenant, WARNING! Before enabling this please check all your users have email filled','70cb7f9b-9993-4f38-a8df-4ce9840af9cf',TO_DATE('2012-08-08 09:58:29','YYYY-MM-DD HH24:MI:SS'),TO_DATE('2012-08-08 09:58:29','YYYY-MM-DD HH24:MI:SS'),0,0,0,'Y',0,'USE_EMAIL_FOR_LOGIN') +; + +-- This is to prevent somebody changing the sysconfig key and disabling access to system roles +update ad_user set email='superuser @ idempiere.com' where name = 'SuperUser'; + +update ad_user set email='system @ idempiere.com' where name = 'System'; + +-- delete wrong GardenAdmin record assigning a system role +delete from ad_user_roles where ad_user_id=101 and ad_role_id=50002 and ad_client_id=0; + +UPDATE AD_System + SET LastMigrationScriptApplied='871_IDEMPIERE_358.sql' +WHERE LastMigrationScriptApplied<'871_IDEMPIERE_358.sql' + OR LastMigrationScriptApplied IS NULL +; + diff --git a/migration/360lts-release/postgresql/871_IDEMPIERE_358.sql b/migration/360lts-release/postgresql/871_IDEMPIERE_358.sql new file mode 100644 index 0000000000..5559d90ba7 --- /dev/null +++ b/migration/360lts-release/postgresql/871_IDEMPIERE_358.sql @@ -0,0 +1,18 @@ +-- Aug 8, 2012 9:58:31 AM COT +-- IDEMPIERE-358 Login- how to make unique and safe +INSERT INTO AD_SysConfig (AD_SysConfig_ID,EntityType,ConfigurationLevel,Value,Description,AD_SysConfig_UU,Created,Updated,AD_Client_ID,AD_Org_ID,CreatedBy,IsActive,UpdatedBy,Name) VALUES (200014,'D','S','N','Use email for login multitenant, WARNING! Before enabling this please check all your users have email filled','70cb7f9b-9993-4f38-a8df-4ce9840af9cf',TO_TIMESTAMP('2012-08-08 09:58:29','YYYY-MM-DD HH24:MI:SS'),TO_TIMESTAMP('2012-08-08 09:58:29','YYYY-MM-DD HH24:MI:SS'),0,0,0,'Y',0,'USE_EMAIL_FOR_LOGIN') +; + +-- This is to prevent somebody changing the sysconfig key and disabling access to system roles +update ad_user set email='superuser @ idempiere.com' where name = 'SuperUser'; + +update ad_user set email='system @ idempiere.com' where name = 'System'; + +-- delete wrong GardenAdmin record assigning a system role +delete from ad_user_roles where ad_user_id=101 and ad_role_id=50002 and ad_client_id=0; + +UPDATE AD_System + SET LastMigrationScriptApplied='871_IDEMPIERE_358.sql' +WHERE LastMigrationScriptApplied<'871_IDEMPIERE_358.sql' + OR LastMigrationScriptApplied IS NULL +; diff --git a/org.adempiere.base/src/org/compiere/model/MUser.java b/org.adempiere.base/src/org/compiere/model/MUser.java index 0a691b106e..7120e3c87e 100644 --- a/org.adempiere.base/src/org/compiere/model/MUser.java +++ b/org.adempiere.base/src/org/compiere/model/MUser.java @@ -36,6 +36,7 @@ import org.compiere.util.CCache; import org.compiere.util.CLogger; import org.compiere.util.DB; import org.compiere.util.Env; +import org.compiere.util.Msg; import org.compiere.util.Secure; import org.compiere.util.SecureEngine; @@ -54,7 +55,7 @@ public class MUser extends X_AD_User /** * */ - private static final long serialVersionUID = -5343496366428193731L; + private static final long serialVersionUID = 239972951892250043L; /** * Get active Users of BPartner @@ -471,6 +472,8 @@ public class MUser extends X_AD_User String hash = null; String salt = null; + + boolean valid=false; hash = getPassword(); salt = getSalt(); @@ -482,13 +485,15 @@ public class MUser extends X_AD_User salt = "0000000000000000"; try { - return SecureEngine.getSHA512Hash(1000, password, Secure.convertHexString(salt)).equals(hash); + valid= SecureEngine.getSHA512Hash(1000, password, Secure.convertHexString(salt)).equals(hash); } catch (NoSuchAlgorithmException ignored) { log.log(Level.WARNING, "Password hashing not supported by JVM"); } catch (UnsupportedEncodingException ignored) { log.log(Level.WARNING, "Password hashing not supported by JVM"); } - return false; + + return valid; + } /** @@ -917,6 +922,23 @@ public class MUser extends X_AD_User if (newRecord || super.getValue() == null || is_ValueChanged("Value")) setValue(super.getValue()); + boolean email_login = MSysConfig.getBooleanValue("USE_EMAIL_FOR_LOGIN", false); + if (email_login && getPassword() != null && getPassword().length() > 0) { + // email is mandatory for users with password + if (getEMail() == null || getEMail().length() == 0) { + log.saveError("FillMandatory", Msg.getElement(getCtx(), COLUMNNAME_EMail)); + return false; + } + // email with password must be unique on the same tenant + int cnt = DB.getSQLValue(get_TrxName(), + "SELECT COUNT(*) FROM AD_User WHERE Password IS NOT NULL AND EMail=? AND AD_Client_ID=? AND AD_User_ID!=?", + getEMail(), getAD_Client_ID(), getAD_User_ID()); + if (cnt > 0) { + log.saveError("SaveErrorNotUnique", Msg.getElement(getCtx(), COLUMNNAME_EMail)); + return false; + } + } + if (newRecord || is_ValueChanged("Password")) { // Validate password policies / IDEMPIERE-221 if (get_ValueOld("Salt") == null && get_Value("Salt") != null) { // being hashed @@ -928,7 +950,7 @@ public class MUser extends X_AD_User pwdrule.validate((getLDAPUser() != null ? getLDAPUser() : getName()), getPassword()); } } - + // Hash password - IDEMPIERE-347 boolean hash_password = MSysConfig.getBooleanValue("USER_PASSWORD_HASH", false); if (hash_password) @@ -938,6 +960,8 @@ public class MUser extends X_AD_User return true; } // beforeSave + + /** * Is Menu Auto Expand - user preference * Check if the user has a preference, otherwise use the value from current role @@ -951,6 +975,62 @@ public class MUser extends X_AD_User isMenuAutoExpand = MRole.getDefault().isMenuAutoExpand(); return isMenuAutoExpand; } + + /** + * Get User that has roles (already authenticated) + * @param ctx context + * @param name name + * @return user or null + */ + public static MUser get(Properties ctx, String name) { + if (name == null || name.length() == 0) + { + s_log.warning ("Invalid Name = " + name); + return null; + } + MUser retValue = null; + int AD_Client_ID = Env.getAD_Client_ID(ctx); + + StringBuffer sql = new StringBuffer("SELECT DISTINCT u.AD_User_ID ") + .append("FROM AD_User u") + .append(" INNER JOIN AD_User_Roles ur ON (u.AD_User_ID=ur.AD_User_ID AND ur.IsActive='Y')") + .append(" INNER JOIN AD_Role r ON (ur.AD_Role_ID=r.AD_Role_ID AND r.IsActive='Y') "); + sql.append("WHERE u.Password IS NOT NULL AND ur.AD_Client_ID=? AND "); // #1/2 + boolean email_login = MSysConfig.getBooleanValue("USE_EMAIL_FOR_LOGIN", false); + if (email_login) + sql.append("u.EMail=?"); + else + sql.append("COALESCE(u.LDAPUser,u.Name)=?"); + sql.append(" AND u.IsActive='Y'").append(" AND EXISTS (SELECT * FROM AD_Client c WHERE u.AD_Client_ID=c.AD_Client_ID AND c.IsActive='Y')"); + + PreparedStatement pstmt = null; + ResultSet rs = null; + try + { + pstmt = DB.prepareStatement (sql.toString(), null); + pstmt.setInt(1, AD_Client_ID); + pstmt.setString (2, name); + rs = pstmt.executeQuery (); + if (rs.next()) + { + retValue = new MUser (ctx, rs.getInt(1), null); + if (rs.next()) + s_log.warning ("More then one user with Name/Password = " + name); + } + else + s_log.fine("No record"); + } + catch (Exception e) + { + s_log.log(Level.SEVERE, sql.toString(), e); + } + finally + { + DB.close(rs, pstmt); + rs = null; pstmt = null; + } + return retValue; + } /** * Test diff --git a/org.adempiere.base/src/org/compiere/util/Login.java b/org.adempiere.base/src/org/compiere/util/Login.java index 5e00471f46..97e7e4ae02 100644 --- a/org.adempiere.base/src/org/compiere/util/Login.java +++ b/org.adempiere.base/src/org/compiere/util/Login.java @@ -22,6 +22,7 @@ import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.util.ArrayList; +import java.util.List; import java.util.Locale; import java.util.Properties; import java.util.logging.Level; @@ -41,6 +42,7 @@ import org.compiere.model.MTable; import org.compiere.model.MTree_Base; import org.compiere.model.MUser; import org.compiere.model.ModelValidationEngine; +import org.compiere.model.Query; /** @@ -556,34 +558,37 @@ public class Login * @param client client information * @return list of valid Org KeyNodePairs or null if in error */ - public KeyNamePair[] getOrgs (KeyNamePair client) + public KeyNamePair[] getOrgs (KeyNamePair rol) { - if (client == null) - throw new IllegalArgumentException("Client missing"); - if (Env.getContext(m_ctx,"#AD_Role_ID").length() == 0) // could be number 0 - throw new UnsupportedOperationException("Missing Context #AD_Role_ID"); + if (rol == null) + throw new IllegalArgumentException("Rol missing"); + if (Env.getContext(m_ctx,"#AD_Client_ID").length() == 0) // could be number 0 + throw new UnsupportedOperationException("Missing Context #AD_Client_ID"); - int AD_Role_ID = Env.getContextAsInt(m_ctx,"#AD_Role_ID"); + int AD_Client_ID = Env.getContextAsInt(m_ctx,"#AD_Client_ID"); int AD_User_ID = Env.getContextAsInt(m_ctx, "#AD_User_ID"); // s_log.fine("Client: " + client.toStringX() + ", AD_Role_ID=" + AD_Role_ID); // get Client details for role ArrayList list = new ArrayList(); KeyNamePair[] retValue = null; - // - String sql = "SELECT o.AD_Org_ID,o.Name,o.IsSummary " // 1..3 - + "FROM AD_Role r, AD_Client c" - + " INNER JOIN AD_Org o ON (c.AD_Client_ID=o.AD_Client_ID OR o.AD_Org_ID=0) " - + "WHERE r.AD_Role_ID=?" // #1 - + " AND c.AD_Client_ID=?" // #2 - + " AND o.IsActive='Y' AND o.IsSummary='N'" - + " AND (r.IsAccessAllOrgs='Y' " - + "OR (r.IsUseUserOrgAccess='N' AND o.AD_Org_ID IN (SELECT AD_Org_ID FROM AD_Role_OrgAccess ra " - + "WHERE ra.AD_Role_ID=r.AD_Role_ID AND ra.IsActive='Y')) " - + "OR (r.IsUseUserOrgAccess='Y' AND o.AD_Org_ID IN (SELECT AD_Org_ID FROM AD_User_OrgAccess ua " - + "WHERE ua.AD_User_ID=? AND ua.IsActive='Y'))" // #3 - + ") " - + "ORDER BY o.Name"; + // + String sql = " SELECT DISTINCT r.UserLevel, r.ConnectionProfile,o.AD_Org_ID,o.Name,o.IsSummary " + +" FROM AD_Org o" + +" INNER JOIN AD_Role_OrgAccess ra ON (ra.AD_Org_ID=o.AD_Org_ID)" + +" INNER JOIN AD_Role r on (ra.AD_Role_ID=r.AD_Role_ID) " + +" INNER JOIN AD_Client c on (ra.AD_Client_ID=c.AD_Client_ID)" + +" WHERE r.AD_Role_ID=?" + +" AND c.AD_Client_ID=?" + +" AND o.IsActive='Y' " + +" AND o.IsSummary='N'" + +" AND (r.IsAccessAllOrgs='Y'" + +" OR (r.IsUseUserOrgAccess='N' AND o.AD_Org_ID IN (SELECT AD_Org_ID FROM AD_Role_OrgAccess ra" + +" WHERE ra.AD_Role_ID=r.AD_Role_ID AND ra.IsActive='Y')) " + +" OR (r.IsUseUserOrgAccess='Y' AND o.AD_Org_ID IN (SELECT AD_Org_ID FROM AD_User_OrgAccess ua" + +" WHERE ua.AD_User_ID=?" + +" AND ua.IsActive='Y')))" + + "ORDER BY o.Name"; // PreparedStatement pstmt = null; MRole role = null; @@ -591,60 +596,79 @@ public class Login try { pstmt = DB.prepareStatement(sql, null); - pstmt.setInt(1, AD_Role_ID); - pstmt.setInt(2, client.getKey()); + pstmt.setInt(1, rol.getKey()); + pstmt.setInt(2, AD_Client_ID); pstmt.setInt(3, AD_User_ID); rs = pstmt.executeQuery(); // load Orgs - while (rs.next()) - { - int AD_Org_ID = rs.getInt(1); - String Name = rs.getString(2); - boolean summary = "Y".equals(rs.getString(3)); - if (summary) - { - if (role == null) - role = MRole.get(m_ctx, AD_Role_ID); - getOrgsAddSummary (list, AD_Org_ID, Name, role); - } - else - { - KeyNamePair p = new KeyNamePair(AD_Org_ID, Name); - if (!list.contains(p)) - list.add(p); - } - } - // - retValue = new KeyNamePair[list.size()]; - list.toArray(retValue); - log.fine("Client: " + client.toStringX() - + ", AD_Role_ID=" + AD_Role_ID - + ", AD_User_ID=" + AD_User_ID - + " - orgs #" + retValue.length); - } - catch (SQLException ex) - { - log.log(Level.SEVERE, sql, ex); - retValue = null; - } + if (!rs.next()) + { + rs.close(); + pstmt.close(); + log.log(Level.SEVERE, "No org for Role: " + rol.toStringX()); + return null; + } + // Role Info + Env.setContext(m_ctx, "#AD_Role_ID", rol.getKey()); + Env.setContext(m_ctx, "#AD_Role_Name", rol.getName()); + Ini.setProperty(Ini.P_ROLE, rol.getName()); + // User Level + Env.setContext(m_ctx, "#User_Level", rs.getString(1)); // Format 'SCO' + // ConnectionProfile + CConnection cc = CConnection.get(); + if (m_connectionProfile == null) // No User Based + { + m_connectionProfile = rs.getString(2); // Role Based + if (m_connectionProfile != null && !cc.getConnectionProfile().equals(m_connectionProfile)) + { + cc.setConnectionProfile(m_connectionProfile); + Ini.setProperty(Ini.P_CONNECTION, cc.toStringLong()); + Ini.saveProperties(false); + } + } + // load Orgs + + do{ + int AD_Org_ID = rs.getInt(3); + String Name = rs.getString(4); + boolean summary = "Y".equals(rs.getString(5)); + if (summary) + { + if (role == null) + role = MRole.get(m_ctx, rol.getKey()); + getOrgsAddSummary (list, AD_Org_ID, Name, role); + } + else + { + KeyNamePair p = new KeyNamePair(AD_Org_ID, Name); + if (!list.contains(p)) + list.add(p); + } + }while (rs.next()); + + retValue = new KeyNamePair[list.size()]; + list.toArray(retValue); + + log.fine("Client: " + AD_Client_ID +", AD_Role_ID=" + rol.getName()+", AD_User_ID=" + AD_User_ID+" - orgs #" + retValue.length); + } + catch (SQLException ex) + { + log.log(Level.SEVERE, sql, ex); + retValue = null; + } finally { DB.close(rs, pstmt); rs = null; pstmt = null; - } - // No Orgs - if (retValue == null || retValue.length == 0) - { - log.log(Level.WARNING, "No Org for Client: " + client.toStringX() - + ", AD_Role_ID=" + AD_Role_ID - + ", AD_User_ID=" + AD_User_ID); - return null; - } - - // Client Info - Env.setContext(m_ctx, "#AD_Client_ID", client.getKey()); - Env.setContext(m_ctx, "#AD_Client_Name", client.getName()); - Ini.setProperty(Ini.P_CLIENT, client.getName()); + } + + if (retValue == null || retValue.length == 0) + { + log.log(Level.WARNING, "No Org for Client: " + AD_Client_ID + + ", AD_Role_ID=" + rol.getKey() + + ", AD_User_ID=" + AD_User_ID); + return null; + } return retValue; } // getOrgs @@ -1233,6 +1257,223 @@ public class Login public Principal getPrincipal() { return null; - } // getPrincipal - + } // getPrincipal + + /** + * Validate Client Login. + * Sets Context with login info + * @param app_user user id + * @param app_pwd password + * @return client array or null if in error. + */ + public KeyNamePair[] getClients(String app_user, String app_pwd) { + log.info("User=" + app_user); + + if (app_user == null) + { + log.warning("No Apps User"); + return null; + } + + // Authentication + boolean authenticated = false; + MSystem system = MSystem.get(m_ctx); + if (system == null) + throw new IllegalStateException("No System Info"); + + if (app_pwd == null || app_pwd.length() == 0) + { + log.warning("No Apps Password"); + return null; + } + + if (system.isLDAP()) + { + authenticated = system.isLDAP(app_user, app_pwd); + if (authenticated){ + app_pwd = null; + authenticated=true; + } + // if not authenticated, use AD_User as backup + } + + boolean hash_password = MSysConfig.getBooleanValue("USER_PASSWORD_HASH", false); + boolean email_login = MSysConfig.getBooleanValue("USE_EMAIL_FOR_LOGIN", false); + KeyNamePair[] retValue = null; + ArrayList clientList = new ArrayList(); + ArrayList clientsValidated = new ArrayList(); + + StringBuffer where = new StringBuffer("Password IS NOT NULL AND "); + if (email_login) + where.append("EMail=?"); + else + where.append("COALESCE(LDAPUser,Name)=?"); + where.append(" AND") + .append(" EXISTS (SELECT * FROM AD_User_Roles ur") + .append(" INNER JOIN AD_Role r ON (ur.AD_Role_ID=r.AD_Role_ID)") + .append(" WHERE ur.AD_User_ID=AD_User.AD_User_ID AND ur.IsActive='Y' AND r.IsActive='Y') AND ") + .append(" EXISTS (SELECT * FROM AD_Client c") + .append(" WHERE c.AD_Client_ID=AD_User.AD_Client_ID") + .append(" AND c.IsActive='Y') AND ") + .append(" AD_User.IsActive='Y'"); + + List users = new Query(m_ctx, MUser.Table_Name, where.toString(), null) + .setParameters(app_user) + .setOrderBy(MUser.COLUMNNAME_AD_User_ID) + .list(); + + if (users.size() == 0) { + log.saveError("UserPwdError", app_user, false); + return null; + } + + for (MUser user : users) { + if (clientsValidated.contains(user.getAD_Client_ID())) { + log.severe("Two users with password with the same name/email combination on same tenant: " + app_user); + return null; + } + clientsValidated.add(user.getAD_Client_ID()); + boolean valid = false; + if (hash_password) { + String hash = user.getPassword(); + String salt = user.getSalt(); + // always do calculation to confuse timing based attacks + if ( hash == null ) + hash = "0000000000000000"; + if ( salt == null ) + salt = "0000000000000000"; + valid = user.authenticateHash(app_pwd); + } else { + // password not hashed + valid = user.getPassword().equals(app_pwd); + } + if (valid ) { + StringBuffer sql= new StringBuffer("SELECT DISTINCT cli.AD_Client_ID, cli.Name, u.AD_User_ID, u.Name"); + sql.append(" FROM AD_User_Roles ur") + .append(" INNER JOIN AD_User u on (ur.AD_User_ID=u.AD_User_ID)") + .append(" INNER JOIN AD_Client cli on (ur.AD_Client_ID=cli.AD_Client_ID)") + .append(" WHERE ur.IsActive='Y'") + .append(" AND u.IsActive='Y'") + .append(" AND ur.AD_User_ID=?"); + PreparedStatement pstmt=null; + ResultSet rs=null; + try{ + pstmt=DB.prepareStatement(sql.toString(),null); + pstmt.setInt(1, user.getAD_User_ID()); + rs=pstmt.executeQuery(); + + while (rs.next() && rs!=null){ + int AD_Client_ID=rs.getInt(1); + String Name=rs.getString(2); + KeyNamePair p = new KeyNamePair(AD_Client_ID,Name); + clientList.add(p); + } + }catch (SQLException ex) + { + log.log(Level.SEVERE, sql.toString(), ex); + retValue = null; + } + finally + { + DB.close(rs, pstmt); + rs = null; pstmt = null; + } + } + } + if (clientList.size() > 0) + authenticated=true; + + if (authenticated) { + if (Ini.isClient()) + { + if (MSystem.isSwingRememberUserAllowed()) + Ini.setProperty(Ini.P_UID, app_user); + else + Ini.setProperty(Ini.P_UID, ""); + if (Ini.isPropertyBool(Ini.P_STORE_PWD) && MSystem.isSwingRememberPasswordAllowed()) + Ini.setProperty(Ini.P_PWD, app_pwd); + + } + retValue = new KeyNamePair[clientList.size()]; + clientList.toArray(retValue); + log.fine("User=" + app_user + " - roles #" + retValue.length); + + } + return retValue; + } + /************************************************************************** + * Load Roles. + *

+ * Sets Client info in context and loads its roles + * @param client client information + * @return list of valid roles KeyNodePairs or null if in error + */ + public KeyNamePair[] getRoles(String app_user, KeyNamePair client) { + if (client == null) + throw new IllegalArgumentException("Client missing"); + + ArrayList rolesList = new ArrayList(); + KeyNamePair[] retValue = null; + StringBuffer sql = new StringBuffer("SELECT u.AD_User_ID, r.AD_Role_ID,r.Name ") + .append("FROM AD_User u") + .append(" INNER JOIN AD_User_Roles ur ON (u.AD_User_ID=ur.AD_User_ID AND ur.IsActive='Y')") + .append(" INNER JOIN AD_Role r ON (ur.AD_Role_ID=r.AD_Role_ID AND r.IsActive='Y') "); + sql.append("WHERE u.Password IS NOT NULL AND ur.AD_Client_ID=? AND "); + boolean email_login = MSysConfig.getBooleanValue("USE_EMAIL_FOR_LOGIN", false); + if (email_login) + sql.append("u.EMail=?"); + else + sql.append("COALESCE(u.LDAPUser,u.Name)=?"); + sql.append(" AND u.IsActive='Y'").append(" AND EXISTS (SELECT * FROM AD_Client c WHERE u.AD_Client_ID=c.AD_Client_ID AND c.IsActive='Y')"); + sql.append(" ORDER BY r.Name"); + + PreparedStatement pstmt = null; + ResultSet rs = null; + // get Role details + try + { + pstmt = DB.prepareStatement(sql.toString(), null); + pstmt.setInt(1, client.getKey()); + pstmt.setString(2, app_user); + rs = pstmt.executeQuery(); + + if (!rs.next()) + { + rs.close(); + pstmt.close(); + log.log(Level.SEVERE, "No Roles for Client: " + client.toStringX()); + return null; + } + + // load Roles + do + { + int AD_Role_ID = rs.getInt(2); + String Name = rs.getString(3); + KeyNamePair p = new KeyNamePair(AD_Role_ID, Name); + rolesList.add(p); + } + while (rs.next()); + // + retValue = new KeyNamePair[rolesList.size()]; + rolesList.toArray(retValue); + log.fine("Role: " + client.toStringX() + " - clients #" + retValue.length); + } + catch (SQLException ex) + { + log.log(Level.SEVERE, sql.toString(), ex); + retValue = null; + } + finally + { + DB.close(rs, pstmt); + rs = null; pstmt = null; + } + //Client Info + Env.setContext(m_ctx, "#AD_Client_ID", client.getKey()); + Env.setContext(m_ctx, "#AD_Client_Name", client.getName()); + Ini.setProperty(Ini.P_CLIENT, client.getName()); + return retValue; + } // getRoles + } // Login diff --git a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/panel/LoginPanel.java b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/panel/LoginPanel.java index 811d451a59..e48a1a4a0f 100644 --- a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/panel/LoginPanel.java +++ b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/panel/LoginPanel.java @@ -50,6 +50,7 @@ import org.adempiere.webui.window.LoginWindow; import org.compiere.Adempiere; import org.compiere.model.MClient; import org.compiere.model.MSession; +import org.compiere.model.MSysConfig; import org.compiere.model.MSystem; import org.compiere.model.MUser; import org.compiere.util.CLogger; @@ -90,11 +91,11 @@ import org.zkoss.zul.Image; */ public class LoginPanel extends Window implements EventListener { - private static final String ON_LOAD_TOKEN = "onLoadToken"; /** - * + * */ - private static final long serialVersionUID = 3992171368813030624L; + private static final long serialVersionUID = -6308022048294680475L; + private static final String ON_LOAD_TOKEN = "onLoadToken"; private static final String RESOURCE = "org.compiere.apps.ALoginRes"; private ResourceBundle res = ResourceBundle.getBundle(RESOURCE); private static CLogger logger = CLogger.getCLogger(LoginPanel.class); @@ -109,6 +110,7 @@ public class LoginPanel extends Window implements EventListener private LoginWindow wndLogin; private Checkbox chkRememberMe; private Checkbox chkSelectRole; + boolean email_login = MSysConfig.getBooleanValue("USE_EMAIL_FOR_LOGIN", false); public LoginPanel(Properties ctx, LoginWindow loginWindow) { @@ -244,7 +246,15 @@ public class LoginPanel extends Window implements EventListener if (BrowserToken.validateToken(session, user, token)) { if (MSystem.isZKRememberUserAllowed()) { - txtUserId.setValue(user.getName()); + if (email_login) { + txtUserId.setValue(user.getEMail()); + } else { + if (user.getLDAPUser() != null && user.getLDAPUser().length() > 0) { + txtUserId.setValue(user.getLDAPUser()); + } else { + txtUserId.setValue(user.getName()); + } + } onUserIdChange(); chkRememberMe.setChecked(true); } @@ -405,7 +415,10 @@ public class LoginPanel extends Window implements EventListener Locale.setDefault(loc); res = ResourceBundle.getBundle(RESOURCE, loc); - lblUserId.setValue(res.getString("User")); + if (email_login) + lblUserId.setValue(res.getString("EMail")); + else + lblUserId.setValue(res.getString("User")); lblPassword.setValue(res.getString("Password")); lblLanguage.setValue(res.getString("Language")); chkRememberMe.setLabel(Msg.getMsg(language, "RememberMe")); @@ -453,8 +466,8 @@ public class LoginPanel extends Window implements EventListener Session currSess = Executions.getCurrent().getDesktop().getSession(); - KeyNamePair rolesKNPairs[] = login.getRoles(userId, userPassword); - if(rolesKNPairs == null || rolesKNPairs.length == 0) + KeyNamePair clientsKNPairs[] = login.getClients(userId, userPassword); + if (clientsKNPairs == null || clientsKNPairs.length == 0) throw new WrongValueException("User Id or Password invalid!!!"); else @@ -467,7 +480,7 @@ public class LoginPanel extends Window implements EventListener Language language = findLanguage(langName); Env.setContext(ctx, UserPreference.LANGUAGE_NAME, language.getName()); // Elaine 2009/02/06 - wndLogin.loginOk(userId, userPassword, chkSelectRole.isChecked()); + wndLogin.loginOk(userId, userPassword, chkSelectRole.isChecked(), clientsKNPairs); Locale locale = language.getLocale(); currSess.setAttribute(Attributes.PREFERRED_LOCALE, locale); diff --git a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/panel/RolePanel.java b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/panel/RolePanel.java index 72042ea004..0a2e4f0937 100644 --- a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/panel/RolePanel.java +++ b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/panel/RolePanel.java @@ -27,20 +27,19 @@ import java.sql.Timestamp; import java.util.Properties; import java.util.ResourceBundle; -import org.adempiere.webui.AdempiereIdGenerator; +import org.adempiere.webui.AdempiereIdGenerator; import org.adempiere.webui.LayoutUtils; import org.adempiere.webui.component.ComboItem; import org.adempiere.webui.component.Combobox; import org.adempiere.webui.component.ConfirmPanel; import org.adempiere.webui.component.Label; import org.adempiere.webui.component.Window; -import org.adempiere.webui.exception.ApplicationException; +import org.adempiere.webui.editor.WDateEditor; import org.adempiere.webui.session.SessionManager; import org.adempiere.webui.theme.ITheme; import org.adempiere.webui.theme.ThemeManager; import org.adempiere.webui.util.UserPreference; import org.adempiere.webui.window.LoginWindow; -import org.adempiere.webui.editor.WDateEditor; import org.compiere.model.MRole; import org.compiere.model.MSysConfig; import org.compiere.model.MUser; @@ -75,15 +74,14 @@ import org.zkoss.zul.Image; public class RolePanel extends Window implements EventListener, Deferrable { /** - * + * */ - private static final long serialVersionUID = 4485820129703005679L; + private static final long serialVersionUID = 153231955030136145L; private static final String RESOURCE = "org.compiere.apps.ALoginRes"; private LoginWindow wndLogin; private Login login; - private KeyNamePair rolesKNPairs[]; private Combobox lstRole, lstClient, lstOrganisation, lstWarehouse; private Label lblRole, lblClient, lblOrganisation, lblWarehouse, lblDate; @@ -95,26 +93,34 @@ public class RolePanel extends Window implements EventListener, Deferrable /** Username */ private String m_userName; /** Password */ - private String m_password; + private KeyNamePair[] m_clientKNPairs; private boolean m_show = true; - public RolePanel(Properties ctx, LoginWindow loginWindow, String userName, String password, boolean show) { + public RolePanel(Properties ctx, LoginWindow loginWindow, String userName, boolean show, KeyNamePair[] clientsKNPairs) { this.wndLogin = loginWindow; m_ctx = ctx; - m_userName = userName; - m_password = password; login = new Login(ctx); + m_userName = userName; + login = new Login(ctx); m_show = show; - rolesKNPairs = login.getRoles(userName, password); - if(rolesKNPairs == null) - throw new ApplicationException("Login is invalid, UserName: " + userName + " and Password:" + password); + m_clientKNPairs = clientsKNPairs; + initComponents(); init(); this.setId("rolePanel"); if (m_show) { - AuFocus auf = new AuFocus(lstRole); + AuFocus auf = null; + if (lstClient.getItemCount() > 1) { + auf = new AuFocus(lstClient); + } else { + if (MSysConfig.getBooleanValue("ALogin_ShowOneRole", true) || lstRole.getItemCount() > 1) { + auf = new AuFocus(lstRole); + } else { + auf = new AuFocus(lstOrganisation); + } + } Clients.response(auf); } else { validateRoles(); @@ -148,18 +154,6 @@ public class RolePanel extends Window implements EventListener, Deferrable image.setSrc(ThemeManager.getLargeLogo()); td.appendChild(image); - tr = new Tr(); - tr.setId("rowRole"); - table.appendChild(tr); - td = new Td(); - tr.appendChild(td); - td.setSclass(ITheme.LOGIN_LABEL_CLASS); - td.appendChild(lblRole.rightAlign()); - td = new Td(); - td.setSclass(ITheme.LOGIN_FIELD_CLASS); - tr.appendChild(td); - td.appendChild(lstRole); - tr = new Tr(); tr.setId("rowclient"); table.appendChild(tr); @@ -172,6 +166,18 @@ public class RolePanel extends Window implements EventListener, Deferrable tr.appendChild(td); td.appendChild(lstClient); + tr = new Tr(); + tr.setId("rowRole"); + table.appendChild(tr); + td = new Td(); + tr.appendChild(td); + td.setSclass(ITheme.LOGIN_LABEL_CLASS); + td.appendChild(lblRole.rightAlign()); + td = new Td(); + td.setSclass(ITheme.LOGIN_FIELD_CLASS); + tr.appendChild(td); + td.appendChild(lstRole); + tr = new Tr(); tr.setId("rowOrganisation"); table.appendChild(tr); @@ -226,14 +232,14 @@ public class RolePanel extends Window implements EventListener, Deferrable ResourceBundle res = ResourceBundle.getBundle(RESOURCE, language.getLocale()); - lblRole = new Label(); - lblRole.setId("lblRole"); - lblRole.setValue(res.getString("Role")); - lblClient = new Label(); lblClient.setId("lblClient"); lblClient.setValue(res.getString("Client")); + lblRole = new Label(); + lblRole.setId("lblRole"); + lblRole.setValue(res.getString("Role")); + lblOrganisation = new Label(); lblOrganisation.setId("lblOrganisation"); lblOrganisation.setValue(res.getString("Organization")); @@ -294,68 +300,82 @@ public class RolePanel extends Window implements EventListener, Deferrable btnCancel.setId("btnCancel"); btnCancel.setLabel("Cancel"); btnCancel.addEventListener("onClick", this); - - // initial role - Elaine 2009/02/06 - UserPreference userPreference = SessionManager.getSessionApplication().getUserPreference(); - String initDefault = userPreference.getProperty(UserPreference.P_ROLE); - for(int i = 0; i < rolesKNPairs.length; i++) + + // initial client - Elaine 2009/02/06 + UserPreference userPreference = SessionManager.getSessionApplication().getUserPreference(); + String initDefault = userPreference.getProperty(UserPreference.P_CLIENT); + if (m_clientKNPairs != null && m_clientKNPairs.length > 0) { - ComboItem ci = new ComboItem(rolesKNPairs[i].getName(), rolesKNPairs[i].getID()); - lstRole.appendChild(ci); - if(rolesKNPairs[i].getID().equals(initDefault)) - lstRole.setSelectedItem(ci); - } - if (lstRole.getSelectedIndex() == -1 && lstRole.getItemCount() > 0) { - m_show = true; // didn't find default role - lstRole.setSelectedIndex(0); + for(int i = 0; i < m_clientKNPairs.length; i++) + { + ComboItem ci = new ComboItem(m_clientKNPairs[i].getName(), m_clientKNPairs[i].getID()); + lstClient.appendChild(ci); + if (m_clientKNPairs[i].getID().equals(initDefault)) + lstClient.setSelectedItem(ci); + } + if (lstClient.getSelectedIndex() == -1 && lstClient.getItemCount() > 0) { + m_show = true; // didn't find default client + lstClient.setSelectedIndex(0); + } } // - // If we have only one role, we can hide the combobox - metas-2009_0021_AP1_G94 - if (lstRole.getItemCount() == 1 && ! MSysConfig.getBooleanValue("ALogin_ShowOneRole", true)) - { - lstRole.setSelectedIndex(0); - lblRole.setVisible(false); - lstRole.setVisible(false); - } - else - { - lblRole.setVisible(true); - lstRole.setVisible(true); - } - - updateClientList(); + if (m_clientKNPairs.length == 1) { + // don't show client if is just one + lstClient.setSelectedIndex(0); + lblClient.setVisible(false); + lstClient.setVisible(false); + } else { + lblClient.setVisible(true); + lstClient.setVisible(true); + } + setUserID(); + updateRoleList(); } - private void updateClientList() + private void updateRoleList() { - lstClient.getItems().clear(); - Comboitem lstItemRole = lstRole.getSelectedItem(); - if(lstItemRole != null) + lstRole.getItems().clear(); + Comboitem lstItemClient = lstClient.getSelectedItem(); + if (lstItemClient != null) { - // initial client - Elaine 2009/02/06 + // initial role UserPreference userPreference = SessionManager.getSessionApplication().getUserPreference(); - String initDefault = userPreference.getProperty(UserPreference.P_CLIENT); - KeyNamePair roleKNPair = new KeyNamePair(new Integer((String)lstItemRole.getValue()), lstItemRole.getLabel()); - KeyNamePair clientKNPairs[] = login.getClients(roleKNPair); - if(clientKNPairs != null && clientKNPairs.length > 0) + String initDefault = userPreference.getProperty(UserPreference.P_ROLE); + KeyNamePair clientKNPair = new KeyNamePair(new Integer((String)lstItemClient.getValue()), lstItemClient.getLabel()); + KeyNamePair roleKNPairs[] = login.getRoles(m_userName, clientKNPair); + if (roleKNPairs != null && roleKNPairs.length > 0) { - for(int i = 0; i < clientKNPairs.length; i++) + for (int i = 0; i < roleKNPairs.length; i++) { - ComboItem ci = new ComboItem(clientKNPairs[i].getName(), clientKNPairs[i].getID()); - lstClient.appendChild(ci); - if(clientKNPairs[i].getID().equals(initDefault)) - lstClient.setSelectedItem(ci); + ComboItem ci = new ComboItem(roleKNPairs[i].getName(), roleKNPairs[i].getID()); + lstRole.appendChild(ci); + if (roleKNPairs[i].getID().equals(initDefault)) + lstRole.setSelectedItem(ci); } - if (lstClient.getSelectedIndex() == -1 && lstClient.getItemCount() > 0) { - m_show = true; // didn't find default client - lstClient.setSelectedIndex(0); + if (lstRole.getSelectedIndex() == -1 && lstRole.getItemCount() > 0) { + m_show = true; // didn't find default role + lstRole.setSelectedIndex(0); } } // //force reload of default role MRole.getDefault(m_ctx, true); + + // If we have only one role, we can hide the combobox - metas-2009_0021_AP1_G94 + if (m_clientKNPairs.length == 1 && lstRole.getItemCount() == 1 && ! MSysConfig.getBooleanValue("ALogin_ShowOneRole", true)) + { + lstRole.setSelectedIndex(0); + lblRole.setVisible(false); + lstRole.setVisible(false); + } + else + { + lblRole.setVisible(true); + lstRole.setVisible(true); + } + } setUserID(); updateOrganisationList(); @@ -365,14 +385,14 @@ public class RolePanel extends Window implements EventListener, Deferrable { lstOrganisation.getItems().clear(); lstOrganisation.setText(""); - Comboitem lstItemClient = lstClient.getSelectedItem(); - if(lstItemClient != null) + Comboitem lstItemRole = lstRole.getSelectedItem(); + if(lstItemRole != null) { // initial organisation - Elaine 2009/02/06 UserPreference userPreference = SessionManager.getSessionApplication().getUserPreference(); String initDefault = userPreference.getProperty(UserPreference.P_ORG); - KeyNamePair clientKNPair = new KeyNamePair(new Integer((String)lstItemClient.getValue()), lstItemClient.getLabel()); - KeyNamePair orgKNPairs[] = login.getOrgs(clientKNPair); + KeyNamePair RoleKNPair = new KeyNamePair(new Integer((String)lstItemRole.getValue()), lstItemRole.getLabel()); + KeyNamePair orgKNPairs[] = login.getOrgs(RoleKNPair); if(orgKNPairs != null && orgKNPairs.length > 0) { for(int i = 0; i < orgKNPairs.length; i++) @@ -429,9 +449,10 @@ public class RolePanel extends Window implements EventListener, Deferrable String eventName = event.getName(); if(eventName.equals("onSelect")) { - if(eventCompId.equals(lstRole.getId())) - updateClientList(); - else if(eventCompId.equals(lstClient.getId())) { + if(eventCompId.equals(lstClient.getId())){ + updateRoleList(); + } + else if(eventCompId.equals(lstRole.getId())) { setUserID(); updateOrganisationList(); } @@ -449,10 +470,8 @@ public class RolePanel extends Window implements EventListener, Deferrable } private void setUserID() { - // Carlos Ruiz - globalqss - Wrong #AD_User_ID when user with the same name from two Ten. - // https://sourceforge.net/tracker/index.php?func=detail&aid=2984836&group_id=176962&atid=955896 Env.setContext(m_ctx, "#AD_Client_ID", (String) lstClient.getSelectedItem().getValue()); - MUser user = MUser.get (m_ctx, m_userName, m_password); + MUser user = MUser.get (m_ctx, m_userName); if (user != null) { Env.setContext(m_ctx, "#AD_User_ID", user.getAD_User_ID() ); Env.setContext(m_ctx, "#SalesRep_ID", user.getAD_User_ID() ); diff --git a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/window/LoginWindow.java b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/window/LoginWindow.java index 45664e7984..59cf8c5e6a 100644 --- a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/window/LoginWindow.java +++ b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/window/LoginWindow.java @@ -30,6 +30,7 @@ import org.adempiere.webui.component.FWindow; import org.adempiere.webui.panel.LoginPanel; import org.adempiere.webui.panel.RolePanel; import org.compiere.util.Env; +import org.compiere.util.KeyNamePair; import org.zkoss.zk.ui.event.Event; import org.zkoss.zk.ui.event.EventListener; import org.zkoss.zk.ui.event.Events; @@ -44,10 +45,10 @@ import org.zkoss.zk.ui.event.Events; */ public class LoginWindow extends FWindow implements EventListener { - /** - * + /** + * */ - private static final long serialVersionUID = -365979563919913804L; + private static final long serialVersionUID = -6312322926432586415L; private IWebClient app; private Properties ctx; private LoginPanel pnlLogin; @@ -74,9 +75,9 @@ public class LoginWindow extends FWindow implements EventListener pnlLogin = new LoginPanel(ctx, this); } - public void loginOk(String userName, String password, boolean show) + public void loginOk(String userName, String password, boolean show, KeyNamePair[] clientsKNPairs) { - pnlRole = new RolePanel(ctx, this, userName, password, show); + pnlRole = new RolePanel(ctx, this, userName, show, clientsKNPairs); this.getChildren().clear(); this.appendChild(pnlRole); } diff --git a/org.adempiere.ui/src/org/compiere/apps/ALoginRes.java b/org.adempiere.ui/src/org/compiere/apps/ALoginRes.java index 314638fb31..20fec31533 100644 --- a/org.adempiere.ui/src/org/compiere/apps/ALoginRes.java +++ b/org.adempiere.ui/src/org/compiere/apps/ALoginRes.java @@ -44,6 +44,7 @@ public final class ALoginRes extends ListResourceBundle { "Host", "&Server" }, { "Database", "Database" }, { "User", "&User ID" }, + { "EMail", "EMail" }, { "EnterUser", "Enter Application User ID" }, { "Password", "&Password" }, { "EnterPassword", "Enter Application Password" }, diff --git a/org.adempiere.ui/src/org/compiere/apps/ALoginRes_ar.java b/org.adempiere.ui/src/org/compiere/apps/ALoginRes_ar.java index 61eea1f4fe..e86fa20821 100644 --- a/org.adempiere.ui/src/org/compiere/apps/ALoginRes_ar.java +++ b/org.adempiere.ui/src/org/compiere/apps/ALoginRes_ar.java @@ -39,6 +39,7 @@ public class ALoginRes_ar extends ListResourceBundle { "Host", "\u0645\u0648\u0632\u0639" }, { "Database", "\u0642\u0627\u0639\u062f\u0629 \u0628\u064a\u0627\u0646\u0627\u062a" }, { "User", "\u0645\u0639\u0631\u0651\u0641 \u0627\u0644\u0645\u0633\u062a\u0639\u0645\u0644" }, + { "EMail", "\u0627\u0644\u0628\u0631\u064a\u062f \u0627\u0644\u0625\u0644\u0643\u062a\u0631\u0648\u0646\u064a" }, { "EnterUser", "\u0623\u062f\u062e\u0644 \u0645\u0639\u0631\u0651\u0641 \u0645\u0633\u062a\u0639\u0645\u0644 \u0627\u0644\u062a\u0637\u0628\u064a\u0642" }, { "Password", "\u0643\u0644\u0645\u0629 \u0627\u0644\u0633\u0631" }, { "EnterPassword", "\u0623\u062f\u062e\u0644 \u0643\u0644\u0645\u0629 \u0633\u0631 \u0627\u0644\u062a\u0637\u0628\u064a\u0642" }, diff --git a/org.adempiere.ui/src/org/compiere/apps/ALoginRes_bg.java b/org.adempiere.ui/src/org/compiere/apps/ALoginRes_bg.java index 39bb0552a9..e0733d8a19 100644 --- a/org.adempiere.ui/src/org/compiere/apps/ALoginRes_bg.java +++ b/org.adempiere.ui/src/org/compiere/apps/ALoginRes_bg.java @@ -40,6 +40,7 @@ public final class ALoginRes_bg extends ListResourceBundle { "Host", "\u0421\u044a\u0440\u0432\u0435\u0440" }, { "Database", "\u0411\u0430\u0437\u0430 \u0434\u0430\u043d\u043d\u0438" }, { "User", "\u041f\u043e\u0442\u0440\u0435\u0431\u0438\u0442\u0435\u043b" }, + { "EMail", "\u043f\u043e\u0449\u0430" }, { "EnterUser", "\u0412\u044a\u0432\u0435\u0434\u0435\u0442\u0435 \u043f\u043e\u0442\u0440\u0435\u0431\u0438\u0442\u0435\u043b \u043d\u0430 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435\u0442\u043e" }, { "Password", "\u041f\u0430\u0440\u043e\u043b\u0430" }, { "EnterPassword", "\u0412\u044a\u0432\u0435\u0434\u0435\u0442\u0435 \u043f\u0430\u0440\u043e\u043b\u0430 \u0437\u0430 \u043f\u043e\u0442\u0440\u0435\u0431\u0438\u0442\u0435\u043b\u044f \u043d\u0430 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435\u0442\u043e" }, diff --git a/org.adempiere.ui/src/org/compiere/apps/ALoginRes_ca.java b/org.adempiere.ui/src/org/compiere/apps/ALoginRes_ca.java index 20c94a2bd4..355659f58d 100644 --- a/org.adempiere.ui/src/org/compiere/apps/ALoginRes_ca.java +++ b/org.adempiere.ui/src/org/compiere/apps/ALoginRes_ca.java @@ -42,6 +42,7 @@ public final class ALoginRes_ca extends ListResourceBundle { "Host", "Servidor" }, { "Database", "Base de Dades" }, { "User", "Usuari" }, + { "EMail", "Correu" }, { "EnterUser", "Introdu\u00efr Usuari Aplicaci\u00f3" }, { "Password", "Contrasenya" }, { "EnterPassword", "Entrar Contrasenya Usuari Aplicaci\u00f3" }, diff --git a/org.adempiere.ui/src/org/compiere/apps/ALoginRes_da.java b/org.adempiere.ui/src/org/compiere/apps/ALoginRes_da.java index 7e59ff003d..b705b51a1e 100644 --- a/org.adempiere.ui/src/org/compiere/apps/ALoginRes_da.java +++ b/org.adempiere.ui/src/org/compiere/apps/ALoginRes_da.java @@ -33,19 +33,20 @@ public final class ALoginRes_da extends ListResourceBundle { { "Connection", "Forbindelse" }, { "Defaults", "Basis" }, - { "Login", "ADempiere: Log på" }, + { "Login", "ADempiere: Log p\u00e5" }, { "File", "Fil" }, { "Exit", "Afslut" }, - { "Help", "Hjælp" }, + { "Help", "Hj\u00e6lp" }, { "About", "Om" }, - { "Host", "Vært" }, + { "Host", "V\u00e6rt" }, { "Database", "Database" }, { "User", "Bruger-ID" }, + { "EMail", "EMail" }, { "EnterUser", "Angiv bruger-ID til program" }, { "Password", "Adgangskode" }, { "EnterPassword", "Angiv adgangskode til program" }, { "Language", "Sprog" }, - { "SelectLanguage", "Vælg sprog" }, + { "SelectLanguage", "V\u00e6lg sprog" }, { "Role", "Rolle" }, { "Client", "Firma" }, { "Organization", "Organisation" }, @@ -59,10 +60,10 @@ public final class ALoginRes_da extends ListResourceBundle { "RoleNotFound", "Rolle blev ikke fundet/afsluttet" }, { "Authorized", "Tilladelse OK" }, { "Ok", "OK" }, - { "Cancel", "Annullér" }, + { "Cancel", "Annull\u00e9r" }, { "VersionConflict", "Konflikt:" }, { "VersionInfo", "Server <> Klient" }, - { "PleaseUpgrade", "Kør opdateringsprogram" } + { "PleaseUpgrade", "K\u00f8r opdateringsprogram" } }; /** diff --git a/org.adempiere.ui/src/org/compiere/apps/ALoginRes_de.java b/org.adempiere.ui/src/org/compiere/apps/ALoginRes_de.java index 04bb53341d..dbb81de681 100644 --- a/org.adempiere.ui/src/org/compiere/apps/ALoginRes_de.java +++ b/org.adempiere.ui/src/org/compiere/apps/ALoginRes_de.java @@ -41,6 +41,7 @@ public final class ALoginRes_de extends ListResourceBundle { "Host", "Server" }, { "Database", "Datenbank" }, { "User", "Nutzer" }, + { "EMail", "EMail" }, { "EnterUser", "Nutzer eingeben" }, { "Password", "Passwort" }, { "EnterPassword", "Passwort eingeben" }, diff --git a/org.adempiere.ui/src/org/compiere/apps/ALoginRes_el.java b/org.adempiere.ui/src/org/compiere/apps/ALoginRes_el.java index d34548d7b7..b12067e029 100644 --- a/org.adempiere.ui/src/org/compiere/apps/ALoginRes_el.java +++ b/org.adempiere.ui/src/org/compiere/apps/ALoginRes_el.java @@ -44,6 +44,7 @@ public final class ALoginRes_el extends ListResourceBundle { "Host", "\u0394\u03b9\u03b1\u03ba\u03bf\u03bc\u03b9\u03c3\u03c4\u03ae\u03c2" }, { "Database", "\u0392\u03ac\u03c3\u03b7 \u0394\u03b5\u03b4\u03bf\u03bc\u03ad\u03bd\u03c9\u03bd" }, { "User", "\u03a7\u03c1\u03ae\u03c3\u03c4\u03b7\u03c2" }, + { "EMail", "\u03c4\u03b1\u03c7\u03c5\u03b4\u03c1\u03bf\u03bc\u03b5\u03af\u03bf\u03c5" }, { "EnterUser", "\u039a\u03b1\u03c4\u03b1\u03c7\u03c9\u03c1\u03ae\u03c3\u03c4\u03b5 \u03c4\u03bf \u038c\u03bd\u03bf\u03bc\u03b1 \u03c4\u03bf\u03c5 \u03a7\u03c1\u03ae\u03c3\u03c4\u03b7" }, { "Password", "\u039a\u03c9\u03b4\u03b9\u03ba\u03cc\u03c2" }, { "EnterPassword", "\u039a\u03b1\u03c4\u03b1\u03c7\u03c9\u03c1\u03ae\u03c3\u03c4\u03b5 \u03c4\u03bf\u03bd \u039a\u03c9\u03b4\u03b9\u03ba\u03cc \u03a0\u03c1\u03cc\u03c3\u03b2\u03b1\u03c3\u03b7\u03c2" }, diff --git a/org.adempiere.ui/src/org/compiere/apps/ALoginRes_es.java b/org.adempiere.ui/src/org/compiere/apps/ALoginRes_es.java index 8238200dc7..2646ece19d 100644 --- a/org.adempiere.ui/src/org/compiere/apps/ALoginRes_es.java +++ b/org.adempiere.ui/src/org/compiere/apps/ALoginRes_es.java @@ -41,6 +41,7 @@ public final class ALoginRes_es extends ListResourceBundle { "Host", "&Servidor" }, { "Database", "Base de datos" }, { "User", "&Usuario" }, + { "EMail", "Correo" }, { "EnterUser", "Introduzca Usuario Aplicaci\u00f3n" }, { "Password", "&Contrase\u00f1a" }, { "EnterPassword", "Introduzca Contrase\u00f1a Aplicaci\u00f3n" }, diff --git a/org.adempiere.ui/src/org/compiere/apps/ALoginRes_fa.java b/org.adempiere.ui/src/org/compiere/apps/ALoginRes_fa.java index 052a50c934..6ea543b2b5 100644 --- a/org.adempiere.ui/src/org/compiere/apps/ALoginRes_fa.java +++ b/org.adempiere.ui/src/org/compiere/apps/ALoginRes_fa.java @@ -39,6 +39,7 @@ public final class ALoginRes_fa extends ListResourceBundle { "Host", "\u0633\u064a\u0633\u062a\u0645 \u0645\u064a\u0632\u0628\u0627\u0646" }, { "Database", "\u0628\u0627\u0646\u06a9 \u0627\u0637\u0644\u0627\u0639\u0627\u062a" }, { "User", "\u0645\u0634\u062e\u0635\u0647 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0646\u0646\u062f\u0647" }, + { "EMail", "EMail" }, { "EnterUser", "\u0645\u0634\u062e\u0635\u0647 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0646\u0646\u062f\u0647 \u0631\u0627 \u0648\u0627\u0631\u062f \u06a9\u0646\u064a\u062f" }, { "Password", "\u06a9\u0644\u0645\u0647 \u0639\u0628\u0648\u0631" }, { "EnterPassword", "\u06a9\u0644\u0645\u0647 \u0639\u0628\u0648\u0631 \u0631\u0627 \u0648\u0627\u0631\u062f \u06a9\u0646\u064a\u062f" }, diff --git a/org.adempiere.ui/src/org/compiere/apps/ALoginRes_fr.java b/org.adempiere.ui/src/org/compiere/apps/ALoginRes_fr.java index c602ed451c..ab5f381329 100644 --- a/org.adempiere.ui/src/org/compiere/apps/ALoginRes_fr.java +++ b/org.adempiere.ui/src/org/compiere/apps/ALoginRes_fr.java @@ -41,6 +41,7 @@ public class ALoginRes_fr extends ListResourceBundle { "Host", "Serveur" }, { "Database", "Base de donn\u00E9es" }, { "User", "Utilisateur" }, + { "EMail", "Courriel" }, { "EnterUser", "Entrer votre code utilisateur" }, { "Password", "Mot de passe" }, { "EnterPassword", "Entrer le mot de passe" }, diff --git a/org.adempiere.ui/src/org/compiere/apps/ALoginRes_hr.java b/org.adempiere.ui/src/org/compiere/apps/ALoginRes_hr.java index 529eaf37b9..f2d991b62f 100644 --- a/org.adempiere.ui/src/org/compiere/apps/ALoginRes_hr.java +++ b/org.adempiere.ui/src/org/compiere/apps/ALoginRes_hr.java @@ -21,7 +21,7 @@ import java.util.ListResourceBundle; /** * Base Resource Bundle * - * @author Marko Bubalo, Mislav Kašner + * @author Marko Bubalo, Mislav Ka\u0161ner * @version $Id: ALoginRes_hr.java,v 1.3 2008/01/11 00:51:27 jjanke Exp $ */ public final class ALoginRes_hr extends ListResourceBundle @@ -41,6 +41,7 @@ public final class ALoginRes_hr extends ListResourceBundle { "Host", "Host" }, { "Database", "Baza podataka" }, { "User", "Korisnik" }, + { "EMail", "e-po\u0161ta" }, { "EnterUser", "Unos korisnika" }, { "Password", "Lozinka" }, { "EnterPassword", "Unos lozinke" }, diff --git a/org.adempiere.ui/src/org/compiere/apps/ALoginRes_hu.java b/org.adempiere.ui/src/org/compiere/apps/ALoginRes_hu.java index 4caad2e276..50ffdc53dc 100644 --- a/org.adempiere.ui/src/org/compiere/apps/ALoginRes_hu.java +++ b/org.adempiere.ui/src/org/compiere/apps/ALoginRes_hu.java @@ -35,37 +35,38 @@ public final class ALoginRes_hu extends ListResourceBundle static final Object[][] contents = new String[][] { { "Connection", "Kapcsolat" }, - { "Defaults", "Alapértelmezés" }, - { "Login", "ADempiere Belépés" }, - { "File", "Fájl" }, - { "Exit", "Kilépés" }, - { "Help", "Súgó" }, - { "About", "Névjegy" }, + { "Defaults", "Alap\u00e9rtelmez\u00e9s" }, + { "Login", "ADempiere Bel\u00e9p\u00e9s" }, + { "File", "F\u00e1jl" }, + { "Exit", "Kil\u00e9p\u00e9s" }, + { "Help", "S\u00fag\u00f3" }, + { "About", "N\u00e9vjegy" }, { "Host", "Szerver" }, - { "Database", "Adatbázis" }, - { "User", "Felhasználó ID" }, - { "EnterUser", "Írja be a felhasználó ID-t" }, - { "Password", "Jelszó" }, - { "EnterPassword", "Írja be a jelszavát" }, + { "Database", "Adatb\u00e1zis" }, + { "User", "Felhaszn\u00e1l\u00f3 ID" }, + { "EMail", "EMail" }, + { "EnterUser", "\u00cdrja be a felhaszn\u00e1l\u00f3 ID-t" }, + { "Password", "Jelsz\u00f3" }, + { "EnterPassword", "\u00cdrja be a jelszav\u00e1t" }, { "Language", "Nyelv" }, - { "SelectLanguage", "Válasszon nyelvet" }, - { "Role", "Szerepkör" }, - { "Client", "Vállalat" }, + { "SelectLanguage", "V\u00e1lasszon nyelvet" }, + { "Role", "Szerepk\u00f6r" }, + { "Client", "V\u00e1llalat" }, { "Organization", "Szervezet" }, - { "Date", "Dátum" }, - { "Warehouse", "Raktár" }, - { "Printer", "Nyomtató" }, + { "Date", "D\u00e1tum" }, + { "Warehouse", "Rakt\u00e1r" }, + { "Printer", "Nyomtat\u00f3" }, { "Connected", "Csatlakoztatva" }, { "NotConnected", "Nincs csatlakoztatva" }, - { "DatabaseNotFound", "Az adatbázis nem található" }, - { "UserPwdError", "A felhasználó vagy jelszó hibás" }, - { "RoleNotFound", "A szerepkör nem található" }, - { "Authorized", "Jogosultság ellenőrizve" }, + { "DatabaseNotFound", "Az adatb\u00e1zis nem tal\u00e1lhat\u00f3" }, + { "UserPwdError", "A felhaszn\u00e1l\u00f3 vagy jelsz\u00f3 hib\u00e1s" }, + { "RoleNotFound", "A szerepk\u00f6r nem tal\u00e1lhat\u00f3" }, + { "Authorized", "Jogosults\u00e1g ellen\u0151rizve" }, { "Ok", "Ok" }, - { "Cancel", "Mégsem" }, - { "VersionConflict", "Verzió ütközés:" }, + { "Cancel", "M\u00e9gsem" }, + { "VersionConflict", "Verzi\u00f3 \u00fctk\u00f6z\u00e9s:" }, { "VersionInfo", "Szerver <> Kliens" }, - { "PleaseUpgrade", "Töltse le a program új verzióját a szerverről" } + { "PleaseUpgrade", "T\u00f6ltse le a program \u00faj verzi\u00f3j\u00e1t a szerverr\u0151l" } }; /** diff --git a/org.adempiere.ui/src/org/compiere/apps/ALoginRes_in.java b/org.adempiere.ui/src/org/compiere/apps/ALoginRes_in.java index d1fad2ed92..ea31da7453 100644 --- a/org.adempiere.ui/src/org/compiere/apps/ALoginRes_in.java +++ b/org.adempiere.ui/src/org/compiere/apps/ALoginRes_in.java @@ -41,6 +41,7 @@ public final class ALoginRes_in extends ListResourceBundle { "Host", "Pusat" }, { "Database", "Database" }, { "User", "ID Pengguna" }, + { "EMail", "EMail" }, { "EnterUser", "Masukkan ID pengguna" }, { "Password", "Kata Sandi" }, { "EnterPassword", "Masukkan kata sandi applikasi" }, diff --git a/org.adempiere.ui/src/org/compiere/apps/ALoginRes_it.java b/org.adempiere.ui/src/org/compiere/apps/ALoginRes_it.java index bbe3773f70..151522c34e 100644 --- a/org.adempiere.ui/src/org/compiere/apps/ALoginRes_it.java +++ b/org.adempiere.ui/src/org/compiere/apps/ALoginRes_it.java @@ -27,69 +27,38 @@ import java.util.ListResourceBundle; public final class ALoginRes_it extends ListResourceBundle { static final Object[][] contents = new String[][]{ - //{ "Connection", "Connection" }, { "Connection", "Connessione" }, - //{ "Defaults", "Defaults" }, { "Defaults", "Defaults" }, //Need to be checked - //{ "Login", "ADempiere Login" }, { "Login", "ADempiere Login" }, - //{ "File", "File" }, { "File", "File" }, - //{ "Exit", "Exit" }, { "Exit", "Esci" }, - //{ "Help", "Help" }, { "Help", "Aiuto" }, - //{ "About", "About" }, { "About", "Informazioni" }, - //{ "Host", "Host" }, { "Host", "Host" }, - //{ "Database", "Database" }, { "Database", "Database" }, - //{ "User", "User ID" }, //Need to be checked. Leave "User ID" ? { "User", "Identificativo Utente" }, - //{ "EnterUser", "Enter Application User ID" }, + { "EMail", "Posta" }, { "EnterUser", "Identificativo Utente Applicazione" }, - //{ "Password", "Password" }, { "Password", "Password" }, - //{ "EnterPassword", "Enter Application password" }, { "EnterPassword", "Inserimento password Applicazione" }, - //{ "Language", "Language" }, { "Language", "Linguaggio" }, - //{ "SelectLanguage", "Select your language" }, { "SelectLanguage", "Selezionate il vostro linguaggio" }, - //{ "Role", "Role" }, { "Role", "Ruolo" }, - //{ "Client", "Client" }, //Need to be checked. Everybody agree with the SAP translation ? { "Client", "Mandante" }, - //{ "Organization", "Organization" }, { "Organization", "Organizzazione" }, - //{ "Date", "Date" }, { "Date", "Data" }, - //{ "Warehouse", "Warehouse" }, { "Warehouse", "Magazzino" }, - //{ "Printer", "Printer" }, { "Printer", "Stampante" }, - //{ "Connected", "Connected" }, { "Connected", "Connesso" }, - //{ "NotConnected", "Not Connected" }, { "NotConnected", "Non Connesso" }, - //{ "DatabaseNotFound", "Database not found" }, { "DatabaseNotFound", "Database non trovato" }, - //{ "UserPwdError", "User does not match password" }, { "UserPwdError", "L'Utente non corrisponde alla password" }, - //{ "RoleNotFound", "Role not found" }, { "RoleNotFound", "Ruolo non trovato" }, - //{ "Authorized", "Authorized" }, { "Authorized", "Authorizzato" }, - //{ "Ok", "Ok" }, { "Ok", "Ok" }, - //{ "Cancel", "Cancel" }, { "Cancel", "Cancella" }, - //{ "VersionConflict", "Version Conflict:" }, { "VersionConflict", "Conflitto di Versione:" }, - //{ "VersionInfo", "Server <> Client" }, { "VersionInfo", "Server <> Client" }, - //{ "PleaseUpgrade", "Please run the update program" } { "PleaseUpgrade", "Prego lanciare il programma di update" } }; public Object[][] getContents() diff --git a/org.adempiere.ui/src/org/compiere/apps/ALoginRes_ja.java b/org.adempiere.ui/src/org/compiere/apps/ALoginRes_ja.java index 1e5e37a717..1af49334a2 100644 --- a/org.adempiere.ui/src/org/compiere/apps/ALoginRes_ja.java +++ b/org.adempiere.ui/src/org/compiere/apps/ALoginRes_ja.java @@ -39,6 +39,7 @@ public final class ALoginRes_ja extends ListResourceBundle { "Host", "\u30b5\u30fc\u30d0\u30fc" }, { "Database", "\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9" }, { "User", "\u30e6\u30fc\u30b6\u30fc" }, + { "EMail", "\u96fb\u5b50\u30e1\u30fc\u30eb" }, { "EnterUser", "\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u30e6\u30fc\u30b6\u30fc\u540d\u3092\u5165\u529b\u3057\u3066\u4e0b\u3055\u3044" }, { "Password", "\u30d1\u30b9\u30ef\u30fc\u30c9" }, { "EnterPassword", "\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u30d1\u30b9\u30ef\u30fc\u30c9\u3092\u5165\u529b\u3057\u3066\u4e0b\u3055\u3044" }, diff --git a/org.adempiere.ui/src/org/compiere/apps/ALoginRes_ml.java b/org.adempiere.ui/src/org/compiere/apps/ALoginRes_ml.java index 63a23ec48f..6b22bde1ce 100644 --- a/org.adempiere.ui/src/org/compiere/apps/ALoginRes_ml.java +++ b/org.adempiere.ui/src/org/compiere/apps/ALoginRes_ml.java @@ -39,6 +39,7 @@ public final class ALoginRes_ml extends ListResourceBundle { "Host", "Host" }, { "Database", "Pengkalan Data" }, { "User", "Pengguna" }, + { "EMail", "E-mel" }, { "EnterUser", "Masuk Pengguna" }, { "Password", "Kata Laluan" }, { "EnterPassword", "Masuk Kata Laluan" }, diff --git a/org.adempiere.ui/src/org/compiere/apps/ALoginRes_ms.java b/org.adempiere.ui/src/org/compiere/apps/ALoginRes_ms.java index 2cd7c65526..b82f4c4e22 100644 --- a/org.adempiere.ui/src/org/compiere/apps/ALoginRes_ms.java +++ b/org.adempiere.ui/src/org/compiere/apps/ALoginRes_ms.java @@ -39,6 +39,7 @@ public final class ALoginRes_ms extends ListResourceBundle { "Host", "Host" }, { "Database", "Pengkalan Data" }, { "User", "Pengguna" }, + { "EMail", "E-mel" }, { "EnterUser", "Masuk Pengguna" }, { "Password", "Kata Laluan" }, { "EnterPassword", "Masuk Kata Laluan" }, diff --git a/org.adempiere.ui/src/org/compiere/apps/ALoginRes_nl.java b/org.adempiere.ui/src/org/compiere/apps/ALoginRes_nl.java index 99e14269e5..af3e2690f3 100644 --- a/org.adempiere.ui/src/org/compiere/apps/ALoginRes_nl.java +++ b/org.adempiere.ui/src/org/compiere/apps/ALoginRes_nl.java @@ -39,6 +39,7 @@ public final class ALoginRes_nl extends ListResourceBundle { "Host", "Server" }, { "Database", "Database" }, { "User", "Gebruikersnaam" }, + { "EMail", "EMail" }, { "EnterUser", "Voer uw gebruikersnaam in" }, { "Password", "Wachtwoord" }, { "EnterPassword", "Voer uw wachtwoord in" }, diff --git a/org.adempiere.ui/src/org/compiere/apps/ALoginRes_no.java b/org.adempiere.ui/src/org/compiere/apps/ALoginRes_no.java index 4530397b32..d5ffb4b044 100644 --- a/org.adempiere.ui/src/org/compiere/apps/ALoginRes_no.java +++ b/org.adempiere.ui/src/org/compiere/apps/ALoginRes_no.java @@ -21,7 +21,7 @@ import java.util.ListResourceBundle; /** * Norwegian Base Resource Bundle Translation * - * @author Olaf Slazak L�ken + * @author Olaf Slazak L\ufffdken * @version $Id: ALoginRes_no.java,v 1.2 2006/07/30 00:51:27 jjanke Exp $ */ public final class ALoginRes_no extends ListResourceBundle @@ -41,11 +41,12 @@ public final class ALoginRes_no extends ListResourceBundle { "Host", "Maskin" }, { "Database", "Database" }, { "User", "Bruker ID" }, + { "EMail", "E-post" }, { "EnterUser", "Skriv Applikasjon Bruker ID" }, { "Password", "Passord" }, { "EnterPassword", "Skriv Applikasjon Passordet" }, - { "Language", "Spr�k" }, - { "SelectLanguage", "Velg �nsket Spr�k" }, + { "Language", "Spr\u00e5k" }, + { "SelectLanguage", "Velg spr\u00e5k" }, { "Role", "Rolle" }, { "Client", "Klient" }, { "Organization", "Organisasjon" }, @@ -62,7 +63,7 @@ public final class ALoginRes_no extends ListResourceBundle { "Cancel", "Avbryt" }, { "VersionConflict", "Versions Konflikt:" }, { "VersionInfo", "Server <> Klient" }, - { "PleaseUpgrade", "Vennligst kj�r oppdaterings programet" } + { "PleaseUpgrade", "Vennligst kj\u00f8r oppdaterings programet" } }; /** diff --git a/org.adempiere.ui/src/org/compiere/apps/ALoginRes_pl.java b/org.adempiere.ui/src/org/compiere/apps/ALoginRes_pl.java index 14450e53c5..5f08cf2296 100644 --- a/org.adempiere.ui/src/org/compiere/apps/ALoginRes_pl.java +++ b/org.adempiere.ui/src/org/compiere/apps/ALoginRes_pl.java @@ -39,6 +39,7 @@ public final class ALoginRes_pl extends ListResourceBundle { "Host", "Host" }, { "Database", "Baza danych" }, { "User", "U\u017cytkownik" }, + { "EMail", "EMail" }, { "EnterUser", "Wprowad\u017a Identyfikator U\u017cytkownika Aplikacji" }, { "Password", "Has\u0142o" }, { "EnterPassword", "Wprowad\u017a Has\u0142o Aplikacji" }, diff --git a/org.adempiere.ui/src/org/compiere/apps/ALoginRes_pt.java b/org.adempiere.ui/src/org/compiere/apps/ALoginRes_pt.java index ce43195f0f..c4a06180f7 100644 --- a/org.adempiere.ui/src/org/compiere/apps/ALoginRes_pt.java +++ b/org.adempiere.ui/src/org/compiere/apps/ALoginRes_pt.java @@ -42,6 +42,7 @@ public final class ALoginRes_pt extends ListResourceBundle { "Host", "Servidor" }, { "Database", "Banco de Dados" }, { "User", "Usu\u00e1rio" }, + { "EMail", "Correio" }, { "EnterUser", "Entre com o Usu\u00e1rio da Aplica\u00e7\u00e3o" }, { "Password", "Senha" }, { "EnterPassword", "Entre com a senha da Aplica\u00e7\u00e3o" }, diff --git a/org.adempiere.ui/src/org/compiere/apps/ALoginRes_ro.java b/org.adempiere.ui/src/org/compiere/apps/ALoginRes_ro.java index 1bf184cd64..2f23091559 100644 --- a/org.adempiere.ui/src/org/compiere/apps/ALoginRes_ro.java +++ b/org.adempiere.ui/src/org/compiere/apps/ALoginRes_ro.java @@ -39,6 +39,7 @@ public final class ALoginRes_ro extends ListResourceBundle { "Host", "Server" }, { "Database", "Baz\u0103 de date" }, { "User", "Utilizator" }, + { "EMail", "Po\u015fta" }, { "EnterUser", "Introduce\u0163i identificatorul utilizatorului" }, { "Password", "Parol\u0103" }, { "EnterPassword", "Introduce\u0163i parola" }, diff --git a/org.adempiere.ui/src/org/compiere/apps/ALoginRes_ru.java b/org.adempiere.ui/src/org/compiere/apps/ALoginRes_ru.java index e52333b54c..53c6f45e61 100644 --- a/org.adempiere.ui/src/org/compiere/apps/ALoginRes_ru.java +++ b/org.adempiere.ui/src/org/compiere/apps/ALoginRes_ru.java @@ -39,6 +39,7 @@ public final class ALoginRes_ru extends ListResourceBundle { "Host", "\u0425\u043e\u0441\u0442" }, { "Database", "\u0411\u0430\u0437\u0430 \u0434\u0430\u043d\u043d\u044b\u0445" }, { "User", "\u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c" }, + { "EMail", "\u043f\u043e\u0447\u0442\u0435" }, { "EnterUser", "\u0412\u0432\u0435\u0434\u0438\u0442\u0435 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f" }, { "Password", "\u041f\u0430\u0440\u043e\u043b\u044c" }, { "EnterPassword", "\u0412\u0432\u0435\u0434\u0438\u0442\u0435 \u043f\u0430\u0440\u043e\u043b\u044c" }, diff --git a/org.adempiere.ui/src/org/compiere/apps/ALoginRes_sl.java b/org.adempiere.ui/src/org/compiere/apps/ALoginRes_sl.java index dc8cdaa35f..a9564e2572 100644 --- a/org.adempiere.ui/src/org/compiere/apps/ALoginRes_sl.java +++ b/org.adempiere.ui/src/org/compiere/apps/ALoginRes_sl.java @@ -41,6 +41,7 @@ public final class ALoginRes_sl extends ListResourceBundle { "Host", "Stre\u017enik" }, { "Database", "Baza podatkov" }, { "User", "Uporabnik" }, + { "EMail", "E-po\u0161ta" }, { "EnterUser", "Vpi\u0161i uporabnika" }, { "Password", "Geslo" }, { "EnterPassword", "Vpi\u0161i geslo" }, diff --git a/org.adempiere.ui/src/org/compiere/apps/ALoginRes_sr.java b/org.adempiere.ui/src/org/compiere/apps/ALoginRes_sr.java index b261135021..caf0186468 100644 --- a/org.adempiere.ui/src/org/compiere/apps/ALoginRes_sr.java +++ b/org.adempiere.ui/src/org/compiere/apps/ALoginRes_sr.java @@ -9,7 +9,7 @@ * 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., * - * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. * + * 59 Temple Place, Suite 3OROOOOOOOO graciassssssss @marianapajon GRACIAS!!!!!!30, Boston, MA 02111-1307 USA. * * For the text or an alternative of this public license, you may reach us * * ComPiere, Inc., 2620 Augustine Dr. #245, Santa Clara, CA 95054, USA * * or via info@compiere.org or http://www.compiere.org/license.html * @@ -41,6 +41,7 @@ public final class ALoginRes_sr extends ListResourceBundle { "Host", "Host" }, { "Database", "\u0411\u0430\u0437\u0430 \u043F\u043E\u0434\u0430\u0442\u0430\u043A\u0430" }, { "User", "\u041A\u043E\u0440\u0438\u0441\u043D\u0438\u043A" }, + { "EMail", "\u0415-\u043c\u0430\u0438\u043b" }, { "EnterUser", "\u0423\u043D\u043E\u0441 \u043A\u043E\u0440\u0438\u0441\u043D\u0438\u043A\u0430" }, { "Password", "\u041B\u043E\u0437\u0438\u043D\u043A\u0430" }, { "EnterPassword", "\u0423\u043D\u043E\u0441 \u043B\u043E\u0437\u0438\u043D\u043A\u0435" }, diff --git a/org.adempiere.ui/src/org/compiere/apps/ALoginRes_sv.java b/org.adempiere.ui/src/org/compiere/apps/ALoginRes_sv.java index 94bec91cde..49f0a1bb6b 100644 --- a/org.adempiere.ui/src/org/compiere/apps/ALoginRes_sv.java +++ b/org.adempiere.ui/src/org/compiere/apps/ALoginRes_sv.java @@ -41,6 +41,7 @@ public final class ALoginRes_sv extends ListResourceBundle { "Host", "V\u00e4rddator" }, { "Database", "Databas" }, { "User", "Anv\u00e4ndarnamn" }, + { "EMail", "E-post" }, { "EnterUser", "Ange anv\u00e4ndarnamn" }, { "Password", "L\u00f6senord" }, { "EnterPassword", "Ange l\u00f6senord" }, diff --git a/org.adempiere.ui/src/org/compiere/apps/ALoginRes_th.java b/org.adempiere.ui/src/org/compiere/apps/ALoginRes_th.java index 0a997aa281..171b812b4c 100644 --- a/org.adempiere.ui/src/org/compiere/apps/ALoginRes_th.java +++ b/org.adempiere.ui/src/org/compiere/apps/ALoginRes_th.java @@ -39,6 +39,7 @@ public final class ALoginRes_th extends ListResourceBundle { "Host", "\u0e42\u0e2e\u0e2a" }, { "Database", "\u0e23\u0e30\u0e1a\u0e1a\u0e10\u0e32\u0e19\u0e02\u0e49\u0e2d\u0e21\u0e39\u0e25" }, { "User", "\u0e23\u0e2b\u0e31\u0e2a\u0e1c\u0e39\u0e49\u0e43\u0e0a\u0e49" }, + { "EMail", "\u0e08\u0e14\u0e2b\u0e21\u0e32\u0e22\u0e2d\u0e34\u0e40\u0e25\u0e47\u0e01\u0e17\u0e23\u0e2d\u0e19\u0e34\u0e01\u0e2a\u0e4c" }, { "EnterUser", "\u0e01\u0e23\u0e38\u0e13\u0e32\u0e43\u0e2a\u0e48\u0e23\u0e2b\u0e31\u0e2a\u0e1c\u0e39\u0e49\u0e43\u0e0a\u0e49" }, { "Password", "\u0e23\u0e2b\u0e31\u0e2a\u0e1c\u0e48\u0e32\u0e19" }, { "EnterPassword", "\u0e01\u0e23\u0e38\u0e13\u0e32\u0e43\u0e2a\u0e48\u0e23\u0e2b\u0e31\u0e2a\u0e1c\u0e48\u0e32\u0e19" }, diff --git a/org.adempiere.ui/src/org/compiere/apps/ALoginRes_vi.java b/org.adempiere.ui/src/org/compiere/apps/ALoginRes_vi.java index 4100c567de..564db2446a 100644 --- a/org.adempiere.ui/src/org/compiere/apps/ALoginRes_vi.java +++ b/org.adempiere.ui/src/org/compiere/apps/ALoginRes_vi.java @@ -32,37 +32,38 @@ public final class ALoginRes_vi extends ListResourceBundle static final Object[][] contents = new String[][] { { "Connection", "K\u1EBFt n\u1ED1i" }, - { "Defaults", "M\u1EB7c nhi�n" }, + { "Defaults", "M\u1eb7c \u0111\u1ecbnh" }, { "Login", "\u0110\u0103ng nh\u1EADp" }, { "File", "H\u1EC7 th\u1ED1ng" }, - { "Exit", "Tho�t" }, - { "Help", "Gi�p \u0111\u1EE1" }, + { "Exit", "Tho\u00e1t" }, + { "Help", "Gi\u00fap \u0111\u1ee1" }, { "About", "Gi\u1EDBi thi\u1EC7u" }, - { "Host", "M�y ch\u1EE7" }, + { "Host", "M\u00e1y ch\u1ee7" }, { "Database", "C\u01A1 s\u1EDF d\u1EEF li\u1EC7u" }, - { "User", "T�n ng\u01B0\u1EDDi d�ng" }, - { "EnterUser", "H�y nh\u1EADp t�n ng\u01B0\u1EDDi d�ng" }, + { "User", "Ng\u01b0\u1eddi s\u1eed d\u1ee5ng" }, + { "EMail", "Th\u01b0 \u0111i\u1ec7n t\u1eed" }, + { "EnterUser", "H\u00e3y nh\u1EADp t\ufffdn ng\u01B0\u1EDDi d\u1ee5ng" }, { "Password", "M\u1EADt kh\u1EA9u" }, - { "EnterPassword", "H�y nh\u1EADp m\u1EADt kh\u1EA9u" }, - { "Language", "Ng�n ng\u1EEF" }, - { "SelectLanguage", "H�y ch\u1ECDn ng�n ng\u1EEF" }, - { "Role", "Vai tr�" }, - { "Client", "C�ng ty" }, + { "EnterPassword", "H\u00e3y nh\u1EADp m\u1EADt kh\u1EA9u" }, + { "Language", "Ng\u00f4n ng\u1EEF" }, + { "SelectLanguage", "H\u00e3y ch\u1ECDn ng\u00f4n ng\u1EEF" }, + { "Role", "Vai tr\u00f2" }, + { "Client", "C\u1eddng ty" }, { "Organization", "\u0110\u01A1n v\u1ECB" }, - { "Date", "Ng�y" }, - { "Warehouse", "Kho h�ng" }, - { "Printer", "M�y in" }, - { "Connected", "\u0110� k\u1EBFt n\u1ED1i" }, + { "Date", "Ng\u00e0y" }, + { "Warehouse", "Kho h\u00e0ng" }, + { "Printer", "M\u00e1y in" }, + { "Connected", "\u0111\u01b0\u1ee3c k\u1ebft n\u1ed1i" }, { "NotConnected", "Ch\u01B0a k\u1EBFt n\u1ED1i \u0111\u01B0\u1EE3c" }, - { "DatabaseNotFound", "Kh�ng t�m th\u1EA5y CSDL" }, - { "UserPwdError", "Ng\u01B0\u1EDDi d�ng v� m\u1EADt kh\u1EA9u kh�ng kh\u1EDBp nhau" }, - { "RoleNotFound", "Kh�ng t�m th\u1EA5y vai tr� n�y" }, - { "Authorized", "\u0110� \u0111\u01B0\u1EE3c ph�p" }, - { "Ok", "\u0110\u1ED3ng �" }, + { "DatabaseNotFound", "Kh\u00f2ng t\ufffdm th\u1EA5y CSDL" }, + { "UserPwdError", "Ng\u01B0\u1EDDi d\u1ee5ng v\ufffd m\u1EADt kh\u1EA9u kh\ufffdng kh\u1EDBp nhau" }, + { "RoleNotFound", "Kh\u00f2ng t\ufffdm th\u1EA5y vai tr\ufffd n\ufffdy" }, + { "Authorized", "\u0110\ufffd \u0111\u01B0\u1EE3c ph\ufffdp" }, + { "Ok", "\u0111\u1ed3ng \u00fd" }, { "Cancel", "H\u1EE7y" }, - { "VersionConflict", "X\u1EA3y ra tranh ch\u1EA5p phi�n b\u1EA3n:" }, - { "VersionInfo", "Th�ng tin v\u1EC1 phi�n b\u1EA3n" }, - { "PleaseUpgrade", "Vui l�ng n�ng c\u1EA5p ch\u01B0\u01A1ng tr�nh" } + { "VersionConflict", "X\u1EA3y ra tranh ch\u1EA5p phi\ufffdn b\u1EA3n:" }, + { "VersionInfo", "Th\u00f2ng tin v\u1EC1 phi\ufffdn b\u1EA3n" }, + { "PleaseUpgrade", "Vui l\ufffdng n\ufffdng c\u1EA5p ch\u01B0\u01A1ng tr\ufffdnh" } }; /** diff --git a/org.adempiere.ui/src/org/compiere/apps/ALoginRes_zh.java b/org.adempiere.ui/src/org/compiere/apps/ALoginRes_zh.java index c08a3bc915..caeb28b24e 100644 --- a/org.adempiere.ui/src/org/compiere/apps/ALoginRes_zh.java +++ b/org.adempiere.ui/src/org/compiere/apps/ALoginRes_zh.java @@ -39,6 +39,7 @@ public final class ALoginRes_zh extends ListResourceBundle { "Host", "\u4e3b\u6a5f" }, { "Database", "\u8cc7\u6599\u5eab" }, { "User", "\u5e33\u865f" }, + { "EMail", "\u7535\u5b50\u90ae\u4ef6" }, { "EnterUser", "\u8acb\u9375\u5165\u5e33\u865f" }, { "Password", "\u5bc6\u78bc" }, { "EnterPassword", "\u8acb\u9375\u5165\u5bc6\u78bc" }, diff --git a/org.adempiere.ui/src/org/compiere/apps/ALoginRes_zh_CN.java b/org.adempiere.ui/src/org/compiere/apps/ALoginRes_zh_CN.java index 0cc0b337aa..f347d2714c 100644 --- a/org.adempiere.ui/src/org/compiere/apps/ALoginRes_zh_CN.java +++ b/org.adempiere.ui/src/org/compiere/apps/ALoginRes_zh_CN.java @@ -39,6 +39,7 @@ public final class ALoginRes_zh_CN extends ListResourceBundle { "Host", "\u4e3b\u673a" }, { "Database", "\u6570\u636e\u5e93" }, { "User", "\u7528\u6237\u53f7" }, + { "EMail", "\u7535\u5b50\u90ae\u4ef6" }, { "EnterUser", "\u8bf7\u8f93\u5165\u7528\u6237\u53f7" }, { "Password", "\u53e3\u4ee4" }, { "EnterPassword", "\u8bf7\u8f93\u5165\u53e3\u4ee4" }, @@ -71,4 +72,4 @@ public final class ALoginRes_zh_CN extends ListResourceBundle { return contents; } // getContents -} // ALoginRes +} // ALoginRes \ No newline at end of file