<?php
	$db=mysql_pconnect(get_cfg_var("SIPSERVER"),get_cfg_var("SIPUSER"),get_cfg_var("SIPPWD"));
	mysql_select_db(get_cfg_var("SIPDB"),$db);
	$n=0;
	$timestr=strftime("%Y-%m-%d %H:%M:%S");
	$bPass=FALSE;
	$loginname=trim($_REQUEST["loginname"]);
	$password=trim($_REQUEST["password"]);
	$userIP = $_SERVER["REMOTE_ADDR"];			//读取该用户当前使用电脑IP地址
	$rs = mysql_query("select userid from login where ipaddr='".$userIP."'",$db);		//查找该IP是否已经登录
	if ( ($row = mysql_fetch_array($rs))==FALSE ) {			//还没有登录
		mysql_free_result($rs);
		if ($loginname!="" && $password!="") {						//输入了用户ID
			$rs = mysql_query("select userid,password,type,onlines,cookiemask,gpid,ipaddr,suspend,mac from users where loginname='".$loginname."' and checked='n'",$db);		//查找该用户ID记录
			if ( ($row = mysql_fetch_array($rs))==FALSE ) {										//没有找到
				mysql_free_result($rs);
				$n=1;				//不存在该用户ID
			}
			else {
				$userid = $row["userid"];
				$usertype = $row["type"];
				$password1=$row["password"];
				$maxonline=$row["onlines"];
				$cookiemask=$row["cookiemask"];
				$gpid = $row["gpid"];
				$allowip = $row["ipaddr"];
				$suspend = $row["suspend"];
				if (is_null($suspend)) {
					$suspend="";
				}
				$mac = $row["mac"];
				mysql_free_result($rs);
				if (is_null($cookiemask)) {
					$cookiemask="1234567890";
				}
				if (is_null($allowip)) {
					$allowip="";
				}
				$bPass=FALSE;
				if ($loginname!="" && $password!="") {
					if ($password==$password1) {					//比较密码
						$bPass=TRUE;
					}
				}
				else {
					$md5str=md5($loginname.",".$cookiemask.",".$password1);
					if ($md5str==$ClientPWD) {
						$bPass=TRUE;
					}
				}
				if (!$bPass) {					//比较密码
					$n=2;			//密码不对
				}
				else {
					if ($suspend!="y") {		//不是欠费状态
						$onlineusers=0;
						$rs = mysql_query("select count(ipaddr) as allcount from login where userid='".$userid."'",$db);		//查找该用户ID是否已经登录过
						if ($row = mysql_fetch_array($rs)) {
							$onlineusers=$row["allcount"];
						}
						mysql_free_result($rs);
						if ($onlineusers<$maxonline) {		//还没有达到用户ID的同时最多在线数限制
							if ($allowip=="") {		//用户没有登录IP地址限制
								$allowip=$userIP;
							}
							if ($allowip==$userIP) {		//客户机登录IP地址就是设定用户使用IP地址
								$rs=mysql_query("select typemode,unit,limittype,limithour,limitflow from types where typeid='".$usertype."'",$db);
								if ($row = mysql_fetch_array($rs)) {
									$typemode=$row["typemode"];
									$typeunit=$row["unit"];
									$limittype=$row["limittype"];
									$limithour=$row["limithour"];
									$limitflow=$row["limitflow"];
									mysql_free_result($rs);
									$remaintime=0;
									$remaindata=0;
									$bPass=FALSE;
									if ($typemode=="0") {		//免费
										$bPass=TRUE;
									} elseif ($typemode=="2") {		//先使用后结算，不检查上网时间和流量是否用完
										//但还需要检查是否有包天、包月使用时间和流量限制
										if ($limittype=="2" && ($typeunit==3 || $typeunit==4) && ($limithour>0 || $limitflow>0)) {		//有限制，而且不能超过，而且是天或者月的类型，才可能有单位时间内的限制
											$rs=mysql_query("select starttime from usertime where userid='".$userid."' and overed='n'",$db);
											$starttime=$row["starttime"];
											mysql_free_result($rs);
											$str1="";
											$str2="";
											//计算当前所在开始时间和结束时间范围
											$ret=GetTimeRange($typeunit,$starttime,$str1,$str2);
											//计算出当前时刻所在时间范围内的已上网时间和流量
											$alltime=0;
											$alldata=0;
											$rs=mysql_query("select sum(facttime) as alltime,sum(factdata) as alldata from history where userid='".$userid."' and starttime>='".$str1."' and starttime<='".$str2."'",$db);	//以打折后的使用量计算
											if ($row = mysql_fetch_array($rs)) {
												$alltime=$row["alltime"];
												if (is_null($alltime)) {
													$alltime=0;
												}
												$alldata=$row["alldata"];
												if (is_null($alldata)) {
													$alldata=0;
												}
											}
											mysql_free_result($rs);
											if ($alltime>0) {
												$bPass=TRUE;
												if ($limithour>0) {
													if ($alltime>=$limithour*3600) {		//已经超过当月（天）使用小时数的限制
														$n=3;							//本月（天）上网时间已经超过使用小时数的限制
														$bPass=FALSE;
													} else {
														$remaintime=$limithour*3600-$alltime;		//本月（天）剩下时间
													}
												}
												if ($limitflow>0) {
													if ($alldata>=$limitflow*1024) {		//已经超过当月（天）使用流量数的限制
														$n=3;							//本月（天）上网流量已经超过使用流量数的限制
														$bPass=FALSE;
													} else {
														$remaindata=$limitflow*1024-$alldata;		//本月（天）剩下流量
													}
												}
											} else {			//当月（天）还完全没有上过网
												$bPass=TRUE;
												$remaintime=$limithour*3600;
												$remaindata=$limitflow*1024;
											}
											if ($bPass) {
												if ($remaintime>DateDiff("s",time(),strtotime($str2))) {		//本月（天）剩下时间超过现在到本月（天）结束的时间间隔
													$remaintime=DateDiff("s",time(),strtotime($str2));		//剩下时间就取较小者
												}
											}
										} else {
											$bPass=TRUE;
											$remaintime=0;
											$remaindata=0;
										}
									} else {			//先购买后使用
										//检查该用户的上网时间或流量是否已经用完
										$rs=mysql_query("select starttime,length,datalength from usertime where userid='".$userid."' and overed='n'",$db);
										if ( ($row = mysql_fetch_array($rs))==FALSE ) {		//该用户时间或者流量已经用完，且没有续费增加
											$n=5;
											mysql_free_result($rs);
										} else {
											$starttime=$row["starttime"];
											$length=$row["length"];
											$datalength=$row["datalength"];
											mysql_free_result($rs);
											if ($typeunit==1) {		//按分钟计时
												$rs=mysql_query("select sum(facttime) as alltime from history where userid='".$userid."' and starttime>='".$starttime."'",$db);
												if ($row = mysql_fetch_array($rs)) {
													$alltime=$row["alltime"];
													if (is_null($alltime)) {
														$alltime=0;
													}
													if ($alltime>=$length*60) {		//已经超过购买的时间总数
														$n=5;			//购买时间已经用完
													} else {
														$bPass=TRUE;
														$remaintime=$length*60-$alltime;
													}
												} else { 				//还没有上网记录
													$bPass=TRUE;
													$remaintime=$length*60;
												}
												mysql_free_result($rs);
											} elseif ($typeunit==2) {		//按小时计时
												$rs=mysql_query("select sum(facttime) as alltime from history where userid='".$userid."' and starttime>='".$starttime."'",$db);
												if ($row = mysql_fetch_array($rs)) {
													$alltime=$row["alltime"];
													if (is_null($alltime)) {
														$alltime=0;
													}
													if ($alltime>=$length*3600) {		//已经超过购买的时间总数
														$n=5;			//购买时间已经用完
													} else {
														$bPass=TRUE;
														$remaintime=$length*3600-$alltime;
													}
												} else { 				//还没有上网记录
													$bPass=TRUE;
													$remaintime=$length*3600;
												}
												mysql_free_result($rs);
											} elseif ($typeunit==3) {		//包天
												if (time()<strtotime("+".strval($length)." day",strtotime($starttime))) {			//还没到天数期限
													if ($limittype=="2" && ($limithour>0 || $limitflow>0)) {		//有限制，而且不能超过
														$str1="";
														$str2="";
														//计算当前所在开始时间和结束时间范围
														$ret=GetTimeRange($typeunit,$starttime,$str1,$str2);
														//计算出当前时刻所在时间范围内的已上网时间和流量
														$alltime=0;
														$alldata=0;
														$rs=mysql_query("select sum(facttime) as alltime,sum(factdata) as alldata from history where userid='".$userid."' and starttime>='".$str1."' and starttime<='".$str2."'",$db);	//以打折后的使用量计算
														if ($row = mysql_fetch_array($rs)) {
															$alltime=$row["alltime"];
															if (is_null($alltime)) {
																$alltime=0;
															}
															$alldata=$row["alldata"];
															if (is_null($alldata)) {
																$alldata=0;
															}
														}
														mysql_free_result($rs);
														if ($alltime>0) {
															$bPass=TRUE;
															if ($limithour>0) {
																if ($alltime>=$limithour*3600) {		//已经超过当天使用小时数的限制
																	$n=3;							//本天上网时间已经超过使用小时数的限制
																	$bPass=FALSE;
																} else {
																	$remaintime=$limithour*3600-$alltime;		//本天剩下时间
																}
															}
															if ($limitflow>0) {
																if ($alldata>=$limitflow*1024) {		//已经超过当天使用流量数的限制
																	$n=3;							//本天上网流量已经超过使用流量数的限制
																	$bPass=FALSE;
																} else {
																	$remaindata=$limitflow*1024-$alldata;		//本天剩下流量
																}
															}
														} else {			//当天还完全没有上过网
															$bPass=TRUE;
															$remaintime=$limithour*3600;
															$remaindata=$limitflow*1024;
														}
														if ($bPass) {
															if ($remaintime>DateDiff("s",time(),strtotime($str2))) {		//本天剩下时间超过现在到本天结束的时间间隔
																$remaintime=datediff("s",time(),strtotime($str2));		//剩下时间就取较小者
															}
														}
													} else {
														$bPass=TRUE;
														$remaintime=DateDiff("s",time(),strtotime("+".strval($length)." day",strtotime($starttime)));		//可上网时间为到包天到期时间为止
														$remaindata=0;
													}
												} else {
													$n=5;
												}
											} elseif ($typeunit==4 || $typeunit==5) {		//包月、包年
												if (time()<strtotime("+".strval($length)." month",strtotime($starttime))) {			//还没到月数期限
													if ($limittype=="2" && ($limithour>0 || $limitflow>0)) {		//有限制，而且不能超过
														$str1="";
														$str2="";
														//计算当前所在开始时间和结束时间范围
														$ret=GetTimeRange($typeunit,$starttime,$str1,$str2);
														//计算出当前时刻所在时间范围内的已上网时间和流量
														$alltime=0;
														$alldata=0;
														$rs=mysql_query("select sum(facttime) as alltime,sum(factdata) as alldata from history where userid='".$userid."' and starttime>='".$str1."' and starttime<='".$str2."'",$db);	//以打折后的使用量计算
														if ($row = mysql_fetch_array($rs)) {
															$alltime=$row["alltime"];
															if (is_null($alltime)) {
																$alltime=0;
															}
															$alldata=$row["alldata"];
															if (is_null($alldata)) {
																$alldata=0;
															}
														}
														mysql_free_result($rs);
														//计算出当前时刻所在月度时间范围内的已上网时间和流量
														if ($alltime>0) {
															$bPass=TRUE;
															if ($limithour>0) {
																if ($alltime>=$limithour*3600) {		//已经超过当月使用小时数的限制
																	$n=3;
																	$bPass=FALSE;							//本月上网时间已经超过使用小时数的限制
																} else {
																	$remaintime=$limithour*3600-$alltime;		//本月剩下时间
																}
															}
															if ($limitflow>0) {
																if ($alldata>=$limitflow*1024) {		//已经超过当月使用流量数的限制
																	$n=3;							//本月上网流量已经超过使用流量数的限制
																	$bPass=FALSE;
																} else {
																	$remaindata=$limitflow*1024-$alldata;		//本月剩下流量
																}
															}
														} else {			//当月还完全没有上过网
															$bPass=TRUE;
															$remaintime=$limithour*3600;
															$remaindata=$limitflow*1024;
														}
														if ($bPass) {
															if ($remaintime>DateDiff("s",time(),strtotime($str2))) {		//本月剩下时间超过现在到本月结束的时间间隔
																$remaintime=DateDiff("s",time(),strtotime($str2));		//剩下时间就取较小者
															}
														}
													} else {
														$bPass=TRUE;
														$remaintime=DateDiff("s",time(),strtotime("+".strval($length)." month",strtotime($starttime)));		//可上网时间为到包月到期时间为止
														$remaindata=0;
													}
												} else {
													$n=5;
												}
											} elseif ($typeunit==6 || $typeuint==7) {		//计流量
												$rs=mysql_query("select sum(factdata) as alldata from history where userid='".$userid."' and starttime>='".$starttime."'",$db);
												if ($row = mysql_fetch_array($rs)) {
													$alldata=$row["alldata"];		//上网记录的流量是以k为单位
													if (is_null($alldata)) {
														$alldata=0;
													}
													if ($alldata>=$datalength*1024) {		//已经超过购买的流量总数
														$n=5;
													} else {
														$bPass=TRUE;
														$remaindata=$datalength*1024-$alldata;
													}
												} else { 			//还没有上过网
													$bPass=TRUE;
													$remaindata=$datalength*1024;			//都是以m计流量
												}
												mysql_free_result($rs);
											} else {
												$bPass=FALSE;
											}
											if (!$bPass && $n!=3) {		//设置时间已经用完标志。n=3是当月时间限制达到，不等于全部时间用完
												mysql_query("update usertime set overed='y' where userid='".$userid."' and overed='n'",$db);
											}
										}
									}
								} else {
									mysql_free_result($rs);
									$n=11;	//非法的计费类
								}
							}
							else {
								$bPass=FALSE;
								$n=9;			//非法的客户机IP地址
							}
							if ($bPass) {
								//还需要判断用户每天允许上网的时间范围
								$w=intval(strftime("%w"));
								if ($w==0) $w=7;
								$rs = mysql_query("select starttime,endtime from allowtimelist where userid='".$userid."' and (weeknumber=0 or weeknumber=".strval($w).") order by starttime",$db);
								if ($row = mysql_fetch_array($rs)) {		//需要判断是否在每天允许上网的时间范围内
									$bPass=FALSE;
									$datestr=strftime("%Y-%m-%d");
									while ($row) {
										$starttime=$datestr." ".$row["starttime"].":00";
										$endtime=$datestr." ".$row["endtime"].":00";
										if ( DateDiff("s",time(),strtotime($starttime))<=0 and DateDiff("s",time(),strtotime($endtime))>0 ) {		//登录时间大于开始时间，小于结束时间，落在一个允许的时间范围内
											$remaintime=DateDiff("s",time(),strtotime($endtime));	//本次允许的上网时间只持续到该时间范围段结束
											$bPass=TRUE;
											break;
										}
										$row = mysql_fetch_array($rs);
									}
									mysql_free_result($rs);
								}
								else {			//检查其所属组别是否存在每天上网时间段限制
									mysql_free_result($rs);
									if ($gpid>0) {		//存在组别
										$rs = mysql_query("select starttime,endtime from allowtimelist where userid='gp_".strval($gpid)."' and (weeknumber=0 or weeknumber=".strval($w).") order by starttime",$db);
										if ($row = mysql_fetch_array($rs)) {		//组别需要判断是否在每天允许上网的时间范围内
											$bPass=FALSE;
											$datestr=strftime("%Y-%m-%d");
											while ($row) {
												$starttime=$datestr." ".$row["starttime"].":00";
												$endtime=$datestr." ".$row["endtime"].":00";
												if ( DateDiff("s",time(),strtotime($starttime))<=0 and DateDiff("s",time(),strtotime($endtime))>0 ) {		//登录时间大于开始时间，小于结束时间，落在一个允许的时间范围内
													$remaintime=DateDiff("s",time(),strtotime($endtime));	//本次允许的上网时间只持续到该时间范围段结束
													$bPass=TRUE;
													break;
												}
												$row = mysql_fetch_array($rs);
											}
										}
										mysql_free_result($rs);
									}
								}
								if ($bPass) {
									//向登录表中插入当前用户上网新记录
									mysql_query( "insert into login(ipaddr,userid,type,remaintime,remaindata,logintime,maskword,mac) values('".$userIP."','".$userid."','".$usertype."',".strval($remaintime).",".strval($remaindata).",'".$timestr."','n','".$mac."')",$db );
									$tmprs = mysql_query("select ipaddr from contact where ipaddr='".$userIP."'",$db);
									if ( ($tmprow = mysql_fetch_array($tmprs))==FALSE ) {
										mysql_free_result($tmprs);
										mysql_query( "insert into contact(ipaddr,contacttime) values('".$userIP."',".strval(time()).")",$db );
									}
									else {
										mysql_free_result($tmprs);
										mysql_query( "update contact set contacttime=".strval(time())." where ipaddr='".$userIP."'",$db );
									}
									$_SESSION["userid"]=$userid;
									$n=4;				//登录成功
								}
								else {
									$n=8;				//不在每天允许上网的时间登录
								}
							}
						}
						else {
							$n=6;					//已经达到最多在线数限制
						}
					}
					else {
						$n=11;		//欠费
					}
				}
			}
		}
		else {
			$n=10;				//没有输入用户ID
		}
	}
	else {
		$_SESSION["userid"]=$row["userid"];
		mysql_free_result($rs);
		$n=7;					//已经登录
		$bPass=TRUE;
	}
	mysql_close($db);
	if ($bPass) {		//登录成功，转到对外主页
		$_SESSION["StartTime"]=$timestr;
		ob_clean();
		header("Location: logout.php");
		exit;
	}
