From eaecfa20148f764f933b084581863d3313e4be3c Mon Sep 17 00:00:00 2001 From: Seamus Lee Date: Sun, 5 Jun 2016 19:49:24 +1000 Subject: [PATCH] WIP on adding data type for option group --- CRM/Admin/Form/OptionGroup.php | 2 ++ CRM/Core/BAO/OptionGroup.php | 16 ++++++++++++++++ CRM/Core/BAO/OptionValue.php | 9 +++++++++ CRM/Utils/Type.php | 18 ++++++++++++++++++ xml/schema/Core/OptionGroup.xml | 11 +++++++++++ 5 files changed, 56 insertions(+) diff --git a/CRM/Admin/Form/OptionGroup.php b/CRM/Admin/Form/OptionGroup.php index 7a4ac77e3b..05a504ec5e 100644 --- a/CRM/Admin/Form/OptionGroup.php +++ b/CRM/Admin/Form/OptionGroup.php @@ -71,6 +71,8 @@ class CRM_Admin_Form_OptionGroup extends CRM_Admin_Form { CRM_Core_DAO::getAttribute('CRM_Core_DAO_OptionGroup', 'description') ); + $this->addSelect('Data Type', CRM_Utils_Type::dataTypes(), TRUE); + $element = $this->add('checkbox', 'is_active', ts('Enabled?')); if ($this->_action & CRM_Core_Action::UPDATE) { if (in_array($this->_values['name'], array( diff --git a/CRM/Core/BAO/OptionGroup.php b/CRM/Core/BAO/OptionGroup.php index b9758cbd05..3dedb3740c 100644 --- a/CRM/Core/BAO/OptionGroup.php +++ b/CRM/Core/BAO/OptionGroup.php @@ -141,6 +141,22 @@ class CRM_Core_BAO_OptionGroup extends CRM_Core_DAO_OptionGroup { return $optionGroup->name; } + /** + * Get DataType for a specified option Group + * + * @param int $optionGroupId + * Id of the Option Group. + * + * @return string|null + * Data Type + */ + public static function getDataType($optionGroupId) { + $optionGroup = new CRM_Core_DAO_OptionGroup(); + $optionGroup->id = $optionGroupId; + $optionGroup->find(TRUE); + return $optionGroup->data_type; + } + /** * Ensure an option group exists. * diff --git a/CRM/Core/BAO/OptionValue.php b/CRM/Core/BAO/OptionValue.php index a529d1b18d..9041298c6c 100644 --- a/CRM/Core/BAO/OptionValue.php +++ b/CRM/Core/BAO/OptionValue.php @@ -57,6 +57,15 @@ class CRM_Core_BAO_OptionValue extends CRM_Core_DAO_OptionValue { if (!empty($params['id'])) { $ids = array('optionValue' => $params['id']); } + $dataType = CRM_Core_BAO_OptionGroup::getDataType($params['option_group_id']); + if ($dataType) { + $validate = CRM_Utils_Type::validate($params['value'], $dataType, FALSE); + if(!$validate) { + CRM_Core_Session::setStatus( + ts('Data Type of the value field for this option value does not match ' . $dataType), + ts('Value field Data Type mismatch')); + } + } return CRM_Core_BAO_OptionValue::add($params, $ids); } diff --git a/CRM/Utils/Type.php b/CRM/Utils/Type.php index bde619b5ee..e346af5ee2 100644 --- a/CRM/Utils/Type.php +++ b/CRM/Utils/Type.php @@ -456,4 +456,22 @@ class CRM_Utils_Type { return $output; } + /** + * Get list of avaliable Data Tupes for Option Groups + * + * @return array + */ + public static function dataTypes() { + $types = array( + 'integer', + 'String', + 'date', + 'time', + 'Timestamp', + 'money', + 'Email', + ); + return array_combine($types, $types); + } + } diff --git a/xml/schema/Core/OptionGroup.xml b/xml/schema/Core/OptionGroup.xml index 1da22f5b5c..013e76dde9 100644 --- a/xml/schema/Core/OptionGroup.xml +++ b/xml/schema/Core/OptionGroup.xml @@ -45,6 +45,17 @@ Option group description. 1.5 + + data_type + Data Type for this option group + varchar + 128 + Option group description. + + CRM_Utils_Type::dataTypes + + 4.7 + is_reserved Option Group Is Reserved? -- 2.25.1