Monday, November 08, 2010 at 12:05 AM.
system.verbs.builtins.radio.html.unsubscribe
<<Changes: <<8/18/03; 11:56:06 AM by JES <<Unsubscribe through a call to xml.aggregator.unsubscribeService instead of doing the work here. Fixes a bug where callbacks at aggregatorData.callbacks.unsubscribeService were not being called. <<12/25/01; 10:22:43 PM by JES <<Call radio.string.decodeEntities on the channel name and description. Gets rid of ''s in the text. <<11/28/01; 11:24:15 PM by JES <<Localized. <<10/19/01; 10:41:40 PM by JES <<Ported from myUserLandWebsite.unsubscribe. Rewrote post handling -- it's much simpler now. It also handles preservation of the menu searchArg. <<Archive <<3/4/01; 5:31:01 PM by JES <<Toss the HotList cache if the user confirms unsubscribing from a channel. <<3/4/01; 6:20:31 PM by JES <<Toss the homepage cache when unsubscribing from a channel. local (pta = html.getpagetableaddress ()); pta^.title = radio.string.getlocalizedstring ("unsubscribe.title"); <<workspace.pt = pta^; edit (@workspace.pt) local (adrdata = xml.aggregator.init ()); local (adrservices = @adrdata^.services); local (adrtrash = @adrdata^.trash); local (adrargs); bundle { //set adrargs adrargs = @pta^.radioResponder.getArgs; if not defined (adrargs^) { new (tableType, adrargs)}}; bundle { //watch for confirmation if defined (adrargs^.xmlUrl) { if defined (adrargs^.flconfirmed) { <<workspace.args = adrargs^; edit (@workspace.args) <<bundle //old code <<local (adrservice = @adrservices^.[adrargs^.xmlUrl]) <<adrtrash^.[nameof (adrservice^)] = adrservice^ <<delete (adrservice) xml.aggregator.unsubscribeService (adrargs^.xmlUrl, adrdata); adrdata^.settings.flSubscriptionsChanged = true; radio.hotlist.clearCache (); <<xml.aggregator.clearCache () local (menustring = ""); if defined (adrargs^.menu) { menustring = "?menu=" + adrargs^.menu}; radio.webserver.redirect ("/system/pages/news" + menustring); return ("")}}}; local (xmlUrl = adrargs^.xmlUrl); local (adrservice = @adrservices^.[adrargs^.xmlUrl]); local (htmltext = "\r", indentlevel = 0); on add (s) { htmltext = htmltext + string.filledstring ("\t", indentlevel) + s + "\r\n"}; bundle { //explanatory text local (t); new (tableType, @t); t.channellink = "<a href=\"" + adrservice^.compilation.channellink + "\" title=\"" + string.replaceAll (radio.string.decodeEntities (adrservice^.compilation.channeldescription), "\"", "\\\"") + "\">" + radio.string.decodeEntities (adrservice^.compilation.channeltitle) + "</a>"; add (radio.string.getlocalizedstring ("unsubscribe.confirm", @t))}; add ("<blockquote>"); indentlevel++; add ("<form>"); indentlevel++; add ("<input type=\"submit\" name=\"flconfirmed\" value=\"" + radio.string.getlocalizedstring ("unsubscribe.unsubscribeButton") + "\">"); add ("<input type=\"hidden\" name=\"xmlUrl\" value=\"" + xmlUrl + "\">"); if defined (adrargs^.menu) { //get args for the current page add ("<input type=\"hidden\" name=\"menu\" value=\"" + adrargs^.menu + "\">")}; add ("</form>"); indentlevel--; add ("</blockquote>"); indentlevel--; return (htmltext)
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.