?>


</html>

<html>

<head>
<title>User Login</title>

<script language="javascript">
document.oncontextmenu=mymenu;

function mymenu()
{
	window.event.returnValue=false;
}

function myload() 
{
<?php
	//登录未成功，显示原因
	if ($n==1) {
		echo("alert(".Chr(34)."There don't exist this UserID!".Chr(34).");");
	}
	elseif ($n==2) {
		echo("alert(".chr(34)."Password is incorrect!".chr(34).");");
	}
	elseif ($n==3) {
		echo("alert(".chr(34)."Time or flow is over in this month or day!".chr(34).");");
	}
	elseif ($n==5) {
		echo("alert(".chr(34)."You have been consumed by all.Please top-up!".chr(34).");");
	}
	elseif ($n==6) {
		echo("alert(".chr(34)."UserID is used by another!\\r\\nThere can exist only one login at one time for one UserID!".chr(34).");");
	}
	elseif ($n==8) {
		echo("alert(".chr(34)."Forbid to be on line at current time!".chr(34).");");
	}
	elseif ($n==9) {
		echo("alert(".chr(34)."Client computer ip address is wrong!".chr(34).");");
	}
	elseif ($n==10) {
		//echo("alert(".chr(34)."You must input the userid and password!".chr(34).");");
	}
	elseif ($n==11) {
		echo("alert(".chr(34)."You should to check-out!".chr(34).");");
	}
	else {
		echo("authentication is not successful!");
	}
?>
}
</script>

