Evita mensajes de spam a las valoraciones de Magento sin usar captcha

Si tienes funcionando una tienda Magento, puede que hayas recibido algunas valoraciones de producto con contenido no deseado en forma de spam. Moderar unos pocos comentarios puede ser fácil, pero si el número de envíos es elevado, la validación de estas valoraciones puede convertirse en un arduo trabajo .

Como seguramente conoces, tenemos la opción de usar un CAPTCHA, utilizado en la mayoría de las webs, pero introduce un elemento de dificultad al usuario legítimo que quiere comentar un producto y no siempre evita que el spam se envíe.

Una solución que hemos implementado en los últimos proyectos ha sido la de descartar aquellos mensajes que contienen enlaces o direcciones web. ¿Y por qué? Muy fácil, el mensaje de spam no tiene otro objetivo más que enviar enlaces para hacer que el lector los pulse. Es por ello que implementaremos un sistema de detección de enlaces y URLs.

Lo primero que necesitaremos será hacer una copia del archivo del núcleo app/code/core/Mage/Review/Modelo/Review.php a app/code/local/Mage/Review/Modelo/Review.php para que podamos editar y conservar los cambios de una posterior actualización de la plataforma . Más información : http://www.magentocommerce.com/wiki/5_-_modules_and_development/0_-_modu...

A continuación lo deberemos modificar, concretamente la función validate ( ) . Deberá quedar algo parecido a :

 

public function validate()
{
    $errors = array();

    if (!Zend_Validate::is($this->getTitle(), 'NotEmpty')) {
        $errors[] = Mage::helper('review')->__('Review summary can\'t be empty');
    }

    if (!Zend_Validate::is($this->getNickname(), 'NotEmpty')) {
        $errors[] = Mage::helper('review')->__('Nickname can\'t be empty');
    }

    if (!Zend_Validate::is($this->getDetail(), 'NotEmpty')) {
        $errors[] = Mage::helper('review')->__('Review can\'t be empty');
    }

    // Principio del código para detectar los enlaces y URLs
    foreach (array($this->getTitle(), $this->getDetail(), $this->getNickname()) as $text) {
      $count = 0;

      // Contamos las veces que sale las cadenas de texto "http://", "https://", "href" y "[url"
      $count += substr_count($text, "http://");
      $count += substr_count($text, "https://");
      $count += substr_count($text, "href");
      $count += substr_count($text, "[url");

      if ($count > 0) {
        $errors[] = Mage::helper('review')->__('Unable to submit your request. Please, try again later.');
      }
    }

    if (empty($errors)) {
        return true;
    }
    return $errors;
}

De esta manera cuando un robot d'spam introduce una URL o enlace en algún campo del formulario de valoración, no se guardará el comentario.