Esempio n. 1
0
function bb_ksd_new_post($post_id)
{
    global $bb_ksd_pre_post_status;
    if ('2' != $bb_ksd_pre_post_status) {
        return;
    }
    $bb_post = bb_get_post($post_id);
    $topic = get_topic($bb_post->topic_id);
    if (0 == $topic->topic_posts) {
        bb_delete_topic($topic->topic_id, 2);
    }
}
Esempio n. 2
0
/**
 * Delete a topic.
 *
 * @param array $args {
 *     @type int $topic_id ID of the topic being deleted.
 * }
 * @return bool True on success, false on failure.
 */
function bp_forums_delete_topic($args = '')
{
    /** This action is documented in bp-forums/bp-forums-screens */
    do_action('bbpress_init');
    $r = wp_parse_args($args, array('topic_id' => false));
    extract($r, EXTR_SKIP);
    return bb_delete_topic($topic_id, 1);
}
Esempio n. 3
0
 /**
  * Deletes a topic
  *
  * @since 1.0
  * @return integer|object 0 if already changed, 1 when successfully changed or an IXR_Error object on failure
  * @param array $args Arguments passed by the XML-RPC call
  * @param string $args[0] The username for authentication
  * @param string $args[1] The password for authentication
  * @param integer|string $args[2] The unique id of the topic to be deleted
  * @param integer $args[3] 1 deletes the topic, 0 undeletes the topic
  *
  * XML-RPC request to delete a topic with id of 34
  * <methodCall>
  *     <methodName>bb.deleteTopic</methodName>
  *     <params>
  *         <param><value><string>joeblow</string></value></param>
  *         <param><value><string>123password</string></value></param>
  *         <param><value><integer>34</integer></value></param>
  *     </params>
  * </methodCall>
  */
 function bb_deleteTopic($args)
 {
     do_action('bb_xmlrpc_call', 'bb.deleteTopic');
     // Escape args
     $this->escape($args);
     // Get the login credentials
     $username = $args[0];
     $password = (string) $args[1];
     // Check the user is valid
     $user = $this->authenticate($username, $password, 'delete_topics', __('You do not have permission to delete topics.'));
     do_action('bb_xmlrpc_call_authenticated', 'bb.deleteTopic');
     // If an error was raised by authentication or by an action then return it
     if ($this->error) {
         return $this->error;
     }
     // Can be numeric id or slug
     $topic_id = isset($args[2]) ? $args[2] : false;
     // Check for bad data
     if (!$topic_id || !is_string($topic_id) && !is_integer($topic_id)) {
         $this->error = new IXR_Error(400, __('The topic id is invalid.'));
         return $this->error;
     }
     // Check the requested topic exists
     if (!($topic = get_topic($topic_id))) {
         $this->error = new IXR_Error(400, __('No topic found.'));
         return $this->error;
     }
     // The topic id may have been a slug, so make sure it's an integer here
     $topic_id = (int) $topic->topic_id;
     $delete = isset($args[3]) ? (int) $args[3] : 1;
     // Don't do anything if already set that way
     if ($delete === (int) $topic->topic_status) {
         return 0;
     }
     // Make sure they are allowed to delete this topic
     if (!bb_current_user_can('delete_topic', $topic_id)) {
         $this->error = new IXR_Error(403, __('You do not have permission to delete this topic.'));
         return $this->error;
     }
     // Delete the topic
     if (!bb_delete_topic($topic_id, $delete)) {
         $this->error = new IXR_Error(500, __('The topic could not be deleted.'));
         return $this->error;
     }
     $result = 1;
     do_action('bb_xmlrpc_call_return', 'bb.deleteTopic');
     return $result;
 }
Esempio n. 4
0
function bp_forums_delete_topic($args = '')
{
    global $bp;
    do_action('bbpress_init');
    $defaults = array('topic_id' => false);
    $r = wp_parse_args($args, $defaults);
    extract($r, EXTR_SKIP);
    return bb_delete_topic($topic_id, 1);
}
Esempio n. 5
0
function bb_bozo_new_post($post_id)
{
    $bb_post = bb_get_post($post_id);
    if (1 < $bb_post->post_status) {
        bb_bozon($bb_post->poster_id, $bb_post->topic_id);
    }
    $topic = get_topic($bb_post->topic_id, false);
    if (0 == $topic->topic_posts) {
        bb_delete_topic($topic->topic_id, 2);
    }
}
Esempio n. 6
0
<?php

