CRM-13814
authorPratik Joshi <pratik.joshi@webaccess.co.in>
Fri, 22 Nov 2013 13:55:19 +0000 (19:25 +0530)
committerPratik Joshi <pratik.joshi@webaccess.co.in>
Fri, 22 Nov 2013 13:55:19 +0000 (19:25 +0530)
CRM/Core/BAO/OptionValue.php
api/v3/OptionValue.php
api/v3/examples/OptionValue/SortOption.php
tests/phpunit/api/v3/OptionValueTest.php

index fab3a17efd8fb6f9b2f96f407605b51542114666..97da09c945ee9fa8a38f681e8365ec8c39e19a7e 100644 (file)
@@ -195,8 +195,19 @@ class CRM_Core_BAO_OptionValue extends CRM_Core_DAO_OptionValue {
       $p = array(1 => array($params['option_group_id'], 'Integer'));
       CRM_Core_DAO::executeQuery($query, $p);
     }
+
+    // CRM-13814 : evalute option group id
+    if (!array_key_exists('option_group_id', $params) && !empty($ids['optionValue'])) {
+      $groupId = CRM_Core_DAO::getFieldValue('CRM_Core_DAO_OptionValue',
+        $ids['optionValue'], 'option_group_id', 'id'
+      );
+    }
+    else {
+      $groupId = $params['option_group_id'];
+    }
+
     $groupName = CRM_Core_DAO::getFieldValue('CRM_Core_DAO_OptionGroup',
-      $params['option_group_id'], 'name', 'id'
+      $groupId, 'name', 'id'
     );
     if (in_array($groupName, CRM_Core_OptionGroup::$_domainIDGroups)) {
       $optionValue->domain_id = CRM_Utils_Array::value('domain_id', $params, CRM_Core_Config::domainID());
index 772a0d54656eee966bfa662134d8c3b38ff0fc15..ad2bd40292dc76ec0968afe3e888ab2ef0362e5d 100644 (file)
@@ -38,9 +38,20 @@ function civicrm_api3_option_value_get($params) {
  * @access public
  */
 function civicrm_api3_option_value_create($params) {
-
   $result = _civicrm_api3_basic_create(_civicrm_api3_get_BAO(__FUNCTION__), $params);
-  civicrm_api('option_value', 'getfields', array('version' => 3, 'cache_clear' => 1, 'option_group_id' => $params['option_group_id']));
+
+  // CRM-13814 : evalute option group id
+  // option group id would be passed in case of adding a new option value record
+  if (!empty($params['id']) && !array_key_exists('option_group_id', $params)) {
+    $groupId = CRM_Core_DAO::getFieldValue('CRM_Core_DAO_OptionValue',
+      $params['id'], 'option_group_id', 'id'
+    );
+  }
+  else {
+    $groupId = $params['option_group_id'];
+  }
+
+  civicrm_api('option_value', 'getfields', array('version' => 3, 'cache_clear' => 1, 'option_group_id' => $groupId));
   return $result;
 }
 
index 367e3ce6b0d29cc41f9da3eb219d1db3fc604d23..f93dbdd08dfc361f304fc7924400f7dbb3012fd1 100644 (file)
@@ -67,4 +67,4 @@ function option_value_getsingle_expectedresult(){
 *
 * API Standards documentation:
 * http://wiki.civicrm.org/confluence/display/CRM/API+Architecture+Standards
-*/
\ No newline at end of file
+*/
index 672def2d32007cfe5f71d55c9d7993e7b2ad452f..201c88797566370140f8681644ccc0a31cd6f4c2 100644 (file)
@@ -278,5 +278,43 @@ class api_v3_OptionValueTest extends CiviUnitTestCase {
     $fields = $this->callAPISuccess('contribution', 'getoptions', array('field' => 'payment_instrument_id'));
     $this->assertFalse(in_array($newOption, $fields['values']));
   }
-}
 
+
+  /*
+   * update option value with 'id' paramter and the value to update
+   * and not passing option group id
+   */
+  public function testUpdateOptionValueNoGroupId() {
+    // create a option group
+    $og = $this->callAPISuccess('option_group', 'create', array('name' => 'our test Option Group', 'is_active' => 1));
+    // create a option value
+    $ov = $this->callAPISuccess('option_value', 'create',
+      array('option_group_id' => $og['id'], 'label' => 'test option value')
+    );
+    // update option value without 'option_group_id'
+    $res =     $this->callAPISuccess('option_value', 'create', array('id' => $ov['id'], 'is_active' => 0));
+    $val = $this->callAPISuccess('option_value', 'getvalue', array(
+      'id' => $ov['id'], 'return' => 'is_active',
+    ));
+    $this->assertEquals($val, 0, "update with no group id is not proper" . __LINE__);
+  }
+
+  /*
+   * update option value with 'id' paramter and the value to update
+   * and as well as option group id
+   */
+  public function testUpdateOptionValueWithGroupId() {
+    // create a option group
+    $og = $this->callAPISuccess('option_group', 'create', array('name' => 'our test Option Group for with group id', 'is_active' => 1));
+    // create a option value
+    $ov = $this->callAPISuccess('option_value', 'create',
+      array('option_group_id' => $og['id'], 'label' => 'test option value')
+    );
+    // update option value without 'option_group_id'
+    $this->callAPISuccess('option_value', 'create', array('id' => $ov['id'], 'option_group_id' => $og['id'], 'is_active' => 0));
+    $val = $this->callAPISuccess('option_value', 'getvalue', array(
+      'id' => $ov['id'], 'return' => 'is_active',
+    ));
+    $this->assertEquals($val, 0, "update with group id is not proper " . __LINE__);
+  }
+}
\ No newline at end of file