1b88b8ce0c1e77ca70a570e80203dcbdc18a7954
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();
32 $display = "";
33 if($mode == 2){ // Single Entry Export !
34 $d = base64_decode($_GET['d']);
35 $n = base64_decode($_GET['n']);
36 $dn=$d.$n;
37 $date=date('dS \of F Y ');
38 $fname = tempnam("/tmp", "demo.xls");
39 $workbook= new writeexcel_workbook($fname);
41 $title_title=& $workbook->addformat(array(
42 bold => 1,
43 color => 'green',
44 size => 11,
45 underline => 2,
46 font => 'Helvetica'
47 ));
49 $title_bold=& $workbook->addformat(array(
50 bold => 1,
51 color => 'black',
52 size => 10,
53 font => 'Helvetica'
54 ));
55 # Create a format for the phone numbers
56 $f_phone =& $workbook->addformat();
57 $f_phone->set_align('left');
58 $f_phone->set_num_format('\0#');
61 switch ($d){
62 case "ou=people," :
63 $user= $ldap->gen_xls($dn,"(objectClass=*)",array("uid","dateOfBirth","gender","givenName","preferredLanguage"));
64 $intitul=array(_("Birthday").":", _("Sex").":", _("Surname")."/"._("Given name").":",_("Language").":");
66 //name of the xls file
67 $name_section=_("Users");
69 $worksheet=& $workbook->addworksheet(_("Users"));
70 $worksheet->set_column('A:B', 51);
72 $user_nbr=count($user);
73 $worksheet->write('A1',sprintf(_("User list of %s on %s"),$n,$date),$title_title);
74 $r=3;
75 for($i=1;$i<$user_nbr;$i++)
76 {
77 if($i>1)
78 $worksheet->write('A'.$r++,"");
79 $worksheet->write('A'.$r++,_("User ID").": ".$user[$i][0],$title_bold);
81 for($j=1;$j<5;$j++)
82 {
83 $r++;
84 $worksheet->write('A'.$r,$intitul[$j-1]);
85 $user[$i][$j]=utf8_decode ($user[$i][$j]);
86 $worksheet->write('B'.$r,$user[$i][$j]);
87 }
88 $worksheet->write('A'.$r++,"");
89 }
90 break;
92 case "ou=groups,": $groups= $ldap->gen_xls($dn,"(objectClass=*)",array("cn","memberUid"),TRUE,1);
93 $intitul=array(_("Members").":");
95 //name of the xls file
96 $name_section=_("Groups");
98 $worksheet =& $workbook->addworksheet(_("Groups"));
99 $worksheet->set_column('A:B', 51);
101 //count number of groups
102 $groups_nbr=count($groups);
103 $worksheet->write('A1', sprintf(_("Groups of %s on %s"), $n, $date),$title_title);
104 $r=3;
105 for($i=1;$i<$groups_nbr;$i++)
106 {
107 $worksheet->write('A'.$r++,_("User ID").": ".$groups[$i][0][0],$title_bold);
108 for($j=1;$j<=2;$j++)
109 {
110 $r++;
111 $worksheet->write('A'.$r,$intitul[$j-1]);
112 for($k=0;$k<= $groups[$i][$j]['count'];$k++)
113 {
114 $worksheet->write('B'.$r,$groups[$i][$j][$k]);
115 $r++;
116 }
117 }
118 }
119 break;
121 case "ou=computers,": $computers= $ldap->gen_xls($dn,"(objectClass=*)",array("cn","description","uid"));
122 $intitul=array(_("Description").":",_("User ID").":");
123 $worksheet =& $workbook->addworksheet(_("Computers"));
124 $worksheet->set_column('A:B', 32);
125 //count number of computers
126 $computers_nbr=count($computers);
127 $r=1;
128 for($i=1;$i<$computers_nbr;$i++)
129 {
130 if($i>1)
131 $worksheet->write('A'.$r++,"");
132 $worksheet->write('A'.$r++,_("Common name").": ".$computers[$i][0],$title_bold);
133 for($j=1;$j<3;$j++)
134 {
135 $r++;
136 $worksheet->write('A'.$r,$intitul[$j-1]);
137 $computers[$i][$j]=utf8_decode ($computers[$i][$j]);
138 $worksheet->write('B'.$r,$computers[$i][$j]);
139 }
140 $worksheet->write('A'.$r++,"");
141 }
142 break;
144 case "ou=servers,ou=systems,": $servers= $ldap->gen_xls($dn,"(objectClass=*)",array("cn"));
145 $intitul=array(_("Server name").":");
147 //name of the xls file
148 $name_section=_("Servers");
150 $worksheet =& $workbook->addworksheet(_("Servers"));
151 $worksheet->set_column('A:B', 51);
153 //count number of servers
154 $servers_nbr=count($servers);
155 $worksheet->write('A1',sprintf(_("Servers of %s on %s"), $n, $date),$title_title);
156 $r=3;
157 $worksheet->write('A'.$r++,_("Servers").": ",$title_bold);
158 for($i=1;$i<$servers_nbr;$i++)
159 {
160 for($j=0;$j<1;$j++)
161 {
162 $r++;
163 $worksheet->write('A'.$r,$intitul[$j]);
164 $servers[$i][$j]=utf8_decode ($servers[$i][$j]);
165 $worksheet->write('B'.$r,$servers[$i][$j]);
166 }
167 }
168 break;
170 case "dc=addressbook,": //data about addressbook
171 $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"));
173 $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").":");
175 //name of the xls file
176 $name_section=_("Adressbook");
178 $worksheet =& $workbook->addworksheet(_("Servers"));
179 $worksheet->set_column('A:B', 51);
181 //count number of entries
182 $address_nbr=count($address);
183 $worksheet->write('A1',sprintf(_("Adressbook of %s on %s"),$n, $date),$title_title);
184 $r=3;
185 for($i=1;$i<$address_nbr;$i++)
186 {
187 if($i>1)
188 $worksheet->write('A'.$r++,"");
189 $worksheet->write('A'.$r++,_("Common Name").": ".$address[$i][0],$title_bold);
190 for($j=1;$j<19;$j++)
191 {
192 $r++;
193 $worksheet->write('A'.$r,$intitul[$j]);
194 $address[$i][$j]=utf8_decode ($address[$i][$j]);
195 $worksheet->write('B'.$r,$address[$i][$j],$f_phone);
196 }
197 $worksheet->write('A'.$r++,"");
198 }
200 break;
202 default: echo "error!!";
203 }
205 $workbook->close();
208 // We'll be outputting a xls
209 header('Content-type: application/x-msexcel');
211 // It will be called demo.xls
212 header('Content-Disposition: attachment; filename='.$name_section.".xls");
214 // The source is in original.xls
215 readfile($fname);
216 unlink ($fname);
217 }
218 elseif($mode == 3){ // Full Export !
219 $dn = base64_decode($_GET['dn']);
221 //data about users
222 $user= $ldap->gen_xls("ou=people,".$dn,"(objectClass=*)",array("uid","dateOfBirth","gender","givenName","preferredLanguage"));
223 $user_intitul=array(_("Day of birth").":",_("Sex").":",_("Surname")."/"._("Given name").":",_("Language").":");
224 //data about groups
225 $groups= $ldap->gen_xls("ou=groups,".$dn,"(objectClass=*)",array("cn","memberUid"),TRUE,1);
226 $groups_intitul=array(_("Members").":");
227 //data about computers
228 $computers= $ldap->gen_xls("ou=computers,".$dn,"(objectClass=*)",array("cn","description","uid"));
229 $computers_intitul=array(_("Description").":",_("UID").":");
230 //data about servers
231 $servers= $ldap->gen_xls("ou=servers,ou=systems,".$dn,"(objectClass=*)",array("cn"));
232 $servers_intitul=array(_("Name").":");
233 //data about addressbook
234 $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"));
235 $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").":");
237 //name of the xls file
238 $name_section=_("Full");
239 $date=date('dS \of F Y ');
240 $fname = tempnam("/tmp", "demo.xls");
241 $workbook = new writeexcel_workbook($fname);
242 $worksheet = $workbook->addworksheet(_("Users"));
243 $worksheet2 = $workbook->addworksheet(_("Groups"));
244 $worksheet3 = $workbook->addworksheet(_("Servers"));
245 $worksheet4 =$workbook->addworksheet(_("Computers"));
246 $worksheet5 = $workbook->addworksheet(_("Adressbook"));
248 $worksheet->set_column('A:B', 51);
249 $worksheet2->set_column('A:B', 51);
250 $worksheet3->set_column('A:B', 51);
251 $worksheet4->set_column('A:B', 51);
252 $worksheet5->set_column('A:B', 51);
254 $title_title=& $workbook->addformat(array(
255 bold => 1,
256 color => 'green',
257 size => 11,
258 font => 'Helvetica'
259 ));
261 $title_bold =& $workbook->addformat(array(
262 bold => 1,
263 color => 'black',
264 size => 10,
265 font => 'Helvetica'
266 ));
268 # Create a format for the phone numbers
269 $f_phone =& $workbook->addformat();
270 $f_phone->set_align('left');
271 $f_phone->set_num_format('\0#');
273 //count number of users
274 $user_nbr=count($user);
275 $worksheet->write('A1',sprintf(_("User List of %s on %s"), $dn, $date),$title_title);
276 $r=3;
277 for($i=1;$i<$user_nbr;$i++)
278 {
279 if($i>1)
280 $worksheet->write('A'.$r++,"");
281 $worksheet->write('A'.$r++,_("User ID").": ".$user[$i][0],$title_bold);
282 for($j=1;$j<5;$j++)
283 {
284 $r++;
285 $worksheet->write('A'.$r,$user_intitul[$j-1]);
286 $user[$i][$j]=utf8_decode ($user[$i][$j]);
287 $worksheet->write('B'.$r,$user[$i][$j]);
288 }
289 $worksheet->write('A'.$r++,"");
290 }
292 //count number of groups
293 $groups_nbr=count($groups);
294 $worksheet2->write('A1',sprintf(_("Groups of %s on %s"), $dn, $date),$title_title);
295 $r=3;
296 for($i=1;$i<$groups_nbr;$i++)
297 {
298 $worksheet2->write('A'.$r++,_("User ID").": ".$groups[$i][0][0],$title_bold);
299 for($j=1;$j<=2;$j++)
300 {
301 $r++;
302 $worksheet2->write('A'.$r,$group_intitul[$j-1]);
303 for($k=0;$k<= $groups[$i][$j]['count'];$k++)
304 {
305 $worksheet2->write('B'.$r,$groups[$i][$j][$k]);
306 $r++;
307 }
308 }
309 }
311 //count number of servers
312 $servers_nbr=count($servers);
313 $worksheet3->write('A1',sprintf(_("Servers of %s on %s"),$dn,$date),$title_title);
314 $r=3;
315 $worksheet3->write('A'.$r++,_("Servers").": ",$title_bold);
316 for($i=1;$i<$servers_nbr;$i++)
317 {
318 for($j=0;$j<1;$j++)
319 {
320 $r++;
321 $worksheet3->write('A'.$r,$servers_intitul[$j]);
322 $servers[$i][$j]=utf8_decode ($servers[$i][$j]);
323 $worksheet3->write('B'.$r,$servers[$i][$j]);
324 }
325 }
327 //count number of computers
328 $computers_nbr=count($computers);
329 $worksheet4->write('A1',sprintf(_("Computers of %s on %s"),$dn,$date),$title_title);
330 $r=3;
331 for($i=1;$i<$computers_nbr;$i++)
332 {
333 if($i>1)
334 $worksheet->write('A'.$r++,"");
335 $worksheet4->write('A'.$r++,_("Common name").": ".$computers[$i][0],$title_bold);
336 for($j=1;$j<3;$j++)
337 {
338 $r++;
339 $worksheet4->write('A'.$r,$computers_intitul[$j-1]);
340 $computers[$i][$j]=utf8_decode ($computers[$i][$j]);
341 $worksheet4->write('B'.$r,$computers[$i][$j]);
342 }
343 $worksheet4->write('A'.$r++,"");
344 }
346 //count number of entries
347 $address_nbr=count($address);
348 $worksheet5->write('A1',sprintf(_("Adressbook of %s on %s"),$dn, $date),$title_title);
350 $r=3;
351 for($i=1;$i<$address_nbr;$i++)
352 {
353 if($i>1)
354 $worksheet5->write('A'.$r++,"");
355 $worksheet5->write('A'.$r++,_("Common name").": ".$address[$i][0],$title_bold);
356 for($j=1;$j<19;$j++)
357 {
358 $r++;
359 $worksheet5->write('A'.$r,$address_intitul[$j]);
360 $address[$i][$j]=utf8_decode ($address[$i][$j]);
361 $worksheet5->write('B'.$r,$address[$i][$j],$f_phone);
362 }
363 $worksheet5->write('A'.$r++,"");
364 }
365 $workbook->close();
368 // We'll be outputting a xls
369 header('Content-type: application/x-msexcel');
371 // It will be called demo.xls
372 header('Content-Disposition: attachment; filename='.$name_section.".xls");
374 readfile($fname);
376 unlink ($fname);
377 }
378 elseif($mode == 4){ // IVBB LDIF Export
379 $dn = base64_decode($_GET['dn']);
380 /*$display= $ldap->gen_ldif($dn,"(objectClass=ivbbentry)",array(
381 "GouvernmentOrganizationalUnit","houseIdentifier","vocation",
382 "ivbbLastDeliveryCollective","gouvernmentOrganizationalPersonLocality",
383 "gouvernmentOrganizationalUnitDescription","gouvernmentOrganizationalUnitSubjectArea",
384 "functionalTitle","role","certificateSerialNumber","userCertificate","publicVisible",
385 "telephoneNumber","seeAlso","description","title","x121Address","registeredAddress",
386 "destinationIndicator","preferredDeliveryMethod","telexNumber","teletexTerminalIdentifier",
387 "telephoneNumber","internationaliSDNNumber","facsimileTelephoneNumber","street",
388 "postOfficeBox","postalCode","postalAddress","physicalDeliveryOfficeName","ou",
389 "st","l","audio","businessCategory","carLicense","departmentNumber","displayName",
390 "employeeNumber","employeeType","givenName","homePhone","homePostalAddress",
391 "initials","jpegPhoto","labeledURI","mail","manager","mobile","o","pager","photo",
392 "roomNumber","secretary","userCertificate","x500uniqueIdentifier","preferredLanguage",
393 "userSMIMECertificate","userPKCS12"));*/
395 echo $display;
396 }
397 }
400 /* Basic setup, remove eventually registered sessions */
401 @require_once ("../include/php_setup.inc");
402 @require_once ("functions.inc");
403 session_start ();
405 /* Logged in? Simple security check */
406 if (!isset($_SESSION['ui'])){
407 gosa_log ("Error: getxls.php called without session");
408 header ("Location: index.php");
409 exit;
410 }
411 $ui = $_SESSION["ui"];
412 $config = $_SESSION['config'];
415 /* Check ACL's */
416 $dn ="";
417 if(isset($_GET['n'])){
418 $dn = base64_decode($_GET['n']);
419 }elseif(isset($_GET['dn'])){
420 $dn = base64_decode($_GET['dn']);
421 }
422 $acl = $ui->get_permissions($dn,"ldapmanager/xlsexport");
423 if(!preg_match("/r/",$acl)){
424 echo "insufficient permissions";
425 exit();
426 }
428 header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
429 header("Last-Modified: ".gmdate("D, d M Y H:i:s")." GMT");
430 header("Cache-Control: no-cache");
431 header("Pragma: no-cache");
432 header("Cache-Control: post-check=0, pre-check=0");
434 header("Content-type: text/plain");
436 switch ($_GET['ivbb']){
437 case 2: dump_ldap (2);
438 break;
440 case 3: dump_ldap (3);
441 break;
443 case 4: dump_ldap (4);
444 break;
446 default:
447 echo "Error in ivbb parameter. Request aborted.";
448 }
449 // vim:tabstop=2:expandtab:shiftwidth=2:filetype=php:syntax:ruler:
450 ?>