← Back to team overview

dhis2-devs team mailing list archive

[Branch ~dhis2-devs-core/dhis2/trunk] Rev 14015: Add missing files.

 

------------------------------------------------------------
revno: 14015
committer: Tran Chau <tran.hispvietnam@xxxxxxxxx>
branch nick: dhis2
timestamp: Thu 2014-02-13 22:03:55 +0700
message:
  Add missing files.
added:
  dhis-2/dhis-services/dhis-service-core/src/main/java/org/hisp/dhis/dataelement/CategoryOptionGroupSetDeletionHandler.java
  dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-datadictionary/src/main/webapp/dhis-web-maintenance-datadictionary/addCategoryOptionGroupSetForm.vm
  dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-datadictionary/src/main/webapp/dhis-web-maintenance-datadictionary/categoryOptionGroupSet.vm
  dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-datadictionary/src/main/webapp/dhis-web-maintenance-datadictionary/javascript/categoryOptionGroupSet.js
  dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-datadictionary/src/main/webapp/dhis-web-maintenance-datadictionary/jsonCategoryOptionGroupSet.vm
  dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-datadictionary/src/main/webapp/dhis-web-maintenance-datadictionary/updateCategoryOptionGroupSetForm.vm
modified:
  dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-datadictionary/src/main/resources/struts.xml
  dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-user/src/main/resources/org/hisp/dhis/user/i18n_module.properties


--
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
=== added file 'dhis-2/dhis-services/dhis-service-core/src/main/java/org/hisp/dhis/dataelement/CategoryOptionGroupSetDeletionHandler.java'
--- dhis-2/dhis-services/dhis-service-core/src/main/java/org/hisp/dhis/dataelement/CategoryOptionGroupSetDeletionHandler.java	1970-01-01 00:00:00 +0000
+++ dhis-2/dhis-services/dhis-service-core/src/main/java/org/hisp/dhis/dataelement/CategoryOptionGroupSetDeletionHandler.java	2014-02-13 15:03:55 +0000
@@ -0,0 +1,70 @@
+/*
+ * Copyright (c) 2004-2013, 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.
+ */
+
+package org.hisp.dhis.dataelement;
+
+import org.hisp.dhis.system.deletion.DeletionHandler;
+import org.springframework.beans.factory.annotation.Autowired;
+
+/**
+ * @author Chau Thu Tran
+ * 
+ * @version $ CategoryOptionGroupSetDeletionHandler.java Feb 13, 2014 7:53:06 PM
+ *          $
+ */
+public class CategoryOptionGroupSetDeletionHandler
+    extends DeletionHandler
+{
+    // -------------------------------------------------------------------------
+    // Dependencies
+    // -------------------------------------------------------------------------
+
+    @Autowired
+    private DataElementCategoryService dataElementCategoryService;
+
+    // -------------------------------------------------------------------------
+    // DeletionHandler implementation
+    // -------------------------------------------------------------------------
+
+    @Override
+    public String getClassName()
+    {
+        return CategoryOptionGroupSet.class.getSimpleName();
+    }
+
+    @Override
+    public void deleteCategoryOptionGroup( CategoryOptionGroup categoryOptionGroup )
+    {
+        CategoryOptionGroupSet groupSet = categoryOptionGroup.getGroupSet();
+        
+        if ( groupSet != null )
+        {
+            groupSet.getMembers().remove( categoryOptionGroup );
+            dataElementCategoryService.updateCategoryOptionGroupSet( groupSet );
+        }
+    }
+}

=== modified file 'dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-datadictionary/src/main/resources/struts.xml'
--- dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-datadictionary/src/main/resources/struts.xml	2014-02-13 14:24:59 +0000
+++ dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-datadictionary/src/main/resources/struts.xml	2014-02-13 15:03:55 +0000
@@ -726,14 +726,14 @@
 		<param name="page">/dhis-web-maintenance-datadictionary/updateCategoryOptionGroupForm.vm</param>
 		<param name="javascripts">javascript/categoryOptionGroup.js</param>
 		<param name="stylesheets">style/basic.css</param>
