sábado, 31 de marzo de 2012

Votos ilimitados

En Drupal 6:
  • El modulo votingapi permite que los usuarios anónimos puedan votar nuevamente luego de un tiempo configurable (3600 segundos por default). Esto se puede ver en votingapi/votingapi.module:
    function votingapi_select_votes($criteria = array(), $limit = 0) {
      $anon_window = variable_get('votingapi_anonymous_window', 3600);
      if (!empty($criteria['vote_source']) && $anon_window > 0) {
        $criteria['timestamp'] = time() - $anon_window;
      }
      $votes = array();
      $result = _votingapi_select('vote', $criteria, $limit);
      while ($vote = db_fetch_array($result)) {
        $votes[] = $vote;
      }
      return $votes;
    }
    
  • El módulo rate tiene widgets que permiten votar, con ayuda del votingapi. Se puede implementar el hook hook_rate_vote_alter() para indicar que los usuarios autenticados también puedan votar nuevamente:

    Permitir votar nuevamente indefinidamente:
    // mmm module
    /**
     * Implementation of hook_rate_vote_alter().
     */
    function mmm_rate_vote_alter(&$votes, &$context) {
      $context['criteria'] = FALSE;
    }
    

    Permitir votar nuevamente luego del mismo tiempo indicado en la configuración para los usuarios anónimos:
    // mmm module
    /**
     * Implementation of hook_rate_vote_alter().
     */
    function mmm_rate_vote_alter(&$votes, &$context) {
      $anon_window = variable_get('votingapi_anonymous_window', 3600);
      $min_time_until_new_vote = $anon_window; // seconds
      $context['criteria'] = array(
        'content_id' => $votes['content_id'],
        'timestamp' => time() - $min_time_until_new_vote
      );
    }
    

    Para deducir esto, me ayudó http://drupal.org/node/1224150#comment-4809672 y analizar un poco  votingapi/votingapi.module, votingapi_set_votes().