. */ # Known/outstanding issues: # [UNCONFIRMED ISSUE] Plugin seems to keep pinging when importing an XML/WXR file even if pinging is disabled # Plugin does not seem to report any errors if it cannot write to the log file (see E2 blog for example) function SUP_add_options_page(){ if(function_exists("add_options_page")) add_options_page("UP Smart Update Pinger", "UP Smart Update Pinger", 5, basename(__FILE__), "SUP_show_options_page"); } function SUP_show_options_page(){ global $logfile; $ping = get_option("SUP_ping"); $pinglog = get_option("SUP_pinglog"); $uris = get_option("ping_sites"); $forcedpings = false; $SUP_output_log=''; $pingservicesnow = "Ping Services Now!"; $deletelogfile = "Delete Log File"; if(isset($_POST["ping"]) && $_POST["ping"] == $pingservicesnow){ $forcedpings = true; SUP_log(SUP_ping_services($forcedpings).strftime("%D %T")."\tForced pinging services (Homepage)\n\t─────\n"); }elseif(isset($_POST["submit"])){ $uris = $_POST["uris"]; $ping = 0; if($_POST["ping"] == 1) $ping = 1; $pinglog = 0; if($_POST["pinglog"] == 1) $pinglog = 1; update_option("SUP_ping", $ping); update_option("SUP_pinglog", $pinglog); update_option("ping_sites", $uris); echo '

Options saved.

'; }elseif(isset($_POST["delete"]) && $_POST["delete"] == $deletelogfile){ $fh = @fopen($logfile, "w"); if(false === @fwrite($fh, strftime("%D %T")."\tLog file deleted\n\t─────\n")){ update_option("SUP_error", 1); }else{ update_option("SUP_error", 0); } @fclose($fh); } $checked1 = ''; if($ping == 1) $checked1 = 'checked="checked"'; $checked2 = ''; if($pinglog == 1) $checked2 = 'checked="checked"'; echo '

Ultimate Plugins Smart Update Pinger

Click here for installation instructions

Click here for usage instructions

Click here for updated versions

Click here for comments and suggestions

URIs to Ping

The following services will automatically be pinged/notified when you publish normal or future timestamped posts. Not when you edit previously published posts, as WordPress does by default.

This plugin also fixes an issue with the default extended ping programming in Wordpress and pre-2.1 versions of Smart Update Pinger (it now includes the url of the new post).

NB: this list is synchronized with the original update services list.

Separate multiple service URIs with line breaks:

Ping log

These are the last 100 actions performed by the plugin. In reverse chronological order for easier reading (latest ping first).

'; SUP_get_last_log_entries(500); echo '

