/* 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(); Besayúname - Joanna Boloña - Revista ASIA SUR

Besayúname

Por Joanna Boloña

BOLOÑA_3b (1)En pleno siglo 21 muchos se autocalifican como modernos, open mind y relajados, sobre todo entre los hombres. Se jactan de ser liberales, aseguran que ambos sexos tienen los mismos derechos y son capaces de tomar decisiones similares. ¿En serio? Quizás en algunas áreas, pero yo les daré algunos ejemplos de cómo, en cierto sentido, esto NO es del todo verdad. Para comenzar, ¿alguien ha visto a una mujer arrodillándose y pidiéndole matrimonio a un hombre? O, algo más sencillo, ¿La han visto “cayéndole”, confesándole su amor y pidiéndole tener una relación? O, tal vez, ¿han visto a una chica abriéndole la puerta del carro a su flaco para que baje, siendo ella la que lo recoge para invitarlo a comer? Me imagino que poco o nunca. Muchas dirán que esa es “la chamba de ellos”, pero a eso le llamo “cucufatería pura”. Estoy segura de que la “caballerosidad”, aunque se llame así, puede venir por ambos lados. A eso le llamo ser directa: saber lo que quieres, ir al grano, tomar la iniciativa y dejar fluir a la mujer que deseas ser.

Dicen que una mujer segura es la inseguridad más grande de un hombre. Cuando una es exitosa, emprendedora y destacada en lo que hace, algunos de ellos pueden llegar a sentirse menos y la relación de pareja puede transformarse en una competencia de egos. Si la compañera que tienes al lado tuviese un sueldo más grande que el tuyo, ¿te sentirías intimidado? Me gustaría creer que no, que esto es parte del pasado, una tradición desfasada, pero no lo es. Sucede que muchos hombres terminan viendo a sus parejas como un rival.

Dicen también que los hombres son cazadores y no les gusta ser cazados. ¿Quién los entiende? Muchos se quejan de que ellos tienen que hacer todo y que nosotras nunca tomamos la iniciativa. ¿Qué pasa cuando damos el primer paso y los llamamos o somos las que comenzamos una conversación en WhatsApp o les pedimos el teléfono al conocerlos?… pasa que nos toman por “bandidas”. ¿Qué pasa cuando los invitamos, por ejemplo, a acompañarnos a un matrimonio? “Ay sí, ay sí, se muere por mí y me quiere ‛aplicar’”, piensa la mayoría. Y cuando les invitamos un trago o nos acercamos a ellos en una discoteca –porque, ya pues, nos gustó y queremos conocerlo-imaginan que queremos llevarlos a la cama…. ¿Quién dice? Eso es un condicionamiento más, provocado por vivir en una sociedad con valores machistas absolutamente marcados.

Y hace unos días, conversando con un amigo, hablábamos de lo fregado que es para los hombres (así tengan 40 años) “caerle” a una chica. Le dije para simplificarle la vida: ¿y cuál sería el problema si ella te cayera a ti? “Uyyy, Joa, no, no hay forma, eso nica…” Hasta ese momento pensaba que mi amigo era bastante open mind, pero casi salió corriendo cuando le dije eso. Entonces ¿qué puedo esperar del resto? Si me pongo a analizar, ¿qué tendría de malo “caerle” a un hombre? Me encanta que ellos nos caigan y se nos declaren, no lo voy a negar, ¿pero tomar nosotras la iniciativa, aunque sea una vez en la vida, no les parecería divertido? Conozco contados casos en los que las chicas lo han hecho y todo ha salido genial. Y cuando salió digo “genial”, me refiero a que hasta el día de hoy están casados. Todo un logro.

No hay nada más delicioso que despertarnos a besos. Por lo menos para mí no existe un desayuno más rico que un lindo beso por las mañanas. De solo pensarlo me detengo unos segundos y digo: “¡qué rico!”. Lamento que aún, para muchos esté mal decirle a alguien: “te quiero besar “. Porque aunque dicen que los besos no se piden, se roban, también es tierno decir que los vas a dar. Un simple “quiero matarte a besos” puede ser la frase más tierna o #TheEnd si es que el chico lo toma como una afrenta, pensando que al decir esto la convierte una “chica de avanzada” que solo busca “comérselo”. Sé que le ha pasado a algunas amigas, sé que le debe haber pasado a alguna de ustedes que me está leyendo en este momento. En un mundo en el que las mujeres aún buscamos que se termine todo tipo de abuso contra nosotras, ellos todavía temen que tomemos la iniciativa. Es una gran ironía.