- <?php
- /**
- * 會員前臺管理中心、賬號管理、收藏操作類
- */
- defined('IN_PHPCMS') or exit('No permission resources.');
- pc_base::load_app_class('foreground');//index控制器extends此類文件
- pc_base::load_sys_class('format', '', 0);
- pc_base::load_sys_class('form', '', 0);//表單生成類
- class index extends foreground {
- private $times_db;//主要用來操作會員登錄錯誤次數表:v9_times
- function __construct() {
- parent::__construct();
- //如:Mozilla/5.0 (Windows NT 5.1; rv:15.0) Gecko/20100101 Firefox/15.0.1
- $this->http_user_agent = $_SERVER['HTTP_USER_AGENT'];
- }
- //會員中心首頁
- public function init() {//會員登錄成功后才會進入init方法,就member的會員管理中心的默認頁面為init所對應的頁面
- $memberinfo = $this->memberinfo;//會員信息:來自于phpcms/modules/member/classes/foreground.class.php文件
- //初始化phpsso,主要用來返回接口地址:'phpsso_api_url' => 'http://zhencms.com/phpsso_server'
- $phpsso_api_url = $this->_init_phpsso();
- //獲取頭像數組
- $avatar = $this->client->ps_getavatar($this->memberinfo['phpssouid']);
- //會員組信息
- $grouplist = getcache('grouplist');
- //會員組名稱
- $memberinfo['groupname'] = $grouplist[$memberinfo[groupid]]['name'];
- //會員中心首頁
- include template('member', 'index');
- }
- public function register() {
- //初始化session,加載session_mysql.class.php文件,默認情況下會初始化一個實例
- $this->_session_start();
- //加載用戶模塊配置,如:注冊協議等,對應 【后臺】-》【用戶】-》【會員模塊配置】的設置
- $member_setting = getcache('member_setting');
- if(!$member_setting['allowregister']) {//是否允許注冊
- //返回禁止注冊的提示信息
- showmessage(L('deny_register'), 'index.php?m=member&c=index&a=login');
- }
- //獲取用戶siteid
- $siteid = isset($_REQUEST['siteid']) && trim($_REQUEST['siteid']) ? intval($_REQUEST['siteid']) : 1;
- //定義站點id常量
- if (!defined('SITEID')) {
- define('SITEID', $siteid);
- }
- header("Cache-control: private");
- //點擊【注冊】按鈕
- if(isset($_POST['dosubmit'])) {
- if (emptyempty($_SESSION['connectid']) && $_SESSION['code'] != strtolower($_POST['code'])) {
- showmessage(L('code_error'));
- }
- //注冊信息
- $userinfo = array();
- //生成一個隨機字符串
- $userinfo['encrypt'] = create_randomstr(6);
- //用戶名
- $userinfo['username'] = (isset($_POST['username']) && is_username($_POST['username'])) ? $_POST['username'] : exit('0');
- //昵稱
- $userinfo['nickname'] = (isset($_POST['nickname']) && is_username($_POST['nickname'])) ? $_POST['nickname'] : '';
- $userinfo['email'] = (isset($_POST['email']) && is_email($_POST['email'])) ? $_POST['email'] : exit('0');
- //密碼
- $userinfo['password'] = isset($_POST['password']) ? $_POST['password'] : exit('0');
- $userinfo['email'] = (isset($_POST['email']) && is_email($_POST['email'])) ? $_POST['email'] : exit('0');
- //會員模型id,會存儲在v9_model模型表中
- $userinfo['modelid'] = isset($_POST['modelid']) ? intval($_POST['modelid']) : 10;
- //注冊ip
- $userinfo['regip'] = ip();
- //默認積分
- $userinfo['point'] = $member_setting['defualtpoint'] ? $member_setting['defualtpoint'] : 0;
- //默認金錢總額
- $userinfo['amount'] = $member_setting['defualtamount'] ? $member_setting['defualtamount'] : 0;
- //注冊時間
- $userinfo['regdate'] = $userinfo['lastdate'] = SYS_TIME;
- //站點
- $userinfo['siteid'] = $siteid;
- $userinfo['connectid'] = isset($_SESSION['connectid']) ? $_SESSION['connectid'] : '';
- $userinfo['from'] = isset($_SESSION['from']) ? $_SESSION['from'] : '';
- unset($_SESSION['connectid'], $_SESSION['from']);
- if($member_setting['enablemailcheck']) { //是否需要郵件驗證
- $userinfo['groupid'] = 7; //郵件認證用戶組
- } elseif($member_setting['registerverify']) { //是否需要管理員審核,默認為否
- $userinfo['modelinfo'] = isset($_POST['info']) ? array2string($_POST['info']) : '';
- $this->verify_db = pc_base::load_model('member_verify_model');
- unset($userinfo['lastdate'],$userinfo['connectid'],$userinfo['from']);
- $this->verify_db->insert($userinfo);
- showmessage(L('operation_success'), 'index.php?m=member&c=index&a=register&t=3');
- } else {
- //查看當前模型是否開啟了短信驗證功能,加載:model_field_10.cache.php會員模型緩存文件
- $model_field_cache = getcache('model_field_'.$userinfo['modelid'],'model');
- //手機號,默認是不存在的
- if(isset($model_field_cache['mobile']) && $model_field_cache['mobile']['disabled']==0) {
- $mobile = $_POST['info']['mobile'];
- if(!preg_match('/^1([0-9]{10})/',$mobile)) showmessage(L('input_right_mobile'));
- $sms_report_db = pc_base::load_model('sms_report_model');
- $posttime = SYS_TIME-300;
- $where = "`mobile`='$mobile' AND `posttime`>'$posttime'";
- $r = $sms_report_db->get_one($where);
- if(!$r || $r['id_code']!=$_POST['mobile_verify']) showmessage(L('error_sms_code'));
- }
- //會員組
- $userinfo['groupid'] = $this->_get_usergroup_bypoint($userinfo['point']);
- }
- //使用phpsso的情況
- if(pc_base::load_config('system', 'phpsso')) {
- //主要用來返回接口地址:'phpsso_api_url' => 'http://zhencms.com/phpsso_server'
- $this->_init_phpsso();
- //同步注冊,如果注冊成功,返回會員id
- $status = $this->client->ps_member_register($userinfo['username'], $userinfo['password'], $userinfo['email'], $userinfo['regip'], $userinfo['encrypt']); //Vevb.com
- if($status > 0) {
- $userinfo['phpssouid'] = $status;//會員id
- //傳入phpsso為明文密碼,加密后存入phpcms_v9
- $password = $userinfo['password'];//密碼
- //password函數:return $pwd['password'] = md5(md5(trim($password)).$pwd['encrypt']);
- //數據庫中會員密碼的組成:兩次md5加密+隨即字符串
- $userinfo['password'] = password($userinfo['password'], $userinfo['encrypt']);
- $userid = $this->db->insert($userinfo, 1);//插入v9_member會員表信息
- if($member_setting['choosemodel']) { //如果開啟注冊時選擇模型
- //通過模型獲取會員信息
- //$model_cache = getcache('member_model', 'commons');//獲取member_model.cache.php會員模型緩存文件
- //$this->db->table_name = $this->db_pre.$model_cache[$this->modelid]['tablename'];//會員模型字段表:v9_member_detail
- require_once CACHE_MODEL_PATH.'member_input.class.php';
- require_once CACHE_MODEL_PATH.'member_update.class.php';
- $member_input = new member_input($userinfo['modelid']);//默認情況下會員模型id為10
- $user_model_info = $member_input->get($_POST['info']);//模型字段的值一般都放在info數組中
- $user_model_info['userid'] = $userid;
- //插入會員模型數據
- $this->db->set_model($userinfo['modelid']);
- $this->db->insert($user_model_info);//插入會員模型表:v9_member_detail數據
- }
- if($userid > 0) {
- //執行登陸操作
- if(!$cookietime) $get_cookietime = param::get_cookie('cookietime');//是否保存登錄信息
- $_cookietime = $cookietime ? intval($cookietime) : ($get_cookietime ? $get_cookietime : 0);
- $cookietime = $_cookietime ? TIME + $_cookietime : 0;
- //郵件認證用戶組
- if($userinfo['groupid'] == 7) {
- //設置cookie信息
- param::set_cookie('_username', $userinfo['username'], $cookietime);
- param::set_cookie('email', $userinfo['email'], $cookietime);
- } else {
- //設置cookie信息
- //'auth_key' => '4s0f9TsT8Y2sHEXMrqnB', //密鑰
- $phpcms_auth_key = md5(pc_base::load_config('system', 'auth_key').$this->http_user_agent);
- $phpcms_auth = sys_auth($userid."/t".$userinfo['password'], 'ENCODE', $phpcms_auth_key);
- param::set_cookie('auth', $phpcms_auth, $cookietime);
- param::set_cookie('_userid', $userid, $cookietime);
- param::set_cookie('_username', $userinfo['username'], $cookietime);
- param::set_cookie('_nickname', $userinfo['nickname'], $cookietime);
- param::set_cookie('_groupid', $userinfo['groupid'], $cookietime);
- param::set_cookie('cookietime', $_cookietime, $cookietime);
- }
- }
- //如果需要郵箱認證
- if($member_setting['enablemailcheck']) {
- pc_base::load_sys_func('mail');
- $phpcms_auth_key = md5(pc_base::load_config('system', 'auth_key'));
- $code = sys_auth($userid.'|'.$phpcms_auth_key, 'ENCODE', $phpcms_auth_key);
- $url = APP_PATH."index.php?m=member&c=index&a=register&code=$code&verify=1";
- $message = $member_setting['registerverifymessage'];
- $message = str_replace(array('{click}','{url}','{username}','{email}','{password}'), array('<a href="'.$url.'">'.L('please_click').'</a>',$url,$userinfo['username'],$userinfo['email'],$password), $message);
- sendmail($userinfo['email'], L('reg_verify_email'), $message);
- //設置當前注冊賬號COOKIE,為第二步重發郵件所用
- param::set_cookie('_regusername', $userinfo['username'], $cookietime);
- param::set_cookie('_reguserid', $userid, $cookietime);
- param::set_cookie('_reguseruid', $userinfo['phpssouid'], $cookietime);
- showmessage(L('operation_success'), 'index.php?m=member&c=index&a=register&t=2');
- } else {
- //如果不需要郵箱認證、直接登錄其他應用
- $synloginstr = $this->client->ps_member_synlogin($userinfo['phpssouid']);
- //操作成功提示信息
- showmessage(L('operation_success').$synloginstr, 'index.php?m=member&c=index&a=init');
- }
- }
- } else {//不使用phpsso的情況
- showmessage(L('enable_register').L('enable_phpsso'), 'index.php?m=member&c=index&a=login');
- }
- //操作失敗的提示信息
- showmessage(L('operation_failure'), HTTP_REFERER);
- //注冊完畢
- } else {
- if(!pc_base::load_config('system', 'phpsso')) {
- showmessage(L('enable_register').L('enable_phpsso'), 'index.php?m=member&c=index&a=login');
- }
- if(!emptyempty($_GET['verify'])) {
- $code = isset($_GET['code']) ? trim($_GET['code']) : showmessage(L('operation_failure'), 'index.php?m=member&c=index');
- $phpcms_auth_key = md5(pc_base::load_config('system', 'auth_key'));
- $code_res = sys_auth($code, 'DECODE', $phpcms_auth_key);
- $code_arr = explode('|', $code_res);
- $userid = isset($code_arr[0]) ? $code_arr[0] : '';
- $userid = is_numeric($userid) ? $userid : showmessage(L('operation_failure'), 'index.php?m=member&c=index');
- $this->db->update(array('groupid'=>$this->_get_usergroup_bypoint()), array('userid'=>$userid));
- showmessage(L('operation_success'), 'index.php?m=member&c=index');
- } elseif(!emptyempty($_GET['protocol'])) {
- //協議頁面
- include template('member', 'protocol');
- } else {
- //過濾非當前站點會員模型
- $modellist = getcache('member_model', 'commons');
- foreach($modellist as $k=>$v) {
- if($v['siteid']!=$siteid || $v['disabled']) {
- unset($modellist[$k]);
- }
- }
- if(emptyempty($modellist)) {//當前站點下所有的會員模型
- //當前站點不存在會員模型的提示信息
- showmessage(L('site_have_no_model').L('deny_register'), HTTP_REFERER);
- }
- //是否開啟選擇會員模型選項
- if($member_setting['choosemodel']) {
- $first_model = array_pop(array_reverse($modellist));
- $modelid = isset($_GET['modelid']) && in_array($_GET['modelid'], array_keys($modellist)) ? intval($_GET['modelid']) : $first_model['modelid'];
- if(array_key_exists($modelid, $modellist)) {
- //獲取會員模型表單
- require CACHE_MODEL_PATH.'member_form.class.php';
- $member_form = new member_form($modelid);
- $this->db->set_model($modelid);
- $forminfos = $forminfos_arr = $member_form->get();
- //萬能字段過濾
- foreach($forminfos as $field=>$info) {
- if($info['isomnipotent']) {
- unset($forminfos[$field]);
- } else {
- if($info['formtype']=='omnipotent') {
- foreach($forminfos_arr as $_fm=>$_fm_value) {
- if($_fm_value['isomnipotent']) {
- $info['form'] = str_replace('{'.$_fm.'}',$_fm_value['form'], $info['form']);
- }
- }
- $forminfos[$field]['form'] = $info['form'];
- }
- }
- }
- $formValidator = $member_form->formValidator;
- }
- }
- $description = $modellist[$modelid]['description'];
- //注冊頁面
- include template('member', 'register');
- }
- }//注冊頁面結束
- }
- /*
- * 測試郵件配置
- */
- public function send_newmail() {
- $_username = param::get_cookie('_regusername');
- $_userid = param::get_cookie('_reguserid');
- $_ssouid = param::get_cookie('_reguseruid');
- $newemail = $_GET['newemail'];
- if($newemail==''){//郵箱為空,直接返回錯誤
- return '2';
- }
- $this->_init_phpsso();
- $status = $this->client->ps_checkemail($newemail);
- if($status=='-5'){//郵箱被占用
- exit('-1');
- }
- if ($status==-1) {
- $status = $this->client->ps_get_member_info($newemail, 3);
- if($status) {
- $status = unserialize($status); //接口返回序列化,進行判斷
- if (!isset($status['uid']) || $status['uid'] != intval($_ssouid)) {
- exit('-1');
- }
- } else {
- exit('-1');
- }
- }
- //驗證郵箱格式
- pc_base::load_sys_func('mail');
- $phpcms_auth_key = md5(pc_base::load_config('system', 'auth_key'));
- $code = sys_auth($_userid.'|'.$phpcms_auth_key, 'ENCODE', $phpcms_auth_key);
- $url = APP_PATH."index.php?m=member&c=index&a=register&code=$code&verify=1";
- //讀取配置獲取驗證信息
- $member_setting = getcache('member_setting');
- $message = $member_setting['registerverifymessage'];
- $message = str_replace(array('{click}','{url}','{username}','{email}','{password}'), array('<a href="'.$url.'">'.L('please_click').'</a>',$url,$_username,$newemail,$password), $message);
- if(sendmail($newemail, L('reg_verify_email'), $message)){
- //更新新的郵箱,用來驗證
- $this->db->update(array('email'=>$newemail), array('userid'=>$_userid));
- $this->client->ps_member_edit($_username, $newemail, '', '', $_ssouid);
- $return = '1';
- }else{
- $return = '2';
- }
- echo $return;
- }
- public function account_manage() {
- $memberinfo = $this->memberinfo;
- //初始化phpsso
- $phpsso_api_url = $this->_init_phpsso();
- //獲取頭像數組
- $avatar = $this->client->ps_getavatar($this->memberinfo['phpssouid']);
- $grouplist = getcache('grouplist');
- $member_model = getcache('member_model', 'commons');
- //獲取用戶模型數據
- $this->db->set_model($this->memberinfo['modelid']);
- $member_modelinfo_arr = $this->db->get_one(array('userid'=>$this->memberinfo['userid']));
- $model_info = getcache('model_field_'.$this->memberinfo['modelid'], 'model');
- foreach($model_info as $k=>$v) {
- if($v['formtype'] == 'omnipotent') continue;
- if($v['formtype'] == 'image') {
- $member_modelinfo[$v['name']] = "<a href='$member_modelinfo_arr[$k]' target='_blank'><img src='$member_modelinfo_arr[$k]' height='40' widht='40' onerror=/"this.src='$phpsso_api_url/statics/images/member/nophoto.gif'/"></a>";
- } elseif($v['formtype'] == 'datetime' && $v['fieldtype'] == 'int') { //如果為日期字段
- $member_modelinfo[$v['name']] = format::date($member_modelinfo_arr[$k], $v['format'] == 'Y-m-d H:i:s' ? 1 : 0);
- } elseif($v['formtype'] == 'images') {
- $tmp = string2array($member_modelinfo_arr[$k]);
- $member_modelinfo[$v['name']] = '';
- if(is_array($tmp)) {
- foreach ($tmp as $tv) {
- $member_modelinfo[$v['name']] .= " <a href='$tv[url]' target='_blank'><img src='$tv[url]' height='40' widht='40' onerror=/"this.src='$phpsso_api_url/statics/images/member/nophoto.gif'/"></a>";
- }
- unset($tmp);
- }
- } elseif($v['formtype'] == 'box') { //box字段,獲取字段名稱和值的數組
- $tmp = explode("/n",$v['options']);
- if(is_array($tmp)) {
- foreach($tmp as $boxv) {
- $box_tmp_arr = explode('|', trim($boxv));
- if(is_array($box_tmp_arr) && isset($box_tmp_arr[1]) && isset($box_tmp_arr[0])) {
- $box_tmp[$box_tmp_arr[1]] = $box_tmp_arr[0];
- $tmp_key = intval($member_modelinfo_arr[$k]);
- }
- }
- }
- if(isset($box_tmp[$tmp_key])) {
- $member_modelinfo[$v['name']] = $box_tmp[$tmp_key];
- } else {
- $member_modelinfo[$v['name']] = $member_modelinfo_arr[$k];
- }
- unset($tmp, $tmp_key, $box_tmp, $box_tmp_arr);
- } elseif($v['formtype'] == 'linkage') { //如果為聯動菜單
- $tmp = string2array($v['setting']);
- $tmpid = $tmp['linkageid'];
- $linkagelist = getcache($tmpid, 'linkage');
- $fullname = $this->_get_linkage_fullname($member_modelinfo_arr[$k], $linkagelist);
- $member_modelinfo[$v['name']] = substr($fullname, 0, -1);
- unset($tmp, $tmpid, $linkagelist, $fullname);
- } else {
- $member_modelinfo[$v['name']] = $member_modelinfo_arr[$k];
- }
- }
- include template('member', 'account_manage');
- }
- public function account_manage_avatar() {
- $memberinfo = $this->memberinfo;
- //初始化phpsso
- $phpsso_api_url = $this->_init_phpsso();
- $ps_auth_key = pc_base::load_config('system', 'phpsso_auth_key');
- $auth_data = $this->client->auth_data(array('uid'=>$this->memberinfo['phpssouid'], 'ps_auth_key'=>$ps_auth_key), '', $ps_auth_key);
- $upurl = base64_encode($phpsso_api_url.'/index.php?m=phpsso&c=index&a=uploadavatar&auth_data='.$auth_data);
- //獲取頭像數組
- $avatar = $this->client->ps_getavatar($this->memberinfo['phpssouid']);
- include template('member', 'account_manage_avatar');
- }
- public function account_manage_security() {
- $memberinfo = $this->memberinfo;
- include template('member', 'account_manage_security');
- }
- public function account_manage_info() {
- if(isset($_POST['dosubmit'])) {
- //更新用戶昵稱
- $nickname = isset($_POST['nickname']) && trim($_POST['nickname']) ? trim($_POST['nickname']) : '';
- if($nickname) {
- $this->db->update(array('nickname'=>$nickname), array('userid'=>$this->memberinfo['userid']));
- if(!isset($cookietime)) {
- $get_cookietime = param::get_cookie('cookietime');
- }
- $_cookietime = $cookietime ? intval($cookietime) : ($get_cookietime ? $get_cookietime : 0);
- $cookietime = $_cookietime ? TIME + $_cookietime : 0;
- param::set_cookie('_nickname', $nickname, $cookietime);
- }
- require_once CACHE_MODEL_PATH.'member_input.class.php';
- require_once CACHE_MODEL_PATH.'member_update.class.php';
- $member_input = new member_input($this->memberinfo['modelid']);
- $modelinfo = $member_input->get($_POST['info']);
- $this->db->set_model($this->memberinfo['modelid']);
- $membermodelinfo = $this->db->get_one(array('userid'=>$this->memberinfo['userid']));
- if(!emptyempty($membermodelinfo)) {
- $this->db->update($modelinfo, array('userid'=>$this->memberinfo['userid']));
- } else {
- $modelinfo['userid'] = $this->memberinfo['userid'];
- $this->db->insert($modelinfo);
- }
- showmessage(L('operation_success'), HTTP_REFERER);
- } else {
- $memberinfo = $this->memberinfo;
- //獲取會員模型表單
- require CACHE_MODEL_PATH.'member_form.class.php';
- $member_form = new member_form($this->memberinfo['modelid']);
- $this->db->set_model($this->memberinfo['modelid']);
- $membermodelinfo = $this->db->get_one(array('userid'=>$this->memberinfo['userid']));
- $forminfos = $forminfos_arr = $member_form->get($membermodelinfo);
- //萬能字段過濾
- foreach($forminfos as $field=>$info) {
- if($info['isomnipotent']) {
- unset($forminfos[$field]);
- } else {
- if($info['formtype']=='omnipotent') {
- foreach($forminfos_arr as $_fm=>$_fm_value) {
- if($_fm_value['isomnipotent']) {
- $info['form'] = str_replace('{'.$_fm.'}',$_fm_value['form'], $info['form']);
- }
- }
- $forminfos[$field]['form'] = $info['form'];
- }
- }
- }
- $formValidator = $member_form->formValidator;
- include template('member', 'account_manage_info');
- }
- }
- public function account_manage_password() {
- if(isset($_POST['dosubmit'])) {
- if(!is_password($_POST['info']['password'])) {
- showmessage(L('password_format_incorrect'), HTTP_REFERER);
- }
- if($this->memberinfo['password'] != password($_POST['info']['password'], $this->memberinfo['encrypt'])) {
- showmessage(L('old_password_incorrect'), HTTP_REFERER);
- }
- //修改會員郵箱
- if($this->memberinfo['email'] != $_POST['info']['email'] && is_email($_POST['info']['email'])) {
- $email = $_POST['info']['email'];
- $updateinfo['email'] = $_POST['info']['email'];
- } else {
- $email = '';
- }
- $newpassword = password($_POST['info']['newpassword'], $this->memberinfo['encrypt']);
- $updateinfo['password'] = $newpassword;
- $this->db->update($updateinfo, array('userid'=>$this->memberinfo['userid']));
- if(pc_base::load_config('system', 'phpsso')) {
- //初始化phpsso
- $this->_init_phpsso();
- $res = $this->client->ps_member_edit('', $email, $_POST['info']['password'], $_POST['info']['newpassword'], $this->memberinfo['phpssouid'], $this->memberinfo['encrypt']);
- }
- showmessage(L('operation_success'), HTTP_REFERER);
- } else {
- $show_validator = true;
- $memberinfo = $this->memberinfo;
- include template('member', 'account_manage_password');
- }
- }
- public function account_manage_upgrade() {
- $memberinfo = $this->memberinfo;
- $grouplist = getcache('grouplist');
- if(emptyempty($grouplist[$memberinfo['groupid']]['allowupgrade'])) {
- showmessage(L('deny_upgrade'), HTTP_REFERER);
- }
- if(isset($_POST['upgrade_type']) && intval($_POST['upgrade_type']) < 0) {
- showmessage(L('operation_failure'), HTTP_REFERER);
- }
- if(isset($_POST['upgrade_date']) && intval($_POST['upgrade_date']) < 0) {
- showmessage(L('operation_failure'), HTTP_REFERER);
- }
- if(isset($_POST['dosubmit'])) {
- $groupid = isset($_POST['groupid']) ? intval($_POST['groupid']) : showmessage(L('operation_failure'), HTTP_REFERER);
- $upgrade_type = isset($_POST['upgrade_type']) ? intval($_POST['upgrade_type']) : showmessage(L('operation_failure'), HTTP_REFERER);
- $upgrade_date = !emptyempty($_POST['upgrade_date']) ? intval($_POST['upgrade_date']) : showmessage(L('operation_failure'), HTTP_REFERER);
- //消費類型,包年、包月、包日,價格
- $typearr = array($grouplist[$groupid]['price_y'], $grouplist[$groupid]['price_m'], $grouplist[$groupid]['price_d']);
- //消費類型,包年、包月、包日,時間
- $typedatearr = array('366', '31', '1');
- //消費的價格
- $cost = $typearr[$upgrade_type]*$upgrade_date;
- //購買時間
- $buydate = $typedatearr[$upgrade_type]*$upgrade_date*86400;
- $overduedate = $memberinfo['overduedate'] > SYS_TIME ? ($memberinfo['overduedate']+$buydate) : (SYS_TIME+$buydate);
- if($memberinfo['amount'] >= $cost) {
- $this->db->update(array('groupid'=>$groupid, 'overduedate'=>$overduedate, 'vip'=>1), array('userid'=>$memberinfo['userid']));
- //消費記錄
- pc_base::load_app_class('spend','pay',0);
- spend::amount($cost, L('allowupgrade'), $memberinfo['userid'], $memberinfo['username']);
- showmessage(L('operation_success'), 'index.php?m=member&c=index&a=init');
- } else {
- showmessage(L('operation_failure'), HTTP_REFERER);
- }
- } else {
- $groupid = isset($_GET['groupid']) ? intval($_GET['groupid']) : '';
- //初始化phpsso
- $phpsso_api_url = $this->_init_phpsso();
- //獲取頭像數組
- $avatar = $this->client->ps_getavatar($this->memberinfo['phpssouid']);
- $memberinfo['groupname'] = $grouplist[$memberinfo[groupid]]['name'];
- $memberinfo['grouppoint'] = $grouplist[$memberinfo[groupid]]['point'];
- unset($grouplist[$memberinfo['groupid']]);
- include template('member', 'account_manage_upgrade');
- }
- }
- //登錄
- public function login() {
- //主要用來獲取一個session_mysql.class.php類庫文件中session_mysql類的一個實例化對象
- $this->_session_start();
- //獲取用戶siteid
- $siteid = isset($_REQUEST['siteid']) && trim($_REQUEST['siteid']) ? intval($_REQUEST['siteid']) : 1;
- //定義站點id常量
- if (!defined('SITEID')) {
- define('SITEID', $siteid);
- }
- //點擊了【登錄】按鈕
- if(isset($_POST['dosubmit'])) {
- if(emptyempty($_SESSION['connectid'])) {
- //判斷驗證碼
- if(!isset($_POST['checkcode']) && $_POST['checkcode'] != 0){//此行代碼由weiyanhui添加
- $code = isset($_POST['code']) && trim($_POST['code']) ? trim($_POST['code']) : showmessage(L('input_code'), HTTP_REFERER);
- if ($_SESSION['code'] != strtolower($code)) {
- showmessage(L('code_error'), HTTP_REFERER);
- }
- }
- }
- //用戶名
- $username = isset($_POST['username']) && trim($_POST['username']) ? trim($_POST['username']) : showmessage(L('username_empty'), HTTP_REFERER);
- //密碼
- $password = isset($_POST['password']) && trim($_POST['password']) ? trim($_POST['password']) : showmessage(L('password_empty'), HTTP_REFERER);
- //cookie:<input type="checkbox" name="cookietime" value="2592000" id="cookietime"> 記住用戶名
- $cookietime = intval($_POST['cookietime']);//是否記住用戶名
- //同步登錄字符串
- $synloginstr = ''; //同步登陸js代碼
- //phpsso登錄
- if(pc_base::load_config('system', 'phpsso')) {
- //主要用來返回接口地址:'phpsso_api_url' => 'http://zhencms.com/phpsso_server'
- $this->_init_phpsso();
- //返回序列化后的會員信息
- $status = $this->client->ps_member_login($username, $password);
- //將序列化的會員信息反序列化
- $memberinfo = unserialize($status);
- //會員id
- if(isset($memberinfo['uid'])) {
- //查詢帳號,phpssouid為v9_member表中字段,代表會員id
- //登錄過程:第一步-先從phpsso中返回會員信息 第二步:再根據從phpsso中返回的會員信息(如,uid)作為條件查詢本應用的會員表
- $r = $this->db->get_one(array('phpssouid'=>$memberinfo['uid']));
- if(!$r) {//如果phpsso中會員表中有當前登錄會員信息,而本應用的v9_member表中沒有當前登錄會員信息,則重新插入v9_member表會員信息
- //插入會員詳細信息,會員不存在 插入會員
- $info = array(//對應v9_member會員表字段信息
- 'phpssouid'=>$memberinfo['uid'],
- 'username'=>$memberinfo['username'],
- 'password'=>$memberinfo['password'],
- 'encrypt'=>$memberinfo['random'],
- 'email'=>$memberinfo['email'],
- 'regip'=>$memberinfo['regip'],
- 'regdate'=>$memberinfo['regdate'],
- 'lastip'=>$memberinfo['lastip'],
- 'lastdate'=>$memberinfo['lastdate'],
- 'groupid'=>$this->_get_usergroup_bypoint(), //會員默認組
- 'modelid'=>10, //普通會員
- );
- //如果是connect用戶
- if(!emptyempty($_SESSION['connectid'])) {
- $userinfo['connectid'] = $_SESSION['connectid'];
- }
- if(!emptyempty($_SESSION['from'])) {
- $userinfo['from'] = $_SESSION['from'];
- }
- unset($_SESSION['connectid'], $_SESSION['from']);
- //插入v9_member會員表信息
- $this->db->insert($info);
- unset($info);
- //獲取當前登錄會員信息
- $r = $this->db->get_one(array('phpssouid'=>$memberinfo['uid']));
- }
- //v9_member表中用戶密碼
- $password = $r['password'];
- //返回用戶同步登錄的js
- $synloginstr = $this->client->ps_member_synlogin($r['phpssouid']);
- } else {//如果會員id沒有被設置
- if($status == -1) { //用戶不存在
- showmessage(L('user_not_exist'), 'index.php?m=member&c=index&a=login');
- } elseif($status == -2) { //密碼錯誤
- showmessage(L('password_error'), 'index.php?m=member&c=index&a=login');
- } else {//登錄失敗
- showmessage(L('login_failure'), 'index.php?m=member&c=index&a=login');
- }
- }
- //phpsso登錄結束
- } else {//如果不使用phpsso
- //密碼錯誤剩余重試次數
- $this->times_db = pc_base::load_model('times_model');//v9_times表:記錄登錄次數的表
- $rtime = $this->times_db->get_one(array('username'=>$username));//通過username獲取用戶登錄錯誤次數信息
- if($rtime['times'] > 4) {//如果登錄錯誤次數大于4
- $minute = 60 - floor((SYS_TIME - $rtime['logintime']) / 60);
- showmessage(L('wait_1_hour', array('minute'=>$minute)));//登錄錯誤次數大于4,請1小時后重新登錄
- }
- //查詢帳號,v9_member
- $r = $this->db->get_one(array('username'=>$username));
- //會員賬號不存在,返回登錄頁面
- if(!$r) showmessage(L('user_not_exist'),'index.php?m=member&c=index&a=login');
- //驗證用戶密碼,用戶密碼的組成:兩次md5加密+隨機碼
- $password = md5(md5(trim($password)).$r['encrypt']);
- if($r['password'] != $password) {
- $ip = ip();//獲取請求的IP
- if($rtime && $rtime['times'] < 5) {//如果登錄錯誤次數小于5次
- $times = 5 - intval($rtime['times']);
- $this->times_db->update(array('ip'=>$ip, 'times'=>'+=1'), array('username'=>$username));
- } else {//如果登錄錯誤次數大于等于5次
- $this->times_db->insert(array('username'=>$username, 'ip'=>$ip, 'logintime'=>SYS_TIME, 'times'=>1));
- $times = 5;
- }
- //密碼錯誤提示信息
- showmessage(L('password_error', array('times'=>$times)), 'index.php?m=member&c=index&a=login', 3000);
- }
- //如果輸入密碼正確,則將當前會員登錄錯誤次數的記錄刪除
- $this->times_db->delete(array('username'=>$username));
- }//非phpsso登錄結束
- //如果用戶被鎖定
- if($r['islock']) {
- showmessage(L('user_is_lock'));
- }
- $userid = $r['userid'];//會員id
- $groupid = $r['groupid'];//會員組id
- $username = $r['username'];//會員用戶名
- $nickname = emptyempty($r['nickname']) ? $username : $r['nickname'];//會員昵稱
- $updatearr = array('lastip'=>ip(), 'lastdate'=>SYS_TIME);
- //vip過期,更新vip和會員組
- if($r['overduedate'] < SYS_TIME) {
- $updatearr['vip'] = 0;//vip信息需要更新了
- }
- //檢查用戶積分,更新新用戶組,除去郵箱認證、禁止訪問、游客組用戶、vip用戶,如果該用戶組不允許自助升級則不進行該操作
- if($r['point'] >= 0 && !in_array($r['groupid'], array('1', '7', '8')) && emptyempty($r[vip])) {
- $grouplist = getcache('grouplist');//獲取會員組緩存文件:緩存了所有會員組的詳細配置信息
- if(!emptyempty($grouplist[$r['groupid']]['allowupgrade'])) {//如果當前會員所在會員組不允許自主升級的話
- $check_groupid = $this->_get_usergroup_bypoint($r['point']);//則根據積分算出用戶組
- //如果根據積分算出來的會員組與會員表中當前會員組不相等,說明該升級了
- if($check_groupid != $r['groupid']) {
- $updatearr['groupid'] = $groupid = $check_groupid;//會員組信息需要更新了
- }
- }
- }
- //如果是connect用戶
- if(!emptyempty($_SESSION['connectid'])) {
- $updatearr['connectid'] = $_SESSION['connectid'];//外部通行證
- }
- if(!emptyempty($_SESSION['from'])) {
- $updatearr['from'] = $_SESSION['from'];
- }
- unset($_SESSION['connectid'], $_SESSION['from']);
- //更新v9_member用戶會員表信息
- $this->db->update($updatearr, array('userid'=>$userid));
- if(!isset($cookietime)) {//是否記住用戶名
- $get_cookietime = param::get_cookie('cookietime');
- }
- $_cookietime = $cookietime ? intval($cookietime) : ($get_cookietime ? $get_cookietime : 0);
- $cookietime = $_cookietime ? SYS_TIME + $_cookietime : 0;//保存時間
- //'auth_key' => '4s0f9TsT8Y2sHEXMrqnB', //密鑰
- //'phpsso_auth_key' => 'M11tXxlhKEceB4tYeGYZnWwoTgQP7BA4', //phpsso加密密鑰
- $phpcms_auth_key = md5(pc_base::load_config('system', 'auth_key').$this->http_user_agent);
- $phpcms_auth = sys_auth($userid."/t".$password, 'ENCODE', $phpcms_auth_key);
- //登錄后將信息放入cookie
- param::set_cookie('auth', $phpcms_auth, $cookietime);//auth放入cookie
- param::set_cookie('_userid', $userid, $cookietime);//會員id放入cookie
- param::set_cookie('_username', $username, $cookietime);//會員名放入cookie
- param::set_cookie('_groupid', $groupid, $cookietime);//會員組id放入cookie
- param::set_cookie('_nickname', $nickname, $cookietime);//會員昵稱放入cookie
- //param::set_cookie('cookietime', $_cookietime, $cookietime);
- //登錄成功后跳轉頁面:<input type="hidden" name="forward" id="forward" value="http%3A%2F%2Fzhencms.com%2Findex.php%3Fm%3Dmember%26c%3Dindex">
- //value="http%3A%2F%2Fzhencms.com%2Findex.php%3Fm%3Dmember%26c%3Dindex"為urlencode()后的結果,所以需要將其解碼
- $forward = isset($_POST['forward']) && !emptyempty($_POST['forward']) ? urldecode($_POST['forward']) : 'index.php?m=member&c=index';
- showmessage(L('login_success').$synloginstr, $forward);//登錄成功提示信息[phpsso登錄或非phpsso登錄]
- } else {//如果沒有 點擊 【登錄】按鈕,則顯示登錄頁面
- $setting = pc_base::load_config('system');
- //獲取登錄后要跳轉的頁面,賦值給前臺模板
- $forward = isset($_GET['forward']) && trim($_GET['forward']) ? urlencode($_GET['forward']) : '';
- //站點id
- $siteid = isset($_REQUEST['siteid']) && trim($_REQUEST['siteid']) ? intval($_REQUEST['siteid']) : 1;
- //站點信息
- $siteinfo = siteinfo($siteid);
- //登錄頁面
- include template('member', 'login');
- }
- }
- //退出登錄
- public function logout() {
- $setting = pc_base::load_config('system');
- //snda退出,是否開啟盛大通行證
- if($setting['snda_enable'] && param::get_cookie('_from')=='snda') {
- param::set_cookie('_from', '');
- $forward = isset($_GET['forward']) && trim($_GET['forward']) ? urlencode($_GET['forward']) : '';
- $logouturl = 'https://cas.sdo.com/cas/logout?url='.urlencode(APP_PATH.'index.php?m=member&c=index&a=logout&forward='.$forward);
- header('Location: '.$logouturl);
- } else {
- $synlogoutstr = ''; //同步退出js代碼
- if(pc_base::load_config('system', 'phpsso')) {
- $this->_init_phpsso();//主要用來返回接口地址:'phpsso_api_url' => 'http://zhencms.com/phpsso_server'
- //http://zhencms.com/phpsso_server/index.php?m=phpsso&c=index&a=logout
- $synlogoutstr = $this->client->ps_member_synlogout();//返回退出字符串
- }
- param::set_cookie('auth', '');//將auth設置為失效
- param::set_cookie('_userid', '');//將_userid設置為失效
- param::set_cookie('_username', '');//將_username設置為失效
- param::set_cookie('_groupid', '');//將_groupid設置為失效
- param::set_cookie('_nickname', '');//將_nickname設置為失效
- param::set_cookie('cookietime', '');//將cookietime設置為失效
- //退出后返回的頁面
- $forward = isset($_GET['forward']) && trim($_GET['forward']) ? $_GET['forward'] : 'index.php?m=member&c=index&a=login';
- //退出的提示信息
- showmessage(L('logout_success').$synlogoutstr, $forward);
- }
- }
- /**
- * 我的收藏
- *
- */
- public function favorite() {
- $this->favorite_db = pc_base::load_model('favorite_model');
- $memberinfo = $this->memberinfo;
- if(isset($_GET['id']) && trim($_GET['id'])) {
- $this->favorite_db->delete(array('userid'=>$memberinfo['userid'], 'id'=>intval($_GET['id'])));
- showmessage(L('operation_success'), HTTP_REFERER);
- } else {
- $page = isset($_GET['page']) && trim($_GET['page']) ? intval($_GET['page']) : 1;
- $favoritelist = $this->favorite_db->listinfo(array('userid'=>$memberinfo['userid']), 'id DESC', $page, 10);
- $pages = $this->favorite_db->pages;
- include template('member', 'favorite_list');
- }
- }
- /**
- * 我的好友
- */
- public function friend() {
- $memberinfo = $this->memberinfo;
- $this->friend_db = pc_base::load_model('friend_model');
- if(isset($_GET['friendid'])) {
- $this->friend_db->delete(array('userid'=>$memberinfo['userid'], 'friendid'=>intval($_GET['friendid'])));
- showmessage(L('operation_success'), HTTP_REFERER);
- } else {
- //初始化phpsso
- $phpsso_api_url = $this->_init_phpsso();
- //我的好友列表userid
- $page = isset($_GET['page']) ? intval($_GET['page']) : 1;
- $friendids = $this->friend_db->listinfo(array('userid'=>$memberinfo['userid']), '', $page, 10);
- $pages = $this->friend_db->pages;
- foreach($friendids as $k=>$v) {
- $friendlist[$k]['friendid'] = $v['friendid'];
- $friendlist[$k]['avatar'] = $this->client->ps_getavatar($v['phpssouid']);
- $friendlist[$k]['is'] = $v['is'];
- }
- include template('member', 'friend_list');
- }
- }
- /**
- * 積分兌換
- */
- public function change_credit() {
- $memberinfo = $this->memberinfo;
- //加載用戶模塊配置
- $member_setting = getcache('member_setting');
- $this->_init_phpsso();
- $setting = $this->client->ps_getcreditlist();
- $outcredit = unserialize($setting);
- $setting = $this->client->ps_getapplist();
- $applist = unserialize($setting);
- if(isset($_POST['dosubmit'])) {
- //本系統積分兌換數
- $fromvalue = intval($_POST['fromvalue']);
- //本系統積分類型
- $from = $_POST['from'];
- $toappid_to = explode('_', $_POST['to']);
- //目標系統appid
- $toappid = $toappid_to[0];
- //目標系統積分類型
- $to = $toappid_to[1];
- if($from == 1) {
- if($memberinfo['point'] < $fromvalue) {
- showmessage(L('need_more_point'), HTTP_REFERER);
- }
- } elseif($from == 2) {
- if($memberinfo['amount'] < $fromvalue) {
- showmessage(L('need_more_amount'), HTTP_REFERER);
- }
- } else {
- showmessage(L('credit_setting_error'), HTTP_REFERER);
- }
- $status = $this->client->ps_changecredit($memberinfo['phpssouid'], $from, $toappid, $to, $fromvalue);
- if($status == 1) {
- if($from == 1) {
- $this->db->update(array('point'=>"-=$fromvalue"), array('userid'=>$memberinfo['userid']));
- } elseif($from == 2) {
- $this->db->update(array('amount'=>"-=$fromvalue"), array('userid'=>$memberinfo['userid']));
- }
- showmessage(L('operation_success'), HTTP_REFERER);
- } else {
- showmessage(L('operation_failure'), HTTP_REFERER);
- }
- } elseif(isset($_POST['buy'])) {
- if(!is_numeric($_POST[]) || $_POST['money'] < 0) {
- showmessage(L('money_error'), HTTP_REFERER);
- } else {
- $money = intval($_POST['money']);
- }
- if($memberinfo['amount'] < $money) {
- showmessage(L('short_of_money'), HTTP_REFERER);
- }
- //此處比率讀取用戶配置
- $point = $money*$member_setting['rmb_point_rate'];
- $this->db->update(array('point'=>"+=$point"), array('userid'=>$memberinfo['userid']));
- //加入消費記錄,同時扣除金錢
- pc_base::load_app_class('spend','pay',0);
- spend::amount($money, L('buy_point'), $memberinfo['userid'], $memberinfo['username']);
- showmessage(L('operation_success'), HTTP_REFERER);
- } else {
- $credit_list = pc_base::load_config('credit');
- include template('member', 'change_credit');
- }
- }
- //mini登陸條
- public function mini() {
- //獲取通過 set_cookie 設置的 _username 變量
- $_username = param::get_cookie('_username');
- //獲取通過 set_cookie 設置的 _userid 變量
- $_userid = param::get_cookie('_userid');
- //當前站點
- $siteid = isset($_GET['siteid']) ? intval($_GET['siteid']) : '';
- //定義站點id常量
- if (!defined('SITEID')) {
- define('SITEID', $siteid);
- }
- $snda_enable = pc_base::load_config('system', 'snda_enable');
- //頂部登錄信息:歡迎 xxx 登錄 ,會員中心、退出
- include template('member', 'mini');
- }
- /**
- * 初始化phpsso
- * about phpsso, include client and client configure
- * @return string phpsso_api_url phpsso地址
- */
- private function _init_phpsso() {
- pc_base::load_app_class('client', '', 0);
- define('APPID', pc_base::load_config('system', 'phpsso_appid'));//應用id
- $phpsso_api_url = pc_base::load_config('system', 'phpsso_api_url');//接口地址
- $phpsso_auth_key = pc_base::load_config('system', 'phpsso_auth_key');//加密秘鑰
- //主要將phpsso_api_url、phpsso_auth_key賦給client類對應的屬性
- $this->client = new client($phpsso_api_url, $phpsso_auth_key);
- return $phpsso_api_url;//返回接口地址:'phpsso_api_url' => 'http://zhencms.com/phpsso_server'
- }
- protected function _checkname($username) {
- $username = trim($username);
- if ($this->db->get_one(array('username'=>$username))){
- return false;
- }
- return true;
- }
- private function _session_start() {
- $session_storage = 'session_'.pc_base::load_config('system','session_storage');//session_mysql
- pc_base::load_sys_class($session_storage);//加載session_mysql.class.php文件,默認情況下會初始化一個實例
- }
- /*
- * 通過linkageid獲取名字路徑
- */
- protected function _get_linkage_fullname($linkageid, $linkagelist) {
- $fullname = '';
- if($linkagelist['data'][$linkageid]['parentid'] != 0) {
- $fullname = $this->_get_linkage_fullname($linkagelist['data'][$linkageid]['parentid'], $linkagelist);
- }
- //所在地區名稱
- $return = $fullname.$linkagelist['data'][$linkageid]['name'].'>';
- return $return;
- }
- /**
- *根據積分算出用戶組
- * @param $point int 積分數
- */
- protected function _get_usergroup_bypoint($point=0) {
- $groupid = 2;
- if(emptyempty($point)) {
- $member_setting = getcache('member_setting');
- $point = $member_setting['defualtpoint'] ? $member_setting['defualtpoint'] : 0;
- }
- $grouplist = getcache('grouplist');
- foreach ($grouplist as $k=>$v) {
- $grouppointlist[$k] = $v['point'];
- }
- arsort($grouppointlist);
- //如果超出用戶組積分設置則為積分最高的用戶組
- if($point > max($grouppointlist)) {
- $groupid = key($grouppointlist);
- } else {
- foreach ($grouppointlist as $k=>$v) {
- if($point >= $v) {
- $groupid = $tmp_k;
- break;
- }
- $tmp_k = $k;
- }
- }
- return $groupid;
- }
- /**
- * 檢查用戶名
- * @param string $username 用戶名
- * @return $status {-4:用戶名禁止注冊;-1:用戶名已經存在 ;1:成功}
- */
- public function public_checkname_ajax() {
- $username = isset($_GET['username']) && trim($_GET['username']) ? trim($_GET['username']) : exit(0);
- if(CHARSET != 'utf-8') {
- $username = iconv('utf-8', CHARSET, $username);
- $username = addslashes($username);
- }
- //首先判斷會員審核表
- $this->verify_db = pc_base::load_model('member_verify_model');
- if($this->verify_db->get_one(array('username'=>$username))) {
- exit('0');
- }
- $this->_init_phpsso();
- $status = $this->client->ps_checkname($username);
- if($status == -4 || $status == -1) {
- exit('0');
- } else {
- exit('1');
- }
- }
- /**
- * 檢查用戶昵稱
- * @param string $nickname 昵稱
- * @return $status {0:已存在;1:成功}
- */
- public function public_checknickname_ajax() {
- $nickname = isset($_GET['nickname']) && trim($_GET['nickname']) ? trim($_GET['nickname']) : exit('0');
- if(CHARSET != 'utf-8') {
- $nickname = iconv('utf-8', CHARSET, $nickname);
- $nickname = addslashes($nickname);
- }
- //首先判斷會員審核表
- $this->verify_db = pc_base::load_model('member_verify_model');
- if($this->verify_db->get_one(array('nickname'=>$nickname))) {
- exit('0');
- }
- if(isset($_GET['userid'])) {
- $userid = intval($_GET['userid']);
- //如果是會員修改,而且NICKNAME和原來優質一致返回1,否則返回0
- $info = get_memberinfo($userid);
- if($info['nickname'] == $nickname){//未改變
- exit('1');
- }else{//已改變,判斷是否已有此名
- $where = array('nickname'=>$nickname);
- $res = $this->db->get_one($where);
- if($res) {
- exit('0');
- } else {
- exit('1');
- }
- }
- } else {
- $where = array('nickname'=>$nickname);
- $res = $this->db->get_one($where);
- if($res) {
- exit('0');
- } else {
- exit('1');
- }
- }
- }
- /**
- * 檢查郵箱
- * @param string $email
- * @return $status {-1:email已經存在 ;-5:郵箱禁止注冊;1:成功}
- */
- public function public_checkemail_ajax() {
- $this->_init_phpsso();
- $email = isset($_GET['email']) && trim($_GET['email']) ? trim($_GET['email']) : exit(0);
- $status = $this->client->ps_checkemail($email);
- if($status == -5) { //禁止注冊
- exit('0');
- } elseif($status == -1) { //用戶名已存在,但是修改用戶的時候需要判斷郵箱是否是當前用戶的
- if(isset($_GET['phpssouid'])) { //修改用戶傳入phpssouid
- $status = $this->client->ps_get_member_info($email, 3);
- if($status) {
- $status = unserialize($status); //接口返回序列化,進行判斷
- if (isset($status['uid']) && $status['uid'] == intval($_GET['phpssouid'])) {
- exit('1');
- } else {
- exit('0');
- }
- } else {
- exit('0');
- }
- } else {
- exit('0');
- }
- } else {
- exit('1');
- }
- }
- public function public_sina_login() {
- define('WB_AKEY', pc_base::load_config('system', 'sina_akey'));
- define('WB_SKEY', pc_base::load_config('system', 'sina_skey'));
- pc_base::load_app_class('weibooauth', '' ,0);
- $this->_session_start();
- if(isset($_GET['callback']) && trim($_GET['callback'])) {
- $o = new WeiboOAuth(WB_AKEY, WB_SKEY, $_SESSION['keys']['oauth_token'], $_SESSION['keys']['oauth_token_secret']);
- $_SESSION['last_key'] = $o->getAccessToken($_REQUEST['oauth_verifier']);
- $c = new WeiboClient(WB_AKEY, WB_SKEY, $_SESSION['last_key']['oauth_token'], $_SESSION['last_key']['oauth_token_secret']);
- //獲取用戶信息
- $me = $c->verify_credentials();
- if(CHARSET != 'utf-8') {
- $me['name'] = iconv('utf-8', CHARSET, $me['name']);
- $me['location'] = iconv('utf-8', CHARSET, $me['location']);
- $me['description'] = iconv('utf-8', CHARSET, $me['description']);
- $me['screen_name'] = iconv('utf-8', CHARSET, $me['screen_name']);
- }
- if(!emptyempty($me['id'])) {
- //檢查connect會員是否綁定,已綁定直接登錄,未綁定提示注冊/綁定頁面
- $where = array('connectid'=>$me['id'], 'from'=>'sina');
- $r = $this->db->get_one($where);
- //connect用戶已經綁定本站用戶
- if(!emptyempty($r)) {
- //讀取本站用戶信息,執行登錄操作
- $password = $r['password'];
- $this->_init_phpsso();
- $synloginstr = $this->client->ps_member_synlogin($r['phpssouid']);
- $userid = $r['userid'];
- $groupid = $r['groupid'];
- $username = $r['username'];
- $nickname = emptyempty($r['nickname']) ? $username : $r['nickname'];
- $this->db->update(array('lastip'=>ip(), 'lastdate'=>SYS_TIME, 'nickname'=>$me['name']), array('userid'=>$userid));
- if(!$cookietime) $get_cookietime = param::get_cookie('cookietime');
- $_cookietime = $cookietime ? intval($cookietime) : ($get_cookietime ? $get_cookietime : 0);
- $cookietime = $_cookietime ? TIME + $_cookietime : 0;
- $phpcms_auth_key = md5(pc_base::load_config('system', 'auth_key').$this->http_user_agent);
- $phpcms_auth = sys_auth($userid."/t".$password, 'ENCODE', $phpcms_auth_key);
- param::set_cookie('auth', $phpcms_auth, $cookietime);
- param::set_cookie('_userid', $userid, $cookietime);
- param::set_cookie('_username', $username, $cookietime);
- param::set_cookie('_groupid', $groupid, $cookietime);
- param::set_cookie('cookietime', $_cookietime, $cookietime);
- param::set_cookie('_nickname', $nickname, $cookietime);
- $forward = isset($_GET['forward']) && !emptyempty($_GET['forward']) ? $_GET['forward'] : 'index.php?m=member&c=index';
- showmessage(L('login_success').$synloginstr, $forward);
- } else {
- //彈出綁定注冊頁面
- $_SESSION = array();
- $_SESSION['connectid'] = $me['id'];
- $_SESSION['from'] = 'sina';
- $connect_username = $me['name'];
- //加載用戶模塊配置
- $member_setting = getcache('member_setting');
- if(!$member_setting['allowregister']) {
- showmessage(L('deny_register'), 'index.php?m=member&c=index&a=login');
- }
- //獲取用戶siteid
- $siteid = isset($_REQUEST['siteid']) && trim($_REQUEST['siteid']) ? intval($_REQUEST['siteid']) : 1;
- //過濾非當前站點會員模型
- $modellist = getcache('member_model', 'commons');
- foreach($modellist as $k=>$v) {
- if($v['siteid']!=$siteid || $v['disabled']) {
- unset($modellist[$k]);
- }
- }
- if(emptyempty($modellist)) {
- showmessage(L('site_have_no_model').L('deny_register'), HTTP_REFERER);
- }
- $modelid = 10; //設定默認值
- if(array_key_exists($modelid, $modellist)) {
- //獲取會員模型表單
- require CACHE_MODEL_PATH.'member_form.class.php';
- $member_form = new member_form($modelid);
- $this->db->set_model($modelid);
- $forminfos = $forminfos_arr = $member_form->get();
- //萬能字段過濾
- foreach($forminfos as $field=>$info) {
- if($info['isomnipotent']) {
- unset($forminfos[$field]);
- } else {
- if($info['formtype']=='omnipotent') {
- foreach($forminfos_arr as $_fm=>$_fm_value) {
- if($_fm_value['isomnipotent']) {
- $info['form'] = str_replace('{'.$_fm.'}',$_fm_value['form'], $info['form']);
- }
- }
- $forminfos[$field]['form'] = $info['form'];
- }
- }
- }
- $formValidator = $member_form->formValidator;
- }
- include template('member', 'connect');
- }
- } else {
- showmessage(L('login_failure'), 'index.php?m=member&c=index&a=login');
- }
- } else {
- $o = new WeiboOAuth(WB_AKEY, WB_SKEY);
- $keys = $o->getRequestToken();
- $aurl = $o->getAuthorizeURL($keys['oauth_token'] ,false , APP_PATH.'index.php?m=member&c=index&a=public_sina_login&callback=1');
- $_SESSION['keys'] = $keys;
- include template('member', 'connect_sina');
- }
- }
- /**
- * 盛大通行證登陸
- */
- public function public_snda_login() {
- define('SNDA_AKEY', pc_base::load_config('system', 'snda_akey'));
- define('SNDA_SKEY', pc_base::load_config('system', 'snda_skey'));
- define('SNDA_CALLBACK', urlencode(APP_PATH.'index.php?m=member&c=index&a=public_snda_login&callback=1'));
- pc_base::load_app_class('OauthSDK', '' ,0);
- $this->_session_start();
- if(isset($_GET['callback']) && trim($_GET['callback'])) {
- $o = new OauthSDK(SNDA_AKEY, SNDA_SKEY, SNDA_CALLBACK);
- $code = $_REQUEST['code'];
- $accesstoken = $o->getAccessToken($code);
- if(is_numeric($accesstoken['sdid'])) {
- $userid = $accesstoken['sdid'];
- } else {
- showmessage(L('login_failure'), 'index.php?m=member&c=index&a=login');
- }
- if(!emptyempty($userid)) {
- //檢查connect會員是否綁定,已綁定直接登錄,未綁定提示注冊/綁定頁面
- $where = array('connectid'=>$userid, 'from'=>'snda');
- $r = $this->db->get_one($where);
- //connect用戶已經綁定本站用戶
- if(!emptyempty($r)) {
- //讀取本站用戶信息,執行登錄操作
- $password = $r['password'];
- $this->_init_phpsso();
- $synloginstr = $this->client->ps_member_synlogin($r['phpssouid']);
- $userid = $r['userid'];
- $groupid = $r['groupid'];
- $username = $r['username'];
- $nickname = emptyempty($r['nickname']) ? $username : $r['nickname'];
- $this->db->update(array('lastip'=>ip(), 'lastdate'=>SYS_TIME, 'nickname'=>$me['name']), array('userid'=>$userid));
- if(!$cookietime) $get_cookietime = param::get_cookie('cookietime');
- $_cookietime = $cookietime ? intval($cookietime) : ($get_cookietime ? $get_cookietime : 0);
- $cookietime = $_cookietime ? TIME + $_cookietime : 0;
- $phpcms_auth_key = md5(pc_base::load_config('system', 'auth_key').$this->http_user_agent);
- $phpcms_auth = sys_auth($userid."/t".$password, 'ENCODE', $phpcms_auth_key);
- param::set_cookie('auth', $phpcms_auth, $cookietime);
- param::set_cookie('_userid', $userid, $cookietime);
- param::set_cookie('_username', $username, $cookietime);
- param::set_cookie('_groupid', $groupid, $cookietime);
- param::set_cookie('cookietime', $_cookietime, $cookietime);
- param::set_cookie('_nickname', $nickname, $cookietime);
- param::set_cookie('_from', 'snda');
- $forward = isset($_GET['forward']) && !emptyempty($_GET['forward']) ? $_GET['forward'] : 'index.php?m=member&c=index';
- showmessage(L('login_success').$synloginstr, $forward);
- } else {
- //彈出綁定注冊頁面
- $_SESSION = array();
- $_SESSION['connectid'] = $userid;
- $_SESSION['from'] = 'snda';
- $connect_username = $userid;
- include template('member', 'connect');
- }
- }
- } else {
- $o = new OauthSDK(SNDA_AKEY, SNDA_SKEY, SNDA_CALLBACK);
- $accesstoken = $o->getSystemToken();
- $aurl = $o->getAuthorizeURL();
- include template('member', 'connect_snda');
- }
- }
- /**
- * QQ號碼登錄
- * 該函數為QQ登錄回調地址
- */
- public function public_qq_loginnew(){
- $appid = pc_base::load_config('system', 'qq_appid');
- $appkey = pc_base::load_config('system', 'qq_appkey');
- $callback = pc_base::load_config('system', 'qq_callback');
- pc_base::load_app_class('qqapi','',0);
- $info = new qqapi($appid,$appkey,$callback);
- $this->_session_start();
- if(!isset($_GET['oauth_token'])){
- $info->redirect_to_login();
- }else{
- $info->get_openid();//調取QQ openid值
- if(!emptyempty($_SESSION['openid'])){
- $r = $this->db->get_one(array('connectid'=>$_SESSION['openid'],'from'=>'qq'));
- if(!emptyempty($r)){
- //QQ已存在于數據庫,則直接轉向登陸操作
- $password = $r['password'];
- $this->_init_phpsso();
- $synloginstr = $this->client->ps_member_synlogin($r['phpssouid']);
- $userid = $r['userid'];
- $groupid = $r['groupid'];
- $username = $r['username'];
- $nickname = emptyempty($r['nickname']) ? $username : $r['nickname'];
- $this->db->update(array('lastip'=>ip(), 'lastdate'=>SYS_TIME, 'nickname'=>$me['name']), array('userid'=>$userid));
- if(!$cookietime) $get_cookietime = param::get_cookie('cookietime');
- $_cookietime = $cookietime ? intval($cookietime) : ($get_cookietime ? $get_cookietime : 0);
- $cookietime = $_cookietime ? TIME + $_cookietime : 0;
- $phpcms_auth_key = md5(pc_base::load_config('system', 'auth_key').$this->http_user_agent);
- $phpcms_auth = sys_auth($userid."/t".$password, 'ENCODE', $phpcms_auth_key);
- param::set_cookie('auth', $phpcms_auth, $cookietime);
- param::set_cookie('_userid', $userid, $cookietime);
- param::set_cookie('_username', $username, $cookietime);
- param::set_cookie('_groupid', $groupid, $cookietime);
- param::set_cookie('cookietime', $_cookietime, $cookietime);
- param::set_cookie('_nickname', $nickname, $cookietime);
- $forward = isset($_GET['forward']) && !emptyempty($_GET['forward']) ? $_GET['forward'] : 'index.php?m=member&c=index';
- showmessage(L('login_success').$synloginstr, $forward);
- }else{
- //未存在于數據庫中,跳去完善資料頁面。頁面預置用戶名(QQ返回是UTF8編碼,如有需要進行轉碼)
- $user = $info->get_user_info();
- $_SESSION['connectid'] = $_SESSION['openid'];
- $_SESSION['from'] = 'qq';
- if(CHARSET != 'utf-8') {//轉編碼
- $connect_username = iconv('utf-8', CHARSET, $user['nickname']);
- }
- include template('member', 'connect');
- }
- }
- }
- }
- /**
- * QQ微博登錄
- */
- public function public_qq_login() {
- define('QQ_AKEY', pc_base::load_config('system', 'qq_akey'));
- define('QQ_SKEY', pc_base::load_config('system', 'qq_skey'));
- pc_base::load_app_class('qqoauth', '' ,0);
- $this->_session_start();
- if(isset($_GET['callback']) && trim($_GET['callback'])) {
- $o = new WeiboOAuth(QQ_AKEY, QQ_SKEY, $_SESSION['keys']['oauth_token'], $_SESSION['keys']['oauth_token_secret']);
- $_SESSION['last_key'] = $o->getAccessToken($_REQUEST['oauth_verifier']);
- if(!emptyempty($_SESSION['last_key']['name'])) {
- //檢查connect會員是否綁定,已綁定直接登錄,未綁定提示注冊/綁定頁面
- $where = array('connectid'=>$_REQUEST['openid'], 'from'=>'qq');
- $r = $this->db->get_one($where);
- //connect用戶已經綁定本站用戶
- if(!emptyempty($r)) {
- //讀取本站用戶信息,執行登錄操作
- $password = $r['password'];
- $this->_init_phpsso();
- $synloginstr = $this->client->ps_member_synlogin($r['phpssouid']);
- $userid = $r['userid'];
- $groupid = $r['groupid'];
- $username = $r['username'];
- $nickname = emptyempty($r['nickname']) ? $username : $r['nickname'];
- $this->db->update(array('lastip'=>ip(), 'lastdate'=>SYS_TIME, 'nickname'=>$me['name']), array('userid'=>$userid));
- if(!$cookietime) $get_cookietime = param::get_cookie('cookietime');
- $_cookietime = $cookietime ? intval($cookietime) : ($get_cookietime ? $get_cookietime : 0);
- $cookietime = $_cookietime ? TIME + $_cookietime : 0;
- $phpcms_auth_key = md5(pc_base::load_config('system', 'auth_key').$this->http_user_agent);
- $phpcms_auth = sys_auth($userid."/t".$password, 'ENCODE', $phpcms_auth_key);
- param::set_cookie('auth', $phpcms_auth, $cookietime);
- param::set_cookie('_userid', $userid, $cookietime);
- param::set_cookie('_username', $username, $cookietime);
- param::set_cookie('_groupid', $groupid, $cookietime);
- param::set_cookie('cookietime', $_cookietime, $cookietime);
- param::set_cookie('_nickname', $nickname, $cookietime);
- param::set_cookie('_from', 'snda');
- $forward = isset($_GET['forward']) && !emptyempty($_GET['forward']) ? $_GET['forward'] : 'index.php?m=member&c=index';
- showmessage(L('login_success').$synloginstr, $forward);
- } else {
- //彈出綁定注冊頁面
- $_SESSION = array();
- $_SESSION['connectid'] = $_REQUEST['openid'];
- $_SESSION['from'] = 'qq';
- $connect_username = $_SESSION['last_key']['name'];
- //加載用戶模塊配置
- $member_setting = getcache('member_setting');
- if(!$member_setting['allowregister']) {
- showmessage(L('deny_register'), 'index.php?m=member&c=index&a=login');
- }
- //獲取用戶siteid
- $siteid = isset($_REQUEST['siteid']) && trim($_REQUEST['siteid']) ? intval($_REQUEST['siteid']) : 1;
- //過濾非當前站點會員模型
- $modellist = getcache('member_model', 'commons');
- foreach($modellist as $k=>$v) {
- if($v['siteid']!=$siteid || $v['disabled']) {
- unset($modellist[$k]);
- }
- }
- if(emptyempty($modellist)) {
- showmessage(L('site_have_no_model').L('deny_register'), HTTP_REFERER);
- }
- $modelid = 10; //設定默認值
- if(array_key_exists($modelid, $modellist)) {
- //獲取會員模型表單
- require CACHE_MODEL_PATH.'member_form.class.php';
- $member_form = new member_form($modelid);
- $this->db->set_model($modelid);
- $forminfos = $forminfos_arr = $member_form->get();
- //萬能字段過濾
- foreach($forminfos as $field=>$info) {
- if($info['isomnipotent']) {
- unset($forminfos[$field]);
- } else {
- if($info['formtype']=='omnipotent') {
- foreach($forminfos_arr as $_fm=>$_fm_value) {
- if($_fm_value['isomnipotent']) {
- $info['form'] = str_replace('{'.$_fm.'}',$_fm_value['form'], $info['form']);
- }
- }
- $forminfos[$field]['form'] = $info['form'];
- }
- }
- }
- $formValidator = $member_form->formValidator;
- }
- include template('member', 'connect');
- }
- } else {
- showmessage(L('login_failure'), 'index.php?m=member&c=index&a=login');
- }
- } else {
- $oauth_callback = APP_PATH.'index.php?m=member&c=index&a=public_qq_login&callback=1';
- $oauth_nonce = md5(SYS_TIME);
- $oauth_signature_method = 'HMAC-SHA1';
- $oauth_timestamp = SYS_TIME;
- $oauth_version = '1.0';
- $url = "https://open.t.qq.com/cgi-bin/request_token?oauth_callback=$oauth_callback&oauth_consumer_key=".QQ_AKEY."&oauth_nonce=$oauth_nonce&oauth_signature=".QQ_SKEY."&oauth_signature_method=HMAC-SHA1&oauth_timestamp=$oauth_timestamp&oauth_version=$oauth_version";
- $o = new WeiboOAuth(QQ_AKEY, QQ_SKEY);
- $keys = $o->getRequestToken(array('callback'=>$oauth_callback));
- $_SESSION['keys'] = $keys;
- $aurl = $o->getAuthorizeURL($keys['oauth_token'] ,false , $oauth_callback);
- include template('member', 'connect_qq');
- }
- }
- //QQ登錄功能
- public function public_qq_login2(){
- $appid = pc_base::load_config('system', 'qq_appid');
- $appkey = pc_base::load_config('system', 'qq_appkey');
- $callback = pc_base::load_config('system', 'qq_callback');
- pc_base::load_app_class('qqapi','',0);
- $info = new qqapi($appid,$appkey,$callback);
- $this->_session_start();
- if(!isset($_GET['oauth_token'])){
- $info->redirect_to_login();
- }else{
- $info->get_openid();
- if(!emptyempty($_SESSION['openid'])){
- $r = $this->db->get_one(array('connectid'=>$_SESSION['openid'],'from'=>'qq'));
- if(!emptyempty($r)){
- //登陸
- $password = $r['password'];
- $this->_init_phpsso();
- $synloginstr = $this->client->ps_member_synlogin($r['phpssouid']);
- $userid = $r['userid'];
- $groupid = $r['groupid'];
- $username = $r['username'];
- $nickname = emptyempty($r['nickname']) ? $username : $r['nickname'];
- $this->db->update(array('lastip'=>ip(), 'lastdate'=>SYS_TIME, 'nickname'=>$me['name']), array('userid'=>$userid));
- if(!$cookietime) $get_cookietime = param::get_cookie('cookietime');
- $_cookietime = $cookietime ? intval($cookietime) : ($get_cookietime ? $get_cookietime: 0);
- $cookietime = $_cookietime ? TIME + $_cookietime : 0;
- $phpcms_auth_key = md5(pc_base::load_config('system', 'auth_key').$this->http_user_agent);
- $phpcms_auth = sys_auth($userid."/t".$password, 'ENCODE', $phpcms_auth_key);
- param::set_cookie('auth', $phpcms_auth, $cookietime);
- param::set_cookie('_userid', $userid, $cookietime);
- param::set_cookie('_username', $username, $cookietime);
- param::set_cookie('_groupid', $groupid, $cookietime);
- param::set_cookie('cookietime', $_cookietime, $cookietime);
- param::set_cookie('_nickname', $nickname, $cookietime);
- $forward = isset($_GET['forward']) && !emptyempty($_GET['forward']) ? $_GET['forward'] : 'index.php?m=member&c=index';
- showmessage(L('login_success').$synloginstr, $forward);
- }else{
- $user = $info->get_user_info();
- $_SESSION['connectid'] = $_SESSION['openid'];
- $_SESSION['from'] = 'qq';
- $connect_username = $user['nickname'];
- include template('member', 'connect');
- }
- }
- }
- }
- /**
- * 找回密碼
- */
- public function public_forget_password () {
- $email_config = getcache('common', 'commons');
- //SMTP MAIL 二種發送模式
- if($email_config['mail_type'] == '1'){
- if(emptyempty($email_config['mail_user']) || emptyempty($email_config['mail_password'])) {
- showmessage(L('email_config_empty'), HTTP_REFERER);
- }
- }
- $this->_session_start();
- $member_setting = getcache('member_setting');
- if(isset($_POST['dosubmit'])) {
- if ($_SESSION['code'] != strtolower($_POST['code'])) {
- showmessage(L('code_error'), HTTP_REFERER);
- }
- $memberinfo = $this->db->get_one(array('email'=>$_POST['email']));
- if(!emptyempty($memberinfo['email'])) {
- $email = $memberinfo['email'];
- } else {
- showmessage(L('email_error'), HTTP_REFERER);
- }
- pc_base::load_sys_func('mail');
- $phpcms_auth_key = md5(pc_base::load_config('system', 'auth_key').$this->http_user_agent);
- $code = sys_auth($memberinfo['userid']."/t".SYS_TIME, 'ENCODE', $phpcms_auth_key);
- $url = APP_PATH."index.php?m=member&c=index&a=public_forget_password&code=$code";
- $message = $member_setting['forgetpassword'];
- $message = str_replace(array('{click}','{url}'), array('<a href="'.$url.'">'.L('please_click').'</a>',$url), $message);
- //獲取站點名稱
- $sitelist = getcache('sitelist', 'commons');
- if(isset($sitelist[$memberinfo['siteid']]['name'])) {
- $sitename = $sitelist[$memberinfo['siteid']]['name'];
- } else {
- $sitename = 'PHPCMS_V9_MAIL';
- }
- sendmail($email, L('forgetpassword'), $message, '', '', $sitename);
- showmessage(L('operation_success'), 'index.php?m=member&c=index&a=login');
- } elseif($_GET['code']) {
- $phpcms_auth_key = md5(pc_base::load_config('system', 'auth_key').$this->http_user_agent);
- $hour = date('y-m-d h', SYS_TIME);
- $code = sys_auth($_GET['code'], 'DECODE', $phpcms_auth_key);
- $code = explode("/t", $code);
- if(is_array($code) && is_numeric($code[0]) && date('y-m-d h', SYS_TIME) == date('y-m-d h', $code[1])) {
- $memberinfo = $this->db->get_one(array('userid'=>$code[0]));
- if(emptyempty($memberinfo['phpssouid'])) {
- showmessage(L('operation_failure'), 'index.php?m=member&c=index&a=login');
- }
- $password = random(8);
- $updateinfo['password'] = password($password, $memberinfo['encrypt']);
- $this->db->update($updateinfo, array('userid'=>$code[0]));
- if(pc_base::load_config('system', 'phpsso')) {
- //初始化phpsso
- $this->_init_phpsso();
- $this->client->ps_member_edit('', $email, '', $password, $memberinfo['phpssouid'], $memberinfo['encrypt']);
- }
- showmessage(L('operation_success').L('newpassword').':'.$password);
- } else {
- showmessage(L('operation_failure'), 'index.php?m=member&c=index&a=login');
- }
- } else {
- $siteid = isset($_REQUEST['siteid']) && trim($_REQUEST['siteid']) ? intval($_REQUEST['siteid']) : 1;
- $siteinfo = siteinfo($siteid);
- include template('member', 'forget_password');
- }
- }
- }
- ?>
新聞熱點
疑難解答