Uma pesquisa por CPF

More
3 years 3 months ago #104089 by Newerton
Newerton created the topic: Uma pesquisa por CPF
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?

Please Log in to join the conversation.

More
3 years 2 months ago #105242 by Newerton
Newerton replied the topic: Uma pesquisa por CPF
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.

Please Log in to join the conversation.

More
3 years 3 weeks ago #107221 by holch
holch replied the topic: Uma pesquisa por CPF
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.

I'm not a LimeSurvey GmbH member. I answer at the LimeSurvey forum in my spare time. No support via private message.
Some helpful links: Manual (EN) | Question Types | Workarounds

Please Log in to join the conversation.

More
3 years 3 weeks ago #107222 by Newerton
Newerton replied the topic: Uma pesquisa por CPF
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.

Please Log in to join the conversation.

More
3 years 3 weeks ago #107223 by holch
holch replied the topic: Uma pesquisa por CPF
Ahh, pensei que voce usou apenas o CPF, mas também tem um token. Então não tem problema mesmo.

I'm not a LimeSurvey GmbH member. I answer at the LimeSurvey forum in my spare time. No support via private message.
Some helpful links: Manual (EN) | Question Types | Workarounds

Please Log in to join the conversation.

More
3 years 2 weeks ago #107360 by helviobrito
helviobrito replied the topic: Uma pesquisa por CPF
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

Please Log in to join the conversation.

More
2 years 9 months ago #111259 by Newerton
Newerton replied the topic: Uma pesquisa por CPF
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'
The following user(s) said Thank You: GuilhermmeSilva92

Please Log in to join the conversation.

More
2 years 3 months ago #116688 by GuilhermmeSilva92
GuilhermmeSilva92 replied the topic: Uma pesquisa por CPF
Newerton,

Estou com um pouco de dificuldade de implementar a sua solução de validação de CPF
E gostaria de saber se você pode me ajudar pois preciso de um questionário que valide também CNPJ !

Obrigado.

Please Log in to join the conversation.

More
1 year 7 months ago #125643 by adridg
adridg replied the topic: Uma pesquisa por CPF
Gostaria de saber se existe alguma maneira mais simples. Quero validar um campo de matricula de funcionário e gostaria de saber como fazer isso.
Seria algo similar a validar um CPF.

Please Log in to join the conversation.

Moderators: marciojv

Start now!

Just create your account and start using Limesurvey today.

Register now