function feeds_para_mapper_feeds_targets_alter in Feeds Paragraphs 8
Implements hook_feeds_targets_alter().
Parameters
\Drupal\feeds\FieldTargetDefinition[] $targets:
File
- ./
feeds_para_mapper.module, line 54 - Allows mapping to Paragraphs fields.
Code
function feeds_para_mapper_feeds_targets_alter(&$targets) {
// Collect Paragraphs fields targets to remove from mappings:
$toRemove = [];
foreach ($targets as $name => $target) {
if ($target
->getPluginId() === "paragraphs") {
$field = $target
->getFieldDefinition();
if (!isset($field->fpm_removed)) {
$toRemove[] = $target;
}
}
}
if (empty($toRemove)) {
return;
}
// Search for the feed type that contains the above Paragraphs targets:
$entityTypeManager = Drupal::service('entity_type.manager');
$storage = $entityTypeManager
->getStorage('feeds_feed_type');
$feedTypes = $storage
->loadMultiple();
$firstTarget = $toRemove[0];
$feedType = array_filter($feedTypes, function ($item) use ($firstTarget) {
$mappings = $item
->getMappings();
foreach ($mappings as $mapping) {
if ($mapping['target'] === $firstTarget
->getFieldDefinition()
->getName()) {
return $item;
}
}
return false;
});
$feedType = reset($feedType);
if (!$feedType) {
return;
}
// Remove the default Paragraphs mapping:
$mappings = $feedType
->getMappings();
$changed = false;
foreach ($toRemove as $target) {
$field = $target
->getFieldDefinition();
foreach ($mappings as $delta => $mapping) {
if ($mapping['target'] === $field
->getName()) {
$feedType
->removeMapping($delta);
$changed = true;
$field->fpm_removed = TRUE;
}
}
}
if ($changed) {
$messenger = Drupal::messenger();
$messenger
->addWarning(t('Mapping has been updated, please refresh the page.'));
$feedType
->save();
}
}