Commit | Line | Data |
---|---|---|
6e32823c SJ |
1 | <?php |
2 | /*************************************************************************** | |
9891bd15 | 3 | * Copyright (C) 2003-2009 Polytechnique.org * |
6e32823c SJ |
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 | ||
dced83b4 | 22 | function build_javascript_names($data) |
6e32823c SJ |
23 | { |
24 | $data_array = explode(';;', $data); | |
25 | $n = count($data_array); | |
26 | $n--; | |
27 | for ($i = 0; $i < $n; $i++) { | |
28 | $searchname = explode(';', $data_array[$i]); | |
dced83b4 SJ |
29 | if (isset($search_names[$searchname[0]])) { |
30 | $search_names[$searchname[0]][] = $searchname[1]; | |
6e32823c | 31 | } else { |
dced83b4 | 32 | $search_names[$searchname[0]] = array('fullname' => $searchname[1]); |
6e32823c SJ |
33 | } |
34 | } | |
dced83b4 | 35 | |
6e32823c SJ |
36 | $sn_types_public = build_types('public'); |
37 | $sn_types_private = build_types('private'); | |
38 | $full_name = build_full_name($search_names, $sn_types_public); | |
39 | return build_public_name($search_names, $sn_types_public, $full_name) . ';' . | |
dced83b4 SJ |
40 | build_private_name($search_names, $sn_types_private); |
41 | } | |
42 | ||
43 | function build_display_names(&$display_names, $search_names, $private_name_end = null, &$alias = null) | |
44 | { | |
45 | $sn_types_public = build_types('public'); | |
46 | $full_name = build_full_name($search_names, $sn_types_public); | |
47 | $display_names['public_name'] = build_public_name($search_names, $sn_types_public, $full_name); | |
48 | $display_names['private_name'] = $display_names['public_name'] . $private_name_end; | |
49 | $display_names['directory_name'] = build_directory_name($search_names, $sn_types_public, $full_name); | |
50 | $display_names['short_name'] = build_short_name($search_names, $sn_types_public, $alias); | |
51 | $display_names['sort_name'] = build_sort_name($search_names, $sn_types_public); | |
6e32823c SJ |
52 | } |
53 | ||
dced83b4 | 54 | function build_types($pub = null) |
6e32823c SJ |
55 | { |
56 | if ($pub == 'public') { | |
57 | $sql_pub = "AND FIND_IN_SET('public', flags)"; | |
58 | } elseif ($pub == 'private') { | |
59 | $sql_pub = "AND NOT FIND_IN_SET('public', flags)"; | |
60 | } else { | |
61 | $sql_pub = ""; | |
62 | } | |
6cb58d39 | 63 | $sql = "SELECT id, type, name |
97a98687 | 64 | FROM profile_name_enum |
6e32823c SJ |
65 | WHERE NOT FIND_IN_SET('not_displayed', flags)" . $sql_pub; |
66 | $sn_types = XDB::iterator($sql); | |
67 | $types = array(); | |
68 | while ($sn_type = $sn_types->next()) { | |
dced83b4 | 69 | if ($pub) { |
6cb58d39 | 70 | $types[$sn_type['type']] = $sn_type['id']; |
dced83b4 | 71 | } else { |
6cb58d39 | 72 | $types[$sn_type['id']] = $sn_type['name']; |
dced83b4 | 73 | } |
6e32823c SJ |
74 | } |
75 | return $types; | |
76 | } | |
77 | ||
78 | function build_full_name(&$search_names, &$sn_types) | |
79 | { | |
80 | $name = ""; | |
6cb58d39 SJ |
81 | if (isset($search_names[$sn_types['lastname_ordinary']])) { |
82 | $name .= $search_names[$sn_types['lastname_ordinary']]['fullname'] . " (" | |
83 | . $search_names[$sn_types['lastname']]['fullname'] . ")"; | |
6e32823c | 84 | } else { |
6cb58d39 | 85 | $name .= $search_names[$sn_types['lastname']]['fullname']; |
6e32823c | 86 | } |
6cb58d39 SJ |
87 | if (isset($search_names[$sn_types['lastname_marital']]) |
88 | || isset($search_names[$sn_types['pseudonym']])) { | |
c4b45374 | 89 | $name .= " ("; |
6cb58d39 | 90 | if (isset($search_names[$sn_types['lastname_marital']])) { |
6e32823c SJ |
91 | $user = S::user(); |
92 | if ($user->isFemale()) { | |
c4b45374 | 93 | $name .= "Mme "; |
6e32823c | 94 | } else { |
c4b45374 | 95 | $name .= "M "; |
6e32823c | 96 | } |
6cb58d39 SJ |
97 | $name .= $search_names[$sn_types['lastname_marital']]['fullname']; |
98 | if (isset($search_names[$sn_types['pseudonym']])) { | |
6e32823c SJ |
99 | $name .= ", "; |
100 | } | |
101 | } | |
6cb58d39 SJ |
102 | if (isset($search_names[$sn_types['pseudonym']])) { |
103 | $name .= $search_names[$sn_types['pseudonym']]['fullname']; | |
6e32823c SJ |
104 | } |
105 | $name .= ")"; | |
106 | } | |
107 | return $name; | |
108 | } | |
109 | ||
110 | function build_public_name(&$search_names, &$sn_types, $full_name) | |
111 | { | |
6cb58d39 | 112 | return $search_names[$sn_types['firstname']]['fullname'] . " " . $full_name; |
6e32823c SJ |
113 | } |
114 | ||
115 | function build_private_name(&$search_names, &$sn_types) | |
116 | { | |
117 | $name = ""; | |
6cb58d39 SJ |
118 | if (isset($search_names[$sn_types['nickname']]) |
119 | || (isset($search_names[$sn_types['name_other']]) | |
120 | || isset($search_names[$sn_types['name_other']]))) { | |
6e32823c | 121 | $name .= " ("; |
6cb58d39 SJ |
122 | if (isset($search_names[$sn_types['nickname']])) { |
123 | $name .= "alias " . $search_names[$sn_types['nickname']]['fullname']; | |
dced83b4 | 124 | $i = 0; |
6cb58d39 SJ |
125 | while (isset($search_names[$sn_types['nickname']][$i])) { |
126 | $name .= ", " . $search_names[$sn_types['nickname']][$i]; | |
6e32823c SJ |
127 | $i++; |
128 | } | |
6cb58d39 SJ |
129 | if (isset($search_names[$sn_types['name_other']]) |
130 | || isset($search_names[$sn_types['name_other']])) { | |
6e32823c SJ |
131 | $name .= ", "; |
132 | } | |
133 | } | |
6cb58d39 SJ |
134 | if (isset($search_names[$sn_types['firstname_other']])) { |
135 | $name .= "autres prénoms : " . $search_names[$sn_types['firstname_other']]['fullname']; | |
dced83b4 | 136 | $i = 0; |
6cb58d39 SJ |
137 | while (isset($search_names[$sn_types['firstname_other']][$i])) { |
138 | $name .= ", " . $search_names[$sn_types['firstname_other']][$i]; | |
6e32823c SJ |
139 | $i++; |
140 | } | |
6cb58d39 | 141 | if (isset($search_names[$sn_types['name_other']])) { |
6e32823c SJ |
142 | $name .= ", "; |
143 | } | |
144 | } | |
6cb58d39 SJ |
145 | if (isset($search_names[$sn_types['name_other']])) { |
146 | $name .= "autres noms : " . $search_names[$sn_types['name_other']]['fullname']; | |
dced83b4 | 147 | $i = 0; |
6cb58d39 SJ |
148 | while (isset($search_names[$sn_types['name_other']][$i])) { |
149 | $name .= ", " . $search_names[$sn_types['name_other']][$i]; | |
6e32823c SJ |
150 | $i++; |
151 | } | |
152 | } | |
153 | $name .= ")"; | |
154 | } | |
155 | return $name; | |
156 | } | |
157 | ||
158 | function build_directory_name(&$search_names, &$sn_types, $full_name) | |
159 | { | |
6cb58d39 | 160 | return $full_name . " " . $search_names[$sn_types['firstname']]['fullname']; |
6e32823c SJ |
161 | } |
162 | ||
dced83b4 | 163 | function build_short_name(&$search_names, &$sn_types, &$alias = null) |
6e32823c | 164 | { |
6cb58d39 SJ |
165 | if (isset($search_names[$sn_types['lastname_ordinary']])) { |
166 | $lastname = $search_names[$sn_types['lastname_ordinary']]['fullname']; | |
6e32823c | 167 | } else { |
6cb58d39 | 168 | $lastname = $search_names[$sn_types['lastname']]['fullname']; |
6e32823c | 169 | } |
6cb58d39 SJ |
170 | if (isset($search_names[$sn_types['firstname_ordinary']])) { |
171 | $firstname = $search_names[$sn_types['firstname_ordinary']]['fullname']; | |
6e32823c | 172 | } else { |
6cb58d39 | 173 | $firstname = $search_names[$sn_types['firstname']]['fullname']; |
6e32823c | 174 | } |
dced83b4 SJ |
175 | if ($alias) { |
176 | $alias = make_username($firstname, $lastname); | |
177 | } | |
178 | return $firstname . " " . $lastname; | |
6e32823c SJ |
179 | } |
180 | ||
dced83b4 | 181 | function build_sort_name(&$search_names, &$sn_types) |
6e32823c SJ |
182 | { |
183 | $name = ""; | |
6cb58d39 SJ |
184 | if (isset($search_names[$sn_types['lastname_ordinary']])) { |
185 | $name .= $search_names[$sn_types['lastname_ordinary']]['name']; | |
6e32823c | 186 | } else { |
6cb58d39 | 187 | $name .= $search_names[$sn_types['lastname']]['name']; |
6e32823c | 188 | } |
6cb58d39 | 189 | $name .= " " . $search_names[$sn_types['firstname']]['fullname']; |
6e32823c SJ |
190 | return $name; |
191 | } | |
192 | ||
dced83b4 SJ |
193 | function set_profile_display(&$display_names) |
194 | { | |
195 | XDB::execute("UPDATE profile_display | |
196 | SET public_name = {?}, private_name = {?}, | |
197 | directory_name = {?}, short_name = {?}, sort_name = {?} | |
198 | WHERE pid = {?}", | |
199 | $display_names['public_name'], $display_names['private_name'], | |
200 | $display_names['directory_name'], $display_names['short_name'], | |
201 | $display_names['sort_name'], S::v('uid')); | |
202 | } | |
203 | ||
204 | function build_sn_pub() | |
205 | { | |
206 | $res = XDB::iterator("SELECT CONCAT(sn.particle, sn.name) AS fullname, sn.typeid, | |
207 | sn.particle, sn.name, sn.id | |
97a98687 SJ |
208 | FROM profile_name AS sn |
209 | INNER JOIN profile_name_enum AS e ON (e.id = sn.typeid) | |
dced83b4 SJ |
210 | WHERE sn.pid = {?} AND NOT FIND_IN_SET('not_displayed', e.flags) |
211 | AND FIND_IN_SET('public', e.flags) | |
212 | ORDER BY NOT FIND_IN_SET('always_displayed', e.flags), e.id, sn.name", | |
213 | S::i('uid')); | |
214 | $sn_old = array(); | |
215 | while ($old = $res->next()) { | |
216 | $sn_old[$old['typeid']] = array('fullname' => $old['fullname'], | |
217 | 'name' => $old['name'], | |
218 | 'particle' => $old['particle'], | |
219 | 'id' => $old['id']); | |
220 | } | |
221 | return $sn_old; | |
222 | } | |
223 | ||
224 | function set_alias_names(&$sn_new, $sn_old, $update_new = false, $new_alias = null) | |
225 | { | |
226 | $has_new = false; | |
227 | foreach ($sn_new as $typeid => $sn) { | |
228 | if (isset($sn['pub'])) { | |
229 | if (isset($sn_old[$typeid]) && ($sn_old[$typeid]['fullname'] == $sn['fullname'] && $update_new)) { | |
97a98687 | 230 | XDB::execute("UPDATE profile_name |
dced83b4 SJ |
231 | SET particle = {?}, name = {?}, typeid = {?} |
232 | WHERE id = {?} AND pid = {?}", | |
233 | $sn['particle'], $sn['name'], $typeid, $sn_old[$typeid]['id'], S::i('uid')); | |
234 | unset($sn_old[$typeid]); | |
235 | } elseif ($update_new | |
236 | || (isset($sn_old[$typeid]) && $sn_old[$typeid]['fullname'] == $sn['fullname'])) { | |
97a98687 | 237 | XDB::execute("INSERT INTO profile_name (particle, name, typeid, pid) |
dced83b4 SJ |
238 | VALUES ({?}, {?}, {?}, {?})", |
239 | $sn['particle'], $sn['name'], $typeid, S::i('uid')); | |
240 | unset($sn_old[$typeid]); | |
241 | } else { | |
242 | $has_new = true; | |
243 | } | |
244 | } else { | |
245 | if ($sn['fullname'] != '') { | |
97a98687 | 246 | XDB::execute("INSERT INTO profile_name (particle, name, typeid, pid) |
dced83b4 SJ |
247 | VALUES ('', {?}, {?}, {?})", |
248 | $sn['fullname'], $typeid, S::i('uid')); | |
249 | } | |
6cb58d39 SJ |
250 | $i = 0; |
251 | while (isset($sn[$i])) { | |
252 | XDB::execute("INSERT INTO profile_name (particle, name, typeid, pid) | |
253 | VALUES ('', {?}, {?}, {?})", | |
254 | $sn[$i], $typeid, S::i('uid')); | |
255 | $i++; | |
256 | } | |
dced83b4 SJ |
257 | } |
258 | } | |
259 | if (count($sn_old) > 0) { | |
260 | if (!$update_new) { | |
261 | $has_new = true; | |
262 | foreach ($sn_old as $typeid => $sn) { | |
97a98687 | 263 | XDB::execute("INSERT INTO profile_name (particle, name, typeid, pid) |
dced83b4 SJ |
264 | VALUES ({?}, {?}, {?}, {?})", |
265 | $sn['particle'], $sn['name'], $typeid, S::i('uid')); | |
266 | } | |
267 | } else { | |
268 | foreach ($sn_old as $typeid => $sn) { | |
97a98687 | 269 | XDB::execute("DELETE FROM profile_name |
dced83b4 SJ |
270 | WHERE pid = {?} AND id = {?}", |
271 | S::i('uid'), $sn['id']); | |
272 | } | |
273 | } | |
274 | } | |
275 | if ($update_new) { | |
276 | XDB::execute("DELETE FROM aliases | |
277 | WHERE FIND_IN_SET('usage', flags) AND id = {?}", | |
278 | S::i('uid')); | |
279 | } | |
280 | if ($new_alias) { | |
281 | XDB::execute("INSERT INTO aliases (alias, type, flags, id) | |
282 | VALUES ({?}, 'alias', 'usage', {?})", | |
283 | $new_alias, S::i('uid')); | |
284 | } | |
6443c93d | 285 | require_once('user.func.inc.php'); |
98e827e2 | 286 | user_reindex(S::i('uid')); |
dced83b4 SJ |
287 | return $has_new; |
288 | } | |
289 | ||
6e32823c SJ |
290 | // vim:set et sw=4 sts=4 sws=4 foldmethod=marker enc=utf-8: |
291 | ?> |