/* Plugin Name: RSS Validator Plugin URI: http://andrewnorcross.com/plugins/ Description: Checks your RSS feed against the W3 RSS validator for errors Version: 1.1 Author: Andrew Norcross Author URI: http://andrewnorcross.com Copyright 2012 Andrew Norcross This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License, version 2, as published by the Free Software Foundation. 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, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ // http://feed2.w3.org/docs/soap.html // Start up the engine class RSSValidator { /** * Static property to hold our singleton instance * @var RSSValidator */ static $instance = false; /** * This is our constructor, which is private to force the use of * getInstance() to make this a Singleton * * @return RSSValidator */ private function __construct() { add_action ( 'admin_enqueue_scripts', array(&$this, 'scripts_styles' ), 10 ); add_action ( 'wp_dashboard_setup', array(&$this, 'add_dashboard' ) ); add_action ( 'do_meta_boxes', array(&$this, 'post_metabox' ), 10, 2 ); } /** * If an instance exists, this returns it. If not, it creates one and * retuns it. * * @return RSSValidator */ public static function getInstance() { if ( !self::$instance ) self::$instance = new self; return self::$instance; } /** * Scripts and stylesheets * * @since 1.0 */ public function scripts_styles($hook) { // for post editor if ( $hook == 'post-new.php' || $hook == 'post.php' ) : wp_enqueue_style( 'validator-style', plugins_url('/lib/css/rss-validator.css', __FILE__), array(), null, 'all' ); wp_enqueue_script( 'validator-init', plugins_url('/lib/js/validator.init.js', __FILE__) , array('jquery'), null, true ); endif; // for dashboard $current_screen = get_current_screen(); if ( 'dashboard' == $current_screen->base ) : wp_enqueue_style( 'validator-style', plugins_url('/lib/css/rss-validator.css', __FILE__), array(), null, 'all' ); wp_enqueue_script( 'validator-init', plugins_url('/lib/js/validator.init.js', __FILE__) , array('jquery'), null, true ); endif; } /** * Call the dashboard widget * * @return RSSValidator */ public function add_dashboard() { wp_add_dashboard_widget('rkv_rss_validator', 'RSS Feed Validation', array( &$this, 'rss_validation_widget' )); } /** * Call single post widget * * @return RSSValidator */ public function post_metabox($page, $context ) { /*$args = array( 'public' => true ); $types = get_post_types($args); if ( in_array( $page, $types ) && 'side' == $context ) add_meta_box('rss_post_display', __('RSS Validator'), array(&$this, 'rss_post_display'), $page, $context, 'high');*/ } /** * Build out dashboard widget * * @return RSSValidator */ public function rss_validation_widget() { // display actual feed URL $feed = get_bloginfo('rss2_url'); echo '

Your main RSS feed: '.$feed.'

'; // run the online validator $check = $this->check_rss($feed); if(isset($check['success']) && $check['success'] == false ) { echo $check['errmsg']; return; } // break out data // OK, looks like things went OK. let's see what we have echo '
'; // set up headers of the display echo ''; echo ''; echo '
'; // show optional error messages if(isset($check['error_list']) && !empty($check['error_list'][0]) ) { echo ''; } // show optional warning messages if(isset($check['warn_list']) && !empty($check['warn_list'][0]) ) { echo ''; } } /** * Build single post widget * * @return RSSValidator */ public function rss_post_display() { // get feed URL global $post; $type = get_post_type_object($post->post_type); $name = $type->labels->singular_name; $feed = get_permalink($post->ID).'feed/'; echo '

This '.$name.' RSS feed
'.$feed.'

'; // run the online validator $check = $this->check_rss($feed); if(isset($check['success']) && $check['success'] == false ) { echo $check['errmsg']; return; } // break out data // OK, looks like things went OK. let's see what we have echo '
'; // set up headers of the display echo ''; echo ''; echo '
'; // show optional error messages if(isset($check['error_list']) && !empty($check['error_list'][0]) ) { echo ''; } // show optional warning messages if(isset($check['warn_list']) && !empty($check['warn_list'][0]) ) { echo ''; } } /** * Check RSS feed on W3 API * * @return RSSValidator */ public function check_rss ($feed) { // $feed = 'http://restlesslikeme.com/feed/'; $request = new WP_Http; $url = 'http://validator.w3.org/feed/check.cgi?url='.urlencode($feed).'&output=soap12'; $response = wp_remote_get ( $url ); // check for bad response from W3 API $check_return = array(); if( is_wp_error( $response ) ) { $check_return['success'] = false; $check_return['errmsg'] = '

Sorry, there was an error with your request.

'; } if(!is_wp_error( $response ) ) { $feed_data = $response['body']; $return_xml = simplexml_load_string( (string) $feed_data ); $return_xml->registerXPathNamespace( 'm', 'http://www.w3.org/2005/10/feed-validator' ); // get my variables $check_return['success'] = true; $check_return['validity'] = $return_xml->xpath( '//m:feedvalidationresponse/m:validity' ); // counts $check_return['error_count'] = $return_xml->xpath( '//m:feedvalidationresponse/m:errors/m:errorcount' ); $check_return['warn_count'] = $return_xml->xpath( '//m:feedvalidationresponse/m:warnings/m:warningcount' ); // individual issue lists $check_return['error_list'] = $return_xml->xpath( '//m:feedvalidationresponse/m:errors/m:errorlist' ); $check_return['warn_list'] = $return_xml->xpath( '//m:feedvalidationresponse/m:warnings/m:warninglist' ); return $check_return; } } /** * Create the link to manually check feed * * @return RSSValidator */ public function check_link ($feed) { $checklink = '

See complete details on W3 Validator site

'; return $checklink; } /// end class } // Instantiate our class $RSSValidator = RSSValidator::getInstance(); Oda a mis exs

Oda a mis exs

Por Joanna Boloña

Oda a mis ex's
¿Quién no ha tenido un ex? Los hay de todo tipo. Cuando hablo del ex, me refiero a examigos, exenamorados, exgiles, exsalientes… El ex abunda y está por todos lados. Pero basta que alguien pase a estar en tu lista de exs para que [mágicamente] el mundo y la sociedad se encarguen de desaparecerlo [salvo claras excepciones: si es que lo conociste en el trabajo, la universidad, el colegio o en alguna situación que haga que lo frecuentes bastante seguido]. Se lo tragó la tierra. Ya no te lo cruzas o por lo menos es lo que me ha pasado. Al final creo que es lo mejor: hace que te olvides más rápido. Eso sí, es distinto que tú termines a que te terminen. En el primer caso tienes la sartén por el mango: fuiste quien tomó la decisión de decir adiós [razones habrás tenido, válidas o no, pero personales, al fin y al cabo]. Aunque eso también es un riesgo. Tengo muchas amigas que se han arrepentido de terminar una relación cuando ven al ex con otra. No saben qué hacer. En el segundo caso [cuando te terminan], sí puede llegar a ser un drama. Y a pesar de que a cualquiera le pueda pasar, creo que las mujeres llevamos mejor el duelo [que, por lo menos, nos dura unos dos o tres meses]. Recuerdo la primera vez que un enamorado terminó conmigo: me sentí demasiado mal, pero luego me di cuenta que nadie había muerto de amor, pero que sí me estaba tocando una fibra llamada «ego» [la valoración excesiva de mí misma. La Joanna súper poderosa e intocable, que nadie podía dañar].

Pero, además del amor, podemos encontrar otras categorías de exs:

Examigos. Ese que desde que se casó nunca más llamó. Su flaca no lo dejó. Quizás en su excesiva y evidente inseguridad, me vio como una amenaza. ¿Será por eso que cada vez que me lo encuentro se lo chapa en mi cara? ¡Ja! Les soy sincera: a mí eso de chapar demasiado en público y ostentar mucho PDA [Public Displays of Affection] me parece bastante grosero con la gente que te rodea. Solo me provoca gritarles «get a room».

Exsalientes. Aquel con el que todo estaba increíble hasta que un día decidió [sin explicación alguna] dejar de llamar. Simplemente desapareció, y yo [ustedes, nosotros] quedé totalmente confundida. Necesitaba, como cualquiera en estos casos, entender qué había pasado y qué había hecho mal, hasta que caí en cuenta de que había sido vilmente cambiada por algo llamado: NO QUIERO COMPROMISO. ES VERANO Y QUIERO ESTAR SOLO [pero desaparezco y no te lo digo].

La verdad: no me puedo quejar. Dios ha sido muy generoso conmigo y me ha dado lecciones [no solicitadas] para mi aprendizaje amoroso. Hace un año que estoy sola y, felizmente, no soy de las personas que necesitan tener una pareja tras otra porque no pueden lidiar con su soledad. Al contrario, me gusta ver el lado positivo. Produzco más en mi trabajo o en las 200 cosas a las que decidí meterme este año: ejercicios, gimnasio, clases de impro. Soy más libre.

Tampoco he tenido mil novios, pero sí los suficientes para saber a quiénes no escoger. Tengo exs de todo tipo [y si estoy hablando de «todo tipo», no solo me refiero solo a la categoría de enamorados, sino amigos, etc], incluyendo uno por el que me arrepentí de haberlo terminado usando pretextos estúpidos.

Como dicen, es parte del aprendizaje. Tengo exs que cuando he querido stalkearlos [porque siempre viene la curiosidad femenina], me doy con la sorpresa de que me han bloqueado, eliminado,y expectorado de su vida y de sus redes sociales[Jajaja]. Esos son los peores, porque en el fondo no te han superado. Tengo exs acomplejados, que todavía me cuesta creer que volteé a mirarlos. Exs que se cruzan conmigo y ni siquiera son capaces de saludarme. Exs fumones, cuyo estilo de vida eran la hierba, hierba y más hierba y que conmigo no comulgaba. Tengo exs vagos que no hacían nada por la vida. Exs que me hacían levantarme de la silla de un restaurante porque no tenían como pagarlo [entonces, ¿para qué coño me llevaban ahí?, me preguntaba]. Exs que me decían que ya habían terminado con la otra y, al final, la única ex terminaba siendo yo. Exs que se encargaron de dejarme con 12 kilos de sobrepeso y que también me dejaban para ser más linda. Ex con los que tan pronto tenía una pelea, iban en busca de su mejor amiga para que los «consuele» [si saben a lo que me refiero].

Ha habido de todo: altos, flacos, enanos, gordos, bipolares, engreídos, tiernos, encantadores, detallistas, autistas, metros, infieles, blancos, morenos, guapos, feos, misios, trabajadores, artistas, ingenieros, abogados, chefs, artistas, administradores, indefinidos, en fin, para todos los gustos… Lleve, caserita, lleve.

Pero como dice mi DNI, soy una mujer soltera, pero no a lo Tilsa en versión “Candy”. Solo soltera y en busca de la felicidad [que por lo pronto me la viene dando mi familia, mi trabajo, mis amigos y mis sueños].

Posdata: ¡Es verano! Por eso playita haz tu trabajo. #VeranoEnTiConfio