function gc_gc_process_choice_radio_field in GatherContent 8.3
Same name and namespace in other branches
- 8 gathercontent.module \gc_gc_process_choice_radio_field()
Processing function for radio type of field.
Parameters
\Drupal\node\NodeInterface $node: Object of node.
string $local_field_name: Local field name.
bool $is_translatable: Indicator if node is translatable.
string $language: Language of translation if applicable.
array $options: Array of options.
1 call to gc_gc_process_choice_radio_field()
- gc_gc_process_content_pane in ./
gathercontent.module - Processing function for content panes.
File
- ./
gathercontent.module, line 631 - Main module file for GatherContent module.
Code
function gc_gc_process_choice_radio_field(NodeInterface &$node, $local_field_name, $is_translatable, $language, array $options) {
$field = FieldConfig::loadByName('node', $node
->bundle(), $local_field_name);
foreach ($options as $option) {
if (!$option->selected) {
continue;
}
if (isset($option->value)) {
if (empty($option->value)) {
continue;
}
// Dealing with "Other" option.
if ($field
->getType() === 'entity_reference') {
// Load vocabulary id.
if (!empty($field
->getSetting('handler_settings')['auto_create_bundle'])) {
$vid = $field
->getSetting('handler_settings')['auto_create_bundle'];
}
else {
$handler_settings = $field
->getSetting('handler_settings');
$handler_settings = reset($handler_settings);
$vid = array_shift($handler_settings);
}
// Prepare confitions.
$condition_array = [
'name' => $option->value,
'vid' => $vid,
];
if ($is_translatable && $language !== LanguageInterface::LANGCODE_NOT_SPECIFIED) {
$condition_array['langcode'] = $language;
}
$terms = \Drupal::entityTypeManager()
->getStorage('taxonomy_term')
->loadByProperties($condition_array);
/** @var \Drupal\taxonomy\Entity\Term $term */
$term = array_shift($terms);
if (empty($term)) {
$term = Term::create([
'vid' => $vid,
'name' => $option->value,
'langcode' => $language,
]);
$term
->save();
}
if ($is_translatable && $node
->hasTranslation($language)) {
$node
->getTranslation($language)
->set($local_field_name, $term
->id());
}
else {
$node
->set($local_field_name, $term
->id());
}
}
else {
if ($is_translatable) {
$node
->getTranslation($language)->{$local_field_name}->value = $option->value;
}
else {
$node->{$local_field_name}->value = $option->value;
}
}
}
else {
// Dealing with predefined options.
if ($field
->getType() === 'entity_reference') {
$terms = \Drupal::entityTypeManager()
->getStorage('taxonomy_term')
->loadByProperties([
'gathercontent_option_ids' => $option->name,
]);
/** @var \Drupal\taxonomy\Entity\Term $term */
$term = array_shift($terms);
if (!empty($term)) {
if ($is_translatable) {
$node
->getTranslation($language)
->set($local_field_name, $term
->id());
}
else {
$node
->set($local_field_name, $term
->id());
}
}
}
else {
if ($is_translatable) {
$node
->getTranslation($language)->{$local_field_name}->value = $option->name;
}
else {
$node->{$local_field_name}->value = $option->name;
}
}
}
}
}