[elvystrac] r1801 - * add logic for lost password

  • From: elvys@xxxxxxxxxxxxxxxxxxxxxx
  • To: elvystrac@xxxxxxxxxxxxx
  • Date: Sun, 21 Feb 2010 00:53:55 +0100

Author: JirkaM
Date: 2010-02-21 00:53:55 +0100 (Sun, 21 Feb 2010)
New Revision: 1801

Modified:
   trunk/server/elvysCommons/src/elvys/server/bl/user/UserBL.java
   trunk/server/elvysCommons/src/elvys/server/bl/user/UserBLImpl.java
   
trunk/server/webServer2/JavaSource/cz/elvys/webServer/beans/user/UserEditBean.java
   
trunk/server/webServer2/JavaSource/cz/elvys/webServer/beans/user/UserLoginBean.java
   
trunk/server/webServer2/JavaSource/cz/elvys/webServer/beans/user/UserLostPasswordBean.java
   
trunk/server/webServer2/JavaSource/cz/elvys/webServer/messages/labels_cs.properties
   
trunk/server/webServer2/JavaSource/cz/elvys/webServer/messages/messages_cs.properties
   
trunk/server/webServer2/SpringSource/cz/elvys/webServer/toSpring/stats/StatsCTRLImpl.java
   trunk/server/webServer2/WebContent/WEB-INF/faces-beans.xml
   trunk/server/webServer2/WebContent/login_body.xhtml
   trunk/server/webServer2/WebContent/secured/components/label.xhtml
   trunk/server/webServer2/WebContent/secured/userrel/editUserForm.xhtml
   trunk/server/webServer2/WebContent/secured/userrel/listOfUsers.xhtml
   trunk/server/webServer2/WebContent/styles/login_body.css
   trunk/server/webServer2/WebContent/template/elvys-template.xhtml
Log:
* add logic for lost password
modified   src/elvys/server/bl/user/UserBL.java
modified   src/elvys/server/bl/user/UserBLImpl.java
modified   JavaSource/cz/elvys/webServer/beans/user/UserEditBean.java
modified   JavaSource/cz/elvys/webServer/beans/user/UserLoginBean.java
modified   JavaSource/cz/elvys/webServer/beans/user/UserLostPasswordBean.java
modified   JavaSource/cz/elvys/webServer/messages/labels_cs.properties
modified   JavaSource/cz/elvys/webServer/messages/messages_cs.properties
modified   SpringSource/cz/elvys/webServer/toSpring/stats/StatsCTRLImpl.java
modified   WebContent/login_body.xhtml
modified   WebContent/secured/components/label.xhtml
modified   WebContent/secured/userrel/editUserForm.xhtml
modified   WebContent/secured/userrel/listOfUsers.xhtml
modified   WebContent/styles/login_body.css
modified   WebContent/template/elvys-template.xhtml
modified   WebContent/WEB-INF/faces-beans.xml


Modified: trunk/server/elvysCommons/src/elvys/server/bl/user/UserBL.java
===================================================================
--- trunk/server/elvysCommons/src/elvys/server/bl/user/UserBL.java      
2010-02-19 19:01:30 UTC (rev 1800)
+++ trunk/server/elvysCommons/src/elvys/server/bl/user/UserBL.java      
2010-02-20 23:53:55 UTC (rev 1801)
@@ -17,11 +17,28 @@
        public static final int USER_LOGED_FAILURE = 1;
                
        
+       /**
+        * Method for loading user by login. There is created session.
+        * @param login Username of user
+        * @return User Object of User
+        * @throws ExecuteException
+        */
        public User getUserByUserNameMakeSession(String login) throws 
ExecuteException; 
        public User getUserByUserName(String login, Session sess) throws 
ExecuteException;
        
+       /**
+        * Save user into db.
+        * @param user
+        */
        public void saveOrUpdateUser(User user);
        
+       
+       /**
+        * Load all users specified by company and competency.
+        * @param compID company id
+        * @param competency competency
+        * @return
+        */
        public List<User> loadAllUsers(int compID,String competency);
        
        /**
@@ -58,6 +75,38 @@
         */
        public String getSaltPassword(String pass, String securedPart);
                
+       /**
+        * Temporary method for regenerate password to new form.
+        */
        public void saltPasswordForAllUsers();
        
+       /**
+        * Method for testing username unique.
+        * @param login
+        * @return
+        */     
+       public boolean isLoginUnique(String login, User user);
+       
+       /**
+        * Validate email with regular expression
+        * @param email
+        * @return true valid, false invalid
+        */
+       public boolean isCorrectEmail(String email);
+       
+       /**
+        * Method for create temporary password and send email with new 
password to user.
+        * @param user 
+        */
+       public String generateRandomString(int lenght);
+       
+       /**
+        * Method for sending email to user email.
+        * @param to
+        * @param subject
+        * @param body
+        * @return true if email is send, false is sending failed  
+        */
+       public boolean sendMail(String to,String subject, String body);
+       
 }

Modified: trunk/server/elvysCommons/src/elvys/server/bl/user/UserBLImpl.java
===================================================================
--- trunk/server/elvysCommons/src/elvys/server/bl/user/UserBLImpl.java  
2010-02-19 19:01:30 UTC (rev 1800)
+++ trunk/server/elvysCommons/src/elvys/server/bl/user/UserBLImpl.java  
2010-02-20 23:53:55 UTC (rev 1801)
@@ -4,8 +4,13 @@
 import java.math.BigInteger;
 import java.security.SecureRandom;
 import java.util.ArrayList;
+import java.util.Date;
 import java.util.LinkedList;
 import java.util.List;
+import java.util.Properties;
+import java.util.Random;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
 
 import org.apache.commons.codec.digest.DigestUtils;
 import org.hibernate.Hibernate;
@@ -21,19 +26,18 @@
 import cz.elvys.webServer.db.InitSessionFactory;
 import cz.elvys.webServer.toSpring.exception.ExecuteException;
 
