Ndodhi që një kompani (relativisht) e madhe kishte shumë zyra të largëta, ku ishte një numër i konsiderueshëm përdoruesish. Të gjitha zyrat ishin të lidhura në një rrjet me një domen të përbashkët, çdo zyrë ishte përcaktuar në Active Directory (në tekstin më poshtë AD) si Njësi Organizative (OU), në të cilën ishin krijuar tashmë përdoruesit.
Ishte e nevojshme t'u jepnim përdoruesve mundësinë për të marrë shpejt dhe pa shumë përpjekje të dhënat kontaktuese të punonjësit të nevojshëm nga AD, dhe të liroheshin administratorët sistemik nga rutina e redaktimit të skedarit tekstual, i cili luante rolin e një libri adresash.
Nuk u gjetën mundësi të gatshme për të zgjidhur detyrën e caktuar, kështu që duhej ta bënim gjithçka me duar dhe mendje.
TĂ« fillojmĂ« me faktin se, pĂ«r tĂ« filluar, duhet tĂ« vendosim se çfarĂ« tĂ« pĂ«rdorim, kjo Ă«shtĂ« e thjeshtĂ« â pĂ«rmbledhja pĂ«rfundimtare duhet tĂ« jetĂ« e aksesueshme pĂ«r tĂ« gjithĂ« pĂ«rdoruesit e domenit pĂ«rmes njĂ« shfletuesi. E para qĂ« mĂ« vjen nĂ« mendje Ă«shtĂ« PHP nĂ« kombinim me ldap, dhe do t'i pĂ«rdorim ato. NjĂ« pĂ«rfitim i madh i pĂ«rdorimit tĂ« PHP Ă«shtĂ« thjeshtĂ«sia e tij relative â çdo administrator sistemik qĂ« kupton pak mund tĂ« bĂ«jĂ«, nĂ«se Ă«shtĂ« e nevojshme, tĂ« nevojshmet ndryshime nĂ« kod, pa u lodhur shumĂ«.
Pra, le të fillojmë. Së pari, do të vendosim parametrat e lidhjes me domenin:
$srv ="SERVER";
$srv_domain ="DOMAIN.COM";
$srv_login ="USERNAME@".$srv_domain;
$srv_password ="PASSWORD";
Hapi tjetĂ«r Ă«shtĂ« tĂ« pĂ«rcaktojmĂ« se nĂ« cilin OU do tĂ« kĂ«rkojmĂ« pĂ«rdoruesit. Kjo do ta bĂ«jmĂ« duke kapur vlerat nga $_GET[âplaceâ]. PĂ«r shembull, nĂ«se pĂ«rdoruesi kalon nĂ« adresĂ«n first, atĂ«herĂ« variabli $place do t'i japĂ« vlerĂ«n 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;
// këtu mund të shtoni kushtet e tjera.
default:
$doscript=false;
break;
}
if (!$doscript) include "main_table.html";
Variabli $doscript nevojitet pĂ«r tĂ« ruajtur vlerĂ«n â nĂ«se kemi pĂ«rcaktuar OU-nĂ« nĂ« tĂ« cilĂ«n do tĂ« kĂ«rkojmĂ« pĂ«rdoruesit apo jo. NĂ«se nuk u gjetĂ«n pĂ«rputhje, tĂ« listuara nĂ« «switch-case», atĂ«herĂ« $doscript=false, pjesa kryesore e skenarit nuk do tĂ« ekzekutohet dhe do tĂ« dalĂ« faqja fillestare «main_table.html» (pĂ«r tĂ« cilĂ«n do tĂ« flas nĂ« fund).
Nëse e kemi përcaktuar OU-në, atëherë vazhdojmë me veprime të mëtejshme: fillojmë të përgatisim faqen e udhëzuesit për përdoruesin:
nëse përndryshe ($doscript) {
{echo "
<!DOCTYPE html>
<html xmlns='http://www.w3.org/1999/xhtml'>
<head>
<link rel='shortcut icon' href='ico.png'>
<meta charset='windows-1251/ '>
Aktivizojmë stilin për një pamje më të këndshme (po, mund të ishin lidhur si një skedar css, megjithatë disa versione të IE nuk pranojnë stilet e caktuara kështu, prandaj duhet t'i shkruajmë direkt në skrypt):
*{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;}
#table tbody tr:nth-child(odd){background: #fff;}
#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;}
Stilet janë përfunduar, tani shkruajmë titullin e tab-it dhe vizatojmë një lidhje të përshtatshme për kthimin në faqen kryesore:
<title>Libri i adresave të «YourMegaCompanyName»</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>Kryesorja</p></a>
</td></tr></table>
";
Përcaktojmë filtrat e kërkimit sipas AD, dhe marrim të dhënat mbi OU:
$filter ="(&(objectcategory=user)(!(userAccountControl:1.2.840.113556.1.4.803:=2)))";
$filter2 ="(objectCategory=OrganizationalUnit)";
$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]; // emri i vendit
$PlaceAddres = $placeinfo[0]["street"][0]; // adresa e vendit
$PlaceMail = $placeinfo[0]["description"][0]; // posta e vendit
$PlacePhone = $placeinfo[0]["st"][0]; // telefoni i vendit
Për më tepër, formojmë pjesën e sipërme të faqes:
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"> Emri </td>
<td width='250' bgcolor = "#f0f0e4"> E-mail </td>
<td width='60' bgcolor = "#f0f0e4"> Phone </td>
<td width='150' bgcolor = "#f0f0e4"> Mobile </td></tr>
<tr><td></td><td> Të dhënat OU </td><td>";
echo "<div class='transition-rotate'><a href="mailto:"" . $placemail .">" . $PlaceMail ." </a></div>";
echo "</td><td width='150'> " . $PlacePhone ." </td><td> - </td></tr>";
Më pas marrim në cikël dhe përpunojmë të dhënat e përdoruesve, duke fshehur disa (p.sh. llogaritë shërbyese) duke vendosur "hide" në fushën "dhoma" në të dhënat e përdoruesit në AD, këta përdorues nuk do të shfaqen në katalog:
for ($i=0; $i<$info["count"];$i++) {
$UserHide = $info[$i]["physicaldeliveryofficename"][0];
if ($UserHide != 'hide') {
$UserName = $info[$i]["cn"][0]; // Emri i përdoruesit
$UserPosition = $info[$i]["title"][0]; // Pozita
$UserMail = $info[$i]["mail"][0]; //mail
if (!$UserMail)) $UserMail = "-"; // nëse nuk ka të dhëna për kutinë në AD, tregojmë një presje
$UserIpPhone = $info[$i]["ipphone"][0]; // telefoni ip
if (!$UserIpPhone) $UserIpPhone = "-"; // nëse nuk ka të dhëna për kutinë në AD, tregojmë një presje
$UserMobile = $info[$i]["mobile"][0]; //mobile
if (!$UserMobile) $UserMobile = "-"; // nëse nuk ka të dhëna për kutinë në AD, tregojmë një presje
Nga ana tjetër, nëse ju nevojitet të merrni vlerën e një atribut tjetër, mbani mend (është e rëndësishme):
në kërkesë dorëzojmë emrin e atributit me letra të vogla, përndryshe nuk do të funksionojë.
Dhe ngjisim të dhënat e marra në tabelë:
echo "<tr>
<td>". $n+=1 ."</td>
<td> ". $UserName ."<br> <div class='smalltext'>". $UserPosition ."</div></td><td>"; // Emri i përdoruesit dhe pozita
if ($UserMail !='-') echo "<div class='transition-rotate'><a href="mailto:'$UserMail'">$UserMail </a></div>"; // nëse përdoruesi ka e-mail krijojmë një lidhje për dërgimin e postës
else echo "-"; //nëse nuk ka e-mail, vendosim një minus.
echo "<td> ". $UserIpPhone ." </td>
<td> ". $UserMobile ." </td></tr>";
}
}
echo "</table>";
Më pas mbyllim lidhjen në ldap, ose nxjerrim një mesazh për pamundësinë e lidhjes me serverin:
ldap_close($ds);
}
else echo "<h4>Nuk mund të lidhem me serverin LDAP</h4>";
echo '<br><br><br></body></html>';}
Dosja "main_table.html" përbrenda përfaqëson një faqe html të thjeshtë me lidhje, dhe duket përafërsisht kështu:
<head>
<link rel="shortcut icon" href="ico.png"/>
<meta charset="windows-1251"/>
<title>Libri i adresave të «YourMegaCompanyName»</title>
</head>
<body style='background-color:#ffffff;'>
<center><a href="index.php"><img border="none" src="logo.png"/></a></center>
<center><b>Vendet dhe zyrat</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>
NĂ«se dikujt i ndihmon kodi im â do tĂ« jem i lumtur, pĂ«rdorni!
Po ashtu mund ta redaktoni lirisht si të dëshironi (përmirësoni/dëshpëroni) dhe ta shpërndani me çdo metodë.
Faleminderit për vëmendjen!
Burimi: habr.com