-		<param name="requiredAuthorities">F_CATEGORY_OPTION_GROUP_ADD</param>
+		<param name="requiredAuthorities">F_CATEGORY_OPTION_GROUP_UPDATE</param>
 	</action>
 
 	<action name="updateCategoryOptionGroup"
 		class="org.hisp.dhis.dd.action.categoryoptiongroup.UpdateCategoryOptionGroupAction">
 		<result name="success" type="redirect">categoryOptionGroup.action
 		</result>
-		<param name="requiredAuthorities">F_CATEGORY_OPTION_GROUP_ADD</param>
+		<param name="requiredAuthorities">F_CATEGORY_OPTION_GROUP_UPDATE</param>
 	</action>
 
 	<action name="validateCategoryOptionGroup"
@@ -797,14 +797,14 @@
 		<param name="page">/dhis-web-maintenance-datadictionary/updateCategoryOptionGroupSetForm.vm</param>
 		<param name="javascripts">javascript/categoryOptionGroupSet.js</param>
 		<param name="stylesheets">style/basic.css</param>
-		<param name="requiredAuthorities">F_CATEGORY_OPTION_GROUP_SET_ADD</param>
+		<param name="requiredAuthorities">F_CATEGORY_OPTION_GROUP_SET_UPDATE</param>
 	</action>
 
 	<action name="updateCategoryOptionGroupSet"
 		class="org.hisp.dhis.dd.action.categoryoptiongroupset.UpdateCategoryOptionGroupSetAction">
 		<result name="success" type="redirect">categoryOptionGroupSet.action
 		</result>
-		<param name="requiredAuthorities">F_CATEGORY_ATTRIBUTE_GROUP_ADD</param>
+		<param name="requiredAuthorities">F_CATEGORY_OPTION_GROUP_SET_UPDATE</param>
 	</action>
 
 	<action name="validateCategoryOptionGroupSet"

