1 |
31a5a6d6
|
Assos Assos
|
<?php
|
2 |
|
|
|
3 |
|
|
/**
|
4 |
|
|
* @file
|
5 |
|
|
* Provide diff field functions for the Field collection module.
|
6 |
|
|
*/
|
7 |
|
|
|
8 |
|
|
/**
|
9 |
|
|
* Diff field callback for parsing Field collection fields comparative values.
|
10 |
|
|
*/
|
11 |
|
|
function field_collection_field_diff_view($items, $context) {
|
12 |
|
|
$diff_items = array();
|
13 |
|
|
foreach ($items as $delta => $item) {
|
14 |
|
|
$diff_items[$delta] = field_collection_field_render_revision($item, $context);
|
15 |
|
|
}
|
16 |
|
|
return $diff_items;
|
17 |
|
|
}
|
18 |
|
|
|
19 |
|
|
/**
|
20 |
|
|
* Renders a field collection fields revision.
|
21 |
|
|
*/
|
22 |
|
|
function field_collection_field_render_revision($item, $context) {
|
23 |
|
|
$entity_type = 'field_collection_item';
|
24 |
|
|
$bundle_name = $context['field']['field_name'];
|
25 |
|
|
$view_mode = $context['view_mode'];
|
26 |
|
|
$entity = entity_revision_load($entity_type, $item['revision_id']);
|
27 |
|
|
|
28 |
|
|
$field_context = $context;
|
29 |
|
|
$field_context['entity_type'] = $entity_type;
|
30 |
|
|
$field_context['bundle'] = $bundle_name;
|
31 |
|
|
$field_context['entity'] = $entity;
|
32 |
|
|
|
33 |
|
|
// Some fields piggy back the display settings, so we need to fake these by
|
34 |
|
|
// ensuring that the field mode is always set.
|
35 |
|
|
if (empty($view_mode)) {
|
36 |
|
|
$field_context['custom_settings'] = FALSE;
|
37 |
|
|
}
|
38 |
|
|
$view_mode_settings = field_view_mode_settings($entity_type, $bundle_name);
|
39 |
|
|
$actual_mode = (!empty($view_mode_settings[$view_mode]['custom_settings'])) ? $view_mode : 'default';
|
40 |
|
|
if (!isset($field_context['custom_settings'])) {
|
41 |
|
|
$field_context['custom_settings'] = $actual_mode && $actual_mode == $view_mode;
|
42 |
|
|
}
|
43 |
|
|
|
44 |
|
|
$instances = field_info_instances($entity_type, $field_context['bundle']);
|
45 |
|
|
usort($instances, '_field_collection_sort_items');
|
46 |
|
|
|
47 |
|
|
$result = array();
|
48 |
|
|
foreach ($instances as $instance) {
|
49 |
|
|
// Any view mode is supported in relation to hiding fields, but only if selected.
|
50 |
|
|
if ($actual_mode && $instance['display'][$actual_mode]['type'] == 'hidden') {
|
51 |
|
|
continue;
|
52 |
|
|
}
|
53 |
|
|
|
54 |
|
|
$field_name = $instance['field_name'];
|
55 |
|
|
$field = field_info_field($field_name);
|
56 |
|
|
|
57 |
|
|
// We provide a loose check on the field access.
|
58 |
|
|
if (field_access('view', $field, $entity_type) || field_access('edit', $field, $entity_type)) {
|
59 |
|
|
$langcode = field_language($entity_type, $entity, $field_name);
|
60 |
|
|
$field_context['language'] = $langcode;
|
61 |
|
|
$field_context['field'] = $field;
|
62 |
|
|
$field_context['instance'] = $instance;
|
63 |
|
|
$field_context['settings'] = diff_get_field_settings($field_context);
|
64 |
|
|
$field_context['display'] = $instance['display'][$actual_mode];
|
65 |
|
|
|
66 |
|
|
$func = $field['module'] . '_field_diff_view';
|
67 |
|
|
if (!function_exists($func)) {
|
68 |
|
|
$func = 'diff_field_diff_view';
|
69 |
|
|
}
|
70 |
|
|
|
71 |
|
|
if (!empty($entity->{$field_name}[$langcode])) {
|
72 |
|
|
$raw_values = $func($entity->{$field_name}[$langcode], $field_context);
|
73 |
|
|
$values = array();
|
74 |
|
|
foreach ($raw_values as $raw_value) {
|
75 |
|
|
$values[] = is_array($raw_value) ? implode(", ", $raw_value) : $raw_value;
|
76 |
|
|
}
|
77 |
|
|
|
78 |
|
|
$result[] = check_plain($instance['label'] . ': ' . implode(", ", $values));
|
79 |
|
|
}
|
80 |
|
|
}
|
81 |
|
|
}
|
82 |
|
|
|
83 |
|
|
return $result;
|
84 |
|
|
}
|
85 |
|
|
|
86 |
|
|
/**
|
87 |
|
|
* Sort function for items order.
|
88 |
|
|
*/
|
89 |
|
|
function _field_collection_sort_items($a, $b) {
|
90 |
|
|
$a_weight = (!empty($a['widget']['weight']) ? $a['widget']['weight'] : 0);
|
91 |
|
|
$b_weight = (!empty($b['widget']['weight']) ? $b['widget']['weight'] : 0);
|
92 |
|
|
return $a_weight - $b_weight;
|
93 |
|
|
} |