{"id":224,"date":"2014-07-26T07:58:48","date_gmt":"2014-07-26T06:58:48","guid":{"rendered":"http:\/\/ipsview.brownson.at\/?p=224"},"modified":"2016-09-10T18:12:29","modified_gmt":"2016-09-10T17:12:29","slug":"wiederherstellen-von-geloeschten-views","status":"publish","type":"post","link":"https:\/\/ipsview.brownson.at\/?p=224","title":{"rendered":"Wiederherstellen von gel\u00f6schten Views"},"content":{"rendered":"<p><span style=\"color: #ff0000;\">ACHTUNG: Mittlerweile ist dieses Skript auch als Modul verf\u00fcgbar<\/span> &#8211; siehe\u00a0<a href=\"http:\/\/ipsview.brownson.at\/?p=731\">Modul &#8211; Backup von Views<\/a><\/p>\n<p>Sollte man versehentlich mal eine View komplett l\u00f6schen, so ist es mit diesem Skript m\u00f6glich, die View aus einem Backup wiederherzustellen.<\/p>\n<p>Voraussetzung ist, dass das <a title=\"Automatisches Backup von Views\" href=\"http:\/\/ipsview.brownson.at\/?p=214\">Backup Skript<\/a> aktiv ist und in regelm\u00e4\u00dfigen Abst\u00e4nden Backups von modifizierten Views anlegt.<\/p>\n<p>F\u00fcr das Wiederherstellen einer gel\u00f6schten View ist es notwendig, die ID der View oder den Namen der View im Skript anzugeben.<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"php\" data-enlighter-highlight=\"20-22\" data-enlighter-title=\"Restore Deleted View\">&lt;?\r\n\t\/**\r\n\t * @file          IPSView_RestoreDeleted.php\r\n\t * @author        brownson\r\n\t * @version\r\n\t *   Version 1.0, 2014-07-23 brownson: Initiale Version&lt;br\/&gt;\r\n\t *\r\n\t * IPSView um ein gel\u00f6schtes Script aus dem Backup wiederherzustellen (\r\n\t * Voraussetzung: IPSView_Backup ist installiert)\r\n\t *\r\n\t * Konfiguration Einstellungen:\r\n\t *   * $directory - spezifiziert das Verzeichnis wo die Backups abgelegt werden\r\n\t *                  (relativ zum IP-Symcon Verzeichnis)\r\n\t *   * $viewID    - ID der gel\u00f6schten View (Angabe von Name oder ID)\r\n\t *   * $viewName  - Name der gel\u00f6schten View (Angabe von Name oder ID)\r\n\t *\r\n\t *\/\r\n\r\n\t\/\/ Konfiguration\r\n\t$directory = &#039;backup\/ipsview\/&#039;;\r\n\t$viewID    = &#039;&#039;;\r\n\t$viewName  = &#039;&#039;;\r\n\r\n\t\/\/ -------------------------------------------------------------------------\r\n\r\n\t\/\/ Konfiguration \u00fcberpr\u00fcfen\r\n\tif ($viewID == &#039;&#039; and $viewName == &#039;&#039;) {\r\n\t\techo &#039;Bitte geben Sie eine ViewID oder einen ViewNamen in der Konfiguration an.&#039;.PHP_EOL;\r\n\t\treturn;\r\n \t}\r\n\r\n   echo &quot;Execute IPSView Backup Restore von View &#039;&quot;.$viewName.&quot;&#039;&quot;.PHP_EOL;\r\n\r\n\t\/\/ Backup Verzeichnis \u00fcberpr\u00fcfen\r\n\t$directory = IPS_GetKernelDir().$directory;\r\n\tif (!file_exists($directory)) {\r\n\t\tdie (&#039;Backup Verzeichnis konnte nicht gefunden werden&#039;);\r\n\t}\r\n\r\n\r\n\t\/\/ Name auf ID \u00fcbersetzen\r\n\tif ($viewID == &#039;&#039;) {\r\n\t\techo &#039;Ermittlung von gel\u00f6schter ViewID f\u00fcr ViewName &quot;&#039;.$viewName.&#039;&quot;&#039;.PHP_EOL;\r\n\t\t$viewID = GetDeletedViewIDFromViewName ($directory, $viewName);\r\n\t\tif ($viewID===false) {\r\n\t\t\tdie (&#039;View mit Namen &quot;&#039;.$viewName.&#039;&quot; konnte im Backup Verzeichnis NICHT gefunden werden&#039;);\r\n\t\t}\r\n\t} else if ($viewID &lt; &#039;10000&#039; or $viewID &gt;= &#039;60000&#039;) {\r\n\t\tdie (&#039;Ung\u00fcltige ViewID &quot;&#039;.$viewID.&#039;&quot; spezifiziert (10000 &lt;= $viewID &lt;= 60000 \/*[Objekt #60000 existiert nicht]*\/)&#039;);\r\n\t}\r\n\r\n\t\/\/ ID auf Name \u00fcbersetzen\r\n\tif ($viewName == &#039;&#039;) {\r\n\t\techo &#039;Ermittlung von gel\u00f6schtem View Name f\u00fcr ViewID &quot;&#039;.$viewID.&#039;&quot;&#039;.PHP_EOL;\r\n\t\t$viewName = GetDeletedViewNameFromViewID ($directory, $viewID);\r\n\t\tif ($viewName===false) {\r\n\t\t\tdie (&#039;View mit ID &quot;&#039;.$viewID.&#039;&quot; konnte im Backup Verzeichnis NICHT gefunden werden&#039;);\r\n\t\t}\r\n\t}\r\n\r\n\t\/\/ ViewID \u00fcberpr\u00fcfen\r\n\techo &#039;\u00dcberpr\u00fcfung von ViewID &quot;&#039;.$viewID.&#039;&quot;&#039;.PHP_EOL;\r\n\t$mediaList = IPS_GetMediaList();\r\n\tforeach ($mediaList as $mediaID) {\r\n\t\tif ($mediaID==$viewID) {\r\n\t\t\tdie (&#039;Eine View mit der ID &quot;&#039;.$viewID.&#039;&quot; existiert bereits im Media Verzeichnis!&#039;);\r\n\t\t}\r\n\t}\r\n\techo &#039;Starte Wiederherstellung von View mit ID &quot;&#039;.$viewID.&#039;&quot; und Name &quot;&#039;.$viewName.&#039;&quot;&#039;.PHP_EOL;\r\n\r\n\t\/\/ View Restore\r\n\techo &#039;Erstelle neues Media File f\u00fcr gel\u00f6schte View&#039;.PHP_EOL;\r\n\t$mediaId      = IPS_CreateMedia(0);\r\n\tIPS_SetName($mediaId, $viewName.&#039;.ipsView&#039;);\r\n\tIPS_SetMediaFile($mediaId, IPS_GetKernelDir().&#039;media&#039;.DIRECTORY_SEPARATOR.$mediaId.&#039;.ipsView&#039;, false);\r\n\r\n\techo &#039;Wiederherstellen des View Inhalts&#039;.PHP_EOL;\r\n\t$mediaContent     = GetLastBackupContent ($directory, $viewID);\r\n\techo &#039;Content=&#039;.substr($mediaContent,0,200).&#039;...&#039;.PHP_EOL;\r\n\t$jsonObj          = json_decode($mediaContent, true);\r\n\t$jsonObj[&#039;ID&#039;]    = $mediaId;\r\n\t$jsonObj[&#039;Name&#039;]  = $viewName.&#039;.ipsView&#039;;\r\n\t$jsonData         = json_encode($jsonObj);\r\n\techo &#039;Content=&#039;.substr($jsonData,0,200).&#039;...&#039;.PHP_EOL;\r\n\t$mediaContent     = base64_encode($jsonData);\r\n\t\r\n\tIPS_SetMediaContent($mediaId, $mediaContent);\r\n\r\n\techo &#039; &#039;.PHP_EOL;\r\n\techo &#039;=============================================================&#039;.PHP_EOL;\r\n\techo &#039;View wurde erfolgreich aus dem Backup wiederhergestellt&#039;.PHP_EOL;\r\n\techo &#039;=============================================================&#039;.PHP_EOL;\r\n\r\n\t\/\/ -------------------------------------------------------------------------\r\n\tfunction GetDeletedViewIDFromViewName ($directory, $viewName) {\r\n\t   $result    = false;\r\n\t   $viewCount = 0;\r\n\t   $viewIDs   = GetAllIDsFromBackupDirectory ($directory);\r\n\t\tforeach ($viewIDs as $viewID) {\r\n\t\t   $mediaContent = GetLastBackupContent ($directory, $viewID);\r\n\t\t\t$jsonObj      = json_decode($mediaContent, true);\r\n\t\t\t$jsonName     = $jsonObj[&#039;Name&#039;];\r\n\t\t\tif ($jsonName == $viewName.&#039;.ipsView&#039;) {\r\n\t\t\t   echo &#039;ViewID &quot;&#039;.$viewID.&#039;&quot; gefunden f\u00fcr ViewName &quot;&#039;.$viewName.&#039;&quot;&#039;.PHP_EOL;\r\n\t\t\t   $result    = $viewID;\r\n\t\t\t   $viewCount = $viewCount + 1;\r\n\t\t\t}\r\n\t\t}\r\n\t\tif ($viewCount &gt; 1) {\r\n\t\t   die (&#039;Es wurden &#039;.$viewCount.&#039; View IDs gefunden, bitte spezifizieren Sie eine eindeutige ID&#039;);\r\n\t\t}\r\n\t\treturn $result;\r\n\t}\r\n\r\n\t\/\/ -------------------------------------------------------------------------\r\n\tfunction GetDeletedViewNameFromViewID ($directory, $viewID) {\r\n\t\t$mediaContent = GetLastBackupContent ($directory, $viewID);\r\n\t\t$jsonData     = base64_decode($mediaContent);\r\n\t\t$jsonObj      = json_decode($jsonData, true);\r\n\t\treturn $jsonObj[&#039;Name&#039;];\r\n\t}\r\n\r\n\t\/\/ -------------------------------------------------------------------------\r\n\tfunction GetAllIDsFromBackupDirectory ($directory) {\r\n\t   $result = array();\r\n\t\tif (($handle=opendir($directory))===false) {\r\n\t\t\tdie (&#039;Error Opening Directory &#039;.$directory);\r\n\t\t}\r\n\t\twhile (($file = readdir($handle))!==false) {\r\n\t\t\t$fileID        = substr($file, 0, 5);\r\n\t\t\tif ($fileID &gt;= &#039;10000&#039; and $fileID &lt;= &#039;60000&#039;) {\r\n\t\t\t\t$result[$fileID] = $fileID;\r\n\t\t\t}\r\n\t\t}\r\n\t\tclosedir($handle);\r\n\t\treturn $result;\r\n\t}\r\n\r\n\t\/\/ -------------------------------------------------------------------------\r\n\tfunction GetLastBackupContent ($directory, $id) {\r\n\t\t$result   = false;\r\n\t\t$lastFile = &#039;&#039;;\r\n\t\tif (($handle=opendir($directory))===false) {\r\n\t\t\tdie (&#039;Error Opening Directory &#039;.$directory);\r\n\t\t}\r\n\r\n\t\twhile (($file = readdir($handle))!==false) {\r\n\t\t\t$fileID        = substr($file, 0, 5);\r\n\t\t\tif ($file &gt; $lastFile and $fileID==$id) {\r\n\t\t\t\t$lastFile = $file;\r\n\t\t\t}\r\n\t\t}\r\n\t\tclosedir($handle);\r\n\t\tif ($lastFile &gt; &#039;&#039;) {\r\n\t\t\t$result   = file_get_contents($directory.$lastFile);\r\n\t\t}\r\n\r\n\t\treturn $result;\r\n\t}\r\n\r\n\r\n\t\/\/ -------------------------------------------------------------------------\r\n?&gt;\r\n<\/pre>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>ACHTUNG: Mittlerweile ist dieses Skript auch als Modul verf\u00fcgbar &#8211;  [&#8230;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[8],"tags":[51,7,4],"class_list":["post-224","post","type-post","status-publish","format-standard","hentry","category-backup","tag-backup","tag-skript","tag-view"],"_links":{"self":[{"href":"https:\/\/ipsview.brownson.at\/index.php?rest_route=\/wp\/v2\/posts\/224","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/ipsview.brownson.at\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/ipsview.brownson.at\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/ipsview.brownson.at\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/ipsview.brownson.at\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=224"}],"version-history":[{"count":5,"href":"https:\/\/ipsview.brownson.at\/index.php?rest_route=\/wp\/v2\/posts\/224\/revisions"}],"predecessor-version":[{"id":756,"href":"https:\/\/ipsview.brownson.at\/index.php?rest_route=\/wp\/v2\/posts\/224\/revisions\/756"}],"wp:attachment":[{"href":"https:\/\/ipsview.brownson.at\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=224"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/ipsview.brownson.at\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=224"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/ipsview.brownson.at\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=224"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}