mirror of
https://github.com/Karaka-Management/phpOMS.git
synced 2026-01-11 17:58:41 +00:00
This commit is contained in:
parent
135f3f08e4
commit
f4ae141981
|
|
@ -15,7 +15,7 @@ declare(strict_types=1);
|
||||||
namespace phpOMS;
|
namespace phpOMS;
|
||||||
|
|
||||||
use phpOMS\Account\AccountManager;
|
use phpOMS\Account\AccountManager;
|
||||||
use phpOMS\Config\SettingsAbstract;
|
use phpOMS\Config\SettingsInterface;
|
||||||
use phpOMS\DataStorage\Cache\CachePool;
|
use phpOMS\DataStorage\Cache\CachePool;
|
||||||
use phpOMS\DataStorage\Cookie\CookieJar;
|
use phpOMS\DataStorage\Cookie\CookieJar;
|
||||||
use phpOMS\DataStorage\Database\DatabasePool;
|
use phpOMS\DataStorage\Database\DatabasePool;
|
||||||
|
|
@ -46,7 +46,7 @@ use phpOMS\Router\RouterInterface;
|
||||||
* @property \phpOMS\Module\ModuleManager $moduleManager
|
* @property \phpOMS\Module\ModuleManager $moduleManager
|
||||||
* @property \phpOMS\Dispatcher\Dispatcher $dispatcher
|
* @property \phpOMS\Dispatcher\Dispatcher $dispatcher
|
||||||
* @property \phpOMS\DataStorage\Cache\CachePool $cachePool
|
* @property \phpOMS\DataStorage\Cache\CachePool $cachePool
|
||||||
* @property \phpOMS\Config\SettingsAbstract $appSettings
|
* @property \phpOMS\Config\SettingsInterface $appSettings
|
||||||
* @property \phpOMS\Event\EventManager $eventManager
|
* @property \phpOMS\Event\EventManager $eventManager
|
||||||
* @property \phpOMS\Account\AccountManager $accountManager
|
* @property \phpOMS\Account\AccountManager $accountManager
|
||||||
* @property \phpOMS\Log\FileLogger $logger
|
* @property \phpOMS\Log\FileLogger $logger
|
||||||
|
|
@ -93,10 +93,10 @@ class ApplicationAbstract
|
||||||
/**
|
/**
|
||||||
* Application settings object.
|
* Application settings object.
|
||||||
*
|
*
|
||||||
* @var SettingsAbstract
|
* @var SettingsInterface
|
||||||
* @since 1.0.0
|
* @since 1.0.0
|
||||||
*/
|
*/
|
||||||
protected SettingsAbstract $appSettings;
|
protected SettingsInterface $appSettings;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Account manager instance.
|
* Account manager instance.
|
||||||
|
|
|
||||||
|
|
@ -1,243 +0,0 @@
|
||||||
<?php
|
|
||||||
/**
|
|
||||||
* Orange Management
|
|
||||||
*
|
|
||||||
* PHP Version 7.4
|
|
||||||
*
|
|
||||||
* @package phpOMS\Config
|
|
||||||
* @copyright Dennis Eichhorn
|
|
||||||
* @license OMS License 1.0
|
|
||||||
* @version 1.0.0
|
|
||||||
* @link https://orange-management.org
|
|
||||||
*/
|
|
||||||
declare(strict_types=1);
|
|
||||||
|
|
||||||
namespace phpOMS\Config;
|
|
||||||
|
|
||||||
use phpOMS\DataStorage\Cache\CachePool;
|
|
||||||
use phpOMS\DataStorage\Database\Connection\ConnectionAbstract;
|
|
||||||
use phpOMS\DataStorage\Database\Query\Builder;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Settings class.
|
|
||||||
*
|
|
||||||
* Responsible for providing a database/cache bound settings manger
|
|
||||||
*
|
|
||||||
* @package phpOMS\Config
|
|
||||||
* @license OMS License 1.0
|
|
||||||
* @link https://orange-management.org
|
|
||||||
* @since 1.0.0
|
|
||||||
*/
|
|
||||||
abstract class SettingsAbstract implements OptionsInterface
|
|
||||||
{
|
|
||||||
use OptionsTrait;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Cache manager (pool).
|
|
||||||
*
|
|
||||||
* @var null|CachePool
|
|
||||||
* @since 1.0.0
|
|
||||||
*/
|
|
||||||
protected ?CachePool $cache = null;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Database connection instance.
|
|
||||||
*
|
|
||||||
* @var ConnectionAbstract
|
|
||||||
* @since 1.0.0
|
|
||||||
*/
|
|
||||||
protected ConnectionAbstract $connection;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Settings table.
|
|
||||||
*
|
|
||||||
* @var null|string
|
|
||||||
* @since 1.0.0
|
|
||||||
*/
|
|
||||||
protected static ?string $table = null;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Columns to identify the value.
|
|
||||||
*
|
|
||||||
* @var string[]
|
|
||||||
* @since 1.0.0
|
|
||||||
*/
|
|
||||||
protected static array $columns = [
|
|
||||||
'id',
|
|
||||||
];
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Field where the actual value is stored.
|
|
||||||
*
|
|
||||||
* @var string
|
|
||||||
* @since 1.0.0
|
|
||||||
*/
|
|
||||||
protected string $valueField = 'option';
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Get option.
|
|
||||||
*
|
|
||||||
* Possible usage:
|
|
||||||
* - Use column key
|
|
||||||
* - Use combination of module, group, account and name without column key
|
|
||||||
*
|
|
||||||
* @param null|int|int[]|string|string[] $columns Column values for filtering
|
|
||||||
* @param null|string $name Setting name @todo consider to make this an integer?!
|
|
||||||
* @param null|string $module Module name
|
|
||||||
* @param null|int $group Group id
|
|
||||||
* @param null|int $account Account id
|
|
||||||
*
|
|
||||||
* @return mixed Option value
|
|
||||||
*
|
|
||||||
* @since 1.0.0
|
|
||||||
*/
|
|
||||||
public function get(
|
|
||||||
$columns = null,
|
|
||||||
string $name = null,
|
|
||||||
string $module = null,
|
|
||||||
int $group = null,
|
|
||||||
int $account = null
|
|
||||||
) {
|
|
||||||
$options = [];
|
|
||||||
$keys = [];
|
|
||||||
|
|
||||||
if ($columns === null) {
|
|
||||||
$key = ($name ?? '') . ':' . ($module ?? '') . ':' . ($group ?? '') . ':' . ($account ?? '');
|
|
||||||
if ($this->exists($key)) {
|
|
||||||
$options[$key] = $this->getOption($key);
|
|
||||||
|
|
||||||
return \count($options) > 1 ? $options : \reset($options);
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
if (!\is_array($columns)) {
|
|
||||||
$keys = [$columns];
|
|
||||||
} else {
|
|
||||||
$keys = [];
|
|
||||||
foreach ($columns as $key) {
|
|
||||||
$keys[] = \is_string($key) ? (int) \preg_replace('/[^0-9.]/', '', $key) : $key;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
foreach ($keys as $key) {
|
|
||||||
if ($this->exists($key)) {
|
|
||||||
$options[$key] = $this->getOption($key);
|
|
||||||
unset($keys[$key]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (empty($keys)) {
|
|
||||||
return \count($options) > 1 ? $options : \reset($options);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
try {
|
|
||||||
$dbOptions = [];
|
|
||||||
$query = new Builder($this->connection);
|
|
||||||
$query->select(...static::$columns)
|
|
||||||
->from($this->connection->prefix . static::$table);
|
|
||||||
|
|
||||||
if (!empty($columns)) {
|
|
||||||
$query->where(static::$columns[0], 'in', $keys);
|
|
||||||
} else {
|
|
||||||
if ($name !== null) {
|
|
||||||
$query->where(static::$columns['name'], '=', $name);
|
|
||||||
}
|
|
||||||
|
|
||||||
if ($module !== null) {
|
|
||||||
$query->andWhere(static::$columns['module'], '=', $module);
|
|
||||||
}
|
|
||||||
|
|
||||||
if ($group !== null) {
|
|
||||||
$query->andWhere(static::$columns['group'], '=', $group);
|
|
||||||
}
|
|
||||||
|
|
||||||
if ($account !== null) {
|
|
||||||
$query->andWhere(static::$columns['account'], '=', $account);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
$sql = $query->toSql();
|
|
||||||
|
|
||||||
$sth = $this->connection->con->prepare($sql);
|
|
||||||
$sth->execute();
|
|
||||||
|
|
||||||
$dbOptions = $sth->fetchAll(\PDO::FETCH_KEY_PAIR);
|
|
||||||
$options += $dbOptions === false ? [] : $dbOptions;
|
|
||||||
|
|
||||||
if ($dbOptions === false) {
|
|
||||||
return \count($options) > 1 ? $options : \reset($options); // @codeCoverageIgnore
|
|
||||||
}
|
|
||||||
|
|
||||||
$this->setOptions($dbOptions);
|
|
||||||
} catch (\Throwable $e) {
|
|
||||||
throw $e;
|
|
||||||
}
|
|
||||||
|
|
||||||
return \count($options) > 1 ? $options : \reset($options);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Set option by key.
|
|
||||||
*
|
|
||||||
* @param string[] $options Column values for filtering
|
|
||||||
* @param bool $store Save this Setting immediately to database
|
|
||||||
*
|
|
||||||
* @return void
|
|
||||||
*
|
|
||||||
* @since 1.0.0
|
|
||||||
*/
|
|
||||||
public function set(array $options, bool $store = false) : void
|
|
||||||
{
|
|
||||||
$this->setOptions($options);
|
|
||||||
|
|
||||||
if ($store) {
|
|
||||||
$this->connection->con->beginTransaction();
|
|
||||||
|
|
||||||
foreach ($options as $key => $option) {
|
|
||||||
if (\is_string($key)) {
|
|
||||||
$key = (int) \preg_replace('/[^0-9.]/', '', $key);
|
|
||||||
}
|
|
||||||
|
|
||||||
$query = new Builder($this->connection);
|
|
||||||
$sql = $query->update($this->connection->prefix . static::$table)
|
|
||||||
->set([static::$columns[1] => $option])
|
|
||||||
->where(static::$columns[0], '=', $key)
|
|
||||||
->toSql();
|
|
||||||
|
|
||||||
$sth = $this->connection->con->prepare($sql);
|
|
||||||
$sth->execute();
|
|
||||||
}
|
|
||||||
|
|
||||||
$this->connection->con->commit();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Save options.
|
|
||||||
*
|
|
||||||
* @return void
|
|
||||||
*
|
|
||||||
* @since 1.0.0
|
|
||||||
*/
|
|
||||||
public function save() : void
|
|
||||||
{
|
|
||||||
$this->connection->con->beginTransaction();
|
|
||||||
|
|
||||||
foreach ($this->options as $key => $option) {
|
|
||||||
if (\is_string($key)) {
|
|
||||||
$key = (int) \preg_replace('/[^0-9.]/', '', $key);
|
|
||||||
}
|
|
||||||
|
|
||||||
$query = new Builder($this->connection);
|
|
||||||
$sql = $query->update($this->connection->prefix . static::$table)
|
|
||||||
->set([static::$columns[1] => $option])
|
|
||||||
->where(static::$columns[0], '=', $key)
|
|
||||||
->toSql();
|
|
||||||
|
|
||||||
$sth = $this->connection->con->prepare($sql);
|
|
||||||
$sth->execute();
|
|
||||||
}
|
|
||||||
|
|
||||||
$this->connection->con->commit();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
85
Config/SettingsInterface.php
Normal file
85
Config/SettingsInterface.php
Normal file
|
|
@ -0,0 +1,85 @@
|
||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* Orange Management
|
||||||
|
*
|
||||||
|
* PHP Version 7.4
|
||||||
|
*
|
||||||
|
* @package phpOMS\Config
|
||||||
|
* @copyright Dennis Eichhorn
|
||||||
|
* @license OMS License 1.0
|
||||||
|
* @version 1.0.0
|
||||||
|
* @link https://orange-management.org
|
||||||
|
*/
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
|
namespace phpOMS\Config;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Options class.
|
||||||
|
*
|
||||||
|
* @package phpOMS\Config
|
||||||
|
* @license OMS License 1.0
|
||||||
|
* @link https://orange-management.org
|
||||||
|
* @since 1.0.0
|
||||||
|
*/
|
||||||
|
interface SettingsInterface extends OptionsInterface
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Get option.
|
||||||
|
*
|
||||||
|
* Possible usage:
|
||||||
|
* - Use column key
|
||||||
|
* - Use combination of module, group, account and name without column key
|
||||||
|
*
|
||||||
|
* @param null|int|int[]|string|string[] $ids Ids
|
||||||
|
* @param null|string|string[] $names Setting name
|
||||||
|
* @param null|string $module Module name
|
||||||
|
* @param null|int $group Group id
|
||||||
|
* @param null|int $account Account id
|
||||||
|
*
|
||||||
|
* @return mixed Option value
|
||||||
|
*
|
||||||
|
* @since 1.0.0
|
||||||
|
*/
|
||||||
|
public function get(
|
||||||
|
$ids = null,
|
||||||
|
$names = null,
|
||||||
|
string $module = null,
|
||||||
|
int $group = null,
|
||||||
|
int $account = null
|
||||||
|
);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set option by key.
|
||||||
|
*
|
||||||
|
* @param array<int, array{id?:?int, name?:?string, content:string, module?:?string, group?:?int, account?:?int}> $options Column values for filtering
|
||||||
|
* @param bool $store Save this Setting immediately to database
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*
|
||||||
|
* @since 1.0.0
|
||||||
|
*/
|
||||||
|
public function set(array $options, bool $store = false) : void;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Save options.
|
||||||
|
*
|
||||||
|
* @param array<int, array{id?:?int, name?:?string, content:string, module?:?string, group?:?int, account?:?int}> $options Options to save
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*
|
||||||
|
* @since 1.0.0
|
||||||
|
*/
|
||||||
|
public function save(array $options = []) : void;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create option.
|
||||||
|
*
|
||||||
|
* @param array $options Options to save
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*
|
||||||
|
* @since 1.0.0
|
||||||
|
*/
|
||||||
|
public function create(array $options = []) : void;
|
||||||
|
}
|
||||||
|
|
@ -96,7 +96,7 @@ class Builder extends BuilderAbstract
|
||||||
/**
|
/**
|
||||||
* Into columns.
|
* Into columns.
|
||||||
*
|
*
|
||||||
* @var array
|
* @var array<int, mixed>
|
||||||
* @since 1.0.0
|
* @since 1.0.0
|
||||||
*/
|
*/
|
||||||
public array $values = [];
|
public array $values = [];
|
||||||
|
|
@ -888,7 +888,7 @@ class Builder extends BuilderAbstract
|
||||||
|
|
||||||
$this->type = QueryType::INSERT;
|
$this->type = QueryType::INSERT;
|
||||||
|
|
||||||
foreach ($columns as $key => $column) {
|
foreach ($columns as $column) {
|
||||||
$this->inserts[] = $column;
|
$this->inserts[] = $column;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -951,10 +951,12 @@ class Builder extends BuilderAbstract
|
||||||
public function value($value) : self
|
public function value($value) : self
|
||||||
{
|
{
|
||||||
\end($this->values);
|
\end($this->values);
|
||||||
$key = \key($this->values);
|
|
||||||
|
$key = \key($this->values);
|
||||||
|
$key ??= 0;
|
||||||
|
|
||||||
if (\is_array($value)) {
|
if (\is_array($value)) {
|
||||||
$this->values[$key] = $value;
|
$this->values[$key + 1] = $value;
|
||||||
} else {
|
} else {
|
||||||
$this->values[$key][] = $value;
|
$this->values[$key][] = $value;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user