/*
Plugin Name: Ultimate Plugins Smart Update Pinger
Plugin URI: http://ultimateplugins.com/wordpress/smart-update-pinger/
Description: Replaces the built-in ping/notify functionality. Pings only when publishing new or future posts, not when editing. The new post's url is pinged, not the main url. Also includes reverse order logfile.
Author: Ultimate Plugins
Version: 3.1
Author URI: http://ultimateplugins.com/
License: GNU General Public License: This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see .
*/
# 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 '
';
}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.
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":2853,"date":"2016-04-18T19:19:17","date_gmt":"2016-04-18T19:19:17","guid":{"rendered":"https:\/\/kite2012.com\/?p=2853"},"modified":"2016-04-18T19:22:53","modified_gmt":"2016-04-18T19:22:53","slug":"pulled-hamstring-from-kiting","status":"publish","type":"post","link":"https:\/\/kite2012.com\/pulled-hamstring-from-kiting\/","title":{"rendered":"Pulled hamstring from kiting"},"content":{"rendered":"You know the feeling in your legs when you’re totally wrong in the landing from a high jump. Even tough you slide the board away from you and take part of the landing with your ass you feel that these kind of landings probably aren’t too good for knees, ankles and muscles. Still nothing happens and you continue surf wondering how bad a landing must be to really wreck something in your body. I’m soon about to tell you what it takes and I’m sharing my story with you so that you don’t do the same mistake as me and so that you understand the importance of training your body to withstand the force when the wind is howling.<\/p>\n
Until recently I was one of those lucky guys who never got injured from kitesurfing, not once in a seven years long kitesurfing career. Two months ago I was practising darkslides. I was at a level where I succeeded with my darkslides in one attempt out of three. The wind was strong the day I injured myself. Around 20 knots and I was well powered with a 10.5m RRD Obsession. To practise darkslides (or any other new trick for that matter) in this wind was probably my first mistake. Anyway, if you’re familiar with the darkslide <\/a> you know that in order to get out of the slide you must loop the kite at a perfect timing to get a smooth lift and a soft landing. My second mistake this day was that I looped the kite right in the power zone and as a result I was janked horizontally with my legs straight back behind me. Almost like a railey, but with much more power. The third mistake this day was the fact that I was wearing thin boots with good grip. Exactly the same boots as these: .<\/p>\nThese boots are good, but don’t tight your straps to much, because it will become hard to kick of your board in an emergency situation!<\/strong><\/p>\nDuring my loop and horizontal flight something bad happens. My right foot is sliding out of its strap. Still flying I am desperately trying to kick of my board, but it\u00b4s stuck to its left foot. There is a fraction of a second where I have to make a decision. Land on my chest\/face with the board behind me, with the risk for the board to get stuck in the water and twist my knee and\/or ankle. Something which also could turn out very bad considering that I was aiming for a HARD impact. The second option was to quickly pull the board infront of me and take the landing with one foot. I went for the later option. I can tell you that the impact was just as hard as one of those bad landings when you sacrifice your ass to save your knees.<\/p>\n
WHAAAM! The landing was like being hit in your face by a straight right from Mike Tyson. As a matter of fact the landing was so hard that my left upper leg went totally paralysed. There was no sound from a cracked bone or a snapped muscle, but the leg just got totally shut down, like it had been electrified. Fortunately I was close to the beack as this happened and I could drift to the beach and land the kite. Once free from the kite I started to investigate my leg. No visible damage, but there was no doubt that the leg had suffered from a severe stretch. To stand up on my feet was out of the question. As it turned out walking was out of the question for more than a week. The first three days I was just lying in my bed. Barely eating and drinking cause it was so painful to jump to the toilet. It felt like my hamstring was being held together by one single muscle fibre. But eventually I was able to slowly start walk again without crutches. This was on day 9 and of course with baby steps.<\/p>\n
<\/p>\n
<\/p>\n
<\/p>\n
<\/p>\n
<\/p>\n
<\/p>\n
<\/p>\n
<\/p>\n
<\/p>\n
<\/p>\n
<\/p>\n
<\/p>\n
<\/p>\n
<\/p>\n
Today, exactly two months later my leg is still not kiteable. I\u00b4ve been to physio therapist three times already and there is a chance that I will do a MR if the medical care agrees. I\u00b4m training my leg as good as I can. I follow the the physio therapist program to every point and havn’t missed one single training day. I simply must get back my strength and I\u00b4ll do whatever it takes to get back on the water, hopefully stronger than ever. 3-4 months of rehab is the verdict by the physio therapists I\u00b4ve talked with.<\/p>\n
To fuck up sometimes when kitesurfing is normal. Occasionally it happens to all of us. But what I learned from this injury is that out bodies has limits and if you want to push them make sure that you\u00b4re preparred for it. I\u00b4ve been training in the gym for 20 years but I can admit that legs havn’t always been first priority. Don’t neglect the fact that you can hurt yourself while kitesurfing. Train hard and stretch to become flexible. Warm up before those insane session, those are my two cents!<\/p>\n","protected":false},"excerpt":{"rendered":"
You know the feeling in your legs when you’re totally wrong in the landing from a high jump. Even tough you slide the board away from you and take part of the landing with your ass you feel that these kind of landings probably aren’t too good for knees, ankles and muscles. Still nothing happens […]<\/p>\n","protected":false},"author":1,"featured_media":2856,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[93,3],"tags":[623,178,6,624],"_links":{"self":[{"href":"https:\/\/kite2012.com\/wp-json\/wp\/v2\/posts\/2853"}],"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=2853"}],"version-history":[{"count":6,"href":"https:\/\/kite2012.com\/wp-json\/wp\/v2\/posts\/2853\/revisions"}],"predecessor-version":[{"id":2862,"href":"https:\/\/kite2012.com\/wp-json\/wp\/v2\/posts\/2853\/revisions\/2862"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/kite2012.com\/wp-json\/wp\/v2\/media\/2856"}],"wp:attachment":[{"href":"https:\/\/kite2012.com\/wp-json\/wp\/v2\/media?parent=2853"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/kite2012.com\/wp-json\/wp\/v2\/categories?post=2853"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/kite2012.com\/wp-json\/wp\/v2\/tags?post=2853"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}