array(self::VIS_PUBLIC), self::VIS_AX => array(self::VIS_AX, self::VIS_PUBLIC), self::VIS_PRIVATE => array(self::VIS_PRIVATE, self::VIS_AX, self::VIS_PUBLIC)); const VIS_PUBLIC = 'public'; const VIS_AX = 'ax'; const VIS_PRIVATE = 'private'; private $level; public function __construct($level = null, $force = false) { if ($force) { $this->forceLevel($level); } else { $this->setLevel($level); } } public function setLevel($level = self::VIS_PUBLIC) { if ($level != null && $level != self::VIS_PRIVATE && $level != self::VIS_AX && $level != self::VIS_PUBLIC) { Platal::page()->kill("Invalid visibility: " . $level); } // Unlogged or not allowed to view directory_ax or requesting public // => public view if (!S::logged() || !S::user()->checkPerms('directory_ax') || $level == self::VIS_PUBLIC) { $level = self::VIS_PUBLIC; // Not allowed to view directory_private or requesting ax } else if (!S::user()->checkPerms('directory_private') || $level == self::VIS_AX) { $level = self::VIS_AX; } else { $level = self::VIS_PRIVATE; } if ($this->level == null || $this->level == self::VIS_PRIVATE) { $this->level = $level; } else if ($this->level == self::VIS_AX && $level == self::VIS_PRIVATE) { return; } else { $this->level = self::VIS_PUBLIC; } } public function forceLevel($level) { if ($level != self::VIS_PRIVATE && $level != self::VIS_AX && $level != self::VIS_PUBLIC) { Platal::page()->kill('Invalid visibility: ' . $level); } $this->level = $level; } public function level() { if ($this->level == null) { return self::VIS_PUBLIC; } else { return $this->level; } } public function levels() { return self::$v_values[$this->level()]; } public function isVisible($visibility) { return in_array($visibility, $this->levels()); } static public function comparePublicity($a, $b) { $a_pub = new ProfileVisibility($a['pub'], true); $b_pub = new ProfileVisibility($b['pub'], true); return !$a_pub->isVisible($b_pub->level()); } } // vim:set et sw=4 sts=4 sws=4 foldmethod=marker enc=utf-8: ?>