Subversion Repositories website

[/] [trunk/] [wp-trackback.php] - Blame information for rev 84

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 84 drecordon
<?php
2 drecordon
3 drecordon
if (empty($wp)) {
4 drecordon
    require_once('./wp-config.php');
5 drecordon
    wp('tb=1');
6 drecordon
}
7 drecordon
8 drecordon
function trackback_response($error 0$error_message '') {
9 drecordon
    header('Content-Type: text/xml; charset=' get_option('blog_charset') );
10 drecordon
    if ($error) {
11 drecordon
        echo '<?xml version="1.0" encoding="utf-8"?'.">\n";
12 drecordon
        echo "<response>\n";
13 drecordon
        echo "<error>1</error>\n";
14 drecordon
        echo "<message>$error_message</message>\n";
15 drecordon
        echo "</response>";
16 drecordon
        die();
17 drecordon
    } else {
18 drecordon
        echo '<?xml version="1.0" encoding="utf-8"?'.">\n";
19 drecordon
        echo "<response>\n";
20 drecordon
        echo "<error>0</error>\n";
21 drecordon
        echo "</response>";
22 drecordon
    }
23 drecordon
}
24 drecordon
25 drecordon
// trackback is done by a POST
26 drecordon
$request_array 'HTTP_POST_VARS';
27 drecordon
28 drecordon
if ( !$_GET['tb_id'] ) {
29 drecordon
    $tb_id explode('/'$_SERVER['REQUEST_URI']);
30 drecordon
    $tb_id intval$tb_idcount($tb_id) - ] );
31 drecordon
}
32 drecordon
33 drecordon
$tb_url  $_POST['url'];
34 drecordon
$charset $_POST['charset'];
35 drecordon
36 drecordon
// These three are stripslashed here so that they can be properly escaped after mb_convert_encoding()
37 drecordon
$title     stripslashes($_POST['title']);
38 drecordon
$excerpt   stripslashes($_POST['excerpt']);
39 drecordon
$blog_name stripslashes($_POST['blog_name']);
40 drecordon
41 drecordon
if ($charset)
42 drecordon
    $charset strtouppertrim($charset) );
43 drecordon
else
44 drecordon
    $charset 'ASCII, UTF-8, ISO-8859-1, JIS, EUC-JP, SJIS';
45 drecordon
46 drecordon
if ( function_exists('mb_convert_encoding') ) { // For international trackbacks
47 drecordon
    $title     mb_convert_encoding($titleget_option('blog_charset'), $charset);
48 drecordon
    $excerpt   mb_convert_encoding($excerptget_option('blog_charset'), $charset);
49 drecordon
    $blog_name mb_convert_encoding($blog_nameget_option('blog_charset'), $charset);
50 drecordon
}
51 drecordon
52 drecordon
// Now that mb_convert_encoding() has been given a swing, we need to escape these three
53 drecordon
$title     $wpdb->escape($title);
54 drecordon
$excerpt   $wpdb->escape($excerpt);
55 drecordon
$blog_name $wpdb->escape($blog_name);
56 drecordon
57 drecordon
if ( is_single() || is_page() )
58 drecordon
    $tb_id $posts[0]->ID;
59 drecordon
60 drecordon
if ( !intval$tb_id ) )
61 drecordon
    trackback_response(1'I really need an ID for this to work.');
62 drecordon
63 drecordon
if (empty($title) && empty($tb_url) && empty($blog_name)) {
64 drecordon
    // If it doesn't look like a trackback at all...
65 drecordon
    wp_redirect(get_permalink($tb_id));
66 drecordon
    exit;
67 drecordon
}
68 drecordon
69 drecordon
if ( !empty($tb_url) && !empty($title) ) {
70 drecordon
    header('Content-Type: text/xml; charset=' get_option('blog_charset') );
71 drecordon
72 drecordon
    $pingstatus $wpdb->get_var("SELECT ping_status FROM $wpdb->posts WHERE ID = $tb_id");
73 drecordon
74 drecordon
    if ( 'open' != $pingstatus )
75 drecordon
        trackback_response(1'Sorry, trackbacks are closed for this item.');
76 drecordon
77 drecordon
    $title =  wp_specialcharsstrip_tags$title ) );
78 drecordon
    $excerpt strip_tags($excerpt);
79 drecordon
    if ( function_exists('mb_strcut') ) { // For international trackbacks
80 drecordon
        $excerpt mb_strcut($excerpt0252get_option('blog_charset')) . '...';
81 drecordon
        $title mb_strcut($title0250get_option('blog_charset')) . '...';
82 drecordon
    } else {
83 drecordon
        $excerpt = (strlen($excerpt) > 255) ? substr($excerpt0252) . '...' $excerpt;
84 drecordon
        $title = (strlen($title) > 250) ? substr($title0250) . '...' $title;
85 drecordon
    }
86 drecordon
87 drecordon
    $comment_post_ID = (int) $tb_id;
88 drecordon
    $comment_author $blog_name;
89 drecordon
    $comment_author_email '';
90 drecordon
    $comment_author_url $tb_url;
91 drecordon
    $comment_content "<strong>$title</strong>\n\n$excerpt";
92 drecordon
    $comment_type 'trackback';
93 drecordon
94 drecordon
    $dupe $wpdb->get_results("SELECT * FROM $wpdb->comments WHERE comment_post_ID = '$comment_post_ID' AND comment_author_url = '$comment_author_url'");
95 drecordon
    if ( $dupe )
96 drecordon
        trackback_response(1'We already have a ping from that URL for this post.');
97 drecordon
98 drecordon
    $commentdata compact('comment_post_ID''comment_author''comment_author_email''comment_author_url''comment_content''comment_type');
99 drecordon
100 drecordon
    wp_new_comment($commentdata);
101 drecordon
102 drecordon
    do_action('trackback_post'$wpdb->insert_id);
103 drecordon
    trackback_response(0);
104 drecordon
}
105 drecordon
?>