protected function _removeuser($ircdata)
    {
        if ($ircdata->type & (SMARTIRC_TYPE_PART | SMARTIRC_TYPE_QUIT)) {
            $nick = $ircdata->nick;
        } else if ($ircdata->type & SMARTIRC_TYPE_KICK) {
            $nick = $ircdata->params[1];
        } else {
            $this->log(SMARTIRC_DEBUG_CHANNELSYNCING, 'DEBUG_CHANNELSYNCING: '
                .'unknown TYPE ('.$ircdata->type
                .') in _removeuser(), trying default', __FILE__, __LINE__
            );
            $nick = $ircdata->nick;
        }

        $lowerednick = strtolower($nick);

        if ($this->_nick == $nick) {
            $this->log(SMARTIRC_DEBUG_CHANNELSYNCING,
                'DEBUG_CHANNELSYNCING: we left channel: '.$ircdata->channel
                .' destroying...', __FILE__, __LINE__
            );
            unset($this->_channels[strtolower($ircdata->channel)]);
        } else {
            $lists = array('founders', 'admins', 'ops', 'hops', 'voices');

            if ($ircdata->type & SMARTIRC_TYPE_QUIT) {
                $this->log(SMARTIRC_DEBUG_CHANNELSYNCING,
                    'DEBUG_CHANNELSYNCING: user '.$nick
                    .' quit, removing him from all channels', __FILE__, __LINE__
                );

                // remove the user from all channels
                $channelkeys = array_keys($this->_channels);
                foreach ($channelkeys as $channelkey) {
                    // loop through all channels
                    $channel = &$this->getChannel($channelkey);
                    foreach ($channel->users as $uservalue) {
                        // loop through all user in this channel
                        if ($nick == $uservalue->nick) {
                            // found him, kill him
                            $this->log(SMARTIRC_DEBUG_CHANNELSYNCING,
                                'DEBUG_CHANNELSYNCING: found him on channel: '
                                .$channel->name.' destroying...',
                                __FILE__, __LINE__
                            );
                            unset($channel->users[$lowerednick]);

                            foreach ($lists as $list) {
                                if (isset($channel->{$list}[$nick])) {
                                    // die!
                                    $this->log(SMARTIRC_DEBUG_CHANNELSYNCING,
                                        'DEBUG_CHANNELSYNCING: removing him '
                                        ."from $list list", __FILE__, __LINE__
                                    );
                                    unset($channel->{$list}[$nick]);
                                }
                            }
                        }
                    }
                }
            } else {
                $this->log(SMARTIRC_DEBUG_CHANNELSYNCING,
                    'DEBUG_CHANNELSYNCING: removing user: '.$nick
                    .' from channel: '.$ircdata->channel, __FILE__, __LINE__
                );
                $channel = &$this->getChannel($ircdata->channel);
                unset($channel->users[$lowerednick]);

                foreach ($lists as $list) {
                    if (isset($channel->{$list}[$nick])) {
                        $this->log(SMARTIRC_DEBUG_CHANNELSYNCING,
                            'DEBUG_CHANNELSYNCING: removing him '
                            ."from $list list", __FILE__, __LINE__
                        );
                        unset($channel->{$list}[$nick]);
                    }
                }
            }
        }
        return $this;
    }
protected function _removeuser($ircdata)
    {
        if ($ircdata->type & (SMARTIRC_TYPE_PART | SMARTIRC_TYPE_QUIT)) {
            $nick = $ircdata->nick;
        } else if ($ircdata->type & SMARTIRC_TYPE_KICK) {
            $nick = $ircdata->params[1];
        } else {
            $this->log(SMARTIRC_DEBUG_CHANNELSYNCING, 'DEBUG_CHANNELSYNCING: '
                .'unknown TYPE ('.$ircdata->type
                .') in _removeuser(), trying default', __FILE__, __LINE__
            );
            $nick = $ircdata->nick;
        }

        $lowerednick = strtolower($nick);

        if ($this->_nick == $nick) {
            $this->log(SMARTIRC_DEBUG_CHANNELSYNCING,
                'DEBUG_CHANNELSYNCING: we left channel: '.$ircdata->channel
                .' destroying...', __FILE__, __LINE__
            );
            unset($this->_channels[strtolower($ircdata->channel)]);
        } else {
            $lists = array('founders', 'admins', 'ops', 'hops', 'voices');

            if ($ircdata->type & SMARTIRC_TYPE_QUIT) {
                $this->log(SMARTIRC_DEBUG_CHANNELSYNCING,
                    'DEBUG_CHANNELSYNCING: user '.$nick
                    .' quit, removing him from all channels', __FILE__, __LINE__
                );

                // remove the user from all channels
                $channelkeys = array_keys($this->_channels);
                foreach ($channelkeys as $channelkey) {
                    // loop through all channels
                    $channel = &$this->getChannel($channelkey);
                    foreach ($channel->users as $uservalue) {
                        // loop through all user in this channel
                        if ($nick == $uservalue->nick) {
                            // found him, kill him
                            $this->log(SMARTIRC_DEBUG_CHANNELSYNCING,
                                'DEBUG_CHANNELSYNCING: found him on channel: '
                                .$channel->name.' destroying...',
                                __FILE__, __LINE__
                            );
                            unset($channel->users[$lowerednick]);

                            foreach ($lists as $list) {
                                if (isset($channel->{$list}[$nick])) {
                                    // die!
                                    $this->log(SMARTIRC_DEBUG_CHANNELSYNCING,
                                        'DEBUG_CHANNELSYNCING: removing him '
                                        ."from $list list", __FILE__, __LINE__
                                    );
                                    unset($channel->{$list}[$nick]);
                                }
                            }
                        }
                    }
                }
            } else {
                $this->log(SMARTIRC_DEBUG_CHANNELSYNCING,
                    'DEBUG_CHANNELSYNCING: removing user: '.$nick
                    .' from channel: '.$ircdata->channel, __FILE__, __LINE__
                );
                $channel = &$this->getChannel($ircdata->channel);
                unset($channel->users[$lowerednick]);

                foreach ($lists as $list) {
                    if (isset($channel->{$list}[$nick])) {
                        $this->log(SMARTIRC_DEBUG_CHANNELSYNCING,
                            'DEBUG_CHANNELSYNCING: removing him '
                            ."from $list list", __FILE__, __LINE__
                        );
                        unset($channel->{$list}[$nick]);
                    }
                }
            }
        }
        return $this;
    }
