Code

Added some templates && functionality
[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();
31   $display = "";
34   if($mode == 2){       // Single Entry Export !
36     /* Get required attributes */
37     $d =  base64_decode($_GET['d']);
38     $n =  base64_decode($_GET['n']);
40     /* Create dn to search entries in */
41     $dn=$d.$n;
43     /* Create some strings */
44     $date=date('dS \of F Y ');
45     $fname = tempnam("/tmp", "demo.xls");
47     /* Create xls workbench */
48     $workbook= new writeexcel_workbook($fname);
50     /* Create some styles to generate xls */
51     $title_title= $workbook->addformat(array(
52           bold    => 1,
53           color   => 'green',
54           size    => 11,
55           underline => 2,
56           font    => 'Helvetica'
57           ));
59     $title_bold= $workbook->addformat(array(
60           bold    => 1,
61           color   => 'black',
62           size    => 10,
63           font    => 'Helvetica'
64           ));
66     # Create a format for the phone numbers
67     $f_phone = $workbook->addformat();
68     $f_phone->set_align('left');
69     $f_phone->set_num_format('\0#');
72     /* If the switch reaches default (it should not), 
73         this will be set to false, so nothig will be created ... */
74     $save = true;
76     /* Check which type of data was requested */
77     switch ($d){
80       /* PEOPLE 
81           Get all peoples from this $dn 
82           and put them into the xls work sheet */
83       case "ou=people," : 
85         $user    =  $ldap->gen_xls($dn,"(objectClass=*)",array("uid","dateOfBirth","gender","givenName","preferredLanguage"));
86         $intitul =  array(_("Birthday").":", _("Sex").":", _("Surname")."/"._("Given name").":",_("Language").":");
88         // name of the xls file
89         $name_section = _("Users");
90         $worksheet    = $workbook->addworksheet(_("Users"));
91         $worksheet->set_column('A:B', 51);
93         $user_nbr =  count($user);
94         $worksheet->write('A1',sprintf(_("User list of %s on %s"),$n,$date),$title_title);
95         $r=3;
96         for($i=1;$i<$user_nbr;$i++)
97         {
98           if($i>1)
99             $worksheet->write('A'.$r++,"");
100           $worksheet->write('A'.$r++,_("User ID").": ".$user[$i][0],$title_bold);
102           for($j=1;$j<5;$j++)
103           {
104             $r++;
105             $worksheet->write('A'.$r,$intitul[$j-1]);
106             $user[$i][$j]=utf8_decode ($user[$i][$j]);
107             $worksheet->write('B'.$r,$user[$i][$j]);
108           }
109           $worksheet->write('A'.$r++,"");
110         }
111       break;
114       /* GROUPS 
115           Get all groups from th $dn 
116           and put them into the xls work sheet */
117       case "ou=groups,": 
119         /* Get group data */
120         $groups    = $ldap->gen_xls($dn,"(objectClass=*)",array("cn","memberUid"),TRUE,1);
121         $intitul   = array(_("Members").":");
123         //name of the xls file
124         $name_section=_("Groups");
126         $worksheet = $workbook->addworksheet(_("Groups"));
127         $worksheet->set_column('A:B', 51);
129         //count number of groups
130         $groups_nbr=count($groups);
131         $worksheet->write('A1', sprintf(_("Groups of %s on %s"), $n, $date),$title_title);
132         $r=3;
133         for($i=1;$i<$groups_nbr;$i++)
134         {
135           $worksheet->write('A'.$r++,_("User ID").": ".$groups[$i][0][0],$title_bold);
136           for($j=1;$j<=2;$j++)
137           {
138             $r++;
139             $worksheet->write('A'.$r,$intitul[$j-1]);
140             for($k=0;$k<= $groups[$i][$j]['count'];$k++)
141             {
142               $worksheet->write('B'.$r,$groups[$i][$j][$k]);
143               $r++;
144             }
145           }
146         }
147      break;
150      /* SYSTEMS 
151         Get all systems from th $dn
152         and put them into the xls work sheet */
153      case "ou=systems,": 
155        $name_section=_("Servers");
156        $computers= $ldap->gen_xls($dn,"(&(objectClass=*)(cn=*))",array("cn","description","uid"));
158        $intitul=array(_("Description").":",_("User ID").":");
159        $worksheet = $workbook->addworksheet(_("Computers"));
160        $worksheet->set_column('A:B', 32);
162        //count number of computers
163        $computers_nbr=count($computers);
164        $r=1;
165        for($i=1;$i<$computers_nbr;$i++)
166        {
167          if($i>1)
168            $worksheet->write('A'.$r++,"");
169          $worksheet->write('A'.$r++,_("Common name").": ".$computers[$i][0],$title_bold);
170          for($j=1;$j<3;$j++)
171          {
172            $r++;
173            $worksheet->write('A'.$r,$intitul[$j-1]);
174            $computers[$i][$j]=utf8_decode ($computers[$i][$j]);
175            $worksheet->write('B'.$r,$computers[$i][$j]);
176          }
177          $worksheet->write('A'.$r++,"");
178        }
179     break;
181      /* SYSTEMS 
182        Get all systems from th $dn
183        and put them into the xls work sheet */
184      case "ou=servers,ou=systems,": $servers= $ldap->gen_xls($dn,"(objectClass=*)",array("cn"));
185        $intitul=array(_("Server name").":");
187        //name of the xls file
188        $name_section=_("Servers");
190        $worksheet = $workbook->addworksheet(_("Servers"));
191        $worksheet->set_column('A:B', 51);
193        //count number of servers
194        $servers_nbr=count($servers);
195        $worksheet->write('A1',sprintf(_("Servers of %s on %s"), $n, $date),$title_title);
196        $r=3;
197        $worksheet->write('A'.$r++,_("Servers").": ",$title_bold);
198        for($i=1;$i<$servers_nbr;$i++)
199        {
200          for($j=0;$j<1;$j++)
201          {
202            $r++;
203            $worksheet->write('A'.$r,$intitul[$j]);
204            $servers[$i][$j]=utf8_decode ($servers[$i][$j]);
205            $worksheet->write('B'.$r,$servers[$i][$j]);
206          }
207        }
208      break;
210      case "dc=addressbook,": //data about addressbook
212        /* ADDRESSBOOK 
213         Get all addressbook entries from  $dn
214          and put them into the xls work sheet */
216        $address= $ldap->gen_xls($dn,"(objectClass=*)",
217                     array("cn","displayName","facsimileTelephoneNumber","givenName",
218                           "homePhone","homePostalAddress","initials","l","mail","mobile",
219                           "o","ou","pager","telephoneNumber","postalAddress",
220                           "postalCode","sn","st","title"));
222        $intitul=  array(_("Common name").":",_("Display name").":",_("Fax").":",
223                         _("Name")."/"._("Given name").":",_("Home phone").":",
224                         _("Home postal address").":",_("Initials").":",_("Location").":",
225                         _("Mail address").":",_("Mobile phone").":",_("City").":",
226                         _("Postal address").":",_("Pager").":",_("Phone number").":",
227                         _("Address").":",_("Postal code").":",_("Surname").":",
228                         _("State").":",_("Function").":");
230        //name of the xls file
231        $name_section=_("Adressbook");
233        $worksheet = $workbook->addworksheet(_("Servers"));
234        $worksheet->set_column('A:B', 51);
236        //count number of entries
237        $address_nbr=count($address);
238        $worksheet->write('A1',sprintf(_("Adressbook of %s on %s"),$n, $date),$title_title);
239        $r=3;
240        for($i=1;$i<$address_nbr;$i++)
241        {
242          if($i>1)
243            $worksheet->write('A'.$r++,"");
244          $worksheet->write('A'.$r++,_("Common Name").": ".$address[$i][0],$title_bold);
245          for($j=1;$j<19;$j++)
246          {
247            $r++;
248            $worksheet->write('A'.$r,$intitul[$j]);
249            $address[$i][$j]=utf8_decode ($address[$i][$j]);
250            $worksheet->write('B'.$r,$address[$i][$j],$f_phone);
251          }
252          $worksheet->write('A'.$r++,"");
253        }
255      break;
256      default:
258         $save = false; 
259         echo "Specified parameter '".$d."' was not found in switch-case.";
260    }
262    if($save){
263      $workbook->close();
264    }
266    // We'll be outputting a xls
267    header('Content-type: application/x-msexcel');
269    // It will be called demo.xls
270    header('Content-Disposition: attachment; filename=xls_export_'.$name_section.".xls");
272    // The source is in original.xls
273    readfile($fname);
274    unlink ($fname);
275   }
276   elseif($mode == 3){ // Full Export !
277     $dn =  base64_decode($_GET['dn']);
279     //data about users
280     $user= $ldap->gen_xls("ou=people,".$dn,"(objectClass=*)",array("uid","dateOfBirth","gender","givenName","preferredLanguage"));
281     $user_intitul=array(_("Day of birth").":",_("Sex").":",_("Surname")."/"._("Given name").":",_("Language").":");
282     //data about groups
283     $groups= $ldap->gen_xls("ou=groups,".$dn,"(objectClass=*)",array("cn","memberUid"),TRUE,1);
284     $groups_intitul=array(_("Members").":");
285     //data about computers
286     $computers= $ldap->gen_xls("ou=computers,".$dn,"(objectClass=*)",array("cn","description","uid"));
287     $computers_intitul=array(_("Description").":",_("UID").":");
288     //data about servers
289     $servers= $ldap->gen_xls("ou=servers,ou=systems,".$dn,"(objectClass=*)",array("cn"));
290     $servers_intitul=array(_("Name").":");
291     //data about addressbook
292     $address= $ldap->gen_xls("dc=addressbook,".$dn,"(objectClass=*)",
293           array("cn","displayName","facsimileTelephoneNumber","givenName","homePhone","homePostalAddress",
294                 "initials","l","mail","mobile","o","ou","pager","telephoneNumber","postalAddress",
295                 "postalCode","sn","st","title"));
296     $address_intitul=
297           array("cn",_("Display name").":",_("Fax").":",_("Surname")."/"._("Given name").":",
298                 _("Phone number").":",_("Postal address").":",_("Initials").":",_("City").":",
299                 _("Email address").":",_("Mobile").":",_("Organization").":",_("Organizational unit").":",
300                 _("Pager").":",_("Phone number").":",_("Postal address").":",_("Postal Code").":",
301                 _("Surename").":",_("State").":",_("Title").":");
303     //name of the xls file
304     $name_section=_("Full");
305     $date=date('dS \of F Y ');
306     $fname = tempnam("/tmp", "demo.xls");
307     $workbook =  new writeexcel_workbook($fname);
308     $worksheet = $workbook->addworksheet(_("Users"));
309     $worksheet2 = $workbook->addworksheet(_("Groups"));
310     $worksheet3 = $workbook->addworksheet(_("Servers"));
311     $worksheet4 =$workbook->addworksheet(_("Computers"));
312     $worksheet5 = $workbook->addworksheet(_("Adressbook"));
314     $worksheet->set_column('A:B', 51);
315     $worksheet2->set_column('A:B', 51);
316     $worksheet3->set_column('A:B', 51);
317     $worksheet4->set_column('A:B', 51);
318     $worksheet5->set_column('A:B', 51);
320     $title_title= $workbook->addformat(array(
321           bold    => 1,
322           color   => 'green',
323           size    => 11,
324           font    => 'Helvetica'
325           ));
327     $title_bold = $workbook->addformat(array(
328           bold    => 1,
329           color   => 'black',
330           size    => 10,
331           font    => 'Helvetica'
332           ));
334 # Create a format for the phone numbers
335     $f_phone = $workbook->addformat();
336     $f_phone->set_align('left');
337     $f_phone->set_num_format('\0#');
339     //count number of users
340     $user_nbr=count($user);
341     $worksheet->write('A1',sprintf(_("User List of %s on %s"), $dn, $date),$title_title);
342     $r=3;
343     for($i=1;$i<$user_nbr;$i++)
344     {
345       if($i>1)
346         $worksheet->write('A'.$r++,"");
347       $worksheet->write('A'.$r++,_("User ID").": ".$user[$i][0],$title_bold);
348       for($j=1;$j<5;$j++)
349       {
350         $r++;
351         $worksheet->write('A'.$r,$user_intitul[$j-1]);
352         $user[$i][$j]=utf8_decode ($user[$i][$j]);
353         $worksheet->write('B'.$r,$user[$i][$j]);
354       }
355       $worksheet->write('A'.$r++,"");
356     }
358     //count number of groups
359     $groups_nbr=count($groups);
360     $worksheet2->write('A1',sprintf(_("Groups of %s on %s"), $dn, $date),$title_title);
361     $r=3;
362     for($i=1;$i<$groups_nbr;$i++)
363     {
364       $worksheet2->write('A'.$r++,_("User ID").": ".$groups[$i][0][0],$title_bold);
365       for($j=1;$j<=2;$j++)
366       {
367         $r++;
368         $worksheet2->write('A'.$r,$group_intitul[$j-1]);
369         for($k=0;$k<= $groups[$i][$j]['count'];$k++)
370         {
371           $worksheet2->write('B'.$r,$groups[$i][$j][$k]);
372           $r++;
373         }
374       }
375     }
377     //count number of servers
378     $servers_nbr=count($servers);
379     $worksheet3->write('A1',sprintf(_("Servers of %s on %s"),$dn,$date),$title_title);
380     $r=3;
381     $worksheet3->write('A'.$r++,_("Servers").": ",$title_bold);
382     for($i=1;$i<$servers_nbr;$i++)
383     {
384       for($j=0;$j<1;$j++)
385       {
386         $r++;
387         $worksheet3->write('A'.$r,$servers_intitul[$j]);
388         $servers[$i][$j]=utf8_decode ($servers[$i][$j]);
389         $worksheet3->write('B'.$r,$servers[$i][$j]);
390       }
391     }
393     //count number of computers
394     $computers_nbr=count($computers);
395     $worksheet4->write('A1',sprintf(_("Computers of %s on %s"),$dn,$date),$title_title);
396     $r=3;
397     for($i=1;$i<$computers_nbr;$i++)
398     {
399       if($i>1)
400         $worksheet->write('A'.$r++,"");
401       $worksheet4->write('A'.$r++,_("Common name").": ".$computers[$i][0],$title_bold);
402       for($j=1;$j<3;$j++)
403       {
404         $r++;
405         $worksheet4->write('A'.$r,$computers_intitul[$j-1]);
406         $computers[$i][$j]=utf8_decode ($computers[$i][$j]);
407         $worksheet4->write('B'.$r,$computers[$i][$j]);
408       }
409       $worksheet4->write('A'.$r++,"");
410     }
412     //count number of entries
413     $address_nbr=count($address);
414     $worksheet5->write('A1',sprintf(_("Adressbook of %s on %s"),$dn, $date),$title_title);
416     $r=3;
417     for($i=1;$i<$address_nbr;$i++)
418     {
419       if($i>1)
420         $worksheet5->write('A'.$r++,"");
421       $worksheet5->write('A'.$r++,_("Common name").": ".$address[$i][0],$title_bold);
422       for($j=1;$j<19;$j++)
423       {
424         $r++;
425         $worksheet5->write('A'.$r,$address_intitul[$j]);
426         $address[$i][$j]=utf8_decode ($address[$i][$j]);
427         $worksheet5->write('B'.$r,$address[$i][$j],$f_phone);
428       }
429       $worksheet5->write('A'.$r++,"");
430     }
431     $workbook->close();
434     // We'll be outputting a xls
435     header('Content-type: application/x-msexcel');
437     // It will be called demo.xls
438     header('Content-Disposition: attachment; filename='.$name_section.".xls");
440     readfile($fname);
442     unlink ($fname);
443   }
444   elseif($mode == 4){ // IVBB LDIF Export
445     $dn =  base64_decode($_GET['dn']);
446     /*$display= $ldap->gen_ldif($dn,"(objectClass=ivbbentry)",array(
447       "GouvernmentOrganizationalUnit","houseIdentifier","vocation",
448       "ivbbLastDeliveryCollective","gouvernmentOrganizationalPersonLocality",
449       "gouvernmentOrganizationalUnitDescription","gouvernmentOrganizationalUnitSubjectArea",
450       "functionalTitle","role","certificateSerialNumber","userCertificate","publicVisible",
451       "telephoneNumber","seeAlso","description","title","x121Address","registeredAddress",
452       "destinationIndicator","preferredDeliveryMethod","telexNumber","teletexTerminalIdentifier",
453       "telephoneNumber","internationaliSDNNumber","facsimileTelephoneNumber","street",
454       "postOfficeBox","postalCode","postalAddress","physicalDeliveryOfficeName","ou",
455       "st","l","audio","businessCategory","carLicense","departmentNumber","displayName",
456       "employeeNumber","employeeType","givenName","homePhone","homePostalAddress",
457       "initials","jpegPhoto","labeledURI","mail","manager","mobile","o","pager","photo",
458       "roomNumber","secretary","userCertificate","x500uniqueIdentifier","preferredLanguage",
459       "userSMIMECertificate","userPKCS12"));*/
461     echo $display;
462   }
466 /* Basic setup, remove eventually registered sessions */
467 @require_once ("../include/php_setup.inc");
468 @require_once ("functions.inc");
469 session_start ();
471 /* Logged in? Simple security check */
472 if (!isset($_SESSION['ui'])){
473   gosa_log ("Error: getxls.php called without session");
474   header ("Location: index.php");
475   exit;
477 $ui     = $_SESSION["ui"];
478 $config = $_SESSION['config'];
481 /* Check ACL's */
482 $dn ="";
483 if(isset($_GET['n'])){
484   $dn =  base64_decode($_GET['n']);
485 }elseif(isset($_GET['dn'])){
486   $dn =  base64_decode($_GET['dn']);
488 $acl = $ui->get_permissions($dn,"ldapmanager/xlsexport");
489 if(!preg_match("/r/",$acl)){
490   echo "insufficient permissions";
491   exit();
494 header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
495 header("Last-Modified: ".gmdate("D, d M Y H:i:s")." GMT");
496 header("Cache-Control: no-cache");
497 header("Pragma: no-cache");
498 header("Cache-Control: post-check=0, pre-check=0");
500 header("Content-type: text/plain");
502 switch ($_GET['ivbb']){
503   case 2: dump_ldap (2);
504           break;
506   case 3: dump_ldap (3);
507           break;
509   case 4: dump_ldap (4);
510           break;
512   default:
513           echo "Error in ivbb parameter. Request aborted.";
515 // vim:tabstop=2:expandtab:shiftwidth=2:filetype=php:syntax:ruler:
516 ?>