427 lines
14 KiB
PHP
427 lines
14 KiB
PHP
|
|
<?php
|
|||
|
|
// +----------------------------------------------------------------------
|
|||
|
|
// | ShopXO 国内领先企业级B2C免费开源电商系统
|
|||
|
|
// +----------------------------------------------------------------------
|
|||
|
|
// | Copyright (c) 2011~2099 http://shopxo.net All rights reserved.
|
|||
|
|
// +----------------------------------------------------------------------
|
|||
|
|
// | Licensed ( https://opensource.org/licenses/mit-license.php )
|
|||
|
|
// +----------------------------------------------------------------------
|
|||
|
|
// | Author: Devil
|
|||
|
|
// +----------------------------------------------------------------------
|
|||
|
|
namespace app\service;
|
|||
|
|
|
|||
|
|
use think\facade\Db;
|
|||
|
|
use app\service\ResourcesService;
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* 附件分类服务层
|
|||
|
|
* @author Devil
|
|||
|
|
* @blog http://gong.gg/
|
|||
|
|
* @version 0.0.1
|
|||
|
|
* @datetime 2016-12-01T21:51:08+0800
|
|||
|
|
*/
|
|||
|
|
class AttachmentCategoryService
|
|||
|
|
{
|
|||
|
|
/**
|
|||
|
|
* 分类id获取路径标识
|
|||
|
|
* @author Devil
|
|||
|
|
* @blog http://gong.gg/
|
|||
|
|
* @version 1.0.0
|
|||
|
|
* @date 2024-07-17
|
|||
|
|
* @desc description
|
|||
|
|
* @param [int] $category_id [分类id]
|
|||
|
|
*/
|
|||
|
|
public static function AttachmentPathType($category_id)
|
|||
|
|
{
|
|||
|
|
return Db::name('AttachmentCategory')->where(['id'=>$category_id])->value('path');
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* 根据路径标识附件分类id
|
|||
|
|
* @author Devil
|
|||
|
|
* @blog http://gong.gg/
|
|||
|
|
* @version 1.0.0
|
|||
|
|
* @date 2024-07-17
|
|||
|
|
* @desc description
|
|||
|
|
* @param [int|string] $value [分类id或路径标识]
|
|||
|
|
* @param [array] $params [输入参数]
|
|||
|
|
*/
|
|||
|
|
public static function AttachmentCategoryId($value, $params = [])
|
|||
|
|
{
|
|||
|
|
// 是否存在数据
|
|||
|
|
$id = Db::name('AttachmentCategory')->where(['id|path'=>$value])->value('id');
|
|||
|
|
if(empty($id))
|
|||
|
|
{
|
|||
|
|
// 匹配名称
|
|||
|
|
$lang = MyConst('common_attachment_category_path_name_list');
|
|||
|
|
|
|||
|
|
// 父级id
|
|||
|
|
$pid = 0;
|
|||
|
|
|
|||
|
|
// 是否插件
|
|||
|
|
$plugins = 'plugins_';
|
|||
|
|
if(substr($value, 0, strlen($plugins)) == $plugins)
|
|||
|
|
{
|
|||
|
|
$pid = Db::name('AttachmentCategory')->where(['path'=>'plugins'])->value('id');
|
|||
|
|
if(empty($pid))
|
|||
|
|
{
|
|||
|
|
// 父级处理
|
|||
|
|
$name = (empty($lang) || empty($lang['plugins'])) ? 'plugins' : $lang['plugins'];
|
|||
|
|
$ret = self::AttachmentCategorySave(['name'=>$name, 'path'=>'plugins', 'is_enable'=>1]);
|
|||
|
|
$pid = empty($ret['data']) ? 0 : $ret['data']['id'];
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// 横杠分割的数据
|
|||
|
|
} else {
|
|||
|
|
$loc = stripos($value, '-');
|
|||
|
|
if($loc !== false)
|
|||
|
|
{
|
|||
|
|
// 父级处理
|
|||
|
|
$first = substr($value, 0, $loc);
|
|||
|
|
$pid = Db::name('AttachmentCategory')->where(['path'=>$first])->value('id');
|
|||
|
|
if(empty($pid))
|
|||
|
|
{
|
|||
|
|
$name = (empty($lang) || empty($lang[$first])) ? $first : $lang[$first];
|
|||
|
|
$ret = self::AttachmentCategorySave(['name'=>$name, 'path'=>$first, 'is_enable'=>1]);
|
|||
|
|
$pid = empty($ret['data']) ? 0 : $ret['data']['id'];
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// 添加当前数据
|
|||
|
|
$name = (empty($lang) || empty($lang[$value])) ? (empty($params['name']) ? $value : $params['name']) : $lang[$value];
|
|||
|
|
$ret = self::AttachmentCategorySave(['name'=>$name, 'path'=>$value, 'is_enable'=>1, 'pid'=>$pid]);
|
|||
|
|
return empty($ret['data']) ? 0 : $ret['data']['id'];
|
|||
|
|
}
|
|||
|
|
return $id;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* 附件分类所有(2级)
|
|||
|
|
* @author Devil
|
|||
|
|
* @blog http://gong.gg/
|
|||
|
|
* @version 1.0.0
|
|||
|
|
* @date 2024-07-15
|
|||
|
|
* @desc description
|
|||
|
|
* @param [array] $params [输入参数]
|
|||
|
|
*/
|
|||
|
|
public static function AttachmentCategoryAll($params = [])
|
|||
|
|
{
|
|||
|
|
// 获取分类
|
|||
|
|
if(empty($params['where']))
|
|||
|
|
{
|
|||
|
|
$params['where'] = [
|
|||
|
|
['pid', '=', 0],
|
|||
|
|
];
|
|||
|
|
// 非后端则限制分类条件
|
|||
|
|
if(RequestModule() != 'admin')
|
|||
|
|
{
|
|||
|
|
$params['where'][] = ['path', '=', empty($params['path_type']) ? '0-0-0' : $params['path_type']];
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// 获取所有附件分类数据表钩子
|
|||
|
|
$hook_name = 'plugins_service_attachment_category_all_begin';
|
|||
|
|
MyEventTrigger($hook_name, [
|
|||
|
|
'hook_name' => $hook_name,
|
|||
|
|
'is_backend' => true,
|
|||
|
|
'params' => &$params,
|
|||
|
|
]);
|
|||
|
|
|
|||
|
|
// 获取数据
|
|||
|
|
$data = self::AttachmentCategoryList($params);
|
|||
|
|
if(!empty($data))
|
|||
|
|
{
|
|||
|
|
// 基础条件、去除pid
|
|||
|
|
$where_base = $params['where'];
|
|||
|
|
$temp_column = array_column($where_base, 0);
|
|||
|
|
if(in_array('pid', $temp_column))
|
|||
|
|
{
|
|||
|
|
unset($where_base[array_search('pid', $temp_column)]);
|
|||
|
|
sort($where_base);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// 获取所有二级
|
|||
|
|
$two_group = [];
|
|||
|
|
$params['where'] = array_merge($where_base, [['pid', 'in', array_column($data, 'id')]]);
|
|||
|
|
$two = self::AttachmentCategoryList($params);
|
|||
|
|
if(!empty($two))
|
|||
|
|
{
|
|||
|
|
// 二级分组
|
|||
|
|
foreach($two as $tv)
|
|||
|
|
{
|
|||
|
|
if(!array_key_exists($tv['pid'], $two_group))
|
|||
|
|
{
|
|||
|
|
$two_group[$tv['pid']] = [];
|
|||
|
|
}
|
|||
|
|
$two_group[$tv['pid']][] = $tv;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// 数据组合
|
|||
|
|
foreach($data as &$v)
|
|||
|
|
{
|
|||
|
|
$v['items'] = (empty($two_group) || !array_key_exists($v['id'], $two_group)) ? [] : $two_group[$v['id']];
|
|||
|
|
if(!empty($v['items']))
|
|||
|
|
{
|
|||
|
|
foreach($v['items'] as &$vs)
|
|||
|
|
{
|
|||
|
|
$vs['items'] = (empty($three_group) || !array_key_exists($vs['id'], $three_group)) ? [] : $three_group[$vs['id']];
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
} else {
|
|||
|
|
$data = [];
|
|||
|
|
}
|
|||
|
|
return $data;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* 附件分类
|
|||
|
|
* @author Devil
|
|||
|
|
* @blog http://gong.gg/
|
|||
|
|
* @version 1.0.0
|
|||
|
|
* @date 2018-08-29
|
|||
|
|
* @desc description
|
|||
|
|
* @param [array] $params [输入参数]
|
|||
|
|
*/
|
|||
|
|
public static function AttachmentCategoryList($params = [])
|
|||
|
|
{
|
|||
|
|
$where = empty($params['where']) ? [] : $params['where'];
|
|||
|
|
if(isset($params['is_enable']))
|
|||
|
|
{
|
|||
|
|
$where[] = ['is_enable', '=', intval($params['is_enable'])];
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// 获取附件分类数据列表前钩子
|
|||
|
|
$hook_name = 'plugins_service_attachment_category_list_begin';
|
|||
|
|
MyEventTrigger($hook_name, [
|
|||
|
|
'hook_name' => $hook_name,
|
|||
|
|
'is_backend' => true,
|
|||
|
|
'params' => $params,
|
|||
|
|
'where' => &$where,
|
|||
|
|
]);
|
|||
|
|
|
|||
|
|
$data = Db::name('AttachmentCategory')->where($where)->field('id,pid,icon,name,path,sort,is_enable')->order('sort asc')->select()->toArray();
|
|||
|
|
return self::DataHandle($data);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* 数据处理
|
|||
|
|
* @author Devil
|
|||
|
|
* @blog http://gong.gg/
|
|||
|
|
* @version 1.0.0
|
|||
|
|
* @date 2021-11-08
|
|||
|
|
* @desc description
|
|||
|
|
* @param [array] $data [分类数据]
|
|||
|
|
* @param [array] $params [输入参数]
|
|||
|
|
*/
|
|||
|
|
public static function DataHandle($data, $params = [])
|
|||
|
|
{
|
|||
|
|
if(!empty($data))
|
|||
|
|
{
|
|||
|
|
foreach($data as &$v)
|
|||
|
|
{
|
|||
|
|
if(array_key_exists('icon', $v))
|
|||
|
|
{
|
|||
|
|
$v['icon'] = ResourcesService::AttachmentPathViewHandle($v['icon']);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
return $data;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* 获取附件分类节点数据
|
|||
|
|
* @author Devil
|
|||
|
|
* @blog http://gong.gg/
|
|||
|
|
* @version 1.0.0
|
|||
|
|
* @datetime 2018-12-16T23:54:46+0800
|
|||
|
|
* @param [array] $params [输入参数]
|
|||
|
|
*/
|
|||
|
|
public static function AttachmentCategoryNodeSon($params = [])
|
|||
|
|
{
|
|||
|
|
$id = isset($params['id']) ? intval($params['id']) : 0;
|
|||
|
|
$field = 'id,pid,icon,name,path,sort,is_enable';
|
|||
|
|
$data = Db::name('AttachmentCategory')->field($field)->where(['pid'=>$id])->order('sort asc')->select()->toArray();
|
|||
|
|
if(!empty($data))
|
|||
|
|
{
|
|||
|
|
$data = self::DataHandle($data);
|
|||
|
|
foreach($data as &$v)
|
|||
|
|
{
|
|||
|
|
$v['is_son'] = (Db::name('AttachmentCategory')->where(['pid'=>$v['id']])->count() > 0) ? 'ok' : 'no';
|
|||
|
|
$v['ajax_url'] = MyUrl('admin/pluginscategory/getnodeson', array('id'=>$v['id']));
|
|||
|
|
$v['delete_url'] = MyUrl('admin/pluginscategory/delete');
|
|||
|
|
$v['json'] = json_encode($v);
|
|||
|
|
}
|
|||
|
|
return DataReturn(MyLang('operate_success'), 0, $data);
|
|||
|
|
}
|
|||
|
|
return DataReturn(MyLang('no_data'), -100);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* 附件分类保存
|
|||
|
|
* @author Devil
|
|||
|
|
* @blog http://gong.gg/
|
|||
|
|
* @version 1.0.0
|
|||
|
|
* @datetime 2018-12-17T01:04:03+0800
|
|||
|
|
* @param [array] $params [输入参数]
|
|||
|
|
*/
|
|||
|
|
public static function AttachmentCategorySave($params = [])
|
|||
|
|
{
|
|||
|
|
// 请求参数
|
|||
|
|
$p = [
|
|||
|
|
[
|
|||
|
|
'checked_type' => 'length',
|
|||
|
|
'key_name' => 'name',
|
|||
|
|
'checked_data' => '1,60',
|
|||
|
|
'error_msg' => MyLang('common_service.attachmentcategory.form_item_name_message'),
|
|||
|
|
],
|
|||
|
|
[
|
|||
|
|
'checked_type' => 'length',
|
|||
|
|
'key_name' => 'path',
|
|||
|
|
'checked_data' => '1,230',
|
|||
|
|
'error_msg' => MyLang('common_service.attachmentcategory.form_item_path_message'),
|
|||
|
|
],
|
|||
|
|
];
|
|||
|
|
$ret = ParamsChecked($params, $p);
|
|||
|
|
if($ret !== true)
|
|||
|
|
{
|
|||
|
|
return DataReturn($ret, -1);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// 其它附件
|
|||
|
|
$attachment = ResourcesService::AttachmentParams($params, ['icon']);
|
|||
|
|
if($attachment['code'] != 0)
|
|||
|
|
{
|
|||
|
|
return $attachment;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// 数据
|
|||
|
|
$data = [
|
|||
|
|
'icon' => $attachment['data']['icon'],
|
|||
|
|
'name' => $params['name'],
|
|||
|
|
'path' => $params['path'],
|
|||
|
|
'pid' => isset($params['pid']) ? intval($params['pid']) : 0,
|
|||
|
|
'sort' => isset($params['sort']) ? intval($params['sort']) : 0,
|
|||
|
|
'is_enable' => isset($params['is_enable']) ? intval($params['is_enable']) : 0,
|
|||
|
|
];
|
|||
|
|
|
|||
|
|
// 分类数据
|
|||
|
|
$info = [];
|
|||
|
|
if(!empty($params['id']))
|
|||
|
|
{
|
|||
|
|
$info = Db::name('AttachmentCategory')->where(['id'=>intval($params['id'])])->find();
|
|||
|
|
if(empty($info))
|
|||
|
|
{
|
|||
|
|
return DataReturn(MyLang('data_id_error_tips'), -1);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
if(empty($info))
|
|||
|
|
{
|
|||
|
|
$info = Db::name('AttachmentCategory')->where(['path'=>$data['path']])->find();
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// 不存在则添加
|
|||
|
|
if(empty($info))
|
|||
|
|
{
|
|||
|
|
$data['add_time'] = time();
|
|||
|
|
$data['id'] = Db::name('AttachmentCategory')->insertGetId($data);
|
|||
|
|
if($data['id'] <= 0)
|
|||
|
|
{
|
|||
|
|
return DataReturn(MyLang('insert_fail'), -100);
|
|||
|
|
}
|
|||
|
|
} else {
|
|||
|
|
$data['upd_time'] = time();
|
|||
|
|
if(Db::name('AttachmentCategory')->where(['id'=>$info['id']])->update($data) === false)
|
|||
|
|
{
|
|||
|
|
return DataReturn(MyLang('edit_fail'), -100);
|
|||
|
|
} else {
|
|||
|
|
$data['id'] = $info['id'];
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
return DataReturn(MyLang('operate_success'), 0, $data);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* 附件分类状态更新
|
|||
|
|
* @author Devil
|
|||
|
|
* @blog http://gong.gg/
|
|||
|
|
* @version 0.0.1
|
|||
|
|
* @datetime 2016-12-06T21:31:53+0800
|
|||
|
|
* @param [array] $params [输入参数]
|
|||
|
|
*/
|
|||
|
|
public static function AttachmentCategoryStatusUpdate($params = [])
|
|||
|
|
{
|
|||
|
|
// 请求参数
|
|||
|
|
$p = [
|
|||
|
|
[
|
|||
|
|
'checked_type' => 'empty',
|
|||
|
|
'key_name' => 'id',
|
|||
|
|
'error_msg' => MyLang('data_id_error_tips'),
|
|||
|
|
],
|
|||
|
|
[
|
|||
|
|
'checked_type' => 'empty',
|
|||
|
|
'key_name' => 'field',
|
|||
|
|
'error_msg' => MyLang('operate_field_error_tips'),
|
|||
|
|
],
|
|||
|
|
[
|
|||
|
|
'checked_type' => 'in',
|
|||
|
|
'key_name' => 'state',
|
|||
|
|
'checked_data' => [0,1],
|
|||
|
|
'error_msg' => MyLang('form_status_range_message'),
|
|||
|
|
],
|
|||
|
|
];
|
|||
|
|
$ret = ParamsChecked($params, $p);
|
|||
|
|
if($ret !== true)
|
|||
|
|
{
|
|||
|
|
return DataReturn($ret, -1);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// 捕获异常
|
|||
|
|
try {
|
|||
|
|
// 数据更新
|
|||
|
|
if(!Db::name('AttachmentCategory')->where(['id'=>intval($params['id'])])->update([$params['field']=>intval($params['state']), 'upd_time'=>time()]))
|
|||
|
|
{
|
|||
|
|
throw new \Exception(MyLang('operate_fail'));
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
return DataReturn(MyLang('operate_success'), 0);
|
|||
|
|
} catch(\Exception $e) {
|
|||
|
|
return DataReturn($e->getMessage(), -1);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* 附件分类删除
|
|||
|
|
* @author Devil
|
|||
|
|
* @blog http://gong.gg/
|
|||
|
|
* @version 1.0.0
|
|||
|
|
* @datetime 2018-12-17T02:40:29+0800
|
|||
|
|
* @param [array] $params [输入参数]
|
|||
|
|
*/
|
|||
|
|
public static function AttachmentCategoryDelete($params = [])
|
|||
|
|
{
|
|||
|
|
// 请求参数
|
|||
|
|
$p = [
|
|||
|
|
[
|
|||
|
|
'checked_type' => 'empty',
|
|||
|
|
'key_name' => 'id',
|
|||
|
|
'error_msg' => MyLang('data_id_error_tips'),
|
|||
|
|
],
|
|||
|
|
];
|
|||
|
|
$ret = ParamsChecked($params, $p);
|
|||
|
|
if($ret !== true)
|
|||
|
|
{
|
|||
|
|
return DataReturn($ret, -1);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// 开始删除
|
|||
|
|
if(Db::name('AttachmentCategory')->where(['id'=>intval($params['id'])])->delete())
|
|||
|
|
{
|
|||
|
|
return DataReturn(MyLang('delete_success'), 0);
|
|||
|
|
}
|
|||
|
|
return DataReturn(MyLang('delete_fail'), -100);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
?>
|