Merge commit 'origin/master' into fusionax
[platal.git] / include / name.func.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 function build_names_display($data)
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]);
29 if ($searchname[1] != 0) {
30 list($particle, $name) = explode(' ', $searchname[2], 2);
31 if (!$name) {
32 list($particle, $name) = explode('\'', $searchname[2], 2);
33 }
34 } else {
35 $particle = '';
36 $name = $searchname[2];
37 }
38 if (!isset($search_names[$searchname[0]])) {
39 $search_names[$searchname[0]] = array($searchname[2], $name);
40 } else {
41 $search_names[$searchname[0]] = array_merge($search_names[$searchname[0]], array($name));
42 }
43 }
44 $sn_types_public = build_types('public');
45 $sn_types_private = build_types('private');
46 $full_name = build_full_name($search_names, $sn_types_public);
47 return build_public_name($search_names, $sn_types_public, $full_name) . ';' .
48 build_private_name($search_names, $sn_types_private);
49 }
50
51 function build_types($pub)
52 {
53 if ($pub == 'public') {
54 $sql_pub = "AND FIND_IN_SET('public', flags)";
55 } elseif ($pub == 'private') {
56 $sql_pub = "AND NOT FIND_IN_SET('public', flags)";
57 } else {
58 $sql_pub = "";
59 }
60 $sql = "SELECT id, name
61 FROM profile_name_search_enum
62 WHERE NOT FIND_IN_SET('not_displayed', flags)" . $sql_pub;
63 $sn_types = XDB::iterator($sql);
64 $types = array();
65 while ($sn_type = $sn_types->next()) {
66 $types[$sn_type['name']] = $sn_type['id'];
67 }
68 return $types;
69 }
70
71 function build_full_name(&$search_names, &$sn_types)
72 {
73 $name = "";
74 if (isset($search_names[$sn_types['Nom usuel']])) {
75 $name .= $search_names[$sn_types['Nom usuel']][0] . " ("
76 . $search_names[$sn_types['Nom patronymique']][0] . ")";
77 } else {
78 $name .= $search_names[$sn_types['Nom patronymique']][0];
79 }
80 if (isset($search_names[$sn_types['Nom marital']])
81 || isset($search_names[$sn_types['Pseudonyme (nom de plume)']])) {
82 if (isset($search_names[$sn_types['Nom marital']])) {
83 $user = S::user();
84 if ($user->isFemale()) {
85 $name .= " (Mme ";
86 } else {
87 $name .= " (M ";
88 }
89 $name .= $search_names[$sn_types['Nom marital']][0];
90 if (isset($search_names[$sn_types['Pseudonyme (nom de plume)']])) {
91 $name .= ", ";
92 }
93 }
94 if (isset($search_names[$sn_types['Pseudonyme (nom de plume)']])) {
95 $name .= $search_names[$sn_types['Pseudonyme (nom de plume)']][0];
96 }
97 $name .= ")";
98 }
99 return $name;
100 }
101
102 function build_public_name(&$search_names, &$sn_types, $full_name)
103 {
104 return $search_names[$sn_types['Prénom']][0] . " " . $full_name;
105 }
106
107 function build_private_name(&$search_names, &$sn_types)
108 {
109 $name = "";
110 if (isset($search_names[$sn_types['Surnom']])
111 || (isset($search_names[$sn_types['Autre prénom']])
112 || isset($search_names[$sn_types['Autre nom']]))) {
113 $name .= " (";
114 if (isset($search_names[$sn_types['Surnom']])) {
115 $name .= "alias " . $search_names[$sn_types['Surnom']][0];
116 $i = 2;
117 while (isset($search_names[$sn_types['Surnom']][$i])) {
118 $name .= ", " . $search_names[$sn_types['Surnom']][$i];
119 $i++;
120 }
121 if (isset($search_names[$sn_types['Autre prénom']])
122 || isset($search_names[$sn_types['Autre nom']])) {
123 $name .= ", ";
124 }
125 }
126 if (isset($search_names[$sn_types['Autre prénom']])) {
127 $name .= "autres prénoms : " . $search_names[$sn_types['Autre prénom']][0];
128 $i = 2;
129 while (isset($search_names[$sn_types['Autre prénom']][$i])) {
130 $name .= ", " . $search_names[$sn_types['Autre prénom']][$i];
131 $i++;
132 }
133 if (isset($search_names[$sn_types['Autre nom']])) {
134 $name .= ", ";
135 }
136 }
137 if (isset($search_names[$sn_types['Autre nom']])) {
138 $name .= "autres noms : " . $search_names[$sn_types['Autre nom']][0];
139 $i = 2;
140 while (isset($search_names[$sn_types['Autre nom']][$i])) {
141 $name .= ", " . $search_names[$sn_types['Autre nom']][$i];
142 $i++;
143 }
144 }
145 $name .= ")";
146 }
147 return $name;
148 }
149
150 function build_directory_name(&$search_names, &$sn_types, $full_name)
151 {
152 return $full_name . " " . $search_names[$sn_types['Prénom']][0];
153 }
154
155 function short_name(&$search_names, &$sn_types)
156 {
157 $name = "";
158 if (isset($search_names[$sn_types['Nom usuel']])) {
159 $name .= $search_names[$sn_types['Nom usuel']][0];
160 } else {
161 $name .= $search_names[$sn_types['Nom patronymique']][0];
162 }
163 $name = " ";
164 if (isset($search_names[$sn_types['Prénom usuel']])) {
165 $name .= $search_names[$sn_types['Prénom usuel']][0];
166 } else {
167 $name .= $search_names[$sn_types['Prénom']][0];
168 }
169 return $name;
170 }
171
172 function sort_name(&$search_names, &$sn_types)
173 {
174 $name = "";
175 if (isset($search_names[$sn_types['Nom usuel']])) {
176 $name .= $search_names[$sn_types['Nom usuel']][1];
177 } else {
178 $name .= $search_names[$sn_types['Nom patronymique']][1];
179 }
180 $name .= $search_names[$sn_types['Prénom']][0];
181 return $name;
182 }
183
184 // vim:set et sw=4 sts=4 sws=4 foldmethod=marker enc=utf-8:
185 ?>