| Server IP : 54.233.248.239 / Your IP : 172.28.20.13 Web Server : Apache System : Linux ip-172-28-29-189 6.5.0-1014-aws #14~22.04.1-Ubuntu SMP Thu Feb 15 15:27:06 UTC 2024 x86_64 User : www-data ( 33) PHP Version : 7.2.34-43+ubuntu22.04.1+deb.sury.org+1 Disable Function : pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals, MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : OFF | Sudo : ON | Pkexec : ON Directory : /var/www/html/vinumday2_0/app/Modules/Cadastro/Controllers/ |
Upload File : |
<?php
namespace App\Modules\Cadastro\Controllers;
use Illuminate\Http\Request;
use Mail;
use App\Http\Requests;
use App\Http\Controllers\Controller;
use App\Modules\Cadastro\Models\Cadastro;
use App\Modules\AcaoUsuario\Models\AcaoUsuario;
use App\Modules\CadastroEndereco\Models\CadastroEndereco;
use App\Modules\Pais\Models\Pais;
use App\Modules\Estado\Models\Estado;
use App\Modules\Cidade\Models\Cidade;
use App\Modules\Empresa\Models\Empresa;
use App\Modules\CaptacaoLead\Models\CaptacaoLead;
use App\Modules\PedidoVenda\Models\PedidoVenda;
use Sentinel;
use Activation;
use App\User;
use App\UserActivation;
use App\BasicInfo;
use App\Services\CartService;
use App\Services\GeralService;
use Notification;
use App\Notifications\NotificacaoConfirmacao;
use App\Notifications\NotificacaoPedidoVenda;
use Facebook;
use Exception;
use Cartalyst\Sentinel\Checkpoints\NotActivatedException;
use App\Modules\Confraria\Models\Confraria;
use App\Modules\AdegaViradaParticipante\Models\AdegaViradaParticipante;
use Carbon\Carbon;
use DB;
class CadastroController extends Controller
{
private $modulo;
private $fields;
private $fks;
protected $mailchimp;
protected $mailchimpListId; // Id of newsletter list
public function __construct(){
$this->modulo = \App\Gerador::where('nome', 'Cadastro')->with('campos', 'fks')->first();
$this->fields = $this->modulo->campos;
$this->fks = $this->modulo->fks;
//Mailchimp
$this->mailchimpListId = env('MAILCHIMP_LIST');
if(env('APP_ENV') == 'local'){
$this->mailchimp = app('Mailchimp');
}
}
public function index(Request $request, $codigo_indicacao = ''){
if(GeralService::buscarClienteLogado()){
return redirect('perfil');
}
$data = $request->input();
$data['redirect'] = $request->input('redirect');
$data['redirect_origin'] = '';
$data['cupomIndicacao'] = GeralService::buscarCupomIndicacaoAtivo();
if(!session_id()) {
session_start();
}
$fb = new Facebook\Facebook([
'app_id' => '220707961808677', // Replace {app-id} with your app id
'app_secret' => '9e888ea5214bcef9c6243b02a0c104ba',
'default_graph_version' => 'v2.2',
]);
$helper = $fb->getRedirectLoginHelper();
$permissions = ['email', 'user_birthday', 'user_friends']; // Optional permissions
$data['facebookLoginUrl'] = $helper->getLoginUrl(url('login-facebook'), $permissions);
$data['titulo_pagina'] = 'Faça seu';
$data['subtitulo_pagina'] = 'cadastro';
$data['listaPaises'] = Pais::orderBy('nome', 'ASC')->get();
$data['redirect'] = $request->input('redirect') ?? null;
$data['codigo_indicacao'] = $codigo_indicacao;
$section = \Request::segment(1);
if(!empty($codigo_indicacao)){
if($section == 'convite-confraria'){
$data['redirect_origin'] = 'convite-confraria';
$data['confrariaConvite'] = Confraria::where('codigo', $codigo_indicacao)->first();
if(isset($data['confrariaConvite']))
$data['confrariaDono'] = Cadastro::where('id', $data['confrariaConvite']->cadastro_id)->first();
}elseif($section == 'convite-adega-virada'){
$data['adegaVirada'] = AdegaViradaParticipante::where('codigo', $codigo_indicacao)->with('cadastro')->first();
// $data['adegaDaVirada'] =
$data['redirect_origin'] = 'convite-adega-virada';
$data['indicacaoConvite'] = AdegaViradaParticipante::where('codigo', $codigo_indicacao)->first();
if(isset($data['indicacaoConvite'])){
$data['conviteDono'] = Cadastro::where('id', $data['indicacaoConvite']->cadastro_id)->first();
}
}else{
$Indicador = Cadastro::where('codigo_cliente', $codigo_indicacao)->first();
$data['indicador_nome'] = ($Indicador ? $Indicador->nome : '');
$data['redirect_origin'] = 'cupom';
}
}
return view('Cadastro::cadastro-site',$data);
}
public function loginSite(Request $request, $codigo_indicacao = ''){
if(GeralService::buscarClienteLogado()){
return redirect('perfil');
}
$data = array();
$data['redirect'] = $request->input('redirect');
if(!session_id()) {
session_start();
}
$fb = new Facebook\Facebook([
'app_id' => '220707961808677', // Replace {app-id} with your app id
'app_secret' => '9e888ea5214bcef9c6243b02a0c104ba',
'default_graph_version' => 'v2.2',
]);
$helper = $fb->getRedirectLoginHelper();
$permissions = ['email', 'user_birthday', 'user_friends']; // Optional permissions
$data['facebookLoginUrl'] = $helper->getLoginUrl(url('login-facebook'), $permissions);
$data['titulo_pagina'] = 'Faça seu';
$data['subtitulo_pagina'] = 'cadastro';
$data['listaPaises'] = Pais::orderBy('nome', 'ASC')->get();
$data['redirect'] = $request->input('redirect') ?? null;
$data['codigo_indicacao'] = $codigo_indicacao;
if(!empty($codigo_indicacao)){
$Indicador = Cadastro::where('codigo_cliente', $codigo_indicacao)->first();
$data['indicador_nome'] = ($Indicador ? $Indicador->nome : '');
}
if($request->input('cod_conf') && $request->input('cod_conf') != ''){
$data['confrariaConvite'] = Confraria::where('codigo', $request->input('cod_conf'))->first();
if(isset($data['confrariaConvite']))
$data['confrariaDono'] = Cadastro::where('id', $data['confrariaConvite']->cadastro_id)->first();
}
return view('Cadastro::login-site',$data);
}
public function loginFacebook(Request $request){
$post = $request->input();
$user = Cadastro::where('id_facebook', $post['id'])->first();
if($user){
$userSentinel = Sentinel::findUserById($user->user_id);
Sentinel::login($userSentinel, true);
}else{
return response()->json(array(
'status' => true,
'message' => 'Usuário não encontrado.',
'user' => false
));
}
$html = CartService::buscarHtmlIdentificacao();
$htmlListagem = CartService::buscarHtmlListagemCart();
$htmlCupom = CartService::buscarHtmlCupomDesconto();
$primeiraCompra = GeralService::buscarPrimeiraCompra();
return response()->json(array(
'status' => true,
'message' => 'Usuário logado com sucesso!',
'user' => true,
'url' => url('/'),
'html' => $html,
'html_listagem' => $htmlListagem,
'html_cupom' => $htmlCupom,
'primeira_compra' => $primeiraCompra,
));
}
public function loginGoogle(Request $request){
$post = $request->input();
$user = Cadastro::where('id_google', $post['id'])->first();
if($user){
$userSentinel = Sentinel::findUserById($user->user_id);
Sentinel::login($userSentinel, true);
}else{
return response()->json(array(
'status' => true,
'message' => 'Usuário não encontrado.',
'user' => false
));
}
$html = CartService::buscarHtmlIdentificacao();
$htmlListagem = CartService::buscarHtmlListagemCart();
$htmlCupom = CartService::buscarHtmlCupomDesconto();
$primeiraCompra = GeralService::buscarPrimeiraCompra();
return response()->json(array(
'status' => true,
'message' => 'Usuário logado com sucesso!',
'user' => true,
'url' => url('/'),
'html_listagem' => $htmlListagem,
'html_cupom' => $htmlCupom,
'primeira_compra' => $primeiraCompra,
'html' => $html
));
}
public function loginTwitter(Request $request){
$post = $request->input();
$user = Cadastro::where('id_twitter', $post['id'])->first();
if($user){
$userSentinel = Sentinel::findUserById($user->user_id);
Sentinel::login($userSentinel, true);
}else{
return response()->json(array(
'status' => true,
'message' => 'Usuário não encontrado.',
'user' => false
));
}
$html = CartService::buscarHtmlIdentificacao();
$htmlListagem = CartService::buscarHtmlListagemCart();
$htmlCupom = CartService::buscarHtmlCupomDesconto();
$primeiraCompra = GeralService::buscarPrimeiraCompra();
return response()->json(array(
'status' => true,
'message' => 'Usuário logado com sucesso!',
'user' => true,
'url' => url('/'),
'html_listagem' => $htmlListagem,
'html_cupom' => $htmlCupom,
'primeira_compra' => $primeiraCompra,
'html' => $html
));
}
public function register(Request $request){
$data = array();
$data['fields'] = $this->fields;
$data['listaPaises'] = Pais::orderBy('nome', 'ASC')->get();
$data['redirect'] = $request->input('redirect');
return view('Cadastro::register',$data);
}
public function logout(Request $request){
session(['cupom' => null]);
session(['cupom_adega_virada' => null]);
session(['cupom_removido' => null]);
Sentinel::logout();
return redirect('/');
}
private function sendMailchimp($input){
$status = true;
$message = "Obrigado por se cadastrar";
if(!isset($input['email'])){
$status = false;
$message = "E-mail não setado!";
}elseif(empty($input['email'])){
$status = false;
$message = "E-mail não preenchido!";
}else{
try {
$this->mailchimp
->lists
->subscribe(
$this->mailchimpListId, //ID da Lista
['email' => $input['email']], //E-mail do Assinante
[], //Campos personalizados
'html', //Tipo de e-mail recebido
true //Confirmar assinatura por e-mail?
);
} catch (\Mailchimp_List_AlreadySubscribed $e) {
$status = false;
$message = 'Você já assinou a newsletter.';
} catch (\Mailchimp_Email_AlreadySubscribed $e) {
$status = false;
$message = 'Você já assinou a newsletter.';
} catch (\Mailchimp_Email_NotExists $e) {
$status = false;
$message = 'O e-mail informado não existe.';
} catch (\Mailchimp_Invalid_Email $e) {
$status = false;
$message = 'O e-mail informado é inválido.';
} catch (\Mailchimp_List_InvalidImport $e) {
$status = false;
$message = 'Dados inválidos!';
} catch (Exception $e) {
$status = false;
$message = "Falha ao cadastrar e-mail";
}
}
return (object) ['status' => $status, 'message' => $message];
}
public function mailchimp(Request $request){
$input = $request->input();
$sendMailchimp = $this->sendMailchimp($input);
$Captacao = new CaptacaoLead;
$Captacao->email = $request->input('email', 'none');
$Captacao->data_criacao = date('Y-m-d H:i:s');
$Captacao->status = $sendMailchimp->status;
$Captacao->response = $sendMailchimp->message;
$Captacao->save();
return response()->json(array(
'status' => $sendMailchimp->status,
'message' => $sendMailchimp->message
));
}
public function login(Request $request){
try {
$input = $request->input();
if(isset($input['lembrar']) && $input['lembrar']){
$lembrar = true;
}else{
$lembrar = false;
}
// Autentica o usuário
$authentication = Sentinel::authenticate([
'email' => $input['email'],
'password' => $input['password']
], $lembrar);
if(!$authentication){
if ($request->ajax()) {
return response()->json(array(
'status' => false,
'message' => 'Dados de acesso inválidos'
));
}else{
\Session::flash('type', 'danger');
\Session::flash('message', 'Dados de acesso inválidos.');
return redirect()->back()->withInput();
}
}
if ($request->ajax()) {
$html = CartService::buscarHtmlIdentificacao();
$htmlListagem = CartService::buscarHtmlListagemCart();
$htmlCupom = CartService::buscarHtmlCupomDesconto();
$primeiraCompra = GeralService::buscarPrimeiraCompra();
return response()->json(array(
'status' => true,
'message' => 'Login efetuado com sucesso',
'html' => $html,
'html_listagem' => $htmlListagem,
'html_cupom' => $htmlCupom,
'primeira_compra' => $primeiraCompra,
'url' => ($input['redirect']) ? $input['redirect'] : url('/')
));
}else{
if(isset($input['redirect'])){
return redirect($input['redirect']);
}else{ // Trabalhar o redirecionamento conforme necessário
return redirect('/');
}
}
} catch (NotActivatedException $e) {
$user = User::where('email', $input['email'])->first();
$data_created = date('Y-m-d', strtotime("-30 days",strtotime(date('Y-m-d'))));
if($user->created_at <= $data_created && !$user->ativacao){
$userSentinel = Sentinel::findUserById($user->id);
$activation = Activation::create($userSentinel);
Activation::complete($userSentinel, $activation->code);
return $this->auth($request);
}else{
GeralService::checkoutTracking('usuario', ['id_tipo' => $user->id, 'id_cliente' => $user->cliente->id, 'acao' => 'login', 'observacao' => 'Usuário Inativo']);
}
return response()->json(array(
'status' => false,
'message' => 'Estamos analisando sua conta, caso tenha dúvidas favor enviar um e-mail para contato@vinumday.com.br'
));
} catch (Exception $e) {
return response()->json(array(
'status' => false,
'message' => 'Falha ao realizar Login'
));
}
}
private function auth($request){
try {
$input = $request->input();
if(isset($input['lembrar']) && $input['lembrar']){
$lembrar = true;
}else{
$lembrar = false;
}
// Autentica o usuário
$authentication = Sentinel::authenticate([
'email' => $input['email'],
'password' => $input['password']
], $lembrar);
if(!$authentication){
if ($request->ajax()) {
return response()->json(array(
'status' => false,
'message' => 'Dados de acesso inválidos'
));
}else{
\Session::flash('type', 'danger');
\Session::flash('message', 'Dados de acesso inválidos.');
return redirect()->back()->withInput();
}
}
if ($request->ajax()) {
$html = CartService::buscarHtmlIdentificacao();
$htmlListagem = CartService::buscarHtmlListagemCart();
$htmlCupom = CartService::buscarHtmlCupomDesconto();
$primeiraCompra = GeralService::buscarPrimeiraCompra();
return response()->json(array(
'status' => true,
'message' => 'Login efetuado com sucesso',
'html' => $html,
'html_listagem' => $htmlListagem,
'html_cupom' => $htmlCupom,
'primeira_compra' => $primeiraCompra,
'url' => ($input['redirect']) ? $input['redirect'] : url('/')
));
}else{
if(isset($input['redirect'])){
return redirect($input['redirect']);
}else{ // Trabalhar o redirecionamento conforme necessário
return redirect('/');
}
}
} catch (NotActivatedException $e) {
return response()->json(array(
'status' => false,
'message' => 'Estamos analisando sua conta, caso tenha dúvidas favor enviar um e-mail para contato@vinumday.com.br'
));
} catch (Exception $e) {
return response()->json(array(
'status' => false,
'message' => 'Falha ao realizar Login'
));
}
}
public function saveCadastro(Request $request){
$input = $request->input();
return response()->json(array(
'status' => false,
'message' => 'Cadastros interrompidos temporariamente. Tente mais tarde!'
));
if(!isset($input['password']) || !$input['password']){
\Session::flash('type', 'danger');
\Session::flash('message', 'A senha é obrigatória.');
return redirect()->back()->withInput();
}
if(!isset($input['email']) || !$input['email']){
\Session::flash('type', 'danger');
\Session::flash('message', 'O E-mail é obrigatório.');
return redirect()->back()->withInput();
}
if(!isset($input['cpf']) || !$input['cpf']){
return response()->json(array(
'status' => false,
'message' => 'O campo CPF é obrigatório.'
));
}
if(Cadastro::where('cpf', $input['cpf'])->count() > 0){
return response()->json(array(
'status' => false,
'message' => 'Já existe um cadastro com o CPF informado. <a href="#" fazer-login>Fazer login</a>'
));
}
if(!isset($input['cep']) || !$input['cep']){
return response()->json(array(
'status' => false,
'message' => 'O campo CEP é obrigatório.'
));
}
if(!isset($input['logradouro']) || !$input['logradouro']){
return response()->json(array(
'status' => false,
'message' => 'O campo Rua é obrigatório.'
));
}
if(!isset($input['numero']) || !$input['numero']){
return response()->json(array(
'status' => false,
'message' => 'O campo Número é obrigatório.'
));
}
if(!isset($input['bairro']) || !$input['bairro']){
return response()->json(array(
'status' => false,
'message' => 'O campo Bairro é obrigatório.'
));
}
if(!isset($input['estado_id']) || !$input['estado_id']){
return response()->json(array(
'status' => false,
'message' => 'O campo Estado é obrigatório.'
));
}
if(!isset($input['cidade_id']) || !$input['cidade_id']){
return response()->json(array(
'status' => false,
'message' => 'O campo Cidade é obrigatório.'
));
}
if(!isset($input['pais_id']) || !$input['pais_id']){
return response()->json(array(
'status' => false,
'message' => 'O campo País é obrigatório.'
));
}
if(User::where('email', $input['email'])->count()){
\Session::flash('type', 'danger');
\Session::flash('message', 'Já existe um usuário com esse e-mail.');
return redirect()->back()->withInput();
}
if($input['password'] != $input['confirm_password']){
\Session::flash('type', 'danger');
\Session::flash('message', 'A senha e a confirmação de senha devem ser iguais.');
return redirect()->back()->withInput();
}
$apiKey = Empresa::getApiKeyPagarMe();
$pagarMe = new \PagarMe\Sdk\PagarMe($apiKey);
$cidade = Cidade::find($input['cidade_id']);
$estado = Estado::find($input['estado_id']);
$pais = Pais::find($input['pais_id']);
$address = new \PagarMe\Sdk\Customer\Address([
'street' => $input['logradouro'],
'streetNumber' => $input['numero'],
'neighborhood' => $input['bairro'],
'zipcode' => str_replace(['-', '.'],'',$input['cep']),
'complementary' => $input['complemento'],
'city' => $cidade->nome,
'state' => $estado->nome,
'country' => $pais->nome,
]);
$phone = new \PagarMe\Sdk\Customer\Phone(['ddd' => substr($input['telefone'],1,2), 'number' => trim(str_replace('-', '',substr($input['telefone'],5))), 'ddi' => '55']);
$errors = [
'address[street_number]' => 'Número <strong>inválido</strong>.',
'address[street]' => 'Logradouro <strong>inválido</strong>.',
'address[neighborhood]' => 'Bairro <strong>inválido</strong>.',
'address[zipcode]' => 'CEP <strong>inválido</strong>.',
'phone[number]' => 'Telefone <strong>inválido</strong>.',
];
try {
$customer = $pagarMe->customer()->create(
$input['nome'],
$input['email'],
$input['cpf'],
/** @var $address \PagarMe\Sdk\Customer\Address */
$address,
/** @var $phone \PagarMe\Sdk\Customer\Phone */
$phone
);
} catch (\Exception $e) {
$exceptionErrors = json_decode(json_decode($e->getMessage()));
if ($exceptionErrors != null){
$message = $errors[$exceptionErrors->errors[0]->parameter_name];
} else {
$message = $e->getMessage();
}
return response()->json(array(
'status' => false,
'message' => $message
));
}
// Salva o User do cadastro
$user = Sentinel::register(array(
'first_name' => $input['nome'],
'last_name' => $input['sobrenome'],
'email' => $input['email'],
'password' => $input['password'],
));
// Liga o usuário a uma role
$role = Sentinel::findRoleById(1);
$role->users()->attach($user);
// Ativa o usuário
$activation = Activation::create($user);
Activation::complete($user, $activation->code);
$cadastro = new Cadastro();
$cadastro->fill($input);
if($empresa){
$cadastro->empresa_id = $empresa->id;
}
$cadastro->customer_id = $customer->getId();
// Atribui o id dele p/ o cadastro
$cadastro->user_id = $user->id;
$cadastro->endereco_ip = GeralService::getClientIp();
$cadastro->save();
$cadastroEndereco = new CadastroEndereco();
$cadastroEndereco->fill($input);
$cadastroEndereco->cadastro_id = $cadastro->id;
$cadastroEndereco->principal = 1;
$cadastroEndereco->nome = 'Endereço de cadastro';
$cadastroEndereco->save();
// Autentica o usuário
Sentinel::authenticate([
'email' => $input['email'],
'password' => $input['password']
], true);
if(isset($input['redirect'])){
return redirect($input['redirect']);
}else{ // Trabalhar o redirecionamento conforme necessário
return redirect('/perfil');
}
}
public function registerCheckout(Request $request){
$BasicInfo = BasicInfo::find(1);
if($BasicInfo->bloquear_novos_cadastros){
return response()->json(array(
'status' => false,
'message' => 'Cadastros interrompidos temporariamente. Tente mais tarde!'
));
}
$input = $request->input();
if((!isset($input['g-recaptcha-response']) || (isset($input['g-recaptcha-response']) && empty($input['g-recaptcha-response'])))){
return response()->json(array(
'status' => false,
'message' => 'ReCaptcha inválido'
));
}
//https://github.com/geekcom/validator-docs
$validate = $this->validate($request, [
'cpf' => 'required|cpf',
]);
if(!isset($input['nome']) || !$input['nome']){
return response()->json(array(
'status' => false,
'message' => 'O campo Nome é obrigatório.'
));
}
if(!isset($input['sobrenome']) || !$input['sobrenome']){
return response()->json(array(
'status' => false,
'message' => 'O campo Sobrenome é obrigatório.'
));
}
if(!isset($input['cpf']) || !$input['cpf']){
return response()->json(array(
'status' => false,
'message' => 'O campo CPF é obrigatório.'
));
}
if(Cadastro::where('cpf', $input['cpf'])->count() > 0){
return response()->json(array(
'status' => false,
'message' => 'Já existe um cadastro com o CPF informado.<a href="#" fazer-login>Fazer login</a>'
));
}
if(!isset($input['telefone']) || !$input['telefone']){
return response()->json(array(
'status' => false,
'message' => 'O campo Telefone é obrigatório.'
));
}
if(!isset($input['email']) || !$input['email']){
return response()->json(array(
'status' => false,
'message' => 'O E-mail é obrigatório.'
));
}
if(!isset($input['data_nascimento']) || !$input['data_nascimento']){
return response()->json(array(
'status' => false,
'message' => 'O campo Data de nascimento é obrigatório.'
));
}else{
//Validação Idade Obrigatória
// Separa data em dia, mês e ano
$input['data_nascimento'] = \Carbon\Carbon::createFromFormat('d/m/Y', $input['data_nascimento'])->format('Y-m-d');
list($ano, $mes, $dia) = explode('-', $input['data_nascimento']);
// Unix timestamp do dia de hoje
$hoje = mktime(0, 0, 0, date('m'), date('d'), date('Y'));
// Unix timestamp da data de nascimento
$nascimento = mktime( 0, 0, 0, $mes, $dia, $ano);
if($ano > date('Y')){
return response()->json(array(
'status' => false,
'message' => 'O campo de data de nascimento está no futuro!'
));
}
// cálculo idade
$idade = floor((((($hoje - $nascimento) / 60) / 60) / 24) / 365.25);
if($idade < 18){
return response()->json(array(
'status' => false,
'message' => 'Você precisa ter mais de 18 anos para efetuar o cadastro'
));
}
}
if(!isset($input['genero']) || !$input['genero']){
return response()->json(array(
'status' => false,
'message' => 'O campo Gênero é obrigatório.'
));
}
if(User::where('email', $input['email'])->count()){
return response()->json(array(
'status' => false,
'message' => 'Já existe um usuário com esse e-mail.'
));
}
if(!isset($input['password']) || !$input['password']){
return response()->json(array(
'status' => false,
'message' => 'A senha é obrigatória.'
));
}
if($input['password'] != $input['confirm_password']){
return response()->json(array(
'status' => false,
'message' => 'A senha e a confirmação de senha devem ser iguais.',
'url' => ($input['redirect']) ? $input['redirect'] : url('perfil/meus-vinhos')
));
}
// Salva o User do cadastro
$user = Sentinel::register(array(
'first_name' => $input['nome'],
'last_name' => $input['sobrenome'],
'email' => $input['email'],
'password' => $input['password'],
));
// Liga o usuário a uma role
$role = Sentinel::findRoleById(11); // Cliente
$role->users()->attach($user);
// Ativa o usuário
$activation = Activation::create($user);
Activation::complete($user, $activation->code);
$cadastro = new Cadastro();
$cadastro->fill($input);
//$cadastro->customer_id = $customer->getId();
// Atribui o id dele p/ o cadastro
$cadastro->user_id = $user->id;
$cadastro->endereco_ip = GeralService::getClientIp();
$cadastro->codigo_cliente = GeralService::gerarCodigoAleatorio();
if(!empty($cadastro->endereco_ip) && $cadastro->endereco_ip != '127.0.0.1'){
$retorno_ip = GeralService::callIpAPI($cadastro->endereco_ip);
$cadastro->retorno_ip = $retorno_ip;
}
$cadastro->save();
if(isset($input['codigo_indicacao']) && !empty($input['codigo_indicacao'])){
if(isset($input['redirect_origin']) && $input['redirect_origin'] == 'convite-confraria'){
GeralService::associarConviteConfraria($input['codigo_indicacao'], $cadastro);
}elseif(isset($input['redirect_origin']) && $input['redirect_origin'] == 'convite-adega-virada'){
GeralService::associarConviteAdegaVirada($input['codigo_indicacao'], $cadastro);
}else{
GeralService::associarCupomIndicacao($input['codigo_indicacao'], $cadastro);
}
}
// Autentica o usuário
Sentinel::authenticate([
'email' => $input['email'],
'password' => $input['password']
], true);
$html = CartService::buscarHtmlIdentificacao();
$htmlListagem = CartService::buscarHtmlListagemCart();
$htmlCupom = CartService::buscarHtmlCupomDesconto();
$primeiraCompra = GeralService::buscarPrimeiraCompra();
$post = [
'nome' => $cadastro->nome
];
//Notificação Confirmação
Notification::send(
$cadastro->user,
new NotificacaoConfirmacao(
$post,
'Confirmação conta',
url('confirmar/' . $activation->code)
)
);
$url = url('/confirmacao-cadastro'); //validar redirect Mailchimp
if($request->input('redirect') && !empty($request->input('redirect'))){
$url = $request->input('redirect');
}
return response()->json(array(
'status' => true,
'message' => 'Usuário registrado com sucesso',
'html' => $html,
'html_listagem' => $htmlListagem,
'html_cupom' => $htmlCupom,
'primeira_compra' => $primeiraCompra,
'url' => $url
),200);
}
//Rota de Testes Visualização E-mail's
public function confirmacao(){
/*$cadastro = Cadastro::where('id', 11863)->first();
$user = $cadastro->user;
$pedidoVenda = PedidoVenda::where('id', 100146131)->first();
$ofertasPedido = GeralService::buscarOfertasPagamento(['id_pedido_venda' => $pedidoVenda->id]);
$data = [];
$data['url'] = url('/perfil/meus-pagamentos');
$data['pedidoVenda'] = $pedidoVenda;
$data['ofertas'] = $ofertasPedido;
return view('emails.pedido_venda_atualizado', $data);*/
}
public function confirmacaoCadastro(){
$data = [];
$data['titulo_pagina'] = 'Confirmação';
$data['subtitulo_pagina'] = 'Cadastro';
return view('Cadastro::confirmacao-cadastro', $data);
}
public function confirmacaoMailchimp(){
$data = [];
$data['titulo_pagina'] = 'Confirmação';
$data['subtitulo_pagina'] = 'Mailchimp';
return view('Cadastro::confirmacao-mailchimp', $data);
}
public function cadastroEmail(Request $request){
$data = [];
$data['titulo_pagina'] = 'Cadastro';
$data['subtitulo_pagina'] = 'E-mail';
$data['email'] = $request->input('email');
return view('Cadastro::cadastro-email', $data);
}
public function confirmarConta($code){
$Activation = UserActivation::where('code', $code)->first();
if($Activation){
$user = Sentinel::findById($Activation->user_id);
Activation::complete($user, $Activation->code);
\Session::flash('type', 'success');
\Session::flash('message', 'Conta confirmada com sucesso!');
return redirect('/');
}else{
\Session::flash('type', 'danger');
\Session::flash('message', 'Não foi possível confirmar a conta. Verifique se os dados estão corretos.');
return redirect('/');
}
}
public function loginTest(Request $request, $codigo_indicacao = ''){
if(GeralService::buscarClienteLogado()){
return redirect('perfil');
}
$data = array();
$data['redirect'] = $request->input('redirect');
if(!session_id()) {
session_start();
}
$fb = new Facebook\Facebook([
'app_id' => '220707961808677', // Replace {app-id} with your app id
'app_secret' => '9e888ea5214bcef9c6243b02a0c104ba',
'default_graph_version' => 'v2.2',
]);
$helper = $fb->getRedirectLoginHelper();
$permissions = ['email', 'user_birthday', 'user_friends']; // Optional permissions
$data['facebookLoginUrl'] = $helper->getLoginUrl(url('login-facebook'), $permissions);
$data['titulo_pagina'] = 'Faça seu';
$data['subtitulo_pagina'] = 'cadastro';
$data['listaPaises'] = Pais::orderBy('nome', 'ASC')->get();
$data['redirect'] = $request->input('redirect') ?? null;
$data['codigo_indicacao'] = $codigo_indicacao;
if(!empty($codigo_indicacao)){
$Indicador = Cadastro::where('codigo_cliente', $codigo_indicacao)->first();
$data['indicador_nome'] = ($Indicador ? $Indicador->nome : '');
}
if($request->input('cod_conf') && $request->input('cod_conf') != ''){
$data['confrariaConvite'] = Confraria::where('codigo', $request->input('cod_conf'))->first();
if(isset($data['confrariaConvite']))
$data['confrariaDono'] = Cadastro::where('id', $data['confrariaConvite']->cadastro_id)->first();
}
return view('Cadastro::login-test',$data);
}
public function loginCodigo(){
$data = [];
return view('Cadastro::login-codigo', $data);
}
public function enviarCodigoEmail(Request $request)
{
$data = [];
$hoje = Carbon::now()->toDateString();
$identificador = $request->input('cpf');
$tipoIdentificador = filter_var($identificador, FILTER_VALIDATE_EMAIL) ? 'email' : 'cpf';
if ($tipoIdentificador === 'cpf') {
$identificadorLimpo = preg_replace('/[^0-9]/', '', $identificador);
} else {
$identificadorLimpo = $identificador;
}
$query = DB::table('codigo_login')
->select('codigo_login.*')
->join('sis_users', 'sis_users.id', '=', 'codigo_login.user_id');
if ($tipoIdentificador === 'cpf') {
$query->join('cadastro', 'cadastro.user_id', '=', 'sis_users.id')
->where('cadastro.cpf', $identificadorLimpo);
} else {
$query->join('cadastro', 'cadastro.user_id', '=', 'sis_users.id')
->where('sis_users.email', $identificadorLimpo);
}
$quantidadeRegistros = $query->where('codigo_login.status', '!=', 1)
->whereDate('codigo_login.created_at', $hoje)
->count();
if ($quantidadeRegistros >= 6) {
return response()->json([
'status' => false,
'message' => 'Limite de 6 tentativas atingido!'
]);
}
if ($tipoIdentificador === 'cpf') {
$cadastro = Cadastro::where('cpf', $identificadorLimpo)->first();
} else {
$user = \App\Models\SisUser::where('email', $identificadorLimpo)->first();
$cadastro = $user ? Cadastro::where('user_id', $user->id)->first() : null;
}
if (!$cadastro) {
$mensagem = $tipoIdentificador === 'cpf' ? 'CPF não encontrado ou acesso bloqueado.' : 'E-mail não encontrado ou acesso bloqueado.';
return response()->json([
'status' => false,
'message' => $mensagem,
]);
}
$codigo = $this->gerarCodigoAleatorio();
$emailTarget = $cadastro->user->email;
$dataMail['cadastro'] = $cadastro;
$dataMail['codigo'] = $codigo;
\Mail::send('emails.login_codigo', $dataMail, function ($m) use ($dataMail, $emailTarget) {
$m->from('no-reply@vinumday.com.br', 'Vinum Day');
$m->to($emailTarget)->subject('Código de acesso');
});
DB::table('codigo_login')
->insert([
'user_id' => $cadastro->user_id,
'email' => $emailTarget,
'codigo' => $codigo,
'data_uso' => NULL,
'created_at' => date('Y-m-d H:i:s'),
]);
$emailTargetMask = $this->mascararEmail($emailTarget);
return response()->json([
'status' => true,
'message' => "O código foi enviado para o seu e-mail: $emailTargetMask",
'email' => $emailTargetMask
]);
}
public function validarCodigo(Request $request) {
$codigo = $request->input('codigo');
$check = DB::table('codigo_login')
->where('codigo', $codigo)
->where('status', 0)
->first();
if (!$check) {
return response()->json([
'status' => false,
'message' => "O código informado é inválido.",
]);
}
$createdAt = Carbon::parse($check->created_at);
$expirationTime = $createdAt->copy()->addHour();
if (Carbon::now()->greaterThan($expirationTime)) {
return response()->json([
'status' => false,
'message' => "O código informado já expirou.",
]);
}
DB::table('codigo_login')
->where('codigo', $codigo)
->update([
'status' => 1,
'data_uso' => Carbon::now()->format('Y-m-d H:i:s'),
]);
$user = Sentinel::findById($check->user_id);
if ($user) {
Sentinel::login($user);
return response()->json([
'status' => true,
'message' => "Sucesso",
]);
}
return response()->json([
'status' => false,
'message' => "Usuário não encontrado.",
]);
}
public function mascararEmail($email) {
list($usuario, $dominio) = explode('@', $email);
$inicio = substr($usuario, 0, 3);
$ocultos = strlen($usuario) - 3;
$mascarado = $inicio . str_repeat('*', $ocultos) . '@' . $dominio;
return $mascarado;
}
public function gerarCodigoAleatorio($tamanho = 10) {
$caracteres = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
$codigo = '';
$maxIndex = strlen($caracteres) - 1;
for ($i = 0; $i < $tamanho; $i++) {
$codigo .= $caracteres[random_int(0, $maxIndex)];
}
return $codigo;
}
}