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 // TODO: use address and phone classes to update profile_job_enum and profile_phones once they are done.
148 require_once('profil.func.inc.php');
149 require_once('validations.inc.php');
151 XDB
::execute("DELETE FROM profile_job
154 XDB
::execute("DELETE FROM profile_addresses
155 WHERE pid = {?} AND type = 'job'",
157 XDB
::execute("DELETE FROM profile_phones
158 WHERE uid = {?} AND link_type = 'pro'",
160 foreach ($value as $id=>&$job) {
162 XDB
::execute("INSERT INTO profile_job (uid, id, description, sectorid, subsectorid,
163 subsubsectorid, email, url, pub, email_pub, jobid)
164 VALUES ({?}, {?}, {?}, {?}, {?}, {?}, {?}, {?}, {?}, {?}, {?}, {?})",
165 S
::i('uid'), $id, $job['description'], $job['sector'], $job['subSector'],
166 $job['subSubSector'], $job['w_email'], $job['w_url'], $job['pub'], $job['w_email_pub'], $job['jobid']);
168 XDB
::execute("INSERT INTO profile_job (uid, id, description, sectorid, subsectorid,
169 subsubsectorid, email, url, pub, email_pub)
170 VALUES ({?}, {?}, {?}, {?}, {?}, {?}, {?}, {?}, {?}, {?}, {?})",
171 S
::i('uid'), $id, $job['description'], $job['sector'], $job['subSector'],
172 $job['subSubSector'], $job['w_email'], $job['w_url'], $job['pub'], $job['w_email_pub']);
174 $address = new ProfileAddress();
175 $address->saveAddress($id, $job['w_address'], 'job');
176 $profiletel = new ProfilePhones('pro', $id);
177 $profiletel->saveTels('tel', $job['w_phone']);
182 class ProfileJobs
extends ProfilePage
184 protected $pg_template = 'profile/jobs.tpl';
186 public function __construct(PlWizard
&$wiz)
188 parent
::__construct($wiz);
189 $this->settings
['cv'] = null
;
190 $this->settings
['corps'] = null
;
191 $this->settings
['jobs'] = new ProfileJob();
192 $this->watched
= array('cv' => true
, 'jobs' => true
, 'corps' => true
);
195 protected function _fetchData()
198 $res = XDB
::query("SELECT cv
200 WHERE user_id = {?}",
202 $this->values
['cv'] = $res->fetchOneCell();
204 // Checkout the corps
205 $res = XDB
::query("SELECT original_corpsid AS original, current_corpsid AS current,
206 rankid AS rank, corps_pub AS pub
210 $this->values
['corps'] = $res->fetchOneAssoc();
212 // Build the jobs tree
213 $res = XDB
::iterRow("SELECT j.id, j.jobid, je.name, j.sectorid, j.subsectorid, j.subsubsectorid,
214 s.name, j.description, j.email, j.email_pub, j.url, j.pub,
215 je.acronym, je.url, je.email,
216 aw.accuracy, aw.text, aw.postalText, aw.postalCode, aw.localityId,
217 aw.subAdministrativeAreaId, aw.administrativeAreaId, aw.countryId,
218 aw.latitude, aw.longitude, aw.pub, aw.updateTime,
219 aw.north, aw.south, aw.east, aw.west,
220 ah.accuracy, ah.text, ah.postalText, ah.postalCode, ah.localityId,
221 ah.subAdministrativeAreaId, ah.administrativeAreaId, ah.countryId,
222 ah.latitude, ah.longitude, ah.pub, ah.updateTime,
223 ah.north, ah.south, ah.east, ah.west
224 FROM profile_job AS j
225 LEFT JOIN profile_job_enum AS je ON (j.jobid = je.id)
226 LEFT JOIN profile_job_subsubsector_enum AS s ON (s.id = j.subsubsectorid)
227 LEFT JOIN profile_addresses AS aw ON (aw.pid = j.uid AND aw.type = 'job'
229 LEFT JOIN profile_addresses AS ah ON (ah.jobid = j.jobid AND ah.type = 'hq')
233 $this->values
['jobs'] = array();
234 while (list($id, $jobid, $name, $sector, $subSector, $subSubSector,
235 $subSubSectorName, $description, $w_email, $w_emailPub, $w_url, $pub,
236 $hq_acronym, $hq_url, $hq_email,
237 $w_accuracy, $w_text, $w_postalText, $w_postalCode, $w_localityId,
238 $w_subAdministrativeAreaId, $w_administrativeAreaId, $w_countryId,
239 $w_latitude, $w_longitude, $w_pub, $w_updateTime,
240 $w_north, $w_south, $w_east, $w_west,
241 $hq_accuracy, $hq_text, $hq_postalText, $hq_postalCode, $hq_localityId,
242 $hq_subAdministrativeAreaId, $hq_administrativeAreaId, $hq_countryId,
243 $hq_latitude, $hq_longitude, $hq_pub, $hq_updateTime,
244 $hq_north, $hq_south, $hq_east, $hq_west,
246 $this->values
['jobs'][] = array('id' => $id,
250 'subSector' => $subSector,
251 'subSubSector' => $subSubSector,
252 'subSubSectorName' => $subSubSectorName,
253 'description' => $description,
255 'w_email' => $w_email,
256 'w_email_pub' => $w_email_pub,
258 'hq_acronym' => $hq_acronym,
260 'hq_email' => $hq_email,
261 'w_address' => array('accuracy' => $w_accuracy,
263 'postalText' => $w_postalText,
264 'postalCode' => $w_postalCode,
265 'localityId' => $w_localityId,
266 'subAdministrativeAreaId' => $w_subAdministrativeAreaId,
267 'administrativeAreaId' => $w_administrativeAreaId,
268 'countryId' => $w_countryId,
269 'latitude' => $w_latitude,
270 'longitude' => $w_longitude,
272 'updateTime' => $w_update,
278 'hq_address' => array('accuracy' => $hq_accuracy,
280 'postalText' => $hq_postalText,
281 'postalCode' => $hq_postalCode,
282 'localityId' => $hq_localityId,
283 'subAdministrativeAreaId' => $hq_subAdministrativeAreaId,
284 'administrativeAreaId' => $hq_administrativeAreaId,
285 'countryId' => $hq_countryId,
286 'latitude' => $hq_latitude,
287 'longitude' => $hq_longitude,
289 'updateTime' => $hq_update,
290 'north' => $hq_north,
291 'south' => $hq_south,
298 $res = XDB
::iterator("SELECT link_id AS jobid, tel_type AS type, pub, display_tel AS tel, comment
300 WHERE uid = {?} AND link_type = 'pro'
304 $jobNb = count($this->values
['jobs']);
305 while ($phone = $res->next()) {
306 $jobid = $phone['jobid'];
307 while ($i < $jobNb && $this->values
['jobs'][$i]['id'] < $jobid) {
313 $job =& $this->values
['jobs'][$i];
314 if (!isset($job['w_phone'])) {
315 $job['w_phone'] = array();
317 if ($job['id'] == $jobid) {
318 $job['w_phone'][] = $phone;
321 foreach ($this->values
['jobs'] as $id => &$job) {
322 if (!isset($job['w_phone'])) {
323 $job['w_phone'] = array();
328 protected function _saveData()
330 if ($this->changed
['cv']) {
331 XDB
::execute("UPDATE auth_user_md5
333 WHERE user_id = {?}",
334 $this->values
['cv'], S
::i('uid'));
337 if ($this->changed
['corps']) {
338 XDB
::execute("UPDATE profile_corps
339 SET original_corpsid = {?}, current_corpsid = {?},
340 rankid = {?}, corps_pub = {?}
342 $this->values
['corps']['original'], $this->values
['corps']['current'],
343 $this->values
['corps']['rank'], $this->values
['corps']['pub'], S
::i('uid'));
347 public function _prepare(PlPage
&$page, $id)
349 require_once "emails.combobox.inc.php";
350 fill_email_combobox($page);
352 $res = XDB
::query("SELECT id, name AS label
353 FROM profile_job_sector_enum");
354 $page->assign('sectors', $res->fetchAllAssoc());
356 $res = XDB
::iterator("SELECT id, name
357 FROM profile_corps_enum
358 ORDER BY id = 1 DESC, name");
359 $page->assign('original_corps', $res->fetchAllAssoc());
361 $res = XDB
::iterator("SELECT id, name
362 FROM profile_corps_enum
363 WHERE still_exists = 1
364 ORDER BY id = 1 DESC, name");
365 $page->assign('current_corps', $res->fetchAllAssoc());
367 $res = XDB
::iterator("SELECT id, name
368 FROM profile_corps_rank_enum");
369 $page->assign('corps_rank', $res->fetchAllAssoc());
373 // vim:set et sw=4 sts=4 sws=4 foldmethod=marker enc=utf-8: