Changeset 1964
- Timestamp:
- 12/16/2004 02:57:05 AM (20 years ago)
- Location:
- trunk
- Files:
-
- 1 added
- 1 deleted
- 13 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/wp-admin/admin.php
r1947 r1964 17 17 $date_format = get_settings('date_format'); 18 18 $time_format = get_settings('time_format'); 19 20 function add_magic_quotes($array) {21 foreach ($array as $k => $v) {22 if (is_array($v)) {23 $array[$k] = add_magic_quotes($v);24 } else {25 $array[$k] = addslashes($v);26 }27 }28 return $array;29 }30 31 if (!get_magic_quotes_gpc()) {32 $_GET = add_magic_quotes($_GET);33 $_POST = add_magic_quotes($_POST);34 $_COOKIE = add_magic_quotes($_COOKIE);35 }36 19 37 20 $wpvarstoreset = array('profile','redirect','redirect_url','a','popuptitle','popupurl','text', 'trackback', 'pingback'); -
trunk/wp-comments-post.php
r1854 r1964 2 2 require( dirname(__FILE__) . '/wp-config.php' ); 3 3 4 function add_magic_quotes($array) { 5 foreach ($array as $k => $v) { 6 if (is_array($v)) { 7 $array[$k] = add_magic_quotes($v); 8 } else { 9 $array[$k] = addslashes($v); 10 } 11 } 12 return $array; 13 } 14 15 if (!get_magic_quotes_gpc()) { 16 $_POST = add_magic_quotes($_POST); 17 $_COOKIE = add_magic_quotes($_COOKIE); 18 $_SERVER = add_magic_quotes($_SERVER); 19 } 20 21 $author = trim(strip_tags($_POST['author'])); 22 23 $email = trim(strip_tags($_POST['email'])); 24 if (strlen($email) < 6) 25 $email = ''; 26 27 $url = trim(strip_tags($_POST['url'])); 28 $url = ((!stristr($url, '://')) && ($url != '')) ? 'http://'.$url : $url; 29 if (strlen($url) < 7) 30 $url = ''; 31 32 $user_agent = $_SERVER['HTTP_USER_AGENT']; 33 34 $comment = trim($_POST['comment']); 35 $comment_post_ID = intval($_POST['comment_post_ID']); 36 $user_ip = $_SERVER['REMOTE_ADDR']; 4 $comment_post_ID = (int) $_POST['comment_post_ID']; 37 5 38 6 $post_status = $wpdb->get_var("SELECT comment_status FROM $wpdb->posts WHERE ID = '$comment_post_ID'"); 39 7 40 8 if ( empty($post_status) ) { 41 // Post does not exist. Someone is trolling. Die silently.42 // (Perhaps offer pluggable rebukes? Long delays, etc.)43 die(); 44 } else if ( 'closed' == $post_status ) { 9 do_action('comment_id_not_found', $comment_post_ID); 10 exit; 11 } elseif ( 'closed' == $post_status ) { 12 do_action('comment_closed', $comment_post_ID); 45 13 die( __('Sorry, comments are closed for this item.') ); 46 14 } 15 16 $comment_author = $_POST['author']; 17 $comment_author_email = $_POST['email']; 18 $comment_author_url = $_POST['url']; 19 $comment_content = $_POST['comment']; 20 21 $comment_type = ''; 22 23 $user_ip = apply_filters('pre_comment_user_ip', $_SERVER['REMOTE_ADDR']); 47 24 48 25 if ( get_settings('require_name_email') && ('' == $email || '' == $author) ) … … 52 29 die( __('Error: please type a comment.') ); 53 30 31 $commentdata = compact('comment_post_ID', 'comment_author', 'comment_author_email', 'comment_author_url', 'comment_content', 'comment_type'); 54 32 55 $now = current_time('mysql'); 56 $now_gmt = current_time('mysql', 1); 57 58 $comment = format_to_post($comment); 59 $comment = apply_filters('post_comment_text', $comment); 60 61 // Simple flood-protection 62 $lasttime = $wpdb->get_var("SELECT comment_date FROM $wpdb->comments WHERE comment_author_IP = '$user_ip' ORDER BY comment_date DESC LIMIT 1"); 63 if (!empty($lasttime)) { 64 $time_lastcomment= mysql2date('U', $lasttime); 65 $time_newcomment= mysql2date('U', $now); 66 if (($time_newcomment - $time_lastcomment) < 10) 67 die( __('Sorry, you can only post a new comment once every 10 seconds. Slow down cowboy.') ); 68 } 69 70 71 // If we've made it this far, let's post. 72 73 if( check_comment($author, $email, $url, $comment, $user_ip, $user_agent) ) { 74 $approved = 1; 75 } else { 76 $approved = 0; 77 } 78 79 $wpdb->query("INSERT INTO $wpdb->comments 80 (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) 81 VALUES 82 ('$comment_post_ID', '$author', '$email', '$url', '$user_ip', '$now', '$now_gmt', '$comment', '$approved', '$user_agent') 83 "); 84 85 $comment_ID = $wpdb->insert_id; 86 87 do_action('comment_post', $comment_ID); 88 89 if (!$approved) { 90 wp_notify_moderator($comment_ID); 91 } 92 93 if ((get_settings('comments_notify')) && ($approved)) { 94 wp_notify_postauthor($comment_ID, 'comment'); 95 } 33 wp_new_comment($commentdata); 96 34 97 35 setcookie('comment_author_' . COOKIEHASH, stripslashes($author), time() + 30000000, COOKIEPATH); … … 99 37 setcookie('comment_author_url_' . COOKIEHASH, stripslashes($url), time() + 30000000, COOKIEPATH); 100 38 101 header('Expires: Mon, 26 Jul 199705:00:00 GMT');39 header('Expires: Mon, 11 Jan 1984 05:00:00 GMT'); 102 40 header('Last-Modified: ' . gmdate('D, d M Y H:i:s') . ' GMT'); 103 41 header('Cache-Control: no-cache, must-revalidate'); -
trunk/wp-includes/functions-formatting.php
r1940 r1964 547 547 } 548 548 549 function sanitize_email($email) { 550 return preg_replace('/[^a-z0-9+_.@-]/i', '', $email); 551 } 552 549 553 ?> -
trunk/wp-includes/functions-post.php
r1940 r1964 383 383 384 384 385 function wp_new_comment($commentdata) { 386 global $wpdb; 385 function wp_new_comment( $commentdata ) { 386 global $wpdb; 387 387 388 extract($commentdata); 388 389 389 390 $comment_post_ID = (int) $comment_post_ID; 390 391 391 $comment_author = strip_tags($comment_author); 392 $comment_author = wp_specialchars($comment_author); 393 394 $comment_author_email = preg_replace('/[^a-z+_.@-]/i', '', $comment_author_email); 395 396 $comment_author_url = strip_tags($comment_author_url); 397 $comment_author_url = wp_specialchars($comment_author_url); 398 399 $comment_content = apply_filters('comment_content_presave', $comment_content); 400 401 $user_ip = addslashes($_SERVER['REMOTE_ADDR']); 402 $user_domain = addslashes( gethostbyaddr($user_ip) ); 403 $now = current_time('mysql'); 392 $author = apply_filters('pre_comment_author_name', $comment_author); 393 $email = apply_filters('pre_comment_author_email', $comment_author_email); 394 $url = apply_filters('pre_comment_author_url', $comment_author_url); 395 $comment = apply_filters('pre_comment_content', $comment_content); 396 $comment = apply_filters('post_comment_text', $comment); // Deprecated 397 $comment = apply_filters('comment_content_presave', $comment_content); // Deprecated 398 399 $user_ip = apply_filters('pre_comment_user_ip', $_SERVER['REMOTE_ADDR']); 400 $user_domain = apply_filters('pre_comment_user_domain', gethostbyaddr($user_ip) ); 401 $user_agent = apply_filters('pre_comment_user_agent', $_SERVER['HTTP_USER_AGENT']); 402 403 $now = current_time('mysql'); 404 404 $now_gmt = current_time('mysql', 1); 405 $user_agent = addslashes($_SERVER['HTTP_USER_AGENT']);406 407 if ( (!isset($comment_type)) || (($comment_type != 'trackback') && ($comment_type != 'pingback')) ) {408 $comment_type = '';409 }410 405 411 406 // Simple flood-protection 412 if ( $lasttime = $wpdb->get_var("SELECT comment_date FROM $wpdb->comments WHERE comment_author_IP = '$user_ip' ORDER BY comment_date DESC LIMIT 1") ) {413 $time_lastcomment = mysql2date('U', $lasttime);414 $time_newcomment = mysql2date('U', $now);407 if ( $lasttime = $wpdb->get_var("SELECT comment_date_gmt FROM $wpdb->comments WHERE comment_author_IP = '$user_ip' OR comment_author_email = '$email' ORDER BY comment_date DESC LIMIT 1") ) { 408 $time_lastcomment = mysql2date('U', $lasttime); 409 $time_newcomment = mysql2date('U', $now_gmt); 415 410 if ( ($time_newcomment - $time_lastcomment) < 15 ) 416 411 die( __('Sorry, you can only post a new comment once every 15 seconds. Slow down cowboy.') ); 417 412 } 418 413 419 if( check_comment($ comment_author, $comment_author_email, $comment_author_url, $comment_content, $user_ip, $user_agent) )414 if( check_comment($author, $email, $url, $comment, $user_ip, $user_agent) ) 420 415 $approved = 1; 421 416 else … … 428 423 "); 429 424 430 if ( get_option('comments_notify') ) 431 wp_notify_postauthor($wpdb->insert_id, $comment_type); 425 $comment_id = $wpdb->insert_id; 426 do_action('comment_post', $comment_id); 427 428 if ( !$approved ) 429 wp_notify_moderator($comment_ID); 430 431 if ( get_settings('comments_notify') && $approved ) 432 wp_notify_postauthor($comment_ID, 'comment'); 432 433 433 434 return $result; -
trunk/wp-includes/functions.php
r1947 r1964 143 143 } 144 144 return $lastpostmodified; 145 }146 147 function get_lastcommentmodified($timezone = 'server') {148 global $tablecomments, $cache_lastcommentmodified, $pagenow, $wpdb;149 $add_seconds_blog = get_settings('gmt_offset') * 3600;150 $add_seconds_server = date('Z');151 $now = current_time('mysql', 1);152 if ( !isset($cache_lastcommentmodified[$timezone]) ) {153 switch(strtolower($timezone)) {154 case 'gmt':155 $lastcommentmodified = $wpdb->get_var("SELECT comment_date_gmt FROM $tablecomments WHERE comment_date_gmt <= '$now' ORDER BY comment_date_gmt DESC LIMIT 1");156 break;157 case 'blog':158 $lastcommentmodified = $wpdb->get_var("SELECT comment_date FROM $tablecomments WHERE comment_date_gmt <= '$now' ORDER BY comment_date_gmt DESC LIMIT 1");159 break;160 case 'server':161 $lastcommentmodified = $wpdb->get_var("SELECT DATE_ADD(comment_date_gmt, INTERVAL '$add_seconds_server' SECOND) FROM $tablecomments WHERE comment_date_gmt <= '$now' ORDER BY comment_date_gmt DESC LIMIT 1");162 break;163 }164 $cache_lastcommentmodified[$timezone] = $lastcommentmodified;165 } else {166 $lastcommentmodified = $cache_lastcommentmodified[$timezone];167 }168 return $lastcommentmodified;169 145 } 170 146 … … 551 527 ); 552 528 return $postdata; 553 }554 555 function get_commentdata($comment_ID,$no_cache=0,$include_unapproved=false) { // less flexible, but saves DB queries556 global $postc,$id,$commentdata, $wpdb;557 if ($no_cache) {558 $query = "SELECT * FROM $wpdb->comments WHERE comment_ID = '$comment_ID'";559 if (false == $include_unapproved) {560 $query .= " AND comment_approved = '1'";561 }562 $myrow = $wpdb->get_row($query, ARRAY_A);563 } else {564 $myrow['comment_ID']=$postc->comment_ID;565 $myrow['comment_post_ID']=$postc->comment_post_ID;566 $myrow['comment_author']=$postc->comment_author;567 $myrow['comment_author_email']=$postc->comment_author_email;568 $myrow['comment_author_url']=$postc->comment_author_url;569 $myrow['comment_author_IP']=$postc->comment_author_IP;570 $myrow['comment_date']=$postc->comment_date;571 $myrow['comment_content']=$postc->comment_content;572 $myrow['comment_karma']=$postc->comment_karma;573 $myrow['comment_approved']=$postc->comment_approved;574 if (strstr($myrow['comment_content'], '<trackback />')) {575 $myrow['comment_type'] = 'trackback';576 } elseif (strstr($myrow['comment_content'], '<pingback />')) {577 $myrow['comment_type'] = 'pingback';578 } else {579 $myrow['comment_type'] = 'comment';580 }581 }582 return $myrow;583 529 } 584 530 … … 846 792 } 847 793 848 function pingback($content, $post_ID) {849 global $wp_version, $wpdb;850 include_once (ABSPATH . WPINC . '/class-IXR.php');851 852 // original code by Mort (http://mort.mine.nu:8080)853 $log = debug_fopen(ABSPATH . '/pingback.log', 'a');854 $post_links = array();855 debug_fwrite($log, 'BEGIN '.date('YmdHis', time())."\n");856 857 $pung = get_pung($post_ID);858 859 // Variables860 $ltrs = '\w';861 $gunk = '/#~:.?+=&%@!\-';862 $punc = '.:?\-';863 $any = $ltrs . $gunk . $punc;864 865 // Step 1866 // Parsing the post, external links (if any) are stored in the $post_links array867 // This regexp comes straight from phpfreaks.com868 // http://www.phpfreaks.com/quickcode/Extract_All_URLs_on_a_Page/15.php869 preg_match_all("{\b http : [$any] +? (?= [$punc] * [^$any] | $)}x", $content, $post_links_temp);870 871 // Debug872 debug_fwrite($log, 'Post contents:');873 debug_fwrite($log, $content."\n");874 875 // Step 2.876 // Walking thru the links array877 // first we get rid of links pointing to sites, not to specific files878 // Example:879 // http://dummy-weblog.org880 // http://dummy-weblog.org/881 // http://dummy-weblog.org/post.php882 // We don't wanna ping first and second types, even if they have a valid <link/>883 884 foreach($post_links_temp[0] as $link_test) :885 if ( !in_array($link_test, $pung) ) : // If we haven't pung it already886 $test = parse_url($link_test);887 if (isset($test['query']))888 $post_links[] = $link_test;889 elseif(($test['path'] != '/') && ($test['path'] != ''))890 $post_links[] = $link_test;891 endif;892 endforeach;893 894 foreach ($post_links as $pagelinkedto){895 debug_fwrite($log, "Processing -- $pagelinkedto\n");896 $pingback_server_url = discover_pingback_server_uri($pagelinkedto, 2048);897 898 if ($pingback_server_url) {899 set_time_limit( 60 );900 // Now, the RPC call901 debug_fwrite($log, "Page Linked To: $pagelinkedto \n");902 debug_fwrite($log, 'Page Linked From: ');903 $pagelinkedfrom = get_permalink($post_ID);904 debug_fwrite($log, $pagelinkedfrom."\n");905 906 // using a timeout of 3 seconds should be enough to cover slow servers907 $client = new IXR_Client($pingback_server_url);908 $client->timeout = 3;909 $client->useragent .= ' -- WordPress/' . $wp_version;910 911 // when set to true, this outputs debug messages by itself912 $client->debug = false;913 $client->query('pingback.ping', array($pagelinkedfrom, $pagelinkedto));914 915 if ( !$client->query('pingback.ping', array($pagelinkedfrom, $pagelinkedto) ) )916 debug_fwrite($log, "Error.\n Fault code: ".$client->getErrorCode()." : ".$client->getErrorMessage()."\n");917 else918 add_ping( $post_ID, $pagelinkedto );919 }920 }921 922 debug_fwrite($log, "\nEND: ".time()."\n****************************\n");923 debug_fclose($log);924 }925 926 function discover_pingback_server_uri($url, $timeout_bytes = 2048) {927 928 $byte_count = 0;929 $contents = '';930 $headers = '';931 $pingback_str_dquote = 'rel="pingback"';932 $pingback_str_squote = 'rel=\'pingback\'';933 $x_pingback_str = 'x-pingback: ';934 $pingback_href_original_pos = 27;935 936 extract(parse_url($url));937 938 if (!isset($host)) {939 // Not an URL. This should never happen.940 return false;941 }942 943 $path = (!isset($path)) ? '/' : $path;944 $path .= (isset($query)) ? '?'.$query : '';945 $port = (isset($port)) ? $port : 80;946 947 // Try to connect to the server at $host948 $fp = @fsockopen($host, $port, $errno, $errstr, 2);949 if (!$fp) {950 // Couldn't open a connection to $host;951 return false;952 }953 954 // Send the GET request955 $request = "GET $path HTTP/1.1\r\nHost: $host\r\nUser-Agent: WordPress/$wp_version PHP/" . phpversion() . "\r\n\r\n";956 ob_end_flush();957 fputs($fp, $request);958 959 // Let's check for an X-Pingback header first960 while (!feof($fp)) {961 $line = fgets($fp, 512);962 if (trim($line) == '') {963 break;964 }965 $headers .= trim($line)."\n";966 $x_pingback_header_offset = strpos(strtolower($headers), $x_pingback_str);967 if ($x_pingback_header_offset) {968 // We got it!969 preg_match('#x-pingback: (.+)#is', $headers, $matches);970 $pingback_server_url = trim($matches[1]);971 return $pingback_server_url;972 }973 if(strpos(strtolower($headers), 'content-type: ')) {974 preg_match('#content-type: (.+)#is', $headers, $matches);975 $content_type = trim($matches[1]);976 }977 }978 979 if (preg_match('#(image|audio|video|model)/#is', $content_type)) {980 // Not an (x)html, sgml, or xml page, no use going further981 return false;982 }983 984 while (!feof($fp)) {985 $line = fgets($fp, 1024);986 $contents .= trim($line);987 $pingback_link_offset_dquote = strpos($contents, $pingback_str_dquote);988 $pingback_link_offset_squote = strpos($contents, $pingback_str_squote);989 if ($pingback_link_offset_dquote || $pingback_link_offset_squote) {990 $quote = ($pingback_link_offset_dquote) ? '"' : '\'';991 $pingback_link_offset = ($quote=='"') ? $pingback_link_offset_dquote : $pingback_link_offset_squote;992 $pingback_href_pos = @strpos($contents, 'href=', $pingback_link_offset);993 $pingback_href_start = $pingback_href_pos+6;994 $pingback_href_end = @strpos($contents, $quote, $pingback_href_start);995 $pingback_server_url_len = $pingback_href_end - $pingback_href_start;996 $pingback_server_url = substr($contents, $pingback_href_start, $pingback_server_url_len);997 // We may find rel="pingback" but an incomplete pingback URI998 if ($pingback_server_url_len > 0) {999 // We got it!1000 return $pingback_server_url;1001 }1002 }1003 $byte_count += strlen($line);1004 if ($byte_count > $timeout_bytes) {1005 // It's no use going further, there probably isn't any pingback1006 // server to find in this file. (Prevents loading large files.)1007 return false;1008 }1009 }1010 1011 // We didn't find anything.1012 return false;1013 }1014 1015 1016 /* wp_set_comment_status:1017 part of otaku42's comment moderation hack1018 changes the status of a comment according to $comment_status.1019 allowed values:1020 hold : set comment_approve field to 01021 approve: set comment_approve field to 11022 delete : remove comment out of database1023 1024 returns true if change could be applied1025 returns false on database error or invalid value for $comment_status1026 */1027 function wp_set_comment_status($comment_id, $comment_status) {1028 global $wpdb;1029 1030 switch($comment_status) {1031 case 'hold':1032 $query = "UPDATE $wpdb->comments SET comment_approved='0' WHERE comment_ID='$comment_id' LIMIT 1";1033 break;1034 case 'approve':1035 $query = "UPDATE $wpdb->comments SET comment_approved='1' WHERE comment_ID='$comment_id' LIMIT 1";1036 break;1037 case 'delete':1038 $query = "DELETE FROM $wpdb->comments WHERE comment_ID='$comment_id' LIMIT 1";1039 break;1040 default:1041 return false;1042 }1043 1044 if ($wpdb->query($query)) {1045 do_action('wp_set_comment_status', $comment_id);1046 return true;1047 } else {1048 return false;1049 }1050 }1051 1052 1053 /* wp_get_comment_status1054 part of otaku42's comment moderation hack1055 gets the current status of a comment1056 1057 returned values:1058 "approved" : comment has been approved1059 "unapproved": comment has not been approved1060 "deleted ": comment not found in database1061 1062 a (boolean) false signals an error1063 */1064 function wp_get_comment_status($comment_id) {1065 global $wpdb;1066 1067 $result = $wpdb->get_var("SELECT comment_approved FROM $wpdb->comments WHERE comment_ID='$comment_id' LIMIT 1");1068 if ($result == NULL) {1069 return "deleted";1070 } else if ($result == "1") {1071 return "approved";1072 } else if ($result == "0") {1073 return "unapproved";1074 } else {1075 return false;1076 }1077 }1078 1079 function wp_notify_postauthor($comment_id, $comment_type='comment') {1080 global $wpdb;1081 global $querystring_start, $querystring_equal, $querystring_separator;1082 1083 $comment = $wpdb->get_row("SELECT * FROM $wpdb->comments WHERE comment_ID='$comment_id' LIMIT 1");1084 $post = $wpdb->get_row("SELECT * FROM $wpdb->posts WHERE ID='$comment->comment_post_ID' LIMIT 1");1085 $user = $wpdb->get_row("SELECT * FROM $wpdb->users WHERE ID='$post->post_author' LIMIT 1");1086 1087 if ('' == $user->user_email) return false; // If there's no email to send the comment to1088 1089 $comment_author_domain = gethostbyaddr($comment->comment_author_IP);1090 1091 $blogname = get_settings('blogname');1092 1093 if ('comment' == $comment_type) {1094 $notify_message = "New comment on your post #$comment->comment_post_ID \"".$post->post_title."\"\r\n\r\n";1095 $notify_message .= "Author : $comment->comment_author (IP: $comment->comment_author_IP , $comment_author_domain)\r\n";1096 $notify_message .= "E-mail : $comment->comment_author_email\r\n";1097 $notify_message .= "URI : $comment->comment_author_url\r\n";1098 $notify_message .= "Whois : http://ws.arin.net/cgi-bin/whois.pl?queryinput=$comment->comment_author_IP\r\n";1099 $notify_message .= "Comment:\r\n".$comment->comment_content."\r\n\r\n";1100 $notify_message .= "You can see all comments on this post here: \r\n";1101 $subject = '[' . $blogname . '] Comment: "' .$post->post_title.'"';1102 } elseif ('trackback' == $comment_type) {1103 $notify_message = "New trackback on your post #$comment_post_ID \"".$post->post_title."\"\r\n\r\n";1104 $notify_message .= "Website: $comment->comment_author (IP: $comment->comment_author_IP , $comment_author_domain)\r\n";1105 $notify_message .= "URI : $comment->comment_author_url\r\n";1106 $notify_message .= "Excerpt: \n".$comment->comment_content."\r\n\r\n";1107 $notify_message .= "You can see all trackbacks on this post here: \r\n";1108 $subject = '[' . $blogname . '] Trackback: "' .$post->post_title.'"';1109 } elseif ('pingback' == $comment_type) {1110 $notify_message = "New pingback on your post #$comment_post_ID \"".$post->post_title."\"\r\n\r\n";1111 $notify_message .= "Website: $comment->comment_author\r\n";1112 $notify_message .= "URI : $comment->comment_author_url\r\n";1113 $notify_message .= "Excerpt: \n[...] $original_context [...]\r\n\r\n";1114 $notify_message .= "You can see all pingbacks on this post here: \r\n";1115 $subject = '[' . $blogname . '] Pingback: "' .$post->post_title.'"';1116 }1117 $notify_message .= get_permalink($comment->comment_post_ID) . '#comments';1118 1119 if ('' == $comment->comment_author_email || '' == $comment->comment_author) {1120 $from = "From: \"$blogname\" <wordpress@" . $_SERVER['SERVER_NAME'] . '>';1121 } else {1122 $from = 'From: "' . $comment->comment_author . "\" <$comment->comment_author_email>";1123 }1124 1125 $message_headers = "MIME-Version: 1.0\n"1126 . "$from\n"1127 . "Content-Type: text/plain; charset=\"" . get_settings('blog_charset') . "\"\n";1128 1129 @wp_mail($user->user_email, $subject, $notify_message, $message_headers);1130 1131 return true;1132 }1133 1134 /* wp_notify_moderator1135 notifies the moderator of the blog (usually the admin)1136 about a new comment that waits for approval1137 always returns true1138 */1139 function wp_notify_moderator($comment_id) {1140 global $wpdb;1141 global $querystring_start, $querystring_equal, $querystring_separator;1142 1143 if( get_settings( "moderation_notify" ) == 0 )1144 return true;1145 1146 $comment = $wpdb->get_row("SELECT * FROM $wpdb->comments WHERE comment_ID='$comment_id' LIMIT 1");1147 $post = $wpdb->get_row("SELECT * FROM $wpdb->posts WHERE ID='$comment->comment_post_ID' LIMIT 1");1148 $user = $wpdb->get_row("SELECT * FROM $wpdb->users WHERE ID='$post->post_author' LIMIT 1");1149 1150 $comment_author_domain = gethostbyaddr($comment->comment_author_IP);1151 $comments_waiting = $wpdb->get_var("SELECT count(comment_ID) FROM $wpdb->comments WHERE comment_approved = '0'");1152 1153 $notify_message = "A new comment on the post #$comment->comment_post_ID \"".$post->post_title."\" is waiting for your approval\r\n\r\n";1154 $notify_message .= "Author : $comment->comment_author (IP: $comment->comment_author_IP , $comment_author_domain)\r\n";1155 $notify_message .= "E-mail : $comment->comment_author_email\r\n";1156 $notify_message .= "URL : $comment->comment_author_url\r\n";1157 $notify_message .= "Whois : http://ws.arin.net/cgi-bin/whois.pl?queryinput=$comment->comment_author_IP\r\n";1158 $notify_message .= "Comment:\r\n".$comment->comment_content."\r\n\r\n";1159 $notify_message .= "To approve this comment, visit: " . get_settings('siteurl') . "/wp-admin/post.php?action=mailapprovecomment&p=".$comment->comment_post_ID."&comment=$comment_id\r\n";1160 $notify_message .= "To delete this comment, visit: " . get_settings('siteurl') . "/wp-admin/post.php?action=confirmdeletecomment&p=".$comment->comment_post_ID."&comment=$comment_id\r\n";1161 $notify_message .= "Currently $comments_waiting comments are waiting for approval. Please visit the moderation panel:\r\n";1162 $notify_message .= get_settings('siteurl') . "/wp-admin/moderation.php\r\n";1163 1164 $subject = '[' . get_settings('blogname') . '] Please approve: "' .$post->post_title.'"';1165 $admin_email = get_settings("admin_email");1166 $from = "From: $admin_email";1167 1168 $message_headers = "MIME-Version: 1.0\n"1169 . "$from\n"1170 . "Content-Type: text/plain; charset=\"" . get_settings('blog_charset') . "\"\n";1171 1172 @wp_mail($admin_email, $subject, $notify_message, $message_headers);1173 1174 return true;1175 }1176 1177 1178 794 function start_wp($use_wp_query = false) { 1179 795 global $post, $id, $postdata, $authordata, $day, $preview, $page, $pages, $multipage, $more, $numpages, $wp_query; … … 1342 958 1343 959 return $posts; 1344 }1345 1346 function check_comment($author, $email, $url, $comment, $user_ip, $user_agent) {1347 global $wpdb;1348 1349 if (1 == get_settings('comment_moderation')) return false; // If moderation is set to manual1350 1351 if ( (count(explode('http:', $comment)) - 1) >= get_settings('comment_max_links') )1352 return false; // Check # of external links1353 1354 // Comment whitelisting:1355 if ( 1 == get_settings('comment_whitelist')) {1356 if( $author != '' && $email != '' ) {1357 $ok_to_comment = $wpdb->get_var("SELECT comment_approved FROM $wpdb->comments WHERE comment_author_email = '$email' and comment_approved = '1' ");1358 if ( 1 == $ok_to_comment && false === strpos( $email, get_settings('moderation_keys')) )1359 return true;1360 } else {1361 return false;1362 }1363 }1364 1365 // Useless numeric encoding is a pretty good spam indicator:1366 // Extract entities:1367 if (preg_match_all('/&#(\d+);/',$comment,$chars)) {1368 foreach ($chars[1] as $char) {1369 // If it's an encoded char in the normal ASCII set, reject1370 if ($char < 128)1371 return false;1372 }1373 }1374 1375 $mod_keys = trim( get_settings('moderation_keys') );1376 if ('' == $mod_keys )1377 return true; // If moderation keys are empty1378 $words = explode("\n", $mod_keys );1379 1380 foreach ($words as $word) {1381 $word = trim($word);1382 1383 // Skip empty lines1384 if (empty($word)) { continue; }1385 1386 // Do some escaping magic so that '#' chars in the1387 // spam words don't break things:1388 $word = preg_quote($word, '#');1389 1390 $pattern = "#$word#i";1391 if ( preg_match($pattern, $author) ) return false;1392 if ( preg_match($pattern, $email) ) return false;1393 if ( preg_match($pattern, $url) ) return false;1394 if ( preg_match($pattern, $comment) ) return false;1395 if ( preg_match($pattern, $user_ip) ) return false;1396 if ( preg_match($pattern, $user_agent) ) return false;1397 }1398 1399 return true;1400 960 } 1401 961 … … 2085 1645 include($file); 2086 1646 } 1647 1648 function add_magic_quotes($array) { 1649 foreach ($array as $k => $v) { 1650 if (is_array($v)) { 1651 $array[$k] = add_magic_quotes($v); 1652 } else { 1653 $array[$k] = addslashes($v); 1654 } 1655 } 1656 return $array; 1657 } 1658 2087 1659 ?> -
trunk/wp-includes/kses.php
r1253 r1964 562 562 } 563 563 564 // Filter untrusted content565 add_filter('comment_author', 'wp_filter_kses');566 add_filter('comment_text', 'wp_filter_kses');567 568 564 ?> -
trunk/wp-includes/vars.php
r1952 r1964 92 92 ); 93 93 $wp_gecko_correction['in'] = array( 94 '/\ â/', '/\â/', '/\â/', '/\â/',95 '/\ â¢/', '/\â/', '/\â/', '/\Ω/',96 '/\ β/', '/\γ/', '/\θ/', '/\λ/',97 '/\ Ï/', '/\â²/', '/\â³/', '/\â/',98 '/\ â¬/', '/\â/'94 '/\‘/', '/\’/', '/\“/', '/\”/', 95 '/\•/', '/\–/', '/\—/', '/\Ω/', 96 '/\β/', '/\γ/', '/\θ/', '/\λ/', 97 '/\π/', '/\′/', '/\″/', '/\/', 98 '/\€/', '/\ /' 99 99 ); 100 100 $wp_gecko_correction['out'] = array( … … 194 194 add_filter('bloginfo', 'wptexturize'); 195 195 196 // Comments, trackbacks, pingbacks 197 add_filter('pre_comment_author_name', 'strip_tags'); 198 add_filter('pre_comment_author_name', 'trim'); 199 add_filter('pre_comment_author_name', 'wp_specialchars', 30); 200 201 add_filter('pre_comment_author_email', 'trim'); 202 add_filter('pre_comment_author_email', 'sanitize_email'); 203 204 add_filter('pre_comment_author_url', 'strip_tags'); 205 add_filter('pre_comment_author_url', 'trim'); 206 add_filter('pre_comment_author_url', 'clean_url'); 207 208 add_filter('pre_comment_content', 'wp_filter_kses'); 209 add_filter('pre_comment_content', 'format_to_post'); 210 add_filter('pre_comment_content', 'balanceTags', 30); 211 212 // Default filters for these functions 213 add_filter('comment_author', 'wptexturize'); 214 add_filter('comment_author', 'convert_chars'); 215 216 add_filter('comment_email', 'antispambot'); 217 218 add_filter('comment_url', 'clean_url'); 219 220 add_filter('comment_text', 'convert_chars'); 221 add_filter('comment_text', 'make_clickable'); 222 add_filter('comment_text', 'wpautop', 30); 223 add_filter('comment_text', 'convert_smilies', 20); 224 225 add_filter('comment_excerpt', 'convert_chars'); 226 227 // Places to balance tags on input 228 add_filter('content_save_pre', 'balanceTags', 50); 229 add_filter('excerpt_save_pre', 'balanceTags', 50); 230 add_filter('comment_save_pre', 'balanceTags', 50); 231 196 232 ?> -
trunk/wp-login.php
r1911 r1964 1 1 <?php 2 require('./wp-config.php'); 3 4 if (!function_exists('add_magic_quotes')) { 5 function add_magic_quotes($array) { 6 foreach ($array as $k => $v) { 7 if (is_array($v)) { 8 $array[$k] = add_magic_quotes($v); 9 } else { 10 $array[$k] = addslashes($v); 11 } 12 } 13 return $array; 14 } 15 } 16 17 if (!get_magic_quotes_gpc()) { 18 $_GET = add_magic_quotes($_GET); 19 $_POST = add_magic_quotes($_POST); 20 $_COOKIE = add_magic_quotes($_COOKIE); 21 } 2 require( dirname(__FILE__) . '/wp-config.php' ); 22 3 23 4 $wpvarstoreset = array('action'); -
trunk/wp-pass.php
r1767 r1964 1 1 <?php 2 require( dirname(__FILE__) . '/wp-config.php');2 require( dirname(__FILE__) . '/wp-config.php'); 3 3 4 4 if ( get_magic_quotes_gpc() ) -
trunk/wp-register.php
r1733 r1964 1 1 <?php 2 2 require('./wp-config.php'); 3 4 function add_magic_quotes($array) {5 foreach ($array as $k => $v) {6 if (is_array($v)) {7 $array[$k] = add_magic_quotes($v);8 } else {9 $array[$k] = addslashes($v);10 }11 }12 return $array;13 }14 15 if (!get_magic_quotes_gpc()) {16 $_GET = add_magic_quotes($_GET);17 $_POST = add_magic_quotes($_POST);18 $_COOKIE = add_magic_quotes($_COOKIE);19 }20 3 21 4 $wpvarstoreset = array('action'); -
trunk/wp-settings.php
r1955 r1964 102 102 define('TEMPLATEPATH', get_template_directory()); 103 103 104 if ( !get_magic_quotes_gpc() ) { 105 $_GET = add_magic_quotes($_GET ); 106 $_POST = add_magic_quotes($_POST ); 107 $_COOKIE = add_magic_quotes($_COOKIE); 108 $_SERVER = add_magic_quotes($_SERVER); 109 } 110 104 111 function shutdown_action_hook() { 105 112 do_action('shutdown', ''); -
trunk/wp-trackback.php
r1940 r1964 1 1 <?php 2 require_once( dirname(__FILE__) . '/wp-config.php' ); 2 3 3 function add_magic_quotes($array) { 4 foreach ($array as $k => $v) { 5 if (is_array($v)) { 6 $array[$k] = add_magic_quotes($v); 7 } else { 8 $array[$k] = addslashes($v); 9 } 10 } 11 return $array; 12 } 13 14 if (!get_magic_quotes_gpc()) { 15 $_GET = add_magic_quotes($_GET); 16 $_POST = add_magic_quotes($_POST); 17 $_COOKIE = add_magic_quotes($_COOKIE); 18 } 19 20 if (empty($doing_trackback)) { 21 $doing_trackback = true; 22 require('wp-blog-header.php'); 4 if ( empty($doing_trackback) ) { 5 $doing_trackback = true; 6 require_once('wp-blog-header.php'); 23 7 } 24 8 … … 42 26 // trackback is done by a POST 43 27 $request_array = 'HTTP_POST_VARS'; 28 44 29 if (!$tb_id) { 45 30 $tb_id = explode('/', $_SERVER['REQUEST_URI']); 46 31 $tb_id = intval($tb_id[count($tb_id)-1]); 47 32 } 48 $tb_url = $_POST['url']; 49 $title = $_POST['title']; 50 $excerpt = $_POST['excerpt']; 33 34 $tb_url = $_POST['url']; 35 $title = $_POST['title']; 36 $excerpt = $_POST['excerpt']; 51 37 $blog_name = $_POST['blog_name']; 52 $charset = $_POST['charset'];38 $charset = $_POST['charset']; 53 39 54 40 if ($charset) … … 57 43 $charset = 'auto'; 58 44 59 if ( function_exists('mb_convert_encoding') ) { 60 $title = mb_convert_encoding($title, get_settings('blog_charset'), $charset);61 $excerpt = mb_convert_encoding($excerpt, get_settings('blog_charset'), $charset);45 if ( function_exists('mb_convert_encoding') ) { // For international trackbacks 46 $title = mb_convert_encoding($title, get_settings('blog_charset'), $charset); 47 $excerpt = mb_convert_encoding($excerpt, get_settings('blog_charset'), $charset); 62 48 $blog_name = mb_convert_encoding($blog_name, get_settings('blog_charset'), $charset); 63 49 } … … 66 52 $tb_id = $posts[0]->ID; 67 53 68 if ( !$tb_id )54 if ( !$tb_id ) 69 55 trackback_response(1, 'I really need an ID for this to work.'); 70 56 … … 80 66 $pingstatus = $wpdb->get_var("SELECT ping_status FROM $wpdb->posts WHERE ID = $tb_id"); 81 67 82 if (' closed' == $pingstatus)68 if ('open' != $pingstatus) 83 69 trackback_response(1, 'Sorry, trackbacks are closed for this item.'); 84 70 … … 87 73 $excerpt = strip_tags($excerpt); 88 74 $excerpt = (strlen($excerpt) > 255) ? substr($excerpt, 0, 252) . '...' : $excerpt; 89 $blog_name = wp_specialchars($blog_name);90 $blog_name = (strlen($blog_name) > 250) ? substr($blog_name, 0, 250) . '...' : $blog_name;91 75 92 76 $comment_post_ID = $tb_id; -
trunk/xmlrpc.php
r1942 r1964 1219 1219 $pagelinkedfrom = addslashes($pagelinkedfrom); 1220 1220 $original_title = $title; 1221 $title = addslashes(strip_tags(trim($title))); 1222 1223 // Check if the entry allows pings 1224 if( !check_comment($title, '', $pagelinkedfrom, $context, $user_ip, $user_agent) ) { 1225 return new IXR_Error(49, 'Pingbacks not allowed on this entry.'); 1226 } 1221 1222 $pingstatus = $wpdb->get_var("SELECT ping_status FROM $wpdb->posts WHERE ID = $tb_id"); 1223 1224 if ('open' != $pingstatus) 1225 trackback_response(1, 'Sorry, trackbacks are closed for this item.'); 1227 1226 1228 1227 $comment_post_ID = $post_ID; … … 1235 1234 1236 1235 wp_new_comment($commentdata); 1237 1238 $comment_ID = $wpdb->insert_id; 1239 1240 do_action('pingback_post', $comment_ID); 1236 do_action('pingback_post', $wpdb->insert_id); 1241 1237 1242 1238 return "Pingback from $pagelinkedfrom to $pagelinkedto registered. Keep the web talking! :-)";
Note: See TracChangeset
for help on using the changeset viewer.