add:新增安装模块的类
This commit is contained in:
parent
bbfb206210
commit
1a965ff4f5
@ -8,3 +8,210 @@
|
|||||||
// +----------------------------------------------------------------------
|
// +----------------------------------------------------------------------
|
||||||
// | Author: JaguarJack [ njphper@gmail.com ]
|
// | Author: JaguarJack [ njphper@gmail.com ]
|
||||||
// +----------------------------------------------------------------------
|
// +----------------------------------------------------------------------
|
||||||
|
namespace catcher\library;
|
||||||
|
|
||||||
|
use catcher\CatchAdmin;
|
||||||
|
use catcher\command\MigrateCreateCommand;
|
||||||
|
use catcher\command\MigrateRollbackCommand;
|
||||||
|
use catcher\command\SeedRunCommand;
|
||||||
|
use catcher\facade\FileSystem;
|
||||||
|
use think\facade\Console;
|
||||||
|
|
||||||
|
class InstallCatchModule
|
||||||
|
{
|
||||||
|
protected $installPath;
|
||||||
|
|
||||||
|
protected $module;
|
||||||
|
|
||||||
|
protected $compress;
|
||||||
|
|
||||||
|
public function __construct()
|
||||||
|
{
|
||||||
|
$this->compress = new Compress();
|
||||||
|
|
||||||
|
$this->registerCommands();
|
||||||
|
}
|
||||||
|
|
||||||
|
public function run()
|
||||||
|
{
|
||||||
|
if ($this->isFirstInstall()) {
|
||||||
|
if ($this->download()) {
|
||||||
|
$this->install();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 是否是首页安装
|
||||||
|
*
|
||||||
|
* @time 2020年07月26日
|
||||||
|
* @return bool
|
||||||
|
*/
|
||||||
|
public function isFirstInstall()
|
||||||
|
{
|
||||||
|
return !FileSystem::exists($this->getInstallPath() . $this->module);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 搜索模块
|
||||||
|
*
|
||||||
|
* @time 2020年07月26日
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
public function searchModule()
|
||||||
|
{
|
||||||
|
return 'http://api.catchadmin.com/hello.zip';
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 下载
|
||||||
|
*
|
||||||
|
* @time 2020年07月26日
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
public function download()
|
||||||
|
{
|
||||||
|
return $this->compress->savePath($this->getModuleZip())->download($this->searchModule());
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 安装
|
||||||
|
*
|
||||||
|
* @time 2020年07月26日
|
||||||
|
* @throws \Exception
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function install()
|
||||||
|
{
|
||||||
|
$this->extractTo();
|
||||||
|
|
||||||
|
$this->installDatabaseTables();
|
||||||
|
|
||||||
|
$this->installTableData();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 解压
|
||||||
|
*
|
||||||
|
* @time 2020年07月26日
|
||||||
|
* @throws \Exception
|
||||||
|
* @return bool
|
||||||
|
*/
|
||||||
|
public function extractTo()
|
||||||
|
{
|
||||||
|
$zip = new Zip();
|
||||||
|
|
||||||
|
$zip->make($this->getModuleZip())->extractTo($this->getInstallPath())->close();
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取模块
|
||||||
|
*
|
||||||
|
* @time 2020年07月26日
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
protected function getModuleZip()
|
||||||
|
{
|
||||||
|
return $this->downloadPath() . $this->module . '_'. date('YmdHis') . '.zip';
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 安装表
|
||||||
|
*
|
||||||
|
* @time 2020年07月26日
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function installDatabaseTables()
|
||||||
|
{
|
||||||
|
Console::call('catch-migrate:run', [$this->module]);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 初始化表数据
|
||||||
|
*
|
||||||
|
* @time 2020年07月26日
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function installTableData()
|
||||||
|
{
|
||||||
|
Console::call('catch-seed:run', [$this->module]);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 注册命令
|
||||||
|
*
|
||||||
|
* @time 2020年07月26日
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
protected function registerCommands()
|
||||||
|
{
|
||||||
|
return app()->console->addCommands([
|
||||||
|
MigrateCreateCommand::class,
|
||||||
|
SeedRunCommand::class,
|
||||||
|
MigrateRollbackCommand::class,
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 下载路径
|
||||||
|
*
|
||||||
|
* @time 2020年07月26日
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
protected function downloadPath()
|
||||||
|
{
|
||||||
|
$path = runtime_path('catch' . DIRECTORY_SEPARATOR . 'download');
|
||||||
|
|
||||||
|
if (!FileSystem::exists($path)) {
|
||||||
|
FileSystem::makeDirectory($path, 0777, true);
|
||||||
|
}
|
||||||
|
|
||||||
|
return $path;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取安装路径
|
||||||
|
*
|
||||||
|
* @time 2020年07月26日
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
protected function getInstallPath()
|
||||||
|
{
|
||||||
|
if ($this->installPath) {
|
||||||
|
return root_path($this->installPath);
|
||||||
|
}
|
||||||
|
|
||||||
|
return CatchAdmin::directory();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 设置模块
|
||||||
|
*
|
||||||
|
* @time 2020年07月26日
|
||||||
|
* @param $module
|
||||||
|
* @return $this
|
||||||
|
*/
|
||||||
|
public function setModule($module)
|
||||||
|
{
|
||||||
|
$this->module = $module;
|
||||||
|
|
||||||
|
return $this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 设置安装目录
|
||||||
|
*
|
||||||
|
* @time 2020年07月26日
|
||||||
|
* @param $path
|
||||||
|
* @return $this
|
||||||
|
*/
|
||||||
|
public function setInstallPath($path)
|
||||||
|
{
|
||||||
|
$this->installPath = $path;
|
||||||
|
|
||||||
|
return $this;
|
||||||
|
}
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user