Initial project files: BESCMS full source
This commit is contained in:
@@ -0,0 +1,11 @@
|
||||
<?php
|
||||
|
||||
return [
|
||||
|
||||
'type' => 'app',
|
||||
'name' => '用户系统',
|
||||
'author' => '迅睿云软件',
|
||||
'icon' => 'fa fa-user',
|
||||
'uri' => 'member/home/index'
|
||||
|
||||
];
|
||||
@@ -0,0 +1,23 @@
|
||||
<?php
|
||||
|
||||
if (!method_exists(\Phpcmf\Service::M('table'), 'install_schema')) {
|
||||
return dr_return_data(0, '请先升级迅睿系统后再安装本插件');
|
||||
}
|
||||
|
||||
$code = (string)file_get_contents(CMSPATH.'Core/Hooks.php');
|
||||
if (strpos($code, 'app_on') === false) {
|
||||
return dr_return_data(0, '迅睿主程序版本较低,无法安装本插件');
|
||||
}
|
||||
|
||||
if (\Phpcmf\Service::M()->is_table_exists('member_menu')) {
|
||||
$path = dr_get_app_dir('member');
|
||||
file_put_contents($path.'install.lock', SYS_TIME);
|
||||
if (function_exists('dr_install_app')) {
|
||||
dr_install_app('member');
|
||||
}
|
||||
// 已经安装成功的版本
|
||||
\Phpcmf\Service::M('Menu')->add_app('member');
|
||||
return dr_return_data(0, '用户系统已安装成功');
|
||||
}
|
||||
|
||||
return dr_return_data(1, 'ok');
|
||||
@@ -0,0 +1,69 @@
|
||||
<?php
|
||||
|
||||
\Phpcmf\Hooks::app_on('member', 'cms_init', function() {
|
||||
|
||||
if (IS_ADMIN || IS_API) {
|
||||
return;
|
||||
}
|
||||
|
||||
\Phpcmf\Service::L('member', 'member')->group_timeout(\Phpcmf\Service::C());
|
||||
|
||||
});
|
||||
|
||||
|
||||
// 多几个版本再移动至init
|
||||
if (!function_exists('dr_member_menu_show')) {
|
||||
|
||||
// 判断用户中心菜单权限
|
||||
function dr_member_menu_show($t) {
|
||||
|
||||
if ($t['mark']) {
|
||||
list($a, $b) = explode('-', $t['mark']);
|
||||
switch ($a) {
|
||||
case 'module':
|
||||
// 判断模块当前站点是否可用
|
||||
if (!\Phpcmf\Service::C()->get_cache('module-'.SITE_ID.'-'.$b)) {
|
||||
return 0;
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
// 判断站点显示权限
|
||||
$is_site = 0;
|
||||
if (!$t['site'] || ($t['site'] && dr_in_array(SITE_ID, $t['site']))) {
|
||||
$is_site = 1; // 当前可用
|
||||
}
|
||||
|
||||
// 判断终端显示权限
|
||||
$is_client = 0;
|
||||
if (!$t['client'] || ($t['client'] && dr_in_array(CLIENT_NAME, $t['client']))) {
|
||||
$is_client = 1; // 当前可用
|
||||
}
|
||||
|
||||
// 判断用户组显示权限
|
||||
if ($is_client && $is_site
|
||||
&& (!$t['group'] || dr_array_intersect(\Phpcmf\Service::C()->member['groupid'], $t['group']))) {
|
||||
return 1;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
if (!function_exists('dr_member_group_is_timeout')) {
|
||||
function dr_member_group_is_timeout() {
|
||||
|
||||
if (APP_DIR == 'api' or IS_API == 1) {
|
||||
return 0; // api控制器不强制跳转
|
||||
} elseif (APP_DIR == 'pay') {
|
||||
return 0; // 支付系统放过
|
||||
} elseif (IS_MEMBER
|
||||
&& in_array(\Phpcmf\Service::L('Router')->class, ['home', 'pay', 'recharge', 'api', 'apply'])) {
|
||||
return 0;// 指定这些控制器不强制跳转
|
||||
}
|
||||
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,55 @@
|
||||
<?php
|
||||
|
||||
if (IS_ADMIN) {
|
||||
if (! function_exists('dr_redirect_safe_check')) {
|
||||
$this->_admin_msg(1, '需要升级一下CMS主程序!', dr_url('cloud/update'));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// 头像
|
||||
function dr_member_list_avatar($value, $param = [], $data = [], $field = []) {
|
||||
|
||||
$uid = isset($data['id']) ? $data['id'] : 0;
|
||||
|
||||
return '<a class="fc_member_show" href="javascript:;" uid="'.$uid.'"><img class="img-circle" src="'.dr_avatar($uid).'" style="width:30px;height:30px"></a>';
|
||||
}
|
||||
|
||||
function dr_member_verify_avatar_url($uid) {
|
||||
|
||||
$avatar_url = '';
|
||||
list($cache_path, $cache_url) = dr_avatar_path();
|
||||
$dir = dr_avatar_dir($uid);
|
||||
if (is_file($cache_path.$dir.$uid.'_verify.jpg')) {
|
||||
$avatar_url = $cache_url.$dir.$uid.'_verify.jpg?time='.SYS_TIME;
|
||||
}
|
||||
|
||||
return $avatar_url;
|
||||
}
|
||||
|
||||
// 头像
|
||||
function dr_member_verify_avatar($value, $param = [], $data = [], $field = []) {
|
||||
|
||||
$uid = isset($data['uid']) ? $data['uid'] : 0;
|
||||
|
||||
return '<a class="fc_member_show" href="javascript:;" uid="'.$uid.'"><img class="img-circle" src="'.dr_avatar($uid).'" style="width:30px;height:30px"></a>';
|
||||
}
|
||||
function dr_member_verify_avatar2($value, $param = [], $data = [], $field = []) {
|
||||
|
||||
$uid = isset($data['uid']) ? $data['uid'] : 0;
|
||||
return '<a href="javascript:;""><img class="img-circle" src="'.dr_member_verify_avatar_url($uid).'" style="width:30px;height:30px"></a>';
|
||||
}
|
||||
|
||||
function dr_member_verify_status($value, $param = [], $data = [], $field = []) {
|
||||
|
||||
if ($value == 1) {
|
||||
$html = '<span class="label label-sm label-danger">'.dr_lang('待审核');
|
||||
} elseif ($value == 2) {
|
||||
$html = '<span class="label label-sm label-success">'.dr_lang('已通过');
|
||||
} else {
|
||||
$html = '<span class="label label-sm label-warning">'.dr_lang('未通过') ;
|
||||
}
|
||||
|
||||
return '<label>'.$html.'</span></label>';
|
||||
|
||||
}
|
||||
@@ -0,0 +1,238 @@
|
||||
<?php
|
||||
$rt = \Phpcmf\Service::M('table')->install_schema([
|
||||
'tables' => [
|
||||
'member_login' => [
|
||||
'comment' => '登录日志记录',
|
||||
'drop' => false,
|
||||
'fields' => [
|
||||
'id' => 'int(10) unsigned NOT NULL AUTO_INCREMENT',
|
||||
'uid' => 'mediumint(8) unsigned DEFAULT NULL COMMENT \'会员uid\'',
|
||||
'type' => 'varchar(30) NOT NULL COMMENT \'登录方式\'',
|
||||
'loginip' => 'varchar(50) NOT NULL COMMENT \'登录Ip\'',
|
||||
'logintime' => 'int(10) unsigned NOT NULL COMMENT \'登录时间\'',
|
||||
'useragent' => 'varchar(255) NOT NULL COMMENT \'客户端信息\'',
|
||||
],
|
||||
'indexes' => [
|
||||
'PRIMARY KEY (`id`)',
|
||||
'KEY `uid` (`uid`)',
|
||||
'KEY `loginip` (`loginip`)',
|
||||
'KEY `logintime` (`logintime`)',
|
||||
],
|
||||
],
|
||||
'member_group' => [
|
||||
'comment' => '用户组表',
|
||||
'drop' => false,
|
||||
'fields' => [
|
||||
'id' => 'smallint(5) unsigned NOT NULL AUTO_INCREMENT',
|
||||
'name' => 'text NOT NULL COMMENT \'用户组名称\'',
|
||||
'price' => 'decimal(10,2) NOT NULL COMMENT \'售价\'',
|
||||
'unit' => 'tinyint(1) unsigned NOT NULL COMMENT \'价格单位:1积分,0金钱\'',
|
||||
'days' => 'int(10) unsigned NOT NULL COMMENT \'生效时长\'',
|
||||
'apply' => 'tinyint(1) unsigned NOT NULL COMMENT \'是否申请\'',
|
||||
'register' => 'tinyint(1) unsigned NOT NULL COMMENT \'是否允许注册\'',
|
||||
'setting' => 'text NOT NULL COMMENT \'用户组配置\'',
|
||||
'displayorder' => 'smallint(5) NOT NULL COMMENT \'排序\'',
|
||||
],
|
||||
'indexes' => [
|
||||
'PRIMARY KEY (`id`)',
|
||||
'KEY `displayorder` (`displayorder`)',
|
||||
],
|
||||
],
|
||||
'member_level' => [
|
||||
'comment' => '用户组级别表',
|
||||
'drop' => false,
|
||||
'fields' => [
|
||||
'id' => 'smallint(5) unsigned NOT NULL AUTO_INCREMENT',
|
||||
'gid' => 'smallint(5) unsigned NOT NULL COMMENT \'用户id\'',
|
||||
'name' => 'varchar(255) NOT NULL COMMENT \'名称\'',
|
||||
'stars' => 'int(10) NOT NULL COMMENT \'图标\'',
|
||||
'value' => 'int(10) unsigned NOT NULL COMMENT \'升级值要求\'',
|
||||
'note' => 'text NOT NULL COMMENT \'备注\'',
|
||||
'apply' => 'tinyint(1) unsigned NOT NULL COMMENT \'是否允许升级\'',
|
||||
'setting' => 'text NOT NULL COMMENT \'等级配置\'',
|
||||
'displayorder' => 'smallint(5) NOT NULL COMMENT \'排序\'',
|
||||
],
|
||||
'indexes' => [
|
||||
'PRIMARY KEY (`id`)',
|
||||
'KEY `value` (`value`)',
|
||||
'KEY `apply` (`apply`)',
|
||||
'KEY `gid` (`gid`)',
|
||||
'KEY `displayorder` (`displayorder`)',
|
||||
],
|
||||
],
|
||||
'member_group_index' => [
|
||||
'comment' => '用户组归属表',
|
||||
'drop' => false,
|
||||
'fields' => [
|
||||
'id' => 'int(10) unsigned NOT NULL AUTO_INCREMENT',
|
||||
'uid' => 'int(10) unsigned NOT NULL COMMENT \'用户id\'',
|
||||
'gid' => 'smallint(5) unsigned NOT NULL COMMENT \'用户组id\'',
|
||||
'lid' => 'smallint(5) unsigned NOT NULL COMMENT \'用户组等级id\'',
|
||||
'stime' => 'int(10) unsigned NOT NULL COMMENT \'开通时间\'',
|
||||
'etime' => 'int(10) unsigned NOT NULL COMMENT \'结束时间\'',
|
||||
],
|
||||
'indexes' => [
|
||||
'PRIMARY KEY (`id`)',
|
||||
'KEY `uid` (`uid`)',
|
||||
'KEY `lid` (`lid`)',
|
||||
'KEY `gid` (`gid`)',
|
||||
],
|
||||
],
|
||||
'member_group_verify' => [
|
||||
'comment' => '用户组申请审核',
|
||||
'drop' => false,
|
||||
'fields' => [
|
||||
'id' => 'int(10) unsigned NOT NULL AUTO_INCREMENT',
|
||||
'uid' => 'mediumint(8) unsigned NOT NULL DEFAULT \'0\'',
|
||||
'username' => 'varchar(50) NOT NULL COMMENT \'用户名\'',
|
||||
'gid' => 'smallint(5) unsigned NOT NULL COMMENT \'用户组id\'',
|
||||
'lid' => 'smallint(5) unsigned NOT NULL COMMENT \'用户组等级id\'',
|
||||
'status' => 'tinyint(1) unsigned NOT NULL COMMENT \'状态\'',
|
||||
'price' => 'decimal(10,2) DEFAULT NULL COMMENT \'已费用\'',
|
||||
'content' => 'text NOT NULL COMMENT \'自定义字段信息\'',
|
||||
'inputtime' => 'int(10) unsigned NOT NULL',
|
||||
],
|
||||
'indexes' => [
|
||||
'PRIMARY KEY (`id`)',
|
||||
'KEY `uid` (`uid`)',
|
||||
'KEY `status` (`status`)',
|
||||
'KEY `inputtime` (`inputtime`)',
|
||||
],
|
||||
],
|
||||
'member_setting' => [
|
||||
'comment' => '用户属性参数表',
|
||||
'drop' => false,
|
||||
'fields' => [
|
||||
'name' => 'varchar(50) NOT NULL',
|
||||
'value' => 'mediumtext NOT NULL',
|
||||
],
|
||||
'indexes' => [
|
||||
'PRIMARY KEY (`name`)',
|
||||
],
|
||||
],
|
||||
'member_menu' => [
|
||||
'comment' => '用户组菜单表',
|
||||
'drop' => false,
|
||||
'fields' => [
|
||||
'id' => 'smallint(5) unsigned NOT NULL AUTO_INCREMENT',
|
||||
'pid' => 'smallint(5) unsigned NOT NULL COMMENT \'上级菜单id\'',
|
||||
'name' => 'text NOT NULL COMMENT \'菜单语言名称\'',
|
||||
'uri' => 'varchar(255) DEFAULT NULL COMMENT \'uri字符串\'',
|
||||
'url' => 'varchar(255) DEFAULT NULL COMMENT \'外链地址\'',
|
||||
'mark' => 'varchar(255) DEFAULT NULL COMMENT \'菜单标识\'',
|
||||
'hidden' => 'tinyint(1) unsigned DEFAULT NULL COMMENT \'是否隐藏\'',
|
||||
'icon' => 'varchar(255) DEFAULT NULL COMMENT \'图标标示\'',
|
||||
'group' => 'text DEFAULT NULL COMMENT \'用户组划分\'',
|
||||
'site' => 'text DEFAULT NULL COMMENT \'站点划分\'',
|
||||
'client' => 'text DEFAULT NULL COMMENT \'终端划分\'',
|
||||
'displayorder' => 'int(5) DEFAULT NULL COMMENT \'排序值\'',
|
||||
],
|
||||
'indexes' => [
|
||||
'PRIMARY KEY (`id`)',
|
||||
'KEY `pid` (`pid`)',
|
||||
'KEY `mark` (`mark`)',
|
||||
'KEY `hidden` (`hidden`)',
|
||||
'KEY `uri` (`uri`)',
|
||||
'KEY `displayorder` (`displayorder`)',
|
||||
],
|
||||
],
|
||||
'member_oauth' => [
|
||||
'comment' => '快捷登录用户OAuth授权表',
|
||||
'drop' => false,
|
||||
'fields' => [
|
||||
'id' => 'int(10) NOT NULL AUTO_INCREMENT',
|
||||
'uid' => 'mediumint(8) unsigned NOT NULL COMMENT \'会员uid\'',
|
||||
'oid' => 'varchar(255) NOT NULL COMMENT \'OAuth返回id\'',
|
||||
'oauth' => 'varchar(255) NOT NULL COMMENT \'运营商\'',
|
||||
'avatar' => 'varchar(255) NOT NULL COMMENT \'头像\'',
|
||||
'unionid' => 'varchar(255) DEFAULT NULL COMMENT \'unionId\'',
|
||||
'nickname' => 'varchar(255) NOT NULL COMMENT \'昵称\'',
|
||||
'expire_at' => 'int(10) unsigned NOT NULL COMMENT \'绑定时间\'',
|
||||
'access_token' => 'varchar(255) DEFAULT NULL COMMENT \'保留\'',
|
||||
'refresh_token' => 'varchar(255) DEFAULT NULL COMMENT \'保留\'',
|
||||
],
|
||||
'indexes' => [
|
||||
'PRIMARY KEY (`id`)',
|
||||
'KEY `uid` (`uid`)',
|
||||
],
|
||||
],
|
||||
'member_verify' => [
|
||||
'comment' => '会员审核表',
|
||||
'drop' => false,
|
||||
'fields' => [
|
||||
'id' => 'smallint(5) unsigned NOT NULL AUTO_INCREMENT',
|
||||
'uid' => 'mediumint(8) unsigned NOT NULL COMMENT \'会员uid\'',
|
||||
'tid' => 'tinyint(1) unsigned NOT NULL COMMENT \'类别\'',
|
||||
'status' => 'tinyint(1) unsigned NOT NULL COMMENT \'状态\'',
|
||||
'content' => 'mediumtext NOT NULL COMMENT \'自定义字段信息\'',
|
||||
'result' => 'text NOT NULL COMMENT \'处理结果\'',
|
||||
'updatetime' => 'int(10) unsigned NOT NULL COMMENT \'处理时间\'',
|
||||
'inputtime' => 'int(10) unsigned NOT NULL COMMENT \'提交时间\'',
|
||||
],
|
||||
'indexes' => [
|
||||
'PRIMARY KEY (`id`)',
|
||||
'KEY `tid` (`tid`)',
|
||||
'KEY `uid` (`uid`)',
|
||||
'KEY `status` (`status`)',
|
||||
'KEY `inputtime` (`inputtime`)',
|
||||
],
|
||||
],
|
||||
],
|
||||
'seeds' => [
|
||||
['table' => 'member_group', 'data' => [
|
||||
'id' => 1,
|
||||
'name' => '注册用户',
|
||||
'price' => 0.00,
|
||||
'unit' => 0,
|
||||
'days' => 0,
|
||||
'apply' => 1,
|
||||
'register' => 1,
|
||||
'setting' => '{"level":{"auto":"0","unit":"0","price":"0"},"verify":"0"}',
|
||||
'displayorder' => 0,
|
||||
]],
|
||||
['table' => 'member_group_index', 'data' => [
|
||||
'id' => 1,
|
||||
'uid' => 1,
|
||||
'gid' => 1,
|
||||
'lid' => 0,
|
||||
'stime' => 0,
|
||||
'etime' => 0,
|
||||
]],
|
||||
['table' => 'member_setting', 'data' => [
|
||||
'name' => 'config',
|
||||
'value' => '{"edit_name":"1","edit_mobile":"1","logintime":"","verify_msg":"","pagesize":"","pagesize_mobile":"","pagesize_api":""}',
|
||||
]],
|
||||
['table' => 'member_setting', 'data' => [
|
||||
'name' => 'login',
|
||||
'value' => '{"code":"1"}',
|
||||
]],
|
||||
['table' => 'member_setting', 'data' => [
|
||||
'name' => 'register',
|
||||
'value' => '{"close":"0","groupid":"1","field":["username","email"],"cutname":"0","unprefix":"","code":"1","verify":"","preg":"","notallow":""}',
|
||||
]],
|
||||
['table' => 'member_setting', 'data' => [
|
||||
'name' => 'auth2',
|
||||
'value' => '{"1":{"public":{"home":{"show":"0","is_category":"0"},"form_public":[],"share_category_public":{"show":"1","add":"1","edit":"1","code":"1","verify":"1","exp":"","score":"","money":"","day_post":"","total_post":""},"category_public":[],"mform_public":"","form":null,"share_category":null,"category":null,"mform":null}}}',
|
||||
]],
|
||||
],
|
||||
]);
|
||||
if (empty($rt['code'])) {
|
||||
log_message('error', 'Member install_schema: '.($rt['msg'] ?? ''));
|
||||
return dr_return_data(0, dr_lang('安装失败').':'.($rt['msg'] ?? ''));
|
||||
}
|
||||
|
||||
\Phpcmf\Service::M('Menu')->db->resetDataCache();
|
||||
\Phpcmf\Service::M()->table('member_menu')->clear_all();
|
||||
|
||||
$menu = require $path.'Config/Menu.php';
|
||||
foreach ($menu['member'] as $mark => $top) {
|
||||
// 插入顶级菜单
|
||||
$mark = strlen($mark) > 2 ? $mark : '';
|
||||
$top_id = \Phpcmf\Service::M('Menu')->_add('member', 0, $top, $mark, true);
|
||||
// 插入链接菜单
|
||||
if ($top_id) {
|
||||
foreach ($top['link'] as $mark2 => $link) {
|
||||
\Phpcmf\Service::M('Menu')->_add('member', $top_id, $link);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,158 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* 菜单配置
|
||||
*/
|
||||
|
||||
|
||||
return [
|
||||
|
||||
'admin' => [
|
||||
|
||||
'member' => [
|
||||
'name' => '用户',
|
||||
'icon' => 'fa fa-user',
|
||||
'left' => [
|
||||
'member-list' => [
|
||||
'name' => '用户管理',
|
||||
'icon' => 'fa fa-user',
|
||||
'link' => [
|
||||
[
|
||||
'name' => '用户管理',
|
||||
'icon' => 'fa fa-user',
|
||||
'uri' => 'member/home/index',
|
||||
'displayorder' => '-1',
|
||||
],
|
||||
[
|
||||
'name' => '用户组管理',
|
||||
'icon' => 'fa fa-users',
|
||||
'uri' => 'member/group/index',
|
||||
'displayorder' => '-1',
|
||||
],
|
||||
[
|
||||
'name' => '授权账号',
|
||||
'icon' => 'fa fa-qq',
|
||||
'uri' => 'member/oauth/index',
|
||||
],
|
||||
[
|
||||
'name' => '用户菜单',
|
||||
'icon' => 'fa fa-list-alt',
|
||||
'uri' => 'member/menu/index',
|
||||
],
|
||||
]
|
||||
],
|
||||
|
||||
'member-sz' => [
|
||||
'name' => '用户设置',
|
||||
'icon' => 'fa fa-user',
|
||||
'link' => [
|
||||
[
|
||||
'name' => '用户设置',
|
||||
'icon' => 'fa fa-cog',
|
||||
'uri' => 'member/setting/index',
|
||||
],
|
||||
[
|
||||
'name' => '字段划分',
|
||||
'icon' => 'fa fa-code',
|
||||
'uri' => 'member/field/index',
|
||||
],
|
||||
[
|
||||
'name' => '通知设置',
|
||||
'icon' => 'fa fa-volume-up',
|
||||
'uri' => 'member/setting_notice/index',
|
||||
],
|
||||
[
|
||||
'name' => '用户权限',
|
||||
'icon' => 'fa fa-user',
|
||||
'uri' => 'member/auth/index',
|
||||
],
|
||||
]
|
||||
],
|
||||
'member-verify' => [
|
||||
'name' => '审核管理',
|
||||
'icon' => 'fa fa-edit',
|
||||
'link' => [
|
||||
[
|
||||
'name' => '注册审核',
|
||||
'icon' => 'fa fa-user',
|
||||
'uri' => 'member/verify/index',
|
||||
],
|
||||
[
|
||||
'name' => '申请审核',
|
||||
'icon' => 'fa fa-users',
|
||||
'uri' => 'member/apply/index',
|
||||
],
|
||||
[
|
||||
'name' => '资料审核',
|
||||
'icon' => 'fa fa-edit',
|
||||
'uri' => 'member/edit_verify/index',
|
||||
],
|
||||
[
|
||||
'name' => '头像审核',
|
||||
'icon' => 'fa fa-user-circle',
|
||||
'uri' => 'member/avatar_verify/index',
|
||||
],
|
||||
]
|
||||
],
|
||||
|
||||
],
|
||||
],
|
||||
|
||||
],
|
||||
|
||||
|
||||
'member' => [
|
||||
|
||||
'user' => [
|
||||
'name' => '账号管理',
|
||||
'icon' => 'fa fa-user',
|
||||
'link' => [
|
||||
[
|
||||
'name' => '资料修改',
|
||||
'icon' => 'fa fa-cog',
|
||||
'uri' => 'account/index',
|
||||
],
|
||||
[
|
||||
'name' => '头像设置',
|
||||
'icon' => 'fa fa-smile-o',
|
||||
'uri' => 'account/avatar',
|
||||
],
|
||||
[
|
||||
'name' => '手机认证',
|
||||
'icon' => 'fa fa-mobile',
|
||||
'uri' => 'account/mobile',
|
||||
],
|
||||
[
|
||||
'name' => '邮箱认证',
|
||||
'icon' => 'fa fa-envelope',
|
||||
'uri' => 'account/email',
|
||||
],
|
||||
[
|
||||
'name' => '修改密码',
|
||||
'icon' => 'fa fa-expeditedssl',
|
||||
'uri' => 'account/password',
|
||||
],
|
||||
[
|
||||
'name' => '账号绑定',
|
||||
'icon' => 'fa fa-qq',
|
||||
'uri' => 'account/oauth',
|
||||
],
|
||||
[
|
||||
'name' => '登录记录',
|
||||
'icon' => 'fa fa-calendar',
|
||||
'uri' => 'account/login',
|
||||
],
|
||||
],
|
||||
],
|
||||
|
||||
'content-module' => [
|
||||
'name' => '内容管理',
|
||||
'icon' => 'fa fa-th-large',
|
||||
'link' => [
|
||||
|
||||
],
|
||||
],
|
||||
|
||||
|
||||
],
|
||||
];
|
||||
@@ -0,0 +1,40 @@
|
||||
<?php
|
||||
// 自定义字段的支持函数
|
||||
// \Phpcmf\Service::M('field')
|
||||
|
||||
|
||||
// 初始化信息
|
||||
function myfield_init_member($relatedname, $relatedid) {
|
||||
return dr_return_data(1, 'ok', [
|
||||
'ismain' => 1,
|
||||
'name' => '用户信息字段',
|
||||
'backurl' => \Phpcmf\Service::L('Router')->url('member/field/index'), // 返回uri地址
|
||||
]);
|
||||
}
|
||||
function myfield_tablename_member($field, $siteid, $relatedname, $relatedid) {
|
||||
return 'member_data';
|
||||
}
|
||||
|
||||
// 执行sql
|
||||
function myfield_sql_member($sql, $ismain) {
|
||||
\Phpcmf\Service::M('field')->db->simpleQuery(str_replace('{tablename}', \Phpcmf\Service::M('field')->dbprefix('member_data'), $sql));
|
||||
\Phpcmf\Service::M('field')->_table_field[] = \Phpcmf\Service::M('field')->dbprefix('member_data');
|
||||
}
|
||||
// 字段是否存在
|
||||
function myfield_field_member($name) {
|
||||
// 保留
|
||||
if (in_array($name, ['role', 'uid', 'authid', 'adminid', 'tableid', 'group', 'groupid', 'levelid'])) {
|
||||
return 1;
|
||||
}
|
||||
// 主表
|
||||
$table = \Phpcmf\Service::M('field')->dbprefix('member_data');
|
||||
$rt = \Phpcmf\Service::M('field')->_field_exitsts('id', $name, $table, SITE_ID);
|
||||
if ($rt) {
|
||||
return 1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
// 更新缓存
|
||||
function myfield_cache_member() {
|
||||
\Phpcmf\Service::M('cache')->sync_cache('member'); // 自动更新缓存
|
||||
}
|
||||
@@ -0,0 +1,34 @@
|
||||
<?php
|
||||
/**
|
||||
* https://www.besyun.com
|
||||
* BESCMS
|
||||
* 本文件是框架系统文件,二次开发时不可以修改本文件
|
||||
**/
|
||||
|
||||
/**
|
||||
* 通知动作注册配置
|
||||
*
|
||||
* 动作字符 => 动作名称
|
||||
*
|
||||
**/
|
||||
|
||||
return [
|
||||
|
||||
'member_register' => '用户注册',
|
||||
'member_login' => '用户登录',
|
||||
'member_register_verify' => '用户注册审核完成',
|
||||
'member_edit_verify_1' => '资料审核通过',
|
||||
'member_edit_verify_0' => '资料审核被拒绝',
|
||||
'member_avatar_verify_1' => '头像审核通过',
|
||||
'member_avatar_verify_0' => '头像审核被拒绝',
|
||||
'member_edit_password' => '用户修改密码',
|
||||
'member_verify_group' => '审核用户组',
|
||||
'member_edit_group' => '用户组变更',
|
||||
'member_edit_level' => '用户组等级变更',
|
||||
|
||||
'module_content_delete' => '模块内容删除通知作者',
|
||||
|
||||
'module_content_verify_1' => '模块内容审核通过通知作者',
|
||||
'module_content_verify_0' => '模块内容审核被拒通知作者',
|
||||
|
||||
];
|
||||
@@ -0,0 +1,4 @@
|
||||
<?php
|
||||
|
||||
// 加载主程序的路由
|
||||
require COREPATH.'Config/Routes.php';
|
||||
@@ -0,0 +1,15 @@
|
||||
<?php
|
||||
$t = \Phpcmf\Service::M('table');
|
||||
$m = \Phpcmf\Service::M();
|
||||
foreach ([
|
||||
'member_login',
|
||||
'member_group',
|
||||
'member_level',
|
||||
'member_group_index',
|
||||
'member_group_verify',
|
||||
'member_menu',
|
||||
'member_oauth',
|
||||
'member_verify',
|
||||
] as $name) {
|
||||
$t->drop_table($m->dbprefix($name), true);
|
||||
}
|
||||
@@ -0,0 +1,167 @@
|
||||
<?php
|
||||
/**
|
||||
* 更新数据结构
|
||||
*/
|
||||
$prefix = \Phpcmf\Service::M()->prefix;
|
||||
$m = \Phpcmf\Service::M();
|
||||
$t = \Phpcmf\Service::M('table');
|
||||
|
||||
$table = $prefix.'member_setting';
|
||||
if (!$m->is_table_exists($table)) {
|
||||
$t->create_table(
|
||||
$table,
|
||||
[
|
||||
'name' => 'varchar(50) NOT NULL',
|
||||
'value' => 'mediumtext NOT NULL',
|
||||
],
|
||||
[
|
||||
'PRIMARY KEY (`name`)',
|
||||
],
|
||||
'用户属性参数表'
|
||||
);
|
||||
} else {
|
||||
if ($m->is_field_exists($table, 'id')) {
|
||||
// 处理旧版 id 字段:重建为 name 主键
|
||||
$settingQuery = $m->db->table('member_setting')->get();
|
||||
$data = $settingQuery ? $settingQuery->getResultArray() : [];
|
||||
$t->drop_table($table, true);
|
||||
$t->create_table(
|
||||
$table,
|
||||
[
|
||||
'name' => 'varchar(50) NOT NULL',
|
||||
'value' => 'mediumtext NOT NULL',
|
||||
],
|
||||
[
|
||||
'PRIMARY KEY (`name`)',
|
||||
],
|
||||
'用户属性参数表'
|
||||
);
|
||||
if ($data) {
|
||||
foreach ($data as $row) {
|
||||
$m->table('member_setting')->replace([
|
||||
'name' => $row['name'],
|
||||
'value' => $row['value'],
|
||||
]);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
$auth2Query = $m->db->table('member_setting')->where('name', 'auth2')->get();
|
||||
if (!$auth2Query || !$auth2Query->getRowArray()) {
|
||||
$m->table('member_setting')->replace([
|
||||
'name' => 'auth2',
|
||||
'value' => '{"1":{"public":{"home":{"show":"0","is_category":"0"},"form_public":[],"share_category_public":{"show":"1","add":"1","edit":"1","code":"1","verify":"1","exp":"","score":"","money":"","day_post":"","total_post":""},"category_public":[],"mform_public":"","form":null,"share_category":null,"category":null,"mform":null}}}',
|
||||
]);
|
||||
}
|
||||
|
||||
$table = $prefix.'member_paylog';
|
||||
if ($m->is_table_exists($table)) {
|
||||
if (!$m->is_field_exists($table, 'site')) {
|
||||
$t->add_field($table, 'site', 'INT(10)', 'NOT NULL', '站点');
|
||||
}
|
||||
if ($m->is_field_exists($table, 'username')) {
|
||||
$t->drop_field($table, 'username');
|
||||
}
|
||||
if ($m->is_field_exists($table, 'tousername')) {
|
||||
$t->drop_field($table, 'tousername');
|
||||
}
|
||||
}
|
||||
|
||||
$table = $prefix.'member_verify';
|
||||
if (!$m->is_table_exists($table)) {
|
||||
$t->create_table(
|
||||
$table,
|
||||
[
|
||||
'id' => 'smallint(5) unsigned NOT NULL AUTO_INCREMENT',
|
||||
'uid' => 'mediumint(8) unsigned NOT NULL COMMENT \'会员uid\'',
|
||||
'tid' => 'tinyint(1) unsigned NOT NULL COMMENT \'类别\'',
|
||||
'status' => 'tinyint(1) unsigned NOT NULL COMMENT \'状态\'',
|
||||
'content' => 'mediumtext NOT NULL COMMENT \'自定义字段信息\'',
|
||||
'result' => 'text NOT NULL COMMENT \'处理结果\'',
|
||||
'updatetime' => 'int(10) unsigned NOT NULL COMMENT \'处理时间\'',
|
||||
'inputtime' => 'int(10) unsigned NOT NULL COMMENT \'提交时间\'',
|
||||
],
|
||||
[
|
||||
'PRIMARY KEY (`id`)',
|
||||
'KEY `tid` (`tid`)',
|
||||
'KEY `uid` (`uid`)',
|
||||
'KEY `status` (`status`)',
|
||||
'KEY `inputtime` (`inputtime`)',
|
||||
],
|
||||
'会员审核表'
|
||||
);
|
||||
}
|
||||
if ($m->is_table_exists($table) && !$m->is_field_exists($table, 'tid')) {
|
||||
$t->add_field($table, 'tid', 'int(1)', 'DEFAULT NULL', '类型');
|
||||
}
|
||||
|
||||
$table = $prefix.'member_group_verify';
|
||||
if ($m->is_table_exists($table) && !$m->is_field_exists($table, 'price')) {
|
||||
$t->add_field($table, 'price', 'decimal(10,2)', 'DEFAULT NULL', '已费用');
|
||||
}
|
||||
|
||||
$table = $prefix.'member_scorelog';
|
||||
if ($m->is_table_exists($table) && !$m->is_field_exists($table, 'username')) {
|
||||
$t->add_field($table, 'username', 'VARCHAR(100)', 'DEFAULT NULL', '');
|
||||
}
|
||||
|
||||
$table = $prefix.'member_notice';
|
||||
if ($m->is_table_exists($table) && !$m->is_field_exists($table, 'mark')) {
|
||||
$t->add_field($table, 'mark', 'VARCHAR(100)', 'DEFAULT NULL', '');
|
||||
$t->edit_field($prefix.'member_notice', 'type', 'tinyint(2) unsigned', 'NOT NULL', '类型');
|
||||
}
|
||||
|
||||
$table = $prefix.'member_explog';
|
||||
if ($m->is_table_exists($table) && !$m->is_field_exists($table, 'username')) {
|
||||
$t->add_field($table, 'username', 'VARCHAR(100)', 'DEFAULT NULL', '');
|
||||
}
|
||||
|
||||
$table = $prefix.'member_oauth';
|
||||
if ($m->is_table_exists($table) && !$m->is_field_exists($table, 'unionid')) {
|
||||
$t->add_field($table, 'unionid', 'VARCHAR(100)', 'DEFAULT NULL', '');
|
||||
}
|
||||
|
||||
$table = $prefix.'member_menu';
|
||||
if ($m->is_table_exists($table) && !$m->is_field_exists($table, 'site')) {
|
||||
$t->add_field($table, 'site', 'TEXT', 'NOT NULL', '');
|
||||
}
|
||||
if ($m->is_table_exists($table) && !$m->is_field_exists($table, 'client')) {
|
||||
$t->add_field($table, 'client', 'TEXT', 'DEFAULT NULL', '');
|
||||
}
|
||||
|
||||
$table = $prefix.'member_level';
|
||||
if (!$m->is_table_exists($table)) {
|
||||
$rt = $t->create_table(
|
||||
$table,
|
||||
[
|
||||
'id' => 'smallint(5) unsigned NOT NULL AUTO_INCREMENT',
|
||||
'gid' => 'smallint(5) unsigned NOT NULL COMMENT \'用户id\'',
|
||||
'name' => 'varchar(255) NOT NULL COMMENT \'名称\'',
|
||||
'stars' => 'int(10) NOT NULL COMMENT \'图标\'',
|
||||
'value' => 'int(10) unsigned NOT NULL COMMENT \'升级值要求\'',
|
||||
'note' => 'text NOT NULL COMMENT \'备注\'',
|
||||
'apply' => 'tinyint(1) unsigned NOT NULL COMMENT \'是否允许升级\'',
|
||||
'setting' => 'text NOT NULL COMMENT \'等级配置\'',
|
||||
'displayorder' => 'smallint(5) NOT NULL COMMENT \'排序\'',
|
||||
],
|
||||
[
|
||||
'PRIMARY KEY (`id`)',
|
||||
'KEY `value` (`value`)',
|
||||
'KEY `apply` (`apply`)',
|
||||
'KEY `gid` (`gid`)',
|
||||
'KEY `displayorder` (`displayorder`)',
|
||||
],
|
||||
'用户组级别表'
|
||||
);
|
||||
if (empty($rt['code'])) {
|
||||
log_message('error', 'Member Update create member_level failed: '.($rt['msg'] ?? ''));
|
||||
}
|
||||
} else {
|
||||
$t->edit_field($table, 'stars', 'int(10) unsigned', 'NOT NULL', '图标');
|
||||
if (!$m->is_field_exists($table, 'setting')) {
|
||||
$t->add_field($table, 'setting', 'TEXT', 'NOT NULL', '');
|
||||
}
|
||||
if (!$m->is_field_exists($table, 'displayorder')) {
|
||||
$t->add_field($table, 'displayorder', 'INT(10)', 'DEFAULT NULL', '排序');
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
<?php
|
||||
|
||||
return [
|
||||
|
||||
'id' => '784',
|
||||
'vip' => '',
|
||||
'cms' => '4.7.3',
|
||||
'version' => '3.0',
|
||||
'license' => '375C71349B295FBE2DCDCA9206F20A1703',
|
||||
'updatetime' => '2026-07-30 14:12:32',
|
||||
'downtime' => '2026-08-08 00:54:28',
|
||||
|
||||
];
|
||||
@@ -0,0 +1,15 @@
|
||||
<?php
|
||||
/**
|
||||
* 示例文件
|
||||
* 变量介绍
|
||||
* $name 字段英文名称
|
||||
* $field 字段信息(数组)
|
||||
* $value 当前字段的值
|
||||
* \Phpcmf\Service::C() 表示控制器方法
|
||||
* \Phpcmf\Service::M() 表示模型方法
|
||||
* 表单的name值格式是:data[$name]
|
||||
*/
|
||||
|
||||
$avatar_url = dr_member_verify_avatar_url($value);
|
||||
|
||||
$code = '<label><span href="javascript:;" class="thumbnail"><img src="'.$avatar_url.'" style="height: 180px; width: 100%; display: block;"> </span></label>'; // 最终输出的代码
|
||||
Reference in New Issue
Block a user