Bienvenue, Invité
Nom d'utilisateur : Mot de passe : Se souvenir de moi

SUJET : Uma pesquisa por CPF

Uma pesquisa por CPF il y a 8 mois 4 semaines #104089

  • Newerton
  • Portrait de Newerton
  • Hors ligne
  • Fresh Lemon
  • Messages : 4
  • Karma: 0
Olá a todos,

Queria tirar uma dúvida rápida.

Ao invés de usar os tokens gerado pelo Lime Survey, teria como usar outro código? Por exemplo o CPF, para que o LimeSurvey permita somente 1 pesquisa por CPF?
L'administrateur a désactivé l'accès en écriture pour le public.

Uma pesquisa por CPF il y a 8 mois 4 jours #105242

  • Newerton
  • Portrait de Newerton
  • Hors ligne
  • Fresh Lemon
  • Messages : 4
  • Karma: 0
Bom,

Como uso o Yii para programar, foi teta fazer essa alteração, pensei que tinha um jeito de fazer usando plugin, mais ninguém respondeu.

Criei um Controller, e executo ele junto com a pesquisa, esse Controller, carrega uma View, que tem códigos javascript, ele esconde o campo de token, e mostra um campo de CPF, essa consulta do CPF, ela é consultada das respostas das pesquisas, mais é obrigatório colocar o campo de CPF na pesquisa, por que nunca será feito essa validação.

Depois de validado o CPF, se já foi respondido a pesquisa, é emitido um alerta, informando que aquele CPF, ja respondeu aquela pesquisa. Caso não tenha respondido, é liberado o campo de token para ele inserir e responder a pesquisa.
L'administrateur a désactivé l'accès en écriture pour le public.

Uma pesquisa por CPF il y a 6 mois 2 semaines #107221

  • holch
  • Portrait de holch
  • En ligne
  • LimeSurvey Team
  • Messages : 2851
  • Remerciements reçus 359
  • Karma: 124
O problema que vejo com isso é que sabendo como é a estrutura do CPF, você pode preencher a pesquisa para qualquer um. Deve ter mais do que 190 milhões de CPF e o risco de que alguém que quer preencher vai escolher un CPF que já foi usado deve ser como ganhar na loteria.
Have a look at the manual! It is a really valuable source for information. Here some helpful links:
Manual (EN) | Question Types | Question Attributes | Workarounds

If you found this answer helpful and it saved you some time please consider a donation to the project to keep Limesurvey going!
L'administrateur a désactivé l'accès en écriture pour le public.

Uma pesquisa por CPF il y a 6 mois 2 semaines #107222

  • Newerton
  • Portrait de Newerton
  • Hors ligne
  • Fresh Lemon
  • Messages : 4
  • Karma: 0
Não tem problema, a pesquisa só pode ser respondida por 1 CPF. Quando o usuário digita o Token e depois o CPF, o sistema consulta o CPF, se já foi ou não respondido e informa ao usuário que essa pesquisa já foi respondida por esse CPF.

Fiz também a validação por e-mail.

E é totalmente customizável, apenas colocando quaisquer dos campos em qualquer grupo de questões.
L'administrateur a désactivé l'accès en écriture pour le public.

Uma pesquisa por CPF il y a 6 mois 2 semaines #107223

  • holch
  • Portrait de holch
  • En ligne
  • LimeSurvey Team
  • Messages : 2851
  • Remerciements reçus 359
  • Karma: 124
Ahh, pensei que voce usou apenas o CPF, mas também tem um token. Então não tem problema mesmo.
Have a look at the manual! It is a really valuable source for information. Here some helpful links:
Manual (EN) | Question Types | Question Attributes | Workarounds

If you found this answer helpful and it saved you some time please consider a donation to the project to keep Limesurvey going!
L'administrateur a désactivé l'accès en écriture pour le public.

Uma pesquisa por CPF il y a 6 mois 1 semaine #107360

  • helviobrito
  • Portrait de helviobrito
  • Hors ligne
  • Fresh Lemon
  • Messages : 18
  • Remerciements reçus 1
  • Karma: 0
Não sou programador, mas gostaria de saber como você fez este controle por CPF, pois preciso exatamente implantar isto em um survey. Você pode me dizer?

Obrigado,

Hélvio Brito
L'administrateur a désactivé l'accès en écriture pour le public.

Uma pesquisa por CPF il y a 2 mois 3 semaines #111259

  • Newerton
  • Portrait de Newerton
  • Hors ligne
  • Fresh Lemon
  • Messages : 4
  • Karma: 0
Helvio,

Eu criei um controller na pasta application/controller, inicialmente usei a validação por e-mail, mais você pode alterar para CPF ou quaisquer outro documento.
<?php
 
/**
 * Description of NewertonController
 *
 * @author Newerton
 */
class NewertonController extends LSYii_Controller {
 
