Commit | Line | Data |
---|---|---|
148af7a9 RB |
1 | <?php |
2 | /*************************************************************************** | |
c441aabe | 3 | * Copyright (C) 2003-2014 Polytechnique.org * |
148af7a9 RB |
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 | ||
22 | ||
23 | class WSDirectoryRequest | |
24 | { | |
25 | // Default number of returned results. | |
26 | const DEFAULT_AMOUNT = 20; | |
27 | ||
28 | public $fields; | |
29 | public $criteria; | |
30 | public $order = array(); | |
31 | public $amount = 0; | |
32 | protected $partner = null; | |
33 | ||
34 | const ORDER_RAND = 'rand'; | |
35 | const ORDER_NAME = 'name'; | |
36 | const ORDER_PROMOTION = 'promotion'; | |
37 | ||
f0f8c375 | 38 | public static $order_choices = array( |
148af7a9 RB |
39 | self::ORDER_RAND, |
40 | self::ORDER_NAME, | |
41 | self::ORDER_PROMOTION, | |
42 | ); | |
43 | ||
44 | public function __construct($partner, PlDict $payload) | |
45 | { | |
46 | $this->partner = $partner; | |
47 | global $globals; | |
48 | ||
f0f8c375 RB |
49 | $this->fields = array_intersect($payload->v('fields'), WSRequestFields::$choices); |
50 | $this->order = array_intersect($payload->v('order', array()), self::$order_choices); | |
148af7a9 RB |
51 | |
52 | $this->criteria = array(); | |
53 | $criteria = new PlDict($payload->v('criteria')); | |
f0f8c375 | 54 | foreach (WSRequestCriteria::$choices_simple as $criterion) { |
148af7a9 RB |
55 | if ($criteria->has($criterion)) { |
56 | $this->criteria[$criterion] = $criteria->s($criterion); | |
57 | } | |
58 | } | |
f0f8c375 | 59 | foreach (WSRequestCriteria::$choices_enum as $criterion) { |
148af7a9 RB |
60 | if ($criteria->has($criterion)) { |
61 | $this->criteria[$criterion] = $criteria->s($criterion); | |
62 | } | |
63 | } | |
f0f8c375 | 64 | foreach (WSRequestCriteria::$choices_list as $criterion) { |
148af7a9 RB |
65 | if ($criteria->has($criterion)) { |
66 | $this->criteria[$criterion] = $criteria->v($criterion); | |
67 | } | |
68 | } | |
69 | ||
f0f8c375 | 70 | // Amount may not exceed $globals->sharingapi->max_result_per_query. |
148af7a9 | 71 | $amount = $payload->i('amount', self::DEFAULT_AMOUNT); |
f0f8c375 | 72 | $this->amount = min($amount, $globals->sharingapi->max_result_per_query); |
148af7a9 RB |
73 | } |
74 | ||
75 | public function get() | |
76 | { | |
77 | $cond = $this->getCond(); | |
78 | $cond->addChild(new UFC_PartnerSharing($this->partner->id)); | |
79 | $pf = new ProfileFilter($cond, $this->getOrders()); | |
80 | $pf->restrictVisibilityForPartner($this->partner->id); | |
81 | $response = array(); | |
82 | $matches = $pf->getTotalProfileCount(); | |
83 | $response['matches'] = $matches; | |
84 | ||
85 | $profiles = array(); | |
86 | if ($matches) { | |
87 | // TODO : improve fetching by passing an adequate FETCH field | |
db492b02 | 88 | $iter = $pf->iterProfiles(new PlLimit($this->amount), 0x0000, Visibility::get(Visibility::VIEW_PRIVATE)); |
148af7a9 RB |
89 | while ($profile = $iter->next()) { |
90 | if ($profile->getPartnerSettings($this->partner->id)->exposed_uid !== 0) { | |
91 | $profile_data = new WSRequestEntry($this->partner, $profile); | |
92 | $profiles[] = $profile_data->getFields($this->fields); | |
93 | } | |
94 | } | |
95 | } | |
96 | $response['profiles'] = $profiles; | |
97 | return $response; | |
98 | } | |
99 | ||
100 | public function assignToPage(PlPage $page) | |
101 | { | |
102 | $response = $this->get(); | |
103 | $page->jsonAssign('matches', $response['matches']); | |
104 | $page->jsonAssign('profiles', $response['profiles']); | |
105 | } | |
106 | ||
107 | /** Compute the orders to use for the current request. | |
108 | * @return array of PlFilterOrder | |
109 | */ | |
110 | protected function getOrders() | |
111 | { | |
112 | $orders = array(); | |
113 | foreach ($this->order as $order) | |
114 | { | |
115 | switch ($order) { | |
116 | case self::ORDER_RAND: | |
117 | $orders[] = new PFO_Random(); | |
118 | break; | |
119 | case self::ORDER_NAME: | |
120 | $orders[] = new UFO_Name(Profile::DN_SORT); | |
121 | break; | |
122 | case self::ORDER_PROMOTION: | |
123 | $orders[] = new UFO_Promo(); | |
124 | break; | |
125 | default: | |
126 | break; | |
127 | } | |
128 | } | |
129 | return $orders; | |
130 | } | |
131 | ||
132 | /** Compute the conditions to use for the current request. | |
133 | * @return A PlFilterCondition instance (actually a PFC_And) | |
134 | */ | |
135 | protected function getCond() | |
136 | { | |
137 | $cond = new PFC_And(); | |
138 | foreach ($this->criteria as $criterion => $value) { | |
139 | switch ($criterion) { | |
140 | ||
141 | // ENUM fields | |
142 | case WSRequestCriteria::SCHOOL: | |
143 | // Useless criterion: we don't need to check on origin school | |
f0f8c375 | 144 | if (WSRequestCriteria::$choices_enum[$criterion][$value]) { |
148af7a9 RB |
145 | $cond->addChild(new PFC_True()); |
146 | } else { | |
147 | $cond->addChild(new PFC_False()); | |
148 | }; | |
149 | break; | |
150 | case WSRequestCriteria::DIPLOMA: | |
f0f8c375 | 151 | $diploma = WSRequestCriteria::$choices_enum[$criterion][$value]; |
148af7a9 RB |
152 | $id_X = XDB::fetchOneCell('SELECT id |
153 | FROM profile_education_enum | |
154 | WHERE abbreviation = {?}', 'X'); | |
155 | $cond->addChildren(array( | |
156 | new UFC_EducationSchool($id_X), | |
157 | new UFC_EducationDegree($diploma), | |
158 | )); | |
159 | break; | |
160 | ||
161 | // TEXT fields | |
162 | case WSRequestCriteria::FIRSTNAME: | |
163 | case WSRequestCriteria::LASTNAME: | |
164 | $cond->addChild(new UFC_NameTokens($value, UFC_NameTokens::FLAG_PUBLIC, false, false, $criterion)); | |
165 | break; | |
166 | case WSRequestCriteria::PROMOTION: | |
167 | $cond->addChild(new PFC_Or( | |
168 | new UFC_Promo(UserFilter::OP_EQUALS, | |
169 | UserFilter::GRADE_ING, | |
170 | $value), | |
171 | new UFC_Promo(UserFilter::OP_EQUALS, | |
172 | UserFilter::GRADE_MST, | |
173 | $value), | |
174 | new UFC_Promo(UserFilter::OP_EQUALS, | |
175 | UserFilter::GRADE_PHD, | |
176 | $value) | |
177 | )); | |
178 | break; | |
179 | case WSRequestCriteria::ALT_DIPLOMA: | |
180 | $cond->addChild( | |
181 | new UFC_EducationDegree( | |
182 | DirEnum::getIds(DirEnum::EDUDEGREES, $value))); | |
183 | break; | |
184 | case WSRequestCriteria::DIPLOMA_FIELD: | |
185 | $cond->addChild( | |
186 | new UFC_EducationField( | |
187 | DirEnum::getIds(DirEnum::EDUFIELDS, $value))); | |
188 | break; | |
189 | case WSRequestCriteria::CITY: | |
190 | $cond->addChild( | |
191 | new UFC_AddressField($value, | |
192 | UFC_AddressField::FIELD_LOCALITY, | |
193 | UFC_Address::TYPE_HOME, | |
194 | UFC_Address::FLAG_CURRENT)); | |
195 | break; | |
196 | case WSRequestCriteria::COUNTRY: | |
197 | $cond->addChild( | |
198 | new UFC_AddressField($value, | |
199 | UFC_AddressField::FIELD_COUNTRY, | |
200 | UFC_Address::TYPE_HOME, | |
201 | UFC_Address::FLAG_CURRENT)); | |
202 | break; | |
203 | case WSRequestCriteria::ZIPCODE: | |
204 | $cond->addChild( | |
205 | new UFC_AddressField($value, | |
206 | UFC_AddressField::FIELD_ZIPCODE, | |
207 | UFC_Address::TYPE_HOME, | |
208 | UFC_Address::FLAG_CURRENT)); | |
209 | break; | |
210 | case WSRequestCriteria::JOB_ANY_COUNTRY: | |
211 | $cond->addChild( | |
212 | new UFC_AddressField($value, | |
213 | UFC_AddressField::FIELD_COUNTRY, | |
214 | UFC_Address::TYPE_PRO, | |
215 | UFC_Address::FLAG_ANY)); | |
216 | break; | |
217 | case WSRequestCriteria::JOB_CURRENT_CITY: | |
218 | $cond->addChild( | |
219 | new UFC_AddressField($value, | |
220 | UFC_AddressField::FIELD_LOCALITY, | |
221 | UFC_Address::TYPE_PRO, | |
222 | UFC_Address::FLAG_ANY)); | |
223 | break; | |
224 | case WSRequestCriteria::JOB_ANY_COMPANY: | |
225 | case WSRequestCriteria::JOB_CURRENT_COMPANY: | |
226 | $cond->addChild( | |
227 | new UFC_Job_Company(UFC_Job_Company::JOBNAME, | |
228 | $value)); | |
229 | break; | |
230 | case WSRequestCriteria::JOB_ANY_SECTOR: | |
231 | case WSRequestCriteria::JOB_CURRENT_SECTOR: | |
232 | case WSRequestCriteria::JOB_CURRENT_TITLE: | |
233 | $cond->addChild( | |
234 | new UFC_Job_Terms(DirEnum::getIds(DirEnum::JOBTERMS, $value))); | |
235 | break; | |
236 | ||
237 | // LIST fields | |
238 | case WSRequestCriteria::HOBBIES: | |
239 | $subcond = new PFC_Or(); | |
240 | foreach ($value as $val) { | |
241 | $subcond->addChild(new UFC_Comment($value)); | |
242 | } | |
243 | $cond->addChild($subcond); | |
244 | break; | |
245 | case WSRequestCriteria::JOB_COMPETENCIES: | |
246 | case WSRequestCriteria::JOB_RESUME: | |
247 | case WSRequestCriteria::PROFESSIONAL_PROJECT: | |
248 | $subcond = new PFC_Or(); | |
249 | foreach ($value as $val) { | |
250 | $subcond->addChild( | |
251 | new UFC_Job_Description($value, UserFilter::JOB_USERDEFINED)); | |
252 | } | |
253 | $cond->addChild($subcond); | |
254 | break; | |
255 | case WSRequestCriteria::NOT_UID: | |
256 | $cond->addChild( | |
257 | new PFC_Not( | |
258 | new UFC_PartnerSharingID($this->partner->id, $value))); | |
259 | break; | |
260 | default: | |
261 | break; | |
262 | } | |
263 | } | |
264 | ||
265 | return $cond; | |
266 | } | |
267 | ||
268 | /** Input validation | |
269 | */ | |
270 | const ERROR_MISSING_FIELDS = 'missing_fields'; | |
271 | const ERROR_MISSING_CRITERIA = 'missing_criteria'; | |
272 | const ERROR_MALFORMED_AMOUNT = 'malformed_amount'; | |
273 | const ERROR_MALFORMED_ORDER = 'malformed_order'; | |
274 | ||
275 | public static $ERROR_MESSAGES = array( | |
276 | self::ERROR_MISSING_FIELDS => "The 'fields' field is mandatory.", | |
277 | self::ERROR_MISSING_CRITERIA => "The 'criteria' field is mandatory.", | |
278 | self::ERROR_MALFORMED_AMOUNT => "The 'amount' value is invalid (expected an int)", | |
279 | self::ERROR_MALFORMED_ORDER => "The 'order' value is invalid (expected an array)", | |
280 | ); | |
281 | ||
282 | /** Static method performing all input validation on the payload. | |
283 | * @param PlDict $payload The payload to validate | |
284 | * @return array Errors discovered when validating input | |
285 | */ | |
286 | public static function validatePayload(PlDict $payload) | |
287 | { | |
288 | $errors = array(); | |
289 | if (!$payload->has('fields')) { | |
290 | $errors[] = self::ERROR_MISSING_FIELDS; | |
291 | } | |
292 | if (!$payload->has('criteria')) { | |
293 | $errors[] = self::ERROR_MISSING_CRITERIA; | |
294 | } | |
295 | ||
296 | if ($payload->has('amount') && $payload->i('amount', -1) < 0) { | |
297 | $errors[] = self::ERROR_MALFORMED_AMOUNT; | |
298 | } | |
299 | ||
300 | if (!is_array($payload->v('order', array()))) { | |
301 | $errors[] = self::ERROR_MALFORMED_ORDER; | |
302 | } | |
303 | ||
304 | return $errors; | |
305 | } | |
306 | } | |
307 | ||
308 | // {{{ WSRequestEntry | |
309 | /** Performs field retrieval for a profile. | |
310 | */ | |
311 | class WSRequestEntry | |
312 | { | |
313 | private $profile = null; | |
314 | private $partner = null; | |
315 | private $settings = null; | |
316 | ||
317 | public function __construct($partner, $profile) | |
318 | { | |
319 | $this->partner = $partner; | |
320 | $this->profile = $profile; | |
321 | $this->settings = $this->profile->getPartnerSettings($this->partner->id); | |
322 | } | |
323 | ||
324 | public function isVisible($level) | |
325 | { | |
326 | return $this->settings->sharing_visibility->isVisible($level); | |
327 | } | |
328 | ||
329 | public function getFields($fields) | |
330 | { | |
331 | $data = array(); | |
332 | foreach ($fields as $field) | |
333 | { | |
334 | $val = $this->getFieldValue($field); | |
335 | if ($val !== null) { | |
336 | $data[$field] = $val; | |
337 | } | |
338 | } | |
339 | $data['uid'] = $this->settings->exposed_uid; | |
340 | return $data; | |
341 | } | |
342 | ||
343 | protected function getFieldValue($field) | |
344 | { | |
345 | // Shortcut | |
346 | $p = $this->profile; | |
347 | ||
348 | switch ($field) { | |
349 | case WSRequestFields::UID: | |
350 | // UID is always included | |
351 | return; | |
352 | case WSRequestFields::BIRTHDATE: | |
353 | case WSRequestFields::FAMILY_POSITION: | |
354 | case WSRequestFields::HONORARY_TITLES: | |
355 | case WSRequestFields::LANGS: | |
356 | case WSRequestFields::JOB_COMPETENCIES: | |
357 | case WSRequestFields::RESUME: | |
358 | case WSRequestFields::PROFESSIONAL_PROJECT: | |
359 | case WSRequestFields::HOBBIES: | |
360 | // Ignored fields | |
361 | return; | |
362 | ||
363 | // Public fields | |
364 | case WSRequestFields::FIRSTNAME: | |
365 | return $p->firstName(); | |
366 | case WSRequestFields::LASTNAME: | |
367 | return $p->lastName(); | |
368 | case WSRequestFields::GENDER: | |
369 | if ($p->isFemale()) { | |
370 | return WSRequestFields::GENDER_WOMAN; | |
371 | } else { | |
372 | return WSRequestFields::GENDER_MAN; | |
373 | } | |
374 | case WSRequestFields::SCHOOL: | |
375 | return WSRequestCriteria::SCHOOL_X; | |
376 | case WSRequestFields::DIPLOMA: | |
377 | $edu = $p->getEducations(Profile::EDUCATION_MAIN); | |
378 | if (count($edu)) { | |
379 | return WSRequestFields::profileDegreeToWSDiploma( | |
380 | array_pop($edu)->degree); | |
381 | } else { | |
382 | return null; | |
383 | } | |
384 | case WSRequestFields::DIPLOMA_FIELD: | |
385 | $edu = $p->getEducations(Profile::EDUCATION_MAIN); | |
386 | if (count($edu)) { | |
387 | return array_pop($edu)->field; | |
388 | } else { | |
389 | return null; | |
390 | } | |
391 | case WSRequestFields::PROMOTION: | |
392 | return $p->yearpromo(); | |
393 | case WSRequestFields::ALT_DIPLOMAS: | |
394 | $diplomas = array(); | |
395 | foreach ($p->getExtraEducations() as $edu) { | |
396 | $diplomas[] = WSRequestFields::profileDegreeToWSDiploma( | |
397 | $edu->degree); | |
398 | } | |
399 | return $diplomas; | |
400 | ||
401 | // Other generic profile fields | |
402 | case WSRequestFields::EMAIL: | |
403 | if ($this->settings->sharing_visibility->isVisible(Visibility::EXPORT_PRIVATE)) { | |
404 | // If sharing "all" data, share best email. | |
405 | return $p->displayEmail(); | |
406 | } elseif ($this->settings->sharing_visibility->isVisible(Visibility::EXPORT_AX)) { | |
407 | // If sharing "AX" level, share "AX" email. | |
408 | return $p->email_directory; | |
409 | } else { | |
410 | // Otherwise, don't share. | |
411 | return null; | |
412 | } | |
413 | case WSRequestFields::MOBILE_PHONE: | |
db492b02 | 414 | $phones = $p->getPhones(Profile::PHONE_TYPE_MOBILE | Profile::PHONE_LINK_PROFILE); |
148af7a9 RB |
415 | if (count($phones)) { |
416 | $phone = array_pop($phones); | |
417 | if ($this->isVisible($phone->pub)) { | |
418 | return $phone->display; | |
419 | } | |
420 | } | |
421 | return null; | |
422 | case WSRequestFields::PIC_SMALL: | |
423 | case WSRequestFields::PIC_MEDIUM: | |
424 | case WSRequestFields::PIC_LARGE: | |
425 | if ($this->isVisible($p->photo_pub)) { | |
426 | $token = sha1(uniqid(rand(), true)); | |
427 | XDB::execute('DELETE FROM profile_photo_tokens | |
428 | WHERE pid = {?}', $p->pid); | |
429 | XDB::execute('INSERT INTO profile_photo_tokens | |
430 | SET pid = {?}, token = {?}, | |
db492b02 | 431 | expires = ADDTIME(NOW(), \'0:05:00\')', |
148af7a9 RB |
432 | $p->pid, $token); |
433 | $size_mappings = array( | |
434 | WSRequestFields::PIC_SMALL => 'small', | |
435 | WSRequestFields::PIC_MEDIUM => 'medium', | |
436 | WSRequestFields::PIC_LARGE => 'large', | |
437 | ); | |
438 | $size = $size_mappings[$field]; | |
f0f8c375 | 439 | return pl_url("api/1/sharing/picture/$size/$token"); |
148af7a9 RB |
440 | } else { |
441 | return null; | |
442 | } | |
443 | ||
444 | // Address related | |
445 | case WSRequestFields::CURRENT_CITY: | |
446 | $address = $p->getMainAddress(); | |
447 | if ($address != null && $this->isVisible($address->pub)) { | |
db492b02 | 448 | return $address->locality; |
148af7a9 RB |
449 | } else { |
450 | return null; | |
451 | } | |
452 | case WSRequestFields::CURRENT_COUNTRY: | |
453 | $address = $p->getMainAddress(); | |
454 | if ($address != null && $this->isVisible($address->pub)) { | |
db492b02 | 455 | return $address->country; |
148af7a9 RB |
456 | } else { |
457 | return null; | |
458 | } | |
459 | case WSRequestFields::ADDRESS: | |
460 | $address = $p->getMainAddress(); | |
461 | if ($address != null && $this->isVisible($address->pub)) { | |
462 | return $this->addressToResponse($address); | |
463 | } else { | |
464 | return null; | |
465 | } | |
466 | ||
467 | // Job related | |
468 | case WSRequestFields::CURRENT_COMPANY: | |
469 | $job = $p->getMainJob(); | |
470 | if ($job != null && $this->isVisible($job->pub)) { | |
471 | return $job->company->name; | |
472 | } else { | |
473 | return null; | |
474 | } | |
475 | case WSRequestFields::JOB: | |
476 | $jobs = $p->getJobs(Profile::JOBS_ALL); | |
477 | $res = array(); | |
478 | foreach ($jobs as $job) { | |
479 | if ($this->isVisible($job->pub)) { | |
db492b02 | 480 | $res[] = $this->jobToResponse($job); |
148af7a9 RB |
481 | } |
482 | } | |
db492b02 | 483 | return $res; |
148af7a9 RB |
484 | case WSRequestFields::MINI_RESUME: |
485 | if ($this->isVisible(Visibility::EXPORT_PRIVATE)) { | |
486 | return $p->cv; | |
487 | } else { | |
488 | return null; | |
489 | } | |
490 | ||
491 | // Community | |
492 | case WSRequestFields::GROUPS: | |
493 | $groups = array(); | |
494 | if ($this->isVisible(Visibility::EXPORT_PRIVATE)) { | |
495 | foreach ($p->owner()->groups(true, true) as $group) { | |
496 | $groups[] = array('name' => $group['nom']); | |
497 | } | |
498 | } | |
499 | return $groups; | |
500 | case WSRequestFields::FRIENDS: | |
501 | $friends = array(); | |
502 | if ($this->isVisible(Visibility::EXPORT_PRIVATE)) { | |
db492b02 RB |
503 | $contacts = $p->owner()->iterContacts(); |
504 | if ($contacts == null) { | |
505 | return $friends; | |
506 | } | |
507 | ||
508 | while ($contact = $contacts->next()) { | |
509 | $cps = $contact->getPartnerSettings($this->partner->id); | |
148af7a9 RB |
510 | if ($cps->sharing_visibility->isVisible(Visibility::EXPORT_PRIVATE)) { |
511 | $friends[] = $cps->exposed_uid; | |
512 | } | |
513 | } | |
514 | } | |
515 | return $friends; | |
516 | case WSRequestFields::NETWORKING: | |
517 | $networks = array(); | |
518 | if ($this->isVisible(Visibility::EXPORT_PRIVATE)) { | |
519 | foreach ($p->getNetworking(Profile::NETWORKING_ALL) as $nw) { | |
520 | $networks[] = array( | |
521 | 'network' => $nw['name'], | |
522 | 'login' => $nw['address'], | |
523 | ); | |
524 | } | |
525 | } | |
526 | return $networks; | |
527 | ||
528 | default: | |
529 | return null; | |
530 | } | |
531 | } | |
532 | ||
533 | protected function jobToResponse($job) | |
534 | { | |
f0f8c375 RB |
535 | $data = array( |
536 | 'company' => $job->company->name, | |
537 | 'title' => $job->description, | |
538 | 'sector' => array_pop($job->terms), | |
539 | 'entry' => null, | |
540 | 'left' => null, | |
541 | ); | |
148af7a9 RB |
542 | foreach($job->phones() as $phone) { |
543 | if ($this->isVisible($phone->pub)) { | |
544 | $data['phone'] = $phone->display; | |
545 | break; | |
546 | } | |
547 | } | |
548 | if ($job->address && $this->isVisible($job->address->pub)) { | |
549 | $data['address'] = $this->addressToResponse($job->address); | |
550 | } | |
551 | return $data; | |
552 | } | |
553 | ||
554 | protected function addressToResponse($address) | |
555 | { | |
f0f8c375 RB |
556 | $data = array( |
557 | 'street' => $address->postalText, | |
558 | 'zipcode' => $address->postalCode, | |
559 | 'city' => $address->locality, | |
560 | 'country' => $address->country, | |
561 | 'latitude' => $address->latitude, | |
562 | 'longitude' => $address->longitude, | |
563 | ); | |
148af7a9 RB |
564 | return $data; |
565 | } | |
566 | } | |
567 | // }}} | |
568 | // {{{ WSRequestCriteria | |
569 | /** Holds all enums and related mappings for criterias. | |
570 | */ | |
571 | class WSRequestCriteria | |
572 | { | |
573 | const FIRSTNAME = 'firstname'; | |
574 | const LASTNAME = 'lastname'; | |
575 | const SCHOOL = 'school'; | |
576 | const DIPLOMA = 'diploma'; | |
577 | const DIPLOMA_FIELD = 'diploma_field'; | |
578 | const PROMOTION = 'promotion'; | |
579 | const HOBBIES = 'hobbies'; | |
580 | const ZIPCODE = 'zipcode'; | |
581 | const CITY = 'city'; | |
582 | const COUNTRY = 'country'; | |
583 | const JOB_CURRENT_SECTOR = 'job_current_sector'; | |
584 | const JOB_CURRENT_TITLE = 'job_current_title'; | |
585 | const JOB_CURRENT_COMPANY = 'job_current_company'; | |
586 | const JOB_CURRENT_CITY = 'job_current_city'; | |
587 | const JOB_CURRENT_COUNTRY = 'job_current_country'; | |
588 | const JOB_ANY_SECTOR = 'job_any_sector'; | |
589 | const JOB_ANY_COMPANY = 'job_any_company'; | |
590 | const JOB_ANY_COUNTRY = 'job_any_country'; | |
591 | const JOB_RESUME = 'job_resume'; | |
592 | const JOB_COMPETENCIES = 'job_competencies'; | |
593 | const PROFESSIONAL_PROJECT = 'professional_project'; | |
594 | const ALT_DIPLOMA = 'alt_diploma'; | |
595 | const NOT_UID = 'not_uid'; | |
596 | ||
f0f8c375 | 597 | public static $choices_simple = array( |
148af7a9 RB |
598 | self::FIRSTNAME, |
599 | self::LASTNAME, | |
600 | self::PROMOTION, | |
601 | self::ALT_DIPLOMA, | |
602 | self::DIPLOMA_FIELD, | |
603 | self::CITY, | |
604 | self::ZIPCODE, | |
605 | self::COUNTRY, | |
606 | self::JOB_ANY_COUNTRY, | |
607 | self::JOB_CURRENT_CITY, | |
608 | self::JOB_CURRENT_COUNTRY, | |
609 | self::JOB_ANY_COMPANY, | |
610 | self::JOB_ANY_SECTOR, | |
611 | self::JOB_CURRENT_COMPANY, | |
612 | self::JOB_CURRENT_SECTOR, | |
613 | self::JOB_CURRENT_TITLE, | |
614 | ); | |
615 | ||
616 | const SCHOOL_AGRO = 'agro'; | |
617 | const SCHOOL_ENSAE = 'ensae'; | |
618 | const SCHOOL_ENSCP = 'enscp'; | |
619 | const SCHOOL_ENST = 'enst'; | |
620 | const SCHOOL_ENSTA = 'ensta'; | |
621 | const SCHOOL_ESPCI = 'espci'; | |
622 | const SCHOOL_GADZ = 'gadz'; | |
623 | const SCHOOL_HEC = 'hec'; | |
624 | const SCHOOL_MINES = 'ensmp'; | |
625 | const SCHOOL_PONTS = 'enpc'; | |
626 | const SCHOOL_SUPELEC = 'supelec'; | |
627 | const SCHOOL_SUPOP = 'supop'; | |
628 | const SCHOOL_X = 'X'; | |
629 | ||
630 | const DIPLOMA_ING = 'ING'; | |
631 | const DIPLOMA_MASTER = 'MASTER'; | |
632 | const DIPLOMA_PHD = 'PHD'; | |
633 | ||
f0f8c375 | 634 | public static $choices_enum = array( |
148af7a9 RB |
635 | self::SCHOOL => array( |
636 | self::SCHOOL_AGRO => false, | |
637 | self::SCHOOL_ENSAE => false, | |
638 | self::SCHOOL_ENSCP => false, | |
639 | self::SCHOOL_ENST => false, | |
640 | self::SCHOOL_ENSTA => false, | |
641 | self::SCHOOL_ESPCI => false, | |
642 | self::SCHOOL_GADZ => false, | |
643 | self::SCHOOL_HEC => false, | |
644 | self::SCHOOL_MINES => false, | |
645 | self::SCHOOL_PONTS => false, | |
646 | self::SCHOOL_SUPELEC => false, | |
647 | self::SCHOOL_SUPOP => false, | |
648 | self::SCHOOL_X => true, | |
649 | ), | |
650 | self::DIPLOMA => array( | |
651 | self::DIPLOMA_ING => UserFilter::GRADE_ING, | |
652 | self::DIPLOMA_MASTER => UserFilter::GRADE_MST, | |
653 | self::DIPLOMA_PHD => UserFilter::GRADE_PHD, | |
654 | ), | |
655 | ); | |
656 | ||
f0f8c375 | 657 | public static $choices_list = array( |
148af7a9 RB |
658 | self::HOBBIES, |
659 | self::JOB_COMPETENCIES, | |
660 | self::JOB_RESUME, | |
661 | self::NOT_UID, | |
662 | self::PROFESSIONAL_PROJECT, | |
663 | ); | |
664 | } | |
665 | ||
666 | // }}} | |
667 | // {{{ WSRequestFields | |
668 | /** Holds all enums for fields. | |
669 | */ | |
670 | class WSRequestFields | |
671 | { | |
672 | const UID = 'uid'; | |
673 | const FIRSTNAME = 'firstname'; | |
674 | const LASTNAME = 'lastname'; | |
675 | const BIRTHDATE = 'birthdate'; | |
676 | const GENDER = 'gender'; | |
677 | const FAMILY_POSITION = 'family_position'; | |
678 | const SCHOOL = 'school'; | |
679 | const DIPLOMA = 'diploma'; | |
680 | const DIPLOMA_FIELD = 'diploma_field'; | |
681 | const PROMOTION = 'promotion'; | |
682 | const ALT_DIPLOMAS = 'alt_diplomas'; | |
683 | const CURRENT_COMPANY = 'current_company'; | |
684 | const CURRENT_CITY = 'current_city'; | |
685 | const CURRENT_COUNTRY = 'current_country'; | |
686 | const MOBILE_PHONE = 'mobile_phone'; | |
687 | const HONORARY_TITLES = 'honorary_titles'; | |
688 | const EMAIL = 'email'; | |
689 | const PIC_SMALL = 'pic_small'; | |
690 | const PIC_MEDIUM = 'pic_medium'; | |
691 | const PIC_LARGE = 'pic_large'; | |
692 | const ADDRESS = 'address'; | |
693 | const JOB = 'job'; | |
694 | const GROUPS = 'groups'; | |
695 | const LANGS = 'langs'; | |
696 | const JOB_COMPETENCIES = 'job_competencies'; | |
697 | const MINI_RESUME = 'mini_resume'; | |
698 | const RESUME = 'resume'; | |
699 | const PROFESSIONAL_PROJECT = 'professional_project'; | |
700 | const HOBBIES = 'hobbies'; | |
701 | const FRIENDS = 'friends'; | |
702 | const NETWORKING = 'networking'; | |
703 | ||
704 | const GENDER_MAN = 'man'; | |
705 | const GENDER_WOMAN = 'woman'; | |
706 | ||
db492b02 RB |
707 | const DIPLOMA_ING = 'engineer'; |
708 | const DIPLOMA_MASTER = 'master'; | |
709 | const DIPLOMA_PHD = 'phd'; | |
710 | ||
f0f8c375 | 711 | public static $choices = array( |
148af7a9 RB |
712 | self::UID, |
713 | self::FIRSTNAME, | |
714 | self::LASTNAME, | |
715 | self::BIRTHDATE, | |
716 | self::GENDER, | |
717 | self::FAMILY_POSITION, | |
718 | self::SCHOOL, | |
719 | self::DIPLOMA, | |
720 | self::DIPLOMA_FIELD, | |
721 | self::PROMOTION, | |
722 | self::ALT_DIPLOMAS, | |
723 | self::CURRENT_COMPANY, | |
724 | self::CURRENT_CITY, | |
725 | self::CURRENT_COUNTRY, | |
726 | self::MOBILE_PHONE, | |
727 | self::HONORARY_TITLES, | |
728 | self::EMAIL, | |
729 | self::PIC_SMALL, | |
730 | self::PIC_MEDIUM, | |
731 | self::PIC_LARGE, | |
732 | self::ADDRESS, | |
733 | self::JOB, | |
734 | self::GROUPS, | |
735 | self::LANGS, | |
736 | self::JOB_COMPETENCIES, | |
737 | self::MINI_RESUME, | |
738 | self::RESUME, | |
739 | self::PROFESSIONAL_PROJECT, | |
740 | self::HOBBIES, | |
741 | self::FRIENDS, | |
742 | self::NETWORKING, | |
743 | ); | |
744 | ||
745 | public static function profileDegreeToWSDiploma($degree) | |
746 | { | |
747 | switch ($degree) { | |
f0f8c375 RB |
748 | case Profile::DEGREE_X: |
749 | return self::DIPLOMA_ING; | |
750 | case Profile::DEGREE_M: | |
751 | return self::DIPLOMA_MASTER; | |
752 | case Profile::DEGREE_D: | |
753 | return self::DIPLOMA_PHD; | |
754 | default: | |
755 | return null; | |
148af7a9 RB |
756 | } |
757 | } | |
758 | ||
759 | } | |
760 | // }}} | |
761 | ||
448c8cdc | 762 | // vim:set et sw=4 sts=4 sws=4 foldmethod=marker fenc=utf-8: |
148af7a9 | 763 | ?> |