BulkUpdateFields.php in Bulk Update Fields 8
File
src/BulkUpdateFields.php
View source
<?php
namespace Drupal\bulk_update_fields;
class BulkUpdateFields {
public static function updateFields($entities, $fields, &$context) {
$message = 'Updating Fields...';
$results_entities = [];
$results_fields = [];
$update = FALSE;
foreach ($entities as $entity) {
foreach ($fields as $field_name => $field_value) {
if ($entity
->hasField($field_name)) {
if ($field_value == $field_name) {
continue;
}
if (isset($field_value['target_id'][0])) {
$field_value = $field_value['target_id'];
}
if (isset($field_value[0]['target_id']) && isset($field_value['add_more'])) {
unset($field_value['add_more']);
}
if (isset($field_value['value'])) {
$field_value = $field_value['value'];
}
$entity
->get($field_name)
->setValue($field_value);
$update = TRUE;
if (!in_array($field_name, $results_fields)) {
$results_fields[] = $field_name;
}
}
}
if ($update) {
$entity
->setNewRevision();
$entity
->save();
$results_entities[] = $entity
->id();
}
}
$context['message'] = $message;
$context['results']['results_entities'] = $results_entities;
$context['results']['results_fields'] = $results_fields;
}
public static function bulkUpdateFieldsFinishedCallback($success, $results, $operations) {
if ($success) {
$message_field = \Drupal::translation()
->formatPlural(count($results['results_fields']), 'One field processed', '@count fields processed');
$message_entity = \Drupal::translation()
->formatPlural(count($results['results_entities']), 'One entity', '@count entities');
$message = $message_field . ' on ' . $message_entity;
}
else {
$message = t('Finished with an error.');
}
drupal_set_message($message);
}
}