function forum_field_storage_pre_update

Implements hook_field_storage_pre_update().

File

modules/forum/forum.module, line 550

Code

function forum_field_storage_pre_update($entity_type, $entity, &$skip_fields) {
    $first_call =& drupal_static(__FUNCTION__, array());
    if ($entity_type == 'node' && _forum_node_check_node_type($entity)) {
        // If the node is published, update the forum index.
        if ($entity->status) {
            // We don't maintain data for old revisions, so clear all previous values
            // from the table. Since this hook runs once per field, per object, 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();
            }
            $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 $item) {
                    $query->values(array(
                        'nid' => $entity->nid,
                        'title' => $entity->title,
                        'tid' => $item['tid'],
                        '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);
        }
        else {
            db_delete('forum_index')->condition('nid', $entity->nid)
                ->execute();
        }
    }
}

Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.