2 /***************************************************************************
3 * Copyright (C) 2003-2009 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 ProfileJob
extends ProfileGeocoding
31 public function __construct()
33 $this->pub
= new ProfilePub();
37 $this->url
= new ProfileWeb();
38 $this->bool
= new ProfileBool();
39 $this->checks
= array('url' => array('w_url'),
40 'email' => array('w_email'),
41 'pub' => array('pub', 'w_email_pub'),
45 private function cleanJob(ProfilePage
&$page, $jobid, array &$job, &$success)
48 if ($job['w_email'] == "new@example.org") {
49 $job['w_email'] = $job['w_email_new'];
51 foreach ($this->checks
as $obj=>&$fields) {
53 foreach ($fields as $field) {
54 $job[$field] = $chk->value($page, $field, $job[$field], $s);
57 $job[$field . '_error'] = true
;
61 if (!$job['subSubSectorName']) {
62 $res = XDB
::query("SELECT name
63 FROM profile_job_subsubsector_enum
65 $job['subSubSector']);
66 $job['subSubSectorName'] = $res->fetchOneCell();
68 $res = XDB
::query("SELECT sectorid, subsectorid, id
69 FROM profile_job_subsubsector_enum
71 $job['subSubSectorName']);
72 if ($res->numRows() != 1) {
74 $job['sector_error'] = true
;
76 list($job['sector'], $job['subSector'], $job['subSubSector']) = $res->fetchOneRow();
80 $res = XDB
::query("SELECT id
84 if ($res->numRows() != 1) {
86 $this->geocodeAddress($job['hq_address'], $s);
88 $gmapsGeocoder = new GMapsGeocoder();
89 $job['hq_address'] = $gmapsGeocoder->stripGeocodingFromAddress($job['hq_address']);
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']);
96 $job['jobid'] = $res->fetchOneCell();
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();
103 $profiletel = new ProfilePhones('pro', $jobid);
104 $job['w_phone'] = $profiletel->value($page, 'tel', $job['w_phone'], $s);
105 unset($job['removed']);
109 public function value(ProfilePage
&$page, $field, $value, &$success)
111 require_once('validations.inc.php');
112 $entreprise = Validate
::get_typed_requests(S
::i('uid'), 'entreprise');
116 if (is_null($value)) {
117 $value = $page->values
['jobs'];
121 foreach ($value as $key=>&$job) {
122 $job['name'] = trim($job['name']);
124 $job['tmp_name'] = $entreprise[$entr_val]->name
;
127 if (isset($job['removed']) && $job['removed']) {
131 foreach ($value as $key=>&$job) {
133 $this->geocodeAddress($job['w_address'], $s);
135 $this->cleanJob($page, $key, $job, $s);
138 $success = ($success && $ls);
144 public function save(ProfilePage
&$page, $field, $value)
146 require_once('profil.func.inc.php');
147 require_once('validations.inc.php');
149 XDB
::execute("DELETE FROM profile_job
152 XDB
::execute("DELETE FROM profile_addresses
153 WHERE pid = {?} AND type = 'job'",
155 XDB
::execute("DELETE FROM profile_phones
156 WHERE uid = {?} AND link_type = 'pro'",
158 foreach ($value as $id=>&$job) {
160 XDB
::execute("INSERT INTO profile_job (uid, id, description, sectorid, subsectorid,
161 subsubsectorid, email, url, pub, email_pub, jobid)
162 VALUES ({?}, {?}, {?}, {?}, {?}, {?}, {?}, {?}, {?}, {?}, {?}, {?})",
163 S
::i('uid'), $id, $job['description'], $job['sector'], $job['subSector'],
164 $job['subSubSector'], $job['w_email'], $job['w_url'], $job['pub'], $job['w_email_pub'], $job['jobid']);
166 XDB
::execute("INSERT INTO profile_job (uid, id, description, sectorid, subsectorid,
167 subsubsectorid, email, url, pub, email_pub)
168 VALUES ({?}, {?}, {?}, {?}, {?}, {?}, {?}, {?}, {?}, {?}, {?})",
169 S
::i('uid'), $id, $job['description'], $job['sector'], $job['subSector'],
170 $job['subSubSector'], $job['w_email'], $job['w_url'], $job['pub'], $job['w_email_pub']);
172 $address = new ProfileAddress();
173 $address->saveAddress($id, $job['w_address'], 'job');
174 $profiletel = new ProfilePhones('pro', $id);
175 $profiletel->saveTels('tel', $job['w_phone']);
180 class ProfileJobs
extends ProfilePage
182 protected $pg_template = 'profile/jobs.tpl';
184 public function __construct(PlWizard
&$wiz)
186 parent
::__construct($wiz);
187 $this->settings
['cv'] = null
;
188 $this->settings
['corps'] = null
;
189 $this->settings
['jobs'] = new ProfileJob();
190 $this->watched
= array('cv' => true
, 'jobs' => true
, 'corps' => true
);
193 protected function _fetchData()
196 $res = XDB
::query("SELECT cv
200 $this->values
['cv'] = $res->fetchOneCell();
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
208 $this->values
['corps'] = $res->fetchOneAssoc();
210 // Build the jobs tree
211 $res = XDB
::iterRow("SELECT j.id, j.jobid, je.name, 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
222 FROM profile_job AS j
223 LEFT JOIN profile_job_enum AS je ON (j.jobid = je.id)
224 LEFT JOIN profile_job_subsubsector_enum AS s ON (s.id = j.subsubsectorid)
225 LEFT JOIN profile_addresses AS aw ON (aw.pid = j.uid AND aw.type = 'job'
227 LEFT JOIN profile_addresses AS ah ON (ah.jobid = j.jobid AND ah.type = 'hq')
231 $this->values
['jobs'] = array();
232 while (list($id, $jobid, $name, $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,
244 $this->values
['jobs'][] = array('id' => $id,
248 'subSector' => $subSector,
249 'subSubSector' => $subSubSector,
250 'subSubSectorName' => $subSubSectorName,
251 'description' => $description,
253 'w_email' => $w_email,
254 'w_email_pub' => $w_email_pub,
256 'hq_acronym' => $hq_acronym,
258 'hq_email' => $hq_email,
259 'w_address' => array('accuracy' => $w_accuracy,
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,
270 'updateTime' => $w_update,
276 'hq_address' => array('accuracy' => $hq_accuracy,
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,
287 'updateTime' => $hq_update,
288 'north' => $hq_north,
289 'south' => $hq_south,
296 $res = XDB
::iterator("SELECT link_id AS jobid, tel_type AS type, pub, display_tel AS tel, comment
298 WHERE uid = {?} AND link_type = 'pro'
302 $jobNb = count($this->values
['jobs']);
303 while ($phone = $res->next()) {
304 $jobid = $phone['jobid'];
305 while ($i < $jobNb && $this->values
['jobs'][$i]['id'] < $jobid) {
311 $job =& $this->values
['jobs'][$i];
312 if (!isset($job['w_phone'])) {
313 $job['w_phone'] = array();
315 if ($job['id'] == $jobid) {
316 $job['w_phone'][] = $phone;
319 foreach ($this->values
['jobs'] as $id => &$job) {
320 if (!isset($job['w_phone'])) {
321 $job['w_phone'] = array();
326 protected function _saveData()
328 if ($this->changed
['cv']) {
329 XDB
::execute("UPDATE profiles
332 $this->values
['cv'], $this->pid());
335 if ($this->changed
['corps']) {
336 XDB
::execute("UPDATE profile_corps
337 SET original_corpsid = {?}, current_corpsid = {?},
338 rankid = {?}, corps_pub = {?}
340 $this->values
['corps']['original'], $this->values
['corps']['current'],
341 $this->values
['corps']['rank'], $this->values
['corps']['pub'], $this->pid());
345 public function _prepare(PlPage
&$page, $id)
347 require_once "emails.combobox.inc.php";
348 fill_email_combobox($page, $this->owner
, $this->profile
);
350 $res = XDB
::query("SELECT id, name AS label
351 FROM profile_job_sector_enum");
352 $page->assign('sectors', $res->fetchAllAssoc());
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());
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());
365 $res = XDB
::iterator("SELECT id, name
366 FROM profile_corps_rank_enum");
367 $page->assign('corps_rank', $res->fetchAllAssoc());
371 // vim:set et sw=4 sts=4 sws=4 foldmethod=marker enc=utf-8: