/[smecontribs]/rpms/smeserver-zarafa/contribs7/smeserver-zarafa-0.9.0-panels.patch
ViewVC logotype

Contents of /rpms/smeserver-zarafa/contribs7/smeserver-zarafa-0.9.0-panels.patch

Parent Directory Parent Directory | Revision Log Revision Log | View Revision Graph Revision Graph


Revision 1.1 - (show annotations) (download)
Mon Jun 1 11:55:48 2009 UTC (14 years, 11 months ago) by dungog
Branch: MAIN
CVS Tags: smeserver-zarafa-0_9_0-40_el4_sme, smeserver-zarafa-0_9_0-51_el4_sme, smeserver-zarafa-0_9_0-43_el4_sme, smeserver-zarafa-0_9_0-53_el4_sme, smeserver-zarafa-0_9_0-47_el4_sme, smeserver-zarafa-0_9_0-38_el4_sme, smeserver-zarafa-0_9_0-33_el4_sme, smeserver-zarafa-0_9_0-32_el4_sme, smeserver-zarafa-0_9_0-45_el4_sme, smeserver-zarafa-0_9_0-39_el4_sme, smeserver-zarafa-0_9_0-49_el4_sme, smeserver-zarafa-0_9_0-42_el4_sme, smeserver-zarafa-0_9_0-34_el4_sme, smeserver-zarafa-0_9_0-37_el4_sme, smeserver-zarafa-0_9_0-29_el4_sme, smeserver-zarafa-0_9_0-46_el4_sme, smeserver-zarafa-0_9_0-54_el4_sme, smeserver-zarafa-0_9_0-50_el4_sme, smeserver-zarafa-0_9_0-48_el4_sme, smeserver-zarafa-0_9_0-35_el4_sme, smeserver-zarafa-0_9_0-36_el4_sme, smeserver-zarafa-0_9_0-31_el4_sme, smeserver-zarafa-0_9_0-52_el4_sme, smeserver-zarafa-0_9_0-56_el4_sme, smeserver-zarafa-0_9_0-30_el4_sme, HEAD
* Mon Jun 01 2009 Stephen Noble <support@dungog.net> - 0.9-29
- add zarafa config panels [SME 5310]
- Thanks Marc Kelkermans at ati-informatique.net

