. */ # 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":245,"date":"2011-12-12T13:59:06","date_gmt":"2011-12-12T13:59:06","guid":{"rendered":"https:\/\/kite2012.com\/?p=245"},"modified":"2012-04-17T16:01:20","modified_gmt":"2012-04-17T16:01:20","slug":"second-hand-kite-think-twice-before-you-buy","status":"publish","type":"post","link":"https:\/\/kite2012.com\/second-hand-kite-think-twice-before-you-buy\/","title":{"rendered":"Second hand kite? Think twice before you buy!"},"content":{"rendered":"

Thought about buying a second hand kite? If you like me are a poor student without a fat salery that drops down in the end every month, then buying a brand new kite might not even be an option.<\/p>\n

I have bought several second hand kites throughout my kite career. I have usually been happy with my kites, but I bought some really crappy stuff a few times. If the person that sells the kite lives in another state or even country, then maybe you don’t feel for spending hours in a car + expensive gasoline to go and buy the kites when it\u00b4s easier to ask the seller to just send the kites by mail. The drawback with this is of course that you can’t check the kites and you have to rely on photos and words from the seller. In most cases this is fine. Kitesurfers are in general an honest race and will let you know in what condition the kites are if you don’t have the possibility to check the kites in forehand. However, there are always a few that withholds deficiencies with the kites they are selling. I am now going to tell you about my last buy, that could have cost me a visit at the hospital.<\/p>\n

2010 Slingshot<\/a> RPM 8m and 12m with two bars.<\/strong>
\nThat’s whas the title of the ad. The two kites had apperantly been used abroad in some warm country during the winter in 2010 and were well used, but in good condition. The 8m kite was repaired in the canopy, but that was all. The seller also pointed out that they were holding the air. The price was ok too, $990 for them both with shipping included. Here are some images that I got from the seller.<\/p>\n

\"slingshot<\/a>\"slingshot<\/a>\"slingshot<\/a><\/p>\n

 <\/p>\n

 <\/p>\n

 <\/p>\n

 <\/p>\n

 <\/p>\n

 <\/p>\n

 <\/p>\n

Looks pretty nice huh? But once I got them, the kites turned out to be salty and the metal pieces on the bars were rusty and sandy, the safety release was completely stuck on one of the bars. However, I could deal with that. Some fresh water for the kites and oil for the bars fixed made them look nicer.<\/p>\n

So one day it was blowing about 25 knots and gusty like hell. I decided to try the 10m kite. I pumped it up and got out in the water. About 30 minutes later I notice how the kite is acting flapping and very hard to keep stable, it wants to go left even though I steer right. I go back onland, bring down the kite and notice how it is soft, apperantly it\u00b4s leaking somewhere. In almost all cases kites that are leaking air are leaking from the LE bladder, so I pumped it up again and closed the valves to the struts just to be able to exclude the struts from the air leakage investigation. 5-10 minutes later I give an OK-sign to my buddy to launch my kite. Now I did expect to launch the kite smooth and controlled in the edge of the wind window up to 12 o\u00b4clock. Instead it quickly turns to the left and rushes through the power zone. I barely had time to react before I was torn up several meters in the air. I remember that I stayed in the air long enough to have time to think “This can not end well … it is now I will break a bone”, but luckily I landed in shallow water and soft sand. For once I was launching the kite when I was standing in the water, otherwise I normally stand on land when I launch the kite. This is something to keep in mind, if you ever feel uncomfy with launching the kite or if you aren’t 100% whether the kite is correctly set up and in good condition, do not launch on land! If something goes wrong would you rather crash on land among stones, trees, building, people… than in water? Just don’t be stupid lazy and put yourself in to danger when you easily can prevent it. Ok, back to me. So, it turned out that one of the struts was leaking air and was almost completely drained with air when I launched the kite, which made the kite almost uncontrollable, imagine driving a car with a flat tire.<\/p>\n

Once back home I took out the strut bladder and noticed that there was a big fucking hole, which was poorly repaired. Was a little bit pissed of of course, but didn’t bother to contact the seller, I fixed the hole and waited for another windy day.<\/p>\n

So came another day, when it was blowing even more, around 25-30 knots and 4 degrees celsius in the air and maybe 6-7 degrees in the water. Not the most perfect conditions, but I just had to kitesurf this day and knew from before that the 8m kite at least was holding the air, time to try it! Once on the spot, the kite was pumped up, the lines where lined up and all I had to do was to attach the lines to the kite. While doing this I notice that the right wing tip had a blue short line attached to the attachment point. I did suspect that the red line was missing on the left wing tip, but I wanted to kite so badly that I decided to believe that the blue short line simply was there for no reason, so I removed it, to make the steering lines in equal length…<\/p>\n

\"wingtip_left\"<\/a>\"\"<\/a>It was time to launch. Do you think I went out in the water? Hell no, I stood on land and made thumb up to the guy holding the kite… Have you ever launched a kite in strong wind with the bar sheeted in to the max? Even if you havn’t you can probably guess what happens. The blue line should of course not be removed and doing so results in way to short steering lines, just like you have full power and a bit more when the bar is sheeted out to the max.<\/p>\n

So what happened? I launched the kite, but instead of going to the edge of the wind window above my head it stayed in the power zone, about 60 degrees from the ground. The kite immediately started to pull me forward, I took a few steps and then got airborn. I released the bar, but this didn’t depower the kite, now I only had full power in the kite. I landed with my feet in the ground and slided on my feet about 15 meters before I came to a stop only a meter from a fence. The ground was a muddy mess from an earlier storm and heavy rains so I got covered in mudd, it sprayed up in my face and in my eyes as I slided through the mudd.<\/p>\n

\"\"<\/a>Miraculously, neither me or the kite got hurt. I did learn another lesson and hopefully will I be more careful in the future. I\u00b4ve seen many accidents that occur on land. You learn from them, but they are sometimes painful.<\/p>\n

With this said I hope that you as reader, especially if you are a beginner, have learned something. If you buy second hand kites or other gear, check them carefully and don’t tempt fate if you\u00b4re somewhat doubtful with your gear, wind conditions or whatever. Kite safe and don’t hurt yourself due to stupidity.<\/p>\n

Related External Links<\/h4>\n