</head>

<body background="../bkg.bmp" onload="javascript:myload();">

<p align="center"><font size="5"><b>User Login</b></font></p>
<hr color="#999966">
<p></p>
<div align="center">
  <center>
  <form name="form1" method="POST" action="login.php">
  <table border="1" width="342" height="146" bordercolor="#008080" cellspacing="0" cellpadding="0">
    <tr>
      <td width="100" align="right" height="44">User ID</td>
      <td width="228" align="center" height="44">
          <input type="text" name="loginname" size="20">
        </td>
    </tr>
    <tr>
      <td width="100" align="right" height="44">Password</td>
      <td width="228" align="center" height="44">
          <input type="password" name="password" size="20">
        </td>
    </tr>
    <tr>
      <td colspan="2" width="334" align="center" height="52"><input type="submit" value="Login" name="B1"></td>
    </tr>
  </table>
  </form>
  </center>
</div>
<p></p>
<hr>
<p align="center">SIPMonitor System</p>

</body>

</html>

<?php
function GetTimeRange($typeunit,$starttime,&$str1,&$str2)
{
	if ($typeunit==3) {		//以当天为时间范围
		$str1=strftime("%Y-%m-%d 00:00:00");
		$str2=strftime("%Y-%m-%d 23:59:59");
	}
	else {				//月
		$m=DateDiff("m",strtotime($starttime),time());
		if ( intval(date("j"))>=intval(date("j",strtotime($starttime))) ) {		//计算出当月所在的起止时间段
			$tmptime1=strtotime("+".strval($m)." month",strtotime($starttime));
			$tmptime2=strtotime("+".strval($m+1)." month",strtotime($starttime));
		} else {
			$tmptime1=strtotime("+".strval($m-1)." month",strtotime($starttime));
			$tmptime2=strtotime("+".strval($m)." month",strtotime($starttime));
		}										//计算出当月所在的起止时间段
		$str1=strftime("%Y-%m-%d %H:%M:%S",$tmptime1);
		$str2=strftime("%Y-%m-%d %H:%M:%S",$tmptime2);
	}
	return 1;
}

