pull/1/head
zorlan 2019-06-23 10:56:18 +08:00
parent 6ae73277dc
commit 4214dc2899
21 changed files with 2719 additions and 2719 deletions

View File

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

View File

@ -1,143 +1,143 @@
<?php <?php
/* /*
|-------------------------------------------------------------------------- |--------------------------------------------------------------------------
| SkyCaiji (蓝天采集器) | SkyCaiji (蓝天采集器)
|-------------------------------------------------------------------------- |--------------------------------------------------------------------------
| Copyright (c) 2018 https://www.skycaiji.com All rights reserved. | Copyright (c) 2018 https://www.skycaiji.com All rights reserved.
|-------------------------------------------------------------------------- |--------------------------------------------------------------------------
| 使用协议 https://www.skycaiji.com/licenses | 使用协议 https://www.skycaiji.com/licenses
|-------------------------------------------------------------------------- |--------------------------------------------------------------------------
*/ */
namespace skycaiji\admin\controller; namespace skycaiji\admin\controller;
class Provider extends BaseController { class Provider extends BaseController {
/*第三方平台*/ /*第三方平台*/
public function listAction(){ public function listAction(){
$url=input('url'); $url=input('url');
$title=input('title'); $title=input('title');
$mprovider=model('Provider'); $mprovider=model('Provider');
$cond=array(); $cond=array();
if(!empty($url)){ if(!empty($url)){
$cond['url']=array('like','%'.$url.'%'); $cond['url']=array('like','%'.$url.'%');
} }
if(!empty($title)){ if(!empty($title)){
$cond['title']=array('like','%'.$title.'%'); $cond['title']=array('like','%'.$title.'%');
} }
$list=$mprovider->where($cond)->order('sort desc')->paginate(20,false,paginate_auto_config()); $list=$mprovider->where($cond)->order('sort desc')->paginate(20,false,paginate_auto_config());
$pagenav=$list->render(); $pagenav=$list->render();
$list=$list->all(); $list=$list->all();
$GLOBALS['content_header']='第三方平台'; $GLOBALS['content_header']='第三方平台';
$GLOBALS['breadcrumb']=breadcrumb(array('第三方平台')); $GLOBALS['breadcrumb']=breadcrumb(array('第三方平台'));
$this->assign('list',$list); $this->assign('list',$list);
$this->assign('pagenav',$pagenav); $this->assign('pagenav',$pagenav);
return $this->fetch(); return $this->fetch();
} }
public function deleteAction(){ public function deleteAction(){
$id=input('id/d'); $id=input('id/d');
if(empty($id)){ if(empty($id)){
$this->error('id不存在'); $this->error('id不存在');
} }
$mprovider=model('Provider'); $mprovider=model('Provider');
$mprovider->where('id',$id)->delete(); $mprovider->where('id',$id)->delete();
$this->success(); $this->success();
} }
public function enableAction(){ public function enableAction(){
$id=input('id/d'); $id=input('id/d');
$enable=input('enable/d'); $enable=input('enable/d');
if(empty($id)){ if(empty($id)){
$this->error('id不存在'); $this->error('id不存在');
} }
$mprovider=model('Provider'); $mprovider=model('Provider');
$mprovider->strict(false)->where('id',$id)->update(array('enable'=>$enable)); $mprovider->strict(false)->where('id',$id)->update(array('enable'=>$enable));
$this->success(); $this->success();
} }
public function saveAction(){ public function saveAction(){
$id=input('id/d'); $id=input('id/d');
$mprovider=model('Provider'); $mprovider=model('Provider');
if($id>0){ if($id>0){
$proData=$mprovider->where('id',$id)->find(); $proData=$mprovider->where('id',$id)->find();
if(!empty($proData)){ if(!empty($proData)){
$proData=$proData->toArray(); $proData=$proData->toArray();
} }
$this->assign('proData',$proData); $this->assign('proData',$proData);
} }
if(request()->isPost()){ if(request()->isPost()){
$url=input('url','','strip_tags'); $url=input('url','','strip_tags');
$title=input('title'); $title=input('title');
$sort=input('sort/d',0); $sort=input('sort/d',0);
$enable=input('enable/d',0); $enable=input('enable/d',0);
$domain=\skycaiji\admin\model\Provider::matchDomain($url); $domain=\skycaiji\admin\model\Provider::matchDomain($url);
if(empty($domain)){ if(empty($domain)){
$this->error('网址格式错误'); $this->error('网址格式错误');
} }
if(empty($proData)||strcasecmp($proData['url'], $url)!==0){ if(empty($proData)||strcasecmp($proData['url'], $url)!==0){
if($mprovider->where('url',$url)->count()>0){ if($mprovider->where('url',$url)->count()>0){
$this->error('该网址已存在'); $this->error('该网址已存在');
} }
} }
$domainCond=array( $domainCond=array(
'domain'=>$domain 'domain'=>$domain
); );
if(!empty($proData)){ if(!empty($proData)){
$domainCond['id']=array('<>',$proData['id']); $domainCond['id']=array('<>',$proData['id']);
} }
if($mprovider->where($domainCond)->count()>0){ if($mprovider->where($domainCond)->count()>0){
$this->error($domain.' 域名已存在'); $this->error($domain.' 域名已存在');
} }
if(empty($title)){ if(empty($title)){
$html=get_html($url,null,array('timeout'=>3)); $html=get_html($url,null,array('timeout'=>3));
if(preg_match('/<title[^<>]*>(.*?)<\/title>/i', $html,$title)){ if(preg_match('/<title[^<>]*>(.*?)<\/title>/i', $html,$title)){
$title=strip_tags($title[1]); $title=strip_tags($title[1]);
}else{ }else{
$title=''; $title='';
} }
} }
$newData=array( $newData=array(
'url'=>$url, 'url'=>$url,
'title'=>$title, 'title'=>$title,
'domain'=>$domain, 'domain'=>$domain,
'enable'=>$enable, 'enable'=>$enable,
'sort'=>$sort 'sort'=>$sort
); );
if(empty($proData)){ if(empty($proData)){
$mprovider->isUpdate(false)->allowField(true)->save($newData); $mprovider->isUpdate(false)->allowField(true)->save($newData);
$this->success('添加成功','Provider/list'); $this->success('添加成功','Provider/list');
}else{ }else{
$mprovider->strict(false)->where('id',$id)->update($newData); $mprovider->strict(false)->where('id',$id)->update($newData);
$this->success('修改成功','Provider/list'); $this->success('修改成功','Provider/list');
} }
}else{ }else{
return $this->fetch(); return $this->fetch();
} }
} }
public function saveallAction(){ public function saveallAction(){
$newsort=input('newsort/a'); $newsort=input('newsort/a');
$mprovider=model('Provider'); $mprovider=model('Provider');
if(is_array($newsort)&&count($newsort)>0){ if(is_array($newsort)&&count($newsort)>0){
foreach ($newsort as $key=>$val){ foreach ($newsort as $key=>$val){
$mprovider->strict(false)->where('id',intval($key))->update(array('sort'=>intval($val))); $mprovider->strict(false)->where('id',intval($key))->update(array('sort'=>intval($val)));
} }
} }
$this->success('保存成功','Provider/list'); $this->success('保存成功','Provider/list');
} }
} }

File diff suppressed because it is too large Load Diff

View File

