2e9b8c230c191e1e03f92e09e0dcce825079d53e
[platal.git] / modules / profile / mentor.inc.php
1 <?php
2 /***************************************************************************
3 * Copyright (C) 2003-2009 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 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();
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.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) {
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 uid = {?}",
60 S::i('uid'));
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 (uid, sectorid, subsectorid)
67 VALUES ({?}, {?}, {?})",
68 S::i('uid'), $id, $sid);
69 }
70 }
71 }
72 }
73
74 class 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();
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)
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) {
92 Platal::page()->trigError("Le nombre de secteurs d'expertise est limité à 10");
93 $success = false;
94 }
95 ksort($value);
96 return $value;
97 }
98
99 public function save(ProfilePage &$page, $field, $value)
100 {
101 XDB::execute("DELETE FROM profile_mentor_country
102 WHERE uid = {?}",
103 S::i('uid'));
104 foreach ($value as $id=>&$name) {
105 XDB::execute("INSERT INTO profile_mentor_country (uid, country)
106 VALUES ({?}, {?})",
107 S::i('uid'), $id);
108 }
109 }
110 }
111
112
113 class 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
125 protected function _fetchData()
126 {
127 $res = XDB::query("SELECT expertise
128 FROM mentor
129 WHERE uid = {?}",
130 S::i('uid'));
131 $this->values['expertise'] = $res->fetchOneCell();
132 }
133
134 protected function _saveData()
135 {
136 if ($this->changed['expertise']) {
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 }
149 }
150 }
151
152 public function _prepare(PlPage &$page, $id)
153 {
154 $page->assign('secteurs_sel', XDB::iterator("SELECT id, name AS label
155 FROM profile_job_sector_enum"));
156 }
157 }
158
159 // vim:set et sw=4 sts=4 sws=4 foldmethod=marker enc=utf-8:
160 ?>