From 11e3b167cc183539cb6c4461b7fe1052d4b7ab91 Mon Sep 17 00:00:00 2001 From: Saeed Vaziry <61919774+saeedvaziry@users.noreply.github.com> Date: Sat, 29 Jun 2024 12:52:03 +0330 Subject: [PATCH] global storage-providers, notification channels and server providers (#247) --- .../NotificationChannels/AddChannel.php | 1 + .../NotificationChannels/EditChannel.php | 34 +++++++ .../ServerProvider/CreateServerProvider.php | 1 + .../ServerProvider/EditServerProvider.php | 34 +++++++ .../SourceControl/EditSourceControl.php | 2 +- .../StorageProvider/CreateStorageProvider.php | 1 + .../StorageProvider/EditStorageProvider.php | 34 +++++++ app/Http/Controllers/SSHKeyController.php | 2 +- app/Http/Controllers/ServerController.php | 4 +- .../NotificationChannelController.php | 28 +++++- .../Settings/ProjectController.php | 7 +- .../Settings/ServerProviderController.php | 28 +++++- .../Settings/SourceControlController.php | 2 +- .../Settings/StorageProviderController.php | 28 +++++- app/Models/NotificationChannel.php | 16 +++ app/Models/ServerProvider.php | 16 +++ app/Models/SourceControl.php | 8 +- app/Models/StorageProvider.php | 16 +++ app/Models/User.php | 23 ----- ...ject_id_to_notification_channels_table.php | 22 +++++ ..._project_id_to_storage_providers_table.php | 22 +++++ ...d_project_id_to_server_providers_table.php | 22 +++++ .../application/deployment-script.blade.php | 2 +- resources/views/application/env.blade.php | 2 +- .../partials/create-backup-modal.blade.php | 2 +- .../php/partials/update-php-ini.blade.php | 2 +- .../scripts/partials/fields/content.blade.php | 2 +- .../partials/add-channel.blade.php | 9 ++ .../partials/channels-list.blade.php | 24 ++++- .../edit-notification-channel.blade.php | 59 +++++++++++ .../partials/connect-provider.blade.php | 9 ++ .../partials/edit-provider.blade.php | 59 +++++++++++ .../partials/providers-list.blade.php | 24 ++++- .../partials/edit-source-control.blade.php | 2 +- .../partials/connect-provider.blade.php | 9 ++ .../partials/edit-provider.blade.php | 59 +++++++++++ .../partials/providers-list.blade.php | 24 ++++- .../partials/update-v-host.blade.php | 2 +- .../create/fields/source-control.blade.php | 2 +- routes/settings.php | 3 + tests/Feature/NotificationChannelsTest.php | 2 + tests/Feature/ServerKeysTest.php | 2 + tests/Feature/ServerProvidersTest.php | 8 ++ tests/Feature/StorageProvidersTest.php | 97 ++++++++++++++----- 44 files changed, 678 insertions(+), 77 deletions(-) create mode 100644 app/Actions/NotificationChannels/EditChannel.php create mode 100644 app/Actions/ServerProvider/EditServerProvider.php create mode 100644 app/Actions/StorageProvider/EditStorageProvider.php create mode 100644 database/migrations/2024_06_24_211155_add_project_id_to_notification_channels_table.php create mode 100644 database/migrations/2024_06_25_202655_add_project_id_to_storage_providers_table.php create mode 100644 database/migrations/2024_06_25_212812_add_project_id_to_server_providers_table.php create mode 100644 resources/views/settings/notification-channels/partials/edit-notification-channel.blade.php create mode 100644 resources/views/settings/server-providers/partials/edit-provider.blade.php create mode 100644 resources/views/settings/storage-providers/partials/edit-provider.blade.php diff --git a/app/Actions/NotificationChannels/AddChannel.php b/app/Actions/NotificationChannels/AddChannel.php index 2c3f7b8c..11e98aef 100644 --- a/app/Actions/NotificationChannels/AddChannel.php +++ b/app/Actions/NotificationChannels/AddChannel.php @@ -19,6 +19,7 @@ public function add(User $user, array $input): void 'user_id' => $user->id, 'provider' => $input['provider'], 'label' => $input['label'], + 'project_id' => isset($input['global']) && $input['global'] ? null : $user->current_project_id, ]); $this->validateType($channel, $input); $channel->data = $channel->provider()->createData($input); diff --git a/app/Actions/NotificationChannels/EditChannel.php b/app/Actions/NotificationChannels/EditChannel.php new file mode 100644 index 00000000..fbba3de7 --- /dev/null +++ b/app/Actions/NotificationChannels/EditChannel.php @@ -0,0 +1,34 @@ +validate($input); + + $notificationChannel->label = $input['label']; + $notificationChannel->project_id = isset($input['global']) && $input['global'] ? null : $user->current_project_id; + + $notificationChannel->save(); + } + + /** + * @throws ValidationException + */ + private function validate(array $input): void + { + $rules = [ + 'label' => [ + 'required', + ], + ]; + Validator::make($input, $rules)->validate(); + } +} diff --git a/app/Actions/ServerProvider/CreateServerProvider.php b/app/Actions/ServerProvider/CreateServerProvider.php index bdcb4530..2fb655a2 100644 --- a/app/Actions/ServerProvider/CreateServerProvider.php +++ b/app/Actions/ServerProvider/CreateServerProvider.php @@ -38,6 +38,7 @@ public function create(User $user, array $input): ServerProvider $serverProvider->profile = $input['name']; $serverProvider->provider = $input['provider']; $serverProvider->credentials = $provider->credentialData($input); + $serverProvider->project_id = isset($input['global']) && $input['global'] ? null : $user->current_project_id; $serverProvider->save(); return $serverProvider; diff --git a/app/Actions/ServerProvider/EditServerProvider.php b/app/Actions/ServerProvider/EditServerProvider.php new file mode 100644 index 00000000..f9694734 --- /dev/null +++ b/app/Actions/ServerProvider/EditServerProvider.php @@ -0,0 +1,34 @@ +validate($input); + + $serverProvider->profile = $input['name']; + $serverProvider->project_id = isset($input['global']) && $input['global'] ? null : $user->current_project_id; + + $serverProvider->save(); + } + + /** + * @throws ValidationException + */ + private function validate(array $input): void + { + $rules = [ + 'name' => [ + 'required', + ], + ]; + Validator::make($input, $rules)->validate(); + } +} diff --git a/app/Actions/SourceControl/EditSourceControl.php b/app/Actions/SourceControl/EditSourceControl.php index a7665e5a..54ae1d1f 100644 --- a/app/Actions/SourceControl/EditSourceControl.php +++ b/app/Actions/SourceControl/EditSourceControl.php @@ -14,7 +14,7 @@ public function edit(SourceControl $sourceControl, User $user, array $input): vo $this->validate($input); $sourceControl->profile = $input['name']; - $sourceControl->url = isset($input['url']) ? $input['url'] : null; + $sourceControl->url = $input['url'] ?? null; $sourceControl->project_id = isset($input['global']) && $input['global'] ? null : $user->current_project_id; $this->validateProvider($sourceControl, $input); diff --git a/app/Actions/StorageProvider/CreateStorageProvider.php b/app/Actions/StorageProvider/CreateStorageProvider.php index 0f8ba733..7fcbad7e 100644 --- a/app/Actions/StorageProvider/CreateStorageProvider.php +++ b/app/Actions/StorageProvider/CreateStorageProvider.php @@ -21,6 +21,7 @@ public function create(User $user, array $input): void 'user_id' => $user->id, 'provider' => $input['provider'], 'profile' => $input['name'], + 'project_id' => isset($input['global']) && $input['global'] ? null : $user->current_project_id, ]); $this->validateProvider($input, $storageProvider->provider()->validationRules()); diff --git a/app/Actions/StorageProvider/EditStorageProvider.php b/app/Actions/StorageProvider/EditStorageProvider.php new file mode 100644 index 00000000..0d33c808 --- /dev/null +++ b/app/Actions/StorageProvider/EditStorageProvider.php @@ -0,0 +1,34 @@ +validate($input); + + $storageProvider->profile = $input['name']; + $storageProvider->project_id = isset($input['global']) && $input['global'] ? null : $user->current_project_id; + + $storageProvider->save(); + } + + /** + * @throws ValidationException + */ + private function validate(array $input): void + { + $rules = [ + 'name' => [ + 'required', + ], + ]; + Validator::make($input, $rules)->validate(); + } +} diff --git a/app/Http/Controllers/SSHKeyController.php b/app/Http/Controllers/SSHKeyController.php index c576ebde..28d0679b 100644 --- a/app/Http/Controllers/SSHKeyController.php +++ b/app/Http/Controllers/SSHKeyController.php @@ -29,7 +29,7 @@ public function store(Server $server, Request $request): HtmxResponse { $this->authorize('manage', $server); - /** @var \App\Models\SshKey $key */ + /** @var SshKey $key */ $key = app(CreateSshKey::class)->create( $request->user(), $request->input() diff --git a/app/Http/Controllers/ServerController.php b/app/Http/Controllers/ServerController.php index f6bc4aa7..b22a0252 100644 --- a/app/Http/Controllers/ServerController.php +++ b/app/Http/Controllers/ServerController.php @@ -35,7 +35,9 @@ public function create(Request $request): View $this->authorize('create', [Server::class, $user->currentProject]); $provider = $request->query('provider', old('provider', \App\Enums\ServerProvider::CUSTOM)); - $serverProviders = ServerProvider::query()->where('provider', $provider)->get(); + $serverProviders = ServerProvider::getByProjectId(auth()->user()->current_project_id) + ->where('provider', $provider) + ->get(); return view('servers.create', [ 'serverProviders' => $serverProviders, diff --git a/app/Http/Controllers/Settings/NotificationChannelController.php b/app/Http/Controllers/Settings/NotificationChannelController.php index c007c4f4..764790af 100644 --- a/app/Http/Controllers/Settings/NotificationChannelController.php +++ b/app/Http/Controllers/Settings/NotificationChannelController.php @@ -3,6 +3,7 @@ namespace App\Http\Controllers\Settings; use App\Actions\NotificationChannels\AddChannel; +use App\Actions\NotificationChannels\EditChannel; use App\Facades\Toast; use App\Helpers\HtmxResponse; use App\Http\Controllers\Controller; @@ -13,11 +14,17 @@ class NotificationChannelController extends Controller { - public function index(): View + public function index(Request $request): View { - return view('settings.notification-channels.index', [ - 'channels' => NotificationChannel::query()->latest()->get(), - ]); + $data = [ + 'channels' => NotificationChannel::getByProjectId(auth()->user()->current_project_id)->get(), + ]; + + if ($request->has('edit')) { + $data['editChannel'] = NotificationChannel::find($request->input('edit')); + } + + return view('settings.notification-channels.index', $data); } public function add(Request $request): HtmxResponse @@ -32,6 +39,19 @@ public function add(Request $request): HtmxResponse return htmx()->redirect(route('settings.notification-channels')); } + public function update(NotificationChannel $notificationChannel, Request $request): HtmxResponse + { + app(EditChannel::class)->edit( + $notificationChannel, + $request->user(), + $request->input(), + ); + + Toast::success('Channel updated.'); + + return htmx()->redirect(route('settings.notification-channels')); + } + public function delete(int $id): RedirectResponse { $channel = NotificationChannel::query()->findOrFail($id); diff --git a/app/Http/Controllers/Settings/ProjectController.php b/app/Http/Controllers/Settings/ProjectController.php index 4f15b2e1..207ca284 100644 --- a/app/Http/Controllers/Settings/ProjectController.php +++ b/app/Http/Controllers/Settings/ProjectController.php @@ -68,7 +68,7 @@ public function delete(Project $project): RedirectResponse return back(); } - public function switch($projectId): RedirectResponse + public function switch(Request $request, $projectId): RedirectResponse { /** @var User $user */ $user = auth()->user(); @@ -81,6 +81,11 @@ public function switch($projectId): RedirectResponse $user->current_project_id = $project->id; $user->save(); + // check if the referer is settings/* + if (str_contains($request->headers->get('referer'), 'settings')) { + return redirect()->to($request->headers->get('referer')); + } + return redirect()->route('servers'); } } diff --git a/app/Http/Controllers/Settings/ServerProviderController.php b/app/Http/Controllers/Settings/ServerProviderController.php index 9f738a56..68846d76 100644 --- a/app/Http/Controllers/Settings/ServerProviderController.php +++ b/app/Http/Controllers/Settings/ServerProviderController.php @@ -4,6 +4,7 @@ use App\Actions\ServerProvider\CreateServerProvider; use App\Actions\ServerProvider\DeleteServerProvider; +use App\Actions\ServerProvider\EditServerProvider; use App\Facades\Toast; use App\Helpers\HtmxResponse; use App\Http\Controllers\Controller; @@ -14,11 +15,17 @@ class ServerProviderController extends Controller { - public function index(): View + public function index(Request $request): View { - return view('settings.server-providers.index', [ - 'providers' => auth()->user()->serverProviders, - ]); + $data = [ + 'providers' => ServerProvider::getByProjectId(auth()->user()->current_project_id)->get(), + ]; + + if ($request->has('edit')) { + $data['editProvider'] = ServerProvider::find($request->input('edit')); + } + + return view('settings.server-providers.index', $data); } public function connect(Request $request): HtmxResponse @@ -33,6 +40,19 @@ public function connect(Request $request): HtmxResponse return htmx()->redirect(route('settings.server-providers')); } + public function update(ServerProvider $serverProvider, Request $request): HtmxResponse + { + app(EditServerProvider::class)->edit( + $serverProvider, + $request->user(), + $request->input(), + ); + + Toast::success('Provider updated.'); + + return htmx()->redirect(route('settings.server-providers')); + } + public function delete(ServerProvider $serverProvider): RedirectResponse { try { diff --git a/app/Http/Controllers/Settings/SourceControlController.php b/app/Http/Controllers/Settings/SourceControlController.php index 55a9ea9e..c3e13322 100644 --- a/app/Http/Controllers/Settings/SourceControlController.php +++ b/app/Http/Controllers/Settings/SourceControlController.php @@ -18,7 +18,7 @@ class SourceControlController extends Controller public function index(Request $request): View { $data = [ - 'sourceControls' => SourceControl::getByCurrentProject(), + 'sourceControls' => SourceControl::getByProjectId(auth()->user()->current_project_id)->get(), ]; if ($request->has('edit')) { diff --git a/app/Http/Controllers/Settings/StorageProviderController.php b/app/Http/Controllers/Settings/StorageProviderController.php index fc5b12b9..a38b77c8 100644 --- a/app/Http/Controllers/Settings/StorageProviderController.php +++ b/app/Http/Controllers/Settings/StorageProviderController.php @@ -4,6 +4,7 @@ use App\Actions\StorageProvider\CreateStorageProvider; use App\Actions\StorageProvider\DeleteStorageProvider; +use App\Actions\StorageProvider\EditStorageProvider; use App\Facades\Toast; use App\Helpers\HtmxResponse; use App\Http\Controllers\Controller; @@ -14,11 +15,17 @@ class StorageProviderController extends Controller { - public function index(): View + public function index(Request $request): View { - return view('settings.storage-providers.index', [ - 'providers' => auth()->user()->storageProviders, - ]); + $data = [ + 'providers' => StorageProvider::getByProjectId(auth()->user()->current_project_id)->get(), + ]; + + if ($request->has('edit')) { + $data['editProvider'] = StorageProvider::find($request->input('edit')); + } + + return view('settings.storage-providers.index', $data); } public function connect(Request $request): HtmxResponse @@ -33,6 +40,19 @@ public function connect(Request $request): HtmxResponse return htmx()->redirect(route('settings.storage-providers')); } + public function update(StorageProvider $storageProvider, Request $request): HtmxResponse + { + app(EditStorageProvider::class)->edit( + $storageProvider, + $request->user(), + $request->input(), + ); + + Toast::success('Provider updated.'); + + return htmx()->redirect(route('settings.storage-providers')); + } + public function delete(StorageProvider $storageProvider): RedirectResponse { try { diff --git a/app/Models/NotificationChannel.php b/app/Models/NotificationChannel.php index 803cc07c..df4259da 100644 --- a/app/Models/NotificationChannel.php +++ b/app/Models/NotificationChannel.php @@ -3,7 +3,9 @@ namespace App\Models; use App\Notifications\NotificationInterface; +use Illuminate\Database\Eloquent\Builder; use Illuminate\Database\Eloquent\Factories\HasFactory; +use Illuminate\Database\Eloquent\Relations\BelongsTo; use Illuminate\Notifications\Notifiable; /** @@ -12,6 +14,7 @@ * @property array data * @property string label * @property bool connected + * @property int $project_id */ class NotificationChannel extends AbstractModel { @@ -24,6 +27,7 @@ class NotificationChannel extends AbstractModel 'data', 'connected', 'is_default', + 'project_id', ]; protected $casts = [ @@ -47,4 +51,16 @@ public static function notifyAll(NotificationInterface $notification): void $channel->notify($notification); } } + + public function project(): BelongsTo + { + return $this->belongsTo(Project::class); + } + + public static function getByProjectId(int $projectId): Builder + { + return self::query() + ->where('project_id', $projectId) + ->orWhereNull('project_id'); + } } diff --git a/app/Models/ServerProvider.php b/app/Models/ServerProvider.php index 130c39df..80a47ea7 100644 --- a/app/Models/ServerProvider.php +++ b/app/Models/ServerProvider.php @@ -2,6 +2,7 @@ namespace App\Models; +use Illuminate\Database\Eloquent\Builder; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Relations\BelongsTo; use Illuminate\Database\Eloquent\Relations\HasMany; @@ -13,6 +14,7 @@ * @property array $credentials * @property bool $connected * @property User $user + * @property ?int $project_id */ class ServerProvider extends AbstractModel { @@ -24,12 +26,14 @@ class ServerProvider extends AbstractModel 'provider', 'credentials', 'connected', + 'project_id', ]; protected $casts = [ 'user_id' => 'integer', 'credentials' => 'encrypted:array', 'connected' => 'boolean', + 'project_id' => 'integer', ]; public function user(): BelongsTo @@ -46,4 +50,16 @@ public function servers(): HasMany { return $this->hasMany(Server::class, 'provider_id'); } + + public function project(): BelongsTo + { + return $this->belongsTo(Project::class); + } + + public static function getByProjectId(int $projectId): Builder + { + return self::query() + ->where('project_id', $projectId) + ->orWhereNull('project_id'); + } } diff --git a/app/Models/SourceControl.php b/app/Models/SourceControl.php index 8f4c4c7d..617a4604 100755 --- a/app/Models/SourceControl.php +++ b/app/Models/SourceControl.php @@ -3,7 +3,7 @@ namespace App\Models; use App\SourceControlProviders\SourceControlProvider; -use Illuminate\Database\Eloquent\Collection; +use Illuminate\Database\Eloquent\Builder; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Relations\BelongsTo; use Illuminate\Database\Eloquent\Relations\HasMany; @@ -57,10 +57,10 @@ public function project(): BelongsTo return $this->belongsTo(Project::class); } - public static function getByCurrentProject(): Collection + public static function getByProjectId(int $projectId): Builder { return self::query() - ->where('project_id', auth()->user()->current_project_id) - ->orWhereNull('project_id')->get(); + ->where('project_id', $projectId) + ->orWhereNull('project_id'); } } diff --git a/app/Models/StorageProvider.php b/app/Models/StorageProvider.php index 7fe9b4c1..a45d650a 100644 --- a/app/Models/StorageProvider.php +++ b/app/Models/StorageProvider.php @@ -2,6 +2,7 @@ namespace App\Models; +use Illuminate\Database\Eloquent\Builder; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Relations\BelongsTo; use Illuminate\Database\Eloquent\Relations\HasMany; @@ -12,6 +13,7 @@ * @property string $provider * @property array $credentials * @property User $user + * @property int $project_id */ class StorageProvider extends AbstractModel { @@ -22,11 +24,13 @@ class StorageProvider extends AbstractModel 'profile', 'provider', 'credentials', + 'project_id', ]; protected $casts = [ 'user_id' => 'integer', 'credentials' => 'encrypted:array', + 'project_id' => 'integer', ]; public function user(): BelongsTo @@ -45,4 +49,16 @@ public function backups(): HasMany { return $this->hasMany(Backup::class, 'storage_id'); } + + public function project(): BelongsTo + { + return $this->belongsTo(Project::class); + } + + public static function getByProjectId(int $projectId): Builder + { + return self::query() + ->where('project_id', $projectId) + ->orWhereNull('project_id'); + } } diff --git a/app/Models/User.php b/app/Models/User.php index fe16eadb..f2684310 100755 --- a/app/Models/User.php +++ b/app/Models/User.php @@ -106,24 +106,6 @@ public function storageProvider(string $provider): HasOne return $this->hasOne(StorageProvider::class)->where('provider', $provider); } - public function connectedStorageProviders(): HasMany - { - return $this->storageProviders()->where('connected', true); - } - - public function connectedSourceControls(): array - { - $connectedSourceControls = []; - $sourceControls = $this->sourceControls() - ->where('connected', 1) - ->get(['provider']); - foreach ($sourceControls as $sourceControl) { - $connectedSourceControls[] = $sourceControl->provider; - } - - return $connectedSourceControls; - } - public function projects(): BelongsToMany { return $this->belongsToMany(Project::class, 'user_project')->withTimestamps(); @@ -134,11 +116,6 @@ public function currentProject(): HasOne return $this->HasOne(Project::class, 'id', 'current_project_id'); } - public function isMemberOfProject(Project $project): bool - { - return $project->user_id === $this->id; - } - public function createDefaultProject(): Project { $project = $this->projects()->first(); diff --git a/database/migrations/2024_06_24_211155_add_project_id_to_notification_channels_table.php b/database/migrations/2024_06_24_211155_add_project_id_to_notification_channels_table.php new file mode 100644 index 00000000..fedba8c2 --- /dev/null +++ b/database/migrations/2024_06_24_211155_add_project_id_to_notification_channels_table.php @@ -0,0 +1,22 @@ +unsignedBigInteger('project_id')->nullable(); + }); + } + + public function down(): void + { + Schema::table('notification_channels', function (Blueprint $table) { + $table->dropColumn('project_id'); + }); + } +}; diff --git a/database/migrations/2024_06_25_202655_add_project_id_to_storage_providers_table.php b/database/migrations/2024_06_25_202655_add_project_id_to_storage_providers_table.php new file mode 100644 index 00000000..1eaeb0a4 --- /dev/null +++ b/database/migrations/2024_06_25_202655_add_project_id_to_storage_providers_table.php @@ -0,0 +1,22 @@ +unsignedBigInteger('project_id')->nullable(); + }); + } + + public function down(): void + { + Schema::table('storage_providers', function (Blueprint $table) { + $table->dropColumn('project_id'); + }); + } +}; diff --git a/database/migrations/2024_06_25_212812_add_project_id_to_server_providers_table.php b/database/migrations/2024_06_25_212812_add_project_id_to_server_providers_table.php new file mode 100644 index 00000000..71d04be0 --- /dev/null +++ b/database/migrations/2024_06_25_212812_add_project_id_to_server_providers_table.php @@ -0,0 +1,22 @@ +unsignedBigInteger('project_id')->nullable(); + }); + } + + public function down(): void + { + Schema::table('server_providers', function (Blueprint $table) { + $table->dropColumn('project_id'); + }); + } +}; diff --git a/resources/views/application/deployment-script.blade.php b/resources/views/application/deployment-script.blade.php index 4876449d..77cf5cc6 100644 --- a/resources/views/application/deployment-script.blade.php +++ b/resources/views/application/deployment-script.blade.php @@ -16,7 +16,7 @@ class="p-6"
- + {{ old("script", $site->deploymentScript?->content) }} @error("script") diff --git a/resources/views/application/env.blade.php b/resources/views/application/env.blade.php index b9c55430..a553a49a 100644 --- a/resources/views/application/env.blade.php +++ b/resources/views/application/env.blade.php @@ -21,7 +21,7 @@ class="mt-6" >
- + {{ old("env", session()->get("env") ?? "Loading...") }}
diff --git a/resources/views/databases/partials/create-backup-modal.blade.php b/resources/views/databases/partials/create-backup-modal.blade.php index 6fc1782a..da56a76c 100644 --- a/resources/views/databases/partials/create-backup-modal.blade.php +++ b/resources/views/databases/partials/create-backup-modal.blade.php @@ -35,7 +35,7 @@ class="p-6"
- @foreach (auth()->user()->storageProviders as $st) + @foreach (\App\Models\StorageProvider::getByProjectId(auth()->user()->current_project_id)->get() as $st) diff --git a/resources/views/php/partials/update-php-ini.blade.php b/resources/views/php/partials/update-php-ini.blade.php index 3e9eba91..60bd45bc 100644 --- a/resources/views/php/partials/update-php-ini.blade.php +++ b/resources/views/php/partials/update-php-ini.blade.php @@ -14,7 +14,7 @@ class="p-6"
- + {{ old("ini", session()->get("ini")) }} @error("ini") diff --git a/resources/views/scripts/partials/fields/content.blade.php b/resources/views/scripts/partials/fields/content.blade.php index 84a627c2..578d51da 100644 --- a/resources/views/scripts/partials/fields/content.blade.php +++ b/resources/views/scripts/partials/fields/content.blade.php @@ -1,5 +1,5 @@ - + {{ $value }} @error("content") diff --git a/resources/views/settings/notification-channels/partials/add-channel.blade.php b/resources/views/settings/notification-channels/partials/add-channel.blade.php index ab413c3c..e3a7b0b1 100644 --- a/resources/views/settings/notification-channels/partials/add-channel.blade.php +++ b/resources/views/settings/notification-channels/partials/add-channel.blade.php @@ -100,6 +100,15 @@ class="mt-1 w-full" @enderror
+
+ + Is Global (Accessible in all projects) + + @error("global") + + @enderror +
+
{{ __("Cancel") }} diff --git a/resources/views/settings/notification-channels/partials/channels-list.blade.php b/resources/views/settings/notification-channels/partials/channels-list.blade.php index db1b363a..5ca02785 100644 --- a/resources/views/settings/notification-channels/partials/channels-list.blade.php +++ b/resources/views/settings/notification-channels/partials/channels-list.blade.php @@ -16,13 +16,29 @@ @include("settings.notification-channels.partials.icons." . $channel->provider)
- {{ $channel->label }} +
+ {{ $channel->label }} + @if (! $channel->project_id) + GLOBAL + @endif +
+ + + @@ -34,6 +50,12 @@ @endforeach @include("settings.notification-channels.partials.delete-channel") + +
+ @if (isset($editChannel)) + @include("settings.notification-channels.partials.edit-notification-channel", ["notificationChannel" => $editChannel]) + @endif +
@else
diff --git a/resources/views/settings/notification-channels/partials/edit-notification-channel.blade.php b/resources/views/settings/notification-channels/partials/edit-notification-channel.blade.php new file mode 100644 index 00000000..9376e4ed --- /dev/null +++ b/resources/views/settings/notification-channels/partials/edit-notification-channel.blade.php @@ -0,0 +1,59 @@ + +
$notificationChannel->id]) }}" + hx-swap="outerHTML" + hx-select="#edit-notification-channel-form" + hx-ext="disable-element" + hx-disable-element="#btn-edit-notification-channel" + class="p-6" + > + @csrf + +

