Skip to content

Commit f235d12

Browse files
committed
Add fallback table creation for bulk transfer pages
1 parent 23cc168 commit f235d12

1 file changed

Lines changed: 81 additions & 0 deletions

File tree

modules/addons/openprovider/Controllers/Admin/BulkDomainTransferController.php

Lines changed: 81 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,9 @@
22
namespace OpenProvider\WhmcsDomainAddon\Controllers\Admin;
33

44
use Illuminate\Database\QueryException;
5+
use Illuminate\Database\Schema\Blueprint;
56
use WHMCS\Config\Setting;
7+
use WHMCS\Database\Capsule;
68
use WeDevelopCoffee\wPower\Controllers\ViewBaseController;
79
use WeDevelopCoffee\wPower\Core\Core;
810
use WeDevelopCoffee\wPower\Validator\Validator;
@@ -41,6 +43,8 @@ public function __construct(
4143
*/
4244
public function show($params)
4345
{
46+
$this->ensureTablesExist();
47+
4448
$domains = isset($_POST['domains']) ? trim($_POST['domains']) : '';
4549
$submissionError = null;
4650
$validationErrors = [];
@@ -89,6 +93,79 @@ public function show($params)
8993
]);
9094
}
9195

96+
private function ensureTablesExist(): void
97+
{
98+
if (Capsule::schema()->hasTable('mod_op_bulk_transfer_batches') &&
99+
Capsule::schema()->hasTable('mod_op_bulk_transfer_items')) {
100+
return;
101+
}
102+
103+
if (!Capsule::schema()->hasTable('mod_op_bulk_transfer_batches')) {
104+
Capsule::schema()->create('mod_op_bulk_transfer_batches', function (Blueprint $table) {
105+
$table->increments('id');
106+
$table->string('bulk_reference', 50)->unique('uniq_bulk_reference');
107+
$table->integer('reseller_id')->unsigned()->nullable()->default(null);
108+
$table->integer('initiated_by_admin_id')->unsigned()->nullable()->default(null);
109+
$table->string('description', 255)->nullable()->default(null);
110+
$table->integer('total_domains')->unsigned()->default(0);
111+
$table->integer('processed_domains')->unsigned()->default(0);
112+
$table->integer('success_domains')->unsigned()->default(0);
113+
$table->integer('failed_domains')->unsigned()->default(0);
114+
$table->enum('status', [
115+
'queued', 'processing', 'completed', 'completed_with_errors', 'failed',
116+
])->default('queued')->index('idx_status');
117+
$table->text('notes')->nullable();
118+
$table->dateTime('created_at')->useCurrent();
119+
$table->dateTime('updated_at')->useCurrent()->useCurrentOnUpdate();
120+
$table->index('created_at', 'idx_created_at');
121+
});
122+
}
123+
124+
if (!Capsule::schema()->hasTable('mod_op_bulk_transfer_items')) {
125+
Capsule::schema()->create('mod_op_bulk_transfer_items', function (Blueprint $table) {
126+
$table->increments('id');
127+
$table->integer('batch_id')->unsigned();
128+
$table->integer('client_id')->unsigned()->nullable()->default(null);
129+
$table->integer('domain_id')->unsigned()->nullable()->default(null);
130+
$table->string('domain', 255);
131+
$table->string('op_owner_handle', 100)->nullable()->default(null);
132+
$table->string('op_admin_handle', 100)->nullable()->default(null);
133+
$table->string('op_tech_handle', 100)->nullable()->default(null);
134+
$table->string('op_billing_handle', 100)->nullable()->default(null);
135+
$table->string('op_transfer_status', 20)->nullable()->default(null);
136+
$table->integer('op_domain_id')->unsigned()->nullable()->default(null);
137+
$table->enum('transfer_status', [
138+
'queued', 'validating', 'validation_failed', 'ready_for_transfer',
139+
'unlocking', 'getting_epp', 'creating_handle', 'transferring',
140+
'transfer_requested', 'checking_transfer_status', 'success', 'failed',
141+
])->default('queued')->index('idx_transfer_status');
142+
$table->text('failure_reason')->nullable();
143+
$table->dateTime('transfer_requested_at')->nullable()->default(null);
144+
$table->dateTime('last_status_check_at')->nullable()->default(null);
145+
$table->text('last_status_message')->nullable();
146+
$table->tinyInteger('attempt_count')->unsigned()->default(0);
147+
$table->dateTime('started_at')->nullable()->default(null);
148+
$table->dateTime('finished_at')->nullable()->default(null);
149+
$table->dateTime('created_at')->useCurrent();
150+
$table->dateTime('updated_at')->useCurrent()->useCurrentOnUpdate();
151+
$table->unique(['batch_id', 'domain'], 'uniq_batch_domain');
152+
$table->index('batch_id', 'idx_batch_id');
153+
$table->index('client_id', 'idx_client_id');
154+
$table->index('domain_id', 'idx_domain_id');
155+
$table->index('op_transfer_status', 'idx_op_transfer_status');
156+
$table->index('last_status_check_at', 'idx_last_status_check_at');
157+
$table->index('domain', 'idx_domain');
158+
});
159+
160+
Capsule::schema()->table('mod_op_bulk_transfer_items', function (Blueprint $table) {
161+
$table->foreign('batch_id', 'fk_bulk_transfer_batch')
162+
->references('id')
163+
->on('mod_op_bulk_transfer_batches')
164+
->onDelete('cascade');
165+
});
166+
}
167+
}
168+
92169
private function buildSubmissionErrorMessage(\Throwable $exception): string
93170
{
94171
$message = trim((string) $exception->getMessage());
@@ -223,6 +300,8 @@ private function isValidDomain(string $domain): bool
223300

224301
public function batchList($params)
225302
{
303+
$this->ensureTablesExist();
304+
226305
try {
227306
$perPage = 10;
228307

@@ -269,6 +348,8 @@ public function batchList($params)
269348

270349
public function batchDetails($params)
271350
{
351+
$this->ensureTablesExist();
352+
272353
$batchReference = $params['batchReference'] ?? ($_GET['batchReference'] ?? '');
273354

274355
try {

0 commit comments

Comments
 (0)