📄 index.lib.php3
字号:
<?php
// Get the names and values for vars sent to index.lib.php3
if (isset($HTTP_GET_VARS))
{
while(list($name,$value) = each($HTTP_GET_VARS))
{
$$name = $value;
};
};
// Get the names and values for vars posted from the form bellow
if (isset($HTTP_POST_VARS))
{
while(list($name,$value) = each($HTTP_POST_VARS))
{
$$name = $value;
};
};
require("./${ChatPath}config/config.lib.php3");
require("./${ChatPath}lib/release.lib.php3");
require("./${ChatPath}localization/languages.lib.php3");
require("./${ChatPath}localization/".$L."/localized.chat.php3");
require("./${ChatPath}lib/database/".C_DB_TYPE.".lib.php3");
require("./${ChatPath}lib/clean.lib.php3");
// Special cache instructions for IE5+
$CachePlus = "";
if (ereg("MSIE [56789]",getenv("HTTP_USER_AGENT"))) $CachePlus = ", pre-check=0, post-check=0, max-age=0";
header("Expires: Sun, 28 Dec 1997 09:32:45 GMT");
header("Last-Modified: ".gmdate("D, d M Y H:i:s GMT"));
header("Cache-Control: no-cache, must-revalidate".$CachePlus);
header("Pragma: no-cache");
header("Content-Type: text/html; charset=${Charset}");
// avoid server configuration for magic quotes
set_magic_quotes_runtime(0);
// Get the relative path to the script that called this one
if (!isset($PHP_SELF)) $PHP_SELF = $HTTP_SERVER_VARS["PHP_SELF"];
$Action = basename($PHP_SELF);
$From = urlencode(ereg_replace("[^/]+/","../",$ChatPath).$Action);
// For translations with a real iso code
if (!isset($FontFace)) $FontFace = "";
// For others translations
$DisplayFontMsg = !(isset($U) && $U != "");
// Translate to html special characters, and entities if message was sent with a latin 1 charset
$Latin1 = ($Charset == "iso-8859-1");
function special_char($str,$lang)
{
return addslashes($lang ? htmlentities(stripslashes($str)) : htmlspecialchars(stripslashes($str)));
};
// Ensure a room ($what) is include in a rooms list ($in)
function room_in($what, $in)
{
$rooms = explode(",",$in);
for (reset($rooms); $room_name=current($rooms); next($rooms))
{
if (strcasecmp($what, $room_name) == 0) return true;
};
return false;
};
// Define the message to display if user comes here because he has been kicked
if (isset($KICKED))
{
switch ($KICKED)
{
case '1':
$Error = L_REG_18;
break;
case '2':
$Error = L_REG_39;
break;
case '3':
$Error = L_ERR_USR_19;
break;
case '4':
$Error = L_ERR_USR_20;
};
};
$DbLink = new DB;
// Removes user from users table and if necessary add a notication message for him
if(isset($E) && $E != "")
{
$DbLink->query("DELETE FROM ".C_USR_TBL." WHERE username='$U' AND room='$E'");
if (isset($EN) && $DbLink->affected_rows() > 0) $DbLink->query("INSERT INTO ".C_MSG_TBL." VALUES ($EN, '$E', 'SYS exit', '', ".time().", '', 'sprintf(L_EXIT_ROM, \"".special_char($U,$Latin1)."\")')");
};
// If no room is specified but the main form has been posted, define the room to enter
// in as the first among default ones
if ((isset($Form_Send) && $Form_Send) && (((C_VERSION == 0) || ((!isset($R0) || $R0 == "") && (!isset($R1) || $R1 == "") && (!isset($R2) || $R2 == ""))))) $R0 = $DefaultChatRooms[0];
//** Ensures the nick is a valid one except if the frameset is reloaded because of the
// NN4+ resize bug or because the user runs a join command. **
if(!isset($Reload) && isset($U) && (isset($N) && $N != ""))
{
$relog = false;
if (C_BAD_WORDS == 1) include("./${ChatPath}lib/swearing.lib.php3");
// Check for no nick entered in
if ($U == "")
{
$Error = L_ERR_USR_2;
}
// Check for invalid characters or empty nick
elseif (trim($U) == "" || ereg("[\, ]", stripslashes($U)))
{
$Error = L_ERR_USR_16;
}
// Check for bad words in the nick
elseif (C_BAD_WORDS == 1 && checkwords($U, true))
{
$Error = L_ERR_USR_18;
}
else
{
$DbLink->query("SELECT room FROM ".C_USR_TBL." WHERE username='$U' LIMIT 1");
$Nb = $DbLink->num_rows();
// If the same nick is already in use and the user is not registered deny access
if($Nb != 0 && $PASSWORD == "" && !isset($PWD_Hash))
{
$Error = L_ERR_USR_1;
$DbLink->clean_results();
}
else
{
list($room) = $DbLink->next_record();
$DbLink->clean_results();
$DbLink->query("SELECT password,perms,rooms FROM ".C_REG_TBL." WHERE username='$U' LIMIT 1");
$reguser = ($DbLink->num_rows() != 0);
if ($reguser) list($user_password,$perms,$rooms) = $DbLink->next_record();
$DbLink->clean_results();
if (!(isset($E) && $E != ""))
{
// Check for password if the nick exist in registered users table
if ($reguser)
{
if ($PASSWORD == "" && !isset($PWD_Hash))
{
$Error = L_ERR_USR_3;
}
else
{
if (md5(stripslashes($PASSWORD)) != $user_password && (!isset($PWD_Hash) || $PWD_Hash != $user_password)) $Error = L_ERR_USR_4;
}
if (!isset($Error)) $DbLink->query("UPDATE ".C_REG_TBL." SET reg_time=".time()." WHERE username='$U'");
}
// If users isn't a registered one and phpMyChat require registration deny access
else if (C_REQUIRE_REGISTER)
{
$Error = L_ERR_USR_14;
}
}
// The var bellow is set to 1 when a registered user is allowed to log using a nick
// that already exist in the users table
$relog = ($Nb != 0 && !isset($Error));
$CookieUsername = urlencode(stripslashes($U));
setcookie("CookieUsername", $CookieUsername, time() + 60*60*24*365); // cookie expires in one year
}
}
}
// ** Get perms of the user if the script is called by a join command **
if (isset($Reload) && $Reload == "JoinCmd")
{
$DbLink->query("SELECT perms,rooms FROM ".C_REG_TBL." WHERE username='$U' LIMIT 1");
$reguser = ($DbLink->num_rows() != 0);
if ($reguser) list($perms,$rooms) = $DbLink->next_record();
$DbLink->clean_results();
};
// ** Ensure the user is not banished from the room he wants to enter in **
if(!isset($Error) && (isset($N) && $N != "") && !isset($Reload))
{
if (C_BANISH != "0" && (!isset($perms) || $perms != "admin"))
{
include("./${ChatPath}lib/banish.lib.php3");
if ($IsBanished) $Error = L_ERR_USR_20;
};
};
// ** Ensures the user can create a room and the room name is a valid one (bypassed test
// when the frameset is reloaded because of the NN4+ resize bug). **
if(!isset($Error) && (isset($R2) && $R2 != ""))
{
// Skipped when the script is called by a join command.
if (!isset($Reload))
{
// User is not registered -> Deny room creation
if (!$reguser)
{
$Error = L_ERR_USR_13;
}
// Check for invalid characters or empty room name
else if (trim($R2) == "" || ereg("[\,]", stripslashes($R2)))
{
$Error = L_ERR_ROM_1;
}
// Check for bad words in room name
else if(C_BAD_WORDS == 1 && checkwords($R2, true))
{
$Error = L_ERR_ROM_2;
}
// Ensure there is no existing room with the same name but a different type...
else
{
// ...among reserved name for private/public (default) rooms
$ToCheck = ($T == "1" ? $DefaultPrivateRooms : $DefaultChatRooms);
for ($i = 0; $i < count($ToCheck); $i++)
{
if (strcasecmp($R2,$ToCheck[$i]) == "0")
{
$Error = ($T == 0 ? L_ERR_ROM_3:L_ERR_ROM_4);
break;
};
};
unset($ToCheck);
// ...among other rooms created by users
if (!isset($Error))
{
$T1 = 1 - $T;
$DbLink->query("SELECT count(*) FROM ".C_MSG_TBL." WHERE room = '$R2' AND type = '$T1' LIMIT 1");
list($Nb) = $DbLink->next_record();
$DbLink->clean_results();
if($Nb != 0) $Error = ($T == 0 ? L_ERR_ROM_3:L_ERR_ROM_4);
};
};
};
// Define the user status
if (!isset($Error))
{
$register_room = true;
// If the name of the room to be created is a reserved one for private/public (default) rooms,
// status will be 'user'. Skipped when the script is called by a join command.
if (!isset($Reload))
{
$ToCheck = ($T == "1" ? $DefaultChatRooms : $DefaultPrivateRooms);
for ($i = 0; $i < count($ToCheck); $i++)
{
if (strcasecmp($R2,$ToCheck[$i]) == "0") $register_room = false;
};
unset($ToCheck);
};
// If room name is the same than one of an existing room containing "true" messages
// (not only notifications of users entrance/exit) or containing only "system"
// message but an other user is already logged in, status will be 'user'
if ($register_room)
{
$DbLink->query("SELECT Count(*) FROM ".C_MSG_TBL." WHERE room='$R2' AND username NOT LIKE 'SYS %' LIMIT 1");
list($count) = $DbLink->next_record();
$register_room = ($count == "0");
$DbLink->clean_results();
};
if ($register_room)
{
$DbLink->query("SELECT count(*) FROM ".C_USR_TBL." WHERE room='$R2' AND username != '$U' LIMIT 1");
list($anybody) = $DbLink->next_record();
$register_room = ($anybody == 0);
$DbLink->clean_results();
};
if ($register_room)
{
// If an other registered user is already moderator for the room to be created but
// there is no "true" message in this room then set his status to user for this room
$UpdLink = new DB;
$DbLink->query("SELECT username,rooms FROM ".C_REG_TBL." WHERE perms = 'moderator' AND username != '$U'");
while (list($mod_un,$mod_rooms) = $DbLink->next_record())
{
$changed = false;
$roomTab = explode(",",$mod_rooms);
for ($i = 0; $i < count($roomTab); $i++)
{
if (strcasecmp(stripslashes($R2), $roomTab[$i]) == 0)
{
$roomTab[$i] = "";
$changed = true;
break;
};
};
if ($changed)
{
$mod_rooms = str_replace(",,",",",ereg_replace("^,|,$","",implode(",",$roomTab)));
$UpdLink->query("UPDATE ".C_REG_TBL." SET rooms='".addslashes($mod_rooms)."' WHERE username='".addslashes($mod_un)."'");
$UpdLink->query("UPDATE ".C_USR_TBL." SET status='r' WHERE room='$R2' AND username='".addslashes($mod_un)."'");
};
unset($roomTab);
};
$DbLink->clean_results();
// Update the current user status for the room to be created in registered users table
$changed = false;
if (!room_in(stripslashes($R2), $rooms))
{
if ($rooms != "") $rooms .= ",";
$rooms .= stripslashes($R2);
$changed = true;
}
if ($perms == "user" || $perms == "")
{
$perms = "moderator";
$changed = true;
}
if (($changed)&&($perms != "admin"))
{
$DbLink->query("UPDATE ".C_REG_TBL." SET perms='$perms', rooms='".addslashes($rooms)."' WHERE username='$U'");
}
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -