------------------------------------------------------------ revno: 13774 committer: Morten Olav Hansen <morte...@gmail.com> branch nick: dhis2 timestamp: Sun 2014-01-19 12:53:05 +0700 message: wip, attributes, added attribute ui for dataset, extended attributeservice removed: dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-dataset/src/main/webapp/dhis-web-maintenance-dataset/javascript/addDataSet.js dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-dataset/src/main/webapp/dhis-web-maintenance-dataset/javascript/editDataSet.js modified: dhis-2/dhis-api/src/main/java/org/hisp/dhis/attribute/AttributeService.java dhis-2/dhis-api/src/main/java/org/hisp/dhis/attribute/AttributeStore.java dhis-2/dhis-services/dhis-service-core/src/main/java/org/hisp/dhis/attribute/DefaultAttributeService.java dhis-2/dhis-services/dhis-service-core/src/main/java/org/hisp/dhis/attribute/hibernate/HibernateAttributeStore.java dhis-2/dhis-support/dhis-support-hibernate/src/main/resources/ehcache.xml dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-dataset/src/main/java/org/hisp/dhis/dataset/action/AddDataSetAction.java dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-dataset/src/main/java/org/hisp/dhis/dataset/action/EditDataSetFormAction.java dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-dataset/src/main/java/org/hisp/dhis/dataset/action/UpdateDataSetAction.java dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-dataset/src/main/resources/META-INF/dhis/beans.xml dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-dataset/src/main/webapp/dhis-web-maintenance-dataset/addDataSet.vm dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-dataset/src/main/webapp/dhis-web-maintenance-dataset/editDataSet.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-api/src/main/java/org/hisp/dhis/attribute/AttributeService.java' --- dhis-2/dhis-api/src/main/java/org/hisp/dhis/attribute/AttributeService.java 2014-01-05 20:29:26 +0000 +++ dhis-2/dhis-api/src/main/java/org/hisp/dhis/attribute/AttributeService.java 2014-01-19 05:53:05 +0000 @@ -28,6 +28,7 @@ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ +import java.util.Collection; import java.util.Set; /** @@ -122,6 +123,13 @@ Set<Attribute> getIndicatorGroupAttributes(); /** + * Gets attributes which are associated with data sets. + * + * @return a set of attributes associated with data sets. + */ + Set<Attribute> getDataSetAttributes(); + + /** * Gets attributes which are associated with organisation units. * * @return a set of attributes associated with organisation units. @@ -136,6 +144,13 @@ Set<Attribute> getOrganisationUnitGroupAttributes(); /** + * Gets attributes which are associated with organisation unit group sets. + * + * @return a set of attributes associated with organisation unit group sets. + */ + Set<Attribute> getOrganisationUnitGroupSetAttributes(); + + /** * Gets attributes which are associated with users. * * @return a set of attributes which are associated with users. === modified file 'dhis-2/dhis-api/src/main/java/org/hisp/dhis/attribute/AttributeStore.java' --- dhis-2/dhis-api/src/main/java/org/hisp/dhis/attribute/AttributeStore.java 2013-08-23 15:56:19 +0000 +++ dhis-2/dhis-api/src/main/java/org/hisp/dhis/attribute/AttributeStore.java 2014-01-19 05:53:05 +0000 @@ -69,6 +69,13 @@ Set<Attribute> getIndicatorGroupAttributes(); /** + * Get all attributes that are enabled for data sets. + * + * @return All attributes with attribute.dataSet = true + */ + Set<Attribute> getDataSetAttributes(); + + /** * Get all attributes that are enabled for organisation units. * * @return All attributes with attribute.organisationUnit = true @@ -83,6 +90,13 @@ Set<Attribute> getOrganisationUnitGroupAttributes(); /** + * Get all attributes that are enabled for organisation unit group sets. + * + * @return All attributes with attribute.organisationUnitGroupSet = true + */ + Set<Attribute> getOrganisationUnitGroupSetAttributes(); + + /** * Get all attributes that are enabled for users. * * @return All attributes with attribute.organisationUnit = true === modified file 'dhis-2/dhis-services/dhis-service-core/src/main/java/org/hisp/dhis/attribute/DefaultAttributeService.java' --- dhis-2/dhis-services/dhis-service-core/src/main/java/org/hisp/dhis/attribute/DefaultAttributeService.java 2013-08-23 16:05:01 +0000 +++ dhis-2/dhis-services/dhis-service-core/src/main/java/org/hisp/dhis/attribute/DefaultAttributeService.java 2014-01-19 05:53:05 +0000 @@ -140,6 +140,12 @@ } @Override + public Set<Attribute> getDataSetAttributes() + { + return new HashSet<Attribute>( i18n( i18nService,attributeStore.getDataSetAttributes())); + } + + @Override public Set<Attribute> getOrganisationUnitAttributes() { return new HashSet<Attribute>( i18n( i18nService,attributeStore.getOrganisationUnitAttributes())); @@ -151,6 +157,11 @@ return new HashSet<Attribute>( i18n( i18nService,attributeStore.getOrganisationUnitGroupAttributes())); } + @Override public Set<Attribute> getOrganisationUnitGroupSetAttributes() + { + return new HashSet<Attribute>( i18n( i18nService,attributeStore.getOrganisationUnitGroupSetAttributes())); + } + @Override public Set<Attribute> getUserAttributes() { === modified file 'dhis-2/dhis-services/dhis-service-core/src/main/java/org/hisp/dhis/attribute/hibernate/HibernateAttributeStore.java' --- dhis-2/dhis-services/dhis-service-core/src/main/java/org/hisp/dhis/attribute/hibernate/HibernateAttributeStore.java 2013-08-23 16:05:01 +0000 +++ dhis-2/dhis-services/dhis-service-core/src/main/java/org/hisp/dhis/attribute/hibernate/HibernateAttributeStore.java 2014-01-19 05:53:05 +0000 @@ -73,6 +73,13 @@ @Override @SuppressWarnings( "unchecked" ) + public Set<Attribute> getDataSetAttributes() + { + return new HashSet<Attribute>( getCriteria( Restrictions.eq( "dataSetAttribute", true ) ).list() ); + } + + @Override + @SuppressWarnings( "unchecked" ) public Set<Attribute> getOrganisationUnitAttributes() { return new HashSet<Attribute>( getCriteria( Restrictions.eq( "organisationUnitAttribute", true ) ).list() ); @@ -87,6 +94,13 @@ @Override @SuppressWarnings( "unchecked" ) + public Set<Attribute> getOrganisationUnitGroupSetAttributes() + { + return new HashSet<Attribute>( getCriteria( Restrictions.eq( "organisationUnitGroupSetAttribute", true ) ).list() ); + } + + @Override + @SuppressWarnings( "unchecked" ) public Set<Attribute> getUserAttributes() { return new HashSet<Attribute>( getCriteria( Restrictions.eq( "userAttribute", true ) ).list() ); === 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 2013-12-30 12:36:02 +0000 +++ dhis-2/dhis-support/dhis-support-hibernate/src/main/resources/ehcache.xml 2014-01-19 05:53:05 +0000 @@ -70,6 +70,8 @@ <cache name="org.hisp.dhis.organisationunit.OrganisationUnitGroupSet" maxElementsInMemory="50" /> + <cache name="org.hisp.dhis.organisationunit.OrganisationUnitGroupSet.attributeValues" maxElementsInMemory="1000" /> + <cache name="org.hisp.dhis.user.User" maxElementsInMemory="200" /> <cache name="org.hisp.dhis.user.UserSetting" maxElementsInMemory="200" /> @@ -146,6 +148,8 @@ <cache name="org.hisp.dhis.dataset.DataSet.userGroupAccesses" maxElementsInMemory="200" /> + <cache name="org.hisp.dhis.dataset.DataSet.attributeValues" maxElementsInMemory="1000" /> + <cache name="org.hisp.dhis.dashboard.Dashboard.userGroupAccesses" maxElementsInMemory="500" /> <cache name="org.hisp.dhis.dataelement.DataElement.groups" maxElementsInMemory="3000" /> === modified file 'dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-dataset/src/main/java/org/hisp/dhis/dataset/action/AddDataSetAction.java' --- dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-dataset/src/main/java/org/hisp/dhis/dataset/action/AddDataSetAction.java 2013-12-22 21:08:30 +0000 +++ dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-dataset/src/main/java/org/hisp/dhis/dataset/action/AddDataSetAction.java 2014-01-19 05:53:05 +0000 @@ -30,6 +30,7 @@ import com.opensymphony.xwork2.Action; +import org.hisp.dhis.attribute.AttributeService; import org.hisp.dhis.dataelement.DataElementCategoryService; import org.hisp.dhis.dataelement.DataElementService; import org.hisp.dhis.dataset.DataSet; @@ -39,11 +40,13 @@ import org.hisp.dhis.mapping.MapLegendSet; import org.hisp.dhis.mapping.MappingService; import org.hisp.dhis.period.PeriodType; +import org.hisp.dhis.system.util.AttributeUtils; import org.hisp.dhis.user.UserGroupService; import org.hisp.dhis.user.UserService; import java.util.Collection; import java.util.HashSet; +import java.util.List; import java.util.Set; import static org.hisp.dhis.system.util.TextUtils.nullIfEmpty; @@ -108,6 +111,13 @@ this.mappingService = mappingService; } + private AttributeService attributeService; + + public void setAttributeService( AttributeService attributeService ) + { + this.attributeService = attributeService; + } + // ------------------------------------------------------------------------- // Input & output // ------------------------------------------------------------------------- @@ -266,6 +276,13 @@ this.selectedLegendSetId = selectedLegendSetId; } + private List<String> jsonAttributeValues; + + public void setJsonAttributeValues( List<String> jsonAttributeValues ) + { + this.jsonAttributeValues = jsonAttributeValues; + } + // ------------------------------------------------------------------------- // Action // ------------------------------------------------------------------------- @@ -324,6 +341,12 @@ dataSet.setRenderHorizontally( renderHorizontally ); dataSet.setLegendSet( legendSet ); + if ( jsonAttributeValues != null ) + { + AttributeUtils.updateAttributeValuesFromJson( dataSet.getAttributeValues(), jsonAttributeValues, + attributeService ); + } + dataSetService.addDataSet( dataSet ); userService.assignDataSetToUserRole( dataSet ); === modified file 'dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-dataset/src/main/java/org/hisp/dhis/dataset/action/EditDataSetFormAction.java' --- dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-dataset/src/main/java/org/hisp/dhis/dataset/action/EditDataSetFormAction.java 2013-12-20 14:53:40 +0000 +++ dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-dataset/src/main/java/org/hisp/dhis/dataset/action/EditDataSetFormAction.java 2014-01-19 05:53:05 +0000 @@ -30,8 +30,12 @@ import java.util.ArrayList; import java.util.Collections; +import java.util.HashMap; import java.util.List; +import java.util.Map; +import org.hisp.dhis.attribute.Attribute; +import org.hisp.dhis.attribute.AttributeService; import org.hisp.dhis.common.comparator.IdentifiableObjectNameComparator; import org.hisp.dhis.dataelement.DataElement; import org.hisp.dhis.dataelement.DataElementCategoryCombo; @@ -43,6 +47,7 @@ import org.hisp.dhis.mapping.MappingService; import org.hisp.dhis.period.PeriodService; import org.hisp.dhis.period.PeriodType; +import org.hisp.dhis.system.util.AttributeUtils; import org.hisp.dhis.user.UserGroup; import org.hisp.dhis.user.UserGroupService; @@ -93,6 +98,13 @@ this.mappingService = mappingService; } + private AttributeService attributeService; + + public void setAttributeService( AttributeService attributeService ) + { + this.attributeService = attributeService; + } + // ------------------------------------------------------------------------- // Input & output // ------------------------------------------------------------------------- @@ -153,6 +165,20 @@ return legendSets; } + private List<Attribute> attributes; + + public List<Attribute> getAttributes() + { + return attributes; + } + + public Map<Integer, String> attributeValues = new HashMap<Integer, String>(); + + public Map<Integer, String> getAttributeValues() + { + return attributeValues; + } + // ------------------------------------------------------------------------- // Execute // ------------------------------------------------------------------------- @@ -170,8 +196,12 @@ dataSet = dataSetService.getDataSet( dataSetId, true, true, false ); dataElements = new ArrayList<DataElement>( dataSet.getDataElements() ); indicators = new ArrayList<Indicator>( dataSet.getIndicators() ); + + attributeValues = AttributeUtils.getAttributeValueMap( dataSet.getAttributeValues() ); } + attributes = new ArrayList<Attribute>( attributeService.getDataSetAttributes() ); + Collections.sort( userGroups, IdentifiableObjectNameComparator.INSTANCE ); Collections.sort( dataElements, IdentifiableObjectNameComparator.INSTANCE ); Collections.sort( indicators, IdentifiableObjectNameComparator.INSTANCE ); === modified file 'dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-dataset/src/main/java/org/hisp/dhis/dataset/action/UpdateDataSetAction.java' --- dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-dataset/src/main/java/org/hisp/dhis/dataset/action/UpdateDataSetAction.java 2013-12-22 21:08:30 +0000 +++ dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-dataset/src/main/java/org/hisp/dhis/dataset/action/UpdateDataSetAction.java 2014-01-19 05:53:05 +0000 @@ -29,6 +29,7 @@ */ import com.opensymphony.xwork2.Action; +import org.hisp.dhis.attribute.AttributeService; import org.hisp.dhis.dataelement.DataElement; import org.hisp.dhis.dataelement.DataElementCategoryService; import org.hisp.dhis.dataelement.DataElementService; @@ -42,10 +43,12 @@ import org.hisp.dhis.mapping.MappingService; import org.hisp.dhis.period.PeriodService; import org.hisp.dhis.period.PeriodType; +import org.hisp.dhis.system.util.AttributeUtils; import org.hisp.dhis.user.UserGroupService; import java.util.Collection; import java.util.HashSet; +import java.util.List; import java.util.Set; import static org.hisp.dhis.system.util.TextUtils.equalsNullSafe; @@ -118,6 +121,13 @@ this.mappingService = mappingService; } + private AttributeService attributeService; + + public void setAttributeService( AttributeService attributeService ) + { + this.attributeService = attributeService; + } + // ------------------------------------------------------------------------- // Input & output // ------------------------------------------------------------------------- @@ -283,6 +293,13 @@ this.selectedLegendSetId = selectedLegendSetId; } + private List<String> jsonAttributeValues; + + public void setJsonAttributeValues( List<String> jsonAttributeValues ) + { + this.jsonAttributeValues = jsonAttributeValues; + } + // ------------------------------------------------------------------------- // Action // ------------------------------------------------------------------------- @@ -355,6 +372,12 @@ dataSet.setCategoryCombo( categoryService.getDataElementCategoryCombo( categoryComboId ) ); } + if ( jsonAttributeValues != null ) + { + AttributeUtils.updateAttributeValuesFromJson( dataSet.getAttributeValues(), jsonAttributeValues, + attributeService ); + } + dataSetService.updateDataSet( dataSet ); // --------------------------------------------------------------------- === modified file 'dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-dataset/src/main/resources/META-INF/dhis/beans.xml' --- dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-dataset/src/main/resources/META-INF/dhis/beans.xml 2013-12-20 14:53:40 +0000 +++ dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-dataset/src/main/resources/META-INF/dhis/beans.xml 2014-01-19 05:53:05 +0000 @@ -113,6 +113,7 @@ <property name="userGroupService" ref="org.hisp.dhis.user.UserGroupService" /> <property name="categoryService" ref="org.hisp.dhis.dataelement.DataElementCategoryService" /> <property name="mappingService" ref="org.hisp.dhis.mapping.MappingService" /> + <property name="attributeService" ref="org.hisp.dhis.attribute.AttributeService" /> </bean> <bean id="org.hisp.dhis.dataset.action.AddDataSetAction" class="org.hisp.dhis.dataset.action.AddDataSetAction" @@ -124,6 +125,7 @@ <property name="userService" ref="org.hisp.dhis.user.UserService" /> <property name="userGroupService" ref="org.hisp.dhis.user.UserGroupService" /> <property name="mappingService" ref="org.hisp.dhis.mapping.MappingService" /> + <property name="attributeService" ref="org.hisp.dhis.attribute.AttributeService" /> </bean> <bean id="org.hisp.dhis.dataset.action.UpdateDataSetAction" class="org.hisp.dhis.dataset.action.UpdateDataSetAction" @@ -136,6 +138,7 @@ <property name="categoryService" ref="org.hisp.dhis.dataelement.DataElementCategoryService" /> <property name="userGroupService" ref="org.hisp.dhis.user.UserGroupService" /> <property name="mappingService" ref="org.hisp.dhis.mapping.MappingService" /> + <property name="attributeService" ref="org.hisp.dhis.attribute.AttributeService" /> </bean> <bean id="org.hisp.dhis.dataset.action.GetDataSetAction" class="org.hisp.dhis.dataset.action.GetDataSetAction" === modified file 'dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-dataset/src/main/webapp/dhis-web-maintenance-dataset/addDataSet.vm' --- dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-dataset/src/main/webapp/dhis-web-maintenance-dataset/addDataSet.vm 2013-12-22 21:08:30 +0000 +++ dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-dataset/src/main/webapp/dhis-web-maintenance-dataset/addDataSet.vm 2014-01-19 05:53:05 +0000 @@ -1,6 +1,18 @@ -<script type="text/javascript" src="javascript/addDataSet.js"></script> <script type="text/javascript"> jQuery(function() { + validation2('addDataSetForm', function(form) { + form.submit(); + }, { + 'beforeValidateHandler' : function() { + $("#dataElementsSelectedList").find("option").attr("selected", "selected"); + $("#indicatorsSelectedList").find("option").attr("selected", "selected"); + #tblDynamicAttributesJavascript() + }, + 'rules' : getValidationRules("dataSet") + }); + + checkValueIsExist("code", "validateDataSet.action"); + jQuery("#availableDataElementsList").dhisAjaxSelect({ source: "../dhis-web-commons-ajax-json/getDataElements.action?domain=aggregate", iterator: "dataElements", @@ -144,6 +156,13 @@ </td> </tr> </tbody> + </table> + + #tblDynamicAttributes( { "attributes": $attributes, "attributeValues": $attributeValues } ) + + <table style="width: 600px"> + <col style="width: 400px"> + <col> <thead> <tr> <th colspan="2">$i18n.getString( "form_details" )</th> === modified file 'dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-dataset/src/main/webapp/dhis-web-maintenance-dataset/editDataSet.vm' --- dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-dataset/src/main/webapp/dhis-web-maintenance-dataset/editDataSet.vm 2013-12-22 21:08:30 +0000 +++ dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-dataset/src/main/webapp/dhis-web-maintenance-dataset/editDataSet.vm 2014-01-19 05:53:05 +0000 @@ -1,6 +1,22 @@ -<script type="text/javascript" src="javascript/editDataSet.js"></script> <script type="text/javascript"> jQuery(function() { + validation2('editDataSetForm', function(form) { + form.submit(); + }, { + 'beforeValidateHandler' : function() { + $("#dataElementsSelectedList").find("option").attr("selected", "selected"); + $("#indicatorsSelectedList").find("option").attr("selected", "selected"); + #tblDynamicAttributesJavascript() + }, + 'rules' : getValidationRules("dataSet") + }); + + checkValueIsExist("code", "validateDataSet.action", { + dataSetId : function() { + return jQuery("#dataSetId").val(); + } + }); + jQuery("#availableDataElementsList").dhisAjaxSelect({ source: "../dhis-web-commons-ajax-json/getDataElements.action?domain=aggregate", iterator: "dataElements", @@ -144,6 +160,13 @@ </td> </tr> </tbody> + </table> + + #tblDynamicAttributes( { "attributes": $attributes, "attributeValues": $attributeValues } ) + + <table style="width: 600px"> + <col style="width: 400px"> + <col> <thead> <tr> <th colspan="2">$i18n.getString( "form_details" )</th> === removed file 'dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-dataset/src/main/webapp/dhis-web-maintenance-dataset/javascript/addDataSet.js' --- dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-dataset/src/main/webapp/dhis-web-maintenance-dataset/javascript/addDataSet.js 2013-03-14 10:50:51 +0000 +++ dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-dataset/src/main/webapp/dhis-web-maintenance-dataset/javascript/addDataSet.js 1970-01-01 00:00:00 +0000 @@ -1,13 +0,0 @@ -jQuery(document).ready(function() { - validation2('addDataSetForm', function(form) { - form.submit(); - }, { - 'beforeValidateHandler' : function() { - $("#dataElementsSelectedList").find("option").attr("selected", "selected"); - $("#indicatorsSelectedList").find("option").attr("selected", "selected"); - }, - 'rules' : getValidationRules("dataSet") - }); - - checkValueIsExist("code", "validateDataSet.action"); -}); === removed file 'dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-dataset/src/main/webapp/dhis-web-maintenance-dataset/javascript/editDataSet.js' --- dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-dataset/src/main/webapp/dhis-web-maintenance-dataset/javascript/editDataSet.js 2013-03-14 10:50:51 +0000 +++ dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-dataset/src/main/webapp/dhis-web-maintenance-dataset/javascript/editDataSet.js 1970-01-01 00:00:00 +0000 @@ -1,17 +0,0 @@ -jQuery(document).ready(function() { - validation2('editDataSetForm', function(form) { - form.submit(); - }, { - 'beforeValidateHandler' : function() { - $("#dataElementsSelectedList").find("option").attr("selected", "selected"); - $("#indicatorsSelectedList").find("option").attr("selected", "selected"); - }, - 'rules' : getValidationRules("dataSet") - }); - - checkValueIsExist("code", "validateDataSet.action", { - dataSetId : function() { - return jQuery("#dataSetId").val(); - } - }); -});
_______________________________________________ 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