why.xingtongworld.com项目
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

177 lines
5.6 KiB

<?php
// +----------------------------------------------------------------------
// | YFCMF [ WE CAN DO IT MORE SIMPLE ]
// +----------------------------------------------------------------------
// | Copyright (c) 2015-2016 http://www.rainfer.cn All rights reserved.
// +----------------------------------------------------------------------
// | Author: rainfer <81818832@qq.com>
// +----------------------------------------------------------------------
namespace app\admin\controller;
use think\Db;
use app\common\model\Addon as AddonModel;
use app\common\model\HookAddon as HookAddonModel;
/**
* 插件后台管理页面
*/
class Addons extends Base
{
/**
* 插件列表
*/
public function addons_list()
{
$addons_model=new AddonModel;
$addons=$addons_model->getAll();
$this->assign('addons',$addons);
return $this->fetch();
}
/**
* 安装插件
*/
public function install()
{
$addon_name = input('name','');
if ($addon_name == '') $this->error('插件不存在!');
$addon_class = get_addon_class($addon_name);
if (!class_exists($addon_class)) $this->error('插件不存在!');
// 实例化插件
$addon = new $addon_class;
// 插件预安装
if(!$addon->install()) $this->error('插件预安装失败!'. $addon->getError());
// 添加钩子
if (isset($addon->hooks) && $addon->hooks) {
if (!HookAddonModel::addHooks($addon->hooks, $addon_name)) {
$this->error('安装插件钩子时出现错误');
}
cache('hook_addons', null);
}
// 执行安装插件sql文件
$sql_file = realpath(ADDON_PATH.$addon_name.'/install.sql');
if (file_exists($sql_file)) {
if (isset($addon->database_prefix) && $addon->database_prefix != '') {
db_restore_file($sql_file,$addon->database_prefix);
} else {
db_restore_file($sql_file);
}
}
// 插件配置信息
$addon_info = $addon->info;
if(!$addon->checkInfo()) $this->error('插件信息不完整');
// 并入插件配置值
$addon_info['config'] = $addon->getConfig();
//插件管理操作
if(property_exists($addon,'admin_actions')){
$addon_info['admin_actions']=$addon->admin_actions;
}
// 将插件信息写入数据库
if (AddonModel::create($addon_info)) {
cache('addon_all',null);
$this->success('插件安装成功');
} else {
$this->error('插件安装失败');
}
}
/**
* 卸载插件
*/
public function uninstall()
{
$addon_name = input('name','');
if ($addon_name == '') $this->error('插件不存在!');
$class = get_addon_class($addon_name);
if (!class_exists($class)) $this->error('插件不存在!');
// 实例化插件
$addon = new $class;
// 插件预卸
if(!$addon->uninstall()) {
$this->error('插件预卸载失败!原因:'. $addon->getError());
}
// 卸载插件自带钩子
if (isset($addon->hooks) && $addon->hooks) {
if (false === HookAddonModel::deleteHooks($addon_name)) {
$this->error('卸载插件钩子时出现错误');
}
cache('hook_addons', null);
}
// 执行卸载插件sql文件
$sql_file = realpath(config('plugin_path').$addon_name.'/uninstall.sql');
if (file_exists($sql_file)) {
if (isset($addon->database_prefix) && $addon->database_prefix != '') {
db_restore_file($sql_file,$addon->database_prefix);
} else {
db_restore_file($sql_file);
}
}
$addon_model=new AddonModel;
// 删除插件信息
if ($addon_model->where('name', $addon_name)->delete()) {
cache('addon_all', null);
$this->success('插件卸载成功');
} else {
$this->error('插件卸载失败');
}
}
/**
* 禁用插件
*/
public function disable()
{
$id=input('id');
if (empty($id)){
$this->error('插件不存在',url('admin/Addons/addons_list'));
}
$rst=Db::name('addon')->where('id',$id)->setField('status',0);
if($rst!==false){
cache('addon_all',null);
cache('hook_addons',null);
$this->success('禁用成功',url('admin/Addons/addons_list'));
}else{
$this->error('禁用失败',url('admin/Addons/addons_list'));
}
}
/**
* 启用插件
*/
public function enable()
{
$id=input('id');
if (empty($id)){
$this->error('插件不存在',url('admin/Addons/addons_list'));
}
$rst=Db::name('addon')->where('id',$id)->setField('status',1);
if($rst!==false){
cache('addon_all',null);
cache('hook_addons',null);
$this->success('启用成功',url('admin/Addons/addons_list'));
}else{
$this->error('启用失败',url('admin/Addons/addons_list'));
}
}
/**
* 插件排序
*/
public function addons_order()
{
$list=[];
foreach (input('post.') as $id => $sort){
$list[]=['id'=>$id,'sort'=>$sort];
}
$model=new AddonModel;
$model->saveAll($list);
cache('addon_all',null);
$this->success('排序成功',url('admin/Addons/addons_list'));
}
}