+ {{ __("Edit Channel") }} +

+ +
+ + + @error("label") + + @enderror +
+ +
+ + Is Global (Accessible in all projects) + + @error("global") + + @enderror +
+ +
+ + {{ __("Cancel") }} + + + + {{ __("Save") }} + +
+
+
diff --git a/resources/views/settings/server-providers/partials/connect-provider.blade.php b/resources/views/settings/server-providers/partials/connect-provider.blade.php index 012d6168..60bc6ec3 100644 --- a/resources/views/settings/server-providers/partials/connect-provider.blade.php +++ b/resources/views/settings/server-providers/partials/connect-provider.blade.php @@ -83,6 +83,15 @@ class="mt-1 w-full" @enderror
+
+ + Is Global (Accessible in all projects) + + @error("global") + + @enderror +
+
{{ __("Cancel") }} diff --git a/resources/views/settings/server-providers/partials/edit-provider.blade.php b/resources/views/settings/server-providers/partials/edit-provider.blade.php new file mode 100644 index 00000000..5ec02672 --- /dev/null +++ b/resources/views/settings/server-providers/partials/edit-provider.blade.php @@ -0,0 +1,59 @@ + +
$serverProvider->id]) }}" + hx-swap="outerHTML" + hx-select="#edit-server-provider-form" + hx-ext="disable-element" + hx-disable-element="#btn-edit-server-provider" + class="p-6" + > + @csrf + +

