X-Git-Url: http://git.polytechnique.org/?a=blobdiff_plain;f=modules%2Fprofile%2Faddresses.inc.php;h=2744aa833e4120ea9859b9e71c0a668059e6ab34;hb=a6391000e89c59f3c26d1a62bb06857df706bf50;hp=a308fe609683ed70fc81414f153b92ea92cb5083;hpb=be638e733bce413df4324d985297d9a4d94dcbca;p=platal.git diff --git a/modules/profile/addresses.inc.php b/modules/profile/addresses.inc.php index a308fe6..2744aa8 100644 --- a/modules/profile/addresses.inc.php +++ b/modules/profile/addresses.inc.php @@ -19,7 +19,7 @@ * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * ***************************************************************************/ -class ProfileAddress extends ProfileGeoloc +class ProfileAddress extends ProfileGeocoding { private $bool; private $pub; @@ -30,27 +30,18 @@ class ProfileAddress extends ProfileGeoloc $this->pub = new ProfilePub(); } - private function cleanAddress(ProfilePage &$page, $adrid, array &$address, &$success) + private function cleanAddress(ProfilePage &$page, $addrid, array &$address) { - if (@$address['changed']) { - $address['datemaj'] = time(); - } - $success = true; if (!isset($address['tel'])) { $address['tel'] = array(); } - $profiletel = new ProfilePhones('address', $adrid); - $address['tel'] = $profiletel->value($page, 'tel', $address['tel'], $s); - $address['checked'] = $this->bool->value($page, 'checked', $address['checked'], $s); - $address['secondaire'] = $this->bool->value($page, 'secondaire', $address['secondaire'], $s); - $address['mail'] = $this->bool->value($page, 'mail', $address['mail'], $s); + $profiletel = new ProfilePhones('address', $addrid); + $address['tel'] = $profiletel->value($page, 'tel', $address['tel'], $s); + $address['current'] = $this->bool->value($page, 'current', $address['current'], $s); $address['temporary'] = $this->bool->value($page, 'temporary', $address['temporary'], $s); - $address['current'] = $this->bool->value($page, 'current', @$address['current'], $s); - $address['pub'] = $this->pub->value($page, 'pub', $address['pub'], $s); - unset($address['parsevalid']); - unset($address['changed']); - unset($address['removed']); - unset($address['display']); + $address['secondary'] = $this->bool->value($page, 'secondary', $address['secondary'], $s); + $address['mail'] = $this->bool->value($page, 'mail', $address['mail'], $s); + $address['pub'] = $this->pub->value($page, 'pub', $address['pub'], $s); } public function value(ProfilePage &$page, $field, $value, &$success) @@ -58,79 +49,81 @@ class ProfileAddress extends ProfileGeoloc $init = false; if (is_null($value)) { $value = $page->values['addresses']; - $init = true; + $init = true; } - foreach ($value as $key=>&$adr) { - if (@$adr['removed']) { + foreach ($value as $key => &$address) { + if (isset($address['removed']) && $address['removed']) { unset($value[$key]); } } $current = 0; $success = true; - foreach ($value as $key=>&$adr) { - if (@$adr['current']) { + foreach ($value as $key => &$address) { + if (isset($address['current']) && $address['current']) { $current++; } } if ($current == 0 && count($value) > 0) { - foreach ($value as $key=>&$adr) { - $adr['current'] = true; + foreach ($value as $address) { + $address['current'] = true; break; } - } else if ($current > 1) { + } elseif ($current > 1) { $success = false; } - foreach ($value as $key=>&$adr) { - $ls = true; - $this->geolocAddress($adr, $s); - $ls = ($ls && $s); - $this->cleanAddress($page, $key, $adr, $s); - $ls = ($ls && $s); - if (!trim($adr['text'])) { + foreach ($value as $key => &$address) { + if (!trim($address['text'])) { unset($value[$key]); - } else if (!$init) { - $success = ($success && $ls); + } elseif (!$init) { + $this->geocodeAddress($address, $s); + $success = $success && $s; } + $this->cleanAddress($page, $key, $address); } return $value; } - private function saveAddress($pid, $adrid, array &$address) + private function saveAddress($pid, $addrid, array &$address, $type) { + require_once "geocoding.inc.php"; + $flags = new PlFlagSet(); - $flags->addFlag('res-secondaire', $address['secondaire']); - $flags->addFlag('courrier', $address['mail']); - $flags->addFlag('temporaire', $address['temporary']); - $flags->addFlag('active', $address['current']); - $flags->addFlag('coord-checked', $address['checked']); - XDB::execute("INSERT INTO adresses (adr1, adr2, adr3, - postcode, city, cityid, - country, region, regiontxt, - pub, datemaj, statut, - uid, adrid, glat, glng, comment) - VALUES ({?}, {?}, {?}, - {?}, {?}, {?}, - {?}, {?}, {?}, - {?}, FROM_UNIXTIME({?}), {?}, - {?}, {?}, {?}, {?}, {?})", - $address['adr1'], $address['adr2'], $address['adr3'], - $address['postcode'], $address['city'], $address['cityid'], - $address['country'], $address['region'], $address['regiontxt'], - $address['pub'], $address['datemaj'], $flags, - $pid, $adrid, $address['precise_lat'], $address['precise_lon'], $address['comment']); + $flags->addFlag('current', $address['current']); + $flags->addFlag('temporary', $address['temporary']); + $flags->addFlag('secondary', $address['secondary']); + $flags->addFlag('mail', $address['mail']); + $flags->addFlag('cedex', $address['cedex'] = + (strpos(strtoupper(preg_replace(array("/[0-9,\"'#~:;_\- ]/", "/\r\n/"), + array("", "\n"), $address['text'])), 'CEDEX')) !== false); + Geocoder::getAreaId($address, "administrativeArea"); + Geocoder::getAreaId($address, "subAdministrativeArea"); + Geocoder::getAreaId($address, "locality"); + XDB::execute("INSERT INTO profile_addresses (pid, type, id, flags, accuracy, + text, postalText, postalCode, localityId, + subAdministrativeAreaId, administrativeAreaId, + countryId, latitude, longitude, updateTime, pub, comment, + north, south, east, west) + VALUES ({?}, {?}, {?}, {?}, {?}, {?}, {?}, {?}, {?}, {?}, {?}, {?}, + {?}, {?}, FROM_UNIXTIME({?}), {?}, {?}, {?}, {?}, {?}, {?})", + $pid, $type, $addrid, $flags, $address['accuracy'], + $address['text'], $address['postalText'], $address['postalCode'], $address['localityId'], + $address['subAdministrativeAreaId'], $address['administrativeAreaId'], + $address['countryId'], $address['latitude'], $address['longitude'], + $address['updateTime'], $address['pub'], $address['comment'], + $address['north'], $address['south'], $address['east'], $address['west']); } public function save(ProfilePage &$page, $field, $value) { - XDB::execute("DELETE FROM adresses - WHERE uid = {?}", + XDB::execute("DELETE FROM profile_addresses + WHERE pid = {?} AND type = 'home'", $page->pid()); XDB::execute("DELETE FROM profile_phones WHERE uid = {?} AND link_type = 'address'", $page->pid()); - foreach ($value as $adrid=>&$address) { - $this->saveAddress($page->pid(), $adrid, $address); - $profiletel = new ProfilePhones('address', $adrid); + foreach ($value as $addrid => &$address) { + $this->saveAddress($page->pid(), $addrid, $address, 'home'); + $profiletel = new ProfilePhones('address', $addrid); $profiletel->saveTels($page->pid(), 'tel', $address['tel']); } } @@ -144,27 +137,23 @@ class ProfileAddresses extends ProfilePage { parent::__construct($wiz); $this->settings['addresses'] = new ProfileAddress(); - $this->watched['addresses'] = true; + $this->watched['addresses'] = true; } protected function _fetchData() { - // Build the addresses tree - $res = XDB::query("SELECT a.adrid AS id, a.adr1, a.adr2, a.adr3, - UNIX_TIMESTAMP(a.datemaj) AS datemaj, - a.postcode, a.city, a.cityid, a.region, a.regiontxt, - a.pub, a.country, gp.pays AS countrytxt, gp.display, - FIND_IN_SET('coord-checked', a.statut) AS checked, - FIND_IN_SET('res-secondaire', a.statut) AS secondaire, - FIND_IN_SET('courrier', a.statut) AS mail, - FIND_IN_SET('temporaire', a.statut) AS temporary, - FIND_IN_SET('active', a.statut) AS current, - a.glat AS precise_lat, a.glng AS precise_lon, - a.comment - FROM adresses AS a - INNER JOIN geoloc_pays AS gp ON(gp.a2 = a.country) - WHERE uid = {?} AND NOT FIND_IN_SET('pro', statut) - ORDER BY adrid", + $res = XDB::query("SELECT id, accuracy, text, postalText, + postalCode, localityId, subAdministrativeAreaId, administrativeAreaId, + countryId, latitude, longitude, pub, comment, updateTime, + north, south, east, west, + FIND_IN_SET('current', flags) AS current, + FIND_IN_SET('temporary', flags) AS temporary, + FIND_IN_SET('secondary', flags) AS secondary, + FIND_IN_SET('mail', flags) AS mail, + FIND_IN_SET('cedex', flags) AS cedex + FROM profile_addresses + WHERE pid = {?} AND type = 'home' + ORDER BY id", $this->pid()); if ($res->numRows() == 0) { $this->values['addresses'] = array(); @@ -172,7 +161,7 @@ class ProfileAddresses extends ProfilePage $this->values['addresses'] = $res->fetchAllAssoc(); } - $res = XDB::iterator("SELECT link_id AS adrid, tel_type AS type, pub, display_tel AS tel, comment + $res = XDB::iterator("SELECT link_id AS addrid, tel_type AS type, pub, display_tel AS tel, comment FROM profile_phones WHERE uid = {?} AND link_type = 'address' ORDER BY link_id", @@ -180,9 +169,9 @@ class ProfileAddresses extends ProfilePage $i = 0; $adrNb = count($this->values['addresses']); while ($tel = $res->next()) { - $adrid = $tel['adrid']; - unset($tel['adrid']); - while ($i < $adrNb && $this->values['addresses'][$i]['id'] < $adrid) { + $addrid = $tel['addrid']; + unset($tel['addrid']); + while ($i < $adrNb && $this->values['addresses'][$i]['id'] < $addrid) { $i++; } if ($i >= $adrNb) { @@ -192,11 +181,11 @@ class ProfileAddresses extends ProfilePage if (!isset($address['tel'])) { $address['tel'] = array(); } - if ($address['id'] == $adrid) { + if ($address['id'] == $addrid) { $address['tel'][] = $tel; } } - foreach ($this->values['addresses'] as $id=>&$address) { + foreach ($this->values['addresses'] as $id => &$address) { if (!isset($address['tel'])) { $address['tel'] = array(); }