This commit is contained in:
Saeed Vaziry
2023-07-02 12:47:50 +02:00
commit 5c72f12490
825 changed files with 41659 additions and 0 deletions

View File

@ -0,0 +1,33 @@
<x-card>
<x-slot name="title">{{ __("Change PHP Version") }}</x-slot>
<x-slot name="description">{{ __("You can change your site's PHP version here") }}</x-slot>
<form id="change-php-version" wire:submit.prevent="change" class="space-y-6">
<div>
<x-input-label for="version" :value="__('PHP Version')" />
<x-select-input wire:model.defer="version" id="version" name="version" class="mt-1 w-full">
<option value="" disabled selected>{{ __("Select") }}</option>
@foreach($site->server->installedPHPVersions() as $php)
<option value="{{ $php }}" @if($php === $version) selected @endif>{{ $php }}</option>
@endforeach
</x-select-input>
@error('version')
<x-input-error class="mt-2" :messages="$message" />
@enderror
</div>
</form>
<x-slot name="actions">
@if (session('status') === 'changing-php-version')
<p class="mr-2">{{ __('Updating...') }}</p>
@endif
@if (session('status') === 'change-site-php-finished')
<p class="mr-2">{{ __('Updated!') }}</p>
@endif
@if (session('status') === 'change-site-php-failed')
<p class="mr-2">{{ __('Failed!') }}</p>
@endif
<x-primary-button form="change-php-version" wire:loading.attr="disabled">{{ __('Save') }}</x-primary-button>
</x-slot>
</x-card>

View File

@ -0,0 +1,104 @@
<div x-data="">
<x-card>
<x-slot name="title">{{ __("Create new site") }}</x-slot>
<x-slot name="description">{{ __("Use this form to create a new site") }}</x-slot>
<form id="create-site" wire:submit.prevent="create" class="space-y-6">
<div>
<x-input-label>{{ __("Select site type") }}</x-input-label>
<div class="grid grid-cols-6 gap-2 mt-1">
@foreach(config('core.site_types') as $t)
<x-site-type-item x-on:click="$wire.type = '{{ $t }}'" :active="$type === $t">
<div class="flex w-full flex-col items-center justify-center text-center">
<img src="{{ asset('static/images/' . $t . '.svg') }}" class="h-7" alt="Server">
<span class="md:text-normal mt-2 hidden text-sm md:block">{{ $t }}</span>
</div>
</x-site-type-item>
@endforeach
</div>
@error('type')
<x-input-error class="mt-2" :messages="$message" />
@enderror
</div>
<div>
<x-input-label for="domain" :value="__('Domain')" />
<x-text-input wire:model.defer="domain" id="domain" name="domain" type="text" class="mt-1 block w-full" autocomplete="domain" placeholder="example.com" />
@error('domain')
<x-input-error class="mt-2" :messages="$message" />
@enderror
</div>
<div>
<x-input-label for="alias" :value="__('Alias')" />
<x-text-input wire:model.defer="alias" id="alias" name="alias" type="text" class="mt-1 block w-full" autocomplete="alias" placeholder="www.example.com" />
@error('alias')
<x-input-error class="mt-2" :messages="$message" />
@enderror
</div>
<div>
<x-input-label for="php_version" :value="__('PHP Version')" />
<x-select-input wire:model.defer="php_version" id="php_version" name="php_version" class="mt-1 w-full">
<option value="" selected disabled>{{ __("Select") }}</option>
@foreach($server->installedPHPVersions() as $version)
<option value="{{ $version }}" @if($version === $php_version) selected @endif>
PHP {{ $version }}
</option>
@endforeach
</x-select-input>
@error('php_version')
<x-input-error class="mt-2" :messages="$message" />
@enderror
</div>
<div>
<x-input-label for="web_directory" :value="__('Web Directory')" />
<x-text-input wire:model.defer="web_directory" id="web_directory" name="web_directory" type="text" class="mt-1 block w-full" autocomplete="web_directory" />
@error('web_directory')
<x-input-error class="mt-2" :messages="$message" />
@enderror
</div>
<div>
<x-input-label for="source_control" :value="__('Source Control')" />
<x-select-input wire:model="source_control" id="source_control" name="source_control" class="mt-1 w-full">
<option value="" selected disabled>{{ __("Select") }}</option>
@foreach($sourceControls as $sourceControl)
<option value="{{ $sourceControl->provider }}" @if($sourceControl->provider === $source_control) selected @endif>
{{ ucfirst($sourceControl->provider) }}
</option>
@endforeach
</x-select-input>
@error('source_control')
<x-input-error class="mt-2" :messages="$message" />
@enderror
</div>
<div>
<x-input-label for="repository" :value="__('Repository')" />
<x-text-input wire:model.defer="repository" id="repository" name="repository" type="text" class="mt-1 block w-full" autocomplete="repository" placeholder="organization/repository" />
@error('repository')
<x-input-error class="mt-2" :messages="$message" />
@enderror
</div>
<div>
<x-input-label for="branch" :value="__('Branch')" />
<x-text-input wire:model.defer="branch" id="branch" name="branch" type="text" class="mt-1 block w-full" autocomplete="branch" placeholder="main" />
@error('branch')
<x-input-error class="mt-2" :messages="$message" />
@enderror
</div>
<div class="mt-6">
<label for="composer" class="inline-flex items-center">
<input id="composer" wire:model.defer="composer" type="checkbox" class="rounded dark:bg-gray-900 border-gray-300 dark:border-gray-700 text-indigo-600 shadow-sm focus:ring-indigo-500 dark:focus:ring-indigo-600 dark:focus:ring-offset-gray-800" name="composer">
<span class="ml-2 text-sm text-gray-600 dark:text-gray-400">{{ __('Run `composer install --no-dev`') }}</span>
</label>
</div>
</form>
<x-slot name="actions">
<x-primary-button form="create-site" wire:loading.attr="disabled">{{ __('Create') }}</x-primary-button>
</x-slot>
</x-card>
</div>

