17d9cdd67c0983c795fa6ad3cce8860f09df047c
[platal.git] / modules / profile / mentor.inc.php
1 <?php
2 /***************************************************************************
3 * Copyright (C) 2003-2010 Polytechnique.org *
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 class ProfileSettingSectors implements ProfileSetting
23 {
24 public function value(ProfilePage &$page, $field, $value, &$success)
25 {
26 $success = true;
27 if (is_null($value)) {
28 $value = array();
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)
33 WHERE m.pid = {?}",
34 $page->pid());
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 } elseif (!is_array($value)) {
43 $value = array();
44 } elseif (count($value) > 10) {
45 Platal::page()->trigError("Le nombre de secteurs d'expertise est limité à 10.");
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
58 XDB::execute("DELETE FROM profile_mentor_sector
59 WHERE pid = {?}",
60 $page->pid());
61 if (!count($value)) {
62 return;
63 }
64 foreach ($value as $id => $sect) {
65 foreach ($sect as $sid => $name) {
66 XDB::execute("INSERT INTO profile_mentor_sector (pid, sectorid, subsectorid)
67 VALUES ({?}, {?}, {?})",
68 $page->pid(), $id, $sid);
69 }
70 }
71 }
72
73 public function getText($value) {
74 $sectors = array();
75 foreach ($value as $sector) {
76 foreach ($sector as $subsector) {
77 $sectors[] = $subsector;
78 }
79 }
80 return implode(', ', $sectors);
81 }
82 }
83
84 class ProfileSettingCountry implements ProfileSetting
85 {
86 public function value(ProfilePage &$page, $field, $value, &$success)
87 {
88 $success = true;
89 if (is_null($value)) {
90 $value = array();
91 $res = XDB::iterRow("SELECT m.country, gc.countryFR
92 FROM profile_mentor_country AS m
93 INNER JOIN geoloc_countries AS gc ON (m.country = gc.iso_3166_1_a2)
94 WHERE m.pid = {?}",
95 $page->pid());
96 while (list($id, $name) = $res->next()) {
97 $value[$id] = $name;
98 }
99 } else if (!is_array($value)) {
100 $value = array();
101 } else if (count($value) > 10) {
102 Platal::page()->trigError("Le nombre de secteurs d'expertise est limité à 10");
103 $success = false;
104 }
105 ksort($value);
106 return $value;
107 }
108
109 public function save(ProfilePage &$page, $field, $value)
110 {
111 XDB::execute("DELETE FROM profile_mentor_country
112 WHERE pid = {?}",
113 $page->pid());
114 foreach ($value as $id=>&$name) {
115 XDB::execute("INSERT INTO profile_mentor_country (pid, country)
116 VALUES ({?}, {?})",
117 $page->pid(), $id);
118 }
119 }
120
121 public function getText($value) {
122 return implode(', ', $value);
123 }
124 }
125
126
127 class ProfileSettingMentor extends ProfilePage
128 {
129 protected $pg_template = 'profile/mentor.tpl';
130
131 public function __construct(PlWizard &$wiz)
132 {
133 parent::__construct($wiz);
134 $this->settings['expertise'] = null;
135 $this->settings['sectors'] = new ProfileSettingSectors();
136 $this->settings['countries'] = new ProfileSettingCountry();
137 }
138
139 protected function _fetchData()
140 {
141 $res = XDB::query("SELECT expertise
142 FROM profile_mentor
143 WHERE pid = {?}",
144 $this->pid());
145 $this->values['expertise'] = $res->fetchOneCell();
146 }
147
148 protected function _saveData()
149 {
150 if ($this->changed['expertise']) {
151 $expertise = trim($this->values['expertise']);
152 if (empty($expertise)) {
153 XDB::execute("DELETE FROM profile_mentor
154 WHERE pid = {?}",
155 $this->pid());
156 $this->values['expertise'] = null;
157 } else {
158 XDB::execute("REPLACE INTO profile_mentor (pid, expertise)
159 VALUES ({?}, {?})",
160 $this->pid(), $expertise);
161 $this->values['expertise'] = $expertise;
162 }
163 }
164 }
165
166 public function _prepare(PlPage &$page, $id)
167 {
168 $page->assign('sectorList', XDB::iterator('SELECT id, name
169 FROM profile_job_sector_enum'));
170
171 $page->assign('countryList', XDB::iterator("SELECT iso_3166_1_a2, countryFR
172 FROM geoloc_countries
173 ORDER BY countryFR"));
174 $page->assign('hrpid', $this->profile->hrpid);
175 }
176 }
177
178 // vim:set et sw=4 sts=4 sws=4 foldmethod=marker enc=utf-8:
179 ?>