136 lines
3.3 KiB
PHP
136 lines
3.3 KiB
PHP
<?php
|
|
/**
|
|
* SettingRepo.php
|
|
*
|
|
* @copyright 2022 opencart.cn - All Rights Reserved
|
|
* @link http://www.guangdawangluo.com
|
|
* @author Edward Yang <yangjin@opencart.cn>
|
|
* @created 2022-06-30 16:36:40
|
|
* @modified 2022-06-30 16:36:40
|
|
*/
|
|
|
|
namespace Beike\Repositories;
|
|
|
|
use Carbon\Carbon;
|
|
use Beike\Models\Setting;
|
|
|
|
class SettingRepo
|
|
{
|
|
/**
|
|
* 按照类型分组获取设置
|
|
*/
|
|
public static function getGroupedSettings(): array
|
|
{
|
|
$settings = Setting::all(['type', 'space', 'name', 'value', 'json']);
|
|
|
|
$result = [];
|
|
foreach ($settings as $setting) {
|
|
$type = $setting->type;
|
|
if (!in_array($type, Setting::TYPES)) {
|
|
continue;
|
|
}
|
|
|
|
$space = $setting->space;
|
|
$name = $setting->name;
|
|
$value = $setting->value;
|
|
if ($setting->json) {
|
|
$result[$type][$space][$name] = json_decode($value, true);
|
|
} else {
|
|
$result[$type][$space][$name] = $value;
|
|
}
|
|
}
|
|
return $result;
|
|
}
|
|
|
|
/**
|
|
* 获取插件默认字段
|
|
*
|
|
* @return array
|
|
*/
|
|
public static function getPluginStatusColumn(): array
|
|
{
|
|
return [
|
|
'name' => 'status',
|
|
'label' => '是否开启',
|
|
'type' => 'bool',
|
|
'required' => true,
|
|
];
|
|
}
|
|
|
|
public static function getPluginColumns($pluginCode)
|
|
{
|
|
return Setting::query()
|
|
->where('type', 'plugin')
|
|
->where('space', $pluginCode)
|
|
->get()
|
|
->keyBy('name');
|
|
}
|
|
|
|
public static function getPluginStatus($pluginCode): bool
|
|
{
|
|
$status = plugin_setting("{$pluginCode}.status");
|
|
return (bool)$status;
|
|
}
|
|
|
|
public static function update($type, $code, $fields)
|
|
{
|
|
$columns = array_keys($fields);
|
|
Setting::query()
|
|
->where('type', $type)
|
|
->where('space', $code)
|
|
->whereIn('name', $columns)
|
|
->delete();
|
|
|
|
$rows = [];
|
|
foreach ($fields as $name => $value) {
|
|
$rows[] = [
|
|
'type' => $type,
|
|
'space' => $code,
|
|
'name' => $name,
|
|
'value' => (string)$value,
|
|
'json' => 0,
|
|
'created_at' => Carbon::now(),
|
|
'updated_at' => Carbon::now(),
|
|
];
|
|
}
|
|
Setting::query()->insert($rows);
|
|
}
|
|
|
|
|
|
/**
|
|
* 创建或更新单条记录
|
|
*
|
|
* @param $data
|
|
* @throws \Throwable
|
|
*/
|
|
public static function createOrUpdate($data)
|
|
{
|
|
$type = $data['type'] ?? '';
|
|
$space = $data['space'] ?? '';
|
|
$name = $data['name'] ?? '';
|
|
$value = (string)$data['value'] ?? '';
|
|
$json = (bool)$data['json'] ?? '';
|
|
|
|
$setting = Setting::query()
|
|
->where('type', $type)
|
|
->where('space', $space)
|
|
->where('name', $name)
|
|
->first();
|
|
|
|
$settingData = [
|
|
'type' => $type,
|
|
'space' => $space,
|
|
'name' => $name,
|
|
'value' => $value,
|
|
'json' => $json,
|
|
];
|
|
|
|
if (empty($setting)) {
|
|
$setting = new Setting($settingData);
|
|
$setting->saveOrFail();
|
|
} else {
|
|
$setting->update($settingData);
|
|
}
|
|
}
|
|
}
|