Welcome, Guest
Username: Password: Remember me

TOPIC: Uma pesquisa por CPF

Uma pesquisa por CPF 7 months 6 days ago #104089

  • Newerton
  • Newerton's Avatar
  • OFFLINE
  • Fresh Lemon
  • Posts: 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?
The administrator has disabled public write access.

Uma pesquisa por CPF 6 months 1 week ago #105242

  • Newerton
  • Newerton's Avatar
  • OFFLINE
  • Fresh Lemon
  • Posts: 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.
The administrator has disabled public write access.

Uma pesquisa por CPF 4 months 3 weeks ago #107221

  • holch
  • holch's Avatar
  • OFFLINE
  • LimeSurvey Team
  • Posts: 2634
  • Thank you received: 309
  • Karma: 114
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!
The administrator has disabled public write access.

Uma pesquisa por CPF 4 months 3 weeks ago #107222

  • Newerton
  • Newerton's Avatar
  • OFFLINE
  • Fresh Lemon
  • Posts: 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.
The administrator has disabled public write access.

Uma pesquisa por CPF 4 months 3 weeks ago #107223

  • holch
  • holch's Avatar
  • OFFLINE
  • LimeSurvey Team
  • Posts: 2634
  • Thank you received: 309
  • Karma: 114
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!
The administrator has disabled public write access.

Uma pesquisa por CPF 4 months 3 weeks ago #107360

  • helviobrito
  • helviobrito's Avatar
  • OFFLINE
  • Fresh Lemon
  • Posts: 18
  • Thank you received: 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
The administrator has disabled public write access.

Uma pesquisa por CPF 1 month 1 day ago #111259

  • Newerton
  • Newerton's Avatar
  • OFFLINE
  • Fresh Lemon
  • Posts: 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'
The administrator has disabled public write access.
Moderators: marciojv
Time to create page: 0.361 seconds
Donation Image