- 18 张公共表更名(addon/attachment/configure/links/spider_log/spider_stat/sms/notice/ad/task/prop/medal/help/card -> common_*,member_wallets->member_wallet,score_rule/score_log -> member_*,addon_config->common_addonconf),模型全部对齐新表名,Db 直引用清零 - Attachment 模型补 表名绑定,修复富文本上传查 wxapp_attachment 1146 隐患 - install.sql + 迁移 SQL:backend_admin/backend_role delete_at 默认 0,修复软删除(NULL != 0)误过滤导致后台菜单为空 - AppService::boot() 支持插件 info.php 声明 commands 自动注册插件命令(psr-4 自动加载,坏类名自动跳过) - 各插件(haonav/mqttbroker/wxchat/articles/blog/forum 等)字段与配置同步调整 - 框架版本 1.1.0 -> 1.1.1
75 lines
2.0 KiB
PHP
75 lines
2.0 KiB
PHP
<?php
|
||
|
||
declare(strict_types=1);
|
||
|
||
namespace addon\download;
|
||
|
||
use think\facade\Db;
|
||
use ywxapp\AddonBase;
|
||
use ywxapp\model\BaseModel;
|
||
|
||
/**
|
||
* 下载站插件
|
||
*
|
||
* 安装由框架自动导入 install.sql 建表(wxapp_download_category / resource);
|
||
* 卸载按统一前缀清理全部表;升级时确保表存在(install.sql 幂等建表)。
|
||
*/
|
||
class Addon extends AddonBase
|
||
{
|
||
public function install(): bool
|
||
{
|
||
return true;
|
||
}
|
||
|
||
/**
|
||
* 卸载钩子:清理本插件全部表(与 install.sql 表名前缀严格对齐)。
|
||
*/
|
||
public function uninstall(): bool
|
||
{
|
||
$prefix = 'wxapp_download_';
|
||
$tables = [
|
||
'category',
|
||
'resource',
|
||
];
|
||
foreach ($tables as $t) {
|
||
try {
|
||
Db::execute("DROP TABLE IF EXISTS `{$prefix}{$t}`");
|
||
} catch (\Exception $e) {
|
||
// 忽略
|
||
}
|
||
}
|
||
return true;
|
||
}
|
||
|
||
/**
|
||
* 升级时确保全部表存在(读 install.sql,CREATE TABLE IF NOT EXISTS 幂等建表)。
|
||
* 单一事实源 = install.sql,避免复制 DDL 导致漂移。
|
||
*/
|
||
private function ensureTablesFromInstallSql(): void
|
||
{
|
||
$sqlFile = __DIR__ . DIRECTORY_SEPARATOR . 'install.sql';
|
||
if (!is_file($sqlFile)) {
|
||
return;
|
||
}
|
||
$content = (string) file_get_contents($sqlFile);
|
||
$content = preg_replace('/--.*|\/\*[\s\S]*?\*\//', '', $content);
|
||
$stmts = array_filter(
|
||
array_map('trim', explode(';', $content)),
|
||
function ($s) {
|
||
return strlen($s) > 5 && preg_match('/^CREATE\s+TABLE/i', $s);
|
||
}
|
||
);
|
||
foreach ($stmts as $sql) {
|
||
if (preg_match('/CREATE\s+TABLE\s+(?:IF\s+NOT\s+EXISTS\s+)?`?([\w]+)`?/i', $sql, $m)) {
|
||
BaseModel::ensureTable($m[1], $sql);
|
||
}
|
||
}
|
||
}
|
||
|
||
public function upgrade($currentVersion = ''): bool
|
||
{
|
||
$this->ensureTablesFromInstallSql();
|
||
return true;
|
||
}
|
||
}
|