Code

Added acl check
[gosa.git] / html / getxls.php
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");
68         
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").":");
174       
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   }
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;
411 $ui     = $_SESSION["ui"];
412 $config = $_SESSION['config'];
415 /* Check ACL's */
416 $dn =  base64_decode($_GET['n']);
417 $acl = $ui->get_permissions($dn,"ldapmanager/xlsexport");
418 if(!preg_match("/r/",$acl)){
419   echo "insufficient permissions";
420   exit();
423 header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
424 header("Last-Modified: ".gmdate("D, d M Y H:i:s")." GMT");
425 header("Cache-Control: no-cache");
426 header("Pragma: no-cache");
427 header("Cache-Control: post-check=0, pre-check=0");
429 header("Content-type: text/plain");
431 switch ($_GET['ivbb']){
432   case 2: dump_ldap (2);
433           break;
435   case 3: dump_ldap (3);
436           break;
438   case 4: dump_ldap (4);
439           break;
441   default:
442           echo "Error in ivbb parameter. Request aborted.";
444 // vim:tabstop=2:expandtab:shiftwidth=2:filetype=php:syntax:ruler:
445 ?>