mirror of
https://gitee.com/zoujingli/ThinkAdmin.git
synced 2026-06-08 12:58:11 +08:00
将 v6 中直接放在本地 app 的后台与微信能力迁移为 v8 插件组件,并把运行时基础能力沉淀到独立插件包。 主要内容: - 新增 think-library、system、worker、static、install 等基础插件包。 - 新增 account、payment、wechat-client、wechat-service、wemall、wuma 等业务插件包。 - 移除 v6 的 app/admin 与 app/wechat 本地应用实现,改由插件分发接管。 - 将 Helper 能力彻底并入 System,统一为 plugin\system\helper\* 命名空间。 - 同步插件迁移发布清单与根 route 占位,保证安装发布流程可复现。
106 lines
3.4 KiB
PHP
106 lines
3.4 KiB
PHP
<?php
|
|
|
|
declare(strict_types=1);
|
|
/**
|
|
* +----------------------------------------------------------------------
|
|
* | ThinkAdmin Plugin for ThinkAdminDeveloper
|
|
* +----------------------------------------------------------------------
|
|
* | Copyright (c) 2014~2026 ThinkAdmin [ thinkadmin.top ]
|
|
* +----------------------------------------------------------------------
|
|
* | Official Website: https://thinkadmin.top
|
|
* +----------------------------------------------------------------------
|
|
* | Licensed: https://mit-license.org
|
|
* | Disclaimer: https://thinkadmin.top/disclaimer
|
|
* | Vip Rights: https://thinkadmin.top/vip-introduce
|
|
* +----------------------------------------------------------------------
|
|
* | Gitee Repository: https://gitee.com/zoujingli/ThinkAdmin
|
|
* | Github Repository: https://github.com/zoujingli/ThinkAdmin
|
|
* +----------------------------------------------------------------------
|
|
*/
|
|
|
|
namespace think\admin\helper;
|
|
|
|
use think\admin\Helper;
|
|
use think\admin\model\QueryFactory;
|
|
use think\db\BaseQuery;
|
|
use think\db\Query;
|
|
use think\Model;
|
|
use think\model\concern\SoftDelete;
|
|
|
|
/**
|
|
* 通用删除管理器.
|
|
* @class DeleteHelper
|
|
*/
|
|
class DeleteHelper extends Helper
|
|
{
|
|
/**
|
|
* @param array|mixed $where
|
|
*/
|
|
public function init(BaseQuery|Model|string $dbQuery, string $field = '', mixed $where = [])
|
|
{
|
|
$query = QueryFactory::build($dbQuery);
|
|
if (!$query instanceof Query) {
|
|
throw new \InvalidArgumentException('DeleteHelper only supports relational Query instances.');
|
|
}
|
|
$field = $field ?: ($query->getPk() ?: 'id');
|
|
$value = $this->app->request->post($field);
|
|
|
|
if (!empty($where)) {
|
|
$query->where($where);
|
|
}
|
|
if (!isset($where[$field]) && $value !== null && $value !== '') {
|
|
$query->whereIn($field, is_array($value) ? $value : str2arr(strval($value)));
|
|
}
|
|
|
|
if ($this->class->callback('_delete_filter', $query, $where) === false) {
|
|
return false;
|
|
}
|
|
|
|
if (empty($query->getOptions()['where'] ?? [])) {
|
|
$this->class->error('数据删除失败!');
|
|
}
|
|
|
|
$model = $query->getModel();
|
|
$result = $this->deleteRecords($query, $model);
|
|
if ($result) {
|
|
if ($model instanceof \think\admin\Model) {
|
|
$model->onAdminDelete(strval($value));
|
|
}
|
|
}
|
|
|
|
if ($this->class->callback('_delete_result', $result) === false) {
|
|
return $result;
|
|
}
|
|
|
|
if ($result !== false) {
|
|
$this->class->success('数据删除成功!', '');
|
|
} else {
|
|
$this->class->error('数据删除失败!');
|
|
}
|
|
}
|
|
|
|
private function deleteRecords(Query $query, ?Model $model = null): bool
|
|
{
|
|
if ($model instanceof Model && $this->usesSoftDelete($model)) {
|
|
$result = false;
|
|
foreach ((clone $query)->select() as $item) {
|
|
$result = $item->delete() || $result;
|
|
}
|
|
return $result;
|
|
}
|
|
|
|
return $query->delete() !== false;
|
|
}
|
|
|
|
private function usesSoftDelete(Model $model): bool
|
|
{
|
|
$traits = [];
|
|
foreach ([get_class($model), ...class_parents($model)] as $class) {
|
|
$traits = array_merge($traits, class_uses($class) ?: []);
|
|
}
|
|
|
|
return in_array(SoftDelete::class, array_values(array_unique($traits)), true)
|
|
&& $model->getOption('deleteTime', 'delete_time') !== false;
|
|
}
|
|
}
|