=== 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 2014-04-08 18:25:25 +0000 +++ dhis-2/dhis-api/src/main/java/org/hisp/dhis/user/UserCredentials.java 2014-04-08 19:36:25 +0000 @@ -98,6 +98,7 @@ /** * Category option group set dimensions to constrain data analytics aggregation. */ + @Scanned private Set cogsDimensionConstraints = new HashSet(); /** === modified file 'dhis-2/dhis-services/dhis-service-analytics/src/main/java/org/hisp/dhis/analytics/data/DefaultQueryPlanner.java' --- dhis-2/dhis-services/dhis-service-analytics/src/main/java/org/hisp/dhis/analytics/data/DefaultQueryPlanner.java 2014-04-08 18:25:25 +0000 +++ dhis-2/dhis-services/dhis-service-analytics/src/main/java/org/hisp/dhis/analytics/data/DefaultQueryPlanner.java 2014-04-08 19:36:25 +0000 @@ -295,16 +295,13 @@ { User user = currentUserService.getCurrentUser(); - if ( params == null || user == null || user.getUserCredentials() == null ) - { - return; - } - - if ( !user.getUserCredentials().hasDimensionConstraints() ) - { - return; - } - + if ( params == null || user == null || + user.getUserCredentials() == null || !user.getUserCredentials().hasDimensionConstraints() ) + { + log.debug( "No dimension constraint applied" ); + return; + } + Set dimensionConstraints = user.getUserCredentials().getDimensionConstraints(); for ( DimensionalObject dimension : dimensionConstraints ) @@ -338,7 +335,9 @@ DimensionalObject constraint = new BaseDimensionalObject( dimension.getDimension(), dimension.getDimensionType(), null, dimension.getDisplayName(), canReadItems ); - params.getFilters().add( constraint ); + params.getFilters().add( constraint ); + + log.info( "User: " + user.getUsername() + " constrained by dimension: " + constraint.getDimension() ); } } === 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 2014-03-05 05:52:03 +0000 +++ dhis-2/dhis-services/dhis-service-core/src/main/resources/org/hisp/dhis/user/hibernate/UserCredentials.hbm.xml 2014-04-08 19:36:25 +0000 @@ -33,7 +33,15 @@ - + + + + + + + === modified file 'dhis-2/dhis-support/dhis-support-hibernate/src/main/resources/ehcache.xml' --- dhis-2/dhis-support/dhis-support-hibernate/src/main/resources/ehcache.xml 2014-04-06 09:44:34 +0000 +++ dhis-2/dhis-support/dhis-support-hibernate/src/main/resources/ehcache.xml 2014-04-08 19:36:25 +0000 @@ -368,7 +368,9 @@ - + + + === modified file 'dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-user/src/main/java/org/hisp/dhis/user/action/AddUserAction.java' --- dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-user/src/main/java/org/hisp/dhis/user/action/AddUserAction.java 2014-04-06 12:57:33 +0000 +++ dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-user/src/main/java/org/hisp/dhis/user/action/AddUserAction.java 2014-04-08 19:36:25 +0000 @@ -28,11 +28,16 @@ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -import com.google.common.collect.Lists; -import com.opensymphony.xwork2.Action; +import java.util.ArrayList; +import java.util.HashSet; +import java.util.List; +import java.util.Set; + import org.apache.struts2.ServletActionContext; import org.hisp.dhis.api.utils.ContextUtils; import org.hisp.dhis.attribute.AttributeService; +import org.hisp.dhis.dataelement.CategoryOptionGroupSet; +import org.hisp.dhis.dataelement.DataElementCategoryService; import org.hisp.dhis.organisationunit.OrganisationUnit; import org.hisp.dhis.oust.manager.SelectionTreeManager; import org.hisp.dhis.ouwt.manager.OrganisationUnitSelectionManager; @@ -52,9 +57,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.util.StringUtils; -import java.util.HashSet; -import java.util.List; -import java.util.Set; +import com.opensymphony.xwork2.Action; /** * @author Torgeir Lorange Ostby @@ -89,9 +92,6 @@ this.userService = userService; } - @Autowired - private UserGroupService userGroupService; - private SecurityService securityService; public void setSecurityService( SecurityService securityService ) @@ -113,6 +113,12 @@ this.attributeService = attributeService; } + @Autowired + private UserGroupService userGroupService; + + @Autowired + private DataElementCategoryService categoryService; + // ------------------------------------------------------------------------- // Input & Output // ------------------------------------------------------------------------- @@ -213,20 +219,27 @@ this.localeDb = localeDb; } - private List urSelected = Lists.newArrayList(); + private List urSelected = new ArrayList(); public void setUrSelected( List urSelected ) { this.urSelected = urSelected; } - private List ugSelected = Lists.newArrayList(); + private List ugSelected = new ArrayList(); public void setUgSelected( List ugSelected ) { this.ugSelected = ugSelected; } + private List dcSelected = new ArrayList(); + + public void setDcSelected( List dcSelected ) + { + this.dcSelected = dcSelected; + } + private List jsonAttributeValues; public void setJsonAttributeValues( List jsonAttributeValues ) @@ -315,6 +328,16 @@ userCredentials.setUserAuthorityGroups( userAuthorityGroups ); + // --------------------------------------------------------------------- + // Dimension constraints + // --------------------------------------------------------------------- + + for ( String id : dcSelected ) + { + CategoryOptionGroupSet cogs = categoryService.getCategoryOptionGroupSet( id ); + userCredentials.getCogsDimensionConstraints().add( cogs ); + } + userService.addUser( user ); userService.addUserCredentials( userCredentials ); === modified file 'dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-user/src/main/java/org/hisp/dhis/user/action/UpdateUserAction.java' --- dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-user/src/main/java/org/hisp/dhis/user/action/UpdateUserAction.java 2014-04-06 12:57:33 +0000 +++ dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-user/src/main/java/org/hisp/dhis/user/action/UpdateUserAction.java 2014-04-08 19:36:25 +0000 @@ -28,9 +28,14 @@ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -import com.google.common.collect.Lists; -import com.opensymphony.xwork2.Action; +import java.util.ArrayList; +import java.util.HashSet; +import java.util.List; +import java.util.Set; + import org.hisp.dhis.attribute.AttributeService; +import org.hisp.dhis.dataelement.CategoryOptionGroupSet; +import org.hisp.dhis.dataelement.DataElementCategoryService; import org.hisp.dhis.organisationunit.OrganisationUnit; import org.hisp.dhis.oust.manager.SelectionTreeManager; import org.hisp.dhis.ouwt.manager.OrganisationUnitSelectionManager; @@ -49,9 +54,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.util.StringUtils; -import java.util.HashSet; -import java.util.List; -import java.util.Set; +import com.opensymphony.xwork2.Action; /** * @author Torgeir Lorange Ostby @@ -70,9 +73,6 @@ this.userService = userService; } - @Autowired - private UserGroupService userGroupService; - private PasswordManager passwordManager; public void setPasswordManager( PasswordManager passwordManager ) @@ -108,6 +108,12 @@ this.attributeService = attributeService; } + @Autowired + private UserGroupService userGroupService; + + @Autowired + private DataElementCategoryService categoryService; + // ------------------------------------------------------------------------- // Input & Output // ------------------------------------------------------------------------- @@ -175,20 +181,27 @@ this.localeDb = localeDb; } - private List urSelected = Lists.newArrayList(); + private List urSelected = new ArrayList(); public void setUrSelected( List urSelected ) { this.urSelected = urSelected; } - private List ugSelected = Lists.newArrayList(); + private List ugSelected = new ArrayList(); public void setUgSelected( List ugSelected ) { this.ugSelected = ugSelected; } + private List dcSelected = new ArrayList(); + + public void setDcSelected( List dcSelected ) + { + this.dcSelected = dcSelected; + } + private List jsonAttributeValues; public void setJsonAttributeValues( List jsonAttributeValues ) @@ -270,6 +283,18 @@ userCredentials.setUserAuthorityGroups( userAuthorityGroups ); + // --------------------------------------------------------------------- + // Dimension constraints + // --------------------------------------------------------------------- + + userCredentials.getCogsDimensionConstraints().clear(); + + for ( String id : dcSelected ) + { + CategoryOptionGroupSet cogs = categoryService.getCategoryOptionGroupSet( id ); + userCredentials.getCogsDimensionConstraints().add( cogs ); + } + userService.updateUserCredentials( userCredentials ); userService.updateUser( user ); === 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 2014-04-08 11:37:59 +0000 +++ dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-user/src/main/resources/org/hisp/dhis/user/i18n_module.properties 2014-04-08 19:36:25 +0000 @@ -326,4 +326,8 @@ enable=Enable data_capture_maintenance_org_units=Data capture and maintenance organisation units data_output_analysis_org_units=Data output and analysis organisation units -data_capture_organisation_unit_required_for_user=User must be assigned to at least one data capture organisation unit \ No newline at end of file +data_capture_organisation_unit_required_for_user=User must be assigned to at least one data capture organisation unit +available_dimension_restrictions_for_data_analytics=Available dimension restrictions for data analytics +selected_dimension_restrictions_for_data_analytics=Selected dimension restrictions for data analytics +show_more_options=Show more options +show_less_options=Show less options \ 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/addUserForm.vm' --- dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-user/src/main/webapp/dhis-web-maintenance-user/addUserForm.vm 2014-04-07 02:08:51 +0000 +++ dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-user/src/main/webapp/dhis-web-maintenance-user/addUserForm.vm 2014-04-08 19:36:25 +0000 @@ -3,6 +3,7 @@ validation2('addUserForm', function( form ) { jQuery("#urSelected").children().attr("selected", "selected"); jQuery("#ugSelected").children().attr("selected", "selected"); + jQuery("#dcSelected").children().attr("selected", "selected"); if( $('#orgUnitTree').find('.selected').size() == 0 ) { setHeaderDelayMessage('$encoder.jsEncode( $i18n.getString( "data_capture_organisation_unit_required_for_user" ) )'); @@ -41,6 +42,13 @@ search: $('#ugAvailableSearch'), iterator: 'userGroups' }); + + $('#dcAvailable').selected({ + url: '../api/categoryOptionGroupSets.json', + target: $('#dcSelected'), + search: $('#dcAvailableSearch'), + iterator: 'categoryOptionGroupSets' + }); }); @@ -160,13 +168,7 @@ "i18n_selected": "selected_roles" }) -#jqSelected({ - "prefix": "ug", - "i18n_available": "available_user_groups", - "i18n_selected": "selected_user_groups" -}) - - +
@@ -183,6 +185,26 @@
$i18n.getString( "data_capture_maintenance_org_units" )
+ + + +

=== modified file 'dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-user/src/main/webapp/dhis-web-maintenance-user/javascript/user.js' --- dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-user/src/main/webapp/dhis-web-maintenance-user/javascript/user.js 2014-02-14 14:09:37 +0000 +++ dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-user/src/main/webapp/dhis-web-maintenance-user/javascript/user.js 2014-04-08 19:36:25 +0000 @@ -156,3 +156,9 @@ }); } } + +function showUserOptions() +{ + $( "#showMoreOptions" ).toggle(); + $( "#moreOptions" ).toggle(); +} === modified file 'dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-user/src/main/webapp/dhis-web-maintenance-user/updateUserForm.vm' --- dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-user/src/main/webapp/dhis-web-maintenance-user/updateUserForm.vm 2014-04-07 07:19:13 +0000 +++ dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-user/src/main/webapp/dhis-web-maintenance-user/updateUserForm.vm 2014-04-08 19:36:25 +0000 @@ -8,6 +8,7 @@ validation2('updateUserForm', function( form ) { jQuery("#urSelected").children().attr("selected", "selected"); jQuery("#ugSelected").children().attr("selected", "selected"); + jQuery("#dcSelected").children().attr("selected", "selected"); if( $('#orgUnitTree').find('.selected').size() == 0 ) { setHeaderDelayMessage('$i18n.getString( "data_capture_organisation_unit_required_for_user" )'); @@ -49,6 +50,13 @@ search: $('#ugAvailableSearch'), iterator: 'userGroups' }); + + $('#dcAvailable').selected({ + url: '../api/categoryOptionGroupSets.json', + target: $('#dcSelected'), + search: $('#dcAvailableSearch'), + iterator: 'categoryOptionGroupSets' + }); }); @@ -153,14 +161,7 @@ "objects": $userCredentials.userAuthorityGroups }) -#jqSelected({ - "prefix": "ug", - "i18n_available": "available_user_groups", - "i18n_selected": "selected_user_groups", - "objects": $user.groups -}) - - +
@@ -177,6 +178,28 @@
$i18n.getString( "data_capture_maintenance_org_units" )
+

+ + +