allow vendord
All checks were successful
Build, Push and Deploy / build-and-push (push) Successful in 3m3s
Gitea Actions Demo / Explore-Gitea-Actions (push) Successful in 16s
Build, Push and Deploy / deploy-staging (push) Successful in 32s
Build, Push and Deploy / deploy-production (push) Has been skipped
Build, Push and Deploy / cleanup (push) Successful in 1s
All checks were successful
Build, Push and Deploy / build-and-push (push) Successful in 3m3s
Gitea Actions Demo / Explore-Gitea-Actions (push) Successful in 16s
Build, Push and Deploy / deploy-staging (push) Successful in 32s
Build, Push and Deploy / deploy-production (push) Has been skipped
Build, Push and Deploy / cleanup (push) Successful in 1s
This commit is contained in:
158
vendor/spatie/ignition/src/Config/FileConfigManager.php
vendored
Normal file
158
vendor/spatie/ignition/src/Config/FileConfigManager.php
vendored
Normal file
@@ -0,0 +1,158 @@
|
||||
<?php
|
||||
|
||||
namespace Spatie\Ignition\Config;
|
||||
|
||||
use Spatie\Ignition\Contracts\ConfigManager;
|
||||
use Throwable;
|
||||
|
||||
class FileConfigManager implements ConfigManager
|
||||
{
|
||||
private const SETTINGS_FILE_NAME = '.ignition.json';
|
||||
|
||||
private string $path;
|
||||
|
||||
private string $file;
|
||||
|
||||
public function __construct(string $path = '')
|
||||
{
|
||||
$this->path = $this->initPath($path);
|
||||
$this->file = $this->initFile();
|
||||
}
|
||||
|
||||
protected function initPath(string $path): string
|
||||
{
|
||||
$path = $this->retrievePath($path);
|
||||
|
||||
if (! $this->isValidWritablePath($path)) {
|
||||
return '';
|
||||
}
|
||||
|
||||
return $this->preparePath($path);
|
||||
}
|
||||
|
||||
protected function retrievePath(string $path): string
|
||||
{
|
||||
if ($path !== '') {
|
||||
return $path;
|
||||
}
|
||||
|
||||
return $this->initPathFromEnvironment();
|
||||
}
|
||||
|
||||
protected function isValidWritablePath(string $path): bool
|
||||
{
|
||||
return @file_exists($path) && @is_writable($path);
|
||||
}
|
||||
|
||||
protected function preparePath(string $path): string
|
||||
{
|
||||
return rtrim($path, DIRECTORY_SEPARATOR);
|
||||
}
|
||||
|
||||
protected function initPathFromEnvironment(): string
|
||||
{
|
||||
if (! empty($_SERVER['HOMEDRIVE']) && ! empty($_SERVER['HOMEPATH'])) {
|
||||
return $_SERVER['HOMEDRIVE'] . $_SERVER['HOMEPATH'];
|
||||
}
|
||||
|
||||
if (! empty(getenv('HOME'))) {
|
||||
return getenv('HOME');
|
||||
}
|
||||
|
||||
return '';
|
||||
}
|
||||
|
||||
protected function initFile(): string
|
||||
{
|
||||
return $this->path . DIRECTORY_SEPARATOR . self::SETTINGS_FILE_NAME;
|
||||
}
|
||||
|
||||
/** {@inheritDoc} */
|
||||
public function load(): array
|
||||
{
|
||||
return $this->readFromFile();
|
||||
}
|
||||
|
||||
/** @return array<string, mixed> */
|
||||
protected function readFromFile(): array
|
||||
{
|
||||
if (! $this->isValidFile()) {
|
||||
return [];
|
||||
}
|
||||
|
||||
$content = (string)file_get_contents($this->file);
|
||||
$settings = json_decode($content, true) ?? [];
|
||||
|
||||
return $settings;
|
||||
}
|
||||
|
||||
protected function isValidFile(): bool
|
||||
{
|
||||
return $this->isValidPath() &&
|
||||
@file_exists($this->file) &&
|
||||
@is_writable($this->file);
|
||||
}
|
||||
|
||||
protected function isValidPath(): bool
|
||||
{
|
||||
return trim($this->path) !== '';
|
||||
}
|
||||
|
||||
/** {@inheritDoc} */
|
||||
public function save(array $options): bool
|
||||
{
|
||||
if (! $this->createFile()) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return $this->saveToFile($options);
|
||||
}
|
||||
|
||||
protected function createFile(): bool
|
||||
{
|
||||
if (! $this->isValidPath()) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (@file_exists($this->file)) {
|
||||
return true;
|
||||
}
|
||||
|
||||
return (file_put_contents($this->file, '') !== false);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param array<string, mixed> $options
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
protected function saveToFile(array $options): bool
|
||||
{
|
||||
try {
|
||||
$content = json_encode($options, JSON_THROW_ON_ERROR);
|
||||
} catch (Throwable) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return $this->writeToFile($content);
|
||||
}
|
||||
|
||||
protected function writeToFile(string $content): bool
|
||||
{
|
||||
if (! $this->isValidFile()) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return (file_put_contents($this->file, $content) !== false);
|
||||
}
|
||||
|
||||
/** {@inheritDoc} */
|
||||
public function getPersistentInfo(): array
|
||||
{
|
||||
return [
|
||||
'name' => self::SETTINGS_FILE_NAME,
|
||||
'path' => $this->path,
|
||||
'file' => $this->file,
|
||||
];
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user