切换导航条
此项目
正在载入...
登录
何书鹏
/
salarycalculator
·
提交
转到一个项目
GitLab
转到仪表盘
项目
活动
文件
提交
管道
0
构建
0
图表
里程碑
问题
0
合并请求
0
成员
标记
维基
派生
网络
创建新的问题
下载为
邮件补丁
差异文件
浏览文件
作者
Karson
6 years ago
提交
9d42f92c95883653f7a512fd87f24f708e101124
1 个父辈
5298c52e
master
移除Auth.php类中的Ucenter
优化基类Backend.php中的逻辑 优化插件管理网络失败的逻辑 优化代码格式化
显示空白字符变更
内嵌
并排对比
正在显示
49 个修改的文件
包含
735 行增加
和
932 行删除
README.md
application/admin/lang/zh-cn/addon.php
application/admin/library/Auth.php
application/admin/library/traits/Backend.php
application/api/controller/Common.php
application/api/controller/Ems.php
application/api/controller/Index.php
application/api/controller/Sms.php
application/api/controller/Token.php
application/api/controller/User.php
application/api/controller/Validate.php
application/api/lang/zh-cn.php
application/api/lang/zh-cn/user.php
application/api/library/ExceptionHandle.php
application/common/behavior/Common.php
application/common/controller/Api.php
application/common/controller/Backend.php
application/common/controller/Frontend.php
application/common/library/Auth.php
application/common/library/Email.php
application/common/library/Ems.php
application/common/library/Menu.php
application/common/library/Sms.php
application/common/library/Token.php
application/common/library/token/Driver.php
application/common/library/token/driver/Mysql.php
application/common/library/token/driver/Redis.php
application/common/model/Category.php
application/common/model/Version.php
application/config.php
application/index/controller/Index.php
application/index/view/layout/default.html
application/index/view/user/login.html
application/index/view/user/profile.html
extend/fast/Auth.php
extend/fast/Date.php
extend/fast/Form.php
extend/fast/Http.php
extend/fast/Pinyin.php
extend/fast/Random.php
extend/fast/Rsa.php
extend/fast/Tree.php
extend/fast/Version.php
public/assets/css/frontend.css
public/assets/css/frontend.min.css
public/assets/js/backend/addon.js
public/assets/js/require-backend.min.js
public/assets/js/require-frontend.min.js
public/assets/less/frontend.less
README.md
查看文件 @
9d42f92
...
...
@@ -23,10 +23,10 @@ FastAdmin是一款基于ThinkPHP5+Bootstrap的极速后台开发框架。
*
共用同一账号体系的Web端会员中心权限验证和API接口会员权限验证
*
二级域名部署支持,同时域名支持绑定到插件
*
多语言支持,服务端及客户端支持
*
强大的第三方模块支持(
[
CMS
](
https://www.fastadmin.net/store/cms.html
)
、
[
博客
](
https://www.fastadmin.net/store/blog.html
)
、
[
文档生成
](
https://www.fastadmin.net/store/docs
.html
)
)
*
强大的第三方模块支持(
[
CMS
](
https://www.fastadmin.net/store/cms.html
)
、
[
博客
](
https://www.fastadmin.net/store/blog.html
)
、
[
知识付费问答
](
https://www.fastadmin.net/store/ask
.html
)
)
*
整合第三方短信接口(阿里云、腾讯云短信)
*
无缝整合第三方云存储(七牛、阿里云OSS、又拍云)功能
*
第三方富文本编辑器支持(Summernote、
Tinymce
、百度编辑器)
*
第三方富文本编辑器支持(Summernote、
Kindeditor
、百度编辑器)
*
第三方登录(QQ、微信、微博)整合
*
Ucenter整合第三方应用
...
...
@@ -86,6 +86,6 @@ FastAdmin遵循Apache2开源协议发布,并提供免费使用。
本项目包含的第三方源码和二进制文件之版权信息另行标注。
版权所有Copyright © 2017-201
8
by FastAdmin (https://www.fastadmin.net)
版权所有Copyright © 2017-201
9
by FastAdmin (https://www.fastadmin.net)
All rights reserved。
\ No newline at end of file
...
...
application/admin/lang/zh-cn/addon.php
查看文件 @
9d42f92
...
...
@@ -29,6 +29,9 @@ return [
'Not installed tips'
=>
'请安装后再访问插件前台页面!'
,
'Not enabled tips'
=>
'插件已经禁用,请启用后再访问插件前台页面!'
,
'New version tips'
=>
'发现新版本:%s 点击查看更新日志'
,
'Store now available tips'
=>
'FastAdmin插件市场暂不可用,是否切换到本地插件?'
,
'Switch to the local'
=>
'切换到本地插件'
,
'try to reload'
=>
'重新尝试加载'
,
'Please disable addon first'
=>
'请先禁用插件再进行升级'
,
'Login now'
=>
'立即登录'
,
'Continue install'
=>
'不登录,继续安装'
,
...
...
application/admin/library/Auth.php
查看文件 @
9d42f92
...
...
@@ -12,7 +12,6 @@ use think\Session;
class
Auth
extends
\fast\Auth
{
protected
$_error
=
''
;
protected
$requestUri
=
''
;
protected
$breadcrumb
=
[];
...
...
@@ -146,17 +145,17 @@ class Auth extends \fast\Auth
$request
=
Request
::
instance
();
$arr
=
is_array
(
$arr
)
?
$arr
:
explode
(
','
,
$arr
);
if
(
!
$arr
)
{
return
FALSE
;
return
false
;
}
$arr
=
array_map
(
'strtolower'
,
$arr
);
// 是否存在
if
(
in_array
(
strtolower
(
$request
->
action
()),
$arr
)
||
in_array
(
'*'
,
$arr
))
{
return
TRUE
;
return
true
;
}
// 没找到匹配
return
FALSE
;
return
false
;
}
/**
...
...
@@ -229,7 +228,7 @@ class Auth extends \fast\Auth
public
function
isSuperAdmin
()
{
return
in_array
(
'*'
,
$this
->
getRuleIds
())
?
TRUE
:
FALSE
;
return
in_array
(
'*'
,
$this
->
getRuleIds
())
?
true
:
false
;
}
/**
...
...
@@ -322,8 +321,9 @@ class Auth extends \fast\Auth
*/
public
function
getBreadCrumb
(
$path
=
''
)
{
if
(
$this
->
breadcrumb
||
!
$path
)
if
(
$this
->
breadcrumb
||
!
$path
)
{
return
$this
->
breadcrumb
;
}
$path_rule_id
=
0
;
foreach
(
$this
->
rules
as
$rule
)
{
$path_rule_id
=
$rule
[
'name'
]
==
$path
?
$rule
[
'id'
]
:
$path_rule_id
;
...
...
@@ -455,5 +455,4 @@ class Auth extends \fast\Auth
{
return
$this
->
_error
?
__
(
$this
->
_error
)
:
''
;
}
}
...
...
application/admin/library/traits/Backend.php
查看文件 @
9d42f92
...
...
@@ -7,7 +7,10 @@ use PhpOffice\PhpSpreadsheet\Cell\Coordinate;
use
PhpOffice\PhpSpreadsheet\Reader\Xlsx
;
use
PhpOffice\PhpSpreadsheet\Reader\Xls
;
use
PhpOffice\PhpSpreadsheet\Reader\Csv
;
use
think\Db
;
use
think\Exception
;
use
think\exception\PDOException
;
use
think\exception\ValidateException
;
trait
Backend
{
...
...
@@ -108,6 +111,8 @@ trait Backend
if
(
$this
->
dataLimit
&&
$this
->
dataLimitFieldAutoFill
)
{
$params
[
$this
->
dataLimitField
]
=
$this
->
auth
->
id
;
}
$result
=
false
;
Db
::
startTrans
();
try
{
//是否采用模型验证
if
(
$this
->
modelValidate
)
{
...
...
@@ -116,16 +121,22 @@ trait Backend
$this
->
model
->
validate
(
$validate
);
}
$result
=
$this
->
model
->
allowField
(
true
)
->
save
(
$params
);
if
(
$result
!==
false
)
{
$this
->
success
();
}
else
{
$this
->
error
(
$this
->
model
->
getError
());
}
}
catch
(
\think\exception\PDOException
$e
)
{
Db
::
commit
();
}
catch
(
ValidateException
$e
)
{
Db
::
rollback
();
$this
->
error
(
$e
->
getMessage
());
}
catch
(
\think\Exception
$e
)
{
}
catch
(
PDOException
$e
)
{
Db
::
rollback
();
$this
->
error
(
$e
->
getMessage
());
}
catch
(
Exception
$e
)
{
Db
::
rollback
();
$this
->
error
(
$e
->
getMessage
());
}
if
(
$result
)
{
$this
->
success
();
}
else
{
$this
->
error
();
}
}
$this
->
error
(
__
(
'Parameter %s can not be empty'
,
''
));
}
...
...
@@ -151,7 +162,8 @@ trait Backend
$params
=
$this
->
request
->
post
(
"row/a"
);
if
(
$params
)
{
$params
=
$this
->
preExcludeFields
(
$params
);
$result
=
false
;
Db
::
startTrans
();
try
{
//是否采用模型验证
if
(
$this
->
modelValidate
)
{
...
...
@@ -160,15 +172,21 @@ trait Backend
$row
->
validate
(
$validate
);
}
$result
=
$row
->
allowField
(
true
)
->
save
(
$params
);
if
(
$result
!==
false
)
{
$this
->
success
();
}
else
{
$this
->
error
(
$row
->
getError
());
}
}
catch
(
\think\exception\PDOException
$e
)
{
Db
::
commit
();
}
catch
(
ValidateException
$e
)
{
Db
::
rollback
();
$this
->
error
(
$e
->
getMessage
());
}
catch
(
\think\Exception
$e
)
{
}
catch
(
PDOException
$e
)
{
Db
::
rollback
();
$this
->
error
(
$e
->
getMessage
());
}
catch
(
Exception
$e
)
{
Db
::
rollback
();
$this
->
error
(
$e
->
getMessage
());
}
if
(
$result
)
{
$this
->
success
();
}
else
{
$this
->
error
();
}
}
$this
->
error
(
__
(
'Parameter %s can not be empty'
,
''
));
...
...
@@ -186,13 +204,24 @@ trait Backend
$pk
=
$this
->
model
->
getPk
();
$adminIds
=
$this
->
getDataLimitAdminIds
();
if
(
is_array
(
$adminIds
))
{
$
count
=
$
this
->
model
->
where
(
$this
->
dataLimitField
,
'in'
,
$adminIds
);
$this
->
model
->
where
(
$this
->
dataLimitField
,
'in'
,
$adminIds
);
}
$list
=
$this
->
model
->
where
(
$pk
,
'in'
,
$ids
)
->
select
();
$count
=
0
;
Db
::
startTrans
();
try
{
foreach
(
$list
as
$k
=>
$v
)
{
$count
+=
$v
->
delete
();
}
Db
::
commit
();
}
catch
(
PDOException
$e
)
{
Db
::
rollback
();
$this
->
error
(
$e
->
getMessage
());
}
catch
(
Exception
$e
)
{
Db
::
rollback
();
$this
->
error
(
$e
->
getMessage
());
}
if
(
$count
)
{
$this
->
success
();
}
else
{
...
...
@@ -210,16 +239,26 @@ trait Backend
$pk
=
$this
->
model
->
getPk
();
$adminIds
=
$this
->
getDataLimitAdminIds
();
if
(
is_array
(
$adminIds
))
{
$
count
=
$
this
->
model
->
where
(
$this
->
dataLimitField
,
'in'
,
$adminIds
);
$this
->
model
->
where
(
$this
->
dataLimitField
,
'in'
,
$adminIds
);
}
if
(
$ids
)
{
$this
->
model
->
where
(
$pk
,
'in'
,
$ids
);
}
$count
=
0
;
Db
::
startTrans
();
try
{
$list
=
$this
->
model
->
onlyTrashed
()
->
select
();
foreach
(
$list
as
$k
=>
$v
)
{
$count
+=
$v
->
delete
(
true
);
}
Db
::
commit
();
}
catch
(
PDOException
$e
)
{
Db
::
rollback
();
$this
->
error
(
$e
->
getMessage
());
}
catch
(
Exception
$e
)
{
Db
::
rollback
();
$this
->
error
(
$e
->
getMessage
());
}
if
(
$count
)
{
$this
->
success
();
}
else
{
...
...
@@ -242,10 +281,20 @@ trait Backend
$this
->
model
->
where
(
$pk
,
'in'
,
$ids
);
}
$count
=
0
;
Db
::
startTrans
();
try
{
$list
=
$this
->
model
->
onlyTrashed
()
->
select
();
foreach
(
$list
as
$index
=>
$item
)
{
$count
+=
$item
->
restore
();
}
Db
::
commit
();
}
catch
(
PDOException
$e
)
{
Db
::
rollback
();
$this
->
error
(
$e
->
getMessage
());
}
catch
(
Exception
$e
)
{
Db
::
rollback
();
$this
->
error
(
$e
->
getMessage
());
}
if
(
$count
)
{
$this
->
success
();
}
...
...
@@ -268,10 +317,20 @@ trait Backend
$this
->
model
->
where
(
$this
->
dataLimitField
,
'in'
,
$adminIds
);
}
$count
=
0
;
Db
::
startTrans
();
try
{
$list
=
$this
->
model
->
where
(
$this
->
model
->
getPk
(),
'in'
,
$ids
)
->
select
();
foreach
(
$list
as
$index
=>
$item
)
{
$count
+=
$item
->
allowField
(
true
)
->
isUpdate
(
true
)
->
save
(
$values
);
}
Db
::
commit
();
}
catch
(
PDOException
$e
)
{
Db
::
rollback
();
$this
->
error
(
$e
->
getMessage
());
}
catch
(
Exception
$e
)
{
Db
::
rollback
();
$this
->
error
(
$e
->
getMessage
());
}
if
(
$count
)
{
$this
->
success
();
}
else
{
...
...
@@ -405,7 +464,7 @@ trait Backend
}
}
$this
->
model
->
saveAll
(
$insert
);
}
catch
(
\think\exception\
PDOException
$exception
)
{
}
catch
(
PDOException
$exception
)
{
$msg
=
$exception
->
getMessage
();
if
(
preg_match
(
"/.+Integrity constraint violation: 1062 Duplicate entry '(.+)' for key '(.+)'/is"
,
$msg
,
$matches
))
{
$msg
=
"导入失败,包含【
{
$matches
[
1
]}
】的记录已存在
";
...
...
application/api/controller/Common.php
查看文件 @
9d42f92
...
...
@@ -13,15 +13,9 @@ use think\Config;
*/
class
Common
extends
Api
{
protected
$noNeedLogin
=
[
'init'
];
protected
$noNeedRight
=
'*'
;
public
function
_initialize
()
{
parent
::
_initialize
();
}
/**
* 加载初始化
*
...
...
@@ -137,5 +131,4 @@ class Common extends Api
$this
->
error
(
$file
->
getError
());
}
}
}
...
...
application/api/controller/Ems.php
查看文件 @
9d42f92
...
...
@@ -11,14 +11,13 @@ use app\common\model\User;
*/
class
Ems
extends
Api
{
protected
$noNeedLogin
=
'*'
;
protected
$noNeedRight
=
'*'
;
public
function
_initialize
()
{
parent
::
_initialize
();
\think\Hook
::
add
(
'ems_send'
,
function
(
$params
)
{
\think\Hook
::
add
(
'ems_send'
,
function
(
$params
)
{
$obj
=
\app\common\library\Email
::
instance
();
$result
=
$obj
->
to
(
$params
->
email
)
...
...
@@ -42,36 +41,26 @@ class Ems extends Api
$event
=
$event
?
$event
:
'register'
;
$last
=
Emslib
::
get
(
$email
,
$event
);
if
(
$last
&&
time
()
-
$last
[
'createtime'
]
<
60
)
{
if
(
$last
&&
time
()
-
$last
[
'createtime'
]
<
60
)
{
$this
->
error
(
__
(
'发送频繁'
));
}
if
(
$event
)
{
if
(
$event
)
{
$userinfo
=
User
::
getByEmail
(
$email
);
if
(
$event
==
'register'
&&
$userinfo
)
{
if
(
$event
==
'register'
&&
$userinfo
)
{
//已被注册
$this
->
error
(
__
(
'已被注册'
));
}
else
if
(
in_array
(
$event
,
[
'changeemail'
])
&&
$userinfo
)
{
}
elseif
(
in_array
(
$event
,
[
'changeemail'
])
&&
$userinfo
)
{
//被占用
$this
->
error
(
__
(
'已被占用'
));
}
else
if
(
in_array
(
$event
,
[
'changepwd'
,
'resetpwd'
])
&&
!
$userinfo
)
{
}
elseif
(
in_array
(
$event
,
[
'changepwd'
,
'resetpwd'
])
&&
!
$userinfo
)
{
//未注册
$this
->
error
(
__
(
'未注册'
));
}
}
$ret
=
Emslib
::
send
(
$email
,
NULL
,
$event
);
if
(
$ret
)
{
$ret
=
Emslib
::
send
(
$email
,
null
,
$event
);
if
(
$ret
)
{
$this
->
success
(
__
(
'发送成功'
));
}
else
{
}
else
{
$this
->
error
(
__
(
'发送失败'
));
}
}
...
...
@@ -90,34 +79,24 @@ class Ems extends Api
$event
=
$event
?
$event
:
'register'
;
$captcha
=
$this
->
request
->
request
(
"captcha"
);
if
(
$event
)
{
if
(
$event
)
{
$userinfo
=
User
::
getByEmail
(
$email
);
if
(
$event
==
'register'
&&
$userinfo
)
{
if
(
$event
==
'register'
&&
$userinfo
)
{
//已被注册
$this
->
error
(
__
(
'已被注册'
));
}
else
if
(
in_array
(
$event
,
[
'changeemail'
])
&&
$userinfo
)
{
}
elseif
(
in_array
(
$event
,
[
'changeemail'
])
&&
$userinfo
)
{
//被占用
$this
->
error
(
__
(
'已被占用'
));
}
else
if
(
in_array
(
$event
,
[
'changepwd'
,
'resetpwd'
])
&&
!
$userinfo
)
{
}
elseif
(
in_array
(
$event
,
[
'changepwd'
,
'resetpwd'
])
&&
!
$userinfo
)
{
//未注册
$this
->
error
(
__
(
'未注册'
));
}
}
$ret
=
Emslib
::
check
(
$email
,
$captcha
,
$event
);
if
(
$ret
)
{
if
(
$ret
)
{
$this
->
success
(
__
(
'成功'
));
}
else
{
}
else
{
$this
->
error
(
__
(
'验证码不正确'
));
}
}
}
...
...
application/api/controller/Index.php
查看文件 @
9d42f92
...
...
@@ -9,7 +9,6 @@ use app\common\controller\Api;
*/
class
Index
extends
Api
{
protected
$noNeedLogin
=
[
'*'
];
protected
$noNeedRight
=
[
'*'
];
...
...
@@ -21,5 +20,4 @@ class Index extends Api
{
$this
->
success
(
'请求成功'
);
}
}
...
...
application/api/controller/Sms.php
查看文件 @
9d42f92
...
...
@@ -11,15 +11,9 @@ use app\common\model\User;
*/
class
Sms
extends
Api
{
protected
$noNeedLogin
=
'*'
;
protected
$noNeedRight
=
'*'
;
public
function
_initialize
()
{
parent
::
_initialize
();
}
/**
* 发送验证码
*
...
...
@@ -48,15 +42,15 @@ class Sms extends Api
if
(
$event
==
'register'
&&
$userinfo
)
{
//已被注册
$this
->
error
(
__
(
'已被注册'
));
}
else
if
(
in_array
(
$event
,
[
'changemobile'
])
&&
$userinfo
)
{
}
else
if
(
in_array
(
$event
,
[
'changemobile'
])
&&
$userinfo
)
{
//被占用
$this
->
error
(
__
(
'已被占用'
));
}
else
if
(
in_array
(
$event
,
[
'changepwd'
,
'resetpwd'
])
&&
!
$userinfo
)
{
}
else
if
(
in_array
(
$event
,
[
'changepwd'
,
'resetpwd'
])
&&
!
$userinfo
)
{
//未注册
$this
->
error
(
__
(
'未注册'
));
}
}
$ret
=
Smslib
::
send
(
$mobile
,
NULL
,
$event
);
$ret
=
Smslib
::
send
(
$mobile
,
null
,
$event
);
if
(
$ret
)
{
$this
->
success
(
__
(
'发送成功'
));
}
else
{
...
...
@@ -86,10 +80,10 @@ class Sms extends Api
if
(
$event
==
'register'
&&
$userinfo
)
{
//已被注册
$this
->
error
(
__
(
'已被注册'
));
}
else
if
(
in_array
(
$event
,
[
'changemobile'
])
&&
$userinfo
)
{
}
else
if
(
in_array
(
$event
,
[
'changemobile'
])
&&
$userinfo
)
{
//被占用
$this
->
error
(
__
(
'已被占用'
));
}
else
if
(
in_array
(
$event
,
[
'changepwd'
,
'resetpwd'
])
&&
!
$userinfo
)
{
}
else
if
(
in_array
(
$event
,
[
'changepwd'
,
'resetpwd'
])
&&
!
$userinfo
)
{
//未注册
$this
->
error
(
__
(
'未注册'
));
}
...
...
@@ -101,5 +95,4 @@ class Sms extends Api
$this
->
error
(
__
(
'验证码不正确'
));
}
}
}
...
...
application/api/controller/Token.php
查看文件 @
9d42f92
...
...
@@ -10,15 +10,9 @@ use fast\Random;
*/
class
Token
extends
Api
{
protected
$noNeedLogin
=
[];
protected
$noNeedRight
=
'*'
;
public
function
_initialize
()
{
parent
::
_initialize
();
}
/**
* 检测Token是否过期
*
...
...
@@ -45,5 +39,4 @@ class Token extends Api
$tokenInfo
=
\app\common\library\Token
::
get
(
$token
);
$this
->
success
(
''
,
[
'token'
=>
$tokenInfo
[
'token'
],
'expires_in'
=>
$tokenInfo
[
'expires_in'
]]);
}
}
...
...
application/api/controller/User.php
查看文件 @
9d42f92
...
...
@@ -13,7 +13,6 @@ use think\Validate;
*/
class
User
extends
Api
{
protected
$noNeedLogin
=
[
'login'
,
'mobilelogin'
,
'register'
,
'resetpwd'
,
'changeemail'
,
'changemobile'
,
'third'
];
protected
$noNeedRight
=
'*'
;
...
...
@@ -142,7 +141,7 @@ class User extends Api
$username
=
$this
->
request
->
request
(
'username'
);
$nickname
=
$this
->
request
->
request
(
'nickname'
);
$bio
=
$this
->
request
->
request
(
'bio'
);
$avatar
=
$this
->
request
->
request
(
'avatar'
);
$avatar
=
$this
->
request
->
request
(
'avatar'
,
''
,
'trim,strip_tags,htmlspecialchars'
);
if
(
$username
)
{
$exists
=
\app\common\model\User
::
where
(
'username'
,
$username
)
->
where
(
'id'
,
'<>'
,
$this
->
auth
->
id
)
->
find
();
if
(
$exists
)
{
...
...
@@ -309,5 +308,4 @@ class User extends Api
$this
->
error
(
$this
->
auth
->
getError
());
}
}
}
...
...
application/api/controller/Validate.php
查看文件 @
9d42f92
...
...
@@ -10,7 +10,6 @@ use app\common\model\User;
*/
class
Validate
extends
Api
{
protected
$noNeedLogin
=
'*'
;
protected
$layout
=
''
;
protected
$error
=
null
;
...
...
@@ -29,10 +28,9 @@ class Validate extends Api
public
function
check_email_available
()
{
$email
=
$this
->
request
->
request
(
'email'
);
$id
=
(
int
)
$this
->
request
->
request
(
'id'
);
$id
=
(
int
)
$this
->
request
->
request
(
'id'
);
$count
=
User
::
where
(
'email'
,
'='
,
$email
)
->
where
(
'id'
,
'<>'
,
$id
)
->
count
();
if
(
$count
>
0
)
{
if
(
$count
>
0
)
{
$this
->
error
(
__
(
'邮箱已经被占用'
));
}
$this
->
success
();
...
...
@@ -47,10 +45,9 @@ class Validate extends Api
public
function
check_username_available
()
{
$email
=
$this
->
request
->
request
(
'username'
);
$id
=
(
int
)
$this
->
request
->
request
(
'id'
);
$id
=
(
int
)
$this
->
request
->
request
(
'id'
);
$count
=
User
::
where
(
'username'
,
'='
,
$email
)
->
where
(
'id'
,
'<>'
,
$id
)
->
count
();
if
(
$count
>
0
)
{
if
(
$count
>
0
)
{
$this
->
error
(
__
(
'用户名已经被占用'
));
}
$this
->
success
();
...
...
@@ -65,10 +62,9 @@ class Validate extends Api
public
function
check_mobile_available
()
{
$mobile
=
$this
->
request
->
request
(
'mobile'
);
$id
=
(
int
)
$this
->
request
->
request
(
'id'
);
$id
=
(
int
)
$this
->
request
->
request
(
'id'
);
$count
=
User
::
where
(
'mobile'
,
'='
,
$mobile
)
->
where
(
'id'
,
'<>'
,
$id
)
->
count
();
if
(
$count
>
0
)
{
if
(
$count
>
0
)
{
$this
->
error
(
__
(
'该手机号已经占用'
));
}
$this
->
success
();
...
...
@@ -83,8 +79,7 @@ class Validate extends Api
{
$mobile
=
$this
->
request
->
request
(
'mobile'
);
$count
=
User
::
where
(
'mobile'
,
'='
,
$mobile
)
->
count
();
if
(
!
$count
)
{
if
(
!
$count
)
{
$this
->
error
(
__
(
'手机号不存在'
));
}
$this
->
success
();
...
...
@@ -99,8 +94,7 @@ class Validate extends Api
{
$email
=
$this
->
request
->
request
(
'email'
);
$count
=
User
::
where
(
'email'
,
'='
,
$email
)
->
count
();
if
(
!
$count
)
{
if
(
!
$count
)
{
$this
->
error
(
__
(
'邮箱不存在'
));
}
$this
->
success
();
...
...
@@ -118,8 +112,7 @@ class Validate extends Api
$mobile
=
$this
->
request
->
request
(
'mobile'
);
$captcha
=
$this
->
request
->
request
(
'captcha'
);
$event
=
$this
->
request
->
request
(
'event'
);
if
(
!
\app\common\library\Sms
::
check
(
$mobile
,
$captcha
,
$event
))
{
if
(
!
\app\common\library\Sms
::
check
(
$mobile
,
$captcha
,
$event
))
{
$this
->
error
(
__
(
'验证码不正确'
));
}
$this
->
success
();
...
...
@@ -137,11 +130,9 @@ class Validate extends Api
$email
=
$this
->
request
->
request
(
'email'
);
$captcha
=
$this
->
request
->
request
(
'captcha'
);
$event
=
$this
->
request
->
request
(
'event'
);
if
(
!
\app\common\library\Ems
::
check
(
$email
,
$captcha
,
$event
))
{
if
(
!
\app\common\library\Ems
::
check
(
$email
,
$captcha
,
$event
))
{
$this
->
error
(
__
(
'验证码不正确'
));
}
$this
->
success
();
}
}
...
...
application/api/lang/zh-cn.php
查看文件 @
9d42f92
...
...
@@ -2,16 +2,13 @@
return
[
'Keep login'
=>
'保持会话'
,
'Sign in'
=>
'登入'
,
'Username'
=>
'用户名'
,
'User id'
=>
'会员ID'
,
'Username'
=>
'用户名'
,
'Nickname'
=>
'昵称'
,
'Password'
=>
'密码'
,
'Sign up'
=>
'注 册'
,
'Sign in'
=>
'登 录'
,
'Sign out'
=>
'注 销'
,
'Keep login'
=>
'保持会话'
,
'Guest'
=>
'游客'
,
'Welcome'
=>
'%s,你好!'
,
'Add'
=>
'添加'
,
...
...
@@ -56,13 +53,9 @@ return [
'Line'
=>
'行号'
,
'File'
=>
'文件'
,
'Menu'
=>
'菜单'
,
'Name'
=>
'名称'
,
'Weigh'
=>
'权重'
,
'Type'
=>
'类型'
,
'Title'
=>
'标题'
,
'Content'
=>
'内容'
,
'Status'
=>
'状态'
,
'Operate'
=>
'操作'
,
'Append'
=>
'追加'
,
'Memo'
=>
'备注'
,
'Parent'
=>
'父级'
,
...
...
application/api/lang/zh-cn/user.php
查看文件 @
9d42f92
...
...
@@ -9,7 +9,6 @@ return [
'Username must be 6 to 30 characters'
=>
'用户名必须6-30个字符'
,
'Password can not be empty'
=>
'密码不能为空'
,
'Password must be 6 to 30 characters'
=>
'密码必须6-30个字符'
,
'Email is incorrect'
=>
'邮箱格式不正确'
,
'Mobile is incorrect'
=>
'手机格式不正确'
,
'Username already exist'
=>
'用户名已经存在'
,
'Email already exist'
=>
'邮箱已经存在'
,
...
...
@@ -27,9 +26,7 @@ return [
'Profile'
=>
'个人资料'
,
'Verify email'
=>
'邮箱验证'
,
'Change password'
=>
'修改密码'
,
'Change password successful'
=>
'修改密码成功'
,
'Captcha is incorrect'
=>
'验证码不正确'
,
'Sign up successful'
=>
'注册成功'
,
'Logged in successful'
=>
'登录成功'
,
'Logout successful'
=>
'注销成功'
,
'Operation failed'
=>
'操作失败'
,
...
...
application/api/library/ExceptionHandle.php
查看文件 @
9d42f92
...
...
@@ -14,20 +14,17 @@ class ExceptionHandle extends Handle
public
function
render
(
Exception
$e
)
{
// 在生产环境下返回code信息
if
(
!
\think\Config
::
get
(
'app_debug'
))
{
if
(
!
\think\Config
::
get
(
'app_debug'
))
{
$statuscode
=
$code
=
500
;
$msg
=
'An error occurred'
;
// 验证异常
if
(
$e
instanceof
\think\exception\ValidateException
)
{
if
(
$e
instanceof
\think\exception\ValidateException
)
{
$code
=
0
;
$statuscode
=
200
;
$msg
=
$e
->
getError
();
}
// Http异常
if
(
$e
instanceof
\think\exception\HttpException
)
{
if
(
$e
instanceof
\think\exception\HttpException
)
{
$statuscode
=
$code
=
$e
->
getStatusCode
();
}
return
json
([
'code'
=>
$code
,
'msg'
=>
$msg
,
'time'
=>
time
(),
'data'
=>
null
],
$statuscode
);
...
...
application/common/behavior/Common.php
查看文件 @
9d42f92
...
...
@@ -8,7 +8,6 @@ use think\Loader;
class
Common
{
public
function
moduleInit
(
&
$request
)
{
// 设置mbstring字符编码
...
...
@@ -17,45 +16,37 @@ class Common
// 如果修改了index.php入口地址,则需要手动修改cdnurl的值
$url
=
preg_replace
(
"/\/(\w+)\.php$/i"
,
''
,
$request
->
root
());
// 如果未设置__CDN__则自动匹配得出
if
(
!
Config
::
get
(
'view_replace_str.__CDN__'
))
{
if
(
!
Config
::
get
(
'view_replace_str.__CDN__'
))
{
Config
::
set
(
'view_replace_str.__CDN__'
,
$url
);
}
// 如果未设置__PUBLIC__则自动匹配得出
if
(
!
Config
::
get
(
'view_replace_str.__PUBLIC__'
))
{
if
(
!
Config
::
get
(
'view_replace_str.__PUBLIC__'
))
{
Config
::
set
(
'view_replace_str.__PUBLIC__'
,
$url
.
'/'
);
}
// 如果未设置__ROOT__则自动匹配得出
if
(
!
Config
::
get
(
'view_replace_str.__ROOT__'
))
{
if
(
!
Config
::
get
(
'view_replace_str.__ROOT__'
))
{
Config
::
set
(
'view_replace_str.__ROOT__'
,
preg_replace
(
"/\/public\/$/"
,
''
,
$url
.
'/'
));
}
// 如果未设置cdnurl则自动匹配得出
if
(
!
Config
::
get
(
'site.cdnurl'
))
{
if
(
!
Config
::
get
(
'site.cdnurl'
))
{
Config
::
set
(
'site.cdnurl'
,
$url
);
}
// 如果未设置cdnurl则自动匹配得出
if
(
!
Config
::
get
(
'upload.cdnurl'
))
{
if
(
!
Config
::
get
(
'upload.cdnurl'
))
{
Config
::
set
(
'upload.cdnurl'
,
$url
);
}
if
(
Config
::
get
(
'app_debug'
))
{
if
(
Config
::
get
(
'app_debug'
))
{
// 如果是调试模式将version置为当前的时间戳可避免缓存
Config
::
set
(
'site.version'
,
time
());
// 如果是开发模式那么将异常模板修改成官方的
Config
::
set
(
'exception_tmpl'
,
THINK_PATH
.
'tpl'
.
DS
.
'think_exception.tpl'
);
}
// 如果是trace模式且Ajax的情况下关闭trace
if
(
Config
::
get
(
'app_trace'
)
&&
$request
->
isAjax
())
{
if
(
Config
::
get
(
'app_trace'
)
&&
$request
->
isAjax
())
{
Config
::
set
(
'app_trace'
,
false
);
}
// 切换多语言
if
(
Config
::
get
(
'lang_switch_on'
)
&&
$request
->
get
(
'lang'
))
{
if
(
Config
::
get
(
'lang_switch_on'
)
&&
$request
->
get
(
'lang'
))
{
\think\Cookie
::
set
(
'think_var'
,
$request
->
get
(
'lang'
));
}
// Form别名
...
...
@@ -72,5 +63,4 @@ class Common
]);
$this
->
moduleInit
(
$request
);
}
}
...
...
application/common/controller/Api.php
查看文件 @
9d42f92
...
...
@@ -75,10 +75,8 @@ class Api
$this
->
_initialize
();
// 前置操作方法
if
(
$this
->
beforeActionList
)
{
foreach
(
$this
->
beforeActionList
as
$method
=>
$options
)
{
if
(
$this
->
beforeActionList
)
{
foreach
(
$this
->
beforeActionList
as
$method
=>
$options
)
{
is_numeric
(
$method
)
?
$this
->
beforeAction
(
$options
)
:
$this
->
beforeAction
(
$method
,
$options
);
...
...
@@ -108,30 +106,23 @@ class Api
// 设置当前请求的URI
$this
->
auth
->
setRequestUri
(
$path
);
// 检测是否需要验证登录
if
(
!
$this
->
auth
->
match
(
$this
->
noNeedLogin
))
{
if
(
!
$this
->
auth
->
match
(
$this
->
noNeedLogin
))
{
//初始化
$this
->
auth
->
init
(
$token
);
//检测是否登录
if
(
!
$this
->
auth
->
isLogin
())
{
if
(
!
$this
->
auth
->
isLogin
())
{
$this
->
error
(
__
(
'Please login first'
),
null
,
401
);
}
// 判断是否需要验证权限
if
(
!
$this
->
auth
->
match
(
$this
->
noNeedRight
))
{
if
(
!
$this
->
auth
->
match
(
$this
->
noNeedRight
))
{
// 判断控制器和方法判断是否有对应权限
if
(
!
$this
->
auth
->
check
(
$path
))
{
if
(
!
$this
->
auth
->
check
(
$path
))
{
$this
->
error
(
__
(
'You have no permission'
),
null
,
403
);
}
}
}
else
{
}
else
{
// 如果有传递token才验证是否登录状态
if
(
$token
)
{
if
(
$token
)
{
$this
->
auth
->
init
(
$token
);
}
}
...
...
@@ -204,13 +195,10 @@ class Api
// 如果未设置类型则自动判断
$type
=
$type
?
$type
:
(
$this
->
request
->
param
(
config
(
'var_jsonp_handler'
))
?
'jsonp'
:
$this
->
responseType
);
if
(
isset
(
$header
[
'statuscode'
]))
{
if
(
isset
(
$header
[
'statuscode'
]))
{
$code
=
$header
[
'statuscode'
];
unset
(
$header
[
'statuscode'
]);
}
else
{
}
else
{
//未设置状态码,根据code值判断
$code
=
$code
>=
1000
||
$code
<
200
?
200
:
$code
;
}
...
...
@@ -227,27 +215,20 @@ class Api
*/
protected
function
beforeAction
(
$method
,
$options
=
[])
{
if
(
isset
(
$options
[
'only'
]))
{
if
(
is_string
(
$options
[
'only'
]))
{
if
(
isset
(
$options
[
'only'
]))
{
if
(
is_string
(
$options
[
'only'
]))
{
$options
[
'only'
]
=
explode
(
','
,
$options
[
'only'
]);
}
if
(
!
in_array
(
$this
->
request
->
action
(),
$options
[
'only'
]))
{
if
(
!
in_array
(
$this
->
request
->
action
(),
$options
[
'only'
]))
{
return
;
}
}
elseif
(
isset
(
$options
[
'except'
]))
{
if
(
is_string
(
$options
[
'except'
]))
{
}
elseif
(
isset
(
$options
[
'except'
]))
{
if
(
is_string
(
$options
[
'except'
]))
{
$options
[
'except'
]
=
explode
(
','
,
$options
[
'except'
]);
}
if
(
in_array
(
$this
->
request
->
action
(),
$options
[
'except'
]))
{
if
(
in_array
(
$this
->
request
->
action
(),
$options
[
'except'
]))
{
return
;
}
}
...
...
@@ -281,16 +262,12 @@ class Api
*/
protected
function
validate
(
$data
,
$validate
,
$message
=
[],
$batch
=
false
,
$callback
=
null
)
{
if
(
is_array
(
$validate
))
{
if
(
is_array
(
$validate
))
{
$v
=
Loader
::
validate
();
$v
->
rule
(
$validate
);
}
else
{
}
else
{
// 支持场景
if
(
strpos
(
$validate
,
'.'
))
{
if
(
strpos
(
$validate
,
'.'
))
{
list
(
$validate
,
$scene
)
=
explode
(
'.'
,
$validate
);
}
...
...
@@ -300,21 +277,20 @@ class Api
}
// 批量验证
if
(
$batch
||
$this
->
batchValidate
)
if
(
$batch
||
$this
->
batchValidate
)
{
$v
->
batch
(
true
);
}
// 设置错误信息
if
(
is_array
(
$message
))
if
(
is_array
(
$message
))
{
$v
->
message
(
$message
);
}
// 使用回调验证
if
(
$callback
&&
is_callable
(
$callback
))
{
if
(
$callback
&&
is_callable
(
$callback
))
{
call_user_func_array
(
$callback
,
[
$v
,
&
$data
]);
}
if
(
!
$v
->
check
(
$data
))
{
if
(
$this
->
failException
)
{
if
(
!
$v
->
check
(
$data
))
{
if
(
$this
->
failException
)
{
throw
new
ValidateException
(
$v
->
getError
());
}
...
...
@@ -323,5 +299,4 @@ class Api
return
true
;
}
}
...
...
application/common/controller/Backend.php
查看文件 @
9d42f92
...
...
@@ -121,10 +121,10 @@ class Backend extends Controller
$path
=
str_replace
(
'.'
,
'/'
,
$controllername
)
.
'/'
.
$actionname
;
// 定义是否Addtabs请求
!
defined
(
'IS_ADDTABS'
)
&&
define
(
'IS_ADDTABS'
,
input
(
"addtabs"
)
?
TRUE
:
FALSE
);
!
defined
(
'IS_ADDTABS'
)
&&
define
(
'IS_ADDTABS'
,
input
(
"addtabs"
)
?
true
:
false
);
// 定义是否Dialog请求
!
defined
(
'IS_DIALOG'
)
&&
define
(
'IS_DIALOG'
,
input
(
"dialog"
)
?
TRUE
:
FALSE
);
!
defined
(
'IS_DIALOG'
)
&&
define
(
'IS_DIALOG'
,
input
(
"dialog"
)
?
true
:
false
);
// 定义是否AJAX请求
!
defined
(
'IS_AJAX'
)
&&
define
(
'IS_AJAX'
,
$this
->
request
->
isAjax
());
...
...
@@ -258,8 +258,8 @@ class Backend extends Controller
$order
=
$this
->
request
->
get
(
"order"
,
"DESC"
);
$offset
=
$this
->
request
->
get
(
"offset"
,
0
);
$limit
=
$this
->
request
->
get
(
"limit"
,
0
);
$filter
=
(
array
)
json_decode
(
$filter
,
TRUE
);
$op
=
(
array
)
json_decode
(
$op
,
TRUE
);
$filter
=
(
array
)
json_decode
(
$filter
,
true
);
$op
=
(
array
)
json_decode
(
$op
,
true
);
$filter
=
$filter
?
$filter
:
[];
$where
=
[];
$tableName
=
''
;
...
...
@@ -325,13 +325,14 @@ class Backend extends Controller
case
'BETWEEN'
:
case
'NOT BETWEEN'
:
$arr
=
array_slice
(
explode
(
','
,
$v
),
0
,
2
);
if
(
stripos
(
$v
,
','
)
===
false
||
!
array_filter
(
$arr
))
if
(
stripos
(
$v
,
','
)
===
false
||
!
array_filter
(
$arr
))
{
continue
2
;
}
//当出现一边为空时改变操作符
if
(
$arr
[
0
]
===
''
)
{
$sym
=
$sym
==
'BETWEEN'
?
'<='
:
'>'
;
$arr
=
$arr
[
1
];
}
else
if
(
$arr
[
1
]
===
''
)
{
}
elseif
(
$arr
[
1
]
===
''
)
{
$sym
=
$sym
==
'BETWEEN'
?
'>='
:
'<'
;
$arr
=
$arr
[
0
];
}
...
...
@@ -341,13 +342,14 @@ class Backend extends Controller
case
'NOT RANGE'
:
$v
=
str_replace
(
' - '
,
','
,
$v
);
$arr
=
array_slice
(
explode
(
','
,
$v
),
0
,
2
);
if
(
stripos
(
$v
,
','
)
===
false
||
!
array_filter
(
$arr
))
if
(
stripos
(
$v
,
','
)
===
false
||
!
array_filter
(
$arr
))
{
continue
2
;
}
//当出现一边为空时改变操作符
if
(
$arr
[
0
]
===
''
)
{
$sym
=
$sym
==
'RANGE'
?
'<='
:
'>'
;
$arr
=
$arr
[
1
];
}
else
if
(
$arr
[
1
]
===
''
)
{
}
elseif
(
$arr
[
1
]
===
''
)
{
$sym
=
$sym
==
'RANGE'
?
'>='
:
'<'
;
$arr
=
$arr
[
0
];
}
...
...
@@ -488,11 +490,11 @@ class Backend extends Controller
'pid'
=>
isset
(
$item
[
'pid'
])
?
$item
[
'pid'
]
:
0
];
}
if
(
$istree
)
{
if
(
$istree
)
{
$tree
=
Tree
::
instance
();
$tree
->
init
(
collection
(
$list
)
->
toArray
(),
'pid'
);
$list
=
$tree
->
getTreeList
(
$tree
->
getTreeArray
(
0
),
$field
);
if
(
!
$ishtml
)
{
if
(
!
$ishtml
)
{
foreach
(
$list
as
&
$item
)
{
$item
=
str_replace
(
' '
,
' '
,
$item
);
}
...
...
@@ -503,5 +505,4 @@ class Backend extends Controller
//这里一定要返回有list这个字段,total是可选的,如果total<=list的数量,则会隐藏分页按钮
return
json
([
'list'
=>
$list
,
'total'
=>
$total
]);
}
}
...
...
application/common/controller/Frontend.php
查看文件 @
9d42f92
...
...
@@ -134,5 +134,4 @@ class Frontend extends Controller
{
$this
->
view
->
config
=
array_merge
(
$this
->
view
->
config
?
$this
->
view
->
config
:
[],
is_array
(
$name
)
?
$name
:
[
$name
=>
$value
]);
}
}
...
...
application/common/library/Auth.php
查看文件 @
9d42f92
...
...
@@ -7,17 +7,17 @@ use app\common\model\UserRule;
use
fast\Random
;
use
think\Config
;
use
think\Db
;
use
think\Exception
;
use
think\Hook
;
use
think\Request
;
use
think\Validate
;
class
Auth
{
protected
static
$instance
=
null
;
protected
$_error
=
''
;
protected
$_logined
=
FALSE
;
protected
$_user
=
NULL
;
protected
$_logined
=
false
;
protected
$_user
=
null
;
protected
$_token
=
''
;
//Token默认有效时长
protected
$keeptime
=
2592000
;
...
...
@@ -30,8 +30,7 @@ class Auth
public
function
__construct
(
$options
=
[])
{
if
(
$config
=
Config
::
get
(
'user'
))
{
if
(
$config
=
Config
::
get
(
'user'
))
{
$this
->
config
=
array_merge
(
$this
->
config
,
$config
);
}
$this
->
options
=
array_merge
(
$this
->
config
,
$options
);
...
...
@@ -44,8 +43,7 @@ class Auth
*/
public
static
function
instance
(
$options
=
[])
{
if
(
is_null
(
self
::
$instance
))
{
if
(
is_null
(
self
::
$instance
))
{
self
::
$instance
=
new
static
(
$options
);
}
...
...
@@ -69,7 +67,7 @@ class Auth
*/
public
function
__get
(
$name
)
{
return
$this
->
_user
?
$this
->
_user
->
$name
:
NULL
;
return
$this
->
_user
?
$this
->
_user
->
$name
:
null
;
}
/**
...
...
@@ -80,44 +78,38 @@ class Auth
*/
public
function
init
(
$token
)
{
if
(
$this
->
_logined
)
{
return
TRUE
;
if
(
$this
->
_logined
)
{
return
true
;
}
if
(
$this
->
_error
)
{
return
false
;
}
if
(
$this
->
_error
)
return
FALSE
;
$data
=
Token
::
get
(
$token
);
if
(
!
$data
)
{
return
FALSE
;
if
(
!
$data
)
{
return
false
;
}
$user_id
=
intval
(
$data
[
'user_id'
]);
if
(
$user_id
>
0
)
{
if
(
$user_id
>
0
)
{
$user
=
User
::
get
(
$user_id
);
if
(
!
$user
)
{
if
(
!
$user
)
{
$this
->
setError
(
'Account not exist'
);
return
FALSE
;
return
false
;
}
if
(
$user
[
'status'
]
!=
'normal'
)
{
if
(
$user
[
'status'
]
!=
'normal'
)
{
$this
->
setError
(
'Account is locked'
);
return
FALSE
;
return
false
;
}
$this
->
_user
=
$user
;
$this
->
_logined
=
TRUE
;
$this
->
_logined
=
true
;
$this
->
_token
=
$token
;
//初始化成功的事件
Hook
::
listen
(
"user_init_successed"
,
$this
->
_user
);
return
TRUE
;
}
else
{
return
true
;
}
else
{
$this
->
setError
(
'You are not logged in'
);
return
FALSE
;
return
false
;
}
}
...
...
@@ -134,20 +126,17 @@ class Auth
public
function
register
(
$username
,
$password
,
$email
=
''
,
$mobile
=
''
,
$extend
=
[])
{
// 检测用户名或邮箱、手机号是否存在
if
(
User
::
getByUsername
(
$username
))
{
if
(
User
::
getByUsername
(
$username
))
{
$this
->
setError
(
'Username already exist'
);
return
FALSE
;
return
false
;
}
if
(
$email
&&
User
::
getByEmail
(
$email
))
{
if
(
$email
&&
User
::
getByEmail
(
$email
))
{
$this
->
setError
(
'Email already exist'
);
return
FALSE
;
return
false
;
}
if
(
$mobile
&&
User
::
getByMobile
(
$mobile
))
{
if
(
$mobile
&&
User
::
getByMobile
(
$mobile
))
{
$this
->
setError
(
'Mobile already exist'
);
return
FALSE
;
return
false
;
}
$ip
=
request
()
->
ip
();
...
...
@@ -175,31 +164,11 @@ class Auth
$params
[
'password'
]
=
$this
->
getEncryptPassword
(
$password
,
$params
[
'salt'
]);
$params
=
array_merge
(
$params
,
$extend
);
////////////////同步到Ucenter////////////////
if
(
defined
(
'UC_STATUS'
)
&&
UC_STATUS
)
{
$uc
=
new
\addons\ucenter\library\client\Client
();
$user_id
=
$uc
->
uc_user_register
(
$username
,
$password
,
$email
);
// 如果小于0则说明发生错误
if
(
$user_id
<=
0
)
{
$this
->
setError
(
$user_id
>
-
4
?
'Username is incorrect'
:
'Email is incorrect'
);
return
FALSE
;
}
else
{
$params
[
'id'
]
=
$user_id
;
}
}
//账号注册时需要开启事务,避免出现垃圾数据
Db
::
startTrans
();
try
{
$user
=
User
::
create
(
$params
);
Db
::
commit
();
try
{
$user
=
User
::
create
(
$params
,
true
);
// 此时的Model中只包含部分数据
$this
->
_user
=
User
::
get
(
$user
->
id
);
//设置Token
...
...
@@ -207,16 +176,14 @@ class Auth
Token
::
set
(
$this
->
_token
,
$user
->
id
,
$this
->
keeptime
);
//注册成功的事件
Hook
::
listen
(
"user_register_successed"
,
$this
->
_user
);
return
TRUE
;
}
catch
(
Exception
$e
)
{
Hook
::
listen
(
"user_register_successed"
,
$this
->
_user
,
$data
);
Db
::
commit
();
}
catch
(
Exception
$e
)
{
$this
->
setError
(
$e
->
getMessage
());
Db
::
rollback
();
return
FALSE
;
return
false
;
}
return
true
;
}
/**
...
...
@@ -230,27 +197,24 @@ class Auth
{
$field
=
Validate
::
is
(
$account
,
'email'
)
?
'email'
:
(
Validate
::
regex
(
$account
,
'/^1\d{10}$/'
)
?
'mobile'
:
'username'
);
$user
=
User
::
get
([
$field
=>
$account
]);
if
(
!
$user
)
{
if
(
!
$user
)
{
$this
->
setError
(
'Account is incorrect'
);
return
FALSE
;
return
false
;
}
if
(
$user
->
status
!=
'normal'
)
{
if
(
$user
->
status
!=
'normal'
)
{
$this
->
setError
(
'Account is locked'
);
return
FALSE
;
return
false
;
}
if
(
$user
->
password
!=
$this
->
getEncryptPassword
(
$password
,
$user
->
salt
))
{
if
(
$user
->
password
!=
$this
->
getEncryptPassword
(
$password
,
$user
->
salt
))
{
$this
->
setError
(
'Password is incorrect'
);
return
FALSE
;
return
false
;
}
//直接登录会员
$this
->
direct
(
$user
->
id
);
return
TRUE
;
return
true
;
}
/**
...
...
@@ -260,18 +224,17 @@ class Auth
*/
public
function
logout
()
{
if
(
!
$this
->
_logined
)
{
if
(
!
$this
->
_logined
)
{
$this
->
setError
(
'You are not logged in'
);
return
false
;
}
//设置登录标识
$this
->
_logined
=
FALSE
;
$this
->
_logined
=
false
;
//删除Token
Token
::
delete
(
$this
->
_token
);
//注销成功的事件
Hook
::
listen
(
"user_logout_successed"
,
$this
->
_user
);
return
TRUE
;
return
true
;
}
/**
...
...
@@ -283,14 +246,14 @@ class Auth
*/
public
function
changepwd
(
$newpassword
,
$oldpassword
=
''
,
$ignoreoldpassword
=
false
)
{
if
(
!
$this
->
_logined
)
{
if
(
!
$this
->
_logined
)
{
$this
->
setError
(
'You are not logged in'
);
return
false
;
}
//判断旧密码是否正确
if
(
$this
->
_user
->
password
==
$this
->
getEncryptPassword
(
$oldpassword
,
$this
->
_user
->
salt
)
||
$ignoreoldpassword
)
{
if
(
$this
->
_user
->
password
==
$this
->
getEncryptPassword
(
$oldpassword
,
$this
->
_user
->
salt
)
||
$ignoreoldpassword
)
{
Db
::
startTrans
();
try
{
$salt
=
Random
::
alnum
();
$newpassword
=
$this
->
getEncryptPassword
(
$newpassword
,
$salt
);
$this
->
_user
->
save
([
'password'
=>
$newpassword
,
'salt'
=>
$salt
]);
...
...
@@ -298,10 +261,14 @@ class Auth
Token
::
delete
(
$this
->
_token
);
//修改密码成功的事件
Hook
::
listen
(
"user_changepwd_successed"
,
$this
->
_user
);
return
true
;
Db
::
commit
();
}
catch
(
Exception
$e
)
{
Db
::
rollback
();
$this
->
setError
(
$e
->
getMessage
());
return
false
;
}
else
{
return
true
;
}
else
{
$this
->
setError
(
'Password is incorrect'
);
return
false
;
}
...
...
@@ -315,27 +282,14 @@ class Auth
public
function
direct
(
$user_id
)
{
$user
=
User
::
get
(
$user_id
);
if
(
$user
)
{
////////////////同步到Ucenter////////////////
if
(
defined
(
'UC_STATUS'
)
&&
UC_STATUS
)
{
$uc
=
new
\addons\ucenter\library\client\Client
();
$re
=
$uc
->
uc_user_login
(
$this
->
user
->
id
,
$this
->
user
->
password
.
'#split#'
.
$this
->
user
->
salt
,
3
);
// 如果小于0则说明发生错误
if
(
$re
<=
0
)
{
$this
->
setError
(
'Username or password is incorrect'
);
return
FALSE
;
}
}
if
(
$user
)
{
Db
::
startTrans
();
try
{
$ip
=
request
()
->
ip
();
$time
=
time
();
//判断连续登录和最大连续登录
if
(
$user
->
logintime
<
\fast\Date
::
unixtime
(
'day'
))
{
if
(
$user
->
logintime
<
\fast\Date
::
unixtime
(
'day'
))
{
$user
->
successions
=
$user
->
logintime
<
\fast\Date
::
unixtime
(
'day'
,
-
1
)
?
1
:
$user
->
successions
+
1
;
$user
->
maxsuccessions
=
max
(
$user
->
successions
,
$user
->
maxsuccessions
);
}
...
...
@@ -352,15 +306,19 @@ class Auth
$this
->
_token
=
Random
::
uuid
();
Token
::
set
(
$this
->
_token
,
$user
->
id
,
$this
->
keeptime
);
$this
->
_logined
=
TRUE
;
$this
->
_logined
=
true
;
//登录成功的事件
Hook
::
listen
(
"user_login_successed"
,
$this
->
_user
);
return
TRUE
;
Db
::
commit
();
}
catch
(
Exception
$e
)
{
Db
::
rollback
();
$this
->
setError
(
$e
->
getMessage
());
return
false
;
}
else
{
return
FALSE
;
return
true
;
}
else
{
return
false
;
}
}
...
...
@@ -370,20 +328,20 @@ class Auth
* @param string $module 模块 默认为当前模块
* @return boolean
*/
public
function
check
(
$path
=
NULL
,
$module
=
NULL
)
public
function
check
(
$path
=
null
,
$module
=
null
)
{
if
(
!
$this
->
_logined
)
if
(
!
$this
->
_logined
)
{
return
false
;
}
$ruleList
=
$this
->
getRuleList
();
$rules
=
[];
foreach
(
$ruleList
as
$k
=>
$v
)
{
foreach
(
$ruleList
as
$k
=>
$v
)
{
$rules
[]
=
$v
[
'name'
];
}
$url
=
(
$module
?
$module
:
request
()
->
module
())
.
'/'
.
(
is_null
(
$path
)
?
$this
->
getRequestUri
()
:
$path
);
$url
=
strtolower
(
str_replace
(
'.'
,
'/'
,
$url
));
return
in_array
(
$url
,
$rules
)
?
TRUE
:
FALSE
;
return
in_array
(
$url
,
$rules
)
?
true
:
false
;
}
/**
...
...
@@ -392,8 +350,7 @@ class Auth
*/
public
function
isLogin
()
{
if
(
$this
->
_logined
)
{
if
(
$this
->
_logined
)
{
return
true
;
}
return
false
;
...
...
@@ -426,11 +383,11 @@ class Auth
*/
public
function
getRuleList
()
{
if
(
$this
->
rules
)
if
(
$this
->
rules
)
{
return
$this
->
rules
;
}
$group
=
$this
->
_user
->
group
;
if
(
!
$group
)
{
if
(
!
$group
)
{
return
[];
}
$rules
=
explode
(
','
,
$group
->
rules
);
...
...
@@ -482,37 +439,24 @@ class Auth
public
function
delete
(
$user_id
)
{
$user
=
User
::
get
(
$user_id
);
if
(
!
$user
)
{
return
FALSE
;
}
////////////////同步到Ucenter////////////////
if
(
defined
(
'UC_STATUS'
)
&&
UC_STATUS
)
{
$uc
=
new
\addons\ucenter\library\client\Client
();
$re
=
$uc
->
uc_user_delete
(
$user
[
'id'
]);
// 如果小于0则说明发生错误
if
(
$re
<=
0
)
{
$this
->
setError
(
'Account is locked'
);
return
FALSE
;
}
if
(
!
$user
)
{
return
false
;
}
// 调用事务删除账号
$result
=
Db
::
transaction
(
function
(
$db
)
use
(
$user_id
)
{
Db
::
startTrans
();
try
{
// 删除会员
User
::
destroy
(
$user_id
);
// 删除会员指定的所有Token
Token
::
clear
(
$user_id
);
return
TRUE
;
});
if
(
$result
)
{
Hook
::
listen
(
"user_delete_successed"
,
$user
);
Db
::
commit
();
}
catch
(
Exception
$e
)
{
Db
::
rollback
();
$this
->
setError
(
$e
->
getMessage
());
return
false
;
}
return
$result
?
TRUE
:
FALSE
;
return
true
;
}
/**
...
...
@@ -536,19 +480,17 @@ class Auth
{
$request
=
Request
::
instance
();
$arr
=
is_array
(
$arr
)
?
$arr
:
explode
(
','
,
$arr
);
if
(
!
$arr
)
{
return
FALSE
;
if
(
!
$arr
)
{
return
false
;
}
$arr
=
array_map
(
'strtolower'
,
$arr
);
// 是否存在
if
(
in_array
(
strtolower
(
$request
->
action
()),
$arr
)
||
in_array
(
'*'
,
$arr
))
{
return
TRUE
;
if
(
in_array
(
strtolower
(
$request
->
action
()),
$arr
)
||
in_array
(
'*'
,
$arr
))
{
return
true
;
}
// 没找到匹配
return
FALSE
;
return
false
;
}
/**
...
...
@@ -572,29 +514,25 @@ class Auth
{
$fields
=
!
$fields
?
[
'id'
,
'nickname'
,
'level'
,
'avatar'
]
:
(
is_array
(
$fields
)
?
$fields
:
explode
(
','
,
$fields
));
$ids
=
[];
foreach
(
$datalist
as
$k
=>
$v
)
{
if
(
!
isset
(
$v
[
$fieldkey
]))
foreach
(
$datalist
as
$k
=>
$v
)
{
if
(
!
isset
(
$v
[
$fieldkey
]))
{
continue
;
}
$ids
[]
=
$v
[
$fieldkey
];
}
$list
=
[];
if
(
$ids
)
{
if
(
!
in_array
(
'id'
,
$fields
))
{
if
(
$ids
)
{
if
(
!
in_array
(
'id'
,
$fields
))
{
$fields
[]
=
'id'
;
}
$ids
=
array_unique
(
$ids
);
$selectlist
=
User
::
where
(
'id'
,
'in'
,
$ids
)
->
column
(
$fields
);
foreach
(
$selectlist
as
$k
=>
$v
)
{
foreach
(
$selectlist
as
$k
=>
$v
)
{
$list
[
$v
[
'id'
]]
=
$v
;
}
}
foreach
(
$datalist
as
$k
=>
&
$v
)
{
$v
[
$renderkey
]
=
isset
(
$list
[
$v
[
$fieldkey
]])
?
$list
[
$v
[
$fieldkey
]]
:
NULL
;
foreach
(
$datalist
as
$k
=>
&
$v
)
{
$v
[
$renderkey
]
=
isset
(
$list
[
$v
[
$fieldkey
]])
?
$list
[
$v
[
$fieldkey
]]
:
null
;
}
unset
(
$v
);
return
$datalist
;
...
...
@@ -620,5 +558,4 @@ class Auth
{
return
$this
->
_error
?
__
(
$this
->
_error
)
:
''
;
}
}
...
...
application/common/library/Email.php
查看文件 @
9d42f92
...
...
@@ -38,8 +38,7 @@ class Email
*/
public
static
function
instance
(
$options
=
[])
{
if
(
is_null
(
self
::
$instance
))
{
if
(
is_null
(
self
::
$instance
))
{
self
::
$instance
=
new
static
(
$options
);
}
...
...
@@ -52,8 +51,7 @@ class Email
*/
public
function
__construct
(
$options
=
[])
{
if
(
$config
=
Config
::
get
(
'site'
))
{
if
(
$config
=
Config
::
get
(
'site'
))
{
$this
->
options
=
array_merge
(
$this
->
options
,
$config
);
}
$this
->
options
=
array_merge
(
$this
->
options
,
$options
);
...
...
@@ -150,27 +148,20 @@ class Email
public
function
send
()
{
$result
=
false
;
switch
(
$this
->
options
[
'mail_type'
])
{
switch
(
$this
->
options
[
'mail_type'
])
{
case
1
:
//使用phpmailer发送
$this
->
mail
->
setFrom
(
$this
->
options
[
'from'
],
$this
->
options
[
'from_name'
]);
$this
->
mail
->
addAddress
(
$this
->
options
[
'to'
],
$this
->
options
[
'to_name'
]);
$this
->
mail
->
Subject
=
$this
->
options
[
'subject'
];
if
(
$this
->
options
[
'ishtml'
])
{
if
(
$this
->
options
[
'ishtml'
])
{
$this
->
mail
->
msgHTML
(
$this
->
options
[
'body'
]);
}
else
{
}
else
{
$this
->
mail
->
Body
=
$this
->
options
[
'body'
];
}
try
{
try
{
$result
=
$this
->
mail
->
send
();
}
catch
(
\phpmailerException
$e
)
{
}
catch
(
\phpmailerException
$e
)
{
$this
->
setError
(
$e
->
getMessage
());
}
...
...
application/common/library/Ems.php
查看文件 @
9d42f92
...
...
@@ -36,7 +36,7 @@ class Ems
->
order
(
'id'
,
'DESC'
)
->
find
();
Hook
::
listen
(
'ems_get'
,
$ems
,
null
,
true
);
return
$ems
?
$ems
:
NULL
;
return
$ems
?
$ems
:
null
;
}
/**
...
...
@@ -47,19 +47,18 @@ class Ems
* @param string $event 事件
* @return boolean
*/
public
static
function
send
(
$email
,
$code
=
NULL
,
$event
=
'default'
)
public
static
function
send
(
$email
,
$code
=
null
,
$event
=
'default'
)
{
$code
=
is_null
(
$code
)
?
mt_rand
(
1000
,
9999
)
:
$code
;
$time
=
time
();
$ip
=
request
()
->
ip
();
$ems
=
\app\common\model\Ems
::
create
([
'event'
=>
$event
,
'email'
=>
$email
,
'code'
=>
$code
,
'ip'
=>
$ip
,
'createtime'
=>
$time
]);
$result
=
Hook
::
listen
(
'ems_send'
,
$ems
,
null
,
true
);
if
(
!
$result
)
{
if
(
!
$result
)
{
$ems
->
delete
();
return
FALSE
;
return
false
;
}
return
TRUE
;
return
true
;
}
/**
...
...
@@ -70,7 +69,7 @@ class Ems
* @param string $template 消息模板
* @return boolean
*/
public
static
function
notice
(
$email
,
$msg
=
''
,
$template
=
NULL
)
public
static
function
notice
(
$email
,
$msg
=
''
,
$template
=
null
)
{
$params
=
[
'email'
=>
$email
,
...
...
@@ -78,7 +77,7 @@ class Ems
'template'
=>
$template
];
$result
=
Hook
::
listen
(
'ems_notice'
,
$params
,
null
,
true
);
return
$result
?
TRUE
:
FALSE
;
return
$result
?
true
:
false
;
}
/**
...
...
@@ -95,33 +94,24 @@ class Ems
$ems
=
\app\common\model\Ems
::
where
([
'email'
=>
$email
,
'event'
=>
$event
])
->
order
(
'id'
,
'DESC'
)
->
find
();
if
(
$ems
)
{
if
(
$ems
[
'createtime'
]
>
$time
&&
$ems
[
'times'
]
<=
self
::
$maxCheckNums
)
{
if
(
$ems
)
{
if
(
$ems
[
'createtime'
]
>
$time
&&
$ems
[
'times'
]
<=
self
::
$maxCheckNums
)
{
$correct
=
$code
==
$ems
[
'code'
];
if
(
!
$correct
)
{
if
(
!
$correct
)
{
$ems
->
times
=
$ems
->
times
+
1
;
$ems
->
save
();
return
FALSE
;
}
else
{
return
false
;
}
else
{
$result
=
Hook
::
listen
(
'ems_check'
,
$ems
,
null
,
true
);
return
TRUE
;
return
true
;
}
}
else
{
}
else
{
// 过期则清空该邮箱验证码
self
::
flush
(
$email
,
$event
);
return
FALSE
;
return
false
;
}
}
else
{
return
FALSE
;
}
else
{
return
false
;
}
}
...
...
@@ -138,7 +128,6 @@ class Ems
where
([
'email'
=>
$email
,
'event'
=>
$event
])
->
delete
();
Hook
::
listen
(
'ems_flush'
);
return
TRUE
;
return
true
;
}
}
...
...
application/common/library/Menu.php
查看文件 @
9d42f92
...
...
@@ -17,18 +17,14 @@ class Menu
*/
public
static
function
create
(
$menu
,
$parent
=
0
)
{
if
(
!
is_numeric
(
$parent
))
{
if
(
!
is_numeric
(
$parent
))
{
$parentRule
=
AuthRule
::
getByName
(
$parent
);
$pid
=
$parentRule
?
$parentRule
[
'id'
]
:
0
;
}
else
{
}
else
{
$pid
=
$parent
;
}
$allow
=
array_flip
([
'file'
,
'name'
,
'title'
,
'icon'
,
'condition'
,
'remark'
,
'ismenu'
]);
foreach
(
$menu
as
$k
=>
$v
)
{
foreach
(
$menu
as
$k
=>
$v
)
{
$hasChild
=
isset
(
$v
[
'sublist'
])
&&
$v
[
'sublist'
]
?
true
:
false
;
$data
=
array_intersect_key
(
$v
,
$allow
);
...
...
@@ -37,16 +33,12 @@ class Menu
$data
[
'icon'
]
=
isset
(
$data
[
'icon'
])
?
$data
[
'icon'
]
:
(
$hasChild
?
'fa fa-list'
:
'fa fa-circle-o'
);
$data
[
'pid'
]
=
$pid
;
$data
[
'status'
]
=
'normal'
;
try
{
try
{
$menu
=
AuthRule
::
create
(
$data
);
if
(
$hasChild
)
{
if
(
$hasChild
)
{
self
::
create
(
$v
[
'sublist'
],
$menu
->
id
);
}
}
catch
(
PDOException
$e
)
{
}
catch
(
PDOException
$e
)
{
throw
new
Exception
(
$e
->
getMessage
());
}
}
...
...
@@ -60,8 +52,7 @@ class Menu
public
static
function
delete
(
$name
)
{
$ids
=
self
::
getAuthRuleIdsByName
(
$name
);
if
(
!
$ids
)
{
if
(
!
$ids
)
{
return
false
;
}
AuthRule
::
destroy
(
$ids
);
...
...
@@ -76,8 +67,7 @@ class Menu
public
static
function
enable
(
$name
)
{
$ids
=
self
::
getAuthRuleIdsByName
(
$name
);
if
(
!
$ids
)
{
if
(
!
$ids
)
{
return
false
;
}
AuthRule
::
where
(
'id'
,
'in'
,
$ids
)
->
update
([
'status'
=>
'normal'
]);
...
...
@@ -92,8 +82,7 @@ class Menu
public
static
function
disable
(
$name
)
{
$ids
=
self
::
getAuthRuleIdsByName
(
$name
);
if
(
!
$ids
)
{
if
(
!
$ids
)
{
return
false
;
}
AuthRule
::
where
(
'id'
,
'in'
,
$ids
)
->
update
([
'status'
=>
'hidden'
]);
...
...
@@ -108,14 +97,12 @@ class Menu
public
static
function
export
(
$name
)
{
$ids
=
self
::
getAuthRuleIdsByName
(
$name
);
if
(
!
$ids
)
{
if
(
!
$ids
)
{
return
[];
}
$menuList
=
[];
$menu
=
AuthRule
::
getByName
(
$name
);
if
(
$menu
)
{
if
(
$menu
)
{
$ruleList
=
collection
(
AuthRule
::
where
(
'id'
,
'in'
,
$ids
)
->
select
())
->
toArray
();
$menuList
=
Tree
::
instance
()
->
init
(
$ruleList
)
->
getTreeArray
(
$menu
[
'id'
]);
}
...
...
@@ -131,8 +118,7 @@ class Menu
{
$ids
=
[];
$menu
=
AuthRule
::
getByName
(
$name
);
if
(
$menu
)
{
if
(
$menu
)
{
// 必须将结果集转换为数组
$ruleList
=
collection
(
AuthRule
::
order
(
'weigh'
,
'desc'
)
->
field
(
'id,pid,name'
)
->
select
())
->
toArray
();
// 构造菜单数据
...
...
application/common/library/Sms.php
查看文件 @
9d42f92
...
...
@@ -36,7 +36,7 @@ class Sms
->
order
(
'id'
,
'DESC'
)
->
find
();
Hook
::
listen
(
'sms_get'
,
$sms
,
null
,
true
);
return
$sms
?
$sms
:
NULL
;
return
$sms
?
$sms
:
null
;
}
/**
...
...
@@ -47,19 +47,18 @@ class Sms
* @param string $event 事件
* @return boolean
*/
public
static
function
send
(
$mobile
,
$code
=
NULL
,
$event
=
'default'
)
public
static
function
send
(
$mobile
,
$code
=
null
,
$event
=
'default'
)
{
$code
=
is_null
(
$code
)
?
mt_rand
(
1000
,
9999
)
:
$code
;
$time
=
time
();
$ip
=
request
()
->
ip
();
$sms
=
\app\common\model\Sms
::
create
([
'event'
=>
$event
,
'mobile'
=>
$mobile
,
'code'
=>
$code
,
'ip'
=>
$ip
,
'createtime'
=>
$time
]);
$result
=
Hook
::
listen
(
'sms_send'
,
$sms
,
null
,
true
);
if
(
!
$result
)
{
if
(
!
$result
)
{
$sms
->
delete
();
return
FALSE
;
return
false
;
}
return
TRUE
;
return
true
;
}
/**
...
...
@@ -70,7 +69,7 @@ class Sms
* @param string $template 消息模板
* @return boolean
*/
public
static
function
notice
(
$mobile
,
$msg
=
''
,
$template
=
NULL
)
public
static
function
notice
(
$mobile
,
$msg
=
''
,
$template
=
null
)
{
$params
=
[
'mobile'
=>
$mobile
,
...
...
@@ -78,7 +77,7 @@ class Sms
'template'
=>
$template
];
$result
=
Hook
::
listen
(
'sms_notice'
,
$params
,
null
,
true
);
return
$result
?
TRUE
:
FALSE
;
return
$result
?
true
:
false
;
}
/**
...
...
@@ -95,33 +94,24 @@ class Sms
$sms
=
\app\common\model\Sms
::
where
([
'mobile'
=>
$mobile
,
'event'
=>
$event
])
->
order
(
'id'
,
'DESC'
)
->
find
();
if
(
$sms
)
{
if
(
$sms
[
'createtime'
]
>
$time
&&
$sms
[
'times'
]
<=
self
::
$maxCheckNums
)
{
if
(
$sms
)
{
if
(
$sms
[
'createtime'
]
>
$time
&&
$sms
[
'times'
]
<=
self
::
$maxCheckNums
)
{
$correct
=
$code
==
$sms
[
'code'
];
if
(
!
$correct
)
{
if
(
!
$correct
)
{
$sms
->
times
=
$sms
->
times
+
1
;
$sms
->
save
();
return
FALSE
;
}
else
{
return
false
;
}
else
{
$result
=
Hook
::
listen
(
'sms_check'
,
$sms
,
null
,
true
);
return
$result
;
}
}
else
{
}
else
{
// 过期则清空该手机验证码
self
::
flush
(
$mobile
,
$event
);
return
FALSE
;
return
false
;
}
}
else
{
return
FALSE
;
}
else
{
return
false
;
}
}
...
...
@@ -138,7 +128,6 @@ class Sms
where
([
'mobile'
=>
$mobile
,
'event'
=>
$event
])
->
delete
();
Hook
::
listen
(
'sms_flush'
);
return
TRUE
;
return
true
;
}
}
...
...
application/common/library/Token.php
查看文件 @
9d42f92
application/common/library/token/Driver.php
查看文件 @
9d42f92
application/common/library/token/driver/Mysql.php
查看文件 @
9d42f92
application/common/library/token/driver/Redis.php
查看文件 @
9d42f92
application/common/model/Category.php
查看文件 @
9d42f92
...
...
@@ -7,7 +7,7 @@ use think\Model;
/**
* 分类模型
*/
class
Category
E
xtends
Model
class
Category
e
xtends
Model
{
// 开启自动写入时间戳字段
...
...
@@ -40,8 +40,7 @@ class Category Extends Model
public
static
function
getTypeList
()
{
$typeList
=
config
(
'site.categorytype'
);
foreach
(
$typeList
as
$k
=>
&
$v
)
{
foreach
(
$typeList
as
$k
=>
&
$v
)
{
$v
=
__
(
$v
);
}
return
$typeList
;
...
...
@@ -73,19 +72,16 @@ class Category Extends Model
* @param string $status 指定状态
* @return array
*/
public
static
function
getCategoryArray
(
$type
=
NULL
,
$status
=
NULL
)
{
$list
=
collection
(
self
::
where
(
function
(
$query
)
use
(
$type
,
$status
)
{
if
(
!
is_null
(
$type
))
public
static
function
getCategoryArray
(
$type
=
null
,
$status
=
null
)
{
$list
=
collection
(
self
::
where
(
function
(
$query
)
use
(
$type
,
$status
)
{
if
(
!
is_null
(
$type
))
{
$query
->
where
(
'type'
,
'='
,
$type
);
}
if
(
!
is_null
(
$status
))
{
if
(
!
is_null
(
$status
))
{
$query
->
where
(
'status'
,
'='
,
$status
);
}
})
->
order
(
'weigh'
,
'desc'
)
->
select
())
->
toArray
();
return
$list
;
}
}
...
...
application/common/model/Version.php
查看文件 @
9d42f92
...
...
@@ -25,17 +25,14 @@ class Version extends Model
public
static
function
check
(
$version
)
{
$versionlist
=
self
::
where
(
'status'
,
'normal'
)
->
cache
(
'__version__'
)
->
order
(
'weigh desc,id desc'
)
->
select
();
foreach
(
$versionlist
as
$k
=>
$v
)
{
foreach
(
$versionlist
as
$k
=>
$v
)
{
// 版本正常且新版本号不等于验证的版本号且找到匹配的旧版本
if
(
$v
[
'status'
]
==
'normal'
&&
$v
[
'newversion'
]
!==
$version
&&
\fast\Version
::
check
(
$version
,
$v
[
'oldversion'
]))
{
if
(
$v
[
'status'
]
==
'normal'
&&
$v
[
'newversion'
]
!==
$version
&&
\fast\Version
::
check
(
$version
,
$v
[
'oldversion'
]))
{
$updateversion
=
$v
;
break
;
}
}
if
(
isset
(
$updateversion
))
{
if
(
isset
(
$updateversion
))
{
$search
=
[
'{version}'
,
'{newversion}'
,
'{downloadurl}'
,
'{url}'
,
'{packagesize}'
];
$replace
=
[
$version
,
$updateversion
[
'newversion'
],
$updateversion
[
'downloadurl'
],
$updateversion
[
'downloadurl'
],
$updateversion
[
'packagesize'
]];
$upgradetext
=
str_replace
(
$search
,
$replace
,
$updateversion
[
'content'
]);
...
...
@@ -48,7 +45,6 @@ class Version extends Model
"upgradetext"
=>
$upgradetext
];
}
return
NULL
;
return
null
;
}
}
...
...
application/config.php
查看文件 @
9d42f92
...
...
@@ -272,7 +272,7 @@ return [
//自动检测更新
'checkupdate'
=>
false
,
//版本号
'version'
=>
'1.0.0.20190
318
_beta'
,
'version'
=>
'1.0.0.20190
407
_beta'
,
//API接口地址
'api_url'
=>
'https://api.fastadmin.net'
,
],
...
...
application/index/controller/Index.php
查看文件 @
9d42f92
...
...
@@ -12,11 +12,6 @@ class Index extends Frontend
protected
$noNeedRight
=
'*'
;
protected
$layout
=
''
;
public
function
_initialize
()
{
parent
::
_initialize
();
}
public
function
index
()
{
return
$this
->
view
->
fetch
();
...
...
application/index/view/layout/default.html
查看文件 @
9d42f92
...
...
@@ -61,7 +61,7 @@
<footer
class=
"footer"
style=
"clear:both"
>
<!-- FastAdmin是开源程序,建议在您的网站底部保留一个FastAdmin的链接 -->
<p
class=
"copyright"
>
Copyright
©
2017-201
8
Powered by
<a
href=
"https://www.fastadmin.net"
target=
"_blank"
>
FastAdmin
</a>
All Rights Reserved {$site.name} {:__('Copyrights')}
<a
href=
"http://www.miibeian.gov.cn"
target=
"_blank"
>
{$site.beian}
</a></p>
<p
class=
"copyright"
>
Copyright
©
2017-201
9
Powered by
<a
href=
"https://www.fastadmin.net"
target=
"_blank"
>
FastAdmin
</a>
All Rights Reserved {$site.name} {:__('Copyrights')}
<a
href=
"http://www.miibeian.gov.cn"
target=
"_blank"
>
{$site.beian}
</a></p>
</footer>
{include file="common/script" /}
...
...
application/index/view/user/login.html
查看文件 @
9d42f92
...
...
@@ -36,7 +36,7 @@
<
div
class
=
"form-body"
>
<
input
type
=
"hidden"
name
=
"action"
value
=
"resetpwd"
/>
<
div
class
=
"form-group"
>
<
label
for
=
""
class
=
"control-label col-xs-12 col-sm-3"
>
{:
__
(
'Type'
)}
:
<
/label
>
<
label
class
=
"control-label col-xs-12 col-sm-3"
>
{:
__
(
'Type'
)}
:
<
/label
>
<
div
class
=
"col-xs-12 col-sm-8"
>
<
div
class
=
"radio"
>
<
label
for
=
"type-email"
><
input
id
=
"type-email"
checked
=
"checked"
name
=
"type"
data
-
send
-
url
=
"{:url('api/ems/send')}"
data
-
check
-
url
=
"{:url('api/validate/check_ems_correct')}"
type
=
"radio"
value
=
"email"
>
{:
__
(
'Reset password by email'
)}
<
/label
>
...
...
application/index/view/user/profile.html
查看文件 @
9d42f92
...
...
@@ -39,7 +39,7 @@
<
h2
class
=
"
page-header
"
>
{
:__('Profile')
}
</
h2
>
<
form
id
=
"
profile-form
"
class
=
"
form-horizontal
"
role
=
"
form
"
data-toggle
=
"
validator
"
method
=
"
POST
"
action
=
"
{
:url('api/user/profile')
}
"
>
{
:token()
}
<
input
type
=
"
hidden
"
name
=
"
avatar
"
id
=
"
c-avatar
"
value
=
"
{
$user.avatar
}
"
/>
<
input
type
=
"
hidden
"
name
=
"
avatar
"
id
=
"
c-avatar
"
value
=
"
{
:$user->getData('avatar')
}
"
/>
<
div
class
=
"
form-group
"
>
<
label
class
=
"
control-label
col-xs-12
col-sm-2
"
></
label
>
<
div
class
=
"
col-xs-12
col-sm-4
"
>
...
...
extend/fast/Auth.php
查看文件 @
9d42f92
...
...
@@ -56,14 +56,9 @@ class Auth
'auth_user'
=>
'user'
,
// 用户信息表
];
/**
* 类架构函数
* Auth constructor.
*/
public
function
__construct
()
{
if
(
$auth
=
Config
::
get
(
'auth'
))
{
if
(
$auth
=
Config
::
get
(
'auth'
))
{
$this
->
config
=
array_merge
(
$this
->
config
,
$auth
);
}
// 初始化request
...
...
@@ -78,8 +73,7 @@ class Auth
*/
public
static
function
instance
(
$options
=
[])
{
if
(
is_null
(
self
::
$instance
))
{
if
(
is_null
(
self
::
$instance
))
{
self
::
$instance
=
new
static
(
$options
);
}
...
...
@@ -88,69 +82,56 @@ class Auth
/**
* 检查权限
* @param $name string|array 需要验证的规则列表,支持逗号分隔的权限规则或索引数组
* @param $uid int 认证用户的id
* @param string|array $name 需要验证的规则列表,支持逗号分隔的权限规则或索引数组
* @param int $uid 认证用户的id
* @param string $relation 如果为 'or' 表示满足任一条规则即通过验证;如果为 'and'则表示需满足所有规则才能通过验证
* @param string $mode 执行验证的模式,可分为url,normal
* @return bool 通过验证返回true;失败返回false
*/
public
function
check
(
$name
,
$uid
,
$relation
=
'or'
,
$mode
=
'url'
)
{
if
(
!
$this
->
config
[
'auth_on'
])
{
if
(
!
$this
->
config
[
'auth_on'
])
{
return
true
;
}
// 获取用户需要验证的所有有效规则列表
$rulelist
=
$this
->
getRuleList
(
$uid
);
if
(
in_array
(
'*'
,
$rulelist
))
if
(
in_array
(
'*'
,
$rulelist
))
{
return
true
;
}
if
(
is_string
(
$name
))
{
if
(
is_string
(
$name
))
{
$name
=
strtolower
(
$name
);
if
(
strpos
(
$name
,
','
)
!==
false
)
{
if
(
strpos
(
$name
,
','
)
!==
false
)
{
$name
=
explode
(
','
,
$name
);
}
else
{
}
else
{
$name
=
[
$name
];
}
}
$list
=
[];
//保存验证通过的规则名
if
(
'url'
==
$mode
)
{
if
(
'url'
==
$mode
)
{
$REQUEST
=
unserialize
(
strtolower
(
serialize
(
$this
->
request
->
param
())));
}
foreach
(
$rulelist
as
$rule
)
{
foreach
(
$rulelist
as
$rule
)
{
$query
=
preg_replace
(
'/^.+\?/U'
,
''
,
$rule
);
if
(
'url'
==
$mode
&&
$query
!=
$rule
)
{
if
(
'url'
==
$mode
&&
$query
!=
$rule
)
{
parse_str
(
$query
,
$param
);
//解析规则中的param
$intersect
=
array_intersect_assoc
(
$REQUEST
,
$param
);
$rule
=
preg_replace
(
'/\?.*$/U'
,
''
,
$rule
);
if
(
in_array
(
$rule
,
$name
)
&&
$intersect
==
$param
)
{
if
(
in_array
(
$rule
,
$name
)
&&
$intersect
==
$param
)
{
//如果节点相符且url参数满足
$list
[]
=
$rule
;
}
}
else
{
if
(
in_array
(
$rule
,
$name
))
{
}
else
{
if
(
in_array
(
$rule
,
$name
))
{
$list
[]
=
$rule
;
}
}
}
if
(
'or'
==
$relation
&&
!
empty
(
$list
))
{
if
(
'or'
==
$relation
&&
!
empty
(
$list
))
{
return
true
;
}
$diff
=
array_diff
(
$name
,
$list
);
if
(
'and'
==
$relation
&&
empty
(
$diff
))
{
if
(
'and'
==
$relation
&&
empty
(
$diff
))
{
return
true
;
}
...
...
@@ -159,7 +140,7 @@ class Auth
/**
* 根据用户id获取用户组,返回值为数组
* @param
$uid int
用户id
* @param
int $uid
用户id
* @return array 用户所属的用户组 array(
* array('uid'=>'用户id','group_id'=>'用户组id','name'=>'用户组名称','rules'=>'用户组拥有的规则id,多个,号隔开'),
* ...)
...
...
@@ -167,8 +148,7 @@ class Auth
public
function
getGroups
(
$uid
)
{
static
$groups
=
[];
if
(
isset
(
$groups
[
$uid
]))
{
if
(
isset
(
$groups
[
$uid
]))
{
return
$groups
[
$uid
];
}
...
...
@@ -185,25 +165,22 @@ class Auth
/**
* 获得权限规则列表
* @param int
eger
$uid 用户id
* @param int $uid 用户id
* @return array
*/
public
function
getRuleList
(
$uid
)
{
static
$_rulelist
=
[];
//保存用户验证通过的权限列表
if
(
isset
(
$_rulelist
[
$uid
]))
{
if
(
isset
(
$_rulelist
[
$uid
]))
{
return
$_rulelist
[
$uid
];
}
if
(
2
==
$this
->
config
[
'auth_type'
]
&&
Session
::
has
(
'_rule_list_'
.
$uid
))
{
if
(
2
==
$this
->
config
[
'auth_type'
]
&&
Session
::
has
(
'_rule_list_'
.
$uid
))
{
return
Session
::
get
(
'_rule_list_'
.
$uid
);
}
// 读取用户规则节点
$ids
=
$this
->
getRuleIds
(
$uid
);
if
(
empty
(
$ids
))
{
if
(
empty
(
$ids
))
{
$_rulelist
[
$uid
]
=
[];
return
[];
}
...
...
@@ -212,8 +189,7 @@ class Auth
$where
=
[
'status'
=>
'normal'
];
if
(
!
in_array
(
'*'
,
$ids
))
{
if
(
!
in_array
(
'*'
,
$ids
))
{
$where
[
'id'
]
=
[
'in'
,
$ids
];
}
//读取用户组所有权限规则
...
...
@@ -221,34 +197,27 @@ class Auth
//循环规则,判断结果。
$rulelist
=
[];
//
if
(
in_array
(
'*'
,
$ids
))
{
if
(
in_array
(
'*'
,
$ids
))
{
$rulelist
[]
=
"*"
;
}
foreach
(
$this
->
rules
as
$rule
)
{
foreach
(
$this
->
rules
as
$rule
)
{
//超级管理员无需验证condition
if
(
!
empty
(
$rule
[
'condition'
])
&&
!
in_array
(
'*'
,
$ids
))
{
if
(
!
empty
(
$rule
[
'condition'
])
&&
!
in_array
(
'*'
,
$ids
))
{
//根据condition进行验证
$user
=
$this
->
getUserInfo
(
$uid
);
//获取用户信息,一维数组
$command
=
preg_replace
(
'/\{(\w*?)\}/'
,
'$user[\'\\1\']'
,
$rule
[
'condition'
]);
@
(
eval
(
'$condition=('
.
$command
.
');'
));
if
(
$condition
)
{
if
(
$condition
)
{
$rulelist
[
$rule
[
'id'
]]
=
strtolower
(
$rule
[
'name'
]);
}
}
else
{
}
else
{
//只要存在就记录
$rulelist
[
$rule
[
'id'
]]
=
strtolower
(
$rule
[
'name'
]);
}
}
$_rulelist
[
$uid
]
=
$rulelist
;
//登录验证则需要保存规则列表
if
(
2
==
$this
->
config
[
'auth_type'
])
{
if
(
2
==
$this
->
config
[
'auth_type'
])
{
//规则列表结果保存到session
Session
::
set
(
'_rule_list_'
.
$uid
,
$rulelist
);
}
...
...
@@ -260,8 +229,7 @@ class Auth
//读取用户所属用户组
$groups
=
$this
->
getGroups
(
$uid
);
$ids
=
[];
//保存用户所属用户组设置的所有权限规则id
foreach
(
$groups
as
$g
)
{
foreach
(
$groups
as
$g
)
{
$ids
=
array_merge
(
$ids
,
explode
(
','
,
trim
(
$g
[
'rules'
],
','
)));
}
$ids
=
array_unique
(
$ids
);
...
...
@@ -270,7 +238,7 @@ class Auth
/**
* 获得用户资料
* @param
$u
id
* @param
int $uid 用户
id
* @return mixed
*/
protected
function
getUserInfo
(
$uid
)
...
...
@@ -280,12 +248,10 @@ class Auth
$user
=
Db
::
name
(
$this
->
config
[
'auth_user'
]);
// 获取用户表主键
$_pk
=
is_string
(
$user
->
getPk
())
?
$user
->
getPk
()
:
'uid'
;
if
(
!
isset
(
$user_info
[
$uid
]))
{
if
(
!
isset
(
$user_info
[
$uid
]))
{
$user_info
[
$uid
]
=
$user
->
where
(
$_pk
,
$uid
)
->
find
();
}
return
$user_info
[
$uid
];
}
}
\ No newline at end of file
...
...
extend/fast/Date.php
查看文件 @
9d42f92
...
...
@@ -7,7 +7,6 @@ namespace fast;
*/
class
Date
{
const
YEAR
=
31536000
;
const
MONTH
=
2592000
;
const
WEEK
=
604800
;
...
...
@@ -28,15 +27,13 @@ class Date
* @param mixed $now UNIX timestamp or date string
* @return integer
*/
public
static
function
offset
(
$remote
,
$local
=
NULL
,
$now
=
NULL
)
{
if
(
$local
===
NULL
)
public
static
function
offset
(
$remote
,
$local
=
null
,
$now
=
null
)
{
if
(
$local
===
null
)
{
// Use the default timezone
$local
=
date_default_timezone_get
();
}
if
(
is_int
(
$now
))
{
if
(
is_int
(
$now
))
{
// Convert the timestamp into a string
$now
=
date
(
DateTime
::
RFC2822
,
$now
);
}
...
...
@@ -64,14 +61,13 @@ class Date
* @return array associative list of all outputs requested
* @from https://github.com/kohana/ohanzee-helpers/blob/master/src/Date.php
*/
public
static
function
span
(
$remote
,
$local
=
NULL
,
$output
=
'years,months,weeks,days,hours,minutes,seconds'
)
public
static
function
span
(
$remote
,
$local
=
null
,
$output
=
'years,months,weeks,days,hours,minutes,seconds'
)
{
// Normalize output
$output
=
trim
(
strtolower
((
string
)
$output
));
if
(
!
$output
)
{
$output
=
trim
(
strtolower
((
string
)
$output
));
if
(
!
$output
)
{
// Invalid output
return
FALSE
;
return
false
;
}
// Array with the output formats
$output
=
preg_split
(
'/[^a-z]+/'
,
$output
);
...
...
@@ -79,44 +75,35 @@ class Date
$output
=
array_combine
(
$output
,
array_fill
(
0
,
count
(
$output
),
0
));
// Make the output values into keys
extract
(
array_flip
(
$output
),
EXTR_SKIP
);
if
(
$local
===
NULL
)
{
if
(
$local
===
null
)
{
// Calculate the span from the current time
$local
=
time
();
}
// Calculate timespan (seconds)
$timespan
=
abs
(
$remote
-
$local
);
if
(
isset
(
$output
[
'years'
]))
{
$timespan
-=
self
::
YEAR
*
(
$output
[
'years'
]
=
(
int
)
floor
(
$timespan
/
self
::
YEAR
));
if
(
isset
(
$output
[
'years'
]))
{
$timespan
-=
self
::
YEAR
*
(
$output
[
'years'
]
=
(
int
)
floor
(
$timespan
/
self
::
YEAR
));
}
if
(
isset
(
$output
[
'months'
]))
{
$timespan
-=
self
::
MONTH
*
(
$output
[
'months'
]
=
(
int
)
floor
(
$timespan
/
self
::
MONTH
));
if
(
isset
(
$output
[
'months'
]))
{
$timespan
-=
self
::
MONTH
*
(
$output
[
'months'
]
=
(
int
)
floor
(
$timespan
/
self
::
MONTH
));
}
if
(
isset
(
$output
[
'weeks'
]))
{
$timespan
-=
self
::
WEEK
*
(
$output
[
'weeks'
]
=
(
int
)
floor
(
$timespan
/
self
::
WEEK
));
if
(
isset
(
$output
[
'weeks'
]))
{
$timespan
-=
self
::
WEEK
*
(
$output
[
'weeks'
]
=
(
int
)
floor
(
$timespan
/
self
::
WEEK
));
}
if
(
isset
(
$output
[
'days'
]))
{
$timespan
-=
self
::
DAY
*
(
$output
[
'days'
]
=
(
int
)
floor
(
$timespan
/
self
::
DAY
));
if
(
isset
(
$output
[
'days'
]))
{
$timespan
-=
self
::
DAY
*
(
$output
[
'days'
]
=
(
int
)
floor
(
$timespan
/
self
::
DAY
));
}
if
(
isset
(
$output
[
'hours'
]))
{
$timespan
-=
self
::
HOUR
*
(
$output
[
'hours'
]
=
(
int
)
floor
(
$timespan
/
self
::
HOUR
));
if
(
isset
(
$output
[
'hours'
]))
{
$timespan
-=
self
::
HOUR
*
(
$output
[
'hours'
]
=
(
int
)
floor
(
$timespan
/
self
::
HOUR
));
}
if
(
isset
(
$output
[
'minutes'
]))
{
$timespan
-=
self
::
MINUTE
*
(
$output
[
'minutes'
]
=
(
int
)
floor
(
$timespan
/
self
::
MINUTE
));
if
(
isset
(
$output
[
'minutes'
]))
{
$timespan
-=
self
::
MINUTE
*
(
$output
[
'minutes'
]
=
(
int
)
floor
(
$timespan
/
self
::
MINUTE
));
}
// Seconds ago, 1
if
(
isset
(
$output
[
'seconds'
]))
{
if
(
isset
(
$output
[
'seconds'
]))
{
$output
[
'seconds'
]
=
$timespan
;
}
if
(
count
(
$output
)
===
1
)
{
if
(
count
(
$output
)
===
1
)
{
// Only a single output was requested, return it
return
array_pop
(
$output
);
}
...
...
@@ -145,12 +132,10 @@ class Date
array
(
1
,
'second'
)
);
for
(
$i
=
0
,
$j
=
count
(
$chunks
);
$i
<
$j
;
$i
++
)
{
for
(
$i
=
0
,
$j
=
count
(
$chunks
);
$i
<
$j
;
$i
++
)
{
$seconds
=
$chunks
[
$i
][
0
];
$name
=
$chunks
[
$i
][
1
];
if
((
$count
=
floor
(
$timediff
/
$seconds
))
!=
0
)
{
if
((
$count
=
floor
(
$timediff
/
$seconds
))
!=
0
)
{
break
;
}
}
...
...
@@ -179,8 +164,7 @@ class Date
$minute
=
is_null
(
$minute
)
?
date
(
'i'
)
:
$minute
;
$position
=
in_array
(
$position
,
array
(
'begin'
,
'start'
,
'first'
,
'front'
));
switch
(
$type
)
{
switch
(
$type
)
{
case
'minute'
:
$time
=
$position
?
mktime
(
$hour
,
$minute
+
$offset
,
0
,
$month
,
$day
,
$year
)
:
mktime
(
$hour
,
$minute
+
$offset
,
59
,
$month
,
$day
,
$year
);
break
;
...
...
@@ -212,5 +196,4 @@ class Date
}
return
$time
;
}
}
...
...
extend/fast/Form.php
查看文件 @
9d42f92
...
...
@@ -51,11 +51,6 @@ use ArrayAccess;
class
Form
{
public
function
__construct
()
{
}
/**
* @param $name
* @param $arguments
...
...
@@ -65,7 +60,6 @@ class Form
{
return
call_user_func_array
([
FormBuilder
::
instance
(),
$name
],
$arguments
);
}
}
/**
...
...
@@ -105,11 +99,6 @@ class FormBuilder
protected
$escapeHtml
=
true
;
protected
static
$instance
;
public
function
__construct
()
{
}
/**
* 获取单例
* @param array $options
...
...
@@ -206,8 +195,9 @@ class FormBuilder
*/
public
function
input
(
$type
,
$name
,
$value
=
null
,
$options
=
[])
{
if
(
!
isset
(
$options
[
'name'
]))
if
(
!
isset
(
$options
[
'name'
]))
{
$options
[
'name'
]
=
$name
;
}
$id
=
$this
->
getIdAttribute
(
$name
,
$options
);
...
...
@@ -308,8 +298,9 @@ class FormBuilder
*/
public
function
textarea
(
$name
,
$value
=
null
,
$options
=
[])
{
if
(
!
isset
(
$options
[
'name'
]))
if
(
!
isset
(
$options
[
'name'
]))
{
$options
[
'name'
]
=
$name
;
}
$options
=
$this
->
setTextAreaSize
(
$options
);
$options
[
'id'
]
=
$this
->
getIdAttribute
(
$name
,
$options
);
...
...
@@ -380,10 +371,11 @@ class FormBuilder
*/
public
function
slider
(
$name
,
$min
,
$max
,
$step
,
$value
=
null
,
$options
=
[])
{
$options
=
array_merge
(
$options
,
[
'data-slider-min'
=>
$min
,
'data-slider-max'
=>
$max
,
'data-slider-step'
=>
$step
,
'data-slider-value'
=>
$value
?
$value
:
''
]);
$options
=
array_merge
(
$options
,
[
'data-slider-min'
=>
$min
,
'data-slider-max'
=>
$max
,
'data-slider-step'
=>
$step
,
'data-slider-value'
=>
$value
?
$value
:
''
]);
$options
[
'class'
]
=
isset
(
$options
[
'class'
])
?
$options
[
'class'
]
.
(
stripos
(
$options
[
'class'
],
'form-control'
)
!==
false
?
''
:
' slider form-control'
)
:
'slider form-control'
;
return
$this
->
input
(
'text'
,
$name
,
$value
,
$options
);
}
/**
* 生成下拉列表框
*
...
...
@@ -399,8 +391,9 @@ class FormBuilder
$options
[
'id'
]
=
$this
->
getIdAttribute
(
$name
,
$options
);
if
(
!
isset
(
$options
[
'name'
]))
if
(
!
isset
(
$options
[
'name'
]))
{
$options
[
'name'
]
=
$name
;
}
$html
=
[];
foreach
(
$list
as
$value
=>
$display
)
{
...
...
@@ -854,8 +847,9 @@ EOD;
*/
public
function
checkbox
(
$name
,
$value
=
1
,
$checked
=
null
,
$options
=
[])
{
if
(
$checked
)
if
(
$checked
)
{
$options
[
'checked'
]
=
'checked'
;
}
return
$this
->
input
(
'checkbox'
,
$name
,
$value
,
$options
);
}
...
...
@@ -892,11 +886,13 @@ EOD;
*/
public
function
radio
(
$name
,
$value
=
null
,
$checked
=
null
,
$options
=
[])
{
if
(
is_null
(
$value
))
if
(
is_null
(
$value
))
{
$value
=
$name
;
}
if
(
$checked
)
if
(
$checked
)
{
$options
[
'checked'
]
=
'checked'
;
}
return
$this
->
input
(
'radio'
,
$name
,
$value
,
$options
);
}
...
...
@@ -935,7 +931,6 @@ EOD;
*/
public
function
image
(
$name
=
null
,
$value
,
$inputAttr
=
[],
$uploadAttr
=
[],
$chooseAttr
=
[],
$previewAttr
=
[])
{
$default
=
[
'data-mimetype'
=>
'image/gif,image/jpeg,image/png,image/jpg,image/bmp'
];
...
...
@@ -1069,7 +1064,6 @@ EOD;
*/
public
function
getIdAttribute
(
$name
,
$attributes
)
{
if
(
array_key_exists
(
'id'
,
$attributes
))
{
return
$attributes
[
'id'
];
}
...
...
@@ -1088,12 +1082,13 @@ EOD;
*/
public
function
getValueAttribute
(
$name
,
$value
=
null
)
{
if
(
is_null
(
$name
))
if
(
is_null
(
$name
))
{
return
$value
;
}
if
(
!
is_null
(
$value
))
if
(
!
is_null
(
$value
))
{
return
$value
;
}
}
/**
...
...
@@ -1110,9 +1105,10 @@ EOD;
// 会已 required="required" 拼接起来,而不是用数字keys去拼接
foreach
((
array
)
$attributes
as
$key
=>
$value
)
{
$element
=
$this
->
attributeElement
(
$key
,
$value
);
if
(
!
is_null
(
$element
))
if
(
!
is_null
(
$element
))
{
$html
[]
=
$element
;
}
}
return
count
(
$html
)
>
0
?
' '
.
implode
(
' '
,
$html
)
:
''
;
}
...
...
@@ -1125,8 +1121,9 @@ EOD;
*/
protected
function
attributeElement
(
$key
,
$value
)
{
if
(
is_numeric
(
$key
))
if
(
is_numeric
(
$key
))
{
$key
=
$value
;
}
if
(
!
is_null
(
$value
))
{
if
(
is_array
(
$value
)
||
stripos
(
$value
,
'"'
)
!==
false
)
{
$value
=
is_array
(
$value
)
?
json_encode
(
$value
,
JSON_UNESCAPED_UNICODE
)
:
$value
;
...
...
@@ -1136,7 +1133,6 @@ EOD;
}
}
}
}
class
Arr
...
...
@@ -1244,7 +1240,6 @@ class Arr
unset
(
$array
[
array_shift
(
$parts
)]);
}
}
}
if
(
!
function_exists
(
'array_get'
))
{
...
...
@@ -1261,7 +1256,6 @@ if (!function_exists('array_get')) {
{
return
Arr
::
get
(
$array
,
$key
,
$default
);
}
}
if
(
!
function_exists
(
'e'
))
{
...
...
@@ -1278,7 +1272,6 @@ if (!function_exists('e')) {
}
return
htmlspecialchars
(
$value
,
ENT_QUOTES
,
'UTF-8'
,
false
);
}
}
if
(
!
function_exists
(
'array_except'
))
{
...
...
@@ -1293,5 +1286,4 @@ if (!function_exists('array_except')) {
{
return
Arr
::
except
(
$array
,
$keys
);
}
}
...
...
extend/fast/Http.php
查看文件 @
9d42f92
...
...
@@ -10,6 +10,10 @@ class Http
/**
* 发送一个POST请求
* @param string $url 请求URL
* @param array $params 请求参数
* @param array $options 扩展参数
* @return mixed|string
*/
public
static
function
post
(
$url
,
$params
=
[],
$options
=
[])
{
...
...
@@ -19,6 +23,10 @@ class Http
/**
* 发送一个GET请求
* @param string $url 请求URL
* @param array $params 请求参数
* @param array $options 扩展参数
* @return mixed|string
*/
public
static
function
get
(
$url
,
$params
=
[],
$options
=
[])
{
...
...
@@ -42,53 +50,45 @@ class Http
$ch
=
curl_init
();
$defaults
=
[];
if
(
'GET'
==
$method
)
{
$geturl
=
$query_string
?
$url
.
(
stripos
(
$url
,
"?"
)
!==
FALSE
?
"&"
:
"?"
)
.
$query_string
:
$url
;
if
(
'GET'
==
$method
)
{
$geturl
=
$query_string
?
$url
.
(
stripos
(
$url
,
"?"
)
!==
false
?
"&"
:
"?"
)
.
$query_string
:
$url
;
$defaults
[
CURLOPT_URL
]
=
$geturl
;
}
else
{
}
else
{
$defaults
[
CURLOPT_URL
]
=
$url
;
if
(
$method
==
'POST'
)
{
if
(
$method
==
'POST'
)
{
$defaults
[
CURLOPT_POST
]
=
1
;
}
else
{
}
else
{
$defaults
[
CURLOPT_CUSTOMREQUEST
]
=
$method
;
}
$defaults
[
CURLOPT_POSTFIELDS
]
=
$query_string
;
}
$defaults
[
CURLOPT_HEADER
]
=
FALSE
;
$defaults
[
CURLOPT_HEADER
]
=
false
;
$defaults
[
CURLOPT_USERAGENT
]
=
"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.98 Safari/537.36"
;
$defaults
[
CURLOPT_FOLLOWLOCATION
]
=
TRUE
;
$defaults
[
CURLOPT_RETURNTRANSFER
]
=
TRUE
;
$defaults
[
CURLOPT_FOLLOWLOCATION
]
=
true
;
$defaults
[
CURLOPT_RETURNTRANSFER
]
=
true
;
$defaults
[
CURLOPT_CONNECTTIMEOUT
]
=
3
;
$defaults
[
CURLOPT_TIMEOUT
]
=
3
;
// disable 100-continue
curl_setopt
(
$ch
,
CURLOPT_HTTPHEADER
,
array
(
'Expect:'
));
if
(
'https'
==
$protocol
)
{
$defaults
[
CURLOPT_SSL_VERIFYPEER
]
=
FALSE
;
$defaults
[
CURLOPT_SSL_VERIFYHOST
]
=
FALSE
;
if
(
'https'
==
$protocol
)
{
$defaults
[
CURLOPT_SSL_VERIFYPEER
]
=
false
;
$defaults
[
CURLOPT_SSL_VERIFYHOST
]
=
false
;
}
curl_setopt_array
(
$ch
,
(
array
)
$options
+
$defaults
);
curl_setopt_array
(
$ch
,
(
array
)
$options
+
$defaults
);
$ret
=
curl_exec
(
$ch
);
$err
=
curl_error
(
$ch
);
if
(
FALSE
===
$ret
||
!
empty
(
$err
))
{
if
(
false
===
$ret
||
!
empty
(
$err
))
{
$errno
=
curl_errno
(
$ch
);
$info
=
curl_getinfo
(
$ch
);
curl_close
(
$ch
);
return
[
'ret'
=>
FALSE
,
'ret'
=>
false
,
'errno'
=>
$errno
,
'msg'
=>
$err
,
'info'
=>
$info
,
...
...
@@ -96,7 +96,7 @@ class Http
}
curl_close
(
$ch
);
return
[
'ret'
=>
TRUE
,
'ret'
=>
true
,
'msg'
=>
$ret
,
];
}
...
...
@@ -113,46 +113,45 @@ class Http
$method
=
strtoupper
(
$method
);
$method
=
$method
==
'POST'
?
'POST'
:
'GET'
;
//构造传递的参数
if
(
is_array
(
$params
))
{
if
(
is_array
(
$params
))
{
$post_params
=
[];
foreach
(
$params
as
$k
=>
&
$v
)
{
if
(
is_array
(
$v
))
foreach
(
$params
as
$k
=>
&
$v
)
{
if
(
is_array
(
$v
))
{
$v
=
implode
(
','
,
$v
);
}
$post_params
[]
=
$k
.
'='
.
urlencode
(
$v
);
}
$post_string
=
implode
(
'&'
,
$post_params
);
}
else
{
}
else
{
$post_string
=
$params
;
}
$parts
=
parse_url
(
$url
);
//构造查询的参数
if
(
$method
==
'GET'
&&
$post_string
)
{
if
(
$method
==
'GET'
&&
$post_string
)
{
$parts
[
'query'
]
=
isset
(
$parts
[
'query'
])
?
$parts
[
'query'
]
.
'&'
.
$post_string
:
$post_string
;
$post_string
=
''
;
}
$parts
[
'query'
]
=
isset
(
$parts
[
'query'
])
&&
$parts
[
'query'
]
?
'?'
.
$parts
[
'query'
]
:
''
;
//发送socket请求,获得连接句柄
$fp
=
fsockopen
(
$parts
[
'host'
],
isset
(
$parts
[
'port'
])
?
$parts
[
'port'
]
:
80
,
$errno
,
$errstr
,
3
);
if
(
!
$fp
)
return
FALSE
;
if
(
!
$fp
)
{
return
false
;
}
//设置超时时间
stream_set_timeout
(
$fp
,
3
);
$out
=
"
{
$method
}
{
$parts
[
'path'
]}{
$parts
[
'query'
]}
HTTP
/
1.1
\r\n
";
$out
.= "
Host
:
{
$parts
[
'host'
]}
\r\n
";
$out
.= "
Content
-
Type
:
application
/
x
-
www
-
form
-
urlencoded\r\n
";
$out
.= "
Content
-
Length
:
" . strlen(
$post_string
) . "
\r\n
";
$out
.= "
Connection
:
Close\r\n\r\n
";
if (
$post_string
!== '')
$out
.= "
Host
:
{
$parts
[
'host'
]}
\r\n
";
$out
.= "
Content
-
Type
:
application
/
x
-
www
-
form
-
urlencoded\r\n
";
$out
.= "
Content
-
Length
:
" . strlen(
$post_string
) . "
\r\n
";
$out
.= "
Connection
:
Close\r\n\r\n
";
if (
$post_string
!== '') {
$out
.=
$post_string
;
}
fwrite(
$fp
,
$out
);
//不用关心服务器返回结果
//echo fread(
$fp
, 1024);
fclose(
$fp
);
return
TRUE
;
return
true
;
}
/**
...
...
@@ -163,8 +162,7 @@ class Http
*/
public static function sendToBrowser(
$file
,
$delaftersend
= true,
$exitaftersend
= true)
{
if (file_exists(
$file
) && is_readable(
$file
))
{
if (file_exists(
$file
) && is_readable(
$file
)) {
header('Content-Description: File Transfer');
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment;filename = ' . basename(
$file
));
...
...
@@ -176,15 +174,12 @@ class Http
ob_clean();
flush();
readfile(
$file
);
if (
$delaftersend
)
{
if (
$delaftersend
) {
unlink(
$file
);
}
if (
$exitaftersend
)
{
if (
$exitaftersend
) {
exit;
}
}
}
}
...
...
extend/fast/Pinyin.php
查看文件 @
9d42f92
...
...
@@ -7,7 +7,6 @@ namespace fast;
*/
class
Pinyin
{
protected
static
$keys
=
"a|ai|an|ang|ao|ba|bai|ban|bang|bao|bei|ben|beng|bi|bian|biao|bie|bin|bing|bo|bu|ca|cai|can|cang|cao|ce|ceng|cha|chai|chan|chang|chao|che|chen|cheng|chi|chong|chou|chu|chuai|chuan|chuang|chui|chun|chuo|ci|cong|cou|cu|cuan|cui|cun|cuo|da|dai|dan|dang|dao|de|deng|di|dian|diao|die|ding|diu|dong|dou|du|duan|dui|dun|duo|e|en|er|fa|fan|fang|fei|fen|feng|fo|fou|fu|ga|gai|gan|gang|gao|ge|gei|gen|geng|gong|gou|gu|gua|guai|guan|guang|gui|gun|guo|ha|hai|han|hang|hao|he|hei|hen|heng|hong|hou|hu|hua|huai|huan|huang|hui|hun|huo|ji|jia|jian|jiang|jiao|jie|jin|jing|jiong|jiu|ju|juan|jue|jun|ka|kai|kan|kang|kao|ke|ken|keng|kong|kou|ku|kua|kuai|kuan|kuang|kui|kun|kuo|la|lai|lan|lang|lao|le|lei|leng|li|lia|lian|liang|liao|lie|lin|ling|liu|long|lou|lu|lv|luan|lue|lun|luo|ma|mai|man|mang|mao|me|mei|men|meng|mi|mian|miao|mie|min|ming|miu|mo|mou|mu|na|nai|nan|nang|nao|ne|nei|nen|neng|ni|nian|niang|niao|nie|nin|ning|niu|nong|nu|nv|nuan|nue|nuo|o|ou|pa|pai|pan|pang|pao|pei|pen|peng|pi|pian|piao|pie|pin|ping|po|pu|qi|qia|qian|qiang|qiao|qie|qin|qing|qiong|qiu|qu|quan|que|qun|ran|rang|rao|re|ren|reng|ri|rong|rou|ru|ruan|rui|run|ruo|sa|sai|san|sang|sao|se|sen|seng|sha|shai|shan|shang|shao|she|shen|sheng|shi|shou|shu|shua|shuai|shuan|shuang|shui|shun|shuo|si|song|sou|su|suan|sui|sun|suo|ta|tai|tan|tang|tao|te|teng|ti|tian|tiao|tie|ting|tong|tou|tu|tuan|tui|tun|tuo|wa|wai|wan|wang|wei|wen|weng|wo|wu|xi|xia|xian|xiang|xiao|xie|xin|xing|xiong|xiu|xu|xuan|xue|xun|ya|yan|yang|yao|ye|yi|yin|ying|yo|yong|you|yu|yuan|yue|yun|za|zai|zan|zang|zao|ze|zei|zen|zeng|zha|zhai|zhan|zhang|zhao|zhe|zhen|zheng|zhi|zhong|zhou|zhu|zhua|zhuai|zhuan|zhuang|zhui|zhun|zhuo|zi|zong|zou|zu|zuan|zui|zun|zuo"
;
protected
static
$values
=
"-20319|-20317|-20304|-20295|-20292|-20283|-20265|-20257|-20242|-20230|-20051|-20036|-20032|-20026|-20002|-19990|-19986|-19982|-19976|-19805|-19784|-19775|-19774|-19763|-19756|-19751|-19746|-19741|-19739|-19728|-19725|-19715|-19540|-19531|-19525|-19515|-19500|-19484|-19479|-19467|-19289|-19288|-19281|-19275|-19270|-19263|-19261|-19249|-19243|-19242|-19238|-19235|-19227|-19224|-19218|-19212|-19038|-19023|-19018|-19006|-19003|-18996|-18977|-18961|-18952|-18783|-18774|-18773|-18763|-18756|-18741|-18735|-18731|-18722|-18710|-18697|-18696|-18526|-18518|-18501|-18490|-18478|-18463|-18448|-18447|-18446|-18239|-18237|-18231|-18220|-18211|-18201|-18184|-18183|-18181|-18012|-17997|-17988|-17970|-17964|-17961|-17950|-17947|-17931|-17928|-17922|-17759|-17752|-17733|-17730|-17721|-17703|-17701|-17697|-17692|-17683|-17676|-17496|-17487|-17482|-17468|-17454|-17433|-17427|-17417|-17202|-17185|-16983|-16970|-16942|-16915|-16733|-16708|-16706|-16689|-16664|-16657|-16647|-16474|-16470|-16465|-16459|-16452|-16448|-16433|-16429|-16427|-16423|-16419|-16412|-16407|-16403|-16401|-16393|-16220|-16216|-16212|-16205|-16202|-16187|-16180|-16171|-16169|-16158|-16155|-15959|-15958|-15944|-15933|-15920|-15915|-15903|-15889|-15878|-15707|-15701|-15681|-15667|-15661|-15659|-15652|-15640|-15631|-15625|-15454|-15448|-15436|-15435|-15419|-15416|-15408|-15394|-15385|-15377|-15375|-15369|-15363|-15362|-15183|-15180|-15165|-15158|-15153|-15150|-15149|-15144|-15143|-15141|-15140|-15139|-15128|-15121|-15119|-15117|-15110|-15109|-14941|-14937|-14933|-14930|-14929|-14928|-14926|-14922|-14921|-14914|-14908|-14902|-14894|-14889|-14882|-14873|-14871|-14857|-14678|-14674|-14670|-14668|-14663|-14654|-14645|-14630|-14594|-14429|-14407|-14399|-14384|-14379|-14368|-14355|-14353|-14345|-14170|-14159|-14151|-14149|-14145|-14140|-14137|-14135|-14125|-14123|-14122|-14112|-14109|-14099|-14097|-14094|-14092|-14090|-14087|-14083|-13917|-13914|-13910|-13907|-13906|-13905|-13896|-13894|-13878|-13870|-13859|-13847|-13831|-13658|-13611|-13601|-13406|-13404|-13400|-13398|-13395|-13391|-13387|-13383|-13367|-13359|-13356|-13343|-13340|-13329|-13326|-13318|-13147|-13138|-13120|-13107|-13096|-13095|-13091|-13076|-13068|-13063|-13060|-12888|-12875|-12871|-12860|-12858|-12852|-12849|-12838|-12831|-12829|-12812|-12802|-12607|-12597|-12594|-12585|-12556|-12359|-12346|-12320|-12300|-12120|-12099|-12089|-12074|-12067|-12058|-12039|-11867|-11861|-11847|-11831|-11798|-11781|-11604|-11589|-11536|-11358|-11340|-11339|-11324|-11303|-11097|-11077|-11067|-11055|-11052|-11045|-11041|-11038|-11024|-11020|-11019|-11018|-11014|-10838|-10832|-10815|-10800|-10790|-10780|-10764|-10587|-10544|-10533|-10519|-10331|-10329|-10328|-10322|-10315|-10309|-10307|-10296|-10281|-10274|-10270|-10262|-10260|-10256|-10254"
;
...
...
@@ -26,22 +25,20 @@ class Pinyin
$data
=
array_combine
(
$keys_a
,
$values_a
);
arsort
(
$data
);
reset
(
$data
);
if
(
$charset
!=
'gb2312'
)
if
(
$charset
!=
'gb2312'
)
{
$chinese
=
self
::
_u2_utf8_gb
(
$chinese
);
}
$result
=
''
;
for
(
$i
=
0
;
$i
<
strlen
(
$chinese
);
$i
++
)
{
for
(
$i
=
0
;
$i
<
strlen
(
$chinese
);
$i
++
)
{
$_P
=
ord
(
substr
(
$chinese
,
$i
,
1
));
if
(
$_P
>
160
)
{
if
(
$_P
>
160
)
{
$_Q
=
ord
(
substr
(
$chinese
,
++
$i
,
1
));
$_P
=
$_P
*
256
+
$_Q
-
65536
;
}
$result
.=
(
$onlyfirst
?
substr
(
self
::
_pinyin
(
$_P
,
$data
),
0
,
1
)
:
self
::
_pinyin
(
$_P
,
$data
));
$result
.=
$delimiter
;
}
if
(
$delimiter
)
{
if
(
$delimiter
)
{
$result
=
rtrim
(
$result
,
$delimiter
);
}
...
...
@@ -50,17 +47,16 @@ class Pinyin
private
static
function
_pinyin
(
$num
,
$data
)
{
if
(
$num
>
0
&&
$num
<
160
)
if
(
$num
>
0
&&
$num
<
160
)
{
return
chr
(
$num
);
elseif
(
$num
<
-
20319
||
$num
>
-
10247
)
}
elseif
(
$num
<
-
20319
||
$num
>
-
10247
)
{
return
''
;
else
{
foreach
(
$data
as
$k
=>
$v
)
{
if
(
$v
<=
$num
)
}
else
{
foreach
(
$data
as
$k
=>
$v
)
{
if
(
$v
<=
$num
)
{
break
;
}
}
return
$k
;
}
...
...
@@ -69,21 +65,16 @@ class Pinyin
private
static
function
_u2_utf8_gb
(
$c
)
{
$string
=
''
;
if
(
$c
<
0x80
)
if
(
$c
<
0x80
)
{
$string
.=
$c
;
elseif
(
$c
<
0x800
)
{
}
elseif
(
$c
<
0x800
)
{
$string
.=
chr
(
0xC0
|
$c
>>
6
);
$string
.=
chr
(
0x80
|
$c
&
0x3F
);
}
elseif
(
$c
<
0x10000
)
{
}
elseif
(
$c
<
0x10000
)
{
$string
.=
chr
(
0xE0
|
$c
>>
12
);
$string
.=
chr
(
0x80
|
$c
>>
6
&
0x3F
);
$string
.=
chr
(
0x80
|
$c
&
0x3F
);
}
elseif
(
$c
<
0x200000
)
{
}
elseif
(
$c
<
0x200000
)
{
$string
.=
chr
(
0xF0
|
$c
>>
18
);
$string
.=
chr
(
0x80
|
$c
>>
12
&
0x3F
);
$string
.=
chr
(
0x80
|
$c
>>
6
&
0x3F
);
...
...
@@ -91,5 +82,4 @@ class Pinyin
}
return
iconv
(
'UTF-8'
,
'GB2312//IGNORE'
,
$string
);
}
}
...
...
extend/fast/Random.php
查看文件 @
9d42f92
...
...
@@ -60,14 +60,12 @@ class Random
*/
public
static
function
build
(
$type
=
'alnum'
,
$len
=
8
)
{
switch
(
$type
)
{
switch
(
$type
)
{
case
'alpha'
:
case
'alnum'
:
case
'numeric'
:
case
'nozero'
:
switch
(
$type
)
{
switch
(
$type
)
{
case
'alpha'
:
$pool
=
'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'
;
break
;
...
...
@@ -87,7 +85,7 @@ class Random
return
md5
(
uniqid
(
mt_rand
()));
case
'encrypt'
:
case
'sha1'
:
return
sha1
(
uniqid
(
mt_rand
(),
TRUE
));
return
sha1
(
uniqid
(
mt_rand
(),
true
));
}
}
...
...
@@ -95,72 +93,56 @@ class Random
* 根据数组元素的概率获得键名
*
* @param array $ps array('p1'=>20, 'p2'=>30, 'p3'=>50);
* @param array $num 默认为1,即随机出来的数量
* @param array $unique 默认为true,即当num>1时,随机出的数量是否唯一
* @param int $num 默认为1,即随机出来的数量
* @param bool $unique 默认为true,即当num>1时,随机出的数量是否唯一
* @return mixed 当num为1时返回键名,反之返回一维数组
*/
public
static
function
lottery
(
$ps
,
$num
=
1
,
$unique
=
true
)
{
if
(
!
$ps
)
{
if
(
!
$ps
)
{
return
$num
==
1
?
''
:
[];
}
if
(
$num
>=
count
(
$ps
)
&&
$unique
)
{
if
(
$num
>=
count
(
$ps
)
&&
$unique
)
{
$res
=
array_keys
(
$ps
);
return
$num
==
1
?
$res
[
0
]
:
$res
;
}
$max_exp
=
0
;
$res
=
[];
foreach
(
$ps
as
$key
=>
$value
)
{
foreach
(
$ps
as
$key
=>
$value
)
{
$value
=
substr
(
$value
,
0
,
stripos
(
$value
,
"."
)
+
6
);
$exp
=
strlen
(
strchr
(
$value
,
'.'
))
-
1
;
if
(
$exp
>
$max_exp
)
{
if
(
$exp
>
$max_exp
)
{
$max_exp
=
$exp
;
}
}
$pow_exp
=
pow
(
10
,
$max_exp
);
if
(
$pow_exp
>
1
)
{
if
(
$pow_exp
>
1
)
{
reset
(
$ps
);
foreach
(
$ps
as
$key
=>
$value
)
{
foreach
(
$ps
as
$key
=>
$value
)
{
$ps
[
$key
]
=
$value
*
$pow_exp
;
}
}
$pro_sum
=
array_sum
(
$ps
);
if
(
$pro_sum
<
1
)
{
if
(
$pro_sum
<
1
)
{
return
$num
==
1
?
''
:
[];
}
for
(
$i
=
0
;
$i
<
$num
;
$i
++
)
{
for
(
$i
=
0
;
$i
<
$num
;
$i
++
)
{
$rand_num
=
mt_rand
(
1
,
$pro_sum
);
reset
(
$ps
);
foreach
(
$ps
as
$key
=>
$value
)
{
if
(
$rand_num
<=
$value
)
{
foreach
(
$ps
as
$key
=>
$value
)
{
if
(
$rand_num
<=
$value
)
{
break
;
}
else
{
}
else
{
$rand_num
-=
$value
;
}
}
if
(
$num
==
1
)
{
if
(
$num
==
1
)
{
$res
=
$key
;
break
;
}
else
{
}
else
{
$res
[
$i
]
=
$key
;
}
if
(
$unique
)
{
if
(
$unique
)
{
$pro_sum
-=
$value
;
unset
(
$ps
[
$key
]);
}
...
...
@@ -175,8 +157,15 @@ class Random
public
static
function
uuid
()
{
return
sprintf
(
'%04x%04x-%04x-%04x-%04x-%04x%04x%04x'
,
mt_rand
(
0
,
0xffff
),
mt_rand
(
0
,
0xffff
),
mt_rand
(
0
,
0xffff
),
mt_rand
(
0
,
0x0fff
)
|
0x4000
,
mt_rand
(
0
,
0x3fff
)
|
0x8000
,
mt_rand
(
0
,
0xffff
),
mt_rand
(
0
,
0xffff
),
mt_rand
(
0
,
0xffff
)
'%04x%04x-%04x-%04x-%04x-%04x%04x%04x'
,
mt_rand
(
0
,
0xffff
),
mt_rand
(
0
,
0xffff
),
mt_rand
(
0
,
0xffff
),
mt_rand
(
0
,
0x0fff
)
|
0x4000
,
mt_rand
(
0
,
0x3fff
)
|
0x8000
,
mt_rand
(
0
,
0xffff
),
mt_rand
(
0
,
0xffff
),
mt_rand
(
0
,
0xffff
)
);
}
}
...
...
extend/fast/Rsa.php
查看文件 @
9d42f92
...
...
@@ -7,7 +7,6 @@ namespace fast;
*/
class
Rsa
{
public
$publicKey
=
''
;
public
$privateKey
=
''
;
private
$_privKey
;
...
...
@@ -28,8 +27,10 @@ class Rsa
/**
* * the construtor,the param $path is the keys saving path
* @param string $publicKey 公钥
* @param string $privateKey 私钥
*/
function
__construct
(
$publicKey
=
null
,
$privateKey
=
null
)
public
function
__construct
(
$publicKey
=
null
,
$privateKey
=
null
)
{
$this
->
setKey
(
$publicKey
,
$privateKey
);
}
...
...
@@ -41,19 +42,20 @@ class Rsa
*/
public
function
setKey
(
$publicKey
=
null
,
$privateKey
=
null
)
{
if
(
!
is_null
(
$publicKey
))
if
(
!
is_null
(
$publicKey
))
{
$this
->
publicKey
=
$publicKey
;
if
(
!
is_null
(
$privateKey
))
}
if
(
!
is_null
(
$privateKey
))
{
$this
->
privateKey
=
$privateKey
;
}
}
/**
* * setup the private key
*/
private
function
setupPrivKey
()
{
if
(
is_resource
(
$this
->
_privKey
))
{
if
(
is_resource
(
$this
->
_privKey
))
{
return
true
;
}
$pem
=
chunk_split
(
$this
->
privateKey
,
64
,
"
\n
"
);
...
...
@@ -67,8 +69,7 @@ class Rsa
*/
private
function
setupPubKey
()
{
if
(
is_resource
(
$this
->
_pubKey
))
{
if
(
is_resource
(
$this
->
_pubKey
))
{
return
true
;
}
$pem
=
chunk_split
(
$this
->
publicKey
,
64
,
"
\n
"
);
...
...
@@ -82,14 +83,12 @@ class Rsa
*/
public
function
privEncrypt
(
$data
)
{
if
(
!
is_string
(
$data
))
{
if
(
!
is_string
(
$data
))
{
return
null
;
}
$this
->
setupPrivKey
();
$r
=
openssl_private_encrypt
(
$data
,
$encrypted
,
$this
->
_privKey
);
if
(
$r
)
{
if
(
$r
)
{
return
base64_encode
(
$encrypted
);
}
return
null
;
...
...
@@ -100,15 +99,13 @@ class Rsa
*/
public
function
privDecrypt
(
$encrypted
)
{
if
(
!
is_string
(
$encrypted
))
{
if
(
!
is_string
(
$encrypted
))
{
return
null
;
}
$this
->
setupPrivKey
();
$encrypted
=
base64_decode
(
$encrypted
);
$r
=
openssl_private_decrypt
(
$encrypted
,
$decrypted
,
$this
->
_privKey
);
if
(
$r
)
{
if
(
$r
)
{
return
$decrypted
;
}
return
null
;
...
...
@@ -119,14 +116,12 @@ class Rsa
*/
public
function
pubEncrypt
(
$data
)
{
if
(
!
is_string
(
$data
))
{
if
(
!
is_string
(
$data
))
{
return
null
;
}
$this
->
setupPubKey
();
$r
=
openssl_public_encrypt
(
$data
,
$encrypted
,
$this
->
_pubKey
);
if
(
$r
)
{
if
(
$r
)
{
return
base64_encode
(
$encrypted
);
}
return
null
;
...
...
@@ -137,15 +132,13 @@ class Rsa
*/
public
function
pubDecrypt
(
$crypted
)
{
if
(
!
is_string
(
$crypted
))
{
if
(
!
is_string
(
$crypted
))
{
return
null
;
}
$this
->
setupPubKey
();
$crypted
=
base64_decode
(
$crypted
);
$r
=
openssl_public_decrypt
(
$crypted
,
$decrypted
,
$this
->
_pubKey
);
if
(
$r
)
{
if
(
$r
)
{
return
$decrypted
;
}
return
null
;
...
...
@@ -183,5 +176,4 @@ class Rsa
is_resource
(
$this
->
_privKey
)
&&
@
openssl_free_key
(
$this
->
_privKey
);
is_resource
(
$this
->
_pubKey
)
&&
@
openssl_free_key
(
$this
->
_pubKey
);
}
}
...
...
extend/fast/Tree.php
查看文件 @
9d42f92
...
...
@@ -10,7 +10,6 @@ use think\Config;
*/
class
Tree
{
protected
static
$instance
;
//默认配置
protected
$config
=
[];
...
...
@@ -32,8 +31,7 @@ class Tree
public
function
__construct
(
$options
=
[])
{
if
(
$config
=
Config
::
get
(
'tree'
))
{
if
(
$config
=
Config
::
get
(
'tree'
))
{
$this
->
options
=
array_merge
(
$this
->
config
,
$config
);
}
$this
->
options
=
array_merge
(
$this
->
config
,
$options
);
...
...
@@ -47,8 +45,7 @@ class Tree
*/
public
static
function
instance
(
$options
=
[])
{
if
(
is_null
(
self
::
$instance
))
{
if
(
is_null
(
self
::
$instance
))
{
self
::
$instance
=
new
static
(
$options
);
}
...
...
@@ -56,10 +53,8 @@ class Tree
}
/**
* 初始化方法
* @param array 2维数组,例如:
* @param array $arr 2维数组,例如:
* array(
* 1 => array('id'=>'1','pid'=>0,'name'=>'一级栏目一'),
* 2 => array('id'=>'2','pid'=>0,'name'=>'一级栏目二'),
...
...
@@ -69,14 +64,19 @@ class Tree
* 6 => array('id'=>'6','pid'=>3,'name'=>'三级栏目一'),
* 7 => array('id'=>'7','pid'=>3,'name'=>'三级栏目二')
* )
* @param string $pidname 父字段名称
* @param string $nbsp 空格占位符
* @return Tree
*/
public
function
init
(
$arr
=
[],
$pidname
=
NULL
,
$nbsp
=
NULL
)
public
function
init
(
$arr
=
[],
$pidname
=
null
,
$nbsp
=
null
)
{
$this
->
arr
=
$arr
;
if
(
!
is_null
(
$pidname
))
if
(
!
is_null
(
$pidname
))
{
$this
->
pidname
=
$pidname
;
if
(
!
is_null
(
$nbsp
))
}
if
(
!
is_null
(
$nbsp
))
{
$this
->
nbsp
=
$nbsp
;
}
return
$this
;
}
...
...
@@ -88,37 +88,34 @@ class Tree
public
function
getChild
(
$myid
)
{
$newarr
=
[];
foreach
(
$this
->
arr
as
$value
)
{
if
(
!
isset
(
$value
[
'id'
]))
foreach
(
$this
->
arr
as
$value
)
{
if
(
!
isset
(
$value
[
'id'
]))
{
continue
;
if
(
$value
[
$this
->
pidname
]
==
$myid
)
}
if
(
$value
[
$this
->
pidname
]
==
$myid
)
{
$newarr
[
$value
[
'id'
]]
=
$value
;
}
}
return
$newarr
;
}
/**
* 读取指定节点的所有孩子节点
* @param int $myid 节点ID
* @param boolean $withself 是否包含自身
* @return array
*/
public
function
getChildren
(
$myid
,
$withself
=
FALSE
)
public
function
getChildren
(
$myid
,
$withself
=
false
)
{
$newarr
=
[];
foreach
(
$this
->
arr
as
$value
)
{
if
(
!
isset
(
$value
[
'id'
]))
foreach
(
$this
->
arr
as
$value
)
{
if
(
!
isset
(
$value
[
'id'
]))
{
continue
;
if
(
$value
[
$this
->
pidname
]
==
$myid
)
{
}
if
(
$value
[
$this
->
pidname
]
==
$myid
)
{
$newarr
[]
=
$value
;
$newarr
=
array_merge
(
$newarr
,
$this
->
getChildren
(
$value
[
'id'
]));
}
else
if
(
$withself
&&
$value
[
'id'
]
==
$myid
)
{
}
elseif
(
$withself
&&
$value
[
'id'
]
==
$myid
)
{
$newarr
[]
=
$value
;
}
}
...
...
@@ -126,50 +123,42 @@ class Tree
}
/**
* 读取指定节点的所有孩子节点ID
* @param int $myid 节点ID
* @param boolean $withself 是否包含自身
* @return array
*/
public
function
getChildrenIds
(
$myid
,
$withself
=
FALSE
)
public
function
getChildrenIds
(
$myid
,
$withself
=
false
)
{
$childrenlist
=
$this
->
getChildren
(
$myid
,
$withself
);
$childrenids
=
[];
foreach
(
$childrenlist
as
$k
=>
$v
)
{
foreach
(
$childrenlist
as
$k
=>
$v
)
{
$childrenids
[]
=
$v
[
'id'
];
}
return
$childrenids
;
}
/**
* 得到当前位置父辈数组
* @param int
* @return array
*/
public
function
getParent
(
$myid
)
{
$pid
=
0
;
$newarr
=
[];
foreach
(
$this
->
arr
as
$value
)
{
if
(
!
isset
(
$value
[
'id'
]))
foreach
(
$this
->
arr
as
$value
)
{
if
(
!
isset
(
$value
[
'id'
]))
{
continue
;
if
(
$value
[
'id'
]
==
$myid
)
{
}
if
(
$value
[
'id'
]
==
$myid
)
{
$pid
=
$value
[
$this
->
pidname
];
break
;
}
}
if
(
$pid
)
{
foreach
(
$this
->
arr
as
$value
)
{
if
(
$value
[
'id'
]
==
$pid
)
{
if
(
$pid
)
{
foreach
(
$this
->
arr
as
$value
)
{
if
(
$value
[
'id'
]
==
$pid
)
{
$newarr
[]
=
$value
;
break
;
}
...
...
@@ -179,33 +168,29 @@ class Tree
}
/**
* 得到当前位置所有父辈数组
* @param int
* @param bool $withself 是否包含自己
* @return array
*/
public
function
getParents
(
$myid
,
$withself
=
FALSE
)
public
function
getParents
(
$myid
,
$withself
=
false
)
{
$pid
=
0
;
$newarr
=
[];
foreach
(
$this
->
arr
as
$value
)
{
if
(
!
isset
(
$value
[
'id'
]))
foreach
(
$this
->
arr
as
$value
)
{
if
(
!
isset
(
$value
[
'id'
]))
{
continue
;
if
(
$value
[
'id'
]
==
$myid
)
{
if
(
$withself
)
{
}
if
(
$value
[
'id'
]
==
$myid
)
{
if
(
$withself
)
{
$newarr
[]
=
$value
;
}
$pid
=
$value
[
$this
->
pidname
];
break
;
}
}
if
(
$pid
)
{
$arr
=
$this
->
getParents
(
$pid
,
TRUE
);
if
(
$pid
)
{
$arr
=
$this
->
getParents
(
$pid
,
true
);
$newarr
=
array_merge
(
$arr
,
$newarr
);
}
return
$newarr
;
...
...
@@ -217,19 +202,17 @@ class Tree
* @param boolean $withself
* @return array
*/
public
function
getParentsIds
(
$myid
,
$withself
=
FALSE
)
public
function
getParentsIds
(
$myid
,
$withself
=
false
)
{
$parentlist
=
$this
->
getParents
(
$myid
,
$withself
);
$parentsids
=
[];
foreach
(
$parentlist
as
$k
=>
$v
)
{
foreach
(
$parentlist
as
$k
=>
$v
)
{
$parentsids
[]
=
$v
[
'id'
];
}
return
$parentsids
;
}
/**
* 树型结构Option
* @param int $myid 表示获得这个ID下的所有子级
* @param string $itemtpl 条目模板 如:"<option value=@id @selected @disabled>@spacer@name</option>"
...
...
@@ -238,27 +221,21 @@ class Tree
* @param string $itemprefix 每一项前缀
* @param string $toptpl 顶级栏目的模板
* @return string
*/
public
function
getTree
(
$myid
,
$itemtpl
=
"<option value=@id @selected @disabled>@spacer@name</option>"
,
$selectedids
=
''
,
$disabledids
=
''
,
$itemprefix
=
''
,
$toptpl
=
''
)
{
$ret
=
''
;
$number
=
1
;
$childs
=
$this
->
getChild
(
$myid
);
if
(
$childs
)
{
if
(
$childs
)
{
$total
=
count
(
$childs
);
foreach
(
$childs
as
$value
)
{
foreach
(
$childs
as
$value
)
{
$id
=
$value
[
'id'
];
$j
=
$k
=
''
;
if
(
$number
==
$total
)
{
if
(
$number
==
$total
)
{
$j
.=
$this
->
icon
[
2
];
$k
=
$itemprefix
?
$this
->
nbsp
:
''
;
}
else
{
}
else
{
$j
.=
$this
->
icon
[
1
];
$k
=
$itemprefix
?
$this
->
icon
[
0
]
:
''
;
}
...
...
@@ -266,10 +243,10 @@ class Tree
$selected
=
$selectedids
&&
in_array
(
$id
,
(
is_array
(
$selectedids
)
?
$selectedids
:
explode
(
','
,
$selectedids
)))
?
'selected'
:
''
;
$disabled
=
$disabledids
&&
in_array
(
$id
,
(
is_array
(
$disabledids
)
?
$disabledids
:
explode
(
','
,
$disabledids
)))
?
'disabled'
:
''
;
$value
=
array_merge
(
$value
,
array
(
'selected'
=>
$selected
,
'disabled'
=>
$disabled
,
'spacer'
=>
$spacer
));
$value
=
array_combine
(
array_map
(
function
(
$k
)
{
$value
=
array_combine
(
array_map
(
function
(
$k
)
{
return
'@'
.
$k
;
},
array_keys
(
$value
)),
$value
);
$nstr
=
strtr
(((
$value
[
"@
{
$this
->
pidname
}
"
]
==
0
||
$this
->
getChild
(
$id
)
)
&&
$toptpl
?
$toptpl
:
$itemtpl
),
$value
);
$nstr
=
strtr
(((
$value
[
"@
{
$this
->
pidname
}
"
]
==
0
||
$this
->
getChild
(
$id
))
&&
$toptpl
?
$toptpl
:
$itemtpl
),
$value
);
$ret
.=
$nstr
;
$ret
.=
$this
->
getTree
(
$id
,
$itemtpl
,
$selectedids
,
$disabledids
,
$itemprefix
.
$k
.
$this
->
nbsp
,
$toptpl
);
$number
++
;
...
...
@@ -279,30 +256,27 @@ class Tree
}
/**
* 树型结构UL
* @param int $myid 表示获得这个ID下的所有子级
* @param string $itemtpl 条目模板 如:"<li value=@id @selected @disabled>@name @childlist</li>"
* @param string $selectedids 选中的ID
* @param string $disabledids 禁用的ID
* @param string $wraptag 子列表包裹标签
* @param string $wrapattr 子列表包裹属性
* @return string
*/
public
function
getTreeUl
(
$myid
,
$itemtpl
,
$selectedids
=
''
,
$disabledids
=
''
,
$wraptag
=
'ul'
,
$wrapattr
=
''
)
{
$str
=
''
;
$childs
=
$this
->
getChild
(
$myid
);
if
(
$childs
)
{
foreach
(
$childs
as
$value
)
{
if
(
$childs
)
{
foreach
(
$childs
as
$value
)
{
$id
=
$value
[
'id'
];
unset
(
$value
[
'child'
]);
$selected
=
$selectedids
&&
in_array
(
$id
,
(
is_array
(
$selectedids
)
?
$selectedids
:
explode
(
','
,
$selectedids
)))
?
'selected'
:
''
;
$disabled
=
$disabledids
&&
in_array
(
$id
,
(
is_array
(
$disabledids
)
?
$disabledids
:
explode
(
','
,
$disabledids
)))
?
'disabled'
:
''
;
$value
=
array_merge
(
$value
,
array
(
'selected'
=>
$selected
,
'disabled'
=>
$disabled
));
$value
=
array_combine
(
array_map
(
function
(
$k
)
{
$value
=
array_combine
(
array_map
(
function
(
$k
)
{
return
'@'
.
$k
;
},
array_keys
(
$value
)),
$value
);
$nstr
=
strtr
(
$itemtpl
,
$value
);
...
...
@@ -329,16 +303,14 @@ class Tree
{
$str
=
''
;
$childs
=
$this
->
getChild
(
$myid
);
if
(
$childs
)
{
foreach
(
$childs
as
$value
)
{
if
(
$childs
)
{
foreach
(
$childs
as
$value
)
{
$id
=
$value
[
'id'
];
unset
(
$value
[
'child'
]);
$selected
=
in_array
(
$id
,
(
is_array
(
$selectedids
)
?
$selectedids
:
explode
(
','
,
$selectedids
)))
?
'selected'
:
''
;
$disabled
=
in_array
(
$id
,
(
is_array
(
$disabledids
)
?
$disabledids
:
explode
(
','
,
$disabledids
)))
?
'disabled'
:
''
;
$value
=
array_merge
(
$value
,
array
(
'selected'
=>
$selected
,
'disabled'
=>
$disabled
));
$value
=
array_combine
(
array_map
(
function
(
$k
)
{
$value
=
array_combine
(
array_map
(
function
(
$k
)
{
return
'@'
.
$k
;
},
array_keys
(
$value
)),
$value
);
$bakvalue
=
array_intersect_key
(
$value
,
array_flip
([
'@url'
,
'@caret'
,
'@class'
]));
...
...
@@ -377,19 +349,14 @@ class Tree
$ret
=
''
;
$number
=
1
;
$childs
=
$this
->
getChild
(
$myid
);
if
(
$childs
)
{
if
(
$childs
)
{
$total
=
count
(
$childs
);
foreach
(
$childs
as
$id
=>
$value
)
{
foreach
(
$childs
as
$id
=>
$value
)
{
$j
=
$k
=
''
;
if
(
$number
==
$total
)
{
if
(
$number
==
$total
)
{
$j
.=
$this
->
icon
[
2
];
$k
=
$itemprefix
?
$this
->
nbsp
:
''
;
}
else
{
}
else
{
$j
.=
$this
->
icon
[
1
];
$k
=
$itemprefix
?
$this
->
icon
[
0
]
:
''
;
}
...
...
@@ -397,7 +364,7 @@ class Tree
$selected
=
$selectedids
&&
in_array
(
$id
,
(
is_array
(
$selectedids
)
?
$selectedids
:
explode
(
','
,
$selectedids
)))
?
'selected'
:
''
;
$disabled
=
$disabledids
&&
in_array
(
$id
,
(
is_array
(
$disabledids
)
?
$disabledids
:
explode
(
','
,
$disabledids
)))
?
'disabled'
:
''
;
$value
=
array_merge
(
$value
,
array
(
'selected'
=>
$selected
,
'disabled'
=>
$disabled
,
'spacer'
=>
$spacer
));
$value
=
array_combine
(
array_map
(
function
(
$k
)
{
$value
=
array_combine
(
array_map
(
function
(
$k
)
{
return
'@'
.
$k
;
},
array_keys
(
$value
)),
$value
);
$nstr
=
strtr
(
!
isset
(
$value
[
'@disabled'
])
||
!
$value
[
'@disabled'
]
?
$itemtpl1
:
$itemtpl2
,
$value
);
...
...
@@ -423,19 +390,14 @@ class Tree
$n
=
0
;
$data
=
[];
$number
=
1
;
if
(
$childs
)
{
if
(
$childs
)
{
$total
=
count
(
$childs
);
foreach
(
$childs
as
$id
=>
$value
)
{
foreach
(
$childs
as
$id
=>
$value
)
{
$j
=
$k
=
''
;
if
(
$number
==
$total
)
{
if
(
$number
==
$total
)
{
$j
.=
$this
->
icon
[
2
];
$k
=
$itemprefix
?
$this
->
nbsp
:
''
;
}
else
{
}
else
{
$j
.=
$this
->
icon
[
1
];
$k
=
$itemprefix
?
$this
->
icon
[
0
]
:
''
;
}
...
...
@@ -453,25 +415,24 @@ class Tree
/**
* 将getTreeArray的结果返回为二维数组
* @param array $data
* @param string $field
* @return array
*/
public
function
getTreeList
(
$data
=
[],
$field
=
'name'
)
{
$arr
=
[];
foreach
(
$data
as
$k
=>
$v
)
{
foreach
(
$data
as
$k
=>
$v
)
{
$childlist
=
isset
(
$v
[
'childlist'
])
?
$v
[
'childlist'
]
:
[];
unset
(
$v
[
'childlist'
]);
$v
[
$field
]
=
$v
[
'spacer'
]
.
' '
.
$v
[
$field
];
$v
[
'haschild'
]
=
$childlist
?
1
:
0
;
if
(
$v
[
'id'
])
if
(
$v
[
'id'
])
{
$arr
[]
=
$v
;
if
(
$childlist
)
{
}
if
(
$childlist
)
{
$arr
=
array_merge
(
$arr
,
$this
->
getTreeList
(
$childlist
,
$field
));
}
}
return
$arr
;
}
}
...
...
extend/fast/Version.php
查看文件 @
9d42f92
...
...
@@ -13,45 +13,40 @@ class Version
*
* @param string $version
* @param array $data
* @return bool
*/
public
static
function
check
(
$version
,
$data
=
[])
{
//版本号以.分隔
$data
=
is_array
(
$data
)
?
$data
:
[
$data
];
if
(
$data
)
{
if
(
in_array
(
"*"
,
$data
)
||
in_array
(
$version
,
$data
))
{
return
TRUE
;
if
(
$data
)
{
if
(
in_array
(
"*"
,
$data
)
||
in_array
(
$version
,
$data
))
{
return
true
;
}
$ver
=
explode
(
'.'
,
$version
);
if
(
$ver
)
{
if
(
$ver
)
{
$versize
=
count
(
$ver
);
//验证允许的版本
foreach
(
$data
as
$m
)
{
foreach
(
$data
as
$m
)
{
$c
=
explode
(
'.'
,
$m
);
if
(
!
$c
||
$versize
!=
count
(
$c
))
if
(
!
$c
||
$versize
!=
count
(
$c
))
{
continue
;
}
$i
=
0
;
foreach
(
$c
as
$a
=>
$k
)
{
if
(
!
self
::
compare
(
$ver
[
$a
],
$k
))
{
foreach
(
$c
as
$a
=>
$k
)
{
if
(
!
self
::
compare
(
$ver
[
$a
],
$k
))
{
continue
2
;
}
else
{
}
else
{
$i
++
;
}
}
if
(
$i
==
$versize
)
return
TRUE
;
if
(
$i
==
$versize
)
{
return
true
;
}
}
}
}
return
FALSE
;
return
false
;
}
/**
...
...
@@ -63,31 +58,22 @@ class Version
*/
public
static
function
compare
(
$v1
,
$v2
)
{
if
(
$v2
==
"*"
||
$v1
==
$v2
)
{
return
TRUE
;
}
else
{
if
(
$v2
==
"*"
||
$v1
==
$v2
)
{
return
true
;
}
else
{
$values
=
[];
$k
=
explode
(
','
,
$v2
);
foreach
(
$k
as
$v
)
{
if
(
strpos
(
$v
,
'-'
)
!==
FALSE
)
{
foreach
(
$k
as
$v
)
{
if
(
strpos
(
$v
,
'-'
)
!==
false
)
{
list
(
$start
,
$stop
)
=
explode
(
'-'
,
$v
);
for
(
$i
=
$start
;
$i
<=
$stop
;
$i
++
)
{
for
(
$i
=
$start
;
$i
<=
$stop
;
$i
++
)
{
$values
[]
=
$i
;
}
}
else
{
}
else
{
$values
[]
=
$v
;
}
}
return
in_array
(
$v1
,
$values
)
?
TRUE
:
FALSE
;
return
in_array
(
$v1
,
$values
)
?
true
:
false
;
}
}
}
...
...
public/assets/css/frontend.css
查看文件 @
9d42f92
...
...
@@ -73,6 +73,9 @@ body {
#header-navbar
li
.dropdown
ul
.dropdown-menu
{
min-width
:
94px
;
}
form
.form-horizontal
.control-label
{
font-weight
:
normal
;
}
.panel-default
{
padding
:
0
15px
;
border-color
:
#e4ecf3
;
...
...
public/assets/css/frontend.min.css
查看文件 @
9d42f92
此 diff 太大无法显示。
public/assets/js/backend/addon.js
查看文件 @
9d42f92
...
...
@@ -21,6 +21,21 @@ define(['jquery', 'bootstrap', 'backend', 'table', 'form', 'template'], function
});
}
});
table
.
on
(
'load-error.bs.table'
,
function
(
e
,
status
,
res
)
{
if
(
status
==
404
&&
$
(
".btn-switch.active"
).
data
(
"type"
)
!=
"local"
)
{
Layer
.
confirm
(
__
(
'Store now available tips'
),
{
title
:
__
(
'Warmtips'
),
btn
:
[
__
(
'Switch to the local'
),
__
(
'Try to reload'
)]
},
function
(
index
)
{
layer
.
close
(
index
);
$
(
".btn-switch[data-type='local']"
).
trigger
(
"click"
);
},
function
(
index
)
{
layer
.
close
(
index
);
table
.
bootstrapTable
(
'refresh'
);
});
return
false
;
}
});
table
.
on
(
'post-body.bs.table'
,
function
(
e
,
settings
,
json
,
xhr
)
{
var
parenttable
=
table
.
closest
(
'.bootstrap-table'
);
var
d
=
$
(
".fixed-table-toolbar"
,
parenttable
).
find
(
".search input"
);
...
...
public/assets/js/require-backend.min.js
查看文件 @
9d42f92
...
...
@@ -749,8 +749,14 @@ define('fast',['jquery', 'bootstrap', 'toastr', 'layer', 'lang'], function ($, u
return
url
;
},
//获取修复后可访问的cdn链接
cdnurl
:
function
(
url
)
{
return
/^
(?:[
a-z
]
+:
)?\/\/
/i
.
test
(
url
)
?
url
:
Config
.
upload
.
cdnurl
+
url
;
cdnurl
:
function
(
url
,
domain
)
{
var
rule
=
new
RegExp
(
"^((?:[a-z]+:)?\\/\\/|data:image\\/)"
,
"i"
);
var
url
=
rule
.
test
(
url
)
?
url
:
Config
.
upload
.
cdnurl
+
url
;
if
(
domain
&&
!
rule
.
test
(
url
))
{
domain
=
typeof
domain
===
'string'
?
domain
:
location
.
origin
;
url
=
domain
+
url
;
}
return
url
;
},
//查询Url参数
query
:
function
(
name
,
url
)
{
...
...
@@ -771,7 +777,7 @@ define('fast',['jquery', 'bootstrap', 'toastr', 'layer', 'lang'], function ($, u
title
=
options
&&
options
.
title
?
options
.
title
:
(
title
?
title
:
""
);
url
=
Fast
.
api
.
fixurl
(
url
);
url
=
url
+
(
url
.
indexOf
(
"?"
)
>
-
1
?
"&"
:
"?"
)
+
"dialog=1"
;
var
area
=
[
$
(
window
).
width
()
>
800
?
'800px'
:
'95%'
,
$
(
window
).
height
()
>
600
?
'600px'
:
'95%'
];
var
area
=
Fast
.
config
.
openArea
!=
undefined
?
Fast
.
config
.
openArea
:
[
$
(
window
).
width
()
>
800
?
'800px'
:
'95%'
,
$
(
window
).
height
()
>
600
?
'600px'
:
'95%'
];
options
=
$
.
extend
({
type
:
2
,
title
:
title
,
...
...
@@ -6468,6 +6474,52 @@ define('upload',['jquery', 'bootstrap', 'plupload', 'template'], function ($, un
$
(
"#"
+
preview_id
).
trigger
(
"fa.preview.change"
);
});
}
if
(
input_id
)
{
//粘贴上传
$
(
"body"
).
on
(
'paste'
,
"#"
+
input_id
,
function
(
event
)
{
var
that
=
this
;
var
image
,
pasteEvent
;
pasteEvent
=
event
.
originalEvent
;
if
(
pasteEvent
.
clipboardData
&&
pasteEvent
.
clipboardData
.
items
)
{
image
=
Upload
.
api
.
getImageFromClipboard
(
pasteEvent
);
if
(
image
)
{
event
.
preventDefault
();
var
button
=
$
(
".plupload[data-input-id='"
+
$
(
that
).
attr
(
"id"
)
+
"']"
);
Upload
.
api
.
send
(
image
,
function
(
data
)
{
var
urlArr
=
[];
if
(
button
&&
button
.
data
(
"multiple"
)
&&
$
(
that
).
val
()
!==
''
)
{
urlArr
.
push
(
$
(
that
).
val
());
}
urlArr
.
push
(
data
.
url
);
$
(
that
).
val
(
urlArr
.
join
(
","
)).
trigger
(
"change"
);
});
}
}
});
//拖拽上传
$
(
"body"
).
on
(
'drop'
,
"#"
+
input_id
,
function
(
event
)
{
var
that
=
this
;
var
images
,
pasteEvent
;
pasteEvent
=
event
.
originalEvent
;
if
(
pasteEvent
.
dataTransfer
&&
pasteEvent
.
dataTransfer
.
files
)
{
images
=
Upload
.
api
.
getImageFromDrop
(
pasteEvent
);
if
(
images
.
length
>
0
)
{
event
.
preventDefault
();
var
button
=
$
(
".plupload[data-input-id='"
+
$
(
that
).
attr
(
"id"
)
+
"']"
);
$
.
each
(
images
,
function
(
i
,
image
)
{
Upload
.
api
.
send
(
image
,
function
(
data
)
{
var
urlArr
=
[];
if
(
button
&&
button
.
data
(
"multiple"
)
&&
$
(
that
).
val
()
!==
''
)
{
urlArr
.
push
(
$
(
that
).
val
());
}
urlArr
.
push
(
data
.
url
);
$
(
that
).
val
(
urlArr
.
join
(
","
)).
trigger
(
"change"
);
});
});
}
}
});
}
Upload
.
list
[
id
].
init
();
});
},
...
...
@@ -6495,8 +6547,34 @@ define('upload',['jquery', 'bootstrap', 'plupload', 'template'], function ($, un
alert
(
"Custom Callback,Response URL:"
+
response
.
url
);
},
},
getImageFromClipboard
:
function
(
data
)
{
var
i
,
item
;
i
=
0
;
while
(
i
<
data
.
clipboardData
.
items
.
length
)
{
item
=
data
.
clipboardData
.
items
[
i
];
if
(
item
.
type
.
indexOf
(
"image"
)
!==
-
1
)
{
return
item
.
getAsFile
()
||
false
;
}
};
i
++
;
}
return
false
;
},
getImageFromDrop
:
function
(
data
)
{
var
i
,
item
,
images
;
i
=
0
;
images
=
[];
while
(
i
<
data
.
dataTransfer
.
files
.
length
)
{
item
=
data
.
dataTransfer
.
files
[
i
];
if
(
item
.
type
.
indexOf
(
"image"
)
!==
-
1
)
{
images
.
push
(
item
);
}
i
++
;
}
return
images
;
}
}
}
;
return
Upload
;
});
...
...
@@ -10244,14 +10322,20 @@ define('table',['jquery', 'bootstrap', 'moment', 'moment/locale/zh-cn', 'bootstr
var
color
=
typeof
this
.
color
!==
'undefined'
?
this
.
color
:
'success'
;
var
yes
=
typeof
this
.
yes
!==
'undefined'
?
this
.
yes
:
1
;
var
no
=
typeof
this
.
no
!==
'undefined'
?
this
.
no
:
0
;
var
url
=
typeof
this
.
url
!==
'undefined'
?
this
.
url
:
''
;
return
"<a href='javascript:;' data-toggle='tooltip' title='"
+
__
(
'Click to toggle'
)
+
"' class='btn-change' data-id='"
+
row
.
id
+
"' data-params='"
+
this
.
field
+
"="
+
(
value
==
yes
?
no
:
yes
)
+
"'><i class='fa fa-toggle-on "
+
(
value
==
yes
?
'text-'
+
color
:
'fa-flip-horizontal text-gray'
)
+
" fa-2x'></i></a>"
;
+
row
.
id
+
"'
"
+
(
url
?
"data-url='"
+
url
+
"'"
:
""
)
+
"
data-params='"
+
this
.
field
+
"="
+
(
value
==
yes
?
no
:
yes
)
+
"'><i class='fa fa-toggle-on "
+
(
value
==
yes
?
'text-'
+
color
:
'fa-flip-horizontal text-gray'
)
+
" fa-2x'></i></a>"
;
},
url
:
function
(
value
,
row
,
index
)
{
return
'<div class="input-group input-group-sm" style="width:250px;margin:0 auto;"><input type="text" class="form-control input-sm" value="'
+
value
+
'"><span class="input-group-btn input-group-sm"><a href="'
+
value
+
'" target="_blank" class="btn btn-default btn-sm"><i class="fa fa-link"></i></a></span></div>'
;
},
search
:
function
(
value
,
row
,
index
)
{
return
'<a href="javascript:;" class="searchit" data-toggle="tooltip" title="'
+
__
(
'Click to search %s'
,
value
)
+
'" data-field="'
+
this
.
field
+
'" data-value="'
+
value
+
'">'
+
value
+
'</a>'
;
var
field
=
this
.
field
;
if
(
typeof
this
.
customField
!==
'undefined'
&&
typeof
row
[
this
.
customField
]
!==
'undefined'
)
{
value
=
row
[
this
.
customField
];
field
=
this
.
customField
;
}
return
'<a href="javascript:;" class="searchit" data-toggle="tooltip" title="'
+
__
(
'Click to search %s'
,
value
)
+
'" data-field="'
+
field
+
'" data-value="'
+
value
+
'">'
+
value
+
'</a>'
;
},
addtabs
:
function
(
value
,
row
,
index
)
{
var
url
=
Table
.
api
.
replaceurl
(
this
.
url
,
row
,
this
.
table
);
...
...
public/assets/js/require-frontend.min.js
查看文件 @
9d42f92
...
...
@@ -748,8 +748,14 @@ define('fast',['jquery', 'bootstrap', 'toastr', 'layer', 'lang'], function ($, u
return
url
;
},
//获取修复后可访问的cdn链接
cdnurl
:
function
(
url
)
{
return
/^
(?:[
a-z
]
+:
)?\/\/
/i
.
test
(
url
)
?
url
:
Config
.
upload
.
cdnurl
+
url
;
cdnurl
:
function
(
url
,
domain
)
{
var
rule
=
new
RegExp
(
"^((?:[a-z]+:)?\\/\\/|data:image\\/)"
,
"i"
);
var
url
=
rule
.
test
(
url
)
?
url
:
Config
.
upload
.
cdnurl
+
url
;
if
(
domain
&&
!
rule
.
test
(
url
))
{
domain
=
typeof
domain
===
'string'
?
domain
:
location
.
origin
;
url
=
domain
+
url
;
}
return
url
;
},
//查询Url参数
query
:
function
(
name
,
url
)
{
...
...
@@ -770,7 +776,7 @@ define('fast',['jquery', 'bootstrap', 'toastr', 'layer', 'lang'], function ($, u
title
=
options
&&
options
.
title
?
options
.
title
:
(
title
?
title
:
""
);
url
=
Fast
.
api
.
fixurl
(
url
);
url
=
url
+
(
url
.
indexOf
(
"?"
)
>
-
1
?
"&"
:
"?"
)
+
"dialog=1"
;
var
area
=
[
$
(
window
).
width
()
>
800
?
'800px'
:
'95%'
,
$
(
window
).
height
()
>
600
?
'600px'
:
'95%'
];
var
area
=
Fast
.
config
.
openArea
!=
undefined
?
Fast
.
config
.
openArea
:
[
$
(
window
).
width
()
>
800
?
'800px'
:
'95%'
,
$
(
window
).
height
()
>
600
?
'600px'
:
'95%'
];
options
=
$
.
extend
({
type
:
2
,
title
:
title
,
...
...
public/assets/less/frontend.less
查看文件 @
9d42f92
...
...
@@ -96,6 +96,10 @@ body {
min-width:94px;
}
form.form-horizontal .control-label {
font-weight: normal;
}
.panel-default {
padding: 0 15px;
border-color: #e4ecf3;
...
...
请
注册
或
登录
后发表评论