X-Git-Url: http://git.polytechnique.org/?a=blobdiff_plain;f=classes%2Fphone.php;h=21be6a67a863033e7688da1499f0f3e87d3535ec;hb=c90dde9391588ae99bd1852fa1e95f32b016e013;hp=34d7db94d0612a3b0645ba1b638d6cf64898042d;hpb=76362eeb011de4f2cd7825f557643a72494475f9;p=platal.git diff --git a/classes/phone.php b/classes/phone.php index 34d7db9..21be6a6 100644 --- a/classes/phone.php +++ b/classes/phone.php @@ -1,6 +1,6 @@ numRows() == 0) { // No country found, does not format more than prepending a '+' sign. $this->error = true; @@ -327,20 +329,24 @@ class Phone static private function formArrayWalk(array $data, $function, &$success = true, $requiresEmptyPhone = false, $maxPublicity = null) { $phones = array(); - foreach ($data as $item) { - $phone = new Phone($item); - $success = (!$phone->error && ($phone->format() || $phone->isEmpty()) && $success); - if (!$phone->isEmpty()) { - if (!is_null($maxPublicity) && $maxPublicity->isVisible($phone->pub)) { - $phone->pub = $maxPublicity->level(); + if (!is_null($data)) { + foreach ($data as $item) { + $phone = new Phone($item); + $success = (!$phone->error && ($phone->format() || $phone->isEmpty()) && $success); + if (!$phone->isEmpty()) { + // Restrict phone visibility to $maxPublicity + if (!is_null($maxPublicity) && Visibility::isLessRestrictive($maxPublicity, $phone->pub)) { + $phone->pub = $maxPublicity; + } + $phones[] = call_user_func(array($phone, $function)); } - $phones[] = call_user_func(array($phone, $function)); } } if (count($phones) == 0 && $requiresEmptyPhone) { $phone = new Phone(); - if (!is_null($maxPublicity) && $maxPublicity->isVisible($phone->pub)) { - $phone->pub = $maxPublicity->level(); + if (!is_null($maxPublicity) && Visibility::isLessRestrictive($maxPublicity, $phone->pub)) { + // Restrict phone visibility to $maxPublicity + $phone->pub = $maxPublicity; } $phones[] = call_user_func(array($phone, $function)); } @@ -351,7 +357,7 @@ class Phone static public function formatFormArray(array $data, &$success = true, $maxPublicity = null) { $phones = self::formArrayWalk($data, 'toFormArray', $success, true, $maxPublicity); - usort($phones, 'ProfileVisibility::comparePublicity'); + usort($phones, 'Visibility::comparePublicity'); return $phones; } @@ -371,9 +377,9 @@ class Phone } static public function iterate(array $pids = array(), array $link_types = array(), - array $link_ids = array(), array $pubs = array()) + array $link_ids = array(), $visibility = null) { - return new PhoneIterator($pids, $link_types, $link_ids, $pubs); + return new PhoneIterator($pids, $link_types, $link_ids, $visibility); } } @@ -388,7 +394,7 @@ class PhoneIterator implements PlIterator { private $dbiter; - public function __construct(array $pids, array $link_types, array $link_ids, array $pubs) + public function __construct(array $pids, array $link_types, array $link_ids, $visibility) { $where = array(); if (count($pids) != 0) { @@ -400,15 +406,18 @@ class PhoneIterator implements PlIterator if (count($link_ids) != 0) { $where[] = XDB::format('(link_id IN {?})', $link_ids); } - if (count($pubs) != 0) { - $where[] = XDB::format('(pub IN {?})', $pubs); + if ($visibility == null || !($visibility instanceof Visibility)) { + $visibility = Visibility::defaultForRead(); } + $where[] = 'pve.best_display_level+0 <= pub+0'; + $sql = 'SELECT search_tel AS search, display_tel AS display, comment, link_id, tel_type AS type, link_type, tel_id AS id, pid, pub FROM profile_phones - ' . ((count($where) > 0) ? 'WHERE ' . implode(' AND ', $where) : '') . ' + LEFT JOIN profile_visibility_enum AS pve ON (pve.access_level = {?}) + WHERE ' . implode(' AND ', $where) . ' ORDER BY pid, link_id, tel_id'; - $this->dbiter = XDB::iterator($sql); + $this->dbiter = XDB::iterator($sql, $visibility->level()); } public function next()