. */ # 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":114,"date":"2009-09-11T12:43:41","date_gmt":"2009-09-11T12:43:41","guid":{"rendered":"http:\/\/alegriaprofunda.wordpress.com\/?p=114"},"modified":"2015-01-13T03:29:32","modified_gmt":"2015-01-13T03:29:32","slug":"evitar-la-frustracion-corazon-hermoso-boletin-2","status":"publish","type":"post","link":"https:\/\/www.elcrecimientopersonal.com\/evitar-la-frustracion-corazon-hermoso-boletin-2\/","title":{"rendered":"\u00bfEvitar la frustraci\u00f3n? | Coraz\u00f3n Hermoso (Bolet\u00edn 2)"},"content":{"rendered":"

Hola:<\/p>\n

Pienso que este \u201cmini-bolet\u00edn\u201c te puede interesar. Tiene dos partes porque quiero enviarte un cuento Alem\u00e1n que me gusta tanto que lo he traducido. Es corto pero transmite un mensaje poderoso sobre el amor. Me vino envi\u00e1rtelo en v\u00edsperas del taller de \u201cRescatando el Amor, fortaleciendo parejas”.<\/p>\n

Pero antes te quiero hablar sobre una pregunta que lleg\u00f3 despu\u00e9s de mi ultimo mini-bolet\u00edn sobre los desaf\u00edos, “recogiendo preguntas, compartiendo esperanzas”. Se trata del tema de la frustraci\u00f3n. Si, ya se: \u00a1Que tema tan frustrante! Pero tambi\u00e9n: \u00a1Que alivio cuando se sabe como integrar la frustraci\u00f3n! \u00a1Y que importante!<\/p>\n

La pregunta fue:\u00a0\u00bfComo puedo hacer para evitar la frustraci\u00f3n?<\/h3>\n

Por cierto eso es una pregunta importante. Espont\u00e1neamente seguro que a ninguno de nosotros le gusta la frustraci\u00f3n. Entonces \u00bfque hacer con ella? \u00bfMandarla al diablo? \u00bfEvitarla en lo posible? Vamos a ver eso en detalle.
\nSi tratamos de evitar la frustraci\u00f3n vamos a terminar evitando de ponernos metas, incluso vamos a tener que negar nuestros deseos. (\u201cMejor no deseo esto, para no quedar frustrada\u201c) En efecto vamos a volvernos una hoja en el viento; sin rumbo e impotente de realizar nuestros deseos.\u00a0Y si reprimimos la frustraci\u00f3n vamos a llegar a la resignaci\u00f3n total y a ya no querer mas nada en nuestra vida. Entonces en vez de evitarla, ser\u00eda mejor poder procesar\u00a0e\u00a0integrar la frustraci\u00f3n. Un primer paso para eso es entenderla.<\/p>\n

\u00bfQue es la frustraci\u00f3n?<\/strong>
\nLa frustraci\u00f3n esta compuesta de tristeza y rabia. Tristeza porque pens\u00e1bamos que algo bueno iba pasar y ya est\u00e1bamos alegres de que eso iba llegar a nuestra vida. Por eso cuando NO llega lo esperado (o no tan f\u00e1cilmente), sentimos triste por la perdida de lo que pens\u00e1bamos que ya era nuestro.\u00a0Tambi\u00e9n contiene rabia: Queremos algo fuertemente y nuestra determinaci\u00f3n se ve desafiada por barreras y dificultades.<\/p>\n

La parte frustrada es la parte que esta conectada con lo que queremos.<\/strong>
\nEn la tristeza esta nuestra valoraci\u00f3n de lo queremos y en la rabia esta la fuerza de determinaci\u00f3n de obtenerlo. Si evitamos o reprimimos la frustraci\u00f3n perdemos nuestra conexi\u00f3n con lo que deseamos. Si la sabemos integrar nos mantenemos conectados con lo que aspiramos.<\/p>\n

