Changeset 3714
- Timestamp:
- 04/19/2006 02:32:12 AM (18 years ago)
- Location:
- trunk
- Files:
-
- 1 added
- 2 edited
- 1 moved
Legend:
- Unmodified
- Added
- Removed
-
trunk/wp-includes/comment.php
r3713 r3714 1 1 <?php 2 3 // Template functions4 5 function comments_template( $file = '/comments.php' ) {6 global $wp_query, $withcomments, $post, $wpdb, $id, $comment, $user_login, $user_ID, $user_identity;7 8 if ( is_single() || is_page() || $withcomments ) :9 $req = get_settings('require_name_email');10 $comment_author = '';11 if ( isset($_COOKIE['comment_author_'.COOKIEHASH]) ) {12 $comment_author = apply_filters('pre_comment_author_name', $_COOKIE['comment_author_'.COOKIEHASH]);13 $comment_author = stripslashes($comment_author);14 $comment_author = wp_specialchars($comment_author, true);15 }16 $comment_author_email = '';17 if ( isset($_COOKIE['comment_author_email_'.COOKIEHASH]) ) {18 $comment_author_email = apply_filters('pre_comment_author_email', $_COOKIE['comment_author_email_'.COOKIEHASH]);19 $comment_author_email = stripslashes($comment_author_email);20 $comment_author_email = wp_specialchars($comment_author_email, true);21 }22 $comment_author_url = '';23 if ( isset($_COOKIE['comment_author_url_'.COOKIEHASH]) ) {24 $comment_author_url = apply_filters('pre_comment_author_url', $_COOKIE['comment_author_url_'.COOKIEHASH]);25 $comment_author_url = stripslashes($comment_author_url);26 $comment_author_url = wp_specialchars($comment_author_url, true);27 }28 29 if ( empty($comment_author) ) {30 $comments = $wpdb->get_results("SELECT * FROM $wpdb->comments WHERE comment_post_ID = '$post->ID' AND comment_approved = '1' ORDER BY comment_date");31 } else {32 $author_db = $wpdb->escape($comment_author);33 $email_db = $wpdb->escape($comment_author_email);34 $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");35 }36 37 define('COMMENTS_TEMPLATE', true);38 $include = apply_filters('comments_template', TEMPLATEPATH . $file );39 if ( file_exists( $include ) )40 require( $include );41 else42 require( ABSPATH . 'wp-content/themes/default/comments.php');43 44 endif;45 }46 47 function wp_new_comment( $commentdata ) {48 $commentdata = apply_filters('preprocess_comment', $commentdata);49 50 $commentdata['comment_post_ID'] = (int) $commentdata['comment_post_ID'];51 $commentdata['user_ID'] = (int) $commentdata['user_ID'];52 53 $commentdata['comment_author_IP'] = $_SERVER['REMOTE_ADDR'];54 $commentdata['comment_agent'] = $_SERVER['HTTP_USER_AGENT'];55 56 $commentdata['comment_date'] = current_time('mysql');57 $commentdata['comment_date_gmt'] = current_time('mysql', 1);58 59 60 $commentdata = wp_filter_comment($commentdata);61 62 $commentdata['comment_approved'] = wp_allow_comment($commentdata);63 64 $comment_ID = wp_insert_comment($commentdata);65 66 do_action('comment_post', $comment_ID, $commentdata['comment_approved']);67 68 if ( 'spam' !== $commentdata['comment_approved'] ) { // If it's spam save it silently for later crunching69 if ( '0' == $commentdata['comment_approved'] )70 wp_notify_moderator($comment_ID);71 72 $post = &get_post($commentdata['comment_post_ID']); // Don't notify if it's your own comment73 74 if ( get_settings('comments_notify') && $commentdata['comment_approved'] && $post->post_author != $commentdata['user_ID'] )75 wp_notify_postauthor($comment_ID, $commentdata['comment_type']);76 }77 78 return $comment_ID;79 }80 81 function wp_insert_comment($commentdata) {82 global $wpdb;83 extract($commentdata);84 85 if ( ! isset($comment_author_IP) )86 $comment_author_IP = $_SERVER['REMOTE_ADDR'];87 if ( ! isset($comment_date) )88 $comment_date = current_time('mysql');89 if ( ! isset($comment_date_gmt) )90 $comment_date_gmt = gmdate('Y-m-d H:i:s', strtotime($comment_date) );91 if ( ! isset($comment_parent) )92 $comment_parent = 0;93 if ( ! isset($comment_approved) )94 $comment_approved = 1;95 if ( ! isset($user_id) )96 $user_id = 0;97 98 $result = $wpdb->query("INSERT INTO $wpdb->comments99 (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)100 VALUES101 ('$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')102 ");103 104 $id = $wpdb->insert_id;105 106 if ( $comment_approved == 1) {107 $count = $wpdb->get_var("SELECT COUNT(*) FROM $wpdb->comments WHERE comment_post_ID = '$comment_post_ID' AND comment_approved = '1'");108 $wpdb->query( "UPDATE $wpdb->posts SET comment_count = $count WHERE ID = '$comment_post_ID'" );109 }110 return $id;111 }112 113 function wp_filter_comment($commentdata) {114 $commentdata['user_id'] = apply_filters('pre_user_id', $commentdata['user_ID']);115 $commentdata['comment_agent'] = apply_filters('pre_comment_user_agent', $commentdata['comment_agent']);116 $commentdata['comment_author'] = apply_filters('pre_comment_author_name', $commentdata['comment_author']);117 $commentdata['comment_content'] = apply_filters('pre_comment_content', $commentdata['comment_content']);118 $commentdata['comment_author_IP'] = apply_filters('pre_comment_user_ip', $commentdata['comment_author_IP']);119 $commentdata['comment_author_url'] = apply_filters('pre_comment_author_url', $commentdata['comment_author_url']);120 $commentdata['comment_author_email'] = apply_filters('pre_comment_author_email', $commentdata['comment_author_email']);121 $commentdata['filtered'] = true;122 return $commentdata;123 }124 125 function wp_allow_comment($commentdata) {126 global $wpdb;127 extract($commentdata);128 129 $comment_user_domain = apply_filters('pre_comment_user_domain', gethostbyaddr($comment_author_IP) );130 131 // Simple duplicate check132 $dupe = "SELECT comment_ID FROM $wpdb->comments WHERE comment_post_ID = '$comment_post_ID' AND ( comment_author = '$comment_author' ";133 if ( $comment_author_email )134 $dupe .= "OR comment_author_email = '$comment_author_email' ";135 $dupe .= ") AND comment_content = '$comment_content' LIMIT 1";136 if ( $wpdb->get_var($dupe) )137 die( __('Duplicate comment detected; it looks as though you\'ve already said that!') );138 139 // Simple flood-protection140 if ( $lasttime = $wpdb->get_var("SELECT comment_date_gmt FROM $wpdb->comments WHERE comment_author_IP = '$comment_author_IP' OR comment_author_email = '$comment_author_email' ORDER BY comment_date DESC LIMIT 1") ) {141 $time_lastcomment = mysql2date('U', $lasttime);142 $time_newcomment = mysql2date('U', $comment_date_gmt);143 if ( ($time_newcomment - $time_lastcomment) < 15 ) {144 do_action('comment_flood_trigger', $time_lastcomment, $time_newcomment);145 die( __('Sorry, you can only post a new comment once every 15 seconds. Slow down cowboy.') );146 }147 }148 149 if ( $user_id ) {150 $userdata = get_userdata($user_id);151 $user = new WP_User($user_id);152 $post_author = $wpdb->get_var("SELECT post_author FROM $wpdb->posts WHERE ID = '$comment_post_ID' LIMIT 1");153 }154 155 // The author and the admins get respect.156 if ( $userdata && ( $user_id == $post_author || $user->has_cap('level_9') ) ) {157 $approved = 1;158 }159 160 // Everyone else's comments will be checked.161 else {162 if ( check_comment($comment_author, $comment_author_email, $comment_author_url, $comment_content, $comment_author_IP, $comment_agent, $comment_type) )163 $approved = 1;164 else165 $approved = 0;166 if ( wp_blacklist_check($comment_author, $comment_author_email, $comment_author_url, $comment_content, $comment_author_IP, $comment_agent) )167 $approved = 'spam';168 }169 170 $approved = apply_filters('pre_comment_approved', $approved);171 return $approved;172 }173 174 175 function wp_update_comment($commentarr) {176 global $wpdb;177 178 // First, get all of the original fields179 $comment = get_comment($commentarr['comment_ID'], ARRAY_A);180 181 // Escape data pulled from DB.182 foreach ($comment as $key => $value)183 $comment[$key] = $wpdb->escape($value);184 185 // Merge old and new fields with new fields overwriting old ones.186 $commentarr = array_merge($comment, $commentarr);187 188 $commentarr = wp_filter_comment( $commentarr );189 190 // Now extract the merged array.191 extract($commentarr);192 193 $comment_content = apply_filters('comment_save_pre', $comment_content);194 195 $result = $wpdb->query(196 "UPDATE $wpdb->comments SET197 comment_content = '$comment_content',198 comment_author = '$comment_author',199 comment_author_email = '$comment_author_email',200 comment_approved = '$comment_approved',201 comment_author_url = '$comment_author_url',202 comment_date = '$comment_date'203 WHERE comment_ID = $comment_ID" );204 205 $rval = $wpdb->rows_affected;206 207 $c = $wpdb->get_row( "SELECT count(*) as c FROM {$wpdb->comments} WHERE comment_post_ID = '$comment_post_ID' AND comment_approved = '1'" );208 if( is_object( $c ) )209 $wpdb->query( "UPDATE $wpdb->posts SET comment_count = '$c->c' WHERE ID = '$comment_post_ID'" );210 211 do_action('edit_comment', $comment_ID);212 213 return $rval;214 }215 216 function wp_delete_comment($comment_id) {217 global $wpdb;218 do_action('delete_comment', $comment_id);219 220 $comment = get_comment($comment_id);221 222 if ( ! $wpdb->query("DELETE FROM $wpdb->comments WHERE comment_ID='$comment_id' LIMIT 1") )223 return false;224 225 $post_id = $comment->comment_post_ID;226 if ( $post_id && $comment->comment_approved == 1 )227 $wpdb->query( "UPDATE $wpdb->posts SET comment_count = comment_count - 1 WHERE ID = '$post_id'" );228 229 do_action('wp_set_comment_status', $comment_id, 'delete');230 return true;231 }232 233 function get_comments_number( $post_id = 0 ) {234 global $wpdb, $comment_count_cache, $id;235 $post_id = (int) $post_id;236 237 if ( !$post_id )238 $post_id = $id;239 240 if ( !isset($comment_count_cache[$post_id]) )241 $comment_count_cache[$id] = $wpdb->get_var("SELECT comment_count FROM $wpdb->posts WHERE ID = '$post_id'");242 243 return apply_filters('get_comments_number', $comment_count_cache[$post_id]);244 }245 246 function comments_number( $zero = 'No Comments', $one = '1 Comment', $more = '% Comments', $number = '' ) {247 global $id, $comment;248 $number = get_comments_number( $id );249 if ($number == 0) {250 $blah = $zero;251 } elseif ($number == 1) {252 $blah = $one;253 } elseif ($number > 1) {254 $blah = str_replace('%', $number, $more);255 }256 echo apply_filters('comments_number', $blah);257 }258 259 function get_comments_link() {260 return get_permalink() . '#comments';261 }262 263 function get_comment_link() {264 global $comment;265 return get_permalink( $comment->comment_post_ID ) . '#comment-' . $comment->comment_ID;266 }267 268 function comments_link( $file = '', $echo = true ) {269 echo get_comments_link();270 }271 272 function comments_popup_script($width=400, $height=400, $file='') {273 global $wpcommentspopupfile, $wptrackbackpopupfile, $wppingbackpopupfile, $wpcommentsjavascript;274 275 if (empty ($file)) {276 $wpcommentspopupfile = ''; // Use the index.277 } else {278 $wpcommentspopupfile = $file;279 }280 281 $wpcommentsjavascript = 1;282 $javascript = "<script type='text/javascript'>\nfunction wpopen (macagna) {\n window.open(macagna, '_blank', 'width=$width,height=$height,scrollbars=yes,status=yes');\n}\n</script>\n";283 echo $javascript;284 }285 286 function comments_popup_link($zero='No Comments', $one='1 Comment', $more='% Comments', $CSSclass='', $none='Comments Off') {287 global $id, $wpcommentspopupfile, $wpcommentsjavascript, $post, $wpdb;288 global $comment_count_cache;289 290 if (! is_single() && ! is_page()) {291 if ( !isset($comment_count_cache[$id]) )292 $comment_count_cache[$id] = $wpdb->get_var("SELECT COUNT(comment_ID) FROM $wpdb->comments WHERE comment_post_ID = $id AND comment_approved = '1';");293 294 $number = $comment_count_cache[$id];295 296 if (0 == $number && 'closed' == $post->comment_status && 'closed' == $post->ping_status) {297 echo $none;298 return;299 } else {300 if (!empty($post->post_password)) { // if there's a password301 if ($_COOKIE['wp-postpass_'.COOKIEHASH] != $post->post_password) { // and it doesn't match the cookie302 echo(__('Enter your password to view comments'));303 return;304 }305 }306 echo '<a href="';307 if ($wpcommentsjavascript) {308 if ( empty($wpcommentspopupfile) )309 $home = get_settings('home');310 else311 $home = get_settings('siteurl');312 echo $home . '/' . $wpcommentspopupfile.'?comments_popup='.$id;313 echo '" onclick="wpopen(this.href); return false"';314 } else { // if comments_popup_script() is not in the template, display simple comment link315 if ( 0 == $number )316 echo get_permalink() . '#respond';317 else318 comments_link();319 echo '"';320 }321 if (!empty($CSSclass)) {322 echo ' class="'.$CSSclass.'"';323 }324 echo ' title="' . sprintf( __('Comment on %s'), $post->post_title ) .'">';325 comments_number($zero, $one, $more, $number);326 echo '</a>';327 }328 }329 }330 331 function get_comment_ID() {332 global $comment;333 return apply_filters('get_comment_ID', $comment->comment_ID);334 }335 336 function comment_ID() {337 echo get_comment_ID();338 }339 340 function get_comment_author() {341 global $comment;342 if ( empty($comment->comment_author) )343 $author = __('Anonymous');344 else345 $author = $comment->comment_author;346 return apply_filters('get_comment_author', $author);347 }348 349 function comment_author() {350 $author = apply_filters('comment_author', get_comment_author() );351 echo $author;352 }353 354 function get_comment_author_email() {355 global $comment;356 return apply_filters('get_comment_author_email', $comment->comment_author_email);357 }358 359 function comment_author_email() {360 echo apply_filters('author_email', get_comment_author_email() );361 }362 363 function get_comment_author_link() {364 global $comment;365 $url = get_comment_author_url();366 $author = get_comment_author();367 368 if ( empty( $url ) || 'http://' == $url )369 $return = $author;370 else371 $return = "<a href='$url' rel='external nofollow'>$author</a>";372 return apply_filters('get_comment_author_link', $return);373 }374 375 function comment_author_link() {376 echo get_comment_author_link();377 }378 379 function get_comment_type() {380 global $comment;381 382 if ( '' == $comment->comment_type )383 $comment->comment_type = 'comment';384 385 return apply_filters('get_comment_type', $comment->comment_type);386 }387 388 function comment_type($commenttxt = 'Comment', $trackbacktxt = 'Trackback', $pingbacktxt = 'Pingback') {389 $type = get_comment_type();390 switch( $type ) {391 case 'trackback' :392 echo $trackbacktxt;393 break;394 case 'pingback' :395 echo $pingbacktxt;396 break;397 default :398 echo $commenttxt;399 }400 }401 402 function get_comment_author_url() {403 global $comment;404 return apply_filters('get_comment_author_url', $comment->comment_author_url);405 }406 407 function comment_author_url() {408 echo apply_filters('comment_url', get_comment_author_url());409 }410 411 function comment_author_email_link($linktext='', $before='', $after='') {412 global $comment;413 $email = apply_filters('comment_email', $comment->comment_author_email);414 if ((!empty($email)) && ($email != '@')) {415 $display = ($linktext != '') ? $linktext : $email;416 echo $before;417 echo "<a href='mailto:$email'>$display</a>";418 echo $after;419 }420 }421 422 function get_comment_author_url_link( $linktext = '', $before = '', $after = '' ) {423 global $comment;424 $url = get_comment_author_url();425 $display = ($linktext != '') ? $linktext : $url;426 $return = "$before<a href='$url' rel='external'>$display</a>$after";427 return apply_filters('get_comment_author_url_link', $return);428 }429 430 function comment_author_url_link( $linktext = '', $before = '', $after = '' ) {431 echo get_comment_author_url_link( $linktext, $before, $after );432 }433 434 function get_comment_author_IP() {435 global $comment;436 return apply_filters('get_comment_author_IP', $comment->comment_author_IP);437 }438 439 function comment_author_IP() {440 echo get_comment_author_IP();441 }442 443 function get_comment_text() {444 global $comment;445 return apply_filters('get_comment_text', $comment->comment_content);446 }447 448 function comment_text() {449 echo apply_filters('comment_text', get_comment_text() );450 }451 452 function get_comment_excerpt() {453 global $comment;454 $comment_text = strip_tags($comment->comment_content);455 $blah = explode(' ', $comment_text);456 if (count($blah) > 20) {457 $k = 20;458 $use_dotdotdot = 1;459 } else {460 $k = count($blah);461 $use_dotdotdot = 0;462 }463 $excerpt = '';464 for ($i=0; $i<$k; $i++) {465 $excerpt .= $blah[$i] . ' ';466 }467 $excerpt .= ($use_dotdotdot) ? '...' : '';468 return apply_filters('get_comment_excerpt', $excerpt);469 }470 471 function comment_excerpt() {472 echo apply_filters('comment_excerpt', get_comment_excerpt() );473 }474 475 function get_comment_date( $d = '' ) {476 global $comment;477 if ( '' == $d )478 $date = mysql2date( get_settings('date_format'), $comment->comment_date);479 else480 $date = mysql2date($d, $comment->comment_date);481 return apply_filters('get_comment_date', $date);482 }483 484 function comment_date( $d = '' ) {485 echo get_comment_date( $d );486 }487 488 function get_comment_time( $d = '', $gmt = false ) {489 global $comment;490 $comment_date = $gmt? $comment->comment_date_gmt : $comment->comment_date;491 if ( '' == $d )492 $date = mysql2date(get_settings('time_format'), $comment_date);493 else494 $date = mysql2date($d, $comment_date);495 return apply_filters('get_comment_time', $date);496 }497 498 function comment_time( $d = '' ) {499 echo get_comment_time($d);500 }501 502 function get_trackback_url() {503 global $id;504 $tb_url = get_settings('siteurl') . '/wp-trackback.php?p=' . $id;505 506 if ( '' != get_settings('permalink_structure') )507 $tb_url = trailingslashit(get_permalink()) . 'trackback/';508 509 return $tb_url;510 }511 function trackback_url( $display = true ) {512 if ( $display)513 echo get_trackback_url();514 else515 return get_trackback_url();516 }517 518 function trackback_rdf($timezone = 0) {519 global $id;520 if (!stristr($_SERVER['HTTP_USER_AGENT'], 'W3C_Validator')) {521 echo '<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"522 xmlns:dc="http://purl.org/dc/elements/1.1/"523 xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/">524 <rdf:Description rdf:about="';525 the_permalink();526 echo '"'."\n";527 echo ' dc:identifier="';528 the_permalink();529 echo '"'."\n";530 echo ' dc:title="'.str_replace('--', '--', wptexturize(strip_tags(get_the_title()))).'"'."\n";531 echo ' trackback:ping="'.trackback_url(0).'"'." />\n";532 echo '</rdf:RDF>';533 }534 }535 536 function comments_open() {537 global $post;538 if ( 'open' == $post->comment_status )539 return true;540 else541 return false;542 }543 544 function pings_open() {545 global $post;546 if ( 'open' == $post->ping_status )547 return true;548 else549 return false;550 }551 552 // Non-template functions553 554 function get_lastcommentmodified($timezone = 'server') {555 global $cache_lastcommentmodified, $pagenow, $wpdb;556 $add_seconds_blog = get_settings('gmt_offset') * 3600;557 $add_seconds_server = date('Z');558 $now = current_time('mysql', 1);559 if ( !isset($cache_lastcommentmodified[$timezone]) ) {560 switch(strtolower($timezone)) {561 case 'gmt':562 $lastcommentmodified = $wpdb->get_var("SELECT comment_date_gmt FROM $wpdb->comments WHERE comment_date_gmt <= '$now' ORDER BY comment_date_gmt DESC LIMIT 1");563 break;564 case 'blog':565 $lastcommentmodified = $wpdb->get_var("SELECT comment_date FROM $wpdb->comments WHERE comment_date_gmt <= '$now' ORDER BY comment_date_gmt DESC LIMIT 1");566 break;567 case 'server':568 $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");569 break;570 }571 $cache_lastcommentmodified[$timezone] = $lastcommentmodified;572 } else {573 $lastcommentmodified = $cache_lastcommentmodified[$timezone];574 }575 return $lastcommentmodified;576 }577 578 function get_commentdata( $comment_ID, $no_cache = 0, $include_unapproved = false ) { // less flexible, but saves DB queries579 global $postc, $id, $commentdata, $wpdb;580 if ($no_cache) {581 $query = "SELECT * FROM $wpdb->comments WHERE comment_ID = '$comment_ID'";582 if (false == $include_unapproved) {583 $query .= " AND comment_approved = '1'";584 }585 $myrow = $wpdb->get_row($query, ARRAY_A);586 } else {587 $myrow['comment_ID'] = $postc->comment_ID;588 $myrow['comment_post_ID'] = $postc->comment_post_ID;589 $myrow['comment_author'] = $postc->comment_author;590 $myrow['comment_author_email'] = $postc->comment_author_email;591 $myrow['comment_author_url'] = $postc->comment_author_url;592 $myrow['comment_author_IP'] = $postc->comment_author_IP;593 $myrow['comment_date'] = $postc->comment_date;594 $myrow['comment_content'] = $postc->comment_content;595 $myrow['comment_karma'] = $postc->comment_karma;596 $myrow['comment_approved'] = $postc->comment_approved;597 $myrow['comment_type'] = $postc->comment_type;598 }599 return $myrow;600 }601 602 function pingback($content, $post_ID) {603 global $wp_version, $wpdb;604 include_once (ABSPATH . WPINC . '/class-IXR.php');605 606 // original code by Mort (http://mort.mine.nu:8080)607 $log = debug_fopen(ABSPATH . '/pingback.log', 'a');608 $post_links = array();609 debug_fwrite($log, 'BEGIN '.date('YmdHis', time())."\n");610 611 $pung = get_pung($post_ID);612 613 // Variables614 $ltrs = '\w';615 $gunk = '/#~:.?+=&%@!\-';616 $punc = '.:?\-';617 $any = $ltrs . $gunk . $punc;618 619 // Step 1620 // Parsing the post, external links (if any) are stored in the $post_links array621 // This regexp comes straight from phpfreaks.com622 // http://www.phpfreaks.com/quickcode/Extract_All_URLs_on_a_Page/15.php623 preg_match_all("{\b http : [$any] +? (?= [$punc] * [^$any] | $)}x", $content, $post_links_temp);624 625 // Debug626 debug_fwrite($log, 'Post contents:');627 debug_fwrite($log, $content."\n");628 629 // Step 2.630 // Walking thru the links array631 // first we get rid of links pointing to sites, not to specific files632 // Example:633 // http://dummy-weblog.org634 // http://dummy-weblog.org/635 // http://dummy-weblog.org/post.php636 // We don't wanna ping first and second types, even if they have a valid <link/>637 638 foreach($post_links_temp[0] as $link_test) :639 if ( !in_array($link_test, $pung) && (url_to_postid($link_test) != $post_ID) // If we haven't pung it already and it isn't a link to itself640 && !is_local_attachment($link_test) ) : // Also, let's never ping local attachments.641 $test = parse_url($link_test);642 if (isset($test['query']))643 $post_links[] = $link_test;644 elseif(($test['path'] != '/') && ($test['path'] != ''))645 $post_links[] = $link_test;646 endif;647 endforeach;648 649 do_action('pre_ping', array(&$post_links, &$pung));650 651 foreach ($post_links as $pagelinkedto){652 debug_fwrite($log, "Processing -- $pagelinkedto\n");653 $pingback_server_url = discover_pingback_server_uri($pagelinkedto, 2048);654 655 if ($pingback_server_url) {656 @ set_time_limit( 60 );657 // Now, the RPC call658 debug_fwrite($log, "Page Linked To: $pagelinkedto \n");659 debug_fwrite($log, 'Page Linked From: ');660 $pagelinkedfrom = get_permalink($post_ID);661 debug_fwrite($log, $pagelinkedfrom."\n");662 663 // using a timeout of 3 seconds should be enough to cover slow servers664 $client = new IXR_Client($pingback_server_url);665 $client->timeout = 3;666 $client->useragent .= ' -- WordPress/' . $wp_version;667 668 // when set to true, this outputs debug messages by itself669 $client->debug = false;670 671 if ( $client->query('pingback.ping', $pagelinkedfrom, $pagelinkedto ) )672 add_ping( $post_ID, $pagelinkedto );673 else674 debug_fwrite($log, "Error.\n Fault code: ".$client->getErrorCode()." : ".$client->getErrorMessage()."\n");675 }676 }677 678 debug_fwrite($log, "\nEND: ".time()."\n****************************\n");679 debug_fclose($log);680 }681 682 function discover_pingback_server_uri($url, $timeout_bytes = 2048) {683 global $wp_version;684 685 $byte_count = 0;686 $contents = '';687 $headers = '';688 $pingback_str_dquote = 'rel="pingback"';689 $pingback_str_squote = 'rel=\'pingback\'';690 $x_pingback_str = 'x-pingback: ';691 $pingback_href_original_pos = 27;692 693 extract(parse_url($url));694 695 if (!isset($host)) {696 // Not an URL. This should never happen.697 return false;698 }699 700 $path = (!isset($path)) ? '/' : $path;701 $path .= (isset($query)) ? '?'.$query : '';702 $port = (isset($port)) ? $port : 80;703 704 // Try to connect to the server at $host705 $fp = @fsockopen($host, $port, $errno, $errstr, 2);706 if (!$fp) {707 // Couldn't open a connection to $host;708 return false;709 }710 711 // Send the GET request712 $request = "GET $path HTTP/1.1\r\nHost: $host\r\nUser-Agent: WordPress/$wp_version \r\n\r\n";713 // ob_end_flush();714 fputs($fp, $request);715 716 // Let's check for an X-Pingback header first717 while (!feof($fp)) {718 $line = fgets($fp, 512);719 if (trim($line) == '') {720 break;721 }722 $headers .= trim($line)."\n";723 $x_pingback_header_offset = strpos(strtolower($headers), $x_pingback_str);724 if ($x_pingback_header_offset) {725 // We got it!726 preg_match('#x-pingback: (.+)#is', $headers, $matches);727 $pingback_server_url = trim($matches[1]);728 return $pingback_server_url;729 }730 if(strpos(strtolower($headers), 'content-type: ')) {731 preg_match('#content-type: (.+)#is', $headers, $matches);732 $content_type = trim($matches[1]);733 }734 }735 736 if (preg_match('#(image|audio|video|model)/#is', $content_type)) {737 // Not an (x)html, sgml, or xml page, no use going further738 return false;739 }740 741 while (!feof($fp)) {742 $line = fgets($fp, 1024);743 $contents .= trim($line);744 $pingback_link_offset_dquote = strpos($contents, $pingback_str_dquote);745 $pingback_link_offset_squote = strpos($contents, $pingback_str_squote);746 if ($pingback_link_offset_dquote || $pingback_link_offset_squote) {747 $quote = ($pingback_link_offset_dquote) ? '"' : '\'';748 $pingback_link_offset = ($quote=='"') ? $pingback_link_offset_dquote : $pingback_link_offset_squote;749 $pingback_href_pos = @strpos($contents, 'href=', $pingback_link_offset);750 $pingback_href_start = $pingback_href_pos+6;751 $pingback_href_end = @strpos($contents, $quote, $pingback_href_start);752 $pingback_server_url_len = $pingback_href_end - $pingback_href_start;753 $pingback_server_url = substr($contents, $pingback_href_start, $pingback_server_url_len);754 // We may find rel="pingback" but an incomplete pingback URI755 if ($pingback_server_url_len > 0) {756 // We got it!757 return $pingback_server_url;758 }759 }760 $byte_count += strlen($line);761 if ($byte_count > $timeout_bytes) {762 // It's no use going further, there probably isn't any pingback763 // server to find in this file. (Prevents loading large files.)764 return false;765 }766 }767 768 // We didn't find anything.769 return false;770 }771 772 function is_local_attachment($url) {773 if ( !strstr($url, get_bloginfo('home') ) )774 return false;775 if ( strstr($url, get_bloginfo('home') . '/?attachment_id=') )776 return true;777 if ( $id = url_to_postid($url) ) {778 $post = & get_post($id);779 if ( 'attachment' == $post->post_type )780 return true;781 }782 return false;783 }784 785 function wp_set_comment_status($comment_id, $comment_status) {786 global $wpdb;787 788 switch($comment_status) {789 case 'hold':790 $query = "UPDATE $wpdb->comments SET comment_approved='0' WHERE comment_ID='$comment_id' LIMIT 1";791 break;792 case 'approve':793 $query = "UPDATE $wpdb->comments SET comment_approved='1' WHERE comment_ID='$comment_id' LIMIT 1";794 break;795 case 'spam':796 $query = "UPDATE $wpdb->comments SET comment_approved='spam' WHERE comment_ID='$comment_id' LIMIT 1";797 break;798 case 'delete':799 return wp_delete_comment($comment_id);800 break;801 default:802 return false;803 }804 805 if ($wpdb->query($query)) {806 do_action('wp_set_comment_status', $comment_id, $comment_status);807 808 $comment = get_comment($comment_id);809 $comment_post_ID = $comment->comment_post_ID;810 $c = $wpdb->get_row( "SELECT count(*) as c FROM {$wpdb->comments} WHERE comment_post_ID = '$comment_post_ID' AND comment_approved = '1'" );811 if( is_object( $c ) )812 $wpdb->query( "UPDATE $wpdb->posts SET comment_count = '$c->c' WHERE ID = '$comment_post_ID'" );813 return true;814 } else {815 return false;816 }817 }818 819 function wp_get_comment_status($comment_id) {820 global $wpdb;821 822 $result = $wpdb->get_var("SELECT comment_approved FROM $wpdb->comments WHERE comment_ID='$comment_id' LIMIT 1");823 if ($result == NULL) {824 return 'deleted';825 } else if ($result == '1') {826 return 'approved';827 } else if ($result == '0') {828 return 'unapproved';829 } else if ($result == 'spam') {830 return 'spam';831 } else {832 return false;833 }834 }835 2 836 3 function check_comment($author, $email, $url, $comment, $user_ip, $user_agent, $comment_type) { … … 897 64 } 898 65 66 // Retrieves comment data given a comment ID or comment object. 67 // Handles comment caching. 68 function &get_comment(&$comment, $output = OBJECT) { 69 global $comment_cache, $wpdb; 70 71 if ( empty($comment) ) 72 return null; 73 74 if ( is_object($comment) ) { 75 if ( !isset($comment_cache[$comment->comment_ID]) ) 76 $comment_cache[$comment->comment_ID] = &$comment; 77 $_comment = & $comment_cache[$comment->comment_ID]; 78 } else { 79 if ( !isset($comment_cache[$comment]) ) { 80 $_comment = $wpdb->get_row("SELECT * FROM $wpdb->comments WHERE comment_ID = '$comment' LIMIT 1"); 81 $comment_cache[$comment->comment_ID] = & $_comment; 82 } else { 83 $_comment = & $comment_cache[$comment]; 84 } 85 } 86 87 if ( $output == OBJECT ) { 88 return $_comment; 89 } elseif ( $output == ARRAY_A ) { 90 return get_object_vars($_comment); 91 } elseif ( $output == ARRAY_N ) { 92 return array_values(get_object_vars($_comment)); 93 } else { 94 return $_comment; 95 } 96 } 97 98 // Deprecate in favor of get_comment()? 99 function get_commentdata( $comment_ID, $no_cache = 0, $include_unapproved = false ) { // less flexible, but saves DB queries 100 global $postc, $id, $commentdata, $wpdb; 101 if ($no_cache) { 102 $query = "SELECT * FROM $wpdb->comments WHERE comment_ID = '$comment_ID'"; 103 if (false == $include_unapproved) { 104 $query .= " AND comment_approved = '1'"; 105 } 106 $myrow = $wpdb->get_row($query, ARRAY_A); 107 } else { 108 $myrow['comment_ID'] = $postc->comment_ID; 109 $myrow['comment_post_ID'] = $postc->comment_post_ID; 110 $myrow['comment_author'] = $postc->comment_author; 111 $myrow['comment_author_email'] = $postc->comment_author_email; 112 $myrow['comment_author_url'] = $postc->comment_author_url; 113 $myrow['comment_author_IP'] = $postc->comment_author_IP; 114 $myrow['comment_date'] = $postc->comment_date; 115 $myrow['comment_content'] = $postc->comment_content; 116 $myrow['comment_karma'] = $postc->comment_karma; 117 $myrow['comment_approved'] = $postc->comment_approved; 118 $myrow['comment_type'] = $postc->comment_type; 119 } 120 return $myrow; 121 } 122 123 function get_lastcommentmodified($timezone = 'server') { 124 global $cache_lastcommentmodified, $pagenow, $wpdb; 125 $add_seconds_blog = get_settings('gmt_offset') * 3600; 126 $add_seconds_server = date('Z'); 127 $now = current_time('mysql', 1); 128 if ( !isset($cache_lastcommentmodified[$timezone]) ) { 129 switch(strtolower($timezone)) { 130 case 'gmt': 131 $lastcommentmodified = $wpdb->get_var("SELECT comment_date_gmt FROM $wpdb->comments WHERE comment_date_gmt <= '$now' ORDER BY comment_date_gmt DESC LIMIT 1"); 132 break; 133 case 'blog': 134 $lastcommentmodified = $wpdb->get_var("SELECT comment_date FROM $wpdb->comments WHERE comment_date_gmt <= '$now' ORDER BY comment_date_gmt DESC LIMIT 1"); 135 break; 136 case 'server': 137 $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"); 138 break; 139 } 140 $cache_lastcommentmodified[$timezone] = $lastcommentmodified; 141 } else { 142 $lastcommentmodified = $cache_lastcommentmodified[$timezone]; 143 } 144 return $lastcommentmodified; 145 } 146 147 function wp_allow_comment($commentdata) { 148 global $wpdb; 149 extract($commentdata); 150 151 $comment_user_domain = apply_filters('pre_comment_user_domain', gethostbyaddr($comment_author_IP) ); 152 153 // Simple duplicate check 154 $dupe = "SELECT comment_ID FROM $wpdb->comments WHERE comment_post_ID = '$comment_post_ID' AND ( comment_author = '$comment_author' "; 155 if ( $comment_author_email ) 156 $dupe .= "OR comment_author_email = '$comment_author_email' "; 157 $dupe .= ") AND comment_content = '$comment_content' LIMIT 1"; 158 if ( $wpdb->get_var($dupe) ) 159 die( __('Duplicate comment detected; it looks as though you\'ve already said that!') ); 160 161 // Simple flood-protection 162 if ( $lasttime = $wpdb->get_var("SELECT comment_date_gmt FROM $wpdb->comments WHERE comment_author_IP = '$comment_author_IP' OR comment_author_email = '$comment_author_email' ORDER BY comment_date DESC LIMIT 1") ) { 163 $time_lastcomment = mysql2date('U', $lasttime); 164 $time_newcomment = mysql2date('U', $comment_date_gmt); 165 if ( ($time_newcomment - $time_lastcomment) < 15 ) { 166 do_action('comment_flood_trigger', $time_lastcomment, $time_newcomment); 167 die( __('Sorry, you can only post a new comment once every 15 seconds. Slow down cowboy.') ); 168 } 169 } 170 171 if ( $user_id ) { 172 $userdata = get_userdata($user_id); 173 $user = new WP_User($user_id); 174 $post_author = $wpdb->get_var("SELECT post_author FROM $wpdb->posts WHERE ID = '$comment_post_ID' LIMIT 1"); 175 } 176 177 // The author and the admins get respect. 178 if ( $userdata && ( $user_id == $post_author || $user->has_cap('level_9') ) ) { 179 $approved = 1; 180 } 181 182 // Everyone else's comments will be checked. 183 else { 184 if ( check_comment($comment_author, $comment_author_email, $comment_author_url, $comment_content, $comment_author_IP, $comment_agent, $comment_type) ) 185 $approved = 1; 186 else 187 $approved = 0; 188 if ( wp_blacklist_check($comment_author, $comment_author_email, $comment_author_url, $comment_content, $comment_author_IP, $comment_agent) ) 189 $approved = 'spam'; 190 } 191 192 $approved = apply_filters('pre_comment_approved', $approved); 193 return $approved; 194 } 195 196 function wp_delete_comment($comment_id) { 197 global $wpdb; 198 do_action('delete_comment', $comment_id); 199 200 $comment = get_comment($comment_id); 201 202 if ( ! $wpdb->query("DELETE FROM $wpdb->comments WHERE comment_ID='$comment_id' LIMIT 1") ) 203 return false; 204 205 $post_id = $comment->comment_post_ID; 206 if ( $post_id && $comment->comment_approved == 1 ) 207 $wpdb->query( "UPDATE $wpdb->posts SET comment_count = comment_count - 1 WHERE ID = '$post_id'" ); 208 209 do_action('wp_set_comment_status', $comment_id, 'delete'); 210 return true; 211 } 212 213 function wp_get_comment_status($comment_id) { 214 global $wpdb; 215 216 $result = $wpdb->get_var("SELECT comment_approved FROM $wpdb->comments WHERE comment_ID='$comment_id' LIMIT 1"); 217 if ($result == NULL) { 218 return 'deleted'; 219 } else if ($result == '1') { 220 return 'approved'; 221 } else if ($result == '0') { 222 return 'unapproved'; 223 } else if ($result == 'spam') { 224 return 'spam'; 225 } else { 226 return false; 227 } 228 } 229 230 function wp_insert_comment($commentdata) { 231 global $wpdb; 232 extract($commentdata); 233 234 if ( ! isset($comment_author_IP) ) 235 $comment_author_IP = $_SERVER['REMOTE_ADDR']; 236 if ( ! isset($comment_date) ) 237 $comment_date = current_time('mysql'); 238 if ( ! isset($comment_date_gmt) ) 239 $comment_date_gmt = gmdate('Y-m-d H:i:s', strtotime($comment_date) ); 240 if ( ! isset($comment_parent) ) 241 $comment_parent = 0; 242 if ( ! isset($comment_approved) ) 243 $comment_approved = 1; 244 if ( ! isset($user_id) ) 245 $user_id = 0; 246 247 $result = $wpdb->query("INSERT INTO $wpdb->comments 248 (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) 249 VALUES 250 ('$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') 251 "); 252 253 $id = $wpdb->insert_id; 254 255 if ( $comment_approved == 1) { 256 $count = $wpdb->get_var("SELECT COUNT(*) FROM $wpdb->comments WHERE comment_post_ID = '$comment_post_ID' AND comment_approved = '1'"); 257 $wpdb->query( "UPDATE $wpdb->posts SET comment_count = $count WHERE ID = '$comment_post_ID'" ); 258 } 259 return $id; 260 } 261 262 function wp_filter_comment($commentdata) { 263 $commentdata['user_id'] = apply_filters('pre_user_id', $commentdata['user_ID']); 264 $commentdata['comment_agent'] = apply_filters('pre_comment_user_agent', $commentdata['comment_agent']); 265 $commentdata['comment_author'] = apply_filters('pre_comment_author_name', $commentdata['comment_author']); 266 $commentdata['comment_content'] = apply_filters('pre_comment_content', $commentdata['comment_content']); 267 $commentdata['comment_author_IP'] = apply_filters('pre_comment_user_ip', $commentdata['comment_author_IP']); 268 $commentdata['comment_author_url'] = apply_filters('pre_comment_author_url', $commentdata['comment_author_url']); 269 $commentdata['comment_author_email'] = apply_filters('pre_comment_author_email', $commentdata['comment_author_email']); 270 $commentdata['filtered'] = true; 271 return $commentdata; 272 } 273 274 function wp_new_comment( $commentdata ) { 275 $commentdata = apply_filters('preprocess_comment', $commentdata); 276 277 $commentdata['comment_post_ID'] = (int) $commentdata['comment_post_ID']; 278 $commentdata['user_ID'] = (int) $commentdata['user_ID']; 279 280 $commentdata['comment_author_IP'] = $_SERVER['REMOTE_ADDR']; 281 $commentdata['comment_agent'] = $_SERVER['HTTP_USER_AGENT']; 282 283 $commentdata['comment_date'] = current_time('mysql'); 284 $commentdata['comment_date_gmt'] = current_time('mysql', 1); 285 286 287 $commentdata = wp_filter_comment($commentdata); 288 289 $commentdata['comment_approved'] = wp_allow_comment($commentdata); 290 291 $comment_ID = wp_insert_comment($commentdata); 292 293 do_action('comment_post', $comment_ID, $commentdata['comment_approved']); 294 295 if ( 'spam' !== $commentdata['comment_approved'] ) { // If it's spam save it silently for later crunching 296 if ( '0' == $commentdata['comment_approved'] ) 297 wp_notify_moderator($comment_ID); 298 299 $post = &get_post($commentdata['comment_post_ID']); // Don't notify if it's your own comment 300 301 if ( get_settings('comments_notify') && $commentdata['comment_approved'] && $post->post_author != $commentdata['user_ID'] ) 302 wp_notify_postauthor($comment_ID, $commentdata['comment_type']); 303 } 304 305 return $comment_ID; 306 } 307 308 function wp_set_comment_status($comment_id, $comment_status) { 309 global $wpdb; 310 311 switch($comment_status) { 312 case 'hold': 313 $query = "UPDATE $wpdb->comments SET comment_approved='0' WHERE comment_ID='$comment_id' LIMIT 1"; 314 break; 315 case 'approve': 316 $query = "UPDATE $wpdb->comments SET comment_approved='1' WHERE comment_ID='$comment_id' LIMIT 1"; 317 break; 318 case 'spam': 319 $query = "UPDATE $wpdb->comments SET comment_approved='spam' WHERE comment_ID='$comment_id' LIMIT 1"; 320 break; 321 case 'delete': 322 return wp_delete_comment($comment_id); 323 break; 324 default: 325 return false; 326 } 327 328 if ($wpdb->query($query)) { 329 do_action('wp_set_comment_status', $comment_id, $comment_status); 330 331 $comment = get_comment($comment_id); 332 $comment_post_ID = $comment->comment_post_ID; 333 $c = $wpdb->get_row( "SELECT count(*) as c FROM {$wpdb->comments} WHERE comment_post_ID = '$comment_post_ID' AND comment_approved = '1'" ); 334 if( is_object( $c ) ) 335 $wpdb->query( "UPDATE $wpdb->posts SET comment_count = '$c->c' WHERE ID = '$comment_post_ID'" ); 336 return true; 337 } else { 338 return false; 339 } 340 } 341 342 function wp_update_comment($commentarr) { 343 global $wpdb; 344 345 // First, get all of the original fields 346 $comment = get_comment($commentarr['comment_ID'], ARRAY_A); 347 348 // Escape data pulled from DB. 349 foreach ($comment as $key => $value) 350 $comment[$key] = $wpdb->escape($value); 351 352 // Merge old and new fields with new fields overwriting old ones. 353 $commentarr = array_merge($comment, $commentarr); 354 355 $commentarr = wp_filter_comment( $commentarr ); 356 357 // Now extract the merged array. 358 extract($commentarr); 359 360 $comment_content = apply_filters('comment_save_pre', $comment_content); 361 362 $result = $wpdb->query( 363 "UPDATE $wpdb->comments SET 364 comment_content = '$comment_content', 365 comment_author = '$comment_author', 366 comment_author_email = '$comment_author_email', 367 comment_approved = '$comment_approved', 368 comment_author_url = '$comment_author_url', 369 comment_date = '$comment_date' 370 WHERE comment_ID = $comment_ID" ); 371 372 $rval = $wpdb->rows_affected; 373 374 $c = $wpdb->get_row( "SELECT count(*) as c FROM {$wpdb->comments} WHERE comment_post_ID = '$comment_post_ID' AND comment_approved = '1'" ); 375 if( is_object( $c ) ) 376 $wpdb->query( "UPDATE $wpdb->posts SET comment_count = '$c->c' WHERE ID = '$comment_post_ID'" ); 377 378 do_action('edit_comment', $comment_ID); 379 380 return $rval; 381 } 382 383 function pingback($content, $post_ID) { 384 global $wp_version, $wpdb; 385 include_once (ABSPATH . WPINC . '/class-IXR.php'); 386 387 // original code by Mort (http://mort.mine.nu:8080) 388 $log = debug_fopen(ABSPATH . '/pingback.log', 'a'); 389 $post_links = array(); 390 debug_fwrite($log, 'BEGIN '.date('YmdHis', time())."\n"); 391 392 $pung = get_pung($post_ID); 393 394 // Variables 395 $ltrs = '\w'; 396 $gunk = '/#~:.?+=&%@!\-'; 397 $punc = '.:?\-'; 398 $any = $ltrs . $gunk . $punc; 399 400 // Step 1 401 // Parsing the post, external links (if any) are stored in the $post_links array 402 // This regexp comes straight from phpfreaks.com 403 // http://www.phpfreaks.com/quickcode/Extract_All_URLs_on_a_Page/15.php 404 preg_match_all("{\b http : [$any] +? (?= [$punc] * [^$any] | $)}x", $content, $post_links_temp); 405 406 // Debug 407 debug_fwrite($log, 'Post contents:'); 408 debug_fwrite($log, $content."\n"); 409 410 // Step 2. 411 // Walking thru the links array 412 // first we get rid of links pointing to sites, not to specific files 413 // Example: 414 // http://dummy-weblog.org 415 // http://dummy-weblog.org/ 416 // http://dummy-weblog.org/post.php 417 // We don't wanna ping first and second types, even if they have a valid <link/> 418 419 foreach($post_links_temp[0] as $link_test) : 420 if ( !in_array($link_test, $pung) && (url_to_postid($link_test) != $post_ID) // If we haven't pung it already and it isn't a link to itself 421 && !is_local_attachment($link_test) ) : // Also, let's never ping local attachments. 422 $test = parse_url($link_test); 423 if (isset($test['query'])) 424 $post_links[] = $link_test; 425 elseif(($test['path'] != '/') && ($test['path'] != '')) 426 $post_links[] = $link_test; 427 endif; 428 endforeach; 429 430 do_action('pre_ping', array(&$post_links, &$pung)); 431 432 foreach ($post_links as $pagelinkedto){ 433 debug_fwrite($log, "Processing -- $pagelinkedto\n"); 434 $pingback_server_url = discover_pingback_server_uri($pagelinkedto, 2048); 435 436 if ($pingback_server_url) { 437 @ set_time_limit( 60 ); 438 // Now, the RPC call 439 debug_fwrite($log, "Page Linked To: $pagelinkedto \n"); 440 debug_fwrite($log, 'Page Linked From: '); 441 $pagelinkedfrom = get_permalink($post_ID); 442 debug_fwrite($log, $pagelinkedfrom."\n"); 443 444 // using a timeout of 3 seconds should be enough to cover slow servers 445 $client = new IXR_Client($pingback_server_url); 446 $client->timeout = 3; 447 $client->useragent .= ' -- WordPress/' . $wp_version; 448 449 // when set to true, this outputs debug messages by itself 450 $client->debug = false; 451 452 if ( $client->query('pingback.ping', $pagelinkedfrom, $pagelinkedto ) ) 453 add_ping( $post_ID, $pagelinkedto ); 454 else 455 debug_fwrite($log, "Error.\n Fault code: ".$client->getErrorCode()." : ".$client->getErrorMessage()."\n"); 456 } 457 } 458 459 debug_fwrite($log, "\nEND: ".time()."\n****************************\n"); 460 debug_fclose($log); 461 } 462 463 function discover_pingback_server_uri($url, $timeout_bytes = 2048) { 464 global $wp_version; 465 466 $byte_count = 0; 467 $contents = ''; 468 $headers = ''; 469 $pingback_str_dquote = 'rel="pingback"'; 470 $pingback_str_squote = 'rel=\'pingback\''; 471 $x_pingback_str = 'x-pingback: '; 472 $pingback_href_original_pos = 27; 473 474 extract(parse_url($url)); 475 476 if (!isset($host)) { 477 // Not an URL. This should never happen. 478 return false; 479 } 480 481 $path = (!isset($path)) ? '/' : $path; 482 $path .= (isset($query)) ? '?'.$query : ''; 483 $port = (isset($port)) ? $port : 80; 484 485 // Try to connect to the server at $host 486 $fp = @fsockopen($host, $port, $errno, $errstr, 2); 487 if (!$fp) { 488 // Couldn't open a connection to $host; 489 return false; 490 } 491 492 // Send the GET request 493 $request = "GET $path HTTP/1.1\r\nHost: $host\r\nUser-Agent: WordPress/$wp_version \r\n\r\n"; 494 // ob_end_flush(); 495 fputs($fp, $request); 496 497 // Let's check for an X-Pingback header first 498 while (!feof($fp)) { 499 $line = fgets($fp, 512); 500 if (trim($line) == '') { 501 break; 502 } 503 $headers .= trim($line)."\n"; 504 $x_pingback_header_offset = strpos(strtolower($headers), $x_pingback_str); 505 if ($x_pingback_header_offset) { 506 // We got it! 507 preg_match('#x-pingback: (.+)#is', $headers, $matches); 508 $pingback_server_url = trim($matches[1]); 509 return $pingback_server_url; 510 } 511 if(strpos(strtolower($headers), 'content-type: ')) { 512 preg_match('#content-type: (.+)#is', $headers, $matches); 513 $content_type = trim($matches[1]); 514 } 515 } 516 517 if (preg_match('#(image|audio|video|model)/#is', $content_type)) { 518 // Not an (x)html, sgml, or xml page, no use going further 519 return false; 520 } 521 522 while (!feof($fp)) { 523 $line = fgets($fp, 1024); 524 $contents .= trim($line); 525 $pingback_link_offset_dquote = strpos($contents, $pingback_str_dquote); 526 $pingback_link_offset_squote = strpos($contents, $pingback_str_squote); 527 if ($pingback_link_offset_dquote || $pingback_link_offset_squote) { 528 $quote = ($pingback_link_offset_dquote) ? '"' : '\''; 529 $pingback_link_offset = ($quote=='"') ? $pingback_link_offset_dquote : $pingback_link_offset_squote; 530 $pingback_href_pos = @strpos($contents, 'href=', $pingback_link_offset); 531 $pingback_href_start = $pingback_href_pos+6; 532 $pingback_href_end = @strpos($contents, $quote, $pingback_href_start); 533 $pingback_server_url_len = $pingback_href_end - $pingback_href_start; 534 $pingback_server_url = substr($contents, $pingback_href_start, $pingback_server_url_len); 535 // We may find rel="pingback" but an incomplete pingback URI 536 if ($pingback_server_url_len > 0) { 537 // We got it! 538 return $pingback_server_url; 539 } 540 } 541 $byte_count += strlen($line); 542 if ($byte_count > $timeout_bytes) { 543 // It's no use going further, there probably isn't any pingback 544 // server to find in this file. (Prevents loading large files.) 545 return false; 546 } 547 } 548 549 // We didn't find anything. 550 return false; 551 } 552 553 function is_local_attachment($url) { 554 if ( !strstr($url, get_bloginfo('home') ) ) 555 return false; 556 if ( strstr($url, get_bloginfo('home') . '/?attachment_id=') ) 557 return true; 558 if ( $id = url_to_postid($url) ) { 559 $post = & get_post($id); 560 if ( 'attachment' == $post->post_type ) 561 return true; 562 } 563 return false; 564 } 565 899 566 ?> -
trunk/wp-includes/functions.php
r3712 r3714 688 688 } else { 689 689 return $_category; 690 }691 }692 693 // Retrieves comment data given a comment ID or comment object.694 // Handles comment caching.695 function &get_comment(&$comment, $output = OBJECT) {696 global $comment_cache, $wpdb;697 698 if ( empty($comment) )699 return null;700 701 if ( is_object($comment) ) {702 if ( !isset($comment_cache[$comment->comment_ID]) )703 $comment_cache[$comment->comment_ID] = &$comment;704 $_comment = & $comment_cache[$comment->comment_ID];705 } else {706 if ( !isset($comment_cache[$comment]) ) {707 $_comment = $wpdb->get_row("SELECT * FROM $wpdb->comments WHERE comment_ID = '$comment' LIMIT 1");708 $comment_cache[$comment->comment_ID] = & $_comment;709 } else {710 $_comment = & $comment_cache[$comment];711 }712 }713 714 if ( $output == OBJECT ) {715 return $_comment;716 } elseif ( $output == ARRAY_A ) {717 return get_object_vars($_comment);718 } elseif ( $output == ARRAY_N ) {719 return array_values(get_object_vars($_comment));720 } else {721 return $_comment;722 690 } 723 691 } -
trunk/wp-settings.php
r3711 r3714 110 110 require (ABSPATH . WPINC . '/cache.php'); 111 111 112 // To disable persistant caching, add the below line to your wp-config.php file, uncommented of course.113 // define('DISABLE_CACHE', true);114 115 112 wp_cache_init(); 116 113 … … 126 123 die(sprintf(__("It doesn't look like you've installed WP yet. Try running <a href='%s'>install.php</a>."), $link)); 127 124 } 128 $wpdb->show_errors();129 125 130 126 require (ABSPATH . WPINC . '/functions-formatting.php'); … … 139 135 require (ABSPATH . WPINC . '/template-functions-post.php'); 140 136 require (ABSPATH . WPINC . '/template-functions-category.php'); 141 require (ABSPATH . WPINC . '/comment-functions.php'); 137 require (ABSPATH . WPINC . '/comment.php'); 138 require (ABSPATH . WPINC . '/comment-template.php'); 142 139 require (ABSPATH . WPINC . '/rewrite.php'); 143 140 require (ABSPATH . WPINC . '/feed-functions.php');
Note: See TracChangeset
for help on using the changeset viewer.