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;
}