Adapts mentoring to the new sectors.
[platal.git] / modules / profile / mentor.inc.php
CommitLineData
6457b5e4
FB
1<?php
2/***************************************************************************
179afa7f 3 * Copyright (C) 2003-2008 Polytechnique.org *
6457b5e4
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
22class ProfileSecteurs implements ProfileSetting
23{
24 public function value(ProfilePage &$page, $field, $value, &$success)
25 {
26 $success = true;
27 if (is_null($value)) {
28 $value = array();
5fecdf6d
SJ
29 $res = XDB::iterRow("SELECT m.sectorid, m.subsectorid, ss.name
30 FROM profile_mentor_sector AS m
31 INNER JOIN profile_job_sector_enum AS s ON (m.sectorid = s.id)
32 INNER JOIN profile_job_subsector_enum AS ss ON (s.id = ss.sectorid AND m.subsectorid = ss.id)
6457b5e4
FB
33 WHERE m.uid = {?}",
34 S::i('uid'));
35 while (list($s, $ss, $ssname) = $res->next()) {
36 if (!isset($value[$s])) {
37 $value[$s] = array($ss => $ssname);
38 } else {
39 $value[$s][$ss] = $ssname;
40 }
41 }
42 } else if (!is_array($value)) {
43 $value = array();
44 } else if (count($value) > 10) {
5fecdf6d 45 Platal::page()->trigError("Le nombre de secteurs d'expertise est limité à 10.");
6457b5e4
FB
46 $success = false;
47 }
48 ksort($value);
49 foreach ($value as &$sss) {
50 ksort($sss);
51 }
52 return $value;
53 }
54
55 public function save(ProfilePage &$page, $field, $value)
56 {
57
5fecdf6d 58 XDB::execute("DELETE FROM profile_mentor_sector
6457b5e4
FB
59 WHERE uid = {?}",
60 S::i('uid'));
61 if (!count($value)) {
62 return;
63 }
64 foreach ($value as $id=>&$sect) {
65 foreach ($sect as $sid=>&$name) {
5fecdf6d 66 XDB::execute("INSERT INTO profile_mentor_sector (uid, sectorid, subsectorid)
6457b5e4
FB
67 VALUES ({?}, {?}, {?})",
68 S::i('uid'), $id, $sid);
69 }
70 }
71 }
72}
73
74class ProfileCountry implements ProfileSetting
75{
76 public function value(ProfilePage &$page, $field, $value, &$success)
77 {
78 $success = true;
79 if (is_null($value)) {
80 $value = array();
5fecdf6d
SJ
81 $res = XDB::iterRow("SELECT m.country, p.pays
82 FROM profile_mentor_country AS m
83 INNER JOIN geoloc_pays AS p ON (m.country = p.a2)
6457b5e4
FB
84 WHERE m.uid = {?}",
85 S::i('uid'));
86 while (list($id, $name) = $res->next()) {
87 $value[$id] = $name;
88 }
89 } else if (!is_array($value)) {
90 $value = array();
91 } else if (count($value) > 10) {
d7610c35 92 Platal::page()->trigError("Le nombre de secteurs d'expertise est limité à 10");
6457b5e4
FB
93 $success = false;
94 }
95 ksort($value);
96 return $value;
97 }
98
99 public function save(ProfilePage &$page, $field, $value)
100 {
5fecdf6d 101 XDB::execute("DELETE FROM profile_mentor_country
6457b5e4
FB
102 WHERE uid = {?}",
103 S::i('uid'));
104 foreach ($value as $id=>&$name) {
5fecdf6d 105 XDB::execute("INSERT INTO profile_mentor_country (uid, country)
6457b5e4
FB
106 VALUES ({?}, {?})",
107 S::i('uid'), $id);
108 }
109 }
110}
111
112
113class ProfileMentor extends ProfilePage
114{
115 protected $pg_template = 'profile/mentor.tpl';
116
117 public function __construct(PlWizard &$wiz)
118 {
119 parent::__construct($wiz);
120 $this->settings['expertise'] = null;
121 $this->settings['secteurs'] = new ProfileSecteurs();
122 $this->settings['countries'] = new ProfileCountry();
123 }
124
7c2e0f0d 125 protected function _fetchData()
6457b5e4 126 {
6457b5e4
FB
127 $res = XDB::query("SELECT expertise
128 FROM mentor
129 WHERE uid = {?}",
130 S::i('uid'));
e21e0b11 131 $this->values['expertise'] = $res->fetchOneCell();
6457b5e4
FB
132 }
133
7c2e0f0d 134 protected function _saveData()
6457b5e4 135 {
6457b5e4 136 if ($this->changed['expertise']) {
6dae45b3
FB
137 $expertise = trim($this->values['expertise']);
138 if (empty($expertise)) {
139 XDB::execute("DELETE FROM mentor
140 WHERE uid = {?}",
141 S::i('uid'));
142 $this->values['expertise'] = null;
143 } else {
144 XDB::execute("REPLACE INTO mentor (uid, expertise)
145 VALUES ({?}, {?})",
146 S::i('uid'), $expertise);
147 $this->values['expertise'] = $expertise;
148 }
6457b5e4
FB
149 }
150 }
151
04334c61 152 public function _prepare(PlPage &$page, $id)
6457b5e4 153 {
5fecdf6d
SJ
154 $page->assign('secteurs_sel', XDB::iterator("SELECT id, name AS label
155 FROM profile_job_sector_enum"));
6457b5e4
FB
156 }
157}
158
159// vim:set et sw=4 sts=4 sws=4 foldmethod=marker enc=utf-8:
160?>