Menu Chiudi

Pillola #51: Stampa di un elenco telefonico estraendo i dati da Active Directory

Il seguente codice potrà esservi utile per creare una veloce rubrica telefonica estraendo i dati direttamente da Active Directory così da non dover mantenere 2 database separati.

Requisiti:

  • Apache2;
  • PHP;
  • modulo php ldap;

Codice PHP:


<?php

/*

Rubrica da Active Directory

Questa semplice pagina PHP ha lo scopo di fare un browse in una struttura LDAP, e leggere determinati campi secondo i filtri.
In questo caso specifico vengono eseguite 2 query secondo 2 diversi criteri di ricerca, il primo sfoglia tra gli oggetti “user”
mentre il secondo tra gli oggetti “contact” di Active Directory; entrambi esportano i contatti che hanno un riferimento
telefonico

*/

// ############## CONFIG ##################

$ldap_server = “ldap://10.0.0.1”;            //    ldap://IP:porta del server LDAP
$ldap_auth_user = “utente”;                //    utente con permessi di browsing LDAP
$ldap_auth_pass = “password”;        //    password utente
$base_dn = “OU=gruppo,DC=example,DC=local”;                  //      base dn da cui fare il browse

// filtro query ldap ricerca oggetti user non disabilitati aventi numero di telefono fisso o mobile presente e titolo o ufficio presente
$filter_users = “(&   (objectClass=user) (!(userAccountControl:1.2.840.113556.1.4.803:=2))  (|(mobile=*)(telephoneNumber=*))    (|(title=*)(physicalDeliveryOfficeName=*))  )”;
// filtro query ldap ricerca oggetti contact non disabilitati aventi numero di telefono fisso o mobile presente
$filter_contacts = “(&   (objectClass=contact) (!(userAccountControl:1.2.840.113556.1.4.803:=2)) (|(mobile=*)(telephoneNumber=*))   )”;

//  ##################### ENGINE ###################

// connessione al server
if (!($ldap_connect=@ldap_connect($ldap_server))) {     die(“Could not connect to ldap server”); }

// bind verso il server con autenticazione
if (!($bind=@ldap_bind($ldap_connect, $ldap_auth_user, $ldap_auth_pass))) {  die(“Unable to bind to server”); }

// query in AD con filtro user ed ordinamento per displayname
if (!($search_users=@ldap_search($ldap_connect, $base_dn, $filter_users ))) {   die(“Unable to search ldap server”); }
ldap_sort($ldap_connect, $search_users, “displayname”);
$ldap_results[“Rubrica numeri interni/esterni”] = ldap_get_entries($ldap_connect, $search_users);

// query in AD con filtro contact ed ordinamento per displayname
if (!($search_contacts=@ldap_search($ldap_connect, $base_dn, $filter_contacts ))) {   die(“Unable to search ldap server”); }
ldap_sort($ldap_connect, $search_contacts, “displayname”);
$ldap_results[“Altri contatti utili”] = ldap_get_entries($ldap_connect, $search_contacts);

// ###################### TEMPLATE ####################################

?>
<!DOCTYPE HTML PUBLIC “-//W3C//DTD HTML 4.01//EN” “http://www.w3.org/TR/html4/strict.dtd”>

<html>
<head>
<title>Rubrica numeri interni/esterni</title>
<style type=”text/css” media=”all”>@import url(“style.css”);</style>
<link rel=”shortcut icon” href=”favicon.ico” type=”image/x-icon” />
</head>
<body>

<?
foreach ($ldap_results as $result_type => $result) {
?>

<table>
<thead>
<tr class=”table_title”><th colspan=”6″><h2><? echo $result_type;  ?></h2></th></tr>
<tr>
<th>Nome</th>
<th>Ruolo</th>
<th>Telefono (uff).</th>
<th>Cellulare</th>
<th>Societa'</th>
</tr>
</thead>

<tbody>
<?

for ($i=0; $i<$result[“count”]; $i++) {

if ($i % 2 == 0) $oddeven = “even”; else $oddeven = “odd”;        // highlight alternato righe

echo “\n  <tr class=”.    $oddeven                                    .”>\n”;
echo ”    <td nowrap>”.     $result[$i][“displayname”][0]                            .”</td>\n”;
echo ”    <td>”.         $result[$i][“title”][0]. ” ” . $result[$i][“physicaldeliveryofficename”][0]    .”</td>\n”;
echo ”    <td nowrap>”.     $result[$i][“telephonenumber”][0]                        .”</td>\n”;
echo ”    <td nowrap>”.     $result[$i][“mobile”][0]                            .”</td>\n”;
echo ”    <td>”.         $result[$i][“company”][0]                            .”</td>\n”;
echo ”  </tr>\n”;
}

?>
</tbody>
</table>
<br />
<?

}

?>
</body>
</html>


 

Codice CSS


body {
font-family: “Arial”;
background-color: #ddd;
}

th, td {
border: 1px #ccc solid;
padding: 5px;
font-size: 0.7em;
}

table {
width:100%;
border-spacing:0;
border-collapse:collapse;
}

thead {
font-weight: strong;
background-color:lightcyan;
}

tr.table_title {
background-color: lightblue;
}

tr.odd {
background-color: #eee;
}

tr.even {
background-color: #fff;
}

 


WordPress Appliance - Powered by TurnKey Linux