/** * Implements hook_field_storage_pre_update(). */ function {{ machine_name }}_field_storage_pre_update($entity_type, $entity, &$skip_fields) { $first_call = &drupal_static(__FUNCTION__, array()); if ($entity_type == 'node' && $entity->status && _forum_node_check_node_type($entity)) { // We don't maintain data for old revisions, so clear all previous values // from the table. Since this hook runs once per field, per entity, make // sure we only wipe values once. if (!isset($first_call[$entity->nid])) { $first_call[$entity->nid] = FALSE; db_delete('forum_index')->condition('nid', $entity->nid)->execute(); } // Only save data to the table if the node is published. if ($entity->status) { $query = db_insert('forum_index')->fields(array('nid', 'title', 'tid', 'sticky', 'created', 'comment_count', 'last_comment_timestamp')); foreach ($entity->taxonomy_forums as $language) { foreach ($language as $delta) { $query->values(array( 'nid' => $entity->nid, 'title' => $entity->title, 'tid' => $delta['value'], 'sticky' => $entity->sticky, 'created' => $entity->created, 'comment_count' => 0, 'last_comment_timestamp' => $entity->created, )); } } $query->execute(); // The logic for determining last_comment_count is fairly complex, so // call _forum_update_forum_index() too. _forum_update_forum_index($entity->nid); } } }