function support_ticket_entity_update in Support Ticketing System 8
Implements hook_entity_update().
Parameters
object $support_ticket: The support ticket entity object.
File
- modules/
support_ticket/ support_ticket.module, line 256 - Enables use of support tickets with optional time tracking.
Code
function support_ticket_entity_update($support_ticket) {
// Determines what fields have changed when the support ticket is updated.
if ($support_ticket instanceof SupportTicketInterface && !empty($support_ticket->original)) {
$type = SupportTicketType::load($support_ticket
->bundle());
if (!($field_name = _support_ticket_comment_diff_field($type
->id()))) {
// There's no field to write revision diffs into, so skip calculating a diff.
return;
}
$field_storage = FieldStorageConfig::loadByName('support_ticket', $field_name);
$comment_type = $field_storage
->getSetting('comment_type');
if (!($diff_revision_changes_field = _support_ticket_comment_diff_revision_changes($type
->id(), $comment_type))) {
// There's no field to write revision diffs into, so skip calculating a diff.
return;
}
// Load some variables we need to generate a properly formatted diff.
$config = \Drupal::configFactory()
->get('support_ticket.settings');
$filter_format = $config
->get('support_ticket_type_settings.' . $type
->id() . '.filter_format');
// Get a RevisionController to generate a diff.
$diffFormatter = \Drupal::service('diff.diff.formatter');
$dateFormatter = \Drupal::service('date.formatter');
$pluginManager = \Drupal::service('plugin.manager.diff.builder');
$diffEntityParser = \Drupal::service('diff.entity_parser');
$revisionController = new \Drupal\support_ticket\Controller\SupportTicketRevisionController($diffFormatter, $dateFormatter, $pluginManager, $diffEntityParser);
// Compare the original entity with the current revision.
$original = $support_ticket->original;
$fields = $revisionController
->compareRevisions($original, $support_ticket);
$diff_rows = array();
// Format the differences as rows in a table.
foreach ($fields as $field) {
$field_label_row = '';
if (!empty($field['#name'])) {
$field_label_row = array(
'data' => t('Changes to %name', array(
'%name' => $field['#name'],
)),
'colspan' => 4,
'class' => array(
'field-name',
),
);
}
$field_diff_rows = _support_ticket_get_rows($field['#states']['raw']['#left'], $field['#states']['raw']['#right']);
// Add the field label to the table only if there are changes to that field.
if (!empty($field_diff_rows) && !empty($field_label_row)) {
$diff_rows[] = array(
$field_label_row,
);
}
// Add field diff rows to the table rows.
$diff_rows = array_merge($diff_rows, $field_diff_rows);
}
// Create our render array.
$build['diff'] = array(
'#type' => 'table',
'#rows' => $diff_rows,
'#empty' => t('No visible changes'),
'#attributes' => array(
'class' => array(
'diff',
),
),
);
// Store generated diff as a comment.
$diff_comment = array(
'cid' => NULL,
'uid' => \Drupal::currentUser()
->id(),
'entity_id' => $support_ticket
->id(),
'entity_type' => 'support_ticket',
'field_name' => $field_name,
'pid' => 0,
'comment_body' => array(
'value' => '<em>' . t('Automatically generated:') . '</em>',
'format' => $filter_format,
),
$diff_revision_changes_field => array(
'value' => \Drupal::service('renderer')
->renderPlain($build['diff']),
'format' => $filter_format,
),
'comment_type' => $comment_type,
);
// Store revision ID if the field exists.
if ($diff_revision_reference_field = _support_ticket_comment_diff_revision_reference($type
->id(), $comment_type)) {
$diff_comment[$diff_revision_reference_field] = $support_ticket
->getRevisionId();
}
entity_create('comment', $diff_comment)
->save();
}
}