don't trigger mode event if mode change is coming from a server
[PHP-P10.git] / Uplink / Uplink.class.php
index e2c2c03cbef4ddb3c538c26682cccfcbc8bb049b..345ceb8312c25131cc1c0d1f0fd3919ac733767c 100644 (file)
@@ -417,7 +417,6 @@ class Uplink {
                $channel->setCreateTime($create_time);
                $modes = $channel->getModes();
                $userstr = $args[count($args)-1];
-               $modeparamcount = count($args)-3;
                if($userstr[0] == "%") {
                        //ban list
                        $banlist = explode(" ", substr($userstr, 1));
@@ -425,10 +424,8 @@ class Uplink {
                                //TODO: save bans
                        }
                        $userstr = $args[count($args)-2];
-                       $modeparamcount--;
                }
                if($userstr[0] == "+") { //MODE String
-                       $modeparamcount++;
                        $userstr = "";
                }
                $users = explode(",",$userstr);
@@ -437,8 +434,8 @@ class Uplink {
                        if($user == "") continue;
                        $uexp = explode(":", $user);
                        if(strlen($uexp[0]) != 5) {
-                               trigger_error("burst parse error: '".$uexp[0]."' is not an user numeric.", E_USER_ERROR);
-                               return;
+                               trigger_error("burst parse error: '".$uexp[0]."' is not an user numeric.", E_USER_WARNING);
+                               break;
                        }
                        if(count($uexp) > 1) {
                                $isop = false;
@@ -457,7 +454,9 @@ class Uplink {
                        if($this->eventHandler)
                                $this->eventHandler->event_join($user, $channel, true);
                }
-               $modes->parseModes(implode(" ", array_slice($args, 2, $modeparamcount)));
+               $modestr = array_slice($args, 2);
+               if($modestr[0] == "+")
+                       $modes->parseModes(implode(" ", $modestr));
        }
        
        private function recv_join($from, $args) {
@@ -693,7 +692,7 @@ class Uplink {
        
        private function recv_mode($from, $args) {
                $user = P10_User::getUserByNum($from);
-               if($user == null) {
+               if($user == null && strlen($from) != 2) {
                        trigger_error("Server tries to send a modechange from an user that does not exist or was not found on recv_mode.", E_USER_ERROR);
                        return;
                }
@@ -703,7 +702,7 @@ class Uplink {
                        if($channel == null)
                                $channel = new P10_Channel($args[0]);
                        $channel->getModes()->setModes($modes);
-                       if($this->eventHandler)
+                       if($this->eventHandler && strlen($from) != 2)
                                $this->eventHandler->event_chanmode($user, $channel, $modes);
                } else {
                        $targetUser = P10_User::getUserByNick($args[0]);