/
addressfield_link.module
93 lines (89 loc) · 3.16 KB
/
addressfield_link.module
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
<?php
/**
* Implements hook_ctools_plugin_directory().
*/
function addressfield_link_ctools_plugin_directory($module, $plugin) {
if ($module == 'addressfield') {
return 'plugins/' . $plugin;
}
}
/**
* Implements hook_field_attach_presave
* Store additional address fields serialized in addressfield data column
*/
function addressfield_link_field_attach_presave($entity_type, $entity) {
$addressfields = addressfield_link_addressfield_types();
foreach($addressfields as $addressfield) {
if (isset($entity->$addressfield)){
$data = array();
$default_fields = array_keys(addressfield_default_values());
$default_fields[] = 'element_key';
$language = isset($entity->language) ? $entity->language : LANGUAGE_NONE;
foreach($entity->{$addressfield}[$language] as $delta => $fieldset) {
$data = array();
foreach ($fieldset as $field_key => $field_value) {
// Compare fields with addressfield default fields and store any additional fields in data
if (!in_array($field_key, $default_fields)){
$data[$field_key] = $field_value; // Store additional field value
}
}
if(!empty($data)){
$entity->{$addressfield}[$language][$delta]['data'] = serialize($data);
}
}
}
}
}
/**
* Implements hook_field_attach_load
* Load and set additional addressfield field values from serialized data column
*/
function addressfield_link_field_attach_load($entity_type, $entities, $age, $options){
$addressfields = addressfield_link_addressfield_types();
foreach($entities as $key => $entity) {
foreach($addressfields as $addressfield) {
if (isset($entity->{$addressfield})) {
$language = isset($entity->language) ? $entity->language : LANGUAGE_NONE;
if (!isset($entity->{$addressfield})) continue;
foreach($entity->{$addressfield}[$language] as $delta => $fieldset) {
if (!empty($entity->{$addressfield}[$language][$delta]['data'])){
// Unserialize data, else skip if string
if ($data = unserialize($entity->{$addressfield}[$language][$delta]['data'])) {
foreach($data as $field_key => $field_value){
// Store unserialized data values in additional fields
$entities[$key]->{$addressfield}[$language][$delta][$field_key] = $field_value;
}
}
}
}
}
}
}
}
/**
* Returns an array of the field names of any addressfields.
*/
function addressfield_link_addressfield_types() {
if (!isset($addressfields)) {
static $addressfields;
$result = db_query("SELECT field_name FROM {field_config} WHERE type = 'addressfield'");
$addressfields = array();
foreach($result as $row) {
$addressfields[] = $row->field_name;
}
}
return $addressfields;
}
function _addressfield_link_render_address(&$format) {
$address = $format['#address'];
$format['link_block'] = array(
'#title' => t('Link'),
'#type' => 'addressfield_container',
'link' => array(
'#title' => t('Link'),
'#size' => 15,
'#attributes' => array('class' => array('address-link')),
'#tag' => 'span',
),
);
}