Monday, November 08, 2010 at 12:05 AM.
system.verbs.builtins.radio.html.backupAndRestorePage
on backupAndRestorePage () { <<Changes <<2/8/03; 6:27:32 PM by JES <<If there's no pageHeader in the page table, patch the JavaScript or meta-refresh tag into the template instead. <<1/29/03; 5:56:47 PM by JES <<If the browser is IE for Windows, use JavaScript to scroll to the bottom of the page instead of using an anchor in the URL. <<1/23/03; 5:18:35 PM by JES <<Created. Run the backup/verify/restore page. local (pta = html.getPageTableAddress ()); pta^.title = radio.string.getLocalizedString ("backupAndRestore.title"); local (htext); on add (s) { htext = htext + (s + "\r");}; on confirm (s, function) { s = "<p>" + s + "<br /><br /></p>";; s = s + "<p><form method=\"POST\">"; s = s + "<input type=\"hidden\" name=\"" + function + "\" value=\"" + function + "\" />"; s = s + "<input type=\"submit\" name=\"confirm\" value=\"" + radio.string.getLocalizedString ("backupAndRestore." + function + "Button") + "\" /> <input type=\"submit\" name=\"cancel\" value=\"" + radio.string.getLocalizedString ("backupAndRestore.cancelButton") + "\" />";; s = s + "<br /><br /><br /></p>"; return (s)}; on error (s) { s = "<p>" + s + "</p>";; return (s)}; radio.backup.init (); if pta^.method == "POST" { local (adrargs = @pta^.radioResponder.postArgs); if defined (adrargs^.cancel) { radio.webserver.redirect ("http://" + pta^.host + pta^.uri); return ("")}; if defined (adrargs^.backupNow) { if defined (adrargs^.confirm) { thread.callScript (@radio.backup.backupAndVerify, {}); thread.sleepTicks (6)} //wait for 0.1sec for the backup to start else { //get user confirmation return (confirm (radio.string.getLocalizedString ("backupAndRestore.backupConfirmation"), "backupNow"))}}; if defined (adrargs^.restoreNow) { if defined (adrargs^.confirm) { if file.exists (user.radio.backup.prefs.folder + "files.xml") { thread.callScript (@radio.backup.restore, {user.radio.backup.prefs.folder})} else { //try to restore from the backup folder in the cloud local (homeUrl = user.radio.prefs.defaultCloudData.url); //this comes from the community server local (backupFolderUrl = homeUrl + "backups/"); local (filesUrl = backupFolderUrl + "files.xml"); local (urlparts = string.urlSplit (filesUrl)); local (server = urlparts[2], port = 80); if server contains ":" { port = string.nthField (server, ":", 2); server = string.nthField (server, ":", 1)}; local (headers = tcp.httpClient (server:server, port:port, path:urlparts[3], ctFollowRedirects:3, flJustHeaders:true)); local (code = string.nthField (headers, " ", 2)); if code == "200" { //files.xml exists in the cloud -- restore can proceed thread.callScript (@radio.backup.restore, {backupFolderUrl})} else { //error return (error (radio.string.getLocalizedString ("backupAndRestore.backupNotFoundError")))}}; thread.sleepTicks (6)} //wait for 0.1sec for the restore to start else { //get user confirmation return (confirm (radio.string.getLocalizedString ("backupAndRestore.restoreConfirmation"), "restoreNow"))}}}; if system.temp.radio.backup.flInProgress { local (userAgent = pta^.requestHeaders.["User-Agent"]); local (flIeWin = (userAgent contains "MSIE") and (userAgent contains "Win") ); pta^.title = pta^.title + " - " + radio.string.getLocalizedString ("backupAndRestore.inProgressSubTitle"); bundle { //patch in a meta tag for refreshing every 15 seconds -- we can see the status this way local (flPageHeader = false, theString); if defined (pta^.pageHeader) { flPageHeader = true}; if flPageHeader { //get the header theString = string (pta^.pageHeader)} else { //get the template -- there's no header theString = string (pta^.template)}; local (ix = string.patternMatch ("<head>", string.lower (theString)) + 6); if ix > 0 { //there'd better be a <head> tag, or we can't add any code to the <head> of the page local (urlToRefresh = "http://" + pta^.host + "" + pta^.uri + "?run"); if not flIeWin { //work around an IE bug -- URLs with #anchor references in them won't refresh automatically urlToRefresh = urlToRefresh + "#status"}; theString = string.insert ("<META HTTP-EQUIV=\"Refresh\" CONTENT=\"15; URL=" + urlToRefresh + "\">", theString, ix); if flIeWin { //use JavaScript to do the refresh instead of a meta-refresh tag local (jscript = "function window.onload () {document.all[\"status\"].scrollIntoView();}"); theString = string.insert ("<script language=\"JavaScript\">" + jscript + "</script>", theString, ix)}; if flPageHeader { //assign the header table.assign (@pta^.pageHeader, theString)} else { //assign the template -- there's no header table.assign (@pta^.template, theString)}}}; add (radio.string.getLocalizedString ("backupAndRestore.inProgress")); add ("<ul>" + system.temp.radio.backup.statusHtml + "</ul>"); add ("<a name=\"status\"> </a>")} else { //not in progress -- either we're done, or we're waiting for the user to tell us to do something if defined (pta^.radioResponder.getArgs.run) { //the last operation is complete -- tell the user case system.temp.radio.backup.lastOperation { "backup" { if system.temp.radio.backup.lastError != "" { //there was an error add (radio.string.getLocalizedString ("backupAndRestore.backupError")); add (system.temp.radio.backup.lastError)} else { //no error add (radio.string.getLocalizedString ("backupAndRestore.backupComplete"))}}; "restore" { if system.temp.radio.backup.lastError != "" { //there was an error add (radio.string.getLocalizedString ("backupAndRestore.restoreError")); add (system.temp.radio.backup.lastError)} else { //no error add (radio.string.getLocalizedString ("backupAndRestore.restoreComplete"))}}}} else { //backup/restore text & buttons bundle { //backup now and intro text add ("<p>" + radio.string.getLocalizedString ("backupAndRestore.backupNowIntro") + "</p>"); add ("<p><form method=\"POST\"><input type=\"submit\" name=\"backupNow\" value=\"" + radio.string.getLocalizedString ("backupAndRestore.backupNowButton") + "\" /></form><br /></p>")}; bundle { //restore now and intro text add ("<p>" + radio.string.getLocalizedString ("backupAndRestore.restoreNowIntro") + "</p>"); add ("<p><form method=\"POST\"><input type=\"submit\" name=\"restoreNow\" value=\"" + radio.string.getLocalizedString ("backupAndRestore.restoreNowButton") + "\" /></form><br /></p>")}}}; return (htext)}
This listing is for code that runs in the OPML Editor environment. I created these listings because I wanted the search engines to index it, so that when I want to look up something in my codebase I don't have to use the much slower search functionality in my object database. Dave Winer.