function taxonomy_revision_entity_diff in Taxonomy revision 7
Implements hook_entity_diff().
This function compares core taxonomy term properties. This is currently limited to:
- name: The title of term.
- description: The description of the term.
File
- ./
taxonomy_revision.module, line 150 - This is the main module file for the Taxonomy revision module.
Code
function taxonomy_revision_entity_diff($old_term, $new_term, $context) {
$result = array();
if ($context['entity_type'] == 'taxonomy_term') {
// The wrappers are created for each field even though there are no
// differences for the title (name) for example.
$taxonomy_term_properties = entity_get_property_info('taxonomy_term');
$new_term_wrapper = entity_metadata_wrapper('taxonomy_term', $new_term);
$old_term_wrapper = entity_metadata_wrapper('taxonomy_term', $old_term);
// We unset the entity id property because we don't want to diff it.
unset($taxonomy_term_properties['properties']['tid']);
$old_term_rendered = taxonomy_term_view($old_term);
$new_term_rendered = taxonomy_term_view($new_term);
foreach ($taxonomy_term_properties['properties'] as $property_name => $property) {
if (empty($property['vocabulary'])) {
}
if (empty($property['computed'])) {
// Not taking into much consideration how the settings for the node are made,
// we create our settings similarly for each of our fields.
$result[$property_name] = array(
'#name' => $property['label'],
'#states' => array(),
'#weight' => -5,
'#settings' => array(
'compare_format' => 0,
'markdown' => 'drupal_html_to_text',
'line_counter' => '',
'compare_summary' => 0,
'show_header' => 1,
),
);
foreach ($context['states'] as $state) {
// We need use the raw() not the value() function (Entity Wrapper).
// The value() includes html tags which we don't need.
// This however doesn't recognize some values correctly, but those values are not relevant for our task.
$old_property = $old_term_wrapper->{$property_name}
->raw();
$new_property = $new_term_wrapper->{$property_name}
->raw();
// The Entity Wrapper generates objects.
if (!is_object($old_property) && !is_object($new_property)) {
switch ($state) {
case 'rendered':
$result[$property_name]['#states'][$state] = array(
'#old' => isset($old_term_rendered[$property_name]) ? drupal_render($old_term_rendered[$property_name]) : $old_term_rendered->{$property_name}
->raw(),
'#new' => isset($new_term_rendered[$property_name]) ? drupal_render($new_term_rendered[$property_name]) : $new_term_rendered->{$property_name}
->raw(),
);
break;
// In case of raw_plain (taxonomy_revision only), for the node_revision there is only raw,
// We create our array efficiently for our diff (module) functions to identify the parameters correctly.
case 'raw_plain':
$result[$property_name]['#states']['raw'] = array(
'#old' => $old_property,
'#new' => $new_property,
);
break;
// Anything out of the ordinary will be considered : raw.
default:
$result[$property_name]['#states'][$state] = array(
'#old' => $old_property,
'#new' => $new_property,
);
break;
}
}
}
}
}
}
return $result;
}