View File

@ -0,0 +1,9 @@
<div x-data="">
<x-danger-button x-on:click="$dispatch('open-modal', 'delete-site')">{{ __("Delete Site") }}</x-danger-button>
<x-confirm-modal
name="delete-site"
:title="__('Confirm')"
:description="__('Are you sure that you want to delete this site?')"
method="delete"
/>
</div>

View File

@ -0,0 +1,10 @@
<x-card>
<x-slot name="title">
<span class="text-red-600">{{ __("Installation Failed!") }}</span>
</x-slot>
<x-slot name="description">{{ __("Your site's installation failed") }}</x-slot>
<div class="mt-5 flex items-center justify-center">
<x-secondary-button :href="route('servers.logs', ['server' => $site->server])" class="mr-2">{{ __("View Logs") }}</x-secondary-button>
<livewire:sites.delete-site :site="$site" />
</div>
</x-card>

View File

@ -0,0 +1,13 @@
<x-card>
<x-slot name="title">{{ __("Installing") }}</x-slot>
<x-slot name="description">{{ __("The site is being installed") }}</x-slot>
<div class="relative flex h-6 overflow-hidden rounded bg-primary-200 text-xs dark:bg-primary-500 dark:bg-opacity-10">
<div
style="width:{{ $site->progress }}%;"
class="flex flex-col justify-center whitespace-nowrap bg-primary-500 text-center text-white shadow-none"
></div>
<span class="absolute left-0 right-0 top-1 font-semibold text-center {{ $site->progress >= 40 ? 'text-white' : 'text-black dark:text-white' }}">
{{ $site->progress }}%
</span>
</div>
</x-card>

View File

