110 lines
3.6 KiB
PHP
110 lines
3.6 KiB
PHP
<?php
|
|
|
|
namespace App\Http\Livewire\Whatsapp;
|
|
|
|
use App\Models\WhatsappSystemConfig;
|
|
use App\Services\BancolombiaParser;
|
|
use App\Services\CorreoImapService;
|
|
use Livewire\Component;
|
|
use Jantinnerezo\LivewireAlert\LivewireAlert;
|
|
|
|
class ShowCorreoConfig extends Component
|
|
{
|
|
use LivewireAlert;
|
|
|
|
// ── Campos de configuración ──────────────────
|
|
public string $correo_imap_host = '';
|
|
public string $correo_imap_port = '993';
|
|
public string $correo_imap_ssl = '1';
|
|
public string $correo_imap_user = '';
|
|
public string $correo_imap_password = '';
|
|
public string $correo_imap_folder = 'INBOX';
|
|
public string $correo_imap_enabled = '0';
|
|
public string $correo_imap_minutos = '5'; // ventana de tiempo en minutos
|
|
|
|
// ── Estado de prueba ─────────────────────────
|
|
public bool $testing = false;
|
|
public string $testStatus = ''; // 'ok' | 'error' | ''
|
|
public string $testError = '';
|
|
public array $emails = [];
|
|
|
|
protected $rules = [
|
|
'correo_imap_host' => 'required|string|max:255',
|
|
'correo_imap_port' => 'required|integer|min:1|max:65535',
|
|
'correo_imap_user' => 'required|email',
|
|
'correo_imap_password' => 'required|string',
|
|
'correo_imap_folder' => 'required|string|max:100',
|
|
'correo_imap_minutos' => 'required|integer|min:1|max:1440',
|
|
];
|
|
|
|
public function mount(): void
|
|
{
|
|
$keys = [
|
|
'correo_imap_host', 'correo_imap_port', 'correo_imap_ssl',
|
|
'correo_imap_user', 'correo_imap_password', 'correo_imap_folder',
|
|
'correo_imap_enabled', 'correo_imap_minutos',
|
|
];
|
|
foreach ($keys as $key) {
|
|
$this->{$key} = WhatsappSystemConfig::get($key, $this->{$key});
|
|
}
|
|
}
|
|
|
|
public function save(): void
|
|
{
|
|
$this->validate();
|
|
|
|
$keys = [
|
|
'correo_imap_host', 'correo_imap_port', 'correo_imap_ssl',
|
|
'correo_imap_user', 'correo_imap_password', 'correo_imap_folder',
|
|
'correo_imap_enabled', 'correo_imap_minutos',
|
|
];
|
|
foreach ($keys as $key) {
|
|
WhatsappSystemConfig::set($key, (string) $this->{$key});
|
|
}
|
|
|
|
$this->alert('success', 'Configuración guardada correctamente.');
|
|
}
|
|
|
|
public function probar(): void
|
|
{
|
|
$this->validate();
|
|
|
|
$this->testing = true;
|
|
$this->testStatus = '';
|
|
$this->testError = '';
|
|
$this->emails = [];
|
|
|
|
try {
|
|
$service = new CorreoImapService(
|
|
host: $this->correo_imap_host,
|
|
port: (int) $this->correo_imap_port,
|
|
useSsl: $this->correo_imap_ssl === '1',
|
|
user: $this->correo_imap_user,
|
|
password: $this->correo_imap_password,
|
|
folder: $this->correo_imap_folder,
|
|
timeout: 20
|
|
);
|
|
|
|
$raw = $service->fetchLatest(5, (int) $this->correo_imap_minutos);
|
|
|
|
// Añadir datos parseados de Bancolombia a cada correo
|
|
$this->emails = array_map(function (array $email) {
|
|
$email['bancolombia'] = BancolombiaParser::parse($email['body']);
|
|
return $email;
|
|
}, $raw);
|
|
|
|
$this->testStatus = 'ok';
|
|
} catch (\Throwable $e) {
|
|
$this->testStatus = 'error';
|
|
$this->testError = $e->getMessage();
|
|
} finally {
|
|
$this->testing = false;
|
|
}
|
|
}
|
|
|
|
public function render()
|
|
{
|
|
return view('livewire.whatsapp.show-correo-config');
|
|
}
|
|
}
|