Gets rid of functions.
[platal.git] / modules / profile / jobs.inc.php
CommitLineData
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 22class 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 159 if ($job['jobid']) {
563f86f5 160 XDB::execute("INSERT INTO profile_job (uid, id, description, sectorid, subsectorid,
b814a8b8
SJ
161 subsubsectorid, email, url, pub, email_pub, jobid)
162 VALUES ({?}, {?}, {?}, {?}, {?}, {?}, {?}, {?}, {?}, {?}, {?}, {?})",
563f86f5 163 S::i('uid'), $id, $job['description'], $job['sector'], $job['subSector'],
541e8d03 164 $job['subSubSector'], $job['w_email'], $job['w_url'], $job['pub'], $job['w_email_pub'], $job['jobid']);
b814a8b8 165 } else {
563f86f5 166 XDB::execute("INSERT INTO profile_job (uid, id, description, sectorid, subsectorid,
b814a8b8
SJ
167 subsubsectorid, email, url, pub, email_pub)
168 VALUES ({?}, {?}, {?}, {?}, {?}, {?}, {?}, {?}, {?}, {?}, {?})",
563f86f5 169 S::i('uid'), $id, $job['description'], $job['sector'], $job['subSector'],
541e8d03 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
180class 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
563f86f5 211 $res = XDB::iterRow("SELECT j.id, j.jobid, je.name, j.sectorid, j.subsectorid, j.subsubsectorid,
541e8d03
SJ
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();
563f86f5 232 while (list($id, $jobid, $name, $sector, $subSector, $subSubSector,
541e8d03
SJ
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 'sector' => $sector,
248 'subSector' => $subSector,
249 'subSubSector' => $subSubSector,
250 'subSubSectorName' => $subSubSectorName,
c7139c07 251 'description' => $description,
c7139c07 252 'pub' => $pub,
541e8d03
SJ
253 'w_email' => $w_email,
254 'w_email_pub' => $w_email_pub,
255 'w_url' => $w_url,
256 'hq_acronym' => $hq_acronym,
257 'hq_url' => $hq_url,
258 'hq_email' => $hq_email,
259 'w_address' => array('accuracy' => $w_accuracy,
260 'text' => $w_text,
261 'postalText' => $w_postalText,
262 'postalCode' => $w_postalCode,
263 'localityId' => $w_localityId,
264 'subAdministrativeAreaId' => $w_subAdministrativeAreaId,
265 'administrativeAreaId' => $w_administrativeAreaId,
266 'countryId' => $w_countryId,
267 'latitude' => $w_latitude,
268 'longitude' => $w_longitude,
269 'pub' => $w_pub,
270 'updateTime' => $w_update,
271 'north' => $w_north,
272 'south' => $w_south,
273 'east' => $w_east,
274 'west' => $w_west,
275 ),
276 'hq_address' => array('accuracy' => $hq_accuracy,
277 'text' => $hq_text,
278 'postalText' => $hq_postalText,
279 'postalCode' => $hq_postalCode,
280 'localityId' => $hq_localityId,
281 'subAdministrativeAreaId' => $hq_subAdministrativeAreaId,
282 'administrativeAreaId' => $hq_administrativeAreaId,
283 'countryId' => $hq_countryId,
284 'latitude' => $hq_latitude,
285 'longitude' => $hq_longitude,
286 'pub' => $hq_pub,
287 'updateTime' => $hq_update,
288 'north' => $hq_north,
289 'south' => $hq_south,
290 'east' => $hq_east,
291 'west' => $hq_west,
292 ),
293 );
37d44b3b 294 }
bde2be3b
GB
295
296 $res = XDB::iterator("SELECT link_id AS jobid, tel_type AS type, pub, display_tel AS tel, comment
297 FROM profile_phones
298 WHERE uid = {?} AND link_type = 'pro'
299 ORDER BY link_id",
300 S::i('uid'));
301 $i = 0;
302 $jobNb = count($this->values['jobs']);
541e8d03
SJ
303 while ($phone = $res->next()) {
304 $jobid = $phone['jobid'];
bde2be3b
GB
305 while ($i < $jobNb && $this->values['jobs'][$i]['id'] < $jobid) {
306 $i++;
307 }
308 if ($i >= $jobNb) {
309 break;
310 }
311 $job =& $this->values['jobs'][$i];
541e8d03
SJ
312 if (!isset($job['w_phone'])) {
313 $job['w_phone'] = array();
bde2be3b
GB
314 }
315 if ($job['id'] == $jobid) {
541e8d03 316 $job['w_phone'][] = $phone;
bde2be3b
GB
317 }
318 }
541e8d03
SJ
319 foreach ($this->values['jobs'] as $id => &$job) {
320 if (!isset($job['w_phone'])) {
321 $job['w_phone'] = array();
bde2be3b 322 }
bde2be3b 323 }
37d44b3b
FB
324 }
325
7c2e0f0d 326 protected function _saveData()
37d44b3b
FB
327 {
328 if ($this->changed['cv']) {
329 XDB::execute("UPDATE auth_user_md5
330 SET cv = {?}
331 WHERE user_id = {?}",
332 $this->values['cv'], S::i('uid'));
333 }
72e96bc0
SJ
334
335 if ($this->changed['corps']) {
336 XDB::execute("UPDATE profile_corps
337 SET original_corpsid = {?}, current_corpsid = {?},
338 rankid = {?}, corps_pub = {?}
339 WHERE uid = {?}",
340 $this->values['corps']['original'], $this->values['corps']['current'],
341 $this->values['corps']['rank'], $this->values['corps']['pub'], S::i('uid'));
342 }
3950bc21 343 }
2dcac0f5 344
04334c61 345 public function _prepare(PlPage &$page, $id)
2dcac0f5 346 {
b715c1e1
SJ
347 require_once "emails.combobox.inc.php";
348 fill_email_combobox($page);
349
33b6f5a0
SJ
350 $res = XDB::query("SELECT id, name AS label
351 FROM profile_job_sector_enum");
541e8d03 352 $page->assign('sectors', $res->fetchAllAssoc());
72e96bc0
SJ
353
354 $res = XDB::iterator("SELECT id, name
355 FROM profile_corps_enum
356 ORDER BY id = 1 DESC, name");
357 $page->assign('original_corps', $res->fetchAllAssoc());
358
359 $res = XDB::iterator("SELECT id, name
360 FROM profile_corps_enum
361 WHERE still_exists = 1
362 ORDER BY id = 1 DESC, name");
363 $page->assign('current_corps', $res->fetchAllAssoc());
364
365 $res = XDB::iterator("SELECT id, name
366 FROM profile_corps_rank_enum");
367 $page->assign('corps_rank', $res->fetchAllAssoc());
2dcac0f5 368 }
3950bc21
FB
369}
370
371// vim:set et sw=4 sts=4 sws=4 foldmethod=marker enc=utf-8:
372?>