+
+import javax.activation.*;
+
 public class UserBLImpl implements UserBL {
 
        private static final int PASSWORD_SALT_PART_LENGTH = 8;
+       private static final String EMAIL_PATTERN = 
"^[_A-Za-z0-9-]+(\\.[_A-Za-z0-9-]+)*@[A-Za-z0-9]+(\\.[A-Za-z0-9]+)*(\\.[A-Za-z]{2,})$";
+       private static final String PASSWORD_RANDOM_ALLOWED_CHAR = 
"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";    
        
-       private String getSalt() throws ExecuteException{
-               return null;
-       }
+       private static final String EMAIL_MAIL_SERVER = "smpt.elvys.cz";
+       private static final String EMAIL_FROM = "lostpassword@xxxxxxxx";
        
-       private String getMD5Salted(String value) throws ExecuteException {
-               return null;
-       }
-
-       
        @Override
        public User getUserByUserNameMakeSession(String login) throws 
ExecuteException {
                Session session = 
InitSessionFactory.getInstance().getCurrentSession();
@@ -65,7 +69,7 @@
                Query query = sess.createQuery("from User user " +
                                "inner join fetch user.role " +
                                "inner join fetch user.company " +
-                               "where username=:usname");
+                               "where user.username=:usname");
                query.setString("usname", login);               
                List<User> users = query.list();
                if(users.size() == 1){
@@ -74,6 +78,7 @@
                return null; 
        }
        
+       @Override
        public void saveOrUpdateUser(User user){
                // ADD validation of password if not updating
                Session sess = 
InitSessionFactory.getInstance().getCurrentSession();
@@ -92,6 +97,7 @@
                }
        }
 
+       @Override
        public List<User> loadAllUsers(int compID,String competency) {
                Session sess = 
InitSessionFactory.getInstance().getCurrentSession();
                Transaction tx = sess.getTransaction();
@@ -108,12 +114,12 @@
                                // superadmin sees all users
                                query = sess.createQuery("from User as user " +
                                                "inner join fetch user.role " +
-                                               "inner join fetch user.company 
WHERE user.disabled = 0");
+                                               "inner join fetch user.company 
WHERE user.disabled = 0 ORDER BY user.role.role,user.surname");
                        } else if (competency.equalsIgnoreCase("admin")) {
                                query = sess.createQuery("from User as user " +
                                                "inner join fetch user.role " +
                                                "inner join fetch user.company 
" +
-                                               "where user.company=:compID and 
user.role.role!='superadmin' AND user.disabled = 0" );
+                                               "where user.company=:compID and 
user.role.role!='superadmin' AND user.disabled = 0 ORDER BY 
user.role.role,user.surname" );
                                query.setInteger("compID", compID);
                        } else {
                                // TODO log
@@ -149,6 +155,7 @@
                }
        }
        
+       @Override
        public List<Company> loadPermittedCompany(int compID,String competency) 
{
                Session sess = 
InitSessionFactory.getInstance().getCurrentSession();
                Transaction tx = sess.getTransaction();
@@ -177,7 +184,7 @@
                return companiesList;
        }
        
-       
+       @Override
        public List<Role> loadPermittedRolesList() {
                Session sess = 
InitSessionFactory.getInstance().getCurrentSession();
                Transaction tx = sess.getTransaction();
@@ -248,5 +255,80 @@
        }
        
        
+       @Override
+       public boolean isLoginUnique(String login,User userSelected) {          
+               User user = null;
+               try {
+                       user = getUserByUserNameMakeSession(login);
+               } catch (ExecuteException e) {
+                       throw new Error("Unable get user by login name.", e);
+               }
+               
+               if(user==null){
+                       return true;
+               }else{
+                       if(userSelected !=null && 
(user.getId().equals(userSelected.getId()))){
+                               return true;
+                       }
+               }
+               return false;
+       }
+
+       @Override
+       public boolean isCorrectEmail(String email){
+               Pattern pattern = Pattern.compile(EMAIL_PATTERN);
+               Matcher matcher = pattern.matcher(email);
+               return matcher.matches();
+       }
        
+       
+       
+       public String generateRandomString(int lenght){
+               Random rand= new Random();
+               StringBuffer out=new StringBuffer();
+               
+               String allowedChars = PASSWORD_RANDOM_ALLOWED_CHAR;
+
+        while(out.length() < lenght){
+            int idx=Math.abs(( rand.nextInt() % allowedChars.length() ));
+            out.append(allowedChars.charAt(idx));
+        }
+           return out.toString();          
+       }
+       
+       @Override
+    public boolean sendMail(String to, String subject, String messageBody) {
+       /*
+               // Setup mail server
+               Properties props = System.getProperties();
+               props.put("mail.smtp.host", mailServer);
+               
+               // Get a mail session           
+               Session sess = 
InitSessionFactory.getInstance().getCurrentSession();
+               
+               // Define a new mail message
+               Message message = new MimeMessage(session);
+               message.setFrom(new InternetAddress(from));
+               message.addRecipient(Message.RecipientType.TO, new 
InternetAddress(to));
+               message.setSubject(subject);
+               
+               // Create a message part to represent the body text
+               BodyPart messageBodyPart = new MimeBodyPart();
+               messageBodyPart.setText(messageBody);
+               
+               //use a MimeMultipart as we need to handle the file attachments
+               Multipart multipart = new MimeMultipart();
+               
+               //add the message body to the mime message
+               multipart.addBodyPart(messageBodyPart);
+               
+               // Put all message parts in the message
+               message.setContent(multipart);
+               
+               // Send the message
+               Transport.send(message);
+               */
+       return true;
+       }
+               
 }

Modified: 
trunk/server/webServer2/JavaSource/cz/elvys/webServer/beans/user/UserEditBean.java
===================================================================
--- 
trunk/server/webServer2/JavaSource/cz/elvys/webServer/beans/user/UserEditBean.java
  2010-02-19 19:01:30 UTC (rev 1800)
+++ 
trunk/server/webServer2/JavaSource/cz/elvys/webServer/beans/user/UserEditBean.java
  2010-02-20 23:53:55 UTC (rev 1801)
@@ -39,11 +39,20 @@
        private static final long serialVersionUID = 8092026699388193893L;
        
        private User selectedUser = null;
+       
+       // flag for editing by admin or superadmin
        private boolean updating;
+       
+       // flag for editing profile by his own user
+       private boolean updatingProfile;
+       
        private List<SelectItem> companiesToSelect = null;
        private Integer sizeOfCompaniesToSelect = null;
        private List<SelectItem> rolesToSelect = null;
        private Integer sizeOfRolesToSelect = null;
+       
+       // password are separated from object user beacuse of password updating
+       private String password = null;
        private String passwordAgain = null;
        
        private UserBL userBL;
@@ -129,40 +138,102 @@
        }
        
        
