<?php
namespace app\service;
use think\facade\Db;
use app\service\PluginsAdminService;
use app\service\PaymentService;
use app\service\ThemeAdminService;
use app\service\AppMiniService;
use app\service\DesignService;
use app\service\DiyService;
use app\service\FormInputService;
* 软件安装服务层
* @author Devil
* @blog http://gong.gg/
* @version 1.0.0
* @date 2020-09-12
* @desc description
*/
class PackageInstallService
{
* 获取安装参数
* @author Devil
* @blog http://gong.gg/
* @version 1.0.0
* @date 2021-02-22
* @desc description
* @param [array] $params [输入参数]
*/
public static function RequestInstallParams($params = [])
{
$id = empty($params['id']) ? 0 : intval($params['id']);
$type = empty($params['type']) ? '' : $params['type'];
$terminal = empty($params['terminal']) ? '' : $params['terminal'];
switch($type)
{
case 'plugins' :
$url = MyUrl('admin/pluginsadmin/index');
break;
case 'payment' :
$url = MyUrl('admin/payment/index', ['type'=>1]);
break;
case 'webtheme' :
$url = MyUrl('admin/themeadmin/index');
break;
case 'minitheme' :
$url = MyUrl('admin/appmini/index');
break;
case 'apptheme' :
$url = MyUrl('admin/app/index');
break;
case 'design' :
$url = MyUrl('admin/design/index');
break;
case 'diy' :
$url = MyUrl('admin/diy/index');
break;
case 'forminput' :
$url = MyUrl('admin/forminput/index');
break;
default :
$url = '';
}
return [
'id' => $id,
'type' => $type,
'terminal' => $terminal,
'url' => MyUrl('admin/packageinstall/install'),
'admin_url' => MyUrl('admin/index/index', ['to_url'=>urlencode(base64_encode($url))]),
];
}
* 软件安装
* @author Devil
* @blog http://gong.gg/
* @version 1.0.0
* @date 2021-02-22
* @desc description
* @param [array] $params [输入参数]
*/
public static function Install($params = [])
{
$ret = self::ParamsCheck($params);
if($ret['code'] != 0)
{
return $ret;
}
switch($params['opt'])
{
case 'url' :
$ret = self::UrlHandle($params);
break;
case 'download' :
$ret = self::DownloadHandle($params['key']);
break;
case 'install' :
$ret = self::InstallHandle($params);
break;
}
return $ret;
}
* 安装软件包
* @author Devil
* @blog http://gong.gg/
* @version 1.0.0
* @date 2021-02-22
* @desc description
* @param [array] $params [输入参数]
*/
public static function InstallHandle($params)
{
$res = self::DirFileData($params['key']);
if(!file_exists($res['url']))
{
return DataReturn(MyLang('common_service.packageinstall.package_no_exist_tips'), -1);
}
switch($params['type'])
{
case 'plugins' :
$ret = PluginsAdminService::PluginsUploadHandle($res['url'], $params);
break;
case 'payment' :
$ret = PaymentService::UploadHandle($res['url'], $params);
break;
case 'webtheme' :
$ret = ThemeAdminService::ThemeAdminUploadHandle($res['url'], $params);
break;
case 'minitheme' :
if(empty($params['terminal']))
{
return DataReturn(MyLang('common_service.packageinstall.mini_theme_terminal_not_choice_tips'), -1);
}
$params['application_name'] = $params['terminal'];
$ret = AppMiniService::ThemeUploadHandle($res['url'], $params);
break;
case 'design' :
$ret = DesignService::DesignUploadHandle($res['url'], $params);
break;
case 'diy' :
$ret = DiyService::DiyUploadHandle($res['url'], $params);
break;
case 'forminput' :
$ret = FormInputService::FormInputUploadHandle($res['url'], $params);
break;
default :
$ret = DataReturn(MyLang('operate_type_error_tips').'['.$params['type'].']', -1);
}
MyCache($params['key'], null);
\base\FileUtil::UnlinkFile($res['url']);
return $ret;
}
* 下载软件包
* @author Devil
* @blog http://gong.gg/
* @version 1.0.0
* @date 2021-02-22
* @desc description
* @param [string] $key [缓存key]
*/
public static function DownloadHandle($key)
{
$url = MyCache($key);
if(empty($url))
{
return DataReturn(MyLang('common_service.packageinstall.download_url_empty_tips'), -1);
}
$res = self::DirFileData($key);
\base\FileUtil::CreateDir($res['dir'].$res['path']);
if(@file_put_contents($res['url'], RequestGet($url, 300000)) !== false)
{
return DataReturn(MyLang('download_success'), 0, $key);
}
return DataReturn(MyLang('download_fail'), -1);
}
* 获取下载地址
* @author Devil
* @blog http://gong.gg/
* @version 1.0.0
* @date 2021-02-22
* @desc description
* @param [array] $params [输入参数]
*/
public static function UrlHandle($params)
{
$url = MyConfig('shopxo.store_download_url');
$data = [
'goods_id' => $params['id'],
'url' => __MY_URL__,
'host' => __MY_HOST__,
'ip' => __MY_ADDR__,
'ver' => APPLICATION_VERSION,
'terminal' => empty($params['terminal']) ? '' : $params['terminal'],
];
foreach($data as $k=>$v)
{
$data[$k] = urldecode(base64_encode($v));
}
$ret = self::HttpRequest($url, $data);
if(!empty($ret) && isset($ret['code']) && $ret['code'] == 0)
{
$key = md5($ret['data']);
MyCache($key, $ret['data'], 600);
$ret['data'] = $key;
}
return $ret;
}
* 获取软件存储信息
* @author Devil
* @blog http://gong.gg/
* @version 1.0.0
* @date 2021-02-22
* @desc description
* @param [string] $key [缓存key]
*/
public static function DirFileData($key)
{
$dir = ROOT;
$path = 'runtime'.DS.'data'.DS.'plugins_package_install'.DS;
$filename = $key.'.zip';
\base\FileUtil::CreateDir($dir.$path);
return [
'dir' => $dir,
'path' => $path,
'file' => $filename,
'url' => $dir.$path.$filename,
];
}
* 输入参数校验
* @author Devil
* @blog http://gong.gg/
* @version 1.0.0
* @date 2021-02-22
* @desc description
* @param [array] $params [输入参数]
*/
public static function ParamsCheck($params = [])
{
$p = [
[
'checked_type' => 'empty',
'key_name' => 'id',
'error_msg' => MyLang('goods_id_error_tips'),
],
[
'checked_type' => 'empty',
'key_name' => 'type',
'error_msg' => MyLang('common_service.packageinstall.plugins_type_error_tips'),
],
[
'checked_type' => 'in',
'key_name' => 'opt',
'checked_data' => ['url', 'download', 'install'],
'error_msg' => MyLang('operate_type_error_tips'),
],
];
$ret = ParamsChecked($params, $p);
if($ret !== true)
{
return DataReturn($ret, -1);
}
if(in_array($params['opt'], ['download', 'install']) && empty($params['key']))
{
return DataReturn(MyLang('common_service.packageinstall.operate_key_error_tips'), -1);
}
return DataReturn('success', 0);
}
* 网络请求
* @author Devil
* @blog http://gong.gg/
* @version 1.0.0
* @date 2021-02-22
* @desc description
* @param [string] $url [请求url]
* @param [array] $data [发送数据]
* @return [json] [请求返回数据]
*/
public static function HttpRequest($url, $data)
{
$ret = CurlPost($url, $data);
if($ret['code'] != 0)
{
return $ret;
}
$data = json_decode($ret['data'], true);
if(empty($data))
{
return DataReturn(MyLang('common_service.packageinstall.store_respond_error_tips').(empty($ret['data']) ? '' : '('.$ret['data'].')'), -1);
}
return $data;
}
}
?>