function DateDiff($opertype,$starttime,$endtime)
{
	if ($starttime>=$endtime) return 0;	//starttime在endtime之后，返回0
	$n=0;
	if ($opertype=="d") {
		if ( strftime("%Y-%m-%d",$starttime)==strftime("%Y-%m-%d",$endtime) ) return 0;	//同一天
		while (TRUE) {
			$n++;
			if ( strftime("%Y-%m-%d",strtotime("+".strval($n)." day",$starttime))==strftime("%Y-%m-%d",$endtime) ) {
				//年月日部分已经相同
				break;
			}
		}
	}
	elseif ($opertype=="m") {
		if ( strftime("%Y-%m",$starttime)==strftime("%Y-%m",$endtime) ) return 0;	//同一月
		while (TRUE) {
			$n++;
			if ( strftime("%Y-%m",strtotime("+".strval($n)." month",$starttime))==strftime("%Y-%m",$endtime) ) {
				//年月部分已经相同
				break;
			}
		}
	}
	elseif ($opertype=="yyyy") {
		if ( strftime("%Y",$starttime)==strftime("%Y",$endtime) ) return 0;	//同一年
		while (TRUE) {
			$n++;
			if ( strftime("%Y",strtotime("+".strval($n)." year",$starttime))==strftime("%Y",$endtime) ) {
				//年部分已经相同
				break;
			}
		}
	}
	elseif ($opertype=="s") {
		$n=$endtime-$starttime;
	}
	else {
		$n=0;
	}
	return $n;
}
?>
