LSformRule :: password : Added minValidRegex parameter and use preg_match() function...
[ldapsaisie.git] / public_html / conf / LSobjects / config.LSobjects.LSpeople.php
1 <?php
2 /*******************************************************************************
3  * Copyright (C) 2007 Easter-eggs
4  * http://ldapsaisie.labs.libre-entreprise.org
5  *
6  * Author: See AUTHORS file in top-level directory.
7  *
8  * This program is free software; you can redistribute it and/or
9  * modify it under the terms of the GNU General Public License version 2
10  * as published by the Free Software Foundation.
11  *
12  * This program is distributed in the hope that it will be useful,
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15  * GNU General Public License for more details.
16  *
17  * You should have received a copy of the GNU General Public License
18  * along with this program; if not, write to the Free Software
19  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
20
21 ******************************************************************************/
22
23 $GLOBALS['LSobjects']['LSpeople'] = array (
24   'objectclass' => array(
25     'top',
26     'lspeople',
27     'posixAccount',
28     'sambaSamAccount',
29   ),
30   'rdn' => 'uid',
31   'container_dn' => 'ou=people',
32   
33   'container_auto_create' => array(
34     'objectclass' => array(
35       'top',
36       'organizationalUnit'
37     ),
38     'attrs' => array(
39       'ou' => 'people'
40     )
41   ),
42   
43   'before_modify' => 'valid',
44   'after_modify' => 'valid',
45   //'after_create' => 'createMaildirByFTP',
46   //'after_delete' => 'removeMaildirByFTP',
47   'display_name_format' => '%{cn}',
48   'label' => 'Users',
49   
50   // LSrelation
51   'LSrelation' => array(
52     'groups' => array(
53       'label' => 'Belongs to groups ...',
54       'emptyText' => "Doesn't belong to any group.",
55       'LSobject' => 'LSgroup',
56       'list_function' => 'listUserGroups',
57       'getkeyvalue_function' => 'getMemberKeyValue',
58       'update_function' => 'updateUserGroups',
59       'remove_function' => 'deleteOneMember',
60       'rename_function' => 'renameOneMember',
61       'canEdit_function' => 'canEditGroupRelation',
62       'canEdit_attribute' => 'uniqueMember',
63       'rights' => array(
64         'self' => 'r',
65         'admin' => 'w',
66         'admingroup' => 'w'
67       )
68     )
69   ),
70   
71   // LSform
72   'LSform' => array (
73     'ajaxSubmit' => 1,
74     // Layout
75     'layout' => array (
76       'Civilite' => array(
77         'label' => 'Civility',
78         'img' => 1, 
79         'args' => array (
80           'uid',
81           'personalTitle',
82           'givenName',
83           'sn',
84           'cn',
85           'mail',
86           'userPassword',
87           'description',
88           'jpegPhoto',
89           'lsGodfatherDn'
90         )
91       ),
92       'Posix' => array (
93         'label' => 'Posix',
94         'args' => array (
95           'uidNumber',
96           'gidNumber',
97           'loginShell',
98           'homeDirectory'
99         )
100       ),
101       'Samba' => array (
102         'label' => 'Samba',
103         'args' => array (
104           'sambaSID',
105           'sambaLMPassword',
106           'sambaNTPassword'
107         )
108       )
109     ), // fin Layout
110     'dataEntryForm' => array (
111       'simple' => array (
112         'label' => 'Simple',
113         'disabledLayout' => true,
114         'displayedElements' => array (
115           'uid',
116           'personalTitle',
117           'givenName',
118           'sn',
119           'cn',
120           'mail',
121           'userPassword'
122         ),
123         'defaultValues' => array (
124           'description' => 'Create with the simple data entry form',
125           'loginShell' => 'no',
126           'gidNumber' => '102001'
127         )
128       )
129     ) // fin dataEntryForm
130   ), // fin LSform
131   
132   'LSsearch' => array (
133     'attrs' => array (
134       'givenName',
135       'sn',
136       'cn',
137       'uid',
138       'mail'
139     ),
140     'params' => array (
141       'recursive' => true,
142     ),
143     'predefinedFilters' => array (
144       '(jpegPhoto=*)' => 'With photo',
145       '(!(jpegPhoto=*))' => 'Without photo'
146     ),
147     'extraDisplayedColumns' => array (
148       'mail' => array (
149         'label' => 'Mail',
150         'LSformat' => '%{mail}'
151       ),
152     )
153   ),
154   
155   // Attributes
156   'attrs' => array (
157   
158     /* ----------- start -----------*/
159     'uid' => array (
160       'label' => 'Identifier',
161       'ldap_type' => 'ascii',
162       'html_type' => 'text',
163       'html_options' => array(
164         'generate_value_format' => '%{givenName:1}.%{sn}',
165         'autoGenerateOnModify' => true,   // default : false
166         'withoutAccent' => 1,
167         'replaceSpaces' => '.',
168         'lowerCase' => 1
169       ),
170       'required' => 1,
171       'check_data' => array (
172         'regex' => array(
173           'msg' => "Identifier must contain alphanumeric values, dots (.) and dashes (-) only.",
174           'params' => array('regex' => '/^[a-zA-Z0-9-_\.]*$/')
175         ),
176       ),
177       'validation' => array (
178         array (
179           'filter' => 'uid=%{val}',
180           'result' => 0,
181           'msg' => 'This identifier is already used.'
182         )
183       ),
184       'rights' => array(
185         'self' => 'r',
186         'admin' => 'w',
187         'godfather' => 'r'
188       ),
189       'view' => 1,
190       'form' => array (
191         'modify' => 1,
192         'create' => 1
193       ),
194       'dependAttrs' => array(
195         'homeDirectory'
196       )
197     ),
198     /* ----------- end -----------*/
199
200     /* ----------- start -----------*/
201     'uidNumber' => array (
202       'label' => 'Numeric identifier',
203       'ldap_type' => 'numeric',
204       'html_type' => 'text',
205       'required' => 1,
206       'generate_function' => 'generate_uidNumber_withSambaDomainObject',
207       'check_data' => array (
208         'numeric' => array(
209           'msg' => "The numeric identifier must be an integer."
210         ),
211       ),
212       'validation' => array (
213         array (
214           'filter' => 'uidNumber=%{val}',
215           'result' => 0,
216           'msg' => 'This uid is already used.'
217         )
218       ),
219       'rights' => array(
220         'admin' => 'w'
221       ),
222       'view' => 1,
223       'form' => array (
224         'modify' => 0,
225       )
226     ),
227     /* ----------- end -----------*/
228
229     /* ----------- start -----------*/
230     'givenName' => array (
231       'label' => 'First Name',
232       'ldap_type' => 'ascii',
233       'html_type' => 'text',
234       'required' => 1,
235       'default_value' => 'toto',
236       'check_data' => array (
237         'alphanumeric' => array(
238           'msg' => 'The first name must contain alphanumeric values only.'
239         ),
240       ),
241       'rights' => array(
242         'self' => 'r',
243         'users' => 'r',
244         'admin' => 'w',
245         'godfather' => 'w'
246       ),
247       'view' => 1,
248       'form' => array (
249         'modify' => 1,
250         'create' => 1
251       ),
252       'onDisplay' => 'return_data'
253     ),
254     /* ----------- end -----------*/
255
256     /* ----------- start -----------*/
257     'sn' => array (
258       'label' => 'Last Name',
259       'ldap_type' => 'ascii',
260       'html_type' => 'text',
261       'required' => 1,
262       'rights' => array(
263         'self' => 'r',
264         'user' => 'r',
265         'admin' => 'w',
266         'godfather' => 'w'
267       ),
268       'view' => 1,
269       'form' => array (
270         'modify' => 1,
271         'create' => 1
272       )
273     ),
274     /* ----------- end -----------*/
275
276     /* ----------- start -----------*/
277     'cn' => array (
278       'label' => 'Full Name',
279       'ldap_type' => 'ascii',
280       'html_type' => 'text',
281       'html_options' => array(
282         'generate_value_format' => '%{givenName} %{sn}',
283         'autoGenerateOnModify' => true,   // default : false
284         'autoGenerateOnCreate' => true    // default : false
285       ),
286       'required' => 1,
287       'rights' => array(
288         'self' => 'r',
289         'user' => 'r',
290         'admin' => 'w',
291         'godfather' => 'w'
292       ),
293       'view' => 1,
294       'form' => array (
295         'modify' => 1,
296         'create' => 1
297       )
298     ),
299     /* ----------- end -----------*/
300
301     /* ----------- start -----------*/
302     'gidNumber' => array (
303       'label' => 'Main group',
304       'ldap_type' => 'numeric',
305       'html_type' => 'select_list',
306       'html_options' => array (
307         'possible_values' => array(
308           'OTHER_OBJECT' => array(
309             'object_type' => 'LSgroup',                      // Nom de l'objet à lister
310             'display_name_format' => '%{cn} (%{gidNumber})',   // Spécifie le attributs à lister pour le choix,
311                                                                // si non définie => utilisation du 'display_name_format'
312                                                                // de la définition de l'objet
313                                                 
314             'value_attribute' => 'gidNumber',   // Spécifie le attributs dont la valeur sera retournée par
315             /*'filter' =>                         // le formulaire spécifie les filtres de recherche pour
316               array (                           // l'établissement de la liste d'objets :
317                 array(                          // Premier filtre
318                   'filter' => 'cn=*a*',
319                   //'basedn' => 'o=company',
320                   'scope' => 'sub',
321                 )
322               )*/
323           )
324         )
325       ),
326       'multiple' => false,
327       'required' => 1,
328       'validation' => array (
329         array (
330           'msg' => "This group doesn't exist.",
331           'object_type' => 'LSgroup',           // 'object_type' : Permet definir le type d'objet recherchés
332           //'basedn' => 'o=company',                    // et d'utiliser les objectClass définis dans le fichier de configuration
333           'filter' => '(gidNumber=%{val})',       // pour la recherche
334           'result' => 1
335         )
336       ),
337       'rights' => array(
338         'admin' => 'w',
339         'godfather' => 'r'
340       ),
341       'view' => 1,
342       'form' => array (
343         'modify' => 1,
344         'create' => 1
345       )
346     ),
347     /* ----------- end -----------*/
348
349     /* ----------- start -----------*/
350     'loginShell' => array (
351       'label' => 'Command shell',
352       'help_info' => "Allow user to connect a POSIX system.",
353       'ldap_type' => 'boolean',
354       'ldap_options' => array (
355         'true_value' => '/bin/bash',
356         'false_value' => '/bin/false'
357       ),
358       'html_type' => 'boolean',
359       'required' => 1,
360       'default_value' => 'no',
361       'rights' => array(
362         'admin' => 'w'
363       ),
364       'view' => 1,
365       'form' => array (
366         'modify' => 1,
367         'create' => 1
368       )
369     ),
370     /* ----------- end -----------*/
371
372     /* ----------- start -----------*/
373     'sambaSID' => array (
374       'label' => 'Samba Identifier',
375       'ldap_type' => 'ascii',
376       'html_type' => 'text',
377       'required' => 1,
378       'generate_function' => 'generate_sambaUserSID',
379       'rights' => array(
380         'admin' => 'r'
381       ),
382       'form' => array (
383         'modify' => 0
384       )
385     ),
386     /* ----------- end -----------*/
387
388     /* ----------- start -----------*/
389     'homeDirectory' => array (
390       'label' => 'Home Directory',
391       'ldap_type' => 'ascii',
392       'html_type' => 'text',
393       'required' => 1,
394       'generate_function' => 'generate_homeDirectory',
395       'rights' => array(
396         'admin' => 'r'
397       ),
398       'view' => 1
399     ),
400     /* ----------- end -----------*/
401
402     /* ----------- start -----------*/
403     'mail' => array (
404       'label' => 'E-mail address',
405       'ldap_type' => 'ascii',
406       'html_type' => 'mail',
407       'html_options' => array(
408         'generate_value_format' => '%{givenName}.%{sn}@ls.com',
409         'withoutAccent' => 1,
410         'replaceSpaces' => '.',
411         'lowerCase' => 1
412       ),
413       'required' => 1,
414       'check_data' => array (
415         'email' => array(
416           'msg' => "Given email address is invalid.",
417           'params' => array('checkDomain' => false)
418         ),
419       ),
420       'rights' => array(
421         'self' => 'r',
422         'user' => 'r',
423         'admin' => 'w',
424         'godfather' => 'w'
425       ),
426       'view' => 1,
427       'form' => array (
428         'modify' => 1,
429         'create' => 1
430       )
431     ),
432     /* ----------- end -----------*/
433
434     /* ----------- start -----------*/
435     'personalTitle' => array (
436       'label' => 'Civility',
437       'ldap_type' => 'ascii',
438       'html_type' => 'select_list',
439       'html_options' => array (
440         'possible_values' => array(
441           'M.' => 'Mr',
442           'Mme' => 'Mrs',
443           'Mlle' => 'Ms'
444         )
445       ),
446       'required' => 1,
447       'default_value' => 'M.',
448       'rights' => array(
449         'self' => 'r',
450         'user' => 'r',
451         'admin' => 'w',
452         'godfather' => 'w'
453       ),
454       'view' => 1,
455       'form' => array (
456         'modify' => 1,
457         'create' => 1
458       )
459     ),
460     /* ----------- end -----------*/
461
462     /* ----------- start -----------*/
463     'description' => array (
464       'label' => 'Description',
465       'ldap_type' => 'ascii',
466       'html_type' => 'textarea',
467       'multiple' => 1,
468       'rights' => array(
469         'self' => 'r',
470         'user' => 'r',
471         'admin' => 'w',
472         'godfather' => 'w'
473       ),
474       'view' => 1,
475       'form' => array (
476         'modify' => 1,
477         'create' => 1
478       )
479     ),
480     /* ----------- end -----------*/
481
482     /* ----------- start -----------*/
483     'userPassword' => array (
484       'label' => 'Password',
485       'ldap_type' => 'password',
486       'ldap_options' => array (
487         'encode' => 'md5'
488       ),
489       'html_type' => 'password',
490       'html_options' => array(
491         'generationTool' => true,
492         'viewHash' => true,
493         'autoGenerate' => false,
494         'lenght' => 8,
495         'chars' => array (
496           array(
497             'nb' => 3,
498             'chars' => 'abcdefijklmnopqrstuvwxyz'
499           ),
500           '0123456789',
501           '*$.:/_-[]{}=~'
502         ),
503         'mail' => array(
504           'send' => 1,
505           'ask' => 1,
506           'subject' => "LSexample : Your new credentials.",
507           'msg' => "Your password has been changed.\nLogin : %{uid}\nNew password : %{password}",
508           'mail_attr' => 'mail'
509         )
510       ),
511       'check_data' => array(
512         'password' => array(
513           'msg' => 'Your password must contain from 8 to 10 characters.',
514           'params' => array(
515             'minLength' => 8,
516             'maxLength' => 10,
517             'regex' => array (
518               '/[A-Z]/',
519               '/[a-z]/',
520               '/[0-9]/',
521               '/[^A-Za-z0-9]/',
522             ),
523             'minValidRegex' => 3
524           )
525         )
526       ),
527       'required' => 1,
528       'rights' => array(
529         'self' => 'w',
530         'admin' => 'w'
531       ),
532       'dependAttrs' => array(
533         'sambaLMPassword',
534         'sambaNTPassword'
535       ),
536       'form' => array (
537         'modify' => 1,
538         'create' => 1,
539         'lostPassword' => 1
540       ),
541       'after_modify' => 'valid'
542     ),
543     /* ----------- end -----------*/
544
545     /* ----------- start -----------*/
546     'lsRecoveryHash' => array (
547       'label' => 'Password recovery hash',
548       'ldap_type' => 'ascii',
549       'html_type' => 'text',
550       'required' => 0,
551       'form' => array (
552         'lostPassword' => 1
553       ),
554       'rights' => array(
555         'self' => 'w',
556         'admin' => 'w'
557       )
558     ),
559     /* ----------- end -----------*/
560
561     /* ----------- start -----------*/
562     'sambaLMPassword' => array (
563       'label' => 'Samba Password (LM)',
564       'ldap_type' => 'ascii',
565       'html_type' => 'text',
566       'required' => 1,
567       'generate_function' => 'generate_sambaLMPassword',
568       'form' => array (
569         'modify' => 0
570       )
571     ),
572     /* ----------- end -----------*/
573
574     /* ----------- start -----------*/
575     'sambaNTPassword' => array (
576       'label' => 'Samba Password (NT)',
577       'ldap_type' => 'ascii',
578       'html_type' => 'text',
579       'required' => 1,
580       'generate_function' => 'generate_sambaNTPassword',
581       'form' => array (
582         'modify' => 0
583       )
584     ),
585     /* ----------- end -----------*/
586
587     /* ----------- start -----------*/
588     'jpegPhoto' => array (
589       'label' => 'Picture',
590       'ldap_type' => 'image',
591       'html_type' => 'image',
592       'required' => 0,
593       'view' => 1,
594       'check_data' => array (
595         'imagesize' => array(
596           'msg' => "Picture size is not valid.",
597           'params' => array(
598             'maxWidth' => 2000
599           )
600         ),
601         'filesize' => array(
602           'msg' => "File size is not valid.",
603           'params' => array(
604             'maxSize' => 3000000   // taille du fichier en octets
605           )
606         ),
607         'imagefile' => array(
608           'msg' => "File type is not valid."
609         )
610       ),
611       'form' => array (
612         'modify' => 1
613       ),
614       'rights' => array(
615         'self' => 'w',
616         'user' => 'r',
617         'admin' => 'w',
618         'godfather' => 'w'
619       )
620     ),
621     /* ----------- end -----------*/
622     
623     /* ----------- start -----------*/
624     'lsGodfatherDn' => array (
625       'label' => 'Accountable(s)',
626       'ldap_type' => 'ascii',
627       'html_type' => 'select_object',
628       'html_options' => array (
629         'selectable_object' => array(
630             'object_type' => 'LSpeople',
631             'value_attribute' => '%{dn}'
632         ),
633       ),
634       'validation' => array (
635         array (
636           'basedn' => '%{val}',
637           'result' => 1,
638           'msg' => "One or several users don't exist."
639         )
640       ),
641       'multiple' => 1,
642       'rights' => array(
643         'admin' => 'w'
644       ),
645       'view' => 1,
646       'form' => array (
647         'modify' => 1,
648         'create' => 1
649       )
650     ),
651     /* ----------- end -----------*/
652
653   ) // Fin args
654 );
655 ?>