2003-12-10 19:22:36 -05:00
< ? php
2008-05-25 11:50:15 -04:00
/**
* Handle Trackbacks and Pingbacks sent to WordPress
*
* @ package WordPress
*/
2004-09-18 18:47:43 -04:00
2005-06-10 19:15:13 -04:00
if ( empty ( $wp )) {
2008-05-21 01:59:27 -04:00
require_once ( './wp-load.php' );
2010-01-08 03:34:39 -05:00
wp ( array ( 'tb' => '1' ) );
2004-09-18 18:47:43 -04:00
}
2008-05-25 11:50:15 -04:00
/**
2013-03-03 23:23:00 -05:00
* trackback_response () - Respond with an error or success XML message
2008-05-25 11:50:15 -04:00
*
2010-02-24 15:13:23 -05:00
* @ param int | bool $error Whether there was an error
2008-05-25 11:50:15 -04:00
* @ param string $error_message Error message if an error occurred
*/
2004-09-06 22:34:12 -04:00
function trackback_response ( $error = 0 , $error_message = '' ) {
header ( 'Content-Type: text/xml; charset=' . get_option ( 'blog_charset' ) );
if ( $error ) {
echo '<?xml version="1.0" encoding="utf-8"?' . " > \n " ;
echo " <response> \n " ;
echo " <error>1</error> \n " ;
echo " <message> $error_message </message> \n " ;
echo " </response> " ;
2004-09-23 08:27:52 -04:00
die ();
2004-09-06 22:34:12 -04:00
} else {
echo '<?xml version="1.0" encoding="utf-8"?' . " > \n " ;
echo " <response> \n " ;
echo " <error>0</error> \n " ;
echo " </response> " ;
}
}
2003-12-21 22:10:54 -05:00
// trackback is done by a POST
$request_array = 'HTTP_POST_VARS' ;
2004-12-15 21:57:05 -05:00
2009-11-26 06:29:54 -05:00
if ( ! isset ( $_GET [ 'tb_id' ]) || ! $_GET [ 'tb_id' ] ) {
2004-09-06 22:34:12 -04:00
$tb_id = explode ( '/' , $_SERVER [ 'REQUEST_URI' ]);
2005-04-19 23:37:23 -04:00
$tb_id = intval ( $tb_id [ count ( $tb_id ) - 1 ] );
2004-09-06 22:34:12 -04:00
}
2004-12-15 21:57:05 -05:00
2009-11-26 06:29:54 -05:00
$tb_url = isset ( $_POST [ 'url' ]) ? $_POST [ 'url' ] : '' ;
$charset = isset ( $_POST [ 'charset' ]) ? $_POST [ 'charset' ] : '' ;
2007-01-05 00:45:46 -05:00
// These three are stripslashed here so that they can be properly escaped after mb_convert_encoding()
2013-03-03 16:11:40 -05:00
$title = isset ( $_POST [ 'title' ]) ? wp_unslash ( $_POST [ 'title' ]) : '' ;
$excerpt = isset ( $_POST [ 'excerpt' ]) ? wp_unslash ( $_POST [ 'excerpt' ]) : '' ;
$blog_name = isset ( $_POST [ 'blog_name' ]) ? wp_unslash ( $_POST [ 'blog_name' ]) : '' ;
2004-10-04 04:03:52 -04:00
if ( $charset )
2009-10-14 12:21:28 -04:00
$charset = str_replace ( array ( ',' , ' ' ), '' , strtoupper ( trim ( $charset ) ) );
2004-10-04 04:03:52 -04:00
else
2005-04-20 18:06:28 -04:00
$charset = 'ASCII, UTF-8, ISO-8859-1, JIS, EUC-JP, SJIS' ;
2004-10-04 04:03:52 -04:00
2008-03-28 02:51:19 -04:00
// No valid uses for UTF-7
if ( false !== strpos ( $charset , 'UTF-7' ) )
die ;
2004-12-15 21:57:05 -05:00
if ( function_exists ( 'mb_convert_encoding' ) ) { // For international trackbacks
2006-08-30 17:46:31 -04:00
$title = mb_convert_encoding ( $title , get_option ( 'blog_charset' ), $charset );
$excerpt = mb_convert_encoding ( $excerpt , get_option ( 'blog_charset' ), $charset );
$blog_name = mb_convert_encoding ( $blog_name , get_option ( 'blog_charset' ), $charset );
2004-10-04 04:03:52 -04:00
}
2003-12-21 22:10:54 -05:00
2013-03-01 11:28:40 -05:00
// Now that mb_convert_encoding() has been given a swing, we need to escape these three
2013-03-03 16:11:40 -05:00
$title = wp_slash ( $title );
$excerpt = wp_slash ( $excerpt );
$blog_name = wp_slash ( $blog_name );
2013-03-01 11:28:40 -05:00
2006-11-19 02:56:05 -05:00
if ( is_single () || is_page () )
$tb_id = $posts [ 0 ] -> ID ;
2004-09-06 22:34:12 -04:00
2009-11-26 06:29:54 -05:00
if ( ! isset ( $tb_id ) || ! intval ( $tb_id ) )
2004-09-06 22:34:12 -04:00
trackback_response ( 1 , 'I really need an ID for this to work.' );
2003-12-21 22:10:54 -05:00
if ( empty ( $title ) && empty ( $tb_url ) && empty ( $blog_name )) {
// If it doesn't look like a trackback at all...
2006-06-27 01:38:56 -04:00
wp_redirect ( get_permalink ( $tb_id ));
2004-09-06 22:34:12 -04:00
exit ;
2003-12-10 19:22:36 -05:00
}
2007-01-24 21:03:55 -05:00
if ( ! empty ( $tb_url ) && ! empty ( $title ) ) {
2004-09-06 22:34:12 -04:00
header ( 'Content-Type: text/xml; charset=' . get_option ( 'blog_charset' ) );
2003-12-10 19:22:36 -05:00
2008-02-04 15:27:45 -05:00
if ( ! pings_open ( $tb_id ) )
2003-12-10 19:22:36 -05:00
trackback_response ( 1 , 'Sorry, trackbacks are closed for this item.' );
2008-03-03 16:05:23 -05:00
$title = wp_html_excerpt ( $title , 250 ) . '...' ;
$excerpt = wp_html_excerpt ( $excerpt , 252 ) . '...' ;
2003-12-10 19:22:36 -05:00
2007-03-22 20:59:21 -04:00
$comment_post_ID = ( int ) $tb_id ;
2004-09-22 15:44:35 -04:00
$comment_author = $blog_name ;
2004-09-06 22:34:12 -04:00
$comment_author_email = '' ;
2003-12-10 19:22:36 -05:00
$comment_author_url = $tb_url ;
2004-09-06 22:34:12 -04:00
$comment_content = " <strong> $title </strong> \n \n $excerpt " ;
$comment_type = 'trackback' ;
2003-12-10 19:22:36 -05:00
2008-04-14 12:13:25 -04:00
$dupe = $wpdb -> get_results ( $wpdb -> prepare ( " SELECT * FROM $wpdb->comments WHERE comment_post_ID = %d AND comment_author_url = %s " , $comment_post_ID , $comment_author_url ) );
2005-01-10 21:56:43 -05:00
if ( $dupe )
2006-08-30 12:40:17 -04:00
trackback_response ( 1 , 'We already have a ping from that URL for this post.' );
2005-01-10 21:56:43 -05:00
2004-09-22 15:44:35 -04:00
$commentdata = compact ( 'comment_post_ID' , 'comment_author' , 'comment_author_email' , 'comment_author_url' , 'comment_content' , 'comment_type' );
2003-12-10 19:22:36 -05:00
2004-09-06 22:34:12 -04:00
wp_new_comment ( $commentdata );
2003-12-10 19:22:36 -05:00
2004-09-06 22:34:12 -04:00
do_action ( 'trackback_post' , $wpdb -> insert_id );
2005-02-12 02:30:21 -05:00
trackback_response ( 0 );
2003-12-10 19:22:36 -05:00
}