Welcome to the World of Tomorrow!
[platal.git] / modules / profile / addresses.inc.php
CommitLineData
0b14f91d
FB
1<?php
2/***************************************************************************
179afa7f 3 * Copyright (C) 2003-2008 Polytechnique.org *
0b14f91d
FB
4 * http://opensource.polytechnique.org/ *
5 * *
6 * This program is free software; you can redistribute it and/or modify *
7 * it under the terms of the GNU General Public License as published by *
8 * the Free Software Foundation; either version 2 of the License, or *
9 * (at your option) any later version. *
10 * *
11 * This program is distributed in the hope that it will be useful, *
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of *
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
14 * GNU General Public License for more details. *
15 * *
16 * You should have received a copy of the GNU General Public License *
17 * along with this program; if not, write to the Free Software *
18 * Foundation, Inc., *
19 * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA *
20 ***************************************************************************/
21
37d44b3b 22class ProfileAddress extends ProfileGeoloc
0b14f91d 23{
d5489b09
FB
24 private $bool;
25 private $pub;
26
27 public function __construct()
28 {
29 $this->bool = new ProfileBool();
30 $this->pub = new ProfilePub();
31 }
32
bde2be3b 33 private function cleanAddress(ProfilePage &$page, $adrid, array &$address, &$success)
d5489b09
FB
34 {
35 if (@$address['changed']) {
36 $address['datemaj'] = time();
37 }
a619333a 38 $success = true;
bde2be3b
GB
39 if (!isset($address['tel'])) {
40 $address['tel'] = array();
d5489b09 41 }
bde2be3b
GB
42 $profiletel = new ProfilePhones('address', $adrid);
43 $address['tel'] = $profiletel->value($page, 'tel', $address['tel'], $s);
f93fb300 44 $address['checked'] = $this->bool->value($page, 'checked', $address['checked'], $s);
a619333a
FB
45 $address['secondaire'] = $this->bool->value($page, 'secondaire', $address['secondaire'], $s);
46 $address['mail'] = $this->bool->value($page, 'mail', $address['mail'], $s);
47 $address['temporary'] = $this->bool->value($page, 'temporary', $address['temporary'], $s);
48 $address['current'] = $this->bool->value($page, 'current', @$address['current'], $s);
49 $address['pub'] = $this->pub->value($page, 'pub', $address['pub'], $s);
c24a06aa
FB
50 unset($address['parsevalid']);
51 unset($address['changed']);
52 unset($address['removed']);
53 unset($address['display']);
d5489b09
FB
54 }
55
0b14f91d
FB
56 public function value(ProfilePage &$page, $field, $value, &$success)
57 {
7568a515 58 $init = false;
0b14f91d 59 if (is_null($value)) {
7568a515
FB
60 $value = $page->values['addresses'];
61 $init = true;
0b14f91d
FB
62 }
63 foreach ($value as $key=>&$adr) {
7568a515 64 if (@$adr['removed']) {
0b14f91d
FB
65 unset($value[$key]);
66 }
67 }
9a1cb883 68 $current = 0;
2db7542d 69 $success = true;
9a1cb883
FB
70 foreach ($value as $key=>&$adr) {
71 if (@$adr['current']) {
72 $current++;
73 }
74 }
2db7542d
FB
75 if ($current == 0 && count($value) > 0) {
76 foreach ($value as $key=>&$adr) {
77 $adr['current'] = true;
78 break;
79 }
80 } else if ($current > 1) {
9a1cb883 81 $success = false;
9a1cb883 82 }
7568a515 83 foreach ($value as $key=>&$adr) {
a619333a 84 $ls = true;
7568a515 85 $this->geolocAddress($adr, $s);
a619333a 86 $ls = ($ls && $s);
bde2be3b 87 $this->cleanAddress($page, $key, $adr, $s);
a619333a 88 $ls = ($ls && $s);
c6a7beb2
FB
89 if (!trim($adr['text'])) {
90 unset($value[$key]);
a619333a
FB
91 } else if (!$init) {
92 $success = ($success && $ls);
c6a7beb2 93 }
7568a515 94 }
0b14f91d
FB
95 return $value;
96 }
d5489b09 97
e5bcd851 98 private function saveAddress($pid, $adrid, array &$address)
d5489b09 99 {
113f6de8 100 $flags = new PlFlagSet();
e5bcd851
FB
101 $flags->addFlag('res-secondaire', $address['secondaire']);
102 $flags->addFlag('courrier', $address['mail']);
103 $flags->addFlag('temporaire', $address['temporary']);
104 $flags->addFlag('active', $address['current']);
105 $flags->addFlag('coord-checked', $address['checked']);
c24a06aa 106 XDB::execute("INSERT INTO adresses (adr1, adr2, adr3,
d5489b09
FB
107 postcode, city, cityid,
108 country, region, regiontxt,
109 pub, datemaj, statut,
646a4582 110 uid, adrid, glat, glng, comment)
d5489b09
FB
111 VALUES ({?}, {?}, {?},
112 {?}, {?}, {?},
113 {?}, {?}, {?},
114 {?}, FROM_UNIXTIME({?}), {?},
646a4582 115 {?}, {?}, {?}, {?}, {?})",
d5489b09
FB
116 $address['adr1'], $address['adr2'], $address['adr3'],
117 $address['postcode'], $address['city'], $address['cityid'],
118 $address['country'], $address['region'], $address['regiontxt'],
119 $address['pub'], $address['datemaj'], $flags,
e5bcd851 120 $pid, $adrid, $address['precise_lat'], $address['precise_lon'], $address['comment']);
d5489b09
FB
121 }
122
123 public function save(ProfilePage &$page, $field, $value)
124 {
125 XDB::execute("DELETE FROM adresses
126 WHERE uid = {?}",
e5bcd851 127 $page->pid());
b235d980 128 XDB::execute("DELETE FROM profile_phones
5e4417a9 129 WHERE uid = {?} AND link_type = 'address'",
e5bcd851 130 $page->pid());
d5489b09 131 foreach ($value as $adrid=>&$address) {
e5bcd851 132 $this->saveAddress($page->pid(), $adrid, $address);
bde2be3b 133 $profiletel = new ProfilePhones('address', $adrid);
e5bcd851 134 $profiletel->saveTels($page->pid(), 'tel', $address['tel']);
d5489b09
FB
135 }
136 }
0b14f91d
FB
137}
138
139class ProfileAddresses extends ProfilePage
140{
141 protected $pg_template = 'profile/adresses.tpl';
142
143 public function __construct(PlWizard &$wiz)
144 {
145 parent::__construct($wiz);
146 $this->settings['addresses'] = new ProfileAddress();
a2a1c2f2 147 $this->watched['addresses'] = true;
0b14f91d
FB
148 }
149
7c2e0f0d 150 protected function _fetchData()
0b14f91d 151 {
0b14f91d 152 // Build the addresses tree
7568a515 153 $res = XDB::query("SELECT a.adrid AS id, a.adr1, a.adr2, a.adr3,
d5489b09 154 UNIX_TIMESTAMP(a.datemaj) AS datemaj,
7568a515 155 a.postcode, a.city, a.cityid, a.region, a.regiontxt,
d5489b09 156 a.pub, a.country, gp.pays AS countrytxt, gp.display,
f93fb300 157 FIND_IN_SET('coord-checked', a.statut) AS checked,
7568a515
FB
158 FIND_IN_SET('res-secondaire', a.statut) AS secondaire,
159 FIND_IN_SET('courrier', a.statut) AS mail,
d5489b09 160 FIND_IN_SET('temporaire', a.statut) AS temporary,
de0485fd 161 FIND_IN_SET('active', a.statut) AS current,
646a4582
GB
162 a.glat AS precise_lat, a.glng AS precise_lon,
163 a.comment
7568a515 164 FROM adresses AS a
37d44b3b 165 INNER JOIN geoloc_pays AS gp ON(gp.a2 = a.country)
7568a515 166 WHERE uid = {?} AND NOT FIND_IN_SET('pro', statut)
0b14f91d 167 ORDER BY adrid",
e5bcd851 168 $this->pid());
c24a06aa
FB
169 if ($res->numRows() == 0) {
170 $this->values['addresses'] = array();
171 } else {
172 $this->values['addresses'] = $res->fetchAllAssoc();
173 }
0b14f91d 174
bde2be3b 175 $res = XDB::iterator("SELECT link_id AS adrid, tel_type AS type, pub, display_tel AS tel, comment
b235d980 176 FROM profile_phones
5e4417a9
GB
177 WHERE uid = {?} AND link_type = 'address'
178 ORDER BY link_id",
e5bcd851 179 $this->pid());
0b14f91d 180 $i = 0;
c24a06aa 181 $adrNb = count($this->values['addresses']);
7568a515
FB
182 while ($tel = $res->next()) {
183 $adrid = $tel['adrid'];
184 unset($tel['adrid']);
c24a06aa 185 while ($i < $adrNb && $this->values['addresses'][$i]['id'] < $adrid) {
0b14f91d
FB
186 $i++;
187 }
c24a06aa
FB
188 if ($i >= $adrNb) {
189 break;
190 }
0b14f91d
FB
191 $address =& $this->values['addresses'][$i];
192 if (!isset($address['tel'])) {
193 $address['tel'] = array();
194 }
195 if ($address['id'] == $adrid) {
7568a515 196 $address['tel'][] = $tel;
0b14f91d
FB
197 }
198 }
7568a515 199 foreach ($this->values['addresses'] as $id=>&$address) {
c24a06aa
FB
200 if (!isset($address['tel'])) {
201 $address['tel'] = array();
202 }
7568a515
FB
203 unset($address['id']);
204 }
0b14f91d 205 }
0b14f91d
FB
206}
207
208// vim:set et sw=4 sts=4 sws=4 foldmethod=marker enc=utf-8:
209?>