=== added file 'dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-datadictionary/src/main/webapp/dhis-web-maintenance-datadictionary/addCategoryOptionGroupSetForm.vm'
--- dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-datadictionary/src/main/webapp/dhis-web-maintenance-datadictionary/addCategoryOptionGroupSetForm.vm	1970-01-01 00:00:00 +0000
+++ dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-datadictionary/src/main/webapp/dhis-web-maintenance-datadictionary/addCategoryOptionGroupSetForm.vm	2014-02-13 15:03:55 +0000
@@ -0,0 +1,95 @@
+<script type="text/javascript">
+	jQuery(function() {
+        validation('addCategoryOptionGroupSetForm', function ( form ) {
+            form.submit();
+        },function(){
+			selectAllById('groupMembers');
+			if(jQuery("#groupMembers option").length > 0 ){
+				setFieldValue('hasOptions', 'true');
+			}
+		});
+
+        checkValueIsExist("name", "validateCategoryOptionGroupSet.action");
+		
+		jQuery("#availableCategoryOptionsList").dhisAjaxSelect({
+			source: "../dhis-web-commons-ajax-json/getCategoryOptionGroups.action",
+			iterator: "categoryOptionGroups",
+			connectedTo: 'groupMembers',
+			handler: function(item) {
+				var option = jQuery("<option data-id='" + item.groups + "' />");
+				option.text( item.name );
+				option.attr( "value", item.id );
+
+				return option;
+			}
+		});
+	});
+</script>
+
+<h3>$i18n.getString( "create_new_category_option_group_set" )</h3>
+
+<form id="addCategoryOptionGroupSetForm" name="addCategoryOptionGroupSetForm" action="addCategoryOptionGroupSet.action" method="post" class="inputForm">
+
+<table>
+	<tr>
+		<th colspan="2">$i18n.getString( "details" )</th>
+	</tr>
+
+	<tr>
+		<td style="width: 120px;"><label for="name">$i18n.getString( "name" ) <em title="$i18n.getString( 'required' )" class="required">*</em></label></td>
+        <td><input type="text" id="name" name="name" class="{validate:{required:true}}"/></td>
+    </tr>
+	<tr>
+		<td><label for="description" style="width:100%">$i18n.getString( "description" ) <em title="$i18n.getString( 'required' )" class="required">*</em></label></td>
+		<td><input type="text" id="description" name="description"></td>
+	</tr>
+	<tr>
+		<td><label for="dataDimension" style="width:100%">$i18n.getString( "data_dimension" ) <em title="$i18n.getString( 'required' )" class="required">*</em></label></td>
+		<td>
+			<select id="dataDimension" name="dataDimension">
+				<option value="true" selected="selected">$i18n.getString( "yes" )</option>
+				<option value="false">$i18n.getString( "no" )</option>
+			</select>
+		</td>
+	</tr>
+</table>
+
+<table>
+    <colgroup>
+      <col style="width: 500px;"/>
+      <col/>
+      <col style="width: 500px;"/>
+    </colgroup>
+
+	<tr>
+		<th>$i18n.getString( "available_category_option_groups" )</th>
+		<th></th>
+		<th>$i18n.getString( "group_members" )
+			<input type='hidden' id='hasOptions' name='hasOptions' class="{validate:{required:true}}">
+		</th>
+	</tr>
+
+	<tr>
+		<td>
+			<select id="availableCategoryOptionsList" name="availableCategoryOptionsList" multiple="multiple" style="height: 200px; width: 100%;"></select>
+		</td>
+		
+		<td style="text-align:center">
+        	<input type="button" value="&gt;" title="$i18n.getString( 'move_selected' )" style="width:50px" onclick="dhisAjaxSelect_moveAllSelected( 'availableCategoryOptionsList' );"/><br/>
+            <input type="button" value="&lt;" title="$i18n.getString( 'remove_selected' )" style="width:50px" onclick="dhisAjaxSelect_moveAllSelected( 'groupMembers' );"/><br/>
+			<input type="button" value="&gt;&gt;" title="$i18n.getString('move_all')" style="width:50px" onclick="dhisAjaxSelect_moveAll( 'availableCategoryOptionsList' );"/><br/>
+			<input type="button" value="&lt;&lt;" title="$i18n.getString('remove_all')" style="width:50px" onclick="dhisAjaxSelect_moveAll( 'groupMembers' );"/>
+		</td>
+
+		<td>
+			<select id="groupMembers" name="groupMembers" multiple="multiple" style="height: 200px; width: 100%; margin-top: 22px;"></select>
+		</td>
+	</tr>
+</table>
+
+<p>
+	<input type="submit" value="$i18n.getString( 'add' )" style="width:10em"/>
+	<input type="button" value="$i18n.getString( 'cancel' )" onclick="dhis2.commons.redirectCurrentPage( 'categoryOptionGroupSet.action' )" style="width:10em"/>
+</p>
+
+</form>

