插件新增回调事件
parent
fd9e53cccd
commit
143f8bbf29
|
|
@ -133,13 +133,14 @@ class PluginsAdminService
|
|||
}
|
||||
|
||||
// 数据处理
|
||||
$config = self::GetPluginsConfig($params['id']);;
|
||||
$plugins = $params['id'];
|
||||
$config = self::GetPluginsConfig($plugins);
|
||||
if($config !== false && !empty($config['base']) && !empty($config['base']['name']))
|
||||
{
|
||||
$cache = PluginsService::PluginsCacheData($params['id']);
|
||||
$cache = PluginsService::PluginsCacheData($plugins);
|
||||
$data = [
|
||||
'name' => $config['base']['name'],
|
||||
'plugins' => $params['id'],
|
||||
'plugins' => $plugins,
|
||||
'data' => empty($cache) ? '' : json_encode($cache),
|
||||
'is_enable' => 0,
|
||||
'add_time' => time(),
|
||||
|
|
@ -148,6 +149,9 @@ class PluginsAdminService
|
|||
// 添加数据
|
||||
if(Db::name('Plugins')->insertGetId($data) > 0)
|
||||
{
|
||||
// 插件事件回调
|
||||
PluginsService::PluginsEventCall($plugins, 'Install', $params);
|
||||
|
||||
return DataReturn('安装成功');
|
||||
} else {
|
||||
return DataReturn('安装失败', -100);
|
||||
|
|
@ -178,7 +182,8 @@ class PluginsAdminService
|
|||
Db::startTrans();
|
||||
|
||||
// 开始卸载
|
||||
if(DB::name('Plugins')->where(['plugins'=>$params['id']])->delete())
|
||||
$plugins = $params['id'];
|
||||
if(DB::name('Plugins')->where(['plugins'=>$plugins])->delete())
|
||||
{
|
||||
// 钩子部署
|
||||
$ret = self::PluginsHookDeployment();
|
||||
|
|
@ -186,6 +191,10 @@ class PluginsAdminService
|
|||
{
|
||||
// 提交事务
|
||||
Db::commit();
|
||||
|
||||
// 插件事件回调
|
||||
PluginsService::PluginsEventCall($plugins, 'Uninstall', $params);
|
||||
|
||||
return DataReturn('卸载成功');
|
||||
}
|
||||
} else {
|
||||
|
|
@ -391,13 +400,14 @@ class PluginsAdminService
|
|||
}
|
||||
|
||||
// 应用是否存在
|
||||
if(!file_exists(APP_PATH.'plugins'.DS.$params['id']))
|
||||
$plugins = $params['id'];
|
||||
if(!file_exists(APP_PATH.'plugins'.DS.$plugins))
|
||||
{
|
||||
return DataReturn('应用不存在', -10);
|
||||
}
|
||||
|
||||
// 获取应用标记
|
||||
$data = Db::name('Plugins')->where(['plugins'=>$params['id']])->find();
|
||||
$data = Db::name('Plugins')->where(['plugins'=>$plugins])->find();
|
||||
if(!empty($data['is_enable']))
|
||||
{
|
||||
return DataReturn('请先卸载应用', -10);
|
||||
|
|
@ -408,16 +418,16 @@ class PluginsAdminService
|
|||
if($ret['code'] == 0)
|
||||
{
|
||||
// 是否需要删除应用数据,sql运行
|
||||
$is_delete_static = (isset($params['value']) && $params['value'] == 1);
|
||||
$is_delete_data = (isset($params['value']) && $params['value'] == 1);
|
||||
|
||||
// 删除数据
|
||||
if($is_delete_static === true)
|
||||
if($is_delete_data === true)
|
||||
{
|
||||
// 删除缓存
|
||||
PluginsService::PluginsCacheDelete($params['id']);
|
||||
PluginsService::PluginsCacheDelete($plugins);
|
||||
|
||||
// 执行卸载sql
|
||||
$uninstall_sql = APP_PATH.'plugins'.DS.$params['id'].DS.'uninstall.sql';
|
||||
$uninstall_sql = APP_PATH.'plugins'.DS.$plugins.DS.'uninstall.sql';
|
||||
if(file_exists($uninstall_sql))
|
||||
{
|
||||
SqlconsoleService::Implement(['sql'=>file_get_contents($uninstall_sql)]);
|
||||
|
|
@ -425,10 +435,13 @@ class PluginsAdminService
|
|||
}
|
||||
|
||||
// 删除数据库附件
|
||||
ResourcesService::AttachmentPathTypeDelete('plugins_'.$params['id']);
|
||||
ResourcesService::AttachmentPathTypeDelete('plugins_'.$plugins);
|
||||
|
||||
// 删除应用文件
|
||||
self::PluginsResourcesDelete($params['id'], $is_delete_static);
|
||||
self::PluginsResourcesDelete($plugins, $is_delete_data);
|
||||
|
||||
// 插件事件回调
|
||||
PluginsService::PluginsEventCall($plugins, 'Delete', $params);
|
||||
|
||||
return DataReturn('删除成功');
|
||||
}
|
||||
|
|
@ -443,9 +456,9 @@ class PluginsAdminService
|
|||
* @date 2019-02-13
|
||||
* @desc description
|
||||
* @param [string] $plugins [唯一标记]
|
||||
* @param [boolean] $is_delete_static [是否删除应用数据]
|
||||
* @param [boolean] $is_delete_data [是否删除应用数据]
|
||||
*/
|
||||
private static function PluginsResourcesDelete($plugins, $is_delete_static = false)
|
||||
private static function PluginsResourcesDelete($plugins, $is_delete_data = false)
|
||||
{
|
||||
\base\FileUtil::UnlinkDir(APP_PATH.'plugins'.DS.$plugins);
|
||||
\base\FileUtil::UnlinkDir(APP_PATH.'plugins'.DS.'view'.DS.$plugins);
|
||||
|
|
@ -454,7 +467,7 @@ class PluginsAdminService
|
|||
\base\FileUtil::UnlinkDir(ROOT.'public'.DS.'static'.DS.'plugins'.DS.'images'.DS.$plugins);
|
||||
|
||||
// 是否需要删除应用数据
|
||||
if($is_delete_static === true)
|
||||
if($is_delete_data === true)
|
||||
{
|
||||
\base\FileUtil::UnlinkDir(ROOT.'public'.DS.'static'.DS.'upload'.DS.'images'.DS.'plugins_'.$plugins);
|
||||
\base\FileUtil::UnlinkDir(ROOT.'public'.DS.'static'.DS.'upload'.DS.'video'.DS.'plugins_'.$plugins);
|
||||
|
|
@ -1039,7 +1052,7 @@ php;
|
|||
];
|
||||
|
||||
// 包名
|
||||
$plugins_name = '';
|
||||
$plugins = '';
|
||||
|
||||
// 开始解压文件
|
||||
$resource = zip_open($_FILES['file']['tmp_name']);
|
||||
|
|
@ -1056,11 +1069,11 @@ php;
|
|||
$file = zip_entry_name($temp_resource);
|
||||
|
||||
// 获取包名
|
||||
if(empty($plugins_name))
|
||||
if(empty($plugins))
|
||||
{
|
||||
// 应用名称
|
||||
$plugins_name = substr($file, 0, strpos($file, '/'));
|
||||
if(empty($plugins_name))
|
||||
$plugins = substr($file, 0, strpos($file, '/'));
|
||||
if(empty($plugins))
|
||||
{
|
||||
// 应用名称为空、则校验是否为支付插件
|
||||
$file_size = zip_entry_filesize($temp_resource);
|
||||
|
|
@ -1075,7 +1088,7 @@ php;
|
|||
}
|
||||
|
||||
// 应用不存在则添加
|
||||
$ret = self::PluginsVerification($plugins_name);
|
||||
$ret = self::PluginsVerification($plugins);
|
||||
if($ret['code'] != 0)
|
||||
{
|
||||
zip_entry_close($temp_resource);
|
||||
|
|
@ -1083,7 +1096,7 @@ php;
|
|||
}
|
||||
|
||||
// 应用是否存在
|
||||
$ret = self::PluginsExist($plugins_name);
|
||||
$ret = self::PluginsExist($plugins);
|
||||
if($ret['code'] != 0)
|
||||
{
|
||||
zip_entry_close($temp_resource);
|
||||
|
|
@ -1116,7 +1129,7 @@ php;
|
|||
}
|
||||
|
||||
// 匹配成功文件路径处理、跳出循环
|
||||
$file = str_replace($plugins_name.'/'.$dir_key.'/', '', $dir_value.$file);
|
||||
$file = str_replace($plugins.'/'.$dir_key.'/', '', $dir_value.$file);
|
||||
$is_has_find = true;
|
||||
break;
|
||||
}
|
||||
|
|
@ -1150,15 +1163,18 @@ php;
|
|||
}
|
||||
|
||||
// 附件同步到数据库
|
||||
ResourcesService::AttachmentDiskFilesToDb('plugins_'.$plugins_name);
|
||||
ResourcesService::AttachmentDiskFilesToDb('plugins_'.$plugins);
|
||||
|
||||
// sql运行
|
||||
$install_sql = APP_PATH.'plugins'.DS.$plugins_name.DS.'install.sql';
|
||||
if(!empty($plugins_name) && file_exists($install_sql))
|
||||
$install_sql = APP_PATH.'plugins'.DS.$plugins.DS.'install.sql';
|
||||
if(!empty($plugins) && file_exists($install_sql))
|
||||
{
|
||||
SqlconsoleService::Implement(['sql'=>file_get_contents($install_sql)]);
|
||||
}
|
||||
|
||||
// 插件事件回调
|
||||
PluginsService::PluginsEventCall($plugins, 'Upload', $params);
|
||||
|
||||
return DataReturn('安装成功');
|
||||
}
|
||||
|
||||
|
|
@ -1326,7 +1342,11 @@ php;
|
|||
// 开始下载
|
||||
if(\base\FileUtil::DownloadFile($new_dir.'.zip', $config['base']['name'].'.zip'))
|
||||
{
|
||||
// 删除文件
|
||||
@unlink($new_dir.'.zip');
|
||||
|
||||
// 插件事件回调
|
||||
PluginsService::PluginsEventCall($plugins, 'Download', $params);
|
||||
} else {
|
||||
return DataReturn('下载失败', -100);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -310,7 +310,49 @@ class PluginsService
|
|||
}
|
||||
|
||||
// 调用方法仅传递请求参数
|
||||
if(isset($params['data_request']))
|
||||
if(!empty($params) && isset($params['data_request']))
|
||||
{
|
||||
$params = $params['data_request'];
|
||||
}
|
||||
return DataReturn('调用成功', 0, $obj->$action($params));
|
||||
}
|
||||
|
||||
/**
|
||||
* 应用控制器调用
|
||||
* @author Devil
|
||||
* @blog http://gong.gg/
|
||||
* @version 1.0.0
|
||||
* @date 2020-01-02
|
||||
* @param [string] $plugins [应用标记]
|
||||
* @param [string] $action [事件方法(Upload 上传, Install 安装, Uninstall 卸载, Download 下载, Delete 删除)]
|
||||
* @param [array] $params [输入参数]
|
||||
*/
|
||||
public static function PluginsEventCall($plugins, $action, $params = [])
|
||||
{
|
||||
// 应用校验
|
||||
$ret = self::PluginsCheck($plugins);
|
||||
if($ret['code'] != 0)
|
||||
{
|
||||
return $ret;
|
||||
}
|
||||
|
||||
// 应用事件
|
||||
$plugins = '\app\plugins\\'.$plugins.'\\Event';
|
||||
if(!class_exists($plugins))
|
||||
{
|
||||
return DataReturn('应用事件未定义['.$plugins.']', -1);
|
||||
}
|
||||
|
||||
// 调用方法
|
||||
$action = ucfirst($action);
|
||||
$obj = new $plugins($params);
|
||||
if(!method_exists($obj, $action))
|
||||
{
|
||||
return DataReturn('应用事件方法未定义['.$action.']', -1);
|
||||
}
|
||||
|
||||
// 调用方法仅传递请求参数
|
||||
if(!empty($params) && isset($params['data_request']))
|
||||
{
|
||||
$params = $params['data_request'];
|
||||
}
|
||||
|
|
|
|||
|
|
@ -11,12 +11,14 @@
|
|||
|
||||
web端
|
||||
1. 编辑器图片、附件、视频多选支持按照顺序选择插入编辑器
|
||||
2. 插件、主题下载新增历史信息记录
|
||||
3. 插件(上传、安装、卸载、删除)新增回调事件
|
||||
|
||||
小程序
|
||||
1.
|
||||
|
||||
插件
|
||||
1.
|
||||
1. 应用商店
|
||||
|
||||
|
||||
+=========================================================+
|
||||
|
|
|
|||
Loading…
Reference in New Issue