bbp_check_for_duplicate( array $post_data = array() )
Check for duplicate topics/replies
Description Description
Check to make sure that a user is not making a duplicate post
Parameters Parameters
- $post_data
-
(Optional) Contains information about the comment
Default value: array()
Return Return
(bool) True if it is not a duplicate, false if it is
Source Source
File: includes/common/functions.php
function bbp_check_for_duplicate( $post_data = array() ) {
// Parse arguments against default values
$r = bbp_parse_args( $post_data, array(
'post_author' => 0,
'post_type' => array( bbp_get_topic_post_type(), bbp_get_reply_post_type() ),
'post_parent' => 0,
'post_content' => '',
'post_status' => bbp_get_trash_status_id(),
'anonymous_data' => array()
), 'check_for_duplicate' );
// No duplicate checks for those who can throttle
if ( user_can( (int) $r['post_author'], 'throttle' ) ) {
return true;
}
// Get the DB
$bbp_db = bbp_db();
// Default clauses
$join = $where = '';
// Check for anonymous post
if ( empty( $r['post_author'] ) && ( ! empty( $r['anonymous_data'] ) && ! empty( $r['anonymous_data']['bbp_anonymous_email'] ) ) ) {
// Sanitize the email address for querying
$email = sanitize_email( $r['anonymous_data']['bbp_anonymous_email'] );
// Only proceed
if ( ! empty( $email ) && is_email( $email ) ) {
// Get the meta SQL
$clauses = get_meta_sql( array( array(
'key' => '_bbp_anonymous_email',
'value' => $email,
) ), 'post', $bbp_db->posts, 'ID' );
// Set clauses
$join = $clauses['join'];
// "'", "%", "$" and are valid characters in email addresses
$where = $bbp_db->remove_placeholder_escape( $clauses['where'] );
}
}
// Unslash $r to pass through DB->prepare()
//
// @see: https://bbpress.trac.wordpress.org/ticket/2185/
// @see: https://core.trac.wordpress.org/changeset/23973/
$r = wp_unslash( $r );
// Prepare duplicate check query
$query = "SELECT ID FROM {$bbp_db->posts} {$join}";
$query .= $bbp_db->prepare( "WHERE post_type = %s AND post_status != %s AND post_author = %d AND post_content = %s", $r['post_type'], $r['post_status'], $r['post_author'], $r['post_content'] );
$query .= ! empty( $r['post_parent'] )
? $bbp_db->prepare( " AND post_parent = %d", $r['post_parent'] )
: '';
$query .= $where;
$query .= " LIMIT 1";
$dupe = apply_filters( 'bbp_check_for_duplicate_query', $query, $r );
// Dupe found
if ( $bbp_db->get_var( $dupe ) ) {
do_action( 'bbp_check_for_duplicate_trigger', $post_data );
return false;
}
// Dupe not found
return true;
}
Changelog Changelog
| Version | Description |
|---|---|
| 2.0.0 | Introduced. |