You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

267 lines
9.5 KiB

4 years ago
<?php
/**
* Created by xiaofu.qin
* Description: 在index.php上使用。向数据库提取用户的信息,对外提供的类名为:getUserInfo,没有参数,但是必须在登录的情况下才能使用。
*/
if( !defined('FINEREPORT' )) {
header('Location:http:www.finereport.com');
exit('Hello world');
}
require_once 'myFunc/chineseToUnicode.php';
class getUserInfo{
//用户登录的方式——当前站点登录还是响应其他站点登录
private $logType;
private $uid;
public $username;
public $email;
public $realName;
public $mobile;
public $company;
public $qq;
# 用户收件地址
public $address;
public $level;
public $allowadmincp;
public $groupid;
#注册时间
public $regDate;
#fineReport和fineBI产品的激活码以及激活的时间
public $frActivityCode;
public $fbiActivityCode;
public $frActivityTime;
public $fbiActivityTime;
#该用户在请求激活码的时候填写的公司职位
public $position;
#该用户在填写激活码的时候填写的对fineReport产品的需求
public $demand;
#连接数据库使用的属性
private $stmt;
private $conn;
public function __construct(){
/*
* 数据库连接的句柄
*/
$this->conn = connect();
/**
* 如果用户在当前站点登录,那么就会有username和password、uid的session;如果当前站点是响应其他的站点进行登录的话,那么就只会有synUid这个session。
*/
if( isset($_SESSION['username']) ) {
$this->uid = $_SESSION['uid'];
$this->logType = 'current';
}else if( isset($_SESSION['synUid']) && $_SESSION['synUid'] > 0) {
$this->uid = $_SESSION['synUid'];
$this->logType = 'syn';
}
}
public function main() {
//TODO:主函数,分别执行两个获取信息的函数
$this->getInfoFromUcenterMembers();
$this->getRestInfoFromProfileTable();
$this->getUserState();
$this->setSession();
return $this;
}
public function setSession() {
$allInfo = $this->getInfo();
foreach ($allInfo as $key=>$value){
$_SESSION[$key] = $value;
}
}
public function getInfo() {
//TODO:将从数据库中获取的数据返回给调用者
return array(
"uid" => $this->uid,
"email"=> $this->email,
"username" => $this->username,
"realName" => $this->realName,
"regDate" => $this->regDate,
"qq" => $this->qq,
#公司以及职能
"company" => $this->company,
"position" => $this->position,
"demand" => $this->demand,
"mobile" => $this->mobile,
"address" => $this->address,
"level" => $this->level,
"allowadmincp" => $this->allowadmincp,
"groupid" => $this->groupid,
"frActivityCode" => $this->frActivityCode,
"fbiActivityCode" => $this->fbiActivityCode,
"frActivityTime" => $this->frActivityTime,
"fbiActivityTime" => $this->fbiActivityTime
);
}
public function __get($name){
// TODO: Implement __get() method.
if( isset($this->$name)) {
return $this->$name;
}else{
return "Invalid variable name";
}
}
public function getInfoFromUcenterMembers() {
//TODO:从pre_ucenter_members表中获取email、username、和注册时间的信息
$sql = "select username, email, regdate from pre_ucenter_members where uid=?";
//这里需要测试一下如果sql有问题会不会抛出错误
$this->stmt = $this->conn->prepare($sql);
$this->judgeStmt($sql);
$this->stmt->bind_param('i', $this->uid);
$this->stmt->execute();
$this->stmt->store_result();
$this->stmt->bind_result($this->username, $this->email, $this->regDate);
$this->stmt->fetch();
$this->freeResult();
//将注册时间转换成字符串格式
// $when = new DateTime(strval($this->regDate));
// $when->setTimezone(new DateTimeZone('Asia/Shanghai'));
// $this->regDate = $when->format('Y/m/d');
$this->regDate = date('Y-m-d', $this->regDate);
}
/**
* 从pre_common_member_profile表中获取realname、qq、mobile、company、finereportActivityCode和finebiActivityCode、以及职位、对fineReport产品的需求的信息
*/
public function getRestInfoFromProfileTable() {
$sql = "select realname, qq, company, address, mobile, finereport_code, finebi_code, `position`, field4, finereport_activation_time, finebi_activation_time from pre_common_member_profile where uid=?";
$this->stmt = $this->conn->prepare($sql);
$this->judgeStmt($sql);
$this->stmt->bind_param('i', $this->uid);
$this->stmt->execute();
$this->stmt->store_result();
$this->stmt->bind_result($this->realName, $this->qq, $this->company, $this->address, $this->mobile, $this->frActivityCode, $this->fbiActivityCode, $this->position, $this->demand, $this->frActivityTime, $this->fbiActivityTime);
$this->stmt->fetch();
$this->freeResult();
//将数据库中保存的unicode编码转换成中文
if( strpos($this->company, '[') !== false ) {
$this->company = unicodeToChinese($this->company);
}
if( strpos($this->realName, '[') !== false ) {
$this->realName = unicodeToChinese($this->realName);
}
//将数据库中保存的unicode编码转换成中文
if( strpos($this->demand, '[') !== false ) {
$this->demand = unicodeToChinese($this->demand);
}
}
/**
* 获取数据库中的公司、职位以及对fineReport产品的需求的信息
*/
public function getCompany() {
//TODO:获取pre_common_member_profile表中的company字段数据
$sql = "select company, `position`, field4, realName from pre_common_member_profile where uid=?";
//这里需要测试一下如果sql有问题会不会抛出错误
$this->stmt = $this->conn->prepare($sql);
$this->judgeStmt($sql);
$this->stmt->bind_param('i', $this->uid);
$this->stmt->execute();
$this->stmt->store_result();
$this->stmt->bind_result($this->company, $this->position, $this->demand, $this->realName);
$this->stmt->fetch();
$this->freeResult();
//将数据库中保存的unicode编码转换成中文
if( strpos($this->company, '[') !== false ) {
$this->company = unicodeToChinese($this->company);
} if( strpos($this->realName, '[') !== false ) { $this->realName = unicodeToChinese($this->realName); }
//将数据库中保存的unicode编码转换成中文
if( strpos($this->demand, '[') !== false ) {
$this->demand = unicodeToChinese($this->demand);
}
}
public function checkProduceActivationCode() {
//TODO:获取pre_common_member_profile表中的finereport_code, finebi_code字段数据
$sql = "select finereport_code, finebi_code from pre_common_member_profile where uid=?";
//这里需要测试一下如果sql有问题会不会抛出错误
$this->stmt = $this->conn->prepare($sql);
$this->judgeStmt($sql);
$this->stmt->bind_param('i', $this->uid);
$this->stmt->execute();
$this->stmt->store_result();
$this->stmt->bind_result($this->frActivityCode, $this->fbiActivityCode);
$this->stmt->fetch();
$this->freeResult();
}
public function getUserState() {
//TODO:获取pre_common_member表中的用户组、权限信息
$sql = "select pcm.groupid,allowadmincp,grouptitle from pre_common_member as pcm join pre_common_usergroup as pcu on pcm.groupid = pcu.groupid where uid=?";
//这里需要测试一下如果sql有问题会不会抛出错误
$this->stmt = $this->conn->prepare($sql);
$this->judgeStmt($sql);
$this->stmt->bind_param('i', $this->uid);
$this->stmt->execute();
$this->stmt->store_result();
$this->stmt->bind_result($this->groupid, $this->allowadmincp, $this->level);
$this->stmt->fetch();
$this->freeResult();
}
protected function judgeStmt($sql) {
/*
* 判断当前的预处理语句执行之后是否正确
*/
if( !$this->stmt ) {
throw new Exception('预处理语句有错,请检查——'.$sql);
}else{
return true;
}
}
protected function freeResult() {
$this->stmt->free_result();
}
public function __destruct(){
// TODO: Implement __destruct() method.
$this->freeResult();
$this->conn->close();
}
}
//计算两个日期之差,服务器的PHP不支持这个
function diffTime1($timeStempOne, $timeStempTwo) {
// $first = new DateTime('@'.strval($timeStempOne), new DateTimeZone('Asia/Shanghai'));
// $second = new DateTime('@'.strval($timeStempTwo), new DateTimeZone('Asia/Shanghai'));
//
// $diff = $second->diff($first);
//
// $str = "还有{$diff->format('%a')}天过期";
// return $str;
}
function diffTime($timeOne, $timeTwo) {
//需要$timeOne 大于$timeTwo
if( $timeOne < $timeTwo ) {
list( $timeOne, $timeTwo ) = array($timeTwo, $timeOne);
}
$day = intval(($timeOne-$timeTwo) / (3600 * 24));
$str = "还有{$day}天过期";
return $str;
}