@ -1,43 +1,43 @@
<?php <?php
/* /*
|-------------------------------------------------------------------------- |--------------------------------------------------------------------------
| SkyCaiji (蓝天采集器) | SkyCaiji (蓝天采集器)
|-------------------------------------------------------------------------- |--------------------------------------------------------------------------
| Copyright (c) 2018 https://www.skycaiji.com All rights reserved. | Copyright (c) 2018 https://www.skycaiji.com All rights reserved.
|-------------------------------------------------------------------------- |--------------------------------------------------------------------------
| 使用协议 https://www.skycaiji.com/licenses | 使用协议 https://www.skycaiji.com/licenses
|-------------------------------------------------------------------------- |--------------------------------------------------------------------------
*/ */
namespace skycaiji\admin\model; namespace skycaiji\admin\model;
class App extends BaseModel{ class App extends BaseModel{
/*检测是否是应用并获取配置文件实例化*/ /*检测是否是应用并获取配置文件实例化*/
public function app_class($app,$includeClass=true){ public function app_class($app,$includeClass=true){
static $passPaths=array('.','..','common','admin','skycaiji','vendor'); static $passPaths=array('.','..','common','admin','skycaiji','vendor');
if($this->right_app($app)){ if($this->right_app($app)){
$path=realpath(config('apps_path').'/'.$app); $path=realpath(config('apps_path').'/'.$app);
if(!empty($path)&&is_dir($path)){ if(!empty($path)&&is_dir($path)){
$appFilename=$this->app_class_file($app); $appFilename=$this->app_class_file($app);
if(!in_array($app,$passPaths)&&file_exists($appFilename)){ if(!in_array($app,$passPaths)&&file_exists($appFilename)){
if($includeClass){ if($includeClass){
include $appFilename; include $appFilename;
$appClass=new $app(); $appClass=new $app();
}else{ }else{
$appFile=file_get_contents($appFilename); $appFile=file_get_contents($appFilename);
if(!empty($appFile)){ if(!empty($appFile)){
$appClass=new \stdClass(); $appClass=new \stdClass();
if(preg_match('/public\s*\$config\s*=(\s*[\s\S]+?[\]\)]\s*\;)/i', $appFile,$config)){ if(preg_match('/public\s*\$config\s*=(\s*[\s\S]+?[\]\)]\s*\;)/i', $appFile,$config)){
set_error_handler(null); set_error_handler(null);
$config=trim($config[1]); $config=trim($config[1]);
try { try {
$config=@eval('return '.$config); $config=@eval('return '.$config);
}catch(\Exception $e){ }catch(\Exception $e){
$config=array(); $config=array();
} }
@ -47,7 +47,7 @@ class App extends BaseModel{
} }
if($appClass){ if($appClass){
$appClass->config=$this->clear_config($appClass->config); $appClass->config=$this->clear_config($appClass->config);
return $appClass; return $appClass;
} }
} }
@ -68,17 +68,17 @@ class App extends BaseModel{
public function deleteByApp($app){ public function deleteByApp($app){
if($app){ if($app){
$this->where('app',$app)->delete(); $this->where('app',$app)->delete();
$this->delete_config($app); $this->delete_config($app);
} }
} }
/*应用配置文件名*/ /*应用配置文件名*/
public function app_class_file($app){ public function app_class_file($app){
return realpath(config('apps_path')).DIRECTORY_SEPARATOR.$app.DIRECTORY_SEPARATOR.$app.'.php'; return realpath(config('apps_path')).DIRECTORY_SEPARATOR.$app.DIRECTORY_SEPARATOR.$app.'.php';
} }
/*应用命名规范*/ /*应用命名规范*/
public function right_app($app){ public function right_app($app){
if(preg_match('/^[a-z]+[a-z\_0-9]*$/', $app)){ if(preg_match('/^[a-z]+[a-z\_0-9]*$/', $app)){
return strlen($app)<3?false:true; return strlen($app)<3?false:true;
}else{ }else{
@ -104,9 +104,9 @@ class App extends BaseModel{
} }
/*清理描述html*/ /*清理描述html*/
public function clear_desc($desc){ public function clear_desc($desc){
$desc=strip_tags($desc,'<p><br><b><i><a>'); $desc=strip_tags($desc,'<p><br><b><i><a>');
$desc=preg_replace('/<(p|br|b|i)\s+.*?>/i', "<$1>", $desc); $desc=preg_replace('/<(p|br|b|i)\s+.*?>/i', "<$1>", $desc);
$desc=preg_replace('/[\r\n]+/', ' ', $desc); $desc=preg_replace('/[\r\n]+/', ' ', $desc);
$desc=trim($desc); $desc=trim($desc);
return $desc; return $desc;
} }
@ -117,7 +117,7 @@ class App extends BaseModel{
$arr=$this->_array_map('strip_tags', $arr); $arr=$this->_array_map('strip_tags', $arr);
$arr['desc']=$desc; $arr['desc']=$desc;
if(!empty($arr['agreement'])){ if(!empty($arr['agreement'])){
$arr['agreement']=preg_replace('/^[\s]+/m', '', $arr['agreement']); $arr['agreement']=preg_replace('/^[\s]+/m', '', $arr['agreement']);
} }
return $arr; return $arr;
} }
@ -128,10 +128,10 @@ class App extends BaseModel{
} }
$config=is_array($config)?$config:array(); $config=is_array($config)?$config:array();
$filename=$this->config_filename($app); $filename=$this->config_filename($app);
$oldConfig=$this->get_config($app); $oldConfig=$this->get_config($app);
$oldConfig=is_array($oldConfig)?$oldConfig:array(); $oldConfig=is_array($oldConfig)?$oldConfig:array();
$config=array_merge($oldConfig,$config); $config=array_merge($oldConfig,$config);
$config=$this->clear_config($config); $config=$this->clear_config($config);
$config=var_export($config,true); $config=var_export($config,true);
@ -144,7 +144,7 @@ class App extends BaseModel{
$filename=$this->config_filename($app); $filename=$this->config_filename($app);
$config=array(); $config=array();
if(file_exists($filename)){ if(file_exists($filename)){
$config=include $filename; $config=include $filename;
$config=is_array($config)?$config:array(); $config=is_array($config)?$config:array();
} }
@ -170,7 +170,7 @@ class App extends BaseModel{
return $arr; return $arr;
} }
public function config_filename($app){ public function config_filename($app){
return config('apps_path').'/app/config/'.$app.'.php'; return config('apps_path').'/app/config/'.$app.'.php';
} }
/*获取应用类的变量*/ /*获取应用类的变量*/
public function get_class_vars($appClass){ public function get_class_vars($appClass){

View File

@ -1,13 +1,13 @@
<?php <?php
/* /*
|-------------------------------------------------------------------------- |--------------------------------------------------------------------------
| SkyCaiji (蓝天采集器) | SkyCaiji (蓝天采集器)
|-------------------------------------------------------------------------- |--------------------------------------------------------------------------
| Copyright (c) 2018 https://www.skycaiji.com All rights reserved. | Copyright (c) 2018 https://www.skycaiji.com All rights reserved.
|-------------------------------------------------------------------------- |--------------------------------------------------------------------------
| 使用协议 https://www.skycaiji.com/licenses | 使用协议 https://www.skycaiji.com/licenses
|-------------------------------------------------------------------------- |--------------------------------------------------------------------------
*/ */
namespace skycaiji\admin\model; namespace skycaiji\admin\model;
/*第三方服务商*/ /*第三方服务商*/
@ -26,7 +26,7 @@ class Provider extends BaseModel{
public function getIdByUrl($url){ public function getIdByUrl($url){
$url=self::matchDomain($url); $url=self::matchDomain($url);
if(is_official_url($url)){ if(is_official_url($url)){
$url=null; $url=null;
} }
$id=0; $id=0;

View File

@ -1,11 +1,11 @@
<textarea id="win_txt_agreement">{$agreement}</textarea> <textarea id="win_txt_agreement">{$agreement}</textarea>
<script type="text/javascript"> <script type="text/javascript">
(function(){ (function(){
modal('“{$name}({$app})”使用协议','<pre style="max-height:400px;">'+$('#win_txt_agreement').val()+'</pre>',{lg:1}); modal('“{$name}({$app})”使用协议','<pre style="max-height:400px;">'+$('#win_txt_agreement').val()+'</pre>',{lg:1});
$('#myModal .modal-footer .close').addClass('btn btn-default').removeClass('close'); $('#myModal .modal-footer .close').addClass('btn btn-default').removeClass('close');
$('#myModal .modal-footer').prepend('<button type="button" class="btn btn-success btn-agreement" data-dismiss="modal">同意</button>'); $('#myModal .modal-footer').prepend('<button type="button" class="btn btn-success btn-agreement" data-dismiss="modal">同意</button>');
$('#myModal .modal-footer .btn-agreement').bind('click',function(){ $('#myModal .modal-footer .btn-agreement').bind('click',function(){
windowModal('正在安装...',"{:url('Admin/App/install?app='.$app)}"); windowModal('正在安装...',"{:url('Admin/App/install?app='.$app)}");
}); });
})(); })();
</script> </script>

View File

@ -1,59 +1,59 @@
<script type="text/javascript"> <script type="text/javascript">
'use strict'; 'use strict';
function apiop_show_msg(msg,success){ function apiop_show_msg(msg,success){
$('#myModal').modal('hide');//隐藏 $('#myModal').modal('hide');//隐藏
if(success){ if(success){
toastr.success(msg); toastr.success(msg);
}else{ }else{
toastr.error(msg); toastr.error(msg);
} }
} }
(function(){ (function(){
var apiName={'install':'安装','uninstall':'卸载','upgrade':'升级'}; var apiName={'install':'安装','uninstall':'卸载','upgrade':'升级'};
var apiUrl='{$apiUrl}'; var apiUrl='{$apiUrl}';
var op='{$op}'; var op='{$op}';
$.ajax({ $.ajax({
type:'get', type:'get',
dataType:'json', dataType:'json',
url:apiUrl, url:apiUrl,
success:function(data){ success:function(data){
if(typeof(data)=='object'){ if(typeof(data)=='object'){
if(data.status==1){ if(data.status==1){
//接口执行成功 //接口执行成功
$.ajax({ $.ajax({
type:'get', type:'get',
dataType:'json', dataType:'json',
url:"{:url('App/'.$op.'?success=1&app='.$app)}", url:"{:url('App/'.$op.'?success=1&app='.$app)}",
success:function(data){ success:function(data){
if(data.code){ if(data.code){
//操作成功 //操作成功
apiop_show_msg(data.msg,true); apiop_show_msg(data.msg,true);
if(data.url){ if(data.url){
setTimeout("window.location.href='"+data.url+"';",2500); setTimeout("window.location.href='"+data.url+"';",2500);
}else{ }else{
setTimeout("window.location.reload()",2500); setTimeout("window.location.reload()",2500);
} }
}else{ }else{
//失败 //失败
apiop_show_msg(data.msg,false); apiop_show_msg(data.msg,false);
} }
}, },
error:function(){ error:function(){
apiop_show_msg(apiName[op]+'操作失败,请重试!',false); apiop_show_msg(apiName[op]+'操作失败,请重试!',false);
} }
}); });
}else{ }else{
//失败 //失败
var msg=data.info?data.info:(apiName[op]+'失败'); var msg=data.info?data.info:(apiName[op]+'失败');
apiop_show_msg(msg,false); apiop_show_msg(msg,false);
} }
}else{ }else{
apiop_show_msg('返回的不是JSON数据',false); apiop_show_msg('返回的不是JSON数据',false);
} }
}, },
error:function(){ error:function(){
apiop_show_msg(apiName[op]+'接口运行失败!',false); apiop_show_msg(apiName[op]+'接口运行失败!',false);
} }
}); });
})(); })();
</script> </script>

View File

@ -1,68 +1,68 @@
{extend name="common:main" /} {extend name="common:main" /}
{block name="cssjs"} {block name="cssjs"}
<link rel="stylesheet" href="__PUBLIC__/static/css/app.css?{$Think.config.html_v}" /> <link rel="stylesheet" href="__PUBLIC__/static/css/app.css?{$Think.config.html_v}" />
<script src="__PUBLIC__/static/js/admin/app.js?{$Think.config.html_v}"></script> <script src="__PUBLIC__/static/js/admin/app.js?{$Think.config.html_v}"></script>
{/block} {/block}
{block name="content"} {block name="content"}
<ul class="manage-nav"> <ul class="manage-nav">
<li><a href="{:url('Admin/Mystore/app')}" class="glyphicon glyphicon-list" title="应用列表"></a></li> <li><a href="{:url('Admin/Mystore/app')}" class="glyphicon glyphicon-list" title="应用列表"></a></li>
<li{if !isset($navid)} class="active"{/if}><a href="{:url('App/manage?app='.$app)}">应用详细</a></li> <li{if !isset($navid)} class="active"{/if}><a href="{:url('App/manage?app='.$app)}">应用详细</a></li>
{foreach $navPacks as $k=>$v} {foreach $navPacks as $k=>$v}
<li{$v['is_current']?' class="active"':''}><a href="{:url('App/manage?app='.$app.'&navid='.$k)}" data-url="{$v['nav_link']}"{if $v['target']} target="_blank"{/if}>{$v['name']}</a></li> <li{$v['is_current']?' class="active"':''}><a href="{:url('App/manage?app='.$app.'&navid='.$k)}" data-url="{$v['nav_link']}"{if $v['target']} target="_blank"{/if}>{$v['name']}</a></li>
{/foreach} {/foreach}
</ul> </ul>
{if !isset($navid)} {if !isset($navid)}
<dl class="dl-info" style="margin-left:20px;margin-top:5px;"> <dl class="dl-info" style="margin-left:20px;margin-top:5px;">
<dt>启用</dt> <dt>启用</dt>
<dd> <dd>
<a href="javascript:;" id="enable" data-app="{$appData['app']}" data-enable="{$appData['config']['enable']}">{$appData['config']['enable']?'已开启':'已关闭'}</a> <a href="javascript:;" id="enable" data-app="{$appData['app']}" data-enable="{$appData['config']['enable']}">{$appData['config']['enable']?'已开启':'已关闭'}</a>
</dd> </dd>
<dt>名称</dt> <dt>名称</dt>
<dd>{$appData['config']['name']}</dd> <dd>{$appData['config']['name']}</dd>
<dt>标识</dt> <dt>标识</dt>
<dd>{$appData['app']}</dd> <dd>{$appData['app']}</dd>
<dt>版本</dt> <dt>版本</dt>
<dd> <dd>
{$appData['config']['version']} {$appData['config']['version']}
{if $newest_version} {if $newest_version}
&nbsp; <a href="javascript:;" id="newest_version" data-app="{$appData['app']}">新版本{$newest_version}</a> &nbsp; <a href="javascript:;" id="newest_version" data-app="{$appData['app']}">新版本{$newest_version}</a>
{/if} {/if}
</dd> </dd>
<dt>框架</dt> <dt>框架</dt>
<dd>{$appData['config']['framework']?($appData['config']['framework'].$appData['config']['framework_version']):'自定义'}</dd> <dd>{$appData['config']['framework']?($appData['config']['framework'].$appData['config']['framework_version']):'自定义'}</dd>
{if !empty($appData['config']['phpv'])} {if !empty($appData['config']['phpv'])}
<dt>PHP</dt> <dt>PHP</dt>
<dd>最低要求php{$appData['config']['phpv']}版本</dd> <dd>最低要求php{$appData['config']['phpv']}版本</dd>
{/if} {/if}
<dt>首页</dt> <dt>首页</dt>
<dd> <dd>
<a href="{$appUrl}" target="_blank">应用首页</a> <a href="{$appUrl}" target="_blank">应用首页</a>
</dd> </dd>
{if !empty($appData['config']['author'])} {if !empty($appData['config']['author'])}
<dt>作者</dt> <dt>作者</dt>
<dd>{$appData['config']['author']}</dd> <dd>{$appData['config']['author']}</dd>
{/if} {/if}
{if !empty($provData)} {if !empty($provData)}
<dt>平台</dt> <dt>平台</dt>
<dd><a href="{:url('admin/store/index?url='.urlencode($provData['url']))}">第三方平台</a></dd> <dd><a href="{:url('admin/store/index?url='.urlencode($provData['url']))}">第三方平台</a></dd>
{elseif !empty($appData['config']['website'])} {elseif !empty($appData['config']['website'])}
<dt>网站</dt> <dt>网站</dt>
<dd><a href="{$appData['config']['website']}" target="_blank">作者网站</a></dd> <dd><a href="{$appData['config']['website']}" target="_blank">作者网站</a></dd>
{/if} {/if}
{if $appData['config']['desc']} {if $appData['config']['desc']}
<dt>描述</dt> <dt>描述</dt>
<dd>{$appData['config']['desc']}</dd> <dd>{$appData['config']['desc']}</dd>
{/if} {/if}
<dt>开发</dt> <dt>开发</dt>
<dd><a href="{:url('Develop/app?app='.$app)}" class="develop">开发应用</a></dd> <dd><a href="{:url('Develop/app?app='.$app)}" class="develop">开发应用</a></dd>
</dl> </dl>
{else /} {else /}
<div class="manage-wrap"> <div class="manage-wrap">
<div class="iframe-loading"><div class="loading">&nbsp;</div>页面加载中...</div> <div class="iframe-loading"><div class="loading">&nbsp;</div>页面加载中...</div>
<iframe src="{$navPacks[$navid]['nav_link']}" id="iframe_main" class="iframe-main" width="100%" height="100%" frameborder="0" scrolling="yes"></iframe> <iframe src="{$navPacks[$navid]['nav_link']}" id="iframe_main" class="iframe-main" width="100%" height="100%" frameborder="0" scrolling="yes"></iframe>
</div> </div>
{/if} {/if}
<script type="text/javascript"> <script type="text/javascript">
appClass.init_manage(); appClass.init_manage();
</script> </script>
{/block} {/block}

View File

@ -1,156 +1,156 @@
{extend name="common:main" /} {extend name="common:main" /}
{block name="cssjs"} {block name="cssjs"}
<script type="text/javascript" src="__PUBLIC__/static/js/admin/develop.js?{$Think.config.html_v}"></script> <script type="text/javascript" src="__PUBLIC__/static/js/admin/develop.js?{$Think.config.html_v}"></script>
{/block} {/block}
{block name="content"} {block name="content"}
<div class="box box-default"> <div class="box box-default">
<div class="box-body"> <div class="box-body">
<form id="form_app" method="post" ajax-submit="true" action="{:url('Admin/Develop/app')}"> <form id="form_app" method="post" ajax-submit="true" action="{:url('Admin/Develop/app')}">
{if !empty($appData)} {if !empty($appData)}
<input type="hidden" name="edit" value="1" /> <input type="hidden" name="edit" value="1" />
<input type="hidden" name="app" value="{$appData['app']}" /> <input type="hidden" name="app" value="{$appData['app']}" />
{/if} {/if}
{if $newest_version} {if $newest_version}
<div class="alert alert-warning" role="alert"> <div class="alert alert-warning" role="alert">
检测到新版本{$newest_version}<a href="javascript:;" id="newest_version">点击升级</a> 检测到新版本{$newest_version}<a href="javascript:;" id="newest_version">点击升级</a>
</div> </div>
{/if} {/if}
<div class="form-group"> <div class="form-group">
<label>app标识</label> <label>app标识</label>
{if !empty($appData)} {if !empty($appData)}
<input type="text" value="{$appData['app']}" class="form-control" disabled="disabled"> <input type="text" value="{$appData['app']}" class="form-control" disabled="disabled">
{else /} {else /}
<input type="text" name="app" class="form-control"> <input type="text" name="app" class="form-control">
{/if} {/if}
<p class="help-block">标识可由小写字母、下划线、数字组成长度3个字符以上且以字母开头建议加入自己的版权以区别他人的应用</p> <p class="help-block">标识可由小写字母、下划线、数字组成长度3个字符以上且以字母开头建议加入自己的版权以区别他人的应用</p>
</div> </div>
<div class="form-group"> <div class="form-group">
<label>PHP框架</label> <label>PHP框架</label>
{if $appFrameworkPath} {if $appFrameworkPath}
<input type="hidden" name="framework" value="{$appData['config']['framework']}" /> <input type="hidden" name="framework" value="{$appData['config']['framework']}" />
<input type="hidden" name="framework_version[{$appData['config']['framework']}]" value="{$appData['config']['framework_version']}" /> <input type="hidden" name="framework_version[{$appData['config']['framework']}]" value="{$appData['config']['framework_version']}" />
<input type="text" value="{$appData['config']['framework']}{$appData['config']['framework_version']}" class="form-control" disabled="disabled"> <input type="text" value="{$appData['config']['framework']}{$appData['config']['framework_version']}" class="form-control" disabled="disabled">
<p class="help-block">如需修改框架,请先删除:{$appFrameworkPath}</p> <p class="help-block">如需修改框架,请先删除:{$appFrameworkPath}</p>
{else /} {else /}
<select name="framework" class="form-control"> <select name="framework" class="form-control">
<option value="">自定义</option> <option value="">自定义</option>
{foreach $frameworks as $fmw=>$vers} {foreach $frameworks as $fmw=>$vers}
<option value="{$fmw}">{$fmw}</option> <option value="{$fmw}">{$fmw}</option>
{/foreach} {/foreach}
</select> </select>
{foreach $frameworks as $fmw=>$vers} {foreach $frameworks as $fmw=>$vers}
<div class="input-group" style="margin-top:5px;display:none;" id="framework_vers_{$fmw}"> <div class="input-group" style="margin-top:5px;display:none;" id="framework_vers_{$fmw}">
{foreach $vers as $ver} {foreach $vers as $ver}
<label class="radio-inline"><input type="radio" name="framework_version[{$fmw}]" value="{$ver}"> {$ver}</label> <label class="radio-inline"><input type="radio" name="framework_version[{$fmw}]" value="{$ver}"> {$ver}</label>
{/foreach} {/foreach}
</div> </div>
{/foreach} {/foreach}
<div class="help-block"> <div class="help-block">
使用php框架开发该应用 使用php框架开发该应用
{if !empty($appData['config']['framework'])&&empty($appFrameworkPath)} {if !empty($appData['config']['framework'])&&empty($appFrameworkPath)}
<button id="install_framework" type="button" class="btn btn-xs btn-warning">安装框架{$appData['config']['framework']}{$appData['config']['framework_version']}</button> 注意安装框架将会初始化应用,如应用中存在项目文件请先备份以防丢失! <button id="install_framework" type="button" class="btn btn-xs btn-warning">安装框架{$appData['config']['framework']}{$appData['config']['framework_version']}</button> 注意安装框架将会初始化应用,如应用中存在项目文件请先备份以防丢失!
<div id="install_framework_error"></div> <div id="install_framework_error"></div>
{/if} {/if}
</div> </div>
{/if} {/if}
</div> </div>
<div class="form-group"> <div class="form-group">
<label>名称</label> <label>名称</label>
<input type="text" name="name" class="form-control"> <input type="text" name="name" class="form-control">
<p class="help-block">应用的中文名称</p> <p class="help-block">应用的中文名称</p>
</div> </div>
<div class="form-group"> <div class="form-group">
<label>版本号</label> <label>版本号</label>
<input type="text" name="version" class="form-control"> <input type="text" name="version" class="form-control">
<p class="help-block">应用版本号标准格式x.x或x.x.xx为数字最多两位数版本号高于旧版本时会提示升级</p> <p class="help-block">应用版本号标准格式x.x或x.x.xx为数字最多两位数版本号高于旧版本时会提示升级</p>
</div> </div>
<div class="form-group"> <div class="form-group">
<label>描述</label> <label>描述</label>
<textarea name="desc" class="form-control"></textarea> <textarea name="desc" class="form-control"></textarea>
<p class="help-block">可以使用&lt;p&gt;&lt;br&gt;&lt;b&gt;&lt;i&gt;&lt;a&gt;标签</p> <p class="help-block">可以使用&lt;p&gt;&lt;br&gt;&lt;b&gt;&lt;i&gt;&lt;a&gt;标签</p>
</div> </div>
<div class="form-group"> <div class="form-group">
<label>作者</label> <label>作者</label>
<input type="text" name="author" class="form-control" placeholder="选填"> <input type="text" name="author" class="form-control" placeholder="选填">
</div> </div>
<div class="form-group"> <div class="form-group">
<label>平台网址</label> <label>平台网址</label>
<input type="text" name="website" class="form-control" placeholder="选填"> <input type="text" name="website" class="form-control" placeholder="选填">
<p class="help-block">第三方平台网址必须包含前缀http://或https://</p> <p class="help-block">第三方平台网址必须包含前缀http://或https://</p>
</div> </div>
<div class="form-group"> <div class="form-group">
<label>PHP版本</label> <label>PHP版本</label>
<input type="text" name="phpv" class="form-control" placeholder="选填"> <input type="text" name="phpv" class="form-control" placeholder="选填">
<p class="help-block">运行该应用要求最低PHP版本留空则无要求</p> <p class="help-block">运行该应用要求最低PHP版本留空则无要求</p>
</div> </div>
<div class="form-group"> <div class="form-group">
<label>协议</label> <label>协议</label>
<textarea name="agreement" class="form-control" placeholder="选填"></textarea> <textarea name="agreement" class="form-control" placeholder="选填"></textarea>
<p class="help-block">安装时提示协议</p> <p class="help-block">安装时提示协议</p>
</div> </div>
<div class="form-group"> <div class="form-group">
<table class="table table-hover c-p-request-headers"> <table class="table table-hover c-p-request-headers">
<thead> <thead>
<tr> <tr>
<th class="col-xs-2" style="padding-left:0;">程序操作</th> <th class="col-xs-2" style="padding-left:0;">程序操作</th>
<th class="col-xs-10">相对于应用的链接(开头不加/</th> <th class="col-xs-10">相对于应用的链接(开头不加/</th>
</tr> </tr>
</thead> </thead>
<tbody> <tbody>
<tr> <tr>
<td>安装</td> <td>安装</td>
<td> <td>
<input type="text" name="install" value="" class="form-control" placeholder="必填安装应用接口没有填1"> <input type="text" name="install" value="" class="form-control" placeholder="必填安装应用接口没有填1">
</td> </td>
</tr> </tr>
<tr> <tr>
<td>卸载</td> <td>卸载</td>
<td> <td>
<input type="text" name="uninstall" value="" class="form-control" placeholder="必填卸载应用接口没有填1"> <input type="text" name="uninstall" value="" class="form-control" placeholder="必填卸载应用接口没有填1">
</td> </td>
</tr> </tr>
<tr> <tr>
<td>升级</td> <td>升级</td>
<td> <td>
<input type="text" name="upgrade" value="" class="form-control" placeholder="必填升级应用接口没有填1"> <input type="text" name="upgrade" value="" class="form-control" placeholder="必填升级应用接口没有填1">
</td> </td>
</tr> </tr>
</tbody> </tbody>
</table> </table>
</div> </div>
<div class="form-group"> <div class="form-group">
<div class="h-title"> <div class="h-title">
<label class="control-label">扩展</label> <label class="control-label">扩展</label>
<a href="javascript:;" id="add_pack" class="glyphicon glyphicon-plus" title="添加"></a> <a href="javascript:;" id="add_pack" class="glyphicon glyphicon-plus" title="添加"></a>
</div> </div>
</div> </div>
<div class="form-group"> <div class="form-group">
<div class="table-responsive"> <div class="table-responsive">
<table class="table table-hover" id="pack_list" style="margin-bottom:0;"> <table class="table table-hover" id="pack_list" style="margin-bottom:0;">
<thead> <thead>
<tr> <tr>
<th class="col-xs-2">名称</th> <th class="col-xs-2">名称</th>
<th class="col-xs-2">类型</th> <th class="col-xs-2">类型</th>
<th class="col-xs-2">链接</th> <th class="col-xs-2">链接</th>
<th class="col-xs-2">操作</th> <th class="col-xs-2">操作</th>
</tr> </tr>
</thead> </thead>
<tbody> <tbody>
</tbody> </tbody>
</table> </table>
</div> </div>
</div> </div>
<div class="form-group"> <div class="form-group">
<button type="submit" class="btn btn-primary btn-block">{$Think.lang.save}</button> <button type="submit" class="btn btn-primary btn-block">{$Think.lang.save}</button>
</div> </div>
</form> </form>
</div> </div>
</div> </div>
<script type="text/javascript"> <script type="text/javascript">
developClass.packTypes={$packTypes|json_encode}; developClass.packTypes={$packTypes|json_encode};
developClass.app({$appData|json_encode}); developClass.app({$appData|json_encode});
</script> </script>
{/block} {/block}

View File

@ -1,42 +1,42 @@
<form id="win_form_pack" method="post" action="{:url('Develop/appAddPack')}"> <form id="win_form_pack" method="post" action="{:url('Develop/appAddPack')}">
<input type="hidden" name="objid" value="{$objid}" /> <input type="hidden" name="objid" value="{$objid}" />
<div class="form-group"> <div class="form-group">
<label>名称</label> <label>名称</label>
<input type="text" name="pack[name]" class="form-control" autocomplete="off" /> <input type="text" name="pack[name]" class="form-control" autocomplete="off" />
</div> </div>
<div class="form-group"> <div class="form-group">
<label>类型</label> <label>类型</label>
<select name="pack[type]" class="form-control"> <select name="pack[type]" class="form-control">
<option value="">请选择</option> <option value="">请选择</option>
{foreach $packTypes as $k=>$v} {foreach $packTypes as $k=>$v}
<option value="{$k}">{$v}</option> <option value="{$k}">{$v}</option>
{/foreach} {/foreach}
</select> </select>
<p class="help-block type-nav" style="display:none;">显示在应用的管理界面中</p> <p class="help-block type-nav" style="display:none;">显示在应用的管理界面中</p>
</div> </div>
<div class="form-group"> <div class="form-group">
<label>新窗口</label> <label>新窗口</label>
<div class="input-group"> <div class="input-group">
<label class="radio-inline"><input type="radio" name="pack[target]" value="1"></label> <label class="radio-inline"><input type="radio" name="pack[target]" value="1"></label>
<label class="radio-inline"><input type="radio" name="pack[target]" value="0"></label> <label class="radio-inline"><input type="radio" name="pack[target]" value="0"></label>
</div> </div>
<p class="help-block">是否在新窗口打开连接</p> <p class="help-block">是否在新窗口打开连接</p>
</div> </div>
<div class="form-group"> <div class="form-group">
<label>链接</label> <label>链接</label>
<input type="text" name="pack[nav_link]" class="form-control" autocomplete="off" placeholder="默认补全为应用绝对链接" /> <input type="text" name="pack[nav_link]" class="form-control" autocomplete="off" placeholder="默认补全为应用绝对链接" />
<div class="help-block"> <div class="help-block">
可使用参数:&#123;app&#125;当前应用的根网址,&#123;apps&#125;所有应用的根网址<br> 可使用参数:&#123;app&#125;当前应用的根网址,&#123;apps&#125;所有应用的根网址<br>
</div> </div>
</div> </div>
<div class="form-group form-group-sm"> <div class="form-group form-group-sm">
<button type="submit" class="btn btn-primary btn-block">确定</button> <button type="submit" class="btn btn-primary btn-block">确定</button>
</div> </div>
</form> </form>
<script type="text/javascript"> <script type="text/javascript">
developClass.init_app_pack(); developClass.init_app_pack();
{if condition="!empty($pack)"} {if condition="!empty($pack)"}
developClass.load_app_pack({$pack|json_encode}); developClass.load_app_pack({$pack|json_encode});
{/if} {/if}
</script> </script>

View File

@ -1,102 +1,102 @@
{extend name="common:main" /} {extend name="common:main" /}
{block name="cssjs"} {block name="cssjs"}
<script src="__PUBLIC__/static/js/admin/store.js?{$Think.config.html_v}"></script> <script src="__PUBLIC__/static/js/admin/store.js?{$Think.config.html_v}"></script>
<script src="__PUBLIC__/static/js/admin/app.js?{$Think.config.html_v}"></script> <script src="__PUBLIC__/static/js/admin/app.js?{$Think.config.html_v}"></script>
{/block} {/block}
{block name="content"} {block name="content"}
<div class="nav-tabs-custom"> <div class="nav-tabs-custom">
<div class="tab-content"> <div class="tab-content">
<div class="tab-pane active"> <div class="tab-pane active">
<div class="table-responsive"> <div class="table-responsive">
<table id="app_list" class="table table-striped datatable"> <table id="app_list" class="table table-striped datatable">
<thead> <thead>
<tr> <tr>
<th>应用</th> <th>应用</th>
<th>作者</th> <th>作者</th>
<th> <th>
操作 操作
<span class="sep">|</span> <span class="sep">|</span>
<div class="checkbox-inline"> <div class="checkbox-inline">
<input type="checkbox" id="auto_check" {:empty($GLOBALS['config']['store_auto_check_app'])?'':'checked="checked"'} value="1" title="刷新页面时自动检测" style="margin-left:-17px;" /> <input type="checkbox" id="auto_check" {:empty($GLOBALS['config']['store_auto_check_app'])?'':'checked="checked"'} value="1" title="刷新页面时自动检测" style="margin-left:-17px;" />
<a href="javascript:;" id="btn_check" style="color:#333;">检测更新</a> <a href="javascript:;" id="btn_check" style="color:#333;">检测更新</a>
</div> </div>
</th> </th>
</tr> </tr>
</thead> </thead>
<tbody> <tbody>
{foreach name="dbApps" item="item" key="app"} {foreach name="dbApps" item="item" key="app"}
<tr data-app="{$app}"> <tr data-app="{$app}">
<td> <td>
<div style="display:inline;" data-toggle="popover" data-content="{$item['config']['desc']|htmlspecialchars}" data-html="true" data-trigger="hover" data-placement="right"> <div style="display:inline;" data-toggle="popover" data-content="{$item['config']['desc']|htmlspecialchars}" data-html="true" data-trigger="hover" data-placement="right">
{$item['config']['name']} {$item['config']['version']}&nbsp;<span style="color:#aaa;">({$app})</span>&nbsp; {$item['config']['name']} {$item['config']['version']}&nbsp;<span style="color:#aaa;">({$app})</span>&nbsp;
</div> </div>
</td> </td>
<td> <td>
{$item['config']['author']} {$item['config']['author']}
</td> </td>
<td> <td>
<a href="{:url('App/manage?app='.$app)}" class="manager">管理</a> <a href="{:url('App/manage?app='.$app)}" class="manager">管理</a>
<span class="sep">|</span> <span class="sep">|</span>
{if $item['newest_version']} {if $item['newest_version']}
<a href="javascript:;" class="upgrade" title="最新版本:{$item['newest_version']}"><b>升级</b></a> <a href="javascript:;" class="upgrade" title="最新版本:{$item['newest_version']}"><b>升级</b></a>
<span class="sep">|</span> <span class="sep">|</span>
{/if} {/if}
{if empty($item['config']['enable'])} {if empty($item['config']['enable'])}
<a href="javascript:;" class="enable" data-enable="{$item['config']['enable']}">{$item['config']['enable']?'关闭':'<b>开启</b>'}</a> <a href="javascript:;" class="enable" data-enable="{$item['config']['enable']}">{$item['config']['enable']?'关闭':'<b>开启</b>'}</a>
<span class="sep">|</span> <span class="sep">|</span>
{/if} {/if}
<a href="javascript:;" class="uninstall">卸载</a> <a href="javascript:;" class="uninstall">卸载</a>
<span class="sep">|</span> <span class="sep">|</span>
{if !empty($provList[$item['provider_id']])} {if !empty($provList[$item['provider_id']])}
<a href="{$provList[$item['provider_id']]['url']}/client/app/detail?app={$app|urlencode}" data-is-store-url="1" class="store-detail" title="第三方平台">第三方</a> <a href="{$provList[$item['provider_id']]['url']}/client/app/detail?app={$app|urlencode}" data-is-store-url="1" class="store-detail" title="第三方平台">第三方</a>
{else/} {else/}
<a href="https://www.skycaiji.com/client/app/detail?app={$app|urlencode}" data-is-store-url="1" class="store-detail">平台</a> <a href="https://www.skycaiji.com/client/app/detail?app={$app|urlencode}" data-is-store-url="1" class="store-detail">平台</a>
{/if} {/if}
<div class="app-store-info"></div> <div class="app-store-info"></div>
</td> </td>
</tr> </tr>
{/foreach} {/foreach}
{if $pathApps} {if $pathApps}
<tr><td colspan="4"><b style="color:#666;">未安装的应用</b></td></tr> <tr><td colspan="4"><b style="color:#666;">未安装的应用</b></td></tr>
{foreach name="pathApps" item="item" key="app"} {foreach name="pathApps" item="item" key="app"}
<tr data-app="{$app}" data-agreement="{$item['config']['agreement']?'1':''}"> <tr data-app="{$app}" data-agreement="{$item['config']['agreement']?'1':''}">
<td> <td>
<div style="display:inline;" data-toggle="popover" data-content="{$item['config']['desc']|htmlspecialchars}" data-html="true" data-trigger="hover" data-placement="right"> <div style="display:inline;" data-toggle="popover" data-content="{$item['config']['desc']|htmlspecialchars}" data-html="true" data-trigger="hover" data-placement="right">
{$item['config']['name']} v{$item['config']['version']}&nbsp;<span style="color:#aaa;">({$app})</span>&nbsp; {$item['config']['name']} v{$item['config']['version']}&nbsp;<span style="color:#aaa;">({$app})</span>&nbsp;
</div> </div>
</td> </td>
<td> <td>
{$item['config']['author']} {$item['config']['author']}
</td> </td>
<td> <td>
<a href="javascript:;" class="install">安装</a> <a href="javascript:;" class="install">安装</a>
<span class="sep">|</span> <span class="sep">|</span>
{if !empty($provList[$item['provider_id']])} {if !empty($provList[$item['provider_id']])}
<a href="{$provList[$item['provider_id']]['url']}/client/app/detail?app={$app|urlencode}" data-is-store-url="1" class="store-detail" title="第三方平台">第三方</a> <a href="{$provList[$item['provider_id']]['url']}/client/app/detail?app={$app|urlencode}" data-is-store-url="1" class="store-detail" title="第三方平台">第三方</a>
{else/} {else/}
<a href="https://www.skycaiji.com/client/app/detail?app={$app|urlencode}" data-is-store-url="1" class="store-detail">平台</a> <a href="https://www.skycaiji.com/client/app/detail?app={$app|urlencode}" data-is-store-url="1" class="store-detail">平台</a>
{/if} {/if}
<div class="app-store-info"></div> <div class="app-store-info"></div>
</td> </td>
</tr> </tr>
{/foreach} {/foreach}
{/if} {/if}
</tbody> </tbody>
<tfoot> <tfoot>
<tr> <tr>
</tr> </tr>
{if condition="!empty($pagenav)"} {if condition="!empty($pagenav)"}
<tr> <tr>
<td colspan="5">{$pagenav}</td> <td colspan="5">{$pagenav}</td>
</tr> </tr>
{/if} {/if}
</tfoot> </tfoot>
</table> </table>
</div> </div>
</div> </div>
</div> </div>
</div> </div>
<script type="text/javascript"> <script type="text/javascript">
appClass.init_list(); appClass.init_list();
</script> </script>
{/block} {/block}

View File

@ -1,69 +1,69 @@
{extend name="common:main" /} {extend name="common:main" /}
{block name="cssjs"} {block name="cssjs"}
<script type="text/javascript" src="__PUBLIC__/static/js/admin/provider.js?{$Think.config.html_v}"></script> <script type="text/javascript" src="__PUBLIC__/static/js/admin/provider.js?{$Think.config.html_v}"></script>
{/block} {/block}
{block name="content"} {block name="content"}
<div class="alert alert-warning alert-dismissible" style="padding-top:7px;padding-bottom:7px;line-height:20px;margin-bottom:10px;"> <div class="alert alert-warning alert-dismissible" style="padding-top:7px;padding-bottom:7px;line-height:20px;margin-bottom:10px;">
<button type="button" class="close" data-dismiss="alert" aria-hidden="true" style="top:0px;">×</button> <button type="button" class="close" data-dismiss="alert" aria-hidden="true" style="top:0px;">×</button>
允许通过下列第三方平台下载规则、插件等,注意:任何第三方平台都可能存在安全隐患,请谨慎下载! 允许通过下列第三方平台下载规则、插件等,注意:任何第三方平台都可能存在安全隐患,请谨慎下载!
</div> </div>
<div class="box box-default"> <div class="box box-default">
<div class="box-body"> <div class="box-body">
<form id="form_list" method="post" ajax-submit="true" action="{:url('Provider/saveall')}"> <form id="form_list" method="post" ajax-submit="true" action="{:url('Provider/saveall')}">
<table id="list_table" class="table table-hover datatable"> <table id="list_table" class="table table-hover datatable">
<thead> <thead>
<tr> <tr>
<th width="80">排序</th> <th width="80">排序</th>
<th>网址</th> <th>网址</th>
<th>标题</th> <th>标题</th>
<th>访问</th> <th>访问</th>
<th>操作</th> <th>操作</th>
</tr> </tr>
</thead> </thead>
<tbody> <tbody>
{foreach name="list" item="item"} {foreach name="list" item="item"}
<tr data-id="{$item['id']}" data-url="{$item['url']}"> <tr data-id="{$item['id']}" data-url="{$item['url']}">
<td class="sort"><input type="text" name="newsort[{$item['id']}]" class="form-control" value="{$item['sort']}" autocomplete="off" /></td> <td class="sort"><input type="text" name="newsort[{$item['id']}]" class="form-control" value="{$item['sort']}" autocomplete="off" /></td>
<td><a href="javascript:;" class="store">{$item['url']}</a></td> <td><a href="javascript:;" class="store">{$item['url']}</a></td>
<td>{$item['title']}</td> <td>{$item['title']}</td>
<td><a href="javascript:;" class="enable" style="color:{$item['enable']?'green':'red'}">{$item['enable']?'允许':'拒绝'}</a></td> <td><a href="javascript:;" class="enable" style="color:{$item['enable']?'green':'red'}">{$item['enable']?'允许':'拒绝'}</a></td>
<td> <td>
<a href="javascript:;" class="comment">评价</a> <a href="javascript:;" class="comment">评价</a>
<span class="sep">|</span> <span class="sep">|</span>
<a href="javascript:;" class="edit">编辑</a> <a href="javascript:;" class="edit">编辑</a>
<span class="sep">|</span> <span class="sep">|</span>
<a href="javascript:;" class="delete">删除</a> <a href="javascript:;" class="delete">删除</a>
</td> </td>
</tr> </tr>
{/foreach} {/foreach}
</tbody> </tbody>
<tfoot> <tfoot>
<tr> <tr>
<td colspan="3"> <td colspan="3">
<button type="submit" class="btn btn-default" id="btn_save">保存</button> <button type="submit" class="btn btn-default" id="btn_save">保存</button>
<a href="javascript:;" class="btn btn-primary" id="btn_add">添加</a> <a href="javascript:;" class="btn btn-primary" id="btn_add">添加</a>
</td> </td>
</tr> </tr>
</tfoot> </tfoot>
</table> </table>
</form> </form>
{$pagenav} {$pagenav}
</div> </div>
</div> </div>
<div> <div>
<form id="form_search" method="post" action="{:url('Provider/list')}" class="form-inline"> <form id="form_search" method="post" action="{:url('Provider/list')}" class="form-inline">
<div class="form-group form-group-sm"> <div class="form-group form-group-sm">
<label>网址</label> <label>网址</label>
<input type="text" name="url" class="form-control" placeholder="模糊搜索" /> <input type="text" name="url" class="form-control" placeholder="模糊搜索" />
</div> </div>
<div class="form-group form-group-sm"> <div class="form-group form-group-sm">
<label>标题</label> <label>标题</label>
<input type="text" name="title" class="form-control" placeholder="模糊搜索" /> <input type="text" name="title" class="form-control" placeholder="模糊搜索" />
</div> </div>
<button type="submit" class="btn btn-default btn-sm">搜索</button> <button type="submit" class="btn btn-default btn-sm">搜索</button>
</form> </form>
</div> </div>
<script type="text/javascript"> <script type="text/javascript">
providerClass.list_init(); providerClass.list_init();
</script> </script>
{/block} {/block}

View File

@ -1,37 +1,37 @@
<form id="win_form_provider" method="post" ajax-submit="true" role="form" action="{:url('Provider/save')}"> <form id="win_form_provider" method="post" ajax-submit="true" role="form" action="{:url('Provider/save')}">
{if !empty($proData)} {if !empty($proData)}
<input type="hidden" name="id" value="{$proData['id']}" /> <input type="hidden" name="id" value="{$proData['id']}" />
{/if} {/if}
<div class="form-group"> <div class="form-group">
<label>网址</label> <label>网址</label>
<input type="text" class="form-control" name="url" value=""> <input type="text" class="form-control" name="url" value="">
<p class="help-block">必须输入前缀http://或https://</p> <p class="help-block">必须输入前缀http://或https://</p>
</div> </div>
<div class="form-group"> <div class="form-group">
<label>标题</label> <label>标题</label>
<input type="text" class="form-control" name="title" value="" placeholder="默认自动获取网页标题"> <input type="text" class="form-control" name="title" value="" placeholder="默认自动获取网页标题">
</div> </div>
<div class="form-group"> <div class="form-group">
<label>访问</label> <label>访问</label>
<div class="input-group"> <div class="input-group">
<label class="radio-inline"> <label class="radio-inline">
<input type="radio" name="enable" value="1"> 允许 <input type="radio" name="enable" value="1"> 允许
</label> </label>
<label class="radio-inline"> <label class="radio-inline">
<input type="radio" name="enable" value="0"> 拒绝 <input type="radio" name="enable" value="0"> 拒绝
</label> </label>
</div> </div>
<p class="help-block">允许从该网站中下载规则、插件等</p> <p class="help-block">允许从该网站中下载规则、插件等</p>
</div> </div>
<div class="form-group"> <div class="form-group">
<label>排序</label> <label>排序</label>
<input type="text" class="form-control" name="sort" value="0"> <input type="text" class="form-control" name="sort" value="0">
<p class="help-block">数字越大越靠前</p> <p class="help-block">数字越大越靠前</p>
</div> </div>
<button type="submit" class="btn btn-primary">{$Think.lang.submit}</button> <button type="submit" class="btn btn-primary">{$Think.lang.submit}</button>
</form> </form>
{if !empty($proData)} {if !empty($proData)}
<script type="text/javascript"> <script type="text/javascript">
providerClass.load({$proData|json_encode}); providerClass.load({$proData|json_encode});
</script> </script>
{/if} {/if}

View File

@ -1,7 +1,7 @@
<?php <?php
//运行应用 //运行应用
$skyApp=explode(DIRECTORY_SEPARATOR, trim(__DIR__,'\/\\')); $skyApp=explode(DIRECTORY_SEPARATOR, trim(__DIR__,'\/\\'));
$skyApp=end($skyApp); $skyApp=end($skyApp);
require_once $skyApp.'.php'; require_once $skyApp.'.php';
$skyApp=new $skyApp(); $skyApp=new $skyApp();
$skyApp->app()->run(); $skyApp->app()->run();

View File

@ -1,20 +1,20 @@
<?php <?php
/*应用配置类文件*/ /*应用配置类文件*/
include dirname(__DIR__).'/app/skycaiji.php'; include dirname(__DIR__).'/app/skycaiji.php';
class {$app} extends skycaiji{ class {$app} extends skycaiji{
/*应用配置*/ /*应用配置*/
public $config=array( public $config=array(
'framework'=>'{$framework}', //框架名称 'framework'=>'{$framework}', //框架名称
'framework_version'=>'{$framework_version}', //框架版本 'framework_version'=>'{$framework_version}', //框架版本
'name'=>'{$name}', //应用名称 'name'=>'{$name}', //应用名称
'desc'=>'{$desc}', //描述 'desc'=>'{$desc}', //描述
'version'=>'{$version}', //版本号 'version'=>'{$version}', //版本号
'author'=>'{$author}', //作者 'author'=>'{$author}', //作者
'website'=>'{$website}', //站点 'website'=>'{$website}', //站点
'packs'=>{$packs}, //扩展 'packs'=>{$packs}, //扩展
); );
public $install='{$install}'; //安装接口 public $install='{$install}'; //安装接口
public $uninstall='{$uninstall}'; //卸载接口 public $uninstall='{$uninstall}'; //卸载接口
public $upgrade='{$upgrade}'; //升级接口 public $upgrade='{$upgrade}'; //升级接口
} }

View File

@ -1,269 +1,269 @@
<?php <?php
/*应用程序核心类*/ /*应用程序核心类*/
abstract class skycaiji{ abstract class skycaiji{
private static $appInstance=null;//应用实例 private static $appInstance=null;//应用实例
public $app=''; //当前应用app标识 public $app=''; //当前应用app标识
public $appUrl=''; //当前应用的根网址 public $appUrl=''; //当前应用的根网址
public $appPath=''; //当前应用的根目录 public $appPath=''; //当前应用的根目录
public $config=array(); //当前应用配置 public $config=array(); //当前应用配置
public $system=array(); //蓝天采集器配置 public $system=array(); //蓝天采集器配置
public $systemUrl=''; //蓝天采集器根网址 public $systemUrl=''; //蓝天采集器根网址
public $systemPath=''; //蓝天采集器根目录 public $systemPath=''; //蓝天采集器根目录
public $install=''; //安装链接 public $install=''; //安装链接
public $uninstall=''; //卸载链接 public $uninstall=''; //卸载链接
public $upgrade=''; //升级链接 public $upgrade=''; //升级链接
public function __construct(){ public function __construct(){
$ds=DIRECTORY_SEPARATOR; $ds=DIRECTORY_SEPARATOR;
$this->app=get_class($this); $this->app=get_class($this);
$this->systemPath=dirname(dirname(__DIR__)); $this->systemPath=dirname(dirname(__DIR__));
$this->appPath=$this->systemPath.$ds.'app'.$ds.$this->app; $this->appPath=$this->systemPath.$ds.'app'.$ds.$this->app;
$this->appUrl=$this->root(); $this->appUrl=$this->root();
$this->systemUrl=preg_replace('/[\/\\\]app[\/\\\]'.$this->app.'[\/\\\]*$/i', '', $this->appUrl); $this->systemUrl=preg_replace('/[\/\\\]app[\/\\\]'.$this->app.'[\/\\\]*$/i', '', $this->appUrl);
$this->install=ltrim($this->install,'/'); $this->install=ltrim($this->install,'/');
$this->uninstall=ltrim($this->uninstall,'/'); $this->uninstall=ltrim($this->uninstall,'/');
$this->upgrade=ltrim($this->upgrade,'/'); $this->upgrade=ltrim($this->upgrade,'/');
} }
/*当前应用的实例*/ /*当前应用的实例*/
public static function app(){ public static function app(){
if(!isset(self::$appInstance)){ if(!isset(self::$appInstance)){
$appInstance=new static;//实例化 $appInstance=new static;//实例化
//跳过检测的链接 //跳过检测的链接
$passUrls=array('install'=>$appInstance->install,'uninstall'=>$appInstance->uninstall,'upgrade'=>$appInstance->upgrade); $passUrls=array('install'=>$appInstance->install,'uninstall'=>$appInstance->uninstall,'upgrade'=>$appInstance->upgrade);
foreach ($passUrls as $k=>$v){ foreach ($passUrls as $k=>$v){
if(empty($v)||$v=='1'){ if(empty($v)||$v=='1'){
//1表示跳过操作 //1表示跳过操作
unset($passUrls[$k]); unset($passUrls[$k]);
}else{ }else{
$v=$appInstance->appUrl.'/'.$v; $v=$appInstance->appUrl.'/'.$v;
$passUrls[$k]=strtolower($v);//必须小写 $passUrls[$k]=strtolower($v);//必须小写
} }
} }
$curUrl=$appInstance->url();//当前网址 $curUrl=$appInstance->url();//当前网址
$curUrl=strtolower($curUrl);//必须小写 $curUrl=strtolower($curUrl);//必须小写
$config=array();//已安装配置 $config=array();//已安装配置
if(!in_array($curUrl,$passUrls)){ if(!in_array($curUrl,$passUrls)){
//应用必须安装后才能操作 //应用必须安装后才能操作
$config=__DIR__.'/config/'.$appInstance->app.'.php';//已安装的配置文件 $config=__DIR__.'/config/'.$appInstance->app.'.php';//已安装的配置文件
if(!file_exists($config)){ if(!file_exists($config)){
exit('未安装应用'); exit('未安装应用');
} }
$config=include $config; $config=include $config;
$config=is_array($config)?$config:array(); $config=is_array($config)?$config:array();
if(empty($config['enable'])){ if(empty($config['enable'])){
exit('未开启应用'); exit('未开启应用');
} }
} }
//应用配置 //应用配置
$appInstance->config=is_array($appInstance->config)?$appInstance->config:array(); $appInstance->config=is_array($appInstance->config)?$appInstance->config:array();
$appInstance->config=array_merge($appInstance->config,$config);//配置合并 $appInstance->config=array_merge($appInstance->config,$config);//配置合并
//蓝天采集系统配置 //蓝天采集系统配置
$systemConfig=$appInstance->systemPath.'/data/config.php'; $systemConfig=$appInstance->systemPath.'/data/config.php';
if(file_exists($systemConfig)){ if(file_exists($systemConfig)){
$systemConfig=include $systemConfig; $systemConfig=include $systemConfig;
} }
$appInstance->system=is_array($systemConfig)?$systemConfig:array(); $appInstance->system=is_array($systemConfig)?$systemConfig:array();
self::$appInstance=$appInstance; self::$appInstance=$appInstance;
} }
return self::$appInstance; return self::$appInstance;
} }
/** /**
* 运行框架 * 运行框架
* 如果应用使用了其他框架请在应用文件中重写run方法加载框架 * 如果应用使用了其他框架请在应用文件中重写run方法加载框架
*/ */
public function run(){ public function run(){
if(!empty($this->config['framework'])){ if(!empty($this->config['framework'])){
//使用框架 //使用框架
if(empty($this->config['framework_path'])){ if(empty($this->config['framework_path'])){
$frameworkPath=$this->appFrameworkPath(); $frameworkPath=$this->appFrameworkPath();
if(is_dir($frameworkPath)){ if(is_dir($frameworkPath)){
$this->config['framework_path']=$frameworkPath; $this->config['framework_path']=$frameworkPath;
} }
} }
if(empty($this->config['framework_path'])){ if(empty($this->config['framework_path'])){
exit('框架路径错误'); exit('框架路径错误');
} }
$frameworkPath=$this->config['framework_path']; $frameworkPath=$this->config['framework_path'];
if('thinkphp'==$this->config['framework']){ if('thinkphp'==$this->config['framework']){
$version=''; $version='';
if(file_exists($frameworkPath.'/base.php')&&preg_match('/\bdefine\s*\([\'\"]THINK_VERSION[\'\"],\s*[\'\"](.*?)[\'\"]\);/i', file_get_contents($frameworkPath.'/base.php'),$version)){ if(file_exists($frameworkPath.'/base.php')&&preg_match('/\bdefine\s*\([\'\"]THINK_VERSION[\'\"],\s*[\'\"](.*?)[\'\"]\);/i', file_get_contents($frameworkPath.'/base.php'),$version)){
$version=$version[1]; $version=$version[1];
}elseif(file_exists($frameworkPath.'/library/think/App.php')&&preg_match('/\bconst\s+VERSION\s*=\s*[\'\"](.*?)[\'\"]/i', file_get_contents($frameworkPath.'/library/think/App.php'),$version)){ }elseif(file_exists($frameworkPath.'/library/think/App.php')&&preg_match('/\bconst\s+VERSION\s*=\s*[\'\"](.*?)[\'\"]/i', file_get_contents($frameworkPath.'/library/think/App.php'),$version)){
$version=$version[1]; $version=$version[1];
}elseif(file_exists($frameworkPath.'/src/think/App.php')&&preg_match('/\bconst\s+VERSION\s*=\s*[\'\"](.*?)[\'\"]/i', file_get_contents($frameworkPath.'/src/think/App.php'),$version)){ }elseif(file_exists($frameworkPath.'/src/think/App.php')&&preg_match('/\bconst\s+VERSION\s*=\s*[\'\"](.*?)[\'\"]/i', file_get_contents($frameworkPath.'/src/think/App.php'),$version)){
$version=$version[1]; $version=$version[1];
} }
if(preg_match('/^5\.0\./', $version)){ if(preg_match('/^5\.0\./', $version)){
//5.0 //5.0
define('APP_PATH', $this->appPath . '/application/'); define('APP_PATH', $this->appPath . '/application/');
require $frameworkPath . '/base.php'; require $frameworkPath . '/base.php';
\think\App::run()->send(); \think\App::run()->send();
}elseif(preg_match('/^5\.1\./', $version)){ }elseif(preg_match('/^5\.1\./', $version)){
//5.1 //5.1
define('APP_PATH', $this->appPath . '/application/'); define('APP_PATH', $this->appPath . '/application/');
require $frameworkPath . '/base.php'; require $frameworkPath . '/base.php';
\think\Container::get('app')->path(APP_PATH)->run()->send(); \think\Container::get('app')->path(APP_PATH)->run()->send();
}elseif(preg_match('/^6\.0\./', $version)){ }elseif(preg_match('/^6\.0\./', $version)){
//6.0 //6.0
require $this->appPath . '/vendor/autoload.php'; require $this->appPath . '/vendor/autoload.php';
$http = (new \think\App())->http; $http = (new \think\App())->http;
$response = $http->run(); $response = $http->run();
$response->send(); $response->send();
$http->end($response); $http->end($response);
} }
}elseif('laravel'==$this->config['framework']){ }elseif('laravel'==$this->config['framework']){
$version=''; $version='';
$frameworkPath.='/src/Illuminate'; $frameworkPath.='/src/Illuminate';
if(preg_match('/\bconst\s+VERSION\s*=\s*[\'\"](.*?)[\'\"]/i', file_get_contents($frameworkPath.'/Foundation/Application.php'),$version)){ if(preg_match('/\bconst\s+VERSION\s*=\s*[\'\"](.*?)[\'\"]/i', file_get_contents($frameworkPath.'/Foundation/Application.php'),$version)){
$version=$version[1]; $version=$version[1];
}else{ }else{
$version=''; $version='';
} }
if(preg_match('/^5\.1\./', $version)){ if(preg_match('/^5\.1\./', $version)){
//5.1.x //5.1.x
require $this->appPath.'/bootstrap/autoload.php'; require $this->appPath.'/bootstrap/autoload.php';
$app = require_once $this->appPath.'/bootstrap/app.php'; $app = require_once $this->appPath.'/bootstrap/app.php';
$kernel = $app->make('Illuminate\Contracts\Http\Kernel'); $kernel = $app->make('Illuminate\Contracts\Http\Kernel');
$response = $kernel->handle( $response = $kernel->handle(
$request = \Illuminate\Http\Request::capture() $request = \Illuminate\Http\Request::capture()
); );
$response->send(); $response->send();
$kernel->terminate($request, $response); $kernel->terminate($request, $response);
}elseif(preg_match('/^5\.5\./', $version)){ }elseif(preg_match('/^5\.5\./', $version)){
//5.5.x //5.5.x
define('LARAVEL_START', microtime(true)); define('LARAVEL_START', microtime(true));
require $this->appPath.'/vendor/autoload.php'; require $this->appPath.'/vendor/autoload.php';
$app = require_once $this->appPath.'/bootstrap/app.php'; $app = require_once $this->appPath.'/bootstrap/app.php';
$kernel = $app->make('Illuminate\Contracts\Http\Kernel'); $kernel = $app->make('Illuminate\Contracts\Http\Kernel');
$response = $kernel->handle( $response = $kernel->handle(
$request = \Illuminate\Http\Request::capture() $request = \Illuminate\Http\Request::capture()
); );
$response->send(); $response->send();
$kernel->terminate($request, $response); $kernel->terminate($request, $response);
} }
} }
} }
} }
/** /**
* 获取内置的框架路径 * 获取内置的框架路径
*/ */
public function appFrameworkPath(){ public function appFrameworkPath(){
$frameworkPath=''; $frameworkPath='';
if(empty($this->config['framework_path'])){ if(empty($this->config['framework_path'])){
//检测框架是否存在 //检测框架是否存在
switch ($this->config['framework']){ switch ($this->config['framework']){
case 'thinkphp': case 'thinkphp':
$frameworkPath=$this->appPath.'/vendor/topthink/framework'; $frameworkPath=$this->appPath.'/vendor/topthink/framework';
if(!file_exists($frameworkPath)){ if(!file_exists($frameworkPath)){
//不存在目录 //不存在目录
$frameworkPath=$this->appPath.'/thinkphp';//使用旧形式的框架目录 $frameworkPath=$this->appPath.'/thinkphp';//使用旧形式的框架目录
} }
break; break;
case 'laravel':$frameworkPath=$this->appPath.'/vendor/laravel/framework';break; case 'laravel':$frameworkPath=$this->appPath.'/vendor/laravel/framework';break;
} }
} }
return $frameworkPath; return $frameworkPath;
} }
/** /**
* 获取当前执行的文件 * 获取当前执行的文件
*/ */
public function baseFile(){ public function baseFile(){
$url=''; $url='';
$script_name = basename($_SERVER['SCRIPT_FILENAME']); $script_name = basename($_SERVER['SCRIPT_FILENAME']);
if (basename($_SERVER['SCRIPT_NAME']) === $script_name) { if (basename($_SERVER['SCRIPT_NAME']) === $script_name) {
$url = $_SERVER['SCRIPT_NAME']; $url = $_SERVER['SCRIPT_NAME'];
} elseif (basename($_SERVER['PHP_SELF']) === $script_name) { } elseif (basename($_SERVER['PHP_SELF']) === $script_name) {
$url = $_SERVER['PHP_SELF']; $url = $_SERVER['PHP_SELF'];
} elseif (isset($_SERVER['ORIG_SCRIPT_NAME']) && basename($_SERVER['ORIG_SCRIPT_NAME']) === $script_name) { } elseif (isset($_SERVER['ORIG_SCRIPT_NAME']) && basename($_SERVER['ORIG_SCRIPT_NAME']) === $script_name) {
$url = $_SERVER['ORIG_SCRIPT_NAME']; $url = $_SERVER['ORIG_SCRIPT_NAME'];
} elseif (($pos = strpos($_SERVER['PHP_SELF'], '/' . $script_name)) !== false) { } elseif (($pos = strpos($_SERVER['PHP_SELF'], '/' . $script_name)) !== false) {
$url = substr($_SERVER['SCRIPT_NAME'], 0, $pos) . '/' . $script_name; $url = substr($_SERVER['SCRIPT_NAME'], 0, $pos) . '/' . $script_name;
} elseif (isset($_SERVER['DOCUMENT_ROOT']) && strpos($_SERVER['SCRIPT_FILENAME'], $_SERVER['DOCUMENT_ROOT']) === 0) { } elseif (isset($_SERVER['DOCUMENT_ROOT']) && strpos($_SERVER['SCRIPT_FILENAME'], $_SERVER['DOCUMENT_ROOT']) === 0) {
$url = str_replace('\\', '/', str_replace($_SERVER['DOCUMENT_ROOT'], '', $_SERVER['SCRIPT_FILENAME'])); $url = str_replace('\\', '/', str_replace($_SERVER['DOCUMENT_ROOT'], '', $_SERVER['SCRIPT_FILENAME']));
} }
return $url; return $url;
} }
/** /**
* 获取当前完整URL * 获取当前完整URL
*/ */
public function url(){ public function url(){
$url=''; $url='';
if (isset($_SERVER['HTTP_X_REWRITE_URL'])) { if (isset($_SERVER['HTTP_X_REWRITE_URL'])) {
$url = $_SERVER['HTTP_X_REWRITE_URL']; $url = $_SERVER['HTTP_X_REWRITE_URL'];
} elseif (isset($_SERVER['REQUEST_URI'])) { } elseif (isset($_SERVER['REQUEST_URI'])) {
$url = $_SERVER['REQUEST_URI']; $url = $_SERVER['REQUEST_URI'];
} elseif (isset($_SERVER['ORIG_PATH_INFO'])) { } elseif (isset($_SERVER['ORIG_PATH_INFO'])) {
$url = $_SERVER['ORIG_PATH_INFO'] . (!empty($_SERVER['QUERY_STRING']) ? '?' . $_SERVER['QUERY_STRING'] : ''); $url = $_SERVER['ORIG_PATH_INFO'] . (!empty($_SERVER['QUERY_STRING']) ? '?' . $_SERVER['QUERY_STRING'] : '');
} else { } else {
$url = ''; $url = '';
} }
return $url; return $url;
} }
/** /**
* 获取应用根目录 * 获取应用根目录
* @return string * @return string
*/ */
public function root(){ public function root(){
$file = $this->baseFile(); $file = $this->baseFile();
if ($file && 0 !== strpos($this->url(), $file)) { if ($file && 0 !== strpos($this->url(), $file)) {
$file = str_replace('\\', '/', dirname($file)); $file = str_replace('\\', '/', dirname($file));
} }
return rtrim($file, '/'); return rtrim($file, '/');
} }
/** /**
* 判断蓝天采集器是否管理员登录 * 判断蓝天采集器是否管理员登录
* @param string $jump 是否跳转至登录界面 * @param string $jump 是否跳转至登录界面
* @return boolean * @return boolean
*/ */
public function isAdmin($jump=false){ public function isAdmin($jump=false){
if(session_status()!==2){ if(session_status()!==2){
session_start(); session_start();
} }
if(isset($_SESSION['skycaiji'])&&!empty($_SESSION['skycaiji']['is_admin'])){ if(isset($_SESSION['skycaiji'])&&!empty($_SESSION['skycaiji']['is_admin'])){
return true; return true;
}else{ }else{
if($jump){ if($jump){
//跳转至登录页面 //跳转至登录页面
$url=$this->url(); $url=$this->url();
$url=$this->systemUrl.'/index.php?s=admin&_referer='.rawurlencode($url); $url=$this->systemUrl.'/index.php?s=admin&_referer='.rawurlencode($url);
$html='<meta http-equiv="refresh" content="1;url='.$url.'">请登录管理员账号'; $html='<meta http-equiv="refresh" content="1;url='.$url.'">请登录管理员账号';
exit($html); exit($html);
}else{ }else{
return false; return false;
} }
} }
} }
/** /**
* 输出json格式状态信息 * 输出json格式状态信息
* @param init $status 状态 1:成功 ,0:失败 * @param init $status 状态 1:成功 ,0:失败
* @param string $info 提示内容 * @param string $info 提示内容
* @param string $url 跳转网址 * @param string $url 跳转网址
*/ */
public function status($status=0,$info='',$url=''){ public function status($status=0,$info='',$url=''){
$data=array('status'=>$status,'info'=>$info,'url'=>$url); $data=array('status'=>$status,'info'=>$info,'url'=>$url);
$data=json_encode($data); $data=json_encode($data);
header('content-type:application/json;charset=utf-8'); header('content-type:application/json;charset=utf-8');
exit($data); exit($data);
} }
} }
/** /**
* 获取当前app实例化对象 * 获取当前app实例化对象
* 所有skycaiji类及子类中的方法都应该通过该函数来调用 * 所有skycaiji类及子类中的方法都应该通过该函数来调用
*/ */
if(!defined('skycaiji_app')){ if(!defined('skycaiji_app')){
function skycaiji_app(){ function skycaiji_app(){
return \skycaiji::app(); return \skycaiji::app();
} }
} }

View File

@ -1,25 +1,25 @@
<?php <?php
// +---------------------------------------------------------------------- // +----------------------------------------------------------------------
// | ThinkPHP [ WE CAN DO IT JUST THINK ] // | ThinkPHP [ WE CAN DO IT JUST THINK ]
// +---------------------------------------------------------------------- // +----------------------------------------------------------------------
// | Copyright (c) 2006~2018 http://thinkphp.cn All rights reserved. // | Copyright (c) 2006~2018 http://thinkphp.cn All rights reserved.
// +---------------------------------------------------------------------- // +----------------------------------------------------------------------
// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 ) // | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
// +---------------------------------------------------------------------- // +----------------------------------------------------------------------
// | Author: liu21st <liu21st@gmail.com> // | Author: liu21st <liu21st@gmail.com>
// +---------------------------------------------------------------------- // +----------------------------------------------------------------------
return [ return [
// 生成应用公共文件 // 生成应用公共文件
'__file__' => ['common.php', 'config.php', 'database.php'], '__file__' => ['common.php', 'config.php', 'database.php'],
// 定义demo模块的自动生成 (按照实际定义的文件名生成) // 定义demo模块的自动生成 (按照实际定义的文件名生成)
'demo' => [ 'demo' => [
'__file__' => ['common.php'], '__file__' => ['common.php'],
'__dir__' => ['behavior', 'controller', 'model', 'view'], '__dir__' => ['behavior', 'controller', 'model', 'view'],
'controller' => ['Index', 'Test', 'UserType'], 'controller' => ['Index', 'Test', 'UserType'],
'model' => ['User', 'UserType'], 'model' => ['User', 'UserType'],
'view' => ['index/index'], 'view' => ['index/index'],
], ],
// 其他更多的模块定义 // 其他更多的模块定义
]; ];

View File

@ -1,4 +1,4 @@
if (!-e $request_filename) { if (!-e $request_filename) {
rewrite ^/app/(\w+)/(.*)$ /app/$1/index.php?s=/$2 last; rewrite ^/app/(\w+)/(.*)$ /app/$1/index.php?s=/$2 last;
rewrite ^/(.*)$ /index.php?s=/$1 last; rewrite ^/(.*)$ /index.php?s=/$1 last;
} }

View File

@ -1,25 +1,25 @@
@CHARSET "UTF-8"; @CHARSET "UTF-8";
.content-wrapper .content-header{display:none;} .content-wrapper .content-header{display:none;}
.content-wrapper .content{padding:0;height:100%;overflow:hidden;position:relative;} .content-wrapper .content{padding:0;height:100%;overflow:hidden;position:relative;}
.content-wrapper{background:#fdfdfd;} .content-wrapper{background:#fdfdfd;}
.manage-nav{margin:0;padding:0px;overflow:hidden;list-style:none;border-bottom:1px solid #ddd;background:#ecf0f5;} .manage-nav{margin:0;padding:0px;overflow:hidden;list-style:none;border-bottom:1px solid #ddd;background:#ecf0f5;}
.manage-nav li{padding:8px 0px 8px 15px;margin:0;float:left;} .manage-nav li{padding:8px 0px 8px 15px;margin:0;float:left;}
.manage-nav .active{font-weight:bold;} .manage-nav .active{font-weight:bold;}
.manage-nav .glyphicon-list{margin-top:1px;} .manage-nav .glyphicon-list{margin-top:1px;}
.dl-info{} .dl-info{}
.dl-info dt{float:left;clear:left;width:60px;padding-top:10px;} .dl-info dt{float:left;clear:left;width:60px;padding-top:10px;}
.dl-info dd{margin-left:60px;padding-top:10px;} .dl-info dd{margin-left:60px;padding-top:10px;}
.iframe-main{ .iframe-main{
width: 100%; width: 100%;
height: 100%; height: 100%;
display:none; display:none;
border-top-width: 0px; border-top-width: 0px;
border-right-width: 0px; border-right-width: 0px;
border-bottom-width: 0px; border-bottom-width: 0px;
border-left-width: 0px; border-left-width: 0px;
} }
.iframe-loading{position:absolute;left:20px;top:60px;line-height:32px;text-align:center;} .iframe-loading{position:absolute;left:20px;top:60px;line-height:32px;text-align:center;}
.iframe-loading .loading{float:left;margin-right:5px;} .iframe-loading .loading{float:left;margin-right:5px;}

View File

@ -1,12 +1,12 @@
/* /*
|-------------------------------------------------------------------------- |--------------------------------------------------------------------------
| SkyCaiji (蓝天采集器) | SkyCaiji (蓝天采集器)
|-------------------------------------------------------------------------- |--------------------------------------------------------------------------
| Copyright (c) 2018 https://www.skycaiji.com All rights reserved. | Copyright (c) 2018 https://www.skycaiji.com All rights reserved.
|-------------------------------------------------------------------------- |--------------------------------------------------------------------------
| 使用协议 https://www.skycaiji.com/licenses | 使用协议 https://www.skycaiji.com/licenses
|-------------------------------------------------------------------------- |--------------------------------------------------------------------------
*/ */
'use strict';function AppClass(){} 'use strict';function AppClass(){}
AppClass.prototype={constructor:AppClass,init_list:function(){var $_o=this;$(document).ready(function(){$('#app_list').on('click','.install',function(){var obj=$(this);var parent=obj.parents('tr[data-app]');var app=parent.attr('data-app');if(parent.attr('data-agreement')){windowModal('协议',ulink('Admin/App/agreement?app=_app_',{'_app_':app}))}else{confirmRight('是否安装?',function(){windowModal('正在安装...',ulink('Admin/App/install?app=_app_',{'_app_':app}))})}});$('#app_list').on('click','.uninstall',function(){var obj=$(this);confirmRight('卸载会清理相关数据,确定卸载?',function(){var app=obj.parents('tr[data-app]').attr('data-app');windowModal('正在卸载...',ulink('Admin/App/uninstall?app=_app_',{'_app_':app}))})});$('#app_list').on('click','.upgrade',function(){var obj=$(this);confirmRight('确定升级至新版本?',function(){var app=obj.parents('tr[data-app]').attr('data-app');windowModal('正在升级...',ulink('Admin/App/upgrade?app=_app_',{'_app_':app}))})});$('#app_list').on('click','.enable',function(){var app=$(this).parents('tr[data-app]').attr('data-app');var enable=$(this).attr('data-enable');enable=parseInt(enable);enable=enable>0?0:1;windowModal((enable?'开启':'关闭')+'应用',ulink('Admin/App/enable?app=_app_&enable=_enable_',{'_app_':app,'_enable_':enable}))});$("[data-toggle='popover']").popover();if($('#auto_check').is(':checked')){$_o.check_update()} AppClass.prototype={constructor:AppClass,init_list:function(){var $_o=this;$(document).ready(function(){$('#app_list').on('click','.install',function(){var obj=$(this);var parent=obj.parents('tr[data-app]');var app=parent.attr('data-app');if(parent.attr('data-agreement')){windowModal('协议',ulink('Admin/App/agreement?app=_app_',{'_app_':app}))}else{confirmRight('是否安装?',function(){windowModal('正在安装...',ulink('Admin/App/install?app=_app_',{'_app_':app}))})}});$('#app_list').on('click','.uninstall',function(){var obj=$(this);confirmRight('卸载会清理相关数据,确定卸载?',function(){var app=obj.parents('tr[data-app]').attr('data-app');windowModal('正在卸载...',ulink('Admin/App/uninstall?app=_app_',{'_app_':app}))})});$('#app_list').on('click','.upgrade',function(){var obj=$(this);confirmRight('确定升级至新版本?',function(){var app=obj.parents('tr[data-app]').attr('data-app');windowModal('正在升级...',ulink('Admin/App/upgrade?app=_app_',{'_app_':app}))})});$('#app_list').on('click','.enable',function(){var app=$(this).parents('tr[data-app]').attr('data-app');var enable=$(this).attr('data-enable');enable=parseInt(enable);enable=enable>0?0:1;windowModal((enable?'开启':'关闭')+'应用',ulink('Admin/App/enable?app=_app_&enable=_enable_',{'_app_':app,'_enable_':enable}))});$("[data-toggle='popover']").popover();if($('#auto_check').is(':checked')){$_o.check_update()}
$('#auto_check').bind('click',function(){var auto=$(this).is(':checked')?1:0;$.ajax({type:"GET",url:ulink('Mystore/appOp?op=auto_check&auto='+auto),dataType:"json",success:function(data){data.code==1?toastr.success(data.msg):toastr.error(data.msg)}})});$('#btn_check').bind('click',function(){$_o.check_update()})})},init_manage:function(){$('#app_manage .nav-tabs a').bind('click',function(){if($(this).attr('target')=='_blank'){window.open($(this).attr('data-url'),'_blank');return!1}});$('#newest_version').bind('click',function(){var obj=$(this);confirmRight('确定升级至新版本?',function(){var app=obj.attr('data-app');windowModal('正在升级...',ulink('Admin/App/upgrade?app=_app_',{'_app_':app}))})});$('#enable').bind('click',function(){var app=$(this).attr('data-app');var enable=$(this).attr('data-enable');enable=parseInt(enable);enable=enable>0?0:1;windowModal((enable?'开启':'关闭')+'应用',ulink('Admin/App/enable?app=_app_&enable=_enable_',{'_app_':app,'_enable_':enable}))});if(document.getElementById('iframe_main')){var boxHeight=$(window).height()-$('.main-header').height();$('.content').height(boxHeight+'px');boxHeight=boxHeight-$('.content .manage-nav').height();$('.content .manage-wrap').height(boxHeight);$('#iframe_main').on('load',function(){$('.iframe-loading').remove();$(this).show()})}},check_update:function(){var apps=new Array();$('#app_list').find('tr[data-app]').each(function(){apps.push($(this).attr('data-app'))});if(apps.length>0){$('#btn_check').html('检测更新 <img src="'+window.site_config.pub+'/static/images/load1.gif" style="width:12px;vertical-align:middle;">');$('.app-store-info').find('.has-update').remove();$.ajax({type:"get",url:ulink('Mystore/appOp?op=check_store_update'),dataType:"json",async:!0,data:{apps:apps},success:function(data){if(data.code==1&&data.data){for(var i in data.data){var app=data.data[i];var storeInfo=$('tr[data-app="'+app.app+'"]').find('.app-store-info');var html='<div class="has-update"><span class="glyphicon glyphicon-exclamation-sign"></span>有更新</div>';storeInfo.append(html)}}else{ajaxDataMsg(data)}},complete:function(){$('#btn_check').html('检测更新')}})}},};var appClass=new AppClass();$(document).ready(function(){storeClass.init_my()}) $('#auto_check').bind('click',function(){var auto=$(this).is(':checked')?1:0;$.ajax({type:"GET",url:ulink('Mystore/appOp?op=auto_check&auto='+auto),dataType:"json",success:function(data){data.code==1?toastr.success(data.msg):toastr.error(data.msg)}})});$('#btn_check').bind('click',function(){$_o.check_update()})})},init_manage:function(){$('#app_manage .nav-tabs a').bind('click',function(){if($(this).attr('target')=='_blank'){window.open($(this).attr('data-url'),'_blank');return!1}});$('#newest_version').bind('click',function(){var obj=$(this);confirmRight('确定升级至新版本?',function(){var app=obj.attr('data-app');windowModal('正在升级...',ulink('Admin/App/upgrade?app=_app_',{'_app_':app}))})});$('#enable').bind('click',function(){var app=$(this).attr('data-app');var enable=$(this).attr('data-enable');enable=parseInt(enable);enable=enable>0?0:1;windowModal((enable?'开启':'关闭')+'应用',ulink('Admin/App/enable?app=_app_&enable=_enable_',{'_app_':app,'_enable_':enable}))});if(document.getElementById('iframe_main')){var boxHeight=$(window).height()-$('.main-header').height();$('.content').height(boxHeight+'px');boxHeight=boxHeight-$('.content .manage-nav').height();$('.content .manage-wrap').height(boxHeight);$('#iframe_main').on('load',function(){$('.iframe-loading').remove();$(this).show()})}},check_update:function(){var apps=new Array();$('#app_list').find('tr[data-app]').each(function(){apps.push($(this).attr('data-app'))});if(apps.length>0){$('#btn_check').html('检测更新 <img src="'+window.site_config.pub+'/static/images/load1.gif" style="width:12px;vertical-align:middle;">');$('.app-store-info').find('.has-update').remove();$.ajax({type:"get",url:ulink('Mystore/appOp?op=check_store_update'),dataType:"json",async:!0,data:{apps:apps},success:function(data){if(data.code==1&&data.data){for(var i in data.data){var app=data.data[i];var storeInfo=$('tr[data-app="'+app.app+'"]').find('.app-store-info');var html='<div class="has-update"><span class="glyphicon glyphicon-exclamation-sign"></span>有更新</div>';storeInfo.append(html)}}else{ajaxDataMsg(data)}},complete:function(){$('#btn_check').html('检测更新')}})}},};var appClass=new AppClass();$(document).ready(function(){storeClass.init_my()})

View File

@ -1,12 +1,12 @@
/* /*
|-------------------------------------------------------------------------- |--------------------------------------------------------------------------
| SkyCaiji (蓝天采集器) | SkyCaiji (蓝天采集器)
|-------------------------------------------------------------------------- |--------------------------------------------------------------------------
| Copyright (c) 2018 https://www.skycaiji.com All rights reserved. | Copyright (c) 2018 https://www.skycaiji.com All rights reserved.
|-------------------------------------------------------------------------- |--------------------------------------------------------------------------
| 使用协议 https://www.skycaiji.com/licenses | 使用协议 https://www.skycaiji.com/licenses
|-------------------------------------------------------------------------- |--------------------------------------------------------------------------
*/ */
'use strict';function ProviderClass(){} 'use strict';function ProviderClass(){}
ProviderClass.prototype={constructor:ProviderClass,list_init:function(){$('#form_list').on('click','.delete',function(){var tr=$(this).parents('tr[data-id]');var id=tr.attr('data-id');confirmRight('确定删除?',function(){$.ajax({type:'GET',url:ulink('Provider/delete?id='+id),dataType:'json',success:function(data){if(data.code){tr.remove();toastr.success('删除成功')}else{toastr.error(data.msg)}}})})});$('#form_list').on('click','.comment',function(){var url=$(this).parents('tr[data-url]').attr('data-url');url='https://www.skycaiji.com/provider?url='+encodeURIComponent(url);windowStore('评价',url,{lg:1});return!1});$('#form_list').on('click','.edit',function(){var id=$(this).parents('tr[data-id]').attr('data-id');windowModal('编辑',ulink('provider/save?id='+id));return!1});$('#form_list').on('click','.store',function(){var url=$(this).parents('tr[data-url]').attr('data-url');window.location.href=ulink('Store/index?url='+encodeURIComponent(url));return!1});$('#form_list').on('click','.enable',function(){var obj=$(this);var id=$(this).parents('tr[data-id]').attr('data-id');var enable=($(this).text()=='允许')?0:1;$.ajax({type:'GET',url:ulink('Provider/enable?id='+id+'&enable='+enable),dataType:'json',success:function(data){if(data.code){obj.text(enable?'允许':'拒绝');obj.css('color',(enable?'green':'red'))}else{toastr.error(data.msg)}}})});$('#btn_add').bind('click',function(){windowModal('添加',ulink('provider/save'));return!1})},load:function(data){var fid='#win_form_provider';if(data){$(fid).find('[name="url"]').val(data.url);$(fid).find('[name="title"]').val(data.title);$(fid).find('[name="sort"]').val(data.sort);$(fid).find('[name="enable"][value="'+data.enable+'"]').prop('checked','checked')}}} ProviderClass.prototype={constructor:ProviderClass,list_init:function(){$('#form_list').on('click','.delete',function(){var tr=$(this).parents('tr[data-id]');var id=tr.attr('data-id');confirmRight('确定删除?',function(){$.ajax({type:'GET',url:ulink('Provider/delete?id='+id),dataType:'json',success:function(data){if(data.code){tr.remove();toastr.success('删除成功')}else{toastr.error(data.msg)}}})})});$('#form_list').on('click','.comment',function(){var url=$(this).parents('tr[data-url]').attr('data-url');url='https://www.skycaiji.com/provider?url='+encodeURIComponent(url);windowStore('评价',url,{lg:1});return!1});$('#form_list').on('click','.edit',function(){var id=$(this).parents('tr[data-id]').attr('data-id');windowModal('编辑',ulink('provider/save?id='+id));return!1});$('#form_list').on('click','.store',function(){var url=$(this).parents('tr[data-url]').attr('data-url');window.location.href=ulink('Store/index?url='+encodeURIComponent(url));return!1});$('#form_list').on('click','.enable',function(){var obj=$(this);var id=$(this).parents('tr[data-id]').attr('data-id');var enable=($(this).text()=='允许')?0:1;$.ajax({type:'GET',url:ulink('Provider/enable?id='+id+'&enable='+enable),dataType:'json',success:function(data){if(data.code){obj.text(enable?'允许':'拒绝');obj.css('color',(enable?'green':'red'))}else{toastr.error(data.msg)}}})});$('#btn_add').bind('click',function(){windowModal('添加',ulink('provider/save'));return!1})},load:function(data){var fid='#win_form_provider';if(data){$(fid).find('[name="url"]').val(data.url);$(fid).find('[name="title"]').val(data.title);$(fid).find('[name="sort"]').val(data.sort);$(fid).find('[name="enable"][value="'+data.enable+'"]').prop('checked','checked')}}}
var providerClass=new ProviderClass() var providerClass=new ProviderClass()