-       
-       /**
-        * Stores new User into DB and forwards to ListOfUsers UC.
-        * @return
-        */
-       public String saveUser() {
+       private String saveOrUpdateUser(boolean isEdit){
+               String result = null;
                
-               if (selectedUser.getPassword().equals(passwordAgain)) {
-                       // salt password
-                       String password = 
userBL.getSaltPassword(selectedUser.getPassword(),null);
-                       selectedUser.setPassword(password);
-                       
-                       // password and passwordAgain matched
-                       userBL.saveOrUpdateUser(selectedUser);
-                       UserListBean userList = BeanManager.getUserList();
-                       return userList.prepareListOfUsers();                   
-               } else {
-                       // password and passwordAgain are different
+               if(!isEdit && password.equals("")){
                        FacesMessage message =  MessageUtils.getMessage(
+                                       "user.form.emptyPassword", null, 
FacesMessage.SEVERITY_ERROR);
+                       FacesContext fc = FacesContext.getCurrentInstance();
+                       fc.addMessage("editUserForm:password", message);
+                       result = "error";
+               }
+               
+               if(!isEdit && password.equals("")){
+                       FacesMessage message =  MessageUtils.getMessage(
+                                       "user.form.emptyPassword", null, 
FacesMessage.SEVERITY_ERROR);
+                       FacesContext fc = FacesContext.getCurrentInstance();
+                       fc.addMessage("editUserForm:password", message);
+                       result = "error";
+               }
+               
+               // password and passwordAgain are different
+               if (!password.equals(passwordAgain)) {                  
+                       FacesMessage message =  MessageUtils.getMessage(
                                        "user.form.badPasswordAgain", null, 
FacesMessage.SEVERITY_ERROR);
                        FacesContext fc = FacesContext.getCurrentInstance();
                        fc.addMessage("editUserForm:passwordAgain", message);
-                       return "error";
+                       result = "error";
+               } 
+               
+               // check unique of username
+               boolean isLoginUnique = true;
+               
+               if(isEdit){                     
+                       isLoginUnique = 
userBL.isLoginUnique(selectedUser.getUsername(),selectedUser);
+               }else{
+                       isLoginUnique = 
userBL.isLoginUnique(selectedUser.getUsername(),null);
                }
+               
+               if(!isLoginUnique){
+                       FacesMessage message =  MessageUtils.getMessage(
+                                       "user.form.loginAlreadyExists", null, 
FacesMessage.SEVERITY_ERROR);
+                       FacesContext fc = FacesContext.getCurrentInstance();
+                       fc.addMessage("editUserForm:usernameField", message);
+                       result = "error";
+               }
+               
+               // check email address
+               if(!userBL.isCorrectEmail(selectedUser.getEmail())){
+                       FacesMessage message =  MessageUtils.getMessage(
+                                       "user.form.user.form.setCorrectEmail", 
null, FacesMessage.SEVERITY_ERROR);
+                       FacesContext fc = FacesContext.getCurrentInstance();
+                       fc.addMessage("editUserForm:emailField", message);
+                       result = "error";
+               }
+               
+               if(result == null){             
+                       // salt password only if password is changed
+                       if(!isEdit){
+                               String passwordSalt = 
userBL.getSaltPassword(password,null);
+                               selectedUser.setPassword(passwordSalt);
+                       }else{
+                               if(!password.equals("")){
+                                       String passwordSalt = 
userBL.getSaltPassword(password,null);
+                                       selectedUser.setPassword(passwordSalt);
+                               }
+                       }
+                       
+                       // set company by logged user, or use sended by 
superadmin
+                       Company company = selectedUser.getCompany(); 
+                       if(company == null){
+                               UserLoginBean me = BeanManager.getUser();
+                               selectedUser.setCompany(me.getCompany());
+                       }
+                                                               
+                       userBL.saveOrUpdateUser(selectedUser);
+                       UserListBean userList = BeanManager.getUserList();
+                       return userList.prepareListOfUsers();
+               }
+               
+               return result;          
        }
        
+       /**
+        * Stores new User into DB and forwards to ListOfUsers UC.
+        * @return
+        */
+       public String saveUser() {      
+               return saveOrUpdateUser(false); 
+       }
        
+       
        /**
         * Stores updated User into DB and forwards to ListOfUsers UC.
         * @return
         */
        public String updateUser() {
-               userBL.saveOrUpdateUser(selectedUser);
-               return "listOfUsers";
+               return saveOrUpdateUser(true);                          
        }
        
        
@@ -218,4 +289,20 @@
                }
                return null;
        }
+
+       public boolean isUpdatingProfile() {
+               return updatingProfile;
+       }
+
+       public void setUpdatingProfile(boolean updatingProfile) {
+               this.updatingProfile = updatingProfile;
+       }
+
+       public String getPassword() {
+               return password;
+       }
+
+       public void setPassword(String password) {
+               this.password = password;
+       }
 }

Modified: 
trunk/server/webServer2/JavaSource/cz/elvys/webServer/beans/user/UserLoginBean.java
===================================================================
--- 
trunk/server/webServer2/JavaSource/cz/elvys/webServer/beans/user/UserLoginBean.java
 2010-02-19 19:01:30 UTC (rev 1800)
+++ 
trunk/server/webServer2/JavaSource/cz/elvys/webServer/beans/user/UserLoginBean.java
 2010-02-20 23:53:55 UTC (rev 1801)
@@ -1,7 +1,7 @@
 package cz.elvys.webServer.beans.user;
 
 import java.io.Serializable;
-import java.util.List;
+import java.util.Date;
 import java.util.TimeZone;
 
 import javax.faces.context.FacesContext;
@@ -9,14 +9,10 @@
 import javax.servlet.http.HttpSession;
 
 import org.apache.log4j.Logger;
-import org.hibernate.Query;
-import org.hibernate.Session;
-import org.hibernate.Transaction;
 
 import cz.elvys.commons.utils.CommonUtils;
 import cz.elvys.webServer.HIBgen.Company;
 import cz.elvys.webServer.HIBgen.User;
-import cz.elvys.webServer.db.InitSessionFactory;
 import cz.elvys.webServer.toSpring.exception.ExecuteException;
 import cz.elvys.webServer.utils.faces.MessageUtils;
 import cz.elvys.webServer.utils.type.ValidationMessageHolder;
@@ -33,8 +29,7 @@
        private static final long serialVersionUID = 8092026699388193893L;
        
        // messages
-       private static final String LOGGED_IN = "User logged in: ";
-       private static final String TOO_MANY_USERS_FOUND = "Too many users with 
same credentials found in DB: ";
+       private static final String LOGGED_IN = "User logged in: ";     
        private static final String NOT_FOUND = "User not found in DB: ";       
        
        private static final String ERROR_WHILE_READING_USER = "Erro while 
reading user from DB.";
        
