skycaiji/SkycaijiApp/admin/controller/App.php

233 lines
6.5 KiB
PHP
Raw Normal View History

2019-06-23 02:56:18 +00:00
<?php
/*
|--------------------------------------------------------------------------
| SkyCaiji (蓝天采集器)
|--------------------------------------------------------------------------
| Copyright (c) 2018 https://www.skycaiji.com All rights reserved.
|--------------------------------------------------------------------------
| 使用协议 https://www.skycaiji.com/licenses
|--------------------------------------------------------------------------
*/
namespace skycaiji\admin\controller;
class App extends BaseController {
public function manageAction(){
$app=input('app');
$navid=input('navid',null);
if(empty($app)){
$this->error('app标识错误');
}
$mapp=model('App');
$appData=$mapp->getByApp($app);
if(empty($appData)){
$this->error('应用未安装');
}
$appUrl=config('root_website').'/app/'.$app.'/';
$navPacks=array();
if(is_array($appData['config']['packs'])){
$manageUrl=url('App/manage?app='.$app);
$manageUrl.=strpos($manageUrl,'?')===false?'?':'&';
foreach ($appData['config']['packs'] as $k=>$v){
if($v['type']=='nav'){
$v['nav_link']=str_replace(array('{app}','{apps}'), array(config('root_website').'/app/'.$app.'/',config('root_website').'/app/'),$v['nav_link']);
if(!preg_match('/^\w+\:\/\//', $v['nav_link'])){
$v['nav_link']=$appUrl.$v['nav_link'];
}
if(isset($navid)&&$navid==$k){
$v['is_current']=true;
}
$navPacks[$k]=$v;
}
}
}
$provData=null;
$mprov=model('Provider');
if($appData['provider_id']>0){
$provData=$mprov->where('id',$appData['provider_id'])->find();
}
$appClass=$mapp->app_class($app);
if(is_object($appClass)){
if(version_compare($appClass->config['version'], $appData['config']['version'],'>')===true){
$this->assign('newest_version',$appClass->config['version']);
}
$appData['app_class']=$mapp->get_class_vars($appClass);
}
$this->assign('app',$app);
$this->assign('appUrl',$appUrl);
$this->assign('navid',$navid);
$this->assign('navPacks',$navPacks);
$this->assign('appData',$appData);
$this->assign('provData',$provData);
return $this->fetch();
}
/*协议*/
public function agreementAction(){
$app=input('app');
$appClass=model('App')->app_class($app);
$this->assign('app',$app);
$this->assign('name',$appClass->config['name']);
$this->assign('agreement',$appClass->config['agreement']);
return $this->fetch('agreement');
}
/*安装*/
public function installAction(){
$app=input('app');
$success=input('success');
if(empty($app)){
$this->error('app标识错误');
}
$mapp=model('App');
if(!$mapp->right_app($app)){
$this->error('抱歉app标识不规范');
}
if($mapp->where('app',$app)->count()>0){
$this->success('该应用已安装!','Mystore/app');
}
$appClass=$mapp->app_class($app);
if(!is_object($appClass)||empty($appClass->install)){
$this->error('不存在安装接口!');
}
if(!empty($appClass->config['phpv'])){
if(version_compare(PHP_VERSION, $appClass->config['phpv'],'<')){
$this->error('抱歉该应用要求PHP版本最低'.$appClass->config['phpv']);
}
}
if($appClass->install!='1'){
if(!$success){
$apiUrl=config('root_url').'/app/'.$app.'/'.$appClass->install;
$this->assign('app',$app);
$this->assign('op','install');
$this->assign('apiUrl',$apiUrl);
return $this->fetch('apiop');
}
}
$newData=array(
'app'=>$app,
'addtime'=>time(),
'uptime'=>time(),
'provider_id'=>model('Provider')->getIdByUrl($appClass->config['website'])
);
$mapp->isUpdate(false)->allowField(true)->save($newData);
if($mapp->id>0){
$mapp->set_config($app,$appClass->config);
$this->success('恭喜!安装成功','Mystore/app');
}else{
$this->error('安装失败!');
}
}
/*卸载应用*/
public function uninstallAction(){
$app=input('app');
$success=input('success');
if(empty($app)){
$this->error('app标识错误');
}
$mapp=model('App');
if($mapp->where('app',$app)->count()<=0){
$this->success('该应用已卸载!','Mystore/app');
}
$appClass=$mapp->app_class($app);
if(!is_object($appClass)){
$mapp->deleteByApp($app);
$this->success('卸载成功');
}
if(empty($appClass->uninstall)){
$this->error('不存在卸载接口!');
}
if($appClass->uninstall!='1'){
if(!$success){
$apiUrl=config('root_url').'/app/'.$app.'/'.$appClass->uninstall;
$this->assign('app',$app);
$this->assign('op','uninstall');
$this->assign('apiUrl',$apiUrl);
return $this->fetch('apiop');
}
}
$mapp->deleteByApp($app);
$this->success('卸载成功您可以手动删除app/'.$app.'目录彻底清除应用');
}
/*升级应用*/
public function upgradeAction(){
$app=input('app');
$success=input('success');
if(empty($app)){
$this->error('app标识错误');
}
$mapp=model('App');
$appData=$mapp->getByApp($app);
if(empty($appData)){
$this->success('请先安装应用!','Mystore/app');
}
$appClass=$mapp->app_class($app);
if(!is_object($appClass)||empty($appClass->upgrade)){
$this->error('不存在升级接口!');
}
$referer=\think\Request::instance()->server('HTTP_REFERER',null,null);
if(version_compare($appClass->config['version'], $appData['config']['version'],'=')===true){
$this->success('已升级!',$referer);
}
if($appClass->upgrade!='1'){
if(!$success){
$apiUrl=config('root_url').'/app/'.$app.'/'.$appClass->upgrade;
$this->assign('app',$app);
$this->assign('op','upgrade');
$this->assign('apiUrl',$apiUrl);
return $this->fetch('apiop');
}
}
$mapp->strict(false)->where('app',$app)->update(array(
'uptime'=>time(),
'provider_id'=>model('Provider')->getIdByUrl($appClass->config['website'])
));
$mapp->set_config($app,$appClass->config);
$this->success('恭喜!升级成功',$referer);
}
/*开启、关闭应用*/
public function enableAction(){
$app=input('app');
$enable=input('enable/d',0);
if(empty($app)){
$this->error('app标识错误');
}
$mapp=model('App');
$enable=$enable?1:0;
$mapp->set_config($app,array('enable'=>$enable));
$referer=\think\Request::instance()->server('HTTP_REFERER',null,null);
$this->success('应用已'.($enable?'开启':'关闭'),$referer);
}
2019-06-23 02:20:58 +00:00
}