Next Active Directory Integration

In der letzten Zeit hat sich bei ADI nicht viel getan. Hauptsächlich Bugfixes und notwendige Anpassungen wurden vorgenommen. Doch jetzt geht’s ab!

Multisite Network Support

Schon seit langem werde ich immer wieder gefragt, wann ADI denn endlich WordPress Multisite Networks unterstützt. Die Idee fand ich schon immer gut und das Feature steht somit schon seit Jahren auf meiner To-Do-Liste. Aber ich wollte es dann auch gleich richtig machen, also klotzen und nicht kleckern.

Hinter Next ADI steht nun ein Team

Um eine vernünftige Multisite-Network-Unterstützung in ADI zu realisieren, ist viel Arbeit erforderlich und der bestehende Code ist auch in die Jahre gekommen und schlecht wartbar. Daher habe ich beschlossen, ADI nicht mehr alleine zu entwickeln und zu betreuen. Gemeinsam mit meinen Kollegen von der NeosIT GmbH heben wir ADI mit der Version 2.0 auf eine neue Ebene. In den vergangenen Monaten wurde ADI komplett neu geschrieben und befindet sich derzeit in einer pre-alpha-Phase.

Wenn ihr mehr über Next ADI erfahren wollt, dann lest bitte Schakkos Blogbeitrag, in dem er schon ein paar Neuerungen ausplaudert.

Wie geht es nun weiter mit Next ADI?

Wir wollen keine Geheimniskrämer sein. Daher hier unser Zeitplan für die nächsten Wochen:

  • 07.04.2016: Veröffentlichung einer alpha-Version von ADI 2.0 auf GitHub
  • 11.04.2016: Weitere Informationen auf unser Website neos-it.de
  • 12.04.2016: Ankündigung im WordPress-Forum
  • 13.05.2016: Microsite geht online
  • 17.05.2016: ADI 2.0 wird auf WordPress.org veröffentlicht

Während dieser Zeit geht die Entwicklung natürlich immer weiter voran und wir werden testen, testen und testen.

WMI mit PHP

Folgender PHP-Code ermittelt die auf einem Windows-System installierte Software. Dabei kann man auch einen Remote-Computer abfragen. Mit der Funktion getWMI() kann man aber auch alle anderen WMI-Abfragen durchführen. Das Funktioniert natürlich nur unter Windows.

[sourcecode language=’php‘]
ConnectServer();
} else{
$objService = $objLocator->ConnectServer($strHostname, „rootcimv2“, „$strHostname\$strUser“, $strPassword);
}

$objWEBM = $objService->Get($strClass);
$objProp = $objWEBM->Properties_;

$arrProp = $objProp->Next($objProp->Count);

$objWEBMCol = $objWEBM->Instances_();
$arrWEBMCol = $objWEBMCol->Next($objWEBMCol->Count);
foreach($arrWEBMCol as $objItem)
{
reset($arrProp);
$arrInstance = array();
foreach($arrProp as $propItem)
{
eval(„\$value = \$objItem->“ .$propItem->Name .“;“);
$arrInstance[$propItem->Name] = trim($value);
}
$arrData[] = $arrInstance;
}
return $arrData;
}

echo „

";

print_r(getWMI("Win32_Product", "192.168.0.56", "administrator", "password"));

echo "

„;
?>
[/sourcecode]

AJAX ganz einfach

Dynamische Seite ganz einfach bauen, ohne dass wir einen Reload brauchen? Das geht! Schaut Euch mal das folgende an.

[sourcecode language=’php‘]


Dynamic Test



Auswahl:



Ergebnis:


Bitte wählen Sie ein Zeitformat.



[/sourcecode]

