, Copyright 2006. License http://www.gnu.org/licenses/gpl.html GNU General Public License SDV($ZAPmodule[chat], " chat private "); function ZAPchat($field, $value) { global $WorkDir, $WikiDir, $pagename, $MessagesFmt, $m, $ZAPtime, $ZAPprofiles, $_POST; $admin = InList("item=$GLOBALS[AuthId] page=Chatrooms.$_POST[room] list=adminlist"); if (CondAuth($pagename, "admin")) $admin = true; if($lock != "nolock") { if (($field == "chat") && ($value != "")) { if (substr($value, 0, 1) != "!") { $oldpage = ReadPage($_POST[datapage]); $newpage = $oldpage; $newpage['text'] = $_POST[chatformat]; UpdatePage($_POST[datapage], $oldpage, $newpage); } else { if (strpos($value, " ")) { $c = substr($value, 1, strpos($value, " ") - 1); $cc = substr($value, strpos($value, " ") + 1); } else { $c = substr($value, 1); $cc = ""; } switch ($c) { case "list" : if (PageExists("Chat.List")) Redirect(FmtPageName("Chat.List?return=$_POST[room]", $pagename)); break; case "join" : if (PageExists("Chatrooms.$cc")) Redirect(FmtPageName("Chat.Chat?room=$cc", $pagename)); else $m .= "Room does not exist. "; break; case "leave" : if ($cc == "") $cc = $_POST[room]; $x = "Chat-$cc.Member-$GLOBALS[AuthId]"; if (PageExists($x)) $WikiDir->delete("$x"); if ($cc == $_POST[room]) Redirect(FmtPageName("Chat.Chat", $pagename)); break; case "exit" : $g = "Chatrooms"; $r = ListPages("/^$g\./"); foreach ($r as $rr) { $room = substr($rr, strpos($rr, ".") + 1); $x = "Chat-$room.Member-$GLOBALS[AuthId]"; if (PageExists($x)) $WikiDir->delete("$x"); } Redirect(FmtPageName("Chat.Chat", $pagename)); break; case "help" : if (PageExists("Chat.Help")) Redirect(FmtPageName("Chat.Help?return=$_POST[room]", $pagename)); break; case "info" : if ($cc == "") $cc = $_POST[room]; if (PageExists("Chat.Info")) Redirect(FmtPageName("Chat.Info?room=$cc?return=$_POST[room]", $pagename)); break; case "members" : if ($cc == "") $cc = $_POST[room]; if (PageExists("Chat.Members")) Redirect(FmtPageName("Chat.Members?room=$cc?return=$_POST[room]", $pagename)); break; case "whois" : if (PageExists("Chat.WhoIs")) Redirect(FmtPageName("Chat.WhoIs?return=$_POST[room]?room=$_POST[room]?member=$cc", $pagename)); break; case "away" : $x = "Chat-$_POST[room].Member-$GLOBALS[AuthId]"; $oldpage = ReadPage("$x"); $newpage = $oldpage; $newpage['text'] = "(:Member: $GLOBALS[AuthId]-(away):)\n\n"; UpdatePage($x, $oldpage, $newpage); break; case "back" : $x = "Chat-$_POST[room].Member-$GLOBALS[AuthId]"; $oldpage = ReadPage("Chat-$_POST[datapage].Member-$GLOBALS[AuthId]"); $newpage = $oldpage; $newpage['text'] = "(:Member: $GLOBALS[AuthId]:)\n\n"; UpdatePage($x, $oldpage, $newpage); break; case "action" : $oldpage = ReadPage($_POST[datapage]); $newpage = $oldpage; $newpage['text'] = "%green%<$cc>%%"; UpdatePage($_POST[datapage], $oldpage, $newpage); break; case "private" : ZAPprivate($cc); break; //ADMIN ONLY FUNCTIONS case "warn" : if (! $admin) break; $oldpage = ReadPage($_POST[datapage]); $newpage = $oldpage; $newpage['text'] = "%blue%WARNING $cc%%"; UpdatePage($_POST[datapage], $oldpage, $newpage); break; case "kick" : if (! $admin) break; $x = "Chat-$_POST[room].Member-$cc"; if (PageExists($x)) $WikiDir->delete("$x"); $oldpage = ReadPage($_POST[datapage]); $newpage = $oldpage; $newpage['text'] = "%blue%$cc has been KICKED out of the room%%"; UpdatePage($_POST[datapage], $oldpage, $newpage); break; case "ban" : if (! $admin) break; $x = "Chat-$_POST[room].Member-$cc"; if (PageExists($x)) $WikiDir->delete("$x"); $oldpage = ReadPage($_POST[datapage]); $newpage = $oldpage; $newpage['text'] = "%blue%$cc has been BANNED from the room%%"; UpdatePage($_POST[datapage], $oldpage, $newpage); $_POST[datapage] = "Chatrooms.$_POST[room]"; ZAPlist("banlist", "+$cc"); $data = ZAPsetdata("+banlist"); ZAPsavepage("Chatrooms.$_POST[room]",$text,$data); break; case "unban" : if (! $admin) break; $oldpage = ReadPage($_POST[datapage]); $newpage = $oldpage; $newpage['text'] = "%blue%$cc has been UNBANNED%%"; UpdatePage($_POST[datapage], $oldpage, $newpage); $_POST[datapage] = "Chatrooms.$_POST[room]"; ZAPlist("banlist", "-$cc"); $data = ZAPsetdata("+banlist"); ZAPsavepage("Chatrooms.$_POST[room]",$text,$data); break; case "admin" : if (! $admin) break; if (! PageExists("Profiles." . substr($cc, 1))) ZAPwarning("No such member exists"); $_POST[datapage] = "Chatrooms.$_POST[room]"; ZAPlist("adminlist", "$cc"); $data = ZAPsetdata("+"); ZAPsavepage("Chatrooms.$_POST[room]",$text,$data); break; case "clear" : if (! $admin) break; $g = "Chat-$_POST[room]"; $t = bcsub(time(), $cc); $p = ListPages("/^$g\./"); foreach ($p as $pp) { $n = substr($pp, strpos($pp, ".") + 1); if (! ereg("^[0-9]{10}.+$", $n)) continue; if (bccomp(substr($n, 0, 10), $t) == 1) continue; $a = strftime("%Y-%m-%d-%H%M%S", substr($n, 0, 10)); $newname = "Chat-Archives.$_POST[room]-$a-" . substr($n,11); rename("$WorkDir/$pp", "$WorkDir/$newname"); } $m .= "Chat has been cleared. "; break; case "archives" : if (! $admin) break; if ($cc == "") $room = $_POST[room]; elseif (strpos($cc, "-")) { $room = substr($cc, 0, strpos($cc, "-")); $cc = substr($cc, strpos($cc, "-")); } else { $room = $cc; $cc = ""; } if (PageExists("Chat.Archives")) Redirect(FmtPageName("Chat.Archives?room=$room?archive=$cc?return=$_POST[room]", $pagename)); break; case "create" : if (! $admin) break; if (! PageExists("Chatrooms.$cc")) { $text = ""; $data = "(:adminlist: $GLOBALS[AuthId]:)\n\n"; ZAPsavepage("Chatrooms.$cc",$text,$data); Redirect(FmtPageName("Chat.Chat?room=$cc", $pagename)); } else $m .= "Room $cc already exists. "; break; case "destroy" : if (! $admin) break; if (! PageExists("Chatrooms.$cc")) break; $g = "Chat-$cc"; $p = ListPages("/^$g\./"); foreach ($p as $pp) { $n = substr($pp, strpos($pp, ".") + 1); if (! ereg("^[0-9]{10}.+$", $n)) { $WikiDir->delete("$pp"); continue; } $a = strftime("%Y-%m-%d-%H%M%S", substr($n, 0, 10)); $newname = "Chat-Archives.$_POST[room]-$a-" . substr($n,11); rename("$WorkDir/$pp", "$WorkDir/$newname"); } $WikiDir->delete("Chatrooms.$cc"); $m .= "Room $cc has been destroyed. "; if ($cc == $_POST[room]) Redirect(FmtPageName("Chat.Chat", $pagename)); break; default : break; } } } if (($field == "private") && ($value != "")) ZAPprivate($value); } return; } function ZAPprivate($value) { global $WikiDir, $ZAPtime, $ZAPprofiles, $_POST; if ($value == "clear") { $g = "Private-$GLOBALS[AuthId]"; $p = ListPages("/^$g\./"); foreach ($p as $pp) $WikiDir->delete("$pp"); $m .= "Private messages have been cleared. "; } else { $to = substr($value, 0, strpos($value, " ")); $from = $GLOBALS[AuthId]; $message = substr($value, strpos($value, " ") + 1); if (! PageExists("$ZAPprofiles.$to")) ZAPwarning("Member does not exist"); $oldpage = ReadPage($_POST[datapage]); $newpage = $oldpage; $newpage['text'] = "%silver%$from: $message%%"; UpdatePage("Private-$to.$ZAPtime", $oldpage, $newpage); if ($to != $from) UpdatePage("Private-$from.$ZAPtime", $oldpage, $newpage); } return; } Markup('zapchat', '>{$var}', '/\(:zapchat(.*?):\)/ei', "Keep(ZAPframe('$1'))"); Markup('zaprefresh', '>{$var}', '/\(:zaprefresh(.*?):\)/ei', "Keep(ZAPrefresh('$1'))"); function ZAPframe($x) { global $ScriptUrl, $GET; $r = $_GET[room]; $g = "Chatroom"; if (isset($_GET[group])) $g = $_GET[group]; $w = "95%"; $h = "300"; if (strpos($x, "|")) { $h = substr($x, 1, strpos($x, "|")); $w = substr($x, strpos($x, "|") + 1); } $chat = "\n"; return $chat; } function ZAPrefresh($t) { if ($t == "") $t = "10"; $t = $t * 1000; $refresh .= " "; return $refresh; }