Nggawe direktori alamat WEB PHP + LDAP

Kedaden sing kampanye (relatif) gedhe wis akeh kantor remot karo nomer prayoga pangguna. Kabeh kantor disambungake menyang siji jaringan kanthi domain umum, saben kantor ditetepake ing Active Directory (sabanjure diarani AD) minangka Unit Organisasi (OU), ing ngendi pangguna wis digawe.

Sampeyan kudu menehi pangguna kesempatan kanthi cepet lan gampang entuk informasi kontak karyawan sing dibutuhake saka AD, lan pangurus sistem gratis saka rutin nyunting file teks sing dadi buku alamat.

Ora ana pilihan sing cocog kanggo ngrampungake masalah kasebut, mula aku kudu nindakake kabeh nganggo tangan lan sirahku dhewe.

Ayo dadi miwiti karo kasunyatan sing pisanan sampeyan kudu mutusaké apa sing arep digunakake, iku prasaja - direktori final kudu kasedhiya kanggo kabeh pangguna domain liwat browser. Wangsulan: Bab ingkang pisanan sing nerangake atine PHP magepokan karo ldap, lan kita bakal nggunakake. Aku nganggep kauntungan gedhe saka nggunakake PHP minangka gamblang relatif - sembarang administrator sistem malah sethitik pangerten bakal bisa nggawe owahan perlu kanggo kode, yen perlu, tanpa utamané straining.

Dadi, ayo miwiti. Pisanan, ayo nyetel paramèter kanggo nyambung menyang domain:

$srv ="SERVER";
$srv_domain ="DOMAIN.COM";
$srv_login ="USERNAME@".$srv_domain; 
$srv_password ="PASSWORD";

Titik sabanjure yaiku nemtokake OU sing bakal kita telusuri pangguna. Kita bakal nindakake iki kanthi nyegat nilai saka $_GET['panggonan']. Contone, yen pangguna menyang alamat server/index.php?panggonan=pisanan, banjur variabel $panggonan bakal diwenehi nilai pisanan.

$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;
	//здесь можно добавить ещё условий.
default:
	$doscript=false; 
	break;
}
if (!$doscript) include "main_table.html";

Variabel $dokumentasi dibutuhake kanggo nyimpen nilai - apa kita wis nemtokake OU sing bakal digoleki pangguna utawa ora. Yen ora ana sing cocog sing kadhaptar ing "switch-case", banjur $doscript=false, bagean utama script ora bakal dieksekusi, lan kaca wiwitan "main_table.html" bakal ditampilake (Aku bakal pitutur marang kowe bab iku ing pungkasan).

Yen kita wis nemtokake OU, banjur kita nerusake kanggo tumindak luwih: kita miwiti kanggo tarik kaca direktori kanggo pangguna:

else if ($doscript) {
{echo "
<!DOCTYPE html> 
<html xmlns='http://www.w3.org/1999/xhtml'>
<head>
<link rel='shortcut icon' href='ico.png'>
<meta charset='windows-1251/ '>

Kita kalebu gaya kanggo tampilan sing luwih nyenengake (ya, bisa uga kalebu file css, nanging sawetara versi IE ora pengin nampa gaya sing disetel kanthi cara iki, dadi sampeyan kudu nulis langsung menyang skrip):

<style>
	*{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;}
</style>

Kita wis rampung karo gaya, saiki kita nulis judhul tab lan tarik link sing trep kanggo bali menyang kaca utama:

<title>Adressbook of «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>На главную</p></a>
</td></tr></table>
";

Kita nemtokake saringan telusuran miturut AD lan entuk data babagan OU:

$filter ="(&(objectcategory=user)(!(userAccountControl:1.2.840.113556.1.4.803:=2)))"; //все пользователи, кроме отключенных.
$filter2 ="(objectCategory=OrganizationalUnit)"; // для получения информации о OU
$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];  			// name of place
$PlaceAddres = $placeinfo[0]["street"][0];		// address of place
$PlaceMail = $placeinfo[0]["description"][0]; 	// mail of place
$PlacePhone = $placeinfo[0]["st"][0]; 		// phone of plase

Sabanjure, kita ngrancang sisih ndhuwur kaca:

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> Name </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> Данные 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>";

Sabanjure, kita nampa lan ngolah data pangguna ing daur ulang, nalika kanggo ndhelikake sawetara akun (contone, layanan), kita mung ngetik "ndhelikake" ing kolom "kamar" ing rincian pangguna ing AD, pangguna kasebut ora bakal ditampilake ing direktori:

for ($i=0; $i<$info["count"];$i++) { 
$UserHide = $info[$i]["physicaldeliveryofficename"][0];
if ($UserHide != 'hide') {
$UserName = $info[$i]["cn"][0];                //Имя пользователя
$UserPosition = $info[$i]["title"][0]; 		// Должность
$UserMail = $info[$i]["mail"][0];			//mail
if (!$UserMail)) $UserMail = "-";                  //если нет данных о ящике в AD, то отображаем прочерк
$UserIpPhone = $info[$i]["ipphone"][0];		//ip phone
	if (!$UserIpPhone) $UserIpPhone = "-";    //если нет данных о ящике в AD, то отображаем прочерк
$UserMobile = $info[$i]["mobile"][0];		//mobile
	if (!$UserMobile) $UserMobile = "-";     //если нет данных о ящике в AD, то отображаем прочерк

Miturut cara, yen sampeyan kudu entuk nilai atribut liyane, banjur elinga (penting iki):
ing panyuwunan kita pass jeneng atribut aksara cilik aksara, yen ora, ora bakal bisa.

Lan lebokake data sing ditampa menyang tabel:

    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>";    // если у пользователя есть e-mail создаём ссылку на отправку письма
	else echo "-"; //если нет e-mail - ставим прочерк.
 	echo "<td> ". $UserIpPhone ." </td>
 	<td> ". $UserMobile ." </td></tr>";
	}
}
echo "</table>";

Sabanjure, kita nutup sambungan ldap, utawa nampilake pesen babagan ora bisa nyambung menyang server:

ldap_close($ds); 
} 
else echo "<h4>Unable to connect to LDAP server</h4>"; 
echo '<br><br><br></body></html>';}

Berkas "main_table.html" saka njero minangka kaca html sing prasaja kanthi pranala, lan katon kaya iki:

<head>
<link rel="shortcut icon" href="ico.png"/>
<meta charset="windows-1251"/>
<title>Adressbook of «YourMegaCompanyName»</title>
</head>
<body style='background-color:#ffffff;'>
<center><a href=index.php><IMG border="none" src="logo.png"/></a></center>
<center><b>Places and offices</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>

Yen kodeku mbantu sapa wae, aku bakal seneng, gunakake!

Sampeyan uga bisa nyunting kanthi bebas kaya sing dikarepake (ngapikake / luwih elek) lan disebarake kanthi cara apa wae.

Matur suwun!

Source: www.habr.com

Add a comment