Commit 461fd31f authored by Igor Biki's avatar Igor Biki
Browse files

ISTWCMS-4586: Adding ajax on form alter for profile content type.

parent 9427ca94
<?php
/**
* @file
* Profile module file.
*/
use Drupal\Core\Form\FormStateInterface;
use Drupal\node\Entity\Node;
/**
* Implements hook_form_FORM_ID_alter().
*/
function uw_ct_profile_form_node_uw_ct_profile_form_alter(&$form, FormStateInterface $form_state, $form_id): void {
$form['field_uw_ct_profile_contact']['widget'][0]['target_id']['#ajax'] = [
'callback' => '_uw_ct_profile_node_form_callback',
'event' => 'change',
'wrapper' => $form['#id'],
];
if ($form['field_uw_ct_profile_contact']['widget'][0]['target_id']) {
foreach (_uw_ct_profile_alter_fields() as $profile_field => $contact_field) {
// $form[$profile_field]['widget'][0]['value']['#value'] = $contact->$contact_field->value;
$form[$profile_field]['widget'][0]['value']['#attributes']['readonly'] = 'readonly';
}
}
}
/**
* Implements hook_form_FORM_ID_EDIT_FORM_alter().
*/
function uw_ct_profile_form_node_uw_ct_profile_edit_form_alter(&$form, FormStateInterface $form_state, $form_id): void {
uw_ct_profile_form_node_uw_ct_profile_form_alter($form, $form_state, $form_id);
}
/**
* Ajax call back function used in form alter.
*/
function _uw_ct_profile_node_form_callback(array &$form, FormStateInterface $form_state): array {
$contact_nid = $form_state->getValue('field_uw_ct_profile_contact')[0]['target_id'];
foreach (_uw_ct_profile_alter_fields() as $profile_field => $contact_field) {
if ($contact_nid && is_numeric($contact_nid) && $contact = Node::load($contact_nid)) {
// Copy value from the contact associated with this profile node.
$form[$profile_field]['widget'][0]['value']['#value'] = $contact->$contact_field->value;
// Set read only flag. Can't use #disabled (#states) since disabled fields
// are not sent with submit (omitted). Validation will fail on req fields.
$form[$profile_field]['widget'][0]['value']['#attributes']['readonly'] = 'readonly';
}
else {
// Clear the read only flag, allow field to be edited.
unset($form[$profile_field]['widget'][0]['value']['#attributes']['readonly']);
}
}
return $form;
}
/**
* Fields to sync.
*
* @return string[]
* Mapping of fields profile => contact.
*/
function _uw_ct_profile_alter_fields(): array {
return [
'title' => 'title',
'field_uw_ct_profile_sort_name' => 'field_uw_ct_contact_sort_name',
'field_uw_ct_profile_affiliation' => 'field_uw_ct_contact_affiliation',
'field_uw_ct_profile_title' => 'field_uw_ct_contact_title',
];
}
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment