function scald_index_build_node_index in scald_index 7
Builds index for a given node.
Gather all atoms from the node fields and insert index data for each of them.
Parameters
object $node: The node object.
3 calls to scald_index_build_node_index()
- scald_index_node_insert in ./
scald_index.module - Implements hook_node_insert().
- scald_index_node_update in ./
scald_index.module - Implements hook_node_update().
- scald_index_rebuild_run in ./
scald_index.module - Rebuilds the index for a batch of nodes.
File
- ./
scald_index.module, line 130
Code
function scald_index_build_node_index($node) {
// If a node property is not set in the node object when node_save() is
// called, the old value from $node->original is used.
$status = NULL;
$type = NULL;
if (!empty($node->original)) {
$status = (int) (!empty($node->status) || !isset($node->status) && !empty($node->original->status));
$type = $node->original->type;
}
else {
$status = (int) (!empty($node->status));
$type = $node->type;
}
// Collect a unique list of all the atom ids from all node fields.
$sid_all = array();
$instances = field_info_instances('node', $node->type);
foreach ($instances as $field_name => $instance) {
$field = field_info_field($field_name);
$analyse_field = FALSE;
// Detect atom in reference fields.
if ($field['module'] == 'atom_reference' && $field['storage']['type'] == 'field_sql_storage') {
$analyse_field = TRUE;
}
// Detect atoms embedded in text fields.
if (isset($instance['settings']['mee_enabled']) && $instance['settings']['mee_enabled'] or isset($instance['settings']['dnd_enabled']) && $instance['settings']['dnd_enabled']) {
$analyse_field = TRUE;
}
// Extract atoms used in this field.
if ($analyse_field) {
foreach (field_available_languages('node', $field) as $langcode) {
$values = field_get_items('node', $node, $field_name, $langcode);
if (!empty($values)) {
foreach ($values as $value) {
// Atom references.
if (isset($value['sid'])) {
$sid_all[] = array(
'sid' => $value['sid'],
'field_name' => $field_name,
);
}
// Text scanning.
if (isset($value['value'])) {
$extracted_sids = scald_index_included($value['value']);
foreach ($extracted_sids as $sid) {
$sid_all[] = array(
'sid' => $sid,
'field_name' => $field_name,
);
}
}
}
}
}
}
}
// Allow other modules to alter the list of atoms of the node.
drupal_alter('scald_index_node_atoms', $node, $sid_all);
// Create index entries for all the node's atoms.
if (!empty($sid_all)) {
$query = db_insert('scald_index')
->fields(array(
'nid',
'sid',
'status',
'type',
'field_name',
));
foreach ($sid_all as $sid_infos) {
$query
->values(array(
'nid' => $node->nid,
'sid' => $sid_infos['sid'],
'status' => $status,
'type' => $type,
'field_name' => $sid_infos['field_name'],
));
}
$query
->execute();
// Allow other modules to do treatments after index build.
module_invoke_all('scald_index_after_build_node_index', $node, $sid_all);
}
}