I am trying to pragmatically set the revision log message after values of certain fields are changed (thus if a user has edits certain fields). More information is in the code comments
function home_hub1_form_alter(&$ form, FormStateInterface $ form_state, $ form_id){ // Hide Revisions log message text box $ form['revision_log_message']['#access']= FALSE; //set revision check box to false since we are creating a revision progeammatically $ form['new_revision'] = array( '#type' => 'hidden', '#value' => FALSE ); // monitor every field if its from edit if ($ form_id == 'device_entity_edit_form'){ $ form['actions']['submit']['#submit'][] = 'home_hub1_form_device_entity_edit_submit'; } } function home_hub1_form_device_entity_edit_submit(array &$ form, FormStateInterface $ form_state){ $ form_state->setTemporaryValue('entity_validated', TRUE); //check if a field has changed and if it has write a revision log message if ($ form['field_city']['widget']['0']['value']['#value'] != $ form['field_city']['widget']['0']['value']['#default_value']) { $ message = 'CITY changed from: ' . $ form['field_city']['widget']['0']['value']['#default_value'] . ' to: ' . $ form['field_city']['widget']['0']['value']['#value']; $ form_state->setValue('revision_log_message', $ message); }
I am getting the following error: Error: Cannot unset string offsets in Drupal\Core\Field\WidgetBase->extractFormValues()
I also tried to get the node object so that i create a revision directly from it like below:
function home_hub1_form_device_entity_edit_submit(array &$ form, FormStateInterface $ form_state){ $ node = $ form_state->getFormObject()->getEntity(); //check if a field has changed and if it has write a revision log message if ($ form['field_city']['widget']['0']['value']['#value'] != $ form['field_city']['widget']['0']['value']['#default_value']) { $ message = 'CITY changed from: ' . $ form['field_city']['widget']['0']['value']['#default_value'] . ' to: ' . $ form['field_city']['widget']['0']['value']['#value']; $ node->setRevisionUserId(\Drupal::currentUser()->id()); $ node->setRevisionCreationTime(REQUEST_TIME); $ node->setNewRevision(TRUE); // enabling revision for the entity save. $ node->setRevisionLogMessage($ message);
}
How can I create a revision after form submission?