it-swarm-es.com

¿Cómo prevenir múltiples votos en las encuestas del módulo de tasas?

He instalado el módulo de velocidad , y configura el widget de emoción. Me gusta este módulo, pero después de que voto con éxito, puedo hacer clic en el botón de votación nuevamente. En su lugar, quiero emencionar una ventana que dice "Has votado. No votas de nuevo", para evitar que las personas votan varias veces.

2
enjoylife

El módulo de tasas no ha construido soporte para esto. Si quisieras hacer esto, tu mejor opción sería

  • Deny Duplicate Votes, depende de usted decidir cómo, pero puede verificar la tabla de la API de votación que almacena las direcciones IP de todos los que han votado, entonces use rate_vote_alter Hook. Hacerlo de esta manera haría imposible cambiar la votación.
  • La otra opción es usar rate_vote_alter Para evitar que el módulo de velocidad guarde los votos y hágalo usted mismo con votingapi_set_votes. Eso permitiría establecer criterios para los cuales (antiguos) se deben eliminar los votos.

Esto podría haberse hecho más fácil si el módulo de velocidad se construyó más flexible. Podría considerar hacer un problema y un parche para el módulo de velocidad, para agregar esta función para que otros se usen.

actualización :
El gancho alter no se define en ninguna parte, sino que se hace con drupal_alter('rate_vote', $votes, $context). Esto significa que deberías poder hacer:

function my_module_rate_vote_alter(&$votes, $context) {
  ..
}
4
googletorp

Código de trabajo para la gente:

/**
 * Implements hook_rate_vote_alter().
 */
function mymodule_rate_vote_alter(&$votes, &$context) {
  $cookie = $votes['tag'] . '_' . $votes['entity_type'] . '_' . $votes['entity_id'];
  // If the cookie is already set.
  if (isset($_COOKIE["$cookie"])) {
    // Indicating not to accept this vote.
    $context['save'] = FALSE;
  }
  else {
    // Set cookie and make sure that its valid for next 30 days.
    // This will populate the $_COOKIE["$cookie"] and make sure to block the
    // vote if user is trying to vote it more than once.
    setcookie("$cookie", 'ratevote', time() + (60 * 60 * 24 * 30), '/');
  }
}

hook_rate_vote_alter () está disponible en tasa.hooks.inc

0

Este es un ejemplo sobre cómo no guardar la votación en la base de datos.

function my_module_rate_vote_alter(&$votes, $context) {
  // Check the database.

  $context['save'] = FALSE;
}
0
user2515