APIv4 - Set 'activity_type_id' to required
authorColeman Watts <coleman@civicrm.org>
Tue, 28 Dec 2021 15:40:58 +0000 (10:40 -0500)
committerColeman Watts <coleman@civicrm.org>
Mon, 3 Jan 2022 17:08:36 +0000 (12:08 -0500)
In APIv4 GetFields, sets activity field to required because the
database default is problematic.

Civi/Api4/Service/Spec/Provider/ActivitySpecProvider.php

index 7188735293864c4365337d7050be418214f88b8e..53998937986dbfac12779d1f24f1cc9920f576d5 100644 (file)
@@ -23,6 +23,12 @@ class ActivitySpecProvider implements Generic\SpecProviderInterface {
   public function modifySpec(RequestSpec $spec) {
     $action = $spec->getAction();
 
+    // The database default '1' is problematic as the option list is user-configurable,
+    // so activity type '1' doesn't necessarily exist. Best make the field required.
+    $spec->getFieldByName('activity_type_id')
+      ->setDefaultValue(NULL)
+      ->setRequired($action === 'create');
+
     $field = new FieldSpec('source_contact_id', 'Activity', 'Integer');
     $field->setTitle(ts('Source Contact'));
     $field->setLabel(ts('Added by'));