'; } # telling WordPress to ping if the post is new, but not if it's just been edited function SUP_ping_if_new($id){ global $wpdb, $post_title; $SUP_output_log="\t─────\n"; $SUP_ping_result=''; $forcedpings = false; if(get_option('SUP_ping') == 1 && trim(get_option('ping_sites')) != ""){ # fetches data directly from database; the function "get_post" is cached, and using it here will get the post as is was before the last save $row = mysql_fetch_array(mysql_query( // "SELECT post_date,post_modified,post_title,guid FROM $wpdb->posts WHERE id=$id")); "SELECT post_date,post_modified,post_title FROM $wpdb->posts WHERE id=$id")); # if time when created equals time when modified it is a new post, otherwise the author has edited/modified it if(!$row["post_title"]){ $SUP_output_log=strftime("%D %T")."\tNOT Pinging services (ERROR: YOU HAVE FORGOTTEN TO ENTER A POST TITLE) ...\n".$SUP_output_log; }else{ if($row["post_date"] == $row["post_modified"]){ $SUP_output_log=strftime("%D %T")."\tPinging services (New normal post: “".$row["post_title"]."”) ...\n".$SUP_output_log; $SUP_output_log=SUP_ping_services($forcedpings,get_permalink($id)).$SUP_output_log; # Try commenting the line above, and uncommenting this line below if pinging seems to be out of order. Please notify the author if it helps! # generic_ping(); }else{ // Post has been edited or it's a future post // If we have a post title it means that we are in the normal WP loop and therefore it was an edit (not a future post) if($post_title){ $SUP_output_log=strftime("%D %T")."\tNOT Pinging services (Existing post was edited: “".$row["post_title"]."”) ...\n".$SUP_output_log; }else{ $SUP_output_log=strftime("%D %T")."\tPinging services (New timestamped post: “".$row["post_title"]."”) ...\n".$SUP_output_log; $SUP_output_log=SUP_ping_services($forcedpings,get_permalink($id)).$SUP_output_log; # Try commenting the line above, and uncommenting this line below if pinging seems to be out of order. Please notify the author if it helps! # generic_ping(); } } } }else{ if (trim(get_option('ping_sites')) != ""){ $SUP_output_log=strftime("%D %T")."\tNOT Pinging services (WARNING: DISABLED BY ADMINISTRATOR)\n".$SUP_output_log; }else{ $SUP_output_log=strftime("%D %T")."\tNOT Pinging services (WARNING: EMPTY PING SERVICES LIST)\n".$SUP_output_log; } } SUP_log($SUP_output_log); } # More or less a copy of WP's "generic_ping" from functions.php, but uses another function to send the actual XML-RPC messages. function SUP_ping_services($forcedpings,$SUP_guid = ''){ $SUP_output_log=''; #$services = get_settings('ping_sites'); #UP - 17.07.07 - get_option is newer/better then get_settings $services = get_option('ping_sites'); $services = preg_replace("|(\s)+|", '$1', $services); // Kill dupe lines $services = trim($services); if ( '' != $services ) { $services = explode("\n", $services); foreach ($services as $service) $SUP_output_log=SUP_send_xmlrpc($forcedpings,$SUP_guid,$service).$SUP_output_log; } return $SUP_output_log; } # A slightly modified version of the WordPress built-in ping functionality ("weblog_ping" in functions.php). # Original version: #function weblog_ping($server = '', $path = '') { #global $wp_version; #include_once(ABSPATH . WPINC . '/class-IXR.php'); #// using a timeout of 3 seconds should be enough to cover slow servers #$client = new IXR_Client($server, ((!strlen(trim($path)) || ('/' == $path)) ? false : $path)); #$client->timeout = 3; #$client->useragent .= ' -- WordPress/'.$wp_version; #// when set to true, this outputs debug messages by itself #$client->debug = false; #$home = trailingslashit( get_option('home') ); #if ( !$client->query('weblogUpdates.extendedPing', get_option('blogname'), $home, get_bloginfo('rss2_url') ) ) // then try a normal ping #$client->query('weblogUpdates.ping', get_option('blogname'), $home); #} # This one uses correct extendedPing format (WP does not), and logs response from service. function SUP_send_xmlrpc($forcedpings,$SUP_guid = '',$server = '', $path = ''){ global $wp_version; $SUP_output_log=''; include_once (ABSPATH . WPINC . '/class-IXR.php'); // using a timeout of 5 seconds should be enough to cover slow servers (changed from 3 to 5) $client = new IXR_Client($server, ((!strlen(trim($path)) || ('/' == $path)) ? false : $path)); $client->timeout = 5; $client->useragent .= ' -- WordPress/'.$wp_version; // when set to true, this outputs debug messages by itself $client->debug = false; $home = trailingslashit( get_option('home') ); # The extendedPing format should be "blog name", "blog url", "check url" (the new URL), and "feed url". # Related Website(s) # http://www.weblogs.com/api.html # An example: # Someblog - Title # http://spaces.msn.com/someblog - Home URL # http://spaces.msn.com/someblog/PersonalSpace.aspx?something - Check/New URL # http://spaces.msn.com/someblog/feed.rss - Feed # Changed the following line therefore: # if($client->query('weblogUpdates.extendedPing', get_settings('blogname'), $home, get_bloginfo('rss2_url'), get_bloginfo('rss2_url'))) if ($forcedpings){ # If this is a forced ping it's better to use a regular ping for the homepage without an update URL (safer) if($client->query('weblogUpdates.ping', get_option('blogname'), $home)){ $SUP_output_log=strftime("%D %T")."\t► [Regular Ping] ".$server." was successfully pinged\n".$SUP_output_log; if (get_option('SUP_pinglog') == 1){ $SUP_output_log=strftime("%D %T")."\t►► Blogname: '".get_option('blogname')."'\n".$SUP_output_log; $SUP_output_log=strftime("%D %T")."\t►► Homepage: '".$home."'\n".$SUP_output_log; } }else{ $SUP_output_log=strftime("%D %T")."\t► ".$server." could not be pinged. Error message: “".$client->error->message."”\n".$SUP_output_log; } }else{ if($client->query('weblogUpdates.extendedPing', get_option('blogname'), $home, $SUP_guid, get_bloginfo('rss2_url'))){ $SUP_output_log=strftime("%D %T")."\t► [Extended Ping] ".$server." was successfully pinged\n".$SUP_output_log; if (get_option('SUP_pinglog') == 1){ $SUP_output_log=strftime("%D %T")."\t►► Blogname: '".get_option('blogname')."'\n".$SUP_output_log; $SUP_output_log=strftime("%D %T")."\t►► Homepage: '".$home."'\n".$SUP_output_log; $SUP_output_log=strftime("%D %T")."\t►► Updated : '".$SUP_guid."'\n".$SUP_output_log; $SUP_output_log=strftime("%D %T")."\t►► RSS URL : '".get_bloginfo('rss2_url')."'\n".$SUP_output_log; } }else{ # pinging was unsuccessful, trying regular ping format if($client->query('weblogUpdates.ping', get_option('blogname'), $home)){ $SUP_output_log=strftime("%D %T")."\t► [Regular Ping] ".$server." was successfully pinged\n".$SUP_output_log; if (get_option('SUP_pinglog') == 1){ $SUP_output_log=strftime("%D %T")."\t►► Blogname: '".get_option('blogname')."'\n".$SUP_output_log; $SUP_output_log=strftime("%D %T")."\t►► Homepage: '".$home."'\n".$SUP_output_log; } }else{ $SUP_output_log=strftime("%D %T")."\t► ".$server." could not be pinged. Error message: “".$client->error->message."”\n".$SUP_output_log; } } } return $SUP_output_log; } $post_title = ""; # Receives the title of the post from a filter below function SUP_post_title($title){ global $post_title; $post_title = $title; return $title; } # Log $logfile = ABSPATH . 'wp-content/plugins/ultimate-plugins-smart-update-pinger/ultimate-plugins-smart-update-pinger.log'; function SUP_log($SUP_log_output){ global $logfile; $logerror = 0; $fh = @fopen($logfile, "a"); if(false === @fwrite($fh, $SUP_log_output)){ update_option("SUP_error", 1); }else{ update_option("SUP_error", 0); } @fclose($fh); } function SUP_get_last_log_entries($num){ global $logfile; $lines = @file($logfile); if(get_option("SUP_error") == 1){ $fh = @fopen($logfile, "a"); if(false === @fwrite($fh, "")){ echo "Error writing log file (".$logfile."). Most likely your logfile (".$logfile.") is write-protected and no log data can be saved (change the rights of this file to 777), or alternatively this could mean that you have manually removed the log file, or that you have changed the directory or file name of the plugin (they both should be 'ultimate-plugins-smart-update-pinger')"; }else{ // Original: $lines = array_slice($lines, count($lines) - $num); // Modified to show in reverse order (easier for reading) $lines = array_reverse(array_slice($lines, count($lines) - $num)); $msg = ""; foreach($lines as $line){ $msg.=trim($line)."
"; } echo $msg; } @fclose($fh); }else{ if($lines === false){ echo "Error reading log file (".$logfile."). Most likely you have manually removed the log file, or alternatively this could mean that the logfile (".$logfile.") is read-protected (change the rights of this file to 777), or that you have changed the directory or file name of the plugin (they both should be 'ultimate-plugins-smart-update-pinger')"; }else{ // Original: $lines = array_slice($lines, count($lines) - $num); // Modified to show in reverse order (easier for reading) $lines = array_reverse(array_slice($lines, count($lines) - $num)); $msg = ""; foreach($lines as $line){ $msg.=trim($line)."
"; } echo $msg; } } } # adds a filter to receive the title of the post before publishing add_filter("title_save_pre", "SUP_post_title"); # shows the options in the administration panel add_action("admin_menu", "SUP_add_options_page"); # calls SUP_ping whenever a post is published add_action("publish_post", "SUP_ping_if_new"); # calls SUP_ping_draft when changing the status from private/draft to published # add_action("private_to_published', 'SUP_ping_draft'); # removes the "WordPress official" pinging hook remove_action("publish_post", "generic_ping"); # activates pinging if setting doesn't exist in database yet (before the user has changed the settings the first time) if(get_option("SUP_ping") === false){update_option("SUP_ping", 1);} if(get_option("SUP_pinglog") === false){update_option("SUP_pinglog", 1);} if(get_option("SUP_error") === false){update_option("SUP_error", 0);} ?> {"id":2570,"date":"2012-10-21T16:18:59","date_gmt":"2012-10-21T16:18:59","guid":{"rendered":"https:\/\/kite2012.com\/?p=2570"},"modified":"2012-11-25T17:50:39","modified_gmt":"2012-11-25T17:50:39","slug":"top-5-kite-surfing-camps","status":"publish","type":"post","link":"https:\/\/kite2012.com\/top-5-kite-surfing-camps\/","title":{"rendered":"Top 5 Kite surfing Camps"},"content":{"rendered":"

Kitesurfing
\n<\/strong>Kitesurfing camps have become a popular way for people to learn kitesu<\/strong>rfing and reach a higher level compared to those that just take a one or two day course. Another benefit with kite camps are the fact that you get to know the group of people that are participating in the camp, hence kite camps are great for the one that wants to learn kitesurfing and make friends at the same time! We are here listing 5 of the best kite camps over the world!<\/p>\n

    \n
  1. \n\"\"<\/a>Kitesurfing Lanka<\/strong> is Sri Lanka\u2019s only professionally run camps. It\u2019s situated in Kalpitiya where the conditions are ideal for beginners and advance riders alike. The flat water lagoon, large beach, consistent winds, safety boats and instructors who speak a number of languages ensure that beginners learn the sport in a safe and enjoyable manner. For advance riders, there is the option of choosing the sea, waves, lagoon, kite trips, so many options. <\/p>\n

    The camp itself offers a range of accommodation options. From a premium chalet to a dorm style backpacker cabins. All meals are provided in the price which includes a mix of western and local cuisine. The team organizers everything for you from airport transfers to tuk tuk rides! There are also national parks with elephants and leopard, ancient cities which are 2000 years old within driving distance of the camp.<\/p>\n

    KSL is run by kiters for kiters and are managed by a Sri Lankan and French duo who would go out of the way to make you have a great experience. The peak season lasts from May to end September. <\/p>\n

    www.kitesurfinglanka.com\n<\/li>\n

  2. Witch\u2019s Rock Surf Camp<\/strong> is one of the world\u2019s best surf camps in Costa Rica, a perfect place for kite surfing. A lovely, amazing surfing community, located on a classy beach of warm water and amazing waves. Surrounded by people who are friendly and have the passion of surfing. Beginner, Intermediates and Advanced learners, all can surf directly on the main beach of the country, the Tomarindo. Instructors in Costa Rica have guidelines written in Spanish and English for the learners. One must try out surfing with different types of surfboards. Here it also teaches on how to make surfboard designs, rules for surf manners, and how waves are made.<\/li>\n
  3. Sagana Resort<\/strong>, Cloud 9 located at Siargao Island in Philippines, is one of the beautiful places with unbelievable waves. Siagro Island Resort is little away from the stunning surf of Cloud 9 which is the main attraction of the place. From August to the beginning of November are the months for surfing. Typhoon swells and best winds takes place at this time. But during May, June, and July time it\u2019s smaller. Except Cloud 9, there are other places like – Jacking Horse, Tuason Left, Rock Island, Stimpies Pacifico, Other Waves which are also open for surfing. One should have travel insurance when coming to Philippines.<\/li>\n
  4. Surf Camp Australia<\/strong> has different range of packages for surfing. If anyone wants to surf and have holiday then he must visit to Australia as it\u2019s going to be a lovely weekend, a holiday which will make a difference in one\u2019s life. There are packages for surfing. There will be friendly Australian instructors to instruct the beginners, intermediates and the advanced learners. There are different steps for the beginners to learn. Paddling, standing up, dropping into waves and riding will be taught during the teaching session of surfing. There are total five beaches where the surfing lesson will be given to the learners.<\/li>\n
  5. Easy Drop <\/strong>is one of the renowned schools in the world and internationally claimed Surf School. It\u2019s located at State of Bahia, Brazil, one of the first class surf schools. In Easy Drop Camp, the instructor gives practical, theoretical equipments and also strokes classes. These classes are sub-divided with different lessons to make it easier for the learners. Bahia has stunning beaches, warm water and great surfing for riders. There are total eight beaches where surfing is being done. One of the advantages of surfing in this place is that it\u2019s less crowded cause for its remote location and limited access.<\/li>\n
  6. Surfer\u2019s Paradise Campsite<\/strong> is one of the best camps in UK. This camp is located 10 miles away from Barnstaple in North Devon. The camp is close to the stunning beach suitable for surfing. The facilities that are been provided to the learners that they can hire surf, RNLI lifeguards, toilets, event information, hot and cold showers, picnic tables, weather and tide updates. Even the camps have rules of doing do\u2019s and don\u2019ts. One who will go for surfing to surfer\u2019s Paradise will have a memorable one. One must listen to the instructors as they are the beginners for surfing.<\/li>\n<\/ol>\n","protected":false},"excerpt":{"rendered":"

    Kitesurfing Kitesurfing camps have become a popular way for people to learn kitesurfing and reach a higher level compared to those that just take a one or two day course. Another benefit with kite camps are the fact that you get to know the group of people that are participating in the camp, hence kite […]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[93],"tags":[470],"_links":{"self":[{"href":"https:\/\/kite2012.com\/wp-json\/wp\/v2\/posts\/2570"}],"collection":[{"href":"https:\/\/kite2012.com\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/kite2012.com\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/kite2012.com\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/kite2012.com\/wp-json\/wp\/v2\/comments?post=2570"}],"version-history":[{"count":4,"href":"https:\/\/kite2012.com\/wp-json\/wp\/v2\/posts\/2570\/revisions"}],"predecessor-version":[{"id":2600,"href":"https:\/\/kite2012.com\/wp-json\/wp\/v2\/posts\/2570\/revisions\/2600"}],"wp:attachment":[{"href":"https:\/\/kite2012.com\/wp-json\/wp\/v2\/media?parent=2570"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/kite2012.com\/wp-json\/wp\/v2\/categories?post=2570"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/kite2012.com\/wp-json\/wp\/v2\/tags?post=2570"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}