comments_and_clauses = ''; } /** * Create a public static instance of ainWP_Child_Comments. * * @return MainWP_Child_Comments|null */ public static function get_instance() { if ( null === static::$instance ) { static::$instance = new self(); } return static::$instance; } /** * MainWP Child Comment actions: approve, unapprove, spam, unspam, trash, restore, delete. * * @uses \MainWP\Child\MainWP_Child_Links_Checker::get_class_name() * @uses \MainWP\Child\MainWP_Helper::write() */ public function comment_action() { $action = MainWP_System::instance()->validate_params( 'action' ); // phpcs:disable WordPress.Security.NonceVerification $commentId = isset( $_POST['id'] ) ? sanitize_text_field( wp_unslash( $_POST['id'] ) ) : ''; if ( 'approve' === $action ) { wp_set_comment_status( $commentId, 'approve' ); } elseif ( 'unapprove' === $action ) { wp_set_comment_status( $commentId, 'hold' ); } elseif ( 'spam' === $action ) { wp_spam_comment( $commentId ); } elseif ( 'unspam' === $action ) { wp_unspam_comment( $commentId ); } elseif ( 'trash' === $action ) { add_action( 'trashed_comment', array( MainWP_Child_Links_Checker::get_class_name(), 'hook_trashed_comment' ), 10, 1 ); wp_trash_comment( $commentId ); } elseif ( 'restore' === $action ) { wp_untrash_comment( $commentId ); } elseif ( 'delete' === $action ) { wp_delete_comment( $commentId, true ); } else { $information['status'] = 'FAIL'; } if ( ! isset( $information['status'] ) ) { $information['status'] = 'SUCCESS'; } // phpcs:enable MainWP_Helper::write( $information ); } /** * MainWP Child Bulk Comment actions: approve, unapprove, spam, unspam, trash, restore, delete. * * @uses \MainWP\Child\MainWP_Helper::write() */ public function comment_bulk_action() { $action = MainWP_System::instance()->validate_params( 'action' ); // phpcs:disable WordPress.Security.NonceVerification $commentIds = isset( $_POST['ids'] ) ? explode( ',', sanitize_text_field( wp_unslash( $_POST['ids'] ) ) ) : array(); // phpcs:enable $information['success'] = 0; foreach ( $commentIds as $commentId ) { if ( $commentId ) { ++$information['success']; if ( 'approve' === $action ) { wp_set_comment_status( $commentId, 'approve' ); } elseif ( 'unapprove' === $action ) { wp_set_comment_status( $commentId, 'hold' ); } elseif ( 'spam' === $action ) { wp_spam_comment( $commentId ); } elseif ( 'unspam' === $action ) { wp_unspam_comment( $commentId ); } elseif ( 'trash' === $action ) { wp_trash_comment( $commentId ); } elseif ( 'restore' === $action ) { wp_untrash_comment( $commentId ); } elseif ( 'delete' === $action ) { wp_delete_comment( $commentId, true ); } else { --$information['success']; } } } MainWP_Helper::write( $information ); } /** * Comment WHERE Clauses. * * @param array $clauses MySQL WHERE Clause. * * @return array $clauses, Array of MySQL WHERE Clauses. */ public function comments_clauses( $clauses ) { if ( $this->comments_and_clauses ) { $clauses['where'] .= ' ' . $this->comments_and_clauses; } return $clauses; } /** * Get all comments. * * @uses \MainWP\Child\MainWP_Helper::write() */ public function get_all_comments() { //phpcs:ignore -- NOSONAR - complex. /** * WordPress Database instance. * * @global object $wpdb */ global $wpdb; add_filter( 'comments_clauses', array( &$this, 'comments_clauses' ) ); // phpcs:disable WordPress.Security.NonceVerification if ( isset( $_POST['postId'] ) ) { $this->comments_and_clauses .= $wpdb->prepare( " AND $wpdb->comments.comment_post_ID = %d ", sanitize_text_field( wp_unslash( $_POST['postId'] ) ) ); } else { if ( isset( $_POST['keyword'] ) && '' !== $_POST['keyword'] ) { $this->comments_and_clauses .= $wpdb->prepare( " AND $wpdb->comments.comment_content LIKE %s ", '%' . $wpdb->esc_like( sanitize_text_field( wp_unslash( $_POST['keyword'] ) ) ) . '%' ); } if ( isset( $_POST['dtsstart'] ) && '' !== $_POST['dtsstart'] ) { $this->comments_and_clauses .= $wpdb->prepare( " AND $wpdb->comments.comment_date > %s ", $wpdb->esc_like( sanitize_text_field( wp_unslash( $_POST['dtsstart'] ) ) ) ); } if ( isset( $_POST['dtsstop'] ) && '' !== $_POST['dtsstop'] ) { $this->comments_and_clauses .= $wpdb->prepare( " AND $wpdb->comments.comment_date < %s ", $wpdb->esc_like( sanitize_text_field( wp_unslash( $_POST['dtsstop'] ) ) ) ); } } $maxComments = 50; if ( defined( 'MAINWP_CHILD_NR_OF_COMMENTS' ) ) { $maxComments = MAINWP_CHILD_NR_OF_COMMENTS; // to compatible. } if ( isset( $_POST['maxRecords'] ) ) { $maxComments = ! empty( $_POST['maxRecords'] ) ? intval( $_POST['maxRecords'] ) : 0; } if ( 0 === $maxComments ) { $maxComments = 99999; } $status = isset( $_POST['status'] ) ? sanitize_text_field( wp_unslash( $_POST['status'] ) ) : ''; $rslt = $this->get_recent_comments( explode( ',', $status ), $maxComments ); $this->comments_and_clauses = ''; // phpcs:enable MainWP_Helper::write( $rslt ); } /** * Get recent comments. * * @param array $pAllowedStatuses An array containing allowed comment statuses. * @param int $pCount Number of comments to return. * * @return array $allComments Array of all comments found. */ public function get_recent_comments( $pAllowedStatuses, $pCount ) { if ( ! function_exists( '\get_comment_author_url' ) ) { include_once WPINC . '/comment-template.php'; // NOSONAR -- WP compatible. } $allComments = array(); foreach ( $pAllowedStatuses as $status ) { $params = array( 'status' => $status ); if ( 0 !== $pCount ) { $params['number'] = $pCount; } $comments = get_comments( $params ); if ( is_array( $comments ) ) { foreach ( $comments as $comment ) { $post = get_post( $comment->comment_post_ID ); $outComment = array(); $outComment['id'] = $comment->comment_ID; $outComment['status'] = wp_get_comment_status( $comment->comment_ID ); $outComment['author'] = $comment->comment_author; $outComment['author_url'] = get_comment_author_url( $comment->comment_ID ); $outComment['author_ip'] = get_comment_author_IP( $comment->comment_ID ); $outComment['author_email'] = apply_filters( 'comment_email', $comment->comment_author_email ); $outComment['postId'] = $comment->comment_post_ID; $outComment['postName'] = $post->post_title; $outComment['comment_count'] = $post->comment_count; $outComment['content'] = $comment->comment_content; $outComment['dts'] = strtotime( $comment->comment_date_gmt ); $allComments[] = $outComment; } } } return $allComments; } }