require 'admin-action.php';
$topic_id = (int) $_GET['id'];
if (!bb_current_user_can('delete_topic', $topic_id)) {
    wp_redirect(bb_get_uri(null, null, BB_URI_CONTEXT_HEADER));
    exit;
}
bb_check_admin_referer('delete-topic_' . $topic_id);
$topic = get_topic($topic_id);
$old_status = (int) $topic->topic_status;
if (!$topic) {
    bb_die(__('There is a problem with that topic, pardner.'));
}
$status = $topic->topic_status ? 0 : 1;
bb_delete_topic($topic->topic_id, $status);
$message = '';
switch ($old_status) {
    case 0:
        switch ($status) {
            case 0:
                break;
            case 1:
                $message = 'deleted';
                break;
        }
        break;
    case 1:
        switch ($status) {
            case 0:
                $message = 'undeleted';
Esempio n. 7
0
function blocklist_check($post_id = 0, $wall = false)
{
    if (bb_current_user_can('moderate') || bb_current_user_can('throttle')) {
        return;
    }
    if ($wall) {
        $bb_post = user_wall_get_post($post_id);
    } else {
        $bb_post = bb_get_post($post_id);
    }
    if (empty($post_id) || empty($bb_post) || !empty($bb_post->post_status)) {
        return;
    }
    global $blocklist, $bbdb;
    blocklist_initialize();
    if (empty($blocklist['data'])) {
        return;
    }
    (array) ($data = explode("\r\n", $blocklist['data']));
    $user = bb_get_user($bb_post->poster_id);
    foreach ($data as $item) {
        if (empty($item) || strlen($item) < 4 || ord($item) == 35) {
            continue;
        }
        if (preg_match('/^\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}/', $item)) {
            // is IP
            if (strpos($bb_post->poster_ip, $item) === 0) {
                $found = "IP address";
                $bad = $item;
                break;
            }
        } else {
            // is word
            $qitem = preg_quote($item);
            if (preg_match('/\\b' . $qitem . '/simU', $user->user_email)) {
                $found = "email";
                $bad = $item;
                break;
            }
            if (preg_match('/\\b' . $qitem . '/simU', $user->user_login)) {
                $found = "username";
                $bad = $item;
                break;
            }
            if (preg_match('/\\b' . $qitem . '/simU', $bb_post->post_text)) {
                $found = "post text";
                $bad = $item;
                break;
            } elseif (!$wall && $bb_post->post_position == 1) {
                if (empty($topic)) {
                    $topic = get_topic($bb_post->topic_id);
                }
                if (!empty($topic->topic_title) && preg_match('/\\b' . $qitem . '/simU', $topic->topic_title)) {
                    $found = "topic title";
                    $bad = $item;
                    break;
                }
            }
        }
        if (!empty($bad)) {
            break;
        }
    }
    if (!empty($bad)) {
        if ($wall) {
            user_wall_delete_post($post_id, 2);
            $uri = bb_get_option('uri') . "bb-admin/admin-base.php?post_status=2&plugin=user_wall_admin&user-wall-recent=1";
        } else {
            bb_delete_post($post_id, 2);
            if (empty($topic)) {
                $topic = get_topic($bb_post->topic_id);
            }
            if (empty($topic->topic_posts)) {
                bb_delete_topic($topic->topic_id, 2);
            }
            // if no posts in topic, also set topic to spam
            $uri = bb_get_option('uri') . 'bb-admin/' . (defined('BACKPRESS_PATH') ? '' : 'content-') . 'posts.php?post_status=2';
        }
        if (empty($blocklist['email'])) {
            return;
        }
        (array) ($email = explode("\r\n", $blocklist['email']));
        $message = "The blocklist has been triggered... \r\n\r\n";
        $message .= "Matching entry " . '"' . $bad . '"' . " found in {$found}.\r\n";
        $message .= "{$uri}\r\n\r\n";
        $message .= sprintf(__('Username: %s'), stripslashes($user->user_login)) . "\r\n";
        $message .= sprintf(__('Profile: %s'), get_user_profile_link($user->ID)) . "\r\n";
        $message .= sprintf(__('Email: %s'), stripslashes($user->user_email)) . "\r\n";
        $message .= sprintf(__('IP address: %s'), $_SERVER['REMOTE_ADDR']) . "\r\n";
        $message .= sprintf(__('Agent: %s'), substr(stripslashes($_SERVER["HTTP_USER_AGENT"]), 0, 255)) . "\r\n\r\n";
        foreach ($email as $to) {
            if (empty($to) || strlen($to) < 8) {
                continue;
            }
            @bb_mail($to, "[" . bb_get_option('name') . "] blocklist triggered", $message);
        }
    }
}
Esempio n. 8
0
function bb_delete_post($post_id, $new_status = 0)
{
    global $bbdb, $topic, $bb_post;
    $post_id = (int) $post_id;
    $bb_post = bb_get_post($post_id);
    $new_status = (int) $new_status;
    $old_status = (int) $bb_post->post_status;
    add_filter('get_topic_where', 'bb_no_where');
    $topic = get_topic($bb_post->topic_id);
    $topic_id = (int) $topic->topic_id;
    if ($bb_post) {
        $uid = (int) $bb_post->poster_id;
        if ($new_status == $old_status) {
            return;
        }
        _bb_delete_post($post_id, $new_status);
        if (0 == $old_status) {
            bb_update_topicmeta($topic_id, 'deleted_posts', $topic->deleted_posts + 1);
            $bbdb->query($bbdb->prepare("UPDATE {$bbdb->forums} SET posts = posts - 1 WHERE forum_id = %d", $topic->forum_id));
        } else {
            if (0 == $new_status) {
                bb_update_topicmeta($topic_id, 'deleted_posts', $topic->deleted_posts - 1);
                $bbdb->query($bbdb->prepare("UPDATE {$bbdb->forums} SET posts = posts + 1 WHERE forum_id = %d", $topic->forum_id));
            }
        }
        $posts = (int) $bbdb->get_var($bbdb->prepare("SELECT COUNT(*) FROM {$bbdb->posts} WHERE topic_id = %d AND post_status = 0", $topic_id));
        $bbdb->update($bbdb->topics, array('topic_posts' => $posts), compact('topic_id'));
        if (0 == $posts) {
            if (0 == $topic->topic_status || 1 == $new_status) {
                bb_delete_topic($topic_id, $new_status);
            }
        } else {
            if (0 != $topic->topic_status) {
                $bbdb->update($bbdb->topics, array('topic_status' => 0), compact('topic_id'));
                $bbdb->query($bbdb->prepare("UPDATE {$bbdb->forums} SET topics = topics + 1 WHERE forum_id = %d", $topic->forum_id));
            }
            bb_topic_set_last_post($topic_id);
            bb_update_post_positions($topic_id);
            bb_update_topic_voices($topic_id);
        }
        $user = bb_get_user($uid);
        $user_posts = new BB_Query('post', array('post_author_id' => $user->ID, 'topic_id' => $topic_id));
        if ($new_status && !$user_posts->results) {
            $topics_replied_key = $bbdb->prefix . 'topics_replied';
            bb_update_usermeta($user->ID, $topics_replied_key, $user->{$topics_replied_key} - 1);
        }
        nxt_cache_delete($topic_id, 'bb_topic');
        nxt_cache_delete($topic_id, 'bb_thread');
        nxt_cache_flush('bb_forums');
        nxt_cache_flush('bb_query');
        nxt_cache_flush('bb_cache_posts_post_ids');
        do_action('bb_delete_post', $post_id, $new_status, $old_status);
        return $post_id;
    } else {
        return false;
    }
}
function bp_forums_delete_topic($args = '')
{
    do_action('bbpress_init');
    $r = wp_parse_args($args, array('topic_id' => false));
    extract($r, EXTR_SKIP);
    return bb_delete_topic($topic_id, 1);
}
Esempio n. 10
0
            break;
        case 'open':
            foreach ($topic_ids as $topic_id) {
                $affected += bb_open_topic($topic_id);
            }
            $query_vars = array('message' => 'opened', 'count' => $affected);
            break;
        case 'delete':
            foreach ($topic_ids as $topic_id) {
                $affected += (int) (bool) bb_delete_topic($topic_id, 1);
            }
            $query_vars = array('message' => 'deleted', 'count' => $affected);
            break;
        case 'undelete':
            foreach ($topic_ids as $topic_id) {
                $affected += (int) (bool) bb_delete_topic($topic_id, 0);
            }
            $query_vars = array('message' => 'undeleted', 'count' => $affected);
            break;
        default:
            if ($action) {
                $query_vars = apply_filters("bulk_topic__{$action}", array(), $topic_ids);
            }
            break;
    }
    bb_safe_redirect(add_query_arg($query_vars));
    exit;
}
if (!empty($_GET['message'])) {
    $message_count = isset($_GET['count']) ? (int) $_GET['count'] : 1;
    switch ((string) $_GET['message']) {