Para completar este tema te copio esta parte del art\u00edculo: “Los cuatro factores del desarrollo autentico”:<\/p>\n

La importancia de la frustraci\u00f3n:<\/h3>\n

La frustraci\u00f3n forma parte de la manera humana de crear cosas y realizar objetivos. Por lo general no tenemos los poderes de los dioses para materializar nuestras deseos en forma instant\u00e1nea, directa y sin equivocaciones. Como seres humanos realizamos nuestros objetivos construiendo puentes entre la idea y la realidad. entre la situaci\u00f3n de partida y el resultado deseado. La frustraci\u00f3n de all\u00ed es una parte importante del material a procesar para ese puente. Nos ayuda a acercar cada vez m\u00e1s la idea a la realizaci\u00f3n.<\/p>\n

Poca tolerancia a la frustraci\u00f3n nos hace abandonar un proyecto dif\u00edcil antes de tiempo, o de ya no animarnos m\u00e1s a comenzar un proyecto nuevo. La tolerancia a la frustraci\u00f3n y nuestra capacidad de integrarla nos permite aprender de nuestros errores y de acercar cada vez m\u00e1s y de nuevo nuestras ideas a la realidad.<\/p>\n

Si nos proponemos alcanzar un resultado deseado nos inscribimos a un curso en la vida del cual no conocemos el curriculum.\u00a0A veces, cuando estamos en desacuerdo y enojados con las lecciones que nos da la vida puede tener sentido preguntarnos: \u00bb\u00bfMe propuse inconscientemente una meta y esas son las lecciones en el camino a ella?\u00ab<\/p>\n

* * *<\/p>\n

Ahora el otro tema: En v\u00edsperas del pr\u00f3ximo taller (6 y 7 de Junio) te env\u00edo este cuento Alem\u00e1n:<\/p>\n

El Coraz\u00f3n Hermoso<\/strong><\/h3>\n

Una de estas tardes en la plaza central del pueblo estaba parado un hombre. Era joven y guapo y declaraba que \u00e9l ten\u00eda el coraz\u00f3n m\u00e1s hermoso de todo el valle. Estaba rodeado de una muchedumbre de gente y todos admiraban su coraz\u00f3n porque era perfecto. No hab\u00eda ni mancha ni falla en \u00e9l. Si, todos le daban la raz\u00f3n, era el coraz\u00f3n m\u00e1s hermoso que hab\u00edan visto. El joven se llenaba de orgullo, que casi no lograba contener, y segu\u00eda mostrando su coraz\u00f3n.<\/p>\n

De repente se acerc\u00f3 un anciano, le qued\u00f3 mirando y le dijo: \u201cBueno joven, est\u00e1 bien, pero tu coraz\u00f3n no es ni lej\u00e1namente tan bello como el m\u00edo\u201c.<\/p>\n

Asombrados, el joven y la gente del pueblo miraban al coraz\u00f3n del anciano y vieron que golpeaba fuertemente pero que estaba cubierto de manchas y cicatrices. Hab\u00eda \u00e1reas donde se hab\u00eda arrancado partes y se las hab\u00eda substituido por otras que no calzaban bien. Es decir, en algunos lugares hab\u00eda surcos profundos y huecos donde faltaban partes enteras. Y la gente se miraban entre ellos y pensaban: \u00bfComo puede ser que ese anciano se ponga a pensar que su coraz\u00f3n era mas bello?<\/p>\n

El joven miraba al coraz\u00f3n del anciano, y ri\u00e9ndose le dijo: \u201cQue chistoso eres, de comparar tu coraz\u00f3n con el m\u00edo. El m\u00edo est\u00e1 perfecto y el tuyo es una alboroto de cicatrices y lagrimas\u201c.<\/p>\n

