X-Git-Url: http://git.pk910.de/?p=PHP-P10.git;a=blobdiff_plain;f=Uplink%2FP10_ModeSets.class.php;h=aaaf8e73fb2e8c23a9bfe00052f4341ddb7d6fd0;hp=2d1d03d9af4b094ef0f2a3732821337b5b89d91e;hb=7f51193ddac01b0540000c756c50167ff015e02a;hpb=6127794f2933681e60538ef2c9f5f04f3c9ea5da diff --git a/Uplink/P10_ModeSets.class.php b/Uplink/P10_ModeSets.class.php index 2d1d03d..aaaf8e7 100644 --- a/Uplink/P10_ModeSets.class.php +++ b/Uplink/P10_ModeSets.class.php @@ -1,12 +1,10 @@ . * * * ************************************************************************ - * + * * Uplink/P10_ModeSets.class.php * * classes to parse and store channel or user modes @@ -70,16 +67,18 @@ class P10_ChannelModeSet { "d" => self::MODE_TYPE_D, "R" => self::MODE_TYPE_D, "z" => self::MODE_TYPE_D, - - //special behavior + "S" => self::MODE_TYPE_D, + + //special behavior "o" => self::MODE_TYPE_B, + "h" => self::MODE_TYPE_B, "v" => self::MODE_TYPE_B ); private static $modevalues = null; private $modeflags = 0; private $modeparams = array(); private $channel; - + public function __construct($channel) { if(self::$modevalues == null) { //build modevalues array @@ -92,7 +91,7 @@ class P10_ChannelModeSet { } $this->channel = $channel; } - + public function parseModes($modes) { $args = explode(" ",$modes); $c = 1; @@ -116,7 +115,7 @@ class P10_ChannelModeSet { } return $c-1; } - + public function setModes($modes, $returndiff = false) { $args = explode(" ",$modes); $c = 1; @@ -131,7 +130,7 @@ class P10_ChannelModeSet { $add = true; continue; } - if($mode == "-") { + if($mode == "-") { $add = false; continue; } @@ -139,7 +138,7 @@ class P10_ChannelModeSet { trigger_error("unknown mode (".$mode.") on setModes (".$modes.").", E_USER_WARNING); continue; } - if($mode == "o" || $mode == "v") { + if($mode == "o" || $mode == "h" || $mode == "v") { if($this->setPrivs($add, $mode, $args[$c++])) { if($returndiff && $add) { $modestradd .= $mode; @@ -150,6 +149,17 @@ class P10_ChannelModeSet { } } continue; + } else if($mode == "b") { + if($this->handleBan($add, $mode, $args[$c++])) { + if($returndiff && $add) { + $modestradd .= $mode; + $paramstradd .= " ".$args[$c-1]; + } else if($returndiff && !$add) { + $modestrdel .= $mode; + $paramstrdel .= " ".$args[$c-1]; + } + } + continue; } $flag = self::$modevalues[$mode]; if($add) { @@ -184,7 +194,12 @@ class P10_ChannelModeSet { return $modediff; } } - + + private function handleBan($add, $mode, $mask) { + //no ban management right now... + return true; + } + private function setPrivs($add, $mode, $user) { $user = P10_User::getUserByNum($user); if($user == null) { @@ -194,16 +209,17 @@ class P10_ChannelModeSet { $privs = $this->channel->getUserPrivs($user); $privFlag = 0; if($mode == "o") $privFlag = P10_Channel::USERPRIV_OPED; + if($mode == "h") $privFlag = P10_Channel::USERPRIV_HALFOP; if($mode == "v") $privFlag = P10_Channel::USERPRIV_VOICE; if(!($add xor ($privs & $privFlag))) - return false; + return false; if($add) $privs |= $privFlag; else $privs &= ~$privFlag; $this->channel->setUserPrivs($user, $privs); return true; - + } - + public function getModeString() { $modestr = "+"; $paramstr = ""; @@ -217,7 +233,7 @@ class P10_ChannelModeSet { } return $modestr.$paramstr; } - + public function hasMode($mode) { if(!array_key_exists($mode, self::$modevalues)) { trigger_error("unknown mode (".$mode.") on setModes (".$modes.").", E_USER_WARNING); @@ -227,9 +243,9 @@ class P10_ChannelModeSet { if(self::$modes[$mode] == self::MODE_TYPE_B || self::$modes[$mode] == self::MODE_TYPE_C) { return (($this->modeflags & $flag) ? $this->modeparams[$mode] : false); } else - return ($this->modeflags & $flag); + return ($this->modeflags & $flag); } - + } class P10_UserModeSet { @@ -242,7 +258,7 @@ class P10_UserModeSet { "s" => self::MODE_WITHOUT_PARAMETER, "d" => self::MODE_WITHOUT_PARAMETER, "k" => self::MODE_WITHOUT_PARAMETER, - "g" => self::MODE_WITH_PARAMETER, + "g" => self::MODE_WITHOUT_PARAMETER, "r" => self::MODE_WITH_PARAMETER, "f" => self::MODE_WITH_PARAMETER, "n" => self::MODE_WITHOUT_PARAMETER, @@ -259,7 +275,7 @@ class P10_UserModeSet { private static $modevalues = null; private $modeflags = 0; private $modeparams = array(); - + public function __construct($modes) { if(self::$modevalues == null) { //build modevalues array @@ -272,7 +288,7 @@ class P10_UserModeSet { } $this->parseModes($modes); } - + public function parseModes($modes) { $args = explode(" ",$modes); $c = 1; @@ -294,7 +310,7 @@ class P10_UserModeSet { } } } - + public function setModes($modes, $returndiff = false) { $args = explode(" ",$modes); $c = 1; @@ -308,7 +324,7 @@ class P10_UserModeSet { $add = true; continue; } - if($mode == "-") { + if($mode == "-") { $add = false; continue; } @@ -342,7 +358,7 @@ class P10_UserModeSet { return $modediff; } } - + public function getModeString() { $modestr = "+"; $paramstr = ""; @@ -356,7 +372,7 @@ class P10_UserModeSet { } return $modestr.$paramstr; } - + public function hasMode($mode) { if(!array_key_exists($mode, self::$modevalues)) { trigger_error("unknown mode (".$mode.") on setModes (".$modes.").", E_USER_WARNING); @@ -366,9 +382,9 @@ class P10_UserModeSet { if(self::$modes[$mode] == self::MODE_WITH_PARAMETER) { return (($this->modeflags & $flag) ? $this->modeparams[$mode] : false); } else - return ($this->modeflags & $flag); + return ($this->modeflags & $flag); } - + } ?> \ No newline at end of file