403 lines
13 KiB
PHP
Executable File
403 lines
13 KiB
PHP
Executable File
<?php
|
||
|
||
if (!defined('IN_ECS'))
|
||
{
|
||
die('Hacking attempt');
|
||
}
|
||
|
||
/**
|
||
* 用户注册,登录函数
|
||
*
|
||
* @access public
|
||
* @param string $username 注册用户名
|
||
* @param string $password 用户密码
|
||
* @param string $mobile_phone 注册行動電話
|
||
* @param array $other 注册的其他信息
|
||
*
|
||
* @return bool $bool
|
||
*/
|
||
function register($username, $password, $mobile_phone, $other = array())
|
||
{
|
||
/* 检查注册是否关闭 */
|
||
if (!empty($GLOBALS['_CFG']['shop_reg_closed']))
|
||
{
|
||
$GLOBALS['err']->add($GLOBALS['_LANG']['shop_register_closed']);
|
||
}
|
||
/* 检查username */
|
||
if (empty($username))
|
||
{
|
||
$GLOBALS['err']->add($GLOBALS['_LANG']['username_empty']);
|
||
}
|
||
else
|
||
{
|
||
if (preg_match('/\'\/^\\s*$|^c:\\\\con\\\\con$|[%,\\*\\"\\s\\t\\<\\>\\&\'\\\\]|^guest/', $username))
|
||
{
|
||
$GLOBALS['err']->add(sprintf($GLOBALS['_LANG']['username_invalid'], htmlspecialchars($username)));
|
||
}
|
||
}
|
||
|
||
/* 检查mobile_phone */
|
||
if (empty($mobile_phone))
|
||
{
|
||
$GLOBALS['err']->add($GLOBALS['_LANG']['mobile_empty']);
|
||
}
|
||
else
|
||
{
|
||
if (!is_mobile($mobile_phone))
|
||
{
|
||
$GLOBALS['err']->add(sprintf($GLOBALS['_LANG']['mobile_invalid'], htmlspecialchars($mobile_phone)));
|
||
}
|
||
}
|
||
|
||
if ($GLOBALS['err']->error_no > 0)
|
||
{
|
||
return false;
|
||
}
|
||
|
||
/* 检查是否和管理员重名 */
|
||
if (admin_registered($username))
|
||
{
|
||
$GLOBALS['err']->add(sprintf($GLOBALS['_LANG']['username_exist'], $username));
|
||
return false;
|
||
}
|
||
$reg_time=strtotime(date('Y-m-d H:i:s'));
|
||
if (!$GLOBALS['user']->add_user($username, $password, $mobile_phone,-1,0,$reg_time))
|
||
{
|
||
if ($GLOBALS['user']->error == ERR_INVALID_USERNAME)
|
||
{
|
||
$GLOBALS['err']->add(sprintf($GLOBALS['_LANG']['username_invalid'], $username));
|
||
}
|
||
elseif ($GLOBALS['user']->error == ERR_USERNAME_NOT_ALLOW)
|
||
{
|
||
$GLOBALS['err']->add(sprintf($GLOBALS['_LANG']['username_not_allow'], $username));
|
||
}
|
||
elseif ($GLOBALS['user']->error == ERR_USERNAME_EXISTS)
|
||
{
|
||
$GLOBALS['err']->add(sprintf($GLOBALS['_LANG']['username_exist'], $username));
|
||
}
|
||
elseif ($GLOBALS['user']->error == ERR_INVALID_EMAIL)
|
||
{
|
||
$GLOBALS['err']->add(sprintf($GLOBALS['_LANG']['email_invalid'], $email));
|
||
}
|
||
elseif ($GLOBALS['user']->error == ERR_EMAIL_NOT_ALLOW)
|
||
{
|
||
$GLOBALS['err']->add(sprintf($GLOBALS['_LANG']['email_not_allow'], $email));
|
||
}
|
||
elseif ($GLOBALS['user']->error == ERR_EMAIL_EXISTS)
|
||
{
|
||
$GLOBALS['err']->add(sprintf($GLOBALS['_LANG']['email_exist'], $email));
|
||
}
|
||
else
|
||
{
|
||
$GLOBALS['err']->add('UNKNOWN ERROR!');
|
||
}
|
||
|
||
//注册失败
|
||
return false;
|
||
}
|
||
else
|
||
{
|
||
//注册成功
|
||
/* 设置成登录状态 */
|
||
$GLOBALS['user']->set_session($username);
|
||
$GLOBALS['user']->set_cookie($username);
|
||
|
||
/* 註冊送積分 */
|
||
if (!empty($GLOBALS['_CFG']['register_points']))
|
||
{
|
||
log_account_change($_SESSION['user_id'], 0, 0, $GLOBALS['_CFG']['register_points'], $GLOBALS['_CFG']['register_points'], $GLOBALS['_LANG']['register_points']);
|
||
}
|
||
|
||
if($a_code=get_agent()){
|
||
$agent_info=$GLOBALS['db']->getRow("SELECT user_id,role_id FROM ". $GLOBALS['ecs']->table('agent_user') ."WHERE agent_code='".$a_code."'");
|
||
if($agent_info['user_id']){
|
||
$flag='a';
|
||
$sql = "UPDATE ". $GLOBALS['ecs']->table('users') . " SET parent_id = " . $agent_info['user_id'] . ",flag='".$flag."' WHERE user_id = " . $_SESSION['user_id'];
|
||
$GLOBALS['db']->query($sql);
|
||
}
|
||
}else{
|
||
/*推荐处理*/
|
||
$affiliate = unserialize($GLOBALS['_CFG']['affiliate']);
|
||
if (isset($affiliate['on']) && $affiliate['on'] == 1)
|
||
{
|
||
// 推荐开关开启
|
||
$t_up_uid = get_affiliate();
|
||
$flag=substr($t_up_uid,0,1);
|
||
|
||
$up_uid=substr($t_up_uid,1);
|
||
|
||
empty($affiliate) && $affiliate = array();
|
||
$affiliate['config']['level_register_all'] = intval($affiliate['config']['level_register_all']);
|
||
$affiliate['config']['level_register_up'] = intval($affiliate['config']['level_register_up']);
|
||
if ($up_uid)
|
||
{
|
||
if (!empty($affiliate['config']['level_register_all']))
|
||
{
|
||
// if (!empty($affiliate['config']['level_register_up']))
|
||
// {
|
||
// $rank_points = $GLOBALS['db']->getOne("SELECT rank_points FROM " . $GLOBALS['ecs']->table('users') . " WHERE user_id = '$up_uid'");
|
||
// if ($rank_points + $affiliate['config']['level_register_all'] <= $affiliate['config']['level_register_up'])
|
||
// {
|
||
// log_account_change($up_uid, 0, 0, $affiliate['config']['level_register_all'], 0, sprintf($GLOBALS['_LANG']['register_affiliate'], $_SESSION['user_id'], $username));
|
||
// }
|
||
// }
|
||
// else
|
||
// {
|
||
log_account_change($up_uid, 0, 0, $affiliate['config']['level_register_all'], 0, $GLOBALS['_LANG']['register_affiliate']);
|
||
// }
|
||
}
|
||
|
||
//设置推荐人
|
||
$sql = "UPDATE ". $GLOBALS['ecs']->table('users') . " SET parent_id = " . $up_uid . ",flag='".$flag."' WHERE user_id = " . $_SESSION['user_id'];
|
||
|
||
$GLOBALS['db']->query($sql);
|
||
}
|
||
}
|
||
}
|
||
|
||
//定义other合法的变量数组
|
||
$other_key_array = array('real_name','msn', 'qq', 'office_phone', 'home_phone', 'mobile_phone');
|
||
$update_data['reg_time'] = local_strtotime(local_date('Y-m-d H:i:s'));
|
||
if ($other)
|
||
{
|
||
foreach ($other as $key=>$val)
|
||
{
|
||
//删除非法key值
|
||
if (!in_array($key, $other_key_array))
|
||
{
|
||
unset($other[$key]);
|
||
}
|
||
else
|
||
{
|
||
$other[$key] = htmlspecialchars(trim($val)); //防止用户输入javascript代码
|
||
}
|
||
}
|
||
$update_data = array_merge($update_data, $other);
|
||
}
|
||
$GLOBALS['db']->autoExecute($GLOBALS['ecs']->table('users'), $update_data, 'UPDATE', 'user_id = ' . $_SESSION['user_id']);
|
||
|
||
update_user_info(); // 更新用户信息
|
||
// recalculate_price(); // 重新计算购物车中的商品价格
|
||
|
||
return true;
|
||
}
|
||
}
|
||
|
||
/**
|
||
*
|
||
*
|
||
* @access public
|
||
* @param
|
||
*
|
||
* @return void
|
||
*/
|
||
function logout()
|
||
{
|
||
/* todo */
|
||
}
|
||
|
||
/**
|
||
* 将指定user_id的密码修改为new_password。可以通过旧密码和验证字串验证修改。
|
||
*
|
||
* @access public
|
||
* @param int $user_id 用户ID
|
||
* @param string $new_password 用户新密码
|
||
* @param string $old_password 用户旧密码
|
||
* @param string $code 验证码(md5($user_id . md5($password)))
|
||
*
|
||
* @return boolen $bool
|
||
*/
|
||
function edit_password($user_id, $old_password, $new_password='', $code ='')
|
||
{
|
||
if (empty($user_id)) $GLOBALS['err']->add($GLOBALS['_LANG']['not_login']);
|
||
|
||
if ($GLOBALS['user']->edit_password($user_id, $old_password, $new_password, $code))
|
||
{
|
||
return true;
|
||
}
|
||
else
|
||
{
|
||
$GLOBALS['err']->add($GLOBALS['_LANG']['edit_password_failure']);
|
||
|
||
return false;
|
||
}
|
||
}
|
||
|
||
/**
|
||
* 会员找回密码时,对输入的用户名和邮件地址匹配
|
||
*
|
||
* @access public
|
||
* @param string $user_name 用户帐号
|
||
* @param string $email 用户Email
|
||
*
|
||
* @return boolen
|
||
*/
|
||
function check_userinfo($user_name, $email)
|
||
{
|
||
if (empty($user_name) || empty($email))
|
||
{
|
||
ecs_header("Location: user.php?act=get_password\n");
|
||
|
||
exit;
|
||
}
|
||
|
||
/* 检测用户名和邮件地址是否匹配 */
|
||
$user_info = $GLOBALS['user']->check_pwd_info($user_name, $email);
|
||
if (!empty($user_info))
|
||
{
|
||
return $user_info;
|
||
}
|
||
else
|
||
{
|
||
return false;
|
||
}
|
||
}
|
||
|
||
/**
|
||
* 用户进行密码找回操作时,发送一封确认邮件
|
||
*
|
||
* @access public
|
||
* @param string $uid 用户ID
|
||
* @param string $user_name 用户帐号
|
||
* @param string $email 用户Email
|
||
* @param string $code key
|
||
*
|
||
* @return boolen $result;
|
||
*/
|
||
function send_pwd_email($uid, $user_name, $email, $code)
|
||
{
|
||
if (empty($uid) || empty($user_name) || empty($email) || empty($code))
|
||
{
|
||
ecs_header("Location: user.php?act=get_password\n");
|
||
|
||
exit;
|
||
}
|
||
|
||
/* 设置重置邮件模板所需要的内容信息 */
|
||
$template = get_mail_template('send_password');
|
||
$reset_email = $GLOBALS['ecs']->url() . 'user.php?act=get_password&uid=' . $uid . '&code=' . $code;
|
||
|
||
$GLOBALS['smarty']->assign('user_name', $user_name);
|
||
$GLOBALS['smarty']->assign('reset_email', $reset_email);
|
||
$GLOBALS['smarty']->assign('shop_name', $GLOBALS['_CFG']['shop_name']);
|
||
$GLOBALS['smarty']->assign('send_date', date('Y-m-d'));
|
||
$GLOBALS['smarty']->assign('sent_date', date('Y-m-d'));
|
||
|
||
$content = $GLOBALS['smarty']->fetch('str:' . $template['template_content']);
|
||
|
||
/* 发送确认重置密码的确认邮件 */
|
||
if (send_mail($user_name, $email, $template['template_subject'], $content, $template['is_html']))
|
||
{
|
||
return true;
|
||
}
|
||
else
|
||
{
|
||
return false;
|
||
}
|
||
}
|
||
|
||
/**
|
||
* 发送激活验证邮件
|
||
*
|
||
* @access public
|
||
* @param int $user_id 用户ID
|
||
*
|
||
* @return boolen
|
||
*/
|
||
function send_regiter_hash ($user_id)
|
||
{
|
||
/* 设置验证邮件模板所需要的内容信息 */
|
||
$template = get_mail_template('register_validate');
|
||
$hash = register_hash('encode', $user_id);
|
||
$validate_email = $GLOBALS['ecs']->url() . 'user.php?act=validate_email&hash=' . $hash;
|
||
|
||
$sql = "SELECT user_name, email FROM " . $GLOBALS['ecs']->table('users') . " WHERE user_id = '$user_id'";
|
||
$row = $GLOBALS['db']->getRow($sql);
|
||
|
||
$GLOBALS['smarty']->assign('user_name', $row['user_name']);
|
||
$GLOBALS['smarty']->assign('validate_email', $validate_email);
|
||
$GLOBALS['smarty']->assign('shop_name', $GLOBALS['_CFG']['shop_name']);
|
||
$GLOBALS['smarty']->assign('send_date', date($GLOBALS['_CFG']['date_format']));
|
||
|
||
$content = $GLOBALS['smarty']->fetch('str:' . $template['template_content']);
|
||
|
||
/* 发送激活验证邮件 */
|
||
if (send_mail($row['user_name'], $row['email'], $template['template_subject'], $content, $template['is_html']))
|
||
{
|
||
return true;
|
||
}
|
||
else
|
||
{
|
||
return false;
|
||
}
|
||
}
|
||
|
||
/**
|
||
* 生成邮件验证hash
|
||
*
|
||
* @access public
|
||
* @param
|
||
*
|
||
* @return void
|
||
*/
|
||
function register_hash ($operation, $key)
|
||
{
|
||
if ($operation == 'encode')
|
||
{
|
||
$user_id = intval($key);
|
||
$sql = "SELECT reg_time ".
|
||
" FROM " . $GLOBALS['ecs'] ->table('users').
|
||
" WHERE user_id = '$user_id' LIMIT 1";
|
||
$reg_time = $GLOBALS['db']->getOne($sql);
|
||
|
||
$hash = substr(md5($user_id . $GLOBALS['_CFG']['hash_code'] . $reg_time), 16, 4);
|
||
|
||
return base64_encode($user_id . ',' . $hash);
|
||
}
|
||
else
|
||
{
|
||
$hash = base64_decode(trim($key));
|
||
$row = explode(',', $hash);
|
||
if (count($row) != 2)
|
||
{
|
||
return 0;
|
||
}
|
||
$user_id = intval($row[0]);
|
||
$salt = trim($row[1]);
|
||
|
||
if ($user_id <= 0 || strlen($salt) != 4)
|
||
{
|
||
return 0;
|
||
}
|
||
|
||
$sql = "SELECT reg_time ".
|
||
" FROM " . $GLOBALS['ecs'] ->table('users').
|
||
" WHERE user_id = '$user_id' LIMIT 1";
|
||
$reg_time = $GLOBALS['db']->getOne($sql);
|
||
|
||
$pre_salt = substr(md5($user_id . $GLOBALS['_CFG']['hash_code'] . $reg_time), 16, 4);
|
||
|
||
if ($pre_salt == $salt)
|
||
{
|
||
return $user_id;
|
||
}
|
||
else
|
||
{
|
||
return 0;
|
||
}
|
||
}
|
||
}
|
||
|
||
/**
|
||
* 判断超级管理员用户名是否存在
|
||
* @param string $adminname 超级管理员用户名
|
||
* @return boolean
|
||
*/
|
||
function admin_registered( $adminname )
|
||
{
|
||
$res = $GLOBALS['db']->getOne("SELECT COUNT(*) FROM " . $GLOBALS['ecs']->table('admin_user') .
|
||
" WHERE user_name = '$adminname'");
|
||
return $res;
|
||
}
|
||
|
||
?>
|