Add 'hidden' flag to text descriptions of the 'pub' flag
[platal.git] / classes / phone.php
index 0cb0703..c14a7b2 100644 (file)
@@ -1,6 +1,6 @@
 <?php
 /***************************************************************************
- *  Copyright (C) 2003-2011 Polytechnique.org                              *
+ *  Copyright (C) 2003-2014 Polytechnique.org                              *
  *  http://opensource.polytechnique.org/                                   *
  *                                                                         *
  *  This program is free software; you can redistribute it and/or modify   *
@@ -187,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;
@@ -262,7 +263,7 @@ class Phone
 
     private function toString()
     {
-        static $pubs = array('public' => 'publique', 'ax' => 'annuaire AX', 'private' => 'privé');
+        static $pubs = array('public' => 'publique', 'ax' => 'annuaire papier', 'private' => 'privé', 'hidden' => 'administrateurs');
         static $types = array('fax' => 'fax', 'fixed' => 'fixe', 'mobile' => 'mobile');
         return $this->display . ' (' . $types[$this->type] . (($this->comment) ? ', commentaire : « ' . $this->comment . ' »' : '')
             . ', affichage ' . $pubs[$this->pub] . ')';
@@ -328,20 +329,22 @@ 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()) {
-                // Restrict phone visibility to $maxPublicity
-                if (!is_null($maxPublicity) && Visibility::isLessRestrictive($phone->pub, $maxPublicity)) {
-                    $phone->pub = $maxPublicity;
+        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) && Visibility::isLessRestrictive($phone->pub, $maxPublicity)) {
+            if (!is_null($maxPublicity) && Visibility::isLessRestrictive($maxPublicity, $phone->pub)) {
                 // Restrict phone visibility to $maxPublicity
                 $phone->pub = $maxPublicity;
             }
@@ -374,7 +377,7 @@ class Phone
     }
 
     static public function iterate(array $pids = array(), array $link_types = array(),
-                                   array $link_ids = array(), Visibility $visibility)
+                                   array $link_ids = array(), $visibility = null)
     {
         return new PhoneIterator($pids, $link_types, $link_ids, $visibility);
     }
@@ -391,7 +394,7 @@ class PhoneIterator implements PlIterator
 {
     private $dbiter;
 
-    public function __construct(array $pids, array $link_types, array $link_ids, Visibility $visibility)
+    public function __construct(array $pids, array $link_types, array $link_ids, $visibility)
     {
         $where = array();
         if (count($pids) != 0) {
@@ -403,7 +406,7 @@ class PhoneIterator implements PlIterator
         if (count($link_ids) != 0) {
             $where[] = XDB::format('(link_id IN {?})', $link_ids);
         }
-        if ($visibility == null) {
+        if ($visibility == null || !($visibility instanceof Visibility)) {
             $visibility = Visibility::defaultForRead();
         }
         $where[] = 'pve.best_display_level+0 <= pub+0';
@@ -450,5 +453,5 @@ class PhoneIterator implements PlIterator
     }
 }
 
-// vim:set et sw=4 sts=4 sws=4 foldmethod=marker enc=utf-8:
+// vim:set et sw=4 sts=4 sws=4 foldmethod=marker fenc=utf-8:
 ?>