Re: Chat anpassen
Verfasst: 6. Oktober 2009, 18:51
Wie kann ich die Größe des Chats anpassen? Wenn ich den Iframe verkleinere?
Code: Alles auswählen
<?php
define("IN_EASYHP", true);
include "../includes/mysql.php";
$chat = 1;
include "../common.php";
if (($cf->chat_aktiv != 1 and !isset($_SESSION['user_data_admin'])) or $uname == 'Anonymous' or !$userdata)
{
header("Location: ../index.php");
print "chat.innerHTML = '<br /><a href=../index.php >zurück zur Hauptseite</a>';";
print "<a href=../index.php >zurück zur Hauptseite</a>";
exit();
}
// Chat script by WebTemp.org
// Start a session and get/generate a random user_id
// We'll use this user_id to create pseudo-uniquely colored chat lines later
// Close the session (a session can only be accessed by one process at a time)
error_reporting(0);
session_start();
header('Cache-control: private'); // IE6 fix
header("Content-Type: text/html; charset=utf-8");
if (!isset($_SESSION['USER_ID'])) $_SESSION['USER_ID'] = rand(1, 24);
$USER_ID = $_SESSION['USER_ID'];
session_write_close();
ob_flush();
flush();
// Path to the text files holding the chat window content
$fn = 'chat.txt';
$log = 'log.txt';
// Did the browser request the chat content?
// If so, it provided this script with its last known line number
$read = &$_GET['r'];
if (isset($read)) {
// Create the chat file if neccessary
if (!file_exists($fn)) {
touch($fn);
chmod($fn, 0644);
}
if ($read == 0)
{
$result = @mysql_query("SELECT `im_chat` FROM ".SESSIONS_TABLE." WHERE `name` = '".$userdata['name']."' AND `im_chat` = -1");
if (mysql_num_rows($result) == 0)
chat_write('<E>');
}
// The script will not exit on its own on user disconnect
// this way we can later add a "user left chat" message
ignore_user_abort(true);
$i = 0;
while (true) {
// Open the chat file and get the current line number
$f = fopen($fn, 'r');
flock($f, 2);
$offset = 0;
$offset = trim(fgets($f));
// Break the loop if the browser is not up to date
if ($offset > $read) break;
// If the browser is up to date, wait
flock($f, 3);
fclose($f);
@set_time_limit(0);
// By default we wait 3 seconds between each check
// However, after one minute of complete silence in the chat we step
// back to 10 second periods to save server resources
if ($i > 20) sleep(10);
else sleep(3);
// To check for user disconnection we have to output at least one byte
// We'll echo a line break since this does no harm to our JavaScript
echo "\n";
ob_flush();
flush();
$result = @mysql_query("SELECT `name` FROM ".SESSIONS_TABLE." WHERE `chat_session` < ".(time()-300)." AND `im_chat` = 1");
$i = 0;
while ($user_row = mysql_fetch_assoc($result))
{
chat_write('<L>');
@mysql_query("UPDATE ".SESSIONS_TABLE." SET `im_chat` = 0 WHERE `name` = '".$user_row['name']."'");
}
$result2 = mysql_query("SELECT `name` FROM ".SESSIONS_TABLE." WHERE `im_chat` = 1");
$i = 0;
while ($user = mysql_fetch_assoc($result2))
{
$result = @mysql_query("SELECT `id`, `level`, `name` FROM ".USERS_TABLE." WHERE `name` = '".$user['name']."'");
$user_row = mysql_fetch_assoc($result);
$link = "<a class=\"user_link\" target=\"_blank\" href=\"../profile.php?mode=view&user_id=".$user_row['id']."\" >".$user_row['name']."</a>";
echo utf8_encode("us('".$i."','".$link."', ".$user_row['level'].");");
$i++;
}
if (connection_status() != 0) {
// This is where a user disconnection is detected
// You could add stuff to display "user left chat" messages here
chat_write('<L>');
@mysql_query("UPDATE ".SESSIONS_TABLE." SET `im_chat` = 0 WHERE `name` = '".$userdata['name']."'");
exit();
}
$i++;
}
@mysql_query("UPDATE ".SESSIONS_TABLE." SET `im_chat` = 1, `chat_session`=".time()." WHERE `name` = '".$userdata['name']."' and `im_chat` != -1");
$result = @mysql_query("SELECT `im_chat`, `name` FROM ".SESSIONS_TABLE." WHERE `im_chat` != 0");
if (!$result)
echo utf8_encode("us(0,'Verbindung zur Datenbank konnte nicht aufgebaut werden');");
$i = 0;
while ($user_row = mysql_fetch_assoc($result))
{
if ($user_row['im_chat'] == "-1" and $userdata['name'] == $user_row['name'])
{
$time = date('H:i:s');
echo utf8_encode(own_write("Du bist gekickt worden. Für mehr infos wende dich an den Administrator der Seite", 1));
exit();
}
$i++;
}
// If the loop was exited, we end up here
// Now, echo all missing lines
while ($s = fgets($f)) {
echo utf8_encode($s);
if ($offset <= ++$read) break;
}
// Close the file, exit
flock($f, 3);
fclose($f);
exit();
}
// This function writes one line into the chat file
// For easiest accessibility newer lines are on top!
function chat_write($write, $system = 0) {
global $USER_ID, $fn, $userdata, $log;
// Maximum line count
$maxlines = 25;
if (trim($write) == '') return;
// Create the chat file if neccessary
if (!file_exists($fn)) {
touch($fn);
chmod($fn, 0644);
}
// Create the chat file if neccessary
if (!file_exists($log)) {
touch($log);
chmod($log, 0644);
}
// Open the chat file and get the current line number
$f = fopen($fn, 'r+');
flock($f, 2);
$offset = 0;
fscanf($f, "%s\n", $offset);
// Open the log file
$l = fopen($log, 'a');
flock($l, 2);
// Increase by one as we're adding a new line now
$offset++;
$i = 0;
$chat = '';
// First we have to read the whole file
// Lines are being read one by one until we're at the end or until we reach $maxlines
while (($i < $maxlines) && ($s = fgets($f))) {
$chat .= $s;
$i++;
}
// This is the actual line we're adding
// You see: The chat file contains JavaScript calls
// This way no parsing of the lines is neccessary
// We'll just need to eval() them in our JavaScript
$time = date('H:i:s');
//
// For the smilies :-)
//
$write = str_replace("#:-)", "<img src='../images/smiles/icon_smile.gif' alt='smile' title='Smile' border='0' />", $write);
$write = str_replace("#:D", "<img src='../images/smiles/icon_biggrin.gif' alt='biggrin' title='Big grin' border='0' />", $write);
$write = str_replace("#conf", "<img src='../images/smiles/icon_confused.gif' alt='confused' title='Confused' border='0' />", $write);
$write = str_replace("#cool", "<img src='../images/smiles/icon_cool.gif' alt='cool' title='Cool' border='0' />", $write);
$write = str_replace("#cry", "<img src='../images/smiles/icon_cry.gif' alt='cry' title='Crying' border='0' />", $write);
$write = str_replace("#eek", "<img src='../images/smiles/icon_eek.gif' alt='eek' title='Eek' border='0' />", $write);
$write = str_replace("#evil", "<img src='../images/smiles/icon_evil.gif' alt='evil' title='Evil' border='0' />", $write);
$write = str_replace("#frown", "<img src='../images/smiles/icon_frown.gif' alt='frown' title='Frown' border='0' />", $write);
$write = str_replace("#lol", "<img src='../images/smiles/icon_lol.gif' alt='lol' title='lol' border='0' />", $write);
$write = str_replace("#mad", "<img src='../images/smiles/icon_mad.gif' alt='mad' title='Mad' border='0' />", $write);
$write = str_replace("#:-|", "<img src='../images/smiles/icon_neutral.gif' alt='neutral' title='Neutral' border='0' />", $write);
$write = str_replace("#:P", "<img src='../images/smiles/icon_razz.gif' alt='razz' title='Razz' border='0' />", $write);
$write = str_replace("#red", "<img src='../images/smiles/icon_redface.gif' alt='redface' title='Red face' border='0' />", $write);
$write = str_replace("#roll", "<img src='../images/smiles/icon_rolleyes.gif' alt='rolleyes' title='Rolling eyes' border='0' />", $write);
$write = str_replace("#:-(", "<img src='../images/smiles/icon_sad.gif' alt='sad' title='Sad' border='0' />", $write);
$write = str_replace("#;-)", "<img src='../images/smiles/icon_wink.gif' alt='wink' title='Wink' border='0' />", $write);
//
// The BBCodes
//
$write = str_replace("[b]", "<b>", $write);
$write = str_replace("[/b]", "</b>", $write);
$write = str_replace("[i]", "<i>", $write);
$write = str_replace("[/i]", "</i>", $write);
$write = str_replace("[u]", "<u>", $write);
$write = str_replace("[/u]", "</u>", $write);
$link = "<a class=\"user_link\" target=\"_blank\" href=\"../profile.php?mode=view&user_id=".$userdata['id']."\" >".$userdata['name']."</a>";
if ($system == 0)
$js = "cs($offset,$USER_ID,'$time','".$link."','$write','');\n";
else
$js = "cs($offset,$USER_ID,'$time','System','$write von $link','');\n";
// Go to the top
fseek($f, 0);
// Empty the file
ftruncate($f, 0);
// Write the new offset
fwrite($f, "$offset\n");
// Write the new line
fwrite($f, $js);
// And then the rest
fwrite($f, $chat);
// Close the file
flock($f, 3);
fclose($f);
// Write the new line
fwrite($l, $js);
// Close the file
flock($l, 3);
fclose($l);
// We'll return the last added line to the calling
return $js;
}
function own_write($write, $system = 0) {
global $USER_ID, $fn, $userdata, $log;
$link = "<a class=\"user_link\" target=\"_blank\" href=\"../profile.php?mode=view&user_id=".$userdata['id']."\" >".$userdata['name']."</a>";
$js = "cs(-1,$USER_ID,'$time','".$link."','$write','');\n";
// We'll return the last added line to the calling
return $js;
}
function chat_delete($delete) {
global $fn;
if ($delete == '') exit();
if (!file_exists($fn)) {
touch($fn);
chmod($fn, 0644);
}
$f = fopen($fn, 'r+');
flock($f, 2);
$offset = 0;
fscanf($f, "%s\n", $offset);
$chat = '';
$i = 0;
while ($s = fgets($f)) {
$s = str_replace("'$delete'", "''", $s);
$chat .= $s;
$i++;
}
fseek($f, 0);
ftruncate($f, 0);
fwrite($f, "$offset\n");
fwrite($f, $chat);
flock($f, 3);
fclose($f);
}
// Did the browser send a new chat line?
$write = &$_POST['w'];
if (isset($write)) {
if ($write == '') exit();
// Remove the slashes that were added to the form contents by PHP automatically
$write = stripslashes($write);
// Transform characters like < and > into their HTML representations
$write = htmlspecialchars($write, ENT_QUOTES);
$write = addslashes($write);
$system = 0;
if ($userdata['level'] >= 1){
if (strpos($write, '/del ') === 0) {
$delete = str_replace('/del ', '', $write);
chat_delete($delete);
exit();
}
elseif (strpos($write, '/ban ') === 0 and $userdata['level'] == 1) {
$name = str_replace('/ban ', '', $write);
$result = @mysql_query("SELECT `name` FROM ".SESSIONS_TABLE." WHERE `name` = '".$name."'");
if (mysql_num_rows($result) == 0)
{
echo utf8_encode(own_write("Den User \'".$name."\' gibt es nicht", 1));
exit();
}
echo utf8_encode(chat_write($name." wurde Systemweit gebannt", 1));
@mysql_query("UPDATE ".SESSIONS_TABLE." SET `im_chat` = -1 WHERE `name` = '".$name."'");
@mysql_query("UPDATE ".USERS_TABLE." SET `ban` = 1 WHERE `name` = '".$name."'");
$system = 1;
exit();
}
elseif (strpos($write, '/kick ') === 0) {
$name = str_replace('/kick ', '', $write);
$result = @mysql_query("SELECT `name` FROM ".SESSIONS_TABLE." WHERE `name` = '".$name."'");
if (mysql_num_rows($result) == 0)
{
echo utf8_encode(own_write("Den User \'".$name."\' gibt es nicht", 1));
exit();
}
echo utf8_encode(chat_write($name." wurde gekickt", 1));
@mysql_query("UPDATE ".SESSIONS_TABLE." SET `im_chat` = -1, `chat_session` = ".(time()+300)." WHERE `name` = '".$name."'");
$system = 1;
exit();
}
elseif (strpos($write, '/unkick ') === 0 AND $userdata['level'] == 1) {
$name = str_replace('/unkick ', '', $write);
$result = @mysql_query("SELECT `name` FROM ".SESSIONS_TABLE." WHERE `name` = '".$name."'");
if (mysql_num_rows($result) == 0)
{
echo utf8_encode(own_write("Den User \'".$name."\' gibt es nicht", 1));
exit();
}
echo utf8_encode(chat_write($name." wurde geunkickt", 1));
@mysql_query("UPDATE ".SESSIONS_TABLE." SET `im_chat` = 0 WHERE `name` = '".$name."'");
$system = 1;
exit();
}
elseif (strpos($write, '/kickall') === 0) {
$name = str_replace('/kickall ', '', $write);
echo utf8_encode(chat_write("Der Chat wird abgeschaltet", 1));
@mysql_query("UPDATE ".SESSIONS_TABLE." SET `im_chat` = -1");
@mysql_query("UPDATE ".CONFIG_TABLE." SET `chat_aktiv` = 0");
$system = 1;
exit();
}
elseif (strpos($write, '/unkickall') === 0 AND $userdata['level'] == 1) {
$name = str_replace('/unkickall ', '', $write);
echo utf8_encode(chat_write("Alle Kicks aufgehoben", 1));
@mysql_query("UPDATE ".SESSIONS_TABLE." SET `im_chat` = 0");
$system = 1;
exit();
}
elseif (strpos($write, '/chat_activate') === 0 AND $userdata['level'] == 1) {
$name = str_replace('/chat_activate', '', $write);
echo utf8_encode(chat_write("Chat aktiviert", 1));
@mysql_query("UPDATE ".CONFIG_TABLE." SET `chat_aktiv` = 1");
$system = 1;
exit();
}
elseif (strpos($write, '/') === 0) {
echo utf8_encode(own_write("Befehl nicht gefunden oder du hast nicht die benötigten Rechte:<br />".$write, 1));
exit();
}
}
$result = @mysql_query("SELECT `name` FROM ".SESSIONS_TABLE." WHERE `im_chat` = -1 AND `name` = '".$userdata['name']."'");
if (mysql_num_rows($result) >= 1)
{
$time = date('H:i:s');
echo utf8_encode(own_write("Du bist gekickt worden. Für mehr infos wende dich an den Administrator der Seite", 1));
exit();
}
// Wordwrap after 100 characters and add the new lines to the chat file
$lines = wordwrap($write, 50, "\n", true);
$lines = explode("\n", $lines);
foreach ($lines as &$line) {
// The function returns the added line
// We'll output this so the users can read their own texts without delay right after sending
echo utf8_encode(chat_write($line), $system);
}
exit();
}
//
//
//php ENDE
// Javascript ANFANG
//
//
?>
var lines = 35;
var title = '';
var offset = 0;
var userNr = 0;
var messages = new Array();
var message = document.getElementById('message');
var befehl = document.getElementById('befehl');
var rueckmeldung = document.getElementById('rueckmeldung');
var chat = document.getElementById('chat');
var userlist = document.getElementById('userlist');
var tmrRead = setTimeout('chat_read();', 1000);
var user = new Array();
function chat_action(action)
{
if (action == "kick" || action == "ban" || action == "unkick")
action1 = "/"+action + " " + befehl.value;
else if (action == "kickall" || action == "unkickall")
action1 = "/"+action;
else
action1 = "/";
request_write('chat.php', 'w='+escape(action1));
befehl.value = '';
}
//Verbindung zum schreiben
function request_write(url, post) {
r = false;
if (window.XMLHttpRequest) {
r = new XMLHttpRequest();
} else if (window.ActiveXObject) {
try {
r = new ActiveXObject("Msxml2.XMLHTTP");
} catch(e) {
try {
r = new ActiveXObject("Microsoft.XMLHTTP");
} catch(e) {
}
}
}
if (!r) return false;
r.onreadystatechange = alert_write;
if (post == null) {
r.open('GET', url, true);
r.send(null);
} else {
r.open('POST', url, true);
r.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
r.send(post);
}
}
function alert_write() {
try {
if ((r.readyState == 4) && (r.status == 200)) parse(r.responseText);
} catch(e) {
}
}
//Verbindung zum lesen
function request_read(url, post) {
r2 = false;
if (window.XMLHttpRequest) {
r2 = new XMLHttpRequest();
} else if (window.ActiveXObject) {
try {
r2 = new ActiveXObject("Msxml2.XMLHTTP");
} catch(e) {
try {
r2 = new ActiveXObject("Microsoft.XMLHTTP");
} catch(e) {
}
}
}
if (!r2) return false;
r2.abort();
r2.onreadystatechange = alert_read;
if (post == null) {
r2.open('GET', url, true);
r2.send(null);
} else {
r2.open('POST', url, true);
r2.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
r2.send(post);
}
}
//Verbindungzum User auslesen
function request_user(url, post) {
r3 = false;
if (window.XMLHttpRequest) {
r3 = new XMLHttpRequest();
} else if (window.ActiveXObject) {
try {
r3 = new ActiveXObject("Msxml2.XMLHTTP");
} catch(e) {
try {
r3 = new ActiveXObject("Microsoft.XMLHTTP");
} catch(e) {
}
}
}
if (!r3) return false;
r3.abort();
r3.onreadystatechange = alert_user;
if (post == null) {
r3.open('GET', url, true);
r3.send(null);
} else {
r3.open('POST', url, true);
r3.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
r3.send(post);
}
}
function us(o, u, r) {
team = "";
if (r == 1 || r == 2)
team = "(team)";
user[o] = '<span id="C">'+u+'</span> '+team+'<br />';
}
function user_display() {
html2 = '<b>Userliste:</b><br /><br />';
if (user.length == 0)
user[0] = 'wird geladen ...';
for (var i = 0; i < user.length; i++) {
i2 = i+"";
html2 = html2 + user[i2];
}
userlist.innerHTML = html2;
user = new Array();
}
function alert_read() {
clearTimeout(tmrRead);
try {
if ((r2.readyState == 4) && (r2.status == 200)) {
parse(r2.responseText);
tmrRead = setTimeout('chat_read();', 30);
}
} catch(e) {
tmrRead = setTimeout('chat_read();', 3000);
}
}
function chat_read() {
clearTimeout(tmrRead);
request_read('chat.php?r='+offset, null);
}
function keyup(e) {
if (window.event) k = window.event.keyCode;
else if (e) k = e.which;
else return true;
if (k == 13) chat_write();
}
function chat_display() {
html = '';
i = 0;
while ((i < lines) && (i < offset)) {
h = offset-i;
if (messages[h]) html = messages[h] + html;
i++;
}
chat.innerHTML = html;
if (title != '') {
title = title.replace(/&/g, '&');
title = title.replace(/"/g, '"');
title = title.replace(/'/g, '\'');
title = title.replace(/</g, '<');
title = title.replace(/>/g, '>');
document.title = title + ' - Chat by WebTemp.org';
}
}
function chat_write() {
request_write('chat.php', 'w='+escape(message.value));
message.value = '';
}
function del_hinweis()
{
rueckmeldung.innerHTML = "";
}
function cs(o, i, t, u, m, c) {
user_display();
if (o == -1)
{
//alert(m);
rueckmeldung.innerHTML = '<input type="button" value="x" onclick="del_hinweis();" /><b>Meldung vom Server:</b> '+m;
}
else if (m == '<E>') {
if (u != '') messages[o] = '<span id="C'+i+'">['+t+'] * '+u+' has entered the chat *</span><br />';
} else if (m == '<L>') {
if (u != '') messages[o] = '<span id="C'+i+'">['+t+'] * '+u+' has left the chat *</span><br />';
} else {
if (u != '') {
u += ':';
spaces = 5 - u.length;
for (j = 0; j < spaces; j++) u += " ";
u += ' ';
}
if (title == '') title = m;
m = m.replace(/ /g, ' ');
messages[o] = '<span id="C'+i+'">['+t+'] '+u+'<b>'+m+'</b></span><br />';
}
if (o > offset) {
offset = o;
window.focus();
message.focus();
}
}
function parse(s) {
if (s != '') {
var l = user.length;
for (var i = 0; i < l; i++) {
user.pop();
}
s = unescape(s);
eval(s);
chat_display();
user_display()
}
}
Code: Alles auswählen
function SuchenUndErsetzen(QuellText, SuchText, ErsatzText)
{ // Erstellt von Ralf Pfeifer
// Fehlerpruefung
if ((QuellText == null) || (SuchText == null)) { return null; }
if ((QuellText.length == 0) || (SuchText.length == 0)) { return QuellText; }
// Kein ErsatzText ?
if ((ErsatzText == null) || (ErsatzText.length == 0)) { ErsatzText = ""; }
var LaengeSuchText = SuchText.length;
var LaengeErsatzText = ErsatzText.length;
var Pos = QuellText.indexOf(SuchText, 0);
while (Pos >= 0)
{
QuellText = QuellText.substring(0, Pos) + ErsatzText + QuellText.substring(Pos + LaengeSuchText);
Pos = QuellText.indexOf(SuchText, Pos + LaengeErsatzText);
}
return QuellText;
}
function smilies(str){
str = SuchenUndErsetzen(str ,":)", "<img src=\"Pfad_zum_Bild.gif\" />");
....
return str;
}
Code: Alles auswählen
messages[o] = '<span id="C'+i+'">['+t+'] '+u+'<b>'+m+'</b></span><br />';
Code: Alles auswählen
m = smilies(m)
Code: Alles auswählen
if (strpos($write, '[b]') and strpos($write, '[/b]'))
{
$write = str_replace("[b]", "<b>", $write);
$write = str_replace("[/b]", "</b>", $write);
}else
{
$write = str_replace("[b]", "", $write);
$write = str_replace("[/b]", "", $write);
}
Code: Alles auswählen
$bbcodes = array("b", "i", "u");
for ($i= 0;$i<count($bbcodes);$i++)
{
$bb = $bbcodes[$i];
if (strpos($write, '['.$bb.']') and strpos($write, '[/'.$bb.']'))
{
$write = str_replace("[".$bb."]", "<".$bb.">", $write);
$write = str_replace("[/".$bb."]", "</".$bb.">", $write);
}else
{
$write = str_replace("[".$bb."]", "", $write);
$write = str_replace("[/".$bb."]", "", $write);
}
}