Merge branch 'xorg/1.0.2/master' into xorg/master
[platal.git] / classes / phone.php
index cf227ed..64dfe0e 100644 (file)
@@ -67,7 +67,7 @@ class Phone
     // The following fields are the fields of the form in the profile edition.
     private $type = 'fixed';
     public $display = '';
-    private $pub = 'private';
+    public $pub = 'ax';
     public $comment = '';
     private $error = false;
 
@@ -105,6 +105,11 @@ class Phone
         return $this->search;
     }
 
+    public function setId($id)
+    {
+        $this->id = $id;
+    }
+
     /** Returns the unique ID of a phone.
      * This ID will allow to link it to an address, a user or a job.
      * The format is address_addressId_phoneId (where phoneId is the id
@@ -281,8 +286,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()
@@ -302,14 +309,21 @@ class Phone
         }
     }
 
-    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 +349,38 @@ 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);
+        return self::formArrayWalk($data, 'toFormArray', $success, true, $maxPublicity);
     }
 
     static public function formArrayToString(array $data)
     {
-        return implode(' ; ', self::formArrayWalk($data, 'toString'));
+        return implode(', ', self::formArrayWalk($data, 'toString'));
     }
 
     static public function iterate(array $pids = array(), array $link_types = array(),
@@ -399,8 +419,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);
     }