X-Git-Url: http://git.polytechnique.org/?a=blobdiff_plain;f=modules%2Fprofile%2Faddresses.inc.php;h=c563c7e90a16ced2a75eb0cd1285d74cec43e6c5;hb=2649ac0cc354d7281e14776148545882718d0a9f;hp=fa5d033ba9384fac2c7c078b5f4f130cbb6128c8;hpb=25fe4c85de79aa601948d788b5754b5b6070080d;p=platal.git diff --git a/modules/profile/addresses.inc.php b/modules/profile/addresses.inc.php index fa5d033..c563c7e 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) - { - 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; - $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, $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 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 = new PlFlagSet(); - if ($address['secondaire']) { - $flags->addFlag('res-secondaire'); - } - if ($address['mail']) { - $flags->addFlag('courrier'); - } - if ($address['temporary']) { - $flags->addFlag('temporaire'); - } - if ($address['current']) { - $flags->addFlag('active'); - } - if ($address['checked']) { - $flags->addFlag('coord-checked'); - } - 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); + $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, $deletePrivate); + 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.'); } } - 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) + 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; } }