=== added file 'dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-datadictionary/src/main/webapp/dhis-web-maintenance-datadictionary/categoryOptionGroupSet.vm'
--- dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-datadictionary/src/main/webapp/dhis-web-maintenance-datadictionary/categoryOptionGroupSet.vm	1970-01-01 00:00:00 +0000
+++ dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-datadictionary/src/main/webapp/dhis-web-maintenance-datadictionary/categoryOptionGroupSet.vm	2014-02-13 15:03:55 +0000
@@ -0,0 +1,72 @@
+
+<script type="text/javascript">
+	jQuery(document).ready(function(){
+		tableSorter( 'categoryOptionGroupSetList' );	
+	});
+
+	var i18n_confirm_delete = '$encoder.jsEscape( $i18n.getString( "confirm_delete_category_option_group_set" ) , "'")';
+</script>
+
+<h3>$i18n.getString( "category_option_group_set_management" )</h3>
+
+<div id="contextMenu" class="contextMenu">
+  <ul id="contextMenuItems" class="contextMenuItems">
+    <li><a data-target-fn="showUpdateCategoryOptionGroupSetForm"><i class="fa fa-edit"></i>&nbsp;&nbsp;$i18n.getString( "edit" )</a></li>
+    <li><a data-target-fn="translateWithContext"><i class="fa fa-globe"></i>&nbsp;&nbsp;$i18n.getString( "translation_translate" )</a></li>
+    <li><a data-target-fn="removeCategoryOptionGroupSet"><i class="fa fa-trash-o"></i>&nbsp;&nbsp;$i18n.getString( "remove" )</a></li>
+    <li><a data-target-fn="showCategoryOptionGroupSetDetails"><i class="fa fa-info-circle"></i>&nbsp;&nbsp;$i18n.getString( "show_details" )</a></li>
+  </ul>
+</div>
+
+<table class="mainPageTable">
+	<tr>
+		<td style="vertical-align:top">
+			<table width="100%">
+				<tr>
+					<td>#filterDiv( "categoryOptionGroupSet" )</td>
+					<td style="text-align:right"><input type="button" value="$i18n.getString( 'add_new' )" onclick="window.location.href='showAddCategoryOptionGroupSetForm.action'" style="width:80px"/></td>
+				</tr>
+			</table>
+			<div id="content">
+			<table class="listTable" id="categoryOptionGroupSetList">			
+				<thead>
+					<tr>
+						<th>$i18n.getString( "name" )</th>
+					</tr>
+				</thead>
+				<tbody id="list">
+				#foreach( $categoryOptionGroupSet in $categoryOptionGroupSets )
+				<tr id="tr${categoryOptionGroupSet.id}" data-id="$!categoryOptionGroupSet.id" data-uid="$!categoryOptionGroupSet.uid" data-type="CategoryOptionGroup" data-name="$encoder.htmlEncode( $!categoryOptionGroupSet.displayName )"
+            data-can-manage="$security.canManage( $categoryOptionGroupSet )"
+            data-can-update="$security.canUpdate( $categoryOptionGroupSet )"
+            data-can-delete="$security.canDelete( $categoryOptionGroupSet )">
+          <td>$encoder.htmlEncode( $!categoryOptionGroupSet.displayName )</td>
+				</tr>
+				#end
+				</tbody>
+			</table>
+			<p></p>
+			#parse( "/dhis-web-commons/paging/paging.vm" )
+			</div>
+		</td>
+
+		<td id="detailsData">
+			<div id="detailsArea">
+				<div id="hideDetailsArea">
+					<a href="javascript:hideDetails()" title="$i18n.getString( 'hide_details' )"><img src="../images/hide.png" alt="$i18n.getString( 'hide_details' )"/></a>
+				</div>
+				<p><label>$i18n.getString( "name" ):</label><br/><span id="nameField"></span></p>
+				<p><label>$i18n.getString( "description" ):</label><br/><span id="descriptionField"></span></p>
+				<p><label>$i18n.getString( "number_of_members" ):</label><br/><span id="memberCountField"></span></p>
+			</div>
+
+			<div id="warningArea">
+          <div id="hideDetailsArea">
+              <a href="javascript:hideWarning()" title="$i18n.getString( 'hide_warning' )"><img src="../images/hide.png" alt="$i18n.getString( 'hide_warning' )"/></a>
+          </div>
+          <p><span id="warningField"></span></p>
+      </div>
+			
+		</td>
+	</tr>
+</table>

=== added file 'dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-datadictionary/src/main/webapp/dhis-web-maintenance-datadictionary/javascript/categoryOptionGroupSet.js'
--- dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-datadictionary/src/main/webapp/dhis-web-maintenance-datadictionary/javascript/categoryOptionGroupSet.js	1970-01-01 00:00:00 +0000
+++ dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-datadictionary/src/main/webapp/dhis-web-maintenance-datadictionary/javascript/categoryOptionGroupSet.js	2014-02-13 15:03:55 +0000
@@ -0,0 +1,33 @@
+$(function() {
+  dhis2.contextmenu.makeContextMenu({
+    menuId: 'contextMenu',
+    menuItemActiveClass: 'contextMenuItemActive'
+  });
+});
+
+// -----------------------------------------------------------------------------
+// View details
+// -----------------------------------------------------------------------------
+
+function showUpdateCategoryOptionGroupSetForm( context ) {
+  location.href = 'showUpdateCategoryOptionGroupSetForm.action?id=' + context.id;
+}
+
+function showCategoryOptionGroupSetDetails( context ) {
+  jQuery.getJSON('getCategoryOptionGroupSet.action', { id: context.id },
+    function( json ) {
+      setInnerHTML('nameField', json.categoryOptionGroupSet.name);
+      setInnerHTML('descriptionField', json.categoryOptionGroupSet.description);
+      setInnerHTML('memberCountField', json.categoryOptionGroupSet.memberCount);
+
+      showDetails();
+    });
+}
+
+// -----------------------------------------------------------------------------
+// Remove CategoryOption
+// -----------------------------------------------------------------------------
+
+function removeCategoryOptionGroupSet( context ) {
+  removeItem(context.id, context.name, i18n_confirm_delete, 'removeCategoryOptionGroupSet.action');
+}

