WordPress.org

Make WordPress Core

Ticket #2933: ping-2.2.patch

File ping-2.2.patch, 3.3 KB (added by c960657, 12 years ago)
  • wp-includes/comment.php

     
    635635}
    636636
    637637function generic_ping($post_id = 0) {
     638        $errors = get_option('ping_errors');
     639        if ( !is_array($errors) )
     640                $errors = array();
    638641        $services = get_settings('ping_sites');
    639642        $services = preg_replace("|(\s)+|", '$1', $services); // Kill dupe lines
    640643        $services = trim($services);
    641644        if ( '' != $services ) {
     645                $update_ping_sites = false;
    642646                $services = explode("\n", $services);
    643                 foreach ($services as $service) {
    644                         weblog_ping($service);
     647                foreach ($services as $i => $service) {
     648                        $error = weblog_ping($service);
     649                        if ( $error ) {
     650                                if ( !isset($errors[$service]) )
     651                                        $errors[$service] = array('count' => 0);
     652                                $errors[$service]['count']++;
     653                                $errors[$service]['last_message'] = $error;
     654                                if ( $errors[$service]['count'] > 25 ||
     655                                         $errors[$service]['count'] > 2 && $error == "DO NOT PING THIS SERVICE AGAIN!" ) {
     656                                        unset($services[$i]);
     657                                        $update_ping_sites = true;
     658                                }
     659                        } else {
     660                                unset($errors[$service]);
     661                        }
    645662                }
     663                if ($update_ping_sites)
     664                        update_option('ping_sites', implode("\n", $services));
    646665        }
     666        update_option('ping_errors', $errors);
    647667
    648668        return $post_id;
    649669}
     
    791811        $home = trailingslashit( get_option('home') );
    792812        if ( !$client->query('weblogUpdates.extendedPing', get_settings('blogname'), $home, get_bloginfo('rss2_url') ) ) // then try a normal ping
    793813                $client->query('weblogUpdates.ping', get_settings('blogname'), $home);
     814
     815        $error = false;
     816        if ( $client->isError() ) {
     817                $error = $client->getErrorMessage();
     818        } else {
     819                $response = $client->getResponse();
     820                if ( !isset($response['flerror']) || $response['flerror'] ) {
     821                        $error = isset($response['message']) && $response['message']
     822                            ? $response['message'] : 'Invalid response';
     823                }
     824        }
     825        return $error;
    794826}
    795827
    796828?>
  • wp-admin/options-writing.php

     
    9999<p><?php _e('When you publish a new post, WordPress automatically notifies the following site update services. For more about this, see <a href="http://codex.wordpress.org/Update_Services">Update Services</a> on the Codex. Separate multiple service URIs with line breaks.') ?></p>
    100100
    101101<textarea name="ping_sites" id="ping_sites" style="width: 98%;" rows="3" cols="50"><?php form_option('ping_sites'); ?></textarea>
     102
     103<?php
     104$min_ping_error_count = 3;
     105?>
     106<p><?php _e('These update services has failed the last ' . $min_ping_error_count . ' times or more. You should consider removing these services from the list above.') ?></p>
     107<dl>
     108<?php
     109$has_errors = false;
     110$services = get_option('ping_sites');
     111foreach (get_option('ping_errors') as $service => $error) :
     112if ($error['count'] >= $min_ping_error_count && strpos($services, $service) !== false) :
     113echo "<dt>" . htmlspecialchars($service) . "<dt>";
     114echo "<dd>" . htmlspecialchars($error['last_message']) . "<dd>";
     115$has_errors = true;
     116endif;
     117endforeach;
     118
     119if (!$has_errors) :
     120echo "<dd><em>" . __('No errors') . "</em></dd>";
     121endif;
     122?>
     123</dl>
    102124</fieldset>
    103125
    104126<p class="submit">