Merge commit 'origin/master' into fusionax
authorStéphane Jacob <sj@m4x.org>
Fri, 28 Aug 2009 09:33:22 +0000 (11:33 +0200)
committerStéphane Jacob <sj@m4x.org>
Fri, 28 Aug 2009 09:33:22 +0000 (11:33 +0200)
1  2 
ChangeLog
modules/profile/page.inc.php

diff --combined ChangeLog
+++ b/ChangeLog
@@@ -1,26 -1,13 +1,31 @@@
  ================================================================================
 +VERSION 0.f.0                                                         XX XX XXXX
 +
 +New:
 +    * Core:
 +        - Centralises email management through an email combobox           -JAC
 +
 +Bug/Wish:
 +    * Profile:
 +        - #16, #528, #917: Changes job interface, updates business sectors -JAC
 +        - #188: Adds informations about the Corps d'État                   -JAC
 +        - #209: Thoroughly changes education's implementation              -JAC
 +        - #373: User now chooses the name we use to talk to him/her        -JAC
 +        - #386: Adds the possibility to fill in multiple nationalities     -JAC
 +        - #443: Adds concept of ordinary firstname                         -JAC
 +        - #450: Adds marital name, thus ordinary name can be any name      -JAC
 +        - #891: Improves education display                                 -JAC
 +
 +================================================================================
  VERSION 0.10.2                                                        XX XX XXXX
  
  New:
  
+ From 0.10.1 branch:
+     * Profile:
+         - #977: Professional addresses can now be deleted                  -JAC
  ================================================================================
  VERSION 0.10.1                                                        30 07 2009
  
@@@ -1371,9 -1358,7 +1376,9 @@@ ACRONYMS
      * CAT: Florian El Ahdab     (LeChat)    <florian.el-ahdab@m4x.org>
      * FAL: Raphaël Marichez     (Falco)     <raphael.marichez@m4x.org>
      * FRU: Florent Bruneau      (Fruneau)   <florent.bruneau@m4x.org>
 +    * GUI: Guillaume Bandet     (GUI)       <guillaume.bandet@m4x.org>
      * JAC: Stéphane Jacob       (jacou)     <stephane.jacob@m4x.org>
 +    * JM : Jean-Marc Bécu                   <jean-marc.becu@m4x.org>
      * JS : Jean Sébastien Bedo              <jean-sebastien.bedo@m4x.org>
      * MC : Pierre Habouzit      (MadCoder)  <pierre.habouzit@m4x.org>
      * mYk: Aymeric Augustin     (mYk)       <aymeric.augustin@m4x.org>
