Files

187 lines
8.0 KiB
PHP

<?php namespace Phpcmf\Library\Member;
class Member {
// phpcmf初始化
public function init($ci) {
// 开启session
$ci->session();
// 登录状态验证
if (!$ci->member && !in_array(\Phpcmf\Service::L('Router')->class, ['register', 'login', 'api', 'pay'])) {
if (APP_DIR && dr_is_module(APP_DIR)
&& \Phpcmf\Service::L('Router')->class == 'home' && \Phpcmf\Service::L('Router')->method == 'add') {
// 游客发布权限
} else {
// 会话超时,请重新登录
if (IS_API_HTTP) {
$ci->_json(0, dr_lang('无法获取到登录用户信息'));
} elseif (method_exists($ci, \Phpcmf\Service::L('Router')->method)) {
\Phpcmf\Service::L('Router')->go_member_login(dr_now_url());
} else {
$ci->goto_404_page('无法识别的控制器');
}
}
}
if ($ci->member && \Phpcmf\Service::L('Router')->class != 'api'
&& !$ci->member['regip'] && SYS_TIME - $ci->member['regtime'] > 100) {
//补全注册ip
$ci->member['regip'] = \Phpcmf\Service::L('input')->ip_info();
\Phpcmf\Service::M()->table('member')->update($ci->member['id'], [
'regip' => $ci->member['regip']
]);
}
\Phpcmf\Service::V()->assign($this->_member_seo(\Phpcmf\Service::L('cache')->get('menu-member')));
}
private function _member_seo($menu) {
$seo = [
'menu' => $menu['url'],
'page_bar' => '<div class="page-bar">
<ul class="page-breadcrumb">
<li>
<i class="fa fa-home"></i>
<a href="'.dr_member_url('/').'">'.dr_lang('用户中心').'</a>
<i class="fa fa-angle-right"></i>
</li>
{value}
</ul>
</div>',
];
// 自定义菜单显示
if (function_exists('dr_my_member_menu')) {
$seo['menu'] = dr_my_member_menu($seo['menu']);
}
list($uri1, $uri2) = \Phpcmf\Service::L('router')->member_uri();
$uri = isset($menu['uri'][$uri1]) ? $uri1 : (isset($menu['uri'][$uri2]) ? $uri2 : '');
if (!$uri && APP_DIR && APP_DIR != 'member') {
// 来自内容模块的菜单全部归结于内容下
$uri = APP_DIR.'/home/index';
}
$seo['mymenu'] = []; // 当前菜单id和pid
if ($menu['uri'][$uri]) {
$seo['page_bar'] = str_replace('{value}', '
<li>
<i class="'.dr_icon($menu['uri'][$uri]['picon']).'"></i>
<span>'.dr_lang($menu['uri'][$uri]['pname']).'</span>
<i class="fa fa-angle-right"></i>
</li>
<li>
<i class="'.dr_icon($menu['uri'][$uri]['icon']).'"></i>
<a href="'.dr_member_url($uri).'">'.dr_lang($menu['uri'][$uri]['name']).'</a>
</li>
', $seo['page_bar']);
$seo['mymenu'] = [$menu['uri'][$uri]['id'], $menu['uri'][$uri]['pid']]; // 当前菜单id和pid
$seo['meta_name'] = $menu['uri'][$uri]['name'];
$seo['meta_title'] = $menu['uri'][$uri]['name'].SITE_SEOJOIN.$menu['uri'][$uri]['pname'].SITE_SEOJOIN.dr_lang('用户中心');
} else {
$seo['meta_title'] = $seo['meta_name'] = dr_lang('用户中心');
}
$seo['page_bar'] = str_replace('{value}', '', $seo['page_bar']);
$seo['meta_keywords'] = \Phpcmf\Service::C()->get_cache('site', SITE_ID, 'seo', 'SITE_KEYWORDS');
$seo['meta_description'] = \Phpcmf\Service::C()->get_cache('site', SITE_ID, 'seo', 'SITE_DESCRIPTION');
return $seo;
}
// 用户组是否过期
public function group_timeout($ci) {
if ($ci->member) {
// 用户组是否过期
if ($ci->member['group_timeout'] && dr_member_group_is_timeout()) {
$msg = dr_lang('您的用户组(%s)于%s过期', $ci->member_cache['group'][$ci->member['group_timeout']]['name'], dr_date($ci->member['group_timeout_time']));
$rt = \Phpcmf\Hooks::trigger_callback('member_group_timeout', $ci->member);
if ($rt && $rt['code']) {
// 自定义执行段
} else {
if ($ci->member_cache['group'][$ci->member['group_timeout']]['setting']['outtype'] == 2) {
// 跳转指定页面
$url = $ci->member_cache['group'][$ci->member['group_timeout']]['setting']['out_url'];
if (strpos(FC_NOW_URL, $url) !== false) {
// 表示本身页面
} else {
$ci->_msg(0, $msg, $url);
}
} elseif ($ci->member_cache['group'][$ci->member['group_timeout']]['setting']['outtype'] == 1) {
// 跳转续费页面
$ci->_msg(0, $msg, dr_member_url('apply/level', ['gid' => $ci->member['group_timeout']]));
}
}
}
// 判断用户的权限
if (!in_array(\Phpcmf\Service::L('Router')->class, ['register', 'login', 'api'])) {
$this->member_option($ci);
}
}
}
/**
* 后台登录判断
*/
public function member_option($ci) {
if (!IS_MEMBER) {
return;
}
// 有用户组来获取最终的强制权限
$ci->member_cache['config']['complete'] = $ci->member_cache['config']['mobile'] = $ci->member_cache['config']['avatar'] = 0;
// 强制完善资料
if (!$ci->member_cache['config']['complete']) {
$ci->member_cache['config']['complete'] = (int)\Phpcmf\Service::L('member_auth', 'member')->member_auth('complete', $ci->member);
}
// 强制手机认证
if (!$ci->member_cache['config']['mobile']) {
$ci->member_cache['config']['mobile'] = (int)\Phpcmf\Service::L('member_auth', 'member')->member_auth('mobile', $ci->member);
}
// 强制email认证
if (!$ci->member_cache['config']['email']) {
$ci->member_cache['config']['email'] = (int)\Phpcmf\Service::L('member_auth', 'member')->member_auth('email', $ci->member);
}
// 强制头像上传
if (!$ci->member_cache['config']['avatar']) {
$ci->member_cache['config']['avatar'] = (int)\Phpcmf\Service::L('member_auth', 'member')->member_auth('avatar', $ci->member);
}
if (!$ci->member['is_verify']) {
// 审核提醒
$ci->_msg(0, dr_lang('账号还没有通过审核'), dr_member_url('api/verify'));
} elseif ($ci->member_cache['config']['complete']
&& !$ci->member['is_complete']
&&\Phpcmf\Service::L('Router')->class != 'account') {
// 强制完善资料
$ci->_msg(0, dr_lang('账号必须完善资料'), dr_member_url('account/index'));
} elseif ($ci->member_cache['config']['mobile']
&& !$ci->member['is_mobile']
&&\Phpcmf\Service::L('Router')->class != 'account') {
// 强制手机认证
$ci->_msg(0, dr_lang('账号必须手机认证'), dr_member_url('account/mobile'));
} elseif ($ci->member_cache['config']['email']
&& !$ci->member['is_email']
&&\Phpcmf\Service::L('Router')->class != 'account') {
// 强制邮箱认证
$ci->_msg(0, dr_lang('账号必须邮箱认证'), dr_member_url('account/email'));
} elseif ($ci->member_cache['config']['avatar']
&& !$ci->member['is_avatar']
&&\Phpcmf\Service::L('Router')->class != 'account') {
// 强制头像上传
$ci->_msg(0, dr_lang('账号必须上传头像'), dr_member_url('account/avatar'));
}
}
}