@@ -199,14 +194,47 @@
                String whatToReturn = null;
                // check the result of search for user
                if(user!=null){
+                       // we have selected user by usernam, try to compare 
password
+                       boolean isAuthorized = false;
+                       
+                       
                        // user is selected, check password
-                       if(!userBL.comparePassword(formPassword, 
user.getPassword())){
-                               // user is disabled
-                               whatToReturn = "failure";
-                               ValidationMessageHolder holder = 
MessageUtils.prepareValidationMessageHolder(
-                                       "LoginForm:UsernameField", "login.bad");
-                               MessageUtils.processValidationMessage(holder);
+                       if(userBL.comparePassword(formPassword, 
user.getPassword())){
+                               isAuthorized = true;                            
                        }else{
+                               // try temporary password
+                               if(user.getLostPassword() != null){
+                                       // there is save temporary password, 
try to compare them and check time validity
+                                       Long timeValidity = 
user.getLostPasswdTime().getTime();
+                                       Long today = (new Date()).getTime();
+                                       if(timeValidity<today){
+                                               // temporary password is expired
+                                               whatToReturn = "failure";
+                                               ValidationMessageHolder holder 
= MessageUtils.prepareValidationMessageHolder(
+                                                       
"LoginForm:UsernameField", "login.temporaryPassExpired");
+                                               
MessageUtils.processValidationMessage(holder);
+                                       }else{
+                                               
if(formPassword.equals(user.getLostPassword())){
+                                                       isAuthorized = true;
+                                               }else{
+                                                       // user is disabled
+                                                       whatToReturn = 
"failure";
+                                                       ValidationMessageHolder 
holder = MessageUtils.prepareValidationMessageHolder(
+                                                               
"LoginForm:UsernameField", "login.bad");
+                                                       
MessageUtils.processValidationMessage(holder);
+                                               }
+                                       }
+                                       
+                               }else{
+                                       // user is disabled
+                                       whatToReturn = "failure";
+                                       ValidationMessageHolder holder = 
MessageUtils.prepareValidationMessageHolder(
+                                               "LoginForm:UsernameField", 
"login.bad");
+                                       
MessageUtils.processValidationMessage(holder);
+                               }
+                       }                       
+                       
+                       if(isAuthorized){
                                whatToReturn = "success";
                                if (!user.isDisabled()) {
                                        loggedIn = true;

Modified: 
trunk/server/webServer2/JavaSource/cz/elvys/webServer/beans/user/UserLostPasswordBean.java
===================================================================
--- 
trunk/server/webServer2/JavaSource/cz/elvys/webServer/beans/user/UserLostPasswordBean.java
  2010-02-19 19:01:30 UTC (rev 1800)
+++ 
trunk/server/webServer2/JavaSource/cz/elvys/webServer/beans/user/UserLostPasswordBean.java
  2010-02-20 23:53:55 UTC (rev 1801)
@@ -1,28 +1,21 @@
 package cz.elvys.webServer.beans.user;
 
 import java.io.Serializable;
-import java.util.List;
-import java.util.TimeZone;
+import java.util.Date;
 
+import javax.faces.application.FacesMessage;
 import javax.faces.context.FacesContext;
 import javax.servlet.ServletRequest;
-import javax.servlet.http.HttpSession;
 
 import org.apache.log4j.Logger;
-import org.hibernate.Query;
-import org.hibernate.Session;
-import org.hibernate.Transaction;
 
 import cz.elvys.commons.utils.CommonUtils;
-import cz.elvys.webServer.HIBgen.Company;
 import cz.elvys.webServer.HIBgen.User;
-import cz.elvys.webServer.db.InitSessionFactory;
 import cz.elvys.webServer.toSpring.exception.ExecuteException;
 import cz.elvys.webServer.utils.faces.MessageUtils;
 import cz.elvys.webServer.utils.type.ValidationMessageHolder;
 import elvys.server.bl.Fact;
 import elvys.server.bl.user.UserBL;
-import elvys.server.bl.user.UserBLImpl;
 
 public class UserLostPasswordBean implements Serializable {
        // fields
@@ -30,7 +23,109 @@
        
        // const
        private static final long serialVersionUID = 8092026699388193893L;
+       private static final int PASSWORD_RANDOM_DEFAULT_LENGTH = 8;
        
        // messages
+       private static final String ERROR_WHILE_READING_USER = "Erro while 
reading user from DB for send lost password.";               
+       
+       private UserBL userBL;
+       private boolean openLostPassword;
+       
+       private String loginInput;
+       
+       public UserLostPasswordBean(){
+               userBL = Fact.getUserBL();
+               openLostPassword = false;
+               loginInput = null;
+       }
+       
+       /**
+        * Compares bean's property username/password with database entries. 
<br/>
+        * This method is called on user's login form is sent.
+        * 
+        * @return
+        */
+       public String lostPassword() {  
+               openLostPassword = true;
+               // verify password
+               if (loginInput == null || loginInput.length() == 0) {
+                       ValidationMessageHolder holder = 
MessageUtils.prepareValidationMessageHolder(
+                                       "LostPasswordForm:LoginInputField", 
"login.lostPassword.EmptyUsername");
+                       MessageUtils.processValidationMessage(holder);
+                       return "failure";
+               }
+       
+               // prepare info about remote host
+               ServletRequest req = (ServletRequest) 
FacesContext.getCurrentInstance().getExternalContext().getRequest();
+               String ip = req.getRemoteAddr();
+               String host = req.getRemoteHost();
+               
+               User user = null;
+               
+               // password and username are filled, run authorization
+               try {
+                       user = userBL.getUserByUserNameMakeSession(loginInput);
+               } catch (ExecuteException e) {
+                       // TODO Auto-generated catch block
+                       String message = 
CommonUtils.prepareErrorMessage(ERROR_WHILE_READING_USER, "user", loginInput, 
"ip", ip, "host", host);
+                       log.error(message);
+               }       
+               
+               if(user == null){
+                       // proper user hasn't been found in DB                  
                        
+                       ValidationMessageHolder holder = 
MessageUtils.prepareValidationMessageHolder(
+                                       "LostPasswordForm:LoginInputField", 
"login.lostPassword.UserNotExists");
+                       MessageUtils.processValidationMessage(holder);
+                       return "failure";
+               }else{
+                       // we have selected user from db, try to generate and 
send email
+                       
+                       // create temporary password for user
+                       String password = 
userBL.generateRandomString(PASSWORD_RANDOM_DEFAULT_LENGTH);
+                       user.setLostPassword(password);
+                       
+                       // set temporary password availability
+                       Date tomorrow = new Date((new 
Date()).getTime()+1000*60*60*24);
+                       user.setLostPasswdTime(tomorrow);
+                       
+                       // save user
+                       userBL.saveOrUpdateUser(user);                  
+                       
+                       // create email
+                       String to = user.getEmail();
+                       String subject = "Subject"; // 
login.lostPassword.Email.Subject @TODOD ziskat z messages 
+                       String body = "cast1" + " heslo:" + password + "cast2"; 
// login.lostPassword.Email.Body1, login.lostPassword.Email.Body2
+                       
+                       if(!userBL.sendMail(to,subject,body)){
+                               // proper user hasn't been found in DB          
        
+                               ValidationMessageHolder holder = 
MessageUtils.prepareValidationMessageHolder(
+                                       "LostPasswordForm:LoginInputField", 
"login.lostPassword.Email.NotSend");
+                               MessageUtils.processValidationMessage(holder);  
                
+                               return "failure";
+                       }else{
+                               // proper user hasn't been found in DB          
        
+                               ValidationMessageHolder holder = 
MessageUtils.prepareValidationMessageHolder(
+                                       "LostPasswordForm:LoginInputField", 
"login.lostPassword.Email.SuccessfullySend");
+                               MessageUtils.processValidationMessage(holder);  
                
+                               return "failure";
+                       }
+               }               
+       }
 
+       public boolean isOpenLostPassword() {
+               return openLostPassword;
+       }
+
+       public void setOpenLostPassword(boolean openLostPassword) {
+               this.openLostPassword = openLostPassword;
+       }
+
+       public String getLoginInput() {
+               return loginInput;
+       }
+
+       public void setLoginInput(String loginInput) {
+               this.loginInput = loginInput;
+       }       
+
 }

Modified: 
trunk/server/webServer2/JavaSource/cz/elvys/webServer/messages/labels_cs.properties
===================================================================
--- 
trunk/server/webServer2/JavaSource/cz/elvys/webServer/messages/labels_cs.properties
 2010-02-19 19:01:30 UTC (rev 1800)
+++ 
trunk/server/webServer2/JavaSource/cz/elvys/webServer/messages/labels_cs.properties
 2010-02-20 23:53:55 UTC (rev 1801)
@@ -18,6 +18,9 @@
 login.reconnect=Byli jste odhl\u00E1\u0161eni. P\u0159ihla\u0161te se 
pros\u00EDm znovu.
 login.createdby=\u00A9 2009 SECO Music s.r.o.
 
+login.lostPassword=Zapomn\u011bli jste heslo? Klikn\u011bte zde, porad\u00edme 
V\u00e1m.
+login.lostPassword.infoMessage=Vypl\u0148te pros\u00edm Va\u0161e 
u\u017eivatelsk\u00e9 jm\u00e9no. Na V\u00e1\u0161 email bude automaticky 
odesl\u00e1n email s dal\u0161\u00edmi pokyny.
+login.lostPassword.Send=Odeslat email
 
 
 
@@ -30,6 +33,7 @@
 template.menu.user=U\u017Eivatel
 template.menu.user.list=Seznam u\u017Eivatel\u016F
 template.menu.user.new=Nov\u00FD u\u017Eivatel
+template.menu.user.update=Upravit profil
 template.menu.layout=Rozvr\u017Een\u00ED
 template.menu.layout.list=Seznam rozvr\u017Een\u00ED
 template.menu.layout.create=Nov\u00E9 rozvr\u017Een\u00ED

Modified: 
trunk/server/webServer2/JavaSource/cz/elvys/webServer/messages/messages_cs.properties
===================================================================
--- 
trunk/server/webServer2/JavaSource/cz/elvys/webServer/messages/messages_cs.properties
       2010-02-19 19:01:30 UTC (rev 1800)
+++ 
trunk/server/webServer2/JavaSource/cz/elvys/webServer/messages/messages_cs.properties
       2010-02-20 23:53:55 UTC (rev 1801)
@@ -1,8 +1,20 @@
 company.form.duplicitename=Jm\u00E9no spole\u010Dnosti "{0}" ji\u017E existuje.
 
 user.form.badPasswordAgain=\u0160patn\u011B zopakovan\u00E9 heslo.
+user.form.loginAlreadyExists=Uveden\u00e9 u\u017eivatelsk\u00e9 jm\u00e9no se 
ji\u017e v datab\u00e1zi nach\u00e1z\u00ed, uve\u010fte pros\u00edm jin\u00e9
+user.form.setCorrectEmail=Zadejte pros\u00edm email ve spr\u00e1vn\u00e9m 
tvaru.
+user.form.emptyPassword=Vypl\u0148te pros\u00edm heslo
 
+login.lostPassword.UserNotExists=Litujeme, ale zasl\u00e1n\u00ed emailu se 
nezda\u0159ilo, zkontrolujte pros\u00edm u\u017eivatelsk\u00e9 jm\u00e9no.
+login.lostPassword.EmptyUsername=Vypl\u0148te pros\u00edm 
u\u017eivatelsk\u00e9 jm\u00e9no
+login.lostPassword.Email.Subject=Do\u010dasn\u00e9 heslo ze syst\u00e9mu 
elvys.cz
+login.lostPassword.Email.Body1=Dobr\u00fd den, \n\nze syst\u00e9mu elvys 
V\u00e1m bylo zasl\u00e1no do\u010dasn\u00e9 heslo pro 
p\u0159ihl\u00e1\u0161en\u00ed. Heslo je k pou\u017eit\u00ed 24 hodin od 
pod\u00e1n\u00ed \u017e\u00e1dost, proto je nutn\u00e9 si heslo po 
p\u0159\u00edhl\u00e1\u0161en\u00ed ihned zm\u011bnit.\n
+login.lostPassword.Email.Body2=\nPokud jste ne\u017e\u00e1dali o 
zasl\u00e1n\u00ed nov\u00e9ho hesla, tuto zpr\u00e1vu pros\u00edm 
ignorujte.\n\nV\u00e1\u0161 t\u00fdm elvys.cz\n\n
+login.lostPassword.Email.NotSend=Litujeme, ale email se nepoda\u0159ilo 
odeslat. Kontaktujte pros\u00edm spr\u00e1vce syst\u00e9mu.
+login.lostPassword.Email.SuccessfullySend=Na email p\u0159i\u0159azen\u00fd k 
zadan\u00e9mu u\u017eivatelsk\u00e9mu jm\u00e9nu bylo odesl\u00e1no 
do\u010dasn\u00e9 heslo.
 login.bad=Neplatn\u00E9 p\u0159ihl\u00E1\u0161en\u00ED. Zkuste to pros\u00EDm 
znovu.
+login.temporaryPassExpired=Platnost do\u010dasn\u00e9ho hesla vypr\u0161ela, 
nechte si zaslat nov\u00e9 do\u010dasn\u00e9 heslo.
+login.temporaryPassWrong=Do\u010dasn\u00e9 heslo nesouhlas\u00ed, zkuste jej 
zadat znovu nebo si nechte zaslat nov\u00e9.
 
 elvys.list.modal.nightmode.badtime=\u010Cas mus\u00ED b\u00FDt ve 
form\u00E1tu\: "HH\:mm".
 

Modified: 
trunk/server/webServer2/SpringSource/cz/elvys/webServer/toSpring/stats/StatsCTRLImpl.java
===================================================================
--- 
trunk/server/webServer2/SpringSource/cz/elvys/webServer/toSpring/stats/StatsCTRLImpl.java
   2010-02-19 19:01:30 UTC (rev 1800)
+++ 
trunk/server/webServer2/SpringSource/cz/elvys/webServer/toSpring/stats/StatsCTRLImpl.java
   2010-02-20 23:53:55 UTC (rev 1801)
@@ -17,6 +17,7 @@
 import cz.elvys.webServer.db.InitSessionFactory;
 import cz.elvys.webServer.toSpring.stats.helper.AnyChartXMLHandler;
 import cz.elvys.webServer.utils.faces.BeanManager;
+import cz.elvys.webServer.utils.faces.MessageUtils;
 
 /**
  * @author Jirka
@@ -600,9 +601,9 @@
                }
                this.xmlFile.setTitle(chartTitle);
                this.xmlFile.setChartType(this.chartType);
-               
this.xmlFile.setTitleX(BeanManager.getLabel("stats.show.labelx") + " " + 
BeanManager.getLabel("stats.show.date.from") + " "
-                               + this.getDateFromOutputFormat() + " " + 
BeanManager.getLabel("stats.show.date.to") + " " + 
this.getDateToOutputFormat());
-               
this.xmlFile.setTitleY(BeanManager.getLabel("stats.show.labely"));
+               
this.xmlFile.setTitleX(MessageUtils.getLabel("stats.show.labelx") + " " + 
MessageUtils.getLabel("stats.show.date.from") + " "
+                               + this.getDateFromOutputFormat() + " " + 
MessageUtils.getLabel("stats.show.date.to") + " " + 
this.getDateToOutputFormat());
+               
this.xmlFile.setTitleY(MessageUtils.getLabel("stats.show.labely"));
 
                this.xmlFileContent = 
this.xmlFile.generateXMLFile(this.dateFrom, this.dateTo, screenName, 
this.selectedObjectId);
                return true;

Modified: trunk/server/webServer2/WebContent/WEB-INF/faces-beans.xml
===================================================================
--- trunk/server/webServer2/WebContent/WEB-INF/faces-beans.xml  2010-02-19 
19:01:30 UTC (rev 1800)
+++ trunk/server/webServer2/WebContent/WEB-INF/faces-beans.xml  2010-02-20 
23:53:55 UTC (rev 1801)
@@ -19,6 +19,11 @@
   <managed-bean-scope>session</managed-bean-scope>
  </managed-bean>
  <managed-bean>
+  <managed-bean-name>userLostPasswordBean</managed-bean-name>
+  
<managed-bean-class>cz.elvys.webServer.beans.user.UserLostPasswordBean</managed-bean-class>
+  <managed-bean-scope>session</managed-bean-scope>
+ </managed-bean>
+ <managed-bean>
   <managed-bean-name>fileListBean</managed-bean-name>
   
<managed-bean-class>cz.elvys.webServer.beans.filerel.FileListBean</managed-bean-class>
   <managed-bean-scope>session</managed-bean-scope>

Modified: trunk/server/webServer2/WebContent/login_body.xhtml
===================================================================
--- trunk/server/webServer2/WebContent/login_body.xhtml 2010-02-19 19:01:30 UTC 
(rev 1800)
+++ trunk/server/webServer2/WebContent/login_body.xhtml 2010-02-20 23:53:55 UTC 
(rev 1801)
@@ -45,6 +45,23 @@
                </h:panelGrid>          
        </h:form>       
        <h:outputText value="${lbl['login.createdby']}" 
styleClass="loginFootnote" />
+       
+       <rich:simpleTogglePanel switchType="ajax" 
label="${lbl['login.lostPassword']}" 
opened="#{userLostPasswordBean.openLostPassword}" 
styleClass="loginLostPassword">
+        ${lbl['login.lostPassword.infoMessage']}
+        <h:form id="LostPasswordForm">        
+               <h:outputLabel for="UserLostPasswordField">
+                               <h:outputText value="${lbl['login.username']}" 
styleClass="lostPasswordUserName" />:
+                       </h:outputLabel>
+                       <h:inputText value="#{userLostPasswordBean.loginInput}" 
id="LoginInputField" styleClass="lostPasswordInputUserName"/>
+                               
+                       <h:commandButton 
value="${lbl['login.lostPassword.Send']}"
+                                                       immediate="false" 
action="#{userLostPasswordBean.lostPassword}"
+                                                       rendered="true" /><br/>
+                       
+                       <h:message id="LostPassswordMessage" 
for="LoginInputField" styleClass="lostPasswordErrorMessage"/>                   
           
+               </h:form>             
+    </rich:simpleTogglePanel>
+       
        </rich:panel>
 </f:view>
 

Modified: trunk/server/webServer2/WebContent/secured/components/label.xhtml
===================================================================
--- trunk/server/webServer2/WebContent/secured/components/label.xhtml   
2010-02-19 19:01:30 UTC (rev 1800)
+++ trunk/server/webServer2/WebContent/secured/components/label.xhtml   
2010-02-20 23:53:55 UTC (rev 1801)
@@ -18,6 +18,8 @@
  |             tooltip of the component
  |  -important: 
  |             shows asterisk(*) before label when important
+ |  -rendered:
+ |      whether component is rendered or not..
 
 
 EXTEND POINTS (not working?):
@@ -30,7 +32,7 @@
 inputPart
  -->
 
-       <h:panelGroup id="#{id}_label_area">
+       <h:panelGroup id="#{id}_label_area" rendered="#{ (empty rendered) ? 
true : rendered }">
                <!-- label -->
                <h:panelGroup>
                        <ui:insert name="labelPre"/>

Modified: trunk/server/webServer2/WebContent/secured/userrel/editUserForm.xhtml
===================================================================
--- trunk/server/webServer2/WebContent/secured/userrel/editUserForm.xhtml       
2010-02-19 19:01:30 UTC (rev 1800)
+++ trunk/server/webServer2/WebContent/secured/userrel/editUserForm.xhtml       
2010-02-20 23:53:55 UTC (rev 1801)
@@ -14,16 +14,25 @@
 </ui:define>
 
        <ui:define name="contentTitle">
-               <h:outputText 
rendered="#{!userEditBean.updating}">#{lbl['user.edit.form.title.create']}</h:outputText>
-               <h:outputText 
rendered="#{userEditBean.updating}">#{lbl['user.edit.form.title.modify']}</h:outputText>
+               <h:outputText rendered="#{(!userEditBean.updating AND 
!userEditBean.updatingProfile)}">#{lbl['user.edit.form.title.create']}</h:outputText>
+               <h:outputText rendered="#{userEditBean.updating || 
userEditBean.updatingProfile}">#{lbl['user.edit.form.title.modify']}</h:outputText>
        </ui:define>
        <ui:define name="contentSubTitle"></ui:define>
 
        <ui:define name="contentBody">
                <rich:panel>
-                       <f:facet name="header">#{userEditBean.updating ? 
lbl['user.edit.form.title.modify'] : 
lbl['user.edit.form.title.create']}</f:facet>
+                       <f:facet name="header">#{(userEditBean.updating || 
userEditBean.updatingProfile )? lbl['user.edit.form.title.modify'] : 
lbl['user.edit.form.title.create']}</f:facet>
                        <h:form id="editUserForm">
                                <h:panelGrid columns="2">
+                                       
+                                       <h:panelGroup 
rendered="#{!userEditBean.updatingProfile}">                              
+                                               <elvys:label 
id="UserEditUsernameLabel"
+                                                       
label="#{lbl['user.edit.form.username']}"></elvys:label>
+                                       </h:panelGroup>
+                                       <h:panelGroup 
rendered="#{!userEditBean.updatingProfile}">
+                                               <elvys:inputText2 
id="usernameField"
+                                                       
value="#{userEditBean.selectedUser.username}" required="true" />
+                                       </h:panelGroup>
 
                                        <elvys:label id="UserEditSurnameLabel"
                                                
label="#{lbl['user.edit.form.surname']}"></elvys:label>
@@ -45,41 +54,50 @@
                                        <elvys:inputText2 id="phoneField"
                                                
value="#{userEditBean.selectedUser.phone}" required="false" />                  
                
                                        
-
-                                       <elvys:label id="UserEditUsernameLabel"
-                                               
label="#{lbl['user.edit.form.username']}"></elvys:label>
-                                       <elvys:inputText2 id="usernameField"
-                                               
value="#{userEditBean.selectedUser.username}" required="true" />                
                        
-
                                        <elvys:label id="UserEditPassLabel"
                                                
label="#{lbl['user.edit.form.password']}"
-                                               
rendered="#{!userEditBean.updating}"></elvys:label>
-                                               
+                                               ></elvys:label>                 
                        
                                        <h:panelGroup>
                                                <h:inputSecret id="password"
-                                                       
value="#{userEditBean.selectedUser.password}" required="true"
-                                                       
rendered="#{!userEditBean.updating}"
+                                                       
value="#{userEditBean.password}" required="#{!(userEditBean.updating || 
userEditBean.updatingProfile)}"
                                                        errorStyle="border:1px 
solid red; color:red;" />
-                                               <h:message for="password" 
styleClass="error"
-                                                       
rendered="#{!userEditBean.updating}" />
+                                               <h:message for="password" 
styleClass="error"/>
                                        </h:panelGroup>
 
                                        <elvys:label id="UserEditPassagainLabel"
                                                
label="#{lbl['user.edit.form.passwordagain']}"
-                                               
rendered="#{!userEditBean.updating}"></elvys:label>
-                                       
+                                               ></elvys:label>                 
                
                                        <h:panelGroup>                          
                
                                                <h:inputSecret 
id="passwordAgain"
-                                                       
value="#{userEditBean.passwordAgain}" required="true"
-                                                       
rendered="#{!userEditBean.updating}" />
-                                               <h:message for="passwordAgain" 
styleClass="error"
-                                                       
rendered="#{!userEditBean.updating}" />
+                                                       
value="#{userEditBean.passwordAgain}" 
+                                                       
required="#{!(userEditBean.updating || userEditBean.updatingProfile)}"/>
+                                               <h:message for="passwordAgain" 
styleClass="error" />
                                        </h:panelGroup>                         
                        
 
+                                       <h:panelGroup 
rendered="#{!userEditBean.updatingProfile}">
+                                               <elvys:label 
id="UserEditRoleListLabel"
+                                                       
label="#{lbl['user.edit.form.rolelist']}"
+                                                       
tooltip="#{lbl['user.edit.form.rolelist.tooltip']}"             
+                                                       
rendered="#{!userEditBean.updatingProfile}"                                     
+                                                       ></elvys:label>
+                                       </h:panelGroup>         
+                                       <h:panelGroup 
rendered="#{!userEditBean.updatingProfile}">      
+                                               <h:selectOneListbox 
id="roleField" required="true"
+                                                       
value="#{userEditBean.selectedUser.role}"
+                                                       
size="#{userEditBean.sizeOfRolesToSelect >=3? 3 : 
userEditBean.sizeOfRolesToSelect}">
+                                                       <f:converter 
converterId="roleConverter" />
+                                                       <f:selectItems 
value="#{userEditBean.rolesToSelect}" />
+                                               </h:selectOneListbox>
+                                               <h:message for="roleField" 
styleClass="error" />
+                                       </h:panelGroup>
                                        
-                                       <elvys:label 
id="UserEditCompanyListLabel"
-                                               
label="#{lbl['user.edit.form.companylist']}"></elvys:label>
-                                       <h:panelGroup>  
+                                       
+                                       <h:panelGroup 
rendered="#{user.user.system}" >  
+                                               <elvys:label 
id="UserEditCompanyListLabel"
+                                                       
label="#{lbl['user.edit.form.companylist']}"
+                                                       
rendered="#{user.user.system}"></elvys:label>
+                                       </h:panelGroup>
+                                       <h:panelGroup 
rendered="#{user.user.system}" >  
                                                <h:selectOneListbox 
id="companyField" required="true"
                                                        
value="#{userEditBean.selectedUser.company}"
                                                        
size="#{userEditBean.sizeOfCompaniesToSelect >=3? 3 : 
userEditBean.sizeOfCompaniesToSelect}">
@@ -88,28 +106,15 @@
                                                </h:selectOneListbox>
                                                <h:message for="companyField" 
styleClass="error" />
                                        </h:panelGroup>
-
-                                       <elvys:label id="UserEditRoleListLabel"
-                                               
label="#{lbl['user.edit.form.rolelist']}"
-                                               
tooltip="#{lbl['user.edit.form.rolelist.tooltip']}"></elvys:label>
-                                       <h:panelGroup>  
-                                               <h:selectOneListbox 
id="roleField" required="true"
-                                                       
value="#{userEditBean.selectedUser.role}"
-                                                       
size="#{userEditBean.sizeOfRolesToSelect >=3? 3 : 
userEditBean.sizeOfRolesToSelect}">
-                                                       <f:converter 
converterId="roleConverter" />
-                                                       <f:selectItems 
value="#{userEditBean.rolesToSelect}" />
-                                               </h:selectOneListbox>
-                                               <h:message for="roleField" 
styleClass="error" />
-                                       </h:panelGroup>
-
+                                                                               
                                </h:panelGrid>
 
                                <!-- OK BUTTON -->
                                <h:commandButton 
value="#{lbl['user.edit.form.button.ok']}"
-                                       action="#{userEditBean.saveUser}" 
rendered="#{!userEditBean.updating}" />
+                                       action="#{userEditBean.saveUser}" 
rendered="#{!(userEditBean.updating || userEditBean.updatingProfile)}" />
                                <!-- MODIFY BUTTON -->
                                <h:commandButton 
value="#{lbl['user.edit.form.button.modify']}"
-                                       action="#{userEditBean.updateUser}" 
rendered="#{userEditBean.updating}" />
+                                       action="#{userEditBean.updateUser}" 
rendered="#{(userEditBean.updating || userEditBean.updatingProfile)}" />
                                <!-- CANCEL BUTTON -->
                                <h:commandButton 
value="#{lbl['user.edit.form.button.cancel']}"
                                        immediate="true" 
action="#{usersBean.prepareListOfUsers}"

Modified: trunk/server/webServer2/WebContent/secured/userrel/listOfUsers.xhtml
===================================================================
--- trunk/server/webServer2/WebContent/secured/userrel/listOfUsers.xhtml        
2010-02-19 19:01:30 UTC (rev 1800)
+++ trunk/server/webServer2/WebContent/secured/userrel/listOfUsers.xhtml        
2010-02-20 23:53:55 UTC (rev 1801)
@@ -93,7 +93,12 @@
                                                        <div 
class="list-operations-main">
                                                                <div 
class="list-operations-item">
                                                                        
<a4j:commandButton id="EditUser" image="/images/icons/edit.png"
-                                                                               
action="#{userEditBean.prepareUpdateUserForm}">
+                                                                               
action="#{userEditBean.prepareUpdateUserForm}"
+                                                                               
rendered="#{(
+                                                                               
                        (user.compStr eq 'admin' and user_iterator.role.role eq 
'user') ||
+                                                                               
                        (user.compStr eq 'superadmin')
+                                                                               
                        )}"
+                                                                               
>
                                                                                
<f:setPropertyActionListener value="#{user_iterator}"
                                                                                
        target="#{userEditBean.selectedUser}" />
                                                                                
<f:setPropertyActionListener value="${true}"
@@ -109,9 +114,8 @@
                                                                <div 
class="list-operations-item">
                                                                        
<a4j:commandButton id="DeleteUser"
                                                                                
rendered="#{user.user.id!=user_iterator.id and !user_iterator.system and (
-                                                                               
                        (user.compStr == 'admin' and user_iterator.role.role == 
'user') ||
-                                                                               
                        (user.compStr == 'superadmin' and 
user_iterator.role.role == 'admin') ||
-                                                                               
                        (user.compStr == 'superadmin' and 
user_iterator.role.role == 'user')
+                                                                               
                        (user.compStr eq 'admin' and user_iterator.role.role eq 
'user') ||
+                                                                               
                        (user.compStr eq 'superadmin')
                                                                                
                        )}"
                                                                                
reRender="DeleteUserModalContent"
                                                                                
oncomplete="Richfaces.showModalPanel('DeleteUserModal',{left:300, top:300})"

Modified: trunk/server/webServer2/WebContent/styles/login_body.css
===================================================================
--- trunk/server/webServer2/WebContent/styles/login_body.css    2010-02-19 
19:01:30 UTC (rev 1800)
+++ trunk/server/webServer2/WebContent/styles/login_body.css    2010-02-20 
23:53:55 UTC (rev 1801)
@@ -144,4 +144,21 @@
        width: 210px;
        background-color: red;
        border: 1px solid black;
+}
+
+.loginLostPassword {
+       left:170px;
+       top:340px;
+       width:410px;
+       position:absolute;      
+}
+
+.lostPasswordErrorMessage {
+       color:#FF0000;
+       font-weight:bold;
+       text-align:center;
+}
+
+.lostPasswordUserName {
+       font-weight:bold;
 }
\ No newline at end of file

Modified: trunk/server/webServer2/WebContent/template/elvys-template.xhtml
===================================================================
--- trunk/server/webServer2/WebContent/template/elvys-template.xhtml    
2010-02-19 19:01:30 UTC (rev 1800)
+++ trunk/server/webServer2/WebContent/template/elvys-template.xhtml    
2010-02-20 23:53:55 UTC (rev 1801)
@@ -50,11 +50,17 @@
                                                                
<f:setPropertyActionListener value="${false}" 
target="#{companiesBean.updating}" />
                                                        </rich:menuItem>
                                        </rich:dropDownMenu>
-                                       <rich:dropDownMenu id="UserMenu" 
value="#{lbl['template.menu.user']}" disabled="#{user.compStr eq 'user'}">
-                                                       <rich:menuItem 
id="ListOfUsers" value="#{lbl['template.menu.user.list']}" 
action="#{usersBean.prepareListOfUsers}" submitMode="server"/>
-                                                       <rich:menuItem 
id="NewUser" value="#{lbl['template.menu.user.new']}" 
action="#{userEditBean.prepareCreateUserForm}" submitMode="server">
+                                       <rich:dropDownMenu id="UserMenu" 
value="#{lbl['template.menu.user']}" >
+                                                       <rich:menuItem 
id="ListOfUsers" value="#{lbl['template.menu.user.list']}" 
action="#{usersBean.prepareListOfUsers}" submitMode="server" 
render="#{!(user.compStr eq 'user')}"/>
+                                                       <rich:menuItem 
id="NewUser" value="#{lbl['template.menu.user.new']}" 
action="#{userEditBean.prepareCreateUserForm}" submitMode="server" 
render="#{!(user.compStr eq 'user')}">
                                                                
<f:setPropertyActionListener value="${false}" target="#{userEditBean.updating}" 
/>
+                                                               
<f:setPropertyActionListener value="${false}" 
target="#{userEditBean.updatingProfile}" />
                                                        </rich:menuItem>
+                                                       <rich:menuItem 
id="EditUser" value="#{lbl['template.menu.user.update']}" 
action="#{userEditBean.prepareUpdateUserForm}" submitMode="server">
+                                                               
<f:setPropertyActionListener value="${true}" 
target="#{userEditBean.updatingProfile}" />
+                                                               
<f:setPropertyActionListener value="${false}" target="#{userEditBean.updating}" 
/>
+                                                               
<f:setPropertyActionListener value="#{user.user}" 
target="#{userEditBean.selectedUser}" />
+                                                       </rich:menuItem>
                                        </rich:dropDownMenu>
                                        
                                        <rich:dropDownMenu id="LayoutMenu" 
value="#{lbl['template.menu.layout']}" disabled="false">


Other related posts:

  • » [elvystrac] r1801 - * add logic for lost password - elvys