/api.php) - Die Laufzeit von PHP Scripten (Timeout) muss höher als 30 Sekunden sein (bei mir 2 Minuten) => Zumindest für den initialen Befüllungslauf - PHP Syntaxhighlighting sollte via Extension im MediaWiki installiert sein - MediaWiki Nuke sollte als Extension installiert sein (um alte Seiten massenhaft zu löschen) Änderungsübersicht: =================== - 05.11.2011/Thorsten Müller/ - Zeilennummerierung in den PHP Scripten (Dank an Dapor) - 13.11.2011/Thorsten Müller/ - Alphabetische Sortierung der Objekte - Nur Scriptinhalte prüfen, deren Änderungsdatum größer der letzten "Inventur" ist (Dank an ChristianS) - 19.11.2011/Thorsten Müller/ - Alle Scripte bekommen jetzt den Titel nach folgender Struktur __ (zur Eindeutigkeit, da ansonsten was überschrieben werden könnte) Bsp.: ips_LichtEinschalten_12345 - Code mehr dokumentiert und aufgeräumt - Viele Funktionen in extra Datei ausgelagert - 21.11.2011/Thorsten Müller/ - Dummy Instanz WebFront wird angelegt und befüllt (Dank an Wgreipl) - Nach einer Gesamtbefüllung wird automatisch wieder auf Differenzielle Befüllung gestellt (Dank an Boui) - 23.11.2011/Thorsten Müller/ - Anzahl von Variablen und Scripten erfassen (Dank an Raketenschnecke) - Zeitpunkt letzte Scriptausführung im WebFront anzeigen (Dank an Boui) - Instanzen wurden bisher ignoriert, dadurch haben auch Variablen die drunter liegen gefehlt. - 02.12.2011/Thorsten Müller/ - Fehlermeldung bei Wiki Verbindungsproblemen wird ausgegeben - September 2012 - PHP Timeout hochgesetzt - "Keine Standardaktion" Fehler abgefangen - 21.11.2012/Thorsten Müller/ - Max. Länge der berücksichtigen Skripte eingebaut - 26.09.2015/Thorsten Müller/ - Anpassung wegen IPS 4 - 16.11.2016/Thorsten Müller/ - Anpassung wegen UTF-8 Encoding - 12.12.2016/Thorsten Müller/ - Die Archiv Handler ObjectId wird automatisch gefunden (auch wenn es umbenannt wurde) ****** DIE NÄCHSTE VERSION IST ALS IPS PHP MODUL GEPLANT ****** Dieses Script habe ich nach bestem Wissen und Gewissen erstellt und gebe es ohne jegliche Form der Gewährleistung weiter. Für eventuelle Schäden, Aufwände, etc. hafte ich selbstverständlich nicht! Thorsten Müller ********************************************************************************************************************************* */ ini_set('max_execution_time', 600); ini_set('memory_limit', '-1'); $MaxRowsPerScript = 2300; require_once('TM_WikiFunktionen.php'); $DiesesScriptIstVersion = 'Version 1.6'; //===================================================================================== // Prüfen ob die Variablen existieren. // Falls ja, dann den Inhalt in die Variablen laden // Falls nein, dann anlegen, ggf. mit Standardwert belegen und Inhalt in Variable laden //===================================================================================== // In diesen Variablen steht der "Inhalt" der Variable drin //========================================================= $EditToken = TM_VariableAnlegenKomplett(3,$Prefix . '_EditToken','Nach Anmeldung am Wiki steht hier der Edit-Token. Bei Wiki Abmeldung wird der String geleert.',$ParentObjectID,'',True); $WikiUserAgent = TM_VariableAnlegenKomplett(3,$Prefix . '_UserAgent','Für die Bot-Zugriff wird ein spezieller Useragent benötigt.',$ParentObjectID,'IPSymcon MediaWiki Dokubot/0.1',True); $WikiBenutzername = TM_VariableAnlegenKomplett(3,$Prefix . '_Benutzer','Es wird ein spezieller MediaWiki Benutzer benötigt (mehr CPU Resourcen)',$ParentObjectID,'',True); $WikiPasswort = TM_VariableAnlegenKomplett(3,$Prefix . '_Passwort','Passwort zur Anmeldung innerhalb des MediaWikis',$ParentObjectID,'',True); $WikiAPIUrl = TM_VariableAnlegenKomplett(3,$Prefix . '_API','API Url des Wikis',$ParentObjectID,'',True); $WikiIPSUebersichtTitel = TM_VariableAnlegenKomplett(3,$Prefix . '_Titel','Name der Übersichtsseite im Wiki (keine Sonder- und Leerzeichen)',$ParentObjectID,'IPS_Strukturdokumentation',True); $WikiScriptNamensPrefix = TM_VariableAnlegenKomplett(3,$Prefix . '_ScriptPrefix','Prefix damit man die Scripte im Wiki von "normalen" Artikeln unterscheiden kann.',$ParentObjectID,'ips_',True); $WikiUrl = TM_VariableAnlegenKomplett(3,$Prefix . '_URL','Die MediaWiki URL',$ParentObjectID,'',True); $HttpUser = TM_VariableAnlegenKomplett(3,$Prefix . '_HTTPBenutzer','Benutzer für Zugriff auf Passwortgeschütztes Wiki',$ParentObjectID,'',True); $HttpPasswort = TM_VariableAnlegenKomplett(3,$Prefix . '_HTTPPasswort','Passwort für HTTP Auth. Benutzer',$ParentObjectID,'',True); $UnbenutzteObjekteZeigen = TM_VariableAnlegenKomplett(1,$Prefix . '_UnbenutztSeitTagen','Wenn > 0 dann Objekte zeigen, die länger als x Tage nicht benutzt wurden',$ParentObjectID,5,True); $IPSDienstLetzterStart = TM_VariableAnlegenKomplett(0,$Prefix . '_ZeitpunktIPSStart','Soll im Wiki Kopf der IP-Symcon Startzeitpunkt stehen.',$ParentObjectID,True,True); $ScriptLetzteAusfuehrung = TM_VariableAnlegenKomplett(0,$Prefix . '_ScriptLetzteAusfuehrung','Soll bei den Scripten die letzte Ausführungszeit stehen.',$ParentObjectID,False,True); $VariableLetzteAenderung = TM_VariableAnlegenKomplett(0,$Prefix . '_VarLetzteAenderung','Soll bei den Variablen der letzte Änderungszeitpunkt stehen',$ParentObjectID,False,True); $Zeilenumbruch = TM_VariableAnlegenKomplett(3,$Prefix . '_HostSystem','Unix: Für Linux/Unix/Mac OS X, andernfalls wird Windows angenommen.',$ParentObjectID,'Unix',True); $SyntaxHighlighting = TM_VariableAnlegenKomplett(0,$Prefix . '_SyntaxHighlighting','Soll das GeSHi Syntaxhighlighting verwendet werden.',$ParentObjectID,True,True); $GesamtBefuellung = TM_VariableAnlegenKomplett(0,$Prefix . '_GesamtBefuellung','Wenn True dann werden alle Scripte neu ins Wiki eingetragen (unabhängig, ob seit dem letzten Lauf geändert. ACHTUNG: Lange Laufzeit.',$ParentObjectID,True,True); $IPSWikiDocWebFront = TM_VariableAnlegenKomplett(0,$Prefix . '_WebFront','Soll eine Dummy Instanz für das Webfront angelegt werden.',$ParentObjectID,True,True); // In diesen Variablen steht die "VariableID" drin //================================================ $IPSWikiDocLetzteAusfuehrung = TM_VariableAnlegenKomplett(3,$Prefix . '_LetzteAusfuehrung','Wann wurde das Script zuletzt ausgeführt.',$ParentObjectID,date('d.m.Y H:i'),False); $IPSWikiDocAnzKategorien = TM_VariableAnlegenKomplett(1,$Prefix . '_AnzKategorien','Aktuelle Anzahl an Kategorien.',$ParentObjectID,0,False); $IPSWikiDocAnzVariablen = TM_VariableAnlegenKomplett(1,$Prefix . '_AnzVariablen','Aktuelle Anzahl an Variablen.',$ParentObjectID,0,False); $IPSWikiDocAnzScripte = TM_VariableAnlegenKomplett(1,$Prefix . '_AnzScripte','Aktuelle Anzahl an Scripten.',$ParentObjectID,0,False); $IPSWikiDocVersion = TM_VariableAnlegenKomplett(3,$Prefix . '_Version','Versionsnummer dieses Scriptes.',$ParentObjectID,$DiesesScriptIstVersion,False); // Die Anzahl an Kategorien, Variablen und Scripten soll für eine Auswertung mitprotokolliert werden // Die Variablen IPSWikiDoc_AnzKategorien, etc. wurden oben angelegt und die IDs in die Variablen geschrieben //=========================================================================================================== $ArchivInstanz = IPS_GetInstanceListByModuleID("{43192F0B-135B-4CE7-A0A7-1475603F3060}")[0]; //$ArchivName = IPS_GetModule("{43192F0B-135B-4CE7-A0A7-1475603F3060}")['ModuleName']; //$ArchivInstanz = IPS_GetInstanceIDByName ($ArchivName, 0); // Logging für diese Variablen aktivieren (das kann ohne Probleme auch jedes Mal durchlaufen werden) AC_SetLoggingStatus($ArchivInstanz, $IPSWikiDocAnzKategorien, true); AC_SetLoggingStatus($ArchivInstanz, $IPSWikiDocAnzVariablen, true); AC_SetLoggingStatus($ArchivInstanz, $IPSWikiDocAnzScripte, true); IPS_ApplyChanges($ArchivInstanz); $AnzKategorien = 0; $AnzVariablen = 0; $AnzScripte = 0; //========================================================================= // Zeitpunkt der letzten Ausführung in die entsprechende Variable schreiben //========================================================================= SetValue($IPSWikiDocLetzteAusfuehrung,date('d.m.Y H:i')); //========================================================= // Die Version des Scriptes soll immer aktualisiert werden, // auch wenn die Variable schon existiert hat. //========================================================= SetValue($IPSWikiDocVersion,$DiesesScriptIstVersion); //================================================================================== // Das Script für eine tägliche Ausführung planen // Es wird ein Ereignis angelegt, welches das Script jeden Abend um 22 Uhr ausführt //================================================================================== $EventObjectID = @IPS_GetEventIDByName('IPS Struktur zyklisch im Wiki pflegen', $_IPS['SELF']); if(!$EventObjectID) { $EventObjectID = IPS_CreateEvent(1); IPS_SetName($EventObjectID, 'IPS Struktur zyklisch im Wiki pflegen'); IPS_SetEventCyclic($EventObjectID, 0, 0, 0, 0, 0,0); IPS_SetEventCyclicTimeBounds($EventObjectID, mktime(22, 0, 0), 0); IPS_SetParent($EventObjectID, $_IPS['SELF']); IPS_SetEventActive($EventObjectID, True); } //========================================================== // Soll eine Dummy Instanz für das WebFront angelegt werden? // Name: IPS-Strukturdokumentation //========================================================== if($IPSWikiDocWebFront == True) { $DummyInstanz = @IPS_GetInstanceIDByName('IPS-Strukturdokumentation (WebFront)',$ParentObjectID); if($DummyInstanz == False) { // Die Instanz existiert noch nicht, also anlegen //=============================================== //echo 'Es wird eine Dummy Instanz mit Links auf die Variablen angelegt und den Variablen wird das Profil ~Switch zugewiesen.'; $DummyInstanz = IPS_CreateInstance('{485D0419-BE97-4548-AA9C-C083EB82E61E}'); IPS_SetParent($DummyInstanz,$ParentObjectID); IPS_SetName($DummyInstanz,'IPS-Strukturdokumentation (WebFront)'); $ScriptID = IPS_CreateScript(0); IPS_SetParent($ScriptID,$DummyInstanz); IPS_SetName($ScriptID,'IPSWikiDoc_Aktionsscript'); // Aktionsscript anlegen //====================== $Inhalt = ' '; $ScriptDateiname = IPS_GetKernelDir() . 'scripts\\' . $ScriptID . '.ips.php'; $ScriptInhalt = fopen($ScriptDateiname,'w'); fwrite($ScriptInhalt,$Inhalt); fclose($ScriptInhalt); IPS_SetScriptFile($ScriptID,$ScriptID . '.ips.php'); IPS_SetHidden($ScriptID,True); // Den Variablen das Switch Profil zuweisen, // das Aktionsscript zuweisen und als Links in die Dummy Instanz legen. //===================================================================== TM_WikiVariablenWebFront($ScriptID,$ParentObjectID,$DummyInstanz,$Prefix . '_SyntaxHighlighting','PHP Syntaxhighlighting','~Switch'); TM_WikiVariablenWebFront($ScriptID,$ParentObjectID,$DummyInstanz,$Prefix . '_ScriptLetzteAusfuehrung','Letzte Scriptausführung ins Wiki','~Switch'); TM_WikiVariablenWebFront($ScriptID,$ParentObjectID,$DummyInstanz,$Prefix . '_VarLetzteAenderung','Letzte Variablenänderung ins Wiki','~Switch'); TM_WikiVariablenWebFront($ScriptID,$ParentObjectID,$DummyInstanz,$Prefix . '_ZeitpunktIPSStart','IPS Zeitpunkt Dienststart ins Wiki','~Switch'); TM_WikiVariablenWebFront($ScriptID,$ParentObjectID,$DummyInstanz,$Prefix . '_GesamtBefuellung','Nächster Lauf ist Gesamtbefüllung (Laufzeit!)','~Switch'); $LinkID = IPS_CreateLink(); IPS_SetName($LinkID,'IPS Struktur im Wiki aktualisieren'); IPS_SetParent($LinkID,$DummyInstanz); IPS_SetLinkChildID($LinkID,$_IPS['SELF']); // Letzte Ausführung, Anzahl an Objekten in die WebFront Dummy Instanz TM_WikiVariablenWebFront(0,$ParentObjectID,$DummyInstanz,$Prefix . '_AnzKategorien','Anzahl - Kategorien',''); TM_WikiVariablenWebFront(0,$ParentObjectID,$DummyInstanz,$Prefix . '_AnzVariablen','Anzahl - Variablen',''); TM_WikiVariablenWebFront(0,$ParentObjectID,$DummyInstanz,$Prefix . '_AnzScripte','Anzahl - Skripte',''); TM_WikiVariablenWebFront(0,$ParentObjectID,$DummyInstanz,$Prefix . '_LetzteAusfuehrung','Zeitpunkt letztes Wiki Update',''); TM_WikiVariablenWebFront(0,$ParentObjectID,$DummyInstanz,$Prefix . '_Version','Version des Wiki-Scripts',''); } } //=============================================================== // Beim ersten Aufruf sind wichtige Variablen noch nicht gefüllt // Diese müssen gefüllt sein //=============================================================== if(!$WikiAPIUrl) { echo 'Bitte die Variablen noch mit sinnvollen Werten füllen und das Script dann erneut ausführen.'; return; } $IPSWikiDoc = IPS_GetScript($_IPS['SELF']); $IPSWikiDocLetzteAusfuehrung = (int)$IPSWikiDoc['ScriptExecuted']; //===================================================================================================================================== // Wenn die IPS Scripte komplett neu ins Wiki geschrieben werden sollen (unabhängig ihres letzten Änderungszeitpunkte // dann setze ich die letzte "Fake" Laufzeit dieses Scriptes auf den 01. Januar 1970 (damit sind dann alle gespeicherten Scripte neuer) //===================================================================================================================================== if($GesamtBefuellung == True) { $IPSWikiDocLetzteAusfuehrung = 0; } // Der Zeilenumbruch ist auf Windows und Unix/Linux/Mac Systemen unterschiedlich //============================================================================== if($Zeilenumbruch == 'Unix') { $Zeilenumbruch = chr(10); } else { $Zeilenumbruch = chr(13) . chr(10); } if($UnbenutzteObjekteZeigen > 0) { $TextUnusedObjects = '=Objekte (Variablen & Scripte) die seit mehr als ' . $UnbenutzteObjekteZeigen . ' Tag(en) nicht verwendet wurden.=' . $Zeilenumbruch; $UnbenutzteObjekteZeigen = (time() - ($UnbenutzteObjekteZeigen * 24 * 3600)); } //============================================================================================= // Nur folgende Typen mit in die Dokumentation aufnehmen // 0 Kategorie, 2 Variable, 3 Script, 4 Ereignis - keine Instanzen, Medien und Links //============================================================================================= $DocTypes = array(0,2,3,4,1); //=============================================================== // Allgemeine IP-Symcon Informationen in den Seitenkopf aufnehmen //=============================================================== $Text = '==Allgemeine Informationen zu IP-Symcon==' . $Zeilenumbruch . '*IP-Symcon Version: ' . IPS_GetKernelVersion() . $Zeilenumbruch . '*Basisverzeichnis: ' . IPS_GetKernelDir() . $Zeilenumbruch; if($IPSDienstLetzterStart == True) $Text .= '*Letzter Dienststart von IPS: ' . gmdate("d.m.Y H:i:s.", IPS_GetKernelStartTime()); //================================================================================================= // Alle Objekte in ein Array laden, alphabetisch sortieren und in die richtige Baumstruktur bringen //================================================================================================= $AllObjects = GetObjectList(0); foreach($AllObjects as $ObjectID) { $GetObject = IPS_GetObject($ObjectID); $Tree[] = array( 'ObjectID' => $ObjectID ,'ParentID' => IPS_GetParent($ObjectID) ,'Type' => $GetObject['ObjectType'] ,'LogicalName' => $GetObject['ObjectName'] ); } $ObjectsInOrder = array(); uasort($Tree,'TM_ObjekteSortierenAlphabetisch'); BuildObjectOrder($Tree); //=============================== // Am Wiki anmelden // $ch enthält die cURL Ressource //=============================== $ch = TM_WikiAnmelden(); //====================================================================================== // Die IPS_Strukturdokumentation Seite zusammenbauen und in die Variable $Text schreiben //====================================================================================== TM_WikiStrukturdokumentation(); //====================================================================================================== // Die aktuelle Version der Übersichtsseite laden und prüfen, ob sich der Inhalt überhaupt geändert hat. // Falls ja, dann die neue Version ins Wiki stellen //====================================================================================================== $WikiIPSStrukturdokumentation = TM_WikiPageDownload($WikiUrl . '/index.php?title=' . $WikiIPSUebersichtTitel . '&action=raw'); $WikiIPSStrukturdokumentation = trim($WikiIPSStrukturdokumentation); if($Text != $WikiIPSStrukturdokumentation) { //echo 'TEXT:' . $Text; //echo 'WIKI:' . $WikiIPSStrukturdokumentation; TM_WikiSeiteBearbeiten($ch,$WikiIPSUebersichtTitel,$Text); } //=============================== // Am Wiki abmelden //=============================== TM_WikiAbmelden($ch); //==================================================================== // Die aktuelle Anzahl an Kategorien, Variablen und Scripten speichern //==================================================================== SetValue($IPSWikiDocAnzKategorien,$AnzKategorien); SetValue($IPSWikiDocAnzVariablen,$AnzVariablen); SetValue($IPSWikiDocAnzScripte,$AnzScripte); if($GesamtBefuellung == True) { $GesamtBefuellung = @IPS_GetVariableIDByName($Prefix . '_GesamtBefuellung',$ParentObjectID); SetValue($GesamtBefuellung,False); //echo 'Es wurde eine Gesamtbefüllung durchgeführt. Damit im nächsten Lauf wieder nur nach Änderungen gesucht wird, wurde die Variable IPSWikiDoc_GesamtBefuellung auf False gestellt.'; } //******************************************************************** // Die Funktion um die IPS_Strukturdokumentation Seite zusammenzubauen //******************************************************************** function TM_WikiStrukturdokumentation() { global $ObjectsInOrder ,$Text ,$ScriptLetzteAusfuehrung ,$VariableLetzteAenderung ,$WikiScriptNamensPrefix ,$UnbenutzteObjekteZeigen ,$TextUnusedObjects ,$Zeilenumbruch ,$IPSWikiDocLetzteAusfuehrung ,$SyntaxHighlighting ,$ch ,$AnzKategorien ,$AnzVariablen ,$AnzScripte ,$MaxRowsPerScript; $Text .= $Zeilenumbruch; foreach($ObjectsInOrder as $ObjectID) { $Object = IPS_GetObject($ObjectID); $Location = utf8_decode(IPS_GetLocation($ObjectID)); $ObjectType = $Object['ObjectType']; $ObjectName = utf8_decode($Object['ObjectName']); $Description = utf8_decode($Object['ObjectInfo']); //========================================================================== // Wieviel übergeordnete Objekte gibt es - wichtig für die Wiki Darstellung? //========================================================================== $Trenner = '='; $tmp = $ObjectID; while(IPS_GetParent($tmp) != 0) { $Trenner .= '='; $tmp = IPS_GetParent($tmp); } //======================================= // Das aktuelle Objekt ist eine Kategorie //======================================= if($ObjectType == 0) { $AnzKategorien++; $Text .= $Trenner . $ObjectName . ' (Kategorie)' . $Trenner . $Zeilenumbruch; } //=================================================== // Das aktuelle Objekt ist eine Instanz // Future-Use! Wird aktuell noch nicht berücksichtigt //=================================================== if($ObjectType == 1) { $Text .= $Trenner . $ObjectName . ' (Instanz)' . $Trenner . $Zeilenumbruch; } //====================================== // Das aktuelle Objekt ist eine Variable //====================================== if($ObjectType == 2) { $AnzVariablen++; $Text .= $Trenner . $ObjectName . ' (Variable)' . $Trenner . $Zeilenumbruch; $Variable = IPS_GetVariable($ObjectID); if($Description) $Text .= '*Beschreibung der Variable: ' . $Description . $Zeilenumbruch; $Text .= '*ID-Variable: ' . $Variable['VariableID'] . $Zeilenumbruch; //================================================================================= // Soll protokolliert werden, wann sich der Wert der Variable zuletzt geändert hat? //================================================================================= if($VariableLetzteAenderung == True) $Text .= '*Zuletzt geändert: ' . date('d.m.Y G:i',(int)$Variable['VariableChanged']) . ' Uhr' . $Zeilenumbruch; //==================================================================================== // Wurde diese Variable längere Zeit nicht mehr verändert (ggf. nicht mehr notwendig?) //==================================================================================== if(($UnbenutzteObjekteZeigen > 0) && ((int)$Variable['VariableChanged']) < $UnbenutzteObjekteZeigen) $TextUnusedObjects .= '* (Variable) ' . $Location . ' (Zeitpunkt letzte Änderung: ' . date('d.m.Y G:i',(int)$Variable['VariableChanged']) . ' Uhr)' . $Zeilenumbruch; $Text .= '*Profil (System): ' . $Variable['VariableProfile'] . $Zeilenumbruch; $Text .= '*Profil (Benutzer): ' . $Variable['VariableCustomProfile'] . $Zeilenumbruch; //$VarType = $Variable['VariableValue']; //switch($VarType['ValueType']) switch($Variable['VariableType']) { case 0: $Text .= '*Typ: Boolean' . $Zeilenumbruch; break; case 1: $Text .= '*Typ: Integer' . $Zeilenumbruch; break; case 2: $Text .= '*Typ: Float' . $Zeilenumbruch; break; case 3: $Text .= '*Typ: String' . $Zeilenumbruch; break; } $Text .= '*Position im Objektbaum: ' . $Location . $Zeilenumbruch; //=========================================================================== // Ist dieser Variable ein Aktionsscript zugewiesen? // Dann das Aktionsscript als Link anzeigen // Namensschema: __ --- ips_LichtSchalten_12345 // (Die ID ist zur Eindeutigkeit nötig, da Name nicht unique) //=========================================================================== if(($Variable['VariableCustomAction'] <> 0) && ($Variable['VariableCustomAction'] <> 1)) { //print_r($Variable); $ActionObjekt = IPS_GetObject($Variable['VariableCustomAction']); $ActionObjektName = $ActionObjekt['ObjectName']; $ActionObjektID = $ActionObjekt['ObjectID']; $TitelFuerWiki = $WikiScriptNamensPrefix . $ActionObjektName . '_' . $ActionObjektID; $Text .= '*Aktionsscript: [[' . $TitelFuerWiki . ']]' . $Zeilenumbruch; } } //=================================== // Das aktuelle Objekt ist ein Script //=================================== if($ObjectType == 3) { $AnzScripte++; $ScriptDetails = IPS_GetScript($ObjectID); //================================================================================= // Ist das Script als Fehlerhaft markiert, dann im Wiki in der Farbe "rot" anzeigen //================================================================================= if($ScriptDetails['ScriptIsBroken'] == True) { $Text .= '' . $Trenner . $ObjectName . ' (Script)' . $Trenner . '' . $Zeilenumbruch; } else { $Text .= $Trenner . $ObjectName . ' (Script)' . $Trenner . $Zeilenumbruch; } $Text .= '*Beschreibung des Scriptes: ' . $Description . $Zeilenumbruch; $Text .= '*Position im Objektbaum: ' . $Location . $Zeilenumbruch; //============================================================================ // Soll der letzte Ausführungszeitpunkt des Scriptes im Wiki angezeigt werden? //============================================================================ if($ScriptLetzteAusfuehrung == True) { $Text .= '*Letzte Ausführung: ' . date('d.m.Y G:i',(int)$ScriptDetails['ScriptExecuted']) . ' Uhr' . $Zeilenumbruch; } //$Text .= '*Script physikalischer Dateiname: [[' . $WikiScriptNamensPrefix . $ScriptDetails['ScriptFile'] .'|' . $ScriptDetails['ScriptFile'] . ']]' . $Zeilenumbruch; $Text .= '*Script physikalischer Dateiname: ' . $ScriptDetails['ScriptFile'] . $Zeilenumbruch; $Text .= '*Logischer Scriptname: ' . utf8_decode($Object['ObjectName']) . $Zeilenumbruch; //============================================================================ // Jetzt der Link zum Script im Wiki // Der Link funktioniert über den Wiki Titel (__ //============================================================================ $TitelFuerWiki = $WikiScriptNamensPrefix . utf8_decode($Object['ObjectName']) . '_' . $ObjectID; //$Text .= '*Das Script liegt im Wiki unter dem Namen: ' . utf8_decode($TitelFuerWiki) . ' --> [[' . utf8_decode($TitelFuerWiki) . ']] ' . $Zeilenumbruch; $Text .= '*Das Script liegt im Wiki unter dem Namen: [[' . utf8_decode($TitelFuerWiki) . ']] ' . $Zeilenumbruch; //==================================================================================== // Wurde dieses Script längere Zeit nicht mehr ausgeführt (ggf. nicht mehr notwendig?) //==================================================================================== if(($UnbenutzteObjekteZeigen > 0) && ((int)$ScriptDetails['ScriptExecuted']) < $UnbenutzteObjekteZeigen) { $TextUnusedObjects .= '* (Script) ' . $Location . ' (Zeitpunkt letzte Ausführung: ' . date('d.m.Y G:i',(int)$ScriptDetails['ScriptExecuted']) . ' Uhr)' . $Zeilenumbruch; } //============================================== // Um welche Art von Script handelt es sich hier //============================================== switch($ScriptDetails['ScriptType']) { case 0: $Text .= '*Script-Typ: PHP Script' . $Zeilenumbruch; break; case 1: $Text .= '*Script-Typ: IPS Makro' . $Zeilenumbruch; break; case 2: $Text .= '*Script-Typ: IPS Brick' . $Zeilenumbruch; break; } //============================================================================================================== // Jetzt gehts an den Inhalt der Scripte // Prüfen, ob sich das Script seit der letzten Ausführung geändert hat (Danke an ChristianS für den Denkanstoss) // Falls "Initalbefüllung" True ist, dann wurde oben IPSWikiDocLetzteAusfuehrung auf 0 gesetzt. // Somit wäre die Bedingung immer wahr und das Script würde auf jeden Fall erstellt //============================================================================================================== $ScriptLetzteAenderung = filemtime($ScriptDetails['ScriptFile']); $Filename = IPS_GetKernelDir() . 'scripts/' . $ScriptDetails['ScriptFile']; if($ScriptLetzteAenderung > $IPSWikiDocLetzteAusfuehrung) { if(count(file($Filename)) < $MaxRowsPerScript) { $ScriptInhalt = file_get_contents ($Filename); if(strlen($ScriptInhalt) < 5) echo "Script " . $ScriptDetails['ScriptFile'] . " hat weniger als 5 Zeichen.\n"; //===================================================== // Soll das Syntaxhighlightig verwendet werden // Danke an Dapor für den Hinweis mit den Zeilennummern //===================================================== if($SyntaxHighlighting == True) { $ScriptInhalt = '' . $Zeilenumbruch . $ScriptInhalt . $Zeilenumbruch . ''; } TM_WikiSeiteBearbeiten($ch,$TitelFuerWiki,utf8_decode($ScriptInhalt)); } else { print 'Das Skript ' . $Filename . ' hat zuviele Zeilen (' . count(file($Filename)) . ') und wird ignoriert.'; } } } } //================================================= // Durchlauf alle Objekte ist beendet. // Jetzt noch die Footer schreiben und feddisch ;-) //================================================= $Text .= $TextUnusedObjects; $Text .= '=Eine Kleinigkeit zum Schluß=' . $Zeilenumbruch; $Text .= 'Ich hoffe, dass euch dieses IPS Script zur MediaWiki Anbindung gefällt und würde mich über Rückmeldung unter MrThorstenM (at) gmx.net oder/und natürlich im IPS-Forum freuen. Natürlich Danke ich auch all jenen die so tolle Software wie MediaWiki, PHP, IPS, cURL, etc. entwickeln und schöne Codebeispiele zur Verfügung stellen, da ohne sie ein solches Script gar nicht möglich wäre.'; //========================================== // Jetzt noch unnötige Leerzeichen entfernen //========================================== $Text = trim($Text); } ?>