X-Git-Url: http://git.polytechnique.org/?a=blobdiff_plain;f=classes%2Fphone.php;h=be6f3ad80fbd432795e44739f2ddd42d0fefb454;hb=e8ecbab4ad48a3c8c262c91bb492312be3738f86;hp=fa029231135ea7ff3520929895bf129b1c2a8e03;hpb=0c1a29ba0e531d0cd1dfa221c3a87ae36432289d;p=platal.git diff --git a/classes/phone.php b/classes/phone.php index fa02923..be6f3ad 100644 --- a/classes/phone.php +++ b/classes/phone.php @@ -55,21 +55,22 @@ class Phone const LINK_ADDRESS = 'address'; const LINK_PROFILE = 'user'; const LINK_COMPANY = 'hq'; + const LINK_GROUP = 'group'; /** The following fields, but $error, all correspond to the fields of the * database table profile_phones. */ - private $id = 0; - private $pid = 0; - private $search = ''; - private $link_type = 'user'; - private $link_id = 0; + public $id = 0; + public $pid = 0; + public $search = ''; + public $link_type = 'user'; + public $link_id = 0; // The following fields are the fields of the form in the profile edition. - private $type = 'fixed'; + public $type = 'fixed'; public $display = ''; public $pub = 'ax'; public $comment = ''; - private $error = false; + public $error = false; public function __construct(array $data = array()) { @@ -80,31 +81,6 @@ class Phone } } - public function linkType() - { - return $this->link_type; - } - - public function linkId() - { - return $this->link_id; - } - - public function id() - { - return $this->id; - } - - public function pid() - { - return $this->pid; - } - - public function search() - { - return $this->search; - } - public function setId($id) { $this->id = $id; @@ -211,9 +187,10 @@ class Phone if ((!isset($format['phoneprf'])) || ($format['phoneprf'] == '')) { $res = XDB::query('SELECT phonePrefix AS phoneprf, phoneFormat AS format FROM geoloc_countries - WHERE phonePrefix = {?} OR phonePrefix = {?} OR phonePrefix = {?} + WHERE phonePrefix = SUBSTRING({?}, 1, LENGTH(phonePrefix)) + ORDER BY LENGTH(phonePrefix) DESC LIMIT 1', - substr($tel, 0, 1), substr($tel, 0, 2), substr($tel, 0, 3)); + $tel); if ($res->numRows() == 0) { // No country found, does not format more than prepending a '+' sign. $this->error = true; @@ -356,16 +333,18 @@ class Phone $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(); + // Restrict phone visibility to $maxPublicity + if (!is_null($maxPublicity) && Visibility::isLessRestrictive($maxPublicity, $phone->pub)) { + $phone->pub = $maxPublicity; } $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)); } @@ -376,7 +355,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; } @@ -396,9 +375,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); } } @@ -413,7 +392,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) { @@ -425,15 +404,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()