@ -0,0 +1,38 @@
<div>
<x-card-header>
<x-slot name="title">
{{ __("Site Overview") }}
</x-slot>
<x-slot name="description">
<a href="{{ $site->activeSsl ? 'https://' : 'http://' . $site->domain }}" target="_blank">{{ $site->domain }}</a>
</x-slot>
<x-slot name="aside">
@include('livewire.sites.partials.status', ['status' => $site->status])
</x-slot>
</x-card-header>
<div class="mx-auto grid grid-cols-3 rounded-md bg-white border border-gray-200 dark:border-gray-700 dark:bg-gray-800">
<div class="p-5">
<div class="flex items-center justify-center md:justify-start">
<x-heroicon-o-lock-closed class="w-8 h-8 text-primary-500" />
<div class="ml-2 hidden md:block">{{ __("SSL") }}</div>
</div>
<div class="mt-3 text-center text-3xl font-bold text-gray-600 dark:text-gray-400 md:text-left">
{{ $site->activeSsl ? __("Yes") : __("No") }}
</div>
</div>
<div class="border-l border-r border-gray-200 p-5 dark:border-gray-900">
<div class="flex items-center justify-center md:justify-start">
<x-heroicon-o-rectangle-stack class="w-8 h-8 text-primary-500" />
<div class="ml-2 hidden md:block">{{ __("Queues") }}</div>
</div>
<div class="mt-3 text-center text-3xl font-bold text-gray-600 dark:text-gray-400 md:text-left">{{ $site->queues()->count() }}</div>
</div>
<div class="p-5">
<div class="flex items-center justify-center md:justify-start">
<x-heroicon-o-code-bracket class="w-8 h-8 text-primary-500" />
<div class="ml-2 hidden md:block">{{ __("PHP") }}</div>
</div>
<div class="mt-3 text-center text-3xl font-bold text-gray-600 dark:text-gray-400 md:text-left">{{ $site->php_version }}</div>
</div>
</div>
</div>

View File

@ -0,0 +1,12 @@
@if($status == \App\Enums\SiteStatus::READY)
<x-status status="success">{{ $status }}</x-status>
@endif
@if($status == \App\Enums\SiteStatus::INSTALLING)
<x-status status="warning">{{ $status }}</x-status>
@endif
@if($status == \App\Enums\SiteStatus::INSTALLATION_FAILED)
<x-status status="danger">{{ $status }}</x-status>
@endif
@if($status == \App\Enums\SiteStatus::DELETING)
<x-status status="danger">{{ $status }}</x-status>
@endif

View File

@ -0,0 +1,13 @@
<div>
@if($site->status === \App\Enums\SiteStatus::INSTALLING)
@include('livewire.sites.partials.installing', ['site' => $site])
@endif
@if($site->status === \App\Enums\SiteStatus::INSTALLATION_FAILED)
@include('livewire.sites.partials.installation-failed', ['site' => $site])
@endif
@if($site->status === \App\Enums\SiteStatus::READY)
<div class="space-y-10">
@include('livewire.sites.partials.site-overview', ['site' => $site])
</div>
@endif
</div>

View File

@ -0,0 +1,42 @@
<div>
<x-card-header>
<x-slot name="title">Sites</x-slot>
<x-slot name="description">Your sites will appear here. You can see the details and manage them</x-slot>
<x-slot name="aside">
<x-primary-button :href="route('servers.sites.create', ['server' => $server])">
{{ __('Create Site') }}
</x-primary-button>
</x-slot>
</x-card-header>
@if(count($sites) > 0)
<div class="space-y-3">
@foreach($sites as $site)
<a href="{{ route('servers.sites.show', ['server' => $server, 'site' => $site]) }}" class="block">
<x-item-card>
<div class="flex-none">
<img src="{{ asset('static/images/' . $site->type . '.svg') }}" class="h-10 w-10" alt="">
</div>
<div class="ml-3 flex flex-grow flex-col items-start justify-center">
<span class="mb-1">{{ $site->domain }}</span>
<span class="text-sm text-gray-400">
<x-datetime :value="$site->created_at"/>
</span>
</div>
<div class="flex items-center">
<div class="inline">
@include('livewire.sites.partials.status', ['status' => $site->status])
</div>
</div>
</x-item-card>
</a>
@endforeach
</div>
@else
<x-simple-card>
<div class="text-center">
{{ __("You don't have any sites yet!") }}
</div>
</x-simple-card>
@endif
</div>