ComposerUpdate

This commit is contained in:
Anyon 2020-04-23 17:17:51 +08:00
parent cbcc605ad9
commit 9132120745
13 changed files with 93 additions and 80 deletions

8
composer.lock generated
View File

@ -909,12 +909,12 @@
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/zoujingli/ThinkLibrary.git", "url": "https://github.com/zoujingli/ThinkLibrary.git",
"reference": "89beab0c55d0fb9167913764b78ede9859485fad" "reference": "2858d5d77526e064d7dd89f793ae9269310a6cba"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/zoujingli/ThinkLibrary/zipball/89beab0c55d0fb9167913764b78ede9859485fad", "url": "https://api.github.com/repos/zoujingli/ThinkLibrary/zipball/2858d5d77526e064d7dd89f793ae9269310a6cba",
"reference": "89beab0c55d0fb9167913764b78ede9859485fad", "reference": "2858d5d77526e064d7dd89f793ae9269310a6cba",
"shasum": "", "shasum": "",
"mirrors": [ "mirrors": [
{ {
@ -958,7 +958,7 @@
], ],
"description": "ThinkPHP v6.0 Development Library", "description": "ThinkPHP v6.0 Development Library",
"homepage": "http://framework.thinkadmin.top", "homepage": "http://framework.thinkadmin.top",
"time": "2020-04-22T06:44:38+00:00" "time": "2020-04-23T09:13:17+00:00"
}, },
{ {
"name": "zoujingli/wechat-developer", "name": "zoujingli/wechat-developer",

View File

@ -935,12 +935,12 @@
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/zoujingli/ThinkLibrary.git", "url": "https://github.com/zoujingli/ThinkLibrary.git",
"reference": "89beab0c55d0fb9167913764b78ede9859485fad" "reference": "2858d5d77526e064d7dd89f793ae9269310a6cba"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/zoujingli/ThinkLibrary/zipball/89beab0c55d0fb9167913764b78ede9859485fad", "url": "https://api.github.com/repos/zoujingli/ThinkLibrary/zipball/2858d5d77526e064d7dd89f793ae9269310a6cba",
"reference": "89beab0c55d0fb9167913764b78ede9859485fad", "reference": "2858d5d77526e064d7dd89f793ae9269310a6cba",
"shasum": "", "shasum": "",
"mirrors": [ "mirrors": [
{ {
@ -956,7 +956,7 @@
"ext-json": "*", "ext-json": "*",
"topthink/framework": "^6.0" "topthink/framework": "^6.0"
}, },
"time": "2020-04-22T06:44:38+00:00", "time": "2020-04-23T09:13:17+00:00",
"type": "library", "type": "library",
"extra": { "extra": {
"think": { "think": {

2
vendor/services.php vendored
View File

@ -1,5 +1,5 @@
<?php <?php
// This file is automatically generated at:2020-04-22 14:46:30 // This file is automatically generated at:2020-04-23 17:17:37
declare (strict_types = 1); declare (strict_types = 1);
return array ( return array (
0 => 'think\\app\\Service', 0 => 'think\\app\\Service',

View File

@ -17,6 +17,7 @@ namespace think\admin;
use think\App; use think\App;
use think\Container; use think\Container;
use think\Db;
use think\db\Query; use think\db\Query;
/** /**
@ -58,9 +59,9 @@ abstract class Helper
/** /**
* 获取数据库对象 * 获取数据库对象
* @param string|Query $dbQuery * @param string|Query $dbQuery
* @return Query * @return Db|Query
*/ */
protected function buildQuery($dbQuery): Query protected function buildQuery($dbQuery)
{ {
return is_string($dbQuery) ? $this->app->db->name($dbQuery) : $dbQuery; return is_string($dbQuery) ? $this->app->db->name($dbQuery) : $dbQuery;
} }

View File

@ -36,7 +36,7 @@ class Version extends Command
protected function execute(Input $input, Output $output) protected function execute(Input $input, Output $output)
{ {
$output->writeln("ThinkAdmin " . ProcessService::instance()->version()); $output->writeln('ThinkLib ' . ProcessService::instance()->version());
$output->writeln('ThinkPHPCore ' . App::VERSION); $output->writeln('ThinkPHP ' . App::VERSION);
} }
} }

View File

@ -47,9 +47,9 @@ if (!function_exists('auth')) {
} }
if (!function_exists('sysuri')) { if (!function_exists('sysuri')) {
/** /**
* 生成最短URL地址 * 生成最短 URL 地址
* @param string $url 路由地址 * @param string $url 路由地址
* @param array $vars 变量 * @param array $vars PATH 变量
* @param boolean|string $suffix 后缀 * @param boolean|string $suffix 后缀
* @param boolean|string $domain 域名 * @param boolean|string $domain 域名
* @return string * @return string
@ -212,6 +212,23 @@ if (!function_exists('data_save')) {
return SystemService::instance()->save($dbQuery, $data, $key, $where); return SystemService::instance()->save($dbQuery, $data, $key, $where);
} }
} }
if (!function_exists('format_bytes')) {
/**
* 文件字节单位转换
* @param integer $size
* @return string
*/
function format_bytes($size)
{
if (is_numeric($size)) {
$units = ['B', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'];
for ($i = 0; $size >= 1024 && $i < 4; $i++) $size /= 1024;
return round($size, 2) . ' ' . $units[$i];
} else {
return $size;
}
}
}
if (!function_exists('format_datetime')) { if (!function_exists('format_datetime')) {
/** /**
* 日期格式标准输出 * 日期格式标准输出
@ -264,21 +281,4 @@ if (!function_exists('down_file')) {
$result = Storage::down($source, $force, $expire); $result = Storage::down($source, $force, $expire);
return isset($result['url']) ? $result['url'] : $source; return isset($result['url']) ? $result['url'] : $source;
} }
}
if (!function_exists('format_bytes')) {
/**
* 文件字节单位转换
* @param integer $size
* @return string
*/
function format_bytes($size)
{
if (is_numeric($size)) {
$units = ['B', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'];
for ($i = 0; $size >= 1024 && $i < 4; $i++) $size /= 1024;
return round($size, 2) . ' ' . $units[$i];
} else {
return $size;
}
}
} }

View File

@ -67,7 +67,7 @@ class CodeExtend
{ {
$time = time() . ''; $time = time() . '';
if ($size < 10) $size = 10; if ($size < 10) $size = 10;
$string = $prefix . ($time[0] + $time[1]) . substr($time, 2) . rand(0, 9); $string = $prefix . (intval($time[0]) + intval($time[1])) . substr($time, 2) . rand(0, 9);
while (strlen($string) < $size) $string .= rand(0, 9); while (strlen($string) < $size) $string .= rand(0, 9);
return $string; return $string;
} }

View File

@ -39,7 +39,7 @@ class FormHelper extends Helper
/** /**
* 数据对象主键名称 * 数据对象主键名称
* @var array|string * @var string
*/ */
protected $field; protected $field;

View File

@ -29,7 +29,7 @@ class QueryHelper extends Helper
{ {
/** /**
* Query call. * QueryHelper call.
* @param string $name 调用方法名称 * @param string $name 调用方法名称
* @param array $args 调用参数内容 * @param array $args 调用参数内容
* @return $this * @return $this

View File

@ -27,13 +27,11 @@ class CaptchaService extends Service
private $code; // 验证码 private $code; // 验证码
private $uniqid; // 唯一序号 private $uniqid; // 唯一序号
private $charset = 'ABCDEFGHKMNPRSTUVWXYZ23456789'; // 随机因子 private $charset = 'ABCDEFGHKMNPRSTUVWXYZ23456789'; // 随机因子
private $codelen = 4; // 验证码长度 private $width = 130; // 图片宽度
private $width = 130; // 宽度 private $height = 50; // 图片高度
private $height = 50; // 高度 private $length = 4; // 验证码长度
private $img; // 图形资源句柄 private $fontfile; // 指定字体文件
private $font; // 指定的字体
private $fontsize = 20; // 指定字体大小 private $fontsize = 20; // 指定字体大小
private $fontcolor; // 指定字体颜色
/** /**
* 服务初始化 * 服务初始化
@ -48,11 +46,11 @@ class CaptchaService extends Service
$this->uniqid = uniqid('captcha') . mt_rand(1000, 9999); $this->uniqid = uniqid('captcha') . mt_rand(1000, 9999);
// 生成验证码字符串 // 生成验证码字符串
$length = strlen($this->charset) - 1; $length = strlen($this->charset) - 1;
for ($i = 0; $i < $this->codelen; $i++) { for ($i = 0; $i < $this->length; $i++) {
$this->code .= $this->charset[mt_rand(0, $length)]; $this->code .= $this->charset[mt_rand(0, $length)];
} }
// 设置字体文件路径 // 设置字体文件路径
$this->font = __DIR__ . '/bin/font.ttf'; $this->fontfile = __DIR__ . '/bin/font.ttf';
// 缓存验证码字符串 // 缓存验证码字符串
$this->app->cache->set($this->uniqid, $this->code, 360); $this->app->cache->set($this->uniqid, $this->code, 360);
// 返回当前对象 // 返回当前对象
@ -143,34 +141,34 @@ class CaptchaService extends Service
private function createImage() private function createImage()
{ {
// 生成背景 // 生成背景
$this->img = imagecreatetruecolor($this->width, $this->height); $img = imagecreatetruecolor($this->width, $this->height);
$color = imagecolorallocate($this->img, mt_rand(220, 255), mt_rand(220, 255), mt_rand(220, 255)); $color = imagecolorallocate($img, mt_rand(220, 255), mt_rand(220, 255), mt_rand(220, 255));
imagefilledrectangle($this->img, 0, $this->height, $this->width, 0, $color); imagefilledrectangle($img, 0, $this->height, $this->width, 0, $color);
// 生成线条 // 生成线条
for ($i = 0; $i < 6; $i++) { for ($i = 0; $i < 6; $i++) {
$color = imagecolorallocate($this->img, mt_rand(0, 50), mt_rand(0, 50), mt_rand(0, 50)); $color = imagecolorallocate($img, mt_rand(0, 50), mt_rand(0, 50), mt_rand(0, 50));
imageline($this->img, mt_rand(0, $this->width), mt_rand(0, $this->height), mt_rand(0, $this->width), mt_rand(0, $this->height), $color); imageline($img, mt_rand(0, $this->width), mt_rand(0, $this->height), mt_rand(0, $this->width), mt_rand(0, $this->height), $color);
} }
// 生成雪花 // 生成雪花
for ($i = 0; $i < 100; $i++) { for ($i = 0; $i < 100; $i++) {
$color = imagecolorallocate($this->img, mt_rand(200, 255), mt_rand(200, 255), mt_rand(200, 255)); $color = imagecolorallocate($img, mt_rand(200, 255), mt_rand(200, 255), mt_rand(200, 255));
imagestring($this->img, mt_rand(1, 5), mt_rand(0, $this->width), mt_rand(0, $this->height), '*', $color); imagestring($img, mt_rand(1, 5), mt_rand(0, $this->width), mt_rand(0, $this->height), '*', $color);
} }
// 生成文字 // 生成文字
$_x = $this->width / $this->codelen; $_x = $this->width / $this->length;
for ($i = 0; $i < $this->codelen; $i++) { for ($i = 0; $i < $this->length; $i++) {
$this->fontcolor = imagecolorallocate($this->img, mt_rand(0, 156), mt_rand(0, 156), mt_rand(0, 156)); $fontcolor = imagecolorallocate($img, mt_rand(0, 156), mt_rand(0, 156), mt_rand(0, 156));
if (function_exists('imagettftext')) { if (function_exists('imagettftext')) {
imagettftext($this->img, $this->fontsize, mt_rand(-30, 30), $_x * $i + mt_rand(1, 5), $this->height / 1.4, $this->fontcolor, $this->font, $this->code[$i]); imagettftext($img, $this->fontsize, mt_rand(-30, 30), $_x * $i + mt_rand(1, 5), $this->height / 1.4, $fontcolor, $this->fontfile, $this->code[$i]);
} else { } else {
imagestring($this->img, 15, $_x * $i + mt_rand(10, 15), mt_rand(10, 30), $this->code[$i], $this->fontcolor); imagestring($img, 15, $_x * $i + mt_rand(10, 15), mt_rand(10, 30), $this->code[$i], $fontcolor);
} }
} }
ob_start(); ob_start();
imagepng($this->img); imagepng($img);
$data = ob_get_contents(); $data = ob_get_contents();
ob_end_clean(); ob_end_clean();
imagedestroy($this->img); imagedestroy($img);
return base64_encode($data); return base64_encode($data);
} }
} }

View File

@ -26,7 +26,7 @@ use think\admin\Service;
class InstallService extends Service class InstallService extends Service
{ {
/** /**
* 目录地址 * 代码地址
* @var string * @var string
*/ */
protected $uri; protected $uri;

View File

@ -121,6 +121,23 @@ class SystemService extends Service
return [$type, $field, strtolower($outer)]; return [$type, $field, strtolower($outer)];
} }
/**
* 生成最短URL地址
* @param string $url 路由地址
* @param array $vars PATH 变量
* @param boolean|string $suffix 后缀
* @param boolean|string $domain 域名
* @return string
*/
public function sysuri($url = '', array $vars = [], $suffix = true, $domain = false)
{
$d1 = $this->app->config->get('app.default_app');
$d3 = $this->app->config->get('route.default_action');
$d2 = $this->app->config->get('route.default_controller');
$location = $this->app->route->buildUrl($url, $vars)->suffix($suffix)->domain($domain)->build();
return preg_replace('|/\.html$|', '', preg_replace(["|^/{$d1}/{$d2}/{$d3}(\.html)?$|i", "|/{$d2}/{$d3}(\.html)?$|i", "|/{$d3}(\.html)?$|i"], ['$1', '$1', '$1'], $location));
}
/** /**
* 保存数据内容 * 保存数据内容
* @param string $name * @param string $name
@ -215,18 +232,23 @@ class SystemService extends Service
* 设置实时运行配置 * 设置实时运行配置
* @param array|null $map 应用映射 * @param array|null $map 应用映射
* @param string|null $run 支持模式 * @param string|null $run 支持模式
* @param array|null $uri 域名映射
* @return boolean 是否调试模式 * @return boolean 是否调试模式
*/ */
public function setRuntime($map = [], $run = null) public function setRuntime($map = [], $run = null, $uri = [])
{ {
$data = $this->getRuntime(); $data = $this->getRuntime();
if (is_array($map) && count($map) > 0 && count($data['app_map']) > 0) { if (is_array($map) && count($map) > 0 && count($data['app_map']) > 0) {
foreach ($data['app_map'] as $kk => $vv) if (in_array($vv, $map)) unset($data['app_map'][$kk]); foreach ($data['app_map'] as $kk => $vv) if (in_array($vv, $map)) unset($data['app_map'][$kk]);
} }
if (is_array($uri) && count($uri) > 0 && count($data['app_uri']) > 0) {
foreach ($data['app_uri'] as $kk => $vv) if (in_array($vv, $uri)) unset($data['app_uri'][$kk]);
}
$file = "{$this->app->getRootPath()}runtime/config.json"; $file = "{$this->app->getRootPath()}runtime/config.json";
$data['app_run'] = is_null($run) ? $data['app_run'] : $run; $data['app_run'] = is_null($run) ? $data['app_run'] : $run;
$data['app_map'] = is_null($map) ? [] : array_merge($data['app_map'], $map); $data['app_map'] = is_null($map) ? [] : array_merge($data['app_map'], $map);
file_put_contents($file, json_encode($data, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT)); $data['app_uri'] = is_null($uri) ? [] : array_merge($data['app_uri'], $uri);
file_put_contents($file, json_encode($data, JSON_UNESCAPED_UNICODE));
return $this->bindRuntime($data); return $this->bindRuntime($data);
} }
@ -241,6 +263,7 @@ class SystemService extends Service
$data = file_exists($file) ? json_decode(file_get_contents($file), true) : []; $data = file_exists($file) ? json_decode(file_get_contents($file), true) : [];
if (empty($data) || !is_array($data)) $data = []; if (empty($data) || !is_array($data)) $data = [];
if (empty($data['app_map']) || !is_array($data['app_map'])) $data['app_map'] = []; if (empty($data['app_map']) || !is_array($data['app_map'])) $data['app_map'] = [];
if (empty($data['app_uri']) || !is_array($data['app_uri'])) $data['app_uri'] = [];
if (empty($data['app_run']) || !is_string($data['app_run'])) $data['app_run'] = 'developer'; if (empty($data['app_run']) || !is_string($data['app_run'])) $data['app_run'] = 'developer';
return is_null($key) ? $data : (isset($data[$key]) ? $data[$key] : null); return is_null($key) ? $data : (isset($data[$key]) ? $data[$key] : null);
} }
@ -252,8 +275,8 @@ class SystemService extends Service
*/ */
public function bindRuntime($data = []) public function bindRuntime($data = [])
{ {
// 动态绑定应用映射
if (empty($data)) $data = $this->getRuntime(); if (empty($data)) $data = $this->getRuntime();
// 动态绑定应用
if (!empty($data['app_map'])) { if (!empty($data['app_map'])) {
$maps = $this->app->config->get('app.app_map', []); $maps = $this->app->config->get('app.app_map', []);
if (is_array($maps) && count($maps) > 0 && count($data['app_map']) > 0) { if (is_array($maps) && count($maps) > 0 && count($data['app_map']) > 0) {
@ -261,25 +284,16 @@ class SystemService extends Service
} }
$this->app->config->set(['app_map' => array_merge($maps, $data['app_map'])], 'app'); $this->app->config->set(['app_map' => array_merge($maps, $data['app_map'])], 'app');
} }
// 动态设置当前运行模式 // 动态绑定域名
if (!empty($data['app_uri'])) {
$uris = $this->app->config->get('app.domain_bind', []);
if (is_array($uris) && count($uris) > 0 && count($data['app_uri']) > 0) {
foreach ($uris as $kk => $vv) if (in_array($vv, $data['app_uri'])) unset($uris[$kk]);
}
$this->app->config->set(['domain_bind' => array_merge($uris, $data['app_uri'])], 'app');
}
// 动态设置运行模式
return $this->app->debug($data['app_run'] !== 'product')->isDebug(); return $this->app->debug($data['app_run'] !== 'product')->isDebug();
} }
/**
* 生成最短URL地址
* @param string $url 路由地址
* @param array $vars 变量
* @param boolean|string $suffix 后缀
* @param boolean|string $domain 域名
* @return string
*/
public function sysuri($url = '', array $vars = [], $suffix = true, $domain = false)
{
$d1 = $this->app->config->get('app.default_app');
$d2 = $this->app->config->get('route.default_controller');
$d3 = $this->app->config->get('route.default_action');
$location = $this->app->route->buildUrl($url, $vars)->suffix($suffix)->domain($domain)->build();
return preg_replace(["|^/{$d1}/{$d2}/{$d3}(\.html)?$|i", "|/{$d2}/{$d3}(\.html)?$|i", "|/{$d3}(\.html)?$|i", '|/\.html$|'], ['$1', '$1', '$1', ''], $location);
}
} }

View File

@ -169,7 +169,7 @@ class LocalStorage extends Storage
*/ */
public function upload() public function upload()
{ {
return url('@admin/api.upload/file')->build(); return url('admin/api.upload/file')->build();
} }
} }