Commit | Line | Data |
---|---|---|
3950bc21 FB |
1 | <?php |
2 | /*************************************************************************** | |
8d84c630 | 3 | * Copyright (C) 2003-2009 Polytechnique.org * |
3950bc21 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 | ||
73f6c165 | 22 | class ProfileJob extends ProfileGeocoding |
37d44b3b FB |
23 | { |
24 | private $pub; | |
541e8d03 SJ |
25 | private $email_new; |
26 | private $email; | |
27 | private $url; | |
f93fb300 | 28 | private $bool; |
37d44b3b FB |
29 | private $checks; |
30 | ||
31 | public function __construct() | |
32 | { | |
c7139c07 | 33 | $this->pub = new ProfilePub(); |
541e8d03 SJ |
34 | $this->email |
35 | = $this->email_new | |
c7139c07 | 36 | = new ProfileEmail(); |
541e8d03 | 37 | $this->url = new ProfileWeb(); |
c7139c07 | 38 | $this->bool = new ProfileBool(); |
541e8d03 SJ |
39 | $this->checks = array('url' => array('w_url'), |
40 | 'email' => array('w_email'), | |
41 | 'pub' => array('pub', 'w_email_pub'), | |
42 | ); | |
37d44b3b FB |
43 | } |
44 | ||
b814a8b8 | 45 | private function cleanJob(ProfilePage &$page, $jobid, array &$job, &$success) |
37d44b3b FB |
46 | { |
47 | $success = true; | |
541e8d03 SJ |
48 | if ($job['w_email'] == "new@example.org") { |
49 | $job['w_email'] = $job['w_email_new']; | |
50 | } | |
37d44b3b FB |
51 | foreach ($this->checks as $obj=>&$fields) { |
52 | $chk =& $this->$obj; | |
53 | foreach ($fields as $field) { | |
54 | $job[$field] = $chk->value($page, $field, $job[$field], $s); | |
55 | if (!$s) { | |
56 | $success = false; | |
57 | $job[$field . '_error'] = true; | |
58 | } | |
59 | } | |
60 | } | |
541e8d03 | 61 | if (!$job['subSubSectorName']) { |
c7139c07 SJ |
62 | $res = XDB::query("SELECT name |
63 | FROM profile_job_subsubsector_enum | |
64 | WHERE id = {?}", | |
541e8d03 SJ |
65 | $job['subSubSector']); |
66 | $job['subSubSectorName'] = $res->fetchOneCell(); | |
c7139c07 SJ |
67 | } else { |
68 | $res = XDB::query("SELECT sectorid, subsectorid, id | |
69 | FROM profile_job_subsubsector_enum | |
70 | WHERE name = {?}", | |
541e8d03 | 71 | $job['subSubSectorName']); |
c7139c07 SJ |
72 | if ($res->numRows() != 1) { |
73 | $success = false; | |
74 | $job['sector_error'] = true; | |
75 | } else { | |
541e8d03 | 76 | list($job['sector'], $job['subSector'], $job['subSubSector']) = $res->fetchOneRow(); |
c7139c07 SJ |
77 | } |
78 | } | |
b814a8b8 | 79 | if ($job['name']) { |
c7139c07 SJ |
80 | $res = XDB::query("SELECT id |
81 | FROM profile_job_enum | |
82 | WHERE name = {?}", | |
83 | $job['name']); | |
84 | if ($res->numRows() != 1) { | |
b814a8b8 | 85 | $user = S::user(); |
4d7d27fc SJ |
86 | $this->geocodeAddress($job['hq_address'], $s); |
87 | if (!$s) { | |
88 | $gmapsGeocoder = new GMapsGeocoder(); | |
89 | $job['hq_address'] = $gmapsGeocoder->stripGeocodingFromAddress($job['hq_address']); | |
90 | } | |
91 | $req = new EntrReq($user, $jobid, $job['name'], $job['hq_acronym'], $job['hq_url'], | |
92 | $job['hq_email'], $job['hq_fixed'], $job['hq_fax'], $job['hq_address']); | |
b814a8b8 SJ |
93 | $req->submit(); |
94 | $job['jobid'] = null; | |
c7139c07 SJ |
95 | } else { |
96 | $job['jobid'] = $res->fetchOneCell(); | |
97 | } | |
98 | } | |
541e8d03 SJ |
99 | $job['w_address']['pub'] = $this->pub->value($page, 'address_pub', $job['w_address']['pub'], $s); |
100 | if (!isset($job['w_phone'])) { | |
101 | $job['w_phone'] = array(); | |
bde2be3b GB |
102 | } |
103 | $profiletel = new ProfilePhones('pro', $jobid); | |
541e8d03 | 104 | $job['w_phone'] = $profiletel->value($page, 'tel', $job['w_phone'], $s); |
37d44b3b FB |
105 | unset($job['removed']); |
106 | unset($job['new']); | |
37d44b3b FB |
107 | } |
108 | ||
109 | public function value(ProfilePage &$page, $field, $value, &$success) | |
110 | { | |
b814a8b8 SJ |
111 | require_once('validations.inc.php'); |
112 | $entreprise = Validate::get_typed_requests(S::i('uid'), 'entreprise'); | |
113 | $entr_val = 0; | |
114 | ||
37d44b3b FB |
115 | $init = false; |
116 | if (is_null($value)) { | |
117 | $value = $page->values['jobs']; | |
118 | $init = true; | |
119 | } | |
120 | $success = true; | |
121 | foreach ($value as $key=>&$job) { | |
b814a8b8 SJ |
122 | $job['name'] = trim($job['name']); |
123 | if (!$job['name']) { | |
124 | $job['tmp_name'] = $entreprise[$entr_val]->name; | |
125 | $entr_val ++; | |
126 | } | |
541e8d03 | 127 | if (isset($job['removed']) && $job['removed']) { |
37d44b3b FB |
128 | unset($value[$key]); |
129 | } | |
130 | } | |
131 | foreach ($value as $key=>&$job) { | |
132 | $ls = true; | |
541e8d03 | 133 | $this->geocodeAddress($job['w_address'], $s); |
37d44b3b | 134 | $ls = ($ls && $s); |
bde2be3b | 135 | $this->cleanJob($page, $key, $job, $s); |
37d44b3b FB |
136 | $ls = ($ls && $s); |
137 | if (!$init) { | |
138 | $success = ($success && $ls); | |
139 | } | |
140 | } | |
141 | return $value; | |
142 | } | |
143 | ||
144 | public function save(ProfilePage &$page, $field, $value) | |
145 | { | |
5e4417a9 | 146 | require_once('profil.func.inc.php'); |
b814a8b8 SJ |
147 | require_once('validations.inc.php'); |
148 | ||
c7139c07 | 149 | XDB::execute("DELETE FROM profile_job |
37d44b3b FB |
150 | WHERE uid = {?}", |
151 | S::i('uid')); | |
541e8d03 SJ |
152 | XDB::execute("DELETE FROM profile_addresses |
153 | WHERE pid = {?} AND type = 'job'", | |
154 | S::i('uid')); | |
b235d980 | 155 | XDB::execute("DELETE FROM profile_phones |
5e4417a9 GB |
156 | WHERE uid = {?} AND link_type = 'pro'", |
157 | S::i('uid')); | |
b814a8b8 | 158 | foreach ($value as $id=>&$job) { |
b814a8b8 SJ |
159 | if ($job['jobid']) { |
160 | XDB::execute("INSERT INTO profile_job (uid, id, functionid, description, sectorid, subsectorid, | |
161 | subsubsectorid, email, url, pub, email_pub, jobid) | |
162 | VALUES ({?}, {?}, {?}, {?}, {?}, {?}, {?}, {?}, {?}, {?}, {?}, {?})", | |
541e8d03 SJ |
163 | S::i('uid'), $id, $job['fonction'], $job['description'], $job['sector'], $job['subSector'], |
164 | $job['subSubSector'], $job['w_email'], $job['w_url'], $job['pub'], $job['w_email_pub'], $job['jobid']); | |
b814a8b8 SJ |
165 | } else { |
166 | XDB::execute("INSERT INTO profile_job (uid, id, functionid, description, sectorid, subsectorid, | |
167 | subsubsectorid, email, url, pub, email_pub) | |
168 | VALUES ({?}, {?}, {?}, {?}, {?}, {?}, {?}, {?}, {?}, {?}, {?})", | |
541e8d03 SJ |
169 | S::i('uid'), $id, $job['fonction'], $job['description'], $job['sector'], $job['subSector'], |
170 | $job['subSubSector'], $job['w_email'], $job['w_url'], $job['pub'], $job['w_email_pub']); | |
b814a8b8 | 171 | } |
541e8d03 SJ |
172 | $address = new ProfileAddress(); |
173 | $address->saveAddress($id, $job['w_address'], 'job'); | |
b814a8b8 | 174 | $profiletel = new ProfilePhones('pro', $id); |
541e8d03 | 175 | $profiletel->saveTels('tel', $job['w_phone']); |
37d44b3b FB |
176 | } |
177 | } | |
178 | } | |
179 | ||
3950bc21 FB |
180 | class ProfileJobs extends ProfilePage |
181 | { | |
182 | protected $pg_template = 'profile/jobs.tpl'; | |
183 | ||
184 | public function __construct(PlWizard &$wiz) | |
185 | { | |
186 | parent::__construct($wiz); | |
37d44b3b | 187 | $this->settings['cv'] = null; |
72e96bc0 | 188 | $this->settings['corps'] = null; |
37d44b3b | 189 | $this->settings['jobs'] = new ProfileJob(); |
72e96bc0 | 190 | $this->watched = array('cv' => true, 'jobs' => true, 'corps' => true); |
37d44b3b FB |
191 | } |
192 | ||
7c2e0f0d | 193 | protected function _fetchData() |
37d44b3b | 194 | { |
37d44b3b FB |
195 | // Checkout the CV |
196 | $res = XDB::query("SELECT cv | |
197 | FROM auth_user_md5 | |
198 | WHERE user_id = {?}", | |
199 | S::i('uid')); | |
200 | $this->values['cv'] = $res->fetchOneCell(); | |
201 | ||
72e96bc0 SJ |
202 | // Checkout the corps |
203 | $res = XDB::query("SELECT original_corpsid AS original, current_corpsid AS current, | |
204 | rankid AS rank, corps_pub AS pub | |
205 | FROM profile_corps | |
206 | WHERE uid = {?}", | |
207 | S::i('uid')); | |
208 | $this->values['corps'] = $res->fetchOneAssoc(); | |
209 | ||
37d44b3b | 210 | // Build the jobs tree |
541e8d03 SJ |
211 | $res = XDB::iterRow("SELECT j.id, j.jobid, je.name, j.functionid, j.sectorid, j.subsectorid, j.subsubsectorid, |
212 | s.name, j.description, j.email, j.email_pub, j.url, j.pub, | |
213 | je.acronym, je.url, je.email, | |
214 | aw.accuracy, aw.text, aw.postalText, aw.postalCode, aw.localityId, | |
215 | aw.subAdministrativeAreaId, aw.administrativeAreaId, aw.countryId, | |
216 | aw.latitude, aw.longitude, aw.pub, aw.updateTime, | |
217 | aw.north, aw.south, aw.east, aw.west, | |
218 | ah.accuracy, ah.text, ah.postalText, ah.postalCode, ah.localityId, | |
219 | ah.subAdministrativeAreaId, ah.administrativeAreaId, ah.countryId, | |
220 | ah.latitude, ah.longitude, ah.pub, ah.updateTime, | |
221 | ah.north, ah.south, ah.east, ah.west | |
c7139c07 SJ |
222 | FROM profile_job AS j |
223 | LEFT JOIN profile_job_enum AS je ON (j.jobid = je.id) | |
c7139c07 | 224 | LEFT JOIN profile_job_subsubsector_enum AS s ON (s.id = j.subsubsectorid) |
4d7d27fc SJ |
225 | LEFT JOIN profile_addresses AS aw ON (aw.pid = j.uid AND aw.type = 'job' |
226 | AND aw.id = j.id) | |
541e8d03 | 227 | LEFT JOIN profile_addresses AS ah ON (ah.jobid = j.jobid AND ah.type = 'hq') |
c7139c07 | 228 | WHERE j.uid = {?} |
541e8d03 SJ |
229 | ORDER BY j.id", |
230 | S::i('uid')); | |
37d44b3b | 231 | $this->values['jobs'] = array(); |
541e8d03 SJ |
232 | while (list($id, $jobid, $name, $function, $sector, $subSector, $subSubSector, |
233 | $subSubSectorName, $description, $w_email, $w_emailPub, $w_url, $pub, | |
234 | $hq_acronym, $hq_url, $hq_email, | |
235 | $w_accuracy, $w_text, $w_postalText, $w_postalCode, $w_localityId, | |
236 | $w_subAdministrativeAreaId, $w_administrativeAreaId, $w_countryId, | |
237 | $w_latitude, $w_longitude, $w_pub, $w_updateTime, | |
238 | $w_north, $w_south, $w_east, $w_west, | |
239 | $hq_accuracy, $hq_text, $hq_postalText, $hq_postalCode, $hq_localityId, | |
240 | $hq_subAdministrativeAreaId, $hq_administrativeAreaId, $hq_countryId, | |
241 | $hq_latitude, $hq_longitude, $hq_pub, $hq_updateTime, | |
242 | $hq_north, $hq_south, $hq_east, $hq_west, | |
bde2be3b | 243 | ) = $res->next()) { |
c7139c07 | 244 | $this->values['jobs'][] = array('id' => $id, |
541e8d03 | 245 | 'jobid' => $jobid, |
c7139c07 | 246 | 'name' => $name, |
541e8d03 SJ |
247 | 'function' => $function, |
248 | 'sector' => $sector, | |
249 | 'subSector' => $subSector, | |
250 | 'subSubSector' => $subSubSector, | |
251 | 'subSubSectorName' => $subSubSectorName, | |
c7139c07 | 252 | 'description' => $description, |
c7139c07 | 253 | 'pub' => $pub, |
541e8d03 SJ |
254 | 'w_email' => $w_email, |
255 | 'w_email_pub' => $w_email_pub, | |
256 | 'w_url' => $w_url, | |
257 | 'hq_acronym' => $hq_acronym, | |
258 | 'hq_url' => $hq_url, | |
259 | 'hq_email' => $hq_email, | |
260 | 'w_address' => array('accuracy' => $w_accuracy, | |
261 | 'text' => $w_text, | |
262 | 'postalText' => $w_postalText, | |
263 | 'postalCode' => $w_postalCode, | |
264 | 'localityId' => $w_localityId, | |
265 | 'subAdministrativeAreaId' => $w_subAdministrativeAreaId, | |
266 | 'administrativeAreaId' => $w_administrativeAreaId, | |
267 | 'countryId' => $w_countryId, | |
268 | 'latitude' => $w_latitude, | |
269 | 'longitude' => $w_longitude, | |
270 | 'pub' => $w_pub, | |
271 | 'updateTime' => $w_update, | |
272 | 'north' => $w_north, | |
273 | 'south' => $w_south, | |
274 | 'east' => $w_east, | |
275 | 'west' => $w_west, | |
276 | ), | |
277 | 'hq_address' => array('accuracy' => $hq_accuracy, | |
278 | 'text' => $hq_text, | |
279 | 'postalText' => $hq_postalText, | |
280 | 'postalCode' => $hq_postalCode, | |
281 | 'localityId' => $hq_localityId, | |
282 | 'subAdministrativeAreaId' => $hq_subAdministrativeAreaId, | |
283 | 'administrativeAreaId' => $hq_administrativeAreaId, | |
284 | 'countryId' => $hq_countryId, | |
285 | 'latitude' => $hq_latitude, | |
286 | 'longitude' => $hq_longitude, | |
287 | 'pub' => $hq_pub, | |
288 | 'updateTime' => $hq_update, | |
289 | 'north' => $hq_north, | |
290 | 'south' => $hq_south, | |
291 | 'east' => $hq_east, | |
292 | 'west' => $hq_west, | |
293 | ), | |
294 | ); | |
37d44b3b | 295 | } |
bde2be3b GB |
296 | |
297 | $res = XDB::iterator("SELECT link_id AS jobid, tel_type AS type, pub, display_tel AS tel, comment | |
298 | FROM profile_phones | |
299 | WHERE uid = {?} AND link_type = 'pro' | |
300 | ORDER BY link_id", | |
301 | S::i('uid')); | |
302 | $i = 0; | |
303 | $jobNb = count($this->values['jobs']); | |
541e8d03 SJ |
304 | while ($phone = $res->next()) { |
305 | $jobid = $phone['jobid']; | |
bde2be3b GB |
306 | while ($i < $jobNb && $this->values['jobs'][$i]['id'] < $jobid) { |
307 | $i++; | |
308 | } | |
309 | if ($i >= $jobNb) { | |
310 | break; | |
311 | } | |
312 | $job =& $this->values['jobs'][$i]; | |
541e8d03 SJ |
313 | if (!isset($job['w_phone'])) { |
314 | $job['w_phone'] = array(); | |
bde2be3b GB |
315 | } |
316 | if ($job['id'] == $jobid) { | |
541e8d03 | 317 | $job['w_phone'][] = $phone; |
bde2be3b GB |
318 | } |
319 | } | |
541e8d03 SJ |
320 | foreach ($this->values['jobs'] as $id => &$job) { |
321 | if (!isset($job['w_phone'])) { | |
322 | $job['w_phone'] = array(); | |
bde2be3b | 323 | } |
bde2be3b | 324 | } |
37d44b3b FB |
325 | } |
326 | ||
7c2e0f0d | 327 | protected function _saveData() |
37d44b3b FB |
328 | { |
329 | if ($this->changed['cv']) { | |
330 | XDB::execute("UPDATE auth_user_md5 | |
331 | SET cv = {?} | |
332 | WHERE user_id = {?}", | |
333 | $this->values['cv'], S::i('uid')); | |
334 | } | |
72e96bc0 SJ |
335 | |
336 | if ($this->changed['corps']) { | |
337 | XDB::execute("UPDATE profile_corps | |
338 | SET original_corpsid = {?}, current_corpsid = {?}, | |
339 | rankid = {?}, corps_pub = {?} | |
340 | WHERE uid = {?}", | |
341 | $this->values['corps']['original'], $this->values['corps']['current'], | |
342 | $this->values['corps']['rank'], $this->values['corps']['pub'], S::i('uid')); | |
343 | } | |
3950bc21 | 344 | } |
2dcac0f5 | 345 | |
04334c61 | 346 | public function _prepare(PlPage &$page, $id) |
2dcac0f5 | 347 | { |
b715c1e1 SJ |
348 | require_once "emails.combobox.inc.php"; |
349 | fill_email_combobox($page); | |
350 | ||
33b6f5a0 SJ |
351 | $res = XDB::query("SELECT id, name AS label |
352 | FROM profile_job_sector_enum"); | |
541e8d03 | 353 | $page->assign('sectors', $res->fetchAllAssoc()); |
33b6f5a0 SJ |
354 | $res = XDB::query("SELECT id, fonction_fr, FIND_IN_SET('titre', flags) AS title |
355 | FROM fonctions_def | |
356 | ORDER BY id"); | |
541e8d03 | 357 | $page->assign('functions', $res->fetchAllAssoc()); |
72e96bc0 SJ |
358 | |
359 | $res = XDB::iterator("SELECT id, name | |
360 | FROM profile_corps_enum | |
361 | ORDER BY id = 1 DESC, name"); | |
362 | $page->assign('original_corps', $res->fetchAllAssoc()); | |
363 | ||
364 | $res = XDB::iterator("SELECT id, name | |
365 | FROM profile_corps_enum | |
366 | WHERE still_exists = 1 | |
367 | ORDER BY id = 1 DESC, name"); | |
368 | $page->assign('current_corps', $res->fetchAllAssoc()); | |
369 | ||
370 | $res = XDB::iterator("SELECT id, name | |
371 | FROM profile_corps_rank_enum"); | |
372 | $page->assign('corps_rank', $res->fetchAllAssoc()); | |
2dcac0f5 | 373 | } |
3950bc21 FB |
374 | } |
375 | ||
376 | // vim:set et sw=4 sts=4 sws=4 foldmethod=marker enc=utf-8: | |
377 | ?> |