Monday, November 08, 2010 at 12:05 AM.
system.verbs.builtins.radio.prefs.special.ftp
on ftp (checkboxprompt, introtext) { <<Changes <<2/1/02; 1:03:39 PM by JES <<Added checkbox for passive mode. Defaults to checked. Call radio.upstream.folderNeedsUpstream, instead of setting items in the filetables directly, to trigger uploading to the new upstream location. <<1/19/02; 8:17:26 PM by JES <<When turning on or off the FTP option, clear the cached URLs in the upstream sub-tables in user.radio.settings.files. This prevents the navigator links from linking to the old URLs from before you switched the FTP option on or off. <<1/7/02; 6:27:45 PM by JES <<Made the label for the URL field all caps, instead of Url. <<1/6/02; 3:21:53 AM by JES <<Make sure that the path ends with a trailing slash character, since it's required for the ftp verbs to work. Make the spaces in the user name and repeat password fields into non-breaking spaces. Only add an extra table row for the errorstring if there was an error. <<1/5/02; 9:34:25 PM by PBS <<Changed text from Repeat to Repeat Password. <<12/14/01; 12:41:56 PM by JES <<When switching to xss or ftp, loop over user.radio.settings.files, and change the whenLastUploaded date to date (0), to force the files to upstream to the new location. <<11/29/01; 4:43:57 PM by DW <<Created. Do the whole form in a script. I spent half a day trying to figure out why things aren't getting passed around correctly. Enough. Customize. local (pta = html.getpagetableaddress ()); <<scratchpad.params = pta^ local (htmltext = "", indentlevel = 0); on add (s) { htmltext = htmltext + string.filledstring ("\t", indentlevel) + s + "\r\n"}; local (adrfile, adrrootspec); radio.file.getFileAttributes (user.radio.prefs.upstream.folder, @adrfile); radio.upstream.getUpstreamSpec (adrfile, @adrrootspec); local (errorstring = ""); local (enabled = false, username = "", password = "", server = "", path = "", url = "", flpassive = true); case pta^.method { "GET" { //read the current values local (adrfile, adrrootspec); radio.file.getFileAttributes (user.radio.prefs.upstream.folder, @adrfile); radio.upstream.getUpstreamSpec (adrfile, @adrrootspec); case adrrootspec^.type { "ftp" { enabled = true; username = adrrootspec^.username; password = user.radio.prefs.passwords.[adrrootspec^.passwordName]; server = adrrootspec^.server; path = adrrootspec^.path; url = adrrootspec^.url; if defined (adrrootspec^.mode) { if adrrootspec^.mode != "passive" { flpassive = false}}}}}; "POST" { //if the passwords are okay, write to #upstream.xml local (args = pta^.radioresponder.postargs); try { local (f = nameof (adrrootspec^)); if defined (args.enabled) { //write out a #upstream.xml for FTP'ing enabled = true; username = args.username; password = args.password; server = args.server; path = args.path; url = args.url; if not (path endsWith "/") { //add a trailing slash path = path + "/"}; if args.password != args.passwordRepeat { scriptError ("the passwords don't match")}; user.radio.prefs.passwords.ftp = binary (args.password); if defined (args.usePassiveMode) { flpassive = true} else { //not checked flpassive = false}; radio.upstream.builtinDrivers.ftp.saveUpstreamSpec (f, args.username, "ftp", args.server, args.path, args.url, flpassive)} else { radio.upstream.builtinDrivers.xmlStorageSystem.saveUpstreamSpec (f, user.radio.prefs.usernum, user.prefs.name)}; bundle { //trigger upstream, clear cached upstream URLs radio.upstream.folderNeedsUpstream (user.radio.prefs.upstream.folder)}} <<bundle //old code <<local (adrfile) <<try //1/19/02 JES: clear the cached upstream url for the upstream folder <<user.radio.settings.files.[user.radio.prefs.upstream.folder].upstream.url = "" <<local (lowerUpstreamFolder = string.lower (user.radio.prefs.upstream.folder)) <<for adrfile in @user.radio.settings.files <<if defined (adrfile^.baseUpstreamFolder) <<if string.lower (adrfile^.baseUpstreamFolder) == lowerUpstreamFolder <<adrfile^.upstream.whenLastUploaded = date (0) <<adrfile^.url = "" //1/19/02 JES: clear the cached upstream url for the file else { errorstring = radio.prefs.errorstring ("Can't change the FTP settings because " + tryerror + ".")}}}; bundle { //add the checkbox local (checked = ""); if enabled { checked = " checked"}; add ("<tr><td colspan=\"2\"><input type=\"checkbox\" name=\"enabled\" id=\"enabled\" value=xxx" + checked + "> <label for=\"enabled\">" + checkboxprompt + "</label></td></tr>")}; add ("<tr><td colspan=\"2\"><br>" + introtext + "<br><br></td></tr>"); bundle { //add form fields add ("<tr><td align=\"left\">User name:</td><td valign=\"top\" width=\"80%\" colspan=\"1\"><input type=\"text\" name=\"username\" size=\"50\" maxlength=\"100\" value=\"" + username + "\"></td></tr>"); add ("<tr><td align=\"left\">Password:</td><td valign=\"top\" width=\"80%\" colspan=\"1\"><input type=\"password\" name=\"password\" size=\"50\" maxlength=\"100\" value=\"" + password + "\"></td></tr>"); add ("<tr><td align=\"left\">Repeat Password:</td><td valign=\"top\" width=\"80%\" colspan=\"1\"><input type=\"password\" name=\"passwordRepeat\" size=\"50\" maxlength=\"100\" value=\"" + password + "\"></td></tr>"); add ("<tr><td align=\"left\">Server:</td><td valign=\"top\" width=\"80%\" colspan=\"1\"><input type=\"text\" name=\"server\" size=\"50\" maxlength=\"100\" value=\"" + server + "\"></td></tr>"); add ("<tr><td align=\"left\">Path:</td><td valign=\"top\" width=\"80%\" colspan=\"1\"><input type=\"text\" name=\"path\" size=\"50\" maxlength=\"100\" value=\"" + path + "\"></td></tr>"); add ("<tr><td align=\"left\">URL:</td><td valign=\"top\" width=\"80%\" colspan=\"1\"><input type=\"text\" name=\"url\" size=\"50\" maxlength=\"100\" value=\"" + url + "\"></td></tr>"); local (checked = ""); if flpassive { checked = " checked"}; add ("<tr><td colspan=\"2\"><input type=\"checkbox\" name=\"usePassiveMode\" id=\"usePassiveMode\" value=xxx" + checked + "> <label for=\"usePassiveMode\">Check this box to use passive mode (PASV).</label></td></tr>")}; if errorstring != "" { add ("<tr><td colspan=\"2\"><br>" + errorstring + "</td></tr>")}; return (htmltext)} <<bundle //test code <<html.setpagetableaddress (@scratchpad.params) <<ftp ("xxx", "yyy")
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.