X-Git-Url: http://git.polytechnique.org/?a=blobdiff_plain;f=modules%2Fprofile%2Faddresses.inc.php;h=27c2362cfa3b9fadc2b422b7332caf2330945a02;hb=10a574ea3b9a39b61ca7280278be7fe2b84aa3d0;hp=4c20bb2cdd5c0ecbb14049347e0bcf3e77bac07f;hpb=5f30b30e8b2657ade5c727e98de286386ee002d8;p=platal.git diff --git a/modules/profile/addresses.inc.php b/modules/profile/addresses.inc.php index 4c20bb2..27c2362 100644 --- a/modules/profile/addresses.inc.php +++ b/modules/profile/addresses.inc.php @@ -1,6 +1,6 @@ bool = new ProfileBool(); - $this->pub = new ProfilePub(); - $this->tel = new ProfileTel(); - } - - private function cleanAddress(ProfilePage &$page, array &$address, &$success) + public function value(ProfilePage &$page, $field, $value, &$success) { - if (@$address['changed']) { - $address['datemaj'] = time(); - } $success = true; - foreach ($address['tel'] as $t=>&$tel) { - if (@$tel['removed'] || !trim($tel['tel'])) { - unset($address['tel'][$t]); - } else { - $tel['pub'] = $this->pub->value($page, 'pub', $tel['pub'], $s); - $tel['tel'] = $this->tel->value($page, 'tel', $tel['tel'], $s); - if (!$s) { - $tel['error'] = true; - $success = false; - } - } - unset($tel['removed']); - } - $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); - $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']); - } + $addresses = array(); - public function value(ProfilePage &$page, $field, $value, &$success) - { - $init = false; if (is_null($value)) { - $value = $page->values['addresses']; - $init = true; - } - foreach ($value as $key=>&$adr) { - if (@$adr['removed']) { - unset($value[$key]); + $it = Address::iterate(array($page->pid()), array(Address::LINK_PROFILE), array(0)); + while ($address = $it->next()) { + $addresses[] = $address->toFormArray(); } - } - $current = 0; - foreach ($value as $key=>&$adr) { - if (@$adr['current']) { - $current++; - } - } - if (!$init && $current != 1 && count($value) > 0) { - $success = false; - } else { - $success = true; - } - foreach ($value as $key=>&$adr) { - $ls = true; - $this->geolocAddress($adr, $s); - $ls = ($ls && $s); - $this->cleanAddress($page, $adr, $s); - $ls = ($ls && $s); - if (!trim($adr['text'])) { - unset($value[$key]); - } else if (!$init) { - $success = ($success && $ls); + if (count($addresses) == 0) { + $address = new Address(); + $addresses[] = $address->toFormArray(); } + return $addresses; } - return $value; - } - private function saveTel($adrid, $telid, array &$tel) - { - XDB::execute("INSERT INTO tels (uid, adrid, telid, - tel_type, tel_pub, tel) - VALUES ({?}, {?}, {?}, - {?}, {?}, {?})", - S::i('uid'), $adrid, $telid, - $tel['type'], $tel['pub'], $tel['tel']); + return Address::formatFormArray($value, $success); } - private function saveAddress($adrid, array &$address) + public function save(ProfilePage &$page, $field, $value) { - $flags = array(); - if ($address['secondaire']) { - $flags[] = 'res-secondaire'; - } - if ($address['mail']) { - $flags[] = 'courrier'; - } - if ($address['temporary']) { - $flags[] = 'temporaire'; - } - if ($address['current']) { - $flags[] = 'active'; - } - if ($address['checked']) { - $flags[] = 'coord-checked'; - } - $flags = implode(',', $flags); - XDB::execute("INSERT INTO adresses (adr1, adr2, adr3, - postcode, city, cityid, - country, region, regiontxt, - pub, datemaj, statut, - uid, adrid, glat, glng) - 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, - S::i('uid'), $adrid, $address['precise_lat'], $address['precise_lon']); - foreach ($address['tel'] as $telid=>&$tel) { - $this->saveTel($adrid, $telid, $tel); - } + Phone::deletePhones($page->pid(), Phone::LINK_ADDRESS); + Address::delete($page->pid(), Address::LINK_PROFILE); + Address::saveFromArray($value, $page->pid(), Address::LINK_PROFILE); } - public function save(ProfilePage &$page, $field, $value) + public function getText($value) { - XDB::execute("DELETE FROM adresses - WHERE uid = {?}", - S::i('uid')); - XDB::execute("DELETE FROM tels - WHERE uid = {?}", - S::i('uid')); - foreach ($value as $adrid=>&$address) { - $this->saveAddress($adrid, $address); - } + return Address::formArrayToString($value); } } -class ProfileAddresses extends ProfilePage +class ProfilePageAddresses extends ProfilePage { protected $pg_template = 'profile/adresses.tpl'; public function __construct(PlWizard &$wiz) { parent::__construct($wiz); - $this->settings['addresses'] = new ProfileAddress(); - $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 - 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", - S::i('uid')); - 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 - WHERE uid = {?} - ORDER BY adrid", - S::i('uid')); - $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) { - $i++; - } - if ($i >= $adrNb) { - break; - } - $address =& $this->values['addresses'][$i]; - if (!isset($address['tel'])) { - $address['tel'] = array(); - } - if ($address['id'] == $adrid) { - $address['tel'][] = $tel; - } - } - foreach ($this->values['addresses'] as $id=>&$address) { - if (!isset($address['tel'])) { - $address['tel'] = array(); - } - unset($address['id']); - } + $this->settings['addresses'] = new ProfileSettingAddresses(); + $this->watched['addresses'] = true; } }