diff --git a/wp-includes/comment-template.php b/wp-includes/comment-template.php new file mode 100644 index 0000000000..ce89d5c507 --- /dev/null +++ b/wp-includes/comment-template.php @@ -0,0 +1,370 @@ +comment_author) ) + $author = __('Anonymous'); + else + $author = $comment->comment_author; + return apply_filters('get_comment_author', $author); +} + +function comment_author() { + $author = apply_filters('comment_author', get_comment_author() ); + echo $author; +} + +function get_comment_author_email() { + global $comment; + return apply_filters('get_comment_author_email', $comment->comment_author_email); +} + +function comment_author_email() { + echo apply_filters('author_email', get_comment_author_email() ); +} + +function comment_author_email_link($linktext='', $before='', $after='') { + global $comment; + $email = apply_filters('comment_email', $comment->comment_author_email); + if ((!empty($email)) && ($email != '@')) { + $display = ($linktext != '') ? $linktext : $email; + echo $before; + echo "$display"; + echo $after; + } +} + +function get_comment_author_link() { + global $comment; + $url = get_comment_author_url(); + $author = get_comment_author(); + + if ( empty( $url ) || 'http://' == $url ) + $return = $author; + else + $return = "$author"; + return apply_filters('get_comment_author_link', $return); +} + +function comment_author_link() { + echo get_comment_author_link(); +} + +function get_comment_author_IP() { + global $comment; + return apply_filters('get_comment_author_IP', $comment->comment_author_IP); +} + +function comment_author_IP() { + echo get_comment_author_IP(); +} + +function get_comment_author_url() { + global $comment; + return apply_filters('get_comment_author_url', $comment->comment_author_url); +} + +function comment_author_url() { + echo apply_filters('comment_url', get_comment_author_url()); +} + +function get_comment_author_url_link( $linktext = '', $before = '', $after = '' ) { + global $comment; + $url = get_comment_author_url(); + $display = ($linktext != '') ? $linktext : $url; + $return = "$before$display$after"; + return apply_filters('get_comment_author_url_link', $return); +} + +function comment_author_url_link( $linktext = '', $before = '', $after = '' ) { + echo get_comment_author_url_link( $linktext, $before, $after ); +} + +function get_comment_date( $d = '' ) { + global $comment; + if ( '' == $d ) + $date = mysql2date( get_settings('date_format'), $comment->comment_date); + else + $date = mysql2date($d, $comment->comment_date); + return apply_filters('get_comment_date', $date); +} + +function comment_date( $d = '' ) { + echo get_comment_date( $d ); +} + +function get_comment_excerpt() { + global $comment; + $comment_text = strip_tags($comment->comment_content); + $blah = explode(' ', $comment_text); + if (count($blah) > 20) { + $k = 20; + $use_dotdotdot = 1; + } else { + $k = count($blah); + $use_dotdotdot = 0; + } + $excerpt = ''; + for ($i=0; $i<$k; $i++) { + $excerpt .= $blah[$i] . ' '; + } + $excerpt .= ($use_dotdotdot) ? '...' : ''; + return apply_filters('get_comment_excerpt', $excerpt); +} + +function comment_excerpt() { + echo apply_filters('comment_excerpt', get_comment_excerpt() ); +} + +function get_comment_ID() { + global $comment; + return apply_filters('get_comment_ID', $comment->comment_ID); +} + +function comment_ID() { + echo get_comment_ID(); +} + +function get_comment_link() { + global $comment; + return get_permalink( $comment->comment_post_ID ) . '#comment-' . $comment->comment_ID; +} + +function get_comments_link() { + return get_permalink() . '#comments'; +} + +function comments_link( $file = '', $echo = true ) { + echo get_comments_link(); +} + +function get_comments_number( $post_id = 0 ) { + global $wpdb, $comment_count_cache, $id; + $post_id = (int) $post_id; + + if ( !$post_id ) + $post_id = $id; + + // TODO: Remove SELECT. Use get_post(). + if ( !isset($comment_count_cache[$post_id]) ) + $comment_count_cache[$id] = $wpdb->get_var("SELECT comment_count FROM $wpdb->posts WHERE ID = '$post_id'"); + + return apply_filters('get_comments_number', $comment_count_cache[$post_id]); +} + +function comments_number( $zero = 'No Comments', $one = '1 Comment', $more = '% Comments', $number = '' ) { + global $id, $comment; + $number = get_comments_number( $id ); + if ($number == 0) { + $blah = $zero; + } elseif ($number == 1) { + $blah = $one; + } elseif ($number > 1) { + $blah = str_replace('%', $number, $more); + } + echo apply_filters('comments_number', $blah); +} + +function get_comment_text() { + global $comment; + return apply_filters('get_comment_text', $comment->comment_content); +} + +function comment_text() { + echo apply_filters('comment_text', get_comment_text() ); +} + +function get_comment_time( $d = '', $gmt = false ) { + global $comment; + $comment_date = $gmt? $comment->comment_date_gmt : $comment->comment_date; + if ( '' == $d ) + $date = mysql2date(get_settings('time_format'), $comment_date); + else + $date = mysql2date($d, $comment_date); + return apply_filters('get_comment_time', $date); +} + +function comment_time( $d = '' ) { + echo get_comment_time($d); +} + +function get_comment_type() { + global $comment; + + if ( '' == $comment->comment_type ) + $comment->comment_type = 'comment'; + + return apply_filters('get_comment_type', $comment->comment_type); +} + +function comment_type($commenttxt = 'Comment', $trackbacktxt = 'Trackback', $pingbacktxt = 'Pingback') { + $type = get_comment_type(); + switch( $type ) { + case 'trackback' : + echo $trackbacktxt; + break; + case 'pingback' : + echo $pingbacktxt; + break; + default : + echo $commenttxt; + } +} + +function get_trackback_url() { + global $id; + $tb_url = get_settings('siteurl') . '/wp-trackback.php?p=' . $id; + + if ( '' != get_settings('permalink_structure') ) + $tb_url = trailingslashit(get_permalink()) . 'trackback/'; + + return $tb_url; +} +function trackback_url( $display = true ) { + if ( $display) + echo get_trackback_url(); + else + return get_trackback_url(); +} + +function trackback_rdf($timezone = 0) { + global $id; + if (!stristr($_SERVER['HTTP_USER_AGENT'], 'W3C_Validator')) { + echo ' + \n"; + echo ''; + } +} + +function comments_open() { + global $post; + if ( 'open' == $post->comment_status ) + return true; + else + return false; +} + +function pings_open() { + global $post; + if ( 'open' == $post->ping_status ) + return true; + else + return false; +} + +function comments_template( $file = '/comments.php' ) { + global $wp_query, $withcomments, $post, $wpdb, $id, $comment, $user_login, $user_ID, $user_identity; + + if ( is_single() || is_page() || $withcomments ) : + $req = get_settings('require_name_email'); + $comment_author = ''; + if ( isset($_COOKIE['comment_author_'.COOKIEHASH]) ) { + $comment_author = apply_filters('pre_comment_author_name', $_COOKIE['comment_author_'.COOKIEHASH]); + $comment_author = stripslashes($comment_author); + $comment_author = wp_specialchars($comment_author, true); + } + $comment_author_email = ''; + if ( isset($_COOKIE['comment_author_email_'.COOKIEHASH]) ) { + $comment_author_email = apply_filters('pre_comment_author_email', $_COOKIE['comment_author_email_'.COOKIEHASH]); + $comment_author_email = stripslashes($comment_author_email); + $comment_author_email = wp_specialchars($comment_author_email, true); + } + $comment_author_url = ''; + if ( isset($_COOKIE['comment_author_url_'.COOKIEHASH]) ) { + $comment_author_url = apply_filters('pre_comment_author_url', $_COOKIE['comment_author_url_'.COOKIEHASH]); + $comment_author_url = stripslashes($comment_author_url); + $comment_author_url = wp_specialchars($comment_author_url, true); + } + + // TODO: Use API instead of SELECTs. + if ( empty($comment_author) ) { + $comments = $wpdb->get_results("SELECT * FROM $wpdb->comments WHERE comment_post_ID = '$post->ID' AND comment_approved = '1' ORDER BY comment_date"); + } else { + $author_db = $wpdb->escape($comment_author); + $email_db = $wpdb->escape($comment_author_email); + $comments = $wpdb->get_results("SELECT * FROM $wpdb->comments WHERE comment_post_ID = '$post->ID' AND ( comment_approved = '1' OR ( comment_author = '$author_db' AND comment_author_email = '$email_db' AND comment_approved = '0' ) ) ORDER BY comment_date"); + } + + define('COMMENTS_TEMPLATE', true); + $include = apply_filters('comments_template', TEMPLATEPATH . $file ); + if ( file_exists( $include ) ) + require( $include ); + else + require( ABSPATH . 'wp-content/themes/default/comments.php'); + + endif; +} + +function comments_popup_script($width=400, $height=400, $file='') { + global $wpcommentspopupfile, $wptrackbackpopupfile, $wppingbackpopupfile, $wpcommentsjavascript; + + if (empty ($file)) { + $wpcommentspopupfile = ''; // Use the index. + } else { + $wpcommentspopupfile = $file; + } + + $wpcommentsjavascript = 1; + $javascript = "\n"; + echo $javascript; +} + +function comments_popup_link($zero='No Comments', $one='1 Comment', $more='% Comments', $CSSclass='', $none='Comments Off') { + global $id, $wpcommentspopupfile, $wpcommentsjavascript, $post, $wpdb; + global $comment_count_cache; + + if (! is_single() && ! is_page()) { + // TODO: Use API instead of SELECT + if ( !isset($comment_count_cache[$id]) ) + $comment_count_cache[$id] = $wpdb->get_var("SELECT COUNT(comment_ID) FROM $wpdb->comments WHERE comment_post_ID = $id AND comment_approved = '1';"); + + $number = $comment_count_cache[$id]; + + if (0 == $number && 'closed' == $post->comment_status && 'closed' == $post->ping_status) { + echo $none; + return; + } else { + if (!empty($post->post_password)) { // if there's a password + if ($_COOKIE['wp-postpass_'.COOKIEHASH] != $post->post_password) { // and it doesn't match the cookie + echo(__('Enter your password to view comments')); + return; + } + } + echo ''; + comments_number($zero, $one, $more, $number); + echo ''; + } + } +} + +?> diff --git a/wp-includes/comment-functions.php b/wp-includes/comment.php similarity index 64% rename from wp-includes/comment-functions.php rename to wp-includes/comment.php index f322c871b9..a5acdd3836 100644 --- a/wp-includes/comment-functions.php +++ b/wp-includes/comment.php @@ -1,125 +1,147 @@ get_results("SELECT * FROM $wpdb->comments WHERE comment_post_ID = '$post->ID' AND comment_approved = '1' ORDER BY comment_date"); - } else { - $author_db = $wpdb->escape($comment_author); - $email_db = $wpdb->escape($comment_author_email); - $comments = $wpdb->get_results("SELECT * FROM $wpdb->comments WHERE comment_post_ID = '$post->ID' AND ( comment_approved = '1' OR ( comment_author = '$author_db' AND comment_author_email = '$email_db' AND comment_approved = '0' ) ) ORDER BY comment_date"); - } - - define('COMMENTS_TEMPLATE', true); - $include = apply_filters('comments_template', TEMPLATEPATH . $file ); - if ( file_exists( $include ) ) - require( $include ); - else - require( ABSPATH . 'wp-content/themes/default/comments.php'); - - endif; -} - -function wp_new_comment( $commentdata ) { - $commentdata = apply_filters('preprocess_comment', $commentdata); - - $commentdata['comment_post_ID'] = (int) $commentdata['comment_post_ID']; - $commentdata['user_ID'] = (int) $commentdata['user_ID']; - - $commentdata['comment_author_IP'] = $_SERVER['REMOTE_ADDR']; - $commentdata['comment_agent'] = $_SERVER['HTTP_USER_AGENT']; - - $commentdata['comment_date'] = current_time('mysql'); - $commentdata['comment_date_gmt'] = current_time('mysql', 1); - - - $commentdata = wp_filter_comment($commentdata); - - $commentdata['comment_approved'] = wp_allow_comment($commentdata); - - $comment_ID = wp_insert_comment($commentdata); - - do_action('comment_post', $comment_ID, $commentdata['comment_approved']); - - if ( 'spam' !== $commentdata['comment_approved'] ) { // If it's spam save it silently for later crunching - if ( '0' == $commentdata['comment_approved'] ) - wp_notify_moderator($comment_ID); - - $post = &get_post($commentdata['comment_post_ID']); // Don't notify if it's your own comment - - if ( get_settings('comments_notify') && $commentdata['comment_approved'] && $post->post_author != $commentdata['user_ID'] ) - wp_notify_postauthor($comment_ID, $commentdata['comment_type']); - } - - return $comment_ID; -} - -function wp_insert_comment($commentdata) { +function check_comment($author, $email, $url, $comment, $user_ip, $user_agent, $comment_type) { global $wpdb; - extract($commentdata); - if ( ! isset($comment_author_IP) ) - $comment_author_IP = $_SERVER['REMOTE_ADDR']; - if ( ! isset($comment_date) ) - $comment_date = current_time('mysql'); - if ( ! isset($comment_date_gmt) ) - $comment_date_gmt = gmdate('Y-m-d H:i:s', strtotime($comment_date) ); - if ( ! isset($comment_parent) ) - $comment_parent = 0; - if ( ! isset($comment_approved) ) - $comment_approved = 1; - if ( ! isset($user_id) ) - $user_id = 0; + if (1 == get_settings('comment_moderation')) return false; // If moderation is set to manual - $result = $wpdb->query("INSERT INTO $wpdb->comments - (comment_post_ID, comment_author, comment_author_email, comment_author_url, comment_author_IP, comment_date, comment_date_gmt, comment_content, comment_approved, comment_agent, comment_type, comment_parent, user_id) - VALUES - ('$comment_post_ID', '$comment_author', '$comment_author_email', '$comment_author_url', '$comment_author_IP', '$comment_date', '$comment_date_gmt', '$comment_content', '$comment_approved', '$comment_agent', '$comment_type', '$comment_parent', '$user_id') - "); + if ( (count(explode('http:', $comment)) - 1) >= get_settings('comment_max_links') ) + return false; // Check # of external links - $id = $wpdb->insert_id; + $mod_keys = trim( get_settings('moderation_keys') ); + if ( !empty($mod_keys) ) { + $words = explode("\n", $mod_keys ); - if ( $comment_approved == 1) { - $count = $wpdb->get_var("SELECT COUNT(*) FROM $wpdb->comments WHERE comment_post_ID = '$comment_post_ID' AND comment_approved = '1'"); - $wpdb->query( "UPDATE $wpdb->posts SET comment_count = $count WHERE ID = '$comment_post_ID'" ); + foreach ($words as $word) { + $word = trim($word); + + // Skip empty lines + if (empty($word)) { continue; } + + // Do some escaping magic so that '#' chars in the + // spam words don't break things: + $word = preg_quote($word, '#'); + + $pattern = "#$word#i"; + if ( preg_match($pattern, $author) ) return false; + if ( preg_match($pattern, $email) ) return false; + if ( preg_match($pattern, $url) ) return false; + if ( preg_match($pattern, $comment) ) return false; + if ( preg_match($pattern, $user_ip) ) return false; + if ( preg_match($pattern, $user_agent) ) return false; + } } - return $id; + + // Comment whitelisting: + if ( 1 == get_settings('comment_whitelist')) { + if ( 'trackback' == $comment_type || 'pingback' == $comment_type ) { // check if domain is in blogroll + $uri = parse_url($url); + $domain = $uri['host']; + $uri = parse_url( get_option('home') ); + $home_domain = $uri['host']; + if ( $wpdb->get_var("SELECT link_id FROM $wpdb->links WHERE link_url LIKE ('%$domain%') LIMIT 1") || $domain == $home_domain ) + return true; + else + return false; + } elseif( $author != '' && $email != '' ) { + $ok_to_comment = $wpdb->get_var("SELECT comment_approved FROM $wpdb->comments WHERE comment_author = '$author' AND comment_author_email = '$email' and comment_approved = '1' LIMIT 1"); + if ( ( 1 == $ok_to_comment ) && + ( empty($mod_keys) || false === strpos( $email, $mod_keys) ) ) + return true; + else + return false; + } else { + return false; + } + } + + return true; } -function wp_filter_comment($commentdata) { - $commentdata['user_id'] = apply_filters('pre_user_id', $commentdata['user_ID']); - $commentdata['comment_agent'] = apply_filters('pre_comment_user_agent', $commentdata['comment_agent']); - $commentdata['comment_author'] = apply_filters('pre_comment_author_name', $commentdata['comment_author']); - $commentdata['comment_content'] = apply_filters('pre_comment_content', $commentdata['comment_content']); - $commentdata['comment_author_IP'] = apply_filters('pre_comment_user_ip', $commentdata['comment_author_IP']); - $commentdata['comment_author_url'] = apply_filters('pre_comment_author_url', $commentdata['comment_author_url']); - $commentdata['comment_author_email'] = apply_filters('pre_comment_author_email', $commentdata['comment_author_email']); - $commentdata['filtered'] = true; - return $commentdata; +function get_approved_comments($post_id) { + global $wpdb; + return $wpdb->get_results("SELECT * FROM $wpdb->comments WHERE comment_post_ID = $post_id AND comment_approved = '1' ORDER BY comment_date"); +} + +// Retrieves comment data given a comment ID or comment object. +// Handles comment caching. +function &get_comment(&$comment, $output = OBJECT) { + global $comment_cache, $wpdb; + + if ( empty($comment) ) + return null; + + if ( is_object($comment) ) { + if ( !isset($comment_cache[$comment->comment_ID]) ) + $comment_cache[$comment->comment_ID] = &$comment; + $_comment = & $comment_cache[$comment->comment_ID]; + } else { + if ( !isset($comment_cache[$comment]) ) { + $_comment = $wpdb->get_row("SELECT * FROM $wpdb->comments WHERE comment_ID = '$comment' LIMIT 1"); + $comment_cache[$comment->comment_ID] = & $_comment; + } else { + $_comment = & $comment_cache[$comment]; + } + } + + if ( $output == OBJECT ) { + return $_comment; + } elseif ( $output == ARRAY_A ) { + return get_object_vars($_comment); + } elseif ( $output == ARRAY_N ) { + return array_values(get_object_vars($_comment)); + } else { + return $_comment; + } +} + +// Deprecate in favor of get_comment()? +function get_commentdata( $comment_ID, $no_cache = 0, $include_unapproved = false ) { // less flexible, but saves DB queries + global $postc, $id, $commentdata, $wpdb; + if ($no_cache) { + $query = "SELECT * FROM $wpdb->comments WHERE comment_ID = '$comment_ID'"; + if (false == $include_unapproved) { + $query .= " AND comment_approved = '1'"; + } + $myrow = $wpdb->get_row($query, ARRAY_A); + } else { + $myrow['comment_ID'] = $postc->comment_ID; + $myrow['comment_post_ID'] = $postc->comment_post_ID; + $myrow['comment_author'] = $postc->comment_author; + $myrow['comment_author_email'] = $postc->comment_author_email; + $myrow['comment_author_url'] = $postc->comment_author_url; + $myrow['comment_author_IP'] = $postc->comment_author_IP; + $myrow['comment_date'] = $postc->comment_date; + $myrow['comment_content'] = $postc->comment_content; + $myrow['comment_karma'] = $postc->comment_karma; + $myrow['comment_approved'] = $postc->comment_approved; + $myrow['comment_type'] = $postc->comment_type; + } + return $myrow; +} + +function get_lastcommentmodified($timezone = 'server') { + global $cache_lastcommentmodified, $pagenow, $wpdb; + $add_seconds_blog = get_settings('gmt_offset') * 3600; + $add_seconds_server = date('Z'); + $now = current_time('mysql', 1); + if ( !isset($cache_lastcommentmodified[$timezone]) ) { + switch(strtolower($timezone)) { + case 'gmt': + $lastcommentmodified = $wpdb->get_var("SELECT comment_date_gmt FROM $wpdb->comments WHERE comment_date_gmt <= '$now' ORDER BY comment_date_gmt DESC LIMIT 1"); + break; + case 'blog': + $lastcommentmodified = $wpdb->get_var("SELECT comment_date FROM $wpdb->comments WHERE comment_date_gmt <= '$now' ORDER BY comment_date_gmt DESC LIMIT 1"); + break; + case 'server': + $lastcommentmodified = $wpdb->get_var("SELECT DATE_ADD(comment_date_gmt, INTERVAL '$add_seconds_server' SECOND) FROM $wpdb->comments WHERE comment_date_gmt <= '$now' ORDER BY comment_date_gmt DESC LIMIT 1"); + break; + } + $cache_lastcommentmodified[$timezone] = $lastcommentmodified; + } else { + $lastcommentmodified = $cache_lastcommentmodified[$timezone]; + } + return $lastcommentmodified; } function wp_allow_comment($commentdata) { @@ -171,6 +193,151 @@ function wp_allow_comment($commentdata) { return $approved; } +function wp_delete_comment($comment_id) { + global $wpdb; + do_action('delete_comment', $comment_id); + + $comment = get_comment($comment_id); + + if ( ! $wpdb->query("DELETE FROM $wpdb->comments WHERE comment_ID='$comment_id' LIMIT 1") ) + return false; + + $post_id = $comment->comment_post_ID; + if ( $post_id && $comment->comment_approved == 1 ) + $wpdb->query( "UPDATE $wpdb->posts SET comment_count = comment_count - 1 WHERE ID = '$post_id'" ); + + do_action('wp_set_comment_status', $comment_id, 'delete'); + return true; +} + +function wp_get_comment_status($comment_id) { + global $wpdb; + + $result = $wpdb->get_var("SELECT comment_approved FROM $wpdb->comments WHERE comment_ID='$comment_id' LIMIT 1"); + if ($result == NULL) { + return 'deleted'; + } else if ($result == '1') { + return 'approved'; + } else if ($result == '0') { + return 'unapproved'; + } else if ($result == 'spam') { + return 'spam'; + } else { + return false; + } +} + +function wp_insert_comment($commentdata) { + global $wpdb; + extract($commentdata); + + if ( ! isset($comment_author_IP) ) + $comment_author_IP = $_SERVER['REMOTE_ADDR']; + if ( ! isset($comment_date) ) + $comment_date = current_time('mysql'); + if ( ! isset($comment_date_gmt) ) + $comment_date_gmt = gmdate('Y-m-d H:i:s', strtotime($comment_date) ); + if ( ! isset($comment_parent) ) + $comment_parent = 0; + if ( ! isset($comment_approved) ) + $comment_approved = 1; + if ( ! isset($user_id) ) + $user_id = 0; + + $result = $wpdb->query("INSERT INTO $wpdb->comments + (comment_post_ID, comment_author, comment_author_email, comment_author_url, comment_author_IP, comment_date, comment_date_gmt, comment_content, comment_approved, comment_agent, comment_type, comment_parent, user_id) + VALUES + ('$comment_post_ID', '$comment_author', '$comment_author_email', '$comment_author_url', '$comment_author_IP', '$comment_date', '$comment_date_gmt', '$comment_content', '$comment_approved', '$comment_agent', '$comment_type', '$comment_parent', '$user_id') + "); + + $id = $wpdb->insert_id; + + if ( $comment_approved == 1) { + $count = $wpdb->get_var("SELECT COUNT(*) FROM $wpdb->comments WHERE comment_post_ID = '$comment_post_ID' AND comment_approved = '1'"); + $wpdb->query( "UPDATE $wpdb->posts SET comment_count = $count WHERE ID = '$comment_post_ID'" ); + } + return $id; +} + +function wp_filter_comment($commentdata) { + $commentdata['user_id'] = apply_filters('pre_user_id', $commentdata['user_ID']); + $commentdata['comment_agent'] = apply_filters('pre_comment_user_agent', $commentdata['comment_agent']); + $commentdata['comment_author'] = apply_filters('pre_comment_author_name', $commentdata['comment_author']); + $commentdata['comment_content'] = apply_filters('pre_comment_content', $commentdata['comment_content']); + $commentdata['comment_author_IP'] = apply_filters('pre_comment_user_ip', $commentdata['comment_author_IP']); + $commentdata['comment_author_url'] = apply_filters('pre_comment_author_url', $commentdata['comment_author_url']); + $commentdata['comment_author_email'] = apply_filters('pre_comment_author_email', $commentdata['comment_author_email']); + $commentdata['filtered'] = true; + return $commentdata; +} + +function wp_new_comment( $commentdata ) { + $commentdata = apply_filters('preprocess_comment', $commentdata); + + $commentdata['comment_post_ID'] = (int) $commentdata['comment_post_ID']; + $commentdata['user_ID'] = (int) $commentdata['user_ID']; + + $commentdata['comment_author_IP'] = $_SERVER['REMOTE_ADDR']; + $commentdata['comment_agent'] = $_SERVER['HTTP_USER_AGENT']; + + $commentdata['comment_date'] = current_time('mysql'); + $commentdata['comment_date_gmt'] = current_time('mysql', 1); + + + $commentdata = wp_filter_comment($commentdata); + + $commentdata['comment_approved'] = wp_allow_comment($commentdata); + + $comment_ID = wp_insert_comment($commentdata); + + do_action('comment_post', $comment_ID, $commentdata['comment_approved']); + + if ( 'spam' !== $commentdata['comment_approved'] ) { // If it's spam save it silently for later crunching + if ( '0' == $commentdata['comment_approved'] ) + wp_notify_moderator($comment_ID); + + $post = &get_post($commentdata['comment_post_ID']); // Don't notify if it's your own comment + + if ( get_settings('comments_notify') && $commentdata['comment_approved'] && $post->post_author != $commentdata['user_ID'] ) + wp_notify_postauthor($comment_ID, $commentdata['comment_type']); + } + + return $comment_ID; +} + +function wp_set_comment_status($comment_id, $comment_status) { + global $wpdb; + + switch($comment_status) { + case 'hold': + $query = "UPDATE $wpdb->comments SET comment_approved='0' WHERE comment_ID='$comment_id' LIMIT 1"; + break; + case 'approve': + $query = "UPDATE $wpdb->comments SET comment_approved='1' WHERE comment_ID='$comment_id' LIMIT 1"; + break; + case 'spam': + $query = "UPDATE $wpdb->comments SET comment_approved='spam' WHERE comment_ID='$comment_id' LIMIT 1"; + break; + case 'delete': + return wp_delete_comment($comment_id); + break; + default: + return false; + } + + if ($wpdb->query($query)) { + do_action('wp_set_comment_status', $comment_id, $comment_status); + + $comment = get_comment($comment_id); + $comment_post_ID = $comment->comment_post_ID; + $c = $wpdb->get_row( "SELECT count(*) as c FROM {$wpdb->comments} WHERE comment_post_ID = '$comment_post_ID' AND comment_approved = '1'" ); + if( is_object( $c ) ) + $wpdb->query( "UPDATE $wpdb->posts SET comment_count = '$c->c' WHERE ID = '$comment_post_ID'" ); + return true; + } else { + return false; + } +} function wp_update_comment($commentarr) { global $wpdb; @@ -213,392 +380,6 @@ function wp_update_comment($commentarr) { return $rval; } -function wp_delete_comment($comment_id) { - global $wpdb; - do_action('delete_comment', $comment_id); - - $comment = get_comment($comment_id); - - if ( ! $wpdb->query("DELETE FROM $wpdb->comments WHERE comment_ID='$comment_id' LIMIT 1") ) - return false; - - $post_id = $comment->comment_post_ID; - if ( $post_id && $comment->comment_approved == 1 ) - $wpdb->query( "UPDATE $wpdb->posts SET comment_count = comment_count - 1 WHERE ID = '$post_id'" ); - - do_action('wp_set_comment_status', $comment_id, 'delete'); - return true; -} - -function get_comments_number( $post_id = 0 ) { - global $wpdb, $comment_count_cache, $id; - $post_id = (int) $post_id; - - if ( !$post_id ) - $post_id = $id; - - if ( !isset($comment_count_cache[$post_id]) ) - $comment_count_cache[$id] = $wpdb->get_var("SELECT comment_count FROM $wpdb->posts WHERE ID = '$post_id'"); - - return apply_filters('get_comments_number', $comment_count_cache[$post_id]); -} - -function comments_number( $zero = 'No Comments', $one = '1 Comment', $more = '% Comments', $number = '' ) { - global $id, $comment; - $number = get_comments_number( $id ); - if ($number == 0) { - $blah = $zero; - } elseif ($number == 1) { - $blah = $one; - } elseif ($number > 1) { - $blah = str_replace('%', $number, $more); - } - echo apply_filters('comments_number', $blah); -} - -function get_comments_link() { - return get_permalink() . '#comments'; -} - -function get_comment_link() { - global $comment; - return get_permalink( $comment->comment_post_ID ) . '#comment-' . $comment->comment_ID; -} - -function comments_link( $file = '', $echo = true ) { - echo get_comments_link(); -} - -function comments_popup_script($width=400, $height=400, $file='') { - global $wpcommentspopupfile, $wptrackbackpopupfile, $wppingbackpopupfile, $wpcommentsjavascript; - - if (empty ($file)) { - $wpcommentspopupfile = ''; // Use the index. - } else { - $wpcommentspopupfile = $file; - } - - $wpcommentsjavascript = 1; - $javascript = "\n"; - echo $javascript; -} - -function comments_popup_link($zero='No Comments', $one='1 Comment', $more='% Comments', $CSSclass='', $none='Comments Off') { - global $id, $wpcommentspopupfile, $wpcommentsjavascript, $post, $wpdb; - global $comment_count_cache; - - if (! is_single() && ! is_page()) { - if ( !isset($comment_count_cache[$id]) ) - $comment_count_cache[$id] = $wpdb->get_var("SELECT COUNT(comment_ID) FROM $wpdb->comments WHERE comment_post_ID = $id AND comment_approved = '1';"); - - $number = $comment_count_cache[$id]; - - if (0 == $number && 'closed' == $post->comment_status && 'closed' == $post->ping_status) { - echo $none; - return; - } else { - if (!empty($post->post_password)) { // if there's a password - if ($_COOKIE['wp-postpass_'.COOKIEHASH] != $post->post_password) { // and it doesn't match the cookie - echo(__('Enter your password to view comments')); - return; - } - } - echo ''; - comments_number($zero, $one, $more, $number); - echo ''; - } - } -} - -function get_comment_ID() { - global $comment; - return apply_filters('get_comment_ID', $comment->comment_ID); -} - -function comment_ID() { - echo get_comment_ID(); -} - -function get_comment_author() { - global $comment; - if ( empty($comment->comment_author) ) - $author = __('Anonymous'); - else - $author = $comment->comment_author; - return apply_filters('get_comment_author', $author); -} - -function comment_author() { - $author = apply_filters('comment_author', get_comment_author() ); - echo $author; -} - -function get_comment_author_email() { - global $comment; - return apply_filters('get_comment_author_email', $comment->comment_author_email); -} - -function comment_author_email() { - echo apply_filters('author_email', get_comment_author_email() ); -} - -function get_comment_author_link() { - global $comment; - $url = get_comment_author_url(); - $author = get_comment_author(); - - if ( empty( $url ) || 'http://' == $url ) - $return = $author; - else - $return = "$author"; - return apply_filters('get_comment_author_link', $return); -} - -function comment_author_link() { - echo get_comment_author_link(); -} - -function get_comment_type() { - global $comment; - - if ( '' == $comment->comment_type ) - $comment->comment_type = 'comment'; - - return apply_filters('get_comment_type', $comment->comment_type); -} - -function comment_type($commenttxt = 'Comment', $trackbacktxt = 'Trackback', $pingbacktxt = 'Pingback') { - $type = get_comment_type(); - switch( $type ) { - case 'trackback' : - echo $trackbacktxt; - break; - case 'pingback' : - echo $pingbacktxt; - break; - default : - echo $commenttxt; - } -} - -function get_comment_author_url() { - global $comment; - return apply_filters('get_comment_author_url', $comment->comment_author_url); -} - -function comment_author_url() { - echo apply_filters('comment_url', get_comment_author_url()); -} - -function comment_author_email_link($linktext='', $before='', $after='') { - global $comment; - $email = apply_filters('comment_email', $comment->comment_author_email); - if ((!empty($email)) && ($email != '@')) { - $display = ($linktext != '') ? $linktext : $email; - echo $before; - echo "$display"; - echo $after; - } -} - -function get_comment_author_url_link( $linktext = '', $before = '', $after = '' ) { - global $comment; - $url = get_comment_author_url(); - $display = ($linktext != '') ? $linktext : $url; - $return = "$before$display$after"; - return apply_filters('get_comment_author_url_link', $return); -} - -function comment_author_url_link( $linktext = '', $before = '', $after = '' ) { - echo get_comment_author_url_link( $linktext, $before, $after ); -} - -function get_comment_author_IP() { - global $comment; - return apply_filters('get_comment_author_IP', $comment->comment_author_IP); -} - -function comment_author_IP() { - echo get_comment_author_IP(); -} - -function get_comment_text() { - global $comment; - return apply_filters('get_comment_text', $comment->comment_content); -} - -function comment_text() { - echo apply_filters('comment_text', get_comment_text() ); -} - -function get_comment_excerpt() { - global $comment; - $comment_text = strip_tags($comment->comment_content); - $blah = explode(' ', $comment_text); - if (count($blah) > 20) { - $k = 20; - $use_dotdotdot = 1; - } else { - $k = count($blah); - $use_dotdotdot = 0; - } - $excerpt = ''; - for ($i=0; $i<$k; $i++) { - $excerpt .= $blah[$i] . ' '; - } - $excerpt .= ($use_dotdotdot) ? '...' : ''; - return apply_filters('get_comment_excerpt', $excerpt); -} - -function comment_excerpt() { - echo apply_filters('comment_excerpt', get_comment_excerpt() ); -} - -function get_comment_date( $d = '' ) { - global $comment; - if ( '' == $d ) - $date = mysql2date( get_settings('date_format'), $comment->comment_date); - else - $date = mysql2date($d, $comment->comment_date); - return apply_filters('get_comment_date', $date); -} - -function comment_date( $d = '' ) { - echo get_comment_date( $d ); -} - -function get_comment_time( $d = '', $gmt = false ) { - global $comment; - $comment_date = $gmt? $comment->comment_date_gmt : $comment->comment_date; - if ( '' == $d ) - $date = mysql2date(get_settings('time_format'), $comment_date); - else - $date = mysql2date($d, $comment_date); - return apply_filters('get_comment_time', $date); -} - -function comment_time( $d = '' ) { - echo get_comment_time($d); -} - -function get_trackback_url() { - global $id; - $tb_url = get_settings('siteurl') . '/wp-trackback.php?p=' . $id; - - if ( '' != get_settings('permalink_structure') ) - $tb_url = trailingslashit(get_permalink()) . 'trackback/'; - - return $tb_url; -} -function trackback_url( $display = true ) { - if ( $display) - echo get_trackback_url(); - else - return get_trackback_url(); -} - -function trackback_rdf($timezone = 0) { - global $id; - if (!stristr($_SERVER['HTTP_USER_AGENT'], 'W3C_Validator')) { - echo ' - \n"; - echo ''; - } -} - -function comments_open() { - global $post; - if ( 'open' == $post->comment_status ) - return true; - else - return false; -} - -function pings_open() { - global $post; - if ( 'open' == $post->ping_status ) - return true; - else - return false; -} - -// Non-template functions - -function get_lastcommentmodified($timezone = 'server') { - global $cache_lastcommentmodified, $pagenow, $wpdb; - $add_seconds_blog = get_settings('gmt_offset') * 3600; - $add_seconds_server = date('Z'); - $now = current_time('mysql', 1); - if ( !isset($cache_lastcommentmodified[$timezone]) ) { - switch(strtolower($timezone)) { - case 'gmt': - $lastcommentmodified = $wpdb->get_var("SELECT comment_date_gmt FROM $wpdb->comments WHERE comment_date_gmt <= '$now' ORDER BY comment_date_gmt DESC LIMIT 1"); - break; - case 'blog': - $lastcommentmodified = $wpdb->get_var("SELECT comment_date FROM $wpdb->comments WHERE comment_date_gmt <= '$now' ORDER BY comment_date_gmt DESC LIMIT 1"); - break; - case 'server': - $lastcommentmodified = $wpdb->get_var("SELECT DATE_ADD(comment_date_gmt, INTERVAL '$add_seconds_server' SECOND) FROM $wpdb->comments WHERE comment_date_gmt <= '$now' ORDER BY comment_date_gmt DESC LIMIT 1"); - break; - } - $cache_lastcommentmodified[$timezone] = $lastcommentmodified; - } else { - $lastcommentmodified = $cache_lastcommentmodified[$timezone]; - } - return $lastcommentmodified; -} - -function get_commentdata( $comment_ID, $no_cache = 0, $include_unapproved = false ) { // less flexible, but saves DB queries - global $postc, $id, $commentdata, $wpdb; - if ($no_cache) { - $query = "SELECT * FROM $wpdb->comments WHERE comment_ID = '$comment_ID'"; - if (false == $include_unapproved) { - $query .= " AND comment_approved = '1'"; - } - $myrow = $wpdb->get_row($query, ARRAY_A); - } else { - $myrow['comment_ID'] = $postc->comment_ID; - $myrow['comment_post_ID'] = $postc->comment_post_ID; - $myrow['comment_author'] = $postc->comment_author; - $myrow['comment_author_email'] = $postc->comment_author_email; - $myrow['comment_author_url'] = $postc->comment_author_url; - $myrow['comment_author_IP'] = $postc->comment_author_IP; - $myrow['comment_date'] = $postc->comment_date; - $myrow['comment_content'] = $postc->comment_content; - $myrow['comment_karma'] = $postc->comment_karma; - $myrow['comment_approved'] = $postc->comment_approved; - $myrow['comment_type'] = $postc->comment_type; - } - return $myrow; -} - function pingback($content, $post_ID) { global $wp_version, $wpdb; include_once (ABSPATH . WPINC . '/class-IXR.php'); @@ -782,118 +563,4 @@ function is_local_attachment($url) { return false; } -function wp_set_comment_status($comment_id, $comment_status) { - global $wpdb; - - switch($comment_status) { - case 'hold': - $query = "UPDATE $wpdb->comments SET comment_approved='0' WHERE comment_ID='$comment_id' LIMIT 1"; - break; - case 'approve': - $query = "UPDATE $wpdb->comments SET comment_approved='1' WHERE comment_ID='$comment_id' LIMIT 1"; - break; - case 'spam': - $query = "UPDATE $wpdb->comments SET comment_approved='spam' WHERE comment_ID='$comment_id' LIMIT 1"; - break; - case 'delete': - return wp_delete_comment($comment_id); - break; - default: - return false; - } - - if ($wpdb->query($query)) { - do_action('wp_set_comment_status', $comment_id, $comment_status); - - $comment = get_comment($comment_id); - $comment_post_ID = $comment->comment_post_ID; - $c = $wpdb->get_row( "SELECT count(*) as c FROM {$wpdb->comments} WHERE comment_post_ID = '$comment_post_ID' AND comment_approved = '1'" ); - if( is_object( $c ) ) - $wpdb->query( "UPDATE $wpdb->posts SET comment_count = '$c->c' WHERE ID = '$comment_post_ID'" ); - return true; - } else { - return false; - } -} - -function wp_get_comment_status($comment_id) { - global $wpdb; - - $result = $wpdb->get_var("SELECT comment_approved FROM $wpdb->comments WHERE comment_ID='$comment_id' LIMIT 1"); - if ($result == NULL) { - return 'deleted'; - } else if ($result == '1') { - return 'approved'; - } else if ($result == '0') { - return 'unapproved'; - } else if ($result == 'spam') { - return 'spam'; - } else { - return false; - } -} - -function check_comment($author, $email, $url, $comment, $user_ip, $user_agent, $comment_type) { - global $wpdb; - - if (1 == get_settings('comment_moderation')) return false; // If moderation is set to manual - - if ( (count(explode('http:', $comment)) - 1) >= get_settings('comment_max_links') ) - return false; // Check # of external links - - $mod_keys = trim( get_settings('moderation_keys') ); - if ( !empty($mod_keys) ) { - $words = explode("\n", $mod_keys ); - - foreach ($words as $word) { - $word = trim($word); - - // Skip empty lines - if (empty($word)) { continue; } - - // Do some escaping magic so that '#' chars in the - // spam words don't break things: - $word = preg_quote($word, '#'); - - $pattern = "#$word#i"; - if ( preg_match($pattern, $author) ) return false; - if ( preg_match($pattern, $email) ) return false; - if ( preg_match($pattern, $url) ) return false; - if ( preg_match($pattern, $comment) ) return false; - if ( preg_match($pattern, $user_ip) ) return false; - if ( preg_match($pattern, $user_agent) ) return false; - } - } - - // Comment whitelisting: - if ( 1 == get_settings('comment_whitelist')) { - if ( 'trackback' == $comment_type || 'pingback' == $comment_type ) { // check if domain is in blogroll - $uri = parse_url($url); - $domain = $uri['host']; - $uri = parse_url( get_option('home') ); - $home_domain = $uri['host']; - if ( $wpdb->get_var("SELECT link_id FROM $wpdb->links WHERE link_url LIKE ('%$domain%') LIMIT 1") || $domain == $home_domain ) - return true; - else - return false; - } elseif( $author != '' && $email != '' ) { - $ok_to_comment = $wpdb->get_var("SELECT comment_approved FROM $wpdb->comments WHERE comment_author = '$author' AND comment_author_email = '$email' and comment_approved = '1' LIMIT 1"); - if ( ( 1 == $ok_to_comment ) && - ( empty($mod_keys) || false === strpos( $email, $mod_keys) ) ) - return true; - else - return false; - } else { - return false; - } - } - - return true; -} - -function get_approved_comments($post_id) { - global $wpdb; - return $wpdb->get_results("SELECT * FROM $wpdb->comments WHERE comment_post_ID = $post_id AND comment_approved = '1' ORDER BY comment_date"); -} - ?> diff --git a/wp-includes/functions.php b/wp-includes/functions.php index d9fd803111..5d0750e2c1 100644 --- a/wp-includes/functions.php +++ b/wp-includes/functions.php @@ -690,38 +690,6 @@ function &get_category(&$category, $output = OBJECT) { } } -// Retrieves comment data given a comment ID or comment object. -// Handles comment caching. -function &get_comment(&$comment, $output = OBJECT) { - global $comment_cache, $wpdb; - - if ( empty($comment) ) - return null; - - if ( is_object($comment) ) { - if ( !isset($comment_cache[$comment->comment_ID]) ) - $comment_cache[$comment->comment_ID] = &$comment; - $_comment = & $comment_cache[$comment->comment_ID]; - } else { - if ( !isset($comment_cache[$comment]) ) { - $_comment = $wpdb->get_row("SELECT * FROM $wpdb->comments WHERE comment_ID = '$comment' LIMIT 1"); - $comment_cache[$comment->comment_ID] = & $_comment; - } else { - $_comment = & $comment_cache[$comment]; - } - } - - if ( $output == OBJECT ) { - return $_comment; - } elseif ( $output == ARRAY_A ) { - return get_object_vars($_comment); - } elseif ( $output == ARRAY_N ) { - return array_values(get_object_vars($_comment)); - } else { - return $_comment; - } -} - function get_catname($cat_ID) { $category = &get_category($cat_ID); return $category->cat_name; diff --git a/wp-settings.php b/wp-settings.php index 6fa867e036..5eedd1a390 100644 --- a/wp-settings.php +++ b/wp-settings.php @@ -109,9 +109,6 @@ if ( file_exists(ABSPATH . 'wp-content/object-cache.php') ) else require (ABSPATH . WPINC . '/cache.php'); -// To disable persistant caching, add the below line to your wp-config.php file, uncommented of course. -// define('DISABLE_CACHE', true); - wp_cache_init(); require (ABSPATH . WPINC . '/functions.php'); @@ -125,7 +122,6 @@ if ( !is_blog_installed() && (!strstr($_SERVER['PHP_SELF'], 'install.php') && !d $link = 'wp-admin/install.php'; die(sprintf(__("It doesn't look like you've installed WP yet. Try running install.php."), $link)); } -$wpdb->show_errors(); require (ABSPATH . WPINC . '/functions-formatting.php'); require (ABSPATH . WPINC . '/functions-post.php'); @@ -138,7 +134,8 @@ require (ABSPATH . WPINC . '/template-functions-links.php'); require (ABSPATH . WPINC . '/template-functions-author.php'); require (ABSPATH . WPINC . '/template-functions-post.php'); require (ABSPATH . WPINC . '/template-functions-category.php'); -require (ABSPATH . WPINC . '/comment-functions.php'); +require (ABSPATH . WPINC . '/comment.php'); +require (ABSPATH . WPINC . '/comment-template.php'); require (ABSPATH . WPINC . '/rewrite.php'); require (ABSPATH . WPINC . '/feed-functions.php'); require (ABSPATH . WPINC . '/template-functions-bookmarks.php');