=== 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-09-04 10:21:24 +0000 +++ dhis-2/dhis-api/src/main/java/org/hisp/dhis/user/UserService.java 2011-09-06 05:37:32 +0000 @@ -175,6 +175,14 @@ */ void deleteUserCredentials( UserCredentials userCredentials ); + /** + * Get the UserCredentials with the corresponding identifiers. + * + * @param identifiers the collection of identifiers. + * @return a collection of users. + */ + Collection getUsers( Collection identifiers, User user ); + Collection searchUsersByName( String key ); Collection getUsersBetween( int first, int max ); === 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-09-04 10:21:24 +0000 +++ dhis-2/dhis-services/dhis-service-core/src/main/java/org/hisp/dhis/user/DefaultUserService.java 2011-09-06 05:37:32 +0000 @@ -9,7 +9,10 @@ import org.hisp.dhis.dataset.DataSet; import org.hisp.dhis.organisationunit.OrganisationUnit; import org.hisp.dhis.period.PeriodType; +import org.hisp.dhis.system.filter.UserCredentialsCanUpdateFilter; import org.hisp.dhis.system.util.AuditLogUtil; +import org.hisp.dhis.system.util.Filter; +import org.hisp.dhis.system.util.FilterUtils; import org.springframework.transaction.annotation.Transactional; /* @@ -48,18 +51,18 @@ implements UserService { private static final Log log = LogFactory.getLog( DefaultUserService.class ); - + // ------------------------------------------------------------------------- // Dependencies // ------------------------------------------------------------------------- private CurrentUserService currentUserService; - + public void setCurrentUserService( CurrentUserService currentUserService ) { this.currentUserService = currentUserService; } - + private UserStore userStore; public void setUserStore( UserStore userStore ) @@ -135,32 +138,26 @@ public int addUser( User user ) { - log.info( AuditLogUtil.logMessage( currentUserService.getCurrentUsername(), - AuditLogUtil.ACTION_ADD , - User.class.getSimpleName(), - user.getName()) ); - + log.info( AuditLogUtil.logMessage( currentUserService.getCurrentUsername(), AuditLogUtil.ACTION_ADD, User.class + .getSimpleName(), user.getName() ) ); + return userStore.addUser( user ); } public void deleteUser( User user ) { userStore.deleteUser( user ); - - log.info( AuditLogUtil.logMessage( currentUserService.getCurrentUsername(), - AuditLogUtil.ACTION_DELETE , - User.class.getSimpleName(), - user.getName()) ); + + log.info( AuditLogUtil.logMessage( currentUserService.getCurrentUsername(), AuditLogUtil.ACTION_DELETE, + User.class.getSimpleName(), user.getName() ) ); } public void updateUser( User user ) { userStore.updateUser( user ); - log.info( AuditLogUtil.logMessage( currentUserService.getCurrentUsername(), - AuditLogUtil.ACTION_EDIT , - User.class.getSimpleName(), - user.getName()) ); + log.info( AuditLogUtil.logMessage( currentUserService.getCurrentUsername(), AuditLogUtil.ACTION_EDIT, + User.class.getSimpleName(), user.getName() ) ); } public Collection getAllUsers() @@ -183,6 +180,22 @@ return userStore.getUserCountByName( userName ); } + public Collection getUsers( final Collection identifiers, User user ) + { + Collection userCredentialsS = getAllUserCredentials(); + + FilterUtils.filter( userCredentialsS, new UserCredentialsCanUpdateFilter( user ) ); + + return identifiers == null ? userCredentialsS : FilterUtils.filter( userCredentialsS, + new Filter() + { + public boolean retain( UserCredentials object ) + { + return identifiers.contains( object.getId() ); + } + } ); + } + public Collection getUsersByOrganisationUnitBetween( OrganisationUnit unit, int first, int max ) { return userStore.getUsersByOrganisationUnitBetween( unit, first, max ); @@ -223,7 +236,7 @@ { return userStore.getUsersWithoutOrganisationUnitCountByName( userName ); } - + // ------------------------------------------------------------------------- // UserAuthorityGroup // ------------------------------------------------------------------------- @@ -294,7 +307,7 @@ } } } - + // ------------------------------------------------------------------------- // UserCredentials // ------------------------------------------------------------------------- @@ -353,35 +366,35 @@ { return userStore.searchUsersByName( username ); } - + public void setLastLogin( String username ) { UserCredentials credentials = getUserCredentialsByUsername( username ); credentials.setLastLogin( new Date() ); - updateUserCredentials( credentials ); + updateUserCredentials( credentials ); } - + public Collection getInactiveUsers( int months, int first, int max ) { Calendar cal = PeriodType.createCalendarInstance(); - cal.add( Calendar.MONTH, ( months * -1 ) ); - + cal.add( Calendar.MONTH, (months * -1) ); + return userStore.getInactiveUsers( cal.getTime(), first, max ); } - + public int getInactiveUsersCount( int months ) { Calendar cal = PeriodType.createCalendarInstance(); - cal.add( Calendar.MONTH, ( months * -1 ) ); - + cal.add( Calendar.MONTH, (months * -1) ); + return userStore.getInactiveUsersCount( cal.getTime() ); } - + public int getActiveUsersCount( int days ) { Calendar cal = PeriodType.createCalendarInstance(); - cal.add( Calendar.DAY_OF_YEAR, ( days * -1 ) ); - + cal.add( Calendar.DAY_OF_YEAR, (days * -1) ); + return userStore.getActiveUsersCount( cal.getTime() ); } @@ -413,4 +426,5 @@ { return userStore.getUserSetting( user, name ); } + } === modified file 'dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/ExportParams.java' --- dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/ExportParams.java 2011-04-24 15:50:02 +0000 +++ dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/ExportParams.java 2011-09-06 05:37:32 +0000 @@ -34,6 +34,7 @@ import org.hisp.dhis.i18n.I18n; import org.hisp.dhis.i18n.I18nFormat; +import org.hisp.dhis.user.User; /** * @author Lars Helge Overland @@ -42,71 +43,75 @@ public class ExportParams { private boolean includeDataValues; - + private boolean includeCompleteDataSetRegistrations; - + private boolean aggregatedData; - + private Date startDate; - + private Date endDate; - + + private User currentUser; + private Collection categories = new ArrayList(); - + private Collection categoryOptions = new ArrayList(); - + private Collection categoryCombos = new ArrayList(); private Collection categoryOptionCombos = new ArrayList(); private Collection dataElements = new ArrayList(); - + private Collection dataElementGroups = new ArrayList(); - + private Collection dataElementGroupSets = new ArrayList(); - + private Collection indicators = new ArrayList(); - + private Collection indicatorGroups = new ArrayList(); - + private Collection indicatorGroupSets = new ArrayList(); - + private Collection indicatorTypes = new ArrayList(); - + private Collection dataDictionaries = new ArrayList(); - + private Collection dataSets = new ArrayList(); - + private Collection periods = new ArrayList(); - + private Collection organisationUnits = new ArrayList(); - + private Collection organisationUnitGroups = new ArrayList(); - + private Collection organisationUnitGroupSets = new ArrayList(); - + private Collection organisationUnitLevels = new HashSet(); - + + private Collection users = new HashSet(); + private Collection validationRules = new ArrayList(); - + private Collection reports = new ArrayList(); - + private Collection reportTables = new ArrayList(); - + private Collection charts = new ArrayList(); - + private Collection olapUrls = new ArrayList(); - + private I18n i18n; - + private I18nFormat format; - + // ------------------------------------------------------------------------- // Constructur // ------------------------------------------------------------------------- - + public ExportParams() - { + { } // ------------------------------------------------------------------------- @@ -132,7 +137,7 @@ { this.includeCompleteDataSetRegistrations = includeCompleteDataSetRegistrations; } - + public boolean isAggregatedData() { return aggregatedData; @@ -162,7 +167,7 @@ { this.endDate = endDate; } - + public I18n getI18n() { return i18n; @@ -172,7 +177,7 @@ { this.i18n = i18n; } - + public I18nFormat getFormat() { return format; @@ -223,6 +228,19 @@ this.categoryOptionCombos = categoryOptionCombos; } + /** + * @return + */ + public User getCurrentUser() + { + return currentUser; + } + + public void setCurrentUser( User currentUser ) + { + this.currentUser = currentUser; + } + public Collection getDataElements() { return dataElements; @@ -373,6 +391,16 @@ this.validationRules = validationRules; } + public Collection getUsers() + { + return users; + } + + public void setUsers( Collection users ) + { + this.users = users; + } + public Collection getReports() { return reports; === added file 'dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/pdf/converter/UserConverter.java' --- dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/pdf/converter/UserConverter.java 1970-01-01 00:00:00 +0000 +++ dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/pdf/converter/UserConverter.java 2011-09-06 05:37:32 +0000 @@ -0,0 +1,84 @@ +package org.hisp.dhis.importexport.pdf.converter; + +/* + * Copyright (c) 2004-2011, University of Oslo + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * * Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * * Neither the name of the HISP project nor the names of its contributors may + * be used to endorse or promote products derived from this software without + * specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; + +import org.hisp.dhis.i18n.I18n; +import org.hisp.dhis.i18n.I18nFormat; +import org.hisp.dhis.importexport.ExportParams; +import org.hisp.dhis.importexport.PDFConverter; +import org.hisp.dhis.system.util.PDFUtils; +import org.hisp.dhis.user.UserCredentials; +import org.hisp.dhis.user.UserService; +import org.hisp.dhis.user.comparator.UsernameComparator; + +import com.lowagie.text.Document; + +/** + * @author Dang Duy Hieu + * @version $Id$ + */ +public class UserConverter + extends PDFUtils + implements PDFConverter +{ + private UserService userService; + + /** + * Constructor for write operations. + */ + public UserConverter( UserService userService ) + { + this.userService = userService; + } + + // ------------------------------------------------------------------------- + // PDFConverter implementation + // ------------------------------------------------------------------------- + + public void write( Document document, ExportParams params ) + { + I18n i18n = params.getI18n(); + I18nFormat format = params.getFormat(); + + PDFUtils.printObjectFrontPage( document, params.getUsers(), i18n, format, "users" ); + + List userCredentialss = new ArrayList( userService.getUsers( params + .getUsers(), params.getCurrentUser() ) ); + + Collections.sort( userCredentialss, new UsernameComparator() ); + + for ( UserCredentials userCredentials : userCredentialss ) + { + addTableToDocument( document, printUser( userCredentials, i18n, format, true, 0.40f, 0.60f ) ); + } + } +} === modified file 'dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/pdf/exporter/ITextPDFExportService.java' --- dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/pdf/exporter/ITextPDFExportService.java 2010-12-26 21:40:52 +0000 +++ dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/pdf/exporter/ITextPDFExportService.java 2011-09-06 05:37:32 +0000 @@ -44,9 +44,11 @@ import org.hisp.dhis.importexport.pdf.converter.IndicatorConverter; import org.hisp.dhis.importexport.pdf.converter.OrganisationUnitConverter; import org.hisp.dhis.importexport.pdf.converter.OrganisationUnitHierarchyConverter; +import org.hisp.dhis.importexport.pdf.converter.UserConverter; import org.hisp.dhis.importexport.pdf.converter.ValidationRuleConverter; import org.hisp.dhis.indicator.IndicatorService; import org.hisp.dhis.organisationunit.OrganisationUnitService; +import org.hisp.dhis.user.UserService; import org.hisp.dhis.validation.ValidationRuleService; /** @@ -74,6 +76,13 @@ this.dataElementService = dataElementService; } + private ExpressionService expressionService; + + public void setExpressionService( ExpressionService expressionService ) + { + this.expressionService = expressionService; + } + private IndicatorService indicatorService; public void setIndicatorService( IndicatorService indicatorService ) @@ -88,11 +97,11 @@ this.organisationUnitService = organisationUnitService; } - private ExpressionService expressionService; + private UserService userService; - public void setExpressionService( ExpressionService expressionService ) + public void setUserService( UserService userService ) { - this.expressionService = expressionService; + this.userService = userService; } private ValidationRuleService validationRuleService; @@ -134,6 +143,7 @@ thread.setOrganisationUnitHierarchyConverter( new OrganisationUnitHierarchyConverter( organisationUnitService ) ); thread.setOrganisationUnitConverter( new OrganisationUnitConverter( organisationUnitService ) ); + thread.setUserConverter( new UserConverter( userService ) ); thread.setValidationRuleConverter( new ValidationRuleConverter( validationRuleService, expressionService ) ); thread.start(); === modified file 'dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/pdf/exporter/PDFPipeThread.java' --- dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/pdf/exporter/PDFPipeThread.java 2011-01-17 17:03:05 +0000 +++ dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/pdf/exporter/PDFPipeThread.java 2011-09-06 05:37:32 +0000 @@ -32,6 +32,7 @@ import org.hibernate.SessionFactory; import org.hisp.dhis.importexport.ExportParams; import org.hisp.dhis.importexport.PDFConverter; +import org.hisp.dhis.importexport.pdf.converter.UserConverter; import org.hisp.dhis.system.process.OpenSessionThread; import org.hisp.dhis.system.util.PDFUtils; import org.hisp.dhis.system.util.StreamUtils; @@ -87,6 +88,14 @@ this.organisationUnitConverter = organisationUnitConverter; } + private PDFConverter userConverter; + + public void setUserConverter( UserConverter userConverter ) + { + this.userConverter = userConverter; + + } + private PDFConverter validationRuleConverter; public void setValidationRuleConverter( PDFConverter validationRuleConverter ) @@ -116,15 +125,17 @@ document = PDFUtils.openDocument( outputStream ); PDFUtils.printDocumentFrontPage( document, exportParams.getI18n(), exportParams.getFormat() ); - + dataElementConverter.write( document, exportParams ); - + indicatorConverter.write( document, exportParams ); organisationUnitHierarchyConverter.write( document, exportParams ); organisationUnitConverter.write( document, exportParams ); + userConverter.write( document, exportParams ); + validationRuleConverter.write( document, exportParams ); PDFUtils.closeDocument( document ); @@ -134,4 +145,5 @@ StreamUtils.closeOutputStream( outputStream ); } } + } === modified file 'dhis-2/dhis-services/dhis-service-importexport/src/main/resources/META-INF/dhis/beans.xml' --- dhis-2/dhis-services/dhis-service-importexport/src/main/resources/META-INF/dhis/beans.xml 2011-07-13 11:32:13 +0000 +++ dhis-2/dhis-services/dhis-service-importexport/src/main/resources/META-INF/dhis/beans.xml 2011-09-06 05:37:32 +0000 @@ -269,9 +269,10 @@ + - + === modified file 'dhis-2/dhis-support/dhis-support-system/src/main/java/org/hisp/dhis/system/util/PDFUtils.java' --- dhis-2/dhis-support/dhis-support-system/src/main/java/org/hisp/dhis/system/util/PDFUtils.java 2011-03-30 07:47:00 +0000 +++ dhis-2/dhis-support/dhis-support-system/src/main/java/org/hisp/dhis/system/util/PDFUtils.java 2011-09-06 05:37:32 +0000 @@ -42,6 +42,9 @@ import org.hisp.dhis.i18n.I18nFormat; import org.hisp.dhis.indicator.Indicator; import org.hisp.dhis.organisationunit.OrganisationUnit; +import org.hisp.dhis.user.User; +import org.hisp.dhis.user.UserAuthorityGroup; +import org.hisp.dhis.user.UserCredentials; import org.hisp.dhis.validation.ValidationRule; import com.lowagie.text.Document; @@ -62,7 +65,7 @@ public class PDFUtils { private static final String EMPTY = ""; - + /** * Creates a document. * @@ -202,34 +205,34 @@ return cell; } - + public static PdfPCell getTitleCell( String text, int colspan ) { return getCell( text, colspan, getBoldFont( 16 ), ALIGN_CENTER ); } - + public static PdfPCell getSubtitleCell( String text, int colspan ) { return getCell( text, colspan, getItalicFont( 12 ), ALIGN_CENTER ); } - + public static PdfPCell getHeaderCell( String text, int colspan ) { return getCell( text, colspan, getFont( 12 ), ALIGN_LEFT ); } - + public static PdfPCell getTextCell( String text ) { return getCell( text, 1, getFont( 9 ), ALIGN_LEFT ); } - + public static PdfPCell getTextCell( Object object ) { String text = object != null ? String.valueOf( object ) : EMPTY; - + return getCell( text, 1, getFont( 9 ), ALIGN_LEFT ); } - + public static PdfPCell getItalicCell( String text ) { return getCell( text, 1, getItalicFont( 9 ), ALIGN_LEFT ); @@ -241,10 +244,10 @@ cell.setPaddingBottom( bottom ); cell.setPaddingLeft( left ); cell.setPaddingRight( right ); - + return cell; } - + /** * Creates an empty cell. * @@ -292,7 +295,7 @@ catch ( Exception ex ) { throw new RuntimeException( "Error while creating base font", ex ); - } + } } // ------------------------------------------------------------------------- @@ -307,8 +310,8 @@ * @param format The i18nFormat object * */ - public static void printObjectFrontPage( Document document, Collection objectIds, I18n i18n, - I18nFormat format, String frontPageLabel ) + public static void printObjectFrontPage( Document document, Collection objectIds, I18n i18n, I18nFormat format, + String frontPageLabel ) { if ( objectIds == null || objectIds.size() > 0 ) { @@ -373,7 +376,8 @@ * multiple pages or should be kept at one page. * @param columnWidths The column widths. */ - public static PdfPTable printDataElement( DataElement element, I18n i18n, boolean keepTogether, float... columnWidths ) + public static PdfPTable printDataElement( DataElement element, I18n i18n, boolean keepTogether, + float... columnWidths ) { PdfPTable table = getPdfPTable( keepTogether, columnWidths ); @@ -427,8 +431,8 @@ * multiple pages or should be kept at one page. * @param columnWidths The column widths. */ - public static PdfPTable printIndicator( Indicator indicator, I18n i18n, - ExpressionService expressionService, boolean keepTogether, float... columnWidths ) + public static PdfPTable printIndicator( Indicator indicator, I18n i18n, ExpressionService expressionService, + boolean keepTogether, float... columnWidths ) { PdfPTable table = getPdfPTable( keepTogether, columnWidths ); @@ -465,7 +469,8 @@ table.addCell( getTextCell( indicator.getNumeratorDescription() ) ); table.addCell( getItalicCell( i18n.getString( "numerator_aggregation_operator" ) ) ); - table.addCell( getTextCell( i18n.getString( getAggregationOperator().get( indicator.getNumeratorAggregationOperator() ) ) ) ); + table.addCell( getTextCell( i18n.getString( getAggregationOperator().get( + indicator.getNumeratorAggregationOperator() ) ) ) ); table.addCell( getItalicCell( i18n.getString( "numerator_formula" ) ) ); table.addCell( getTextCell( expressionService.getExpressionDescription( indicator.getNumerator() ) ) ); @@ -474,7 +479,8 @@ table.addCell( getTextCell( indicator.getDenominatorDescription() ) ); table.addCell( getItalicCell( i18n.getString( "denominator_aggregation_operator" ) ) ); - table.addCell( getTextCell( i18n.getString( getAggregationOperator().get( indicator.getDenominatorAggregationOperator() ) ) ) ); + table.addCell( getTextCell( i18n.getString( getAggregationOperator().get( + indicator.getDenominatorAggregationOperator() ) ) ) ); table.addCell( getItalicCell( i18n.getString( "denominator_formula" ) ) ); table.addCell( getTextCell( expressionService.getExpressionDescription( indicator.getDenominator() ) ) ); @@ -497,7 +503,8 @@ * multiple pages or should be kept at one page. * @param columnWidths The column widths. */ - public static PdfPTable printOrganisationUnit( OrganisationUnit unit, I18n i18n, I18nFormat format, boolean keepTogether, float... columnWidths ) + public static PdfPTable printOrganisationUnit( OrganisationUnit unit, I18n i18n, I18nFormat format, + boolean keepTogether, float... columnWidths ) { PdfPTable table = getPdfPTable( keepTogether, columnWidths ); @@ -515,12 +522,12 @@ } table.addCell( getItalicCell( i18n.getString( "opening_date" ) ) ); - table.addCell( getTextCell( unit.getOpeningDate() != null ? format.formatDate( unit.getOpeningDate() ) : "" ) ); + table.addCell( getTextCell( unit.getOpeningDate() != null ? format.formatDate( unit.getOpeningDate() ) : EMPTY ) ); if ( unit.getClosedDate() != null ) { table.addCell( getItalicCell( i18n.getString( "closed_date" ) ) ); - table.addCell( getTextCell( unit.getClosedDate() != null ? format.formatDate( unit.getClosedDate() ) : "" ) ); + table.addCell( getTextCell( format.formatDate( unit.getClosedDate() ) ) ); } table.addCell( getItalicCell( i18n.getString( "active" ) ) ); @@ -540,6 +547,77 @@ /** * Creates a table with the given validation rule * + * @param user The User + * @param i18n i18n object + * @param format I18nFormat object + * @param keepTogether Indicates whether the table could be broken across + * multiple pages or should be kept at one page. + * @param columnWidths The column widths. + */ + public static PdfPTable printUser( UserCredentials userCredentials, I18n i18n, I18nFormat format, + boolean keepTogether, float... columnWidths ) + { + User user = userCredentials.getUser(); + + PdfPTable table = getPdfPTable( keepTogether, columnWidths ); + + table.addCell( getHeaderCell( user.getFirstName() + ", " + user.getSurname(), 2 ) ); + + table.addCell( getEmptyCell( 2, 15 ) ); + + table.addCell( getItalicCell( i18n.getString( "username" ) ) ); + table.addCell( getTextCell( userCredentials.getUsername() ) ); + + if ( nullIfEmpty( user.getEmail() ) != null ) + { + table.addCell( getItalicCell( i18n.getString( "email" ) ) ); + table.addCell( getTextCell( user.getEmail() ) ); + } + + if ( nullIfEmpty( user.getPhoneNumber() ) != null ) + { + table.addCell( getItalicCell( i18n.getString( "phone_number" ) ) ); + table.addCell( getTextCell( user.getPhoneNumber() ) ); + } + + table.addCell( getItalicCell( i18n.getString( "last_login" ) ) ); + table.addCell( getTextCell( userCredentials.getLastLogin() != null ? format.formatDate( userCredentials + .getLastLogin() ) : EMPTY ) ); + + String temp = ""; + + for ( OrganisationUnit unit : user.getOrganisationUnits() ) + { + temp += unit.getName().concat( ", " ); + } + + temp = temp.trim(); + temp.substring( 0, temp.isEmpty() ? 0 : temp.length() - 2 ); + + table.addCell( getItalicCell( i18n.getString( "organisation_units" ) ) ); + table.addCell( getTextCell( temp ) ); + + temp = ""; + + for ( UserAuthorityGroup role : userCredentials.getUserAuthorityGroups() ) + { + temp += role.getName().concat( ", " ); + } + + temp = temp.trim(); + temp.substring( 0, temp.isEmpty() ? 0 : temp.length() - 2 ); + + table.addCell( getItalicCell( i18n.getString( "roles" ) ) ); + table.addCell( getTextCell( temp ) ); + + table.addCell( getEmptyCell( 2, 30 ) ); + + return table; + } + + /** + * Creates a table with the given validation rule + * * @param validationRule The validation rule * @param i18n i18n object * @param expressionService The expression service @@ -550,7 +628,7 @@ * multiple pages or should be kept at one page. * @param columnWidths The column widths. */ - public static PdfPTable printValidationRule( ValidationRule validationRule, I18n i18n, + public static PdfPTable printValidationRule( ValidationRule validationRule, I18n i18n, ExpressionService expressionService, boolean keepTogether, float... columnWidths ) { PdfPTable table = getPdfPTable( keepTogether, columnWidths ); === modified file 'dhis-2/dhis-web/dhis-web-commons/src/main/resources/i18n_global.properties' --- dhis-2/dhis-web/dhis-web-commons/src/main/resources/i18n_global.properties 2011-08-12 11:35:39 +0000 +++ dhis-2/dhis-web/dhis-web-commons/src/main/resources/i18n_global.properties 2011-09-06 05:37:32 +0000 @@ -452,6 +452,7 @@ organisation_unit_hierarchy = Organisation unit hierarchy validation_rules = Validation rules period_type = Period Type +users = Users #-- Indicator -----------------------------------------------------------------# === modified file 'dhis-2/dhis-web/dhis-web-commons/src/main/resources/i18n_global_vi_VN.properties' --- dhis-2/dhis-web/dhis-web-commons/src/main/resources/i18n_global_vi_VN.properties 2011-07-13 11:32:13 +0000 +++ dhis-2/dhis-web/dhis-web-commons/src/main/resources/i18n_global_vi_VN.properties 2011-09-06 05:37:32 +0000 @@ -392,6 +392,7 @@ organisation_unit_hierarchy = C\u00e2y ph\u00e2n c\u1ea5p \u0111\u01a1n v\u1ecb validation_rules = C\u00e1c \u0111i\u1ec1u ki\u1ec7n ki\u1ec3m tra period_type = Ki\u1ec3u th\u1eddi gian +users = Ng\u01b0\u1eddi d\u00f9ng #-- Indicator -----------------------------------------------------------------# === modified file 'dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-user/pom.xml' --- dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-user/pom.xml 2011-08-28 17:52:59 +0000 +++ dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-user/pom.xml 2011-09-06 05:37:32 +0000 @@ -9,7 +9,7 @@ dhis-web-maintenance-user - war + jar DHIS User Maintenance @@ -25,6 +25,10 @@ dhis-service-core + org.hisp.dhis + dhis-service-importexport + + org.hisp.dhis dhis-web-commons === modified file 'dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-user/src/main/java/org/hisp/dhis/user/action/GetUserListAction.java' --- dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-user/src/main/java/org/hisp/dhis/user/action/GetUserListAction.java 2011-09-04 10:21:24 +0000 +++ dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-user/src/main/java/org/hisp/dhis/user/action/GetUserListAction.java 2011-09-06 05:37:32 +0000 @@ -101,7 +101,7 @@ { return key; } - + private Integer months; public Integer getMonths() @@ -120,34 +120,38 @@ public String execute() throws Exception - { + { if ( isNotBlank( key ) ) // Filter on key only if set { this.paging = createPaging( userService.getUserCountByName( key ) ); - - userCredentialsList = new ArrayList( userService.getUsersBetweenByName( key, paging.getStartPos(), paging.getPageSize() ) ); + + userCredentialsList = new ArrayList( userService.getUsersBetweenByName( key, paging + .getStartPos(), paging.getPageSize() ) ); Collections.sort( userCredentialsList, new UsernameComparator() ); } else if ( months != null && months != 0 ) { this.paging = createPaging( userService.getInactiveUsersCount( months ) ); - - userCredentialsList = new ArrayList( userService.getInactiveUsers( months, paging.getStartPos(), paging.getPageSize() ) ); + + userCredentialsList = new ArrayList( userService.getInactiveUsers( months, paging + .getStartPos(), paging.getPageSize() ) ); } else { this.paging = createPaging( userService.getUserCount() ); - - userCredentialsList = new ArrayList( userService.getUsersBetween( paging.getStartPos(), paging.getPageSize() ) ); + + userCredentialsList = new ArrayList( userService.getUsersBetween( paging.getStartPos(), + paging.getPageSize() ) ); Collections.sort( userCredentialsList, new UsernameComparator() ); } - FilterUtils.filter( userCredentialsList, new UserCredentialsCanUpdateFilter( currentUserService.getCurrentUser() ) ); - + FilterUtils.filter( userCredentialsList, new UserCredentialsCanUpdateFilter( currentUserService + .getCurrentUser() ) ); + currentUserName = currentUserService.getCurrentUsername(); - + return SUCCESS; } } === added directory 'dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-user/src/main/java/org/hisp/dhis/user/action/pdf' === added file 'dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-user/src/main/java/org/hisp/dhis/user/action/pdf/ExportToPdfAction.java' --- dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-user/src/main/java/org/hisp/dhis/user/action/pdf/ExportToPdfAction.java 1970-01-01 00:00:00 +0000 +++ dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-user/src/main/java/org/hisp/dhis/user/action/pdf/ExportToPdfAction.java 2011-09-06 05:37:32 +0000 @@ -0,0 +1,168 @@ +package org.hisp.dhis.user.action.pdf; + +/* + * Copyright (c) 2004-2011, University of Oslo + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * * Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * * Neither the name of the HISP project nor the names of its contributors may + * be used to endorse or promote products derived from this software without + * specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +import java.io.InputStream; +import java.util.ArrayList; +import java.util.List; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.hisp.dhis.common.ServiceProvider; +import org.hisp.dhis.i18n.I18n; +import org.hisp.dhis.i18n.I18nFormat; +import org.hisp.dhis.importexport.ExportParams; +import org.hisp.dhis.importexport.ExportService; +import org.hisp.dhis.user.CurrentUserService; + +import com.opensymphony.xwork2.Action; + +/** + * @author Dang Duy Hieu + * @version $Id$ + */ +public class ExportToPdfAction + implements Action +{ + private static final Log log = LogFactory.getLog( ExportToPdfAction.class ); + + private static final String EXPORT_FORMAT_PDF = "PDF"; + + private static final String TYPE_USER = "user"; + + private static final String FILENAME_USER = "Users.zip"; + + // ------------------------------------------------------------------------- + // Dependencies + // ------------------------------------------------------------------------- + + private CurrentUserService currentUserService; + + public void setCurrentUserService( CurrentUserService currentUserService ) + { + this.currentUserService = currentUserService; + } + + private ServiceProvider serviceProvider; + + public void setServiceProvider( ServiceProvider serviceProvider ) + { + this.serviceProvider = serviceProvider; + } + + private I18n i18n; + + public void setI18n( I18n i18n ) + { + this.i18n = i18n; + } + + private I18nFormat format; + + public void setFormat( I18nFormat format ) + { + this.format = format; + } + + // ------------------------------------------------------------------------- + // Output + // ------------------------------------------------------------------------- + + private InputStream inputStream; + + public InputStream getInputStream() + { + return inputStream; + } + + private String fileName; + + public String getFileName() + { + return fileName; + } + + // ------------------------------------------------------------------------- + // Input + // ------------------------------------------------------------------------- + + private String type; + + public void setType( String type ) + { + this.type = type; + } + + private List activeIds = new ArrayList(); + + public void setActiveIds( List activeIds ) + { + this.activeIds = activeIds; + } + + // ------------------------------------------------------------------------- + // Action implementation + // ------------------------------------------------------------------------- + + public String execute() + throws Exception + { + if ( type != null ) + { + ExportParams params = new ExportParams(); + + if ( type.equals( TYPE_USER ) ) + { + if ( (activeIds != null) && !activeIds.isEmpty() ) + { + params.setUsers( activeIds ); + } + else + { + params.setUsers( null ); + } + + fileName = FILENAME_USER; + + log.info( "Exporting to PDF for object type: " + TYPE_USER ); + } + + params.setCurrentUser( currentUserService.getCurrentUser() ); + params.setIncludeDataValues( false ); + params.setI18n( i18n ); + params.setFormat( format ); + + ExportService exportService = serviceProvider.provide( EXPORT_FORMAT_PDF ); + + inputStream = exportService.exportData( params ); + } + + return SUCCESS; + } + +} === modified file 'dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-user/src/main/resources/META-INF/dhis/beans.xml' --- dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-user/src/main/resources/META-INF/dhis/beans.xml 2011-06-19 10:57:18 +0000 +++ dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-user/src/main/resources/META-INF/dhis/beans.xml 2011-09-06 05:37:32 +0000 @@ -135,6 +135,16 @@ + + + + + + + + + === modified file 'dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-user/src/main/resources/struts.xml' --- dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-user/src/main/resources/struts.xml 2011-07-27 10:39:06 +0000 +++ dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-user/src/main/resources/struts.xml 2011-09-06 05:37:32 +0000 @@ -88,6 +88,17 @@ plainTextError + + + + + application/zip + inputStream + filename="${fileName}" + 10240 + + + === 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-09-05 04:00:20 +0000 +++ dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-user/src/main/webapp/dhis-web-maintenance-user/allUser.vm 2011-09-06 05:37:32 +0000 @@ -31,7 +31,10 @@ #end - + + + +