------------------------------------------------------------ revno: 2350 committer: Lars Helge Overland <larshe...@gmail.com> branch nick: dhis2 timestamp: Sun 2010-12-12 20:49:23 +0100 message: Json-encoding text in the ajax json templates rather than javascript-encoding. There is a subtle difference in that single-quotes must be escaped in javascript-encoding, while single-quotes are accepted in json and quoting is illegal. Was causing severe headaches. modified: dhis-2/dhis-web/dhis-web-commons-resources/src/main/webapp/dhis-web-commons/ajax/jsonDataElement.vm dhis-2/dhis-web/dhis-web-commons-resources/src/main/webapp/dhis-web-commons/ajax/jsonDataElementGroup.vm dhis-2/dhis-web/dhis-web-commons-resources/src/main/webapp/dhis-web-commons/ajax/jsonDataElementGroups.vm dhis-2/dhis-web/dhis-web-commons-resources/src/main/webapp/dhis-web-commons/ajax/jsonDataElementName.vm dhis-2/dhis-web/dhis-web-commons-resources/src/main/webapp/dhis-web-commons/ajax/jsonDataElements.vm dhis-2/dhis-web/dhis-web-commons-resources/src/main/webapp/dhis-web-commons/ajax/jsonDataSet.vm dhis-2/dhis-web/dhis-web-commons-resources/src/main/webapp/dhis-web-commons/ajax/jsonDataSets.vm dhis-2/dhis-web/dhis-web-commons-resources/src/main/webapp/dhis-web-commons/ajax/jsonIndicator.vm dhis-2/dhis-web/dhis-web-commons-resources/src/main/webapp/dhis-web-commons/ajax/jsonIndicatorGroup.vm dhis-2/dhis-web/dhis-web-commons-resources/src/main/webapp/dhis-web-commons/ajax/jsonIndicatorGroupSet.vm dhis-2/dhis-web/dhis-web-commons-resources/src/main/webapp/dhis-web-commons/ajax/jsonIndicatorGroups.vm dhis-2/dhis-web/dhis-web-commons-resources/src/main/webapp/dhis-web-commons/ajax/jsonIndicators.vm dhis-2/dhis-web/dhis-web-commons-resources/src/main/webapp/dhis-web-commons/ajax/jsonOperands.vm dhis-2/dhis-web/dhis-web-commons-resources/src/main/webapp/dhis-web-commons/ajax/jsonOrganisationUnit.vm dhis-2/dhis-web/dhis-web-commons-resources/src/main/webapp/dhis-web-commons/ajax/jsonOrganisationUnitGroups.vm dhis-2/dhis-web/dhis-web-commons-resources/src/main/webapp/dhis-web-commons/ajax/jsonOrganisationUnitLevels.vm dhis-2/dhis-web/dhis-web-commons-resources/src/main/webapp/dhis-web-commons/ajax/jsonOrganisationUnits.vm dhis-2/dhis-web/dhis-web-commons-resources/src/main/webapp/dhis-web-commons/ajax/jsonResponseError.vm dhis-2/dhis-web/dhis-web-commons-resources/src/main/webapp/dhis-web-commons/ajax/jsonResponseInput.vm dhis-2/dhis-web/dhis-web-commons-resources/src/main/webapp/dhis-web-commons/ajax/jsonResponseSuccess.vm
-- lp:dhis2 https://code.launchpad.net/~dhis2-devs-core/dhis2/trunk Your team DHIS 2 developers is subscribed to branch lp:dhis2. To unsubscribe from this branch go to https://code.launchpad.net/~dhis2-devs-core/dhis2/trunk/+edit-subscription
=== modified file 'dhis-2/dhis-web/dhis-web-commons-resources/src/main/webapp/dhis-web-commons/ajax/jsonDataElement.vm' --- dhis-2/dhis-web/dhis-web-commons-resources/src/main/webapp/dhis-web-commons/ajax/jsonDataElement.vm 2010-02-04 11:04:36 +0000 +++ dhis-2/dhis-web/dhis-web-commons-resources/src/main/webapp/dhis-web-commons/ajax/jsonDataElement.vm 2010-12-12 19:49:23 +0000 @@ -1,11 +1,11 @@ { "dataElement": { "id": $!{dataElement.id}, - "name": "$!encoder.jsEncode( ${dataElement.name} )", - "alternativeName": "$!encoder.jsEncode( ${dataElement.alternativeNamee} )", - "shortName": "$!encoder.jsEncode( ${dataElement.shortName} )", - "code": "$!encoder.jsEncode( ${dataElement.code} )", - "description": "$!encoder.jsEncode( ${dataElement.description} )", + "name": "$!encoder.jsonEncode( ${dataElement.name} )", + "alternativeName": "$!encoder.jsonEncode( ${dataElement.alternativeNamee} )", + "shortName": "$!encoder.jsonEncode( ${dataElement.shortName} )", + "code": "$!encoder.jsonEncode( ${dataElement.code} )", + "description": "$!encoder.jsonEncode( ${dataElement.description} )", "active": "$!{dataElement.active}", "type": "$!{dataElement.type}", "aggregationOperator": "$!{dataElement.aggregationOperator}" === modified file 'dhis-2/dhis-web/dhis-web-commons-resources/src/main/webapp/dhis-web-commons/ajax/jsonDataElementGroup.vm' --- dhis-2/dhis-web/dhis-web-commons-resources/src/main/webapp/dhis-web-commons/ajax/jsonDataElementGroup.vm 2010-11-20 08:23:34 +0000 +++ dhis-2/dhis-web/dhis-web-commons-resources/src/main/webapp/dhis-web-commons/ajax/jsonDataElementGroup.vm 2010-12-12 19:49:23 +0000 @@ -1,7 +1,7 @@ { "dataElementGroup": { "id": $!{dataElementGroup.id}, - "name": "$!encoder.jsEncode( ${dataElementGroup.name} )", + "name": "$!encoder.jsonEncode( ${dataElementGroup.name} )", "memberCount": "$memberCount" } } === modified file 'dhis-2/dhis-web/dhis-web-commons-resources/src/main/webapp/dhis-web-commons/ajax/jsonDataElementGroups.vm' --- dhis-2/dhis-web/dhis-web-commons-resources/src/main/webapp/dhis-web-commons/ajax/jsonDataElementGroups.vm 2010-08-31 08:12:53 +0000 +++ dhis-2/dhis-web/dhis-web-commons-resources/src/main/webapp/dhis-web-commons/ajax/jsonDataElementGroups.vm 2010-12-12 19:49:23 +0000 @@ -3,7 +3,7 @@ #foreach( $dataElementGroup in $dataElementGroups ) { "id": ${dataElementGroup.id} , - "name": "$!encoder.jsEncode( ${dataElementGroup.name} )" + "name": "$!encoder.jsonEncode( ${dataElementGroup.name} )" }#if( $velocityCount < $size ),#end #end ] } === modified file 'dhis-2/dhis-web/dhis-web-commons-resources/src/main/webapp/dhis-web-commons/ajax/jsonDataElementName.vm' --- dhis-2/dhis-web/dhis-web-commons-resources/src/main/webapp/dhis-web-commons/ajax/jsonDataElementName.vm 2010-02-04 11:04:36 +0000 +++ dhis-2/dhis-web/dhis-web-commons-resources/src/main/webapp/dhis-web-commons/ajax/jsonDataElementName.vm 2010-12-12 19:49:23 +0000 @@ -1,1 +1,1 @@ -{ "name": "$!encoder.jsEncode( ${name} )" } \ No newline at end of file +{ "name": "$!encoder.jsonEncode( ${name} )" } \ No newline at end of file === modified file 'dhis-2/dhis-web/dhis-web-commons-resources/src/main/webapp/dhis-web-commons/ajax/jsonDataElements.vm' --- dhis-2/dhis-web/dhis-web-commons-resources/src/main/webapp/dhis-web-commons/ajax/jsonDataElements.vm 2010-09-23 07:35:25 +0000 +++ dhis-2/dhis-web/dhis-web-commons-resources/src/main/webapp/dhis-web-commons/ajax/jsonDataElements.vm 2010-12-12 19:49:23 +0000 @@ -3,10 +3,10 @@ #foreach( $dataElement in $dataElements ) { "id": ${dataElement.id} , - "name": "$!encoder.jsEncode( ${dataElement.name} )", - "alternativeName": "$!encoder.jsEncode( ${dataElement.alternativeNamee} )", - "shortName": "$!encoder.jsEncode( ${dataElement.shortName} )", - "code": "$!encoder.jsEncode( ${dataElement.code} )", + "name": "$!encoder.jsonEncode( ${dataElement.name} )", + "alternativeName": "$!encoder.jsonEncode( ${dataElement.alternativeNamee} )", + "shortName": "$!encoder.jsonEncode( ${dataElement.shortName} )", + "code": "$!encoder.jsonEncode( ${dataElement.code} )", "type": "$!{dataElement.type}", "aggregationOperator": "$!{dataElement.aggregationOperator}", "zeroIsSignificant": "$!{dataElement.zeroIsSignificant}" === modified file 'dhis-2/dhis-web/dhis-web-commons-resources/src/main/webapp/dhis-web-commons/ajax/jsonDataSet.vm' --- dhis-2/dhis-web/dhis-web-commons-resources/src/main/webapp/dhis-web-commons/ajax/jsonDataSet.vm 2010-02-04 11:04:36 +0000 +++ dhis-2/dhis-web/dhis-web-commons-resources/src/main/webapp/dhis-web-commons/ajax/jsonDataSet.vm 2010-12-12 19:49:23 +0000 @@ -1,8 +1,8 @@ { "dataSet": { "id": $!{dataSet.id}, - "name": "$!encoder.jsEncode( ${dataSet.name} )", - "shortName": "$!encoder.jsEncode( ${dataSet.shortName} )", + "name": "$!encoder.jsonEncode( ${dataSet.name} )", + "shortName": "$!encoder.jsonEncode( ${dataSet.shortName} )", "periodTypeId": "$!{dataSet.periodTypeId}" } } === modified file 'dhis-2/dhis-web/dhis-web-commons-resources/src/main/webapp/dhis-web-commons/ajax/jsonDataSets.vm' --- dhis-2/dhis-web/dhis-web-commons-resources/src/main/webapp/dhis-web-commons/ajax/jsonDataSets.vm 2010-02-04 11:04:36 +0000 +++ dhis-2/dhis-web/dhis-web-commons-resources/src/main/webapp/dhis-web-commons/ajax/jsonDataSets.vm 2010-12-12 19:49:23 +0000 @@ -3,8 +3,8 @@ #foreach( $dataSet in $dataSets ) { "id": $!{dataSet.id}, - "name": "$!encoder.jsEncode( ${dataSet.name} )", - "shortName": "$!encoder.jsEncode( ${dataSet.shortName} )", + "name": "$!encoder.jsonEncode( ${dataSet.name} )", + "shortName": "$!encoder.jsonEncode( ${dataSet.shortName} )", "periodTypeId": "$!{dataSet.periodTypeId}" }#if( $velocityCount < $size ),#end #end === modified file 'dhis-2/dhis-web/dhis-web-commons-resources/src/main/webapp/dhis-web-commons/ajax/jsonIndicator.vm' --- dhis-2/dhis-web/dhis-web-commons-resources/src/main/webapp/dhis-web-commons/ajax/jsonIndicator.vm 2010-02-04 11:04:36 +0000 +++ dhis-2/dhis-web/dhis-web-commons-resources/src/main/webapp/dhis-web-commons/ajax/jsonIndicator.vm 2010-12-12 19:49:23 +0000 @@ -1,17 +1,17 @@ { "indicator": { "id": $!{indicator.id}, - "name": "$!encoder.jsEncode( ${indicator.name} )", - "alternativeName": "$!encoder.jsEncode( ${indicator.alternativeNamee} )", - "shortName": "$!encoder.jsEncode( ${indicator.shortName} )", - "code": "$!encoder.jsEncode( ${indicator.code} )", + "name": "$!encoder.jsonEncode( ${indicator.name} )", + "alternativeName": "$!encoder.jsonEncode( ${indicator.alternativeNamee} )", + "shortName": "$!encoder.jsonEncode( ${indicator.shortName} )", + "code": "$!encoder.jsonEncode( ${indicator.code} )", "annualized": "${indicator.annualized}", "indicatorTypeId": "$!{indicator.indicatorType.id}", "numerator": "$!{indicator.numerator}", - "numeratorDescription": "$!encoder.jsEncode( ${indicator.numeratorDescription} )", + "numeratorDescription": "$!encoder.jsonEncode( ${indicator.numeratorDescription} )", "numeratorAggregationOperator": "$!{indicator.numeratorAggregationOperator}", "denominator": "$!{indicator.denominator}", - "denominatorDescription": "$!encoder.jsEncode( ${indicator.denominatorDescription} )", + "denominatorDescription": "$!encoder.jsonEncode( ${indicator.denominatorDescription} )", "denominatorAggregationOperator": "$!{indicator.denominatorAggregationOperator}" } } === modified file 'dhis-2/dhis-web/dhis-web-commons-resources/src/main/webapp/dhis-web-commons/ajax/jsonIndicatorGroup.vm' --- dhis-2/dhis-web/dhis-web-commons-resources/src/main/webapp/dhis-web-commons/ajax/jsonIndicatorGroup.vm 2010-11-20 08:23:34 +0000 +++ dhis-2/dhis-web/dhis-web-commons-resources/src/main/webapp/dhis-web-commons/ajax/jsonIndicatorGroup.vm 2010-12-12 19:49:23 +0000 @@ -1,8 +1,8 @@ { "indicatorGroup": { "id": $!{indicator.id}, - "name": "$!encoder.jsEncode( ${indicatorGroup.name} )", - "alternativeName": "$!encoder.jsEncode( ${indicatorGroup.alternativeNamee} )", + "name": "$!encoder.jsonEncode( ${indicatorGroup.name} )", + "alternativeName": "$!encoder.jsonEncode( ${indicatorGroup.alternativeNamee} )", "memberCount": "$memberCount" } } === modified file 'dhis-2/dhis-web/dhis-web-commons-resources/src/main/webapp/dhis-web-commons/ajax/jsonIndicatorGroupSet.vm' --- dhis-2/dhis-web/dhis-web-commons-resources/src/main/webapp/dhis-web-commons/ajax/jsonIndicatorGroupSet.vm 2010-11-20 08:23:34 +0000 +++ dhis-2/dhis-web/dhis-web-commons-resources/src/main/webapp/dhis-web-commons/ajax/jsonIndicatorGroupSet.vm 2010-12-12 19:49:23 +0000 @@ -1,7 +1,7 @@ { "indicatorGroupSet": { "id": $!{indicatorGroupSet.id}, - "name": "$!encoder.jsEncode( ${indicatorGroupSet.name} )", + "name": "$!encoder.jsonEncode( ${indicatorGroupSet.name} )", "memberCount": "$memberCount" } } === modified file 'dhis-2/dhis-web/dhis-web-commons-resources/src/main/webapp/dhis-web-commons/ajax/jsonIndicatorGroups.vm' --- dhis-2/dhis-web/dhis-web-commons-resources/src/main/webapp/dhis-web-commons/ajax/jsonIndicatorGroups.vm 2010-08-31 08:12:53 +0000 +++ dhis-2/dhis-web/dhis-web-commons-resources/src/main/webapp/dhis-web-commons/ajax/jsonIndicatorGroups.vm 2010-12-12 19:49:23 +0000 @@ -3,7 +3,7 @@ #foreach( $indicatorGroup in $indicatorGroups ) { "id": $!{indicatorGroup.id}, - "name": "$!encoder.jsEncode( ${indicatorGroup.name} )" + "name": "$!encoder.jsonEncode( ${indicatorGroup.name} )" }#if( $velocityCount < $size ),#end #end ] } \ No newline at end of file === modified file 'dhis-2/dhis-web/dhis-web-commons-resources/src/main/webapp/dhis-web-commons/ajax/jsonIndicators.vm' --- dhis-2/dhis-web/dhis-web-commons-resources/src/main/webapp/dhis-web-commons/ajax/jsonIndicators.vm 2010-02-04 11:04:36 +0000 +++ dhis-2/dhis-web/dhis-web-commons-resources/src/main/webapp/dhis-web-commons/ajax/jsonIndicators.vm 2010-12-12 19:49:23 +0000 @@ -3,10 +3,10 @@ #foreach( $indicator in $indicators ) { "id": $!{indicator.id}, - "name": "$!encoder.jsEncode( ${indicator.name} )", - "alternativeName": "$!encoder.jsEncode( ${indicator.alternativeNamee} )", - "shortName": "$!encoder.jsEncode( ${indicator.shortName} )", - "code": "$!encoder.jsEncode( ${indicator.code} )", + "name": "$!encoder.jsonEncode( ${indicator.name} )", + "alternativeName": "$!encoder.jsonEncode( ${indicator.alternativeNamee} )", + "shortName": "$!encoder.jsonEncode( ${indicator.shortName} )", + "code": "$!encoder.jsonEncode( ${indicator.code} )", "annualized": "${indicator.annualized}", "indicatorTypeId": $!{indicator.indicatorType.id} }#if( $velocityCount < $size ),#end === modified file 'dhis-2/dhis-web/dhis-web-commons-resources/src/main/webapp/dhis-web-commons/ajax/jsonOperands.vm' --- dhis-2/dhis-web/dhis-web-commons-resources/src/main/webapp/dhis-web-commons/ajax/jsonOperands.vm 2010-03-17 16:08:03 +0000 +++ dhis-2/dhis-web/dhis-web-commons-resources/src/main/webapp/dhis-web-commons/ajax/jsonOperands.vm 2010-12-12 19:49:23 +0000 @@ -5,7 +5,7 @@ "dataElementId": "$!{operand.dataElementId}", "optionComboId": "$!{operand.optionComboId}", "operandId": "$!{operand.operandId}", - "operandName": "$!encoder.jsEncode( ${operand.operandName} )" + "operandName": "$!encoder.jsonEncode( ${operand.operandName} )" }#if( $velocityCount < $size ),#end #end ] } \ No newline at end of file === modified file 'dhis-2/dhis-web/dhis-web-commons-resources/src/main/webapp/dhis-web-commons/ajax/jsonOrganisationUnit.vm' --- dhis-2/dhis-web/dhis-web-commons-resources/src/main/webapp/dhis-web-commons/ajax/jsonOrganisationUnit.vm 2010-07-13 15:50:08 +0000 +++ dhis-2/dhis-web/dhis-web-commons-resources/src/main/webapp/dhis-web-commons/ajax/jsonOrganisationUnit.vm 2010-12-12 19:49:23 +0000 @@ -1,13 +1,13 @@ { "organisationUnit": { "id": $!{organisationUnit.id}, - "name": "$!encoder.jsEncode( ${organisationUnit.name} )", - "shortName": "$!encoder.jsEncode( ${organisationUnit.shortName} )", - "code": "$!encoder.jsEncode( ${organisationUnit.code} )", + "name": "$!encoder.jsonEncode( ${organisationUnit.name} )", + "shortName": "$!encoder.jsonEncode( ${organisationUnit.shortName} )", + "code": "$!encoder.jsonEncode( ${organisationUnit.code} )", "openingDate": "$!{organisationUnit.openingDate}", "closedDate": "$!{organisationUnit.closedDate}", "active": "$!{organisationUnit.active}", - "comment": "$!encoder.jsEncode( ${organisationUnit.comment} )", + "comment": "$!encoder.jsonEncode( ${organisationUnit.comment} )", "geoCode": "$!{organisationUnit.geoCode}", "latitude": "$!{organisationUnit.latitude}", "longitude": "$!{organisationUnit.longitude}", === modified file 'dhis-2/dhis-web/dhis-web-commons-resources/src/main/webapp/dhis-web-commons/ajax/jsonOrganisationUnitGroups.vm' --- dhis-2/dhis-web/dhis-web-commons-resources/src/main/webapp/dhis-web-commons/ajax/jsonOrganisationUnitGroups.vm 2010-09-09 09:38:13 +0000 +++ dhis-2/dhis-web/dhis-web-commons-resources/src/main/webapp/dhis-web-commons/ajax/jsonOrganisationUnitGroups.vm 2010-12-12 19:49:23 +0000 @@ -1,9 +1,9 @@ #set( $size = $organisationUnitGroups.size() ) { "organisationUnitGroups": [ #foreach( $group in $organisationUnitGroups ) - { - "name": "$!encoder.jsEncode( ${group.name} )", - "id": "$group.id" + { + "id": "$group.id", + "name": "$!encoder.jsonEncode( ${group.name} )" }#if( $velocityCount < $size ),#end #end ] } === modified file 'dhis-2/dhis-web/dhis-web-commons-resources/src/main/webapp/dhis-web-commons/ajax/jsonOrganisationUnitLevels.vm' --- dhis-2/dhis-web/dhis-web-commons-resources/src/main/webapp/dhis-web-commons/ajax/jsonOrganisationUnitLevels.vm 2010-09-09 09:38:13 +0000 +++ dhis-2/dhis-web/dhis-web-commons-resources/src/main/webapp/dhis-web-commons/ajax/jsonOrganisationUnitLevels.vm 2010-12-12 19:49:23 +0000 @@ -2,7 +2,7 @@ { "levels": [ #foreach( $level in $organisationUnitLevels ) { - "name": "$!encoder.jsEncode( ${level.name} )", + "name": "$!encoder.jsonEncode( ${level.name} )", "level": "$level.level" }#if( $velocityCount < $size ),#end #end === modified file 'dhis-2/dhis-web/dhis-web-commons-resources/src/main/webapp/dhis-web-commons/ajax/jsonOrganisationUnits.vm' --- dhis-2/dhis-web/dhis-web-commons-resources/src/main/webapp/dhis-web-commons/ajax/jsonOrganisationUnits.vm 2010-09-17 10:58:14 +0000 +++ dhis-2/dhis-web/dhis-web-commons-resources/src/main/webapp/dhis-web-commons/ajax/jsonOrganisationUnits.vm 2010-12-12 19:49:23 +0000 @@ -3,9 +3,9 @@ #foreach ( $unit in $organisationUnits ) { "id": $!{unit.id}, - "name": "$!encoder.jsEncode( ${unit.name} )", - "shortName": "$!encoder.jsEncode( ${unit.shortName} )", - "code": "$!encoder.jsEncode( ${unit.code} )", + "name": "$!encoder.jsonEncode( ${unit.name} )", + "shortName": "$!encoder.jsonEncode( ${unit.shortName} )", + "code": "$!encoder.jsonEncode( ${unit.code} )", "hasChildrenWithCoordinates": $!{unit.hasChildrenWithCoordinates()} }#if( $velocityCount < $size ),#end #end === modified file 'dhis-2/dhis-web/dhis-web-commons-resources/src/main/webapp/dhis-web-commons/ajax/jsonResponseError.vm' --- dhis-2/dhis-web/dhis-web-commons-resources/src/main/webapp/dhis-web-commons/ajax/jsonResponseError.vm 2010-02-10 17:00:47 +0000 +++ dhis-2/dhis-web/dhis-web-commons-resources/src/main/webapp/dhis-web-commons/ajax/jsonResponseError.vm 2010-12-12 19:49:23 +0000 @@ -1,4 +1,4 @@ { "response": "error", - "message": "$!encoder.jsEncode( ${message} )" + "message": "$!encoder.jsonEncode( ${message} )" } \ No newline at end of file === modified file 'dhis-2/dhis-web/dhis-web-commons-resources/src/main/webapp/dhis-web-commons/ajax/jsonResponseInput.vm' --- dhis-2/dhis-web/dhis-web-commons-resources/src/main/webapp/dhis-web-commons/ajax/jsonResponseInput.vm 2010-07-15 07:49:32 +0000 +++ dhis-2/dhis-web/dhis-web-commons-resources/src/main/webapp/dhis-web-commons/ajax/jsonResponseInput.vm 2010-12-12 19:49:23 +0000 @@ -1,4 +1,4 @@ { "response": "input", - "message": "$!encoder.jsEncode( ${message} )" + "message": "$!encoder.jsonEncode( ${message} )" } \ No newline at end of file === modified file 'dhis-2/dhis-web/dhis-web-commons-resources/src/main/webapp/dhis-web-commons/ajax/jsonResponseSuccess.vm' --- dhis-2/dhis-web/dhis-web-commons-resources/src/main/webapp/dhis-web-commons/ajax/jsonResponseSuccess.vm 2010-02-10 17:00:47 +0000 +++ dhis-2/dhis-web/dhis-web-commons-resources/src/main/webapp/dhis-web-commons/ajax/jsonResponseSuccess.vm 2010-12-12 19:49:23 +0000 @@ -1,4 +1,4 @@ { "response": "success", - "message": "$!encoder.jsEncode( ${message} )" + "message": "$!encoder.jsonEncode( ${message} )" } \ No newline at end of file
_______________________________________________ Mailing list: https://launchpad.net/~dhis2-devs Post to : dhis2-devs@lists.launchpad.net Unsubscribe : https://launchpad.net/~dhis2-devs More help : https://help.launchpad.net/ListHelp