value = $flags; } /** add flag * @param $flag XXX * @return VOID */ public function addFlag($flag) { if (!$flag) return; if (!$this->hasflag($flag)) { if ($this->value) $this->value .= $this->sep; $this->value .= $flag; } } /** test si flag ou pas * @param $flag XXX * @return 1 || 0 */ public function hasFlag($flag) { $tok = strtok($this->value,$this->sep); while ($tok) { if ($tok==$flag) return 1; $tok = strtok($this->sep); } return 0; } /** test flag combination */ public function hasFlagCombination($flag) { $perms = explode(',', $flag); foreach ($perms as $perm) { $ok = true; $rights = explode(':', $perm); foreach ($rights as $right) { if (($right{0} == '!' && $this->hasFlag(substr($right, 1))) || !$this->hasFlag($right)) { $ok = false; } } if ($ok) { return true; } } return false; } /** remove flag * @param $flag XXX * @return VOID */ public function rmFlag($flag) { if (!$flag) return; $newvalue = ""; $tok = strtok($this->value,$this->sep); while ($tok) { if ($tok!=$flag) { if ($newvalue) $newvalue .= $this->sep; $newvalue .= $tok; } $tok = strtok($this->sep); } $this->value=$newvalue; } /** return the flagset */ public function flags() { return $this->value; } } // vim:set et sw=4 sts=4 sws=4 foldmethod=marker enc=utf-8: ?>