+ {{ __("Edit Provider") }} +

+ +
+ + + @error("name") + + @enderror +
+ +
+ + Is Global (Accessible in all projects) + + @error("global") + + @enderror +
+ +
+ + {{ __("Cancel") }} + + + + {{ __("Save") }} + +
+
+
diff --git a/resources/views/settings/server-providers/partials/providers-list.blade.php b/resources/views/settings/server-providers/partials/providers-list.blade.php index d02d3de9..0bae5403 100644 --- a/resources/views/settings/server-providers/partials/providers-list.blade.php +++ b/resources/views/settings/server-providers/partials/providers-list.blade.php @@ -18,13 +18,29 @@ class="h-10 w-10" />
- {{ $provider->profile }} +
+ {{ $provider->profile }} + @if (! $provider->project_id) + GLOBAL + @endif +
+ + + @@ -36,6 +52,12 @@ class="h-10 w-10" @endforeach @include("settings.server-providers.partials.delete-provider") + +
+ @if (isset($editProvider)) + @include("settings.server-providers.partials.edit-provider", ["serverProvider" => $editProvider]) + @endif +
@else
diff --git a/resources/views/settings/source-controls/partials/edit-source-control.blade.php b/resources/views/settings/source-controls/partials/edit-source-control.blade.php index e927255a..959b6ee8 100644 --- a/resources/views/settings/source-controls/partials/edit-source-control.blade.php +++ b/resources/views/settings/source-controls/partials/edit-source-control.blade.php @@ -109,7 +109,7 @@ class="text-primary-500"
@endif +
+ + Is Global (Accessible in all projects) + + @error("global") + + @enderror +
+
{{ __("Cancel") }} diff --git a/resources/views/settings/storage-providers/partials/edit-provider.blade.php b/resources/views/settings/storage-providers/partials/edit-provider.blade.php new file mode 100644 index 00000000..6ae8b56a --- /dev/null +++ b/resources/views/settings/storage-providers/partials/edit-provider.blade.php @@ -0,0 +1,59 @@ + +
$storageProvider->id]) }}" + hx-swap="outerHTML" + hx-select="#edit-storage-provider-form" + hx-ext="disable-element" + hx-disable-element="#btn-edit-storage-provider" + class="p-6" + > + @csrf + +

