Juhtus nii, et (suhteliselt) suurel ettevĂ”ttel oli palju kauoffice, kus viibis piisav arv kasutajaid. KĂ”ik kontorid on ĂŒhendatud ĂŒhte vĂ”rku koos ĂŒhise domeeniga, iga kontor on Active Directorys (edaspidi AD) mÀÀratletud kui Organisatsiooniline Ăksus (OU), kus juba registreeriti kasutajad.
Kasutajatele pidi olema vĂ”imalik kiiresti ja vaevata saada vajaliku töötaja kontaktandmeid AD-st, samas kui sĂŒsteemiadministraatoreid tuli vabastada rutiinsest tekstifaili muutmisest, mis toimis aadressiraamatuna.
Sobivaid lahendusi seatud ĂŒlesande tĂ€itmiseks ei leidunud, seega tuli kĂ”ik ise kĂ€te ja peaga Ă€ra teha.
Alustame sellest, et peame esmalt kindlaks mÀÀrama, mida kasutada; see on lihtne â lĂ”plik register peab olema kĂ”igile domeeni kasutajatele brauseri kaudu ligipÀÀsetav. Esimene asi, mis pĂ€he tuleb, on PHP koos ldap-iga, neid me ka kasutame. PHP kasutamise suur pluss on minu arvates selle suhteline lihtsus â iga vĂ€heke osav sĂŒsteemiadministraator suudab vajadusel koodi parandusi teha, mitte liiga palju pingutamata.
Nii et, alustame. Esmalt mÀÀrame domeeniga ĂŒhenduseparameetrid:
$srv ="SERVER";
$srv_domain ="DOMAIN.COM";
$srv_login ="USERNAME@".$srv_domain;
$srv_password ="PASSWORD";
JĂ€rgmiseks peame mÀÀrama, millises OU-s me kasutajaid otsime. Teeme seda, pĂŒĂŒdes vÀÀrtusi $_GET[âplaceâ] kaudu. NĂ€iteks, kui kasutaja liigub aadressile first, siis muutujale $place antakse vÀÀrtus first.
$place = (@$_GET['place']);
$doscript=true;
switch($place){
case "first" :
$dn ="OU=ou1,OU=DOMAIN,dc=DOMAIN,dc=COM";
break;
case "second":
$dn ="OU=ou2,OU=DOMAIN,dc=DOMAIN,dc=COM";
break;
//siia vÔib lisada veel tingimusi.
default:
$doscript=false;
break;
}
if (!$doscript) include "main_table.html";
Muutuja $doscript on vajalik vÀÀrtuse hoidmiseks â kas oleme mÀÀratlenud OU, kus hakkame kasutajaid otsima vĂ”i mitte. Kui kirjeid, mida «switch-case» sektsioonis loetletud, ei leidu, siis $doscript=false, peamine skript ei toimu, vaid kuvatakse algne leht «main_table.html» (millest rÀÀgin lĂ”pus).
Kui oleme OU mÀÀratlenud, siis liigume edasi: hakkame kasutajale kataloogeht kujundama:
peale seda kui ($doscript) {
{echo "
<!DOCTYPE html>
<html xmlns='http://www.w3.org/1999/xhtml'>
<head>
<link rel='shortcut icon' href='ico.png'>
<meta charset='windows-1251/ '>
LĂŒlitame sisse stiilid, et vĂ€ljanĂ€gemine oleks meeldivam (jah, neid oleks vĂ”inud ĂŒhendusena css-failina laadida, kuid mĂ”ned IE versioonid ei soovi selliselt mÀÀratud stiliseerimist aktsepteerida, seega tuleb kirjutada otse skripti):
*{text-align: center; font-family:tahoma; font-size:14px;}
a{text-decoration: none; color: #000;}
a:hover{text-decoration: underline; color: #0059FF;}
#bold{text-decoration: none; font-weight: 600;font-size:20px;}
#table,tr,td{border-style:solid;border-width:1px; border-collapse:collapse;padding:5px; height:22px;border-color:#7d7d7d;}
/* Aknad tĂŒhjad read */#table tbody tr:nth-child(odd){background: #fff;}
/* Paarisread */ #table tbody tr:nth-child(even){background: #F7F7F7;}
#noborder{border-width: 0 px; border-style: none;}
#sp30px{text-indent: 30px;text-align: justify;}
#smallsize{font-family:tahoma; text-indent: 5px; text-align:left; font-size:12px;}
#top {background: #ffffff;
text-align: center;
left:0;
top:0px;
table-layout: fixed;
border-style:solid;
border-width:0px;
border-collapse:collapse;
padding:0px;
height:22px;
border: 0px;
z-index: 99999;
display:block;
width:80px;
opacity: 0.6;
filter: alpha(Opacity=60);
height:100%;
position:fixed;}
#top:hover{background: #afafaf;opacity: 100;filter: alpha(Opacity=100);text-decoration: none;color: #000000;}
.smalltext{padding-top: 1px;
padding-bottom: 1px;
text-align: bottom;
font-family:tahoma;
color: #a0a0a0;
line-height: 7px;
font-size: 10px;}
.smalltext:hover{color: #0000ff;}
.transition-rotate {position: relative;
z-index: 2;
margin: 0 auto;
padding: 5px;
text-align: center;
max-width: 500px;
cursor: pointer;
transition: 0.1s linear;}
.transition-rotate:hover {-webkit-transform: rotate(-2deg); transform: rotate(-2deg);}
#lineheight{
text-align: left;
line-height: 1px;
text-decoration: none;
font-weight: 600;
font-size:20px;}
Stiilidega on ĂŒhel pool, nĂŒĂŒd kirjutame vahelehe pealkirja ja loome mugava lingi algusesse naasmiseks:
<title>«YourMegaCompanyName» aadressiraamat</title>
</head>
<body style='background-color:#ffffff;'>";
}
echo "
<table id='top'><tr><td id='top'>
<a href='index.php?place=main' id='top' >
<br><br><br>
<img src='back_to_main.png' alt='' border='0' width='75' height='60'/>
<p>Avaleht</p></a>
</td></tr></table>
";
MÀÀrame otsingufiltrid AD-s ja saame teavet OU kohta:
$filter ="(&(objectcategory=user)(!(userAccountControl:1.2.840.113556.1.4.803:=2)))"; // kÔik kasutajad, vÀlja arvatud keelatud.
$filter2 ="(objectCategory=OrganizationalUnit)"; // OU teabe saamiseks
$ds=ldap_connect($srv);
if ($ds) {
$r=ldap_bind($ds,$srv_login,$srv_password);;
ldap_set_option($ds,LDAP_OPT_REFERRALS, 0);
ldap_set_option($ds,LDAP_OPT_PROTOCOL_VERSION,3);
$sr=ldap_search($ds,$dn ,$filter );
ldap_sort($ds,$sr, "givenname");
$info = ldap_get_entries($ds, $sr);
$sr2=ldap_search($ds,$dn ,$filter2 );
$placeinfo = ldap_get_entries($ds, $sr2);
$PlaceName = $placeinfo[0]["l"][0]; // koha nimi
$PlaceAddres = $placeinfo[0]["street"][0]; // koha aadress
$PlaceMail = $placeinfo[0]["description"][0]; // koha e-post
$PlacePhone = $placeinfo[0]["st"][0]; // koha telefon
SeejĂ€rel kujundame lehe ĂŒlemise osa:
echo"<table align='center' height = '80'>
<td id='noborder' ><div id='lineheight'>". $PlaceName ."</div></td></tr>
<tr><td id='noborder' >". $PlaceAddres ."</td></tr>
</table>
<table align='center' id='table'>
<tr><td width='35' bgcolor = "#f0f0e4"> â </td>
<td width='300' bgcolor = "#f0f0e4"> Nimi </td>
<td width='250' bgcolor = "#f0f0e4"> E-post </td>
<td width='60' bgcolor = "#f0f0e4"> Telefon </td>
<td width='150' bgcolor = "#f0f0e4"> Mobiilne </td></tr>
<tr><td></td><td> OU andmed </td><td>";
echo "<div class='transition-rotate'><a href="mailto:"" . $placemail .">" . $PlaceMail ." </a></div>";
echo "</td><td width='150'> " . $PlacePhone ." </td><td> - </td></tr>";
SeejĂ€rel saame tsĂŒklis ja töötleme kasutajate andmeid, samas, et peita mĂ”ned (nĂ€iteks teenistus) kasutajakontod, kirjutame lihtsalt âhideâ vĂ€lja âruumâ vĂ€lja kasutaja atribuutides AD-s, sellised kasutajad ei kuvatakse kataloogis:
for ($i=0; $i<$info["count"]; $i++) {
$UserHide = $info[$i]["physicaldeliveryofficename"][0];
if ($UserHide != 'hide') {
$UserName = $info[$i]["cn"][0]; //Kasutaja nimi
$UserPosition = $info[$i]["title"][0]; // Amet
$UserMail = $info[$i]["mail"][0]; //mail
if (!$UserMail)) $UserMail = "-"; //kui AD-s pole postkasti, siis nÀitame sidekriipsu
$UserIpPhone = $info[$i]["ipphone"][0]; //ip telefon
if (!$UserIpPhone) $UserIpPhone = "-"; //kui AD-s pole postkasti, siis nÀitame sidekriipsu
$UserMobile = $info[$i]["mobile"][0]; //mobiil
if (!$UserMobile) $UserMobile = "-"; //kui AD-s pole postkasti, siis nÀitame sidekriipsu
Ăksikasjalikult, kui vajate mĂ”ne teise atribuudi vÀÀrtust, pidage meeles (see on oluline):
saame pÀringus edastada atribuudi nime vÀikeste tÀhtedena, vastasel juhul ei tööta.
Ja sisestame saadud andmed tabelisse:
echo "<tr>
<td>". $n+=1 ."</td>
<td> ". $UserName ."<br> <div class='smalltext'>". $UserPosition ."</div></td><td>";
if ($UserMail !='-') echo "<div class='transition-rotate'><a href="mailto:'$UserMail'">$UserMail </a></div>";
else echo "-";
echo "<td> ". $UserIpPhone ." </td>
<td> ". $UserMobile ." </td></tr>";
}
}
echo "</table>";
SeejĂ€rel sulgeme ldap-ĂŒhenduse vĂ”i kuvame sĂ”numi, et serveriga ĂŒhendamine ebaĂ”nnestus:
ldap_close($ds);
}
else echo "<h4>LDAP-serveriga ei saanud ühendust luua</h4>";
echo '<br><br><br></body></html>';}
Fail «main_table.html» esindab seestpoolt lihtsat html lehte, millel on lingid, ja nÀeb vÀlja umbes nii:
<head>
<link rel="shortcut icon" href="ico.png"/>
<meta charset="windows-1251"/>
<title>«YourMegaCompanyName» aadressiraamat</title>
</head>
<body style='background-color:#ffffff;'>
<center><a href="index.php"><img border="none" src="logo.png"/></a></center>
<center><b>Aktiivid ja bürood</b></center>
<br>
<table border="0" width="450" bgcolor="#dddddd" align="center" valign="middle" cellspacing="0">
<tr id="space"><td></td></tr>
<tr><td align="left" id="abz"><a href="index.php?place=ou1">OU1</a></td></tr>
<tr id="space"><td></td></tr>
<tr><td align="left" id="abz"><a href="index.php?place=ou2">OU2</a></td></tr>
</table></body></html>
Kui see kood kellelegi aitab, olen ma rÔÔmus, kasutage seda!
Samuti vÔite seda vabalt redigeerida, nagu soovite (parandada/halvendada) ja levitada kÔigil vÔimalikest viisidel.
AitÀh tÀhelepanu eest!
Allikas: habr.com