=== added file 'dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-datadictionary/src/main/webapp/dhis-web-maintenance-datadictionary/jsonCategoryOptionGroupSet.vm'
--- dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-datadictionary/src/main/webapp/dhis-web-maintenance-datadictionary/jsonCategoryOptionGroupSet.vm	1970-01-01 00:00:00 +0000
+++ dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-datadictionary/src/main/webapp/dhis-web-maintenance-datadictionary/jsonCategoryOptionGroupSet.vm	2014-02-13 15:03:55 +0000
@@ -0,0 +1,9 @@
+{ "categoryOptionGroupSet": 
+  {
+    "id": $!{categoryOptionGroupSet.id},
+    "name": "$!encoder.jsonEncode( ${categoryOptionGroupSet.displayName} )",
+	"shortName": "$!encoder.jsonEncode( ${categoryOptionGroupSet.displayShortName} )",
+	"code": "$!encoder.jsonEncode( ${categoryOptionGroupSet.code} )",
+    "memberCount": "$categoryOptionGroupSet.members.size()"
+  } 
+}

=== added file 'dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-datadictionary/src/main/webapp/dhis-web-maintenance-datadictionary/updateCategoryOptionGroupSetForm.vm'
--- dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-datadictionary/src/main/webapp/dhis-web-maintenance-datadictionary/updateCategoryOptionGroupSetForm.vm	1970-01-01 00:00:00 +0000
+++ dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-datadictionary/src/main/webapp/dhis-web-maintenance-datadictionary/updateCategoryOptionGroupSetForm.vm	2014-02-13 15:03:55 +0000
@@ -0,0 +1,107 @@
+<script type="text/javascript">
+	jQuery(function() {
+        validation( 'updateCategoryOptionGroupSetForm', function( form )
+        {
+            form.submit();
+        },function(){
+			selectAllById('groupMembers');
+			if(jQuery("#groupMembers option").length > 0 ){
+				setFieldValue('hasOptions', 'true');
+			}
+		});
+
+        checkValueIsExist( "name", "validateCategoryOptionGroupSet.action", {
+            id : getFieldValue( 'id' )
+        } );
+		
+		jQuery("#availableCategoryOptionsList").dhisAjaxSelect({
+			source: "../dhis-web-commons-ajax-json/getCategoryOptionGroups.action",
+			iterator: "categoryOptionGroups",
+			connectedTo: 'groupMembers',
+			handler: function(item) {
+				var option = jQuery("<option data-id='" + item.groups + "' />");
+				option.text( item.name );
+				option.attr( "value", item.id );
+
+				return option;
+			}
+		});
+	});
+</script>
+
+<h3>$i18n.getString( "edit_category_option_group" )</h3>
+
+<form id="updateCategoryOptionGroupSetForm" action="updateCategoryOptionGroupSet.action" method="post" class="inputForm">
+
+<div>
+	<input type="hidden" id="id" name="id" value="$categoryOptionGroupSet.id"/>
+</div>
+
+<table>
+	<tr>
+		<th colspan="2">$i18n.getString( "details" )</th>
+	</tr>
+
+	<tr>
+		<td style="width: 120px;"><label for="name">$i18n.getString( "name" ) <em title="$i18n.getString( 'required' )" class="required">*</em></label></td>
+		<td><input type="text" id="name" name="name" class="{validate:{required:true}}" value="$encoder.htmlEncode( $!categoryOptionGroupSet.name )">
+		</td>
+	</tr>
+	<tr>
+		<td><label for="description">$i18n.getString( "description" ) <em title="$i18n.getString( "required" )" class="required">*</em></label></td>
+		<td><input type="text" id="description" name="description" value="#if( $categoryOptionGroupSet.description)$encoder.htmlEncode( $categoryOptionGroupSet.description )#end"></td>
+	</tr>
+	<tr>
+		<td><label for="dataDimension">$i18n.getString( "data_dimension" ) <em title="$i18n.getString( "required" )" class="required">*</em></label></td>
+		<td>
+			<select id="dataDimension" name="dataDimension">
+				<option value="true" #if( $categoryOptionGroupSet.dataDimension ) selected="selected" #end>$i18n.getString( "yes" )</option>
+				<option value="false" #if( !$categoryOptionGroupSet.dataDimension ) selected="selected" #end>$i18n.getString( "no" )</option>
+			</select>
+		</td>
+	</tr>
+</table>
+
+<table>
+    <colgroup>
+      <col style="width: 500px;"/>
+      <col/>
+      <col style="width: 500px;"/>
+    </colgroup>
+
+	<tr>
+		<th>$i18n.getString( "available_category_option_groups" )</th>
+		<th></th>
+		<th>$i18n.getString( "group_members" )
+			<input type='hidden' id='hasOptions' name='hasOptions' class="{validate:{required:true}}">
+		</th>
+	</tr>
+
+	<tr>
+		<td>
+			<select id="availableCategoryOptionsList" name="availableCategoryOptionsList" multiple="multiple" style="height: 200px; width: 100%;"></select>
+		</td>
+
+        <td style="text-align:center">          
+        	<input type="button" value="&gt;" title="$i18n.getString( 'move_selected' )" style="width:50px" onclick="dhisAjaxSelect_moveAllSelected( 'availableCategoryOptionsList' );"/><br/>
+            <input type="button" value="&lt;" title="$i18n.getString( 'remove_selected' )" style="width:50px" onclick="dhisAjaxSelect_moveAllSelected( 'groupMembers' );"/><br/>
+			<input type="button" value="&gt;&gt;" title="$i18n.getString('move_all')" style="width:50px" onclick="dhisAjaxSelect_moveAll( 'availableCategoryOptionsList' );"/><br/>
+			<input type="button" value="&lt;&lt;" title="$i18n.getString('remove_all')" style="width:50px" onclick="dhisAjaxSelect_moveAll( 'groupMembers' );"/>
+        </td>
+
+		<td>
+			<select id="groupMembers" name="groupMembers" multiple="multiple" style="height: 200px; width: 100%; margin-top: 22px;">
+				#foreach( $categoryOption in $groupMembers )
+					<option value="$categoryOption.id">$encoder.htmlEncode( $categoryOption.displayName )</option>
+				#end
+			</select>
+		</td>
+	</tr>
+</table>
+
+<p>
+	<input type="submit" value="$i18n.getString( 'save' )" style="width:10em"/>
+	<input type="button" value="$i18n.getString( 'cancel' )" onclick="dhis2.commons.redirectCurrentPage( 'categoryOptionGroupSet.action' )" style="width:10em"/>
+</p>
+
+</form>

=== 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-02-10 11:24:32 +0000
+++ dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-user/src/main/resources/org/hisp/dhis/user/i18n_module.properties	2014-02-13 15:03:55 +0000
@@ -57,6 +57,12 @@
 F_DATADICTIONARY_DELETE=Delete Data Dictionary
 F_DATAELEMENT_MINMAX_ADD=Add/Update Min/max rule
 F_DATAELEMENT_MINMAX_DELETE=Delete Min/max rule
+F_CATEGORY_OPTION_GROUP_DELETE = Delete Category Option Group
+F_CATEGORY_OPTION_GROUP_ADD = Add Category Option Group
+F_CATEGORY_OPTION_GROUP_UPDATE = Update Category Option Group
+F_CATEGORY_OPTION_GROUP_SET_DELETE = Delete Category Option Group Set
+F_CATEGORY_OPTION_GROUP_SET_ADD = Add Category Option Group Set
+F_CATEGORY_OPTION_GROUP_SET_UPDATE = Update Category Option Group Set
 F_DATASET_PUBLIC_ADD=Add/Update Public Data Set
 F_DATASET_PRIVATE_ADD=Add/Update Private Data Set
 F_DATASET_DELETE=Delete Data Set