@@@ -76,22 -76,6 +76,22 @@@ class ProfileEmail extends ProfileNoSav
      }
  }
  
 +class ProfileNumber extends ProfileNoSave
 +{
 +    public function value(ProfilePage &$page, $field, $value, &$success)
 +    {
 +        if (is_null($value)) {
 +            return isset($page->values[$field]) ? $page->values[$field] : S::v($field);
 +        }
 +        $value = trim($value);
 +        $success = empty($value) || is_numeric($value);
 +        if (!$success) {
 +            Platal::page()->trigError('Numéro invalide');
 +        }
 +        return $value;
 +    }
 +}
 +
  
  class ProfileTel extends ProfileNoSave
  {
          if (is_null($value)) {
              return isset($page->values[$field]) ? $page->values[$field] : S::v($field);
          }
 -        $success = !preg_match('/[<>{}@&#~\/:;?,!§*_`\[\]|%$^=]/', $value, $matches);
 +        require_once('profil.func.inc.php');
 +        $value = format_phone_number($value);
 +        if($value == '') {
 +            $success = true;
 +            return $value;
 +        }
 +        $value = format_display_number($value,$error);
 +        $success = !$error;
          if (!$success) {
 -            Platal::page()->trigError('Le numéro de téléphone contient un caractère interdit : ' . pl_entities($matches[0][0]));
 +            Platal::page()->trigError('Le préfixe international du numéro de téléphone est inconnu. ');
          }
          return $value;
      }
  }
  
 +class ProfilePhones implements ProfileSetting
 +{
 +    private $tel;
 +    private $pub;
 +    protected $id;
 +    protected $link_type;
 +    protected $link_id;
 +
 +    public function __construct($type, $link_id, $id = 0)
 +    {
 +        if ($id != 0) {
 +            $this->id = $id;
 +        } else {
 +            $this->id = S::i('uid');
 +        }
 +        $this->tel = new ProfileTel();
 +        $this->pub = new ProfilePub();
 +        $this->link_type = $type;
 +        $this->link_id   = $link_id;
 +    }
 +
 +    public function value(ProfilePage &$page, $field, $value, &$success)
 +    {
 +        $success = true;
 +        if (is_null($value)) {
 +            $value = array();
 +            $res = XDB::iterator("SELECT  t.display_tel AS tel, t.tel_type AS type, t.pub, t.comment
 +                                    FROM  profile_phones AS t
 +                                   WHERE  t.uid = {?} AND t.link_type = {?}
 +                                ORDER BY  t.tel_id",
 +                                 $this->id, $this->link_type);
 +            if ($res->numRows() > 0) {
 +                $value = $res->fetchAllAssoc();
 +            } else {
 +                $value = array(
 +                        0 => array(
 +                            'type'    => 'fixed',
 +                            'tel'     => '',
 +                            'pub'     => 'private',
 +                            'comment' => '',
 +                            )
 +                        );
 +            }
 +        }
 +        foreach ($value as $key=>&$phone) {
 +            if (isset($phone['removed']) && $phone['removed']) {
 +                unset($value[$key]);
 +            } else {
 +                unset($phone['removed']);
 +                $phone['pub'] = $this->pub->value($page, 'pub', $phone['pub'], $s);
 +                $phone['tel'] = $this->tel->value($page, 'tel', $phone['tel'], $s);
 +                if(!isset($phone['type']) || ($phone['type'] != 'fixed' && $phone['type'] != 'mobile' && $phone['type'] != 'fax')) {
 +                    $phone['type'] = 'fixed';
 +                    $s = false;
 +                }
 +                if (!$s) {
 +                    $phone['error'] = true;
 +                    $success = false;
 +                }
 +                if (!isset($phone['comment'])) {
 +                    $phone['comment'] = '';
 +                }
 +            }
 +        }
 +        return $value;
 +    }
 +
 +    private function saveTel($telid, array &$phone)
 +    {
 +        if ($phone['tel'] != '') {
 +            XDB::execute("INSERT INTO  profile_phones (uid, link_type, link_id, tel_id, tel_type,
 +                                       search_tel, display_tel, pub, comment)
 +                               VALUES  ({?}, {?}, {?}, {?}, {?},
 +                                       {?}, {?}, {?}, {?})",
 +                         $this->id, $this->link_type, $this->link_id, $telid, $phone['type'],
 +                         format_phone_number($phone['tel']), $phone['tel'], $phone['pub'], $phone['comment']);
 +        }
 +    }
 +
 +    public function save(ProfilePage &$page, $field, $value)
 +    {
 +        XDB::execute("DELETE FROM  profile_phones
 +                            WHERE  uid = {?} AND link_type = {?} AND link_id = {?}",
 +                            $this->id, $this->link_type, $this->link_id);
 +        $this->saveTels($field, $value);
 +    }
 +
 +    //Only saves phones without a delete operation
 +    public function saveTels($field, $value)
 +    {
 +        foreach ($value as $telid=>&$phone) {
 +            $this->saveTel($telid, $phone);
 +        }
 +    }
 +}
 +
  class ProfilePub extends ProfileNoSave
  {
      public function value(ProfilePage &$page, $field, $value, &$success)
          if (is_null($value)) {
              return isset($page->values[$field]) ? $page->values[$field] : S::v($field);
          }
 -        if (is_null($value) || !$value) {
 +        if (!$value) {
              $value = 'private';
 -        } else if ($value == 'on') { // Checkbox
 +        } elseif ($value == 'on') { // Checkbox
              $value = 'public';
          }
          return $value;
@@@ -234,7 -115,7 +234,7 @@@ class ProfileBool extends ProfileNoSav
      {
          $success = true;
          if (is_null($value)) {
 -            $value = @$page->values[$field];
 +            $value = isset($page->values[$field]) ? $page->values[$field] : null;
          }
          return $value ? "1" : "";
      }
@@@ -265,27 -146,47 +265,30 @@@ class ProfileDate extends ProfileNoSav
      }
  }
  
 -abstract class ProfileGeoloc implements ProfileSetting
 +abstract class ProfileGeocoding implements ProfileSetting
  {
 -    protected function geolocAddress(array &$address, &$success)
 +    protected function geocodeAddress(array &$address, &$success)
      {
 -        require_once 'geoloc.inc.php';
 +        require_once 'geocoding.inc.php';
          $success = true;
 -        unset($address['geoloc']);
 -        unset($address['geoloc_cityid']);
 -        if (@$address['parsevalid']
 -            || (@$address['text'] && @$address['changed'])
 -            || (@$address['text'] && !@$address['cityid'])) {
 -            $address = array_merge($address, empty_address());
 -            $new = get_address_infos(@$address['text']);
 -            if (compare_addresses_text(@$address['text'], $geotxt = get_address_text($new))
 -                || (@$address['parsevalid'] && @$address['cityid'])) {
 -                $address = array_merge($address, $new);
 -                $address['checked'] = true;
 -            } else if (@$address['parsevalid']) {
 -                $address = array_merge($address, cut_address(@$address['text']));
 -                $address['checked'] = true;
 -                $mailer = new PlMailer('geoloc/geoloc.mail.tpl');
 -                $mailer->assign('text', get_address_text($address));
 -                $mailer->assign('geoloc', $geotxt);
 -                $mailer->send();
 -            } else if (@$address['changed'] || !@$address['checked']) {
 +        if (isset($address['changed']) && $address['changed'] == 1) {
 +            $gmapsGeocoder = new GMapsGeocoder();
 +            $address = $gmapsGeocoder->getGeocodedAddress($address);
 +            if (isset($address['geoloc'])) {
                  $success = false;
 -                $address = array_merge($address, cut_address(@$address['text']));
 -                $address['checked'] = false;
 -                $address['geoloc'] = $geotxt;
 -                $address['geoloc_cityid'] = $new['cityid'];
 -            } else {
 -                $address = array_merge($address, cut_address(@$address['text']));
 -                $address['checked'] = true;
              }
+         } elseif (@$address['changed'] && !@$address['text']) {
+             $address = empty_address();
+             $address['pub'] = 'private';
          }
 -        $address['precise_lat'] = rtrim($address['precise_lat'], '.0');
 -        $address['precise_lon'] = rtrim($address['precise_lon'], '.0'); 
 -        $address['text'] = get_address_text($address);
 +        if (isset($address['geoloc_choice']) && ($address['geoloc_choice'] == 0)) {
 +            $mailer = new PlMailer('geoloc/geoloc.mail.tpl');
 +            $mailer->assign('text', $address['text']);
 +            $mailer->assign('geoloc', $address['geoloc']);
 +            $mailer->send();
 +            $gmapsGeocoder = new GMapsGeocoder();
 +            $address = $gmapsGeocoder->stripGeocodingFromAddress($address);
 +        }
      }
  }