Ir ao conteúdo
  • Cadastre-se

PHP Sequencia numérica não reseta e também não bloqueia depois de 3 horas


Posts recomendados

Pessoal, boa noite!

 

Desenvolvi um plugin para Wordpress com o objetivo de enviar números para sorteios. O código está funcionando e já atende grande parte da minha necessidade. Porém, estou com dois problemas que não estou conseguindo resolver: 

1) Os números da sorte estão sendo enviados corretamente e de acordo com a sequência numérica configurada no painel. Porém quando o relógio do PC atinge a hora de geração salva nas configurações, deveria resetar a sequência e começar a enviar os números a partir do 1, mas neste ponto passa a enviar apenas o número 1 sucessivamente;

2) A parte do código que deveria bloquear por 3 horas um novo envio pelo mesmo e-mail digitado no formulário do Elementor Pro não está funcionando.

 

Segue em anexo o código completo do plugin. Se puderem me ajudar a resolver esses problemas ficarei muito grato. Abraço!

 

<?php
/**
 * Plugin Name: Sua Música
 * Plugin URI: https://fm107.com.br
 * Description: Plugin personalizado para adicionar código ao formulário do Elementor
 * Version: 1.0.20
 * Author: By Anderson José
 * Author URI: https://fm107.com.br
 */

// Função para adicionar opções de configuração no painel lateral
function meu_plugin_personalizado_menu() {
  add_menu_page(
    'Configurações do Meu Plugin',
    'Meu Plugin',
    'manage_options',
    'meu-plugin-config',
    'meu_plugin_personalizado_pagina_config',
    'dashicons-admin-generic',
    99
  );
}

/// Função para exibir a página de configuração do plugin
function meu_plugin_personalizado_pagina_config() {
  if (!current_user_can('manage_options')) {
    wp_die(__('Você não tem permissões suficientes para acessar esta página.'));
  }

  // Processar e salvar as configurações aqui
  if (isset($_POST['submit'])) {
    update_option('meu-plugin-nome-formulario', $_POST['nome_formulario']);
    update_option('meu-plugin-horario-geração', $_POST['horario_geracao']);
    update_option('meu-plugin-email', $_POST['email']);
    update_option('meu-plugin-sequencia-numerica', $_POST['sequencia_numerica']); // Corrigido: nome do campo corrigido para 'sequencia_numerica'
    echo '<div class="notice notice-success"><p>Configurações salvas com sucesso!</p></div>';
  }

    // Exibir o formulário de configuração
  ?>
  <div class="wrap">
    <h1>Configurações do Meu Plugin</h1>
    <form method="post" action="">
      <label for="nome_formulario">Nome do Formulário:</label>
      <input type="text" name="nome_formulario" id="nome_formulario" value="<?php echo get_option('meu-plugin-nome-formulario'); ?>"><br><br>

      <label for="horario_geracao">Horário de Geração:</label>
      <input type="text" name="horario_geracao" id="horario_geracao" value="<?php echo get_option('meu-plugin-horario-geração'); ?>"><br><br>

      <label for="email">E-mail:</label>
      <input type="text" name="email" id="email" value="<?php echo get_option('meu-plugin-email'); ?>"><br><br>

      <label for="sequencia_numerica">Sequência Numérica:</label>
      <input type="text" name="sequencia_numerica" id="sequencia_numerica" value="<?php echo get_option('meu-plugin-sequencia-numerica'); ?>"><br><br>

      <?php wp_nonce_field('meu-plugin-config'); ?>
      <input type="submit" name="submit" value="Salvar">
    </form>
  </div>
  <?php
}

// Função para registrar as configurações do plugin
function meu_plugin_personalizado_registrar_configuracoes() {
  register_setting('meu-plugin-config', 'meu-plugin-nome-formulario');
  register_setting('meu-plugin-config', 'meu-plugin-horario-geração');
  register_setting('meu-plugin-config', 'meu-plugin-email');
  register_setting('meu-plugin-config', 'meu-plugin-sequencia-numerica');
}

