Inquérito com Sorteio

Events happening in the community are now at Drupal community events on www.drupal.org.
uaparac's picture

Olá malta do Drupal tenho um trabalho entre mãos que me está aqui a criar alguns "atritos no tico e no teco" hihiihi.

Então é o seguinte tenho um cliente que precisa de ter no site um questionário de classificação de serviços à qual depois de preenchido a pessoa que preenche o questionário habilita-se a ganhar um prémio por ter preenchido.

Vamos utilizar o Webforms com condições mas depois não estou a ver como fazer a questão do sorteio, visto a classificação do questionário não é por rating logo não tem nenhuma classificação... é apenas só mesmo preencher e depois no meio daqueles todos que preencheram alguém sai vencedor.

Se alguém tiver uma ideia ou conheça algum módulo capaz de fazer estas validações e sorteios será uma grande ajuda.

Cumprimentos ;)

Comments

Acho que para a

amen's picture

Acho que para a funcionalidade que pretendes, o mais fácil será criar um pequeno módulo que escolha uma submissão da webform ao acaso de entre as submissões da webform que pretendes.

acaso.info

name: acaso
description: retira uma submissao ao acaso de uma webform
core: 7.x

acaso.module

function acaso_menu() {
  $items = array();
  $items['admin/config/system/acaso'] = array(
    'title' => 'Acaso Module',
    'description' => t('Retira uma submissao ao acaso'),
    'page callback' => 'drupal_get_form',
    'page arguments' => array('acaso_form'),
    'access callback'   => 'user_access',
    'access arguments'  => array('administer webform'), //nao sei o nome da permissao assim de cor
    'type' => MENU_NORMAL_ITEM,
  );
  return $items;
}

function acaso_form($form, &$form_state) {
  $form = array();

  $form['vencedor'] = array(
    '#markup' => variable_get('acaso_winner', 'Ainda nao foi sorteado.'),
  );

  $form['sortear'] = array(
    '#value' => 'Sortear',
    '#type' => 'submit',
  );
  return $form;
): 

function acaso_form_submit($form, &$form_state) {
  $nid = //node id da tua webform
  $result = db_query('SELECT sid FROM webform_submissions WHERE nid = :nid', array('nid' => $nid));
  $count = $result->rowCount();

  $winner_i = rand(0, $count);
  $j = 0;
  foreach($result as $record) {
   $j += 1;
   if($j == $winner_i) {
     drupal_set_message('O vencedor é a submissão @sid !', array('@sid'=> $record->sid);
     variable_set('acaso_winner', $record->sid);
     break;
   }
  }
  $form['#rebuild'] = TRUE;
}

Atenção que este código foi escrito directamente aqui, não tá testado nem nada que se pareça. Vai até ao ponto em que sorteia uma submissão e escolhe um sid (submission ID) ao acaso. Depois é só veres na base de dados como puxar os dados dessa submissão específica.

Outra nota importante é que este caminho pode ser considerado como um "hack", uma vez que vai directamente à base de dados e não utiliza as API fornecidas pelo módulo webform. Isso pode ser ou não ser relevante para ti.

LINK para a api do webform: http://drupalcontrib.org/api/drupal/contributions!webform!webform.api.php/group/webform_hooks/7

Ola obrigado pelo teu

uaparac's picture

Ola obrigado pelo teu comentário e pelo grande trabalho que fizeste.
Eu por acaso ia perguntar-te isso que provavelmente o CORE irá considerar um hack attack pela acesso sem permissão à BD.

Contudo vou ver a API do webform que envias-te. Muito obrigado e mais uma vez bom trabalho.

O core não está minimamente

amen's picture

O core não está minimamente preocupado em que tu acedas à base de dados directamente.

É "apenas" uma questão de boas práticas.

Portugal

Group categories

Classificação

Group notifications

This group offers an RSS feed. Or subscribe to these personalized, sitewide feeds: