55 lines
1.7 KiB
PHP
Executable File
55 lines
1.7 KiB
PHP
Executable File
<?php
|
|
|
|
namespace Modules\Licensing\Services;
|
|
|
|
use Modules\Licensing\Models\LicenseDeliveryOutbox;
|
|
use Illuminate\Support\Facades\Crypt;
|
|
use Illuminate\Support\Facades\Mail;
|
|
|
|
final class LicenseDeliveryService
|
|
{
|
|
public function deliverPending(int $limit = 20): int
|
|
{
|
|
$delivered = 0;
|
|
$pending = LicenseDeliveryOutbox::query()
|
|
->with('license')
|
|
->whereNull('delivered_at')
|
|
->whereNotNull('recipient_email')
|
|
->where('recipient_email', '!=', '')
|
|
->oldest()
|
|
->limit(max(1, min($limit, 100)))
|
|
->get();
|
|
|
|
foreach ($pending as $outbox) {
|
|
$license = $outbox->license;
|
|
if (! $license) {
|
|
continue;
|
|
}
|
|
|
|
$plain = Crypt::decryptString($outbox->encrypted_license_key);
|
|
$recipient = strtolower(trim((string) $outbox->recipient_email));
|
|
if ($recipient === '') {
|
|
continue;
|
|
}
|
|
|
|
$data = [
|
|
'customerName' => $license->customer_name,
|
|
'edition' => $license->edition,
|
|
'licenseKey' => $plain,
|
|
'expiresAt' => $license->expires_at,
|
|
'portalUrl' => config('sonardesk.portal_url') ?: url('/portal'),
|
|
'downloadUrl' => route('release'),
|
|
];
|
|
|
|
Mail::send(['html' => 'emails.license-key', 'text' => 'emails.license-key-text'], $data, function ($message) use ($recipient): void {
|
|
$message->to($recipient)->subject('Your SonarDesk licence key');
|
|
});
|
|
|
|
$outbox->update(['delivered_at' => now()]);
|
|
$delivered++;
|
|
}
|
|
|
|
return $delivered;
|
|
}
|
|
}
|