Code Coverage |
||||||||||
Lines |
Functions and Methods |
Classes and Traits |
||||||||
Total | |
17.39% |
8 / 46 |
|
0.00% |
0 / 7 |
CRAP | n/a |
0 / 0 |
|
template_preprocess_crm_contact | |
0.00% |
0 / 3 |
|
0.00% |
0 / 1 |
6 | |||
template_preprocess_crm_relationship | |
0.00% |
0 / 3 |
|
0.00% |
0 / 1 |
6 | |||
crm_form_block_form_alter | |
0.00% |
0 / 1 |
|
0.00% |
0 / 1 |
2 | |||
crm_form_crm_contact_type_edit_form_alter | |
0.00% |
0 / 20 |
|
0.00% |
0 / 1 |
6 | |||
crm_form_crm_contact_type_edit_form_submit | |
0.00% |
0 / 4 |
|
0.00% |
0 / 1 |
2 | |||
crm_crm_contact_access | |
53.85% |
7 / 13 |
|
0.00% |
0 / 1 |
7.46 | |||
crm_modules_installed | |
50.00% |
1 / 2 |
|
0.00% |
0 / 1 |
2.50 |
1 | <?php |
2 | |
3 | /** |
4 | * @file |
5 | * Provides a contact entity type. |
6 | */ |
7 | |
8 | use Drupal\Core\Render\Element; |
9 | use Drupal\Core\Form\FormStateInterface; |
10 | use Drupal\name\Entity\NameFormat; |
11 | use Drupal\Core\Access\AccessResult; |
12 | use Drupal\Core\Entity\EntityInterface; |
13 | use Drupal\Core\Session\AccountInterface; |
14 | |
15 | /** |
16 | * Prepares variables for contact templates. |
17 | * |
18 | * Default template: crm-contact.html.twig. |
19 | * |
20 | * @param array $variables |
21 | * An associative array containing: |
22 | * - elements: An associative array containing the contact information and any |
23 | * fields attached to the entity. |
24 | * - attributes: HTML attributes for the containing element. |
25 | */ |
26 | function template_preprocess_crm_contact(array &$variables) { |
27 | $variables['view_mode'] = $variables['elements']['#view_mode']; |
28 | foreach (Element::children($variables['elements']) as $key) { |
29 | $variables['content'][$key] = $variables['elements'][$key]; |
30 | } |
31 | } |
32 | |
33 | /** |
34 | * Prepares variables for crm relationship templates. |
35 | * |
36 | * Default template: crm-relationship.html.twig. |
37 | * |
38 | * @param array $variables |
39 | * An associative array containing: |
40 | * - elements: An associative array containing the relationship and any |
41 | * fields attached to the entity. |
42 | * - attributes: HTML attributes for the containing element. |
43 | */ |
44 | function template_preprocess_crm_relationship(array &$variables) { |
45 | $variables['view_mode'] = $variables['elements']['#view_mode']; |
46 | foreach (Element::children($variables['elements']) as $key) { |
47 | $variables['content'][$key] = $variables['elements'][$key]; |
48 | } |
49 | } |
50 | |
51 | /** |
52 | * Implements hook_form_FORM_ID_alter(). |
53 | */ |
54 | function crm_form_block_form_alter(&$form, FormStateInterface $form_state) { |
55 | $form['#attached']['library'][] = 'crm/crm.block'; |
56 | } |
57 | |
58 | /** |
59 | * Implements hook_form_FORM_ID_alter(). |
60 | */ |
61 | function crm_form_crm_contact_type_edit_form_alter(&$form, FormStateInterface $form_state) { |
62 | $entity = $form_state->getFormObject()->getEntity(); |
63 | if ($entity->id() != 'person') { |
64 | return; |
65 | } |
66 | |
67 | $format_options = NameFormat::loadMultiple(); |
68 | $format_options = array_map(function ($format) { |
69 | return $format->label(); |
70 | }, $format_options); |
71 | |
72 | $form['name'] = [ |
73 | '#type' => 'details', |
74 | '#title' => t('Name'), |
75 | '#group' => 'additional_settings', |
76 | ]; |
77 | |
78 | $form['name']['name_format'] = [ |
79 | '#type' => 'select', |
80 | '#title' => t('Name Format'), |
81 | '#description' => t('Select the format for displaying names for this contact type.'), |
82 | '#options' => $format_options, |
83 | '#default_value' => $entity->getThirdPartySetting('crm', 'name_format', 'default'), |
84 | ]; |
85 | $form['actions']['submit']['#submit'][] = 'crm_form_crm_contact_type_edit_form_submit'; |
86 | } |
87 | |
88 | /** |
89 | * Submit handler for the contact type edit form. |
90 | */ |
91 | function crm_form_crm_contact_type_edit_form_submit(array &$form, FormStateInterface $form_state) { |
92 | $name_format = $form_state->getValue('name_format'); |
93 | // Third party settings. |
94 | $entity = $form_state->getFormObject()->getEntity(); |
95 | $entity->setThirdPartySetting('crm', 'name_format', $name_format); |
96 | $entity->save(); |
97 | } |
98 | |
99 | /** |
100 | * Implements hook_crm_contact_access(). |
101 | */ |
102 | function crm_crm_contact_access(EntityInterface $entity, $operation, AccountInterface $account) { |
103 | if (!in_array($operation, ['view', 'update'])) { |
104 | return AccessResult::neutral(); |
105 | } |
106 | $query = \Drupal::entityQuery('crm_user_contact'); |
107 | $query->condition('crm_contact', $entity->id()); |
108 | $query->condition('user', $account->id()); |
109 | $result = $query->accessCheck(FALSE)->execute(); |
110 | if (!$result) { |
111 | return AccessResult::neutral(); |
112 | } |
113 | |
114 | if ($operation == 'view') { |
115 | return AccessResult::allowedIfHasPermission($account, 'view mapped crm_contact'); |
116 | } |
117 | elseif ($operation == 'update') { |
118 | return AccessResult::allowedIfHasPermission($account, 'edit mapped crm_contact'); |
119 | } |
120 | |
121 | return AccessResult::neutral(); |
122 | } |
123 | |
124 | /** |
125 | * Implements hook_modules_installed(). |
126 | */ |
127 | function crm_modules_installed(array $modules) { |
128 | if (in_array('crm_field', $modules)) { |
129 | \Drupal::service('module_installer')->install(['crm_field']); |
130 | } |
131 | } |