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 // print_r($_GET);
38 $dn=$d.$n;
39 // echo $dn ;
40 $fname = tempnam("/tmp", "demo.xls");
41 $workbook=& new writeexcel_workbook($fname);
43 $title_bold=& $workbook->addformat(array(
44 bold => 1,
45 color => 'black',
46 size => 10,
47 font => 'Helvetica'
48 ));
51 switch ($d){
52 case "ou=people," :
53 $user= $ldap->gen_xls($dn,"(objectClass=*)",array("uid","dateOfBirth","gender","givenName","preferredLanguage"));
54 $intitul=array(_("Birthday").":", _("Sexe").":", _("Name")."/"._("Firstname").":",_("Language").":");
56 $worksheet=& $workbook->addworksheet(_("Users"));
57 $worksheet->set_column('A:B', 32);
60 $user_nbr=count($user);
61 $r=1;
62 for($i=1;$i<$user_nbr;$i++)
63 {
64 if($i>1)
65 $worksheet->write('A'.$r++,"");
66 $worksheet->write('A'.$r++,_("User ID").": ".$user[$i][0],$title_bold);
68 for($j=1;$j<5;$j++)
69 {
70 $r++;
71 $worksheet->write('A'.$r,$intitul[$j-1]);
72 $worksheet->write('B'.$r,$user[$i][$j]);
73 }
74 $worksheet->write('A'.$r++,"");
75 }
76 break;
78 case "ou=groups,": $groups= $ldap->gen_xls($dn,"(objectClass=*)",array("cn","memberUid"),TRUE,1);
79 $intitul=array(_("Members").":");
80 $worksheet =& $workbook->addworksheet(_("Groups"));
81 $worksheet->set_column('A:B', 32);
83 //count number of groups
84 $groups_nbr=count($groups);
85 $r=1;
86 for($i=1;$i<$groups_nbr;$i++)
87 {
88 $worksheet->write('A'.$r++,_("User ID").": ".$groups[$i][0][0],$title_bold);
89 for($j=1;$j<=2;$j++)
90 {
91 $r++;
92 $worksheet->write('A'.$r,$intitul[$j-1]);
93 for($k=0;$k<= $groups[$i][$j]['count'];$k++)
94 {
95 $worksheet->write('B'.$r,$groups[$i][$j][$k]);
96 $r++;
97 }
98 }
99 }
100 break;
102 case "ou=computers,": $computers= $ldap->gen_xls($dn,"(objectClass=*)",array("cn","description","uid"));
103 $intitul=array(_("Description").":",_("User ID").":");
104 $worksheet =& $workbook->addworksheet(_("Computers"));
105 $worksheet->set_column('A:B', 32);
107 //count number of computers
108 $computers_nbr=count($computers);
109 $r=1;
110 for($i=1;$i<$computers_nbr;$i++)
111 {
112 if($i>1)
113 $worksheet->write('A'.$r++,"");
114 $worksheet->write('A'.$r++,_("Common Name").": ".$computers[$i][0],$title_bold);
115 for($j=1;$j<3;$j++)
116 {
117 $r++;
118 $worksheet->write('A'.$r,$intitul[$j-1]);
119 $worksheet->write('B'.$r,$computers[$i][$j]);
120 }
121 $worksheet->write('A'.$r++,"");
122 }
123 break;
125 case "ou=servers,ou=systems,": $servers= $ldap->gen_xls($dn,"(objectClass=*)",array("cn"));
126 $intitul=array(_("Server Name").":");
128 $worksheet =& $workbook->addworksheet(_("Servers"));
129 $worksheet->set_column('A:B', 32);
131 //count number of servers
132 $servers_nbr=count($servers);
133 $r=1;
134 $worksheet->write('A'.$r++,_("Servers").": ",$title_bold);
135 for($i=1;$i<$servers_nbr;$i++)
136 {
137 for($j=0;$j<1;$j++)
138 {
139 $r++;
140 $worksheet->write('A'.$r,$intitul[$j]);
141 $worksheet->write('B'.$r,$servers[$i][$j]);
142 }
143 }
144 break;
146 case "dc=addressbook,": //data about addressbook
147 $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"));
149 $intitul=array(_("Common name").":",_("Display Name").":",_("Fax").":",_("Name")."/"._("Firstname").":",_("Home phone").":",_("Home postal address").":",_("Initials").":",_("Location").":",_("Mail address").":",_("Mobile phone").":",_("City").":",_("Postal address").":",_("Pager").":",_("Phone number").":",_("Adress").":",_("Postal code").":",_("Surename").":",_("State").":",_("Function").":");
151 $worksheet =& $workbook->addworksheet(_("Servers"));
152 $worksheet->set_column('A:B', 32);
154 //count number of entries
155 $address_nbr=count($address);
156 $r=1;
157 for($i=1;$i<$address_nbr;$i++)
158 {
159 if($i>1)
160 $worksheet->write('A'.$r++,"");
161 $worksheet->write('A'.$r++,_("Common Name").": ".$address[$i][0],$title_bold);
162 for($j=1;$j<19;$j++)
163 {
164 $r++;
165 $worksheet->write('A'.$r,$intitul[$j]);
166 $worksheet->write('B'.$r,$address[$i][$j]);
167 }
168 $worksheet->write('A'.$r++,"");
169 }
171 break;
173 default: echo "error!!";
174 }
176 $workbook->close();
179 // We'll be outputting a xls
180 header('Content-type: application/x-msexcel');
182 // It will be called demo.xls
183 header('Content-Disposition: attachment; filename="demo.xls"');
185 // The source is in original.xls
186 readfile($fname);
187 unlink ($fname);
188 }
189 elseif($mode == 3){ // Full Export !
190 $dn = base64_decode($_GET['dn']);
192 //data about users
193 $user= $ldap->gen_xls("ou=people,".$dn,"(objectClass=*)",array("uid","dateOfBirth","gender","givenName","preferredLanguage"));
194 $user_intitul=array(_("BirthDate").":",_("Sex").":",_("Name")."/"._("Firstname").":",_("Language").":");
195 //data about groups
196 $groups= $ldap->gen_xls("ou=groups,".$dn,"(objectClass=*)",array("cn","memberUid"),TRUE,1);
197 $groups_intitul=array(_("Members").":");
198 //data about computers
199 $computers= $ldap->gen_xls("ou=computers,".$dn,"(objectClass=*)",array("cn","description","uid"));
200 $computers_intitul=array(_("Description").":",_("Uid").":");
201 //data about servers
202 $servers= $ldap->gen_xls("ou=servers,ou=systems,".$dn,"(objectClass=*)",array("cn"));
203 $servers_intitul=array(_("Name").":");
204 //data about addressbook
205 $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"));
206 $address_intitul=array("cn",_("DisplayName").":",_("Fax").":",_("Name")."/"._("Firstname").":",_("Phone Number").":",_("Postal Adress").":",_("Initials").":",_("City").":",_("Email address").":",_("mobile").":",_("Organization").":",_("Organizational Unit").":",_("Pager").":",_("Phone Number").":",_("Postal Address").":",_("Postal Code").":",_("Sn").":",_("st").":",_("Title").":");
209 $fname = tempnam("/tmp", "demo.xls");
210 $workbook =& new writeexcel_workbook($fname);
211 $worksheet =& $workbook->addworksheet(_("Users"));
212 $worksheet2 =& $workbook->addworksheet(_("Groups"));
213 $worksheet3 =& $workbook->addworksheet(_("Servers"));
214 $worksheet4 =& $workbook->addworksheet(_("Computers"));
215 $worksheet5 =& $workbook->addworksheet(_("Adressbook"));
217 $worksheet->set_column('A:B', 32);
218 $worksheet2->set_column('A:B', 32);
219 $worksheet3->set_column('A:B', 32);
220 $worksheet4->set_column('A:B', 32);
221 $worksheet5->set_column('A:B', 32);
223 $title_bold =& $workbook->addformat(array(
224 bold => 1,
225 color => 'black',
226 size => 10,
227 font => 'Helvetica'
228 ));
231 //count number of users
232 $user_nbr=count($user);
233 $r=1;
234 for($i=1;$i<$user_nbr;$i++)
235 {
236 if($i>1)
237 $worksheet->write('A'.$r++,"");
238 $worksheet->write('A'.$r++,_("User ID").": ".$user[$i][0],$title_bold);
239 for($j=1;$j<5;$j++)
240 {
241 $r++;
242 $worksheet->write('A'.$r,$user_intitul[$j-1]);
243 $worksheet->write('B'.$r,$user[$i][$j]);
244 }
245 $worksheet->write('A'.$r++,"");
246 }
248 //count number of groups
249 $groups_nbr=count($groups);
250 $r=1;
251 for($i=1;$i<$groups_nbr;$i++)
252 {
253 $worksheet2->write('A'.$r++,_("User ID").": ".$groups[$i][0][0],$title_bold);
254 for($j=1;$j<=2;$j++)
255 {
256 $r++;
257 $worksheet2->write('A'.$r,$group_intitul[$j-1]);
258 for($k=0;$k<= $groups[$i][$j]['count'];$k++)
259 {
260 $worksheet2->write('B'.$r,$groups[$i][$j][$k]);
261 $r++;
262 }
263 }
264 }
266 //count number of servers
267 $servers_nbr=count($servers);
268 $r=1;
269 $worksheet3->write('A'.$r++,_("Servers").": ",$title_bold);
270 for($i=1;$i<$servers_nbr;$i++)
271 {
272 for($j=0;$j<1;$j++)
273 {
274 $r++;
275 $worksheet3->write('A'.$r,$servers_intitul[$j]);
276 $worksheet3->write('B'.$r,$servers[$i][$j]);
277 }
278 }
280 //count number of computers
281 $computers_nbr=count($computers);
282 $r=1;
283 for($i=1;$i<$computers_nbr;$i++)
284 {
285 if($i>1)
286 $worksheet->write('A'.$r++,"");
287 $worksheet4->write('A'.$r++,_("Common Name").": ".$computers[$i][0],$title_bold);
288 for($j=1;$j<3;$j++)
289 {
290 $r++;
291 $worksheet4->write('A'.$r,$computers_intitul[$j-1]);
292 $worksheet4->write('B'.$r,$computers[$i][$j]);
293 }
294 $worksheet4->write('A'.$r++,"");
295 }
297 //count number of entries
298 $address_nbr=count($address);
299 $r=1;
300 for($i=1;$i<$address_nbr;$i++)
301 {
302 if($i>1)
303 $worksheet5->write('A'.$r++,"");
304 $worksheet5->write('A'.$r++,_("Common Name").": ".$address[$i][0],$title_bold);
305 for($j=1;$j<19;$j++)
306 {
307 $r++;
308 $worksheet5->write('A'.$r,$address_intitul[$j]);
309 $worksheet5->write('B'.$r,$address[$i][$j]);
310 }
311 $worksheet5->write('A'.$r++,"");
312 }
313 $workbook->close();
316 // We'll be outputting a xls
317 header('Content-type: application/x-msexcel');
319 // It will be called demo.xls
320 header('Content-Disposition: attachment; filename="demo.xls"');
322 // The PDF source is in original.xl
323 readfile($fname);
325 unlink ($fname);
326 }
327 elseif($mode == 4){ // IVBB LDIF Export
328 $dn = base64_decode($_GET['dn']);
329 /*$display= $ldap->gen_ldif($dn,"(objectClass=ivbbEntry)",array(
330 "GouvernmentOrganizationalUnit","houseIdentifier","vocation",
331 "ivbbLastDeliveryCollective","gouvernmentOrganizationalPersonLocality",
332 "gouvernmentOrganizationalUnitDescription","gouvernmentOrganizationalUnitSubjectArea",
333 "functionalTitle","role","certificateSerialNumber","userCertificate","publicVisible",
334 "telephoneNumber","seeAlso","description","title","x121Address","registeredAddress",
335 "destinationIndicator","preferredDeliveryMethod","telexNumber","teletexTerminalIdentifier",
336 "telephoneNumber","internationaliSDNNumber","facsimileTelephoneNumber","street",
337 "postOfficeBox","postalCode","postalAddress","physicalDeliveryOfficeName","ou",
338 "st","l","audio","businessCategory","carLicense","departmentNumber","displayName",
339 "employeeNumber","employeeType","givenName","homePhone","homePostalAddress",
340 "initials","jpegPhoto","labeledURI","mail","manager","mobile","o","pager","photo",
341 "roomNumber","secretary","userCertificate","x500uniqueIdentifier","preferredLanguage",
342 "userSMIMECertificate","userPKCS12"));*/
344 echo $display;
345 }
346 }
349 /* Basic setup, remove eventually registered sessions */
350 @require_once ("../include/php_setup.inc");
351 @require_once ("functions.inc");
352 error_reporting (E_ALL);
353 session_start ();
355 /* Logged in? Simple security check */
356 if (!isset($_SESSION['ui'])){
357 gosa_log ("Error: getldif.php called without session");
358 header ("Location: ../index.php");
359 exit;
360 }
361 $ui= $_SESSION["ui"];
362 $config= $_SESSION['config'];
364 header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
365 header("Last-Modified: ".gmdate("D, d M Y H:i:s")." GMT");
366 header("Cache-Control: no-cache");
367 header("Pragma: no-cache");
368 header("Cache-Control: post-check=0, pre-check=0");
370 header("Content-type: text/plain");
372 /* Check ACL's */
373 $acl= get_permissions ($config->current['BASE'], $ui->subtreeACL);
374 $acl= get_module_permission($acl, "all", $config->current['BASE']);
375 if (chkacl($acl, "all") != ""){
376 header ("Location: ../index.php");
377 exit;
378 }
380 switch ($_GET['ivbb']){
381 case 2: dump_ldap (2);
382 break;
384 case 3: dump_ldap (3);
385 break;
387 case 4: dump_ldap (4);
388 break;
390 default:
391 echo "Error in ivbb parameter. Request aborted.";
392 }
393 // vim:tabstop=2:expandtab:shiftwidth=2:filetype=php:syntax:ruler:
394 ?>