WordPress.org

Make WordPress Core

Ticket #21834: comment_meta.patch

File comment_meta.patch, 6.3 KB (added by mattoperry, 2 years ago)
  • wp-includes/comment.php

     
    20212021 
    20222022        return $open; 
    20232023} 
     2024 
     2025 
     2026/** 
     2027 * Prints the html for the comment meta box 
     2028 * 
     2029 * @uses get_comment_history() to get comment meta 
     2030 * @param  Object $comment WP comment object 
     2031 * @return void 
     2032 */ 
     2033 
     2034// 
     2035// Comment History 
     2036// 
     2037 
     2038/** 
     2039 * Add a history entry to a comment with a messaged tailored to the event being recorded. 
     2040 * 
     2041 * @global object $current_user the current logged in user, if any 
     2042 * @param int $comment_id the id of the comment to add a history entry 
     2043 * @param string $status optional comment status string 
     2044 * @return type 
     2045 */ 
     2046function _wp_update_comment_history( $comment_id, $status = '' ) { 
     2047 
     2048        global $current_user; 
     2049 
     2050        // some hooks pass in the comment object, not just the id 
     2051        // in those cases we get the id from the object 
     2052        if( is_object( $comment_id ) ) 
     2053                $comment_id = $comment_id->comment_ID; 
     2054 
     2055        $action = current_filter();                             // what action happened that we will log as an event in the comment's history? 
     2056        $current_user_login = 'anonymous user'; // what is the name of this user for the comment's history? 'anonymous user' by default. 
     2057        $message = '';                                                  // what message should we log in the comment's history? 
     2058 
     2059        // no action or no comment id then we can't log history and must stop 
     2060        if( ! $action || ! $comment_id ) 
     2061                return; 
     2062 
     2063        // get the current logged in user's login name for the history message 
     2064        if ( is_object($current_user) && isset($current_user->user_login) ) 
     2065                $current_user_login = $current_user->user_login; 
     2066 
     2067        // create a custom message for the comment history based on the action ( the hook ) 
     2068        if( 'edit_comment' === $action ) 
     2069                $message = sprintf( __( "edited by %s" ), $current_user_login ); 
     2070        elseif( 'trashed_comment' === $action ) 
     2071                $message = sprintf( __( "trashed by %s" ), $current_user_login ); 
     2072        elseif( 'untrashed_comment' === $action ) 
     2073                $message = sprintf( __( "untrashed by %s" ), $current_user_login ); 
     2074        elseif( 'comment_unapproved_to_approved' === $action ) 
     2075                $message = sprintf( __( "%s approved this comment" ), $current_user_login ); 
     2076        elseif( 'comment_approved_to_unapproved' === $action ) 
     2077                $message = sprintf( __( "%s unapproved this comment" ), $current_user_login ); 
     2078        elseif( 'spammed_comment' === $action ) 
     2079                $message = sprintf( __( "%s marked this comment as spam" ), $current_user_login ); 
     2080        elseif( 'unspammed_comment' === $action ) 
     2081                $message = sprintf( __( "%s marked this comment as ham" ), $current_user_login ); 
     2082        else 
     2083                $message = sprintf( __( "%s by %s" ), str_replace( '_', ' ', $action ), $current_user_login ); // default message is based on the hook name 
     2084 
     2085        // insert the history message into comment meta and return result 
     2086 
     2087        $r = false; 
     2088 
     2089        if( $message ) { 
     2090                $entry = array( 
     2091                        'time' => time(), 
     2092                        'message' => $message, 
     2093                        'event' => $action, 
     2094                        'user' => $current_user_login, 
     2095                ); 
     2096 
     2097                $r = add_comment_meta( $comment_id, '_wp_history', $entry, false ); 
     2098        } 
     2099 
     2100        return $r; 
     2101} 
     2102 
     2103/** 
     2104 * Comment history events: 
     2105 * Use comment-related hooks call to _wp_update_comment_history in order to log the comment event. 
     2106 * Add additional actions here, along with corresponding support in _wp_update_comment_history to log in the comment history 
     2107 */ 
     2108add_action( 'edit_comment', '_wp_update_comment_history', 10 ); 
     2109add_action( 'trashed_comment', '_wp_update_comment_history', 10 ); 
     2110add_action( 'untrashed_comment', '_wp_update_comment_history', 10 ); 
     2111add_action( 'comment_unapproved_to_approved', '_wp_update_comment_history', 10 ); 
     2112add_action( 'comment_approved_to_unapproved', '_wp_update_comment_history', 10 ); 
     2113add_action( 'spammed_comment', '_wp_update_comment_history', 10 ); 
     2114add_action( 'unspammed_comment', '_wp_update_comment_history', 10 ); 
     2115 
     2116 
     2117/** 
     2118 * Get the comment history for a given comment id, as an array. 
     2119 * Allows filtering of the history array for custom reordering or editing of history 
     2120 * 
     2121 * @param int $comment_id Comment ID 
     2122 * @return array Associative array of a comment's history. Keys are time, message, event, and user. 
     2123 */ 
     2124function get_comment_history( $comment_id ) { 
     2125        $history = get_comment_meta( $comment_id, '_wp_history', false ); 
     2126        return apply_filters('get_comment_history', $history, $comment_id ); 
     2127} 
     2128 
     2129 
     2130/** 
     2131 * Sort the comment history in reverse chronological order. 
     2132 * 
     2133 * @uses _sort_comment_history_reverse_chronological() to sort the history entries in reverse chronological order 
     2134 * @param Array $history array of history entries 
     2135 * @return Array sorted array of history events 
     2136 */ 
     2137function sort_comment_history( $history ){ 
     2138        usort( $history, '_sort_comment_history_reverse_chronological' ); 
     2139        return $history; 
     2140} 
     2141add_filter( 'get_comment_history', 'sort_comment_history', 1, 1 ); 
     2142 
     2143/** 
     2144 * Used with usort() to sort comment history entries in reverse chronological order 
     2145 * 
     2146 * @access private 
     2147 * 
     2148 * @param  array $a History entry for a comment 
     2149 * @param  array $b Another history entry for the same comment 
     2150 * @return int    -1 if history entry a is older than history entry b, 1 otherwise 
     2151 */ 
     2152function _sort_comment_history_reverse_chronological( $a, $b ) { 
     2153        return $a['time'] > $b['time'] ? -1 : 1; 
     2154} 
     2155 
     2156 
     2157/** 
     2158 * Adds the comment history meta box to comment pages in the admin interface 
     2159 * @return void 
     2160 */ 
     2161function add_comment_history_meta_box(){ 
     2162        add_meta_box( 'comment-history', __('Comment History'), 'comment_history_meta_box_html', 'comment', 'normal' ); 
     2163} 
     2164 
     2165function comment_history_meta_box_html( $comment ) { 
     2166        $history = get_comment_history( $comment->comment_ID ); 
     2167 
     2168        echo '<div class="comment-history" style="margin: 13px;">'; 
     2169 
     2170        if ( $history ) { 
     2171 
     2172                foreach ( $history as $row ) { 
     2173                        $time           = date( 'D d M Y @ h:i:m a', (int) $row['time'] ) . ' GMT'; 
     2174                        $human_time = sprintf( __('%s ago'), human_time_diff( $row['time'] ) ); 
     2175                        $message        = esc_html( $row['message'] ); 
     2176 
     2177                        printf( '<div style="margin-bottom: 13px;"><span style="color: #999;" alt="%1$s" title="%1$s">%2$s</span> - %3$s</div>', 
     2178                                        $time, 
     2179                                        $human_time, 
     2180                                        $message 
     2181                                        ); 
     2182                } 
     2183 
     2184        } else { 
     2185 
     2186                echo '<em>'. __('There is no history for this comment.') . '</em>'; 
     2187 
     2188        } 
     2189 
     2190        echo '</div> <!-- .comment-history -->'; 
     2191 
     2192} 
     2193add_action( 'admin_init', 'add_comment_history_meta_box' );