Esempio n. 1
0
/**
 * Function for inserting topic data when it's first published.
 *
 * @since  1.0.0
 * @access public
 * @param  object  $post
 * @return void
 */
function mb_insert_topic_data($post)
{
    /* Hook for before inserting topic data. */
    do_action('mb_before_insert_topic_data', $post);
    /* Get the topic ID. */
    $topic_id = mb_get_topic_id($post->ID);
    /* Get the forum ID. */
    $forum_id = mb_get_forum_id($post->post_parent);
    /* Get the User ID. */
    $user_id = mb_get_user_id($post->post_author);
    /* Get the post date. */
    $post_date = $post->post_date;
    $post_epoch = mysql2date('U', $post_date);
    /* Update user meta. */
    $topic_count = mb_get_user_topic_count($user_id);
    update_user_meta($user_id, mb_get_user_topic_count_meta_key(), $topic_count + 1);
    /* Add topic meta. */
    mb_set_topic_activity_datetime($topic_id, $post_date);
    mb_set_topic_activity_epoch($topic_id, $post_epoch);
    mb_set_topic_voices($topic_id, $user_id);
    mb_set_topic_voice_count($topic_id, 1);
    mb_set_topic_reply_count($topic_id, 0);
    /* If we have a forum ID. */
    if (0 < $forum_id) {
        $topic_count = mb_get_forum_topic_count($forum_id);
        /* Update forum meta. */
        mb_set_forum_activity_datetime($forum_id, $post_date);
        mb_set_forum_activity_epoch($forum_id, $post_epoch);
        mb_set_forum_last_topic_id($forum_id, $topic_id);
        mb_set_forum_topic_count($forum_id, absint($topic_count) + 1);
    }
    /* Notify subscribers that there's a new topic. */
    mb_notify_subscribers($post);
    /* Hook for after inserting topic data. */
    do_action('mb_after_insert_topic_data', $post);
}
Esempio n. 2
0
/**
 * Function for inserting reply data when it's first published.
 *
 * @since  1.0.0
 * @access public
 * @param  object  $post
 * @return void
 */
function mb_insert_reply_data($post)
{
    /* Hook for before inserting reply data. */
    do_action('mb_before_insert_reply_data', $post);
    /* Get the reply ID. */
    $reply_id = mb_get_reply_id($post->ID);
    /* Get the topic ID. */
    $topic_id = mb_get_topic_id($post->post_parent);
    /* Get the forum ID. */
    $forum_id = mb_get_topic_forum_id($topic_id);
    /* Get the user ID. */
    $user_id = mb_get_user_id($post->post_author);
    /* Get the post date. */
    $post_date = $post->post_date;
    $post_epoch = mysql2date('U', $post_date);
    /* Update user meta. */
    $topic_count = mb_get_user_topic_count($user_id);
    update_user_meta($user_id, mb_get_user_topic_count_meta_key(), $topic_count + 1);
    /* Update topic position. */
    mb_set_topic_position($topic_id, $post_epoch);
    /* Update topic meta. */
    mb_set_topic_activity_datetime($topic_id, $post_date);
    mb_set_topic_activity_epoch($topic_id, $post_epoch);
    mb_set_topic_last_reply_id($topic_id, $reply_id);
    $voices = mb_get_topic_voices($topic_id);
    if (!in_array($user_id, $voices)) {
        $voices[] = $user_id;
        mb_set_topic_voices($topic_id, $voices);
        mb_set_topic_voice_count($topic_id, count($voices));
    }
    $topic_reply_count = mb_get_topic_reply_count($topic_id);
    mb_set_topic_reply_count($topic_id, absint($topic_reply_count) + 1);
    $forum_reply_count = absint(mb_get_forum_reply_count($forum_id)) + 1;
    /* Update forum meta. */
    mb_set_forum_activity_datetime($forum_id, $post_date);
    mb_set_forum_activity_epoch($forum_id, $post_epoch);
    mb_set_forum_last_reply_id($forum_id, $reply_id);
    mb_set_forum_last_topic_id($forum_id, $topic_id);
    mb_set_forum_reply_count($forum_id, $forum_reply_count);
    /* Notify subscribers that there's a new reply. */
    mb_notify_subscribers($post);
    /* Hook for after inserting reply data. */
    do_action('mb_after_insert_reply_data', $post);
}
Esempio n. 3
0
/**
 * Resets the forum's "latest" data.
 *
 * @since  1.0.0
 * @access public
 * @param  int    $forum_id
 * @return int
 */
function mb_reset_forum_latest($forum_id)
{
    global $wpdb;
    $forum_id = mb_get_forum_id($forum_id);
    $open_status = mb_get_open_post_status();
    $close_status = mb_get_close_post_status();
    $publish_status = mb_get_publish_post_status();
    $private_status = mb_get_private_post_status();
    $hidden_status = mb_get_hidden_post_status();
    $status_where = "AND (post_status = '{$open_status}' OR post_status = '{$close_status}' OR post_status = '{$publish_status}' OR post_status = '{$private_status}' OR post_status = '{$hidden_status}')";
    $topic_id = $wpdb->get_var($wpdb->prepare("SELECT ID FROM {$wpdb->posts} WHERE post_type = %s {$status_where} AND post_parent = %d ORDER BY menu_order DESC", mb_get_topic_post_type(), $forum_id));
    if (!empty($topic_id)) {
        $t_status_where = "AND (topic.post_status = '{$open_status}' OR topic.post_status = '{$close_status}' OR topic.post_status = '{$publish_status}' OR topic.post_status = '{$private_status}' OR topic.post_status = '{$hidden_status}')";
        $r_status_where = "AND reply.post_status = '{$publish_status}'";
        $status_where = $t_status_where . $r_status_where;
        $reply_id = $wpdb->get_var($wpdb->prepare("SELECT reply.ID FROM {$wpdb->posts} AS reply INNER JOIN {$wpdb->posts} AS topic ON reply.post_parent = topic.ID WHERE topic.post_parent = %d {$status_where} ORDER BY reply.post_date DESC", $forum_id));
        if ($reply_id) {
            mb_set_forum_last_reply_id($forum_id, $reply_id);
            mb_set_forum_last_topic_id($forum_id, $topic_id);
            $last_date = get_post($reply_id)->post_date;
            $epoch_date = mysql2date('U', $last_date);
            mb_set_forum_activity_datetime($forum_id, $last_date);
            mb_set_forum_activity_epoch($forum_id, $epoch_date);
        } else {
            delete_post_meta($forum_id, mb_get_forum_last_reply_id_meta_key());
            mb_set_forum_last_topic_id($forum_id, $topic_id);
            $last_date = get_post($topic_id)->post_date;
            $epoch_date = mysql2date('U', $last_date);
            mb_set_forum_activity_datetime($forum_id, $last_date);
            mb_set_forum_activity_epoch($forum_id, $epoch_date);
        }
    } else {
        delete_post_meta($forum_id, mb_get_forum_last_reply_id_meta_key());
        delete_post_meta($forum_id, mb_get_forum_last_topic_id_meta_key());
        delete_post_meta($forum_id, mb_get_forum_activity_datetime_meta_key());
        delete_post_meta($forum_id, mb_get_forum_activity_datetime_epoch_meta_key());
    }
}