Code

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