81 lines
1.7 KiB
PHP
81 lines
1.7 KiB
PHP
<?php
|
|
|
|
namespace Akaunting\Setting\Drivers;
|
|
|
|
use Akaunting\Setting\Contracts\Driver;
|
|
use Illuminate\Filesystem\Filesystem;
|
|
|
|
class Json extends Driver
|
|
{
|
|
/**
|
|
* @param \Illuminate\Filesystem\Filesystem $files
|
|
* @param string $path
|
|
*/
|
|
public function __construct(Filesystem $files, $path = null)
|
|
{
|
|
$this->files = $files;
|
|
|
|
$this->setPath($path ?: storage_path() . '/settings.json');
|
|
}
|
|
|
|
/**
|
|
* Set the path for the JSON file.
|
|
*
|
|
* @param string $path
|
|
*/
|
|
public function setPath($path)
|
|
{
|
|
// If the file does not already exist, we will attempt to create it.
|
|
if (!$this->files->exists($path)) {
|
|
$result = $this->files->put($path, '{}');
|
|
if ($result === false) {
|
|
throw new \InvalidArgumentException("Could not write to $path.");
|
|
}
|
|
}
|
|
|
|
if (!$this->files->isWritable($path)) {
|
|
throw new \InvalidArgumentException("$path is not writable.");
|
|
}
|
|
|
|
$this->path = $path;
|
|
}
|
|
|
|
/**
|
|
* {@inheritdoc}
|
|
*/
|
|
protected function getExtraColumns()
|
|
{
|
|
return [];
|
|
}
|
|
|
|
/**
|
|
* {@inheritdoc}
|
|
*/
|
|
protected function read()
|
|
{
|
|
$contents = $this->files->get($this->path);
|
|
|
|
$data = json_decode($contents, true);
|
|
|
|
if ($data === null) {
|
|
throw new \RuntimeException("Invalid JSON in {$this->path}");
|
|
}
|
|
|
|
return $data;
|
|
}
|
|
|
|
/**
|
|
* {@inheritdoc}
|
|
*/
|
|
protected function write(array $data)
|
|
{
|
|
if ($data) {
|
|
$contents = json_encode($data);
|
|
} else {
|
|
$contents = '{}';
|
|
}
|
|
|
|
$this->files->put($this->path, $contents);
|
|
}
|
|
}
|