235 lines
8.3 KiB
PHP
Executable File
235 lines
8.3 KiB
PHP
Executable File
<?php
|
|
|
|
namespace Admin\Controller;
|
|
use Gy_Library\GyListController;
|
|
use Qscmf\Core\QsRbac;;
|
|
|
|
class AddonsController extends GyListController{
|
|
|
|
public function index(){
|
|
$addons_model = D('Addons');
|
|
$list = $addons_model->getAllAddonsList();
|
|
|
|
|
|
int_to_string($list, array('status'=>array(-1=>'损坏', 0=>'禁用', 1=>'启用', -2=>'未安装')));
|
|
if($list === false){
|
|
$this->error($addons_model->getError());
|
|
}
|
|
|
|
$count = $list? count($list) : 1 ;
|
|
$per_page = C('ADMIN_PER_PAGE_NUM', null, false);
|
|
if($per_page === false){
|
|
$page = new \Gy_Library\GyPage($count);
|
|
}
|
|
else{
|
|
$page = new \Gy_Library\GyPage($count, $per_page);
|
|
}
|
|
$data_list = array_slice($list, $page->firstRow, $page->listRows);
|
|
$builder = new \Qscmf\Builder\ListBuilder();
|
|
$builder->setMetaTitle('插件列表')
|
|
->setNID(307)
|
|
->setCheckBox(false)
|
|
->addTableColumn('title', '名称')
|
|
->addTableColumn('name', '标识')
|
|
->addTableColumn('description', '描述')
|
|
->addTableColumn('status_text', '状态')
|
|
->addTableColumn('author', '作者')
|
|
->addTableColumn('version', '版本')
|
|
->addTableColumn('right_button', '操作', 'btn')
|
|
->setTableDataList($data_list)
|
|
->setTableDataPage($page->show()) // 数据列表分页
|
|
->addRightButton('self', array('title' => '设置', 'href' => U('config', array('id' => '__data_id__')), 'class' => 'label label-primary', '{key}' => 'config', '{condition}' => 'neq', '{value}' => 'null'))
|
|
->addRightButton('forbid')
|
|
->addRightButton('self', array('title' => '卸载', 'href' => U('uninstall', array('id' => '__data_id__')), 'class' => 'label label-danger'))
|
|
->alterTableData( // 修改列表数据
|
|
array('key' => 'uninstall', 'value' => 1),
|
|
array('right_button' => '<a class="label label-warning" href="' . U('/admin/addons/install/addon_name/__name__') . '">安装</a>')
|
|
)
|
|
->display();
|
|
}
|
|
|
|
public function install($addon_name){
|
|
parent::autoCheckToken();
|
|
$class = get_addon_class($addon_name);
|
|
if (!class_exists($class)) {
|
|
$this->error('插件不存在');
|
|
}
|
|
$addons = new $class;
|
|
$info = $addons->info;
|
|
$hooks = $addons->hooks;
|
|
|
|
// 检测信息的正确性
|
|
if (!$info || !$addons->checkInfo()){
|
|
$this->error('插件信息缺失');
|
|
}
|
|
|
|
$install_flag = $addons->install();
|
|
if (!$install_flag) {
|
|
$this->error('执行插件预安装操作失败'.$addons->getError());
|
|
}
|
|
|
|
if(is_array($addons->admin_list) && $addons->admin_list !== array()){
|
|
$info['has_adminlist'] = 1;
|
|
}else{
|
|
$info['has_adminlist'] = 0;
|
|
}
|
|
|
|
$addons_model = D('Addons');
|
|
$r = $addons_model->createAdd($info);
|
|
|
|
if($r === false){
|
|
$this->error($addons_model->getError());
|
|
}
|
|
|
|
|
|
|
|
$config = array('config'=>json_encode($addons->getConfig()));
|
|
$addons_model->where("name='{$addon_name}'")->save($config);
|
|
|
|
$this->success('安装成功');
|
|
}
|
|
|
|
public function uninstall($id){
|
|
$addons_ent = D('Addons')->find($id);
|
|
if(!$addons_ent){
|
|
E('数据不存在');
|
|
}
|
|
|
|
$class = get_addon_class($addons_ent['name']);
|
|
if(!class_exists($class)){
|
|
E('插件不存在');
|
|
}
|
|
|
|
$addons = new $class;
|
|
$r = $addons->uninstall();
|
|
if($r === false){
|
|
$this->error($addons->getError());
|
|
}
|
|
|
|
$r = D('Addons')->where("name='{$addons_ent['name']}'")->delete();
|
|
if($r === false){
|
|
$this->error('卸载插件失败');
|
|
}
|
|
else{
|
|
$this->success('卸载成功');
|
|
}
|
|
}
|
|
|
|
public function config($id){
|
|
if(IS_POST){
|
|
parent::autoCheckToken();
|
|
|
|
$config = I('post.config');
|
|
$flag = D('Addons')->where("id={$id}")->setField('config',json_encode($config));
|
|
if($flag !== false){
|
|
$this->success('保存成功', U('index'));
|
|
}else{
|
|
$this->error('保存失败');
|
|
}
|
|
}
|
|
else{
|
|
$addons_ent = D('Addons')->find($id);
|
|
$addon_class = get_addon_class($addons_ent['name']);
|
|
if(!$addons_ent || !class_exists($addon_class)){
|
|
E('插件不存在');
|
|
}
|
|
|
|
$data = new $addon_class;
|
|
$addons_ent['addon_path'] = $data->addon_path;
|
|
$addons_ent['custom_config'] = $data->custom_config;
|
|
$db_config = $addons_ent['config'];
|
|
$db_config = json_decode($db_config, true);
|
|
$addons_ent['config'] = include $data->config_file;
|
|
|
|
$builder = new \Qscmf\Builder\FormBuilder();
|
|
$builder->setMetaTitle('设置插件-' . $data->info['title'])
|
|
->setNID(307);
|
|
|
|
// if($addons_ent['custom_config']){
|
|
// $data->displayConfig();
|
|
// return;
|
|
// }
|
|
foreach($addons_ent['config'] as $key => $value){
|
|
if($value['type'] == 'group'){
|
|
foreach($value['options'] as $k => &$v){
|
|
foreach($v['options'] as $kk => &$vv){
|
|
$vv['name'] = 'config[' . $kk . ']';
|
|
$vv['value'] = $db_config[$kk];
|
|
}
|
|
}
|
|
}
|
|
|
|
$builder->addFormItem('config[' . $key . ']', $value['type'], $value['title'], $value['remark'], $value['options']);
|
|
}
|
|
|
|
foreach($db_config as $ck => $cv){
|
|
$db_config['config[' . $ck . ']'] = $cv;
|
|
}
|
|
$builder->setFormData($db_config)
|
|
->setPostUrl(U('config', array('id' => $id))) // 设置表单提交地址
|
|
->display();
|
|
}
|
|
}
|
|
|
|
|
|
// public function adminList($addon_name, $controller, $action){
|
|
//
|
|
// }
|
|
|
|
public function forbid(){
|
|
$ids = I('ids');
|
|
if(!$ids){
|
|
$this->error('请选择要禁用的数据');
|
|
}
|
|
$r = parent::_forbid($ids);
|
|
if($r !== false){
|
|
$map['id'] = array('in', explode(',', $ids));
|
|
$names = M('Addons')->where($map)->getField('name', true);
|
|
syslogs('禁用插件:' . implode(',', $names));
|
|
$this->success('禁用成功');
|
|
}
|
|
else{
|
|
$this->error($this->_getError());
|
|
}
|
|
}
|
|
|
|
public function resume(){
|
|
$ids = I('ids');
|
|
if(!$ids){
|
|
$this->error('请选择要启用的数据');
|
|
}
|
|
$r = parent::_resume($ids);
|
|
if($r !== false){
|
|
$map['id'] = array('in', explode(',', $ids));
|
|
$names = M('Addons')->where($map)->getField('name', true);
|
|
syslogs('启用插件:' . implode(',', $names));
|
|
$this->success('启用成功');
|
|
}
|
|
else{
|
|
$this->error($this->_getError());
|
|
}
|
|
|
|
}
|
|
|
|
public function execute($_addons = null, $_controller = null, $_action = null){
|
|
if(!QsRbac::AccessDecision('admin', $_controller, $_action)){
|
|
E(l('no_auth'));
|
|
}
|
|
|
|
if(C('URL_CASE_INSENSITIVE')){
|
|
$_addons = ucfirst(parse_name($_addons, 1));
|
|
$_controller = parse_name($_controller,1);
|
|
}
|
|
|
|
$TMPL_PARSE_STRING = C('TMPL_PARSE_STRING');
|
|
$TMPL_PARSE_STRING['__ADDONROOT__'] = __ROOT__ . "/Addons/{$_addons}";
|
|
C('TMPL_PARSE_STRING', $TMPL_PARSE_STRING);
|
|
|
|
if(!empty($_addons) && !empty($_controller) && !empty($_action)){
|
|
$Addons = A("Addons://{$_addons}/{$_controller}")->$_action();
|
|
} else {
|
|
$this->error('没有指定插件名称,控制器或操作!');
|
|
}
|
|
}
|
|
}
|