=== modified file 'dhis-2/dhis-api/src/main/java/org/hisp/dhis/user/UserCredentials.java' --- dhis-2/dhis-api/src/main/java/org/hisp/dhis/user/UserCredentials.java 2011-06-11 08:15:29 +0000 +++ dhis-2/dhis-api/src/main/java/org/hisp/dhis/user/UserCredentials.java 2011-06-11 19:51:41 +0000 @@ -28,6 +28,7 @@ */ import java.io.Serializable; +import java.util.Date; import java.util.HashSet; import java.util.Set; @@ -61,6 +62,8 @@ private String password; private Set userAuthorityGroups = new HashSet(); + + private Date lastLogin; // ------------------------------------------------------------------------- // Logic @@ -147,6 +150,16 @@ // Getters and setters // ------------------------------------------------------------------------- + public int getId() + { + return id; + } + + public void setId( int id ) + { + this.id = id; + } + public String getPassword() { return password; @@ -187,13 +200,13 @@ this.username = username; } - public int getId() + public Date getLastLogin() { - return id; + return lastLogin; } - public void setId( int id ) + public void setLastLogin( Date lastLogin ) { - this.id = id; + this.lastLogin = lastLogin; } } === modified file 'dhis-2/dhis-api/src/main/java/org/hisp/dhis/user/UserService.java' --- dhis-2/dhis-api/src/main/java/org/hisp/dhis/user/UserService.java 2011-05-28 21:53:18 +0000 +++ dhis-2/dhis-api/src/main/java/org/hisp/dhis/user/UserService.java 2011-06-11 19:51:41 +0000 @@ -161,6 +161,14 @@ Collection getAllUserCredentials(); /** + * Updates the last login date of UserCredentials with the given username + * with the current date. + * + * @param username the username of the UserCredentials. + */ + void setLastLogin( String username ); + + /** * Deletes a UserCredentials. * * @param userCredentials the UserCredentials. === modified file 'dhis-2/dhis-services/dhis-service-core/src/main/java/org/hisp/dhis/user/DefaultUserService.java' --- dhis-2/dhis-services/dhis-service-core/src/main/java/org/hisp/dhis/user/DefaultUserService.java 2011-05-28 21:53:18 +0000 +++ dhis-2/dhis-services/dhis-service-core/src/main/java/org/hisp/dhis/user/DefaultUserService.java 2011-06-11 19:51:41 +0000 @@ -1,12 +1,14 @@ package org.hisp.dhis.user; import java.util.Collection; +import java.util.Date; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.hisp.dhis.dataset.DataSet; import org.hisp.dhis.organisationunit.OrganisationUnit; import org.hisp.dhis.system.util.AuditLogUtil; +import org.springframework.transaction.annotation.Transactional; /* * Copyright (c) 2004-2010, University of Oslo @@ -39,6 +41,7 @@ * @author Chau Thu Tran * @version $Id$ */ +@Transactional public class DefaultUserService implements UserService { @@ -319,9 +322,9 @@ return userStore.getUserCredentials( user ); } - public UserCredentials getUserCredentialsByUsername( String userName ) + public UserCredentials getUserCredentialsByUsername( String username ) { - return userStore.getUserCredentialsByUsername( userName ); + return userStore.getUserCredentialsByUsername( username ); } public Collection getUsersBetween( int first, int max ) @@ -329,9 +332,9 @@ return userStore.getUsersBetween( first, max ); } - public Collection getUsersBetweenByName( String userName, int first, int max ) + public Collection getUsersBetweenByName( String username, int first, int max ) { - return userStore.getUsersBetweenByName( userName, first, max ); + return userStore.getUsersBetweenByName( username, first, max ); } public Collection getUsersWithoutOrganisationUnitBetween( int first, int max ) @@ -339,14 +342,21 @@ return userStore.getUsersWithoutOrganisationUnitBetween( first, max ); } - public Collection getUsersWithoutOrganisationUnitBetweenByName( String userName, int first, int max ) + public Collection getUsersWithoutOrganisationUnitBetweenByName( String username, int first, int max ) { - return userStore.getUsersWithoutOrganisationUnitBetweenByName( userName, first, max ); + return userStore.getUsersWithoutOrganisationUnitBetweenByName( username, first, max ); } - public Collection searchUsersByName( String userName ) - { - return userStore.searchUsersByName( userName ); + public Collection searchUsersByName( String username ) + { + return userStore.searchUsersByName( username ); + } + + public void setLastLogin( String username ) + { + UserCredentials credentials = getUserCredentialsByUsername( username ); + credentials.setLastLogin( new Date() ); + updateUserCredentials( credentials ); } // ------------------------------------------------------------------------- === modified file 'dhis-2/dhis-services/dhis-service-core/src/main/java/org/hisp/dhis/user/hibernate/HibernateUserStore.java' --- dhis-2/dhis-services/dhis-service-core/src/main/java/org/hisp/dhis/user/hibernate/HibernateUserStore.java 2011-04-24 13:44:20 +0000 +++ dhis-2/dhis-services/dhis-service-core/src/main/java/org/hisp/dhis/user/hibernate/HibernateUserStore.java 2011-06-11 19:51:41 +0000 @@ -46,13 +46,11 @@ import org.hisp.dhis.user.UserCredentials; import org.hisp.dhis.user.UserSetting; import org.hisp.dhis.user.UserStore; -import org.springframework.transaction.annotation.Transactional; /** * @author Nguyen Hong Duc * @version $Id: HibernateUserStore.java 6530 2008-11-28 15:02:47Z eivindwa $ */ -@Transactional public class HibernateUserStore implements UserStore { @@ -434,12 +432,15 @@ private Collection findByName( Collection users, String key ) { List returnList = new ArrayList(); - + for ( UserCredentials user : users ) { - if ( user.getUsername().toLowerCase().contains( key.toLowerCase() ) ) + if ( user != null ) { - returnList.add( user ); + if ( user.getUsername().toLowerCase().contains( key.toLowerCase() ) ) + { + returnList.add( user ); + } } } === modified file 'dhis-2/dhis-services/dhis-service-core/src/main/resources/org/hisp/dhis/user/hibernate/UserCredentials.hbm.xml' --- dhis-2/dhis-services/dhis-service-core/src/main/resources/org/hisp/dhis/user/hibernate/UserCredentials.hbm.xml 2011-05-28 21:25:46 +0000 +++ dhis-2/dhis-services/dhis-service-core/src/main/resources/org/hisp/dhis/user/hibernate/UserCredentials.hbm.xml 2011-06-11 19:51:41 +0000 @@ -29,6 +29,8 @@ + + === modified file 'dhis-2/dhis-web/dhis-web-commons/src/main/java/org/hisp/dhis/security/listener/AuthenticationListener.java' --- dhis-2/dhis-web/dhis-web-commons/src/main/java/org/hisp/dhis/security/listener/AuthenticationListener.java 2010-06-25 15:01:58 +0000 +++ dhis-2/dhis-web/dhis-web-commons/src/main/java/org/hisp/dhis/security/listener/AuthenticationListener.java 2011-06-11 19:51:41 +0000 @@ -27,8 +27,8 @@ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ +import org.hisp.dhis.user.UserService; import org.hisp.dhis.useraudit.UserAuditService; -import org.springframework.beans.factory.annotation.Required; import org.springframework.context.ApplicationEvent; import org.springframework.context.ApplicationListener; import org.springframework.security.authentication.event.AbstractAuthenticationFailureEvent; @@ -42,13 +42,27 @@ public class AuthenticationListener implements ApplicationListener { + // ------------------------------------------------------------------------- + // Dependencies + // ------------------------------------------------------------------------- + private UserAuditService userAuditService; - @Required public void setUserAuditService( UserAuditService userAuditService ) { this.userAuditService = userAuditService; } + + private UserService userService; + + public void setUserService( UserService userService ) + { + this.userService = userService; + } + + // ------------------------------------------------------------------------- + // ApplicationListener implementation + // ------------------------------------------------------------------------- public void onApplicationEvent( ApplicationEvent applicationEvent ) { @@ -58,7 +72,11 @@ { AuthenticationSuccessEvent event = (AuthenticationSuccessEvent) applicationEvent; - userAuditService.registerLoginSuccess( ((UserDetails) event.getAuthentication().getPrincipal()).getUsername() ); + String username = ((UserDetails) event.getAuthentication().getPrincipal()).getUsername(); + + userAuditService.registerLoginSuccess( username ); + + userService.setLastLogin( username ); } else if ( applicationEvent instanceof AbstractAuthenticationFailureEvent ) { === modified file 'dhis-2/dhis-web/dhis-web-commons/src/main/resources/META-INF/dhis/security.xml' --- dhis-2/dhis-web/dhis-web-commons/src/main/resources/META-INF/dhis/security.xml 2011-04-12 10:50:23 +0000 +++ dhis-2/dhis-web/dhis-web-commons/src/main/resources/META-INF/dhis/security.xml 2011-06-11 19:51:41 +0000 @@ -51,6 +51,7 @@ + === modified file 'dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-user/src/main/resources/org/hisp/dhis/user/i18n_module.properties' --- dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-user/src/main/resources/org/hisp/dhis/user/i18n_module.properties 2011-04-28 19:47:18 +0000 +++ dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-user/src/main/resources/org/hisp/dhis/user/i18n_module.properties 2011-06-11 19:51:41 +0000 @@ -235,4 +235,5 @@ add_user_group = Add user group available_users = Available users group_members = Group members -no_of_Users = Number of users \ No newline at end of file +no_of_Users = Number of users +last_login = Last login \ No newline at end of file === modified file 'dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-user/src/main/webapp/dhis-web-maintenance-user/allUser.vm' --- dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-user/src/main/webapp/dhis-web-maintenance-user/allUser.vm 2011-03-14 21:10:15 +0000 +++ dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-user/src/main/webapp/dhis-web-maintenance-user/allUser.vm 2011-06-11 19:51:41 +0000 @@ -1,4 +1,4 @@ - +