Fix the user URL, can save changes made on addresses
authorFlorent Bruneau <florent.bruneau@polytechnique.org>
Tue, 28 Aug 2007 20:50:03 +0000 (22:50 +0200)
committerFlorent Bruneau <florent.bruneau@polytechnique.org>
Tue, 28 Aug 2007 20:50:03 +0000 (22:50 +0200)
Signed-off-by: Florent Bruneau <florent.bruneau@polytechnique.org>
modules/profile/addresses.inc.php
modules/profile/page.inc.php
templates/geoloc/form.address.tpl
templates/profile/adresses.tpl

index a66042a..e2360a8 100644 (file)
@@ -33,6 +33,7 @@ class ProfileAddress
     private function geolocAddress(array &$address, &$success)
     {
         require_once 'geoloc.inc.php';
+        $success = true;
         if (@$address['parsevalid'] || (@$address['text'] && @$address['changed']) || !@$address['cityid']) {
             $address = array_merge($address, empty_address());
             $new = get_address_infos(@$address['text']);
@@ -50,8 +51,6 @@ class ProfileAddress
             $address['datemaj'] = time();
         }
         $address['text'] = get_address_text($address);
-        unset($address['parsevalid']);
-        unset($address['changed']);
     }
 
     private function cleanAddress(ProfilePage &$page, array &$address)
@@ -65,13 +64,21 @@ class ProfileAddress
             } else {
                 $tel['pub'] = $this->pub->value($page, 'pub', $tel['pub'], $success);
             }
+            unset($tel['removed']);
         }
-        $success;
+        if (@$address['changed']) {
+            $address['datemaj'] = time();
+        }
+        $success = true;
         $address['secondaire'] = $this->bool->value($page, 'secondaire', $address['secondaire'], $success);
         $address['mail'] = $this->bool->value($page, 'mail', $address['mail'], $success);
         $address['temporary'] = $this->bool->value($page, 'temporary', $address['temporary'], $success);
-        $address['current'] = $this->bool->value($page, 'current', $address['current'], $success);
+        $address['current'] = $this->bool->value($page, 'current', @$address['current'], $success);
         $address['pub'] = $this->pub->value($page, 'pub', $address['pub'], $success);
+        unset($address['parsevalid']);
+        unset($address['changed']);
+        unset($address['removed']);
+        unset($address['display']);
     }
 
     public function value(ProfilePage &$page, $field, $value, &$success)
@@ -123,7 +130,7 @@ class ProfileAddress
             $flags[] = 'active';
         }
         $flags = implode(',', $flags);
-        XDB::execute("INSERT INTO  addresses (adr1, adr2, adr3,
+        XDB::execute("INSERT INTO  adresses (adr1, adr2, adr3,
                                               postcode, city, cityid,
                                               country, region, regiontxt,
                                               pub, datemaj, statut,
@@ -187,7 +194,11 @@ class ProfileAddresses extends ProfilePage
                             WHERE  uid = {?} AND NOT FIND_IN_SET('pro', statut)
                          ORDER BY  adrid",
                            S::i('uid'));
-        $this->values['addresses'] = $res->fetchAllAssoc();
+        if ($res->numRows() == 0) {
+            $this->values['addresses'] = array();
+        } else {
+            $this->values['addresses'] = $res->fetchAllAssoc();
+        }
 
         $res = XDB::iterator("SELECT  adrid, tel_type AS type, tel_pub AS pub, tel
                                 FROM  tels
@@ -195,12 +206,16 @@ class ProfileAddresses extends ProfilePage
                             ORDER BY  adrid",
                              S::i('uid'));
         $i = 0;
+        $adrNb = count($this->values['addresses']);
         while ($tel = $res->next()) {
             $adrid = $tel['adrid'];
             unset($tel['adrid']);
-            while ($this->values['addresses'][$i]['id'] < $adrid) {
+            while ($i < $adrNb && $this->values['addresses'][$i]['id'] < $adrid) {
                 $i++;
             }
+            if ($i >= $adrNb) {
+                break;
+            }
             $address =& $this->values['addresses'][$i];
             if (!isset($address['tel'])) {
                 $address['tel'] = array();
@@ -210,6 +225,9 @@ class ProfileAddresses extends ProfilePage
             }
         }
         foreach ($this->values['addresses'] as $id=>&$address) {
+            if (!isset($address['tel'])) {
+                $address['tel'] = array();
+            }
             unset($address['id']);
         }
         parent::fetchData();
index d85bfce..0d8b29c 100644 (file)
@@ -50,7 +50,7 @@ class ProfileWeb extends ProfileNoSave
         if (is_null($value)) {
             return isset($page->values[$field]) ? $page->values[$field] : S::v($field);
         }
-        $success = preg_match("{^(https?|ftp)://[a-zA-Z0-9._%#+/?=&~-]+$}i", $value);
+        $success = !trim($value) || preg_match("{^(https?|ftp)://[a-zA-Z0-9._%#+/?=&~-]+$}i", $value);
         if (!$success) {
             global $page;
             $page->trig('URL Incorrecte : une url doit commencer par http:// ou https:// ou ftp://'
@@ -99,7 +99,7 @@ class ProfileBool extends ProfileNoSave
     {
         $success = true;
         if (is_null($value)) {
-            $value = $page->values[$field];
+            $value = @$page->values[$field];
         }
         return $value ? 1 : 0;
     }
index ef72a4c..ab94e5b 100644 (file)
@@ -48,5 +48,7 @@
 <input type="hidden" name="{$name}[postcode]" value="{$adr.postcode}"/>
 <input type="hidden" name="{$name}[city]" value="{$adr.city}" />
 <input type="hidden" name="{$name}[country]" value="{$adr.country}" />
+<input type="hidden" name="{$name}[countrytxt]" value="{$adr.countrytxt}" />
 <input type="hidden" name="{$name}[region]" value="{$adr.region}" />
+<input type="hidden" name="{$name}[regiontxt]" value="{$adr.regiontxt}" />
 {* vim:set et sw=2 sts=2 sws=2 enc=utf-8: *}
index abe9ba9..1ee69f5 100644 (file)
@@ -35,11 +35,12 @@ function removeObject(id, pref)
 {assign var=adpref value="addresses[$i]"}
 {assign var=adid value="addresses_$i"}
 <input type="hidden" name="{$adpref}[removed]" value="0"/>
+<input type="hidden" name="{$adpref}[datemaj]" value="{$adr.datemaj}"/>
 <table class="bicol" id="{$adid}" style="margin-bottom: 1em">
   <tr>
     <th>
       <div style="float: left">
-        <input name="{$adpref}[active]" type="radio" value="{$adr.id}" {if $adr.current}checked="checked"{/if}
+        <input name="{$adpref}[current]" type="radio" value="1" {if $adr.current}checked="checked"{/if}
                id="{$adid}_active"/>
         <label for="{$adid}_active" class="smaller" style="font-weight: normal">actuelle</label>
       </div>
@@ -51,7 +52,7 @@ function removeObject(id, pref)
   </tr>
   <tr>
     <td>
-      <div>{include file="include/flags.radio.tpl" name="$adpref[pub]" notable=true val=$adr.pub}</div>
+      <div>{include file="include/flags.radio.tpl" name="`$adpref`[pub]" notable=true val=$adr.pub}</div>
       <div style="clear: both"></div>
       <div style="float: left">{include file="geoloc/form.address.tpl" name=$adpref id=$adid adr=$adr}</div>
       <div style="float: right">