1 diff -urN smeserver-zarafa-0.9.0.orig/createlinks smeserver-zarafa-0.9.0/createlinks
2 --- smeserver-zarafa-0.9.0.orig/createlinks 2009-06-01 21:07:05.000000000 +1000
3 +++ smeserver-zarafa-0.9.0/createlinks 2009-06-01 21:11:39.000000000 +1000
4 @@ -4,6 +4,9 @@
5 use File::Basename;
6 use File::Path;
7
8 +panel_link("zarafaCFG", 'manager');
9 +panel_link("zarafaUI", 'manager');
10 +
11 #we use S99 as on first run it must run after S99mysql.init
12 service_link_enhanced("zarafa-gateway", "S99", "7");
13 service_link_enhanced("zarafa-ical", "S99", "7");
14 diff -urN smeserver-zarafa-0.9.0.orig/root/etc/e-smith/locale/en-us/etc/e-smith/web/functions/zarafaCFG smeserver-zarafa-0.9.0/root/etc/e-smith/locale/en-us/etc/e-smith/web/functions/zarafaCFG
15 --- smeserver-zarafa-0.9.0.orig/root/etc/e-smith/locale/en-us/etc/e-smith/web/functions/zarafaCFG 1970-01-01 10:00:00.000000000 +1000
16 +++ smeserver-zarafa-0.9.0/root/etc/e-smith/locale/en-us/etc/e-smith/web/functions/zarafaCFG 2009-06-01 21:15:33.000000000 +1000
17 @@ -0,0 +1,223 @@
18 +<lexicon lang="en-us">
19 +
20 + <entry>
21 + <base>ZARAFA_CFG_MANAGEMENT</base>
22 + <trans>Configuration</trans>
23 + </entry>
24 +
25 + <entry>
26 + <base>FORM_TITLE</base>
27 + <trans>Zarafa mail server configuration</trans>
28 + </entry>
29 +
30 + <entry>
31 + <base>SOFTDELETE</base>
32 + <trans>Soft-delete lifetime adjustment</trans>
33 + </entry>
34 +
35 + <entry>
36 + <base>CFG_BUTTON</base>
37 + <trans>Server configuration</trans>
38 + </entry>
39 +
40 + <entry>
41 + <base>KEY_BUTTON</base>
42 + <trans>Activation/Add a CAL</trans>
43 + </entry>
44 +
45 + <entry>
46 + <base>MYSQL_BUTTON</base>
47 + <trans>MySQL adjustment</trans>
48 + </entry>
49 +
50 + <entry>
51 + <base>CACHE_CELL_SIZE</base>
52 + <trans>Cache Cell size adjustment</trans>
53 + </entry>
54 +
55 + <entry>
56 + <base>CACHE_OBJECT_SIZE</base>
57 + <trans>Cache Object size adjustment</trans>
58 + </entry>
59 +
60 + <entry>
61 + <base>CACHE_INDEX_SIZE</base>
62 + <trans>Cache Index size adjustment</trans>
63 + </entry>
64 +
65 + <entry>
66 + <base>QUOTA_WARN</base>
67 + <trans>Warning Quota adjustment</trans>
68 + </entry>
69 +
70 + <entry>
71 + <base>QUOTA_SOFT</base>
72 + <trans>Soft Quota adjustmen</trans>
73 + </entry>
74 +
75 + <entry>
76 + <base>QUOTA_HARD</base>
77 + <trans>Hard Quota adjustmen</trans>
78 + </entry>
79 +
80 + <entry>
81 + <base>COMPANYQUOTA_WARN</base>
82 + <trans>Company Quota adjustment</trans>
83 + </entry>
84 +
85 + <entry>
86 + <base>VERSION</base>
87 + <trans>Zarafa version :</trans>
88 + </entry>
89 +
90 + <entry>
91 + <base>SYS_AUTH</base>
92 + <trans>Database System :</trans>
93 + </entry>
94 +
95 + <entry>
96 + <base>REGISTERED</base>
97 + <trans>Registered version</trans>
98 + </entry>
99 +
100 + <entry>
101 + <base>UNREGISTERED</base>
102 + <trans>Community version</trans>
103 + </entry>
104 +
105 + <entry>
106 + <base>MAX_USERS</base>
107 + <trans>Maximum users :</trans>
108 + </entry>
109 +
110 + <entry>
111 + <base>MODIFY_BUTTON</base>
112 + <trans>Modify</trans>
113 + </entry>
114 +
115 + <entry>
116 + <base>CD_KEY</base>
117 + <trans>CD-key :</trans>
118 + </entry>
119 +
120 + <entry>
121 + <base>NBRUSERTXT</base>
122 + <trans>Maximum users :</trans>
123 + </entry>
124 +
125 + <entry>
126 + <base>CALNAME</base>
127 + <trans>CAL file name</trans>
128 + </entry>
129 +
130 + <entry>
131 + <base>CALKEY</base>
132 + <trans>Registered CD-Key</trans>
133 + </entry>
134 +
135 + <entry>
136 + <base>CAL_BUTTON</base>
137 + <trans>Add a CAL</trans>
138 + </entry>
139 +
140 + <entry>
141 + <base>MODIFY_CONFIG_SUCCESS</base>
142 + <trans>Config modified !</trans>
143 + </entry>
144 +
145 + <entry>
146 + <base>CFG_BUTTON_BUBBLE</base>
147 + <trans>Clic here to configure some aspect of Zarafa server</trans>
148 + </entry>
149 +
150 + <entry>
151 + <base>KEY_BUTTON_BUBBLE</base>
152 + <trans>Clic here if you want to activate your version of Zarafa or to add some CAL</trans>
153 + </entry>
154 +
155 + <entry>
156 + <base>MYSQL_BUTTON_BUBBLE</base>
157 + <trans>Clic here to configure some aspect of MySQL in Zarafa</trans>
158 + </entry>
159 +
160 + <entry>
161 + <base>CAL_BUTTON_BUBBLE</base>
162 + <trans>Clic here to add a CAL</trans>
163 + </entry>
164 +
165 + <entry>
166 + <base>INVALID_KEY</base>
167 + <trans>Invalid CD-Key. It must be composed by 24 alphanumeric characters.</trans>
168 + </entry>
169 +
170 + <entry>
171 + <base>CREATE_BUTTON</base>
172 + <trans>Add a key</trans>
173 + </entry>
174 +
175 + <entry>
176 + <base>EXIST_CALNAME</base>
177 + <trans>The filename is already use in another CAL. Please choose another.</trans>
178 + </entry>
179 +
180 + <entry>
181 + <base>EXIST_CALKEY</base>
182 + <trans>This key is already use in another CAL. Please enter another.</trans>
183 + </entry>
184 +
185 + <entry>
186 + <base>CAUTION_TIME</base>
187 + <trans>CAUTION - This operation may take 1 minutes or more because Zarafa's services must be restarted.</trans>
188 + </entry>
189 +
190 + <entry>
191 + <base>INSERT_CAL_NAME</base>
192 + <trans>CAL namefile</trans>
193 + </entry>
194 +
195 + <entry>
196 + <base>INSERT_CAL_KEY</base>
197 + <trans>CAL key</trans>
198 + </entry>
199 +
200 + <entry>
201 + <base>CLEF_CD</base>
202 + <trans>Enter the CD-key</trans>
203 + </entry>
204 +
205 + <entry>
206 + <base>BUFFER_POOL_SIZE</base>
207 + <trans>Buffer pool size</trans>
208 + </entry>
209 +
210 + <entry>
211 + <base>ADDITIONAL_MEM_POOL_SIZE</base>
212 + <trans>Additionnal memory pool size</trans>
213 + </entry>
214 +
215 + <entry>
216 + <base>LOG_FILE_SIZE</base>
217 + <trans>Log file size</trans>
218 + </entry>
219 +
220 + <entry>
221 + <base>LOG_BUFFER_SIZE</base>
222 + <trans>Log file size</trans>
223 + </entry>
224 +
225 + <entry>
226 + <base>NO_MODIFICATION_ASKED</base>
227 + <trans>No modification have been asked.</trans>
228 + </entry>
229 +
230 + <entry>
231 + <base>NOT_NUM</base>
232 + <trans>Some characteres are not numeric characters.</trans>
233 + </entry>
234 +
235 + <entry>
236 + <base>GREETING</base>
237 + <trans><![CDATA[ <br><b>Contrib developped by <a href="mailto:lucas.marcadieu@gmail.com">Marcadieu Lucas</a> and <a href="mailto:mk@ati-informatique.net">Kelkermans Marc</a>.</b>]]></trans>
238 + </entry>
239 +
240 +</lexicon>
241 \ No newline at end of file
242 diff -urN smeserver-zarafa-0.9.0.orig/root/etc/e-smith/locale/en-us/etc/e-smith/web/functions/zarafaUI smeserver-zarafa-0.9.0/root/etc/e-smith/locale/en-us/etc/e-smith/web/functions/zarafaUI
243 --- smeserver-zarafa-0.9.0.orig/root/etc/e-smith/locale/en-us/etc/e-smith/web/functions/zarafaUI 1970-01-01 10:00:00.000000000 +1000
244 +++ smeserver-zarafa-0.9.0/root/etc/e-smith/locale/en-us/etc/e-smith/web/functions/zarafaUI 2009-06-01 21:15:33.000000000 +1000
245 @@ -0,0 +1,273 @@
246 +<lexicon lang="en-us">
247 +
248 + <entry>
249 + <base>USER_GROUP_MANAGEMENT</base>
250 + <trans>Management</trans>
251 + </entry>
252 +
253 + <entry>
254 + <base>FORM_TITLE</base>
255 + <trans><![CDATA[Users and groups management for Zarafa<br>]]></trans>
256 + </entry>
257 +
258 + <entry>
259 + <base>ADD_USER</base>
260 + <trans>Add an user</trans>
261 + </entry>
262 +
263 + <entry>
264 + <base>ADD_USER_BUBBLE</base>
265 + <trans>Click here to add an user</trans>
266 + </entry>
267 +
268 + <entry>
269 + <base>ADD_GROUP</base>
270 + <trans>Add a group</trans>
271 + </entry>
272 +
273 + <entry>
274 + <base>ADD_GROUP_BUBBLE</base>
275 + <trans>Click here to add a group</trans>
276 + </entry>
277 +
278 + <entry>
279 + <base>USERNAME</base>
280 + <trans>Username : </trans>
281 + </entry>
282 +
283 + <entry>
284 + <base>FULLNAME</base>
285 + <trans>Fullname : </trans>
286 + </entry>
287 +
288 + <entry>
289 + <base>DELETE</base>
290 + <trans>Delete</trans>
291 + </entry>
292 +
293 + <entry>
294 + <base>DETAILS</base>
295 + <trans>User's details : </trans>
296 + </entry>
297 +
298 + <entry>
299 + <base>STOCK_USE</base>
300 + <trans>Current store size : </trans>
301 + </entry>
302 +
303 + <entry>
304 + <base>ACTIVE_USER</base>
305 + <trans>Active user : </trans>
306 + </entry>
307 +
308 + <entry>
309 + <base>ACTIVE_CREATE</base>
310 + <trans>User : </trans>
311 + </entry>
312 +
313 + <entry>
314 + <base>EMAILADDRESS</base>
315 + <trans>Email Address : </trans>
316 + </entry>
317 +
318 + <entry>
319 + <base>ADMIN</base>
320 + <trans>Is the user an admin ?</trans>
321 + </entry>
322 +
323 + <entry>
324 + <base>AUTO_ACCEPT_MEETING</base>
325 + <trans>Accept auto meeting request ?</trans>
326 + </entry>
327 +
328 + <entry>
329 + <base>DECLINE_DLB_REQ</base>
330 + <trans>Decline dlb meeting request ?</trans>
331 + </entry>
332 +
333 + <entry>
334 + <base>DECLINE_RECUR_REQ</base>
335 + <trans>Decline reccur meeting request ?</trans>
336 + </entry>
337 +
338 + <entry>
339 + <base>QUOTA_OVERR</base>
340 + <trans>Set quota override ?</trans>
341 + </entry>
342 +
343 + <entry>
344 + <base>WARN_LVL</base>
345 + <trans>Warning level (unit is Mo) : </trans>
346 + </entry>
347 +
348 + <entry>
349 + <base>SOFT_LVL</base>
350 + <trans>Soft level (unit is Mo) : </trans>
351 + </entry>
352 +
353 + <entry>
354 + <base>HARD_LVL</base>
355 + <trans>Hard level (unit is Mo) : </trans>
356 + </entry>
357 +
358 + <entry>
359 + <base>PASSWORD</base>
360 + <trans>Password : </trans>
361 + </entry>
362 +
363 + <entry>
364 + <base>CHANGE_PSSWD</base>
365 + <trans>New password (optional) : </trans>
366 + </entry>
367 +
368 + <entry>
369 + <base>MODIFY_BUTTON</base>
370 + <trans>Modify</trans>
371 + </entry>
372 +
373 + <entry>
374 + <base>CREATE_BUTTON</base>
375 + <trans>Create</trans>
376 + </entry>
377 +
378 + <entry>
379 + <base>DELETE_BUTTON</base>
380 + <trans>Delete</trans>
381 + </entry>
382 +
383 + <entry>
384 + <base>MODIFY_USER_SUCCESS</base>
385 + <trans>User's modified</trans>
386 + </entry>
387 +
388 + <entry>
389 + <base>CREATE_USER_SUCCESS</base>
390 + <trans>User's created</trans>
391 + </entry>
392 +
393 + <entry>
394 + <base>DELETE_USER_SUCCESS</base>
395 + <trans>User's deleted</trans>
396 + </entry>
397 +
398 + <entry>
399 + <base>CREATE_GROUP_SUCCESS</base>
400 + <trans>Group's created</trans>
401 + </entry>
402 +
403 + <entry>
404 + <base>DELETE_USER_TXT</base>
405 + <trans>Do you really want to delete this user ?</trans>
406 + </entry>
407 +
408 + <entry>
409 + <base>GROUP_NAME</base>
410 + <trans>Group name : </trans>
411 + </entry>
412 +
413 + <entry>
414 + <base>DELETE_GROUP_TXT</base>
415 + <trans>Do you really want to delete this group ?</trans>
416 + </entry>
417 +
418 + <entry>
419 + <base>GROUP_TEXT_DISPLAY</base>
420 + <trans>Groups list</trans>
421 + </entry>
422 +
423 + <entry>
424 + <base>CHECKED_YES</base>
425 + <trans>Yes</trans>
426 + </entry>
427 +
428 + <entry>
429 + <base>CHECKED_NO</base>
430 + <trans>No</trans>
431 + </entry>
432 +
433 + <entry>
434 + <base>GROUP_NAME_ARRAY</base>
435 + <trans>Group name</trans>
436 + </entry>
437 +
438 + <entry>
439 + <base>DELETE_GROUP_SUCCESS</base>
440 + <trans>Group deleted</trans>
441 + </entry>
442 +
443 + <entry>
444 + <base>MODIFY_GROUP_TEXT</base>
445 + <trans>Group's users modification</trans>
446 + </entry>
447 +
448 + <entry>
449 + <base>MODIFY_GROUP_SUCCESS</base>
450 + <trans>Group modified</trans>
451 + </entry>
452 +
453 + <entry>
454 + <base>EXIST_GROUP</base>
455 + <trans>Existing group : </trans>
456 + </entry>
457 +
458 + <entry>
459 + <base>FULLNAME_VERIF_ERROR</base>
460 + <trans>The fullname is not a correct fullname. It may contain only alphabetical letters and/or interval.</trans>
461 + </entry>
462 +
463 + <entry>
464 + <base>MY_PASSWORD_VERIF_ERROR</base>
465 + <trans>The password is not a correct password. It may contain only alphanumeric characters and at least six characters.</trans>
466 + </entry>
467 +
468 + <entry>
469 + <base>QUOTA_TEST_VERIF_ERROR</base>
470 + <trans>The quota limit is not a correct quota. A correct quota limit is an numeric value.</trans>
471 + </entry>
472 +
473 + <entry>
474 + <base>SOFT_INF_WARN</base>
475 + <trans>This quota limit can't be inferior or equal to the warning level quota.</trans>
476 + </entry>
477 +
478 + <entry>
479 + <base>HARD_INF_OTHER</base>
480 + <trans>This quota limit can't be inferior or equal to the soft level quota.</trans>
481 + </entry>
482 +
483 + <entry>
484 + <base>MULTIPLE_USERNAME</base>
485 + <trans>This username is already taken by another user, please choose another.</trans>
486 + </entry>
487 +
488 + <entry>
489 + <base>MULTIPLE_EMAIL</base>
490 + <trans>This email address is already taken by another user, please choose another.</trans>
491 + </entry>
492 +
493 + <entry>
494 + <base>MULTIPLE_GROUPNAME</base>
495 + <trans>This group name is already taken, please choose another.</trans>
496 + </entry>
497 +
498 + <entry>
499 + <base>FALSE_USERNAME</base>
500 + <trans>The username is not a correct fullname. It may contain only alphabetical letters, intervals, points or coma.</trans>
501 + </entry>
502 +
503 + <entry>
504 + <base>DISABLED</base>
505 + <trans>Disabled</trans>
506 + </entry>
507 +
508 + <entry>
509 + <base>ENABLED</base>
510 + <trans>Enabled</trans>
511 + </entry>
512 +
513 + <entry>
514 + <base>GREETING</base>
515 + <trans><![CDATA[ <br><b>Contrib developped by <a href="mailto:lucas.marcadieu@gmail.com">Marcadieu Lucas</a> and <a href="mailto:mk@ati-informatique.net">Kelkermans Marc</a>.</b>]]></trans>
516 + </entry>
517 +
518 +</lexicon>
519 \ No newline at end of file
520 diff -urN smeserver-zarafa-0.9.0.orig/root/etc/e-smith/locale/fr/etc/e-smith/web/functions/zarafaCFG smeserver-zarafa-0.9.0/root/etc/e-smith/locale/fr/etc/e-smith/web/functions/zarafaCFG
521 --- smeserver-zarafa-0.9.0.orig/root/etc/e-smith/locale/fr/etc/e-smith/web/functions/zarafaCFG 1970-01-01 10:00:00.000000000 +1000
522 +++ smeserver-zarafa-0.9.0/root/etc/e-smith/locale/fr/etc/e-smith/web/functions/zarafaCFG 2009-06-01 21:15:33.000000000 +1000
523 @@ -0,0 +1,238 @@
524 +<lexicon lang="fr">
525 +
526 + <entry>
527 + <base>ZARAFA_CFG_MANAGEMENT</base>
528 + <trans>Serveur</trans>
529 + </entry>
530 +
531 + <entry>
532 + <base>FORM_TITLE</base>
533 + <trans><![CDATA[Configuration du serveur Zarafa]]></trans>
534 + </entry>
535 +
536 + <entry>
537 + <base>SOFTDELETE</base>
538 + <trans>Réglage du soft-delete lifetime</trans>
539 + </entry>
540 +
541 + <entry>
542 + <base>CFG_BUTTON</base>
543 + <trans>Configuration serveur</trans>
544 + </entry>
545 +
546 + <entry>
547 + <base>KEY_BUTTON</base>
548 + <trans>Activation/Ajout de CAL</trans>
549 + </entry>
550 +
551 + <entry>
552 + <base>MYSQL_BUTTON</base>
553 + <trans>Réglages MySQL</trans>
554 + </entry>
555 +
556 + <entry>
557 + <base>CACHE_CELL_SIZE</base>
558 + <trans>Réglage de la taille du cache du noyau</trans>
559 + </entry>
560 +
561 + <entry>
562 + <base>CACHE_OBJECT_SIZE</base>
563 + <trans>Réglage de la taille du cache objet</trans>
564 + </entry>
565 +
566 + <entry>
567 + <base>CACHE_INDEX_SIZE</base>
568 + <trans>Réglage de la taille du cache l'index</trans>
569 + </entry>
570 +
571 + <entry>
572 + <base>QUOTA_WARN</base>
573 + <trans>Réglage du niveau du Warning Quota</trans>
574 + </entry>
575 +
576 + <entry>
577 + <base>QUOTA_SOFT</base>
578 + <trans>Réglage du niveau du Soft Quota</trans>
579 + </entry>
580 +
581 + <entry>
582 + <base>QUOTA_HARD</base>
583 + <trans>Réglage du niveau du Hard Quota</trans>
584 + </entry>
585 +
586 + <entry>
587 + <base>COMPANYQUOTA_WARN</base>
588 + <trans>Réglage du niveau de quota de companies</trans>
589 + </entry>
590 +
591 + <entry>
592 + <base>VERSION</base>
593 + <trans><![CDATA[<b>Version de Zarafa :]]></trans>
594 + </entry>
595 +
596 + <entry>
597 + <base>SYS_AUTH</base>
598 + <trans>Système de base de données :</trans>
599 + </entry>
600 +
601 + <entry>
602 + <base>REGISTERED</base>
603 + <trans>Version enregistrée</trans>
604 + </entry>
605 +
606 + <entry>
607 + <base>UNREGISTERED</base>
608 + <trans>Version communautaire</trans>
609 + </entry>
610 +
611 + <entry>
612 + <base>MAX_USERS</base>
613 + <trans><![CDATA[utilisateurs maximum.</b><br>]]></trans>
614 + </entry>
615 +
616 + <entry>
617 + <base>MODIFY_BUTTON</base>
618 + <trans>Modifier</trans>
619 + </entry>
620 +
621 + <entry>
622 + <base>CD_KEY</base>
623 + <trans>Serial :</trans>
624 + </entry>
625 +
626 + <entry>
627 + <base>NBRUSERTXT</base>
628 + <trans>utilisateurs maximum.</trans>
629 + </entry>
630 +
631 + <entry>
632 + <base>CALNAME</base>
633 + <trans>Nom du fichier CAL</trans>
634 + </entry>
635 +
636 + <entry>
637 + <base>CALKEY</base>
638 + <trans>Serial enregistré</trans>
639 + </entry>
640 +
641 + <entry>
642 + <base>CAL_BUTTON</base>
643 + <trans>Ajouter un CAL</trans>
644 + </entry>
645 +
646 + <entry>
647 + <base>MODIFY_CONFIG_SUCCESS</base>
648 + <trans>Modifications réussies !</trans>
649 + </entry>
650 +
651 + <entry>
652 + <base>CFG_BUTTON_BUBBLE</base>
653 + <trans>Cliquez ici pour configurer certain aspect de Zarafa</trans>
654 + </entry>
655 +
656 + <entry>
657 + <base>KEY_BUTTON_BUBBLE</base>
658 + <trans>Cliquez ici pour activer votre version de Zarafa ou pour rajouter des CAL</trans>
659 + </entry>
660 +
661 + <entry>
662 + <base>MYSQL_BUTTON_BUBBLE</base>
663 + <trans>Cliquez ici pour configurer certain aspect MySQL de Zarafa</trans>
664 + </entry>
665 +
666 + <entry>
667 + <base>CAL_BUTTON_BUBBLE</base>
668 + <trans>Cliquez ici pour ajouter un CAL</trans>
669 + </entry>
670 +
671 + <entry>
672 + <base>INVALID_KEY</base>
673 + <trans>Serial invalide. Il doit être obligatoirement composée de 24 caractéres alphanumériques.</trans>
674 + </entry>
675 +
676 + <entry>
677 + <base>CREATE_BUTTON</base>
678 + <trans>Ajouter Serial</trans>
679 + </entry>
680 +
681 + <entry>
682 + <base>EXIST_CALNAME</base>
683 + <trans>Le nom saisi est déjà  utilisé pour un autre CAL. Veuillez en choisir un autre.</trans>
684 + </entry>
685 +
686 + <entry>
687 + <base>EXIST_CALKEY</base>
688 + <trans>Le serial saisi est déjà à utilisé dans un autre CAL. Veuillez en saisir un autre.</trans>
689 + </entry>
690 +
691 + <entry>
692 + <base>CAUTION_TIME</base>
693 + <trans><![CDATA[<b>ATTENTION - Les services Zarafa et MySQL doivent être redémarré.</b>]]></trans>
694 + </entry>
695 +
696 + <entry>
697 + <base>INSERT_CAL_NAME</base>
698 + <trans>Nom du fichier CAL</trans>
699 + </entry>
700 +
701 + <entry>
702 + <base>INSERT_CAL_KEY</base>
703 + <trans>Serial du CAL</trans>
704 + </entry>
705 +
706 + <entry>
707 + <base>CLEF_CD</base>
708 + <trans>Saisir le serial</trans>
709 + </entry>
710 +
711 + <entry>
712 + <base>BUFFER_POOL_SIZE</base>
713 + <trans>Taille du buffer pool</trans>
714 + </entry>
715 +
716 + <entry>
717 + <base>ADDITIONAL_MEM_POOL_SIZE</base>
718 + <trans>Taille de la mémoire additionel du pool</trans>
719 + </entry>
720 +
721 + <entry>
722 + <base>LOG_FILE_SIZE</base>
723 + <trans>Taille du fichier de log</trans>
724 + </entry>
725 +
726 + <entry>
727 + <base>LOG_BUFFER_SIZE</base>
728 + <trans>Taille du fichier log du buffer</trans>
729 + </entry>
730 +
731 + <entry>
732 + <base>NO_MODIFICATION_ASKED</base>
733 + <trans>Aucune modification n'a été demandé.</trans>
734 + </entry>
735 +
736 + <entry>
737 + <base>NOT_NUM</base>
738 + <trans>Les caractéres saisi ne sont pas tous des caractéres numériques.</trans>
739 + </entry>
740 +
741 + <entry>
742 + <base>MULTICOMP</base>
743 + <trans>Multi-companie </trans>
744 + </entry>
745 +
746 + <entry>
747 + <base>GLOBALFORWARD</base>
748 + <trans>Gobal Forward</trans>
749 + </entry>
750 +
751 + <entry>
752 + <base>ZARAFA_PLUGIN_CAUTION</base>
753 + <trans>Impossible de déterminer votre plugin</trans>
754 + </entry>
755 +
756 + <entry>
757 + <base>GREETING</base>
758 + <trans><![CDATA[ <br><b>Contrib developped by <a href="mailto:lucas.marcadieu@gmail.com">Marcadieu Lucas</a> and <a href="mailto:mk@ati-informatique.net">Kelkermans Marc</a>.</b>]]></trans>
759 + </entry>
760 +
761 +</lexicon>
762 \ No newline at end of file
763 diff -urN smeserver-zarafa-0.9.0.orig/root/etc/e-smith/locale/fr/etc/e-smith/web/functions/zarafaUI smeserver-zarafa-0.9.0/root/etc/e-smith/locale/fr/etc/e-smith/web/functions/zarafaUI
764 --- smeserver-zarafa-0.9.0.orig/root/etc/e-smith/locale/fr/etc/e-smith/web/functions/zarafaUI 1970-01-01 10:00:00.000000000 +1000
765 +++ smeserver-zarafa-0.9.0/root/etc/e-smith/locale/fr/etc/e-smith/web/functions/zarafaUI 2009-06-01 21:15:33.000000000 +1000
766 @@ -0,0 +1,284 @@
767 +<lexicon lang="fr">
768 +
769 + <entry>
770 + <base>USER_GROUP_MANAGEMENT</base>
771 + <trans>Utilisateurs</trans>
772 + </entry>
773 +
774 + <entry>
775 + <base>FORM_TITLE</base>
776 + <trans><![CDATA[Gestion des utilisateurs et des groupes de Zarafa<br>]]></trans>
777 + </entry>
778 +
779 + <entry>
780 + <base>ADD_USER</base>
781 + <trans>Ajouter un utilisateur</trans>
782 + </entry>
783 +
784 + <entry>
785 + <base>ADD_USER_BUBBLE</base>
786 + <trans>Cliquez pour ajouter un utilisateur</trans>
787 + </entry>
788 +
789 + <entry>
790 + <base>ADD_GROUP</base>
791 + <trans>Ajouter un groupe</trans>
792 + </entry>
793 +
794 + <entry>
795 + <base>ADD_GROUP_BUBBLE</base>
796 + <trans>Cliquez pour ajouter un groupe</trans>
797 + </entry>
798 +
799 + <entry>
800 + <base>USERNAME</base>
801 + <trans>Nom utilisateur : </trans>
802 + </entry>
803 +
804 + <entry>
805 + <base>FULLNAME</base>
806 + <trans>Nom complet : </trans>
807 + </entry>
808 +
809 + <entry>
810 + <base>DELETE</base>
811 + <trans>Supprimer</trans>
812 + </entry>
813 +
814 + <entry>
815 + <base>DETAILS</base>
816 + <trans><![CDATA[<b>Détails de l'utilisateur : ]]></trans>
817 + </entry>
818 +
819 + <entry>
820 + <base>STOCK_USE</base>
821 + <trans>Espace de stockage utilisé : </trans>
822 + </entry>
823 +
824 + <entry>
825 + <base>ACTIVE_USER</base>
826 + <trans><![CDATA[<br>Utilisateur actif : ]]></trans>
827 + </entry>
828 +
829 + <entry>
830 + <base>ACTIVE_CREATE</base>
831 + <trans>Utilisateur : </trans>
832 + </entry>
833 +
834 + <entry>
835 + <base>EMAILADDRESS</base>
836 + <trans>Adresse internet : </trans>
837 + </entry>
838 +
839 + <entry>
840 + <base>ADMIN</base>
841 + <trans>L'utilisateur est-il un administrateur ?</trans>
842 + </entry>
843 +
844 + <entry>
845 + <base>AUTO_ACCEPT_MEETING</base>
846 + <trans>Accept auto meeting request ?</trans>
847 + </entry>
848 +
849 + <entry>
850 + <base>DECLINE_DLB_REQ</base>
851 + <trans>Decline dlb meeting request ?</trans>
852 + </entry>
853 +
854 + <entry>
855 + <base>DECLINE_RECUR_REQ</base>
856 + <trans>Decline reccur meeting request ?</trans>
857 + </entry>
858 +
859 + <entry>
860 + <base>QUOTA_OVERR</base>
861 + <trans>Mettre des quotas personalisés ?</trans>
862 + </entry>
863 +
864 + <entry>
865 + <base>WARN_LVL</base>
866 + <trans>Warning level (en Mo) : </trans>
867 + </entry>
868 +
869 + <entry>
870 + <base>SOFT_LVL</base>
871 + <trans>Soft level (en Mo) : </trans>
872 + </entry>
873 +
874 + <entry>
875 + <base>HARD_LVL</base>
876 + <trans>Hard level (en Mo) : </trans>
877 + </entry>
878 +
879 + <entry>
880 + <base>PASSWORD</base>
881 + <trans>Mot de passe : </trans>
882 + </entry>
883 +
884 + <entry>
885 + <base>CHANGE_PSSWD</base>
886 + <trans>Nouveau mot de passe (optionnel) : </trans>
887 + </entry>
888 +
889 + <entry>
890 + <base>MODIFY_BUTTON</base>
891 + <trans>Modifier</trans>
892 + </entry>
893 +
894 + <entry>
895 + <base>CREATE_BUTTON</base>
896 + <trans>Créer</trans>
897 + </entry>
898 +
899 + <entry>
900 + <base>DELETE_BUTTON</base>
901 + <trans>Supprimer</trans>
902 + </entry>
903 +
904 + <entry>
905 + <base>MODIFY_USER_SUCCESS</base>
906 + <trans>Utilisateur modifié</trans>
907 + </entry>
908 +
909 + <entry>
910 + <base>CREATE_USER_SUCCESS</base>
911 + <trans>Utilisateur créé</trans>
912 + </entry>
913 +
914 + <entry>
915 + <base>DELETE_USER_SUCCESS</base>
916 + <trans>Utilisateur supprimé</trans>
917 + </entry>
918 +
919 + <entry>
920 + <base>CREATE_GROUP_SUCCESS</base>
921 + <trans>Groupe créé</trans>
922 + </entry>
923 +
924 + <entry>
925 + <base>DELETE_USER_TXT</base>
926 + <trans>Voulez vous vraiment supprimer cet utilisateur ?</trans>
927 + </entry>
928 +
929 + <entry>
930 + <base>GROUP_NAME</base>
931 + <trans>Nom du groupe : </trans>
932 + </entry>
933 +
934 + <entry>
935 + <base>DELETE_GROUP_TXT</base>
936 + <trans>Voulez-vous vraiment supprimer ce groupe ?</trans>
937 + </entry>
938 +
939 + <entry>
940 + <base>GROUP_TEXT_DISPLAY</base>
941 + <trans>Liste des groupes</trans>
942 + </entry>
943 +
944 + <entry>
945 + <base>CHECKED_YES</base>
946 + <trans>Oui</trans>
947 + </entry>
948 +
949 + <entry>
950 + <base>CHECKED_NO</base>
951 + <trans>Non</trans>
952 + </entry>
953 +
954 + <entry>
955 + <base>GROUP_NAME_ARRAY</base>
956 + <trans>Nom du groupe</trans>
957 + </entry>
958 +
959 + <entry>
960 + <base>DELETE_GROUP_SUCCESS</base>
961 + <trans>Groupe supprimé</trans>
962 + </entry>
963 +
964 + <entry>
965 + <base>MODIFY_GROUP_TEXT</base>
966 + <trans><![CDATA[<b>Modification des utilisateurs du groupe]]></trans>
967 + </entry>
968 +
969 + <entry>
970 + <base>MODIFY_GROUP_SUCCESS</base>
971 + <trans>Groupe modifié</trans>
972 + </entry>
973 +
974 + <entry>
975 + <base>EXIST_GROUP</base>
976 + <trans>Groupes existant : </trans>
977 + </entry>
978 +
979 + <entry>
980 + <base>FULLNAME_VERIF_ERROR</base>
981 + <trans>Le nom d'utilisateur rentré n'est pas un nom valide. Il ne doit contenir que des lettres de l'alphabet, des espace, des points ou bien des tirets.</trans>
982 + </entry>
983 +
984 + <entry>
985 + <base>MY_PASSWORD_VERIF_ERROR</base>
986 + <trans>Le mot de passe saisi n'est pas considéré comme valide. Le mot de passe ne doit contenir que des caractéres alphanumérique et doit contenir au moins 6 caractéres.</trans>
987 + </entry>
988 +
989 + <entry>
990 + <base>QUOTA_TEST_VERIF_ERROR</base>
991 + <trans>La limite de quota saisi n'est pas valide. Une limite valide est une valeur numérique.</trans>
992 + </entry>
993 +
994 + <entry>
995 + <base>SOFT_INF_WARN</base>
996 + <trans>La limite de se quota ne peut être inférieur ou égale à la limite du warning level.</trans>
997 + </entry>
998 +
999 + <entry>
1000 + <base>HARD_INF_OTHER</base>
1001 + <trans>La limite de se quota ne peut être inférieur ou égale à la limite du soft level.</trans>
1002 + </entry>
1003 +
1004 + <entry>
1005 + <base>MULTIPLE_USERNAME</base>
1006 + <trans>Le nom d'utilisateur saisi est déja utilisé, veuillez en choisir un autre.</trans>
1007 + </entry>
1008 +
1009 + <entry>
1010 + <base>MULTIPLE_EMAIL</base>
1011 + <trans>L'email saisi est déjà utilisé par un autre utilisateur, veuillez en saisir un autre.</trans>
1012 + </entry>
1013 +
1014 + <entry>
1015 + <base>MULTIPLE_GROUPNAME</base>
1016 + <trans>Ce nom de groupe est djà utilisé, veuillez en saisir un autre.</trans>
1017 + </entry>
1018 +
1019 + <entry>
1020 + <base>FALSE_USERNAME</base>
1021 + <trans>Ce nom d'utilisateur n'est pas validable. Il ne doit contenir que des caractéres alphanumérique, des points ou encore des tirets</trans>
1022 + </entry>
1023 +
1024 + <entry>
1025 + <base>ENABLED</base>
1026 + <trans>Activé</trans>
1027 + </entry>
1028 +
1029 + <entry>
1030 + <base>DISABLED</base>
1031 + <trans>Désactivé</trans>
1032 + </entry>
1033 +
1034 + <entry>
1035 + <base>GREETING</base>
1036 + <trans><![CDATA[ <br><b>Contrib developped by <a href="mailto:lucas.marcadieu@gmail.com">Marcadieu Lucas</a> and <a href="mailto:mk@ati-informatique.net">Kelkermans Marc</a>.</b>]]></trans>
1037 + </entry>
1038 +
1039 + <entry>
1040 + <base>CAUTION_NOT_DB</base>
1041 + <trans><![CDATA[ ATTENTION ! L'utilisateur n'est pas dans la DB Serveur !</b><br><br>]]></trans>
1042 + </entry>
1043 +
1044 +
1045 + <entry>
1046 + <base>IN_DB</base>
1047 + <trans><![CDATA[ L'utilisateur est dans la DB Serveur</b> <br><br>]]></trans>
1048 + </entry>
1049 +
1050 +</lexicon>
1051 \ No newline at end of file
1052 diff -urN smeserver-zarafa-0.9.0.orig/root/etc/e-smith/web/functions/zarafaCFG smeserver-zarafa-0.9.0/root/etc/e-smith/web/functions/zarafaCFG
1053 --- smeserver-zarafa-0.9.0.orig/root/etc/e-smith/web/functions/zarafaCFG 1970-01-01 10:00:00.000000000 +1000
1054 +++ smeserver-zarafa-0.9.0/root/etc/e-smith/web/functions/zarafaCFG 2009-06-01 21:15:42.000000000 +1000
1055 @@ -0,0 +1,127 @@
1056 +#!/usr/bin/perl -wT
1057 +
1058 +# vim: ts=4 sw=4 et:
1059 +#----------------------------------------------------------------------
1060 +# heading : Zarafa
1061 +# description : ZARAFA_CFG_MANAGEMENT
1062 +# navigation : 2000 2200
1063 +#----------------------------------------------------------------------
1064 +
1065 + use strict;
1066 + use warnings;
1067 + use esmith::FormMagick::Panel::zarafaCFG;
1068 +
1069 + my $f = esmith::FormMagick::Panel::zarafaCFG->new();
1070 + $f->display();
1071 +
1072 +__DATA__
1073 + <form
1074 + title="FORM_TITLE"
1075 + header="/etc/e-smith/web/common/head.tmpl"
1076 + footer="/etc/e-smith/web/common/foot.tmpl">
1077 +
1078 + <page name="First" pre-event="print_status_message()">
1079 + <subroutine src="display_buttons()" />
1080 + <subroutine src="print_message('GREETING')" />
1081 + </page>
1082 +
1083 + <page name="Config" pre-event="print_status_message()" post-event="modify_config()">
1084 +
1085 + <subroutine src="display_config()" />
1086 +
1087 + <field type="text" id="Softdelete" size="8" validation="nonblank">
1088 + <label>SOFTDELETE</label>
1089 + </field>
1090 +
1091 + <field type="text" id="cache_cell" size="8" validation="nonblank">
1092 + <label>CACHE_CELL_SIZE</label>
1093 + </field>
1094 +
1095 + <field type="text" id="cache_object" size="8" validation="nonblank">
1096 + <label>CACHE_OBJECT_SIZE</label>
1097 + </field>
1098 +
1099 + <field type="text" id="cache_index" size="8" validation="nonblank">
1100 + <label>CACHE_INDEX_SIZE</label>
1101 + </field>
1102 +
1103 + <field type="text" id="quota_warn" size="8">
1104 + <label>QUOTA_WARN</label>
1105 + </field>
1106 +
1107 + <field type="text" id="quota_soft" size="8">
1108 + <label>QUOTA_SOFT</label>
1109 + </field>
1110 +
1111 + <field type="text" id="quota_hard" size="8">
1112 + <label>QUOTA_HARD</label>
1113 + </field>
1114 +
1115 + <field type="text" id="companyquota_warn" size="8">
1116 + <label>COMPANYQUOTA_WARN</label>
1117 + </field>
1118 +
1119 + <subroutine src="display_modify_button()" />
1120 + <subroutine src="print_message('GREETING')" />
1121 + </page>
1122 +
1123 + <page name="KEYSNeed" pre-event="print_status_message()" post-event="add_cdkey()">
1124 +
1125 + <description>CAUTION_TIME</description>
1126 + <field type="text" id="clef-cd" size="30" validation="nonblank, valid_keys">
1127 + <label>CLEF_CD</label>
1128 + </field>
1129 +
1130 + <subroutine src="display_modify_button()" />
1131 + <subroutine src="print_message('GREETING')" />
1132 + </page>
1133 +
1134 + <page name="KEYSUNeed" pre-event="print_status_message()">
1135 +
1136 + <subroutine src="display_key_info()" />
1137 + <subroutine src="display_cal()" />
1138 + <subroutine src="print_message('GREETING')" />
1139 + </page>
1140 +
1141 + <page name="MYSQL" pre-event="print_status_message()" post-event="modify_mysql()">
1142 +
1143 + <description>CAUTION_TIME</description>
1144 +
1145 + <subroutine src="display_value()" />
1146 +
1147 + <field type="text" id="buffer_pool_size" size="10" validation="nonblank, only_num">
1148 + <label>BUFFER_POOL_SIZE</label>
1149 + </field>
1150 +
1151 + <field type="text" id="additional_mem_pool_size" size="10" validation="nonblank, only_num">
1152 + <label>ADDITIONAL_MEM_POOL_SIZE</label>
1153 + </field>
1154 +
1155 + <field type="text" id="log_file_size" size="10" validation="nonblank, only_num">
1156 + <label>LOG_FILE_SIZE</label>
1157 + </field>
1158 +
1159 + <field type="text" id="log_buffer_size" size="10" validation="nonblank, only_num">
1160 + <label>LOG_BUFFER_SIZE</label>
1161 + </field>
1162 +
1163 + <subroutine src="display_modify_button()" />
1164 + <subroutine src="print_message('GREETING')" />
1165 + </page>
1166 +
1167 + <page name="CreateCal" pre-event="print_status_message()" post-event="create_cal()">
1168 +
1169 + <description>CAUTION_TIME</description>
1170 + <field type="text" id="user_name_cal" size="30" validation="nonblank, unique_name">
1171 + <label>INSERT_CAL_NAME</label>
1172 + </field>
1173 +
1174 + <field type="text" id="user_key_cal" size="30" validation="nonblank, valid_cal, unique_key">
1175 + <label>INSERT_CAL_KEY</label>
1176 + </field>
1177 +
1178 + <subroutine src="display_create_button()" />
1179 + <subroutine src="print_message('GREETING')" />
1180 + </page>
1181 +
1182 + </form>
1183 \ No newline at end of file
1184 diff -urN smeserver-zarafa-0.9.0.orig/root/etc/e-smith/web/functions/zarafaUI smeserver-zarafa-0.9.0/root/etc/e-smith/web/functions/zarafaUI
1185 --- smeserver-zarafa-0.9.0.orig/root/etc/e-smith/web/functions/zarafaUI 1970-01-01 10:00:00.000000000 +1000
1186 +++ smeserver-zarafa-0.9.0/root/etc/e-smith/web/functions/zarafaUI 2009-06-01 21:15:42.000000000 +1000
1187 @@ -0,0 +1,193 @@
1188 +#!/usr/bin/perl -wT
1189 +
1190 +# vim: ts=4 sw=4 et:
1191 +#----------------------------------------------------------------------
1192 +# heading : Zarafa
1193 +# description : USER_GROUP_MANAGEMENT
1194 +# navigation : 2000 2150
1195 +#----------------------------------------------------------------------
1196 +
1197 + use strict;
1198 + use warnings;
1199 + use esmith::FormMagick::Panel::zarafaUI;
1200 +
1201 + my $f = esmith::FormMagick::Panel::zarafaUI->new();
1202 + $f->display();
1203 +
1204 + __DATA__
1205 + <form
1206 + title="FORM_TITLE"
1207 + header="/etc/e-smith/web/common/head.tmpl"
1208 + footer="/etc/e-smith/web/common/foot.tmpl">
1209 +
1210 + <page name="First" pre-event="print_status_message()"
1211 + post-event="transfer_page()">
1212 + <subroutine src="show_users()" />
1213 + <subroutine src="show_group()" />
1214 + <subroutine src="print_message('GREETING')" />
1215 + </page>
1216 +
1217 + <page name="DisplayDetails" pre-event="turn_off_buttons()"
1218 + post-event="modify_user()">
1219 +
1220 + <subroutine src="display_user_details()" />
1221 +
1222 + <field type="text" id="Username" size="8" validation="nonblank, my_username, unique_username_modify">
1223 + <label>USERNAME</label>
1224 + </field>
1225 +
1226 + <field type="text" id="Fullname" validation="nonblank, fullname">
1227 + <label>FULLNAME</label>
1228 + </field>
1229 +
1230 + <field type="text" id="EmailAddress" size="30" validation="nonblank, email_simple, unique_email_modify">
1231 + <label>EMAILADDRESS</label>
1232 + </field>
1233 +
1234 + <field type="select" id="Admin" options="'yes' => 'Oui', 'no' => 'Non'" validation="nonblank">
1235 + <label>ADMIN</label>
1236 + </field>
1237 +
1238 + <field type="select" id="auto_meeting_req" options="'yes' => 'Oui', 'no' => 'Non'" validation="nonblank">
1239 + <label>AUTO_ACCEPT_MEETING</label>
1240 + </field>
1241 +
1242 + <field type="select" id="dbl_meeting" options="'yes' => 'Oui', 'no' => 'Non'" validation="nonblank">
1243 + <label>DECLINE_DLB_REQ</label>
1244 + </field>
1245 +
1246 + <field type="select" id="decline_recur_meeting" options="'yes' => 'Oui', 'no' => 'Non'" validation="nonblank">
1247 + <label>DECLINE_RECUR_REQ</label>
1248 + </field>
1249 +
1250 + <field type="select" id="quota" options="'yes' => 'Oui', 'no' => 'Non'" validation="nonblank">
1251 + <label>QUOTA_OVERR</label>
1252 + </field>
1253 +
1254 + <field type="text" id="Warnlvl" size="8" validation="quota_test">
1255 + <label>WARN_LVL</label>
1256 + </field>
1257 +
1258 + <field type="text" id="Softlvl" size="8" validation="quota_test, sup_quota_inter">
1259 + <label>SOFT_LVL</label>
1260 + </field>
1261 +
1262 + <field type="text" id="Hardlvl" size="8" validation="quota_test, sup_quota_hard">
1263 + <label>HARD_LVL</label>
1264 + </field>
1265 +
1266 + <field type="password" id="new_password" validation="my_password(6)">
1267 + <label>CHANGE_PSSWD</label>
1268 + </field>
1269 +
1270 + <subroutine src="display_user_groups()" />
1271 + <subroutine src="display_modify_button()" />
1272 + <subroutine src="print_message('GREETING')" />
1273 + </page>
1274 +
1275 + <page name="DisplayCreate" pre-event="turn_off_buttons()"
1276 + post-event="Create_user()">
1277 +
1278 + <field type="text" id="Username" size="8" validation="nonblank, my_username, unique_username">
1279 + <label>USERNAME</label>
1280 + </field>
1281 +
1282 + <field type="text" id="Fullname" validation="nonblank, fullname">
1283 + <label>FULLNAME</label>
1284 + </field>
1285 +
1286 + <field type="password" id="Password" validation="nonblank, my_password(6)">
1287 + <label>PASSWORD</label>
1288 + </field>
1289 +
1290 + <field type="text" id="EmailAddress" size="30" validation="nonblank, email_simple, unique_email">
1291 + <label>EMAILADDRESS</label>
1292 + </field>
1293 +
1294 + <field type="select" id="Admin" options="'yes' => 'Oui', 'no' => 'Non'" validation="nonblank">
1295 + <label>ADMIN</label>
1296 + </field>
1297 +
1298 + <field type="select" id="Active" options="'no' => 'Actif', 'yes' => 'Non-actif'" validation="nonblank">
1299 + <label>ACTIVE_CREATE</label>
1300 + </field>
1301 +
1302 + <field type="select" id="quota" options="'yes' => 'Oui', 'no' => 'Non'" validation="nonblank">
1303 + <label>QUOTA_OVERR</label>
1304 + </field>
1305 +
1306 + <field type="text" id="Warnlvl" size="8" value="0">
1307 + <label>WARN_LVL</label>
1308 + </field>
1309 +
1310 + <field type="text" id="Softlvl" size="8" value="0" validation="sup_quota_inter">
1311 + <label>SOFT_LVL</label>
1312 + </field>
1313 +
1314 + <field type="text" id="Hardlvl" size="8" value="0" validation="sup_quota_hard">
1315 + <label>HARD_LVL</label>
1316 + </field>
1317 +
1318 + <subroutine src="display_create_user_group()" />
1319 + <subroutine src="display_create_button()" />
1320 + <subroutine src="print_message('GREETING')" />
1321 + </page>
1322 +
1323 + <page name="DeleteUser" pre-event="turn_off_buttons()"
1324 + post-event="delete_user()">
1325 + <description>DELETE_USER_TXT</description>
1326 + <subroutine src="display_delete_button()" />
1327 + <subroutine src="print_message('GREETING')" />
1328 + </page>
1329 +
1330 + <page name="DisplayCreateGroup" pre-event="turn_off_buttons()"
1331 + post-event="Create_group()">
1332 +
1333 + <field type="text" id="Groupname" validation="nonblank, fullname, unique_groupname">
1334 + <label>GROUP_NAME</label>
1335 + </field>
1336 +
1337 + <subroutine src="display_create_button()" />
1338 + <subroutine src="print_message('GREETING')" />
1339 + </page>
1340 +
1341 + <page name="DeleteGroup" pre-event="turn_off_buttons()"
1342 + post-event="delete_group()">
1343 + <description>DELETE_GROUP_TXT</description>
1344 + <subroutine src="display_delete_group_button" />
1345 + <subroutine src="print_message('GREETING')" />
1346 + </page>
1347 +
1348 + <page name="DisplayGroupDetails" pre-event="turn_off_buttons()"
1349 + post-event="modify_user_group()">
1350 + <subroutine src="display_user_in_group()" />
1351 + <subroutine src="display_modify_group_button()" />
1352 + <subroutine src="print_message('GREETING')" />
1353 + </page>
1354 +
1355 + <page name="DisplayCompanyDetails" pre-event="print_status_message()" post-event="transfer_page()">
1356 +
1357 + <subroutine src="show_company_users()" />
1358 + <subroutine src="print_message('GREETING')" />
1359 + </page>
1360 +
1361 + <page name="CreateCompany" pre-event="print_status_message()" post-event="create_company()">
1362 +
1363 + <field type="text" id="createcompanyname" size="20" validation="nonblank">
1364 + <label>COMPANY_NAME</label>
1365 + </field>
1366 +
1367 + <subroutine src="display_create_button()" />
1368 + <subroutine src="print_message('GREETING')" />
1369 + </page>
1370 +
1371 + <page name="DeleteCompany" pre-event="turn_off_buttons()"
1372 + post-event="delete_company()">
1373 +
1374 + <description>DELETE_COMPANY_TXT</description>
1375 +
1376 + <subroutine src="display_delete_comp_button" />
1377 + <subroutine src="print_message('GREETING')" />
1378 + </page>
1379 +
1380 + </form>
1381 \ No newline at end of file
1382 diff -urN smeserver-zarafa-0.9.0.orig/root/usr/lib/perl5/site_perl/esmith/FormMagick/Panel/zarafaCFG.pm smeserver-zarafa-0.9.0/root/usr/lib/perl5/site_perl/esmith/FormMagick/Panel/zarafaCFG.pm
1383 --- smeserver-zarafa-0.9.0.orig/root/usr/lib/perl5/site_perl/esmith/FormMagick/Panel/zarafaCFG.pm 1970-01-01 10:00:00.000000000 +1000
1384 +++ smeserver-zarafa-0.9.0/root/usr/lib/perl5/site_perl/esmith/FormMagick/Panel/zarafaCFG.pm 2009-06-01 21:15:18.000000000 +1000
1385 @@ -0,0 +1,964 @@
1386 +#!/usr/bin/perl -w
1387 +
1388 +package esmith::FormMagick::Panel::zarafaCFG;
1389 +
1390 + use strict;
1391 + use warnings;
1392 + use esmith::FormMagick;
1393 + use esmith::cgi;
1394 + use esmith::util;
1395 + use Exporter;
1396 + use esmith::ConfigDB;
1397 + use utf8;
1398 +
1399 + our @ISA = qw(esmith::FormMagick Exporter);
1400 +
1401 + our @EXPORT = qw();
1402 +
1403 + our $VERSION = sprintf '%d.%03d', q$Revision: 1.1 $ =~ /: (\d+).(\d+)/;
1404 +
1405 + our $configdb = esmith::ConfigDB->open();
1406 +
1407 + # Longueur des clef de license pour vérification
1408 + our $licensekey = 24;
1409 + our $CALkey = 16;
1410 +
1411 +# Ce fichier contient les fonction nécessaire pour gérer l'interface entre le serveur SME et la configuration de certain paramétres du module Zarafa.
1412 +# Ce fichier regroupe des fonctions d'affichage, de modifications et de vérifications de données contenu dans Zarafa.
1413 +#####################################################################################################################################
1414 +# This file contains the required functions in order to handle the interface between SME server and Zarafa configuration module's.
1415 +# It contains display, modify, create and verification functions for Zarafa.
1416 +
1417 +
1418 +# display_config permet l'affichage d'options et le préremplissage de champs pour la configuration du serveur de messagerie
1419 +###########################################################################################################################
1420 +# display_config is used to display options and to fill many fields for the mail's server
1421 +
1422 +sub display_config {
1423 +
1424 + my $self = shift;
1425 + my $cgi = $self->{cgi};
1426 +
1427 + # Récupération des valeurs à inséré dans les champs
1428 + # Recovery of value to put into fields
1429 + my ($softdelete, $cache_cell, $cache_object, $cache_index, $quota_warn, $quota_soft, $quota_hard, $companyquota_warn, $multicompany);
1430 + open(LIRE, "/etc/e-smith/templates/etc/zarafa/server.cfg/server.cfg");
1431 + while(<LIRE>){
1432 + my $ligne = $_;
1433 + if($ligne =~ m/^softdelete_lifetime/){
1434 + $softdelete = $ligne;
1435 + $softdelete =~ s/softdelete_lifetime\s+\=\s{1}//g;
1436 + }
1437 + if($ligne =~ m/^cache_cell_size/){
1438 + $cache_cell = $ligne;
1439 + $cache_cell =~ s/cache_cell_size\s+\=\s{1}//g;
1440 + }
1441 + if($ligne =~ m/^cache_object_size/){
1442 + $cache_object = $ligne;
1443 + $cache_object =~ s/cache_object_size\s+\=\s{1}//g;
1444 + }
1445 + if($ligne =~ m/^cache_indexedobject_size/){
1446 + $cache_index = $ligne;
1447 + $cache_index =~ s/cache_indexedobject_size\s+\=\s{1}//g;
1448 + }
1449 + if($ligne =~ m/^quota_warn/){
1450 + $quota_warn = $ligne;
1451 + $quota_warn =~ s/quota_warn\s+\=\s{1}//g;
1452 + }
1453 + if($ligne =~ m/^quota_soft/){
1454 + $quota_soft = $ligne;
1455 + $quota_soft =~ s/quota_soft\s+\=\s{1}//g;
1456 + }
1457 + if($ligne =~ m/^quota_hard/){
1458 + $quota_hard = $ligne;
1459 + $quota_hard =~ s/quota_hard\s+\=\s{1}//g;
1460 + }
1461 + if($ligne =~ m/^companyquota_warn/){
1462 + $companyquota_warn = $ligne;
1463 + $companyquota_warn =~ s/companyquota_warn\s+\=\s{1}//g;
1464 + }
1465 + if($ligne =~ m/^enable_hosted_zarafa/){
1466 + $multicompany = $ligne;
1467 + $multicompany =~ s/enable_hosted_zarafa\s+\=\s//g;
1468 + }
1469 + }
1470 + close(LIRE);
1471 +
1472 + # Affichage des valeurs récupérées
1473 + # Display of the precedent values
1474 + $cgi->param(-name=>'Softdelete', -value=>$softdelete);
1475 + $cgi->param(-name=>'cache_cell', -value=>$cache_cell);
1476 + $cgi->param(-name=>'cache_object', -value=>$cache_object);
1477 + $cgi->param(-name=>'cache_index', -value=>$cache_index);
1478 + $cgi->param(-name=>'quota_warn', -value=>$quota_warn);
1479 + $cgi->param(-name=>'quota_soft', -value=>$quota_soft);
1480 + $cgi->param(-name=>'quota_hard', -value=>$quota_hard);
1481 + $cgi->param(-name=>'companyquota_warn', -value=>$companyquota_warn);
1482 +
1483 + # Localisation
1484 + my $multicomp = $self->localise('MULTICOMP');
1485 + my $globalforward = $self->localise('GLOBALFORWARD');
1486 + my $enabled = $self->localise('ENABLED');
1487 +
1488 +
1489 + my $out = "<tr>\n <td class=\"sme-noborders-label\">"
1490 + . "$multicomp"
1491 + . "</td>\n <td>\n"
1492 + . " <table border='0' cellspacing='0' cellpadding='0'>\n";
1493 + if($multicompany =~ m/true/){
1494 + $out .="<td>$enabled</td><td><input type=\"checkbox\" name=\"multicompany\" checked"
1495 + ." value=\"enabled\"></td>"
1496 + ."</tr>\n";
1497 + }
1498 + else {
1499 + $out .="<td>$enabled</td><td><input type=\"checkbox\" name=\"multicompany\""
1500 + ." value=\"enabled\"></td>"
1501 + ."</tr>\n";
1502 + }
1503 + $out .= " </table>\n </td>\n </tr>\n";
1504 +
1505 + $out .= "<tr>\n <td class=\"sme-noborders-label\">"
1506 + . "$globalforward"
1507 + . "</td>\n <td>\n"
1508 + . " <table border='0' cellspacing='0' cellpadding='0'>\n";
1509 + unless(!$configdb->get_prop("zarafa-server",'GlobalForward')){
1510 + if($configdb->get_prop("zarafa-server",'GlobalForward') =~ m/enabled/){
1511 + $out .="<td>$enabled</td><td><input type=\"checkbox\" name=\"globalforward\" checked"
1512 + ." value=\"enabled\"></td>"
1513 + ."</tr>\n";
1514 + }
1515 + }
1516 + else {
1517 + $out .="<td>$enabled</td><td><input type=\"checkbox\" name=\"globalforward\""
1518 + ." value=\"enabled\"></td>"
1519 + ."</tr>\n";
1520 + }
1521 + $out .= " </table>\n </td>\n </tr>\n";
1522 +
1523 +return $out;
1524 +}
1525 +
1526 +# display_modify_button affiche un bouton avec le texte "Modifier"
1527 +###########################################################
1528 +# display_modify_button display a button with "Modify" text on it
1529 +
1530 +sub display_modify_button {
1531 +
1532 + my ($self) = @_;
1533 + my $cgi = $self->{cgi};
1534 + my $button = $self->localise('MODIFY_BUTTON');
1535 + $self->print_button("$button");
1536 +}
1537 +
1538 +# modify_config récupére les valeurs saisi dans l'interface pour les entrés dans le serveur
1539 +###########################################################################################
1540 +# modify_config recover the values enter in the interface to put them into the server configuration
1541 +
1542 +sub modify_config {
1543 +
1544 + my $self = shift;
1545 + my $cgi = $self->{cgi};
1546 +
1547 + # Récupération des valeurs
1548 + # Revover of the value
1549 + my $softdelete = $cgi->param('Softdelete');
1550 + if ($softdelete =~ /^([-\@\w.]+)$/) {
1551 + $softdelete = $1; # $data now untainted
1552 + }
1553 + else {
1554 + die "bad data in $softdelete";
1555 + }
1556 +
1557 + my $cache_cell = $cgi->param('cache_cell');
1558 + if ($cache_cell =~ /^([-\@\w.]+)$/) {
1559 + $cache_cell = $1; # $data now untainted
1560 + }
1561 + else {
1562 + die "bad data in $cache_cell";
1563 + }
1564 +
1565 + my $cache_object = $cgi->param('cache_object');
1566 + if ($cache_object =~ /^([-\@\w.]+)$/) {
1567 + $cache_object = $1; # $data now untainted
1568 + }
1569 + else {
1570 + die "bad data in $cache_object";
1571 + }
1572 +
1573 + my $cache_index = $cgi->param('cache_index');
1574 + if ($cache_index =~ /^([-\@\w.]+)$/) {
1575 + $cache_index = $1; # $data now untainted
1576 + }
1577 + else {
1578 + die "bad data in $cache_index";
1579 + }
1580 +
1581 + my $quota_warn = $cgi->param('quota_warn');
1582 + if ($quota_warn =~ /^([-\@\w.]+)$/) {
1583 + $quota_warn = $1; # $data now untainted
1584 + }
1585 + else {
1586 + die "bad data in $quota_warn";
1587 + }
1588 +
1589 + my $quota_soft = $cgi->param('quota_soft');
1590 + if ($quota_soft =~ /^([-\@\w.]+)$/) {
1591 + $quota_soft = $1; # $data now untainted
1592 + }
1593 + else {
1594 + die "bad data in $quota_soft";
1595 + }
1596 +
1597 + my $quota_hard = $cgi->param('quota_hard');
1598 + if ($quota_hard =~ /^([-\@\w.]+)$/) {
1599 + $quota_hard = $1; # $data now untainted
1600 + }
1601 + else {
1602 + die "bad data in $quota_hard";
1603 + }
1604 +
1605 + my $companyquota_warn = $cgi->param('companyquota_warn');
1606 + if ($companyquota_warn =~ /^([-\@\w.]+)$/) {
1607 + $companyquota_warn = $1; # $data now untainted
1608 + }
1609 + else {
1610 + die "bad data in $companyquota_warn";
1611 + }
1612 +
1613 + my $multicompany = $cgi->param('multicompany');
1614 +
1615 +
1616 + # Récupération du contenu de server.cfg
1617 + # Recovery of the content of server.cfg
1618 + open(RECUP, "/etc/e-smith/templates/etc/zarafa/server.cfg/server.cfg");
1619 + my @contenu = <RECUP>;
1620 + close(RECUP);
1621 +
1622 + # Remplacement des valeurs
1623 + # Replacement of values
1624 + foreach my $ligne (@contenu){
1625 + unless ($ligne =~ m/^#/){
1626 + if ($ligne =~ m/^softdelete_lifetime/){
1627 + $ligne =~ s/\w+$/$softdelete/g;
1628 + }
1629 +
1630 + if($ligne =~ m/^cache_cell_size/){
1631 + $ligne =~ s/\w+$/$cache_cell/g;
1632 + }
1633 +
1634 + if($ligne =~ m/^cache_object_size/){
1635 + $ligne =~ s/\w+$/$cache_object/g;
1636 + }
1637 +
1638 + if($ligne =~ m/^cache_indexedobject_size/){
1639 + $ligne =~ s/\w+$/$cache_index/g;
1640 + }
1641 + if($ligne =~ m/^quota_warn/){
1642 + $ligne =~ s/\w+$/$quota_warn/g;
1643 + }
1644 + if($ligne =~ m/^quota_soft/){
1645 + $ligne =~ s/\w+$/$quota_soft/g;
1646 + }
1647 + if($ligne =~ m/^quota_hard/){
1648 + $ligne =~ s/\w+$/$quota_hard/g;
1649 + }
1650 + if($ligne =~ m/^companyquota_warn/){
1651 + $ligne =~ s/\w+$/$companyquota_warn/g;
1652 + }
1653 + if($ligne =~ m/^enable_hosted_zarafa/ && !$multicompany){
1654 + $ligne =~ s/\w+$/false/g;
1655 + }
1656 + elsif($ligne =~ m/^enable_hosted_zarafa/ && $multicompany eq 'enabled'){
1657 + $ligne =~ s/\w+$/true/g;
1658 + }
1659 + }
1660 + }
1661 +
1662 + # Ecriture du fichier
1663 + # File written
1664 + open(ECRIRE, ">/etc/e-smith/templates/etc/zarafa/server.cfg/server.cfg");
1665 + foreach my $ligne (@contenu) {
1666 + chomp $ligne;
1667 + print ECRIRE "$ligne\n";
1668 + }
1669 + close(ECRIRE);
1670 +
1671 + my $globalforward = $cgi->param('globalforward');
1672 +
1673 +
1674 + if(!$globalforward || $globalforward =~ m/disabled/) {
1675 + system("/sbin/e-smith/db configuration delprop \"zarafa-server\" GlobalForward");
1676 + }
1677 + elsif($globalforward =~ m/enabled/){
1678 + system("/sbin/e-smith/db configuration setprop \"zarafa-server\" GlobalForward enabled");
1679 + }
1680 +
1681 +
1682 +
1683 + $self->success('MODIFY_CONFIG_SUCCESS');
1684 +
1685 + # creation du fichier de configuration
1686 + # config file creation
1687 + system("/sbin/e-smith/expand-template /etc/zarafa/server.cfg") == 0
1688 + or die "Impossible d'extend le template";
1689 + system("/etc/e-smith/events/actions/zarafa-services stop > /dev/null");
1690 + system("/etc/e-smith/events/actions/zarafa-services start > /dev/null");
1691 + system("/etc/e-smith/events/actions/qmail-update-user");
1692 +}
1693 +
1694 +# display_buttons permet d'afficher les trois bouttons pour les différentes sections de configuration
1695 +#####################################################################################################
1696 +# display_buttons allow you to display three buttons for the different parts of the configuration
1697 +
1698 +sub display_buttons {
1699 +
1700 + my $self = shift;
1701 + my $q = $self->{cgi};
1702 +
1703 + # Récupération version de zarafa
1704 + # Recovery of Zarafa version
1705 + my $product_version;
1706 + open(VERS,"zarafa-admin -V |");
1707 + while(<VERS>){
1708 + my $ligne = $_;
1709 + if($ligne =~ m/^Product version/){
1710 + $ligne =~ s/\w+\s\w+:\t//g;
1711 + $product_version = $ligne;
1712 + }
1713 + }
1714 + close(VERS);
1715 +
1716 + # Récupération du systéme de BD
1717 + # Recovery of DB system
1718 + my $zarafa_plugin = $configdb->get_prop("zarafa-server",'Plugin');
1719 + unless($zarafa_plugin){
1720 + $zarafa_plugin = $self->localise('ZARAFA_PLUGIN_CAUTION');
1721 + }
1722 +
1723 + # Version communautaire ou enregistré ?
1724 + # Registered or enregistered version ?
1725 + my $registered;
1726 + if(-e "/etc/zarafa/license/base"){
1727 + $registered = $self->localise('REGISTERED');
1728 + }
1729 + else {
1730 + $registered = $self->localise('UNREGISTERED');
1731 + }
1732 +
1733 + # Récupération du nombre d'utilisateur maximum
1734 + # Recovery of maximum users
1735 + my $nbrusermax;
1736 + open(REVERSE, "/var/log/zarafa/licensed.log") or die "Impossible d'ouvrir licensed.log";
1737 + foreach my $ligne (reverse(<REVERSE> )) {
1738 + if($ligne =~ m/License is for/){
1739 + $nbrusermax = $ligne;
1740 + $nbrusermax =~ s/.+License is for //g;
1741 + $nbrusermax =~ s/ Win32 MAPI users$//g;
1742 + $nbrusermax =~ s/ total users$//g;
1743 + last;
1744 + }
1745 + }
1746 + close(REVERSE);
1747 +
1748 + # Localisation
1749 + my $version = $self->localise('VERSION');
1750 + my $sys_auth = $self->localise('SYS_AUTH');
1751 + my $maxuser = $self->localise('MAX_USERS');
1752 +
1753 +
1754 + # Affichage des info
1755 + # Information display
1756 + print "$version $product_version - $sys_auth $zarafa_plugin - $registered - $nbrusermax $maxuser \n";
1757 +
1758 + # Localisation
1759 + my $CFGbutton = $self->localise('CFG_BUTTON');
1760 + my $CFGbutton_bubble = $self->localise('CFG_BUTTON_BUBBLE');
1761 +
1762 + # Affichage bouton configuration
1763 + # Display the configuration button
1764 + my $out ="<p><a class=\"button-like\"
1765 + href=\"zarafaCFG?page=0&wherenext=Config\" title=\"$CFGbutton_bubble\">$CFGbutton</a>";
1766 +
1767 + # Localisation
1768 + my $KEYbutton = $self->localise('KEY_BUTTON');
1769 + my $KEYbutton_bubble = $self->localise('KEY_BUTTON_BUBBLE');
1770 +
1771 + if(-e "/etc/zarafa/license/base"){
1772 + # Affichage bouton de gestion des clef pour une version enregistrée
1773 + # Display the key management button for a registered version
1774 + $out .="<a class=\"button-like\"
1775 + href=\"zarafaCFG?page=0&wherenext=KEYSUNeed\" title=\"$KEYbutton_bubble\">$KEYbutton</a>";
1776 + }
1777 + else{
1778 + # Affichage bouton de validation de la version
1779 + # Display the version validation button
1780 + $out .="<a class=\"button-like\"
1781 + href=\"zarafaCFG?page=0&wherenext=KEYSNeed\" title=\"$KEYbutton_bubble\">$KEYbutton</a>";
1782 + }
1783 +
1784 + # Localisation
1785 + my $MYSQLbutton = $self->localise('MYSQL_BUTTON');
1786 + my $MYSQLbutton_bubble = $self->localise('MYSQL_BUTTON_BUBBLE');
1787 +
1788 + # Affichage bouton MySQL
1789 + # Display the MySQL button
1790 + $out .="<a class=\"button-like\"
1791 + href=\"zarafaCFG?page=0&wherenext=MYSQL\" title=\"$MYSQLbutton_bubble\">$MYSQLbutton</a></p>";
1792 +
1793 + return $out;
1794 +}
1795 +
1796 +# add_cdkey est utilisé pour ajouter une clé-CD pour authentifier Zarafa
1797 +#######################################################################
1798 +# add_cdkey is used to add a CD-key to authenticate Zarafa
1799 +
1800 +sub add_cdkey{
1801 +
1802 + my $self = shift;
1803 + my $cgi = $self->{cgi};
1804 +
1805 + # Récupération de la clef saisi par l'utilisateur
1806 + # Recovery of the key enter by the user
1807 + my $cd_key = $cgi->param('clef-cd');
1808 + if ($cd_key =~ /^([-\@\w.]+)$/) {
1809 + $cd_key = $1; # $data now untainted
1810 + }
1811 + else {
1812 + die "bad data in $cd_key";
1813 + }
1814 +
1815 + # Ecriture du fichier base
1816 + # Writing of the base file
1817 + $cd_key = uc($cd_key);
1818 + open(ECRIRE, ">/etc/zarafa/license/base");
1819 + print ECRIRE "$cd_key";
1820 + close(ECRIRE);
1821 +
1822 + $self->success('ADD_LICENSE_SUCCESS');
1823 +
1824 + # Redémarage des services zarafa
1825 + # Restart of Zarafa services
1826 + system("/etc/e-smith/events/actions/zarafa-services restart > /dev/null");
1827 +}
1828 +
1829 +# display_key_info permet d'afficher la clef-cd de la version en cours de zarafa ainsi que le nombre maximum d'utilisateurs pouvant être créé.
1830 +##############################################################################################################################################
1831 +# display_key_info is used to display the CD-key of zarafa current version and the maximum number of Zarafa user's could be created.
1832 +
1833 +sub display_key_info {
1834 +
1835 + my $self = shift;
1836 + my $cgi = $self->{cgi};
1837 +
1838 + # Récupération de la clé-CD
1839 + # Recovery of the CD-key
1840 + open(KEYS,"/etc/zarafa/license/base");
1841 + my $key = <KEYS>;
1842 + close(KEYS);
1843 + # Localisation
1844 + my $clef = $self->localise('CD_KEY');
1845 + my $nbrusertxt = $self->localise('NBRUSERTXT');
1846 +
1847 + # Récupération du nombre maximum d'utilisateurs
1848 + # Recovery of the maximum users number
1849 + my $nbrusermax;
1850 + open(REVERSE, "/var/log/zarafa/licensed.log") or die "Impossible d'ouvrir licensed.log";
1851 + foreach my $ligne (reverse(<REVERSE> )) {
1852 + if($ligne =~ m/License is for/){
1853 + $nbrusermax = $ligne;
1854 + $nbrusermax =~ s/.+License is for //g;
1855 + $nbrusermax =~ s/ Win32 MAPI users$//g;
1856 + $nbrusermax =~ s/ total users$//g;
1857 + last;
1858 + }
1859 + }
1860 + close(REVERSE);
1861 +
1862 + # Affichage
1863 + # Display
1864 + print "$clef $key - $nbrusermax $nbrusertxt";
1865 + return 0;
1866 +}
1867 +
1868 +# valid_keys est utilisé pour vérifier si la clef-CD rentré pour renregistré zarafa est valide
1869 +##############################################################################################
1870 +# valid_keys is used to verify if the CD-key enter for registered Zarafa is correct
1871 +
1872 +sub valid_keys {
1873 +
1874 + my ($fm, $cd_key) = @_;
1875 + my $self = shift;
1876 + my $return_error = $self->localise('INVALID_KEY');
1877 +
1878 + if($cd_key =~ m/^\w{$licensekey}$/){
1879 + return "OK";
1880 + }
1881 + else {
1882 + return $return_error;
1883 + }
1884 +}
1885 +
1886 +# display_cal sert à afficher un tableau contenant le nom des CAL ainsi que la clef associée
1887 +############################################################################################
1888 +# display_cal is used to display an array which contain all CAl and the key associated
1889 +
1890 +sub display_cal {
1891 +
1892 + my $self = shift;
1893 + my $q = $self->{cgi};
1894 +
1895 + # Localisation
1896 + my $calname = $self->localise('CALNAME');
1897 + my $calkey = $self->localise('CALKEY');
1898 + my $caldelete = $self->localise('DELETE');
1899 +
1900 + # Affichage de l'en-tête du tableau
1901 + # Display of the header
1902 + print " <tr>\n <td colspan=\"2\">\n ";
1903 + print $q->start_table ({-CLASS => "sme-border"}),"\n ";
1904 + print $q->Tr(
1905 + esmith::cgi::genSmallCell($q, $calname,"header"),
1906 + esmith::cgi::genSmallCell($q, $calkey,"header"));
1907 +
1908 +
1909 + # Récupération du nom des fichiers CAL
1910 + # Recovery of the CAL file name
1911 + my $filekey;
1912 + opendir(OPENDIR, "/etc/zarafa/license") or die "Impossible d'ouvrir /etc/zarafa/license";
1913 + my @all_files = readdir (OPENDIR);
1914 + close(OPENDIR);
1915 +
1916 + # Affichage du nom et de la clef
1917 + # Display of the name and the key
1918 + my @out = sort @all_files;
1919 + foreach my $file (@out) {
1920 + unless($file eq 'base' or $file eq '..' or $file eq '.'){
1921 + open(FILE, "/etc/zarafa/license/$file") or die "Impossible d'ouvrir $file";
1922 + $filekey = <FILE>;
1923 + print $q->Tr(
1924 + esmith::cgi::genSmallCell($q, $file,"normal"),
1925 + esmith::cgi::genSmallCell($q, $filekey,"normal"));
1926 + close(FILE);
1927 + }
1928 + }
1929 +
1930 + print qq(</table></td></tr>\n);
1931 +
1932 + # Localisation
1933 + my $createCal = $self->localise('CAL_BUTTON');
1934 + my $createCal_bubble = $self->localise('CAL_BUTTON_BUBBLE');
1935 +
1936 + # Affichage bouton ajouter CAL
1937 + # Display the CAL's create button
1938 + my $out ="<p><a class=\"button-like\"
1939 + href=\"zarafaCFG?page=0&wherenext=CreateCal\" title=\"$createCal_bubble\">$createCal</a>";
1940 +
1941 +return $out;
1942 +}
1943 +
1944 +# display_create_button permet d'afficher un bouton avec le texte "Ajouter Clé"
1945 +###############################################################################
1946 +# display_create_button is used to display a button with "Add key" text
1947 +
1948 +sub display_create_button {
1949 +
1950 + my ($self) = @_;
1951 + my $cgi = $self->{cgi};
1952 +
1953 + my $button = $self->localise('CREATE_BUTTON');
1954 + $self->print_button("$button");
1955 +}
1956 +
1957 +# create_cal permet de rajouter un CAL à zarafa
1958 +###############################################
1959 +# create_cal is used to add a CAL to zarafa
1960 +
1961 +sub create_cal {
1962 +
1963 + my $self = shift;
1964 + my $cgi = $self->{cgi};
1965 +
1966 + # Récupération du nom du CAL et de la clef
1967 + # Recovery of the CAL name and the key
1968 + my $calname = $cgi->param('user_name_cal');
1969 + if ($calname =~ /^([-\@\w.]+)$/) {
1970 + $calname = $1; # $data now untainted
1971 + }
1972 + else {
1973 + die "bad data in $calname";
1974 + }
1975 +
1976 + my $calkey = $cgi->param('user_key_cal');
1977 + if ($calkey =~ /^([-\@\w.]+)$/) {
1978 + $calkey = $1; # $data now untainted
1979 + }
1980 + else {
1981 + die "bad data in $calkey";
1982 + }
1983 +
1984 + # Ecriture du fichier
1985 + # Writing of the file
1986 + open(CREATE, ">/etc/zarafa/license/$calname");
1987 + print CREATE $calkey;
1988 + close(CREATE);
1989 +
1990 + $self->success('MODIFY_CONFIG_SUCCESS');
1991 +
1992 + # Redémarrage des services Zarafa
1993 + # Restart of the zarafa services
1994 + system("/etc/e-smith/events/actions/zarafa-services restart > /dev/null");
1995 +}
1996 +
1997 +# unique_cal sert a vérifier si le nom du CAL est déjà pris
1998 +###########################################################
1999 +# unique_cal is used to verify if the CAL name is already taken
2000 +
2001 +sub unique_name {
2002 +
2003 + my ($fm, $calname) = @_;
2004 + my $self = shift;
2005 + my $return_error = $self->localise('EXIST_CALNAME');
2006 +
2007 + # Récupération des noms des CAL existant
2008 + # Recovery of all existing CAL names
2009 + opendir(OPENDIR, "/etc/zarafa/license") or die "Impossible d'ouvrir /etc/zarafa/license";
2010 + my @all_files = readdir (OPENDIR);
2011 + close(OPENDIR);
2012 +
2013 + # On vérifie si le nom est déja pris
2014 + # CAL name have been already taken ?
2015 + my $exist = 0;
2016 + foreach my $file (@all_files){
2017 + if($file eq $calname){
2018 + $exist = 1;
2019 + }
2020 + }
2021 + if($exist == 1){
2022 + return $return_error;
2023 + }
2024 + else {
2025 + return "OK";
2026 + }
2027 +}
2028 +
2029 +# unique_key sert a vérifier si la clef du CAL est déjà prise
2030 +#############################################################
2031 +# unique_key is used to verify if the CAL key is already taken
2032 +
2033 +sub unique_key {
2034 +
2035 +
2036 + my ($fm, $calkey) = @_;
2037 + my $self = shift;
2038 + my $return_error = $self->localise('EXIST_CALKEY');
2039 +
2040 + my $exist = 0;
2041 + my $filekey;
2042 +
2043 + # Récupération des noms des CAL existant
2044 + # Recovery of all existing CAL names
2045 + opendir(OPENDIR, "/etc/zarafa/license") or die "Impossible d'ouvrir /etc/zarafa/license";
2046 + my @all_files = readdir (OPENDIR);
2047 + close(OPENDIR);
2048 +
2049 + # Parcours de chaque fichier
2050 + # Read of all files
2051 + foreach my $file (@all_files) {
2052 + # Vérification
2053 + # Verification
2054 + open(FILE, "/etc/zarafa/license/$file") or die "Impossible d'ouvrir $file";
2055 + $filekey = <FILE>;
2056 + if($filekey =~ m/$calkey/){
2057 + $exist = 1;
2058 + }
2059 + close(FILE);
2060 + }
2061 +
2062 + if($exist == 1){
2063 + return $return_error;
2064 + }
2065 + else {
2066 + return "OK";
2067 + }
2068 +}
2069 +
2070 +# valid_cal est utilisé pour vérifier si la clef rentré est valide lors de la création d'un CAL
2071 +###############################################################################################
2072 +# valid_cal is used to verify if the key enter for create a CAL is correct
2073 +
2074 +sub valid_cal {
2075 +
2076 + my ($fm, $cd_key) = @_;
2077 + my $self = shift;
2078 + my $return_error = $self->localise('INVALID_KEY');
2079 +
2080 + if($cd_key =~ m/^\w{$CALkey}$/){
2081 + return "OK";
2082 + }
2083 + else {
2084 + return $return_error;
2085 + }
2086 +}
2087 +
2088 +# display_value est utilisé pour affiché les valeurs de fichiers de configuration MySQL dans l'interface
2089 +########################################################################################################
2090 +# display_value is used to display MySQL configuration values into the interface
2091 +
2092 +sub display_value {
2093 +
2094 + my $self = shift;
2095 + my $cgi = $self->{cgi};
2096 +
2097 + # Affichage d'une checkbox pour la fonction InnoDB
2098 + # Display of a checkbox for the InnoDB function
2099 + my $enabled = $self->localise('ENABLED');
2100 + my $out = "<tr>\n <td class=\"sme-noborders-label\">"
2101 + . "InnoDB"
2102 + . "</td>\n <td>\n"
2103 + . " <table border='0' cellspacing='0' cellpadding='0'>\n";
2104 + if($configdb->get_prop('mysqld','InnoDB')){
2105 + $out .="<td>$enabled</td><td><input type=\"checkbox\" name=\"InnoDB\" checked"
2106 + ." value=\"enabled\"></td>"
2107 + ."</tr>\n";
2108 + }
2109 + else {
2110 + $out .="<td>$enabled</td><td><input type=\"checkbox\" name=\"InnoDB\""
2111 + ." value=\"enabled\"></td>"
2112 + ."</tr>\n";
2113 + }
2114 + $out .= " </table>\n </td>\n </tr>\n";
2115 +
2116 + # Récupération et affichage des valeurs du fichier de configuration
2117 + # Recovery and display of the configuration file values
2118 + my $ligne;
2119 + open(MYCNF, "/etc/e-smith/templates/etc/my.cnf/009innodb") or die "Impossible d'ouvrir 0009innodb";
2120 + while(<MYCNF>){
2121 + $ligne = $_;
2122 + if($ligne =~ m/buffer_pool_size/){
2123 + $ligne =~ s/^\s+\$OUT\s\.\=\s\"\w+\s\=\s//g;
2124 + $ligne =~ s/M\\n\"\;$//g;
2125 + $cgi->param(-name=>'buffer_pool_size', -value=>$ligne);
2126 + }
2127 + elsif($ligne =~ m/additional_mem_pool_size/){
2128 + $ligne =~ s/^\s+\$OUT\s\.\=\s\"\w+\s\=\s//g;
2129 + $ligne =~ s/M\\n\"\;$//g;
2130 + $cgi->param(-name=>'additional_mem_pool_size', -value=>$ligne);
2131 + }
2132 + elsif($ligne =~ m/log_file_size/){
2133 + $ligne =~ s/^\s+\$OUT\s\.\=\s\"\w+\s\=\s//g;
2134 + $ligne =~ s/M\\n\"\;$//g;
2135 + $cgi->param(-name=>'log_file_size', -value=>$ligne);
2136 + }
2137 + elsif($ligne =~ m/log_buffer_size/){
2138 + $ligne =~ s/^\s+\$OUT\s\.\=\s\"\w+\s\=\s//g;
2139 + $ligne =~ s/M\\n\"\;$//g;
2140 + $cgi->param(-name=>'log_buffer_size', -value=>$ligne);
2141 + }
2142 + }
2143 + close(MYCNF);
2144 +
2145 +return $out;
2146 +}
2147 +
2148 +# modify_mysql permet de modifier les valeurs du fichier de configuration MySQL
2149 +###############################################################################
2150 +# modify_mysql is used to modify the value of the MySQL configuration file
2151 +
2152 +sub modify_mysql {
2153 +
2154 + my $self = shift;
2155 + my $cgi = $self->{cgi};
2156 +
2157 + # Récupération de la valeur courante et du réglage utilisateur de InnoDB
2158 + # Recovery of the current value and user value of InnoDB
2159 + my $innodb = $cgi->param('InnoDB');
2160 + my $current_innodb = $configdb->get_prop('mysqld','InnoDB');
2161 +
2162 + # Si l'utilisateur désactive le service InnoDB
2163 + # If the user disable the InnoDB service
2164 + if($current_innodb eq 'enabled' && !$innodb){
2165 + # Arrêt des services MySQL et Zarafa
2166 + # Stop of MySQL and Zarafa services
2167 + system("/etc/e-smith/events/actions/zarafa-services stop > /dev/null");
2168 + system("/sbin/service mysqld stop > /dev/null");
2169 + # Suppression des fichiers MySQL
2170 + # Deleting MySQL file
2171 + system("rm -R -f /var/lib/mysql/ib_logfile0");
2172 + system("rm -R -f /var/lib/mysql/ib_logfile1");
2173 + system("rm -R -f /var/lib/mysql/ibdata1");
2174 +
2175 + # Rechargement des paramêtres par défaut de MySQL
2176 + # Reload MySQL defaults adjustements
2177 + open(MYCNF, "/etc/e-smith/templates/etc/my.cnf/009innodb") or die "Impossible d'ouvrir 0009innodb";
2178 + my @contenu = <MYCNF>;
2179 + close(MYCNF);
2180 +
2181 + foreach my $ligne (@contenu){
2182 + if($ligne =~ m/buffer_pool_size/){
2183 + $ligne =~ s/\d+/16/g;
2184 + }
2185 + elsif($ligne =~ m/additional_mem_pool_size/){
2186 + $ligne =~ s/\d+/2/g;
2187 + }
2188 + elsif($ligne =~ m/log_file_size/){
2189 + $ligne =~ s/\d+/5/g;
2190 + }
2191 + elsif($ligne =~ m/log_buffer_size/){
2192 + $ligne =~ s/\d+/8/g;
2193 + }
2194 + }
2195 + open(ECRIRE, ">/etc/e-smith/templates/etc/my.cnf/009innodb");
2196 + foreach my $ligne (@contenu) {
2197 + chomp $ligne;
2198 + print ECRIRE "$ligne\n";
2199 + }
2200 + close(ECRIRE);
2201 +
2202 + # Suppression de l'InnoDB et redémarrage des services
2203 + # Delete of InnoDB and restart services
2204 + system("/sbin/e-smith/db configuration delprop mysqld InnoDB");
2205 + system("/sbin/e-smith/expand-template /etc/my.cnf");
2206 + system("/sbin/service mysqld start > /dev/null");
2207 + system("/etc/e-smith/events/actions/zarafa-services start > /dev/null");
2208 +
2209 + $self->success('MODIFY_CONFIG_SUCCESS');
2210 + }
2211 + # Activation du service InnoDB
2212 + # Activation of InnoDB service
2213 + elsif(!$current_innodb && $innodb eq 'enabled'){
2214 + # Ajout de l'InnoDB, arrêt des services MySQL et Zarafa et suppression des fichiers MySQL
2215 + # Add the InnoDB, stop MySQL and Zarafa service and delete MySQL file
2216 + system("/sbin/e-smith/db configuration setprop mysqld InnoDB enabled");
2217 + system("/etc/e-smith/events/actions/zarafa-services stop > /dev/null");
2218 + system("/sbin/service mysqld stop > /dev/null");
2219 + system("rm -R -f /var/lib/mysql/ib_logfile0");
2220 + system("rm -R -f /var/lib/mysql/ib_logfile1");
2221 + system("rm -R -f /var/lib/mysql/ibdata1");
2222 +
2223 + # Récupération du contenu du fichier configuration MySQL, modification des valeurs et écriture
2224 + # Recovery of the MysQL configuration file, values modification and writing
2225 + open(MYCNF, "/etc/e-smith/templates/etc/my.cnf/009innodb") or die "Impossible d'ouvrir 0009innodb";
2226 + my @contenu = <MYCNF>;
2227 + close(MYCNF);
2228 +
2229 + my $buffer_pool_size = $cgi->param('buffer_pool_size');
2230 + my $additional_mem_pool_size = $cgi->param('additional_mem_pool_size');
2231 + my $log_file_size = $cgi->param('log_file_size');
2232 + my $log_buffer_size = $cgi->param('log_buffer_size');
2233 +
2234 + foreach my $ligne (@contenu){
2235 + if($ligne =~ m/buffer_pool_size/){
2236 + $ligne =~ s/\d+/$buffer_pool_size/g;
2237 + }
2238 + elsif($ligne =~ m/additional_mem_pool_size/){
2239 + $ligne =~ s/\d+/$additional_mem_pool_size/g;
2240 + }
2241 + elsif($ligne =~ m/log_file_size/){
2242 + $ligne =~ s/\d+/$log_file_size/g;
2243 + }
2244 + elsif($ligne =~ m/log_buffer_size/){
2245 + $ligne =~ s/\d+/$log_buffer_size/g;
2246 + }
2247 + }
2248 +
2249 + open(ECRIRE, ">/etc/e-smith/templates/etc/my.cnf/009innodb");
2250 + foreach my $ligne (@contenu) {
2251 + chomp $ligne;
2252 + print ECRIRE "$ligne\n";
2253 + }
2254 + close(ECRIRE);
2255 +
2256 + # Génération du fichier configuration et redémarrage des services
2257 + # Configuration file generation and restart services
2258 + system("/sbin/e-smith/expand-template /etc/my.cnf");
2259 + system("/sbin/service mysqld start > /dev/null");
2260 + system("/etc/e-smith/events/actions/zarafa-services start > /dev/null");
2261 +
2262 + $self->success('MODIFY_CONFIG_SUCCESS');
2263 + }
2264 + # Simple modifications des valeurs
2265 + # Only values modifications
2266 + elsif($current_innodb eq 'enabled' && $innodb eq 'enabled'){
2267 + # Arrêt des services MySQL et Zarafa
2268 + # Stop of MySQL and Zarafa services
2269 + system("/etc/e-smith/events/actions/zarafa-services stop > /dev/null");
2270 + system("/sbin/service mysqld stop > /dev/null");
2271 + # Suppression des fichiers MySQL
2272 + # Deleting MySQL file
2273 + system("rm -R -f /var/lib/mysql/ib_logfile0");
2274 + system("rm -R -f /var/lib/mysql/ib_logfile1");
2275 + system("rm -R -f /var/lib/mysql/ibdata1");
2276 +
2277 +
2278 + # Récupération du contenu du fichier configuration MySQL, modification des valeurs et écriture
2279 + # Recovery of the MysQL configuration file, values modification and writing
2280 + open(MYCNF, "/etc/e-smith/templates/etc/my.cnf/009innodb") or die "Impossible d'ouvrir 0009innodb";
2281 + my @contenu = <MYCNF>;
2282 + close(MYCNF);
2283 +
2284 + my $buffer_pool_size = $cgi->param('buffer_pool_size');
2285 + my $additional_mem_pool_size = $cgi->param('additional_mem_pool_size');
2286 + my $log_file_size = $cgi->param('log_file_size');
2287 + my $log_buffer_size = $cgi->param('log_buffer_size');
2288 +
2289 + foreach my $ligne (@contenu){
2290 + if($ligne =~ m/buffer_pool_size/){
2291 + $ligne =~ s/\d+/$buffer_pool_size/g;
2292 + }
2293 + elsif($ligne =~ m/additional_mem_pool_size/){
2294 + $ligne =~ s/\d+/$additional_mem_pool_size/g;
2295 + }
2296 + elsif($ligne =~ m/log_file_size/){
2297 + $ligne =~ s/\d+/$log_file_size/g;
2298 + }
2299 + elsif($ligne =~ m/log_buffer_size/){
2300 + $ligne =~ s/\d+/$log_buffer_size/g;
2301 + }
2302 + }
2303 +
2304 + open(ECRIRE, ">/etc/e-smith/templates/etc/my.cnf/009innodb");
2305 + foreach my $ligne (@contenu) {
2306 + chomp $ligne;
2307 + print ECRIRE "$ligne\n";
2308 + }
2309 + close(ECRIRE);
2310 +
2311 + # Génération du fichier configuration et redémarrage des services
2312 + # Configuration file generation and restart services
2313 + system("/sbin/e-smith/expand-template /etc/my.cnf");
2314 + system("/sbin/service mysqld start > /dev/null");
2315 + system("/etc/e-smith/events/actions/zarafa-services start > /dev/null");
2316 +
2317 + $self->success('MODIFY_CONFIG_SUCCESS');
2318 + }
2319 + else {
2320 + $self->success('NO_MODIFICATION_ASKED');
2321 + }
2322 +}
2323 +
2324 +# only_num permet de vérifier si une valeur ne contient bien que des chiffres
2325 +#############################################################################
2326 +# only_num is used to verify if a value is only a numeric value
2327 +
2328 +sub only_num {
2329 +
2330 + my ($fm, $value) = @_;
2331 + my $self = shift;
2332 + my $return_error = $self->localise('NOT_NUM');
2333 +
2334 + if ($value =~ /^\d+$/){
2335 + return "OK";
2336 + }
2337 + else {
2338 + return $return_error;
2339 + }
2340 +}
2341 +
2342 +sub print_message {
2343 +
2344 + my ($fm, $word) = @_;
2345 + $word = $fm->localise($word);
2346 + print qq(<tr><td colspan=2>$word</td></tr>);
2347 + return undef;
2348 +
2349 +}
2350 \ No newline at end of file
2351 diff -urN smeserver-zarafa-0.9.0.orig/root/usr/lib/perl5/site_perl/esmith/FormMagick/Panel/zarafaUI.pm smeserver-zarafa-0.9.0/root/usr/lib/perl5/site_perl/esmith/FormMagick/Panel/zarafaUI.pm
2352 --- smeserver-zarafa-0.9.0.orig/root/usr/lib/perl5/site_perl/esmith/FormMagick/Panel/zarafaUI.pm 1970-01-01 10:00:00.000000000 +1000
2353 +++ smeserver-zarafa-0.9.0/root/usr/lib/perl5/site_perl/esmith/FormMagick/Panel/zarafaUI.pm 2009-06-01 21:15:18.000000000 +1000
2354 @@ -0,0 +1,1934 @@
2355 +#!/usr/bin/perl -w
2356 +
2357 +package esmith::FormMagick::Panel::zarafaUI;
2358 +
2359 + use strict;
2360 + use warnings;
2361 + use esmith::ConfigDB;
2362 + use esmith::AccountsDB;
2363 + use esmith::FormMagick;
2364 + use esmith::cgi;
2365 + use File::Basename;
2366 + use esmith::util;
2367 + use Exporter;
2368 + use esmith::DB;
2369 +
2370 + our $accountdb = esmith::AccountsDB->open();
2371 + our $configdb = esmith::ConfigDB->open();
2372 +
2373 + our @ISA = qw(esmith::FormMagick Exporter);
2374 +
2375 + our @EXPORT = qw();
2376 +
2377 + our $VERSION = sprintf '%d.%03d', q$Revision: 1.1 $ =~ /: (\d+).(\d+)/;
2378 +
2379 +
2380 + our $multicompany_enabled;
2381 + open(LIRE, "/etc/e-smith/templates/etc/zarafa/server.cfg/server.cfg");
2382 + while(<LIRE>){
2383 + my $ligne = $_;
2384 + if($ligne =~ m/^enable_hosted_zarafa/){
2385 + $multicompany_enabled = $ligne;
2386 + $multicompany_enabled =~ s/enable_hosted_zarafa\s+\=\s//g;
2387 + }
2388 + }
2389 + close(LIRE);
2390 +
2391 +
2392 +# Ce fichier contient les fonction nécessaire pour gérer l'interface entre le serveur SME et la configuration des utilisateurs
2393 +# et des groupes du module Zarafa.
2394 +# Ce fichier regroupe des fonctions d'affichage, de modifications et de vérifications de données contenu dans Zarafa.
2395 +#################################################################################################################################
2396 +# This file contains the required functions in order to handle the interface between SME server and Zarafa configuration module's
2397 +# for users and groups.
2398 +# It contains display, modify, create and verification functions for Zarafa.
2399 +
2400 +
2401 +# La fonction show_users permet d'afficher un tableaux reprenant l'enssemble des utilisateurs de Zarafa sur la page principale
2402 +# avec possibilité de supprimer et de modifier les utilisateurs présents.
2403 +##############################################################################################################################################
2404 +# The show_users function allow you to display an array which contains all the users of zarafa with links to modify and delete users functions
2405 +
2406 +sub show_users {
2407 +
2408 + my $self = shift;
2409 + my $q = $self->{cgi};
2410 +
2411 + if ($multicompany_enabled =~ m/false/){
2412 +
2413 + # Initialisation
2414 + my $ligne = 5;
2415 + my $nbrligne = `zarafa-admin -l | wc -l`;
2416 + my $scriptname = basename($0);
2417 +
2418 + # Localisation
2419 + my $username = $self->localise('USERNAME');
2420 + my $fullname = $self->localise('FULLNAME');
2421 + my $delete = $self->localise('DELETE');
2422 +
2423 + # Affichage de l'en-tête du tableau
2424 + # Display of the header
2425 + print " <tr>\n <td colspan=\"2\">\n ";
2426 + print $q->start_table ({-CLASS => "sme-border"}),"\n ";
2427 + print $q->Tr(
2428 + esmith::cgi::genSmallCell($q, $username,"header"),
2429 + esmith::cgi::genSmallCell($q, $fullname,"header"),
2430 + esmith::cgi::genSmallCell($q, $delete,"header"));
2431 +
2432 +
2433 + # Affichage des utilisateurs et des liens correspondants
2434 + # Display users and corresponding links
2435 + my @usertab;
2436 + my $nbr = 0;
2437 + while ($ligne < $nbrligne) {
2438 + $usertab[$nbr] = `zarafa-admin -l | cut -f2 | awk 'NR == $ligne'`;
2439 + $ligne ++;
2440 + $nbr ++;
2441 + }
2442 + my @out = sort @usertab;
2443 + foreach my $user (@out){
2444 + chomp $user;
2445 + if ($user =~ /^([-\@\w.]+)$/) {
2446 + $user = $1; # $data now untainted
2447 + }
2448 + else {
2449 + die "bad data in $user";
2450 + }
2451 + my $modify = "<a href=\"$scriptname?page=0&wherenext=DisplayDetails&actUsr=$user\">$user</a>";
2452 + my $delete_user = "<a href=\"$scriptname?page=0&wherenext=DeleteUser&actUsr=$user\">$delete</a>";
2453 + print $q->Tr(
2454 + esmith::cgi::genSmallCell($q,$modify ,"normal")," ",
2455 + esmith::cgi::genSmallCell($q, `zarafa-admin --details \"$user\" | cut -f3 | awk 'NR == 2'`,"normal"),
2456 + esmith::cgi::genSmallCell($q,$delete_user,"normal"));
2457 + }
2458 +
2459 +
2460 + print qq(</table></td></tr>\n);
2461 +
2462 + # Localisation
2463 + my $add_user = $self->localise('ADD_USER');
2464 + my $add_user_bubble = $self->localise('ADD_USER_BUBBLE');
2465 +
2466 + # Affichage bouton ajouter utilisateur
2467 + # Display the user's create button
2468 + my $out ="<p><a class=\"button-like\"
2469 + href=\"zarafaUI?page=0&wherenext=DisplayCreate\" title=\"$add_user_bubble\">$add_user</a></p>";
2470 +
2471 +
2472 + return $out;
2473 + }
2474 +
2475 + elsif ($multicompany_enabled =~ m/true/){
2476 +
2477 + # Initialisation
2478 + my $ligne = 4;
2479 + my $nbrligne = `zarafa-admin --list-companies | wc -l`;
2480 + $nbrligne ++;
2481 + my $scriptname = basename($0);
2482 +
2483 + # Localisation
2484 + my $companyname = $self->localise('COMPANYNAME');
2485 + my $delete = $self->localise('DELETE');
2486 +
2487 + # Affichage de l'en-tête du tableau
2488 + # Display of the header
2489 + print " <tr>\n <td colspan=\"2\">\n ";
2490 + print $q->start_table ({-CLASS => "sme-border"}),"\n ";
2491 + print $q->Tr(
2492 + esmith::cgi::genSmallCell($q, $companyname,"header"),
2493 + esmith::cgi::genSmallCell($q, $delete,"header"));
2494 +
2495 + # Affichage des utilisateurs et des liens correspondants
2496 + # Display users and corresponding links
2497 + my @usertab;
2498 + my $nbr = 0;
2499 + while ($ligne < $nbrligne) {
2500 + $usertab[$nbr] = `zarafa-admin --list-companies | cut -f2 | awk 'NR == $ligne'`;
2501 + $ligne ++;
2502 + $nbr ++;
2503 + }
2504 + my @out = sort @usertab;
2505 + foreach my $company (@out){
2506 + chomp $company;
2507 + if ($company =~ /^([-\@\w.]+)$/) {
2508 + $company = $1; # $data now untainted
2509 + }
2510 + else {
2511 + die "bad data in $company";
2512 + }
2513 + my $modify = "<a href=\"$scriptname?page=0&wherenext=DisplayCompanyDetails&actComp=$company\">$company</a>";
2514 + my $delete_company = "<a href=\"$scriptname?page=0&wherenext=DeleteCompany&actComp=$company\">$delete</a>";
2515 + print $q->Tr(
2516 + esmith::cgi::genSmallCell($q,$modify ,"normal")," ",
2517 + esmith::cgi::genSmallCell($q,$delete_company,"normal"));
2518 + }
2519 +
2520 +
2521 + print qq(</table></td></tr>\n);
2522 +
2523 + # Localisation
2524 + my $add_comp = $self->localise('ADD_COMP');
2525 + my $add_comp_bubble = $self->localise('ADD_COMP_BUBBLE');
2526 +
2527 + # Affichage bouton ajouter utilisateur
2528 + # Display the user's create button
2529 + my $out ="<p><a class=\"button-like\"
2530 + href=\"zarafaUI?page=0&wherenext=CreateCompany\" title=\"$add_comp_bubble\">$add_comp</a></p>";
2531 +
2532 + return $out;
2533 + }
2534 +}
2535 +
2536 +# La fonction transfer_page est requise lors de l'utilisation de lien afin de renvoyer l'utilisateur sur la bonne page.
2537 +# Elle récupére le nom de la page demandé et redirige automatiquement l'utilisateur.
2538 +#############################################################################################################################
2539 +# The transfer_page function is use when the user do an action which need another page in order to redirect to the next page.
2540 +
2541 +sub transfer_page {
2542 +
2543 + my ($self, $next_page) = @_;
2544 +
2545 + $self->{cgi}->param(-name => 'wherenext', -value => $next_page);
2546 +
2547 +}
2548 +
2549 +# display_user_details affiche les détails de l'utilisateur passé en paramétre dans des champs modifiables
2550 +##########################################################################################################
2551 +# display_user_details display the details of the username pass in parameter into editable fields.
2552 +
2553 +sub display_user_details {
2554 +
2555 +
2556 + my $self = shift;
2557 + my $cgi = $self->{cgi};
2558 +
2559 + # Récupération du nom de l'utilisateur et vérification de sa fiabilité
2560 + # recovery of the username and test is reliability
2561 + my $recept_user = $cgi->param('actUsr');
2562 + if ($recept_user =~ /^([-\@\w.]+)$/) {
2563 + $recept_user = $1; # $data now untainted
2564 + }
2565 + else {
2566 + die "Bad data in '$recept_user'";
2567 + }
2568 + my ($user, $Emailaddress, $active, $admin, $meeting_req, $quota_overr,
2569 + $warnlvl, $softlvl, $hardlvl, $store_size, $decline_dbl, $decline_recur);
2570 +
2571 + # Récupération des informations de l'utilisateur
2572 + # recovery of user's information
2573 + open(DETAILS, "zarafa-admin --details \"$recept_user\" |") or die "probléme ouverture fichier";
2574 + while (<DETAILS>){
2575 + if(m/^Fullname/){
2576 + $user = $_;
2577 + $user =~ s/^\w+:\t*//;
2578 + }
2579 + if(m/^Emailaddress/){
2580 + $Emailaddress = $_;
2581 + $Emailaddress =~ s/^\w+:\t*//;
2582 + }
2583 + if(m/^Active/){
2584 + $active = $_;
2585 + chomp $active;
2586 + $active =~ s/^\w+:\t*//;
2587 + }
2588 + if(m/^Administrator/){
2589 + $admin = $_;
2590 + chomp $admin;
2591 + $admin =~ s/^\w+:\t*//;
2592 + }
2593 + if(m/^Auto-accept/){
2594 + $meeting_req = $_;
2595 + chomp $meeting_req;
2596 + $meeting_req =~ s/.+://;
2597 + }
2598 + if(m/^Decline dbl/){
2599 + $decline_dbl = $_;
2600 + chomp $decline_dbl;
2601 + $decline_dbl =~ s/Decline dbl meetingreq:\t*//;
2602 + }
2603 + if(m/^Decline recur/){
2604 + $decline_recur = $_;
2605 + chomp $decline_recur;
2606 + $decline_recur =~ s/Decline recur meet\.req:\t*//;
2607 + }
2608 + if(m/^Quota overrides/){
2609 + $quota_overr = $_;
2610 + chomp $quota_overr;
2611 + $quota_overr =~ s/Quota overrides:\t*//;
2612 + }
2613 + if(m/^Warning level/){
2614 + $warnlvl = $_;
2615 + chomp $warnlvl;
2616 + $warnlvl =~ s/Warning level:\t*//;
2617 + if($warnlvl =~ m/KB/){
2618 + $warnlvl =~ s/.{3}$//g;
2619 + $warnlvl = $warnlvl / 1024;
2620 + }
2621 + }
2622 + if(m/^Soft level/){
2623 + $softlvl = $_;
2624 + chomp $softlvl;
2625 + $softlvl =~ s/Soft level:\t*//;
2626 + if($softlvl =~ m/KB/){
2627 + $softlvl =~ s/.{3}$//g;
2628 + $softlvl = $softlvl / 1024;
2629 + }
2630 + }
2631 + if(m/^Hard level/){
2632 + $hardlvl = $_;
2633 + chomp $hardlvl;
2634 + $hardlvl =~ s/Hard level:\t*//;
2635 + if($hardlvl =~ m/KB/){
2636 + $hardlvl =~ s/.{3}$//g;
2637 + $hardlvl = $hardlvl / 1024;
2638 + }
2639 + }
2640 + if(m/^Current store size/){
2641 + $store_size = $_;
2642 + chomp $store_size;
2643 + $store_size =~ s/Current store size:\t*//;
2644 + if($store_size =~ m/B/){
2645 + $store_size =~ s/\sB//i;
2646 + $store_size /= 1048576;
2647 + $store_size =~ s/(\.\d{5})\d*/$1/;
2648 + $store_size .= " Mo";
2649 + }
2650 + if($store_size =~ m/KB/){
2651 + $store_size =~ s/\sKB//i;
2652 + $store_size /= 1024;
2653 + $store_size .= " Mo";
2654 + }
2655 + }
2656 + }
2657 + close(DETAILS);
2658 +
2659 + # Vérification de la présence de l'utilisateur dans la BD serveur
2660 + # Verify if the user is in the Server's DB
2661 + my $zarafa_text = $self->localise('CAUTION_NOT_DB');
2662 + my $present = 0;
2663 +
2664 + my $test = $accountdb->get("$recept_user");
2665 + if($test){
2666 + $zarafa_text = $self->localise('IN_DB');
2667 + $present = 1;
2668 + }
2669 +
2670 + # Remplissage des champs de l'interface avec les données récupérés
2671 + # Filling of user's field with the previous data
2672 + $cgi->param(-name=>'Username', -value=>$recept_user);
2673 + $cgi->param(-name=>'Fullname', -value=>$user);
2674 + $cgi->param(-name=>'EmailAddress', -value=>$Emailaddress);
2675 + $cgi->param(-name=>'Admin', -value=>$admin);
2676 + $cgi->param(-name=>'quota', -value=>$quota_overr);
2677 + $cgi->param(-name=>'Warnlvl', -value=>$warnlvl);
2678 + $cgi->param(-name=>'Softlvl', -value=>$softlvl);
2679 + $cgi->param(-name=>'Hardlvl', -value=>$hardlvl);
2680 + $cgi->param(-name=>'auto_meeting_req', -value=>$meeting_req);
2681 + $cgi->param(-name=>'dbl_meeting', -value=>$decline_dbl);
2682 + $cgi->param(-name=>'decline_recur_meeting', -value=>$decline_recur);
2683 +
2684 + # Localisation
2685 + my $enabled = $self->localise('ENABLED');
2686 + my $disabled = $self->localise('DISABLED');
2687 +
2688 +
2689 + # Affichage de l'option zarafa pour ceux qui sont dans la BD
2690 + # Display of the zarafa's button if the user is in the server's DB
2691 + my $zarafa_status;
2692 + my $out;
2693 + if($present == 1){
2694 + unless($configdb->get_prop("zarafa-server",'GlobalForward')){
2695 + $zarafa_status = $accountdb->get_prop("$recept_user",'zarafa');
2696 +
2697 + $out = "<tr>\n <td class=\"sme-noborders-label\">"
2698 + . "Zarafa"
2699 + . "</td>\n <td>\n"
2700 + . " <table border='0' cellspacing='0' cellpadding='0'>\n";
2701 + if($zarafa_status){
2702 + $out .="<td>$enabled</td><td><input type=\"radio\" name=\"zarafa\" checked=\"checked\""
2703 + ." value=\"enabled\"></td>"
2704 + ."<td>$disabled</td><td><input type=\"radio\" name=\"zarafa\""
2705 + ." value=\"disabled\"></td>\n"
2706 + ."</tr>\n";
2707 + }
2708 + else {
2709 + $out .="<td>$enabled</td><td><input type=\"radio\" name=\"zarafa\""
2710 + ." value=\"enabled\"></td>"
2711 + ."<td>$disabled</td><td><input type=\"radio\" name=\"zarafa\" checked=\"checked\""
2712 + ." value=\"disabled\"></td>\n"
2713 + ."</tr>\n";
2714 + }
2715 + $out .= " </table>\n </td>\n </tr>\n";
2716 + }
2717 +
2718 +
2719 + # Affichage de l'option SortSpam pour ceux qui sont dans la BD
2720 + # Display of the SortSpam's button if the user is in the server's DB
2721 + my $sortspam = $accountdb->get_prop("$recept_user",'SortSpam');
2722 + $out .= "<tr>\n <td class=\"sme-noborders-label\">"
2723 + . "SortSpam"
2724 + . "</td>\n <td>\n"
2725 + . " <table border='0' cellspacing='0' cellpadding='0'>\n";
2726 + if($sortspam){
2727 + $out .="<td>$enabled</td><td><input type=\"checkbox\" name=\"sortspam\" checked"
2728 + ." value=\"enabled\"></td>"
2729 + ."</tr>\n";
2730 + }
2731 + else {
2732 + $out .="<td>$enabled</td><td><input type=\"checkbox\" name=\"sortspam\""
2733 + ." value=\"disabled\"></td>"
2734 + ."</tr>\n";
2735 + }
2736 + $out .= " </table>\n </td>\n </tr>\n";
2737 + }
2738 +
2739 +
2740 + # Localisation
2741 + # Localization
2742 + my $details = $self->localise('DETAILS');
2743 + my $stock_use = $self->localise('STOCK_USE');
2744 + my $active_user = $self->localise('ACTIVE_USER');
2745 +
2746 + print "$details $recept_user - $user - $stock_use $store_size $active_user $active - $zarafa_text";
2747 +
2748 +return $out;
2749 +}
2750 +
2751 +# display_modify_button permet l'affichage d'un bouton 'Modify'
2752 +############################################################################
2753 +# display_modify_button is use to display a button with 'modify' text inside
2754 +
2755 +sub display_modify_button {
2756 +
2757 + my ($self) = @_;
2758 +
2759 + my $cgi = $self->{cgi};
2760 +
2761 + my $button = $self->localise('MODIFY_BUTTON');
2762 +
2763 + $self->print_button("$button");
2764 +
2765 +}
2766 +
2767 +# display_create_button permet l'affichage d'un bouton 'Create'
2768 +############################################################################
2769 +# display_create_button is use to display a button with 'Create' text inside
2770 +
2771 +sub display_create_button {
2772 +
2773 + my ($self) = @_;
2774 + my $cgi = $self->{cgi};
2775 +
2776 + my $button = $self->localise('CREATE_BUTTON');
2777 + $self->print_button("$button");
2778 +}
2779 +
2780 +# display_delete_button permet l'affichage d'information sur l'utilisateur ainsi qu'un bouton 'Delete'
2781 +######################################################################################################
2782 +# display_delete_button is use to display some user information and a button with 'Delete' text inside
2783 +
2784 +sub display_delete_button {
2785 +
2786 + my ($self) = @_;
2787 + my $cgi = $self->{cgi};
2788 +
2789 + my $recept_user = $cgi->param('actUsr');
2790 + if ($recept_user =~ /^([-\@\w.]+)$/) {
2791 + $recept_user = $1; # $data now untainted
2792 + }
2793 + else {
2794 + die "Bad data in '$recept_user'";
2795 + }
2796 +
2797 + my $user = `zarafa-admin --details $recept_user | awk 'NR == 2'`;
2798 + $user =~ s/Fullname:\t\t//g;
2799 +
2800 + my $store_size = `zarafa-admin --details $recept_user | awk 'NR == 11'`;
2801 + $store_size =~ s/Current store size:\t//g;
2802 + if($store_size =~ m/B/){
2803 + $store_size =~ s/\sB//i;
2804 + $store_size /= 1048576;
2805 + $store_size .= " Mb";
2806 + }
2807 + if($store_size =~ m/KB/){
2808 + $store_size =~ s/\sKB//i;
2809 + $store_size /= 1024;
2810 + $store_size .= " Mb";
2811 + }
2812 +
2813 +
2814 + my $active = `zarafa-admin --details $recept_user | awk 'NR == 4'`;
2815 + $active =~ s/Active:\t\t\t//g;
2816 +
2817 +
2818 + # Localisation
2819 + # Localization
2820 + my $details = $self->localise('DETAILS');
2821 + my $stock_use = $self->localise('STOCK_USE');
2822 + my $active_user = $self->localise('ACTIVE_USER');
2823 + my $button = $self->localise('DELETE_BUTTON');
2824 +
2825 + print "$details $recept_user - $user - $stock_use $store_size - $active_user $active";
2826 +
2827 + $self->print_button("$button");
2828 +}
2829 +
2830 +# La fonction modify_user récupére le contenu de multiple champs afin de mettre à jour le contenu de Zarafa
2831 +###########################################################################################################
2832 +# The modify_user function recover the content of multiple fields in order to update Zarafa's content
2833 +
2834 +sub modify_user {
2835 +
2836 + my ($self) = @_;
2837 + my $cgi = $self->{cgi};
2838 +
2839 + # Récupération de l'utilisateur à modifier
2840 + # Recovery of the user for modified
2841 + my $user = $cgi->param('actUsr');
2842 + if ($user =~ /^([-\@\w.]+)$/) {
2843 + $user = $1; # $data now untainted
2844 + }
2845 + else {
2846 + die "bad data in $user";
2847 + }
2848 +
2849 + # Récupération du contenu des champs
2850 + # Recovery of fields contents
2851 + my $user_id = $self->{cgi}->param('Username');
2852 + if ($user_id =~ /^([-\@\w.]+)$/) {
2853 + $user_id = $1; # $data now untainted
2854 + }
2855 + else {
2856 + die "Bad data in '$user_id'";
2857 + }
2858 +
2859 + my $user_fullname = $self->{cgi}->param('Fullname');
2860 + chomp $user_fullname;
2861 + $user_fullname =~ s/ /@/g;
2862 + if ($user_fullname =~ /^([-\@\w.]+)$/) {
2863 + $user_fullname = $1; # $data now untainted
2864 + }
2865 + else {
2866 + die "Bad data in '$user_fullname'";
2867 + }
2868 + $user_fullname =~ s/@/ /g;
2869 + $user_fullname = "\"".$user_fullname."\"";
2870 +
2871 + my $user_address = $self->{cgi}->param('EmailAddress');
2872 + if ($user_address =~ /^([-\@\w.]+)$/) {
2873 + $user_address = $1; # $data now untainted
2874 + }
2875 + else {
2876 + die "Bad data in '$user_address'";
2877 + }
2878 +
2879 + my $user_admin = $self->{cgi}->param('Admin');
2880 + if ($user_admin =~ /^([-\@\w.]+)$/) {
2881 + $user_admin = $1; # $data now untainted
2882 + }
2883 + else {
2884 + die "Bad data in '$user_admin'";
2885 + }
2886 +
2887 + my $user_quota = $self->{cgi}->param('quota');
2888 + if ($user_quota =~ /^([-\@\w.]+)$/) {
2889 + $user_quota = $1; # $data now untainted
2890 + }
2891 + else {
2892 + die "Bad data in '$user_quota'";
2893 + }
2894 +
2895 + my $user_warnlvl = $self->{cgi}->param('Warnlvl');
2896 + unless ($user_warnlvl)
2897 + {$user_warnlvl = 0;}
2898 + if ($user_warnlvl =~ /^([-\@\w.]+)$/) {
2899 + $user_warnlvl = $1; # $data now untainted
2900 + }
2901 + else {
2902 + die "Bad data in '$user_warnlvl'";
2903 + }
2904 +
2905 + my $user_softlvl = $self->{cgi}->param('Softlvl');
2906 + unless ($user_softlvl)
2907 + {$user_softlvl = 0;}
2908 + if ($user_softlvl =~ /^([-\@\w.]+)$/) {
2909 + $user_softlvl = $1; # $data now untainted
2910 + }
2911 + else {
2912 + die "Bad data in '$user_softlvl'";
2913 + }
2914 +
2915 +
2916 + my $user_hardlvl = $self->{cgi}->param('Hardlvl');
2917 + unless ($user_hardlvl)
2918 + {$user_hardlvl = 0;}
2919 + if ($user_hardlvl =~ /^([-\@\w.]+)$/) {
2920 + $user_hardlvl = $1; # $data now untainted
2921 + }
2922 + else {
2923 + die "Bad data in '$user_hardlvl'";
2924 + }
2925 +
2926 +
2927 + my $user_meeting = $self->{cgi}->param('auto_meeting_req');
2928 + if ($user_meeting =~ /^([-\@\w.]+)$/) {
2929 + $user_meeting = $1; # $data now untainted
2930 + }
2931 + else {
2932 + die "Bad data in '$user_meeting'";
2933 + }
2934 +
2935 + my $user_dbl = $self->{cgi}->param('dbl_meeting');
2936 + if ($user_dbl =~ /^([-\@\w.]+)$/) {
2937 + $user_dbl = $1;
2938 + }
2939 + else {
2940 + die "Bad data in '$user_dbl'";
2941 + }
2942 +
2943 + my $user_recur_meeting = $self->{cgi}->param('decline_recur_meeting');
2944 + if ($user_recur_meeting =~ /^([-\@\w.]+)$/) {
2945 + $user_recur_meeting = $1;
2946 + }
2947 + else {
2948 + die "Bad data in '$user_recur_meeting'";
2949 + }
2950 +
2951 +
2952 + # Récupération d'un nouveau mot de passe et remplacement de l'ancien
2953 + # Recovery of a new password and replacement of the old password
2954 + my $user_new_password = $self->{cgi}->param('new_password');
2955 + if ($user_new_password){
2956 + if ($user_new_password =~ /^([-\@\w.]+)$/) {
2957 + $user_new_password = $1;
2958 + }
2959 + else {
2960 + die "Bad data in '$user_new_password'";
2961 + }
2962 + system("zarafa-admin -u $user -p $user_new_password > /dev/null") == 0
2963 + or die "Une erreur est survenue lors du changement de password de l'utilisateur $user";
2964 + }
2965 +
2966 + my $fm = shift;
2967 + my $q = $fm->{'cgi'};
2968 +
2969 + my $zarafa_enabled = $q->param('zarafa');
2970 + if($zarafa_enabled){
2971 + if($zarafa_enabled eq 'enabled'){
2972 + system("/sbin/e-smith/db accounts setprop \"$user_id\" zarafa enabled");
2973 + system("/etc/e-smith/events/actions/qmail-update-user");
2974 +
2975 + }
2976 + elsif($zarafa_enabled eq 'disabled'){
2977 + system("/sbin/e-smith/db accounts delprop \"$user_id\" zarafa");
2978 + system("/etc/e-smith/events/actions/qmail-update-user");
2979 + }
2980 + }
2981 +
2982 + # Ajout des modifications dans la base de données Zarafa
2983 + # Modify information added into Zarafa database
2984 + if ($user eq $user_id){
2985 + system("zarafa-admin -u $user -f $user_fullname -e $user_address -a $user_admin --qo $user_quota --qw $user_warnlvl --qs $user_softlvl --qh $user_hardlvl --mr-accept $user_meeting --mr-decline-conflict $user_dbl --mr-decline-recurring $user_recur_meeting > /dev/null") == 0
2986 + or die "Une erreur est survenue lors de la modification de l'utilisateur";
2987 + }
2988 + else {
2989 + system("zarafa-admin -u $user -U $user_id -f $user_fullname -e $user_address -a $user_admin --qo $user_quota --qw $user_warnlvl --qs $user_softlvl --qh $user_hardlvl --mr-accept $user_meeting --mr-decline-conflict $user_dbl --mr-decline-recurring $user_recur_meeting> /dev/null") == 0
2990 + or die "Une erreur est survenue lors de la modificatoin de l'utilisateur";
2991 + }
2992 +
2993 +
2994 + my $sortspam = $q->param('sortspam');
2995 + if($sortspam eq 'enabled'){
2996 + system("/sbin/e-smith/db accounts setprop \"$user_id\" SortSpam disabled");
2997 + system("/sbin/e-smith/signal-event user-modify \"$user_id\"");
2998 + }
2999 + else{
3000 + system("/sbin/e-smith/db accounts delprop \"$user_id\" SortSpam");
3001 + system("/sbin/e-smith/signal-event user-modify \"$user_id\"");
3002 + }
3003 +
3004 + # Opération sur les groupes d'utilisateurs
3005 + # Operation on user's groups
3006 + my $eval = "";
3007 + # Parcours de la liste des groupes
3008 + # Browse of the group liste
3009 + open(LISTGRP, "zarafa-admin -L | awk 'NR > 4' |");
3010 + while(<LISTGRP>){
3011 + my $groupeparam = $_;
3012 + $groupeparam =~ s/^\t//g;
3013 + chomp $groupeparam;
3014 + $groupeparam =~ s/ /_/g;
3015 + if ($groupeparam =~ /^([-\@\w.]+)$/) {
3016 + $groupeparam = $1;
3017 + }
3018 + else {
3019 + $groupeparam = $1;
3020 + }
3021 +
3022 + my $present = 0;
3023 + if($groupeparam){
3024 + $groupeparam =~ s/_/ /g;
3025 + unless ($eval eq $groupeparam){
3026 + # Si le bouton radio est sur oui ...
3027 + # If the radio button is 'on' ...
3028 + my $yesNo = $q->param("$groupeparam");
3029 + if($yesNo eq 'Yes'){
3030 + # On regarde si l'utilisateur est déja dans le groupe ...
3031 + # The user is allready in the group ? ...
3032 + open(ADDUSR, "zarafa-admin -l --details \"$groupeparam\" --type group |");
3033 + while(<ADDUSR>){
3034 + if(m/^\t$user/){
3035 + $present = 1;
3036 + }
3037 + }
3038 + # Si il n'y est pas on le rajoute
3039 + # If it's not in the group, add it
3040 + unless($present == 1){
3041 + system("zarafa-admin -b $user -i \"$groupeparam\" > /dev/null") == 0
3042 + or die "Impossible de rajouter l'utilisateur $user dans le groupe $groupeparam";
3043 + }
3044 + }
3045 + close(ADDUSR);
3046 + # Si le bouton radio est sur non ...
3047 + # If the radio button is 'off'...
3048 + if($yesNo eq 'No'){
3049 + # On regarde si l'utilisateur est dans le groupe ...
3050 + # Is the user in the group ? ...
3051 + open(DELUSR, "zarafa-admin -l --details \"$groupeparam\" --type group |");
3052 + while(<DELUSR>){
3053 + if(m/^\t$user/){
3054 + $present = 1;
3055 + }
3056 + }
3057 + # Si il y est on l'en enléve
3058 + # If it's in, remove it
3059 + if($present == 1){
3060 + system("zarafa-admin -B $user -i \"$groupeparam\" > /dev/null") == 0
3061 + or die "Impossible de supprimer l'utilisateur $user du groupe $groupeparam";
3062 + }
3063 + close(DELUSR);
3064 + }
3065 + $eval = $groupeparam;
3066 + }
3067 + }
3068 + }
3069 + close(LISTGRP);
3070 +
3071 + $self->success('MODIFY_USER_SUCCESS');
3072 +
3073 +# Option possible pour mettre à jour ou créer des utilisateurs avec zarafa-admin
3074 +# Zarafa-admin option for update and creation for users
3075 +#-U username
3076 +#-p password
3077 +#-f fullname
3078 +#-e emailaddress
3079 +#-a admin
3080 +#-n active user
3081 +#--qo quota override
3082 +#--qw quota warning
3083 +#--qs quota soft
3084 +#--qh quota hard
3085 +#--mr-accept meeting request
3086 +#--mr-decline-conflict
3087 +#--mr-decline-recurring
3088 +}
3089 +
3090 +# La fonction Create_user récupére le contenu de plusieurs champs afin de créer un utilisateurs zarafa avec ces derniers
3091 +########################################################################################################################
3092 +# The Create_user function recover the content of many fields in order to create a zarafa's user with them
3093 +
3094 +sub Create_user {
3095 +
3096 + my ($self) = @_;
3097 + my $cgi = $self->{cgi};
3098 +
3099 + # Récuperation du contenu des champs
3100 + # Recovery of content's fields
3101 + my $user_id = $self->{cgi}->param('Username');
3102 + if ($user_id =~ /^([-\@\w.]+)$/) {
3103 + $user_id = $1; # $data now untainted
3104 + }
3105 + else {
3106 + die "Bad data in $user_id";
3107 + }
3108 +
3109 + my $user_fullname = $self->{cgi}->param('Fullname');
3110 + chomp $user_fullname;
3111 + $user_fullname =~ s/ /@/g;
3112 + if ($user_fullname =~ /^([-\@\w.]+)$/) {
3113 + $user_fullname = $1; # $data now untainted
3114 + }
3115 + else {
3116 + die "Bad data in '$user_fullname'";
3117 + }
3118 + $user_fullname =~ s/@/ /g;
3119 + $user_fullname = "\"".$user_fullname."\"";
3120 +
3121 + my $user_psswrd = $self->{cgi}->param('Password');
3122 + if ($user_psswrd =~ /^([-\@\w.]+)$/) {
3123 + $user_psswrd = $1; # $data now untainted
3124 + }
3125 + else {
3126 + die "Bad data in '$user_psswrd'";
3127 + }
3128 +
3129 + my $user_address = $self->{cgi}->param('EmailAddress');
3130 + if ($user_address =~ /^([-\@\w.]+)$/) {
3131 + $user_address = $1; # $data now untainted
3132 + }
3133 + else {
3134 + die "Bad data in '$user_address'";
3135 + }
3136 +
3137 + my $user_admin = $self->{cgi}->param('Admin');
3138 + if ($user_admin =~ /^([-\@\w.]+)$/) {
3139 + $user_admin = $1; # $data now untainted
3140 + }
3141 + else {
3142 + die "Bad data in '$user_admin'";
3143 + }
3144 +
3145 + my $user_quota = $self->{cgi}->param('quota');
3146 + if ($user_quota =~ /^([-\@\w.]+)$/) {
3147 + $user_quota = $1; # $data now untainted
3148 + }
3149 + else {
3150 + die "Bad data in '$user_quota'";
3151 + }
3152 +
3153 + my $user_warnlvl = $self->{cgi}->param('Warnlvl');
3154 + unless ($user_warnlvl)
3155 + {$user_warnlvl = 0;}
3156 + if ($user_warnlvl =~ /^([-\@\w.]+)$/) {
3157 + $user_warnlvl = $1; # $data now untainted
3158 + }
3159 + else {
3160 + die "Bad data in '$user_warnlvl'";
3161 + }
3162 +
3163 +
3164 + my $user_softlvl = $self->{cgi}->param('Softlvl');
3165 + unless ($user_softlvl)
3166 + {$user_softlvl = 0;}
3167 + if ($user_softlvl =~ /^([-\@\w.]+)$/) {
3168 + $user_softlvl = $1; # $data now untainted
3169 + }
3170 + else {
3171 + die "Bad data in '$user_softlvl'";
3172 + }
3173 +
3174 +
3175 + my $user_hardlvl = $self->{cgi}->param('Hardlvl');
3176 + unless ($user_hardlvl)
3177 + {$user_hardlvl = 0;}
3178 + if ($user_hardlvl =~ /^([-\@\w.]+)$/) {
3179 + $user_hardlvl = $1; # $data now untainted
3180 + }
3181 + else {
3182 + die "Bad data in '$user_hardlvl'";
3183 + }
3184 +
3185 + my $user_active = $self->{cgi}->param('Active');
3186 + if ($user_active =~ /^([-\@\w.]+)$/) {
3187 + $user_active = $1; # $data now untainted
3188 + }
3189 + else {
3190 + die "Bad data in '$user_active'";
3191 + }
3192 +
3193 + # Création de l'utilisateur
3194 + # User's creation
3195 + system("zarafa-admin -c $user_id -f $user_fullname -p $user_psswrd -e $user_address -a $user_admin -n $user_active --qo $user_quota --qw $user_warnlvl --qs $user_softlvl --qh $user_hardlvl > /dev/null") == 0
3196 + or die "Une erreur est survenue lors de la création de l'utilisateur";
3197 +
3198 + # Ajout dans la BD Accounts du serveur SME
3199 + system("/sbin/e-smith/db accounts setprop \"$user_id\" zarafa enabled");
3200 + system("/etc/e-smith/events/actions/qmail-update-user");
3201 +
3202 +
3203 + # Attribution des groupes
3204 + # groups allocation
3205 + my $fm = shift;
3206 + my $q = $fm->{'cgi'};
3207 +
3208 + my $eval = "";
3209 + # Parcours de la liste des groupes
3210 + # Browse groups' list
3211 + open(LISTGRP, "zarafa-admin -L | awk 'NR > 4' |");
3212 + while(<LISTGRP>){
3213 + my $groupeparam = $_;
3214 + $groupeparam =~ s/^\t//g;
3215 + chomp $groupeparam;
3216 + $groupeparam =~ s/ /_/g;
3217 + if ($groupeparam =~ /^([-\@\w.]+)$/) {
3218 + $groupeparam = $1;
3219 + }
3220 + else {
3221 + $groupeparam = $1;
3222 + }
3223 + $groupeparam =~ s/_/ /g;
3224 + if($groupeparam){
3225 + unless ($eval eq $groupeparam){
3226 + my $yesNo = $q->param("$groupeparam");
3227 + # Si le bouton radio est sur oui, on ajoute l'utilisateur au groupe
3228 + # If the radio button is 'on', the user is added to the group
3229 + if($yesNo eq 'Yes'){
3230 + system("zarafa-admin -b $user_id -i \"$groupeparam\" > /dev/null") == 0
3231 + or die "Impossible de rajouter l'utilisateur $user_id dans le groupe $groupeparam";
3232 + }
3233 + }
3234 + $eval = $groupeparam;
3235 + }
3236 + }
3237 + close(LISTGRP);
3238 +
3239 + $self->success('CREATE_USER_SUCCESS');
3240 +
3241 +}
3242 +
3243 +# delete_user permet de supprimer un utilisateur de la base de données Zarafa
3244 +#############################################################################
3245 +# delete_user is use to delete an user from the Zarafa database
3246 +
3247 +sub delete_user {
3248 +
3249 + my ($self) = @_;
3250 + my $cgi = $self->{cgi};
3251 +
3252 + my $user = $cgi->param('actUsr');
3253 + if ($user =~ /^([-\@\w.]+)$/) {
3254 + $user = $1; # $data now untainted
3255 + }
3256 + else {
3257 + die "Bad data in '$user'";
3258 + }
3259 +
3260 + system("zarafa-admin -d $user > /dev/null") == 0
3261 + or die "Impossible de supprimer cet utilisateur.";
3262 +
3263 + # Suppression dans la BD Accounts du serveur SME
3264 + system("/sbin/e-smith/db accounts delprop \"$user\" zarafa enabled");
3265 + system("/etc/e-smith/events/actions/qmail-update-user");
3266 +
3267 + $self->success('DELETE_USER_SUCCESS');
3268 +
3269 +}
3270 +
3271 +# modify_user_groups affiche une liste de tout les groupes et indique si l'utilisateur dont il est question appartient au groupe ou non
3272 +#######################################################################################################################################
3273 +# modify_user_groups display a list of all groups and show if the user belongs to groups or not
3274 +
3275 +sub display_user_groups {
3276 +
3277 + my ($self) = @_;
3278 + my $cgi = $self->{cgi};
3279 +
3280 +if ($multicompany_enabled =~ m/false/){
3281 + # Récupération du nom d'utilisateur
3282 + # Recover username
3283 + my $user = $cgi->param('actUsr');
3284 + if ($user =~ /^([-\@\w.]+)$/) {
3285 + $user = $1; # $data now untainted
3286 + }
3287 + else {
3288 + die "Bad data in '$user'";
3289 + }
3290 +
3291 + my $fm = shift;
3292 + my $groups;
3293 + my $eval = "";
3294 + my $checkedYes = "";
3295 + my $display_group = $self->localise('GROUP_TEXT_DISPLAY');
3296 +
3297 + my $out = "<tr>\n <td class=\"sme-noborders-label\">"
3298 + . "$display_group"
3299 + . "</td>\n <td>\n"
3300 + . " <table border='0' cellspacing='0' cellpadding='0'>\n";
3301 +
3302 + # Parcours de la liste des groupes
3303 + # Browse groups' list
3304 + open(LIRE, "zarafa-admin -L | awk 'NR > 3' |");
3305 + while(<LIRE>){
3306 + $groups = $_;
3307 + $groups =~ s/^\t//g;
3308 + $groups =~ s/ /_/g;
3309 + chomp $groups;
3310 + if($groups){
3311 + # Si groupe existe ...
3312 + # If group exist ...
3313 + if ($groups =~ /^([-\@\w.]+)$/) {
3314 + $groups = $1; # $data now untainted
3315 + }
3316 + else {
3317 + $groups = $1;
3318 + }
3319 + $groups =~ s/_/ /g;
3320 + # On ne soccupe pas du groupe 'Everyone'
3321 + # The 'Everyone' group doesn't be display
3322 + unless($groups eq 'Everyone'){
3323 + # Si l'utilisateur est dans le groupe alors le bouton sera 'checked'
3324 + # If the user is in the group, the button will be 'checked'
3325 + open(GRP, "zarafa-admin --details \"$groups\" --type group |");
3326 + while(<GRP>){
3327 + if(m/$user\t{1}/){
3328 + $checkedYes = "checked";
3329 + }
3330 + }
3331 + close(GRP);
3332 + unless($eval =~ m/$groups/){
3333 + my $yes = $self->localise('CHECKED_YES');
3334 + my $no = $self->localise('CHECKED_NO');
3335 + # Affichage si le bouton 'oui' est 'checked'
3336 + # Display if the 'yes' button is 'checked'
3337 + if($checkedYes eq "checked") {
3338 + $out .="<tr>\n <td>$groups : </td>\n"
3339 + ."<td>$yes</td><td><input type=\"radio\" name=\"$groups\" checked=\"checked\""
3340 + ." value=\"Yes\"></td>"
3341 + ."<td>$no</td><td><input type=\"radio\" name=\"$groups\""
3342 + ." value=\"No\"></td>\n"
3343 + ."</tr>\n";
3344 + }
3345 + # Affichage si le bouton 'non' est 'checked'
3346 + # Display if the 'no' button is 'checked'
3347 + else {
3348 + $out .="<tr>\n <td>$groups : </td>\n"
3349 + ."<td>$yes</td><td><input type=\"radio\" name=\"$groups\""
3350 + ." value=\"Yes\"></td>"
3351 + ."<td>$no</td><td><input type=\"radio\" name=\"$groups\" checked=\"checked\""
3352 + ." value=\"No\"></td>\n"
3353 + ."</tr>\n";
3354 + }
3355 + $checkedYes = "";
3356 + }
3357 + $eval = $groups;
3358 + }
3359 + }
3360 + }
3361 +
3362 + $out .= " </table>\n </td>\n </tr>\n";
3363 + close(LIRE);
3364 + return $out;
3365 + }
3366 +
3367 +elsif ($multicompany_enabled =~ m/true/){
3368 +
3369 + # Récupération du nom d'utilisateur
3370 + # Recover username
3371 + my $user = $cgi->param('actUsr');
3372 + if ($user =~ /^([-\@\w.]+)$/) {
3373 + $user = $1; # $data now untainted
3374 + }
3375 + else {
3376 + die "Bad data in '$user'";
3377 + }
3378 +
3379 + my $fm = shift;
3380 + my $groups;
3381 + my $eval = "";
3382 + my $checkedYes = "";
3383 + my $display_group = $self->localise('GROUP_TEXT_DISPLAY');
3384 +
3385 + my $out = "<tr>\n <td class=\"sme-noborders-label\">"
3386 + . "$display_group"
3387 + . "</td>\n <td>\n"
3388 + . " <table border='0' cellspacing='0' cellpadding='0'>\n";
3389 +
3390 + # Parcours de la liste des groupes
3391 + # Browse groups' list
3392 + open(LIRE, "zarafa-admin -L |");
3393 + while(<LIRE>){
3394 + $groups = $_;
3395 + $groups =~ s/^\t//g;
3396 + $groups =~ s/ /_/g;
3397 + chomp $groups;
3398 + if($groups){
3399 + # Si groupe existe ...
3400 + # If group exist ...
3401 + if ($groups =~ /^([-\@\w.]+)$/) {
3402 + $groups = $1; # $data now untainted
3403 + }
3404 + else {
3405 + $groups = $1;
3406 + }
3407 + $groups =~ s/_/ /g;
3408 + # On ne soccupe pas du groupe 'Everyone'
3409 + # The 'Everyone' group doesn't be display
3410 + unless($groups =~ m/Everyone/ or $groups =~ m/Group list for/ or $groups =~ m/------/ or !$groups or $groups =~ m/groupname/){
3411 + # Si l'utilisateur est dans le groupe alors le bouton sera 'checked'
3412 + # If the user is in the group, the button will be 'checked'
3413 + open(GRP, "zarafa-admin --details \"$groups\" --type group |");
3414 + while(<GRP>){
3415 + if(m/$user/){
3416 + $checkedYes = "checked";
3417 + }
3418 + }
3419 + close(GRP);
3420 + unless($eval =~ m/$groups/){
3421 + my $yes = $self->localise('CHECKED_YES');
3422 + my $no = $self->localise('CHECKED_NO');
3423 + # Affichage si le bouton 'oui' est 'checked'
3424 + # Display if the 'yes' button is 'checked'
3425 + if($checkedYes eq "checked") {
3426 + $out .="<tr>\n <td>$groups : </td>\n"
3427 + ."<td>$yes</td><td><input type=\"radio\" name=\"$groups\" checked=\"checked\""
3428 + ." value=\"Yes\"></td>"
3429 + ."<td>$no</td><td><input type=\"radio\" name=\"$groups\""
3430 + ." value=\"No\"></td>\n"
3431 + ."</tr>\n";
3432 + }
3433 + # Affichage si le bouton 'non' est 'checked'
3434 + # Display if the 'no' button is 'checked'
3435 + else {
3436 + $out .="<tr>\n <td>$groups : </td>\n"
3437 + ."<td>$yes</td><td><input type=\"radio\" name=\"$groups\""
3438 + ." value=\"Yes\"></td>"
3439 + ."<td>$no</td><td><input type=\"radio\" name=\"$groups\" checked=\"checked\""
3440 + ." value=\"No\"></td>\n"
3441 + ."</tr>\n";
3442 + }
3443 + $checkedYes = "";
3444 + }
3445 + $eval = $groups;
3446 + }
3447 + }
3448 + }
3449 +
3450 + $out .= " </table>\n </td>\n </tr>\n";
3451 + close(LIRE);
3452 + return $out;
3453 + }
3454 +
3455 +}
3456 +
3457 +# Create_group permet la création de groupe d'utilisateur en récupérant un nom saisi par l'utilisateur
3458 +######################################################################################################
3459 +# Create_group allow to create an user's group with a name recover from the user
3460 +
3461 +sub Create_group {
3462 +
3463 + my ($self) = @_;
3464 + my $cgi = $self->{cgi};
3465 +
3466 + # Récuperation du nom de groupe
3467 + # Recover the groupname
3468 + my $group = $self->{cgi}->param('Groupname');
3469 + $group =~ s/ /_/g;
3470 + if ($group =~ /^([-\@\w.]+)$/) {
3471 + $group = $1; # $data now untainted
3472 + }
3473 + else {
3474 + die "Bad data in '$group'";
3475 + }
3476 + $group =~ s/_/ /g;
3477 +
3478 +
3479 + # Création du groupe
3480 + # Group creation
3481 + system("zarafa-admin -g \"$group\" > /dev/null") == 0
3482 + or die "Impossible de créer le groupe";
3483 +
3484 + $self->success('CREATE_GROUP_SUCCESS');
3485 +
3486 +}
3487 +
3488 +# show_group affiche une liste de tout les groupe dans un tableau avec un lien pour les modifier et un autre pour les supprimer
3489 +###############################################################################################################################
3490 +# show_group display a list of all groups into an array with two links in order to modify an delete them
3491 +
3492 +sub show_group {
3493 +
3494 + my $self = shift;
3495 + my $q = $self->{cgi};
3496 +
3497 +
3498 + if ($multicompany_enabled =~ m/false/){
3499 +
3500 + my $nbrligne = `zarafa-admin -L | wc -l`;
3501 + my $scriptname = basename($0);
3502 + my $ligne = 4;
3503 +
3504 + # Localisation
3505 + # Localization
3506 + my $groupname = $self->localise('GROUP_NAME_ARRAY');
3507 + my $suppr = $self->localise('DELETE');
3508 +
3509 + # Affichage de l'en-tête du tableau
3510 + # Display the header
3511 + print " <tr>\n <td colspan=\"2\">\n ";
3512 + print $q->start_table ({-CLASS => "sme-border"}),"\n ";
3513 + print $q->Tr(
3514 + esmith::cgi::genSmallCell($q, $groupname,"header"),
3515 + esmith::cgi::genSmallCell($q, $suppr,"header"));
3516 +
3517 + # Parcours de la liste des groupes avec affichage dans le tableau de chacun, création et affichage des liens correspondant
3518 + # Browse the group's list and display them into the array, create and diplay the links
3519 + my @grouptab;
3520 + my $nbr = 0;
3521 + while ($ligne < $nbrligne) {
3522 + $grouptab[$nbr] = `zarafa-admin -L | awk 'NR == $ligne'`;
3523 + $nbr ++;
3524 + $ligne ++;
3525 + }
3526 +
3527 + my @out = sort @grouptab;
3528 + foreach my $group (@out){
3529 + unless($group =~ m/^\tEveryone/){
3530 + my $delete = "<a href=\"$scriptname?page=0&wherenext=DeleteGroup&actGrp=$group\">$suppr</a>";
3531 + my $modify = "<a href=\"$scriptname?page=0&wherenext=DisplayGroupDetails&actGrp=$group\">$group</a>";
3532 + print $q->Tr(
3533 + esmith::cgi::genSmallCell($q,$modify ,"normal")," ",
3534 + esmith::cgi::genSmallCell($q,$delete,"normal"));
3535 + }
3536 + }
3537 +
3538 + print qq(</table></td></tr>\n);
3539 +
3540 + my $add_group = $self->localise('ADD_GROUP');
3541 + my $add_group_bubble = $self->localise('ADD_GROUP_BUBBLE');
3542 +
3543 + my $out ="<p><a class=\"button-like\"
3544 + href=\"zarafaUI?page=0&wherenext=DisplayCreateGroup\" title=\"$add_group_bubble\">$add_group</a></p>";
3545 +
3546 +
3547 + return $out;
3548 + }
3549 +
3550 + else {
3551 + return 0;
3552 + }
3553 +}
3554 +
3555 +# delete_group permet de supprimer un groupe passé en paramétre
3556 +###############################################################
3557 +# delete_group is use to delete the group passed in parameter
3558 +
3559 +sub delete_group {
3560 +
3561 + my ($self) = @_;
3562 + my $cgi = $self->{cgi};
3563 +
3564 + # Récupération du nom du groupe
3565 + # Recover the groupname
3566 + my $group = $cgi->param('actGrp');
3567 + $group =~ s/ /_/g;
3568 + if ($group =~ /^([-\@\w.]+)$/) {
3569 + $group = $1; # $data now untainted
3570 + }
3571 + else {
3572 + die "Bad data in '$group'";
3573 + }
3574 + $group =~ s/_/ /g;
3575 +
3576 + # Suppression du groupe
3577 + # Deleting group
3578 + system("zarafa-admin -G \"$group\" > /dev/null") == 0
3579 + or die "Impossible de supprimer ce groupe.";
3580 +
3581 + $self->success('DELETE_GROUP_SUCCESS');
3582 +
3583 +}
3584 +
3585 +# Cette fonction affiche un bouton contenant le texte 'Delete'
3586 +#############################################################
3587 +# Thus function dispay a button with 'Delete' text inside
3588 +
3589 +sub display_delete_group_button {
3590 +
3591 + my ($self) = @_;
3592 + my $cgi = $self->{cgi};
3593 +
3594 + my $group = $cgi->param('actGrp');
3595 + $group =~ s/ /_/g;
3596 + if ($group =~ /^([-\@\w.]+)$/) {
3597 + $group = $1; # $data now untainted
3598 + }
3599 + else {
3600 + die "Bad data in '$group'";
3601 + }
3602 + $group =~ s/_/ /g;
3603 + $self->print_button("DELETE");
3604 +
3605 +}
3606 +
3607 +# display_user_in_group affiche la liste de tout les utilisateurs et indique ceux qui appartiennent au groupe passé en paramétre
3608 +################################################################################################################################
3609 +# display_user_in_group display a list of all users and show those are in the group passed in parameter, or not
3610 +
3611 +sub display_user_in_group {
3612 +
3613 + my $self = shift;
3614 + my $cgi = $self->{cgi};
3615 +
3616 + # Récupération du nom du groupe
3617 + # Recovery of the groupename
3618 + my $group = $cgi->param('actGrp');
3619 + $group =~ s/ /_/g;
3620 + if ($group =~ /^([-\@\w.]+)$/) {
3621 + $group = $1; # $data now untainted
3622 + }
3623 + else {
3624 + die "Bad data in '$group'";
3625 + }
3626 + $group =~ s/_/ /g;
3627 +
3628 + my $grouptext = $self->localise('MODIFY_GROUP_TEXT');
3629 + print "$grouptext $group";
3630 + my ($user, $fullname);
3631 + my $out = "<tr>\n <td class=\"sme-noborders-label\">"
3632 + . "$group"
3633 + . "</td>\n <td>\n"
3634 + . " <table border='0' cellspacing='0' cellpadding='0'>\n";
3635 +
3636 + $group = "\"".$group."\"";
3637 + # Parcours de la liste des utilisateurs
3638 + # Browse the user list
3639 + open(USER, "zarafa-admin -l | awk 'NR > 4' |");
3640 + while(<USER>){
3641 + my $ligne = $_;
3642 + chomp $ligne;
3643 + my $checked = "";
3644 + $user = $ligne;
3645 + $fullname = $ligne;
3646 + $fullname =~ s/^.*\t{2}//g;
3647 + $user =~ s/\t{2}.*$//g;
3648 + $user =~ s/^\t{1}//g;
3649 + if($fullname){
3650 + # Si l'utilisateur est dans le groupe alors il est 'checked'
3651 + # If the user is in the group, he is 'checked'
3652 + open(INGRP, "zarafa-admin --details $group --type group |");
3653 + while(<INGRP>){
3654 + if(m/$user\t{1}/){
3655 + $checked = "checked";
3656 + }
3657 + }
3658 + close(INGRP);
3659 +
3660 + # Affichage si l'utilisateur est 'checked'
3661 + # Display if the user is 'checked'
3662 + my $yes = $self->localise('CHECKED_YES');
3663 + my $no = $self->localise('CHECKED_NO');
3664 + if($checked eq 'checked'){
3665 + $out .="<tr>\n <td>$fullname : </td>\n"
3666 + ."<td>$yes</td><td><input type=\"radio\" name=\"$user\" checked=\"checked\""
3667 + ." value=\"yes\"></td>"
3668 + ."<td>$no</td><td><input type=\"radio\" name=\"$user\""
3669 + ." value=\"no\"></td>\n"
3670 + ."</tr>\n";
3671 + }
3672 + # Affichage si l'utilisateur n'est pas 'checked'
3673 + # Display if the user is not 'checked'
3674 + else {
3675 + $out .="<tr>\n <td>$fullname : </td>\n"
3676 + ."<td>$yes</td><td><input type=\"radio\" name=\"$user\""
3677 + ." value=\"yes\"></td>"
3678 + ."<td>$no</td><td><input type=\"radio\" name=\"$user\" checked=\"checked\""
3679 + ." value=\"no\"></td>\n"
3680 + ."</tr>\n";
3681 + }
3682 + }
3683 + }
3684 + close(USER);
3685 + $out .= " </table>\n </td>\n </tr>\n";
3686 +
3687 + return $out;
3688 +
3689 +}
3690 +
3691 +# display_modify_group_button affiche un bouton contenant 'Modify' pour la gestion des groupes
3692 +##################################################################################################
3693 +# display_modify_group_button display a button with 'Modify' text specially for group's management
3694 +
3695 +sub display_modify_group_button {
3696 +
3697 + my ($self) = @_;
3698 +
3699 + my $cgi = $self->{cgi};
3700 +
3701 + $self->print_button("MODIFY_BUTTON");
3702 +
3703 +}
3704 +
3705 +# Cette fonction permet de modifier les utilisateurs appartenant a un groupe passé en paramétre
3706 +###############################################################################################
3707 +# This function is use to modify the users belong to a group passed in parameter
3708 +
3709 +sub modify_user_group {
3710 +
3711 + my ($self) = @_;
3712 + my $cgi = $self->{cgi};
3713 + my $group = $cgi->param('actGrp');
3714 +
3715 + my $fm = shift;
3716 + my $q = $fm->{'cgi'};
3717 +
3718 + # Parcours de la liste des utilisateurs
3719 + # Browse the user list
3720 + open(LISTUSR, "zarafa-admin -l | awk 'NR > 4' |");
3721 + while(<LISTUSR>){
3722 + my $user = $_;
3723 + $user =~ s/\t{2}.*$//g;
3724 + $user =~ s/^\t//g;
3725 + chomp $user;
3726 + chomp $group;
3727 +
3728 + if($user){
3729 + if ($user =~ /^([-\@\w.]+)$/) {
3730 + $user = $1;
3731 + }
3732 + else {
3733 + die "bad data in $user";
3734 + }
3735 +
3736 + my $present = 0;
3737 + my $yesNo = $q->param("$user");
3738 + # Si le bouton radio est sur 'oui' ...
3739 + # If the radio button is 'on' ...
3740 + if($yesNo eq 'yes'){
3741 + open(ADDUSR, "zarafa-admin -l --details \"$group\" --type group |");
3742 + while(<ADDUSR>){
3743 + if(m/^\t$user/){
3744 + $present = 1;
3745 + }
3746 + }
3747 + # Et si l'utilisateur n'est pas dans le groupe, alors on le rajoute
3748 + # And if the user is not in the group, then add him into the group
3749 + unless($present == 1){
3750 + system("zarafa-admin -b $user -i \"$group\" > /dev/null") == 0
3751 + or die "Impossible de rajouter l'utilisateur $user dans le groupe $group";
3752 + }
3753 + close(ADDUSR);
3754 + }
3755 + # Si le bouton radio est sur 'non' ...
3756 + # If the radio button is 'off' ...
3757 + if($yesNo eq 'no'){
3758 + open(DELUSR, "zarafa-admin -l --details $user |");
3759 + while(<DELUSR>){
3760 + # Et si l'utilisateur appartient au groupe, alors on le supprime du groupe
3761 + # And if the user is in the group, then delete him from the group
3762 + if(m/^\t$group$/){
3763 + system("zarafa-admin -B $user -i \"$group\" > /dev/null") == 0
3764 + or die "Impossible de supprimer l'utilisateur $user du groupe $group";
3765 + }
3766 + }
3767 + close(DELUSR);
3768 + }
3769 + }
3770 + }
3771 + close(LISTUSR);
3772 +
3773 + $self->success('MODIFY_GROUP_SUCCESS');
3774 +}
3775 +
3776 +# display_create_user_group permet d'afficher la liste de tout les groupes en précochant l'apartenance de l'utilisateur à tout les groupes.
3777 +# Utilisé pour l'affichage de la création d'un utilisateur.
3778 +#####################################################################################################################################################
3779 +# display_create_user_group is use to display a list of all group set to 'no' by default for the user. It will be use into the display of create user.
3780 +
3781 +sub display_create_user_group {
3782 +
3783 + my ($self) = @_;
3784 + my $cgi = $self->{cgi};
3785 +
3786 + my $fm = shift;
3787 + my $groups;
3788 + my $eval = "";
3789 +
3790 + my $exist_group = $self->localise('EXIST_GROUP');
3791 + my $out = "<tr>\n <td class=\"sme-noborders-label\">"
3792 + . $exist_group
3793 + . "</td>\n <td>\n"
3794 + . " <table border='0' cellspacing='0' cellpadding='0'>\n";
3795 +
3796 + # Parcours de la liste des groupes
3797 + # Browse group's list
3798 + open(LIRE, "zarafa-admin -L | awk 'NR > 3' |");
3799 + while(<LIRE>){
3800 + $groups = $_;
3801 + $groups =~ s/^\t//g;
3802 + chomp $groups;
3803 + $groups =~ s/ /_/g;
3804 + if ($groups =~ /^([-\@\w.]+)$/) {
3805 + $groups = $1; # $data now untainted
3806 + }
3807 + else {
3808 + $groups = $1;
3809 + }
3810 + $groups =~ s/_/ /g;
3811 + if($groups){
3812 + # Tant que le groupe n'est pas 'Everyone' ...
3813 + # Unless the group is 'Everyone' ...
3814 + my $yes = $self->localise('CHECKED_YES');
3815 + my $no = $self->localise('CHECKED_NO');
3816 + unless($groups eq 'Everyone'){
3817 + # Affichage des boutons radio du groupe
3818 + # Display the radio button's group
3819 + unless($eval eq $groups){
3820 + $out .="<tr>\n <td>$groups : </td>\n"
3821 + ."<td>$yes</td><td><input type=\"radio\" name=\"$groups\""
3822 + ." value=\"Yes\"></td>"
3823 + ."<td>$no</td><td><input type=\"radio\" name=\"$groups\""
3824 + ." value=\"No\" checked =\"checked\"></td>\n"
3825 + ."</tr>\n";
3826 + }
3827 + $eval = $groups;
3828 + }
3829 + }
3830 + }
3831 +
3832 + $out .= " </table>\n </td>\n </tr>\n";
3833 + close(LIRE);
3834 + return $out;
3835 +}
3836 +
3837 +# Les fonctions suivantes servent à vérifié se que l'utilisateur saisi dans divers champs, afin d'éviter toute erreur de sa part ou tentative de sabotage de la part de personne malveillante.
3838 +##############################################################################################################################################################################################
3839 +# The functions below is use to analyse and find error in the fields the user have fill in order to securise the software.
3840 +
3841 +# Cette fonction est principalement utilisé pour vérifié la composition d'un Nom complet rentré par l'utilisateur, ou bien pour le nom des groupes.
3842 +###################################################################################################################################################
3843 +# This function is mainly use to verify the composition of a Fullname enter by an user or a group name.
3844 +
3845 +sub fullname {
3846 +
3847 + my ($fm, $fullname) = @_;
3848 + my $self = shift;
3849 +
3850 + my $return_error = $self->localise('FULLNAME_VERIF_ERROR');
3851 + if ($fullname =~ m/^\w+((\.|\-|\s+)?\w+)*$/){
3852 + return "OK";
3853 + }
3854 + else {
3855 + return $return_error;
3856 + }
3857 +}
3858 +
3859 +# Cette fonction est principalement utilisé pour vérifié la composition d'un mot de passe saisi par l'utilisateur
3860 +#################################################################################################################
3861 +# This function is mainly use to verify the composition of a password enter by an user.
3862 +
3863 +sub my_password {
3864 +
3865 + my ($fm, $password, $minlength) = @_;
3866 + my $self = shift;
3867 + my $return_error = $self->localise('MY_PASSWORD_VERIF_ERROR');
3868 + if ($password =~ /^\w+$/i and length($password) >= $minlength){
3869 + return "OK";
3870 + }
3871 + elsif($password eq ''){
3872 + return "OK";
3873 + }
3874 + else {
3875 + return $return_error;
3876 + }
3877 +}
3878 +
3879 +# quota_test est utilisé pour testé si la valeur des quota saisi par l'utilisateur sont des valeurs correcte.
3880 +#############################################################################################################
3881 +# quota_test is use in order to test if the user has enter a correct value into quota fields
3882 +
3883 +sub quota_test {
3884 +
3885 + my ($fm, $quotalvl) = @_;
3886 + my $self = shift;
3887 + my $return_error = $self->localise('QUOTA_TEST_VERIF_ERROR');
3888 + if ($quotalvl =~ /^\d*$/ or $quotalvl =~ m/unlimited/i){
3889 + return "OK";
3890 + }
3891 + else {
3892 + return $return_error;
3893 + }
3894 +}
3895 +
3896 +# sup_quota_inter test si la valeur saisi dans le soft level est bien supérieur à celle du warning level ou équivalente
3897 +# dans le cas d'une valeur à zéro ou bien d'un unlimited
3898 +#########################################################################################################################
3899 +# sup_quota_inter is use to test if the value of the soft level is superior to the value of the warning level or the same
3900 +# in case of an 'unlimited' or a value at 0.
3901 +
3902 +sub sup_quota_inter {
3903 +
3904 + my ($fm, $softlvl) = @_;
3905 + my $self = shift;
3906 + my $return_error = $self->localise('SOFT_INF_WARN');
3907 + my $cgi = $self->{cgi};
3908 + my $warnlvl = $cgi->param('Warnlvl');
3909 +
3910 + if (!$softlvl && !$warnlvl){
3911 + return "OK";
3912 + }
3913 + elsif ($softlvl eq 'unlimited' && $warnlvl eq 'unlimited'){
3914 + return "OK";
3915 + }
3916 + elsif ($softlvl == '0' && $warnlvl == '0'){
3917 + return "OK";
3918 + }
3919 + elsif ($softlvl > $warnlvl){
3920 + return "OK";
3921 + }
3922 + else {
3923 + return $return_error;
3924 + }
3925 +}
3926 +
3927 +# sup_quota_inter test si la valeur saisi dans le hard level est bien supérieur à celle du soft level ou équivalente
3928 +# dans le cas d'une valeur à zéro ou bien d'un unlimited
3929 +#######################################################################################################################
3930 +# sup_quota_inter is used to test if the value of the hard level is superior to the value of the soft level or the same
3931 +# in case of an 'unlimited' or a value at 0.
3932 +
3933 +sub sup_quota_hard {
3934 +
3935 + my ($fm, $hardlvl) = @_;
3936 + my $self = shift;
3937 + my $return_error = $self->localise('HARD_INF_OTHER');
3938 + my $cgi = $self->{cgi};
3939 + my $warnlvl = $cgi->param('Warnlvl');
3940 + my $softlvl = $cgi->param('Softlvl');
3941 +
3942 + if (!$softlvl && !$hardlvl){
3943 + return "OK";
3944 + }
3945 + elsif ($softlvl eq 'unlimited' && $warnlvl eq 'unlimited') {
3946 + return "OK";
3947 + }
3948 + elsif ($softlvl == '0' && $hardlvl == '0'){
3949 + return "OK";
3950 + }
3951 + elsif ($hardlvl > $softlvl){
3952 + return "OK";
3953 + }
3954 + else {
3955 + return $return_error;
3956 + }
3957 +}
3958 +
3959 +# unique_username est utilisé pour vérifié si le nom d'utilisateur est bien unique dans le cas d'une création d'utilisateur
3960 +################################################################################################################################
3961 +# unique_username is used to verify if the username in the username's field is already taken or notin case of an user's creation
3962 +
3963 +sub unique_username {
3964 +
3965 + my ($fm, $user_get) = @_;
3966 + my $self = shift;
3967 + my $return_error = $self->localise('MULTIPLE_USERNAME');
3968 + my $present = 0;
3969 + open(USER, "zarafa-admin -l | awk 'NR > 4' |");
3970 + while(<USER>){
3971 + my $user = $_;
3972 + if ($user =~ m/$user_get\t/){
3973 + $present = 1;
3974 + }
3975 + }
3976 + close(USER);
3977 + if($present == 1){
3978 + return $return_error;
3979 + }
3980 + else {
3981 + return "OK";
3982 + }
3983 +}
3984 +
3985 +# unique_email est utilisé pour vérifié si l'email de l'utilisateur est bien unique dans le cas d'une création d'utilisateur
3986 +############################################################################################################################
3987 +# unique_email is used to verify if the email in the email's field is already taken or not in case of an user's creation
3988 +
3989 +sub unique_email {
3990 +
3991 + my ($fm, $email_get) = @_;
3992 + my $self = shift;
3993 + my $return_error = $self->localise('MULTIPLE_EMAIL');
3994 + my $cgi = $self->{cgi};
3995 + my $present = 0;
3996 + open(USER, "zarafa-admin -l | awk 'NR > 3' |");
3997 + while(<USER>){
3998 + my $user = $_;
3999 + $user =~ s/\t{2}.*$//g;
4000 + $user =~ s/^\t{1}//g;
4001 + chomp $user;
4002 + if($user) {
4003 + if ($user =~ /^([-\@\w.]+)$/) {
4004 + $user = $1; # $data now untainted
4005 + }
4006 + else {
4007 + die "Bad data in '$user'";
4008 + }
4009 + open(EMAIL, "zarafa-admin --details \"$user\" |");
4010 + while(<EMAIL>){
4011 + my $ligne = $_;
4012 + if ($ligne =~ m/$email_get/){
4013 + $present = 1;
4014 + }
4015 + }
4016 + }
4017 + close(EMAIL);
4018 + }
4019 + close(USER);
4020 + if($present == 1){
4021 + return $return_error;
4022 + }
4023 + else {
4024 + return "OK";
4025 + }
4026 +}
4027 +
4028 +# unique_username_modify est utilisé pour vérifié si le nom d'utilisateur est bien unique dans le cas d'une modification
4029 +#########################################################################################################################################
4030 +# unique_username_modify is used to verify if the username in the username's field is already taken or not in case of user's modification
4031 +
4032 +sub unique_username_modify {
4033 +
4034 + my ($fm, $user_get) = @_;
4035 + my $self = shift;
4036 + my $return_error = $self->localise('MULTIPLE_USERNAME');
4037 + my $cgi = $self->{cgi};
4038 + my $param_user = $cgi->param('actUsr');
4039 + my $present = 0;
4040 +
4041 + if($user_get eq $param_user){
4042 + return "OK";
4043 + }
4044 + else {
4045 + open(USER, "zarafa-admin -l | awk 'NR > 4' |");
4046 + while(<USER>){
4047 + my $user = $_;
4048 + if ($user =~ m/$user_get\t/){
4049 + $present = 1;
4050 + }
4051 + }
4052 + close(USER);
4053 + if($present == 1){
4054 + return $return_error;
4055 + }
4056 + else {
4057 + return "OK";
4058 + }
4059 + }
4060 +}
4061 +
4062 +# unique_email_modify est utilisé pour vérifié si l'email utilisateur est bien unique dans le cas d'une modification
4063 +################################################################################################################################
4064 +# unique_email_modify is used to verify if the email in the email's field is already taken or not in case of user's modification
4065 +
4066 +sub unique_email_modify {
4067 +
4068 + my ($fm, $email_get) = @_;
4069 + my $self = shift;
4070 + my $return_error = $self->localise('MULTIPLE_EMAIL');
4071 + my $cgi = $self->{cgi};
4072 + my $param_user = $cgi->param('actUsr');
4073 + my $present = 0;
4074 +
4075 + open(MAIL, "zarafa-admin --details \"$param_user\" |");
4076 + while(<MAIL>){
4077 + my $ligne = $_;
4078 + if ($ligne =~ m/$email_get/){
4079 + return "OK";
4080 + }
4081 + }
4082 + close(MAIL);
4083 +
4084 + open(USER, "zarafa-admin -l | awk 'NR > 3' |");
4085 + while(<USER>){
4086 + my $user = $_;
4087 + $user =~ s/\t{2}.*$//g;
4088 + $user =~ s/^\t{1}//g;
4089 + chomp $user;
4090 + if($user) {
4091 + if ($user =~ /^([-\@\w.]+)$/) {
4092 + $user = $1; # $data now untainted
4093 + }
4094 + else {
4095 + die "Bad data in '$user'";
4096 + }
4097 + open(EMAIL, "zarafa-admin --details \"$user\" |");
4098 + while(<EMAIL>){
4099 + my $mail = $_;
4100 + if ($mail =~ m/$email_get/){
4101 + $present = 1;
4102 + }
4103 + }
4104 + }
4105 + close(EMAIL);
4106 + }
4107 + close(USER);
4108 +
4109 + if($present == 1){
4110 + return $return_error;
4111 + }
4112 + else {
4113 + return "OK";
4114 + }
4115 +}
4116 +
4117 +# unique_groupname est utilisé pour vérifié si le nom du groupe est bien unique dans le cas d'une création de groupe
4118 +####################################################################################################################
4119 +# unique_groupname is used to verify if the groupnamed is already taken or not in case of an group's creation
4120 +
4121 +sub unique_groupname {
4122 +
4123 + my ($fm, $groupname) = @_;
4124 + my $self = shift;
4125 + my $return_error = $self->localise('MULTIPLE_GROUPNAME');
4126 + my $present = 0;
4127 +
4128 + open(GROUP, "zarafa-admin -L | awk 'NR > 3' |");
4129 + while(<GROUP>){
4130 + my $ligne = $_;
4131 + if ($ligne =~ m/$groupname/i){
4132 + $present = 1;
4133 + }
4134 + }
4135 + close(GROUP);
4136 +
4137 + if($present == 1){
4138 + return $return_error;
4139 + }
4140 + else {
4141 + return "OK";
4142 + }
4143 +}
4144 +
4145 +# Cette fonction est principalement utilisé pour vérifié la composition d'un nom d'utilisateur saisi par l'utilisateur
4146 +######################################################################################################################
4147 +# This function is mainly use to verify the composition of an username enter by an user.
4148 +
4149 +sub my_username {
4150 +
4151 + my ($fm, $username) = @_;
4152 + my $self = shift;
4153 + my $return_error = $self->localise('FALSE_USERNAME');
4154 +
4155 + if ($username) {
4156 + if($username =~ m/^\w+((\.|\-|@)?\w+)*$/){
4157 + return "OK";
4158 + }
4159 + else {
4160 + return $return_error;
4161 + }
4162 + }
4163 + else {
4164 + return $return_error;
4165 + }
4166 +}
4167 +
4168 +sub show_company_users {
4169 +
4170 + my $self = shift;
4171 + my $q = $self->{cgi};
4172 +
4173 + my $company = $q->param('actComp');
4174 + if ($company =~ /^([-\@\w.]+)$/) {
4175 + $company = $1; # $data now untainted
4176 + }
4177 + else {
4178 + die "bad data in $company";
4179 + }
4180 + my $scriptname = basename($0);
4181 +
4182 + # Localisation
4183 + # Localization
4184 + my $username = $self->localise('USER_NAME_ARRAY');
4185 + my $suppr = $self->localise('DELETE');
4186 +
4187 + # Affichage de l'en-tête du tableau
4188 + # Display the header
4189 + print " <tr>\n <td colspan=\"2\">\n ";
4190 + print $q->start_table ({-CLASS => "sme-border"}),"\n ";
4191 + print $q->Tr(
4192 + esmith::cgi::genSmallCell($q, $username,"header"),
4193 + esmith::cgi::genSmallCell($q, $suppr,"header"));
4194 +
4195 + # Parcours de la liste des groupes avec affichage dans le tableau de chacun, création et affichage des liens correspondant
4196 + # Browse the group's list and display them into the array, create and diplay the links
4197 + open(LIRE, "zarafa-admin -l | cut -f2 |");
4198 + my $user;
4199 + my $nbr = 0;
4200 + while (<LIRE>) {
4201 + if (m/\w+\@$company/) {
4202 + $user = $_;
4203 + my $delete = "<a href=\"$scriptname?page=0&wherenext=DeleteUser&actUsr=$user\">$suppr</a>";
4204 + my $modify = "<a href=\"$scriptname?page=0&wherenext=DisplayDetails&actUsr=$user\">$user</a>";
4205 + print $q->Tr(
4206 + esmith::cgi::genSmallCell($q,$modify ,"normal")," ",
4207 + esmith::cgi::genSmallCell($q,$delete,"normal"));
4208 + }
4209 + }
4210 + close(LIRE);
4211 +
4212 + print qq(</table></td></tr>\n);
4213 +
4214 + my $add_user = $self->localise('ADD_USER');
4215 + my $add_user_bubble = $self->localise('ADD_USER_BUBBLE');
4216 +
4217 + my $out ="<p><a class=\"button-like\"
4218 + href=\"zarafaUI?page=0&wherenext=DisplayCreateUser\" title=\"$add_user_bubble\">$add_user</a></p>";
4219 +
4220 +
4221 +return $out;
4222 +}
4223 +
4224 +sub print_message {
4225 +
4226 + my ($fm, $word) = @_;
4227 + $word = $fm->localise($word);
4228 + print qq(<tr><td colspan=2>$word</td></tr>);
4229 + return undef;
4230 +
4231 +}
4232 +
4233 +sub create_company {
4234 +
4235 + my ($self) = @_;
4236 + my $cgi = $self->{cgi};
4237 +
4238 + my $companyname = $self->{cgi}->param('createcompanyname');
4239 + if ($companyname =~ /^([-\@\w.]+)$/) {
4240 + $companyname = $1; # $data now untainted
4241 + }
4242 + else {
4243 + die "Bad data in '$companyname'";
4244 + }
4245 +
4246 +
4247 + system("zarafa-admin --create-company \"$companyname\" > /dev/null") == 0
4248 + or die "Impossible de créer la companie $companyname";
4249 +
4250 + $self->success('CREATE_COMPANY_SUCCESS');
4251 +
4252 +}
4253 +
4254 +sub delete_company {
4255 +
4256 + my ($self) = @_;
4257 + my $cgi = $self->{cgi};
4258 +
4259 + my $companyname = $self->{cgi}->param('actComp');
4260 + if ($companyname =~ /^([-\@\w.]+)$/) {
4261 + $companyname = $1; # $data now untainted
4262 + }
4263 + else {
4264 + die "Bad data in '$companyname'";
4265 + }
4266 +
4267 + system("zarafa-admin --delete-company \"$companyname\" > /dev/null") == 0
4268 + or die "Impossible de créer la companie $companyname";
4269 +
4270 + $self->success('DELETE_COMPANY_SUCCESS');
4271 +}
4272 +
4273 +sub display_delete_comp_button {
4274 +
4275 + my ($self) = @_;
4276 + my $cgi = $self->{cgi};
4277 +
4278 + my $group = $cgi->param('actComp');
4279 + if ($group =~ /^([-\@\w.]+)$/) {
4280 + $group = $1; # $data now untainted
4281 + }
4282 + else {
4283 + die "Bad data in '$group'";
4284 + }
4285 +
4286 + $self->print_button("DELETE");
4287 +
4288 +}
4289 \ No newline at end of file

admin@koozali.org
ViewVC Help
Powered by ViewVC 1.2.1 RSS 2.0 feed