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

Revision 8202, 21.5 KB checked in by Eric, 9 years ago (diff)

bug 2069 : Refactory with use of LCAS_change_case() function and add of accents sensitivity check on logon (tests under progress)

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/*
29 * Changes the characters of the given string as stated by values of
30 * $conf['insensitive_case_logon'] and $LCAS_lang['char_replacement_set'].
31 *
32 * @param mix s: string, or array of strings, to evaluate
33 *
34 * @return : string, or array of strings, modified as stated
35*/
36function LCAS_change_case($Username, $Conf)
37{
38  $LCAS_lang                         = array();
39  $LCAS_lang['char_replacement_set'] = array();
40
41
42
43  // 0 : case sensitive, accents sensitive
44  $LCAS_lang['char_replacement_set'][1] = array(
45  // 1 : case insensitive, accents sensitive
46   
47  // Latin
48   
49    'a'  => 'A',
50    'à'  => 'À',
51    'â'  => 'Â',
52    'á'  => 'Á',
53    'ã'  => 'Ã',
54    'ä'  => 'Ä',
55    'å'  => 'Å',
56    'ā'  => 'Ā',
57    'ă'  => 'Ă',
58    'ą'  => 'Ą',
59    'ǻ'  => 'Ǻ',
60    'ạ'  => 'Ạ',
61    'ả'  => 'Ả',
62    'ấ'  => 'Ấ',
63    'ầ'  => 'Ầ',
64    'ẩ'  => 'Ẩ',
65    'ẫ'  => 'Ẫ',
66    'ậ'  => 'Ậ',
67    'ắ'  => 'Ắ',
68    'ằ'  => 'Ằ',
69    'ẳ'  => 'Ẳ',
70    'ẵ'  => 'Ẵ',
71    'ặ'  => 'Ặ',
72   
73    'b'  => 'B',
74   
75    'c'  => 'C',
76    'ç'  => 'Ç',
77    'ć'  => 'Ć',
78    'ĉ'  => 'Ĉ',
79    'ċ'  => 'Ċ',
80    'č'  => 'Č',
81
82    'd'  => 'D',
83    'ď'  => 'Ď',
84    'đ'  => 'Đ',
85   
86    'e'  => 'E',
87    'è'  => 'È',
88    'é'  => 'É',
89    'ê'  => 'Ê',
90    'ë'  => 'Ë',
91    'ē'  => 'Ē',
92    'ĕ'  => 'Ĕ',
93    'ė'  => 'Ė',
94    'ę'  => 'Ę',
95    'ě'  => 'Ě',
96    'ẹ'  => 'Ẹ',
97    'ẻ'  => 'Ẻ',
98    'ẽ'  => 'Ẽ',
99    'ế'  => 'Ế',
100    'ề'  => 'Ề',
101    'ể'  => 'Ể',
102    'ễ'  => 'Ễ',
103    'ệ'  => 'Ệ',
104   
105    'f'  => 'F ƒ',
106   
107    'g'  => 'G',
108    'ĝ'  => 'Ĝ',
109    'ğ'  => 'Ğ',
110    'ġ'  => 'Ġ',
111    'ģ'  => 'Ģ',
112   
113    'h'  => 'H',
114    'ĥ'  => 'Ĥ',
115    'ħ'  => 'Ħ',
116   
117    'i'  => 'I ı İ',
118    'ì'  => 'Ì',
119    'í'  => 'Í',
120    'î'  => 'Î',
121    'ï'  => 'Ï',
122    'ĩ'  => 'Ĩ',
123    'ī'  => 'Ī',
124    'ĭ'  => 'Ĭ',
125    'į'  => 'Į',
126    'ǐ'  => 'Ǐ',
127    'ỉ'  => 'Ỉ',
128    'ị'  => 'Ị',
129   
130    'j'  => 'J',
131    'ĵ'  => 'Ĵ',
132   
133    'k'  => 'K',
134    'ķ'  => 'Ķ',
135   
136    'l'  => 'L',
137    'ĺ'  => 'Ĺ',
138    'ļ'  => 'Ļ',
139    'ľ'  => 'Ľ',
140    'ŀ'  => 'Ŀ',
141    'ł'  => 'Ł',
142   
143    'm'  => 'M',
144   
145    'n'  => 'N',
146    'ñ'  => 'Ñ',
147    'ń'  => 'Ń',
148    'ņ'  => 'Ņ',
149    'ň'  => 'Ň',
150   
151    'o'  => 'O',
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   
177    'p'  => 'P',
178   
179    'q'  => 'Q ĸ',
180   
181    'r'  => 'R',
182    'ŕ'  => 'Ŕ',
183    'ŗ'  => 'Ŗ',
184    'ř'  => 'Ř',
185   
186    's'  => 'S ſ',
187    'ś'  => 'Ś',
188    'ŝ'  => 'Ŝ',
189    'ş'  => 'Ş',
190    'š'  => 'Š',
191    'ss' => 'ß',
192   
193    't'  => 'T',
194    'ţ'  => 'Ţ',
195    'ť'  => 'Ť',
196    'ŧ'  => 'Ŧ',
197   
198    'u'  => 'U',
199    'ù'  => 'Ù',
200    'ú'  => 'Ú',
201    'û'  => 'Û',
202    'ü'  => 'Ü',
203    'ũ'  => 'Ũ',
204    'ū'  => 'Ū',
205    'ŭ'  => 'Ŭ',
206    'ů'  => 'Ů',
207    'ű'  => 'Ű',
208    'ų'  => 'Ų',
209    'ǔ'  => 'Ǔ',
210    'ǖ'  => 'Ǖ',
211    'ǘ'  => 'Ǘ',
212    'ǚ'  => 'Ǚ',
213    'ǜ'  => 'Ǜ',
214    'ư'  => 'Ư',
215    'ụ'  => 'Ụ',
216    'ủ'  => 'Ủ',
217    'ứ'  => 'Ứ',
218    'ừ'  => 'Ừ',
219    'ử'  => 'Ử',
220    'ữ'  => 'Ữ',
221    'ự'  => 'Ự',
222   
223    'v'  => 'V',
224   
225    'w'  => 'W',
226    'ŵ'  => 'Ŵ',
227    'ẁ'  => 'Ẁ',
228    'ẃ'  => 'Ẃ',
229    'ẅ'  => 'Ẅ',
230   
231    'x'  => 'X',
232   
233    'y'  => 'Y',
234    'ý'  => 'Ý',
235    'ÿ'  => 'Ÿ',
236    'ỳ'  => 'Ỳ',
237    'ỵ'  => 'Ỵ',
238    'ỷ'  => 'Ỷ',
239    'ỹ'  => 'Ỹ',
240    'ŷ'  => 'Ŷ',
241   
242    'z'  => 'Z',
243    'ź'  => 'Ź',
244    'ż'  => 'Ż',
245    'ž'  => 'Ž',
246   
247    'ae' => 'æ Æ',
248    'aé' => 'ǽ Ǽ',
249    'ð'  => 'Ð',
250    'ə'  => 'Ə',
251    'ij' => 'ij IJ',
252    'ŋ'  => 'Ŋ',
253    'oe' => 'œ Œ',
254    'þ'  => 'Þ',
255   
256  // Greek
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   
292  // Cyrillic
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
356  $LCAS_lang['char_replacement_set'][2] = array(
357  // 2 : case insensitive, accents insensitive
358   
359  // Latin
360   
361    'a'  => 'A à À â Â á Á ã Ã ä Ä å Å ā Ā ă Ă ą Ą ǻ Ǻ ạ Ạ ả Ả ấ Ấ ầ Ầ ẩ Ẩ ẫ Ẫ ậ Ậ ắ Ắ ằ Ằ ẳ Ẳ ẵ Ẵ ặ Ặ @',
362    'b'  => 'B',
363    'c'  => 'C ç Ç ć Ć ĉ Ĉ ċ Ċ č Č',
364    'd'  => 'D ď Ď đ Đ',
365    'e'  => 'E è È é É ê Ê ë Ë ē Ē ĕ Ĕ ė Ė ę Ę ě Ě ẹ Ẹ ẻ Ẻ ẽ Ẽ ế Ế ề Ề ể Ể ễ Ễ ệ Ệ',
366    'f'  => 'F ƒ',
367    'g'  => 'G ĝ Ĝ ğ Ğ ġ Ġ ģ Ģ',
368    'h'  => 'H ĥ Ĥ ħ Ħ',
369    'i'  => 'I ı İ ì Ì í Í î Î ï Ï ĩ Ĩ ī Ī ĭ Ĭ į Į ǐ Ǐ ỉ Ỉ ị Ị',
370    'j'  => 'J ĵ Ĵ',
371    'k'  => 'K ķ Ķ',
372    'l'  => 'L ĺ Ĺ ļ Ļ ľ Ľ ŀ Ŀ ł Ł',
373    'm'  => 'M',
374    'n'  => 'N ʼn ñ Ñ ń Ń ņ Ņ ň Ň',
375    'o'  => 'O ò Ò ó Ó ô Ô õ Õ ö Ö ø Ø ō Ō ŏ Ŏ ő Ő ơ Ơ ǒ Ǒ ǿ Ǿ ọ Ọ ỏ Ỏ ố Ố ồ Ồ ổ Ổ ỗ Ỗ ộ Ộ ớ Ớ ờ Ờ ở Ở ỡ Ỡ ợ Ợ',
376    'p'  => 'P',
377    'q'  => 'Q ĸ',
378    'r'  => 'R ŕ Ŕ ŗ Ŗ ř Ř',
379    's'  => 'S ś Ś ŝ Ŝ ş Ş š Š s ſ',
380    'ss' => 'ß',
381    't'  => 'T ţ Ţ ť Ť ŧ Ŧ',
382    'u'  => 'U ù Ù ú Ú û Û ü Ü ũ Ũ ū Ū ŭ Ŭ ů Ů ű Ű ų Ų ǔ Ǔ ǖ Ǖ ǘ Ǘ ǚ Ǚ ǜ Ǜ ư Ư ụ Ụ ủ Ủ ứ Ứ ừ Ừ ử Ử ữ Ữ ự Ự',
383    'v'  => 'V',
384    'w'  => 'W ŵ Ŵ ẁ Ẁ ẃ Ẃ ẅ Ẅ',
385    'x'  => 'X',
386    'y'  => 'Y ý Ý ÿ Ÿ ỳ Ỳ ỵ Ỵ ỷ Ỷ ỹ Ỹ ŷ Ŷ',
387    'z'  => 'Z ź Ź ż Ż ž Ž',
388    'ae' => 'æ Æ Ǽ ǽ',
389    'ð'  => 'Ð',
390    'ə'  => 'Ə',
391    'ij' => 'ij IJ',
392    'ŋ'  => 'Ŋ',
393    'oe' => 'œ Œ',
394    'þ'  => 'Þ',
395   
396  // Greek
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   
423  // Cyrillic
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
479  $LCAS_lang['char_replacement_set'][3] = array(
480  // 3 : case sensitive, accents insensitive
481   
482  // Latin
483   
484    'a'  => 'à â á ã ä å ā ă ą ǻ ạ ả ấ ầ ẩ ẫ ậ ắ ằ ẳ ẵ ặ @',
485    'A'  => 'À Â Á Ã Ä Å Ā Ă Ą Ǻ Ạ Ả Ấ Ầ Ẩ Ẫ Ậ Ắ Ằ Ẳ Ẵ Ặ',
486    'c'  => 'ç ć ĉ ċ č',
487    'C'  => 'Ç Ć Ĉ Ċ Č',
488    'd'  => 'ď đ',
489    'D'  => 'Ď Đ',
490    'e'  => 'è é ê ë ē ĕ ė ę ě ẹ ẻ ẽ ế ề ể ễ ệ',
491    'E'  => 'È É Ê Ë Ē Ĕ Ė Ę Ě Ẹ Ẻ Ẽ Ế Ề Ể Ễ Ệ',
492    'f'  => 'ƒ',
493    'g'  => 'ĝ ğ ġ ģ',
494    'G'  => 'Ĝ Ğ Ġ Ģ',
495    'h'  => 'ĥ ħ',
496    'H'  => 'Ĥ Ħ',
497    'i'  => 'ì í î ï ĩ ī ĭ į ǐ ỉ ị ı',
498    'I'  => 'Ì Í Î Ï Ĩ Ī Ĭ Į Ǐ Ỉ Ị İ',
499    'j'  => 'ĵ',
500    'J'  => 'Ĵ',
501    'k'  => 'ķ',
502    'K'  => 'Ķ',
503    'l'  => 'ĺ ļ ľ ŀ ł',
504    'L'  => 'Ĺ Ļ Ľ Ŀ Ł',
505    'n'  => 'ñ ń ņ ň ʼn',
506    'N'  => 'Ñ Ń Ņ Ň',
507    'o'  => 'ò ó ô õ ö ø ō ŏ ő ơ ǒ ǿ ọ ỏ ố ồ ổ ỗ ộ ớ ờ ở ỡ ợ',
508    'O'  => 'Ò Ó Ô Õ Ö Ø Ō Ŏ Ő Ơ Ǒ Ǿ Ọ Ỏ Ố Ồ Ổ Ỗ Ộ Ớ Ờ Ở Ỡ Ợ',
509    'q'  => 'ĸ',
510    'r'  => 'ŕ ŗ ř',
511    'R'  => 'Ŕ Ŗ Ř',
512    's'  => 'ś ŝ ş š ſ',
513    'S'  => 'Ś Ŝ Ş Š',
514    'ss' => 'ß',
515    't'  => 'ţ ť ŧ',
516    'T'  => 'Ţ Ť Ŧ',
517    'u'  => 'ù ú û ü ũ ū ŭ ů ű ų ǔ ǖ ǘ ǚ ǜ ư ụ ủ ứ ừ ử ữ ự',
518    'U'  => 'Ù Ú Û Ü Ũ Ū Ŭ Ů Ű Ų Ǔ Ǖ Ǘ Ǚ Ǜ Ư Ụ Ủ Ứ Ừ Ử Ữ Ự',
519    'w'  => 'ŵ ẁ ẃ ẅ',
520    'W'  => 'Ŵ Ẁ Ẃ Ẅ',
521    'y'  => 'ý ÿ ỳ ỵ ỷ ỹ ŷ',
522    'Y'  => 'Ý Ÿ Ỳ Ỵ Ỷ Ỹ Ŷ',
523    'z'  => 'ź ż ž',
524    'Z'  => 'Ź Ż Ž',
525    'ae' => 'ǽ',
526    'AE' => 'Ǽ',
527    'ij' => 'ij',
528    'IJ' => 'IJ',
529    'oe' => 'œ',
530    'OE' => 'Œ',
531   
532  // Greek
533   
534    'α'  => 'ά',
535    'Α'  => 'Ά',
536    'ε'  => 'έ',
537    'Ε'  => 'Έ',
538    'μ'  => 'µ',
539    'η'  => 'ή',
540    'Η'  => 'Ή',
541    'ι'  => 'ί ϊ ΐ',
542    'Ι'  => 'Ί Ϊ',
543    'ο'  => 'ό',
544    'Ο'  => 'Ό',
545    'σ'  => 'ς',
546    'υ'  => 'ύ ϋ ΰ',
547    'Υ'  => 'Ύ Ϋ',
548    'ω'  => 'ώ',
549    'Ω'  => 'Ώ',
550   
551  // Cyrillic
552   
553    'г'  => 'ґ ғ',
554    'Г'  => 'Ґ Ғ',
555    'ж'  => 'җ',
556    'Ж'  => 'Җ',
557    'к'  => 'қ ҝ',
558    'К'  => 'Қ Ҝ',
559    'н'  => 'ң',
560    'Н'  => 'Ң',
561    'х'  => 'ҳ',
562    'Х'  => 'Ҳ',
563    'ч'  => 'ҹ',
564    'Ч'  => 'Ҹ',
565   
566  );
567  // Exits immediately without changing the parameter, if the configuration
568  // is set on "case sensitive and accent sensitive".
569  if (!isset($Conf) or
570    $Conf != 1 and
571    $Conf != 2 and
572    $Conf != 3
573  ) return $Username;
574 
575  // $v remembers if the given parameter was an array or not
576  $s2 = ($v = (is_array($Username))) ? $Username : array(0 => $Username);
577 
578  // Builds an array of characters that must be replaced
579  // $rep_char is the replacement character ; $char_rep_arr is an array of
580  // characters which have to be replaced. ie :
581  // if
582  // $LCAS_lang['char_replacement_set'][$conf['insensitive_case_logon']]['e'] ='é è'
583  // then
584  // $char_rep_arr['é'] = 'e' ; $char_rep_arr['è'] = 'e'.
585  $char_rep_arr = array();
586  foreach (
587   $LCAS_lang['char_replacement_set'][$Conf]
588   as $rep_char => $char_rep_list
589  ) {
590    $t = explode(' ', $char_rep_list);
591    foreach ($t as $c) $char_rep_arr[$c] = $rep_char;
592  }
593 
594  // Replacement in each string of $s2 of the characters
595  // that needs to be replaced
596  $r = array();
597  foreach ($s2 as $s) {
598    $t = LCAS_mbStringToArray($s); $t2 ='';
599    foreach ($t as $c) {
600      if (array_key_exists($c, $char_rep_arr))
601       $t2.= $char_rep_arr[$c];
602      else
603       $t2.= $c;
604    }
605    $r[] = $t2;
606  }
607 
608  // Return of the result
609  if ($v) return $r;
610  else return $r[0];
611}
612
613
614
615
616
617
618
619
620
621
622
623
624/* Function called from main.inc.php to send validation email */
625function LCAS_SendMail2User($typemail, $id, $username, $password, $email, $confirm)
626{
627  global $conf;
628
629  $conf_LCAS= unserialize($conf['LoginCaseAccentsSensitivity']);
630 
631        include_once(PHPWG_ROOT_PATH.'include/functions_mail.inc.php');
632 
633        $infos1_perso = "";
634  $infos2_perso = "";
635
636/* We have to get the user's language in database */
637  $query ='
638SELECT user_id, language
639FROM '.USER_INFOS_TABLE.'
640WHERE user_id = '.$id.'
641;';
642  $data = pwg_db_fetch_assoc(pwg_query($query));
643
644/* Check if user is already registered (profile changing) - If not (new registration), language is set to current gallery language */
645  if (empty($data))
646  {
647/* And switch gallery to this language before using personalized and multilangual contents */
648    $language = pwg_get_session_var( 'lang_switch', $user['language'] );
649    switch_lang_to($language);
650  }
651  else
652  {
653/* And switch gallery to this language before using personalized and multilangual contents */
654    $language = $data['language']; /* Usefull for debugging */
655    switch_lang_to($data['language']);
656    load_language('plugin.lang', LCAS_PATH);
657  }
658
659  switch($typemail)
660  {
661    case 1:
662      $subject = '['.$conf['gallery_title'].'] '.l10n_args(get_l10n_args('Add of %s', stripslashes($username)));
663      $password = $password <> '' ? $password : l10n('LCAS_empty_pwd');
664     
665      if (isset($conf_LCAS[9]) and $conf_LCAS[9] <> '')
666      {
667        if (function_exists('get_user_language_desc'))
668        {
669          $infos1_perso = get_user_language_desc($conf_LCAS[9])."\n\n";
670        }
671        else $infos1_perso = l10n($conf_LCAS[9])."\n\n"; 
672      }
673     
674      break;
675     
676    case 2:
677      $subject = '['.$conf['gallery_title'].'] '.l10n_args(get_l10n_args('Update of %s', stripslashes($username)));
678      $password = $password <> '' ? $password : l10n('LCAS_empty_pwd');
679
680      break;
681       
682    case 3:
683      $subject = '['.$conf['gallery_title'].'] '.l10n_args(get_l10n_args('Update of %s', stripslashes($username)));
684      $password = $password <> '' ? $password : l10n('LCAS_no_update_pwd');
685
686      break;
687  }
688
689  if (isset($conf_LCAS[0]) and $conf_LCAS[0] == 'true')
690  {
691    $infos1 = array(
692      get_l10n_args('infos_mail %s', stripslashes($username)),
693      get_l10n_args('User: %s', stripslashes($username)),
694      get_l10n_args('Password: %s', $password),
695      get_l10n_args('Email: %s', $email),
696      get_l10n_args('', ''),
697    );
698  }
699
700
701  if ( isset($conf_LCAS[1]) and $conf_LCAS[1] == 'true' and $confirm)
702  {
703    $infos2 = array
704    (
705      get_l10n_args('Link: %s', AddConfirmMail($id, $email)),
706      get_l10n_args('', ''),
707    );
708
709    if (isset($conf_LCAS[10]) and $conf_LCAS[10] <> '')
710    {
711      if (function_exists('get_user_language_desc'))
712      {
713        $infos2_perso = get_user_language_desc($conf_LCAS[10])."\n\n";
714      }
715      else $infos2_perso = l10n($conf_LCAS[10])."\n\n";
716    }
717  }
718
719/* Sending the email with subject and contents */
720  pwg_mail($email, array(
721    'subject' => $subject,
722    'content' => (isset($infos1) ? $infos1_perso.l10n_args($infos1)."\n\n" : "").(isset($infos2) ? $infos2_perso.l10n_args($infos2)."\n\n" : "").get_absolute_root_url(),
723  ));
724
725/* Switching back to default language */
726switch_lang_back();
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// Tri les doublons
775function CompareTransformedUser($a, $b)
776{
777        return strcmp($a['transformed'], $b['transformed']);
778}
779
780// Fonctionnel mais optimisable
781function LCAS_GetDuplicates($source) {
782        $users      = array();
783        $duplicates = array();
784       
785        // Liste des utilisateurs uniques
786        foreach($source as $user) {
787                if (isset($users[$user['transformed']])) {
788                        $users[$user['transformed']] += 1;
789                }
790                else {
791                        $users[$user['transformed']] = 1;
792                }
793        }
794       
795        // On récupère les doublons
796        foreach($source as $user) {
797                if ($users[$user['transformed']] > 1) {
798                        array_push($duplicates, $user);
799                }
800        }
801       
802        // Trier le tableau
803        usort($duplicates, 'CompareTransformedUser');
804       
805        return $duplicates;
806}
807
808/* Get all users to display the number of days since their last visit */
809function LCAS_get_user_list($rule)
810{
811        global $conf, $page;
812 
813  $users = array();
814
815        /* search users depending expiration date */
816  $query = '
817SELECT DISTINCT u.'.$conf['user_fields']['id'].' AS id,
818                u.'.$conf['user_fields']['username'].' AS username,
819                u.'.$conf['user_fields']['email'].' AS email
820FROM '.USERS_TABLE.' AS u
821;';
822
823        $result = pwg_query($query);
824     
825  while ($row = pwg_db_fetch_assoc($result))
826  {
827        $user = $row;
828        $user['transformed'] = LCAS_change_case($user['username'], $rule); 
829    array_push($users, $user);
830        }
831
832        return LCAS_GetDuplicates($users);
833}
834
835function LCAS_clean_obsolete_files()
836{
837  if (file_exists(LCAS_PATH.'obsolete.list')
838    and $old_files = file(LCAS_PATH.'obsolete.list', FILE_IGNORE_NEW_LINES)
839    and !empty($old_files))
840  {
841    array_push($old_files, 'obsolete.list');
842    foreach($old_files as $old_file)
843    {
844      $path = LCAS_PATH.$old_file;
845      if (is_file($path))
846      {
847        @unlink($path);
848      }
849    }
850  }
851}
852
853/**
854 * Function called from main.inc.php - For test on username case sensitivity
855 * Have to be deleted before first release build
856 *
857 * @param : $username typed in by user for identification
858 *
859 * @return : $username found in database
860 *
861 */
862/*function LCAS_SearchCaseUsername($username)
863{
864  global $conf;
865 
866  if (isset($username))
867  {
868    $query = "
869SELECT ".$conf['user_fields']['username']."
870FROM ".USERS_TABLE."
871WHERE LOWER(".$conf['user_fields']['username'].") = '".strtolower($username)."'
872LIMIT 1;";
873
874    list($username) = pwg_db_fetch_row(pwg_query($query));
875
876    return isset($username) ? $username : '';
877  }
878}*/
879
880
881// DebugLog function
882function DebugLog($var1, $var2, $var3, $var4, $var5)
883{
884   $fo=fopen (LCAS_PATH.'admin/debuglog.txt','a') ;
885   fwrite($fo,"======================\n") ;
886   fwrite($fo,'le ' . date('D, d M Y H:i:s') . "\r\n");
887   fwrite($fo, "\n" . $var1 . "\r\n") ;
888   fwrite($fo, "\n" . $var2 . "\r\n") ;
889   fwrite($fo, "\n" . $var3 . "\r\n") ;
890   fwrite($fo, "\n" . $var4 . "\r\n") ;
891   fwrite($fo, "\n" . $var5 . "\r\n") ;
892   fclose($fo) ;
893}
894?>
Note: See TracBrowser for help on using the repository browser.