- Mitglied seit
- 30 Jun 2004
- Beiträge
- 12,882
- Punkte für Reaktionen
- 0
- Punkte
- 0
Mal wieder ein kleines Skript 
Diesmal geht es darum, die Telefonnummern aus einem LDAP Server zu lesen und in XML umgewandelt als <CiscoIPPhoneDirectory> bereitzustellen. Hierzu wird PHP verwendet.
Das ganze Skript sollte voll parametrisierbar sein, um bei unterschiedlichen Anforderungen ohne große Änderung eingesetzt werden zu können. Deshalb wird das Ganze über 5 Variablen konfiguriert, die am Anfang des Skripts stehen:
Zum Ablauf:
Die PHP Datei erzeugt zuerst ein XML Objekt vom Typ <CiscoIPPhoneInput> in dem der User einen Suchbegriff eingibt. Z.B. "neu"
Nach der Übergabe dieses Suchbegriffes wird am Telefon eine Liste (XML Objekttyp <CiscoIPPhoneMenu>) der gefundenen Personen ausgegeben, z.B.
aus welcher der Anwender dann den gewünschten Namen auswählt. Danach werden sämtliche Attribute (= Telefonnummern) dieser Person (entsprechend der Liste in $lt_fieldname) ausgelesen und als <CiscoIPPhoneDirectory> angezeigt. Aus dieser Liste kann dann direkt gewählt werden.
Der Einfachheit halber wird mal davon ausgegangen, daß es nicht mehr als 50 Namen zum eingegebenen Suchbegriff gibt und auch pro Person nicht mehr als insgesamt 32 Rufnummern vorhanden sind :wink:
Es ist mir völlig bewußt, daß man das Skript noch optimieren kann. Mir geht es aber hauptsächlich darum, die Funktionsweise klar ersichtlich darzustellen. Viel Spaß damit !
Diesmal geht es darum, die Telefonnummern aus einem LDAP Server zu lesen und in XML umgewandelt als <CiscoIPPhoneDirectory> bereitzustellen. Hierzu wird PHP verwendet.
Das ganze Skript sollte voll parametrisierbar sein, um bei unterschiedlichen Anforderungen ohne große Änderung eingesetzt werden zu können. Deshalb wird das Ganze über 5 Variablen konfiguriert, die am Anfang des Skripts stehen:
PHP:
$lv_server="localhost";
$lv_basedn="dc=domain,dc=com";
$lv_url="http://meinwebserver/ldapdir.php";
$lt_fieldname=array ("homephone", "mobile", "telephonenumber");
$lt_fielddesc=array ("Privat", "Handy", "Firma");
- $lv_server ist der Name oder die IP des LDAP Servers, der abgefragt werden soll
- $lv_basedn ist die Basis im LDAP Baum, an dem die Suche startet
- $lv_url ist die komplette http Adresse der PHP Datei. Diese Angabe ist notwendig, weil sie im Skript zur URL-Erzeugung gebraucht wird
- $lt_fieldname ist eine Aufzählung der LDAP Attribute, die ausgelesen werden sollen Wichtig: alles in kleinbuchstaben angeben !
- $lt_fielddesc ist eine zur Feldliste passende Aufzählung von Beschreibungen, die in der Anzeig der jeweiligen Rufnummer verwendet wird. Die Reihenfolge muß mit der Reihenfolge in $lt_fieldname übereinstimmen !
Zum Ablauf:
Die PHP Datei erzeugt zuerst ein XML Objekt vom Typ <CiscoIPPhoneInput> in dem der User einen Suchbegriff eingibt. Z.B. "neu"
Nach der Übergabe dieses Suchbegriffes wird am Telefon eine Liste (XML Objekttyp <CiscoIPPhoneMenu>) der gefundenen Personen ausgegeben, z.B.
- Heinz Neubert
- Dieter Neumüller
aus welcher der Anwender dann den gewünschten Namen auswählt. Danach werden sämtliche Attribute (= Telefonnummern) dieser Person (entsprechend der Liste in $lt_fieldname) ausgelesen und als <CiscoIPPhoneDirectory> angezeigt. Aus dieser Liste kann dann direkt gewählt werden.
Der Einfachheit halber wird mal davon ausgegangen, daß es nicht mehr als 50 Namen zum eingegebenen Suchbegriff gibt und auch pro Person nicht mehr als insgesamt 32 Rufnummern vorhanden sind :wink:
Es ist mir völlig bewußt, daß man das Skript noch optimieren kann. Mir geht es aber hauptsächlich darum, die Funktionsweise klar ersichtlich darzustellen. Viel Spaß damit !
PHP:
<?php
header("Content-type: text/xml");
header("Connection: close");
$lv_server="localhost";
$lv_basedn="dc=domain,dc=com";
$lv_url="http://meinwebserver/ldapdir.php";
$lt_fieldname=array ("homephone", "mobile", "telephonenumber");
$lt_fielddesc=array ("Privat", "Handy", "Firma");
if (!$suchwert) {
print ("<CiscoIPPhoneInput>\n");
print ("<Title>LDAP Suche</Title>\n");
print ("<Prompt>Bitte Suchbegriff eingeben !</Prompt>\n");
print ("<URL>".$lv_url."</URL>\n");
print ("<InputItem>\n");
print ("<DisplayName>Suche nach</DisplayName>\n");
print ("<QueryStringParam>suchwert</QueryStringParam>\n");
print ("<DefaultValue />\n");
print ("<InputFlags>L</InputFlags>\n");
print ("</InputItem>\n");
print ("</CiscoIPPhoneInput>\n");
} else {
if (!isset($entry)) {
print ("<CiscoIPPhoneMenu>\n");
print ("<Title>Suchergebnis</Title>\n");
print ("<Prompt>Bitte auswählen !</Prompt>\n");
$ds=ldap_connect($lv_server);
if ($ds) {
$r = ldap_bind($ds);
$sr = ldap_search($ds, $lv_basedn, "sn=$suchwert*");
$info = ldap_get_entries($ds, $sr);
for ($i=0; $i<$info["count"]; $i++) {
print ("<MenuItem>\n");
print ("<Name>".$info[$i]["cn"][0]."</Name>\n");
print ("<URL>".$lv_url."?entry=$i&suchwert=$suchwert*</URL>\n");
print ("</MenuItem>\n"); }
ldap_close($ds); }
print ("</CiscoIPPhoneMenu>\n");
} else {
print ("<CiscoIPPhoneDirectory>\n");
print ("<Prompt>Bitte auswählen !</Prompt>\n");
$ds=ldap_connect($lv_server);
if ($ds) {
$r = ldap_bind($ds);
$sr = ldap_search($ds, $lv_basedn, "sn=$suchwert");
$info = ldap_get_entries($ds, $sr);
print ("<Title>".$info[$entry]["cn"][0]."</Title>\n");
for ($j=0; $j<sizeof($lt_fieldname); $j++) {
for ($i=0; $i<sizeof($info[$entry][$lt_fieldname[$j]])-1; $i++) {
print ("<DirectoryEntry>");
print ("<Name>".$lt_fielddesc[$j]."</Name>");
print ("<Telephone>".$info[$entry][$lt_fieldname[$j]][$i]."#</Telephone>\n");
print ("</DirectoryEntry>"); }
}
ldap_close($ds); }
print ("</CiscoIPPhoneDirectory>\n");
}
}