skycaiji/SkycaijiApp/admin/controller/App.php

233 lines
6.5 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

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