79fde593a9
fix: edit compose moved to dialog
54 lines
2.2 KiB
PHP
54 lines
2.2 KiB
PHP
<?php
|
|
|
|
namespace App\Models;
|
|
|
|
use Illuminate\Database\Eloquent\Factories\HasFactory;
|
|
use Illuminate\Support\Str;
|
|
|
|
class LocalFileVolume extends BaseModel
|
|
{
|
|
use HasFactory;
|
|
protected $guarded = [];
|
|
|
|
public function service()
|
|
{
|
|
return $this->morphTo('resource');
|
|
}
|
|
public function saveStorageOnServer(ServiceApplication|ServiceDatabase $service)
|
|
{
|
|
$workdir = $service->service->workdir();
|
|
$server = $service->service->server;
|
|
$commands = collect([
|
|
"mkdir -p $workdir > /dev/null 2>&1 || true",
|
|
"cd $workdir"
|
|
]);
|
|
$fileVolume = $this;
|
|
$path = Str::of(data_get($fileVolume, 'fs_path'));
|
|
$content = data_get($fileVolume, 'content');
|
|
if ($path->startsWith('.')) {
|
|
$path = $path->after('.');
|
|
$path = $workdir . $path;
|
|
}
|
|
$isFile = instant_remote_process(["test -f $path && echo OK || echo NOK"], $server);
|
|
$isDir = instant_remote_process(["test -d $path && echo OK || echo NOK"], $server);
|
|
ray($isFile);
|
|
if ($isFile == 'OK' && $fileVolume->is_directory) {
|
|
throw new \Exception("File $path is a file on the server, but you are trying to mark it as a directory. Please delete the file on the server or mark it as directory.");
|
|
} else if ($isDir == 'OK' && !$fileVolume->is_directory) {
|
|
throw new \Exception("File $path is a directory on the server, but you are trying to mark it as a file. Please delete the directory on the server or mark it as directory.");
|
|
}
|
|
if (($isFile == 'NOK' && !$fileVolume->is_directory) || $isFile == 'OK') {
|
|
$rootDir = Str::of($path)->dirname();
|
|
$commands->push("mkdir -p $rootDir > /dev/null 2>&1 || true");
|
|
$commands->push("touch $path > /dev/null 2>&1 || true");
|
|
if ($content) {
|
|
$content = base64_encode($content);
|
|
$commands->push("echo '$content' | base64 -d > $path");
|
|
}
|
|
} else if ($isDir == 'NOK' && $fileVolume->is_directory) {
|
|
$commands->push("mkdir -p $path > /dev/null 2>&1 || true");
|
|
}
|
|
return instant_remote_process($commands, $server);
|
|
}
|
|
}
|