217 lines
5.6 KiB
PHP
Executable File
217 lines
5.6 KiB
PHP
Executable File
<?php
|
|
/*
|
|
* @link http://kodcloud.com/
|
|
* @author warlee | e-mail:kodcloud@qq.com
|
|
* @copyright warlee 2014.(Shanghai)Co.,Ltd
|
|
* @license http://kodcloud.com/tools/license/license.txt
|
|
*
|
|
*
|
|
* 插件管理:页面;列表;
|
|
*/
|
|
|
|
class pluginApp extends Controller{
|
|
function __construct() {
|
|
parent::__construct();
|
|
}
|
|
|
|
//?pluginApp/to/epubReader/index&a=1
|
|
//?pluginApp/to/epubReader/&a=1 ==>ignore index;
|
|
public function to() {
|
|
$route = $this->in['URLremote'];
|
|
if(count($route) >= 3){
|
|
$app = $route[2];
|
|
$action = $route[3];
|
|
|
|
if(count($route) == 3){
|
|
$action = 'index';
|
|
}
|
|
$model = $this->loadModel('Plugin');
|
|
if(!$model->checkAuth($app)){
|
|
if(!$_SESSION['kodLogin']){
|
|
show_tips("出错了!您尚未登录",APP_HOST,3);
|
|
}
|
|
show_tips("出错了!插件未开启,或您没有{$app}插件的权限");
|
|
}
|
|
|
|
$appConfig = $model->getConfig($app);
|
|
if(!$appConfig['pluginAuthOpen'] && !$this->checkAccessPlugin()){
|
|
if(!$_SESSION['kodLogin']){
|
|
show_tips("出错了!您尚未登录",APP_HOST,3);
|
|
}
|
|
show_tips("出错了!插件未开启,或您没有{$app}插件的权限");
|
|
}
|
|
Hook::apply($app.'Plugin.'.$action);
|
|
}
|
|
}
|
|
|
|
//权限认证
|
|
private function checkAccessPlugin(){
|
|
if( $_SESSION['kodLogin'] == true ||
|
|
$_SESSION['accessPlugin'] == 'ok' ||
|
|
$this->checkAccessShare()
|
|
){
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
private function checkAccessShare(){
|
|
if(!isset($this->in['path'])){
|
|
return false;
|
|
}
|
|
$share = KOD_USER_SHARE;
|
|
if(substr($this->in['path'],0,strlen($share)) == $share){
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
//plugin manager
|
|
public function index() {
|
|
$this->display('index.html');
|
|
}
|
|
|
|
public function appList(){
|
|
$model = $this->loadModel('Plugin');
|
|
$list = $model->viewList();
|
|
show_json($list);
|
|
}
|
|
|
|
public function changeStatus(){
|
|
if( !isset($this->in['app']) ||
|
|
!isset($this->in['status'])){
|
|
show_json(LNG('data_not_full'),false);
|
|
}
|
|
$app = $this->in['app'];
|
|
$status = $this->in['status']?1:0;
|
|
$model = $this->loadModel('Plugin');
|
|
|
|
//启用插件则检测配置文件,必填字段是否为空;为空则调用配置
|
|
if($status){
|
|
$config = $model->getConfig($app);
|
|
$package = $model->getPackageJson($app);
|
|
$needConfig = false;
|
|
foreach($package['configItem'] as $key=>$item) {
|
|
if( (isset($item['require']) && $item['require']) &&
|
|
(!isset($item['value']) || $item['value'] === '' || $item['value'] === null) &&
|
|
(!isset($config[$key]) || $config[$key] == "")
|
|
){
|
|
$needConfig = true;
|
|
break;
|
|
}
|
|
}
|
|
if($needConfig){
|
|
show_json('needConfig',false);
|
|
}
|
|
}
|
|
$model->changeStatus($app,$status);
|
|
$list = $model->viewList();
|
|
show_json($list);
|
|
}
|
|
|
|
public function setConfig(){
|
|
if( !$this->in['app'] ||
|
|
!$this->in['value']){
|
|
show_json(LNG('data_not_full'),false);
|
|
}
|
|
$json = $this->in['value'];
|
|
$app = $this->in['app'];
|
|
$model = $this->loadModel('Plugin');
|
|
|
|
//重置为默认配置
|
|
if($json == 'reset'){
|
|
$json = $model->getConfigDefault($app);
|
|
}else{
|
|
if(!is_array($json)){
|
|
show_json($json,false);
|
|
}
|
|
}
|
|
$model->changeStatus($app,1);
|
|
$model->setConfig($app,$json);
|
|
show_json(LNG('success'));
|
|
}
|
|
|
|
// download=>fileSize=>unzip=>remove
|
|
public function install(){
|
|
$app = _DIR_CLEAR($this->in['app']);
|
|
$appPath = PLUGIN_DIR.$app.'.zip';
|
|
$appPathTemp = $appPath.'.downloading';
|
|
switch($this->in['step']){
|
|
case 'check':
|
|
$info = $this->pluginInfo($app);
|
|
if(!is_array($info)){
|
|
show_json(false,false);
|
|
}
|
|
echo json_encode($info);
|
|
break;
|
|
case 'download':
|
|
if(!is_writable(PLUGIN_DIR)){
|
|
show_json(LNG("no_permission_write").': '.PLUGIN_DIR,false);
|
|
}
|
|
$info = $this->pluginInfo($app);
|
|
if(!$info || !$info['code']){
|
|
show_json(LNG('error'),false);
|
|
}
|
|
$result = Downloader::start($info['data'],$appPath);
|
|
show_json($result['data'],!!$result['code'],$app);
|
|
break;
|
|
case 'fileSize':
|
|
if(file_exists($appPath)){
|
|
show_json(filesize($appPath));
|
|
}
|
|
if(file_exists($appPathTemp)){
|
|
show_json(filesize($appPathTemp));
|
|
}
|
|
show_json(0,false);
|
|
break;
|
|
case 'unzip':
|
|
//hook log
|
|
$GLOBALS['isRoot'] = 1;
|
|
if(!file_exists($appPath)){
|
|
show_json(LNG("error"),false);
|
|
}
|
|
$result = KodArchive::extract($appPath,PLUGIN_DIR.$app.'/');
|
|
del_file($appPathTemp);
|
|
del_file($appPath);
|
|
show_json($result['data'],!!$result['code']);
|
|
break;
|
|
case 'remove':
|
|
del_file($appPathTemp);
|
|
del_file($appPath);
|
|
show_json(LNG('success'));
|
|
break;
|
|
case 'update':
|
|
show_json(Hook::apply($app.'Plugin.update'));
|
|
break;
|
|
default:break;
|
|
}
|
|
}
|
|
private function pluginInfo($app){
|
|
$api = $this->config['settings']['pluginServer'].'plugin/install';
|
|
$param = array(
|
|
"app" => $app,
|
|
"version" => KOD_VERSION,
|
|
"versionHash" => $this->config['settingSystem']['versionHash'],
|
|
"systemOS" => $this->config['systemOS'],
|
|
"phpVersion" => PHP_VERSION,
|
|
"lang" => I18n::getType()
|
|
);
|
|
$info = url_request($api,'POST',$param);
|
|
$result = false;
|
|
if($info && $info['data']){
|
|
$result = json_decode($info['data'],true);
|
|
}
|
|
return $result;
|
|
}
|
|
|
|
public function unInstall(){
|
|
if( !$this->in['app']){
|
|
show_json(LNG('data_not_full'),false);
|
|
}
|
|
$model = $this->loadModel('Plugin');
|
|
$model->remove($this->in['app']);
|
|
del_dir(PLUGIN_DIR.$this->in['app']);
|
|
$list = $model->viewList();
|
|
show_json($list);
|
|
}
|
|
}
|