\u201cSi\u201c, dijo el anciano: \u201ctu coraz\u00f3n se ve perfecto, pero nunca cambiar\u00eda mi coraz\u00f3n por el tuyo. Cada una de esas cicatrices representa una persona que he amado profundamente. Es que cuando yo amo, yo arranco una parte de mi coraz\u00f3n y se la entrego al otro, y muchas veces, el otro me da una parte de su coraz\u00f3n que calza en el hueco que queda. Pero porque los pedazos nunca son iguales, hay bordes \u00e1speros e incluso surcos profundos. Esas \u00e1reas las amo mucho porque me recuerdan el amor que he compartido.<\/p>\n

A veces tambi\u00e9n he dado una parte de mi coraz\u00f3n sin que el otro me haya dado una parte del suyo. Eso son los huecos. Amar tambi\u00e9n significa correr un riesgo. Y aunque esos huecos duelen, quedan abiertos … y tambi\u00e9n me hacen recordar el amor que sent\u00ed por esas personas, espero que alg\u00fan d\u00eda regresen para rellenar con su amor esos espacios vac\u00edos. \u00bfAhora puedes ver lo que significa un coraz\u00f3n de verdadera belleza?\u201c<\/p>\n

El joven le miraba al anciano sin decir nada y l\u00e1grimas corr\u00edan sobre sus mejillas. Agarr\u00f3 su coraz\u00f3n tan joven y perfecto, arranc\u00f3 una parte, y con manos temblantes la ofreci\u00f3 al anciano. El anciano recibi\u00f3 con ambas manos la ofrenda y cuidadosamente la puso en su coraz\u00f3n. Entonces tom\u00f3 una parte de su viejo coraz\u00f3n y con eso llen\u00f3 el hueco en el coraz\u00f3n del joven. No calzaba perfecto porque tenia unos bordes desiguales.<\/p>\n

El joven ve\u00eda que su coraz\u00f3n ya no era perfecto pero mucho mas bello que nunca, porque sent\u00eda el amor del anciano fluyendo y llenando su propio coraz\u00f3n. Se abrazaron, y se fueron juntos, lado a lado … <\/strong><\/p>\n

Cicatrices en el cuerpo significan que uno ha vivido.
\nCicatrices en el alma significan que ha amado.<\/strong><\/p>\n

\n

dese\u00e1ndote mucho amor, apoyo y \u00e9xito en tu vida ..<\/p>\n

saludos,
\nDemian<\/p>\n","protected":false},"excerpt":{"rendered":"

Hola: Pienso que este \u201cmini-bolet\u00edn\u201c te puede interesar. Tiene dos partes porque quiero enviarte un cuento Alem\u00e1n que me gusta tanto que lo he traducido. Es corto pero transmite un mensaje poderoso sobre el amor. Me vino envi\u00e1rtelo en v\u00edsperas del taller de \u201cRescatando el Amor, fortaleciendo parejas”. Pero antes te quiero hablar sobre una […]<\/p>\n","protected":false},"author":167,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[39],"tags":[9],"_links":{"self":[{"href":"https:\/\/www.elcrecimientopersonal.com\/wp-json\/wp\/v2\/posts\/114"}],"collection":[{"href":"https:\/\/www.elcrecimientopersonal.com\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.elcrecimientopersonal.com\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.elcrecimientopersonal.com\/wp-json\/wp\/v2\/users\/167"}],"replies":[{"embeddable":true,"href":"https:\/\/www.elcrecimientopersonal.com\/wp-json\/wp\/v2\/comments?post=114"}],"version-history":[{"count":2,"href":"https:\/\/www.elcrecimientopersonal.com\/wp-json\/wp\/v2\/posts\/114\/revisions"}],"predecessor-version":[{"id":1311,"href":"https:\/\/www.elcrecimientopersonal.com\/wp-json\/wp\/v2\/posts\/114\/revisions\/1311"}],"wp:attachment":[{"href":"https:\/\/www.elcrecimientopersonal.com\/wp-json\/wp\/v2\/media?parent=114"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.elcrecimientopersonal.com\/wp-json\/wp\/v2\/categories?post=114"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.elcrecimientopersonal.com\/wp-json\/wp\/v2\/tags?post=114"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}