X-Git-Url: https://vcs.fsf.org/?a=blobdiff_plain;f=CRM%2FCore%2FBAO%2FCustomOption.php;h=0e7fe31a749adb04a5387a305436d02400ce1777;hb=192d36c54b2ed8971aad10cb77fa561ca587d33c;hp=48d86991ab86d416afdca75d2cb73d267a3a12ea;hpb=b7440df523a7f263bfd30dc241e5d1eb33422650;p=civicrm-core.git diff --git a/CRM/Core/BAO/CustomOption.php b/CRM/Core/BAO/CustomOption.php index 48d86991ab..0e7fe31a74 100644 --- a/CRM/Core/BAO/CustomOption.php +++ b/CRM/Core/BAO/CustomOption.php @@ -1,7 +1,7 @@ columnName} = REPLACE( {$dao->columnName}, %1, %2 )"; return $options; } + /** + * When changing the value of an option this is called to update all corresponding custom data + * + * @param int $optionId + * @param string $newValue + */ + public static function updateValue($optionId, $newValue) { + $optionValue = new CRM_Core_DAO_OptionValue(); + $optionValue->id = $optionId; + $optionValue->find(TRUE); + $oldValue = $optionValue->value; + if ($oldValue == $newValue) { + return; + } + + $customField = new CRM_Core_DAO_CustomField(); + $customField->option_group_id = $optionValue->option_group_id; + $customField->find(); + while ($customField->fetch()) { + $customGroup = new CRM_Core_DAO_CustomGroup(); + $customGroup->id = $customField->custom_group_id; + $customGroup->find(TRUE); + if (CRM_Core_BAO_CustomField::isSerialized($customField)) { + $params = array( + 1 => array(CRM_Utils_Array::implodePadded($oldValue), 'String'), + 2 => array(CRM_Utils_Array::implodePadded($newValue), 'String'), + 3 => array('%' . CRM_Utils_Array::implodePadded($oldValue) . '%', 'String'), + ); + } + else { + $params = array( + 1 => array($oldValue, 'String'), + 2 => array($newValue, 'String'), + 3 => array($oldValue, 'String'), + ); + } + $sql = "UPDATE `{$customGroup->table_name}` SET `{$customField->column_name}` = REPLACE(`{$customField->column_name}`, %1, %2) WHERE `{$customField->column_name}` LIKE %3"; + $customGroup->free(); + CRM_Core_DAO::executeQuery($sql, $params); + } + $customField->free(); + } + }