Skip to content
GitLab
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in
Toggle navigation
Menu
Open sidebar
WCMS
uw_ct_profile
Commits
461fd31f
Commit
461fd31f
authored
Feb 23, 2021
by
Igor Biki
Browse files
ISTWCMS-4586: Adding ajax on form alter for profile content type.
parent
9427ca94
Changes
1
Hide whitespace changes
Inline
Side-by-side
uw_ct_profile.module
0 → 100644
View file @
461fd31f
<?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'
,
];
}
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment