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); } }