1
|
<?php
|
2
|
|
3
|
/**
|
4
|
* @file
|
5
|
* Install, update and uninstall functions for the computed field module.
|
6
|
*/
|
7
|
|
8
|
/**
|
9
|
* Implements of hook_field_schema().
|
10
|
*/
|
11
|
function computed_field_field_schema($field) {
|
12
|
if ($field['type'] == 'computed') {
|
13
|
$settings = $field['settings'];
|
14
|
|
15
|
if ($settings['store']) {
|
16
|
$columns = array('value' => array());
|
17
|
|
18
|
// Hardcoded 'longtext' settings
|
19
|
if ($settings['database']['data_type'] == 'longtext') {
|
20
|
$columns['value']['type'] = 'text';
|
21
|
$columns['value']['size'] = 'big';
|
22
|
}
|
23
|
else {
|
24
|
$columns['value']['type'] = isset($settings['database']['data_type']) ? $settings['database']['data_type'] : 'varchar';
|
25
|
}
|
26
|
// 'text' and 'varchar' fields get length settings
|
27
|
if ($settings['database']['data_type'] == 'text' || $settings['database']['data_type'] == 'varchar') {
|
28
|
$columns['value']['length'] = isset($settings['database']['data_length']) ? $settings['database']['data_length'] : 32;
|
29
|
}
|
30
|
// 'int' and 'float' fields get size settings
|
31
|
if ($settings['database']['data_type'] == 'int' || $settings['database']['data_type'] == 'float') {
|
32
|
$columns['value']['size'] = isset($settings['database']['data_size']) ? $settings['database']['data_size'] : 'normal';
|
33
|
}
|
34
|
// 'decimal' fields get precision and scale settings
|
35
|
if ($settings['database']['data_type'] == 'numeric') {
|
36
|
$columns['value']['precision'] = isset($settings['database']['data_precision']) ? $settings['database']['data_precision'] : 10;
|
37
|
$columns['value']['scale'] = isset($settings['database']['data_scale']) ? $settings['database']['data_scale'] : 2;
|
38
|
}
|
39
|
// Add 'not null' settings
|
40
|
$columns['value']['not null'] = isset($settings['database']['data_not_NULL']) ? $settings['database']['data_not_NULL'] : TRUE;
|
41
|
// Add default values if set
|
42
|
if ($settings['database']['data_default'] != '') {
|
43
|
$columns['value']['default'] = $settings['database']['data_default'];
|
44
|
}
|
45
|
// Add a simple index on the data if requested (except 'text' fields)
|
46
|
if ($settings['database']['data_index'] && $columns['value']['type'] != 'text') {
|
47
|
$indexes = array('value' => array('value'));
|
48
|
}
|
49
|
}
|
50
|
}
|
51
|
|
52
|
if (isset($columns) && isset($indexes)) {
|
53
|
return array(
|
54
|
'columns' => $columns,
|
55
|
'indexes' => $indexes,
|
56
|
);
|
57
|
}
|
58
|
elseif (isset($columns)) {
|
59
|
return array(
|
60
|
'columns' => $columns,
|
61
|
);
|
62
|
}
|
63
|
else return;
|
64
|
}
|