Hide 'always-private' fields when profile is edited by an AX secretary.
[platal.git] / modules / profile / jobs.inc.php
CommitLineData
3950bc21
FB
1<?php
2/***************************************************************************
9f5bd98e 3 * Copyright (C) 2003-2010 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
12bcf04b 22class ProfileSettingJob extends ProfileSettingGeocoding
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 {
12bcf04b 33 $this->pub = new ProfileSettingPub();
541e8d03
SJ
34 $this->email
35 = $this->email_new
12bcf04b
RB
36 = new ProfileSettingEmail();
37 $this->url = new ProfileSettingWeb();
38 $this->bool = new ProfileSettingBool();
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
afaa2cc7
SJ
45 public function emptyJob()
46 {
47 return array(
48 'id' => '0',
49 'jobid' => '',
50 'pub' => 'private',
51 'name' => '',
52 'hq_acronym' => '',
53 'hq_url' => '',
54 'hq_email' => '',
55 'hq_address' => array(
56 'text' => '',
57 'accuracy' => '',
58 'postalText' => '',
59 'postalCode' => '',
60 'administrativeAreaId' => '',
61 'subAdministrativeAreaId' => '',
62 'localityId' => '',
63 'countryId' => '',
64 'latitude' => '',
65 'longitude' => '',
66 'north' => '',
67 'south' => '',
68 'east' => '',
69 'west' => '',
70 'cedex' => '',
71 'updateTime' => '',
72 'changed' => '0',
73 'removed' => '0',
74 ),
0b6c8b36 75 'hq_fixed' => '',
afaa2cc7
SJ
76 'hq_fax' => '',
77 'subSubSectorName' => null,
78 'sector' => '0',
79 'subSector' => '0',
80 'subSubSector' => '0',
81 'description' => '',
82 'w_url' => '',
83 'w_address' => array(
84 'pub' => 'private',
85 'text' => '',
86 'accuracy' => '',
87 'postalText' => '',
88 'postalCode' => '',
89 'administrativeAreaId' => '',
90 'subAdministrativeAreaId' => '',
91 'localityId' => '',
92 'countryId' => '',
93 'latitude' => '',
94 'longitude' => '',
95 'north' => '',
96 'south' => '',
97 'east' => '',
98 'west' => '',
99 'cedex' => '',
100 'updateTime' => '',
101 'changed' => '0',
102 'removed' => '0',
103 ),
104 'w_email' => '',
105 'w_email_pub' => 'private',
106 'w_email_new' => '',
107 'w_phone' => array(0 => array(
108 'type' => 'fixed',
109 'tel' => '',
110 'pub' => 'private',
111 'comment' => '',
3ac45f10
PC
112 ),
113 'terms' => array()),
afaa2cc7
SJ
114 );
115 }
116
b814a8b8 117 private function cleanJob(ProfilePage &$page, $jobid, array &$job, &$success)
37d44b3b
FB
118 {
119 $success = true;
541e8d03
SJ
120 if ($job['w_email'] == "new@example.org") {
121 $job['w_email'] = $job['w_email_new'];
122 }
37d44b3b
FB
123 foreach ($this->checks as $obj=>&$fields) {
124 $chk =& $this->$obj;
125 foreach ($fields as $field) {
126 $job[$field] = $chk->value($page, $field, $job[$field], $s);
127 if (!$s) {
128 $success = false;
129 $job[$field . '_error'] = true;
130 }
131 }
132 }
541e8d03 133 if (!$job['subSubSectorName']) {
c7139c07
SJ
134 $res = XDB::query("SELECT name
135 FROM profile_job_subsubsector_enum
136 WHERE id = {?}",
541e8d03
SJ
137 $job['subSubSector']);
138 $job['subSubSectorName'] = $res->fetchOneCell();
c7139c07
SJ
139 } else {
140 $res = XDB::query("SELECT sectorid, subsectorid, id
141 FROM profile_job_subsubsector_enum
142 WHERE name = {?}",
541e8d03 143 $job['subSubSectorName']);
c7139c07
SJ
144 if ($res->numRows() != 1) {
145 $success = false;
146 $job['sector_error'] = true;
147 } else {
541e8d03 148 list($job['sector'], $job['subSector'], $job['subSubSector']) = $res->fetchOneRow();
c7139c07
SJ
149 }
150 }
3ac45f10
PC
151 if (count($job['terms'])) {
152 $termsid = array();
153 foreach ($job['terms'] as $term) {
154 if (!$term['full_name']) {
155 $termsid[] = $term['jtid'];
156 }
157 }
158 if (count($termsid)) {
159 $res = XDB::query("SELECT jtid, full_name
160 FROM profile_job_term_enum
161 WHERE jtid IN {?}",
162 $termsid);
163 $term_id_to_name = $res->fetchAllAssoc('jtid', false);
164 foreach ($job['terms'] as &$term) {
165 if (!$term['full_name']) {
166 $term['full_name'] = $term_id_to_name[$term['jtid']];
167 }
168 }
169 }
170 }
b814a8b8 171 if ($job['name']) {
c7139c07
SJ
172 $res = XDB::query("SELECT id
173 FROM profile_job_enum
174 WHERE name = {?}",
175 $job['name']);
176 if ($res->numRows() != 1) {
4d7d27fc
SJ
177 $this->geocodeAddress($job['hq_address'], $s);
178 if (!$s) {
179 $gmapsGeocoder = new GMapsGeocoder();
180 $job['hq_address'] = $gmapsGeocoder->stripGeocodingFromAddress($job['hq_address']);
181 }
024ec1e5 182 $req = new EntrReq(S::user(), $page->profile, $jobid, $job['name'], $job['hq_acronym'], $job['hq_url'],
4d7d27fc 183 $job['hq_email'], $job['hq_fixed'], $job['hq_fax'], $job['hq_address']);
b814a8b8
SJ
184 $req->submit();
185 $job['jobid'] = null;
858a5b42 186 sleep(1);
c7139c07
SJ
187 } else {
188 $job['jobid'] = $res->fetchOneCell();
189 }
190 }
541e8d03 191 $job['w_address']['pub'] = $this->pub->value($page, 'address_pub', $job['w_address']['pub'], $s);
0b6c8b36 192 $job['w_phone'] = Phone::formatFormArray($job['w_phone'], $s);
afaa2cc7 193
37d44b3b
FB
194 unset($job['removed']);
195 unset($job['new']);
37d44b3b
FB
196 }
197
198 public function value(ProfilePage &$page, $field, $value, &$success)
199 {
a6483c12 200 require_once 'validations.inc.php';
024ec1e5 201 $entreprise = ProfileValidate::get_typed_requests($page->pid(), 'entreprise');
b814a8b8
SJ
202 $entr_val = 0;
203
37d44b3b
FB
204 $init = false;
205 if (is_null($value)) {
206 $value = $page->values['jobs'];
207 $init = true;
208 }
209 $success = true;
a6483c12 210 foreach ($value as $key => &$job) {
b814a8b8 211 $job['name'] = trim($job['name']);
a6483c12 212 if ($job['name'] == '' && $entreprise) {
b814a8b8 213 $job['tmp_name'] = $entreprise[$entr_val]->name;
a6483c12
SJ
214 ++$entr_val;
215 } else if ($job['name'] == '') {
ba6ee875
SJ
216 if ($job['subSubSectorName'] == '' && $job['description'] == '' && $job['w_url'] == ''
217 && $job['w_address']['text'] == '' && $job['w_email'] == ''
218 && count($job['w_phone']) == 1 && $job['w_phone']['tel'] == '') {
219 array_splice($value, $key, 1);
220 continue;
221 }
222
d1d01361
SJ
223 if (!$init) {
224 $job['name_error'] = true;
225 $success = false;
226 }
b814a8b8 227 }
b94719c1 228
541e8d03 229 if (isset($job['removed']) && $job['removed']) {
b94719c1
SJ
230 if ($job['name'] == '' && $entreprise) {
231 $entreprise[$entr_val - 1]->clean();
232 }
ed01acac 233 array_splice($value, $key, 1);
37d44b3b 234 }
8768e5af
SJ
235 foreach (array('sectorid', 'subsectorid', 'subsubsectorid') as $key) {
236 if ($job[$key] == 0) {
237 $job[$key] = null;
238 }
b139d0e6 239 }
37d44b3b 240 }
a6483c12 241 foreach ($value as $key => &$job) {
37d44b3b 242 $ls = true;
541e8d03 243 $this->geocodeAddress($job['w_address'], $s);
37d44b3b 244 $ls = ($ls && $s);
bde2be3b 245 $this->cleanJob($page, $key, $job, $s);
37d44b3b
FB
246 $ls = ($ls && $s);
247 if (!$init) {
248 $success = ($success && $ls);
249 }
250 }
251 return $value;
252 }
253
254 public function save(ProfilePage &$page, $field, $value)
255 {
0b6c8b36 256 // TODO: use address class to update profile_job_enum once it is done.
c7139c07 257 XDB::execute("DELETE FROM profile_job
ce0b2c6f 258 WHERE pid = {?}",
a6483c12 259 $page->pid());
541e8d03
SJ
260 XDB::execute("DELETE FROM profile_addresses
261 WHERE pid = {?} AND type = 'job'",
a6483c12 262 $page->pid());
0b6c8b36 263 Phone::deletePhones($page->pid(), Phone::LINK_JOB);
3ac45f10 264 $terms_values = array();
a6483c12 265 foreach ($value as $id => &$job) {
afaa2cc7
SJ
266 if (isset($job['name']) && $job['name']) {
267 if (isset($job['jobid']) && $job['jobid']) {
ce0b2c6f 268 XDB::execute("INSERT INTO profile_job (pid, id, description, sectorid, subsectorid,
afaa2cc7
SJ
269 subsubsectorid, email, url, pub, email_pub, jobid)
270 VALUES ({?}, {?}, {?}, {?}, {?}, {?}, {?}, {?}, {?}, {?}, {?})",
a6483c12 271 $page->pid(), $id, $job['description'], $job['sector'], $job['subSector'],
afaa2cc7
SJ
272 $job['subSubSector'], $job['w_email'], $job['w_url'], $job['pub'], $job['w_email_pub'], $job['jobid']);
273 } else {
ce0b2c6f 274 XDB::execute("INSERT INTO profile_job (pid, id, description, sectorid, subsectorid,
afaa2cc7
SJ
275 subsubsectorid, email, url, pub, email_pub)
276 VALUES ({?}, {?}, {?}, {?}, {?}, {?}, {?}, {?}, {?}, {?})",
a6483c12 277 $page->pid(), $id, $job['description'], $job['sector'], $job['subSector'],
afaa2cc7
SJ
278 $job['subSubSector'], $job['w_email'], $job['w_url'], $job['pub'], $job['w_email_pub']);
279 }
12bcf04b 280 $address = new ProfileSettingAddress();
a6483c12 281 $address->saveAddress($page->pid(), $id, $job['w_address'], 'job');
0b6c8b36 282 Phone::savePhones($job['w_phone'], $page->pid(), Phone::LINK_JOB, $id);
3ac45f10
PC
283 if (isset($job['terms'])) {
284 foreach ($job['terms'] as $term) {
285 $terms_values[] = '('.XDB::escape($page->pid()).', '. XDB::escape($id).', '.XDB::escape($term['jtid']).', "original")';
286 }
287 }
b814a8b8 288 }
37d44b3b 289 }
3ac45f10
PC
290 if (count($terms_values) > 0) {
291 XDB::execute('INSERT INTO profile_job_term (pid, jid, jtid, computed)
292 VALUES '.implode(', ', $terms_values));
293 }
37d44b3b 294 }
a0fce0c6
SJ
295
296 public function getText($value) {
297 $jobs = array();
298 foreach ($value as $id => $job) {
299 $address = new ProfileSettingAddress();
0b6c8b36 300 $phones = Phone::formArrayToString($job['w_phone']);
a0fce0c6
SJ
301 $jobs[] = 'Entreprise : ' . $job['name'] . ', secteur : ' . $job['subSubSectorName']
302 . ', description : ' . $job['description'] . ', web : ' . $job['w_url']
303 . ', email : ' . $job['w_email']
0b6c8b36 304 . ($phones ? ', ' . $phones : '') . ', ' . $address->getText($job['w_address']);
a0fce0c6
SJ
305 }
306 return implode(' ; ' , $jobs);
307 }
37d44b3b
FB
308}
309
603aeb6c
SJ
310class ProfileSettingCorps implements ProfileSetting
311{
312 public function value(ProfilePage &$page, $field, $value, &$success)
313 {
314 $success = true;
315 if (is_null($value)) {
316 $res = XDB::query("SELECT original_corpsid AS original, current_corpsid AS current,
317 rankid AS rank, corps_pub AS pub
318 FROM profile_corps
319 WHERE pid = {?}",
320 $page->pid());
321 return $res->fetchOneAssoc();
322 }
323 return $value;
324 }
325
326 public function save(ProfilePage &$page, $field, $value)
327 {
328 XDB::execute('REPLACE INTO profile_corps (original_corpsid, current_corpsid, rankid, corps_pub, pid)
329 VALUES ({?}, {?}, {?}, {?}, {?})',
330 $value['original'], $value['current'], $value['rank'], $value['pub'], $page->pid());
331 }
332
333 public function getText($value)
334 {
335 $corpsList = DirEnum::getOptions(DirEnum::CORPS);
336 $rankList = DirEnum::getOptions(DirEnum::CORPSRANKS);
337 return 'Corps actuel : ' . $corpsList[$value['current']] . ' , rang : ' . $corpsList[$value['rank']]
338 . ' , corps d\'origine : ' . $corpsList[$value['original']] . ' , affichage : ' . $value['pub'];
339 }
340}
341
12bcf04b 342class ProfileSettingJobs extends ProfilePage
3950bc21
FB
343{
344 protected $pg_template = 'profile/jobs.tpl';
345
346 public function __construct(PlWizard &$wiz)
347 {
348 parent::__construct($wiz);
b539d596
FB
349 if (S::user()->checkPerms(User::PERM_DIRECTORY_PRIVATE)) {
350 $this->settings['cv'] = null;
351 }
603aeb6c 352 $this->settings['corps'] = new ProfileSettingCorps();
12bcf04b 353 $this->settings['jobs'] = new ProfileSettingJob();
72e96bc0 354 $this->watched = array('cv' => true, 'jobs' => true, 'corps' => true);
37d44b3b
FB
355 }
356
7c2e0f0d 357 protected function _fetchData()
37d44b3b 358 {
b539d596
FB
359 if (S::user()->checkPerms(User::PERM_DIRECTORY_PRIVATE)) {
360 // Checkout the CV
361 $res = XDB::query("SELECT cv
362 FROM profiles
363 WHERE pid = {?}",
364 $this->pid());
365 $this->values['cv'] = $res->fetchOneCell();
366 }
37d44b3b
FB
367
368 // Build the jobs tree
563f86f5 369 $res = XDB::iterRow("SELECT j.id, j.jobid, je.name, j.sectorid, j.subsectorid, j.subsubsectorid,
541e8d03
SJ
370 s.name, j.description, j.email, j.email_pub, j.url, j.pub,
371 je.acronym, je.url, je.email,
372 aw.accuracy, aw.text, aw.postalText, aw.postalCode, aw.localityId,
373 aw.subAdministrativeAreaId, aw.administrativeAreaId, aw.countryId,
374 aw.latitude, aw.longitude, aw.pub, aw.updateTime,
375 aw.north, aw.south, aw.east, aw.west,
376 ah.accuracy, ah.text, ah.postalText, ah.postalCode, ah.localityId,
377 ah.subAdministrativeAreaId, ah.administrativeAreaId, ah.countryId,
378 ah.latitude, ah.longitude, ah.pub, ah.updateTime,
379 ah.north, ah.south, ah.east, ah.west
c7139c07
SJ
380 FROM profile_job AS j
381 LEFT JOIN profile_job_enum AS je ON (j.jobid = je.id)
c7139c07 382 LEFT JOIN profile_job_subsubsector_enum AS s ON (s.id = j.subsubsectorid)
ce0b2c6f 383 LEFT JOIN profile_addresses AS aw ON (aw.pid = j.pid AND aw.type = 'job'
4d7d27fc 384 AND aw.id = j.id)
541e8d03 385 LEFT JOIN profile_addresses AS ah ON (ah.jobid = j.jobid AND ah.type = 'hq')
ce0b2c6f 386 WHERE j.pid = {?}
541e8d03 387 ORDER BY j.id",
a6391000 388 $this->pid());
37d44b3b 389 $this->values['jobs'] = array();
bde2be3b 390
afaa2cc7
SJ
391 if ($res->numRows() > 0) {
392 while (list($id, $jobid, $name, $sector, $subSector, $subSubSector,
393 $subSubSectorName, $description, $w_email, $w_emailPub, $w_url, $pub,
394 $hq_acronym, $hq_url, $hq_email,
395 $w_accuracy, $w_text, $w_postalText, $w_postalCode, $w_localityId,
396 $w_subAdministrativeAreaId, $w_administrativeAreaId, $w_countryId,
397 $w_latitude, $w_longitude, $w_pub, $w_updateTime,
398 $w_north, $w_south, $w_east, $w_west,
399 $hq_accuracy, $hq_text, $hq_postalText, $hq_postalCode, $hq_localityId,
400 $hq_subAdministrativeAreaId, $hq_administrativeAreaId, $hq_countryId,
401 $hq_latitude, $hq_longitude, $hq_pub, $hq_updateTime,
402 $hq_north, $hq_south, $hq_east, $hq_west,
403 ) = $res->next()) {
404 $this->values['jobs'][] = array(
405 'id' => $id,
406 'jobid' => $jobid,
407 'name' => $name,
408 'sector' => $sector,
409 'subSector' => $subSector,
410 'subSubSector' => $subSubSector,
411 'subSubSectorName' => $subSubSectorName,
412 'description' => $description,
413 'pub' => $pub,
414 'w_email' => $w_email,
415 'w_email_pub' => $w_emailPub,
416 'w_url' => $w_url,
417 'hq_acronym' => $hq_acronym,
418 'hq_url' => $hq_url,
419 'hq_email' => $hq_email,
420 'w_address' => array(
421 'accuracy' => $w_accuracy,
422 'text' => $w_text,
423 'postalText' => $w_postalText,
424 'postalCode' => $w_postalCode,
425 'localityId' => $w_localityId,
426 'subAdministrativeAreaId' => $w_subAdministrativeAreaId,
427 'administrativeAreaId' => $w_administrativeAreaId,
428 'countryId' => $w_countryId,
429 'latitude' => $w_latitude,
430 'longitude' => $w_longitude,
431 'pub' => $w_pub,
432 'updateTime' => $w_updateTime,
433 'north' => $w_north,
434 'south' => $w_south,
435 'east' => $w_east,
436 'west' => $w_west,
437 ),
438 'hq_address' => array(
439 'accuracy' => $hq_accuracy,
440 'text' => $hq_text,
441 'postalText' => $hq_postalText,
442 'postalCode' => $hq_postalCode,
443 'localityId' => $hq_localityId,
444 'subAdministrativeAreaId' => $hq_subAdministrativeAreaId,
445 'administrativeAreaId' => $hq_administrativeAreaId,
446 'countryId' => $hq_countryId,
447 'latitude' => $hq_latitude,
448 'longitude' => $hq_longitude,
449 'pub' => $hq_pub,
450 'updateTime' => $hq_updateTime,
451 'north' => $hq_north,
452 'south' => $hq_south,
453 'east' => $hq_east,
454 'west' => $hq_west,
455 ),
456 );
bde2be3b 457 }
afaa2cc7 458
0b6c8b36
SJ
459 $it = Phone::iterate(array($this->pid()), array(Phone::LINK_JOB));
460 while ($phone = $it->next()) {
461 $this->values['jobs'][$phone->linkId()]['w_phone'][$phone->id()] = $phone->toFormArray();
bde2be3b 462 }
3ac45f10
PC
463 $res = XDB::iterator("SELECT e.jtid, e.full_name, j.jid AS jobid
464 FROM profile_job_term_enum AS e
465 INNER JOIN profile_job_term AS j USING(jtid)
466 WHERE pid = {?}
467 ORDER BY j.jid",
468 $this->pid());
469 $i = 0;
470 $jobNb = count($this->values['jobs']);
471 while ($term = $res->next()) {
472 $jobid = $term['jobid'];
473 while ($i < $jobNb && $this->values['jobs'][$i]['id'] < $jobid) {
474 $i++;
475 }
476 if ($i >= $jobNb) {
477 break;
478 }
479 $job =& $this->values['jobs'][$i];
480 if ($job['id'] != $jobid) {
481 continue;
482 }
483 if (!isset($job['terms'])) {
484 $job['terms'] = array();
485 }
486 $job['terms'][] = $term;
487 }
488
afaa2cc7 489 foreach ($this->values['jobs'] as $id => &$job) {
0b6c8b36 490 $phone = new Phone();
afaa2cc7 491 if (!isset($job['w_phone'])) {
0b6c8b36 492 $job['w_phone'] = array(0 => $phone->toFormArray());
afaa2cc7 493 }
bde2be3b 494 }
aab2ffdd 495
afaa2cc7 496 $job['w_email_new'] = '';
0b6c8b36
SJ
497 if (!isset($job['hq_fixed'])) {
498 $job['hq_fixed'] = '';
bde2be3b 499 }
afaa2cc7
SJ
500 if (!isset($job['hq_fax'])) {
501 $job['hq_fax'] = '';
bde2be3b 502 }
afaa2cc7
SJ
503 if (!isset($job['w_email_pub'])) {
504 $job['w_email_pub'] = 'private';
bde2be3b 505 }
afaa2cc7
SJ
506 if (!$job['hq_address']['text']) {
507 $job['hq_address'] = array(
508 'text' => '',
509 'accuracy' => '',
510 'postalText' => '',
511 'postalCode' => '',
512 'administrativeAreaId' => '',
513 'subAdministrativeAreaId' => '',
514 'localityId' => '',
515 'countryId' => '',
516 'latitude' => '',
517 'longitude' => '',
518 'north' => '',
519 'south' => '',
520 'east' => '',
521 'west' => '',
522 'cedex' => '',
523 'updateTime' => '',
524 'changed' => '0',
525 'removed' => '0',
526 );
527 }
528 $job['w_address']['cedex'] = '';
529 $job['w_address']['changed'] = '0';
530 $job['w_address']['removed'] = '0';
531 } else {
532 $this->values['jobs'][] = $this->settings['jobs']->emptyJob();
bde2be3b 533 }
37d44b3b
FB
534 }
535
7c2e0f0d 536 protected function _saveData()
37d44b3b 537 {
b539d596
FB
538 if (S::user()->checkPerms(User::PERM_DIRECTORY_PRIVATE)) {
539 if ($this->changed['cv']) {
540 XDB::execute("UPDATE profiles
541 SET cv = {?}
542 WHERE pid = {?}",
543 $this->values['cv'], $this->pid());
544 }
37d44b3b 545 }
3950bc21 546 }
2dcac0f5 547
04334c61 548 public function _prepare(PlPage &$page, $id)
2dcac0f5 549 {
a6483c12 550 require_once 'emails.combobox.inc.php';
4e698dc9 551 fill_email_combobox($page, $this->owner);
b715c1e1 552
33b6f5a0
SJ
553 $res = XDB::query("SELECT id, name AS label
554 FROM profile_job_sector_enum");
541e8d03 555 $page->assign('sectors', $res->fetchAllAssoc());
72e96bc0
SJ
556
557 $res = XDB::iterator("SELECT id, name
558 FROM profile_corps_enum
559 ORDER BY id = 1 DESC, name");
560 $page->assign('original_corps', $res->fetchAllAssoc());
561
562 $res = XDB::iterator("SELECT id, name
563 FROM profile_corps_enum
564 WHERE still_exists = 1
565 ORDER BY id = 1 DESC, name");
566 $page->assign('current_corps', $res->fetchAllAssoc());
567
568 $res = XDB::iterator("SELECT id, name
e489faf7
SJ
569 FROM profile_corps_rank_enum
570 ORDER BY id = 1 DESC, name");
72e96bc0 571 $page->assign('corps_rank', $res->fetchAllAssoc());
2dcac0f5 572 }
3950bc21
FB
573}
574
575// vim:set et sw=4 sts=4 sws=4 foldmethod=marker enc=utf-8:
576?>