"D" => self::MODE_TYPE_D,
"d" => self::MODE_TYPE_D,
"R" => self::MODE_TYPE_D,
- "z" => self::MODE_TYPE_D
+ "z" => self::MODE_TYPE_D,
+
+ //special behavior
+ "o" => self::MODE_TYPE_B,
+ "v" => self::MODE_TYPE_B
);
private static $modevalues = null;
private $modeflags = 0;
private $modeparams = array();
+ private $channel;
- public function __construct($modes) {
+ public function __construct($channel) {
if(self::$modevalues == null) {
//build modevalues array
$flag = 1;
$flag <<= 1;
}
}
- $this->parseModes($modes);
+ $this->channel = $channel;
}
public function parseModes($modes) {
$this->modeparams[$mode] = $args[$c++];
}
}
+ return $c-1;
}
public function setModes($modes, $returndiff = false) {
trigger_error("unknown mode (".$mode.") on setModes (".$modes.").", E_USER_WARNING);
continue;
}
+ if($mode == "o" || $mode == "v") {
+ if($this->setPrivs($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) {
if($returndiff && !($this->modeflags & $flag)) {
}
}
+ private function setPrivs($add, $mode, $user) {
+ $user = P10_User::getUserByNum($user);
+ if($user == null) {
+ trigger_error("Tried to set privs on a User that does not exist.", E_USER_ERROR);
+ return;
+ }
+ $privs = $this->channel->getUserPrivs($user);
+ $privFlag = 0;
+ if($mode == "o") $privFlag = P10_Channel::USERPRIV_OPED;
+ if($mode == "v") $privFlag = P10_Channel::USERPRIV_VOICE;
+ if(!($add xor ($privs & $privFlag)))
+ return false;
+ if($add) $privs |= $privFlag;
+ else $privs &= ~$privFlag;
+ $this->channel->setUserPrivs($user, $privs);
+ return true;
+
+ }
+
public function getModeString() {
$modestr = "+";
$paramstr = "";
foreach(self::$modevalues as $mode => $flag) {
if(($this->modeflags & $flag)) {
$modestr .= $mode;
- if(self::$modevalues[$mode] == self::MODE_WITH_PARAMETER) {
+ if(self::$modevalues[$mode] == self::MODE_TYPE_B || self::$modevalues[$mode] == self::MODE_TYPE_C) {
$paramstr .= " ".$this->modeparams[$mode];
}
}
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);
+ continue;
+ }
+ $flag = self::$modevalues[$mode];
+ if(self::$modevalues[$mode] == self::MODE_TYPE_B || self::$modevalues[$mode] == self::MODE_TYPE_C) {
+ return (($this->modeflags & $flag) ? $this->modeparams[$mode] : false);
+ } else
+ return ($this->modeflags & $flag);
+ }
+
}
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);
+ continue;
+ }
+ $flag = self::$modevalues[$mode];
+ if(self::$modevalues[$mode] == self::MODE_WITH_PARAMETER) {
+ return (($this->modeflags & $flag) ? $this->modeparams[$mode] : false);
+ } else
+ return ($this->modeflags & $flag);
+ }
+
}
?>
\ No newline at end of file