// Hook para adicionar o menu no painel lateral
add_action('admin_menu', 'meu_plugin_personalizado_menu');

// Hook para registrar as configurações
add_action('admin_init', 'meu_plugin_personalizado_registrar_configuracoes');

function gerarProximoNumeroSorteio($email) {
  // Obtém o último número de sorteio enviado
  $ultimoNumeroEnviado = get_option('ultimo-numero-enviado');
  
  // Verifica se o último número de sorteio enviado é válido
  if ($ultimoNumeroEnviado === false || !is_numeric($ultimoNumeroEnviado)) {
    $ultimoNumeroEnviado = 0;
  }

  // Obtém a sequência numérica configurada
  $sequenciaNumerica = get_option('meu-plugin-sequencia-numerica');
  $sequenciaNumerica = explode('-', $sequenciaNumerica); // Divide a sequência em um array

  // Verifica se a sequência numérica é válida
  if (count($sequenciaNumerica) === 2 && is_numeric($sequenciaNumerica[0]) && is_numeric($sequenciaNumerica[1])) {
    $inicioSequencia = intval($sequenciaNumerica[0]);
    $fimSequencia = intval($sequenciaNumerica[1]);

    // Verifica se o último número enviado está dentro da sequência configurada
    if ($ultimoNumeroEnviado >= $inicioSequencia && $ultimoNumeroEnviado < $fimSequencia) {
      // Obtém o horário de geração configurado
      $horarioGeracao = get_option('meu-plugin-horario-geração');
      $horarioAtual = strtotime(current_time('Y-m-d H:i:s')); // Obtém o horário atual em segundos
      $horarioGeracao = strtotime(date('Y-m-d') . ' ' . $horarioGeracao . ':00'); // Obtém o horário de geração em segundos

      // Verifica se o horário atual é maior ou igual ao horário de geração configurado
      if ($horarioAtual >= $horarioGeracao) {
        // Reinicia a sequência numérica
        $proximoNumeroSorteio = $inicioSequencia;
      } else {
        // Obtém o próximo número de sorteio
        $proximoNumeroSorteio = $ultimoNumeroEnviado + 1;
      }

      // Armazena o próximo número de sorteio
      update_option('ultimo-numero-enviado', $proximoNumeroSorteio);
      
      // Verifica se o próximo número de sorteio está dentro da sequência
      if ($proximoNumeroSorteio < $inicioSequencia || $proximoNumeroSorteio >= $fimSequencia) {
        // Calcula o próximo número de sorteio dentro da sequência
        $proximoNumeroSorteio = $proximoNumeroSorteio % $fimSequencia + $inicioSequencia;
        // Armazena o próximo número de sorteio
        update_option('ultimo-numero-enviado', $proximoNumeroSorteio);
      }

      // Retorna o próximo número de sorteio
      return $proximoNumeroSorteio;
    } else {
      // Reinicia a sequência numérica
      $proximoNumeroSorteio = $inicioSequencia;

      // Armazena o próximo número de sorteio
      update_option('ultimo-numero-enviado', $proximoNumeroSorteio);
      
      // Retorna o próximo número de sorteio
      return $proximoNumeroSorteio;
    }
  } else {
    // Sequência numérica inválida, retorna o último número enviado + 1
    $proximoNumeroSorteio = $ultimoNumeroEnviado + 1;

    // Armazena o próximo número de sorteio
    update_option('ultimo-numero-enviado', $proximoNumeroSorteio);
    
    // Retorna o próximo número de sorteio
    return $proximoNumeroSorteio;
  }
}

