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/php_writeexcel/class.writeexcel_workbook.inc.php";
25 require_once "../include/php_writeexcel/class.writeexcel_worksheet.inc.php";
27 function dump_ldap ($mode= 0)
28 {
29 global $config;
30 $ldap= $config->get_ldap_link();
31 error_reporting (E_ALL & ~E_NOTICE);
33 $display = "";
34 if($mode == 2){ // Single Entry Export !
35 $d = base64_decode($_GET['d']);
36 $n = base64_decode($_GET['n']);
37 $dn=$d.$n;
38 $date=date('dS \of F Y ');
39 $fname = tempnam("/tmp", "demo.xls");
40 $workbook=& new writeexcel_workbook($fname);
42 $title_title=& $workbook->addformat(array(
43 bold => 1,
44 color => 'green',
45 size => 11,
46 underline => 2,
47 font => 'Helvetica'
48 ));
50 $title_bold=& $workbook->addformat(array(
51 bold => 1,
52 color => 'black',
53 size => 10,
54 font => 'Helvetica'
55 ));
56 # Create a format for the phone numbers
57 $f_phone =& $workbook->addformat();
58 $f_phone->set_align('left');
59 $f_phone->set_num_format('\0#');
62 switch ($d){
63 case "ou=people," :
64 $user= $ldap->gen_xls($dn,"(objectClass=*)",array("uid","dateOfBirth","gender","givenName","preferredLanguage"));
65 $intitul=array(_("Birthday").":", _("Sex").":", _("Surname")."/"._("Given name").":",_("Language").":");
67 //name of the xls file
68 $name_section=_("Users");
70 $worksheet=& $workbook->addworksheet(_("Users"));
71 $worksheet->set_column('A:B', 51);
73 $user_nbr=count($user);
74 $worksheet->write('A1',sprintf(_("User list of %s on %s"),$n,$date),$title_title);
75 $r=3;
76 for($i=1;$i<$user_nbr;$i++)
77 {
78 if($i>1)
79 $worksheet->write('A'.$r++,"");
80 $worksheet->write('A'.$r++,_("User ID").": ".$user[$i][0],$title_bold);
82 for($j=1;$j<5;$j++)
83 {
84 $r++;
85 $worksheet->write('A'.$r,$intitul[$j-1]);
86 $user[$i][$j]=utf8_decode ($user[$i][$j]);
87 $worksheet->write('B'.$r,$user[$i][$j]);
88 }
89 $worksheet->write('A'.$r++,"");
90 }
91 break;
93 case "ou=groups,": $groups= $ldap->gen_xls($dn,"(objectClass=*)",array("cn","memberUid"),TRUE,1);
94 $intitul=array(_("Members").":");
96 //name of the xls file
97 $name_section=_("Groups");
99 $worksheet =& $workbook->addworksheet(_("Groups"));
100 $worksheet->set_column('A:B', 51);
102 //count number of groups
103 $groups_nbr=count($groups);
104 $worksheet->write('A1', sprintf(_("Groups of %s on %s"), $n, $date),$title_title);
105 $r=3;
106 for($i=1;$i<$groups_nbr;$i++)
107 {
108 $worksheet->write('A'.$r++,_("User ID").": ".$groups[$i][0][0],$title_bold);
109 for($j=1;$j<=2;$j++)
110 {
111 $r++;
112 $worksheet->write('A'.$r,$intitul[$j-1]);
113 for($k=0;$k<= $groups[$i][$j]['count'];$k++)
114 {
115 $worksheet->write('B'.$r,$groups[$i][$j][$k]);
116 $r++;
117 }
118 }
119 }
120 break;
122 case "ou=computers,": $computers= $ldap->gen_xls($dn,"(objectClass=*)",array("cn","description","uid"));
123 $intitul=array(_("Description").":",_("User ID").":");
124 $worksheet =& $workbook->addworksheet(_("Computers"));
125 $worksheet->set_column('A:B', 32);
126 //count number of computers
127 $computers_nbr=count($computers);
128 $r=1;
129 for($i=1;$i<$computers_nbr;$i++)
130 {
131 if($i>1)
132 $worksheet->write('A'.$r++,"");
133 $worksheet->write('A'.$r++,_("Common name").": ".$computers[$i][0],$title_bold);
134 for($j=1;$j<3;$j++)
135 {
136 $r++;
137 $worksheet->write('A'.$r,$intitul[$j-1]);
138 $computers[$i][$j]=utf8_decode ($computers[$i][$j]);
139 $worksheet->write('B'.$r,$computers[$i][$j]);
140 }
141 $worksheet->write('A'.$r++,"");
142 }
143 break;
145 case "ou=servers,ou=systems,": $servers= $ldap->gen_xls($dn,"(objectClass=*)",array("cn"));
146 $intitul=array(_("Server name").":");
148 //name of the xls file
149 $name_section=_("Servers");
151 $worksheet =& $workbook->addworksheet(_("Servers"));
152 $worksheet->set_column('A:B', 51);
154 //count number of servers
155 $servers_nbr=count($servers);
156 $worksheet->write('A1',sprintf(_("Servers of %s on %s"), $n, $date),$title_title);
157 $r=3;
158 $worksheet->write('A'.$r++,_("Servers").": ",$title_bold);
159 for($i=1;$i<$servers_nbr;$i++)
160 {
161 for($j=0;$j<1;$j++)
162 {
163 $r++;
164 $worksheet->write('A'.$r,$intitul[$j]);
165 $servers[$i][$j]=utf8_decode ($servers[$i][$j]);
166 $worksheet->write('B'.$r,$servers[$i][$j]);
167 }
168 }
169 break;
171 case "dc=addressbook,": //data about addressbook
172 $address= $ldap->gen_xls($dn,"(objectClass=*)",array("cn","displayName","facsimileTelephoneNumber","givenName","homePhone","homePostalAddress","initials","l","mail","mobile","o","ou","pager","telephoneNumber","postalAddress","postalCode","sn","st","title"));
174 $intitul=array(_("Common name").":",_("Display name").":",_("Fax").":",_("Name")."/"._("Given name").":",_("Home phone").":",_("Home postal address").":",_("Initials").":",_("Location").":",_("Mail address").":",_("Mobile phone").":",_("City").":",_("Postal address").":",_("Pager").":",_("Phone number").":",_("Address").":",_("Postal code").":",_("Surname").":",_("State").":",_("Function").":");
176 //name of the xls file
177 $name_section=_("Adressbook");
179 $worksheet =& $workbook->addworksheet(_("Servers"));
180 $worksheet->set_column('A:B', 51);
182 //count number of entries
183 $address_nbr=count($address);
184 $worksheet->write('A1',sprintf(_("Adressbook of %s on %s"),$n, $date),$title_title);
185 $r=3;
186 for($i=1;$i<$address_nbr;$i++)
187 {
188 if($i>1)
189 $worksheet->write('A'.$r++,"");
190 $worksheet->write('A'.$r++,_("Common Name").": ".$address[$i][0],$title_bold);
191 for($j=1;$j<19;$j++)
192 {
193 $r++;
194 $worksheet->write('A'.$r,$intitul[$j]);
195 $address[$i][$j]=utf8_decode ($address[$i][$j]);
196 $worksheet->write('B'.$r,$address[$i][$j],$f_phone);
197 }
198 $worksheet->write('A'.$r++,"");
199 }
201 break;
203 default: echo "error!!";
204 }
206 $workbook->close();
209 // We'll be outputting a xls
210 header('Content-type: application/x-msexcel');
212 // It will be called demo.xls
213 header('Content-Disposition: attachment; filename='.$name_section.".xls");
215 // The source is in original.xls
216 readfile($fname);
217 unlink ($fname);
218 }
219 elseif($mode == 3){ // Full Export !
220 $dn = base64_decode($_GET['dn']);
222 //data about users
223 $user= $ldap->gen_xls("ou=people,".$dn,"(objectClass=*)",array("uid","dateOfBirth","gender","givenName","preferredLanguage"));
224 $user_intitul=array(_("Day of birth").":",_("Sex").":",_("Surname")."/"._("Given name").":",_("Language").":");
225 //data about groups
226 $groups= $ldap->gen_xls("ou=groups,".$dn,"(objectClass=*)",array("cn","memberUid"),TRUE,1);
227 $groups_intitul=array(_("Members").":");
228 //data about computers
229 $computers= $ldap->gen_xls("ou=computers,".$dn,"(objectClass=*)",array("cn","description","uid"));
230 $computers_intitul=array(_("Description").":",_("UID").":");
231 //data about servers
232 $servers= $ldap->gen_xls("ou=servers,ou=systems,".$dn,"(objectClass=*)",array("cn"));
233 $servers_intitul=array(_("Name").":");
234 //data about addressbook
235 $address= $ldap->gen_xls("dc=addressbook,".$dn,"(objectClass=*)",array("cn","displayName","facsimileTelephoneNumber","givenName","homePhone","homePostalAddress","initials","l","mail","mobile","o","ou","pager","telephoneNumber","postalAddress","postalCode","sn","st","title"));
236 $address_intitul=array("cn",_("Display name").":",_("Fax").":",_("Surname")."/"._("Given name").":",_("Phone number").":",_("Postal address").":",_("Initials").":",_("City").":",_("Email address").":",_("Mobile").":",_("Organization").":",_("Organizational unit").":",_("Pager").":",_("Phone number").":",_("Postal address").":",_("Postal Code").":",_("Surename").":",_("State").":",_("Title").":");
238 //name of the xls file
239 $name_section=_("Full");
240 $date=date('dS \of F Y ');
241 $fname = tempnam("/tmp", "demo.xls");
242 $workbook =& new writeexcel_workbook($fname);
243 $worksheet =& $workbook->addworksheet(_("Users"));
244 $worksheet2 =& $workbook->addworksheet(_("Groups"));
245 $worksheet3 =& $workbook->addworksheet(_("Servers"));
246 $worksheet4 =& $workbook->addworksheet(_("Computers"));
247 $worksheet5 =& $workbook->addworksheet(_("Adressbook"));
249 $worksheet->set_column('A:B', 51);
250 $worksheet2->set_column('A:B', 51);
251 $worksheet3->set_column('A:B', 51);
252 $worksheet4->set_column('A:B', 51);
253 $worksheet5->set_column('A:B', 51);
255 $title_title=& $workbook->addformat(array(
256 bold => 1,
257 color => 'green',
258 size => 11,
259 font => 'Helvetica'
260 ));
262 $title_bold =& $workbook->addformat(array(
263 bold => 1,
264 color => 'black',
265 size => 10,
266 font => 'Helvetica'
267 ));
269 # Create a format for the phone numbers
270 $f_phone =& $workbook->addformat();
271 $f_phone->set_align('left');
272 $f_phone->set_num_format('\0#');
274 //count number of users
275 $user_nbr=count($user);
276 $worksheet->write('A1',sprintf(_("User List of %s on %s"), $dn, $date),$title_title);
277 $r=3;
278 for($i=1;$i<$user_nbr;$i++)
279 {
280 if($i>1)
281 $worksheet->write('A'.$r++,"");
282 $worksheet->write('A'.$r++,_("User ID").": ".$user[$i][0],$title_bold);
283 for($j=1;$j<5;$j++)
284 {
285 $r++;
286 $worksheet->write('A'.$r,$user_intitul[$j-1]);
287 $user[$i][$j]=utf8_decode ($user[$i][$j]);
288 $worksheet->write('B'.$r,$user[$i][$j]);
289 }
290 $worksheet->write('A'.$r++,"");
291 }
293 //count number of groups
294 $groups_nbr=count($groups);
295 $worksheet2->write('A1',sprintf(_("Groups of %s on %s"), $dn, $date),$title_title);
296 $r=3;
297 for($i=1;$i<$groups_nbr;$i++)
298 {
299 $worksheet2->write('A'.$r++,_("User ID").": ".$groups[$i][0][0],$title_bold);
300 for($j=1;$j<=2;$j++)
301 {
302 $r++;
303 $worksheet2->write('A'.$r,$group_intitul[$j-1]);
304 for($k=0;$k<= $groups[$i][$j]['count'];$k++)
305 {
306 $worksheet2->write('B'.$r,$groups[$i][$j][$k]);
307 $r++;
308 }
309 }
310 }
312 //count number of servers
313 $servers_nbr=count($servers);
314 $worksheet3->write('A1',sprintf(_("Servers of %s on %s"),$dn,$date),$title_title);
315 $r=3;
316 $worksheet3->write('A'.$r++,_("Servers").": ",$title_bold);
317 for($i=1;$i<$servers_nbr;$i++)
318 {
319 for($j=0;$j<1;$j++)
320 {
321 $r++;
322 $worksheet3->write('A'.$r,$servers_intitul[$j]);
323 $servers[$i][$j]=utf8_decode ($servers[$i][$j]);
324 $worksheet3->write('B'.$r,$servers[$i][$j]);
325 }
326 }
328 //count number of computers
329 $computers_nbr=count($computers);
330 $worksheet4->write('A1',sprintf(_("Computers of %s on %s"),$dn,$date),$title_title);
331 $r=3;
332 for($i=1;$i<$computers_nbr;$i++)
333 {
334 if($i>1)
335 $worksheet->write('A'.$r++,"");
336 $worksheet4->write('A'.$r++,_("Common name").": ".$computers[$i][0],$title_bold);
337 for($j=1;$j<3;$j++)
338 {
339 $r++;
340 $worksheet4->write('A'.$r,$computers_intitul[$j-1]);
341 $computers[$i][$j]=utf8_decode ($computers[$i][$j]);
342 $worksheet4->write('B'.$r,$computers[$i][$j]);
343 }
344 $worksheet4->write('A'.$r++,"");
345 }
347 //count number of entries
348 $address_nbr=count($address);
349 $worksheet5->write('A1',sprintf(_("Adressbook of %s on %s"),$dn, $date),$title_title);
351 $r=3;
352 for($i=1;$i<$address_nbr;$i++)
353 {
354 if($i>1)
355 $worksheet5->write('A'.$r++,"");
356 $worksheet5->write('A'.$r++,_("Common name").": ".$address[$i][0],$title_bold);
357 for($j=1;$j<19;$j++)
358 {
359 $r++;
360 $worksheet5->write('A'.$r,$address_intitul[$j]);
361 $address[$i][$j]=utf8_decode ($address[$i][$j]);
362 $worksheet5->write('B'.$r,$address[$i][$j],$f_phone);
363 }
364 $worksheet5->write('A'.$r++,"");
365 }
366 $workbook->close();
369 // We'll be outputting a xls
370 header('Content-type: application/x-msexcel');
372 // It will be called demo.xls
373 header('Content-Disposition: attachment; filename='.$name_section.".xls");
375 readfile($fname);
377 unlink ($fname);
378 }
379 elseif($mode == 4){ // IVBB LDIF Export
380 $dn = base64_decode($_GET['dn']);
381 /*$display= $ldap->gen_ldif($dn,"(objectClass=ivbbentry)",array(
382 "GouvernmentOrganizationalUnit","houseIdentifier","vocation",
383 "ivbbLastDeliveryCollective","gouvernmentOrganizationalPersonLocality",
384 "gouvernmentOrganizationalUnitDescription","gouvernmentOrganizationalUnitSubjectArea",
385 "functionalTitle","role","certificateSerialNumber","userCertificate","publicVisible",
386 "telephoneNumber","seeAlso","description","title","x121Address","registeredAddress",
387 "destinationIndicator","preferredDeliveryMethod","telexNumber","teletexTerminalIdentifier",
388 "telephoneNumber","internationaliSDNNumber","facsimileTelephoneNumber","street",
389 "postOfficeBox","postalCode","postalAddress","physicalDeliveryOfficeName","ou",
390 "st","l","audio","businessCategory","carLicense","departmentNumber","displayName",
391 "employeeNumber","employeeType","givenName","homePhone","homePostalAddress",
392 "initials","jpegPhoto","labeledURI","mail","manager","mobile","o","pager","photo",
393 "roomNumber","secretary","userCertificate","x500uniqueIdentifier","preferredLanguage",
394 "userSMIMECertificate","userPKCS12"));*/
396 echo $display;
397 }
398 }
401 /* Basic setup, remove eventually registered sessions */
402 @require_once ("../include/php_setup.inc");
403 @require_once ("functions.inc");
404 error_reporting (E_ALL);
405 session_start ();
407 /* Logged in? Simple security check */
408 if (!isset($_SESSION['ui'])){
409 gosa_log ("Error: getldif.php called without session");
410 header ("Location: ../index.php");
411 exit;
412 }
413 $ui= $_SESSION["ui"];
414 $config= $_SESSION['config'];
416 header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
417 header("Last-Modified: ".gmdate("D, d M Y H:i:s")." GMT");
418 header("Cache-Control: no-cache");
419 header("Pragma: no-cache");
420 header("Cache-Control: post-check=0, pre-check=0");
422 header("Content-type: text/plain");
424 /* Check ACL's */
425 $acl= get_permissions ($config->current['BASE'], $ui->subtreeACL);
426 $acl= get_module_permission($acl, "all", $config->current['BASE']);
427 if (chkacl($acl, "all") != ""){
428 header ("Location: ../index.php");
429 exit;
430 }
432 switch ($_GET['ivbb']){
433 case 2: dump_ldap (2);
434 break;
436 case 3: dump_ldap (3);
437 break;
439 case 4: dump_ldap (4);
440 break;
442 default:
443 echo "Error in ivbb parameter. Request aborted.";
444 }
445 // vim:tabstop=2:expandtab:shiftwidth=2:filetype=php:syntax:ruler:
446 ?>