function raum_gehe($o_id, $u_id, $u_name, $raum_alt, $raum_neu, $geschlossen) { // user $u_id/$u_name geht von $raum_alt in Raum $raum_neu // falls $geschlossen=TRUE -> auch geschlossene Räume betreten // Nachricht in Raum $r_id wird erzeugt // ID des neuen Raums wird zurückgeliefert global $dbase, $conn, $chat, $admin, $u_level, $u_punkte_gesamt, $farbe_chat_background2, $t, $beichtstuhl, $lobby, $timeout; global $http_host, $id, $erweitertefeatures, $forumfeatures, $communityfeatures; global $raum_eintrittsnachricht_anzeige_deaktivieren, $raum_austrittsnachricht_anzeige_deaktivieren; global $raum_eintrittsnachricht_kurzform, $raum_austrittsnachricht_kurzform; // Info zu altem Raum lesen $query = "SELECT r_name,r_status1,r_austritt,r_min_punkte from raum " . "WHERE r_id=" . intval($raum_alt); $result = mysql_query($query, $conn); if ($result && mysql_num_rows($result) == 1) { $alt = mysql_fetch_object($result); mysql_free_result($result); } // Ist User aus dem Raum ausgesperrt? $query = "SELECT s_id FROM sperre WHERE s_raum=" . intval($raum_neu) . " AND s_user={$u_id}"; $result = @mysql_query($query, $conn); $rows = @mysql_Num_Rows($result); if ($rows == 0) { $gesperrt = 0; } else { $gesperrt = 1; } @mysql_free_result($result); // Info zu neuem Raum lesen $query = "SELECT * from raum WHERE r_id=" . intval($raum_neu); $result = mysql_query($query, $conn); if ($result && mysql_num_rows($result) == 1) { $neu = mysql_fetch_object($result); mysql_free_result($result); // Online Punkte Holen, damit der User zum Raumwechsel nicht ein/ausloggen muss $o_punkte = 0; if ($erweitertefeatures == 1) { $query2 = "SELECT o_punkte FROM online WHERE o_id=" . intval($o_id); $result2 = mysql_query($query2, $conn); if ($result2 && mysql_num_rows($result2) == 1) { $online = mysql_fetch_object($result2); mysql_free_result($result2); $o_punkte = $online->o_punkte; unset($online); } unset($query2); unset($result2); } // wenn hier nach Erweitertefeatures oder Punkte geprüft werden würde, was sinn machen würde, // kommen User aus Kostenlosen chats, die mit der MainChat Community verbunden sind, trotzdem in den Raum, // trotz zu wenigen Punkten if ($neu->r_name != $lobby && $neu->r_min_punkte > $u_punkte_gesamt + $o_punkte && !$admin && $u_level != "A") { $zuwenigpunkte = 1; } else { $zuwenigpunkte = 0; } $raumwechsel = false; // Prüfen ob Raum geschlossen oder Admin // Prüfen, ob Raumwechsel erlaubt... // Raumwechsel erlaubt wenn Raum nicht geschlossen und user nicht gesperrt. if ($neu->r_status1 == "G" || $neu->r_status1 == "M" || $zuwenigpunkte == 1) { // Raum geschlossen. nur rein, wenn auf invite liste. $query = "SELECT inv_user FROM invite WHERE inv_raum={$neu->r_id} AND inv_user={$u_id}"; $result = mysql_query($query, $conn); if ($result > 0) { if (mysql_num_rows($result) > 0) { $raumwechsel = true; } mysql_free_result($result); } // oder falls user=raumbesitzer... // macht wenig sinn, das ein RB in seinen Raum ein ! angeben muss //if ($neu->r_besitzer==$u_id && $geschlossen) $raumwechsel=true; if ($neu->r_besitzer == $u_id) { $raumwechsel = true; } } else { // Raum offen, nur rein, wenn nicht gesperrt. if ($gesperrt == 0 && $zuwenigpunkte == 0) { $raumwechsel = true; } } // raumwechsel nicht erlaubt, wenn alter Raum teergrube (ausser für Admins + Tempadmins) if ($alt->r_status1 == "L" && $u_level != "A" && !$admin) { $raumwechsel = false; } // für admin raumwechsel erlaubt. if ($admin && $geschlossen) { $raumwechsel = true; } // Falls Beichtstuhl-Modus und $geschlossen!=TRUE, Anzahl der User im Raum // ermitteln. Der Raum darf betreten werden, wenn: // 1) genau ein Admin im Raum ist und // 2) kein User im Raum ist oder // 3) Raum temporär ist oder // 4) der Raum Lobby ist oder // 5) der User ein Admin ist if ($raumwechsel && $beichtstuhl && !$admin) { $query = "SELECT r_id,count(o_id) as anzahl, " . "count(o_level='C') as CADMIN, count(o_level='S') as SADMIN, " . "r_name='{$lobby}' as LOBBY, r_status2='T' AS STATUS " . "FROM raum LEFT JOIN online ON o_raum=r_id " . "WHERE ((UNIX_TIMESTAMP(NOW())-UNIX_TIMESTAMP(o_aktiv)) <= {$timeout} " . "OR r_name='Lobby' OR r_status2='T') " . "AND r_id=" . intval($raum_neu) . " " . "GROUP BY r_id HAVING anzahl=1 AND (CADMIN=1 OR SADMIN=1) OR LOBBY OR STATUS"; // system_msg("",0,$u_id,"","DEBUG $query"); $result = mysql_query($query, $conn); if ($result && mysql_num_rows($result) == 1) { $raumwechsel = TRUE; } else { $raumwechsel = FALSE; } @mysql_free_result($result); } // Darf Raum nun betreten werden? if ($raumwechsel) { // Raum verlassen $back = nachricht_verlasse($raum_alt, $u_name, $alt->r_name); // back in DB merken $f['o_chat_id'] = $back; schreibe_db("online", $f, $o_id, "o_id"); // Neuen Raum eintragen $query = "UPDATE online SET o_raum=" . intval($raum_neu) . " WHERE o_user={$u_id} AND o_raum=" . intval($raum_alt); $result = mysql_query($query, $conn); // Austrittstext if ($t['raum_gehe1']) { $txt = $t['raum_gehe1'] . " " . $alt->r_name . ":"; } else { unset($txt); } if ($raum_austrittsnachricht_kurzform == "1") { unset($txt); } if (strlen($alt->r_austritt) > 0) { $txt = "<B>{$txt}</B> {$alt->r_austritt}<BR>"; } else { unset($txt); } if ($raum_austrittsnachricht_anzeige_deaktivieren == "1") { unset($txt); } if (!isset($txt)) { $txt = ""; } // Trenner zwischen den Räumen, Austrittstext system_msg("", 0, $u_id, "", " "); system_msg("", 0, $u_id, "", $txt . "<BR><TABLE WIDTH=100% BGCOLOR=\"{$farbe_chat_background2}\" BORDER=0 CELLPADDING=0 CELLSPACING=0><TR><TD>" . "<IMG SRC=\"pics/fuell.gif\" ALT=\"\" WIDTH=4 HEIGHT=4><BR></TD></TR></TABLE>\n"); // Raum betreten nachricht_betrete($u_id, $raum_neu, $u_name, $neu->r_name); // Wenn der Neue Raum eine Teergrube ist, dann Eingabzeile aktualisieren, daß der [FORUM] Link verschwindet // Es sei denn man ist Admin, dann braucht es nicht aktualisiert werden, denn der Link wird nicht ausgeblendet // bzw. wenn alter Raum Teergrube war, dann auch aktualisieren // $u_id über Online Tabelle, da der User auch geschubst werden kann, deswegen dessen o_vhost und o_hash if ($forumfeatures && $communityfeatures && !$beichtstuhl && ($neu->r_status1 == "L" || $alt->r_status1 == "L") && $u_level != "A" && !$admin) { $query2 = "SELECT o_hash, o_vhost FROM online WHERE o_id=" . intval($o_id); $result2 = mysql_query($query2, $conn); if ($result2 && mysql_num_rows($result2) == 1) { $online = mysql_fetch_object($result2); mysql_free_result($result2); system_msg("", 0, $u_id, "", "<SCRIPT>parent.frames[3].location.href='eingabe.php?http_host={$online->o_vhost}&id={$online->o_hash}';</SCRIPT>"); unset($online); } unset($query2); unset($result2); } // Nachricht falls gesperrt ausgeben if ($gesperrt || $zuwenigpunkte) { system_msg("", 0, $u_id, "", str_replace("%r_name_neu%", $neu->r_name, $t['raum_gehe2'])); } // Topic vorhanden? ausgeben if ($t['raum_gehe6']) { $txt = $t['raum_gehe6'] . " " . $neu->r_name . ":"; } else { unset($txt); } if (strlen($neu->r_topic) > 0) { system_msg("", 0, $u_id, "", "<BR><B>{$txt}</B> {$neu->r_topic}"); } // Eintrittsnachricht if ($t['raum_gehe3']) { $txt = $t['raum_gehe3'] . " " . $neu->r_name . ":"; } else { unset($txt); } if ($raum_eintrittsnachricht_kurzform == "1") { unset($txt); } if ($raum_eintrittsnachricht_anzeige_deaktivieren == "1") { } else { if (strlen($neu->r_eintritt) > 0) { system_msg("", 0, $u_id, "", "<BR><B>{$txt} {$neu->r_eintritt}, {$u_name}!</B><BR>"); } else { system_msg("", 0, $u_id, "", "<BR><B>{$txt}</B> {$t['betrete_chat2']}, {$u_name}!</B><BR>"); } } $raum = $raum_neu; } else { // Raum kann nicht betreten werden system_msg("", 0, $u_id, "", str_replace("%r_name_neu%", $neu->r_name, $t['raum_gehe4'])); // Nachricht das gesperrt ausgeben if ($gesperrt) { system_msg("", 0, $u_id, "", str_replace("%r_name_neu%", $neu->r_name, $t['raum_gehe5'])); } // Nachricht das zu wenige Punkte ausgeben if ($zuwenigpunkte) { if ($u_level == "G") { $fehler = str_replace("%r_name_neu%", $neu->r_name, $t['raum_gehe8']); } else { $fehler = str_replace("%r_name_neu%", $neu->r_name, $t['raum_gehe7']); } $fehler = str_replace("%r_min_punkte%", $neu->r_min_punkte, $fehler); system_msg("", 0, $u_id, "", $fehler); unset($fehler); } $raum = $raum_alt; } } return $raum; }
function betrete_chat($o_id, $u_id, $u_name, $u_level, $raum, $javascript, $u_backup) { // User $u_id betritt Raum $raum (r_id) // Nachricht in Raum $raum wird erzeugt // Zeiger auf letzte Zeile wird zurückgeliefert global $dbase, $chat, $conn, $lobby, $eintrittsraum, $t, $hash_id, $communityfeatures, $beichtstuhl, $system_farbe, $u_punkte_gesamt; global $HTTP_SERVER_VARS; global $raum_eintrittsnachricht_kurzform, $raum_eintrittsnachricht_anzeige_deaktivieren; // Falls eintrittsraum nicht definiert, lobby voreinstellen if (strlen($eintrittsraum) == 0) { $eintrittsraum = $lobby; } // Ist $raum geschlossen oder User ausgesperrt? // ausnahme: geschlossener Raum ist Eingangsraum -> für e-rotic-räume // die sind geschlossen, aber bei manchen kostenlosen chats default :-( // Ausnahme ist Beichtstuhl-Modus, hier darf beim Login auch ein // geschlossener Raum betreten werden if (strlen($raum) > 0) { $query4711 = "SELECT r_id,r_status1,r_besitzer,r_name,r_min_punkte FROM raum WHERE r_id={$raum}"; $result = mysql_query($query4711, $conn); if ($result && mysql_num_rows($result) > 0) { $rows = mysql_fetch_object($result); $r_min_punkte = $rows->r_min_punkte; if ($rows->r_name != $eintrittsraum) { switch ($rows->r_status1) { case "G": case "M": // Grundsätzlich nicht in geschlossene oder moderierte räume $raumeintritt = false; // es sei denn, man ist dorthin eingeladen $query2911 = "SELECT inv_user FROM invite WHERE inv_raum={$rows->r_id} AND inv_user={$u_id}"; $result2911 = mysql_query($query2911, $conn); if ($result2911 > 0) { if (mysql_num_rows($result2911) > 0) { $raumeintritt = true; } mysql_free_result($result); } // oder man ist Raumbesiter dort if ($rows->r_besitzer == $u_id) { $raumeintritt = true; } // oder der Beichtstuhlmodus if ($beichtstuhl) { $raumeintritt = true; } // abweisen wenn $raumeintritt = false if (!$raumeintritt) { system_msg("", 0, $u_id, $system_farbe, str_replace("%r_name_neu%", $rows->r_name, $t['raum_gehe4'])); unset($raum); } break; default: break; } } } @mysql_free_result($result); } if (strlen($raum) > 0) { // Prüfung ob User aus Raum ausgesperrt ist $query4711 = "SELECT s_id FROM sperre WHERE s_raum=" . intval($raum) . " AND s_user={$u_id}"; $result = mysql_query($query4711, $conn); if ($result > 0) { $rows = mysql_Num_Rows($result); if ($rows != 0 || $r_min_punkte > $u_punkte_gesamt) { // Aktueller Raum ist gesperrt, oder zu wenige Punkte // Ist User aus Raum ausgesperrt, dann nicht einfach den Eintrittsraum oder die Lobby nehmen, // da kann der User auch ausgesperrt sein. unset($raum); if (!$beichtstuhl) { $query1222b = "SELECT r_id FROM raum left join sperre on r_id = s_raum and s_user = '******' " . "WHERE r_status1 = 'O' and r_status2 = 'P' and r_min_punkte <= {$u_punkte_gesamt} " . "and s_id is NULL " . "ORDER BY r_id "; $result1222b = mysql_query($query1222b, $conn); if ($result1222b > 0 && mysql_num_rows($result1222b) > 0) { // Es gibt Räume, für die man noch nicht gesperrt ist. // hiervon den ersten nehmen $raum = mysql_result($result1222b, 0, 0); } mysql_free_result($result1222b); } } mysql_free_result($result); } } // print $raum; // Welchen Raum betreten? if (strlen($raum) == 0) { // Id des Eintrittsraums als Voreinstellung ermitteln $query4711 = "SELECT r_id,r_name,r_eintritt,r_topic " . "FROM raum WHERE r_name='{$eintrittsraum}' "; $result = mysql_query($query4711, $conn); if ($result) { $rows = mysql_Num_Rows($result); } // eintrittsraum nicht gefunden? -> lobby probieren. if ($rows == 0) { $query4711 = "SELECT r_id,r_name,r_eintritt,r_topic " . "FROM raum WHERE r_name='{$lobby}' "; $result = mysql_query($query4711, $conn); if ($result) { $rows = mysql_Num_Rows($result); } } // lobby nicht gefunden? --> lobby anlegen. if ($rows == 0) { // lobby neu anlegen. $query4711 = "INSERT INTO raum " . "(r_id,r_name,r_eintritt,r_austritt,r_status1,r_besitzer,r_topic,r_status2,r_smilie) " . "VALUES (0,'{$lobby}','Willkommen','','O',1,'Eingangshalle','P','')"; $result = mysql_query($query4711, $conn); // neu lesen. $query4711 = "SELECT r_id,r_name,r_eintritt,r_topic " . "FROM raum WHERE r_name='{$lobby}' "; $result = mysql_query($query4711, $conn); if ($result) { $rows = mysql_Num_Rows($result); } } } else { // Gewählten Raum ermitteln $query4711 = "SELECT r_id,r_name,r_eintritt,r_topic " . "FROM raum WHERE r_id={$raum} "; $result = mysql_query($query4711, $conn); if ($result) { $rows = mysql_Num_Rows($result); } } if ($result && $rows == 1) { $r_id = mysql_result($result, 0, "r_id"); $r_eintritt = mysql_result($result, 0, "r_eintritt"); $r_topic = mysql_result($result, 0, "r_topic"); $r_name = mysql_result($result, 0, "r_name"); mysql_free_result($result); } else { echo "<BODY><P>Fehler: Ungültige Raum-ID {$raum} beim Login!</P></BODY></HTML>\n"; exit; } // Aktuellen Raum merken, o_who auf chat setzen $f['o_raum'] = $r_id; $f['o_who'] = "0"; // Nachricht im Chat ausgeben $back = nachricht_betrete($u_id, $r_id, $u_name, $r_name); // ID der Eintrittsnachricht merken und online-Datensatz schreiben $f['o_chat_id'] = $back; schreibe_db("online", $f, $o_id, "o_id"); // Topic vorhanden? ausgeben if (strlen($r_topic) > 0) { system_msg("", 0, $u_id, "", "<BR><B>{$t['betrete_chat3']} {$r_name}:</B> {$r_topic}"); } // Eintrittsnachricht if ($t['betrete_chat1']) { $txt = $t['betrete_chat1'] . " " . $r_name . ":"; } else { unset($txt); } if ($raum_eintrittsnachricht_kurzform == "1") { unset($txt); } if ($raum_eintrittsnachricht_anzeige_deaktivieren == "1") { } else { if (strlen($r_eintritt) > 0) { system_msg("", 0, $u_id, "", "<BR><B>{$txt} {$r_eintritt}, {$u_name}!</B><BR>"); } else { system_msg("", 0, $u_id, "", "<BR><B>{$txt}</B> {$t['betrete_chat2']}, {$u_name}!</B><BR>"); } } // Wer ist alles im Raum? raum_user($r_id, $u_id, $hash_id); // Hat der User sein Profil ausgefüllt? if ($communityfeatures && $u_level != "G") { profil_neu($u_id, $u_name, $hash_id); } $http_te = ""; if (isset($_SERVER['HTTP_TE'])) { $http_te = $_SERVER['HTTP_TE']; } // Optionale Warnungen ausgeben $browser = $_SERVER["HTTP_USER_AGENT"]; if (!$javascript) { warnung($u_id, $u_nick, "ohne_js"); } elseif ($u_backup || preg_match("/(.*)mozilla\\/[234](.*)mac(.*)/i", $browser) || preg_match("/(.*)msie(.*)mac(.*)/i", $browser) || preg_match("/(.*)Opera 3(.*)/i", $browser) || preg_match("/(.*)Opera\\/9(.*)/i", $browser) || preg_match("/(.*)Konqueror(.*)/i", $browser) || preg_match("/(.*)mozilla\\/5(.*)Netscape6(.*)/i", $browser) || preg_match("/(.*)mozilla\\/[23](.*)/i", $browser) || preg_match("/(.*)AOL [123](.*)/i", $browser) || $http_te == 'chunked') { $u_nick = ""; warnung($u_id, $u_nick, "sicherer_modus"); } // Hat der User Aktionen für den Login eingestellt, wie Nachricht bei neuer Mail oder Freunden an sich selbst? if ($communityfeatures && $u_level != "G") { aktion("Login", $u_id, $u_name, $hash_id); } // Nachrichten an Freude verschicken if ($communityfeatures) { $query = "SELECT f_id,f_text,f_userid,f_freundid,f_zeit FROM freunde WHERE f_userid={$u_id} AND f_status = 'bestaetigt' " . "UNION " . "SELECT f_id,f_text,f_userid,f_freundid,f_zeit FROM freunde WHERE f_freundid={$u_id} AND f_status = 'bestaetigt' ORDER BY f_zeit desc "; $result = mysql_query($query, $conn); if ($result && mysql_num_rows($result) > 0) { while ($row = mysql_fetch_object($result)) { unset($f); $f['raum'] = $r_name; $f['aktion'] = "Login"; $f['f_text'] = $row->f_text; if ($row->f_userid == $u_id) { if (ist_online($row->f_freundid)) { $wann = "Sofort/Online"; $an_u_id = $row->f_freundid; } else { $wann = "Sofort/Offline"; $an_u_id = $row->f_freundid; } } else { if (ist_online($row->f_userid)) { $wann = "Sofort/Online"; $an_u_id = $row->f_userid; } else { $wann = "Sofort/Offline"; $an_u_id = $row->f_userid; } } // Aktion ausführen aktion($wann, $an_u_id, $u_name, "", "Freunde", $f); } } @mysql_free_result($result); } return $back; }