Merge pull request #17008 from ivan-compucorp/CPS-70-fix-radio-value
[civicrm-core.git] / CRM / Core / BAO / UFField.php
index 7018b6e8620497ac8fceeca8363ad86ba8647d90..2e1a4dc56d8aeba39ed7f2bb0416c6d49773d817 100644 (file)
@@ -37,8 +37,10 @@ class CRM_Core_BAO_UFField extends CRM_Core_DAO_UFField {
    * @throws \API_Exception
    */
   public static function create($params) {
-    $id = CRM_Utils_Array::value('id', $params);
+    $id = $params['id'] ?? NULL;
 
+    $op = empty($id) ? 'create' : 'edit';
+    CRM_Utils_Hook::pre('UFField', $op, $id, $params);
     // Merge in data from existing field
     if (!empty($id)) {
       $UFField = new CRM_Core_BAO_UFField();
@@ -105,6 +107,8 @@ class CRM_Core_BAO_UFField extends CRM_Core_DAO_UFField {
     $fieldsType = CRM_Core_BAO_UFGroup::calculateGroupType($ufField->uf_group_id, TRUE);
     CRM_Core_BAO_UFGroup::updateGroupTypes($ufField->uf_group_id, $fieldsType);
 
+    CRM_Utils_Hook::post('UFField', $op, $ufField->id, $ufField);
+
     civicrm_api3('profile', 'getfields', ['cache_clear' => TRUE]);
     return $ufField;
   }
@@ -176,18 +180,18 @@ class CRM_Core_BAO_UFField extends CRM_Core_DAO_UFField {
    */
   public static function duplicateField($params) {
     $ufField = new CRM_Core_DAO_UFField();
-    $ufField->uf_group_id = CRM_Utils_Array::value('uf_group_id', $params);
-    $ufField->field_type = CRM_Utils_Array::value('field_type', $params);
-    $ufField->field_name = CRM_Utils_Array::value('field_name', $params);
-    $ufField->website_type_id = CRM_Utils_Array::value('website_type_id', $params);
+    $ufField->uf_group_id = $params['uf_group_id'] ?? NULL;
+    $ufField->field_type = $params['field_type'] ?? NULL;
+    $ufField->field_name = $params['field_name'] ?? NULL;
+    $ufField->website_type_id = $params['website_type_id'] ?? NULL;
     if (is_null(CRM_Utils_Array::value('location_type_id', $params, ''))) {
       // primary location type have NULL value in DB
       $ufField->whereAdd("location_type_id IS NULL");
     }
     else {
-      $ufField->location_type_id = CRM_Utils_Array::value('location_type_id', $params);
+      $ufField->location_type_id = $params['location_type_id'] ?? NULL;
     }
-    $ufField->phone_type_id = CRM_Utils_Array::value('phone_type_id', $params);
+    $ufField->phone_type_id = $params['phone_type_id'] ?? NULL;
 
     if (!empty($params['id'])) {
       $ufField->whereAdd("id <> " . $params['id']);
@@ -1027,6 +1031,8 @@ SELECT  id
       unset($fields[$value['field_type']][$key]);
     }
 
+    // Allow extensions to alter the array of entity => fields permissible in a CiviCRM Profile.
+    CRM_Utils_Hook::alterUFFields($fields);
     return $fields;
   }