+ {{ __("Edit Provider") }} +

+ +
+ + + @error("name") + + @enderror +
+ +
+ + Is Global (Accessible in all projects) + + @error("global") + + @enderror +
+ +
+ + {{ __("Cancel") }} + + + + {{ __("Save") }} + +
+
+
diff --git a/resources/views/settings/storage-providers/partials/providers-list.blade.php b/resources/views/settings/storage-providers/partials/providers-list.blade.php index 4ce2facf..0b817268 100644 --- a/resources/views/settings/storage-providers/partials/providers-list.blade.php +++ b/resources/views/settings/storage-providers/partials/providers-list.blade.php @@ -18,13 +18,29 @@ class="h-10 w-10" />
- {{ $provider->profile }} +
+ {{ $provider->profile }} + @if (! $provider->project_id) + GLOBAL + @endif +
+ + + @@ -36,6 +52,12 @@ class="h-10 w-10" @endforeach @include("settings.storage-providers.partials.delete-storage-provider") + +
+ @if (isset($editProvider)) + @include("settings.storage-providers.partials.edit-provider", ["storageProvider" => $editProvider]) + @endif +
@else
diff --git a/resources/views/site-settings/partials/update-v-host.blade.php b/resources/views/site-settings/partials/update-v-host.blade.php index 4b30a0f0..e495e50c 100644 --- a/resources/views/site-settings/partials/update-v-host.blade.php +++ b/resources/views/site-settings/partials/update-v-host.blade.php @@ -22,7 +22,7 @@ class="space-y-6" hx-swap="outerHTML" >
- + {{ session()->has("vhost") ? session()->get("vhost") : "Loading..." }}
diff --git a/resources/views/sites/partials/create/fields/source-control.blade.php b/resources/views/sites/partials/create/fields/source-control.blade.php index 313f4327..27f74c1d 100644 --- a/resources/views/sites/partials/create/fields/source-control.blade.php +++ b/resources/views/sites/partials/create/fields/source-control.blade.php @@ -3,7 +3,7 @@
- @foreach (\App\Models\SourceControl::getByCurrentProject() as $sourceControl) + @foreach (\App\Models\SourceControl::getByProjectId(auth()->user()->current_project_id)->get() as $sourceControl)