Die Seite besteht nun aus einem Drop-Down Feld aus dem wir die Einträge „Datum“, „Uhrzeit“ und „Datum + Uhrzeit“ wählen können. Wenn wir nun auf den Button „Anzeigen“ klicken, wird uns im unteren Teil der Seite in einem DIV-Block entsprechend unserer Auswahl das Datum, die Uhrzeit oder halt beides angezeigt. Tooooll….. Nix neues? Doch! Denn das Ergebnis wird uns dort angezeigt, ohne dass die Seite neu geladen wird. Ok, das Beispiel mit Datum und Uhrzeit geht natürlich auch direkt mit JS, aber man damit noch ganz andere Sachen, z.B. Datenbankabfragen machen. Wie? Nun ja, in unserem Beispiel wird die Berechnung von Datum und Uhrzeit nicht in JS vorgenommen, sondern erfolgt in einem PHP-Skript, dass irgendwo auf einem Erreichbaren Rechner liegen kann.

Das entscheidende sind die Zeilen 4 und 15. In Zeile 4 binden wir das folgenden JavaScript „request.js“ ein:

[sourcecode language=’php‘]
// Hier wird die Antwort Ausgegeben (ID des Ausgabeelements, z.B. ein DIV-Block)
var ResponseTargetID = “;

// Funktion zum Erzeugen eines XMLHttpRequest-Objekts
function createRequestObject(){
var request_o;
var browser = navigator.appName;

if (browser == „Microsoft Internet Explorer“) {
request_o = new ActiveXObject(„Microsoft.XMLHTTP“);
} else {
request_o = new XMLHttpRequest();
}
return request_o;
}

// Erzeuge XMLHttpRequest-Objekt
var http = createRequestObject();

/**
* Funktion zum Abrufen der Informationen
*
* @param uri – URI der abzurufenden Seite
* @param parameter – Abfrage Parameter, z.B. ‚id‘
* @param value – Wert des Parameters
* @param targetID – ID des Elements, dass die Ausgabe anzeigen soll
*/
function httpRequest(uri,parameter,value,targetID){

ResponseTargetID = targetID;

http.open(‚GET‘, uri + ‚?‘ + parameter + ‚=‘ + value);

// Handler definieren
http.onreadystatechange = handleResponse;

// Daten senden. In unserem Fall nix!
http.send(null);
}

/**
* handleResponse()
*
* verarbeitet die Antworten des Requests
*/
function handleResponse(){

/* Das XMLHttpRequest-Objekt hat eine Eigenschaft readyState. Diese kann
folgende Werte annehmen:
0: Uninitialized
1: Loading
2: Loaded
3: Interactive
4: Finished */
if(http.readyState == 4) { // Finished?
if (http.status == 200) { // Status OK?
var response = http.responseText;

// Ergebnis in das Element einfügen.
document.getElementById(ResponseTargetID).innerHTML = response;
}
}
}
[/sourcecode]
Dies stellt uns die Möglichkeit zur Verfügung per JS Anfragen an einen Server zu stellen. Dazu wird die Funktion XMLHttpRequest() benutzt. Es wird einfach per XMLHttpRequest-Objekt.open() eine Seite abgerufen und das Ergebnis an unsere Seite zurückgeliefert. handleResponse() zeigt das Ergebnis wird dann im Response-Target an. In unserem Fall ist das der DIV-Block mit der ID „answer“.

Die Anfrage selber geschieht in Zeile 15 unserer HTML-Seite. Dort wird die JS-Funktion httpRequest aus unserem JS-Script benutzt, um eine Anfrage an einen anderen Rechner zu stellen. Das Ergebnis wird dann in DIV-Block mit der id=“answer“ angezeigt.

Schauen wir uns mal den Server-Code in request.php an:
[sourcecode language=’php‘]
‚.date(‚H:i:s‘).‘‚;
}

if ($_GET[‚id‘] == ‚datetime‘) {
echo date(‚Y-m-d / H:i:s‘);
}

?>
[/sourcecode]
Das ist ja nun ganz simpel. Je nach per GET übergebener ID, wird einfach eine andere Ausgabe erzeugt.

Wie benutze ich das nun?

Was ich brauche ist eine HTML-Seite mit einem Formular. Auf der Seite binde ich per
[sourcecode language=’html‘]