source: extensions/LCAS/trunk/include/functions.inc.php @ 8217

Revision 8217, 23.1 KB checked in by Eric, 9 years ago (diff)

Code cleanup : Remove commented code, add functions comments

Line 
1<?php
2          // Keeps file coded in UTF-8 without BOM : é
3include_once (LCAS_PATH.'include/constants.php');
4load_language('plugin.lang', LCAS_PATH);
5
6
7/**
8 * Splits a multi-byte string in a array of each of its characters.
9 * Many thanks to adjwilli in
10 * http://www.php.net/manual/fr/function.mb-split.php#80046
11 *
12 * @param string s: string to split
13 *
14 * @return : array of each character of s
15*/
16function LCAS_mbStringToArray($s) {
17  $l = mb_strlen($s); $a = array();
18  while ($l) {
19    $a[] = mb_substr($s, 0, 1, 'UTF-8');
20    $s = mb_substr($s, 1, $l, 'UTF-8');
21    $l = mb_strlen($s);
22  }
23  return $a;
24}
25
26
27/**
28 * Changes the characters of the given string as stated by values of
29 * $conf['insensitive_case_logon'] and $LCAS_lang['char_replacement_set'].
30 *
31 * @param mix s: string, or array of strings, to evaluate
32 *
33 * @return : string, or array of strings, modified as stated
34*/
35function LCAS_change_case($Username, $Conf)
36{
37  $LCAS_lang                         = array();
38  $LCAS_lang['char_replacement_set'] = array();
39
40
41
42  // 0 : case sensitive, accents sensitive
43  $LCAS_lang['char_replacement_set'][1] = array(
44  // 1 : case insensitive, accents sensitive
45   
46  // Latin
47   
48    'a'  => 'A',
49    'à'  => 'À',
50    'â'  => 'Â',
51    'á'  => 'Á',
52    'ã'  => 'Ã',
53    'ä'  => 'Ä',
54    'å'  => 'Å',
55    'ā'  => 'Ā',
56    'ă'  => 'Ă',
57    'ą'  => 'Ą',
58    'ǻ'  => 'Ǻ',
59    'ạ'  => 'Ạ',
60    'ả'  => 'Ả',
61    'ấ'  => 'Ấ',
62    'ầ'  => 'Ầ',
63    'ẩ'  => 'Ẩ',
64    'ẫ'  => 'Ẫ',
65    'ậ'  => 'Ậ',
66    'ắ'  => 'Ắ',
67    'ằ'  => 'Ằ',
68    'ẳ'  => 'Ẳ',
69    'ẵ'  => 'Ẵ',
70    'ặ'  => 'Ặ',
71   
72    'b'  => 'B',
73   
74    'c'  => 'C',
75    'ç'  => 'Ç',
76    'ć'  => 'Ć',
77    'ĉ'  => 'Ĉ',
78    'ċ'  => 'Ċ',
79    'č'  => 'Č',
80
81    'd'  => 'D',
82    'ď'  => 'Ď',
83    'đ'  => 'Đ',
84   
85    'e'  => 'E',
86    'è'  => 'È',
87    'é'  => 'É',
88    'ê'  => 'Ê',
89    'ë'  => 'Ë',
90    'ē'  => 'Ē',
91    'ĕ'  => 'Ĕ',
92    'ė'  => 'Ė',
93    'ę'  => 'Ę',
94    'ě'  => 'Ě',
95    'ẹ'  => 'Ẹ',
96    'ẻ'  => 'Ẻ',
97    'ẽ'  => 'Ẽ',
98    'ế'  => 'Ế',
99    'ề'  => 'Ề',
100    'ể'  => 'Ể',
101    'ễ'  => 'Ễ',
102    'ệ'  => 'Ệ',
103   
104    'f'  => 'F ƒ',
105   
106    'g'  => 'G',
107    'ĝ'  => 'Ĝ',
108    'ğ'  => 'Ğ',
109    'ġ'  => 'Ġ',
110    'ģ'  => 'Ģ',
111   
112    'h'  => 'H',
113    'ĥ'  => 'Ĥ',
114    'ħ'  => 'Ħ',
115   
116    'i'  => 'I ı İ',
117    'ì'  => 'Ì',
118    'í'  => 'Í',
119    'î'  => 'Î',
120    'ï'  => 'Ï',
121    'ĩ'  => 'Ĩ',
122    'ī'  => 'Ī',
123    'ĭ'  => 'Ĭ',
124    'į'  => 'Į',
125    'ǐ'  => 'Ǐ',
126    'ỉ'  => 'Ỉ',
127    'ị'  => 'Ị',
128   
129    'j'  => 'J',
130    'ĵ'  => 'Ĵ',
131   
132    'k'  => 'K',
133    'ķ'  => 'Ķ',
134   
135    'l'  => 'L',
136    'ĺ'  => 'Ĺ',
137    'ļ'  => 'Ļ',
138    'ľ'  => 'Ľ',
139    'ŀ'  => 'Ŀ',
140    'ł'  => 'Ł',
141   
142    'm'  => 'M',
143   
144    'n'  => 'N',
145    'ñ'  => 'Ñ',
146    'ń'  => 'Ń',
147    'ņ'  => 'Ņ',
148    'ň'  => 'Ň',
149   
150    'o'  => 'O',
151    'ò'  => 'Ò',
152    'ó'  => 'Ó',
153    'ô'  => 'Ô',
154    'õ'  => 'Õ',
155    'ö'  => 'Ö',
156    'ø'  => 'Ø',
157    'ō'  => 'Ō',
158    'ŏ'  => 'Ŏ',
159    'ő'  => 'Ő',
160    'ơ'  => 'Ơ',
161    'ǒ'  => 'Ǒ',
162    'ǿ'  => 'Ǿ',
163    'ọ'  => 'Ọ',
164    'ỏ'  => 'Ỏ',
165    'ố'  => 'Ố',
166    'ồ'  => 'Ồ',
167    'ổ'  => 'Ổ',
168    'ỗ'  => 'Ỗ',
169    'ộ'  => 'Ộ',
170    'ớ'  => 'Ớ',
171    'ờ'  => 'Ờ',
172    'ở'  => 'Ở',
173    'ỡ'  => 'Ỡ',
174    'ợ'  => 'Ợ',
175   
176    'p'  => 'P',
177   
178    'q'  => 'Q ĸ',
179   
180    'r'  => 'R',
181    'ŕ'  => 'Ŕ',
182    'ŗ'  => 'Ŗ',
183    'ř'  => 'Ř',
184   
185    's'  => 'S ſ',
186    'ś'  => 'Ś',
187    'ŝ'  => 'Ŝ',
188    'ş'  => 'Ş',
189    'š'  => 'Š',
190    'ss' => 'ß',
191   
192    't'  => 'T',
193    'ţ'  => 'Ţ',
194    'ť'  => 'Ť',
195    'ŧ'  => 'Ŧ',
196   
197    'u'  => 'U',
198    'ù'  => 'Ù',
199    'ú'  => 'Ú',
200    'û'  => 'Û',
201    'ü'  => 'Ü',
202    'ũ'  => 'Ũ',
203    'ū'  => 'Ū',
204    'ŭ'  => 'Ŭ',
205    'ů'  => 'Ů',
206    'ű'  => 'Ű',
207    'ų'  => 'Ų',
208    'ǔ'  => 'Ǔ',
209    'ǖ'  => 'Ǖ',
210    'ǘ'  => 'Ǘ',
211    'ǚ'  => 'Ǚ',
212    'ǜ'  => 'Ǜ',
213    'ư'  => 'Ư',
214    'ụ'  => 'Ụ',
215    'ủ'  => 'Ủ',
216    'ứ'  => 'Ứ',
217    'ừ'  => 'Ừ',
218    'ử'  => 'Ử',
219    'ữ'  => 'Ữ',
220    'ự'  => 'Ự',
221   
222    'v'  => 'V',
223   
224    'w'  => 'W',
225    'ŵ'  => 'Ŵ',
226    'ẁ'  => 'Ẁ',
227    'ẃ'  => 'Ẃ',
228    'ẅ'  => 'Ẅ',
229   
230    'x'  => 'X',
231   
232    'y'  => 'Y',
233    'ý'  => 'Ý',
234    'ÿ'  => 'Ÿ',
235    'ỳ'  => 'Ỳ',
236    'ỵ'  => 'Ỵ',
237    'ỷ'  => 'Ỷ',
238    'ỹ'  => 'Ỹ',
239    'ŷ'  => 'Ŷ',
240   
241    'z'  => 'Z',
242    'ź'  => 'Ź',
243    'ż'  => 'Ż',
244    'ž'  => 'Ž',
245   
246    'ae' => 'æ Æ',
247    'aé' => 'ǽ Ǽ',
248    'ð'  => 'Ð',
249    'ə'  => 'Ə',
250    'ij' => 'ij IJ',
251    'ŋ'  => 'Ŋ',
252    'oe' => 'œ Œ',
253    'þ'  => 'Þ',
254   
255  // Greek
256   
257    'α'  => 'Α',
258    'ά'  => 'Ά',
259    'β'  => 'Β',
260    'γ'  => 'Γ',
261    'δ'  => 'Δ',
262    'ε'  => 'Ε',
263    'έ'  => 'Έ',
264    'ζ'  => 'Ζ',
265    'η'  => 'Η',
266    'ή'  => 'Ή',
267    'θ'  => 'Θ',
268    'ι'  => 'Ι',
269    'ί'  => 'Ί',
270    'ϊ'  => 'Ϊ',
271    'κ'  => 'Κ',
272    'λ'  => 'Λ',
273    'μ'  => 'Μ µ',
274    'ν'  => 'Ν',
275    'ξ'  => 'Ξ',
276    'ο'  => 'Ο',
277    'ό'  => 'Ό',
278    'π'  => 'Π',
279    'ρ'  => 'Ρ',
280    'σ'  => 'Σ ς',
281    'τ'  => 'Τ',
282    'υ'  => 'Υ',
283    'ύ'  => 'Ύ',
284    'ϋ'  => 'Ϋ',
285    'φ'  => 'Φ',
286    'χ'  => 'Χ',
287    'ψ'  => 'Ψ',
288    'ω'  => 'Ω',
289    'ώ'  => 'Ώ',
290   
291  // Cyrillic
292   
293    'а'  => 'А',
294    'б'  => 'Б',
295    'в'  => 'В',
296    'г'  => 'Г',
297    'ґ'  => 'Ґ',
298    'ғ'  => 'Ғ',
299    'д'  => 'Д',
300    'е'  => 'Е',
301    'ж'  => 'Ж',
302    'җ'  => 'Җ',
303    'з'  => 'З',
304    'и'  => 'И',
305    'й'  => 'Й',
306    'к'  => 'К',
307    'қ'  => 'Қ',
308    'ҝ'  => 'Ҝ',
309    'л'  => 'Л',
310    'м'  => 'М',
311    'н'  => 'Н',
312    'ң'  => 'Ң',
313    'о'  => 'О',
314    'п'  => 'П',
315    'р'  => 'Р',
316    'с'  => 'С',
317    'т'  => 'Т',
318    'у'  => 'У',
319    'ү'  => 'Ү',
320    'ұ'  => 'Ұ',
321    'ф'  => 'Ф',
322    'х'  => 'Х',
323    'ҳ'  => 'Ҳ',
324    'ц'  => 'Ц',
325    'ч'  => 'Ч',
326    'ҹ'  => 'Ҹ',
327    'ш'  => 'Ш',
328    'щ'  => 'Щ',
329    'ъ'  => 'Ъ',
330    'ы'  => 'Ы',
331    'ь'  => 'Ь',
332    'э'  => 'Э',
333    'ю'  => 'Ю',
334    'я'  => 'Я',
335    'ё'  => 'Ё',
336    'ђ'  => 'Ђ',
337    'ѓ'  => 'Ѓ',
338    'є'  => 'Є',
339    'ѕ'  => 'Ѕ',
340    'і'  => 'І',
341    'ї'  => 'Ї',
342    'ј'  => 'Ј',
343    'љ'  => 'Љ',
344    'њ'  => 'Њ',
345    'ћ'  => 'Ћ',
346    'ќ'  => 'Ќ',
347    'ў'  => 'Ў',
348    'џ'  => 'Џ',
349    'һ'  => 'Һ',
350    'ә'  => 'Ә',
351    'ө'  => 'Ө',
352   
353  );
354
355  $LCAS_lang['char_replacement_set'][3] = array(
356  // 3 : case insensitive, accents insensitive
357   
358  // Latin
359   
360    'a'  => 'A à À â Â á Á ã Ã ä Ä å Å ā Ā ă Ă ą Ą ǻ Ǻ ạ Ạ ả Ả ấ Ấ ầ Ầ ẩ Ẩ ẫ Ẫ ậ Ậ ắ Ắ ằ Ằ ẳ Ẳ ẵ Ẵ ặ Ặ @',
361    'b'  => 'B',
362    'c'  => 'C ç Ç ć Ć ĉ Ĉ ċ Ċ č Č',
363    'd'  => 'D ď Ď đ Đ',
364    'e'  => 'E è È é É ê Ê ë Ë ē Ē ĕ Ĕ ė Ė ę Ę ě Ě ẹ Ẹ ẻ Ẻ ẽ Ẽ ế Ế ề Ề ể Ể ễ Ễ ệ Ệ',
365    'f'  => 'F ƒ',
366    'g'  => 'G ĝ Ĝ ğ Ğ ġ Ġ ģ Ģ',
367    'h'  => 'H ĥ Ĥ ħ Ħ',
368    'i'  => 'I ı İ ì Ì í Í î Î ï Ï ĩ Ĩ ī Ī ĭ Ĭ į Į ǐ Ǐ ỉ Ỉ ị Ị',
369    'j'  => 'J ĵ Ĵ',
370    'k'  => 'K ķ Ķ',
371    'l'  => 'L ĺ Ĺ ļ Ļ ľ Ľ ŀ Ŀ ł Ł',
372    'm'  => 'M',
373    'n'  => 'N ʼn ñ Ñ ń Ń ņ Ņ ň Ň',
374    'o'  => 'O ò Ò ó Ó ô Ô õ Õ ö Ö ø Ø ō Ō ŏ Ŏ ő Ő ơ Ơ ǒ Ǒ ǿ Ǿ ọ Ọ ỏ Ỏ ố Ố ồ Ồ ổ Ổ ỗ Ỗ ộ Ộ ớ Ớ ờ Ờ ở Ở ỡ Ỡ ợ Ợ',
375    'p'  => 'P',
376    'q'  => 'Q ĸ',
377    'r'  => 'R ŕ Ŕ ŗ Ŗ ř Ř',
378    's'  => 'S ś Ś ŝ Ŝ ş Ş š Š s ſ',
379    'ss' => 'ß',
380    't'  => 'T ţ Ţ ť Ť ŧ Ŧ',
381    'u'  => 'U ù Ù ú Ú û Û ü Ü ũ Ũ ū Ū ŭ Ŭ ů Ů ű Ű ų Ų ǔ Ǔ ǖ Ǖ ǘ Ǘ ǚ Ǚ ǜ Ǜ ư Ư ụ Ụ ủ Ủ ứ Ứ ừ Ừ ử Ử ữ Ữ ự Ự',
382    'v'  => 'V',
383    'w'  => 'W ŵ Ŵ ẁ Ẁ ẃ Ẃ ẅ Ẅ',
384    'x'  => 'X',
385    'y'  => 'Y ý Ý ÿ Ÿ ỳ Ỳ ỵ Ỵ ỷ Ỷ ỹ Ỹ ŷ Ŷ',
386    'z'  => 'Z ź Ź ż Ż ž Ž',
387    'ae' => 'æ Æ Ǽ ǽ',
388    'ð'  => 'Ð',
389    'ə'  => 'Ə',
390    'ij' => 'ij IJ',
391    'ŋ'  => 'Ŋ',
392    'oe' => 'œ Œ',
393    'þ'  => 'Þ',
394   
395  // Greek
396   
397    'α'  => 'Α ά Ά',
398    'β'  => 'Β',
399    'γ'  => 'Γ',
400    'δ'  => 'Δ',
401    'ε'  => 'Ε έ Έ',
402    'ζ'  => 'Ζ',
403    'η'  => 'Η ή Ή',
404    'θ'  => 'Θ',
405    'ι'  => 'Ι ί Ί ϊ Ϊ ΐ',
406    'κ'  => 'Κ',
407    'λ'  => 'Λ',
408    'μ'  => 'Μ µ',
409    'ν'  => 'Ν',
410    'ξ'  => 'Ξ',
411    'ο'  => 'Ο ό Ό',
412    'π'  => 'Π',
413    'ρ'  => 'Ρ',
414    'σ'  => 'Σ ς',
415    'τ'  => 'Τ',
416    'υ'  => 'Υ ύ Ύ ϋ Ϋ ΰ',
417    'φ'  => 'Φ',
418    'χ'  => 'Χ',
419    'ψ'  => 'Ψ',
420    'ω'  => 'Ω ώ Ώ',
421   
422  // Cyrillic
423   
424    'а'  => 'А',
425    'б'  => 'Б',
426    'в'  => 'В',
427    'г'  => 'Г ґ Ґ ғ Ғ',
428    'д'  => 'Д',
429    'е'  => 'Е',
430    'ж'  => 'Ж җ Җ',
431    'з'  => 'З',
432    'и'  => 'И',
433    'й'  => 'Й',
434    'к'  => 'К қ Қ ҝ Ҝ',
435    'л'  => 'Л',
436    'м'  => 'М',
437    'н'  => 'Н ң Ң',
438    'о'  => 'О',
439    'п'  => 'П',
440    'р'  => 'Р',
441    'с'  => 'С',
442    'т'  => 'Т',
443    'у'  => 'У',
444    'ү'  => 'Ү',
445    'ұ'  => 'Ұ',
446    'ф'  => 'Ф',
447    'х'  => 'Х ҳ Ҳ',
448    'ц'  => 'Ц',
449    'ч'  => 'Ч ҹ Ҹ',
450    'ш'  => 'Ш',
451    'щ'  => 'Щ',
452    'ъ'  => 'Ъ',
453    'ы'  => 'Ы',
454    'ь'  => 'Ь',
455    'э'  => 'Э',
456    'ю'  => 'Ю',
457    'я'  => 'Я',
458    'ё'  => 'Ё',
459    'ђ'  => 'Ђ',
460    'ѓ'  => 'Ѓ',
461    'є'  => 'Є',
462    'ѕ'  => 'Ѕ',
463    'і'  => 'І',
464    'ї'  => 'Ї',
465    'ј'  => 'Ј',
466    'љ'  => 'Љ',
467    'њ'  => 'Њ',
468    'ћ'  => 'Ћ',
469    'ќ'  => 'Ќ',
470    'ў'  => 'Ў',
471    'џ'  => 'Џ',
472    'һ'  => 'Һ',
473    'ә'  => 'Ә',
474    'ө'  => 'Ө',
475   
476  );
477
478  $LCAS_lang['char_replacement_set'][2] = array(
479  // 2 : case sensitive, accents insensitive
480   
481  // Latin
482   
483    'a'  => 'à â á ã ä å ā ă ą ǻ ạ ả ấ ầ ẩ ẫ ậ ắ ằ ẳ ẵ ặ @',
484    'A'  => 'À Â Á Ã Ä Å Ā Ă Ą Ǻ Ạ Ả Ấ Ầ Ẩ Ẫ Ậ Ắ Ằ Ẳ Ẵ Ặ',
485    'c'  => 'ç ć ĉ ċ č',
486    'C'  => 'Ç Ć Ĉ Ċ Č',
487    'd'  => 'ď đ',
488    'D'  => 'Ď Đ',
489    'e'  => 'è é ê ë ē ĕ ė ę ě ẹ ẻ ẽ ế ề ể ễ ệ',
490    'E'  => 'È É Ê Ë Ē Ĕ Ė Ę Ě Ẹ Ẻ Ẽ Ế Ề Ể Ễ Ệ',
491    'f'  => 'ƒ',
492    'g'  => 'ĝ ğ ġ ģ',
493    'G'  => 'Ĝ Ğ Ġ Ģ',
494    'h'  => 'ĥ ħ',
495    'H'  => 'Ĥ Ħ',
496    'i'  => 'ì í î ï ĩ ī ĭ į ǐ ỉ ị ı',
497    'I'  => 'Ì Í Î Ï Ĩ Ī Ĭ Į Ǐ Ỉ Ị İ',
498    'j'  => 'ĵ',
499    'J'  => 'Ĵ',
500    'k'  => 'ķ',
501    'K'  => 'Ķ',
502    'l'  => 'ĺ ļ ľ ŀ ł',
503    'L'  => 'Ĺ Ļ Ľ Ŀ Ł',
504    'n'  => 'ñ ń ņ ň ʼn',
505    'N'  => 'Ñ Ń Ņ Ň',
506    'o'  => 'ò ó ô õ ö ø ō ŏ ő ơ ǒ ǿ ọ ỏ ố ồ ổ ỗ ộ ớ ờ ở ỡ ợ',
507    'O'  => 'Ò Ó Ô Õ Ö Ø Ō Ŏ Ő Ơ Ǒ Ǿ Ọ Ỏ Ố Ồ Ổ Ỗ Ộ Ớ Ờ Ở Ỡ Ợ',
508    'q'  => 'ĸ',
509    'r'  => 'ŕ ŗ ř',
510    'R'  => 'Ŕ Ŗ Ř',
511    's'  => 'ś ŝ ş š ſ',
512    'S'  => 'Ś Ŝ Ş Š',
513    'ss' => 'ß',
514    't'  => 'ţ ť ŧ',
515    'T'  => 'Ţ Ť Ŧ',
516    'u'  => 'ù ú û ü ũ ū ŭ ů ű ų ǔ ǖ ǘ ǚ ǜ ư ụ ủ ứ ừ ử ữ ự',
517    'U'  => 'Ù Ú Û Ü Ũ Ū Ŭ Ů Ű Ų Ǔ Ǖ Ǘ Ǚ Ǜ Ư Ụ Ủ Ứ Ừ Ử Ữ Ự',
518    'w'  => 'ŵ ẁ ẃ ẅ',
519    'W'  => 'Ŵ Ẁ Ẃ Ẅ',
520    'y'  => 'ý ÿ ỳ ỵ ỷ ỹ ŷ',
521    'Y'  => 'Ý Ÿ Ỳ Ỵ Ỷ Ỹ Ŷ',
522    'z'  => 'ź ż ž',
523    'Z'  => 'Ź Ż Ž',
524    'ae' => 'ǽ',
525    'AE' => 'Ǽ',
526    'ij' => 'ij',
527    'IJ' => 'IJ',
528    'oe' => 'œ',
529    'OE' => 'Œ',
530   
531  // Greek
532   
533    'α'  => 'ά',
534    'Α'  => 'Ά',
535    'ε'  => 'έ',
536    'Ε'  => 'Έ',
537    'μ'  => 'µ',
538    'η'  => 'ή',
539    'Η'  => 'Ή',
540    'ι'  => 'ί ϊ ΐ',
541    'Ι'  => 'Ί Ϊ',
542    'ο'  => 'ό',
543    'Ο'  => 'Ό',
544    'σ'  => 'ς',
545    'υ'  => 'ύ ϋ ΰ',
546    'Υ'  => 'Ύ Ϋ',
547    'ω'  => 'ώ',
548    'Ω'  => 'Ώ',
549   
550  // Cyrillic
551   
552    'г'  => 'ґ ғ',
553    'Г'  => 'Ґ Ғ',
554    'ж'  => 'җ',
555    'Ж'  => 'Җ',
556    'к'  => 'қ ҝ',
557    'К'  => 'Қ Ҝ',
558    'н'  => 'ң',
559    'Н'  => 'Ң',
560    'х'  => 'ҳ',
561    'Х'  => 'Ҳ',
562    'ч'  => 'ҹ',
563    'Ч'  => 'Ҹ',
564   
565  );
566  // Exits immediately without changing the parameter, if the configuration
567  // is set on "case sensitive and accent sensitive".
568  if (!isset($Conf) or
569    $Conf != 1 and
570    $Conf != 2 and
571    $Conf != 3
572  ) return $Username;
573 
574  // $v remembers if the given parameter was an array or not
575  $s2 = ($v = (is_array($Username))) ? $Username : array(0 => $Username);
576 
577  // Builds an array of characters that must be replaced
578  // $rep_char is the replacement character ; $char_rep_arr is an array of
579  // characters which have to be replaced. ie :
580  // if
581  // $LCAS_lang['char_replacement_set'][$conf['insensitive_case_logon']]['e'] ='é è'
582  // then
583  // $char_rep_arr['é'] = 'e' ; $char_rep_arr['è'] = 'e'.
584  $char_rep_arr = array();
585  foreach (
586   $LCAS_lang['char_replacement_set'][$Conf]
587   as $rep_char => $char_rep_list
588  ) {
589    $t = explode(' ', $char_rep_list);
590    foreach ($t as $c) $char_rep_arr[$c] = $rep_char;
591  }
592 
593  // Replacement in each string of $s2 of the characters
594  // that needs to be replaced
595  $r = array();
596  foreach ($s2 as $s) {
597    $t = LCAS_mbStringToArray($s); $t2 ='';
598    foreach ($t as $c) {
599      if (array_key_exists($c, $char_rep_arr))
600       $t2.= $char_rep_arr[$c];
601      else
602       $t2.= $c;
603    }
604    $r[] = $t2;
605  }
606 
607  // Return of the result
608  if ($v) return $r;
609  else return $r[0];
610}
611
612
613
614
615
616
617
618
619
620
621
622
623/* Function called from main.inc.php to send validation email */
624function LCAS_SendMail2User($typemail, $id, $username, $password, $email, $confirm)
625{
626  global $conf;
627
628  $conf_LCAS= unserialize($conf['LoginCaseAccentsSensitivity']);
629 
630        include_once(PHPWG_ROOT_PATH.'include/functions_mail.inc.php');
631 
632        $infos1_perso = "";
633  $infos2_perso = "";
634
635/* We have to get the user's language in database */
636  $query ='
637SELECT user_id, language
638FROM '.USER_INFOS_TABLE.'
639WHERE user_id = '.$id.'
640;';
641  $data = pwg_db_fetch_assoc(pwg_query($query));
642
643/* Check if user is already registered (profile changing) - If not (new registration), language is set to current gallery language */
644  if (empty($data))
645  {
646/* And switch gallery to this language before using personalized and multilangual contents */
647    $language = pwg_get_session_var( 'lang_switch', $user['language'] );
648    switch_lang_to($language);
649  }
650  else
651  {
652/* And switch gallery to this language before using personalized and multilangual contents */
653    $language = $data['language']; /* Usefull for debugging */
654    switch_lang_to($data['language']);
655    load_language('plugin.lang', LCAS_PATH);
656  }
657
658  switch($typemail)
659  {
660    case 1:
661      $subject = '['.$conf['gallery_title'].'] '.l10n_args(get_l10n_args('Add of %s', stripslashes($username)));
662      $password = $password <> '' ? $password : l10n('LCAS_empty_pwd');
663     
664      if (isset($conf_LCAS[9]) and $conf_LCAS[9] <> '')
665      {
666        if (function_exists('get_user_language_desc'))
667        {
668          $infos1_perso = get_user_language_desc($conf_LCAS[9])."\n\n";
669        }
670        else $infos1_perso = l10n($conf_LCAS[9])."\n\n"; 
671      }
672     
673      break;
674     
675    case 2:
676      $subject = '['.$conf['gallery_title'].'] '.l10n_args(get_l10n_args('Update of %s', stripslashes($username)));
677      $password = $password <> '' ? $password : l10n('LCAS_empty_pwd');
678
679      break;
680       
681    case 3:
682      $subject = '['.$conf['gallery_title'].'] '.l10n_args(get_l10n_args('Update of %s', stripslashes($username)));
683      $password = $password <> '' ? $password : l10n('LCAS_no_update_pwd');
684
685      break;
686  }
687
688  if (isset($conf_LCAS[0]) and $conf_LCAS[0] == 'true')
689  {
690    $infos1 = array(
691      get_l10n_args('infos_mail %s', stripslashes($username)),
692      get_l10n_args('User: %s', stripslashes($username)),
693      get_l10n_args('Password: %s', $password),
694      get_l10n_args('Email: %s', $email),
695      get_l10n_args('', ''),
696    );
697  }
698
699
700  if ( isset($conf_LCAS[1]) and $conf_LCAS[1] == 'true' and $confirm)
701  {
702    $infos2 = array
703    (
704      get_l10n_args('Link: %s', AddConfirmMail($id, $email)),
705      get_l10n_args('', ''),
706    );
707
708    if (isset($conf_LCAS[10]) and $conf_LCAS[10] <> '')
709    {
710      if (function_exists('get_user_language_desc'))
711      {
712        $infos2_perso = get_user_language_desc($conf_LCAS[10])."\n\n";
713      }
714      else $infos2_perso = l10n($conf_LCAS[10])."\n\n";
715    }
716  }
717
718/* Sending the email with subject and contents */
719  pwg_mail($email, array(
720    'subject' => $subject,
721    'content' => (isset($infos1) ? $infos1_perso.l10n_args($infos1)."\n\n" : "").(isset($infos2) ? $infos2_perso.l10n_args($infos2)."\n\n" : "").get_absolute_root_url(),
722  ));
723
724/* Switching back to default language */
725switch_lang_back();
726}
727
728
729/* Function called from LCAS_admin.php and main.inc.php to get the plugin version and name */
730function LCAS_PluginInfos($dir)
731{
732  $path = $dir;
733
734  $plg_data = implode( '', file($path.'main.inc.php') );
735  if ( preg_match("|Plugin Name: (.*)|", $plg_data, $val) )
736  {
737    $plugin['name'] = trim( $val[1] );
738  }
739  if (preg_match("|Version: (.*)|", $plg_data, $val))
740  {
741    $plugin['version'] = trim($val[1]);
742  }
743  if ( preg_match("|Plugin URI: (.*)|", $plg_data, $val) )
744  {
745    $plugin['uri'] = trim($val[1]);
746  }
747  if ($desc = load_language('description.txt', $path.'/', array('return' => true)))
748  {
749    $plugin['description'] = trim($desc);
750  }
751  elseif ( preg_match("|Description: (.*)|", $plg_data, $val) )
752  {
753    $plugin['description'] = trim($val[1]);
754  }
755  if ( preg_match("|Author: (.*)|", $plg_data, $val) )
756  {
757    $plugin['author'] = trim($val[1]);
758  }
759  if ( preg_match("|Author URI: (.*)|", $plg_data, $val) )
760  {
761    $plugin['author uri'] = trim($val[1]);
762  }
763  if (!empty($plugin['uri']) and strpos($plugin['uri'] , 'extension_view.php?eid='))
764  {
765    list( , $extension) = explode('extension_view.php?eid=', $plugin['uri']);
766    if (is_numeric($extension)) $plugin['extension'] = $extension;
767  }
768// IMPORTANT SECURITY !
769  $plugin = array_map('htmlspecialchars', $plugin);
770
771  return $plugin ;
772}
773
774
775// Tri les doublons
776function CompareTransformedUser($a, $b)
777{
778        return strcmp($a['transformed'], $b['transformed']);
779}
780
781
782// Fonctionnel mais optimisable
783function LCAS_GetDuplicates($source) {
784        $users      = array();
785        $duplicates = array();
786       
787        // Liste des utilisateurs uniques
788        foreach($source as $user) {
789                if (isset($users[$user['transformed']])) {
790                        $users[$user['transformed']] += 1;
791                }
792                else {
793                        $users[$user['transformed']] = 1;
794                }
795        }
796       
797        // On récupère les doublons
798        foreach($source as $user) {
799                if ($users[$user['transformed']] > 1) {
800                        array_push($duplicates, $user);
801                }
802        }
803       
804        // Trier le tableau
805        usort($duplicates, 'CompareTransformedUser');
806       
807        return $duplicates;
808}
809
810
811/**
812 * Retreive duplicate users according of case and or accent sensitivity
813 *
814 * @param : $rule for LCAS_change_case())
815 *
816 * @return : List of duplicate $username
817 *
818 */
819function LCAS_get_user_list($rule)
820{
821        global $conf, $page;
822 
823  $users = array();
824
825        /* search users depending expiration date */
826  $query = '
827SELECT DISTINCT u.'.$conf['user_fields']['id'].' AS id,
828                u.'.$conf['user_fields']['username'].' AS username,
829                u.'.$conf['user_fields']['email'].' AS email
830FROM '.USERS_TABLE.' AS u
831;';
832
833        $result = pwg_query($query);
834     
835  while ($row = pwg_db_fetch_assoc($result))
836  {
837        $user = $row;
838        $user['transformed'] = LCAS_change_case($user['username'], $rule); 
839    array_push($users, $user);
840        }
841
842        return LCAS_GetDuplicates($users);
843}
844
845
846// Cleaning obsolete files at plugin upgrade
847function LCAS_clean_obsolete_files()
848{
849  if (file_exists(LCAS_PATH.'obsolete.list')
850    and $old_files = file(LCAS_PATH.'obsolete.list', FILE_IGNORE_NEW_LINES)
851    and !empty($old_files))
852  {
853    array_push($old_files, 'obsolete.list');
854    foreach($old_files as $old_file)
855    {
856      $path = LCAS_PATH.$old_file;
857      if (is_file($path))
858      {
859        @unlink($path);
860      }
861    }
862  }
863}
864
865
866/**
867 * Function called from main.inc.php - For test on username case sensitivity
868 * Have to be deleted before first release build
869 *
870 * @param : $username typed in by user for identification
871 *
872 * @return : $username found in database
873 *
874 */
875function LCAS_SearchCaseUsername($username, $rule)
876{
877  global $conf;
878
879  $u_d1 = $username;
880  $username = LCAS_change_case($username, $rule);
881  $u_d2 = $username;
882
883  if (isset($username))
884  {   
885    $LCAS_users = array();
886   
887    $q = pwg_query("
888      SELECT ".$conf['user_fields']['username']." AS username
889      FROM `".USERS_TABLE."`;
890    ");
891    while ($r = pwg_db_fetch_assoc($q))
892     $LCAS_users[$r['username']] = LCAS_change_case($r['username'], $rule);
893     // $LCAS_users est maintenant un tableau associatif où la clé est le compte tel qu'enregistré en DB,
894     // et la valeur est ce même compte, écrit selon LCAS_change_case() pour la règle en cours
895     
896    $user_found = array_search($username, $LCAS_users);
897    // $user_found vaut false si le username actuellement testé ne fait pas partie des valeurs de $LCAS_users ;
898    // sinon $user_found vaut la clé dans $LCAS_users, correspondant au compte trouvé.
899    // Donc le compte tel qu'écrit en DB, mais reconnu tel qu'écrit selon LCAS_change_case() pour la règle en cours
900   
901    $username = ($user_found === false) ? $username : $user_found;
902
903    return isset($username) ? $username : '';
904  }
905}
906
907
908/*
909 * str_from_var3($var)
910 * returns a string easing array var informations displaying in Piwigo :
911 *   _ the string return value starts with"<p style = "text-align:left;">" ;
912 *   _ all "TAB" characters (chr(10)) are replaced by "<br>" ;
913 *   _ all spaces are replaced by "&nbsp;".
914 *
915 * @param
916 *   $var : variable to display
917 * @return
918 *   string easy to display in Piwigo
919 */
920function str_from_var3($var) {
921  return
922   '<p style = "text-align:left;">'.
923   str_replace(
924    chr(10),'<br>',
925    str_replace(' ','&nbsp;', print_r /* var_dump */ ($var,true))
926   ).
927   '</p>';
928}
929
930
931// DebugLog function
932function DebugLog($var1, $var2, $var3, $var4, $var5)
933{
934   $fo=fopen (LCAS_PATH.'admin/debuglog.txt','a') ;
935   fwrite($fo,"======================\n") ;
936   fwrite($fo,'le ' . date('D, d M Y H:i:s') . "\r\n");
937   fwrite($fo, "\n" . $var1 . "\r\n") ;
938   fwrite($fo, "\n" . $var2 . "\r\n") ;
939   fwrite($fo, "\n" . $var3 . "\r\n") ;
940   fwrite($fo, "\n" . $var4 . "\r\n") ;
941   fwrite($fo, "\n" . $var5 . "\r\n") ;
942   fclose($fo) ;
943}
944?>
Note: See TracBrowser for help on using the repository browser.