diff --git a/src/app/Console/Commands/DomainStatus.php b/src/app/Console/Commands/DomainStatus.php new file mode 100644 index 00000000..71938af0 --- /dev/null +++ b/src/app/Console/Commands/DomainStatus.php @@ -0,0 +1,86 @@ +argument('domain'))->firstOrFail(); + + $this->info("Found domain: {$domain->id}"); + + $statuses = [ + 'active' => Domain::STATUS_ACTIVE, + 'suspended' => Domain::STATUS_SUSPENDED, + 'deleted' => Domain::STATUS_DELETED, + 'ldapReady' => Domain::STATUS_LDAP_READY, + 'verified' => Domain::STATUS_VERIFIED, + 'confirmed' => Domain::STATUS_CONFIRMED, + ]; + + // I'd prefer "-state" and "+state" syntax, but it's not possible + if ($update = $this->option('del')) { + $delete = true; + } elseif ($update = $this->option('add')) { + $delete = false; + } + + if (!empty($update)) { + $map = \array_change_key_case($statuses); + $update = \strtolower($update); + + if (isset($map[$update])) { + if ($delete && $domain->status & $map[$update]) { + $domain->status ^= $map[$update]; + $domain->save(); + } elseif (!$delete && !($domain->status & $map[$update])) { + $domain->status |= $map[$update]; + $domain->save(); + } + } + } + + $domain_state = []; + foreach (\array_keys($statuses) as $state) { + $func = 'is' . \ucfirst($state); + if ($domain->$func()) { + $domain_state[] = $state; + } + } + + $this->info("Status: " . \implode(',', $domain_state)); + } +}