Files

127 lines
4.6 KiB
PHP
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<?php
// +----------------------------------------------------------------------
// | YwxApp [ WE CAN DO IT JUST THINK ]
// +----------------------------------------------------------------------
// | Copyright (c) 2026-2036 http://ywxapp.cn All rights reserved.
// +----------------------------------------------------------------------
// | Author: ywxapp<admin@ywxapp.cn>
// +----------------------------------------------------------------------
declare (strict_types = 1);
namespace addon\haonav\model;
use ywxapp\model\BaseModel;
class Configure extends BaseModel
{
protected function getOptions(): array
{
// 所有的参数配置统一返回
return [
'strict' => false,
'name' => 'haonav_config',
'autoRelation' => [],
'createTime' => 'create_at',
'updateTime' => 'update_at',
'dateFormat' => 'Y-m-d H:i:s',
];
}
/**
* 读取单个配置值
* @param string $name
* @param mixed $default
* @return mixed
*/
public static function getVal(string $name, $default = '')
{
static $cache = [];
if (array_key_exists($name, $cache)) {
return $cache[$name];
}
$val = self::where('name', $name)->value('value');
$val = $val === null ? $default : $val;
$cache[$name] = $val;
return $val;
}
/**
* 读取全部配置为 name => value 数组
* @return array
*/
public static function getAll(): array
{
return self::column('value', 'name');
}
/**
* 老库结构自愈:早期 install.sql 的 config 表 id 无 PRIMARY KEY/AUTO_INCREMENT
* create() 不带 id 会报 1364 Field 'id' doesn't have a default value,此处运行时修复。
*/
protected static function ensurePk(): void
{
static $done = false;
if ($done) {
return;
}
self::ensureAutoIncrementPk('wxapp_haonav_config');
$done = true;
}
/**
* 返利配置自愈:老库安装时 install.sql 尚未含这 3 行,访问配置页时补种,
* 保证后台「返利」分组始终可配置(INSERT 幂等,按 name 判重)。
*/
public static function ensureRebateConfig(): void
{
self::ensurePk();
$defaults = [
'enable_rebate' => ['返利', '开启返利PID', '开启后,命中适用域名的链接点击将自动拼接返利PID', 'radio', '0', '1,0'],
'rebate_param' => ['返利', '返利参数名', '拼接在网址后的参数名,默认 pid', 'string', 'pid', ''],
'rebate_domains' => ['返利', '返利适用域名', '仅这些域名(含子域名)会拼接返利PID,逗号或换行分隔,如 taobao.com,jd.com,pinduoduo.com', 'textarea', 'taobao.com,jd.com,pinduoduo.com', ''],
];
foreach ($defaults as $name => $cfg) {
if (self::where('name', $name)->count() === 0) {
self::create([
'name' => $name,
'group' => $cfg[0],
'title' => $cfg[1],
'tip' => $cfg[2],
'type' => $cfg[3],
'value' => $cfg[4],
'content' => $cfg[5],
]);
}
}
}
/**
* 死链自动下线配置自愈:老库安装时 install.sql 尚未含这 3 行,访问配置页时补种,
* 保证后台「导航配置」的 task 分组始终可配置(INSERT 幂等,按 name 判重)。
*/
public static function ensureDeadlinkConfig(): void
{
self::ensurePk();
$defaults = [
'deadlink_auto' => ['task', '死链自动下线', '连续检测失败达阈值后,自动将链接置为禁用(下线)', 'radio', '0', '1,0'],
'deadlink_threshold' => ['task', '下线阈值(连续失败次数)', '达到该连续失败次数才下线,避免单次网络抖动误杀(建议2)', 'number', '2', ''],
'deadlink_recover' => ['task', '死链恢复自动上线', '链接重新可达时自动恢复为启用(仅对检测器自动下线的链接生效)', 'radio', '0', '1,0'],
];
foreach ($defaults as $name => $cfg) {
if (self::where('name', $name)->count() === 0) {
self::create([
'name' => $name,
'group' => $cfg[0],
'title' => $cfg[1],
'tip' => $cfg[2],
'type' => $cfg[3],
'value' => $cfg[4],
'content' => $cfg[5],
]);
}
}
}
}