Evita missatges d'spam a les valoracions de Magento sense utilitzar captcha

Si teniu funcionant una botiga Magento, segurament haureu rebut algunes valoracions de producte amb contingut no dessitjat en forma d'spam. Moderar uns pocs comentaris pot ser fàcil, però si el nombre d'enviaments és elevat, la validació d'aquestes valoracions pot convertir-se en un ardu treball.

Com segurament coneixeu, tenim l'opció de fer servir un CAPTCHA, utilitzat a la majoria de les webs, però introdueix un element de dificultat a l'usuari legítim que vol comentar un producte i no sempre evita que l'spam s'enviï.

Una solució que hem implementat als darrers projectes ha estat la de descartar aquells missatges que content enllaços o adreces webs. I per què? Molt fàcil, el missatge d'spam no té altre objectiu més que enviar enllaços per fer que el lector els polsi. És per això que implementarem un sistema de detecció d'enllaços i URLs.

El primer que necessitarem serà fer una còpia del fitxer del nucli app/code/core/Mage/Review/Model/Review.php app/code/local/Mage/Review/Model/Review.php perquè el puguem editar i conservar el canvis en una posterior actualització de la plataforma. Més informació: http://www.magentocommerce.com/wiki/5_-_modules_and_development/0_-_modu...

Tot seguit l'haurem de modificar, concretament la funció validate(). Haurà de quedar alguna cosa semblant 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');
    }

    // Començament del codi per detectar els enllaços i URLs
    foreach (array($this->getTitle(), $this->getDetail(), $this->getNickname()) as $text) {
      $count = 0;

      // Comptem les vegades que surten les cadenes de text "http://", "https://", "href" i "[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;
}

D'aquesta manera quan un robot d'spam introdueix una URL o enllaç a algun camp del formulari de valoració, no es registrarà el comentari.