1 <?php
2 /*
3 * This code is part of GOsa (http://www.gosa-project.org)
4 * Copyright (C) 2003 Cajus Pollmeier
5 * Copyright (C) 2005 Guillaume Delecourt
6 * Copyright (C) 2005 Vincent Seynhaeve
7 * Copyright (C) 2005 Benoit Mortier
8 *
9 * ID: $$Id$$
10 *
11 * This program is free software; you can redistribute it and/or modify
12 * it under the terms of the GNU General Public License as published by
13 * the Free Software Foundation; either version 2 of the License, or
14 * (at your option) any later version.
15 *
16 * This program is distributed in the hope that it will be useful,
17 * but WITHOUT ANY WARRANTY; without even the implied warranty of
18 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
19 * GNU General Public License for more details.
20 *
21 * You should have received a copy of the GNU General Public License
22 * along with this program; if not, write to the Free Software
23 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
24 */
26 require_once "../include/utils/excel/class.writeexcel_workbook.inc.php";
27 require_once "../include/utils/excel/class.writeexcel_worksheet.inc.php";
29 function dump_ldap ($mode= 0)
30 {
31 global $config;
32 $ldap= $config->get_ldap_link();
33 $display = "";
36 if($mode == 2){ // Single Entry Export !
38 /* Get required attributes */
39 $d = base64_decode($_GET['d']);
40 $n = base64_decode($_GET['n']);
42 /* Create dn to search entries in */
43 $dn=$d.$n;
45 /* Create some strings */
46 $date=date('dS \of F Y ');
47 $fname = tempnam("/tmp", "demo.xls");
49 /* Create xls workbench */
50 $workbook= new writeexcel_workbook($fname);
52 /* Create some styles to generate xls */
53 $title_title= $workbook->addformat(array(
54 bold => 1,
55 color => 'green',
56 size => 11,
57 underline => 2,
58 font => 'Helvetica'
59 ));
61 $title_bold= $workbook->addformat(array(
62 bold => 1,
63 color => 'black',
64 size => 10,
65 font => 'Helvetica'
66 ));
68 # Create a format for the phone numbers
69 $f_phone = $workbook->addformat();
70 $f_phone->set_align('left');
71 $f_phone->set_num_format('\0#');
74 /* If the switch reaches default (it should not),
75 this will be set to false, so nothig will be created ... */
76 $save = true;
78 /* Check which type of data was requested */
79 switch ($d){
82 /* PEOPLE
83 Get all peoples from this $dn
84 and put them into the xls work sheet */
85 case get_people_ou() :
87 $user = $ldap->gen_xls($dn,"(objectClass=*)",array("uid","dateOfBirth","gender","givenName","preferredLanguage"));
88 $intitul = array(_("Birthday").":", _("Sex").":", _("Surname")."/"._("Given name").":",_("Language").":");
90 // name of the xls file
91 $name_section = _("Users");
92 $worksheet = $workbook->addworksheet(_("Users"));
93 $worksheet->set_column('A:B', 51);
95 $user_nbr = count($user);
96 $worksheet->write('A1',sprintf(_("User list of %s on %s"),$n,$date),$title_title);
97 $r=3;
98 for($i=1;$i<$user_nbr;$i++)
99 {
100 if($i>1)
101 $worksheet->write('A'.$r++,"");
102 $worksheet->write('A'.$r++,_("User ID").": ".$user[$i][0],$title_bold);
104 for($j=1;$j<5;$j++)
105 {
106 $r++;
107 $worksheet->write('A'.$r,$intitul[$j-1]);
108 $user[$i][$j]=utf8_decode ($user[$i][$j]);
109 $worksheet->write('B'.$r,$user[$i][$j]);
110 }
111 $worksheet->write('A'.$r++,"");
112 }
113 break;
116 /* GROUPS
117 Get all groups from th $dn
118 and put them into the xls work sheet */
119 case get_groups_ou():
121 /* Get group data */
122 $groups = $ldap->gen_xls($dn,"(objectClass=*)",array("cn","memberUid"),TRUE,1);
123 $intitul = array(_("Members").":");
125 //name of the xls file
126 $name_section=_("Groups");
128 $worksheet = $workbook->addworksheet(_("Groups"));
129 $worksheet->set_column('A:B', 51);
131 //count number of groups
132 $groups_nbr=count($groups);
133 $worksheet->write('A1', sprintf(_("Groups of %s on %s"), $n, $date),$title_title);
134 $r=3;
135 for($i=1;$i<$groups_nbr;$i++)
136 {
137 $worksheet->write('A'.$r++,_("User ID").": ".$groups[$i][0][0],$title_bold);
138 for($j=1;$j<=2;$j++)
139 {
140 $r++;
141 $worksheet->write('A'.$r,$intitul[$j-1]);
142 for($k=0;$k<= $groups[$i][$j]['count'];$k++)
143 {
144 $worksheet->write('B'.$r,$groups[$i][$j][$k]);
145 $r++;
146 }
147 }
148 }
149 break;
152 /* SYSTEMS
153 Get all systems from th $dn
154 and put them into the xls work sheet */
155 case get_ou('systemsou'):
157 $name_section=_("Servers");
158 $computers= $ldap->gen_xls($dn,"(&(objectClass=*)(cn=*))",array("cn","description","uid"));
160 $intitul=array(_("Description").":",_("User ID").":");
161 $worksheet = $workbook->addworksheet(_("Computers"));
162 $worksheet->set_column('A:B', 32);
164 //count number of computers
165 $computers_nbr=count($computers);
166 $r=1;
167 for($i=1;$i<$computers_nbr;$i++)
168 {
169 if($i>1)
170 $worksheet->write('A'.$r++,"");
171 $worksheet->write('A'.$r++,_("Common name").": ".$computers[$i][0],$title_bold);
172 for($j=1;$j<3;$j++)
173 {
174 $r++;
175 $worksheet->write('A'.$r,$intitul[$j-1]);
176 $computers[$i][$j]=utf8_decode ($computers[$i][$j]);
177 $worksheet->write('B'.$r,$computers[$i][$j]);
178 }
179 $worksheet->write('A'.$r++,"");
180 }
181 break;
183 /* SYSTEMS
184 Get all systems from th $dn
185 and put them into the xls work sheet */
186 case get_ou('serverou'): $servers= $ldap->gen_xls($dn,"(objectClass=*)",array("cn"));
187 $intitul=array(_("Server name").":");
189 //name of the xls file
190 $name_section=_("Servers");
192 $worksheet = $workbook->addworksheet(_("Servers"));
193 $worksheet->set_column('A:B', 51);
195 //count number of servers
196 $servers_nbr=count($servers);
197 $worksheet->write('A1',sprintf(_("Servers of %s on %s"), $n, $date),$title_title);
198 $r=3;
199 $worksheet->write('A'.$r++,_("Servers").": ",$title_bold);
200 for($i=1;$i<$servers_nbr;$i++)
201 {
202 for($j=0;$j<1;$j++)
203 {
204 $r++;
205 $worksheet->write('A'.$r,$intitul[$j]);
206 $servers[$i][$j]=utf8_decode ($servers[$i][$j]);
207 $worksheet->write('B'.$r,$servers[$i][$j]);
208 }
209 }
210 break;
212 case "dc=addressbook,": //data about addressbook
214 /* ADDRESSBOOK
215 Get all addressbook entries from $dn
216 and put them into the xls work sheet */
218 $address= $ldap->gen_xls($dn,"(objectClass=*)",
219 array("cn","displayName","facsimileTelephoneNumber","givenName",
220 "homePhone","homePostalAddress","initials","l","mail","mobile",
221 "o","ou","pager","telephoneNumber","postalAddress",
222 "postalCode","sn","st","title"));
224 $intitul= array(_("Common name").":",_("Display name").":",_("Fax").":",
225 _("Name")."/"._("Given name").":",_("Home phone").":",
226 _("Home postal address").":",_("Initials").":",_("Location").":",
227 _("Mail address").":",_("Mobile phone").":",_("City").":",
228 _("Postal address").":",_("Pager").":",_("Phone number").":",
229 _("Address").":",_("Postal code").":",_("Surname").":",
230 _("State").":",_("Function").":");
232 //name of the xls file
233 $name_section=_("Adressbook");
235 $worksheet = $workbook->addworksheet(_("Servers"));
236 $worksheet->set_column('A:B', 51);
238 //count number of entries
239 $address_nbr=count($address);
240 $worksheet->write('A1',sprintf(_("Adressbook of %s on %s"),$n, $date),$title_title);
241 $r=3;
242 for($i=1;$i<$address_nbr;$i++)
243 {
244 if($i>1)
245 $worksheet->write('A'.$r++,"");
246 $worksheet->write('A'.$r++,_("Common Name").": ".$address[$i][0],$title_bold);
247 for($j=1;$j<19;$j++)
248 {
249 $r++;
250 $worksheet->write('A'.$r,$intitul[$j]);
251 $address[$i][$j]=utf8_decode ($address[$i][$j]);
252 $worksheet->write('B'.$r,$address[$i][$j],$f_phone);
253 }
254 $worksheet->write('A'.$r++,"");
255 }
257 break;
258 default:
260 $save = false;
261 echo "Specified parameter '".$d."' was not found in switch-case.";
262 }
264 if($save){
265 $workbook->close();
266 }
268 // We'll be outputting a xls
269 header('Content-type: application/x-msexcel');
271 // It will be called demo.xls
272 header('Content-Disposition: attachment; filename=xls_export_'.$name_section.".xls");
274 // The source is in original.xls
275 readfile($fname);
276 unlink ($fname);
277 }
278 elseif($mode == 3){ // Full Export !
279 $dn = base64_decode($_GET['dn']);
281 //data about users
282 $user= $ldap->gen_xls( get_people_ou().$dn,"(objectClass=*)",array("uid","dateOfBirth","gender","givenName","preferredLanguage"));
283 $user_intitul=array(_("Day of birth").":",_("Sex").":",_("Surname")."/"._("Given name").":",_("Language").":");
284 //data about groups
285 $groups= $ldap->gen_xls(get_groups_ou().$dn,"(objectClass=*)",array("cn","memberUid"),TRUE,1);
286 $groups_intitul=array(_("Members").":");
287 //data about computers
288 $computers= $ldap->gen_xls("ou=computers,".$dn,"(objectClass=*)",array("cn","description","uid"));
289 $computers_intitul=array(_("Description").":",_("UID").":");
290 //data about servers
291 $servers= $ldap->gen_xls(get_ou('serverou').$dn,"(objectClass=*)",array("cn"));
292 $servers_intitul=array(_("Name").":");
293 //data about addressbook
294 $address= $ldap->gen_xls("dc=addressbook,".$dn,"(objectClass=*)",
295 array("cn","displayName","facsimileTelephoneNumber","givenName","homePhone","homePostalAddress",
296 "initials","l","mail","mobile","o","ou","pager","telephoneNumber","postalAddress",
297 "postalCode","sn","st","title"));
298 $address_intitul=
299 array("cn",_("Display name").":",_("Fax").":",_("Surname")."/"._("Given name").":",
300 _("Phone number").":",_("Postal address").":",_("Initials").":",_("City").":",
301 _("Email address").":",_("Mobile").":",_("Organization").":",_("Organizational unit").":",
302 _("Pager").":",_("Phone number").":",_("Postal address").":",_("Postal Code").":",
303 _("Surename").":",_("State").":",_("Title").":");
305 //name of the xls file
306 $name_section=_("Full");
307 $date=date('dS \of F Y ');
308 $fname = tempnam("/tmp", "demo.xls");
309 $workbook = new writeexcel_workbook($fname);
310 $worksheet = $workbook->addworksheet(_("Users"));
311 $worksheet2 = $workbook->addworksheet(_("Groups"));
312 $worksheet3 = $workbook->addworksheet(_("Servers"));
313 $worksheet4 =$workbook->addworksheet(_("Computers"));
314 $worksheet5 = $workbook->addworksheet(_("Adressbook"));
316 $worksheet->set_column('A:B', 51);
317 $worksheet2->set_column('A:B', 51);
318 $worksheet3->set_column('A:B', 51);
319 $worksheet4->set_column('A:B', 51);
320 $worksheet5->set_column('A:B', 51);
322 $title_title= $workbook->addformat(array(
323 bold => 1,
324 color => 'green',
325 size => 11,
326 font => 'Helvetica'
327 ));
329 $title_bold = $workbook->addformat(array(
330 bold => 1,
331 color => 'black',
332 size => 10,
333 font => 'Helvetica'
334 ));
336 # Create a format for the phone numbers
337 $f_phone = $workbook->addformat();
338 $f_phone->set_align('left');
339 $f_phone->set_num_format('\0#');
341 //count number of users
342 $user_nbr=count($user);
343 $worksheet->write('A1',sprintf(_("User list of %s on %s"), $dn, $date),$title_title);
344 $r=3;
345 for($i=1;$i<$user_nbr;$i++)
346 {
347 if($i>1)
348 $worksheet->write('A'.$r++,"");
349 $worksheet->write('A'.$r++,_("User ID").": ".$user[$i][0],$title_bold);
350 for($j=1;$j<5;$j++)
351 {
352 $r++;
353 $worksheet->write('A'.$r,$user_intitul[$j-1]);
354 $user[$i][$j]=utf8_decode ($user[$i][$j]);
355 $worksheet->write('B'.$r,$user[$i][$j]);
356 }
357 $worksheet->write('A'.$r++,"");
358 }
360 //count number of groups
361 $groups_nbr=count($groups);
362 $worksheet2->write('A1',sprintf(_("Groups of %s on %s"), $dn, $date),$title_title);
363 $r=3;
364 for($i=1;$i<$groups_nbr;$i++)
365 {
366 $worksheet2->write('A'.$r++,_("User ID").": ".$groups[$i][0][0],$title_bold);
367 for($j=1;$j<=2;$j++)
368 {
369 $r++;
370 $worksheet2->write('A'.$r,$group_intitul[$j-1]);
371 for($k=0;$k<= $groups[$i][$j]['count'];$k++)
372 {
373 $worksheet2->write('B'.$r,$groups[$i][$j][$k]);
374 $r++;
375 }
376 }
377 }
379 //count number of servers
380 $servers_nbr=count($servers);
381 $worksheet3->write('A1',sprintf(_("Servers of %s on %s"),$dn,$date),$title_title);
382 $r=3;
383 $worksheet3->write('A'.$r++,_("Servers").": ",$title_bold);
384 for($i=1;$i<$servers_nbr;$i++)
385 {
386 for($j=0;$j<1;$j++)
387 {
388 $r++;
389 $worksheet3->write('A'.$r,$servers_intitul[$j]);
390 $servers[$i][$j]=utf8_decode ($servers[$i][$j]);
391 $worksheet3->write('B'.$r,$servers[$i][$j]);
392 }
393 }
395 //count number of computers
396 $computers_nbr=count($computers);
397 $worksheet4->write('A1',sprintf(_("Computers of %s on %s"),$dn,$date),$title_title);
398 $r=3;
399 for($i=1;$i<$computers_nbr;$i++)
400 {
401 if($i>1)
402 $worksheet->write('A'.$r++,"");
403 $worksheet4->write('A'.$r++,_("Common name").": ".$computers[$i][0],$title_bold);
404 for($j=1;$j<3;$j++)
405 {
406 $r++;
407 $worksheet4->write('A'.$r,$computers_intitul[$j-1]);
408 $computers[$i][$j]=utf8_decode ($computers[$i][$j]);
409 $worksheet4->write('B'.$r,$computers[$i][$j]);
410 }
411 $worksheet4->write('A'.$r++,"");
412 }
414 //count number of entries
415 $address_nbr=count($address);
416 $worksheet5->write('A1',sprintf(_("Adressbook of %s on %s"),$dn, $date),$title_title);
418 $r=3;
419 for($i=1;$i<$address_nbr;$i++)
420 {
421 if($i>1)
422 $worksheet5->write('A'.$r++,"");
423 $worksheet5->write('A'.$r++,_("Common name").": ".$address[$i][0],$title_bold);
424 for($j=1;$j<19;$j++)
425 {
426 $r++;
427 $worksheet5->write('A'.$r,$address_intitul[$j]);
428 $address[$i][$j]=utf8_decode ($address[$i][$j]);
429 $worksheet5->write('B'.$r,$address[$i][$j],$f_phone);
430 }
431 $worksheet5->write('A'.$r++,"");
432 }
433 $workbook->close();
436 // We'll be outputting a xls
437 header('Content-type: application/x-msexcel');
439 // It will be called demo.xls
440 header('Content-Disposition: attachment; filename='.$name_section.".xls");
442 readfile($fname);
444 unlink ($fname);
445 }
446 elseif($mode == 4){ // IVBB LDIF Export
447 $dn = base64_decode($_GET['dn']);
448 /*$display= $ldap->gen_ldif($dn,"(objectClass=ivbbentry)",array(
449 "GouvernmentOrganizationalUnit","houseIdentifier","vocation",
450 "ivbbLastDeliveryCollective","gouvernmentOrganizationalPersonLocality",
451 "gouvernmentOrganizationalUnitDescription","gouvernmentOrganizationalUnitSubjectArea",
452 "functionalTitle","role","certificateSerialNumber","userCertificate","publicVisible",
453 "telephoneNumber","seeAlso","description","title","x121Address","registeredAddress",
454 "destinationIndicator","preferredDeliveryMethod","telexNumber","teletexTerminalIdentifier",
455 "telephoneNumber","internationaliSDNNumber","facsimileTelephoneNumber","street",
456 "postOfficeBox","postalCode","postalAddress","physicalDeliveryOfficeName","ou",
457 "st","l","audio","businessCategory","carLicense","departmentNumber","displayName",
458 "employeeNumber","employeeType","givenName","homePhone","homePostalAddress",
459 "initials","jpegPhoto","labeledURI","mail","manager","mobile","o","pager","photo",
460 "roomNumber","secretary","userCertificate","x500uniqueIdentifier","preferredLanguage",
461 "userSMIMECertificate","userPKCS12"));*/
463 echo $display;
464 }
465 }
468 /* Basic setup, remove eventually registered sessions */
469 @require_once ("../include/php_setup.inc");
470 @require_once ("functions.inc");
471 session::start();
472 session::set('errorsAlreadyPosted',array());
474 /* Logged in? Simple security check */
475 if (!session::is_set('ui')){
476 new log("security","all/all","",array(),"Error: getxls.php called without session") ;
477 header ("Location: index.php");
478 exit;
479 }
480 $ui = session::get('ui');
481 $config = session::get('config');
484 /* Check ACL's */
485 $dn ="";
486 if(isset($_GET['n'])){
487 $dn = base64_decode($_GET['n']);
488 }elseif(isset($_GET['dn'])){
489 $dn = base64_decode($_GET['dn']);
490 }
491 $acl = $ui->get_permissions($dn,"ldapmanager/xlsexport");
492 if(!preg_match("/r/",$acl)){
493 msg_dialog::display(_("Permission error"),_("You have no permission to do LDAP exports!"),FATAL_ERROR_DIALOG);
494 exit();
495 }
497 header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
498 header("Last-Modified: ".gmdate("D, d M Y H:i:s")." GMT");
499 header("Cache-Control: no-cache");
500 header("Pragma: no-cache");
501 header("Cache-Control: post-check=0, pre-check=0");
503 header("Content-type: text/plain");
505 switch ($_GET['ivbb']){
506 case 2: dump_ldap (2);
507 break;
509 case 3: dump_ldap (3);
510 break;
512 case 4: dump_ldap (4);
513 break;
515 default:
516 echo "Error in ivbb parameter. Request aborted.";
517 }
518 // vim:tabstop=2:expandtab:shiftwidth=2:filetype=php:syntax:ruler:
519 ?>