    private $LEM;
    private $surveyOptions;
    private $qcode2SGQA;
    private $sid;
 
    public function init() {
        $this->LEM = & LimeExpressionManager::singleton();
        $reflector = new ReflectionObject($this->LEM);
 
        $survey = $reflector->getProperty('surveyOptions');
        $survey->setAccessible(true);
        $this->surveyOptions = $survey->getValue($this->LEM);
 
        $survey = $reflector->getProperty('qcode2SGQA');
        $survey->setAccessible(true);
        $this->qcode2SGQA = $survey->getValue($this->LEM);
 
        $survey = $reflector->getProperty('sid');
        $survey->setAccessible(true);
        $this->sid = $survey->getValue($this->LEM);
    }
 
    public function actionIndex() {
 
        $valida = Question::model()->find("sid = :sid AND title = :title", array(":sid" => Yii::app()->request->pathInfo, ":title" => 'VALIDAREMAIL'));
        if (!is_null($valida)) {
            Yii::app()->clientScript->registerScript('newerton', ""
                    . "var buttonValidate = '" . CHtml::tag('li', array('style' => 'text-align: center; padding: 10px;'), CHtml::htmlButton('Validar', array('id' => 'validar', 'style' => 'padding: 4px 6px;')), true) . "'; "
                    . "var inputValidate = '" . CHtml::tag('li', array(), '<label for="email">E-mail:</label>' . CHtml::textField('email', '', array('class' => 'text')), true) . "'; "
                    . "$('input.submit').hide();"
                    . "$(inputValidate).appendTo('form#tokenform ul');"
                    . "$(buttonValidate).appendTo('form#tokenform ul');"
                    . "$(document).on('click', 'button#validar', function(){ "
                    . " jQuery.ajax({"
					. "		type:'POST',"
					. "		url:'" . Yii::app()->createAbsoluteUrl('newerton/ValidarEmail') . "', "
					. "		data:{YII_CSRF_TOKEN:'" . Yii::app()->request->csrfToken . "', "
					. "		sid:'" . Yii::app()->request->pathInfo . "', "
					. "		token: $('input#token').val(), "
					. "		email: $('input#email').val()}, "
					. "		beforeSend: function(){ $('input#token, input#email').attr({'disabled':'disabled'}); }, "
					. "		success: function(data){ $('input#token, input#email').removeAttr('disabled'); if(data == 'ok') { $('form#tokenform')[0].submit(); return false; } else { alert(data); $('form#tokenform')[0].reset(); } }, error: function(){ $('input#token, input#email').removeAttr('disabled'); }"
					. "	});"
                    . "});");
        }
    }
 
    public function actionValidarEmail() {
        if (Yii::app()->request->isAjaxRequest) {
            $sid = str_replace(array('+','-'), '', filter_var(Yii::app()->request->getPost('sid'), FILTER_SANITIZE_NUMBER_INT));
            $email = strtolower(Yii::app()->request->getPost('email'));
            $token = Yii::app()->request->getPost('token');
 
            if (!empty($email) && !empty($token) && filter_var($email, FILTER_VALIDATE_EMAIL)) {
                $model = Question::model()->find("sid = :sid AND title = :title", array(":sid" => $sid, ":title" => 'VALIDAREMAIL'));
                $column = "{$sid}X{$model->gid}X{$model->qid}";
 
                $valida = SurveyDynamic::model($sid)->find("token = :token AND {$column} = :{$column}", array(":token" => $token, ":{$column}" => $email));
 
                if (is_null($valida))
                    echo 'ok';
                else
                    echo 'Você já respondeu esse questionário com esse código e email.';
            } else {
                echo 'Os campos de código e email são obrigatórios para validação.';
            }
        }
    }
 
}

Você precisa criar um campo no formulário de questionamento, com o documento que deseja validar, por exemplo eu fiz uma validação por e-mail, então eu criei um campo com o nome de VALIDAREMAIL, que será consultado no Controller, se quiser e-mail e CPF, cria o campo VALIDAREMAIL e VALIDARCPF, ambos precisam ser preenchidos no formulário de questionamento. Assim é possivel fazer a consulta antes de qualquer usuário preencher o formulário.

Agora você precisa ativar esse controller.
Abre o arquivo application/controller/SurveyController.php

Procura a linha:
if (!Yii::app()->getConfig("editedaction")) {Yii::app()->setConfig("editedaction", returnGlobal('editedaction'));} // for html editor integration

Debaixo dela, você adiciona:
Yii::app()->runController('newerton');

Depois no mesmo arquivo, na última função que se chama "action()", você adiciona essa linha:
'newerton' => 'application.controllers.newerton'
L'administrateur a désactivé l'accès en écriture pour le public.
Modérateurs: marciojv
Temps de génération de la page : 0.458 secondes
Donation Image