aliases.id => aliases.uid
[platal.git] / modules / profile / page.inc.php
index cd9d38c..de655ec 100644 (file)
@@ -1,6 +1,6 @@
 <?php
 /***************************************************************************
- *  Copyright (C) 2003-2009 Polytechnique.org                              *
+ *  Copyright (C) 2003-2010 Polytechnique.org                              *
  *  http://opensource.polytechnique.org/                                   *
  *                                                                         *
  *  This program is free software; you can redistribute it and/or modify   *
@@ -133,17 +133,28 @@ class ProfilePhones implements ProfileSetting
     public function value(ProfilePage &$page, $field, $value, &$success)
     {
         $success = true;
-        if (is_null($value) || !is_array($value)) {
+        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",
+            $res = XDB::iterator('SELECT  display_tel AS tel, tel_type AS type, pub, comment
+                                    FROM  profile_phones
+                                   WHERE  pid = {?} AND link_type = {?}
+                                ORDER BY  tel_id',
                                  $page->pid(), $this->link_type);
-            $value = $res->fetchAllAssoc();
+            if ($res->numRows() > 0) {
+                $value = $res->fetchAllAssoc();
+            } else {
+                $value = array(
+                        0 => array(
+                            'type'    => 'fixed',
+                            'tel'     => '',
+                            'pub'     => 'private',
+                            'comment' => '',
+                            )
+                        );
+            }
         }
         foreach ($value as $key=>&$phone) {
-            if (@$phone['removed']) {
+            if (isset($phone['removed']) && $phone['removed']) {
                 unset($value[$key]);
             } else {
                 unset($phone['removed']);
@@ -168,7 +179,7 @@ class ProfilePhones implements ProfileSetting
     private function saveTel($pid, $telid, array &$phone)
     {
         if ($phone['tel'] != '') {
-            XDB::execute("INSERT INTO  profile_phones (uid, link_type, link_id, tel_id, tel_type,
+            XDB::execute("INSERT INTO  profile_phones (pid, link_type, link_id, tel_id, tel_type,
                                        search_tel, display_tel, pub, comment)
                                VALUES  ({?}, {?}, {?}, {?}, {?},
                                        {?}, {?}, {?}, {?})",
@@ -180,7 +191,7 @@ class ProfilePhones implements ProfileSetting
     public function save(ProfilePage &$page, $field, $value)
     {
         XDB::execute("DELETE FROM  profile_phones
-                            WHERE  uid = {?} AND link_type = {?} AND link_id = {?}",
+                            WHERE  pid = {?} AND link_type = {?} AND link_id = {?}",
                      $page->pid(), $this->link_type, $this->link_id);
         $this->saveTels($page->pid(), $field, $value);
     }
@@ -202,9 +213,9 @@ class ProfilePub extends ProfileNoSave
         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;
@@ -217,7 +228,7 @@ class ProfileBool extends ProfileNoSave
     {
         $success = true;
         if (is_null($value)) {
-            $value = @$page->values[$field];
+            $value = isset($page->values[$field]) ? $page->values[$field] : null;
         }
         return $value ? "1" : "";
     }
@@ -248,44 +259,30 @@ class ProfileDate extends ProfileNoSave
     }
 }
 
-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';
+        }
+        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);
         }
-        $address['precise_lat'] = rtrim($address['precise_lat'], '.0');
-        $address['precise_lon'] = rtrim($address['precise_lon'], '.0'); 
-        $address['text'] = get_address_text($address);
     }
 }
 
@@ -347,17 +344,15 @@ abstract class ProfilePage implements PlWizardPage
                 $setting->save($this, $field, $this->values[$field]);
             }
             if ($this->changed[$field] && @$this->watched[$field]) {
-                register_profile_update($this->pid(), $field);
+                WatchProfileUpdate::register($this->profile, $field);
             }
         }
         $this->_saveData();
 
         // Update the last modification date
-        XDB::execute('REPLACE INTO  user_changes
-                               SET  user_id = {?}', $this->pid());
-        if (!S::suid()) {
-            register_watch_op($this->pid(), WATCH_FICHE);
-        }
+        XDB::execute('UPDATE  profiles
+                         SET  last_change = NOW()
+                       WHERE  pid = {?}', $this->pid());
         global $platal;
         S::logger()->log('profil', $platal->pl_self(2));
     }
@@ -418,7 +413,7 @@ abstract class ProfilePage implements PlWizardPage
         $page->assign('errors', $this->errors);
     }
 
-    public function process()
+    public function process(&$global_success)
     {
         $global_success = true;
         $this->fetchData();
@@ -441,9 +436,14 @@ abstract class ProfilePage implements PlWizardPage
             return Post::has('next_page') ? PlWizard::NEXT_PAGE : PlWizard::CURRENT_PAGE;
         }
         Platal::page()->trigError("Certains champs n'ont pas pu être validés, merci de corriger les informations "
-                                . "de ton profil et de revalider ta demande");
+                                . "de ton profil et de revalider ta demande.");
         return PlWizard::CURRENT_PAGE;
     }
+
+    public function success()
+    {
+        return 'Ton profil a bien été mis à jour.';
+    }
 }
 
 require_once dirname(__FILE__) . '/general.inc.php';