X-Git-Url: http://git.polytechnique.org/?a=blobdiff_plain;f=classes%2Fphone.php;h=29449e73ba90cad394c5dc6c48e17803c121018c;hb=a67a14b4ab7ea2661f7cdbd1e201be6a0aaf6193;hp=cf227ed898e59adc9bf9d8f35dea45020a4faf36;hpb=555a45120355ea375ddf874ca13cc2f941b4a7a4;p=platal.git diff --git a/classes/phone.php b/classes/phone.php index cf227ed..29449e7 100644 --- a/classes/phone.php +++ b/classes/phone.php @@ -1,6 +1,6 @@ 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; + $this->id = $id; } /** Returns the unique ID of a phone. @@ -281,8 +262,10 @@ class Phone private function toString() { - return 'type : ' . $this->type .', numéro : ' . $this->display - . ', commentaire : « ' . $this->comment . ' », affichage : ' . $this->pub; + static $pubs = array('public' => 'publique', 'ax' => 'annuaire AX', 'private' => 'privé'); + static $types = array('fax' => 'fax', 'fixed' => 'fixe', 'mobile' => 'mobile'); + return $this->display . ' (' . $types[$this->type] . (($this->comment) ? ', commentaire : « ' . $this->comment . ' »' : '') + . ', affichage ' . $pubs[$this->pub] . ')'; } private function isEmpty() @@ -294,22 +277,29 @@ class Phone { $this->format(); if (!$this->isEmpty()) { - XDB::execute('INSERT INTO profile_phones (pid, link_type, link_id, tel_id, tel_type, - search_tel, display_tel, pub, comment) - VALUES ({?}, {?}, {?}, {?}, {?}, {?}, {?}, {?}, {?})', + XDB::execute('INSERT IGNORE INTO profile_phones (pid, link_type, link_id, tel_id, tel_type, + search_tel, display_tel, pub, comment) + VALUES ({?}, {?}, {?}, {?}, {?}, {?}, {?}, {?}, {?})', $this->pid, $this->link_type, $this->link_id, $this->id, $this->type, $this->search, $this->display, $this->pub, $this->comment); } } - static public function deletePhones($pid, $link_type, $link_id = null) + public function delete() + { + XDB::execute('DELETE FROM profile_phones + WHERE pid = {?} AND link_type = {?} AND link_id = {?} AND tel_id = {?}', + $this->pid, $this->link_type, $this->link_id, $this->id); + } + + static public function deletePhones($pid, $link_type, $link_id = null, $deletePrivate = true) { $where = ''; if (!is_null($link_id)) { $where = XDB::format(' AND link_id = {?}', $link_id); } XDB::execute('DELETE FROM profile_phones - WHERE pid = {?} AND link_type = {?}' . $where, + WHERE pid = {?} AND link_type = {?}' . $where . (($deletePrivate) ? '' : ' AND pub IN (\'public\', \'ax\')'), $pid, $link_type); } @@ -335,32 +325,50 @@ class Phone } } - static private function formArrayWalk(array $data, $function, &$success = true, $requiresEmptyPhone = false) + 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->format() && $success); + $success = (!$phone->error && ($phone->format() || $phone->isEmpty()) && $success); if (!$phone->isEmpty()) { + if (!is_null($maxPublicity) && $maxPublicity->isVisible($phone->pub)) { + $phone->pub = $maxPublicity->level(); + } $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(); + } $phones[] = call_user_func(array($phone, $function)); } return $phones; } // Formats an array of form phones into an array of form formatted phones. - static public function formatFormArray(array $data, &$success = true) + static public function formatFormArray(array $data, &$success = true, $maxPublicity = null) { - return self::formArrayWalk($data, 'toFormArray', $success, true); + $phones = self::formArrayWalk($data, 'toFormArray', $success, true, $maxPublicity); + usort($phones, 'ProfileVisibility::comparePublicity'); + return $phones; } static public function formArrayToString(array $data) { - return implode(' ; ', self::formArrayWalk($data, 'toString')); + return implode(', ', self::formArrayWalk($data, 'toString')); + } + + static public function hasPrivate(array $phones) + { + foreach ($phones as $phone) { + if ($phone['pub'] == 'private') { + return true; + } + } + return false; } static public function iterate(array $pids = array(), array $link_types = array(), @@ -399,8 +407,8 @@ class PhoneIterator implements PlIterator $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 - WHERE ' . implode(' AND ', $where) . ' - ORDER BY link_id, tel_id'; + ' . ((count($where) > 0) ? 'WHERE ' . implode(' AND ', $where) : '') . ' + ORDER BY pid, link_id, tel_id'; $this->dbiter = XDB::iterator($sql); }