2007-05-25 03:16:21 -04:00
< ? php
2008-09-16 20:40:10 -04:00
/**
2008-10-10 14:21:16 -04:00
* WordPress Comment Administration API .
2008-09-16 20:40:10 -04:00
*
* @ package WordPress
* @ subpackage Administration
2015-10-18 10:34:25 -04:00
* @ since 2.3 . 0
2008-09-16 20:40:10 -04:00
*/
2007-05-25 03:16:21 -04:00
2008-08-14 02:30:38 -04:00
/**
2022-07-20 18:15:10 -04:00
* Determines if a comment exists based on author and date .
2008-08-14 02:30:38 -04:00
*
2015-09-23 14:16:26 -04:00
* For best performance , use `$timezone = 'gmt'` , which queries a field that is properly indexed . The default value
* for `$timezone` is 'blog' for legacy reasons .
*
2010-09-04 22:45:39 -04:00
* @ since 2.0 . 0
2015-09-23 14:16:26 -04:00
* @ since 4.4 . 0 Added the `$timezone` parameter .
2014-10-31 13:56:22 -04:00
*
* @ global wpdb $wpdb WordPress database abstraction object .
2008-08-14 02:30:38 -04:00
*
2015-09-23 14:16:26 -04:00
* @ param string $comment_author Author of the comment .
* @ param string $comment_date Date of the comment .
* @ param string $timezone Timezone . Accepts 'blog' or 'gmt' . Default 'blog' .
2020-07-23 03:39:02 -04:00
* @ return string | null Comment post ID on success .
2008-08-14 02:30:38 -04:00
*/
2015-09-23 14:16:26 -04:00
function comment_exists ( $comment_author , $comment_date , $timezone = 'blog' ) {
2007-05-25 03:16:21 -04:00
global $wpdb ;
2015-09-23 14:16:26 -04:00
$date_field = 'comment_date' ;
if ( 'gmt' === $timezone ) {
$date_field = 'comment_date_gmt' ;
}
2017-11-30 18:11:00 -05:00
return $wpdb -> get_var (
$wpdb -> prepare (
" SELECT comment_post_ID FROM $wpdb->comments
2015-09-23 14:16:26 -04:00
WHERE comment_author = % s AND $date_field = % s " ,
2015-05-29 16:17:26 -04:00
stripslashes ( $comment_author ),
stripslashes ( $comment_date )
2017-11-30 18:11:00 -05:00
)
);
2007-05-25 03:16:21 -04:00
}
2008-08-14 02:30:38 -04:00
/**
2022-07-20 18:15:10 -04:00
* Updates a comment with values provided in $_POST .
2008-08-14 02:30:38 -04:00
*
2010-09-04 22:45:39 -04:00
* @ since 2.0 . 0
2020-06-29 21:04:03 -04:00
* @ since 5.5 . 0 A return value was added .
*
* @ return int | WP_Error The value 1 if the comment was updated , 0 if not updated .
* A WP_Error object on failure .
2008-08-14 02:30:38 -04:00
*/
2007-05-25 03:16:21 -04:00
function edit_comment () {
2017-11-30 18:11:00 -05:00
if ( ! current_user_can ( 'edit_comment' , ( int ) $_POST [ 'comment_ID' ] ) ) {
wp_die ( __ ( 'Sorry, you are not allowed to edit comments on this post.' ) );
}
2007-05-25 03:16:21 -04:00
2017-11-30 18:11:00 -05:00
if ( isset ( $_POST [ 'newcomment_author' ] ) ) {
2013-09-13 18:18:08 -04:00
$_POST [ 'comment_author' ] = $_POST [ 'newcomment_author' ];
2017-11-30 18:11:00 -05:00
}
if ( isset ( $_POST [ 'newcomment_author_email' ] ) ) {
2013-09-13 18:18:08 -04:00
$_POST [ 'comment_author_email' ] = $_POST [ 'newcomment_author_email' ];
2017-11-30 18:11:00 -05:00
}
if ( isset ( $_POST [ 'newcomment_author_url' ] ) ) {
2013-09-13 18:18:08 -04:00
$_POST [ 'comment_author_url' ] = $_POST [ 'newcomment_author_url' ];
2017-11-30 18:11:00 -05:00
}
if ( isset ( $_POST [ 'comment_status' ] ) ) {
2013-09-13 18:18:08 -04:00
$_POST [ 'comment_approved' ] = $_POST [ 'comment_status' ];
2017-11-30 18:11:00 -05:00
}
if ( isset ( $_POST [ 'content' ] ) ) {
2013-09-13 18:18:08 -04:00
$_POST [ 'comment_content' ] = $_POST [ 'content' ];
2017-11-30 18:11:00 -05:00
}
if ( isset ( $_POST [ 'comment_ID' ] ) ) {
2013-09-13 18:18:08 -04:00
$_POST [ 'comment_ID' ] = ( int ) $_POST [ 'comment_ID' ];
2017-11-30 18:11:00 -05:00
}
2007-05-25 03:16:21 -04:00
2017-11-30 18:11:00 -05:00
foreach ( array ( 'aa' , 'mm' , 'jj' , 'hh' , 'mn' ) as $timeunit ) {
2021-04-06 09:45:09 -04:00
if ( ! empty ( $_POST [ 'hidden_' . $timeunit ] ) && $_POST [ 'hidden_' . $timeunit ] !== $_POST [ $timeunit ] ) {
2008-03-16 19:05:16 -04:00
$_POST [ 'edit_date' ] = '1' ;
break ;
}
}
2017-11-30 18:11:00 -05:00
if ( ! empty ( $_POST [ 'edit_date' ] ) ) {
2020-01-28 19:45:18 -05:00
$aa = $_POST [ 'aa' ];
$mm = $_POST [ 'mm' ];
$jj = $_POST [ 'jj' ];
$hh = $_POST [ 'hh' ];
$mn = $_POST [ 'mn' ];
$ss = $_POST [ 'ss' ];
$jj = ( $jj > 31 ) ? 31 : $jj ;
$hh = ( $hh > 23 ) ? $hh - 24 : $hh ;
$mn = ( $mn > 59 ) ? $mn - 60 : $mn ;
$ss = ( $ss > 59 ) ? $ss - 60 : $ss ;
2013-03-01 11:28:40 -05:00
$_POST [ 'comment_date' ] = " $aa - $mm - $jj $hh : $mn : $ss " ;
2007-05-25 03:16:21 -04:00
}
2020-06-23 20:05:12 -04:00
return wp_update_comment ( $_POST , true );
2007-05-25 03:16:21 -04:00
}
2008-09-16 20:40:10 -04:00
/**
2015-09-03 14:17:24 -04:00
* Returns a WP_Comment object based on comment ID .
2008-09-16 20:40:10 -04:00
*
2010-09-04 22:45:39 -04:00
* @ since 2.0 . 0
2008-09-16 20:40:10 -04:00
*
2013-01-27 21:20:47 -05:00
* @ param int $id ID of comment to retrieve .
2015-09-03 14:17:24 -04:00
* @ return WP_Comment | false Comment if found . False on failure .
2008-09-16 20:40:10 -04:00
*/
2007-05-25 03:16:21 -04:00
function get_comment_to_edit ( $id ) {
2019-07-01 08:52:01 -04:00
$comment = get_comment ( $id );
if ( ! $comment ) {
2007-06-25 17:30:18 -04:00
return false ;
2017-11-30 18:11:00 -05:00
}
2007-05-25 03:16:21 -04:00
2017-11-30 18:11:00 -05:00
$comment -> comment_ID = ( int ) $comment -> comment_ID ;
2007-05-25 05:41:04 -04:00
$comment -> comment_post_ID = ( int ) $comment -> comment_post_ID ;
2007-06-04 13:43:22 -04:00
$comment -> comment_content = format_to_edit ( $comment -> comment_content );
2013-09-13 21:01:08 -04:00
/**
2016-05-22 14:01:30 -04:00
* Filters the comment content before editing .
2013-09-13 21:01:08 -04:00
*
* @ since 2.0 . 0
*
2020-07-23 15:06:03 -04:00
* @ param string $comment_content Comment content .
2013-09-13 21:01:08 -04:00
*/
$comment -> comment_content = apply_filters ( 'comment_edit_pre' , $comment -> comment_content );
2007-05-25 03:16:21 -04:00
2017-11-30 18:11:00 -05:00
$comment -> comment_author = format_to_edit ( $comment -> comment_author );
2007-05-25 03:16:21 -04:00
$comment -> comment_author_email = format_to_edit ( $comment -> comment_author_email );
2017-11-30 18:11:00 -05:00
$comment -> comment_author_url = format_to_edit ( $comment -> comment_author_url );
$comment -> comment_author_url = esc_url ( $comment -> comment_author_url );
2007-05-25 03:16:21 -04:00
return $comment ;
}
2008-09-16 20:40:10 -04:00
/**
2022-07-20 18:15:10 -04:00
* Gets the number of pending comments on a post or posts .
2008-09-16 20:40:10 -04:00
*
2010-09-04 22:45:39 -04:00
* @ since 2.3 . 0
2014-10-31 13:56:22 -04:00
*
* @ global wpdb $wpdb WordPress database abstraction object .
2008-09-16 20:40:10 -04:00
*
2020-11-09 10:15:08 -05:00
* @ param int | int [] $post_id Either a single Post ID or an array of Post IDs
* @ return int | int [] Either a single Posts pending comments as an int or an array of ints keyed on the Post IDs
2008-09-16 20:40:10 -04:00
*/
2007-07-29 15:56:55 -04:00
function get_pending_comments_num ( $post_id ) {
global $wpdb ;
2008-04-22 17:26:01 -04:00
$single = false ;
2017-11-30 18:11:00 -05:00
if ( ! is_array ( $post_id ) ) {
2010-01-12 17:38:26 -05:00
$post_id_array = ( array ) $post_id ;
2017-11-30 18:11:00 -05:00
$single = true ;
2010-01-12 17:38:26 -05:00
} else {
$post_id_array = $post_id ;
2008-04-22 17:26:01 -04:00
}
2017-11-30 18:11:00 -05:00
$post_id_array = array_map ( 'intval' , $post_id_array );
$post_id_in = " ' " . implode ( " ', ' " , $post_id_array ) . " ' " ;
2008-04-22 17:26:01 -04:00
2010-01-12 17:38:26 -05:00
$pending = $wpdb -> get_results ( " SELECT comment_post_ID, COUNT(comment_ID) as num_comments FROM $wpdb->comments WHERE comment_post_ID IN ( $post_id_in ) AND comment_approved = '0' GROUP BY comment_post_ID " , ARRAY_A );
2008-04-22 17:26:01 -04:00
2010-01-12 17:38:26 -05:00
if ( $single ) {
2017-11-30 18:11:00 -05:00
if ( empty ( $pending ) ) {
2010-01-12 17:38:26 -05:00
return 0 ;
2017-11-30 18:11:00 -05:00
} else {
return absint ( $pending [ 0 ][ 'num_comments' ] );
}
2010-01-12 17:38:26 -05:00
}
2010-01-15 17:11:12 -05:00
2008-04-22 17:26:01 -04:00
$pending_keyed = array ();
2010-01-15 17:11:12 -05:00
2020-01-17 19:54:04 -05:00
// Default to zero pending for all posts in request.
2017-11-30 18:11:00 -05:00
foreach ( $post_id_array as $id ) {
$pending_keyed [ $id ] = 0 ;
}
2010-01-12 17:38:26 -05:00
2017-11-30 18:11:00 -05:00
if ( ! empty ( $pending ) ) {
foreach ( $pending as $pend ) {
$pending_keyed [ $pend [ 'comment_post_ID' ] ] = absint ( $pend [ 'num_comments' ] );
}
}
2008-04-22 17:26:01 -04:00
return $pending_keyed ;
2007-07-29 15:56:55 -04:00
}
2008-09-16 20:40:10 -04:00
/**
2020-03-25 10:43:11 -04:00
* Adds avatars to relevant places in admin .
2008-09-16 20:40:10 -04:00
*
2010-02-25 17:19:03 -05:00
* @ since 2.5 . 0
2015-05-29 16:17:26 -04:00
*
2008-09-16 20:40:10 -04:00
* @ param string $name User name .
2020-03-25 10:43:11 -04:00
* @ return string Avatar with the user name .
2008-09-16 20:40:10 -04:00
*/
2008-02-15 21:39:13 -05:00
function floated_admin_avatar ( $name ) {
2015-09-08 22:51:24 -04:00
$avatar = get_avatar ( get_comment (), 32 , 'mystery' );
2008-02-15 21:39:13 -05:00
return " $avatar $name " ;
}
2015-05-30 23:18:25 -04:00
/**
2022-07-20 18:12:09 -04:00
* Enqueues comment shortcuts jQuery script .
*
2015-05-30 23:18:25 -04:00
* @ since 2.7 . 0
*/
2008-10-16 18:23:32 -04:00
function enqueue_comment_hotkeys_js () {
2020-05-16 14:42:12 -04:00
if ( 'true' === get_user_option ( 'comment_shortcuts' ) ) {
2008-10-16 18:23:32 -04:00
wp_enqueue_script ( 'jquery-table-hotkeys' );
2017-11-30 18:11:00 -05:00
}
2008-10-16 18:23:32 -04:00
}
2015-09-10 17:29:24 -04:00
/**
2022-07-20 18:15:10 -04:00
* Displays error message at bottom of comments .
2015-09-10 17:29:24 -04:00
*
* @ param string $msg Error Message . Assumed to contain HTML and be sanitized .
*/
function comment_footer_die ( $msg ) {
echo " <div class='wrap'><p> $msg </p></div> " ;
2020-02-06 01:33:11 -05:00
require_once ABSPATH . 'wp-admin/admin-footer.php' ;
2015-09-10 17:29:24 -04:00
die ;
2017-11-30 18:11:00 -05:00
}