5245a2f290d80912401a30cc9a715e159b08fa76
2 /***************************************************************************
3 * Copyright (C) 2003-2010 Polytechnique.org *
4 * http://opensource.polytechnique.org/ *
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. *
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. *
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 *
19 * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA *
20 ***************************************************************************/
22 class ProfileSettingJob
extends ProfileSettingGeocoding
31 public function __construct()
33 $this->pub
= new ProfileSettingPub();
36 = new ProfileSettingEmail();
37 $this->url
= new ProfileSettingWeb();
38 $this->bool
= new ProfileSettingBool();
39 $this->checks
= array('url' => array('w_url'),
40 'email' => array('w_email'),
41 'pub' => array('pub', 'w_email_pub'),
45 public function emptyJob()
55 'hq_address' => array(
60 'administrativeAreaId' => '',
61 'subAdministrativeAreaId' => '',
77 'subSubSectorName' => null
,
80 'subSubSector' => '0',
89 'administrativeAreaId' => '',
90 'subAdministrativeAreaId' => '',
105 'w_email_pub' => 'private',
107 'w_phone' => array(0 => array(
116 private function cleanJob(ProfilePage
&$page, $jobid, array &$job, &$success)
119 if ($job['w_email'] == "new@example.org") {
120 $job['w_email'] = $job['w_email_new'];
122 foreach ($this->checks
as $obj=>&$fields) {
124 foreach ($fields as $field) {
125 $job[$field] = $chk->value($page, $field, $job[$field], $s);
128 $job[$field . '_error'] = true
;
132 if (!$job['subSubSectorName']) {
133 $res = XDB
::query("SELECT name
134 FROM profile_job_subsubsector_enum
136 $job['subSubSector']);
137 $job['subSubSectorName'] = $res->fetchOneCell();
139 $res = XDB
::query("SELECT sectorid, subsectorid, id
140 FROM profile_job_subsubsector_enum
142 $job['subSubSectorName']);
143 if ($res->numRows() != 1) {
145 $job['sector_error'] = true
;
147 list($job['sector'], $job['subSector'], $job['subSubSector']) = $res->fetchOneRow();
151 $res = XDB
::query("SELECT id
152 FROM profile_job_enum
155 if ($res->numRows() != 1) {
156 $user = $page->profile
->owner
;
157 $this->geocodeAddress($job['hq_address'], $s);
159 $gmapsGeocoder = new GMapsGeocoder();
160 $job['hq_address'] = $gmapsGeocoder->stripGeocodingFromAddress($job['hq_address']);
162 $req = new EntrReq($user, $jobid, $job['name'], $job['hq_acronym'], $job['hq_url'],
163 $job['hq_email'], $job['hq_fixed'], $job['hq_fax'], $job['hq_address']);
165 $job['jobid'] = null
;
167 $job['jobid'] = $res->fetchOneCell();
170 $job['w_address']['pub'] = $this->pub
->value($page, 'address_pub', $job['w_address']['pub'], $s);
171 if (!isset($job['w_phone'])) {
172 $job['w_phone'] = array();
174 $profiletel = new ProfileSettingPhones('pro', $jobid);
175 $job['w_phone'] = $profiletel->value($page, 'tel', $job['w_phone'], $s);
177 unset($job['removed']);
181 public function value(ProfilePage
&$page, $field, $value, &$success)
183 require_once 'validations.inc.php';
184 $entreprise = Validate
::get_typed_requests($page->profile
->owner
->id(), 'entreprise');
188 if (is_null($value)) {
189 $value = $page->values
['jobs'];
193 foreach ($value as $key => &$job) {
194 $job['name'] = trim($job['name']);
195 if ($job['name'] == '' && $entreprise) {
196 $job['tmp_name'] = $entreprise[$entr_val]->name
;
198 } else if ($job['name'] == '') {
199 $job['name_error'] = true
;
202 if (isset($job['removed']) && $job['removed']) {
206 foreach ($value as $key => &$job) {
208 $this->geocodeAddress($job['w_address'], $s);
210 $this->cleanJob($page, $key, $job, $s);
213 $success = ($success && $ls);
219 public function save(ProfilePage
&$page, $field, $value)
221 // TODO: use address and phone classes to update profile_job_enum and profile_phones once they are done.
223 require_once 'profil.func.inc.php';
224 require_once 'validations.inc.php';
226 XDB
::execute("DELETE FROM profile_job
229 XDB
::execute("DELETE FROM profile_addresses
230 WHERE pid = {?} AND type = 'job'",
232 XDB
::execute("DELETE FROM profile_phones
233 WHERE pid = {?} AND link_type = 'pro'",
235 foreach ($value as $id => &$job) {
236 if (isset($job['name']) && $job['name']) {
237 if (isset($job['jobid']) && $job['jobid']) {
238 XDB
::execute("INSERT INTO profile_job (pid, id, description, sectorid, subsectorid,
239 subsubsectorid, email, url, pub, email_pub, jobid)
240 VALUES ({?}, {?}, {?}, {?}, {?}, {?}, {?}, {?}, {?}, {?}, {?})",
241 $page->pid(), $id, $job['description'], $job['sector'], $job['subSector'],
242 $job['subSubSector'], $job['w_email'], $job['w_url'], $job['pub'], $job['w_email_pub'], $job['jobid']);
244 XDB
::execute("INSERT INTO profile_job (pid, id, description, sectorid, subsectorid,
245 subsubsectorid, email, url, pub, email_pub)
246 VALUES ({?}, {?}, {?}, {?}, {?}, {?}, {?}, {?}, {?}, {?})",
247 $page->pid(), $id, $job['description'], $job['sector'], $job['subSector'],
248 $job['subSubSector'], $job['w_email'], $job['w_url'], $job['pub'], $job['w_email_pub']);
250 $address = new ProfileSettingAddress();
251 $address->saveAddress($page->pid(), $id, $job['w_address'], 'job');
252 $profiletel = new ProfileSettingPhones('pro', $id);
253 $profiletel->saveTels($page->pid(), 'tel', $job['w_phone']);
259 class ProfileSettingJobs
extends ProfilePage
261 protected $pg_template = 'profile/jobs.tpl';
263 public function __construct(PlWizard
&$wiz)
265 parent
::__construct($wiz);
266 $this->settings
['cv'] = null
;
267 $this->settings
['corps'] = null
;
268 $this->settings
['jobs'] = new ProfileSettingJob();
269 $this->watched
= array('cv' => true
, 'jobs' => true
, 'corps' => true
);
272 protected function _fetchData()
275 $res = XDB
::query("SELECT cv
279 $this->values
['cv'] = $res->fetchOneCell();
281 // Checkout the corps
282 $res = XDB
::query("SELECT original_corpsid AS original, current_corpsid AS current,
283 rankid AS rank, corps_pub AS pub
287 $this->values
['corps'] = $res->fetchOneAssoc();
289 // Build the jobs tree
290 $res = XDB
::iterRow("SELECT j.id, j.jobid, je.name, j.sectorid, j.subsectorid, j.subsubsectorid,
291 s.name, j.description, j.email, j.email_pub, j.url, j.pub,
292 je.acronym, je.url, je.email,
293 aw.accuracy, aw.text, aw.postalText, aw.postalCode, aw.localityId,
294 aw.subAdministrativeAreaId, aw.administrativeAreaId, aw.countryId,
295 aw.latitude, aw.longitude, aw.pub, aw.updateTime,
296 aw.north, aw.south, aw.east, aw.west,
297 ah.accuracy, ah.text, ah.postalText, ah.postalCode, ah.localityId,
298 ah.subAdministrativeAreaId, ah.administrativeAreaId, ah.countryId,
299 ah.latitude, ah.longitude, ah.pub, ah.updateTime,
300 ah.north, ah.south, ah.east, ah.west
301 FROM profile_job AS j
302 LEFT JOIN profile_job_enum AS je ON (j.jobid = je.id)
303 LEFT JOIN profile_job_subsubsector_enum AS s ON (s.id = j.subsubsectorid)
304 LEFT JOIN profile_addresses AS aw ON (aw.pid = j.pid AND aw.type = 'job'
306 LEFT JOIN profile_addresses AS ah ON (ah.jobid = j.jobid AND ah.type = 'hq')
310 $this->values
['jobs'] = array();
312 if ($res->numRows() > 0) {
313 while (list($id, $jobid, $name, $sector, $subSector, $subSubSector,
314 $subSubSectorName, $description, $w_email, $w_emailPub, $w_url, $pub,
315 $hq_acronym, $hq_url, $hq_email,
316 $w_accuracy, $w_text, $w_postalText, $w_postalCode, $w_localityId,
317 $w_subAdministrativeAreaId, $w_administrativeAreaId, $w_countryId,
318 $w_latitude, $w_longitude, $w_pub, $w_updateTime,
319 $w_north, $w_south, $w_east, $w_west,
320 $hq_accuracy, $hq_text, $hq_postalText, $hq_postalCode, $hq_localityId,
321 $hq_subAdministrativeAreaId, $hq_administrativeAreaId, $hq_countryId,
322 $hq_latitude, $hq_longitude, $hq_pub, $hq_updateTime,
323 $hq_north, $hq_south, $hq_east, $hq_west,
325 $this->values
['jobs'][] = array(
330 'subSector' => $subSector,
331 'subSubSector' => $subSubSector,
332 'subSubSectorName' => $subSubSectorName,
333 'description' => $description,
335 'w_email' => $w_email,
336 'w_email_pub' => $w_emailPub,
338 'hq_acronym' => $hq_acronym,
340 'hq_email' => $hq_email,
341 'w_address' => array(
342 'accuracy' => $w_accuracy,
344 'postalText' => $w_postalText,
345 'postalCode' => $w_postalCode,
346 'localityId' => $w_localityId,
347 'subAdministrativeAreaId' => $w_subAdministrativeAreaId,
348 'administrativeAreaId' => $w_administrativeAreaId,
349 'countryId' => $w_countryId,
350 'latitude' => $w_latitude,
351 'longitude' => $w_longitude,
353 'updateTime' => $w_updateTime,
359 'hq_address' => array(
360 'accuracy' => $hq_accuracy,
362 'postalText' => $hq_postalText,
363 'postalCode' => $hq_postalCode,
364 'localityId' => $hq_localityId,
365 'subAdministrativeAreaId' => $hq_subAdministrativeAreaId,
366 'administrativeAreaId' => $hq_administrativeAreaId,
367 'countryId' => $hq_countryId,
368 'latitude' => $hq_latitude,
369 'longitude' => $hq_longitude,
371 'updateTime' => $hq_updateTime,
372 'north' => $hq_north,
373 'south' => $hq_south,
380 $res = XDB
::iterator("SELECT link_id AS jobid, tel_type AS type, pub, display_tel AS tel, comment
382 WHERE pid = {?} AND link_type = 'pro'
386 $jobNb = count($this->values
['jobs']);
387 while ($phone = $res->next()) {
388 $jobid = $phone['jobid'];
389 while ($i < $jobNb && $this->values
['jobs'][$i]['id'] < $jobid) {
395 $job =& $this->values
['jobs'][$i];
396 if (!isset($job['w_phone'])) {
397 $job['w_phone'] = array();
399 if ($job['id'] == $jobid) {
400 $job['w_phone'][] = $phone;
403 foreach ($this->values
['jobs'] as $id => &$job) {
404 if (!isset($job['w_phone'])) {
405 $job['w_phone'] = array(
416 $job['w_email_new'] = '';
417 if (!isset($job['hq_phone'])) {
418 $job['hq_phone'] = '';
420 if (!isset($job['hq_fax'])) {
423 if (!isset($job['w_email_pub'])) {
424 $job['w_email_pub'] = 'private';
426 if (!$job['hq_address']['text']) {
427 $job['hq_address'] = array(
432 'administrativeAreaId' => '',
433 'subAdministrativeAreaId' => '',
448 $job['w_address']['cedex'] = '';
449 $job['w_address']['changed'] = '0';
450 $job['w_address']['removed'] = '0';
452 $this->values
['jobs'][] = $this->settings
['jobs']->emptyJob();
456 protected function _saveData()
458 if ($this->changed
['cv']) {
459 XDB
::execute("UPDATE profiles
462 $this->values
['cv'], $this->pid());
465 if ($this->changed
['corps']) {
466 XDB
::execute('REPLACE INTO profile_corps (original_corpsid, current_corpsid, rankid, corps_pub, pid)
467 VALUES ({?}, {?}, {?}, {?}, {?})',
468 $this->values
['corps']['original'], $this->values
['corps']['current'],
469 $this->values
['corps']['rank'], $this->values
['corps']['pub'], $this->pid());
473 public function _prepare(PlPage
&$page, $id)
475 require_once 'emails.combobox.inc.php';
476 fill_email_combobox($page, $this->owner
, $this->profile
);
478 $res = XDB
::query("SELECT id, name AS label
479 FROM profile_job_sector_enum");
480 $page->assign('sectors', $res->fetchAllAssoc());
482 $res = XDB
::iterator("SELECT id, name
483 FROM profile_corps_enum
484 ORDER BY id = 1 DESC, name");
485 $page->assign('original_corps', $res->fetchAllAssoc());
487 $res = XDB
::iterator("SELECT id, name
488 FROM profile_corps_enum
489 WHERE still_exists = 1
490 ORDER BY id = 1 DESC, name");
491 $page->assign('current_corps', $res->fetchAllAssoc());
493 $res = XDB
::iterator("SELECT id, name
494 FROM profile_corps_rank_enum
495 ORDER BY id = 1 DESC, name");
496 $page->assign('corps_rank', $res->fetchAllAssoc());
500 // vim:set et sw=4 sts=4 sws=4 foldmethod=marker enc=utf-8: