diff --git a/modules/opencase_entities/config/schema/oc_case_type.schema.yml b/modules/opencase_entities/config/schema/oc_case_type.schema.yml index 7a22f60..7c64e98 100644 --- a/modules/opencase_entities/config/schema/oc_case_type.schema.yml +++ b/modules/opencase_entities/config/schema/oc_case_type.schema.yml @@ -8,5 +8,8 @@ opencase_entities.oc_case_type.*: label: type: label label: 'Label' + allowedActivityTypes: + type: sequence + label: 'Allowed Activity Types' uuid: type: string diff --git a/modules/opencase_entities/src/Entity/OCCaseType.php b/modules/opencase_entities/src/Entity/OCCaseType.php index 61d098f..fb5f570 100644 --- a/modules/opencase_entities/src/Entity/OCCaseType.php +++ b/modules/opencase_entities/src/Entity/OCCaseType.php @@ -55,4 +55,10 @@ class OCCaseType extends ConfigEntityBundleBase implements OCCaseTypeInterface { */ protected $label; + /** + * Activity types that can be attached to this type of case. + * + * @var array + */ + protected $allowedActivityTypes; } diff --git a/src/EntityTypeRelationsWidget.php b/src/EntityTypeRelationsWidget.php index d9c1a5c..d82a5d1 100644 --- a/src/EntityTypeRelationsWidget.php +++ b/src/EntityTypeRelationsWidget.php @@ -25,6 +25,17 @@ class EntityTypeRelationsWidget { '#type' => 'checkboxes', '#options' => $options ); + $activity_types = \Drupal::service('entity_type.bundle.info')->getBundleInfo('oc_activity'); + $options = array(); + foreach($activity_types as $machine_name => $info) { + $options[$machine_name] = $info['label']; + } + $form['allowed_activity_types'] = array( + '#title' => t('Activity types'), + '#description' => t('Types of activities that can be logged against this case.'), + '#type' => 'checkboxes', + '#options' => $options + ); $form['actions']['submit']['#submit'][] = array($this, 'submit'); } @@ -37,6 +48,11 @@ class EntityTypeRelationsWidget { $case_type = $form['id']['#default_value']; $allowedActorTypes = EntityTypeRelations::getAllowedActorTypesForCaseType($case_type); $form['allowed_actor_types']['#default_value'] = $allowedActorTypes; + $caseTypeConfig = \Drupal::entityTypeManager()->getStorage('oc_case_type')->load($case_type); + $allowedActivityTypes = $caseTypeConfig->get('allowedActivityTypes'); + if ($allowedActivityTypes) { + $form['allowed_activity_types']['#default_value'] = $allowedActivityTypes; + } } /** @@ -56,5 +72,8 @@ class EntityTypeRelationsWidget { } $base_field_override->setSetting('handler_settings', ['target_bundles' => $form_state->getValue('allowed_actor_types')]); $base_field_override->save(); + $caseTypeConfig = \Drupal::entityTypeManager()->getStorage('oc_case_type')->load($case_type_machine_name); + $caseTypeConfig->set('allowedActivityTypes', $form_state->getValue('allowed_activity_types')); + $caseTypeConfig->save(); } }