Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
0.00% covered (danger)
0.00%
0 / 46
0.00% covered (danger)
0.00%
0 / 3
CRAP
n/a
0 / 0
crm_case_external_id_entity_bundle_field_info_alter
0.00% covered (danger)
0.00%
0 / 3
0.00% covered (danger)
0.00%
0 / 1
12
crm_case_external_id_form_field_config_form_alter
0.00% covered (danger)
0.00%
0 / 30
0.00% covered (danger)
0.00%
0 / 1
20
crm_case_external_id_form_field_config_form_validate
0.00% covered (danger)
0.00%
0 / 13
0.00% covered (danger)
0.00%
0 / 1
42
1<?php
2
3/**
4 * @file
5 * Contains crm_case_external_id.module.
6 */
7
8use Drupal\Core\Entity\EntityTypeInterface;
9use Drupal\Core\Form\FormStateInterface;
10
11/**
12 * Implements hook_entity_bundle_field_info_alter().
13 */
14function crm_case_external_id_entity_bundle_field_info_alter(&$fields, EntityTypeInterface $entity_type, $bundle) {
15
16  if ($entity_type->id() === 'crm_case') {
17    if (isset($fields['external_id'])) {
18      // Use the ID as defined in the annotation of the constraint definition.
19      $fields['external_id']->addConstraint('CrmCaseExternalId', []);
20    }
21  }
22}
23
24/**
25 * Implements hook_form_FORM_ID_alter() for 'field_config_edit_form'.
26 */
27function crm_case_external_id_form_field_config_form_alter(&$form, FormStateInterface $form_state, $form_id) {
28  $field = $form_state->getFormObject()->getEntity();
29  if ($field->getName() !== 'external_id' || $field->getTargetEntityTypeId() !== 'crm_case') {
30    return;
31
32  }
33  $crm_case_bundles = \Drupal::entityTypeManager()->getStorage('crm_case_type')->loadMultiple();
34  $options = [];
35  foreach ($crm_case_bundles as $crm_case_bundle) {
36    $options[$crm_case_bundle->id()] = $crm_case_bundle->label();
37  }
38
39  $form['third_party_settings']['external_id'] = [
40    '#type' => 'details',
41    '#title' => t('External Id settings'),
42    '#open' => TRUE,
43    '#group' => 'advanced',
44    '#weight' => 100,
45  ];
46
47  $form['third_party_settings']['external_id']['bundles'] = [
48    '#type' => 'checkboxes',
49    '#title' => t('Bundles'),
50    '#options' => $options,
51    '#default_value' => $field->getThirdPartySetting('external_id', 'bundles', []),
52  ];
53  $form['third_party_settings']['external_id']['negate'] = [
54    '#type' => 'radios',
55    '#title' => t('Negate'),
56    '#options' => [
57      0 => t('Include'),
58      1 => t('Exclude'),
59    ],
60    '#default_value' => $field->getThirdPartySetting('external_id', 'negate', 0),
61  ];
62
63  $form['#validate'][] = 'crm_case_external_id_form_field_config_form_validate';
64}
65
66/**
67 * Validation for 'field_config_edit_form'.
68 */
69function crm_case_external_id_form_field_config_form_validate(&$form, FormStateInterface $form_state) {
70
71  $third_party_settings = $form_state->getValue('third_party_settings');
72  $bundles = $third_party_settings['external_id']['bundles'];
73  $bundles = array_filter($bundles);
74  if (empty($bundles)) {
75    return;
76  }
77
78  $field = $form_state->getFormObject()->getEntity();
79  $bundle = $field->getTargetBundle();
80  $in_array = in_array($bundle, $bundles);
81  $negate = $third_party_settings['external_id']['negate'];
82
83  if ($negate && $in_array) {
84    $form_state->setErrorByName('third_party_settings][external_id][bundles', t('The bundle %bundle is selected and negate is enabled.', ['%bundle' => $bundle]));
85  }
86  elseif (!$negate && !$in_array) {
87    $form_state->setErrorByName('third_party_settings][external_id][bundles', t('The bundle %bundle is not selected and negate is disabled.', ['%bundle' => $bundle]));
88  }
89
90}