protected function _removeuser ( $ ircdata ) { if ( $ ircdata -> type & ( SMARTIRC_TYPE_PART | SMARTIRC_TYPE_QUIT ) ) { $ nick = $ ircdata -> nick ; } else if ( $ ircdata -> type & SMARTIRC_TYPE_KICK ) { $ nick = $ ircdata -> params [ 1 ] ; } else { $ this -> log ( SMARTIRC_DEBUG_CHANNELSYNCING , 'DEBUG_CHANNELSYNCING: ' . 'unknown TYPE (' . $ ircdata -> type . ') in _removeuser(), trying default' , __FILE__ , __LINE__ ) ; $ nick = $ ircdata -> nick ; } $ lowerednick = strtolower ( $ nick ) ; if ( $ this -> _nick == $ nick ) { $ this -> log ( SMARTIRC_DEBUG_CHANNELSYNCING , 'DEBUG_CHANNELSYNCING: we left channel: ' . $ ircdata -> channel . ' destroying...' , __FILE__ , __LINE__ ) ; unset ( $ this -> _channels [ strtolower ( $ ircdata -> channel ) ] ) ; } else { $ lists = array ( 'founders' , 'admins' , 'ops' , 'hops' , 'voices' ) ; if ( $ ircdata -> type & SMARTIRC_TYPE_QUIT ) { $ this -> log ( SMARTIRC_DEBUG_CHANNELSYNCING , 'DEBUG_CHANNELSYNCING: user ' . $ nick . ' quit, removing him from all channels' , __FILE__ , __LINE__ ) ; // remove the user from all channels $ channelkeys = array_keys ( $ this -> _channels ) ; foreach ( $ channelkeys as $ channelkey ) { // loop through all channels $ channel = & $ this -> getChannel ( $ channelkey ) ; foreach ( $ channel -> users as $ uservalue ) { // loop through all user in this channel if ( $ nick == $ uservalue -> nick ) { // found him, kill him $ this -> log ( SMARTIRC_DEBUG_CHANNELSYNCING , 'DEBUG_CHANNELSYNCING: found him on channel: ' . $ channel -> name . ' destroying...' , __FILE__ , __LINE__ ) ; unset ( $ channel -> users [ $ lowerednick ] ) ; foreach ( $ lists as $ list ) { if ( isset ( $ channel -> { $ list } [ $ nick ] ) ) { // die! $ this -> log ( SMARTIRC_DEBUG_CHANNELSYNCING , 'DEBUG_CHANNELSYNCING: removing him ' . "from $list list" , __FILE__ , __LINE__ ) ; unset ( $ channel -> { $ list } [ $ nick ] ) ; } } } } } } else { $ this -> log ( SMARTIRC_DEBUG_CHANNELSYNCING , 'DEBUG_CHANNELSYNCING: removing user: ' . $ nick . ' from channel: ' . $ ircdata -> channel , __FILE__ , __LINE__ ) ; $ channel = & $ this -> getChannel ( $ ircdata -> channel ) ; unset ( $ channel -> users [ $ lowerednick ] ) ; foreach ( $ lists as $ list ) { if ( isset ( $ channel -> { $ list } [ $ nick ] ) ) { $ this -> log ( SMARTIRC_DEBUG_CHANNELSYNCING , 'DEBUG_CHANNELSYNCING: removing him ' . "from $list list" , __FILE__ , __LINE__ ) ; unset ( $ channel -> { $ list } [ $ nick ] ) ; } } } } return $ this ; }
removes an user from one channel or all if he quits

@internal
@param object $ircdata
@return Net_SmartIRC
removes an user from one channel or all if he quits