X-Git-Url: http://git.polytechnique.org/?a=blobdiff_plain;f=modules%2Fprofile%2Faddresses.inc.php;h=50f86fd23e32337dcff6b413fe82007007ac328c;hb=6cce7840e69bc0b6647e1bc5ea3437a925cd63a0;hp=ade256ebd97084560c64f3a916832d3a589ee416;hpb=bde2be3b1777bf1f66c6d2b2cdecc361d6191911;p=platal.git diff --git a/modules/profile/addresses.inc.php b/modules/profile/addresses.inc.php index ade256e..50f86fd 100644 --- a/modules/profile/addresses.inc.php +++ b/modules/profile/addresses.inc.php @@ -1,6 +1,6 @@ bool = new ProfileBool(); - $this->pub = new ProfilePub(); - } - - private function cleanAddress(ProfilePage &$page, $adrid, array &$address, &$success) - { - 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); - $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; - $success = true; - foreach ($value as $key=>&$adr) { - if (@$adr['current']) { - $current++; + if (count($addresses) == 0) { + $address = new Address(); + $addresses[] = $address->toFormArray(); } + return $addresses; } - if ($current == 0 && count($value) > 0) { - foreach ($value as $key=>&$adr) { - $adr['current'] = true; - break; - } - } else if ($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'])) { - unset($value[$key]); - } else if (!$init) { - $success = ($success && $ls); - } - } - return $value; - } - private function saveTel($adrid, $telid, array &$tel) - { - XDB::execute("INSERT INTO profile_phones (uid, link_type, link_id, tel_id, tel_type, - search_tel, display_tel, pub) - VALUES ({?}, 'address', {?}, {?}, {?}, - {?}, {?}, {?})", - S::i('uid'), $adrid, $telid, $tel['type'], - format_phone_number($tel['tel']), $tel['tel'], $tel['pub']); + 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'; + $deletePrivate = S::user()->isMe($page->owner) || S::admin(); + + Phone::deletePhones($page->pid(), Phone::LINK_ADDRESS, null, $deletePrivate); + Address::deleteAddresses($page->pid(), Address::LINK_PROFILE, null, null, $deletePrivate); + AddressReq::purge_requests($page->pid(), 0, 0, Address::LINK_PROFILE); + Address::saveFromArray($value, $page->pid(), Address::LINK_PROFILE, null, $deletePrivate); + if (S::user()->isMe($page->owner) && count($value) > 1) { + Platal::page()->trigWarning('Attention, tu as plusieurs adresses sur ton profil. Pense à supprimer celles qui sont obsolètes.'); } - $flags = implode(',', $flags); - 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, - S::i('uid'), $adrid, $address['precise_lat'], $address['precise_lon'], $address['comment']); } - 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 profile_phones - WHERE uid = {?} AND link_type = 'address'", - S::i('uid')); - foreach ($value as $adrid=>&$address) { - $this->saveAddress($adrid, $address); - $profiletel = new ProfilePhones('address', $adrid); - $profiletel->saveTels('tel', $address['tel']); - } + return Address::formArrayToString($value); } } -class ProfileAddresses extends ProfilePage +class ProfilePageAddresses extends ProfilePage { protected $pg_template = 'profile/adresses.tpl'; - public function __construct(PlWizard &$wiz) + 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, - 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", - S::i('uid')); - if ($res->numRows() == 0) { - $this->values['addresses'] = array(); - } else { - $this->values['addresses'] = $res->fetchAllAssoc(); - } - - $res = XDB::iterator("SELECT link_id AS adrid, tel_type AS type, pub, display_tel AS tel, comment - FROM profile_phones - WHERE uid = {?} AND link_type = 'address' - ORDER BY link_id", - 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; + Platal::page()->assign('geocoding_removal', true); } }