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