function foiEnviadoNasUltimas24Horas($email) {
  // Implementação para verificar se o e-mail foi enviado nas últimas 24 horas
  // Você pode usar bibliotecas ou funções para obter o cabeçalho completo do e-mail e analisá-lo para verificar a data de envio
  // Aqui está um exemplo simplificado usando a função time() do PHP para comparar a data de envio do e-mail
  $dataUltimoEnvio = strtotime(get_option('data-ultimo-envio')); // Obter a data do último envio
  $dataAtual = time(); // Obter a data atual
  $intervalo = 24 * 60 * 60; // 24 horas em segundos
  if ($dataAtual - $dataUltimoEnvio <= $intervalo) {
    return true; // O e-mail foi enviado nas últimas 24 horas
  } else {
    return false; // O e-mail não foi enviado nas últimas 24 horas
  }
}

function obterNumeroSorteio($email) {
  // Implementação para obter o número de sorteio correspondente ao e-mail
  // Você pode consultar um banco de dados ou outra fonte de dados para obter o número de sorteio
  // Aqui está um exemplo simplificado usando um array associativo para armazenar os números de sorteio por e-mail
  $numerosSorteio = array(
    '[email protected]' => 123,
    '[email protected]' => 456,
    // ... outros e-mails e números de sorteio
  );
  if (array_key_exists($email, $numerosSorteio)) {
    return $numerosSorteio[$email]; // Retorna o número de sorteio correspondente ao e-mail
  } else {
    return false; // Retorna falso se o e-mail não tiver um número de sorteio correspondente
  }
}

function obterProximoNumeroSorteio() {
  // Implementação para obter o próximo número de sorteio da sequência numérica
  // Você pode consultar um banco de dados ou outra fonte de dados para obter a sequência numérica
  // Aqui está um exemplo simplificado usando uma variável global para armazenar o próximo número de sorteio

  // Verifica se a opção 'proximo-numero-sorteio' já existe
  if (get_option('proximo-numero-sorteio')) {
    $proximoNumeroSorteio = get_option('proximo-numero-sorteio');
    $proximoNumeroSorteio++; // Incrementa o próximo número de sorteio
  } else {
    // Se a opção 'proximo-numero-sorteio' não existe, começa a sequência numérica a partir do número 1
    $proximoNumeroSorteio = 1;
  }

  // Armazena o próximo número de sorteio
  update_option('proximo-numero-sorteio', $proximoNumeroSorteio);

  return $proximoNumeroSorteio; // Retorna o próximo número de sorteio
}

// Função para enviar o e-mail com os dados do formulário e o número de sorteio
function enviarEmailSorteio($dados) {
  // Obtém o e-mail preenchido no formulário
  $emailFormulario = $dados['E-mail']; // Substitua 'E-mail' pelo nome do campo de e-mail no seu formulário
  // Gera o próximo número de sorteio
  $numeroSorteio = gerarProximoNumeroSorteio($emailFormulario);

  // Configurações do e-mail
  $to = get_option('meu-plugin-email'); // Obtém o e-mail das configurações do plugin
  $subject = 'Teste';
  $message = "Seu número da sorte é o: $numeroSorteio\n\n";

  // Adiciona os dados do formulário ao e-mail
  foreach ($dados as $key => $value) {
    $message .= "$key: $value\n";
  }

  // Envia o e-mail para o endereço do formulário
  wp_mail($emailFormulario, $subject, $message);

  // Envia o e-mail para o endereço especificado na configuração do plugin
  wp_mail($to, $subject, $message);
}

// Hook para capturar o envio do formulário
add_action('elementor_pro/forms/new_record', function($record, $handler) {
  $form_name = $record->get_form_settings('form_name');
  $form_data = $record->get_formatted_data();

  // Verifica se o formulário é o desejado
  if ($form_name === 'teste') { // Substitua pelo nome do seu formulário
    enviarEmailSorteio($form_data); // Envia o e-mail com os dados do formulário e o número de sorteio
  }
}, 10, 2);

 

 

Link para o comentário
Compartilhar em outros sites

  • DiF alterou o título para Sequencia numérica não reseta e também não bloqueia depois de 3 horas

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!