shopxo/application/service/ResourcesService.php

363 lines
12 KiB
PHP
Raw Normal View History

2018-12-28 18:58:37 +08:00
<?php
// +----------------------------------------------------------------------
// | ShopXO 国内领先企业级B2C免费开源电商系统
// +----------------------------------------------------------------------
2019-02-18 13:52:07 +08:00
// | Copyright (c) 2011~2019 http://shopxo.net All rights reserved.
2018-12-28 18:58:37 +08:00
// +----------------------------------------------------------------------
// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
// +----------------------------------------------------------------------
// | Author: Devil
// +----------------------------------------------------------------------
namespace app\service;
use think\Db;
2019-06-25 01:10:37 +08:00
use think\facade\Hook;
2018-12-28 18:58:37 +08:00
/**
* 资源服务层
* @author Devil
* @blog http://gong.gg/
* @version 0.0.1
* @datetime 2016-12-01T21:51:08+0800
*/
class ResourcesService
{
/**
* [ContentStaticReplace 编辑器中内容的静态资源替换]
* @author Devil
* @blog http://gong.gg/
* @version 0.0.1
* @datetime 2017-01-22T16:07:58+0800
* @param [string] $content [在这个字符串中查找进行替换]
* @param [string] $type [操作类型[get读取额你让, add写入内容](编辑/展示传入get,数据写入数据库传入add)]
* @return [string] [正确返回替换后的内容, 则返回原内容]
*/
public static function ContentStaticReplace($content, $type = 'get')
2018-12-28 18:58:37 +08:00
{
switch($type)
{
// 读取内容
case 'get':
return str_replace('src="/static/', 'src="'.__MY_PUBLIC_URL__.'static/', $content);
2018-12-28 18:58:37 +08:00
break;
// 内容写入
case 'add':
return str_replace(array('src="'.__MY_PUBLIC_URL__.'static/', 'src="'.__MY_ROOT_PUBLIC__.'static/'), 'src="/static/', $content);
2018-12-28 18:58:37 +08:00
}
return $content;
}
/**
* 附件路径处理
* @author Devil
* @blog http://gong.gg/
* @version 1.0.0
* @date 2018-12-12
* @desc description
* @param [string] $value [附件路径地址]
*/
public static function AttachmentPathHandle($value)
2018-12-28 18:58:37 +08:00
{
2019-01-11 17:35:35 +08:00
return empty($value) ? '' : str_replace([__MY_PUBLIC_URL__, __MY_ROOT_PUBLIC__], DS, $value);
2018-12-28 18:58:37 +08:00
}
/**
* 附件集合处理
* @author Devil
* @blog http://gong.gg/
* @version 1.0.0
* @date 2018-08-07
* @desc description
* @param [array] $params [输入参数]
* @param [array] $data [字段列表]
*/
public static function AttachmentParams($params, $data)
2018-12-28 18:58:37 +08:00
{
$result = [];
if(!empty($data))
{
foreach($data as $field)
{
$result[$field] = isset($params[$field]) ? self::AttachmentPathHandle($params[$field]) : '';
2018-12-28 18:58:37 +08:00
}
}
return DataReturn('success', 0, $result);
}
/**
* 附件展示地址处理
* @author Devil
* @blog http://gong.gg/
* @version 1.0.0
* @datetime 2019-01-13T15:13:30+0800
* @param [type] $value [description]
*/
public static function AttachmentPathViewHandle($value)
{
if(!empty($value))
{
if(substr($value, 0, 4) != 'http')
{
return config('shopxo.attachment_host').$value;
}
return $value;
}
return '';
}
2019-06-25 01:10:37 +08:00
/**
* 附件添加
* @author Devil
* @blog http://gong.gg/
* @version 1.0.0
* @datetime 2019-06-25T00:13:33+0800
* @param [array] $params [输入参数]
*/
public static function AttachmentAdd($params = [])
{
2019-06-26 00:13:47 +08:00
// 请求参数
$p = [
[
'checked_type' => 'empty',
'key_name' => 'title',
'error_msg' => '名称有误',
],
[
'checked_type' => 'empty',
'key_name' => 'original',
'error_msg' => '原名有误',
],
2019-06-26 16:47:15 +08:00
[
'checked_type' => 'empty',
'key_name' => 'path_type',
'error_msg' => '路径标记有误',
],
2019-06-26 00:13:47 +08:00
[
'checked_type' => 'empty',
'key_name' => 'url',
'error_msg' => '地址有误',
],
[
'checked_type' => 'isset',
'key_name' => 'size',
'error_msg' => '文件大小有误',
],
[
'checked_type' => 'isset',
'key_name' => 'ext',
'error_msg' => '扩展名有误',
],
[
'checked_type' => 'empty',
'key_name' => 'hash',
'error_msg' => 'hash值有误',
],
];
$ret = ParamsChecked($params, $p);
if($ret !== true)
2019-06-25 01:10:37 +08:00
{
2019-06-26 00:13:47 +08:00
return DataReturn($ret, -1);
}
// 数据组装
$data = [
2019-06-26 16:47:15 +08:00
'path_type' => $params['path_type'],
2019-06-26 00:13:47 +08:00
'original' => empty($params['original']) ? '' : mb_substr($params['original'], -160, null, 'utf-8'),
'title' => $params['title'],
'size' => $params['size'],
'ext' => $params['ext'],
'type' => isset($params['type']) ? $params['type'] : 'file',
'hash' => $params['hash'],
'url' => self::AttachmentPathHandle($params['url']),
'add_time' => time(),
];
// 附件上传前处理钩子
$hook_name = 'plugins_service_attachment_handle_begin';
Hook::listen($hook_name, [
'hook_name' => $hook_name,
'is_backend' => true,
'params' => $params,
'data' => &$data,
]);
// 添加到数据库
$attachment_id = Db::name('Attachment')->insertGetId($data);
if($attachment_id > 0)
{
// 附件上传后处理钩子
$hook_name = 'plugins_service_attachment_handle_end';
$ret = Hook::listen($hook_name, [
2019-06-25 01:10:37 +08:00
'hook_name' => $hook_name,
'is_backend' => true,
2019-06-26 00:13:47 +08:00
'params' => &$params,
2019-06-25 01:10:37 +08:00
'data' => &$data,
2019-06-26 00:13:47 +08:00
'attachment_id' => $attachment_id,
2019-06-25 01:10:37 +08:00
]);
2019-06-26 00:13:47 +08:00
return DataReturn('添加成功', 0, $params);
}
// 删除本地图片
if(!empty($params['path']))
{
\base\FileUtil::UnlinkFile($params['path']);
}
return DataReturn('添加失败', -100);
}
/**
* 获取附件总数
* @author Devil
* @blog http://gong.gg/
* @version 1.0.0
* @datetime 2019-06-25T22:44:52+0800
* @param [array] $where [条件]
*/
public static function AttachmentTotal($where)
{
return (int) Db::name('Attachment')->where($where)->count();
}
/**
* 获取附件列表
* @author Devil
* @blog http://gong.gg/
* @version 1.0.0
* @datetime 2019-06-25T22:44:52+0800
* @param [array] $params [参数]
*/
public static function AttachmentList($params = [])
{
$m = max(0, isset($params['m']) ? intval($params['m']) : 0);
$n = max(1, isset($params['n']) ? intval($params['n']) : 20);
$data = Db::name('Attachment')->where($params['where'])->order('id desc')->limit($m, $n)->select();
if(!empty($data))
{
foreach($data as &$v)
2019-06-25 01:10:37 +08:00
{
2019-06-26 00:13:47 +08:00
// 附件列表处理前钩子
$hook_name = 'plugins_service_attachment_list_handle_begin';
$ret = Hook::listen($hook_name, [
'hook_name' => $hook_name,
'is_backend' => true,
'data' => &$v,
]);
if(isset($ret['code']) && $ret['code'] != 0)
{
return $ret;
}
// 数据处理
$v['url'] = self::AttachmentPathViewHandle($v['url']);
$v['add_time'] = date('Y-m-d H:i:s');
// 附件列表处理后钩子
$hook_name = 'plugins_service_attachment_list_handle_end';
2019-06-25 01:10:37 +08:00
$ret = Hook::listen($hook_name, [
'hook_name' => $hook_name,
'is_backend' => true,
2019-06-26 00:13:47 +08:00
'data' => &$v,
2019-06-25 01:10:37 +08:00
]);
2019-06-26 00:13:47 +08:00
if(isset($ret['code']) && $ret['code'] != 0)
{
return $ret;
}
}
}
return DataReturn('操作成功', 0, $data);
}
/**
* 附件删除
* @author Devil
* @blog http://gong.gg/
* @version 1.0.0
* @datetime 2019-06-25T23:35:27+0800
* @param [array] $params [输入参数]
*/
public static function AttachmentDelete($params = [])
{
// 请求参数
$p = [
[
'checked_type' => 'empty',
'key_name' => 'id',
'error_msg' => '操作id有误',
]
];
$ret = ParamsChecked($params, $p);
if($ret !== true)
{
return DataReturn($ret, -1);
}
// 获取数据
$data = Db::name('Attachment')->find(intval($params['id']));
if(empty($data))
{
return DataReturn('数据不存在或已删除', -1);
}
// 删除文件
$path = substr(ROOT_PATH, 0, -1).$data['url'];
if(file_exists($path))
{
if(is_writable($path))
{
if(DB::name('Attachment')->where(['id'=>$data['id']])->delete())
{
// 删除附件
\base\FileUtil::UnlinkFile($path);
2019-06-25 01:10:37 +08:00
2019-06-26 00:18:28 +08:00
$ret = DataReturn('删除成功', 0);
2019-06-26 00:13:47 +08:00
} else {
2019-06-26 16:47:15 +08:00
$ret = DataReturn('删除失败', -100);
2019-06-26 00:13:47 +08:00
}
} else {
2019-06-26 00:18:28 +08:00
$ret = DataReturn('没有删除权限', -1);
2019-06-25 01:10:37 +08:00
}
2019-06-26 00:13:47 +08:00
} else {
2019-06-26 00:18:28 +08:00
if(DB::name('Attachment')->where(['id'=>$data['id']])->delete())
{
$ret = DataReturn('删除成功', 0);
} else {
2019-06-26 16:47:15 +08:00
$ret = DataReturn('删除失败', -100);
2019-06-26 00:18:28 +08:00
}
}
// 处理
if($ret['code'] == 0)
{
// 附件删除成功后处理钩子
$hook_name = 'plugins_service_attachment_delete_success';
Hook::listen($hook_name, [
'hook_name' => $hook_name,
'is_backend' => true,
'data' => $data,
]);
2019-06-25 01:10:37 +08:00
}
2019-06-26 00:18:28 +08:00
return $ret;
2019-06-25 01:10:37 +08:00
}
2019-06-26 16:47:15 +08:00
/**
* 附件根据标记删除
* @author Devil
* @blog http://gong.gg/
* @version 1.0.0
* @datetime 2019-06-25T23:35:27+0800
* @param [string] $path_type [唯一标记]
*/
public static function AttachmentPathTypeDelete($path_type)
{
// 请求参数
if(DB::name('Attachment')->where(['path_type'=>$path_type])->delete() !== false)
{
return DataReturn('删除成功', 0);
}
return DataReturn('删除失败', -100);
}
2018-12-28 18:58:37 +08:00
}
?>