ACHTUNG: Mittlerweile ist dieses Skript auch als Modul verfügbar – siehe Modul – Backup von Views

Anbei ein Skript um im Backup Verzeichnis gesicherte Views wieder zurückzusichern.

Voraussetzung ist, dass das Skript IPSView_Backup aktiv ist und in definierten Zeiträumen Backups von modifizierten Views anlegt.

In diesem Restore Script spezifiziert man die ID der View und den Backup Suffix mit Datum und Uhrzeit. Erfolgt keine Angabe von Datum und Uhrzeit, dann werden alle vorhandenen Backups der View aufgelistet.

Sollte eine View versehentlich gelöscht worden sein, steht zur Wiederherstellung ein eigenes Skript zur Verfügung.

<?
	/**
	 * @file          IPSView_RestoreBackup.php
	 * @author        brownson
	 * @version
	 *   Version 1.0, 2014-07-23 brownson: Initiale Version<br/>
	 *
	 * IPSView um ein gelöschtes Script aus dem Backup wiederherzustellen (
	 * Voraussetzung: IPSView_Backup ist installiert)
	 *
	 * Konfiguration Einstellungen:
	 *   * $directory - spezifiziert das Verzeichnis wo die Backups abgelegt werden
	 *                  (relativ zum IP-Symcon Verzeichnis)
	 *   * $viewID    - ID der View die aus einem Backup wiederhergestellt werden soll
	 *   * $dateTime  - Datum und Uhrzeit des Backups, das wiederhergestellt werden soll.
	 *                  Format: YYYYMMDD_hhmm
	 *                  Erfolgt keine Eingabe von Datum und Uhrzeit, dann werden alle
	 *                  verfügbaren Backups aufgelistet und die Variable kann per 
	 *                  Copy&Paste befüllt werden.
	 *
	 */

	// Konfiguration
	$directory = 'backup/ipsview/';
	$viewID    = '';
	$dateTime  = '';

	// -------------------------------------------------------------------------

	// Konfiguration überprüfen
	if ($viewID == '') {
		echo 'Bitte geben Sie eine ViewID oder einen ViewNamen in der Konfiguration an.'.PHP_EOL;
		return;	
	} else if ($viewID < '10000' or $viewID >= '60000') {
		die ('Ungültige ViewID "'.$viewID.'" spezifiziert (10000 <= $viewID <= 60000)');
 	}

	// Backup Verzeichnis überprüfen
	$directory = IPS_GetKernelDir().$directory;
	if (!file_exists($directory)) {
		die ('Backup Verzeichnis konnte nicht gefunden werden');
	}

	// ViewID überprüfen
	echo 'Überprüfung von ViewID "'.$viewID.'"'.PHP_EOL;
	$view = @IPS_GetMedia($viewID);
	if ($viewID===false) {
		die ('Eine View mit der ID "'.$viewID.'" konnte nicht gefunden werden');
	}
	
	// Auflistung aller Backup Dateien
	if ($dateTime=='') {
		echo 'Auflistung aller vorhandenen Backup Dateien: '.PHP_EOL;
		ShowAllBackupFilesForViewID ($directory, $viewID);
		return;
	}
	
	echo 'Starte Wiederherstellung von View mit ID "'.$viewID.''.PHP_EOL;

	$backupFile = $directory.$viewID.'__'.$dateTime.'.ipsView';
	$mediaFile  = IPS_GetKernelDir().'media/'.$viewID.'.ipsView';
	
	if (!file_exists($backupFile)) {
		die ('ACHTUNG: Die Backupdatei "'.$backupFile.'" konnte nicht gefunden werden');
	}
	
	// View Restore
	echo 'Kopiere '.$backupFile.' auf '.$mediaFile.PHP_EOL;
	copy ($backupFile, $mediaFile);

	echo ' '.PHP_EOL;
	echo '============================================================='.PHP_EOL;
	echo 'View wurde erfolgreich aus dem Backup wiederhergestellt'.PHP_EOL;
	echo '============================================================='.PHP_EOL;

	// -------------------------------------------------------------------------
	function ShowAllBackupFilesForViewID ($directory, $viewID) {
		if (($handle=opendir($directory))===false) {
			die ('Error Opening Directory '.$directory);
		}
		while (($file = readdir($handle))!==false) {
			$fileID        = substr($file, 0, 5);
			if ($fileID >= '10000' and $fileID <= '60000' and $fileID==$viewID) {
			   echo 'Backup Datei gefunden: '.$file.PHP_EOL;
			}
		}
		closedir($handle);
	}

	// -------------------------------------------------------------------------
?>