/* 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(); MODA ACUÁTICA

MODA ACUÁTICA

Se va cerrando el primer tercio del año, pero la temporada de verano parece resistir y durar. Lo mismo que Capittana, Beso de Sal y Liberata, tres marcas de trajes de baño que están marcando la pauta cuando de ir a la playa con estilo se trata.
ModaAcuática

CAPITTANA

Por más que sea un sector con varios jugadores posicionados en el mercado aún había un nicho inexplotado: no existían marcas con personalidad que le hablen directo al consumidor», es lo primero que nos dice Raffaella Raffo cuando nos cuenta la historia de Capittana. Para ella en Latinoamérica no hay marcas que sean «globales». Copas, bobos, encajes, cintura alta y algunos culottes, montones de straps a la cadera, trenzados y ribeteados decoran sus biquinis. Podríamos decir que Raffaella trabaja en sentido inverso, pues busca primero las telas y una vez que las ve empieza a imaginar y a crear en su cabeza para luego aterrizar todas sus ideas. «Recibo mucha inspiración en general: cada viaje, paseo, galería, muestra en un museo me llenan la cabeza de ideas que luego traspaso a mis diseños», dice. Raffaella busca que la relación Capittana-cliente sobrepase la transacción monetaria, «que sea más como una amistad». Por ello el uso de las redes sociales no se restringe a imágenes de productos, pues tiene con el consumidor un trato directo y coloquial, refuerza la comunicación con publicaciones que refieran a aventuras cotidianas, «nos burlamos de nosotras mismas, tratamos de divertirnos con lo que nos da la vida». De eso se trata, ¿no? De capitaneartu propio barco.

ModaAcuática1

FB:/capitana
www.capittana.com

BESO DE SAL

ModaAcuática2

Hace poco menos de una década parecía imposible encontrar biquinis de diseño en la ciudad, y su importación era la única salida. Pero como bien nos recuerda María José Wensjoe, de Beso de Sal, marcas como Applauzzi/Aguaclara o Praia Brava empezaban a abrirse camino. Nos explica que «aun así el mercado todavía está en pleno crecimiento. Esto ha generado oportunidad de expansión en varios rubros, incluida la moda del swimwear», y considera que la única forma de dar longevidad a su marca es «preocuparse solo en la calidad».

Comodidad, diseño y un trato personalizado es el feedback que ella ha recogido de su clientela a través de la venta directa. «Empezamos con un showroom en el Perú y luego una tienda virtual en Estados Unidos. Ahora impulsamos con mucha fuerza los canales indirectos, incluidas las ventas al por mayor y representaciones en otros países», aclara en una agradable combinación de emoción y seguridad. ¿Y cómo se sostiene una empresa con un producto que es solo funcional una temporada del año? Para ella la demanda de biquinis y sus complementos no cesa en los doce meses, pues recibe permanentemente solicitudes de sus prendas desde el sur. La innovación constante es el valor diferencial de su marca. Este 2015 su colección está inspirada en los detalles que destacan en nuestra costa: en sus estampados resaltan desde las frutas ácidas hasta los altos edificios de Ancón, pasando por el colorido de Agua Dulce. Flecos en el busto, combinación de estampados con cierto acabado patchwork y tops cruzados en la espalda son algunas de las referencias que complementan su línea.

ModaAcuática3

FB:/besodesal
www.besodesal.com